Browse Source

feat(inspection): 添加验货申请明细回滚功能

- 新增 rollbackInspectRequestDetail 方法用于回滚验货申请明细
- 添加 XML 映射实现清空 inspect_no 并更新状态为已排程
- 在 QcServiceImpl 中集成回滚逻辑到删除操作
- 修改 startInspection 方法使用 LambdaUpdateWrapper 更新状态
- 移除验货单号生成逻辑,由 QcServiceImpl 统一处理
master
qiankanghui 2 days ago
parent
commit
d345f594e6
  1. 7
      src/main/java/com/xujie/modules/inspection/mapper/InspectionRequestDetailMapper.java
  2. 25
      src/main/java/com/xujie/modules/inspection/service/impl/InspectionRequestServiceImpl.java
  3. 19
      src/main/java/com/xujie/modules/qms/service/impl/QcServiceImpl.java
  4. 11
      src/main/resources/mapper/inspection/InspectionRequestDetailMapper.xml

7
src/main/java/com/xujie/modules/inspection/mapper/InspectionRequestDetailMapper.java

@ -92,4 +92,11 @@ public interface InspectionRequestDetailMapper extends BaseMapper<InspectionRequ
*/
List<InspectionRequestDetail> selectDetailsForStatusCheck(@Param("site") String site,
@Param("requestNo") String requestNo);
/**
* 回滚验货申请明细 - 清空inspect_no并更新状态为已排程
*/
int rollbackInspectRequestDetail(@Param("site") String site,
@Param("poOrderNo") String poOrderNo,
@Param("poItemNo") Integer poItemNo);
}

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

@ -632,29 +632,24 @@ public class InspectionRequestServiceImpl extends ServiceImpl<InspectionRequestH
throw new RuntimeException("检验申请明细不存在: site=" + site + ", requestNo=" + requestNo + ", itemNo=" + itemNo);
}
log.info("开始验货: requestNo={}, itemNo={}, site={}", requestNo, itemNo, site);
// 3. 生成验货单号
srmSupplierMapper.updateTransNo(site, "IN");
String inspectNo = srmSupplierMapper.getTransNo(site, "IN");
log.info("生成验货单号: inspectNo={}", inspectNo);
// 4. 更新指定明细表状态和验货单号只更新指定的 itemNo
log.info("准备更新明细状态: site={}, requestNo={}, itemNo={}, inspectNo={}", site, requestNo, itemNo, inspectNo);
int detailUpdateCount = inspectionRequestDetailMapper.startInspection(site, requestNo, itemNo, inspectNo);
log.info("明细更新结果: detailUpdateCount={}", detailUpdateCount);
// 3. 更新指定明细表状态为验货中inspect_no QcServiceImpl 生成并回传
int detailUpdateCount = inspectionRequestDetailMapper.update(null,
new com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper<InspectionRequestDetail>()
.eq(InspectionRequestDetail::getSite, site)
.eq(InspectionRequestDetail::getRequestNo, requestNo)
.eq(InspectionRequestDetail::getItemNo, itemNo)
.set(InspectionRequestDetail::getStatus, "验货中")
.set(InspectionRequestDetail::getStatusDb, "Inspecting")
);
if (detailUpdateCount == 0) {
throw new RuntimeException("更新明细表状态失败,可能原因:1.记录不存在 2.记录已被其他事务修改 3.site/requestNo/itemNo不匹配");
}
// 5. 更新头表状态为验货中只要有明细开始验货头表就立即更新
// 4. 更新头表状态为验货中只要有明细开始验货头表就立即更新
int headerUpdateCount = baseMapper.startInspection(site, requestNo);
if (headerUpdateCount == 0) {
throw new RuntimeException("更新头表状态失败");
}
log.info("头表状态已更新为验货中: requestNo={}", requestNo);
log.info("开始验货成功: requestNo={}, itemNo={}, inspectNo={}", requestNo, itemNo, inspectNo);
}
@Transactional(rollbackFor = Exception.class)

19
src/main/java/com/xujie/modules/qms/service/impl/QcServiceImpl.java

@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xujie.common.exception.XJException;
import com.xujie.common.utils.*;
import com.xujie.modules.inspection.data.MyInspectionListVO;
import com.xujie.modules.inspection.mapper.InspectionRequestDetailMapper;
import com.xujie.modules.inspection.mapper.InspectionRequestHeaderMapper;
import com.xujie.modules.qms.data.PartData;
import com.xujie.modules.oss.dao.SysOssDao;
@ -86,6 +87,9 @@ public class QcServiceImpl implements QcService {
@Autowired
private InspectionRequestHeaderMapper inspectionRequestHeaderMapper;
@Autowired
private InspectionRequestDetailMapper inspectionRequestDetailMapper;
@Value("${sys-file.oss-url}")
private String ossUrl;
@ -3682,6 +3686,21 @@ public class QcServiceImpl implements QcService {
if ("已完成".equals(qcData.getState())) {
throw new RuntimeException("检验单已完成,不允许删除!");
}
// 回滚验货申请明细清空inspect_no并更新状态为已排程
if (qcData.getPoOrderNo() != null && qcData.getPoItemNo() != null) {
try {
Integer poItemNo = Integer.parseInt(qcData.getPoItemNo());
inspectionRequestDetailMapper.rollbackInspectRequestDetail(
qcData.getSite(),
qcData.getPoOrderNo(),
poItemNo
);
} catch (NumberFormatException e) {
// poItemNo格式错误时忽略继续执行删除逻辑
}
}
// 删除检验记录
qcMapper.deleteIQCRecord(qcData);
// 删除明细记录信息

11
src/main/resources/mapper/inspection/InspectionRequestDetailMapper.xml

@ -227,4 +227,15 @@
ORDER BY d.item_no ASC
</select>
<!-- 回滚验货申请明细 - 清空inspect_no并更新状态为已排程 -->
<update id="rollbackInspectRequestDetail">
UPDATE srm_inspect_request_detail
SET inspect_no = NULL,
status = '已排程',
status_db = 'Scheduled'
WHERE site = #{site}
AND request_no = #{poOrderNo}
AND item_no = #{poItemNo}
</update>
</mapper>
Loading…
Cancel
Save