fe_calendar_matter.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372
  1. package fe_calendar
  2. import (
  3. "encoding/json"
  4. "eta/eta_api/controllers"
  5. "eta/eta_api/models"
  6. "eta/eta_api/models/fe_calendar"
  7. "eta/eta_api/utils"
  8. "fmt"
  9. "strings"
  10. "time"
  11. )
  12. // FeCalendarMatterController 外汇日历-事项
  13. type FeCalendarMatterController struct {
  14. controllers.BaseAuthController
  15. }
  16. // List
  17. // @Title 事项列表
  18. // @Description 事项列表
  19. // @Param ChartPermissionId query int true "品种ID"
  20. // @Param StartDate query string true "开始日期"
  21. // @Param EndDate query string true "结束日期"
  22. // @Success 200 {object} fe_calendar.FeCalendarMatterListItem
  23. // @router /matter/list [get]
  24. func (this *FeCalendarMatterController) List() {
  25. br := new(models.BaseResponse).Init()
  26. defer func() {
  27. if br.ErrMsg == "" {
  28. br.IsSendEmail = false
  29. }
  30. this.Data["json"] = br
  31. this.ServeJSON()
  32. }()
  33. sysUser := this.SysUser
  34. if sysUser == nil {
  35. br.Msg = "请登录"
  36. br.ErrMsg = "请登录,SysUser Is Empty"
  37. br.Ret = 408
  38. return
  39. }
  40. params := new(fe_calendar.FeCalendarMatterListReq)
  41. if e := this.ParseForm(params); e != nil {
  42. br.Msg = "获取失败"
  43. br.ErrMsg = "入参解析失败, Err: " + e.Error()
  44. return
  45. }
  46. if params.ChartPermissionId <= 0 {
  47. br.Msg = "请选择品种"
  48. return
  49. }
  50. cond := ``
  51. pars := make([]interface{}, 0)
  52. if params.ChartPermissionId > 0 {
  53. cond += fmt.Sprintf(` AND %s = ?`, fe_calendar.FeCalendarMatterCols.ChartPermissionId)
  54. pars = append(pars, params.ChartPermissionId)
  55. }
  56. if params.StartDate != "" && params.EndDate != "" {
  57. _, e := time.Parse(utils.FormatDate, params.StartDate)
  58. if e != nil {
  59. br.Msg = "开始日期格式有误"
  60. return
  61. }
  62. _, e = time.Parse(utils.FormatDate, params.EndDate)
  63. if e != nil {
  64. br.Msg = "结束日期格式有误"
  65. return
  66. }
  67. cond += fmt.Sprintf(` AND %s >= ? AND %s <= ?`, fe_calendar.FeCalendarMatterCols.MatterDate, fe_calendar.FeCalendarMatterCols.MatterDate)
  68. pars = append(pars, params.StartDate, params.EndDate)
  69. }
  70. matterOb := new(fe_calendar.FeCalendarMatter)
  71. order := fmt.Sprintf(`%s ASC, %s ASC`, fe_calendar.FeCalendarMatterCols.MatterDate, fe_calendar.FeCalendarMatterCols.Sort)
  72. matters, e := matterOb.GetItemsByCondition(cond, pars, []string{}, order)
  73. if e != nil {
  74. br.Msg = "获取失败"
  75. br.ErrMsg = "获取事项列表失败, Err: " + e.Error()
  76. return
  77. }
  78. dateMatter := make(map[string][]*fe_calendar.FeCalendarMatterItem)
  79. for _, v := range matters {
  80. d := v.MatterDate.Format(utils.FormatDate)
  81. if dateMatter[d] == nil {
  82. dateMatter[d] = make([]*fe_calendar.FeCalendarMatterItem, 0)
  83. }
  84. dateMatter[d] = append(dateMatter[d], fe_calendar.FormatFeCalendarMatter2Item(v))
  85. }
  86. dateExist := make(map[string]bool)
  87. resp := make([]*fe_calendar.FeCalendarMatterListItem, 0)
  88. for _, v := range matters {
  89. d := v.MatterDate.Format(utils.FormatDate)
  90. if dateExist[d] {
  91. continue
  92. }
  93. dateExist[d] = true
  94. resp = append(resp, &fe_calendar.FeCalendarMatterListItem{
  95. Date: d,
  96. Matters: dateMatter[d],
  97. })
  98. }
  99. br.Data = resp
  100. br.Ret = 200
  101. br.Success = true
  102. br.Msg = "获取成功"
  103. }
  104. // Detail
  105. // @Title 事项详情
  106. // @Description 事项详情
  107. // @Param ChartPermissionId query int true "品种ID"
  108. // @Param MatterDate query string true "事项日期"
  109. // @Success 200 {object} fe_calendar.FeCalendarMatterItem
  110. // @router /matter/detail [get]
  111. func (this *FeCalendarMatterController) Detail() {
  112. br := new(models.BaseResponse).Init()
  113. defer func() {
  114. if br.ErrMsg == "" {
  115. br.IsSendEmail = false
  116. }
  117. this.Data["json"] = br
  118. this.ServeJSON()
  119. }()
  120. sysUser := this.SysUser
  121. if sysUser == nil {
  122. br.Msg = "请登录"
  123. br.ErrMsg = "请登录,SysUser Is Empty"
  124. br.Ret = 408
  125. return
  126. }
  127. permissionId, _ := this.GetInt("ChartPermissionId")
  128. if permissionId <= 0 {
  129. br.Msg = "请选择品种"
  130. return
  131. }
  132. matterDate := this.GetString("MatterDate")
  133. if matterDate == "" {
  134. br.Msg = "请选择日期"
  135. return
  136. }
  137. _, e := time.Parse(utils.FormatDate, matterDate)
  138. if e != nil {
  139. br.Msg = "日期格式有误"
  140. return
  141. }
  142. matterOb := new(fe_calendar.FeCalendarMatter)
  143. cond := fmt.Sprintf(` AND %s = ? AND %s = ?`, fe_calendar.FeCalendarMatterCols.ChartPermissionId, fe_calendar.FeCalendarMatterCols.MatterDate)
  144. pars := make([]interface{}, 0)
  145. pars = append(pars, permissionId, matterDate)
  146. order := fmt.Sprintf(`%s ASC`, fe_calendar.FeCalendarMatterCols.Sort)
  147. matters, e := matterOb.GetItemsByCondition(cond, pars, []string{}, order)
  148. if e != nil {
  149. br.Msg = "获取失败"
  150. br.ErrMsg = "获取事项列表失败, Err: " + e.Error()
  151. return
  152. }
  153. resp := make([]*fe_calendar.FeCalendarMatterItem, 0)
  154. for _, v := range matters {
  155. resp = append(resp, fe_calendar.FormatFeCalendarMatter2Item(v))
  156. }
  157. br.Data = resp
  158. br.Ret = 200
  159. br.Success = true
  160. br.Msg = "获取成功"
  161. }
  162. // Save
  163. // @Title 保存事项
  164. // @Description 保存事项
  165. // @Param request body fe_calendar.FeCalendarMatterSaveReq true "type json string"
  166. // @Success 200 string "操作成功"
  167. // @router /matter/save [post]
  168. func (this *FeCalendarMatterController) Save() {
  169. br := new(models.BaseResponse).Init()
  170. defer func() {
  171. if br.ErrMsg == "" {
  172. br.IsSendEmail = false
  173. }
  174. this.Data["json"] = br
  175. this.ServeJSON()
  176. }()
  177. sysUser := this.SysUser
  178. if sysUser == nil {
  179. br.Msg = "请登录"
  180. br.ErrMsg = "请登录,SysUser Is Empty"
  181. br.Ret = 408
  182. return
  183. }
  184. var req fe_calendar.FeCalendarMatterSaveReq
  185. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  186. br.Msg = "参数有误"
  187. br.ErrMsg = "参数解析失败, Err: " + e.Error()
  188. return
  189. }
  190. // 参数校验
  191. if req.ChartPermissionId <= 0 {
  192. br.Msg = "请选择品种"
  193. return
  194. }
  195. if req.MatterDate == "" {
  196. br.Msg = "请选择日期"
  197. return
  198. }
  199. var matterMonth string
  200. matterDate, e := time.ParseInLocation(utils.FormatDate, req.MatterDate, time.Local)
  201. if e != nil {
  202. br.Msg = "日期格式有误"
  203. return
  204. }
  205. matterMonth = matterDate.Format("2006-01")
  206. if len(req.Matters) > 0 {
  207. for _, v := range req.Matters {
  208. if v.MatterType != fe_calendar.MatterTypeFree && v.MatterType != fe_calendar.MatterTypeEdb && v.MatterType != fe_calendar.MatterTypePredict {
  209. br.Msg = "事项类型有误"
  210. br.ErrMsg = fmt.Sprintf("事项类型有误, MatterType: %d", v.MatterType)
  211. return
  212. }
  213. v.Title = strings.TrimSpace(v.Title)
  214. if v.Title == "" {
  215. br.Msg = "请输入指标/事项名称"
  216. return
  217. }
  218. if len([]rune(v.Title)) > 15 {
  219. br.Msg = "名称超出15个字,请重新编辑"
  220. return
  221. }
  222. if v.MatterType == fe_calendar.MatterTypeEdb || v.MatterType == fe_calendar.MatterTypePredict {
  223. if v.EdbInfoId <= 0 || v.EdbUniqueCode == "" || v.EdbCode == "" {
  224. br.Msg = "指标信息有误"
  225. br.ErrMsg = fmt.Sprintf("指标信息有误, EdbInfoId: %d, EdbUniqueCode: %s, EdbCode: %s", v.EdbInfoId, v.EdbUniqueCode, v.EdbCode)
  226. return
  227. }
  228. }
  229. }
  230. }
  231. // 品种信息
  232. permissionItem, e := models.GetChartPermissionById(req.ChartPermissionId)
  233. if e != nil {
  234. br.Msg = "操作失败"
  235. br.ErrMsg = "获取品种失败, Err: " + e.Error()
  236. return
  237. }
  238. // 获取已有事项
  239. matterOb := new(fe_calendar.FeCalendarMatter)
  240. cond := fmt.Sprintf(` AND %s = ? AND %s = ?`, fe_calendar.FeCalendarMatterCols.ChartPermissionId, fe_calendar.FeCalendarMatterCols.MatterDate)
  241. pars := make([]interface{}, 0)
  242. pars = append(pars, req.ChartPermissionId, req.MatterDate)
  243. order := fmt.Sprintf(`%s ASC`, fe_calendar.FeCalendarMatterCols.Sort)
  244. matters, e := matterOb.GetItemsByCondition(cond, pars, []string{}, order)
  245. if e != nil {
  246. br.Msg = "操作失败"
  247. br.ErrMsg = "获取已有事项列表失败, Err: " + e.Error()
  248. return
  249. }
  250. addMatters := make([]*fe_calendar.FeCalendarMatter, 0)
  251. editMatters := make([]*fe_calendar.FeCalendarMatter, 0)
  252. removeMatters := make([]*fe_calendar.FeCalendarMatter, 0)
  253. updateCols := []string{fe_calendar.FeCalendarMatterCols.Title, fe_calendar.FeCalendarMatterCols.FontColor, fe_calendar.FeCalendarMatterCols.FillingColor, fe_calendar.FeCalendarMatterCols.FontBold, fe_calendar.FeCalendarMatterCols.Sort, fe_calendar.FeCalendarMatterCols.ChartPermissionName, fe_calendar.FeCalendarMatterCols.ModifyTime}
  254. editIds := make([]int, 0)
  255. editMatterMap := make(map[int]*fe_calendar.FeCalendarMatterSaveItem)
  256. for _, v := range req.Matters {
  257. // 更新的事项map
  258. if v.FeCalendarMatterId > 0 {
  259. editIds = append(editIds, v.FeCalendarMatterId)
  260. editMatterMap[v.FeCalendarMatterId] = v
  261. continue
  262. }
  263. // 新增事项
  264. addMatters = append(addMatters, &fe_calendar.FeCalendarMatter{
  265. ChartPermissionId: req.ChartPermissionId,
  266. ChartPermissionName: permissionItem.PermissionName,
  267. MatterMonth: matterMonth,
  268. MatterDate: matterDate,
  269. Title: strings.TrimSpace(v.Title),
  270. MatterType: v.MatterType,
  271. EdbInfoId: v.EdbInfoId,
  272. EdbUniqueCode: v.EdbUniqueCode,
  273. EdbCode: v.EdbCode,
  274. FontColor: v.FontColor,
  275. FillingColor: v.FillingColor,
  276. FontBold: v.FontBold,
  277. Sort: v.Sort,
  278. SysUserId: sysUser.AdminId,
  279. SysUserName: sysUser.RealName,
  280. CreateTime: time.Now().Local(),
  281. ModifyTime: time.Now().Local(),
  282. })
  283. }
  284. for _, v := range matters {
  285. // 移除的事项
  286. if !utils.InArrayByInt(editIds, v.FeCalendarMatterId) {
  287. removeMatters = append(removeMatters, v)
  288. continue
  289. }
  290. // 编辑的事项
  291. ed := editMatterMap[v.FeCalendarMatterId]
  292. if ed != nil {
  293. v.Title = strings.TrimSpace(ed.Title)
  294. v.FontColor = ed.FontColor
  295. v.FillingColor = ed.FillingColor
  296. v.FontBold = ed.FontBold
  297. v.Sort = ed.Sort
  298. v.ChartPermissionName = permissionItem.PermissionName
  299. v.ModifyTime = time.Now().Local()
  300. editMatters = append(editMatters, v)
  301. }
  302. }
  303. // 保存/删除
  304. if e = matterOb.Save(addMatters, editMatters, removeMatters, updateCols); e != nil {
  305. br.Msg = "操作失败"
  306. br.ErrMsg = "保存事项失败, Err: " + e.Error()
  307. return
  308. }
  309. br.Ret = 200
  310. br.Success = true
  311. br.Msg = "操作成功"
  312. }
  313. // PermissionList
  314. // @Title 品种列表
  315. // @Description 品种列表
  316. // @Success 200 {object} models.SimpleChartPermission
  317. // @router /permission/list [get]
  318. func (this *FeCalendarMatterController) PermissionList() {
  319. br := new(models.BaseResponse).Init()
  320. defer func() {
  321. if br.ErrMsg == "" {
  322. br.IsSendEmail = false
  323. }
  324. this.Data["json"] = br
  325. this.ServeJSON()
  326. }()
  327. permissions, e := models.GetChartPermissionsByProductId()
  328. if e != nil {
  329. br.Msg = "获取失败"
  330. br.ErrMsg = "获取品种列表失败, Err: " + e.Error()
  331. return
  332. }
  333. resp := make([]*models.SimpleChartPermission, 0)
  334. parentPermissions := make(map[int][]*models.SimpleChartPermission, 0)
  335. for _, v := range permissions {
  336. if v.ParentId > 0 {
  337. if parentPermissions[v.ParentId] == nil {
  338. parentPermissions[v.ParentId] = make([]*models.SimpleChartPermission, 0)
  339. }
  340. parentPermissions[v.ParentId] = append(parentPermissions[v.ParentId], models.FormatChartPermission2Simple(v))
  341. continue
  342. }
  343. resp = append(resp, models.FormatChartPermission2Simple(v))
  344. }
  345. for _, v := range resp {
  346. v.Children = parentPermissions[v.ChartPermissionId]
  347. }
  348. br.Data = resp
  349. br.Ret = 200
  350. br.Success = true
  351. br.Msg = "获取成功"
  352. }