|
|
|
|
@ -4,12 +4,17 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
|
|
import com.github.yulichang.toolkit.JoinWrappers;
|
|
|
|
|
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
|
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import org.apache.dubbo.config.annotation.DubboReference;
|
|
|
|
|
import org.dromara.common.core.exception.ServiceException;
|
|
|
|
|
import org.dromara.common.core.utils.MapstructUtils;
|
|
|
|
|
import org.dromara.common.core.utils.StringUtils;
|
|
|
|
|
import org.dromara.common.mybatis.core.page.PageQuery;
|
|
|
|
|
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
|
|
|
|
import org.dromara.common.satoken.utils.LoginHelper;
|
|
|
|
|
import org.dromara.common.tenant.helper.TenantHelper;
|
|
|
|
|
import org.dromara.qms.api.RemoteQmsInspectionService;
|
|
|
|
|
import org.dromara.qms.api.dto.WmsInspectionTaskRequest;
|
|
|
|
|
import org.dromara.wms.domain.BaseMaterialCategory;
|
|
|
|
|
import org.dromara.wms.domain.SysUser;
|
|
|
|
|
import org.dromara.wms.domain.WmsInstockOrder;
|
|
|
|
|
@ -45,6 +50,7 @@ import java.util.Map;
|
|
|
|
|
* @author Yinq
|
|
|
|
|
* @date 2025-01-07
|
|
|
|
|
*/
|
|
|
|
|
@Slf4j
|
|
|
|
|
@RequiredArgsConstructor
|
|
|
|
|
@Service
|
|
|
|
|
public class WmsInstockRecordServiceImpl implements IWmsInstockRecordService {
|
|
|
|
|
@ -59,6 +65,13 @@ public class WmsInstockRecordServiceImpl implements IWmsInstockRecordService {
|
|
|
|
|
private final IWmsPurchaseOrderService purchaseOrderService;
|
|
|
|
|
private final IWmsPurchaseOrderDetailService purchaseOrderDetailService;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* QMS 质检服务(Dubbo 引用)
|
|
|
|
|
* 用于为 WMS 入库单创建质检任务
|
|
|
|
|
*/
|
|
|
|
|
@DubboReference(timeout = 300000)
|
|
|
|
|
private final RemoteQmsInspectionService remoteQmsInspectionService;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 查询入库记录
|
|
|
|
|
@ -367,4 +380,79 @@ public class WmsInstockRecordServiceImpl implements IWmsInstockRecordService {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* PDA 入库提交(带质检判断)
|
|
|
|
|
* <p>
|
|
|
|
|
* 业务流程:
|
|
|
|
|
* 1. 查询入库打印记录
|
|
|
|
|
* 2. 判断是否需要质检(是否有物料 inspectionRequest = "0")
|
|
|
|
|
* 3. 如果全部是免检物料,直接调用 completeQualityCheck() 完成入库
|
|
|
|
|
* 4. 如果有必检物料,调用 QMS 创建质检任务,更新打印记录状态为"质检中"
|
|
|
|
|
*
|
|
|
|
|
* @param instockCode 入库单号
|
|
|
|
|
* @return 是否处理成功
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
|
|
public Boolean submitInstockWithQualityCheck(String instockCode) {
|
|
|
|
|
log.info("PDA入库提交开始,入库单号: {}", instockCode);
|
|
|
|
|
|
|
|
|
|
// 1. 查询入库打印记录
|
|
|
|
|
WmsInstockPrintBo printBo = new WmsInstockPrintBo();
|
|
|
|
|
printBo.setInstockCode(instockCode);
|
|
|
|
|
List<WmsInstockPrintVo> prints = instockPrintService.queryList(printBo);
|
|
|
|
|
|
|
|
|
|
if (prints.isEmpty()) {
|
|
|
|
|
throw new ServiceException("入库打印记录不存在: " + instockCode);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 2. 判断是否需要质检
|
|
|
|
|
boolean needInspection = prints.stream()
|
|
|
|
|
.anyMatch(print -> "0".equals(print.getInspectionRequest()));
|
|
|
|
|
|
|
|
|
|
if (!needInspection) {
|
|
|
|
|
// 免检物料 - 直接入库
|
|
|
|
|
log.info("入库单 {} 全部为免检物料,直接入库", instockCode);
|
|
|
|
|
return completeQualityCheck(instockCode);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 3. 必检物料 - 调用 QMS 创建质检任务
|
|
|
|
|
log.info("入库单 {} 包含必检物料,开始创建质检任务", instockCode);
|
|
|
|
|
|
|
|
|
|
for (WmsInstockPrintVo print : prints) {
|
|
|
|
|
// 只处理必检物料
|
|
|
|
|
if ("0".equals(print.getInspectionRequest())) {
|
|
|
|
|
try {
|
|
|
|
|
// 构建 QMS 请求参数
|
|
|
|
|
WmsInspectionTaskRequest request = new WmsInspectionTaskRequest();
|
|
|
|
|
request.setInstockCode(instockCode);
|
|
|
|
|
request.setMaterialCode(print.getMaterialCode());
|
|
|
|
|
request.setMaterialName(print.getMaterialName());
|
|
|
|
|
request.setInspectionQty(print.getApportionQty());
|
|
|
|
|
request.setBatchCode(print.getBatchCode());
|
|
|
|
|
request.setInspectionType("7"); // 入库检
|
|
|
|
|
|
|
|
|
|
// 调用 QMS 创建质检任务(租户ID和用户ID由 Dubbo 调用链自动传递)
|
|
|
|
|
String inspectionNo = remoteQmsInspectionService.createInspectionTaskForWMS(request);
|
|
|
|
|
|
|
|
|
|
log.info("质检任务创建成功,质检单号: {}, 物料编码: {}", inspectionNo, print.getMaterialCode());
|
|
|
|
|
|
|
|
|
|
// 更新打印记录状态:质检中
|
|
|
|
|
WmsInstockPrintBo updatePrintBo = new WmsInstockPrintBo();
|
|
|
|
|
updatePrintBo.setInstockPrintId(print.getInstockPrintId());
|
|
|
|
|
updatePrintBo.setInspectionType("1"); // 质检状态:1=质检中
|
|
|
|
|
updatePrintBo.setInboundStatus("2"); // 入库状态:2=入库中
|
|
|
|
|
instockPrintService.updateByBo(updatePrintBo);
|
|
|
|
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
log.error("为物料 {} 创建质检任务失败: {}", print.getMaterialCode(), e.getMessage(), e);
|
|
|
|
|
throw new ServiceException("为物料 " + print.getMaterialCode() + " 创建质检任务失败: " + e.getMessage());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
log.info("入库单 {} 质检任务创建完成,等待质检结果", instockCode);
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|