package com.huaheng.pc.shipment.shipmentDetail.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.huaheng.common.constant.QuantityConstant; import com.huaheng.common.utils.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.huaheng.common.exception.service.ServiceException; import com.huaheng.common.support.Convert; import com.huaheng.common.utils.StringUtils; import com.huaheng.common.utils.poi.ExcelUtil; 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; 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; import com.huaheng.pc.config.shipmentPreference.service.ShipmentPreferenceService; import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail; import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService; import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail; import com.huaheng.pc.shipment.shipmentDetail.domain.ShipmentDetail; import com.huaheng.pc.shipment.shipmentDetail.service.ShipmentDetailService; import com.huaheng.pc.shipment.shipmentHeader.domain.ShipmentHeader; import com.huaheng.pc.shipment.shippingCombination.domain.ShippingCombinationDetailModel; import com.huaheng.pc.shipment.shippingCombination.service.ShippingCombinationService; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.stereotype.Service; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.math.BigDecimal; import java.text.NumberFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * 出库明细 信息操作处理 * * @author huaheng * @date 2018-08-19 */ @Controller @RequestMapping("/shipment/shipmentDetail") public class ShipmentDetailController extends BaseController { private String prefix = "shipment/shipmentDetail"; @Autowired private ShippingCombinationService shippingCombinationService; @Autowired private ShipmentDetailService shipmentDetailService; @Autowired private InventoryDetailService inventoryDetailService; @Autowired private ShipmentPreferenceService shipmentPreferenceService; @Resource private MaterialService materialService; @Resource private CompanyService companyService; @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(); List<ShipmentDetail> shipmentDetails =new ArrayList<>(); List<ShipmentDetail> shipmentDetailList =new ArrayList<>(); List<ShipmentDetail> shipmentDetailLists =new ArrayList<>(); lambdaQueryWrapper .eq(ShipmentDetail::getWarehouseCode,ShiroUtils.getWarehouseCode()) .in(ShipmentDetail::getCompanyCode,ShiroUtils.getCompanyCodeList()) .eq(StringUtils.isNotEmpty(shipmentDetail.getShipmentCode()),ShipmentDetail::getShipmentCode,shipmentDetail.getShipmentCode()) .eq(shipmentDetail.getShipmentId()!=null,ShipmentDetail::getShipmentId,shipmentDetail.getShipmentId()) .notIn(ShiroUtils.getWarehouseCode().equals("KS0001"),ShipmentDetail::getStatus, QuantityConstant.SHIPMENT_HEADER_COMPLETED,QuantityConstant.SHIPMENT_HEADER_GROUPDISK) .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); for(ShipmentDetail item : list){ InventoryDetail inventory=new InventoryDetail(); inventory.setWarehouseCode(item.getWarehouseCode()); inventory.setMaterialCode(item.getMaterialCode()); inventory.setInventorySts(item.getInventorySts()); inventory.setCompanyCode(item.getCompanyCode()); item.setInventoryQty(inventoryDetailService.getSumQty(inventory)); if(item.getQty().compareTo(item.getTaskQty()) !=0){ 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); } } /** * 新增出库明细 */ @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) { if(shipmentDetail.getStatus()>100 ){ return AjaxResult.error("超过订单池,出库明细不能修改"); } shipmentDetail.setLastUpdated(new Date()); shipmentDetail.setLastUpdatedBy(ShiroUtils.getLoginName()); 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) { if (StringUtils.isEmpty(ids)) { return AjaxResult.error("id不能为空"); } for (Integer id : Convert.toIntArray(ids)) { ShipmentDetail shipmentDetail=shipmentDetailService.getById(id); if(shipmentDetail == null){ return AjaxResult.error("id为"+id+"的单据明细找不到"); } if(shipmentDetail.getStatus()>=100){ return AjaxResult.error("此单据状态在订单池和拣货完成之间,无法删除"); } } AjaxResult result = shipmentDetailService.deleteDetail(ids); return result; } @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("成功"); } @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(); shipmentDetail.setQty(new BigDecimal(nf.format(shipmentDetail.getQty()))); LambdaQueryWrapper<Company> companyLambda =Wrappers.lambdaQuery(); companyLambda.eq(Company::getCode,shipmentDetail.getCompanyCode()); Company company= companyService.getOne(companyLambda); if(company == null){ throw new ServiceException("系统没有此货主编码"+shipmentDetail.getCompanyCode()); } if(shipmentDetail.getShipmentCode().substring(0,2).equals("SO")){ shipmentDetail.setMoCode(shipmentDetail.getSourceCode()); } shipmentDetail.setCompanyName(company.getName()); list.add(shipmentDetail); } mmap.put("shipmentDetails", list); } return prefix + "/report"; } @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(); String message = shipmentDetailService.insertExcelData(list, false, operName); return AjaxResult.success(message); } /** * 导出模板 * * @return * @throws Exception */ @GetMapping("/importTemplate") @ResponseBody public AjaxResult importTemplate () { ExcelUtil<ShipmentDetail> util = new ExcelUtil<>(ShipmentDetail.class); return util.importTemplateExcel("入库详情"); } //@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(); shippingCombinationDetailModel.setWarehouseCode(ShiroUtils.getWarehouseCode()); List<ShippingCombinationDetailModel> list = shippingCombinationService.selectOfView(shippingCombinationDetailModel) ; return getDataTable(list); } /** * 新增出库明细根据物料显示信息 */ @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); } }