diff --git a/src/main/java/com/huaheng/api/mes/service/MesServiceImpl.java b/src/main/java/com/huaheng/api/mes/service/MesServiceImpl.java index 3b4109d..ed1c94c 100644 --- a/src/main/java/com/huaheng/api/mes/service/MesServiceImpl.java +++ b/src/main/java/com/huaheng/api/mes/service/MesServiceImpl.java @@ -297,7 +297,6 @@ public class MesServiceImpl implements IMesService { if (detail.getLMPKID() != null) { shipmentDetail.setLMPKID(detail.getLMPKID()); } - shipmentDetail.setShipmentId(shipmentHeader.getId()); shipmentDetail.setShipmentCode(shipmentHeader.getCode()); shipmentDetail.setCompanyCode("BHF"); @@ -313,12 +312,31 @@ public class MesServiceImpl implements IMesService { throw new ServiceException("生成出库单详情失败"); } - //如果通知单号和车间、仓库相同,自动合并单据 - + String warehouse = shipmentHeader.getWarehouse(); + String workshop = shipmentHeader.getWorkshop(); + String noticeNo = shipmentHeader.getNoticeNo(); + if (StringUtils.isNotEmpty(noticeNo) && StringUtils.isNotEmpty(warehouse) && StringUtils.isNotEmpty(workshop)) { + List<ShipmentHeader> automaticMergeCount = shipmentHeaderService.list(new LambdaQueryWrapper<ShipmentHeader>() + .ne(ShipmentHeader::getCode, shipmentHeader.getCode()) + .eq(ShipmentHeader::getFirstStatus, QuantityConstant.SHIPMENT_CONTAINER_BUILD) + .eq(ShipmentHeader::getLastStatus, QuantityConstant.SHIPMENT_CONTAINER_BUILD) + .eq(ShipmentHeader::getDeleted, 0) + .eq(ShipmentHeader::getWarehouse, warehouse) + .eq(ShipmentHeader::getWorkshop, workshop) + .eq(ShipmentHeader::getNoticeNo, noticeNo)); + if (!automaticMergeCount.isEmpty()) { + String ids = automaticMergeCount.get(0).getId() + "," + shipmentHeader.getId(); + AjaxResult analysis = shipmentHeaderService.analysis(ids); + if (analysis.hasErr()) { + throw new ServiceException("合并单据失败," + analysis.getMsg()); + } + } + } return AjaxResult.success(receiptDTO); } + /** * 取消入库 */ diff --git a/src/main/java/com/huaheng/pc/shipment/shipmentHeader/controller/ShipmentHeaderController.java b/src/main/java/com/huaheng/pc/shipment/shipmentHeader/controller/ShipmentHeaderController.java index 623d2bb..e7165e0 100644 --- a/src/main/java/com/huaheng/pc/shipment/shipmentHeader/controller/ShipmentHeaderController.java +++ b/src/main/java/com/huaheng/pc/shipment/shipmentHeader/controller/ShipmentHeaderController.java @@ -498,125 +498,8 @@ public class ShipmentHeaderController extends BaseController { @Log(title = "出库-出库单", operating = "单据合并", action = BusinessType.OTHER) @PostMapping("/addWave") @ResponseBody - @Transactional public AjaxResult analysis(String ids, String codeNull) { - BigDecimal totalQty = BigDecimal.ZERO; - int totalLines = 0; - if (StringUtils.isEmpty(ids)) { - throw new ServiceException("id不能为空"); - } - // 查询需要合并的头表 - String[] headerIdArr = ids.split(","); - LambdaQueryWrapper<ShipmentHeader> headerWrapper = Wrappers.lambdaQuery(); - headerWrapper.in(ShipmentHeader::getId, headerIdArr); - List<ShipmentHeader> shipmentHeaderList = shipmentHeaderService.list(headerWrapper); - if (shipmentHeaderList.isEmpty()) { - throw new ServiceException("单据主表不存在!!!"); - } - shipmentHeaderList.forEach(shipmentHeader -> { - //新增出库单历史 - shipmentHeaderHistoryService.saveById(shipmentHeader.getId().toString(), "合并前单据"); - if (!"MOM".equals(shipmentHeader.getCreatedBy())) { - throw new ServiceException("手动创建的单据,不允许合并!!!"); - } - if ("merge".equals(shipmentHeader.getShipmentType())) { - throw new ServiceException("单据类型为合并单据,不允许合并!!!"); - } - if (shipmentHeader.getLastStatus() > QuantityConstant.RECEIPT_HEADER_POOL || shipmentHeader.getFirstStatus() > QuantityConstant.RECEIPT_HEADER_POOL) { - throw new ServiceException("单据已被使用,不能合并,必须是新建状态或订单池!"); - } - - }); - // 创建合并后的头表 - ShipmentHeader shipmentHeader = new ShipmentHeader(); - shipmentHeader.setShipmentType("merge"); - String code = shipmentHeaderServiceImpl.createCode(shipmentHeader.getShipmentType()); - shipmentHeader.setCode(code); - shipmentHeader.setWarehouseCode("CS0001"); - shipmentHeader.setCompanyCode("BHF"); - shipmentHeader.setCreatedBy("MOM"); - shipmentHeader.setFirstStatus(QuantityConstant.SHIPMENT_HEADER_BUILD); - shipmentHeader.setLastStatus(QuantityConstant.SHIPMENT_HEADER_BUILD); - StringBuilder recordID = new StringBuilder(); - StringBuilder workShops = new StringBuilder(); - Set<String> uniqueWorkshops = new HashSet<>(); - for (ShipmentHeader header : shipmentHeaderList) { - uniqueWorkshops.add(header.getWorkshop()); - } - for (String workshop : uniqueWorkshops) { - workShops.append(workshop).append(","); - } - // 移除最后一个逗号 - if (workShops.length() > 0) { - workShops.setLength(workShops.length() - 1); - } - shipmentHeaderList.forEach(header -> recordID.append(header.getId()).append(",")); - shipmentHeader.setWorkshop(workShops.toString()); - shipmentHeader.setRecordID(recordID.toString()); - shipmentHeaderService.save(shipmentHeader); - - // 修改合并子表 - List<ShipmentDetail> headerListData = new ArrayList<>(); - for (ShipmentHeader header : shipmentHeaderList) { - totalQty = totalQty.add(header.getTotalQty()); - totalLines = totalLines + header.getTotalLines(); - LambdaQueryWrapper<ShipmentDetail> detailWrapper = Wrappers.lambdaQuery(); - detailWrapper.eq(ShipmentDetail::getShipmentId, header.getId()); - List<ShipmentDetail> headerList = shipmentDetailService.list(detailWrapper); - headerList.forEach(shipmentDetail -> { - shipmentDetail.setRecordID(header.getId()); - shipmentDetail.setRecordCode(header.getCode()); - shipmentDetail.setPreMergerWorkshop(header.getWorkshop()); - shipmentDetail.setShipmentId(shipmentHeader.getId()); - shipmentDetail.setShipmentCode(shipmentHeader.getCode()); - shipmentDetail.setCreatedBy("MOM"); - shipmentDetail.setLastUpdatedBy("MOM"); - shipmentDetail.setStatus(QuantityConstant.TASK_STATUS_BUILD); - }); - headerListData.addAll(headerList); - } - // 保存合并后的子表 - shipmentDetailService.saveBatch(headerListData); - - //保存总数量 总行数 - shipmentHeader.setTotalLines(totalLines); - shipmentHeader.setTotalQty(totalQty); - shipmentHeaderService.updateById(shipmentHeader); - - //// 把合并完的头表置为删除状态 - //shipmentHeaderList.forEach(header -> { - // header.setDeleted(true); - //}); - //// 保存置为删除状态的头表 - //shipmentHeaderService.updateBatchById(shipmentHeaderList); - - // shipmentDetailService.saveWave(ids,code); - - - List<ShipmentHeader> source = shipmentHeaderService.list(new LambdaQueryWrapper<ShipmentHeader>().in(ShipmentHeader::getId, headerIdArr)); - List<Integer> shipmentHeaderIds = new ArrayList<>(); - for (ShipmentHeader header : source) { - shipmentHeaderIds.add(header.getId()); - } - if (!shipmentHeaderService.removeByIds(shipmentHeaderIds)) { - throw new ServiceException("删除头表失败"); - } - - List<Integer> shipmentDetailIds = new ArrayList<>(); - - for (ShipmentHeader header : source) { - List<ShipmentDetail> details = shipmentDetailService.list(new LambdaQueryWrapper<ShipmentDetail>().eq(ShipmentDetail::getShipmentId, header.getId())); - for (ShipmentDetail shipmentDetail : details) { - shipmentDetailIds.add(shipmentDetail.getId()); - } - } - - if (shipmentDetailIds.size() > 0) { - if (!shipmentDetailService.removeByIds(shipmentDetailIds)) { - throw new ServiceException("删除明细表失败"); - } - } - return AjaxResult.success("合并成功!"); + return shipmentHeaderService.analysis(ids); } /** diff --git a/src/main/java/com/huaheng/pc/shipment/shipmentHeader/service/ShipmentHeaderService.java b/src/main/java/com/huaheng/pc/shipment/shipmentHeader/service/ShipmentHeaderService.java index 5b58c02..335f327 100644 --- a/src/main/java/com/huaheng/pc/shipment/shipmentHeader/service/ShipmentHeaderService.java +++ b/src/main/java/com/huaheng/pc/shipment/shipmentHeader/service/ShipmentHeaderService.java @@ -7,10 +7,10 @@ import com.baomidou.mybatisplus.extension.service.IService; import java.lang.reflect.InvocationTargetException; import java.util.List; -public interface ShipmentHeaderService extends IService<ShipmentHeader>{ +public interface ShipmentHeaderService extends IService<ShipmentHeader> { //新增出库主单 - AjaxResult<Boolean> saveHeader(ShipmentHeader shipmentHeader) ; + AjaxResult<Boolean> saveHeader(ShipmentHeader shipmentHeader); //根据单据类型建单据号 String createCode(String shipmentType); @@ -26,4 +26,6 @@ public interface ShipmentHeaderService extends IService<ShipmentHeader>{ List<ShipmentHeader> selectListByCreated(); List<ShipmentHeader> getLatestShipment(); + + AjaxResult analysis(String ids); } diff --git a/src/main/java/com/huaheng/pc/shipment/shipmentHeader/service/ShipmentHeaderServiceImpl.java b/src/main/java/com/huaheng/pc/shipment/shipmentHeader/service/ShipmentHeaderServiceImpl.java index 9bb2237..7887e91 100644 --- a/src/main/java/com/huaheng/pc/shipment/shipmentHeader/service/ShipmentHeaderServiceImpl.java +++ b/src/main/java/com/huaheng/pc/shipment/shipmentHeader/service/ShipmentHeaderServiceImpl.java @@ -32,11 +32,9 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.lang.reflect.InvocationTargetException; +import java.math.BigDecimal; import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Map; +import java.util.*; @Service public class ShipmentHeaderServiceImpl extends ServiceImpl<ShipmentHeaderMapper, ShipmentHeader> implements ShipmentHeaderService { @@ -297,4 +295,124 @@ public class ShipmentHeaderServiceImpl extends ServiceImpl<ShipmentHeaderMapper, return shipmentHeaderMapper.getLatestShipment(); } + @Override + @Transactional(rollbackFor = Exception.class) + public AjaxResult analysis(String ids) { + BigDecimal totalQty = BigDecimal.ZERO; + int totalLines = 0; + if (StringUtils.isEmpty(ids)) { + throw new ServiceException("id不能为空"); + } + // 查询需要合并的头表 + String[] headerIdArr = ids.split(","); + LambdaQueryWrapper<ShipmentHeader> headerWrapper = Wrappers.lambdaQuery(); + headerWrapper.in(ShipmentHeader::getId, headerIdArr); + List<ShipmentHeader> shipmentHeaderList = list(headerWrapper); + if (shipmentHeaderList.isEmpty()) { + throw new ServiceException("单据主表不存在!!!"); + } + shipmentHeaderList.forEach(shipmentHeader -> { + //新增出库单历史 + shipmentHeaderHistoryService.saveById(shipmentHeader.getId().toString(), "合并前单据"); + if (!"MOM".equals(shipmentHeader.getCreatedBy())) { + throw new ServiceException("手动创建的单据,不允许合并!!!"); + } + if ("merge".equals(shipmentHeader.getShipmentType())) { + throw new ServiceException("单据类型为合并单据,不允许合并!!!"); + } + if (shipmentHeader.getLastStatus() > QuantityConstant.RECEIPT_HEADER_POOL || shipmentHeader.getFirstStatus() > QuantityConstant.RECEIPT_HEADER_POOL) { + throw new ServiceException("单据已被使用,不能合并,必须是新建状态或订单池!"); + } + + }); + // 创建合并后的头表 + ShipmentHeader shipmentHeader = new ShipmentHeader(); + shipmentHeader.setShipmentType("merge"); + String code = createCode(shipmentHeader.getShipmentType()); + shipmentHeader.setCode(code); + shipmentHeader.setWarehouseCode("CS0001"); + shipmentHeader.setCompanyCode("BHF"); + shipmentHeader.setCreatedBy("MOM"); + shipmentHeader.setFirstStatus(QuantityConstant.SHIPMENT_HEADER_BUILD); + shipmentHeader.setLastStatus(QuantityConstant.SHIPMENT_HEADER_BUILD); + StringBuilder recordID = new StringBuilder(); + StringBuilder workShops = new StringBuilder(); + Set<String> uniqueWorkshops = new HashSet<>(); + for (ShipmentHeader header : shipmentHeaderList) { + uniqueWorkshops.add(header.getWorkshop()); + } + for (String workshop : uniqueWorkshops) { + workShops.append(workshop).append(","); + } + // 移除最后一个逗号 + if (workShops.length() > 0) { + workShops.setLength(workShops.length() - 1); + } + shipmentHeaderList.forEach(header -> recordID.append(header.getId()).append(",")); + shipmentHeader.setWorkshop(workShops.toString()); + shipmentHeader.setRecordID(recordID.toString()); + save(shipmentHeader); + + // 修改合并子表 + List<ShipmentDetail> headerListData = new ArrayList<>(); + for (ShipmentHeader header : shipmentHeaderList) { + totalQty = totalQty.add(header.getTotalQty()); + totalLines = totalLines + header.getTotalLines(); + LambdaQueryWrapper<ShipmentDetail> detailWrapper = Wrappers.lambdaQuery(); + detailWrapper.eq(ShipmentDetail::getShipmentId, header.getId()); + List<ShipmentDetail> headerList = shipmentDetailService.list(detailWrapper); + headerList.forEach(shipmentDetail -> { + shipmentDetail.setRecordID(header.getId()); + shipmentDetail.setRecordCode(header.getCode()); + shipmentDetail.setPreMergerWorkshop(header.getWorkshop()); + shipmentDetail.setShipmentId(shipmentHeader.getId()); + shipmentDetail.setShipmentCode(shipmentHeader.getCode()); + shipmentDetail.setCreatedBy("MOM"); + shipmentDetail.setLastUpdatedBy("MOM"); + shipmentDetail.setStatus(QuantityConstant.TASK_STATUS_BUILD); + }); + headerListData.addAll(headerList); + } + // 保存合并后的子表 + shipmentDetailService.saveBatch(headerListData); + + //保存总数量 总行数 + shipmentHeader.setTotalLines(totalLines); + shipmentHeader.setTotalQty(totalQty); + updateById(shipmentHeader); + + //// 把合并完的头表置为删除状态 + //shipmentHeaderList.forEach(header -> { + // header.setDeleted(true); + //}); + //// 保存置为删除状态的头表 + //shipmentHeaderService.updateBatchById(shipmentHeaderList); + // shipmentDetailService.saveWave(ids,code); + + + List<ShipmentHeader> source = list(new LambdaQueryWrapper<ShipmentHeader>().in(ShipmentHeader::getId, headerIdArr)); + List<Integer> shipmentHeaderIds = new ArrayList<>(); + for (ShipmentHeader header : source) { + shipmentHeaderIds.add(header.getId()); + } + if (!removeByIds(shipmentHeaderIds)) { + throw new ServiceException("删除头表失败"); + } + + List<Integer> shipmentDetailIds = new ArrayList<>(); + for (ShipmentHeader header : source) { + List<ShipmentDetail> details = shipmentDetailService.list(new LambdaQueryWrapper<ShipmentDetail>().eq(ShipmentDetail::getShipmentId, header.getId())); + for (ShipmentDetail shipmentDetail : details) { + shipmentDetailIds.add(shipmentDetail.getId()); + } + } + + if (!shipmentDetailIds.isEmpty()) { + if (!shipmentDetailService.removeByIds(shipmentDetailIds)) { + throw new ServiceException("删除明细表失败"); + } + } + return AjaxResult.success("合并成功"); + } + }