| | |
| | | import com.zy.asrs.domain.param.CreateInTaskParam; |
| | | import com.zy.asrs.entity.BasDevp; |
| | | import com.zy.asrs.entity.WrkMast; |
| | | import com.zy.asrs.service.BasDevpService; |
| | | import com.zy.asrs.service.WrkMastService; |
| | | import com.zy.common.model.StartupDto; |
| | | import com.zy.common.service.CommonService; |
| | |
| | | import com.zy.core.enums.SlaveType; |
| | | import com.zy.core.model.StationObjModel; |
| | | import com.zy.core.model.protocol.StationProtocol; |
| | | import com.zy.core.task.MainProcessLane; |
| | | import com.zy.core.task.MainProcessTaskSubmitter; |
| | | import com.zy.core.thread.StationThread; |
| | | import com.zy.core.utils.StationOperateProcessUtils; |
| | | import com.zy.core.utils.WmsOperateUtils; |
| | |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | @Service |
| | | public class StoreInTaskGenerationService { |
| | | private static final int APPLY_IN_TASK_TIMEOUT_SECONDS = 5; |
| | | |
| | | @Autowired |
| | | private BasDevpService basDevpService; |
| | | @Autowired |
| | | private WrkMastService wrkMastService; |
| | | @Autowired |
| | |
| | | private WmsOperateUtils wmsOperateUtils; |
| | | @Autowired |
| | | private CommonService commonService; |
| | | @Autowired |
| | | private MainProcessTaskSubmitter mainProcessTaskSubmitter; |
| | | |
| | | /** |
| | | * 保留当前按站点 lane 并发的能力,同时用一个简单计数避免并发生成把站点任务数顶穿上限。 |
| | | */ |
| | | private int inFlightGenerateCount = 0; |
| | | |
| | | public void generate(StoreInTaskPolicy policy) { |
| | | try { |
| | | if (!policy.isEnabled()) { |
| | | return; |
| | | } |
| | | |
| | | HashMap<String, String> systemConfigMap = getSystemConfigMap(); |
| | | if (systemConfigMap == null) { |
| | | return; |
| | | } |
| | | if (!hasAvailableStationTaskCapacity(systemConfigMap)) { |
| | | return; |
| | | } |
| | | |
| | | List<BasDevp> basDevps = basDevpService.list(new QueryWrapper<>()); |
| | | for (BasDevp basDevp : basDevps) { |
| | | List<StationObjModel> barcodeStations = policy.getBarcodeStations(basDevp); |
| | | for (StationObjModel stationObjModel : barcodeStations) { |
| | | generateByStation(policy, basDevp, stationObjModel, systemConfigMap); |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | | News.error("生成入库任务异常,policy={}", policy.getPolicyName(), e); |
| | | } |
| | | } |
| | | |
| | | public void generate(StoreInTaskPolicy policy, BasDevp basDevp, StationObjModel stationObjModel) { |
| | | try { |
| | |
| | | } |
| | | } |
| | | |
| | | public void submitGenerateStoreTask(StoreInTaskPolicy policy, |
| | | BasDevp basDevp, |
| | | StationObjModel stationObjModel, |
| | | long minIntervalMs, |
| | | Runnable task) { |
| | | submitGenerateStoreTask(policy, basDevp, stationObjModel, MainProcessLane.GENERATE_STORE, minIntervalMs, task); |
| | | } |
| | | |
| | | public void submitGenerateStoreTask(StoreInTaskPolicy policy, |
| | | BasDevp basDevp, |
| | | StationObjModel stationObjModel, |
| | | MainProcessLane lane, |
| | | long minIntervalMs, |
| | | Runnable task) { |
| | | Integer stationId = stationObjModel == null ? null : stationObjModel.getStationId(); |
| | | mainProcessTaskSubmitter.submitKeyedSerialTask( |
| | | lane, |
| | | stationId, |
| | | "generateStoreWrkFile", |
| | | minIntervalMs, |
| | | task |
| | | ); |
| | | } |
| | | |
| | | private void generateByStation(StoreInTaskPolicy policy, BasDevp basDevp, StationObjModel stationObjModel, |
| | | HashMap<String, String> systemConfigMap) { |
| | | StoreInTaskContext context = buildContext(basDevp, stationObjModel); |
| | | if (context == null) { |
| | | return; |
| | | } |
| | | if (!policy.matchCandidate(context)) { |
| | | return; |
| | | } |
| | | if (!policy.beforeApply(context)) { |
| | | return; |
| | | } |
| | | |