package com.zy.service.impl; 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.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 com.zy.entity.RcsReporterTask; import com.zy.entity.RcsReturn; import com.zy.entity.WrkDetl; import com.zy.entity.WrkMast; import com.zy.enums.RcsRetMethodEnum; import com.zy.service.ApiLogService; import com.zy.service.RcsService; import com.zy.service.WrkDetlService; import com.zy.service.WrkMastService; import com.zy.utils.HttpHandler; import com.zy.utils.News; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.Map; import java.util.Objects; @Slf4j @Service public class RcsServiceImpl implements RcsService { @Value("${dj.url}") public String DJ_URL; @Resource private WrkMastService wrkMastService; @Resource private WrkDetlService wrkDetlService; @Resource private SlaveProperties slaveProperties; @Resource private ApiLogService apiLogService; /** * 2.2.1任务执行回馈 * 厂家:海量、华晓 * * @param rcsReporterTask * @return */ public RcsReturn reporterTask(RcsReporterTask rcsReporterTask) { RcsReturn rcsReturn = new RcsReturn(); String robotTaskCode = rcsReporterTask.getRobotTaskCode(); String singleRobotCode = rcsReporterTask.getSingleRobotCode(); JSONObject values = rcsReporterTask.getExtra().getJSONObject("values"); String method = values.getString("method"); Date now = new Date(); try { if (singleRobotCode.equals("14") || singleRobotCode.equals("15")) { // 两台CTU库机器人编号 WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper().eq("task_no", robotTaskCode)); if (wrkMast != null) { Integer ioType = wrkMast.getIoType(); if (Objects.requireNonNull(RcsRetMethodEnum.getEnum(method)) == RcsRetMethodEnum.TASK_END) { if ((ioType == 101 || ioType == 110 || ioType == 103) && wrkMast.getWrkSts() == 12) { // 给输送线下发命令 for (DevpSlave devp : slaveProperties.getDevp()) { DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); Map station = devpThread.getStation(); StaProtocol staProtocol = station.get(wrkMast.getSourceStaNo()); if (staProtocol == null) { continue; } else { staProtocol = staProtocol.clone(); } staProtocol.setWorkNo(wrkMast.getWrkNo()); staProtocol.setStaNo(wrkMast.getStaNo().shortValue()); boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); if (result) { News.info("RCS给WCS反馈end,输送线命令下发成功:{}", wrkMast.getWrkNo()); } else { rcsReturn.setCode("Err_Internal"); rcsReturn.setMessage("RCS给WCS反馈end,输送线命令下发失败"); JSONObject data = new JSONObject(); data.put("robotTaskCode", robotTaskCode); rcsReturn.setData(data); return rcsReturn; } } wrkMast.setWrkSts(14L); wrkMast.setCrnEndTime(now); wrkMast.setModiTime(now); wrkMastService.updateById(wrkMast); // 给TMS反馈出库货物信息 List wrkDetls = wrkDetlService.selectList(new EntityWrapper().eq("wrk_no", wrkMast.getWrkNo())); if (!wrkDetls.isEmpty()) { WrkDetl wrkDetl = wrkDetls.get(0); String orderNo = wrkDetl.getOrderNo(); if (!Cools.isEmpty(orderNo)) { // 构造请求参数 JSONObject jsonObject = new JSONObject(); jsonObject.put("billType",wrkDetl.getThreeCode()); jsonObject.put("orderNo", wrkDetl.getOrderNo()); jsonObject.put("createTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(now)); JSONArray jsonArray = new JSONArray(); for (WrkDetl detl : wrkDetls) { JSONObject object = new JSONObject(); object.put("itemNo", detl.getMatnr()); object.put("anfme", detl.getAnfme()); jsonArray.add(object); } jsonObject.put("details", jsonArray); String url = DJ_URL + "api/OutboundOrder/WmsOutFinish"; String request = jsonObject.toJSONString(); String response = ""; boolean success = false; try { response = new HttpHandler.Builder() .setUri(DJ_URL) .setPath("api/OutboundOrder/WmsOutFinish") .setJson(request) .build() .doPost(); JSONObject responseJson = JSON.parseObject(response); if (responseJson.getString("Success").equals("1")) { success = true; log.info("CTU出库反馈end,上报TMS成功,工作号:{},明细:{}", wrkMast.getWrkNo(), request); } else { log.error("CTU出库反馈end,上报TMS失败!,工作号:{},明细:{}", wrkMast.getWrkNo(), request); log.error("出库完成上报TMS失败!url:{};request:{};response:{}", url, request, response); } } catch (Exception e) { log.error("出库完成上报TMS异常,request:{}",request); e.printStackTrace(); } finally { try { // 保存接口日志 apiLogService.save( "出库完成上报TMS", url, null, "127.0.0.1", request, response, success ); } catch (Exception e) { log.error("入库保存接口日志异常", e); } } } } } else { log.error("{}ioType{}不在end反馈处理中", wrkMast.getWrkNo(), ioType); } } } } // 返回RCS rcsReturn.setCode("SUCCESS"); rcsReturn.setMessage(""); JSONObject data = new JSONObject(); data.put("robotTaskCode", robotTaskCode); rcsReturn.setData(data); } catch (Exception e) { log.error("RCS反馈任务进度处理异常 - {}", rcsReporterTask, e); rcsReturn.setCode("Err_Internal"); rcsReturn.setMessage("内部处理异常"); JSONObject data = new JSONObject(); data.put("robotTaskCode", robotTaskCode); rcsReturn.setData(data); } return rcsReturn; } }