dataaudit.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375
  1. package audit
  2. import (
  3. "encoding/json"
  4. . "jy/admin"
  5. "jy/clear"
  6. . "jy/mongodbutil"
  7. "jy/util"
  8. "log"
  9. qu "qfw/util"
  10. "qfw/util/elastic"
  11. redis "qfw/util/redis"
  12. "strings"
  13. "time"
  14. "github.com/gin-gonic/gin"
  15. )
  16. func init() {
  17. //列表、编辑
  18. Admin.GET("/audit/dataaudit", func(c *gin.Context) {
  19. name := c.Query("name")
  20. coll := c.Query("coll")
  21. c.HTML(200, "audit_auditone.html", gin.H{"name": name, "coll": coll})
  22. })
  23. Admin.POST("/audit/auditonefield", AuditOneField)
  24. Admin.POST("/audit/addsave", AddSave) //新增
  25. Admin.POST("/audit/auditsave", AuditSave) //保存
  26. Admin.POST("/audit/alldel", AllDel) //批量删除
  27. Admin.POST("/audit/allaudit", AllAudit) //批量审核
  28. Admin.POST("/audit/datasave", DataSave) //标准库数据审核
  29. }
  30. func AuditData(c *gin.Context) {
  31. v, _ := Mgo.FindOne("version", `{"isuse":true,"delete":false}`)
  32. if len(*v) > 0 {
  33. vid := qu.BsonIdToSId((*v)["_id"])
  34. query := map[string]interface{}{
  35. "isaudit": true,
  36. "delete": false,
  37. "vid": vid,
  38. }
  39. data, _ := Mgo.Find("versioninfo", query, `{"_id":-1}`, nil, false, -1, -1)
  40. for _, d := range *data {
  41. timeStr := time.Unix(d["l_lasttime"].(int64), 0).Format(Date_Short_Layout)
  42. d["l_lasttime"] = timeStr
  43. }
  44. c.JSON(200, gin.H{"data": data})
  45. } else {
  46. c.JSON(200, gin.H{"data": map[string]interface{}{}})
  47. }
  48. }
  49. func AllDel(c *gin.Context) {
  50. coll, _ := c.GetPostForm("coll")
  51. ids, _ := c.GetPostForm("ids")
  52. idsArr := strings.Split(ids, ",")
  53. for _, id := range idsArr {
  54. query := map[string]interface{}{
  55. "_id": qu.StringTOBsonId(id),
  56. }
  57. Mgo.Del(coll, query)
  58. }
  59. c.JSON(200, gin.H{"rep": true})
  60. }
  61. func AuditOneField(c *gin.Context) {
  62. field, _ := c.GetPostForm("field")
  63. coll, _ := c.GetPostForm("coll")
  64. start := c.GetInt("start")
  65. limit := c.GetInt("length")
  66. auditattr, _ := c.GetPostForm("auditattr")
  67. query := map[string]interface{}{}
  68. if auditattr != "-1" {
  69. query = map[string]interface{}{
  70. field + "_" + auditattr: 1,
  71. }
  72. } else {
  73. query = map[string]interface{}{
  74. "$or": []interface{}{
  75. map[string]interface{}{field + "_ok": 1},
  76. map[string]interface{}{field + "_err": 1},
  77. },
  78. }
  79. }
  80. data, _ := Mgo.Find(coll, query, `{"_id":1}`, `{"topscopeclass":1,"`+field+`":1}`, false, start, limit)
  81. count := Mgo.Count(coll, query)
  82. page := start / 10
  83. for k, d := range *data {
  84. d["num"] = k + 1 + page*10
  85. d["topscopeclass"] = strings.Join(qu.ObjArrToStringArr(d["topscopeclass"].([]interface{})), ",")
  86. d["text"] = d[field]
  87. }
  88. c.JSON(200, gin.H{"data": data, "recordsFiltered": count, "recordsTotal": count})
  89. }
  90. func AllAudit(c *gin.Context) {
  91. field, _ := c.GetPostForm("field")
  92. coll, _ := c.GetPostForm("coll")
  93. ids, _ := c.GetPostForm("ids")
  94. idsArr := strings.Split(ids, ",")
  95. log.Println("Audit Ids:", idsArr)
  96. names, _ := c.GetPostForm("names")
  97. namesArr := strings.Split(names, ",")
  98. if len(idsArr) != len(namesArr) {
  99. c.JSON(200, gin.H{"rep": false, "msg": "数据错误"})
  100. } else { //批量审核
  101. SaveDb := ""
  102. FieldBd := 0
  103. ElasticClientIndex := ""
  104. ElasticClientType := ""
  105. RedisName := util.QYK_RedisName
  106. if field == "winner" {
  107. SaveDb = util.ElasticClientDB
  108. FieldBd = util.WinnerDB
  109. ElasticClientIndex = util.ElasticClientIndex
  110. ElasticClientType = util.ElasticClientType
  111. } else if field == "buyer" {
  112. SaveDb = util.ElasticClientBuyerDB
  113. FieldBd = util.BuyerDB
  114. ElasticClientIndex = util.ElasticClientBuyerIndex
  115. ElasticClientType = util.ElasticClientBuyerType
  116. } else {
  117. SaveDb = util.ElasticClientAgencyDB
  118. FieldBd = util.AgencyDB
  119. ElasticClientIndex = util.ElasticClientAgencyIndex
  120. ElasticClientType = util.ElasticClientAgencyType
  121. }
  122. //redis
  123. qykredis := redis.RedisPool[RedisName].Get()
  124. defer qykredis.Close()
  125. //es
  126. escon := elastic.GetEsConn()
  127. defer elastic.DestoryEsConn(escon)
  128. for i, name := range namesArr {
  129. e := make(map[string]interface{})
  130. e["comeintime"] = time.Now().Unix()
  131. if field == "winner" {
  132. e["company_name"] = name
  133. } else if field == "buyer" {
  134. e["buyer_name"] = name
  135. } else {
  136. e["agency_name"] = name
  137. }
  138. sid := Mgo.Save(SaveDb, e)
  139. if sid == "" {
  140. c.JSON(200, gin.H{"rep": false, "msg": "保存mongo出错"})
  141. return
  142. } else {
  143. if _, err := qykredis.Do("SELECT", FieldBd); err != nil {
  144. c.JSON(200, gin.H{"rep": false, "msg": "select redis出错"})
  145. return
  146. } else {
  147. if _, saveRedisErr := qykredis.Do("SET", name, sid); saveRedisErr != nil {
  148. c.JSON(200, gin.H{"rep": false, "msg": "保存redis出错"})
  149. return
  150. }
  151. }
  152. _, err := escon.Index().Index(ElasticClientIndex).Type(ElasticClientType).Id(sid).BodyJson(e).Refresh(true).Do()
  153. if err != nil {
  154. c.JSON(200, gin.H{"rep": false, "msg": "更新es错误"})
  155. return
  156. }
  157. }
  158. //删除标记数据
  159. query := map[string]interface{}{
  160. "_id": qu.StringTOBsonId(idsArr[i]),
  161. }
  162. b := Mgo.Del(coll, query)
  163. if !b {
  164. log.Println("Del Audit Data Error coll:", coll, " field:", field, " id:", idsArr[i])
  165. }
  166. }
  167. c.JSON(200, gin.H{"rep": true, "msg": "审核通过"})
  168. }
  169. }
  170. func DataSave(c *gin.Context) {
  171. SaveDb := ""
  172. FieldBd := 0
  173. ElasticClientIndex := ""
  174. ElasticClientType := ""
  175. RedisName := util.QYK_RedisName
  176. //企业名称
  177. e := make(map[string]interface{})
  178. field, _ := c.GetPostForm("field")
  179. name, _ := c.GetPostForm("name")
  180. address, _ := c.GetPostForm("address")
  181. if field == "winner" {
  182. SaveDb = util.ElasticClientDB
  183. FieldBd = util.WinnerDB
  184. ElasticClientIndex = util.ElasticClientIndex
  185. ElasticClientType = util.ElasticClientType
  186. capital, _ := c.GetPostForm("capital")
  187. capitalfloat := clear.ObjToMoney([]interface{}{capital, ""})[0]
  188. business_scope, _ := c.GetPostForm("business_scope")
  189. e["capital"] = capitalfloat
  190. e["business_scope"] = business_scope
  191. e["company_name"] = name
  192. e["company_address"] = address
  193. } else if field == "buyer" {
  194. SaveDb = util.ElasticClientBuyerDB
  195. FieldBd = util.BuyerDB
  196. ElasticClientIndex = util.ElasticClientBuyerIndex
  197. ElasticClientType = util.ElasticClientBuyerType
  198. buyerclass, _ := c.GetPostForm("buyerclass")
  199. ranks, _ := c.GetPostForm("ranks")
  200. buyer_type, _ := c.GetPostForm("type")
  201. e["buyerclass"] = buyerclass
  202. e["ranks"] = ranks
  203. e["type"] = buyer_type
  204. e["buyer_name"] = name
  205. e["address"] = address
  206. } else {
  207. SaveDb = util.ElasticClientAgencyDB
  208. FieldBd = util.AgencyDB
  209. ElasticClientIndex = util.ElasticClientAgencyIndex
  210. ElasticClientType = util.ElasticClientAgencyType
  211. ranks, _ := c.GetPostForm("ranks")
  212. agency_type, _ := c.GetPostForm("type")
  213. e["ranks"] = ranks
  214. e["type"] = agency_type
  215. e["agency_name"] = name
  216. e["address"] = address
  217. }
  218. //历史名称
  219. history_name, _ := c.GetPostForm("history_name")
  220. history_name = strings.ReplaceAll(history_name, ";", ";")
  221. e["history_name"] = history_name
  222. //城市信息
  223. area_code, _ := c.GetPostForm("area_code")
  224. province, _ := c.GetPostForm("province")
  225. city, _ := c.GetPostForm("city")
  226. district, _ := c.GetPostForm("district")
  227. e["area_code"] = area_code
  228. e["province"] = province
  229. e["city"] = city
  230. e["district"] = district
  231. //公众号
  232. wechat_accounts, _ := c.GetPostForm("wechat_accounts")
  233. wechat_accounts = strings.ReplaceAll(wechat_accounts, ";", ";")
  234. if len(wechat_accounts) > 0 {
  235. e["wechat_accounts"] = strings.Split(wechat_accounts, ";")
  236. } else {
  237. e["wechat_accounts"] = []string{}
  238. }
  239. //网址
  240. website, _ := c.GetPostForm("website")
  241. e["website"] = website
  242. //联系人
  243. contact, _ := c.GetPostForm("contact")
  244. contacts := make([]map[string]interface{}, 0)
  245. jsonerr := json.Unmarshal([]byte(contact), &contacts)
  246. if jsonerr != nil {
  247. e["contact"] = []map[string]interface{}{}
  248. } else {
  249. for k, v := range contacts {
  250. if v["updatetime"] == nil {
  251. contacts[k]["updatetime"] = time.Now().Unix()
  252. }
  253. }
  254. e["contact"] = contacts
  255. }
  256. //入库时间
  257. e["comeintime"] = time.Now().Unix()
  258. //新数据保存
  259. sid := Mgo.Save(SaveDb, e)
  260. if sid == "" {
  261. c.JSON(200, gin.H{"rep": false, "msg": "保存mongo出错"})
  262. return
  263. } else {
  264. qykredis := redis.RedisPool[RedisName].Get()
  265. defer qykredis.Close()
  266. if _, err := qykredis.Do("SELECT", FieldBd); err != nil {
  267. c.JSON(200, gin.H{"rep": false, "msg": "select redis出错"})
  268. return
  269. } else {
  270. if _, saveRedisErr := qykredis.Do("SET", name, sid); saveRedisErr != nil {
  271. c.JSON(200, gin.H{"rep": false, "msg": "保存redis出错"})
  272. return
  273. }
  274. }
  275. escon := elastic.GetEsConn()
  276. defer elastic.DestoryEsConn(escon)
  277. _, err := escon.Index().Index(ElasticClientIndex).Type(ElasticClientType).Id(sid).BodyJson(e).Refresh(true).Do()
  278. if err != nil {
  279. c.JSON(200, gin.H{"rep": false, "msg": "更新es错误"})
  280. return
  281. }
  282. }
  283. //删除标记数据
  284. coll, _ := c.GetPostForm("coll")
  285. _id, _ := c.GetPostForm("_id")
  286. query := map[string]interface{}{
  287. "_id": qu.StringTOBsonId(_id),
  288. }
  289. b := Mgo.Del(coll, query)
  290. if !b {
  291. log.Println("Del Audit Data Error coll:", coll, " field:", field, " id:", _id)
  292. }
  293. c.JSON(200, gin.H{"rep": true, "msg": "保存成功"})
  294. }
  295. func BuyerClass(c *gin.Context) {
  296. data, _ := Mgo.Find("classify", `{"i_type":1}`, `{"_id":-1}`, `{"s_name":1,"child":1}`, false, -1, -1)
  297. c.JSON(200, gin.H{"data": data})
  298. }
  299. func AddSave(c *gin.Context) {
  300. field, _ := c.GetPostForm("field")
  301. auditname, _ := c.GetPostForm("auditname")
  302. parentclass, _ := c.GetPostForm("parentclass")
  303. childclass, _ := c.GetPostForm("childclass")
  304. update := make(map[string]interface{})
  305. if field == "buyer" {
  306. update["buyerclass"] = childclass
  307. update["parentclass"] = parentclass
  308. }
  309. update["name"] = auditname
  310. update["pici"] = time.Now().Unix()
  311. update["s_source"] = "手动"
  312. b := Mgo.Update(field, `{"name":"`+auditname+`"}`, map[string]interface{}{
  313. "$set": update}, true, false)
  314. if b { //新增的直接更新buyer redis
  315. p := redis.PutCKV(field, field+"_"+auditname, 1)
  316. log.Println("Add--Update "+field+" redis:", p)
  317. }
  318. c.JSON(200, gin.H{"rep": b})
  319. }
  320. func AuditSave(c *gin.Context) {
  321. field, _ := c.GetPostForm("field")
  322. coll, _ := c.GetPostForm("coll")
  323. name, _ := c.GetPostForm("val")
  324. _id, _ := c.GetPostForm("id")
  325. eid, _ := c.GetPostForm("eid")
  326. update := make(map[string]interface{})
  327. if field == "buyer" || field == "winner" { //更新buyer或winner库,并保存到redis
  328. if field == "buyer" {
  329. parentclass, _ := c.GetPostForm("parentclass")
  330. childclass, _ := c.GetPostForm("childclass")
  331. update["buyerclass"] = childclass
  332. update["parentclass"] = parentclass
  333. }
  334. update["name"] = name
  335. update["pici"] = time.Now().Unix()
  336. update["s_source"] = "抽取"
  337. //更新结果表数据
  338. b1 := Mgo.UpdateById(coll, eid, map[string]interface{}{
  339. "$set": map[string]interface{}{
  340. field: name,
  341. },
  342. })
  343. log.Println("update coll", coll, "id", eid, field, "after audit", b1)
  344. //更新原有的winner或buyer库
  345. b2 := Mgo.Update(field, `{"name":"`+name+`"}`, map[string]interface{}{
  346. "$set": update}, true, false)
  347. log.Println("Audit--Update ", field, "coll", b2)
  348. //更新redis
  349. b3 := redis.PutCKV(field, field+"_"+name, 1)
  350. log.Println("Audit--Update ", field, " redis:", b3)
  351. //删除audit_err数据
  352. b4 := Mgo.Del("audit_err", `{"_id":"`+_id+`"}`)
  353. log.Println("Del audit_err id", _id, b4)
  354. c.JSON(200, gin.H{"rep": b1})
  355. } else {
  356. b5 := Mgo.UpdateById(coll, eid, map[string]interface{}{
  357. "$set": map[string]interface{}{
  358. field: name,
  359. },
  360. })
  361. //删除audit_err数据
  362. b4 := Mgo.Del("audit_err", `{"_id":"`+_id+`"}`)
  363. log.Println("Del audit_err id", _id, b4)
  364. c.JSON(200, gin.H{"rep": b5})
  365. }
  366. }