Browse Source

采购接收记录取消

master
han\hanst 3 months ago
parent
commit
550e82af39
  1. 12
      src/main/java/com/gaotao/modules/inspection/service/impl/QualifiedStorageServiceImpl.java
  2. 148
      src/main/java/com/gaotao/modules/po/service/impl/PurchaseManageServiceImpl.java

12
src/main/java/com/gaotao/modules/inspection/service/impl/QualifiedStorageServiceImpl.java

@ -355,18 +355,6 @@ public class QualifiedStorageServiceImpl implements QualifiedStorageService {
String result = ifsApiIssueAndReturnService.purchaseOrderMoveToStockOneLocation(moveDto);
if ("IFSUpdated".equals(result) || "\"IFSUpdated\"".equals(result)) {
// 8. IFS接口调用成功后更新接收记录状态
LambdaUpdateWrapper<PoReceiptDetail> receiptDetailQueryWrapper = Wrappers.lambdaUpdate();
receiptDetailQueryWrapper.eq(PoReceiptDetail::getSite, site)
.eq(PoReceiptDetail::getOrderNo, sourceRef1)
.eq(PoReceiptDetail::getOrderItemNo, sourceRef2)
.eq(PoReceiptDetail::getOrderReleaseNo, sourceRef3)
.eq(PoReceiptDetail::getItemNo, receiptNo);
PoReceiptDetail poReceiptDetail = new PoReceiptDetail();
poReceiptDetail.setStatus("RECEIVED"); // 设置为已入库
poReceiptDetailService.update(poReceiptDetail, receiptDetailQueryWrapper);
log.info("检验合格入库成功,事务号: {}, HandlingUnit数量: {}", inboundTransNo, handlingUnits.size());
return R.ok("检验合格入库成功");
} else {

148
src/main/java/com/gaotao/modules/po/service/impl/PurchaseManageServiceImpl.java

@ -32,6 +32,9 @@ import com.gaotao.modules.sys.entity.SysUserEntity;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
import com.gaotao.modules.api.entity.issueAndReturnVo.PurchaseOrderReceiptVo;
import com.gaotao.modules.api.service.IfsApiIssueAndReturnService;
/**
* 采购管理服务实现类
@ -58,6 +61,9 @@ public class PurchaseManageServiceImpl implements PurchaseManageService {
@Autowired
private InventoryStockMapper inventoryStockMapper;
@Autowired
private IfsApiIssueAndReturnService ifsApiIssueAndReturnService;
@Value("${custom.ifs-url}")
private String ifsUrl;
@ -129,28 +135,72 @@ public class PurchaseManageServiceImpl implements PurchaseManageService {
@Override
public PageUtils getCancelableReceiptList(PoReceiptQueryDto queryDto) {
// 只查询状态为已接收且未取消的记录
queryDto.setStatus("ARRIVED");
IPage<Map<String, Object>> page = poReceiptMapper.getCancelableReceiptList(
new Page<>(queryDto.getPage(), queryDto.getSize()), queryDto);
return new PageUtils(page);
try {
// 验证必要参数
if (StringUtils.isBlank(queryDto.getOrderNo())) {
log.warn("订单号为空,返回空结果");
return new PageUtils(new ArrayList<>(), 0, queryDto.getSize(), queryDto.getPage());
}
// 调用IFS接口获取采购订单接收记录
List<PurchaseOrderReceiptVo> allReceipts = ifsApiIssueAndReturnService.getPurchaseOrderReceipt(
queryDto.getOrderNo(), queryDto.getSite());
// 过滤可取消的记录状态为已接收的记录
List<PurchaseOrderReceiptVo> cancelableReceipts = allReceipts.stream()
.filter(receipt -> "To be Received".equals(receipt.getState()))
.collect(Collectors.toList());
// 应用查询条件过滤
if (StringUtils.isNotBlank(queryDto.getReceiptNo())) {
cancelableReceipts = cancelableReceipts.stream()
.filter(receipt -> String.valueOf(receipt.getReceiptNo()).contains(queryDto.getReceiptNo()))
.collect(Collectors.toList());
}
if (StringUtils.isNotBlank(queryDto.getPartNo())) {
cancelableReceipts = cancelableReceipts.stream()
.filter(receipt -> receipt.getSourcePartNo() != null &&
receipt.getSourcePartNo().contains(queryDto.getPartNo()))
.collect(Collectors.toList());
}
if (StringUtils.isNotBlank(queryDto.getSupplierId())) {
cancelableReceipts = cancelableReceipts.stream()
.filter(receipt -> receipt.getSender() != null &&
receipt.getSender().contains(queryDto.getSupplierId()))
.collect(Collectors.toList());
}
// 手动分页
int page = queryDto.getPage();
int size = queryDto.getSize();
int total = cancelableReceipts.size();
int start = (page - 1) * size;
int end = Math.min(start + size, total);
List<PurchaseOrderReceiptVo> pagedReceipts = cancelableReceipts.subList(start, end);
// 构造分页结果
PageUtils pageUtils = new PageUtils(pagedReceipts, total, size, page);
return pageUtils;
} catch (Exception e) {
log.error("获取可取消接收记录失败: {}", e.getMessage(), e);
// 如果IFS接口调用失败返回空结果
return new PageUtils(new ArrayList<>(), 0, queryDto.getSize(), queryDto.getPage());
}
}
@Override
@Transactional
public R cancelReceipt(Map<String, Object> params) {
try {
String receiptNo = (String) params.get("receiptNo");
String receiptSequence = String.valueOf(params.get("receiptSequence"));
String site = (String) params.get("site");
String cancelReason = (String) params.get("cancelReason");
Double itemNo = params.get("itemNo") != null ? Double.valueOf(params.get("itemNo").toString()) : null;
// 2. 调用IFS接口同步取消操作
syncCancelToIfs(receiptNo, site, itemNo, cancelReason);
// 3. 更新本地记录状态
updateLocalRecordStatus(receiptNo, site, itemNo, "CANCEL", cancelReason);
syncCancelToIfs(receiptSequence, site, cancelReason);
return R.ok("取消接收成功");
} catch (Exception e) {
@ -204,65 +254,31 @@ public class PurchaseManageServiceImpl implements PurchaseManageService {
/**
* 同步取消操作到IFS
*/
private void syncCancelToIfs(String receiptNo, String site, Double itemNo, String cancelReason) {
private void syncCancelToIfs(String receiptSequence, String site, String cancelReason) {
try {
// 根据receiptNositeitemNo查询PoReceiptDetail记录获取订单相关信息
LambdaQueryWrapper<PoReceiptDetail> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(PoReceiptDetail::getReceiptNo, receiptNo)
.eq(PoReceiptDetail::getSite, site);
if (itemNo != null) {
wrapper.eq(PoReceiptDetail::getItemNo, itemNo);
}
List<PoReceiptDetail> details = poReceiptDetailMapper.selectList(wrapper);
if (details.isEmpty()) {
throw new XJException("未找到对应的接收记录");
}
// 对每个接收记录调用IFS取消方法
for (PoReceiptDetail detail : details) {
Map<String, Object> params = Map.of(
"ifsDBName", ifsDBName,
"domainUserID", getCurrentDomainUserID(),
"ifsSiteID", site,
"ifsReceiptSequence", "2690471"
);
ObjectMapper objectMapper = new ObjectMapper();
String jsonBody = objectMapper.writeValueAsString(params);
String ifsResponse = HttpUtils.doPost(ifsUrl + "CancelPurchaseOrderArrival", jsonBody, null);
if ("IFSUpdated".equals(ifsResponse) || "\"IFSUpdated\"".equals(ifsResponse)) {
log.info("IFS取消接收成功,PO号: {}", detail.getOrderNo());
} else {
log.error("IFS取消接收失败,PO号: {}, 响应: {}", detail.getOrderNo(), ifsResponse);
// 同步失败需要回滚前面所有的数据库操作
String errorMessage = IfsErrorMessageUtils.extractOracleErrorMessage(ifsResponse);
throw new XJException(errorMessage);
}
Map<String, Object> params = Map.of(
"ifsDBName", ifsDBName,
"domainUserID", getCurrentDomainUserID(),
"ifsSiteID", site,
"ifsReceiptSequence", receiptSequence
);
ObjectMapper objectMapper = new ObjectMapper();
String jsonBody = objectMapper.writeValueAsString(params);
String ifsResponse = HttpUtils.doPost(ifsUrl + "CancelPurchaseOrderArrival", jsonBody, null);
if ("IFSUpdated".equals(ifsResponse) || "\"IFSUpdated\"".equals(ifsResponse)) {
log.info("IFS取消接收成功,PO号: {}", receiptSequence);
} else {
log.error("IFS取消接收失败,PO号: {}, 响应: {}", receiptSequence, ifsResponse);
// 同步失败需要回滚前面所有的数据库操作
String errorMessage = IfsErrorMessageUtils.extractOracleErrorMessage(ifsResponse);
throw new XJException(errorMessage);
}
} catch (Exception e) {
log.error("同步IFS取消操作异常: {}", e.getMessage(), e);
throw new XJException("IFS同步异常: " + e.getMessage());
}
}
/**
* 更新本地记录状态
*/
private void updateLocalRecordStatus(String receiptNo, String site, Double itemNo, String status, String cancelReason) {
// 更新接收明细状态
LambdaQueryWrapper<PoReceiptDetail> detailWrapper = new LambdaQueryWrapper<>();
detailWrapper.eq(PoReceiptDetail::getReceiptNo, receiptNo)
.eq(PoReceiptDetail::getSite, site);
if (itemNo != null) {
detailWrapper.eq(PoReceiptDetail::getItemNo, itemNo);
}
PoReceiptDetail detail = new PoReceiptDetail();
detail.setStatus(status);
detail.setCanceIremark(cancelReason);
poReceiptDetailMapper.update(detail, detailWrapper);
}
}
Loading…
Cancel
Save