自动化立体仓库 - WMS系统
#
pang.jiabao
2024-06-17 26bd94065f7b0b6e8453050ecd4f0a179bf2a090
#
8个文件已修改
204 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/MobileController.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/WrkMastMapper.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/MobileService.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java 152 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/web/WcsController.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/WrkMastMapper.xml 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/MobileController.java
@@ -72,15 +72,14 @@
        return R.ok("下架成功");
    }
    @RequestMapping("/manualCallEmptyTray")
    @PostMapping("/manualCallEmptyTray")
    @ManagerAuth(memo = "pda呼叫空托盘")
    public R manualCallEmptyTray(@RequestParam Map<String, Object> param){
    public R manualCallEmptyTray(@RequestBody Map<String, Object> param){
        if (Cools.isEmpty(param.get("stnNo"))){
            throw new CoolException("空托盘出库站点不能为空");
        }
        mobileService.manualCallEmptyTray((Integer) param.get("stnNo"),getUserId());
        return R.ok("上架成功");
        return mobileService.manualCallEmptyTray((Integer) param.get("stnNo"),getUserId());
    }
src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
@@ -4,6 +4,7 @@
import com.zy.asrs.entity.WrkDetl;
import com.zy.asrs.entity.WrkMast;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;
@@ -28,6 +29,14 @@
    List<WrkMast> queryOutLocWork();
    /**
     * 查询工作主档空板出库任务(工作状态不为15或任务号在输送线站点上)
     *
     * @param staNo 目标站点
     * @return 工作档集合
     */
    List<WrkMast> queryEmptyOutLocWork(@Param("staNo") int staNo);
    /**
     * 查询305出库工作档(工作档状态为15,站点有任务号,并且有物)
     * @return 工作明细档集合
     */
src/main/java/com/zy/asrs/service/MobileService.java
@@ -1,6 +1,7 @@
package com.zy.asrs.service;
import com.alibaba.fastjson.JSONObject;
import com.core.common.R;
import com.zy.asrs.entity.BasDevp;
import com.zy.asrs.entity.LocDetl;
import com.zy.asrs.entity.OrderDetl;
@@ -43,6 +44,7 @@
     * 人工呼叫空托盘(pda)
     * @param stnNo 出库站点号
     * @param userId 操作用户
     * @return code=200成功,其他异常
     */
    void manualCallEmptyTray(int stnNo, Long userId);
    R manualCallEmptyTray(int stnNo, Long userId);
}
src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java
@@ -81,12 +81,18 @@
        LocMast locMast = null;
        List<String> groupOuterLoc = Utils.getGroupLocNo(locNo, true);
        if (!Cools.isEmpty(groupOuterLoc)) {
            for (String loc : groupOuterLoc) {
            for (int i = 0; i < groupOuterLoc.size(); i ++ ) {
                String loc = groupOuterLoc.get(i);
                LocMast tmp = this.selectById(loc);
                if (tmp == null) {
                    continue;
                }
                // 深库位不为空库位或空板则浅库位不能放
                if (i == 0 && (!tmp.getLocSts().equals("O") && !tmp.getLocSts().equals("D"))){
                    break;
                }
                if (tmp.getLocSts().equals("O")) {
                    locMast = tmp;
                    break;
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -4,10 +4,7 @@
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.core.common.BaseRes;
import com.core.common.Cools;
import com.core.common.DateUtils;
import com.core.common.SnowflakeIdWorker;
import com.core.common.*;
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.CombParam;
@@ -15,6 +12,7 @@
import com.zy.asrs.entity.param.OffSaleParam;
import com.zy.asrs.entity.param.OpenOrderPakinParam;
import com.zy.asrs.mapper.ManLocDetlMapper;
import com.zy.asrs.mapper.WrkMastMapper;
import com.zy.asrs.service.*;
import com.zy.asrs.utils.MatUtils;
import com.zy.common.constant.MesConstant;
@@ -29,10 +27,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.*;
/**
 * 移动端服务核心类
@@ -54,6 +49,9 @@
    private BasDevpService basDevpService;
    @Autowired
    private WrkMastService wrkMastService;
    @Autowired
    private WrkMastMapper wrkMastMapper;
    @Autowired
    private WrkDetlService wrkDetlService;
    @Autowired
@@ -635,64 +633,86 @@
    }
    @Override
    public void manualCallEmptyTray(int stnNo, Long userId) {
    public R manualCallEmptyTray(int stnNo, Long userId) {
        // 人工pda呼叫空托盘
        // 0.判断是否已存在该目标站点的空托盘出库任务,有则直接返回(状态不为15,或者为15但是任务号还在输送线上)
        List<WrkMast> wrkMasts = wrkMastMapper.queryEmptyOutLocWork(stnNo);
        if (!wrkMasts.isEmpty()) {
            throw new CoolException("已存在该站点空托盘出库任务:" + stnNo);
        }
        // 获取工作号
        int workNo = commonService.getWorkNo(WorkNoType.PAKOUT.type);
        // 获取库位
//        LocMast locMast = locMastService.selectById(locNo);
//        if (Cools.isEmpty(locMast)) {
//            throw new CoolException(locNo + "库位不存在");
//        }
//        if (!locMast.getLocSts().equals("D")) {
//            throw new CoolException("所选库位存在状态不为D的库位,库位号:" + locMast.getLocNo() + " 、当前状态:" + locMast.getLocSts() + "-" + locMast.getLocSts$());
//        }
//        // 获取源站
//        Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
//                .eq("type_no", 110)
//                .eq("stn_no", param.getOutSite())
//                .eq("crn_no", locMast.getCrnNo());
//        StaDesc staDesc = staDescService.selectOne(wrapper);
//        if (staDesc == null) {
//            throw new CoolException("路径不存在");
//        }
//        Integer sourceStaNo = staDesc.getCrnStn();
//        if (Cools.isEmpty(sourceStaNo)) {
//            throw new CoolException("检索源站失败");
//        }
//        Date now = new Date();
        // 保存工作档
//        WrkMast wrkMast = new WrkMast();
//        wrkMast.setWrkNo(workNo);
//        wrkMast.setIoTime(now);
//        wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID
//        wrkMast.setIoType(110); // 入出库状态: 110.空板出库
//        wrkMast.setIoPri(10D);
//        wrkMast.setSourceStaNo(sourceStaNo); // 源站
//        wrkMast.setStaNo(param.getOutSite()); // 目标站
//        wrkMast.setCrnNo(locMast.getCrnNo());
//        wrkMast.setSourceLocNo(locNo); // 源库位
//        wrkMast.setFullPlt("N"); // 满板:Y
//        wrkMast.setPicking("N"); // 拣料
//        wrkMast.setExitMk("N"); // 退出
//        wrkMast.setEmptyMk("Y"); // 空板
//        wrkMast.setLinkMis("N");
//        wrkMast.setAppeUser(userId);
//        wrkMast.setAppeTime(now);
//        wrkMast.setModiUser(userId);
//        wrkMast.setModiTime(now);
//        boolean res = wrkMastService.insert(wrkMast);
//        if (!res) {
//            throw new CoolException("保存工作档失败");
//        }
//        // 更新库位状态 D.空板 -> R.出库预约
//        if (locMast.getLocSts().equals("D")) {
//            locMast.setLocSts("R");
//            locMast.setModiUser(userId);
//            locMast.setModiTime(now);
//            if (!locMastService.updateById(locMast)) {
//                throw new CoolException("更新库位状态失败");
//            }
//        }
        //1.根据出库站点去寻找空托盘库位,先找浅库位
        List<LocMast> locMasts = new ArrayList<>();
        EntityWrapper<LocMast> entityWrapper = new EntityWrapper<>();
        entityWrapper.eq("loc_sts","D").orderAsc(Arrays.asList("row1","lev1","bay1"));
        if (stnNo == 100) {
            entityWrapper.in("row1",2,3);
            locMasts = locMastService.selectList(entityWrapper);
            if (locMasts.isEmpty()) {
                entityWrapper.in("row1",1,4);
                locMasts = locMastService.selectList(entityWrapper);
            }
        } else if(stnNo == 102) {
            entityWrapper.in("row1",6,7);
            locMasts = locMastService.selectList(entityWrapper);
            if (locMasts.isEmpty()) {
                entityWrapper.in("row1",5,8);
                locMasts = locMastService.selectList(entityWrapper);
            }
        }
        if (locMasts.isEmpty()) {
            throw new CoolException("没有找到空托盘,站点:" + stnNo);
        }
        // 取第一个空库位
        LocMast locMast = locMasts.get(0);
        // 1.1.获取工作路径
        StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>().eq("type_no", 110).eq("stn_no",
                stnNo).eq("crn_no", locMast.getCrnNo()));
        if (staDesc == null) {
            throw new CoolException("路径不存在");
        }
        Integer sourceStaNo = staDesc.getCrnStn();
        if (Cools.isEmpty(sourceStaNo)) {
            throw new CoolException("检索源站失败");
        }
        //2.生成空托盘出库工作档
        Date now = new Date();
        WrkMast wrkMast = new WrkMast();
        wrkMast.setWrkNo(commonService.getWorkNo(WorkNoType.PAKOUT.type));
        wrkMast.setIoTime(now);
        wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID
        wrkMast.setIoType(110); // 入出库状态: 110.空板出库
        wrkMast.setIoPri(10D);
        wrkMast.setSourceStaNo(sourceStaNo); // 源站
        wrkMast.setStaNo(staDesc.getStnNo()); // 目标站
        wrkMast.setCrnNo(locMast.getCrnNo());
        wrkMast.setSourceLocNo(locMast.getLocNo()); // 源库位
        wrkMast.setFullPlt("N"); // 满板:Y
        wrkMast.setPicking("N"); // 拣料
        wrkMast.setExitMk("N"); // 退出
        wrkMast.setEmptyMk("Y"); // 空板
        wrkMast.setLinkMis("N");
        wrkMast.setAppeUser(userId);
        wrkMast.setAppeTime(now);
        wrkMast.setModiUser(userId);
        wrkMast.setModiTime(now);
        if (!wrkMastService.insert(wrkMast)) {
            throw new CoolException("保存工作档失败");
        }
        // 3.更新库位状态 D.空板 -> R.出库预约
        if (locMast.getLocSts().equals("D")) {
            locMast.setLocSts("R");
            locMast.setModiUser(userId);
            locMast.setModiTime(now);
            if (!locMastService.updateById(locMast)) {
                throw new CoolException("更新库位状态失败");
            }
        }
        return R.ok("空托盘出库成功");
    }
}
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -587,6 +587,18 @@
        if (Cools.isEmpty(param.getBarcode(), param.getList())) {
            throw new CoolException("数据不完整,请检查请求参数");
        }
        List<WrkMast> wrkMasts = wrkMastMapper.queryOutLocWork();
        if(!wrkMasts.isEmpty()) {
            throw new CoolException("305存在出库任务");
        }
        int countLoc = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet",param.getBarcode()));
        int countWrk = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("zpallet",param.getBarcode()));
        if (countLoc > 0 || countWrk > 0) {
            throw new CoolException("工作档/库存条码数据已存在");
        }
        Date now = new Date();
        // 源站点状态检测
        BasDevp sourceStaNo = basDevpService.checkSiteStatus(305, true);
src/main/java/com/zy/common/web/WcsController.java
@@ -238,7 +238,8 @@
        // 源站点状态检测
        BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo, true);
        // 检索库位
        StartupDto dto = commonService.getLocNo(1, 10, devpNo, null,null,null, locTypeDto);
//        StartupDto dto = commonService.getLocNo(1, 10, devpNo, null,null,null, locTypeDto);
        StartupDto dto = commonService.getLocNo(sourceStaNo,locTypeDto, 10);
        int workNo = dto.getWorkNo();
        // 生成工作档
        WrkMast wrkMast = new WrkMast();
src/main/resources/mapper/WrkMastMapper.xml
@@ -78,7 +78,7 @@
        select *
        from asr_wrk_mast awm
        where awm.io_type = 101
          and awm.wrk_sts != 15 or wrk_no in (select wrk_no  from asr_bas_devp)
          and (awm.wrk_sts != 15 or wrk_no in (select wrk_no  from asr_bas_devp))
    </select>
    <select id="getOutboundMaterials" resultType="com.zy.asrs.entity.WrkDetl">
        select TOP 1 awd.*
@@ -88,5 +88,12 @@
          and awm.wrk_sts = 15
          and awm.wrk_no = (select wrk_no from asr_bas_devp where dev_no = 305 and loading = 'Y')
    </select>
    <select id="queryEmptyOutLocWork" resultType="com.zy.asrs.entity.WrkMast">
        select *
        from asr_wrk_mast awm
        where awm.io_type = 110
          and awm.sta_no = #{staNo}
          and (awm.wrk_sts != 15 or wrk_no in (select wrk_no  from asr_bas_devp))
    </select>
</mapper>