1
zhang
2025-08-12 1d5dea48f866528cb4c26be9eadf315e3ce0262f
1
1个文件已添加
1个文件已删除
10个文件已修改
7132 ■■■■ 已修改文件
src/main/java/com/zy/asrs/WrkMast.java 469 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/ConsoleController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/CrnController.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/RgvController.java 336 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/WrkMast.java 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/CtuMainServiceImpl.java 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 5716 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/CtuMainProcess.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/MainProcess.java 210 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensDevpThread.java 241 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/WrkMastMapper.xml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/WrkMast.java
New file
@@ -0,0 +1,469 @@
package com.zy.asrs;
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.asrs.entity.BasCrnp;
import com.zy.asrs.entity.BasWrkIotype;
import com.zy.asrs.entity.BasWrkStatus;
import com.zy.asrs.entity.LocMast;
import com.zy.asrs.service.BasCrnpService;
import com.zy.asrs.service.LocMastService;
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("asr_wrk_mast")
public class WrkMast implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 工作号
     */
    @ApiModelProperty(value = "工作号")
    @TableId(value = "wrk_no", type = IdType.AUTO)
    @TableField("wrk_no")
    private Long wrkNo;
    /**
     * plc工作号
     */
    @ApiModelProperty(value = "plc工作号")
    @TableField("plc_wrk_no")
    private Integer plcWrkNo;
    @ApiModelProperty(value = "")
    @TableField("inv_wh")
    private String invWh;
    @ApiModelProperty(value = "")
    private Date ymd;
    @ApiModelProperty(value = "")
    private String mk;
    @ApiModelProperty(value = "")
    @TableField("whs_type")
    private Integer whsType;
    /**
     * 工作状态
     */
    @ApiModelProperty(value = "工作状态")
    @TableField("wrk_sts")
    private Long wrkSts;
    /**
     * 入出库类型
     */
    @ApiModelProperty(value = "入出库类型")
    @TableField("io_type")
    private Integer ioType;
    /**
     * 堆垛机
     */
    @ApiModelProperty(value = "堆垛机")
    @TableField("crn_no")
    private String crnNo;
    @ApiModelProperty(value = "")
    @TableField("sheet_no")
    private String sheetNo;
    /**
     * 优先级
     */
    @ApiModelProperty(value = "优先级")
    @TableField("io_pri")
    private Double ioPri;
    @ApiModelProperty(value = "")
    @TableField("wrk_date")
    private Date wrkDate;
    /**
     * 目标库位
     */
    @ApiModelProperty(value = "目标库位")
    @TableField("loc_no")
    private String locNo;
    /**
     * 源库位
     */
    @ApiModelProperty(value = "源库位")
    @TableField("source_loc_no")
    private String sourceLocNo;
    @ApiModelProperty(value = "")
    @TableField("loc_sts")
    private String locSts;
    /**
     * 拣料
     */
    @ApiModelProperty(value = "拣料")
    private String picking;
    @ApiModelProperty(value = "")
    @TableField("link_mis")
    private String linkMis;
    @ApiModelProperty(value = "")
    @TableField("online_yn")
    private String onlineYn;
    @ApiModelProperty(value = "")
    @TableField("upd_mk")
    private String updMk;
    /**
     * 退出
     */
    @ApiModelProperty(value = "退出")
    @TableField("exit_mk")
    private String exitMk;
    @ApiModelProperty(value = "")
    @TableField("plt_type")
    private Integer pltType;
    /**
     * 空板
     */
    @ApiModelProperty(value = "空板")
    @TableField("empty_mk")
    private String emptyMk;
    /**
     * 工作时间
     */
    @ApiModelProperty(value = "工作时间")
    @TableField("io_time")
    private Date ioTime;
    @ApiModelProperty(value = "")
    @TableField("ctn_type")
    private Integer ctnType;
    @ApiModelProperty(value = "")
    private String packed;
    @ApiModelProperty(value = "")
    @TableField("ove_mk")
    private String oveMk;
    @ApiModelProperty(value = "")
    @TableField("mtn_type")
    private Double mtnType;
    @ApiModelProperty(value = "")
    @TableField("user_no")
    private String userNo;
    /**
     * 堆垛机启动时间
     */
    @ApiModelProperty(value = "堆垛机启动时间")
    @TableField("crn_str_time")
    private Date crnStrTime;
    /**
     * 堆垛机停止时间
     */
    @ApiModelProperty(value = "堆垛机停止时间")
    @TableField("crn_end_time")
    private Date crnEndTime;
    @ApiModelProperty(value = "")
    @TableField("plc_str_time")
    private Date plcStrTime;
    @ApiModelProperty(value = "")
    @TableField("crn_pos_time")
    private Date crnPosTime;
    @ApiModelProperty(value = "")
    @TableField("load_time")
    private Double loadTime;
    @ApiModelProperty(value = "")
    @TableField("exp_time")
    private Double expTime;
    @ApiModelProperty(value = "")
    @TableField("ref_wrkno")
    private Double refWrkno;
    /**
     * 拣料时间
     */
    @ApiModelProperty(value = "拣料时间")
    @TableField("ref_iotime")
    private Date refIotime;
    /**
     * 修改人员
     */
    @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 = "")
    @TableField("pause_mk")
    private String pauseMk;
    @ApiModelProperty(value = "")
    @TableField("error_time")
    private Date errorTime;
    @ApiModelProperty(value = "")
    @TableField("error_memo")
    private String errorMemo;
    @ApiModelProperty(value = "")
    @TableField("ctn_kind")
    private Integer ctnKind;
    @ApiModelProperty(value = "")
    @TableField("manu_type")
    private String manuType;
    /**
     * 备注
     */
    @ApiModelProperty(value = "备注")
    private String memo;
    @ApiModelProperty(value = "")
    @TableField("sc_weight")
    private Double scWeight;
    @ApiModelProperty(value = "")
    @TableField("log_mk")
    private String logMk;
    @ApiModelProperty(value = "")
    @TableField("log_err_time")
    private Date logErrTime;
    @ApiModelProperty(value = "")
    @TableField("log_err_memo")
    private String logErrMemo;
    /**
     * 条码
     */
    @ApiModelProperty(value = "条码")
    private String barcode;
    // Y:销售订单出库任务
    @ApiModelProperty(value = "")
    @TableField("Pdc_type")
    private String PdcType;
    @ApiModelProperty(value = "")
    @TableField("ctn_no")
    private String ctnNo;
    /**
     * 满板
     */
    @ApiModelProperty(value = "满板")
    @TableField("full_plt")
    private String fullPlt;
    /**
     * 先入品 / 双重入库
     */
    @ApiModelProperty(value = "先入品")
    @TableField("pre_have")
    private String preHave;
    /**
     * 空操作 / 取货无箱
     */
    @ApiModelProperty(value = "空操作")
    @TableField("take_none")
    private String takeNone;
    public WrkMast() {
    }
    public String getYmd$() {
        if (Cools.isEmpty(this.ymd)) {
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.ymd);
    }
    public String getCrnNo$() {
        BasCrnpService service = SpringUtils.getBean(BasCrnpService.class);
        BasCrnp basCrnp = service.selectById(this.crnNo);
        if (!Cools.isEmpty(basCrnp)) {
            return String.valueOf(basCrnp.getCrnNo());
        }
        return null;
    }
    public String getWrkDate$() {
        if (Cools.isEmpty(this.wrkDate)) {
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.wrkDate);
    }
    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 getSourceLocNo$() {
        LocMastService service = SpringUtils.getBean(LocMastService.class);
        LocMast locMast = service.selectById(this.sourceLocNo);
        if (!Cools.isEmpty(locMast)) {
            return String.valueOf(locMast.getLocNo());
        }
        return null;
    }
    public String getIoTime$() {
        if (Cools.isEmpty(this.ioTime)) {
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.ioTime);
    }
    public String getCrnStrTime$() {
        if (Cools.isEmpty(this.crnStrTime)) {
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.crnStrTime);
    }
    public String getCrnEndTime$() {
        if (Cools.isEmpty(this.crnEndTime)) {
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.crnEndTime);
    }
    public String getPlcStrTime$() {
        if (Cools.isEmpty(this.plcStrTime)) {
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.plcStrTime);
    }
    public String getCrnPosTime$() {
        if (Cools.isEmpty(this.crnPosTime)) {
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.crnPosTime);
    }
    public String getRefIotime$() {
        if (Cools.isEmpty(this.refIotime)) {
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.refIotime);
    }
    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 String getErrorTime$() {
        if (Cools.isEmpty(this.errorTime)) {
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.errorTime);
    }
//    public void setErrorMemo(String errorMemo) {
//        if (errorMemo.length() > 255) {
//            errorMemo = errorMemo.substring(0, 150);
//        }
//        this.errorMemo = errorMemo;
//    }
    public String getLogErrTime$() {
        if (Cools.isEmpty(this.logErrTime)) {
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.logErrTime);
    }
}
src/main/java/com/zy/asrs/controller/ConsoleController.java
@@ -231,8 +231,6 @@
                        if (wrkMast != null) {
                            vo.setWrkSts(wrkMast.getWrkSts$());   // 工作状态
                            vo.setIoType(wrkMast.getIoType$());   //  入出库类型
                            vo.setSourceStaNo(wrkMast.getSourceStaNo$());
                            vo.setStaNo(wrkMast.getStaNo$());
                            vo.setSourceLocNo(wrkMast.getSourceLocNo$());
                            vo.setLocNo(wrkMast.getLocNo$());
                        }
@@ -275,8 +273,6 @@
                if (crnProtocol.getTaskNo() > 0) {
                    WrkMast wrkMast = wrkMastService.selectById(crnProtocol.getTaskNo());
                    if (wrkMast != null) {
                        vo.setSourceStaNo(wrkMast.getSourceStaNo$());
                        vo.setStaNo(wrkMast.getStaNo$());
                        vo.setWrkSts(wrkMast.getWrkSts$());   // 工作状态
                        vo.setIoType(wrkMast.getIoType$());   //  入出库类型
                        vo.setSourceLocNo(wrkMast.getSourceLocNo$());
src/main/java/com/zy/asrs/controller/CrnController.java
@@ -20,7 +20,6 @@
import com.zy.asrs.service.BasCrnpService;
import com.zy.asrs.service.LocMastService;
import com.zy.asrs.service.WrkMastService;
import com.zy.asrs.service.impl.MainServiceImpl;
import com.zy.asrs.utils.VersionUtils;
import com.zy.core.CrnThread;
import com.zy.core.cache.MessageQueue;
@@ -65,8 +64,6 @@
    private BasCrnErrorMapper basCrnErrorMapper;
    @Autowired
    private BasCrnpService basCrnpService;
    @Autowired
    private MainServiceImpl mainService;
    @Autowired
    private LocMastService locMastService;
@@ -160,8 +157,6 @@
                WrkMast wrkMast = wrkMastService.selectById(crnProtocol.getTaskNo());
                if (wrkMast != null) {
                    vo.setStatus(CrnStatusType.process(wrkMast.getIoType()).getDesc());   //  模式状态
                    vo.setSourceStaNo(wrkMast.getSourceStaNo$());    //  源站
                    vo.setStaNo(wrkMast.getStaNo$());   //  目标站
                    vo.setSourceLocNo(wrkMast.getSourceLocNo());    //  源库位
                    vo.setLocNo(wrkMast.getLocNo());    //  目标库位
                }
src/main/java/com/zy/asrs/controller/RgvController.java
File was deleted
src/main/java/com/zy/asrs/entity/WrkMast.java
@@ -28,9 +28,16 @@
     * 工作号
     */
    @ApiModelProperty(value= "工作号")
    @TableId(value = "wrk_no", type = IdType.INPUT)
    @TableId(value = "wrk_no", type = IdType.AUTO)
    @TableField("wrk_no")
    private Integer wrkNo;
    private Long wrkNo;
    /**
     * 工作号
     */
    @ApiModelProperty(value= "工作号")
    @TableField("plc_wrk_no")
    private Integer plcWrkNo;
    @ApiModelProperty(value= "")
    @TableField("inv_wh")
@@ -65,7 +72,7 @@
     */
    @ApiModelProperty(value= "堆垛机")
    @TableField("crn_no")
    private Integer crnNo;
    private String crnNo;
    @ApiModelProperty(value= "")
    @TableField("sheet_no")
@@ -89,19 +96,6 @@
    @TableField("loc_no")
    private String locNo;
    /**
     * 目标站
     */
    @ApiModelProperty(value= "目标站")
    @TableField("sta_no")
    private Integer staNo;
    /**
     * 源站
     */
    @ApiModelProperty(value= "源站")
    @TableField("source_sta_no")
    private Integer sourceStaNo;
    /**
     * 源库位
@@ -358,23 +352,7 @@
        return null;
    }
    public String getStaNo$(){
        BasDevpService service = SpringUtils.getBean(BasDevpService.class);
        BasDevp basDevp = service.selectById(this.staNo);
        if (!Cools.isEmpty(basDevp)){
            return String.valueOf(basDevp.getDevNo());
        }
        return null;
    }
    public String getSourceStaNo$(){
        BasDevpService service = SpringUtils.getBean(BasDevpService.class);
        BasDevp basDevp = service.selectById(this.sourceStaNo);
        if (!Cools.isEmpty(basDevp)){
            return String.valueOf(basDevp.getDevNo());
        }
        return null;
    }
    public String getSourceLocNo$(){
        LocMastService service = SpringUtils.getBean(LocMastService.class);
@@ -470,12 +448,6 @@
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.errorTime);
    }
    public void setErrorMemo(String errorMemo) {
        if (errorMemo.length() > 255) {
            errorMemo = errorMemo.substring(0, 150);
        }
        this.errorMemo = errorMemo;
    }
    public String getLogErrTime$(){
        if (Cools.isEmpty(this.logErrTime)){
src/main/java/com/zy/asrs/service/impl/CtuMainServiceImpl.java
@@ -1,10 +1,11 @@
package com.zy.asrs.service.impl;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.zy.asrs.entity.LocMast;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.mapper.*;
import com.zy.asrs.service.*;
import com.zy.common.service.CommonService;
import com.zy.asrs.mapper.WrkMastMapper;
import com.zy.asrs.service.LocMastService;
import com.zy.asrs.service.WrkMastService;
import com.zy.common.utils.News;
import com.zy.core.cache.MessageQueue;
import com.zy.core.cache.SlaveConnection;
@@ -16,7 +17,6 @@
import com.zy.core.thread.SiemensDevpThread;
import lombok.extern.slf4j.Slf4j;
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;
@@ -27,7 +27,7 @@
 * Created by vincent on 2020/8/6
 */
@Slf4j
@Service("mainService")
@Service("ctuMainService")
@Transactional
public class CtuMainServiceImpl {
@@ -36,8 +36,12 @@
    @Autowired
    private SlaveProperties slaveProperties;
    @Autowired
    private WrkMastMapper wrkMastMapper;
    @Autowired
    private LocMastService locMastService;
    @Autowired
    private WrkMastService wrkMastService;
@@ -62,28 +66,49 @@
                    staProtocol = staProtocol.clone();
                }
                // 判断是否满足条件
                if (!staProtocol.isLoading()) {
                    continue;
                }
                if (staProtocol.isAutoing() && staProtocol.isInEnable()
                        && !staProtocol.isEmptyMk() && (staProtocol.getWorkNo() == 0 || staProtocol.getWorkNo() == 9999)
                        && staProtocol.isPakMk()) {
//                if (!staProtocol.isLoading()) {
//                    continue;
//                }
                // && staProtocol.isInEnable()
                if (staProtocol.isAutoing() && !staProtocol.isEmptyMk() && staProtocol.isPakMk()) {
                    WrkMast wrkMast = wrkMastMapper.selectByWrkNo(staProtocol.getWorkNo());
                    if (wrkMast.getWrkSts() == 106) {
                    if (wrkMast != null) {
                        //下发移动任务,并生成入库工作档
                        WrkMast in = new WrkMast();
                        wrkMast.setWrkSts(223L);
                        wrkMast.setModiTime(new Date());
                        wrkMastService.updateById(wrkMast);
                        in.setSourceLocNo("1007");
                        in.setLocNo(wrkMast.getSourceLocNo());
                        in.setIoType(10);
                        in.setIoTime(new Date());
                        in.setWrkSts(1L); // 工作状态:11.生成出库ID
                        in.setIoPri(13D); // 优先级:13
                        in.setFullPlt("Y"); // 满板:Y
                        in.setPicking("N"); // 拣料
                        in.setExitMk("N"); // 退出
                        in.setEmptyMk("Y"); // 空板
                        in.setLinkMis("N");
                        in.setAppeTime(new Date());
                        in.setModiTime(new Date());
                        in.setBarcode(wrkMast.getBarcode());
                        in.setPlcWrkNo(wrkMast.getPlcWrkNo());
                        wrkMastService.insert(in);
                        LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo());
                        locMast.setLocSts("S");
                        locMast.setModiTime(new Date());
                        locMastService.selectById(locMast);
                    }
                }
            }
        }
    }
                    } else {
                        log.info("" + mark + " - " + staProtocol.getWorkNo() + " - 找不到对应的工作档");
                    }
                }
            }
        }
    }
    /**
     * 出库站到拣料站
     * 出库
     */
    public synchronized void generateStoreWrkFile0(Integer mark) {
    public synchronized void out(Integer mark) {
        // 根据输送线plc遍历
        for (DevpSlave devp : slaveProperties.getDevp()) {
            // 遍历入库口
@@ -100,13 +125,12 @@
                if (!staProtocol.isLoading()) {
                    continue;
                }
                if (staProtocol.isAutoing() && staProtocol.isOutEnable()
                        && !staProtocol.isEmptyMk() && (staProtocol.getWorkNo() == 0 || staProtocol.getWorkNo() == 9999)
                        && staProtocol.isPakMk()) {
                //&& staProtocol.isOutEnable()
                if (staProtocol.isAutoing() && !staProtocol.isEmptyMk() && (staProtocol.getWorkNo() == 0 || staProtocol.getWorkNo() == 9999) && staProtocol.isPakMk()) {
                    News.warnNoLog("" + mark + " - 0" + " - 开始执行");
                    // 判断重复工作档
                    WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("source_sta_no", staProtocol.getSiteId()).eq("wrk_sts", 105));
                    // 106也算上,以后106-》107用于更新库存
                    WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("loc_no", "1001").in("wrk_sts", 106,107));
                    if (wrkMast == null) {
                        continue;
                    }
@@ -114,14 +138,14 @@
                    // 命令下发区 --------------------------------------------------------------------------
                    // 更新站点信息 且 下发plc命令
                    staProtocol.setWorkNo(wrkMast.getWrkNo());
                    staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
                    staProtocol.setWorkNo(wrkMast.getPlcWrkNo());
                    staProtocol.setStaNo((short) 1004);
                    devpThread.setPakMk(staProtocol.getSiteId(), false);
                    boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                    log.info("输送线下发3:{},{}", wrkMast.getWrkNo(), wrkMast.getStaNo());
                    log.info("输送线下发3:{},{}", wrkMast.getWrkNo(), 1004);
                    if (result) {
                        // 更新工作主档
                        wrkMast.setWrkSts(106L);
                        wrkMast.setWrkSts(108L);
                        wrkMast.setModiTime(new Date());
                        if (wrkMastMapper.updateById(wrkMast) == 0) {
                            News.error("" + mark + " - 1" + " - 更新工作档失败!!! [工作号:{}]", wrkMast.getWrkNo());
@@ -131,9 +155,7 @@
                    }
                } else {
                    News.errorNoLog("" + mark + " - 6" + " - 站点信息不符合入库条件!!!" + " 自动信号:" + staProtocol.isLoading() + "、可入信号:" + staProtocol.isInEnable()
                            + "、空板信号:" + staProtocol.isEmptyMk() + "、工作号:" + staProtocol.getWorkNo()
                            + "、锁定标记" + staProtocol.isPakMk() + "、入库印记:" + staProtocol.getStamp());
                    News.errorNoLog("" + mark + " - 6" + " - 站点信息不符合入库条件!!!" + " 自动信号:" + staProtocol.isLoading() + "、可入信号:" + staProtocol.isInEnable() + "、空板信号:" + staProtocol.isEmptyMk() + "、工作号:" + staProtocol.getWorkNo() + "、锁定标记" + staProtocol.isPakMk() + "、入库印记:" + staProtocol.getStamp());
                }
            }
        }
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
Diff too large
src/main/java/com/zy/core/CtuMainProcess.java
@@ -46,8 +46,8 @@
                    // 入库
                    ctuMainService.generateStoreWrkFile(1);
                    // 拣料完成
                    //ctuMainService.checkCpm(1);
                    // 出库
                    ctuMainService.out(1);
                } catch (Exception e) {
                    e.printStackTrace();
src/main/java/com/zy/core/MainProcess.java
@@ -1,106 +1,106 @@
package com.zy.core;
import com.zy.asrs.service.impl.MainServiceImpl;
import com.zy.core.properties.SystemProperties;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PreDestroy;
import java.util.ArrayList;
/**
 * WCS主流程
 * Created by vincent on 2020/8/6
 */
@Data
@Slf4j
@Component
public class MainProcess {
    @Autowired
    private MainServiceImpl mainService;
    // 所属线程
    private Thread thread;
    // 频率
    private int i = 0;
    private boolean rgcWrk = true;
    /**
     * =====>>  开始工作
     */
    public void start(){
        thread = new Thread(() -> {
            while (!Thread.currentThread().isInterrupted()) {
                try {
                    // 间隔
                    Thread.sleep(1000);
                    // 系统运行状态判断
                    if (!SystemProperties.WCS_RUNNING_STATUS.get()) {
                        continue;
                    }
                    // 演示
//                    mainService.crnDemoOfLocMove1();
                    // 入出库模式切换函数
//                    mainService.ioConvert();
                  //  mainService.stnToCrnStnPick2();
                    // 入库  ===>> 入库站到堆垛机站,根据条码扫描生成入库工作档
                    mainService.generateStoreWrkFile(1); // 组托
//                    mainService.generateStoreWrkFile0(2); // WMS入库
                    Thread.sleep(400);
                    // 拣料、并板、盘点再入库
                    mainService.stnToCrnStnPick(3);
                    // 出库  ===>>  堆垛机出库站到出库站
                    mainService.crnStnToOutStn(4);
                    // 入出库  ===>>  堆垛机入出库作业下发
                    mainService.crnIoExecute(5);
                    // 入出库增强 ===>> 堆垛机命令下发后,异步修改工作档状态
//                    mainService.crnIoWrkMast();
                    // 入库  ===>> 执行对工作档的完成操作
                    mainService.storeFinished(6);
                    // 堆垛机异常信息记录
                    mainService.recCrnErr(7);
                    // 入库  ===>> 空栈板初始化入库,叉车入库站放货
                    mainService.storeEmptyPlt(8);
                    // 出库  ===>> 工作档信息写入led显示器
                    mainService.ledExecute(9);
                    // 其他  ===>> LED显示器复位,显示默认信息
                    mainService.ledReset();
                    mainService.outOfDevp(11);
//                    if (i>10){
//                        //空托盘自动出库
//                        mainService.autoEmptyOut();
//                        //空托盘自动入库
//                        mainService.autoEmptyIn();
//                        i=0;
//package com.zy.core;
//
//import com.zy.asrs.service.impl.MainServiceImpl;
//import com.zy.core.properties.SystemProperties;
//import lombok.Data;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.stereotype.Component;
//
//import javax.annotation.PreDestroy;
//import java.util.ArrayList;
//
///**
// * WCS主流程
// * Created by vincent on 2020/8/6
// */
//@Data
//@Slf4j
//@Component
//public class MainProcess {
//
//    @Autowired
//    private MainServiceImpl mainService;
//    // 所属线程
//    private Thread thread;
//    // 频率
//    private int i = 0;
//    private boolean rgcWrk = true;
//
//    /**
//     * =====>>  开始工作
//     */
//    public void start(){
//        thread = new Thread(() -> {
//            while (!Thread.currentThread().isInterrupted()) {
//                try {
//
//                    // 间隔
//                    Thread.sleep(1000);
//
//                    // 系统运行状态判断
//                    if (!SystemProperties.WCS_RUNNING_STATUS.get()) {
//                        continue;
//                    }
//                    i++;
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
        thread.start();
    }
    @PreDestroy
    public void shutDown(){
        if (thread != null) thread.interrupt();
    }
}
//
//                    // 演示
////                    mainService.crnDemoOfLocMove1();
//
//                    // 入出库模式切换函数
////                    mainService.ioConvert();
//
//
//                  //  mainService.stnToCrnStnPick2();
//
//                    // 入库  ===>> 入库站到堆垛机站,根据条码扫描生成入库工作档
//                    mainService.generateStoreWrkFile(1); // 组托
////                    mainService.generateStoreWrkFile0(2); // WMS入库
//                    Thread.sleep(400);
//
//
//                    // 拣料、并板、盘点再入库
//                    mainService.stnToCrnStnPick(3);
//                    // 出库  ===>>  堆垛机出库站到出库站
//                    mainService.crnStnToOutStn(4);
//                    // 入出库  ===>>  堆垛机入出库作业下发
//                    mainService.crnIoExecute(5);
//                    // 入出库增强 ===>> 堆垛机命令下发后,异步修改工作档状态
////                    mainService.crnIoWrkMast();
//                    // 入库  ===>> 执行对工作档的完成操作
//                    mainService.storeFinished(6);
//                    // 堆垛机异常信息记录
//                    mainService.recCrnErr(7);
//                    // 入库  ===>> 空栈板初始化入库,叉车入库站放货
//                    mainService.storeEmptyPlt(8);
//                    // 出库  ===>> 工作档信息写入led显示器
//                    mainService.ledExecute(9);
//                    // 其他  ===>> LED显示器复位,显示默认信息
//                    mainService.ledReset();
//
//                    mainService.outOfDevp(11);
//
////                    if (i>10){
////                        //空托盘自动出库
////                        mainService.autoEmptyOut();
////                        //空托盘自动入库
////                        mainService.autoEmptyIn();
////                        i=0;
////                    }
////                    i++;
//
//
//                } catch (Exception e) {
//                    e.printStackTrace();
//                }
//            }
//        });
//        thread.start();
//    }
//
//    @PreDestroy
//    public void shutDown(){
//        if (thread != null) thread.interrupt();
//    }
//
//}
src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -5,19 +5,14 @@
import HslCommunication.Profinet.Siemens.SiemensPLCS;
import HslCommunication.Profinet.Siemens.SiemensS7Net;
import com.alibaba.fastjson.JSON;
import com.core.common.Cools;
import com.core.common.DateUtils;
import com.core.common.SpringUtils;
import com.core.exception.CoolException;
import com.zy.asrs.entity.BasDevp;
import com.zy.asrs.entity.BasRgvMap;
import com.zy.asrs.service.BasDevpService;
import com.zy.asrs.service.BasRgvMapService;
import com.zy.common.utils.News;
import com.zy.core.DevpThread;
import com.zy.core.cache.MessageQueue;
import com.zy.core.cache.OutputQueue;
import com.zy.core.cache.SlaveConnection;
import com.zy.core.enums.IoModeType;
import com.zy.core.enums.SlaveType;
import com.zy.core.model.DevpSlave;
@@ -47,33 +42,30 @@
    private Map<Integer, StaProtocol> station = new ConcurrentHashMap<>();
    private short heartBeatVal = 1;
    private StaError1 staError1;
//    public static final ArrayList<Integer> staNos = new ArrayList<Integer>() {{
//
//    }};
    public static final ArrayList<Integer> staNos1 = new ArrayList<Integer>() {{
        add(100);add(101);add(102);add(103);
        add(104);add(105);add(106);add(107);
        add(108);add(109);add(110);add(111);
        add(112);add(113);add(114);add(115);
        add(116);add(117);add(118);add(119);
        add(120);add(121);add(122);add(123);
    add(200);add(201);add(202);add(203);
    add(204);add(205);add(206);add(207);
    add(208);add(209);add(210);add(211);
    add(212);add(213);add(214);add(215);
    add(216);add(217);add(218);add(219);
    add(220);add(221);add(222);add(223);
    public static final ArrayList<Integer> staNos1 = new ArrayList<Integer>() {{
        add(1001);
        add(1002);
        add(1003);
        add(1004);
        add(1005);
        add(1006);
        add(1007);
        add(101);
        add(102);
        add(103);
        add(104);
        add(105);
        add(106);
        add(107);
        add(108);
    }};
    public static final ArrayList<Integer> BarcodeList = new ArrayList<Integer>() {{
        add(1); add(2);
    }};
    public static final ArrayList<Integer> staNosErrList = new ArrayList<Integer>() {{
        add(101); add(201);
        add(1);
    }};
    private Integer count=0;
    /**
     * 条码数量
@@ -139,13 +131,12 @@
        }
    }
    /**
     * 初始化站点状态
     */
    private void initSite() {
        count ++;
        ArrayList<Integer> staNos = getStaNo();
        if(count > 48) {
            // 站点编号
            for (Integer siteId : staNos) {
                StaProtocol staProtocol = station.get(siteId);
@@ -165,8 +156,6 @@
                if (!staProtocol.isPakMk() && !staProtocol.isLoading()) {
                    staProtocol.setPakMk(true);
                }
            }
            count = 0;
        }
    }
@@ -198,8 +187,8 @@
//        updateIoMode();
        ArrayList<Integer> staNos = getStaNo();
        int staNoSize = staNos.size();
        OperateResultExOne<byte[]> result = siemensS7Net.Read("DB101.0", (short) (staNoSize*8));
        OperateResultExOne<byte[]> result200 = siemensS7Net.Read("DB101.800", (short) (staNoSize*8));
        OperateResultExOne<byte[]> result = siemensS7Net.Read("DB101.0", (short) (staNoSize * 2));
        OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB100.0", (short) (staNoSize * 4));
        if (result.IsSuccess) {
            for (int i = 0; i < staNoSize; i++) {
                Integer siteId = staNos.get(i); // 站点编号
@@ -210,20 +199,11 @@
                    station.put(siteId, staProtocol);
                }
                boolean[] status = null;
                if(i < 24){
                    staProtocol.setWorkNo(siemensS7Net.getByteTransform().TransInt32(result.Content, i*8));     // 工作号
                    staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i*8 + 4));   // 目标站
                    status = siemensS7Net.getByteTransform().TransBool(result.Content, i*8 + 6, 2);
                }else {
                    staProtocol.setWorkNo(siemensS7Net.getByteTransform().TransInt32(result200.Content, (i-24)*8));     // 工作号
                    staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result200.Content, (i-24)*8 + 4));   // 目标站
                    status = siemensS7Net.getByteTransform().TransBool(result200.Content, (i-24)*8 + 6, 2);
                if (i < 7) {
                    staProtocol.setWorkNo((int) siemensS7Net.getByteTransform().TransInt16(result2.Content, i * 4));
                    staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result2.Content, i * 4 + 2));
                }
                status = siemensS7Net.getByteTransform().TransBool(result.Content, i * 2, 2);
                staProtocol.setAutoing(status[0]);  // 自动
                staProtocol.setLoading(status[1]);  // 有物
                staProtocol.setInEnable(status[2]); // 可入
@@ -240,82 +220,82 @@
        }
        //条码扫描器
        ArrayList<Integer> barcodeList = BarcodeList;
        OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB101.1648", (short) (barcodeList.size() * 8));
        if (result2.IsSuccess) {
            for (int i = 0; i < barcodeList.size(); i++) {
                Integer barcodeId = barcodeList.get(i);
                String barcode = siemensS7Net.getByteTransform().TransString(result2.Content,i*8,8, "UTF-8");
                BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, barcodeId);
                if(!Cools.isEmpty(barcodeThread) && !barcodeThread.getBarcode().equals(barcode)) {
                    barcodeThread.setBarcode(barcode);
                }
            }
        }
//        ArrayList<Integer> barcodeList = BarcodeList;
//        OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB101.1648", (short) (barcodeList.size() * 8));
//        if (result2.IsSuccess) {
//            for (int i = 0; i < barcodeList.size(); i++) {
//                Integer barcodeId = barcodeList.get(i);
//                String barcode = siemensS7Net.getByteTransform().TransString(result2.Content, i * 8, 8, "UTF-8");
//                BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, barcodeId);
//                if (!Cools.isEmpty(barcodeThread) && !barcodeThread.getBarcode().equals(barcode)) {
//                    barcodeThread.setBarcode(barcode);
//                }
//            }
//        }
        //外形检测
        ArrayList<Integer> staNoErrs = staNosErrList;
        int staNoErrsSize = staNoErrs.size();
        OperateResultExOne<byte[]> resultErr = siemensS7Net.Read("DB101.1608", (short) (staNoErrsSize*8));
        if (resultErr.IsSuccess){
            for (int i = 0;i<2;i++){
                Integer siteId = staNoErrs.get(i); // 站点编号
                boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErr.Content, i*4+2, 1);
                StaProtocol staProtocol = station.get(siteId);
                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]);
            }
        }
//        ArrayList<Integer> staNoErrs = staNosErrList;
//        int staNoErrsSize = staNoErrs.size();
//        OperateResultExOne<byte[]> resultErr = siemensS7Net.Read("DB101.1608", (short) (staNoErrsSize * 8));
//        if (resultErr.IsSuccess) {
//            for (int i = 0; i < 2; i++) {
//                Integer siteId = staNoErrs.get(i); // 站点编号
//                boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErr.Content, i * 4 + 2, 1);
//                StaProtocol staProtocol = station.get(siteId);
//                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]);
//            }
//        }
        //plc故障
        OperateResultExOne<byte[]> resultErr2 = siemensS7Net.Read("DB101.1728", (short) (staNoSize*4));
        if (resultErr2.IsSuccess) {
            for (int i = 0; i < staNoSize; i++) {
                Integer siteId = staNos.get(i); // 站点编号
                boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErr2.Content, i*4, 1);
                StaProtocol staProtocol = station.get(siteId);
                staProtocol.setBreakerErr(status[0]);
                staProtocol.setInfraredErr(status[1]);
                staProtocol.setOutTimeErr(status[2]);
                staProtocol.setSeizeSeatErr(status[3]);
                staProtocol.setWrkYgoodsN(status[4]);
                staProtocol.setInverterErr(status[5]);
                staProtocol.setContactErr(status[6]);
                staProtocol.setUpcontactErr(status[7]);
            }
        }
        OperateResultExOne<byte[]> resultErr3 = siemensS7Net.Read("DB13.400", (short) 3);
        if (resultErr3.IsSuccess) {
            if (staError1 == null){
                staError1 = new StaError1();
            }
            boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErr3.Content, 0, 3);
            staError1.setEMERGENCY_Stop_Core(status[0]);
            staError1.setEMERGENCY_STOP1(status[1]);
            staError1.setEMERGENCY_STOP2(status[2]);
            staError1.setEMERGENCY_STOP3(status[3]);
            staError1.setEMERGENCY_STOP4(status[4]);
            staError1.setDoor_EMERGENCY_STOP1(status[5]);
            staError1.setDoor_EMERGENCY_STOP2(status[6]);
            staError1.setDoor_EMERGENCY_STOP3(status[7]);
            staError1.setDoor_EMERGENCY_STOP4(status[8]);
            staError1.setDoor_EMERGENCY_STOP5(status[9]);
            staError1.setDoor_EMERGENCY_STOP6(status[10]);
            staError1.setDoor_Open_Err1(status[11]);
            staError1.setDoor_Open_Err1(status[12]);
            staError1.setDoor_Open_Err1(status[13]);
            staError1.setDoor_Open_Err1(status[14]);
            staError1.setDoor_Open_Err1(status[15]);
            staError1.setDoor_Open_Err1(status[16]);
        }
//        OperateResultExOne<byte[]> resultErr2 = siemensS7Net.Read("DB101.1728", (short) (staNoSize * 4));
//        if (resultErr2.IsSuccess) {
//            for (int i = 0; i < staNoSize; i++) {
//                Integer siteId = staNos.get(i); // 站点编号
//                boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErr2.Content, i * 4, 1);
//                StaProtocol staProtocol = station.get(siteId);
//                staProtocol.setBreakerErr(status[0]);
//                staProtocol.setInfraredErr(status[1]);
//                staProtocol.setOutTimeErr(status[2]);
//                staProtocol.setSeizeSeatErr(status[3]);
//                staProtocol.setWrkYgoodsN(status[4]);
//                staProtocol.setInverterErr(status[5]);
//                staProtocol.setContactErr(status[6]);
//                staProtocol.setUpcontactErr(status[7]);
//
//            }
//        }
//        OperateResultExOne<byte[]> resultErr3 = siemensS7Net.Read("DB13.400", (short) 3);
//        if (resultErr3.IsSuccess) {
//            if (staError1 == null) {
//                staError1 = new StaError1();
//            }
//            boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErr3.Content, 0, 3);
//            staError1.setEMERGENCY_Stop_Core(status[0]);
//            staError1.setEMERGENCY_STOP1(status[1]);
//            staError1.setEMERGENCY_STOP2(status[2]);
//            staError1.setEMERGENCY_STOP3(status[3]);
//            staError1.setEMERGENCY_STOP4(status[4]);
//
//            staError1.setDoor_EMERGENCY_STOP1(status[5]);
//            staError1.setDoor_EMERGENCY_STOP2(status[6]);
//            staError1.setDoor_EMERGENCY_STOP3(status[7]);
//            staError1.setDoor_EMERGENCY_STOP4(status[8]);
//            staError1.setDoor_EMERGENCY_STOP5(status[9]);
//            staError1.setDoor_EMERGENCY_STOP6(status[10]);
//
//            staError1.setDoor_Open_Err1(status[11]);
//            staError1.setDoor_Open_Err1(status[12]);
//            staError1.setDoor_Open_Err1(status[13]);
//            staError1.setDoor_Open_Err1(status[14]);
//            staError1.setDoor_Open_Err1(status[15]);
//            staError1.setDoor_Open_Err1(status[16]);
//
//        }
        if (result.IsSuccess) {
@@ -357,23 +337,18 @@
        ArrayList<Integer> staNos = getStaNo();
        int index = staNos.indexOf(staProtocol.getSiteId());
        if(index >= 24){
            index = 76 + index;
        }
        OperateResult write = null;
        OperateResult write1 = null;
        //任务下发次数
        int writeCount = 0;
        do {
            write = siemensS7Net.Write("DB100." + index*6, staProtocol.getWorkNo());    // 工作号
            write = siemensS7Net.Write("DB100." + index * 4, staProtocol.getWorkNo().shortValue());    // 工作号
            Thread.sleep(200);
            write1 = siemensS7Net.Write("DB100." + (index*6+4), staProtocol.getStaNo().shortValue());    // 目标站
            write1 = siemensS7Net.Write("DB100." + (index * 4 + 2), staProtocol.getStaNo().shortValue());    // 目标站
            if(write.IsSuccess && write1.IsSuccess){
                log.error("写入输送线命令成功。输送线plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
                break;
            }
            else {
            } else {
                writeCount++;
                log.error("写入输送线命令失败。输送线plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
            }
@@ -386,20 +361,6 @@
            }
            OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线站点数据失败。输送线plc编号={1},站点数据={2}", slave.getId(), JSON.toJSON(staProtocol)));
            News.error("SiemensDevp"+" - 4"+" - 写入输送线站点数据失败。输送线plc编号={},站点数据={}", slave.getId(), JSON.toJSON(staProtocol));
        } else {
            //dang 101,201zhan xaifazhiling qingchu tiaoxingsaomaolide shuju shanchu
            if (staProtocol.getSiteId()==101){
                BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, 1);
                log.info("qingchutiaoma,{}",barcodeThread.getBarcode());
                barcodeThread.clearBarcode();
            }
            if (staProtocol.getSiteId()==201){
                BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, 2);
                log.info("qingchutiaoma,{}",barcodeThread.getBarcode());
                barcodeThread.clearBarcode();
            }
            OutputQueue.DEVP.offer(MessageFormat.format("【{0}】 输送线命令下发 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(staProtocol)));
            News.info("SiemensDevp"+" - 5"+" - 输送线命令下发 [id:{}] >>>>> 命令下发: {}",  slave.getId(), JSON.toJSON(staProtocol));
        }
    }
src/main/resources/application.yml
@@ -161,15 +161,15 @@
  # 输送线1
  devp[0]:
    id: 1
    ip: 10.10.10.140
    ip: 10.10.10.191
    port: 102
    rack: 0
    slot: 0
    # 入库口1
    inSta[0]:
      staNo: 1004
      staNo: 1007
      barcode: ${wcs-slave.barcode[0].id}
      backSta: 1004
      backSta: 1007
      led: ${wcs-slave.led[0].id}
#    # 入库口1
#    inSta[1]:
@@ -209,7 +209,7 @@
  # 条码扫描仪1
  barcode[0]:
    id: 1
    ip: 10.10.10.143
    ip: 10.10.10.194
    port: 51236
  # 条码扫描仪2
  barcode[1]:
src/main/resources/mapper/WrkMastMapper.xml
@@ -5,6 +5,7 @@
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.zy.asrs.entity.WrkMast">
        <id column="wrk_no" property="wrkNo" />
        <id column="plc_wrk_no" property="plcWrkNo" />
        <result column="inv_wh" property="invWh" />
        <result column="ymd" property="ymd" />
        <result column="mk" property="mk" />
@@ -190,6 +191,6 @@
    </select>
    <select id="selectByWrkNo" resultMap="BaseResultMap">
        select * from asr_wrk_mast
        where wrk_no = #{wrkNo}
        where plc_wrk_no = #{wrkNo} and wrk_sts = 108
    </select>
</mapper>