自动化立体仓库 - WMS系统
#
Junjie
2025-09-21 dbfbc8f19dc5751b6dec442aff24463f1084a3d9
#
9个文件已修改
178 ■■■■ 已修改文件
src/main/java/com/zy/asrs/mapper/BasCrnpMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/LocMastMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/BasCrnpService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/BasCrnpServiceImpl.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/OutWorkHandler.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/service/CommonService.java 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/BasCrnpMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/BasCrnpMapper.java
@@ -5,8 +5,12 @@
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.List;
@Mapper
@Repository
public interface BasCrnpMapper extends BaseMapper<BasCrnp> {
    List<Integer> getLevList();
}
src/main/java/com/zy/asrs/mapper/LocMastMapper.java
@@ -15,8 +15,8 @@
    LocMast queryFreeLocMast(@Param("row") Integer row, @Param("locType1") Short locType1);
    @Select("select loc_no from asr_loc_mast where 1=1 and loc_sts = 'O' and crn_no = #{crnNo}")
    List<String> queryGroupEmptyStock(Integer crnNo);
    @Select("select loc_no from asr_loc_mast where 1=1 and loc_sts = 'O' and lev1 = #{lev}")
    List<String> queryGroupEmptyStock(Integer lev);
    @Select("select count(*) as count from asr_loc_mast where 1=1 and loc_sts = 'O' and loc_type1 = #{locType1} and crn_no = #{crnNo}")
    Integer selectEmptyLocCount(@Param("locType1") Short locType1, @Param("crnNo") Integer crnNo);
src/main/java/com/zy/asrs/service/BasCrnpService.java
@@ -3,10 +3,14 @@
import com.baomidou.mybatisplus.service.IService;
import com.zy.asrs.entity.BasCrnp;
import java.util.List;
public interface BasCrnpService extends IService<BasCrnp> {
    BasCrnp checkSiteStatus(Integer crnId);
    boolean checkSiteError(Integer crnNo, boolean pakin);
    List<Integer> getLevList();
}
src/main/java/com/zy/asrs/service/impl/BasCrnpServiceImpl.java
@@ -4,7 +4,6 @@
import com.core.common.Cools;
import com.core.exception.CoolException;
import com.zy.asrs.entity.BasCrnp;
import com.zy.asrs.entity.BasDevp;
import com.zy.asrs.mapper.BasCrnpMapper;
import com.zy.asrs.service.BasCrnpService;
import com.zy.asrs.service.BasDevpService;
@@ -12,6 +11,8 @@
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Slf4j
@Service("basCrnpService")
@@ -122,4 +123,9 @@
        return true;
    }
    @Override
    public List<Integer> getLevList() {
        return this.baseMapper.getLevList();
    }
}
src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java
@@ -7,6 +7,7 @@
import com.zy.asrs.mapper.LocMastMapper;
import com.zy.asrs.service.LocMastService;
import com.zy.asrs.service.RowLastnoService;
import com.zy.asrs.utils.Utils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -32,7 +33,7 @@
        if (Cools.isEmpty(sourceStock)) {
            return null;
        }
        return this.baseMapper.queryGroupEmptyStock(sourceStock.getCrnNo());
        return this.baseMapper.queryGroupEmptyStock(Utils.getLev(sourceLocNo));
    }
    @Override
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -222,10 +222,6 @@
            }
            Integer outSta = staNo.getDevNo();
            //2号堆垛机全板出库站指定为204站,拣料站指定为202
//            if(locMast.getCrnNo()==2){
//                outSta = ioType == 101 ? 204 : 202;
//            }
            // 获取路径
            StaDesc staDesc = staDescService.queryCrnStn(ioType, locMast.getCrnNo(), outSta);
@@ -237,7 +233,7 @@
            wrkMast.setIoTime(now);
            wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID
            wrkMast.setIoType(ioType); // 入出库状态
            wrkMast.setIoPri(10.0+locMast.getLocAttribute()); // 优先级
            wrkMast.setIoPri(10D); // 优先级
            wrkMast.setCrnNo(locMast.getCrnNo());
            wrkMast.setSourceStaNo(staDesc.getCrnStn()); // 源站
            wrkMast.setStaNo(staDesc.getStnNo()); // 目标站
@@ -537,9 +533,6 @@
        LocMast loc = locMastService.selectById(locNo);
        if (Cools.isEmpty(loc)){
            throw new CoolException("未找到库位");
        }
        if (!sourceLoc.getCrnNo().equals(loc.getCrnNo())) {
            throw new CoolException("移转库位属于不同堆垛机");
        }
        Date now = new Date();
        // 获取工作号
src/main/java/com/zy/asrs/task/handler/OutWorkHandler.java
@@ -2,14 +2,9 @@
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.zy.asrs.entity.LocMast;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.entity.param.CarryParam;
import com.zy.asrs.service.ApiLogService;
import com.zy.asrs.service.LocMastService;
import com.zy.asrs.service.WrkMastService;
import com.zy.asrs.service.impl.LocMastServiceImpl;
import com.zy.asrs.task.AbstractHandler;
import com.zy.asrs.task.core.ReturnT;
import com.zy.common.utils.HttpHandler;
@@ -19,17 +14,13 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@Slf4j
@Service
@Transactional
public class OutWorkHandler extends AbstractHandler<String> {
    @Autowired
    private LocMastService locMastService;
    @Autowired
    private ApiLogService apiLogService;
    @Value("${wcs.address.URL}")
@@ -41,29 +32,18 @@
    public synchronized ReturnT<String> start(WrkMast wrkMast) {
        //优先级
        LocMast locMast=locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", wrkMast.getSourceLocNo()));
        int Priority = locMast.getLocAttribute() == null ? 0 : locMast.getLocAttribute();
        HashMap<String, Object> map = new HashMap<>();
        CarryParam carryParam = new CarryParam();
        carryParam.setBoxNo(wrkMast.getBarcode());//托盘码
        carryParam.setTaskNo(wrkMast.getWrkNo()+"");//任务号
        carryParam.setStereoscopicTaskType(2);//2.出库
        carryParam.setPriority(10+Priority);//优先级
        carryParam.setOriginalRowNo(locMast.getRow1());//源库位排
        carryParam.setOriginalColumnNo(locMast.getBay1());//源库位列
        carryParam.setOriginalFloorNo(locMast.getLev1());//源库位层
        carryParam.setStartPoint(wrkMast.getStaNo()+""+locMast.getLev1());//源站
        carryParam.setTerminalNo(wrkMast.getStaNo()+"");//目标站
        List<CarryParam> carryParamList=new ArrayList<>();
        carryParamList.add(carryParam);
        map.put("TaskList",carryParamList);
        map.put("taskNo", wrkMast.getWrkNo());
        map.put("taskPriority", 10);
        map.put("taskType", wrkMast.getIoType() == 11 ? 3 : 2);
        map.put("startPoint", wrkMast.getSourceLocNo());
        map.put("targetPoint", wrkMast.getLocNo());
        map.put("barcode", wrkMast.getBarcode());
        String response ="";
        Boolean bool =false;
        boolean bool =false;
        try {
            log.info("wms派发任务给wcs出库={}", map);
            log.info("wms派发任务给wcs出库={}", JSON.toJSONString(map));
            response = new HttpHandler.Builder()
                    // .setHeaders(headParam)
                    .setUri(addrs)
@@ -72,15 +52,17 @@
                    .build()
                    .doPost();
            JSONObject jsonObject = JSON.parseObject(response);
            if(jsonObject.get("Code").equals("1")){
            if(jsonObject.getInteger("code") == 200){
                wrkMast.setWrkSts(12L);
                wrkMastService.updateById(wrkMast);
                bool = true;
            }else {
                log.error("wms派发任务给wcs出库失败{},返回值={}", JSON.toJSONString(wrkMast), response);
            }
        } catch (Exception e) {
            log.error("wcs派发任务给RCS出库失败{},返回值={}", wrkMast, response);
            log.error("wms派发任务给wcs出库失败{},返回值={}", JSON.toJSONString(wrkMast), response);
        } finally {
            apiLogService.save("wcs派发任务给RCS出库"
            apiLogService.save("wms派发任务给wcs出库"
                    , addrs + outboundTaskSend
                    , null
                    , "127.0.0.1"
@@ -89,7 +71,7 @@
                    , bool
            );
        }
        return  SUCCESS;
        return SUCCESS;
    }
}
src/main/java/com/zy/common/service/CommonService.java
@@ -16,6 +16,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Collections;
import java.util.List;
/**
@@ -188,30 +189,41 @@
        if(targetLocMast == null) {
            //相近物料匹配失败,搜索可用空库位组
            List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
                    .eq("loc_sts", "O")
                    .orderBy("lev1", true)
                    .orderBy("bay1", true));
            for (LocMast locMast : locMasts) {
                String locNo = locMast.getLocNo();
                //获取通道组
                List<Integer> locRowGroupDesc = Utils.getLocRowGroupDesc(slaveProperties, Utils.getRow(locNo));
                boolean flag = true;
                for (Integer row : locRowGroupDesc) {
                    String deepLocNo = Utils.getLocNo(row, Utils.getBay(locNo), Utils.getLev(locNo));
                    LocMast deepLoc = locMastService.selectById(deepLocNo);
                    if (!deepLoc.getLocSts().equals("O")) {
                        flag = false;
            //获取设备楼层
            List<Integer> levList = basCrnpService.getLevList();
            Collections.shuffle(levList);
            for (Integer lev : levList) {
                List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
                        .eq("loc_sts", "O")
                        .eq("lev1", lev)
                        .orderBy("bay1", true));
                for (LocMast locMast : locMasts) {
                    String locNo = locMast.getLocNo();
                    //获取通道组
                    List<Integer> locRowGroupDesc = Utils.getLocRowGroupDesc(slaveProperties, Utils.getRow(locNo));
                    boolean flag = true;
                    for (Integer row : locRowGroupDesc) {
                        String deepLocNo = Utils.getLocNo(row, Utils.getBay(locNo), Utils.getLev(locNo));
                        LocMast deepLoc = locMastService.selectById(deepLocNo);
                        if (!deepLoc.getLocSts().equals("O")) {
                            flag = false;
                            break;
                        }
                    }
                    if (flag) {
                        Integer firstRow = locRowGroupDesc.get(0);
                        String deepLocNo = Utils.getLocNo(firstRow, Utils.getBay(locNo), Utils.getLev(locNo));
                        LocMast deepLoc = locMastService.selectById(deepLocNo);
                        targetLocMast = deepLoc;
                        break;
                    }
                }
                if (flag) {
                    Integer firstRow = locRowGroupDesc.get(0);
                    String deepLocNo = Utils.getLocNo(firstRow, Utils.getBay(locNo), Utils.getLev(locNo));
                    LocMast deepLoc = locMastService.selectById(deepLocNo);
                    targetLocMast = deepLoc;
                if (targetLocMast != null) {
                    break;
                }
            }
@@ -246,32 +258,42 @@
        }
        if(targetLocMast == null) {
            //相近物料匹配失败,搜索可用空库位组
            List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
                    .eq("loc_sts", "O")
                    .orderBy("lev1", true)
                    .orderBy("bay1", true));
            for (LocMast locMast : locMasts) {
                String locNo = locMast.getLocNo();
                //获取通道组
                List<Integer> locRowGroupDesc = Utils.getLocRowGroupDesc(slaveProperties, Utils.getRow(locNo));
                boolean flag = true;
                for (Integer row : locRowGroupDesc) {
                    String deepLocNo = Utils.getLocNo(row, Utils.getBay(locNo), Utils.getLev(locNo));
                    LocMast deepLoc = locMastService.selectById(deepLocNo);
                    if (!deepLoc.getLocSts().equals("O")) {
                        flag = false;
            //获取设备楼层
            List<Integer> levList = basCrnpService.getLevList();
            Collections.shuffle(levList);
            for (Integer lev : levList) {
                //相近物料匹配失败,搜索可用空库位组
                List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
                        .eq("loc_sts", "O")
                        .eq("lev1", lev)
                        .orderBy("bay1", true));
                for (LocMast locMast : locMasts) {
                    String locNo = locMast.getLocNo();
                    //获取通道组
                    List<Integer> locRowGroupDesc = Utils.getLocRowGroupDesc(slaveProperties, Utils.getRow(locNo));
                    boolean flag = true;
                    for (Integer row : locRowGroupDesc) {
                        String deepLocNo = Utils.getLocNo(row, Utils.getBay(locNo), Utils.getLev(locNo));
                        LocMast deepLoc = locMastService.selectById(deepLocNo);
                        if (!deepLoc.getLocSts().equals("O")) {
                            flag = false;
                            break;
                        }
                    }
                    if (flag) {
                        targetLocMast = locMast;
                        break;
                    }
                }
                if (flag) {
                    targetLocMast = locMast;
                if (targetLocMast != null) {
                    break;
                }
            }
        }
        return targetLocMast;
    }
src/main/resources/mapper/BasCrnpMapper.xml
@@ -29,4 +29,8 @@
        <result column="lev1" property="lev1" />
    </resultMap>
    <select id="getLevList" resultType="integer">
        select DISTINCT lev1 from asr_bas_crnp
    </select>
</mapper>