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.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();
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user