| | |
| | | package com.zy.asrs.controller; |
| | | |
| | | import com.alibaba.excel.event.Handler; |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.core.annotations.AppAuth; |
| | | import com.core.common.*; |
| | | import com.core.exception.CoolException; |
| | |
| | | import com.zy.asrs.service.ApiLogService; |
| | | import com.zy.asrs.service.OpenService; |
| | | import com.zy.common.model.DetlDto; |
| | | import com.zy.common.utils.HttpHandler; |
| | | import com.zy.common.web.BaseController; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.scheduling.annotation.Async; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import javax.naming.ldap.HasControls; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.*; |
| | | |
| | | /** |
| | | * Created by vincent on 2022/4/8 |
| | |
| | | @Autowired |
| | | private OpenService openService; |
| | | |
| | | @PostMapping("/order/matSync/default/v2") |
| | | // @AppAuth(memo = "商品信息同步接口") |
| | | public synchronized R syncMatInfoV2(@RequestHeader(required = false) String appkey, |
| | | @RequestBody(required = false) MatSyncParam.MatParam param, |
| | | HttpServletRequest request){ |
| | | |
| | | auth(appkey, param, request); |
| | | if (Cools.isEmpty(param)) { |
| | | return R.parse(BaseRes.PARAM); |
| | | } |
| | | MatSyncParam matSyncParam = new MatSyncParam(); |
| | | List<MatSyncParam.MatParam> objects = new ArrayList<>(); |
| | | objects.add(param); |
| | | matSyncParam.matDetails = objects; |
| | | openService.syncMat(matSyncParam); |
| | | return R.ok(); |
| | | } |
| | | |
| | | @PostMapping("/order/matSync/default/v1") |
| | | // @AppAuth(memo = "商品信息同步接口") |
| | | public synchronized R syncMatInfo(@RequestHeader(required = false) String appkey, |
| | | @RequestBody(required = false) MatSyncParam param, |
| | | HttpServletRequest request){ |
| | | auth(appkey, param, request); |
| | | if (Cools.isEmpty(param)) { |
| | | return R.parse(BaseRes.PARAM); |
| | | } |
| | | openService.syncMat(param); |
| | | return R.ok(); |
| | | } |
| | | // @PostMapping("/order/matSync/default/v1") |
| | | //// @AppAuth(memo = "商品信息同步接口") |
| | | // public synchronized R syncMatInfo(@RequestHeader(required = false) String appkey, |
| | | // @RequestBody(required = false) MatSyncParam param, |
| | | // HttpServletRequest request){ |
| | | // auth(appkey, param, request); |
| | | // if (Cools.isEmpty(param)) { |
| | | // return R.parse(BaseRes.PARAM); |
| | | // } |
| | | // openService.syncMat(param); |
| | | // return R.ok(); |
| | | // } |
| | | |
| | | /****************************************************************************/ |
| | | /********************************* 打包上线 **********************************/ |
| | |
| | | return R.ok(); |
| | | } |
| | | |
| | | /**********************************************************哥斯拉项目对接接口*******************************************************************/ |
| | | |
| | | @PostMapping("/order/matSync/default/v2") |
| | | // @AppAuth(memo = "商品信息同步接口") |
| | | public synchronized R syncMatInfoV2(@RequestBody(required = false) List<MatSyncParam.MatParam> param){ |
| | | |
| | | /** |
| | | * 是否存在后续托盘 |
| | | */ |
| | | @PostMapping("/arm/task/order_sign") |
| | | @AppAuth(memo = "是否存在后续托盘") |
| | | public synchronized R TaskArmWorkOrderSign(@RequestHeader(required = false) String appkey, |
| | | @RequestBody OrderArmEndParam param, |
| | | HttpServletRequest request) { |
| | | auth(appkey, param, request); |
| | | if (Cools.isEmpty(param)) { |
| | | return R.parse(BaseRes.PARAM); |
| | | } |
| | | if (Cools.isEmpty(param.getArm_no())) { |
| | | return R.error("机械臂编号[Arm_no]不能为空"); |
| | | } |
| | | if (Cools.isEmpty(param.getOrder_id())) { |
| | | return R.error("单据编号[order_id]不能为空"); |
| | | } |
| | | try{ |
| | | param.OrderIdTwo(sign_arm_order,sign_arm_sku); |
| | | } catch (Exception e){ |
| | | return R.error("单据编号[order_id]以 "+sign_arm_sku+" 与 "+sign_arm_order+" 作为拆分标记拆分失败!!!"); |
| | | } |
| | | if (param.getArm_no()>4){ |
| | | return R.ok().add(true); |
| | | } |
| | | |
| | | boolean taskArmWorkOrderSign = openService.TaskArmWorkOrderSign(param); |
| | | return R.ok().add(taskArmWorkOrderSign); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * AGV上报接收 |
| | | */ |
| | | @PostMapping("/agv/task/v1/agvCallback") |
| | | // @AppAuth(memo = "AGV上报接收") |
| | | public synchronized R TaskAgvReport(@RequestHeader(required = false) String appkey, |
| | | @RequestBody TaskAgvReportParam param, |
| | | HttpServletRequest request) { |
| | | // auth(appkey, param, request); |
| | | // 日志记录 |
| | | ApiLogService apiLogService = SpringUtils.getBean(ApiLogService.class); |
| | | apiLogService.save( |
| | | "AGV上报接收", |
| | | "/open/asrs/agv/task/v1/agvCallback", |
| | | null, |
| | | request.getRemoteAddr(), |
| | | JSON.toJSONString(param), |
| | | null, |
| | | true |
| | | ); |
| | | if (Cools.isEmpty(param)) { |
| | | return R.parse(BaseRes.PARAM); |
| | | } |
| | | if (Cools.isEmpty(param.getReqCode())) { |
| | | return R.error("WMS任务号[reqCode]不能为空"); |
| | | } |
| | | if (Cools.isEmpty(param.getTaskCode())) { |
| | | return R.error("WMS任务号[reqCode]不能为空"); |
| | | } |
| | | String taskCode = param.getTaskCode(); |
| | | if (taskCode == null || !taskCode.matches("^\\d+-.*$")) { |
| | | throw new CoolException("taskCode 格式错误,需为 数字-xxx,例如 123-ABC"); |
| | | } |
| | | |
| | | param.setTaskNo(Integer.parseInt(taskCode.substring(0, taskCode.indexOf("-")))); |
| | | boolean taskAgvReport = openService.TaskAgvReport(param); |
| | | if (taskAgvReport){ |
| | | // agvBindAndBin(String.valueOf(param.getTaskNo())); |
| | | return new R(0,"成功"); |
| | | } |
| | | return R.error("任务号不存在"); |
| | | } |
| | | |
| | | /** |
| | | * PDA创建AGV任务 |
| | | */ |
| | | @PostMapping("/agv/task/v1/createTask") |
| | | @AppAuth(memo = "PDA创建AGV任务") |
| | | public synchronized R TaskAgvCreate(@RequestHeader(required = false) String appkey, |
| | | @RequestBody TaskAgvCreateParam param, |
| | | HttpServletRequest request) { |
| | | auth(appkey, param, request); |
| | | if (Cools.isEmpty(param)) { |
| | | return R.parse(BaseRes.PARAM); |
| | | } |
| | | boolean taskAgvCreate = openService.taskAgvCreate(param); |
| | | if (taskAgvCreate){ |
| | | System.out.println(param); |
| | | // if (Cools.isEmpty(param)) { |
| | | // return R.parse(BaseRes.PARAM); |
| | | // } |
| | | // MatSyncParam matSyncParam = new MatSyncParam(); |
| | | // List<MatSyncParam.MatParam> objects = new ArrayList<>(); |
| | | // objects.add(param); |
| | | // matSyncParam.matDetails = objects; |
| | | // openService.syncMat(matSyncParam); |
| | | return R.ok(); |
| | | } |
| | | return R.error("任务号不存在"); |
| | | |
| | | /** |
| | | * 站点同步接口 |
| | | * 同步站点编号 |
| | | * 同步站点进出类型 |
| | | * 同步站点名称 |
| | | * 同步操作类型 |
| | | * @return |
| | | */ |
| | | @PostMapping("/station/all") |
| | | public synchronized R stationAll(){ |
| | | List<LinkedHashMap<String,Object>> list =new ArrayList<>(); |
| | | LinkedHashMap<String,Object> map = new LinkedHashMap<>(); |
| | | map.put("stationId","101"); |
| | | map.put("stationType","3"); |
| | | map.put("stationName","101"); |
| | | list.add(map); |
| | | System.out.println(); |
| | | // try { |
| | | // //获取Cookie值 |
| | | // HashMap<String, Object> headers = new HashMap<>(); |
| | | // headers.put("accesstoken", erpSecret.getAccessToken()); |
| | | // headers.put("x-acgw-identity", xAcfwIdentity); // 自定义请求头 |
| | | // response = new HttpHandler.Builder() |
| | | // .setHeaders(headers) |
| | | // .setUri(URL) |
| | | // .setPath(path) |
| | | // .setJson(add) |
| | | // .build() |
| | | // .doPost(); |
| | | // JSONObject jsonResponse = JSON.parseObject(response); |
| | | // if (jsonResponse.getString("errorCode").equals("401")) { |
| | | // |
| | | // } |
| | | // }catch (Exception e){ |
| | | // e.printStackTrace(); |
| | | // } |
| | | // if (Cools.isEmpty(param)) { |
| | | // return R.parse(BaseRes.PARAM); |
| | | // } |
| | | // MatSyncParam matSyncParam = new MatSyncParam(); |
| | | // List<MatSyncParam.MatParam> objects = new ArrayList<>(); |
| | | // objects.add(param); |
| | | // matSyncParam.matDetails = objects; |
| | | // openService.syncMat(matSyncParam); |
| | | return R.ok().add(list); |
| | | } |
| | | |
| | | /** |
| | | * PDA获取AGV库位 |
| | | * 组托信息下发 |
| | | * @return |
| | | */ |
| | | @PostMapping("/agv/loc/v1/getLocList") |
| | | @AppAuth(memo = "PDA检索AGV库位") |
| | | public synchronized R GetAgvLocList(@RequestHeader(required = false) String appkey, |
| | | @RequestBody AgvLocListParam param, |
| | | HttpServletRequest request) { |
| | | auth(appkey, param, request); |
| | | |
| | | |
| | | List<AgvLocListDetlParam> list = openService.getAgvLocList(param); |
| | | if (!list.isEmpty()) { |
| | | return R.ok(list); |
| | | } |
| | | return R.error("库位不存在或无明细"); |
| | | } |
| | | |
| | | /** |
| | | * PDA检索盘点数量 |
| | | */ |
| | | @PostMapping("/pick/v1/getPickList") |
| | | @AppAuth(memo = "PDA检索盘点数量") |
| | | public synchronized R getPickList(@RequestHeader(required = false) String appkey, |
| | | @RequestBody PdaPickListParam param, |
| | | HttpServletRequest request) { |
| | | // auth(appkey, param, request); |
| | | |
| | | List<PickWrkDetlListParam> list = openService.getPickList(param); |
| | | if (!list.isEmpty()) { |
| | | return R.ok(list); |
| | | } |
| | | return R.error("库位不存在或无明细"); |
| | | } |
| | | |
| | | /** |
| | | * PDA绑定解绑 |
| | | */ |
| | | @PostMapping("/agv/bindCtnrAndBin/v1") |
| | | @AppAuth(memo = "PDA绑定与解绑") |
| | | public synchronized R bindCtnrAndBin(@RequestHeader(required = false) String appkey, |
| | | @RequestBody bindCtnrAndBinParam param, |
| | | HttpServletRequest request) { |
| | | auth(appkey, param, request); |
| | | if (Cools.isEmpty(param)) { |
| | | return R.parse(BaseRes.PARAM); |
| | | } |
| | | boolean bindCtnrAndBin = openService.bindCtnrAndBin(param); |
| | | if (bindCtnrAndBin) { |
| | | @PostMapping("/comb/auth") |
| | | public synchronized R comb(@RequestBody ArrayList<HashMap<String,Object>> param){ |
| | | System.out.println(param); |
| | | // if (Cools.isEmpty(param)) { |
| | | // return R.parse(BaseRes.PARAM); |
| | | // } |
| | | // MatSyncParam matSyncParam = new MatSyncParam(); |
| | | // List<MatSyncParam.MatParam> objects = new ArrayList<>(); |
| | | // objects.add(param); |
| | | // matSyncParam.matDetails = objects; |
| | | // openService.syncMat(matSyncParam); |
| | | return R.ok(); |
| | | } |
| | | return R.error("库位不存在或无明细"); |
| | | } |
| | | |
| | | /** |
| | | * AGV申请过光栅 |
| | | * 出库通知单 |
| | | */ |
| | | @PostMapping("/agv/arm/grating/v1/agvCallback") |
| | | @AppAuth(memo = "AGV申请过光栅") |
| | | public synchronized R agvGrating(@RequestHeader(required = false) String appkey, |
| | | @RequestBody AgvGoTheArnParam param, |
| | | HttpServletRequest request) { |
| | | // auth(appkey, param, request); |
| | | if (Cools.isEmpty(param)) { |
| | | return R.parse(BaseRes.PARAM); |
| | | } |
| | | if (Cools.isEmpty(param.getCurrentPositionCode())) { |
| | | return R.error("位置[currentPositionCode]不能为空"); |
| | | } |
| | | boolean bindCtnrAndBin = true; |
| | | List<ArmAgvGratingParam> armList = param.getArmNo(); |
| | | if (armList.isEmpty()){ |
| | | return R.error("库位不存在或无明细"); |
| | | } |
| | | for (ArmAgvGratingParam arm : armList){ |
| | | if (bindCtnrAndBin){ |
| | | bindCtnrAndBin = openService.agvApplicationPassedTheGrating(arm); |
| | | // System.out.println("请求通过光栅"+armNo); |
| | | } |
| | | } |
| | | if (bindCtnrAndBin) { |
| | | asyncProcessAfterValidation(param); |
| | | return new R(0,"成功"); |
| | | } |
| | | return R.error("库位不存在或无明细"); |
| | | |
| | | @PostMapping("/outOrder") |
| | | public synchronized R outOrder (@RequestBody ArrayList<HashMap<String,Object>> param){ |
| | | System.out.println(param); |
| | | return R.ok(); |
| | | } |
| | | |
| | | @Async |
| | | public void agvBindAndBin(String taskNo) { |
| | | try { |
| | | Thread.sleep(1000); |
| | | openService.agvBindAndBin(taskNo); |
| | | } catch (Exception e) { |
| | | log.error("异步处理AGV搬运后续逻辑失败", e); |
| | | } |
| | | } |
| | | |
| | | @Async |
| | | public void asyncProcessAfterValidation(AgvGoTheArnParam param) { |
| | | try { |
| | | Thread.sleep(500); |
| | | openService.agvApplicationPassedTheGrating(param); |
| | | } catch (Exception e) { |
| | | log.error("异步处理AGV光栅后续逻辑失败", e); |
| | | } |
| | | } |
| | | |
| | | } |