Blame view

src/main/java/com/huaheng/pc/shipment/shipmentDetail/controller/ShipmentDetailController.java 13.2 KB
pengcheng authored
1
2
3
4
package com.huaheng.pc.shipment.shipmentDetail.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
5
import com.huaheng.common.constant.QuantityConstant;
周鸿 authored
6
import com.huaheng.common.utils.Wrappers;
pengcheng authored
7
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
8
import com.huaheng.common.exception.service.ServiceException;
9
import com.huaheng.common.support.Convert;
pengcheng authored
10
import com.huaheng.common.utils.StringUtils;
周鸿 authored
11
import com.huaheng.common.utils.poi.ExcelUtil;
pengcheng authored
12
13
14
15
16
17
18
19
import com.huaheng.common.utils.security.ShiroUtils;
import com.huaheng.framework.aspectj.lang.annotation.Log;
import com.huaheng.framework.aspectj.lang.constant.BusinessType;
import com.huaheng.framework.web.controller.BaseController;
import com.huaheng.framework.web.domain.AjaxResult;
import com.huaheng.framework.web.page.PageDomain;
import com.huaheng.framework.web.page.TableDataInfo;
import com.huaheng.framework.web.page.TableSupport;
20
21
22
23
import com.huaheng.pc.config.company.domain.Company;
import com.huaheng.pc.config.company.service.CompanyService;
import com.huaheng.pc.config.material.domain.Material;
import com.huaheng.pc.config.material.service.MaterialService;
pengcheng authored
24
import com.huaheng.pc.config.shipmentPreference.service.ShipmentPreferenceService;
pengcheng authored
25
26
import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService;
周鸿 authored
27
import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail;
pengcheng authored
28
29
import com.huaheng.pc.shipment.shipmentDetail.domain.ShipmentDetail;
import com.huaheng.pc.shipment.shipmentDetail.service.ShipmentDetailService;
pengcheng authored
30
import com.huaheng.pc.shipment.shipmentHeader.domain.ShipmentHeader;
xumiao authored
31
32
import com.huaheng.pc.shipment.shippingCombination.domain.ShippingCombinationDetailModel;
import com.huaheng.pc.shipment.shippingCombination.service.ShippingCombinationService;
pengcheng authored
33
34
35
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
36
import org.springframework.stereotype.Service;
pengcheng authored
37
38
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;
周鸿 authored
39
import org.springframework.web.multipart.MultipartFile;
pengcheng authored
40
41
42
43
44
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.text.NumberFormat;
import java.util.ArrayList;
pengcheng authored
45
import java.util.Date;
pengcheng authored
46
47
48
49
50
51
52
53
54
55
56
57
58
import java.util.List;

/**
 * 出库明细 信息操作处理
 * 
 * @author huaheng
 * @date 2018-08-19
 */
@Controller
@RequestMapping("/shipment/shipmentDetail")
public class ShipmentDetailController extends BaseController
{
    private String prefix = "shipment/shipmentDetail";
xumiao authored
59
60
61

	@Autowired
	private ShippingCombinationService shippingCombinationService;
pengcheng authored
62
63
	@Autowired
	private ShipmentDetailService shipmentDetailService;
pengcheng authored
64
65
	@Autowired
	private InventoryDetailService inventoryDetailService;
pengcheng authored
66
67
	@Autowired
	private ShipmentPreferenceService shipmentPreferenceService;
68
69
70
71
	@Resource
	private MaterialService materialService;
	@Resource
	private CompanyService companyService;
pengcheng authored
72
73
pengcheng authored
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97

	@RequiresPermissions("shipment:bill:view")
    @GetMapping("/{shipmentId}/{shipmentCode}")
	public String shipmentDetail(@PathVariable("shipmentId") String shipmentId, @PathVariable("shipmentCode") String shipmentCode,@PathVariable("inventoryStatus") String inventoryStatus, ModelMap mmap)
	{
        mmap.put("receiptId", shipmentId);
		mmap.put("shipmentCode", shipmentCode);
		mmap.put("inventoryStatus",inventoryStatus);
	    return prefix + "/shipmentDetail";
	}

	/**
	 * 查询出库明细列表
	 */
	@RequiresPermissions("shipment:bill:list")
	@Log(title = "出库-出库单", operating= "查看出库明细", action = BusinessType.GRANT)
	@PostMapping("/list")
	@ResponseBody
	public TableDataInfo list(ShipmentDetail shipmentDetail)
	{
		LambdaQueryWrapper<ShipmentDetail> lambdaQueryWrapper = Wrappers.lambdaQuery();
		PageDomain pageDomain = TableSupport.buildPageRequest();
		Integer pageNum = pageDomain.getPageNum();
		Integer pageSize = pageDomain.getPageSize();
pengcheng authored
98
99
100
		List<ShipmentDetail> shipmentDetails =new ArrayList<>();
		List<ShipmentDetail> shipmentDetailList =new ArrayList<>();
		List<ShipmentDetail> shipmentDetailLists =new ArrayList<>();
pengcheng authored
101
102
103

		lambdaQueryWrapper
				.eq(ShipmentDetail::getWarehouseCode,ShiroUtils.getWarehouseCode())
pengcheng authored
104
				.in(ShipmentDetail::getCompanyCode,ShiroUtils.getCompanyCodeList())
pengcheng authored
105
				.eq(StringUtils.isNotEmpty(shipmentDetail.getShipmentCode()),ShipmentDetail::getShipmentCode,shipmentDetail.getShipmentCode())
106
				.eq(shipmentDetail.getShipmentId()!=null,ShipmentDetail::getShipmentId,shipmentDetail.getShipmentId())
xumiao authored
107
				.notIn(ShiroUtils.getWarehouseCode().equals("KS0001"),ShipmentDetail::getStatus, QuantityConstant.SHIPMENT_HEADER_COMPLETED,QuantityConstant.SHIPMENT_HEADER_GROUPDISK)
pengcheng authored
108
109
110
111
112
113
114
115
116
117
118
				.orderByAsc(ShipmentDetail::getId);

		if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize)){
			/**
			 * 使用分页查询
			 */
			Page<ShipmentDetail> page = new Page<>(pageNum, pageSize);
			IPage<ShipmentDetail> iPage = shipmentDetailService.page(page, lambdaQueryWrapper);
			return getMpDataTable(iPage.getRecords(),iPage.getTotal());
		} else {
			List<ShipmentDetail> list = shipmentDetailService.list(lambdaQueryWrapper);
pengcheng authored
119
			for(ShipmentDetail item : list){
pengcheng authored
120
				InventoryDetail inventory=new InventoryDetail();
pengcheng authored
121
122
123
124
				inventory.setWarehouseCode(item.getWarehouseCode());
				inventory.setMaterialCode(item.getMaterialCode());
				inventory.setInventorySts(item.getInventorySts());
				item.setInventoryQty(inventoryDetailService.getSumQty(inventory));
肖超群 authored
125
				if(item.getQty().compareTo(item.getTaskQty()) !=0){
pengcheng authored
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
					if(item.getInventoryQty().compareTo(new BigDecimal(0)) == 0){
						shipmentDetails.add(item);
					}else {
						shipmentDetailList.add(item);
					}
				}else {
					shipmentDetailLists.add(item);
				}

			}
			if(shipmentDetailList !=null && shipmentDetailList.size()>0) {
				shipmentDetails.addAll(shipmentDetailList);
			}
			if(shipmentDetailLists !=null && shipmentDetailLists.size()>0) {
				shipmentDetails.addAll(shipmentDetailLists);
			}
			return getDataTable(shipmentDetails);
pengcheng authored
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
		}
	}

	/**
	 * 新增出库明细
	 */
	@GetMapping("/add")
	public String add(String shipmentId, String shipmentCode,String companyId, String companyCode, String sourceCode, ModelMap mmap)
	{
        mmap.put("shipmentId", shipmentId);
        mmap.put("shipmentCode", shipmentCode);
		mmap.put("companyCode", companyCode);
		mmap.put("sourceCode", sourceCode);
	    return prefix + "/add";
	}

	/**
	 * 新增保存出库明细
	 */
	@RequiresPermissions("shipment:bill:add")
	@Log(title = "出库-出库单", operating= "新增出库明细", action = BusinessType.INSERT)
	@PostMapping("/add")
	@ResponseBody
	public AjaxResult addSave(ShipmentDetail shipmentDetail)
	{		
		return shipmentDetailService.insertDetail(shipmentDetail);
	}

	/**
	 * 修改出库明细
	 */
	@GetMapping("/edit/{id}")
	public String edit(@PathVariable("id") Integer id, ModelMap mmap)
	{
		ShipmentDetail shipmentDetail = shipmentDetailService.getById(id);
		mmap.put("shipmentDetail", shipmentDetail);
	    return prefix + "/edit";
	}

	/**
	 * 修改保存出库明细
	 */
	@RequiresPermissions("shipment:bill:edit")
	@Log(title = "出库-出库单", operating= "修改出库明细", action = BusinessType.UPDATE)
	@PostMapping("/edit")
	@ResponseBody
	public AjaxResult editSave(ShipmentDetail shipmentDetail)
	{
191
192
193
		if(shipmentDetail.getStatus()>100 ){
			return AjaxResult.error("超过订单池,出库明细不能修改");
		}
pengcheng authored
194
		shipmentDetail.setLastUpdated(new Date());
tongzhonghao authored
195
		shipmentDetail.setLastUpdatedBy(ShiroUtils.getLoginName());
pengcheng authored
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
		 if(shipmentDetailService.saveOrUpdate(shipmentDetail)==false){
		 	return AjaxResult.error("出库明细修改失败");
		 }else {
		 	return AjaxResult.success("出库明细修改成功");
		 }
	}

	/**
	 * 删除出库明细
	 */
	@RequiresPermissions("shipment:bill:remove")
	@Log(title = "出库-出库单", operating= "删除出库明细", action = BusinessType.DELETE)
	@PostMapping( "/remove")
	@ResponseBody
	public AjaxResult remove(String ids)
	{
xqs authored
212
213
214
		if (StringUtils.isEmpty(ids)) {
            return AjaxResult.error("id不能为空");
        }
215
216
217
218
219
220
		for (Integer id : Convert.toIntArray(ids))
		{
			ShipmentDetail shipmentDetail=shipmentDetailService.getById(id);
			if(shipmentDetail == null){
				return AjaxResult.error("id为"+id+"的单据明细找不到");
			}
pengcheng authored
221
			if(shipmentDetail.getStatus()>=100){
222
223
224
				return AjaxResult.error("此单据状态在订单池和拣货完成之间,无法删除");
			}
		}
pengcheng authored
225
226
227
228
229
230
        AjaxResult result = shipmentDetailService.deleteDetail(ids);
		return result;
	}
pengcheng authored
231
232
233
234
235
236
237
238
239
240
241
	@RequiresPermissions("shipment:bill:view")
	@PostMapping( "/shippingCombination")
	@ResponseBody
	public AjaxResult ShippingCombination(String shipmentCode, ModelMap map){
		map.put("code", shipmentCode);
		Integer status = 100;
		String ids="";
		List<ShipmentHeader> shipmentHeaderList =shipmentPreferenceService.checkShipmentProcess(ids,status,shipmentCode);
		return AjaxResult.success("成功");
	}
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264


	@RequiresPermissions("shipment:bill:report")
	@Log(title = "出库-出库单", operating = "打印出库单明细报表", action = BusinessType.OTHER)
	@GetMapping("/report/{ids}")
	public String report(@PathVariable("ids") Integer[] ids, ModelMap mmap)
	{
		List<ShipmentDetail> list=new ArrayList<ShipmentDetail>();
		for(Integer id:ids){
			if(id!=null) {
				ShipmentDetail shipmentDetail = shipmentDetailService.getById(id);

				//获得物料信息
				LambdaQueryWrapper<Material> materialLambd = Wrappers.lambdaQuery();
				materialLambd.eq(Material::getCode,shipmentDetail.getMaterialCode())
						.eq(Material::getWarehouseCode,ShiroUtils.getWarehouseCode());
				Material material =materialService.getOne(materialLambd);
				if(material == null){
					throw new ServiceException("系统没有此物料编码"+shipmentDetail.getMaterialCode());
				}
				shipmentDetail.setMaterialSpec(material.getSpec());
				shipmentDetail.setMaterialName(material.getName());
				NumberFormat nf = NumberFormat.getInstance();
肖超群 authored
265
				shipmentDetail.setQty(new BigDecimal(nf.format(shipmentDetail.getQty())));
266
267
268
269
270
271
272

				LambdaQueryWrapper<Company>  companyLambda =Wrappers.lambdaQuery();
				companyLambda.eq(Company::getCode,shipmentDetail.getCompanyCode());
				Company company= companyService.getOne(companyLambda);
				if(company == null){
					throw new ServiceException("系统没有此货主编码"+shipmentDetail.getCompanyCode());
				}
273
274
275
				if(shipmentDetail.getShipmentCode().substring(0,2).equals("SO")){
					shipmentDetail.setMoCode(shipmentDetail.getSourceCode());
				}
276
277
278
279
280
281
282
				shipmentDetail.setCompanyName(company.getName());
				list.add(shipmentDetail);
			}
			mmap.put("shipmentDetails", list);
		}
		return prefix + "/report";
	}
周鸿 authored
283
284
285
286
287
288
289

	@PostMapping("/importData")
	@ResponseBody
	public AjaxResult importData (MultipartFile file) throws Exception {
		ExcelUtil<ShipmentDetail> util = new ExcelUtil<>(ShipmentDetail.class);
		List<ShipmentDetail> list = util.importExcel(file.getInputStream());
		String operName = ShiroUtils.getLoginName();
290
291
		String message = shipmentDetailService.insertExcelData(list, false, operName);
		return AjaxResult.success(message);
周鸿 authored
292
	}
293
294
295
296
297
298
299
300
301
302
303
304
	/**
	 * 导出模板
	 *
	 * @return
	 * @throws Exception
	 */
	@GetMapping("/importTemplate")
	@ResponseBody
	public AjaxResult importTemplate () {
		ExcelUtil<ShipmentDetail> util = new ExcelUtil<>(ShipmentDetail.class);
		return util.importTemplateExcel("入库详情");
	}
xumiao authored
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323

	//@RequiresPermissions("shipment:bill:list")
	@GetMapping("/shipmentContainerDetails/{code}")
	public String shipmentContainerDetail(@PathVariable("code") String code, ModelMap mmap)
	{
		mmap.put("shipmentCode", code);
		return prefix + "/shipmentContainerDetail";
	}

	/**
	 * 查询出库组盘明细列表
	 */
	//@RequiresPermissions("shipment:bill:list")
	@Log(title ="出库-出库单", operating = "查看出库组盘明细", action = BusinessType.GRANT)
	@PostMapping("/shipmentContainerDetails")
	@ResponseBody
	public TableDataInfo list(ShippingCombinationDetailModel shippingCombinationDetailModel)
	{
		startPage();
xumiao authored
324
		shippingCombinationDetailModel.setWarehouseCode(ShiroUtils.getWarehouseCode());
xumiao authored
325
326
327
		List<ShippingCombinationDetailModel> list = shippingCombinationService.selectOfView(shippingCombinationDetailModel) ;
		return getDataTable(list);
	}
周鸿 authored
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355

	/**
	 * 新增出库明细根据物料显示信息
	 */
	@Log(title = "出库-出库单", operating= "新增出库明细", action = BusinessType.INSERT)
	@PostMapping("/getMaterial")
	@ResponseBody
	public AjaxResult getMaterial(String materialCode,String companyCode)
	{
		ShipmentDetail shipmentDetail =new ShipmentDetail();
		Material material =new Material();
		material.setWarehouseCode(ShiroUtils.getWarehouseCode());
		material.setCode(materialCode);
		material = materialService.getMaterialByDomain(material);
		if(material == null){
			return AjaxResult.error("物料编码错误");
		}
		InventoryDetail inventory=new InventoryDetail();
		inventory.setCompanyCode(companyCode);
		inventory.setWarehouseCode(ShiroUtils.getWarehouseCode());
		inventory.setMaterialCode(materialCode);
		inventory.setInventorySts("good");
		shipmentDetail.setInventoryQty(inventoryDetailService.getSumQty(inventory));
		shipmentDetail.setMaterialName(material.getName());
		shipmentDetail.setBarCode(material.getBarcode());
		shipmentDetail.setMaterialSpec(material.getSpec());
		return AjaxResult.success(shipmentDetail);
	}
pengcheng authored
356
}