From cc5e47936fb2e3174a3a48102beba09894e7d98a Mon Sep 17 00:00:00 2001 From: Shawnsdaddy Date: Sat, 1 Feb 2025 14:11:10 -0800 Subject: [PATCH] code clean up --- arknights_mower/__init__.py | 2 +- arknights_mower/__main__.py | 2 +- arknights_mower/solvers/base_schedule.py | 232 +---------------------- arknights_mower/utils/datetime.py | 4 - ui/components.d.ts | 179 ++++++++--------- 5 files changed, 93 insertions(+), 326 deletions(-) diff --git a/arknights_mower/__init__.py b/arknights_mower/__init__.py index ce34486fc..a695b0397 100644 --- a/arknights_mower/__init__.py +++ b/arknights_mower/__init__.py @@ -2,7 +2,7 @@ import sys from pathlib import Path -__version__ = "2025.1.2" +__version__ = "2025.2.1" if getattr(sys, "frozen", False) and hasattr(sys, "_MEIPASS"): __rootdir__ = Path(sys._MEIPASS).joinpath("arknights_mower").resolve() diff --git a/arknights_mower/__main__.py b/arknights_mower/__main__.py index 0dbbbdcdf..154c88934 100644 --- a/arknights_mower/__main__.py +++ b/arknights_mower/__main__.py @@ -49,7 +49,7 @@ def initialize( ling_xi=config.plan.conf.ling_xi, workaholic=config.plan.conf.workaholic, free_blacklist=conf.free_blacklist, - ope_resting_priority=conf.ope_resting_priority, + ope_resting_priority=config.plan.conf.ope_resting_priority, resting_threshold=conf.resting_threshold, refresh_trading_config=config.plan.conf.refresh_trading, refresh_drained=config.plan.conf.refresh_drained, diff --git a/arknights_mower/solvers/base_schedule.py b/arknights_mower/solvers/base_schedule.py index 3fece1dee..e17aae732 100644 --- a/arknights_mower/solvers/base_schedule.py +++ b/arknights_mower/solvers/base_schedule.py @@ -28,7 +28,6 @@ from arknights_mower.utils.datetime import ( format_time, get_server_weekday, - pass_deadline, ) from arknights_mower.utils.device.device import Device from arknights_mower.utils.digit_reader import DigitReader @@ -43,10 +42,8 @@ from arknights_mower.utils.scheduler_task import ( SchedulerTask, TaskTypes, - add_release_dorm, check_dorm_ordering, find_next_task, - merge_release_dorm, plan_metadata, scheduling, try_add_release_dorm, @@ -386,234 +383,7 @@ def plan_fia(self): self.tasks.sort(key=lambda task: task.time) def plan_metadata(self): - if config.conf.flexible_shift_mode or pass_deadline(): - self.tasks = plan_metadata(self.op_data, self.tasks) - else: - planned_index = [] - # 移除当前 SHIFT_ON 重新刷新 - for t in self.tasks: - if "dorm" in t.meta_data: - planned_index.extend([int(w[4:]) for w in t.meta_data.split(",")]) - _time = datetime.max - min_resting_time = datetime.max - _plan = {} - _type = [] - # 第一个心情低的且小于3 则只休息半小时 - short_rest = False - self.total_agent = list( - v - for k, v in self.op_data.operators.items() - if v.is_high() and not v.room.startswith("dorm") and not v.is_resting() - ) - self.total_agent.sort( - key=lambda x: x.current_mood() - x.lower_limit, reverse=False - ) - if ( - next( - ( - a - for a in self.total_agent - if (a.name not in self.op_data.exhaust_agent) - and not a.workaholic - and a.current_mood() <= 3 - ), - None, - ) - is not None - ): - short_rest = True - if not short_rest: - for x in self.total_agent: - if ( - not x.workaholic - and not x.exhaust_require - and x.room not in ["factory", "train"] - ): - min_resting_time = min(min_resting_time, x.predict_exhaust()) - logger.debug(f"预测最低休息时间为:{min_resting_time}") - low_priority = [] - for idx, dorm in enumerate(self.op_data.dorm): - logger.debug(f"开始计算{dorm}") - # 如果已经plan了,则跳过 - if idx in planned_index or idx in low_priority: - continue - _name = dorm.name - if _name == "": - continue - # 如果是rest in full,则新增单独任务.. - if ( - _name in self.op_data.operators.keys() - and self.op_data.operators[_name].is_high() - and self.op_data.operators[_name].rest_in_full - ): - __plan = {} - __rest_agent = [] - __type = [] - if self.op_data.operators[dorm.name].group == "": - __rest_agent.append(dorm.name) - else: - __rest_agent.extend( - self.op_data.groups[self.op_data.operators[dorm.name].group] - ) - if dorm.time is not None: - __time = dorm.time - else: - __time = datetime.max - need_early = True - for x in __rest_agent: - # 如果小组内没有耗尽,则提前8分钟上班 - if self.op_data.operators[x].exhaust_require: - need_early = False - # 如果同小组也是rest_in_full则取最大休息时间 否则忽略 - if x in low_priority: - logger.debug("检测到回满组已经安排") - _plan = {} - _idx, __dorm = self.op_data.get_dorm_by_name(x) - if ( - x in self.op_data.operators.keys() - and self.op_data.operators[x].rest_in_full - ): - if __dorm is not None and __dorm.time is not None: - if ( - __dorm.time > __time - and self.op_data.operators[x].resting_priority - == "high" - ): - __time = __dorm.time - if _idx is not None: - __type.append("dorm" + str(_idx)) - planned_index.append(_idx) - logger.debug(f"计划干员为{x}") - __room = self.op_data.operators[x].room - if __room not in __plan.keys(): - __plan[__room] = ["Current"] * len( - self.op_data.plan[__room] - ) - __plan[__room][self.op_data.operators[x].index] = x - if __time < datetime.now(): - __time = datetime.now() - if __time != datetime.max: - if need_early: - __time -= timedelta(minutes=8) - logger.info("全组无耗尽,提前8分钟上班") - self.tasks.append( - SchedulerTask( - time=__time, - task_type=TaskTypes.SHIFT_ON, - task_plan=__plan, - meta_data=",".join(__type), - ) - ) - try_add_release_dorm(__plan, __time, self.op_data, self.tasks) - else: - self.op_data.reset_dorm_time() - self.error = True - # 如果非 rest in full, 则同组取时间最小值 - elif ( - _name in self.op_data.operators.keys() - and not self.op_data.operators[_name].is_high() - and self.op_data.config.free_room - ): - # 释放满心情其他干员 - add_release_dorm(self.tasks, self.op_data, _name) - elif self.op_data.operators[_name].is_high(): - if dorm.time is not None and dorm.time < _time: - logger.debug(f"更新任务时间{dorm.time}") - _time = dorm.time - __room = self.op_data.operators[_name].room - __rest_agent = [] - if self.op_data.operators[_name].group == "": - __rest_agent.append(_name) - else: - __rest_agent.extend( - self.op_data.groups[self.op_data.operators[_name].group] - ) - logger.debug(f"小组分组为{__rest_agent}") - # 如果小组有其他人是rest_in_full则跳过 - if next( - ( - d - for d in __rest_agent - if d in self.op_data.operators.keys() - and self.op_data.operators[d].rest_in_full - ), - None, - ): - continue - for x in __rest_agent: - if x in low_priority: - continue - __room = self.op_data.operators[x].room - if __room not in base_room_list: - continue - if __room not in _plan.keys(): - _plan[__room] = ["Current"] * len(self.op_data.plan[__room]) - _plan[__room][self.op_data.operators[x].index] = x - _dorm_idx, __dorm = self.op_data.get_dorm_by_name(x) - if __dorm is not None: - _type.append("dorm" + str(_dorm_idx)) - planned_index.append(_dorm_idx) - if ( - __dorm.time is not None - and __dorm.time < _time - and self.op_data.operators[x].resting_priority == "high" - ): - logger.debug(f"更新任务时间{dorm.time}") - _time = __dorm.time - - if x not in low_priority: - low_priority.append(x) - # 生成单个任务 - if len(_plan.items()) > 0: - if _time != datetime.max: - _time = min(_time, min_resting_time) - _time -= timedelta(minutes=8) - if _time < datetime.now(): - _time = datetime.now() - _time = ( - _time - if not short_rest - else (datetime.now() + timedelta(hours=0.5)) - ) - self.tasks.append( - SchedulerTask( - time=_time, - task_plan=_plan, - task_type=TaskTypes.SHIFT_ON, - meta_data=",".join(_type), - ) - ) - try_add_release_dorm(_plan, _time, self.op_data, self.tasks) - else: - logger.debug("检测到时间数据不存在") - self.op_data.reset_dorm_time() - self.error = True - # 最后再做不养闲人刷新 - if self.op_data.config.free_room: - - def should_keep(task): - if task.type != TaskTypes.RELEASE_DORM: - return True - elif len(task.plan) == 0: - return False - name = task.meta_data - free_room = list(task.plan.keys())[0] - free_op = task.plan[free_room] - if ( - self.op_data.operators[name].current_room != free_room - or free_op[self.op_data.operators[name].current_index] != "Free" - ): - logger.info(f"检测到{task.meta_data}不在对应位置,移除相关任务") - return False - i, d = self.op_data.get_dorm_by_name(task.meta_data) - if i is None: - logger.info(f"检测到{task.meta_data}不在宿舍,移除相关任务") - return False - return True - - self.tasks = [t for t in self.tasks if should_keep(t)] - merge_interval = config.conf.merge_interval - merge_release_dorm(self.tasks, merge_interval) + self.tasks = plan_metadata(self.op_data, self.tasks) def infra_main(self): """位于基建首页""" diff --git a/arknights_mower/utils/datetime.py b/arknights_mower/utils/datetime.py index c149a090c..9dcd9f721 100644 --- a/arknights_mower/utils/datetime.py +++ b/arknights_mower/utils/datetime.py @@ -23,10 +23,6 @@ def get_server_time(): return datetime.now(pytz.timezone("Asia/Dubai")) -def pass_deadline(): - return get_server_time() > datetime(2025, 1, 1, tzinfo=pytz.timezone("Asia/Dubai")) - - # newbing说用这个来定义休息时间省事 def format_time(seconds): if seconds < 0: # 权宜之计 配合刷生息演算 diff --git a/ui/components.d.ts b/ui/components.d.ts index b3fd726bf..4ebe79a81 100644 --- a/ui/components.d.ts +++ b/ui/components.d.ts @@ -7,94 +7,95 @@ export {} declare module 'vue' { export interface GlobalComponents { - Buffer: typeof import('./src/components/buffer.vue')['default'] - Bufferinfo: typeof import('./src/components/bufferinfo.vue')['default'] - Clue: typeof import('./src/components/Clue.vue')['default'] - DailyMission: typeof import('./src/components/DailyMission.vue')['default'] - Depotswitch: typeof import('./src/components/Depotswitch.vue')['default'] - DropDown: typeof import('./src/components/DropDown.vue')['default'] - Email: typeof import('./src/components/Email.vue')['default'] - Feedback: typeof import('./src/components/Feedback.vue')['default'] - HelpText: typeof import('./src/components/HelpText.vue')['default'] - LongTasks: typeof import('./src/components/LongTasks.vue')['default'] - MaaBasic: typeof import('./src/components/MaaBasic.vue')['default'] - MaaReward: typeof import('./src/components/MaaReward.vue')['default'] - MaaRogue: typeof import('./src/components/MaaRogue.vue')['default'] - MaaSss: typeof import('./src/components/MaaSss.vue')['default'] - MaaWeekly: typeof import('./src/components/MaaWeekly.vue')['default'] - MaaWeeklyNew: typeof import('./src/components/MaaWeeklyNew.vue')['default'] - NA: typeof import('naive-ui')['NA'] - NAlert: typeof import('naive-ui')['NAlert'] - NAutoComplete: typeof import('naive-ui')['NAutoComplete'] - NAvatar: typeof import('naive-ui')['NAvatar'] - NButton: typeof import('naive-ui')['NButton'] - NButtonGroup: typeof import('naive-ui')['NButtonGroup'] - NCard: typeof import('naive-ui')['NCard'] - NCheckbox: typeof import('naive-ui')['NCheckbox'] - NCode: typeof import('naive-ui')['NCode'] - NConfigProvider: typeof import('naive-ui')['NConfigProvider'] - NDataTable: typeof import('naive-ui')['NDataTable'] - NDatePicker: typeof import('naive-ui')['NDatePicker'] - NDialogProvider: typeof import('naive-ui')['NDialogProvider'] - NDivider: typeof import('naive-ui')['NDivider'] - NDropdown: typeof import('naive-ui')['NDropdown'] - NDynamicInput: typeof import('naive-ui')['NDynamicInput'] - NDynamicTags: typeof import('naive-ui')['NDynamicTags'] - NFlex: typeof import('naive-ui')['NFlex'] - NForm: typeof import('naive-ui')['NForm'] - NFormItem: typeof import('naive-ui')['NFormItem'] - NFormItemGi: typeof import('naive-ui')['NFormItemGi'] - NGi: typeof import('naive-ui')['NGi'] - NGlobalStyle: typeof import('naive-ui')['NGlobalStyle'] - NGrid: typeof import('naive-ui')['NGrid'] - NH1: typeof import('naive-ui')['NH1'] - NH2: typeof import('naive-ui')['NH2'] - NIcon: typeof import('naive-ui')['NIcon'] - NImage: typeof import('naive-ui')['NImage'] - NInput: typeof import('naive-ui')['NInput'] - NInputNumber: typeof import('naive-ui')['NInputNumber'] - NLayout: typeof import('naive-ui')['NLayout'] - NLayoutContent: typeof import('naive-ui')['NLayoutContent'] - NLayoutFooter: typeof import('naive-ui')['NLayoutFooter'] - NLayoutSider: typeof import('naive-ui')['NLayoutSider'] - NLoadingBarProvider: typeof import('naive-ui')['NLoadingBarProvider'] - NLog: typeof import('naive-ui')['NLog'] - NMenu: typeof import('naive-ui')['NMenu'] - NMessageProvider: typeof import('naive-ui')['NMessageProvider'] - NModal: typeof import('naive-ui')['NModal'] - NRadio: typeof import('naive-ui')['NRadio'] - NRadioButton: typeof import('naive-ui')['NRadioButton'] - NRadioGroup: typeof import('naive-ui')['NRadioGroup'] - NScrollbar: typeof import('naive-ui')['NScrollbar'] - NSelect: typeof import('naive-ui')['NSelect'] - NSkeleton: typeof import('naive-ui')['NSkeleton'] - NSlider: typeof import('naive-ui')['NSlider'] - NSpace: typeof import('naive-ui')['NSpace'] - NSwitch: typeof import('naive-ui')['NSwitch'] - NTab: typeof import('naive-ui')['NTab'] - NTable: typeof import('naive-ui')['NTable'] - NTabs: typeof import('naive-ui')['NTabs'] - NTag: typeof import('naive-ui')['NTag'] - NTd: typeof import('naive-ui')['NTd'] - NThing: typeof import('naive-ui')['NThing'] - NTimePicker: typeof import('naive-ui')['NTimePicker'] - NTooltip: typeof import('naive-ui')['NTooltip'] - NTr: typeof import('naive-ui')['NTr'] - NUpload: typeof import('naive-ui')['NUpload'] - NVirtualList: typeof import('naive-ui')['NVirtualList'] - NWatermark: typeof import('naive-ui')['NWatermark'] - PlanEditor: typeof import('./src/components/PlanEditor.vue')['default'] - ReclamationAlgorithm: typeof import('./src/components/ReclamationAlgorithm.vue')['default'] - Recruit: typeof import('./src/components/Recruit.vue')['default'] - RenameDialog: typeof import('./src/components/RenameDialog.vue')['default'] - RouterLink: typeof import('vue-router')['RouterLink'] - RouterView: typeof import('vue-router')['RouterView'] - SecretFront: typeof import('./src/components/SecretFront.vue')['default'] - SKLand: typeof import('./src/components/SKLand.vue')['default'] - SlickOperatorSelect: typeof import('./src/components/SlickOperatorSelect.vue')['default'] - TaskDialog: typeof import('./src/components/TaskDialog.vue')['default'] - TriggerDialog: typeof import('./src/components/TriggerDialog.vue')['default'] - TriggerEditor: typeof import('./src/components/TriggerEditor.vue')['default'] - TriggerString: typeof import('./src/components/TriggerString.vue')['default'] + Buffer: (typeof import('./src/components/buffer.vue'))['default'] + Bufferinfo: (typeof import('./src/components/bufferinfo.vue'))['default'] + Clue: (typeof import('./src/components/Clue.vue'))['default'] + DailyMission: (typeof import('./src/components/DailyMission.vue'))['default'] + Depotswitch: (typeof import('./src/components/Depotswitch.vue'))['default'] + DropDown: (typeof import('./src/components/DropDown.vue'))['default'] + Email: (typeof import('./src/components/Email.vue'))['default'] + Feedback: (typeof import('./src/components/Feedback.vue'))['default'] + HelpText: (typeof import('./src/components/HelpText.vue'))['default'] + LongTasks: (typeof import('./src/components/LongTasks.vue'))['default'] + MaaBasic: (typeof import('./src/components/MaaBasic.vue'))['default'] + MaaReward: (typeof import('./src/components/MaaReward.vue'))['default'] + MaaRogue: (typeof import('./src/components/MaaRogue.vue'))['default'] + MaaSss: (typeof import('./src/components/MaaSss.vue'))['default'] + MaaWeekly: (typeof import('./src/components/MaaWeekly.vue'))['default'] + MaaWeeklyNew: (typeof import('./src/components/MaaWeeklyNew.vue'))['default'] + NA: (typeof import('naive-ui'))['NA'] + NAlert: (typeof import('naive-ui'))['NAlert'] + NAutoComplete: (typeof import('naive-ui'))['NAutoComplete'] + NAvatar: (typeof import('naive-ui'))['NAvatar'] + NButton: (typeof import('naive-ui'))['NButton'] + NButtonGroup: (typeof import('naive-ui'))['NButtonGroup'] + NCard: (typeof import('naive-ui'))['NCard'] + NCheckbox: (typeof import('naive-ui'))['NCheckbox'] + NCode: (typeof import('naive-ui'))['NCode'] + NConfigProvider: (typeof import('naive-ui'))['NConfigProvider'] + NDataTable: (typeof import('naive-ui'))['NDataTable'] + NDatePicker: (typeof import('naive-ui'))['NDatePicker'] + NDialogProvider: (typeof import('naive-ui'))['NDialogProvider'] + NDivider: (typeof import('naive-ui'))['NDivider'] + NDropdown: (typeof import('naive-ui'))['NDropdown'] + NDynamicInput: (typeof import('naive-ui'))['NDynamicInput'] + NDynamicTags: (typeof import('naive-ui'))['NDynamicTags'] + NFlex: (typeof import('naive-ui'))['NFlex'] + NForm: (typeof import('naive-ui'))['NForm'] + NFormItem: (typeof import('naive-ui'))['NFormItem'] + NFormItemGi: (typeof import('naive-ui'))['NFormItemGi'] + NGi: (typeof import('naive-ui'))['NGi'] + NGlobalStyle: (typeof import('naive-ui'))['NGlobalStyle'] + NGrid: (typeof import('naive-ui'))['NGrid'] + NH1: (typeof import('naive-ui'))['NH1'] + NH2: (typeof import('naive-ui'))['NH2'] + NIcon: (typeof import('naive-ui'))['NIcon'] + NImage: (typeof import('naive-ui'))['NImage'] + NInput: (typeof import('naive-ui'))['NInput'] + NInputNumber: (typeof import('naive-ui'))['NInputNumber'] + NLayout: (typeof import('naive-ui'))['NLayout'] + NLayoutContent: (typeof import('naive-ui'))['NLayoutContent'] + NLayoutFooter: (typeof import('naive-ui'))['NLayoutFooter'] + NLayoutSider: (typeof import('naive-ui'))['NLayoutSider'] + NLoadingBarProvider: (typeof import('naive-ui'))['NLoadingBarProvider'] + NLog: (typeof import('naive-ui'))['NLog'] + NMenu: (typeof import('naive-ui'))['NMenu'] + NMessageProvider: (typeof import('naive-ui'))['NMessageProvider'] + NModal: (typeof import('naive-ui'))['NModal'] + NRadio: (typeof import('naive-ui'))['NRadio'] + NRadioButton: (typeof import('naive-ui'))['NRadioButton'] + NRadioGroup: (typeof import('naive-ui'))['NRadioGroup'] + NScrollbar: (typeof import('naive-ui'))['NScrollbar'] + NSelect: (typeof import('naive-ui'))['NSelect'] + NSkeleton: (typeof import('naive-ui'))['NSkeleton'] + NSlider: (typeof import('naive-ui'))['NSlider'] + NSpace: (typeof import('naive-ui'))['NSpace'] + NSwitch: (typeof import('naive-ui'))['NSwitch'] + NTab: (typeof import('naive-ui'))['NTab'] + NTable: (typeof import('naive-ui'))['NTable'] + NTabs: (typeof import('naive-ui'))['NTabs'] + NTag: (typeof import('naive-ui'))['NTag'] + NTd: (typeof import('naive-ui'))['NTd'] + NThing: (typeof import('naive-ui'))['NThing'] + NTimePicker: (typeof import('naive-ui'))['NTimePicker'] + NTooltip: (typeof import('naive-ui'))['NTooltip'] + NTr: (typeof import('naive-ui'))['NTr'] + NUpload: (typeof import('naive-ui'))['NUpload'] + NVirtualList: (typeof import('naive-ui'))['NVirtualList'] + NWatermark: (typeof import('naive-ui'))['NWatermark'] + PlanEditor: (typeof import('./src/components/PlanEditor.vue'))['default'] + ReclamationAlgorithm: (typeof import('./src/components/ReclamationAlgorithm.vue'))['default'] + Recruit: (typeof import('./src/components/Recruit.vue'))['default'] + RenameDialog: (typeof import('./src/components/RenameDialog.vue'))['default'] + RouterLink: (typeof import('vue-router'))['RouterLink'] + RouterView: (typeof import('vue-router'))['RouterView'] + SecretFront: (typeof import('./src/components/SecretFront.vue'))['default'] + SKLand: (typeof import('./src/components/SKLand.vue'))['default'] + SlickDormSelect: (typeof import('./src/components/SlickDormSelect.vue'))['default'] + SlickOperatorSelect: (typeof import('./src/components/SlickOperatorSelect.vue'))['default'] + TaskDialog: (typeof import('./src/components/TaskDialog.vue'))['default'] + TriggerDialog: (typeof import('./src/components/TriggerDialog.vue'))['default'] + TriggerEditor: (typeof import('./src/components/TriggerEditor.vue'))['default'] + TriggerString: (typeof import('./src/components/TriggerString.vue'))['default'] } }