|
@@ -0,0 +1,1074 @@
|
|
|
+package assessment
|
|
|
+
|
|
|
+import (
|
|
|
+ "encoding/json"
|
|
|
+ "eta/eta_api/controllers"
|
|
|
+ "eta/eta_api/models"
|
|
|
+ "eta/eta_api/services"
|
|
|
+ "eta/eta_api/utils"
|
|
|
+ "fmt"
|
|
|
+ "github.com/rdlucklib/rdluck_tools/paging"
|
|
|
+ "strconv"
|
|
|
+ "strings"
|
|
|
+ "time"
|
|
|
+)
|
|
|
+
|
|
|
+// AssessmentFormController 考核填报
|
|
|
+type AssessmentFormController struct {
|
|
|
+ controllers.BaseAuthController
|
|
|
+}
|
|
|
+
|
|
|
+// CheckAdd
|
|
|
+// @Title 新建填报权限
|
|
|
+// @Description 新建填报权限
|
|
|
+// @Success 200 string "获取成功"
|
|
|
+// @router /form/check_add [get]
|
|
|
+func (this *AssessmentFormController) CheckAdd() {
|
|
|
+ br := new(models.BaseResponse).Init()
|
|
|
+ defer func() {
|
|
|
+ if br.ErrMsg == "" {
|
|
|
+ br.IsSendEmail = false
|
|
|
+ }
|
|
|
+ this.Data["json"] = br
|
|
|
+ this.ServeJSON()
|
|
|
+ }()
|
|
|
+ sysUser := this.SysUser
|
|
|
+ if sysUser == nil {
|
|
|
+ br.Msg = "请登录"
|
|
|
+ br.ErrMsg = "请登录,SysUser Is Empty"
|
|
|
+ br.Ret = 408
|
|
|
+ return
|
|
|
+ }
|
|
|
+ resp := new(models.AssessmentFormCheckAddResp)
|
|
|
+
|
|
|
+ // 校验研究员身份,非研究员无权新增
|
|
|
+ var researcherId int
|
|
|
+ {
|
|
|
+ researcherOb := new(models.AssessmentResearcher)
|
|
|
+ cond := fmt.Sprintf(` AND %s = ? AND %s = ?`, researcherOb.Cols().AdminId, researcherOb.Cols().Enabled)
|
|
|
+ pars := make([]interface{}, 0)
|
|
|
+ pars = append(pars, sysUser.AdminId, models.AssessmentResearcherEnabled)
|
|
|
+ item, e := researcherOb.GetItemByCondition(cond, pars, "")
|
|
|
+ if e != nil && !utils.IsErrNoRow(e) {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.ErrMsg = "获取研究员失败"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if item == nil || item.AssessmentResearcherId <= 0 {
|
|
|
+ br.Data = resp
|
|
|
+ br.Ret = 200
|
|
|
+ br.Success = true
|
|
|
+ br.Msg = "获取成功"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ researcherId = item.AssessmentResearcherId
|
|
|
+ resp.IsResearcher = true
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取关联品种,无关联品种无权新增
|
|
|
+ {
|
|
|
+ mappingOb := new(models.AssessmentResearcherVarietyMapping)
|
|
|
+ cond := fmt.Sprintf(` AND %s = ?`, mappingOb.Cols().AssessmentResearcherId)
|
|
|
+ pars := make([]interface{}, 0)
|
|
|
+ pars = append(pars, researcherId)
|
|
|
+ mappings, e := mappingOb.GetItemsByCondition(cond, pars, []string{}, "")
|
|
|
+ if e != nil {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.ErrMsg = fmt.Sprintf("获取研究员品种关联失败, %v", e)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if len(mappings) == 0 {
|
|
|
+ br.Data = resp
|
|
|
+ br.Ret = 200
|
|
|
+ br.Success = true
|
|
|
+ br.Msg = "获取成功"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ resp.HasVariety = true
|
|
|
+ }
|
|
|
+
|
|
|
+ // 校验本周是否已填报过
|
|
|
+ formOb := new(models.AssessmentForm)
|
|
|
+ {
|
|
|
+ weekStart, weekEnd := utils.GetWeekRange(time.Now().Local())
|
|
|
+ cond := fmt.Sprintf(` AND %s = ? AND (%s BETWEEN ? AND ?)`, formOb.Cols().ResearcherId, formOb.Cols().CreateTime)
|
|
|
+ pars := make([]interface{}, 0)
|
|
|
+ pars = append(pars, researcherId, weekStart.Format(utils.FormatDateTime), weekEnd.Format(utils.FormatDateTime))
|
|
|
+ count, e := formOb.GetCountByCondition(cond, pars)
|
|
|
+ if e != nil {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.ErrMsg = fmt.Sprintf("获取本周填报单总数失败, %v", e)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if count == 0 {
|
|
|
+ resp.NewForm = true
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ br.Data = resp
|
|
|
+ br.Ret = 200
|
|
|
+ br.Success = true
|
|
|
+ br.Msg = "获取成功"
|
|
|
+}
|
|
|
+
|
|
|
+// WeekBase
|
|
|
+// @Title 获取本周填报信息
|
|
|
+// @Description 获取本周填报信息
|
|
|
+// @Success 200 string "获取成功"
|
|
|
+// @router /form/week_base [get]
|
|
|
+func (this *AssessmentFormController) WeekBase() {
|
|
|
+ br := new(models.BaseResponse).Init()
|
|
|
+ defer func() {
|
|
|
+ if br.ErrMsg == "" {
|
|
|
+ br.IsSendEmail = false
|
|
|
+ }
|
|
|
+ this.Data["json"] = br
|
|
|
+ this.ServeJSON()
|
|
|
+ }()
|
|
|
+ sysUser := this.SysUser
|
|
|
+ if sysUser == nil {
|
|
|
+ br.Msg = "请登录"
|
|
|
+ br.ErrMsg = "请登录,SysUser Is Empty"
|
|
|
+ br.Ret = 408
|
|
|
+ return
|
|
|
+ }
|
|
|
+ resp := new(models.AssessmentFormViewResp)
|
|
|
+
|
|
|
+ // 校验研究员身份
|
|
|
+ researcher := new(models.AssessmentResearcher)
|
|
|
+ {
|
|
|
+ researcherOb := new(models.AssessmentResearcher)
|
|
|
+ cond := fmt.Sprintf(` AND %s = ? AND %s = ?`, researcherOb.Cols().AdminId, researcherOb.Cols().Enabled)
|
|
|
+ pars := make([]interface{}, 0)
|
|
|
+ pars = append(pars, sysUser.AdminId, models.AssessmentResearcherEnabled)
|
|
|
+ item, e := researcherOb.GetItemByCondition(cond, pars, "")
|
|
|
+ if e != nil {
|
|
|
+ if utils.IsErrNoRow(e) {
|
|
|
+ br.Msg = "您不是研究员,不可填报观点"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.ErrMsg = "获取研究员失败"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if item == nil || item.AssessmentResearcherId <= 0 {
|
|
|
+ br.Msg = "您不是研究员,不可填报观点"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ researcher = item
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取关联品种
|
|
|
+ varietyOb := new(models.AssessmentVariety)
|
|
|
+ varietyMatch := make(map[int]*models.AssessmentVariety)
|
|
|
+ {
|
|
|
+ varieties, e := varietyOb.GetItemsByCondition(``, make([]interface{}, 0), []string{}, "")
|
|
|
+ if e != nil {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.ErrMsg = fmt.Sprintf("获取品种列表失败, %v", e)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ for _, v := range varieties {
|
|
|
+ varietyMatch[v.AssessmentVarietyId] = v
|
|
|
+ }
|
|
|
+ }
|
|
|
+ varietyMappings := make([]*models.AssessmentResearcherVarietyMapping, 0)
|
|
|
+ {
|
|
|
+ mappingOb := new(models.AssessmentResearcherVarietyMapping)
|
|
|
+ cond := fmt.Sprintf(` AND %s = ?`, mappingOb.Cols().AssessmentResearcherId)
|
|
|
+ pars := make([]interface{}, 0)
|
|
|
+ pars = append(pars, researcher.AssessmentResearcherId)
|
|
|
+ mappings, e := mappingOb.GetItemsByCondition(cond, pars, []string{}, "")
|
|
|
+ if e != nil {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.ErrMsg = fmt.Sprintf("获取研究员品种关联失败, %v", e)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ varietyMappings = mappings
|
|
|
+ }
|
|
|
+ if len(varietyMappings) == 0 {
|
|
|
+ br.Msg = "您无关联品种,不可填报观点"
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 校验本周是否已填报过
|
|
|
+ formOb := new(models.AssessmentForm)
|
|
|
+ {
|
|
|
+ weekStart, weekEnd := utils.GetWeekRange(time.Now().Local())
|
|
|
+ cond := fmt.Sprintf(` AND %s = ? AND (%s BETWEEN ? AND ?)`, formOb.Cols().ResearcherId, formOb.Cols().CreateTime)
|
|
|
+ pars := make([]interface{}, 0)
|
|
|
+ pars = append(pars, researcher.AssessmentResearcherId, weekStart.Format(utils.FormatDateTime), weekEnd.Format(utils.FormatDateTime))
|
|
|
+ count, e := formOb.GetCountByCondition(cond, pars)
|
|
|
+ if e != nil {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.ErrMsg = fmt.Sprintf("获取本周填报单总数失败, %v", e)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if count > 0 {
|
|
|
+ br.Msg = "本周已填报,请勿重复填报"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取单号、周度、价格基准日期
|
|
|
+ formCode, e := services.GenerateAssessmentFormCode()
|
|
|
+ if e != nil {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.ErrMsg = fmt.Sprintf("获取填报单单号失败, %v", e)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ weekTime, _, friday := services.GetAssessmentWeekAndFriday(time.Now().Local())
|
|
|
+
|
|
|
+ resp.List = make([]*models.AssessmentFormDetail, 0)
|
|
|
+ for _, v := range varietyMappings {
|
|
|
+ variety := varietyMatch[v.VarietyId]
|
|
|
+ if variety == nil {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ if variety.Enabled != models.AssessmentVarietyEnabled {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ t := new(models.AssessmentFormDetail)
|
|
|
+ t.FormCode = formCode
|
|
|
+ t.ResearcherId = researcher.AssessmentResearcherId
|
|
|
+ t.ResearcherAdminId = researcher.AdminId
|
|
|
+ t.ResearcherName = researcher.RealName
|
|
|
+ t.VarietyId = variety.AssessmentVarietyId
|
|
|
+ t.VarietyCode = variety.VarietyCode
|
|
|
+ t.VarietyName = variety.VarietyName
|
|
|
+ t.WeekTime = weekTime
|
|
|
+ t.BaseDate = utils.TimeTransferString(utils.FormatDate, friday)
|
|
|
+ resp.List = append(resp.List, t)
|
|
|
+ }
|
|
|
+
|
|
|
+ br.Data = resp
|
|
|
+ br.Ret = 200
|
|
|
+ br.Success = true
|
|
|
+ br.Msg = "获取成功"
|
|
|
+}
|
|
|
+
|
|
|
+// Detail
|
|
|
+// @Title 填报单详情
|
|
|
+// @Description 填报单详情
|
|
|
+// @Param FormCode query string true "填报单号"
|
|
|
+// @Success 200 string "获取成功"
|
|
|
+// @router /form/detail [get]
|
|
|
+func (this *AssessmentFormController) Detail() {
|
|
|
+ br := new(models.BaseResponse).Init()
|
|
|
+ defer func() {
|
|
|
+ if br.ErrMsg == "" {
|
|
|
+ br.IsSendEmail = false
|
|
|
+ }
|
|
|
+ this.Data["json"] = br
|
|
|
+ this.ServeJSON()
|
|
|
+ }()
|
|
|
+ sysUser := this.SysUser
|
|
|
+ if sysUser == nil {
|
|
|
+ br.Msg = "请登录"
|
|
|
+ br.ErrMsg = "请登录,SysUser Is Empty"
|
|
|
+ br.Ret = 408
|
|
|
+ return
|
|
|
+ }
|
|
|
+ formCode := this.GetString("FormCode")
|
|
|
+ if formCode == "" {
|
|
|
+ br.Msg = "参数有误"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ resp := new(models.AssessmentFormViewResp)
|
|
|
+
|
|
|
+ // 根据单号获取填报单
|
|
|
+ formOb := new(models.AssessmentForm)
|
|
|
+ cond := fmt.Sprintf(` AND %s = ?`, formOb.Cols().FormCode)
|
|
|
+ pars := make([]interface{}, 0)
|
|
|
+ pars = append(pars, formCode)
|
|
|
+ list, e := formOb.GetItemsByCondition(cond, pars, []string{}, "")
|
|
|
+ if e != nil {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.ErrMsg = fmt.Sprintf("获取本周填报单总数失败, %v", e)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ resp.List = make([]*models.AssessmentFormDetail, 0)
|
|
|
+ for _, v := range list {
|
|
|
+ resp.List = append(resp.List, v.Format2Detail())
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取品种价格详情及观点评价
|
|
|
+ varietyPrice, forecastComment, e := services.GetVarietyPriceAndForecastComment(list)
|
|
|
+ if e != nil {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.ErrMsg = fmt.Sprintf("获取品种价格详情及观点评价失败, %v", e)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ resp.VarietyPrice = varietyPrice
|
|
|
+ resp.ForecastComment = forecastComment
|
|
|
+
|
|
|
+ br.Data = resp
|
|
|
+ br.Ret = 200
|
|
|
+ br.Success = true
|
|
|
+ br.Msg = "获取成功"
|
|
|
+}
|
|
|
+
|
|
|
+// PageList
|
|
|
+// @Title 填报单列表-分页
|
|
|
+// @Description 填报单列表-分页
|
|
|
+// @Param request body models.AssessmentFormPageListReq true "type json string"
|
|
|
+// @Success 200 string "获取成功"
|
|
|
+// @router /form/page_list [get]
|
|
|
+func (this *AssessmentFormController) PageList() {
|
|
|
+ br := new(models.BaseResponse).Init()
|
|
|
+ defer func() {
|
|
|
+ if br.ErrMsg == "" {
|
|
|
+ br.IsSendEmail = false
|
|
|
+ }
|
|
|
+ this.Data["json"] = br
|
|
|
+ this.ServeJSON()
|
|
|
+ }()
|
|
|
+ sysUser := this.SysUser
|
|
|
+ if sysUser == nil {
|
|
|
+ br.Msg = "请登录"
|
|
|
+ br.ErrMsg = "请登录,SysUser Is Empty"
|
|
|
+ br.Ret = 408
|
|
|
+ return
|
|
|
+ }
|
|
|
+ params := new(models.AssessmentFormPageListReq)
|
|
|
+ if e := this.ParseForm(params); e != nil {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.ErrMsg = "参数解析失败, Err: " + e.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ resp := new(models.AssessmentFormPageListResp)
|
|
|
+ resp.List = make([]*models.AssessmentFormDetail, 0)
|
|
|
+
|
|
|
+ // 分页
|
|
|
+ var startSize int
|
|
|
+ if params.PageSize <= 0 {
|
|
|
+ params.PageSize = utils.PageSize20
|
|
|
+ }
|
|
|
+ if params.CurrentIndex <= 0 {
|
|
|
+ params.CurrentIndex = 1
|
|
|
+ }
|
|
|
+ startSize = utils.StartIndex(params.CurrentIndex, params.PageSize)
|
|
|
+
|
|
|
+ // 当前用户是否为研究员
|
|
|
+ researcher := new(models.AssessmentResearcher)
|
|
|
+ {
|
|
|
+ researcherOb := new(models.AssessmentResearcher)
|
|
|
+ cond := fmt.Sprintf(` AND %s = ? AND %s = ?`, researcherOb.Cols().AdminId, researcherOb.Cols().Enabled)
|
|
|
+ pars := make([]interface{}, 0)
|
|
|
+ pars = append(pars, sysUser.AdminId, models.AssessmentResearcherEnabled)
|
|
|
+ item, e := researcherOb.GetItemByCondition(cond, pars, "")
|
|
|
+ if e != nil && !utils.IsErrNoRow(e) {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.ErrMsg = fmt.Sprintf("获取研究员失败, %v", e)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if item != nil && item.AssessmentResearcherId > 0 {
|
|
|
+ researcher = item
|
|
|
+ }
|
|
|
+ }
|
|
|
+ var authResearcherIds []int
|
|
|
+
|
|
|
+ // 筛选项
|
|
|
+ formOb := new(models.AssessmentForm)
|
|
|
+ condList := ``
|
|
|
+ parsList := make([]interface{}, 0)
|
|
|
+ {
|
|
|
+ // 可查看的其他研究员的填报
|
|
|
+ var researcherIds []int
|
|
|
+ if researcher != nil && researcher.AssessmentResearcherId > 0 {
|
|
|
+ researcherIds = append(researcherIds, researcher.AssessmentResearcherId)
|
|
|
+ authResearcherIds = append(authResearcherIds, researcher.AssessmentResearcherId)
|
|
|
+ }
|
|
|
+ mappingOb := new(models.AssessmentResearcherAdminMapping)
|
|
|
+ mappingCond := fmt.Sprintf(` AND %s = ?`, mappingOb.Cols().AuthAdminId)
|
|
|
+ mappingPars := make([]interface{}, 0)
|
|
|
+ mappingPars = append(mappingPars, sysUser.AdminId)
|
|
|
+ mappings, e := mappingOb.GetItemsByCondition(mappingCond, mappingPars, []string{}, "")
|
|
|
+ if e != nil {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.ErrMsg = fmt.Sprintf("获取研究员权限失败, %v", e)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ for _, v := range mappings {
|
|
|
+ if v.AuthType == models.AssessmentResearcherAdminAuthTypeView {
|
|
|
+ researcherIds = append(researcherIds, v.AssessmentResearcherId)
|
|
|
+ authResearcherIds = append(authResearcherIds, v.AssessmentResearcherId)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 研究员筛选项,与有权限的取交集
|
|
|
+ if params.AssessmentResearcherIds != "" {
|
|
|
+ var parResearcherIds []int
|
|
|
+ arr := strings.Split(params.AssessmentResearcherIds, ",")
|
|
|
+ for _, v := range arr {
|
|
|
+ i, _ := strconv.Atoi(v)
|
|
|
+ if i > 0 {
|
|
|
+ parResearcherIds = append(parResearcherIds, i)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ researcherIds = utils.IntersectInt(researcherIds, parResearcherIds)
|
|
|
+ }
|
|
|
+ if len(researcherIds) == 0 {
|
|
|
+ resp.Paging = paging.GetPaging(params.CurrentIndex, params.PageSize, 0)
|
|
|
+ br.Data = resp
|
|
|
+ br.Ret = 200
|
|
|
+ br.Success = true
|
|
|
+ br.Msg = "获取成功"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ condList += fmt.Sprintf(` AND %s IN (?)`, formOb.Cols().ResearcherId)
|
|
|
+ parsList = append(parsList, researcherIds)
|
|
|
+
|
|
|
+ // 品种
|
|
|
+ if params.AssessmentVarietyIds != "" {
|
|
|
+ var varietyIds []int
|
|
|
+ arr := strings.Split(params.AssessmentVarietyIds, ",")
|
|
|
+ for _, v := range arr {
|
|
|
+ i, _ := strconv.Atoi(v)
|
|
|
+ if i > 0 {
|
|
|
+ varietyIds = append(varietyIds, i)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if len(varietyIds) == 0 {
|
|
|
+ resp.Paging = paging.GetPaging(params.CurrentIndex, params.PageSize, 0)
|
|
|
+ br.Data = resp
|
|
|
+ br.Ret = 200
|
|
|
+ br.Success = true
|
|
|
+ br.Msg = "获取成功"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ condList += fmt.Sprintf(` AND %s IN (?)`, formOb.Cols().VarietyId)
|
|
|
+ parsList = append(parsList, varietyIds)
|
|
|
+ }
|
|
|
+
|
|
|
+ // 基准日期筛选
|
|
|
+ params.StartTime = strings.TrimSpace(params.StartTime)
|
|
|
+ params.EndTime = strings.TrimSpace(params.EndTime)
|
|
|
+ if params.StartTime != "" && params.EndTime != "" {
|
|
|
+ _, e = time.ParseInLocation(utils.FormatDate, params.StartTime, time.Local)
|
|
|
+ if e != nil {
|
|
|
+ br.Msg = "开始日期格式有误"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ _, e = time.ParseInLocation(utils.FormatDate, params.EndTime, time.Local)
|
|
|
+ if e != nil {
|
|
|
+ br.Msg = "结束日期格式有误"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ st := fmt.Sprintf("%s 00:00:00", params.StartTime)
|
|
|
+ ed := fmt.Sprintf("%s 23:59:59", params.EndTime)
|
|
|
+ condList += fmt.Sprintf(` AND (%s BETWEEN ? AND ?)`, formOb.Cols().BaseDate)
|
|
|
+ parsList = append(parsList, st, ed)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 列表
|
|
|
+ total, e := formOb.GetCountByCondition(condList, parsList)
|
|
|
+ if e != nil {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.ErrMsg = fmt.Sprintf("获取研究员列表总数失败, %v", e)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ orderRule := fmt.Sprintf(`%s ASC, %s DESC, %s DESC`, formOb.Cols().Status, formOb.Cols().CreateTime, formOb.Cols().SubmitTime) // 排序规则:未提交在最前面,然后按提交时间降序
|
|
|
+ list, e := formOb.GetPageItemsByCondition(condList, parsList, []string{}, orderRule, startSize, params.PageSize)
|
|
|
+ if e != nil {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.ErrMsg = fmt.Sprintf("获取研究员失败, %v", e)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if total == 0 || len(list) == 0 {
|
|
|
+ resp.Paging = paging.GetPaging(params.CurrentIndex, params.PageSize, 0)
|
|
|
+ br.Data = resp
|
|
|
+ br.Ret = 200
|
|
|
+ br.Success = true
|
|
|
+ br.Msg = "获取成功"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ for _, v := range list {
|
|
|
+ d := v.Format2Detail()
|
|
|
+ d.Button = services.CheckAssessmentFormButton(v, sysUser.AdminId, authResearcherIds)
|
|
|
+ resp.List = append(resp.List, d)
|
|
|
+ }
|
|
|
+
|
|
|
+ resp.Paging = paging.GetPaging(params.CurrentIndex, params.PageSize, total)
|
|
|
+ br.Data = resp
|
|
|
+ br.Ret = 200
|
|
|
+ br.Success = true
|
|
|
+ br.Msg = "获取成功"
|
|
|
+}
|
|
|
+
|
|
|
+// Save
|
|
|
+// @Title 保存填报单
|
|
|
+// @Description 保存填报单
|
|
|
+// @Param request body models.AssessmentFormSaveReq true "type json string"
|
|
|
+// @Success 200 string "操作成功"
|
|
|
+// @router /form/save [post]
|
|
|
+func (this *AssessmentFormController) Save() {
|
|
|
+ br := new(models.BaseResponse).Init()
|
|
|
+ defer func() {
|
|
|
+ if br.ErrMsg == "" {
|
|
|
+ br.IsSendEmail = false
|
|
|
+ }
|
|
|
+ this.Data["json"] = br
|
|
|
+ this.ServeJSON()
|
|
|
+ }()
|
|
|
+ sysUser := this.SysUser
|
|
|
+ if sysUser == nil {
|
|
|
+ br.Msg = "请登录"
|
|
|
+ br.ErrMsg = "请登录,SysUser Is Empty"
|
|
|
+ br.Ret = 408
|
|
|
+ return
|
|
|
+ }
|
|
|
+ var req models.AssessmentFormSaveReq
|
|
|
+ if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
|
|
|
+ br.Msg = "参数有误"
|
|
|
+ br.ErrMsg = fmt.Sprintf("参数解析失败, %v", e)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if len(req.List) == 0 {
|
|
|
+ br.Msg = "填报单品种有误"
|
|
|
+ br.ErrMsg = "参数异常, 填报单品种数有误"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ formOb := new(models.AssessmentForm)
|
|
|
+ firstFormId := req.List[0].AssessmentFormId
|
|
|
+ status := req.List[0].Status
|
|
|
+ researcherId := req.List[0].ResearcherId
|
|
|
+
|
|
|
+ // 如果是新增那么,校验本周是否已填报过
|
|
|
+ if firstFormId <= 0 {
|
|
|
+ weekStart, weekEnd := utils.GetWeekRange(time.Now().Local())
|
|
|
+ cond := fmt.Sprintf(` AND %s = ? AND (%s BETWEEN ? AND ?)`, formOb.Cols().ResearcherId, formOb.Cols().CreateTime)
|
|
|
+ pars := make([]interface{}, 0)
|
|
|
+ pars = append(pars, researcherId, weekStart.Format(utils.FormatDateTime), weekEnd.Format(utils.FormatDateTime))
|
|
|
+ count, e := formOb.GetCountByCondition(cond, pars)
|
|
|
+ if e != nil {
|
|
|
+ br.Msg = "操作失败"
|
|
|
+ br.ErrMsg = fmt.Sprintf("获取本周填报单总数失败, %v", e)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if count > 0 {
|
|
|
+ br.Msg = "本周已填报,请勿重复填报"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ insertForms, updateForms := make([]*models.AssessmentForm, 0), make([]*models.AssessmentForm, 0)
|
|
|
+ for _, v := range req.List {
|
|
|
+ if v.FormCode == "" {
|
|
|
+ br.Msg = "单号异常"
|
|
|
+ br.ErrMsg = "参数异常:单号"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if v.ResearcherId <= 0 {
|
|
|
+ br.Msg = "研究员异常"
|
|
|
+ br.ErrMsg = "参数异常:研究员ID"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if v.VarietyId <= 0 {
|
|
|
+ br.Msg = "品种异常"
|
|
|
+ br.ErrMsg = "参数异常:品种ID"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if v.WeekTime == "" {
|
|
|
+ br.Msg = "周度异常"
|
|
|
+ br.ErrMsg = "参数异常:周度"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if v.BaseDate == "" {
|
|
|
+ br.Msg = "价格基准日期异常"
|
|
|
+ br.ErrMsg = "参数异常:价格基准日期"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ baseDate, e := time.ParseInLocation(utils.FormatDate, v.BaseDate, time.Local)
|
|
|
+ if e != nil {
|
|
|
+ br.Msg = "价格基准日期格式异常"
|
|
|
+ br.ErrMsg = fmt.Sprintf("价格基准日期格式异常, %s", v.BaseDate)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ weekStart, weekEnd := utils.GetWeekRange(baseDate)
|
|
|
+
|
|
|
+ fm := new(models.AssessmentForm)
|
|
|
+ fm.AssessmentFormId = v.AssessmentFormId
|
|
|
+ fm.FormCode = v.FormCode
|
|
|
+ fm.ResearcherId = v.ResearcherId
|
|
|
+ fm.ResearcherAdminId = v.ResearcherAdminId
|
|
|
+ fm.ResearcherName = v.ResearcherName
|
|
|
+ fm.VarietyId = v.VarietyId
|
|
|
+ fm.VarietyCode = v.VarietyCode
|
|
|
+ fm.VarietyName = v.VarietyName
|
|
|
+ fm.WeekTime = v.WeekTime
|
|
|
+ fm.WeekStart = weekStart
|
|
|
+ fm.WeekEnd = weekEnd
|
|
|
+ fm.BaseDate = baseDate
|
|
|
+ fm.Status = status
|
|
|
+ fm.MonthlyPriceForecast = v.MonthlyPriceForecast
|
|
|
+ fm.WeeklyUpForecast = v.WeeklyUpForecast
|
|
|
+ fm.WeeklyDownForecast = v.WeeklyDownForecast
|
|
|
+ fm.ModifyTime = time.Now().Local()
|
|
|
+
|
|
|
+ // 提交时才校验必填项
|
|
|
+ if status == models.AssessmentFormStatusSubmitted {
|
|
|
+ if v.MonthlyPriceForecast == "" {
|
|
|
+ br.Msg = "请选择月度涨跌"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if v.WeeklyUpForecast == "" {
|
|
|
+ br.Msg = "请选择周度上行风险"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if v.WeeklyDownForecast == "" {
|
|
|
+ br.Msg = "请选择周度下行风险"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 当周填报单据如果超过周日未提交则不可再提交,但是可以编辑
|
|
|
+ if time.Now().After(weekEnd) {
|
|
|
+ br.Msg = fmt.Sprintf("该单据已超过最晚提交时间: %s,不允许提交", weekEnd.Format(utils.FormatDateTime))
|
|
|
+ return
|
|
|
+ }
|
|
|
+ fm.SubmitTime = time.Now().Local()
|
|
|
+ }
|
|
|
+ if firstFormId > 0 {
|
|
|
+ updateForms = append(updateForms, fm)
|
|
|
+ } else {
|
|
|
+ fm.CreateTime = time.Now().Local()
|
|
|
+ insertForms = append(insertForms, fm)
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 首行表单ID大于0为更新
|
|
|
+ if firstFormId > 0 && len(updateForms) > 0 {
|
|
|
+ updateCols := []string{formOb.Cols().MonthlyPriceForecast, formOb.Cols().WeeklyUpForecast, formOb.Cols().WeeklyDownForecast, formOb.Cols().ModifyTime}
|
|
|
+ if status == models.AssessmentFormStatusSubmitted {
|
|
|
+ updateCols = append(updateCols, formOb.Cols().Status, formOb.Cols().SubmitTime)
|
|
|
+ }
|
|
|
+ for _, v := range updateForms {
|
|
|
+ if e := v.Update(updateCols); e != nil {
|
|
|
+ br.Msg = "操作失败"
|
|
|
+ br.ErrMsg = fmt.Sprintf("更新填报单失败, %v", e)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 新增
|
|
|
+ if firstFormId <= 0 && len(insertForms) > 0 {
|
|
|
+ if e := formOb.CreateMulti(insertForms); e != nil {
|
|
|
+ br.Msg = "操作失败"
|
|
|
+ br.ErrMsg = fmt.Sprintf("批量新增填报单失败, %v", e)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ br.Ret = 200
|
|
|
+ br.Success = true
|
|
|
+ br.Msg = "操作成功"
|
|
|
+}
|
|
|
+
|
|
|
+// Submit
|
|
|
+// @Title 提交填报单
|
|
|
+// @Description 提交填报单
|
|
|
+// @Param request body models.AssessmentFormSubmitReq true "type json string"
|
|
|
+// @Success 200 string "操作成功"
|
|
|
+// @router /form/submit [post]
|
|
|
+func (this *AssessmentFormController) Submit() {
|
|
|
+ br := new(models.BaseResponse).Init()
|
|
|
+ defer func() {
|
|
|
+ if br.ErrMsg == "" {
|
|
|
+ br.IsSendEmail = false
|
|
|
+ }
|
|
|
+ this.Data["json"] = br
|
|
|
+ this.ServeJSON()
|
|
|
+ }()
|
|
|
+ sysUser := this.SysUser
|
|
|
+ if sysUser == nil {
|
|
|
+ br.Msg = "请登录"
|
|
|
+ br.ErrMsg = "请登录,SysUser Is Empty"
|
|
|
+ br.Ret = 408
|
|
|
+ return
|
|
|
+ }
|
|
|
+ var req models.AssessmentFormSubmitReq
|
|
|
+ if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
|
|
|
+ br.Msg = "参数有误"
|
|
|
+ br.ErrMsg = fmt.Sprintf("参数解析失败, %v", e)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ req.FormCode = strings.TrimSpace(req.FormCode)
|
|
|
+ if req.FormCode == "" {
|
|
|
+ br.Msg = "参数有误"
|
|
|
+ br.ErrMsg = "参数有误, FormCode"
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取单号关联的填报单
|
|
|
+ formOb := new(models.AssessmentForm)
|
|
|
+ cond := fmt.Sprintf(` AND %s = ?`, formOb.Cols().FormCode)
|
|
|
+ pars := make([]interface{}, 0)
|
|
|
+ pars = append(pars, req.FormCode)
|
|
|
+ list, e := formOb.GetItemsByCondition(cond, pars, []string{}, "")
|
|
|
+ if e != nil {
|
|
|
+ br.Msg = "操作失败"
|
|
|
+ br.ErrMsg = fmt.Sprintf("获取单号关联填报单失败, %v", e)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if len(list) == 0 {
|
|
|
+ br.Msg = "填报单有误"
|
|
|
+ br.ErrMsg = "单号无关联填报单"
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 提交校验
|
|
|
+ adminId := list[0].ResearcherAdminId
|
|
|
+ if sysUser.AdminId != adminId {
|
|
|
+ br.Msg = "无权操作"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ status := list[0].Status
|
|
|
+ if status == models.AssessmentFormStatusSubmitted {
|
|
|
+ br.Msg = "该单据已提交,请勿重复提交"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ weekEnd := list[0].WeekEnd
|
|
|
+ submitOk := !weekEnd.IsZero() && time.Now().Local().Before(weekEnd)
|
|
|
+ if !submitOk {
|
|
|
+ br.Msg = fmt.Sprintf("该单据已超过最晚提交时间: %s,不允许提交", weekEnd.Format(utils.FormatDateTime))
|
|
|
+ return
|
|
|
+ }
|
|
|
+ for _, v := range list {
|
|
|
+ if v.MonthlyPriceForecast == "" {
|
|
|
+ br.Msg = "请选择月度涨跌"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if v.WeeklyUpForecast == "" {
|
|
|
+ br.Msg = "请选择周度上行风险"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if v.WeeklyDownForecast == "" {
|
|
|
+ br.Msg = "请选择周度下行风险"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 更新状态
|
|
|
+ updateCols := []string{formOb.Cols().Status, formOb.Cols().SubmitTime, formOb.Cols().ModifyTime}
|
|
|
+ for _, v := range list {
|
|
|
+ v.Status = models.AssessmentFormStatusSubmitted
|
|
|
+ v.SubmitTime = time.Now().Local()
|
|
|
+ v.ModifyTime = time.Now().Local()
|
|
|
+ if e = v.Update(updateCols); e != nil {
|
|
|
+ br.Msg = "操作失败"
|
|
|
+ br.ErrMsg = fmt.Sprintf("更新填报单状态失败, %v", e)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ br.Ret = 200
|
|
|
+ br.Success = true
|
|
|
+ br.Msg = "操作成功"
|
|
|
+}
|
|
|
+
|
|
|
+// Cancel
|
|
|
+// @Title 撤销填报单
|
|
|
+// @Description 撤销填报单
|
|
|
+// @Param request body models.AssessmentFormCancelReq true "type json string"
|
|
|
+// @Success 200 string "操作成功"
|
|
|
+// @router /form/cancel [post]
|
|
|
+func (this *AssessmentFormController) Cancel() {
|
|
|
+ br := new(models.BaseResponse).Init()
|
|
|
+ defer func() {
|
|
|
+ if br.ErrMsg == "" {
|
|
|
+ br.IsSendEmail = false
|
|
|
+ }
|
|
|
+ this.Data["json"] = br
|
|
|
+ this.ServeJSON()
|
|
|
+ }()
|
|
|
+ sysUser := this.SysUser
|
|
|
+ if sysUser == nil {
|
|
|
+ br.Msg = "请登录"
|
|
|
+ br.ErrMsg = "请登录,SysUser Is Empty"
|
|
|
+ br.Ret = 408
|
|
|
+ return
|
|
|
+ }
|
|
|
+ var req models.AssessmentFormCancelReq
|
|
|
+ if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
|
|
|
+ br.Msg = "参数有误"
|
|
|
+ br.ErrMsg = fmt.Sprintf("参数解析失败, %v", e)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ req.FormCode = strings.TrimSpace(req.FormCode)
|
|
|
+ if req.FormCode == "" {
|
|
|
+ br.Msg = "参数有误"
|
|
|
+ br.ErrMsg = "参数有误, FormCode"
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取单号关联的填报单
|
|
|
+ formOb := new(models.AssessmentForm)
|
|
|
+ cond := fmt.Sprintf(` AND %s = ?`, formOb.Cols().FormCode)
|
|
|
+ pars := make([]interface{}, 0)
|
|
|
+ pars = append(pars, req.FormCode)
|
|
|
+ list, e := formOb.GetItemsByCondition(cond, pars, []string{}, "")
|
|
|
+ if e != nil {
|
|
|
+ br.Msg = "操作失败"
|
|
|
+ br.ErrMsg = fmt.Sprintf("获取单号关联填报单失败, %v", e)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if len(list) == 0 {
|
|
|
+ br.Msg = "填报单有误"
|
|
|
+ br.ErrMsg = "单号无关联填报单"
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 撤销校验
|
|
|
+ adminId := list[0].ResearcherAdminId
|
|
|
+ if sysUser.AdminId != adminId {
|
|
|
+ br.Msg = "无权操作"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ status := list[0].Status
|
|
|
+ if status == models.AssessmentFormStatusDraft {
|
|
|
+ br.Msg = "单据状态有误,请刷新页面"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ weekEnd := list[0].WeekEnd
|
|
|
+ cancelOk := !weekEnd.IsZero() && time.Now().Local().Before(weekEnd)
|
|
|
+ if !cancelOk {
|
|
|
+ br.Msg = fmt.Sprintf("该单据已超过最晚撤销时间: %s,不允许撤销", weekEnd.Format(utils.FormatDateTime))
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // TODO:这里象屿会有一个外部条件:当周周报未提交,暂不处理视作true
|
|
|
+
|
|
|
+ // 更新状态
|
|
|
+ updateCols := []string{formOb.Cols().Status, formOb.Cols().SubmitTime, formOb.Cols().ModifyTime}
|
|
|
+ for _, v := range list {
|
|
|
+ v.Status = models.AssessmentFormStatusDraft
|
|
|
+ v.SubmitTime = time.Time{}
|
|
|
+ v.ModifyTime = time.Now().Local()
|
|
|
+ if e = v.Update(updateCols); e != nil {
|
|
|
+ br.Msg = "操作失败"
|
|
|
+ br.ErrMsg = fmt.Sprintf("更新填报单状态失败, %v", e)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ br.Ret = 200
|
|
|
+ br.Success = true
|
|
|
+ br.Msg = "操作成功"
|
|
|
+}
|
|
|
+
|
|
|
+// Remove
|
|
|
+// @Title 删除填报单
|
|
|
+// @Description 删除填报单
|
|
|
+// @Param request body models.AssessmentFormRemoveReq true "type json string"
|
|
|
+// @Success 200 string "操作成功"
|
|
|
+// @router /form/remove [post]
|
|
|
+func (this *AssessmentFormController) Remove() {
|
|
|
+ br := new(models.BaseResponse).Init()
|
|
|
+ defer func() {
|
|
|
+ if br.ErrMsg == "" {
|
|
|
+ br.IsSendEmail = false
|
|
|
+ }
|
|
|
+ this.Data["json"] = br
|
|
|
+ this.ServeJSON()
|
|
|
+ }()
|
|
|
+ sysUser := this.SysUser
|
|
|
+ if sysUser == nil {
|
|
|
+ br.Msg = "请登录"
|
|
|
+ br.ErrMsg = "请登录,SysUser Is Empty"
|
|
|
+ br.Ret = 408
|
|
|
+ return
|
|
|
+ }
|
|
|
+ var req models.AssessmentFormRemoveReq
|
|
|
+ if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
|
|
|
+ br.Msg = "参数有误"
|
|
|
+ br.ErrMsg = fmt.Sprintf("参数解析失败, %v", e)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ req.FormCode = strings.TrimSpace(req.FormCode)
|
|
|
+ if req.FormCode == "" {
|
|
|
+ br.Msg = "参数有误"
|
|
|
+ br.ErrMsg = "参数有误, FormCode"
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取单号关联的填报单
|
|
|
+ formOb := new(models.AssessmentForm)
|
|
|
+ cond := fmt.Sprintf(` AND %s = ?`, formOb.Cols().FormCode)
|
|
|
+ pars := make([]interface{}, 0)
|
|
|
+ pars = append(pars, req.FormCode)
|
|
|
+ list, e := formOb.GetItemsByCondition(cond, pars, []string{}, "")
|
|
|
+ if e != nil {
|
|
|
+ br.Msg = "操作失败"
|
|
|
+ br.ErrMsg = fmt.Sprintf("获取单号关联填报单失败, %v", e)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if len(list) == 0 {
|
|
|
+ br.Ret = 200
|
|
|
+ br.Success = true
|
|
|
+ br.Msg = "操作成功"
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 撤销校验
|
|
|
+ adminId := list[0].ResearcherAdminId
|
|
|
+ if sysUser.AdminId != adminId {
|
|
|
+ br.Msg = "无权操作"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ status := list[0].Status
|
|
|
+ if status != models.AssessmentFormStatusDraft {
|
|
|
+ br.Msg = "单据状态有误,请刷新页面"
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 删除填报单
|
|
|
+ cond = fmt.Sprintf(`%s = ?`, formOb.Cols().FormCode)
|
|
|
+ if e = formOb.RemoveByCondition(cond, pars); e != nil {
|
|
|
+ br.Msg = "操作失败"
|
|
|
+ br.ErrMsg = fmt.Sprintf("批量删除填报单失败, %v", e)
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ br.Ret = 200
|
|
|
+ br.Success = true
|
|
|
+ br.Msg = "操作成功"
|
|
|
+}
|
|
|
+
|
|
|
+// ResultStatistic
|
|
|
+// @Title 结果统计
|
|
|
+// @Description 结果统计
|
|
|
+// @Param request body models.AssessmentFormResultStatisticReq true "type json string"
|
|
|
+// @Success 200 string "获取成功"
|
|
|
+// @router /form/result_statistic [get]
|
|
|
+func (this *AssessmentFormController) ResultStatistic() {
|
|
|
+ br := new(models.BaseResponse).Init()
|
|
|
+ defer func() {
|
|
|
+ if br.ErrMsg == "" {
|
|
|
+ br.IsSendEmail = false
|
|
|
+ }
|
|
|
+ this.Data["json"] = br
|
|
|
+ this.ServeJSON()
|
|
|
+ }()
|
|
|
+ sysUser := this.SysUser
|
|
|
+ if sysUser == nil {
|
|
|
+ br.Msg = "请登录"
|
|
|
+ br.ErrMsg = "请登录,SysUser Is Empty"
|
|
|
+ br.Ret = 408
|
|
|
+ return
|
|
|
+ }
|
|
|
+ params := new(models.AssessmentFormResultStatisticReq)
|
|
|
+ if e := this.ParseForm(params); e != nil {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.ErrMsg = "参数解析失败, Err: " + e.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ params.AssessmentResearcherIds = strings.TrimSpace(params.AssessmentResearcherIds)
|
|
|
+ if params.AssessmentResearcherIds == "" {
|
|
|
+ br.Msg = "请选择研究员"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ params.StartTime = strings.TrimSpace(params.StartTime)
|
|
|
+ params.EndTime = strings.TrimSpace(params.EndTime)
|
|
|
+ if params.StartTime == "" || params.EndTime == "" {
|
|
|
+ br.Msg = "请选择开始结束时间"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ _, e := time.Parse(utils.FormatDate, params.StartTime)
|
|
|
+ if e != nil {
|
|
|
+ br.Msg = "开始时间格式有误"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ endDate, e := time.Parse(utils.FormatDate, params.EndTime)
|
|
|
+ if e != nil {
|
|
|
+ br.Msg = "结束时间格式有误"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ resp := make([]*models.AssessmentFormResultStatisticItem, 0)
|
|
|
+
|
|
|
+ var researcherIds []int
|
|
|
+ arr := strings.Split(params.AssessmentResearcherIds, ",")
|
|
|
+ for _, v := range arr {
|
|
|
+ i, _ := strconv.Atoi(v)
|
|
|
+ if i > 0 {
|
|
|
+ researcherIds = append(researcherIds, i)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if len(researcherIds) == 0 {
|
|
|
+ br.Msg = "研究员有误"
|
|
|
+ br.ErrMsg = fmt.Sprintf("选择的研究员IDs有误, %s", params.AssessmentResearcherIds)
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取研究员在[开始日期至结束日期]的填报单
|
|
|
+ forms := make([]*models.AssessmentForm, 0)
|
|
|
+ {
|
|
|
+ formOb := new(models.AssessmentForm)
|
|
|
+ cond := fmt.Sprintf(` AND %s = ? AND %s IN (?) AND (%s BETWEEN ? AND ?)`, formOb.Cols().Status, formOb.Cols().ResearcherId, formOb.Cols().BaseDate)
|
|
|
+ pars := make([]interface{}, 0)
|
|
|
+ pars = append(pars, models.AssessmentFormStatusSubmitted, researcherIds, params.StartTime, endDate.Format(utils.FormatDate))
|
|
|
+ list, e := formOb.GetItemsByCondition(cond, pars, []string{}, "")
|
|
|
+ if e != nil {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.ErrMsg = fmt.Sprintf("获取填报单失败, %v", e)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ forms = list
|
|
|
+ }
|
|
|
+ if len(forms) == 0 {
|
|
|
+ br.Data = resp
|
|
|
+ br.Ret = 200
|
|
|
+ br.Success = true
|
|
|
+ br.Msg = "获取成功"
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 初始化响应结果,取出填报单关联的品种
|
|
|
+ var varietyIds []int
|
|
|
+ existVarietyId := make(map[int]bool)
|
|
|
+ existRespKey := make(map[string]bool)
|
|
|
+ for _, v := range forms {
|
|
|
+ if !existVarietyId[v.VarietyId] {
|
|
|
+ existVarietyId[v.VarietyId] = true
|
|
|
+ varietyIds = append(varietyIds, v.VarietyId)
|
|
|
+ }
|
|
|
+ k := fmt.Sprintf("%d-%d", v.ResearcherId, v.VarietyId)
|
|
|
+ if existRespKey[k] {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ existRespKey[k] = true
|
|
|
+ t := new(models.AssessmentFormResultStatisticItem)
|
|
|
+ t.ResearcherId = v.ResearcherId
|
|
|
+ t.ResearcherAdminId = v.ResearcherAdminId
|
|
|
+ t.ResearcherName = v.ResearcherName
|
|
|
+ t.VarietyId = v.VarietyId
|
|
|
+ t.VarietyName = v.VarietyName
|
|
|
+ t.VarietyCode = v.VarietyCode
|
|
|
+ resp = append(resp, t)
|
|
|
+ }
|
|
|
+
|
|
|
+ // 查询[开始日期至结束日期+4周]的品种数据
|
|
|
+ endMonthDate := endDate.AddDate(0, 0, 28).Format(utils.FormatDate)
|
|
|
+ varietyData := make([]*models.AssessmentVarietyData, 0)
|
|
|
+ {
|
|
|
+ dataOb := new(models.AssessmentVarietyData)
|
|
|
+ cond := fmt.Sprintf(` AND %s IN (?) AND (%s BETWEEN ? AND ?)`, dataOb.Cols().VarietyId, dataOb.Cols().WeekDate)
|
|
|
+ pars := make([]interface{}, 0)
|
|
|
+ pars = append(pars, varietyIds, params.StartTime, endMonthDate)
|
|
|
+ list, e := dataOb.GetItemsByCondition(cond, pars, []string{}, "")
|
|
|
+ if e != nil {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.ErrMsg = fmt.Sprintf("获取品种数据失败, %v", e)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ varietyData = list
|
|
|
+ }
|
|
|
+
|
|
|
+ // 计算正确率
|
|
|
+ resp, e = services.CalculateResultStatistic(forms, varietyData, resp)
|
|
|
+
|
|
|
+ br.Data = resp
|
|
|
+ br.Ret = 200
|
|
|
+ br.Success = true
|
|
|
+ br.Msg = "获取成功"
|
|
|
+}
|