|  |  | 
 |  |  | package com.zy.asrs.service.impl; | 
 |  |  |  | 
 |  |  | import com.alibaba.fastjson.JSON; | 
 |  |  | import com.alibaba.fastjson.JSONObject; | 
 |  |  | import com.core.common.Cools; | 
 |  |  | import com.core.exception.CoolException; | 
 |  |  | import com.zy.asrs.domain.enums.TaskStatusType; | 
 |  |  | import com.zy.asrs.domain.enums.WorkNoType; | 
 |  |  | import com.zy.asrs.entity.DeviceError; | 
 |  |  | import com.zy.asrs.entity.StaDesc; | 
 |  |  | import com.zy.asrs.mapper.TaskWrkMapper; | 
 |  |  | import com.zy.asrs.entity.TaskWrk; | 
 |  |  | import com.zy.asrs.service.ApiLogService; | 
 |  |  | import com.zy.asrs.service.StaDescService; | 
 |  |  | import com.zy.asrs.service.TaskWrkService; | 
 |  |  | import com.baomidou.mybatisplus.service.impl.ServiceImpl; | 
 |  |  | import com.zy.asrs.utils.CommandUtils; | 
 |  |  | import com.zy.asrs.utils.Utils; | 
 |  |  | import com.zy.common.service.CommonService; | 
 |  |  | import com.zy.common.utils.HttpHandler; | 
 |  |  | import com.zy.core.DevpThread; | 
 |  |  | import com.zy.core.cache.MessageQueue; | 
 |  |  | import com.zy.core.cache.SlaveConnection; | 
 |  |  | import com.zy.core.enums.CrnTaskModeType; | 
 |  |  | import com.zy.core.enums.SlaveType; | 
 |  |  | 
 |  |  | import com.zy.core.model.protocol.StaProtocol; | 
 |  |  | import lombok.extern.slf4j.Slf4j; | 
 |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
 |  |  | import org.springframework.beans.factory.annotation.Value; | 
 |  |  | import org.springframework.stereotype.Service; | 
 |  |  | import org.springframework.transaction.annotation.Propagation; | 
 |  |  | import org.springframework.transaction.annotation.Transactional; | 
 |  |  |  | 
 |  |  | import java.time.LocalDateTime; | 
 |  |  | import java.util.Date; | 
 |  |  | import java.util.HashMap; | 
 |  |  | import java.util.List; | 
 |  |  |  | 
 |  |  | @Slf4j | 
 |  |  | 
 |  |  |     private CommonService commonService; | 
 |  |  |     @Autowired | 
 |  |  |     private StaDescService staDescService; | 
 |  |  |     @Value("${wms.url}") | 
 |  |  |     private String wmsUrl; | 
 |  |  |     @Value("${wms.taskStatusFeedbackPath}") | 
 |  |  |     private String taskStatusFeedbackPath; | 
 |  |  |     @Autowired | 
 |  |  |     private ApiLogService apiLogService; | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public TaskWrk selectByTaskNo(String taskNo) { | 
 |  |  | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public void startup(TaskWrk taskWrk, Long userId) { | 
 |  |  |  | 
 |  |  |         //入库任务派发 | 
 |  |  |         StaDesc staDesc = staDescService.queryCrn(taskWrk.getIoType(), Integer.parseInt(taskWrk.getStartPoint()), taskWrk.getCrnNo()); | 
 |  |  |         if (staDesc == null) { | 
 |  |  | 
 |  |  |         taskWrk.setWrkNo(workNo);//工作号 | 
 |  |  |         taskWrk.setStatus(TaskStatusType.DISTRIBUTE.id);//派发状态 | 
 |  |  |         taskWrk.setAssignTime(new Date());//派发时间 | 
 |  |  |         taskWrk.setWrkSts(2);//工作状态 2.设备上走 | 
 |  |  |         taskWrk.setWrkSts(3);//工作状态 2.吊车入库 | 
 |  |  |         taskWrk.setCrnNo(staDesc.getCrnNo());//堆垛机号 | 
 |  |  |         taskWrk.setModiTime(new Date()); | 
 |  |  |         taskWrk.setModiUser(userId); | 
 |  |  | 
 |  |  |         crnCommand.setTaskNo(taskWrk.getWrkNo().shortValue()); // 工作号 | 
 |  |  |         crnCommand.setAckFinish((short) 0);  // 任务完成确认位 | 
 |  |  |         crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式:  库位移转 | 
 |  |  |         crnCommand.setSourcePosX(crnStn.getBay().shortValue());     // 源库位列 | 
 |  |  |         crnCommand.setSourcePosY(crnStn.getLev().shortValue());     // 源库位层 | 
 |  |  |         crnCommand.setSourcePosZ(crnStn.getRow().shortValue());     // 源库位排 | 
 |  |  |         crnCommand.setDestinationPosX(Utils.getBayShort(taskWrk.getTargetPoint()));     // 目标库位列 | 
 |  |  |         crnCommand.setDestinationPosY(Utils.getLevShort(taskWrk.getTargetPoint()));     // 目标库位层 | 
 |  |  |         crnCommand.setDestinationPosZ(Utils.getRowShort(taskWrk.getTargetPoint()));     // 目标库位排 | 
 |  |  |         crnCommand.setCommand((short)1); | 
 |  |  |         if (!CommandUtils.offer(SlaveType.Crn, taskWrk.getCrnNo(), new Task(5, crnCommand))) { | 
 |  |  |         crnCommand.setSourcePosX(crnStn.getRow().shortValue());     // 源库位列 | 
 |  |  |         crnCommand.setSourcePosY(crnStn.getBay().shortValue());     // 源库位层 | 
 |  |  |         crnCommand.setSourcePosZ(crnStn.getLev().shortValue());     // 源库位排 | 
 |  |  |         crnCommand.setDestinationPosX(Utils.getRowShort(taskWrk.getTargetPoint()));     // 目标库位列 | 
 |  |  |         crnCommand.setDestinationPosY(Utils.getBayShort(taskWrk.getTargetPoint()));     // 目标库位层 | 
 |  |  |         crnCommand.setDestinationPosZ(Utils.getLevShort(taskWrk.getTargetPoint()));     // 目标库位排 | 
 |  |  | //        crnCommand.setCommand((short)1); | 
 |  |  |         if (!MessageQueue.offer(SlaveType.Crn, taskWrk.getCrnNo(), new Task(5, crnCommand))) { | 
 |  |  |             log.error("堆垛机命令生成失败,堆垛机号={},任务数据={}", taskWrk.getCrnNo(), JSON.toJSON(crnCommand)); | 
 |  |  |             throw new CoolException("堆垛机命令生成失败"); | 
 |  |  |         }else{ | 
 |  |  |             try{ | 
 |  |  |                 HashMap<String, Object> headParam = new HashMap<>(); | 
 |  |  |                 headParam.put("taskNo",taskWrk.getTaskNo()); | 
 |  |  |                 headParam.put("taskStatus",taskWrk.getStatusWms()); | 
 |  |  |                 headParam.put("ioType",taskWrk.getIoTypeWms()); | 
 |  |  |                 headParam.put("barCode",taskWrk.getBarcode()); | 
 |  |  |                 headParam.put("reportTime", LocalDateTime.now()); | 
 |  |  |                 headParam.put("weight",taskWrk.getScWeight().doubleValue()); | 
 |  |  |  | 
 |  |  | //                headParam.put("reportTime",new Date()); | 
 |  |  |                 String response; | 
 |  |  |                 response = new HttpHandler.Builder() | 
 |  |  |                         // .setHeaders(headParam) | 
 |  |  |                         .setUri(wmsUrl) | 
 |  |  |                         .setPath(taskStatusFeedbackPath) | 
 |  |  |                         .setJson(JSON.toJSONString(headParam)) | 
 |  |  |                         .build() | 
 |  |  |                         .doPost(); | 
 |  |  |  | 
 |  |  |                 JSONObject jsonObject = JSON.parseObject(response); | 
 |  |  |                 apiLogService.save("wcs派发入库任务上报wms" | 
 |  |  |                         ,wmsUrl+taskStatusFeedbackPath | 
 |  |  |                         ,null | 
 |  |  |                         ,"127.0.0.1" | 
 |  |  |                         ,JSON.toJSONString(headParam) | 
 |  |  |                         ,response | 
 |  |  |                         ,true | 
 |  |  |                 ); | 
 |  |  |             }catch (Exception e){ | 
 |  |  |                 log.error("wcs派发入库任务上报wms失败", taskWrk); | 
 |  |  | //                throw new CoolException("wcs派发入库任务上报wms失败"); | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | 
 |  |  |         taskWrk.setWrkNo(workNo);//工作号 | 
 |  |  |         taskWrk.setStatus(TaskStatusType.DISTRIBUTE.id);//派发状态 | 
 |  |  |         taskWrk.setAssignTime(new Date());//派发时间 | 
 |  |  |         taskWrk.setWrkSts(11);//工作状态 11.生成出库ID | 
 |  |  |         taskWrk.setWrkSts(12);//工作状态 12.吊车入库中 | 
 |  |  |         taskWrk.setCrnNo(staDesc.getCrnNo());//堆垛机号 | 
 |  |  |         taskWrk.setModiTime(new Date()); | 
 |  |  |         taskWrk.setModiUser(userId); | 
 |  |  | 
 |  |  |         crnCommand.setDestinationPosX(crnStn.getBay().shortValue());     // 目标库位排 | 
 |  |  |         crnCommand.setDestinationPosY(crnStn.getLev().shortValue());     // 目标库位列 | 
 |  |  |         crnCommand.setDestinationPosZ(crnStn.getRow().shortValue());     // 目标库位层 | 
 |  |  |         crnCommand.setCommand((short)1); | 
 |  |  |         if (!CommandUtils.offer(SlaveType.Crn, taskWrk.getCrnNo(), new Task(5, crnCommand))) { | 
 |  |  | //        crnCommand.setCommand((short)1); | 
 |  |  |         if (!MessageQueue.offer(SlaveType.Crn, taskWrk.getCrnNo(), new Task(5, crnCommand))) { | 
 |  |  |             log.error("堆垛机命令生成失败,堆垛机号={},任务数据={}", taskWrk.getCrnNo(), JSON.toJSON(crnCommand)); | 
 |  |  |             throw new CoolException("堆垛机命令生成失败"); | 
 |  |  |         } | 
 |  |  | 
 |  |  |         //生成输送线命令 | 
 |  |  |         DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId()); | 
 |  |  |         StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo()).clone(); | 
 |  |  |         staProtocol.setWorkNo(taskWrk.getWrkNo().shortValue()); | 
 |  |  |         staProtocol.setStaNo((short) Integer.parseInt(taskWrk.getTargetPoint())); | 
 |  |  |         if (!CommandUtils.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(3, staProtocol))) { | 
 |  |  |         staProtocol.setWorkNo(taskWrk.getWrkNo()); | 
 |  |  |         staProtocol.setStaNo(Integer.parseInt(taskWrk.getTargetPoint())); | 
 |  |  |         if (!MessageQueue.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(3, staProtocol))) { | 
 |  |  |             log.error("输送线命令生成失败,堆垛机号={},任务数据={}", taskWrk.getCrnNo(), JSON.toJSON(crnCommand)); | 
 |  |  |             throw new CoolException("输送线命令生成失败"); | 
 |  |  |         } | 
 |  |  | 
 |  |  |     public int saveToHistory(String taskNo) { | 
 |  |  |         return this.baseMapper.saveToHistory(taskNo); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public List<TaskWrk> selectTaskWrkList(Integer wrkNo,String taskNo,Integer status,Date modiTimeStart,Date modiTimeEnd, Integer curr, Integer limit) { | 
 |  |  |         return this.baseMapper.selectTaskWrkList(wrkNo,taskNo, status,modiTimeStart,modiTimeEnd,curr,limit); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public Long selectTaskWrkListTotal(Integer wrkNo,String taskNo,Integer status,Date modiTimeStart,Date modiTimeEnd) { | 
 |  |  |         return this.baseMapper.selectTaskWrkListTotal(wrkNo,taskNo, status,modiTimeStart,modiTimeEnd); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public int saveToHistoryD(String taskNo) { | 
 |  |  |         return this.baseMapper.saveToHistoryD(taskNo); | 
 |  |  |     } | 
 |  |  | } |