zwl
昨天 fcf47692a8115c53855e5f7a593238306cd59e69
1.新增拍照
2.初始化
1个文件已添加
12个文件已修改
228 ■■■■ 已修改文件
src/main/java/com/zy/asrs/entity/LocMast.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/WrkMast.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/WrkMastLog.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 71 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/utils/Utils.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/utils/VersionUtils.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/utils/HikUtils.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/command/CrnCommand.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/protocol/CrnProtocol.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 87 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/LocMastMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/WrkMastLogMapper.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/WrkMastMapper.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/LocMast.java
@@ -29,6 +29,9 @@
    @TableField("loc_no")
    private String locNo;
    @ApiModelProperty(value= "拍照图片")
    private String pic;
    /**
     * 库位类型
     */
src/main/java/com/zy/asrs/entity/WrkMast.java
@@ -313,6 +313,9 @@
    @TableField("full_plt")
    private String fullPlt;
    @ApiModelProperty(value= "拍照图片")
    private String pic;
    public String getWrkSts$(){
        BasWrkStatusMapper mapper = SpringUtils.getBean(BasWrkStatusMapper.class);
        BasWrkStatus entity = mapper.selectById(this.wrkSts);
src/main/java/com/zy/asrs/entity/WrkMastLog.java
@@ -334,6 +334,9 @@
    @TableField("line_number")
    private Long lineNumber;
    @ApiModelProperty(value= "拍照图片")
    private String pic;
    public WrkMastLog() {}
    public WrkMastLog(Integer wrkNo,String invWh,Date ymd,String mk,Integer whsType,Integer wrkSts,Integer ioType,Integer crnNo,String sheetNo,Double ioPri,Date wrkDate,String locNo,Integer staNo,Integer sourceStaNo,String sourceLocNo,String locSts,String picking,String linkMis,String onlineYn,String updMk,String exitMk,Integer pltType,String emptyMk,Date ioTime,Integer ctnType,String packed,String oveMk,Double mtnType,String userNo,Date crnStrTime,Date crnEndTime,Date plcStrTime,Date crnPosTime,Double loadTime,Double expTime,Double refWrkno,Date refIotime,Long modiUser,Date modiTime,Long appeUser,Date appeTime,String pauseMk,Date errorTime,String errorMemo,Integer ctnKind,String manuType,String memoM,Double scWeight,String logMk,Date logErrTime,String logErrMemo,String barcode,String PdcType,String ctnNo,String fullPlt,String preHave,String takeNone,Long lineNumber) {
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -20,10 +20,7 @@
import com.zy.common.model.SearchLocParam;
import com.zy.common.model.StartupDto;
import com.zy.common.service.CommonService;
import com.zy.common.utils.CollectionUtils;
import com.zy.common.utils.HttpHandler;
import com.zy.common.utils.News;
import com.zy.common.utils.RedisUtil;
import com.zy.common.utils.*;
import com.zy.core.CrnThread;
import com.zy.core.DevpThread;
import com.zy.core.cache.MessageQueue;
@@ -50,6 +47,7 @@
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
@@ -100,6 +98,9 @@
    @Value("${wms.url}")
    private String wmsUrl;
    @Autowired
    private HikUtils hikUtils;
    /**
     * 组托
@@ -708,7 +709,7 @@
                CrnProtocol crnProtocol = crnThread.getCrnProtocol();
                if (crnProtocol.modeType == CrnModeType.AUTO && crnProtocol.getTaskNo().equals(wrkMast.getWrkNo().shortValue())
                        && (crnProtocol.statusType == CrnStatusType.PUTTING || crnProtocol.statusType == CrnStatusType.WAITING)) {
                        && crnProtocol.statusType == CrnStatusType.WAITING) {
                    //放货中 或 等待确认
                    News.warnNoLog("" + mark + " - 0" + " - 开始执行");
@@ -1045,6 +1046,35 @@
                    }
                }
            }
            String ip = "";
            if (wrkMast.getStaNo()==401){
                ip = "172.26.4.231";
            }else if (wrkMast.getStaNo()==402){
                ip = "172.26.4.232";
            }else if (wrkMast.getStaNo()==307){
                ip = "172.26.1.231";
            }else if (wrkMast.getStaNo()==303){
                ip = "172.26.1.232";
            }else if (wrkMast.getStaNo()==304){
                ip = "172.26.1.233";
            }
            SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");
            String newName = sf.format(new Date()) + "_" + locMast.getLocNo();
            String pic = wrkMast.getPic();
            List<String> list = null;
            if (Cools.isEmpty(pic)) {
                list = new ArrayList<>();
            } else {
                list = JSON.parseArray(pic, String.class);
            }
            list.add(newName);
            //入库前抓拍
            try {
                hikUtils.startPic(ip, newName + ".jpg");
            } catch (Exception e) {
                log.error("入库前抓拍");
            }
            // 命令下发区 --------------------------------------------------------------------------
            CrnCommand crnCommand = new CrnCommand();
@@ -1083,6 +1113,7 @@
                News.info("787 修改工作档状态2.设备上走 => 3.吊车入库中 " + wrkMast);
                Date now = new Date();
                wrkMast.setWrkSts(3L);
                wrkMast.setPic(JSON.toJSONString(list));
                wrkMast.setCrnStrTime(now);
                wrkMast.setModiTime(now);
                if (wrkMastMapper.updateById(wrkMast) == 0) {
@@ -1144,7 +1175,7 @@
                    continue;
                }
                //堆垛机接驳站点没有空料架
                if(!staProtocol.isEmptyOutType()&&(Cools.isEmpty(wrkMast.getCtnType())||wrkMast.getCtnType()==0)){
                if(staProtocol.getSiteId()==307&&!staProtocol.isEmptyOutType()&&(Cools.isEmpty(wrkMast.getCtnType())||wrkMast.getCtnType()==0)){
                    //请求wms下发agv搬运空料架到堆垛机接驳站点任务
                    try {
                        HashMap<String,Object> hashMap=new HashMap<>();
@@ -1167,10 +1198,15 @@
                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                    }
                }
                Boolean config = true;
                if (staProtocol.getSiteId()==307 && !staProtocol.isEmptyOutType()){
                    config = false;
                }
                // 判断堆垛机出库站状态
                if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")
                        && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable() && staProtocol.isEmptyOutType()) {
                        && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable() && config) {
                    // 命令下发区 --------------------------------------------------------------------------
                    // 堆垛机控制过滤
@@ -1252,6 +1288,16 @@
                        }
                        break;
                    }
                }else if ((staProtocol.getSiteId()==304 || staProtocol.getSiteId()==301) && staProtocol.isAutoing()
                        && (staProtocol.isLoading() || staProtocol.getWorkNo() != 0)) {
                    if (staProtocol.getSiteId() == 304){
                        wrkMast.setSourceStaNo(301);
                    }else {
                        wrkMast.setSourceStaNo(304);
                    }
                    wrkMast.setModiTime(new  Date());
                    wrkMastMapper.updateById(wrkMast);
                }
            }
@@ -1760,7 +1806,7 @@
                if (staProtocol.isAutoing()
                        && staProtocol.isInEnable()
                        && staProtocol.isEmptyMk()
                        && (staProtocol.getWorkNo() > 9990 && staProtocol.getWorkNo() <= 9999)
                        && (staProtocol.getWorkNo() ==0)
                        && staProtocol.isPakMk()
//                        && staProtocol.getEmptyInType() == 1
                ) {
@@ -1785,6 +1831,11 @@
                            String errorMsg = "扫码失败,请重试";
                            MessageQueue.offer(SlaveType.Led, emptyInSta.getLed(), new Task(5, errorMsg));
                        }
                        continue;
                    }
                    WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("barcode", barcode));
                    WaitPakin waitPakin = waitPakinMapper.selectOne(new EntityWrapper<WaitPakin>().eq("zpallet", barcode).getEntity());
                    if (waitPakin != null || wrkMast != null) {
                        continue;
                    }
@@ -2393,7 +2444,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"); // 空板
@@ -2498,7 +2549,7 @@
                    wrkMast.setCrnNo(crn.getId());
                    wrkMast.setSourceLocNo(sourceLocNo); // 源库位
                    wrkMast.setLocNo(locNo); // 目标库位
                    wrkMast.setFullPlt("N"); // 满板:Y
                    wrkMast.setFullPlt(sourceLoc.getLocSts().equals("F")?"Y":"N"); // 满板:Y
                    wrkMast.setPicking("N"); // 拣料
                    wrkMast.setExitMk("N"); // 退出
                    wrkMast.setEmptyMk(sourceLoc.getLocSts().equals("D") ? "Y" : "N"); // 空板
src/main/java/com/zy/asrs/utils/Utils.java
@@ -88,7 +88,7 @@
    public static String getShallowLoc(SlaveProperties slaveProperties, String deepLoc) {
        int row = getRow(deepLoc);
        int shallowRow = row;
        if (slaveProperties.getDoubleLocsLeft().contains(row)) {
        if (slaveProperties.getDoubleLocsRight().contains(row)) {
            shallowRow = (row + 1);
        }else {
            shallowRow = (row - 1);
src/main/java/com/zy/asrs/utils/VersionUtils.java
@@ -39,4 +39,6 @@
        wrkDetl.setZpallet(locDetl.getZpallet()); // 托盘条码
        wrkDetl.setAnfme(locDetl.getAnfme());//数量
    }
}
src/main/java/com/zy/common/utils/HikUtils.java
New file
@@ -0,0 +1,39 @@
package com.zy.common.utils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.HashMap;
@Component
public class HikUtils {
    @Value("${zyHikUrl}")
    private String hikUrl;
    public void startPic(String ip, String filename) {
        try {
            HashMap<String, Object> data = new HashMap<>();
            data.put("ip", ip);
            data.put("filename", filename);
            String response = new HttpHandler.Builder()
                    .setUri(hikUrl)
                    .setPath("/startPic")
                    .setJson(JSON.toJSONString(data))
                    .build()
                    .doPost();
            JSONObject jsonObject = JSON.parseObject(response);
            if (jsonObject.getInteger("code").equals(200)) {
                News.error("请求接口成功!!!url:{};request:{};response:{}", hikUrl + "/startPic", JSON.toJSONString(data), response);
            } else {
                News.error("请求接口失败!!!url:{};request:{};response:{}", hikUrl + "/startPic", JSON.toJSONString(data), response);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
src/main/java/com/zy/core/model/command/CrnCommand.java
@@ -38,6 +38,11 @@
     */
    private Short taskMode = 0;
    private String barcode= "";
    //火警: 1是火警
    private short fireStaut = 0;
    @JSONField(serialize = false)
    private CrnTaskModeType taskModeType;
@@ -74,10 +79,6 @@
    // 任务确认 0:未确认 1:已确认
    private Short command = 0;
    private String barcode= "";
    //火警: 1是火警
    private short fireStaut = 0;
    public void setTaskMode(Short taskMode){
        this.taskMode = taskMode;
src/main/java/com/zy/core/model/protocol/CrnProtocol.java
@@ -54,6 +54,11 @@
     */
    public Short status;
    private String barcode= "";
    //火警: 1是火警
    private short fireStaut = 0;
    /**
     * 状态枚举
     */
src/main/resources/application.yml
@@ -36,6 +36,8 @@
wms:
  url: 127.0.0.1:8083/ljqwms
zyHikUrl: 10.10.10.200:9091/hik
# 下位机配置
wcs-slave:
  # 双深
@@ -45,7 +47,7 @@
  # 左深库位排号
#  doubleLocsLeft: 4,7,11,15,19,23
  # 右深库位排号
  doubleLocsRight: 3
  doubleLocsRight: 1
  # 左浅库位排号
  shallowLocsLeft: 1
  # 右浅库位排号
@@ -76,12 +78,19 @@
      row: 1
      bay: 16
      lev: 1
    # 堆垛机入库站点
    crnInStn[2]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 304
      row: 3
      bay: 1
      lev: 1
    # 堆垛机出库站点
    crnOutStn[0]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 304
      row: 1
      bay: 2
      row: 3
      bay: 1
      lev: 1
    # 堆垛机出库站点
    crnOutStn[1]:
@@ -89,6 +98,13 @@
      staNo: 307
      row: 1
      bay: 16
      lev: 1
    # 堆垛机出库站点
    crnOutStn[2]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 301
      row: 2
      bay: 1
      lev: 1
  # 输送线1
  devp[0]:
@@ -99,32 +115,70 @@
    slot: 0
    # 入库口1
    inSta[0]:
      staNo: 302
      staNo: 301
      barcode: ${wcs-slave.barcode[0].id}
      backSta: 303
      backSta: 302
      led: ${wcs-slave.led[0].id}
    # 入库口2
#    inSta[1]:
#      staNo: 1076
#      barcode: ${wcs-slave.barcode[1].id}
#      backSta: 1075
#      led: ${wcs-slave.led[1].id}
    inSta[1]:
      staNo: 304
      barcode: ${wcs-slave.barcode[1].id}
      backSta: 305
      led: ${wcs-slave.led[1].id}
    # 入库口3
    inSta[2]:
      staNo: 307
      barcode: ${wcs-slave.barcode[2].id}
      backSta: 307
      led: ${wcs-slave.led[2].id}
    # 空板入库口1
    emptyInSta[0]:
      staNo: 302
      staNo: 301
      barcode: ${wcs-slave.barcode[0].id}
      backSta: 303
      backSta: 302
      led: ${wcs-slave.led[0].id}
    # 空板入库口1
    emptyInSta[1]:
      staNo: 304
      barcode: ${wcs-slave.barcode[1].id}
      backSta: 305
      led: ${wcs-slave.led[1].id}
    # 空板入库口1
    emptyInSta[2]:
      staNo: 307
      barcode: ${wcs-slave.barcode[2].id}
      backSta: 307
      led: ${wcs-slave.led[2].id}
    # 拣料入库口1
    pickSta[0]:
      staNo: 302
      staNo: 301
      barcode: ${wcs-slave.barcode[0].id}
      backSta: 303
      backSta: 302
      led: ${wcs-slave.led[0].id}
    # 拣料入库口1
    pickSta[1]:
      staNo: 304
      barcode: ${wcs-slave.barcode[1].id}
      backSta: 305
      led: ${wcs-slave.led[1].id}
    # 拣料入库口1
    pickSta[2]:
      staNo: 307
      barcode: ${wcs-slave.barcode[2].id}
      backSta: 307
      led: ${wcs-slave.led[2].id}
    # 出库口1
    outSta[0]:
      staNo: 303
      led: ${wcs-slave.led[0].id}
    # 出库口1
    outSta[1]:
      staNo: 306
      led: ${wcs-slave.led[1].id}
    # 出库口1
    outSta[2]:
      staNo: 307
      led: ${wcs-slave.led[2].id}
#  # 输送线2
#  devp[1]:
#    id: 2
@@ -160,6 +214,11 @@
    id: 2
    ip: 10.10.10.121
    port: 51236
  # 条码扫描仪2
  barcode[2]:
    id: 3
    ip: 10.10.10.121
    port: 51236
#  # 条码扫描仪3
#  barcode[2]:
#    id: 3
src/main/resources/mapper/LocMastMapper.xml
@@ -34,7 +34,7 @@
        <result column="mk" property="mk" />
        <result column="barcode" property="barcode" />
        <result column="ctn_no" property="ctnNo" />
        <result column="pic" property="pic" />
    </resultMap>
    <select id="queryFreeLocMast" resultMap="BaseResultMap">
src/main/resources/mapper/WrkMastLogMapper.xml
@@ -63,6 +63,7 @@
        <result column="pre_have" property="preHave" />
        <result column="take_none" property="takeNone" />
        <result column="line_number" property="lineNumber" />
        <result column="pic" property="pic" />
    </resultMap>
src/main/resources/mapper/WrkMastMapper.xml
@@ -59,6 +59,7 @@
<!--        <result column="Pdc_type" property="PdcType" />-->
        <result column="ctn_no" property="ctnNo" />
        <result column="full_plt" property="fullPlt" />
        <result column="pic" property="pic" />
    </resultMap>