|
@@ -6,14 +6,12 @@ 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/services/data"
|
|
|
etaTrialService "eta/eta_api/services/eta_trial"
|
|
|
"eta/eta_api/utils"
|
|
|
"fmt"
|
|
|
"github.com/rdlucklib/rdluck_tools/paging"
|
|
|
"github.com/shopspring/decimal"
|
|
|
- "github.com/tealeg/xlsx"
|
|
|
"os"
|
|
|
"strconv"
|
|
|
"strings"
|
|
@@ -1429,410 +1427,19 @@ func (c *ManualEdbController) ImportData() {
|
|
|
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
|
|
|
- }
|
|
|
-
|
|
|
- classifyNameStrList, edbDataClassifyMap, err := data.GetEdbClassifyNameListByAdminId(int64(userId))
|
|
|
+ successCount, failCount, err, errMsg := data.ImportManualData(path, sysUser)
|
|
|
if err != nil {
|
|
|
- br.Msg = "获取分类数据失败"
|
|
|
+ br.Msg = errMsg
|
|
|
+ br.ErrMsg = err.Error()
|
|
|
return
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- successCount := 0
|
|
|
-
|
|
|
- failDatas := make([]*models.EdbdataImportFail, 0)
|
|
|
-
|
|
|
-
|
|
|
- targetMap := make(map[string]*models.Edbinfo)
|
|
|
- defer func() {
|
|
|
- for _, target := range targetMap {
|
|
|
-
|
|
|
- key := "import:edbinfo:data:" + target.TradeCode
|
|
|
- utils.Rc.Delete(key)
|
|
|
-
|
|
|
-
|
|
|
- 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())
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }()
|
|
|
-
|
|
|
-
|
|
|
- edbCodeDataMap := make(map[string]map[string]string)
|
|
|
-
|
|
|
-
|
|
|
- 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 := 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)
|
|
|
-
|
|
|
- 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)
|
|
|
-
|
|
|
- continue
|
|
|
- }
|
|
|
- createDate = createDateTime.Format("2006-01-02")
|
|
|
- } else {
|
|
|
-
|
|
|
- _, 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)
|
|
|
-
|
|
|
- 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
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- classifyName = strings.Trim(classifyName, " ")
|
|
|
- frequency = utils.TrimStr(frequency)
|
|
|
- unit = utils.TrimStr(unit)
|
|
|
-
|
|
|
-
|
|
|
- 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)
|
|
|
-
|
|
|
- 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
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- 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)
|
|
|
-
|
|
|
- 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
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- 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)
|
|
|
-
|
|
|
- }
|
|
|
- }
|
|
|
- } else {
|
|
|
- if target.TradeCode != "" && createDate != "" && closeVal != "" {
|
|
|
- models.AddTargetsDataByImport(target.TradeCode, createDate, closeVal)
|
|
|
- if err != nil {
|
|
|
- go alarm_msg.SendAlarmMsg("导入数据 新增数据失败,Err:"+err.Error(), 3)
|
|
|
-
|
|
|
- }
|
|
|
- tmpDataMap[createDate] = closeVal
|
|
|
- edbCodeDataMap[target.TradeCode] = tmpDataMap
|
|
|
- }
|
|
|
- }
|
|
|
- successCount++
|
|
|
- } else {
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
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 alarm_msg.SendAlarmMsg("导入数据 存在部分数据导入失败:"+strings.Join(failContents, ";"), 3)
|
|
|
-
|
|
|
-
|
|
|
+ FailCount: failCount,
|
|
|
+ }
|
|
|
+ if failCount > 0 {
|
|
|
if successCount == 0 {
|
|
|
resp.Status = -1
|
|
|
resp.Msg = "导入失败"
|