from models import * from utils import * from sqlalchemy import and_, or_ from datetime import datetime, timedelta from dateutil.relativedelta import relativedelta def area_code_get_ancestors_names(db,area_info, ancestors_name=''): # print(area_info) if area_info is None: # print(ancestors_name) return ancestors_name else: ancestors_name = area_info.area_name + ancestors_name return area_code_get_ancestors_names(db,area_code_get_area_info(db,area_info.parent_code), ancestors_name) def area_code_get_area_info(db,area_code): # 机构id获取机构信息 query = db.query(GovdataArea) query = query.filter(GovdataArea.status == '1') query = query.filter(GovdataArea.area_code == area_code) return query.first() def get_area_num(db,rang): query = db.query(GovdataArea) if rang=='0': return 1 elif rang=='1': query = query.filter(and_(GovdataArea.area_code.like('%000000'),GovdataArea.area_code.notlike('%00000000'))) return query.count() elif rang=='2': query = query.filter(and_(GovdataArea.area_code.like('%000'),GovdataArea.area_code.notlike('%000000'))) return query.count() elif rang=='3': query = query.filter(GovdataArea.area_code.notlike('%000')) return query.count() else: return 0 def get_area_code_list(db,rang): query = db.query(GovdataArea) if rang=='0': return ['440900000000'] elif rang=='1': query = query.filter(and_(GovdataArea.area_code.like('%000000'),GovdataArea.area_code.notlike('%00000000'))) return list({i.area_code for i in query.all()}) elif rang=='2': query = query.filter(and_(GovdataArea.area_code.like('%000'),GovdataArea.area_code.notlike('%000000'))) return list({i.area_code for i in query.all()}) elif rang=='3': query = query.filter(GovdataArea.area_code.notlike('%000')) return list({i.area_code for i in query.all()}) else: return [] def get_area_code_exclude_list(db,rang,list_1): query = db.query(GovdataArea) if rang=='0' and '440900000000' not in list_1: return ['440900000000'] elif rang=='1': query = query.filter(and_(GovdataArea.area_code.like('%000000'),GovdataArea.area_code.notlike('%00000000'),~GovdataArea.area_code.in_(list_1))) return list({i.area_code for i in query.all()}) elif rang=='2': query = query.filter(and_(GovdataArea.area_code.like('%000'),GovdataArea.area_code.notlike('%000000'),~GovdataArea.area_code.in_(list_1))) return list({i.area_code for i in query.all()}) elif rang=='3': query = query.filter(GovdataArea.area_code.notlike('%000'),~GovdataArea.area_code.in_(list_1)) return list({i.area_code for i in query.all()}) else: return [] def area_code_get_task_range(area_code): if '00000000'==area_code[4:]: return '0' elif '00000000'!=area_code[4:] and '000000'==area_code[6:] : return '1' elif '000000'!=area_code[6:] and '000'==area_code[9:] : return '2' elif '000'!=area_code[9:]: return '3' else: return '-1' def area_code_rang_get_area_children_list(db,rang,area_code,complete_area_code_list): if int(area_code_get_task_range(area_code))>int(rang): #如果当前区划层级低于任务所属层级,返回空列表 return [] root_area = db.query(GovdataArea).filter_by(area_code=area_code).first() if not root_area: return [] # 如果没有找到区划,返回空列表 # 然后,根据层级递归查找所有子区划 area_codes = [] def recursive_search(current_area): if area_code_get_task_range(current_area.area_code) == rang: if current_area.area_code not in complete_area_code_list: area_codes.append(current_area.area_code) else: for child in db.query(GovdataArea).filter_by(parent_code=current_area.area_code).all(): recursive_search(child) recursive_search(root_area) # 从根区划开始递归搜索 return area_codes def get_task_date_list(cycle,start_date,end_date,corn_query): # 生成日期列表 date_list = [] if cycle=='4': #仅一次,返回当天 date_list.append(datetime.today()) return date_list elif cycle=='3': #每天 current_date = start_date while current_date <= end_date: # 将日期添加到列表中 date_list.append(current_date) # 增加一天 current_date += timedelta(days=1) return date_list elif cycle=='2': #每周 days_ahead = (7+int(corn_query) - start_date.weekday()) % 7 current_date = start_date + timedelta(days=days_ahead) while current_date <= end_date: # 将日期添加到列表中 date_list.append(current_date) # 增加七天 current_date += timedelta(days=7) return date_list elif cycle=='1': #每月 if '-' in corn_query: corn_query = corn_query.split("-")[-1] days_ahead = datetime.strptime(start_date.strftime("%Y-%m-")+corn_query, "%Y-%m-%d") if days_ahead>start_date: current_date = days_ahead else: current_date = days_ahead+relativedelta(months=1) while current_date <= end_date: # 将日期添加到列表中 date_list.append(current_date) # 增加七天 current_date += relativedelta(months=1) return date_list elif cycle=='0': #每月 if '-' in corn_query: y,m,d = corn_query.split("-") else: d,m = corn_query.split() days_ahead = datetime.strptime(start_date.strftime("%Y-")+m+'-'+d, "%Y-%m-%d") if days_ahead>start_date: current_date = days_ahead else: current_date = days_ahead+relativedelta(years=1) while current_date <= end_date: # 将日期添加到列表中 date_list.append(current_date) # 增加七天 current_date += relativedelta(years=1) return date_list def create_children_task(db,task_info,corn_query): cycle = task_info.inspection_cycle task_range = task_info.inspection_range for t in get_task_date_list(cycle,task_info.start_time,task_info.end_time,corn_query): new_children_task = RiskManagementInspectionTaskChildrenTask( id = new_guid(), task_id= task_info.id, task_number= task_info.task_number, type = task_info.inspection_business, tsak_time = t, cycle=cycle, task_range = task_range, task_num=get_area_num(db,task_range), create_by=task_info.create_by ) db.add(new_children_task) db.commit() def create_risk_children_task(db,task_info,corn_query): cycle = task_info.task_cycle task_range = task_info.task_range for t in get_task_date_list(cycle,task_info.start_time,task_info.end_time,corn_query): new_children_task = RiskManagementRiskTaskChildrenTask( id = new_guid(), task_id= task_info.id, task_number= task_info.task_number, type = task_info.risk_type, tsak_time = t, cycle=cycle, task_range = task_range, task_num=get_area_num(db,task_range), create_by=task_info.create_by ) db.add(new_children_task) db.commit() def inspection_task_id_get_inspection_task_info(db,id): query = db.query(RiskManagementInspectionTask) query = query.filter(RiskManagementInspectionTask.del_flag != '2') query = query.filter(RiskManagementInspectionTask.id == id) return query.first() def inspection_task_children_task_id_get_inspection_task_children_task_info(db,id): query = db.query(RiskManagementInspectionTaskChildrenTask) query = query.filter(RiskManagementInspectionTaskChildrenTask.del_flag != '2') query = query.filter(RiskManagementInspectionTaskChildrenTask.id == id) return query.first() def inspection_task_children_task_id_get_inspection_task_children_task_log_info(db,children_task_id): query = db.query(RiskManagementInspectionTaskChildrenTaskLog) query = query.filter(RiskManagementInspectionTaskChildrenTaskLog.del_flag != '2') query = query.filter(RiskManagementInspectionTaskChildrenTaskLog.children_task_id == children_task_id) return query.all() def risk_task_id_get_risk_task_info(db,id): query = db.query(RiskManagementRiskTask) query = query.filter(RiskManagementRiskTask.del_flag != '2') query = query.filter(RiskManagementRiskTask.id == id) return query.first() def risk_task_children_task_id_get_risk_task_children_task_info(db,id): query = db.query(RiskManagementRiskTaskChildrenTask) query = query.filter(RiskManagementRiskTaskChildrenTask.del_flag != '2') query = query.filter(RiskManagementRiskTaskChildrenTask.id == id) return query.first() def risk_task_children_task_id_get_risk_task_children_task_log_info(db,children_task_id): query = db.query(RiskManagementRiskTaskChildrenTaskLog) query = query.filter(RiskManagementRiskTaskChildrenTaskLog.del_flag != '2') query = query.filter(RiskManagementRiskTaskChildrenTaskLog.children_task_id == children_task_id) return query.all() def get_file_query_fun(db,from_scenario,foreign_key): file_query = db.query(RiskManagementFile) file_query = file_query.filter(RiskManagementFile.del_flag != '2') file_query = file_query.filter(RiskManagementFile.from_scenario == from_scenario) file_query = file_query.filter(RiskManagementFile.foreign_key == foreign_key) files = file_query.all() result = [{ "uid": file.file_id, "status": file.status, "name": file.file_name_desc, "url": file.file_name #"/api/file/download/%s" % } for file in files] return result def user_id_get_task_range(db,user_id): query = db.query(RiskManagementInspectionUser) query = query.filter(RiskManagementInspectionUser.del_flag!='2') query = query.filter(RiskManagementInspectionUser.user_id==user_id) area_code_list = query.all() result = [] for i in area_code_list: task_range = area_code_get_task_range(i.area_code) if task_range not in result: result.append(task_range) return result