proposedBuilding_tmp.py 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. from BaseDataMaintenance.model.ots.BaseModel import BaseModel
  2. from BaseDataMaintenance.common.Utils import *
  3. from BaseDataMaintenance.primarykey.startSnowflake import get_guid
  4. import json
  5. class proposedBuilding_tmp(BaseModel):
  6. def __init__(self,_dict):
  7. for k,v in _dict.items():
  8. self.setValue(k,v,True)
  9. self.table_name = "proposedBuilding_tmp"
  10. def getPrimary_keys(self):
  11. return ["uuid"]
  12. def getFollows(self,list_group):
  13. dict_stage = {}
  14. for _group in list_group:
  15. _stage = _group["stage"]
  16. if _stage not in dict_stage:
  17. dict_stage[_stage] = []
  18. dict_stage[_stage].append(_group)
  19. LIST_STEGES = ["施工在建","施工准备","环评阶段","设计阶段"]
  20. for k,v in dict_stage.items():
  21. v.sort(key=lambda x:x.get("page_time",""),reverse=True)
  22. list_follows = []
  23. last_stage = ""
  24. last_pageTime = ""
  25. for _STAGE_i in range(len(LIST_STEGES)):
  26. _STAGE = LIST_STEGES[_STAGE_i]
  27. for _group in dict_stage.get(_STAGE,[]):
  28. current_stage = _group.get("stage","")
  29. current_pageTime = _group.get("page_time","")
  30. if last_stage=="":
  31. last_stage = current_stage
  32. last_pageTime = current_pageTime
  33. if last_stage in LIST_STEGES[:_STAGE_i]:
  34. continue
  35. if current_pageTime>last_pageTime:
  36. continue
  37. last_stage = current_stage
  38. last_pageTime = current_pageTime
  39. list_follows.append(_group)
  40. list_follows.reverse()
  41. return list_follows
  42. def getContacts(self,ots_client,_group):
  43. _contacts = []
  44. enterprise_dict = self.search(ots_client,"enterprise",[("name",_group["tenderee"])],["province","contacts","address"])
  45. cellphone = ""
  46. phone = ""
  47. if isCellphone(_group["tenderee_phone"]):
  48. cellphone = _group["tenderee_phone"]
  49. else:
  50. phone = _group["tenderee_phone"]
  51. _dict_contact = {"address":enterprise_dict.get("address",""),"cellphone":cellphone,"phone":phone,
  52. "company_name":_group["tenderee"],"contact_name":_group["tenderee_contact"],
  53. "type":"业主单位","id":get_guid()}
  54. _dict_contact = popNoneFromDict(_dict_contact)
  55. _contacts.append(_dict_contact)
  56. _docid = int(_group.get("docid"))
  57. document_dict = self.search(ots_client,"document",[("partitionkey",_docid%500+1),("docid",_docid)],["sub_docs_json"])
  58. win_tenderer = ""
  59. if document_dict is not None:
  60. sub_docs_json = document_dict.get("sub_docs_json",'[{}]')
  61. for sub_docs in json.loads(sub_docs_json):
  62. win_tenderer = sub_docs.get("win_tenderer","")
  63. if win_tenderer!="":
  64. enterprise_dict = self.search(ots_client,"enterprise",[("name",win_tenderer)],["province","contacts","address"])
  65. if enterprise_dict is not None:
  66. win_contacts = json.loads(enterprise_dict.get("contacts","[]"))
  67. for _dict in win_contacts:
  68. cellphone = ""
  69. contact_name = ""
  70. phone = ""
  71. if _dict.get("contact_person","")!="" and (_dict.get("mobile_no","")!="" or _dict.get("phone_no","")!=""):
  72. contact_name = _dict.get("contact_person","")
  73. cellphone = _dict.get("mobile_no","")
  74. phone = _dict.get("phone_no","")
  75. _dict_contact = {"address":enterprise_dict.get("address",""),"cellphone":cellphone,
  76. "phone":phone,"company_name":win_tenderer,"contact_name":contact_name,
  77. "type":"%s单位"%(_group.get("stage","")[:2]),"id":get_guid()}
  78. _dict_contact = popNoneFromDict(_dict_contact)
  79. _contacts.append(_dict_contact)
  80. return _contacts
  81. def toDesigned_project(self,ots_client):
  82. if self.json_list_group is None:
  83. return None
  84. list_group = json.loads(self.json_list_group)
  85. for _group in list_group:
  86. if "page_time" not in _group or _group["page_time"] is None:
  87. _group["page_time"] = ""
  88. list_group.sort(key=lambda x:x["page_time"])
  89. set_docid = set()
  90. set_contacts = set()
  91. list_contacts = []
  92. set_follows = set()
  93. list_follows = []
  94. _version_index = 1
  95. crtime = getCurrent_date()
  96. floor_space = ""
  97. covered_area = ""
  98. project_address = ""
  99. begintime = ""
  100. endtime = ""
  101. project_description = ''
  102. project_name = ""
  103. high_project_name = ""
  104. ordinary_name = ""
  105. project_follow = ""
  106. page_time = ""
  107. progress = ""
  108. des_project_type = "30"
  109. status = "1"
  110. id = get_guid()
  111. partitionkey = id%200+1
  112. update_status = "0"
  113. update_time = getCurrent_date("%Y-%m-%d")
  114. project_code = ""
  115. project_type = ""
  116. area = ""
  117. for _group in self.getFollows(list_group):
  118. set_docid.add(str(_group["docid"]))
  119. if floor_space=="":
  120. floor_space = _group.get("proportion","")
  121. covered_area = floor_space
  122. if begintime=="" and _group.get("begin_time") is not None:
  123. begintime = _group.get("begin_time","")
  124. if endtime=="" and _group.get("endtime") is not None:
  125. endtime = _group.get("endtime","")
  126. if project_description=="":
  127. project_description = _group.get("projectDigest","")
  128. if project_code=="":
  129. project_code = _group.get("project_code","")
  130. if project_name=="":
  131. project_name = _group.get("project_name","")
  132. high_project_name = project_name
  133. ordinary_name = project_name
  134. if page_time =="":
  135. page_time = _group.get("page_time","")
  136. if project_type=="":
  137. project_type = _group.get("industry","")
  138. if area=="":
  139. area = _group.get("city","")
  140. list_contacts.extend(self.getContacts(ots_client,_group))
  141. _follow = "%s-%s"%(_group["stage"],_group["page_time"])
  142. if _follow not in set_follows:
  143. list_follows.append({"id":get_guid(),"crtime":getCurrent_date(),"mdate":"%s 00:00:00"%_group["page_time"],
  144. "progress":_group["stage"],"progress_remark":"截止%s,该项目处于%s阶段"%(_group["page_time"],_group["stage"]),
  145. "version":"跟进%d"%(_version_index)})
  146. set_follows.add(_follow)
  147. project_follow = "跟进%d"%(_version_index)
  148. _version_index += 1
  149. progress = _group["stage"]
  150. legal_contacts = []
  151. for _c in list_contacts:
  152. _line = "%s-%s-%s-%s"%(_c.get("company_name",""),_c.get("contact_name",""),_c.get("cellphone",""),_c.get("phone",""))
  153. if _line not in set_follows:
  154. legal_contacts.append(_c)
  155. set_follows.add(_line)
  156. project_dict = {"crtime":crtime,"floor_space":floor_space,"project_address":project_address,
  157. "begintime":begintime,"endtime":endtime,"project_description":project_description,
  158. "project_name":project_name,"ordinary_name":ordinary_name,"high_project_name":high_project_name,
  159. "project_follow":project_follow,"page_time":page_time,"progress":progress,"contacts":json.dumps(legal_contacts,ensure_ascii=False),
  160. "follows":json.dumps(list_follows,ensure_ascii=False),"partitionkey":partitionkey,"id":id,
  161. "docids":",".join(list(set_docid)),"des_project_type":des_project_type,"status":status,"covered_area":covered_area,
  162. "update_status":update_status,"update_time":update_time,"project_code":project_code,
  163. "project_type":project_type,"area":area}
  164. return project_dict
  165. if __name__=="__main__":
  166. a = proposedBuilding_tmp("1",'2',"3")
  167. print(dir(a))
  168. print(a.getAttribute_keys())