WCS请求入库,分配货位
This commit is contained in:
@@ -30,6 +30,7 @@ import com.ruoyi.in.stockin.service.IInStockinService;
|
||||
import com.ruoyi.in.stockindetail.domain.InStockinDetail;
|
||||
import com.ruoyi.in.stockindetail.service.IInStockinDetailService;
|
||||
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.mydojobdetail.domain.MydoJobDetail;
|
||||
import com.ruoyi.job.mydojobdetail.service.IMydoJobDetailService;
|
||||
@@ -87,215 +88,37 @@ public class ToWmsServiceImpl implements IToWmsService {
|
||||
private IRequestLogService requestLogService;
|
||||
@Autowired
|
||||
private IBasStockService stockService;
|
||||
@Autowired
|
||||
private MydoJobMapper mydoJobMapper;
|
||||
|
||||
|
||||
@Override
|
||||
@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());
|
||||
|
||||
//解析扫码内容
|
||||
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 inJob = mydoJobMapper.selectInJobByTrayCode(trayCode);
|
||||
if(inJob != null && Integer.parseInt(inJob.getInOrOut()) < 20){
|
||||
if(inJob.getCargoSpaceId() != null && !"".equals(inJob.getCargoSpaceId())){
|
||||
return AjaxResult.success(JSONUtil.toJsonStr(inJob));
|
||||
}else{
|
||||
//分配货位
|
||||
HashMap<String, Object> map = new HashMap<>();
|
||||
|
||||
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, "入口与托盘尺寸对应错误!");
|
||||
map.put("v_tray_code", trayCode);
|
||||
mydoJobMapper.allotInJobSpace(map);
|
||||
if (!"10".equals(map.get("v_result").toString())) {
|
||||
return AjaxResult.error(map.get("v_resultmsg").toString());
|
||||
}else{
|
||||
MydoJob inJob2 = mydoJobMapper.selectInJobByTrayCode(trayCode);
|
||||
return AjaxResult.success(JSONUtil.toJsonStr(inJob2));
|
||||
}
|
||||
}
|
||||
|
||||
//超大托盘不处理 直接返回
|
||||
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, "巷道入库锁定!");
|
||||
}else{
|
||||
return AjaxResult.error("该条码无入库任务,请扫码绑定!");
|
||||
}
|
||||
}
|
||||
|
||||
//根据巷道查找货位
|
||||
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
|
||||
public AjaxResult selectMydoJobByEntranceId(RequestEnter requestEnter) {
|
||||
MydoJob param = new MydoJob();
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.ruoyi.job.mydojob.mapper;
|
||||
|
||||
import com.ruoyi.job.mydojob.domain.MydoJob;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
@@ -78,4 +79,8 @@ public interface MydoJobMapper
|
||||
List<MydoJob> getInJobBySerial(String trayCode);
|
||||
|
||||
void manualCompleted(HashMap<String, Object> map);
|
||||
|
||||
MydoJob selectInJobByTrayCode(@Param("trayCode") String trayCode);
|
||||
|
||||
void allotInJobSpace(HashMap<String, Object> map);
|
||||
}
|
||||
|
||||
@@ -255,4 +255,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
#{v_resultmsg,mode=OUT,jdbcType=VARCHAR}
|
||||
)}
|
||||
</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>
|
||||
|
||||
Reference in New Issue
Block a user