|
@@ -2,6 +2,7 @@ package service
|
|
|
|
|
|
import (
|
|
|
"encoding/json"
|
|
|
+ "io/ioutil"
|
|
|
"log"
|
|
|
mu "mfw/util"
|
|
|
"net"
|
|
@@ -9,6 +10,7 @@ import (
|
|
|
"qfw/util/elastic"
|
|
|
"qfw/util/redis"
|
|
|
"regexp"
|
|
|
+ "strings"
|
|
|
"time"
|
|
|
"udptask"
|
|
|
. "util"
|
|
@@ -32,6 +34,11 @@ type RepairRule struct {
|
|
|
repairSave xweb.Mapper `xweb:"/service/jianyu/save"`
|
|
|
repairCreate xweb.Mapper `xweb:"/service/jianyu/create"`
|
|
|
repairNewSave xweb.Mapper `xweb:"/service/jianyu/newSave"`
|
|
|
+
|
|
|
+ repairBulk xweb.Mapper `xweb:"/service/jianyu/bulk_repair"`
|
|
|
+ repairImport xweb.Mapper `xweb:"/service/jianyu/importData"`
|
|
|
+ repairModify xweb.Mapper `xweb:"/service/jianyu/modifySave"`
|
|
|
+ repairRecord xweb.Mapper `xweb:"/service/jianyu/modifyRecord"`
|
|
|
}
|
|
|
|
|
|
func (jy *RepairRule) RepairList() {
|
|
@@ -236,6 +243,7 @@ func (jy *RepairRule) RepairSave() {
|
|
|
coll := qu.ObjToString(request_data["coll"])
|
|
|
id := qu.ObjToString((*updata)["_id"])
|
|
|
old_data, _ := JYMgo.FindById(coll, id, "") //记录当前表的源数据
|
|
|
+ delete(*old_data, "_id")
|
|
|
reasons := qu.ObjToString(request_data["reasons"])
|
|
|
contenthtml := qu.ObjToString(request_data["contenthtml"])
|
|
|
detail := qu.ObjToString(request_data["detail"])
|
|
@@ -244,7 +252,15 @@ func (jy *RepairRule) RepairSave() {
|
|
|
(*updata)["contenthtml"] = contenthtml
|
|
|
(*updata)["detail"] = detailClear(detail)
|
|
|
//变更字段
|
|
|
- (*updata)["modifyinfo"] = modifyinfo
|
|
|
+ if (*updata)["modifyinfo"] != nil {
|
|
|
+ tmpinfo := (*updata)["modifyinfo"].(map[string]interface{})
|
|
|
+ for k, v := range *modifyinfo{
|
|
|
+ tmpinfo[k] = v
|
|
|
+ }
|
|
|
+ (*updata)["modifyinfo"] = tmpinfo
|
|
|
+ }else {
|
|
|
+ (*updata)["modifyinfo"] = modifyinfo
|
|
|
+ }
|
|
|
|
|
|
//处理个别字段
|
|
|
if val, ok := (*updata)["comeintime"]; ok {
|
|
@@ -290,7 +306,7 @@ func (jy *RepairRule) RepairSave() {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- rep := JYMgo.Update(coll, query, set, false, true)
|
|
|
+ rep := JYMgo.Update(coll, query, set, false, false)
|
|
|
qu.Debug("mgo id:" + id + "------", rep)
|
|
|
if !rep {
|
|
|
jy.ServeJson(map[string]interface{}{
|
|
@@ -339,6 +355,7 @@ func (jy *RepairRule) RepairSave() {
|
|
|
"s_backupid": id,
|
|
|
"o_oldinfo": old_data,
|
|
|
"o_newinfo": updata,
|
|
|
+ "modifyinfo": modifyinfo,
|
|
|
}
|
|
|
Mgo.Save(JyRecord, log_data)
|
|
|
|
|
@@ -437,6 +454,213 @@ func detailClear(detail string) string {
|
|
|
return new_s
|
|
|
}
|
|
|
|
|
|
-func s() {
|
|
|
- elastic.AnalyQuery()
|
|
|
+func (jy *RepairRule) RepairBulk() {
|
|
|
+ defer qu.Catch()
|
|
|
+ jy.Render("repair/jianyu_bulk.html")
|
|
|
+}
|
|
|
+
|
|
|
+func (jy *RepairRule) RepairRecord() {
|
|
|
+ defer qu.Catch()
|
|
|
+ if jy.Method() == "POST" {
|
|
|
+ start, _ := jy.GetInteger("start")
|
|
|
+ limit, _ := jy.GetInteger("length")
|
|
|
+ draw, _ := jy.GetInteger("draw")
|
|
|
+ searchStr := jy.GetString("search[value]")
|
|
|
+ search := strings.TrimSpace(searchStr)
|
|
|
+ query := bson.M{}
|
|
|
+ if search != "" {
|
|
|
+ query["$or"] = []interface{}{
|
|
|
+ bson.M{"s_customer": bson.M{"$regex": search}},
|
|
|
+ bson.M{"s_tagname": bson.M{"$regex": search}},
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ data, _ := Mgo.Find("jymodifylog", query, `{"i_modifytime": -1}`, nil, false, start, limit)
|
|
|
+ count := Mgo.Count("jymodifylog", query)
|
|
|
+ jy.ServeJson(map[string]interface{}{
|
|
|
+ "draw": draw,
|
|
|
+ "data": data,
|
|
|
+ "recordsFiltered": count,
|
|
|
+ "recordsTotal": count,
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ jy.Render("repair/jianyu_bulk.html")
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func (jy *RepairRule) RepairImport() {
|
|
|
+ defer qu.Catch()
|
|
|
+ if jy.Method() == "POST" {
|
|
|
+ mf, _, err := jy.GetFile("xlsx")
|
|
|
+ if err == nil {
|
|
|
+ binary, err := ioutil.ReadAll(mf)
|
|
|
+ if err == nil {
|
|
|
+ data, err := ParsJyData(binary)
|
|
|
+ qu.Debug(err)
|
|
|
+ if err == nil {
|
|
|
+ jy.ServeJson(map[string]interface{}{
|
|
|
+ "data": data,
|
|
|
+ "rep": true,
|
|
|
+ })
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ jy.ServeJson(map[string]interface{}{
|
|
|
+ "rep": false,
|
|
|
+ })
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func (jy *RepairRule) RepairModify() {
|
|
|
+ defer qu.Catch()
|
|
|
+ if jy.Method() == "POST" {
|
|
|
+ user := jy.GetSession("user").(map[string]interface{})
|
|
|
+ data := GetPostForm(jy.Request)
|
|
|
+ var updata []map[string]interface{}
|
|
|
+ json.Unmarshal([]byte(qu.ObjToString(data["data"])), &updata)
|
|
|
+ var errs []map[string]interface{}
|
|
|
+ for _, tmp := range updata{
|
|
|
+ err := ModifyData(tmp, user)
|
|
|
+ if err != nil {
|
|
|
+ errs = append(errs, err)
|
|
|
+ }
|
|
|
+ time.Sleep(time.Millisecond * 1)
|
|
|
+ }
|
|
|
+
|
|
|
+ if len(errs) > 0 {
|
|
|
+ jy.ServeJson(map[string]interface{}{
|
|
|
+ "rep": false,
|
|
|
+ "data": errs,
|
|
|
+ })
|
|
|
+ }else {
|
|
|
+ jy.ServeJson(map[string]interface{}{
|
|
|
+ "rep": true,
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func ModifyData(tmp map[string]interface{}, user map[string]interface{}) (err map[string]interface{}) {
|
|
|
+ id := qu.ObjToString(tmp["_id"])
|
|
|
+ old_data, _ := JYMgo.FindById(JyCollNameOne, id, `{}`)
|
|
|
+ coll := ""
|
|
|
+ if old_data != nil {
|
|
|
+ coll = JyCollNameOne
|
|
|
+ }else {
|
|
|
+ t, _ := JYMgo.FindById(JyCollNameTwo, id, `{}`)
|
|
|
+ if t != nil {
|
|
|
+ return map[string]interface{}{"_id": id, "err": "未找到数据"}
|
|
|
+ }else {
|
|
|
+ old_data = t
|
|
|
+ }
|
|
|
+ }
|
|
|
+ delete(*old_data, "_id")
|
|
|
+ new_data := Copy(*old_data).(map[string]interface{})
|
|
|
+ modifyinfo := make(map[string]interface{})
|
|
|
+ del_data := make(map[string]interface{})
|
|
|
+ for k, v := range tmp{
|
|
|
+ if k == "_id" {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ if strings.EqualFold(strings.ToUpper(qu.ObjToString(v)), "DEL") {
|
|
|
+ del_data[k] = ""
|
|
|
+ delete(new_data, k)
|
|
|
+ }else {
|
|
|
+ new_data[k] = v
|
|
|
+ }
|
|
|
+ modifyinfo[k] = true
|
|
|
+ }
|
|
|
+ //变更字段
|
|
|
+ if new_data["modifyinfo"] != nil {
|
|
|
+ tmpinfo := new_data["modifyinfo"].(map[string]interface{})
|
|
|
+ for k, v := range modifyinfo{
|
|
|
+ tmpinfo[k] = v
|
|
|
+ }
|
|
|
+ new_data["modifyinfo"] = tmpinfo
|
|
|
+ }else {
|
|
|
+ new_data["modifyinfo"] = modifyinfo
|
|
|
+ }
|
|
|
+ if val, ok := new_data["comeintime"]; ok {
|
|
|
+ new_data["comeintime"] = qu.Int64All(val)
|
|
|
+ } else {
|
|
|
+ curtime := time.Now().Unix()
|
|
|
+ new_data["comeintime"] = curtime
|
|
|
+ }
|
|
|
+
|
|
|
+ if val, ok := new_data["publishtime"]; ok {
|
|
|
+ new_data["publishtime"] = qu.Int64All(val)
|
|
|
+ } else {
|
|
|
+ pt := int64(0)
|
|
|
+ new_data["publishtime"] = pt
|
|
|
+ }
|
|
|
+ if val, ok := new_data["infoformat"]; ok {
|
|
|
+ new_data["infoformat"] = qu.IntAll(val)
|
|
|
+ } else {
|
|
|
+ new_data["infoformat"] = 1
|
|
|
+ }
|
|
|
+ new_data["extracttype"] = 0
|
|
|
+ query := bson.M{
|
|
|
+ "_id": qu.StringTOBsonId(id),
|
|
|
+ }
|
|
|
+ delete(new_data, "_id")
|
|
|
+ var set map[string]interface{}
|
|
|
+ if len(del_data) == 0 {
|
|
|
+ set = bson.M {
|
|
|
+ "$set": new_data,
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ set = bson.M {
|
|
|
+ "$set": new_data,
|
|
|
+ "$unset": del_data,
|
|
|
+ }
|
|
|
+ }
|
|
|
+ rep := JYMgo.Update(coll, query, set, false, false)
|
|
|
+ if !rep {
|
|
|
+ return map[string]interface{}{"_id": id, "err": "更新失败"}
|
|
|
+ }
|
|
|
+
|
|
|
+ indexNode := *qu.ObjToMap(Sysconfig["indexNode"])
|
|
|
+ param := map[string]interface{}{"coll": coll}
|
|
|
+ by, _ := json.Marshal(map[string]interface{}{
|
|
|
+ "gteid": id,
|
|
|
+ "lteid": id,
|
|
|
+ "stype": qu.ObjToString(indexNode["stype"]),
|
|
|
+ "param": param,
|
|
|
+ })
|
|
|
+ addr := &net.UDPAddr{
|
|
|
+ IP: net.ParseIP(indexNode["addr"].(string)),
|
|
|
+ Port: qu.IntAll(indexNode["port"]),
|
|
|
+ }
|
|
|
+ udptask.Udpclient.WriteUdp(by, mu.OP_TYPE_DATA, addr)
|
|
|
+
|
|
|
+ //删除redis 指定key
|
|
|
+ jyredis := redis.RedisPool[RedisJYName].Get()
|
|
|
+ defer jyredis.Close()
|
|
|
+ if _, err := jyredis.Do("SELECT", 0); err != nil {
|
|
|
+ log.Println("更新-redis-select-db失败")
|
|
|
+ } else {
|
|
|
+ delName1 := RedisDelKey1 + id
|
|
|
+ if _, err1 := jyredis.Do("DEL", delName1); err1 != nil {
|
|
|
+ log.Println("更新-del-redis-fail:", delName1)
|
|
|
+ }
|
|
|
+ delName2 := RedisDelKey2 + id
|
|
|
+ if _, err2 := jyredis.Do("DEL", delName2); err2 != nil {
|
|
|
+ log.Println("更新-del-redis-fail:", delName2)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ delete(new_data, "modifyinfo")
|
|
|
+ log_data := map[string]interface{}{
|
|
|
+ "s_modifyuser": user["name"],
|
|
|
+ "s_type": 2,
|
|
|
+ "i_modifytime": time.Now().Unix(),
|
|
|
+ "s_modifyreason": "批量修改",
|
|
|
+ "s_backupid": id,
|
|
|
+ "o_oldinfo": old_data,
|
|
|
+ "o_newinfo": new_data,
|
|
|
+ "modifyinfo": modifyinfo,
|
|
|
+ }
|
|
|
+ Mgo.Save(JyRecord, log_data)
|
|
|
+ return nil
|
|
|
}
|