main.go 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. package main
  2. import (
  3. "fmt"
  4. "github.com/spf13/viper"
  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/mongodb"
  8. "log"
  9. "strings"
  10. )
  11. var (
  12. Mgo *mongodb.MongodbSim
  13. LMap = make(map[string]string, 0) // 企业人数 存储
  14. CMap = make(map[string]string, 0) // 参保人数 存储
  15. filename string
  16. GF GlobalConf
  17. )
  18. func InitConfig() (err error) {
  19. viper.SetConfigFile("config.toml") // 指定配置文件路径
  20. viper.SetConfigName("config") // 配置文件名称(无扩展名)
  21. viper.SetConfigType("toml") // 如果配置文件的名称中没有扩展名,则需要配置此项
  22. viper.AddConfigPath("./")
  23. viper.AddConfigPath("./conf/") // 还可以在工作目录中查找配置
  24. viper.AddConfigPath("../conf/") // 还可以在工作目录中查找配置
  25. err = viper.ReadInConfig() // 查找并读取配置文件
  26. if err != nil { // 处理读取配置文件的错误
  27. return
  28. }
  29. err = viper.Unmarshal(&GF)
  30. return err
  31. }
  32. func InitMgo() {
  33. Mgo = &mongodb.MongodbSim{
  34. MongodbAddr: GF.Mongo.Host,
  35. DbName: GF.Mongo.DB,
  36. Size: 10,
  37. UserName: GF.Mongo.Username,
  38. Password: GF.Mongo.Password,
  39. Direct: GF.Mongo.Direct,
  40. }
  41. Mgo.InitPool()
  42. }
  43. func Init() {
  44. InitConfig()
  45. InitMgo()
  46. filename = GF.Env.File
  47. }
  48. func main() {
  49. Init()
  50. f, err := excelize.OpenFile(filename)
  51. if err != nil {
  52. fmt.Println(err)
  53. return
  54. }
  55. defer func() {
  56. f.Save()
  57. if err := f.Close(); err != nil {
  58. fmt.Println(err)
  59. }
  60. }()
  61. //L0Num := 0//
  62. rows, err := f.GetRows(GF.Env.Sheet)
  63. for i := 1; i < len(rows); i++ {
  64. if i%100 == 0 {
  65. log.Println("current: ", i, rows[i][0])
  66. }
  67. //var member_no, employee_no, l_no, can_no string
  68. if len(rows[i]) <= 0 {
  69. continue
  70. }
  71. //1. 处理L0 企业人数人数
  72. name := strings.TrimSpace(dealName(rows[i][0]))
  73. if _, ok := LMap[name]; !ok {
  74. base, _ := Mgo.FindOne("company_base", map[string]interface{}{"company_name": name})
  75. baseInfo := *base
  76. if len(baseInfo) == 0 || baseInfo == nil {
  77. continue
  78. }
  79. company_id := util.ObjToString(baseInfo["company_id"])
  80. l_no, can_no := getQn(company_id, name)
  81. LMap[name] = l_no
  82. CMap[name] = can_no
  83. f.SetCellValue(GF.Env.Sheet, fmt.Sprintf("D%v", i+1), l_no)
  84. f.SetCellValue(GF.Env.Sheet, fmt.Sprintf("C%v", i+1), can_no)
  85. //where := map[string]interface{}{
  86. // "company_id": company_id,
  87. //}
  88. //reports, _ := Mgo.Find("annual_report_base", where, `{"_id":-1}`, nil, false, -1, -1)
  89. //reportsData := *reports
  90. //
  91. //if len(reportsData) > 0 {
  92. // for _, da := range reportsData {
  93. // if mo, ok := da["member_no"]; ok && mo != nil {
  94. // if moStr, ok := mo.(string); ok {
  95. // member_no = moStr
  96. // }
  97. // }
  98. // if eo, ok := da["employee_no"]; ok && eo != nil {
  99. // if eoStr, ok := eo.(string); ok {
  100. // employee_no = eoStr
  101. // }
  102. // }
  103. // if member_no != "" || employee_no != "" {
  104. // if strings.Contains(member_no, "不公示") && strings.Contains(employee_no, "不公示") {
  105. // continue
  106. // } else {
  107. // if strings.Contains(member_no, "不公示") {
  108. // l_no = employee_no
  109. // } else if strings.Contains(employee_no, "不公示") {
  110. // l_no = member_no
  111. // } else {
  112. // if member_no > employee_no {
  113. // l_no = employee_no
  114. // } else {
  115. // l_no = member_no
  116. // }
  117. // }
  118. // }
  119. // }
  120. // }
  121. //}
  122. //LMap[name] = l_no
  123. //
  124. ////2. 处理参保人数
  125. //socials, _ := Mgo.Find("annual_report_social_security", where, `{"_id":-1}`, nil, false, -1, -1)
  126. //socialData := *socials
  127. //if len(socialData) > 0 {
  128. // for _, da := range socialData {
  129. // if ia, ok := da["insurance_amount"]; ok && ia != nil {
  130. // if iaStr, ok := ia.(string); ok {
  131. // if strings.Contains(iaStr, "不公示") || iaStr == "" {
  132. // continue
  133. // } else {
  134. // can_no = strings.Replace(iaStr, "人", "", -1)
  135. // }
  136. // }
  137. // }
  138. // }
  139. //}
  140. //CMap[name] = can_no
  141. } else {
  142. f.SetCellValue(GF.Env.Sheet, fmt.Sprintf("D%v", i+1), LMap[name])
  143. f.SetCellValue(GF.Env.Sheet, fmt.Sprintf("C%v", i+1), CMap[name])
  144. }
  145. //2. 二级数据L2
  146. if len(rows[i]) >= 2 {
  147. name2 := strings.TrimSpace(dealName(rows[i][1]))
  148. base, _ := Mgo.FindOne("company_base", map[string]interface{}{"company_name": name2})
  149. baseInfo := *base
  150. if len(baseInfo) == 0 || baseInfo == nil {
  151. continue
  152. }
  153. company_id := util.ObjToString(baseInfo["company_id"])
  154. l_no, can_no := getQn(company_id, name2)
  155. f.SetCellValue(GF.Env.Sheet, fmt.Sprintf("F%v", i+1), l_no)
  156. f.SetCellValue(GF.Env.Sheet, fmt.Sprintf("E%v", i+1), can_no)
  157. }
  158. //LastL0 = name
  159. //base, _ := Mgo.FindOne("company_base", map[string]interface{}{"company_name": name})
  160. //baseInfo := *base
  161. //if len(baseInfo) == 0 || baseInfo == nil {
  162. // //f.SetCellValue("企业名单", fmt.Sprintf("B%v", i+1), "无")
  163. // continue
  164. //}
  165. //company_id := baseInfo["company_id"]
  166. //where := map[string]interface{}{
  167. // "company_id": company_id,
  168. //}
  169. }
  170. log.Println("over ------")
  171. }
  172. //getQn 获取企业人数,参保人数
  173. func getQn(company_id, name string) (string, string) {
  174. var member_no, employee_no, l_no, can_no string
  175. where := map[string]interface{}{
  176. "company_id": company_id,
  177. }
  178. reports, _ := Mgo.Find("annual_report_base", where, `{"_id":-1}`, nil, false, -1, -1)
  179. reportsData := *reports
  180. if len(reportsData) > 0 {
  181. for _, da := range reportsData {
  182. if mo, ok := da["member_no"]; ok && mo != nil {
  183. if moStr, ok := mo.(string); ok {
  184. member_no = strings.Replace(moStr, "人", "", -1)
  185. }
  186. }
  187. if eo, ok := da["employee_no"]; ok && eo != nil {
  188. if eoStr, ok := eo.(string); ok {
  189. employee_no = strings.Replace(eoStr, "人", "", -1)
  190. }
  191. }
  192. if member_no != "" && employee_no != "" {
  193. continue
  194. }
  195. if member_no != "" || employee_no != "" {
  196. if strings.Contains(member_no, "不公示") && strings.Contains(employee_no, "不公示") {
  197. continue
  198. } else {
  199. if strings.Contains(member_no, "不公示") {
  200. l_no = employee_no
  201. } else if strings.Contains(employee_no, "不公示") {
  202. l_no = member_no
  203. } else {
  204. if member_no == "" && employee_no != "" {
  205. l_no = employee_no
  206. } else if employee_no == "" && member_no != "" {
  207. l_no = member_no
  208. } else {
  209. if member_no > employee_no {
  210. l_no = employee_no
  211. } else {
  212. l_no = member_no
  213. }
  214. }
  215. break
  216. }
  217. }
  218. }
  219. }
  220. }
  221. LMap[name] = l_no
  222. //2. 处理参保人数
  223. socials, _ := Mgo.Find("annual_report_social_security", where, `{"_id":-1}`, nil, false, -1, -1)
  224. socialData := *socials
  225. if len(socialData) > 0 {
  226. for _, da := range socialData {
  227. if ia, ok := da["insurance_amount"]; ok && ia != nil {
  228. if iaStr, ok := ia.(string); ok {
  229. if strings.Contains(iaStr, "不公示") || iaStr == "" {
  230. continue
  231. } else {
  232. can_no = strings.Replace(iaStr, "人", "", -1)
  233. break
  234. }
  235. }
  236. }
  237. }
  238. }
  239. CMap[name] = can_no
  240. return l_no, can_no
  241. }
  242. //dealName 处理name
  243. func dealName(name string) string {
  244. if strings.ContainsAny(name, "()()") {
  245. name = strings.Replace(name, "(", "(", -1)
  246. name = strings.Replace(name, ")", ")", -1)
  247. }
  248. return name
  249. }