assessment_form.go 15 KB

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