| | |
| | | package com.zy.asrs.service.impl; |
| | | |
| | | import com.alibaba.excel.util.DateUtils; |
| | | import com.alibaba.excel.util.StringUtils; |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONArray; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.core.common.Cools; |
| | | import com.core.common.DateUtils; |
| | | import com.core.common.SnowflakeIdWorker; |
| | | import com.core.exception.CoolException; |
| | | import com.zy.asrs.entity.*; |
| | | import com.zy.asrs.entity.mes.*; |
| | | import com.zy.asrs.entity.param.CombParam; |
| | | import com.zy.asrs.entity.param.EmptyPlateOutParam; |
| | | import com.zy.asrs.entity.rcs.*; |
| | | import com.zy.asrs.mapper.AgvInfoMapper; |
| | | import com.zy.asrs.mapper.MatItemBarcodeMapper; |
| | | import com.zy.asrs.service.*; |
| | | import com.zy.asrs.utils.OrderInAndOutUtil; |
| | | import com.zy.common.model.DetlDto; |
| | | import com.zy.common.model.enums.WorkNoType; |
| | | import com.zy.common.service.CommonService; |
| | | import lombok.extern.slf4j.Slf4j; |
| | |
| | | import javax.annotation.Resource; |
| | | import java.text.ParseException; |
| | | import java.util.*; |
| | | import java.util.concurrent.ExecutionException; |
| | | import java.util.stream.Collectors; |
| | | import java.util.stream.Stream; |
| | | |
| | | @Slf4j |
| | | @Service |
| | | public class MesServiceImpl implements MesService { |
| | | |
| | | @Value("${mes.url}") |
| | | public String MES_URL; |
| | | |
| | | // 海康RCS地址 |
| | | @Value("${hik.url}") |
| | | private String HIK_URL; |
| | | |
| | | // 华晓RCS地址 |
| | | @Value("${hx.url}") |
| | | private String HX_URL; |
| | | |
| | | @Value("${wms.currentName}") |
| | | public String WMS_CURRENT_NAME; |
| | | @Value("${wms.wmsTransStartStation1}") |
| | |
| | | newMemo.put("itemdata", list); |
| | | |
| | | |
| | | |
| | | // 生成订单 |
| | | OrderPakin orderPakin = new OrderPakin(); |
| | | orderPakin.setUuid(String.valueOf(snowflakeIdWorker.nextId())); |
| | | orderPakin.setOrderNo(entry.getKey()); |
| | | orderPakin.setOrderTime(com.core.common.DateUtils.convert(now)); |
| | | orderPakin.setOrderTime(DateUtils.convert(now)); |
| | | orderPakin.setDocType(docType); |
| | | orderPakin.setSettle(1L); |
| | | orderPakin.setStatus(1); |
| | |
| | | |
| | | // 生成明细 |
| | | Mat mat = matService.selectByMatnr(mesMatInfo.getItemNo()); |
| | | if(Cools.isEmpty(mat)){ |
| | | log.error("该物料编号立库没有="+mesMatInfo.getItemNo()); |
| | | if (Cools.isEmpty(mat)) { |
| | | log.error("该物料编号立库没有=" + mesMatInfo.getItemNo()); |
| | | continue; |
| | | } |
| | | OrderDetlPakin orderDetlPakin = new OrderDetlPakin(); |
| | |
| | | OrderPakin orderPakin = new OrderPakin(); |
| | | orderPakin.setUuid(String.valueOf(snowflakeIdWorker.nextId())); |
| | | orderPakin.setOrderNo(mesInApply.getOrderNo()); |
| | | orderPakin.setOrderTime(com.core.common.DateUtils.convert(now)); |
| | | orderPakin.setOrderTime(DateUtils.convert(now)); |
| | | orderPakin.setDocType(docType); |
| | | orderPakin.setSettle(settle); |
| | | orderPakin.setStatus(1); |
| | |
| | | OrderPakout orderPakout = new OrderPakout(); |
| | | orderPakout.setUuid(String.valueOf(snowflakeIdWorker.nextId())); |
| | | orderPakout.setOrderNo(mesCallOutApply.getOrderNo()); |
| | | orderPakout.setOrderTime(com.core.common.DateUtils.convert(now)); |
| | | orderPakout.setOrderTime(DateUtils.convert(now)); |
| | | orderPakout.setDocType(docType.getDocId()); |
| | | orderPakout.setSettle(settle); |
| | | orderPakout.setStatus(1); |
| | |
| | | orderPakout.setUpdateTime(now); |
| | | orderPakout.setMemo(JSONObject.toJSONString(mesCallOutApply)); |
| | | orderPakout.setPakinPakoutStatus(2); |
| | | orderPakout.setCstmrName(mesCallOutApply.getStationId());//agv目标站点 |
| | | if (!orderPakoutService.insert(orderPakout)) { |
| | | log.error("MES保存出库订单(叫料)主档失败"); |
| | | throw new CoolException("保存出库订单(叫料)主档失败"); |
| | |
| | | |
| | | set.add(mesOutApplyItem.getTrayid()); |
| | | Mat mat = matService.selectByMatnr(mesOutApplyItem.getItemno()); |
| | | if (Cools.isEmpty(mat)) { |
| | | log.error("物料编号不存在: {}", mesOutApplyItem.getItemno()); |
| | | throw new CoolException("物料编号不存在: " + mesOutApplyItem.getItemno()); |
| | | } |
| | | OrderDetlPakout orderDetlPakout = new OrderDetlPakout(); |
| | | orderDetlPakout.setOrderId(orderPakout.getId()); |
| | | orderDetlPakout.setOrderNo(orderPakout.getOrderNo()); |
| | |
| | | } |
| | | |
| | | //有多少种不同的配盘号 只有配盘出库单需要知道 |
| | | if (mesCallOutApply.getTransType().equals("配盘出库单")){ |
| | | if (mesCallOutApply.getTransType().equals("配盘出库单")) { |
| | | orderPakout.setPayType(set.size()); |
| | | String shipCode =mesCallOutApply.getItemdata().get(0).getTrayid().split("-")[2]; |
| | | String shipCode = mesCallOutApply.getItemdata().get(0).getTrayid().split("-")[2]; |
| | | orderPakout.setShipCode(shipCode);//区域 是否是特殊托盘 |
| | | orderPakoutService.updateById(orderPakout); |
| | | } |
| | |
| | | OrderPakin orderPakin = new OrderPakin(); |
| | | orderPakin.setUuid(String.valueOf(snowflakeIdWorker.nextId())); |
| | | orderPakin.setOrderNo(mesCallOutApply.getOrderNo()); |
| | | orderPakin.setOrderTime(com.core.common.DateUtils.convert(now)); |
| | | orderPakin.setOrderTime(DateUtils.convert(now)); |
| | | orderPakin.setDocType(docType.getDocId()); |
| | | orderPakin.setSettle(1L); |
| | | orderPakin.setStatus(1); |
| | |
| | | orderPakin.setPakinPakoutStatus(1); |
| | | orderPakinService.insert(orderPakin); |
| | | if (mesCallOutApply.getItemdata() != null && !mesCallOutApply.getItemdata().isEmpty()) { |
| | | for (MesCallOutApply.MesOutApplyItem mesOutApplyItem : mesCallOutApply.getItemdata()){ |
| | | for (MesCallOutApply.MesOutApplyItem mesOutApplyItem : mesCallOutApply.getItemdata()) { |
| | | // 生成明细 |
| | | Mat mat = matService.selectByMatnr(mesOutApplyItem.getItemno()); |
| | | if(Cools.isEmpty(mat)){ |
| | | log.error("该物料编号立库没有="+mesOutApplyItem.getItemno()); |
| | | if (Cools.isEmpty(mat)) { |
| | | log.error("该物料编号立库没有=" + mesOutApplyItem.getItemno()); |
| | | continue; |
| | | } |
| | | OrderDetlPakin orderDetlPakin = new OrderDetlPakin(); |
| | |
| | | return result; |
| | | } |
| | | |
| | | // 下发给RCS |
| | | RcsTaskSubmit rcsTaskSubmit = new RcsTaskSubmit(); |
| | | rcsTaskSubmit.setRobotTaskCode(transTask.getTaskno()); |
| | | rcsTaskSubmit.setInitPriority(10); //默认10 |
| | | List<RcsTaskTargetRoute> targetRouteList = new ArrayList<>(); |
| | | RcsTaskTargetRoute startRoute = new RcsTaskTargetRoute(); |
| | | startRoute.setSeq(0); |
| | | startRoute.setCode(transTask.getCurStationId()); |
| | | startRoute.setOperation("COLLECT"); |
| | | targetRouteList.add(startRoute); |
| | | RcsTaskTargetRoute endRoute = new RcsTaskTargetRoute(); |
| | | endRoute.setSeq(1); |
| | | endRoute.setCode(transTask.getNextStationId()); |
| | | endRoute.setOperation("DELIVERY"); |
| | | targetRouteList.add(endRoute); |
| | | rcsTaskSubmit.setTargetRoute(targetRouteList); |
| | | int workNo = commonService.getWorkNo(WorkNoType.OTHER.type); |
| | | Date now = new Date(); |
| | | Task task = new Task(); |
| | | task.setWrkNo(workNo); |
| | | //08-1是空托盘转序任务 |
| | | //08-2是物料转序任务 |
| | | task.setTaskType("ZX-AGV-"+transTask.getTransType()); |
| | | task.setWrkSts(301L);//301.AGV任务创建 |
| | | task.setIoType(3);//3.站到站 |
| | | task.setIoPri(10.00); |
| | | task.setWrkDate(now); |
| | | task.setBarcode(transTask.getBarcode()); |
| | | task.setSourceStaNo(transTask.getCurStationId()); |
| | | task.setStaNo(transTask.getNextStationId()); |
| | | task.setBarcode(transTask.getTuoPanId()); |
| | | task.setModiUser(defaultUserId); |
| | | task.setModiTime(now); |
| | | task.setAppeUser(defaultUserId); |
| | | task.setAppeTime(now); |
| | | task.setTaskNo(transTask.getTaskno()); |
| | | task.setMemo(JSONObject.toJSONString(transTask)); |
| | | task.setPltType(transTask.getAgvFactory());//华晓AGV |
| | | task.setPacked(transTask.getRackNumber());//料架号 |
| | | task.setCtnType(1); |
| | | |
| | | // 转发给海康或华晓RCS |
| | | int success = rcsService.submitTask(rcsTaskSubmit, transTask.getAgvFactory()); |
| | | if (success == 1) { |
| | | int workNo = commonService.getWorkNo(WorkNoType.OTHER.type); |
| | | Date now = new Date(); |
| | | Task task = new Task(); |
| | | task.setWrkNo(workNo); |
| | | task.setTaskType("ZX-AGV"); |
| | | task.setWrkSts(302L);//302.AGV任务执行中 |
| | | task.setIoType(3);//3.站到站 |
| | | task.setIoPri(10.00); |
| | | task.setWrkDate(now); |
| | | task.setBarcode(transTask.getBarcode()); |
| | | task.setSourceStaNo(transTask.getCurStationId()); |
| | | task.setStaNo(transTask.getNextStationId()); |
| | | task.setBarcode(transTask.getTuoPanId()); |
| | | task.setModiUser(defaultUserId); |
| | | task.setModiTime(now); |
| | | task.setAppeUser(defaultUserId); |
| | | task.setAppeTime(now); |
| | | task.setTaskNo(transTask.getTaskno()); |
| | | task.setMemo(JSONObject.toJSONString(transTask)); |
| | | task.setPltType(transTask.getAgvFactory());//华晓AGV |
| | | task.setPacked(transTask.getRackNumber());//料架号 |
| | | |
| | | taskService.insert(task); |
| | | // Mat mat = matService.selectByMatnr(transTask.getItemno()); |
| | | // TaskDetl taskDetl = new TaskDetl(); |
| | | // taskDetl.setWrkNo(task.getWrkNo()); |
| | | // taskDetl.setIoTime(task.getIoTime()); |
| | | // taskDetl.setMatnr(transTask.getItemno()); |
| | | // taskDetl.setAnfme(0.0); |
| | | // taskDetl.setStandby1(String.valueOf(transTask.getQty())); |
| | | // taskDetl.setMaktx(mat.getMaktx()); |
| | | // taskDetl.setSpecs(mat.getSpecs()); |
| | | // taskDetl.setOrderNo(transTask.getOrderNo()); |
| | | // taskDetl.setZpallet(transTask.getTuoPanId()); |
| | | // taskDetl.setMemo(JSONObject.toJSONString(transTask.getItemBarcode())); |
| | | // taskDetl.setModiUser(defaultUserId); |
| | | // taskDetl.setModiTime(now); |
| | | // taskDetl.setAppeUser(defaultUserId); |
| | | // taskDetl.setAppeTime(now); |
| | | // taskDetlService.insert(taskDetl); |
| | | if (taskService.insert(task)) { |
| | | result.put("Success", "1"); |
| | | result.put("Message", "任务接收成功"); |
| | | } else { |
| | | |
| | | }else { |
| | | result.put("Success", "2"); |
| | | result.put("Message", "任务下发给RCS失败"); |
| | | } |
| | | |
| | | return result; |
| | | } |
| | | |
| | |
| | | mesReturn.setSuccess("2"); |
| | | |
| | | if ("Y".equals(allow.getStatus())) { |
| | | Task task = taskService.selectOne(new EntityWrapper<Task>().eq("task_no", allow.getTaskno())); |
| | | String TaskNo = allow.getTaskno(); |
| | | if(allow.getTaskno().contains("-")){ |
| | | TaskNo = allow.getTaskno().substring(0, allow.getTaskno().length() - 2); |
| | | } |
| | | Task task = taskService.selectOne(new EntityWrapper<Task>().eq("task_no", TaskNo)); |
| | | if (Cools.isEmpty(task)) { |
| | | mesReturn.setMessage("没有找个该任务编号=" + allow.getTaskno() + "的AGV移动任务"); |
| | | } else { |
| | | //查看申请站点的是海康还是华晓 |
| | | //海康 |
| | | if (Cools.isEmpty(task.getPltType()) || task.getPltType() == 1) { |
| | | if (Cools.isEmpty(task.getPltType()) || task.getPltType() == 1 || task.getPltType() == 0) { |
| | | RcsTaskContinue rcsTaskContinue = new RcsTaskContinue(); |
| | | rcsTaskContinue.setRobotTaskCode(allow.getTaskno()); |
| | | rcsTaskContinue.setTriggerType("TASK"); |
| | |
| | | mesReturn.setSuccess("2"); |
| | | |
| | | if ("Y".equals(allow.getStatus())) { |
| | | Task task = taskService.selectOne(new EntityWrapper<Task>().eq("task_no", allow.getTaskno())); |
| | | String TaskNo = allow.getTaskno(); |
| | | if(allow.getTaskno().contains("-")){ |
| | | TaskNo = allow.getTaskno().substring(0, allow.getTaskno().length() - 2); |
| | | } |
| | | Task task = taskService.selectOne(new EntityWrapper<Task>().eq("task_no", TaskNo)); |
| | | if (Cools.isEmpty(task)) { |
| | | mesReturn.setMessage("没有找个该任务编号=" + allow.getTaskno() + "的AGV移动任务"); |
| | | mesReturn.setMessage("没有找个该任务编号=" + TaskNo + "的AGV移动任务"); |
| | | } else { |
| | | //查看申请站点的是海康还是华晓 |
| | | //海康 |
| | | if (Cools.isEmpty(task.getPltType()) || task.getPltType() == 1) { |
| | | if (Cools.isEmpty(task.getPltType()) || task.getPltType() == 1 || task.getPltType() == 0) { |
| | | RcsTaskContinue rcsTaskContinue = new RcsTaskContinue(); |
| | | rcsTaskContinue.setRobotTaskCode(allow.getTaskno()); |
| | | rcsTaskContinue.setTriggerType("TASK"); |
| | |
| | | return mesReturn; |
| | | } |
| | | |
| | | @Override |
| | | public int AGVPause(JSONObject params, int AGVType){ |
| | | MesReturn mesReturn = new MesReturn(); |
| | | |
| | | String hik_url = "api/robot/controller/zone/pause"; |
| | | String hx_url = ""; |
| | | String URL = ""; |
| | | if (AGVType == 1){ |
| | | URL = HIK_URL + hik_url; |
| | | }else { |
| | | URL = HX_URL + hx_url; |
| | | } |
| | | |
| | | String response = RcsServiceImpl.sendPost(URL, JSONObject.toJSONString(params)); |
| | | JSONObject jsonObject = JSON.parseObject(response); |
| | | if (!StringUtils.isEmpty(response) && jsonObject.getString("code").equals("SUCCESS")) { |
| | | return 1; |
| | | }else |
| | | return 2; |
| | | } |
| | | |
| | | // endregion |
| | | |
| | | /** |