盘点入库任务逻辑修改

This commit is contained in:
liuhanqing
2025-10-10 10:44:10 +08:00
parent 659acd0661
commit 180e25eb87
5 changed files with 250 additions and 151 deletions

View File

@@ -43,7 +43,7 @@ public class ToWmsApiController {
* 请求补码作业
*/
@RequestMapping("/requestByNoTrayCode")
public AjaxResult startSignal(@RequestBody RequestEnter requestEnter) {
public AjaxResult requestByNoTrayCode(@RequestBody RequestEnter requestEnter) {
AjaxResult ajaxResult = toWmsService.selectMydoJobByEntranceId(requestEnter);
RequestLog requestLog = requestLogService.getRequestLog(JSONUtil.toJsonStr(requestEnter), "请求补码作业",ajaxResult);
requestLogService.insertRequestLog(requestLog);

View File

@@ -38,5 +38,4 @@ public interface IToWmsService {
* 取货无货,重新分配物料
*/
AjaxResult reMaterial(ReMaterialParam reMaterialParam);
}

View File

@@ -89,16 +89,14 @@ public class ToWmsServiceImpl implements IToWmsService {
@Transactional(rollbackFor = Exception.class)
public AjaxResult requestEnterByTrayCode(RequestEnter requestEnter) {
HashMap<String, String> result = new HashMap<>();
if (StrUtil.isEmpty(requestEnter.getTrayCode())) {
return AjaxResult.error("托盘条码不能为空");
}
log.info("扫码内容{}", requestEnter.getTrayCode());
//生成调拨单
Map<String, String> saveTransferBill = toErpService.saveTransferBill();
if (!"200".equals(saveTransferBill.get("code"))) {
return AjaxResult.error("生成调拨单失败");
}
log.info("生成调拨单{}", saveTransferBill);
//解析扫码内容
String trayCode = requestEnter.getTrayCode();
@@ -154,118 +152,161 @@ public class ToWmsServiceImpl implements IToWmsService {
String inStockId = null;
String inStockDetailId = null;
if ("1".equals(requestEnter.getFloor())) {
//一楼入库 其它入库 和 退料入库 存在单据,需要修改单据数量
InStockin inStockinParam = new InStockin();
inStockinParam.setErpBill(erpBill);
List<InStockin> inStockins = inStockinService.selectInStockinListApi(inStockinParam);
if (CollUtil.isEmpty(inStockins)) {
return AjaxResult.error("单据不存在");
//需要区分是回流任务还是入库任务
MydoJob hlMydoJobParam = new MydoJob();
hlMydoJobParam.setEntranceId(requestEnter.getEntranceId());
hlMydoJobParam.setInOut("5");
MydoJob hlMydoJob = mydoJobService.selectMydoJobByEntranceId(hlMydoJobParam);
if (ObjUtil.isNull(hlMydoJob)){
//一楼入库 其它入库 和 退料入库 存在单据,需要修改单据数量
InStockin inStockinParam = new InStockin();
inStockinParam.setErpBill(erpBill);
List<InStockin> inStockins = inStockinService.selectInStockinListApi(inStockinParam);
if (CollUtil.isEmpty(inStockins)) {
return AjaxResult.error("单据不存在");
}
InStockin inStockin = inStockins.get(0);
if ("1".equals(inStockin.getStatus()) || "2".equals(inStockin.getStatus())) {
inStockin.setStatus("3");
inStockinService.updateInStockin(inStockin);
}
inOrOutType = inStockin.getInType();
inStockId = inStockin.getStockinId();
InStockinDetail inStockinDetailParam = new InStockinDetail();
inStockinDetailParam.setStockinId(inStockin.getStockinGuid());
inStockinDetailParam.setProductId(basProduct.getProductId());
List<InStockinDetail> inStockinDetails = inStockinDetailService.selectInStockinDetailList(inStockinDetailParam);
if (CollUtil.isEmpty(inStockinDetails)) {
return AjaxResult.error("单据明细不存在");
}
InStockinDetail inStockinDetail = inStockinDetails.get(0);
inStockDetailId = inStockinDetail.getStockinDetailId();
inStockinDetail.setScanNum(Convert.toStr(Convert.toBigDecimal(inStockinDetail.getScanNum()).add(Convert.toBigDecimal(1))));
inStockinDetailService.updateInStockinDetail(inStockinDetail);
}else {
inOrOutType = "5";
}
InStockin inStockin = inStockins.get(0);
if ("1".equals(inStockin.getStatus()) || "2".equals(inStockin.getStatus())) {
inStockin.setStatus("3");
inStockinService.updateInStockin(inStockin);
}
inOrOutType = inStockin.getInType();
inStockId = inStockin.getStockinId();
InStockinDetail inStockinDetailParam = new InStockinDetail();
inStockinDetailParam.setStockinId(inStockin.getStockinGuid());
inStockinDetailParam.setProductId(basProduct.getProductId());
List<InStockinDetail> inStockinDetails = inStockinDetailService.selectInStockinDetailList(inStockinDetailParam);
if (CollUtil.isEmpty(inStockinDetails)) {
return AjaxResult.error("单据明细不存在");
}
InStockinDetail inStockinDetail = inStockinDetails.get(0);
inStockDetailId = inStockinDetail.getStockinDetailId();
inStockinDetail.setScanNum(Convert.toStr(Convert.toBigDecimal(inStockinDetail.getScanNum()).add(Convert.toBigDecimal(1))));
inStockinDetailService.updateInStockinDetail(inStockinDetail);
} else {
inOrOutType = "1";
}
if ("5".equals(inOrOutType)){
MydoJob hlMydoJobParam = new MydoJob();
hlMydoJobParam.setEntranceId(requestEnter.getEntranceId());
hlMydoJobParam.setInOut("5");
MydoJob hlMydoJob = mydoJobService.selectMydoJobByEntranceId(hlMydoJobParam);
//生成作业
MydoJob mydoJob = new MydoJob();
mydoJob.setStatus("1");
mydoJob.setInOrOut(inOrOutType);
mydoJob.setExecutionPhase("1");
mydoJob.setTrayCode(basJobIdService.getJobId("TP"));
mydoJob.setWarehouseId("01");
mydoJob.setRoadwayId(getRoadway(size));
mydoJob.setLineId(erpBill);
BasRoadway basRoadway = basRoadwayService.selectBasRoadwayById(mydoJob.getRoadwayId());
if ("1".equals(requestEnter.getFloor())) {
if ("Y".equals(basRoadway.getInLocked())) {
return new AjaxResult(6, "巷道已锁");
//根据巷道查找货位
BasCargoSpace basCargoSpaceParam = new BasCargoSpace();
basCargoSpaceParam.setWarehouseId(hlMydoJob.getWarehouseId());
basCargoSpaceParam.setRoadwayId(hlMydoJob.getRoadwayId());
BasCargoSpace basCargoSpace = basCargoSpaceService.selectEmptyCargoSpaceByWarehouseId(basCargoSpaceParam);
if (ObjUtil.isNull(basCargoSpace)) {
return new AjaxResult(5, "没有货位");
}
} else {
if ("Y".equals(basRoadway.getInLocked2())) {
return new AjaxResult(6, "巷道已锁");
hlMydoJob.setCargoSpaceId(basCargoSpace.getCargoSpaceId());
mydoJobService.updateMydoJob(hlMydoJob);
//type=1是手持机调用
if(!"1".equals(requestEnter.getType())){
hlMydoJob.setStatus("3");
mydoJobService.updateMydoJob(hlMydoJob);
}
//修改作业状态为正执行
result.put("jobId", hlMydoJob.getJobId());
result.put("taskNo", hlMydoJob.getTaskNo());
result.put("cargoSpaceId", hlMydoJob.getCargoSpaceId());
result.put("roadwayId", hlMydoJob.getRoadwayId());
result.put("entranceId", hlMydoJob.getEntranceId());
result.put("inOrOut", hlMydoJob.getInOrOut());
}else {
//生成作业
MydoJob mydoJob = new MydoJob();
mydoJob.setStatus("1");
mydoJob.setInOrOut(inOrOutType);
mydoJob.setExecutionPhase("1");
mydoJob.setTrayCode(basJobIdService.getJobId("TP"));
mydoJob.setWarehouseId("01");
mydoJob.setRoadwayId(getRoadway(size));
mydoJob.setLineId(erpBill);
BasRoadway basRoadway = basRoadwayService.selectBasRoadwayById(mydoJob.getRoadwayId());
if ("1".equals(requestEnter.getFloor())) {
if ("Y".equals(basRoadway.getInLocked())) {
return new AjaxResult(6, "巷道已锁");
}
} else {
if ("Y".equals(basRoadway.getInLocked2())) {
return new AjaxResult(6, "巷道已锁");
}
}
}
//根据巷道查找货位
BasCargoSpace basCargoSpaceParam = new BasCargoSpace();
basCargoSpaceParam.setWarehouseId(mydoJob.getWarehouseId());
basCargoSpaceParam.setRoadwayId(mydoJob.getRoadwayId());
BasCargoSpace basCargoSpace = basCargoSpaceService.selectEmptyCargoSpaceByWarehouseId(basCargoSpaceParam);
if (ObjUtil.isNull(basCargoSpace)) {
return new AjaxResult(5, "没有货位");
}
mydoJob.setCargoSpaceId(basCargoSpace.getCargoSpaceId());
mydoJob.setEntranceId(requestEnter.getEntranceId());
mydoJobService.insertMydoJob(mydoJob);
//根据巷道查找货位
BasCargoSpace basCargoSpaceParam = new BasCargoSpace();
basCargoSpaceParam.setWarehouseId(mydoJob.getWarehouseId());
basCargoSpaceParam.setRoadwayId(mydoJob.getRoadwayId());
BasCargoSpace basCargoSpace = basCargoSpaceService.selectEmptyCargoSpaceByWarehouseId(basCargoSpaceParam);
if (ObjUtil.isNull(basCargoSpace)) {
return new AjaxResult(5, "没有货位");
}
mydoJob.setCargoSpaceId(basCargoSpace.getCargoSpaceId());
mydoJob.setEntranceId(requestEnter.getEntranceId());
mydoJobService.insertMydoJob(mydoJob);
//生成子作业
MydoJobDetail mydoJobDetail = new MydoJobDetail();
mydoJobDetail.setJobDetailId(mydoJob.getJobId() + "-1");
mydoJobDetail.setJobId(mydoJob.getJobId());
mydoJobDetail.setCreateTime(new Date());
mydoJobDetail.setProductGuid(basProduct.getProductGuid());
mydoJobDetail.setProductId(basProduct.getProductId());
mydoJobDetail.setInQuantity("1");
mydoJobDetail.setSpare1(xh);
mydoJobDetail.setSpare2(nw);
mydoJobDetail.setSpare3(color);
mydoJobDetail.setSpare4(xlh);
mydoJobDetail.setSpare5(v);
mydoJobDetail.setSpare6(hz);
mydoJobDetail.setSpare7(ph);
mydoJobDetail.setSpare8(gw);
mydoJobDetail.setSpare9(fx);
mydoJobDetail.setUnit(jx);
mydoJobDetail.setSpec(basProduct.getSpec());
mydoJobDetail.setInOrOutId(inStockId);
mydoJobDetail.setInOrOutDId(inStockDetailId);
mydoJobDetail.setStockinId(inStockId);
mydoJobDetailService.insertMydoJobDetail(mydoJobDetail);
//生成子作业
MydoJobDetail mydoJobDetail = new MydoJobDetail();
mydoJobDetail.setJobDetailId(mydoJob.getJobId() + "-1");
mydoJobDetail.setJobId(mydoJob.getJobId());
mydoJobDetail.setCreateTime(new Date());
mydoJobDetail.setProductGuid(basProduct.getProductGuid());
mydoJobDetail.setProductId(basProduct.getProductId());
mydoJobDetail.setInQuantity("1");
mydoJobDetail.setSpare1(xh);
mydoJobDetail.setSpare2(nw);
mydoJobDetail.setSpare3(color);
mydoJobDetail.setSpare4(xlh);
mydoJobDetail.setSpare5(v);
mydoJobDetail.setSpare6(hz);
mydoJobDetail.setSpare7(ph);
mydoJobDetail.setSpare8(gw);
mydoJobDetail.setSpare9(fx);
mydoJobDetail.setUnit(jx);
mydoJobDetail.setSpec(basProduct.getSpec());
mydoJobDetail.setInOrOutId(inStockId);
mydoJobDetail.setInOrOutDId(inStockDetailId);
mydoJobDetail.setStockinId(inStockId);
mydoJobDetailService.insertMydoJobDetail(mydoJobDetail);
//修改货位状态
basCargoSpace.setStatus("3");
basCargoSpaceService.updateBasCargoSpace(basCargoSpace);
//type=1是手持机调用
if(!"1".equals(requestEnter.getType())){
mydoJob.setStatus("3");
mydoJobService.updateMydoJob(mydoJob);
}
//修改货位状态
basCargoSpace.setStatus("3");
basCargoSpaceService.updateBasCargoSpace(basCargoSpace);
//type=1是手持机调用
if(!"1".equals(requestEnter.getType())){
mydoJob.setStatus("3");
mydoJobService.updateMydoJob(mydoJob);
}
if ("1".equals(mydoJob.getInOrOut())) {
//存入调拨单数据 已生成
TransferBillCallback transferBillCallback = new TransferBillCallback();
transferBillCallback.setJobId(mydoJob.getJobId());
transferBillCallback.setErpBill(erpBill);
transferBillCallback.setType("1");
transferBillCallback.setStatus("1");
transferBillCallbackService.insertTransferBillCallback(transferBillCallback);
if ("1".equals(mydoJob.getInOrOut())) {
//生成调拨单
Map<String, String> saveTransferBill = toErpService.saveTransferBill();
if (!"200".equals(saveTransferBill.get("code"))) {
return AjaxResult.error("生成调拨单失败");
}
log.info("生成调拨单{}", saveTransferBill);
//存入调拨单数据 已生成
TransferBillCallback transferBillCallback = new TransferBillCallback();
transferBillCallback.setJobId(mydoJob.getJobId());
transferBillCallback.setErpBill(erpBill);
transferBillCallback.setType("1");
transferBillCallback.setStatus("1");
transferBillCallbackService.insertTransferBillCallback(transferBillCallback);
}
//修改作业状态为正执行
result.put("jobId", mydoJob.getJobId());
result.put("taskNo", mydoJob.getTaskNo());
result.put("cargoSpaceId", mydoJob.getCargoSpaceId());
result.put("roadwayId", mydoJob.getRoadwayId());
result.put("entranceId", mydoJob.getEntranceId());
result.put("inOrOut", mydoJob.getInOrOut());
}
//修改作业状态为正执行
HashMap<String, String> result = new HashMap<>();
result.put("jobId", mydoJob.getJobId());
result.put("taskNo", mydoJob.getTaskNo());
result.put("cargoSpaceId", mydoJob.getCargoSpaceId());
result.put("roadwayId", mydoJob.getRoadwayId());
result.put("entranceId", mydoJob.getEntranceId());
result.put("inOrOut", mydoJob.getInOrOut());
return AjaxResult.success(result);
}

View File

@@ -83,6 +83,8 @@ public class MydoJobServiceImpl implements IMydoJobService {
private BasStockMapper basStockMapper;
@Autowired
private PdaMapper pdaMapper;
@Autowired
private ICheckDifferenceRecordService checkDifferenceRecordService;
/**
@@ -244,57 +246,114 @@ public class MydoJobServiceImpl implements IMydoJobService {
if (mydoJob == null) {
return AjaxResult.warn("任务不存在");
}
//入库任务
MydoJobDetail param = new MydoJobDetail();
param.setJobId(jobId);
List<MydoJobDetail> mydoJobDetails = mydoJobDetailService.selectMydoJobDetailList(param);
BasCargoSpace basCargoSpace = basCargoSpaceService.selectBasCargoSpaceByCargoSpaceId(mydoJob.getCargoSpaceId());
if (CollUtil.isNotEmpty(mydoJobDetails)) {
List<BasStock> list = new ArrayList<>();
for (MydoJobDetail mydoJobDetail : mydoJobDetails) {
if ("2".equals(mydoJob.getInOrOut()) || "3".equals(mydoJob.getInOrOut())) {
//修改单据实际数量 2-退料入库 3-其它入库
String inOrOutDId = mydoJobDetail.getInOrOutDId();
InStockinDetail inStockinDetail = inStockinDetailService.selectInStockinDetailByStockinDetailId(inOrOutDId);
inStockinDetail.setAssignNum(Convert.toStr(Convert.toBigDecimal(inStockinDetail.getAssignNum()).add(Convert.toBigDecimal(mydoJobDetail.getInQuantity()))));
inStockinDetailService.updateInStockinDetail(inStockinDetail);
if ("5".equals(mydoJob.getInOrOut())){
//盘点入库
//入库作业
MydoJobDetail param = new MydoJobDetail();
param.setJobId(jobId);
List<MydoJobDetail> mydoJobDetails = mydoJobDetailService.selectMydoJobDetailList(param);
BasCargoSpace basCargoSpace = basCargoSpaceService.selectBasCargoSpaceByCargoSpaceId(mydoJob.getCargoSpaceId());
if (CollUtil.isNotEmpty(mydoJobDetails)) {
List<BasStock> list = new ArrayList<>();
//查询盘点信息中的异常信息
CheckDifferenceRecord checkDifferenceRecordParam = new CheckDifferenceRecord();
checkDifferenceRecordParam.setTrayCode(mydoJob.getTrayCode());
checkDifferenceRecordParam.setWarehouseId(mydoJob.getWarehouseId());
List<CheckDifferenceRecord> checkDifferenceRecords = checkDifferenceRecordService.selectCheckDifferenceRecordList(checkDifferenceRecordParam);
for (MydoJobDetail mydoJobDetail : mydoJobDetails) {
//如果存在盘点异常信息 根据托盘条码和物料id 筛选异常信息
Optional<CheckDifferenceRecord> first = checkDifferenceRecords.stream().filter(x -> x.getTrayCode().equals(mydoJob.getTrayCode()) && x.getProductId().equals(mydoJobDetail.getProductId())).findFirst();
if (first.isPresent()) {
//生成盘点待审批库存
BasStock stockByInStockinDetail = getStockByInStockinDetail(mydoJobDetail, mydoJob, "2");
list.add(stockByInStockinDetail);
//修改异常记录中的库存id
CheckDifferenceRecord checkDifferenceRecord = first.get();
checkDifferenceRecord.setStockId(stockByInStockinDetail.getStockId());
checkDifferenceRecordService.updateCheckDifferenceRecord(checkDifferenceRecord);
} else {
//正常库存
list.add(getStockByInStockinDetail(mydoJobDetail, mydoJob, "1"));
}
}
//正常库存
list.add(getStockByInStockinDetail(mydoJobDetail, mydoJob, "1"));
//修改货位状态
basCargoSpace.setStatus("2");
basCargoSpace.setTrayCode(mydoJob.getTrayCode());
basCargoSpace.setCargoSpaceId(mydoJob.getCargoSpaceId());
basCargoSpaceService.updateBasCargoSpace(basCargoSpace);
//插入库存信息
basStockService.insertBasStockList(list);
//结束任务
mydoJob.setStatus("4");
mydoJob.setFinishTime(DateUtil.formatDateTime(DateUtil.date()));
updateMydoJob(mydoJob);
// 插入任务历史表 删除任务
insertHistory(mydoJob.getJobId());
return AjaxResult.success();
} else {
return AjaxResult.warn("不存在子作业");
}
}else {
//正常入库任务
MydoJobDetail param = new MydoJobDetail();
param.setJobId(jobId);
List<MydoJobDetail> mydoJobDetails = mydoJobDetailService.selectMydoJobDetailList(param);
BasCargoSpace basCargoSpace = basCargoSpaceService.selectBasCargoSpaceByCargoSpaceId(mydoJob.getCargoSpaceId());
if (CollUtil.isNotEmpty(mydoJobDetails)) {
List<BasStock> list = new ArrayList<>();
for (MydoJobDetail mydoJobDetail : mydoJobDetails) {
if ("2".equals(mydoJob.getInOrOut()) || "3".equals(mydoJob.getInOrOut())) {
//修改单据实际数量 2-退料入库 3-其它入库
String inOrOutDId = mydoJobDetail.getInOrOutDId();
InStockinDetail inStockinDetail = inStockinDetailService.selectInStockinDetailByStockinDetailId(inOrOutDId);
inStockinDetail.setAssignNum(Convert.toStr(Convert.toBigDecimal(inStockinDetail.getAssignNum()).add(Convert.toBigDecimal(mydoJobDetail.getInQuantity()))));
inStockinDetailService.updateInStockinDetail(inStockinDetail);
}
//正常库存
list.add(getStockByInStockinDetail(mydoJobDetail, mydoJob, "1"));
}
//修改货位状态
basCargoSpace.setStatus("2");
basCargoSpace.setTrayCode(mydoJob.getTrayCode());
basCargoSpace.setCargoSpaceId(mydoJob.getCargoSpaceId());
basCargoSpaceService.updateBasCargoSpace(basCargoSpace);
//修改货位状态
basCargoSpace.setStatus("2");
basCargoSpace.setTrayCode(mydoJob.getTrayCode());
basCargoSpace.setCargoSpaceId(mydoJob.getCargoSpaceId());
basCargoSpaceService.updateBasCargoSpace(basCargoSpace);
//插入库存信息
basStockService.insertBasStockList(list);
//插入库存信息
basStockService.insertBasStockList(list);
//结束任务
mydoJob.setStatus("4");
mydoJob.setFinishTime(DateUtil.formatDateTime(DateUtil.date()));
updateMydoJob(mydoJob);
// 插入任务历史表 删除任务
insertHistory(mydoJob.getJobId());
//结束任务
mydoJob.setStatus("4");
mydoJob.setFinishTime(DateUtil.formatDateTime(DateUtil.date()));
updateMydoJob(mydoJob);
// 插入任务历史表 删除任务
insertHistory(mydoJob.getJobId());
//修改回传单据表状态
if ("1".equals(mydoJob.getInOrOut())){
//调拨单
TransferBillCallback transferBillCallbackParam = new TransferBillCallback();
transferBillCallbackParam.setJobId(mydoJob.getJobId());
List<TransferBillCallback> transferBillCallbacks = transferBillCallbackService.selectTransferBillCallbackList(transferBillCallbackParam);
if (CollUtil.isNotEmpty(transferBillCallbacks)){
for (TransferBillCallback transferBillCallback : transferBillCallbacks) {
transferBillCallback.setStatus("2");
transferBillCallbackService.updateTransferBillCallback(transferBillCallback);
//修改回传单据表状态
if ("1".equals(mydoJob.getInOrOut())){
//调拨单
TransferBillCallback transferBillCallbackParam = new TransferBillCallback();
transferBillCallbackParam.setJobId(mydoJob.getJobId());
List<TransferBillCallback> transferBillCallbacks = transferBillCallbackService.selectTransferBillCallbackList(transferBillCallbackParam);
if (CollUtil.isNotEmpty(transferBillCallbacks)){
for (TransferBillCallback transferBillCallback : transferBillCallbacks) {
transferBillCallback.setStatus("2");
transferBillCallbackService.updateTransferBillCallback(transferBillCallback);
}
}
}
return AjaxResult.success();
} else {
return AjaxResult.warn("不存在子作业");
}
return AjaxResult.success();
} else {
return AjaxResult.warn("不存在子作业");
}
}

View File

@@ -236,8 +236,8 @@ export default {
// 所有出口数据(按仓库ID分组)
allExitOptions: {
'01': [
{ exitId: "L2009", exitName: 'L2009' },
{ exitId: 'L2010', exitName: 'L2010' },
{ exitId: "L2013", exitName: 'L2013' },
{ exitId: 'L2012', exitName: 'L2012' },
]
},
// 当前审核的单据