|
@@ -1,14 +1,27 @@
|
|
|
package com.ruoyi.ams.task.service.impl;
|
|
|
|
|
|
import java.lang.reflect.Method;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Arrays;
|
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
|
|
|
|
+import cn.hutool.core.util.ObjectUtil;
|
|
|
+import cn.hutool.json.JSON;
|
|
|
+import cn.hutool.json.JSONObject;
|
|
|
+import cn.hutool.json.JSONUtil;
|
|
|
import com.ruoyi.ams.agv.ndc.domain.AmsTask;
|
|
|
import com.ruoyi.ams.agv.ndc.entity.CallbackResult;
|
|
|
import com.ruoyi.ams.agv.ndc.service.IAmsTaskService;
|
|
|
+import com.ruoyi.ams.bionutrition.doc.dto.BionutritionDocBaseDTO;
|
|
|
+import com.ruoyi.ams.bionutrition.doc.dto.detail.BionutritionDocDetailsBaseDTO;
|
|
|
+import com.ruoyi.ams.bionutrition.doc.service.BionutritionDocHeaderService;
|
|
|
import com.ruoyi.ams.box.service.IWmsBoxInfoService;
|
|
|
+import com.ruoyi.ams.business.IBusinessService;
|
|
|
import com.ruoyi.ams.config.domain.FlowConfigEvent;
|
|
|
+import com.ruoyi.ams.config.domain.dto.AgvCallDTO;
|
|
|
+import com.ruoyi.ams.config.domain.dto.AgvCallItemDTO;
|
|
|
+import com.ruoyi.ams.config.domain.dto.LotattDTO;
|
|
|
import com.ruoyi.ams.config.service.IFlowConfigEventService;
|
|
|
import com.ruoyi.ams.inv.domain.InvLotAtt;
|
|
|
import com.ruoyi.ams.inv.domain.InvLotLocId;
|
|
@@ -18,13 +31,17 @@ import com.ruoyi.ams.inv.service.IInvLotLocIdService;
|
|
|
import com.ruoyi.ams.task.dto.WcsTaskLocationDTO;
|
|
|
import com.ruoyi.base.constant.Constant;
|
|
|
import com.ruoyi.base.domain.BaseLocationInfo;
|
|
|
+import com.ruoyi.base.domain.vo.BaseLocationLotattVO;
|
|
|
import com.ruoyi.base.service.IBaseLocationInfoService;
|
|
|
import com.ruoyi.common.core.domain.AjaxResult;
|
|
|
+import com.ruoyi.common.core.domain.BaseEntity;
|
|
|
import com.ruoyi.common.core.redis.RedisCache;
|
|
|
+import com.ruoyi.common.exception.base.BaseException;
|
|
|
import com.ruoyi.common.utils.StringUtils;
|
|
|
import com.ruoyi.common.utils.spring.SpringUtils;
|
|
|
import com.ruoyi.common.utils.uuid.SnowflakeIdWorker;
|
|
|
import com.ruoyi.hard.modbus.tcp.AutoDoorClient;
|
|
|
+import com.ruoyi.system.service.ISysConfigService;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
@@ -66,6 +83,17 @@ public class WcsTaskServiceImpl implements IWcsTaskService {
|
|
|
@Autowired
|
|
|
private AutoDoorClient autoDoorClient;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private BionutritionDocHeaderService bionutritionDocHeaderService;
|
|
|
+
|
|
|
+ private List<String> outboundDocTypeList = Arrays.asList("SaleOutboundOrder");
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ISysConfigService iSysConfigService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IBusinessService iBusinessService;
|
|
|
+
|
|
|
//任务状态翻译
|
|
|
private String codeConvert(int code) {
|
|
|
switch (code) {
|
|
@@ -585,6 +613,51 @@ public class WcsTaskServiceImpl implements IWcsTaskService {
|
|
|
return AjaxResult.success();
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 根据单号生成AGV出库任务
|
|
|
+ * @param wcsTask
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public synchronized AjaxResult createOutboundTaskByDoc(WcsTask wcsTask) {
|
|
|
+ //校验单号
|
|
|
+ BionutritionDocBaseDTO bionutritionDocBaseDTO = bionutritionDocHeaderService.selectDocByDocNo(wcsTask.getWhNoFrom());
|
|
|
+ if (ObjectUtil.isEmpty(bionutritionDocBaseDTO)){
|
|
|
+ return AjaxResult.error("单据不存在");
|
|
|
+ }
|
|
|
+ if(!outboundDocTypeList.contains(bionutritionDocBaseDTO.getBionutritionDocHeaderBaseDTO().getDocType())){
|
|
|
+ return AjaxResult.error("该单据不是出库单据");
|
|
|
+ }
|
|
|
+ String skuCode = null;
|
|
|
+ for (BionutritionDocDetailsBaseDTO bionutritionDocDetailsBaseDTO : bionutritionDocBaseDTO.getBionutritionDocDetailsBaseDTOList()) {
|
|
|
+ if(wcsTask.getExt7().equals( bionutritionDocDetailsBaseDTO.getSkuCode())){
|
|
|
+ skuCode = bionutritionDocDetailsBaseDTO.getSkuCode();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (StringUtils.isEmpty(skuCode)){
|
|
|
+ return AjaxResult.error("该单据不存在该物料信息!");
|
|
|
+ }
|
|
|
+
|
|
|
+ Long flowId = 0L;
|
|
|
+ for (Object o : JSONUtil.parseArray(iSysConfigService.selectConfigByKey("sys.docType.corresponding.business"))) {
|
|
|
+ JSONObject entries = JSONUtil.parseObj(o.toString());
|
|
|
+ if (bionutritionDocBaseDTO.getBionutritionDocHeaderBaseDTO().getDocType().equals(entries.get("docType"))){
|
|
|
+ flowId = Long.parseLong(entries.get("flowId").toString());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (flowId==0){
|
|
|
+ return AjaxResult.error("未找到对应的任务下发流程!");
|
|
|
+ }
|
|
|
+ List<AgvCallItemDTO> agvCallItemDTOList = new ArrayList<>();
|
|
|
+ AgvCallItemDTO agvCallItemDTO = new AgvCallItemDTO();
|
|
|
+ agvCallItemDTO.setSku(wcsTask.getExt7());
|
|
|
+ agvCallItemDTOList.add(agvCallItemDTO);
|
|
|
+ AgvCallDTO agvCallDTO = new AgvCallDTO();
|
|
|
+ agvCallDTO.setLocationTo(wcsTask.getLocationTo());
|
|
|
+ agvCallDTO.setAgvCallItemDTOList(agvCallItemDTOList);
|
|
|
+ return iBusinessService.agvCall(flowId, agvCallDTO);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 修改库存出入库标记
|
|
|
*
|