|
@@ -192,7 +192,7 @@ public class PdaController {
|
|
* @param lineCallForm
|
|
* @param lineCallForm
|
|
* @return
|
|
* @return
|
|
*/
|
|
*/
|
|
- @Transactional
|
|
|
|
|
|
+// @Transactional
|
|
@PostMapping("/lineCall/pulling")
|
|
@PostMapping("/lineCall/pulling")
|
|
public AjaxResult pulling(@RequestBody LineCallForm lineCallForm) {
|
|
public AjaxResult pulling(@RequestBody LineCallForm lineCallForm) {
|
|
//查询所属流程
|
|
//查询所属流程
|
|
@@ -202,14 +202,13 @@ public class PdaController {
|
|
return AjaxResult.error("指令查询不到对应的流程");
|
|
return AjaxResult.error("指令查询不到对应的流程");
|
|
}
|
|
}
|
|
|
|
|
|
- Map<String, AgvCallDTO> map = new HashMap<>();
|
|
|
|
- List<AgvCallDTO> list = new ArrayList<>();
|
|
|
|
- for (LineCallListFrom lform : lineCallForm.getLineCallList()) {
|
|
|
|
- BaseLocationInfo baseLocationInfoFrom = baseLocationInfoService.selectBaseLocationInfoByIdOrNo(lform.getLocationFrom()
|
|
|
|
- , Constant.WAREHOUSE_ID);
|
|
|
|
- if (baseLocationInfoFrom == null) {
|
|
|
|
- return AjaxResult.error("起始库位不存在!");
|
|
|
|
- }
|
|
|
|
|
|
+ LineCallListFrom lform = lineCallForm.getLineCallList().get(0);
|
|
|
|
+ // 校验
|
|
|
|
+ BaseLocationInfo baseLocationInfoFrom = baseLocationInfoService.selectBaseLocationInfoByIdOrNo(lform.getLocationFrom()
|
|
|
|
+ , Constant.WAREHOUSE_ID);
|
|
|
|
+ if (baseLocationInfoFrom == null) {
|
|
|
|
+ return AjaxResult.error("起始库位不存在!");
|
|
|
|
+ }
|
|
if (!baseLocationInfoFrom.getStockStatus().equals(Constant.STOCK_STATUS.STOCK00.getValue())) {
|
|
if (!baseLocationInfoFrom.getStockStatus().equals(Constant.STOCK_STATUS.STOCK00.getValue())) {
|
|
return AjaxResult.error("起始库位不为空闲状态!");
|
|
return AjaxResult.error("起始库位不为空闲状态!");
|
|
}
|
|
}
|
|
@@ -217,105 +216,49 @@ public class PdaController {
|
|
&& !baseLocationInfoFrom.getIsEmpty().equals(Constant.IS_YES.Y.name())) {
|
|
&& !baseLocationInfoFrom.getIsEmpty().equals(Constant.IS_YES.Y.name())) {
|
|
return AjaxResult.error("起始库位已经有货!");
|
|
return AjaxResult.error("起始库位已经有货!");
|
|
}
|
|
}
|
|
- if (StringUtils.isNotEmpty(lform.getLocationTo())) {
|
|
|
|
- BaseLocationInfo baseLocationInfoTo = baseLocationInfoService.selectBaseLocationInfoByIdOrNo(lform.getLocationTo()
|
|
|
|
- , Constant.WAREHOUSE_ID);
|
|
|
|
- if (baseLocationInfoTo == null) {
|
|
|
|
- return AjaxResult.error("目标库位不存在!");
|
|
|
|
- }
|
|
|
|
- if (!baseLocationInfoTo.getZoneId().equals(Constant.ZONE_TYPE.ZONE_INV.getValue())) {
|
|
|
|
- return AjaxResult.error("目标库位需要为仓储区!");
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- boolean superHighMark = false;
|
|
|
|
- if (baseLocationInfoFrom.getZoneId().equals(Constant.ZONE_TYPE.ZONE_IN.getValue())
|
|
|
|
- || baseLocationInfoFrom.getZoneId().equals(Constant.ZONE_TYPE.ZONE_RE.getValue())) {
|
|
|
|
- // 入库回库检测光栅高度
|
|
|
|
- String gratingNo = Constant.GRATING_AND_LOCATION_MAPPING.getByLocation(lform.getLocationFrom()).getValue();
|
|
|
|
- boolean isSuperHigh = iSysConfigService.checkGratingIsSuperHigh(gratingNo);
|
|
|
|
- // 永湖仓储区一层高度为1600,二层有4个点为1600,其他为2100
|
|
|
|
- // 入库和回库的时候,入库位IN-02-01(200)和回库位RET-01-01(500)没超高入库到1600的库位,超高了入库到2100
|
|
|
|
- // 入库和回库的时候,入库位IN-01-01和回库位RET-02-01入库到2100,超高不可入库
|
|
|
|
- if (isSuperHigh
|
|
|
|
- && !baseLocationInfoFrom.getLocationNo().equals("IN-02-01")
|
|
|
|
- && !baseLocationInfoFrom.getLocationNo().equals("RET-01-01")) {
|
|
|
|
- return AjaxResult.error("光栅监测到货物超高!请人工处理!");
|
|
|
|
- } else if (isSuperHigh &&
|
|
|
|
- (baseLocationInfoFrom.getLocationNo().equals("IN-02-01")
|
|
|
|
- || baseLocationInfoFrom.getLocationNo().equals("RET-01-01"))) {
|
|
|
|
- superHighMark = true;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- String asnNo = "";
|
|
|
|
- //排序规则 普通入库回库先放在col_no小的位置 - 1,备货入库回库放在col_no大的位置 - 2
|
|
|
|
- int orderRules = 1;
|
|
|
|
- //入库时绑定托盘
|
|
|
|
- if (flowConfigHeaderVO.getFlowType().equals("ASN")) {
|
|
|
|
- PaForm paForm = new PaForm();
|
|
|
|
- paForm.setPalletNo(lform.getPalletNo());
|
|
|
|
- if (lineCallForm.getFlowId().intValue() == 5) {
|
|
|
|
- paForm.setLocationFrom(Constant.LOC_STAGE_CACHE.toString());
|
|
|
|
- } else {
|
|
|
|
- paForm.setLocationFrom(Constant.LOC_SORTATION_CACHE.toString());
|
|
|
|
- }
|
|
|
|
- paForm.setLocationTo(lform.getLocationFrom());
|
|
|
|
- paForm.setFlowId(lineCallForm.getFlowId().intValue());
|
|
|
|
- paForm.setIsFull(lform.getIsFull());
|
|
|
|
- AjaxResult ajaxResult = wmsDocAsnHeaderService.doPa(paForm);
|
|
|
|
- if (!ajaxResult.isSuccess()) {
|
|
|
|
- return ajaxResult;
|
|
|
|
- }
|
|
|
|
- asnNo = (String) ajaxResult.get("data");
|
|
|
|
- orderRules = (int) ajaxResult.get("orderRules");
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- if (flowConfigHeaderVO.getFlowType().equals("ASN") && org.apache.commons.lang3.StringUtils.isEmpty(lform.getLocationFrom())) {
|
|
|
|
- return AjaxResult.error("入库任务必须选择起始库位");
|
|
|
|
|
|
+ if (StringUtils.isNotEmpty(lform.getLocationTo())) {
|
|
|
|
+ BaseLocationInfo baseLocationInfoTo = baseLocationInfoService.selectBaseLocationInfoByIdOrNo(lform.getLocationTo()
|
|
|
|
+ , Constant.WAREHOUSE_ID);
|
|
|
|
+ if (baseLocationInfoTo == null) {
|
|
|
|
+ return AjaxResult.error("目标库位不存在!");
|
|
}
|
|
}
|
|
- if (flowConfigHeaderVO.getFlowType().equals("SO") && (lform.getQty() == null || lform.getQty().longValue() == 0)) {
|
|
|
|
- return AjaxResult.error("出库任务必须选择数量");
|
|
|
|
|
|
+ if (!baseLocationInfoTo.getZoneId().equals(Constant.ZONE_TYPE.ZONE_INV.getValue())) {
|
|
|
|
+ return AjaxResult.error("目标库位需要为仓储区!");
|
|
}
|
|
}
|
|
- AgvCallDTO agvCallDTO;
|
|
|
|
- if (map.containsKey(lform.getLocationFrom() + "-" + lform.getLocationTo())) {
|
|
|
|
- agvCallDTO = map.get(lform.getLocationFrom() + "-" + lform.getLocationTo());
|
|
|
|
- } else {
|
|
|
|
- agvCallDTO = new AgvCallDTO();
|
|
|
|
- agvCallDTO.setWarehouseId(1L);//没用暂时写死
|
|
|
|
- agvCallDTO.setLocationFrom(lform.getLocationFrom());
|
|
|
|
- agvCallDTO.setLocationTo(lform.getLocationTo());
|
|
|
|
- agvCallDTO.setId(lform.getId());
|
|
|
|
- agvCallDTO.setPalletNo(lform.getPalletNo());
|
|
|
|
- agvCallDTO.setTaskType(lineCallForm.getFlowId().toString());
|
|
|
|
- agvCallDTO.setOrderNo(asnNo); // 入库单号
|
|
|
|
- agvCallDTO.setOrderRules(orderRules);
|
|
|
|
- }
|
|
|
|
- AgvCallItemDTO agvCallItemDTO = new AgvCallItemDTO();
|
|
|
|
- agvCallItemDTO.setWarehouseId(1L);
|
|
|
|
- agvCallItemDTO.setSku(lform.getSku());
|
|
|
|
- agvCallItemDTO.setQty(lform.getQty());
|
|
|
|
- agvCallItemDTO.setSupplier(lform.getSupplier());
|
|
|
|
- agvCallItemDTO.setWeight(lform.getWeight());
|
|
|
|
- agvCallItemDTO.setLocationFrom(lform.getLocationFrom());
|
|
|
|
- agvCallItemDTO.setLocationTo(lform.getLocationTo());
|
|
|
|
- agvCallItemDTO.setSuperHigh(superHighMark);
|
|
|
|
- agvCallDTO.getAgvCallItemDTOList().add(agvCallItemDTO);
|
|
|
|
- LotattDTO lotattDTO = new LotattDTO();
|
|
|
|
- List<LineCallDetailsForm> lineCallDetailsForms = lform.getLineCallDetailsFormList();
|
|
|
|
- if (lineCallDetailsForms != null && lineCallDetailsForms.size() > 0) {
|
|
|
|
- for (LineCallDetailsForm detailsForm : lineCallDetailsForms) {
|
|
|
|
- lotattDTO.setAttr(detailsForm.getLotattId(), detailsForm.getLotattValue());
|
|
|
|
- }
|
|
|
|
|
|
+ }
|
|
|
|
+ // 光栅检测
|
|
|
|
+ boolean superHighMark = false;
|
|
|
|
+ if (baseLocationInfoFrom.getZoneId().equals(Constant.ZONE_TYPE.ZONE_IN.getValue())
|
|
|
|
+ || baseLocationInfoFrom.getZoneId().equals(Constant.ZONE_TYPE.ZONE_RE.getValue())) {
|
|
|
|
+ // 入库回库检测光栅高度
|
|
|
|
+ String gratingNo = Constant.GRATING_AND_LOCATION_MAPPING.getByLocation(lform.getLocationFrom()).getValue();
|
|
|
|
+ boolean isSuperHigh = iSysConfigService.checkGratingIsSuperHigh(gratingNo);
|
|
|
|
+ // 永湖仓储区一层高度为1600,二层有4个点为1600,其他为2100
|
|
|
|
+ // 入库和回库的时候,入库位IN-02-01(200)和回库位RET-01-01(500)没超高入库到1600的库位,超高了入库到2100
|
|
|
|
+ // 入库和回库的时候,入库位IN-01-01和回库位RET-02-01入库到2100,超高不可入库
|
|
|
|
+ if (isSuperHigh
|
|
|
|
+ && !baseLocationInfoFrom.getLocationNo().equals("IN-02-01")
|
|
|
|
+ && !baseLocationInfoFrom.getLocationNo().equals("RET-01-01")) {
|
|
|
|
+ return AjaxResult.error("光栅监测到货物超高!请人工处理!");
|
|
|
|
+ } else if (isSuperHigh &&
|
|
|
|
+ (baseLocationInfoFrom.getLocationNo().equals("IN-02-01")
|
|
|
|
+ || baseLocationInfoFrom.getLocationNo().equals("RET-01-01"))) {
|
|
|
|
+ superHighMark = true;
|
|
}
|
|
}
|
|
- agvCallItemDTO.setLotattDTO(lotattDTO);
|
|
|
|
- map.put(lform.getLocationFrom() + "-" + lform.getLocationTo(), agvCallDTO);
|
|
|
|
}
|
|
}
|
|
- for (Map.Entry<String, AgvCallDTO> entry : map.entrySet()) {
|
|
|
|
- AgvCallDTO mapValue = entry.getValue();
|
|
|
|
- list.add(mapValue);
|
|
|
|
|
|
+
|
|
|
|
+ //上架+下发任务
|
|
|
|
+ PaForm paForm = new PaForm();
|
|
|
|
+ paForm.setPalletNo(lform.getPalletNo());
|
|
|
|
+ if (lineCallForm.getFlowId().intValue() == 5) {
|
|
|
|
+ paForm.setLocationFrom(Constant.LOC_STAGE_CACHE.toString());
|
|
|
|
+ } else {
|
|
|
|
+ paForm.setLocationFrom(Constant.LOC_SORTATION_CACHE.toString());
|
|
}
|
|
}
|
|
- return businessService.agvCall(flowConfigHeaderVO, list);
|
|
|
|
|
|
+ paForm.setLocationTo(lform.getLocationFrom());
|
|
|
|
+ paForm.setFlowId(lineCallForm.getFlowId().intValue());
|
|
|
|
+ paForm.setIsFull(lform.getIsFull());
|
|
|
|
+ return wmsDocAsnHeaderService.doPaAndTask(paForm, flowConfigHeaderVO, lform, lineCallForm, superHighMark);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|