|
@@ -13,10 +13,7 @@ import com.warewms.ams.ndc.common.ByteUtil;
|
|
|
import com.warewms.ams.ndc.common.CRC16Util;
|
|
|
import com.warewms.ams.ndc.domain.AmsTask;
|
|
|
import com.warewms.ams.ndc.domain.BaseLocationInfo;
|
|
|
-import com.warewms.ams.ndc.dto.AmsTaskCancelDTO;
|
|
|
-import com.warewms.ams.ndc.dto.AmsTaskDTO;
|
|
|
-import com.warewms.ams.ndc.dto.AmsTaskInfoDTO;
|
|
|
-import com.warewms.ams.ndc.dto.AmsTaskInsertDTO;
|
|
|
+import com.warewms.ams.ndc.dto.*;
|
|
|
import com.warewms.ams.ndc.mapper.AmsTaskMapper;
|
|
|
import com.warewms.ams.ndc.service.IAmsTaskService;
|
|
|
import com.warewms.ams.ndc.service.IBaseLocationInfoService;
|
|
@@ -27,10 +24,12 @@ import com.warewms.common.utils.string.StringUtils;
|
|
|
import com.warewms.framework.service.impl.CrudServiceImpl;
|
|
|
import com.warewms.system.service.ISysConfigService;
|
|
|
import io.jsonwebtoken.lang.Assert;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
import org.assertj.core.util.Lists;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
+import org.springframework.web.client.RestTemplate;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
import java.util.List;
|
|
@@ -43,6 +42,7 @@ import java.util.Map;
|
|
|
* @date 2022-08-08
|
|
|
*/
|
|
|
@Service
|
|
|
+@Slf4j
|
|
|
public class AmsTaskServiceImpl extends CrudServiceImpl<AmsTaskMapper, AmsTask, AmsTaskDTO> implements IAmsTaskService
|
|
|
{
|
|
|
@Autowired
|
|
@@ -57,6 +57,9 @@ public class AmsTaskServiceImpl extends CrudServiceImpl<AmsTaskMapper, AmsTask,
|
|
|
@Autowired
|
|
|
private ISysConfigService sysConfigService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private RestTemplate restTemplate;
|
|
|
+
|
|
|
public static int genIKey(String taskNo) {
|
|
|
int res = CRC16Util.calcCrc16(ByteUtil.string2byteArray(taskNo));
|
|
|
if (res == 0) {
|
|
@@ -179,7 +182,9 @@ public class AmsTaskServiceImpl extends CrudServiceImpl<AmsTaskMapper, AmsTask,
|
|
|
&& redisCache.checkIsExist(AmsConstant.WMS_CORRESPOND_AGV_STATION_KEY.concat(amsTaskInsertDTO.getLocationTo()));
|
|
|
amsTask.setStTo(isExist ? convertLocation(amsTaskInsertDTO.getLocationTo()) : getCacheLocation(amsTaskInsertDTO.getLocationFrom(), amsTaskInsertDTO.getLocationTo()));
|
|
|
amsTask.setExt3(isExist ? null : amsTaskInsertDTO.getLocationTo());
|
|
|
- amsTask.setExt1(isExist ? redisCache.getCacheObject(AmsConstant.LOCATION_ROW_KEY.concat(amsTask.getStTo().toString())) : String.valueOf(BigDecimal.ZERO));
|
|
|
+ amsTask.setExt1(isExist ? redisCache.getCacheObject(AmsConstant.LOCATION_ROW_KEY.concat(amsTask.getStTo().toString())) :
|
|
|
+ redisCache.checkIsExist(AmsConstant.WMS_CORRESPOND_AGV_STATION_KEY.concat(amsTaskInsertDTO.getLocationFrom())) ?
|
|
|
+ redisCache.getCacheObject(AmsConstant.LOCATION_ROW_KEY.concat(amsTaskInsertDTO.getLocationFrom())) : String.valueOf(BigDecimal.ZERO));
|
|
|
amsTask.setExt2(amsTask.getExt1());
|
|
|
amsTask.setBusinessType(StringUtils.isNotBlank(amsTaskInsertDTO.getBusinessType()) ?
|
|
|
amsTaskInsertDTO.getBusinessType() : AmsConstant.TASK_BUSINESS_TYPE.TASK_01.getValue());
|
|
@@ -193,14 +198,20 @@ public class AmsTaskServiceImpl extends CrudServiceImpl<AmsTaskMapper, AmsTask,
|
|
|
|
|
|
@Override
|
|
|
public void ndcAmsTaskInsert(String businessNo, String businessType, Integer stFrom, String stTo) {
|
|
|
+ List<AmsTask> wcsTaskList = amsTaskMapper.selectList(Wrappers.<AmsTask>lambdaQuery().eq(AmsTask::getTaskNo, businessNo)
|
|
|
+ .isNull(AmsTask::getExt3));
|
|
|
+ Assert.isTrue(CollectionUtil.isEmpty(wcsTaskList), "任务下发重复!");
|
|
|
AmsTask amsTask = new AmsTask();
|
|
|
amsTask.setId(Long.parseLong(IdWorker.getIdStr()));
|
|
|
amsTask.setTaskNo(businessNo);
|
|
|
- amsTask.setStFrom(convertLocation(stFrom.toString()));
|
|
|
+ amsTask.setStFrom(redisCache.checkIsExist(AmsConstant.AGV_TO_PILLING_CAR_KEY.concat(stFrom.toString())) ?
|
|
|
+ redisCache.getCacheObject(AmsConstant.AGV_TO_PILLING_CAR_KEY.concat(stFrom.toString())) : convertLocation(stFrom.toString()));
|
|
|
amsTask.setStTo(convertLocation(stTo));
|
|
|
amsTask.setExt1(redisCache.getCacheObject(AmsConstant.LOCATION_ROW_KEY.concat(stTo)));
|
|
|
amsTask.setExt2(amsTask.getExt1());
|
|
|
amsTask.setBusinessType(businessType);
|
|
|
+ amsTask.setDeviceName(AmsConstant.AMS_SYS_NAME);
|
|
|
+ amsTask.setSysName(AmsConstant.AMS_SYS_NAME);
|
|
|
amsTask.setIsDelete(0);
|
|
|
amsTask.setAciAccept(0);
|
|
|
amsTask.setIkey((long) genIKey(amsTask.getId().toString()));
|
|
@@ -225,7 +236,7 @@ public class AmsTaskServiceImpl extends CrudServiceImpl<AmsTaskMapper, AmsTask,
|
|
|
Assert.isTrue(ObjectUtil.isNotNull(zoneId), "location.scene.config is not exist this locationId");
|
|
|
List<BaseLocationInfo> baseLocationInfoList = baseLocationInfoService.queryBaseLocationInfoList(zoneId, rowNo);
|
|
|
Assert.isTrue(CollectionUtil.isNotEmpty(baseLocationInfoList), "this zone cache location is not exist");
|
|
|
- return Integer.parseInt(baseLocationInfoList.stream().findFirst().orElseThrow(() -> new BaseException("this zone cache location is not exist")).getLocationNo());
|
|
|
+ return Integer.parseInt(baseLocationInfoList.stream().map(item -> isExist ? item.getAgvStation().toString() : item.getLocationNo()).findFirst().orElseThrow(() -> new BaseException("this zone cache location is not exist")));
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -264,6 +275,32 @@ public class AmsTaskServiceImpl extends CrudServiceImpl<AmsTaskMapper, AmsTask,
|
|
|
.set(AmsTask::getRemark, "下发超时1分钟未接收自动取消, 取消原因为:" + remark)) > 0;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public void cancelAmsTaskToWms(AmsTaskCancelToWmsDTO amsTaskCancelToWmsDTO) {
|
|
|
+ AmsTaskDTO amsTaskDTO = get(amsTaskCancelToWmsDTO.getId());
|
|
|
+ AmsTaskCancelDTO amsTaskCancelDTO = ConvertUtils.sourceToTarget(amsTaskCancelToWmsDTO, AmsTaskCancelDTO.class);
|
|
|
+ amsTaskCancelDTO.setTaskNo(amsTaskCancelToWmsDTO.getId().toString());
|
|
|
+ cancelAmsTask(amsTaskCancelDTO);
|
|
|
+ amsStateFeedbackToWms(AmsConstant.TASK_STS.TASK7.getValue(), amsTaskDTO.getId().toString(), amsTaskDTO.getTaskNo(),null);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void amsStateFeedbackToWms(Integer state, String amsTaskId, String businessNo, Integer carNo){
|
|
|
+ AmsTaskStateFeedbackDTO amsTaskStateFeedbackDTO = new AmsTaskStateFeedbackDTO();
|
|
|
+ amsTaskStateFeedbackDTO.setState(state);
|
|
|
+ amsTaskStateFeedbackDTO.setTaskNo(amsTaskId);
|
|
|
+ amsTaskStateFeedbackDTO.setBusinessNo(businessNo);
|
|
|
+ amsTaskStateFeedbackDTO.setCarNo(carNo);
|
|
|
+ log.info("AmsTaskServiceImpl - amsTaskStateFeedbackDTO is :{}", amsTaskStateFeedbackDTO);
|
|
|
+ Object response = null;
|
|
|
+ try {
|
|
|
+ response = restTemplate.postForObject(AmsConstant.WMS_URL, amsTaskStateFeedbackDTO, Object.class);
|
|
|
+ log.info("wms response data is :{}", JSONObject.toJSONString(response));
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("AMS send request to WMS is on error, pause is :{}", e.getMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
public Integer getAmsTaskState(AmsTask amsTask){
|
|
|
Integer delete = ObjectUtil.isNotNull(amsTask.getIsDelete()) ? amsTask.getIsDelete() : null;
|
|
|
Integer aciAccept = ObjectUtil.isNotNull(amsTask.getAciAccept()) ? amsTask.getAciAccept() : null;
|
|
@@ -283,6 +320,19 @@ public class AmsTaskServiceImpl extends CrudServiceImpl<AmsTaskMapper, AmsTask,
|
|
|
return getAmsTaskList(null, null, aciIndex).stream().findFirst().orElseGet(() -> null);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public void completeAmsTaskToWms(Long id) {
|
|
|
+ AmsTaskDTO amsTaskDTO = get(id);
|
|
|
+ amsTaskMapper.update(new AmsTask(), Wrappers.<AmsTask>lambdaUpdate()
|
|
|
+ .eq(AmsTask::getId, id)
|
|
|
+ .set(AmsTask::getIsDelete, AmsConstant.DELETE_STATUS.N.getValue())
|
|
|
+ .set(AmsTask::getAciAccept, AmsConstant.ACI_ACCEPT_STATUS.Y.getValue())
|
|
|
+ .set(AmsTask::getEvent, AmsConstant.TASK_STS.TASK2.getKey())
|
|
|
+ .set(AmsTask::getSystemStatus, AmsConstant.TASK_STS.TASK2.getValue())
|
|
|
+ .set(AmsTask::getRemark, "ams系统手动完成"));
|
|
|
+ amsStateFeedbackToWms(AmsConstant.TASK_STS.TASK2.getValue(), amsTaskDTO.getId().toString(), amsTaskDTO.getTaskNo(), null);
|
|
|
+ }
|
|
|
+
|
|
|
public List<AmsTask> getAmsTaskList(List<String> businessNoList, List<String> idList, Integer aciIndex){
|
|
|
List<AmsTask> amsTaskList = amsTaskMapper.selectList(Wrappers.<AmsTask>lambdaQuery()
|
|
|
.in(CollectionUtil.isNotEmpty(businessNoList), AmsTask::getTaskNo, businessNoList)
|
|
@@ -295,14 +345,14 @@ public class AmsTaskServiceImpl extends CrudServiceImpl<AmsTaskMapper, AmsTask,
|
|
|
@Override
|
|
|
public QueryWrapper<AmsTask> getWrapper(Map<String, Object> params) {
|
|
|
QueryWrapper<AmsTask> queryWrapper = new QueryWrapper<>();
|
|
|
- String taskNo = (String) params.get("taskNo");
|
|
|
- String aciIndex = (String) params.get("aciIndex");
|
|
|
- String stFrom = (String) params.get("stFrom");
|
|
|
- String stTo = (String) params.get("stTo");
|
|
|
- queryWrapper.lambda().eq(StringUtils.isNotBlank(taskNo), AmsTask::getTaskNo, Integer.parseInt(taskNo))
|
|
|
- .eq(StringUtils.isNotBlank(aciIndex), AmsTask::getAciIndex, Integer.parseInt(aciIndex))
|
|
|
- .eq(StringUtils.isNotBlank(stFrom), AmsTask::getStFrom, Integer.parseInt(stFrom))
|
|
|
- .eq(StringUtils.isNotBlank(stTo), AmsTask::getStTo, Integer.parseInt(stTo));
|
|
|
+ Integer taskNo = StringUtils.isNotBlank((String) params.get("taskNo")) ? Integer.parseInt((String) params.get("taskNo")) : null;
|
|
|
+ Integer aciIndex = StringUtils.isNotBlank((String) params.get("aciIndex")) ? Integer.parseInt((String) params.get("aciIndex")) : null;
|
|
|
+ Integer stFrom = StringUtils.isNotBlank((String) params.get("stFrom")) ? Integer.parseInt((String) params.get("stFrom")) : null;
|
|
|
+ Integer stTo = StringUtils.isNotBlank((String) params.get("stTo")) ? Integer.parseInt((String) params.get("stTo")) : null;
|
|
|
+ queryWrapper.lambda().eq(ObjectUtil.isNotNull(taskNo), AmsTask::getTaskNo, taskNo)
|
|
|
+ .eq(ObjectUtil.isNotNull(aciIndex), AmsTask::getAciIndex, aciIndex)
|
|
|
+ .eq(ObjectUtil.isNotNull(stFrom), AmsTask::getStFrom, stFrom)
|
|
|
+ .eq(ObjectUtil.isNotNull(stTo), AmsTask::getStTo, stTo);
|
|
|
return queryWrapper;
|
|
|
}
|
|
|
}
|