编写评级流程节点
This commit is contained in:
parent
ee4eff252f
commit
f3575b1461
|
@ -1,200 +0,0 @@
|
|||
from bson import ObjectId
|
||||
from .Types import RateRes
|
||||
from Utils.DataUtils import JsDict
|
||||
from Utils.MongoUtils import MongoConnect
|
||||
|
||||
|
||||
class Rate:
|
||||
# 需要实现的方法
|
||||
@staticmethod
|
||||
def parse_excel_file_to_data(file_path):
|
||||
"""
|
||||
解析excel文件数据
|
||||
:param file_path:
|
||||
:return:
|
||||
"""
|
||||
org_excel_data = {}
|
||||
return org_excel_data
|
||||
|
||||
@staticmethod
|
||||
def parse_org_excel_data_func(org_excel_data):
|
||||
"""
|
||||
解析原始excel数据为指标所需数据
|
||||
:param org_excel_data:
|
||||
:return:
|
||||
"""
|
||||
index_excel_data = {}
|
||||
return index_excel_data
|
||||
|
||||
@staticmethod
|
||||
def parse_org_form_data_func(org_from_data):
|
||||
"""
|
||||
解析原始填报表单数据为指标所需数据
|
||||
:param org_from_data:
|
||||
:return:
|
||||
"""
|
||||
index_form_data = {}
|
||||
return index_form_data
|
||||
|
||||
@staticmethod
|
||||
def load_api_data_func():
|
||||
"""
|
||||
加载三方api数据
|
||||
:return:
|
||||
"""
|
||||
api_data = {}
|
||||
return api_data
|
||||
|
||||
@staticmethod
|
||||
def merge_index_data(index_form_data, api_data, man_data):
|
||||
def filter_not_none(data):
|
||||
return (data and {k: v for k, v in data.items() if v is not None}) or {}
|
||||
|
||||
mgr_data = {
|
||||
**filter_not_none(index_form_data),
|
||||
**filter_not_none(api_data),
|
||||
**filter_not_none(man_data)
|
||||
}
|
||||
return mgr_data
|
||||
|
||||
# 进行打分
|
||||
@staticmethod
|
||||
def cal_index(index_data):
|
||||
rate_res = {}
|
||||
return rate_res
|
||||
|
||||
# class Rate:
|
||||
# def __init__(self, mongo_db: MongoConnect, doc_id: str = None, db_name: str = "评级数据", create_new=False):
|
||||
# that = self
|
||||
# if doc_id:
|
||||
# self.doc_id = ObjectId(doc_id)
|
||||
# else:
|
||||
# if create_new:
|
||||
# self.doc_id = self.create_rate_doc()
|
||||
# else:
|
||||
# raise Exception("doc_id为空")
|
||||
# self.mongo_db = mongo_db
|
||||
# self.db_name = db_name
|
||||
#
|
||||
# class RateData:
|
||||
# org_excel_data = JsDict({})
|
||||
# index_excel_data = JsDict({})
|
||||
# org_form_data = JsDict({})
|
||||
# index_form_data = JsDict({})
|
||||
# api_data = JsDict({})
|
||||
# man_data = JsDict({})
|
||||
# rate_res: RateRes = JsDict({})
|
||||
#
|
||||
# def __init__(self):
|
||||
# pass
|
||||
#
|
||||
# def load_data(self):
|
||||
# data = that.mongo_db.db[that.db_name].find_one({'_id': that.doc_id})
|
||||
# if not data:
|
||||
# raise Exception(f"{that.doc_id}文档未创建")
|
||||
# for key in self.__dict__.keys():
|
||||
# super().__setattr__(key, data.get(key))
|
||||
#
|
||||
# def __setattr__(self, key, value):
|
||||
# if value:
|
||||
# value = JsDict(value)
|
||||
# that.mongo_db.db[that.db_name].find_one_and_update({'_id': that.doc_id}, {"$set": {key: value}})
|
||||
# super().__setattr__(key, value)
|
||||
#
|
||||
# self.rate_data = RateData()
|
||||
# self.rate_data.load_data()
|
||||
# # 配置部分
|
||||
# self.index_model = None
|
||||
#
|
||||
# # 需要实现的方法
|
||||
# @staticmethod
|
||||
# def parse_excel_file_to_data(file_path):
|
||||
# """
|
||||
# 解析excel文件数据
|
||||
# :param file_path:
|
||||
# :return:
|
||||
# """
|
||||
# org_excel_data = {}
|
||||
# return org_excel_data
|
||||
#
|
||||
# @staticmethod
|
||||
# def parse_org_excel_data_func(org_excel_data):
|
||||
# """
|
||||
# 解析原始excel数据为指标所需数据
|
||||
# :param org_excel_data:
|
||||
# :return:
|
||||
# """
|
||||
# index_excel_data = {}
|
||||
# return index_excel_data
|
||||
#
|
||||
# @staticmethod
|
||||
# def parse_org_form_data_func(org_from_data):
|
||||
# """
|
||||
# 解析原始填报表单数据为指标所需数据
|
||||
# :param org_from_data:
|
||||
# :return:
|
||||
# """
|
||||
# index_form_data = {}
|
||||
# return index_form_data
|
||||
#
|
||||
# @staticmethod
|
||||
# def load_api_data_func():
|
||||
# """
|
||||
# 加载三方api数据
|
||||
# :return:
|
||||
# """
|
||||
# api_data = {}
|
||||
# return api_data
|
||||
#
|
||||
# def create_rate_doc(self):
|
||||
# new_doc = self.mongo_db.db[self.db_name].insert_one({})
|
||||
# return new_doc.inserted_id
|
||||
#
|
||||
# def cal_index_func(self, data):
|
||||
# """
|
||||
# 评级接口
|
||||
# :param data:
|
||||
# :return:
|
||||
# """
|
||||
# rate_res = {}
|
||||
# return rate_res
|
||||
#
|
||||
# # 以下为业务接口,无需自定义实现
|
||||
#
|
||||
# def parse_org_excel_data(self, org_excel_data):
|
||||
# index_excel_data = self.parse_org_excel_data_func(org_excel_data)
|
||||
# self.rate_data.index_excel_data = index_excel_data
|
||||
# self.rate_data.org_excel_data = org_excel_data
|
||||
# return self.rate_data.index_excel_data
|
||||
#
|
||||
# def parse_org_form_data(self, org_from_data):
|
||||
# index_form_data = self.parse_org_form_data(org_from_data)
|
||||
# self.rate_data.index_form_data = index_form_data
|
||||
# self.rate_data.org_form_data = org_from_data
|
||||
# return self.rate_data.index_form_data
|
||||
#
|
||||
# def load_api_data(self):
|
||||
# api_data = self.load_api_data_func()
|
||||
# self.rate_data.api_data = api_data
|
||||
# return self.rate_data.api_data
|
||||
#
|
||||
# def merge_index_data(self):
|
||||
# def filter_not_none(data):
|
||||
# return (data and {k: v for k, v in data.items() if v is not None}) or {}
|
||||
#
|
||||
# mgr_data = {
|
||||
# **filter_not_none(self.rate_data.index_form_data),
|
||||
# **filter_not_none(self.rate_data.index_form_data),
|
||||
# **filter_not_none(self.rate_data.api_data),
|
||||
# **filter_not_none(self.rate_data.man_data)
|
||||
# }
|
||||
# return mgr_data
|
||||
#
|
||||
# # 进行打分
|
||||
# def cal_index(self):
|
||||
# mgr_data = self.rate_data.index_form_data
|
||||
# rate_res = self.cal_index_func(mgr_data)
|
||||
# self.rate_data.rate_res = rate_res
|
||||
# return self.rate_data.rate_res
|
||||
#
|
||||
#
|
|
@ -31,26 +31,22 @@ def create_rate_flow_node(db: Session, node_num, node_name, rate_process_id):
|
|||
|
||||
|
||||
def get_rate_flow_all_nodes(_id: str, db: Session, mongodb: MongoConnect, with_content=False):
|
||||
def nodes_to_return(objs):
|
||||
__list = list()
|
||||
for obj in objs:
|
||||
__dict = dict()
|
||||
__dict.update({"node_id": obj.id})
|
||||
__dict.update({"node_num": obj.node_num})
|
||||
__dict.update({"node_name": obj.node_name})
|
||||
__dict.update({"status": obj.status})
|
||||
if with_content:
|
||||
__dict.update(
|
||||
{"content": mongodb.find_data_by_id(dbname="打分评级流程", sheet=obj.node_name, _id=obj.obj_id)})
|
||||
__list.append(__dict)
|
||||
return __list
|
||||
|
||||
item = db.query(RateFlow).filter_by(id=_id).first()
|
||||
|
||||
if not item:
|
||||
return False
|
||||
|
||||
return nodes_to_return(list(item.nodes))
|
||||
node_list=[]
|
||||
for node in item.nodes:
|
||||
node_data = {
|
||||
"node_id": node.id,
|
||||
"node_num": node.node_num,
|
||||
"node_name": node.node_name,
|
||||
"status": node.status,
|
||||
}
|
||||
if with_content:
|
||||
node_data['content'] = mongodb.find_data_by_id(dbname="打分评级流程", sheet=node.node_name, _id=node.obj_id)
|
||||
node_list.append(node_data)
|
||||
return node_list
|
||||
|
||||
|
||||
def save_rate_flow_node(node_id: str, data: dict, db: Session, mongodb: MongoConnect):
|
||||
|
|
|
@ -2,7 +2,6 @@ from sqlalchemy import Column, String, Date, Enum, ForeignKey, Integer,Float, Bo
|
|||
from sqlalchemy.orm import relationship
|
||||
|
||||
from Utils.TimeSerialNumUtils import create_time_serial_num
|
||||
from .Schemas import RankLevelEnum, RateFlowStatusEnum
|
||||
from Context.common import common_db
|
||||
|
||||
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
import datetime
|
||||
|
||||
from fastapi import APIRouter, Depends, HTTPException
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
|
@ -8,6 +10,8 @@ from . import Crud
|
|||
from . import Schemas
|
||||
from .Models import RateFlow, RateFlowNode
|
||||
from Utils.MongoUtils import MongoConnect
|
||||
from ..RateUtil import RateUtil
|
||||
from ..Types.RateRes import RateRes
|
||||
|
||||
"""
|
||||
一个流程所需的基本接口
|
||||
|
@ -52,9 +56,9 @@ def func(req: Schemas.RateFormSaveReq,
|
|||
db: Session = Depends(common_db.get_db), mongodb: MongoConnect = Depends(mg_db.get_db)):
|
||||
node = db.query(RateFlowNode).filter(
|
||||
RateFlowNode.rate_process_id == req.rate_flow_id and RateFlowNode.node_name == '表单填报').first()
|
||||
Crud.save_rate_flow_node(node.id, req.data, db, mongodb)
|
||||
index_from_data = RateUtil.parse_org_form_data_func(req.data)
|
||||
Crud.save_rate_flow_node(node.id, {"原始填报数据": req.data, "填报解析数据": index_from_data}, db, mongodb)
|
||||
Crud.change_rate_node_status(db, node.id, "完成")
|
||||
# todo:表单解析
|
||||
return {"message": "保存成功", "code": 200}
|
||||
|
||||
|
||||
|
@ -63,10 +67,12 @@ def func(req: Schemas.RateFormSaveReq,
|
|||
def func(req: Schemas.LoadApiDataReq,
|
||||
token: AdminUserTokenDataModel = Depends(admin_user_auth_util.token_data_depend),
|
||||
db: Session = Depends(common_db.get_db), mongodb: MongoConnect = Depends(mg_db.get_db)):
|
||||
rate_flow = Crud.get_rate_flow(db, req.rate_flow_id)
|
||||
company_name = rate_flow.company_name
|
||||
node = db.query(RateFlowNode).filter(
|
||||
RateFlowNode.rate_process_id == req.rate_flow_id and RateFlowNode.node_name == '三方数据录入').first()
|
||||
# todo: 三方数据录入
|
||||
data = {}
|
||||
data = RateUtil.load_api_data_func(company_name)
|
||||
Crud.save_rate_flow_node(node.id, data, db, mongodb)
|
||||
Crud.change_rate_node_status(db, node.id, "完成")
|
||||
return {"message": "保存成功", "code": 200}
|
||||
|
@ -80,8 +86,7 @@ def func(req: Schemas.SaveManDataReq,
|
|||
node = db.query(RateFlowNode).filter(
|
||||
RateFlowNode.rate_process_id == req.rate_flow_id and RateFlowNode.node_name == '后台审核校正').first()
|
||||
# todo: 后台审核校正
|
||||
data = {}
|
||||
Crud.save_rate_flow_node(node.id, data, db, mongodb)
|
||||
Crud.save_rate_flow_node(node.id, req.data, db, mongodb)
|
||||
Crud.change_rate_node_status(db, node.id, "完成")
|
||||
return {"message": "保存成功", "code": 200}
|
||||
|
||||
|
@ -94,11 +99,22 @@ def func(req: Schemas.DoRateReq,
|
|||
node = db.query(RateFlowNode).filter(
|
||||
RateFlowNode.rate_process_id == req.rate_flow_id and RateFlowNode.node_name == '评级').first()
|
||||
# todo: 进行评级
|
||||
data = {}
|
||||
# inde
|
||||
# Rate.merge_index_data()
|
||||
Crud.save_rate_flow_node(node.id, data, db, mongodb)
|
||||
nodes = Crud.get_rate_flow_all_nodes(req.rate_flow_id, db, mongodb, with_content=True)
|
||||
nodes_dic = {item['node_name']: item for item in nodes}
|
||||
index_data_merge = RateUtil.merge_index_data(nodes_dic['表单填报']['content']['填报解析数据'],
|
||||
nodes_dic['三方数据']['content'],
|
||||
nodes_dic['后台审核校正']['content'])
|
||||
rate_res = RateUtil.cal_index(index_data_merge)
|
||||
Crud.save_rate_flow_node(node.id, rate_res, db, mongodb)
|
||||
Crud.change_rate_node_status(db, node.id, "完成")
|
||||
Crud.rate_flow_update(db,
|
||||
Schemas.RateFlowUpdateInfo(
|
||||
rate_date=datetime.datetime.now(),
|
||||
rate_level=rate_res.content.level,
|
||||
rate_scope=rate_res.content.total_score,
|
||||
status="完成"
|
||||
)
|
||||
)
|
||||
return {"message": "保存成功", "code": 200}
|
||||
|
||||
|
||||
|
|
|
@ -1,123 +1,18 @@
|
|||
from datetime import date, datetime
|
||||
from enum import Enum, unique
|
||||
from typing import List, Optional
|
||||
from typing import List, Optional, LiteralString
|
||||
|
||||
from pydantic import BaseModel
|
||||
|
||||
|
||||
@unique
|
||||
class RateFlowStatusEnum(Enum):
|
||||
enum01 = "进行"
|
||||
enum02 = "完成"
|
||||
enum03 = "取消"
|
||||
|
||||
|
||||
@unique
|
||||
class RankLevelEnum(Enum):
|
||||
enum01 = "AAA"
|
||||
enum02 = "AA+"
|
||||
enum03 = "AA"
|
||||
enum04 = "AA-"
|
||||
enum05 = "A+"
|
||||
enum06 = "A"
|
||||
enum07 = "A-"
|
||||
enum08 = "BBB+"
|
||||
enum09 = "BBB"
|
||||
enum10 = "BBB-"
|
||||
enum11 = "BB+"
|
||||
enum12 = "BB"
|
||||
enum13 = "BB-"
|
||||
enum14 = "B+"
|
||||
enum15 = "B"
|
||||
enum16 = "B-"
|
||||
enum17 = "CCC"
|
||||
enum18 = "CC"
|
||||
enum19 = "C"
|
||||
enum20 = "-"
|
||||
|
||||
|
||||
class CreateRateFlowReqBody(BaseModel):
|
||||
company: str = None
|
||||
scorecard: str = None
|
||||
scorecard_id: str = None
|
||||
report_date: date = None
|
||||
|
||||
|
||||
class Participant(BaseModel):
|
||||
participant: str = None
|
||||
user_id: str = None
|
||||
|
||||
|
||||
class CreateRateFlowReqBodys(BaseModel):
|
||||
company: str = None
|
||||
company_id: str = None
|
||||
scorecard: str = None
|
||||
scorecard_id: str = None
|
||||
report_date: date = None
|
||||
participant_list: List[Participant]
|
||||
|
||||
|
||||
class AddParticipantReqBody(BaseModel):
|
||||
rate_flow_id: str = None
|
||||
participant_list: List[Participant]
|
||||
|
||||
|
||||
class CreateParticipantReqBody(BaseModel):
|
||||
participant: str = None
|
||||
user_id: str = None
|
||||
rate_process_id: str = None
|
||||
|
||||
|
||||
class SaveRateFlowNodeReqBody(BaseModel):
|
||||
node_id: str = None
|
||||
data: dict = {}
|
||||
|
||||
|
||||
class GetRateDataReqBody(BaseModel):
|
||||
company_id: str = None
|
||||
scorecard_id: str = None
|
||||
report_date: list = None
|
||||
|
||||
|
||||
class GetIndicatorReqBody(BaseModel):
|
||||
scorecard_id: str = None
|
||||
|
||||
|
||||
class ListRateFlowsReqBody(BaseModel):
|
||||
status: RateFlowStatusEnum = None
|
||||
page: int = 1
|
||||
pagesize: int = 10
|
||||
|
||||
|
||||
class GetRateFlowNodeContentReqBody(BaseModel):
|
||||
node_id: str = None
|
||||
|
||||
|
||||
class CalculationAdjustReqBody(BaseModel):
|
||||
rate_flow_id: str
|
||||
adjustment: list
|
||||
|
||||
|
||||
class ChangeStatusReqBody(BaseModel):
|
||||
rate_flow_id: str
|
||||
node_name: str
|
||||
status: bool
|
||||
|
||||
|
||||
class RateFlowListReqBody(BaseModel):
|
||||
page: int = 1
|
||||
pagesize: int = 10
|
||||
|
||||
|
||||
class SearchFlowReqBody(BaseModel):
|
||||
id: str = "评级流程ID"
|
||||
RateFlowStatus = LiteralString['进行', '完成', '失败', '取消']
|
||||
RateFlowNodeStatus = LiteralString['进行', '完成', '失败', '取消']
|
||||
|
||||
|
||||
class NodeInfo(BaseModel):
|
||||
node_id: Optional[str]
|
||||
node_num: Optional[int]
|
||||
node_name: Optional[str]
|
||||
status: Optional[str]
|
||||
status: Optional[RateFlowNodeStatus]
|
||||
content: {}
|
||||
|
||||
|
||||
|
@ -127,7 +22,7 @@ class RateFlowInfo(BaseModel):
|
|||
rate_level: Optional[str]
|
||||
rate_scope: Optional[float]
|
||||
company_name: Optional[str]
|
||||
status: Optional[str]
|
||||
status: Optional[RateFlowStatus]
|
||||
publish: Optional[bool]
|
||||
create_time: Optional[datetime]
|
||||
nodes: Optional[List[Optional[NodeInfo, any]]]
|
||||
|
@ -165,25 +60,24 @@ class DoRateReq(BaseModel):
|
|||
|
||||
###########
|
||||
|
||||
class RateFlowInfo(BaseModel):
|
||||
id: Optional[str]
|
||||
rate_date: Optional[datetime]
|
||||
phone: Optional[str]
|
||||
rate_level: Optional[str]
|
||||
rate_scope: Optional[float]
|
||||
company_name: Optional[str]
|
||||
status: Optional[float]
|
||||
publish: Optional[bool]
|
||||
create_time: Optional[datetime]
|
||||
|
||||
# class RateFlowInfo(BaseModel):
|
||||
# id: Optional[str]
|
||||
# rate_date: Optional[datetime]
|
||||
# rate_level: Optional[str]
|
||||
# rate_scope: Optional[float]
|
||||
# company_name: Optional[str]
|
||||
# status: Optional[RateFlowStatus]
|
||||
# publish: Optional[bool]
|
||||
# create_time: Optional[datetime]
|
||||
|
||||
|
||||
class RateFlowAddInfo(BaseModel):
|
||||
rate_date: Optional[datetime]
|
||||
phone: Optional[str]
|
||||
rate_level: Optional[str]
|
||||
rate_scope: Optional[float]
|
||||
company_name: Optional[str]
|
||||
status: Optional[float]
|
||||
status: Optional[RateFlowStatus]
|
||||
publish: Optional[bool]
|
||||
create_time: Optional[datetime]
|
||||
|
||||
|
|
|
@ -0,0 +1,64 @@
|
|||
from bson import ObjectId
|
||||
from .Types.RateRes import RateRes
|
||||
from Utils.DataUtils import JsDict
|
||||
from Utils.MongoUtils import MongoConnect
|
||||
|
||||
|
||||
class RateUtil:
|
||||
# 需要实现的方法
|
||||
@staticmethod
|
||||
def parse_excel_file_to_data(file_path):
|
||||
"""
|
||||
解析excel文件数据
|
||||
:param file_path:
|
||||
:return:
|
||||
"""
|
||||
org_excel_data = {}
|
||||
return org_excel_data
|
||||
|
||||
@staticmethod
|
||||
def parse_org_excel_data_func(org_excel_data):
|
||||
"""
|
||||
解析原始excel数据为指标所需数据
|
||||
:param org_excel_data:
|
||||
:return:
|
||||
"""
|
||||
index_excel_data = {}
|
||||
return index_excel_data
|
||||
|
||||
@staticmethod
|
||||
def parse_org_form_data_func(org_from_data):
|
||||
"""
|
||||
解析原始填报表单数据为指标所需数据
|
||||
:param org_from_data:
|
||||
:return:
|
||||
"""
|
||||
index_form_data = {}
|
||||
return index_form_data
|
||||
|
||||
@staticmethod
|
||||
def load_api_data_func(company_name):
|
||||
"""
|
||||
加载三方api数据
|
||||
:return:
|
||||
"""
|
||||
api_data = {}
|
||||
return api_data
|
||||
|
||||
@staticmethod
|
||||
def merge_index_data(index_form_data, api_data, man_data):
|
||||
def filter_not_none(data):
|
||||
return (data and {k: v for k, v in data.items() if v is not None}) or {}
|
||||
|
||||
mgr_data = {
|
||||
**filter_not_none(index_form_data),
|
||||
**filter_not_none(api_data),
|
||||
**filter_not_none(man_data)
|
||||
}
|
||||
return mgr_data
|
||||
|
||||
# 进行打分
|
||||
@staticmethod
|
||||
def cal_index(index_data) -> RateRes:
|
||||
rate_res: RateRes = JsDict({})
|
||||
return rate_res
|
Loading…
Reference in New Issue