|
@@ -944,7 +944,8 @@ def findAttributeAfterEntity(PackDict,roleSet,PackageList,PackageSet,list_senten
|
|
def addServiceTimeByEntity(packDict,packageName,entity,serviceTime):
|
|
def addServiceTimeByEntity(packDict,packageName,entity,serviceTime):
|
|
for i in range(len(packDict[packageName]["roleList"])):
|
|
for i in range(len(packDict[packageName]["roleList"])):
|
|
if packDict[packageName]["roleList"][i].entity_text==entity:
|
|
if packDict[packageName]["roleList"][i].entity_text==entity:
|
|
- packDict[packageName]["roleList"][i].serviceTime = serviceTime.entity_text
|
|
|
|
|
|
+ # packDict[packageName]["roleList"][i].serviceTime = serviceTime.entity_text
|
|
|
|
+ packDict[packageName]["roleList"][i].serviceTime = extract_serviceTime(serviceTime.entity_text,"")
|
|
|
|
|
|
#根据实体名称得到角色
|
|
#根据实体名称得到角色
|
|
def getRoleWithText(packDict,entity_text):
|
|
def getRoleWithText(packDict,entity_text):
|
|
@@ -3767,9 +3768,9 @@ def get_days_between(day1,day2,get_abs=0):
|
|
return days_difference
|
|
return days_difference
|
|
|
|
|
|
def extract_serviceTime(service_time,page_time):
|
|
def extract_serviceTime(service_time,page_time):
|
|
- pattern1 = re.compile("\d{4}[年\-\./]\d{1,2}[月\-\./]\d{1,2}日?")
|
|
|
|
- pattern2 = re.compile("\d+(?:\.\d+)?[\((]?个?[^\d]?[^\d]?(?:日|天|周年|整年|学?年|月|周|日历[天日]|工作[天日])")
|
|
|
|
- pattern3 = re.compile("\d{4}[年\-\./]\d{1,2}月?")
|
|
|
|
|
|
+ pattern1 = re.compile("\d{4}[年\-./]\d{1,2}[月\-./]\d{1,2}日?")
|
|
|
|
+ pattern2 = re.compile("\d+(?:\.\d+)?[((]?个?[^\d]?[^\d]?(?:日|天|周年|整年|学?年|月|周|日历[天日]|工作[天日])")
|
|
|
|
+ pattern3 = re.compile("\d{4}[年\-./]\d{1,2}月?")
|
|
pattern4 = re.compile("(?:日|天|周年|年|月|周|日历[天日]|工作[天日]|星期)[^\d]{1,3}\d+(?:\.\d+)?")
|
|
pattern4 = re.compile("(?:日|天|周年|年|月|周|日历[天日]|工作[天日]|星期)[^\d]{1,3}\d+(?:\.\d+)?")
|
|
DigitsDic = {"零":0, "壹":1, "贰":2, "叁":3, "肆":4, "伍":5, "陆":6, "柒":7, "捌":8, "玖":9,
|
|
DigitsDic = {"零":0, "壹":1, "贰":2, "叁":3, "肆":4, "伍":5, "陆":6, "柒":7, "捌":8, "玖":9,
|
|
"〇":0, "一":1, "二":2, "三":3, "四":4, "五":5, "六":6, "七":7, "八":8, "九":9,
|
|
"〇":0, "一":1, "二":2, "三":3, "四":4, "五":5, "六":6, "七":7, "八":8, "九":9,
|
|
@@ -3829,7 +3830,7 @@ def extract_serviceTime(service_time,page_time):
|
|
|
|
|
|
return sum(result_list) + result
|
|
return sum(result_list) + result
|
|
|
|
|
|
- serviceTime_dict = {"service_start": "", "service_end": "", "service_days": ""}
|
|
|
|
|
|
+ serviceTime_dict = {"service_start": "", "service_end": "", "service_days": 0}
|
|
re_num = re.findall(r'[〇一二三四五六七八九零壹贰叁肆伍陆柒捌玖貮两十拾百佰千仟]+',service_time)
|
|
re_num = re.findall(r'[〇一二三四五六七八九零壹贰叁肆伍陆柒捌玖貮两十拾百佰千仟]+',service_time)
|
|
for _num in re_num:
|
|
for _num in re_num:
|
|
if not re.search("[十拾百佰千仟]",_num):
|
|
if not re.search("[十拾百佰千仟]",_num):
|
|
@@ -3850,7 +3851,7 @@ def extract_serviceTime(service_time,page_time):
|
|
time_list = []
|
|
time_list = []
|
|
for _time in re.findall(pattern1,service_time):
|
|
for _time in re.findall(pattern1,service_time):
|
|
_time = re.sub("日","",_time)
|
|
_time = re.sub("日","",_time)
|
|
- _time = re.sub("[年月\./]","-",_time)
|
|
|
|
|
|
+ _time = re.sub("[年月./]","-",_time)
|
|
_year,_month,_day = _time.split("-")
|
|
_year,_month,_day = _time.split("-")
|
|
_month = int(_month)
|
|
_month = int(_month)
|
|
_day = int(_day)
|
|
_day = int(_day)
|
|
@@ -3866,7 +3867,7 @@ def extract_serviceTime(service_time,page_time):
|
|
if get_days_between(page_time,time_list[1])>1 and get_days_between(time_list[0],time_list[1])>0:
|
|
if get_days_between(page_time,time_list[1])>1 and get_days_between(time_list[0],time_list[1])>0:
|
|
serviceTime_dict['service_end'] = time_list[1]
|
|
serviceTime_dict['service_end'] = time_list[1]
|
|
serviceTime_dict['service_start'] = time_list[0]
|
|
serviceTime_dict['service_start'] = time_list[0]
|
|
- else:
|
|
|
|
|
|
+ elif len(time_list)==1:
|
|
if get_days_between(page_time, time_list[0]) > 1:
|
|
if get_days_between(page_time, time_list[0]) > 1:
|
|
serviceTime_dict['service_end'] = time_list[0]
|
|
serviceTime_dict['service_end'] = time_list[0]
|
|
# service_days = (time.mktime(time.strptime(end_time,"%Y-%m-%d"))-page_timestamp)/(24*60*60)
|
|
# service_days = (time.mktime(time.strptime(end_time,"%Y-%m-%d"))-page_timestamp)/(24*60*60)
|
|
@@ -3875,7 +3876,7 @@ def extract_serviceTime(service_time,page_time):
|
|
# end_time = re.findall(pattern3,service_time)[-1]
|
|
# end_time = re.findall(pattern3,service_time)[-1]
|
|
for _time in re.findall(pattern3,service_time):
|
|
for _time in re.findall(pattern3,service_time):
|
|
_time = re.sub("月","",_time)
|
|
_time = re.sub("月","",_time)
|
|
- _time = re.sub("[年\./]","-",_time)
|
|
|
|
|
|
+ _time = re.sub("[年./]","-",_time)
|
|
_year,_month = _time.split("-")
|
|
_year,_month = _time.split("-")
|
|
_day = 0
|
|
_day = 0
|
|
_month = int(_month)
|
|
_month = int(_month)
|
|
@@ -3892,7 +3893,7 @@ def extract_serviceTime(service_time,page_time):
|
|
if get_days_between(page_time, time_list[1]) > 1 and get_days_between(time_list[0], time_list[1]) > 0:
|
|
if get_days_between(page_time, time_list[1]) > 1 and get_days_between(time_list[0], time_list[1]) > 0:
|
|
serviceTime_dict['service_end'] = time_list[1]
|
|
serviceTime_dict['service_end'] = time_list[1]
|
|
serviceTime_dict['service_start'] = time_list[0]
|
|
serviceTime_dict['service_start'] = time_list[0]
|
|
- else:
|
|
|
|
|
|
+ elif len(time_list)==1:
|
|
if get_days_between(page_time, time_list[0]) > 1:
|
|
if get_days_between(page_time, time_list[0]) > 1:
|
|
serviceTime_dict['service_end'] = time_list[0]
|
|
serviceTime_dict['service_end'] = time_list[0]
|
|
# service_days = (time.mktime(time.strptime(end_time,"%Y-%m-%d"))-page_timestamp)/(24*60*60)
|
|
# service_days = (time.mktime(time.strptime(end_time,"%Y-%m-%d"))-page_timestamp)/(24*60*60)
|
|
@@ -3921,24 +3922,33 @@ def extract_serviceTime(service_time,page_time):
|
|
elif unit==1:
|
|
elif unit==1:
|
|
if match_num>4000:#单位为'日'时,排除数字过大的
|
|
if match_num>4000:#单位为'日'时,排除数字过大的
|
|
match_num = 0
|
|
match_num = 0
|
|
- service_days = match_num * unit
|
|
|
|
- if int(service_days) % 360==0:
|
|
|
|
|
|
+ service_days = int(match_num * unit)
|
|
|
|
+ if service_days % 360==0:
|
|
service_days = service_days / 360 * 365
|
|
service_days = service_days / 360 * 365
|
|
|
|
+ elif service_days % 180==0 and service_days % 360!=0:
|
|
|
|
+ service_days = service_days // 360 * 365 + 180
|
|
service_days = int(service_days)
|
|
service_days = int(service_days)
|
|
if service_days <= 1 and service_days > 4000:
|
|
if service_days <= 1 and service_days > 4000:
|
|
service_days = 0
|
|
service_days = 0
|
|
|
|
|
|
- if service_days>0:
|
|
|
|
- service_days = str(service_days) + "天"
|
|
|
|
|
|
+ if service_days>3:
|
|
|
|
+ # service_days = str(service_days) + "天"
|
|
serviceTime_dict['service_days'] = service_days
|
|
serviceTime_dict['service_days'] = service_days
|
|
break
|
|
break
|
|
elif "半年" in service_time:
|
|
elif "半年" in service_time:
|
|
service_days = 180
|
|
service_days = 180
|
|
- service_days = str(service_days) + "天"
|
|
|
|
|
|
+ # service_days = str(service_days) + "天"
|
|
|
|
+ serviceTime_dict['service_days'] = service_days
|
|
|
|
+ if serviceTime_dict['service_start'] and serviceTime_dict['service_end']:
|
|
|
|
+ service_days = get_days_between(serviceTime_dict['service_start'],serviceTime_dict['service_end'])
|
|
serviceTime_dict['service_days'] = service_days
|
|
serviceTime_dict['service_days'] = service_days
|
|
|
|
|
|
return serviceTime_dict
|
|
return serviceTime_dict
|
|
|
|
|
|
|
|
+def getServiceTime():
|
|
|
|
+
|
|
|
|
+ pass
|
|
|
|
+
|
|
def getOtherAttributes(list_entity,page_time,prem,channel_dic):
|
|
def getOtherAttributes(list_entity,page_time,prem,channel_dic):
|
|
dict_other = {"moneysource":"",
|
|
dict_other = {"moneysource":"",
|
|
"person_review":[],
|
|
"person_review":[],
|
|
@@ -3976,7 +3986,7 @@ def getOtherAttributes(list_entity,page_time,prem,channel_dic):
|
|
|
|
|
|
time_contractEnd = prem[0].get("time_contractEnd","")[:10]
|
|
time_contractEnd = prem[0].get("time_contractEnd","")[:10]
|
|
time_contractStart = prem[0].get("time_contractStart","")[:10]
|
|
time_contractStart = prem[0].get("time_contractStart","")[:10]
|
|
- serviceTime_dict = {"service_start":"", "service_end":"", "service_days": ""}
|
|
|
|
|
|
+ serviceTime_dict = {"service_start":"", "service_end":"", "service_days": 0}
|
|
if time_contractEnd:
|
|
if time_contractEnd:
|
|
serviceTime_dict['service_end'] = time_contractEnd
|
|
serviceTime_dict['service_end'] = time_contractEnd
|
|
if time_contractStart:
|
|
if time_contractStart:
|
|
@@ -3986,12 +3996,10 @@ def getOtherAttributes(list_entity,page_time,prem,channel_dic):
|
|
if list_serviceTime and not serviceTime_dict['service_end']:
|
|
if list_serviceTime and not serviceTime_dict['service_end']:
|
|
list_serviceTime_inAtt = [serviceTime for serviceTime in list_serviceTime if serviceTime.in_attachment==1]
|
|
list_serviceTime_inAtt = [serviceTime for serviceTime in list_serviceTime if serviceTime.in_attachment==1]
|
|
list_serviceTime = [serviceTime for serviceTime in list_serviceTime if serviceTime.in_attachment==0]
|
|
list_serviceTime = [serviceTime for serviceTime in list_serviceTime if serviceTime.in_attachment==0]
|
|
- # if not list_serviceTime:
|
|
|
|
- # list_serviceTime = list_serviceTime_inAtt
|
|
|
|
error_serviceTime = []
|
|
error_serviceTime = []
|
|
for list_time in [list_serviceTime,list_serviceTime_inAtt]:
|
|
for list_time in [list_serviceTime,list_serviceTime_inAtt]:
|
|
# if not dict_other["serviceTime"]:
|
|
# if not dict_other["serviceTime"]:
|
|
- if not serviceTime_dict['service_end']:
|
|
|
|
|
|
+ if not serviceTime_dict['service_end'] and not serviceTime_dict['service_days']:
|
|
list_time.sort(key=lambda x: (x.prob,-x.sentence_index,-x.begin_index), reverse=True)
|
|
list_time.sort(key=lambda x: (x.prob,-x.sentence_index,-x.begin_index), reverse=True)
|
|
for _serviceTime in list_time:
|
|
for _serviceTime in list_time:
|
|
# 优先取具体时间(20XX年x月x日-20XX年x月x日)
|
|
# 优先取具体时间(20XX年x月x日-20XX年x月x日)
|
|
@@ -4040,7 +4048,7 @@ def getOtherAttributes(list_entity,page_time,prem,channel_dic):
|
|
break
|
|
break
|
|
if serviceTime_dict['service_start'] and serviceTime_dict['service_end']:
|
|
if serviceTime_dict['service_start'] and serviceTime_dict['service_end']:
|
|
service_days = get_days_between(serviceTime_dict['service_start'],serviceTime_dict['service_end'])
|
|
service_days = get_days_between(serviceTime_dict['service_start'],serviceTime_dict['service_end'])
|
|
- serviceTime_dict['service_days'] = str(service_days) + "天"
|
|
|
|
|
|
+ serviceTime_dict['service_days'] = service_days
|
|
dict_other["serviceTime"] = serviceTime_dict
|
|
dict_other["serviceTime"] = serviceTime_dict
|
|
if not time_contractEnd and channel_dic['docchannel']['docchannel']=='合同公告': # 用serviceTime补充合同开始结束时间,公告类型为合同公告
|
|
if not time_contractEnd and channel_dic['docchannel']['docchannel']=='合同公告': # 用serviceTime补充合同开始结束时间,公告类型为合同公告
|
|
if serviceTime_dict['service_start'] and serviceTime_dict['service_end']:
|
|
if serviceTime_dict['service_start'] and serviceTime_dict['service_end']:
|
|
@@ -4189,7 +4197,10 @@ def limit_maximum_amount(dic, list_entity):
|
|
for value in dic['prem'].values():
|
|
for value in dic['prem'].values():
|
|
for l in value['roleList']:
|
|
for l in value['roleList']:
|
|
if l["role_name"] in ['win_tenderer', 'second_tenderer', 'third_tenderer']:
|
|
if l["role_name"] in ['win_tenderer', 'second_tenderer', 'third_tenderer']:
|
|
- date = float(re.search('(\d+)天', l.get('serviceTime', '')).group(1)) if re.search('(\d+)天', l.get('serviceTime', '')) else 0
|
|
|
|
|
|
+ # date = float(re.search('(\d+)天', l.get('serviceTime', '')).group(1)) if re.search('(\d+)天', l.get('serviceTime', '')) else 0
|
|
|
|
+ serviceTime_dict = l.get('serviceTime', dict())
|
|
|
|
+ serviceTime_dict = serviceTime_dict if serviceTime_dict else dict()
|
|
|
|
+ date = serviceTime_dict.get("service_days",0)
|
|
if 0 < date < 180 and float(l["role_money"]['money']) > 10000000000: # 工期小于180天且金额大于百亿的,错误
|
|
if 0 < date < 180 and float(l["role_money"]['money']) > 10000000000: # 工期小于180天且金额大于百亿的,错误
|
|
l["role_money"]['money'] = str(Decimal(l["role_money"]['money']) / 10000)
|
|
l["role_money"]['money'] = str(Decimal(l["role_money"]['money']) / 10000)
|
|
# print('工期纠正百亿以上金额 ')
|
|
# print('工期纠正百亿以上金额 ')
|