|
@@ -8,6 +8,7 @@ import (
|
|
|
"eta/eta_api/services/data"
|
|
|
"eta/eta_api/utils"
|
|
|
"fmt"
|
|
|
+ "github.com/rdlucklib/rdluck_tools/paging"
|
|
|
"net/url"
|
|
|
"strconv"
|
|
|
"strings"
|
|
@@ -163,6 +164,7 @@ func (this *ChartInfoController) CalculateSave() {
|
|
|
EdbInfoIdArr: req.EdbInfoIdArr,
|
|
|
EmptyType: req.EmptyType,
|
|
|
MaxEmptyType: req.MaxEmptyType,
|
|
|
+ Extra: req.Extra,
|
|
|
}
|
|
|
reqJson, err := json.Marshal(req2)
|
|
|
if err != nil {
|
|
@@ -434,6 +436,7 @@ func (this *ChartInfoController) CalculateEdit() {
|
|
|
EdbInfoIdArr: req.EdbInfoIdArr,
|
|
|
EmptyType: req.EmptyType,
|
|
|
MaxEmptyType: req.MaxEmptyType,
|
|
|
+ Extra: req.Extra,
|
|
|
}
|
|
|
reqJson, err := json.Marshal(req2)
|
|
|
if err != nil {
|
|
@@ -626,6 +629,7 @@ func (this *ChartInfoController) CalculateBatchSave() {
|
|
|
//CalculateFormula: edbInfo.CalculateFormula,
|
|
|
EdbInfoIdArr: req.EdbInfoIdArr,
|
|
|
Calendar: req.Calendar,
|
|
|
+ Extra: req.Extra,
|
|
|
}
|
|
|
|
|
|
// 调用指标库去更新
|
|
@@ -832,6 +836,7 @@ func (this *ChartInfoController) CalculateBatchEdit() {
|
|
|
MoveFrequency: req.MoveFrequency,
|
|
|
EdbInfoIdArr: req.EdbInfoIdArr,
|
|
|
Calendar: req.Calendar,
|
|
|
+ Extra: req.Extra,
|
|
|
}
|
|
|
|
|
|
// 调用指标库去更新
|
|
@@ -1583,8 +1588,8 @@ func (this *ChartInfoController) BatchCalculateBatchSave() {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- var reqList []data_manage.BatchEdbInfoCalculateBatchSaveReq
|
|
|
- err := json.Unmarshal(this.Ctx.Input.RequestBody, &reqList)
|
|
|
+ var req data_manage.BatchEdbInfoCalculateBatchSaveReq
|
|
|
+ err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
|
|
|
if err != nil {
|
|
|
br.Msg = "参数解析异常!"
|
|
|
br.ErrMsg = "参数解析失败,Err:" + err.Error()
|
|
@@ -1595,17 +1600,83 @@ func (this *ChartInfoController) BatchCalculateBatchSave() {
|
|
|
Fail: make([]data_manage.BatchEdbInfoCalculateBatchSaveFailResp, 0),
|
|
|
Success: make([]data_manage.BatchEdbInfoCalculateBatchSaveSuccessResp, 0),
|
|
|
}
|
|
|
- redisKeyList := make([]string, 0) //需要清理的缓存key列表
|
|
|
- defer func() {
|
|
|
- for _, redisKey := range redisKeyList {
|
|
|
- utils.Rc.Delete(redisKey)
|
|
|
+
|
|
|
+ var formulaInt int
|
|
|
+ switch req.Source {
|
|
|
+ case utils.DATA_SOURCE_CALCULATE_NSZYDPJJS, utils.DATA_SOURCE_CALCULATE_HBZ, utils.DATA_SOURCE_CALCULATE_HCZ, utils.DATA_SOURCE_CALCULATE_TIME_SHIFT, utils.DATA_SOURCE_CALCULATE_CJJX:
|
|
|
+ if req.Formula == "" {
|
|
|
+ br.Msg = "请输入N值"
|
|
|
+ return
|
|
|
}
|
|
|
- }()
|
|
|
+ formulaInt, _ = strconv.Atoi(req.Formula)
|
|
|
+ if formulaInt <= 0 {
|
|
|
+ br.Msg = "N值输入错误,请重新输入"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ case utils.DATA_SOURCE_CALCULATE_ZJPJ:
|
|
|
+ //直接拼接指标
|
|
|
+ //校验时间格式
|
|
|
+ _, err = time.ParseInLocation(utils.FormatDate, req.Formula, time.Local)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "拼接日期有误,请重新输入"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ case utils.DATA_SOURCE_CALCULATE_NHCC: //拟合残差指标
|
|
|
+ //指标校验
|
|
|
+ if len(req.EdbInfoIdArr) != 2 {
|
|
|
+ br.Msg = "选择的指标异常,请重新选择"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ fromEdbInfoId := req.EdbInfoIdArr[0].EdbInfoId
|
|
|
+ if fromEdbInfoId <= 0 {
|
|
|
+ br.Msg = "请选择指标"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ //校验时间格式
|
|
|
+ //数据格式:2022-11-01,2022-11-10
|
|
|
+ timeList := strings.Split(req.Formula, ",")
|
|
|
+ if len(timeList) != 2 {
|
|
|
+ br.Msg = "选择的指标异常,请重新选择"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ startDate, err := time.ParseInLocation(utils.FormatDate, timeList[0], time.Local)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "开始日期有误,请重新输入"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ endDate, err := time.ParseInLocation(utils.FormatDate, timeList[1], time.Local)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "结束日期有误,请重新输入"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if utils.GetTimeSubDay(startDate, endDate) < 2 {
|
|
|
+ br.Msg = "日期间隔不得少于两天"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ case utils.DATA_SOURCE_CALCULATE_ZSXY: // 指数修匀
|
|
|
+ if req.Formula == "" {
|
|
|
+ br.Msg = "请填写alpha值"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ alpha, e := strconv.ParseFloat(req.Formula, 64)
|
|
|
+ if e != nil {
|
|
|
+ br.Msg = "alpha值输入错误, 请重新输入"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if alpha <= 0 || alpha >= 1 {
|
|
|
+ br.Msg = "alpha值输入错误, 请重新输入"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- for _, v := range reqList {
|
|
|
- req := v.CalculateInfo
|
|
|
- req.EdbName = strings.Trim(req.EdbName, " ")
|
|
|
- if req.EdbName == "" {
|
|
|
+ if len(req.EdbList) > 100 {
|
|
|
+ br.Msg = "最多只能选择100个指标"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ reqEdbList := make([]*data_manage.CalculateEdbInfoItem, 0)
|
|
|
+ for _, v := range req.EdbList {
|
|
|
+ v.EdbName = strings.Trim(v.EdbName, " ")
|
|
|
+ if v.EdbName == "" {
|
|
|
resp.Fail = append(resp.Fail, data_manage.BatchEdbInfoCalculateBatchSaveFailResp{
|
|
|
CalculateId: v.CalculateId,
|
|
|
Msg: "指标名称不能为空",
|
|
@@ -1613,7 +1684,7 @@ func (this *ChartInfoController) BatchCalculateBatchSave() {
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
- if req.Frequency == "" {
|
|
|
+ if v.Frequency == "" {
|
|
|
resp.Fail = append(resp.Fail, data_manage.BatchEdbInfoCalculateBatchSaveFailResp{
|
|
|
CalculateId: v.CalculateId,
|
|
|
Msg: "频率不能为空",
|
|
@@ -1621,7 +1692,7 @@ func (this *ChartInfoController) BatchCalculateBatchSave() {
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
- if req.Unit == "" {
|
|
|
+ if v.Unit == "" {
|
|
|
resp.Fail = append(resp.Fail, data_manage.BatchEdbInfoCalculateBatchSaveFailResp{
|
|
|
CalculateId: v.CalculateId,
|
|
|
Msg: "单位不能为空",
|
|
@@ -1629,7 +1700,7 @@ func (this *ChartInfoController) BatchCalculateBatchSave() {
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
- if req.ClassifyId <= 0 {
|
|
|
+ if v.ClassifyId <= 0 {
|
|
|
resp.Fail = append(resp.Fail, data_manage.BatchEdbInfoCalculateBatchSaveFailResp{
|
|
|
CalculateId: v.CalculateId,
|
|
|
Msg: "请选择分类",
|
|
@@ -1637,185 +1708,247 @@ func (this *ChartInfoController) BatchCalculateBatchSave() {
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
- fromEdbInfoId := req.FromEdbInfoId
|
|
|
+ //加入缓存机制,避免创建同一个名称的指标 start
|
|
|
+ redisKey := fmt.Sprint("edb_info:calculate:batch:save:", req.Source, ":", v.EdbName)
|
|
|
+ isExist := utils.Rc.IsExist(redisKey)
|
|
|
+ if isExist {
|
|
|
+ resp.Fail = append(resp.Fail, data_manage.BatchEdbInfoCalculateBatchSaveFailResp{
|
|
|
+ CalculateId: v.CalculateId,
|
|
|
+ Msg: "指标正在处理,请勿重复提交",
|
|
|
+ })
|
|
|
+ continue
|
|
|
+ } else {
|
|
|
+ //设置3分钟缓存
|
|
|
+ //utils.Rc.SetNX(redisKey, 1, time.Second*300)
|
|
|
+ //redisKeyList = append(redisKeyList, redisKey)
|
|
|
+ }
|
|
|
+ reqEdbList = append(reqEdbList, v)
|
|
|
+ }
|
|
|
|
|
|
- var formulaInt int
|
|
|
- switch req.Source {
|
|
|
- case utils.DATA_SOURCE_CALCULATE_NSZYDPJJS, utils.DATA_SOURCE_CALCULATE_HBZ, utils.DATA_SOURCE_CALCULATE_HCZ, utils.DATA_SOURCE_CALCULATE_TIME_SHIFT, utils.DATA_SOURCE_CALCULATE_CJJX:
|
|
|
- if req.Formula == "" {
|
|
|
- resp.Fail = append(resp.Fail, data_manage.BatchEdbInfoCalculateBatchSaveFailResp{
|
|
|
- CalculateId: v.CalculateId,
|
|
|
- Msg: "请选择分类",
|
|
|
- })
|
|
|
- continue
|
|
|
- }
|
|
|
- formulaInt, _ = strconv.Atoi(req.Formula)
|
|
|
- if formulaInt <= 0 {
|
|
|
- resp.Fail = append(resp.Fail, data_manage.BatchEdbInfoCalculateBatchSaveFailResp{
|
|
|
- CalculateId: v.CalculateId,
|
|
|
- Msg: "N值输入错误,请重新输入",
|
|
|
- })
|
|
|
- continue
|
|
|
- }
|
|
|
- case utils.DATA_SOURCE_CALCULATE_ZJPJ:
|
|
|
- //直接拼接指标
|
|
|
- //校验时间格式
|
|
|
- _, err = time.ParseInLocation(utils.FormatDate, req.Formula, time.Local)
|
|
|
- if err != nil {
|
|
|
- resp.Fail = append(resp.Fail, data_manage.BatchEdbInfoCalculateBatchSaveFailResp{
|
|
|
- CalculateId: v.CalculateId,
|
|
|
- Msg: "拼接日期有误,请重新输入",
|
|
|
- })
|
|
|
- continue
|
|
|
- }
|
|
|
- case utils.DATA_SOURCE_CALCULATE_NHCC: //拟合残差指标
|
|
|
- //指标校验
|
|
|
- if len(req.EdbInfoIdArr) != 2 {
|
|
|
- resp.Fail = append(resp.Fail, data_manage.BatchEdbInfoCalculateBatchSaveFailResp{
|
|
|
- CalculateId: v.CalculateId,
|
|
|
- Msg: "选择的指标异常,请重新选择",
|
|
|
- })
|
|
|
- continue
|
|
|
- }
|
|
|
- fromEdbInfoId = req.EdbInfoIdArr[0].EdbInfoId
|
|
|
-
|
|
|
- //校验时间格式
|
|
|
- //数据格式:2022-11-01,2022-11-10
|
|
|
- timeList := strings.Split(req.Formula, ",")
|
|
|
- if len(timeList) != 2 {
|
|
|
- resp.Fail = append(resp.Fail, data_manage.BatchEdbInfoCalculateBatchSaveFailResp{
|
|
|
- CalculateId: v.CalculateId,
|
|
|
- Msg: "选择时间有误,请重新输入",
|
|
|
- })
|
|
|
- continue
|
|
|
- }
|
|
|
- startDate, err := time.ParseInLocation(utils.FormatDate, timeList[0], time.Local)
|
|
|
- if err != nil {
|
|
|
- resp.Fail = append(resp.Fail, data_manage.BatchEdbInfoCalculateBatchSaveFailResp{
|
|
|
- CalculateId: v.CalculateId,
|
|
|
- Msg: "开始日期有误,请重新输入",
|
|
|
- })
|
|
|
- continue
|
|
|
- }
|
|
|
- endDate, err := time.ParseInLocation(utils.FormatDate, timeList[1], time.Local)
|
|
|
- if err != nil {
|
|
|
- resp.Fail = append(resp.Fail, data_manage.BatchEdbInfoCalculateBatchSaveFailResp{
|
|
|
- CalculateId: v.CalculateId,
|
|
|
- Msg: "结束日期有误,请重新输入",
|
|
|
- })
|
|
|
- continue
|
|
|
- }
|
|
|
- if utils.GetTimeSubDay(startDate, endDate) < 2 {
|
|
|
- resp.Fail = append(resp.Fail, data_manage.BatchEdbInfoCalculateBatchSaveFailResp{
|
|
|
- CalculateId: v.CalculateId,
|
|
|
- Msg: "日期间隔不得少于两天",
|
|
|
- })
|
|
|
- continue
|
|
|
- }
|
|
|
- case utils.DATA_SOURCE_CALCULATE_ZSXY: // 指数修匀
|
|
|
- if req.Formula == "" {
|
|
|
- br.Msg = "请填写alpha值"
|
|
|
- return
|
|
|
- }
|
|
|
- alpha, e := strconv.ParseFloat(req.Formula, 64)
|
|
|
- if e != nil {
|
|
|
- br.Msg = "alpha值输入错误, 请重新输入"
|
|
|
- return
|
|
|
- }
|
|
|
- if alpha <= 0 || alpha >= 1 {
|
|
|
- br.Msg = "alpha值输入错误, 请重新输入"
|
|
|
- return
|
|
|
- }
|
|
|
+ if len(reqEdbList) <= 0 {
|
|
|
+ br.Msg = "新增失败!"
|
|
|
+ if len(resp.Fail) > 0 {
|
|
|
+ br.ErrMsg = resp.Fail[0].Msg
|
|
|
+ } else {
|
|
|
+ br.Msg = "请选择指标"
|
|
|
+ }
|
|
|
+ return
|
|
|
+ }
|
|
|
+ req.AdminId = sysUser.AdminId
|
|
|
+ req.AdminName = sysUser.RealName
|
|
|
+ req.EdbList = reqEdbList
|
|
|
+ // 调用指标库去更新
|
|
|
+ reqJson, err := json.Marshal(req)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "参数解析异常!"
|
|
|
+ br.ErrMsg = "参数解析失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ respItem, err := data.BatchSaveEdbCalculateMultiData(string(reqJson))
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "新增失败!"
|
|
|
+ br.ErrMsg = "新增失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if respItem.Ret != 200 {
|
|
|
+ br.Msg = respItem.Msg
|
|
|
+ br.ErrMsg = respItem.ErrMsg
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ br.Ret = 200
|
|
|
+ br.Success = true
|
|
|
+ br.Msg = "批量保存成功"
|
|
|
+ br.Data = respItem.Data
|
|
|
+ br.IsAddLog = true
|
|
|
+}
|
|
|
+
|
|
|
+// BatchCalculateBatchEdit
|
|
|
+// @Title 多指标求和和多指标求平均编辑接口
|
|
|
+// @Description 多指标求和和多指标求平均编辑接口
|
|
|
+// @Param request body data_manage.EdbInfoCalculateBatchSaveReq true "type json string"
|
|
|
+// @Success Ret=200 返回指标id
|
|
|
+// @router /edb_info/calculate/batch/edit/batch [post]
|
|
|
+func (this *ChartInfoController) BatchCalculateBatchEdit() {
|
|
|
+ br := new(models.BaseResponse).Init()
|
|
|
+ defer func() {
|
|
|
+ if br.ErrMsg == "" {
|
|
|
+ br.IsSendEmail = false
|
|
|
}
|
|
|
+ this.Data["json"] = br
|
|
|
+ this.ServeJSON()
|
|
|
+ }()
|
|
|
+
|
|
|
+ sysUser := this.SysUser
|
|
|
+ if sysUser == nil {
|
|
|
+ br.Msg = "请登录"
|
|
|
+ br.ErrMsg = "请登录,SysUser Is Empty"
|
|
|
+ br.Ret = 408
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ var req data_manage.BatchEdbInfoCalculateBatchSaveReq
|
|
|
+ err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "参数解析异常!"
|
|
|
+ br.ErrMsg = "参数解析失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ resp := data_manage.BatchEdbInfoCalculateBatchSaveResp{
|
|
|
+ Fail: make([]data_manage.BatchEdbInfoCalculateBatchSaveFailResp, 0),
|
|
|
+ Success: make([]data_manage.BatchEdbInfoCalculateBatchSaveSuccessResp, 0),
|
|
|
+ }
|
|
|
|
|
|
+ var formulaInt int
|
|
|
+ switch req.Source {
|
|
|
+ case utils.DATA_SOURCE_CALCULATE_NSZYDPJJS, utils.DATA_SOURCE_CALCULATE_HBZ, utils.DATA_SOURCE_CALCULATE_HCZ, utils.DATA_SOURCE_CALCULATE_TIME_SHIFT, utils.DATA_SOURCE_CALCULATE_CJJX:
|
|
|
+ if req.Formula == "" {
|
|
|
+ br.Msg = "请输入N值"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ formulaInt, _ = strconv.Atoi(req.Formula)
|
|
|
+ if formulaInt <= 0 {
|
|
|
+ br.Msg = "N值输入错误,请重新输入"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ case utils.DATA_SOURCE_CALCULATE_ZJPJ:
|
|
|
+ //直接拼接指标
|
|
|
+ //校验时间格式
|
|
|
+ _, err = time.ParseInLocation(utils.FormatDate, req.Formula, time.Local)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "拼接日期有误,请重新输入"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ case utils.DATA_SOURCE_CALCULATE_NHCC: //拟合残差指标
|
|
|
+ //指标校验
|
|
|
+ if len(req.EdbInfoIdArr) != 2 {
|
|
|
+ br.Msg = "选择的指标异常,请重新选择"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ fromEdbInfoId := req.EdbInfoIdArr[0].EdbInfoId
|
|
|
if fromEdbInfoId <= 0 {
|
|
|
+ br.Msg = "请选择指标"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ //校验时间格式
|
|
|
+ //数据格式:2022-11-01,2022-11-10
|
|
|
+ timeList := strings.Split(req.Formula, ",")
|
|
|
+ if len(timeList) != 2 {
|
|
|
+ br.Msg = "选择的指标异常,请重新选择"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ startDate, err := time.ParseInLocation(utils.FormatDate, timeList[0], time.Local)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "开始日期有误,请重新输入"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ endDate, err := time.ParseInLocation(utils.FormatDate, timeList[1], time.Local)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "结束日期有误,请重新输入"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if utils.GetTimeSubDay(startDate, endDate) < 2 {
|
|
|
+ br.Msg = "日期间隔不得少于两天"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ case utils.DATA_SOURCE_CALCULATE_ZSXY: // 指数修匀
|
|
|
+ if req.Formula == "" {
|
|
|
+ br.Msg = "请填写alpha值"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ alpha, e := strconv.ParseFloat(req.Formula, 64)
|
|
|
+ if e != nil {
|
|
|
+ br.Msg = "alpha值输入错误, 请重新输入"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if alpha <= 0 || alpha >= 1 {
|
|
|
+ br.Msg = "alpha值输入错误, 请重新输入"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if len(req.EdbList) > 50 {
|
|
|
+ br.Msg = "最多只能选择50个指标"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ reqEdbList := make([]*data_manage.CalculateEdbInfoItem, 0)
|
|
|
+ for _, v := range req.EdbList {
|
|
|
+ if v.EdbInfoId <= 0 {
|
|
|
resp.Fail = append(resp.Fail, data_manage.BatchEdbInfoCalculateBatchSaveFailResp{
|
|
|
CalculateId: v.CalculateId,
|
|
|
- Msg: "请选择指标",
|
|
|
+ Msg: "请选择要编辑的指标",
|
|
|
})
|
|
|
continue
|
|
|
}
|
|
|
-
|
|
|
- //加入缓存机制,避免创建同一个名称的指标 start
|
|
|
- redisKey := fmt.Sprint("edb_info:calculate:batch:save:", sysUser.AdminId, ":", req.Source, ":", v.CalculateId)
|
|
|
- isExist := utils.Rc.IsExist(redisKey)
|
|
|
- if isExist {
|
|
|
+ v.EdbName = strings.Trim(v.EdbName, " ")
|
|
|
+ if v.EdbName == "" {
|
|
|
resp.Fail = append(resp.Fail, data_manage.BatchEdbInfoCalculateBatchSaveFailResp{
|
|
|
CalculateId: v.CalculateId,
|
|
|
- Msg: "指标正在处理,请勿重复提交",
|
|
|
+ Msg: "指标名称不能为空",
|
|
|
})
|
|
|
continue
|
|
|
- } else {
|
|
|
- //设置3分钟缓存
|
|
|
- utils.Rc.SetNX(redisKey, 1, time.Second*300)
|
|
|
- redisKeyList = append(redisKeyList, redisKey)
|
|
|
- }
|
|
|
- //加入缓存机制,避免创建同一个名称的指标 end
|
|
|
-
|
|
|
- req2 := &data_manage.EdbInfoCalculateBatchSaveReqByEdbLib{
|
|
|
- AdminId: sysUser.AdminId,
|
|
|
- AdminName: sysUser.RealName,
|
|
|
- EdbInfoId: req.EdbInfoId,
|
|
|
- EdbName: req.EdbName,
|
|
|
- Frequency: req.Frequency,
|
|
|
- Unit: req.Unit,
|
|
|
- ClassifyId: req.ClassifyId,
|
|
|
- Formula: req.Formula, //N数值移动平均计算、环比值、环差值
|
|
|
- FromEdbInfoId: req.FromEdbInfoId,
|
|
|
- CalculateFormula: req.CalculateFormula,
|
|
|
- Source: req.Source,
|
|
|
- MoveType: req.MoveType,
|
|
|
- MoveFrequency: req.MoveFrequency,
|
|
|
-
|
|
|
- //CalculateFormula: edbInfo.CalculateFormula,
|
|
|
- EdbInfoIdArr: req.EdbInfoIdArr,
|
|
|
- Calendar: req.Calendar,
|
|
|
- }
|
|
|
-
|
|
|
- // 调用指标库去更新
|
|
|
- reqJson, err := json.Marshal(req2)
|
|
|
- if err != nil {
|
|
|
+ }
|
|
|
+
|
|
|
+ if v.Frequency == "" {
|
|
|
resp.Fail = append(resp.Fail, data_manage.BatchEdbInfoCalculateBatchSaveFailResp{
|
|
|
CalculateId: v.CalculateId,
|
|
|
- Msg: "参数解析异常!",
|
|
|
- ErrMsg: "参数解析失败,Err:" + err.Error(),
|
|
|
+ Msg: "频率不能为空",
|
|
|
})
|
|
|
continue
|
|
|
}
|
|
|
- respItem, err := data.BatchSaveEdbCalculateData(string(reqJson))
|
|
|
- if err != nil {
|
|
|
+
|
|
|
+ if v.Unit == "" {
|
|
|
resp.Fail = append(resp.Fail, data_manage.BatchEdbInfoCalculateBatchSaveFailResp{
|
|
|
CalculateId: v.CalculateId,
|
|
|
- Msg: "新增失败!",
|
|
|
- ErrMsg: "新增失败,Err:" + err.Error(),
|
|
|
+ Msg: "单位不能为空",
|
|
|
})
|
|
|
continue
|
|
|
}
|
|
|
- if respItem.Ret != 200 {
|
|
|
+
|
|
|
+ if v.ClassifyId <= 0 {
|
|
|
resp.Fail = append(resp.Fail, data_manage.BatchEdbInfoCalculateBatchSaveFailResp{
|
|
|
CalculateId: v.CalculateId,
|
|
|
- Msg: respItem.Msg,
|
|
|
- ErrMsg: respItem.ErrMsg,
|
|
|
+ Msg: "请选择分类",
|
|
|
})
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
- result := respItem.Data
|
|
|
-
|
|
|
- //添加es
|
|
|
- data.AddOrEditEdbInfoToEs(result.EdbInfoId)
|
|
|
- resp.Success = append(resp.Success, data_manage.BatchEdbInfoCalculateBatchSaveSuccessResp{
|
|
|
- ClassifyId: req.ClassifyId,
|
|
|
- CalculateId: v.CalculateId,
|
|
|
- EdbInfoId: result.EdbInfoId,
|
|
|
- UniqueCode: result.UniqueCode,
|
|
|
- })
|
|
|
+ reqEdbList = append(reqEdbList, v)
|
|
|
+ }
|
|
|
+ if len(reqEdbList) <= 0 {
|
|
|
+ br.Msg = "编辑失败!"
|
|
|
+ if len(resp.Fail) > 0 {
|
|
|
+ br.ErrMsg = resp.Fail[0].Msg
|
|
|
+ } else {
|
|
|
+ br.Msg = "请选择指标"
|
|
|
+ }
|
|
|
+ return
|
|
|
+ }
|
|
|
+ req.EdbList = reqEdbList
|
|
|
+ // 调用指标库去更新
|
|
|
+ reqJson, err := json.Marshal(req)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "参数解析异常!"
|
|
|
+ br.ErrMsg = "参数解析失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ respItem, err := data.BatchEditEdbCalculateMultiData(string(reqJson))
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "编辑失败!"
|
|
|
+ br.ErrMsg = "编辑失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if respItem.Ret != 200 {
|
|
|
+ br.Msg = respItem.Msg
|
|
|
+ br.ErrMsg = respItem.ErrMsg
|
|
|
+ return
|
|
|
}
|
|
|
|
|
|
br.Ret = 200
|
|
|
br.Success = true
|
|
|
- br.Msg = "批量保存成功"
|
|
|
- br.Data = resp
|
|
|
+ br.Msg = "批量编辑成功"
|
|
|
+ br.Data = respItem.Data
|
|
|
br.IsAddLog = true
|
|
|
}
|
|
|
|
|
@@ -1953,3 +2086,258 @@ func (this *ChartInfoController) CalculateComputeCorrelation() {
|
|
|
br.Msg = "计算成功"
|
|
|
br.IsAddLog = true
|
|
|
}
|
|
|
+
|
|
|
+// CalculateMultiChoice
|
|
|
+// @Title 批量计算-加入已选指标
|
|
|
+// @Description 批量计算-加入已选指标
|
|
|
+// @Param ClassifyIds query int true "指标库分类IDs"
|
|
|
+// @Param SysUserIds query int true "创建人"
|
|
|
+// @Param Keyword query string false "关键词搜索"
|
|
|
+// @Param Frequency query string false "频度"
|
|
|
+// @Success 200 {object} data_manage.EdbInfoSearchResp
|
|
|
+// @router /edb_info/calculate/multi/choice [get]
|
|
|
+func (this *ChartInfoController) CalculateMultiChoice() {
|
|
|
+ br := new(models.BaseResponse).Init()
|
|
|
+ defer func() {
|
|
|
+ this.Data["json"] = br
|
|
|
+ this.ServeJSON()
|
|
|
+ }()
|
|
|
+
|
|
|
+ //来源类型,1:中文,2:英文
|
|
|
+ frequency := this.GetString("Frequency")
|
|
|
+ keyword := this.GetString("Keyword")
|
|
|
+ sysUserIds := this.GetString("SysUserIds")
|
|
|
+ classifyIds := this.GetString("ClassifyIds")
|
|
|
+ edbInfoIds := this.GetString("EdbInfoIds")
|
|
|
+ selectAll, _ := this.GetBool("SelectAll")
|
|
|
+ notFrequency := this.GetString("NotFrequency")
|
|
|
+ var edbIdArr []int
|
|
|
+
|
|
|
+ if selectAll {
|
|
|
+ // 如果勾了列表全选,那么EdbCode传的就是排除的code
|
|
|
+
|
|
|
+ var condition string
|
|
|
+ var pars []interface{}
|
|
|
+
|
|
|
+ if classifyIds != "" {
|
|
|
+ classifyIdsArr := strings.Split(classifyIds, ",")
|
|
|
+ condition += ` AND classify_id IN (` + utils.GetOrmInReplace(len(classifyIdsArr)) + `) `
|
|
|
+ pars = append(pars, classifyIdsArr)
|
|
|
+ }
|
|
|
+
|
|
|
+ if frequency != "" {
|
|
|
+ frequencyArr := strings.Split(frequency, ",")
|
|
|
+ condition += ` AND frequency IN (` + utils.GetOrmInReplace(len(frequencyArr)) + `) `
|
|
|
+ pars = append(pars, frequencyArr)
|
|
|
+ }
|
|
|
+ if notFrequency != "" {
|
|
|
+ notFrequencyArr := strings.Split(notFrequency, ",")
|
|
|
+ condition += ` AND frequency NOT IN (` + utils.GetOrmInReplace(len(notFrequencyArr)) + `) `
|
|
|
+ pars = append(pars, notFrequencyArr)
|
|
|
+ }
|
|
|
+
|
|
|
+ if sysUserIds != "" {
|
|
|
+ sysUserIdSlice := strings.Split(sysUserIds, ",")
|
|
|
+ condition += ` AND sys_user_id IN (` + utils.GetOrmInReplace(len(sysUserIdSlice)) + `)`
|
|
|
+ pars = append(pars, sysUserIdSlice)
|
|
|
+ }
|
|
|
+
|
|
|
+ if keyword != "" {
|
|
|
+ keyWordArr := strings.Split(keyword, " ")
|
|
|
+
|
|
|
+ if len(keyWordArr) > 0 {
|
|
|
+ for _, v := range keyWordArr {
|
|
|
+ condition += ` AND CONCAT(edb_name,edb_code) LIKE ?`
|
|
|
+ pars = append(pars, utils.GetLikeKeyword(v))
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ edbList, e := data_manage.GetEdbInfoFilter(condition, pars)
|
|
|
+ if e != nil {
|
|
|
+ br.Msg = "获取指标列表失败"
|
|
|
+ br.ErrMsg = "获取指标列表失败,Err:" + e.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, v := range edbList {
|
|
|
+ edbIdArr = append(edbIdArr, v.EdbInfoId)
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ //未勾选全选EdbCode就是需要的code
|
|
|
+ edbIdStrArr := strings.Split(edbInfoIds, ",")
|
|
|
+ for _, v := range edbIdStrArr {
|
|
|
+ id, e := strconv.Atoi(v)
|
|
|
+ if e != nil {
|
|
|
+ br.Msg = "获取指标列表失败"
|
|
|
+ br.ErrMsg = "获取指标列表失败,Err:" + e.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ edbIdArr = append(edbIdArr, id)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if len(edbIdArr) > 100 {
|
|
|
+ br.Msg = "最多只能选择100个指标"
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if len(edbIdArr) <= 0 {
|
|
|
+ br.Msg = "无符合指标或指标代码错误"
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ list, err := data_manage.GetEdbInfoByIdList(edbIdArr)
|
|
|
+ if err != nil && err.Error() != utils.ErrNoRow() {
|
|
|
+ br.Msg = "获取指标列表失败"
|
|
|
+ br.ErrMsg = "获取指标列表失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ searchItemList := make([]data_manage.EdbInfoBase, 0)
|
|
|
+
|
|
|
+ resp := new(data_manage.CalculateMultiChoiceResp)
|
|
|
+
|
|
|
+ for _, info := range list {
|
|
|
+ searchItem := data_manage.EdbInfoBase{
|
|
|
+ Frequency: info.Frequency,
|
|
|
+ Unit: info.Unit,
|
|
|
+ EdbName: info.EdbName,
|
|
|
+ EdbInfoId: info.EdbInfoId,
|
|
|
+ ClassifyId: info.ClassifyId,
|
|
|
+ }
|
|
|
+ searchItemList = append(searchItemList, searchItem)
|
|
|
+ }
|
|
|
+
|
|
|
+ resp.SearchItem = searchItemList
|
|
|
+
|
|
|
+ br.Ret = 200
|
|
|
+ br.Success = true
|
|
|
+ br.Msg = "获取成功"
|
|
|
+ br.Data = resp
|
|
|
+}
|
|
|
+
|
|
|
+// CalculateMultiSearch
|
|
|
+// @Title 批量计算-查询指标
|
|
|
+// @Description 批量计算-查询指标
|
|
|
+// @Param ClassifyIds query int true "指标库分类IDs"
|
|
|
+// @Param SysUserIds query int true "创建人"
|
|
|
+// @Param Keyword query string false "关键词搜索"
|
|
|
+// @Param Frequency query string false "频度"
|
|
|
+// @Success 200 {object} data_manage.EdbInfoSearchResp
|
|
|
+// @router /edb_info/calculate/multi/search [get]
|
|
|
+func (this *ChartInfoController) CalculateMultiSearch() {
|
|
|
+ br := new(models.BaseResponse).Init()
|
|
|
+ defer func() {
|
|
|
+ this.Data["json"] = br
|
|
|
+ this.ServeJSON()
|
|
|
+ }()
|
|
|
+
|
|
|
+ //来源类型,1:中文,2:英文
|
|
|
+ frequency := this.GetString("Frequency")
|
|
|
+ keyword := this.GetString("Keyword")
|
|
|
+ sysUserIds := this.GetString("SysUserIds")
|
|
|
+ classifyIds := this.GetString("ClassifyIds")
|
|
|
+
|
|
|
+ pageSize, _ := this.GetInt("PageSize")
|
|
|
+ currentIndex, _ := this.GetInt("CurrentIndex")
|
|
|
+ notFrequency := this.GetString("NotFrequency")
|
|
|
+
|
|
|
+ var startSize int
|
|
|
+ if pageSize <= 0 {
|
|
|
+ pageSize = utils.PageSize50
|
|
|
+ }
|
|
|
+ if currentIndex <= 0 {
|
|
|
+ currentIndex = 1
|
|
|
+ }
|
|
|
+ startSize = utils.StartIndex(currentIndex, pageSize)
|
|
|
+
|
|
|
+ var edbIdArr []int
|
|
|
+
|
|
|
+ condition := ` AND edb_info_type = 0 `
|
|
|
+ var pars []interface{}
|
|
|
+
|
|
|
+ if classifyIds != "" {
|
|
|
+ classifyIdsArr := strings.Split(classifyIds, ",")
|
|
|
+ condition += ` AND classify_id IN (` + utils.GetOrmInReplace(len(classifyIdsArr)) + `) `
|
|
|
+ pars = append(pars, classifyIdsArr)
|
|
|
+ }
|
|
|
+
|
|
|
+ if frequency != "" {
|
|
|
+ frequencyArr := strings.Split(frequency, ",")
|
|
|
+ condition += ` AND frequency IN (` + utils.GetOrmInReplace(len(frequencyArr)) + `) `
|
|
|
+ pars = append(pars, frequencyArr)
|
|
|
+ }
|
|
|
+ if notFrequency != "" {
|
|
|
+ notFrequencyArr := strings.Split(notFrequency, ",")
|
|
|
+ condition += ` AND frequency NOT IN (` + utils.GetOrmInReplace(len(notFrequencyArr)) + `) `
|
|
|
+ pars = append(pars, notFrequencyArr)
|
|
|
+ }
|
|
|
+ if sysUserIds != "" {
|
|
|
+ sysUserIdSlice := strings.Split(sysUserIds, ",")
|
|
|
+ condition += ` AND sys_user_id IN (` + utils.GetOrmInReplace(len(sysUserIdSlice)) + `)`
|
|
|
+ pars = append(pars, sysUserIdSlice)
|
|
|
+ }
|
|
|
+
|
|
|
+ if keyword != "" {
|
|
|
+ keyWordArr := strings.Split(keyword, " ")
|
|
|
+
|
|
|
+ if len(keyWordArr) > 0 {
|
|
|
+ for _, v := range keyWordArr {
|
|
|
+ condition += ` AND CONCAT(edb_name,edb_code) LIKE ?`
|
|
|
+ pars = append(pars, utils.GetLikeKeyword(v))
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ total, e := data_manage.GetEdbInfoByConditionCount(condition, pars)
|
|
|
+ if e != nil {
|
|
|
+ br.Msg = "获取指标列表总数失败"
|
|
|
+ br.ErrMsg = "获取指标列表总数失败,Err:" + e.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ searchItemList := make([]data_manage.CalculateMultiEdbSearchItem, 0)
|
|
|
+ page := paging.GetPaging(currentIndex, pageSize, total)
|
|
|
+ resp := new(data_manage.CalculateMultiEdbSearchResp)
|
|
|
+
|
|
|
+ edbList, e := data_manage.GetEdbInfoListByCondition(condition, pars, startSize, pageSize)
|
|
|
+ if e != nil {
|
|
|
+ br.Msg = "获取指标列表失败"
|
|
|
+ br.ErrMsg = "获取指标列表失败,Err:" + e.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, v := range edbList {
|
|
|
+ edbIdArr = append(edbIdArr, v.EdbInfoId)
|
|
|
+ }
|
|
|
+
|
|
|
+ if len(edbIdArr) > 0 {
|
|
|
+ list, err := data_manage.GetEdbInfoByIdList(edbIdArr)
|
|
|
+ if err != nil && err.Error() != utils.ErrNoRow() {
|
|
|
+ br.Msg = "获取指标列表失败"
|
|
|
+ br.ErrMsg = "获取指标列表失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ for _, info := range list {
|
|
|
+ searchItem := data_manage.CalculateMultiEdbSearchItem{
|
|
|
+ Frequency: info.Frequency,
|
|
|
+ Unit: info.Unit,
|
|
|
+ EdbName: info.EdbName,
|
|
|
+ EdbInfoId: info.EdbInfoId,
|
|
|
+ ClassifyId: info.ClassifyId,
|
|
|
+ SysUserRealName: info.SysUserRealName,
|
|
|
+ SysUserId: info.SysUserId,
|
|
|
+ EndDate: info.EndDate,
|
|
|
+ EndValue: info.EndValue,
|
|
|
+ }
|
|
|
+ searchItemList = append(searchItemList, searchItem)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ resp.SearchItem = searchItemList
|
|
|
+ resp.Paging = page
|
|
|
+ br.Ret = 200
|
|
|
+ br.Success = true
|
|
|
+ br.Msg = "获取成功"
|
|
|
+ br.Data = resp
|
|
|
+}
|