自动化立体仓库 - WMS系统
pang.jiabao
2024-06-22 8d6042713c2e2d9719c64322ef26450a9f221523
捷众二期开发
11个文件已修改
187 ■■■■■ 已修改文件
.idea/misc.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/LocMastMapper.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/BasDevpServiceImpl.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/service/CommonService.java 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/web/WcsController.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/LocMastMapper.xml 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/WrkMastMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/pakStore/locDetlCheckQuery.html 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/pakStore/locDetlQuery.html 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/misc.xml
@@ -1,5 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="FindBugsConfigurable">
    <option name="make" value="true" />
    <option name="effort" value="default" />
    <option name="priority" value="Medium" />
    <option name="excludeFilter" value="" />
  </component>
  <component name="FrameworkDetectionExcludesConfiguration">
    <file type="web" url="file://$PROJECT_DIR$" />
  </component>
@@ -13,4 +19,10 @@
  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
    <output url="file://$PROJECT_DIR$/out" />
  </component>
  <component name="ProjectType">
    <option name="id" value="jpab" />
  </component>
  <component name="SuppressionsComponent">
    <option name="suppComments" value="[]" />
  </component>
</project>
src/main/java/com/zy/asrs/mapper/LocMastMapper.java
@@ -37,4 +37,13 @@
    LocMast queryEmptyDeepLoc();
    List<LocMast> queryDeepLocDMast();
    /**
     * 根据堆垛机站点查询空库位
     * @param crnNo 堆垛机号
     * @return 库位
     */
    LocMast queryEmptyLocNoByStaNo(@Param("crnNo") int crnNo);
    LocMast queryLocByBarCode(@Param("row") int row);
}
src/main/java/com/zy/asrs/service/impl/BasDevpServiceImpl.java
@@ -55,9 +55,9 @@
            if(station.getLoading()==null || !station.getLoading().equals("Y")) {
                throw new CoolException(devpNo+"站点无物");
            }
            if(station.getWrkNo()!=null && station.getWrkNo()>0 && station.getWrkNo()<9001) {
                throw new CoolException(devpNo+"站点已有工作号");
            }
//            if(station.getWrkNo()!=null && station.getWrkNo()>0 && station.getWrkNo()<9001) {
//                throw new CoolException(devpNo+"站点已有工作号");
//            }
            if(wrkMastService.getWorkingMast(devpNo)>0){
                throw new CoolException(devpNo+"站点不能同时生成两笔入库工作档");
            }
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -247,6 +247,7 @@
            wrkMast.setIoType(ioType); // 入出库状态
            wrkMast.setIoPri(reduce?13D:15D); // 优先级:13
            wrkMast.setCrnNo(locMast.getCrnNo());
            wrkMast.setBarcode(locMast.getBarcode());
            wrkMast.setSourceStaNo(staDesc.getCrnStn()); // 源站
            wrkMast.setStaNo(staDesc.getStnNo()); // 目标站
            wrkMast.setSourceLocNo(dto.getLocNo()); // 源库位
@@ -892,10 +893,33 @@
        if (!wrkMastLogService.save(wrkMast.getWrkNo())) {
            throw new CoolException("保存工作主档历史档失败");
        }
        // 拣、盘、并 作业站转换
        int stnNo = 0;
        if (wrkMast.getIoType() == 103) { // 拣料出库
            if(wrkMast.getCrnNo() == 1) {
                stnNo = 104;
            }else if(wrkMast.getCrnNo() == 2) {
                stnNo =204;
            }else if(wrkMast.getCrnNo() == 3) {
                stnNo = 304;
            }
        } else if(wrkMast.getIoType() == 107){ //盘点出库
            if(wrkMast.getCrnNo() == 1) {
                stnNo = 101;
            }else if(wrkMast.getCrnNo() == 2) {
                stnNo =201;
            }else if(wrkMast.getCrnNo() == 3) {
                stnNo = 301;
            }
        }
        if (stnNo == 0) {
            log.error("{}号任务数据异常!", wrkMast.getWrkNo());
            throw new CoolException("再入库站点有误");
        }
        // 获取目标站
        Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
                .eq("type_no", wrkMast.getIoType() - 50)
                .eq("stn_no", wrkMast.getStaNo()) // 作业站点 = 拣料出库的目标站
                .eq("stn_no", stnNo) // 作业站点 = 拣料出库的目标站
                .eq("crn_no", wrkMast.getCrnNo()); // 堆垛机号
        StaDesc staDesc = staDescService.selectOne(wrapper);
        if (Cools.isEmpty(staDesc)) {
src/main/java/com/zy/common/service/CommonService.java
@@ -7,6 +7,7 @@
import com.core.common.Cools;
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.mapper.LocMastMapper;
import com.zy.asrs.service.*;
import com.zy.asrs.utils.Utils;
import com.zy.asrs.utils.VersionUtils;
@@ -46,6 +47,9 @@
    private LocDetlService locDetlService;
    @Autowired
    private SlaveProperties slaveProperties;
    @Autowired
    private LocMastMapper locMastMapper;
    /**
     * 生成工作号
@@ -109,9 +113,12 @@
        if (sourceStaNo < 200) {
            whsType = 1;
            crnNo=1;
        } else if (sourceStaNo >= 200) {
        } else if (sourceStaNo < 300) {
            whsType = 2;
            crnNo=2;
        }else {
            whsType = 3;
            crnNo=3;
        }
        int workNo = getWorkNo(0);
@@ -218,7 +225,13 @@
                } else {
                    curRow = sRow;
                }
                crnNo = whsType;
                basCrnpService.checkSiteStatus(crnNo, true);
            }else {
                if (curRow == sRow) {
                    curRow = eRow;
                } else {
                    curRow = sRow;
                }
                basCrnpService.checkSiteStatus(crnNo, true);
            }
        }
@@ -496,4 +509,84 @@
        }
    }
    public StartupDto emptyIngetLocNo(Integer devpNo) {
        int crnNo = 0;
        // 目标库位
        LocMast locMast = null;
        if (devpNo == 304) {
            crnNo = 3;
            locMast = locMastMapper.queryEmptyLocNoByStaNo(crnNo);
        }
        if (locMast == null) {
            throw new CoolException("没有空库位");
        }
        // 获取目标站
        Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
                .eq("type_no", 10)
                .eq("stn_no", devpNo)
                .eq("crn_no", crnNo);
        StaDesc staDesc = staDescService.selectOne(wrapper);
        if (Cools.isEmpty(staDesc)) {
            log.error("入库路径不存在, staDescId={}, sourceStaNo={}, crnNo={}", 10, devpNo, crnNo);
            throw new CoolException("入库路径不存在");
        }
        // 检测目标站
        BasDevp staNo = basDevpService.selectById(staDesc.getCrnStn());
        if (!staNo.getAutoing().equals("Y")) {
            throw new CoolException("目标站"+staDesc.getCrnStn()+"不可用");
        }
        basCrnpService.checkSiteStatus(crnNo, true);
        // 返回dto
        StartupDto startupDto = new StartupDto();
        startupDto.setWorkNo(getWorkNo(0));
        startupDto.setCrnNo(crnNo);
        startupDto.setSourceStaNo(devpNo);
        startupDto.setStaNo(devpNo);
        startupDto.setLocNo(locMast.getLocNo());
        return startupDto;
    }
    public StartupDto getLocNoBy304(String barcode) {
        int crnNo = 3;
        int devpNo = 304;
        int row = barcode.charAt(0) == '5' ? 7 : 6;
        // 目标库位
        LocMast locMast = locMastMapper.queryLocByBarCode(row);
        if (locMast == null) {
            throw new CoolException("304入库没有空库位");
        }
        // 获取目标站
        Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
                .eq("type_no", 1)
                .eq("stn_no", devpNo)
                .eq("crn_no", crnNo);
        StaDesc staDesc = staDescService.selectOne(wrapper);
        if (Cools.isEmpty(staDesc)) {
            log.error("入库路径不存在, staDescId={}, sourceStaNo={}, crnNo={}", 1, devpNo, crnNo);
            throw new CoolException("入库路径不存在");
        }
        // 检测目标站
        BasDevp staNo = basDevpService.selectById(staDesc.getCrnStn());
        if (!staNo.getAutoing().equals("Y")) {
            throw new CoolException("目标站"+staDesc.getCrnStn()+"不可用");
        }
        basCrnpService.checkSiteStatus(crnNo, true);
        // 返回dto
        StartupDto startupDto = new StartupDto();
        startupDto.setWorkNo(getWorkNo(0));
        startupDto.setCrnNo(crnNo);
        startupDto.setSourceStaNo(devpNo);
        startupDto.setStaNo(devpNo);
        startupDto.setLocNo(locMast.getLocNo());
        return startupDto;
    }
}
src/main/java/com/zy/common/web/WcsController.java
@@ -109,7 +109,12 @@
        BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo, true);
        // 检索库位
        List<String> matNos = pltBarcodes.stream().map(PltBarcode::getMatNo).distinct().collect(Collectors.toList());
        StartupDto dto = commonService.getLocNo(1, 1, devpNo, false, matNos, locTypeDto,0);
        StartupDto dto;
        if (devpNo == 304) {
            dto = commonService.getLocNoBy304(barcode);
        } else {
            dto = commonService.getLocNo(1, 1, devpNo, false, matNos, locTypeDto,0);
        }
        int workNo = dto.getWorkNo();
        // 生成工作档
@@ -177,7 +182,8 @@
        // 源站点状态检测
        BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo, true);
        // 检索库位
        StartupDto dto = commonService.getLocNo(1, 10, devpNo, true, null, locTypeDto,0);
//        StartupDto dto = commonService.getLocNo(1, 10, devpNo, true, null, locTypeDto,0);
        StartupDto dto = commonService.emptyIngetLocNo(devpNo);
        int workNo = dto.getWorkNo();
        // 生成工作档
        WrkMast wrkMast = new WrkMast();
src/main/resources/application.yml
@@ -1,5 +1,5 @@
server:
  port: 8081
  port: 8080
  servlet:
    context-path: /@pom.build.finalName@
@@ -16,7 +16,8 @@
#    password: xltys1995
    # sql-server
    driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
    url: jdbc:sqlserver://localhost:1433;databasename=sxjzasrs
#      url: jdbc:sqlserver://172.17.20.240:1433;databasename=sxjzasrs
    url: jdbc:sqlserver://127.0.0.1:1433;databasename=sxjzasrs
    username: sa
    password: sa@123
  mvc:
src/main/resources/mapper/LocMastMapper.xml
@@ -179,4 +179,22 @@
        )
        and loc_sts = 'D' and crn_no=1
    </select>
    <select id="queryEmptyLocNoByStaNo" resultType="com.zy.asrs.entity.LocMast">
        SELECT TOP 1 loc_no AS locNo,crn_no AS crnNo FROM asr_loc_mast
        where loc_sts = 'O'
        <if test="crnNo == 1">
            and row1 in(1,2)
        </if>
        <if test="crnNo == 2">
            and row1 in(5,6)
        </if>
        <if test="crnNo == 3">
            and row1 in(6,7)
        </if>
        ORDER BY lev1 ASC, bay1 ASC
    </select>
    <select id="queryLocByBarCode" resultType="com.zy.asrs.entity.LocMast">
        SELECT TOP 1 loc_no AS locNo,crn_no AS crnNo FROM asr_loc_mast
        where loc_sts = 'O' and row1 = #{row} ORDER BY lev1 ASC, bay1 ASC
    </select>
</mapper>
src/main/resources/mapper/WrkMastMapper.xml
@@ -74,7 +74,7 @@
        select * from asr_wrk_mast
        where wrk_sts=5
        or (wrk_sts=15 and ove_mk='Y' and wrk_no not in (select wrk_no from asr_bas_devp))
        or (wrk_sts=15 and dateadd(mi,15,crn_end_time) &lt;= getdate() and wrk_no not in (select wrk_no from asr_bas_devp))
        or (wrk_sts=15 and dateadd(mi,5,crn_end_time) &lt;= getdate() and wrk_no not in (select wrk_no from asr_bas_devp))
        or (wrk_sts=15 and crn_end_time is null and wrk_no not in (select wrk_no from asr_bas_devp))
        order by io_time,wrk_no asc
    </select>
src/main/webapp/views/pakStore/locDetlCheckQuery.html
@@ -52,6 +52,7 @@
                <option value="" style="display: none">请选择巷道</option>
                <option value="1">1号</option>
                <option value="2">2号</option>
                <option value="3">3号</option>
            </select>
        </div>
        <div class="layui-inline">
src/main/webapp/views/pakStore/locDetlQuery.html
@@ -52,6 +52,7 @@
                <option value="" style="display: none">请选择巷道</option>
                <option value="1">1号</option>
                <option value="2">2号</option>
                <option value="3">3号</option>
            </select>
        </div>
        <div class="layui-inline">