package models import ( "eta/eta_api/global" "eta/eta_api/utils" "fmt" "github.com/rdlucklib/rdluck_tools/paging" "strings" "time" ) const ( AssessmentFormStatusDraft = 0 AssessmentFormStatusSubmitted = 1 AssessmentFormMonthlyPriceUp = "涨" AssessmentFormMonthlyPriceDown = "跌" AssessmentFormMonthlyPriceShake = "震荡" AssessmentFormWeekUpYes = "是" AssessmentFormWeekUpNo = "否" AssessmentFormWeekDownYes = "是" AssessmentFormWeekDownNo = "否" ) // AssessmentForm 研究员考核填报单 type AssessmentForm struct { AssessmentFormId int `gorm:"column:assessment_form_id;primaryKey;autoIncrement"` FormCode string `description:"单号"` ResearcherId int `description:"研究员ID"` ResearcherAdminId int `description:"研究员用户ID"` ResearcherName string `description:"研究员姓名"` VarietyId int `description:"品种ID"` VarietyCode string `description:"品种编码"` VarietyName string `description:"品种名称"` WeekTime string `description:"周度(格式:202501,202502)"` WeekStart time.Time `description:"当周开始日期"` WeekEnd time.Time `description:"当周结束日期"` BaseDate time.Time `description:"价格基准日期"` MonthlyPriceForecast string `description:"月度涨跌:涨/跌/震荡"` WeeklyUpForecast string `description:"周度上行风险:是/否"` WeeklyDownForecast string `description:"周度下行风险:是/否"` Status int `description:"状态:0-草稿;1-已提交;"` SubmitTime time.Time `description:"提交时间"` CreateTime time.Time `description:"创建时间"` ModifyTime time.Time `description:"修改时间"` } func (m *AssessmentForm) TableName() string { return "assessment_form" } type AssessmentFormCols struct { PrimaryId string FormCode string ResearcherId string ResearcherAdminId string ResearcherName string VarietyId string VarietyCode string VarietyName string WeekTime string WeekStart string WeekEnd string BaseDate string MonthlyPriceForecast string WeeklyUpForecast string WeeklyDownForecast string Status string SubmitTime string CreateTime string ModifyTime string } func (m *AssessmentForm) Cols() AssessmentFormCols { return AssessmentFormCols{ PrimaryId: "assessment_form_id", FormCode: "form_code", ResearcherId: "researcher_id", ResearcherAdminId: "researcher_admin_id", ResearcherName: "researcher_name", VarietyId: "variety_id", VarietyCode: "variety_code", VarietyName: "variety_name", WeekTime: "week_time", WeekStart: "week_start", WeekEnd: "week_end", BaseDate: "base_date", MonthlyPriceForecast: "monthly_price_forecast", WeeklyUpForecast: "weekly_up_forecast", WeeklyDownForecast: "weekly_down_forecast", Status: "status", SubmitTime: "submit_time", CreateTime: "create_time", ModifyTime: "modify_time", } } func (m *AssessmentForm) Create() (err error) { err = global.DEFAULT_DB.Create(m).Error return } func (m *AssessmentForm) CreateMulti(items []*AssessmentForm) (err error) { if len(items) == 0 { return } err = global.DEFAULT_DB.CreateInBatches(items, utils.MultiAddNum).Error return } func (m *AssessmentForm) Update(cols []string) (err error) { err = global.DEFAULT_DB.Select(cols).Updates(m).Error return } func (m *AssessmentForm) Remove() (err error) { sql := fmt.Sprintf(`DELETE FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.Cols().PrimaryId) err = global.DEFAULT_DB.Exec(sql, m.AssessmentFormId).Error return } func (m *AssessmentForm) MultiRemove(ids []int) (err error) { if len(ids) == 0 { return } sql := fmt.Sprintf(`DELETE FROM %s WHERE %s IN (%s)`, m.TableName(), m.Cols().PrimaryId, utils.GetOrmInReplace(len(ids))) err = global.DEFAULT_DB.Exec(sql, ids).Error return } func (m *AssessmentForm) RemoveByCondition(condition string, pars []interface{}) (err error) { if condition == "" { return } sql := fmt.Sprintf(`DELETE FROM %s WHERE %s`, m.TableName(), condition) err = global.DEFAULT_DB.Exec(sql, pars...).Error return } func (m *AssessmentForm) GetItemById(primaryId int) (item *AssessmentForm, err error) { sql := fmt.Sprintf(`SELECT * FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.Cols().PrimaryId) err = global.DEFAULT_DB.Raw(sql, primaryId).First(&item).Error return } func (m *AssessmentForm) GetItemByCondition(condition string, pars []interface{}, orderRule string) (item *AssessmentForm, err error) { order := `` if orderRule != "" { order = ` ORDER BY ` + orderRule } sql := fmt.Sprintf(`SELECT * FROM %s WHERE 1=1 %s %s LIMIT 1`, m.TableName(), condition, order) err = global.DEFAULT_DB.Raw(sql, pars...).First(&item).Error return } func (m *AssessmentForm) GetCountByCondition(condition string, pars []interface{}) (count int, err error) { sql := fmt.Sprintf(`SELECT COUNT(1) FROM %s WHERE 1=1 %s`, m.TableName(), condition) err = global.DEFAULT_DB.Raw(sql, pars...).Scan(&count).Error return } func (m *AssessmentForm) GetItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string) (items []*AssessmentForm, err error) { fields := strings.Join(fieldArr, ",") if len(fieldArr) == 0 { fields = `*` } order := fmt.Sprintf(`ORDER BY %s DESC`, m.Cols().CreateTime) if orderRule != "" { order = ` ORDER BY ` + orderRule } sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s`, fields, m.TableName(), condition, order) err = global.DEFAULT_DB.Raw(sql, pars...).Find(&items).Error return } func (m *AssessmentForm) GetPageItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string, startSize, pageSize int) (items []*AssessmentForm, err error) { fields := strings.Join(fieldArr, ",") if len(fieldArr) == 0 { fields = `*` } order := fmt.Sprintf(`ORDER BY %s DESC`, m.Cols().CreateTime) if orderRule != "" { order = ` ORDER BY ` + orderRule } sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s LIMIT ?,?`, fields, m.TableName(), condition, order) pars = append(pars, startSize, pageSize) err = global.DEFAULT_DB.Raw(sql, pars...).Find(&items).Error return } // AssessmentFormSaveReq 保存填报单请求 type AssessmentFormSaveReq struct { List []AssessmentFormSaveItem } // AssessmentFormSaveItem 填报单保存信息 type AssessmentFormSaveItem struct { AssessmentFormId int `description:"填报单ID"` FormCode string `description:"单号"` ResearcherId int `description:"研究员ID"` ResearcherAdminId int `description:"研究员用户ID"` ResearcherName string `description:"研究员姓名"` VarietyId int `description:"品种ID"` VarietyCode string `description:"品种编码"` VarietyName string `description:"品种名称"` WeekTime string `description:"周度(格式:202501,202502)"` BaseDate string `description:"价格基准日期"` MonthlyPriceForecast string `description:"月度涨跌:涨/跌/震荡"` WeeklyUpForecast string `description:"周度上行风险:是/否"` WeeklyDownForecast string `description:"周度下行风险:是/否"` Status int `description:"状态:0-草稿;1-已提交;"` } // AssessmentFormSubmitReq 提交填报单请求 type AssessmentFormSubmitReq struct { FormCode string `description:"单号"` } // AssessmentFormCancelReq 撤销填报单请求 type AssessmentFormCancelReq struct { FormCode string `description:"单号"` } // AssessmentFormRemoveReq 删除填报单请求 type AssessmentFormRemoveReq struct { FormCode string `description:"单号"` } // AssessmentFormPageListReq 填报单列表筛选 type AssessmentFormPageListReq struct { PageSize int `form:"PageSize"` CurrentIndex int `form:"CurrentIndex"` AssessmentResearcherIds string `form:"AssessmentResearcherIds" description:"研究员IDs"` AssessmentVarietyIds string `form:"AssessmentVarietyIds" description:"品种IDs"` StartTime string `form:"StartTime" description:"开始时间"` EndTime string `form:"EndTime" description:"结束时间"` } // AssessmentFormPageListResp 填报单分页列表 type AssessmentFormPageListResp struct { List []*AssessmentFormDetail Paging *paging.PagingItem `description:"分页数据"` } // AssessmentFormDetail 填报单信息 type AssessmentFormDetail struct { AssessmentFormId int `description:"填报单ID"` FormCode string `description:"单号"` ResearcherId int `description:"研究员ID"` ResearcherAdminId int `description:"研究员用户ID"` ResearcherName string `description:"研究员姓名"` VarietyId int `description:"品种ID"` VarietyCode string `description:"品种编码"` VarietyName string `description:"品种名称"` WeekTime string `description:"周度(格式:202501,202502)"` BaseDate string `description:"价格基准日期"` MonthlyPriceForecast string `description:"月度涨跌:涨/跌/震荡"` WeeklyUpForecast string `description:"周度上行风险:是/否"` WeeklyDownForecast string `description:"周度下行风险:是/否"` Status int `description:"状态:0-草稿;1-已提交;"` SubmitTime string `description:"提交时间"` CreateTime string `description:"创建时间"` ModifyTime string `description:"修改时间"` Button AssessmentFormButton `description:"按钮权限"` } type AssessmentFormButton struct { ViewButton bool `description:"查看按钮"` EditButton bool `description:"编辑按钮"` RemoveButton bool `description:"删除按钮"` SubmitButton bool `description:"提交按钮"` CancelButton bool `description:"撤销按钮"` } func (m *AssessmentForm) Format2Detail() (item *AssessmentFormDetail) { item = new(AssessmentFormDetail) item.AssessmentFormId = m.AssessmentFormId item.FormCode = m.FormCode item.ResearcherId = m.ResearcherId item.ResearcherAdminId = m.ResearcherAdminId item.ResearcherName = m.ResearcherName item.VarietyId = m.VarietyId item.VarietyCode = m.VarietyCode item.VarietyName = m.VarietyName item.WeekTime = m.WeekTime item.BaseDate = utils.TimeTransferString(utils.FormatDate, m.BaseDate) item.MonthlyPriceForecast = m.MonthlyPriceForecast item.WeeklyUpForecast = m.WeeklyUpForecast item.WeeklyDownForecast = m.WeeklyDownForecast item.Status = m.Status item.SubmitTime = utils.TimeTransferString(utils.FormatDate, m.SubmitTime) item.CreateTime = utils.TimeTransferString(utils.FormatDateTime, m.CreateTime) item.ModifyTime = utils.TimeTransferString(utils.FormatDateTime, m.ModifyTime) return } // AssessmentFormViewResp 查看填报单 type AssessmentFormViewResp struct { List []*AssessmentFormDetail `description:"填报单详情"` VarietyPrice []*AssessmentFormVarietyPrice `description:"品种价格详情"` ForecastComment []*AssessmentFormForecastComment `description:"观点评价"` } // AssessmentFormVarietyPrice 品种价格详情 type AssessmentFormVarietyPrice struct { VarietyId int `description:"品种ID"` VarietyCode string `description:"品种编码"` VarietyName string `description:"品种名称"` EndDate string `description:"最新日期"` LatestValue string `description:"最新价格"` BaseDatePrice string `description:"基准日收盘价"` NextWeekPrice string `description:"N+1周价格"` NextMonthPrice string `description:"N+4周价格"` } // AssessmentFormForecastComment 观点评价 type AssessmentFormForecastComment struct { VarietyId int `description:"品种ID"` VarietyCode string `description:"品种编码"` VarietyName string `description:"品种名称"` WeekTime string `description:"周度(格式:202501,202502)"` SubmitTime string `description:"填报日期"` MonthlyPriceComment string `description:"月度涨跌评价"` MonthlyPriceForecastRight bool `description:"月度涨跌判断是否正确"` WeeklyUpComment string `description:"周度上行风险评价"` WeeklyUpForecastRight bool `description:"周度上行风险判断是否正确"` WeeklyDownComment string `description:"周度下行风险评价"` WeeklyDownForecastRight bool `description:"周度下行风险判断是否正确"` } // AssessmentFormCheckAddResp 新建填报权限响应 type AssessmentFormCheckAddResp struct { IsResearcher bool `description:"是否为研究员"` HasVariety bool `description:"是否绑定品种"` NewForm bool `description:"是否可新建本周填报"` } // AssessmentFormResultStatisticReq 填报单结果统计请求 type AssessmentFormResultStatisticReq struct { AssessmentResearcherIds string `form:"AssessmentResearcherIds" description:"研究员IDs"` StartTime string `form:"StartTime" description:"开始时间"` EndTime string `form:"EndTime" description:"结束时间"` } // AssessmentFormResultStatisticItem 填报单结果统计 type AssessmentFormResultStatisticItem struct { ResearcherId int `description:"研究员ID"` ResearcherAdminId int `description:"研究员用户ID"` ResearcherName string `description:"研究员姓名"` VarietyId int `description:"品种ID"` VarietyCode string `description:"品种编码"` VarietyName string `description:"品种名称"` MonthlyTrendAccuracy float64 `description:"月度趋势正确率"` WeeklyWarningAccuracy float64 `description:"周度预警正确率"` TotalAccuracyA float64 `description:"综合正确率1"` TotalAccuracyB float64 `description:"综合正确率2"` } func (m *AssessmentForm) UpdateResearcherName(researcherId int, researcherName string) (err error) { sql := fmt.Sprintf(`UPDATE %s SET %s = ? WHERE %s = ?`, m.TableName(), m.Cols().ResearcherName, m.Cols().ResearcherId) err = global.DEFAULT_DB.Exec(sql, researcherName, researcherId).Error return }