| | |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.core.common.Cools; |
| | | import com.core.exception.CoolException; |
| | | import com.zy.asrs.entity.LocDetl; |
| | | import com.zy.asrs.entity.LocMast; |
| | | import com.zy.asrs.entity.WrkDetl; |
| | | import com.zy.asrs.entity.WrkMast; |
| | | import com.zy.asrs.mapper.OrderDetlMapper; |
| | | import com.zy.asrs.mapper.OrderMapper; |
| | | import com.zy.asrs.mapper.WrkMastMapper; |
| | | import com.zy.asrs.mapper.*; |
| | | import com.zy.asrs.service.ApiLogService; |
| | | import com.zy.asrs.service.WorkService; |
| | | import com.zy.asrs.service.WrkDetlService; |
| | | import com.zy.common.constant.MesConstant; |
| | | import com.zy.common.utils.HttpHandler; |
| | |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.Date; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | |
| | | |
| | | @Resource |
| | | private OrderDetlMapper orderDetlMapper; |
| | | |
| | | @Resource |
| | | private LocDetlMapper locDetlMapper; |
| | | |
| | | @Resource |
| | | private LocMastMapper locMastMapper; |
| | | |
| | | @Resource |
| | | private WorkService workService; |
| | | |
| | | @Transactional |
| | | public void startCkrwPushGwcs(WrkMast wrkMast) { |
| | |
| | | return flag; |
| | | } |
| | | |
| | | /** |
| | | * 自动备货处理 |
| | | */ |
| | | public void autoStockUpHandler(List<String> list,int columnNum) { |
| | | |
| | | // 根据包装组号获取所在库位 |
| | | List<LocDetl> locDetls = locDetlMapper.selectLocNoByGroupNo(list); |
| | | if (locDetls.isEmpty()) { |
| | | return; |
| | | } |
| | | // 相同则合并,一个库位两个包装组号 |
| | | Map<String,List<String>> map = new HashMap<>(); |
| | | for(LocDetl locDetl : locDetls) { |
| | | List<String> brand = map.get(locDetl.getLocNo()); |
| | | if (brand == null) { |
| | | map.put(locDetl.getLocNo(),new ArrayList<String>(){{add(locDetl.getBrand());}}); |
| | | } else { |
| | | brand.add(locDetl.getBrand()); |
| | | map.put(locDetl.getLocNo(),brand); |
| | | } |
| | | } |
| | | |
| | | // 遍历堆垛机并且判断是否存在任务 |
| | | for (int i = 1; i <= 6; i++) { |
| | | // 要备货的库位 |
| | | String sourceLocNo = null; |
| | | // 备货目标库位 |
| | | String staLocNo = null; |
| | | Integer wrkCount = wrkMastMapper.selectCount(new EntityWrapper<WrkMast>().eq("crn_no", i)); |
| | | if(wrkCount > 0) { |
| | | log.warn("{}号堆垛机已存在任务",i); |
| | | continue; |
| | | } |
| | | // 根据堆垛机号查询到对应的深库位和浅库位 深库位4*n-3和4*n 浅库位4*n-2和4*n-1 |
| | | int s1 = 4*i-3; |
| | | int s2 = 4*i; |
| | | int q1 = 4 * i - 2; |
| | | int q2 = 4 * i -1; |
| | | |
| | | // 根据堆垛机号获取一个浅库位 |
| | | for(String key : map.keySet()) { |
| | | int row = Integer.parseInt(key.substring(0, 2)); |
| | | if (row == q1 || row == q2) { |
| | | sourceLocNo = key; |
| | | break; |
| | | } |
| | | } |
| | | // 浅库位没有则找一个深库位 |
| | | if (sourceLocNo == null) { |
| | | for(String key : map.keySet()) { |
| | | int row = Integer.parseInt(key.substring(0, 2)); |
| | | if (row == s1 || row == s2) { |
| | | sourceLocNo = key; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | // 没有找到源库位 |
| | | if (sourceLocNo == null) { |
| | | log.warn("没有找到源库位,堆垛机:{}",i); |
| | | continue; |
| | | } |
| | | // 寻找一个备货的目标库位,先深后浅 |
| | | List<LocMast> locMasts1 = locMastMapper.selectList(new EntityWrapper<LocMast>().eq("loc_sts", "O").eq("crn_no", i).in("row1", s1, s2) |
| | | .le("bay1", columnNum)); |
| | | if (locMasts1.isEmpty()) { |
| | | // 深库位为空了,取浅库位 |
| | | List<LocMast> locMasts2 = locMastMapper.selectList(new EntityWrapper<LocMast>().eq("loc_sts", "O").eq("crn_no", i).in("row1", q1, q2) |
| | | .le("bay1", columnNum)); |
| | | if (!locMasts2.isEmpty()) { |
| | | staLocNo = locMasts2.get(0).getLocNo(); |
| | | } |
| | | } else { |
| | | staLocNo = locMasts1.get(0).getLocNo(); |
| | | } |
| | | |
| | | if(staLocNo == null) { |
| | | log.warn("{}号堆垛机备货区满了",i); |
| | | continue; |
| | | } |
| | | |
| | | // 备货的源库位,目标库位都获取到了,生成移库任务 |
| | | workService.locMove(sourceLocNo,staLocNo,29L); |
| | | |
| | | // 订单明细改成备货中,在任务完成时候改成备货完成,并判断整个订单是否完成 |
| | | orderDetlMapper.updateOrderDetlStatusByPackageNo(map.get(sourceLocNo), 1); |
| | | |
| | | // 移除已生成备货库位 |
| | | map.remove(sourceLocNo); |
| | | } |
| | | |
| | | } |
| | | } |