自动化立体仓库 - WMS系统
zwl
2023-09-24 a055753d27e82a2cd1371f0241001ab6b8786069
src/main/java/com/zy/asrs/task/handler/OrderSyncHandler.java
@@ -5,6 +5,8 @@
import com.core.common.Cools;
import com.core.common.DateUtils;
import com.core.exception.CoolException;
import com.sun.org.apache.xpath.internal.operations.Or;
import com.zy.asrs.entity.DiaphragmInfo;
import com.zy.asrs.entity.DocType;
import com.zy.asrs.entity.Order;
import com.zy.asrs.entity.OrderDetl;
@@ -19,12 +21,19 @@
import com.zy.common.model.MesPakoutParam;
import com.zy.common.utils.HttpHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.formula.functions.T;
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.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
 * Created by vincent on 2020/7/7
@@ -44,6 +53,18 @@
    @Autowired
    private DocTypeService docTypeService;
    @Value("${mes.pakin-sync.url}")
    private String pakinUrl;
    @Value("${mes.pakin-sync.path}")
    private String pakinPath;
    @Value("${mes.pakout-sync.url}")
    private String pakoutUrl;
    @Value("${mes.pakout-sync.path}")
    private String pakoutPath;
    @Transactional
    public ReturnT<String> start(Order order) {
        DocType docType = docTypeService.selectById(order.getDocType());
@@ -53,6 +74,7 @@
        List<OrderDetl> orderDetls = orderDetlService.selectByOrderId(order.getId());
        // 入库完成上报
        if (docType.getPakin() == 1) {
            /*
            MesPakinParam pakinParam = new MesPakinParam();
            pakinParam.setPakinTime(DateUtils.convert(order.getUpdateTime()));
            pakinParam.setLgortFrom("5008");
@@ -98,17 +120,21 @@
                            success
                    );
                } catch (Exception e) { log.error("", e); }
            }
            } */
            return orderPakinSync(order,docType.getDocName(),orderDetls);
        }
        // 出库完成上报
        if (docType.getPakout() == 1) {
            if (true) {
                return SUCCESS;
            }
            /*
            MesPakoutParam pakoutParam = new MesPakoutParam();
            pakoutParam.setPakoutTime(DateUtils.convert(order.getUpdateTime()));    // todo:luxiaotao
            pakoutParam.setLgortFrom("5008");   // todo:luxiaotao
            pakoutParam.setLgortTo("5006");   // todo:luxiaotao
            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();
@@ -119,7 +145,7 @@
            try {
                response = new HttpHandler.Builder()
                        .setUri(MesConstant.URL)
                        .setPath(MesConstant.PAKOUT_URL)    // todo:luxiaotao
                        .setPath(MesConstant.PAKOUT_URL)
                        .setJson(JSON.toJSONString(pakoutParam))
                        .build()
                        .doPost();
@@ -152,8 +178,119 @@
                    );
                } catch (Exception e) { log.error("", e); }
            }
             */
            return orderPakoutSync(order,docType.getDocName(),orderDetls);
        }
        return SUCCESS;
    }
    private  ReturnT<String> orderPakoutSync (Order order, String orderType, List<OrderDetl> orderDetls){
        Map<String,Object> requestMap = getRequestMap(order,orderType,orderDetls);
        String response = "";
        boolean success = false;
        try {
            response = new HttpHandler.Builder()
                    .setUri(pakoutUrl)
                    .setPath(pakoutPath)
                    .setJson(JSON.toJSONString(requestMap))
                    .build()
                    .doPost();
            success = orderSettleUpdate(response,order);
        } catch (Exception e) {
            log.error("fail", e);
//            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            return FAIL.setMsg(e.getMessage());
        } finally {
            try {
                // 保存接口日志
                apiLogService.save(
                        "成品库出库上报",
                        pakoutUrl + pakoutPath,
                        null,
                        "127.0.0.1",
                        JSON.toJSONString(requestMap),
                        response,
                        success
                );
            } catch (Exception e) { log.error("", e); }
        }
        return SUCCESS;
    }
    private  ReturnT<String> orderPakinSync (Order order, String orderType, List<OrderDetl> orderDetls){
        Map<String,Object> requestMap = getRequestMap(order,orderType,orderDetls);
        String response = "";
        boolean success = false;
        try {
            response = new HttpHandler.Builder()
                    .setUri(pakinUrl)
                    .setPath(pakinPath)
                    .setJson(JSON.toJSONString(requestMap))
                    .build()
                    .doPost();
            success = orderSettleUpdate(response,order);
        } catch (Exception e) {
            log.error("fail", e);
//            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            return FAIL.setMsg(e.getMessage());
        } finally {
            try {
                // 保存接口日志
                apiLogService.save(
                        "成品库入库上报",
                        pakinUrl + pakinPath,
                        null,
                        "127.0.0.1",
                        JSON.toJSONString(requestMap),
                        response,
                        success
                );
            } catch (Exception e) { log.error("", e); }
        }
        return SUCCESS;
    }
    private Map<String,Object> getRequestMap(Order order,String orderType, List<OrderDetl> orderDetls){
        Map<String,Object> requestMap = new HashMap<>();
        requestMap.put("orderNo",order.getOrderNo());
        requestMap.put("orderTime",order.getOrderTime());
        requestMap.put("orderType",orderType);
        List<DiaphragmInfo> 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;
    }
}