main.go 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. package main
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "github.com/xuri/excelize/v2"
  6. util "jygit.jydev.jianyu360.cn/data_processing/common_utils"
  7. "jygit.jydev.jianyu360.cn/data_processing/common_utils/elastic"
  8. "jygit.jydev.jianyu360.cn/data_processing/common_utils/mongodb"
  9. "log"
  10. )
  11. var (
  12. JianZhiLabel = make([]CreditLabel, 0)
  13. MgoT *mongodb.MongodbSim //测试环境链接
  14. Es *elastic.Elastic
  15. )
  16. func Init() {
  17. f, err := excelize.OpenFile("./jianyu_zhima_0829.xlsx")
  18. if err != nil {
  19. fmt.Println(err)
  20. return
  21. }
  22. defer func() {
  23. f.Save()
  24. if err := f.Close(); err != nil {
  25. fmt.Println(err)
  26. }
  27. }()
  28. //2.专项债详情
  29. rows, err := f.GetRows("0829")
  30. if err != nil {
  31. fmt.Println(err)
  32. return
  33. }
  34. for i := 1; i < len(rows); i++ {
  35. data := CreditLabel{
  36. ZhimaToptype: rows[i][0],
  37. ZhimaSubtype: rows[i][1],
  38. ZhimaName: rows[i][2],
  39. }
  40. JianZhiLabel = append(JianZhiLabel, data)
  41. }
  42. //测试环境
  43. MgoT = &mongodb.MongodbSim{
  44. MongodbAddr: "192.168.3.149:27102",
  45. //MongodbAddr: "192.168.3.206:27002",
  46. DbName: "mixdata",
  47. Size: 10,
  48. UserName: "root",
  49. Password: "root",
  50. //Direct: true,
  51. }
  52. MgoT.InitPool()
  53. //测试环境es
  54. Es = &elastic.Elastic{
  55. S_esurl: "http://192.168.3.149:9201",
  56. //S_esurl: "http://172.17.4.184:19805",
  57. I_size: 5,
  58. Username: "",
  59. Password: "",
  60. }
  61. Es.InitElasticSize()
  62. }
  63. func main() {
  64. Init()
  65. appID := "2021003111633206"
  66. privateKeyPEM := "-----BEGIN RSA PRIVATE KEY-----\nMIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCaJnmz3N1Z43jxtmZJmPkInl3FbfudxjicThHj+Hkndp+muzZXlAPcWoYTFLAfVa6xg9xAc58fWTPUGOpouh0ZDEP8TGvD784AljDNwRXPI9+afjcxN8gzsNPlqA6KVkAu5u5uEI1HHQgtdyRoCEnXgQRXj6DqAs9olbx8HrTxHjZzjPd+HXv+v4na3zAvZsvPdhLB2ggpVW6uQN7ur8C+hVpB3ZO+gGVFHy3m1t08XgscljyOA9Vpk4T8TnKZqDvnI6ehWFCGeD11yoe3ipHJJdP/+u9/tXiKhm29mJvcM9C6gab6BOQABByQPb2nPFFyfPglbRYrYxgKp/eXUQTzAgMBAAECggEAO6BCVyZJoKlycNzC+Bjpy0Gmt+Vw/HheEWfJV8sW4gLqgk3MGVgxnhyN2/eWoKg96IA+w9d1Z2TTvWjd0yCafMPX0FGnJaUuo990hUH4s6UGqvXDV5BiKkxtylmVNkFilkHRXFWesDE0ppF9TZhXJ7rJ+Syfa6UmoSe6PrCKAPG4FD8MH1ODj5b42l/TRIFM948nTtTLFAFgd77P5ULBCKVfBB5V9XdKhLRdwG9RxugWwkxuCiMOtmk45DzA/PQgvkIzEViD/2NJX67/S88B0G63zdQizJrvxsLp9fThmjhlo/+CaF+a+nfIzg81TfQHlRuTjiYc7iE9n5K0sU82wQKBgQDydI9pEjkPH+ZEixEymdx8D4workBfa+GXgobJ2UwatqCJOCYqZJR0MhjTVeDJiiTGFiemNyZHT0WFQedAQ/O9mkRf0MRhzR6ZOiMnCG5pSSOKdmQXoqjOqcMzdgWBQRol0eLB/vto8M3bpt1VautR0qQOR7BrFsj57K3asofikQKBgQCiwwie5gyCAYB1gkp4QkLmQDSTJdZaTlzzx2oa2/ZB4Pg6wWWNJIxEfSwtuGVH4jGJl0Eer2YpHzaY7f2NfOWJCpNI/aRhM/RilQsFXTox/5bqlbAfspPMqSHnry2OgbZb9CRF3jH7kt65390SKde4A4JNE+jJ0Xb07Tzcr7+pQwKBgCDJ8KcWBs9r0flNEVtVgYLpm1vZDO2aqlySE2Zy0579OcK07Dxpc8YvDDpwb8DxxL1hO6V36d5U8yLtYbfIOMtYdIy8sAJF+jBgs2ZQ9pWYhYzxK+IiZk/kl3h7Ko1rX3zj4JW5xQhRIJXnACHQHtjm8rbXrR0ebLmX738XC9dxAoGAQfUDQ1E6dFyjb/syrnU7ow8VvyOwL7xd0rRW/TdyHdRLA5Rn0MCkzwRiqMx2zqCNLpLK4uJ1ZeiuOV8IRxP7+IL+mK+gs3tYZ7K6Wpwi/yvyPnIWg2Hcny1S/g5xSbSq76yKHn4ihy5Hb8+WSMwIDRvu68lLpq1ppWuWJGBcLP0CgYAnGtHlFY887zSI0aRdzV3EYm/sPnmYy0TWIUVLuGL8kkprcSIW2yRxx1GtpB+3A7cPu61WwRbiswJA6VmQHvn8f9ds81+aiO5KQLMk4MbrTwWhWLDpP4BxjWANVzPr19ZwmDJcYkh7YUI2iLqH7dXho5k62OYCM1T53xlql6HDcg==\n-----END RSA PRIVATE KEY-----"
  67. //epCertNo := "914400007211976169" //对应企业库 credit_no
  68. sceneCode := "JIANYU_LABEL"
  69. //1.查询qyxy 数据
  70. defer util.Catch()
  71. sess := MgoT.GetMgoConn()
  72. defer MgoT.DestoryMongoConn(sess)
  73. it := sess.DB("mixdata").C("qyxy_std").Find(nil).Select(nil).Sort("_id").Iter()
  74. fmt.Println("taskRun 开始")
  75. count := 0
  76. for tmp := make(map[string]interface{}); it.Next(&tmp); count++ {
  77. if count%1000 == 0 {
  78. log.Println("current", count, tmp["company_name"], tmp["credit_no"])
  79. }
  80. id := mongodb.BsonIdToSId(tmp["_id"])
  81. epCertNo := util.ObjToString(tmp["credit_no"])
  82. createLabels := getCreditLabel(appID, privateKeyPEM, epCertNo, sceneCode)
  83. if len(createLabels) > 0 {
  84. update := map[string]interface{}{
  85. "zhima_labels": convertToInterfaceSlice(createLabels),
  86. }
  87. where := map[string]interface{}{
  88. "_id": tmp["_id"],
  89. }
  90. MgoT.Update("qyxy_std", where, map[string]interface{}{"$set": update}, true, false)
  91. //MgoT.UpdateById("qyxy_std", id, map[string]interface{}{"$set": update})
  92. err := Es.UpdateDocument("qyxy", id, update)
  93. if err != nil && err.Error() != "Document not updated: noop" {
  94. log.Println("qyxy es update err", err, id)
  95. }
  96. }
  97. }
  98. //bizbyte, _ := json.Marshal(BizContent)
  99. //priKey, err := parsePrivateKey(privateKeyPEM)
  100. //if err != nil {
  101. // log.Fatalln("parsePrivateKey err", err)
  102. //}
  103. //
  104. //resMap, err := DoRequest(appID, string(bizbyte), curl, method, priKey)
  105. //if err != nil {
  106. // log.Fatalln("request err", err)
  107. //}
  108. //responseData := util.ObjToMap((*resMap)["zhima_credit_ep_acceptance_label_query_response"])
  109. //if util.ObjToString(((*responseData)["code"])) == "10000" && util.ObjToString(((*responseData)["msg"])) == "Success" {
  110. // if (*responseData)["label_content"] == nil {
  111. // log.Println("请求出错,没有返回企业标签内容模型", BizContent)
  112. // } else {
  113. // if labelContent, ok := (*responseData)["label_content"].([]interface{}); ok {
  114. // for _, v := range labelContent {
  115. // log.Println(v)
  116. // label := util.ObjToMap(v)
  117. // labelName := util.ObjToString((*label)["label_name"])
  118. // labelCategory := util.ObjToString((*label)["label_category"])
  119. // createLabel := CreditLabel{
  120. // LabelTop: labelCategory,
  121. // LabelName: labelName,
  122. // }
  123. //
  124. // createLabels = append(createLabels, createLabel)
  125. // }
  126. // }
  127. //
  128. // }
  129. //} else {
  130. // log.Println("请求失败", BizContent)
  131. //}
  132. }
  133. // getCreditLabel 获取芝麻企业信用企业标签
  134. func getCreditLabel(appID, privateKeyPEM, certNo, sceneCode string) (createLabels []CreditLabel) {
  135. BizContent := BizContentForLabelQuery{
  136. EPCertNo: certNo,
  137. ShowFlag: true,
  138. SceneCode: sceneCode,
  139. }
  140. curl := "https://openapi.alipay.com/gateway.do"
  141. method := "zhima.credit.ep.acceptance.label.query"
  142. //createLabels := make([]CreditLabel, 0)
  143. bizbyte, _ := json.Marshal(BizContent)
  144. priKey, err := parsePrivateKey(privateKeyPEM)
  145. if err != nil {
  146. log.Fatalln("parsePrivateKey err", err)
  147. }
  148. resMap, err := DoRequest(appID, string(bizbyte), curl, method, priKey)
  149. if err != nil {
  150. log.Fatalln("request err", err)
  151. }
  152. responseData := util.ObjToMap((*resMap)["zhima_credit_ep_acceptance_label_query_response"])
  153. if util.ObjToString(((*responseData)["code"])) == "10000" && util.ObjToString(((*responseData)["msg"])) == "Success" {
  154. if (*responseData)["label_content"] == nil {
  155. log.Println("请求出错,没有返回企业标签内容模型", BizContent)
  156. } else {
  157. if labelContent, ok := (*responseData)["label_content"].([]interface{}); ok {
  158. for _, v := range labelContent {
  159. label := util.ObjToMap(v)
  160. labelName := util.ObjToString((*label)["label_name"])
  161. labelCategory := util.ObjToString((*label)["label_category"])
  162. data := getLabel(labelCategory, labelName)
  163. if data.ZhimaSubtype != "" {
  164. createLabels = append(createLabels, data)
  165. }
  166. }
  167. }
  168. }
  169. } else {
  170. log.Println("请求失败", BizContent)
  171. }
  172. return
  173. }
  174. // getLabel 根据labelTop labelName 获取对应芝麻标签
  175. func getLabel(labelTop, labelName string) (data CreditLabel) {
  176. for _, v := range JianZhiLabel {
  177. if v.ZhimaToptype == labelTop && v.ZhimaName == labelName {
  178. return v
  179. }
  180. }
  181. return
  182. }
  183. func convertToInterfaceSlice(labels []CreditLabel) []map[string]interface{} {
  184. result := make([]map[string]interface{}, len(labels))
  185. for i, label := range labels {
  186. result[i] = map[string]interface{}{
  187. "zhima_toptype": label.ZhimaToptype,
  188. "zhima_subtype": label.ZhimaSubtype,
  189. "zhima_name": label.ZhimaName,
  190. }
  191. }
  192. return result
  193. }