zjj
2024-05-13 f69bc4779fa1abd564fdfea2c99aced36d90b5f8
#二楼
17个文件已修改
6个文件已添加
1398 ■■■■ 已修改文件
src/main/java/com/zy/asrs/entity/CombParam.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/MatnrCode.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/WaitPakin.java 304 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/WrkMastSta.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/MatnrCodeMapper.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/MatnrCodeService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/WrkMastService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 464 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MatnrCodeServiceImpl.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/utils/Utils.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/CodeBuilder.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/MainProcess.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/enums/RgvStatusType.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/command/RgvCommand.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/protocol/StaProtocol.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensDevpThread.java 195 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/ZyRgvThread.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 134 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/MatnrCodeMapper.xml 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/WaitPakinMapper.xml 47 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/WrkMastMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/WrkMastStaMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/CombParam.java
New file
@@ -0,0 +1,46 @@
package com.zy.asrs.entity;
import lombok.Data;
import java.util.List;
/**
 * Created by vincent on 2020/6/28
 */
@Data
public class CombParam {
    // 单据编号
    private String orderNo;
    // 托盘条码
    private String barcode;
    // 库位编号
    private String locno;
//    // 货主
//    private int owner;
    private List<CombMat> combMats;
    @Data
    public static class CombMat {
        // 单据编号
        private String orderNo;
        // 物料编号
        private String matnr;
        // 序列码
        private String batch;
        // 物料数量
        private Double anfme;
        private Double weight;
    }
}
src/main/java/com/zy/asrs/entity/MatnrCode.java
New file
@@ -0,0 +1,40 @@
package com.zy.asrs.entity;
import com.core.common.Cools;import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.enums.IdType;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import com.baomidou.mybatisplus.annotations.TableName;
import java.io.Serializable;
@Data
@TableName("man_matnr_code")
public class MatnrCode implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value= "")
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty(value= "")
    private Integer code;
    @ApiModelProperty(value= "")
    private String matnr;
    public MatnrCode() {}
    public MatnrCode(Integer code,String matnr) {
        this.code = code;
        this.matnr = matnr;
    }
//    MatnrCode matnrCode = new MatnrCode(
//            null,    //
//            null    //
//    );
}
src/main/java/com/zy/asrs/entity/WaitPakin.java
@@ -1,8 +1,13 @@
package com.zy.asrs.entity;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.IdType;
import com.core.common.Cools;
import com.core.common.SpringUtils;
import com.zy.system.entity.User;
import com.zy.system.service.UserService;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -16,82 +21,117 @@
    private static final long serialVersionUID = 1L;
    /**
     * 物料
     */
    @ApiModelProperty(value= "商品编号")
    private String matnr;
    /**
     * 物料描述
     */
    @ApiModelProperty(value= "商品名称")
    private String maktx;
    /**
     * 仓库号
     */
    @ApiModelProperty(value= "规格")
    private String lgnum;
    /**
     * 仓库号
     */
    @ApiModelProperty(value= "型号")
    private String type;
    /**
     * 仓库号
     */
    @ApiModelProperty(value= "条码")
    private String color;
    /**
     * 仓库号
     */
    @ApiModelProperty(value= "批号")
    private String supplier;
    /**
     * 仓库号
     */
    @ApiModelProperty(value= "单据编号")
    private String warehouse;
    /**
     * 仓库号
     */
    @ApiModelProperty(value= "品项数")
    private String brand;
    /**
     * 数量
     */
    @ApiModelProperty(value= "数量")
    private Double anfme;
    /**
     * 单位
     */
    @ApiModelProperty(value= "单位")
    private String altme;
    /**
     * 托盘条码
     */
    @TableId("zpallet")
    @ApiModelProperty(value= "托盘条码")
    private String zpallet;
    /**
     * 用户ID
     */
    @ApiModelProperty(value= "客户名称")
    private String bname;
    @ApiModelProperty(value= "数量")
    private Double anfme;
    @ApiModelProperty(value= "库位号")
    @TableField("loc_no")
    private Date locNo;
    private String locNo;
    @TableId("matnr")
    @ApiModelProperty(value= "商品编号")
    private String matnr;
    @ApiModelProperty(value= "商品名称")
    private String maktx;
    @TableId("batch")
    @ApiModelProperty(value= "批号")
    private String batch;
    @ApiModelProperty(value= "单据编号")
    @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= "状态")
    private String status;
@@ -100,39 +140,124 @@
    @TableField("io_status")
    private String ioStatus;
    /**
     * 备注
     */
    @ApiModelProperty(value= "备注")
    private String memo;
    /**
     * 修改时间
     */
    @ApiModelProperty(value= "修改时间")
    @TableField("modi_time")
    private Date modiTime;
    /**
     * 修改人员
     */
    @ApiModelProperty(value= "修改人员")
    @TableField("modi_user")
    private Long modiUser;
    /**
     * 添加时间
     */
    @ApiModelProperty(value= "添加时间")
    @TableField("appe_time")
    private Date appeTime;
    /**
     * 创建者
     */
    @ApiModelProperty(value= "创建者")
    @TableField("appe_user")
    private Long appeUser;
    @ApiModelProperty(value= "备注")
    private String memo;
    /**
     * 拥有者
     */
    @ApiModelProperty(value= "拥有者 1: 杰克   ")
    private Integer owner;
    /**
     * 货物形态:0:代采、1:仓储
     */
    @ApiModelProperty(value= "货物形态:0:代采、1:仓储")
    private Integer payment;
    /**
     * uuid时间戳
     */
    @ApiModelProperty(value= "uuid")
    @TableId(value = "uuid", type = IdType.ID_WORKER_STR)
    @TableField("uuid")
    private String uuid;
    public String getUserName$(){
        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 getOwner$(){
//        LocOwnerService service = SpringUtils.getBean(LocOwnerService.class);
//        LocOwner locOwner = service.selectById(this.owner);
//        if (!Cools.isEmpty(locOwner)){
//            return String.valueOf(locOwner.getOwner());
//        }
//        return null;
//    }
    public String getPayment$(){
        if (null == this.payment){ return null; }
        switch (this.payment){
            case 1:
                return "仓储";
            case 0:
                return "代采";
            default:
                return String.valueOf(this.payment);
        }
    }
    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 getModiTime$(){
        if (Cools.isEmpty(this.modiTime)){
@@ -148,4 +273,7 @@
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.appeTime);
    }
//    public void sync(Object source) {
//        Synchro.Copy(source, this);
//    }
}
src/main/java/com/zy/asrs/entity/WrkMastSta.java
@@ -130,6 +130,26 @@
    @ApiModelProperty(value= "")
    @TableField("matnr2")
    private Integer matnr2;
    @ApiModelProperty(value= "")
    @TableField("type2")
    private Integer type2;
    @ApiModelProperty(value= "")
    @TableField("batch")
    private String batch;
    @ApiModelProperty(value= "")
    @TableField("batch2")
    private String batch2;
    @ApiModelProperty(value= "")
    @TableField("anfme")
    private Integer anfme;
    @ApiModelProperty(value= "")
    @TableField("anfme2")
    private Integer anfme2;
    public WrkMastSta() {}
    public WrkMastSta(Long wrkNo,Integer wrkStart,Integer wrkEnd,Integer staStart,Integer staEnd,Date createTime,Date updateTime,Integer type,Integer wrkSts,Integer lineNumber,Integer wrkType,Date bignTime,Integer wrkCrn) {
src/main/java/com/zy/asrs/mapper/MatnrCodeMapper.java
New file
@@ -0,0 +1,13 @@
package com.zy.asrs.mapper;
import com.zy.asrs.entity.MatnrCode;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
@Mapper
@Repository
public interface MatnrCodeMapper extends BaseMapper<MatnrCode> {
    MatnrCode selectByCode(Integer code);
}
src/main/java/com/zy/asrs/service/MatnrCodeService.java
New file
@@ -0,0 +1,9 @@
package com.zy.asrs.service;
import com.zy.asrs.entity.MatnrCode;
import com.baomidou.mybatisplus.service.IService;
public interface MatnrCodeService extends IService<MatnrCode> {
    MatnrCode selectByCode(Integer code);
}
src/main/java/com/zy/asrs/service/WrkMastService.java
@@ -21,4 +21,5 @@
    List<WrkMast> selectLaneWrkMast(Integer lane, Boolean pakIn);//查询指定巷道任务
    WrkMast selectByworkNo(Short workNo);
    WrkMast selectByworkNo(Integer workNo);
}
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -92,6 +92,8 @@
    private EmptyBarrelInService emptyBarrelInService;
    @Autowired
    private WrkMastStaService wrkMastStaService;
    @Autowired
    private MatnrCodeService matnrCodeService;
    @Value("${wms.url}")
    private String wmsUrl;
@@ -545,7 +547,7 @@
                        }
                        if (crnStn.getStaNo() == 1016 || crnStn.getStaNo() == 1019) {
                        if (crnStn.getStaNo() > 1013) {
                            // 更新工作档状态为13.RGV搬运中
                            wrkMast.setWrkSts(13L);
                        }else {
@@ -1328,8 +1330,9 @@
                // 站点条件判断
                if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable()
                        && staProtocol.isEmptyMk() && (staProtocol.getWorkNo() >= 9990
                        && staProtocol.getWorkNo() <= 9999) && staProtocol.isPakMk()) {
                        && (staProtocol.isEmptyMk() || staProtocol.getStaNo() == 9999)
//                        && (staProtocol.getWorkNo() >= 9990  && staProtocol.getWorkNo() <= 9999)
                        && staProtocol.isPakMk()) {
                    List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
                            .eq("sta_no", emptyInSta.getStaNo())
                            .eq("io_type", 10)
@@ -2489,7 +2492,7 @@
        }
    }
    public synchronized void RGVTaskPut(){
    public synchronized void RGVTaskCreate(){
        for (RgvSlave rgvSlave:slaveProperties.getRgv()){
            ZyRgvThread rgvThread = (ZyRgvThread)SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
            RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
@@ -2507,8 +2510,14 @@
                short sta1 = 0;
                short souSta2 = 0;
                short sta2 = 0;
                short matnr = 0;
                short matnr2 = 0;
                Integer matnr = 0;
                Integer matnr2 = 0;
                String batch = "";
                String batch2 = "";
                short type = 0;
                short type2 = 0;
                short anfme = 0;
                short anfme2 = 0;
                //工位一任务
                for (RgvSlave.Sta inStn :  rgvSlave.getInStn()){
@@ -2520,78 +2529,57 @@
                    } else {
                        staProtocol = staProtocol.clone();
                    }
                    if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.isPakMk()){
                        if (staProtocol.getWorkNo() > 0 && staProtocol.getWorkNo() <9900){
                    if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.isPakMk() && staProtocol.getWorkNo()>0){
                            WrkMast wrkMast = wrkMastService.selectByworkNo(staProtocol.getWorkNo());
                            if (Cools.isEmpty(wrkMast)){
                                log.error("未找到工作档");
                                continue;
                            }
                            workNo1 = wrkMast.getWrkNo();
                            souSta1 = Utils.getRgvStaNo(rgvSlave.getId(),wrkMast.getSourceStaNo());
                            souSta1 = Utils.getRgvStaNo(rgvSlave.getId(),staProtocol.getSiteId());
                            sta1 = Utils.getRgvEndStaNo(rgvSlave.getId(),wrkMast.getStaNo());
                            work1 = true;
                            devpThread.setPakMk(inStn.getSourceStaNo(),false);
                            break;
                        }
                        workNo1 = workNo++;
                        souSta1 = Utils.getRgvStaNo(rgvSlave.getId(),inStn.getSourceStaNo());
                        if (inStn.getSourceStaNo() == 4007 && staProtocol.getTongType() == 1){
                            sta1 = Utils.getRgvStaNo(rgvSlave.getId(),2103);
                        } else if (inStn.getSourceStaNo() == 4007 && staProtocol.getTongType() == 2) {
                            sta1 = Utils.getRgvStaNo(rgvSlave.getId(),2002);
                        }else {
                            sta1 = Utils.getRgvStaNo(rgvSlave.getId(),inStn.getStaNo());
                        }
                        work1 = true;
                        if (inStn.getSourcePlcId() == 4){
                            matnr = staProtocol.getMatnr();
                        }
                        devpThread.setPakMk(inStn.getSourceStaNo(),false);
                        break;
                    }
                }
                //工位二任务
                for (RgvSlave.Sta inStn :  rgvSlave.getInStn()){
                    if (souSta1 == inStn.getSourceStaNo()){
                        continue;
                    }
                    SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, inStn.getSourcePlcId());
                    StaProtocol staProtocol = devpThread.getStation().get(inStn.getSourceStaNo());
                    if (staProtocol == null) {
                        break;
//                    continue;
                    } else {
                        staProtocol = staProtocol.clone();
                    }
                    if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable()&& staProtocol.isPakMk()){
                        if (staProtocol.getWorkNo() > 0 && staProtocol.getWorkNo() <9900){
                            WrkMast wrkMast = wrkMastService.selectByworkNo(staProtocol.getWorkNo());
                            if (Cools.isEmpty(wrkMast)){
                                log.error("未找到工作档");
                                continue;
                            }
                            workNo2 = wrkMast.getWrkNo();
                            souSta2 = inStn.getSourceStaNo().shortValue();
                            sta2 = Utils.getRgvEndStaNo(rgvSlave.getId(),wrkMast.getStaNo());
                            work2 = true;
                            devpThread.setPakMk(inStn.getSourceStaNo(),false);
                if (rgvSlave.getId() != 3){
                    //工位二任务
                    for (RgvSlave.Sta inStn :  rgvSlave.getInStn()){
                        if (souSta1 == inStn.getSourceStaNo()){
                            continue;
                        }
                        SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, inStn.getSourcePlcId());
                        StaProtocol staProtocol = devpThread.getStation().get(inStn.getSourceStaNo());
                        if (staProtocol == null) {
                            break;
//                    continue;
                        } else {
                            staProtocol = staProtocol.clone();
                        }
                        workNo2 = workNo++;
                        souSta2 = inStn.getSourceStaNo().shortValue();
                        sta2 = inStn.getStaNo().shortValue();
                        work2 = true;
                        if (inStn.getSourcePlcId() == 4){
                            matnr2 = staProtocol.getMatnr();
                        }
                        devpThread.setPakMk(inStn.getSourceStaNo(),false);
                        break;
                        if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable()&& staProtocol.isPakMk() && staProtocol.getWorkNo()>0){
                                WrkMast wrkMast = wrkMastService.selectByworkNo(staProtocol.getWorkNo());
                                if (Cools.isEmpty(wrkMast)){
                                    log.error("未找到工作档");
                                    continue;
                                }
                                workNo2 = wrkMast.getWrkNo();
                                souSta2 = inStn.getSourceStaNo().shortValue();
                                sta2 = Utils.getRgvEndStaNo(rgvSlave.getId(),wrkMast.getStaNo());
                                work2 = true;
                                devpThread.setPakMk(inStn.getSourceStaNo(),false);
                                break;
                            }
                    }
                }
                if (work1 || work2){
                    //rgv任务下发--------------------------------------------------------------
@@ -2611,6 +2599,13 @@
                    command.setMatnr(matnr);
                    command.setMatnr2(matnr2);
                    command.setBatch(batch);
                    command.setBatch2(batch2);
                    command.setAnfme(anfme);
                    command.setAnfme2(anfme2);
                    command.setType(type);
                    command.setType2(type2);
                    if (workNo1 == 0 && workNo2 !=0){
                        command.setTaskMode(RgvTaskModeType.FETCH_PUT2); // 任务模式: 2取放货
@@ -2636,6 +2631,9 @@
    public synchronized void RGVTaskOver() {
        for (RgvSlave rgvSlave:slaveProperties.getRgv()) {
            if (rgvSlave.getId() ==2){
                continue;
            }
            ZyRgvThread rgvThread = (ZyRgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
            RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
            if (Cools.isEmpty(rgvProtocol)){
@@ -2646,12 +2644,84 @@
            //工位一任务完成
            if (rgvProtocol.getModeType() == RgvModeType.AUTO && rgvProtocol.getStatusType() == RgvStatusType.WAITING && rgvProtocol.getLoaded1() == 0) {
                try {
                    Wrapper<WrkMastSta> wrkMastStaWrapper = new EntityWrapper<WrkMastSta>().eq("wrk_crn", rgvProtocol.getRgvNo()).eq("wrk_no", rgvProtocol.getTaskNo1());
                    WrkMastSta wrkMastSta1 = wrkMastStaService.selectOne(wrkMastStaWrapper);
                    if (Cools.isEmpty(wrkMastSta1)){
                        log.error("完成{}号车工位一任务未找到对应rgv任务,{}",rgvProtocol.getRgvNo(),rgvProtocol.getTaskNo1());
                    }else {
                        if (wrkMastSta1.getWrkType() == 8 ){
                            wrkMastSta1.setWrkSts(3);
                            wrkMastStaService.update(wrkMastSta1,wrkMastStaWrapper);
                        }
                    }
                }catch (Exception e){
                    log.error("完成{}号车工位一任务出错!!!!!!!!!!!!!!!!,{}",rgvProtocol.getRgvNo(),rgvProtocol.getTaskNo1());
                    continue;
                }
                MessageQueue.offer(SlaveType.Rgv, rgvSlave.getId(), new Task(3,new RgvCommand()));
                log.info("{}号rgv工位一工作完成复位,工作号:{}",rgvSlave.getId(),rgvProtocol.getTaskNo1());
            }
            //工位二任务完成
            if (rgvProtocol.getModeType() == RgvModeType.AUTO && rgvProtocol.getStatusType() == RgvStatusType.WAITING2 && rgvProtocol.getLoaded2() == 0) {
                try {
                    Wrapper<WrkMastSta> wrkMastStaWrapper = new EntityWrapper<WrkMastSta>().eq("wrk_crn", rgvProtocol.getRgvNo()).eq("wrk_no", rgvProtocol.getTaskNo2());
                    WrkMastSta wrkMastSta1 = wrkMastStaService.selectOne(wrkMastStaWrapper);
                    if (Cools.isEmpty(wrkMastSta1)){
                        log.error("完成{}号车工位二任务未找到对应工作任务,{}",rgvProtocol.getRgvNo(),rgvProtocol.getTaskNo2());
                    }else {
                        if (wrkMastSta1.getWrkType() == 9 ){
                            wrkMastSta1.setWrkSts(3);
                            wrkMastStaService.update(wrkMastSta1,wrkMastStaWrapper);
                        }else if (wrkMastSta1.getWrkType() == 1){
                            wrkMastSta1.setWrkSts(3);
                            wrkMastStaService.update(wrkMastSta1,wrkMastStaWrapper);
                        }
                    }
                }catch (Exception e){
                    log.error("完成{}号车工位一任务出错!!!!!!!!!!!!!!!!,{}",rgvProtocol.getRgvNo(),rgvProtocol.getTaskNo1());
                    continue;
                }
                MessageQueue.offer(SlaveType.Rgv, rgvSlave.getId(), new Task(4,new RgvCommand()));
                log.info("{}号rgv工位二工作完成复位,工作号:{}",rgvSlave.getId(),rgvProtocol.getTaskNo2());
            }
        }
    }
    //二号rgv输送线命令下发
    public synchronized void RGVTaskput() {
        for (RgvSlave rgvSlave:slaveProperties.getRgv()) {
            if (rgvSlave.getId() ==2){
                continue;
            }
            ZyRgvThread rgvThread = (ZyRgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
            RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
            if (Cools.isEmpty(rgvProtocol)){
                continue;
            }else {
                rgvProtocol = rgvProtocol.clone();
            }
            //工位一任务完成
            if (rgvProtocol.getModeType() == RgvModeType.AUTO && rgvProtocol.getStatusType() == RgvStatusType.OUTSTN1 && rgvProtocol.getLoaded1() == 1) {
                WrkMastSta wrkMastSta = wrkMastStaService.selectByRgvNoandWrkNo(rgvProtocol.getRgvNo(), rgvProtocol.getTaskNo1());
                WrkMast wrkMast = wrkMastService.selectByworkNo(rgvProtocol.getTaskNo1());
                if (Cools.isEmpty(wrkMastSta)){
                    log.error("未查询到rgv工作任务,rgv编号{},工作号{}",rgvProtocol.getRgvNo(),rgvProtocol.getTaskNo1());
                    continue;
                }
                for (RgvSlave.Sta outStn :rgvSlave.getOutStn()){
                    if (!Objects.equals(Utils.getStaNo(rgvSlave.getId(), wrkMastSta.getWrkEnd()), outStn.getStaNo())){
                        continue;
                    }
                    SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, outStn.getStaPlcId());
                    StaProtocol staProtocol = devpThread.getStation().get(outStn.getStaNo());
                    if (staProtocol == null) {
@@ -2659,29 +2729,26 @@
                    } else {
                        staProtocol = staProtocol.clone();
                    }
                    if (staProtocol.isAutoing() && staProtocol.isLoading()  && staProtocol.isPakMk()){
                    if (staProtocol.isAutoing() && !staProtocol.isLoading()  && staProtocol.isPakMk()){
                        staProtocol.setWorkNo(wrkMastSta.getWrkNo().shortValue());
                        staProtocol.setStaNo(wrkMastSta.getWrkEnd().shortValue());
                        if (!MessageQueue.offer(SlaveType.Devp, outStn.getStaPlcId(), new Task(2, staProtocol))) {
                            continue;
                        }
                        staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
                        MessageQueue.offer(SlaveType.Devp, outStn.getStaPlcId(), new Task(2, staProtocol));
                    }
                }
                MessageQueue.offer(SlaveType.Rgv, rgvSlave.getId(), new Task(3,new RgvCommand()));
                log.info("{}号rgv工位一工作完成复位,工作号:{}",rgvSlave.getId(),wrkMastSta.getWrkNo());
            }
            //工位二任务完成
            if (rgvProtocol.getModeType() == RgvModeType.AUTO && rgvProtocol.getStatusType() == RgvStatusType.WAITING2 && rgvProtocol.getLoaded1() == 0) {
                WrkMastSta wrkMastSta = wrkMastStaService.selectByRgvNoandWrkNo2(rgvProtocol.getRgvNo(), rgvProtocol.getTaskNo2());
            if (rgvProtocol.getModeType() == RgvModeType.AUTO && rgvProtocol.getStatusType() == RgvStatusType.OUTSTN8 && rgvProtocol.getLoaded2() == 1) {
                WrkMastSta wrkMastSta = wrkMastStaService.selectByRgvNoandWrkNo(rgvProtocol.getRgvNo(), rgvProtocol.getTaskNo2());
                WrkMast wrkMast = wrkMastService.selectByworkNo(rgvProtocol.getTaskNo2());
                if (Cools.isEmpty(wrkMastSta)){
                    log.error("未查询到rgv工作任务,rgv编号{},工作号{}",rgvProtocol.getRgvNo(),rgvProtocol.getTaskNo2());
                    continue;
                }
                for (RgvSlave.Sta outStn :rgvSlave.getOutStn()){
                    if (wrkMastSta.getStaEnd() != outStn.getStaNo()){
                        continue;
                    }
                    SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, outStn.getStaPlcId());
                    StaProtocol staProtocol = devpThread.getStation().get(outStn.getStaNo());
                    if (staProtocol == null) {
@@ -2689,18 +2756,12 @@
                    } else {
                        staProtocol = staProtocol.clone();
                    }
                    if (staProtocol.isAutoing() && staProtocol.isLoading()  && staProtocol.isPakMk()){
//                        staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
////                        staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
//                        if (!MessageQueue.offer(SlaveType.Devp, outStn.getStaPlcId(), new Task(2, staProtocol))) {
//                            continue;
//                        }
                    if (staProtocol.isAutoing() && !staProtocol.isLoading()  && staProtocol.isPakMk()){
                        staProtocol.setWorkNo(wrkMastSta.getWrkNo2().shortValue());
                        staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
                        MessageQueue.offer(SlaveType.Devp, outStn.getStaPlcId(), new Task(2, staProtocol));
                    }
                }
                MessageQueue.offer(SlaveType.Rgv, rgvSlave.getId(), new Task(4,new RgvCommand()));
                log.info("{}号rgv工位二工作完成复位,工作号:{}",rgvSlave.getId(),wrkMastSta.getWrkNo2());
            }
        }
    }
@@ -2738,8 +2799,12 @@
                    if (outStn.getStaPlcId() == 2){
                        if (staProtocol.isAutoing() && !staProtocol.isLoading()  && staProtocol.isPakMk()){
                            staProtocol.setWorkNo(wrkMastSta.getWrkNo().shortValue());
                            staProtocol.setStaNo((short) 2106);
                            staProtocol.setMatnr(wrkMastSta.getMatnr1().shortValue());
                            if (wrkMastSta.getType() == 1){
                                staProtocol.setStaNo((short) 9999);
                            }else {
                                staProtocol.setStaNo((short) 2106);
                            }
                            staProtocol.setMatnr(wrkMastSta.getMatnr1());
                            if (!MessageQueue.offer(SlaveType.Devp, outStn.getStaPlcId(), new Task(2, staProtocol))) {
                                continue;
@@ -2751,8 +2816,8 @@
            }
            //工位二任务完成
            if (rgvProtocol.getModeType() == RgvModeType.AUTO && rgvProtocol.getStatusType() == RgvStatusType.OUTSTN8 && rgvProtocol.getLoaded1() == 1) {
                WrkMastSta wrkMastSta = wrkMastStaService.selectByRgvNoandWrkNo(rgvProtocol.getRgvNo(), rgvProtocol.getTaskNo2());
            if (rgvProtocol.getModeType() == RgvModeType.AUTO && rgvProtocol.getStatusType() == RgvStatusType.OUTSTN8 && rgvProtocol.getLoaded2() == 1) {
                WrkMastSta wrkMastSta = wrkMastStaService.selectByRgvNoandWrkNo2(rgvProtocol.getRgvNo(), rgvProtocol.getTaskNo2());
                if (Cools.isEmpty(wrkMastSta)){
                    log.error("未查询到rgv工作任务,rgv编号{},工作号{}",rgvProtocol.getRgvNo(),rgvProtocol.getTaskNo2());
                    continue;
@@ -2768,8 +2833,13 @@
                    if (outStn.getStaPlcId() == 2){
                        if (staProtocol.isAutoing() && !staProtocol.isLoading()  && staProtocol.isPakMk()){
                            staProtocol.setWorkNo(wrkMastSta.getWrkNo2().shortValue());
                            staProtocol.setStaNo((short) 2106);
                            staProtocol.setMatnr(wrkMastSta.getMatnr2().shortValue());
                            if (wrkMastSta.getType2() == 1){
                                staProtocol.setStaNo((short) 9999);
                            }else {
                                staProtocol.setStaNo((short) 2106);
                            }
                            staProtocol.setMatnr(wrkMastSta.getMatnr2());
                            if (!MessageQueue.offer(SlaveType.Devp, outStn.getStaPlcId(), new Task(2, staProtocol))) {
                                continue;
@@ -2797,12 +2867,50 @@
            //工位一任务完成
            if (rgvProtocol.getModeType() == RgvModeType.AUTO && rgvProtocol.getStatusType() == RgvStatusType.WAITING && rgvProtocol.getLoaded1() == 0) {
                try {
                    Wrapper<WrkMastSta> wrkMastStaWrapper = new EntityWrapper<WrkMastSta>().eq("wrk_crn", rgvProtocol.getRgvNo()).eq("wrk_no", rgvProtocol.getTaskNo1());
                    WrkMastSta wrkMastSta1 = wrkMastStaService.selectOne(wrkMastStaWrapper);
                    if (Cools.isEmpty(wrkMastSta1)){
                        log.error("完成{}号车工位一任务未找到对应rgv任务,{}",rgvProtocol.getRgvNo(),rgvProtocol.getTaskNo1());
                    }else {
                        if (wrkMastSta1.getWrkType() == 8 ){
                            wrkMastSta1.setWrkSts(3);
                            wrkMastStaService.update(wrkMastSta1,wrkMastStaWrapper);
                        }
                    }
                }catch (Exception e){
                    log.error("完成{}号车工位一任务出错!!!!!!!!!!!!!!!!,{}",rgvProtocol.getRgvNo(),rgvProtocol.getTaskNo1());
                    continue;
                }
                MessageQueue.offer(SlaveType.Rgv, rgvSlave.getId(), new Task(3,new RgvCommand()));
                log.info("{}号rgv工位一工作完成复位,工作号:{}",rgvSlave.getId(),rgvProtocol.getTaskNo1());
            }
            //工位二任务完成
            if (rgvProtocol.getModeType() == RgvModeType.AUTO && rgvProtocol.getStatusType() == RgvStatusType.WAITING2 && rgvProtocol.getLoaded1() == 0) {
            if (rgvProtocol.getModeType() == RgvModeType.AUTO && rgvProtocol.getStatusType() == RgvStatusType.WAITING2 && rgvProtocol.getLoaded2() == 0) {
                try {
                    Wrapper<WrkMastSta> wrkMastStaWrapper = new EntityWrapper<WrkMastSta>().eq("wrk_crn", rgvProtocol.getRgvNo()).eq("wrk_no", rgvProtocol.getTaskNo2());
                    WrkMastSta wrkMastSta1 = wrkMastStaService.selectOne(wrkMastStaWrapper);
                    if (Cools.isEmpty(wrkMastSta1)){
                        log.error("完成{}号车工位二任务未找到对应工作任务,{}",rgvProtocol.getRgvNo(),rgvProtocol.getTaskNo2());
                    }else {
                        if (wrkMastSta1.getWrkType() == 9 ){
                            wrkMastSta1.setWrkSts(3);
                            wrkMastStaService.update(wrkMastSta1,wrkMastStaWrapper);
                        }else if (wrkMastSta1.getWrkType() == 1){
                            wrkMastSta1.setWrkSts(3);
                            wrkMastStaService.update(wrkMastSta1,wrkMastStaWrapper);
                        }
                    }
                }catch (Exception e){
                    log.error("完成{}号车工位一任务出错!!!!!!!!!!!!!!!!,{}",rgvProtocol.getRgvNo(),rgvProtocol.getTaskNo1());
                    continue;
                }
                MessageQueue.offer(SlaveType.Rgv, rgvSlave.getId(), new Task(4,new RgvCommand()));
@@ -2832,7 +2940,185 @@
        wrkMastSta.setWrkType(command.getTaskMode().intValue());
        wrkMastSta.setMatnr1(command.getMatnr().intValue());
        wrkMastSta.setMatnr2(command.getMatnr2().intValue());
        wrkMastSta.setType(command.getType().intValue());
        wrkMastSta.setType2(command.getType2().intValue());
        wrkMastSta.setBatch(command.getBatch());
        wrkMastSta.setBatch2(command.getBatch2());
        wrkMastSta.setAnfme(command.getAnfme().intValue());
        wrkMastSta.setAnfme2(command.getAnfme2().intValue());
        return wrkMastStaService.insert(wrkMastSta);
    }
    //二期组托
    public synchronized void generateStoreWrkFile2() {
        // 根据输送线plc遍历
        for (DevpSlave devp : slaveProperties.getDevp()) {
            if (devp.getId() != 2){
                continue;
            }
            // 遍历入库口
            for (DevpSlave.Sta inSta : devp.getInSta()) {
                // 获取条码扫描仪信息
                BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode());
                if (barcodeThread == null) {
                    continue;
                }
                String barcode = barcodeThread.getBarcode();
  // 获取入库站信息
                SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
                StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo());
                if (staProtocol == null) {
                    continue;
                } else {
                    staProtocol = staProtocol.clone();
                }
                if (!Cools.isEmpty(barcode)) {
                    log.info("{}号条码扫描器检测条码信息:{}", inSta.getBarcode(), barcode);
                    if ("NG".endsWith(barcode) || "NoRead".equals(barcode)) {
                        continue;
                    }
                } else {
                    // led 异常显示
//                    LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
//                    if (ledThread != null) {
//                        String errorMsg = "扫码失败,请重试";
//                        MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
//                    }
                    continue;
                }
                // 判断是否满足入库条件
                if (staProtocol.isAutoing()
                        && staProtocol.isLoading()
                        && staProtocol.isInEnable()
                        && !staProtocol.isEmptyMk()
                        && staProtocol.getStaNo() != 9999
                        && staProtocol.isPakMk()) {
                    if(Cools.isEmpty(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode)) {
                        log.info("{}号条码扫描器检测条码信息:{}", inSta.getBarcode(), barcode);
                        //条码为空或者不符合,退库到
                        LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
                        if (ledThread != null) {
                            String errorMsg = "扫码失败,请重试";
                            MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
                        }
                        continue;
                    }
                    // 判断重复工作档
                    WrkMast wrkMast = new WrkMast();
                    if (barcode.length() == 8) {
                        wrkMast = wrkMastMapper.selectPakInStep1(inSta.getStaNo(), barcode);
                        if (wrkMast != null) {
                            log.error("工作档中已存在该站状态为( 2.设备上走 )的数据,工作号={}", wrkMast.getWrkNo());
                            continue;
                        }
                    }
//                     获取入库通知档
                    List<WaitPakin> waitPakins = waitPakinMapper.selectList(new EntityWrapper<WaitPakin>().eq("zpallet", barcode).eq("io_status", "N"));
                    if (waitPakins.isEmpty()) {
                        try {
                            CreateComb(barcode,staProtocol.getMatnr().intValue(),staProtocol.getWorkNo().intValue());
                        }catch (IOException e) {
                            throw new CoolException(e);
                        }
                    }else {
                        try {
                            LocTypeDto locTypeDto = new LocTypeDto(staProtocol);
                            SearchLocParam param = new SearchLocParam();
                            param.setBarcode(barcode);
                            param.setIoType(1);
                            param.setSourceStaNo(inSta.getStaNo());
                            param.setLocType1(locTypeDto.getLocType1());
                            String response = new HttpHandler.Builder()
                                    .setUri(wmsUrl)
                                    .setPath("/rpc/pakin/loc/v1")
                                    .setJson(JSON.toJSONString(param))
                                    .build()
                                    .doPost();
                            JSONObject jsonObject = JSON.parseObject(response);
                            LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
                            if (jsonObject.getInteger("code").equals(200)) {
                                StartupDto dto = jsonObject.getObject("data", StartupDto.class);
                                barcodeThread.setBarcode("");
                                staProtocol.setWorkNo(dto.getWorkNo().shortValue());
                                staProtocol.setStaNo(dto.getStaNo().shortValue());
                                devpThread.setPakMk(staProtocol.getSiteId(), false);
                                ledThread.errorReset();
                                boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                                if (!result) {
                                    throw new CoolException("更新plc站点信息失败");
                                }
                            } else if(jsonObject.getInteger("code").equals(700)) {
                                log.error(barcode + "托盘识别异常,请先进行组托!");
                                // led 异常显示
                                ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
                                if (ledThread != null) {
                                    String errorMsg = barcode + "托盘识别异常,请先进行组托!";
                                    MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
                                }
                            } else {
                                log.error("请求接口失败!!!url:{};request:{};response:{}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response);
                            }
                        } catch (Exception e) {
                            e.printStackTrace();
                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                        }
                    }
                }
            }
        }
    }
    public void CreateComb(String barcode,Integer code,Integer wrkNo) throws IOException {
        String batch = "";
        Double anfme = 0D;
        WrkMastSta wrkMastSta = wrkMastStaService.selectOne(new EntityWrapper<WrkMastSta>().eq("wrk_no", wrkNo));
        if (Cools.isEmpty(wrkMastSta)){
            wrkMastSta = wrkMastStaService.selectOne(new EntityWrapper<WrkMastSta>().eq("wrk_no2", wrkNo));
            if (Cools.isEmpty(wrkMastSta)){
                throw new  CoolException("未找到对应的任务信息");
            }
            batch = wrkMastSta.getBatch2();
            anfme = wrkMastSta.getAnfme2().doubleValue();
            code = wrkMastSta.getMatnr2();
        }else {
            batch = wrkMastSta.getBatch();
            anfme = wrkMastSta.getAnfme().doubleValue();
            code = wrkMastSta.getMatnr1();
        }
        MatnrCode matnrCode = matnrCodeService.selectByCode(code);
        if (Cools.isEmpty(matnrCode)){
            throw new  CoolException("未找到对应的物料信息");
        }
        CombParam combParam = new CombParam();
        ArrayList<CombParam.CombMat> combMats = new ArrayList<>();
        CombParam.CombMat combMat = new CombParam.CombMat();
        combParam.setBarcode(barcode);
        combMat.setMatnr(matnrCode.getMatnr());
        combMat.setBatch(batch);
        combMat.setAnfme(anfme);
        combMats.add(combMat);
        combParam.setCombMats(combMats);
        String response = new HttpHandler.Builder()
                .setUri(wmsUrl)
                .setPath("/mobile/comb/auth")
                .setJson(JSON.toJSONString(combParam))
                .build()
                .doPost();
        JSONObject jsonObject = JSON.parseObject(response);
        if (jsonObject.getInteger("code").equals(200)) {
        }
    }
}
src/main/java/com/zy/asrs/service/impl/MatnrCodeServiceImpl.java
New file
@@ -0,0 +1,16 @@
package com.zy.asrs.service.impl;
import com.zy.asrs.mapper.MatnrCodeMapper;
import com.zy.asrs.entity.MatnrCode;
import com.zy.asrs.service.MatnrCodeService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@Service("matnrCodeService")
public class MatnrCodeServiceImpl extends ServiceImpl<MatnrCodeMapper, MatnrCode> implements MatnrCodeService {
    @Override
    public MatnrCode selectByCode(Integer code) {
        return this.baseMapper.selectByCode(code);
    }
}
src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java
@@ -67,4 +67,8 @@
    public WrkMast selectByworkNo(Short workNo) {
        return this.baseMapper.selectByWrkNo(Integer.valueOf(workNo));
    }
    @Override
    public WrkMast selectByworkNo(Integer workNo) {
        return this.baseMapper.selectByWrkNo(workNo);
    }
}
src/main/java/com/zy/asrs/utils/Utils.java
@@ -9,6 +9,7 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
 * Created by vincent on 2020/8/27
@@ -19,13 +20,18 @@
    public static short getRgvStaNo(Integer rgvNo,Integer staNo){
        Map<Integer, Short> rgv1Map = new HashMap<>();
        rgv1Map.put(1014,(short)1);rgv1Map.put(1020,(short)2);
        rgv1Map.put(1023,(short)3);rgv1Map.put(1017,(short)4);
        rgv1Map.put(2013,(short)5);rgv1Map.put(2401,(short)6);
        rgv1Map.put(2114,(short)7);
        Map<Integer, Short> rgv2Map = new HashMap<>();
        rgv2Map.put(4007, (short) 1);rgv2Map.put(4001, (short) 2);
        rgv2Map.put(2003, (short) 3);rgv2Map.put(2103, (short) 4);
        rgv2Map.put(4016, (short) 5);rgv2Map.put(4010, (short) 6);
        rgv2Map.put(2301, (short) 7);rgv2Map.put(2002, (short) 8);
        rgv2Map.put(2001, (short) 9);
        rgv2Map.put(4016, (short) 6);rgv2Map.put(4010, (short) 7);
        rgv2Map.put(2301, (short) 5);rgv2Map.put(2002, (short) 8);
        rgv2Map.put(2102, (short) 9);
        Map<Integer, Short> rgv3Map = new HashMap<>();
        rgv3Map.put(2402,(short)1);rgv3Map.put(3001,(short)2);
        switch (rgvNo){
            case 1:
                return rgv1Map.get(staNo);
@@ -37,12 +43,45 @@
        return 0;
    }
    public static Integer getStaNo(Integer rgvNo,Integer staNo){
        Map<Integer, Short> rgv1Map = new HashMap<>();
        rgv1Map.put(1014,(short)1);rgv1Map.put(1020,(short)2);
        rgv1Map.put(1023,(short)3);rgv1Map.put(1017,(short)4);
        rgv1Map.put(2013,(short)5);rgv1Map.put(2401,(short)6);
        rgv1Map.put(2114,(short)7);
        Map<Integer, Short> rgv2Map = new HashMap<>();
        rgv2Map.put(4007, (short) 1);rgv2Map.put(4001, (short) 2);
        rgv2Map.put(2003, (short) 3);rgv2Map.put(2103, (short) 4);
        rgv2Map.put(4016, (short) 6);rgv2Map.put(4010, (short) 7);
        rgv2Map.put(2301, (short) 5);rgv2Map.put(2002, (short) 8);
        rgv2Map.put(2102, (short) 9);
        Map<Integer, Short> rgv3Map = new HashMap<>();
        rgv3Map.put(2402,(short)1);rgv3Map.put(3001,(short)2);
        rgv1Map.entrySet().stream().collect(Collectors.toMap(entity ->entity.getValue(),entity-> entity.getKey())).get(staNo);
        switch (rgvNo){
            case 1:
                return rgv1Map.entrySet().stream().collect(Collectors.toMap(entity ->entity.getValue(),entity-> entity.getKey())).get(staNo.shortValue());
            case 2:
                return rgv2Map.entrySet().stream().collect(Collectors.toMap(entity ->entity.getValue(),entity-> entity.getKey())).get(staNo.shortValue());
            case 3:
                return rgv3Map.entrySet().stream().collect(Collectors.toMap(entity ->entity.getValue(),entity-> entity.getKey())).get(staNo.shortValue());
        }
        return 0;
    }
    public static short getRgvEndStaNo(Integer rgvNo,Integer staNo){
        Map<Integer, Integer> rgv1Map = new HashMap<>();
        rgv1Map.put(3007,2401);rgv1Map.put(3012,2401);
        rgv1Map.put(4002,2013); rgv1Map.put(4011,2013);
        rgv1Map.put(2101,2013);rgv1Map.put(2001,2013);
        rgv1Map.put(1022,1020);rgv1Map.put(1025,1023);
        Map<Integer, Integer> rgv2Map = new HashMap<>();
        rgv2Map.put(4002,4001); rgv2Map.put(4011,4010);
        rgv2Map.put(2101,2102);
        rgv2Map.put(2101,2102);rgv2Map.put(2001,2002);
        Map<Integer, Integer> rgv3Map = new HashMap<>();
        rgv3Map.put(3007,3001);rgv3Map.put(3012,3001);
        rgv3Map.put(1022,2402);rgv3Map.put(1025,2402);
        rgv3Map.put(1016,2402);rgv3Map.put(1019,2402);
        switch (rgvNo){
            case 1:
                return getRgvStaNo(rgvNo,rgv1Map.get(staNo));
src/main/java/com/zy/common/CodeBuilder.java
@@ -20,7 +20,7 @@
        generator.url="127.0.0.1:1433;databasename=mdqdasrs";
        generator.username="sa";
        generator.password="sa@123";
        generator.table="man_emptyBarrel_in";
        generator.table="man_matnr_code";
        generator.packagePath="com.zy.asrs";
        generator.html = false;
        generator.htmlDetail = false;
src/main/java/com/zy/core/MainProcess.java
@@ -74,12 +74,16 @@
//                    //空桶出库完成
//                    mainService.crn5StnToOutStn();
                    //rgv任务
                    mainService.RGVTaskPut();
                    mainService.RGVTaskCreate();
                    //rgv1,3任务完成
                    mainService.RGVTaskput();
                    mainService.RGVTaskOver();
                    //rgv2任务完成
                    mainService.RGV2Taskput();
                    mainService.RGV2TaskOver();
                    //二期组托
                    mainService.generateStoreWrkFile2();
                } catch (Exception e) {
src/main/java/com/zy/core/enums/RgvStatusType.java
@@ -14,9 +14,13 @@
    OUTSTN1((short)5,"工作位1请求出站"),
    OUTSTN8((short)6,"工作位2请求出站"),
    WALKING((short) 9, "走行中"),
    WALKING((short) 7, "放货中"),
    WALKING2((short) 8, "等待货位2任务执行"),
    WAITING((short) 90, "工位一任务完成等待WCS确认"),
    WAITING2((short) 91, "工位二任务完成等待WCS确认"),
    WAITING3((short)98,"联机任务中断"),
    ALARM((short) 99, "报警"),
    OTHER((short) 100, "其他"),
    ;
src/main/java/com/zy/core/model/command/RgvCommand.java
@@ -53,9 +53,19 @@
    @JSONField(serialize = false)
    private RgvTaskModeType taskModeType;
    private Short matnr;
    private Integer matnr;
    private Short matnr2;
    private Integer matnr2;
    private Short type;
    private  Short type2;
    private String batch;
    private String batch2;
    private Short anfme;
    private Short anfme2;
    //**************工位2**************
src/main/java/com/zy/core/model/protocol/StaProtocol.java
@@ -23,7 +23,8 @@
    // ----------------------------------------------------------------
    // 物料代码
    private Short matnr;
    private Integer matnr;
    private String batch;
    // ----------------------------------------------------------------
    // 自动
src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -67,11 +67,17 @@
    }};
    public static final ArrayList<Integer> staNos5 = new ArrayList<Integer>() {{
        add(4001);add(4002);add(4003);add(4004);add(4005);add(4006);add(4007);
        add(4016);
    }};
    public static final ArrayList<Integer> staNos6 = new ArrayList<Integer>() {{
        add(4010);add(4011);add(4012);add(4013);add(4014);add(4015);add(4016);
        add(2007);add(2008);add(2009);add(2010);add(2011);add(2012);add(2013);
        add(2108);add(2109);add(2110);add(2111);add(2112);add(2113);add(2114);
        add(2401);add(2402);add(2403);
    }};
    public static final ArrayList<Integer> staNos7 = new ArrayList<Integer>() {{
        add(3001);add(3002);add(3003);add(3004);add(3005);add(3006);add(3007);
        add(3008);add(3009);add(3010);add(3011);add(3012);
    }};
@@ -94,17 +100,21 @@
    }};
    public static final ArrayList<Integer> writeStaNos4 = new ArrayList<Integer>() {{
        add(3001);
        add(3007);
        add(3012);
        add(4007);
    }};
    public static final ArrayList<Integer> writeStaNos5 = new ArrayList<Integer>() {{
        add(4001);add(4007);
        add(4016);
    }};
    public static final ArrayList<Integer> writeStaNos6 = new ArrayList<Integer>() {{
        add(4010);add(4016);
        add(2007);add(2008);add(2009);add(2010);add(2011);add(2012);add(2013);
        add(2108);add(2109);add(2110);add(2111);add(2112);add(2113);add(2114);
        add(2401);add(2402);add(2403);
    }};
    public static final ArrayList<Integer> writeStaNos7 = new ArrayList<Integer>() {{
        add(3001);add(3002);add(3003);add(3004);add(3005);add(3006);add(3007);
        add(3008);add(3009);add(3010);add(3011);add(3012);
    }};
    public static final ArrayList<Integer> errorStaNos1 = new ArrayList<Integer>() {{
@@ -117,6 +127,10 @@
    public static final ArrayList<Integer> errorStaNos4 = new ArrayList<Integer>() {{
        add(3007);add(3012);
    }};
    public static final ArrayList<Integer> errorStaNos7 = new ArrayList<Integer>() {{
        add(3006);add(3007);
    }};
    /**
@@ -152,6 +166,8 @@
                return staNos5;
            case 6:
                return staNos6;
            case 7:
                return staNos7;
            default:
                throw new CoolException("获取站点失败!");
        }
@@ -171,6 +187,8 @@
                return writeStaNos5;
            case 6:
                return writeStaNos6;
            case 7:
                return writeStaNos7;
            default:
                throw new CoolException("获取站点失败!");
        }
@@ -184,6 +202,8 @@
                return errorStaNos2;
            case 4:
                return errorStaNos4;
            case 7:
                return errorStaNos7;
            default:
                throw new CoolException("获取站点失败!");
        }
@@ -205,6 +225,8 @@
                    case 1:
                        switch (slave.getId()){
                            case 1:
                            case 6:
                            case 7:
                                read();break;
                            case 2:
                                read10();break;
@@ -212,6 +234,8 @@
                                read30();break;
                            case 4:
                                read33();break;
                            case 5:
                                read55();break;
                        }
                        break;
@@ -220,7 +244,9 @@
                        switch (slave.getId()){
                            case 1:
                            case 3:
                                write((StaProtocol)task.getData());
                            case 6:
                            case 7:
                                write((StaProtocol)task.getData());break;
                            case 2:
                                write10((StaProtocol)task.getData());break;
@@ -319,25 +345,62 @@
                    }
                }
            }
        } else if (slave.getId() == 7) {
            Thread.sleep(200);
            OperateResultExOne<byte[]> result2 = null;
            result2 = siemensS7Net.Read("DB101.104.0", (short) (barcodeSize * 8));
            if (result2.IsSuccess) {
                for (int i = 0; i < barcodeSize; i++) {
                    String barcode = siemensS7Net.getByteTransform().TransString(result2.Content, i * 8, 8, "UTF-8");
                    BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, i + 4);
                    if (!Cools.isEmpty(barcodeThread) && !barcodeThread.getBarcode().equals(barcode)) {
                        barcodeThread.setBarcode(barcode);
                    }
                }
            }
        }
        //报警信息
        Thread.sleep(200);
        OperateResultExOne<byte[]> result3 = null;
        result3 = siemensS7Net.Read("DB101.200.0", (short) (getErrorStaNo().size() * 4));
        if (result3.IsSuccess) {
            for (int i = 0; i < getErrorStaNo().size(); i++) {
                Integer siteId = getErrorStaNo().get(i); // 站点编号
                StaProtocol staProtocol = station.get(siteId);
        if (slave.getId() ==1){
            //报警信息
            Thread.sleep(200);
            OperateResultExOne<byte[]> result3 = null;
            result3 = siemensS7Net.Read("DB101.200.0", (short) (getErrorStaNo().size() * 4));
            if (result3.IsSuccess) {
                for (int i = 0; i < getErrorStaNo().size(); i++) {
                    Integer siteId = getErrorStaNo().get(i); // 站点编号
                    StaProtocol staProtocol = station.get(siteId);
//                staProtocol.setLocType1(siemensS7Net.getByteTransform().TransInt16(result.Content, i*4));   // 库位高度
                boolean[] status = siemensS7Net.getByteTransform().TransBool(result3.Content, i*4+2, 1);
                staProtocol.setFrontErr(status[0]);
                staProtocol.setBackErr(status[1]);
                staProtocol.setHighErr(status[2]);
                staProtocol.setLeftErr(status[3]);
                staProtocol.setRightErr(status[4]);
                staProtocol.setWeightErr(status[5]);
                staProtocol.setBarcodeErr(status[6]);
                    boolean[] status = siemensS7Net.getByteTransform().TransBool(result3.Content, i*4+2, 1);
                    staProtocol.setFrontErr(status[0]);
                    staProtocol.setBackErr(status[1]);
                    staProtocol.setHighErr(status[2]);
                    staProtocol.setLeftErr(status[3]);
                    staProtocol.setRightErr(status[4]);
                    staProtocol.setWeightErr(status[5]);
                    staProtocol.setBarcodeErr(status[6]);
                }
            }
        } else if (slave.getId() == 7) {
            //报警信息
            Thread.sleep(200);
            OperateResultExOne<byte[]> result3 = null;
            result3 = siemensS7Net.Read("DB101.96.0", (short) (getErrorStaNo().size() * 4));
            if (result3.IsSuccess) {
                for (int i = 0; i < getErrorStaNo().size(); i++) {
                    Integer siteId = getErrorStaNo().get(i); // 站点编号
                    StaProtocol staProtocol = station.get(siteId);
//                staProtocol.setLocType1(siemensS7Net.getByteTransform().TransInt16(result.Content, i*4));   // 库位高度
                    boolean[] status = siemensS7Net.getByteTransform().TransBool(result3.Content, i*4+2, 1);
                    staProtocol.setFrontErr(status[0]);
                    staProtocol.setBackErr(status[1]);
                    staProtocol.setHighErr(status[2]);
                    staProtocol.setLeftErr(status[3]);
                    staProtocol.setRightErr(status[4]);
                    staProtocol.setWeightErr(status[5]);
                    staProtocol.setBarcodeErr(status[6]);
                }
            }
        }
@@ -384,7 +447,7 @@
                }
                staProtocol.setWorkNo((short) siemensS7Net.getByteTransform().TransInt32(result.Content, i * 10));     // 工作号
                staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i*10 + 4 ));   // 目标站
                staProtocol.setMatnr(siemensS7Net.getByteTransform().TransInt16(result.Content, i*10 + 6 ));   // 目标站
                staProtocol.setMatnr((int) siemensS7Net.getByteTransform().TransInt16(result.Content, i * 10 + 6));   // 目标站
            }
        }
        Thread.sleep(200);
@@ -413,14 +476,14 @@
        }
        // 条码扫描器
        if(slave.getId() == 1) {
        if(slave.getId() == 2) {
            Thread.sleep(200);
            OperateResultExOne<byte[]> result2 = null;
            result2 = siemensS7Net.Read("DB101.208.0", (short) (barcodeSize * 8));
            result2 = siemensS7Net.Read("DB101.194.0", (short) (8));
            if (result2.IsSuccess) {
                for (int i = 0; i < barcodeSize; i++) {
                for (int i = 0; i < 1; i++) {
                    String barcode = siemensS7Net.getByteTransform().TransString(result2.Content, i * 8, 8, "UTF-8");
                    BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, i + 1);
                    BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, 3);
                    if (!Cools.isEmpty(barcodeThread) && !barcodeThread.getBarcode().equals(barcode)) {
                        barcodeThread.setBarcode(barcode);
                    }
@@ -523,13 +586,15 @@
        int staNoSize = staNos.size();
        OperateResultExOne<byte[]> result = siemensS7Net.Read("DB101.0", (short) (getStaNo().size() * 8));
        result = siemensS7Net.Read("DB101.0", (short) (getStaNo().size()*6));
        result = siemensS7Net.Read("DB101.0", (short) (getStaNo().size()*30));
        if (result.IsSuccess) {
            for (int i = 0; i < staNoSize; i++) {
                Integer siteId = staNos.get(i); // 站点编号
                boolean[] status = siemensS7Net.getByteTransform().TransBool(result.Content, i*4, 1);
                short tongType = siemensS7Net.getByteTransform().TransInt16(result.Content, i * 4 + 2);
                short matnr = siemensS7Net.getByteTransform().TransInt16(result.Content, i * 4 + 4);
                Integer matnr = siemensS7Net.getByteTransform().TransInt32(result.Content, i * 4 + 4);
                short amount =  siemensS7Net.getByteTransform().TransInt16(result.Content, i * 4 + 8);
                String batch = siemensS7Net.getByteTransform().TransString(result.Content, i * 4+10, 20, "UTF-8");
                StaProtocol staProtocol = station.get(siteId);
                if (null == staProtocol) {
                    staProtocol = new StaProtocol();
@@ -539,8 +604,76 @@
                staProtocol.setAutoing(status[0]);  // 自动
                staProtocol.setLoading(status[1]);  // 有物
                staProtocol.setInEnable(status[2]); // 可入
                staProtocol.setEmptyOutPalletRequire(status[3]);
                staProtocol.setMatnr(matnr);
                staProtocol.setTongType(tongType);
                staProtocol.setBatch(batch);
                staProtocol.setAmount(amount);
                staProtocol.setLow(true);
                if (!staProtocol.isPakMk() && !staProtocol.isLoading()) {
                    staProtocol.setPakMk(true);
                }
            }
        }
        if (result.IsSuccess) {
            OutputQueue.DEVP.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), slave.getId()));
            // 根据实时信息更新数据库
            try {
                List<BasDevp> basDevps = new ArrayList<>();
                for (Integer siteId : staNos) {
                    StaProtocol staProtocol = station.get(siteId);
                    basDevps.add(staProtocol.toSqlModel());
                }
                BasDevpService basDevpService = SpringUtils.getBean(BasDevpService.class);
                if (null != basDevpService && !basDevpService.updateBatchById(basDevps)) {
                    throw new Exception("更新数据库数据失败");
                }
            } catch (Exception e) {
                e.printStackTrace();
                OutputQueue.DEVP.offer(MessageFormat.format("【{0}】更新数据库数据失败 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
                log.error("更新数据库数据失败 ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
            }
        } else {
            OutputQueue.DEVP.offer(MessageFormat.format("【{0}】读取输送线plc状态信息失败 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
//            log.error("读取输送线plc状态信息失败 ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
        }
    }
    private void read55() throws InterruptedException {
        ArrayList<Integer> staNos = getStaNo();
        int staNoSize = staNos.size();
        OperateResultExOne<byte[]> result = siemensS7Net.Read("DB101.0", (short) (getStaNo().size() * 8));
        result = siemensS7Net.Read("DB101.0", (short) (getStaNo().size()*28));
        if (result.IsSuccess) {
            for (int i = 0; i < staNoSize; i++) {
                Integer siteId = staNos.get(i); // 站点编号
                boolean[] status = siemensS7Net.getByteTransform().TransBool(result.Content, i*4, 1);
//                short tongType = siemensS7Net.getByteTransform().TransInt16(result.Content, i * 4 + 2);
                Integer matnr = siemensS7Net.getByteTransform().TransInt32(result.Content, i * 4 + 2);
                short amount = siemensS7Net.getByteTransform().TransInt16(result.Content, i * 4 + 6);
                String batch = siemensS7Net.getByteTransform().TransString(result.Content, i * 4+8, 20, "UTF-8");
                StaProtocol staProtocol = station.get(siteId);
                if (null == staProtocol) {
                    staProtocol = new StaProtocol();
                    staProtocol.setSiteId(siteId);
                    station.put(siteId, staProtocol);
                }
                staProtocol.setAutoing(status[0]);  // 自动
                staProtocol.setLoading(status[1]);  // 有物
                staProtocol.setInEnable(status[2]); // 可入
                staProtocol.setEmptyOutPalletRequire(status[3]);
                staProtocol.setMatnr(matnr);
                staProtocol.setAmount(amount);
                staProtocol.setBatch(batch);
                staProtocol.setLow(true);
src/main/java/com/zy/core/thread/ZyRgvThread.java
@@ -108,7 +108,7 @@
     */
    private void readStatus(){
        try {
            OperateResultExOne<byte[]> result = siemensNet.Read("DB101.0", (short) 34);
            OperateResultExOne<byte[]> result = siemensNet.Read("DB101.0", (short) 38);
            if (result.IsSuccess) {
                if (null == rgvProtocol) {
                    rgvProtocol = new RgvProtocol();
@@ -126,6 +126,7 @@
                rgvProtocol.setxSpeed(siemensNet.getByteTransform().TransSingle(result.Content, 24));//备用2
                rgvProtocol.setxDistance(siemensNet.getByteTransform().TransSingle(result.Content, 28));//备用3
                rgvProtocol.setxDuration(siemensNet.getByteTransform().TransInt16(result.Content, 32));//备用4
                rgvProtocol.setLoaded2(siemensNet.getByteTransform().TransInt16(result.Content, 36));//工位1有物
                OutputQueue.RGV.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), slave.getId()));
src/main/resources/application.yml
@@ -147,7 +147,7 @@
  # 输送线1
  devp[0]:
    id: 1
    ip: 10.10.10.1
    ip: 10.10.10.111
    port: 102
    rack: 0
    slot: 0
@@ -225,6 +225,16 @@
    port: 102
    rack: 0
    slot: 0
    # 入库口1
    inSta[0]:
      staNo: 2106
      barcode: ${wcs-slave.barcode[2].id}
      backSta: 2105
      led: ${wcs-slave.led[0].id}
    # 空板入库口1
    emptyInSta[0]:
      staNo: 2106
      led: ${wcs-slave.led[0].id}
    # 输送线3
  devp[2]:
    id: 3
@@ -239,13 +249,40 @@
    port: 102
    rack: 0
    slot: 0
#  # 输送线5
#  devp[4]:
#    id: 5
#    ip: 10.10.10.33
#    port: 102
#    rack: 0
#    slot: 0
  # 输送线5
  devp[4]:
    id: 5
    ip: 10.10.10.55
    port: 102
    rack: 0
    slot: 0
  # 输送线5
  devp[5]:
    id: 6
    ip: 10.10.10.14
    port: 102
    rack: 0
    slot: 0
  # 输送线5
  devp[6]:
    id: 7
    ip: 10.10.10.20
    port: 102
    rack: 0
    slot: 0
    # 入库口1
    inSta[0]:
      staNo: 3006
      barcode: ${wcs-slave.barcode[3].id}
      backSta: 3007
      led: ${wcs-slave.led[0].id}
    # 入库口1
    inSta[1]:
      staNo: 3011
      barcode: ${wcs-slave.barcode[4].id}
      backSta: 3012
      led: ${wcs-slave.led[0].id}
#  # RGV1
  rgv[0]:
    id: 2
@@ -260,43 +297,51 @@
      staPlcId: 2
    inStn[1]:
      sourceStaNo: 2003
      sourcePlcId: 4
      sourcePlcId: 2
    inStn[2]:
      sourceStaNo: 2102
      sourcePlcId: 2
      staNo: 2103
      staPlcId: 2
    inStn[3]:
      sourceStaNo: 4016
      sourcePlcId: 5
      staNo: 2103
      staPlcId: 2
    outStn[0]:
      staNo: 2103
      staPlcId: 2
#  # RGV2
#  rgv[1]:
#    id: 2
#    ip: 10.10.10.121
#    port: 102
#    rack: 0
#    slot: 0
#    inStn[0]:
#      devpPlcId: ${wcs-slave.devp[0].id}
#      sourceStaNo: 3001
#    outStn[0]:
#      devpPlcId: ${wcs-slave.devp[0].id}
#      sourceStaNo: 2402
#  # RGV1
#  rgv[2]:
#    id: 3
#    ip: 10.10.10.122
#    port: 102
#    rack: 0
#    slot: 0
#    inStn[0]:
#      devpPlcId: ${wcs-slave.devp[0].id}
#      sourceStaNo: 2102
#    inStn[1]:
#      devpPlcId: ${wcs-slave.devp[0].id}
#      sourceStaNo: 4007
#    inStn[2]:
#      devpPlcId: ${wcs-slave.devp[0].id}
#      sourceStaNo: 4016
#    outStn[0]:
#      devpPlcId: ${wcs-slave.devp[0].id}
#      sourceStaNo: 2003
  # RGV2
  rgv[1]:
    id: 1
    ip: 10.10.10.133
    port: 102
    rack: 0
    slot: 0
  # RGV1
  rgv[2]:
    id: 3
    ip: 10.10.10.135
    port: 102
    rack: 0
    slot: 0
    inStn[0]:
      sourceStaNo: 2402
      sourcePlcId: 6
      staNo: 3001
      staPlcId: 7
    inStn[1]:
      sourceStaNo: 3001
      sourcePlcId: 7
      staNo: 2402
      staPlcId: 6
    outStn[0]:
      staNo: 2402
      staPlcId: 6
    outStn[1]:
      staNo: 3001
      staPlcId: 7
  # 条码扫描仪1
  barcode[0]:
@@ -318,6 +363,11 @@
    id: 4
    ip: 10.10.10.3
    port: 51236
  # 条码扫描仪4
  barcode[4]:
    id: 5
    ip: 10.10.10.3
    port: 51236
  # LED1
  led[0]:
src/main/resources/mapper/MatnrCodeMapper.xml
New file
@@ -0,0 +1,17 @@
<?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.MatnrCodeMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.zy.asrs.entity.MatnrCode">
        <id column="id" property="id" />
        <result column="code" property="code" />
        <result column="matnr" property="matnr" />
    </resultMap>
    <select id="selectByCode" resultMap="BaseResultMap">
        select * from man_matnr_code
        where code = #{code}
    </select>
</mapper>
src/main/resources/mapper/WaitPakinMapper.xml
@@ -4,27 +4,52 @@
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.zy.asrs.entity.WaitPakin">
        <result column="zpallet" property="zpallet" />
        <result column="loc_no" property="locNo" />
        <result column="anfme" property="anfme" />
        <result column="matnr" property="matnr" />
        <result column="maktx" property="maktx" />
        <result column="lgnum" property="lgnum" />
        <result column="type" property="type" />
        <result column="batch" property="batch" />
        <result column="order_no" property="orderNo" />
        <result column="specs" property="specs" />
        <result column="model" property="model" />
        <result column="color" property="color" />
        <result column="supplier" property="supplier" />
        <result column="warehouse" property="warehouse" />
        <result column="brand" property="brand" />
        <result column="anfme" property="anfme" />
        <result column="altme" property="altme" />
        <result column="zpallet" property="zpallet" />
        <result column="bname" property="bname" />
        <result column="loc_no" property="locNo" />
        <result column="unit" property="unit" />
        <result column="price" property="price" />
        <result column="sku" property="sku" />
        <result column="units" property="units" />
        <result column="barcode" property="barcode" />
        <result column="origin" property="origin" />
        <result column="manu" property="manu" />
        <result column="manu_date" property="manuDate" />
        <result column="item_num" property="itemNum" />
        <result column="safe_qty" property="safeQty" />
        <result column="weight" property="weight" />
        <result column="length" property="length" />
        <result column="volume" property="volume" />
        <result column="three_code" property="threeCode" />
        <result column="supp" property="supp" />
        <result column="supp_code" property="suppCode" />
        <result column="be_batch" property="beBatch" />
        <result column="dead_time" property="deadTime" />
        <result column="dead_warn" property="deadWarn" />
        <result column="source" property="source" />
        <result column="inspect" property="inspect" />
        <result column="danger" property="danger" />
        <result column="status" property="status" />
        <result column="io_status" property="ioStatus" />
        <result column="memo" property="memo" />
        <result column="modi_time" property="modiTime" />
        <result column="modi_user" property="modiUser" />
        <result column="appe_time" property="appeTime" />
        <result column="appe_user" property="appeUser" />
        <result column="memo" property="memo" />
        <result column="owner" property="owner" />
        <result column="payment" property="payment" />
        <result column="uuid" property="uuid" />
    </resultMap>
</mapper>
src/main/resources/mapper/WrkMastMapper.xml
@@ -205,7 +205,7 @@
    </select>
    <select id="selectByWrkNo" resultMap="BaseResultMap">
        select top 1 * from dbo.asr_wrk_mast where wrk_no = #{wrkNo} order by io_pri desc,io_time,wrk_no asc
        select top 1 * from dbo.asr_wrk_mast where wrk_no = #{wrkNo} and (wrk_sts = 13 or wrk_sts = 2) order by io_pri desc,io_time,wrk_no asc
    </select>
    <select id="selectCrn5Task2" resultMap="BaseResultMap">
        select * from dbo.asr_wrk_mast where wrk_sts=1 and io_type=1 and crn_no=5 order by io_pri desc,io_time,wrk_no ASC
src/main/resources/mapper/WrkMastStaMapper.xml
@@ -21,6 +21,11 @@
        <result column="wrk_no2" property="wrkNo2"/>
        <result column="matnr1" property="matnr1"/>
        <result column="matnr2" property="matnr2"/>
        <result column="type2" property="type2"/>
        <result column="batch" property="batch"/>
        <result column="batch2" property="batch2"/>
        <result column="anfme" property="anfme"/>
        <result column="anfme2" property="anfme2"/>
    </resultMap>
    <select id="selectByRgvNoandWrkNo" resultMap="BaseResultMap">