|
@@ -5,6 +5,7 @@ import (
|
|
|
"eta/eta_api/models"
|
|
|
"eta/eta_api/models/data_manage"
|
|
|
"eta/eta_api/models/system"
|
|
|
+ "eta/eta_api/services/alarm_msg"
|
|
|
"eta/eta_api/utils"
|
|
|
"fmt"
|
|
|
"github.com/shopspring/decimal"
|
|
@@ -215,445 +216,367 @@ func ManualIndexSource2Edb(req ManualIndexSource2EdbReq, lang string) (edb *data
|
|
|
return
|
|
|
}
|
|
|
|
|
|
-//func ImportManualData(path string, sysUser *system.Admin) (err error, errMsg string) {
|
|
|
-// errMsg = `导入失败`
|
|
|
-// xlFile, err := xlsx.OpenFile(path)
|
|
|
-// if err != nil {
|
|
|
-// fmt.Println(err.Error())
|
|
|
-// return
|
|
|
-// }
|
|
|
-// if len(xlFile.Sheets) <= 0 {
|
|
|
-// errMsg = "导入模板异常"
|
|
|
-// err = errors.New(errMsg)
|
|
|
-// return
|
|
|
-// }
|
|
|
-//
|
|
|
-// //导入成功数量
|
|
|
-// successCount := 0
|
|
|
-// //导入失败数据
|
|
|
-// failDataList := make([]*models.EdbdataImportFail, 0)
|
|
|
-// var indexDataList []ImportManualIndexData
|
|
|
-//
|
|
|
-// // 模板校验,然后处理成标准化格式
|
|
|
-// for _, sheet := range xlFile.Sheets {
|
|
|
-// var tmpIndexDataList []ImportManualIndexData
|
|
|
-// var tmpFailDataList []*models.EdbdataImportFail
|
|
|
-// rowList := sheet.Rows
|
|
|
-// if len(rowList) <= 0 {
|
|
|
-// errMsg = sheet.Name + "页异常"
|
|
|
-// err = errors.New(errMsg)
|
|
|
-// return
|
|
|
-// }
|
|
|
-// headerCell := rowList[0].Cells
|
|
|
-// if len(headerCell) < 7 {
|
|
|
-// errMsg = sheet.Name + "页模板异常"
|
|
|
-// err = errors.New(errMsg)
|
|
|
-// return
|
|
|
-// }
|
|
|
-//
|
|
|
-// templateName := headerCell[6].String()
|
|
|
-// switch templateName {
|
|
|
-// case "导入模板2/Import Template 2":
|
|
|
-// // 模板2需要走对应的取数逻辑
|
|
|
-// tmpIndexDataList, tmpFailDataList, err, errMsg = getDataByTemplate2(sheet, sysUser.AdminId)
|
|
|
-// default:
|
|
|
-// // 模板1需要走对应的取数逻辑
|
|
|
-// tmpIndexDataList, tmpFailDataList, err, errMsg = getDataByTemplate1(sheet, sysUser.AdminId)
|
|
|
-// }
|
|
|
-// indexDataList = append(indexDataList, tmpIndexDataList...)
|
|
|
-// failDataList = append(failDataList, tmpFailDataList...)
|
|
|
-// }
|
|
|
-//
|
|
|
-// var indexDataListMap map[string]ImportManualIndexData
|
|
|
-// for _, v := range indexDataList {
|
|
|
-// indexData, ok := indexDataListMap[v.IndexName]
|
|
|
-// if !ok {
|
|
|
-// // 没有就赋值
|
|
|
-// indexDataListMap[v.IndexName] = v
|
|
|
-// continue
|
|
|
-// }
|
|
|
-//
|
|
|
-// indexData.Unit = v.Unit
|
|
|
-// indexData.ClassName = v.ClassName
|
|
|
-// indexData.Frequency = v.Frequency
|
|
|
-//
|
|
|
-// indexData.DataMap = v.DataMap
|
|
|
-// }
|
|
|
-//
|
|
|
-// //超管账号可以查看分类下的所有频度数据
|
|
|
-// userId := sysUser.AdminId
|
|
|
-// if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_ADMIN {
|
|
|
-// userId = 0
|
|
|
-// }
|
|
|
-// //获取账户所拥有权限的分类id集合
|
|
|
-// classifyNameStrList, edbDataClassifyMap, err := GetEdbClassifyNameListByAdminId(int64(userId))
|
|
|
-// if err != nil {
|
|
|
-// errMsg = "获取分类数据失败"
|
|
|
-// return
|
|
|
-// }
|
|
|
-//
|
|
|
-// ////指标map
|
|
|
-// //targetMap := make(map[string]*models.Edbinfo)
|
|
|
-// //defer func() {
|
|
|
-// // for _, target := range targetMap {
|
|
|
-// // //结束后,清除掉对应的缓存
|
|
|
-// // key := "import:edbinfo:data:" + target.TradeCode
|
|
|
-// // utils.Rc.Delete(key)
|
|
|
-// //
|
|
|
-// // //将该指标的code加入到 “手工数据导入后刷新” 缓存
|
|
|
-// // if utils.Re == nil {
|
|
|
-// // err := utils.Rc.LPush(utils.CACHE_IMPORT_MANUAL_DATA, target.TradeCode)
|
|
|
-// // if err != nil {
|
|
|
-// // fmt.Println("CACHE_IMPORT_MANUAL_DATA LPush Err:" + err.Error())
|
|
|
-// // }
|
|
|
-// // }
|
|
|
-// // }
|
|
|
-// //}()
|
|
|
-// //
|
|
|
-// //// 所有的指标数据map
|
|
|
-// //edbCodeDataMap := make(map[string]map[string]string)
|
|
|
-//
|
|
|
-// // 遍历sheet页读取
|
|
|
-// //for _, sheet := range xlFile.Sheets {
|
|
|
-// // fmt.Println("sheet name: ", sheet.Name)
|
|
|
-// // //遍历行读取
|
|
|
-// // maxRow := sheet.MaxRow
|
|
|
-// // fmt.Println("maxRow:", maxRow)
|
|
|
-// // fmt.Println("maxRow")
|
|
|
-// // for i := 0; i < maxRow; i++ {
|
|
|
-// // if i == 1 {
|
|
|
-// // row := sheet.Row(i)
|
|
|
-// // cells := row.Cells
|
|
|
-// // if len(cells) < 6 {
|
|
|
-// // br.ErrMsg = "导入文件异常,请下载最新导入模板文件"
|
|
|
-// // br.Msg = "导入文件异常,请下载最新导入模板文件"
|
|
|
-// // return
|
|
|
-// // }
|
|
|
-// // templateFail := false
|
|
|
-// // if cells[0].Value != "品种分类" && cells[0].Value != "Species Category" {
|
|
|
-// // templateFail = true
|
|
|
-// // }
|
|
|
-// // if cells[1].Value != "录入日期" && cells[1].Value != "Input Date" {
|
|
|
-// // templateFail = true
|
|
|
-// // }
|
|
|
-// // if cells[2].Value != "指标名称" && cells[2].Value != "Indicator Name Indicator Name" {
|
|
|
-// // templateFail = true
|
|
|
-// // }
|
|
|
-// // if cells[3].Value != "值" && cells[3].Value != "Value" {
|
|
|
-// // templateFail = true
|
|
|
-// // }
|
|
|
-// // if cells[4].Value != "频度" && cells[4].Value != "Frequency" {
|
|
|
-// // templateFail = true
|
|
|
-// // }
|
|
|
-// // if cells[5].Value != "单位" && cells[5].Value != "Unit" {
|
|
|
-// // templateFail = true
|
|
|
-// // }
|
|
|
-// // if templateFail {
|
|
|
-// // br.ErrMsg = "导入文件异常,请下载最新导入模板文件"
|
|
|
-// // br.Msg = "导入文件异常,请下载最新导入模板文件"
|
|
|
-// // return
|
|
|
-// // }
|
|
|
-// // }
|
|
|
-// // if i > 1 {
|
|
|
-// // row := sheet.Row(i)
|
|
|
-// // cells := row.Cells
|
|
|
-// // if len(cells) >= 6 {
|
|
|
-// // classifyName := cells[0].Value //分类
|
|
|
-// // if classifyName == "" { //过滤空白行
|
|
|
-// // continue
|
|
|
-// // }
|
|
|
-// // cell1 := cells[1].Value
|
|
|
-// // //createDate := utils.ConvertToFormatDay(cell1) //录入日期
|
|
|
-// // createDate := cell1
|
|
|
-// // cell2 := cells[2].Value //指标名称
|
|
|
-// // secName := utils.TrimStr(cell2)
|
|
|
-// // frequency := cells[4].Value //频度
|
|
|
-// // unit := cells[5].Value //单位
|
|
|
-// //
|
|
|
-// // closeVal := cells[3].Value //值
|
|
|
-// // if strings.Contains(closeVal, "#N/A") {
|
|
|
-// // continue
|
|
|
-// // }
|
|
|
-// //
|
|
|
-// // //校验表格中的日期格式
|
|
|
-// // if strings.Contains(createDate, "-") {
|
|
|
-// // //如果是带有 - 的普通日期格式文本
|
|
|
-// // _, timeErr := time.Parse("2006-1-2", createDate)
|
|
|
-// // if timeErr != nil {
|
|
|
-// // 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
|
|
|
-// // failDataList = append(failDataList, failItem)
|
|
|
-// // //go utils.SendEmail(utils.APPNAME+"失败提醒", "导入数据 获取分类:Err:"+err.Error(), utils.EmailSendToUsers)
|
|
|
-// // continue
|
|
|
-// // }
|
|
|
-// // } else if strings.Contains(createDate, "/") {
|
|
|
-// // //如果是带有 / 的普通日期格式文本
|
|
|
-// // createDateTime, timeErr := time.Parse("2006/1/2", createDate)
|
|
|
-// // if timeErr != nil {
|
|
|
-// // 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
|
|
|
-// // failDataList = append(failDataList, failItem)
|
|
|
-// // //go utils.SendEmail(utils.APPNAME+"失败提醒", "导入数据 获取分类:Err:"+err.Error(), utils.EmailSendToUsers)
|
|
|
-// // continue
|
|
|
-// // }
|
|
|
-// // createDate = createDateTime.Format("2006-01-02")
|
|
|
-// // } else {
|
|
|
-// // //可能是excel的日期格式
|
|
|
-// // _, tmpErr := strconv.Atoi(createDate)
|
|
|
-// // if tmpErr != nil {
|
|
|
-// // 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
|
|
|
-// // failDataList = append(failDataList, failItem)
|
|
|
-// // //go utils.SendEmail(utils.APPNAME+"失败提醒", "导入数据 获取分类:Err:"+err.Error(), utils.EmailSendToUsers)
|
|
|
-// // continue
|
|
|
-// // }
|
|
|
-// // createDate = utils.ConvertToFormatDay(createDate) //录入日期
|
|
|
-// // }
|
|
|
-// //
|
|
|
-// // closeValFloat, err := cells[3].Float() //值
|
|
|
-// //
|
|
|
-// // if err != nil {
|
|
|
-// // failItem := new(models.EdbdataImportFail)
|
|
|
-// // failItem.SysUserId = strconv.Itoa(sysUser.AdminId)
|
|
|
-// // failItem.ClassifyName = classifyName
|
|
|
-// // failItem.CreateDate = createDate
|
|
|
-// // failItem.SecName = secName
|
|
|
-// // failItem.Close = cells[3].Value
|
|
|
-// // failItem.Remark = "值类型异常"
|
|
|
-// // failItem.Frequency = frequency
|
|
|
-// // failItem.Unit = unit
|
|
|
-// // failDataList = append(failDataList, failItem)
|
|
|
-// // continue
|
|
|
-// // }
|
|
|
-// // newDecimal := decimal.NewFromFloat(closeValFloat)
|
|
|
-// // newDecimal.Round(4)
|
|
|
-// // closeVal = newDecimal.String()
|
|
|
-// // if strings.Contains(closeVal, "#N/A") {
|
|
|
-// // continue
|
|
|
-// // }
|
|
|
-// // //closeVal := closeValFloat.
|
|
|
-// //
|
|
|
-// // //判断指标,类型,等数据是否正常
|
|
|
-// // classifyName = strings.Trim(classifyName, " ")
|
|
|
-// // frequency = utils.TrimStr(frequency)
|
|
|
-// // unit = utils.TrimStr(unit)
|
|
|
-// //
|
|
|
-// // // 成功数量超过20个指标,那就不导入了
|
|
|
-// // if len(targetMap) >= 150 {
|
|
|
-// // 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
|
|
|
-// // failDataList = append(failDataList, failItem)
|
|
|
-// // //go utils.SendEmail(utils.APPNAME+"失败提醒", "导入数据 获取分类:Err:"+err.Error(), utils.EmailSendToUsers)
|
|
|
-// // continue
|
|
|
-// // }
|
|
|
-// //
|
|
|
-// // if !strings.Contains(strings.Join(classifyNameStrList, ","), classifyName) {
|
|
|
-// // 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
|
|
|
-// // failDataList = append(failDataList, failItem)
|
|
|
-// // continue
|
|
|
-// // }
|
|
|
-// // //fmt.Println(classifyName, createDate, secName, closeVal)
|
|
|
-// //
|
|
|
-// // //获取指标分类信息
|
|
|
-// // classify, ok := edbDataClassifyMap[classifyName]
|
|
|
-// // if !ok {
|
|
|
-// // 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
|
|
|
-// // failDataList = append(failDataList, failItem)
|
|
|
-// // //go utils.SendEmail(utils.APPNAME+"失败提醒", "导入数据 获取分类:Err:"+err.Error(), utils.EmailSendToUsers)
|
|
|
-// // continue
|
|
|
-// // }
|
|
|
-// //
|
|
|
-// // //判断指标是否存在
|
|
|
-// // target, ok := targetMap[secName]
|
|
|
-// // if !ok {
|
|
|
-// // 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
|
|
|
-// // failDataList = append(failDataList, 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
|
|
|
-// // failDataList = append(failDataList, failItem)
|
|
|
-// // continue
|
|
|
-// // }
|
|
|
-// // tmpErr := data.AddEdbInfo(secName, unit, frequency, "", sysUser.Mobile, classify.ClassifyId, sysUser.AdminId)
|
|
|
-// // if tmpErr != nil {
|
|
|
-// // fmt.Println("line 158")
|
|
|
-// // 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
|
|
|
-// // failDataList = append(failDataList, failItem)
|
|
|
-// // continue
|
|
|
-// // }
|
|
|
-// // tmpTarget, tmpErr := models.GetTargetBySecName(secName)
|
|
|
-// // target = tmpTarget
|
|
|
-// // targetMap[secName] = target
|
|
|
-// // } else {
|
|
|
-// // fmt.Println("导入数据 获取指标:Err:" + err.Error())
|
|
|
-// // }
|
|
|
-// // } else {
|
|
|
-// // target = tmpTarget
|
|
|
-// // targetMap[secName] = target
|
|
|
-// // }
|
|
|
-// //
|
|
|
-// // //设置10分钟缓存,不允许其他地方删除
|
|
|
-// // key := "import:edbinfo:data:" + target.TradeCode
|
|
|
-// // utils.Rc.SetNX(key, 1, time.Second*600)
|
|
|
-// // }
|
|
|
-// //
|
|
|
-// // if target == nil {
|
|
|
-// // fmt.Println("指标不存在")
|
|
|
-// // 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
|
|
|
-// // failDataList = append(failDataList, failItem)
|
|
|
-// // continue
|
|
|
-// // }
|
|
|
-// //
|
|
|
-// // //更新指标信息
|
|
|
-// // updateCols := make([]string, 0)
|
|
|
-// // //更新指标分类
|
|
|
-// // if target.ClassifyId <= 0 && classify.ClassifyId > 0 {
|
|
|
-// // target.ClassifyId = classify.ClassifyId
|
|
|
-// // updateCols = append(updateCols, "ClassifyId")
|
|
|
-// // }
|
|
|
-// // if target.Frequency != frequency {
|
|
|
-// // target.Frequency = frequency
|
|
|
-// // target.NoticeTime = ""
|
|
|
-// // updateCols = append(updateCols, "Frequency", "NoticeTime")
|
|
|
-// // }
|
|
|
-// // if target.Unit != unit {
|
|
|
-// // target.Unit = unit
|
|
|
-// // updateCols = append(updateCols, "Unit")
|
|
|
-// // }
|
|
|
-// // if len(updateCols) > 0 {
|
|
|
-// // _ = target.Update(updateCols)
|
|
|
-// // }
|
|
|
-// //
|
|
|
-// // // 判断指标数据列表是否已经存在
|
|
|
-// // tmpDataMap, ok := edbCodeDataMap[target.TradeCode]
|
|
|
-// // if !ok {
|
|
|
-// // tmpDataMap = make(map[string]string)
|
|
|
-// // dataList, tmpErr := models.GetTargetsDataList(target.TradeCode)
|
|
|
-// // if tmpErr != nil {
|
|
|
-// // go alarm_msg.SendAlarmMsg("导入数据"+target.TradeCode+" 获取指标的数据失败,Err:"+err.Error(), 3)
|
|
|
-// // }
|
|
|
-// // for _, tmpData := range dataList {
|
|
|
-// // tmpDataMap[tmpData.Dt] = tmpData.Close
|
|
|
-// // }
|
|
|
-// // edbCodeDataMap[target.TradeCode] = tmpDataMap
|
|
|
-// // }
|
|
|
-// //
|
|
|
-// // //判断数据是否已经存在
|
|
|
-// // tmpVal, ok := tmpDataMap[createDate]
|
|
|
-// // //数据已存在,进行更新操作
|
|
|
-// // if ok {
|
|
|
-// // if tmpVal != closeVal {
|
|
|
-// // err = models.ModifyTargetsDataByImport(target.TradeCode, createDate, closeVal)
|
|
|
-// // if err != nil {
|
|
|
-// // go alarm_msg.SendAlarmMsg("导入数据 修改数据失败,Err:"+err.Error(), 3)
|
|
|
-// // //go utils.SendEmail(utils.APPNAME+"失败提醒", "导入数据 修改数据失败:Err:"+err.Error(), utils.EmailSendToUsers)
|
|
|
-// // }
|
|
|
-// // }
|
|
|
-// // } else { //数据不存在,进行新增操作
|
|
|
-// // if target.TradeCode != "" && createDate != "" && closeVal != "" {
|
|
|
-// // models.AddTargetsDataByImport(target.TradeCode, createDate, closeVal)
|
|
|
-// // if err != nil {
|
|
|
-// // go alarm_msg.SendAlarmMsg("导入数据 新增数据失败,Err:"+err.Error(), 3)
|
|
|
-// // //go utils.SendEmail(utils.APPNAME+"失败提醒", "导入数据 新增数据失败:Err:"+err.Error(), utils.EmailSendToUsers)
|
|
|
-// // }
|
|
|
-// // tmpDataMap[createDate] = closeVal
|
|
|
-// // edbCodeDataMap[target.TradeCode] = tmpDataMap
|
|
|
-// // }
|
|
|
-// // }
|
|
|
-// // successCount++
|
|
|
-// // } else {
|
|
|
-// // //br.ErrMsg = "请填写导入内容"
|
|
|
-// // //br.Msg = "请填写导入内容"
|
|
|
-// // //return
|
|
|
-// // }
|
|
|
-// // }
|
|
|
-// // }
|
|
|
-// //}
|
|
|
-//
|
|
|
-// return
|
|
|
-//}
|
|
|
+func ImportManualData(path string, sysUser *system.Admin) (successCount, failCount int, err error, errMsg string) {
|
|
|
+ errMsg = `导入失败`
|
|
|
+ xlFile, err := xlsx.OpenFile(path)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println(err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if len(xlFile.Sheets) <= 0 {
|
|
|
+ errMsg = "导入模板异常"
|
|
|
+ err = errors.New(errMsg)
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ //导入失败数据
|
|
|
+ failDataList := make([]*models.EdbdataImportFail, 0)
|
|
|
+ var indexDataList []ImportManualIndexData
|
|
|
+ // 指标名称列表
|
|
|
+ indexNameList := make([]string, 0)
|
|
|
+
|
|
|
+ // 模板校验,然后处理成标准化格式
|
|
|
+ for _, sheet := range xlFile.Sheets {
|
|
|
+ var tmpIndexDataList []ImportManualIndexData
|
|
|
+ var tmpFailDataList []*models.EdbdataImportFail
|
|
|
+ rowList := sheet.Rows
|
|
|
+ if len(rowList) <= 0 {
|
|
|
+ errMsg = sheet.Name + "页异常"
|
|
|
+ err = errors.New(errMsg)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ headerCell := rowList[0].Cells
|
|
|
+ if len(headerCell) < 7 {
|
|
|
+ errMsg = sheet.Name + "页模板异常"
|
|
|
+ err = errors.New(errMsg)
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ templateName := headerCell[6].String()
|
|
|
+ switch templateName {
|
|
|
+ case "导入模板2/Import Template 2":
|
|
|
+ // 模板2需要走对应的取数逻辑
|
|
|
+ tmpIndexDataList, tmpFailDataList, err, errMsg = getDataByTemplate2(sheet, sysUser.AdminId)
|
|
|
+ default:
|
|
|
+ // 模板1需要走对应的取数逻辑
|
|
|
+ tmpIndexDataList, tmpFailDataList, err, errMsg = getDataByTemplate1(sheet, sysUser.AdminId)
|
|
|
+ }
|
|
|
+ indexDataList = append(indexDataList, tmpIndexDataList...)
|
|
|
+ failDataList = append(failDataList, tmpFailDataList...)
|
|
|
+ }
|
|
|
+
|
|
|
+ var indexDataListMap map[string]ImportManualIndexData
|
|
|
+ for _, v := range indexDataList {
|
|
|
+ indexData, ok := indexDataListMap[v.IndexName]
|
|
|
+ if !ok {
|
|
|
+ // 没有就赋值
|
|
|
+ indexDataListMap[v.IndexName] = v
|
|
|
+ indexNameList = append(indexNameList, v.IndexName)
|
|
|
+ continue
|
|
|
+ }
|
|
|
+
|
|
|
+ indexData.Unit = v.Unit
|
|
|
+ indexData.ClassName = v.ClassName
|
|
|
+ indexData.Frequency = v.Frequency
|
|
|
+
|
|
|
+ indexData.DataMap = v.DataMap
|
|
|
+ }
|
|
|
+
|
|
|
+ if len(indexNameList) <= 0 {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ //超管账号可以查看分类下的所有频度数据
|
|
|
+ userId := sysUser.AdminId
|
|
|
+ if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_ADMIN {
|
|
|
+ userId = 0
|
|
|
+ }
|
|
|
+ //获取账户所拥有权限的分类id集合
|
|
|
+ classifyNameStrList, edbDataClassifyMap, err := GetEdbClassifyNameListByAdminId(int64(userId))
|
|
|
+ if err != nil {
|
|
|
+ errMsg = "获取分类数据失败"
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ //指标map
|
|
|
+ targetMap := make(map[string]*models.Edbinfo)
|
|
|
+ defer func() {
|
|
|
+ for _, target := range targetMap {
|
|
|
+ //结束后,清除掉对应的缓存
|
|
|
+ key := "import:edbinfo:data:" + target.TradeCode
|
|
|
+ utils.Rc.Delete(key)
|
|
|
+
|
|
|
+ //将该指标的code加入到 “手工数据导入后刷新” 缓存
|
|
|
+ if utils.Re == nil {
|
|
|
+ err := utils.Rc.LPush(utils.CACHE_IMPORT_MANUAL_DATA, target.TradeCode)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("CACHE_IMPORT_MANUAL_DATA LPush Err:" + err.Error())
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }()
|
|
|
+
|
|
|
+ // 所有的指标数据map
|
|
|
+ edbCodeDataMap := make(map[string]map[string]string)
|
|
|
+
|
|
|
+ {
|
|
|
+ // 获取指标信息
|
|
|
+ manualIndexList, tmpErr := models.GetEdbinfoBySecNameList(indexNameList)
|
|
|
+ if tmpErr != nil {
|
|
|
+ err = tmpErr
|
|
|
+ errMsg = "获取指标信息失败"
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ tradeCodeList := make([]string, 0)
|
|
|
+ for _, v := range manualIndexList {
|
|
|
+ targetMap[v.SecName] = v
|
|
|
+ tradeCodeList = append(tradeCodeList, v.TradeCode)
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取明细数据
|
|
|
+ dataList, tmpErr := models.GetTargetsDataListByCodeList(tradeCodeList)
|
|
|
+ if tmpErr != nil {
|
|
|
+ err = tmpErr
|
|
|
+ errMsg = "获取指标明细数据失败"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ for _, tmpData := range dataList {
|
|
|
+ //tmpDataMap,ok := edbCodeDataMap[tmpData.TradeCode]
|
|
|
+ //if !ok{
|
|
|
+ // tmpDataMap = make(map[string]string)
|
|
|
+ //}
|
|
|
+ edbCodeDataMap[tmpData.TradeCode][tmpData.Dt] = tmpData.Close
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //// TODO 成功数量超过20个指标,那就不导入了
|
|
|
+ //if len(targetMap) >= 150 {
|
|
|
+ // 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
|
|
|
+ // failDataList = append(failDataList, failItem)
|
|
|
+ // //go utils.SendEmail(utils.APPNAME+"失败提醒", "导入数据 获取分类:Err:"+err.Error(), utils.EmailSendToUsers)
|
|
|
+ // continue
|
|
|
+ //}
|
|
|
+
|
|
|
+ errMsgList := make([]string, 0)
|
|
|
+ addDataList := make([]*models.Edbdata, 0)
|
|
|
+
|
|
|
+ for _, v := range indexDataListMap {
|
|
|
+ if len(v.DataMap) <= 0 {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ var tmpDate, tmpValue string
|
|
|
+ for date, val := range v.DataMap {
|
|
|
+ tmpDate = date
|
|
|
+ tmpValue = val
|
|
|
+ break
|
|
|
+ }
|
|
|
+ if !strings.Contains(strings.Join(classifyNameStrList, ","), v.ClassName) {
|
|
|
+ failItem := &models.EdbdataImportFail{
|
|
|
+ ClassifyName: v.ClassName,
|
|
|
+ CreateDate: tmpDate,
|
|
|
+ SecName: v.IndexName,
|
|
|
+ Close: tmpValue,
|
|
|
+ Remark: "没有该品种分类权限",
|
|
|
+ SysUserId: fmt.Sprint(sysUser.AdminId),
|
|
|
+ Frequency: v.Frequency,
|
|
|
+ Unit: v.Unit,
|
|
|
+ }
|
|
|
+ failDataList = append(failDataList, failItem)
|
|
|
+ continue
|
|
|
+ }
|
|
|
+
|
|
|
+ //获取指标分类信息
|
|
|
+ classify, ok := edbDataClassifyMap[v.ClassName]
|
|
|
+ if !ok {
|
|
|
+ failItem := &models.EdbdataImportFail{
|
|
|
+ ClassifyName: v.ClassName,
|
|
|
+ CreateDate: tmpDate,
|
|
|
+ SecName: v.IndexName,
|
|
|
+ Close: tmpValue,
|
|
|
+ Remark: "指标分类不存在",
|
|
|
+ SysUserId: fmt.Sprint(sysUser.AdminId),
|
|
|
+ Frequency: v.Frequency,
|
|
|
+ Unit: v.Unit,
|
|
|
+ }
|
|
|
+ failDataList = append(failDataList, failItem)
|
|
|
+ continue
|
|
|
+ }
|
|
|
+
|
|
|
+ target, ok := targetMap[v.IndexName]
|
|
|
+ if !ok {
|
|
|
+ if v.Frequency == "" {
|
|
|
+ failItem := &models.EdbdataImportFail{
|
|
|
+ ClassifyName: v.ClassName,
|
|
|
+ CreateDate: tmpDate,
|
|
|
+ SecName: v.IndexName,
|
|
|
+ Close: tmpValue,
|
|
|
+ Remark: "新增指标失败,频度字段为空",
|
|
|
+ SysUserId: fmt.Sprint(sysUser.AdminId),
|
|
|
+ Frequency: v.Frequency,
|
|
|
+ Unit: v.Unit,
|
|
|
+ }
|
|
|
+ failDataList = append(failDataList, failItem)
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ if v.Unit == "" {
|
|
|
+ failItem := &models.EdbdataImportFail{
|
|
|
+ ClassifyName: v.ClassName,
|
|
|
+ CreateDate: tmpDate,
|
|
|
+ SecName: v.IndexName,
|
|
|
+ Close: tmpValue,
|
|
|
+ Remark: "新增指标失败,单位字段为空",
|
|
|
+ SysUserId: fmt.Sprint(sysUser.AdminId),
|
|
|
+ Frequency: v.Frequency,
|
|
|
+ Unit: v.Unit,
|
|
|
+ }
|
|
|
+ failDataList = append(failDataList, failItem)
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ tmpErr := AddEdbInfo(v.IndexName, v.Unit, v.Frequency, "", sysUser.Mobile, classify.ClassifyId, sysUser.AdminId)
|
|
|
+ if tmpErr != nil {
|
|
|
+ fmt.Println("line 158")
|
|
|
+
|
|
|
+ failItem := &models.EdbdataImportFail{
|
|
|
+ ClassifyName: v.ClassName,
|
|
|
+ CreateDate: tmpDate,
|
|
|
+ SecName: v.IndexName,
|
|
|
+ Close: tmpValue,
|
|
|
+ Remark: "新增指标失败",
|
|
|
+ SysUserId: fmt.Sprint(sysUser.AdminId),
|
|
|
+ Frequency: v.Frequency,
|
|
|
+ Unit: v.Unit,
|
|
|
+ }
|
|
|
+ failDataList = append(failDataList, failItem)
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ tmpTarget, tmpErr := models.GetTargetBySecName(v.IndexName)
|
|
|
+ target = tmpTarget
|
|
|
+ targetMap[v.IndexName] = target
|
|
|
+ }
|
|
|
+
|
|
|
+ if target == nil {
|
|
|
+ fmt.Println("指标不存在")
|
|
|
+ failItem := &models.EdbdataImportFail{
|
|
|
+ ClassifyName: v.ClassName,
|
|
|
+ CreateDate: tmpDate,
|
|
|
+ SecName: v.IndexName,
|
|
|
+ Close: tmpValue,
|
|
|
+ Remark: "指标不存在",
|
|
|
+ SysUserId: fmt.Sprint(sysUser.AdminId),
|
|
|
+ Frequency: v.Frequency,
|
|
|
+ Unit: v.Unit,
|
|
|
+ }
|
|
|
+ failDataList = append(failDataList, failItem)
|
|
|
+ continue
|
|
|
+ }
|
|
|
+
|
|
|
+ //设置10分钟缓存,不允许其他地方删除
|
|
|
+ key := "import:edbinfo:data:" + target.TradeCode
|
|
|
+ utils.Rc.SetNX(key, 1, time.Second*600)
|
|
|
+
|
|
|
+ //更新指标信息
|
|
|
+ {
|
|
|
+ updateCols := make([]string, 0)
|
|
|
+ //更新指标分类
|
|
|
+ if target.ClassifyId <= 0 && classify.ClassifyId > 0 {
|
|
|
+ target.ClassifyId = classify.ClassifyId
|
|
|
+ updateCols = append(updateCols, "ClassifyId")
|
|
|
+ }
|
|
|
+ if target.Frequency != v.Frequency {
|
|
|
+ target.Frequency = v.Frequency
|
|
|
+ target.NoticeTime = ""
|
|
|
+ updateCols = append(updateCols, "Frequency", "NoticeTime")
|
|
|
+ }
|
|
|
+ if target.Unit != v.Unit {
|
|
|
+ target.Unit = v.Unit
|
|
|
+ updateCols = append(updateCols, "Unit")
|
|
|
+ }
|
|
|
+ if len(updateCols) > 0 {
|
|
|
+ _ = target.Update(updateCols)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ {
|
|
|
+ // 判断指标数据列表是否已经存在
|
|
|
+ tmpDataMap, ok := edbCodeDataMap[target.TradeCode]
|
|
|
+ if !ok {
|
|
|
+ tmpDataMap = make(map[string]string)
|
|
|
+ }
|
|
|
+
|
|
|
+ for createDate, closeVal := range v.DataMap {
|
|
|
+ //判断数据是否已经存在
|
|
|
+ tmpVal, ok := tmpDataMap[createDate]
|
|
|
+ //数据已存在,进行更新操作
|
|
|
+ if ok {
|
|
|
+ if tmpVal != closeVal {
|
|
|
+ edbCodeDataMap[target.TradeCode][createDate] = closeVal
|
|
|
+ tmpErr := models.ModifyTargetsDataByImport(target.TradeCode, createDate, closeVal)
|
|
|
+ if tmpErr != nil {
|
|
|
+ errMsgList = append(errMsgList, fmt.Sprintf("%s修改数据失败,日期:%s,值:%v,Err:%s", target.TradeCode, createDate, closeVal, tmpErr.Error()))
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else { //数据不存在,进行新增操作
|
|
|
+ if target.TradeCode != "" && createDate != "" && closeVal != "" {
|
|
|
+ addDataList = append(addDataList, &models.Edbdata{
|
|
|
+ TradeCode: target.TradeCode,
|
|
|
+ Dt: createDate,
|
|
|
+ Close: closeVal,
|
|
|
+ ModifyTime: time.Now(),
|
|
|
+ })
|
|
|
+ edbCodeDataMap[target.TradeCode][createDate] = closeVal
|
|
|
+ }
|
|
|
+ }
|
|
|
+ successCount++
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 批量添加明细数据
|
|
|
+ if len(addDataList) > 0 {
|
|
|
+ tmpErr := models.OnlyMultiAddEdbdata(addDataList)
|
|
|
+ if tmpErr != nil {
|
|
|
+ fmt.Println("line 221")
|
|
|
+ errMsgList = append(errMsgList, fmt.Sprintf("批量添加明细数据失败,Err:%s", tmpErr.Error()))
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 失败数量
|
|
|
+ failCount = len(failDataList)
|
|
|
+ //fmt.Println("failDataList:", len(failDataList))
|
|
|
+ if failCount > 0 {
|
|
|
+ //先删除导入失败记录
|
|
|
+ _ = models.DelEdbDataImportFail(sysUser.AdminId)
|
|
|
+
|
|
|
+ // 批量添加导入失败记录
|
|
|
+ err = models.MultiAddEdbdataImportFail(failDataList)
|
|
|
+ if err != nil {
|
|
|
+ go alarm_msg.SendAlarmMsg("导入数据 新增失败记录失败,Err:"+err.Error(), 3)
|
|
|
+ //go utils.SendEmail(utils.APPNAME+"失败提醒", "导入数据 新增失败记录失败:Err:"+err.Error(), utils.EmailSendToUsers)
|
|
|
+ }
|
|
|
+
|
|
|
+ {
|
|
|
+ //错误信息字符串切片,最后作为发送邮件通知使用
|
|
|
+ failContents := make([]string, 0)
|
|
|
+ for _, v := range failDataList {
|
|
|
+ failContents = append(failContents, fmt.Sprint(v.SecName, "导入失败:", v.Remark))
|
|
|
+ }
|
|
|
+ utils.FileLog.Info("导入数据 存在部分数据导入失败:" + strings.Join(failContents, ";"))
|
|
|
+ //导入失败的话,最后统一邮件提醒就好啦,不需要每次都去提醒
|
|
|
+ go alarm_msg.SendAlarmMsg("导入数据 存在部分数据导入失败:"+strings.Join(failContents, ";"), 3)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return
|
|
|
+}
|
|
|
|
|
|
// ImportManualIndexData
|
|
|
// @Description: excel模板后的内容
|