src/main/java/com/zy/asrs/mapper/LocMastMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/common/service/CommonService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/common/web/WcsController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/resources/mapper/LocMastMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/zy/asrs/mapper/LocMastMapper.java
@@ -63,11 +63,4 @@ */ String findFirstFrozenLocNo(@Param("locNoList") List<String> locNoList); /** * 根据指定库位排号和库位状态获取一个满足条件的库位 * @param rowList 排号集合(为空则查询所有排) * @param locType 空拖类型 * @return 库位 */ LocMast queryLocMasterByLocStsAndRow(@Param("rowList") List<Integer> rowList,@Param("locType") String locType); } src/main/java/com/zy/common/service/CommonService.java
@@ -329,7 +329,7 @@ // 入成品库摆放规则 判断可用堆垛机自动-无报警 按层列排顺序从下往上,从前往后排 先深库位在浅库位 最上面一层只能放208L桶(剩余库位达到一个阈值208L就先从最上面开始放,下面留给其他货物-后续优化) List<BasCrnp> basCrnps = basCrnpService.selectList(new EntityWrapper<BasCrnp>().eq("crn_sts", 3).eq("crn_err", 0).in("crn_no",1,2,3) .eq("in_enable","Y").orderBy("crn_no",false)); .eq("in_enable","Y")); if (basCrnps.size() == 0) { log.error("入库请求库位失败,没有联机堆垛机或堆垛机异常"); throw new CoolException("入库请求库位失败,没有联机堆垛机或堆垛机异常"); @@ -342,7 +342,12 @@ basCrnpList.add(basCrnp); } basCrnpList = basCrnpList.stream().sorted(Comparator.comparing(BasCrnp::getWrkNo)).collect(Collectors.toList()); basCrnpList = basCrnpList.stream().sorted(Comparator.comparing(BasCrnp::getWrkNo).thenComparing(BasCrnp::getCrnNo,((o1, o2) -> { // 定义 2 → 3 → 1 的优先级 int order1 = getCustomOrder(o1); int order2 = getCustomOrder(o2); return Integer.compare(order1, order2); }))).collect(Collectors.toList()); // 入库桶型 String model = findLocNoAttributeVo.getModel(); @@ -414,6 +419,16 @@ return startupDto; } // 辅助方法:定义 crn_no 的排序优先级 private static int getCustomOrder(Integer crnNo) { switch (crnNo) { case 2: return 1; // 2 排第一 case 3: return 2; // 3 排第二 case 1: return 3; // 1 排第三 default: return 4; // 其他值排最后(如果有) } } @Transactional(propagation = Propagation.REQUIRED) public StartupDto getLocNo(SearchLocParam param, Integer staNo) { src/main/java/com/zy/common/web/WcsController.java
@@ -10,6 +10,7 @@ import com.zy.asrs.entity.param.EmptyPlateOutParam; import com.zy.asrs.entity.param.StockOutParam; import com.zy.asrs.entity.result.FindLocNoAttributeVo; import com.zy.asrs.mapper.BasCrnpMapper; import com.zy.asrs.mapper.LocMastMapper; import com.zy.asrs.mapper.WrkMastMapper; import com.zy.asrs.service.*; @@ -28,6 +29,7 @@ import javax.annotation.Resource; import java.util.*; import java.util.stream.Collectors; /** * Created by vincent on 2020/10/30 @@ -67,6 +69,18 @@ @Resource private WrkMastMapper wrkMastMapper; @Resource private BasCrnpMapper basCrnpMapper; public static final Map<Integer,ArrayList<Integer>> crnOutSite; static { crnOutSite = new HashMap<>(); crnOutSite.put(1,new ArrayList<Integer>(){{add(1091);add(1092);add(1093);}}); crnOutSite.put(2,new ArrayList<Integer>(){{add(1097);add(1098);add(1099);}}); crnOutSite.put(3,new ArrayList<Integer>(){{add(1105);add(1106);add(1107);}}); } @PostMapping("/pakin/loc/v1") @ResponseBody @@ -698,14 +712,43 @@ // 出库站点 Integer site = Integer.valueOf(emptyPalletSite.get("site")); LocMast locMast; LocMast locMast = null; // 先找浅库位 locMast = locMastMapper.queryLocMasterByLocStsAndRow(Arrays.asList(2,3,5,6,7,8), type); List<BasCrnp> basCrnps = basCrnpMapper.selectList(new EntityWrapper<BasCrnp>().eq("crn_sts", 3).eq("crn_err", 0).in("crn_no",1,2,3) .eq("out_enable","Y")); if (basCrnps.size() == 0) { log.error("空拖出库请求库位失败,没有联机堆垛机或堆垛机异常"); throw new CoolException("空拖出库请求库位失败,没有联机堆垛机或堆垛机异常"); } // 浅库位没有则查询所有 if (locMast == null) { locMast = locMastMapper.queryLocMasterByLocStsAndRow(null, type); List<BasCrnp> basCrnpList = new ArrayList<>(); for(BasCrnp basCrnp: basCrnps) { List<BasDevp> devps = basDevpService.selectList(new EntityWrapper<BasDevp>().in("dev_no", crnOutSite.get(basCrnp.getCrnNo())).ne("wrk_no", 0)); long count = devps.stream().map(BasDevp::getWrkNo).distinct().count(); basCrnp.setWrkNo(count + basCrnp.getWrkNo() >= 5001 && basCrnp.getWrkNo() <= 9000 ? 1 : 0); basCrnpList.add(basCrnp); } basCrnpList = basCrnpList.stream().sorted(Comparator.comparing(BasCrnp::getWrkNo).thenComparing(BasCrnp::getCrnNo,Comparator.reverseOrder())).collect(Collectors.toList()); for(BasCrnp basCrnp:basCrnpList) { Integer crnNo = basCrnp.getCrnNo(); Wrapper<LocMast> wrapper = new EntityWrapper<LocMast>().eq("loc_sts", type) .eq("crn_no", crnNo).orderBy("lev1").orderBy("bay1").orderBy("row1"); if (crnNo == 1) { wrapper.in("row1", 1, 4); } locMast = locMastService.selectOne(wrapper); if (locMast != null) { break; } // 深库位没有了则获取一个浅库位 if (crnNo == 1) { locMast = locMastService.selectOne(wrapper.in("row1", 2, 3)); if (locMast != null) { break; } } } if (locMast == null) { src/main/resources/mapper/LocMastMapper.xml
@@ -203,20 +203,5 @@ #{item} </foreach> </select> <select id="queryLocMasterByLocStsAndRow" resultMap="BaseResultMap"> select top 1 * from asr_loc_mast alm inner join asr_bas_crnp abc on alm.crn_no = abc.crn_no where alm.loc_sts = #{locType} and abc.crn_err = 0 and abc.crn_sts = 3 <if test="rowList != null and !rowList.isEmpty()"> and alm.row1 in <foreach collection="rowList" item="item" open="(" close=")" separator=","> #{item} </foreach> </if> order by alm.crn_no desc,lev1,bay1,row1 </select> </mapper>