From 66942458f7753fe4ddee7c5ed3386d61cff28b24 Mon Sep 17 00:00:00 2001 From: 野心家 <1051256694@qq.com> Date: 星期二, 01 四月 2025 13:55:21 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/jxjdzwcs' into jxjdzwcs --- src/main/java/com/zy/asrs/controller/OpenController.java | 299 ++++++++++++++++++++++++++++++++++++++++++----------------- 1 files changed, 210 insertions(+), 89 deletions(-) diff --git a/src/main/java/com/zy/asrs/controller/OpenController.java b/src/main/java/com/zy/asrs/controller/OpenController.java index 57bde1d..9a16f6c 100644 --- a/src/main/java/com/zy/asrs/controller/OpenController.java +++ b/src/main/java/com/zy/asrs/controller/OpenController.java @@ -1,18 +1,18 @@ 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.exception.CoolException; +import com.fasterxml.jackson.databind.ObjectMapper; import com.zy.asrs.entity.*; -import com.zy.asrs.entity.param.CarryParam; -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.asrs.utils.Utils; import com.zy.common.web.BaseController; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -22,7 +22,10 @@ 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 @@ -47,6 +50,8 @@ private StaDescService staDescService; @Autowired private LocMastService locMastService; + @Autowired + private BasCrnErrorService basCrnErrorService; @Value("${wms.url}") private String wmsUrl; @@ -78,32 +83,64 @@ //鍒涘缓浠诲姟 @PostMapping("/taskCreate") + @Transactional public R taskCreate(@RequestHeader String appkey, @RequestBody List<TaskCreateParam> param1, HttpServletRequest request) { auth(appkey, param1, request); - 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]涓嶈兘涓虹┖"); - } - if (Cools.isEmpty(param.getBarcode())) { - return R.error("鏉$爜[barcode]涓嶈兘涓虹┖"); - } - LocMast locMast=locMastService.selectOne(new EntityWrapper<LocMast>() - .eq("loc_sts","F") - .eq("loc_no",param.getTargetPoint()) - .eq("barcode",param.getBarcode())); - if(Cools.isEmpty(locMast)){ - return R.error("璇ュ簱浣嶄笉婊′綇鍑哄簱鏉′欢"+param.getTargetPoint()); - } - openService.taskCreate(param); + 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]涓嶈兘涓虹┖"); + } + 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(); } @@ -119,6 +156,44 @@ 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); } //鏌ヨ浠诲姟鎸囦护闆嗗悎 @@ -244,69 +319,72 @@ //浠诲姟涓嬪彂鎺ュ彛 @PostMapping("/outboundTaskSend") @Transactional - public R outboundTaskSend(@RequestHeader String appkey, - @RequestBody List<CarryParam> params, - HttpServletRequest request) { - //auth(appkey, params, request); + public HashMap<String, Object> outboundTaskSend(@RequestBody HashMap<String,Object> hashMap) { + String jsonString = JSON.toJSONString(hashMap.get("TaskList")); + List<CarryParam> params= JSONObject.parseArray(jsonString,CarryParam.class); + HashMap<String, Object> map = new HashMap<>(); List<WMSAndAGVInterfaceParam> params1 =new ArrayList<>(); for (CarryParam param:params){ - if (Cools.isEmpty(param)){ - return R.error("鍙傛暟涓虹┖锛�"); + map.put("Code","0"); + map.put("Msg","鍙傛暟涓虹┖锛�"); + return map; } else if (Cools.isEmpty(param.getTaskNo())){ - return R.error("浠诲姟鍙蜂负绌猴紒"); - } else if (Cools.isEmpty(param.getIoType())){ - return R.error("浠诲姟绫诲瀷涓虹┖锛�"); + map.put("Code","0"); + map.put("Msg","浠诲姟鍙蜂负绌猴紒"); + return map; + } else if (Cools.isEmpty(param.getStereoscopicTaskType())){ + map.put("Code","0"); + map.put("Msg","浠诲姟绫诲瀷涓虹┖锛�"); + return map; } - if (Cools.isEmpty(param.getStartPoint()) || Cools.isEmpty(param.getTargetPoint())){ - return R.error("鍒濆鐩爣鎴栬�呯洰鏍囦綅涓虹┖"); - } -// 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杞﹂棿锛孒寮�澶�=8灞傦紝J寮�澶�=9杞﹂棿 -// } -// } - + String fusion = Utils.Fusion(param.getOriginalRowNo(), param.getOriginalFloorNo(), param.getOriginalColumnNo()); + param.setStartPoint(fusion); LocMast locMast = locMastService.selectByLocNo(param.getStartPoint()); if(Cools.isEmpty(locMast)){ - return R.error("鍒濆搴撲綅鏃犳硶鎵惧埌"); + map.put("Code","0"); + map.put("Msg","鍒濆搴撲綅鏃犳硶鎵惧埌锛�"); + return map; } - R r = null; + HashMap<String,Object> r = new HashMap<>(); - if(param.getIoType() == 2){ + if(param.getStereoscopicTaskType() == 2){ //鍑哄簱浠诲姟鍒涘缓 StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>() .eq("type_no",2) .eq("crn_no",locMast.getCrnNo()) - .eq("stn_no",param.getTargetPoint())); + .eq("stn_no",param.getTerminalNo())); if(Cools.isEmpty(staDesc)){ - return R.error("鍑哄簱璺姴涓嶅瓨鍦�"); + map.put("Code","0"); + map.put("Msg","鍑哄簱璺姴涓嶅瓨鍦紒"); + return map; } r = openService.taskCreate(new TaskCreateParam(param,staDesc.getCrnNo())); - }else if (param.getIoType() == 3){ + if(r.get("Code").equals("0")){ + return r; + } + }else if (param.getStereoscopicTaskType() == 3){ + String fusion1 = Utils.Fusion(param.getGoalRowNo(), param.getGoalFloorNo(), param.getGoalColumnNo()); + param.setTerminalNo(fusion1); //绉诲簱浠诲姟鍒涘缓 r = openService.taskCreate(new TaskCreateParam(param,locMast.getCrnNo())); + if(r.get("Code").equals("0")){ + return r; + } } - apiLogService.save("Wms浠诲姟涓嬪彂鎺ュ彛" ,request.getRemoteAddr()+request.getRequestURI() - ,appkey + ,"" ,request.getRemoteAddr() ,JSON.toJSONString(param) ,r.toString() ,true ); - } - - return R.ok(); + map.put("Code","1"); + map.put("Msg","ok"); + return map; } //浠诲姟鍙栨秷鎺ュ彛 @@ -319,35 +397,29 @@ 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://姝e父鍙栨秷 - if (taskWrk.getWrkSts()>1){ + if (taskWrk.getStatus()>1){ return R.error("浠诲姟宸插紑濮嬫墽琛�"); - } - case 2://寮哄埗鍙栨秷 - if (taskWrk.getWrkSts()>3){ - return R.error("浠诲姟宸叉墽琛屽畬鎴�"); } break; - case 3://姝e父瀹屾垚 - if (taskWrk.getWrkSts()>11){ + case 2://姝e父瀹屾垚 + if (taskWrk.getStatus()>1){ return R.error("浠诲姟宸插紑濮嬫墽琛�"); - } - case 4://寮哄埗瀹屾垚 - if (taskWrk.getWrkSts()>14){ - return R.error("浠诲姟宸叉墽琛屽畬鎴�"); } sign=true; break; @@ -371,22 +443,71 @@ } //璁惧鐘舵�佹煡璇㈡帴鍙� - @PostMapping("/deviceStatus") + @GetMapping("/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<>(); - for (BasDevp basDevp:basDevps){ - list.add(basDevp); - } + public R deviceStatus() { + List<CrnStatusParam> crnStatusParams=new ArrayList<>(); List<BasCrnp> basCrnps = basCrnpService.selectList(new EntityWrapper<>()); for (BasCrnp basCrnp:basCrnps){ - list.add(basCrnp); + CrnStatusParam crnStatusParam=new CrnStatusParam(); + crnStatusParam.setCrnNo(basCrnp.getCrnNo()); + crnStatusParam.setCrnSts(basCrnp.getCrnSts()); + crnStatusParam.setErrorCode(basCrnp.getCrnErr()); + BasCrnError error=basCrnErrorService.selectOne(new EntityWrapper<BasCrnError>().eq("error_code",basCrnp.getCrnErr())); + if(Cools.isEmpty(error)){ + crnStatusParam.setErrorMsg(""); + }else { + crnStatusParam.setErrorMsg(error.getErrName()); + } + crnStatusParams.add(crnStatusParam); } - return R.ok(list); + 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()); + } + } } -- Gitblit v1.9.1