|
@@ -499,3 +499,175 @@ func GetExcelEdbBatchRefreshKey(source string, reportId, chapterId int) string {
|
|
|
|
|
|
return fmt.Sprint("batch_refresh_excel_edb:", source, ":", reportId, ":", chapterId)
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+func ReplaceEdbInExcel(oldEdbInfo, newEdbInfo *data_manage.EdbInfo) (err error) {
|
|
|
+
|
|
|
+ mappingList, err := excel.GetExcelEdbMappingByEdbInfoId(oldEdbInfo.EdbInfoId)
|
|
|
+ if err != nil {
|
|
|
+ err = fmt.Errorf("查询和指标相关的表格失败,错误:%s", err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ updateList := make([]*excel.ExcelInfo, 0)
|
|
|
+
|
|
|
+ for _, excelMapping := range mappingList {
|
|
|
+
|
|
|
+ excelInfo, tmpErr := excel.GetExcelInfoById(excelMapping.ExcelInfoId)
|
|
|
+ if tmpErr != nil {
|
|
|
+ err = fmt.Errorf("查询和指标相关的混合表格失败,错误:%s", tmpErr.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ key := utils.HZ_CHART_LIB_EXCEL_TABLE_DETAIL + ":" + excelInfo.UniqueCode
|
|
|
+ if utils.Re == nil {
|
|
|
+ _ = utils.Rc.Delete(key)
|
|
|
+ }
|
|
|
+
|
|
|
+ switch excelMapping.Source {
|
|
|
+ case utils.TIME_TABLE:
|
|
|
+
|
|
|
+ newExcelInfo, e := replaceEdbInTimeExcel(oldEdbInfo, newEdbInfo, excelInfo)
|
|
|
+ if e != nil {
|
|
|
+ err = fmt.Errorf("替换余额表格中的指标失败,错误:%s", e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ updateList = append(updateList, newExcelInfo)
|
|
|
+ case utils.MIXED_TABLE:
|
|
|
+
|
|
|
+ newExcelInfo, e := replaceEdbInBalanceExcel(oldEdbInfo, newEdbInfo, excelInfo)
|
|
|
+ if e != nil {
|
|
|
+ err = fmt.Errorf("替换余额表格中的指标失败,错误:%s", e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ updateList = append(updateList, newExcelInfo)
|
|
|
+ default:
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ err = excel.ReplaceEdbInExcel(oldEdbInfo, newEdbInfo, updateList)
|
|
|
+ if err != nil {
|
|
|
+ err = fmt.Errorf("替换表格中的指标失败,错误:%s", err.Error())
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+func replaceEdbInBalanceExcel(oldEdbInfo, newEdbInfo *data_manage.EdbInfo, excelInfo *excel.ExcelInfo) (newExcelInfo *excel.ExcelInfo, err error) {
|
|
|
+ newExcelInfo = excelInfo
|
|
|
+ var mixedTableReq request.MixedTableReq
|
|
|
+ err = json.Unmarshal([]byte(excelInfo.Content), &mixedTableReq)
|
|
|
+ if err != nil {
|
|
|
+ err = fmt.Errorf("表格json转结构体失败,Err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ configList := mixedTableReq.Data
|
|
|
+ for ck, rowList := range configList {
|
|
|
+ for rk, cell := range rowList {
|
|
|
+ switch cell.DataType {
|
|
|
+ case request.EdbDT:
|
|
|
+ if cell.EdbInfoId == oldEdbInfo.EdbInfoId {
|
|
|
+
|
|
|
+ configList[ck][rk].EdbInfoId = newEdbInfo.EdbInfoId
|
|
|
+ }
|
|
|
+ case request.InsertDataDT, request.PopInsertDataDT:
|
|
|
+ if cell.EdbInfoId == oldEdbInfo.EdbInfoId {
|
|
|
+
|
|
|
+ configList[ck][rk].EdbInfoId = newEdbInfo.EdbInfoId
|
|
|
+ }
|
|
|
+ case request.InsertEdbCalculateDataDT:
|
|
|
+ var config request.CalculateConf
|
|
|
+ err = json.Unmarshal([]byte(cell.Value), &config)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if cell.EdbInfoId == oldEdbInfo.EdbInfoId {
|
|
|
+
|
|
|
+ configList[ck][rk].EdbInfoId = newEdbInfo.EdbInfoId
|
|
|
+ }
|
|
|
+ if config.EdbInfoId == oldEdbInfo.EdbInfoId {
|
|
|
+ config.EdbInfoId = newEdbInfo.EdbInfoId
|
|
|
+ }
|
|
|
+ var configStr []byte
|
|
|
+ configStr, err = json.Marshal(config)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ configList[ck][rk].Value = string(configStr)
|
|
|
+ case request.DateDT:
|
|
|
+
|
|
|
+ if cell.DataTimeType == request.EdbDateDT {
|
|
|
+ var config request.EdbDateConf
|
|
|
+ err = json.Unmarshal([]byte(cell.Value), &config)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if config.EdbInfoId == oldEdbInfo.EdbInfoId {
|
|
|
+ config.EdbInfoId = newEdbInfo.EdbInfoId
|
|
|
+ var configStr []byte
|
|
|
+ configStr, err = json.Marshal(config)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ configList[ck][rk].Value = string(configStr)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ mixedTableReq.Data = configList
|
|
|
+ var newContentByte []byte
|
|
|
+ newContentByte, err = json.Marshal(mixedTableReq)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ excelInfo.Content = string(newContentByte)
|
|
|
+ newExcelInfo = excelInfo
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+func replaceEdbInTimeExcel(oldEdbInfo, newEdbInfo *data_manage.EdbInfo, excelInfo *excel.ExcelInfo) (newExcelInfo *excel.ExcelInfo, err error) {
|
|
|
+ newExcelInfo = excelInfo
|
|
|
+
|
|
|
+ var tableDataConfig TableDataConfig
|
|
|
+ err = json.Unmarshal([]byte(excelInfo.Content), &tableDataConfig)
|
|
|
+ if err != nil {
|
|
|
+ err = errors.New("表格json转结构体失败,Err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if len(tableDataConfig.EdbInfoIdList) <= 0 {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if tableDataConfig.Num <= 0 {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ for k, id := range tableDataConfig.EdbInfoIdList {
|
|
|
+ if id == oldEdbInfo.EdbInfoId {
|
|
|
+ tableDataConfig.EdbInfoIdList[k] = newEdbInfo.EdbInfoId
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ for k, tableEdbInfo := range tableDataConfig.TableEdbInfoList {
|
|
|
+ if tableEdbInfo.EdbInfoId == oldEdbInfo.EdbInfoId {
|
|
|
+ tableDataConfig.TableEdbInfoList[k].EdbInfoId = newEdbInfo.EdbInfoId
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ var newContentByte []byte
|
|
|
+ newContentByte, err = json.Marshal(tableDataConfig)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ excelInfo.Content = string(newContentByte)
|
|
|
+ newExcelInfo = excelInfo
|
|
|
+ return
|
|
|
+}
|