package com.zy.asrs.task.handler; import cn.hutool.core.bean.BeanUtil; 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.exception.CoolException; import com.zy.asrs.entity.MesLocDetl; import com.zy.asrs.entity.ReportData; import com.zy.asrs.entity.ReportDataLog; import com.zy.asrs.entity.param.MesStock; import com.zy.asrs.service.ApiLogService; import com.zy.asrs.service.MesLocDetlService; 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.*; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; /** * 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; @Autowired private MesLocDetlService mesLocDetlService; @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 response; } 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) { List all = mesLocDetlService.selectList(new EntityWrapper<>()); if (all != null) { List collect = all.stream().map(MesLocDetl::getId).collect(Collectors.toList()); boolean del = true; int d = 1; while (del && collect.size() > 0) { if (collect.size() > d * 1000) { mesLocDetlService.deleteBatchIds(collect.subList((d - 1) * 1000, d * 1000)); } else { mesLocDetlService.deleteBatchIds(collect.subList((d - 1) * 1000, collect.size())); del = false; } d++; } } boolean flag = true; Map req = new HashMap<>(); int i = 1; while (flag) { req.put("page", i); req.put("size", 1000); String result = doHttpRequest(JSONObject.toJSONString(req), mesTokenInfo, "同步MES库存", url, stock, null, "127.0.0.1"); JSONObject jsonObject = JSONObject.parseObject(result); Object o = jsonObject.get("data"); List mesLocDetls = new ArrayList<>(); MesLocDetl mesLocDetl; if (o != null) { JSONObject jsonObject1 = JSONObject.parseObject(o.toString()); Object o1 = jsonObject1.get("list"); if (o1 != null) { List mesStocks = JSONArray.parseArray(o1.toString(), MesStock.class); if (mesStocks.isEmpty()) { flag = false; } for (MesStock mesStock : mesStocks) { mesLocDetl = new MesLocDetl(); mesLocDetl.setMatnr(mesStock.getMaterialInfo().getMaterialCode()); mesLocDetl.setMaktx(mesStock.getMaterialInfo().getMaterialName()); mesLocDetl.setBatch(mesStock.getBatchNo()); mesLocDetl.setAnfme(mesStock.getOpAmount().getAmount().getAmount()); mesLocDetls.add(mesLocDetl); mesLocDetlService.insert(mesLocDetl); } } else { flag = false; } } if (!mesLocDetls.isEmpty()) { //mesLocDetlService.insertBatch(mesLocDetls); } i++; } return SUCCESS; } }