|
|
|
@ -2,7 +2,7 @@ package com.gaotao.modules.purchaseReturn.service.impl; |
|
|
|
|
|
|
|
import com.gaotao.modules.purchaseReturn.dao.PurchaseReturnMapper; |
|
|
|
import com.gaotao.modules.purchaseReturn.service.PurchaseReturnService; |
|
|
|
import com.gaotao.modules.inventoryStock.service.InventoryStockService; |
|
|
|
import com.gaotao.modules.schedule.mapper.ProcedureMapper; |
|
|
|
import com.gaotao.modules.sys.entity.SysUserEntity; |
|
|
|
import com.gaotao.modules.trans.entity.TransDetail; |
|
|
|
import com.gaotao.modules.trans.entity.TransDetailDto; |
|
|
|
@ -29,9 +29,6 @@ public class PurchaseReturnServiceImpl implements PurchaseReturnService { |
|
|
|
@Autowired |
|
|
|
private PurchaseReturnMapper purchaseReturnMapper; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
private InventoryStockService inventoryStockService; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
private TransHeaderService transHeaderService; |
|
|
|
|
|
|
|
@ -41,6 +38,9 @@ public class PurchaseReturnServiceImpl implements PurchaseReturnService { |
|
|
|
@Autowired |
|
|
|
private TransDetailSubService transDetailSubService; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
private ProcedureMapper procedureMapper; |
|
|
|
|
|
|
|
@Override |
|
|
|
public List<Map<String, Object>> getReturnList(String site, String warehouseId, String searchCode, String status) { |
|
|
|
SysUserEntity sysUserEntity = (SysUserEntity) SecurityUtils.getSubject().getPrincipal(); |
|
|
|
@ -53,67 +53,144 @@ public class PurchaseReturnServiceImpl implements PurchaseReturnService { |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public Map<String, Object> validateLabelWithReturn(String labelCode, String returnNo, String warehouseId, String site, String buNo) { |
|
|
|
Map<String, Object> result = purchaseReturnMapper.validateLabelWithReturn(labelCode, returnNo, warehouseId, site, buNo); |
|
|
|
if (result == null || result.isEmpty()) { |
|
|
|
throw new RuntimeException("该标签与退货单不符,请检查"); |
|
|
|
} |
|
|
|
String status = (String) result.get("status"); |
|
|
|
if (!"在库".equals(status)) { |
|
|
|
throw new RuntimeException("该标签状态不允许退货"); |
|
|
|
} |
|
|
|
return result; |
|
|
|
} |
|
|
|
public Map<String, Object> validateLabelWithReturn(String site, String buNo, String returnNo, |
|
|
|
String relatedNo, String relatedLineNo, |
|
|
|
String labelCode, String operationType, String userName) { |
|
|
|
logger.info("验证采购退货标签,site: {}, buNo: {}, 退货单号: {}, 关联单号: {}, 关联行号: {}, 标签: {}, 操作类型: {}", |
|
|
|
site, buNo, returnNo, relatedNo, relatedLineNo, labelCode, operationType); |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional(rollbackFor = Exception.class) |
|
|
|
public boolean confirmPurchaseReturn(String site, String buNo, String returnNo, String warehouseId, List<Map<String, Object>> labels) { |
|
|
|
logger.info("开始确认采购退货,退货单号: {}, 仓库ID: {}, 标签数量: {}", returnNo, warehouseId, labels.size()); |
|
|
|
try { |
|
|
|
// 1. 更新库存表中的标签状态为"已退货" |
|
|
|
List<String> labelCodes = new ArrayList<>(); |
|
|
|
for (Map<String, Object> label : labels) { |
|
|
|
labelCodes.add((String) label.get("labelCode")); |
|
|
|
// 调用存储过程 GetScanLabelVerification |
|
|
|
List<Object> params = new ArrayList<>(); |
|
|
|
params.add(site); // 参数1: site |
|
|
|
params.add(buNo); // 参数2: buNo |
|
|
|
params.add(returnNo); // 参数3: 退货单号 |
|
|
|
params.add(relatedNo); // 参数4: 关联单号 |
|
|
|
params.add(relatedLineNo); // 参数5: 关联单行号 |
|
|
|
params.add(""); // 参数6: 空字符串 |
|
|
|
params.add(""); // 参数7: 空字符串 |
|
|
|
params.add(labelCode); // 参数8: 扫描的标签条码 |
|
|
|
params.add(""); // 参数9: 空字符串 |
|
|
|
params.add("采购退货"); // 参数10: 采购退货 |
|
|
|
params.add(operationType); // 参数11: 操作类型 I或D |
|
|
|
params.add(userName); // 参数12: 当前登陆人 |
|
|
|
|
|
|
|
List<Map<String, Object>> resultList = procedureMapper.getProcedureData("GetScanLabelVerification", params); |
|
|
|
|
|
|
|
// 判断返回结果 |
|
|
|
if (resultList == null || resultList.isEmpty()) { |
|
|
|
throw new RuntimeException("存储过程调用失败"); |
|
|
|
} |
|
|
|
|
|
|
|
int updatedLabels = purchaseReturnMapper.updateInventoryStatus(labelCodes, "已退货", site, buNo); |
|
|
|
if (updatedLabels != labelCodes.size()) { |
|
|
|
throw new RuntimeException("部分标签状态更新失败"); |
|
|
|
Map<String, Object> result = resultList.get(0); |
|
|
|
String code = String.valueOf(result.get("code")); |
|
|
|
|
|
|
|
if (!"200".equals(code)) { |
|
|
|
String msg = String.valueOf(result.get("message")); |
|
|
|
throw new RuntimeException(msg); |
|
|
|
} |
|
|
|
|
|
|
|
// 2. 检查是否所有标签都已退货,决定是否更新退货单状态 |
|
|
|
Map<String, Object> labelStats = purchaseReturnMapper.checkAllLabelsReturned(returnNo, site, buNo); |
|
|
|
if (labelStats != null) { |
|
|
|
Integer totalLabels = (Integer) labelStats.get("totalLabels"); |
|
|
|
Integer returnedLabels = (Integer) labelStats.get("returnedLabels"); |
|
|
|
logger.info("标签验证成功,标签: {}, 操作类型: {}", labelCode, operationType); |
|
|
|
return result; |
|
|
|
} catch (Exception e) { |
|
|
|
logger.error("标签验证失败,标签: {}, 错误: {}", labelCode, e.getMessage(), e); |
|
|
|
throw new RuntimeException(e.getMessage(), e); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
logger.info("退货单 {} 标签统计: 总标签数={}, 已退货标签数={}", returnNo, totalLabels, returnedLabels); |
|
|
|
@Override |
|
|
|
@Transactional(rollbackFor = Exception.class) |
|
|
|
public boolean confirmPurchaseReturn(String site, String buNo, String returnNo, |
|
|
|
String relatedNo, String relatedLineNo, |
|
|
|
String locationCode, String userName) { |
|
|
|
logger.info("开始确认采购退货,site: {}, buNo: {}, 退货单号: {}, 关联单号: {}, 关联行号: {}, 库位: {}", |
|
|
|
site, buNo, returnNo, relatedNo, relatedLineNo, locationCode); |
|
|
|
|
|
|
|
// 只有当所有标签都已退货时,才更新退货单状态为"已完成" |
|
|
|
if (totalLabels != null && returnedLabels != null && totalLabels.equals(returnedLabels) && totalLabels > 0) { |
|
|
|
int updatedHead = purchaseReturnMapper.updateReturnStatus(returnNo, "已完成", site, buNo); |
|
|
|
if (updatedHead > 0) { |
|
|
|
logger.info("退货单 {} 所有标签已退货,状态更新为已完成", returnNo); |
|
|
|
} |
|
|
|
} else { |
|
|
|
logger.info("退货单 {} 还有标签未退货,保持待退货状态", returnNo); |
|
|
|
} |
|
|
|
try { |
|
|
|
// 调用存储过程 GetSaveLabelVerification |
|
|
|
List<Object> params = new ArrayList<>(); |
|
|
|
params.add(site); // 参数1: site |
|
|
|
params.add(buNo); // 参数2: buNo |
|
|
|
params.add(returnNo); // 参数3: 退货单号 |
|
|
|
params.add(relatedNo); // 参数4: 关联单号 |
|
|
|
params.add(relatedLineNo); // 参数5: 关联单行号 |
|
|
|
params.add(""); // 参数6: 空字符串 |
|
|
|
params.add(""); // 参数7: 空字符串 |
|
|
|
params.add(locationCode); // 参数8: 库位 |
|
|
|
params.add("采购退货"); // 参数9: 采购退货 |
|
|
|
params.add(userName); // 参数10: 当前登陆人 |
|
|
|
|
|
|
|
List<Map<String, Object>> resultList = procedureMapper.getProcedureData("GetSaveLabelVerification", params); |
|
|
|
|
|
|
|
// 判断返回结果 |
|
|
|
if (resultList == null || resultList.isEmpty()) { |
|
|
|
throw new RuntimeException("存储过程调用失败"); |
|
|
|
} |
|
|
|
|
|
|
|
// 3. 生成退货事务记录 |
|
|
|
generateReturnTransaction(returnNo, warehouseId, labels, site, buNo); |
|
|
|
Map<String, Object> result = resultList.get(0); |
|
|
|
String code = String.valueOf(result.get("code")); |
|
|
|
|
|
|
|
// 4. 异步调用ERP接口(这里可以发送消息到队列) |
|
|
|
//asyncCallErpInterface(returnNo, labels); |
|
|
|
if (!"200".equals(code)) { |
|
|
|
String msg = String.valueOf(result.get("message")); |
|
|
|
throw new RuntimeException(msg); |
|
|
|
} |
|
|
|
|
|
|
|
logger.info("采购退货确认完成,退货单号: {}", returnNo); |
|
|
|
logger.info("采购退货确认成功,退货单号: {}", returnNo); |
|
|
|
return true; |
|
|
|
} catch (Exception e) { |
|
|
|
logger.error("采购退货确认失败,退货单号: {}, 错误信息: {}", returnNo, e.getMessage(), e); |
|
|
|
throw new RuntimeException("退货确认失败: " + e.getMessage(), e); |
|
|
|
logger.error("采购退货确认失败,退货单号: {}, 错误: {}", returnNo, e.getMessage(), e); |
|
|
|
throw new RuntimeException(e.getMessage(), e); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 保留原有的实现方法作为注释,以防需要 |
|
|
|
// private boolean confirmPurchaseReturnOld(String site, String buNo, String returnNo, String warehouseId, List<Map<String, Object>> labels) { |
|
|
|
// logger.info("开始确认采购退货(旧方法),退货单号: {}, 仓库ID: {}, 标签数量: {}", returnNo, warehouseId, labels.size()); |
|
|
|
// try { |
|
|
|
// // 1. 更新库存表中的标签状态为"已退货" |
|
|
|
// List<String> labelCodes = new ArrayList<>(); |
|
|
|
// for (Map<String, Object> label : labels) { |
|
|
|
// labelCodes.add((String) label.get("labelCode")); |
|
|
|
// } |
|
|
|
// |
|
|
|
// int updatedLabels = purchaseReturnMapper.updateInventoryStatus(labelCodes, "已退货", site, buNo); |
|
|
|
// if (updatedLabels != labelCodes.size()) { |
|
|
|
// throw new RuntimeException("部分标签状态更新失败"); |
|
|
|
// } |
|
|
|
// |
|
|
|
// // 2. 检查是否所有标签都已退货,决定是否更新退货单状态 |
|
|
|
// Map<String, Object> labelStats = purchaseReturnMapper.checkAllLabelsReturned(returnNo, site, buNo); |
|
|
|
// if (labelStats != null) { |
|
|
|
// Integer totalLabels = (Integer) labelStats.get("totalLabels"); |
|
|
|
// Integer returnedLabels = (Integer) labelStats.get("returnedLabels"); |
|
|
|
// |
|
|
|
// logger.info("退货单 {} 标签统计: 总标签数={}, 已退货标签数={}", returnNo, totalLabels, returnedLabels); |
|
|
|
// |
|
|
|
// // 只有当所有标签都已退货时,才更新退货单状态为"已完成" |
|
|
|
// if (totalLabels != null && returnedLabels != null && totalLabels.equals(returnedLabels) && totalLabels > 0) { |
|
|
|
// int updatedHead = purchaseReturnMapper.updateReturnStatus(returnNo, "已完成", site, buNo); |
|
|
|
// if (updatedHead > 0) { |
|
|
|
// logger.info("退货单 {} 所有标签已退货,状态更新为已完成", returnNo); |
|
|
|
// } |
|
|
|
// } else { |
|
|
|
// logger.info("退货单 {} 还有标签未退货,保持待退货状态", returnNo); |
|
|
|
// } |
|
|
|
// } |
|
|
|
// |
|
|
|
// // 3. 生成退货事务记录 |
|
|
|
// generateReturnTransaction(returnNo, warehouseId, labels, site, buNo); |
|
|
|
// |
|
|
|
// // 4. 异步调用ERP接口(这里可以发送消息到队列) |
|
|
|
// //asyncCallErpInterface(returnNo, labels); |
|
|
|
// |
|
|
|
// logger.info("采购退货确认完成,退货单号: {}", returnNo); |
|
|
|
// return true; |
|
|
|
// } catch (Exception e) { |
|
|
|
// logger.error("采购退货确认失败,退货单号: {}, 错误信息: {}", returnNo, e.getMessage(), e); |
|
|
|
// throw new RuntimeException("退货确认失败: " + e.getMessage(), e); |
|
|
|
// } |
|
|
|
// } |
|
|
|
|
|
|
|
@Override |
|
|
|
public List<Map<String, Object>> getMaterialList(String site, String buNo, String returnNo) { |
|
|
|
logger.info("获取采购退货物料清单,站点: {}, 业务单元: {}, 退货单号: {}", site, buNo, returnNo); |
|
|
|
@ -296,4 +373,26 @@ public class PurchaseReturnServiceImpl implements PurchaseReturnService { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public List<Map<String, Object>> getScannedLabelList(String site, String buNo, String returnNo, |
|
|
|
String relatedNo, String relatedLineNo) { |
|
|
|
logger.info("获取已扫描标签列表,site: {}, buNo: {}, 退货单号: {}, 关联单号: {}, 关联行号: {}", |
|
|
|
site, buNo, returnNo, relatedNo, relatedLineNo); |
|
|
|
|
|
|
|
try { |
|
|
|
List<Map<String, Object>> labelList = purchaseReturnMapper.getScannedLabelList( |
|
|
|
site, buNo, returnNo, relatedNo, relatedLineNo); |
|
|
|
|
|
|
|
if (labelList == null) { |
|
|
|
labelList = new ArrayList<>(); |
|
|
|
} |
|
|
|
|
|
|
|
logger.info("获取已扫描标签列表成功,共 {} 条记录", labelList.size()); |
|
|
|
return labelList; |
|
|
|
} catch (Exception e) { |
|
|
|
logger.error("获取已扫描标签列表失败,错误: {}", e.getMessage(), e); |
|
|
|
throw new RuntimeException("获取已扫描标签列表失败: " + e.getMessage(), e); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |