from DBHelper.MongoHelperInstance import DB_GUA from Modules.Common.CommonUtils import CommonUtils from Modules.Company.CompanyObject import GuaranteeInfo from Modules.Company.CompanyUtils import CompanyUtils from Utils.CommonUtil import trans_fields_name, sub_dict, get_attr, make_multistage_update_body from Utils.ErrorUtil import APIReturnError from Utils.ObjUtil import SpecObject class CompanyManageImpl(object): @staticmethod def search(**kwargs): total = DB_GUA.find_all_data_with_count( "企业数据", "公司概览", {"企业名称": {"$regex": kwargs["company_name"]}} ) items = DB_GUA.find_data_by_page_with_sort( "企业数据", "公司概览", {"企业名称": {"$regex": kwargs["company_name"]}}, ["企业ID", "企业名称", "所在省份", "所在城市", "信用评级", "评级日期", "公司标签"], {"更新时间": -1}, kwargs["page_size"], kwargs["page_no"] ) trans_items = list() for item in items: trans_item = trans_fields_name( item, ["企业ID", "所在省份", "所在城市", "信用评级", "评级日期", "公司标签"], ["cid", "省份", "地级市", "级别", "日期", "标签"] ) trans_items.append(trans_item) result = { "total": total, "records": trans_items } return result @staticmethod def basic_data(**kwargs): item = DB_GUA.find_single_data( "企业数据", "工商信息", {"企业ID": kwargs["cid"]}, [ "企业名称", "企业简称", "企业类型", "担保类型", "统一社会信用代码", "组织代码", "成立时间", "注册资本(万元)", "实缴资本(万元)", "经营范围", "所在省份", "所在城市", "注册地址", "通信地址", "电子邮箱", "联系电话", "参保人数", "公司定位", "法定代表人", "实际控制人", "高管信息", "股东信息" ] ) if not item: result = {} else: result = dict() business_info = sub_dict( item, [ "企业名称", "企业简称", "企业类型", "担保类型", "统一社会信用代码", "组织代码", "成立时间", "注册资本(万元)", "实缴资本(万元)", "经营范围", "所在省份", "所在城市", "注册地址", "通信地址", "电子邮箱", "联系电话", "参保人数", "公司定位", "法定代表人", "实际控制人" ] ) result["工商信息"] = business_info result["高管信息"] = get_attr(item, ["高管信息"], default=[]) result["股东信息"] = get_attr(item, ["股东信息"], default=[]) return result @staticmethod def get_financial_data(**kwargs): items = DB_GUA.find_all_data( "企业数据", "财务数据", {"企业ID": kwargs["cid"]}, [ "报告期", "资产负债表", "利润表", "补充数据表" ] ) if not items: result = {} else: balance_sheets = list() profit_statements = list() appendix_sheets = list() for item in items: balance_sheet = item["资产负债表"] profit_statement = item["利润表"] appendix_sheet = item["补充数据表"] balance_sheet["报告期"] = item["报告期"] profit_statement["报告期"] = item["报告期"] appendix_sheet["报告期"] = item["报告期"] balance_sheets.append(balance_sheet) profit_statements.append(profit_statement) appendix_sheets.append(appendix_sheet) result = { "资产负债表": balance_sheets, "利润表": profit_statements, "补充数据表": appendix_sheets, } return result @staticmethod def edit_financial_data(**kwargs): cid = kwargs['cid'] report_date = kwargs['report_date'] update_data = kwargs['update_data'] update_body = make_multistage_update_body(update_data) if update_body is None: raise APIReturnError("输入格式错误", 202) if type(list(update_body.values())[0]) not in [int, float, type(None)]: raise APIReturnError("输入格式错误", 202) DB_GUA.update_single_data( "企业数据", "财务数据", {"企业ID": cid, "报告期": report_date}, update_body ) @staticmethod def get_guarantee_info(**kwargs): items = DB_GUA.find_all_data( "企业数据", "担保数据", {"企业ID": kwargs["cid"]}, [ "担保ID", "项目名称", "被担保人", "担保类型", "担保方式", "担保余额(万元)", "解除金额(万元)", "责任担保余额(万元)", "担保开始日期", "担保结束日期", "行业", "省份", "地级市", "备注" ] ) if not items: result = [] else: result = items return result @staticmethod def new_guarantee_info(**kwargs): data = kwargs['data'] cid = data['企业ID'] gid = CompanyUtils.make_new_cid() data['担保ID'] = gid new_data = SpecObject.set_specify_instance( instance=GuaranteeInfo, data=data ) DB_GUA.upsert_single_data( '企业数据', '担保数据', {'企业ID': cid, '担保ID': gid}, new_data.fields_toggle() ) return '新增成功' @staticmethod def edit_guarantee_info(**kwargs): data = kwargs['data'] cid = data['企业ID'] gid = data['担保ID'] edit_data = SpecObject.set_specify_instance( instance=GuaranteeInfo, data=data ) DB_GUA.update_single_data( '企业数据', '担保数据', {'企业ID': cid, '担保ID': gid}, edit_data.fields_toggle() ) return '修改成功' @staticmethod def get_repay(**kwargs): items = DB_GUA.find_all_data( "企业数据", "代偿信息", {"担保ID": kwargs["gid"]}, [ "项目名称", "代偿金额(万元)", "代偿回收金额(万元)", "代偿日期" ] ) if not items: result = [] else: result = items return result @staticmethod def edit_repay(**kwargs): edit_data = SpecObject.set_specify_instance( instance=GuaranteeInfo.CompensationInfo, data=kwargs['data'] ) DB_GUA.update_single_data( "企业数据", "代偿信息", {"担保ID": kwargs['data']['担保ID'], "项目名称": kwargs['data']['项目名称']}, edit_data.fields_toggle() ) return '修改成功' @staticmethod def new_repay(**kwargs): edit_data = SpecObject.set_specify_instance( instance=GuaranteeInfo.CompensationInfo, data=kwargs['data'] ) DB_GUA.insert_single_data( "企业数据", "代偿信息", edit_data.fields_toggle() ) return '新增成功' @staticmethod def get_rating_records(**kwargs): cid = kwargs["cid"] page_no = kwargs["page_no"] page_size = kwargs["page_size"] total = DB_GUA.find_all_data_with_count( "评级数据", "评级记录", {"企业ID": cid} ) records = DB_GUA.find_data_by_page_with_sort( "评级数据", "评级记录", {"企业ID": cid}, ["评级ID", "报告期", "所在省份", "所在城市", "评级时间", "信用级别", "信用得分", "评级报告", "评级状态"], {"评级时间": -1}, page_size, page_no ) if records: for record in records: try: record['评级报告'] = '/admin/file/credit_report?&file_id={}'.format(record['评级报告']) except KeyError: continue result = { "total": total, "records": records } return result @staticmethod def customer_info(**kwargs): cid = kwargs["cid"] page_no = kwargs["page_no"] page_size = kwargs["page_size"] total = DB_GUA.find_all_data_with_count( "企业数据", "担保数据-客户信息", {"企业ID": cid} ) records = DB_GUA.find_data_by_page_with_sort( "企业数据", "担保数据-客户信息", {"企业ID": cid}, ["企业ID", "客户名称", "担保类型", "在保余额", "融资担保责任余额", "担保起始日", "担保截止日"], {"担保起始日": -1}, page_size, page_no ) result = { "total": total, "records": records } return result @staticmethod def regional_info(**kwargs): cid = kwargs["cid"] page_no = kwargs["page_no"] page_size = kwargs["page_size"] total = DB_GUA.find_all_data_with_count( "企业数据", "担保数据-区域分布", {"企业ID": cid} ) records = DB_GUA.find_data_by_page_with_sort( "企业数据", "担保数据-区域分布", {"企业ID": cid}, ["企业ID", "地区", "报告期", "年末在保余额", "年末在保责任余额", "当年新增在保余额", "当年新增在保责任余额"], {"报告期": -1}, page_size, page_no ) result = { "total": total, "records": records } return result @staticmethod def industry_info(**kwargs): cid = kwargs["cid"] page_no = kwargs["page_no"] page_size = kwargs["page_size"] total = DB_GUA.find_all_data_with_count( "企业数据", "担保数据-行业分布", {"企业ID": cid} ) records = DB_GUA.find_data_by_page_with_sort( "企业数据", "担保数据-行业分布", {"企业ID": cid}, ["企业ID", "报告期", "所属行业", "年末在保余额", "年末在保责任余额", "当年新增在保余额", "当年新增在保责任余额"], {"报告期": -1}, page_size, page_no ) result = { "total": total, "records": records } return result @staticmethod def guarantee_balance_info(**kwargs): cid = kwargs["cid"] page_no = kwargs["page_no"] page_size = kwargs["page_size"] total = DB_GUA.find_all_data_with_count( "企业数据", "担保数据-担保金额分布", {"企业ID": cid} ) records = DB_GUA.find_data_by_page_with_sort( "企业数据", "担保数据-担保金额分布", {"企业ID": cid}, ["企业ID", "报告期", "100万以下(含100万)", "500万以下(含500万)", "500-1000万(含1000万)", "1000-3000万(含3000万)", "3000-5000万(含5000万)" "3000-5000万(含5000万)", "5000-8000万(含8000万)", "8000-10000万(含10000万)", "10000万以上", "合计"], {"报告期": -1}, page_size, page_no ) result = { "total": total, "records": records } return result