|  |  | 
 |  |  | package com.zy.asrs.controller; | 
 |  |  |  | 
 |  |  | import com.alibaba.fastjson.JSON; | 
 |  |  | import com.alibaba.fastjson.JSONObject; | 
 |  |  | 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.TaskOverParam; | 
 |  |  | import com.zy.asrs.entity.param.WMSAndAGVInterfaceParam; | 
 |  |  | import com.zy.asrs.entity.param.taskCreateParam; | 
 |  |  | import com.zy.asrs.entity.param.*; | 
 |  |  | import com.zy.asrs.service.*; | 
 |  |  | import com.zy.common.utils.HttpHandler; | 
 |  |  | 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 javax.servlet.http.HttpServletRequest; | 
 |  |  | import java.io.IOException; | 
 |  |  | import java.util.ArrayList; | 
 |  |  | import java.util.HashMap; | 
 |  |  | import java.util.List; | 
 |  |  | import java.util.Map; | 
 |  |  | import java.util.*; | 
 |  |  |  | 
 |  |  | @Slf4j | 
 |  |  | @RestController | 
 |  |  | @RequestMapping("/open") | 
 |  |  | public class OpenController extends BaseController { | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private SlaveProperties slaveProperties; | 
 |  |  |     @Autowired | 
 |  |  |     private OpenService openService; | 
 |  |  |     @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; | 
 |  |  | 
 |  |  |     public static final ArrayList<String> APP_KEY_LIST = new ArrayList<String>() {{ | 
 |  |  |         add("ea1f0459efc02a79f046f982767939ae"); | 
 |  |  |     }}; | 
 |  |  |     @Autowired | 
 |  |  |     private TaskWrkLogServiceImpl taskWrkLogService; | 
 |  |  |  | 
 |  |  |     //agv任务完成 | 
 |  |  |     @PostMapping("/toAgvTaskOver") | 
 |  |  |     @AppAuth(memo = "agv任务完成接口") | 
 |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     //创建任务 | 
 |  |  |     @PostMapping("/taskCreate") | 
 |  |  |     public R taskCreate(@RequestHeader String appkey, | 
 |  |  |                           @RequestBody taskCreateParam param, | 
 |  |  |     @PostMapping("/taskCreate2") | 
 |  |  |     @AppAuth(memo = "WMS任务下发") | 
 |  |  |     @Transactional | 
 |  |  |     public synchronized R taskCreate(@RequestHeader String appkey, | 
 |  |  |                           @RequestBody List<TaskCreateParam> param1, | 
 |  |  |                           HttpServletRequest request) { | 
 |  |  |         auth(appkey, param, request); | 
 |  |  |         if (Cools.isEmpty(param)) { | 
 |  |  |             return R.parse(BaseRes.PARAM); | 
 |  |  |         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(); | 
 |  |  |         } | 
 |  |  |         if (Cools.isEmpty(param.getTaskNo())) { | 
 |  |  |             return R.error("任务号[taskNo]不能为空"); | 
 |  |  |         } | 
 |  |  |         if (Cools.isEmpty(param.getIoType())) { | 
 |  |  |             return R.error("任务类型[ioType]不能为空"); | 
 |  |  |         } | 
 |  |  |         if (Cools.isEmpty(param.getBarcode())) { | 
 |  |  |             return R.error("条码[barcode]不能为空"); | 
 |  |  |         } | 
 |  |  |         openService.taskCreate(param); | 
 |  |  |         return R.ok(); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | 
 |  |  |         } | 
 |  |  |         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") | 
 |  |  | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         Map<String,Integer> map = new HashMap<>(); | 
 |  |  |         map.put("J-1101",102);map.put("J-1102",101); | 
 |  |  |         map.put("J-1103",106);map.put("J-1104",105); | 
 |  |  |         map.put("J-1105",110);map.put("J-1106",109); | 
 |  |  |         map.put("J-1107",114);map.put("J-1108",113); | 
 |  |  |         map.put("J-1109",118);map.put("J-1110",117); | 
 |  |  |         map.put("J-1111",122);map.put("J-1112",121); | 
 |  |  |  | 
 |  |  |         StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>().eq("stn_desc", param.getWharfCode())); | 
 |  |  |  | 
 |  |  |         if (Cools.isEmpty(staDesc)){ | 
 |  |  |             return R.error("程序报错,未查询到站点"); | 
 |  |  |         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())); | 
 |  |  |         if (basDevp.getAutoing().equals("Y")){ | 
 |  |  | //        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 | 
 |  |  | 
 |  |  |                     ,R.ok().toString() | 
 |  |  |                     ,true | 
 |  |  |             ); | 
 |  |  |             return R.ok(); | 
 |  |  |             return R.ok("可入"); | 
 |  |  |         }else { | 
 |  |  |             apiLogService.save("AGV请求入库码头接口" | 
 |  |  |                     ,request.getRemoteAddr()+request.getRequestURI() | 
 |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     //任务下发接口 | 
 |  |  |     @PostMapping("/outboundTaskSend") | 
 |  |  | //    @PostMapping("/outboundTaskSend") | 
 |  |  |     @PostMapping("/taskCreate") | 
 |  |  |     @AppAuth(memo = "任务下发接口") | 
 |  |  |     @Transactional | 
 |  |  |     public R outboundTaskSend(@RequestHeader String appkey, | 
 |  |  |                               @RequestBody List<WMSAndAGVInterfaceParam> params, | 
 |  |  |                               @RequestBody List<CarryParam> params,//中航下发  1:出库,2:移库 3:入库 | 
 |  |  |                               HttpServletRequest request) { | 
 |  |  |         auth(appkey, params, request); | 
 |  |  |         List<WMSAndAGVInterfaceParam> params1 =new ArrayList<>(); | 
 |  |  |         for (WMSAndAGVInterfaceParam param:params){ | 
 |  |  |             try { | 
 |  |  |                 if (Cools.isEmpty(param)){ | 
 |  |  |                     return R.error("参数为空!"); | 
 |  |  |                 } else if (Cools.isEmpty(param.getTaskNo())){ | 
 |  |  |                     return R.error("任务号为空!"); | 
 |  |  |                 } else if (Cools.isEmpty(param.getTaskType())){ | 
 |  |  |                     return R.error("任务类型为空!"); | 
 |  |  |                 } else if (Cools.isEmpty(param.getWarehouseId())){ | 
 |  |  |                     return R.error("仓库标识为空!"); | 
 |  |  |                 } | 
 |  |  |                 if (Cools.isEmpty(param.getTaskPriority())){ | 
 |  |  |                     param.setTaskPriority(1); | 
 |  |  |                 } | 
 |  |  |                 if (Cools.isEmpty(param.getContainerCode())){ | 
 |  |  |                     return R.error("容器编码(托盘码)为空!"); | 
 |  |  |                 } | 
 |  |  |                 if (Cools.isEmpty(param.getEmptyContainer())){ | 
 |  |  |                     return R.error("是否空托盘信号为空!"); | 
 |  |  |                 } | 
 |  |  | //        if (Cools.isEmpty(param.getTaskTunnel())){ | 
 |  |  | //            return R.error("任务巷道为空!"); | 
 |  |  | //        } | 
 |  |  | //        if (Cools.isEmpty(param.getGroupNo())){ | 
 |  |  | //            return R.error("任务组为空!"); | 
 |  |  | //        } | 
 |  |  | //        if (Cools.isEmpty(param.getTaskSerialNo())){ | 
 |  |  | //            return R.error("任务执行顺序为空!"); | 
 |  |  | //        } | 
 |  |  |                 if (Cools.isEmpty(param.getTargetWharf())){ | 
 |  |  |                     return R.error("目标码头区域为空!");//G开头=7车间,H开头=8层,J开头=9车间 | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 openService.taskCreate(new taskCreateParam(param)); | 
 |  |  |  | 
 |  |  |                 params1.add(param); | 
 |  |  | //                return R.ok(param); | 
 |  |  |             }catch (Exception e){ | 
 |  |  |                 String errorMsg = Cools.isEmpty(e.getLocalizedMessage()) ? "" : e.getLocalizedMessage(); | 
 |  |  |                 return R.error("生成任务失败,请联系管理员!"+ errorMsg); | 
 |  |  |             } | 
 |  |  |         try{ | 
 |  |  |             DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); | 
 |  |  |             deviceErrorService.addDeviceError("wms/taskCreate", 1, "wms任务下发,任务数:"+params.size()); | 
 |  |  |         } catch (Exception e2){ | 
 |  |  | //                    log.error("e2:"+e2.getMessage()); | 
 |  |  |         } | 
 |  |  |         return R.ok(params1); | 
 |  |  |         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, | 
 |  |  |                                @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.getTaskStatus())){ | 
 |  |  |         } else if (Cools.isEmpty(param.getIoType())){ | 
 |  |  |             return R.error("操作类型为空!"); | 
 |  |  |         } else if (Cools.isEmpty(param.getBarcode())){ | 
 |  |  |             return R.error("托盘码不能为空!"); | 
 |  |  |         } | 
 |  |  | //        else if (Cools.isEmpty(param.getWarehouseId())){ | 
 |  |  | //            return R.error("仓库标识为空!"); | 
 |  |  | //        } | 
 |  |  |  | 
 |  |  |         TaskWrk taskWrk = taskWrkService.selectOne(new EntityWrapper<TaskWrk>().eq("task_no", param.getTaskNo())); | 
 |  |  |         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("未查到当前任务"); | 
 |  |  |             return R.error("未查到当前任务---"+param); | 
 |  |  |         } | 
 |  |  |         boolean sign =false; | 
 |  |  |         switch (param.getTaskStatus()){ | 
 |  |  |             case 1://正常取消 | 
 |  |  |                 if (taskWrk.getWrkSts()>1){ | 
 |  |  |                 if (taskWrk.getStatus()>1){ | 
 |  |  |                     return R.error("任务已开始执行"); | 
 |  |  |                 } | 
 |  |  |             case 2://强制取消 | 
 |  |  |                 if (taskWrk.getWrkSts()>3){ | 
 |  |  |                     return R.error("任务已执行完成"); | 
 |  |  |                 } | 
 |  |  |                 break; | 
 |  |  |             case 3://正常完成 | 
 |  |  |                 if (taskWrk.getWrkSts()>11){ | 
 |  |  |             case 2://正常完成 | 
 |  |  |                 if (taskWrk.getStatus()>1){ | 
 |  |  |                     return R.error("任务已开始执行"); | 
 |  |  |                 } | 
 |  |  |             case 4://强制完成 | 
 |  |  |                 if (taskWrk.getWrkSts()>14){ | 
 |  |  |                     return R.error("任务已执行完成"); | 
 |  |  |                 } | 
 |  |  |                 sign=true; | 
 |  |  |                 break; | 
 |  |  | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     //设备状态查询接口 | 
 |  |  |     @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); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  | } |