|
@@ -184,6 +184,20 @@ func (this *TargetController) DataAdd() {
|
|
br.ErrMsg = "新增失败,Err:" + err.Error()
|
|
br.ErrMsg = "新增失败,Err:" + err.Error()
|
|
return
|
|
return
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ // 添加操作记录
|
|
|
|
+ go func() {
|
|
|
|
+ record := &models.EdbinfoOpRecord{
|
|
|
|
+ TradeCode: edbdata.TradeCode,
|
|
|
|
+ Remark: "更新数据",
|
|
|
|
+ UserId: this.SysUser.AdminId,
|
|
|
|
+ UserName: this.SysUser.RealName,
|
|
|
|
+ CreateTime: time.Now(),
|
|
|
|
+ }
|
|
|
|
+ data.ModifyManualEdbMaxMinDate(edbdata.TradeCode)
|
|
|
|
+ _ = record.Create()
|
|
|
|
+ }()
|
|
|
|
+
|
|
br.Ret = 200
|
|
br.Ret = 200
|
|
br.Success = true
|
|
br.Success = true
|
|
br.Msg = "新增成功"
|
|
br.Msg = "新增成功"
|
|
@@ -444,7 +458,7 @@ func (this *TargetController) TargetList() {
|
|
return
|
|
return
|
|
}
|
|
}
|
|
total := 0
|
|
total := 0
|
|
- list := make([]*models.Edbinfo, 0)
|
|
|
|
|
|
+ list := make([]*models.EdbinfoItem, 0)
|
|
|
|
|
|
//有分类数据权限才查询
|
|
//有分类数据权限才查询
|
|
if len(classifyIdStrList) > 0 {
|
|
if len(classifyIdStrList) > 0 {
|
|
@@ -483,14 +497,14 @@ func (this *TargetController) TargetList() {
|
|
br.ErrMsg = "获取失败,Err:" + err.Error()
|
|
br.ErrMsg = "获取失败,Err:" + err.Error()
|
|
return
|
|
return
|
|
}
|
|
}
|
|
- tmpList, err := models.GetEdbinfoList(condition, pars, startSize, pageSize, mobile, sysUser.RoleType)
|
|
|
|
|
|
+ tmpList, err := models.GetEdbinfoItemList(condition, pars, startSize, pageSize, mobile, sysUser.RoleType)
|
|
if err != nil {
|
|
if err != nil {
|
|
br.Msg = "获取失败"
|
|
br.Msg = "获取失败"
|
|
br.ErrMsg = "获取失败,Err:" + err.Error()
|
|
br.ErrMsg = "获取失败,Err:" + err.Error()
|
|
return
|
|
return
|
|
}
|
|
}
|
|
if len(tmpList) <= 0 {
|
|
if len(tmpList) <= 0 {
|
|
- list = make([]*models.Edbinfo, 0)
|
|
|
|
|
|
+ list = make([]*models.EdbinfoItem, 0)
|
|
} else {
|
|
} else {
|
|
list = tmpList
|
|
list = tmpList
|
|
}
|
|
}
|
|
@@ -577,7 +591,8 @@ func (this *TargetController) TargetAdd() {
|
|
br.Msg = "指标名称已存在"
|
|
br.Msg = "指标名称已存在"
|
|
return
|
|
return
|
|
}
|
|
}
|
|
- err = models.AddEdbinfo(maxTradeCode, req.SecName, req.Unit, "手动", req.Frequency, req.NoticeTime, req.ClassifyId, sysUser.AdminId)
|
|
|
|
|
|
+
|
|
|
|
+ err = models.AddEdbinfo(maxTradeCode, req.SecName, req.Unit, "手动", req.Frequency, req.NoticeTime, req.ClassifyId, sysUser.AdminId, sysUser.RealName)
|
|
if err != nil {
|
|
if err != nil {
|
|
br.Msg = "新增失败"
|
|
br.Msg = "新增失败"
|
|
br.ErrMsg = "新增失败,Err:" + err.Error()
|
|
br.ErrMsg = "新增失败,Err:" + err.Error()
|
|
@@ -750,10 +765,12 @@ func (this *TargetController) ClassifyList() {
|
|
edbInfoGroupCountMap[edbInfoGroupCount.ClassifyId] = edbInfoGroupCount.Count
|
|
edbInfoGroupCountMap[edbInfoGroupCount.ClassifyId] = edbInfoGroupCount.Count
|
|
}
|
|
}
|
|
for _, classifyList := range list {
|
|
for _, classifyList := range list {
|
|
|
|
+ classifyList.UniqueCode = utils.MD5(fmt.Sprint(classifyList.ClassifyId))
|
|
if classifyList.Child != nil {
|
|
if classifyList.Child != nil {
|
|
for _, classify := range classifyList.Child {
|
|
for _, classify := range classifyList.Child {
|
|
if total, ok := edbInfoGroupCountMap[classify.ClassifyId]; ok {
|
|
if total, ok := edbInfoGroupCountMap[classify.ClassifyId]; ok {
|
|
classify.EdbInfoTotal = total
|
|
classify.EdbInfoTotal = total
|
|
|
|
+ classify.UniqueCode = utils.MD5(fmt.Sprint(classify.ClassifyId))
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -771,6 +788,7 @@ func (this *TargetController) ClassifyList() {
|
|
// @Title 下载模板
|
|
// @Title 下载模板
|
|
// @Description 下载模板
|
|
// @Description 下载模板
|
|
// @Success 200 {object} models.EdbdataClassifyResp
|
|
// @Success 200 {object} models.EdbdataClassifyResp
|
|
|
|
+// @Param Source query int false "来源:1:模板1;2:模板2"
|
|
// @router /template [get]
|
|
// @router /template [get]
|
|
func (this *TargetCommonController) TemplateDownload() {
|
|
func (this *TargetCommonController) TemplateDownload() {
|
|
br := new(models.BaseResponse).Init()
|
|
br := new(models.BaseResponse).Init()
|
|
@@ -778,8 +796,15 @@ func (this *TargetCommonController) TemplateDownload() {
|
|
this.Data["json"] = br
|
|
this.Data["json"] = br
|
|
this.ServeJSON()
|
|
this.ServeJSON()
|
|
}()
|
|
}()
|
|
|
|
+ source, _ := this.GetInt("Source")
|
|
|
|
+ switch source {
|
|
|
|
+ case 2:
|
|
|
|
+ this.Ctx.Output.Download("./static/template/导入模板2.xlsx", "数据导入模板2.xlsx")
|
|
|
|
+ default:
|
|
|
|
+ this.Ctx.Output.Download("./static/template/导入模板1.xlsx", "数据导入模板1.xlsx")
|
|
|
|
+ }
|
|
|
|
|
|
- this.Ctx.Output.Download("./static/数据导入模板.xlsx", "数据导入模板.xlsx")
|
|
|
|
|
|
+ //this.Ctx.Output.Download("./static/数据导入模板.xlsx", "数据导入模板.xlsx")
|
|
|
|
|
|
br.Ret = 200
|
|
br.Ret = 200
|
|
br.Success = true
|
|
br.Success = true
|
|
@@ -805,460 +830,6 @@ func (this *TargetCommonController) TemplateDownloadEn() {
|
|
br.Msg = "下载成功"
|
|
br.Msg = "下载成功"
|
|
}
|
|
}
|
|
|
|
|
|
-// ImportData
|
|
|
|
-// @Title 导入数据
|
|
|
|
-// @Description 导入数据
|
|
|
|
-// @Param EntryFile query file true "文件"
|
|
|
|
-// @Success 200 Ret=200 录入成功
|
|
|
|
-// @router /import/data [post]
|
|
|
|
-func (this *TargetController) ImportData() {
|
|
|
|
- br := new(models.BaseResponse).Init()
|
|
|
|
- defer func() {
|
|
|
|
- this.Data["json"] = br
|
|
|
|
- this.ServeJSON()
|
|
|
|
- }()
|
|
|
|
- sysUser := this.SysUser
|
|
|
|
- if sysUser == nil {
|
|
|
|
- br.Msg = "请重新登录"
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
- file, _, err := this.GetFile("EntryFile")
|
|
|
|
- if err != nil {
|
|
|
|
- br.Msg = "获取文件失败"
|
|
|
|
- br.ErrMsg = "获取文件失败,Err:" + err.Error()
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
- path := "./static/数据导入_" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
|
|
|
|
- defer file.Close()
|
|
|
|
- err = this.SaveToFile("EntryFile", path)
|
|
|
|
- if err != nil {
|
|
|
|
- br.Msg = "文件保存失败"
|
|
|
|
- br.ErrMsg = "文件保存失败,Err:" + err.Error()
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
- if utils.RunMode == "debug" {
|
|
|
|
- defer os.Remove(path)
|
|
|
|
- }
|
|
|
|
- xlFile, err := xlsx.OpenFile(path)
|
|
|
|
- if err != nil {
|
|
|
|
- fmt.Println(err.Error())
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- //超管账号可以查看分类下的所有频度数据
|
|
|
|
- userId := sysUser.AdminId
|
|
|
|
- if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_ADMIN {
|
|
|
|
- userId = 0
|
|
|
|
- }
|
|
|
|
- //获取账户所拥有权限的分类id集合
|
|
|
|
- classifyNameStrList, edbDataClassifyMap, err := data.GetEdbClassifyNameListByAdminId(int64(userId))
|
|
|
|
- if err != nil {
|
|
|
|
- br.Msg = "获取分类数据失败"
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- //导入成功数量
|
|
|
|
- successCount := 0
|
|
|
|
- //导入失败数据
|
|
|
|
- failDatas := make([]*models.EdbdataImportFail, 0)
|
|
|
|
-
|
|
|
|
- //指标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
|
|
|
|
- failDatas = append(failDatas, 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
|
|
|
|
- failDatas = append(failDatas, 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
|
|
|
|
- failDatas = append(failDatas, 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
|
|
|
|
- failDatas = append(failDatas, 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
|
|
|
|
- failDatas = append(failDatas, 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
|
|
|
|
- failDatas = append(failDatas, 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
|
|
|
|
- failDatas = append(failDatas, 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
|
|
|
|
- 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, 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
|
|
|
|
- failDatas = append(failDatas, 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
|
|
|
|
- failDatas = append(failDatas, 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
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- resp := models.EdbdataImportResp{
|
|
|
|
- SuccessCount: successCount,
|
|
|
|
- FailCount: len(failDatas),
|
|
|
|
- }
|
|
|
|
- fmt.Println("failDatas:", len(failDatas))
|
|
|
|
- if len(failDatas) > 0 {
|
|
|
|
- //先删除导入失败记录
|
|
|
|
- _ = models.DelEdbDataImportFail(sysUser.AdminId)
|
|
|
|
- //错误信息字符串切片,最后作为发送邮件通知使用
|
|
|
|
- failContents := make([]string, 0)
|
|
|
|
- for _, v := range failDatas {
|
|
|
|
- failContents = append(failContents, fmt.Sprint(v.SecName, "导入失败:", v.Remark))
|
|
|
|
- err = models.AddEdbdataImportFail(v)
|
|
|
|
- if err != nil {
|
|
|
|
- go alarm_msg.SendAlarmMsg("导入数据 新增失败记录失败,Err:"+err.Error(), 3)
|
|
|
|
- //go utils.SendEmail(utils.APPNAME+"失败提醒", "导入数据 新增失败记录失败:Err:"+err.Error(), utils.EmailSendToUsers)
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- //导入失败的话,最后统一邮件提醒就好啦,不需要每次都去提醒
|
|
|
|
- go alarm_msg.SendAlarmMsg("导入数据 存在部分数据导入失败:"+strings.Join(failContents, ";"), 3)
|
|
|
|
- //go utils.SendEmail(utils.APPNAME+"失败提醒", "导入数据 存在部分数据导入失败:"+strings.Join(failContents, ";"), utils.EmailSendToUsers)
|
|
|
|
-
|
|
|
|
- if successCount == 0 {
|
|
|
|
- resp.Status = -1
|
|
|
|
- resp.Msg = "导入失败"
|
|
|
|
- } else {
|
|
|
|
- resp.Status = 1
|
|
|
|
- resp.Msg = "存在部分导入失败"
|
|
|
|
- }
|
|
|
|
- } else {
|
|
|
|
- resp.Status = 0
|
|
|
|
- }
|
|
|
|
- br.Msg = "导入成功"
|
|
|
|
- br.Ret = 200
|
|
|
|
- br.Success = true
|
|
|
|
- br.Data = resp
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
// ImportFailListDownload
|
|
// ImportFailListDownload
|
|
// @Title 下载失败列表
|
|
// @Title 下载失败列表
|
|
// @Description 下载失败列表
|
|
// @Description 下载失败列表
|
|
@@ -1288,29 +859,19 @@ func (this *TargetController) ImportFailListDownload() {
|
|
}
|
|
}
|
|
sheet, err := xlsxFile.AddSheet(SheetName)
|
|
sheet, err := xlsxFile.AddSheet(SheetName)
|
|
headRow := sheet.AddRow()
|
|
headRow := sheet.AddRow()
|
|
- if this.Lang == utils.EnLangVersion {
|
|
|
|
- headRow.AddCell().SetValue("Species Category")
|
|
|
|
- headRow.AddCell().SetValue("Input Date")
|
|
|
|
- headRow.AddCell().SetValue("Indicator Name Indicator Name")
|
|
|
|
- headRow.AddCell().SetValue("Value")
|
|
|
|
- headRow.AddCell().SetValue("Frequency")
|
|
|
|
- headRow.AddCell().SetValue("Unit")
|
|
|
|
- headRow.AddCell().SetValue("Remark")
|
|
|
|
- } else {
|
|
|
|
- headRow.AddCell().SetValue("品种分类")
|
|
|
|
- headRow.AddCell().SetValue("录入日期")
|
|
|
|
- headRow.AddCell().SetValue("指标名称")
|
|
|
|
- headRow.AddCell().SetValue("值")
|
|
|
|
- headRow.AddCell().SetValue("频度")
|
|
|
|
- headRow.AddCell().SetValue("单位")
|
|
|
|
- headRow.AddCell().SetValue("备注")
|
|
|
|
- }
|
|
|
|
|
|
+ headRow.AddCell().SetValue("品种/Variety")
|
|
|
|
+ headRow.AddCell().SetValue("指标名称/Indicator Name")
|
|
|
|
+ headRow.AddCell().SetValue("指标日期/Indicator Date")
|
|
|
|
+ headRow.AddCell().SetValue("值/Value")
|
|
|
|
+ headRow.AddCell().SetValue("频度/Frequency")
|
|
|
|
+ headRow.AddCell().SetValue("单位/Unit")
|
|
|
|
+ headRow.AddCell().SetValue("备注/Note")
|
|
|
|
|
|
for _, v := range item {
|
|
for _, v := range item {
|
|
row := sheet.AddRow()
|
|
row := sheet.AddRow()
|
|
row.AddCell().SetValue(v.ClassifyName)
|
|
row.AddCell().SetValue(v.ClassifyName)
|
|
- row.AddCell().SetValue(v.CreateDate)
|
|
|
|
row.AddCell().SetValue(v.SecName)
|
|
row.AddCell().SetValue(v.SecName)
|
|
|
|
+ row.AddCell().SetValue(v.CreateDate)
|
|
row.AddCell().SetString(v.Close)
|
|
row.AddCell().SetString(v.Close)
|
|
row.AddCell().SetValue(v.Frequency)
|
|
row.AddCell().SetValue(v.Frequency)
|
|
row.AddCell().SetValue(v.Unit)
|
|
row.AddCell().SetValue(v.Unit)
|
|
@@ -3244,7 +2805,7 @@ func (this *TargetController) ImportTarget() {
|
|
failDatas = append(failDatas, failItem)
|
|
failDatas = append(failDatas, failItem)
|
|
continue
|
|
continue
|
|
}
|
|
}
|
|
- err = models.AddEdbinfo(maxTradeCode, secName, unit, "手动", frequency, "", classify.ClassifyId, sysUser.AdminId)
|
|
|
|
|
|
+ err = models.AddEdbinfo(maxTradeCode, secName, unit, "手动", frequency, "", classify.ClassifyId, sysUser.AdminId, sysUser.RealName)
|
|
if err != nil {
|
|
if err != nil {
|
|
failItem := &models.EdbImportFail{
|
|
failItem := &models.EdbImportFail{
|
|
ClassifyName: classifyName,
|
|
ClassifyName: classifyName,
|
|
@@ -3901,3 +3462,457 @@ func (this *TargetController) ExcelDataEdit() {
|
|
//br.Data = resp
|
|
//br.Data = resp
|
|
br.Data = item
|
|
br.Data = item
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+//// ImportData
|
|
|
|
+//// @Title 导入数据
|
|
|
|
+//// @Description 导入数据
|
|
|
|
+//// @Param EntryFile query file true "文件"
|
|
|
|
+//// @Success 200 Ret=200 录入成功
|
|
|
|
+//// @router /import/data [post]
|
|
|
|
+//func (c *ManualEdbController) ImportData() {
|
|
|
|
+// br := new(models.BaseResponse).Init()
|
|
|
|
+// defer func() {
|
|
|
|
+// c.Data["json"] = br
|
|
|
|
+// c.ServeJSON()
|
|
|
|
+// }()
|
|
|
|
+// sysUser := c.SysUser
|
|
|
|
+// if sysUser == nil {
|
|
|
|
+// br.Msg = "请重新登录"
|
|
|
|
+// return
|
|
|
|
+// }
|
|
|
|
+// file, _, err := c.GetFile("EntryFile")
|
|
|
|
+// if err != nil {
|
|
|
|
+// br.Msg = "获取文件失败"
|
|
|
|
+// br.ErrMsg = "获取文件失败,Err:" + err.Error()
|
|
|
|
+// return
|
|
|
|
+// }
|
|
|
|
+// path := "./static/数据导入_" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
|
|
|
|
+// defer file.Close()
|
|
|
|
+// err = c.SaveToFile("EntryFile", path)
|
|
|
|
+// if err != nil {
|
|
|
|
+// br.Msg = "文件保存失败"
|
|
|
|
+// br.ErrMsg = "文件保存失败,Err:" + err.Error()
|
|
|
|
+// return
|
|
|
|
+// }
|
|
|
|
+// if utils.RunMode == "debug" {
|
|
|
|
+// defer os.Remove(path)
|
|
|
|
+// }
|
|
|
|
+// xlFile, err := xlsx.OpenFile(path)
|
|
|
|
+// if err != nil {
|
|
|
|
+// fmt.Println(err.Error())
|
|
|
|
+// return
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// //超管账号可以查看分类下的所有频度数据
|
|
|
|
+// userId := sysUser.AdminId
|
|
|
|
+// if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_ADMIN {
|
|
|
|
+// userId = 0
|
|
|
|
+// }
|
|
|
|
+// //获取账户所拥有权限的分类id集合
|
|
|
|
+// classifyNameStrList, edbDataClassifyMap, err := data.GetEdbClassifyNameListByAdminId(int64(userId))
|
|
|
|
+// if err != nil {
|
|
|
|
+// br.Msg = "获取分类数据失败"
|
|
|
|
+// return
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// //导入成功数量
|
|
|
|
+// successCount := 0
|
|
|
|
+// //导入失败数据
|
|
|
|
+// failDatas := make([]*models.EdbdataImportFail, 0)
|
|
|
|
+//
|
|
|
|
+// //指标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
|
|
|
|
+// failDatas = append(failDatas, 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
|
|
|
|
+// failDatas = append(failDatas, 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
|
|
|
|
+// failDatas = append(failDatas, 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
|
|
|
|
+// failDatas = append(failDatas, 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
|
|
|
|
+// failDatas = append(failDatas, 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
|
|
|
|
+// failDatas = append(failDatas, 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
|
|
|
|
+// failDatas = append(failDatas, 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
|
|
|
|
+// 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, 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
|
|
|
|
+// failDatas = append(failDatas, 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
|
|
|
|
+// failDatas = append(failDatas, 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
|
|
|
|
+// }
|
|
|
|
+// }
|
|
|
|
+// }
|
|
|
|
+// }
|
|
|
|
+// resp := models.EdbdataImportResp{
|
|
|
|
+// SuccessCount: successCount,
|
|
|
|
+// FailCount: len(failDatas),
|
|
|
|
+// }
|
|
|
|
+// fmt.Println("failDatas:", len(failDatas))
|
|
|
|
+// if len(failDatas) > 0 {
|
|
|
|
+// //先删除导入失败记录
|
|
|
|
+// _ = models.DelEdbDataImportFail(sysUser.AdminId)
|
|
|
|
+// //错误信息字符串切片,最后作为发送邮件通知使用
|
|
|
|
+// failContents := make([]string, 0)
|
|
|
|
+// for _, v := range failDatas {
|
|
|
|
+// failContents = append(failContents, fmt.Sprint(v.SecName, "导入失败:", v.Remark))
|
|
|
|
+// err = models.AddEdbdataImportFail(v)
|
|
|
|
+// if err != nil {
|
|
|
|
+// go alarm_msg.SendAlarmMsg("导入数据 新增失败记录失败,Err:"+err.Error(), 3)
|
|
|
|
+// //go utils.SendEmail(utils.APPNAME+"失败提醒", "导入数据 新增失败记录失败:Err:"+err.Error(), utils.EmailSendToUsers)
|
|
|
|
+// }
|
|
|
|
+// }
|
|
|
|
+// //导入失败的话,最后统一邮件提醒就好啦,不需要每次都去提醒
|
|
|
|
+// go alarm_msg.SendAlarmMsg("导入数据 存在部分数据导入失败:"+strings.Join(failContents, ";"), 3)
|
|
|
|
+// //go utils.SendEmail(utils.APPNAME+"失败提醒", "导入数据 存在部分数据导入失败:"+strings.Join(failContents, ";"), utils.EmailSendToUsers)
|
|
|
|
+//
|
|
|
|
+// if successCount == 0 {
|
|
|
|
+// resp.Status = -1
|
|
|
|
+// resp.Msg = "导入失败"
|
|
|
|
+// } else {
|
|
|
|
+// resp.Status = 1
|
|
|
|
+// resp.Msg = "存在部分导入失败"
|
|
|
|
+// }
|
|
|
|
+// } else {
|
|
|
|
+// resp.Status = 0
|
|
|
|
+// }
|
|
|
|
+// br.Msg = "导入成功"
|
|
|
|
+// br.Ret = 200
|
|
|
|
+// br.Success = true
|
|
|
|
+// br.Data = resp
|
|
|
|
+//}
|