自动化立体仓库 - WMS系统
Junjie
2025-10-16 062323dcda647af8adf1bfce3c80e7a2483af204
Merge remote-tracking branch 'origin/qlasrs-sxk' into qlasrs-sxk
10个文件已修改
149 ■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/OutController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/WrkDetlMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/WrkDetlService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/webSocketConfig/LedWebsocket.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/web/WcsController.java 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/WrkDetlMapper.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/WrkMastMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/report/locDetl.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OutController.java
@@ -84,6 +84,10 @@
                for (Integer row : locRowGroupAsc) {
                    String shallow = Utils.getLocNo(row, Utils.getBay(locNo), Utils.getLev(locNo));
                    LocMast shallowLoc = locMastService.selectById(shallow);
                    if (shallowLoc == null) {
                        continue;
                    }
                    if (shallowLoc.getLocSts().equals("F")) {
                        LocDetl locDetl1 = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no", shallowLoc.getLocNo()));
                        if (locDetl1 == null) {
src/main/java/com/zy/asrs/mapper/WrkDetlMapper.java
@@ -25,4 +25,6 @@
    List<WrkDetl> selectPakoutQuery(@Param("staNo")Integer staNo, @Param("matnr")String matnr);
    List<WrkDetl> findByWorkNo(Integer workNo);
    boolean updateWorkNo(@Param("oldWrkNo") Integer oldWrkNo, @Param("newWrkNo") Integer newWrkNo);
}
src/main/java/com/zy/asrs/service/WrkDetlService.java
@@ -19,6 +19,8 @@
    boolean updateInspect(Integer wrkNo, String matnr, String batch);
    boolean updateWorkNo(Integer oldWrkNo, Integer newWrkNo);
    List<WrkDetl> selectPakoutQuery(Integer staNo, String matnr);
    List<WrkDetl> findByWorkNo(Integer wrkNo);
src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java
@@ -85,4 +85,9 @@
    public List<WrkDetl> findByWorkNo(Integer workNo) {
        return this.baseMapper.findByWorkNo(workNo);
    }
    @Override
    public boolean updateWorkNo(Integer oldWrkNo, Integer newWrkNo) {
        return this.baseMapper.updateWorkNo(oldWrkNo, newWrkNo);
    }
}
src/main/java/com/zy/asrs/webSocketConfig/LedWebsocket.java
@@ -179,6 +179,10 @@
        Map<String,Object> map=new HashMap<>();
        map.put("to",ledId);
        BasDevp basDevp = basDevpService.selectOne(new EntityWrapper<BasDevp>().eq("dev_no", ledId));
        if (basDevp.getDevMk().equals("O")){
            basDevp = basDevpService.selectOne(new EntityWrapper<BasDevp>().eq("dev_no", 1001));
        }
        if (basDevp == null ){
            return;
        }
@@ -188,25 +192,12 @@
            return;
        }
        List<LedCommand> commandList = new ArrayList<>();
        if (basDevp.getDevMk().equals("I")){
            if (basDevp.getWrkNo() != 0){
                WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", basDevp.getWrkNo()));
                if (null != wrkMast){
                    commandList = getCommandList(basDevp.getWrkNo().toString());
                }
        if (basDevp.getWrkNo() != 0 && basDevp.getLoading().equals("Y")){
            WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", basDevp.getWrkNo()));
            if (null != wrkMast){
                commandList = getCommandList(basDevp.getWrkNo().toString());
            }
            map.put("message",Cools.add("type", "task").add("taskList",commandList));
            webSocketServer.onMessage(JSONObject.toJSONString(map),null,ledId);
        }else if (basDevp.getDevMk().equals("O")){
            BasDevp basDevpOut = basDevpService.selectOne(new EntityWrapper<BasDevp>().eq("dev_no", 1001));
            if (basDevp.getWrkNo() != 0){
                WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", basDevpOut.getWrkNo()));
                if (null != wrkMast){
                    commandList = getCommandList(basDevp.getWrkNo().toString());
                }
            }
        }
        map.put("message",Cools.add("type", "task").add("taskList",commandList));
        webSocketServer.onMessage(JSONObject.toJSONString(map),null,ledId);
src/main/java/com/zy/common/web/WcsController.java
@@ -126,6 +126,20 @@
        return R.ok().add(dto);
    }
    @PostMapping("/pakin/loc/returnWarehouse")
    @ResponseBody
    public synchronized R returnWarehouse(@RequestBody(required = false) SearchLocParam param) {
        log.info("收到WCS拣选盘点入库接口请求====>>入参:{}", param);
        if (Cools.isEmpty(param.getSourceStaNo())) {
            return R.error("源站编号不能为空");
        }
        LocTypeDto locTypeDto = new LocTypeDto();
        locTypeDto.setLocType1(param.getLocType1());
        StartupDto dto = startupPickIn(param.getSourceStaNo(), param.getBarcode(), locTypeDto);;
        log.info("WCS拣选盘点入库接口返参:{},托盘码:{}", dto, param.getBarcode());
        return R.ok().add(dto);
    }
    /**
     * 全板入库
@@ -210,6 +224,87 @@
        return dto;
    }
    /**
     * 拣选入库
     */
    @Transactional
    public StartupDto startupPickIn(Integer devpNo, String barcode, LocTypeDto locTypeDto) {
        // 源站点状态检测
        BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo, true);
        WrkMast wrkMastOut = wrkMastService.selectByBarcode(barcode);
        if (wrkMastOut == null) {
            throw new CoolException("拣选盘点任务不存在");
        }
        List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMastOut.getWrkNo());
        if (wrkDetls.isEmpty()) {
            throw new CoolException("拣选盘点任务数据不存在");
        }
        FindLocNoAttributeVo findLocNoAttributeVo = new FindLocNoAttributeVo();
        findLocNoAttributeVo.setMatnr(wrkDetls.get(0).getMatnr());
        StartupDto dto = commonService.getLocNo(1, devpNo, findLocNoAttributeVo, locTypeDto, barcode);
        if (dto == null) {
            throw new CoolException("找不到空库位");
        }
        Date now = new Date();
        // 生成工作档
        WrkMast wrkMast = new WrkMast();
        int workNo = dto.getWorkNo();
        wrkMast.setWrkNo(workNo);
        wrkMast.setWrkSts(2L); // 工作状态:生成入库ID
        wrkMast.setIoType(wrkMastOut.getIoType() - 50); // 入出库状态:53.拣料再入库
        wrkMast.setIoPri(30D); // 优先级
        wrkMast.setCrnNo(dto.getCrnNo());
        wrkMast.setSourceStaNo(dto.getSourceStaNo());
        wrkMast.setStaNo(dto.getStaNo());
        wrkMast.setLocNo(dto.getLocNo());
        wrkMast.setBarcode(barcode); // 托盘码
        wrkMast.setFullPlt("Y"); // 满板:Y
        wrkMast.setPicking("N"); // 拣料
        wrkMast.setExitMk("N"); // 退出
        wrkMast.setEmptyMk("N"); // 空板
        wrkMast.setLinkMis("Y");
        wrkMast.setCtnType(sourceStaNo.getCtnType()); // 容器类型
        // 操作人员数据
        wrkMast.setAppeTime(now);
        wrkMast.setModiTime(now);
        boolean res = wrkMastService.insert(wrkMast);
        if (!res) {
            throw new CoolException("保存工作档失败");
        }
        wrkDetlService.updateWorkNo(wrkMastOut.getWrkNo(), workNo);
        // 删除工作主档
        if (!wrkMastService.deleteById(wrkMastOut)) {
            throw new CoolException("删除工作主档失败,workNo=" + wrkMastOut.getWrkNo());
        }
        // 更新源站点信息
        sourceStaNo.setWrkNo(wrkMast.getWrkNo());
        sourceStaNo.setModiTime(now);
        if (!basDevpService.updateById(sourceStaNo)) {
            throw new CoolException("更新源站失败");
        }
        // 更新目标库位状态
        LocMast locMast = locMastService.selectById(dto.getLocNo());
        if (locMast.getLocSts().equals("O")) {
            locMast.setLocSts("S"); // S.入库预约
            locMast.setModiTime(now);
            if (!locMastService.updateById(locMast)) {
                throw new CoolException("改变库位状态失败");
            }
        } else {
            throw new CoolException(dto.getLocNo() + "目标库位已被占用");
        }
        return dto;
    }
    @Transactional
    public StartupDto emptyPlateIn(Integer devpNo, String barcode) {
        // 检索库位
src/main/resources/application.yml
@@ -12,7 +12,7 @@
    driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
    url: jdbc:sqlserver://127.0.0.1:1433;databasename=qlasrs-sxk
    username: sa
    password: sa@123
    password: spcyy@2025
  mvc:
    static-path-pattern: /**
  redis:
@@ -78,7 +78,7 @@
  ip: 192.168.1.198
  url: wms
  port: 8081
  id: 1001
  id: 1002
#erp对接
erp:
src/main/resources/mapper/WrkDetlMapper.xml
@@ -81,6 +81,14 @@
        <include refid="batchSeq"></include>
    </update>
    <update id="updateWorkNo">
        update asr_wrk_detl
        set wrk_no = #{newWrkNo}
        , modi_time = getdate()
        where 1=1
        and wrk_no = #{oldWrkNo}
    </update>
    <select id="selectAndLogByOrderNo" resultMap="BaseResultMap">
        select * from asr_wrk_detl where order_no = #{orderNo}
        union
src/main/resources/mapper/WrkMastMapper.xml
@@ -71,7 +71,7 @@
        where wrk_sts=5
        or wrk_sts=20
        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,modi_time) &lt;= getdate() and wrk_no not in (select wrk_no from asr_bas_devp))
        or (wrk_sts=15 and dateadd(mi,8,modi_time) &lt;= getdate() and wrk_no not in (select wrk_no from asr_bas_devp))
        or (wrk_sts=15 and modi_time is null and wrk_no not in (select wrk_no from asr_bas_devp))
        order by modi_time,wrk_no asc
    </select>
src/main/webapp/views/report/locDetl.html
@@ -26,7 +26,7 @@
</body>
<script type="text/html" id="operateDetl">
<!--    <button id="batch" class="layui-btn layui-btn-primary layui-btn-radius" style="height: auto" lay-submit lay-filter="batch">修改合同号</button>-->
    <a class="layui-btn layui-btn-xs layui-btn-danger btn-pakoutPreview" lay-event="pakoutPreview"><i class="layui-icon layui-icon-prev-circle"></i>修改合同号</a>
<!--    <a class="layui-btn layui-btn-xs layui-btn-danger btn-pakoutPreview" lay-event="pakoutPreview"><i class="layui-icon layui-icon-prev-circle"></i>修改合同号</a>-->
</script>
<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
<script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script>