package com.zy.asrs.service.impl; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.zy.asrs.mapper.TaskWrkMapper; import com.zy.asrs.entity.TaskWrk; import com.zy.asrs.service.TaskWrkService; import com.baomidou.mybatisplus.service.impl.ServiceImpl; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import java.util.List; @Slf4j @Service("taskWrkService") public class TaskWrkServiceImpl extends ServiceImpl implements TaskWrkService { @Override public TaskWrk selectByTaskNo(String taskNo) { return this.baseMapper.selectByTaskNo(taskNo); } @Override public TaskWrk selectByStartPoint(String taskNo) { return this.baseMapper.selectByStartPoint(taskNo); } @Override public TaskWrk selectByWrkNo(Integer wrkNo) { return this.baseMapper.selectByWrkNo(wrkNo); } @Override public List selectReceive() { return this.baseMapper.selectReceive(); } @Override @Transactional(propagation = Propagation.REQUIRES_NEW) public void distribute(String taskNo, Long userId) { // TaskWrk taskWrk = this.selectByTaskNo(taskNo); // if (taskWrk == null) { // throw new CoolException("WMS任务不存在"); // } // // if (taskWrk.getStatus() != 1) { // throw new CoolException("任务已派发"); // } // // //创建任务 // if (taskWrk.getIoType() == 1) { // //1.入库 // if (taskWrk.getStartPoint() == null || taskWrk.getTargetPoint() == null) { // throw new CoolException("未接收到起点和终点,不进行派发"); // } // startup(taskWrk, userId); // }else if(taskWrk.getIoType() == 2){ // //2.出库 // stockOut(taskWrk, userId); // } else if (taskWrk.getIoType() == 3) { // //3.库格移载 // locMove(taskWrk, userId); // } } @Override public void startup(TaskWrk taskWrk, Long userId) { // //入库任务派发 // StaDesc staDesc = staDescService.queryCrn(taskWrk.getIoType(), Integer.parseInt(taskWrk.getStartPoint()), taskWrk.getCrnNo()); // if (staDesc == null) { // throw new CoolException("入库路径不存在"); // } // int workNo = commonService.getWorkNo(WorkNoType.PAKIN.type);//获取入库工作号 // taskWrk.setWrkNo(workNo);//工作号 // taskWrk.setStatus(TaskStatusType.DISTRIBUTE.id);//派发状态 // taskWrk.setAssignTime(new Date());//派发时间 // taskWrk.setWrkSts(3);//工作状态 2.吊车入库 // taskWrk.setCrnNo(staDesc.getCrnNo());//堆垛机号 // taskWrk.setModiTime(new Date()); // taskWrk.setModiUser(userId); // updateById(taskWrk); // // CrnSlave.CrnStn crnStn = Utils.getCrnStnByStaNo(staDesc.getCrnStn(), true); // if (crnStn == null) { // throw new CoolException("堆垛机入库站不存在"); // } // // 命令下发区 -------------------------------------------------------------------------- // CrnCommand crnCommand = new CrnCommand(); // crnCommand.setCrnNo(staDesc.getCrnNo()); // 堆垛机编号 // crnCommand.setTaskNo(taskWrk.getWrkNo().shortValue()); // 工作号 // crnCommand.setAckFinish((short) 0); // 任务完成确认位 // crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式: 库位移转 // 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 (!CommandUtils.offer(SlaveType.Crn, taskWrk.getCrnNo(), new Task(5, crnCommand),false)) { // log.error("堆垛机命令生成失败,堆垛机号={},任务数据={}", taskWrk.getCrnNo(), JSON.toJSON(crnCommand)); // throw new CoolException("堆垛机命令生成失败"); // }else{ // try{ // HashMap headParam = new HashMap<>(); // headParam.put("taskNo",taskWrk.getTaskNo()); // headParam.put("status",taskWrk.getStatus()); // headParam.put("ioType",taskWrk.getIoType()); // headParam.put("barcode",taskWrk.getBarcode()); //// 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失败"); // } // // } } @Override public void stockOut(TaskWrk taskWrk, Long userId) { // //出库任务派发 // StaDesc staDesc = staDescService.queryCrn(taskWrk.getIoType(), Integer.parseInt(taskWrk.getTargetPoint()), taskWrk.getCrnNo()); // if (staDesc == null) { // return;//不存在路径 // } // int workNo = commonService.getWorkNo(WorkNoType.PAKOUT.type);//获取出库工作号 // taskWrk.setWrkNo(workNo);//工作号 // taskWrk.setStatus(TaskStatusType.DISTRIBUTE.id);//派发状态 // taskWrk.setAssignTime(new Date());//派发时间 // taskWrk.setWrkSts(12);//工作状态 12.吊车入库中 // taskWrk.setCrnNo(staDesc.getCrnNo());//堆垛机号 // taskWrk.setModiTime(new Date()); // taskWrk.setModiUser(userId); // updateById(taskWrk); // // CrnSlave.CrnStn crnStn = Utils.getCrnStnByStaNo(staDesc.getCrnStn(), false); // if (crnStn == null) { // throw new CoolException("堆垛机出库站不存在"); // } // //生成堆垛机出库命令 // CrnCommand crnCommand = new CrnCommand(); // crnCommand.setCrnNo(taskWrk.getCrnNo()); // 堆垛机编号 // crnCommand.setTaskNo(taskWrk.getWrkNo().shortValue()); // 工作号 // crnCommand.setAckFinish((short) 0); // 任务完成确认位 // crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式: 库位移转 // crnCommand.setSourcePosX(Utils.getBayShort(taskWrk.getStartPoint())); // 源库位排 // crnCommand.setSourcePosY(Utils.getLevShort(taskWrk.getStartPoint())); // 源库位列 // crnCommand.setSourcePosZ(Utils.getRowShort(taskWrk.getStartPoint())); // 源库位层 // 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))) { // 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))) { // log.error("输送线命令生成失败,堆垛机号={},任务数据={}", taskWrk.getCrnNo(), JSON.toJSON(crnCommand)); // throw new CoolException("输送线命令生成失败"); // } } @Override public void locMove(TaskWrk taskWrk, Long userId) { // //库格移载任务派发 // if (Cools.isEmpty(taskWrk.getTargetPoint())){ // return; // } // int workNo = commonService.getWorkNo(WorkNoType.OTHER.type);//获取工作号 // taskWrk.setWrkNo(workNo);//工作号 // taskWrk.setStatus(TaskStatusType.DISTRIBUTE.id);//派发状态 // taskWrk.setAssignTime(new Date());//派发时间 // taskWrk.setWrkSts(11);//工作状态 11.生成出库ID // //taskWrk.setCrnNo(staDesc.getCrnNo());//堆垛机号 // taskWrk.setModiTime(new Date()); // taskWrk.setModiUser(userId); // updateById(taskWrk); } @Override public List selectToBeHistoryData() { return this.baseMapper.selectToBeHistoryData(); } @Override public int saveToHistory(String taskNo) { return this.baseMapper.saveToHistory(taskNo); } @Override public int getStoreCount(Integer crnNo){ return selectCount(new EntityWrapper().eq("crn_no", crnNo).in("wrk_sts",12,2)); } @Override public TaskWrk selectStaWorking(Integer wrkNo){ return this.baseMapper.selectStaWorking(wrkNo); } }