|
@@ -3363,6 +3363,514 @@ 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数据保存
|
|
@@ -3387,27 +3895,6 @@ 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 {
|
|
@@ -3416,23 +3903,14 @@ 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
|
|
|
|
|
|
var dateList []string
|
|
|
- dateValueMap := make(map[string]map[int]string)
|
|
|
+ secNameToDateMap := make(map[string]map[string]string)
|
|
|
//取到所有数据
|
|
|
for i := range req.Data {
|
|
|
//取到一行
|
|
@@ -3441,434 +3919,185 @@ 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 {
|
|
|
- dateList = append(dateList, dateMap["m"].(string))
|
|
|
- //fmt.Println("dateList:", dateList)
|
|
|
+ dateList = append(dateList, date)
|
|
|
} 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
|
|
|
+ // 存储数据
|
|
|
+ for j := 1; j < len(req.Data[i]); j++ {
|
|
|
+ closeVal := req.Data[i][j].(map[string]interface{})
|
|
|
+ if item, ok := secNameToDateMap[secNameList[j-1]]; ok {
|
|
|
+ item[date] = closeVal["m"].(string)
|
|
|
+ } else {
|
|
|
+ // secNameToDateMap[secNameList[j]] = make(map[string]string)
|
|
|
+ secNameToDateMap[secNameList[j-1]] = map[string]string{
|
|
|
+ date: closeVal["m"].(string),
|
|
|
}
|
|
|
- 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)
|
|
|
+
|
|
|
+ } else {
|
|
|
+ for j, dataArr := range req.Data[i] {
|
|
|
+ //每一列
|
|
|
+ if dataArr == nil {
|
|
|
+ continue
|
|
|
}
|
|
|
- }
|
|
|
- //单位列表
|
|
|
- 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)
|
|
|
+ dataMap := dataArr.(map[string]interface{})
|
|
|
+ if dataList == nil {
|
|
|
+ dataList = make([][]map[string]interface{}, len(req.Data))
|
|
|
}
|
|
|
- }
|
|
|
- //数据列表
|
|
|
- //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)
|
|
|
+ if dataList[i] == nil {
|
|
|
+ dataList[i] = make([]map[string]interface{}, len(req.Data[i]))
|
|
|
}
|
|
|
- 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
|
|
|
+ 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
|
|
|
}
|
|
|
- }
|
|
|
- // 判断指标的顺序是否发生改变
|
|
|
- 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())
|
|
|
+ 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)
|
|
|
}
|
|
|
-
|
|
|
- //判断指标数据是否已经存在
|
|
|
- tmpDataMap, ok2 := edbCodeDataMap[target.TradeCode]
|
|
|
- if !ok2 {
|
|
|
- tmpDataMap = make(map[string]string)
|
|
|
- targetDataList, tmpErr := models.GetTargetsDataList(target.TradeCode)
|
|
|
- if tmpErr != nil {
|
|
|
- err = tmpErr
|
|
|
+ }
|
|
|
+ //频度列表
|
|
|
+ if v == "频度" {
|
|
|
+ for nameIndex := 1; nameIndex < len(req.Data[i]); nameIndex++ {
|
|
|
+ if req.Data[i][nameIndex] == nil {
|
|
|
+ break
|
|
|
}
|
|
|
- for _, tmpData := range targetDataList {
|
|
|
- tmpDataMap[tmpData.Dt] = tmpData.Close
|
|
|
+ frequencyMap := req.Data[i][nameIndex].(map[string]interface{})
|
|
|
+ frequency, _ := frequencyMap["m"]
|
|
|
+ if frequency == nil {
|
|
|
+ continue
|
|
|
}
|
|
|
- edbCodeDataMap[target.TradeCode] = tmpDataMap
|
|
|
+ frequencyList = append(frequencyList, frequencyMap["m"].(string))
|
|
|
}
|
|
|
-
|
|
|
- //判断数据是否已经存在
|
|
|
- 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
|
|
|
- }
|
|
|
+ }
|
|
|
+ //单位列表
|
|
|
+ if v == "单位" {
|
|
|
+ for nameIndex := 1; nameIndex < len(req.Data[i]); nameIndex++ {
|
|
|
+ if req.Data[i][nameIndex] == nil {
|
|
|
+ break
|
|
|
}
|
|
|
- } 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
|
|
|
+ unitMap := req.Data[i][nameIndex].(map[string]interface{})
|
|
|
+ unit, _ := unitMap["m"]
|
|
|
+ if unit == nil {
|
|
|
+ continue
|
|
|
}
|
|
|
+ unitList = append(unitList, unitMap["m"].(string))
|
|
|
}
|
|
|
-
|
|
|
- //保存关联表
|
|
|
- //{
|
|
|
- // //判断映射表是否已经存在
|
|
|
- // 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{})
|
|
|
+ // 所有的指标数据map
|
|
|
+ edbCodeDataMap := make(map[string]*models.EdbInfoItem)
|
|
|
+
|
|
|
+ if len(frequencyList) == 0 {
|
|
|
+ br.Ret = 200
|
|
|
+ br.Success = true
|
|
|
+ br.Msg = "保存成功"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 获取当前类所有的有效指标
|
|
|
+ list, err := models.GetTargetItemListSort(req.ClassifyId, 1, frequencyList[0], "", "", []string{strconv.Itoa(req.ClassifyId)})
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "获取指标失败"
|
|
|
+ br.ErrMsg = "获取有效指标失败,系统错误,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, item := range list {
|
|
|
+ edbCodeDataMap[item.SecName] = item
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获得需要新增的指标
|
|
|
+ addEdbInfoList := make([]*models.Edbinfo, 0)
|
|
|
+ sortEdbInfoList := make([]*models.Edbinfo, 0)
|
|
|
+ for i, v := range secNameList {
|
|
|
+ if item, ok := edbCodeDataMap[v]; !ok {
|
|
|
+ t := new(models.Edbinfo)
|
|
|
+ t.SecName = v
|
|
|
+ t.Unit = unitList[i]
|
|
|
+ t.Frequency = frequencyList[i]
|
|
|
+ t.Mobile = sysUser.Mobile
|
|
|
+ t.ClassifyId = req.ClassifyId
|
|
|
+ t.UserId = sysUser.AdminId
|
|
|
+ t.Sort = len(list) + i
|
|
|
+ addEdbInfoList = append(addEdbInfoList, t)
|
|
|
+ edbCodeDataMap[t.SecName] = &models.EdbInfoItem{
|
|
|
+ TradeCode: t.TradeCode,
|
|
|
+ SecName: t.SecName,
|
|
|
+ Unit: t.Unit,
|
|
|
+ Frequency: t.Frequency,
|
|
|
+ UserId: t.UserId,
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if item.Sort != i {
|
|
|
+ t := new(models.Edbinfo)
|
|
|
+ t.TradeCode = item.TradeCode
|
|
|
+ t.Sort = i
|
|
|
+ sortEdbInfoList = append(sortEdbInfoList, t)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 更新指标顺序
|
|
|
+ for _, v := range sortEdbInfoList {
|
|
|
+ err = v.Update([]string{"sort"})
|
|
|
if err != nil {
|
|
|
- br.ErrMsg = "获取失败,Err:" + err.Error()
|
|
|
- br.Msg = "获取失败"
|
|
|
+ br.Msg = "excel保存失败"
|
|
|
+ br.ErrMsg = "excel更新顺序失败,Err:" + err.Error()
|
|
|
return
|
|
|
}
|
|
|
- fmt.Println(list)
|
|
|
+ }
|
|
|
+ // 新增指标
|
|
|
+ msg, err := data.MultiAddEdbInfo(addEdbInfoList, sysUser.Mobile)
|
|
|
+ if err != nil {
|
|
|
+ if msg != "" {
|
|
|
+ br.Msg = msg
|
|
|
+ } else {
|
|
|
+ br.Msg = "指标保存失败"
|
|
|
+ }
|
|
|
+ br.ErrMsg = "新增指标失败,系统错误,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 新增指标数据
|
|
|
+ addEdbDataList := make([]*models.Edbdata, 0)
|
|
|
+ for _, v := range secNameList {
|
|
|
+ // 指标数据
|
|
|
+ for date, closeVal := range secNameToDateMap[v] {
|
|
|
+ t := new(models.Edbdata)
|
|
|
+ // 理论上这里面不应该出现空值
|
|
|
+ t.TradeCode = edbCodeDataMap[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
|
|
|
}
|
|
|
|
|
|
- //resp := models.TargetItemListResp{
|
|
|
- // List: list,
|
|
|
- //}
|
|
|
br.Ret = 200
|
|
|
br.Success = true
|
|
|
- br.Msg = "获取成功"
|
|
|
- //br.Data = resp
|
|
|
- //br.Data = list
|
|
|
+ br.Msg = "保存成功"
|
|
|
}
|
|
|
|
|
|
// ExcelDataEdit
|