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 e689b9d..ebdb1aa 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 @@ -21,6 +21,8 @@ import com.huaheng.pc.shipment.shipmentHeader.domain.ShipmentHeader; import com.huaheng.pc.shipment.shipmentHeader.service.ShipmentHeaderService; import com.huaheng.pc.shipment.shippingCombination.domain.ShippingSearch; import com.huaheng.pc.shipment.shippingCombination.service.ShippingCombinationService; +import com.huaheng.pc.shipment.wave.domain.Wave; +import com.huaheng.pc.shipment.wave.service.WaveService; import com.huaheng.pc.task.taskDetail.domain.TaskDetail; import com.huaheng.pc.task.taskDetail.service.TaskDetailService; import com.huaheng.pc.task.taskHeader.domain.ShipmentTaskCreateModel; @@ -63,6 +65,8 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont private TaskHeaderService taskHeaderService; @Autowired private TaskDetailService taskDetailService; + @Autowired + private WaveService waveService; @Override @@ -249,6 +253,7 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont shipmentContainerDetail.setMaterialSpec(material.getSpec()); shipmentContainerDetail.setQty(shipmentCombinationModel.getShipQty()); shipmentContainerDetail.setCreated(null); + shipmentContainerDetail.setWaveId(shipmentDetail.getWaveId()); shipmentContainerDetail.setCreatedBy(ShiroUtils.getLoginName()); shipmentContainerDetailService.save(shipmentContainerDetail); } @@ -418,6 +423,9 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont List<InventoryDetail> inventoryList = shippingCombinationService.getInventorys(item); if(inventoryList.size() < 1 && item.getWaveId() != 0){ + Wave wave = waveService.getById(item.getWaveId()); + wave.setStatus(999); + waveService.updateById(wave); return AjaxResult.error("主单为"+item.getShipmentCode()+"子单id为"+item.getId() + "的单据没有库存,波次失败"); } if (inventoryList.size() < 1) { diff --git a/src/main/java/com/huaheng/pc/shipment/shipmentDetail/service/ShipmentDetailServiceImpl.java b/src/main/java/com/huaheng/pc/shipment/shipmentDetail/service/ShipmentDetailServiceImpl.java index fee6620..ec62ba5 100644 --- a/src/main/java/com/huaheng/pc/shipment/shipmentDetail/service/ShipmentDetailServiceImpl.java +++ b/src/main/java/com/huaheng/pc/shipment/shipmentDetail/service/ShipmentDetailServiceImpl.java @@ -191,8 +191,10 @@ public class ShipmentDetailServiceImpl extends ServiceImpl<ShipmentDetailMapper, if (shipmentDetail.getWaveId() != 0) { throw new ServiceException("主单id为" + id + "子单id为" + shipmentDetail.getId() + "的子单已加入波次,不可再加入波次"); } - shipmentDetailList.add(shipmentDetail); - qty=qty.add(shipmentDetail.getShipQty()); + if(shipmentDetail.getShipQty().compareTo(shipmentDetail.getRequestQty())!=0) { + shipmentDetailList.add(shipmentDetail); + qty = qty.add(shipmentDetail.getShipQty().subtract(shipmentDetail.getRequestQty())); + } } } @@ -236,7 +238,9 @@ public class ShipmentDetailServiceImpl extends ServiceImpl<ShipmentDetailMapper, //修改出库子单,加入波次ID,并修改状态为波次 for(ShipmentDetail shipmentDetail :shipmentDetailList){ shipmentDetail.setWaveId(wave.getId()); - shipmentDetail.setStatus(200); + if(shipmentDetail.getStatus()<200) { + shipmentDetail.setStatus(200); + } } flag = this.updateBatchById(shipmentDetailList); @@ -248,7 +252,6 @@ public class ShipmentDetailServiceImpl extends ServiceImpl<ShipmentDetailMapper, //修改主单状态 for (Integer id : Convert.toIntArray(ids)){ ShipmentHeader shipmentHeader = shipmentHeaderService.getById(id); - shipmentHeader.setFirstStatus(200); shipmentHeader.setLastStatus(200); shipmentHeaderList.add(shipmentHeader); } 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 22c9dd0..630f5f8 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 @@ -175,10 +175,10 @@ public class WaveController extends BaseController { /** - * 开始波次 + * 释放 */ @RequiresPermissions("shipment:wave:freed") - @Log(title = "出库-波次", operating = "开始波次", action = BusinessType.UPDATE) + @Log(title = "出库-波次", operating = "波次释放", action = BusinessType.UPDATE) @PostMapping("/freed") @ResponseBody public AjaxResult freed(String ids) { 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 67d171f..2968a98 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 @@ -10,14 +10,20 @@ 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.shipmentHeader.domain.ShipmentHeader; +import com.huaheng.pc.shipment.shipmentHeader.service.ShipmentHeaderService; import com.huaheng.pc.shipment.wave.domain.Wave; import com.huaheng.pc.shipment.wave.mapper.WaveMapper; +import com.huaheng.pc.task.taskDetail.domain.TaskDetail; +import com.huaheng.pc.task.taskDetail.service.TaskDetailService; +import com.huaheng.pc.task.taskHeader.service.TaskHeaderService; 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.HashSet; import java.util.List; @Service @@ -28,6 +34,12 @@ public class WaveService extends ServiceImpl<WaveMapper, Wave> { private ShipmentDetailService shipmentDetailService; @Autowired private ShipmentContainerHeaderService shipmentContainerHeaderService; + @Autowired + private TaskDetailService taskDetailService; + @Autowired + private TaskHeaderService taskHeaderService; + @Autowired + private ShipmentHeaderService shipmentHeaderService; /** * 开始波次,对带有此波次号的单据进行后续的后台操作 @@ -44,14 +56,14 @@ public class WaveService extends ServiceImpl<WaveMapper, Wave> { List<ShipmentDetail> list = new ArrayList<>(); for (Integer id : Convert.toIntArray(ids)) { - //查看此波次的状态,状态不为o时,无法开始波次 + //1、查看此波次的状态,状态不为o时,无法开始波次 Wave wave = this.getById(id); if(wave == null || wave.getStatus() != 0){ return AjaxResult.error("id为"+id+"的波次找不到,或者状态不能做开始操作"); } waves.add(wave); - //找到此波次的单据 + //2、找到此波次的单据 LambdaQueryWrapper<ShipmentDetail> lam = Wrappers.lambdaQuery(); lam.eq(ShipmentDetail::getWaveId,id) .eq(ShipmentDetail::getWarehouseCode, ShiroUtils.getWarehouseCode()); @@ -63,15 +75,16 @@ public class WaveService extends ServiceImpl<WaveMapper, Wave> { } } - //自动组盘 + //3、自动组盘 AjaxResult ajaxResult=shipmentContainerHeaderService.autoCombination(list); if(ajaxResult.getData() != null){ - //生成任务 + //4、生成任务 shipmentContainerHeaderService.createTask(Arrays.asList(Convert.toIntArray(ajaxResult.getData().toString()))); } + //5、修改波次的状态 for(Wave wave : waves){ - wave.setStatus(400); + wave.setStatus(300); wave.setCurrentWaveStep("生成任务"); } Boolean flag = this.updateBatchById(waves); @@ -84,12 +97,85 @@ public class WaveService extends ServiceImpl<WaveMapper, Wave> { /** * 释放波次,执行任务 + * 1、查看此波次的状态,是否可以释放波次 + * 2、查看波次的状态,是成功释放还是失败释放 + * 成功释放:1、找到此波次的所有子任务 + * 2、根据子任务选出主任务 + * 3、将这些主任务执行 + * 失败释放:1.找到次波次的所有子单据 + * 2.修改子单据的波次为0 + * 3.修改主子单的状态 * @param ids * @return */ @Transactional public AjaxResult freed(String ids) { + Boolean flag = false; + List<TaskDetail> taskDetailList = new ArrayList<>(); + for (Integer id : Convert.toIntArray(ids)) { + + //1、查看此波次是否可以释放 + Wave wave = this.getById(id); + if(wave == null || (wave.getStatus()!=300 && wave.getStatus()!=999)){ + return AjaxResult.error(id+"波次不可释放"); + } + + //2、查看此波次的状态,看是成功释放还是失败释放 + if(wave.getStatus() == 300) { + //成功释放——找到此波次的未执行的子任务列表 + LambdaQueryWrapper<TaskDetail> lam = Wrappers.lambdaQuery(); + lam.eq(TaskDetail::getWarehouseCode, ShiroUtils.getWarehouseCode()) + .eq(TaskDetail::getStatus, 0) + .eq(TaskDetail::getWaveId, id); + List<TaskDetail> taskDetails = taskDetailService.list(lam); + if (taskDetails != null) { + taskDetailList.addAll(taskDetails); + } + }else { + //失败释放——找到次波次的所有子单据 + LambdaQueryWrapper<ShipmentDetail> detailLam = Wrappers.lambdaQuery(); + detailLam.eq(ShipmentDetail::getWarehouseCode,ShiroUtils.getWarehouseCode()) + .eq(ShipmentDetail::getWaveId,wave.getId()); + List<ShipmentDetail> shipmentDetails =shipmentDetailService.list(detailLam); + + //2.修改子单据的波次为0 + //3.修改主子单的状态 + HashSet<Integer> set = new HashSet<>(); + for(ShipmentDetail item : shipmentDetails){ + if(item.getShipQty().compareTo(item.getRequestQty())!=0) { + item.setStatus(0); + } + item.setWaveId(0); + set.add(item.getShipmentId()); + } + flag = shipmentDetailService.updateBatchById(shipmentDetails); + if(flag == false){ + throw new ServiceException("修改出库子单状态失败"); + } + for(Integer shipmentId :set){ + ShipmentHeader shipmentHeader = shipmentHeaderService.getById(shipmentId); + if(shipmentHeader == null){ + throw new ServiceException("没有对应的出库主单"); + } + if(shipmentHeader.getFirstStatus()<= 200) { + shipmentHeader.setFirstStatus(0); + flag = shipmentHeaderService.updateById(shipmentHeader); + if (flag == false) { + throw new ServiceException("修改出库主单失败"); + } + } + } + } + } + + HashSet<Integer> idSet = new HashSet(); + //成功释放——遍历子任务列表,找出主单(distinct)id + for(TaskDetail item : taskDetailList){ + idSet.add(item.getTaskId()); + } + //成功释放——将这些主任务执行 + taskHeaderService.sendTaskToWcs(idSet.toArray(new Integer[idSet.size()])); - return null; + 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 59a21d0..0445d0d 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 @@ -296,6 +296,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea taskDetail.setFromLocation(task.getFromLocation()); taskDetail.setToLocation(task.getToLocation()); taskDetail.setStatus(0); + taskDetail.setWaveId(shipmentContainerDetail.getWaveId()); taskDetail.setInventorySts(shipmentContainerDetail.getInventorySts()); taskDetail.setTaskType(task.getTaskType()); taskDetail.setLastUpdatedBy(ShiroUtils.getLoginName());