8个文件已修改
197 ■■■■ 已修改文件
src/main/java/com/zy/common/model/LocTypeDto.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/model/MatDto.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/controller/MonitorController.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/MainProcess.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/entity/WrkDetl.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/service/impl/MainServiceImpl.java 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/WrkDetlMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/model/LocTypeDto.java
@@ -31,8 +31,13 @@
    }
    public LocTypeDto(StaProtocol staProtocol) {
        if (staProtocol.isHigh() == staProtocol.isLow() || staProtocol.isChang() == staProtocol.isDuan()) {
                    News.error("plc高低/长短检测异常,high:{},low:{},chang:{},duan:{}",staProtocol.isHigh(),staProtocol.isLow(),staProtocol.isChang(),staProtocol.isDuan());
        // todo 高低库位暂时不检测
//        if (staProtocol.isHigh() == staProtocol.isLow() || staProtocol.isChang() == staProtocol.isDuan()) {
//                    News.error("plc高低/长短检测异常,high:{},low:{},chang:{},duan:{}",staProtocol.isHigh(),staProtocol.isLow(),staProtocol.isChang(),staProtocol.isDuan());
//                    return;
//        }
        if (staProtocol.isChang() == staProtocol.isDuan()) {
                    News.error("plc长短检测异常,high:{},low:{},chang:{},duan:{}",staProtocol.isHigh(),staProtocol.isLow(),staProtocol.isChang(),staProtocol.isDuan());
                    return;
        }
src/main/java/com/zy/common/model/MatDto.java
@@ -43,6 +43,8 @@
    private Double total;
    private String standby1 = "";
    public MatDto() {
    }
    public MatDto(String matnr, String maknx, String batch, String specs, String manu, String memo, Double count, Double total) {
@@ -55,7 +57,7 @@
        this.count = count;
        this.total = total;
    }
    public MatDto(String orderNo,String matnr,String maknx, String batch,String specs,String manuDate,String model,Double anfme) {
    public MatDto(String orderNo,String matnr,String maknx, String batch,String specs,String manuDate,String model,Double anfme,String standby1) {
        this.orderNo = orderNo;
        this.matnr = matnr;
        this.maknx = maknx;
@@ -64,6 +66,7 @@
        this.manuDate = manuDate;
        this.model = model;
        this.anfme = anfme;
        this.standby1 = standby1;
    }
    public MatDto(String matNo, String maknx, Double count) {
src/main/java/com/zy/controller/MonitorController.java
@@ -75,13 +75,16 @@
     * 获取其他信息
     */
    @GetMapping("/other")
    public R monitorOther(@RequestParam("crnId") Integer crnId, @RequestParam("ledId") Integer sta) {
    public R monitorOther(@RequestParam("crnId") Integer crnId, @RequestParam("ledId") String ledIdString) {
        Integer ledId = 0;
        for (LedSlave led : slaveProperties.getLed()) {
            for (Integer staNo : led.getStaArr()) {
                if (staNo.equals(sta)) {
                    ledId = led.getId();
                    break;
        String[] ledIds = ledIdString.split(",");
        for (String id : ledIds) {
            for (LedSlave led : slaveProperties.getLed()) {
                for (Integer staNo : led.getStaArr()) {
                    if (staNo.equals(Integer.parseInt(id))) {
                        ledId = led.getId();
                        break;
                    }
                }
            }
        }
@@ -261,18 +264,23 @@
     * 获取其他信息
     */
    @GetMapping("/led")
    public R monitorLed(@RequestParam("ledId") Integer ledId) {
    public R monitorLed(@RequestParam("ledId") String ledIdString) {
        String[] ledIds = ledIdString.split(",");
        String ledContent = "";
        List<LedCommand> commandList = null;
        for (LedSlave slave : slaveProperties.getLed()) {
            if (slave.getStaArr().contains(ledId)) {
                LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, slave.getId());
                if (null != ledThread) {
                    ledContent = ledThread.getStringBuffer().toString();
                    commandList = ledThread.getCommandList();
        for(String ledId: ledIds) {
            for (LedSlave slave : slaveProperties.getLed()) {
                if (slave.getStaArr().contains(Integer.parseInt(ledId))) {
                    LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, slave.getId());
                    if (null != ledThread) {
                        ledContent = ledThread.getStringBuffer().toString();
                        commandList = ledThread.getCommandList();
                    }
                }
            }
        }
        return R.ok().add(commandList);
    }
@@ -280,13 +288,16 @@
     * 异常通知
     */
    @GetMapping("/led/error")
    public R monitorLedError(@RequestParam("ledId") Integer ledId) {
    public R monitorLedError(@RequestParam("ledId") String ledIdString) {
        String errorMsg = "";
        for (LedSlave slave : slaveProperties.getLed()) {
            if (slave.getStaArr().contains(ledId)) {
                LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, slave.getId());
                if (null != ledThread) {
                    errorMsg = ledThread.getErrorMsg().toString();
        String[] ledIds = ledIdString.split(",");
        for(String ledId: ledIds) {
            for (LedSlave slave : slaveProperties.getLed()) {
                if (slave.getStaArr().contains(Integer.parseInt(ledId))) {
                    LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, slave.getId());
                    if (null != ledThread) {
                        errorMsg = ledThread.getErrorMsg().toString();
                    }
                }
            }
        }
src/main/java/com/zy/core/MainProcess.java
@@ -41,7 +41,7 @@
                    }
                    // 拣料、并板、盘点再入库
//                    mainService.stnToCrnStnPick(3);
                    mainService.stnToCrnStnPick(3);
                    // 入库  ===>> 入库站到堆垛机站,根据条码扫描生成入库工作档
                    mainService.generateStoreWrkFile(); // 组托
src/main/java/com/zy/entity/WrkDetl.java
@@ -268,6 +268,45 @@
    @ApiModelProperty(value= "备注")
    private String memo;
    /**
     * 备用1
     */
    @ApiModelProperty(value= "备用1")
    private String standby1 = "";
    /**
     * 备用2
     */
    @ApiModelProperty(value= "备用2")
    private String standby2 = "";
    /**
     * 备用3
     */
    @ApiModelProperty(value= "备用3")
    private String standby3 = "";
    /**
     * 备用1
     */
    @ApiModelProperty(value= "备用1")
    @TableField("box_type1")
    private String boxType1 = "1";
    /**
     * 备用2
     */
    @ApiModelProperty(value= "备用2")
    @TableField("box_type2")
    private String boxType2 = "1";
    /**
     * 备用3
     */
    @ApiModelProperty(value= "备用3")
    @TableField("box_type3")
    private String boxType3 = "1";
    public String getIoTime$(){
        if (Cools.isEmpty(this.ioTime)){
            return "";
src/main/java/com/zy/service/impl/MainServiceImpl.java
@@ -31,6 +31,8 @@
import com.zy.entity.*;
import com.zy.mapper.*;
import com.zy.service.*;
import com.zy.system.entity.Config;
import com.zy.system.service.ConfigService;
import com.zy.utils.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -171,7 +173,12 @@
                        && staProtocol.isPakMk() && staProtocol.getWorkNo() >= 9993 && staProtocol.getWorkNo() <= 9995) { // 9990-9992空托,9993-9995 满托,9999回退
                    if(Cools.isEmpty(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode) || "00000000".equals(barcode)) {
                        News.info("{}条码扫描错误:{}",barcodeThread.getSlave().getId(),barcode);
                        continue;
                        staProtocol.setWorkNo(wrkNo);
                        staProtocol.setStaNo(inSta.getBackSta().shortValue());
                        devpThread.setPakMk(staProtocol.getSiteId(), false);
                        MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                        MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, "条码扫描错误"));
                        return;
                    }
                    // 判断重复工作档
                    WrkMast wrkMast = wrkMastMapper.selectPakInStep1(inSta.getStaNo(), barcode);
@@ -266,7 +273,8 @@
                    staProtocol = staProtocol.clone();
                }
                if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.isPakMk() && staProtocol.getWorkNo() == 9999) {
                if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.isPakMk()
                        && staProtocol.getWorkNo() >= 9993 && staProtocol.getWorkNo() <= 9995) {
                    News.warnNoLog(""+mark+" - 0"+" - 开始执行");
                    WrkMast wrkMast = wrkMastMapper.selectPickStep(barcode);
                    if (wrkMast == null) {
@@ -281,16 +289,16 @@
                    // 获取目标站
                    Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
                            .eq("type_no", wrkMast.getIoType() - 50)
                            .eq("stn_no", pickSta.getStaNo()) // 作业站点 = 拣料出库的目标站
                            .eq("stn_no", wrkMast.getSourceStaNo()) // 作业站点 = 拣料出库的目标站
                            .eq("crn_no", wrkMast.getCrnNo()); // 堆垛机号
                    StaDesc staDesc = staDescService.selectOne(wrapper);
                    if (Cools.isEmpty(staDesc)) {
                        News.error(""+mark+" - 2"+" - 入库路径不存在!type_no={},stn_no={},crn_no={}", wrkMast.getIoType(), pickSta.getStaNo(), wrkMast.getCrnNo());
                        staProtocol.setWorkNo(wrkNo);
                        staProtocol.setStaNo((short) (pickSta.getStaNo().shortValue()-(short)1));
                        staProtocol.setStaNo(pickSta.getBackSta().shortValue());
                        devpThread.setPakMk(staProtocol.getSiteId(), false);
                        MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                        log.error("输送线下发4:"+wrkNo+","+(pickSta.getStaNo().shortValue()-(short)1));
                        log.error("输送线下发4:"+wrkNo+","+pickSta.getBackSta());
                        //LED
                        LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, pickSta.getLed());
                        // led 异常显示
@@ -318,7 +326,7 @@
                        wrkMast.setIoTime(now);
                        wrkMast.setIoType(wrkMast.getIoType() - 50); // 入出库类型: 103->53,104->54,107->57
                        wrkMast.setWrkSts(2L); // 工作状态: 2.设备上走
                        wrkMast.setSourceStaNo(wrkMast.getStaNo()); // 源站
                        wrkMast.setSourceStaNo(staProtocol.getSiteId()); // 源站
                        wrkMast.setStaNo(staNo); // 目标站
                        wrkMast.setLocNo(wrkMast.getSourceLocNo()); // 目标库位 = 出库时的源库位
                        wrkMast.setSourceLocNo(""); // 源库位清空
@@ -623,12 +631,21 @@
        News.infoNoLog(""+mark+" - 1"+" - 0"+" - 堆垛机入出库作业下发 : 入库执行完毕");
    }
    @Resource
    private ConfigService configService;
    /**
     * 出库  ===>>  库位到堆垛机站
     * 2022-06-09 TQS修改,查询工作档LIST,遍历下发,防止第一个任务堵塞出库
     */
    public synchronized void locToCrnStn(CrnSlave slave, CrnProtocol crnProtocol,Integer mark) {
        News.warnNoLog(""+mark+" - 2"+" - 0"+" - 堆垛机入出库作业下发:执行出库");
        // 控制是否允许连续出库,不判断出库站点状态(根据状态启用)
        boolean crnAvailableOut = false;
        Config config = configService.selectOne(new EntityWrapper<Config>().eq("code","removeCrnAvailableOut"));
        if (config != null && config.getStatus() == 1) {
            crnAvailableOut = true;
        }
        for (CrnSlave.CrnStn crnStn : slave.getCrnOutStn()) {
            // 获取工作状态为11(生成出库ID)的出库工作档
            List<WrkMast> wrkMasts = wrkMastMapper.selectPakOutStep11(slave.getId(), crnStn.getStaNo());
@@ -667,8 +684,8 @@
                }
                // 判断堆垛机出库站状态
                if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")
                        && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()) {
                if (staProtocol.isAutoing() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")
                    && (crnAvailableOut || !staProtocol.isLoading() && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable())) {
                    // 堆垛机控制过滤
                    if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
//                        continue;
@@ -1355,9 +1372,9 @@
                if (wrkMast.getIoType() != 110 && wrkMast.getIoType() != 10) {
                    List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
                    wrkDetls.forEach(wrkDetl -> ledCommand.getMatDtos().add(new MatDto(wrkDetl.getOrderNo(),wrkDetl.getMatnr(),wrkDetl.getMaktx(),
                            wrkDetl.getBatch(), wrkDetl.getSpecs(),wrkDetl.getManuDate(),wrkDetl.getModel(),wrkDetl.getAnfme())));
                            wrkDetl.getBatch(), wrkDetl.getSpecs(),wrkDetl.getManuDate(),wrkDetl.getModel(),wrkDetl.getAnfme(),wrkDetl.getStandby1())));
                } else {
                    ledCommand.getMatDtos().add(new MatDto("","","","","","","",1.0));
                    ledCommand.getMatDtos().add(new MatDto("","","","","","","",1.0,""));
                }
                commands.add(ledCommand);
            }
@@ -1495,7 +1512,7 @@
                wrkMast.setCrnNo(crn.getId());
                wrkMast.setSourceLocNo(shallowLoc.getLocNo()); // 源库位
                wrkMast.setLocNo(loc.getLocNo()); // 目标库位
                wrkMast.setFullPlt(shallowLoc.getFullPlt()); // 满板
                wrkMast.setFullPlt(shallowLoc.getLocSts().equals("F") ? "Y" : "N"); // 满板
                wrkMast.setPicking("N"); // 拣料
                wrkMast.setExitMk("N"); // 退出
                wrkMast.setEmptyMk(shallowLoc.getLocSts().equals("D") ? "Y" : "N"); // 空板
src/main/resources/application.yml
@@ -69,6 +69,13 @@
      row: 1
      bay: 1
      lev: 1
    # 堆垛机入库站点3
    crnInStn[2]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 205
      row: 1
      bay: 9
      lev: 1
    # 堆垛机出库站点1
    crnOutStn[0]:
      devpPlcId: ${wcs-slave.devp[0].id}
@@ -132,18 +139,23 @@
      barcode: ${wcs-slave.barcode[1].id}
      backSta: 204
      led: ${wcs-slave.led[1].id}
#    # 拣料入库口1
#    pickSta[0]:
#      staNo: 104
#      barcode: ${wcs-slave.barcode[0].id}
#      backSta: 103
#      led: ${wcs-slave.led[1].id}
#    # 拣料入库口2
#    pickSta[1]:
#      staNo: 106
#      barcode: ${wcs-slave.barcode[1].id}
#      backSta: 105
#      led: ${wcs-slave.led[2].id}
    # 拣料入库口1
    pickSta[0]:
      staNo: 201
      barcode: ${wcs-slave.barcode[0].id}
      backSta: 202
      led: ${wcs-slave.led[0].id}
    # 拣料入库口2
    pickSta[1]:
      staNo: 205
      barcode: ${wcs-slave.barcode[2].id}
      led: ${wcs-slave.led[2].id}
    # 拣料入库口3
    pickSta[2]:
      staNo: 203
      barcode: ${wcs-slave.barcode[1].id}
      led: ${wcs-slave.led[1].id}
      backSta: 204
    # 出库口1
    outSta[0]:
      staNo: 204
@@ -155,7 +167,7 @@
    # 出库口3
    outSta[2]:
      staNo: 202
      led: ${wcs-slave.led[1].id}
      led: ${wcs-slave.led[0].id}
  # 条码扫描仪1
  barcode[0]:
@@ -176,23 +188,23 @@
  # LED1
  led[0]:
    id: 1
    ip: 192.168.5.104
    ip: 172.26.11.83
    port: 5005
    devpPlcId: ${wcs-slave.devp[0].id}
    staArr: 202
    staArr: 201,202
    crnId: 1
  # LED2
  led[1]:
    id: 2
    ip: 192.168.5.105
    ip: 172.26.11.84
    port: 5005
    devpPlcId: ${wcs-slave.devp[0].id}
    staArr: 204
    staArr: 203,204
    crnId: 1
  # LED3
  led[2]:
    id: 3
    ip: 192.168.5.106
    ip: 172.26.11.85
    port: 5005
    devpPlcId: ${wcs-slave.devp[0].id}
    staArr: 205
src/main/resources/mapper/WrkDetlMapper.xml
@@ -24,6 +24,12 @@
        <result column="modi_time" property="modiTime" />
        <result column="appe_user" property="appeUser" />
        <result column="appe_time" property="appeTime" />
        <result column="standby1" property="standby1" />
        <result column="standby2" property="standby2" />
        <result column="standby3" property="standby3" />
        <result column="box_type1" property="boxType1" />
        <result column="box_type2" property="boxType2" />
        <result column="box_type3" property="boxType3" />
    </resultMap>
    <select id="findByWorkNo" resultMap="BaseResultMap">