Jelajahi Sumber

feat:优化计算指标的添加流程

Roc 1 tahun lalu
induk
melakukan
6ef8504e08
3 mengubah file dengan 115 tambahan dan 67 penghapusan
  1. 26 19
      controllers/base_from_calculate.go
  2. 48 0
      models/common.go
  3. 41 48
      models/edb_data_calculate_ljzzj.go

+ 26 - 19
controllers/base_from_calculate.go

@@ -606,6 +606,17 @@ func (this *CalculateController) BatchSave() {
 	var edbInfoId int
 	var edbInfo *models.EdbInfo
 	var errMsg string
+
+	var baseEdbInfoModel models.BaseEdbInfoInterface
+	addParam := models.AddCalculateBatchParams{
+		Req:             &req,
+		FromEdbInfo:     fromEdbInfo,
+		EdbCode:         edbCode,
+		UniqueCode:      uniqueCode,
+		SysUserId:       sysUserId,
+		SysUserRealName: sysUserName,
+	}
+
 	switch req.Source {
 	case utils.DATA_SOURCE_CALCULATE_LJZZY:
 		sourName = "累计值转月值"
@@ -778,28 +789,19 @@ func (this *CalculateController) BatchSave() {
 		}
 		sourName = utils.DATA_SOURCE_NAME_CALCULATE_CORRELATION
 		edbInfo, err, errMsg = models.AddCalculateCorrelation(&req, edbCode, uniqueCode, sysUserId, sysUserName)
-	case utils.DATA_SOURCE_CALCULATE_LJZZJ:
-		sourName = utils.DATA_SOURCE_NAME_CALCULATE_LJZZJ
-		if fromEdbInfo.Frequency != "季度" {
-			br.Msg = "请选择月度指标"
+	default:
+		// 获取通用的数据源处理服务
+		baseEdbInfoModel = models.GetBaseEdbInfoModel(req.Source)
+		// 没有找到的话,那么就直接返回报错吧
+		if baseEdbInfoModel == nil {
+			br.Msg = "无效计算方式"
+			br.ErrMsg = "无效计算方式,source:" + strconv.Itoa(req.Source)
 			return
 		}
-		obj := models.Ljzzj{}
-
-		addParam := models.AddCalculateBatchParams{
-			Req:             &req,
-			FromEdbInfo:     fromEdbInfo,
-			EdbCode:         edbCode,
-			UniqueCode:      uniqueCode,
-			SysUserId:       sysUserId,
-			SysUserRealName: sysUserName,
-		}
-		edbInfo, err = obj.Add(addParam)
-	default:
-		br.Msg = "无效计算方式"
-		br.ErrMsg = "无效计算方式,source:" + strconv.Itoa(req.Source)
-		return
+		sourName = baseEdbInfoModel.GetSourceName()
+		edbInfo, err, errMsg = baseEdbInfoModel.Add(addParam)
 	}
+
 	if err != nil {
 		br.Msg = "生成" + sourName + "失败"
 		if errMsg != `` {
@@ -1804,3 +1806,8 @@ func (this *CalculateController) SaveAdjust() {
 	br.Data = resp
 	br.IsAddLog = true
 }
+
+func init() {
+	obj := models.Ljzzj{}
+	obj.Test()
+}

+ 48 - 0
models/common.go

@@ -0,0 +1,48 @@
+package models
+
+import "hongze/hongze_edb_lib/utils"
+
+// BaseEdbInfoInterface 基础指标接口
+type BaseEdbInfoInterface interface {
+	Add(params AddCalculateBatchParams) (edbInfo *EdbInfo, err error, errMsg string)
+	Edit(params EditCalculateBatchParams) (err error)
+	Refresh(params RefreshParams) (err error)
+	GetSourceName() string
+}
+
+// AddCalculateBatchParams 添加的请求参
+type AddCalculateBatchParams struct {
+	Req             *EdbInfoCalculateBatchSaveReq
+	FromEdbInfo     *EdbInfo
+	EdbCode         string
+	UniqueCode      string
+	SysUserId       int
+	SysUserRealName string
+}
+
+// EditCalculateBatchParams 编辑的请求参
+type EditCalculateBatchParams struct {
+	Req         *EdbInfoCalculateBatchEditReq
+	EdbInfo     *EdbInfo
+	FromEdbInfo *EdbInfo
+}
+
+// RefreshParams 编辑的请求参
+type RefreshParams struct {
+	EdbInfoId   int
+	Source      int
+	FromEdbInfo *EdbInfo
+	EdbCode     string
+	StartDate   string
+	EndDate     string
+}
+
+func GetBaseEdbInfoModel(source int) (baseEdbInfoModel BaseEdbInfoInterface) {
+	switch source {
+	case utils.DATA_SOURCE_CALCULATE_LJZZJ:
+		baseEdbInfoModel = Ljzzj{}
+	default:
+
+	}
+	return
+}

+ 41 - 48
models/edb_data_calculate_ljzzj.go

@@ -6,26 +6,30 @@ import (
 	"github.com/beego/beego/v2/client/orm"
 	"github.com/shopspring/decimal"
 	"hongze/hongze_edb_lib/utils"
+	"reflect"
 	"strconv"
 	"strings"
 	"time"
 )
 
+// Ljzzj 累计值转季度
 type Ljzzj struct {
 }
 
-// AddCalculateBatchParams 添加的请求参
-type AddCalculateBatchParams struct {
-	Req             *EdbInfoCalculateBatchSaveReq
-	FromEdbInfo     *EdbInfo
-	EdbCode         string
-	UniqueCode      string
-	SysUserId       int
-	SysUserRealName string
+func (obj Ljzzj) Test() {
+	fmt.Println(reflect.TypeOf(obj).Name())
 }
 
-// Add 累计值转月
-func (item Ljzzj) Add(params AddCalculateBatchParams) (edbInfo *EdbInfo, err error) {
+// Add 添加
+func (obj Ljzzj) Add(params AddCalculateBatchParams) (edbInfo *EdbInfo, err error, errMsg string) {
+	req := params.Req
+	fromEdbInfo := params.FromEdbInfo
+	edbCode := params.EdbCode
+	if fromEdbInfo.Frequency != "季度" {
+		errMsg = "请选择季度指标"
+		err = errors.New(errMsg)
+		return
+	}
 	o := orm.NewOrm()
 	to, err := o.Begin()
 	if err != nil {
@@ -33,20 +37,16 @@ func (item Ljzzj) Add(params AddCalculateBatchParams) (edbInfo *EdbInfo, err err
 	}
 	defer func() {
 		if err != nil {
-			fmt.Println("AddCalculateLjzzj,Err:" + err.Error())
 			_ = to.Rollback()
+			fmt.Println(reflect.TypeOf(obj).Name(), ";Add,Err:"+err.Error())
 		} else {
 			_ = to.Commit()
 		}
 	}()
 
-	req := params.Req
-	fromEdbInfo := params.FromEdbInfo
-	edbCode := params.EdbCode
-
 	edbInfo = new(EdbInfo)
-	edbInfo.Source = utils.DATA_SOURCE_CALCULATE_LJZZJ
-	edbInfo.SourceName = utils.DATA_SOURCE_NAME_CALCULATE_LJZZJ
+	edbInfo.Source = obj.GetSource()
+	edbInfo.SourceName = obj.GetSourceName()
 	edbInfo.EdbCode = edbCode
 	edbInfo.EdbName = req.EdbName
 	edbInfo.EdbNameSource = req.EdbName
@@ -90,20 +90,13 @@ func (item Ljzzj) Add(params AddCalculateBatchParams) (edbInfo *EdbInfo, err err
 	}
 
 	//计算数据
-	err = item.refresh(to, edbInfo.EdbInfoId, edbInfo.Source, fromEdbInfo, edbInfo.EdbCode, "", "")
+	err = obj.refresh(to, edbInfo.EdbInfoId, edbInfo.Source, fromEdbInfo, edbInfo.EdbCode, "", "")
 
 	return
 }
 
-// EditCalculateBatchParams 编辑的请求参
-type EditCalculateBatchParams struct {
-	Req         *EdbInfoCalculateBatchEditReq
-	EdbInfo     *EdbInfo
-	FromEdbInfo *EdbInfo
-}
-
 // Edit 编辑
-func (item Ljzzj) Edit(params EditCalculateBatchParams) (err error) {
+func (obj Ljzzj) Edit(params EditCalculateBatchParams) (err error) {
 	req := params.Req
 	edbInfo := params.EdbInfo
 	fromEdbInfo := params.FromEdbInfo
@@ -115,8 +108,8 @@ func (item Ljzzj) Edit(params EditCalculateBatchParams) (err error) {
 	}
 	defer func() {
 		if err != nil {
-			fmt.Println("EditCalculateLjzzj,Err:" + err.Error())
 			_ = to.Rollback()
+			fmt.Println(reflect.TypeOf(obj).Name(), ";Edit,Err:"+err.Error())
 		} else {
 			_ = to.Commit()
 		}
@@ -169,8 +162,8 @@ func (item Ljzzj) Edit(params EditCalculateBatchParams) (err error) {
 		calculateMappingItem := &EdbInfoCalculateMapping{
 			EdbInfoCalculateMappingId: 0,
 			EdbInfoId:                 edbInfo.EdbInfoId,
-			Source:                    utils.DATA_SOURCE_CALCULATE_LJZZJ,
-			SourceName:                "累计值转月",
+			Source:                    obj.GetSource(),
+			SourceName:                obj.GetSourceName(),
 			EdbCode:                   edbInfo.EdbCode,
 			FromEdbInfoId:             fromEdbInfo.EdbInfoId,
 			FromEdbCode:               fromEdbInfo.EdbCode,
@@ -189,23 +182,13 @@ func (item Ljzzj) Edit(params EditCalculateBatchParams) (err error) {
 	}
 
 	//计算数据
-	err = item.refresh(to, edbInfo.EdbInfoId, edbInfo.Source, fromEdbInfo, edbInfo.EdbCode, "", "")
+	err = obj.refresh(to, edbInfo.EdbInfoId, edbInfo.Source, fromEdbInfo, edbInfo.EdbCode, "", "")
 
 	return
 }
 
-// RefreshParams 编辑的请求参
-type RefreshParams struct {
-	EdbInfoId   int
-	Source      int
-	FromEdbInfo *EdbInfo
-	EdbCode     string
-	StartDate   string
-	EndDate     string
-}
-
-// Refresh 刷新全部累计值转月数据
-func (item Ljzzj) Refresh(params RefreshParams) (err error) {
+// Refresh 刷新
+func (obj Ljzzj) Refresh(params RefreshParams) (err error) {
 	o := orm.NewOrm()
 	to, err := o.Begin()
 	if err != nil {
@@ -213,20 +196,30 @@ func (item Ljzzj) Refresh(params RefreshParams) (err error) {
 	}
 	defer func() {
 		if err != nil {
-			fmt.Println("RefreshAllCalculateLjzzj,Err:" + err.Error())
 			_ = to.Rollback()
+			fmt.Println(reflect.TypeOf(obj).Name(), ";Refresh,Err:"+err.Error())
 		} else {
 			_ = to.Commit()
 		}
 	}()
 
 	// 计算数据
-	err = item.refresh(to, params.EdbInfoId, params.Source, params.FromEdbInfo, params.EdbCode, params.StartDate, params.EndDate)
+	err = obj.refresh(to, params.EdbInfoId, params.Source, params.FromEdbInfo, params.EdbCode, params.StartDate, params.EndDate)
 
 	return
 }
 
-func (item Ljzzj) refresh(to orm.TxOrmer, edbInfoId, source int, fromEdbInfo *EdbInfo, edbCode, startDate, endDate string) (err error) {
+// GetSource 获取来源编码id
+func (obj Ljzzj) GetSource() int {
+	return utils.DATA_SOURCE_CALCULATE_LJZZJ
+}
+
+// GetSourceName 获取来源名称
+func (obj Ljzzj) GetSourceName() string {
+	return utils.DATA_SOURCE_NAME_CALCULATE_LJZZJ
+}
+
+func (obj Ljzzj) refresh(to orm.TxOrmer, edbInfoId, source int, fromEdbInfo *EdbInfo, edbCode, startDate, endDate string) (err error) {
 	dataTableName := GetEdbDataTableName(source)
 	edbInfoIdStr := strconv.Itoa(edbInfoId)
 	//计算数据
@@ -326,7 +319,7 @@ func (item Ljzzj) refresh(to orm.TxOrmer, edbInfoId, source int, fromEdbInfo *Ed
 								b := decimal.NewFromFloat(2.0)
 								val, _ = a.Div(b).Float64()
 
-								tmpSql, newAdd, tmpErr := item.calculate(edbInfoId, date, edbInfoIdStr, edbCode, dataTableName, addSql, val, dataMap, existDataMap, to)
+								tmpSql, newAdd, tmpErr := obj.calculate(edbInfoId, date, edbInfoIdStr, edbCode, dataTableName, addSql, val, dataMap, existDataMap, to)
 								if !isAdd {
 									isAdd = newAdd
 								}
@@ -355,7 +348,7 @@ func (item Ljzzj) refresh(to orm.TxOrmer, edbInfoId, source int, fromEdbInfo *Ed
 				}
 			}
 			if date != "" {
-				tmpSql, newAdd, tmpErr := item.calculate(edbInfoId, date, edbInfoIdStr, edbCode, dataTableName, addSql, val, dataMap, existDataMap, to)
+				tmpSql, newAdd, tmpErr := obj.calculate(edbInfoId, date, edbInfoIdStr, edbCode, dataTableName, addSql, val, dataMap, existDataMap, to)
 				if !isAdd {
 					isAdd = newAdd
 				}
@@ -377,7 +370,7 @@ func (item Ljzzj) refresh(to orm.TxOrmer, edbInfoId, source int, fromEdbInfo *Ed
 	return
 }
 
-func (item Ljzzj) calculate(edbInfoId int, date, edbInfoIdStr, edbCode, dataTableName, addSql string, val float64, dataMap, existDataMap map[string]string, to orm.TxOrmer) (newSql string, isAdd bool, err error) {
+func (obj Ljzzj) calculate(edbInfoId int, date, edbInfoIdStr, edbCode, dataTableName, addSql string, val float64, dataMap, existDataMap map[string]string, to orm.TxOrmer) (newSql string, isAdd bool, err error) {
 	newSql = addSql
 	saveValue := utils.SubFloatToString(val, 4)
 	//判断数据是否存在