|
@@ -172,13 +172,6 @@ func GetPercentileData(chartInfoId int, mappingInfo *data_manage.ChartEdbInfoMap
|
|
|
|
|
|
// GetFrequencyDistributionData 获取频率分布的图表数据
|
|
|
func GetFrequencyDistributionData(chartInfoId int, mappingInfo *data_manage.ChartEdbInfoMapping, dateType, stepVal int, startDate, endDate string) (edbList []*data_manage.ChartEdbInfoMapping, dataResp response.FrequencyDistributionResp, err error, errMsg string) {
|
|
|
- //日期类型:1:最近3月;2:最近6月;3:最近1年;4:最近2年;5:最近3年;6:最近5年;7:最近10年,8:自定义时间
|
|
|
- startDate, endDate = utils.GetDateByDateType2(dateType, startDate, endDate)
|
|
|
- if startDate == `` {
|
|
|
- errMsg = "错误的日期"
|
|
|
- err = errors.New(errMsg)
|
|
|
- return
|
|
|
- }
|
|
|
XDataList := make([]float64, 0)
|
|
|
// 频度
|
|
|
Y1DataList := make([]response.FrequencyDistributionYData, 0)
|
|
@@ -203,10 +196,36 @@ func GetFrequencyDistributionData(chartInfoId int, mappingInfo *data_manage.Char
|
|
|
|
|
|
edb := edbList[0]
|
|
|
dataList := edb.DataList.([]*data_manage.EdbDataList)
|
|
|
-
|
|
|
if len(dataList) <= 0 {
|
|
|
return
|
|
|
}
|
|
|
+
|
|
|
+ // 非自定义
|
|
|
+ if dateType != 8 {
|
|
|
+ endDate = dataList[len(dataList)-1].DataTime
|
|
|
+ endDateTime, err = time.ParseInLocation(utils.FormatDate, endDate, time.Local)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ //日期类型:1:最近3月;2:最近6月;3:最近1年;4:最近2年;5:最近3年;6:最近5年;7:最近10年,8:自定义时间
|
|
|
+ startDateTime = utils.GetDateByDateType2(dateType, endDateTime)
|
|
|
+ startDate = startDateTime.Format(utils.FormatDate)
|
|
|
+
|
|
|
+ newDataList := make([]*data_manage.EdbDataList, 0)
|
|
|
+ for _, v := range dataList {
|
|
|
+ tmpDataTime, tmpErr := time.ParseInLocation(utils.FormatDate, v.DataTime, time.Local)
|
|
|
+ if tmpErr != nil {
|
|
|
+ err = tmpErr
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if tmpDataTime.Equal(startDateTime) || tmpDataTime.After(startDateTime) {
|
|
|
+ newDataList = append(newDataList, v)
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ dataList = newDataList
|
|
|
+ }
|
|
|
+
|
|
|
maxVal := dataList[0].Value
|
|
|
minVal := dataList[0].Value
|
|
|
dataValMap := make(map[float64]int)
|
|
@@ -250,31 +269,42 @@ func GetFrequencyDistributionData(chartInfoId int, mappingInfo *data_manage.Char
|
|
|
XDataList = append(XDataList, tmpMinVal)
|
|
|
distributionDataNumMap[tmpMinVal] = 0
|
|
|
for tmpVal, num := range dataValMap {
|
|
|
- if tmpMinVal <= tmpVal && tmpVal < tmpMaxVal {
|
|
|
- distributionDataNumMap[tmpMinVal] += num
|
|
|
+ if tmpMinVal <= tmpVal {
|
|
|
+ // 最后一期数据是要小于等于
|
|
|
+ if i == stepVal {
|
|
|
+ if tmpVal <= tmpMaxVal {
|
|
|
+ distributionDataNumMap[tmpMinVal] += num
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if tmpVal < tmpMaxVal {
|
|
|
+ distributionDataNumMap[tmpMinVal] += num
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- var minNum, maxNum int
|
|
|
+ var minFrequency, maxFrequency float64
|
|
|
tmpNum := 0
|
|
|
for k, tmpMinVal := range XDataList {
|
|
|
- // 频率
|
|
|
+ // 数量
|
|
|
frequencyYNum := distributionDataNumMap[tmpMinVal]
|
|
|
+
|
|
|
+ // 频率
|
|
|
+ tmpFrequency, _ := decimal.NewFromInt(int64(frequencyYNum)).Div(decimal.NewFromInt(int64(total))).Mul(decimal.NewFromInt(100)).Round(4).Float64()
|
|
|
Y1DataList = append(Y1DataList, response.FrequencyDistributionYData{
|
|
|
X: tmpMinVal,
|
|
|
- Y: float64(frequencyYNum),
|
|
|
+ Y: tmpFrequency,
|
|
|
})
|
|
|
-
|
|
|
if k == 0 {
|
|
|
- minNum = frequencyYNum
|
|
|
- maxNum = frequencyYNum
|
|
|
+ minFrequency = tmpFrequency
|
|
|
+ maxFrequency = tmpFrequency
|
|
|
} else {
|
|
|
- if frequencyYNum < minNum {
|
|
|
- minNum = frequencyYNum
|
|
|
+ if tmpFrequency < minFrequency {
|
|
|
+ minFrequency = tmpFrequency
|
|
|
}
|
|
|
- if frequencyYNum > maxNum {
|
|
|
- maxNum = frequencyYNum
|
|
|
+ if tmpFrequency > maxFrequency {
|
|
|
+ maxFrequency = tmpFrequency
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -292,8 +322,8 @@ func GetFrequencyDistributionData(chartInfoId int, mappingInfo *data_manage.Char
|
|
|
{
|
|
|
Name: "频率",
|
|
|
NameEn: "Frequency",
|
|
|
- Unit: "",
|
|
|
- UnitEn: "",
|
|
|
+ Unit: "%",
|
|
|
+ UnitEn: "%",
|
|
|
Value: Y1DataList,
|
|
|
Color: "#00F",
|
|
|
IsAxis: 1,
|
|
@@ -309,8 +339,8 @@ func GetFrequencyDistributionData(chartInfoId int, mappingInfo *data_manage.Char
|
|
|
}
|
|
|
edbList[0].DataList = nil
|
|
|
dataResp = response.FrequencyDistributionResp{
|
|
|
- LeftMinValue: float64(minNum),
|
|
|
- LeftMaxValue: float64(maxNum),
|
|
|
+ LeftMinValue: minFrequency,
|
|
|
+ LeftMaxValue: maxFrequency,
|
|
|
RightMinValue: 0,
|
|
|
RightMaxValue: 100,
|
|
|
DataList: newDataList,
|