扫码入库接口修改

This commit is contained in:
liuhanqing
2025-11-03 09:35:15 +08:00
parent 71d7efb9ef
commit bec3d856e5
3 changed files with 37 additions and 268 deletions

View File

@@ -10,12 +10,11 @@ import lombok.NoArgsConstructor;
public class RequestEnter {
//物料码
private String trayCode;
//物料大小 1-5
private String size;
//入库位置
private String entranceId;
//入库楼层 1-一楼 2-二楼
private String floor;
private String type;
private String warehouseId;
private String roadwayId;
}

View File

@@ -89,212 +89,7 @@ public class ToWmsServiceImpl implements IToWmsService {
@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, "二维码内容错误");
}
}
//查询物料信息
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, "托盘大小不匹配");
}
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);
} else {
inOrOutType = "1";
}
//生成作业
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);
//生成子作业
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);
}
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());
return AjaxResult.success(result);
}
private String getRoadway(int size) {
return switch (size) {
case 1 -> "1";
case 2, 3, 4 -> "2";
default -> null;
};
}
/**
* todo 根据包装方式 主要包装方式 描述 长 宽 高 包装材积获取大小
*/
private int getSize(BasProduct basProduct) {
String remark = basProduct.getRemark();
String packageType = basProduct.getSpare34();
String mainPackageType = basProduct.getSpare35();
String length = basProduct.getSpare36();
String width = basProduct.getSpare37();
String height = basProduct.getSpare38();
String volume = basProduct.getSpare39();
return 1;
return null;
}
@Override
@@ -304,36 +99,13 @@ public class ToWmsServiceImpl implements IToWmsService {
param.setEntranceId(requestEnter.getEntranceId());
MydoJob mydoJob = mydoJobService.selectMydoJobByEntranceId(param);
if (mydoJob != null && StrUtil.isNotEmpty(mydoJob.getTrayCode())) {
List<MydoJobDetail> mydoJobDetails = mydoJobDetailService.selectMydoJobDetailListByJobId(mydoJob.getJobId());
if (CollUtil.isEmpty(mydoJobDetails)) {
return AjaxResult.error("没有任务");
}
MydoJobDetail mydoJobDetail = mydoJobDetails.get(0);
String productId = mydoJobDetail.getProductId();
BasProduct basProduct = basProductService.selectBasProductByProductId(productId);
int size = getSize(basProduct);
//超大托盘不处理 直接返回
if (size == 5) {
return new AjaxResult(3, "超大托盘");
}
//托盘大小与电气返回不匹配
if (size != Integer.parseInt(requestEnter.getSize())) {
return new AjaxResult(4, "托盘大小不匹配");
}
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());
return AjaxResult.success(result);
} else {
return AjaxResult.error("没有任务");
}
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());
return AjaxResult.success(result);
}
@Override
@@ -391,15 +163,14 @@ public class ToWmsServiceImpl implements IToWmsService {
basCargoSpaceParam.setRoadwayId(mydoJob.getRoadwayId());
BasCargoSpace basCargoSpace = basCargoSpaceService.selectEmptyCargoSpaceByWarehouseId(basCargoSpaceParam);
if (basCargoSpace == null) {
log.error("没有空货位");
return AjaxResult.error(MessageUtils.message("error.message20"));
return AjaxResult.error("没有空货位");
} else {
mydoJob.setCargoSpaceId(basCargoSpace.getCargoSpaceId());
mydoJob.setFaultFlag("1");
mydoJobService.updateMydoJob(mydoJob);
basCargoSpace.setStatus("3");
basCargoSpaceService.updateBasCargoSpace(basCargoSpace);
return AjaxResult.success(new RequestEnterResponse(basCargoSpace.getCargoSpaceId(), null, mydoJob.getJobId()));
return AjaxResult.success(new RequestEnterResponse(basCargoSpace.getCargoSpaceId(), mydoJob.getTrayCode(), mydoJob.getJobId()));
}
}
@@ -429,26 +200,32 @@ public class ToWmsServiceImpl implements IToWmsService {
MydoJob param = new MydoJob();
param.setStatus("1");
param.setTrayCode(requestEnter.getTrayCode());
MydoJob mydoJob = mydoJobService.selectMydoJobByEntranceId(param);
if (ObjUtil.isNull(mydoJob)){
param.setWarehouseId(requestEnter.getWarehouseId());
List<MydoJob> mydoJobs = mydoJobService.selectMydoJobListApi(param);
if (CollUtil.isEmpty(mydoJobs)){
return AjaxResult.error("没有该托盘任务", requestEnter.getTrayCode());
}
BasCargoSpace basCargoSpaceParam = new BasCargoSpace();
basCargoSpaceParam.setWarehouseId(mydoJob.getWarehouseId());
basCargoSpaceParam.setRoadwayId(mydoJob.getRoadwayId());
BasCargoSpace basCargoSpace = basCargoSpaceService.selectEmptyCargoSpaceByWarehouseId(basCargoSpaceParam);
if (ObjUtil.isNull(basCargoSpace)){
return AjaxResult.error("没有空货位");
MydoJob mydoJob = mydoJobs.get(0);
if(StrUtil.isEmpty(mydoJob.getCargoSpaceId())){
BasCargoSpace basCargoSpaceParam = new BasCargoSpace();
basCargoSpaceParam.setWarehouseId(mydoJob.getWarehouseId());
basCargoSpaceParam.setRoadwayId(mydoJob.getRoadwayId());
BasCargoSpace basCargoSpace = basCargoSpaceService.selectEmptyCargoSpaceByWarehouseId(basCargoSpaceParam);
if (ObjUtil.isNull(basCargoSpace)){
return AjaxResult.error("没有空货位");
}
//修改作业状态为正执行
mydoJob.setCargoSpaceId(basCargoSpace.getCargoSpaceId());
mydoJob.setStatus("3");
mydoJob.setStartTime(DateUtil.formatDateTime(new Date()));
mydoJob.setRoadwayId(requestEnter.getRoadwayId());
mydoJobService.updateMydoJob(mydoJob);
//修改货位状态为已分配
basCargoSpace.setStatus("3");
basCargoSpaceService.updateBasCargoSpace(basCargoSpace);
}
//修改作业状态为正执行
mydoJob.setCargoSpaceId(basCargoSpace.getCargoSpaceId());
mydoJob.setStatus("3");
mydoJob.setStartTime(DateUtil.formatDateTime(new Date()));
mydoJobService.updateMydoJob(mydoJob);
//修改货位状态为已分配
basCargoSpace.setStatus("3");
basCargoSpaceService.updateBasCargoSpace(basCargoSpace);
//返回结果
result.put("jobId", mydoJob.getJobId());

View File

@@ -488,13 +488,6 @@ public class MydoJobServiceImpl implements IMydoJobService {
job.setFinishTime(DateUtil.formatDateTime(DateUtil.date()));
updateMydoJob(job);
insertHistory(jobId);
//通知wcs
AjaxResult ajaxResult = iToWcsService.cancelTaskByTaskNo(job.getTaskNo());
if (ajaxResult.isSuccess()){
return AjaxResult.success();
}else {
throw new RuntimeException(Convert.toStr(ajaxResult.get("msg")));
}
}
} catch (Exception e) {