package com.zy.asrs.task.handler; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.core.exception.CoolException; import com.zy.asrs.entity.DiaphragmInfo; import com.zy.asrs.entity.DocType; import com.zy.asrs.entity.Order; import com.zy.asrs.entity.OrderDetl; import com.zy.asrs.service.ApiLogService; import com.zy.asrs.service.DocTypeService; import com.zy.asrs.service.OrderDetlService; import com.zy.asrs.service.OrderService; import com.zy.asrs.task.AbstractHandler; import com.zy.asrs.task.core.ReturnT; import com.zy.asrs.utils.MesSyncUtil; import com.zy.common.utils.HttpHandler; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * Created by vincent on 2020/7/7 */ @Slf4j @Service public class OrderSyncHandler extends AbstractHandler { @Autowired private JdbcTemplate jdbcTemplate; @Autowired private OrderService orderService; @Autowired private OrderDetlService orderDetlService; @Autowired private ApiLogService apiLogService; @Autowired private DocTypeService docTypeService; @Value("${mes.pakin-sync.uri}") private String pakinUri; @Value("${mes.pakin-sync.path}") private String pakinPath; @Value("${mes.pakout-sync.uri}") private String pakoutUri; @Value("${mes.pakout-sync.path}") private String pakoutPath; @Transactional public ReturnT start(Order order) { DocType docType = docTypeService.selectById(order.getDocType()); if (null == docType) { return SUCCESS; } List orderDetls = orderDetlService.selectByOrderId(order.getId()); // 入库完成上报 if (docType.getPakin() == 1) { /* MesPakinParam pakinParam = new MesPakinParam(); pakinParam.setPakinTime(DateUtils.convert(order.getUpdateTime())); pakinParam.setLgortFrom("5008"); pakinParam.setLgortTo("5006"); for (OrderDetl orderDetl : orderDetls) { String serial = Cools.isEmpty(orderDetl.getBatch()) ? "" : orderDetl.getBatch(); pakinParam.getList().add(new MesPakinParam.Detl(orderDetl.getMatnr() + (Cools.isEmpty(serial) ? "" : "-" + serial), orderDetl.getAnfme())); } String response = ""; boolean success = false; try { response = new HttpHandler.Builder() .setUri(MesConstant.URL) .setPath(MesConstant.PAKIN_URL) .setJson(JSON.toJSONString(pakinParam)) .build() .doPost(); JSONObject jsonObject = JSON.parseObject(response); if (jsonObject.getInteger("code").equals(200)) { success = true; // 修改订单状态 4.完成 ===>> 6.已上报 if (!orderService.updateSettle(order.getId(), 6L, null)) { throw new CoolException("服务器内部错误,请联系管理员"); } } else { log.error("请求接口失败!!!url:{};request:{};response:{}", MesConstant.URL+MesConstant.PAKIN_URL, JSON.toJSONString(pakinParam), response); throw new CoolException("上报mes系统失败"); } } catch (Exception e) { log.error("fail", e); // TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg(e.getMessage()); } finally { try { // 保存接口日志 apiLogService.save( "成品库入库上报", MesConstant.URL + MesConstant.PAKIN_URL, null, "127.0.0.1", JSON.toJSONString(pakinParam), response, success ); } catch (Exception e) { log.error("", e); } } */ return orderPakinSync(order,docType.getDocName(),orderDetls); } // 出库完成上报 if (docType.getPakout() == 1) { /* MesPakoutParam pakoutParam = new MesPakoutParam(); pakoutParam.setTag(!order.getDocType$().equalsIgnoreCase("手动出库单")); pakoutParam.setPakoutTime(DateUtils.convert(order.getUpdateTime())); pakoutParam.setLgortFrom("5006"); pakoutParam.setLgortTo("1111"); if (!pakoutParam.isTag()) { pakoutParam.setKunnr("C1000"); } pakoutParam.setOrderNo(order.getOrderNo()); for (OrderDetl orderDetl : orderDetls) { String serial = Cools.isEmpty(orderDetl.getBatch()) ? "" : orderDetl.getBatch(); pakoutParam.getList().add(new MesPakoutParam.Detl(orderDetl.getMatnr() + (Cools.isEmpty(serial) ? "" : "-" + serial), orderDetl.getAnfme())); } String response = ""; boolean success = false; try { response = new HttpHandler.Builder() .setUri(MesConstant.URL) .setPath(MesConstant.PAKOUT_URL) .setJson(JSON.toJSONString(pakoutParam)) .build() .doPost(); JSONObject jsonObject = JSON.parseObject(response); if (jsonObject.getInteger("code").equals(200)) { success = true; // 修改订单状态 4.完成 ===>> 6.已上报 if (!orderService.updateSettle(order.getId(), 6L, null)) { throw new CoolException("服务器内部错误,请联系管理员"); } } else { log.error("请求接口失败!!!url:{};request:{};response:{}", MesConstant.URL+MesConstant.PAKOUT_URL, JSON.toJSONString(pakoutParam), response); throw new CoolException("上报mes系统失败"); } } catch (Exception e) { log.error("fail", e); // TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg(e.getMessage()); } finally { try { // 保存接口日志 apiLogService.save( "成品库出库上报", MesConstant.URL + MesConstant.PAKOUT_URL, null, "127.0.0.1", JSON.toJSONString(pakoutParam), response, success ); } catch (Exception e) { log.error("", e); } } */ return orderPakoutSync(order,docType.getDocName(),orderDetls); } return SUCCESS; } private ReturnT orderPakoutSync (Order order, String orderType, List orderDetls){ Map requestMap = getRequestMap(order,orderType,orderDetls); String response = ""; boolean success = false; try { response = new HttpHandler.Builder() .setUri(pakoutUri) .setPath(pakoutPath) .setParams(MesSyncUtil.getRequestParamMap()) .setJson(JSON.toJSONString(requestMap)) .build() .doPostWithParam(); success = orderSettleUpdate(response,order); } catch (Exception e) { log.error("fail", e); // TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg(e.getMessage()); } finally { try { // 保存接口日志 apiLogService.save( "成品库出库上报", pakoutUri + pakoutPath, null, "127.0.0.1", JSON.toJSONString(requestMap), response, success ); } catch (Exception e) { log.error("", e); } } return SUCCESS; } private ReturnT orderPakinSync (Order order, String orderType, List orderDetls){ Map requestMap = getRequestMap(order,orderType,orderDetls); System.out.println("requestMap: " + requestMap); String response = ""; boolean success = false; try { response = new HttpHandler.Builder() .setUri(pakinUri) .setPath(pakinPath) .setParams(MesSyncUtil.getRequestParamMap()) .setJson(JSON.toJSONString(requestMap)) .build() .doPostWithParam(); System.out.println(response); success = orderSettleUpdate(response,order); } catch (Exception e) { log.error("fail", e); // TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg(e.getMessage()); } finally { try { // 保存接口日志 apiLogService.save( "成品库入库上报", pakinUri + pakinPath, null, "127.0.0.1", JSON.toJSONString(requestMap), response, success ); } catch (Exception e) { log.error("", e); } } return SUCCESS; } private Map getRequestMap(Order order,String orderType, List orderDetls){ Map requestMap = new HashMap<>(); requestMap.put("orderNo",order.getOrderNo()); requestMap.put("orderTime",order.getOrderTime()); requestMap.put("orderType",orderType); requestMap.put("storage",order.getShipName()); List diaphragmInfoList = orderDetls.stream().map(od -> { DiaphragmInfo diaphragmInfo = new DiaphragmInfo(); diaphragmInfo.setBatchNo(od.getBatch()); diaphragmInfo.setItemCode(od.getMatnr()); diaphragmInfo.setBarCode(od.getQrCode()); diaphragmInfo.setQuantity(new BigDecimal(od.getAnfme())); diaphragmInfo.setAssQuantity(new BigDecimal(od.getQty())); return diaphragmInfo; }).collect(Collectors.toList()); requestMap.put("orderDetails",diaphragmInfoList); return requestMap; } private boolean orderSettleUpdate(String response, Order order){ JSONObject jsonObject = JSON.parseObject(response); if (jsonObject.getInteger("code").equals(200)) { //success = true; // 修改订单状态 4.完成 ===>> 6.已上报 if (!orderService.updateSettle(order.getId(), 6L, null)) { throw new CoolException("服务器内部错误,请联系管理员"); } } else { //log.error("请求接口失败!!!url:{};request:{};response:{}", MesConstant.URL+MesConstant.PAKIN_URL, JSON.toJSONString(requestMap), response); throw new CoolException("上报mes系统失败"); } return true; } }