Browse Source

feat(inspection): 添加验货申请状态管理功能

- 新增countOtherInspectionRequests方法用于查询指定订单的其他验货申请
- 实现删除验货申请时的状态回退逻辑,包括PO明细和订单头状态
- 优化MyBatis Plus Lambda表达式的使用,统一引用方式
- 完善验货完成和回滚操作中的状态更新机制
- 添加对PO订单状态流转的完整支持,确保数据一致性
master
qiankanghui 2 weeks ago
parent
commit
57e87cc01d
  1. 15
      src/main/java/com/xujie/modules/inspection/mapper/InspectionRequestDetailSubMapper.java
  2. 150
      src/main/java/com/xujie/modules/inspection/service/impl/InspectionRequestServiceImpl.java
  3. 10
      src/main/resources/mapper/inspection/InspectionRequestDetailSubMapper.xml

15
src/main/java/com/xujie/modules/inspection/mapper/InspectionRequestDetailSubMapper.java

@ -26,4 +26,19 @@ public interface InspectionRequestDetailSubMapper extends BaseMapper<InspectionR
);
int deleteByRequestNo(@Param("site") String site, @Param("requestNo") String requestNo);
/**
* 查询指定订单是否还有其他验货申请排除当前申请单
* @param site 站点
* @param orderNo 订单号
* @param itemNo 行号
* @param excludeRequestNo 排除的申请单号
* @return 其他验货申请的数量
*/
int countOtherInspectionRequests(
@Param("site") String site,
@Param("orderNo") String orderNo,
@Param("itemNo") Integer itemNo,
@Param("excludeRequestNo") String excludeRequestNo
);
}

150
src/main/java/com/xujie/modules/inspection/service/impl/InspectionRequestServiceImpl.java

@ -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;
@ -49,7 +54,7 @@ public class InspectionRequestServiceImpl extends ServiceImpl<InspectionRequestH
private PODetailMapper podetailMapper;
@Autowired
private com.xujie.modules.order.dao.POHeaderMapper poheaderMapper;
private POHeaderMapper poheaderMapper;
@Autowired
private SrmSupplierMapper srmSupplierMapper;
@ -148,17 +153,17 @@ 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={}",
@ -166,10 +171,10 @@ public class InspectionRequestServiceImpl extends ServiceImpl<InspectionRequestH
// 更新 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,27 +749,27 @@ 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,7 +835,7 @@ 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) {
@ -789,11 +845,11 @@ public class InspectionRequestServiceImpl extends ServiceImpl<InspectionRequestH
// 更新 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) {
@ -819,11 +875,11 @@ public class InspectionRequestServiceImpl extends ServiceImpl<InspectionRequestH
// 更新 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={}, 状态={}",
@ -831,10 +887,10 @@ public class InspectionRequestServiceImpl extends ServiceImpl<InspectionRequestH
// 更新 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);
@ -937,7 +993,7 @@ public class InspectionRequestServiceImpl extends ServiceImpl<InspectionRequestH
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) {
@ -957,11 +1013,11 @@ public class InspectionRequestServiceImpl extends ServiceImpl<InspectionRequestH
// 更新 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={}, 状态={}, 当前数量={}",
@ -969,10 +1025,10 @@ public class InspectionRequestServiceImpl extends ServiceImpl<InspectionRequestH
// 更新 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);

10
src/main/resources/mapper/inspection/InspectionRequestDetailSubMapper.xml

@ -65,4 +65,14 @@
WHERE site = #{site}
AND request_no = #{requestNo}
</delete>
<!-- 查询指定订单是否还有其他验货申请(排除当前申请单) -->
<select id="countOtherInspectionRequests" resultType="int">
SELECT COUNT(1)
FROM srm_inspect_request_detail_sub
WHERE site = #{site}
AND po_no = #{orderNo}
AND po_item_no = #{itemNo}
AND request_no != #{excludeRequestNo}
</select>
</mapper>
Loading…
Cancel
Save