feat:add report
This commit is contained in:
+110
-12
@@ -1,7 +1,7 @@
|
||||
import uuid
|
||||
|
||||
from app.config import TaskEnv
|
||||
from app.models.report import StatusReport, ReportCountry
|
||||
from app.models.report import StatusReport, ReportCountry, DonutList
|
||||
from core.service.mongo_db import use_collection
|
||||
|
||||
|
||||
@@ -33,17 +33,42 @@ class ReportRepository():
|
||||
|
||||
|
||||
async def report_country(self ,_inp: ReportCountry):
|
||||
match = {}
|
||||
if _inp.state:
|
||||
count_nature = await use_collection(TaskEnv.CLN_PROJECT).count_documents(
|
||||
{'design.nature_id':_inp.nature_id,'design.state':_inp.state})
|
||||
count_type = await use_collection(TaskEnv.CLN_PROJECT).count_documents({'design.type_id': _inp.type_id,'design.state':_inp.state})
|
||||
count_monitor_type = await use_collection(TaskEnv.CLN_PROJECT).count_documents({'monitor.base_information.type': _inp.monitor_type,'design.state':_inp.state})
|
||||
else:
|
||||
count_nature = await use_collection(TaskEnv.CLN_PROJECT).count_documents(
|
||||
{'design.nature_id': _inp.nature_id})
|
||||
count_type = await use_collection(TaskEnv.CLN_PROJECT).count_documents({'design.type_id':_inp.type_id})
|
||||
count_monitor_type = await use_collection(TaskEnv.CLN_PROJECT).count_documents({'monitor.base_information.type': _inp.monitor_type})
|
||||
return {'count_nature':count_nature,'count_type':count_type,'count_monitor_type':count_monitor_type}
|
||||
match = {'design.state':_inp.state}
|
||||
if _inp.type_id:
|
||||
match.update({'design.type_id': _inp.type_id})
|
||||
if _inp.nature_id:
|
||||
match.update({'design.nature_id':_inp.nature_id})
|
||||
if _inp.monitor_type:
|
||||
match.update({'monitor.base_information.type': _inp.monitor_type})
|
||||
|
||||
# count_nature = await use_collection(TaskEnv.CLN_PROJECT).count_documents(
|
||||
# {'design.nature_id':_inp.nature_id,'design.state':_inp.state})
|
||||
# count_type = await use_collection(TaskEnv.CLN_PROJECT).count_documents({'design.type_id': _inp.type_id,'design.state':_inp.state})
|
||||
# count_monitor_type = await use_collection(TaskEnv.CLN_PROJECT).count_documents({'monitor.base_information.type': _inp.monitor_type,'design.state':_inp.state})
|
||||
|
||||
report = await use_collection(TaskEnv.CLN_PROJECT).aggregate([
|
||||
{"$match":match},
|
||||
{'$group': {
|
||||
'_id': "$design.state",
|
||||
'nature_id': {'$addToSet': '$design.nature_id'},
|
||||
'type_id': {'$addToSet': '$design.type_id'},
|
||||
'monitor_type': {'$addToSet': '$monitor.base_information.type'}
|
||||
}},
|
||||
{'$project': {
|
||||
'count_nature_id': {"$size": "$nature_id"},
|
||||
'count_type_id': {"$size": "$type_id"},
|
||||
'count_monitor_type': {"$size": "$monitor_type"},
|
||||
"_id": 1
|
||||
}}
|
||||
]).to_list(None)
|
||||
# count_nature = await use_collection(TaskEnv.CLN_PROJECT).count_documents(
|
||||
# {'design.nature_id': _inp.nature_id})
|
||||
# count_type = await use_collection(TaskEnv.CLN_PROJECT).count_documents({'design.type_id':_inp.type_id})
|
||||
# count_monitor_type = await use_collection(TaskEnv.CLN_PROJECT).count_documents({'monitor.base_information.type': _inp.monitor_type})
|
||||
# return {'count_nature':count_nature,'count_type':count_type,'count_monitor_type':count_monitor_type}
|
||||
return report
|
||||
|
||||
async def exist_project_state(self):
|
||||
report = await use_collection(TaskEnv.CLN_PROJECT).aggregate([
|
||||
@@ -55,4 +80,77 @@ class ReportRepository():
|
||||
}
|
||||
]).to_list(None)
|
||||
|
||||
return report
|
||||
return report
|
||||
|
||||
async def donut(self,_select:int):
|
||||
report = None
|
||||
if _select == 1:
|
||||
report = await use_collection(TaskEnv.CLN_PROJECT).aggregate([
|
||||
{"$group":{"_id":"$design.nature_id",'count':{'$sum':1}}}
|
||||
]).to_list(None)
|
||||
elif _select == 2:
|
||||
report = await use_collection(TaskEnv.CLN_PROJECT).aggregate([
|
||||
{
|
||||
"$group": {
|
||||
"_id": {
|
||||
"$cond": [
|
||||
{"$lt": ["$design.building_infrastructure", 1000]}, # Check if a < 10
|
||||
"less_than_1000",
|
||||
{
|
||||
"$cond": [
|
||||
{"$and": [{"$gte": ["$design.building_infrastructure", 1000]}, {"$lt": ["$design.building_infrastructure", 5000]}]}, # Check if 10 <= a < 20
|
||||
"between_1000_and_5000",
|
||||
{
|
||||
"$cond": [
|
||||
{"$and": [{"$gte": ["$design.building_infrastructure", 5000]}, {"$lt": ["$design.building_infrastructure", 15000]}]},
|
||||
"between_5000_and_15000",
|
||||
{
|
||||
"$cond": [
|
||||
{"$and": [{"$gte": ["$design.building_infrastructure", 15000]}, {"$lt": ["$design.building_infrastructure", 30000]}]},
|
||||
"between_15000_and_30000",
|
||||
"greater_than_or_equal_30000" # Otherwise, a >= 30
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"total": {"$sum": 1},
|
||||
}
|
||||
}
|
||||
]).to_list(None)
|
||||
|
||||
elif _select == 3:
|
||||
report = await use_collection(TaskEnv.CLN_PROJECT).aggregate([
|
||||
{"$group": {"_id": "$design.type_id", 'count': {'$sum': 1}}}
|
||||
]).to_list(None)
|
||||
return report
|
||||
|
||||
async def list_donut(self,_inp:DonutList):
|
||||
_filter = {'design.nature_id':_inp.donut_select}
|
||||
if _inp.type == 2:
|
||||
if _inp.donut_select == "less_than_1000":
|
||||
_filter = {'design.building_infrastructure': {'$lt': 1000}}
|
||||
elif _inp.donut_select == "between_1000_and_5000":
|
||||
_filter = {'design.building_infrastructure': {'$lt': 5000, "$gte": 1000 }}
|
||||
elif _inp.donut_select == "between_5000_and_15000":
|
||||
_filter = {'design.building_infrastructure': {'$lt': 15000, "$gte": 5000 }}
|
||||
elif _inp.donut_select == "between_15000_and_30000":
|
||||
_filter = {'design.building_infrastructure': {'$lt': 30000, "$gte": 15000 }}
|
||||
else:
|
||||
_filter = {'design.building_infrastructure': {'$gte': 30000}}
|
||||
elif _inp.type == 3 :
|
||||
_filter = {'design.type_id': _inp.donut_select}
|
||||
report = await use_collection(TaskEnv.CLN_PROJECT).find(_filter).to_list(None)
|
||||
|
||||
return report
|
||||
|
||||
async def delay_donut(self):
|
||||
...
|
||||
# await use_collection(TaskEnv.CLN_BILL_DELAY).aggregate([
|
||||
# {'$group':}
|
||||
# ])
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user