WCS请求入库,分配货位

This commit is contained in:
zj
2026-02-02 15:26:40 +08:00
parent 6d2d0f3068
commit 682765107d
3 changed files with 38 additions and 198 deletions

View File

@@ -30,6 +30,7 @@ import com.ruoyi.in.stockin.service.IInStockinService;
import com.ruoyi.in.stockindetail.domain.InStockinDetail; import com.ruoyi.in.stockindetail.domain.InStockinDetail;
import com.ruoyi.in.stockindetail.service.IInStockinDetailService; import com.ruoyi.in.stockindetail.service.IInStockinDetailService;
import com.ruoyi.job.mydojob.domain.MydoJob; import com.ruoyi.job.mydojob.domain.MydoJob;
import com.ruoyi.job.mydojob.mapper.MydoJobMapper;
import com.ruoyi.job.mydojob.service.IMydoJobService; import com.ruoyi.job.mydojob.service.IMydoJobService;
import com.ruoyi.job.mydojobdetail.domain.MydoJobDetail; import com.ruoyi.job.mydojobdetail.domain.MydoJobDetail;
import com.ruoyi.job.mydojobdetail.service.IMydoJobDetailService; import com.ruoyi.job.mydojobdetail.service.IMydoJobDetailService;
@@ -87,215 +88,37 @@ public class ToWmsServiceImpl implements IToWmsService {
private IRequestLogService requestLogService; private IRequestLogService requestLogService;
@Autowired @Autowired
private IBasStockService stockService; private IBasStockService stockService;
@Autowired
private MydoJobMapper mydoJobMapper;
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public AjaxResult requestEnterByTrayCode(RequestEnter requestEnter) { public AjaxResult requestEnterByTrayCode(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 trayCode = requestEnter.getTrayCode();
String[] split = trayCode.split(" "); MydoJob inJob = mydoJobMapper.selectInJobByTrayCode(trayCode);
String model = split[0].substring(6); if(inJob != null && Integer.parseInt(inJob.getInOrOut()) < 20){
String color = split[1].substring(6); if(inJob.getCargoSpaceId() != null && !"".equals(inJob.getCargoSpaceId())){
String serial = split[2].substring(7); return AjaxResult.success(JSONUtil.toJsonStr(inJob));
String v = split[3].substring(2); }else{
String hz = split[4].substring(3); //分配货位
String ph = split[5].substring(3); HashMap<String, Object> map = new HashMap<>();
String nw = split[6].substring(5);
String gw = split[7].substring(5); map.put("v_tray_code", trayCode);
String productId = split[8].substring(10); mydoJobMapper.allotInJobSpace(map);
String bm = split[9].substring(2, split[9].length() - 1); if (!"10".equals(map.get("v_result").toString())) {
String[] decode = ProcodeUtils.decode(bm); return AjaxResult.error(map.get("v_resultmsg").toString());
String erpBill = decode[0]; }else{
String xh = decode[1]; MydoJob inJob2 = mydoJobMapper.selectInJobByTrayCode(trayCode);
String jx = decode[2]; return AjaxResult.success(JSONUtil.toJsonStr(inJob2));
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, "二维码内容错误!");
} }
}else{
return AjaxResult.error("该条码无入库任务,请扫码绑定!");
} }
List<MydoJob> inList = mydoJobService.getInJobBySerial(serial);
List<BasStock> stockList = stockService.getStockBySerial(serial);
if(!CollUtil.isEmpty(inList) || !CollUtil.isEmpty(stockList)) {
return new AjaxResult(2,"该序列号已有作业或库存!");
}
//查询物料信息
BasProduct basProductParam = new BasProduct();
basProductParam.setProductId(productId);
List<BasProduct> basProducts = basProductService.selectBasProductList(basProductParam);
if (CollUtil.isEmpty(basProducts)) {
return new AjaxResult(3, "物料不存在!");
}
BasProduct basProduct = basProducts.get(0);
int size = Convert.toInt(basProduct.getSpare10());
if(size == 1){
if("L1001".equals(requestEnter.getEntranceId()) || "L2004".equals(requestEnter.getEntranceId())){
return new AjaxResult(4, "入口与托盘尺寸对应错误!");
}
}
//超大托盘不处理 直接返回
if (size == 5) {
return new AjaxResult(5, "超大托盘!");
}
//托盘大小与电气返回不匹配
if (StrUtil.isNotBlank(requestEnter.getSize()) && !"1".equals(requestEnter.getType()) && size != Integer.parseInt(requestEnter.getSize())) {
return new AjaxResult(6, "托盘大小不匹配!");
}
String inOrOutType = null;
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("单据不存在");
// }
// 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);
inOrOutType = "2";
}else if ("2".equals(requestEnter.getFloor())) {
inOrOutType = "1";
}
//生成作业
MydoJob mydoJob = new MydoJob();
mydoJob.setStatus("1");
mydoJob.setInOrOut(inOrOutType);
mydoJob.setExecutionPhase("1");
mydoJob.setWorkshopId(requestEnter.getFlag());
mydoJob.setTrayCode(serial);
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(7, "巷道入库锁定!");
}
} else {
if ("Y".equals(basRoadway.getInLocked2())) {
return new AjaxResult(7, "巷道入库锁定!");
}
}
//根据巷道查找货位
BasCargoSpace basCargoSpaceParam = new BasCargoSpace();
basCargoSpaceParam.setWarehouseId(mydoJob.getWarehouseId());
basCargoSpaceParam.setRoadwayId(mydoJob.getRoadwayId());
BasCargoSpace basCargoSpace = basCargoSpaceService.selectEmptyCargoSpaceByWarehouseId(basCargoSpaceParam);
if (ObjUtil.isNull(basCargoSpace)) {
return new AjaxResult(8, "没有可用货位!");
}
mydoJob.setCargoSpaceId(basCargoSpace.getCargoSpaceId());
mydoJob.setEntranceId(requestEnter.getEntranceId());
mydoJob.setClassId(requestEnter.getFloor());
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);
//修改货位状态
basCargoSpace.setStatus("3");
basCargoSpaceService.updateBasCargoSpace(basCargoSpace);
//type=1是手持机调用
if (!"1".equals(requestEnter.getType())) {
mydoJob.setStatus("3");
mydoJobService.updateMydoJob(mydoJob);
}
//todo 创建工艺入库单
if ("2".equals(requestEnter.getFloor())){
AjaxResult workshopInboundOrder = toErpService.createWorkshopInboundOrder(basProduct);
if (!workshopInboundOrder.isSuccess()){
//throw new RuntimeException("创建工单失败");
return new AjaxResult(9, "创建工艺入库单失败!");
}
}
//修改作业状态为正执行
result.put("jobId", mydoJob.getJobId());
result.put("taskNo", mydoJob.getTaskNo());
result.put("cargoSpaceId", mydoJob.getCargoSpaceId());
result.put("trayCode", mydoJob.getTrayCode());
result.put("flag",requestEnter.getFlag());
result.put("roadwayId", mydoJob.getRoadwayId());
result.put("entranceId", mydoJob.getEntranceId());
result.put("inOrOut", mydoJob.getInOrOut());
return AjaxResult.success(result);
} }
private String getRoadway(int size) {
return switch (size) {
case 1 -> "2";
case 2, 3, 4 -> "1";
default -> null;
};
}
/**
* 根据包装方式 主要包装方式 描述 长 宽 高 包装材积获取大小
*/
@Override @Override
public AjaxResult selectMydoJobByEntranceId(RequestEnter requestEnter) { public AjaxResult selectMydoJobByEntranceId(RequestEnter requestEnter) {
MydoJob param = new MydoJob(); MydoJob param = new MydoJob();

View File

@@ -1,6 +1,7 @@
package com.ruoyi.job.mydojob.mapper; package com.ruoyi.job.mydojob.mapper;
import com.ruoyi.job.mydojob.domain.MydoJob; import com.ruoyi.job.mydojob.domain.MydoJob;
import org.apache.ibatis.annotations.Param;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
@@ -78,4 +79,8 @@ public interface MydoJobMapper
List<MydoJob> getInJobBySerial(String trayCode); List<MydoJob> getInJobBySerial(String trayCode);
void manualCompleted(HashMap<String, Object> map); void manualCompleted(HashMap<String, Object> map);
MydoJob selectInJobByTrayCode(@Param("trayCode") String trayCode);
void allotInJobSpace(HashMap<String, Object> map);
} }

View File

@@ -255,4 +255,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{v_resultmsg,mode=OUT,jdbcType=VARCHAR} #{v_resultmsg,mode=OUT,jdbcType=VARCHAR}
)} )}
</select> </select>
<select id="selectInJobByTrayCode" parameterType="String" resultMap="MydoJobResult">
select * from mydo_job where tray_code = #{trayCode}
</select>
<select id="allotInJobSpace" parameterType="java.util.Map" statementType="CALLABLE">
{call proc_allot_space(
#{v_tray_code,jdbcType=VARCHAR,mode=IN},
#{v_result,mode=OUT,jdbcType=INTEGER},
#{v_resultmsg,mode=OUT,jdbcType=VARCHAR}
)}
</select>
</mapper> </mapper>