assessment_form.go 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363
  1. package models
  2. import (
  3. "eta/eta_api/global"
  4. "eta/eta_api/utils"
  5. "fmt"
  6. "github.com/rdlucklib/rdluck_tools/paging"
  7. "strings"
  8. "time"
  9. )
  10. const (
  11. AssessmentFormStatusDraft = 0
  12. AssessmentFormStatusSubmitted = 1
  13. AssessmentFormMonthlyPriceUp = "涨"
  14. AssessmentFormMonthlyPriceDown = "跌"
  15. AssessmentFormMonthlyPriceShake = "震荡"
  16. AssessmentFormWeekUpYes = "是"
  17. AssessmentFormWeekUpNo = "否"
  18. AssessmentFormWeekDownYes = "是"
  19. AssessmentFormWeekDownNo = "否"
  20. )
  21. // AssessmentForm 研究员考核填报单
  22. type AssessmentForm struct {
  23. AssessmentFormId int `gorm:"column:assessment_form_id;primaryKey;autoIncrement"`
  24. FormCode string `description:"单号"`
  25. ResearcherId int `description:"研究员ID"`
  26. ResearcherAdminId int `description:"研究员用户ID"`
  27. ResearcherName string `description:"研究员姓名"`
  28. VarietyId int `description:"品种ID"`
  29. VarietyCode string `description:"品种编码"`
  30. VarietyName string `description:"品种名称"`
  31. WeekTime string `description:"周度(格式:202501,202502)"`
  32. WeekStart time.Time `description:"当周开始日期"`
  33. WeekEnd time.Time `description:"当周结束日期"`
  34. BaseDate time.Time `description:"价格基准日期"`
  35. MonthlyPriceForecast string `description:"月度涨跌:涨/跌/震荡"`
  36. WeeklyUpForecast string `description:"周度上行风险:是/否"`
  37. WeeklyDownForecast string `description:"周度下行风险:是/否"`
  38. Status int `description:"状态:0-草稿;1-已提交;"`
  39. SubmitTime time.Time `description:"提交时间"`
  40. CreateTime time.Time `description:"创建时间"`
  41. ModifyTime time.Time `description:"修改时间"`
  42. }
  43. func (m *AssessmentForm) TableName() string {
  44. return "assessment_form"
  45. }
  46. type AssessmentFormCols struct {
  47. PrimaryId string
  48. FormCode string
  49. ResearcherId string
  50. ResearcherAdminId string
  51. ResearcherName string
  52. VarietyId string
  53. VarietyCode string
  54. VarietyName string
  55. WeekTime string
  56. WeekStart string
  57. WeekEnd string
  58. BaseDate string
  59. MonthlyPriceForecast string
  60. WeeklyUpForecast string
  61. WeeklyDownForecast string
  62. Status string
  63. SubmitTime string
  64. CreateTime string
  65. ModifyTime string
  66. }
  67. func (m *AssessmentForm) Cols() AssessmentFormCols {
  68. return AssessmentFormCols{
  69. PrimaryId: "assessment_form_id",
  70. FormCode: "form_code",
  71. ResearcherId: "researcher_id",
  72. ResearcherAdminId: "researcher_admin_id",
  73. ResearcherName: "researcher_name",
  74. VarietyId: "variety_id",
  75. VarietyCode: "variety_code",
  76. VarietyName: "variety_name",
  77. WeekTime: "week_time",
  78. WeekStart: "week_start",
  79. WeekEnd: "week_end",
  80. BaseDate: "base_date",
  81. MonthlyPriceForecast: "monthly_price_forecast",
  82. WeeklyUpForecast: "weekly_up_forecast",
  83. WeeklyDownForecast: "weekly_down_forecast",
  84. Status: "status",
  85. SubmitTime: "submit_time",
  86. CreateTime: "create_time",
  87. ModifyTime: "modify_time",
  88. }
  89. }
  90. func (m *AssessmentForm) Create() (err error) {
  91. err = global.DEFAULT_DB.Create(m).Error
  92. return
  93. }
  94. func (m *AssessmentForm) CreateMulti(items []*AssessmentForm) (err error) {
  95. if len(items) == 0 {
  96. return
  97. }
  98. err = global.DEFAULT_DB.CreateInBatches(items, utils.MultiAddNum).Error
  99. return
  100. }
  101. func (m *AssessmentForm) Update(cols []string) (err error) {
  102. err = global.DEFAULT_DB.Select(cols).Updates(m).Error
  103. return
  104. }
  105. func (m *AssessmentForm) Remove() (err error) {
  106. sql := fmt.Sprintf(`DELETE FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.Cols().PrimaryId)
  107. err = global.DEFAULT_DB.Exec(sql, m.AssessmentFormId).Error
  108. return
  109. }
  110. func (m *AssessmentForm) MultiRemove(ids []int) (err error) {
  111. if len(ids) == 0 {
  112. return
  113. }
  114. sql := fmt.Sprintf(`DELETE FROM %s WHERE %s IN (%s)`, m.TableName(), m.Cols().PrimaryId, utils.GetOrmInReplace(len(ids)))
  115. err = global.DEFAULT_DB.Exec(sql, ids).Error
  116. return
  117. }
  118. func (m *AssessmentForm) RemoveByCondition(condition string, pars []interface{}) (err error) {
  119. if condition == "" {
  120. return
  121. }
  122. sql := fmt.Sprintf(`DELETE FROM %s WHERE %s`, m.TableName(), condition)
  123. err = global.DEFAULT_DB.Exec(sql, pars...).Error
  124. return
  125. }
  126. func (m *AssessmentForm) GetItemById(primaryId int) (item *AssessmentForm, err error) {
  127. sql := fmt.Sprintf(`SELECT * FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.Cols().PrimaryId)
  128. err = global.DEFAULT_DB.Raw(sql, primaryId).First(&item).Error
  129. return
  130. }
  131. func (m *AssessmentForm) GetItemByCondition(condition string, pars []interface{}, orderRule string) (item *AssessmentForm, err error) {
  132. order := ``
  133. if orderRule != "" {
  134. order = ` ORDER BY ` + orderRule
  135. }
  136. sql := fmt.Sprintf(`SELECT * FROM %s WHERE 1=1 %s %s LIMIT 1`, m.TableName(), condition, order)
  137. err = global.DEFAULT_DB.Raw(sql, pars...).First(&item).Error
  138. return
  139. }
  140. func (m *AssessmentForm) GetCountByCondition(condition string, pars []interface{}) (count int, err error) {
  141. sql := fmt.Sprintf(`SELECT COUNT(1) FROM %s WHERE 1=1 %s`, m.TableName(), condition)
  142. err = global.DEFAULT_DB.Raw(sql, pars...).Scan(&count).Error
  143. return
  144. }
  145. func (m *AssessmentForm) GetItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string) (items []*AssessmentForm, err error) {
  146. fields := strings.Join(fieldArr, ",")
  147. if len(fieldArr) == 0 {
  148. fields = `*`
  149. }
  150. order := fmt.Sprintf(`ORDER BY %s DESC`, m.Cols().CreateTime)
  151. if orderRule != "" {
  152. order = ` ORDER BY ` + orderRule
  153. }
  154. sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s`, fields, m.TableName(), condition, order)
  155. err = global.DEFAULT_DB.Raw(sql, pars...).Find(&items).Error
  156. return
  157. }
  158. func (m *AssessmentForm) GetPageItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string, startSize, pageSize int) (items []*AssessmentForm, err error) {
  159. fields := strings.Join(fieldArr, ",")
  160. if len(fieldArr) == 0 {
  161. fields = `*`
  162. }
  163. order := fmt.Sprintf(`ORDER BY %s DESC`, m.Cols().CreateTime)
  164. if orderRule != "" {
  165. order = ` ORDER BY ` + orderRule
  166. }
  167. sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s LIMIT ?,?`, fields, m.TableName(), condition, order)
  168. pars = append(pars, startSize, pageSize)
  169. err = global.DEFAULT_DB.Raw(sql, pars...).Find(&items).Error
  170. return
  171. }
  172. // AssessmentFormSaveReq 保存填报单请求
  173. type AssessmentFormSaveReq struct {
  174. List []AssessmentFormSaveItem
  175. }
  176. // AssessmentFormSaveItem 填报单保存信息
  177. type AssessmentFormSaveItem struct {
  178. AssessmentFormId int `description:"填报单ID"`
  179. FormCode string `description:"单号"`
  180. ResearcherId int `description:"研究员ID"`
  181. ResearcherAdminId int `description:"研究员用户ID"`
  182. ResearcherName string `description:"研究员姓名"`
  183. VarietyId int `description:"品种ID"`
  184. VarietyCode string `description:"品种编码"`
  185. VarietyName string `description:"品种名称"`
  186. WeekTime string `description:"周度(格式:202501,202502)"`
  187. BaseDate string `description:"价格基准日期"`
  188. MonthlyPriceForecast string `description:"月度涨跌:涨/跌/震荡"`
  189. WeeklyUpForecast string `description:"周度上行风险:是/否"`
  190. WeeklyDownForecast string `description:"周度下行风险:是/否"`
  191. Status int `description:"状态:0-草稿;1-已提交;"`
  192. }
  193. // AssessmentFormSubmitReq 提交填报单请求
  194. type AssessmentFormSubmitReq struct {
  195. FormCode string `description:"单号"`
  196. }
  197. // AssessmentFormCancelReq 撤销填报单请求
  198. type AssessmentFormCancelReq struct {
  199. FormCode string `description:"单号"`
  200. }
  201. // AssessmentFormRemoveReq 删除填报单请求
  202. type AssessmentFormRemoveReq struct {
  203. FormCode string `description:"单号"`
  204. }
  205. // AssessmentFormPageListReq 填报单列表筛选
  206. type AssessmentFormPageListReq struct {
  207. PageSize int `form:"PageSize"`
  208. CurrentIndex int `form:"CurrentIndex"`
  209. AssessmentResearcherIds string `form:"AssessmentResearcherIds" description:"研究员IDs"`
  210. AssessmentVarietyIds string `form:"AssessmentVarietyIds" description:"品种IDs"`
  211. StartTime string `form:"StartTime" description:"开始时间"`
  212. EndTime string `form:"EndTime" description:"结束时间"`
  213. }
  214. // AssessmentFormPageListResp 填报单分页列表
  215. type AssessmentFormPageListResp struct {
  216. List []*AssessmentFormDetail
  217. Paging *paging.PagingItem `description:"分页数据"`
  218. }
  219. // AssessmentFormDetail 填报单信息
  220. type AssessmentFormDetail struct {
  221. AssessmentFormId int `description:"填报单ID"`
  222. FormCode string `description:"单号"`
  223. ResearcherId int `description:"研究员ID"`
  224. ResearcherAdminId int `description:"研究员用户ID"`
  225. ResearcherName string `description:"研究员姓名"`
  226. VarietyId int `description:"品种ID"`
  227. VarietyCode string `description:"品种编码"`
  228. VarietyName string `description:"品种名称"`
  229. WeekTime string `description:"周度(格式:202501,202502)"`
  230. BaseDate string `description:"价格基准日期"`
  231. MonthlyPriceForecast string `description:"月度涨跌:涨/跌/震荡"`
  232. WeeklyUpForecast string `description:"周度上行风险:是/否"`
  233. WeeklyDownForecast string `description:"周度下行风险:是/否"`
  234. Status int `description:"状态:0-草稿;1-已提交;"`
  235. SubmitTime string `description:"提交时间"`
  236. CreateTime string `description:"创建时间"`
  237. ModifyTime string `description:"修改时间"`
  238. Button AssessmentFormButton `description:"按钮权限"`
  239. }
  240. type AssessmentFormButton struct {
  241. ViewButton bool `description:"查看按钮"`
  242. EditButton bool `description:"编辑按钮"`
  243. RemoveButton bool `description:"删除按钮"`
  244. SubmitButton bool `description:"提交按钮"`
  245. CancelButton bool `description:"撤销按钮"`
  246. }
  247. func (m *AssessmentForm) Format2Detail() (item *AssessmentFormDetail) {
  248. item = new(AssessmentFormDetail)
  249. item.AssessmentFormId = m.AssessmentFormId
  250. item.FormCode = m.FormCode
  251. item.ResearcherId = m.ResearcherId
  252. item.ResearcherAdminId = m.ResearcherAdminId
  253. item.ResearcherName = m.ResearcherName
  254. item.VarietyId = m.VarietyId
  255. item.VarietyCode = m.VarietyCode
  256. item.VarietyName = m.VarietyName
  257. item.WeekTime = m.WeekTime
  258. item.BaseDate = utils.TimeTransferString(utils.FormatDate, m.BaseDate)
  259. item.MonthlyPriceForecast = m.MonthlyPriceForecast
  260. item.WeeklyUpForecast = m.WeeklyUpForecast
  261. item.WeeklyDownForecast = m.WeeklyDownForecast
  262. item.Status = m.Status
  263. item.SubmitTime = utils.TimeTransferString(utils.FormatDate, m.SubmitTime)
  264. item.CreateTime = utils.TimeTransferString(utils.FormatDateTime, m.CreateTime)
  265. item.ModifyTime = utils.TimeTransferString(utils.FormatDateTime, m.ModifyTime)
  266. return
  267. }
  268. // AssessmentFormViewResp 查看填报单
  269. type AssessmentFormViewResp struct {
  270. List []*AssessmentFormDetail `description:"填报单详情"`
  271. VarietyPrice []*AssessmentFormVarietyPrice `description:"品种价格详情"`
  272. ForecastComment []*AssessmentFormForecastComment `description:"观点评价"`
  273. }
  274. // AssessmentFormVarietyPrice 品种价格详情
  275. type AssessmentFormVarietyPrice struct {
  276. VarietyId int `description:"品种ID"`
  277. VarietyCode string `description:"品种编码"`
  278. VarietyName string `description:"品种名称"`
  279. EndDate string `description:"最新日期"`
  280. LatestValue string `description:"最新价格"`
  281. BaseDatePrice string `description:"基准日收盘价"`
  282. NextWeekPrice string `description:"N+1周价格"`
  283. NextMonthPrice string `description:"N+4周价格"`
  284. }
  285. // AssessmentFormForecastComment 观点评价
  286. type AssessmentFormForecastComment struct {
  287. VarietyId int `description:"品种ID"`
  288. VarietyCode string `description:"品种编码"`
  289. VarietyName string `description:"品种名称"`
  290. WeekTime string `description:"周度(格式:202501,202502)"`
  291. SubmitTime string `description:"填报日期"`
  292. MonthlyPriceComment string `description:"月度涨跌评价"`
  293. MonthlyPriceForecastRight bool `description:"月度涨跌判断是否正确"`
  294. WeeklyUpComment string `description:"周度上行风险评价"`
  295. WeeklyUpForecastRight bool `description:"周度上行风险判断是否正确"`
  296. WeeklyDownComment string `description:"周度下行风险评价"`
  297. WeeklyDownForecastRight bool `description:"周度下行风险判断是否正确"`
  298. }
  299. // AssessmentFormCheckAddResp 新建填报权限响应
  300. type AssessmentFormCheckAddResp struct {
  301. IsResearcher bool `description:"是否为研究员"`
  302. HasVariety bool `description:"是否绑定品种"`
  303. NewForm bool `description:"是否可新建本周填报"`
  304. }
  305. // AssessmentFormResultStatisticReq 填报单结果统计请求
  306. type AssessmentFormResultStatisticReq struct {
  307. AssessmentResearcherIds string `form:"AssessmentResearcherIds" description:"研究员IDs"`
  308. StartTime string `form:"StartTime" description:"开始时间"`
  309. EndTime string `form:"EndTime" description:"结束时间"`
  310. }
  311. // AssessmentFormResultStatisticItem 填报单结果统计
  312. type AssessmentFormResultStatisticItem struct {
  313. ResearcherId int `description:"研究员ID"`
  314. ResearcherAdminId int `description:"研究员用户ID"`
  315. ResearcherName string `description:"研究员姓名"`
  316. VarietyId int `description:"品种ID"`
  317. VarietyCode string `description:"品种编码"`
  318. VarietyName string `description:"品种名称"`
  319. MonthlyTrendAccuracy float64 `description:"月度趋势正确率"`
  320. WeeklyWarningAccuracy float64 `description:"周度预警正确率"`
  321. TotalAccuracyA float64 `description:"综合正确率1"`
  322. TotalAccuracyB float64 `description:"综合正确率2"`
  323. }
  324. func (m *AssessmentForm) UpdateResearcherName(researcherId int, researcherName string) (err error) {
  325. sql := fmt.Sprintf(`UPDATE %s SET %s = ? WHERE %s = ?`, m.TableName(), m.Cols().ResearcherName, m.Cols().ResearcherId)
  326. err = global.DEFAULT_DB.Exec(sql, researcherName, researcherId).Error
  327. return
  328. }