|  |  |  | 
|---|
|  |  |  | package com.zy.asrs.task.handler; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import cn.hutool.core.util.NumberUtil; | 
|---|
|  |  |  | import com.alibaba.fastjson.JSON; | 
|---|
|  |  |  | import com.alibaba.fastjson.JSONObject; | 
|---|
|  |  |  | import com.baomidou.mybatisplus.mapper.EntityWrapper; | 
|---|
|  |  |  | import com.core.common.Cools; | 
|---|
|  |  |  | import com.core.common.DateUtils; | 
|---|
|  |  |  | import com.core.exception.CoolException; | 
|---|
|  |  |  | import com.zy.asrs.entity.Order; | 
|---|
|  |  |  | import com.zy.asrs.entity.OrderDetl; | 
|---|
|  |  |  | import com.zy.asrs.service.OrderDetlService; | 
|---|
|  |  |  | import com.zy.asrs.service.OrderService; | 
|---|
|  |  |  | import com.zy.asrs.entity.*; | 
|---|
|  |  |  | import com.zy.asrs.entity.param.ReportErpParam; | 
|---|
|  |  |  | import com.zy.asrs.service.*; | 
|---|
|  |  |  | import com.zy.asrs.task.AbstractHandler; | 
|---|
|  |  |  | import com.zy.asrs.task.core.ReturnT; | 
|---|
|  |  |  | import com.zy.common.constant.MesConstant; | 
|---|
|  |  |  | import com.zy.common.model.MesPakinParam; | 
|---|
|  |  |  | import com.zy.common.utils.HttpHandler; | 
|---|
|  |  |  | import lombok.extern.slf4j.Slf4j; | 
|---|
|  |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
|---|
|  |  |  | import org.springframework.jdbc.core.JdbcTemplate; | 
|---|
|  |  |  | import org.springframework.beans.factory.annotation.Value; | 
|---|
|  |  |  | import org.springframework.stereotype.Service; | 
|---|
|  |  |  | import org.springframework.transaction.annotation.Transactional; | 
|---|
|  |  |  | import org.springframework.transaction.interceptor.TransactionAspectSupport; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import java.math.BigDecimal; | 
|---|
|  |  |  | import java.util.ArrayList; | 
|---|
|  |  |  | import java.util.Arrays; | 
|---|
|  |  |  | import java.util.Date; | 
|---|
|  |  |  | import java.util.List; | 
|---|
|  |  |  | import java.util.concurrent.TimeUnit; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * Created by vincent on 2020/7/7 | 
|---|
|  |  |  | 
|---|
|  |  |  | public class OrderSyncHandler extends AbstractHandler<String> { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private JdbcTemplate jdbcTemplate; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private OrderService orderService; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private OrderDetlService orderDetlService; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private ApiLogService apiLogService; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private DocTypeService docTypeService; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private AgvWrkDetlLogService agvWrkDetlLogService; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private AgvWrkMastLogService agvWrkMastLogService; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private AgvLocMastService agvLocMastService; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Value("${spring.profiles.active}") | 
|---|
|  |  |  | private String active; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Value("${u8.report}") | 
|---|
|  |  |  | private Boolean report; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Value("${u8.url}") | 
|---|
|  |  |  | private String url; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Value("${u8.orderReportPath}") | 
|---|
|  |  |  | private String orderReportPath; | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Transactional | 
|---|
|  |  |  | public ReturnT<String> start(Order order) { | 
|---|
|  |  |  | List<OrderDetl> orderDetls = orderDetlService.selectByOrderId(order.getId()); | 
|---|
|  |  |  | List<String> docNames = new ArrayList<>(Arrays.asList("银座采购入库单")); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | MesPakinParam pakinParam = new MesPakinParam(); | 
|---|
|  |  |  | pakinParam.setPakinTime(DateUtils.convert(order.getUpdateTime())); | 
|---|
|  |  |  | pakinParam.setLgortFrom("5008"); | 
|---|
|  |  |  | pakinParam.setLgortTo("5006"); | 
|---|
|  |  |  | for (OrderDetl orderDetl : orderDetls) { | 
|---|
|  |  |  | pakinParam.getList().add(new MesPakinParam.Detl(orderDetl.getMatnr(), orderDetl.getAnfme())); | 
|---|
|  |  |  | DocType docType = docTypeService.selectById(order.getDocType()); | 
|---|
|  |  |  | if (!docNames.contains(docType.getDocName())) { | 
|---|
|  |  |  | order.setSettle(8L); | 
|---|
|  |  |  | orderService.updateById(order); | 
|---|
|  |  |  | return SUCCESS; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | boolean flag = true; | 
|---|
|  |  |  | List<OrderDetl> orderDetlList = orderDetlService.selectByOrderId(order.getId()); | 
|---|
|  |  |  | List<OrderDetl> report = new ArrayList<>(); | 
|---|
|  |  |  | for (OrderDetl orderDetl : orderDetlList) { | 
|---|
|  |  |  | if (orderDetl.getReportQty() == null || orderDetl.getQty() > orderDetl.getReportQty() || orderDetl.getQty() < orderDetl.getAnfme()) { | 
|---|
|  |  |  | flag = false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (flag) { | 
|---|
|  |  |  | log.info("单据完结,{}", order); | 
|---|
|  |  |  | order.setSettle(6L); | 
|---|
|  |  |  | orderService.updateById(order); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return SUCCESS; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Transactional | 
|---|
|  |  |  | public synchronized void timelyStart(Order order) { | 
|---|
|  |  |  | if (!report) { | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (order == null) { | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //List<String> docNames = new ArrayList<>(Arrays.asList("银座采购入库单")); | 
|---|
|  |  |  | //List<String> docNames = new ArrayList<>(Arrays.asList("银座采购入库单", "银座委外材料出库单", "银座生产材料出库单")); | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //if (docNames.contains(docType.getDocName())) { | 
|---|
|  |  |  | List<OrderDetl> orderDetlList = orderDetlService.selectByOrderId(order.getId()); | 
|---|
|  |  |  | List<OrderDetl> report = new ArrayList<>(); | 
|---|
|  |  |  | for (OrderDetl orderDetl : orderDetlList) { | 
|---|
|  |  |  | if (orderDetl.getQty() > 0 && orderDetl.getQty() > (orderDetl.getReportQty() == null ? 0D : orderDetl.getReportQty())) { | 
|---|
|  |  |  | report.add(orderDetl); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (Cools.isEmpty(order.getPltType())) { | 
|---|
|  |  |  | List<AgvWrkDetlLog> agvWrkDetlLogs = agvWrkDetlLogService.selectList(new EntityWrapper<AgvWrkDetlLog>().eq("order_no", order.getOrderNo()).orderBy("appe_time", false)); | 
|---|
|  |  |  | if (!Cools.isEmpty(agvWrkDetlLogs)) { | 
|---|
|  |  |  | AgvWrkDetlLog agvWrkDetlLog = agvWrkDetlLogs.get(0); | 
|---|
|  |  |  | List<AgvWrkMastLog> agvWrkMastLogs = agvWrkMastLogService.selectList(new EntityWrapper<AgvWrkMastLog>().eq("wrk_no", agvWrkDetlLog.getWrkNo()).eq("io_type", 1).orderBy("appe_time", false)); | 
|---|
|  |  |  | if (!Cools.isEmpty(agvWrkMastLogs)) { | 
|---|
|  |  |  | AgvLocMast agvLocMast = agvLocMastService.selectById(agvWrkMastLogs.get(0).getLocNo()); | 
|---|
|  |  |  | if (agvLocMast != null) { | 
|---|
|  |  |  | log.info("补充逻辑生效:{}", order.getOrderNo()); | 
|---|
|  |  |  | order.setPltType(agvLocMast.getPltType()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (Cools.isEmpty(order.getPltType())) { | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (Cools.isEmpty(order.getInTime())) { | 
|---|
|  |  |  | order.setInTime(DateUtils.convert(new Date(), DateUtils.yyyyMMddHHmmsssss_F)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (!Cools.isEmpty(report)) { | 
|---|
|  |  |  | ReportErpParam param = new ReportErpParam(); | 
|---|
|  |  |  | mappingParam(order, param); | 
|---|
|  |  |  | mappingParamChildren(report, param); | 
|---|
|  |  |  | log.info(JSON.toJSONString(param)); | 
|---|
|  |  |  | int code = doHttpRequest(param, "单据审核", url, orderReportPath, null, "127.0.0.1"); | 
|---|
|  |  |  | if (code == 0) { | 
|---|
|  |  |  | Date date = new Date(); | 
|---|
|  |  |  | order.setInTime(DateUtils.convert(date, DateUtils.yyyyMMddHHmmsssss_F)); | 
|---|
|  |  |  | orderService.updateById(order); | 
|---|
|  |  |  | for (OrderDetl orderDetl : report) { | 
|---|
|  |  |  | log.info("{}单据审核上报了:{}", order.getOrderNo(), orderDetl.getQty() - (orderDetl.getReportQty() == null ? 0D : orderDetl.getReportQty())); | 
|---|
|  |  |  | orderDetl.setReportQty(orderDetl.getQty()); | 
|---|
|  |  |  | orderDetl.setUpdateTime(date); | 
|---|
|  |  |  | orderDetlService.updateById(orderDetl); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public void mappingParam(Order order, ReportErpParam param) { | 
|---|
|  |  |  | if (active.equals("prod")) { | 
|---|
|  |  |  | param.set操作系统号(order.getDefNumber()); | 
|---|
|  |  |  | } else if (active.equals("dev") || active.equals("loc")) { | 
|---|
|  |  |  | param.set操作系统号("998"); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | param.set操作系统号(order.getDefNumber()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | param.set操作单据(order.getDocType$()); | 
|---|
|  |  |  | param.set操作类型("add"); | 
|---|
|  |  |  | param.setDdate(DateUtils.convert(new Date(), DateUtils.yyyyMMdd_F)); | 
|---|
|  |  |  | param.setCWhCode(Cools.isEmpty(order.getPltType()) ? "" : order.getPltType() + ""); | 
|---|
|  |  |  | param.setCDepCode("YZ"); | 
|---|
|  |  |  | param.setCOrderCode(order.getOrderNo()); | 
|---|
|  |  |  | param.setCMaker(""); | 
|---|
|  |  |  | param.setCHandler(""); | 
|---|
|  |  |  | param.setCDefine14(order.getOrderNo() + "_" + order.getInTime()); | 
|---|
|  |  |  | //param.setCDefine14(order.getOrderNo() + "_" + order.getInTime() + "_" + order.getPltType())); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public void mappingParamChildren(List<OrderDetl> orderDetlList, ReportErpParam param) { | 
|---|
|  |  |  | List<ReportErpParam.ChildInfo> paramChild = new ArrayList<>(); | 
|---|
|  |  |  | param.setChildren(paramChild); | 
|---|
|  |  |  | for (OrderDetl orderDetl : orderDetlList) { | 
|---|
|  |  |  | ReportErpParam.ChildInfo childInfo = new ReportErpParam.ChildInfo(); | 
|---|
|  |  |  | childInfo.setIrowno(orderDetl.getItemNum()); | 
|---|
|  |  |  | childInfo.setCInvCode(orderDetl.getMatnr()); | 
|---|
|  |  |  | childInfo.setIQuantity(orderDetl.getQty() - (orderDetl.getReportQty() == null ? 0D : orderDetl.getReportQty()) + ""); | 
|---|
|  |  |  | String batch = orderDetl.getBatch(); | 
|---|
|  |  |  | if (Cools.isEmpty(batch)) { | 
|---|
|  |  |  | childInfo.setCBatch(""); | 
|---|
|  |  |  | childInfo.setBFree1(""); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | String[] s = batch.split("__"); | 
|---|
|  |  |  | if (s.length > 1) { | 
|---|
|  |  |  | childInfo.setCBatch(s[0]); | 
|---|
|  |  |  | childInfo.setBFree1(s[1]); | 
|---|
|  |  |  | } else if (s.length == 1) { | 
|---|
|  |  |  | childInfo.setCBatch(s[0]); | 
|---|
|  |  |  | childInfo.setBFree1(""); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | childInfo.setCBatch(""); | 
|---|
|  |  |  | childInfo.setBFree1(""); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | childInfo.setINum(orderDetl.getLength() + ""); | 
|---|
|  |  |  | childInfo.setIinvexchrate(""); | 
|---|
|  |  |  | childInfo.setIPOsID(orderDetl.getSku()); | 
|---|
|  |  |  | childInfo.setCOrderCode(orderDetl.getOrderNo()); | 
|---|
|  |  |  | childInfo.setIvouchrowno(orderDetl.getItemNum()); | 
|---|
|  |  |  | childInfo.setDefine22(orderDetl.getThreeCode()); | 
|---|
|  |  |  | if (!Cools.isEmpty(orderDetl.getWeight()) && !Cools.isEmpty(orderDetl.getVolume())) { | 
|---|
|  |  |  | BigDecimal mul = NumberUtil.div(childInfo.getIQuantity(), orderDetl.getVolume() + ""); | 
|---|
|  |  |  | childInfo.setINum(mul.toString()); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | childInfo.setINum("1"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | childInfo.setIinvexchrate(Cools.isEmpty(orderDetl.getVolume()) ? "" : orderDetl.getVolume() + ""); | 
|---|
|  |  |  | paramChild.add(childInfo); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private int doHttpRequest(Object requestParam, String namespace, String url, String path, String appkey, String | 
|---|
|  |  |  | ip) { | 
|---|
|  |  |  | String response = ""; | 
|---|
|  |  |  | boolean success = false; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | String response = new HttpHandler.Builder() | 
|---|
|  |  |  | .setUri(MesConstant.URL) | 
|---|
|  |  |  | .setPath(MesConstant.PAKIN_URL) | 
|---|
|  |  |  | .setJson(JSON.toJSONString(pakinParam)) | 
|---|
|  |  |  | .build() | 
|---|
|  |  |  | .doPost(); | 
|---|
|  |  |  | response = new HttpHandler.Builder().setUri(url).setTimeout(30, TimeUnit.SECONDS).setPath(path).setJson(JSONObject.toJSONString(requestParam)).build().doPost(); | 
|---|
|  |  |  | JSONObject jsonObject = JSON.parseObject(response); | 
|---|
|  |  |  | if (jsonObject.getInteger("code").equals(200)) { | 
|---|
|  |  |  | // 修改订单状态 4.完成 ===>> 6.已上报 | 
|---|
|  |  |  | if (!orderService.updateSettle(order.getId(), 6L, null)) { | 
|---|
|  |  |  | throw new CoolException("服务器内部错误,请联系管理员"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | log.error("请求接口失败!!!url:{};request:{};response:{}", MesConstant.URL+MesConstant.PACK_DOWN_URL, JSON.toJSONString(pakinParam), response); | 
|---|
|  |  |  | throw new CoolException("上报mes系统失败"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (Cools.isEmpty(jsonObject.get("succeed"))) { | 
|---|
|  |  |  | throw new CoolException(jsonObject.get("dsc").toString()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | String succeed = jsonObject.get("succeed").toString(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | int code = Cools.eq("0", succeed) ? 0 : 1; | 
|---|
|  |  |  | if (code != 0) { | 
|---|
|  |  |  | throw new CoolException(jsonObject.get("dsc").toString()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | success = true; | 
|---|
|  |  |  | return code; | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | log.error("fail", e); | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); | 
|---|
|  |  |  | return FAIL.setMsg(e.getMessage()); | 
|---|
|  |  |  | log.error("报错信息:{},{}", e.getMessage(), JSON.toJSONString(requestParam)); | 
|---|
|  |  |  | throw new CoolException("调用接口响应错误"); | 
|---|
|  |  |  | } finally { | 
|---|
|  |  |  | apiLogService.save(namespace, url + path, appkey, ip, JSON.toJSONString(JSONObject.toJSONString(requestParam)), response, success); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return SUCCESS; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|