| | |
| | | import com.zy.asrs.entity.*; |
| | | import com.zy.asrs.service.*; |
| | | import com.zy.asrs.utils.LocUtils; |
| | | import com.zy.system.entity.Config; |
| | | import com.zy.system.service.ConfigService; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | |
| | | private LocRuleService locRuleService; |
| | | @Autowired |
| | | AgvBasDevpService agvBasDevpService; |
| | | |
| | | @Autowired |
| | | private ConfigService configService; |
| | | |
| | | @Autowired |
| | | private LocUtils locUtils; |
| | |
| | | } |
| | | |
| | | /** |
| | | * 库位规则查找,会预留20个库位 |
| | | */ |
| | | public synchronized AgvLocMast getLocByLocRule20(int type, int floor, String factory, boolean flag) { |
| | | |
| | | try { |
| | | EntityWrapper<AgvLocMast> wrapper = new EntityWrapper<>(); |
| | | wrapper.eq("loc_sts", "O").eq("loc_type1", type); |
| | | List<AgvLocMast> agvLocMasts = new ArrayList<>(); |
| | | //不是空板优先找2层 |
| | | if (Cools.isEmpty(factory)) { |
| | | wrapper.eq("floor", floor).orderBy("lev1", true); |
| | | } else { |
| | | //B是二厂,G是三厂 |
| | | if (factory.equals("B")) { |
| | | wrapper.eq("floor", floor).orderBy("lev1", false).orderBy("row1", flag); |
| | | |
| | | } else { |
| | | wrapper.eq("floor", floor).orderBy("lev1", true); |
| | | |
| | | } |
| | | } |
| | | int num = 20; |
| | | Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "LOC_3_NUM")); |
| | | if (config != null && !Cools.isEmpty(config.getValue())) { |
| | | num = Integer.parseInt(config.getValue()); |
| | | } |
| | | agvLocMasts = agvLocMastService.selectList(wrapper); |
| | | int er = 0; |
| | | for (AgvLocMast agvLocMast : agvLocMasts) { |
| | | if (agvLocMast.getLev1() == 2) { |
| | | er++; |
| | | } |
| | | } |
| | | for (AgvLocMast agvLocMast : agvLocMasts) { |
| | | AgvLocMast agvLocMast1 = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("loc_no", agvLocMast.getLocNo())); |
| | | if (agvLocMast1.getLocSts().equals("O")) { |
| | | if (agvLocMast1.getLev1() == 2) { |
| | | if (er > num) { |
| | | return agvLocMast1; |
| | | } |
| | | } else { |
| | | return agvLocMast1; |
| | | } |
| | | |
| | | } |
| | | } |
| | | throw new CoolException("搜索库位时,未找到可入库库位。"); |
| | | } catch (Exception e) { |
| | | throw new CoolException("搜索库位时,未找到可入库库位。"); |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 库位规则查找 |
| | | */ |
| | | public AgvLocMast getLocByLocRule(int type, int floor, String factory) { |
| | | public synchronized AgvLocMast getLocByLocRule(int type, int floor, String factory, boolean flag) { |
| | | |
| | | try { |
| | | EntityWrapper<AgvLocMast> wrapper = new EntityWrapper<>(); |
| | |
| | | //B是二厂,G是三厂 |
| | | switch (factory) { |
| | | case "B": |
| | | wrapper.eq("floor", floor).orderBy("lev1", false); |
| | | wrapper.eq("floor", floor).orderBy("lev1", false).orderBy("row1", flag); |
| | | break; |
| | | case "G": |
| | | wrapper.eq("floor", floor).orderBy("lev1", true); |
| | |
| | | } catch (Exception e) { |
| | | throw new CoolException("搜索库位时,未找到可入库库位。"); |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | /** |
| | |
| | | try { |
| | | EntityWrapper<AgvLocMast> wrapper = new EntityWrapper<>(); |
| | | wrapper.eq("loc_sts", "O").eq("loc_type1", type); |
| | | wrapper.eq("floor", floor).eq("lev1", lev1).orderBy("bay1", false); |
| | | List<AgvLocMast> agvLocMasts = agvLocMastService.selectList(wrapper); |
| | | for (AgvLocMast agvLocMast : agvLocMasts) { |
| | | AgvLocMast agvLocMast1 = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("loc_no", agvLocMast.getLocNo())); |
| | | if (agvLocMast1.getLocSts().equals("O")) { |
| | | return agvLocMast1; |
| | | } |
| | | } |
| | | throw new CoolException("搜索库位时,未找到可入库库位。"); |
| | | } catch (Exception e) { |
| | | throw new CoolException("搜索库位时,未找到可入库库位。"); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 库位规则查找 |
| | | */ |
| | | public AgvLocMast getLocByLocRule2(int type, int floor, int lev1) { |
| | | |
| | | try { |
| | | EntityWrapper<AgvLocMast> wrapper = new EntityWrapper<>(); |
| | | wrapper.eq("loc_sts", "O").eq("loc_type1", type); |
| | | wrapper.eq("floor", floor).eq("lev1", lev1); |
| | | List<AgvLocMast> agvLocMasts = agvLocMastService.selectList(wrapper); |
| | | if (lev1 == 2) { |
| | | int num = 20; |
| | | Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "LOC_3_NUM")); |
| | | if (config != null && !Cools.isEmpty(config.getValue())) { |
| | | num = Integer.parseInt(config.getValue()); |
| | | } |
| | | int er = agvLocMasts.size(); |
| | | if (er < num) { |
| | | throw new CoolException("搜索库位时,未找到可入库库位。20"); |
| | | } |
| | | } |
| | | for (AgvLocMast agvLocMast : agvLocMasts) { |
| | | AgvLocMast agvLocMast1 = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("loc_no", agvLocMast.getLocNo())); |
| | | if (agvLocMast1.getLocSts().equals("O")) { |
| | |
| | | return null; |
| | | } |
| | | |
| | | public AgvLocMast getLocNoOnXiSuer20(int type, int floor) { |
| | | EntityWrapper<AgvLocMast> wrapper = new EntityWrapper<>(); |
| | | wrapper.eq("loc_sts", "O").eq("loc_type1", type); |
| | | wrapper.eq("floor", floor).eq("lev1", 2); |
| | | List<AgvLocMast> agvLocMasts = agvLocMastService.selectList(wrapper); |
| | | if (Cools.isEmpty(agvLocMasts)) { |
| | | return null; |
| | | } else { |
| | | int num = 15; |
| | | Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "LOC_6_NUM")); |
| | | if (config != null && !Cools.isEmpty(config.getValue())) { |
| | | num = Integer.parseInt(config.getValue()); |
| | | } |
| | | if (agvLocMasts.size() > num) { |
| | | for (AgvLocMast agvLocMast : agvLocMasts) { |
| | | AgvLocMast agvLocMast1 = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("loc_no", agvLocMast.getLocNo())); |
| | | if (agvLocMast1.getLocSts().equals("O")) { |
| | | return agvLocMast1; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | |
| | | //随机取一个货位 |
| | | private AgvLocMast getLocNoRule(int type, int floor, boolean isEmpty, boolean isCurrLev) { |