edb_info_refresh.go 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437
  1. package data
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "eta_gn/eta_api/models/data_manage"
  6. "eta_gn/eta_api/models/data_manage/edb_refresh"
  7. "eta_gn/eta_api/models/data_manage/edb_refresh/request"
  8. "eta_gn/eta_api/utils"
  9. "fmt"
  10. "strings"
  11. "time"
  12. )
  13. var allDefaultEdbRefreshConfigKey = `edb_refresh_config:default:all:`
  14. func GetAllDefaultEdbRefreshConfigListBySourceList(source, subSource int) (list []*edb_refresh.EdbRefreshDefaultConfig, err error) {
  15. key := getAllDefaultEdbRefreshConfigKey(source, subSource)
  16. if utils.Re == nil {
  17. if utils.Re == nil && utils.Rc.IsExist(key) {
  18. if data, err1 := utils.Rc.RedisBytes(key); err1 == nil {
  19. err = json.Unmarshal(data, &list)
  20. return
  21. }
  22. }
  23. }
  24. list, err = edb_refresh.GetAllListBySourceList(source, subSource)
  25. if err != nil {
  26. return
  27. }
  28. if utils.Re == nil {
  29. data, _ := json.Marshal(list)
  30. utils.Rc.Put(key, data, 2*time.Hour)
  31. }
  32. return
  33. }
  34. func SaveEdbRefreshDefaultConfig(source, subSource int, frequency string, list []request.RefreshConfigReq) (err error, errMsg string, isSendEmail bool) {
  35. isSendEmail = true
  36. errMsg = `保存失败`
  37. if source <= 0 {
  38. errMsg = "来源不能为空"
  39. err = errors.New(errMsg)
  40. isSendEmail = false
  41. return
  42. }
  43. if source != utils.DATA_SOURCE_YS && frequency == `` {
  44. errMsg = "频度不能为空"
  45. err = errors.New(errMsg)
  46. isSendEmail = false
  47. return
  48. }
  49. lenConf := len(list)
  50. if lenConf == 0 {
  51. errMsg = "至少需要一个刷新配置"
  52. err = errors.New(errMsg)
  53. isSendEmail = false
  54. return
  55. }
  56. if lenConf > 5 {
  57. errMsg = "刷新时间设置最多不超过5个"
  58. err = errors.New(errMsg)
  59. isSendEmail = false
  60. return
  61. }
  62. tmpArr := []string{"每周", "每旬", "每月", "每季", "每半年", "每年"}
  63. configMap := make(map[string]string)
  64. for _, v := range list {
  65. if utils.InArrayByStr(tmpArr, v.RefreshFrequency) && v.RefreshFrequencyDay < 0 {
  66. errMsg = "请选择具体日期"
  67. err = errors.New(errMsg)
  68. isSendEmail = false
  69. return
  70. }
  71. if v.RefreshTime == "" {
  72. errMsg = "请选择具体时间"
  73. err = errors.New(errMsg)
  74. isSendEmail = false
  75. return
  76. }
  77. key := fmt.Sprint(v.RefreshFrequency, "_", v.RefreshFrequencyDay, "_", v.RefreshTime)
  78. if _, ok := configMap[key]; ok {
  79. errMsg = "刷新频率和日期不能重复"
  80. err = errors.New(errMsg)
  81. isSendEmail = false
  82. return
  83. }
  84. configMap[key] = key
  85. }
  86. addList := make([]*edb_refresh.EdbRefreshDefaultConfig, 0)
  87. for _, v := range list {
  88. addList = append(addList, &edb_refresh.EdbRefreshDefaultConfig{
  89. Source: source,
  90. SubSource: subSource,
  91. Frequency: frequency,
  92. RefreshFrequency: v.RefreshFrequency,
  93. RefreshFrequencyDay: v.RefreshFrequencyDay,
  94. RefreshAllData: v.RefreshAllData,
  95. RefreshTime: v.RefreshTime,
  96. RefreshDataNum: v.RefreshDataNum,
  97. ModifyTime: time.Now(),
  98. CreateTime: time.Now(),
  99. })
  100. }
  101. err = edb_refresh.SaveEdbRefreshDefaultConfig(source, subSource, frequency, addList)
  102. {
  103. key := getAllDefaultEdbRefreshConfigKey(source, subSource)
  104. if utils.Re == nil {
  105. _ = utils.Rc.Delete(key)
  106. }
  107. }
  108. return
  109. }
  110. func SaveEdbRefreshConfig(source, subSource int, classifyId, terminalCode, frequency, keyword, status, sysUserIdStr string, isSelectAll bool, list []request.RefreshConfigReq, edbSelectIdList []int, sysUserId int, sysUserRealName string) (err error, errMsg string, isSendEmail bool) {
  111. isSendEmail = true
  112. errMsg = `保存失败`
  113. if source <= 0 {
  114. errMsg = "来源不能为空"
  115. err = errors.New(errMsg)
  116. isSendEmail = false
  117. return
  118. }
  119. lenConf := len(list)
  120. if lenConf == 0 {
  121. errMsg = "至少需要一个刷新配置"
  122. err = errors.New(errMsg)
  123. isSendEmail = false
  124. return
  125. }
  126. if lenConf > 5 {
  127. errMsg = "刷新时间设置最多不超过5个"
  128. err = errors.New(errMsg)
  129. isSendEmail = false
  130. return
  131. }
  132. tmpArr := []string{"每周", "每旬", "每月", "每季", "每半年", "每年"}
  133. configMap := make(map[string]string)
  134. for _, v := range list {
  135. if utils.InArrayByStr(tmpArr, v.RefreshFrequency) && v.RefreshFrequencyDay < 0 {
  136. errMsg = "请选择具体日期"
  137. err = errors.New(errMsg)
  138. isSendEmail = false
  139. return
  140. }
  141. if v.RefreshTime == "" {
  142. errMsg = "请选择具体时间"
  143. err = errors.New(errMsg)
  144. isSendEmail = false
  145. return
  146. }
  147. key := fmt.Sprint(v.RefreshFrequency, "_", v.RefreshFrequencyDay, "_", v.RefreshTime)
  148. if _, ok := configMap[key]; ok {
  149. errMsg = "刷新频率和日期不能重复"
  150. err = errors.New(errMsg)
  151. isSendEmail = false
  152. return
  153. }
  154. configMap[key] = key
  155. }
  156. edbIdList := make([]int, 0)
  157. if isSelectAll {
  158. _, edbList, tmpErr := GetList(source, subSource, classifyId, terminalCode, sysUserIdStr, frequency, keyword, status, 0, 100000, "", "")
  159. if tmpErr != nil && !utils.IsErrNoRow(tmpErr) {
  160. err = tmpErr
  161. return
  162. }
  163. notIdMap := make(map[int]int, 0)
  164. for _, v := range edbSelectIdList {
  165. notIdMap[v] = v
  166. }
  167. for _, v := range edbList {
  168. _, ok := notIdMap[v.EdbInfoId]
  169. if ok {
  170. continue
  171. }
  172. edbIdList = append(edbIdList, v.EdbInfoId)
  173. }
  174. } else {
  175. edbIdList = edbSelectIdList
  176. }
  177. if len(edbIdList) <= 0 {
  178. errMsg = "指标不能为空"
  179. err = errors.New(errMsg)
  180. isSendEmail = false
  181. return
  182. }
  183. addMappingList := make([]*edb_refresh.EdbRefreshMapping, 0)
  184. addConfigList := make([]*edb_refresh.EdbRefreshConfig, 0)
  185. for _, v := range list {
  186. item, tmpErr := edb_refresh.GetEdbRefreshConfigListByCondition(v.RefreshFrequency, v.RefreshTime, v.RefreshFrequencyDay, v.RefreshAllData, v.RefreshDataNum)
  187. if tmpErr != nil {
  188. if !utils.IsErrNoRow(tmpErr) {
  189. err = tmpErr
  190. return
  191. }
  192. addConfigList = append(addConfigList, &edb_refresh.EdbRefreshConfig{
  193. RefreshFrequency: v.RefreshFrequency,
  194. RefreshFrequencyDay: v.RefreshFrequencyDay,
  195. RefreshTime: v.RefreshTime,
  196. RefreshAllData: v.RefreshAllData,
  197. RefreshDataNum: v.RefreshDataNum,
  198. ModifyTime: time.Now(),
  199. CreateTime: time.Now(),
  200. })
  201. continue
  202. }
  203. for _, edbId := range edbIdList {
  204. addMappingList = append(addMappingList, &edb_refresh.EdbRefreshMapping{
  205. EdbRefreshMappingId: 0,
  206. Source: source,
  207. SubSource: subSource,
  208. EdbInfoId: edbId,
  209. EdbRefreshConfigId: item.EdbRefreshConfigId,
  210. SysUserId: sysUserId,
  211. SysUserRealName: sysUserRealName,
  212. ModifyTime: time.Now(),
  213. CreateTime: time.Now(),
  214. })
  215. }
  216. }
  217. err = edb_refresh.SaveEdbRefreshConfig(source, subSource, sysUserId, sysUserRealName, addConfigList, addMappingList, edbIdList)
  218. return
  219. }
  220. func HandleRefreshTime(source, subSource int, list []*data_manage.BaseRefreshEdbInfo) (newList []*data_manage.BaseRefreshEdbInfo, err error, errMsg string, isSendEmail bool) {
  221. isSendEmail = true
  222. errMsg = "获取失败"
  223. newList = list
  224. defaultEdbRefreshConfigMap := make(map[string]string)
  225. {
  226. allDefaultEdbRefreshConfigList, tmpErr := GetAllDefaultEdbRefreshConfigListBySourceList(source, subSource)
  227. if tmpErr != nil {
  228. err = tmpErr
  229. return
  230. }
  231. defaultEdbRefreshConfigListMap := make(map[string][]string)
  232. for _, v := range allDefaultEdbRefreshConfigList {
  233. tmp, ok := defaultEdbRefreshConfigListMap[v.Frequency]
  234. if !ok {
  235. tmp = make([]string, 0)
  236. }
  237. defaultEdbRefreshConfigListMap[v.Frequency] = append(tmp, GetRefreshStr(v.RefreshFrequency, v.RefreshFrequencyDay, v.RefreshTime))
  238. }
  239. for k, v := range defaultEdbRefreshConfigListMap {
  240. defaultEdbRefreshConfigMap[k] = strings.Join(v, ",")
  241. }
  242. }
  243. edbInfoIdList := make([]int, 0)
  244. for _, v := range newList {
  245. edbInfoIdList = append(edbInfoIdList, v.EdbInfoId)
  246. }
  247. edbRefreshConfigMap := make(map[int]string)
  248. {
  249. configList, tmpErr := edb_refresh.GetEdbRefreshConfigAndEdbListBySourceAndeEdbInfoId(source, subSource, edbInfoIdList)
  250. if tmpErr != nil {
  251. err = tmpErr
  252. return
  253. }
  254. edbRefreshConfigListMap := make(map[int][]string)
  255. for _, v := range configList {
  256. tmp, ok := edbRefreshConfigListMap[v.EdbInfoId]
  257. if !ok {
  258. tmp = make([]string, 0)
  259. }
  260. edbRefreshConfigListMap[v.EdbInfoId] = append(tmp, GetRefreshStr(v.RefreshFrequency, v.RefreshFrequencyDay, v.RefreshTime))
  261. }
  262. for k, v := range edbRefreshConfigListMap {
  263. edbRefreshConfigMap[k] = strings.Join(v, ",")
  264. }
  265. }
  266. for _, v := range newList {
  267. refreshTime, ok := edbRefreshConfigMap[v.EdbInfoId]
  268. if ok {
  269. v.RefreshTime = refreshTime
  270. continue
  271. }
  272. if source == utils.DATA_SOURCE_YS {
  273. v.RefreshTime = defaultEdbRefreshConfigMap[``]
  274. } else {
  275. v.RefreshTime = defaultEdbRefreshConfigMap[v.Frequency]
  276. }
  277. }
  278. return
  279. }
  280. func GetList(source, subSource int, classifyId, terminalCode, sysUserId, frequency, keyword, status string, startSize, pageSize int, sortParam, sortType string) (total int, list []*data_manage.BaseRefreshEdbInfo, err error) {
  281. var pars []interface{}
  282. var condition string
  283. list = make([]*data_manage.BaseRefreshEdbInfo, 0)
  284. isStop := -1
  285. if status == `暂停` {
  286. isStop = 1
  287. } else if status == "启用" {
  288. isStop = 0
  289. }
  290. switch source {
  291. default:
  292. fmt.Println("line 530")
  293. condition += ` AND source = ? AND sub_source = ? `
  294. pars = append(pars, source, subSource)
  295. if isStop >= 0 {
  296. condition += " AND no_update = ? "
  297. pars = append(pars, isStop)
  298. }
  299. if classifyId != `` {
  300. classifyIdSlice := strings.Split(classifyId, ",")
  301. condition += ` AND classify_id IN (` + utils.GetOrmInReplace(len(classifyIdSlice)) + `)`
  302. pars = append(pars, classifyIdSlice)
  303. }
  304. if terminalCode != `` {
  305. condition += " AND terminal_code = ? "
  306. pars = append(pars, terminalCode)
  307. }
  308. if sysUserId != `` {
  309. sysUserIdSlice := strings.Split(sysUserId, ",")
  310. condition += ` AND sys_user_id IN (` + utils.GetOrmInReplace(len(sysUserIdSlice)) + `)`
  311. pars = append(pars, sysUserIdSlice)
  312. }
  313. if frequency != `` {
  314. frequencySlice := strings.Split(frequency, ",")
  315. condition += ` AND frequency IN (` + utils.GetOrmInReplace(len(frequencySlice)) + `)`
  316. pars = append(pars, frequencySlice)
  317. }
  318. if keyword != `` {
  319. keywordSlice := strings.Split(keyword, " ")
  320. if len(keywordSlice) > 0 {
  321. tmpConditionSlice := make([]string, 0)
  322. tmpConditionSlice = append(tmpConditionSlice, ` edb_name like ? or edb_code like ? `)
  323. pars = utils.GetLikeKeywordPars(pars, keyword, 2)
  324. for _, v := range keywordSlice {
  325. if v == ` ` || v == `` {
  326. continue
  327. }
  328. tmpConditionSlice = append(tmpConditionSlice, ` edb_name like ? or edb_code like ? `)
  329. pars = utils.GetLikeKeywordPars(pars, v, 2)
  330. }
  331. condition += ` AND (` + strings.Join(tmpConditionSlice, " or ") + `)`
  332. } else {
  333. condition += ` edb_name like ? or edb_code like ? `
  334. pars = utils.GetLikeKeywordPars(pars, keyword, 2)
  335. }
  336. }
  337. sortStr := ``
  338. if sortParam != `` {
  339. sortStr = fmt.Sprintf("%s %s,edb_info_id desc ", sortParam, sortType)
  340. }
  341. fmt.Println("line 582")
  342. fmt.Println(condition, pars, sortStr, startSize, pageSize)
  343. total, list, err = data_manage.GetEdbBaseInfoList(condition, pars, sortStr, startSize, pageSize)
  344. }
  345. return
  346. }
  347. func getAllDefaultEdbRefreshConfigKey(source, subSource int) string {
  348. return allDefaultEdbRefreshConfigKey + fmt.Sprintf("%d_%d", source, subSource)
  349. }
  350. func GetRefreshStr(refreshFrequency string, refreshFrequencyDay int, refreshTime string) string {
  351. refreshDayStr := ``
  352. switch refreshFrequency {
  353. case "每自然日", "每交易日":
  354. case "每周":
  355. switch refreshFrequencyDay {
  356. case 0:
  357. refreshDayStr = "日"
  358. case 1:
  359. refreshDayStr = "一"
  360. case 2:
  361. refreshDayStr = "二"
  362. case 3:
  363. refreshDayStr = "三"
  364. case 4:
  365. refreshDayStr = "四"
  366. case 5:
  367. refreshDayStr = "五"
  368. case 6:
  369. refreshDayStr = "六"
  370. case 7:
  371. refreshDayStr = "日"
  372. }
  373. default:
  374. if refreshFrequencyDay > 0 {
  375. refreshDayStr = fmt.Sprintf("第%d天", refreshFrequencyDay)
  376. } else {
  377. refreshDayStr = `最后一天`
  378. }
  379. }
  380. return refreshFrequency + refreshDayStr + " " + refreshTime
  381. }