自动化立体仓库 - WMS系统
10个文件已修改
167 ■■■■ 已修改文件
src/main/java/com/zy/api/controller/KopenApiController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/api/enums/OrderWkType.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/api/service/KopenApiService.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/api/service/impl/KopenApiServiceImpl.java 70 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/Order.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/enums/OrderTypeEnum.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/OrderSyncScheduler.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/OrderSyncHandler.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/utils/HttpHandler.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-dev.yml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/api/controller/KopenApiController.java
@@ -86,7 +86,7 @@
//        if (Objects.isNull(params.getKopen_id()) && Objects.isNull(params.getInv_no()) && Objects.isNull(params.getDispatch_no())) {
//            return XSR.error("取消条件不能为空!!");
//        }
        return kopenApiService.getInDispatchResult(params);
        return kopenApiService.getInDispatchResult(params, null);
    }
    /**
src/main/java/com/zy/api/enums/OrderWkType.java
@@ -1,5 +1,7 @@
package com.zy.api.enums;
import com.zy.asrs.enums.OrderTypeEnum;
public enum OrderWkType {
    // 订单类型
@@ -37,8 +39,28 @@
        } else if (val.equals(OrderWkType.ORDER_WK_ORDER_OUT_EO.val)  || val.equals(OrderWkType.ORDER_WK_ORDER_OUT_SO.val)  || val.equals(OrderWkType.ORDER_WK_ORDER_OUT.val)) {
            return OrderType.ORDER_OUT.type;
        } else {
            return OrderType.ORDER_OUT.type;
            return null;
        }
    }
    public static Integer getDocType(String val) {
        if (val.equals(OrderWkType.ORDER_WK_PUR_IN.val)
                || val.equals(OrderWkType.ORDER_WK_SUPLUS_IN.val)
                || val.equals(OrderWkType.ORDER_WK_MEGER_IN.val)
                || val.equals(OrderWkType.ORDER_WK_PRO_UPDATE_IN.val)) {
            return OrderTypeEnum.PICKING.type;
        } else if (val.equals(OrderWkType.ORDER_WK_TRANSFER_IN.val)) {
            return OrderTypeEnum.PICKING.type;
        } else if (val.equals(OrderWkType.ORDER_WK_SALE_IN.val)) {
            return OrderTypeEnum.PICKING.type;
        } else if (val.equals(OrderWkType.ORDER_WK_BAG_IN.val)) {
            return OrderTypeEnum.PICKING.type;
        } else if (val.equals(OrderWkType.ORDER_WK_ORDER_OUT_EO.val)  || val.equals(OrderWkType.ORDER_WK_ORDER_OUT_SO.val)) {
            return OrderTypeEnum.TRANSFER.type;
        } else if (val.equals(OrderWkType.ORDER_WK_ORDER_OUT.val)) {
            return OrderTypeEnum.STOCK.type;
        }else {
            return null;
        }
    }
}
src/main/java/com/zy/api/service/KopenApiService.java
@@ -9,6 +9,7 @@
import com.zy.api.entity.StockUpOrderParams;
import com.zy.api.entity.SyncMatParmas;
import com.zy.api.entity.dto.XSR;
import com.zy.asrs.entity.Order;
public interface KopenApiService {
@@ -41,10 +42,12 @@
    /**
     * 上架派工单反馈
     *
     * @param params
     * @param order
     * @return
     */
    XSR getInDispatchResult(List<ReportOrderParam> params);
    XSR getInDispatchResult(List<ReportOrderParam> params, Order order);
    /**
     * 备货指示派工单下发
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;
    /**
     * 接收下发订单信息
@@ -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,52 @@
            }
            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());
        }
    }
    /**
     * 获取自定义请求头
     * @author Ryan
     * @date 2025/12/29 9:11
     * @return java.util.Map<java.lang.String,java.lang.Object>
     */
    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;
    }
    /* */
@@ -296,6 +341,8 @@
                // 备货指示派工单(EO/SO)出库
                order = orderService.selectOne(new EntityWrapper<Order>().eq("order_no",
                        orderParams.getDispatch_no()));
            } else {
                throw new CoolException("单据类型不存在,不支持添加!!");
            }
        } else {
            throw new CoolException("单据类型不存在,不支持添加!!");
@@ -340,7 +387,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()))) {
            // 出库
@@ -593,4 +641,8 @@
        });
    }
    private String kopen() {
        return url + ":" + port + prefix;
    }
}
src/main/java/com/zy/asrs/entity/Order.java
@@ -220,6 +220,10 @@
    @TableField("ship_code")
    private String shipCode;
    @ApiModelProperty("上报次数")
    @TableField("report_once")
    private Integer reportOnce;
    /**
     * 订单状态
     */
src/main/java/com/zy/asrs/enums/OrderTypeEnum.java
@@ -2,7 +2,7 @@
public enum OrderTypeEnum {
    //上架派工单
    PICKING(1, "上架派工单"),
    PICKING(0, "上架派工单"),
    //备货派工单
    TRANSFER(2, "备货派工单"),
    INVENTORY(3, "盘点单"),
src/main/java/com/zy/asrs/task/OrderSyncScheduler.java
@@ -118,6 +118,7 @@
                    if (!result.isSuccess()) {
                        log.error("单据[orderNo={}]上报erp失败", order.getOrderNo());
                    }
                } catch (Exception e) {
                    log.error(e.getMessage());
                    log.error("单据[orderNo={}]上报erp失败", order.getOrderNo());
src/main/java/com/zy/asrs/task/handler/OrderSyncHandler.java
@@ -14,11 +14,11 @@
import com.zy.api.entity.StockAdjustParams;
import com.zy.api.entity.StockUpOrderParams;
import com.zy.api.entity.dto.XSR;
import com.zy.api.enums.MatLocType;
import com.zy.api.service.KopenApiService;
import com.zy.asrs.entity.*;
import com.zy.asrs.enums.OrderTypeEnum;
import com.zy.asrs.service.*;
import com.zy.asrs.service.impl.CheckOrderDetlServiceImpl;
import com.zy.asrs.task.AbstractHandler;
import com.zy.asrs.task.core.ReturnT;
import com.zy.asrs.utils.OrderInAndOutUtil;
@@ -47,8 +47,6 @@
@Service
public class OrderSyncHandler extends AbstractHandler<String> {
    private final CheckOrderDetlServiceImpl checkOrderDetlService;
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
@@ -67,10 +65,11 @@
    private KopenApiService kopenApiService;
    @Autowired
    private MatService matService;
    @Autowired
    private LocDetlService locDetlService;
    @Autowired
    CheckOrderDetlService checkOrderDetlService;
    OrderSyncHandler(CheckOrderDetlServiceImpl checkOrderDetlService) {
        this.checkOrderDetlService = checkOrderDetlService;
    }
    @Transactional
    public ReturnT<String> startOrderIssuedOnceMore(Order order) {
@@ -256,12 +255,13 @@
            ReportOrderParam orderParam = new ReportOrderParam();
            orderParam.setCompany_id(order.getCstmrName())
                    .setWms_id(order.getId() + "")
                    .setOrder_no(order.getOrderNo())
//                    .setOrder_no(order.getOrderNo())
                    .setDispatch_no(order.getOrderNo())
                    .setType(order.getDocType() + "")
                    .setInv_no(order.getNumber())
                    .setPm_tktid(order.getItemName())
                    .setUpdate_time(Utils.dateToStr(new Date(), "yyyy-MM-dd HH:mm:ss"))
                    .setTarget_location("");
                    .setTarget_location("1");
            List<ReportOrderParams> reportOrderParams = new ArrayList<>();
            orderDetls.forEach(detl -> {
@@ -270,6 +270,15 @@
                    throw new CoolException("物料不存在");
                }
                ReportOrderParams itemParam = new ReportOrderParams();
                LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>()
                        .eq("matnr", detl.getMatnr())
                        .eq("supp_code", detl.getSuppCode())
                        .eq("order_no", detl.getOrderNo()));
                if (Objects.isNull(locDetl)) {
                    throw new CoolException("库存明细不存在 ,请检查单据是否完成!!");
                }
                // BS Code
                itemParam.setTotal_serial(detl.getThreeCode())
                        // 上报时,默认产品类型是null
@@ -278,14 +287,11 @@
                        .setPro_komcode(detl.getMatnr())
                        // 上报时,默认产品id是供应商编码
                        .setPro_id(detl.getSuppCode())
                        // 上报时,默认来源位置是null
                        .setLocation_no(null)
                        // 上报时,默认目标位置是null
                        .setLocation_type(null)
                        .setLocation_no(locDetl.getZpallet())
                        .setSj_emp(locDetl.getModiUser$())
                        .setLocation_type(MatLocType.getMatTag(material.getTagId()  + ""))
                        // 上报时,默认上报时间是更新时间
                        .setSj_date(order.getUpdateBy().toString())
                        // 上报时,默认上报人是更新人
                        .setSj_emp(order.getUpdateBy$())
                        .setSj_date(Utils.dateToStr(order.getUpdateTime(), "yyyy-MM-dd HH:mm:ss") )
                        // 上报时,默认上报数量是订单数量
                        .setPick_qty(detl.getQty().intValue())
                        // 上报时,默认损坏数量是0
@@ -303,8 +309,11 @@
            try {
                List<ReportOrderParam> orderParams = new ArrayList<>();
                orderParams.add(orderParam);
                response = kopenApiService.getInDispatchResult(orderParams);
                if (order.getReportOnce() < 4) {
                    response = kopenApiService.getInDispatchResult(orderParams, order);
                } else {
                    return FAIL;
                }
                // if (true) {
                // success = true;
                // // 修改订单状态 4.完成 ===>> 6.已上报
src/main/java/com/zy/common/utils/HttpHandler.java
@@ -4,6 +4,7 @@
import okhttp3.*;
import java.io.IOException;
import java.util.Date;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.TimeUnit;
@@ -81,6 +82,13 @@
            RequestBody body = RequestBody.create(MEDIA_TYPE, json);
            Request.Builder builder = headerBuilder.url((https?"https://":"http://")+uri+path);
            builder.header("Content-Type", "application/json;charset=UTF-8");
            builder.header("api_key", "WMS");
            builder.header("charset", "UTF-8");
            builder.header("timestamp", "1443429483688");
//            builder.header("timestamp", String.valueOf(new Date().getTime()));
            builder.header("format", "xml");
            builder.header("signature", "c56ced444ed772098ffeb59537bbfa59");
            request = builder.post(body).build();
        }
src/main/resources/application-dev.yml
@@ -12,7 +12,7 @@
    driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
    username: sa
    password: sa@123
    url: jdbc:sqlserver://172.24.103.147:1433;databasename=jsxsasrs
    url: jdbc:sqlserver://192.168.4.15:1433;databasename=jsxsasrs
  mvc:
    static-path-pattern: /**
  redis:
@@ -84,7 +84,7 @@
  #  开关
  switch:
    #计时器上报开关
    ErpReportOld: false
    ErpReportOld: true
    #获取单据开关
    InboundOrderSwitch: false
    #登录接口开关
@@ -113,7 +113,9 @@
#KOPEN小松平台
kopen:
  url: webservice.kopen.com.cn
  port: 1482
  prefix: /kc-api/api/wms
#AGV调度
hlk: