package com.zy.asrs.task.handler; import cn.hutool.core.bean.BeanUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.core.common.Cools; import com.core.exception.CoolException; import com.zy.asrs.entity.ReportData; import com.zy.asrs.entity.ReportDataLog; import com.zy.asrs.service.ApiLogService; import com.zy.asrs.service.ReportDataLogService; import com.zy.asrs.service.ReportDataService; import com.zy.asrs.task.AbstractHandler; import com.zy.asrs.task.core.ReturnT; import com.zy.common.utils.HttpHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.Date; import java.util.Map; import java.util.concurrent.TimeUnit; /** * Created by vincent on 2020/7/7 */ @Service public class ReportDataHandler extends AbstractHandler { private static final Logger log = LoggerFactory.getLogger(ReportDataHandler.class); @Autowired private ReportDataService reportDataService; @Autowired private ReportDataLogService reportDataLogService; @Autowired private ApiLogService apiLogService; @Value("${mes.url}") private String url; @Value("${mes.orderReportPath}") private String orderReportPath; @Value("${mes.pakinReportPath}") private String pakinReportPath; @Value("${mes.buyPakinReportPath}") private String buyPakinReportPath; @Value("${mes.pakoutReportPath}") private String pakoutReportPath; @Value("${mes.stock}") private String stock; @Transactional public ReturnT start(ReportData data, Map mesTokenInfo) { String mesPath = ""; if ("MES".equals(data.getReportType())) { switch (data.getMemo()) { case "上报mes采购入库信息": mesPath = buyPakinReportPath; break; case "上报mes入库信息": mesPath = pakinReportPath; break; case "上报mes出库信息": mesPath = pakoutReportPath; break; case "上报mes调拨信息": mesPath = orderReportPath; break; } ReportDataLog reportDataLog = new ReportDataLog(); String result = doHttpRequest(data.getReportJson(), mesTokenInfo, data.getMemo(), url, mesPath, null, "127.0.0.1"); reportDataService.deleteById(data.getId()); BeanUtil.copyProperties(data, reportDataLog); reportDataLog.setReportTime(new Date()); reportDataLog.setReportDataId(data.getId()); reportDataLog.setThreeCode(result); reportDataLogService.insert(reportDataLog); } return SUCCESS; } private String doHttpRequest(String requestParam, Map headParam, String namespace, String url, String path, String appkey, String ip) { String response = "fail"; boolean success = false; try { response = new HttpHandler.Builder().setUri(url).setPath(path).setTimeout(30, TimeUnit.SECONDS).setHeaders(headParam).setJson(requestParam).setHttps(true).build().doPost(); JSONObject jsonObject = JSON.parseObject(response); if (Cools.isEmpty(jsonObject.get("code")) || Integer.parseInt(jsonObject.get("code").toString()) != 200) { log.info("mes接口调用失败,返回信息:" + jsonObject); //TODO 张超 throw new CoolException("mes接口调用失败,返回信息:" + jsonObject); } success = true; return null; } catch (Exception e) { log.error("mes接口调用失败,返回信息:{}", e.getMessage()); //throw new CoolException(e.getMessage()); } finally { apiLogService.save(namespace, url + path, appkey, ip, requestParam, response, success); } return response; } @Transactional public ReturnT stock(Map mesTokenInfo) { String result = doHttpRequest("{}", mesTokenInfo, "同步MES库存", url, stock, null, "127.0.0.1"); return SUCCESS; } }