Browse Source

Merge branch 'pool/260' into debug

Roc 4 months ago
parent
commit
5fc63eba4d
3 changed files with 379 additions and 2 deletions
  1. 366 0
      controllers/data_manage/manual_edb.go
  2. 4 2
      controllers/report_chapter.go
  3. 9 0
      routers/commentsRouter.go

+ 366 - 0
controllers/data_manage/manual_edb.go

@@ -1616,3 +1616,369 @@ func (c *ManualEdbController) RecordList() {
 	br.Msg = "获取成功"
 	br.Data = resp
 }
+
+// BatchSaveExcelData
+// @Title 批量保存手工数据
+// @Description 批量保存手工数据
+// @Param  request	body []models.ManualEdbExcelStyleEditReq true "type json string"
+// @Success 200
+// @router /target/edb/excel_style/batch_save [post]
+func (c *ManualEdbController) BatchSaveExcelData() {
+	br := new(models.BaseResponse).Init()
+	var err error
+	errs := make([]string, 0)
+	defer func() {
+		if len(errs) > 0 {
+			utils.FileLog.Info("编辑EXCEL数据 新增或修改数据失败,Err:" + strings.Join(errs, "\n"))
+		}
+		c.Data["json"] = br
+		c.ServeJSON()
+	}()
+
+	sysUser := c.SysUser
+	if sysUser == nil {
+		br.Msg = "请重新登录"
+		return
+	}
+
+	var req []data_manage.ManualEdbExcelStyleEditReq
+	err = json.Unmarshal(c.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+
+	countReq := len(req)
+	if countReq <= 0 {
+		br.Msg = "无数据!"
+		br.ErrMsg = "无数据!"
+		br.IsSendEmail = false
+		return
+	}
+	if countReq <= 0 {
+		br.Msg = "超出上限,导入失败!"
+		br.ErrMsg = "超出上限,导入失败!"
+		br.IsSendEmail = false
+		return
+	}
+
+	// 当前来说,所有指标都是同一个分类,所以取的第一个的分类id,后面如果可以做不通分类的配置的话,那就需要做微调
+	editClassifyIdList := make([]int, 0)
+	tmpClassifyIdMap := make(map[int]bool)
+	for _, item := range req {
+		classifyId := item.ClassifyId
+		if classifyId <= 0 {
+			br.Msg = "品种填写异常!"
+			br.ErrMsg = "品种填写异常!"
+			return
+		}
+		if _, ok := tmpClassifyIdMap[classifyId]; ok {
+			continue
+		}
+
+		editClassifyIdList = append(editClassifyIdList, classifyId)
+		tmpClassifyIdMap[classifyId] = true
+	}
+
+	//超管账号可以查看分类下的所有频度数据
+	userId := sysUser.AdminId
+	if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_ADMIN {
+		userId = 0
+	}
+
+	//获取账户所拥有权限的分类id集合
+	classifyIdList, err := data.GetUserManualClassifyIdList(userId)
+	if err != nil {
+		br.Msg = "获取分类数据失败"
+		br.Msg = "获取拥有的分类数据失败,Err:" + err.Error()
+		return
+	}
+	for _, classifyId := range editClassifyIdList {
+		if !utils.InArrayByInt(classifyIdList, classifyId) {
+			br.Msg = "无权访问"
+			br.ErrMsg = "无权访问"
+			br.IsSendEmail = false
+			return
+		}
+	}
+
+	// 指标map
+	targetMap := make(map[string]*models.Edbinfo)
+	addEdbTradeMap := make(map[string]bool)
+	updateEdbTradeMap := make(map[string]bool)
+	updateDataTradeMap := make(map[string]bool)
+	defer func() {
+		go func(addEdbTradeMap, updateEdbTradeMap, updateDataTradeMap map[string]bool) {
+			addRecordList := make([]*models.EdbinfoOpRecord, 0)
+			for tradeCode := range addEdbTradeMap {
+				addRecordList = append(addRecordList, &models.EdbinfoOpRecord{
+					TradeCode:  tradeCode,
+					Remark:     "创建指标",
+					UserId:     sysUser.AdminId,
+					UserName:   sysUser.RealName,
+					CreateTime: time.Now(),
+				})
+			}
+			for tradeCode := range updateEdbTradeMap {
+				addRecordList = append(addRecordList, &models.EdbinfoOpRecord{
+					TradeCode:  tradeCode,
+					Remark:     "编辑指标",
+					UserId:     sysUser.AdminId,
+					UserName:   sysUser.RealName,
+					CreateTime: time.Now(),
+				})
+			}
+			for tradeCode := range updateDataTradeMap {
+				addRecordList = append(addRecordList, &models.EdbinfoOpRecord{
+					TradeCode:  tradeCode,
+					Remark:     "更新数据",
+					UserId:     sysUser.AdminId,
+					UserName:   sysUser.RealName,
+					CreateTime: time.Now(),
+				})
+			}
+			if len(addRecordList) > 0 {
+				obj := models.EdbinfoOpRecord{}
+				_ = obj.MulCreate(addRecordList)
+			}
+
+			//将该指标的code加入到 “手工数据导入后刷新” 缓存
+			if utils.Re == nil {
+				for tradeCode := range updateDataTradeMap {
+					// 更新手工数据的最大最小值
+					data.ModifyManualEdbMaxMinDate(tradeCode)
+					//将该指标的code加入到 “手工数据导入后刷新” 缓存
+					err := utils.Rc.LPush(utils.CACHE_IMPORT_MANUAL_DATA, tradeCode)
+					if err != nil {
+						fmt.Println("CACHE_IMPORT_MANUAL_DATA LPush Err:" + err.Error())
+					}
+				}
+
+			}
+		}(addEdbTradeMap, updateEdbTradeMap, updateDataTradeMap)
+	}()
+
+	for _, item := range req {
+		if item.Unit == `` {
+			br.Msg = "单位填写异常!"
+			br.ErrMsg = "单位填写异常!"
+			return
+		}
+		if item.Frequency == `` {
+			br.Msg = "频度填写异常!"
+			br.ErrMsg = "频度填写异常!"
+			return
+		}
+		if item.ClassifyId <= 0 {
+			br.Msg = "品种填写异常!"
+			br.ErrMsg = "品种填写异常!"
+			return
+		}
+
+		// 是否新增指标
+		var isAddEdb bool
+
+		secName := strings.TrimSpace(item.EdbName)
+		frequency := strings.TrimSpace(item.Frequency)
+		unit := strings.TrimSpace(item.Unit)
+
+		manualEdbInfo, ok := targetMap[item.EdbName]
+		if !ok {
+			manualEdbInfo, err = models.GetTargetBySecName(secName)
+			if err != nil {
+				//如果是找不到该指标,那么新增指标
+				if err.Error() == utils.ErrNoRow() {
+					tmpErr := data.AddEdbInfo(secName, unit, frequency, "", sysUser.Mobile, item.ClassifyId, sysUser.AdminId, sysUser.RealName)
+					if tmpErr != nil {
+						utils.FileLogData.Error("AddEdbInfo err :%s", tmpErr.Error())
+						continue
+					}
+					isAddEdb = true
+					tmpTarget, tmpErr := models.GetTargetBySecName(secName)
+					manualEdbInfo = tmpTarget
+					targetMap[secName] = manualEdbInfo
+
+					// 指标新增
+					addEdbTradeMap[manualEdbInfo.TradeCode] = true
+				} else {
+					fmt.Println("导入数据 获取指标:Err:" + err.Error())
+				}
+			} else {
+				targetMap[secName] = manualEdbInfo
+
+			}
+		}
+
+		// 没有该分类品种权限的话,那么就过滤
+		if !utils.InArrayByInt(classifyIdList, manualEdbInfo.ClassifyId) {
+			continue
+		}
+
+		dateValueMap := make(map[string]string)
+		//取到所有数据
+		for _, dateValue := range item.Data {
+			// 检验时间格式
+			_, err := time.Parse(utils.FormatDate, dateValue.Date)
+			if err != nil {
+				continue
+			}
+			dateValueMap[dateValue.Date] = strconv.FormatFloat(dateValue.Value, 'f', -1, 64)
+		}
+
+		//操作指标,新增指标及数据等
+		{
+
+			// 如果不是新增指标,那么指标基础信息变更
+			if !isAddEdb {
+				updateCols := make([]string, 0)
+
+				if manualEdbInfo.SecName != secName {
+					// 校验是否存在相同指标名称
+					var condition string
+					var pars []interface{}
+					condition += " AND SEC_NAME=? AND left(TRADE_CODE,1)='W' AND REMARK='手动' AND TRADE_CODE != ? "
+					pars = append(pars, secName, manualEdbInfo.TradeCode)
+					count, err := models.GetManualEdbCountByCondition(condition, pars)
+					if err != nil {
+						br.Msg = `指标保存失败`
+						br.ErrMsg = `获取同名指标信息异常,ERR:` + err.Error()
+						return
+					}
+					if count > 0 {
+						br.Msg = `已存在同名指标`
+						br.ErrMsg = `已存在同名指标`
+						br.IsSendEmail = false
+						return
+					}
+
+					updateCols = append(updateCols, "SecName")
+					manualEdbInfo.SecName = secName
+				}
+
+				if manualEdbInfo.ClassifyId != item.ClassifyId {
+					updateCols = append(updateCols, "ClassifyId")
+					manualEdbInfo.ClassifyId = item.ClassifyId
+				}
+
+				if manualEdbInfo.Frequency != frequency {
+					updateCols = append(updateCols, "Frequency")
+					manualEdbInfo.Frequency = frequency
+				}
+
+				if manualEdbInfo.Unit != unit {
+					updateCols = append(updateCols, "Unit")
+					manualEdbInfo.Unit = unit
+				}
+
+				if len(updateCols) > 0 {
+					manualEdbInfo.ModifyTime = time.Now().Format(utils.FormatDateTime)
+					updateCols = append(updateCols, "ModifyTime")
+					err = manualEdbInfo.Update(updateCols)
+					if err != nil {
+						br.Msg = `指标保存失败`
+						br.ErrMsg = `指标保存失败,ERR:` + err.Error()
+						return
+					}
+
+					updateEdbTradeMap[manualEdbInfo.TradeCode] = true
+				}
+			}
+
+			// 当前已经存在的指标明细数据
+			targetDataList, tmpErr := models.GetTargetsDataList(manualEdbInfo.TradeCode)
+			if tmpErr != nil {
+				err = tmpErr
+			}
+			existDataMap := make(map[string]string)
+			deleteDataMap := make(map[string]string)
+			for _, tmpData := range targetDataList {
+				existDataMap[tmpData.Dt] = tmpData.Close
+				deleteDataMap[tmpData.Dt] = tmpData.Dt
+			}
+
+			var isUpdateData bool
+			addDataList := make([]*models.Edbdata, 0)
+
+			for createDate, closeVal := range dateValueMap {
+				if createDate == "" || closeVal == "" {
+					continue
+				}
+				//判断数据是否已经存在
+				tmpVal, ok3 := existDataMap[createDate]
+				// 不存在,那么后面进行插入
+				if !ok3 {
+					addDataList = append(addDataList, &models.Edbdata{
+						TradeCode:  manualEdbInfo.TradeCode,
+						Dt:         createDate,
+						Close:      closeVal,
+						ModifyTime: time.Now(),
+					})
+					continue
+				}
+
+				delete(deleteDataMap, createDate)
+
+				// 库里面的数据
+				tmpValDecimal, tmpErr := decimal.NewFromString(tmpVal)
+				if tmpErr != nil {
+					fmt.Println("tmpVal Parse err:", tmpErr.Error())
+					err = tmpErr
+					continue
+				}
+				// 用户填写的数据
+				closeValDecimal, tmpErr := decimal.NewFromString(closeVal)
+				if tmpErr != nil {
+					fmt.Println("closeVal Parse err:", tmpErr.Error())
+					err = tmpErr
+					continue
+				}
+				if !tmpValDecimal.Equal(closeValDecimal) {
+					isUpdateData = true
+					fmt.Println("更新数值")
+					err = models.ModifyTargetsDataByImport(manualEdbInfo.TradeCode, createDate, closeVal)
+					if err != nil {
+						fmt.Println("ModifyTargetsDataByImport err:", err.Error())
+						errs = append(errs, err.Error())
+						//go utils.SendEmail(utils.APPNAME+"失败提醒", "导入数据 修改数据失败:Err:"+err.Error(), utils.EmailSendToUsers)
+					}
+				}
+			}
+
+			// 新增明细数据
+			if len(addDataList) > 0 {
+				isUpdateData = true
+				err = models.OnlyMultiAddEdbdata(addDataList)
+				if err != nil {
+					fmt.Println("MultiAddEdbdata err:", err.Error())
+					errs = append(errs, err.Error())
+				}
+			}
+
+			// 删除不需要的日期数据
+			num := len(deleteDataMap)
+			if num > 0 {
+				isUpdateData = true
+				deleteDateList := make([]string, 0)
+				for date := range deleteDataMap {
+					deleteDateList = append(deleteDateList, date)
+				}
+
+				err = models.DelEdbdataByCodeAndDateList(manualEdbInfo.TradeCode, deleteDateList)
+				if err != nil {
+					fmt.Println("DelEdbdataByCodeAndDateList err:", err.Error())
+					errs = append(errs, err.Error())
+				}
+			}
+
+			// 更新数据
+			if isUpdateData {
+				updateDataTradeMap[manualEdbInfo.TradeCode] = true
+			}
+		}
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "保存成功"
+}

+ 4 - 2
controllers/report_chapter.go

@@ -377,6 +377,7 @@ func (this *ReportController) EditDayWeekChapter() {
 	reportInfo.LastModifyAdminName = sysUser.RealName
 	reportInfo.ModifyTime = time.Now()
 
+	updateCols := make([]string, 0)
 	reqTickerList := req.TickerList
 	// 更新章节及指标
 	contentSub := ""
@@ -405,6 +406,7 @@ func (this *ReportController) EditDayWeekChapter() {
 
 	if req.Title != "" {
 		reportChapterInfo.Title = req.Title
+		updateCols = append(updateCols, "Title")
 	}
 	//reportChapterInfo.AddType = req.AddType
 	reportChapterInfo.Author = req.Author
@@ -414,6 +416,7 @@ func (this *ReportController) EditDayWeekChapter() {
 	reportChapterInfo.ModifyTime = time.Now()
 	if req.CreateTime != `` {
 		reportChapterInfo.CreateTime = req.CreateTime
+		updateCols = append(updateCols, "CreateTime")
 	}
 
 	reportChapterInfo.LastModifyAdminId = sysUser.AdminId
@@ -421,8 +424,7 @@ func (this *ReportController) EditDayWeekChapter() {
 	reportChapterInfo.ContentModifyTime = time.Now()
 	reportChapterInfo.ContentStruct = html.EscapeString(req.ContentStruct)
 
-	updateCols := make([]string, 0)
-	updateCols = append(updateCols, "Title", "AddType", "Author", "Content", "ContentSub", "IsEdit", "CreateTime", "ModifyTime")
+	updateCols = append(updateCols, "Author", "Content", "ContentSub", "IsEdit", "ModifyTime")
 
 	updateCols = append(updateCols, "LastModifyAdminId", "LastModifyAdminName", "ContentModifyTime", "ContentStruct")
 

+ 9 - 0
routers/commentsRouter.go

@@ -5902,6 +5902,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ManualEdbController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ManualEdbController"],
+        beego.ControllerComments{
+            Method: "BatchSaveExcelData",
+            Router: `/target/edb/excel_style/batch_save`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ManualEdbController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ManualEdbController"],
         beego.ControllerComments{
             Method: "EditExcelData",