| | |
| | | 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.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.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.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.text.SimpleDateFormat; |
| | | import java.util.*; |
| | | 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 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<String> docNames = new ArrayList<>(Arrays.asList("银座采购入库单")); |
| | | |
| | | DocType docType = docTypeService.selectById(order.getDocType()); |
| | | if("手动出库单".equals(docType.getDocName()) |
| | | || "手动入库单".equals(docType.getDocName()) |
| | | || "自动补货单".equals(docType.getDocName()) |
| | | || "人工补货单".equals(docType.getDocName())){ |
| | | 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; |
| | | } |
| | | |
| | | |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | Map<String, Object> param = new HashMap<>(); |
| | | param.put("id",order.getOrderNo()); |
| | | param.put("dDate",sdf.format(new Date())); |
| | | param.put("cHandler","WMS系统"); |
| | | |
| | | List<Map<String,Object>> orderDetlsParam = new ArrayList<>(); |
| | | param.put("orderDetails",orderDetlsParam); |
| | | |
| | | List<OrderDetl> orderDetls = orderDetlService.selectByOrderId(order.getId()); |
| | | |
| | | for (OrderDetl orderDetl : orderDetls){ |
| | | Map<String, Object> odMap = new HashMap<>(); |
| | | odMap.put("autoid",orderDetl.getItemNum()); |
| | | odMap.put("iQuantity",orderDetl.getQty()); |
| | | orderDetlsParam.add(odMap); |
| | | } |
| | | |
| | | int code = doHttpRequest(param, "单据审核", url, orderReportPath, null, "127.0.0.1"); |
| | | if(code == 0){ |
| | | order.setSettle(6L); |
| | | orderService.updateById(order); |
| | | } |
| | | |
| | | return SUCCESS; |
| | | } |
| | | |
| | | private int doHttpRequest(Object requestParam, String namespace, String url, String path, String appkey, String ip){ |
| | | @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 { |
| | | response = new HttpHandler.Builder() |
| | | .setUri(url) |
| | | .setPath(path) |
| | | .setJson(JSONObject.toJSONString(requestParam)) |
| | | .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(Cools.isEmpty(jsonObject.get("errCode"))){ |
| | | throw new CoolException(jsonObject.get("Message").toString()); |
| | | if (Cools.isEmpty(jsonObject.get("succeed"))) { |
| | | throw new CoolException(jsonObject.get("dsc").toString()); |
| | | } |
| | | |
| | | int code = (int) jsonObject.get("errCode"); |
| | | if(code != 0){ |
| | | throw new CoolException(jsonObject.get("errMsg").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(e.getMessage()); |
| | | } catch (Exception e) { |
| | | 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 |
| | | ); |
| | | } finally { |
| | | apiLogService.save(namespace, url + path, appkey, ip, JSON.toJSONString(JSONObject.toJSONString(requestParam)), response, success); |
| | | } |
| | | |
| | | } |