diff --git a/src/main/java/com/huaheng/pc/shipment/shipmentContainerHeader/service/ShipmentContainerHeaderService.java b/src/main/java/com/huaheng/pc/shipment/shipmentContainerHeader/service/ShipmentContainerHeaderService.java index c67cc88..a9f7ce6 100644 --- a/src/main/java/com/huaheng/pc/shipment/shipmentContainerHeader/service/ShipmentContainerHeaderService.java +++ b/src/main/java/com/huaheng/pc/shipment/shipmentContainerHeader/service/ShipmentContainerHeaderService.java @@ -5,6 +5,7 @@ import com.huaheng.pc.shipment.shipmentContainerDetail.domain.ShipmentContainerD import com.huaheng.pc.shipment.shipmentContainerHeader.domain.ShipmentCombinationModel; import com.huaheng.pc.shipment.shipmentContainerHeader.domain.ShipmentContainerHeader; import com.baomidou.mybatisplus.extension.service.IService; +import com.huaheng.pc.shipment.shipmentDetail.domain.ShipmentDetail; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -28,6 +29,8 @@ public interface ShipmentContainerHeaderService extends IService<ShipmentContain AjaxResult autoCombination(String shipmentCode); + AjaxResult autoCombination(List<ShipmentDetail> shipmentDetailList); + AjaxResult checkForCancelCombination(List<Integer> shipmentContainerIds); AjaxResult createTask(List<Integer> idList); diff --git a/src/main/java/com/huaheng/pc/shipment/shipmentContainerHeader/service/ShipmentContainerHeaderServiceImpl.java b/src/main/java/com/huaheng/pc/shipment/shipmentContainerHeader/service/ShipmentContainerHeaderServiceImpl.java index b761c33..e689b9d 100644 --- a/src/main/java/com/huaheng/pc/shipment/shipmentContainerHeader/service/ShipmentContainerHeaderServiceImpl.java +++ b/src/main/java/com/huaheng/pc/shipment/shipmentContainerHeader/service/ShipmentContainerHeaderServiceImpl.java @@ -387,16 +387,21 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont @Override @Transactional public AjaxResult autoCombination(String shipmentCode) { - int num=0; - AjaxResult ajaxResult=new AjaxResult(); - - LambdaQueryWrapper<ShipmentDetail> lambdaQueryWrapper=Wrappers.lambdaQuery(); - lambdaQueryWrapper.eq(ShipmentDetail::getShipmentCode,shipmentCode) - .eq(ShipmentDetail::getWarehouseCode,ShiroUtils.getWarehouseCode()); + LambdaQueryWrapper<ShipmentDetail> lambdaQueryWrapper = Wrappers.lambdaQuery(); + lambdaQueryWrapper.eq(ShipmentDetail::getShipmentCode, shipmentCode) + .eq(ShipmentDetail::getWarehouseCode, ShiroUtils.getWarehouseCode()); List<ShipmentDetail> shipmentDetailList = shipmentDetailService.list(lambdaQueryWrapper); - if(shipmentDetailList.size()<1 || shipmentDetailList==null){ + if (shipmentDetailList.size() < 1 || shipmentDetailList == null) { return AjaxResult.error("找不到子单链"); } + return this.autoCombination(shipmentDetailList); + } + + + //出库自动组盘 + public AjaxResult autoCombination(List<ShipmentDetail> shipmentDetailList){ + int num = 0; + List<Integer> list=new ArrayList<>(); for (ShipmentDetail item : shipmentDetailList) { //获取需要出库数量 BigDecimal shipmentQty = item.getShipQty().subtract(item.getRequestQty()); @@ -412,6 +417,9 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont // search.setInventorySts(item.getInventorySts()); //物料状态 List<InventoryDetail> inventoryList = shippingCombinationService.getInventorys(item); + if(inventoryList.size() < 1 && item.getWaveId() != 0){ + return AjaxResult.error("主单为"+item.getShipmentCode()+"子单id为"+item.getId() + "的单据没有库存,波次失败"); + } if (inventoryList.size() < 1) { num = num + 1; } else { @@ -426,11 +434,12 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont shipmentCombination.setInventoryDetailId(inventory.getId()); shipmentCombination.setShipmentDetailId(item.getId()); shipmentCombination.setType((short) 300); - List<Integer> list=new ArrayList<>(); + //如果库存数 >= 待出库数,组盘数就是待出库数并且结束组盘,否则组盘数就是库存数 if (inventoryQty.compareTo(shipmentQty) > -1) { shipmentCombination.setShipQty(shipmentQty); ShipmentContainerHeader shipmentContainerHeader=this.combination(shipmentCombination); + list.add(shipmentContainerHeader.getId()); } else { shipmentCombination.setShipQty(inventoryQty); ShipmentContainerHeader shipmentContainerHeader=this.combination(shipmentCombination); @@ -443,7 +452,7 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont if(num==shipmentDetailList.size()){ throw new ServiceException("单据物料在此库区没有库存,无法出库"); } - return AjaxResult.success("成功"); + return AjaxResult.success("成功",list); } /** diff --git a/src/main/java/com/huaheng/pc/shipment/wave/controller/WaveController.java b/src/main/java/com/huaheng/pc/shipment/wave/controller/WaveController.java index 306f83c..75aa9fa 100644 --- a/src/main/java/com/huaheng/pc/shipment/wave/controller/WaveController.java +++ b/src/main/java/com/huaheng/pc/shipment/wave/controller/WaveController.java @@ -165,9 +165,12 @@ public class WaveController extends BaseController { @Log(title = "出库-波次", operating = "开始波次", action = BusinessType.UPDATE) @PostMapping("/startWave") @ResponseBody - public AjaxResult editSave(Wave wave) { - wave.setLastUpdatedBy(ShiroUtils.getLoginName()); - return toAjax(waveService.updateById(wave)); + public AjaxResult starWave(String ids) { + if (StringUtils.isEmpty(ids)){ + return AjaxResult.error("id不能为空"); + } + AjaxResult result=waveService.startWave(ids); + return result; } } diff --git a/src/main/java/com/huaheng/pc/shipment/wave/service/WaveService.java b/src/main/java/com/huaheng/pc/shipment/wave/service/WaveService.java index b170945..d0bf227 100644 --- a/src/main/java/com/huaheng/pc/shipment/wave/service/WaveService.java +++ b/src/main/java/com/huaheng/pc/shipment/wave/service/WaveService.java @@ -1,11 +1,57 @@ package com.huaheng.pc.shipment.wave.service; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.huaheng.common.support.Convert; +import com.huaheng.common.utils.security.ShiroUtils; +import com.huaheng.framework.web.domain.AjaxResult; +import com.huaheng.pc.shipment.shipmentContainerHeader.service.ShipmentContainerHeaderService; +import com.huaheng.pc.shipment.shipmentDetail.domain.ShipmentDetail; +import com.huaheng.pc.shipment.shipmentDetail.service.ShipmentDetailService; import com.huaheng.pc.shipment.wave.domain.Wave; import com.huaheng.pc.shipment.wave.mapper.WaveMapper; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; @Service public class WaveService extends ServiceImpl<WaveMapper, Wave> { + + @Autowired + private ShipmentDetailService shipmentDetailService; + @Autowired + private ShipmentContainerHeaderService shipmentContainerHeaderService; + + //开始波次,对带有此波次号的单据进行后续的后台操作 + + @Transactional + public AjaxResult startWave(String ids) { + List<ShipmentDetail> list = new ArrayList<>(); + for (Integer id : Convert.toIntArray(ids)) { + //找到此波次的单据 + LambdaQueryWrapper<ShipmentDetail> lam = Wrappers.lambdaQuery(); + lam.eq(ShipmentDetail::getWaveId,id) + .eq(ShipmentDetail::getWarehouseCode, ShiroUtils.getWarehouseCode()); + List<ShipmentDetail> shipmentDetails=shipmentDetailService.list(lam); + + //整合所有加入波次的单据 + if(shipmentDetails != null){ + list.addAll(shipmentDetails); + } + } + + //自动组盘 + AjaxResult ajaxResult=shipmentContainerHeaderService.autoCombination(list); + if(ajaxResult.getData() != null){ + //生成任务 + shipmentContainerHeaderService.createTask(Arrays.asList(Convert.toIntArray(ajaxResult.getData().toString()))); + } + return AjaxResult.success("波次运行成功"); + } } diff --git a/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java b/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java index 67ec6bf..9edc3ee 100644 --- a/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java +++ b/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java @@ -502,6 +502,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea detail.setMaterialCode(DataUtils.getString(map.get("materialCode")));//物料号 detail.setMaterialName(DataUtils.getString(map.get("materialName")));//物料名称 detail.setMaterialSpec(DataUtils.getString(map.get("materialSpec")));//物料规格 + detail.setMaterialUnit(DataUtils.getString(map.get("materialUnit")));//物料单位 detail.setReceiptCode(DataUtils.getString(map.get("receiptCode")));//入库单编码 detail.setReceiptDetailId(DataUtils.getInteger(map.get("receiptDetailId")));//入库单明细ID detail.setBatch(DataUtils.getString(map.get("batch")));//批次 @@ -534,6 +535,8 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea inventoryTransaction.setContainerCode(DataUtils.getString(map.get("containerCode"))); inventoryTransaction.setMaterialCode(DataUtils.getString(map.get("materialCode"))); inventoryTransaction.setMaterialName(DataUtils.getString(map.get("materialName"))); + inventoryTransaction.setMaterialSpec(DataUtils.getString(map.get("materialSpec")));//物料规格 + inventoryTransaction.setMaterialUnit(DataUtils.getString(map.get("materialUnit")));//物料单位 inventoryTransaction.setBillCode(DataUtils.getString(map.get("receiptCode"))); inventoryTransaction.setBillDetailId(DataUtils.getInteger(map.get("receiptDetailId"))); inventoryTransaction.setBatch(DataUtils.getString(map.get("batch"))); @@ -1293,8 +1296,6 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea shipmentContainerHeaderLambdaUpdateWrapper.eq(ShipmentContainerHeader::getId,task.getAllocationHeadId()); if (! shipmentContainerHeaderService.update(shipmentContainerHeader, shipmentContainerHeaderLambdaUpdateWrapper)) throw new ServiceException("更新组盘头状态失败"); - - //修改出库单状态 LambdaQueryWrapper<TaskDetail> taskDetailLambdaQueryWrapper = Wrappers.lambdaQuery(); taskDetailLambdaQueryWrapper.eq(TaskDetail::getTaskId,task.getId());