Browse Source

fix:回退手工数据保存功能

zqbao 7 months ago
parent
commit
3a64d4d22a
2 changed files with 728 additions and 728 deletions
  1. 727 727
      controllers/target.go
  2. 1 1
      models/data_manage/excel_style.go

+ 727 - 727
controllers/target.go

@@ -3363,514 +3363,6 @@ func (this *TargetController) ImportTargetFailListDownload() {
 	this.Ctx.Output.Download(savePath, "失败列表.xlsx")
 }
 
-// ExcelDataAdd
-// @Title 复制EXCEL数据保存
-// @Description 复制EXCEL数据保存
-// @Param  request	body models.ExcelStyleReq true "type json string"
-// @Success 200
-//// @router /target/excel_style/add [post]
-// func (this *TargetController) ExcelDataAdd() {
-// 	br := new(models.BaseResponse).Init()
-// 	var err error
-// 	errs := make([]string, 0)
-// 	defer func() {
-// 		if len(errs) > 0 {
-// 			go alarm_msg.SendAlarmMsg("新增复制EXCEL数据 新增或修改数据失败,Err:"+strings.Join(errs, ","), 3)
-// 		}
-// 		this.Data["json"] = br
-// 		this.ServeJSON()
-// 	}()
-
-// 	sysUser := this.SysUser
-// 	if sysUser == nil {
-// 		br.Msg = "请重新登录"
-// 		return
-// 	}
-
-// 	//频度
-// 	//frequency := this.GetString("Frequency")
-// 	//
-// 	//关键字
-// 	//keyword := this.GetString("Keyword")
-// 	//指标编码
-// 	//tradeCode := this.GetString("TradeCode")
-// 	//
-// 	//userId := sysUser.AdminId
-// 	//超管账号可以查看分类下的所有频度数据
-// 	//if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_ADMIN {
-// 	//	userId = 0
-// 	//}
-// 	//
-// 	//list, err := models.GetExcelData()
-// 	//if err != nil {
-// 	//	br.ErrMsg = "获取失败,Err:" + err.Error()
-// 	//	br.Msg = "获取失败"
-// 	//	return
-// 	//}
-
-// 	var req data_manage.ExcelStyleReq
-// 	err = json.Unmarshal(this.Ctx.Input.RequestBody, &req)
-// 	if err != nil {
-// 		br.Msg = "参数解析异常!"
-// 		br.ErrMsg = "参数解析失败,Err:" + err.Error()
-// 		return
-// 	}
-// 	//指标map
-// 	targetMap := make(map[string]*models.Edbinfo)
-// 	var cellDataList []map[string]interface{}
-// 	var dataList [][]map[string]interface{}
-// 	//var configList []map[string]interface{}
-// 	for _, item := range req.CellData {
-// 		v := item.(map[string]interface{})
-// 		cellDataList = append(cellDataList, v)
-// 	}
-
-// 	valueIndex := 0
-
-// 	var secNameList []string
-// 	var frequencyList []string
-// 	var unitList []string
-
-// 	var dateList []string
-// 	dateValueMap := make(map[string]map[int]string)
-// 	//取到所有数据
-// 	for i := range req.Data {
-// 		//取到一行
-// 		if i > 4 {
-// 			//先拿下日期列表
-// 			if req.Data[i] == nil || req.Data[i][0] == nil {
-// 				continue
-// 			}
-// 			//fmt.Println("i:", i)
-// 			//fmt.Println(req.Data[i])
-// 			//fmt.Println(req.Data[i][0])
-// 			dateMap := req.Data[i][0].(map[string]interface{})
-// 			_, ok := dateMap["m"]
-// 			if ok {
-// 				dateList = append(dateList, dateMap["m"].(string))
-// 				//fmt.Println("dateList:", dateList)
-// 			} else {
-// 				continue
-// 			}
-// 		}
-// 		for j, dataArr := range req.Data[i] {
-// 			//每一列
-// 			if dataArr == nil {
-// 				continue
-// 			}
-// 			dataMap := dataArr.(map[string]interface{})
-// 			if dataList == nil {
-// 				dataList = make([][]map[string]interface{}, len(req.Data))
-// 			}
-// 			if dataList[i] == nil {
-// 				dataList[i] = make([]map[string]interface{}, len(req.Data[i]))
-// 			}
-// 			dataList[i][j] = dataMap
-// 			//fmt.Println("dataMap", dataMap["m"])
-// 			v, _ := dataMap["m"]
-// 			//指标名称列表
-// 			if v == "指标名称" {
-// 				for nameIndex := 1; nameIndex < len(req.Data[i]); nameIndex++ {
-// 					if req.Data[i][nameIndex] == nil {
-// 						break
-// 					}
-// 					secNameMap := req.Data[i][nameIndex].(map[string]interface{})
-// 					secName, _ := secNameMap["m"]
-// 					if secName == nil {
-// 						continue
-// 					}
-// 					secNameList = append(secNameList, secNameMap["m"].(string))
-// 					//fmt.Println("secName:", secNameList)
-// 				}
-// 			}
-// 			//频度列表
-// 			if v == "频度" {
-// 				for nameIndex := 1; nameIndex < len(req.Data[i]); nameIndex++ {
-// 					if req.Data[i][nameIndex] == nil {
-// 						break
-// 					}
-// 					frequencyMap := req.Data[i][nameIndex].(map[string]interface{})
-// 					frequency, _ := frequencyMap["m"]
-// 					if frequency == nil {
-// 						continue
-// 					}
-// 					frequencyList = append(frequencyList, frequencyMap["m"].(string))
-// 					//fmt.Println("frequencyList:", frequencyList)
-// 				}
-// 			}
-// 			//单位列表
-// 			if v == "单位" {
-// 				for nameIndex := 1; nameIndex < len(req.Data[i]); nameIndex++ {
-// 					if req.Data[i][nameIndex] == nil {
-// 						break
-// 					}
-// 					unitMap := req.Data[i][nameIndex].(map[string]interface{})
-// 					unit, _ := unitMap["m"]
-// 					if unit == nil {
-// 						continue
-// 					}
-// 					unitList = append(unitList, unitMap["m"].(string))
-// 					//fmt.Println("unitList:", unitList)
-// 				}
-// 			}
-// 			//数据列表
-// 			//var valueList []string
-// 			valueListMap := make(map[int]string)
-// 			if i > 4 {
-// 				for index := 1; index < len(req.Data[i]); index++ {
-// 					if req.Data[i][index] == nil {
-// 						continue
-// 					}
-// 					valueMap := req.Data[i][index].(map[string]interface{})
-// 					value, _ := valueMap["m"]
-// 					if value == nil {
-// 						continue
-// 					}
-// 					valueListMap[index] = valueMap["m"].(string)
-
-// 					// 09-27 千位分隔符时用 "m" 取字符串存数据库会把逗号当小数点,现在换用 "v" 直接取数字再转为字符串,看看会不会有问题
-// 					if ct, ok := valueMap["ct"].(map[string]interface{}); ok {
-// 						fa, _ := ct["fa"]
-// 						if fa == "#,##0.000" {
-// 							value = valueMap["v"]
-// 							floatValue := valueMap["v"].(float64)
-// 							valueListMap[index] = strconv.FormatFloat(floatValue, 'f', -1, 64)
-// 						}
-// 					}
-
-// 					//valueList = append(valueList, valueMap["m"].(string))
-// 					//fmt.Println("valueList:", valueList)
-// 				}
-// 				dateMap := req.Data[i][0].(map[string]interface{})
-// 				date := dateMap["m"].(string)
-// 				dateValueMap[date] = valueListMap
-// 			}
-// 		}
-
-// 		//firstCell := req.Data[i][0]
-// 		//if firstCell == nil {
-// 		//	continue
-// 		//}
-// 		//dataMap := firstCell.(map[string]interface{})
-// 		//if dataList == nil {
-// 		//	dataList = make([][]map[string]interface{}, len(req.Data[i]))
-// 		//}
-// 		//if dataList[i] == nil {
-// 		//	dataList[i] = make([]map[string]interface{}, len(req.Data[i]))
-// 		//}
-// 		//dataList[i][0] = dataMap
-// 		//fmt.Println("dataMap", dataMap["m"])
-// 		//v, _ := dataMap["m"]
-// 		////指标名称
-// 		//if v == "指标名称" {
-// 		//	secNameMap := req.Data[i][1].(map[string]interface{})
-// 		//	secName = secNameMap["m"].(string)
-// 		//	fmt.Println("secName:", secName)
-// 		//}
-// 		////频度
-// 		//if v == "频度" {
-// 		//	frequencyMap := req.Data[i][1].(map[string]interface{})
-// 		//	frequency = frequencyMap["m"].(string)
-// 		//	fmt.Println("frequency:", frequency)
-// 		//}
-// 		////单位
-// 		//if v == "单位" {
-// 		//	unitMap := req.Data[i][1].(map[string]interface{})
-// 		//	unit = unitMap["m"].(string)
-// 		//	fmt.Println("unit:", unit)
-// 		//}
-// 		//
-// 		////日期
-// 		//dateMap := req.Data[i][1].(map[string]interface{})
-// 		//createDate = dateMap["m"].(string)
-// 		//
-// 		////值
-// 		//valueMap := req.Data[i][valueIndex].(map[string]interface{})
-// 		//closeVal = valueMap["m"].(string)
-
-// 		//新增指标
-// 		//errMsg := services.AddEdbItem(secName, unit, frequency, req.ClassifyId, sysUser)
-// 		//if errMsg == "" {
-// 		//	br.Msg = "新增指标异常!"
-// 		//	br.ErrMsg = errMsg
-// 		//	return
-// 		//}
-
-// 		valueIndex++
-// 	}
-
-// 	//var excelId int64
-// 	//保存EXCEL样式
-// 	//{
-// 	//	cellData, err := json.Marshal(cellDataList)
-// 	//	if err != nil {
-// 	//		br.Msg = "参数解析异常!"
-// 	//		br.ErrMsg = "参数解析失败,Err:" + err.Error()
-// 	//		return
-// 	//	}
-// 	//	config, err := json.Marshal(req.Config)
-// 	//	if err != nil {
-// 	//		br.Msg = "参数解析异常!"
-// 	//		br.ErrMsg = "参数解析失败,Err:" + err.Error()
-// 	//		return
-// 	//	}
-// 	//	datas, err := json.Marshal(dataList)
-// 	//	if err != nil {
-// 	//		br.Msg = "参数解析异常!"
-// 	//		br.ErrMsg = "参数解析失败,Err:" + err.Error()
-// 	//		return
-// 	//	}
-// 	//	excelItem := data_manage.ExcelStyle{
-// 	//		CellData: string(cellData),
-// 	//		Config:   string(config),
-// 	//		Data:     string(datas),
-// 	//	}
-// 	//	excelId, err = models.AddExcelData(&excelItem)
-// 	//	if err != nil {
-// 	//		br.ErrMsg = "获取失败,Err:" + err.Error()
-// 	//		br.Msg = "获取失败"
-// 	//		return
-// 	//	}
-// 	//
-// 	//	//判断映射表是否已经存在
-// 	//	count, err := data_manage.GetExcelEdbdataMappingCount(req.ClassifyId, target.TradeCode, frequency)
-// 	//	if err != nil {
-// 	//		br.ErrMsg = "GetExcelEdbdataMappingCount,Err:" + err.Error()
-// 	//		br.Msg = "新增映射表失败"
-// 	//		return
-// 	//	}
-// 	//	mappingItem := data_manage.ExcelEdbdataMapping{
-// 	//		ExcelId:    excelId,
-// 	//		ClassifyId: req.ClassifyId,
-// 	//		Frequency:  frequency,
-// 	//		TradeCode:  target.TradeCode,
-// 	//		CreateTime: time.Now(),
-// 	//	}
-// 	//	if count == 0{
-// 	//		//新增
-// 	//		err := data_manage.AddExcelEdbdataMapping(&mappingItem)
-// 	//		if err != nil {
-// 	//			br.ErrMsg = "AddExcelEdbdataMapping,Err:" + err.Error()
-// 	//			br.Msg = "新增映射表失败"
-// 	//			return
-// 	//		}
-// 	//	}
-// 	//}
-
-// 	// 所有的指标数据map
-// 	edbCodeDataMap := make(map[string]map[string]string)
-
-// 	//操作指标,新增指标及数据等
-// 	{
-// 		for i := 0; i < len(secNameList); i++ {
-// 			//fmt.Println("len(secNameList):", len(secNameList))
-// 			secName := secNameList[i]
-// 			frequency := frequencyList[i]
-
-// 			//防止填了指标名称后没填单位报错
-// 			if len(unitList) < len(secNameList) {
-// 				br.Msg = "单位填写异常!"
-// 				br.ErrMsg = "单位填写异常!"
-// 				return
-// 			}
-// 			unit := unitList[i]
-
-// 			for j, s := range dateList {
-// 				var closeVal string
-// 				//valueList, ok := dateValueMap[s]
-// 				valueMap, ok := dateValueMap[s]
-// 				//fmt.Println("valueMap:", valueMap)
-// 				if ok {
-// 					createDate := dateList[j]
-// 					//if i < len(valueList) {
-// 					//	closeVal = valueList[i]
-// 					//} else {
-// 					//	continue
-// 					//}
-// 					closeVal, ok = valueMap[i+1]
-// 					target, ok2 := targetMap[secName]
-// 					if !ok2 {
-// 						tmpTarget, err := models.GetTargetBySecName(secName)
-// 						if err != nil {
-// 							//如果是找不到该指标,那么新增指标
-// 							if err.Error() == utils.ErrNoRow() {
-// 								//if frequency == "" {
-// 								//	failItem := new(models.EdbdataImportFail)
-// 								//	failItem.SysUserId = strconv.Itoa(sysUser.AdminId)
-// 								//	failItem.ClassifyName = classifyName
-// 								//	failItem.CreateDate = createDate
-// 								//	failItem.SecName = secName
-// 								//	failItem.Close = closeVal
-// 								//	failItem.Remark = "新增指标失败,频度字段为空"
-// 								//	failItem.Frequency = frequency
-// 								//	failItem.Unit = unit
-// 								//	failDatas = append(failDatas, failItem)
-// 								//	continue
-// 								//}
-// 								//if unit == "" {
-// 								//	failItem := new(models.EdbdataImportFail)
-// 								//	failItem.SysUserId = strconv.Itoa(sysUser.AdminId)
-// 								//	failItem.ClassifyName = classifyName
-// 								//	failItem.CreateDate = createDate
-// 								//	failItem.SecName = secName
-// 								//	failItem.Close = closeVal
-// 								//	failItem.Remark = "新增指标失败,单位字段为空"
-// 								//	failItem.Frequency = frequency
-// 								//	failItem.Unit = unit
-// 								//	failDatas = append(failDatas, failItem)
-// 								//	continue
-// 								//}
-
-// 								tmpErr := data.AddEdbInfo(secName, unit, frequency, "", sysUser.Mobile, req.ClassifyId, sysUser.AdminId)
-// 								if tmpErr != nil {
-// 									//fmt.Println("AddEdbInfo err:", err.Error())
-// 									utils.FileLogData.Error("AddEdbInfo err :%s", tmpErr.Error())
-// 									continue
-// 								}
-// 								tmpTarget, tmpErr := models.GetTargetBySecName(secName)
-// 								target = tmpTarget
-// 								targetMap[secName] = target
-// 							} else {
-// 								fmt.Println("导入数据 获取指标:Err:" + err.Error())
-// 							}
-// 						} else {
-// 							target = tmpTarget
-// 							targetMap[secName] = target
-// 						}
-// 					}
-// 					// 判断指标的顺序是否发生改变
-// 					if targetMap[secName].Sort != i {
-// 						edbinfo := models.Edbinfo{TradeCode: target.TradeCode, Sort: i}
-// 						er := edbinfo.Update([]string{"sort"})
-// 						if er != nil {
-// 							fmt.Println("sort update err:", er.Error())
-// 						}
-// 					}
-
-// 					//判断指标数据是否已经存在
-// 					tmpDataMap, ok2 := edbCodeDataMap[target.TradeCode]
-// 					if !ok2 {
-// 						tmpDataMap = make(map[string]string)
-// 						targetDataList, tmpErr := models.GetTargetsDataList(target.TradeCode)
-// 						if tmpErr != nil {
-// 							err = tmpErr
-// 						}
-// 						for _, tmpData := range targetDataList {
-// 							tmpDataMap[tmpData.Dt] = tmpData.Close
-// 						}
-// 						edbCodeDataMap[target.TradeCode] = tmpDataMap
-// 					}
-
-// 					//判断数据是否已经存在
-// 					tmpVal, ok3 := tmpDataMap[createDate]
-// 					//数据已存在,进行更新操作
-// 					if ok3 {
-// 						if closeVal != "" {
-// 							// 库里面的数据
-// 							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) {
-// 								fmt.Println("更新数值")
-// 								err = models.ModifyTargetsDataByImport(target.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)
-// 								}
-// 							}
-// 						} else {
-// 							fmt.Println("删除数值")
-// 							err = models.DeleteTargetsDataByImport(target.TradeCode, createDate)
-// 							if err != nil {
-// 								fmt.Println("DeleteTargetsDataByImport err:", err.Error())
-// 								errs = append(errs, err.Error())
-// 								//go utils.SendEmail(utils.APPNAME+"失败提醒", "导入数据 修改数据失败:Err:"+err.Error(), utils.EmailSendToUsers)
-// 							}
-// 						}
-
-// 						if frequency != target.Frequency || unit != target.Unit || req.ClassifyId != target.ClassifyId {
-// 							fmt.Println("更新指标频度或单位")
-// 							err = models.ModifyEdbinfo(target.TradeCode, unit, frequency, req.ClassifyId)
-// 							if err != nil {
-// 								fmt.Println("EditEdbinfo err:", err.Error())
-// 								return
-// 							}
-// 						}
-// 					} else { //数据不存在,进行新增操作
-// 						if target.TradeCode != "" && createDate != "" && closeVal != "" {
-// 							fmt.Println("新增")
-// 							models.AddTargetsDataByImport(target.TradeCode, createDate, closeVal)
-// 							if err != nil {
-// 								fmt.Println("AddTargetsDataByImport err:", err.Error())
-// 								errs = append(errs, err.Error())
-// 								//go utils.SendEmail(utils.APPNAME+"失败提醒", "导入数据 新增数据失败:Err:"+err.Error(), utils.EmailSendToUsers)
-// 							}
-
-// 							tmpDataMap[createDate] = closeVal
-// 							edbCodeDataMap[target.TradeCode] = tmpDataMap
-// 						}
-// 					}
-
-// 					//保存关联表
-// 					//{
-// 					//	//判断映射表是否已经存在
-// 					//	count, err := data_manage.GetExcelEdbdataMappingCount(req.ClassifyId, target.TradeCode, frequency)
-// 					//	if err != nil {
-// 					//		br.ErrMsg = "GetExcelEdbdataMappingCount,Err:" + err.Error()
-// 					//		br.Msg = "新增映射表失败"
-// 					//		return
-// 					//	}
-// 					//	mappingItem := data_manage.ExcelEdbdataMapping{
-// 					//		ExcelId:    excelId,
-// 					//		ClassifyId: req.ClassifyId,
-// 					//		Frequency:  frequency,
-// 					//		TradeCode:  target.TradeCode,
-// 					//		CreateTime: time.Now(),
-// 					//	}
-// 					//	if count == 0{
-// 					//		//新增
-// 					//		err := data_manage.AddExcelEdbdataMapping(&mappingItem)
-// 					//		if err != nil {
-// 					//			br.ErrMsg = "AddExcelEdbdataMapping,Err:" + err.Error()
-// 					//			br.Msg = "新增映射表失败"
-// 					//			return
-// 					//		}
-// 					//	}
-// 					//}
-// 				}
-// 			}
-// 		}
-
-// 		list, err := models.GetTargetItemList(req.ClassifyId, 1, req.Frequency, "", "", []string{})
-// 		if err != nil {
-// 			br.ErrMsg = "获取失败,Err:" + err.Error()
-// 			br.Msg = "获取失败"
-// 			return
-// 		}
-// 		fmt.Println(list)
-// 	}
-
-// 	//resp := models.TargetItemListResp{
-// 	//	List: list,
-// 	//}
-// 	br.Ret = 200
-// 	br.Success = true
-// 	br.Msg = "获取成功"
-// 	//br.Data = resp
-// 	//br.Data = list
-// }
-
 // ExcelDataAdd
 // @Title 复制EXCEL数据保存
 // @Description 复制EXCEL数据保存
@@ -3895,6 +3387,27 @@ func (this *TargetController) ExcelDataAdd() {
 		return
 	}
 
+	//频度
+	//frequency := this.GetString("Frequency")
+	//
+	//关键字
+	//keyword := this.GetString("Keyword")
+	//指标编码
+	//tradeCode := this.GetString("TradeCode")
+	//
+	//userId := sysUser.AdminId
+	//超管账号可以查看分类下的所有频度数据
+	//if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_ADMIN {
+	//	userId = 0
+	//}
+	//
+	//list, err := models.GetExcelData()
+	//if err != nil {
+	//	br.ErrMsg = "获取失败,Err:" + err.Error()
+	//	br.Msg = "获取失败"
+	//	return
+	//}
+
 	var req data_manage.ExcelStyleReq
 	err = json.Unmarshal(this.Ctx.Input.RequestBody, &req)
 	if err != nil {
@@ -3903,13 +3416,23 @@ func (this *TargetController) ExcelDataAdd() {
 		return
 	}
 	//指标map
+	targetMap := make(map[string]*models.Edbinfo)
+	var cellDataList []map[string]interface{}
 	var dataList [][]map[string]interface{}
+	//var configList []map[string]interface{}
+	for _, item := range req.CellData {
+		v := item.(map[string]interface{})
+		cellDataList = append(cellDataList, v)
+	}
+
+	valueIndex := 0
 
 	var secNameList []string
 	var frequencyList []string
 	var unitList []string
 
-	secNameToDateMap := make(map[string]map[string]string)
+	var dateList []string
+	dateValueMap := make(map[string]map[int]string)
 	//取到所有数据
 	for i := range req.Data {
 		//取到一行
@@ -3918,262 +3441,739 @@ func (this *TargetController) ExcelDataAdd() {
 			if req.Data[i] == nil || req.Data[i][0] == nil {
 				continue
 			}
+			//fmt.Println("i:", i)
+			//fmt.Println(req.Data[i])
+			//fmt.Println(req.Data[i][0])
 			dateMap := req.Data[i][0].(map[string]interface{})
 			_, ok := dateMap["m"]
-			date := dateMap["m"].(string)
-			if !ok {
+			if ok {
+				dateList = append(dateList, dateMap["m"].(string))
+				//fmt.Println("dateList:", dateList)
+			} else {
 				continue
 			}
-			// 存储数据
-			for j := 1; j <= len(secNameList); j++ {
-				closeVal := req.Data[i][j].(map[string]interface{})
-				if item, ok := secNameToDateMap[secNameList[j-1]]; ok {
-					tmpVal, ok := closeVal["m"].(string)
-					if !ok || tmpVal == "" {
-						continue
+		}
+		for j, dataArr := range req.Data[i] {
+			//每一列
+			if dataArr == nil {
+				continue
+			}
+			dataMap := dataArr.(map[string]interface{})
+			if dataList == nil {
+				dataList = make([][]map[string]interface{}, len(req.Data))
+			}
+			if dataList[i] == nil {
+				dataList[i] = make([]map[string]interface{}, len(req.Data[i]))
+			}
+			dataList[i][j] = dataMap
+			//fmt.Println("dataMap", dataMap["m"])
+			v, _ := dataMap["m"]
+			//指标名称列表
+			if v == "指标名称" {
+				for nameIndex := 1; nameIndex < len(req.Data[i]); nameIndex++ {
+					if req.Data[i][nameIndex] == nil {
+						break
 					}
-					item[date] = tmpVal
-				} else {
-					tmpVal, ok := closeVal["m"].(string)
-					if !ok || tmpVal == "" {
+					secNameMap := req.Data[i][nameIndex].(map[string]interface{})
+					secName, _ := secNameMap["m"]
+					if secName == nil {
 						continue
 					}
-					secNameToDateMap[secNameList[j-1]] = map[string]string{
-						date: tmpVal,
-					}
+					secNameList = append(secNameList, secNameMap["m"].(string))
+					//fmt.Println("secName:", secNameList)
 				}
 			}
-
-		} else {
-			for j, dataArr := range req.Data[i] {
-				//每一列
-				if dataArr == nil {
-					continue
-				}
-				dataMap := dataArr.(map[string]interface{})
-				if dataList == nil {
-					dataList = make([][]map[string]interface{}, len(req.Data))
-				}
-				if dataList[i] == nil {
-					dataList[i] = make([]map[string]interface{}, len(req.Data[i]))
-				}
-				dataList[i][j] = dataMap
-				//fmt.Println("dataMap", dataMap["m"])
-				v, _ := dataMap["m"]
-				//指标名称列表
-				if v == "指标名称" {
-					for nameIndex := 1; nameIndex < len(req.Data[i]); nameIndex++ {
-						if req.Data[i][nameIndex] == nil {
-							break
-						}
-						secNameMap := req.Data[i][nameIndex].(map[string]interface{})
-						secName, _ := secNameMap["m"]
-						if secName == nil {
-							continue
-						}
-						secNameList = append(secNameList, secNameMap["m"].(string))
-						//fmt.Println("secName:", secNameList)
+			//频度列表
+			if v == "频度" {
+				for nameIndex := 1; nameIndex < len(req.Data[i]); nameIndex++ {
+					if req.Data[i][nameIndex] == nil {
+						break
+					}
+					frequencyMap := req.Data[i][nameIndex].(map[string]interface{})
+					frequency, _ := frequencyMap["m"]
+					if frequency == nil {
+						continue
 					}
+					frequencyList = append(frequencyList, frequencyMap["m"].(string))
+					//fmt.Println("frequencyList:", frequencyList)
 				}
-				//频度列表
-				if v == "频度" {
-					for nameIndex := 1; nameIndex < len(req.Data[i]); nameIndex++ {
-						if req.Data[i][nameIndex] == nil {
-							break
-						}
-						frequencyMap := req.Data[i][nameIndex].(map[string]interface{})
-						frequency, _ := frequencyMap["m"]
-						if frequency == nil {
-							continue
-						}
-						frequencyList = append(frequencyList, frequencyMap["m"].(string))
+			}
+			//单位列表
+			if v == "单位" {
+				for nameIndex := 1; nameIndex < len(req.Data[i]); nameIndex++ {
+					if req.Data[i][nameIndex] == nil {
+						break
 					}
+					unitMap := req.Data[i][nameIndex].(map[string]interface{})
+					unit, _ := unitMap["m"]
+					if unit == nil {
+						continue
+					}
+					unitList = append(unitList, unitMap["m"].(string))
+					//fmt.Println("unitList:", unitList)
 				}
-				//单位列表
-				if v == "单位" {
-					for nameIndex := 1; nameIndex < len(req.Data[i]); nameIndex++ {
-						if req.Data[i][nameIndex] == nil {
-							break
-						}
-						unitMap := req.Data[i][nameIndex].(map[string]interface{})
-						unit, _ := unitMap["m"]
-						if unit == nil {
-							continue
+			}
+			//数据列表
+			//var valueList []string
+			valueListMap := make(map[int]string)
+			if i > 4 {
+				for index := 1; index < len(req.Data[i]); index++ {
+					if req.Data[i][index] == nil {
+						continue
+					}
+					valueMap := req.Data[i][index].(map[string]interface{})
+					value, _ := valueMap["m"]
+					if value == nil {
+						continue
+					}
+					valueListMap[index] = valueMap["m"].(string)
+
+					// 09-27 千位分隔符时用 "m" 取字符串存数据库会把逗号当小数点,现在换用 "v" 直接取数字再转为字符串,看看会不会有问题
+					if ct, ok := valueMap["ct"].(map[string]interface{}); ok {
+						fa, _ := ct["fa"]
+						if fa == "#,##0.000" {
+							value = valueMap["v"]
+							floatValue := valueMap["v"].(float64)
+							valueListMap[index] = strconv.FormatFloat(floatValue, 'f', -1, 64)
 						}
-						unitList = append(unitList, unitMap["m"].(string))
 					}
+
+					//valueList = append(valueList, valueMap["m"].(string))
+					//fmt.Println("valueList:", valueList)
 				}
+				dateMap := req.Data[i][0].(map[string]interface{})
+				date := dateMap["m"].(string)
+				dateValueMap[date] = valueListMap
 			}
 		}
-	}
+
+		//firstCell := req.Data[i][0]
+		//if firstCell == nil {
+		//	continue
+		//}
+		//dataMap := firstCell.(map[string]interface{})
+		//if dataList == nil {
+		//	dataList = make([][]map[string]interface{}, len(req.Data[i]))
+		//}
+		//if dataList[i] == nil {
+		//	dataList[i] = make([]map[string]interface{}, len(req.Data[i]))
+		//}
+		//dataList[i][0] = dataMap
+		//fmt.Println("dataMap", dataMap["m"])
+		//v, _ := dataMap["m"]
+		////指标名称
+		//if v == "指标名称" {
+		//	secNameMap := req.Data[i][1].(map[string]interface{})
+		//	secName = secNameMap["m"].(string)
+		//	fmt.Println("secName:", secName)
+		//}
+		////频度
+		//if v == "频度" {
+		//	frequencyMap := req.Data[i][1].(map[string]interface{})
+		//	frequency = frequencyMap["m"].(string)
+		//	fmt.Println("frequency:", frequency)
+		//}
+		////单位
+		//if v == "单位" {
+		//	unitMap := req.Data[i][1].(map[string]interface{})
+		//	unit = unitMap["m"].(string)
+		//	fmt.Println("unit:", unit)
+		//}
+		//
+		////日期
+		//dateMap := req.Data[i][1].(map[string]interface{})
+		//createDate = dateMap["m"].(string)
+		//
+		////值
+		//valueMap := req.Data[i][valueIndex].(map[string]interface{})
+		//closeVal = valueMap["m"].(string)
+
+		//新增指标
+		//errMsg := services.AddEdbItem(secName, unit, frequency, req.ClassifyId, sysUser)
+		//if errMsg == "" {
+		//	br.Msg = "新增指标异常!"
+		//	br.ErrMsg = errMsg
+		//	return
+		//}
+
+		valueIndex++
+	}
+
+	//var excelId int64
+	//保存EXCEL样式
+	//{
+	//	cellData, err := json.Marshal(cellDataList)
+	//	if err != nil {
+	//		br.Msg = "参数解析异常!"
+	//		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+	//		return
+	//	}
+	//	config, err := json.Marshal(req.Config)
+	//	if err != nil {
+	//		br.Msg = "参数解析异常!"
+	//		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+	//		return
+	//	}
+	//	datas, err := json.Marshal(dataList)
+	//	if err != nil {
+	//		br.Msg = "参数解析异常!"
+	//		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+	//		return
+	//	}
+	//	excelItem := data_manage.ExcelStyle{
+	//		CellData: string(cellData),
+	//		Config:   string(config),
+	//		Data:     string(datas),
+	//	}
+	//	excelId, err = models.AddExcelData(&excelItem)
+	//	if err != nil {
+	//		br.ErrMsg = "获取失败,Err:" + err.Error()
+	//		br.Msg = "获取失败"
+	//		return
+	//	}
+	//
+	//	//判断映射表是否已经存在
+	//	count, err := data_manage.GetExcelEdbdataMappingCount(req.ClassifyId, target.TradeCode, frequency)
+	//	if err != nil {
+	//		br.ErrMsg = "GetExcelEdbdataMappingCount,Err:" + err.Error()
+	//		br.Msg = "新增映射表失败"
+	//		return
+	//	}
+	//	mappingItem := data_manage.ExcelEdbdataMapping{
+	//		ExcelId:    excelId,
+	//		ClassifyId: req.ClassifyId,
+	//		Frequency:  frequency,
+	//		TradeCode:  target.TradeCode,
+	//		CreateTime: time.Now(),
+	//	}
+	//	if count == 0{
+	//		//新增
+	//		err := data_manage.AddExcelEdbdataMapping(&mappingItem)
+	//		if err != nil {
+	//			br.ErrMsg = "AddExcelEdbdataMapping,Err:" + err.Error()
+	//			br.Msg = "新增映射表失败"
+	//			return
+	//		}
+	//	}
+	//}
 
 	// 所有的指标数据map
-	edbCodeInfoMap := make(map[string]*models.EdbInfoItem)
+	edbCodeDataMap := make(map[string]map[string]string)
 
-	if len(frequencyList) == 0 {
-		br.Ret = 200
-		br.Success = true
-		br.Msg = "保存成功"
-		return
-	}
+	//操作指标,新增指标及数据等
+	{
+		for i := 0; i < len(secNameList); i++ {
+			//fmt.Println("len(secNameList):", len(secNameList))
+			secName := secNameList[i]
+			frequency := frequencyList[i]
+
+			//防止填了指标名称后没填单位报错
+			if len(unitList) < len(secNameList) {
+				br.Msg = "单位填写异常!"
+				br.ErrMsg = "单位填写异常!"
+				return
+			}
+			unit := unitList[i]
+
+			for j, s := range dateList {
+				var closeVal string
+				//valueList, ok := dateValueMap[s]
+				valueMap, ok := dateValueMap[s]
+				//fmt.Println("valueMap:", valueMap)
+				if ok {
+					createDate := dateList[j]
+					//if i < len(valueList) {
+					//	closeVal = valueList[i]
+					//} else {
+					//	continue
+					//}
+					closeVal, ok = valueMap[i+1]
+					target, ok2 := targetMap[secName]
+					if !ok2 {
+						tmpTarget, err := models.GetTargetBySecName(secName)
+						if err != nil {
+							//如果是找不到该指标,那么新增指标
+							if err.Error() == utils.ErrNoRow() {
+								//if frequency == "" {
+								//	failItem := new(models.EdbdataImportFail)
+								//	failItem.SysUserId = strconv.Itoa(sysUser.AdminId)
+								//	failItem.ClassifyName = classifyName
+								//	failItem.CreateDate = createDate
+								//	failItem.SecName = secName
+								//	failItem.Close = closeVal
+								//	failItem.Remark = "新增指标失败,频度字段为空"
+								//	failItem.Frequency = frequency
+								//	failItem.Unit = unit
+								//	failDatas = append(failDatas, failItem)
+								//	continue
+								//}
+								//if unit == "" {
+								//	failItem := new(models.EdbdataImportFail)
+								//	failItem.SysUserId = strconv.Itoa(sysUser.AdminId)
+								//	failItem.ClassifyName = classifyName
+								//	failItem.CreateDate = createDate
+								//	failItem.SecName = secName
+								//	failItem.Close = closeVal
+								//	failItem.Remark = "新增指标失败,单位字段为空"
+								//	failItem.Frequency = frequency
+								//	failItem.Unit = unit
+								//	failDatas = append(failDatas, failItem)
+								//	continue
+								//}
+
+								tmpErr := data.AddEdbInfo(secName, unit, frequency, "", sysUser.Mobile, req.ClassifyId, sysUser.AdminId)
+								if tmpErr != nil {
+									//fmt.Println("AddEdbInfo err:", err.Error())
+									utils.FileLogData.Error("AddEdbInfo err :%s", tmpErr.Error())
+									continue
+								}
+								tmpTarget, tmpErr := models.GetTargetBySecName(secName)
+								target = tmpTarget
+								targetMap[secName] = target
+							} else {
+								fmt.Println("导入数据 获取指标:Err:" + err.Error())
+							}
+						} else {
+							target = tmpTarget
+							targetMap[secName] = target
+						}
+					}
+					// 判断指标的顺序是否发生改变
+					if targetMap[secName].Sort != i {
+						edbinfo := models.Edbinfo{TradeCode: target.TradeCode, Sort: i}
+						er := edbinfo.Update([]string{"sort"})
+						if er != nil {
+							fmt.Println("sort update err:", er.Error())
+						}
+					}
 
-	//获取账户所拥有权限的分类id集合
-	classifyIdStrList, err := data.GetEdbClassifyListByAdminId(int64(sysUser.AdminId))
-	if err != nil {
-		br.Msg = "获取分类数据失败"
-		return
-	}
-	IsVaild := 0
-	for _, classifyId := range classifyIdStrList {
-		if strconv.Itoa(req.ClassifyId) == classifyId {
-			IsVaild += 1
-		}
-		if strconv.Itoa(req.OldClassifyId) == classifyId {
-			IsVaild += 1
-		}
-	}
-	if IsVaild != 2 {
-		br.Msg = "操作权限不足,请检查分类操作权限"
-		br.ErrMsg = "操作权限不足"
-		return
-	}
+					//判断指标数据是否已经存在
+					tmpDataMap, ok2 := edbCodeDataMap[target.TradeCode]
+					if !ok2 {
+						tmpDataMap = make(map[string]string)
+						targetDataList, tmpErr := models.GetTargetsDataList(target.TradeCode)
+						if tmpErr != nil {
+							err = tmpErr
+						}
+						for _, tmpData := range targetDataList {
+							tmpDataMap[tmpData.Dt] = tmpData.Close
+						}
+						edbCodeDataMap[target.TradeCode] = tmpDataMap
+					}
 
-	// 获取当前类所有的有效指标
-	list, err := models.GetTargetItemListSort(req.ClassifyId, 1, req.Frequence, "", "", classifyIdStrList)
-	if err != nil {
-		br.Msg = "获取指标失败"
-		br.ErrMsg = "获取有效指标失败,系统错误,Err:" + err.Error()
-		return
-	}
+					//判断数据是否已经存在
+					tmpVal, ok3 := tmpDataMap[createDate]
+					//数据已存在,进行更新操作
+					if ok3 {
+						if closeVal != "" {
+							// 库里面的数据
+							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) {
+								fmt.Println("更新数值")
+								err = models.ModifyTargetsDataByImport(target.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)
+								}
+							}
+						} else {
+							fmt.Println("删除数值")
+							err = models.DeleteTargetsDataByImport(target.TradeCode, createDate)
+							if err != nil {
+								fmt.Println("DeleteTargetsDataByImport err:", err.Error())
+								errs = append(errs, err.Error())
+								//go utils.SendEmail(utils.APPNAME+"失败提醒", "导入数据 修改数据失败:Err:"+err.Error(), utils.EmailSendToUsers)
+							}
+						}
 
-	for _, item := range list {
-		edbCodeInfoMap[item.SecName] = item
-	}
-	//历史的类别下的指标
-	oldEdbCodeInfoMap := make(map[string]*models.EdbInfoItem)
-	if req.ClassifyId != req.OldClassifyId || req.Frequence != req.OldFrequence {
-		// 获取历史类所有的有效指标
-		oldList, err := models.GetTargetItemListSort(req.OldClassifyId, 1, req.OldFrequence, "", "", classifyIdStrList)
-		if err != nil {
-			br.Msg = "获取指标失败"
-			br.ErrMsg = "获取有效指标失败,系统错误,Err:" + err.Error()
-			return
-		}
-		for _, item := range oldList {
-			edbCodeInfoMap[item.SecName] = item
-			oldEdbCodeInfoMap[item.SecName] = item
-		}
-	} else {
-		// 如果没有更换指标类别和频度,那就保持一致
-		oldEdbCodeInfoMap = edbCodeInfoMap
-	}
+						if frequency != target.Frequency || unit != target.Unit || req.ClassifyId != target.ClassifyId {
+							fmt.Println("更新指标频度或单位")
+							err = models.ModifyEdbinfo(target.TradeCode, unit, frequency, req.ClassifyId)
+							if err != nil {
+								fmt.Println("EditEdbinfo err:", err.Error())
+								return
+							}
+						}
+					} else { //数据不存在,进行新增操作
+						if target.TradeCode != "" && createDate != "" && closeVal != "" {
+							fmt.Println("新增")
+							models.AddTargetsDataByImport(target.TradeCode, createDate, closeVal)
+							if err != nil {
+								fmt.Println("AddTargetsDataByImport err:", err.Error())
+								errs = append(errs, err.Error())
+								//go utils.SendEmail(utils.APPNAME+"失败提醒", "导入数据 新增数据失败:Err:"+err.Error(), utils.EmailSendToUsers)
+							}
 
-	// 删除历史类别下的指标及数据
-	if req.TradeCode == "" {
-		// TradeCode == "" 表示当前数据不是经过搜索的数据,可以进行删除指标操作
-		deleteTraceCodeList := make([]string, 0)
-		for k, v := range oldEdbCodeInfoMap {
-			if _, ok := secNameToDateMap[k]; !ok {
-				deleteTraceCodeList = append(deleteTraceCodeList, v.TradeCode)
-			}
-		}
-		// 删除指标
-		err = models.DeleteEdbinfoByTraceCodeList(deleteTraceCodeList)
-		if err != nil {
-			br.Msg = "excel保存失败"
-			br.ErrMsg = "指标及指标数据删除失败,Err:" + err.Error()
-			return
-		}
-	}
+							tmpDataMap[createDate] = closeVal
+							edbCodeDataMap[target.TradeCode] = tmpDataMap
+						}
+					}
 
-	// 获得需要新增的指标
-	addEdbInfoList := make([]*models.Edbinfo, 0)
-	sortEdbInfoList := make([]*models.Edbinfo, 0)
-	for i, v := range secNameList {
-		if item, ok := edbCodeInfoMap[v]; !ok {
-			t := new(models.Edbinfo)
-			t.SecName = v
-			t.Unit = unitList[i]
-			t.Remark = "手动"
-			t.Frequency = frequencyList[i]
-			t.ClassifyId = req.ClassifyId
-			t.UserId = sysUser.AdminId
-			t.Sort = len(list) + i
-			addEdbInfoList = append(addEdbInfoList, t)
-			edbCodeInfoMap[t.SecName] = &models.EdbInfoItem{
-				TradeCode: t.TradeCode,
-				SecName:   t.SecName,
-				Unit:      t.Unit,
-				Frequency: t.Frequency,
-				UserId:    t.UserId,
-			}
-		} else {
-			t := new(models.Edbinfo)
-			t.TradeCode = item.TradeCode
-			if req.Frequence != req.OldFrequence || req.ClassifyId != req.OldClassifyId {
-				t.Sort = len(list) + i
-			} else {
-				if req.TradeCode != "" {
-					// 如果是搜索的指标,那就保存原来的排序
-					t.Sort = item.Sort
-				} else {
-					t.Sort = i
+					//保存关联表
+					//{
+					//	//判断映射表是否已经存在
+					//	count, err := data_manage.GetExcelEdbdataMappingCount(req.ClassifyId, target.TradeCode, frequency)
+					//	if err != nil {
+					//		br.ErrMsg = "GetExcelEdbdataMappingCount,Err:" + err.Error()
+					//		br.Msg = "新增映射表失败"
+					//		return
+					//	}
+					//	mappingItem := data_manage.ExcelEdbdataMapping{
+					//		ExcelId:    excelId,
+					//		ClassifyId: req.ClassifyId,
+					//		Frequency:  frequency,
+					//		TradeCode:  target.TradeCode,
+					//		CreateTime: time.Now(),
+					//	}
+					//	if count == 0{
+					//		//新增
+					//		err := data_manage.AddExcelEdbdataMapping(&mappingItem)
+					//		if err != nil {
+					//			br.ErrMsg = "AddExcelEdbdataMapping,Err:" + err.Error()
+					//			br.Msg = "新增映射表失败"
+					//			return
+					//		}
+					//	}
+					//}
 				}
 			}
-			t.Frequency = req.Frequence
-			t.ClassifyId = req.ClassifyId
-			sortEdbInfoList = append(sortEdbInfoList, t)
 		}
-	}
-	// 更新指标频度,分类,顺序
-	for _, v := range sortEdbInfoList {
-		err = v.Update([]string{"frequency", "classify_id", "sort"})
+
+		list, err := models.GetTargetItemList(req.ClassifyId, 1, req.Frequency, "", "", []string{})
 		if err != nil {
-			br.Msg = "excel保存失败"
-			br.ErrMsg = "excel更新顺序失败,Err:" + err.Error()
+			br.ErrMsg = "获取失败,Err:" + err.Error()
+			br.Msg = "获取失败"
 			return
 		}
-	}
-	// 新增指标
-	msg, err := data.MultiAddEdbInfo(addEdbInfoList, sysUser.Mobile)
-	if err != nil {
-		if msg != "" {
-			br.Msg = msg
-		} else {
-			br.Msg = "指标保存失败"
-		}
-		br.ErrMsg = "新增指标失败,系统错误,Err:" + err.Error()
-		return
-	}
-	for _, v := range addEdbInfoList {
-		edbCodeInfoMap[v.SecName].TradeCode = v.TradeCode
-	}
-	// 新增指标数据
-	addEdbDataList := make([]*models.Edbdata, 0)
-	for _, v := range secNameList {
-		// 指标数据
-		for date, closeVal := range secNameToDateMap[v] {
-			t := new(models.Edbdata)
-			// 理论上这里面不应该出现空值
-			t.TradeCode = edbCodeInfoMap[v].TradeCode
-			t.Dt = date
-			t.Close = closeVal
-			t.ModifyTime = time.Now()
-			addEdbDataList = append(addEdbDataList, t)
-		}
-	}
-	err = models.MultiAddEdbdata(addEdbDataList)
-	if err != nil {
-		br.Msg = "excel保存失败"
-		br.ErrMsg = "新增指标数据失败,系统错误,Err:" + err.Error()
-		return
+		fmt.Println(list)
 	}
 
+	//resp := models.TargetItemListResp{
+	//	List: list,
+	//}
 	br.Ret = 200
 	br.Success = true
-	br.Msg = "保存成功"
+	br.Msg = "获取成功"
+	//br.Data = resp
+	//br.Data = list
 }
 
+// ExcelDataAdd
+// @Title 复制EXCEL数据保存
+// @Description 复制EXCEL数据保存
+// @Param  request	body models.ExcelStyleReq true "type json string"
+// @Success 200
+//// @router /target/excel_style/add [post]
+// func (this *TargetController) ExcelDataAdd() {
+// 	br := new(models.BaseResponse).Init()
+// 	var err error
+// 	errs := make([]string, 0)
+// 	defer func() {
+// 		if len(errs) > 0 {
+// 			go alarm_msg.SendAlarmMsg("新增复制EXCEL数据 新增或修改数据失败,Err:"+strings.Join(errs, ","), 3)
+// 		}
+// 		this.Data["json"] = br
+// 		this.ServeJSON()
+// 	}()
+
+// 	sysUser := this.SysUser
+// 	if sysUser == nil {
+// 		br.Msg = "请重新登录"
+// 		return
+// 	}
+
+// 	var req data_manage.ExcelStyleReq
+// 	err = json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+// 	if err != nil {
+// 		br.Msg = "参数解析异常!"
+// 		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+// 		return
+// 	}
+// 	//指标map
+// 	var dataList [][]map[string]interface{}
+
+// 	var secNameList []string
+// 	var frequencyList []string
+// 	var unitList []string
+
+// 	secNameToDateMap := make(map[string]map[string]string)
+// 	//取到所有数据
+// 	for i := range req.Data {
+// 		//取到一行
+// 		if i > 4 {
+// 			//先拿下日期列表
+// 			if req.Data[i] == nil || req.Data[i][0] == nil {
+// 				continue
+// 			}
+// 			dateMap := req.Data[i][0].(map[string]interface{})
+// 			_, ok := dateMap["m"]
+// 			date := dateMap["m"].(string)
+// 			if !ok {
+// 				continue
+// 			}
+// 			// 存储数据
+// 			for j := 1; j <= len(secNameList); j++ {
+// 				closeVal := req.Data[i][j].(map[string]interface{})
+// 				if item, ok := secNameToDateMap[secNameList[j-1]]; ok {
+// 					tmpVal, ok := closeVal["m"].(string)
+// 					if !ok || tmpVal == "" {
+// 						continue
+// 					}
+// 					item[date] = tmpVal
+// 				} else {
+// 					tmpVal, ok := closeVal["m"].(string)
+// 					if !ok || tmpVal == "" {
+// 						continue
+// 					}
+// 					secNameToDateMap[secNameList[j-1]] = map[string]string{
+// 						date: tmpVal,
+// 					}
+// 				}
+// 			}
+
+// 		} else {
+// 			for j, dataArr := range req.Data[i] {
+// 				//每一列
+// 				if dataArr == nil {
+// 					continue
+// 				}
+// 				dataMap := dataArr.(map[string]interface{})
+// 				if dataList == nil {
+// 					dataList = make([][]map[string]interface{}, len(req.Data))
+// 				}
+// 				if dataList[i] == nil {
+// 					dataList[i] = make([]map[string]interface{}, len(req.Data[i]))
+// 				}
+// 				dataList[i][j] = dataMap
+// 				//fmt.Println("dataMap", dataMap["m"])
+// 				v, _ := dataMap["m"]
+// 				//指标名称列表
+// 				if v == "指标名称" {
+// 					for nameIndex := 1; nameIndex < len(req.Data[i]); nameIndex++ {
+// 						if req.Data[i][nameIndex] == nil {
+// 							break
+// 						}
+// 						secNameMap := req.Data[i][nameIndex].(map[string]interface{})
+// 						secName, _ := secNameMap["m"]
+// 						if secName == nil {
+// 							continue
+// 						}
+// 						secNameList = append(secNameList, secNameMap["m"].(string))
+// 						//fmt.Println("secName:", secNameList)
+// 					}
+// 				}
+// 				//频度列表
+// 				if v == "频度" {
+// 					for nameIndex := 1; nameIndex < len(req.Data[i]); nameIndex++ {
+// 						if req.Data[i][nameIndex] == nil {
+// 							break
+// 						}
+// 						frequencyMap := req.Data[i][nameIndex].(map[string]interface{})
+// 						frequency, _ := frequencyMap["m"]
+// 						if frequency == nil {
+// 							continue
+// 						}
+// 						frequencyList = append(frequencyList, frequencyMap["m"].(string))
+// 					}
+// 				}
+// 				//单位列表
+// 				if v == "单位" {
+// 					for nameIndex := 1; nameIndex < len(req.Data[i]); nameIndex++ {
+// 						if req.Data[i][nameIndex] == nil {
+// 							break
+// 						}
+// 						unitMap := req.Data[i][nameIndex].(map[string]interface{})
+// 						unit, _ := unitMap["m"]
+// 						if unit == nil {
+// 							continue
+// 						}
+// 						unitList = append(unitList, unitMap["m"].(string))
+// 					}
+// 				}
+// 			}
+// 		}
+// 	}
+
+// 	// 所有的指标数据map
+// 	edbCodeInfoMap := make(map[string]*models.EdbInfoItem)
+
+// 	if len(frequencyList) == 0 {
+// 		br.Ret = 200
+// 		br.Success = true
+// 		br.Msg = "保存成功"
+// 		return
+// 	}
+
+// 	//获取账户所拥有权限的分类id集合
+// 	classifyIdStrList, err := data.GetEdbClassifyListByAdminId(int64(sysUser.AdminId))
+// 	if err != nil {
+// 		br.Msg = "获取分类数据失败"
+// 		return
+// 	}
+// 	IsVaild := 0
+// 	for _, classifyId := range classifyIdStrList {
+// 		if strconv.Itoa(req.ClassifyId) == classifyId {
+// 			IsVaild += 1
+// 		}
+// 		if strconv.Itoa(req.OldClassifyId) == classifyId {
+// 			IsVaild += 1
+// 		}
+// 	}
+// 	if IsVaild != 2 {
+// 		br.Msg = "操作权限不足,请检查分类操作权限"
+// 		br.ErrMsg = "操作权限不足"
+// 		return
+// 	}
+
+// 	// 获取当前类所有的有效指标
+// 	list, err := models.GetTargetItemListSort(req.ClassifyId, 1, req.Frequence, "", "", classifyIdStrList)
+// 	if err != nil {
+// 		br.Msg = "获取指标失败"
+// 		br.ErrMsg = "获取有效指标失败,系统错误,Err:" + err.Error()
+// 		return
+// 	}
+
+// 	for _, item := range list {
+// 		edbCodeInfoMap[item.SecName] = item
+// 	}
+// 	//历史的类别下的指标
+// 	oldEdbCodeInfoMap := make(map[string]*models.EdbInfoItem)
+// 	if req.ClassifyId != req.OldClassifyId || req.Frequence != req.OldFrequence {
+// 		// 获取历史类所有的有效指标
+// 		oldList, err := models.GetTargetItemListSort(req.OldClassifyId, 1, req.OldFrequence, "", "", classifyIdStrList)
+// 		if err != nil {
+// 			br.Msg = "获取指标失败"
+// 			br.ErrMsg = "获取有效指标失败,系统错误,Err:" + err.Error()
+// 			return
+// 		}
+// 		for _, item := range oldList {
+// 			edbCodeInfoMap[item.SecName] = item
+// 			oldEdbCodeInfoMap[item.SecName] = item
+// 		}
+// 	} else {
+// 		// 如果没有更换指标类别和频度,那就保持一致
+// 		oldEdbCodeInfoMap = edbCodeInfoMap
+// 	}
+
+// 	// 删除历史类别下的指标及数据
+// 	if req.TradeCode == "" {
+// 		// TradeCode == "" 表示当前数据不是经过搜索的数据,可以进行删除指标操作
+// 		deleteTraceCodeList := make([]string, 0)
+// 		for k, v := range oldEdbCodeInfoMap {
+// 			if _, ok := secNameToDateMap[k]; !ok {
+// 				deleteTraceCodeList = append(deleteTraceCodeList, v.TradeCode)
+// 			}
+// 		}
+// 		// 删除指标
+// 		err = models.DeleteEdbinfoByTraceCodeList(deleteTraceCodeList)
+// 		if err != nil {
+// 			br.Msg = "excel保存失败"
+// 			br.ErrMsg = "指标及指标数据删除失败,Err:" + err.Error()
+// 			return
+// 		}
+// 	}
+
+// 	// 获得需要新增的指标
+// 	addEdbInfoList := make([]*models.Edbinfo, 0)
+// 	sortEdbInfoList := make([]*models.Edbinfo, 0)
+// 	for i, v := range secNameList {
+// 		if item, ok := edbCodeInfoMap[v]; !ok {
+// 			t := new(models.Edbinfo)
+// 			t.SecName = v
+// 			t.Unit = unitList[i]
+// 			t.Remark = "手动"
+// 			t.Frequency = frequencyList[i]
+// 			t.ClassifyId = req.ClassifyId
+// 			t.UserId = sysUser.AdminId
+// 			t.Sort = len(list) + i
+// 			addEdbInfoList = append(addEdbInfoList, t)
+// 			edbCodeInfoMap[t.SecName] = &models.EdbInfoItem{
+// 				TradeCode: t.TradeCode,
+// 				SecName:   t.SecName,
+// 				Unit:      t.Unit,
+// 				Frequency: t.Frequency,
+// 				UserId:    t.UserId,
+// 			}
+// 		} else {
+// 			t := new(models.Edbinfo)
+// 			t.TradeCode = item.TradeCode
+// 			if req.Frequence != req.OldFrequence || req.ClassifyId != req.OldClassifyId {
+// 				t.Sort = len(list) + i
+// 			} else {
+// 				if req.TradeCode != "" {
+// 					// 如果是搜索的指标,那就保存原来的排序
+// 					t.Sort = item.Sort
+// 				} else {
+// 					t.Sort = i
+// 				}
+// 			}
+// 			t.Frequency = req.Frequence
+// 			t.ClassifyId = req.ClassifyId
+// 			sortEdbInfoList = append(sortEdbInfoList, t)
+// 		}
+// 	}
+// 	// 更新指标频度,分类,顺序
+// 	for _, v := range sortEdbInfoList {
+// 		err = v.Update([]string{"frequency", "classify_id", "sort"})
+// 		if err != nil {
+// 			br.Msg = "excel保存失败"
+// 			br.ErrMsg = "excel更新顺序失败,Err:" + err.Error()
+// 			return
+// 		}
+// 	}
+// 	// 新增指标
+// 	msg, err := data.MultiAddEdbInfo(addEdbInfoList, sysUser.Mobile)
+// 	if err != nil {
+// 		if msg != "" {
+// 			br.Msg = msg
+// 		} else {
+// 			br.Msg = "指标保存失败"
+// 		}
+// 		br.ErrMsg = "新增指标失败,系统错误,Err:" + err.Error()
+// 		return
+// 	}
+// 	for _, v := range addEdbInfoList {
+// 		edbCodeInfoMap[v.SecName].TradeCode = v.TradeCode
+// 	}
+// 	// 新增指标数据
+// 	addEdbDataList := make([]*models.Edbdata, 0)
+// 	for _, v := range secNameList {
+// 		// 指标数据
+// 		for date, closeVal := range secNameToDateMap[v] {
+// 			t := new(models.Edbdata)
+// 			// 理论上这里面不应该出现空值
+// 			t.TradeCode = edbCodeInfoMap[v].TradeCode
+// 			t.Dt = date
+// 			t.Close = closeVal
+// 			t.ModifyTime = time.Now()
+// 			addEdbDataList = append(addEdbDataList, t)
+// 		}
+// 	}
+// 	err = models.MultiAddEdbdata(addEdbDataList)
+// 	if err != nil {
+// 		br.Msg = "excel保存失败"
+// 		br.ErrMsg = "新增指标数据失败,系统错误,Err:" + err.Error()
+// 		return
+// 	}
+
+// 	br.Ret = 200
+// 	br.Success = true
+// 	br.Msg = "保存成功"
+// }
+
 // ExcelDataEdit
 // @Title 在线Excel编辑
 // @Description 在线Excel编辑

+ 1 - 1
models/data_manage/excel_style.go

@@ -32,7 +32,7 @@ type ExcelStyleReq struct {
 	Config           interface{}
 	Data             [][]interface{}
 	TradeCode        string `description:"指标编码"`
-	Frequence        string `description:"频度"`
+	Frequency        string `description:"频度"`
 	ClassifyId       int    `description:"分类id"`
 	OldClassifyId    int    `description:"历史分类id"`
 	OldFrequence     string `description:"历史频度"`