researcher_assessment.go 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. package xy
  2. import (
  3. "encoding/json"
  4. "eta/eta_hub/models"
  5. "eta/eta_hub/models/system"
  6. "eta/eta_hub/models/xy"
  7. "eta/eta_hub/utils"
  8. "fmt"
  9. "strconv"
  10. "time"
  11. )
  12. // AssessmentFormController 研究员填报
  13. type AssessmentFormController struct {
  14. BaseAuthXyController
  15. }
  16. // Check
  17. // @Title 校验用户是否需要填报
  18. // @Description 校验用户是否需要填报
  19. // @Success 200 {object} xy.AssessmentCheckResp
  20. // @router /user/check [post]
  21. func (c *AssessmentFormController) Check() {
  22. br := new(xy.BaseResponse).Init()
  23. defer func() {
  24. c.Data["json"] = br
  25. c.ServeJSON()
  26. }()
  27. var req xy.AssessmentCheckReq
  28. if e := json.Unmarshal(c.Ctx.Input.RequestBody, &req); e != nil {
  29. br.Msg = "参数有误"
  30. br.ErrMsg = fmt.Sprintf("参数解析失败, %v", e)
  31. return
  32. }
  33. var resp xy.AssessmentCheckResp
  34. resp.SubmitAuth = true
  35. br.Data = resp
  36. // 找到系统账户
  37. adminIfo, err := system.GetUserByAdminName(req.Loginid)
  38. if err != nil {
  39. msg := `获取失败`
  40. errMsg := "获取失败,Err:" + err.Error()
  41. if utils.IsErrNoRow(err) {
  42. msg = `找不到系统账户`
  43. errMsg = msg
  44. }
  45. br.Msg = msg
  46. br.ErrMsg = errMsg
  47. return
  48. }
  49. // 根据账号获取是否配置研究员信息
  50. researcherObj := new(models.AssessmentResearcher)
  51. cond := fmt.Sprintf(` AND %s = ? AND %s = 1 `, researcherObj.Cols().AdminId, researcherObj.Cols().Enabled)
  52. pars := make([]interface{}, 0)
  53. pars = append(pars, adminIfo.AdminId)
  54. researcherItem, err := researcherObj.GetItemByCondition(cond, pars, "")
  55. if err != nil {
  56. if !utils.IsErrNoRow(err) {
  57. br.Msg = `获取失败`
  58. br.ErrMsg = "获取失败,Err:" + err.Error()
  59. return
  60. }
  61. br.ReturnCode = "S"
  62. br.Status = "S"
  63. br.Msg = "获取成功"
  64. return
  65. }
  66. // 根据研究员ID获取配置的品种数量
  67. varietyMappingObj := new(models.AssessmentResearcherVarietyMapping)
  68. cond = fmt.Sprintf(` AND %s = ? `, varietyMappingObj.Cols().AssessmentResearcherId)
  69. pars = make([]interface{}, 0)
  70. pars = append(pars, researcherItem.AssessmentResearcherId)
  71. count, err := varietyMappingObj.GetCountByCondition(cond, pars)
  72. if err != nil {
  73. br.Msg = `获取失败`
  74. br.ErrMsg = "获取失败,Err:" + err.Error()
  75. return
  76. }
  77. if count > 0 {
  78. resp.DataAuth = true
  79. }
  80. br.Data = resp
  81. br.ReturnCode = "S"
  82. br.Status = "S"
  83. br.Msg = "获取成功"
  84. }
  85. // Detail
  86. // @Title 填报单详情
  87. // @Description 填报单详情
  88. // @Success 200 string "获取成功"
  89. // @router /forms/detail [post]
  90. func (c *AssessmentFormController) Detail() {
  91. br := new(xy.BaseResponse).Init()
  92. defer func() {
  93. c.Data["json"] = br
  94. c.ServeJSON()
  95. }()
  96. var req xy.AssessmentFormQueryReq
  97. if e := json.Unmarshal(c.Ctx.Input.RequestBody, &req); e != nil {
  98. br.Msg = "参数有误"
  99. br.ErrMsg = fmt.Sprintf("参数解析失败, %v", e)
  100. return
  101. }
  102. if req.Loginid == "" {
  103. br.Msg = "参数有误"
  104. return
  105. }
  106. // 找到系统账户
  107. adminIfo, err := system.GetUserByAdminName(req.Loginid)
  108. if err != nil {
  109. msg := `获取失败`
  110. errMsg := "获取失败,Err:" + err.Error()
  111. if utils.IsErrNoRow(err) {
  112. msg = `找不到系统账户`
  113. errMsg = msg
  114. }
  115. br.Msg = msg
  116. br.ErrMsg = errMsg
  117. return
  118. }
  119. var startTime, endTime time.Time
  120. if req.StartTime == "" {
  121. br.Msg = "开始日期为空"
  122. return
  123. } else {
  124. startTime, err = time.ParseInLocation(utils.FormatDate, req.StartTime, time.Local)
  125. if err != nil {
  126. br.Msg = "开始时间异常"
  127. br.Msg = "开始时间异常,Err:" + err.Error()
  128. return
  129. }
  130. }
  131. if req.EndTime == "" {
  132. endTime = time.Now()
  133. }
  134. startWeekTime, _, _ := utils.GetAssessmentWeekAndFriday(startTime)
  135. endWeekTime, _, _ := utils.GetAssessmentWeekAndFriday(endTime)
  136. if startWeekTime != endWeekTime {
  137. br.Msg = `开始日期和结束日期不在同一周`
  138. br.ErrMsg = `开始日期和结束日期不在同一周`
  139. return
  140. }
  141. resp := new(models.AssessmentFormViewResp)
  142. // 根据单号获取填报单
  143. formOb := new(models.AssessmentForm)
  144. cond := fmt.Sprintf(` AND %s = ? AND %s = ? `, formOb.Cols().ResearcherAdminId, formOb.Cols().WeekTime)
  145. pars := make([]interface{}, 0)
  146. pars = append(pars, adminIfo.AdminId, startWeekTime)
  147. list, e := formOb.GetItemsByCondition(cond, pars, []string{}, "")
  148. if e != nil {
  149. br.Msg = "获取失败"
  150. br.ErrMsg = fmt.Sprintf("获取本周填报单总数失败, %v", e)
  151. return
  152. }
  153. if len(list) > 0 {
  154. resp.DataId = list[0].FormCode
  155. resp.OutNo = list[0].OutNo
  156. resp.Status = list[0].Status
  157. resp.OutStatus = list[0].OutStatus
  158. }
  159. resp.Head = models.AssessmentFormDetail{
  160. ResearcherName: "研究员名称",
  161. VarietyCode: "品种编码",
  162. VarietyName: "品种名称",
  163. WeekTime: "周度",
  164. BaseDate: "价格基准日期",
  165. MonthlyPriceForecast: "月度涨跌",
  166. WeeklyUpForecast: "周度上行风险",
  167. WeeklyDownForecast: "周度下行风险",
  168. SubmitTime: "提交时间",
  169. CreateTime: "创建时间",
  170. ModifyTime: "修改时间",
  171. }
  172. resp.List = make([]*models.AssessmentFormDetail, 0)
  173. for _, v := range list {
  174. resp.List = append(resp.List, v.Format2Detail())
  175. }
  176. br.Data = resp
  177. br.ReturnCode = "S"
  178. br.Status = "S"
  179. //br.Success = true
  180. br.Msg = "获取成功"
  181. }
  182. // UpdateOutStatus
  183. // @Title 更新填报单
  184. // @Description 更新填报单
  185. // @Success 200 string "获取成功"
  186. // @router /forms/update [post]
  187. func (c *AssessmentFormController) UpdateOutStatus() {
  188. br := new(xy.BaseResponse).Init()
  189. defer func() {
  190. c.Data["json"] = br
  191. c.ServeJSON()
  192. }()
  193. br.Data = ``
  194. var req xy.UpdateAssessmentFormReq
  195. if e := json.Unmarshal(c.Ctx.Input.RequestBody, &req); e != nil {
  196. br.Msg = "参数有误"
  197. br.ErrMsg = fmt.Sprintf("参数解析失败, %v", e)
  198. return
  199. }
  200. if req.DataId == "" {
  201. br.Msg = "数据ID异常"
  202. return
  203. }
  204. if req.ReportId == "" {
  205. br.Msg = "周报ID异常"
  206. return
  207. }
  208. if req.Status == "" {
  209. br.Msg = "status异常"
  210. return
  211. }
  212. status, err := strconv.Atoi(req.Status)
  213. if err != nil {
  214. br.Msg = "status异常"
  215. br.ErrMsg = "status异常,err:" + err.Error()
  216. return
  217. }
  218. if !utils.IsCheckInList([]int{0, 1}, status) {
  219. br.Msg = "status异常"
  220. return
  221. }
  222. // 根据单号获取填报单
  223. formOb := new(models.AssessmentForm)
  224. cond := fmt.Sprintf(` AND %s = ?`, formOb.Cols().FormCode)
  225. pars := make([]interface{}, 0)
  226. pars = append(pars, req.DataId)
  227. list, e := formOb.GetItemsByCondition(cond, pars, []string{}, "")
  228. if e != nil {
  229. br.Msg = "获取失败"
  230. br.ErrMsg = fmt.Sprintf("获取本周填报单总数失败, %v", e)
  231. return
  232. }
  233. if len(list) <= 0 {
  234. br.Msg = "数据不存在"
  235. return
  236. }
  237. if list[0].Status != 1 {
  238. br.Msg = "填报单未提交"
  239. return
  240. }
  241. err = formOb.UpdateOutStatusByFormCode(req.DataId, req.ReportId, status)
  242. if err != nil {
  243. br.Msg = "更新失败"
  244. br.ErrMsg = fmt.Sprintf("更新失败, %v", err)
  245. return
  246. }
  247. br.Data = ``
  248. br.ReturnCode = "S"
  249. br.Status = "S"
  250. //br.Success = true
  251. br.Msg = "获取成功"
  252. }