退货入库、其它入库逻辑修改

This commit is contained in:
liuhanqing
2025-10-10 14:27:31 +08:00
parent 180e25eb87
commit fd7d227254
4 changed files with 223 additions and 151 deletions

View File

@@ -50,6 +50,17 @@ public class ToWmsApiController {
return ajaxResult; return ajaxResult;
} }
/**
* 获取入库作业
*/
@RequestMapping("/requestEnterByTrayCodeAndEntranceId")
public AjaxResult requestEnterByTrayCodeAndEntranceId(@RequestBody RequestEnter requestEnter) {
AjaxResult ajaxResult = toWmsService.requestEnterByTrayCodeAndEntranceId(requestEnter);
RequestLog requestLog = requestLogService.getRequestLog(JSONUtil.toJsonStr(requestEnter), "获取入库作业",ajaxResult);
requestLogService.insertRequestLog(requestLog);
return ajaxResult;
}
/** /**
* 入库、出库 任务完成回传 * 入库、出库 任务完成回传

View File

@@ -38,4 +38,9 @@ public interface IToWmsService {
* 取货无货,重新分配物料 * 取货无货,重新分配物料
*/ */
AjaxResult reMaterial(ReMaterialParam reMaterialParam); AjaxResult reMaterial(ReMaterialParam reMaterialParam);
/**
* 获取入库作业
*/
AjaxResult requestEnterByTrayCodeAndEntranceId(RequestEnter requestEnter);
} }

View File

@@ -2,6 +2,7 @@ package com.ruoyi.api.service.impl;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjUtil; import cn.hutool.core.util.ObjUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.ruoyi.api.domain.ReMaterialParam; import com.ruoyi.api.domain.ReMaterialParam;
@@ -107,8 +108,8 @@ public class ToWmsServiceImpl implements IToWmsService {
String v = split[3].substring(2); String v = split[3].substring(2);
String hz = split[4].substring(3); String hz = split[4].substring(3);
String ph = split[5].substring(3); String ph = split[5].substring(3);
String nw = split[6].substring(5, split[6].length() - 2); String nw = split[6].substring(5);
String gw = split[7].substring(5, split[7].length() - 2); String gw = split[7].substring(5);
String productId = split[8].substring(10); String productId = split[8].substring(10);
String bm = split[9].substring(2, split[9].length() - 1); String bm = split[9].substring(2, split[9].length() - 1);
String[] decode = ProcodeUtils.decode(bm); String[] decode = ProcodeUtils.decode(bm);
@@ -152,12 +153,6 @@ public class ToWmsServiceImpl implements IToWmsService {
String inStockId = null; String inStockId = null;
String inStockDetailId = null; String inStockDetailId = null;
if ("1".equals(requestEnter.getFloor())) { if ("1".equals(requestEnter.getFloor())) {
//需要区分是回流任务还是入库任务
MydoJob hlMydoJobParam = new MydoJob();
hlMydoJobParam.setEntranceId(requestEnter.getEntranceId());
hlMydoJobParam.setInOut("5");
MydoJob hlMydoJob = mydoJobService.selectMydoJobByEntranceId(hlMydoJobParam);
if (ObjUtil.isNull(hlMydoJob)){
//一楼入库 其它入库 和 退料入库 存在单据,需要修改单据数量 //一楼入库 其它入库 和 退料入库 存在单据,需要修改单据数量
InStockin inStockinParam = new InStockin(); InStockin inStockinParam = new InStockin();
inStockinParam.setErpBill(erpBill); inStockinParam.setErpBill(erpBill);
@@ -183,42 +178,12 @@ public class ToWmsServiceImpl implements IToWmsService {
inStockDetailId = inStockinDetail.getStockinDetailId(); inStockDetailId = inStockinDetail.getStockinDetailId();
inStockinDetail.setScanNum(Convert.toStr(Convert.toBigDecimal(inStockinDetail.getScanNum()).add(Convert.toBigDecimal(1)))); inStockinDetail.setScanNum(Convert.toStr(Convert.toBigDecimal(inStockinDetail.getScanNum()).add(Convert.toBigDecimal(1))));
inStockinDetailService.updateInStockinDetail(inStockinDetail); inStockinDetailService.updateInStockinDetail(inStockinDetail);
}else {
inOrOutType = "5";
}
} else { } else {
inOrOutType = "1"; inOrOutType = "1";
} }
if ("5".equals(inOrOutType)){
MydoJob hlMydoJobParam = new MydoJob();
hlMydoJobParam.setEntranceId(requestEnter.getEntranceId());
hlMydoJobParam.setInOut("5");
MydoJob hlMydoJob = mydoJobService.selectMydoJobByEntranceId(hlMydoJobParam);
//根据巷道查找货位
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, "没有货位");
}
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 mydoJob = new MydoJob();
mydoJob.setStatus("1"); mydoJob.setStatus("1");
@@ -279,7 +244,7 @@ public class ToWmsServiceImpl implements IToWmsService {
basCargoSpace.setStatus("3"); basCargoSpace.setStatus("3");
basCargoSpaceService.updateBasCargoSpace(basCargoSpace); basCargoSpaceService.updateBasCargoSpace(basCargoSpace);
//type=1是手持机调用 //type=1是手持机调用
if(!"1".equals(requestEnter.getType())){ if (!"1".equals(requestEnter.getType())) {
mydoJob.setStatus("3"); mydoJob.setStatus("3");
mydoJobService.updateMydoJob(mydoJob); mydoJobService.updateMydoJob(mydoJob);
} }
@@ -306,7 +271,7 @@ public class ToWmsServiceImpl implements IToWmsService {
result.put("roadwayId", mydoJob.getRoadwayId()); result.put("roadwayId", mydoJob.getRoadwayId());
result.put("entranceId", mydoJob.getEntranceId()); result.put("entranceId", mydoJob.getEntranceId());
result.put("inOrOut", mydoJob.getInOrOut()); result.put("inOrOut", mydoJob.getInOrOut());
}
return AjaxResult.success(result); return AjaxResult.success(result);
} }
@@ -320,7 +285,6 @@ public class ToWmsServiceImpl implements IToWmsService {
/** /**
* todo 根据包装方式 主要包装方式 描述 长 宽 高 包装材积获取大小 * todo 根据包装方式 主要包装方式 描述 长 宽 高 包装材积获取大小
*
*/ */
private int getSize(BasProduct basProduct) { private int getSize(BasProduct basProduct) {
String remark = basProduct.getRemark(); String remark = basProduct.getRemark();
@@ -337,7 +301,7 @@ public class ToWmsServiceImpl implements IToWmsService {
public AjaxResult selectMydoJobByEntranceId(RequestEnter requestEnter) { public AjaxResult selectMydoJobByEntranceId(RequestEnter requestEnter) {
MydoJob param = new MydoJob(); MydoJob param = new MydoJob();
param.setStatus("1"); param.setStatus("1");
param.setEntranceId("G1005"); param.setEntranceId(requestEnter.getEntranceId());
MydoJob mydoJob = mydoJobService.selectMydoJobByEntranceId(param); MydoJob mydoJob = mydoJobService.selectMydoJobByEntranceId(param);
if (mydoJob != null && StrUtil.isNotEmpty(mydoJob.getTrayCode())) { if (mydoJob != null && StrUtil.isNotEmpty(mydoJob.getTrayCode())) {
@@ -451,5 +415,93 @@ public class ToWmsServiceImpl implements IToWmsService {
return outStockoutService.autoAllot(stockOutId); return outStockoutService.autoAllot(stockOutId);
} }
@Override
@Transactional(rollbackFor = Exception.class)
public AjaxResult requestEnterByTrayCodeAndEntranceId(RequestEnter requestEnter) {
HashMap<String, String> result = new HashMap<>();
if (StrUtil.isEmpty(requestEnter.getTrayCode())) {
return AjaxResult.error("托盘条码不能为空");
}
log.info("扫码内容{}", requestEnter.getTrayCode());
//解析扫码内容
String trayCode = requestEnter.getTrayCode();
String[] split = trayCode.split(" ");
String model = split[0].substring(6);
String color = split[1].substring(6);
String serial = split[2].substring(7);
String v = split[3].substring(2);
String hz = split[4].substring(3);
String ph = split[5].substring(3);
String nw = split[6].substring(5);
String gw = split[7].substring(5);
String productId = split[8].substring(10);
String bm = split[9].substring(2, split[9].length() - 1);
String[] decode = ProcodeUtils.decode(bm);
String erpBill = decode[0];
String xh = decode[1];
String jx = decode[2];
String fx = decode[3];
String xlh = decode[4];
log.info("二维码详情 productId:{} model:{},color:{},serial:{},v:{},hz:{},ph:{},nw:{},gw:{},erpBill:{},xh:{},jx:{},fx:{},xlh:{}", productId, model, color, serial, v, hz, ph, nw, gw, erpBill, xh, jx, fx, xlh);
for (String s : split) {
if (StrUtil.isEmpty(s)) {
return new AjaxResult(1, "二维码内容错误");
}
}
MydoJob param = new MydoJob();
param.setStatus("1");
param.setEntranceId(requestEnter.getEntranceId());
param.setLineId(erpBill);
MydoJob mydoJob = mydoJobService.selectMydoJobByEntranceId(param);
MydoJobDetail mydoJobDetailParam = new MydoJobDetail();
mydoJobDetailParam.setJobId(mydoJob.getJobId());
mydoJobDetailParam.setProductId(productId);
List<MydoJobDetail> mydoJobDetails = mydoJobDetailService.selectMydoJobDetailList(mydoJobDetailParam);
if (mydoJobDetails.isEmpty()){
return new AjaxResult(1, "该任务没有该物料");
}
//查询物料信息
BasProduct basProductParam = new BasProduct();
basProductParam.setProductId(productId);
List<BasProduct> basProducts = basProductService.selectBasProductList(basProductParam);
if (CollUtil.isEmpty(basProducts)) {
return new AjaxResult(2, "物料不存在");
}
BasProduct basProduct = basProducts.get(0);
//根据包装方式 主要包装方式 描述 长 宽 高 包装材积
int size = getSize(basProduct);
//超大托盘不处理 直接返回
if (size == 5) {
return new AjaxResult(3, "超大托盘");
}
//托盘大小与电气返回不匹配
if (StrUtil.isNotBlank(requestEnter.getSize()) && !"1".equals(requestEnter.getType()) && size != Integer.parseInt(requestEnter.getSize())) {
return new AjaxResult(4, "托盘大小不匹配");
}
//修改作业状态为正执行
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());
mydoJob.setStatus("3");
mydoJob.setStartTime(DateUtil.formatDateTime(new Date()));
mydoJobService.updateMydoJob(mydoJob);
return AjaxResult.success(result);
}
} }

View File

@@ -229,6 +229,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select> </select>
<select id="selectMydoJobByEntranceId" parameterType="MydoJob" resultMap="MydoJobResult"> <select id="selectMydoJobByEntranceId" parameterType="MydoJob" resultMap="MydoJobResult">
select top(1)* from mydo_job mj where in_or_out&lt;20 and mj.entrance_id = #{entranceId} and mj.status = #{status} order by mj.create_time select top(1)* from mydo_job mj
where in_or_out&lt;20 and mj.entrance_id = #{entranceId}
and mj.status = #{status}
<if test="lineId != null and lineId != ''"> and mj.line_id = #{lineId}</if>
order by mj.create_time
</select> </select>
</mapper> </mapper>