自动化立体仓库 - WMS系统
skyouc
2 天以前 38242a15bc0a93933857018e7caf7c6ec41ee652
src/main/java/com/zy/api/service/impl/KopenApiServiceImpl.java
@@ -37,17 +37,17 @@
import com.zy.asrs.utils.Utils;
import com.zy.common.utils.HttpHandler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
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.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.*;
@Slf4j
@Service("kopenApiServiceImpl")
public class KopenApiServiceImpl implements KopenApiService {
@@ -65,6 +65,13 @@
    private SnowflakeIdWorker snowflakeIdWorker;
    @Autowired
    private CheckOrderDetlService checkOrderDetlService;
    @Value("${kopen.url}")
    private String url;
    @Value("${kopen.port}")
    private String port;
    @Value("${kopen.prefix}")
    private String prefix;
    /**
     * 接收下发订单信息
@@ -75,12 +82,12 @@
     * @date 2025/11/24 14:49
     */
    @Override
    public XSR receiveOrders(List<PubOrderParams> orderParams) {
    public XSR receiveOrders(List<PubOrderParams> orderParams, String type) {
        orderParams.forEach(params -> {
            if (params.getType().equals(OrderWkType.getTypeVal(params.getType()))) {
                throw new CoolException("当前类型不是上架派工单!!");
            }
            addOrUpdateOrders(params, "add");
            addOrUpdateOrders(params, type);
        });
        return XSR.ok("单据下发成功!!");
@@ -94,15 +101,16 @@
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public XSR getInDispatchResult(List<ReportOrderParam> params) {
    public XSR getInDispatchResult(List<ReportOrderParam> params, Order order) {
        if (Objects.isNull(params)) {
            return XSR.error("参数不能为空!!");
        }
        String response = null;
        try {
            response = new HttpHandler.Builder()
                    .setUri("127.0.0.1:8081")
                    .setPath("/wms/order/getInDispatchResult")
                    .setUri(url + ":" + port)
                    .setPath(prefix + "/getInDispatchResult")
                    .setJson(JSONObject.toJSONString(params))
                    .build()
                    .doPost();
@@ -111,15 +119,53 @@
            }
            JSONObject jsonObject = JSONObject.parseObject(response);
            Integer code = jsonObject.getInteger("code");
            if (!Objects.isNull(code) && code.equals(1)) {
            if (!Objects.isNull(code) && code.equals(200)) {
                if (!Objects.isNull(order)) {
                    order.setReportOnce(5);
                    orderService.updateById(order);
                }
                return XSR.ok("入库单上报完成!!");
            } else {
                if (!Objects.isNull(order)) {
                    int reportOnce = order.getReportOnce();
                    reportOnce++;
                    order.setReportOnce(reportOnce);
                    orderService.updateById(order);
                }
                String msg = jsonObject.getString("message");
                return XSR.error(Objects.isNull(msg) ? "上报失败!!" : msg);
            }
        } catch (Exception e) {
            if (!Objects.isNull(order)) {
                int reportOnce = order.getReportOnce();
                reportOnce++;
                order.setReportOnce(reportOnce);
                orderService.updateById(order);
            }
            log.error(e.getMessage(), e);
            return XSR.error(e.getMessage());
        }
    }
    /**
     * 获取自定义请求头
     *
     * @return java.util.Map<java.lang.String, java.lang.Object>
     * @author Ryan
     * @date 2025/12/29 9:11
     */
    private Map<String, Object> getHeaderParam() {
        Map<String, Object> headerParam = new HashMap<>();
//        headerParam.put("accept", "*/*");
//        headerParam.put("connection", "Keep-Alive");
        //设置请求连接的Token
        headerParam.put("api_key", "WMS");
        headerParam.put("charset", "UTF-8");
        headerParam.put("timestamp", new Date());
        headerParam.put("format", "xml");
        headerParam.put("signature", "c56ced444ed772098ffeb59537bbfa59");
        return headerParam;
    }
    /* */
@@ -134,7 +180,7 @@
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public XSR sendOutDispatch(List<PubOrderParams> pubOrderParams) {
    public XSR sendOutDispatch(List<PubOrderParams> pubOrderParams, String type) {
        if (Objects.isNull(pubOrderParams) || pubOrderParams.isEmpty()) {
            return XSR.error("参数不能为空!!");
        }
@@ -150,7 +196,7 @@
                throw new CoolException("公司ID不能为空!!");
            }
            addOrUpdateOrders(params, "add");
            addOrUpdateOrders(params, type);
        });
        return XSR.ok("备货指示派工单下发成功!!");
@@ -216,7 +262,15 @@
            if (Objects.isNull(mats)) {
                throw new CoolException("物料编码不能为空!!");
            }
            Mat matnr = matService.selectOne(new EntityWrapper<Mat>().eq("matnr", mats.getPro_komcode()));
            if (Objects.isNull(mats.getPro_type())) {
                throw new CoolException("零件类型不能为空!!");
            }
            if (Objects.isNull(mats.getPro_id())) {
                throw new CoolException("供应商不能为空!!");
            }
            Mat matnr = matService.selectOne(new EntityWrapper<Mat>()
                    .eq("supp_code", mats.getPro_id())
                    .eq("matnr", mats.getPro_komcode()));
            if (!Objects.isNull(matnr)) {
                // 订单时间
                if (Utils.isValidFormat(mats.getUpdate_time(), "yyyy-MM-dd HH:mm:ss")) {
@@ -225,7 +279,7 @@
                }
                matnr.setMaktx(mats.getPro_name());
                matnr.setSpecs(mats.getPro_size());
                matnr.setWeight(Double.parseDouble(mats.getPro_wet()));
                matnr.setWeight(Objects.isNull(mats.getPro_wet()) ? 0.0 : Double.parseDouble(mats.getPro_wet()));
                matnr.setSuppCode(mats.getPro_id());
                matnr.setTagId(MatLocType.getTag(mats.getPro_type()));
                matnr.setLocType(MatLocType.getTag(mats.getPro_type()));
@@ -277,7 +331,7 @@
        OrderParams orderParams = JSONObject.parseObject(JSONObject.toJSONString(params), OrderParams.class);
        // Order order = orderService.selectOne(new
        // EntityWrapper<Order>().eq("order_no", orderParams.getDispatch_no()));
        Order order = new Order();
        Order order = null;
        if (OrderType.ORDER_IN.type.equals(OrderWkType.getTypeVal(params.getType()))) {
            // 入库
            order = orderService.selectOne(new EntityWrapper<Order>().eq("order_no",
@@ -293,18 +347,24 @@
                // 备货指示派工单(EO/SO)出库
                order = orderService.selectOne(new EntityWrapper<Order>().eq("order_no",
                        orderParams.getDispatch_no()));
            } else {
                throw new CoolException("单据类型不存在,不支持添加!!");
            }
        } else {
            throw new CoolException("单据类型不存在,不支持添加!!");
        }
        // 出库
        if (type.equals("add") && !Objects.isNull(order)) {
            throw new CoolException("单据已存在, 不可重复添加!!");
        }
        // 判断订单是否存在
        if (Objects.isNull(order)) {
            /** 不存在,新增订单 */
            generateOrders(params);
            generateOrders(params, type);
        } else {
            if (order.getSettle() == 2) {
                throw new CoolException("订单已处理,不可再变更!!");
            }
            /** 存在,删除老订单,更新插入新订单 */
            // 删除旧订单明细
            if (!orderDetlService.delete(new EntityWrapper<OrderDetl>().eq("order_id", order.getId()))) {
@@ -314,7 +374,7 @@
            if (!orderService.deleteById(order.getId())) {
                throw new CoolException("原单据删除失败!!");
            }
            generateOrders(params);
            generateOrders(params, type);
        }
    }
@@ -326,9 +386,10 @@
     * 生成订单信息
     *
     * @param params
     * @param type
     */
    @Transactional(rollbackFor = Exception.class)
    public void generateOrders(PubOrderParams params) {
    public void generateOrders(PubOrderParams params, String type) {
        // 将数据当新订单插入
        Order newOrder = new Order();
        // 派工单号
@@ -336,7 +397,8 @@
        if (OrderType.ORDER_IN.type.equals(OrderWkType.getTypeVal(params.getType()))) {
            // 入库
            newOrder.setPakinPakoutStatus(1);
            newOrder.setDocType(Long.parseLong(params.getType()));
            Integer docType = OrderWkType.getDocType(params.getType());
            newOrder.setDocType(Long.parseLong(docType + ""));
            newOrder.setNumber(params.getInv_no());
        } else if (OrderType.ORDER_OUT.type.equals(OrderWkType.getTypeVal(params.getType()))) {
            // 出库
@@ -359,6 +421,7 @@
        newOrder.setUuid(generateUUID(params));
        // 流水号(唯一)
        newOrder.setDefNumber(params.getKopen_id());
        newOrder.setTargetLocation(params.getTarget_location());
        // 箱号
        newOrder.setItemName(params.getPm_tktid());
        newOrder.setSettle(OrderSettle.ORDER_SETTLE_HOLDING.type);
@@ -387,7 +450,11 @@
                if (OrderType.ORDER_IN.type.equals(OrderWkType.getTypeVal(params.getType()))) {
                    // 入库
                    orderItem.setAnfme(Math.round(item.getInv_qty() * 10000) / 10000.0);
                    if (type.equals("add")) {
                        orderItem.setAnfme(Math.round(item.getInv_qty() * 10000) / 10000.0);
                    } else {
                        orderItem.setAnfme(Math.round(item.getNew_qty() * 10000) / 10000.0);
                    }
                } else if (OrderType.ORDER_OUT.type.equals(OrderWkType.getTypeVal(params.getType()))) {
                    // 出库
                    if (OrderWkType.ORDER_WK_ORDER_OUT.val.equals(params.getType())) {
@@ -396,7 +463,11 @@
                    } else if (OrderWkType.ORDER_WK_ORDER_OUT_EO.val.equals(params.getType())
                            || OrderWkType.ORDER_WK_ORDER_OUT_SO.val.equals(params.getType())) {
                        // 备货指示派工单(EO/SO)出库
                        orderItem.setAnfme(Math.round(item.getOrder_qty() * 10000) / 10000.0);
                        if (type.equals("add")) {
                            orderItem.setAnfme(Math.round(item.getOrder_qty() * 10000) / 10000.0);
                        } else {
                            orderItem.setAnfme(Math.round(item.getNew_qty() * 10000) / 10000.0);
                        }
                    }
                }
                orderItem.setMatnr(matnr.getMatnr());
@@ -485,18 +556,18 @@
            wrapper.eq("matnr", params.getPro_komcode());
        }
        Page<LocDetl> locDetls = locDetlService.selectPage(new Page<>(params.getCurr(), params.getLimit()),  wrapper);
        Page<LocDetl> locDetls = locDetlService.selectPage(new Page<>(params.getCurr(), params.getLimit()), wrapper);
        return XSR.ok(locDetls.getRecords());
    }
    /**
     * 零件损溢单下发
     *
     * @author Ryan
     * @date 2025/11/24 15:22
     *
     * @param params
     * @return com.core.common.R
     * @author Ryan
     * @date 2025/11/24 15:22
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
@@ -511,9 +582,123 @@
        return XSR.ok("零件损溢单下发成功!!");
    }
    /** 生成新的零件损溢单
     * @param userId */
    @Transactional(rollbackFor = Exception.class)
    /**
     * 损溢单完结上报
     *
     * @param params
     * @param order
     * @return com.zy.api.entity.dto.XSR
     * @author Ryan
     * @date 2025/12/30 16:57
     */
    @Override
    public XSR reportCheckOrder(List<StockAdjustParams> params, CheckOrder order) {
        if (Objects.isNull(params)) {
            return XSR.error("参数不能为空!!");
        }
        String response = null;
        try {
            response = new HttpHandler.Builder()
                    .setUri(url + ":" + port)
                    .setPath(prefix + "/getBSBYResult")
                    .setJson(JSONObject.toJSONString(params))
                    .build()
                    .doPost();
            if (Objects.isNull(response) || response.trim().isEmpty()) {
                return XSR.error("外网接口无响应!!");
            }
            XSR jsonObject = JSONObject.parseObject(response, XSR.class);
            if (jsonObject.getSuccess()) {
                if (!Objects.isNull(order)) {
                    order.setReportOnce(5);
                    order.setSettle(5L);
                    checkOrderService.updateById(order);
                }
                return XSR.ok("入库单上报完成!!");
            } else {
                if (!Objects.isNull(order)) {
                    int reportOnce = order.getReportOnce();
                    reportOnce++;
                    order.setReportOnce(reportOnce);
                    checkOrderService.updateById(order);
                }
                String msg = jsonObject.getMessage();
                return XSR.error(Objects.isNull(msg) ? "上报失败!!" : msg);
            }
        } catch (Exception e) {
//            if (!Objects.isNull(order)) {
//                int reportOnce = order.getReportOnce();
//                reportOnce ++;
//                order.setReportOnce(reportOnce);
//                orderService.updateById(order);
//            }
            log.error(e.getMessage(), e);
            return XSR.error(e.getMessage());
        }
//        return null;
    }
    /**
     * 备货单反馈
     *
     * @param params
     * @param order
     * @return
     */
    @Override
    public XSR getOutDetailsResult(List<StockUpOrderParams> params, Order order) {
        if (Objects.isNull(params)) {
            return XSR.error("参数不能为空!!");
        }
        String response = null;
        try {
            response = new HttpHandler.Builder()
                    .setUri(url + ":" + port)
                    .setPath(prefix + "/getOutDetailsResult")
                    .setJson(JSONObject.toJSONString(params))
                    .build()
                    .doPost();
            if (Objects.isNull(response) || response.trim().isEmpty()) {
                return XSR.error("外网接口无响应!!");
            }
            JSONObject jsonObject = JSONObject.parseObject(response);
            Integer code = jsonObject.getInteger("code");
            if (!Objects.isNull(code) && code.equals(200)) {
                if (!Objects.isNull(order)) {
                    order.setReportOnce(5);
                    orderService.updateById(order);
                }
                return XSR.ok("入库单上报完成!!");
            } else {
                if (!Objects.isNull(order)) {
                    int reportOnce = order.getReportOnce();
                    reportOnce++;
                    order.setReportOnce(reportOnce);
                    orderService.updateById(order);
                }
                String msg = jsonObject.getString("message");
                return XSR.error(Objects.isNull(msg) ? "上报失败!!" : msg);
            }
        } catch (Exception e) {
            if (!Objects.isNull(order)) {
                int reportOnce = order.getReportOnce();
                reportOnce++;
                order.setReportOnce(reportOnce);
                orderService.updateById(order);
            }
            log.error(e.getMessage(), e);
            return XSR.error(e.getMessage());
        }
    }
    /**
     * 生成新的零件损溢单
     *
     * @param userId
     */
    @Transactional(rollbackFor = Exception.class)
    public void gentCheckOrders(StockAdjustParams params, Long userId) {
        if (Objects.isNull(params.getDetails()) || params.getDetails().isEmpty()) {
            throw new CoolException("订单明细不能为空!!");
@@ -538,7 +723,7 @@
        order.setSettle(Long.valueOf(CommonEnum.COMMON_ENUM_Y.type + ""));
        order.setStatus(CommonEnum.COMMON_ENUM_Y.type);
        order.setOrderTime(params.getUpdate_time());
        order.setMemo(params.getResason());
        order.setMemo(params.getReason());
        order.setShipName(params.getReason_name());
        order.setCreateTime(new Date());
        order.setUpdateTime(new Date());
@@ -561,6 +746,7 @@
            if (Objects.isNull(locDetl)) {
                throw new CoolException("库存不存在!!");
            }
            BeanUtils.copyProperties(locDetl, checkOrderDetl);
            checkOrderDetl.setLocDetlId(locDetl.getId());
            checkOrderDetl.setOrderId(order.getId());
@@ -573,7 +759,7 @@
            checkOrderDetl.setSuppCode(locDetl.getSuppCode());
            checkOrderDetl.setStandby1(locDetl.getSuppCode());
            checkOrderDetl.setAnfme(new BigDecimal(locDetl.getAnfme().toString()));
            checkOrderDetl.setDiffQty(BigDecimal.ZERO);
            checkOrderDetl.setDiffQty(new BigDecimal(item.getBsby_qty() + ""));
            checkOrderDetl.setWorkQty(BigDecimal.ZERO);
            checkOrderDetl.setStatus(1);
            checkOrderDetl.setZpallet(locDetl.getZpallet());
@@ -588,4 +774,8 @@
        });
    }
    private String kopen() {
        return url + ":" + port + prefix;
    }
}