package com.zy.asrs.task; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.zy.asrs.entity.OrderDetl; 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.task.handler.GhjtHandler; import com.zy.system.entity.Config; import com.zy.system.mapper.ConfigMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.List; /** * @author pang.jiabao * @description 冠鸿江铜相关定时任务 * @createDate 2024/7/3 9:07 */ @Slf4j @Component public class GhjtScheduler { @Resource private GhjtHandler ghjtHandler; @Resource private WrkMastMapper wrkMastMapper; @Resource private OrderMapper orderMapper; @Resource private ConfigMapper configMapper; @Resource private OrderDetlMapper orderDetlMapper; // 自动备货(根据出库单,把要出的货提前放到靠近出库口位置) // 定时任务获取待备货订单明细->获取堆垛机对应的源库位,获取备货区库位->生成移库任务11-> // 执行移库任务12->入库完成4->更新工作档定时任务中更新订单备货状态和订单明细备货状态5->转储历史 @Scheduled(cron = "0/10 * * * * ?") public void autoStockUp() { // 查询自动备货配置 Config config = configMapper.selectConfigByCode("auto_stock_up"); if (config == null || config.getStatus() == 0) { return; } // 查询出库申请单中没有备货的订单明细的包装组号 List list = orderMapper.selectStockUpOrderDetl(); if (list.isEmpty()) { return; } ghjtHandler.autoStockUpHandler(list, Integer.parseInt(config.getValue())); } // 下发出库任务给GWCS(从出库码头到出库口) @Scheduled(cron = "0/2 * * * * ? ") public void ckrwPushGwcs() { // 查询状态为13的工作档 List wrkMasts = wrkMastMapper.selectList(new EntityWrapper().in("io_type", 101,103,107,110,3,12,109).eq("wrk_sts", 13)); for (WrkMast wrkMast : wrkMasts) { try { ghjtHandler.startCkrwPushGwcs(wrkMast); } catch (Exception e) { log.error("下发出库任务给GWCS(从出库码头到出库口)失败,异常信息:" + e); } } } // 自动跨巷道移库 // 配置开启->获取单据明细->获取源库位目标库位->生成移库任务->取消任务回滚单据-> // wcs出库到堆垛机出库口->gwms给gwcs推送目标站1->gwcs到达堆垛机入库口请求入库->堆垛机执行入库->入库完成->更新单据状态 // 11->12->13->1->2->3->4->5 @Scheduled(cron = "0/10 * * * * ?") public void autoMoveLoc() { // 查询跨巷道移库配置 Config config = configMapper.selectConfigByCode("auto_move_loc"); if (config == null || config.getStatus() == 0) { return; } // 查询待移库的单据明细 List orderDetlList = orderDetlMapper.selectMoveLocDetl(); if (orderDetlList.isEmpty()) { return; } ghjtHandler.autoMoveLoc(orderDetlList); } // 空闲理货 // 配置开启->查询可用桁架->获取到能理货的两个木箱->生成两个木箱的理货任务和组盘点的入库任务 // wcs出库到堆垛机出库口->推送给gwms去桁架命令->到达理货桁架请求zms拆垛规则->返回拆垛规则gwcs执行拆垛->拆垛完成请求zwms->返回去叠盘/回库/组盘点入库命令->gwcs到达入库口请求入库->堆垛机执行入库 // 11->12->13->2->42->52->2->3->4->5 // 回库 // ->15 // 去叠盘 // ->1->2->3->4->5 // 组盘点入库 @Scheduled(cron = "0/10 * * * * ? ") public void autoTallyGoods() { // 系统配置界面启用 Config config = configMapper.selectConfigByCode("auto_tally_goods"); if (config == null || config.getStatus() == 0) { return; } // 标记哪一套桁架能用 int flag = 0; // 分别查询两套桁架是否存在任务 Integer count = wrkMastMapper.selectCount(new EntityWrapper().eq("source_sta_no", 3046).or().in("sta_no", 3045, 3044)); if (count == 0) { flag = 1; } else { count = wrkMastMapper.selectCount(new EntityWrapper().in("source_sta_no", 3042).or().in("sta_no", 3041, 3040)); if (count == 0) { flag = 2; } } // 没有找到可用桁架,桁架都都存在任务 if (flag == 0) { return; } // 指定桁架生成理货任务 ghjtHandler.autoTallyGoods(flag); } }