自动化立体仓库 - WMS系统
添加了联结器库特殊站点时调用AGV特殊模板,添加人员入侵系统检测到有人时急停AGV的接口,修复AGV工作档没有任务号的漏洞
11个文件已修改
141 ■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/LocDetlController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/MesController.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/MesService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MesServiceImpl.java 47 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/AGVTaskReportScheduler.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/OrderSyncScheduler.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/AGVTaskReportHandler.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-dev.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/TaskMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/LocDetlController.java
@@ -306,7 +306,7 @@
            if (Cools.isEmpty(mat)) {
                continue;
            }
            if (!Cools.isEmpty(mat                                                                          .getStoreMax()) || !Cools.isEmpty(mat.getStoreMin())) {
            if (!Cools.isEmpty(mat.getStoreMax()) || !Cools.isEmpty(mat.getStoreMin())) {
                abnormalLocDetlParam.setStoreMax(mat.getStoreMax());
                abnormalLocDetlParam.setStoreMaxDate(mat.getStoreMaxDate());
                abnormalLocDetlParam.setStoreMin(mat.getStoreMin());
src/main/java/com/zy/asrs/controller/MesController.java
@@ -13,6 +13,7 @@
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
@RestController
@Slf4j
@@ -118,4 +119,26 @@
        return mesService.queryInventory(itemno,orderNo);
    }
    @PostMapping("/api/mes/pauseAGV")
    public MesReturn AGVPause(@RequestBody JSONObject param) throws IOException {
        MesReturn mesReturn = new MesReturn();
        int AGVType;
        if (param.containsKey("zoneCode")){
            param.put("mapCode", "BB");
            param.put("invoke", "FREEZE");
            AGVType = 1;
        }else {
            AGVType = 2;
        }
        if (mesService.AGVPause(param, AGVType) == 1){
            mesReturn.setSuccess("1");
            mesReturn.setMessage("成功");
            return mesReturn;
        }else {
            mesReturn.setSuccess("2");
            mesReturn.setMessage("失败");
            return mesReturn;
        }
    }
}
src/main/java/com/zy/asrs/service/MesService.java
@@ -147,4 +147,6 @@
    int outStation(TransParent apply);
    MesReturn queryInventory(String itemno,String orderNo);
    int AGVPause(JSONObject params, int AGVType);
}
src/main/java/com/zy/asrs/service/impl/MesServiceImpl.java
@@ -1,23 +1,21 @@
package com.zy.asrs.service.impl;
import com.alibaba.excel.util.DateUtils;
import com.alibaba.excel.util.StringUtils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.core.common.DateUtils;
import com.core.common.SnowflakeIdWorker;
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.mes.*;
import com.zy.asrs.entity.param.CombParam;
import com.zy.asrs.entity.param.EmptyPlateOutParam;
import com.zy.asrs.entity.rcs.*;
import com.zy.asrs.mapper.AgvInfoMapper;
import com.zy.asrs.mapper.MatItemBarcodeMapper;
import com.zy.asrs.service.*;
import com.zy.asrs.utils.OrderInAndOutUtil;
import com.zy.common.model.DetlDto;
import com.zy.common.model.enums.WorkNoType;
import com.zy.common.service.CommonService;
import lombok.extern.slf4j.Slf4j;
@@ -30,16 +28,22 @@
import javax.annotation.Resource;
import java.text.ParseException;
import java.util.*;
import java.util.concurrent.ExecutionException;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@Slf4j
@Service
public class MesServiceImpl implements MesService {
    @Value("${mes.url}")
    public String MES_URL;
    // 海康RCS地址
    @Value("${hik.url}")
    private String HIK_URL;
    // 华晓RCS地址
    @Value("${hx.url}")
    private String HX_URL;
    @Value("${wms.currentName}")
    public String WMS_CURRENT_NAME;
    @Value("${wms.wmsTransStartStation1}")
@@ -243,7 +247,7 @@
            OrderPakin orderPakin = new OrderPakin();
            orderPakin.setUuid(String.valueOf(snowflakeIdWorker.nextId()));
            orderPakin.setOrderNo(entry.getKey());
            orderPakin.setOrderTime(com.core.common.DateUtils.convert(now));
            orderPakin.setOrderTime(DateUtils.convert(now));
            orderPakin.setDocType(docType);
            orderPakin.setSettle(1L);
            orderPakin.setStatus(1);
@@ -553,7 +557,7 @@
            OrderPakin orderPakin = new OrderPakin();
            orderPakin.setUuid(String.valueOf(snowflakeIdWorker.nextId()));
            orderPakin.setOrderNo(mesInApply.getOrderNo());
            orderPakin.setOrderTime(com.core.common.DateUtils.convert(now));
            orderPakin.setOrderTime(DateUtils.convert(now));
            orderPakin.setDocType(docType);
            orderPakin.setSettle(settle);
            orderPakin.setStatus(1);
@@ -956,7 +960,7 @@
            OrderPakout orderPakout = new OrderPakout();
            orderPakout.setUuid(String.valueOf(snowflakeIdWorker.nextId()));
            orderPakout.setOrderNo(mesCallOutApply.getOrderNo());
            orderPakout.setOrderTime(com.core.common.DateUtils.convert(now));
            orderPakout.setOrderTime(DateUtils.convert(now));
            orderPakout.setDocType(docType.getDocId());
            orderPakout.setSettle(settle);
            orderPakout.setStatus(1);
@@ -1031,7 +1035,7 @@
            OrderPakin orderPakin = new OrderPakin();
            orderPakin.setUuid(String.valueOf(snowflakeIdWorker.nextId()));
            orderPakin.setOrderNo(mesCallOutApply.getOrderNo());
            orderPakin.setOrderTime(com.core.common.DateUtils.convert(now));
            orderPakin.setOrderTime(DateUtils.convert(now));
            orderPakin.setDocType(docType.getDocId());
            orderPakin.setSettle(1L);
            orderPakin.setStatus(1);
@@ -1396,6 +1400,27 @@
        return mesReturn;
    }
    @Override
    public int AGVPause(JSONObject params, int AGVType){
        MesReturn mesReturn = new MesReturn();
        String hik_url = "api/robot/controller/zone/pause";
        String hx_url = "";
        String URL = "";
        if (AGVType == 1){
            URL = HIK_URL + hik_url;
        }else {
            URL = HX_URL + hx_url;
        }
        String response = RcsServiceImpl.sendPost(URL, JSONObject.toJSONString(params));
        JSONObject jsonObject = JSON.parseObject(response);
        if (!StringUtils.isEmpty(response) && jsonObject.getString("code").equals("SUCCESS")) {
                return 1;
        }else
            return 2;
    }
    // endregion
    /**
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -1331,7 +1331,7 @@
    @Transactional
    public R callEmptyBinOutBound(String staNo, String locType, String palletFormat, String agvTaskNo, Long userId) {
        EntityWrapper<LocMast> wrapper = new EntityWrapper<>();
        wrapper.eq("loc_sts", 'D').eq("loc_type2", locType);
        wrapper.eq("loc_sts", "D").eq("loc_type2", Integer.parseInt(locType));
        if (palletFormat != null && !palletFormat.isEmpty()) {
            wrapper.like("barcode", palletFormat);
        }
@@ -1380,12 +1380,12 @@
        wrkMast.setEmptyMk("Y"); // 空板
        wrkMast.setLinkMis("N");
        wrkMast.setUserNo(agvTaskNo);
        wrkMast.setUserNo(String.valueOf(agvTaskNo));
        wrkMast.setAppeUser(userId);
        wrkMast.setAppeTime(now);
        wrkMast.setModiUser(userId);
        wrkMast.setModiTime(now);
        wrkMast.setMemo(staNo);
        wrkMast.setUserNo(String.valueOf(agvTaskNo));
        wrkMastService.insert(wrkMast);
        // 更新库位状态
src/main/java/com/zy/asrs/task/AGVTaskReportScheduler.java
@@ -76,11 +76,14 @@
                List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo());
                if (wrkMast.getIoType()==110){
                    TaskNo = wrkDetls.get(0).getOrderNo();
                    if (wrkMast == null){
                        TaskNo = 55555 + "aa" + date.getTime();
                    }
                    taskType = "ZX-AGV-08-1";
                }else{
                    if (wrkDetls != null && !Cools.isEmpty(wrkDetls.get(0).getOrderNo())){
                        OrderPakout orderPakout = orderPakoutService.selectByNo(wrkDetls.get(0).getOrderNo());
                        TaskNo = wrkDetls.get(0).getOrderNo();
                        if (orderPakout.getDocType()==11){
                            taskType = "PP-AGV";
                        }else if (orderPakout.getDocType()==12){
src/main/java/com/zy/asrs/task/OrderSyncScheduler.java
@@ -138,7 +138,7 @@
    }
    // 入库订单完成上报-领料单,原材料
    //@Scheduled(cron = "0/30 * * * * ? ")
    @Scheduled(cron = "0/30 * * * * ? ")
    @Async("orderThreadPool")
    void inOrderCompleteReport() {
        String erpReport = Parameter.get().getErpReport();
src/main/java/com/zy/asrs/task/handler/AGVTaskReportHandler.java
@@ -45,18 +45,32 @@
        String taskType = "PP";
        Boolean flag1 = false;
        Boolean flag2 = false;
        Boolean cpFlag1 = false;
        Boolean cpFlag2 = false;
        if(stationProperties.getStation().contains(task.getStaNo())){
            taskType = "LJIN";
            flag1 = true;
            if (task.getStaNo().equals("Z-LVL18")){
                taskType = "LJCPIN";
                cpFlag1 = true;
            }else {
                taskType = "LJIN";
                flag1 = true;
            }
        }
        if (stationProperties.getStation().contains(task.getSourceStaNo())){
            taskType = "LJOUT";
            flag2 = true;
            if (task.getSourceStaNo().equals("Z-LVL18")){
                cpFlag2 = true;
                taskType = "LJCPOUT";
            }else{
                taskType = "LJOUT";
                flag2 = true;
            }
        }
        if(flag1 && flag2){
            taskType = "LJBOTH";
        }
        if (cpFlag1 && cpFlag2){
            taskType = "LJCPBOTH";
        }
        //AGV区域中无法用-
        String StaNo = task.getStaNo();
        String SourceStaNo = task.getSourceStaNo();
src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -628,19 +628,21 @@
            //对转序搬运完成的任务结果反馈给mes
        }else if(task.getTaskType().equals("ZX-AGV-08-1")||task.getTaskType().equals("ZX-AGV-08-2")){
            HashMap<String,Object> map = new HashMap<>();
            map.put("taskno", task.getTaskNo());
            map.put("StationId", task.getSourceStaNo());
            String mesUrl = url+"AGVArrivalCompletedFit";
            String response = RcsServiceImpl.sendPost(mesUrl, JSONObject.toJSONString(map));
            if (!StringUtils.isEmpty(response) && response.contains("Success")){
                MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class);
                if("1".equals(mesReturn.getSuccess())) {
                    task.setWrkSts(305L);//任务状态从304--》305
                    task.setModiTime(new Date());
                    taskService.updateById(task);
                }else {
                    return new ReturnT<>(500, mesReturn.getMessage());
            if(!task.getStaNo().equals("307")){
                HashMap<String,Object> map = new HashMap<>();
                map.put("taskno", task.getTaskNo());
                map.put("StationId", task.getSourceStaNo());
                String mesUrl = url+"AGVArrivalCompletedFit";
                String response = RcsServiceImpl.sendPost(mesUrl, JSONObject.toJSONString(map));
                if (!StringUtils.isEmpty(response) && response.contains("Success")){
                    MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class);
                    if("1".equals(mesReturn.getSuccess())) {
                        task.setWrkSts(305L);//任务状态从304--》305
                        task.setModiTime(new Date());
                        taskService.updateById(task);
                    }else {
                        return new ReturnT<>(500, mesReturn.getMessage());
                    }
                }
            }
        }else {
src/main/resources/application-dev.yml
@@ -12,7 +12,7 @@
    driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
    username: sa
    password: sa@123
    url: jdbc:sqlserver://127.0.0.1:1433;databasename=jnejc-ljqwms
    url: jdbc:sqlserver://172.26.11.80:1433;databasename=jnejc-ljqwms
#    username: sa
#    password: Skyouc#23
#    url: jdbc:sqlserver://192.168.4.24:1433;databasename=jsxswms
src/main/resources/mapper/TaskMapper.xml
@@ -9,7 +9,7 @@
    </resultMap>
    <select id="selectToBeCompleteData" resultType="com.zy.asrs.entity.Task">
        select * from agv_task where wrk_sts = 305 order by upd_mk,error_time,io_time,wrk_no
        select * from agv_task where wrk_sts = 304 order by upd_mk,error_time,io_time,wrk_no
    </select>
</mapper>