|
@@ -119,9 +119,19 @@ func GetMixedTableCellData(mixedTableReq request.MixedTableReq) (newMixedTableCe
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
- if edbInfo, ok := edbInfoMap[edbDateConfig.EdbInfoId]; ok {
|
|
|
- cell.ShowValue = edbInfo.EndDate
|
|
|
- cell.DataTime = edbInfo.EndDate
|
|
|
+ if dataList, ok := edbDataListMap[edbDateConfig.EdbInfoId]; ok {
|
|
|
+ // todo 获取配置信息,根据配置信息进行日期变换
|
|
|
+ var newDate string
|
|
|
+ newDate, err = GetEdbDateByMoveForward(config[k][i].Extra, dataList)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ newDate, err = HandleMixTableDateChange(newDate, config[k][i].Extra)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ cell.ShowValue = newDate
|
|
|
+ cell.DataTime = newDate
|
|
|
config[k][i] = cell
|
|
|
}
|
|
|
}
|
|
@@ -475,7 +485,7 @@ func handleConfig(configList [][]request.MixedTableCellDataReq) (newConfig [][]r
|
|
|
dataEdbInfoIdList = append(dataEdbInfoIdList, cell.EdbInfoId)
|
|
|
|
|
|
case request.DateDT: // 日期类型
|
|
|
- date, tmpErr, tmpErrMsg := handleDate(cell.DataTimeType, cell.Value)
|
|
|
+ date, extra, tmpErr, tmpErrMsg := handleDate(cell.DataTimeType, cell.Value, cell.Extra)
|
|
|
if tmpErr != nil {
|
|
|
err = tmpErr
|
|
|
errMsg = tmpErrMsg
|
|
@@ -483,6 +493,7 @@ func handleConfig(configList [][]request.MixedTableCellDataReq) (newConfig [][]r
|
|
|
}
|
|
|
rowList[rk].DataTime = date
|
|
|
rowList[rk].ShowValue = date
|
|
|
+ rowList[rk].Extra = extra //兼容原有的历史数据中系统导入日期,把value里的值赋值给了extra字段
|
|
|
|
|
|
// 指标日期类型的单元格需要额外将指标id取出来
|
|
|
if cell.DataTimeType == request.EdbDateDT {
|
|
@@ -512,8 +523,8 @@ func handleConfig(configList [][]request.MixedTableCellDataReq) (newConfig [][]r
|
|
|
// @return date string
|
|
|
// @return err error
|
|
|
// @return errMsg string
|
|
|
-func HandleDate(dataTimeType int, val string) (date string, err error, errMsg string) {
|
|
|
- return handleDate(dataTimeType, val)
|
|
|
+func HandleDate(dataTimeType int, val, extra string) (date string, newExtra string, err error, errMsg string) {
|
|
|
+ return handleDate(dataTimeType, val, extra)
|
|
|
}
|
|
|
|
|
|
// handleDate
|
|
@@ -525,17 +536,34 @@ func HandleDate(dataTimeType int, val string) (date string, err error, errMsg st
|
|
|
// @return date string
|
|
|
// @return err error
|
|
|
// @return errMsg string
|
|
|
-func handleDate(dataTimeType int, val string) (date string, err error, errMsg string) {
|
|
|
+func handleDate(dataTimeType int, val, extra string) (date string, newExtra string, err error, errMsg string) {
|
|
|
+ newExtra = extra
|
|
|
if val == `` {
|
|
|
errMsg = "错误的日期数据"
|
|
|
err = errors.New(errMsg)
|
|
|
return
|
|
|
}
|
|
|
+
|
|
|
switch dataTimeType {
|
|
|
case request.CustomDateT: //手动输入日期
|
|
|
date = val
|
|
|
+ date, err = HandleMixTableDateChange(date, extra)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
case request.SystemDateT: // 系统日期
|
|
|
- date, err, errMsg = handleSystemDateT(val)
|
|
|
+ date = time.Now().Format(utils.FormatDate)
|
|
|
+ if extra == "" { //旧版的系统日期计算, 需要处理成新版本的系统,整理成extra 里的值,并将value值处理成空值
|
|
|
+ extra, err, errMsg = handleOldSystemDateT(val)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+ date, err = HandleMixTableDateChange(date, extra)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ newExtra = extra
|
|
|
case request.EdbDateDT: // 导入指标日期(指标库的最新日期)
|
|
|
default:
|
|
|
errMsg = "错误的日期类型"
|
|
@@ -546,27 +574,118 @@ func handleDate(dataTimeType int, val string) (date string, err error, errMsg st
|
|
|
return
|
|
|
}
|
|
|
|
|
|
-// handleSystemDateT
|
|
|
-// @Description: 处理导入系统日期
|
|
|
+func GetEdbDateByMoveForward(extra string, edbDataList []*data_manage.EdbDataList) (date string, err error) {
|
|
|
+ moveForward := 0
|
|
|
+ if extra != "" {
|
|
|
+ var edbDateExtraConf request.EdbDateExtraConf
|
|
|
+ err = json.Unmarshal([]byte(extra), &edbDateExtraConf)
|
|
|
+ if err != nil {
|
|
|
+ err = fmt.Errorf("日期变换配置json解析失败失败: %s", err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ moveForward = edbDateExtraConf.MoveForward
|
|
|
+ }
|
|
|
+ // 根据日期进行排序
|
|
|
+ index := len(edbDataList) - 1 - moveForward
|
|
|
+ for k, v := range edbDataList {
|
|
|
+ if k == index {
|
|
|
+ date = v.DataTime
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+// HandleMixTableDateChange 处理表格中的日期变换
|
|
|
+func HandleMixTableDateChange(date, extra string) (newDate string, err error) {
|
|
|
+ newDate = date
|
|
|
+ if extra == "" {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ var edbDateExtraConf request.EdbDateExtraConf
|
|
|
+ err = json.Unmarshal([]byte(extra), &edbDateExtraConf)
|
|
|
+ if err != nil {
|
|
|
+ err = fmt.Errorf("日期变换配置json解析失败失败: %s", err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if len(edbDateExtraConf.DateChange) > 0 {
|
|
|
+ var dateTime time.Time
|
|
|
+ dateTime, err = time.ParseInLocation(utils.FormatDate, newDate, time.Local)
|
|
|
+ if err != nil {
|
|
|
+ err = fmt.Errorf("日期解析失败: %s", err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ for _, v := range edbDateExtraConf.DateChange {
|
|
|
+ if v.DateCalculate != nil {
|
|
|
+ dateTime = dateTime.AddDate(v.DateCalculate.Year, v.DateCalculate.Month, v.DateCalculate.Day)
|
|
|
+ newDate = dateTime.Format(utils.FormatDate)
|
|
|
+ }
|
|
|
+
|
|
|
+ if v.FrequencyChange != nil {
|
|
|
+ newDate, err, _ = handleSystemAppointDateT(dateTime, v.FrequencyChange.FrequencyDay, v.FrequencyChange.Frequency)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ dateTime, err = time.ParseInLocation(utils.FormatDate, newDate, time.Local)
|
|
|
+ if err != nil {
|
|
|
+ err = fmt.Errorf("日期解析失败: %s", err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+// handleOldSystemDateT
|
|
|
+// @Description: 历史数据中的导入系统日期
|
|
|
// @author: Roc
|
|
|
// @datetime2023-10-27 09:36:21
|
|
|
// @param confStr string
|
|
|
// @return date string
|
|
|
// @return err error
|
|
|
// @return errMsg string
|
|
|
-func handleSystemDateT(confStr string) (date string, err error, errMsg string) {
|
|
|
+func handleOldSystemDateT(confStr string) (extra string, err error, errMsg string) {
|
|
|
var config request.SystemDateConf
|
|
|
err = json.Unmarshal([]byte(confStr), &config)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
+ var extraConf request.EdbDateExtraConf
|
|
|
+ dateChange := new(request.EdbDateExtraDateChange)
|
|
|
+ dateCalculate := new(request.EdbDateExtraDateCalculate)
|
|
|
+ frequencyChange := new(request.EdbDateExtraFrequencyChange)
|
|
|
+ dateChangeList := make([]*request.EdbDateExtraDateChange, 0)
|
|
|
+
|
|
|
switch config.Source {
|
|
|
case request.SystemCurrDateT:
|
|
|
- date = time.Now().Format(utils.FormatDate)
|
|
|
+ return
|
|
|
case request.SystemCalculateDateT:
|
|
|
- date, err, errMsg = handleSystemCalculateDateT(config.CalculateNum, config.CalculateFrequency)
|
|
|
+ // todo 是否直接更新该excel记录,
|
|
|
+ dateCalculate.Day = config.CalculateNum
|
|
|
+ dateChange.DateCalculate = dateCalculate
|
|
|
+ dateChangeList = append(dateChangeList, dateChange)
|
|
|
+ extraConf.DateChange = dateChangeList
|
|
|
+ extraByte, e := json.Marshal(extraConf)
|
|
|
+ if e != nil {
|
|
|
+ err = fmt.Errorf("日期计算额外配置,json序列化失败: %s", e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ extra = string(extraByte)
|
|
|
+ return
|
|
|
case request.SystemFrequencyDateT: // 处理系统日期相关的指定频率(所在周/旬/月/季/半年/年的最后/最早一天)
|
|
|
- date, err, errMsg = handleSystemAppointDateT(config.Day, config.Frequency)
|
|
|
+ frequencyChange.FrequencyDay = config.Day
|
|
|
+ frequencyChange.Frequency = config.Frequency
|
|
|
+
|
|
|
+ dateChange.FrequencyChange = frequencyChange
|
|
|
+ dateChangeList = append(dateChangeList, dateChange)
|
|
|
+ extraConf.DateChange = dateChangeList
|
|
|
+ extraByte, e := json.Marshal(extraConf)
|
|
|
+ if e != nil {
|
|
|
+ err = fmt.Errorf("日期计算额外配置,json序列化失败: %s", e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ extra = string(extraByte)
|
|
|
+ return
|
|
|
default:
|
|
|
errMsg = "错误的日期日期导入方式"
|
|
|
err = errors.New(fmt.Sprint("错误的日期日期导入方式:", config.Source))
|
|
@@ -611,8 +730,8 @@ func handleSystemCalculateDateT(num int, frequency string) (date string, err err
|
|
|
// @return date string
|
|
|
// @return err error
|
|
|
// @return errMsg string
|
|
|
-func handleSystemAppointDateT(appointDay, frequency string) (date string, err error, errMsg string) {
|
|
|
- currDate := time.Now()
|
|
|
+func handleSystemAppointDateT(currDate time.Time, appointDay, frequency string) (date string, err error, errMsg string) {
|
|
|
+ //currDate := time.Now()
|
|
|
switch frequency {
|
|
|
case "本周":
|
|
|
day := int(currDate.Weekday())
|