|
@@ -194,43 +194,10 @@ func (this *CalculateController) Add() {
|
|
|
|
|
|
randStr := utils.GetRandDigit(4)
|
|
|
edbCode := `C` + time.Now().Format("060102") + randStr
|
|
|
-
|
|
|
timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
|
|
|
uniqueCode := utils.MD5(utils.DATA_PREFIX + "_" + timestamp)
|
|
|
- edbInfo := &models.EdbInfo{
|
|
|
- EdbInfoId: 0,
|
|
|
- SourceName: "指标运算",
|
|
|
- Source: utils.DATA_SOURCE_CALCULATE,
|
|
|
- EdbCode: edbCode,
|
|
|
- EdbName: req.EdbName,
|
|
|
- EdbNameSource: req.EdbName,
|
|
|
- Frequency: req.Frequency,
|
|
|
- Unit: req.Unit,
|
|
|
- StartDate: "",
|
|
|
- EndDate: "",
|
|
|
- ClassifyId: req.ClassifyId,
|
|
|
- SysUserId: req.AdminId,
|
|
|
- SysUserRealName: req.AdminName,
|
|
|
- UniqueCode: uniqueCode,
|
|
|
- CreateTime: time.Now(),
|
|
|
- ModifyTime: time.Now(),
|
|
|
- MinValue: 0,
|
|
|
- MaxValue: 0,
|
|
|
- CalculateFormula: req.CalculateFormula,
|
|
|
- EdbType: 2,
|
|
|
- Sort: 0,
|
|
|
- MoveType: 0,
|
|
|
- MoveFrequency: "",
|
|
|
- NoUpdate: 0,
|
|
|
- ServerUrl: "",
|
|
|
- EdbInfoType: 0,
|
|
|
- EdbNameEn: "",
|
|
|
- UnitEn: "",
|
|
|
- LatestDate: "",
|
|
|
- LatestValue: 0,
|
|
|
- ChartImage: "",
|
|
|
- }
|
|
|
- edbInfoId, err := models.AddEdbInfo(edbInfo)
|
|
|
+
|
|
|
+ edbInfo, err := models.AddCalculateInfo(req, calculateMappingList, edbInfoList, edbCode, uniqueCode, edbInfoIdBytes)
|
|
|
if err != nil {
|
|
|
br.Msg = "生成计算指标失败"
|
|
|
br.Msg = "生成计算指标失败,AddEdbInfo Err:" + err.Error()
|
|
@@ -257,26 +224,6 @@ func (this *CalculateController) Add() {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- //关联关系表
|
|
|
- {
|
|
|
- //处理关联指标
|
|
|
- for _, v := range calculateMappingList {
|
|
|
- v.EdbCode = edbCode
|
|
|
- v.EdbInfoId = int(edbInfoId)
|
|
|
- }
|
|
|
- if len(calculateMappingList) > 0 {
|
|
|
- go models.AddEdbInfoCalculateMappingMulti(calculateMappingList)
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // 指标数据入库
|
|
|
- err = models.AddCalculate(edbInfoList, int(edbInfoId), edbCode, req.CalculateFormula, edbInfoIdBytes)
|
|
|
- if err != nil {
|
|
|
- br.Msg = "生成计算指标失败"
|
|
|
- br.Msg = "生成计算指标失败,Calculate Err:" + err.Error()
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
// 更新指标最大最小值
|
|
|
err, errMsg := models.UnifiedModifyEdbInfoMaxAndMinInfo(edbInfo)
|
|
|
if err != nil {
|
|
@@ -285,7 +232,7 @@ func (this *CalculateController) Add() {
|
|
|
return
|
|
|
}
|
|
|
resp := models.AddEdbInfoResp{
|
|
|
- EdbInfoId: int(edbInfoId),
|
|
|
+ EdbInfoId: edbInfo.EdbInfoId,
|
|
|
UniqueCode: uniqueCode,
|
|
|
}
|
|
|
br.Ret = 200
|
|
@@ -295,6 +242,280 @@ func (this *CalculateController) Add() {
|
|
|
br.IsAddLog = true
|
|
|
}
|
|
|
|
|
|
+//func (this *CalculateController) Add() {
|
|
|
+// br := new(models.BaseResponse).Init()
|
|
|
+// defer func() {
|
|
|
+// this.Data["json"] = br
|
|
|
+// this.ServeJSON()
|
|
|
+// }()
|
|
|
+//
|
|
|
+// var req models.EdbInfoCalculateSaveReq
|
|
|
+// err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
|
|
|
+// if err != nil {
|
|
|
+// br.Msg = "参数解析异常!"
|
|
|
+// br.ErrMsg = "参数解析失败,Err:" + err.Error()
|
|
|
+// return
|
|
|
+// }
|
|
|
+//
|
|
|
+// req.EdbName = strings.Trim(req.EdbName, " ")
|
|
|
+// if req.EdbName == "" {
|
|
|
+// br.Msg = "指标名称不能为空"
|
|
|
+// return
|
|
|
+// }
|
|
|
+//
|
|
|
+// if req.Frequency == "" {
|
|
|
+// br.Msg = "频率不能为空"
|
|
|
+// return
|
|
|
+// }
|
|
|
+//
|
|
|
+// if req.Unit == "" {
|
|
|
+// br.Msg = "单位不能为空"
|
|
|
+// return
|
|
|
+// }
|
|
|
+//
|
|
|
+// if req.ClassifyId <= 0 {
|
|
|
+// br.Msg = "请选择分类"
|
|
|
+// return
|
|
|
+// }
|
|
|
+//
|
|
|
+// if len(req.EdbInfoIdArr) <= 0 {
|
|
|
+// br.Msg = "请选择指标"
|
|
|
+// return
|
|
|
+// }
|
|
|
+//
|
|
|
+// if req.CalculateFormula == "" {
|
|
|
+// br.Msg = "请填写指标"
|
|
|
+// return
|
|
|
+// }
|
|
|
+// calculateFormula := req.CalculateFormula
|
|
|
+// calculateFormula = strings.Replace(calculateFormula, "(", "(", -1)
|
|
|
+// calculateFormula = strings.Replace(calculateFormula, ")", ")", -1)
|
|
|
+// calculateFormula = strings.Replace(calculateFormula, ",", ",", -1)
|
|
|
+// calculateFormula = strings.Replace(calculateFormula, "。", ".", -1)
|
|
|
+// calculateFormula = strings.Replace(calculateFormula, "%", "*0.01", -1)
|
|
|
+// req.CalculateFormula = calculateFormula
|
|
|
+//
|
|
|
+// //加入缓存机制,避免创建同一个名称的指标 start
|
|
|
+// redisKey := fmt.Sprint("edb_lib:edb_info:calculate:add:", utils.DATA_SOURCE_CALCULATE, ":", req.EdbName)
|
|
|
+// isExist := utils.Rc.IsExist(redisKey)
|
|
|
+// if isExist {
|
|
|
+// br.Msg = "指标正在处理,请勿重复提交"
|
|
|
+// return
|
|
|
+// } else {
|
|
|
+// //设置3分钟缓存
|
|
|
+// utils.Rc.SetNX(redisKey, 1, time.Second*300)
|
|
|
+// defer func() {
|
|
|
+// utils.Rc.Delete(redisKey)
|
|
|
+// }()
|
|
|
+// }
|
|
|
+//
|
|
|
+// //判断是否重复指标
|
|
|
+// edbInfoMap := make(map[int]string)
|
|
|
+// //移除研究员选择指标中的未使用的指标
|
|
|
+// {
|
|
|
+// //转大写的计算公式
|
|
|
+// upperCalculateFormulaStr := strings.ToUpper(req.CalculateFormula)
|
|
|
+// //用到的指标
|
|
|
+// newEdbInfoIdArr := make([]models.EdbInfoFromTag, 0)
|
|
|
+// for _, tmpEdbInfo := range req.EdbInfoIdArr {
|
|
|
+// _, ok := edbInfoMap[tmpEdbInfo.EdbInfoId]
|
|
|
+// if ok {
|
|
|
+// br.Msg = "选择指标失败,请勿选择重复指标!"
|
|
|
+// return
|
|
|
+// }
|
|
|
+// edbInfoMap[tmpEdbInfo.EdbInfoId] = tmpEdbInfo.FromTag
|
|
|
+//
|
|
|
+// upperFromTag := strings.ToUpper(tmpEdbInfo.FromTag)
|
|
|
+// if strings.Contains(upperCalculateFormulaStr, upperFromTag) {
|
|
|
+// newEdbInfoIdArr = append(newEdbInfoIdArr, tmpEdbInfo)
|
|
|
+// }
|
|
|
+// }
|
|
|
+// req.EdbInfoIdArr = newEdbInfoIdArr
|
|
|
+// }
|
|
|
+//
|
|
|
+// var condition string
|
|
|
+// var pars []interface{}
|
|
|
+// condition += " AND edb_name=? "
|
|
|
+// pars = append(pars, req.EdbName)
|
|
|
+//
|
|
|
+// count, err := models.GetEdbInfoCountByCondition(condition, pars)
|
|
|
+// if err != nil {
|
|
|
+// br.Msg = "判断指标名称是否存在失败"
|
|
|
+// br.ErrMsg = "判断指标名称是否存在失败,Err:" + err.Error()
|
|
|
+// return
|
|
|
+// }
|
|
|
+//
|
|
|
+// if count > 0 {
|
|
|
+// br.Msg = "指标名称已存在,请重新填写"
|
|
|
+// br.ErrMsg = "指标名称已存在,请重新填写"
|
|
|
+// br.IsSendEmail = false
|
|
|
+// return
|
|
|
+// }
|
|
|
+// //检验公式
|
|
|
+// var formulaStr string
|
|
|
+// var edbInfoIdBytes []string
|
|
|
+// for _, v := range req.EdbInfoIdArr {
|
|
|
+// formulaStr += v.FromTag + ","
|
|
|
+// edbInfoIdBytes = append(edbInfoIdBytes, v.FromTag)
|
|
|
+// }
|
|
|
+// formulaMap := services.CheckFormula(req.CalculateFormula)
|
|
|
+// for _, v := range formulaMap {
|
|
|
+// if !strings.Contains(formulaStr, v) {
|
|
|
+// br.Msg = "公式错误,请重新填写"
|
|
|
+// return
|
|
|
+// }
|
|
|
+// }
|
|
|
+//
|
|
|
+// //关联的指标信息
|
|
|
+// edbInfoList := make([]*models.EdbInfo, 0)
|
|
|
+// //关联的指标数据表
|
|
|
+// calculateMappingList := make([]*models.EdbInfoCalculateMapping, 0)
|
|
|
+// for k, v := range req.EdbInfoIdArr {
|
|
|
+// fromEdbInfo, err := models.GetEdbInfoById(v.EdbInfoId)
|
|
|
+// if err != nil {
|
|
|
+// if err.Error() == utils.ErrNoRow() {
|
|
|
+// br.Msg = "生成计算指标失败"
|
|
|
+// br.Msg = "指标 " + strconv.Itoa(v.EdbInfoId) + " 不存在"
|
|
|
+// return
|
|
|
+// }
|
|
|
+// br.Msg = "生成计算指标失败"
|
|
|
+// br.Msg = "获取指标失败:Err:" + err.Error()
|
|
|
+// return
|
|
|
+// }
|
|
|
+//
|
|
|
+// edbInfoList = append(edbInfoList, fromEdbInfo)
|
|
|
+// //关联关系表
|
|
|
+// {
|
|
|
+// calculateMappingItem := &models.EdbInfoCalculateMapping{
|
|
|
+// EdbInfoCalculateMappingId: 0,
|
|
|
+// EdbInfoId: 0,
|
|
|
+// Source: utils.DATA_SOURCE_CALCULATE,
|
|
|
+// SourceName: "指标运算",
|
|
|
+// EdbCode: "",
|
|
|
+// FromEdbInfoId: fromEdbInfo.EdbInfoId,
|
|
|
+// FromEdbCode: fromEdbInfo.EdbCode,
|
|
|
+// FromEdbName: fromEdbInfo.EdbName,
|
|
|
+// FromSource: fromEdbInfo.Source,
|
|
|
+// FromSourceName: fromEdbInfo.SourceName,
|
|
|
+// FromTag: v.FromTag,
|
|
|
+// Sort: k + 1,
|
|
|
+// CreateTime: time.Now(),
|
|
|
+// ModifyTime: time.Now(),
|
|
|
+// }
|
|
|
+// //calculateMappingItem.EdbCode = edbCode
|
|
|
+// //calculateMappingItem.EdbInfoId = int(edbInfoId)
|
|
|
+// calculateMappingList = append(calculateMappingList, calculateMappingItem)
|
|
|
+// }
|
|
|
+// }
|
|
|
+// ok, _ := models.CheckFormula2(edbInfoList, formulaMap, calculateFormula, edbInfoIdBytes)
|
|
|
+// if !ok {
|
|
|
+// br.Msg = "生成计算指标失败,请使用正确的计算公式"
|
|
|
+// return
|
|
|
+// }
|
|
|
+//
|
|
|
+// randStr := utils.GetRandDigit(4)
|
|
|
+// edbCode := `C` + time.Now().Format("060102") + randStr
|
|
|
+//
|
|
|
+// timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
|
|
|
+// uniqueCode := utils.MD5(utils.DATA_PREFIX + "_" + timestamp)
|
|
|
+// edbInfo := &models.EdbInfo{
|
|
|
+// EdbInfoId: 0,
|
|
|
+// SourceName: "指标运算",
|
|
|
+// Source: utils.DATA_SOURCE_CALCULATE,
|
|
|
+// EdbCode: edbCode,
|
|
|
+// EdbName: req.EdbName,
|
|
|
+// EdbNameSource: req.EdbName,
|
|
|
+// Frequency: req.Frequency,
|
|
|
+// Unit: req.Unit,
|
|
|
+// StartDate: "",
|
|
|
+// EndDate: "",
|
|
|
+// ClassifyId: req.ClassifyId,
|
|
|
+// SysUserId: req.AdminId,
|
|
|
+// SysUserRealName: req.AdminName,
|
|
|
+// UniqueCode: uniqueCode,
|
|
|
+// CreateTime: time.Now(),
|
|
|
+// ModifyTime: time.Now(),
|
|
|
+// MinValue: 0,
|
|
|
+// MaxValue: 0,
|
|
|
+// CalculateFormula: req.CalculateFormula,
|
|
|
+// EdbType: 2,
|
|
|
+// Sort: 0,
|
|
|
+// MoveType: 0,
|
|
|
+// MoveFrequency: "",
|
|
|
+// NoUpdate: 0,
|
|
|
+// ServerUrl: "",
|
|
|
+// EdbInfoType: 0,
|
|
|
+// EdbNameEn: "",
|
|
|
+// UnitEn: "",
|
|
|
+// LatestDate: "",
|
|
|
+// LatestValue: 0,
|
|
|
+// ChartImage: "",
|
|
|
+// }
|
|
|
+// edbInfoId, err := models.AddEdbInfo(edbInfo)
|
|
|
+// if err != nil {
|
|
|
+// br.Msg = "生成计算指标失败"
|
|
|
+// br.Msg = "生成计算指标失败,AddEdbInfo Err:" + err.Error()
|
|
|
+// return
|
|
|
+// }
|
|
|
+// //处理同名指标
|
|
|
+// {
|
|
|
+// edbNameList, err := models.GetEdbInfoByName(req.EdbName)
|
|
|
+// if err != nil {
|
|
|
+// br.Msg = "保存失败"
|
|
|
+// br.ErrMsg = "获取指标信息失败,Err:" + err.Error()
|
|
|
+// return
|
|
|
+// }
|
|
|
+// if len(edbNameList) >= 2 {
|
|
|
+// for _, v := range edbNameList {
|
|
|
+// edbName := v.EdbName + "(" + v.SourceName + ")"
|
|
|
+// err = models.ModifyEdbInfoNameSource(edbName, v.EdbInfoId)
|
|
|
+// if err != nil {
|
|
|
+// br.Msg = "保存失败"
|
|
|
+// br.ErrMsg = "修改指标名称失败,Err:" + err.Error()
|
|
|
+// return
|
|
|
+// }
|
|
|
+// }
|
|
|
+// }
|
|
|
+// }
|
|
|
+//
|
|
|
+// //关联关系表
|
|
|
+// {
|
|
|
+// //处理关联指标
|
|
|
+// for _, v := range calculateMappingList {
|
|
|
+// v.EdbCode = edbCode
|
|
|
+// v.EdbInfoId = int(edbInfoId)
|
|
|
+// }
|
|
|
+// if len(calculateMappingList) > 0 {
|
|
|
+// go models.AddEdbInfoCalculateMappingMulti(calculateMappingList)
|
|
|
+// }
|
|
|
+// }
|
|
|
+//
|
|
|
+// // 指标数据入库
|
|
|
+// err = models.AddCalculate(edbInfoList, int(edbInfoId), edbCode, req.CalculateFormula, edbInfoIdBytes)
|
|
|
+// if err != nil {
|
|
|
+// br.Msg = "生成计算指标失败"
|
|
|
+// br.Msg = "生成计算指标失败,Calculate Err:" + err.Error()
|
|
|
+// return
|
|
|
+// }
|
|
|
+//
|
|
|
+// // 更新指标最大最小值
|
|
|
+// err, errMsg := models.UnifiedModifyEdbInfoMaxAndMinInfo(edbInfo)
|
|
|
+// if err != nil {
|
|
|
+// br.Msg = errMsg
|
|
|
+// br.ErrMsg = err.Error()
|
|
|
+// return
|
|
|
+// }
|
|
|
+// resp := models.AddEdbInfoResp{
|
|
|
+// EdbInfoId: int(edbInfoId),
|
|
|
+// UniqueCode: uniqueCode,
|
|
|
+// }
|
|
|
+// br.Ret = 200
|
|
|
+// br.Success = true
|
|
|
+// br.Msg = "保存成功"
|
|
|
+// br.Data = resp
|
|
|
+// br.IsAddLog = true
|
|
|
+//}
|
|
|
+
|
|
|
// Edit
|
|
|
// @Title 编辑计算指标接口
|
|
|
// @Description 编辑计算指标接口
|