diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/domain/DeliveryNoticeItemVo.java b/ruoyi-admin/src/main/java/com/ruoyi/api/domain/DeliveryNoticeItemVo.java index f538835..8e0a4d1 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/api/domain/DeliveryNoticeItemVo.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/domain/DeliveryNoticeItemVo.java @@ -72,6 +72,10 @@ public class DeliveryNoticeItemVo { /**旧项目号**/ private String oldProjectNo; + /**存放地点 1 立库 2平库*/ + private String stg_location; + + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ToErpServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ToErpServiceImpl.java index 2394501..7e69963 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ToErpServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ToErpServiceImpl.java @@ -1,5 +1,6 @@ package com.ruoyi.api.service.impl; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; @@ -22,7 +23,6 @@ import com.ruoyi.in.stockindeatilback.domain.InStockinDetailBack; import com.ruoyi.in.stockindeatilback.service.IInStockinDetailBackService; import com.ruoyi.in.stockindetail.domain.InStockinDetail; import com.ruoyi.in.stockindetail.service.IInStockinDetailService; -import com.ruoyi.in.stockinfinish.domain.InStockinFinish; import com.ruoyi.in.stockinfinish.service.IInStockinFinishService; import com.ruoyi.job.mydojob.service.IMydoJobService; import com.ruoyi.job.mydojobdetail.domain.MydoJobDetail; @@ -32,31 +32,24 @@ import com.ruoyi.log.service.IRequestLogService; import com.ruoyi.out.outStockout.domain.OutStockout; import com.ruoyi.out.outStockout.service.IOutStockoutService; import com.ruoyi.out.outStockoutBack.domain.OutStockoutBack; -import com.ruoyi.out.outStockoutBack.mapper.OutStockoutBackMapper; import com.ruoyi.out.outStockoutBack.service.IOutStockoutBackService; import com.ruoyi.out.outStockoutDetail.domain.OutStockoutDetail; import com.ruoyi.out.outStockoutDetail.service.IOutStockoutDetailService; -import com.ruoyi.out.outStockoutDetail.mapper.OutStockoutDetailMapper; -import com.ruoyi.out.outStockout.mapper.OutStockoutMapper; import com.ruoyi.out.outStockoutDetailBack.domain.OutStockoutDetailBack; import com.ruoyi.out.outStockoutDetailBack.service.IOutStockoutDetailBackService; import com.ruoyi.stock.stock.domain.BasStock; import com.ruoyi.stock.stock.service.IBasStockService; -import io.swagger.v3.oas.models.security.SecurityScheme; -import org.apache.pdfbox.pdmodel.interactive.viewerpreferences.PDViewerPreferences; -import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; +import java.util.*; import java.math.BigDecimal; -import java.util.Map; import java.util.stream.Collectors; +import static com.ruoyi.framework.datasource.DynamicDataSourceContextHolder.log; + /** * 作业统计 Service 实现 */ @@ -119,23 +112,265 @@ public class ToErpServiceImpl implements IToErpService { * @param deliveryNoticeVo 送货通知单数据对象,包含单据基本信息和明细列表 * @return AjaxResult 操作结果,包含成功或错误信息 */ +// @Override +// @Transactional(rollbackFor = Exception.class) +// public AjaxResult receiveDeliveryNotice(DeliveryNoticeVo deliveryNoticeVo) { +// +// if (deliveryNoticeVo == null || deliveryNoticeVo.getDetailList() == null || deliveryNoticeVo.getDetailList().isEmpty()) { +// return AjaxResult.error("单据或明细不能为空"); +// } +// String billType = deliveryNoticeVo.getBillType(); +// String opType = deliveryNoticeVo.getOpType(); +//// String status = deliveryNoticeVo.getStatus(); +// int type = 0; +// try { +// type = Integer.parseInt(billType); +// } catch (Exception ignored) { +// } +// +// // 处理入库单相关操作(单据类型1-4) +// if (type >= 1 && type <= 4) { +// InStockin param = new InStockin(); +// param.setErpBill(deliveryNoticeVo.getBillNo()); +// List existList = inStockinService.selectInStockinListApi(param); +// InStockin exist = (existList != null && !existList.isEmpty()) ? existList.get(0) : null; +// +// // 删除操作(操作类型3) +// if ("3".equals(opType)) { +// if (exist == null) { +// return AjaxResult.error("单据不存在"); +// } +// if ("3".equals(exist.getStatus())) { +// return AjaxResult.error("单据已执行,禁止删除"); +// } +// if (exist.getStockinGuid() != null) { +// inStockinDetailService.deleteInStockinDetailByStockinGuid(exist.getStockinGuid()); +// inStockinService.deleteInStockinByStockinGuid(exist.getStockinGuid()); +// } +// +// return AjaxResult.success(); +// } +// +// // 新增或修改操作(操作类型1或2) +// if ("2".equals(opType) || "1".equals(opType)) { +// if ("2".equals(opType) && exist == null) { +// return AjaxResult.error("单据不存在,无法修改"); +// } +// if ("1".equals(opType) && exist != null) { +// return AjaxResult.error("单据已存在,请勿重复添加"); +// } +// if (exist != null && "3".equals(exist.getStatus()) && "2".equals(opType)) { +// return AjaxResult.error("单据已执行,禁止修改"); +// } +// InStockin inStockin = exist != null ? exist : new InStockin(); +// if (exist == null) { +// inStockin.setStockinGuid(UUID.randomUUID().toString()); +// } +// String rkdId = iBasJobIdService.getJobId("RKD"); +// +// inStockin.setStockinId(rkdId); +// inStockin.setInType(deliveryNoticeVo.getBillType()); +// inStockin.setCreateDate(deliveryNoticeVo.getBillDate()); +// inStockin.setCreateManId(deliveryNoticeVo.getCreateMan()); +// inStockin.setStatus("2"); +// inStockin.setWarehouseId(deliveryNoticeVo.getWarehouseId()); +// inStockin.setErpBill(deliveryNoticeVo.getBillNo()); +// inStockin.setStockSource("1"); +// inStockin.setDepartmentNo(deliveryNoticeVo.getProjectNo());//项目号 +// inStockin.setSupplierNo(deliveryNoticeVo.getCustomerId());//供应商编码 +// inStockin.setClassNo(deliveryNoticeVo.getCustomerName());//供应商名称 +// inStockin.setSpare1(deliveryNoticeVo.getContractNo());//合同号 +// inStockin.setSpare2(deliveryNoticeVo.getSalesOrderNo());//销售订单号 +// inStockin.setSpare3(deliveryNoticeVo.getApproveDate());//审核时间 +// inStockin.setSpare4(deliveryNoticeVo.getApproveMan());//审核人 +// inStockin.setSpare5(deliveryNoticeVo.getRemark()); +// inStockin.setCompanyShortName(deliveryNoticeVo.getCompanyShortName()); +// inStockin.setAccountSetNo(deliveryNoticeVo.getAccountSetNo()); +// if (exist == null) { +// inStockinService.insertInStockin(inStockin); +// } else { +// inStockinService.updateInStockin(inStockin); +// inStockinDetailService.deleteInStockinDetailByStockinGuid(inStockin.getStockinGuid()); +// } +// List items = deliveryNoticeVo.getDetailList(); +// +// int a = 0; +// for (DeliveryNoticeItemVo item : items) { +// a += 1; +// InStockinDetail detail = new InStockinDetail(); +// detail.setStockinGuid(inStockin.getStockinGuid()); +// detail.setStockinDetailId(item.getBarCode()); +// detail.setStockinId(inStockin.getStockinId()); +// detail.setProductId(item.getInventoryCode()); +// detail.setProductName(item.getInventoryName()); +// detail.setSpec(item.getSpecModel()); +// detail.setUnit(item.getUnit()); +// detail.setQuantity(item.getQuantity()); +// if (item.getIsBatchManage().equals("1") && (item.getLotNo().equals("") || item.getLotNo() == null)) { +// // 获取流水号 +// detail.setLotNo(BatchNoGenerator.generateBatchNo()); +// }else { +// detail.setLotNo(item.getLotNo()); +// } +// detail.setSpare1(item.getLevelRelation()); +// detail.setSpare2(item.getUpperMaterial()); +// detail.setSpare3(item.getTopMaterial()); +// detail.setSpare4(item.getProjectNo()); +// detail.setSpare6(item.getLineNo()); +// detail.setRemark(item.getRemark()); +// detail.setAssignNum("0"); +// detail.setScanNum("0"); +// detail.setSourceLineId(item.getSourceLineId()); +// detail.setBarCode(item.getBarCode()); +// detail.setIsBatchManage(item.getIsBatchManage()); +// detail.setOldProjectNo(item.getOldProjectNo()); +// item.getStg_location() +// inStockinDetailService.insertInStockinDetail(detail); +// +// } +// +// return AjaxResult.success(); +// } +// } +// // 处理出库单相关操作(单据类型5-7) +// else if (type >= 5 && type <= 7) { +// OutStockout param = new OutStockout(); +// param.setErpStockoutId(deliveryNoticeVo.getBillNo()); +// List outList = outStockoutService.selectOutStockoutList(param); +// OutStockout exist = (outList != null && !outList.isEmpty()) ? outList.get(0) : null; +// +// // 删除操作(操作类型3) +// if ("3".equals(opType)) { +// if (exist == null) { +// return AjaxResult.error("单据不存在"); +// } +// if ("3".equals(exist.getStatus())) { +// return AjaxResult.error("单据已执行,禁止删除"); +// } +// OutStockoutDetail outStockoutDetail = new OutStockoutDetail(); +// outStockoutDetail.setStockoutId(deliveryNoticeVo.getBillNo()); +// List details = outStockoutDetailService.selectOutStockoutDetailList(outStockoutDetail); +// if (details != null && !details.isEmpty()) { +// String[] ids = details.stream().map(OutStockoutDetail::getStockoutDetailId).toArray(String[]::new); +// outStockoutDetailService.deleteOutStockoutDetailByStockoutDetailIds(ids); +// } +// outStockoutService.deleteOutStockoutByStockoutGuid(exist.getStockoutGuid()); +// return AjaxResult.success(); +// } +// +// // 新增或修改操作(操作类型1或2) +// if ("2".equals(opType) || "1".equals(opType)) { +// if ("2".equals(opType) && exist == null) { +// return AjaxResult.error("单据不存在,无法修改"); +// } +// if ("1".equals(opType) && exist != null) { +// return AjaxResult.error("单据已存在,请勿重复添加"); +// } +// if (exist != null && "3".equals(exist.getStatus()) && "2".equals(opType)) { +// return AjaxResult.error("单据已执行,禁止修改"); +// } +// OutStockout out = exist != null ? exist : new OutStockout(); +// +// if (exist == null) { +// out.setStockoutGuid(UUID.randomUUID().toString()); +// } +// String ckdId = iBasJobIdService.getJobId("CKD"); +// out.setStockoutId(ckdId); +// out.setOutType(deliveryNoticeVo.getBillType()); +// out.setCreateDate(deliveryNoticeVo.getBillDate()); +// out.setErpStockoutId(deliveryNoticeVo.getBillNo()); +// out.setCreateManId(deliveryNoticeVo.getCreateMan()); +// out.setStatus("2"); +// out.setWarehouseId(deliveryNoticeVo.getWarehouseId()); +// out.setStockoutSource("1"); +//// out.setSpare6(deliveryNoticeVo.getOutType()); +// out.setSpare6("1"); +// out.setCarNumber(deliveryNoticeVo.getIsProjectOut()); +// out.setDepartmentNo(deliveryNoticeVo.getProjectNo()); +// out.setCustomerNo(deliveryNoticeVo.getCustomerId()); +// out.setClassNowId(deliveryNoticeVo.getCustomerName()); +// out.setSpare1(deliveryNoticeVo.getContractNo());//合同号 +// out.setSpare2(deliveryNoticeVo.getSalesOrderNo());//销售订单号 +// out.setSpare3(deliveryNoticeVo.getApproveDate());//审核时间 +// out.setSpare4(deliveryNoticeVo.getApproveMan());//审核人 +// out.setSpare5(deliveryNoticeVo.getRemark()); +// out.setSpare7(deliveryNoticeVo.getDestination()); +// //手动设置出库类型为2 这样会赋值 in_or_out 21 +// out.setSpare8("2"); +// out.setCompanyShortName(deliveryNoticeVo.getCompanyShortName()); +// out.setAccountSetNo(deliveryNoticeVo.getAccountSetNo()); +// +// if (exist == null) { +// outStockoutService.insertOutStockout(out); +// } else { +// outStockoutService.updateOutStockout(out); +// OutStockoutDetail q2 = new OutStockoutDetail(); +// q2.setStockoutId(deliveryNoticeVo.getBillNo()); +// List oldDetails = outStockoutDetailService.selectOutStockoutDetailList(q2); +// if (oldDetails != null && !oldDetails.isEmpty()) { +// String[] ids = oldDetails.stream().map(OutStockoutDetail::getStockoutDetailId).toArray(String[]::new); +// outStockoutDetailService.deleteOutStockoutDetailByStockoutDetailIds(ids); +// } +// } +// int i = 0; +// for (DeliveryNoticeItemVo item : deliveryNoticeVo.getDetailList()) { +// OutStockoutDetail d = new OutStockoutDetail(); +// i += 1; +// d.setStockoutDetailId(out.getStockoutId() + "-" + i); +// d.setStockoutGuid(out.getStockoutGuid()); +// d.setStockoutId(out.getStockoutId()); +// d.setProductId(item.getInventoryCode()); +// d.setProductName(item.getInventoryName()); +// d.setLotNo(item.getLotNo()); +// d.setSpec(item.getSpecModel()); +// d.setUnit(item.getUnit()); +// d.setSpare1(item.getLevelRelation()); +// d.setSpare2(item.getUpperMaterial()); +// d.setSpare3(item.getTopMaterial()); +// d.setSpare4(item.getProjectNo()); +// d.setSpare6(item.getLineNo()); +// d.setRemark(item.getRemark()); +// d.setSourceLineId(item.getSourceLineId()); +// d.setBarCode(item.getBarCode()); +// d.setIsBatchManage(item.getIsBatchManage()); +// d.setOldProjectNo(item.getOldProjectNo()); +// //d.setSpare8(deliveryNoticeVo.getDestination()); +// +// +// try { +// d.setQuantity(new BigDecimal(item.getQuantity())); +// d.setAllotQuantity(BigDecimal.ZERO); +// d.setAssignNum(BigDecimal.ZERO); +// } catch (Exception e) { +// d.setQuantity(BigDecimal.ZERO); +// } +// outStockoutDetailService.insertOutStockoutDetail(d); +// +// } +// return AjaxResult.success(); +// } +// } +// return AjaxResult.error("不支持的单据类型或操作类型"); +// +// } + + + @Override @Transactional(rollbackFor = Exception.class) public AjaxResult receiveDeliveryNotice(DeliveryNoticeVo deliveryNoticeVo) { - if (deliveryNoticeVo == null || deliveryNoticeVo.getDetailList() == null || deliveryNoticeVo.getDetailList().isEmpty()) { return AjaxResult.error("单据或明细不能为空"); } String billType = deliveryNoticeVo.getBillType(); String opType = deliveryNoticeVo.getOpType(); -// String status = deliveryNoticeVo.getStatus(); int type = 0; try { type = Integer.parseInt(billType); } catch (Exception ignored) { } - // 处理入库单相关操作(单据类型1-4) + // ===================== 入库单 1-4 逻辑完全不变 ===================== if (type >= 1 && type <= 4) { InStockin param = new InStockin(); param.setErpBill(deliveryNoticeVo.getBillNo()); @@ -154,7 +389,6 @@ public class ToErpServiceImpl implements IToErpService { inStockinDetailService.deleteInStockinDetailByStockinGuid(exist.getStockinGuid()); inStockinService.deleteInStockinByStockinGuid(exist.getStockinGuid()); } - return AjaxResult.success(); } @@ -183,16 +417,17 @@ public class ToErpServiceImpl implements IToErpService { inStockin.setWarehouseId(deliveryNoticeVo.getWarehouseId()); inStockin.setErpBill(deliveryNoticeVo.getBillNo()); inStockin.setStockSource("1"); - inStockin.setDepartmentNo(deliveryNoticeVo.getProjectNo());//项目号 - inStockin.setSupplierNo(deliveryNoticeVo.getCustomerId());//供应商编码 - inStockin.setClassNo(deliveryNoticeVo.getCustomerName());//供应商名称 - inStockin.setSpare1(deliveryNoticeVo.getContractNo());//合同号 - inStockin.setSpare2(deliveryNoticeVo.getSalesOrderNo());//销售订单号 - inStockin.setSpare3(deliveryNoticeVo.getApproveDate());//审核时间 - inStockin.setSpare4(deliveryNoticeVo.getApproveMan());//审核人 + inStockin.setDepartmentNo(deliveryNoticeVo.getProjectNo()); + inStockin.setSupplierNo(deliveryNoticeVo.getCustomerId()); + inStockin.setClassNo(deliveryNoticeVo.getCustomerName()); + inStockin.setSpare1(deliveryNoticeVo.getContractNo()); + inStockin.setSpare2(deliveryNoticeVo.getSalesOrderNo()); + inStockin.setSpare3(deliveryNoticeVo.getApproveDate()); + inStockin.setSpare4(deliveryNoticeVo.getApproveMan()); inStockin.setSpare5(deliveryNoticeVo.getRemark()); inStockin.setCompanyShortName(deliveryNoticeVo.getCompanyShortName()); inStockin.setAccountSetNo(deliveryNoticeVo.getAccountSetNo()); + if (exist == null) { inStockinService.insertInStockin(inStockin); } else { @@ -200,10 +435,7 @@ public class ToErpServiceImpl implements IToErpService { inStockinDetailService.deleteInStockinDetailByStockinGuid(inStockin.getStockinGuid()); } List items = deliveryNoticeVo.getDetailList(); - - int a = 0; for (DeliveryNoticeItemVo item : items) { - a += 1; InStockinDetail detail = new InStockinDetail(); detail.setStockinGuid(inStockin.getStockinGuid()); detail.setStockinDetailId(item.getBarCode()); @@ -214,9 +446,8 @@ public class ToErpServiceImpl implements IToErpService { detail.setUnit(item.getUnit()); detail.setQuantity(item.getQuantity()); if (item.getIsBatchManage().equals("1") && (item.getLotNo().equals("") || item.getLotNo() == null)) { - // 获取流水号 detail.setLotNo(BatchNoGenerator.generateBatchNo()); - }else { + } else { detail.setLotNo(item.getLotNo()); } detail.setSpare1(item.getLevelRelation()); @@ -232,20 +463,20 @@ public class ToErpServiceImpl implements IToErpService { detail.setIsBatchManage(item.getIsBatchManage()); detail.setOldProjectNo(item.getOldProjectNo()); inStockinDetailService.insertInStockinDetail(detail); - } - return AjaxResult.success(); } } - // 处理出库单相关操作(单据类型5-7) + + // ===================== 出库单 5-7 改造:按立库/平库分两组各1主单多明细 ===================== else if (type >= 5 && type <= 7) { OutStockout param = new OutStockout(); param.setErpStockoutId(deliveryNoticeVo.getBillNo()); List outList = outStockoutService.selectOutStockoutList(param); OutStockout exist = (outList != null && !outList.isEmpty()) ? outList.get(0) : null; + String billNo = deliveryNoticeVo.getBillNo(); - // 删除操作(操作类型3) + // 删除操作 不变 if ("3".equals(opType)) { if (exist == null) { return AjaxResult.error("单据不存在"); @@ -254,7 +485,7 @@ public class ToErpServiceImpl implements IToErpService { return AjaxResult.error("单据已执行,禁止删除"); } OutStockoutDetail outStockoutDetail = new OutStockoutDetail(); - outStockoutDetail.setStockoutId(deliveryNoticeVo.getBillNo()); + outStockoutDetail.setStockoutId(billNo); List details = outStockoutDetailService.selectOutStockoutDetailList(outStockoutDetail); if (details != null && !details.isEmpty()) { String[] ids = details.stream().map(OutStockoutDetail::getStockoutDetailId).toArray(String[]::new); @@ -264,7 +495,7 @@ public class ToErpServiceImpl implements IToErpService { return AjaxResult.success(); } - // 新增或修改操作(操作类型1或2) + // 新增/修改 if ("2".equals(opType) || "1".equals(opType)) { if ("2".equals(opType) && exist == null) { return AjaxResult.error("单据不存在,无法修改"); @@ -275,91 +506,140 @@ public class ToErpServiceImpl implements IToErpService { if (exist != null && "3".equals(exist.getStatus()) && "2".equals(opType)) { return AjaxResult.error("单据已执行,禁止修改"); } - OutStockout out = exist != null ? exist : new OutStockout(); + List allDetail = deliveryNoticeVo.getDetailList(); + // 1. 按 stg_location 分组 + List liKuList = new ArrayList<>(); + List pingKuList = new ArrayList<>(); + for (DeliveryNoticeItemVo item : allDetail) { + String loc = item.getStg_location(); + if ("2".equals(loc)) { + pingKuList.add(item); + } else { + // 1 或空 都归立库 + liKuList.add(item); + } + } + + // ========== 处理立库:原有主单 + 所有立库明细 ========== + OutStockout mainOut = exist != null ? exist : new OutStockout(); if (exist == null) { - out.setStockoutGuid(UUID.randomUUID().toString()); + mainOut.setStockoutGuid(UUID.randomUUID().toString()); } String ckdId = iBasJobIdService.getJobId("CKD"); - out.setStockoutId(ckdId); - out.setOutType(deliveryNoticeVo.getBillType()); - out.setCreateDate(deliveryNoticeVo.getBillDate()); - out.setErpStockoutId(deliveryNoticeVo.getBillNo()); - out.setCreateManId(deliveryNoticeVo.getCreateMan()); - out.setStatus("2"); - out.setWarehouseId(deliveryNoticeVo.getWarehouseId()); - out.setStockoutSource("1"); -// out.setSpare6(deliveryNoticeVo.getOutType()); - out.setSpare6("1"); - out.setCarNumber(deliveryNoticeVo.getIsProjectOut()); - out.setDepartmentNo(deliveryNoticeVo.getProjectNo()); - out.setCustomerNo(deliveryNoticeVo.getCustomerId()); - out.setClassNowId(deliveryNoticeVo.getCustomerName()); - out.setSpare1(deliveryNoticeVo.getContractNo());//合同号 - out.setSpare2(deliveryNoticeVo.getSalesOrderNo());//销售订单号 - out.setSpare3(deliveryNoticeVo.getApproveDate());//审核时间 - out.setSpare4(deliveryNoticeVo.getApproveMan());//审核人 - out.setSpare5(deliveryNoticeVo.getRemark()); - out.setSpare7(deliveryNoticeVo.getDestination()); - //手动设置出库类型为2 这样会赋值 in_or_out 21 - out.setSpare8("2"); - out.setCompanyShortName(deliveryNoticeVo.getCompanyShortName()); - out.setAccountSetNo(deliveryNoticeVo.getAccountSetNo()); + fillOutStockout(mainOut, deliveryNoticeVo, ckdId); if (exist == null) { - outStockoutService.insertOutStockout(out); + outStockoutService.insertOutStockout(mainOut); } else { - outStockoutService.updateOutStockout(out); + outStockoutService.updateOutStockout(mainOut); + // 修改先删旧明细 OutStockoutDetail q2 = new OutStockoutDetail(); - q2.setStockoutId(deliveryNoticeVo.getBillNo()); + q2.setStockoutId(billNo); List oldDetails = outStockoutDetailService.selectOutStockoutDetailList(q2); if (oldDetails != null && !oldDetails.isEmpty()) { - String[] ids = oldDetails.stream().map(OutStockoutDetail::getStockoutDetailId).toArray(String[]::new); + String[] ids = oldDetails.stream() + .map(OutStockoutDetail::getStockoutDetailId) + .toArray(String[]::new); outStockoutDetailService.deleteOutStockoutDetailByStockoutDetailIds(ids); } } - int i = 0; - for (DeliveryNoticeItemVo item : deliveryNoticeVo.getDetailList()) { - OutStockoutDetail d = new OutStockoutDetail(); - i += 1; - d.setStockoutDetailId(out.getStockoutId() + "-" + i); - d.setStockoutGuid(out.getStockoutGuid()); - d.setStockoutId(out.getStockoutId()); - d.setProductId(item.getInventoryCode()); - d.setProductName(item.getInventoryName()); - d.setLotNo(item.getLotNo()); - d.setSpec(item.getSpecModel()); - d.setUnit(item.getUnit()); - d.setSpare1(item.getLevelRelation()); - d.setSpare2(item.getUpperMaterial()); - d.setSpare3(item.getTopMaterial()); - d.setSpare4(item.getProjectNo()); - d.setSpare6(item.getLineNo()); - d.setRemark(item.getRemark()); - d.setSourceLineId(item.getSourceLineId()); - d.setBarCode(item.getBarCode()); - d.setIsBatchManage(item.getIsBatchManage()); - d.setOldProjectNo(item.getOldProjectNo()); - //d.setSpare8(deliveryNoticeVo.getDestination()); + // 保存所有立库明细到主单 + saveOutDetailList(mainOut, liKuList,"1"); - try { - d.setQuantity(new BigDecimal(item.getQuantity())); - d.setAllotQuantity(BigDecimal.ZERO); - d.setAssignNum(BigDecimal.ZERO); - } catch (Exception e) { - d.setQuantity(BigDecimal.ZERO); - } - outStockoutDetailService.insertOutStockoutDetail(d); - + // ========== 处理平库:新建一张独立主单 + 所有平库明细 ========== + if (CollUtil.isNotEmpty(pingKuList)) { + OutStockout pingKuOut = new OutStockout(); + pingKuOut.setStockoutGuid(UUID.randomUUID().toString()); + String pingCkdId = iBasJobIdService.getJobId("CKD"); + fillOutStockout(pingKuOut, deliveryNoticeVo, pingCkdId); + // 插入平库主单 + outStockoutService.insertOutStockout(pingKuOut); + // 平库所有明细挂到这个新主单 + saveOutDetailList(pingKuOut, pingKuList,"2"); + log.info("平库分组生成独立出库单:{},明细条数:{}", pingCkdId, pingKuList.size()); } return AjaxResult.success(); } } return AjaxResult.error("不支持的单据类型或操作类型"); - } + + /** + * 填充出库单主表公共字段 + */ + private void fillOutStockout(OutStockout out, DeliveryNoticeVo vo, String ckdId) { + out.setStockoutId(ckdId); + out.setOutType(vo.getBillType()); + out.setCreateDate(vo.getBillDate()); + out.setErpStockoutId(vo.getBillNo()); + out.setCreateManId(vo.getCreateMan()); + out.setStatus("2"); + out.setWarehouseId(vo.getWarehouseId()); + out.setStockoutSource("1"); + out.setSpare6("1"); + out.setCarNumber(vo.getIsProjectOut()); + out.setDepartmentNo(vo.getProjectNo()); + out.setCustomerNo(vo.getCustomerId()); + out.setClassNowId(vo.getCustomerName()); + out.setSpare1(vo.getContractNo()); + out.setSpare2(vo.getSalesOrderNo()); + out.setSpare3(vo.getApproveDate()); + out.setSpare4(vo.getApproveMan()); + out.setSpare5(vo.getRemark()); + out.setSpare7(vo.getDestination()); + out.setSpare8("2"); + out.setCompanyShortName(vo.getCompanyShortName()); + out.setAccountSetNo(vo.getAccountSetNo()); + } + + /** + * 批量保存出库明细列表 + */ + private void saveOutDetailList(OutStockout out, List detailList, String warehouseId) { + if (CollUtil.isEmpty(detailList)) { + return; + } + int i = 0; + for (DeliveryNoticeItemVo item : detailList) { + i++; + OutStockoutDetail d = new OutStockoutDetail(); + d.setStockoutDetailId(out.getStockoutId() + "-" + i); + d.setStockoutGuid(out.getStockoutGuid()); + d.setStockoutId(out.getStockoutId()); + d.setProductId(item.getInventoryCode()); + d.setProductName(item.getInventoryName()); + d.setLotNo(item.getLotNo()); + d.setSpec(item.getSpecModel()); + d.setUnit(item.getUnit()); + d.setSpare1(item.getLevelRelation()); + d.setSpare2(item.getUpperMaterial()); + d.setSpare3(item.getTopMaterial()); + d.setSpare4(item.getProjectNo()); + d.setSpare6(item.getLineNo()); + d.setRemark(item.getRemark()); + d.setSourceLineId(item.getSourceLineId()); + d.setBarCode(item.getBarCode()); + d.setIsBatchManage(item.getIsBatchManage()); + d.setOldProjectNo(item.getOldProjectNo()); + d.setProductGuid(item.getStg_location()); + try { + d.setQuantity(new BigDecimal(item.getQuantity())); + d.setAllotQuantity(BigDecimal.ZERO); + d.setAssignNum(BigDecimal.ZERO); + } catch (Exception e) { + d.setQuantity(BigDecimal.ZERO); + } + outStockoutDetailService.insertOutStockoutDetail(d); + } + out.setWarehouseId(warehouseId); + outStockoutService.updateOutStockout(out); + } + + + @Override public void callbackInDeliveryNotice() {