Эх сурвалжийг харах

edit 修改二次推送,es语句长度限制,采购行业排序

fuwencai 4 жил өмнө
parent
commit
dde5d26173

+ 69 - 1
src/client/customerRule.go

@@ -139,14 +139,82 @@ func (c *CustomerRule) ProductData() {
 	if c.Method() == "POST" {
 		rep := false
 		id := c.GetString("id")
-		tag, _ := Mgo.FindById("cuserdepartrule", id, `{}`)
+		tag, ok := Mgo.FindById("cuserdepartrule", id, `{}`)
+		if !ok {
+			c.ServeJson(map[string]interface{}{
+				"rep": false,
+				"msg": "规则获取失败",
+			})
+			return
+		}
+		// 限制multi_match 个数小于1000个
+		s_esquery := qu.ObjToString((*tag)["s_esquery"])
+		multi_match_count := strings.Count(s_esquery, "multi_match")
+		fmt.Println("multi_match",multi_match_count,s_esquery)
+		if multi_match_count > 1000 {
+			c.ServeJson(map[string]interface{}{
+				"rep": false,
+				"msg": "关键词、附加词、排除词、全局附加词、全局排除词过多,请分多条规则查询",
+			})
+			return
+		}
+		//关键词总字节
+		keyTotal := 0
+		//附加词总字节
+		addKeyTotal := 0
+		for _, v_ := range (*tag)["o_rules"].([]interface{}) {
+			v := v_.(map[string]interface{})
+			// 匹配方式6/7 时为 单位匹配和中标单位匹配 生成es时使用的是terms
+			// 关键词
+			if v["s_keymatch"] == "7" || v["s_keymatch"] == "6" {
+				s_matchkey := strings.Replace(v["s_matchkey"].(string), ",", "", -1)
+				if len(s_matchkey) > 4000 {
+					c.ServeJson(map[string]interface{}{
+						"rep": false,
+						"msg": "采购单位、中标单位过多,请分多条规则查询",
+					})
+					return
+				} else {
+					keyTotal += len(s_matchkey)
+				}
+			}
+			// 附加词
+			if v["s_addkeymatch"] == "7" || v["s_addkeymatch"] == "6" {
+				s_addkey := strings.Replace(v["s_addkey"].(string), ",", "", -1)
+				if len(s_addkey) > 4000 {
+					c.ServeJson(map[string]interface{}{
+						"rep": false,
+						"msg": "采购单位、中标单位过多,请分多条规则查询",
+					})
+					return
+				} else {
+					addKeyTotal += len(s_addkey)
+				}
+			}
+			// 判断总数是否大于4000
+			fmt.Println(keyTotal,addKeyTotal)
+			if keyTotal > 4000 || addKeyTotal > 4000 {
+				c.ServeJson(map[string]interface{}{
+					"rep": false,
+					"msg": "采购单位、中标单位过多,请分多条规则查询",
+				})
+				return
+			}
+
+		}
 		err, count := UtilEsFind1(*tag)
+		var msg string
 		if err == nil {
 			rep = true
+			msg = "数据生成成功"
+		} else {
+			rep = false
+			msg = "数据生成失败"
 		}
 		c.ServeJson(map[string]interface{}{
 			"rep":   rep,
 			"count": count,
+			"msg":msg,
 		})
 	}
 }

+ 70 - 2
src/service/customer_service.go

@@ -408,7 +408,7 @@ func (c *Customer) SynEuser() {
 	for _, v := range *ruleMap {
 		idAndSet := []map[string]interface{}{}
 		idAndSet = append(idAndSet, bson.M{"_id": v["_id"]}) //查询条件
-		idAndSet = append(idAndSet, v)                                          //修改的数据
+		idAndSet = append(idAndSet, v)                       //修改的数据
 		update2 = append(update2, idAndSet)
 	}
 	b = Mgo.UpSertBulk("euserdepartrule", update2...)
@@ -677,14 +677,82 @@ func (c *Customer) ProductData() {
 	if c.Method() == "POST" {
 		rep := false
 		id := c.GetString("id")
-		tag, _ := Mgo.FindById("cuserdepartrule", id, `{}`)
+		tag, ok := Mgo.FindById("cuserdepartrule", id, `{}`)
+		if !ok {
+			c.ServeJson(map[string]interface{}{
+				"rep": false,
+				"msg": "规则获取失败",
+			})
+			return
+		}
+		// 限制multi_match 个数小于1000个
+		s_esquery := qu.ObjToString((*tag)["s_esquery"])
+		multi_match_count := strings.Count(s_esquery, "multi_match")
+		fmt.Println("multi_match",multi_match_count,s_esquery)
+		if multi_match_count > 1000 {
+			c.ServeJson(map[string]interface{}{
+				"rep": false,
+				"msg": "关键词、附加词、排除词、全局附加词、全局排除词过多,请分多条规则查询",
+			})
+			return
+		}
+		//关键词总字节
+		keyTotal := 0
+		//附加词总字节
+		addKeyTotal := 0
+		for _, v_ := range (*tag)["o_rules"].([]interface{}) {
+			v := v_.(map[string]interface{})
+			// 匹配方式6/7 时为 单位匹配和中标单位匹配 生成es时使用的是terms
+			// 关键词
+			if v["s_keymatch"] == "7" || v["s_keymatch"] == "6" {
+				s_matchkey := strings.Replace(v["s_matchkey"].(string), ",", "", -1)
+				if len(s_matchkey) > 4000 {
+					c.ServeJson(map[string]interface{}{
+						"rep": false,
+						"msg": "采购单位、中标单位过多,请分多条规则查询",
+					})
+					return
+				} else {
+					keyTotal += len(s_matchkey)
+				}
+			}
+			// 附加词
+			if v["s_addkeymatch"] == "7" || v["s_addkeymatch"] == "6" {
+				s_addkey := strings.Replace(v["s_addkey"].(string), ",", "", -1)
+				if len(s_addkey) > 4000 {
+					c.ServeJson(map[string]interface{}{
+						"rep": false,
+						"msg": "采购单位、中标单位过多,请分多条规则查询",
+					})
+					return
+				} else {
+					addKeyTotal += len(s_addkey)
+				}
+			}
+			// 判断总数是否大于4000
+			fmt.Println(keyTotal,addKeyTotal)
+			if keyTotal > 4000 || addKeyTotal > 4000 {
+				c.ServeJson(map[string]interface{}{
+					"rep": false,
+					"msg": "采购单位、中标单位过多,请分多条规则查询",
+				})
+				return
+			}
+
+		}
 		err, count := UtilEsFind1(*tag)
+		var msg string
 		if err == nil {
 			rep = true
+			msg = "数据生成成功"
+		} else {
+			rep = false
+			msg = "数据生成失败"
 		}
 		c.ServeJson(map[string]interface{}{
 			"rep":   rep,
 			"count": count,
+			"msg":   msg,
 		})
 	}
 }

+ 65 - 14
src/service/second_push.go

@@ -394,11 +394,25 @@ func GetXlsxs(mMap []map[string]interface{}, fn, email, id string) {
 			if err != nil {
 				log.Println("fields file not foud", err.Error())
 			}
+			newFile := xlsx.NewFile()
 			if dataType == 1 {
 				sh := xf.Sheets[0]
-				for i, v := range mMap {
-					row := sh.AddRow()
-					row.AddCell().SetInt(i + 1)
+				sheetIndex := map[string]int{}
+				for _, v := range mMap {
+					// 拿到所选字段包的sheet页  如果item存在则追加 不存在则创建新sheet页
+					var sheet *xlsx.Sheet
+					if v["item"].(string)==""{
+						v["item"] = "其他方式"
+					}
+					if _,ok :=newFile.Sheet[v["item"].(string)];ok{
+						sheet = newFile.Sheet[v["item"].(string)]
+						sheetIndex[v["item"].(string)] += 1
+					}else {
+						sheet ,err =newFile.AppendSheet(*sh,v["item"].(string))
+						sheetIndex[v["item"].(string)] = 1
+					}
+					row := sheet.AddRow()
+					row.AddCell().SetInt(sheetIndex[v["item"].(string)])
 					row.AddCell().SetValue(v["matchkey"])
 					row.AddCell().SetValue(v["area"])
 					row.AddCell().SetValue(v["city"])
@@ -422,11 +436,20 @@ func GetXlsxs(mMap []map[string]interface{}, fn, email, id string) {
 					ids := SE.EncodeString(qu.ObjToString(v["id"]))
 					row.AddCell().SetValue(ids)
 				}
-				xf.Sheets = xf.Sheets[0:1]
+				//xf.Sheets = xf.Sheets[0:1]
 			} else if dataType == 2 {
 				sh := xf.Sheets[1]
 				for _, v := range mMap {
-					row := sh.AddRow()
+					if v["item"].(string)==""{
+						v["item"] = "其他方式"
+					}
+					var sheet *xlsx.Sheet
+					if _,ok :=newFile.Sheet[v["item"].(string)];ok{
+						sheet = newFile.Sheet[v["item"].(string)]
+					}else {
+						sheet ,err =newFile.AppendSheet(*sh,v["item"].(string))
+					}
+					row := sheet.AddRow()
 					// row.AddCell().SetInt(i + 1)
 					row.AddCell().SetValue(v["matchkey"])
 					row.AddCell().SetValue(v["area"])
@@ -473,11 +496,20 @@ func GetXlsxs(mMap []map[string]interface{}, fn, email, id string) {
 					row.AddCell().SetValue(ids)
 
 				}
-				xf.Sheets = xf.Sheets[1:2]
+				//xf.Sheets = xf.Sheets[1:2]
 			} else if dataType == 3 {
 				sh := xf.Sheets[2]
 				for _, v := range mMap {
-					row := sh.AddRow()
+					if v["item"].(string)==""{
+						v["item"] = "其他方式"
+					}
+					var sheet *xlsx.Sheet
+					if _,ok :=newFile.Sheet[v["item"].(string)];ok{
+						sheet = newFile.Sheet[v["item"].(string)]
+					}else {
+						sheet ,err =newFile.AppendSheet(*sh,v["item"].(string))
+					}
+					row := sheet.AddRow()
 					// row.AddCell().SetInt(i + 1)
 					row.AddCell().SetValue(v["departname"])
 					row.AddCell().SetValue(v["rulename"])
@@ -518,11 +550,20 @@ func GetXlsxs(mMap []map[string]interface{}, fn, email, id string) {
 					ids := SE.EncodeString(qu.ObjToString(v["id"]))
 					row.AddCell().SetValue(ids)
 				}
-				xf.Sheets = xf.Sheets[2:3]
+				//xf.Sheets = xf.Sheets[2:3]
 			} else if dataType == 4 {
 				sh := xf.Sheets[3]
 				for _, v := range mMap {
-					row := sh.AddRow()
+					if v["item"].(string)==""{
+						v["item"] = "其他方式"
+					}
+					var sheet *xlsx.Sheet
+					if _,ok :=newFile.Sheet[v["item"].(string)];ok{
+						sheet = newFile.Sheet[v["item"].(string)]
+					}else {
+						sheet ,err =newFile.AppendSheet(*sh,v["item"].(string))
+					}
+					row := sheet.AddRow()
 					// row.AddCell().SetInt(i + 1)
 					row.AddCell().SetValue(v["departname"])
 					row.AddCell().SetValue(v["rulename"])
@@ -570,11 +611,20 @@ func GetXlsxs(mMap []map[string]interface{}, fn, email, id string) {
 					ids := SE.EncodeString(qu.ObjToString(v["id"]))
 					row.AddCell().SetValue(ids)
 				}
-				xf.Sheets = xf.Sheets[3:4]
+				//xf.Sheets = xf.Sheets[3:4]
 			} else if dataType == 5 {
 				sh := xf.Sheets[4]
 				for _, v := range mMap {
-					row := sh.AddRow()
+					if v["item"].(string)==""{
+						v["item"] = "其他方式"
+					}
+					var sheet *xlsx.Sheet
+					if _,ok :=newFile.Sheet[v["item"].(string)];ok{
+						sheet = newFile.Sheet[v["item"].(string)]
+					}else {
+						sheet ,err =newFile.AppendSheet(*sh,v["item"].(string))
+					}
+					row := sheet.AddRow()
 					// row.AddCell().SetInt(i + 1)
 					row.AddCell().SetValue(v["matchkey"])    //信息匹配词
 					row.AddCell().SetValue(v["city"])        //城市
@@ -625,9 +675,9 @@ func GetXlsxs(mMap []map[string]interface{}, fn, email, id string) {
 					row.AddCell().SetValue(v["jybxhref"])
 					//row.AddCell().SetValue(v["projectcode"])
 				}
-				xf.Sheets = xf.Sheets[4:5]
+				//xf.Sheets = xf.Sheets[4:5]
 			}
-			xf.Sheets[0].Name = "详细数据"
+			//xf.Sheets[0].Name = "详细数据"
 			//生文件
 			t := strconv.FormatInt(time.Now().Unix(), 10)
 			dir := "./web/res/xlsx/" + t + "/"
@@ -638,7 +688,8 @@ func GetXlsxs(mMap []map[string]interface{}, fn, email, id string) {
 				}
 			}
 			fname := t + ".xlsx"
-			err = xf.Save(dir + fname)
+			//err = xf.Save(dir + fname)
+			err = newFile.Save(dir + fname)
 			if err != nil {
 				log.Println("xls error", fname)
 			} else {

+ 31 - 1
src/util/config.go

@@ -1,9 +1,14 @@
 package util
 
 import (
+	"bytes"
+	"golang.org/x/text/encoding/simplifiedchinese"
+	"golang.org/x/text/transform"
+	"io/ioutil"
 	"qfw/mongodb"
 	qu "qfw/util"
 	"qfw/util/elastic"
+	"sort"
 	mgo "util/mgodb"
 )
 
@@ -142,11 +147,12 @@ func initInfoType() {
 }
 
 func initBuyerClass() {
-	datas, _ := Mgo.Find("code_buyerclass", `{}`, `{"_id":1}`, `{}`, false, -1, -1)
+	datas, _ := Mgo.Find("code_buyerclass", `{}`, `{"name":1}`, `{}`, false, -1, -1)
 	for _, data := range *datas {
 		name := data["name"].(string)
 		BuyerClass = append(BuyerClass, name)
 	}
+	sort.Sort(ByPinyin(BuyerClass))
 }
 
 func initMatchType() {
@@ -239,3 +245,27 @@ func initdb() {
 	Index = qu.ObjToString(es["index"])
 	Itype = qu.ObjToString(es["itype"])
 }
+type ByPinyin []string
+
+func (s ByPinyin) Len() int      { return len(s) }
+func (s ByPinyin) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
+func (s ByPinyin) Less(i, j int) bool {
+	a, _ := UTF82GBK(s[i])
+	b, _ := UTF82GBK(s[j])
+	bLen := len(b)
+	for idx, chr := range a {
+		if idx > bLen-1 {
+			return false
+		}
+		if chr != b[idx] {
+			return chr < b[idx]
+		}
+	}
+	return true
+}
+
+//UTF82GBK : transform UTF8 rune into GBK byte array
+func UTF82GBK(src string) ([]byte, error) {
+	GB18030 := simplifiedchinese.All[0]
+	return ioutil.ReadAll(transform.NewReader(bytes.NewReader([]byte(src)), GB18030.NewEncoder()))
+}

+ 8 - 6
src/web/templates/client/cuser_rule_create.html

@@ -249,7 +249,7 @@
                                         </div>
                                     </div>
                                     <div class="form-group">
-                                        <label class="col-sm-2 control-label">必有字段</label>
+                                        <label class="col-sm-2 control-label">非空字段</label>
                                         <div class="col-sm-3" style="position: relative" id="filedRemind">
                                             <div class="position">
                                                 <p>查询数据时,如需某(些)字段内容全部不为空,选择该字段</p>
@@ -1192,11 +1192,13 @@
             data: {"id": dataMap.id},
             success: function (r) {
                 com.maskHide();
-                if (r.rep) {
-                    dataMap.i_estotal = r.count
-                    showTip("数据生成成功", 1000);
-                } else {
-                    showTip("数据生成失败", 1000);
+                if (r.rep===true) {
+                    dataMap.i_estotal = r.count;
+                    showTip(r.msg, 1000);
+                } else if (r.rep===false){
+                    showTip(r.msg, 1200);
+                }else {
+                    showTip("数据生成失败", 1200);
                 }
             },
             error: function (r) {

+ 24 - 5
src/web/templates/client/cuser_rule_edit.html

@@ -251,7 +251,7 @@
                                         </div>
                                     </div>
                                     <div class="form-group">
-                                        <label class="col-sm-2 control-label">必有字段</label>
+                                        <label class="col-sm-2 control-label">非空字段</label>
                                         <div class="col-sm-3" style="position: relative" id="filedRemind">
                                             <div class="position">
                                                 <p>查询数据时,如需某(些)字段内容全部不为空,选择该字段</p>
@@ -1077,6 +1077,23 @@
 
         setValue = val;
         if (val == 2) {
+            buyerArr.length = 0
+            // 和button的值匹配,对应添加选中属性
+            var d = $("#s_buyerclass").val()
+            // 按逗号分隔
+            var select_value_array = d.split(",")
+            // 和button的值匹配,对应添加选中属性
+            for (index_ in select_value_array) {
+                //定位button 添加属性
+                $("#btnGroupBuyer").find("input").each(function () {
+                    if ($(this).val() == select_value_array[index_]) {
+                        $(this).addClass("active-btn-match");
+                        if (buyerArr.indexOf(select_value_array[index_]) == -1) {
+                            buyerArr.push($(this).val())
+                        }
+                    }
+                });
+            }
             $('#modal-select-buyer').modal("show");
 
         } else {
@@ -1557,11 +1574,13 @@
             data: {"id": dataMap.id},
             success: function (r) {
                 com.maskHide();
-                if (r.rep) {
+                if (r.rep===true) {
                     dataMap.i_estotal = r.count;
-                    showTip("数据生成成功", 1000);
-                } else {
-                    showTip("数据生成失败", 1000);
+                    showTip(r.msg, 1000);
+                } else if (r.rep===false){
+                    showTip(r.msg, 1200);
+                }else {
+                    showTip("数据生成失败", 1200);
                 }
             },
             error: function (r) {

+ 17 - 0
src/web/templates/client/keywordRule.html

@@ -203,6 +203,23 @@
 
         setValue = val;
         if (val == 2) {
+            buyerArr.length = 0
+            // 和button的值匹配,对应添加选中属性
+            var d = $("#s_buyerclass").val()
+            // 按逗号分隔
+            var select_value_array = d.split(",")
+            // 和button的值匹配,对应添加选中属性
+            for (index_ in select_value_array) {
+                //定位button 添加属性
+                $("#btnGroupBuyer").find("input").each(function () {
+                    if ($(this).val() == select_value_array[index_]) {
+                        $(this).addClass("active-btn-match");
+                        if (buyerArr.indexOf(select_value_array[index_]) == -1) {
+                            buyerArr.push($(this).val())
+                        }
+                    }
+                });
+            }
             $('#modal-select-buyer').modal("show");
         } else {
             if (keyTableChecked) {

+ 27 - 10
src/web/templates/private/cuser_rule_create.html

@@ -53,7 +53,7 @@
                     <li data-mode="guide" class=""><a href="#tab_2" data-toggle="tab" aria-expanded="false">关键词规则</a>
                     </li>
                     <button class="btn btn-primary btn-sm" style="float: right;margin-top: 7px;margin-right: 10px"
-                            onclick="saveTag()"><i class="fa fa-fw fa-file-text fa-lg"></i>保存标签
+                            onclick="saveTag()"><i class="fa fa-fw fa-file-text fa-lg"></i>保存
                     </button>
                 </ul>
                 <div class="tab-content">
@@ -67,9 +67,9 @@
                                 <div class="box-body">
                                     <div class="form-group">
                                         <label class="col-sm-2 control-label"><span
-                                                    style="color:red;">* </span>标签名称</label>
+                                                    style="color:red;">* </span>规则名称</label>
                                         <div class="col-sm-3">
-                                            <input type="text" class="form-control" id="tagname" placeholder="标签名称"
+                                            <input type="text" class="form-control" id="tagname" placeholder="规则名称"
                                                    value="" required>
                                         </div>
                                     </div>
@@ -228,7 +228,7 @@
                                         </div>
                                     </div>
                                     <div class="form-group">
-                                        <label class="col-sm-2 control-label">选择字段</label>
+                                        <label class="col-sm-2 control-label">非空字段</label>
                                         <div class="col-sm-3">
                                             <select class="form-control selectpicker" multiple id="existFieldSelect"
                                                     data-actions-box="true"></select>
@@ -315,7 +315,7 @@
                                         </div>
                                     </div>
                                     <div class="form-group">
-                                        <label class="col-sm-2 control-label">采购单位行业</label>
+                                        <label class="col-sm-2 control-label">采购单位类型</label>
                                         <div class="col-sm-3">
                                             <input class="form-control"
                                                    style="text-align: left;overflow: hidden;white-space: nowrap;text-overflow: ellipsis"
@@ -368,7 +368,7 @@
                                     <a class="btn btn-default btn-sm" onclick="selectKeyMatch(4)">关键词匹配方式</a>
                                     <a class="btn btn-default btn-sm" onclick="selectKeyMatch(6)">附加词匹配方式</a>
                                     <a class="btn btn-default btn-sm" onclick="selectKeyMatch(8)">排除词匹配方式</a>
-                                    <a class="btn btn-default btn-sm" onclick="selectBuyer(9)">采购单位行业</a>
+                                    <a class="btn btn-default btn-sm" onclick="selectBuyer(9)">采购单位类型</a>
                                     <a class="btn btn-default btn-sm" onclick="selectScope(10)">公告行业</a>
                                 </div>
                             </div>
@@ -388,7 +388,7 @@
                                     <th>匹配方式</th>
                                     <th>排除词</th>
                                     <th>匹配方式</th>
-                                    <th>采购单位行业</th>
+                                    <th>采购单位类型</th>
                                     <th>公告行业</th>
                                 </tr>
                                 </thead>
@@ -429,7 +429,7 @@
     var keyTableChecked = false;        //关键词表格数据是否有选中
     var keyTableAllChecked = true;      //表单数据是否被全选中
     var selectIndex = [];               //选中的编号
-    var setValue = 0;                   // 4: 关键词匹配方式,6:附加词匹配方式,8:排除词匹配方式,9:采购单位,10:公告行业, 2:全局采购单位行业, 3:全局公告行业, 13:全局清理词
+    var setValue = 0;                   // 4: 关键词匹配方式,6:附加词匹配方式,8:排除词匹配方式,9:采购单位,10:公告行业, 2:全局采购单位类型, 3:全局公告行业, 13:全局清理词
     var o_rules = [];                    //关键词列表
 
     var s_dataid = "";                  //预览链接加密串
@@ -969,6 +969,23 @@
     function selectBuyer(val) {
         setValue = val;
         if (val == 2) {
+            buyerArr.length = 0
+            // 和button的值匹配,对应添加选中属性
+            var d = $("#s_buyerclass").val()
+            // 按逗号分隔
+            var select_value_array = d.split(",")
+            // 和button的值匹配,对应添加选中属性
+            for (index_ in select_value_array) {
+                //定位button 添加属性
+                $("#btnGroupBuyer").find("input").each(function () {
+                    if ($(this).val() == select_value_array[index_]) {
+                        $(this).addClass("active-btn-match");
+                        if (buyerArr.indexOf(select_value_array[index_]) == -1) {
+                            buyerArr.push($(this).val())
+                        }
+                    }
+                });
+            }
             $('#modal-select-buyer').modal("show");
         } else {
             if (keyTableChecked) {
@@ -1267,7 +1284,7 @@
             showMsg(msg);
             return
         }
-        //通用规则采购单位行业和关键词中的采购单位行业只能存在一个
+        //通用规则采购单位类型和关键词中的采购单位类型只能存在一个
         if (o_rules.length > 0) {
             let tag = false;
             for (var i in o_rules) {
@@ -1276,7 +1293,7 @@
                 }
             }
             if (tag && dataMap.s_globalbuyerclass) {
-                showMsg("保存失败,采购单位行业在通用规则和关键词规则中不能同时存在!")
+                showMsg("保存失败,采购单位类型在通用规则和关键词规则中不能同时存在!")
                 return;
             }
         }

+ 33 - 13
src/web/templates/private/cuser_rule_edit.html

@@ -55,7 +55,7 @@
                     <li data-mode="guide" class=""><a href="#tab_2" data-toggle="tab" aria-expanded="false">关键词规则</a>
                     </li>
                     <button class="btn btn-primary btn-sm" style="float: right;margin-top: 4px;margin-right: 10px"
-                            onclick="saveTag()"><i class="fa fa-fw fa-file-text fa-lg"></i>保存标签
+                            onclick="saveTag()"><i class="fa fa-fw fa-file-text fa-lg"></i>保存
                     </button>
                 </ul>
                 <div class="tab-content">
@@ -69,9 +69,9 @@
                                 <div class="box-body">
                                     <div class="form-group">
                                         <label class="col-sm-2 control-label"><span
-                                                    style="color:red;">* </span>标签名称</label>
+                                                    style="color:red;">* </span>规则名称</label>
                                         <div class="col-sm-3">
-                                            <input type="text" class="form-control" id="tagname" placeholder="标签名称"
+                                            <input type="text" class="form-control" id="tagname" placeholder="规则名称"
                                                    value="{{.T.data.s_name}}">
                                         </div>
                                     </div>
@@ -233,7 +233,7 @@
                                         </div>
                                     </div>
                                     <div class="form-group">
-                                        <label class="col-sm-2 control-label">选择字段</label>
+                                        <label class="col-sm-2 control-label">非空字段</label>
                                         <div class="col-sm-3">
                                             <select class="form-control selectpicker" multiple id="existFieldSelect"
                                                     data-actions-box="true"></select>
@@ -320,7 +320,7 @@
                                         </div>
                                     </div>
                                     <div class="form-group">
-                                        <label class="col-sm-2 control-label">采购单位行业</label>
+                                        <label class="col-sm-2 control-label">采购单位类型</label>
                                         <div class="col-sm-3">
                                             <input class="form-control"
                                                    style="text-align: left;overflow: hidden;white-space: nowrap;text-overflow: ellipsis"
@@ -374,7 +374,7 @@
                                     <a class="btn btn-default btn-sm" onclick="selectKeyMatch(4)">关键词匹配方式</a>
                                     <a class="btn btn-default btn-sm" onclick="selectKeyMatch(6)">附加词匹配方式</a>
                                     <a class="btn btn-default btn-sm" onclick="selectKeyMatch(8)">排除词匹配方式</a>
-                                    <a class="btn btn-default btn-sm" onclick="selectBuyer(9)">采购单位行业</a>
+                                    <a class="btn btn-default btn-sm" onclick="selectBuyer(9)">采购单位类型</a>
                                     <a class="btn btn-default btn-sm" onclick="selectScope(10)">公告行业</a>
                                 </div>
                             </div>
@@ -394,7 +394,7 @@
                                     <th>匹配方式</th>
                                     <th>排除词</th>
                                     <th>匹配方式</th>
-                                    <th>采购单位行业</th>
+                                    <th>采购单位类型</th>
                                     <th>公告行业</th>
                                 </tr>
                                 </thead>
@@ -434,7 +434,7 @@
     var keyTableChecked = false;        //关键词表格数据是否有选中
     var keyTableAllChecked = true;      //表单数据是否被全选中
     var selectIndex = [];               //选中的编号
-    var setValue = 0;                   // 4: 关键词匹配方式,6:附加词匹配方式,8:排除词匹配方式,9:采购单位,10:公告行业, 2:全局采购单位行业, 3:全局公告行业
+    var setValue = 0;                   // 4: 关键词匹配方式,6:附加词匹配方式,8:排除词匹配方式,9:采购单位,10:公告行业, 2:全局采购单位类型, 3:全局公告行业
     var state = 1;
     $(document).ready(function () {
         var name1 = {{(session "user").name}};
@@ -1108,6 +1108,23 @@
     function selectBuyer(val) {
         setValue = val;
         if (val == 2) {
+            buyerArr.length = 0
+            // 和button的值匹配,对应添加选中属性
+            var d = $("#s_buyerclass").val()
+            // 按逗号分隔
+            var select_value_array = d.split(",")
+            // 和button的值匹配,对应添加选中属性
+            for (index_ in select_value_array) {
+                //定位button 添加属性
+                $("#btnGroupBuyer").find("input").each(function () {
+                    if ($(this).val() == select_value_array[index_]) {
+                        $(this).addClass("active-btn-match");
+                        if (buyerArr.indexOf(select_value_array[index_]) == -1) {
+                            buyerArr.push($(this).val())
+                        }
+                    }
+                });
+            }
             $('#modal-select-buyer').modal("show");
         } else {
             if (keyTableChecked) {
@@ -1413,7 +1430,7 @@
         dataMap["s_globaladdkey"] = $('#g_addkey').val();
         dataMap["s_globalnotkey"] = $('#g_notkey').val();
         dataMap["s_globalclearkey"] = $('#s_globalclearkey').val();
-        //通用规则采购单位行业和关键词中的采购单位行业只能存在一个
+        //通用规则采购单位类型和关键词中的采购单位类型只能存在一个
         if (o_rules && o_rules.length > 0) {
             let tag = false;
             for (var i in o_rules) {
@@ -1422,7 +1439,7 @@
                 }
             }
             if (tag && dataMap.s_globalbuyerclass) {
-                showMsg("保存失败,采购单位行业在通用规则和关键词规则中不能同时存在!")
+                showMsg("保存失败,采购单位类型在通用规则和关键词规则中不能同时存在!")
                 return;
             }
         }
@@ -1553,12 +1570,15 @@
             data: {"id": dataMap.id},
             success: function (r) {
                 com.maskHide();
-                if (r.rep) {
+                if (r.rep===true) {
                     dataMap.i_estotal = r.count;
                     showTip("数据生成成功", 1000);
-                } else {
-                    showTip("数据生成失败", 1000);
+                } else if (r.rep===false){
+                    showTip(r.msg, 1200);
+                }else {
+                    showTip("数据生成失败", 1200);
                 }
+
             },
             error: function (r) {
                 com.maskHide();