package com.zy.asrs.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; import com.core.exception.CoolException; import com.zy.asrs.entity.BasDevp; import com.zy.asrs.entity.LocMast; import com.zy.asrs.entity.TaskWrk; import com.zy.asrs.entity.TaskWrkReport; import com.zy.asrs.entity.wms.StorageEscalationParam; import com.zy.asrs.entity.wms.WmsResult; import com.zy.asrs.service.*; import com.zy.asrs.utils.Utils; import com.zy.common.service.CommonService; import com.zy.common.utils.HttpHandler; import com.zy.common.utils.Synchro; import com.zy.core.cache.MessageQueue; import com.zy.core.enums.SlaveType; import com.zy.core.model.Task; import com.zy.core.properties.SlaveProperties; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.io.IOException; import java.util.Date; import java.util.HashMap; @Service public class ToWmsServiceImpl implements ToWmsService { @Autowired private TaskWrkService taskWrkService; @Autowired private SlaveProperties slaveProperties; @Autowired private TaskWrkReportService taskWrkReportService; @Autowired private StaDescService staDescService; @Autowired private CommonService commonService; @Autowired private LocMastService locMastService; @Autowired private BasDevpService basDevpService; @Autowired private ApiLogService apiLogService; @Value("${wms.url}") private String wmsUrl; /** * 申请入库 */ @Value("${wms.inboundTaskApplyPath}") private String inboundTaskApplyPath; /** * 任务开始时,WCS回调WMS */ @Value("${wms.taskExecCallback}") private String taskExecCallback; /** * 任务完成结束时,WCS回调WMS */ @Value("${wms.taskStatusFeedbackPath}") private String taskStatusFeedbackPath; @Value("${wms.code}") private String code; @Value("${wms.successCode}") private String successCode; @Value("${wms.msg}") private String msg; @Value("${wms.data}") private String data; @Override public void addReportLog(TaskWrk taskWrk) { TaskWrkReport taskWrkReport = new TaskWrkReport(); Synchro.Copy(taskWrk, taskWrkReport); taskWrkReport.setCreateTime(new Date()); taskWrkReportService.insert(taskWrkReport); } @Override public WmsResult getLocNoFromWms(StorageEscalationParam wmsParam) { String response = ""; Boolean success = false; try { response = new HttpHandler.Builder() .setUri(wmsUrl) .setPath(inboundTaskApplyPath) .setJson(JSON.toJSONString(wmsParam)) .build() .doPost(); JSONObject jsonObject = JSON.parseObject(response); if (!Cools.isEmpty(response) && !Cools.isEmpty(jsonObject.get(code)) && jsonObject.get(code).equals(successCode)) { WmsResult result = JSON.parseObject(jsonObject.get(data).toString(), WmsResult.class); return result; } } catch (IOException e) { } finally { addApiLog("入库任务请求获取库位", wmsUrl + inboundTaskApplyPath, JSON.toJSONString(wmsParam), response, success); } return null; } public boolean checkLocNo(String locNo) { try { BasDevp basDevp = basDevpService.selectById(inSta.getStaNo()); if (Cools.isEmpty(basDevp)) { log.error("站点号异常1" + inSta.getStaNo()); throw new CoolException("站点号异常1,未查询到站点信息" + inSta.getStaNo()); } Integer staNoCrnNo = Utils.StaNoCrnNo(inSta.getStaNo()); if (staNoCrnNo == 0) { basDevp.setStaErr(1); basDevpService.updateById(basDevp); log.error("站点号异常2" + inSta.getStaNo()); throw new CoolException("站点号异常2,站点号不存在" + inSta.getStaNo()); } else { LocMast locMast = locMastService.selectOne(new EntityWrapper() .eq("crn_no", staNoCrnNo.longValue()) .eq("loc_no", result.getLocNo())); if (Cools.isEmpty(locMast)) { basDevp.setStaErr(1); basDevpService.updateById(basDevp); log.error("站点号异常3" + inSta.getStaNo()); throw new CoolException("站点号异常3:此巷道不存在目标库位" + inSta.getStaNo()); } } } catch (Exception e) { // log.error("扫码检测程序异常"+inSta.getStaNo()+"异常信息"+e); // 退回 log.error("扫码检测程序异常" + inSta.getStaNo() + errMsg); log.error("扫码检测程序异常,异常信息" + e); staProtocol.setWorkNo((short) 9999); staProtocol.setStaNo(inSta.getStaNo().shortValue()); devpThread.setPakMk(staProtocol.getSiteId(), false); MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); TaskWrk taskWrk = taskWrkMapper.selectByWrkNo(Integer.valueOf(workNo)); if (taskWrk != null) { taskWrk.setMemo(errMsg);//将错误码存入备注字段进行展示 taskWrkMapper.updateById(taskWrk); } continue; } //查看该库位是否为空库位 LocMast locMast = locMastService.selectOne(new EntityWrapper() .eq("loc_sts", "O") .eq("loc_no", result.getLocNo())); if (Cools.isEmpty(locMast)) { try { HashMap headParam1 = new HashMap<>(); headParam1.put("taskNo", result.getTaskNo()); headParam1.put("status", 6); headParam1.put("ioType", 1); headParam1.put("barcode", BoxNo); String response2; response2 = new HttpHandler.Builder() // .setHeaders(headParam) .setUri(wmsUrl) .setPath(taskStatusFeedbackPath) .setJson(JSON.toJSONString(headParam1)) .build() .doPost(); JSONObject jsonObject1 = JSON.parseObject(response2); apiLogService.save("wcs派发库位==》不为空《==上报wms" , wmsUrl + taskStatusFeedbackPath , null , "127.0.0.1" , JSON.toJSONString(headParam1) , response , true ); } catch (Exception e) { log.error("wcs派发库位==》不为空《==上报wms", result.getTaskNo()); throw new CoolException("wcs派发入库任务上报wms失败,派发库位==》不为空《==,异常信息:" + e); } } } private void addApiLog(String nameSpace, String url, String param, String response, Boolean success) { apiLogService.save(nameSpace, url, null, "127.0.0.1", param, response, success); } }