| package com.zy.asrs.controller; | 
|   | 
| import com.alibaba.fastjson.JSON; | 
| import com.baomidou.mybatisplus.mapper.EntityWrapper; | 
| import com.core.annotations.AppAuth; | 
| import com.core.common.BaseRes; | 
| import com.core.common.Cools; | 
| import com.core.common.R; | 
| import com.core.common.SpringUtils; | 
| import com.core.exception.CoolException; | 
| import com.zy.asrs.entity.*; | 
| import com.zy.asrs.entity.param.*; | 
| import com.zy.asrs.service.*; | 
| import com.zy.asrs.service.impl.BasCrnErrorServiceImpl; | 
| import com.zy.asrs.service.impl.TaskWrkLogServiceImpl; | 
| import com.zy.asrs.utils.Utils; | 
| import com.zy.common.web.BaseController; | 
| import com.zy.core.CrnThread; | 
| import com.zy.core.cache.RgvStatusCache; | 
| import com.zy.core.cache.SlaveConnection; | 
| import com.zy.core.enums.SlaveType; | 
| import com.zy.core.model.CrnSlave; | 
| import com.zy.core.model.RgvSlave; | 
| import com.zy.core.model.protocol.CrnProtocol; | 
| import com.zy.core.model.protocol.RgvProtocol; | 
| import com.zy.core.properties.SlaveProperties; | 
| import lombok.extern.slf4j.Slf4j; | 
| import org.springframework.beans.factory.annotation.Autowired; | 
| import org.springframework.beans.factory.annotation.Value; | 
| import org.springframework.transaction.annotation.Transactional; | 
| import org.springframework.web.bind.annotation.*; | 
|   | 
| import javax.servlet.http.HttpServletRequest; | 
| import java.io.IOException; | 
| import java.util.*; | 
|   | 
| @Slf4j | 
| @RestController | 
| @RequestMapping("/open") | 
| public class OpenController extends BaseController { | 
|   | 
|     @Autowired | 
|     private SlaveProperties slaveProperties; | 
|     @Autowired | 
|     private OpenService openService; | 
|     @Autowired | 
|     private TaskWrkService taskWrkService; | 
|     @Autowired | 
|     private CommandInfoService commandInfoService; | 
|     @Autowired | 
|     private TaskWrkController taskWrkController; | 
|     @Autowired | 
|     private BasDevpService basDevpService; | 
|     @Autowired | 
|     private ApiLogService apiLogService; | 
|     @Autowired | 
|     private BasCrnpService basCrnpService; | 
|     @Autowired | 
|     private StaDescService staDescService; | 
|     @Autowired | 
|     private LocMastService locMastService; | 
|     @Autowired | 
|     private BasRgvErrService basRgvErrService; | 
|     @Autowired | 
|     private BasCrnErrorServiceImpl basCrnErrorService; | 
|   | 
|     @Value("${wms.url}") | 
|     private String wmsUrl; | 
|   | 
|     private static final boolean auth = true; | 
|   | 
|     public static final ArrayList<String> APP_KEY_LIST = new ArrayList<String>() {{ | 
|         add("ea1f0459efc02a79f046f982767939ae"); | 
|     }}; | 
|     @Autowired | 
|     private TaskWrkLogServiceImpl taskWrkLogService; | 
|   | 
|     //agv任务完成 | 
|     @PostMapping("/toAgvTaskOver") | 
|     @AppAuth(memo = "agv任务完成接口") | 
|     public R getAgvTaskOver(@RequestHeader String appkey, | 
|                            @RequestBody TaskOverParam param, | 
|                            HttpServletRequest request){ | 
|         auth(appkey, param, request); | 
|         if (Cools.isEmpty(param)) { | 
|             return R.parse(BaseRes.PARAM); | 
|         } | 
|         if (Cools.isEmpty(param.getWharfCode())){ | 
|             return R.error("码头[wharfCode]不能为空"); | 
|         } | 
|         if (Cools.isEmpty(param.getStatus())){ | 
|             return R.error("完成标记[status]不能为空"); | 
|         } | 
|         openService.getAgvTaskOver(param); | 
|         return R.ok(); | 
|     } | 
|   | 
|     //创建任务 | 
|     @PostMapping("/taskCreate2") | 
|     @AppAuth(memo = "WMS任务下发") | 
|     @Transactional | 
|     public synchronized R taskCreate(@RequestHeader String appkey, | 
|                           @RequestBody List<TaskCreateParam> param1, | 
|                           HttpServletRequest request) { | 
|         auth(appkey, param1, request); | 
|         try{ | 
|             List<TaskCreateParam> paramList = new ArrayList<>(); | 
|             List<String> locNoList = new ArrayList<>(); | 
|             for (TaskCreateParam param : param1) { | 
|                 if (Cools.isEmpty(param)) { | 
|                     return R.parse(BaseRes.PARAM); | 
|                 } | 
|   | 
|                 if (Cools.isEmpty(param.getTaskNo())) { | 
|                     return R.error("任务号[taskNo]不能为空"); | 
|                 } | 
|                 if (Cools.isEmpty(param.getIoType())) { | 
|                     return R.error("任务类型[ioType]不能为空"); | 
|                 } | 
|                 param.updateIoTyoe(param.getIoType());//中航下发  1:出库,2:移库 3:入库   ====转换为====>  1:入库,2:出库,3:移库 | 
|   | 
|                 if (Cools.isEmpty(param.getBarcode())) { | 
|                     return R.error("条码[barcode]不能为空"); | 
|                 } | 
|   | 
|                 String locNo=null; | 
|                 if(param.getIoType()==1){ | 
|                     locNo=param.getTargetPoint(); | 
|                 }else{ | 
|                     locNo=param.getStartPoint(); | 
|                 } | 
|                 try{ | 
|                     LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>() | 
|                             .eq("loc_no", locNo).ne("loc_sts","X")); | 
|                     if (Cools.isEmpty(locMast)){ | 
|                         log.error("库位号不存在"+locNo); | 
|                         return R.error("库位号不存在"+locNo).add("库位号不存在"+locNo); | 
|                     } | 
|                 }catch (Exception e){ | 
|                     log.error("库位号检测程序异常==》异常信息"+e); | 
|                     return R.error("库位号检测程序异常").add("库位号检测程序异常==》异常信息"+e); | 
|                 } | 
|                 LocMast locMast=locMastService.selectOne(new EntityWrapper<LocMast>() | 
|                         .eq("loc_sts","F") | 
|                         .eq("loc_no",locNo) | 
|                         .eq("barcode",param.getBarcode())); | 
|                 if(Cools.isEmpty(locMast)){ | 
|                     return R.error("该库位不满足出库条件"+param.getTargetPoint()); | 
|                 } | 
|                 if (!locNoList.contains(locMast.getLocNo())){ | 
|                     locNoList.add(locMast.getLocNo()); | 
|                     paramList.add(param); | 
|                 }else { | 
|                     return R.error("该库位不能同时下发两笔任务"+locMast.getLocNo()); | 
|                 } | 
|             } | 
|             for (TaskCreateParam param : paramList){ | 
|                 openService.taskCreate(param); | 
|             } | 
|         }catch (Exception e){ | 
|             log.error("任务下发异常"+e); | 
|             return R.error(); | 
|         } | 
|         return R.ok(); | 
|     } | 
|   | 
|     //查询任务详情 | 
|     @GetMapping("/queryTask") | 
|     public R queryTask(@RequestHeader String appkey, | 
|                        @RequestParam String taskNo, | 
|                        HttpServletRequest request) { | 
|         auth(appkey, taskNo, request); | 
|         TaskWrk taskWrk = taskWrkService.selectByTaskNo(taskNo); | 
|         if (taskWrk == null) { | 
|             return R.error("任务不存在"); | 
|         } | 
|         return R.ok().add(taskWrk); | 
|     } | 
|   | 
| //    //取放货申请 | 
| //    @PostMapping("/pick/and/place/v1") | 
| //    @AppAuth(memo = "agv取放货申请") | 
| //    public R getAgvPickAndPlaceV1(@RequestHeader String appkey, | 
| //                            @RequestBody TaskOverParam param, | 
| //                            HttpServletRequest request){ | 
| //        auth(appkey, param, request); | 
| //        if (Cools.isEmpty(param)) { | 
| //            return R.parse(BaseRes.PARAM); | 
| //        } | 
| //        if (Cools.isEmpty(param.getStaNo())){ | 
| //            return R.error("码头[staNo]不能为空"); | 
| //        } | 
| //        if (Cools.isEmpty(param.getType())){ | 
| //            return R.error("类型[type]不能为空"); | 
| //        } | 
| //        return openService.getAgvPickAndPlaceV1(param); | 
| //    } | 
|   | 
| //    //取放货完成反馈 | 
| //    @PostMapping("/pick/and/place/v2") | 
| //    @AppAuth(memo = "agv取放货完成反馈") | 
| //    public R getAgvPickAndPlaceV2(@RequestHeader String appkey, | 
| //                                  @RequestBody TaskOverParam param, | 
| //                                  HttpServletRequest request){ | 
| //        auth(appkey, param, request); | 
| //        if (Cools.isEmpty(param)) { | 
| //            return R.parse(BaseRes.PARAM); | 
| //        } | 
| //        if (Cools.isEmpty(param.getStaNo())){ | 
| //            return R.error("码头[staNo]不能为空"); | 
| //        } | 
| //        if (Cools.isEmpty(param.getType())){ | 
| //            return R.error("类型[type]不能为空"); | 
| //        } | 
| //        return openService.getAgvPickAndPlaceV2(param); | 
| //    } | 
|   | 
|     //查询任务指令集合 | 
|     @GetMapping("/queryTaskCommand") | 
|     public R queryTaskCommand(@RequestHeader String appkey, | 
|                               @RequestParam String taskNo, | 
|                               HttpServletRequest request) { | 
|         auth(appkey, taskNo, request); | 
|         TaskWrk taskWrk = taskWrkService.selectByTaskNo(taskNo); | 
|         if (taskWrk == null) { | 
|             return R.error("任务不存在"); | 
|         } | 
|   | 
|         List<CommandInfo> commandInfos = commandInfoService.selectByTaskNo(taskNo); | 
|         return R.ok().add(commandInfos); | 
|     } | 
|   | 
|     private void auth(String appkey, Object obj, HttpServletRequest request) { | 
|         log.info("{}接口被访问;appkey:{};请求数据:{}", request.getServletPath(), appkey, JSON.toJSONString(obj)); | 
|         request.setAttribute("cache", obj); | 
|         if (Cools.isEmpty(appkey)) { | 
|             throw new CoolException("认证失败,请确认appkey无误!"); | 
|         } | 
|         if (!APP_KEY_LIST.contains(appkey)) { | 
|             throw new CoolException("认证失败,请确认appkey无误!"); | 
|         } | 
|     } | 
|   | 
|     //AGV请求入库码头接口 | 
|     @PostMapping("/targetWharfApply") | 
|     @AppAuth(memo = "AGV请求入库码头接口") | 
|     public R targetWharfApply(@RequestHeader String appkey, | 
|                               @RequestBody WMSAndAGVInterfaceParam param, | 
|                               HttpServletRequest request) throws IOException { | 
|         auth(appkey,param,request); | 
|   | 
|         if (Cools.isEmpty(param)){ | 
|             return R.error("参数为空!"); | 
|         } else if (Cools.isEmpty(param.getTaskNo())){ | 
|             return R.error("工作号为空!"); | 
|         } else if (Cools.isEmpty(param.getContainerCode())){ | 
|             return R.error("托盘编码为空!"); | 
|         } else if (Cools.isEmpty(param.getWharfSource())){ | 
|             return R.error("源码头为空!"); | 
|         } else if (Cools.isEmpty(param.getFreeWharfs()) || param.getFreeWharfs().size()==0){ | 
|             return R.error("空闲的入库码头(AGV)为空!"); | 
|         } | 
|         R r = openService.AgvToWCSToWms(param); | 
|         apiLogService.save("AGV请求入库码头接口" | 
|                 ,request.getRemoteAddr()+request.getRequestURI() | 
|                 ,appkey | 
|                 ,request.getRemoteAddr() | 
|                 ,JSON.toJSONString(param) | 
|                 ,r.toString() | 
|                 ,true | 
|         ); | 
|         return r; | 
|     } | 
|   | 
|     //AGV请求动作接口 | 
|     @PostMapping("/agvTaskRequest") | 
|     @AppAuth(memo = "AGV请求动作接口") | 
|     public R agvTaskRequest(@RequestHeader String appkey, | 
|                               @RequestBody WMSAndAGVInterfaceParam param, | 
|                               HttpServletRequest request) { | 
|         auth(appkey, param, request); | 
|         if (Cools.isEmpty(param)){ | 
|             return R.error("参数为空!"); | 
|         } else if (Cools.isEmpty(param.getRequestType())){ | 
|             return R.error("请求类型为空!"); | 
|         } else if (Cools.isEmpty(param.getWharfCode())){ | 
|             return R.error("码头编号为空!"); | 
|         } | 
|   | 
|         Map<String,Integer> map = new HashMap<>(); | 
|         map.put("J-1102",102);map.put("J-1101",101); | 
|         map.put("J-1103",105);map.put("J-1104",106); | 
|         map.put("J-1105",109);map.put("J-1106",110); | 
|         map.put("J-1107",113);map.put("J-1108",114); | 
|         map.put("J-1109",117);map.put("J-1110",118); | 
|         map.put("J-1111",121);map.put("J-1112",122); | 
|         map.put("H-1102",300);map.put("H-1101",305); | 
|         map.put("G-1102",400);map.put("G-1101",405); | 
| //        StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>() | 
| //                .eq("stn_desc", param.getWharfCode())); | 
| // | 
| //        if (Cools.isEmpty(staDesc)){ | 
| //            return R.error("程序报错,未查询到站点"); | 
| //        } | 
|         if (Cools.isEmpty(map.get(param.getWharfCode()))){ | 
|             return R.error("未查询到站点"); | 
|         } | 
|         BasDevp basDevp = basDevpService.selectById(map.get(param.getWharfCode())); | 
| //        BasDevp basDevp = basDevpService.selectById(staDesc.getStnNo()); | 
|         if (basDevp.getAutoing().equals("Y") && (basDevp.getInEnable().equals("Y") || basDevp.getOutEnable().equals("Y"))){ | 
|             apiLogService.save("AGV请求入库码头接口" | 
|                     ,request.getRemoteAddr()+request.getRequestURI() | 
|                     ,appkey | 
|                     ,request.getRemoteAddr() | 
|                     ,JSON.toJSONString(param) | 
|                     ,R.ok().toString() | 
|                     ,true | 
|             ); | 
|             return R.ok("可入"); | 
|         }else { | 
|             apiLogService.save("AGV请求入库码头接口" | 
|                     ,request.getRemoteAddr()+request.getRequestURI() | 
|                     ,appkey | 
|                     ,request.getRemoteAddr() | 
|                     ,JSON.toJSONString(param) | 
|                     ,R.error("站点状态不可入").toString() | 
|                     ,true | 
|             ); | 
|             return R.error("站点状态不可入"); | 
|         } | 
|   | 
|   | 
|   | 
|   | 
|   | 
|     } | 
|   | 
|     //任务下发接口 | 
| //    @PostMapping("/outboundTaskSend") | 
|     @PostMapping("/taskCreate") | 
|     @AppAuth(memo = "任务下发接口") | 
|     @Transactional | 
|     public R outboundTaskSend(@RequestHeader String appkey, | 
|                               @RequestBody List<CarryParam> params,//中航下发  1:出库,2:移库 3:入库 | 
|                               HttpServletRequest request) { | 
|   | 
|         try{ | 
|             DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); | 
|             deviceErrorService.addDeviceError("wms/taskCreate", 1, "wms任务下发,任务数:"+params.size()); | 
|         } catch (Exception e2){ | 
| //                    log.error("e2:"+e2.getMessage()); | 
|         } | 
|         auth(appkey, params, request); | 
| //        List<WMSAndAGVInterfaceParam> params1 =new ArrayList<>(); | 
|         for (CarryParam param:params){ | 
|             if (Cools.isEmpty(param)){ | 
|                 try{ | 
|                     DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); | 
|                     deviceErrorService.addDeviceError("wmsErr", 1, "参数为空,param:"+JSON.toJSONString(param)); | 
|                 } catch (Exception e2){ | 
| //                    log.error("e2:"+e2.getMessage()); | 
|                 } | 
|                 return R.error("参数为空!"); | 
|             } else if (Cools.isEmpty(param.getTaskNo())){ | 
|                 try{ | 
|                     DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); | 
|                     deviceErrorService.addDeviceError("wmsErr", 1, "任务号为空,taskNo:"+JSON.toJSONString(param)); | 
|                 } catch (Exception e2){ | 
| //                    log.error("e2:"+e2.getMessage()); | 
|                 } | 
|                 return R.error("任务号为空!"); | 
|             } else if (Cools.isEmpty(param.getIoType())){ | 
|                 try{ | 
|                     DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); | 
|                     deviceErrorService.addDeviceError("wmsErr", 1, "任务类型为空,ioType:"+JSON.toJSONString(param)); | 
|                 } catch (Exception e2){ | 
| //                    log.error("e2:"+e2.getMessage()); | 
|                 } | 
|                 return R.error("任务类型为空!"); | 
|             } | 
|             if (Cools.isEmpty(param.getStartPoint()) || Cools.isEmpty(param.getTargetPoint())){ | 
|                 try{ | 
|                     DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); | 
|                     deviceErrorService.addDeviceError("wmsErr", 1, "初始目标或者目标位为空,Point:"+JSON.toJSONString(param)); | 
|                 } catch (Exception e2){ | 
| //                    log.error("e2:"+e2.getMessage()); | 
|                 } | 
|                 return R.error("初始目标或者目标位为空"); | 
|             } | 
|   | 
|             param.updateIoTyoe(param.getIoType());//中航下发  1:出库,2:移库 3:入库   ====转换为====>  1:入库,2:出库,3:移库 | 
|             param.updateLocNo(); | 
| //            if (Cools.isEmpty(param.getContainerCode())){ | 
| //                return R.error("容器编码(托盘码)为空!"); | 
| //            } | 
| //            if (Cools.isEmpty(param.getEmptyContainer())){ | 
| //                return R.error("是否空托盘信号为空!"); | 
| //            } | 
| //            if (!param.getTaskType().equals("YK")){ | 
| //                if (Cools.isEmpty(param.getTargetWharf())){ | 
| //                    return R.error("目标码头区域为空!");//G开头=7车间,H开头=8层,J开头=9车间 | 
| //                } | 
| //            } | 
|   | 
|   | 
|             String locNo=null; | 
|             if(param.getIoType()==1){ | 
|                 locNo=param.getTargetPoint(); | 
|             }else{ | 
|                 locNo=param.getStartPoint(); | 
|             } | 
|             LocMast locMast = locMastService.selectByLocNo(locNo); | 
|             if(Cools.isEmpty(locMast)){ | 
|                 try{ | 
|                     DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); | 
|                     deviceErrorService.addDeviceError("wmsErr", 1, "初始库位无法找到,locNo:"+JSON.toJSONString(locNo)); | 
|                 } catch (Exception e2){ | 
| //                    log.error("e2:"+e2.getMessage()); | 
|                 } | 
|                 return R.error("初始库位无法找到"); | 
|             } | 
|   | 
|             R r = null; | 
|   | 
|             if(param.getIoType() == 1){ | 
|                 //入库任务创建 | 
|                 StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>() | 
|                         .eq("type_no",1) | 
|                         .eq("crn_no",locMast.getCrnNo()) | 
|                         .eq("stn_no",param.getStartPoint())); | 
|                 if(Cools.isEmpty(staDesc)){ | 
|                     try{ | 
|                         DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); | 
|                         deviceErrorService.addDeviceError("wmsErr", 1, "入库路劲不存在,param:"+JSON.toJSONString(param)); | 
|                     } catch (Exception e2){ | 
| //                    log.error("e2:"+e2.getMessage()); | 
|                     } | 
|                     return R.error("入库路劲不存在"); | 
|                 } | 
|                 r = openService.taskCreate(new TaskCreateParam(param,staDesc.getCrnNo(),staDesc.getCrnStn())); | 
|   | 
|             }else if(param.getIoType() == 2){ | 
|                 //出库任务创建 | 
|                 StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>() | 
|                         .eq("type_no",2) | 
|                         .eq("crn_no",locMast.getCrnNo()) | 
|                         .eq("stn_no",param.getTargetPoint())); | 
|                 if(Cools.isEmpty(staDesc)){ | 
|                     try{ | 
|                         DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); | 
|                         deviceErrorService.addDeviceError("wmsErr", 1, "出库路劲不存在,param:"+JSON.toJSONString(param)); | 
|                     } catch (Exception e2){ | 
| //                    log.error("e2:"+e2.getMessage()); | 
|                     } | 
|                     return R.error("出库路劲不存在"); | 
|                 } | 
|                 r = openService.taskCreate(new TaskCreateParam(param,staDesc.getCrnNo(),staDesc.getStnNo())); | 
|             }else if (param.getIoType() == 3){ | 
|                 LocMast locMast2 = locMastService.selectByLocNo(param.getTargetPoint()); | 
|                 if(Cools.isEmpty(locMast2)){ | 
|                     try{ | 
|                         DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); | 
|                         deviceErrorService.addDeviceError("wmsErr", 1, "目标库位无法找到,locNo:"+JSON.toJSONString(param.getTargetPoint())); | 
|                     } catch (Exception e2){ | 
| //                    log.error("e2:"+e2.getMessage()); | 
|                     } | 
|                     return R.error("目标库位无法找到"); | 
|                 } | 
|                 if (!locMast2.getCrnNo().equals(locMast.getCrnNo())){ | 
|                     try{ | 
|                         DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); | 
|                         deviceErrorService.addDeviceError("wmsErr", 1, "起始库位与目标库位不再同一巷道,param:"+JSON.toJSONString(param)); | 
|                     } catch (Exception e2){ | 
| //                    log.error("e2:"+e2.getMessage()); | 
|                     } | 
|                     return R.error("起始库位与目标库位不再同一巷道"); | 
|                 } | 
|                 //移库任务创建 | 
|                 r = openService.taskCreate(new TaskCreateParam(param,locMast.getCrnNo())); | 
|             } | 
|   | 
|             apiLogService.save("Wms任务下发接口" | 
|                     ,request.getRemoteAddr()+request.getRequestURI() | 
|                     ,appkey | 
|                     ,request.getRemoteAddr() | 
|                     ,JSON.toJSONString(param) | 
|                     ,r.toString() | 
|                     ,true | 
|             ); | 
|   | 
|         } | 
|   | 
|         return R.ok(); | 
|     } | 
|   | 
|     //任务取消接口 | 
|     @PostMapping("/taskCancel") | 
|     public R taskCancel(@RequestHeader String appkey, | 
|                                @RequestBody WMSAndAGVInterfaceParam param,//中航下发  1:出库,2:移库 3:入库    1:取消  2 完成 | 
|                                HttpServletRequest request) { | 
|         auth(appkey, param, request); | 
| //        param.updateTaskStatus(param.getTaskStatus()); | 
|         if (Cools.isEmpty(param)){ | 
|             return R.error("参数为空!"); | 
|         } else if (Cools.isEmpty(param.getTaskNo())){ | 
|             return R.error("工作号为空!"); | 
|         } else if (Cools.isEmpty(param.getIoType())){ | 
|             return R.error("操作类型为空!"); | 
|         } else if (Cools.isEmpty(param.getBarcode())){ | 
|             return R.error("托盘码不能为空!"); | 
|         } | 
|   | 
|         TaskWrk taskWrk = taskWrkService.selectOne(new EntityWrapper<TaskWrk>() | 
|                 .eq("task_no", param.getTaskNo()) | 
|                 .eq("io_type",param.getIoType()) | 
|                 .eq("barcode",param.getBarcode())); | 
|         if (Cools.isEmpty(taskWrk)){ | 
|             return R.error("未查到当前任务---"+param); | 
|         } | 
|         boolean sign =false; | 
|         switch (param.getTaskStatus()){ | 
|             case 1://正常取消 | 
|                 if (taskWrk.getStatus()>1){ | 
|                     return R.error("任务已开始执行"); | 
|                 } | 
|                 break; | 
|             case 2://正常完成 | 
|                 if (taskWrk.getStatus()>1){ | 
|                     return R.error("任务已开始执行"); | 
|                 } | 
|                 sign=true; | 
|                 break; | 
|             default: | 
|                 return R.error("未知操作"); | 
|         } | 
|         return taskWrkOperate(taskWrk,sign); | 
|     } | 
|   | 
|     //任务操作 | 
|     private R taskWrkOperate(TaskWrk taskWrk,boolean sign){ | 
|         try{ | 
|             if (sign){//完成 | 
|                 return taskWrkController.complete(taskWrk.getTaskNo()); | 
|             }else {//取消 | 
|                 return taskWrkController.cancel(taskWrk.getTaskNo()); | 
|             } | 
|         }catch (Exception e){ | 
|             return R.error(); | 
|         } | 
|     } | 
|   | 
|     //设备状态查询接口 | 
|     @PostMapping("/deviceStatus") | 
|     @Transactional | 
|     public R deviceStatus(@RequestHeader String appkey, | 
|                               HttpServletRequest request) { | 
|         auth(appkey, "设备状态查询接口", request); | 
|         List<BasDevp> basDevps = basDevpService.selectList(new EntityWrapper<>()); | 
|         List<Object> list = new ArrayList<>(); | 
|         WcsStatusResponseModel wcsStatusResponseModel = new WcsStatusResponseModel(); | 
|         for (BasDevp basDevp:basDevps){ | 
|             BasDevpWmsParam basDevpWmsParam = new BasDevpWmsParam(); | 
|             basDevpWmsParam.setDevNo(basDevp.getDevNo()); | 
|             basDevpWmsParam.setWrkNo(basDevp.getWrkNo().longValue()); | 
|             basDevpWmsParam.setAutoing(basDevp.getAutoing()); | 
|             basDevpWmsParam.setLoading(basDevp.getLoading()); | 
|             basDevpWmsParam.setInEnable(basDevp.getInEnable()); | 
|             basDevpWmsParam.setOutEnable(basDevp.getOutEnable()); | 
|             basDevpWmsParam.setDevErr(basDevp.getStaErr().longValue()); | 
|             basDevpWmsParam.setDevErrM(basDevpWmsParam.getDevErr$()); | 
| //            list.add(basDevpWmsParam); | 
|             wcsStatusResponseModel.getChainList().add(basDevpWmsParam); | 
|         } | 
|         List<BasCrnpWmsParam> basCrnpWmsParamList = new ArrayList<>(); | 
|         for (CrnSlave crn : slaveProperties.getCrn()) { | 
|             // 获取堆垛机信息 | 
|             CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId()); | 
|             CrnProtocol crnProtocol = crnThread.getCrnProtocol(); | 
|             if (crnProtocol == null) { continue; } | 
|             BasCrnp basCrnp = basCrnpService.selectById(crn.getId()); | 
|             if (basCrnp == null) { | 
|                 log.error("{}号堆垛机尚未在数据库进行维护!", crn.getId()); | 
|                 continue; | 
|             } | 
|             BasCrnpWmsParam basCrnpWmsParam = new BasCrnpWmsParam(); | 
|             basCrnpWmsParam.sync(basCrnp); | 
|   | 
|             basCrnpWmsParam.setCrnNoH(crnProtocol.getLaneNo()); | 
|             basCrnpWmsParam.setCrnSts(crnProtocol.getStatus().intValue()); | 
|   | 
|             try{ | 
|                 BasCrnError basCrnError = basCrnErrorService.selectById(crnProtocol.getAlarm()); | 
|                 basCrnpWmsParam.setCrnErrM(basCrnError.getErrName()); | 
|             } catch (Exception e){ | 
|                 basCrnpWmsParam.setCrnErrM("未知异常"); | 
|             } | 
|             if (crnProtocol.getMode()!=3){ | 
|                 basCrnpWmsParam.setCrnErr(999L); | 
|                 basCrnpWmsParam.setCrnErrM("非自动!!!"); | 
|             } | 
|             basCrnpWmsParamList.add(basCrnpWmsParam); | 
|   | 
| //            list.add(basCrnpWmsParam); | 
|         } | 
|         wcsStatusResponseModel.setPilingCarList(basCrnpWmsParamList); | 
|         for (RgvSlave rgvSlave : slaveProperties.getRgv()) { | 
|             RgvProtocol rgvStatus = RgvStatusCache.getRgvStatus(rgvSlave.getId()); | 
|             if (Cools.isEmpty(rgvStatus)){ | 
|                 continue; | 
|             } | 
|             BasRgvWmsParam basRgvWmsParam = new BasRgvWmsParam(); | 
|             basRgvWmsParam.setWrkNo(rgvStatus.getTaskNo()); | 
|             basRgvWmsParam.setCrnSts(rgvStatus.getStatus().intValue()); | 
|             basRgvWmsParam.setStatusType(rgvStatus.getStatusType().desc); | 
|             basRgvWmsParam.setSteNo(rgvSlave.getId()); | 
|             basRgvWmsParam.setSteErr(rgvStatus.getAlarm().longValue()); | 
|             basRgvWmsParam.setSteErrM(rgvStatus.getAlarmM()); | 
| //            try{ | 
| //                BasRgvErr basRgvErr = basRgvErrService.selectById((long)rgvStatus.getAlarm$()); | 
| // | 
| //                basRgvWmsParam.setSteErrM(basRgvErr.getErrName()); | 
| //            } catch (Exception e){ | 
| //                basRgvWmsParam.setSteErrM("未知异常"); | 
| //            } | 
|             if (rgvStatus.getMode()!=1){ | 
|                 basRgvWmsParam.setSteErr(999L); | 
|                 basRgvWmsParam.setSteErrM("非自动!!!"); | 
|             } | 
| //            list.add(basRgvWmsParam); | 
|             wcsStatusResponseModel.getRgvList().add(basRgvWmsParam); | 
|   | 
|         } | 
| //        List<BasCrnp> basCrnps = basCrnpService.selectList(new EntityWrapper<>()); | 
| //        for (BasCrnp basCrnp:basCrnps){ | 
| //            list.add(basCrnp); | 
| //        } | 
|         return R.ok(wcsStatusResponseModel); | 
|     } | 
|   | 
|     //设备状态查询接口 | 
|     @PostMapping("/taskWrkLogs") | 
|     @Transactional | 
|     public R taskWrkLogs(@RequestHeader String appkey, | 
|                           HttpServletRequest request) { | 
|         List<TaskWrkLog> taskWrkLogs = taskWrkLogService.selectList(new EntityWrapper<>()); | 
|         return R.ok(taskWrkLogs); | 
|     } | 
|   | 
|     //设备状态查询接口 | 
|     @PostMapping("/error") | 
|     @Transactional | 
|     public R errorRgv(@RequestHeader String appkey, | 
|                       HttpServletRequest request) { | 
|         List<TaskWrkLog> taskWrkLogs = taskWrkLogService.selectList(new EntityWrapper<>()); | 
|         return R.ok(taskWrkLogs); | 
|     } | 
|   | 
|     //设备状态查询接口 | 
|     @PostMapping("/wrkNo/wmsTaskNo") | 
|     @Transactional | 
|     public R wrkNoWmsTaskNo(@RequestHeader String appkey, | 
|                       HttpServletRequest request) { | 
|         List<TaskWrkLog> taskWrkLogs = taskWrkLogService.selectList(new EntityWrapper<>()); | 
|         return R.ok(taskWrkLogs); | 
|     } | 
|   | 
|   | 
| } |