purcode.go 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. package main
  2. import (
  3. log "github.com/donnie4w/go-logger/logger"
  4. "github.com/tealeg/xlsx"
  5. "go.mongodb.org/mongo-driver/bson"
  6. qu "qfw/util"
  7. "regexp"
  8. "strings"
  9. "sync"
  10. "unicode/utf8"
  11. )
  12. var CleanTailReg *regexp.Regexp = regexp.MustCompile("(服务)$")
  13. var numLock sync.Mutex
  14. //源代码表~五级分类
  15. func prparePurClassCode() {
  16. ff, _ := xlsx.OpenFile("res/source.xlsx")
  17. isok := 0
  18. for _, sheet := range ff.Sheets {
  19. for _, row := range sheet.Rows {
  20. var str []string
  21. for _, cell := range row.Cells {
  22. s := cell.String()
  23. s = strings.ReplaceAll(s, " ", "")
  24. s = strings.ReplaceAll(s, " ", "")
  25. str = append(str, s)
  26. }
  27. if len(str) < 3 {
  28. log.Debug("异常~~~~~~")
  29. continue
  30. }
  31. name, code, level := str[0], str[1], str[2]
  32. pcode := ""
  33. switch {
  34. case qu.IntAll(level) == 1:
  35. case qu.IntAll(level) == 2:
  36. pcode = code[:2]
  37. case qu.IntAll(level) == 3:
  38. pcode = code[:4]
  39. case qu.IntAll(level) == 4:
  40. pcode = code[:6]
  41. case qu.IntAll(level) == 5:
  42. pcode = code[:8]
  43. default:
  44. log.Debug("异常~~~", str)
  45. }
  46. //if code == "47" || code == "48" || code == "49" || code == "50" {
  47. // name = CleanTailReg.ReplaceAllString(name, "")
  48. //}
  49. data_mgo.Save(InitialColl, map[string]interface{}{
  50. "name": name,
  51. "code": code,
  52. "pcode": pcode,
  53. "level": qu.IntAll(level),
  54. })
  55. isok++
  56. }
  57. }
  58. log.Debug("is over ~ ", isok)
  59. }
  60. //补充数据表
  61. func prepareReplenishInfo() {
  62. temp := map[string]string{}
  63. ff, _ := xlsx.OpenFile("res/replenish.xlsx")
  64. for _, sheet := range ff.Sheets {
  65. isok := 0
  66. for _, row := range sheet.Rows {
  67. var arr []string
  68. for _, cell := range row.Cells {
  69. s := cell.String()
  70. s = strings.ReplaceAll(s, " ", "")
  71. s = strings.ReplaceAll(s, " ", "")
  72. arr = append(arr, s)
  73. }
  74. if len(arr) >= 2 {
  75. name, code := arr[0], arr[1]
  76. s_code := ""
  77. if len(arr) > 2 {
  78. s_code = arr[2]
  79. }
  80. if code != "" && name != "" {
  81. if PurClassInfo[name].name == "" && temp[name] == "" {
  82. isok++
  83. data_mgo.Save(ReplenishColl, map[string]interface{}{
  84. "name": name,
  85. "code": code,
  86. "s_code": s_code,
  87. "type": sheet.Name,
  88. })
  89. temp[name] = name
  90. }
  91. }
  92. }
  93. }
  94. log.Debug("cur sheet ", sheet.Name, " is over ~ ", isok)
  95. }
  96. //补充近义词
  97. fs, _ := xlsx.OpenFile("res/similar.xlsx")
  98. total, isok := 0, 0
  99. for _, sheet := range fs.Sheets {
  100. for index, row := range sheet.Rows {
  101. if index == 0 {
  102. continue
  103. }
  104. var arr []string
  105. for _, cell := range row.Cells {
  106. s := cell.String()
  107. s = strings.ReplaceAll(s, " ", "")
  108. s = strings.ReplaceAll(s, " ", "")
  109. arr = append(arr, s)
  110. }
  111. if len(arr) > 5 {
  112. total++
  113. arr = arr[6:]
  114. code := ""
  115. for k, v := range arr {
  116. if k == 0 {
  117. code = v
  118. } else if k == 1 {
  119. if qu.IntAll(v) != 1 {
  120. break
  121. }
  122. } else {
  123. if PurClassInfo[v].name == "" && temp[v] == "" && v != "" {
  124. isok++
  125. info := map[string]interface{}{
  126. "name": v,
  127. "code": code,
  128. "s_code": "",
  129. "type": "近义词",
  130. }
  131. if len(info) > 0 {
  132. data_mgo.Save(ReplenishColl, info)
  133. }
  134. temp[v] = v
  135. }
  136. }
  137. }
  138. }
  139. }
  140. log.Debug("cur sheet ", sheet.Name, " is over ~ ", isok)
  141. }
  142. }
  143. //补充三大类对应表
  144. func prepareBasicInfo() {
  145. temp := map[string]string{}
  146. ff, _ := xlsx.OpenFile("res/basic.xlsx")
  147. for _, sheet := range ff.Sheets {
  148. isok := 0
  149. for _, row := range sheet.Rows {
  150. var arr []string
  151. for _, cell := range row.Cells {
  152. s := cell.String()
  153. s = strings.ReplaceAll(s, " ", "")
  154. s = strings.ReplaceAll(s, " ", "")
  155. arr = append(arr, s)
  156. }
  157. isok++
  158. //代码 分类
  159. s1, s2 := arr[0], arr[1]
  160. if s1 != "" && s2 != "" {
  161. temp[s1] = s2
  162. }
  163. }
  164. log.Debug("cur sheet is over ~ ", isok)
  165. }
  166. log.Debug("开始更新基础代码表~~")
  167. updateBasicCode(InitialColl, temp)
  168. updateBasicCode(ReplenishColl, temp)
  169. }
  170. //更新三大类
  171. func updateBasicCode(coll_name string, temp map[string]string) {
  172. dataArr, _ := data_mgo.Find(coll_name, nil, map[string]interface{}{"_id": 1}, nil)
  173. for _, v := range dataArr {
  174. code := qu.ObjToString(v["code"])
  175. tmpid := BsonTOStringId(v["_id"])
  176. basic := ""
  177. l := utf8.RuneCountInString(code)
  178. if temp[code] != "" { //更新
  179. basic = temp[code]
  180. } else {
  181. if l == 2 {
  182. log.Debug("找不到~", code)
  183. continue
  184. } else if l == 4 {
  185. n_c := code[:2]
  186. if temp[n_c] != "" { //更新
  187. basic = temp[n_c]
  188. } else {
  189. log.Debug("异常~", code)
  190. }
  191. } else if l >= 6 {
  192. n_c := code[:2]
  193. if temp[n_c] != "" { //更新
  194. basic = temp[n_c]
  195. } else {
  196. n_c = code[:4]
  197. if temp[n_c] != "" { //更新
  198. basic = temp[n_c]
  199. } else {
  200. log.Debug("异常~", code)
  201. }
  202. }
  203. }
  204. }
  205. data_mgo.UpdateById(coll_name, tmpid, map[string]interface{}{
  206. "$set": map[string]interface{}{
  207. "basic": basic,
  208. },
  209. })
  210. }
  211. log.Debug("更新完毕~", coll_name)
  212. }
  213. //计算医疗数据
  214. func prepareMedicalNameClass() {
  215. temp := map[string]string{}
  216. ff, _ := xlsx.OpenFile("res/medical.xlsx")
  217. for _, sheet := range ff.Sheets {
  218. for _, row := range sheet.Rows {
  219. var str []string
  220. for _, cell := range row.Cells {
  221. s := cell.String()
  222. s = strings.ReplaceAll(s, " ", "")
  223. s = strings.ReplaceAll(s, " ", "")
  224. str = append(str, s)
  225. }
  226. class_1, class_2, class_3, class_code := str[0], str[1], str[2], str[3]
  227. if class_1 == "" || class_2 == "" || class_3 == "" || class_code == "" {
  228. log.Debug("异常~~~")
  229. }
  230. query := bson.M{
  231. "product_class1": class_1,
  232. "product_class2": class_2,
  233. "product_class3": class_3,
  234. }
  235. dataArr, _ := data_mgo.Find("zktest_mysql_product_info", query, nil, bson.M{"product_name": 1})
  236. if len(dataArr) > 0 {
  237. for _, v := range dataArr {
  238. product_name := qu.ObjToString(v["product_name"])
  239. if product_name != "" {
  240. if temp[product_name] == "" {
  241. temp[product_name] = class_code
  242. }
  243. }
  244. }
  245. }
  246. }
  247. }
  248. for k, v := range temp {
  249. data_mgo.Save("111111", map[string]interface{}{
  250. "name": k,
  251. "code": v,
  252. })
  253. }
  254. log.Debug("is over ", len(temp))
  255. }