| | |
| | | @PostMapping("/callEmptyBinOutBound") |
| | | @ManagerAuth(memo = "pda呼叫空料框出库") |
| | | public synchronized R callEmptyBinOutBound(@RequestBody JSONObject param) { |
| | | if(!param.containsKey("staNo") || !param.containsKey("locType")){ // 1.窄,2.宽 |
| | | if(!param.containsKey("staNo") || !param.containsKey("locType") || !param.containsKey("count")){ // 1.窄,2.宽 |
| | | return R.parse(BaseRes.PARAM); |
| | | } |
| | | return mobileService.callEmptyBinOutBound(null,param.getString("staNo"),param.getString("locType"),getUserId()); |
| | | int count = param.getInteger("count"); |
| | | if (count <= 0 || count > 10) { |
| | | return R.parse("数量有误,count:" + count); |
| | | } |
| | | return mobileService.callEmptyBinOutBound(null,param.getString("staNo"),param.getString("locType"),count,getUserId()); |
| | | } |
| | | |
| | | @PostMapping("/callEmptyBinInBound") |
| | |
| | | * @param locType 托盘类型 1.窄,2.宽 |
| | | * @param userId 用户id |
| | | */ |
| | | R callEmptyBinOutBound(MesOutApply mesOutApply,String staNo, String locType, Long userId); |
| | | R callEmptyBinOutBound(MesOutApply mesOutApply,String staNo, String locType, int count, Long userId); |
| | | |
| | | /** |
| | | * pda呼叫料框回库 |
| | |
| | | // 空托出库 |
| | | if (StringUtils.isEmpty(mesOutApply.getOrderNo()) && "01".equals(mesOutApply.getTransType())) { |
| | | // 生成空托出库任务 |
| | | mobileService.callEmptyBinOutBound(mesOutApply,WMS_TRANS_START_STATION_1,"1",defaultUserId); |
| | | mobileService.callEmptyBinOutBound(mesOutApply,WMS_TRANS_START_STATION_1,"1",1,defaultUserId); |
| | | |
| | | // try { |
| | | // if (!StringUtils.isEmpty(mesOutApply.getTaskno()) && !StringUtils.isEmpty(mesOutApply.getStationId())) { |
| | |
| | | transTask.setOrderNo(mesInApply.getOrderNo()); |
| | | transTask.setTransType(mesInApply.getTransType()); |
| | | transTask.setCurProcess(mesInApply.getProductLineId()); |
| | | transTask.setCurStationId("A3"); |
| | | transTask.setNextStationId("A4"); |
| | | transTask.setCurStationId(mesInApply.getStationID()); |
| | | transTask.setNextStationId(WMS_TRANS_START_STATION_2); |
| | | transTask.setItemno(WMS_ZPALLET_ID); // 固定为空托的编码 |
| | | transTask.setQty(1); // 空托只回1个 |
| | | transTask.setProductLineId(mesInApply.getProductLineId()); |
| | |
| | | transTask.setAgvFactory(1); |
| | | JSONObject sendAgvTask = submitTask(transTask); |
| | | if (!"1".equals(sendAgvTask.getString("Success"))) { |
| | | log.error("出库下发agv运输任务失败,{}", JSONObject.toJSONString(transTask)); |
| | | log.error("入库下发agv运输任务失败,{}", JSONObject.toJSONString(transTask)); |
| | | return 2; |
| | | } |
| | | } else { |
| | |
| | | OrderInAndOutUtil.updateOrder(Boolean.TRUE, orderPakin.getId(), 2L, defaultUserId); |
| | | |
| | | // 呼叫AGV从产线运回立库 |
| | | try { |
| | | if (!StringUtils.isEmpty(mesInApply.getTaskno())) { |
| | | TransTask transTask = new TransTask(); |
| | | transTask.setTaskno(mesInApply.getTaskno()); |
| | |
| | | transTask.setAgvFactory(1); |
| | | JSONObject sendAgvTask = submitTask(transTask); |
| | | if (!"1".equals(sendAgvTask.getString("Success"))) { |
| | | log.error("出库下发agv运输任务失败:{}", JSONObject.toJSONString(transTask)); |
| | | log.error("入库下发agv运输任务失败:{}", JSONObject.toJSONString(transTask)); |
| | | throw new CoolException("入库下发agv运输任务失败"); |
| | | } |
| | | } else { |
| | | throw new CoolException("MES入库下发agv运输任务失败"); |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("下发AGV运输任务失败", e); |
| | | } |
| | | } |
| | | |
| | | return 1; |
| | |
| | | // 转发给海康或华晓RCS |
| | | RcsReturn rcsReturn = rcsService.submitTask(rcsTaskSubmit, transTask.getAgvFactory()); |
| | | if (rcsReturn.getCode().equals("SUCCESS")) { |
| | | JSONObject data = rcsReturn.getData(); |
| | | String robotTaskCode = data.getString("robotTaskCode"); |
| | | if (Cools.isEmpty(transTask.getTaskno())) { |
| | | JSONObject data = rcsReturn.getData(); |
| | | String robotTaskCode = data.getString("robotTaskCode"); |
| | | transTask.setTaskno(robotTaskCode); |
| | | result.put("taskno", transTask.getTaskno()); |
| | | } |
| | |
| | | |
| | | @Override |
| | | @Transactional |
| | | public R callEmptyBinOutBound(MesOutApply mesOutApply, String staNo, String locType, Long userId) { |
| | | LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_sts", 'D').eq("loc_type2", locType)); |
| | | if(locMast == null) { |
| | | return R.parse("该类型:" + locType +"空托盘不存在"); |
| | | public R callEmptyBinOutBound(MesOutApply mesOutApply, String staNo, String locType,int count, Long userId) { |
| | | List<LocMast> locMastList = locMastService.selectList(new EntityWrapper<LocMast>().setSqlSelect("TOP " + count + " *") |
| | | .eq("loc_sts", "D").eq("frozen", 0).eq("loc_type2", locType).orderBy("lev1").orderBy("bay1").orderBy("row1")); |
| | | if (locMastList.size() < count) { |
| | | return R.parse("空托数量不足(或冻结),剩余数量:" + locMastList.size()); |
| | | } |
| | | |
| | | // 获取路径 |
| | | Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>() |
| | | .eq("type_no", 110) |
| | | .eq("stn_no", 204) |
| | | .eq("crn_no", locMast.getCrnNo()); |
| | | .eq("crn_no", 1); |
| | | StaDesc staDesc = staDescService.selectOne(wrapper); |
| | | if (staDesc == null) { |
| | | return R.parse("出库路径不存在,站点:" + staNo); |
| | | } |
| | | Date now = new Date(); |
| | | // 生成工作档 |
| | | int workNo = commonService.getWorkNo(WorkNoType.PAKOUT.type); |
| | | WrkMast wrkMast = new WrkMast(); |
| | | wrkMast.setWrkNo(workNo); |
| | | wrkMast.setIoTime(now); |
| | | wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID |
| | | wrkMast.setIoType(110); // 入出库状态: 110.空板出库 |
| | | wrkMast.setIoPri(10D); |
| | | wrkMast.setSourceStaNo(staDesc.getCrnStn$()); // 源站 |
| | | wrkMast.setStaNo(staDesc.getStnNo$()); // 目标站 |
| | | wrkMast.setCrnNo(staDesc.getCrnNo()); |
| | | wrkMast.setSourceLocNo(locMast.getLocNo()); // 源库位 |
| | | wrkMast.setFullPlt("N"); // 满板:Y |
| | | wrkMast.setPicking("N"); // 拣料 |
| | | wrkMast.setExitMk("N"); // 退出 |
| | | wrkMast.setEmptyMk("Y"); // 空板 |
| | | wrkMast.setLinkMis("N"); |
| | | wrkMast.setAppeUser(userId); |
| | | wrkMast.setAppeTime(now); |
| | | wrkMast.setModiUser(userId); |
| | | wrkMast.setModiTime(now); |
| | | if (mesOutApply != null) { |
| | | wrkMast.setTaskNo(mesOutApply.getTaskno()); |
| | | wrkMast.setAgvSta(mesOutApply.getStationId()); |
| | | wrkMast.setMemo(JSONObject.toJSONString(mesOutApply)); |
| | | } else { |
| | | wrkMast.setAgvSta(staNo); |
| | | } |
| | | for (LocMast locMast: locMastList) { |
| | | Date now = new Date(); |
| | | // 生成工作档 |
| | | int workNo = commonService.getWorkNo(WorkNoType.PAKOUT.type); |
| | | WrkMast wrkMast = new WrkMast(); |
| | | wrkMast.setWrkNo(workNo); |
| | | wrkMast.setIoTime(now); |
| | | wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID |
| | | wrkMast.setIoType(110); // 入出库状态: 110.空板出库 |
| | | wrkMast.setIoPri(10D); |
| | | wrkMast.setSourceStaNo(staDesc.getCrnStn$()); // 源站 |
| | | wrkMast.setStaNo(staDesc.getStnNo$()); // 目标站 |
| | | wrkMast.setCrnNo(staDesc.getCrnNo()); |
| | | wrkMast.setSourceLocNo(locMast.getLocNo()); // 源库位 |
| | | wrkMast.setFullPlt("N"); // 满板:Y |
| | | wrkMast.setPicking("N"); // 拣料 |
| | | wrkMast.setExitMk("N"); // 退出 |
| | | wrkMast.setEmptyMk("Y"); // 空板 |
| | | wrkMast.setLinkMis("N"); |
| | | wrkMast.setAppeUser(userId); |
| | | wrkMast.setAppeTime(now); |
| | | wrkMast.setModiUser(userId); |
| | | wrkMast.setModiTime(now); |
| | | if (mesOutApply != null) { |
| | | wrkMast.setTaskNo(mesOutApply.getTaskno()); |
| | | wrkMast.setAgvSta(mesOutApply.getStationId()); |
| | | wrkMast.setMemo(JSONObject.toJSONString(mesOutApply)); |
| | | } else { |
| | | wrkMast.setAgvSta(staNo); |
| | | } |
| | | |
| | | wrkMastService.insert(wrkMast); |
| | | wrkMastService.insert(wrkMast); |
| | | |
| | | // 更新库位状态 |
| | | if (locMast.getLocSts().equals("D")) { |
| | | locMast.setLocSts("R"); |
| | | locMast.setModiUser(userId); |
| | | locMast.setModiTime(now); |
| | | locMastService.updateById(locMast); |
| | | // 更新库位状态 |
| | | if (locMast.getLocSts().equals("D")) { |
| | | locMast.setLocSts("R"); |
| | | locMast.setModiUser(userId); |
| | | locMast.setModiTime(now); |
| | | locMastService.updateById(locMast); |
| | | } |
| | | log.info("生成空托出库任务成功,任务号:{}",wrkMast.getWrkNo()); |
| | | } |
| | | log.info("生成空托出库任务成功,任务号:{}",wrkMast.getWrkNo()); |
| | | return R.ok("出库成功"); |
| | | } |
| | | |
| | |
| | | import com.zy.asrs.mapper.BlockStationMapper; |
| | | import com.zy.asrs.mapper.BlockTaskMapper; |
| | | import com.zy.asrs.service.*; |
| | | import com.zy.common.utils.HttpHandler; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.stereotype.Service; |
| | |
| | | private String HX_URL; |
| | | @Value("${mes.defaultUserId}") |
| | | public long defaultUserId; |
| | | |
| | | // wcs地址 |
| | | @Value("${wcs.url}") |
| | | private String WCS_URL; |
| | | |
| | | |
| | | @Resource |
| | |
| | | String url = rcsFactory == 2 ? HX_URL : HIK_URL + "api/robot/controller/task/submit"; |
| | | String response = ""; |
| | | try { |
| | | // 模拟返回 |
| | | // rcsReturn.setCode("SUCCESS"); |
| | | // log.info("呼叫agv搬运成功!url:{};request:{};response:{}", url, JSON.toJSONString(rcsTaskSubmit), response); |
| | | // success = true; |
| | | |
| | | response = sendPost(url, JSONObject.toJSONString(rcsTaskSubmit)); |
| | | if (!StringUtils.isEmpty(response) && response.contains("code")) { |
| | | rcsReturn = JSONObject.parseObject(response, RcsReturn.class); |
| | | if ("SUCCESS".equals(rcsReturn.getCode())) { |
| | | // 模拟返回 |
| | | // rcsReturn.setCode("SUCCESS"); |
| | | // JSONObject jsonObject = new JSONObject(); |
| | | // jsonObject.put("robotTaskCode",4); |
| | | // rcsReturn.setData(jsonObject); |
| | | success = true; |
| | | |
| | | log.info("呼叫agv搬运成功!url:{};request:{};response:{}", url, JSON.toJSONString(rcsTaskSubmit), response); |
| | | } else { |
| | | log.error("呼叫agv搬运失败!url:{};request:{};response:{}", url, JSON.toJSONString(rcsTaskSubmit), response); |
| | |
| | | // 任务完成 |
| | | mesService.reporterTask(rcsReporterTask); |
| | | |
| | | // 入立库时,区分是空托还是满托,给输送线下发命令9990 空,9995满 |
| | | String transType = memo.getString("TransType"); |
| | | if("02".equals(transType) || "04".equals(transType)) { |
| | | int wrkNo = 9995; |
| | | if("02".equals(transType)) { |
| | | TaskDetl taskDetl = taskDetlService.selectOne(new EntityWrapper<TaskDetl>().eq("wrk_no", task.getWrkNo())); |
| | | if (taskDetl != null) { |
| | | if("tuopan".equals(taskDetl.getMatnr())){ |
| | | wrkNo = 9990; |
| | | } |
| | | } |
| | | } |
| | | int staNo = Integer.parseInt(task.getStaNo()); |
| | | Map<String,Object> params = new HashMap<>(); |
| | | params.put("siteId",staNo); |
| | | params.put("workNo",wrkNo); |
| | | params.put("staNo", staNo == 205 ? 205 : (staNo-1) ); |
| | | params.put("String","Y"); |
| | | String response = new HttpHandler.Builder() |
| | | .setUri(WCS_URL) |
| | | .setPath("/site/detl/update") |
| | | .setParams(params) |
| | | .build() |
| | | .doPost(); |
| | | log.info("agv反馈end给wcs发命令:{},返回:{}",JSONObject.toJSONString(params),response); |
| | | } |
| | | |
| | | // EntityWrapper<TaskDetl> wapper2 = new EntityWrapper<>(); |
| | | // wapper2.eq("wrk_no", task.getWrkNo()) |
| | | // .eq("matnr", memo.getString("ItemNo")) |
| | |
| | | @Autowired |
| | | private LoadingConfigTimer loadingConfigTimer; |
| | | |
| | | @PostMapping("/login.action") |
| | | @RequestMapping("/login.action") |
| | | @ManagerAuth(value = ManagerAuth.Auth.NONE, memo = "登录") |
| | | public R loginAction(@RequestBody Map<String, String> param) { |
| | | public R loginAction(String username, String password){ |
| | | //验证许可证是否有效 |
| | | if (!licenseTimer.getSystemSupport()) { |
| | | if (!licenseTimer.getSystemSupport()){ |
| | | return R.parse(CodeRes.SYSTEM_20001); |
| | | } |
| | | if (username.equals("super") && password.equals(Cools.md5(superPwd))) { |
| | | Map<String, Object> res = new HashMap<>(); |
| | | res.put("username", username); |
| | | res.put("token", Cools.enToken(System.currentTimeMillis() + username, superPwd)); |
| | | return R.ok(res); |
| | | } |
| | | EntityWrapper<User> userWrapper = new EntityWrapper<>(); |
| | | userWrapper.eq("username", param.get("username")); |
| | | userWrapper.eq("username", username); |
| | | User user = userService.selectOne(userWrapper); |
| | | if (Cools.isEmpty(user)) { |
| | | if (param.get("username").equals("super") && param.get("password").equals(Cools.md5(superPwd))) { |
| | | Map<String, Object> res = new HashMap<>(); |
| | | res.put("username", param.get("username")); |
| | | res.put("token", Cools.enToken(System.currentTimeMillis() + param.get("username"), superPwd)); |
| | | return R.ok(res); |
| | | } |
| | | if (Cools.isEmpty(user)){ |
| | | return R.parse(CodeRes.USER_10001); |
| | | } |
| | | if (user.getStatus() != 1) { |
| | | if (user.getStatus()!=1){ |
| | | return R.parse(CodeRes.USER_10002); |
| | | } |
| | | if (!user.getPassword().equals(param.get("password"))) { |
| | | if (!user.getPassword().equals(password)){ |
| | | return R.parse(CodeRes.USER_10003); |
| | | } |
| | | String token = Cools.enToken(System.currentTimeMillis() + param.get("username"), user.getPassword()); |
| | | if (loadingConfigTimer.getTokenNumber() == 1) { |
| | | userLoginService.delete(new EntityWrapper<UserLogin>().eq("user_id", user.getId()).eq("system", "WMS")); |
| | | } UserLogin userLogin = new UserLogin(); |
| | | String token = Cools.enToken(System.currentTimeMillis() + username, user.getPassword()); |
| | | userLoginService.delete(new EntityWrapper<UserLogin>().eq("user_id", user.getId())); |
| | | UserLogin userLogin = new UserLogin(); |
| | | userLogin.setUserId(user.getId()); |
| | | userLogin.setToken(token); |
| | | userLogin.setCreateTime(new Date()); |
| | | userLogin.setSystem("WMS"); |
| | | userLoginService.insert(userLogin); |
| | | Map<String, Object> res = new HashMap<>(); |
| | | res.put("username", user.getUsername()); |
| | |
| | | hx: |
| | | url: http://127.0.0.1:8089/hx/ |
| | | |
| | | #wcs地址 |
| | | wcs: |
| | | url: http://127.0.0.1:9090/jgwcs |
| | | |
| | |
| | | let params = {username: username, password: hex_md5(password)} |
| | | $.ajax({ |
| | | url: baseUrl + "/login.action", |
| | | headers: {'Content-Type': 'application/json'}, |
| | | data: JSON.stringify(params), |
| | | data:params, |
| | | method: 'POST', |
| | | success: function (res) { |
| | | if (res.code === 200) { |