Jelajahi Sumber

Merge remote-tracking branch 'origin/debug' into debug

zwxi 10 bulan lalu
induk
melakukan
1140afd2d2

+ 7 - 10
controllers/data_manage/mysteel_chemical_data.go

@@ -918,16 +918,13 @@ func (this *EdbClassifyController) AddMysteelChemical() {
 			resp.IndexCode = mySteelChemicalIndexInfos[0].IndexCode
 			resp.UniqueCode = fmt.Sprint(mySteelChemicalIndexInfos[0].BaseFromMysteelChemicalClassifyId, "_", mySteelChemicalIndexInfos[0].BaseFromMysteelChemicalIndexId)
 		}
-		resp, err := data.BatchAddMysteelChemicalData(mySteelChemicalIndexInfos, this.Lang)
-		if err != nil {
-			br.Msg = "添加数据失败"
-			br.ErrMsg = "添加数据失败,Err:" + err.Error()
-			return
-		}
-		if resp.Ret != 200 {
-			br.Msg = resp.Msg
-			br.ErrMsg = resp.ErrMsg
-			return
+		for _, v := range mySteelChemicalIndexInfos {
+			err = utils.Rc.LPush(utils.CACHE_MYSTEEL_CHEMICAL_ADD_DATA, v.IndexCode)
+			if err != nil {
+				br.Msg = "添加指标失败" + v.IndexCode
+				br.ErrMsg = "添加指标缓存失败" + v.IndexCode + ";Err:" + err.Error()
+				return
+			}
 		}
 	} else {
 		for i, v := range req.List {

+ 32 - 14
services/data/chart_extra_config.go

@@ -527,7 +527,7 @@ func GetChartSectionCombineData(chartInfo *data_manage.ChartInfo, mappingList []
 	}
 	// 处理系列排序
 	if extraConfig.SortType > 0 {
-		newSeriesDataListMap, newSeriesNoDataIndexMap := sortChartSeriesDataSet(baseSeries.DataList, baseSeries.NoDataEdbIndex, seriesDataListMap, seriesNoDataIndexMap, extraConfig.SortType)
+		newSeriesDataListMap, newSeriesNoDataIndexMap := SortChartSeriesDataSet(baseSeries.SeriesName, baseSeries.DataList, baseSeries.NoDataEdbIndex, seriesDataListMap, seriesNoDataIndexMap, extraConfig.SortType)
 		for k, item := range extraConfig.SeriesList {
 			dataList, ok := newSeriesDataListMap[item.SeriesName]
 			if ok {
@@ -847,21 +847,22 @@ func handleSystemAppointDateT(currDate time.Time, appointDay, frequency string)
 }
 
 // sortTripleDataSet 以第一组数据为基准,排序之后,空数组的位置也要同步变更
-func sortChartSeriesDataSet(baseDataList []float64, baseSeriesNoDataIndexList []int, dataListMap map[string][]float64, noDataListIndexMap map[string][]int, asc int) (newDataListMap map[string][]float64, newNoDataListIndexMap map[string][]int) {
+func SortChartSeriesDataSet(baseName string, baseDataList []float64, baseSeriesNoDataIndexList []int, dataListMap map[string][]float64, noDataListIndexMap map[string][]int, asc int) (newDataListMap map[string][]float64, newNoDataListIndexMap map[string][]int) {
 	newDataListMap = make(map[string][]float64)
 	newNoDataListIndexMap = make(map[string][]int)
 
 	indices := make([]int, len(baseDataList))
-	newIndices := make([]int, len(baseDataList))
+	newIndices := make([]int, len(baseDataList)-len(baseSeriesNoDataIndexList))
 	// 初始化indices
 	for i := range indices {
 		indices[i] = i
 	}
 	if len(baseSeriesNoDataIndexList) > 0 { //把空值移动到最右边
-		for i, v := range indices {
+		j := 0
+		for i := range indices {
 			isEmpty := false
-			for k := range baseSeriesNoDataIndexList {
-				if i == k {
+			for _, v := range baseSeriesNoDataIndexList {
+				if i == v {
 					isEmpty = true
 					break
 				}
@@ -869,14 +870,18 @@ func sortChartSeriesDataSet(baseDataList []float64, baseSeriesNoDataIndexList []
 			if isEmpty {
 				continue
 			}
-			newIndices[i] = v
+			newIndices[j] = i
+			j += 1
 		}
 		newIndices = append(newIndices, baseSeriesNoDataIndexList...)
 		// 根据排序后的indices重新排列所有组的数据
-		for i, idx := range indices {
+		for i, idx := range newIndices {
 			for k, _ := range dataListMap {
-				if utils.InArrayByInt(noDataListIndexMap[k], i) { //如果i位置上的数据为空,那么
-					newNoDataListIndexMap[k] = append(newNoDataListIndexMap[k], idx)
+				if _, ok := newDataListMap[k]; !ok {
+					newDataListMap[k] = make([]float64, len(baseDataList))
+				}
+				if utils.InArrayByInt(noDataListIndexMap[k], idx) { //如果i位置上的数据为空,那么
+					newNoDataListIndexMap[k] = append(newNoDataListIndexMap[k], i)
 				}
 				newDataListMap[k][i] = dataListMap[k][idx]
 			}
@@ -885,14 +890,17 @@ func sortChartSeriesDataSet(baseDataList []float64, baseSeriesNoDataIndexList []
 		noDataListIndexMap = newNoDataListIndexMap
 		newDataListMap = make(map[string][]float64)
 		newNoDataListIndexMap = make(map[string][]int)
+		baseDataList, _ = dataListMap[baseName]
 		//先把空的数据移动到最后面
 		indices = make([]int, len(baseDataList)-len(baseSeriesNoDataIndexList)) //空值不参与排序
+		newIndices = make([]int, len(baseDataList))                             //空值不参与排序
 		// 初始化indices
 		for i := range indices {
 			indices[i] = i
 		}
-	}
 
+	}
+	length := len(indices)
 	// 根据Group1的数据进行排序,asc决定是升序还是降序
 	if asc == 1 {
 		sort.Slice(indices, func(i, j int) bool {
@@ -904,11 +912,21 @@ func sortChartSeriesDataSet(baseDataList []float64, baseSeriesNoDataIndexList []
 		})
 	}
 
+	for i := range newIndices {
+		if i < length {
+			newIndices[i] = indices[i]
+		} else {
+			newIndices[i] = i
+		}
+	}
 	// 根据排序后的indices重新排列所有组的数据
-	for i, idx := range indices {
+	for i, idx := range newIndices {
 		for k, _ := range dataListMap {
-			if utils.InArrayByInt(noDataListIndexMap[k], i) { //如果i位置上的数据为空,那么
-				newNoDataListIndexMap[k] = append(newNoDataListIndexMap[k], idx)
+			if _, ok := newDataListMap[k]; !ok {
+				newDataListMap[k] = make([]float64, len(baseDataList))
+			}
+			if utils.InArrayByInt(noDataListIndexMap[k], idx) { //如果i位置上的数据为空,那么
+				newNoDataListIndexMap[k] = append(newNoDataListIndexMap[k], i)
 			}
 			newDataListMap[k][i] = dataListMap[k][idx]
 		}

+ 113 - 5
services/data/chart_info.go

@@ -3487,6 +3487,18 @@ func GetChartEdbDataV2(chartInfoId, chartType int, calendar, startDate, endDate
 
 	var extraConfig interface{}
 	switch chartType {
+	case 6:
+		var tmpConfig data_manage.ChartTimeCombineExtraConf
+		if extraConfigStr != `` {
+			err = json.Unmarshal([]byte(extraConfigStr), &tmpConfig)
+			if err != nil {
+				errMsg = "雷达图配置异常"
+				err = errors.New(errMsg)
+				return
+			}
+		}
+
+		extraConfig = tmpConfig
 	case 7: // 柱形图
 		var barConfig data_manage.BarChartInfoReq
 		if extraConfigStr == `` {
@@ -3538,12 +3550,98 @@ func GetChartEdbDataV2(chartInfoId, chartType int, calendar, startDate, endDate
 			err = errors.New(errMsg)
 			return
 		}
-		err = json.Unmarshal([]byte(extraConfigStr), &sectionExtraConfig)
-		if err != nil {
-			errMsg = "截面组合图配置异常"
-			err = errors.New(errMsg)
-			return
+		if chartInfoId > 0 {
+			var sectionExtraConfigTmp data_manage.ChartSectionExtraConf
+			err = json.Unmarshal([]byte(extraConfigStr), &sectionExtraConfigTmp)
+			if err != nil {
+				errMsg = "截面组合图配置异常"
+				err = errors.New(errMsg)
+				return
+			}
+			sectionExtraConfig.XDataList = sectionExtraConfigTmp.XDataList
+			sectionExtraConfig.BaseChartSeriesName = sectionExtraConfigTmp.BaseChartSeriesName
+			sectionExtraConfig.UnitList = sectionExtraConfigTmp.UnitList
+			sectionExtraConfig.DateConfList = sectionExtraConfigTmp.DateConfList
+			sectionExtraConfig.IsHeap = sectionExtraConfigTmp.IsHeap
+			sectionExtraConfig.SortType = sectionExtraConfigTmp.SortType
+			// 查询所有的seriesEdb
+			seriesEdbList, e := data_manage.GetChartSeriesEdbByChartInfoId(chartInfoId)
+			if e != nil {
+				errMsg = "查询seriesEdb失败"
+				err = errors.New(errMsg + e.Error())
+				return
+			}
+			// todo 是否有必要返回单位信息
+			// 组装成map
+			seriesEdbMap := make(map[int][]*data_manage.ChartSectionSeriesEdbConf)
+			for _, v := range seriesEdbList {
+				var dateConf *data_manage.ChartSectionSeriesDateConfItem
+				if v.DateConf != "" {
+					err = json.Unmarshal([]byte(v.DateConf), &dateConf)
+					if err != nil {
+						errMsg = "截面组合图配置异常"
+						err = errors.New(errMsg + e.Error())
+						return
+					}
+				}
+				tmp := &data_manage.ChartSectionSeriesEdbConf{
+					ChartSeriesEdbMappingId: v.ChartSeriesEdbMappingId,
+					ChartSeriesId:           v.ChartSeriesId,
+					//ChartInfoId:             v.ChartInfoId,
+					EdbInfoId:    v.EdbInfoId,
+					DateConf:     dateConf,
+					EdbName:      "",
+					EdbNameEn:    "",
+					Unit:         "",
+					UnitEn:       "",
+					DateConfName: v.DateConfName,
+					DateConfType: v.DateConfType,
+				}
+				seriesEdbMap[v.ChartSeriesId] = append(seriesEdbMap[v.ChartSeriesId], tmp)
+			}
+			//查询series
+			seriesListTmp, e := data_manage.GetChartSeriesByChartInfoId(chartInfoId)
+			if e != nil {
+				errMsg = "查询series失败"
+				err = errors.New(errMsg + e.Error())
+				return
+			}
+			seriesList := make([]*data_manage.ChartSectionSeriesItem, 0)
+			for _, v := range seriesListTmp {
+
+				tmpSeries := &data_manage.ChartSectionSeriesItem{
+					ChartSeriesId: v.ChartSeriesId,
+					SeriesName:    v.SeriesName,
+					SeriesNameEn:  v.SeriesNameEn,
+					ChartStyle:    v.ChartStyle,
+					ChartColor:    v.ChartColor,
+					ChartWidth:    v.ChartWidth,
+					IsPoint:       v.IsPoint,
+					IsNumber:      v.IsNumber,
+					IsAxis:        v.IsAxis,
+					MaxData:       v.MaxData,
+					MinData:       v.MinData,
+					//IsOrder:         false,
+					EdbInfoList: nil,
+					DataList:    nil,
+				}
+				edbInfoList, ok := seriesEdbMap[v.ChartSeriesId]
+				if ok {
+					tmpSeries.EdbInfoList = edbInfoList
+				}
+				seriesList = append(seriesList, tmpSeries)
+			}
+			sectionExtraConfig.SeriesList = seriesList
+
+		} else {
+			err = json.Unmarshal([]byte(extraConfigStr), &sectionExtraConfig)
+			if err != nil {
+				errMsg = "截面组合图配置异常"
+				err = errors.New(errMsg)
+				return
+			}
 		}
+
 		//校验引用日期名称是否重复
 		dateNameMap := make(map[string]int)
 		dateNameEnMap := make(map[string]int)
@@ -3596,6 +3694,7 @@ func GetChartEdbDataV2(chartInfoId, chartType int, calendar, startDate, endDate
 			return
 		}
 		//todo 如果是详情接口,应该要从其他表里查询配置
+		extraConfig = sectionExtraConfig
 	default:
 		xEdbIdValue = make([]int, 0)
 		yDataList = make([]data_manage.YData, 0)
@@ -3613,6 +3712,15 @@ func GetChartEdbDataV2(chartInfoId, chartType int, calendar, startDate, endDate
 		if seasonExtraConfig != "" {
 			dataResp, err = SeasonChartData(edbList, seasonExtraConfig)
 		}
+	case 6: //时序组合图
+		//判断是否堆积
+		timeConf := extraConfig.(data_manage.ChartTimeCombineExtraConf)
+		if extraConfigStr == "" { //历史数据,默认开启堆积
+			timeConf = data_manage.ChartTimeCombineExtraConf{
+				IsHeap: 1,
+			}
+		}
+		dataResp = data_manage.ChartTimeCombineDataResp{IsHeap: timeConf.IsHeap}
 	case 7: // 柱形图
 		barChartConf := extraConfig.(data_manage.BarChartInfoReq)
 		xEdbIdValue, yDataList, err = BarChartData(mappingList, edbDataListMap, barChartConf.DateList, barChartConf.Sort)

+ 29 - 0
services/data/mysteel_chemical.go

@@ -6,6 +6,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"
 	"strings"
@@ -347,6 +348,7 @@ func BatchAddMysteelChemicalIndex(items []*data_manage.BaseFromMysteelChemicalIn
 	_, err = data_manage.BatchAddBaseFromMysteelChemicalIndex(addItems)
 	if err != nil {
 		errMsg = "保存分类失败"
+		return
 	}
 	baseFromMysteelChemicalIndexs, err = data_manage.GetBaseFromMysteelChemicalIndexByCodeList(preAddIndexCodeItems)
 	if err != nil {
@@ -818,3 +820,30 @@ func getEdbTerminal(source int) (edbTerminal *data_manage.EdbTerminal) {
 
 	return
 }
+
+// RefreshMysteelChemicalData 根据手工指标code刷新手工指标数据
+func RefreshMysteelChemicalData(edbCode string) {
+	var err error
+	var errMsg string
+	defer func() {
+		if err != nil {
+			go alarm_msg.SendAlarmMsg("根据钢联化工的code刷新指标数据失败提醒,Err"+err.Error(), 3)
+			//go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"导入手工数据后,根据手工指标code刷新手工指标数据失败提醒", "errmsg:"+err.Error(), utils.EmailSendToUsers)
+		}
+		if errMsg != "" {
+			go alarm_msg.SendAlarmMsg("根据钢联化工的code刷新指标数据失败提醒,errMsg"+errMsg, 3)
+		}
+	}()
+
+	baseFromMysteelChemicalIndexs, err := data_manage.GetBaseFromMysteelChemicalIndexByCodeList([]string{edbCode})
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		return
+	}
+	resp, err := BatchAddMysteelChemicalData(baseFromMysteelChemicalIndexs, "zh")
+	if err != nil {
+		return
+	}
+	if !resp.Success {
+		errMsg = resp.ErrMsg
+	}
+}

+ 21 - 0
services/task.go

@@ -34,6 +34,9 @@ func Task() {
 	//手工数据表格导入后的指标库刷新
 	go ImportManualDataRefresh()
 
+	// 加入钢联化工指标数据之后的刷新
+	go MysteelChemicalDataAdd()
+
 	//修复用户关注标识
 	//GetWxUsersSubscribe()
 
@@ -90,6 +93,24 @@ func ImportManualDataRefresh() {
 	}
 }
 
+// MysteelChemicalDataAdd 加入钢联化工指标数据之后的刷新
+func MysteelChemicalDataAdd() {
+	defer func() {
+		if err := recover(); err != nil {
+			fmt.Println("[ImportManualDataRefresh]", err)
+		}
+	}()
+	for {
+		utils.Rc.Brpop(utils.CACHE_MYSTEEL_CHEMICAL_ADD_DATA, func(b []byte) {
+			edbCode := string(b)
+			edbCode = strings.TrimPrefix(edbCode, `"`)
+			edbCode = strings.TrimSuffix(edbCode, `"`)
+
+			data.RefreshMysteelChemicalData(edbCode)
+		})
+	}
+}
+
 //func init()  {
 //	fmt.Println("start task init")
 //	UpdateEnglishEmailLogErrMsg()

+ 1 - 0
utils/constants.go

@@ -209,6 +209,7 @@ const (
 	CACHE_CHART_INFO_DATA             = "chart:info:data:"                    //图表数据
 	CACHE_CHART_CLASSIFY              = "chart:classify"                      //图表分类数据
 	CACHE_IMPORT_MANUAL_DATA          = "import:manual:data"                  //手工数据导入后刷新
+	CACHE_MYSTEEL_CHEMICAL_ADD_DATA   = "import:mysteelchemical:data"         //钢联化工的数据源导入后刷新
 	CACHE_ACCESS_TOKEN_LOGIN          = "pc_eta_admin:login:"                 //管理后台登录
 	CACHE_ACCESS_TOKEN_LOGIN_NO_TRUST = "pc_eta_admin:login:no_trust:"        //管理后台登录(不可信登录态)
 	CACHE_ABNORMAL_LOGIN              = "pc_eta_admin:login:abnormal:"        //管理后台登录-异常登录