app.py 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493
  1. # coding:utf-8
  2. import inspect
  3. import csv
  4. from docs.config import abnormal_config
  5. from tables.fields.toptype import ToptypeChecker
  6. from tables.fields.subtype import SubtypeChecker
  7. from tables.fields.s_winner import WinnerChecker
  8. from tables.fields.buyer import BuyerChecker
  9. from tables.fields.bidamount import BidAmountChecker
  10. from tables.fields.budget import BudgetChecker
  11. from tables.fields.NoField import NoFieldChecker
  12. from tables.fields.title import TitleChecker
  13. from tables.fields.area import AreaChecker
  14. from tables.fields.projectcode import ProjectcodeChecker
  15. from tables.fields.projectname import ProjectnameChecker
  16. from tables.fields.subpackage import SubpackageChecker
  17. from tables import CatchContentObject
  18. from tables.fields.fieldtype import FieldTypeChecker
  19. from tables.fields.purchasing import PurchasingChecker
  20. from tables.fields.publishtime import PublishtimeChecker
  21. from tables.fields.city import CityChecker
  22. from tables.fields.district import DistrictChecker
  23. from tables.fields.docstarttime import DocstarttimeChecker
  24. from tables.fields.docendtime import DocendtimeChecker
  25. from tables.fields.bidstarttime import BidstarttimeChecker
  26. from tables.fields.bidendtime import BidendtimeChecker
  27. from tables.fields.bidopentime import BidopentimeChecker
  28. from tables.fields.capital import CapitalChecker
  29. toptype_checker = ToptypeChecker()
  30. subtype_checker = SubtypeChecker()
  31. area_checker = AreaChecker()
  32. winner_checker = WinnerChecker()
  33. buyer_checker = BuyerChecker()
  34. amount_checker = BidAmountChecker()
  35. budget_checker = BudgetChecker()
  36. title_checker = TitleChecker()
  37. nofield_checker = NoFieldChecker()
  38. projectname_checker = ProjectnameChecker()
  39. projectcode_checker = ProjectcodeChecker()
  40. publishtime_checker = PublishtimeChecker()
  41. docstarttime_checker = DocstarttimeChecker()
  42. docendtime_checker = DocendtimeChecker()
  43. bidstarttime_checker = BidstarttimeChecker()
  44. bidendtime_checker = BidendtimeChecker()
  45. bidopentime_checker = BidopentimeChecker()
  46. multipackage_checker = SubpackageChecker()
  47. fieldtype_checker = FieldTypeChecker()
  48. purchasing_checker = PurchasingChecker()
  49. city_checker = CityChecker()
  50. district_checker = DistrictChecker()
  51. capital_checker = CapitalChecker()
  52. # 定义检查链
  53. check_chain = {
  54. "toptype": {
  55. "checker": toptype_checker,
  56. },
  57. "subtype": {
  58. "checker": subtype_checker,
  59. },
  60. "title": {
  61. "checker": title_checker,
  62. },
  63. "projectname": {
  64. "checker": projectname_checker,
  65. },
  66. "s_winner": {
  67. "checker": winner_checker,
  68. },
  69. "buyer": {
  70. "checker": buyer_checker,
  71. },
  72. "projectcode": {
  73. "checker": projectcode_checker,
  74. },
  75. "bidamount": {
  76. "checker": amount_checker,
  77. },
  78. "budget": {
  79. "checker": budget_checker,
  80. },
  81. "area": {
  82. "checker": area_checker,
  83. },
  84. "city": {
  85. "checker": city_checker,
  86. },
  87. "district": {
  88. "checker": district_checker,
  89. },
  90. "docstarttime":{
  91. "checker":docstarttime_checker,
  92. },
  93. "docendtime": {
  94. "checker": docendtime_checker,
  95. },
  96. "bidstarttime": {
  97. "checker": bidstarttime_checker,
  98. },
  99. "bidendtime": {
  100. "checker": bidendtime_checker,
  101. },
  102. "bidopentime": {
  103. "checker": bidopentime_checker,
  104. },
  105. "publishtime":{
  106. "checker":publishtime_checker,
  107. },
  108. "com_package": {
  109. "checker": multipackage_checker,
  110. },
  111. "purchasinglist": {
  112. "checker": purchasing_checker,
  113. },
  114. "capital": {
  115. "checker": capital_checker,
  116. }
  117. }
  118. #多参数处理
  119. def check_params(func, param_rows: dict, is_check_type=False) -> (bool, list):
  120. """
  121. 函数传参数
  122. """
  123. _default_params = {"attach_text": {}, "projectcode":'',"bidamount": 0, "budget": 0,"capital": 0,"s_winner":"","bidopentime":0,"publishtime":0,"bidstarttime":0,"bidendtime":0,"docendtime":0,"docstarttime":0,"subtype":"","s_topscopeclass":"","supervisorrate":0,"district":"金水区","com_package":[],"buyer":""} # 必要参数的默认值
  124. func_params = inspect.getfullargspec(func) # 取出函数的参数
  125. args_annotations = func_params.annotations # 参数类型dict,取出参数类型
  126. args_list = func_params.args # 参数list
  127. if "self" in args_list:
  128. args_list.remove("self")
  129. params = {} # 返回参数列表
  130. for arg in args_list:
  131. if arg in param_rows: # 存在参数
  132. if is_check_type and not isinstance(param_rows[arg], args_annotations[arg]):
  133. # 不满足参数类型需求
  134. return False, []
  135. params[arg] = param_rows[arg]
  136. elif arg in _default_params: # 使用默认值
  137. params[arg] = _default_params[arg]
  138. # print(params, args_list)
  139. if len(params) != len(args_list):
  140. # 参数不够
  141. return False, params
  142. return True, params # 满足参数需求
  143. #根据检查结果打分top
  144. def bid_score(error_dist,obj):
  145. score=100
  146. site = obj.get("site")
  147. toptype = obj.get("toptype")
  148. subtype = obj.get("subtype")
  149. num=0
  150. for key,value in error_dist.items():
  151. if key != "purchasinglist_qa":
  152. if value :
  153. num+=1
  154. flag=0
  155. with open(abnormal_config["table_field_config"]["path7"], "r") as f:
  156. reads = csv.reader(f)
  157. for w in reads:
  158. result=w[0].split("\t")
  159. #可信度比较高的网站,打分时减少分值
  160. if result[0]==site and result[1]==toptype and result[2]==subtype:
  161. flag = 1
  162. score-=num
  163. print(score)
  164. if flag == 0:
  165. score=score-num*10
  166. print(score)
  167. return score
  168. #检查并打分
  169. def check(obj: any, rules) -> any:
  170. """
  171. 单行数据质量检查
  172. :return:any
  173. """
  174. catch_content = CatchContentObject()
  175. obj["catch_content"] = catch_content
  176. field_qa = {}
  177. for field in rules: # 获取检查字段
  178. qa = {}
  179. # 字段不存在检查
  180. if field not in obj and field in nofield_checker.errors_tables:
  181. func = nofield_checker.errors_tables[field]
  182. # 开始执行函数
  183. if func(obj, catch_content):
  184. qa["0000"] = f"{field}:不存在!!"
  185. # # 只有当qa不为空时才添加到field_qa
  186. if qa:
  187. field_qa["%s_qa" % field] = qa
  188. continue
  189. # 字段存在检查,判断字段值的类型是否正确,判断类型是否正确如值为null的,并把英文括号转换为中文括号
  190. if field in obj and field in fieldtype_checker.errors_tables:
  191. func_type = fieldtype_checker.errors_tables[field]
  192. value = func_type(obj.get(field))
  193. if value is True:
  194. qa["0001"] = f"{field}:类型不正确、空值"
  195. # # 只有当qa不为空时才添加到field_qa
  196. if qa:
  197. field_qa["%s_qa" % field] = qa
  198. continue
  199. # 3. 如果字段存在且类型正确,进入 check_chain 检查
  200. if field in check_chain:
  201. checker = check_chain[field]["checker"] # 获取检测器
  202. for err,err_detail in rules[field].items(): # 获取检测的规则
  203. # 错误类型检查
  204. if err not in checker.errors_tables:
  205. qa[err] = f"{field}:服务端未定义错误类型"
  206. field_qa["%s_qa" % field] = qa
  207. continue
  208. func = checker.errors_tables[err]["checkFn"] # 获取检查方法
  209. status, params = check_params(func, obj) # 多参数解决方案
  210. if status:
  211. # 开始执行函数
  212. #判断返回是否是数值,是数值的话,为标的物的检查规则,标的物返回的是打分结果(float类型),不是错误类型
  213. result = func(**params)
  214. if isinstance(result, float):
  215. qa[err]=result
  216. else:
  217. if result:
  218. qa[err] = err_detail.get("name","")
  219. else:
  220. # 参数不满足要求
  221. qa[err] = f"{field}:必须参数(字段)缺失"
  222. # 只有当qa不为空时才添加到field_qa
  223. if qa:
  224. field_qa["%s_qa" % field] = qa
  225. elif field not in check_chain:
  226. pass # 明确不存储无错误且无需检查的字段
  227. score=bid_score(field_qa,obj)
  228. field_qa["score"]=score
  229. return field_qa
  230. if __name__ == '__main__':
  231. row={
  232. "comeintime" : int(1698739748),
  233. "area" : "内蒙古",
  234. "purchasingsource" : "[{\"start\": 13, \"verify\": \"确定\", \"direction\": \"h\", \"type\": \"识别\", \"header\": {\"itemname\": \"产品名称\", \"model\": \"技术规格\", \"number\": \"数量\", \"unitprice\": \"单价(元)\", \"totalprice\": \"金额(元)\"}, \"file_name\": \"公告\"}]",
  235. "toptype" : "拟建",
  236. "subtype" : "拟建",
  237. "spidercode" : "nm_nmgzzqzfcgw_dzmc_zgcgcjgs",
  238. "extracttype" : int(1),
  239. "s_sha" : "9269588cb73151d8ec09cf16347539678549f81395559589a731ca1394828582",
  240. # "detail" : ".二连浩特市人民医院在政采商城电子卖场完成协议供货直购采购,采购结果确认如下:<br/>一、项目概述<br/>采购编号:ELHTSZFCG-DD-2023-407774<br/>采购单位:二连浩特市人民医院<br/>所属区域:二连浩特市本级<br/>预算金额(元):15,440.00<br/>采购人及联系方式:白瑜/7535324<br/>采购计划备案书/核准书编号:二财购备字(电子)[2023]00864号<br/>采购方式:电子卖场(协议采购)<br/>二、采购结果<br/>成交供应商:二连浩特市智慧真彩文体办公<br/>成交时间:2023-10-31 15:24<br/>成交金额:15440.00,大写(人民币):壹万伍仟肆佰肆拾元整。<br/> <table border=\"1\"> <tbody><tr> <th>产品名称</th> <th>技术规格</th> <th>备注</th> <th>数量</th> <th>单价(元)</th> <th>金额(元)</th> </tr> <tr> <td>台式计算机</td> <td> 联想/LENOVO,<br/> 联想/LENOVOThinkCentre M930Z-GEN2 台式计算机 I5-10500/8G/512G/DVDRW/2G独立/WIFI/摄像头/W10-HOME / 23寸液晶屏,<br/> M930Z,<br/> 数量:2;<br/> </td> <td></td> <td>2</td> <td> ¥5450.0000<br/> </td> <td> ¥10900.00<br/> </td> </tr> <tr> <td>台式计算机</td> <td> 联想/LENOVO,<br/> 联想 启天M420 台式计算机 商用办公计算机 处理器I3-9100 / 4G / 1T / 集显 / 21.5寸液晶显示器,<br/> M420,<br/> 数量:1;<br/> </td> <td></td> <td>1</td> <td> ¥4540.0000<br/> </td> <td> ¥4540.00<br/> </td> </tr> <tr> <td>合计</td> <td colspan=\"5\"> ¥15440.00 大写(人民币): 壹万伍仟肆佰肆拾元整</td> </tr> </tbody></table><br/> 采购单位:二连浩特市人民医院<br/> 2023年10月31日",
  241. "purchasing" : "台式计算机",
  242. "site" : "湖南省政府采购电子卖场",
  243. "title" : "黄冈罗田碳和瑞新能源科技有限公司罗田分公司租用罗田县三里畈镇尹家垸村三组尹小丹农户屋顶新建35.75分布式光伏发电项目",
  244. "dataging" : int(0),
  245. # "bidopentime":int(1798739414),
  246. # "publishtime" : int(1751937052),
  247. "purchasinglist" : [
  248. {
  249. "score" : 0.8275,
  250. "itemname" : "台式计算机",
  251. "model" : "联想/LENOVO, 联想/LENOVOThinkCentre M930Z-GEN2 台式计算机 I5-10500/8G^~^",
  252. "number" : 2.0,
  253. "unitprice" : 5450.0,
  254. "totalprice" : 10900.0,
  255. "table" : int(0)
  256. },
  257. {
  258. "unitprice" : 4540.0,
  259. "totalprice" : 4540.0,
  260. "table" : int(0),
  261. "score" : 0.8275,
  262. "itemname" : "台式计算机",
  263. "model" : "联想/LENOVO, 联想 启天M420 台式计算机 商用办公计算机 处理器I3-9100 / 4G / 1T / 集显^~^",
  264. "number" : 1.0
  265. }
  266. ],
  267. "goods_start" : int(1698739805),
  268. "type" : "",
  269. "city" : "",
  270. "areaval" : int(16),
  271. "contenthtml" : "\n <div class=\"noticeArea\">\n <div class=\"contractWrap\" style=\"page-break-after: always;\">\n <p></p>\n <p>二连浩特市人民医院在政采商城电子卖场完成协议供货直购采购,采购结果确认如下:</p>\n <h3><strong>一、项目概述</strong></h3>\n <p>采购编号:ELHTSZFCG-DD-2023-407774</p>\n <p>采购单位:二连浩特市人民医院</p>\n <p>所属区域:二连浩特市本级</p>\n <p>预算金额(元):15,440.00</p>\n <p>采购人及联系方式:白瑜/7535324</p>\n <p>采购计划备案书/核准书编号:二财购备字(电子)[2023]00864号</p>\n <p>采购方式:电子卖场(协议采购)</p>\n <h3><strong>二、采购结果</strong></h3>\n <p>成交供应商:二连浩特市智慧真彩文体办公</p>\n <p>成交时间:2023-10-31 15:24</p>\n <p>成交金额:15440.00,大写(人民币):壹万伍仟肆佰肆拾元整。</p>\n <table cellpadding=\"0\" cellspacing=\"0\" class=\"noticeTable\" border=\"1\" style=\"width:100%\">\n <tbody><tr style=\"height:40px\">\n <th style=\"width:18%;text-align:center;\">产品名称</th>\n <th style=\"width:32%;text-align:center;\">技术规格</th>\n <th style=\"width:12%;text-align:center;\">备注</th>\n <th style=\"width:12%;text-align:center;\">数量</th>\n <th style=\"width:13%;text-align:center;\">单价(元)</th>\n <th style=\"width:13%;text-align:center;\">金额(元)</th>\n </tr>\n <!--订单商品集合-->\n <tr style=\"height:36px;\">\n <td style=\"padding:3px 5px;\">台式计算机</td>\n <td style=\"padding:3px 5px;\">\n 联想/LENOVO,\n 联想/LENOVOThinkCentre M930Z-GEN2 台式计算机 I5-10500/8G/512G/DVDRW/2G独立/WIFI/摄像头/W10-HOME / 23寸液晶屏,\n M930Z,\n 数量:2;\n <br/>\n \n </td>\n <td></td>\n <td style=\"padding:3px 5px;text-align:center\">2</td>\n <td style=\"padding:3px 5px;text-align:right\">\n ¥5450.0000\n </td>\n <td style=\"padding:3px 5px;text-align:right\">\n ¥10900.00\n </td>\n </tr>\n<!--订单商品集合-->\n <tr style=\"height:36px;\">\n <td style=\"padding:3px 5px;\">台式计算机</td>\n <td style=\"padding:3px 5px;\">\n 联想/LENOVO,\n 联想 启天M420 台式计算机 商用办公计算机 处理器I3-9100 / 4G / 1T / 集显 / 21.5寸液晶显示器,\n M420,\n 数量:1;\n <br/>\n \n </td>\n <td></td>\n <td style=\"padding:3px 5px;text-align:center\">1</td>\n <td style=\"padding:3px 5px;text-align:right\">\n ¥4540.0000\n </td>\n <td style=\"padding:3px 5px;text-align:right\">\n ¥4540.00\n </td>\n </tr>\n <tr style=\"height:36px\">\n <td style=\"text-align: center;padding:3px 5px;\">合计</td>\n <td colspan=\"5\" style=\"text-align: left;padding:3px 5px;\">\n ¥15440.00 大写(人民币): 壹万伍仟肆佰肆拾元整</td>\n </tr>\n </tbody></table>\n <p class=\"text-right\" style=\"font-family: FangSong ;font-size:12pt\">采购单位:二连浩特市人民医院</p>\n <p class=\"text-right\" style=\"font-family: FangSong ;font-size:12pt\">2023年10月31日</p>\n <style>\n /*网页规范:\n 宋体,2.5行高,默认16号字\n 大标题用h2标签,字号为24号加粗\n 一级标题用h3标签,字号为18号加粗\n 二级标题用h4标签,字号为16号加粗\n 三级标题用h5标签,字号为16号加粗,首行缩进28px\n 段落字号16px,首行缩进28px\n 普通文字为16号字体\n 表格标题为加粗,表格字号为16号字体,高度为32px,表格外部上下间距10px,左右居中;单元格内部上下间距5px,左右间距8px;\n 标题加粗,自己改为<strong></strong>或者加样式。\n 标题段落间距为8px\n */\n\n .noticeArea {\n line-height: 2.5;\n font-size: 16px;\n text-align: justify;\n font-family: '宋体';\n }\n\n .noticeArea * {\n padding: 0;\n margin: 0;\n\t\t\t\tfont-family: '宋体';\n }\n\n .noticeArea h2 {\n font-size: 24px;\n text-align: center;\n margin-bottom: 20px;\n }\n\n .noticeArea h3 {\n font-size: 18px;\n font-weight: normal;\n }\n\n .noticeArea h4 {\n font-size: 16px;\n font-weight: normal;\n }\n\n .noticeArea h5 {\n font-size: 16px;\n text-indent: 28px;\n font-weight: normal;\n }\n\n .noticeArea p {\n text-indent: 28px;\n font-size: 16px;\n }\n\n .noticeArea .noticeTable {\n font-size: 16px;\n border-collapse: collapse;\n border-spacing: 0;\n width: 100%;\n margin: 10px auto;\n }\n\n .noticeArea .noticeTable tr td {\n border-collapse: collapse;\n border: 1px solid #333;\n text-align: center;\n padding: 5px 8px;\n }\n\n .noticeArea .noticeTable tr th {\n font-weight: bold;\n text-align: center;\n border: 1px solid #333;\n padding: 5px 8px;\n }\n\n .noticeArea .noticeTable tr {\n height: 32px;\n }\n\n @media print {\n /*打印规范:\n 宋体,1.8行高\n 大标题用h2标签,字号为34号加粗,对应WORD为二号\n 一级标题用h3标签,字号为24号加粗,对应WORD为小三号\n 二级标题用h4标签,字号为21号加粗。对应WORD为四号\n 三级标题用h5标签,字号为18号加粗。对应WORD为小四号,首行缩进28px\n 段落普通文字为18号字体,对应WORD为小四号,首行缩进28px\n 普通文字为18号字体,对应WORD为小四号\n 表格标题为加粗,表格字号为16号字体,高度为32px;考虑内容多,用16号,对应WORD为五号;表格外部上下间距10px,左右居中;单元格内部上下间距5px,左右间距8px\n 标题加粗,自己改为<strong></strong>或者加样式。\n */\n .noticeArea {\n font-family: '宋体';\n line-height: 1.8;\n font-size: 18px;\n text-align: justify;\n }\n\n .noticeArea * {\n padding: 0;\n margin: 0\n }\n\n .noticeArea .focuscontent {\n color: #337ab7;\n }\n\n .noticeArea h2 {\n font-size: 34px;\n text-align: center;\n margin-bottom: 25px;\n font-family: SimHei;\n }\n\n .noticeArea h3 {\n font-size: 24px;\n font-weight: normal;\n }\n\n .noticeArea h4 {\n font-size: 21px;\n font-weight: normal;\n }\n\n .noticeArea h5 {\n font-size: 18px;\n font-weight: normal;\n }\n\n .noticeArea p {\n text-indent: 32px;\n font-size: 18px;\n }\n\n .noticeArea .noticeTable {\n font-size: 16px;\n border-collapse: collapse;\n border-spacing: 0;\n width: 100%;\n margin: 15px auto;\n }\n\n .noticeArea .noticeTable tr td {\n border-collapse: collapse;\n border: 1px solid #333;\n text-align: center;\n padding: 2px 6px;\n }\n\n .noticeArea .noticeTable tr th {\n font-weight: bold;\n text-align: center;\n padding: 2px 6px;\n }\n\n .noticeArea .noticeTable tr {\n height: 32px;\n }\n\n }\n </style>\n </div>\n </div>\n ",
  272. "infoformat" : 1.0,
  273. "href" : "https://www.ccgp-neimenggu.gov.cn/category/onlinetender?tb_id=001076&p_id=2000957690&type=2",
  274. "channel" : "电子卖场-直购采购成交公示",
  275. "detail_isvalidity" : int(1),
  276. "basicClass" : "货物",
  277. "rate" : "97%",
  278. "autoid" : int(249351001),
  279. "bidamount" : 10000,
  280. "bidway" : "电子投标",
  281. # "budget" : 30000.0,
  282. "supervisorrate": 0.03,
  283. "buyer" : "玖宸(北京)科技有限公司",
  284. "buyerclass" : "医疗",
  285. "dataprocess" : int(8),
  286. "description" : "二连浩特市人民医院在政采商城电子卖场完成协议供货直购采购,采购结果确认如下:一、项目概述采购编号:ELHTSZFCG-DD-2023-407774采购单位:二连浩特市人民医院所属区域:二连浩特市本级预算金额(元):15,440.00采购人及",
  287. "district" : "",
  288. "entidlist" : [
  289. "ff3d9d9a24326937b4a9f45edbfab35a"
  290. ],
  291. "keywords" : "二连浩特市人民医院,台式计算机,订购,成交,公告",
  292. "multipackage" : int(0),
  293. # "projectcode" : "ELHTSZFCG-DD-2023-407774",
  294. "projectname" : "二连浩特市人民医院台式计算机(等)直接订购",
  295. "purchasing_tag" : "台式计算机,计算机,摄像头,液晶显示器,DR,M9,液晶,4G",
  296. "s_subscopeclass" : "信息技术_其他,行政办公_通用办公设备",
  297. # "s_topscopeclass" : "行政办公,信息技术,建筑工程",
  298. "s_winner" : "玖宸(北京)科技有限公司",
  299. "subscopeclass" : [
  300. "信息技术_其他",
  301. "行政办公_通用办公设备"
  302. ],
  303. "topscopeclass" : [
  304. "行政办公d",
  305. "信息技术d",
  306. "信息技术t"
  307. ],
  308. "winnerorder": [
  309. {
  310. "entname": "日立电梯(中国)有限公司杭州营销有限公司",
  311. "type": "结果_关于中标 候选人的公示\n市招示 (\n2018) 字\n施工资格后审第\n0827号",
  312. "sortstr": "第一候选人",
  313. "sort": 1,
  314. },
  315. {
  316. "sortstr": "第二候选人",
  317. "sort": 2,
  318. "entname": "杭州豪美电梯有限公司",
  319. "type": "结果_关于中标 候选人的公示\n市招示 (\n2018) 字\n施工资格后审第\n0827号"
  320. },
  321. {
  322. "sortstr": "第三候选人",
  323. "sort": 3,
  324. "entname": "浙江中菱电梯安装工程有限公司",
  325. "type": "结果_关于中标 候选人的公示\n市招示 (\n2018) 字\n施工资格后审第\n0827号"
  326. }
  327. ],
  328. "bidendtime": 1754614800.0,
  329. #拟建字段
  330. "owner": "浙江中菱电梯安装工程有限公司",
  331. "project_stage_code": "05",
  332. "total_investment":"71050.700000",
  333. # "capital": 10000.737132,
  334. "tenderlist": [
  335. {
  336. "s_winner": "",
  337. "detail": "由乌海市鸿鼎房地产开发有限责任公司建设的鼎盛花园小区5#楼附属商业调整项目于2025年海勃湾区第5次城市规划建设区长专题办公会议通过,依据《关于城乡规划公开公示的规定》的要求,为保障公众利益,维护相关单位及个人的合法权益,现予以公示,公示期为七天。<br/><table border=\"1\"><tbody>\t<tr>\t<td>总用地面积<br/>\t</td>\t<td>83724.90㎡<br/>\t</td>\t</tr>\t<tr>\t<td>总建筑面积<br/>\t</td>\t<td>308931.37㎡<br/>\t</td>\t</tr>\t<tr>\t<td>建筑密度<br/>\t</td>\t<td>26.1%<br/>\t</td>\t</tr>\t<tr>\t<td>绿地率<br/>\t</td>\t<td>30.3%<br/>\t</td>\t</tr>\t<tr>\t<td>容积率<br/>\t</td>\t<td>2.94<br/>\t</td>\t</tr>\t<tr>\t<td>停车位<br/>\t</td>\t<td>1722个<br/>\t</td>\t</tr></tbody></table><br/>调整前,5#楼附属商业基底面积554.33㎡,建筑面积953.29㎡,调整后5#楼附属商业基底面积504.15㎡,建筑面积894.53㎡。<br/>反馈意见单位:乌海市自然资源局海勃湾分局<br/>联系电话:0473-6995512<br/>联系人:贺倩<br/>附图:<br/>立面图<br/>鸟瞰图<br/>平面图详情请下载附件!",
  338. "title": "鼎盛花园小区5#楼附属商业调整项目规划设计方案公示",
  339. "jyhref": "https://www.jianyu360.cn/article/entservice/U1ZMQ1FAFQgHUAFWEUdVSkcPAAQGXUNK.html?appid",
  340. "publishtime": int(1748397383),
  341. "buyer": "",
  342. "winnerperson": "",
  343. "tenderid": "688042cad5d8e4081fcac379",
  344. "projectcode": "",
  345. "buyerperson": "贺倩",
  346. "buyertel": "0473-6995512",
  347. "winnertel": "",
  348. "href": "http://zrzy.wuhai.gov.cn/zrzy/1442195/1442202/1442239/2237769/index.html",
  349. "budget": 0.0,
  350. "bidamount": 0.0,
  351. "subtype": "拟建"
  352. }
  353. ],
  354. "com_package": [
  355. {
  356. "projectcode": "S202501020015",
  357. "packagecode": "",
  358. "contractcode": "",
  359. "package_id": "5bc4bbc85a4b461cb0aa0104f5fb5ee9",
  360. "name": "不干胶标签"
  361. },
  362. {
  363. "projectcode": "S202501020015",
  364. "packagecode": "",
  365. "contractcode": "",
  366. "package_id": "5bc4bbc85a4b461cb0aa0104f5fb5ee9",
  367. "name": "不干胶标签"
  368. }
  369. ],
  370. "pici" : int(1698740066)
  371. }
  372. result = check(row, rules={
  373. # "capital": {
  374. # "0103": {
  375. # "name": "投资金额小数点位数超过4位",
  376. # "parent_name": "金额错误",
  377. # "parent_code": "01"
  378. # },
  379. # "0201": {
  380. # "name": "投资金额<0",
  381. # "parent_name": "金额错误",
  382. # "parent_code": "01"
  383. # }
  384. # },
  385. # "budget": {
  386. # "0101": {
  387. # "name": "预算/中标金额,不在[0.7,1.3]",
  388. # "parent_name": "金额错误",
  389. # "parent_code": "01"
  390. # },
  391. # "0102": {
  392. # "name": "过大过小,不在[100,10亿]",
  393. # "parent_name": "金额错误",
  394. # "parent_code": "01"
  395. # },
  396. # "0103": {
  397. # "name": "预算小数点位数超过4位",
  398. # "parent_name": "金额错误",
  399. # "parent_code": "01"
  400. # },
  401. # "0201": {
  402. # "name": "预算<0",
  403. # "parent_name": "金额错误",
  404. # "parent_code": "01"
  405. # }
  406. # },
  407. # "bidendtime" : {
  408. # "0101" : {
  409. # "name" : "投标截止日期<投标文件递交开始时间",
  410. # "parent_name" : "时间有效性异常",
  411. # "parent_code" : "01"
  412. # }
  413. # },
  414. # "buyer": {
  415. # "0103": {
  416. # "name": "包含叠词,异常词汇,特殊词汇",
  417. # "parent_name": "名称错误",
  418. # "parent_code": "01"
  419. # },
  420. # "0301": {
  421. # "name": "采购单位名称长度<3",
  422. # "parent_name": "名称长度异常错误",
  423. # "parent_code": "03"
  424. # },
  425. # "0105": {
  426. # "name": "采购单位与中标单位一致",
  427. # "parent_name": "名称错误",
  428. # "parent_code": "01"
  429. # }
  430. # },
  431. # "toptype": {
  432. # "0101": {
  433. # "name": "数据长度<2",
  434. # "parent_name": "长度错误",
  435. # "parent_code": "01",
  436. #
  437. # }
  438. # }
  439. "project_stage_code": {
  440. },
  441. # "sort": {
  442. # },
  443. # "city": {
  444. # "0302": {
  445. # "name": "城市不在[3,11]个字之间",
  446. # "parent_name": "长度异常类型",
  447. # "parent_code": "03",
  448. # }
  449. # },
  450. # "publishtime": {
  451. # "0201": {
  452. # "name": "发布时间 > 开标时间 ",
  453. # "parent_name": "数据范围类型",
  454. # "parent_code": "02"
  455. # },
  456. # "0202": {
  457. # "name": "发布时间 > 当前时间",
  458. # "parent_name": "数据范围类型",
  459. # "parent_code": "02"
  460. # }
  461. # },
  462. # "bidamount": {
  463. # "0101": {
  464. # "name": "互相校验(预算和中标金额的比例)",
  465. # "parent_name": "金额错误",
  466. # "parent_code": "01"
  467. # },
  468. # "0102": {
  469. # "name": "过大过小[100,10亿]",
  470. # "parent_name": "金额错误",
  471. # "parent_code": "01"
  472. # },
  473. # "0103": {
  474. # "name": "中标金额小数点位数超过4位",
  475. # "parent_name": "金额错误",
  476. # "parent_code": "01",
  477. # "checkFn": "01",
  478. # },
  479. # "0104": {
  480. # "name": "中标金额存在费率,折扣率",
  481. # "parent_name": "金额错误",
  482. # "parent_code": "01"
  483. # }
  484. # },
  485. })
  486. print(result)