admin_event.py 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561
  1. import time
  2. from tool.type_ import *
  3. from sql.db import DB
  4. from sql.user import find_user_by_name
  5. from core.user import User
  6. from core.garbage import GarbageBag
  7. from event import TkEventBase, TkThreading
  8. import admin
  9. import admin_program
  10. class AdminEventBase(TkEventBase):
  11. def __init__(self, station):
  12. super(AdminEventBase, self).__init__()
  13. self.station: admin.AdminStationBase = station
  14. self._db: DB = station.get_db()
  15. def get_title(self) -> str:
  16. return "AdminEvent"
  17. class LoginEvent(AdminEventBase):
  18. def __init__(self, station):
  19. super().__init__(station)
  20. self.thread: Optional[TkThreading] = None
  21. def login(self, name, passwd):
  22. return find_user_by_name(name, passwd, self._db)
  23. def start(self, name, passwd):
  24. self.thread = TkThreading(self.login, name, passwd)
  25. return self
  26. def is_end(self) -> bool:
  27. return not self.thread.is_alive()
  28. def done_after_event(self):
  29. self.station.login(self.thread.wait_event())
  30. class TestProgressEvent(AdminEventBase):
  31. @staticmethod
  32. def func(sleep_time):
  33. time.sleep(sleep_time)
  34. def __init__(self, station):
  35. super(TestProgressEvent, self).__init__(station)
  36. self.thread = TkThreading(self.func, 5)
  37. class CreateUserEvent(AdminEventBase):
  38. def func(self, name, passwd, phone, is_manager):
  39. return self.station.create_user(name, passwd, phone, is_manager)
  40. def __init__(self, station):
  41. super(CreateUserEvent, self).__init__(station)
  42. self._name = None
  43. def start(self, name, passwd, phone, is_manager):
  44. self._name = name
  45. self.thread = TkThreading(self.func, name, passwd, phone, is_manager)
  46. return self
  47. def done_after_event(self):
  48. res: Optional[User] = self.thread.wait_event()
  49. if res is None:
  50. self.station.show_warning("创建用户错误", f"无法创建用户 user: {self._name}")
  51. else:
  52. name = res.get_name()
  53. self.station.show_msg("创建用户成功", f"成功创建{name}个新用户")
  54. class CreateGarbageEvent(AdminEventBase):
  55. def func(self, path, count):
  56. return self.station.create_garbage(path, count)
  57. def __init__(self, station):
  58. super(CreateGarbageEvent, self).__init__(station)
  59. self._name = None
  60. def start(self, path, count):
  61. self.thread = TkThreading(self.func, path, count)
  62. return self
  63. def done_after_event(self):
  64. res: list[tuple[str, Optional[GarbageBag]]] = self.thread.wait_event()
  65. self.station.show_msg("创建垃圾袋", f"成功创建{len(res)}个垃圾袋")
  66. class ExportGarbageByIDEvent(AdminEventBase):
  67. def func(self, path, gid):
  68. return self.station.export_garbage_by_gid(path, gid)
  69. def __init__(self, station):
  70. super(ExportGarbageByIDEvent, self).__init__(station)
  71. self._name = None
  72. def start(self, path, gid):
  73. self.thread = TkThreading(self.func, path, gid)
  74. return self
  75. def done_after_event(self):
  76. res: tuple[str, Optional[GarbageBag]] = self.thread.wait_event()
  77. if res[1] is None:
  78. self.station.show_warning("导出错误", f"无法导出垃圾袋二维码")
  79. else:
  80. self.station.show_msg("导出成功", f"成功导出垃圾袋二维码")
  81. class ExportGarbageAdvancedEvent(AdminEventBase):
  82. def func(self, path, where):
  83. return self.station.export_garbage(path, where)
  84. def __init__(self, station):
  85. super(ExportGarbageAdvancedEvent, self).__init__(station)
  86. self._name = None
  87. def start(self, path, where):
  88. self.thread = TkThreading(self.func, path, where)
  89. return self
  90. def done_after_event(self):
  91. res: list[tuple[str]] = self.thread.wait_event()
  92. self.station.show_msg("导出完成", f"导出{len(res)}个垃圾袋二维码")
  93. class ExportUserByIDEvent(AdminEventBase):
  94. def func(self, path, uid):
  95. return self.station.export_user_by_uid(path, uid)
  96. def __init__(self, station):
  97. super(ExportUserByIDEvent, self).__init__(station)
  98. self._name = None
  99. def start(self, path, uid):
  100. self.thread = TkThreading(self.func, path, uid)
  101. return self
  102. def done_after_event(self):
  103. res: tuple[str, Optional[GarbageBag]] = self.thread.wait_event()
  104. if res[1] is None:
  105. self.station.show_warning("导出错误", f"无法导出用户二维码")
  106. else:
  107. self.station.show_msg("导出成功", f"成功导出用户二维码")
  108. class ExportUserAdvancedEvent(AdminEventBase):
  109. def func(self, path, where):
  110. return self.station.export_user(path, where)
  111. def __init__(self, station):
  112. super(ExportUserAdvancedEvent, self).__init__(station)
  113. self._name = None
  114. def start(self, path, where):
  115. self.thread = TkThreading(self.func, path, where)
  116. return self
  117. def done_after_event(self):
  118. res: list[tuple[str]] = self.thread.wait_event()
  119. self.station.show_msg("导出完成", f"导出{len(res)}个用户二维码")
  120. class CreateUserFromCSVEvent(AdminEventBase):
  121. def func(self, path):
  122. return self.station.create_user_from_csv(path)
  123. def __init__(self, station):
  124. super(CreateUserFromCSVEvent, self).__init__(station)
  125. self._name = None
  126. def start(self, path):
  127. self.thread = TkThreading(self.func, path)
  128. return self
  129. def done_after_event(self):
  130. res: list[User] = self.thread.wait_event()
  131. self.station.show_msg("创建完成", f"从CSV创建{len(res)}个新用户")
  132. class CreateAutoUserFromCSVEvent(AdminEventBase):
  133. def func(self, path):
  134. return self.station.create_auto_user_from_csv(path)
  135. def __init__(self, station):
  136. super(CreateAutoUserFromCSVEvent, self).__init__(station)
  137. self._name = None
  138. def start(self, path):
  139. self.thread = TkThreading(self.func, path)
  140. return self
  141. def done_after_event(self):
  142. res: list[User] = self.thread.wait_event()
  143. self.station.show_msg("创建完成", f"从CSV创建{len(res)}个新用户")
  144. class DelUserEvent(AdminEventBase):
  145. def func(self, uid):
  146. return self.station.del_user(uid)
  147. def __init__(self, station):
  148. super(DelUserEvent, self).__init__(station)
  149. self._name = None
  150. def start(self, uid):
  151. self.thread = TkThreading(self.func, uid)
  152. return self
  153. def done_after_event(self):
  154. res: bool = self.thread.wait_event()
  155. if res:
  156. self.station.show_msg("删除成功", f"删除用户成功")
  157. else:
  158. self.station.show_warning("删除失败", f"删除用户失败")
  159. class DelUserFromWhereScanEvent(AdminEventBase):
  160. def func(self, where):
  161. return self.station.del_user_from_where_scan(where)
  162. def __init__(self, station):
  163. super(DelUserFromWhereScanEvent, self).__init__(station)
  164. def start(self, where):
  165. self.thread = TkThreading(self.func, where)
  166. return self
  167. def done_after_event(self):
  168. res: int = self.thread.wait_event()
  169. if res != -1:
  170. self.station.show_msg("扫描结果", f"符合删除要素的用户个数: {res}")
  171. else:
  172. self.station.show_warning("扫描结果", f"获取扫描结果失败")
  173. class DelUserFromWhereEvent(AdminEventBase):
  174. def func(self, where):
  175. return self.station.del_user_from_where(where)
  176. def __init__(self, station):
  177. super(DelUserFromWhereEvent, self).__init__(station)
  178. def start(self, where):
  179. self.thread = TkThreading(self.func, where)
  180. return self
  181. def done_after_event(self):
  182. res: int = self.thread.wait_event()
  183. if res != -1:
  184. self.station.show_msg("扫描结果", f"成功删除{res}个用户")
  185. else:
  186. self.station.show_warning("扫描结果", f"获取扫描结果失败")
  187. class DelGarbageEvent(AdminEventBase):
  188. def func(self, gid, where):
  189. if where == 0:
  190. return self.station.del_garbage(gid)
  191. elif where == 1:
  192. return self.station.del_garbage_not_use(gid)
  193. elif where == 2:
  194. return self.station.del_garbage_wait_check(gid)
  195. elif where == 3:
  196. return self.station.del_garbage_has_check(gid)
  197. return False
  198. def __init__(self, station):
  199. super(DelGarbageEvent, self).__init__(station)
  200. def start(self, gid, where):
  201. self.thread = TkThreading(self.func, gid, where)
  202. return self
  203. def done_after_event(self):
  204. res: bool = self.thread.wait_event()
  205. if res:
  206. self.station.show_msg("删除成功", f"成功删除垃圾袋")
  207. else:
  208. self.station.show_warning("删除失败", f"删除垃圾袋失败")
  209. class DelGarbageWhereEvent(AdminEventBase):
  210. def func(self, where, where_sql):
  211. if where == 1:
  212. return self.station.del_garbage_where_not_use(where_sql)
  213. elif where == 2:
  214. return self.station.del_garbage_where_wait_check(where_sql)
  215. elif where == 3:
  216. return self.station.del_garbage_where_has_check(where_sql)
  217. return -1
  218. def __init__(self, station):
  219. super(DelGarbageWhereEvent, self).__init__(station)
  220. def start(self, where, where_sql):
  221. self.thread = TkThreading(self.func, where, where_sql)
  222. return self
  223. def done_after_event(self):
  224. res: int = self.thread.wait_event()
  225. if res != -1:
  226. self.station.show_msg("删除成功", f"成功删除{res}个垃圾袋")
  227. else:
  228. self.station.show_warning("删除失败", f"垃圾袋删除失败")
  229. class DelGarbageWhereScanEvent(AdminEventBase):
  230. def func(self, where, where_sql):
  231. if where == 1:
  232. return self.station.del_garbage_where_scan_not_use(where_sql)
  233. elif where == 2:
  234. return self.station.del_garbage_where_scan_wait_check(where_sql)
  235. elif where == 3:
  236. return self.station.del_garbage_where_scan_has_check(where_sql)
  237. return -1
  238. def __init__(self, station):
  239. super(DelGarbageWhereScanEvent, self).__init__(station)
  240. def start(self, where, where_sql):
  241. self.thread = TkThreading(self.func, where, where_sql)
  242. return self
  243. def done_after_event(self):
  244. res: int = self.thread.wait_event()
  245. if res != -1:
  246. self.station.show_msg("扫描结果", f"符合删除要素的垃圾袋个数: {res}")
  247. else:
  248. self.station.show_warning("扫描结果", f"获取扫描结果失败")
  249. class DelAllGarbageScanEvent(AdminEventBase):
  250. def func(self):
  251. return self.station.del_all_garbage_scan()
  252. def __init__(self, station):
  253. super(DelAllGarbageScanEvent, self).__init__(station)
  254. self.thread = TkThreading(self.func)
  255. def done_after_event(self):
  256. res: int = self.thread.wait_event()
  257. if res != -1:
  258. self.station.show_msg("扫描结果", f"全部垃圾袋个数: {res}")
  259. else:
  260. self.station.show_warning("扫描结果", f"获取扫描结果失败")
  261. class DelAllGarbageEvent(AdminEventBase):
  262. def func(self):
  263. return self.station.del_all_garbage()
  264. def __init__(self, station):
  265. super(DelAllGarbageEvent, self).__init__(station)
  266. self.thread = TkThreading(self.func)
  267. def done_after_event(self):
  268. res: int = self.thread.wait_event()
  269. if res != -1:
  270. self.station.show_msg("删除成功", f"成功删除所用[共计{res}个]垃圾袋")
  271. else:
  272. self.station.show_warning("删除失败", f"删除所有垃圾袋失败")
  273. class SearchUserEvent(AdminEventBase):
  274. def func(self, columns, uid, name, phone):
  275. return self.station.search_user(columns, uid, name, phone)
  276. def __init__(self, station):
  277. super(SearchUserEvent, self).__init__(station)
  278. self.program: Optional[admin_program.SearchUserProgram] = None
  279. def start(self, columns, uid, name, phone, program):
  280. self.thread = TkThreading(self.func, columns, uid, name, phone)
  281. self.program = program
  282. return self
  283. def done_after_event(self):
  284. res: list[list] = self.thread.wait_event()
  285. if res is None or self.program is None:
  286. self.station.show_warning("搜索失败", f"搜索用户失败")
  287. return
  288. for i in self.program.view.get_children():
  289. self.program.view.delete(i)
  290. for i in res:
  291. self.program.view.insert('', 'end', values=i)
  292. class SearchUserAdvancedEvent(AdminEventBase):
  293. def func(self, columns, sql):
  294. return self.station.search_user_advanced(columns, sql)
  295. def __init__(self, station):
  296. super(SearchUserAdvancedEvent, self).__init__(station)
  297. self.program: Optional[admin_program.SearchUserAdvancedProgram] = None
  298. def start(self, columns, sql, program):
  299. self.thread = TkThreading(self.func, columns, sql)
  300. self.program = program
  301. return self
  302. def done_after_event(self):
  303. res: list[list] = self.thread.wait_event()
  304. if res is None or self.program is None:
  305. self.station.show_warning("高级搜索失败", f"高级搜索用户失败")
  306. return
  307. for i in self.program.view.get_children():
  308. self.program.view.delete(i)
  309. for i in res:
  310. self.program.view.insert('', 'end', values=i)
  311. class SearchGarbageEvent(AdminEventBase):
  312. def func(self, columns, key_values: dict):
  313. return self.station.search_garbage(columns, key_values)
  314. def __init__(self, station):
  315. super(SearchGarbageEvent, self).__init__(station)
  316. self.program: Optional[admin_program.SearchUserProgram] = None
  317. def start(self, columns, key_values: dict, program):
  318. self.thread = TkThreading(self.func, columns, key_values)
  319. self.program = program
  320. return self
  321. def done_after_event(self):
  322. res: list[list] = self.thread.wait_event()
  323. if res is None or self.program is None:
  324. self.station.show_warning("搜索失败", f"搜索垃圾袋失败")
  325. return
  326. for i in self.program.view.get_children():
  327. self.program.view.delete(i)
  328. for i in res:
  329. self.program.view.insert('', 'end', values=i)
  330. class SearchGarbageAdvancedEvent(AdminEventBase):
  331. def func(self, columns, sql):
  332. return self.station.search_garbage_advanced(columns, sql)
  333. def __init__(self, station):
  334. super(SearchGarbageAdvancedEvent, self).__init__(station)
  335. self.program: Optional[admin_program.SearchGarbageAdvancedProgram] = None
  336. def start(self, columns, sql, program):
  337. self.thread = TkThreading(self.func, columns, sql)
  338. self.program = program
  339. return self
  340. def done_after_event(self):
  341. res: list[list] = self.thread.wait_event()
  342. if res is None or self.program is None:
  343. self.station.show_warning("高级搜索失败", f"高级搜索垃圾袋失败")
  344. return
  345. for i in self.program.view.get_children():
  346. self.program.view.delete(i)
  347. for i in res:
  348. self.program.view.insert('', 'end', values=i)
  349. class SearchAdvancedEvent(AdminEventBase):
  350. def func(self, columns, sql):
  351. return self.station.search_advanced(columns, sql)
  352. def __init__(self, station):
  353. super(SearchAdvancedEvent, self).__init__(station)
  354. self.program: Optional[admin_program.SearchAdvancedProgram] = None
  355. def start(self, columns, sql, program):
  356. self.thread = TkThreading(self.func, columns, sql)
  357. self.program = program
  358. return self
  359. def done_after_event(self):
  360. res: list[list] = self.thread.wait_event()
  361. if res is None or self.program is None:
  362. self.station.show_warning("高级搜索失败", f"高级搜索失败")
  363. return
  364. for i in self.program.view.get_children():
  365. self.program.view.delete(i)
  366. for i in res:
  367. self.program.view.insert('', 'end', values=i)
  368. class UpdateUserScoreEvent(AdminEventBase):
  369. def func(self, score, where):
  370. return self.station.update_user_score(score, where)
  371. def __init__(self, station):
  372. super(UpdateUserScoreEvent, self).__init__(station)
  373. def start(self, score, where):
  374. self.thread = TkThreading(self.func, score, where)
  375. return self
  376. def done_after_event(self):
  377. res: int = self.thread.wait_event()
  378. if res == -1:
  379. self.station.show_warning("更新失败", f"更新用户-积分失败")
  380. else:
  381. self.station.show_msg("更新成功", f"成功更新{res}个用户-积分")
  382. class UpdateUserReputationEvent(AdminEventBase):
  383. def func(self, reputation, where):
  384. return self.station.update_user_reputation(reputation, where)
  385. def __init__(self, station):
  386. super(UpdateUserReputationEvent, self).__init__(station)
  387. def start(self, reputation, where):
  388. self.thread = TkThreading(self.func, reputation, where)
  389. return self
  390. def done_after_event(self):
  391. res: int = self.thread.wait_event()
  392. if res == -1:
  393. self.station.show_warning("更新失败", f"更新用户-垃圾分类信用失败")
  394. else:
  395. self.station.show_msg("更新成功", f"成功更新{res}个用户-垃圾分类信用")
  396. class UpdateGarbageTypeEvent(AdminEventBase):
  397. def func(self, type_, where):
  398. return self.station.update_garbage_type(type_, where)
  399. def __init__(self, station):
  400. super(UpdateGarbageTypeEvent, self).__init__(station)
  401. def start(self, type_, where):
  402. self.thread = TkThreading(self.func, type_, where)
  403. return self
  404. def done_after_event(self):
  405. res: int = self.thread.wait_event()
  406. if res == -1:
  407. self.station.show_warning("更新失败", f"更新垃圾袋-垃圾类型失败")
  408. else:
  409. self.station.show_msg("更新成功", f"成功更新{res}个垃圾袋-垃圾类型")
  410. class UpdateGarbageCheckEvent(AdminEventBase):
  411. def func(self, check, where):
  412. return self.station.update_garbage_check(check, where)
  413. def __init__(self, station):
  414. super(UpdateGarbageCheckEvent, self).__init__(station)
  415. def start(self, check, where):
  416. self.thread = TkThreading(self.func, check, where)
  417. return self
  418. def done_after_event(self):
  419. res: int = self.thread.wait_event()
  420. if res == -1:
  421. self.station.show_warning("更新失败", f"更新垃圾袋-检测结果失败")
  422. else:
  423. self.station.show_msg("更新成功", f"成功更新{res}个垃圾袋-检测结果")