| | |
| | | import com.zy.asrs.service.WrkDetlService; |
| | | import com.zy.asrs.utils.Utils; |
| | | import com.zy.common.constant.MesConstant; |
| | | import com.zy.common.model.StartupDto; |
| | | import com.zy.common.properties.SlaveProperties; |
| | | import com.zy.common.service.CommonService; |
| | | import com.zy.common.utils.HttpHandler; |
| | | import com.zy.system.entity.Config; |
| | | import com.zy.system.mapper.ConfigMapper; |
| | |
| | | */ |
| | | @Slf4j |
| | | @Service |
| | | @Transactional |
| | | public class GhjtHandler { |
| | | |
| | | @Resource |
| | |
| | | @Autowired |
| | | private SlaveProperties slaveProperties; |
| | | |
| | | @Transactional |
| | | @Resource |
| | | private CommonService commonService; |
| | | |
| | | // 堆垛机对应一楼出库站点 |
| | | private static final int[] oneFloorOutSite = new int[]{0,3002,3003,3006,3008,3009,3012}; |
| | | |
| | | public void startCkrwPushGwcs(WrkMast wrkMast) { |
| | | |
| | | // 获取请求头 |
| | |
| | | } else if (wrkMast.getIoType() == 103 && (wrkMast.getStaNo() == 3077 || wrkMast.getStaNo() == 3106)) { // 两箱出一箱,需桁架理货 |
| | | // 都要先去理货 |
| | | flag = 2; |
| | | // if (wrkDetls.size() == 1) { // 一卷贴标出库 |
| | | // flag = 4; |
| | | // } else { // 多卷直接出库 |
| | | // |
| | | // } |
| | | } |
| | | return flag; |
| | | } |
| | |
| | | /** |
| | | * 自动备货处理 |
| | | */ |
| | | @Transactional |
| | | public void autoStockUpHandler(List<String> list,int columnNum) { |
| | | |
| | | // 根据包装组号获取所在库位 |
| | |
| | | |
| | | } |
| | | |
| | | @Transactional |
| | | public void autoMoveLoc(List<OrderDetl> orderDetlList) { |
| | | |
| | | // 判断是否已经有执行的移库任务 |
| | |
| | | orderMapper.updatePendingSettleByOrderNo(detl.getOrderNo(),2L); |
| | | } |
| | | |
| | | /** |
| | | * 给指定桁架生成理货任务,按规则寻找到能理货的两个库位 |
| | | * 1.能理货的都是一箱一卷的 |
| | | * 2.规则:木箱型号相同-管芯类型相同-实测宽幅相同-生箔厚度相同-分切下料时间相近 |
| | | */ |
| | | public void autoTallyGoods(int flag) { |
| | | |
| | | // 获取备货区配置 |
| | | Config config = configMapper.selectConfigByCode("auto_stock_up"); |
| | | if (config == null) { |
| | | throw new CoolException("理货获取备货区配置错误!!!"); |
| | | } |
| | | // 前几列是备货区 |
| | | int columnNum = Integer.parseInt(config.getValue()); |
| | | |
| | | // 寻找一箱一卷的,没有理货的,不在备货区的物料明细 |
| | | List<LocDetl> tallyGoosList = locDetlMapper.selectTallyGoosList(columnNum); |
| | | |
| | | // 寻找满足理货条件的两个木箱 |
| | | LocDetl leftLocDetl = null; |
| | | LocDetl rightLocDetl = null; |
| | | for (int i = 0; i < tallyGoosList.size(); i++) { |
| | | leftLocDetl = tallyGoosList.get(i); |
| | | for (int j = i + 1; j < tallyGoosList.size(); j++) { |
| | | LocDetl tempLocDetl = tallyGoosList.get(j); |
| | | if (leftLocDetl.getColor().equals(tempLocDetl.getColor()) && leftLocDetl.getManu().equals(tempLocDetl.getManu()) && |
| | | leftLocDetl.getSku().equals(tempLocDetl.getSku()) && leftLocDetl.getItemNum().equals(tempLocDetl.getItemNum())) { |
| | | rightLocDetl = tempLocDetl; |
| | | break; |
| | | } |
| | | } |
| | | if (rightLocDetl != null) { |
| | | break; |
| | | } |
| | | } |
| | | |
| | | if (leftLocDetl == null || rightLocDetl == null) { |
| | | // log.warn("没有找到两个能理货的木箱"); |
| | | return; |
| | | } |
| | | |
| | | // 找到的两个木箱刚好在一个托盘上,直接更改理货状态为2 |
| | | if (leftLocDetl.getLocNo().equals(rightLocDetl.getLocNo())) { |
| | | locDetlMapper.updateLhStsByLocNo(leftLocDetl.getLocNo(), 2); |
| | | } else { |
| | | |
| | | // 判断是去哪套桁架的哪个站点 t0组盘点,t1左换盘点,t2右换盘点 |
| | | int t0 = 3046, t1 = 3045, t2 = 3044; |
| | | if (flag == 2) { |
| | | t0 = 3042; |
| | | t1 = 3041; |
| | | t2 = 3040; |
| | | } |
| | | |
| | | // 生成空闲理货任务 |
| | | WrkDetl wrkDetl1 = tallyGoodsGenerate(t1, leftLocDetl); |
| | | WrkDetl wrkDetl2 = tallyGoodsGenerate(t2, rightLocDetl); |
| | | |
| | | Date now = new Date(); |
| | | |
| | | // 寻找一个空库位 |
| | | StartupDto dto = commonService.getLocNo(1, t0, null, 0); |
| | | // 生成组盘入库任务 |
| | | WrkMast wrkMast = new WrkMast(); |
| | | wrkMast.setWrkNo(dto.getWorkNo()); |
| | | wrkMast.setIoTime(now); |
| | | wrkMast.setWrkSts(1L); // 工作状态 |
| | | wrkMast.setIoType(1); // 入出库类型 |
| | | wrkMast.setIoPri(13D); // 优先级:13 |
| | | wrkMast.setCrnNo(dto.getCrnNo()); |
| | | wrkMast.setSourceStaNo(dto.getSourceStaNo()); // 源站 |
| | | wrkMast.setStaNo(dto.getStaNo()); // 目标站 |
| | | wrkMast.setSourceLocNo(""); // 源库位 |
| | | wrkMast.setLocNo(dto.getLocNo()); |
| | | wrkMast.setFullPlt("Y"); // 满板:Y |
| | | wrkMast.setPicking("N"); // 拣料 |
| | | wrkMast.setExitMk("N"); // 退出 |
| | | wrkMast.setEmptyMk("N"); // 空板 |
| | | wrkMast.setLinkMis("N"); |
| | | wrkMast.setBarcode(""); // zwcs执行入库时更新托盘码 |
| | | wrkMast.setAppeUser(29L); // 操作人员 root |
| | | wrkMast.setAppeTime(now); |
| | | wrkMast.setModiUser(29L); |
| | | wrkMast.setModiTime(now); |
| | | if (wrkMastMapper.insert(wrkMast) != 1) { |
| | | throw new CoolException("空闲理货组盘保存工作档失败,详情:" + wrkMast); |
| | | } |
| | | |
| | | // 生成工作明细 |
| | | wrkDetl1.setWrkNo(wrkMast.getWrkNo()); |
| | | wrkDetl1.setOrigin("左"); // 固定拆到左边 |
| | | wrkDetl1.setDeadWarn(2); // 已理货标识 |
| | | wrkDetl2.setWrkNo(wrkMast.getWrkNo()); |
| | | wrkDetl2.setOrigin("右"); |
| | | wrkDetl2.setDeadWarn(2); |
| | | wrkDetlService.insert(wrkDetl1); // 入库完成时更新托盘码 |
| | | wrkDetlService.insert(wrkDetl2); |
| | | |
| | | // 更新目标库位状态 |
| | | LocMast locMast = locMastMapper.selectById(dto.getLocNo()); |
| | | locMast.setLocSts("S"); |
| | | locMastMapper.updateById(locMast); // 入库完成时更新托盘码 |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 生成空闲理货到换盘桁架的任务 |
| | | * |
| | | * @param site 换盘点 |
| | | * @param locDetl 库存明细 |
| | | */ |
| | | private WrkDetl tallyGoodsGenerate(int site, LocDetl locDetl) { |
| | | |
| | | // 判断库位状态 |
| | | LocMast locMast = locMastMapper.selectById(locDetl.getLocNo()); |
| | | if (!locMast.getLocSts().equals("F")) { |
| | | throw new CoolException("理货库位状态有误,不为F,库位号:" + locMast.getLocNo()); |
| | | } |
| | | |
| | | Date now = new Date(); |
| | | |
| | | // 生成工作档 |
| | | WrkMast wrkMast = new WrkMast(); |
| | | // 获取工作号 |
| | | int workNo = commonService.getWorkNo(5); |
| | | wrkMast.setWrkNo(workNo); |
| | | wrkMast.setIoTime(now); |
| | | wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID |
| | | wrkMast.setIoType(109); // 入出库状态 109.空闲理货 |
| | | wrkMast.setIoPri(13D); // 优先级:13 |
| | | wrkMast.setCrnNo(locMast.getCrnNo()); |
| | | wrkMast.setSourceStaNo(oneFloorOutSite[locMast.getCrnNo()]); // 源站 |
| | | wrkMast.setStaNo(site); // 目标站 |
| | | wrkMast.setSourceLocNo(locDetl.getLocNo()); // 源库位 |
| | | wrkMast.setFullPlt("Y"); // 满板:Y |
| | | wrkMast.setPicking("N"); // 拣料 |
| | | wrkMast.setExitMk("N"); // 退出 |
| | | wrkMast.setEmptyMk("N"); // 空板 |
| | | wrkMast.setLinkMis("N"); |
| | | wrkMast.setSheetNo("0"); |
| | | wrkMast.setBarcode(locDetl.getZpallet()); |
| | | wrkMast.setAppeUser(29L); // 操作人员 root |
| | | wrkMast.setAppeTime(now); |
| | | wrkMast.setModiUser(29L); |
| | | wrkMast.setModiTime(now); |
| | | if (wrkMastMapper.insert(wrkMast) != 1) { |
| | | throw new CoolException("空闲理货保存工作档失败,详情:" + wrkMast); |
| | | } |
| | | |
| | | // 生成工作明细 |
| | | WrkDetl wrkDetl = new WrkDetl(); |
| | | wrkDetl.sync(locDetl); |
| | | wrkDetl.setWrkNo(workNo); |
| | | wrkDetl.setIoTime(now); |
| | | wrkDetl.setAppeTime(now); |
| | | wrkDetl.setAppeUser(29L); |
| | | wrkDetl.setModiTime(now); |
| | | wrkDetl.setModiUser(29L); |
| | | if (!wrkDetlService.insert(wrkDetl)) { |
| | | throw new CoolException("空闲理货保存工作档明细失败,详情:" + wrkDetl); |
| | | } |
| | | |
| | | // 修改出库状态 |
| | | locMast.setLocSts("R"); |
| | | locMast.setModiUser(29L); |
| | | locMast.setModiTime(now); |
| | | if (locMastMapper.updateById(locMast) != 1) { |
| | | throw new CoolException("空闲理货预约库位状态失败,库位号:" + locMast.getLocNo()); |
| | | } |
| | | |
| | | // 更新库存明细为理货中 |
| | | locDetlMapper.updateLhStsByLocNo(locDetl.getLocNo(), 1); |
| | | |
| | | return wrkDetl; |
| | | } |
| | | |
| | | } |