自动化立体仓库 - WMS系统
whycq
2024-12-26 cb7fe9b2619ea3848489fce5004c87bbd9f71e63
#灌装线出库接口
7个文件已修改
102 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/mapper/LocMastMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/LocDetlService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/LocMastService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/web/WcsController.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/LocMastMapper.xml 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/WrkMastMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/LocMastMapper.java
@@ -40,4 +40,6 @@
    List<LocMast> selectAreaEmpty(Short locType1,Integer crnNo);
    List<LocMast> selectAllLocNotEmpty(@Param("groupLoc") List<String> groupOuterLoc);
    LocMast getLocFByMatnr(String locNo);
}
src/main/java/com/zy/asrs/service/LocDetlService.java
@@ -89,4 +89,5 @@
    List<LocDetlAll> selectOwnerAllAnfme();
    List<String> getSameDetl(String matnr, String batch, String grade);
}
src/main/java/com/zy/asrs/service/LocMastService.java
@@ -57,4 +57,6 @@
    List<LocMast> selectAreaEmpty(Short locType1, Integer crnNo);
    boolean checkAllLocEmpty(List<String> groupLoc);
    LocMast getLocFByMatnr(String matnr);
}
src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java
@@ -121,4 +121,11 @@
        return result.size() <= 0;
    }
    @Override
    public LocMast getLocFByMatnr(String matnr) {
        return this.baseMapper.getLocFByMatnr(matnr);
    }
}
src/main/java/com/zy/common/web/WcsController.java
@@ -10,8 +10,10 @@
import com.zy.asrs.service.*;
import com.zy.asrs.utils.Utils;
import com.zy.common.CodeRes;
import com.zy.common.model.LocDto;
import com.zy.common.model.LocTypeDto;
import com.zy.common.model.StartupDto;
import com.zy.common.model.enums.WorkNoType;
import com.zy.common.service.CommonService;
import com.zy.common.web.param.SearchLocParam;
import lombok.extern.slf4j.Slf4j;
@@ -52,6 +54,8 @@
    private WorkService workService;
    @Autowired
    private BasCrnpService basCrnpService;
    @Autowired
    private StaDescService staDescService;
    @PostMapping("/pakin/loc/v1")
    @ResponseBody
@@ -342,4 +346,78 @@
        return dto;
    }
    @PostMapping("/process/loc/v1")
    @ResponseBody
    @Transactional
    public synchronized void processLoc() {
        log.info("收到WCS罐装出库接口请求");
        Date now = new Date();
        // 查询库存状态位F 且 库存明细包含该物料的库位
        LocMast tarLoc = locMastService.getLocFByMatnr("BC20009TY13701530");
        if (Cools.isEmpty(tarLoc)) {
            throw new CoolException("没有可出库的库位");
        }
        List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("io_type", 105).ne("wrk_sts", 14));
        if (!Cools.isEmpty(tarLoc)) {
            if (wrkMasts.size() > 3) {
                throw new CoolException("当前已有4笔出库任务,暂停下发");
            }
        }
        // 获取源站
        StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>()
                .eq("type_no", 105)
                .eq("stn_no", 2301)
                .eq("crn_no", tarLoc.getCrnNo()));
        Integer sourceStaNo = staDesc.getCrnStn();
        // 生成工作号
        int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(103));
        // 生成工作档
        WrkMast wrkMast = new WrkMast();
        wrkMast.setWrkNo(workNo);
        wrkMast.setIoTime(now);
        wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID
        wrkMast.setIoType(105); // 入出库状态
        wrkMast.setIoPri(13D); // 优先级:13
        wrkMast.setCrnNo(tarLoc.getCrnNo());
        wrkMast.setSourceStaNo(sourceStaNo); // 源站
        wrkMast.setStaNo(2301); // 目标站
        wrkMast.setSourceLocNo(tarLoc.getLocNo()); // 源库位
        wrkMast.setFullPlt("Y"); // 满板:Y
        wrkMast.setPicking("N"); // 拣料
        wrkMast.setExitMk("N"); // 退出
        wrkMast.setEmptyMk("N"); // 空板
        wrkMast.setLinkMis("N");
        wrkMast.setBarcode(tarLoc.getBarcode());
        wrkMast.setAppeTime(now);
        wrkMast.setModiTime(now);
        if (!wrkMastService.insert(wrkMast)) {
            throw new CoolException("保存工作档失败,出库库位号:"+tarLoc.getLocNo());
        }
        // 生成工作档明细
        List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", tarLoc.getLocNo()));
        for (LocDetl locDetl : locDetls) {
            WrkDetl wrkDetl = new WrkDetl();
            wrkDetl.sync(locDetl);
            wrkDetl.setZpallet(wrkMast.getBarcode());
            wrkDetl.setIoTime(now);
            wrkDetl.setWrkNo(workNo);
            wrkDetl.setBatch(locDetl.getBatch());
            wrkDetl.setAnfme(locDetl.getAnfme()); // 数量
            wrkDetl.setAppeTime(now);
            wrkDetl.setModiTime(now);
            if (!wrkDetlService.insert(wrkDetl)) {
                throw new CoolException("保存工作档明细失败");
            }
        }
        // 修改库位状态:   F.在库 ====>>> R.出库预约/P.拣料/盘点/并板出库中
        if (tarLoc.getLocSts().equals("F")) {
            tarLoc.setLocSts("P");
            tarLoc.setModiTime(now);
            if (!locMastService.updateById(tarLoc)) {
                throw new CoolException("预约库位状态失败,库位号:"+tarLoc.getLocNo());
            }
        } else {
            throw new CoolException(tarLoc.getLocNo() + "库位不是在库状态");
        }
    }
}
src/main/resources/mapper/LocMastMapper.xml
@@ -117,5 +117,15 @@
        </foreach>
    </select>
    <select id="getLocFByMatnr" resultMap="BaseResultMap">
        SELECT TOP 1 mast.*
        FROM asr_loc_mast mast
        JOIN asr_loc_detl detl
        ON mast.loc_no = detl.loc_no
        AND mast.loc_sts = 'F'
        AND detl.matnr = #{matnr}
        ORDER BY mast.modi_time
    </select>
</mapper>
src/main/resources/mapper/WrkMastMapper.xml
@@ -63,7 +63,7 @@
    </resultMap>
    <select id="selectToBeCompleteData" resultMap="BaseResultMap">
        select * from asr_wrk_mast where ((wrk_sts = 4 Or wrk_sts = 14 ) and io_type != 103 and io_type != 104 and io_type != 107 ) or (wrk_sts = 2 and io_type=6) order by upd_mk,error_time,io_time,wrk_no
        select * from asr_wrk_mast where ((wrk_sts = 4 Or wrk_sts = 14 ) and io_type != 103 and io_type != 104 and io_type != 105 and io_type != 107 ) or (wrk_sts = 2 and io_type=6) order by upd_mk,error_time,io_time,wrk_no
    </select>
    <select id="selectToBeHistoryData" resultMap="BaseResultMap">