designed_project.py 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. #encoding:UTF8
  2. from BaseDataMaintenance.model.ots.BaseModel import BaseModel
  3. from datetime import datetime
  4. from tablestore import *
  5. from BaseDataMaintenance.common.Utils import *
  6. designed_project_partitionkey = 'partitionkey'
  7. designed_project_id = 'id'
  8. designed_project_area = 'area'
  9. designed_project_begintime = 'begintime'
  10. designed_project_city = 'city'
  11. designed_project_construct_install_fee = 'construct_install_fee'
  12. designed_project_contacts = 'contacts'
  13. designed_project_covered_area = 'covered_area'
  14. designed_project_crtime = 'crtime'
  15. designed_project_des_project_type = 'des_project_type'
  16. designed_project_district = 'district'
  17. designed_project_docids = 'docids'
  18. designed_project_elevator = 'elevator'
  19. designed_project_endtime = 'endtime'
  20. designed_project_engineer_cost = 'engineer_cost'
  21. designed_project_facade_type = 'facade_type'
  22. designed_project_facade_type2 = 'facade_type2'
  23. designed_project_floor_space = 'floor_space'
  24. designed_project_floors_num = 'floors_num'
  25. designed_project_follow_number = 'follow_number'
  26. designed_project_follows = 'follows'
  27. designed_project_full_text = 'full_text'
  28. designed_project_has_steel = 'has_steel'
  29. designed_project_high_project_name = 'high_project_name'
  30. designed_project_json_list_group = 'json_list_group'
  31. designed_project_latest_service_time = 'latest_service_time'
  32. designed_project_ordinary_name = 'ordinary_name'
  33. designed_project_page_time = 'page_time'
  34. designed_project_progress = 'progress'
  35. designed_project_project_address = 'project_address'
  36. designed_project_project_code = 'project_code'
  37. designed_project_project_description = 'project_description'
  38. designed_project_project_follow = 'project_follow'
  39. designed_project_project_investment = 'project_investment'
  40. designed_project_project_name = 'project_name'
  41. designed_project_project_nature = 'project_nature'
  42. designed_project_project_structure = 'project_structure'
  43. designed_project_project_type = 'project_type'
  44. designed_project_proportion_unit = 'proportion_unit'
  45. designed_project_province = 'province'
  46. designed_project_spids = 'spids'
  47. designed_project_status = 'status'
  48. designed_project_update_status = 'update_status'
  49. designed_project_update_time = 'update_time'
  50. designed_project_approval_list = 'approval_list'
  51. designed_project_bid_info_list = 'bid_info_list'
  52. designed_project_contract_register_list = 'contract_register_list'
  53. designed_project_construct_pic_check_list = 'construct_pic_check_list'
  54. designed_project_construct_permit_list = 'construct_permit_list'
  55. designed_project_completion_accpet_list = 'completion_accpet_list'
  56. class designed_project(BaseModel):
  57. def __init__(self,_dict):
  58. for k,v in _dict.items():
  59. self.setValue(k,v,True)
  60. self.table_name = "designed_project"
  61. def getPrimary_keys(self):
  62. return ["partitionkey","id"]
  63. def search_by_docids(self,ots_client,docids,spids):
  64. should_q = []
  65. for _docid in docids.split(","):
  66. should_q.append(TermQuery("docids",_docid))
  67. for _spid in spids.split(","):
  68. should_q.append(TermQuery("spids",_spid))
  69. _begin = 0
  70. _step = 20
  71. list_dict = []
  72. while 1:
  73. _end = _begin +_step
  74. bool_query = BoolQuery(should_queries=should_q[_begin:_end])
  75. columns = ["status"]
  76. rows, next_token, total_count, is_all_succeed = ots_client.search("designed_project", "designed_project_index",
  77. SearchQuery(bool_query, limit=100,get_total_count=True),
  78. ColumnsToGet(columns,return_type=ColumnReturnType.SPECIFIED))
  79. list_dict.extend(getRow_ots(rows))
  80. _begin = _end
  81. if _begin>=len(should_q):
  82. break
  83. list_dict_final = []
  84. set_id = set()
  85. for _dict in list_dict:
  86. if _dict.get("id","") in set_id:
  87. continue
  88. list_dict_final.append(_dict)
  89. set_id.add(_dict.get("id",""))
  90. return list_dict_final
  91. def getAttribute_turple(self):
  92. _list = []
  93. for _key in self.getAttribute_keys():
  94. if _key=="all_columns":
  95. continue
  96. _v = self.getProperties().get(_key)
  97. if _v is not None:
  98. if isinstance(_v,list):
  99. _v = json.dumps(_v)
  100. _list.append((_key,_v))
  101. return _list
  102. def update_row(self,ots_client,retrytimes=3, delete=1):
  103. primary_key = self.getPrimaryKey_turple()
  104. update_of_attribute_columns = {
  105. 'PUT' : self.getAttribute_turple()
  106. }
  107. row = Row(primary_key,update_of_attribute_columns)
  108. condition = Condition('IGNORE')
  109. for i in range(retrytimes):
  110. try:
  111. if self.exists_row(ots_client) and delete:
  112. self.delete_row(ots_client)
  113. consumed, return_row = ots_client.update_row(self.table_name, row, condition)
  114. return True
  115. # 客户端异常,一般为参数错误或者网络异常。
  116. except OTSClientError as e:
  117. traceback.print_exc()
  118. log("update row failed, http_status:%s, error_message:%s" % (str(e.get_http_status()), e.get_error_message()))
  119. # raise e
  120. # 服务端异常,一般为参数错误或者流控错误。
  121. except OTSServiceError as e:
  122. traceback.print_exc()
  123. log("update row failed, http_status:%s, error_code:%s, error_message:%s, request_id:%s" % (str(e.get_http_status()), e.get_error_code(), e.get_error_message(), e.get_request_id()))
  124. # raise e
  125. except Exception as e:
  126. traceback.print_exc()
  127. pass
  128. # raise e
  129. return False
  130. # log ('update succeed, consume %s write cu.' % consumed.write)
  131. def update_project(self,ots_client):
  132. docids = self.__dict__.get("docids","")
  133. spids = self.__dict__.get("spids","")
  134. #判断是否有存量生成项目,有则更新且删除多余的
  135. list_dict = self.search_by_docids(ots_client,docids,spids)
  136. if len(list_dict)>0:
  137. for _dict in list_dict[1:]:
  138. _designed_delete = designed_project(_dict)
  139. _designed_delete.setValue("status", "404", True)
  140. current_time = datetime.now()
  141. current_time = current_time.strftime('%Y-%m-%d %H:%M:%S')
  142. _designed_delete.setValue("update_time", current_time, True)
  143. _designed_delete.update_project(ots_client)
  144. # _designed_delete.delete_row(ots_client)
  145. _designed_update = designed_project(list_dict[0])
  146. properties = _designed_update.getProperties()
  147. _partitionkey = properties.get("partitionkey")
  148. _id = properties.get("id")
  149. self.setProperties("partitionkey",_partitionkey)
  150. self.setProperties("id",_id)
  151. self.update_row(ots_client)
  152. if __name__=="__main__":
  153. s = '{"project_name": "\u6587\u5b89\u53bf\u57ce\u5e02\u5efa\u8bbe\u53d1\u5c55\u6709\u9650\u516c\u53f8\u7efc\u5408\u4fbf\u6c11\u670d\u52a1\u4e2d\u5fc3\u9879\u76ee", "full_text": "\u6587\u5b89\u53bf\u57ce\u5e02\u5efa\u8bbe\u53d1\u5c55\u6709\u9650\u516c\u53f8\u7efc\u5408\u4fbf\u6c11\u670d\u52a1\u4e2d\u5fc3\u9879\u76ee\u9879\u76ee\u6982\u51b5\u4e0e\u62db\u6807\u8303\u56f4\uff0c2.1\u9879\u76ee\u6982\u51b5\uff1a2.1\u5de5\u7a0b\u540d\u79f0\uff1a\u6587\u5b89\u53bf\u57ce\u5e02\u5efa\u8bbe\u53d1\u5c55\u6709\u9650\u516c\u53f8\u7efc\u5408\u4fbf\u6c11\u670d\u52a1\u4e2d\u5fc3\u9879\u76ee\u8bbe\u8ba12.2\u5efa\u8bbe\u5730\u5740\uff1a\u6587\u5b89\u53bf\u4e2d\u5fc3\u57ce\u533a\u539f\u6587\u5b89\u53bf\u7b2c\u4e00\u4e2d\u5b66\u51852.3\u5de5\u7a0b\u6982\u51b5\uff1a\u672c\u9879\u76ee\u5360\u5730\u9762\u79ef49794.49\u5e73\u65b9\u7c73\uff0c\u603b\u5efa\u7b51\u9762\u79ef50477.17\u5e73\u65b9\u7c73\uff0c\u5bf9\u539f\u57409\u680b\u5efa\u7b51\u4f53\u8fdb\u884c\u5185\u5916\u90e8\u88c5\u4fee\u63d0\u5347\u6539\u9020\uff0c\u5bf9\u9053\u8def\u5de5\u7a0b\u63d0\u5347\u6539\u9020\u3002\u65b0\u5efa\u9644\u5c5e\u7528\u623f\uff0c\u914d\u5957\u76d1\u63a7\u8bbe\u5907\u53ca\u5176\u4ed6\u5ba4\u5916\u5de5\u7a0b\u7b49\uff0c\u62c6\u9664\u73b0\u6709\u90e8\u5206\u5efa\u7b51\u30022.4\u6807\u6bb5\u5212\u5206\uff1a\u4e00\u4e2a\u6807\u6bb52.5\u8bbe\u8ba1\u670d\u52a1\u671f\u9650\uff1a\u5408\u540c\u7b7e\u8ba2\u4e4b\u65e5\u8d7750\u65e5\u5386\u5929\u5185\u5b8c\u6210\u8bbe\u8ba1\u6210\u679c\u62a5\u544a2.6\u8d28\u91cf\u8981\u6c42\uff1a\u5408\u683c\uff0c\u6ee1\u8db3\u73b0\u884c\u8bbe\u8ba1\u89c4\u8303\u6807\u51c6\uff0c2.2\u62db\u6807\u8303\u56f4\uff1a\u672c\u9879\u76ee\u65bd\u5de5\u56fe\u8bbe\u8ba1\u4ee5\u53ca\u5176\u4ed6\u76f8\u5173\u670d\u52a1\u5de5\u4f5c\uff0c(\u8bf4\u660e\u672c\u6b21\u62db\u6807\u9879\u76ee\u7684\u5efa\u8bbe\u5730\u70b9\u3001\u89c4\u6a21\u3001\u8ba1\u5212\u5de5\u671f\u3001\u62db\u6807\u8303\u56f4\u3001\u6807\u6bb5\u5212\u5206", "high_project_name": "\u6587\u5b89\u53bf\u57ce\u5e02\u5efa\u8bbe\u53d1\u5c55\u6709\u9650\u516c\u53f8\u7efc\u5408\u4fbf\u6c11\u670d\u52a1\u4e2d\u5fc3\u9879\u76ee", "update_time": "2023-05-16", "status": "1", "page_time": "2023-05-15", "docids": "265407137,264467735,323405252,209966750,323337928,215629840,264446259,264577762,209049408,208428670,215595257,258632899", "follow_number": 6, "follows": "[{\"mdate\": \"2022-01-14 00:00:00\", \"id\": 4756009807427665921, \"progress_remark\": \"2021-12-16,\u9879\u76ee\u5904\u4e8e\u8bbe\u8ba1\u9636\u6bb5\u7684\u62db\u6807\u9636\u6bb5\uff1b\u622a\u6b622022-01-14\u786e\u5b9a\u8bbe\u8ba1\u9636\u6bb5\u4e2d\u6807\u4eba\u4e3a\u4e2d\u8054\u5408\u76db\u79d1\u6280\u6709\u9650\u516c\u53f8\", \"version\": \"\u8ddf\u8fdb1\", \"crtime\": \"2023-05-16 10:05:00\", \"docid\": 208428670, \"progress\": \"\u8bbe\u8ba1\u9636\u6bb5\"}, {\"mdate\": \"2022-01-14 00:00:00\", \"id\": 4756009811311591425, \"progress_remark\": \"\u622a\u6b622022-01-14,\u9879\u76ee\u5904\u4e8e\u8bbe\u8ba1\u9636\u6bb5\uff1b\u786e\u5b9a\u8bbe\u8ba1\u9636\u6bb5\u4e2d\u6807\u4eba\u4e3a\u4e2d\u8054\u5408\u76db\u79d1\u6280\u6709\u9650\u516c\u53f8\", \"version\": \"\u8ddf\u8fdb2\", \"crtime\": \"2023-05-16 10:05:01\", \"docid\": 215629840, \"progress\": \"\u8bbe\u8ba1\u9636\u6bb5\"}, {\"mdate\": \"2022-09-02 00:00:00\", \"id\": 4756009811399671809, \"progress_remark\": \"2022-08-08,\u9879\u76ee\u5904\u4e8e\u65bd\u5de5\u5728\u5efa\u7684\u62db\u6807\u9636\u6bb5\uff1b\u622a\u6b622022-09-02\", \"version\": \"\u8ddf\u8fdb3\", \"crtime\": \"2023-05-16 10:05:01\", \"docid\": 258632899, \"progress\": \"\u65bd\u5de5\u5728\u5efa\"}, {\"mdate\": \"2022-09-06 00:00:00\", \"id\": 4756009811647135745, \"progress_remark\": \"\u622a\u6b622022-09-06\", \"version\": \"\u8ddf\u8fdb4\", \"crtime\": \"2023-05-16 10:05:01\", \"docid\": 264577762, \"progress\": \"\u65bd\u5de5\u5728\u5efa\"}, {\"mdate\": \"2022-09-08 00:00:00\", \"id\": 4756009812041400321, \"progress_remark\": \"\u622a\u6b622022-09-08,\u9879\u76ee\u5904\u4e8e\u65bd\u5de5\u5728\u5efa\uff1b\", \"version\": \"\u8ddf\u8fdb5\", \"crtime\": \"2023-05-16 10:05:01\", \"docid\": 265407137, \"progress\": \"\u65bd\u5de5\u5728\u5efa\"}, {\"mdate\": \"2023-05-15 00:00:00\", \"id\": 4756009812372750337, \"progress_remark\": \"2023-05-15,\u9879\u76ee\u5904\u4e8e\u8bbe\u8ba1\u9636\u6bb5\u7684\u62db\u6807\u9636\u6bb5\uff1b\u622a\u6b622023-05-15\u786e\u5b9a\u8bbe\u8ba1\u9636\u6bb5\u4e2d\u6807\u4eba\u4e3a\u6cb3\u5317\u94ed\u9510\u5de5\u7a0b\u54a8\u8be2\u6709\u9650\u516c\u53f8\", \"version\": \"\u8ddf\u8fdb6\", \"crtime\": \"2023-05-16 10:05:01\", \"docid\": 323337928, \"progress\": \"\u8bbe\u8ba1\u9636\u6bb5\"}]", "update_status": "0", "ordinary_name": "\u6587\u5b89\u53bf\u57ce\u5e02\u5efa\u8bbe\u53d1\u5c55\u6709\u9650\u516c\u53f8\u7efc\u5408\u4fbf\u6c11\u670d\u52a1\u4e2d\u5fc3\u9879\u76ee", "floor_space": "\u603b\u5efa\u7b51\u9762\u79ef50477.17\u5e73\u65b9\u7c73", "project_follow": "", "project_address": "", "area": "\u5eca\u574a", "progress": "\u8bbe\u8ba1\u9636\u6bb5", "spids": "", "endtime": "", "crtime": "2023-05-16 10:05:00", "begintime": "", "project_description": "\u9879\u76ee\u6982\u51b5\u4e0e\u62db\u6807\u8303\u56f4\uff0c2.1\u9879\u76ee\u6982\u51b5\uff1a2.1\u5de5\u7a0b\u540d\u79f0\uff1a\u6587\u5b89\u53bf\u57ce\u5e02\u5efa\u8bbe\u53d1\u5c55\u6709\u9650\u516c\u53f8\u7efc\u5408\u4fbf\u6c11\u670d\u52a1\u4e2d\u5fc3\u9879\u76ee\u8bbe\u8ba12.2\u5efa\u8bbe\u5730\u5740\uff1a\u6587\u5b89\u53bf\u4e2d\u5fc3\u57ce\u533a\u539f\u6587\u5b89\u53bf\u7b2c\u4e00\u4e2d\u5b66\u51852.3\u5de5\u7a0b\u6982\u51b5\uff1a\u672c\u9879\u76ee\u5360\u5730\u9762\u79ef49794.49\u5e73\u65b9\u7c73\uff0c\u603b\u5efa\u7b51\u9762\u79ef50477.17\u5e73\u65b9\u7c73\uff0c\u5bf9\u539f\u57409\u680b\u5efa\u7b51\u4f53\u8fdb\u884c\u5185\u5916\u90e8\u88c5\u4fee\u63d0\u5347\u6539\u9020\uff0c\u5bf9\u9053\u8def\u5de5\u7a0b\u63d0\u5347\u6539\u9020\u3002\u65b0\u5efa\u9644\u5c5e\u7528\u623f\uff0c\u914d\u5957\u76d1\u63a7\u8bbe\u5907\u53ca\u5176\u4ed6\u5ba4\u5916\u5de5\u7a0b\u7b49\uff0c\u62c6\u9664\u73b0\u6709\u90e8\u5206\u5efa\u7b51\u30022.4\u6807\u6bb5\u5212\u5206\uff1a\u4e00\u4e2a\u6807\u6bb52.5\u8bbe\u8ba1\u670d\u52a1\u671f\u9650\uff1a\u5408\u540c\u7b7e\u8ba2\u4e4b\u65e5\u8d7750\u65e5\u5386\u5929\u5185\u5b8c\u6210\u8bbe\u8ba1\u6210\u679c\u62a5\u544a2.6\u8d28\u91cf\u8981\u6c42\uff1a\u5408\u683c\uff0c\u6ee1\u8db3\u73b0\u884c\u8bbe\u8ba1\u89c4\u8303\u6807\u51c6\uff0c2.2\u62db\u6807\u8303\u56f4\uff1a\u672c\u9879\u76ee\u65bd\u5de5\u56fe\u8bbe\u8ba1\u4ee5\u53ca\u5176\u4ed6\u76f8\u5173\u670d\u52a1\u5de5\u4f5c\uff0c(\u8bf4\u660e\u672c\u6b21\u62db\u6807\u9879\u76ee\u7684\u5efa\u8bbe\u5730\u70b9\u3001\u89c4\u6a21\u3001\u8ba1\u5212\u5de5\u671f\u3001\u62db\u6807\u8303\u56f4\u3001\u6807\u6bb5\u5212\u5206", "latest_service_time": "", "covered_area": "\u603b\u5efa\u7b51\u9762\u79ef50477.17\u5e73\u65b9\u7c73", "id": 4756009812641185793, "des_project_type": "10", "partitionkey": 194, "project_type": "\u6559\u80b2\u53ca\u7814\u7a76\u5efa\u7b51", "project_code": "ZYSJZ2021-12036", "contacts": "[{\"cellphone\": \"16631127926\", \"id\": 4756009807276670977, \"company_name\": \"\u4e2d\u8054\u5408\u76db\u79d1\u6280\u6709\u9650\u516c\u53f8\", \"type\": \"\u8bbe\u8ba1\u5355\u4f4d\", \"contact_name\": \"\u738b\u7855\u51ef\"}, {\"cellphone\": \"13780515677\", \"id\": 4756009807297642497, \"company_name\": \"\u4e2d\u8054\u5408\u76db\u79d1\u6280\u6709\u9650\u516c\u53f8\", \"type\": \"\u8bbe\u8ba1\u5355\u4f4d\", \"contact_name\": \"\u79e6\u4e49\u582a\"}, {\"cellphone\": \"13931670665\", \"id\": 4756009807394111489, \"company_name\": \"\u6587\u5b89\u53bf\u57ce\u5e02\u5efa\u8bbe\u53d1\u5c55\u6709\u9650\u516c\u53f8\", \"type\": \"\u4e1a\u4e3b\u5355\u4f4d\", \"contact_name\": \"\u5f20\u7acb\u5f3a\"}, {\"cellphone\": \"13833633069\", \"id\": 4756009807415083009, \"company_name\": \"\u6587\u5b89\u53bf\u57ce\u5e02\u5efa\u8bbe\u53d1\u5c55\u6709\u9650\u516c\u53f8\", \"type\": \"\u4e1a\u4e3b\u5355\u4f4d\", \"contact_name\": \"\u738b\u52c7\"}, {\"cellphone\": \"13933924903\", \"id\": 4756009812280475649, \"company_name\": \"\u6cb3\u5317\u94ed\u9510\u5de5\u7a0b\u54a8\u8be2\u6709\u9650\u516c\u53f8\", \"type\": \"\u8bbe\u8ba1\u5355\u4f4d\", \"contact_name\": \"\u8d75\u53cc\u829d\"}, {\"cellphone\": \"13722631316\", \"id\": 4756009812314030081, \"company_name\": \"\u6cb3\u5317\u94ed\u9510\u5de5\u7a0b\u54a8\u8be2\u6709\u9650\u516c\u53f8\", \"type\": \"\u8bbe\u8ba1\u5355\u4f4d\", \"contact_name\": \"\u9ad8\u4fca\u666f\"}, {\"cellphone\": \"13476568963\", \"id\": 4756009812578271233, \"company_name\": \"\u4e2d\u5b87\u4fe1\u8fbe\u9879\u76ee\u7ba1\u7406\u6709\u9650\u516c\u53f8\", \"type\": \"\u4ee3\u7406\u5355\u4f4d\", \"contact_name\": \"\u60e0\u6811\u519b\", \"address\": \"\u77f3\u5bb6\u5e84\u5e02\u6865\u897f\u533a\u6c11\u751f\u8def66\u53f7\u5609\u9ca4\u5c0f\u533a\uff08\u5357\u533a\uff096-3-1801\"}, {\"cellphone\": \"13933026974\", \"id\": 4756009812603437057, \"company_name\": \"\u4e2d\u5b87\u4fe1\u8fbe\u9879\u76ee\u7ba1\u7406\u6709\u9650\u516c\u53f8\", \"type\": \"\u4ee3\u7406\u5355\u4f4d\", \"contact_name\": \"\u674e\u6cbb\u6cc9\", \"address\": \"\u77f3\u5bb6\u5e84\u5e02\u6865\u897f\u533a\u6c11\u751f\u8def66\u53f7\u5609\u9ca4\u5c0f\u533a\uff08\u5357\u533a\uff096-3-1801\"}]"}'
  154. a = designed_project(json.loads(s))
  155. print(a.getProperties())