Browse Source

feat(order): 新增PO明细管理服务及优化验货申请功能

- 新增PODetailServiceImpl完整实现包括CRD/ETA自动计算逻辑
- 添加批量导入PO明细功能支持Excel文件上传处理
- 实现PO明细批量更新时的校验逻辑和端口运输方式映射
- 优化验货申请删除权限控制增加已审核状态允许删除
- 修复查询PO页面时的XML格式化问题移除多余换行
- 移除验货申请服务中冗余的站点自动设置代码
- 简化删除操作注释保持代码整洁性
master
qiankanghui 1 week ago
parent
commit
11fee8fe11
  1. 11
      src/main/java/com/xujie/modules/inspection/service/impl/InspectionRequestServiceImpl.java
  2. 20
      src/main/java/com/xujie/modules/order/service/Impl/PODetailServiceImpl.java
  3. 3
      src/main/resources/mapper/inspection/InspectionRequestHeaderMapper.xml
  4. 2
      src/main/resources/mapper/order/PODetailMapper.xml

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

@ -106,10 +106,6 @@ public class InspectionRequestServiceImpl extends ServiceImpl<InspectionRequestH
@Override @Override
public PageUtils queryPoPage(InspectionRequestItemVO data) { public PageUtils queryPoPage(InspectionRequestItemVO data) {
if (!StringUtils.hasText(data.getSite())) {
SysUserEntity currentUser = (SysUserEntity) SecurityUtils.getSubject().getPrincipal();
data.setSite(currentUser.getSite());
}
IPage<InspectionRequestItemVO> page = IPage<InspectionRequestItemVO> page =
baseMapper.queryPoPage(new Page<>(data.getPage(), data.getLimit()), data); baseMapper.queryPoPage(new Page<>(data.getPage(), data.getLimit()), data);
return new PageUtils(page); return new PageUtils(page);
@ -280,7 +276,7 @@ public class InspectionRequestServiceImpl extends ServiceImpl<InspectionRequestH
} }
// 只有状态为草稿和已确认的验货申请允许删除 // 只有状态为草稿和已确认的验货申请允许删除
if (!"草稿".equals(header.getStatus()) && !"已确认".equals(header.getStatus())) {
if (!"草稿".equals(header.getStatus()) && !"已确认".equals(header.getStatus()) && !"已审核".equals(header.getStatus())) {
throw new RuntimeException("只有状态为草稿和已确认的验货申请允许删除,当前状态:" + header.getStatus()); throw new RuntimeException("只有状态为草稿和已确认的验货申请允许删除,当前状态:" + header.getStatus());
} }
@ -321,11 +317,8 @@ public class InspectionRequestServiceImpl extends ServiceImpl<InspectionRequestH
int detailDeleteCount = inspectionRequestDetailMapper.deleteByRequestNo(site, requestNo); int detailDeleteCount = inspectionRequestDetailMapper.deleteByRequestNo(site, requestNo);
log.info("删除明细记录数: {}", detailDeleteCount); log.info("删除明细记录数: {}", detailDeleteCount);
// 5. 删除费用表 srm_inspect_request_fee如果存在
// 注意根据代码搜索该表可能不存在这里暂时跳过
// 如果后续需要可以添加对应的Mapper和删除逻辑
// 6. 删除头表 srm_inspection_request_header
// 删除头表 srm_inspection_request_header
int headerDeleteCount = baseMapper.deleteByRequestNo(site, requestNo); int headerDeleteCount = baseMapper.deleteByRequestNo(site, requestNo);
log.info("删除头表记录数: {}", headerDeleteCount); log.info("删除头表记录数: {}", headerDeleteCount);

20
src/main/java/com/xujie/modules/order/service/Impl/PODetailServiceImpl.java

@ -435,6 +435,7 @@ public class PODetailServiceImpl extends ServiceImpl<PODetailMapper, PODetail> i
throw new RuntimeException("当前用户site为空!"); throw new RuntimeException("当前用户site为空!");
} }
Map<String, Integer> ref2Counter = new HashMap<>();
// 用于收集错误信息 // 用于收集错误信息
List<String> errorMessages = new ArrayList<>(); List<String> errorMessages = new ArrayList<>();
@ -496,6 +497,7 @@ public class PODetailServiceImpl extends ServiceImpl<PODetailMapper, PODetail> i
// 设置默认值 // 设置默认值
poHeader.setCurrency("USA"); poHeader.setCurrency("USA");
poHeader.setCurrencyRate(1.0); poHeader.setCurrencyRate(1.0);
poHeader.setStatus("已下达");
// 供应商 // 供应商
if (excelDTO.getSupplierName() != null && !excelDTO.getSupplierName().isEmpty()) { if (excelDTO.getSupplierName() != null && !excelDTO.getSupplierName().isEmpty()) {
@ -541,9 +543,21 @@ public class PODetailServiceImpl extends ServiceImpl<PODetailMapper, PODetail> i
// 关联 // 关联
poDetailVo.setPoHeaderId(savedHeader.getId()); poDetailVo.setPoHeaderId(savedHeader.getId());
// 设置 order_ref1 order_ref2
poDetailVo.setOrderRef1(excelDTO.getPoNo());
poDetailVo.setOrderRef2("1");
String ref1 = excelDTO.getPoNo();
poDetailVo.setOrderRef1(ref1);
Integer currentMax = ref2Counter.get(ref1);
if (currentMax == null) {
Integer dbMax = baseMapper.getMaxOrderRef2(ref1);
currentMax = (dbMax == null ? 0 : dbMax);
}
int next = currentMax + 1;
ref2Counter.put(ref1, next);
poDetailVo.setOrderRef2(String.valueOf(next));
// 业务字段 - 款号保存到 part_no 字段 // 业务字段 - 款号保存到 part_no 字段
poDetailVo.setPartNo(excelDTO.getItem()); poDetailVo.setPartNo(excelDTO.getItem());

3
src/main/resources/mapper/inspection/InspectionRequestHeaderMapper.xml

@ -53,8 +53,7 @@
</where> </where>
order by h.request_date desc order by h.request_date desc
</select> </select>
<select id="queryPoPage"
resultType="com.xujie.modules.inspection.data.InspectionRequestItemVO">
<select id="queryPoPage" resultType="com.xujie.modules.inspection.data.InspectionRequestItemVO">
SELECT SELECT
pod.site, pod.site,
pod.order_no, pod.order_no,

2
src/main/resources/mapper/order/PODetailMapper.xml

@ -504,6 +504,4 @@
FROM PODetail FROM PODetail
WHERE order_ref1 = #{orderRef1} WHERE order_ref1 = #{orderRef1}
</select> </select>
</mapper> </mapper>
Loading…
Cancel
Save