|
@@ -133,6 +133,7 @@ var (
|
|
|
|
|
|
//新增-分包-表格-sortKV
|
|
|
budgetSortKVReg = regexp.MustCompile("(预算)")
|
|
|
+ bidamountSortKVReg = regexp.MustCompile("(成交结果[((]万元[))])")
|
|
|
winnerSortKVReg = regexp.MustCompile("(投标人[((]供应商[))]名称)")
|
|
|
)
|
|
|
|
|
@@ -239,6 +240,7 @@ func CommonDataAnaly(k, tabletag, tabledesc string, v interface{}, isSite bool,
|
|
|
var glRex *regexp.Regexp = regexp.MustCompile("(成交|中标|候选|排名|名次|供应商排序|中标候选人|名单及其排序|排序)")
|
|
|
var djReg *regexp.Regexp = regexp.MustCompile("^单价")
|
|
|
var hxrRex *regexp.Regexp = regexp.MustCompile("((成交|中标|中选)?候选人[弟|第][1-5一二三四五]名|[弟|第][1-5一二三四五][名]?(成交|中标|中选)?候选人)")
|
|
|
+var winnerRex *regexp.Regexp = regexp.MustCompile("(公司)$")
|
|
|
|
|
|
//判断数组string 是否重复
|
|
|
func isRepeatArrString(arr1,arr2 []string)bool{
|
|
@@ -306,24 +308,24 @@ func (table *Table) KVFilter(isSite bool, codeSite string) {
|
|
|
//处理值是数组的kv 放入标准化kv中 standKV //处理table.SortKV.value为数组的情况
|
|
|
table.sortKVArr(as, isSite, codeSite)
|
|
|
|
|
|
- //if len(table.WinnerOrder) == 0 { //在计算一下是否拼接
|
|
|
- // winsArr := []string{}
|
|
|
- // sortsArr := []string{}
|
|
|
- // for _, k := range table.SortKV.Keys {
|
|
|
- // if hxrRex.MatchString(k) {
|
|
|
- // v := table.SortKV.Map[k]
|
|
|
- // if new_v, ok := v.(string); ok {
|
|
|
- // winsArr = append(winsArr,new_v)
|
|
|
- // sortsArr = append(sortsArr,k)
|
|
|
- // }
|
|
|
- // }
|
|
|
- // }
|
|
|
- // if len(winsArr)>1 {
|
|
|
- // as.AddKey("中标候选人名称", winsArr)
|
|
|
- // as.AddKey("中标候选人排序", sortsArr)
|
|
|
- // table.sortKVArr(as, isSite, codeSite)
|
|
|
- // }
|
|
|
- //}
|
|
|
+ if len(table.WinnerOrder) == 0 { //在计算一下是否拼接
|
|
|
+ winsArr := []string{}
|
|
|
+ sortsArr := []string{}
|
|
|
+ for _, k := range table.SortKV.Keys {
|
|
|
+ if hxrRex.MatchString(k) {
|
|
|
+ v := table.SortKV.Map[k]
|
|
|
+ if new_v, ok := v.(string); ok && winnerRex.MatchString(new_v) {
|
|
|
+ winsArr = append(winsArr,new_v)
|
|
|
+ sortsArr = append(sortsArr,k)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if len(winsArr)>1 {
|
|
|
+ as.AddKey("中标候选人名称", winsArr)
|
|
|
+ as.AddKey("中标候选人排序", sortsArr)
|
|
|
+ table.sortKVArr(as, isSite, codeSite)
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
if len(table.WinnerOrder) > 0 || !table.BPackage {
|
|
|
winnerOrder := []map[string]interface{}{}
|
|
@@ -386,7 +388,7 @@ func (table *Table) KVFilter(isSite bool, codeSite string) {
|
|
|
}
|
|
|
|
|
|
var winMoneyReg *regexp.Regexp = regexp.MustCompile("(报价|投标价|投标总价)")
|
|
|
-var winNoMoneyReg *regexp.Regexp = regexp.MustCompile("(得分)")
|
|
|
+var winNoMoneyReg *regexp.Regexp = regexp.MustCompile("(得分|时间|序号)")
|
|
|
//处理table.SortKV.value为数组的情况
|
|
|
func (table *Table) sortKVArr(as *SortMap, isSite bool, codeSite string) {
|
|
|
winnertag := iswinnertabletag.MatchString(table.Tag) && !nswinnertabletag.MatchString(table.Tag) //table标签
|
|
@@ -1575,7 +1577,7 @@ func (table *Table) FindKV(isSite bool, codeSite string) {
|
|
|
//若第一排全为头-临时让第二排-新增 左临 查询,zhengkun
|
|
|
tb_first_allhead := false
|
|
|
for tr_index, tr := range table.TRs {
|
|
|
- if tr_index==7 {
|
|
|
+ if tr_index==0 {
|
|
|
//fmt.Println("调试")
|
|
|
}
|
|
|
bcon = trSingleColumn(tr, bcon, table) //tr单列,是否丢弃内容
|
|
@@ -1603,6 +1605,7 @@ func (table *Table) FindKV(isSite bool, codeSite string) {
|
|
|
direct, vdirect = 2, 1
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
for _, td := range tr.TDs {
|
|
|
if !td.BH && td.KVDirect < 3 {
|
|
|
if !table.FindTdVal(td, direct, vdirect) { //table.FindTdVal()存储了table.SortKV
|
|
@@ -2295,10 +2298,8 @@ func (tn *Table) CheckMultiPackageByTable(isSite bool, codeSite string) (b bool,
|
|
|
if !excludeKey.MatchString(kc) {
|
|
|
bp.Text += fmt.Sprintf("%v:%v\n", kc, cv[0].Value)
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
-
|
|
|
- }else { //新增 - 特殊情况 - 查找sortKV - 预算 - 中标单位
|
|
|
+ }else { //新增 - 特殊情况 - 查找sortKV - 预算 - 中标金额 - 中标单位
|
|
|
for k,v := range tn.SortKV.Map {
|
|
|
if budgetSortKVReg.MatchString(k) {
|
|
|
if vs, ok := v.([]string); ok {
|
|
@@ -2316,6 +2317,29 @@ func (tn *Table) CheckMultiPackageByTable(isSite bool, codeSite string) (b bool,
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ if bidamountSortKVReg.MatchString(k) {
|
|
|
+ if vs, ok := v.([]string); ok {
|
|
|
+ if len(index)==len(vs) {
|
|
|
+ moneys := clear.ObjToMoney([]interface{}{vs[nk], ""})
|
|
|
+ if len(moneys) > 0 {
|
|
|
+ if vf, ok := moneys[0].(float64); ok {
|
|
|
+ if !strings.Contains(vs[nk],"万") {
|
|
|
+ vf = 10000.0*vf
|
|
|
+ }
|
|
|
+ bp.Bidamount = vf
|
|
|
+ bp.IsTrueBidamount = moneys[len(moneys)-1].(bool)
|
|
|
+ } else if vi, ok := moneys[0].(int); ok {
|
|
|
+ if !strings.Contains(vs[nk],"万") {
|
|
|
+ vi = 10000*vi
|
|
|
+ }
|
|
|
+ bp.Bidamount = float64(vi)
|
|
|
+ bp.IsTrueBidamount = moneys[len(moneys)-1].(bool)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
if winnerSortKVReg.MatchString(k) {
|
|
|
if vs, ok := v.([]string); ok {
|
|
|
if len(index) == len(vs) {
|