riskManagement_uitl.py 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  1. from models import *
  2. from utils import *
  3. from sqlalchemy import and_, or_
  4. from datetime import datetime, timedelta
  5. from dateutil.relativedelta import relativedelta
  6. def area_code_get_ancestors_names(db,area_info, ancestors_name=''):
  7. # print(area_info)
  8. if area_info is None:
  9. # print(ancestors_name)
  10. return ancestors_name
  11. else:
  12. ancestors_name = area_info.area_name + ancestors_name
  13. return area_code_get_ancestors_names(db,area_code_get_area_info(db,area_info.parent_code), ancestors_name)
  14. def area_code_get_area_info(db,area_code):
  15. # 机构id获取机构信息
  16. query = db.query(GovdataArea)
  17. query = query.filter(GovdataArea.status == '1')
  18. query = query.filter(GovdataArea.area_code == area_code)
  19. return query.first()
  20. def get_area_num(db,rang):
  21. query = db.query(GovdataArea)
  22. if rang=='0':
  23. return 1
  24. elif rang=='1':
  25. query = query.filter(and_(GovdataArea.area_code.like('%000000'),GovdataArea.area_code.notlike('%00000000')))
  26. return query.count()
  27. elif rang=='2':
  28. query = query.filter(and_(GovdataArea.area_code.like('%000'),GovdataArea.area_code.notlike('%000000')))
  29. return query.count()
  30. elif rang=='3':
  31. query = query.filter(GovdataArea.area_code.notlike('%000'))
  32. return query.count()
  33. else:
  34. return 0
  35. def get_area_code_list(db,rang):
  36. query = db.query(GovdataArea)
  37. if rang=='0':
  38. return ['440900000000']
  39. elif rang=='1':
  40. query = query.filter(and_(GovdataArea.area_code.like('%000000'),GovdataArea.area_code.notlike('%00000000')))
  41. return list({i.area_code for i in query.all()})
  42. elif rang=='2':
  43. query = query.filter(and_(GovdataArea.area_code.like('%000'),GovdataArea.area_code.notlike('%000000')))
  44. return list({i.area_code for i in query.all()})
  45. elif rang=='3':
  46. query = query.filter(GovdataArea.area_code.notlike('%000'))
  47. return list({i.area_code for i in query.all()})
  48. else:
  49. return []
  50. def get_area_code_exclude_list(db,rang,list_1):
  51. query = db.query(GovdataArea)
  52. if rang=='0' and '440900000000' not in list_1:
  53. return ['440900000000']
  54. elif rang=='1':
  55. query = query.filter(and_(GovdataArea.area_code.like('%000000'),GovdataArea.area_code.notlike('%00000000'),~GovdataArea.area_code.in_(list_1)))
  56. return list({i.area_code for i in query.all()})
  57. elif rang=='2':
  58. query = query.filter(and_(GovdataArea.area_code.like('%000'),GovdataArea.area_code.notlike('%000000'),~GovdataArea.area_code.in_(list_1)))
  59. return list({i.area_code for i in query.all()})
  60. elif rang=='3':
  61. query = query.filter(GovdataArea.area_code.notlike('%000'),~GovdataArea.area_code.in_(list_1))
  62. return list({i.area_code for i in query.all()})
  63. else:
  64. return []
  65. def area_code_get_task_range(area_code):
  66. if '00000000'==area_code[4:]:
  67. return '0'
  68. elif '00000000'!=area_code[4:] and '000000'==area_code[6:] :
  69. return '1'
  70. elif '000000'!=area_code[6:] and '000'==area_code[9:] :
  71. return '2'
  72. elif '000'!=area_code[9:]:
  73. return '3'
  74. else:
  75. return '-1'
  76. def area_code_rang_get_area_children_list(db,rang,area_code,complete_area_code_list):
  77. if int(area_code_get_task_range(area_code))>int(rang): #如果当前区划层级低于任务所属层级,返回空列表
  78. return []
  79. root_area = db.query(GovdataArea).filter_by(area_code=area_code).first()
  80. if not root_area:
  81. return [] # 如果没有找到区划,返回空列表
  82. # 然后,根据层级递归查找所有子区划
  83. area_codes = []
  84. def recursive_search(current_area):
  85. if area_code_get_task_range(current_area.area_code) == rang:
  86. if current_area.area_code not in complete_area_code_list:
  87. area_codes.append(current_area.area_code)
  88. else:
  89. for child in db.query(GovdataArea).filter_by(parent_code=current_area.area_code).all():
  90. recursive_search(child)
  91. recursive_search(root_area) # 从根区划开始递归搜索
  92. return area_codes
  93. def get_task_date_list(cycle,start_date,end_date,corn_query):
  94. # 生成日期列表
  95. date_list = []
  96. if cycle=='4': #仅一次,返回当天
  97. date_list.append(datetime.today())
  98. return date_list
  99. elif cycle=='3': #每天
  100. current_date = start_date
  101. while current_date <= end_date:
  102. # 将日期添加到列表中
  103. date_list.append(current_date)
  104. # 增加一天
  105. current_date += timedelta(days=1)
  106. return date_list
  107. elif cycle=='2': #每周
  108. days_ahead = (7+int(corn_query) - start_date.weekday()) % 7
  109. current_date = start_date + timedelta(days=days_ahead)
  110. while current_date <= end_date:
  111. # 将日期添加到列表中
  112. date_list.append(current_date)
  113. # 增加七天
  114. current_date += timedelta(days=7)
  115. return date_list
  116. elif cycle=='1': #每月
  117. if '-' in corn_query:
  118. corn_query = corn_query.split("-")[-1]
  119. days_ahead = datetime.strptime(start_date.strftime("%Y-%m-")+corn_query, "%Y-%m-%d")
  120. if days_ahead>start_date:
  121. current_date = days_ahead
  122. else:
  123. current_date = days_ahead+relativedelta(months=1)
  124. while current_date <= end_date:
  125. # 将日期添加到列表中
  126. date_list.append(current_date)
  127. # 增加七天
  128. current_date += relativedelta(months=1)
  129. return date_list
  130. elif cycle=='0': #每月
  131. if '-' in corn_query:
  132. y,m,d = corn_query.split("-")
  133. else:
  134. d,m = corn_query.split()
  135. days_ahead = datetime.strptime(start_date.strftime("%Y-")+m+'-'+d, "%Y-%m-%d")
  136. if days_ahead>start_date:
  137. current_date = days_ahead
  138. else:
  139. current_date = days_ahead+relativedelta(years=1)
  140. while current_date <= end_date:
  141. # 将日期添加到列表中
  142. date_list.append(current_date)
  143. # 增加七天
  144. current_date += relativedelta(years=1)
  145. return date_list
  146. def rang_get_user_list(db,rang):
  147. area_list = get_area_code_list(db, rang)
  148. user_list = db.query(RiskManagementInspectionUser).filter(RiskManagementInspectionUser.del_flag=='0').filter(RiskManagementInspectionUser.area_code.in_(area_list)).all()
  149. return user_list
  150. def create_children_task(db,task_info,corn_query):
  151. cycle = task_info.inspection_cycle
  152. task_range = task_info.inspection_range
  153. for t in get_task_date_list(cycle,task_info.start_time,task_info.end_time,corn_query):
  154. new_children_task = RiskManagementInspectionTaskChildrenTask(
  155. id = new_guid(),
  156. task_id= task_info.id,
  157. task_number= task_info.task_number,
  158. type = task_info.inspection_business,
  159. tsak_time = t,
  160. cycle=cycle,
  161. task_range = task_range,
  162. task_num=get_area_num(db,task_range),
  163. create_by=task_info.create_by
  164. )
  165. db.add(new_children_task)
  166. db.commit()
  167. def create_risk_children_task(db,task_info,corn_query):
  168. cycle = task_info.task_cycle
  169. task_range = task_info.task_range
  170. for t in get_task_date_list(cycle,task_info.start_time,task_info.end_time,corn_query):
  171. new_children_task = RiskManagementRiskTaskChildrenTask(
  172. id = new_guid(),
  173. task_id= task_info.id,
  174. task_number= task_info.task_number,
  175. type = task_info.risk_type,
  176. tsak_time = t,
  177. cycle=cycle,
  178. task_range = task_range,
  179. task_num=get_area_num(db,task_range),
  180. create_by=task_info.create_by
  181. )
  182. db.add(new_children_task)
  183. db.commit()
  184. def create_rescue_resources_children_task(db,task_info,corn_query):
  185. cycle = task_info.task_cycle
  186. task_range = task_info.task_range
  187. for t in get_task_date_list(cycle,task_info.start_time,task_info.end_time,corn_query):
  188. new_children_task = RiskManagementRescueResourcesTaskChildrenTask(
  189. id = new_guid(),
  190. task_id= task_info.id,
  191. task_number= task_info.task_number,
  192. type = task_info.type,
  193. tsak_time = t,
  194. cycle=cycle,
  195. task_range = task_range,
  196. task_num=get_area_num(db,task_range),
  197. create_by=task_info.create_by
  198. )
  199. db.add(new_children_task)
  200. db.commit()
  201. def inspection_task_id_get_inspection_task_info(db,id):
  202. query = db.query(RiskManagementInspectionTask)
  203. query = query.filter(RiskManagementInspectionTask.del_flag != '2')
  204. query = query.filter(RiskManagementInspectionTask.id == id)
  205. return query.first()
  206. def inspection_task_children_task_id_get_inspection_task_children_task_info(db,id):
  207. query = db.query(RiskManagementInspectionTaskChildrenTask)
  208. query = query.filter(RiskManagementInspectionTaskChildrenTask.del_flag != '2')
  209. query = query.filter(RiskManagementInspectionTaskChildrenTask.id == id)
  210. return query.first()
  211. def inspection_task_children_task_id_get_inspection_task_children_task_log_info(db,children_task_id):
  212. query = db.query(RiskManagementInspectionTaskChildrenTaskLog)
  213. query = query.filter(RiskManagementInspectionTaskChildrenTaskLog.del_flag != '2')
  214. query = query.filter(RiskManagementInspectionTaskChildrenTaskLog.children_task_id == children_task_id)
  215. return query.all()
  216. def risk_task_id_get_risk_task_info(db,id):
  217. query = db.query(RiskManagementRiskTask)
  218. query = query.filter(RiskManagementRiskTask.del_flag != '2')
  219. query = query.filter(RiskManagementRiskTask.id == id)
  220. return query.first()
  221. def risk_task_children_task_id_get_risk_task_children_task_info(db,id):
  222. query = db.query(RiskManagementRiskTaskChildrenTask)
  223. query = query.filter(RiskManagementRiskTaskChildrenTask.del_flag != '2')
  224. query = query.filter(RiskManagementRiskTaskChildrenTask.id == id)
  225. return query.first()
  226. def risk_task_children_task_id_get_risk_task_children_task_log_info(db,children_task_id):
  227. query = db.query(RiskManagementRiskTaskChildrenTaskLog)
  228. query = query.filter(RiskManagementRiskTaskChildrenTaskLog.del_flag != '2')
  229. query = query.filter(RiskManagementRiskTaskChildrenTaskLog.children_task_id == children_task_id)
  230. return query.all()
  231. def resource_task_id_get_resource_task_info(db,id):
  232. query = db.query(RiskManagementRescueResourcesTask)
  233. query = query.filter(RiskManagementRescueResourcesTask.del_flag != '2')
  234. query = query.filter(RiskManagementRescueResourcesTask.id == id)
  235. return query.first()
  236. def resource_task_children_task_id_get_resource_task_children_task_info(db,id):
  237. query = db.query(RiskManagementRescueResourcesTaskChildrenTask)
  238. query = query.filter(RiskManagementRescueResourcesTaskChildrenTask.del_flag != '2')
  239. query = query.filter(RiskManagementRescueResourcesTaskChildrenTask.id == id)
  240. return query.first()
  241. def resource_task_children_task_id_get_resource_task_children_task_log_info(db,children_task_id):
  242. query = db.query(RiskManagementRescueResourcesTaskChildrenTaskLog)
  243. query = query.filter(RiskManagementRescueResourcesTaskChildrenTaskLog.del_flag != '2')
  244. query = query.filter(RiskManagementRescueResourcesTaskChildrenTaskLog.children_task_id == children_task_id)
  245. return query.all()
  246. def get_file_query_fun(db,from_scenario,foreign_key):
  247. file_query = db.query(RiskManagementFile)
  248. file_query = file_query.filter(RiskManagementFile.del_flag != '2')
  249. file_query = file_query.filter(RiskManagementFile.from_scenario == from_scenario)
  250. file_query = file_query.filter(RiskManagementFile.foreign_key == foreign_key)
  251. files = file_query.all()
  252. result = [{
  253. "uid": file.file_id,
  254. "status": file.status,
  255. "name": file.file_name_desc,
  256. "url": file.file_name #"/api/file/download/%s" %
  257. } for file in files]
  258. return result
  259. def user_id_get_task_range(db,user_id):
  260. query = db.query(RiskManagementInspectionUser)
  261. query = query.filter(RiskManagementInspectionUser.del_flag!='2')
  262. query = query.filter(RiskManagementInspectionUser.user_id==user_id)
  263. area_code_list = query.all()
  264. result = []
  265. for i in area_code_list:
  266. task_range = area_code_get_task_range(i.area_code)
  267. if task_range not in result:
  268. result.append(task_range)
  269. return result