|
|
|
@ -1,6 +1,8 @@ |
|
|
|
package com.xujie.modules.inspection.service.impl; |
|
|
|
|
|
|
|
import com.alibaba.excel.EasyExcel; |
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; |
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage; |
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
|
|
|
@ -13,6 +15,9 @@ import com.xujie.modules.inspection.entity.QcPersonList; |
|
|
|
import com.xujie.modules.inspection.mapper.InspectionRequestDetailMapper; |
|
|
|
import com.xujie.modules.inspection.mapper.InspectionRequestDetailSubMapper; |
|
|
|
import com.xujie.modules.order.dao.PODetailMapper; |
|
|
|
import com.xujie.modules.order.dao.POHeaderMapper; |
|
|
|
import com.xujie.modules.order.entity.PODetail; |
|
|
|
import com.xujie.modules.order.entity.POHeader; |
|
|
|
import com.xujie.modules.srm.mapper.SrmSupplierMapper; |
|
|
|
import org.springframework.transaction.annotation.Transactional; |
|
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
|
@ -47,9 +52,9 @@ public class InspectionRequestServiceImpl extends ServiceImpl<InspectionRequestH |
|
|
|
|
|
|
|
@Autowired |
|
|
|
private PODetailMapper podetailMapper; |
|
|
|
|
|
|
|
|
|
|
|
@Autowired |
|
|
|
private com.xujie.modules.order.dao.POHeaderMapper poheaderMapper; |
|
|
|
private POHeaderMapper poheaderMapper; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
private SrmSupplierMapper srmSupplierMapper; |
|
|
|
@ -148,30 +153,30 @@ public class InspectionRequestServiceImpl extends ServiceImpl<InspectionRequestH |
|
|
|
} |
|
|
|
|
|
|
|
// 检查并更新POHeader和PODetail状态:已下达 -> 待验货 |
|
|
|
com.xujie.modules.order.entity.PODetail poDetail = |
|
|
|
PODetail poDetail = |
|
|
|
podetailMapper.selectByPK(item.getOrderNo(), site, item.getItemNo()); |
|
|
|
|
|
|
|
|
|
|
|
if (poDetail != null && "已下达".equals(poDetail.getStatus())) { |
|
|
|
// 更新 PODetail 状态为待验货 |
|
|
|
podetailMapper.update(null, |
|
|
|
new com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper<com.xujie.modules.order.entity.PODetail>() |
|
|
|
.eq(com.xujie.modules.order.entity.PODetail::getOrderNo, item.getOrderNo()) |
|
|
|
.eq(com.xujie.modules.order.entity.PODetail::getSite, site) |
|
|
|
.eq(com.xujie.modules.order.entity.PODetail::getItemNo, item.getItemNo()) |
|
|
|
.set(com.xujie.modules.order.entity.PODetail::getStatus, "待验货") |
|
|
|
new LambdaUpdateWrapper<PODetail>() |
|
|
|
.eq(PODetail::getOrderNo, item.getOrderNo()) |
|
|
|
.eq(PODetail::getSite, site) |
|
|
|
.eq(PODetail::getItemNo, item.getItemNo()) |
|
|
|
.set(PODetail::getStatus, "待验货") |
|
|
|
); |
|
|
|
|
|
|
|
log.info("开验货申请单 - 更新PODetail状态为待验货: orderNo={}, itemNo={}", |
|
|
|
|
|
|
|
log.info("开验货申请单 - 更新PODetail状态为待验货: orderNo={}, itemNo={}", |
|
|
|
item.getOrderNo(), item.getItemNo()); |
|
|
|
|
|
|
|
|
|
|
|
// 更新 POHeader 状态为待验货 |
|
|
|
poheaderMapper.update(null, |
|
|
|
new com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper<com.xujie.modules.order.entity.POHeader>() |
|
|
|
.eq(com.xujie.modules.order.entity.POHeader::getOrderNo, item.getOrderNo()) |
|
|
|
.eq(com.xujie.modules.order.entity.POHeader::getSite, site) |
|
|
|
.set(com.xujie.modules.order.entity.POHeader::getStatus, "待验货") |
|
|
|
new LambdaUpdateWrapper<POHeader>() |
|
|
|
.eq(POHeader::getOrderNo, item.getOrderNo()) |
|
|
|
.eq(POHeader::getSite, site) |
|
|
|
.set(POHeader::getStatus, "待验货") |
|
|
|
); |
|
|
|
|
|
|
|
|
|
|
|
log.info("开验货申请单 - 更新POHeader状态为待验货: orderNo={}", item.getOrderNo()); |
|
|
|
} |
|
|
|
|
|
|
|
@ -266,7 +271,7 @@ public class InspectionRequestServiceImpl extends ServiceImpl<InspectionRequestH |
|
|
|
throw new RuntimeException("只有状态为草稿,待审核和已下达的验货申请允许删除,当前状态:" + header.getStatus()); |
|
|
|
} |
|
|
|
|
|
|
|
// 2. 查询sub表,回退PO明细的to_inspect_qty数量 |
|
|
|
// 2. 查询sub表,回退PO明细的to_inspect_qty数量,并检查是否需要回退订单状态 |
|
|
|
List<InspectionRequestDetailSub> subList = |
|
|
|
inspectionRequestDetailSubMapper.selectByRequestNo(site, requestNo); |
|
|
|
|
|
|
|
@ -285,6 +290,57 @@ public class InspectionRequestServiceImpl extends ServiceImpl<InspectionRequestH |
|
|
|
+ "-" + sub.getPoItemNo() |
|
|
|
); |
|
|
|
} |
|
|
|
|
|
|
|
// 检查该订单是否还有其他验货申请 |
|
|
|
int otherRequestCount = inspectionRequestDetailSubMapper.countOtherInspectionRequests( |
|
|
|
site, |
|
|
|
sub.getPoNo(), |
|
|
|
sub.getPoItemNo(), |
|
|
|
requestNo |
|
|
|
); |
|
|
|
|
|
|
|
// 如果没有其他验货申请,则回退订单状态:待验货 -> 已下达 |
|
|
|
if (otherRequestCount == 0) { |
|
|
|
PODetail poDetail = |
|
|
|
podetailMapper.selectByPK(sub.getPoNo(), site, sub.getPoItemNo()); |
|
|
|
|
|
|
|
if (poDetail != null && "待验货".equals(poDetail.getStatus())) { |
|
|
|
// 更新 PODetail 状态为已下达 |
|
|
|
podetailMapper.update(null, |
|
|
|
new LambdaUpdateWrapper<PODetail>() |
|
|
|
.eq(PODetail::getOrderNo, sub.getPoNo()) |
|
|
|
.eq(PODetail::getSite, site) |
|
|
|
.eq(PODetail::getItemNo, sub.getPoItemNo()) |
|
|
|
.set(PODetail::getStatus, "已下达") |
|
|
|
); |
|
|
|
|
|
|
|
log.info("删除验货申请 - 回退PODetail状态为已下达: orderNo={}, itemNo={}", |
|
|
|
sub.getPoNo(), sub.getPoItemNo()); |
|
|
|
|
|
|
|
// 检查 POHeader 下所有 PODetail 是否都是已下达状态 |
|
|
|
// 如果是,则将 POHeader 也回退为已下达 |
|
|
|
java.util.List<PODetail> allDetails = |
|
|
|
podetailMapper.selectList( |
|
|
|
new LambdaQueryWrapper<PODetail>() |
|
|
|
.eq(PODetail::getOrderNo, sub.getPoNo()) |
|
|
|
.eq(PODetail::getSite, site) |
|
|
|
); |
|
|
|
|
|
|
|
boolean allReleased = allDetails.stream() |
|
|
|
.allMatch(detail -> "已下达".equals(detail.getStatus())); |
|
|
|
|
|
|
|
if (allReleased) { |
|
|
|
poheaderMapper.update(null, |
|
|
|
new LambdaUpdateWrapper<POHeader>() |
|
|
|
.eq(POHeader::getOrderNo, sub.getPoNo()) |
|
|
|
.eq(POHeader::getSite, site) |
|
|
|
.set(POHeader::getStatus, "已下达") |
|
|
|
); |
|
|
|
|
|
|
|
log.info("删除验货申请 - 回退POHeader状态为已下达: orderNo={}", sub.getPoNo()); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 3. 删除子表明细 srm_inspect_request_detail_sub |
|
|
|
@ -693,29 +749,29 @@ public class InspectionRequestServiceImpl extends ServiceImpl<InspectionRequestH |
|
|
|
if (subList != null && !subList.isEmpty()) { |
|
|
|
for (InspectionRequestDetailSub sub : subList) { |
|
|
|
// 查询当前 PODetail |
|
|
|
com.xujie.modules.order.entity.PODetail poDetail = |
|
|
|
PODetail poDetail = |
|
|
|
podetailMapper.selectByPK(sub.getPoNo(), site, sub.getPoItemNo()); |
|
|
|
|
|
|
|
|
|
|
|
if (poDetail != null && "待验货".equals(poDetail.getStatus())) { |
|
|
|
// 更新 PODetail 状态为验货中 |
|
|
|
podetailMapper.update(null, |
|
|
|
new com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper<com.xujie.modules.order.entity.PODetail>() |
|
|
|
.eq(com.xujie.modules.order.entity.PODetail::getOrderNo, sub.getPoNo()) |
|
|
|
.eq(com.xujie.modules.order.entity.PODetail::getSite, site) |
|
|
|
.eq(com.xujie.modules.order.entity.PODetail::getItemNo, sub.getPoItemNo()) |
|
|
|
.set(com.xujie.modules.order.entity.PODetail::getStatus, "验货中") |
|
|
|
new LambdaUpdateWrapper<PODetail>() |
|
|
|
.eq(PODetail::getOrderNo, sub.getPoNo()) |
|
|
|
.eq(PODetail::getSite, site) |
|
|
|
.eq(PODetail::getItemNo, sub.getPoItemNo()) |
|
|
|
.set(PODetail::getStatus, "验货中") |
|
|
|
); |
|
|
|
|
|
|
|
|
|
|
|
log.info("开始验货 - 更新PODetail状态为验货中: orderNo={}, itemNo={}", sub.getPoNo(), sub.getPoItemNo()); |
|
|
|
|
|
|
|
|
|
|
|
// 更新 POHeader 状态为验货中 |
|
|
|
poheaderMapper.update(null, |
|
|
|
new com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper<com.xujie.modules.order.entity.POHeader>() |
|
|
|
.eq(com.xujie.modules.order.entity.POHeader::getOrderNo, sub.getPoNo()) |
|
|
|
.eq(com.xujie.modules.order.entity.POHeader::getSite, site) |
|
|
|
.set(com.xujie.modules.order.entity.POHeader::getStatus, "验货中") |
|
|
|
new LambdaUpdateWrapper<POHeader>() |
|
|
|
.eq(POHeader::getOrderNo, sub.getPoNo()) |
|
|
|
.eq(POHeader::getSite, site) |
|
|
|
.set(POHeader::getStatus, "验货中") |
|
|
|
); |
|
|
|
|
|
|
|
|
|
|
|
log.info("开始验货 - 更新POHeader状态为验货中: orderNo={}", sub.getPoNo()); |
|
|
|
} |
|
|
|
} |
|
|
|
@ -779,33 +835,33 @@ public class InspectionRequestServiceImpl extends ServiceImpl<InspectionRequestH |
|
|
|
if (subList != null && !subList.isEmpty()) { |
|
|
|
for (InspectionRequestDetailSub sub : subList) { |
|
|
|
// 查询当前 PODetail 的 inspect_approve_qty |
|
|
|
com.xujie.modules.order.entity.PODetail poDetail = |
|
|
|
PODetail poDetail = |
|
|
|
podetailMapper.selectByPK(sub.getPoNo(), site, sub.getPoItemNo()); |
|
|
|
|
|
|
|
|
|
|
|
if (poDetail != null) { |
|
|
|
BigDecimal currentApproveQty = poDetail.getInspectApproveQty() != null |
|
|
|
BigDecimal currentApproveQty = poDetail.getInspectApproveQty() != null |
|
|
|
? poDetail.getInspectApproveQty() : BigDecimal.ZERO; |
|
|
|
BigDecimal newApproveQty = currentApproveQty.add(sub.getQty()); |
|
|
|
|
|
|
|
|
|
|
|
// 更新 PODetail 的 inspect_approve_qty |
|
|
|
int podUpdateCount = podetailMapper.update(null, |
|
|
|
new com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper<com.xujie.modules.order.entity.PODetail>() |
|
|
|
.eq(com.xujie.modules.order.entity.PODetail::getOrderNo, sub.getPoNo()) |
|
|
|
.eq(com.xujie.modules.order.entity.PODetail::getSite, site) |
|
|
|
.eq(com.xujie.modules.order.entity.PODetail::getItemNo, sub.getPoItemNo()) |
|
|
|
.set(com.xujie.modules.order.entity.PODetail::getInspectApproveQty, newApproveQty) |
|
|
|
new LambdaUpdateWrapper<PODetail>() |
|
|
|
.eq(PODetail::getOrderNo, sub.getPoNo()) |
|
|
|
.eq(PODetail::getSite, site) |
|
|
|
.eq(PODetail::getItemNo, sub.getPoItemNo()) |
|
|
|
.set(PODetail::getInspectApproveQty, newApproveQty) |
|
|
|
); |
|
|
|
|
|
|
|
|
|
|
|
if (podUpdateCount == 0) { |
|
|
|
log.warn("更新 PODetail 验货完成数量失败: orderNo={}, itemNo={}", sub.getPoNo(), sub.getPoItemNo()); |
|
|
|
} else { |
|
|
|
log.info("更新 PODetail 验货完成数量: orderNo={}, itemNo={}, qty={}, 原数量={}, 新数量={}", |
|
|
|
sub.getPoNo(), sub.getPoItemNo(), sub.getQty(), currentApproveQty, newApproveQty); |
|
|
|
|
|
|
|
|
|
|
|
// 根据验货完成数量更新 PODetail 和 POHeader 状态 |
|
|
|
BigDecimal orderQty = poDetail.getQty() != null ? BigDecimal.valueOf(poDetail.getQty()) : BigDecimal.ZERO; |
|
|
|
String newStatus; |
|
|
|
|
|
|
|
|
|
|
|
if (newApproveQty.compareTo(orderQty) >= 0) { |
|
|
|
// 验货完成数量 >= 订单数量:验货完成 |
|
|
|
newStatus = "验货完成"; |
|
|
|
@ -816,27 +872,27 @@ public class InspectionRequestServiceImpl extends ServiceImpl<InspectionRequestH |
|
|
|
// 验货完成数量 = 0:保持原状态或回退到待验货 |
|
|
|
newStatus = poDetail.getStatus(); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 更新 PODetail 状态 |
|
|
|
podetailMapper.update(null, |
|
|
|
new com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper<com.xujie.modules.order.entity.PODetail>() |
|
|
|
.eq(com.xujie.modules.order.entity.PODetail::getOrderNo, sub.getPoNo()) |
|
|
|
.eq(com.xujie.modules.order.entity.PODetail::getSite, site) |
|
|
|
.eq(com.xujie.modules.order.entity.PODetail::getItemNo, sub.getPoItemNo()) |
|
|
|
.set(com.xujie.modules.order.entity.PODetail::getStatus, newStatus) |
|
|
|
new LambdaUpdateWrapper<PODetail>() |
|
|
|
.eq(PODetail::getOrderNo, sub.getPoNo()) |
|
|
|
.eq(PODetail::getSite, site) |
|
|
|
.eq(PODetail::getItemNo, sub.getPoItemNo()) |
|
|
|
.set(PODetail::getStatus, newStatus) |
|
|
|
); |
|
|
|
|
|
|
|
log.info("验货完成 - 更新PODetail状态: orderNo={}, itemNo={}, 状态={}", |
|
|
|
|
|
|
|
log.info("验货完成 - 更新PODetail状态: orderNo={}, itemNo={}, 状态={}", |
|
|
|
sub.getPoNo(), sub.getPoItemNo(), newStatus); |
|
|
|
|
|
|
|
|
|
|
|
// 更新 POHeader 状态 |
|
|
|
poheaderMapper.update(null, |
|
|
|
new com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper<com.xujie.modules.order.entity.POHeader>() |
|
|
|
.eq(com.xujie.modules.order.entity.POHeader::getOrderNo, sub.getPoNo()) |
|
|
|
.eq(com.xujie.modules.order.entity.POHeader::getSite, site) |
|
|
|
.set(com.xujie.modules.order.entity.POHeader::getStatus, newStatus) |
|
|
|
new LambdaUpdateWrapper<POHeader>() |
|
|
|
.eq(POHeader::getOrderNo, sub.getPoNo()) |
|
|
|
.eq(POHeader::getSite, site) |
|
|
|
.set(POHeader::getStatus, newStatus) |
|
|
|
); |
|
|
|
|
|
|
|
|
|
|
|
log.info("验货完成 - 更新POHeader状态: orderNo={}, 状态={}", sub.getPoNo(), newStatus); |
|
|
|
} |
|
|
|
} |
|
|
|
@ -929,24 +985,24 @@ public class InspectionRequestServiceImpl extends ServiceImpl<InspectionRequestH |
|
|
|
int podRollbackCount = podetailMapper.deductInspectApproveQty( |
|
|
|
sub.getPoNo(), site, sub.getPoItemNo(), sub.getQty() |
|
|
|
); |
|
|
|
|
|
|
|
|
|
|
|
if (podRollbackCount == 0) { |
|
|
|
log.warn("回滚 PODetail 验货完成数量失败: orderNo={}, itemNo={}", sub.getPoNo(), sub.getPoItemNo()); |
|
|
|
} else { |
|
|
|
log.info("回滚 PODetail 验货完成数量: orderNo={}, itemNo={}, 扣减qty={}", |
|
|
|
sub.getPoNo(), sub.getPoItemNo(), sub.getQty()); |
|
|
|
|
|
|
|
|
|
|
|
// 查询更新后的 PODetail 以获取最新的 inspect_approve_qty |
|
|
|
com.xujie.modules.order.entity.PODetail poDetail = |
|
|
|
PODetail poDetail = |
|
|
|
podetailMapper.selectByPK(sub.getPoNo(), site, sub.getPoItemNo()); |
|
|
|
|
|
|
|
|
|
|
|
if (poDetail != null) { |
|
|
|
BigDecimal newApproveQty = poDetail.getInspectApproveQty() != null |
|
|
|
BigDecimal newApproveQty = poDetail.getInspectApproveQty() != null |
|
|
|
? poDetail.getInspectApproveQty() : BigDecimal.ZERO; |
|
|
|
|
|
|
|
|
|
|
|
// 根据验货完成数量更新 PODetail 和 POHeader 状态 |
|
|
|
String newStatus; |
|
|
|
|
|
|
|
|
|
|
|
if (newApproveQty.compareTo(BigDecimal.ZERO) > 0) { |
|
|
|
// 验货完成数量 > 0:部分验货 |
|
|
|
newStatus = "部分验货"; |
|
|
|
@ -954,27 +1010,27 @@ public class InspectionRequestServiceImpl extends ServiceImpl<InspectionRequestH |
|
|
|
// 验货完成数量 = 0:回退到待验货 |
|
|
|
newStatus = "待验货"; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 更新 PODetail 状态 |
|
|
|
podetailMapper.update(null, |
|
|
|
new com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper<com.xujie.modules.order.entity.PODetail>() |
|
|
|
.eq(com.xujie.modules.order.entity.PODetail::getOrderNo, sub.getPoNo()) |
|
|
|
.eq(com.xujie.modules.order.entity.PODetail::getSite, site) |
|
|
|
.eq(com.xujie.modules.order.entity.PODetail::getItemNo, sub.getPoItemNo()) |
|
|
|
.set(com.xujie.modules.order.entity.PODetail::getStatus, newStatus) |
|
|
|
new LambdaUpdateWrapper<PODetail>() |
|
|
|
.eq(PODetail::getOrderNo, sub.getPoNo()) |
|
|
|
.eq(PODetail::getSite, site) |
|
|
|
.eq(PODetail::getItemNo, sub.getPoItemNo()) |
|
|
|
.set(PODetail::getStatus, newStatus) |
|
|
|
); |
|
|
|
|
|
|
|
log.info("回滚验货 - 更新PODetail状态: orderNo={}, itemNo={}, 状态={}, 当前数量={}", |
|
|
|
|
|
|
|
log.info("回滚验货 - 更新PODetail状态: orderNo={}, itemNo={}, 状态={}, 当前数量={}", |
|
|
|
sub.getPoNo(), sub.getPoItemNo(), newStatus, newApproveQty); |
|
|
|
|
|
|
|
|
|
|
|
// 更新 POHeader 状态 |
|
|
|
poheaderMapper.update(null, |
|
|
|
new com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper<com.xujie.modules.order.entity.POHeader>() |
|
|
|
.eq(com.xujie.modules.order.entity.POHeader::getOrderNo, sub.getPoNo()) |
|
|
|
.eq(com.xujie.modules.order.entity.POHeader::getSite, site) |
|
|
|
.set(com.xujie.modules.order.entity.POHeader::getStatus, newStatus) |
|
|
|
new LambdaUpdateWrapper<POHeader>() |
|
|
|
.eq(POHeader::getOrderNo, sub.getPoNo()) |
|
|
|
.eq(POHeader::getSite, site) |
|
|
|
.set(POHeader::getStatus, newStatus) |
|
|
|
); |
|
|
|
|
|
|
|
|
|
|
|
log.info("回滚验货 - 更新POHeader状态: orderNo={}, 状态={}", sub.getPoNo(), newStatus); |
|
|
|
} |
|
|
|
} |
|
|
|
|