feat(wms): 新增PDA入库质检功能

- 在WmsInspectionInitiationServiceImpl中修改质检数量逻辑,使用materialQty字段
- 在WmsInstockRecordServiceImpl中新增远程QMS质检服务引用
- 实现submitInstockWithQualityCheck方法,支持质检判断和任务创建
- 添加完整的质检流程处理,包括免检物料直入和必检物料任务分配
- 在WmsPdaApiController中新增入库提交接口支持质检判断
master
zangch@mesnac.com 2 days ago
parent 0263258f3e
commit f6d90d6f20

@ -33,6 +33,7 @@ public class WmsPdaApiController extends BaseController {
private final IWmsMoveOrderService wmsMoveOrderService;
private final IWmsAllocateOrderDetailService wmsAllocateOrderDetailService;
private final IWmsAllocateTaskService wmsAllocateTaskService;
private final IWmsInstockRecordService wmsInstockRecordService;
/**
* 退-
@ -543,4 +544,30 @@ public class WmsPdaApiController extends BaseController {
return R.ok();
}
/**
* PDA
* <p>
*
* 1.
* 2. inspectionRequest = "0"
* 3. completeQualityCheck()
* 4. QMS "质检中"
*
* @param instockCode
* @return
*/
@PostMapping("/instock/submit")
public R<String> instockSubmit(String instockCode) {
if (instockCode == null || instockCode.trim().isEmpty()) {
return R.fail("入库单号不能为空");
}
try {
Boolean result = wmsInstockRecordService.submitInstockWithQualityCheck(instockCode);
return result ? R.ok("入库提交成功") : R.fail("入库提交失败");
} catch (Exception e) {
return R.fail("入库提交异常: " + e.getMessage());
}
}
}

@ -12,6 +12,7 @@ import org.dromara.wms.service.IWmsInspectionInitiationService;
import org.dromara.wms.service.IWmsInstockPrintService;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@ -184,7 +185,11 @@ public class WmsInspectionInitiationServiceImpl implements IWmsInspectionInitiat
request.setInstockCode(print.getInstockCode()); // 入库单号
request.setMaterialCode(print.getMaterialCode()); // 物料编码
request.setMaterialName(print.getMaterialName()); // 物料名称
request.setInspectionQty(print.getApportionQty()); // 质检数量(分包数量)
// 质检数量:使用每包数量 materialQty
Long materialQty = print.getMaterialQty();
log.info("构建质检请求,批次: {}, 前端传入 materialQty: {}", print.getBatchCode(), materialQty);
request.setInspectionQty(materialQty != null
? new BigDecimal(materialQty) : BigDecimal.ONE);
request.setBatchCode(print.getBatchCode()); // 批次号
// 检验类型:优先使用前端传入的参数,默认为"4"(原材料检)
//首检=0, 专检=1, 自检=2, 互检=3, 原材料检=4, 抽检=5, 成品检=6, 入库检=7出库检=8

@ -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;
}
}

Loading…
Cancel
Save