from bson import ObjectId from datetime import datetime from Company.Basic.Business.BusinessImpl import BusinessImpl from Company.CompanyUtils import CompanyUtils from Company.Supervision.TaxViolation.TaxViolationObj import TaxViolationObj from DBHelper.MongoHelperInstance import DB_TYC, DB_TEST from Utils.CommonUtil import CommonUtils class TaxViolationImpl(object): """税收违法""" @staticmethod def verify_time(**kwargs): """校验更新时间""" def calculate_jet_lag(begin_time): """计算时差""" end_time = CommonUtils.get_current_time() time_1_struct = datetime.strptime(end_time, "%Y-%m-%d %H:%M:%S") time_2_struct = datetime.strptime(begin_time, "%Y-%m-%d %H:%M:%S") seconds = (time_1_struct - time_2_struct).seconds if seconds > 60: return True else: return False condition = kwargs['condition'] start_time = DB_TEST.find_all_data( 'WR_DataBase_v2_test', 'C11.4_税收违法', condition, ['更新时间'] ) if start_time: res = calculate_jet_lag(start_time[-1]['更新时间']) else: res = True return res def auto_update(self, **kwargs): """新增/更新(自动)""" condition = kwargs['condition'] def save_data(**args): """查询保存数据""" company_name = args['cname'] company_id = args['cid'] records = DB_TYC.find_all_data( '经营风险', '税收违法', {'企业名称': company_name}, ['税收违法'] ) if records: list_data = list() for record in records: records_item = record['税收违法']['result'] for record_item in records_item: dict_data = dict() dict_data['企业ID'] = company_id dict_data['发布日期'] = record_item['publish_time'] dict_data['税务机关'] = record_item['department'] dict_data['案件性质'] = record_item['case_type'] dict_data['违法事实'] = None dict_data['处罚情况'] = None dict_data['更新时间'] = CommonUtils.get_current_time() list_data.append(dict_data) return list_data else: return False if len(condition['cid']): cid = condition['cid'] cname = DB_TEST.find_single_column( 'WR_DataBase_v2_test', 'C3.1_工商信息', {'企业ID': cid}, '企业名称' ) # 判断更新时间 verify_res = self.verify_time(condition={"企业ID": cid}) if not verify_res: return 'Please try again in a minute' update = save_data(cname=cname, cid=cid) if update: DB_TEST.insert_many_data( "WR_DataBase_v2_test", "C11.4_税收违法", update ) return 'success' else: return 'update failed' elif len(condition['cname']): cname = condition['cname'] cid = DB_TEST.find_single_column( 'WR_DataBase_v2_test', 'C3.1_工商信息', {'企业名称': cname}, '企业ID' ) if not cid: res = BusinessImpl.auto_update(condition={"cname": cname, "cid": ""}) if res == 'success': cid = DB_TEST.find_single_column( 'WR_DataBase_v2_test', 'C3.1_工商信息', {'企业名称': cname}, '企业ID' ) else: return 'new failed' # 判断更新时间 verify_res = self.verify_time(condition={"企业ID": cid}) if not verify_res: return 'Please try again in a minute' insert = save_data(cname=cname, cid=cid) if insert: DB_TEST.insert_many_data( "WR_DataBase_v2_test", "C11.4_税收违法", insert ) return 'success' else: return 'new failed' else: return 'parameter exception' def manu_update(self, **kwargs): """新增/更新(手动)""" cid = kwargs['cid'] cname = kwargs['cname'] template = kwargs['template'] data = CompanyUtils.excel_sheet_parser(file=template) if len(cid): verify_res = self.verify_time(condition={"企业ID": cid}) if not verify_res: return 'Please try again in a minute' if data: data_list = list() for item in data: violation = TaxViolationObj() violation.cid = cid violation.date = CommonUtils.excel_time_stamp(item['发布日期']) violation.department = item['税务机关'] violation.quality = item['案件性质'] violation.illegal_facts = item['违法事实'] violation.penalties = item['处罚情况'] violation.update_time = CommonUtils.get_current_time() data_list.append(violation.fields_toggle()) DB_TEST.insert_many_data( "WR_DataBase_v2_test", "C11.4_税收违法", data_list ) return 'success' else: return 'update failed' elif len(cname): cid = DB_TEST.find_single_column( 'WR_DataBase_v2_test', 'C3.1_工商信息', {'企业名称': cname}, '企业ID' ) if not cid: res = BusinessImpl.auto_update(condition={"cname": cname, "cid": ""}) if res == 'success': cid = DB_TEST.find_single_column( 'WR_DataBase_v2_test', 'C3.1_工商信息', {'企业名称': cname}, '企业ID' ) else: return 'new failed' verify_res = self.verify_time(condition={"企业ID": cid}) if not verify_res: return 'Please try again in a minute' if data: data_list = list() for item in data: violation = TaxViolationObj() violation.cid = cid violation.date = CommonUtils.excel_time_stamp(item['发布日期']) violation.department = item['税务机关'] violation.quality = item['案件性质'] violation.illegal_facts = item['违法事实'] violation.penalties = item['处罚情况'] violation.update_time = CommonUtils.get_current_time() data_list.append(violation.fields_toggle()) DB_TEST.insert_many_data( "WR_DataBase_v2_test", "C11.4_税收违法", data_list ) return 'success' else: return 'parameter exception' @staticmethod def delete(**kwargs): """删除""" param = kwargs['param'] _id = param['_id'] res = DB_TEST.delete_single_data( "WR_DataBase_v2_test", "C11.4_税收违法", {"_id": ObjectId(_id)} ) if res: result = { "info": "success", } else: result = { "info": "no result" } return result @staticmethod def edit(**kwargs): """编辑""" param = kwargs['param'] _id = param['_id'] body = param['body'] try: violation = TaxViolationObj() violation.date = body['发布日期'] violation.department = body['税务机关'] violation.quality = body['案件性质'] violation.illegal_facts = body['违法事实'] violation.penalties = body['处罚情况'] violation.update_time = CommonUtils.get_current_time() update_data = violation.fields_toggle() DB_TEST.update_single_data( "WR_DataBase_v2_test", "C11.4_税收违法", {"_id": ObjectId(_id)}, update_data ) return 'success' except Exception: return 'edit failed' @staticmethod def view(**kwargs): """查看""" query = kwargs['query'] cid = query['cid'] page_num = int(query['page_num']) page_size = int(query['page_size']) page_size = 10 if page_size > 10 else page_size total = DB_TEST.find_all_data_with_count( 'WR_DataBase_v2_test', 'C11.4_税收违法', {"企业ID": cid} ) record = DB_TEST.find_data_by_page_with_sort( "WR_DataBase_v2_test", "C11.4_税收违法", {"企业ID": cid}, [], {'_id': 1}, page_size, page_num ) if record: for rec in record: rec['_id'] = str(rec['_id']) update_time = record[-1]['更新时间'] result = { "info": "success", "result": { "total": total, "update_time": update_time, "records": record } } else: result = { "info": "no result" } return result