Jianghan 5 سال پیش
والد
کامیت
0bfc055039

+ 80 - 11
src/service/customer_service.go

@@ -31,14 +31,16 @@ type Customer struct {
 	//企业客户
 	entEuserList 	xweb.Mapper `xweb:"/service/entCustomer/list"`
 
-	cuserRule       xweb.Mapper `xweb:"/service/cuser/rule/list"`  	 	//规则列表
+	cuserRule       xweb.Mapper `xweb:"/service/cuser/rule/list"`  	 	//规则列表	部门
 	cuserRuleCreate xweb.Mapper `xweb:"/service/cuser/rule/create"` 		//新建规则
 	cuserRuleEdit 	xweb.Mapper `xweb:"/service/cuser/rule/Edit"`
 	cuserRuleDel 	xweb.Mapper `xweb:"/service/cuser/rule/Del"`
 	//企业标签
-	euserTagEdit	xweb.Mapper `xweb:"/service/esuer/tag/edit"`
-	tagSetup		xweb.Mapper `xweb:"/service/esuer/tag/setup"`
-	tagDel			xweb.Mapper `xweb:"/service/esuer/tag/del"`
+	euserTagEdit	xweb.Mapper `xweb:"/service/euser/tag/edit"`
+	tagSetup		xweb.Mapper `xweb:"/service/euser/tag/setup"`
+	tagDel			xweb.Mapper `xweb:"/service/euser/tag/del"`
+	cuserRuleList	xweb.Mapper `xweb:"/service/tag/ruleList"`			//规则列表	客户
+	tagAssociated	xweb.Mapper `xweb:"/service/euser/tag/associated"`   //私有标签关联规则
 }
 
 func (c *Customer) CustomerList() {
@@ -86,10 +88,10 @@ func (c *Customer) CustomerEdit() {
 	query := bson.M{}
 	query["_id"] = qu.StringTOBsonId(id)
 	data, _ := Mgo.FindOneByField("cuser", query, `{}`)
-	depart, _ := Mgo.Find("cuserdepart", bson.M{"s_userid": id}, nil, nil, false, -1, -1)
+	depart, _ := Mgo.Find("cuserdepart", bson.M{"s_userid": id, "b_delete": false}, nil, nil, false, -1, -1)
 	(*data)["_id"] = qu.BsonIdToSId((*data)["_id"])
 	if (*data)["i_state"]  == 1 {
-		tagRule, _ := Mgo.Find("eusertagrule", bson.M{"s_userid": id}, nil, nil, false, -1, -1)
+		tagRule, _ := Mgo.Find("eusertagrule", bson.M{"s_userid": id, "b_delete": false}, nil, nil, false, -1, -1)
 		c.T["tagrule"] = *tagRule
 	}
 	c.T["data"] = *data
@@ -165,6 +167,7 @@ func (c *Customer) DepartEdit() {
 	if id == "" {
 		data["i_createtime"] = time.Now().Unix()
 		data["i_updatetime"] = time.Now().Unix()
+		data["b_delete"] = false
 		_id := Mgo.Save("cuserdepart", data)
 		if _id == "" {
 			b = false
@@ -297,10 +300,25 @@ func (c *Customer) SynEuser() {
 		return
 	}
 	departMap, _ := Mgo.Find("cuserdepart", bson.M{"s_userid": _id, "i_isuse": 1, "b_delete": false}, nil, nil, false, -1, -1)
-	Mgo.SaveBulk("euserdepart", *departMap...)
+	//Mgo.SaveBulk("euserdepart", *departMap...)
+	update := [][]map[string]interface{}{}
+	for _, v := range *departMap {
+		idAndSet := []map[string]interface{}{}
+		idAndSet = append(idAndSet, bson.M{"_id": v["_id"]})    //查询条件
+		idAndSet = append(idAndSet, v) //修改的数据
+		update = append(update, idAndSet)
+	}
+	Mgo.UpdateBulk("euserdepart", update...)
 	ruleMap, _ := Mgo.Find("cuserdepartrule", bson.M{"s_userid": _id, "i_isuse": 1, "b_delete": false}, nil, nil, false, -1, -1)
-	b = Mgo.SaveBulk("euserdepartrule", *ruleMap...)
-
+	//b = Mgo.SaveBulk("euserdepartrule", *ruleMap...)
+	update2 := [][]map[string]interface{}{}
+	for _, v := range *ruleMap {
+		idAndSet := []map[string]interface{}{}
+		idAndSet = append(idAndSet, bson.M{"_id": v["_id"]})    //查询条件
+		idAndSet = append(idAndSet, v) //修改的数据
+		update2 = append(update2, idAndSet)
+	}
+	b = Mgo.UpSertBulk("euserdepartrule", update2...)
 	c.ServeJson(map[string]interface{}{
 		"rep": b,
 	})
@@ -381,6 +399,8 @@ func (c *Customer) CuserRuleCreate() {
 		o_rulesStr := data["o_rules"].(string)
 		json.Unmarshal([]byte(o_rulesStr), &o_rules)
 		data["o_rules"] = o_rules
+		delete(data, "id")
+		delete(data, "ids")
 		if qu.IntAll(data["i_esquerytype"]) == 1 { //自动生成es
 			data["s_esquery"] = Utiltags(data)
 		}
@@ -510,7 +530,7 @@ func (c *Customer) TagSetup() {
 				"i_isuse": i_isuse,
 			},
 		}
-		b := Mgo.UpdateById("cuserdepartrule", _id, set)
+		b := Mgo.UpdateById("eusertagrule", _id, set)
 		c.ServeJson(map[string]interface{}{
 			"rep": b,
 		})
@@ -525,7 +545,56 @@ func (c *Customer) TagDel() {
 			"b_delete": true,
 		},
 	}
-	b := Mgo.UpdateById("tagrule", _id, set)
+	b := Mgo.UpdateById("eusertagrule", _id, set)
+	c.ServeJson(map[string]interface{}{
+		"rep": b,
+	})
+}
+
+func (c *Customer) CuserRuleList() {
+	defer qu.Catch()
+	if c.Method() == "POST" {
+		eid := c.GetString("eid")
+		start, _ := c.GetInteger("start")
+		limit, _ := c.GetInteger("length")
+		draw, _ := c.GetInteger("draw")
+		searchStr := c.GetString("search[value]")
+		search := strings.TrimSpace(searchStr)
+		query := bson.M{
+			"s_userid":   eid,
+			"i_isuse": 1,
+			"b_delete":   false,
+		}
+		if search != "" {
+			query["$or"] = []interface{}{
+				bson.M{"s_name": bson.M{"$regex": search}},
+			}
+		}
+		data, _ := Mgo.Find("euserdepartrule", query, `{"i_createtime":-1}`, nil, false, start, limit)
+		for _, v := range *data {
+			d, _ := Mgo.FindById("euserdepart", qu.ObjToString(v["s_departid"]), nil)
+			v["s_depart"] = qu.ObjToString((*d)["s_name"])
+		}
+		count := Mgo.Count("euserdepartrule", query)
+		c.ServeJson(map[string]interface{}{
+			"draw":            draw,
+			"data":            data,
+			"recordsFiltered": count,
+			"recordsTotal":    count,
+		})
+	}
+}
+
+func (c *Customer) TagAssociated() {
+	defer qu.Catch()
+	_id := c.GetString("_id")
+	ids := c.GetString("ids")
+	set := bson.M{
+		"$set": bson.M{
+			"o_departruleids": ids,
+		},
+	}
+	b := Mgo.UpdateById("eusertagrule", _id, set)
 	c.ServeJson(map[string]interface{}{
 		"rep": b,
 	})

+ 0 - 1
src/util/config.go

@@ -62,7 +62,6 @@ func InitMgoPool() {
 		DbName:      qu.ObjToString(customer["dbname"]),
 	}
 	MgoCus.InitPool()
-
 }
 
 func initMgoEn() {

+ 1 - 0
src/web/templates/private/cuser_rule_create.html

@@ -422,6 +422,7 @@
         "i_endtime": 0,
         "i_extfieldstype": 2,
         "i_esquerytype": 1,
+        "i_isuse": 1,
     };
 
     $(document).ready(function () {

+ 182 - 10
src/web/templates/private/customer_edit.html

@@ -56,7 +56,7 @@
                                     <div id="pushDiv">
                                         <div class="box-header with-border">
                                             <i class="fa fa-tag"></i>
-                                            <h3 class="box-title">推送设置</h3>
+                                            <h3 class="box-title">企业客户信息</h3>
                                         </div>
                                         <div class="box-body">
                                             <div class="form-group">
@@ -95,6 +95,29 @@
                                                     </select>
                                                 </div>
                                             </div>
+                                            <div class="form-group">
+                                                <label class="col-sm-2 control-label">数据扩展</label>
+                                                <div class="col-sm-3">
+                                                    <select class="form-control selectpicker" multiple id="expandSelect">
+                                                        <option value=0>hospitalgrade</option>
+                                                        <option value=1>enterpise</option>
+                                                    </select>
+                                                    <script>
+                                                        $('#existFieldSelect').on('hide.bs.select', function () {
+                                                            var arr = $('#existFieldSelect').val();
+                                                            var arrStr = "";
+                                                            for (var i in arr) {
+                                                                if (arrStr === "") {
+                                                                    arrStr = arr[i]
+                                                                } else {
+                                                                    arrStr = arrStr + "," + arr[i]
+                                                                }
+                                                            }
+                                                            dataMap["s_existfields"] = arrStr
+                                                        })
+                                                    </script>
+                                                </div>
+                                            </div>
                                         </div>
                                     </div>
                                     <div class="box-header with-border">
@@ -128,7 +151,7 @@
                             <div class="box-header with-border">
                                 <i class="fa fa-bookmark"></i>
                                 <h3 class="box-title">私有标签</h3>
-                                <a class="btn btn-primary btn-sm" style="float: right;margin-top: 7px;margin-right: 10px" href="/service/esuer/tag/edit?cid={{.T.data._id}}"><i class="fa fa-fw fa-file-code-o fa-lg"></i>新建标签</a>
+                                <a class="btn btn-primary btn-sm" style="float: right;margin-top: 7px;margin-right: 10px" href="/service/euser/tag/edit?cid={{.T.data._id}}"><i class="fa fa-fw fa-file-code-o fa-lg"></i>新建标签</a>
                             </div>
                             <table id="tagrule" class="table table-bordered">
                                 <thead>
@@ -137,6 +160,7 @@
                                     <th>规则名称</th>
                                     <th>修改时间</th>
                                     <th>启用状态</th>
+                                    <th>操作</th>
                                     <th>功能</th>
                                 </tr>
                                 </thead>
@@ -193,6 +217,42 @@
         </div>
     </div><!-- /.modal -->
 </div>
+<!-- 关联客户规则 -->
+<div class="modal fade" id="modal-associated" tabindex="-1" role="dialog" aria-hidden="true">
+    <div class="modal-dialog" style="width: 60%">
+        <div class="modal-content">
+            <div class="modal-header">
+                <div class="modal-header">
+                    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+                    <div class="edit-form">
+                        <div class="edit-info">
+                            <span class="glyphicon glyphicon-ok-sign" aria-hidden="true"></span>
+                            <span>关联客户规则</span>
+                        </div>
+                        <div class="content">
+                            <table id="cuserRule" class="table table-bordered">
+                                <thead>
+                                <tr>
+                                    <th>编号</th>
+                                    <th><input type="checkbox" id="selrow" onclick="allSelect(this)"/></th>
+                                    <th>标签名称</th>
+                                    <th>部门名称</th>
+                                    <th>创建时间</th>
+                                </tr>
+                                </thead>
+                            </table>
+                        </div>
+                    </div>
+                </div>
+                <div class="modal-footer">
+                    <input type="button" onclick="saveTagrule()" class="btn btn-primary saveBtn" value="保存">
+                    <input type="button" onclick="cancelModel()" class="btn btn-default" style="margin-left: 24px"
+                           value="取消">
+                </div>
+            </div>
+        </div>
+    </div><!-- /.modal -->
+</div>
 
 {{include "com/footer.html"}}
 <script>
@@ -200,6 +260,7 @@
     var dataMap = {{.T.data}}
     var departArr = {{.T.depart}}
     var tagruleArr = []
+    var ruleArr = []
 
     var selectIndex = [];               //选中的编号
 
@@ -243,7 +304,7 @@
             },
             "columns": [
                 {"data":function() {
-                        return `<input type="checkbox" name="ckb-keyid" onclick="singleSelect(this)" style="text-align: center">`
+                        return `<input type="checkbox" name="ckb-depart" onclick="singleSelect1(this)" style="text-align: center">`
                     }, width: "3%"},
                 {"data": null, width: "3%"},
                 {"data": "s_name", width: "10%"},
@@ -300,7 +361,7 @@
                 {"data": "i_updatetime", width:"9%", render: function (val) {
                         var dt = new Date()
                         dt.setTime(parseInt(val) * 1000);
-                        return dt.format("yyyy-MM-dd")
+                        return dt.format("yyyy-MM-dd hh:mm:ss")
                     }},
                 {"data": "i_isuse", render: function (val, a, row) {
                         tmp = ""
@@ -313,21 +374,66 @@
                     }, width: "10%" },
                 {"data": "_id", width:"11%",render: function (val, a, row, pos) {
                         tmp = '<div>' +
-                            '<a class="btn btn-sm btn-primary" href="/service/esuer/tag/edit?id='+val+'&cid='+row.s_userid+'">编辑</a>&nbsp&nbsp'+
+                            '<a class="btn btn-sm btn-primary" href="/service/euser/tag/edit?id='+val+'&cid='+row.s_userid+'">编辑</a>&nbsp&nbsp'+
                             '<a class="btn btn-sm btn-danger" onclick="delTag(\''+val+'\')">删除</a>'+
                             '</div>';
                         return tmp
                     }},
+                {"data": "_id", width:"11%",render: function (val, a, row, pos) {
+                        var s = [val, row.s_userid]
+                        tmp = '<div>' +
+                            '<a class="btn btn-sm btn-primary" onclick="associated(\''+s+'\')">关联数据范围</a>&nbsp&nbsp'+
+                            '</div>';
+                        return tmp
+                    }},
             ],
         });
     })
     function cancelModel() {
-        $('#modal-add-depart').modal("hide");
+        $('#modal-add-depart').modal("hide")
+        $('#modal-associated').modal("hide")
+    }
+    //表格全选
+    function allSelect(obj) {
+        if ($(obj).is(':checked')) {
+            keyTableChecked = true;
+            keyTableAllChecked = true;
+            $('input[name="ckb-rule"]').each(function () {
+                this.checked = true;
+                selectIndex.push($(this).parents("tr").index());
+            })
+        } else {
+            selectIndex.length = 0;
+            keyTableChecked = false;
+            keyTableAllChecked = false;
+            $('input[name="ckb-keyid"]').each(function () {
+                this.checked = false;
+            })
+        }
     }
     function singleSelect(obj) {
         var tag = true;
         selectIndex.length = 0;
-        $('input[name="ckb-keyid"]').each(function () {
+        $('input[name="ckb-rule"]').each(function () {
+            if (this.checked) {
+                keyTableChecked = true;
+                selectIndex.push($(this).parents("tr").index());
+            }else {
+                tag = false
+            }
+        });
+        if (tag) {
+            keyTableAllChecked = true;
+            $('#allCheckbox').prop("checked", true);
+        }else {
+            keyTableAllChecked = false;
+            $('#allCheckbox').prop("checked", false);
+        }
+    }
+    function singleSelect1(obj) {
+        var tag = true;
+        selectIndex.length = 0;
+        $('input[name="ckb-depart"]').each(function () {
             if (this.checked) {
                 keyTableChecked = true;
                 selectIndex.push($(this).parents("tr").index() + 1);
@@ -358,6 +464,7 @@
         if (dataMap.i_state == 1) {
             dataMap.i_pushmodel = $('#pushModelSelect option:selected').val()
             dataMap.i_pushtype = $('#pushTypeSelect option:selected').val()
+            dataMap.s_extends = $('#expandSelect').val()
         }
         dataMap.id = dataMap._id
         $.ajax({
@@ -508,7 +615,7 @@
         }
         showConfirm(msg, function() {
             $.ajax({
-                url:"/service/esuer/tag/setup",
+                url:"/service/euser/tag/setup",
                 type:"post",
                 data:{"_id": val, "i_isuse": i_isuse},
                 success:function(r){
@@ -525,17 +632,82 @@
     function delTag(val) {
         showConfirm("确定删除?", function () {
             $.ajax({
-                url: "/service/esuer/tag/del",
+                url: "/service/euser/tag/del",
                 type: "post",
                 data: {"_id": val},
                 success: function (r) {
                     if (r.rep) {
                         window.location.reload()
                     } else {
-                        alert("删除失败");
+                        showTip("删除失败", 1000);
                     }
                 }
             })
         });
     }
+    var tagid = ""
+    //关联规则
+    function associated(val) {
+        tagid = val.split(",")[0]
+        $('#cuserRule').DataTable({
+            "destroy": true,
+            "paging": true,
+            "lengthChange": false,
+            "searching": false,
+            "ordering": false,
+            "info": true,
+            "autoWidth": false,
+            "serverSide": true,
+            "ajax": {
+                url: "/service/tag/ruleList",
+                type: "post",
+                data: {"eid": val.split(",")[1]},
+            },
+            "language": {
+                "url": "/dist/js/dataTables.chinese.lang"
+            },
+            "fnDrawCallback": function () {
+                this.api().column(0).nodes().each(function (cell, i) {
+                    cell.innerHTML = i + 1;
+                });
+            },
+            "columns": [
+                {"data": null, width: "1%"},
+                {"data": "", width: "1%", render: function() {
+                        return `<input type="checkbox" name="ckb-rule" onclick="singleSelect(this)" style="text-align: center">`
+                    }},
+                {"data": "s_tagname", width: "20%"},
+                {"data": "s_depart", width: "10%"},
+                {"data": "i_updatetime", width:"10%", render: function (val) {
+                        var dt = new Date()
+                        dt.setTime(parseInt(val) * 1000);
+                        return dt.format("yyyy-MM-dd hh:mm:ss")
+                    }},
+            ],
+        });
+        $('#modal-associated').modal("show")
+    }
+    function saveTagrule() {
+        var ids = [];
+        var table = $('#cuserRule').dataTable();
+        var nTrs = table.fnGetNodes();
+        for (var i = 0; i < nTrs.length; i++) {
+            if ($(nTrs[i].childNodes[1]).find("input").prop("checked")) {
+                ids.push(table.fnGetData(nTrs[i])._id);
+            }
+        }
+        $.ajax({
+            url: "/service/euser/tag/associated",
+            type: "post",
+            data: {"_id": tagid, "ids": ids.join(",")},
+            success: function (r) {
+                if (r.rep) {
+                    // window.location.reload()
+                    showTip("关联成功", 1000);
+                } else {
+                    showTip("关联失败", 1000);
+                }
+            }
+        })
+    }
 </script>

+ 5 - 5
src/web/templates/private/euser_tag_rule.html

@@ -24,9 +24,9 @@
         <form class="form-horizontal">
                 <div class="box box-primary">
                     <div class="box-header with-border">
-                        <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>保存标签</button>
                         <i class="fa fa-tag"></i>
                         <h3 class="box-title">标签信息</h3>
+                        <a class="btn btn-primary btn-sm" style="float: right;margin-top: 7px;margin-right: 10px" onclick="saveTag1()"><i class="fa fa-fw fa-file-text fa-lg"></i>保存标签</a>
                     </div>
                     <div class="box-body">
                         <div class="form-group">
@@ -179,7 +179,7 @@
     //表单数据
     var dataMap = {
         "s_name": "",
-        "s_isuse": 0,
+        "i_isuse": 0,
         "s_userid": {{.T.cid}}
     }
 
@@ -416,7 +416,7 @@
             $('#allCheckbox').prop("checked", false);
         }
     }
-    function saveTag() {
+    function saveTag1() {
         dataMap.s_name = $('#tagname').val()
         if (dataMap.s_tagname == "") {
             alert("请填写必须字段!")
@@ -440,8 +440,8 @@
         }
         dataMap["o_list"] = JSON.stringify(o_list);
         $.ajax({
-            url: "/service/esuer/tag/edit",
-            type: 'POST',
+            url: "/service/euser/tag/edit",
+            type: "post",
             data: dataMap,
             success: function (r) {
                 if (r.rep && r.id) {