main.go 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285
  1. package main
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "fmt"
  6. "go.uber.org/zap"
  7. "gorm.io/gorm"
  8. util "jygit.jydev.jianyu360.cn/data_processing/common_utils"
  9. "jygit.jydev.jianyu360.cn/data_processing/common_utils/log"
  10. "jygit.jydev.jianyu360.cn/data_processing/common_utils/mongodb"
  11. "time"
  12. )
  13. var (
  14. Mgo *mongodb.MongodbSim
  15. MgoP *mongodb.MongodbSim
  16. MgoSpider *mongodb.MongodbSim
  17. AnalysisDB *gorm.DB
  18. JianyuDB *gorm.DB
  19. JianyuSubjectDB *gorm.DB
  20. )
  21. func main() {
  22. //dealAllDataAccountOrder() // 1.处理归集后-存量剑鱼订单表-dwd_f_account_order
  23. //dealAllDataAccountOrderChangeRecord() //2.处理归集后-存量业绩表更表-dwd_f_account_order_change
  24. //dealAllDataAccountReturn() //3.处理归集后-存量剑鱼回款表-dwd_f_account_return
  25. dealAllDataAccountReturnChange() //4.处理归集后-剑鱼回款变更表-dwd_f_account_return_change
  26. }
  27. // dealAllDataAccountOrder 处理归集后-存量剑鱼订单表-dwd_f_account_order
  28. func dealAllDataAccountOrder() {
  29. defer func() {
  30. if r := recover(); r != nil {
  31. log.Info("Panic recovered", zap.Any("reason", r))
  32. }
  33. log.Info("aaaaaaaaaaaa")
  34. }()
  35. var total int64
  36. AnalysisDB.Debug().Model(&DataexportOrder{}).Where("autoUpdate < ?", "2024-10-16").Count(&total)
  37. log.Info("dealAllDataAccountOrder", zap.Any("总数是", total))
  38. rowsPerPage := 100 // 每页的数量
  39. totalPages := (int(total) / rowsPerPage) + 1 //总页数
  40. for page := 0; page < totalPages; page++ {
  41. offset := page * rowsPerPage
  42. rows, err := AnalysisDB.Debug().Model(&DataexportOrder{}).Where("autoUpdate < ?", "2024-10-16").Order("id desc").Offset(offset).Limit(rowsPerPage).Rows()
  43. defer func() {
  44. err = rows.Close()
  45. if err != nil {
  46. log.Info("Err rows.Close", zap.Error(err))
  47. }
  48. }()
  49. log.Info("dealAllDataAccountOrder", zap.Any("current page ", page))
  50. for rows.Next() {
  51. var dataExOrder DataexportOrder //原来的订单表
  52. var accountOrder DwdFAccountOrder //归集后的订单表
  53. var user1 DwdFUserbaseBaseinfo //个人用户表
  54. var returnRecord ReturnMoneyRecord //原来的回款表
  55. var returnRecords []ReturnMoneyRecord //原来的回款表
  56. var contract Contract //合同表
  57. // ScanRows 方法用于将一行记录扫描至结构体
  58. err = AnalysisDB.ScanRows(rows, &dataExOrder)
  59. if err != nil {
  60. log.Info("dealAllDataAccountOrder,ScanRows err ", zap.Error(err))
  61. }
  62. filter := dataExOrder.Filter
  63. filterMap := make(map[string]interface{})
  64. err := json.Unmarshal([]byte(filter), &filterMap)
  65. if err != nil {
  66. log.Info("dealAllDataAccountOrder, filter.json.Unmarshal", zap.Error(err))
  67. }
  68. //订单编号不为空
  69. if dataExOrder.OrderCode != "" {
  70. // 业务逻辑...
  71. accountOrder.OrderCode = dataExOrder.OrderCode
  72. var osr OrderSaleRecord //原来的业绩变更表
  73. err = JianyuDB.Order("id asc").Where("ordercode = ? ", dataExOrder.OrderCode).First(&osr).Error
  74. if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
  75. log.Info("dealAllDataAccountOrder", zap.Error(err))
  76. }
  77. //有业绩表更表记录
  78. if osr.ID > 0 {
  79. if osr.SalerName == "-" {
  80. accountOrder.SalerName = "运营"
  81. } else {
  82. accountOrder.SalerName = osr.SalerName
  83. }
  84. accountOrder.SalerDept = osr.SalerDept
  85. }
  86. accountOrder.CompanyName = dataExOrder.CompanyName
  87. if len(dataExOrder.UserID) > 20 { //个人身份
  88. err = JianyuSubjectDB.Where("userid = ? ", dataExOrder.UserID).First(&user1).Error
  89. if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
  90. log.Info("dealAllDataAccountOrder", zap.Error(err))
  91. }
  92. accountOrder.UserRegtime = user1.LRegistedate
  93. } else {
  94. //企业身份
  95. rs := new(struct {
  96. PositionId int `gorm:"column:position_id"`
  97. LRegistedate *time.Time `gorm:"column:l_registedate"`
  98. })
  99. if dataExOrder.UserID != "" {
  100. sql := fmt.Sprintf(`SELECT im.position_id,ub.l_registedate FROM
  101. (SELECT userid,position_id FROM Jianyu_subjectdb.dwd_f_userbase_id_mapping WHERE position_id = %s) im
  102. LEFT JOIN Jianyu_subjectdb.dwd_f_userbase_baseinfo ub
  103. ON im.userid=ub.userid`, dataExOrder.UserID)
  104. err = JianyuSubjectDB.Raw(sql).Scan(&rs).Error
  105. if err != nil {
  106. log.Info("处理用户订单表数据", zap.String("查询企业用户注册时间失败", dataExOrder.UserID))
  107. }
  108. accountOrder.UserRegtime = rs.LRegistedate
  109. }
  110. }
  111. accountOrder.CreateTime = dataExOrder.CreateTime
  112. if dataExOrder.IsBackstageOrder == 0 {
  113. accountOrder.ReturnTime = dataExOrder.PayTime
  114. accountOrder.TotalReceived = util.IntAll(filterMap["originalAmount"]) //累计已收
  115. } else if dataExOrder.IsBackstageOrder == 1 {
  116. err = AnalysisDB.Where("order_code = ? ", dataExOrder.OrderCode).Where("state = 1").Order("return_time asc").First(&returnRecord).Error
  117. if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
  118. log.Info("dealAllDataAccountOrder", zap.Error(err))
  119. }
  120. accountOrder.ReturnTime = returnRecord.ReturnTime
  121. err = AnalysisDB.Where("order_code = ? ", dataExOrder.OrderCode).Find(&returnRecords).Error
  122. if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
  123. log.Info("dealAllDataAccountOrder", zap.Error(err))
  124. }
  125. totalMoney := 0
  126. if len(returnRecords) > 0 {
  127. for _, v := range returnRecords {
  128. totalMoney += v.ReturnMoney
  129. }
  130. }
  131. accountOrder.TotalReceived = totalMoney
  132. }
  133. accountOrder.SaleTime = dataExOrder.SaleTime
  134. accountOrder.OriginalPrice = dataExOrder.OriginalPrice
  135. accountOrder.ContractMoney = util.IntAll(filterMap["originalAmount"])
  136. accountOrder.Commission = dataExOrder.Commission
  137. accountOrder.ProceduresMoney = dataExOrder.ProceduresMoney
  138. accountOrder.ReceivableAmount = accountOrder.ContractMoney - accountOrder.Commission - accountOrder.ProceduresMoney
  139. accountOrder.ProductType = dataExOrder.ProductType
  140. if dataExOrder.ProductType == "大会员" || dataExOrder.ProductType == "大会员-子账号" || dataExOrder.ProductType == "大会员-补充包" {
  141. switch util.IntAll(filterMap["level"]) {
  142. case 1:
  143. accountOrder.DataSpec = "专家版"
  144. case 2:
  145. accountOrder.DataSpec = "智慧版"
  146. case 3:
  147. accountOrder.DataSpec = "商机版"
  148. case 4:
  149. accountOrder.DataSpec = "试用版"
  150. case 5:
  151. accountOrder.DataSpec = "定制版"
  152. case 6:
  153. accountOrder.DataSpec = "商机版2.0"
  154. case 7:
  155. accountOrder.DataSpec = "专家版2.0"
  156. }
  157. //付费类型 VipType
  158. switch util.IntAll(filterMap["recordPayType"]) {
  159. case 1:
  160. accountOrder.VipType = "购买"
  161. case 2:
  162. accountOrder.VipType = "续费"
  163. case 3:
  164. accountOrder.VipType = "升级"
  165. case 4:
  166. accountOrder.VipType = "试用"
  167. }
  168. } else {
  169. accountOrder.DataSpec = dataExOrder.DataSpec
  170. ////付费类型 VipType
  171. switch dataExOrder.VipType {
  172. case 0:
  173. accountOrder.VipType = "购买"
  174. case 1:
  175. accountOrder.VipType = "续费"
  176. case 2:
  177. accountOrder.VipType = "升级"
  178. case 3:
  179. accountOrder.VipType = "试用"
  180. }
  181. }
  182. //OrderStatus 订单状态
  183. if dataExOrder.RefundStatus == 1 || dataExOrder.RefundStatus == 2 {
  184. accountOrder.OrderStatus = "已完成"
  185. } else {
  186. switch dataExOrder.OrderStatus {
  187. case 1:
  188. accountOrder.OrderStatus = "已完成"
  189. case -1:
  190. accountOrder.OrderStatus = "逻辑删除"
  191. case -2:
  192. accountOrder.OrderStatus = "已取消"
  193. case -3:
  194. accountOrder.OrderStatus = "已取消"
  195. case 0:
  196. accountOrder.OrderStatus = "未完成"
  197. }
  198. }
  199. //回款状态
  200. if dataExOrder.IsBackstageOrder == 0 {
  201. if accountOrder.OrderStatus == "已支付" {
  202. accountOrder.ReturnStatus = "全额回款"
  203. } else {
  204. accountOrder.ReturnStatus = "未支付"
  205. }
  206. } else if dataExOrder.IsBackstageOrder == 1 {
  207. switch dataExOrder.ReturnStatus {
  208. case 1:
  209. accountOrder.ReturnStatus = "全额回款"
  210. case 2:
  211. accountOrder.ReturnStatus = "部分回款"
  212. case 0:
  213. accountOrder.ReturnStatus = "未回款"
  214. }
  215. }
  216. //refund_status 回款状态
  217. switch dataExOrder.RefundStatus {
  218. case 0:
  219. accountOrder.RefundStatus = "未退款"
  220. case 1:
  221. accountOrder.RefundStatus = "全额退款"
  222. case 2:
  223. accountOrder.RefundStatus = "部分退款"
  224. }
  225. //
  226. accountOrder.UserPhone = dataExOrder.UserPhone
  227. accountOrder.UserID = dataExOrder.UserID
  228. accountOrder.VipStarttime = dataExOrder.VipStarttime
  229. accountOrder.VipEndtime = dataExOrder.VipEndtime
  230. // 合同状态
  231. err = AnalysisDB.Where("order_code = ? ", dataExOrder.OrderCode).Find(&contract).Error
  232. if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
  233. log.Info("dealAllDataAccountOrder", zap.Error(err))
  234. }
  235. if contract.ContractStatus == 1 {
  236. accountOrder.ContractStatus = "已签协议"
  237. } else if contract.ContractStatus == 0 {
  238. accountOrder.ContractStatus = "未签协议"
  239. }
  240. accountOrder.ContractCode = contract.ContractCode
  241. accountOrder.ContractTime = contract.ContractTime
  242. if dataExOrder.SigningSubject == "h01" {
  243. accountOrder.SigningSubject = "北京剑鱼信息技术有限公司"
  244. } else if dataExOrder.SigningSubject == "h02" {
  245. accountOrder.SigningSubject = "北京拓普丰联信息科技股份有限公司"
  246. }
  247. accountOrder.OrderChannel = dataExOrder.OrderChannel
  248. accountOrder.DistributionChannel = dataExOrder.DistributionChannel
  249. if dataExOrder.IsBackstageOrder == 1 {
  250. accountOrder.IsBackstageOrder = "是"
  251. } else {
  252. accountOrder.IsBackstageOrder = "否"
  253. }
  254. switch dataExOrder.PayWay {
  255. case "ali", "ali_app", "ali_pc": //ali、ali_app、ali_pc 处理为“支付宝”
  256. accountOrder.PayWay = "支付宝"
  257. case "wx", "wx_app", "wx_js", "wx_pc": // wx、wx_app、wx_js、wx_pc 处理为“微信”
  258. accountOrder.PayWay = "微信"
  259. case "transferAccounts":
  260. accountOrder.PayWay = "对公转账"
  261. default:
  262. accountOrder.PayWay = dataExOrder.PayWay
  263. }
  264. //生成订单数据
  265. err = AnalysisDB.Create(&accountOrder).Error
  266. if err != nil {
  267. log.Info("dealAllDataAccountOrder Create ", zap.Error(err))
  268. }
  269. }
  270. }
  271. }
  272. log.Info("dealAllDataAccountOrder 迭代结束", zap.Int64("数据总量", total))
  273. }