src/main/java/com/zy/asrs/controller/OpenController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/service/OpenService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/zy/asrs/controller/OpenController.java
@@ -3,12 +3,10 @@ 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.exception.CoolException; import com.fasterxml.jackson.databind.ObjectMapper; import com.zy.asrs.entity.*; import com.zy.asrs.entity.param.*; import com.zy.asrs.service.*; @@ -21,11 +19,8 @@ import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import java.io.IOException; import java.lang.reflect.Field; import java.util.*; import static org.apache.ibatis.ognl.OgnlRuntime.setFieldValue; @Slf4j @RestController @@ -61,25 +56,6 @@ public static final ArrayList<String> APP_KEY_LIST = new ArrayList<String>() {{ add("ea1f0459efc02a79f046f982767939ae"); }}; //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("/taskCreate") @@ -158,44 +134,6 @@ 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, @@ -220,100 +158,6 @@ 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("站点状态不可入"); } } //任务下发接口 @@ -462,52 +306,6 @@ crnStatusParams.add(crnStatusParam); } return R.ok(crnStatusParams); } public static <T> List<T> convertListMapToListObject(List<HashMap<String, Object>> listMap, Class<T> clazz) throws Exception { List<T> list = new ArrayList<>(); for (Map<String, Object> map : listMap) { T obj = clazz.getDeclaredConstructor().newInstance(); for (Map.Entry<String, Object> entry : map.entrySet()) { String key = entry.getKey(); Object value = entry.getValue(); try { Field field = clazz.getDeclaredField(key); field.setAccessible(true); setFieldValue(obj, field, value); } catch (NoSuchFieldException e) { System.out.println("No such field: " + key + " in class " + clazz.getName()); } } list.add(obj); } return list; } private static void setFieldValue(Object obj, Field field, Object value) throws IllegalAccessException { Class<?> fieldType = field.getType(); if (fieldType.isAssignableFrom(value.getClass())) { field.set(obj, value); } else if (fieldType == int.class || fieldType == Integer.class) { field.set(obj, ((Number) value).intValue()); } else if (fieldType == long.class || fieldType == Long.class) { field.set(obj, ((Number) value).longValue()); } else if (fieldType == double.class || fieldType == Double.class) { field.set(obj, ((Number) value).doubleValue()); } else if (fieldType == float.class || fieldType == Float.class) { field.set(obj, ((Number) value).floatValue()); } else if (fieldType == boolean.class || fieldType == Boolean.class) { field.set(obj, (Boolean) value); } else if (fieldType == String.class) { field.set(obj, String.valueOf(value)); } else { System.out.println("Unsupported field type: " + fieldType.getName()); } } } src/main/java/com/zy/asrs/service/OpenService.java
@@ -1,11 +1,6 @@ package com.zy.asrs.service; import com.core.common.R; import com.zy.asrs.entity.param.TaskOverParam; import com.zy.asrs.entity.param.WMSAndAGVInterfaceParam; import com.zy.asrs.entity.param.TaskCreateParam; import java.io.IOException; import java.util.HashMap; public interface OpenService { @@ -13,10 +8,4 @@ //创建任务 HashMap<String,Object> taskCreate(TaskCreateParam param); R AgvToWCSToWms(WMSAndAGVInterfaceParam param) throws IOException; void getAgvTaskOver(TaskOverParam param); R getAgvPickAndPlaceV1(TaskOverParam param); R getAgvPickAndPlaceV2(TaskOverParam param); } src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -1,34 +1,16 @@ package com.zy.asrs.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; import com.core.common.R; import com.core.exception.CoolException; import com.zy.asrs.domain.enums.TaskStatusType; import com.zy.asrs.domain.enums.WorkNoType; 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.service.*; 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.SlaveType; import com.zy.core.model.DevpSlave; import com.zy.core.model.Task; import com.zy.core.model.protocol.StaProtocol; import com.zy.core.properties.SlaveProperties; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.io.IOException; import java.util.*; @Service @@ -37,33 +19,9 @@ @Autowired private TaskWrkService taskWrkService; @Autowired private SlaveProperties slaveProperties; @Autowired private ApiLogService apiLogService; @Autowired private StaDescService staDescService; @Autowired private CommonService commonService; @Autowired private LocMastService locMastService; @Autowired private BasDevpService basDevpService; @Value("${wms.url}") private String wmsUrl; public ArrayList<String> wharfCode1 = new ArrayList<String>() {{ add("J-1101"); add("J-1103"); add("J-1105"); add("J-1107"); add("J-1109"); add("J-1111"); add("H-1101"); add("G-1101"); }}; @Override public HashMap<String, Object> taskCreate(TaskCreateParam param) { @@ -131,249 +89,5 @@ map.put("Msg","ok"); return map; } @Override public R AgvToWCSToWms(WMSAndAGVInterfaceParam param) throws IOException { ToWmsDTO toWmsDTO = new ToWmsDTO(); Map<String, Object> map = new HashMap<>(); map.put("x-api-key", "7a15b5db-29b6-552c-8cff-0cfec3756da2"); List<Integer> list = new ArrayList<>(); if (param.getWharfSource().contains("J")) { list = getInEnableRoadway(); } else { list = getInEnableRoadway2(); } //TaskWrk taskWrk = taskWrkService.selectByTaskNo(param.getTaskNo()); toWmsDTO.setWarehouseId("1688469798893297665"); toWmsDTO.setContainerCode(param.getContainerCode()); toWmsDTO.setApplyType("TUNNEL"); toWmsDTO.setWharfSource(null); toWmsDTO.setCanInboundTunnels(list); String response = null; try { response = new HttpHandler.Builder() .setHeaders(map) .setUri(wmsUrl) .setPath("wcsManager/wcsInterface/inboundTaskApply") .setJson(JSON.toJSONString(toWmsDTO)) .build() .doPost(); } catch (Exception e) { return R.error("wms连接失败" + e.getMessage()); } JSONObject jsonObject = JSON.parseObject(response); apiLogService.save("wms请求入库码头接口" , wmsUrl + "wcsManager/wcsInterface/inboundTaskApply" , null , "127.0.0.1" , JSON.toJSONString(toWmsDTO) , response , true ); if (jsonObject.getInteger("code").equals(200)) { //解析 List<WMSAndAGVInterfaceParam> params = new ArrayList<>(); params.add(param); WMSAndAGVInterfaceParam data = JSONObject.parseObject(jsonObject.get("data").toString(), WMSAndAGVInterfaceParam.class); String msg = null; try { taskCreate(new TaskCreateParam(data)); } catch (Exception e) { msg = e.getMessage(); } if (msg != null) { return R.error(msg); } Map<String, String> map1 = new HashMap<>(); StaDesc staDesc = new StaDesc(); if (param.getWharfSource().contains("J")) { staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>() .eq("crn_no", data.getTaskTunnel()) .eq("type_no", 1) .lt("stn_no", 200)); } else if (param.getWharfSource().contains("H")) { staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>() .eq("crn_no", data.getTaskTunnel()) .eq("type_no", 1) .lt("stn_no", 400) .gt("stn_no", 200)); } else { staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>() .eq("crn_no", data.getTaskTunnel()) .eq("type_no", 1) .lt("stn_no", 500) .ge("stn_no", 400)); } map1.put("taskTunnel", staDesc.getStnDesc()); //map1.put("taskTunnel", "J-1104"); return R.ok(map1); } return R.error((String) jsonObject.get("msg")); } @Override public void getAgvTaskOver(TaskOverParam param) { // 根据输送线plc遍历 for (DevpSlave devp : slaveProperties.getDevp()) { StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>() .eq("stn_desc", param.getWharfCode())); if (Cools.isEmpty(staDesc)) { throw new RuntimeException("未查询到站点信息"); } // 获取入库站信息 DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); StaProtocol staProtocol = devpThread.getStation().get(staDesc.getStnNo()); if (staProtocol == null) { continue; } else { staProtocol = staProtocol.clone(); } Short workNo = staProtocol.getWorkNo(); if (wharfCode1.contains(param.getWharfCode())) { if (!staProtocol.isLoading() && !staProtocol.isCar() && staProtocol.getWorkNo() > 0) { //AGV出库完成以后 staProtocol.setWorkNo((short) 0); staProtocol.setStaNo((short) 0); boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, staProtocol)); if (result) { } else { throw new RuntimeException("agv返回完成后,命令下发失败"); } } } else { for (DevpSlave.Sta inSta : devp.getInSta()) { if (inSta.getBackSta().equals(staDesc.getStnNo())) { if (staProtocol.isLoading() && !staProtocol.isCar() && workNo == 0) { //AGV入库完成以后 staProtocol.setWorkNo((short) 9999); staProtocol.setStaNo(inSta.getStaNo().shortValue()); boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, staProtocol)); if (result) { } else { throw new RuntimeException("agv返回完成后,命令下发失败"); } } } } } } } @Override public R getAgvPickAndPlaceV1(TaskOverParam param) { BasDevp basDevp = basDevpService.selectById(param.getStaNo()); if (Cools.isEmpty(basDevp)) { return R.error("站点号有误" + param.getStaNo()); } if (param.getType() == 0 && basDevp.getAgvStartPick() == 1) { return R.ok(); } else if (param.getType() == 1 && basDevp.getAgvStartPlace() == 1) { return R.ok(); } else { return R.error("不允许"); } } @Override public R getAgvPickAndPlaceV2(TaskOverParam param) { BasDevp basDevp = basDevpService.selectById(param.getStaNo()); if (Cools.isEmpty(basDevp)) { return R.error("站点号有误" + param.getStaNo()); } if (param.getType() == 0) { basDevp.setAgvTargetPick(1); basDevpService.updateById(basDevp); return R.ok(); } else if (param.getType() == 1) { basDevp.setAgvTargetPlace(1); basDevpService.updateById(basDevp); return R.ok(); } else { return R.error("请求类型异常" + param.getType()); } } public List<Integer> getInEnableRoadway() { int[] roadway = null; List<Integer> list = new ArrayList<>(); Map<Integer, Integer> map = new HashMap<>(); map.put(103, 1); map.put(107, 2); map.put(111, 3); map.put(115, 4); map.put(119, 5); map.put(123, 6); //put(301,7); // 根据输送线plc遍历 for (DevpSlave devp : slaveProperties.getDevp()) { // 遍历入库口 for (DevpSlave.Sta inSta : devp.getInSta()) { // 获取入库站信息 DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); StaProtocol staProtocol = devpThread.getStation().get(inSta.getBackSta()); if (staProtocol == null) { continue; } else { staProtocol = staProtocol.clone(); } Short workNo = staProtocol.getWorkNo(); if (workNo == 0 && !staProtocol.isLoading()) { if (Cools.isEmpty(map.get(inSta.getStaNo()))) { continue; } list.add(map.get(inSta.getStaNo())); } } } //roadway = list.stream().mapToInt(Integer::intValue).toArray(); return list; } public List<Integer> getInEnableRoadway2() { int[] roadway = null; List<Integer> list = new ArrayList<>(); Map<Integer, Integer> map = new HashMap<>(); map.put(205, 1); map.put(211, 2); map.put(217, 3); map.put(223, 4); map.put(229, 5); map.put(235, 6); //put(301,7); // 根据输送线plc遍历 for (DevpSlave devp : slaveProperties.getDevp()) { // 遍历入库口 for (DevpSlave.Sta inSta : devp.getInSta()) { // 获取入库站信息 DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); StaProtocol staProtocol = devpThread.getStation().get(inSta.getBackSta()); if (staProtocol == null) { continue; } else { staProtocol = staProtocol.clone(); } Short workNo = staProtocol.getWorkNo(); if (workNo == 0 && !staProtocol.isLoading()) { if (Cools.isEmpty(map.get(inSta.getStaNo()))) { continue; } list.add(map.get(inSta.getStaNo())); } } } //roadway = list.stream().mapToInt(Integer::intValue).toArray(); return list; } }