Selaa lähdekoodia

fix:手工数据-下载导入模板支持下载两种模板

Roc 7 kuukautta sitten
vanhempi
commit
4a8e31c329

+ 109 - 52
controllers/data_manage/manual_edb.go

@@ -25,6 +25,31 @@ type ManualEdbController struct {
 	controllers.BaseAuthController
 }
 
+// TemplateDownload
+// @Title 下载模板
+// @Description 下载模板
+// @Success 200 {object} models.EdbdataClassifyResp
+// @Param   Source   query   int  false       "来源:1:模板1;2:模板2"
+// @router /template [get]
+func (c *ManualEdbController) TemplateDownload() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		c.Data["json"] = br
+		c.ServeJSON()
+	}()
+	source, _ := c.GetInt("Source")
+	switch source {
+	case 2:
+		c.Ctx.Output.Download("./static/template/导入模板2.xlsx", "数据导入模板2.xlsx")
+	default:
+		c.Ctx.Output.Download("./static/template/导入模板1.xlsx", "数据导入模板1.xlsx")
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "下载成功"
+}
+
 // EdbDetail
 // @Title 指标列表
 // @Description 指标列表
@@ -486,58 +511,15 @@ func (c *ManualEdbController) EditExcelData() {
 
 	dateValueMap := make(map[string]string)
 	//取到所有数据
-	for i := range req.Data {
-		// 过滤第一行
-		if i == 0 {
-			continue
-		}
-		if req.Data[i] == nil {
-			continue
-		}
-		tmpData := req.Data[i]
-		// 少于两列,说明数据是异常的,得过滤
-		if len(tmpData) < 2 {
-			continue
-		}
-
-		var tmpDate string
-		//先拿下日期列表
-		{
-			dateMap := tmpData[0].(map[string]interface{})
-			_, ok := dateMap["m"]
-			if !ok {
-				continue
-			}
-			tmpDate = dateMap["m"].(string)
-		}
-
-		// 数据处理
-		{
-			if tmpData[1] == nil {
-				continue
-			}
-			valueMap := tmpData[1].(map[string]interface{})
-			value, _ := valueMap["m"]
-			if value == nil {
-				continue
-			}
-			dateValueMap[tmpDate] = valueMap["m"].(string)
-
-			// 09-27 千位分隔符时用 "m" 取字符串存数据库会把逗号当小数点,现在换用 "v" 直接取数字再转为字符串,看看会不会有问题
-			if ct, ok := valueMap["ct"].(map[string]interface{}); ok {
-				fa, _ := ct["fa"]
-				if fa == "#,##0.000" {
-					value = valueMap["v"]
-					floatValue := valueMap["v"].(float64)
-					dateValueMap[tmpDate] = strconv.FormatFloat(floatValue, 'f', -1, 64)
-				}
-			}
-		}
+	for _, dateValue := range req.Data {
+		dateValueMap[dateValue.Date] = strconv.FormatFloat(dateValue.Value, 'f', -1, 64)
 	}
 
 	//操作指标,新增指标及数据等
 	{
-		secName := strings.TrimSpace(req.Name)
+		var isUpdate bool
+
+		secName := strings.TrimSpace(req.EdbName)
 		frequency := strings.TrimSpace(req.Frequency)
 		unit := strings.TrimSpace(req.Unit)
 
@@ -566,6 +548,7 @@ func (c *ManualEdbController) EditExcelData() {
 			}
 
 			if len(updateCols) > 0 {
+				isUpdate = true
 				err = manualEdbInfo.Update(updateCols)
 				if err != nil {
 					br.Msg = `指标保存失败`
@@ -623,6 +606,7 @@ func (c *ManualEdbController) EditExcelData() {
 				continue
 			}
 			if !tmpValDecimal.Equal(closeValDecimal) {
+				isUpdate = true
 				fmt.Println("更新数值")
 				err = models.ModifyTargetsDataByImport(manualEdbInfo.TradeCode, createDate, closeVal)
 				if err != nil {
@@ -635,6 +619,7 @@ func (c *ManualEdbController) EditExcelData() {
 
 		// 新增指标
 		if len(addDataList) > 0 {
+			isUpdate = true
 			err = models.OnlyMultiAddEdbdata(addDataList)
 			if err != nil {
 				fmt.Println("MultiAddEdbdata err:", err.Error())
@@ -645,6 +630,7 @@ func (c *ManualEdbController) EditExcelData() {
 		// 删除不需要的日期数据
 		num := len(deleteDataMap)
 		if num > 0 {
+			isUpdate = true
 			deleteDateList := make([]string, 0)
 			for date := range deleteDataMap {
 				deleteDateList = append(deleteDateList, date)
@@ -656,6 +642,20 @@ func (c *ManualEdbController) EditExcelData() {
 				errs = append(errs, err.Error())
 			}
 		}
+
+		// 添加记录
+		if isUpdate {
+			record := &models.EdbinfoOpRecord{
+				TradeCode:  manualEdbInfo.TradeCode,
+				Remark:     "编辑指标",
+				UserId:     sysUser.AdminId,
+				UserName:   sysUser.RealName,
+				CreateTime: time.Now(),
+			}
+			go func() {
+				_ = record.Create()
+			}()
+		}
 	}
 
 	br.Ret = 200
@@ -984,13 +984,13 @@ func (c *ManualEdbController) NameCheck() {
 	br.Success = true
 }
 
-// BatchAdd
-// @Title 批量新增
-// @Description 批量新增
+// BatchAdd2Edb
+// @Title 批量新增到指标库
+// @Description 批量新增到指标库
 // @Param	request	body data_manage.AddEdbInfoReq true "type json string"
 // @Success 200 string "操作成功"
 // @router /target/edb/batch/add [post]
-func (c *ManualEdbController) BatchAdd() {
+func (c *ManualEdbController) BatchAdd2Edb() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
 		if br.ErrMsg == "" {
@@ -1848,3 +1848,60 @@ func (c *ManualEdbController) ImportData() {
 	br.Success = true
 	br.Data = resp
 }
+
+// RecordList
+// @Title 获取指标操作记录列表
+// @Description 获取指标操作记录列表
+// @Param   TradeCode   query   string  false       "指标编码"
+// @Success 200 {object} models.EdbinfoOpRecordListResp
+// @router /target/edb/op/record/list [get]
+func (c *ManualEdbController) RecordList() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		c.Data["json"] = br
+		c.ServeJSON()
+	}()
+
+	sysUser := c.SysUser
+	if sysUser == nil {
+		br.Msg = "请重新登录"
+		return
+	}
+
+	pageSize, _ := c.GetInt("PageSize")
+	currentIndex, _ := c.GetInt("CurrentIndex")
+
+	var startSize int
+	if pageSize <= 0 {
+		pageSize = utils.PageSize20
+	}
+	if currentIndex <= 0 {
+		currentIndex = 1
+	}
+	startSize = utils.StartIndex(currentIndex, pageSize)
+
+	// 频度
+	tradeCode := c.GetString("TradeCode")
+	if tradeCode == `` {
+		br.Msg = `请选择指标`
+		br.ErrMsg = `请选择指标`
+		br.IsSendEmail = false
+		return
+	}
+
+	total, list, err := models.GetEdbinfoOpRecordPageList(tradeCode, startSize, pageSize)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+
+	resp := models.EdbinfoOpRecordListResp{
+		List:   list,
+		Paging: paging.GetPaging(currentIndex, pageSize, total),
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}

+ 1 - 0
controllers/target.go

@@ -772,6 +772,7 @@ func (this *TargetController) ClassifyList() {
 // @Title 下载模板
 // @Description 下载模板
 // @Success 200 {object} models.EdbdataClassifyResp
+// @Param   Source   query   int  false       "来源:1:模板1;2:模板2"
 // @router /template [get]
 func (this *TargetCommonController) TemplateDownload() {
 	br := new(models.BaseResponse).Init()

+ 9 - 14
models/data_manage/excel_style.go

@@ -213,18 +213,13 @@ type Ct struct {
 // ManualEdbExcelStyleEditReq
 // @Description: 手工数据录入编辑(Excel样式)
 type ManualEdbExcelStyleEditReq struct {
-	ExcelId          int
-	Name             string
-	Color            string
-	Row              int
-	Colum            int
-	DefaultRowHeight int
-	DefaultColWidth  int
-	CellData         []interface{}
-	Config           interface{}
-	Data             [][]interface{}
-	TradeCode        string `description:"指标编码"`
-	Unit             string `description:"单位"`
-	Frequency        string `description:"频度"`
-	ClassifyId       int    `description:"分类id"`
+	EdbName string
+	Data    []struct {
+		Date  string
+		Value float64
+	}
+	TradeCode  string `description:"指标编码"`
+	Unit       string `description:"单位"`
+	Frequency  string `description:"频度"`
+	ClassifyId int    `description:"分类id"`
 }

+ 1 - 0
models/db.go

@@ -298,6 +298,7 @@ func initShEdbData() {
 		new(Edbinfo),                         //edb库的edbinfo表
 		new(data_manage.ExcelStyle),          //在线excel样式表
 		new(data_manage.ExcelEdbdataMapping), //excel样式和指标映射表
+		new(EdbinfoOpRecord),                 // 手工数据的操作日志
 	)
 }
 

+ 69 - 0
models/manual_edb.go

@@ -4,6 +4,7 @@ import (
 	"eta/eta_api/utils"
 	"github.com/beego/beego/v2/client/orm"
 	"github.com/rdlucklib/rdluck_tools/paging"
+	"time"
 )
 
 // TargetDetailResp 指标数据结构体
@@ -233,3 +234,71 @@ func DelManualIndexByCodeList(codeList []string) (err error) {
 
 	return
 }
+
+// EdbinfoOpRecord
+// @Description: 手工数据的操作日志
+type EdbinfoOpRecord struct {
+	TradeCode  string    `orm:"column(TRADE_CODE);pk" description:"指标编码"`
+	Remark     string    `orm:"column(remark)" description:"操作信息"`
+	UserId     int       `orm:"column(user_id)" description:"用户id"`
+	UserName   string    `orm:"column(user_name)" description:"用户姓名"`
+	CreateTime time.Time `orm:"column(create_time)" description:"创建时间"`
+}
+
+// Remark备注:
+// 1、创建指标
+// 2、编辑指标
+// 3、更新数据
+// 4、数据资产由<xxx>转移给<xxx>——在数据操作权限进行数据资产转移;
+
+// Create
+// @Description: 添加手工数据的操作日志
+// @author: Roc
+// @receiver m
+// @datetime 2024-07-30 16:25:55
+// @return err error
+func (m *EdbinfoOpRecord) Create() (err error) {
+	o := orm.NewOrmUsingDB("edb")
+	_, err = o.Insert(m)
+	return
+}
+
+// EdbinfoOpRecordItem
+// @Description: 手工数据的操作日志
+type EdbinfoOpRecordItem struct {
+	TradeCode  string `orm:"column(TRADE_CODE);pk" description:"指标编码"`
+	Remark     string `orm:"column(remark)" description:"操作信息"`
+	UserId     int    `orm:"column(user_id)" description:"用户id"`
+	UserName   string `orm:"column(user_name)" description:"用户姓名"`
+	CreateTime string `orm:"column(create_time)" description:"创建时间"`
+}
+
+// EdbinfoOpRecordListResp 指标数据结构体
+type EdbinfoOpRecordListResp struct {
+	List   []*EdbinfoOpRecordItem
+	Paging *paging.PagingItem `description:"分页数据"`
+}
+
+// GetEdbinfoOpRecordPageList
+// @Description: 根据指标编码获取手工数据的操作日志
+// @author: Roc
+// @datetime 2024-07-30 17:32:33
+// @param tradeCode string
+// @param startSize int
+// @param total int
+// @return pageSize int
+// @return items []*EdbinfoOpRecordItem
+// @return err error
+func GetEdbinfoOpRecordPageList(tradeCode string, startSize, pageSize int) (total int, items []*EdbinfoOpRecordItem, err error) {
+	o := orm.NewOrmUsingDB("edb")
+	sql := `SELECT  count(1) FROM edbinfo_op_record AS a  WHERE TRADE_CODE = ? `
+	err = o.Raw(sql, tradeCode).QueryRow(&total)
+	if err != nil {
+		return
+	}
+
+	sql = `SELECT  a.* FROM edbinfo_op_record AS a  WHERE TRADE_CODE = ? ORDER BY a.create_time DESC LIMIT ?,?`
+	_, err = o.Raw(sql, tradeCode, startSize, pageSize).QueryRows(&items)
+
+	return
+}

+ 19 - 1
routers/commentsRouter.go

@@ -4995,7 +4995,7 @@ func init() {
 
     beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ManualEdbController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ManualEdbController"],
         beego.ControllerComments{
-            Method: "BatchAdd",
+            Method: "BatchAdd2Edb",
             Router: `/target/edb/batch/add`,
             AllowHTTPMethods: []string{"post"},
             MethodParams: param.Make(),
@@ -5074,6 +5074,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ManualEdbController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ManualEdbController"],
+        beego.ControllerComments{
+            Method: "RecordList",
+            Router: `/target/edb/op/record/list`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ManualEdbController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ManualEdbController"],
         beego.ControllerComments{
             Method: "EdbSearch",
@@ -5083,6 +5092,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ManualEdbController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ManualEdbController"],
+        beego.ControllerComments{
+            Method: "TemplateDownload",
+            Router: `/template`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:MyChartController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:MyChartController"],
         beego.ControllerComments{
             Method: "MyChartAdd",