自动化立体仓库 - WMS系统
zhangc
2025-01-03 5e802e25e196adaf64487bd06103126b5e51187d
添加MES库存同步功能及配置
3个文件已添加
6个文件已修改
372 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/entity/MesLocDetl.java 311 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/MesLocDetlMapper.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/ReportDataScheduler.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/ReportDataHandler.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-dev.yml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-loc.yml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-prod.yml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/MesLocDetlMapper.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/MesLocDetl.java
New file
@@ -0,0 +1,311 @@
package com.zy.asrs.entity;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableName;
import com.core.common.Cools;
import com.core.common.SpringUtils;
import com.zy.asrs.service.LocMastService;
import com.zy.common.utils.Synchro;
import com.zy.system.entity.User;
import com.zy.system.service.UserService;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Date;
@Data
@TableName("mes_loc_detl")
@ExcelIgnoreUnannotated
public class MesLocDetl implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value= "库位号")
    @TableField("loc_no")
    private String locNo;
    @ApiModelProperty(value= "托盘条码")
    private String zpallet;
    @ApiModelProperty(value= "数量")
    @ExcelProperty("数量")
    private Double anfme;
    @ApiModelProperty(value= "物料号")
    @ExcelProperty("物料号")
    private String matnr;
    @ApiModelProperty(value= "物料号")
    @ExcelProperty("物料号")
    private String maktx;
    @ApiModelProperty(value= "序列码")
    @ExcelProperty("序列码")
    private String batch;
    @ApiModelProperty(value= "单据编号")
    @ExcelProperty("单据编号")
    @TableField("order_no")
    private String orderNo;
    @ApiModelProperty(value= "规格")
    private String specs;
    @ApiModelProperty(value= "批次")
    private String model;
    @ApiModelProperty(value= "颜色")
    private String color;
    @ApiModelProperty(value= "品牌")
    private String brand;
    @ApiModelProperty(value= "单位")
    private String unit;
    @ApiModelProperty(value= "单价")
    private Double price;
    @ApiModelProperty(value= "sku")
    private String sku;
    @ApiModelProperty(value= "包数")
    private Double units;
    @ApiModelProperty(value= "条码")
    private String barcode;
    @ApiModelProperty(value= "物料状态")
    private String origin;
    @ApiModelProperty(value= "厂家")
    private String manu;
    @ApiModelProperty(value= "单据时间")
    @TableField("manu_date")
    private String manuDate;
    @ApiModelProperty(value= "品项数")
    @TableField("item_num")
    private String itemNum;
    @ApiModelProperty(value= "安全库存量")
    @TableField("safe_qty")
    private Double safeQty;
    @ApiModelProperty(value= "重量")
    private Double weight;
    @ApiModelProperty(value= "长度")
    private Double length;
    @ApiModelProperty(value= "体积")
    private Double volume;
    @ApiModelProperty(value= "三方编码")
    @TableField("three_code")
    private String threeCode;
    @ApiModelProperty(value= "供应商")
    private String supp;
    @ApiModelProperty(value= "供应商编码")
    @TableField("supp_code")
    private String suppCode;
    @ApiModelProperty(value= "是否批次 1: 是  0: 否  ")
    @TableField("be_batch")
    private Integer beBatch;
    @ApiModelProperty(value= "保质期")
    @TableField("dead_time")
    private String deadTime;
    @ApiModelProperty(value= "预警天数")
    @TableField("dead_warn")
    private Integer deadWarn;
    @ApiModelProperty(value= "制购 1: 制造  2: 采购  3: 外协  ")
    private Integer source;
    @ApiModelProperty(value= "要求检验 1: 是  0: 否  ")
    private Integer inspect;
    @ApiModelProperty(value= "危险品 1: 是  0: 否  ")
    private Integer danger;
    @ApiModelProperty(value= "修改人员")
    @TableField("modi_user")
    private Long modiUser;
    @ApiModelProperty(value= "修改时间")
    @TableField("modi_time")
    private Date modiTime;
    @ApiModelProperty(value= "创建者")
    @TableField("appe_user")
    private Long appeUser;
    @ApiModelProperty(value= "添加时间")
    @TableField("appe_time")
    private Date appeTime;
    @ApiModelProperty(value= "备注")
    private String memo;
    @TableField("stock_freeze")
    @ApiModelProperty(value= "库存冻结{1:正常,0:冻结}")
    private Integer stockFreeze;
    /**
     * 库存数量
     */
    @ApiModelProperty(value= "可出数量")
    @TableField(exist = false)
    private Double stock;
    /**
     * 库存数量
     */
    @ApiModelProperty(value= "可出数量")
    @TableField(exist = false)
    private String locSts;
    /**
     * 库存数量
     */
    @ApiModelProperty(value= "可出数量")
    @TableField(exist = false)
    private String locSts$;
    /**
     * 工序状态
     */
    @ApiModelProperty(value= "工序状态 1:待加工,2:已加工,3:无需加工")
    @TableField("process_sts")
    private Integer processSts;
    public String getProcessSts$(){
        if (null == this.processSts){ return null; }
        switch (this.processSts){
            case 0:
                return "其他";
            case 1:
                return "待加工";
            case 2:
                return "已加工";
            case 3:
                return "无需加工";
            default:
                return String.valueOf(this.processSts);
        }
    }
    public String getLocNo$(){
        LocMastService service = SpringUtils.getBean(LocMastService.class);
        LocMast locMast = service.selectById(this.locNo);
        if (!Cools.isEmpty(locMast)){
            return String.valueOf(locMast.getLocNo());
        }
        return null;
    }
    public String getBeBatch$(){
        if (null == this.beBatch){ return null; }
        switch (this.beBatch){
            case 1:
                return "是";
            case 0:
                return "否";
            default:
                return String.valueOf(this.beBatch);
        }
    }
    public String getSource$(){
        if (null == this.source){ return null; }
        switch (this.source){
            case 1:
                return "制造";
            case 2:
                return "采购";
            case 3:
                return "外协";
            default:
                return String.valueOf(this.source);
        }
    }
    public String getInspect$(){
        if (null == this.inspect){ return null; }
        switch (this.inspect){
            case 1:
                return "是";
            case 0:
                return "否";
            default:
                return String.valueOf(this.inspect);
        }
    }
    public String getDanger$(){
        if (null == this.danger){ return null; }
        switch (this.danger){
            case 1:
                return "是";
            case 0:
                return "否";
            default:
                return String.valueOf(this.danger);
        }
    }
    public String getModiUser$(){
        UserService service = SpringUtils.getBean(UserService.class);
        User user = service.selectById(this.modiUser);
        if (!Cools.isEmpty(user)){
            return String.valueOf(user.getUsername());
        }
        return null;
    }
    public String getModiTime$(){
        if (Cools.isEmpty(this.modiTime)){
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.modiTime);
    }
    public String getAppeUser$(){
        UserService service = SpringUtils.getBean(UserService.class);
        User user = service.selectById(this.appeUser);
        if (!Cools.isEmpty(user)){
            return String.valueOf(user.getUsername());
        }
        return null;
    }
    public String getAppeTime$(){
        if (Cools.isEmpty(this.appeTime)){
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.appeTime);
    }
    public void sync(Object source) {
        Synchro.Copy(source, this);
    }
    public String getStockFreeze$() {
        if (Cools.isEmpty(this.stockFreeze)){
            return "";
        }
        return this.stockFreeze == 1 ? "正常" : "冻结";
    }
}
src/main/java/com/zy/asrs/mapper/MesLocDetlMapper.java
New file
@@ -0,0 +1,13 @@
package com.zy.asrs.mapper;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.zy.asrs.entity.AgvLocDetl;
import com.zy.asrs.entity.MesLocDetl;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
@Mapper
@Repository
public interface MesLocDetlMapper extends BaseMapper<MesLocDetl> {
}
src/main/java/com/zy/asrs/task/ReportDataScheduler.java
@@ -15,7 +15,6 @@
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@@ -56,6 +55,9 @@
    @Value("${mes.getTokenPath}")
    private String getTokenPath;
    @Value("${mes.stock}")
    private String stock;
    @Scheduled(fixedDelay = 5000)
@@ -118,4 +120,15 @@
        }
    }
    public void executeStock() {
        log.info("Stock定时任务开始执行");
        if (!flag) {
            return;
        }
        Map<String, Object> mesTokenInfo = getMesTokenInfo();
        reportDataHandler.stock(mesTokenInfo);
        log.info("Stock定时任务结束执行");
    }
}
src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java
@@ -738,12 +738,12 @@
            if (IN_TYPE_LIST.contains(agvWrkMast.getIoType())) {
                reportMesPakinOrder(agvWrkMast, data);
            }
            if (OUT_TYPE_List.contains(agvWrkMast.getIoType())) {
                reportMesPakoutOrder(agvWrkMast, data);
            }
            if (MOVE_TYPE_List.contains(agvWrkMast.getIoType())) {
                generateMesParam(agvWrkMast, data);
            }
//            if (OUT_TYPE_List.contains(agvWrkMast.getIoType())) {
//                reportMesPakoutOrder(agvWrkMast, data);
//            }
//            if (MOVE_TYPE_List.contains(agvWrkMast.getIoType())) {
//                generateMesParam(agvWrkMast, data);
//            }
        }
    }
src/main/java/com/zy/asrs/task/handler/ReportDataHandler.java
@@ -57,6 +57,9 @@
    @Value("${mes.pakoutReportPath}")
    private String pakoutReportPath;
    @Value("${mes.stock}")
    private String stock;
    @Transactional
    public ReturnT<String> start(ReportData data, Map<String, Object> mesTokenInfo) {
@@ -113,4 +116,12 @@
        }
        return response;
    }
    @Transactional
    public ReturnT<String> stock(Map<String, Object> mesTokenInfo) {
        String result = doHttpRequest("{}", mesTokenInfo, "同步MES库存", url, stock, null, "127.0.0.1");
        return SUCCESS;
    }
}
src/main/resources/application-dev.yml
@@ -103,6 +103,7 @@
  getTokenPath: /api/openapi/domain/api/v1/access_token/_get_access_token
  appKey: cli_1712644281065780
  appSecret: 6710d24e31e64adc963d4c213b2c9b8e
  stock: /inventory/open/v1/material_inventory/_list_sum_inventory
agvBasDev:
  maxWorkNum: 1
src/main/resources/application-loc.yml
@@ -104,6 +104,7 @@
  getTokenPath: /api/openapi/domain/api/v1/access_token/_get_access_token
  appKey: cli_1712644281065780
  appSecret: 6710d24e31e64adc963d4c213b2c9b8e
  stock: /inventory/open/v1/material_inventory/_list_sum_inventory
agvBasDev:
  maxWorkNum: 1
src/main/resources/application-prod.yml
@@ -103,6 +103,7 @@
  getTokenPath: /api/openapi/domain/api/v1/access_token/_get_access_token
  appKey: cli_1712644281065780
  appSecret: 6710d24e31e64adc963d4c213b2c9b8e
  stock: /inventory/open/v1/material_inventory/_list_sum_inventory
agvBasDev:
  maxWorkNum: 1
src/main/resources/mapper/MesLocDetlMapper.xml
New file
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zy.asrs.mapper.MesLocDetlMapper">
</mapper>