pang.jiabao
昨天 945764de58898661a3f3197e58353141b5deaf91
侧面输送线出入库流程对接
13个文件已修改
1个文件已添加
240 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/OpenController.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/TaskWrk.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/TaskWrkLog.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/PreStoragePallet.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/TaskCreateParam.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/TaskReportScheduler.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/protocol/StaProtocol.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensDevpThread.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/TaskWrkLogMapper.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/TaskWrkMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/wcs和wms接口(2).docx 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OpenController.java
@@ -9,10 +9,18 @@
import com.zy.asrs.domain.param.ApplyInDevpDto;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.CrnStatusParam;
import com.zy.asrs.entity.param.PreStoragePallet;
import com.zy.asrs.entity.param.TaskCreateParam;
import com.zy.asrs.entity.param.WMSAndAGVInterfaceParam;
import com.zy.asrs.service.*;
import com.zy.asrs.service.impl.OpenServiceImpl;
import com.zy.common.web.BaseController;
import com.zy.core.DevpThread;
import com.zy.core.cache.MessageQueue;
import com.zy.core.cache.SlaveConnection;
import com.zy.core.enums.SlaveType;
import com.zy.core.model.Task;
import com.zy.core.model.protocol.StaProtocol;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
@@ -52,6 +60,32 @@
    @Autowired
    private BasCrnErrorService basCrnErrorService;
    // WMS入库前下发码盘信息
    @PostMapping("/preStoragePallet")
    public R preStoragePallet(@RequestHeader String appkey, @RequestBody PreStoragePallet preStoragePallet, HttpServletRequest request) {
        auth(appkey, preStoragePallet, request);
        if(Cools.isEmpty(preStoragePallet.getSite(),preStoragePallet.getLx(),preStoragePallet.getLev())) {
            return R.error("参数不完整,请检查:"  + preStoragePallet);
        }
        DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1);
        StaProtocol staProtocol = devpThread.getStation().get(preStoragePallet.getSite());
        if (staProtocol == null) {
            return R.error("站点线程不存在:" + preStoragePallet.getSite());
        } else {
            staProtocol = staProtocol.clone();
        }
        staProtocol.setMp((short) (preStoragePallet.getLev() > 1 ? 1 : 2));
        staProtocol.setLev(preStoragePallet.getLev());
        staProtocol.setLx(OpenServiceImpl.getGzlx(preStoragePallet.getLx()));
        boolean offer = MessageQueue.offer(SlaveType.Devp, 1, new Task(3, staProtocol));
        if(!offer) {
            return R.error("推送队列失败");
        }
        return R.ok("入库前下发码盘信息成功");
    }
    //创建任务
    @PostMapping("/taskCreate")
    @Transactional
src/main/java/com/zy/asrs/entity/TaskWrk.java
@@ -180,6 +180,7 @@
    @TableField("type")
    private String type;
    // 1:码盘。  2不码盘
    @TableField("mp")
    private short mp;
@@ -189,6 +190,9 @@
    @TableField("lev")
    private short lev;
    @TableField("mp_completed_report")
    private Integer mpCompletedReport;
    public TaskWrk() {
    }
src/main/java/com/zy/asrs/entity/TaskWrkLog.java
@@ -180,6 +180,9 @@
    @TableField("lev")
    private short lev;
    @TableField("mp_completed_report")
    private Integer mpCompletedReport;
    public TaskWrkLog() {
    }
src/main/java/com/zy/asrs/entity/param/PreStoragePallet.java
New file
@@ -0,0 +1,28 @@
package com.zy.asrs.entity.param;
import lombok.Data;
/**
 * @author pang.jiabao
 * @description ç«™ç‚¹ç ç›˜ä¿¡æ¯
 * @createDate 2025/10/21 14:29
 */
@Data
public class PreStoragePallet {
    /**
     * ç«™ç‚¹
     */
    private int site;
    /**
     * å·¥è£…类型 WMS下发 N65/N87/G4X/B10 WCS转换为4,N74/PPE è½¬æ¢ä¸º3
     */
    private String lx;
    /**
     * ç ç›˜å±‚æ•°
     */
    private short lev;
}
src/main/java/com/zy/asrs/entity/param/TaskCreateParam.java
@@ -36,14 +36,9 @@
    private Integer crn;
    /**
     * 1:码盘。  2不码盘
     * å·¥è£…类型
     */
    private short mp;
    /**
     * ç§ç±»1 æ°¸è¿œä¸å ç›˜ï¼›2叠2层;3叠三层;4叠四层
     */
    private short lx;
    private String lx;
    /**
     * ç ç›˜å±‚æ•°
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -182,7 +182,7 @@
                        storageEscalationParam.setBarcode(BoxNo);
                        storageEscalationParam.setMatIdList(staProtocol.getMatIdList());
                        storageEscalationParam.setFullPlt(staProtocol.isFullPlt() ? 1 : 0);
                        storageEscalationParam.setMpHigh(staProtocol.getMpHigh());
                        storageEscalationParam.setMpHigh((short) (staProtocol.getSiteId() < 200 ? 1 :staProtocol.isHigh() ? 2 : staProtocol.isLow() ? 1 : 0));    // é«˜åº¦ï¼Œä¾§é¢ç ç›˜çš„高度 ä½Ž1,高2
                        log.info("组托入库={}", storageEscalationParam);
                        TaskWrk taskWrk = toWmsService.getLocNoFromWms(storageEscalationParam);
                        if (taskWrk == null) {
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -47,6 +47,26 @@
    @Value("${wms.url}")
    private String wmsUrl;
    /**
     * å·¥è£…类型 WMS下发 N65/N87/G4X/B10 WCS转换为4,N74/PPE è½¬æ¢ä¸º3
     */
    public static short getGzlx(String lx) {
        if (Cools.isEmpty(lx)) {
            return 0;
        }
        switch (lx) {
            case "N74":
            case "PPE":
                return 3;
            case "N65":
            case "N87":
            case "B10":
                return 4;
            default:
                return 0;
        }
    }
    @Override
    public HashMap<String, Object> taskCreate(TaskCreateParam param) {
        HashMap<String, Object> map = new HashMap<>();
@@ -81,8 +101,8 @@
        taskWrk.setBarcode(param.getBarcode());//条码
        taskWrk.setCrnNo(locMast.getCrnNo());
        taskWrk.setType(param.getType());
        taskWrk.setMp(param.getMp());
        taskWrk.setLx(param.getLx());
        taskWrk.setMp((short) (param.getLev() > 1 ? 1 : 2));
        taskWrk.setLx(getGzlx(param.getLx()));
        taskWrk.setLev(param.getLev());
        if (param.getIoType() == 1) {
            taskWrk.setWrkSts(1);
src/main/java/com/zy/asrs/task/TaskReportScheduler.java
@@ -38,6 +38,7 @@
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
 * å®šæ—¶å°†ä»»åŠ¡(完成、取消)转成日志
@@ -65,6 +66,9 @@
    @Value("${wms.completeDevpTask}")
    private String completeDevpTask;
    @Value("${wms.reportPalletizingCompleted}")
    private String reportPalletizingCompleted;
    @Resource
    private TaskWrkMapper taskWrkMapper;
@@ -82,6 +86,71 @@
        add(301);add(302);add(303);add(304);add(305);add(306);add(307);add(308);
    }};
    // ä¾§é¢ç ç›˜å®Œæˆä¸ŠæŠ¥wms
    @Scheduled(cron = "0/3 * * * * ? ")
    public synchronized void reportPalletizingCompleted() {
        DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1);
        if (devpThread != null) {
            Map<Integer, StaProtocol> staProtocolMap = devpThread.getStation();
            int[] siteArray = new int[]{203, 207, 212};
            for (int site : siteArray) {
                StaProtocol staProtocol = staProtocolMap.get(site);
                if (staProtocol != null) {
                    short mpCompletedFlag = staProtocol.getMpCompletedFlag();
                    if (mpCompletedFlag == 1) {
                        TaskWrk taskWrk = taskWrkMapper.selectByWrkNo(Integer.valueOf(staProtocol.getWorkNo()));
                        if (taskWrk != null) {
                            // è¯·æ±‚体
                            JSONObject request = new JSONObject();
                            request.put("site", site);
                            String response = "";
                            boolean bool = false;
                            try {
                                response = new HttpHandler.Builder()
                                        // .setHeaders(headParam)
                                        .setUri(wmsUrl)
                                        .setPath(reportPalletizingCompleted)
                                        .setJson(JSON.toJSONString(request))
                                        .build()
                                        .doPost();
                                if (!Cools.isEmpty(response)) {
                                    JSONObject jsonObject = JSON.parseObject(response);
                                    if (Integer.parseInt(String.valueOf(jsonObject.get("code"))) == 200) {
                                        bool = true;
                                        // æŽ¨é€é˜Ÿåˆ—
                                        boolean offer = MessageQueue.offer(SlaveType.Devp, 4, new Task(1, staProtocol));
                                        if (offer) {
                                            // æ›´æ–°æ•°æ®åº“
                                            taskWrk.setMpCompletedReport(1);
                                            taskWrkMapper.updateById(taskWrk);
                                        } else {
                                            log.error("侧面码盘完成上报wms推送队列失败,站点:{},任务号:{}", site, staProtocol.getWorkNo());
                                        }
                                    }
                                }
                            } catch (Exception e) {
                                log.error("侧面码盘完成上报wms失败{},返回值={}", taskWrk, response);
                            } finally {
                                apiLogService.save("侧面码盘完成上报wms"
                                        , wmsUrl + reportPalletizingCompleted
                                        , null
                                        , "127.0.0.1"
                                        , JSON.toJSONString(request)
                                        , response
                                        , bool
                                );
                            }
                        } else {
                            log.error("侧面码盘完成上报wms没有找到该任务,站点:{},任务号:{}", site, staProtocol.getWorkNo());
                        }
                    }
                }
            }
        }
    }
    // WMS分配入库库位异常上报
    @Scheduled(cron = "0/5 * * * * ? ")
    @Transactional
src/main/java/com/zy/core/model/protocol/StaProtocol.java
@@ -73,16 +73,13 @@
    // æ¡ç ï¼Œä¾§é¢å‡ºåº“给输送线
    private String barcode;
    // é«˜åº¦ï¼Œä¾§é¢ç ç›˜çš„高度
    private short mpHigh;
    /**
     * 1:码盘。  2不码盘
     */
    private short mp;
    /**
     * ç§ç±»1 æ°¸è¿œä¸å ç›˜ï¼›2叠2层;3叠三层;4叠四层
     * å·¥è£…类型 WMS下发 N65/N87/G4X/B10 WCS转换为4,N74/PPE è½¬æ¢ä¸º3
     */
    private short lx;
@@ -91,6 +88,11 @@
     */
    private short lev;
    /**
     * ç ç›˜å®Œæˆæ ‡è¯† 0.未完成,1.完成
     */
    private short mpCompletedFlag;
    // å¤–形检测 ------------------------------------------------------------------------
    // å‰è¶…限
src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -164,6 +164,11 @@
                        write3((StaProtocol) task.getData());
                        read();
                        break;
                    // ä¾§é¢ç ç›˜å®Œæˆä¸ŠæŠ¥wms成功后重置plc
                    case 4:
                        write4((StaProtocol) task.getData());
                        read();
                        break;
                    default:
                        break;
                }
@@ -295,6 +300,15 @@
                        staProtocol.setPakMk(true);
                    }
                }
            }
            // è¯»ä¾§é¢ç ç›˜å®Œæˆä¿¡å·
            OperateResultExOne<byte[]> resultMp = siemensS7Net.Read("DB79.362", (short) 4);
            if (resultMp.IsSuccess) {
                StaProtocol staProtocol207 = station.get(207);
                StaProtocol staProtocol212 = station.get(212);
                staProtocol207.setMpCompletedFlag(siemensS7Net.getByteTransform().TransInt16(resultMp.Content, 0));
                staProtocol212.setMpCompletedFlag(siemensS7Net.getByteTransform().TransInt16(resultMp.Content, 2));
            }
            // è¯»å–正面条码
@@ -684,7 +698,7 @@
            OperateResult writeResult3 = siemensS7Net.Write(addressPre + lev, staProtocol.getLev());    // ç ç›˜å±‚æ•°
            if (writeResult1.IsSuccess && writeResult2.IsSuccess && writeResult3.IsSuccess) {
                    writeFlag = true;
                    log.info("码盘信息写入输送线命令后返回成功,并且回读成功。输送线plc编号={},{},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
                    log.info("码盘信息写入输送线命令后返回成功【{},{},{},{}】,并且回读成功,写入次数={}", staProtocol.getSiteId(),staProtocol.getMp(),staProtocol.getLx(),staProtocol.getLev(), writeCount);
                    break;
            } else {
                writeCount++;
@@ -693,10 +707,38 @@
        }
        //写命令尝试了5次还是失败了
        if (!writeFlag) {
            //重新添加数据到任务队列
            MessageQueue.offer(SlaveType.Devp, 1, new Task(3, staProtocol));
            log.error("码盘信息写入输送线命令尝试5次失败重新推送队列。输送线plc编号={},站点数据={}", slave.getId(), JSON.toJSON(staProtocol));
//        if (!writeFlag) {
//            //重新添加数据到任务队列
//            MessageQueue.offer(SlaveType.Devp, 1, new Task(3, staProtocol));
//            log.error("码盘信息写入输送线命令尝试5次失败重新推送队列。输送线plc编号={},站点数据={}", slave.getId(), JSON.toJSON(staProtocol));
//        }
    }
    private void write4(StaProtocol staProtocol){
        int offset = 0;
        switch (staProtocol.getSiteId()) {
            case 207: offset = 362;break;
            case 212: offset = 364 ;break;
            default:
                log.error("重置码盘信号站点有误:{}" , staProtocol.getSiteId());
                return;
        }
        String addressPre = "DB79.";
        //任务下发次数
        int writeCount = 0;
        while (writeCount < 5) {
            OperateResult writeResult1 = siemensS7Net.Write(addressPre + offset, (short) 0);
            if (writeResult1.IsSuccess) {
                log.info("侧面码盘完成上报wms成功后重置信号写入输送线命令后返回成功【{}】,并且回读成功,写入次数={}", staProtocol.getSiteId(), writeCount);
                break;
            } else {
                writeCount++;
                log.error("侧面码盘完成上报wms成功后重置信号写入输送线命令失败。输送线plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
            }
        }
    }
src/main/resources/application.yml
@@ -64,6 +64,8 @@
  executionStatusReport: /executionStatusReport
  # å¤–置输送线流动到位上报wms
  completeDevpTask: /completeDevpTask
  # ä¾§é¢å‡ºåº“码盘完成上报wms
  reportPalletizingCompleted: /taskStateReport
  # æµ‹è¯•环境
#  url: http://127.0.0.1:8080/ghlnwms
#  taskStatusFeedbackPath: api/StereoscopicCallBack/TaskExecCallback
src/main/resources/mapper/TaskWrkLogMapper.xml
@@ -28,6 +28,7 @@
        <result column="mp" property="mp"/>
        <result column="lx" property="lx"/>
        <result column="lev" property="lev"/>
        <result column="mp_completed_report" property="mpCompletedReport"/>
    </resultMap>
</mapper>
src/main/resources/mapper/TaskWrkMapper.xml
@@ -28,7 +28,7 @@
        <result column="mp" property="mp"/>
        <result column="lx" property="lx"/>
        <result column="lev" property="lev"/>
        <result column="mp_completed_report" property="mpCompletedReport"/>
    </resultMap>
    
    <select id="selectByTaskNo" resultMap="BaseResultMap">
src/main/resources/wcsºÍwms½Ó¿Ú(2).docx
Binary files differ