123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- from BaseDataMaintenance.model.ots.BaseModel import BaseModel
- from BaseDataMaintenance.common.Utils import *
- from BaseDataMaintenance.primarykey.startSnowflake import get_guid
- import json
- class proposedBuilding_tmp(BaseModel):
- def __init__(self,_dict):
- for k,v in _dict.items():
- self.setValue(k,v,True)
- self.table_name = "proposedBuilding_tmp"
- def getPrimary_keys(self):
- return ["uuid"]
- def getFollows(self,list_group):
- dict_stage = {}
- for _group in list_group:
- _stage = _group["stage"]
- if _stage not in dict_stage:
- dict_stage[_stage] = []
- dict_stage[_stage].append(_group)
- LIST_STEGES = ["施工在建","施工准备","环评阶段","设计阶段"]
- for k,v in dict_stage.items():
- v.sort(key=lambda x:x.get("page_time",""),reverse=True)
- list_follows = []
- last_stage = ""
- last_pageTime = ""
- for _STAGE_i in range(len(LIST_STEGES)):
- _STAGE = LIST_STEGES[_STAGE_i]
- for _group in dict_stage.get(_STAGE,[]):
- current_stage = _group.get("stage","")
- current_pageTime = _group.get("page_time","")
- if last_stage=="":
- last_stage = current_stage
- last_pageTime = current_pageTime
- if last_stage in LIST_STEGES[:_STAGE_i]:
- continue
- if current_pageTime>last_pageTime:
- continue
- last_stage = current_stage
- last_pageTime = current_pageTime
- list_follows.append(_group)
- list_follows.reverse()
- return list_follows
- def getContacts(self,ots_client,_group):
- _contacts = []
- enterprise_dict = self.search(ots_client,"enterprise",[("name",_group["tenderee"])],["province","contacts","address"])
- cellphone = ""
- phone = ""
- if isCellphone(_group["tenderee_phone"]):
- cellphone = _group["tenderee_phone"]
- else:
- phone = _group["tenderee_phone"]
- _dict_contact = {"address":enterprise_dict.get("address",""),"cellphone":cellphone,"phone":phone,
- "company_name":_group["tenderee"],"contact_name":_group["tenderee_contact"],
- "type":"业主单位","id":get_guid()}
- _dict_contact = popNoneFromDict(_dict_contact)
- _contacts.append(_dict_contact)
- _docid = int(_group.get("docid"))
- document_dict = self.search(ots_client,"document",[("partitionkey",_docid%500+1),("docid",_docid)],["sub_docs_json"])
- win_tenderer = ""
- if document_dict is not None:
- sub_docs_json = document_dict.get("sub_docs_json",'[{}]')
- for sub_docs in json.loads(sub_docs_json):
- win_tenderer = sub_docs.get("win_tenderer","")
- if win_tenderer!="":
- enterprise_dict = self.search(ots_client,"enterprise",[("name",win_tenderer)],["province","contacts","address"])
- if enterprise_dict is not None:
- win_contacts = json.loads(enterprise_dict.get("contacts","[]"))
- for _dict in win_contacts:
- cellphone = ""
- contact_name = ""
- phone = ""
- if _dict.get("contact_person","")!="" and (_dict.get("mobile_no","")!="" or _dict.get("phone_no","")!=""):
- contact_name = _dict.get("contact_person","")
- cellphone = _dict.get("mobile_no","")
- phone = _dict.get("phone_no","")
- _dict_contact = {"address":enterprise_dict.get("address",""),"cellphone":cellphone,
- "phone":phone,"company_name":win_tenderer,"contact_name":contact_name,
- "type":"%s单位"%(_group.get("stage","")[:2]),"id":get_guid()}
- _dict_contact = popNoneFromDict(_dict_contact)
- _contacts.append(_dict_contact)
- return _contacts
- def toDesigned_project(self,ots_client):
- if self.json_list_group is None:
- return None
- list_group = json.loads(self.json_list_group)
- for _group in list_group:
- if "page_time" not in _group or _group["page_time"] is None:
- _group["page_time"] = ""
- list_group.sort(key=lambda x:x["page_time"])
- set_docid = set()
- set_contacts = set()
- list_contacts = []
- set_follows = set()
- list_follows = []
- _version_index = 1
- crtime = getCurrent_date()
- floor_space = ""
- covered_area = ""
- project_address = ""
- begintime = ""
- endtime = ""
- project_description = ''
- project_name = ""
- high_project_name = ""
- ordinary_name = ""
- project_follow = ""
- page_time = ""
- progress = ""
- des_project_type = "30"
- status = "1"
- id = get_guid()
- partitionkey = id%200+1
- update_status = "0"
- update_time = getCurrent_date("%Y-%m-%d")
- project_code = ""
- project_type = ""
- area = ""
- for _group in self.getFollows(list_group):
- set_docid.add(str(_group["docid"]))
- if floor_space=="":
- floor_space = _group.get("proportion","")
- covered_area = floor_space
- if begintime=="" and _group.get("begin_time") is not None:
- begintime = _group.get("begin_time","")
- if endtime=="" and _group.get("endtime") is not None:
- endtime = _group.get("endtime","")
- if project_description=="":
- project_description = _group.get("projectDigest","")
- if project_code=="":
- project_code = _group.get("project_code","")
- if project_name=="":
- project_name = _group.get("project_name","")
- high_project_name = project_name
- ordinary_name = project_name
- if page_time =="":
- page_time = _group.get("page_time","")
- if project_type=="":
- project_type = _group.get("industry","")
- if area=="":
- area = _group.get("city","")
- list_contacts.extend(self.getContacts(ots_client,_group))
- _follow = "%s-%s"%(_group["stage"],_group["page_time"])
- if _follow not in set_follows:
- list_follows.append({"id":get_guid(),"crtime":getCurrent_date(),"mdate":"%s 00:00:00"%_group["page_time"],
- "progress":_group["stage"],"progress_remark":"截止%s,该项目处于%s阶段"%(_group["page_time"],_group["stage"]),
- "version":"跟进%d"%(_version_index)})
- set_follows.add(_follow)
- project_follow = "跟进%d"%(_version_index)
- _version_index += 1
- progress = _group["stage"]
- legal_contacts = []
- for _c in list_contacts:
- _line = "%s-%s-%s-%s"%(_c.get("company_name",""),_c.get("contact_name",""),_c.get("cellphone",""),_c.get("phone",""))
- if _line not in set_follows:
- legal_contacts.append(_c)
- set_follows.add(_line)
- project_dict = {"crtime":crtime,"floor_space":floor_space,"project_address":project_address,
- "begintime":begintime,"endtime":endtime,"project_description":project_description,
- "project_name":project_name,"ordinary_name":ordinary_name,"high_project_name":high_project_name,
- "project_follow":project_follow,"page_time":page_time,"progress":progress,"contacts":json.dumps(legal_contacts,ensure_ascii=False),
- "follows":json.dumps(list_follows,ensure_ascii=False),"partitionkey":partitionkey,"id":id,
- "docids":",".join(list(set_docid)),"des_project_type":des_project_type,"status":status,"covered_area":covered_area,
- "update_status":update_status,"update_time":update_time,"project_code":project_code,
- "project_type":project_type,"area":area}
- return project_dict
- if __name__=="__main__":
- a = proposedBuilding_tmp("1",'2',"3")
- print(dir(a))
- print(a.getAttribute_keys())
|