自动化立体仓库 - WMS系统
lty
2025-01-09 aa9f5df9a7ea885dcc157e1dd86dc6ee3c10d488
#拣料盘点重新找库位
11个文件已修改
120 ■■■■ 已修改文件
src/main/java/com/zy/asrs/entity/LocDetl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/LocDetlMapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/LocDetlService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/web/WcsController.java 47 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/LocDetlMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/common.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/report/viewWorkIn.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/report/viewWorkOut.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/wrkDetlLog/wrkDetlLog.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/LocDetl.java
@@ -47,8 +47,8 @@
    @ExcelProperty("规格")
    private String specs;
    @ApiModelProperty(value= "货品特征")
    @ExcelProperty("货品特征")
    @ApiModelProperty(value= "批号")
    @ExcelProperty("批号")
    private String batch;
    @ApiModelProperty(value= "单据编号")
src/main/java/com/zy/asrs/mapper/LocDetlMapper.java
@@ -23,7 +23,7 @@
    LocDetl selectItem(@Param("locNo")String locNo, @Param("matnr")String matnr, @Param("batch")String batch);
    LocDetl selectItemByLocNo(String locNo);
    List<LocDetl> selectItemByLocNo(String locNo);
    int deleteItem(@Param("locNo")String locNo, @Param("matnr")String matnr, @Param("batch")String batch);
src/main/java/com/zy/asrs/service/LocDetlService.java
@@ -15,7 +15,7 @@
    LocDetl selectItem(String locNo, String matnr, String batch);
    LocDetl selectItemByLocNo(String locNo);
    List<LocDetl> selectItemByLocNo(String locNo);
    Page<LocDetl> getStockOut(Page<LocDetl> page);
src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java
@@ -118,7 +118,7 @@
        return this.baseMapper.selectItem(locNo, matnr, batch);
    }
    public LocDetl selectItemByLocNo(String locNo) {
    public List<LocDetl> selectItemByLocNo(String locNo) {
        return this.baseMapper.selectItemByLocNo(locNo);
    }
src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -152,6 +152,11 @@
                    break;
                // 拣料入库
                case 53:
                    // 清除所属库位之前的库存明细
                    List<LocDetl> locDetl53 = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", wrkMast.getLocNo()));
                    if (!locDetl53.isEmpty()) {
                        locDetlService.delete(new EntityWrapper<LocDetl>().eq("loc_no", wrkMast.getLocNo()));
                    }
                    // 根据工作号,查询工作明细档
                    List<WrkDetl> wrkDetls53 = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
                    if (wrkDetls53.isEmpty()) {
@@ -160,13 +165,24 @@
                        return FAIL.setMsg("拣料入库 ===>> 工作明细档为空; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
                    }
                    for (WrkDetl wrkDetl : wrkDetls53) {
                        LocDetl locDetl = locDetlService.selectItem(locMast.getLocNo(), wrkDetl.getMatnr(), wrkDetl.getBatch());
                        if (null != locDetl) {
                            if (!locDetlService.updateAnfme(locDetl.getAnfme() - wrkDetl.getAnfme(), locMast.getLocNo(), wrkDetl.getMatnr(), wrkDetl.getBatch())) {
//                                exceptionHandle("拣料入库 ===>> 修改库存明细数量失败;[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
                            if (!locDetlService.updateAnfme(wrkDetl.getAnfme(), wrkMast.getLocNo(), wrkDetl.getMatnr(), wrkDetl.getBatch())) {
//                                exceptionHandle("全板入库 ===>> 更新库存明细失败;[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
                                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                                return FAIL.setMsg("拣料入库 ===>> 修改库存明细数量失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
                                return FAIL.setMsg("拣料入库 ===>> 更新库存明细失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
                            }
                        } else {
                            locDetl = new LocDetl();
                            locDetl.sync(wrkDetl);
                            locDetl.setLocNo(wrkMast.getLocNo()); // 库位号
                            locDetl.setAnfme(wrkDetl.getAnfme()); // 数量
                            locDetl.setZpallet(wrkDetl.getZpallet()); // 托盘条码
                            locDetl.setModiTime(now);
                            locDetl.setAppeTime(now);
                            if (!locDetlService.insert(locDetl)) {
                                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                                return FAIL.setMsg("拣料入库 ===>> 添加库存明细失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
                            }
                        }
@@ -179,6 +195,32 @@
                            if(!Cools.isEmpty(orderDetl)){
                                if(!orderDetlService.increaseQtyByOrderNo(wrkDetl.getOrderNo(), wrkDetl.getMatnr(),
                                        orderDetl.getBatch(),wrkDetl.getAnfme())){
//                                    exceptionHandle("全板入库 ===>> 更新订单完成数量失败;[workNo={0}],[locNo={1}]",
//                                            wrkMast.getWrkNo(), wrkMast.getLocNo());
                                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                                    return FAIL.setMsg("拣料入库 ===>> 更新订单完成数量失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
                                }
                            }
                        } catch (Exception ignore){}
//                        LocDetl locDetl = locDetlService.selectItem(locMast.getLocNo(), wrkDetl.getMatnr(), wrkDetl.getBatch());
//                        if (null != locDetl) {
//                            if (!locDetlService.updateAnfme(wrkDetl.getAnfme(), locMast.getLocNo(), wrkDetl.getMatnr(), wrkDetl.getBatch())) {
////                                exceptionHandle("拣料入库 ===>> 修改库存明细数量失败;[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
//                                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
//                                return FAIL.setMsg("拣料入库 ===>> 修改库存明细数量失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
//                            }
//                        }
//
//                        // 更新订单完成数量
//                        OrderDetl orderDetl = orderDetlService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch());
//                        if (orderDetl==null){
//                            orderDetl = orderDetlService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), null);
//                        }
                        try {
                            if(!Cools.isEmpty(orderDetl)){
                                if(!orderDetlService.increaseQtyByOrderNo(wrkDetl.getOrderNo(), wrkDetl.getMatnr(),
                                        orderDetl.getBatch(),wrkDetl.getAnfme())){
//                                    exceptionHandle("拣料入库 ===>> 更新订单完成数量失败;[workNo={0}],[locNo={1}]",
//                                            wrkMast.getWrkNo(), wrkMast.getLocNo());
                                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
src/main/java/com/zy/common/web/WcsController.java
@@ -22,6 +22,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
@@ -344,33 +345,34 @@
         * 任务中断,4-放货
         * 完成,8-任务结束
         */
        if (statusParam.getTaskStatus() == 0) {
            //拣料和盘点再入库判断
            if ((wrkMast.getIoType() == 103 || wrkMast.getIoType() == 107) && wrkMast.getWrkSts() == 14) {
//                LocDetl locDetl = locDetlService.selectItemByLocNo(wrkMast.getSourceLocNo());
//                List<WrkDetl> wrkDetl = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo());
                List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo());
                String sourcecLocNo = wrkMast.getSourceLocNo();
//                // 获取后两位的层数
//                String layerStr = sourcecLocNo.substring(sourcecLocNo.length() - 2);
//                int layer = Integer.parseInt(layerStr);
//                // 判断层数
//                Short locType1 = (short) ((layer == 1) ? 1 : 2);
//                LocTypeDto locTypeDto = new LocTypeDto();
//                locTypeDto.setLocType1(locType1);
//                StartupDto dto = commonService.getLocNoRunPick(4, 1, 101, wrkDetl.get(0).getMatnr(), wrkDetl.get(0).getBatch(), null, 4, locTypeDto, 2);
                // 获取后两位的层数
                String layerStr = sourcecLocNo.substring(sourcecLocNo.length() - 2);
                int layer = Integer.parseInt(layerStr);
                // 判断层数
                Short locType1 = (short) ((layer == 1) ? 1 : 2);
                LocTypeDto locTypeDto = new LocTypeDto();
                locTypeDto.setLocType1(locType1);
                //注意一个板只能放同一种物料
                StartupDto dto = commonService.getLocNoRunPick(4, 1, 101, wrkDetls.get(0).getMatnr(), wrkDetls.get(0).getBatch(), null, 4, locTypeDto, 2);
                Date now = new Date();
                wrkMast.setIoTime(now);
                wrkMast.setIoType(wrkMast.getIoType() - 50); // 入出库类型: 103->53,104->54,107->57
                wrkMast.setWrkSts(1L);//1.已接收
                wrkMast.setSourceStaNo(101); // 源站
                wrkMast.setStaNo(null); // 目标站
                wrkMast.setLocNo(sourcecLocNo); // 目标库位
                wrkMast.setSourceLocNo("");
                wrkMast.setLocNo(dto.getLocNo()); // 目标库位
                wrkMast.setSourceLocNo(sourcecLocNo);
                wrkMast.setModiTime(now);
                wrkDetlService.updateIoTime(wrkMast.getWrkNo(), now);
                // 修改库位状态 Q.拣料/盘点/并板再入库
                LocMast locMast2 = locMastService.selectById(sourcecLocNo);
                LocMast locMast2 = locMastService.selectById(dto.getLocNo());
                locMast2.setLocSts("Q");
                locMast2.setModiTime(new Date());
                if (!locMastService.updateById(locMast2)) {
@@ -390,6 +392,25 @@
            if (wrkMast.getIoType() == 1 || wrkMast.getIoType() == 10 || wrkMast.getIoType() == 11 || wrkMast.getIoType() == 53 || wrkMast.getIoType() == 57) {
                wrkMast.setWrkSts(4L);//4.入库完成
            } else if (wrkMast.getIoType() == 103 || wrkMast.getIoType() == 107) {
                List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo());
                String sourcecLocNo = wrkMast.getSourceLocNo();
                //更新工作明细并清空源库位
                for (WrkDetl wrkDetl : wrkDetls){
                    LocDetl locDetl = locDetlService.selectItem(wrkMast.getSourceLocNo(), wrkDetl.getMatnr(), wrkDetl.getBatch());
                    if (null != locDetl) {
                        if (!wrkDetlService.updateAnfme(locDetl.getAnfme() - wrkDetl.getAnfme(),wrkMast.getWrkNo(), wrkDetl.getMatnr(), wrkDetl.getBatch())) {
                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                            throw new CoolException("拣料入库 ===>> 修改库存明细数量失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
                        }
                    }
                }
                LocMast locMast1 = locMastService.selectById(sourcecLocNo);
                locMast1.setLocSts("O");
                locMast1.setModiTime(new Date());
                if (!locMastService.updateById(locMast1)) {
                    throw new CoolException("修改库位状态失败");
                }
                wrkMast.setWrkSts(14L);//14.已出库未确认
            } else if (wrkMast.getIoType() == 101 || wrkMast.getIoType() == 110) {
                wrkMast.setWrkSts(7L);//7.出库完成
src/main/resources/mapper/LocDetlMapper.xml
@@ -67,10 +67,9 @@
    </select>
    <select id="selectItemByLocNo" resultMap="BaseResultMap">
        select top 1 *
        select *
        from asr_loc_detl
        where 1=1
        and loc_no = #{locNo}
        where loc_no = #{locNo}
    </select>
    <delete id="deleteItem">
src/main/webapp/static/js/common.js
@@ -225,7 +225,7 @@
    {field: 'matnr', align: 'center',title: '商品编号(品号)', sort:true}
    ,{field: 'maktx', align: 'center',title: '商品名称(品名)', sort:true}
    ,{field: 'orderNo', align: 'center',title: '单据编号', hide: false}
    ,{field: 'batch', align: 'center',title: '货品特征', sort:true}
    ,{field: 'batch', align: 'center',title: '批号', sort:true}
    ,{field: 'anfme', align: 'center',title: '数量', hide: false}
    ,{field: 'zpallet', align: 'center',title: '托盘条码', hide: false}
src/main/webapp/views/report/viewWorkIn.html
@@ -41,7 +41,7 @@
    </div>
    <div class="layui-inline">
        <div class="layui-input-inline">
            <input class="layui-input" type="text" name="batch" placeholder="货品特征" autocomplete="off">
            <input class="layui-input" type="text" name="batch" placeholder="批号" autocomplete="off">
        </div>
    </div>
    <div class="layui-inline">
src/main/webapp/views/report/viewWorkOut.html
@@ -41,7 +41,7 @@
    </div>
    <div class="layui-inline">
        <div class="layui-input-inline">
            <input class="layui-input" type="text" name="batch" placeholder="货品特征" autocomplete="off">
            <input class="layui-input" type="text" name="batch" placeholder="批号" autocomplete="off">
        </div>
    </div>
    <div class="layui-inline">
src/main/webapp/views/wrkDetlLog/wrkDetlLog.html
@@ -46,7 +46,7 @@
    </div>
    <div class="layui-inline">
        <div class="layui-input-inline">
            <input class="layui-input" type="text" name="batch" placeholder="货品特征" autocomplete="off">
            <input class="layui-input" type="text" name="batch" placeholder="批号" autocomplete="off">
        </div>
    </div>
    <div class="layui-inline">