From 818d835e182120b9ab6f5e3c743c569e2adc7729 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Sat, 8 Mar 2025 10:30:30 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=E6=89=80=E6=9C=89=E7=BD=91=E5=85=83=E9=85=8D=E7=BD=AE=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E7=9A=84=E5=8A=9F=E8=83=BD=EF=BC=8C=E5=B9=B6=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E7=9B=B8=E5=85=B3=E6=9F=A5=E8=AF=A2=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/pt_ne_config_apply.go | 5 ++- .../controller/pt_ne_config_data.go | 41 ++++++++++++++++--- .../practical_training/practical_training.go | 5 +++ .../repository/pt_ne_config_apply.go | 24 +++++++++-- .../repository/pt_ne_config_data_log.go | 3 +- .../service/pt_ne_config_apply.go | 4 +- .../service/pt_ne_config_data.go | 26 +++++++++++- 7 files changed, 90 insertions(+), 18 deletions(-) diff --git a/src/modules/practical_training/controller/pt_ne_config_apply.go b/src/modules/practical_training/controller/pt_ne_config_apply.go index d346a9d7..19cadede 100644 --- a/src/modules/practical_training/controller/pt_ne_config_apply.go +++ b/src/modules/practical_training/controller/pt_ne_config_apply.go @@ -32,9 +32,10 @@ type PtNeConfigApplyController struct { // // GET /students func (s *PtNeConfigApplyController) Students(c *gin.Context) { - userName, _ := c.GetQuery("userName") + neType := c.Query("neType") + userName := c.Query("userName") loginUser, _ := ctx.LoginUser(c) - data := s.ptNeConfigApplyService.SelectListByClass(loginUser.DeptID, userName) + data := s.ptNeConfigApplyService.SelectListByClass(loginUser.DeptID, userName, neType) c.JSON(200, result.OkData(data)) } diff --git a/src/modules/practical_training/controller/pt_ne_config_data.go b/src/modules/practical_training/controller/pt_ne_config_data.go index 7f1af370..f9c44c8b 100644 --- a/src/modules/practical_training/controller/pt_ne_config_data.go +++ b/src/modules/practical_training/controller/pt_ne_config_data.go @@ -3,11 +3,15 @@ package controller import ( "encoding/json" "fmt" + "os" + "path/filepath" "strings" "time" + "be.ems/src/framework/constants/uploadsubpath" "be.ems/src/framework/i18n" "be.ems/src/framework/utils/ctx" + "be.ems/src/framework/utils/file" "be.ems/src/framework/utils/parse" "be.ems/src/framework/vo/result" "be.ems/src/modules/practical_training/model" @@ -183,6 +187,31 @@ func (s *PtNeConfigDataController) Export(c *gin.Context) { c.FileAttachment(filePath, fileName) } +// 配置数据导出Excel (仅教师操作) +// +// GET /export-all +func (s *PtNeConfigDataController) ExportAll(c *gin.Context) { + loginUser, _ := ctx.LoginUser(c) + users := service.NewPtNeConfigApplyService.SelectListByClass(loginUser.DeptID, "", "") + for _, v := range users { + userName := fmt.Sprint(v["userName"]) + fileName := fmt.Sprintf("/pt-all/%s_config_data.xlsx", userName) + s.ptNeConfigDataService.ExportToExcel(userName, fileName) + } + + filePath := file.ParseUploadFileDir(uploadsubpath.EXPORT) + dirPath := filepath.ToSlash(filepath.Join(filePath, "pt-all")) + zipFileName := fmt.Sprintf("%s_students_config_data.zip", loginUser.DeptID) + zipFilePath := filepath.ToSlash(filepath.Join(filePath, zipFileName)) + err := file.CompressZipByDir(zipFilePath, dirPath) + if err != nil { + c.JSON(200, result.ErrMsg(fmt.Sprintf("exprot err: %s", err.Error()))) + return + } + os.RemoveAll(dirPath) + c.FileAttachment(zipFilePath, zipFileName) +} + // 网元参数配置信息 // // GET / @@ -281,8 +310,8 @@ func (s *PtNeConfigDataController) Edit(c *gin.Context) { info := s.ptNeConfigDataService.SelectByStubType(param) changeLog := model.PtNeConfigDataLog{ CreateBy: currentUserName, - StubType: info.StubType, - NeType: info.NeType, + StubType: param.StubType, + NeType: param.NeType, ParamName: info.ParamName, ParamDisplay: info.ParamDisplay, ParamType: info.ParamType, @@ -423,8 +452,8 @@ func (s *PtNeConfigDataController) Add(c *gin.Context) { } changeLog := model.PtNeConfigDataLog{ CreateBy: currentUserName, - StubType: info.StubType, - NeType: info.NeType, + StubType: param.StubType, + NeType: param.NeType, ParamName: info.ParamName, ParamDisplay: info.ParamDisplay, ParamType: info.ParamType, @@ -537,8 +566,8 @@ func (s *PtNeConfigDataController) Remove(c *gin.Context) { // 变更日志 changeLog := model.PtNeConfigDataLog{ CreateBy: currentUserName, - StubType: info.StubType, - NeType: info.NeType, + StubType: param.StubType, + NeType: param.NeType, ParamName: info.ParamName, ParamDisplay: info.ParamDisplay, ParamType: info.ParamType, diff --git a/src/modules/practical_training/practical_training.go b/src/modules/practical_training/practical_training.go index 710ab41d..2f1e6ed2 100644 --- a/src/modules/practical_training/practical_training.go +++ b/src/modules/practical_training/practical_training.go @@ -35,6 +35,11 @@ func Setup(router *gin.Engine) { collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neConfigData", collectlogs.BUSINESS_TYPE_EXPORT)), controller.NewPtNeConfigData.Export, ) + neConfigDataGroup.GET("/export-all", + middleware.PreAuthorize(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neConfigData", collectlogs.BUSINESS_TYPE_EXPORT)), + controller.NewPtNeConfigData.ExportAll, + ) neConfigDataGroup.GET("", middleware.PreAuthorize(nil), controller.NewPtNeConfigData.Info, diff --git a/src/modules/practical_training/repository/pt_ne_config_apply.go b/src/modules/practical_training/repository/pt_ne_config_apply.go index ab3ca57b..251af2e4 100644 --- a/src/modules/practical_training/repository/pt_ne_config_apply.go +++ b/src/modules/practical_training/repository/pt_ne_config_apply.go @@ -1,6 +1,7 @@ package repository import ( + "fmt" "strings" "time" @@ -136,7 +137,7 @@ func (r *PtNeConfigApplyRepository) DeleteByIds(paramIds []int64) int64 { } // SelectListByClass 查询班级学生信息 -func (r *PtNeConfigApplyRepository) SelectListByClass(deptId, userName string) []map[string]any { +func (r *PtNeConfigApplyRepository) SelectListByClass(deptId, userName, neType string) []map[string]any { // 查询条件拼接 var conditions []string var params []any @@ -155,16 +156,31 @@ func (r *PtNeConfigApplyRepository) SelectListByClass(deptId, userName string) [ } // 查询数据 querySql := `SELECT - u.user_Id as userId, u.user_name as userName, u.nick_name as nickName, u.login_ip as loginIp, u.login_date AS loginDate, - COALESCE(pnca.id, '') as applyId, COALESCE(pnca.status, '') as applyStatus + u.user_Id as userId, u.user_name as userName, u.nick_name as nickName, u.login_ip as loginIp, u.login_date AS loginDate FROM sys_user u LEFT JOIN sys_dept d ON u.dept_id = d.dept_id LEFT JOIN sys_user_role ur ON u.user_id = ur.user_id - LEFT JOIN pt_ne_config_apply pnca ON pnca.create_by = u.user_name AND pnca.status = '0' ` + whereSql results, err := datasource.RawDB("", querySql, params) if err != nil { logger.Errorf("query err => %v", err) } + + // 处理数据 + for i, v := range results { + arr := r.SelectList(model.PtNeConfigApply{ + CreateBy: fmt.Sprint(v["userName"]), + NeType: neType, + Status: "0", + }) + if len(arr) > 0 { + v["applyId"] = arr[0].ID + v["applyStatus"] = arr[0].Status + } else { + v["applyId"] = "" + v["applyStatus"] = "" + } + results[i] = v + } return results } diff --git a/src/modules/practical_training/repository/pt_ne_config_data_log.go b/src/modules/practical_training/repository/pt_ne_config_data_log.go index 0e2cafc9..e2788dc8 100644 --- a/src/modules/practical_training/repository/pt_ne_config_data_log.go +++ b/src/modules/practical_training/repository/pt_ne_config_data_log.go @@ -46,7 +46,6 @@ func (r *PtNeConfigDataLogRepository) SelectPage(query map[string]any) (int64, [ // 查询数量 长度为0直接返回 if err := tx.Count(&total).Error; err != nil || total <= 0 { - logger.Errorf("total err => %v", err) return total, rows } @@ -115,7 +114,7 @@ func (r *PtNeConfigDataLogRepository) SelectByIds(paramIds []int64) []model.PtNe // 查询条件拼接 tx = tx.Where("id in ?", paramIds) // 查询数据 - if err := tx.Order("imsi asc").Find(&arr).Error; err != nil { + if err := tx.Order("id asc").Find(&arr).Error; err != nil { logger.Errorf("query err => %v", err) } return arr diff --git a/src/modules/practical_training/service/pt_ne_config_apply.go b/src/modules/practical_training/service/pt_ne_config_apply.go index cab6eff7..3eacd641 100644 --- a/src/modules/practical_training/service/pt_ne_config_apply.go +++ b/src/modules/practical_training/service/pt_ne_config_apply.go @@ -66,6 +66,6 @@ func (r *PtNeConfigApplyService) DeleteByIds(paramIds []int64) (int64, error) { } // SelectListByClass 查询班级学生信息 -func (r *PtNeConfigApplyService) SelectListByClass(deptId, userName string) []map[string]any { - return r.ptNeConfigApplyRepository.SelectListByClass(deptId, userName) +func (r *PtNeConfigApplyService) SelectListByClass(deptId, userName, neType string) []map[string]any { + return r.ptNeConfigApplyRepository.SelectListByClass(deptId, userName, neType) } diff --git a/src/modules/practical_training/service/pt_ne_config_data.go b/src/modules/practical_training/service/pt_ne_config_data.go index 75e0a18e..35cbb0ab 100644 --- a/src/modules/practical_training/service/pt_ne_config_data.go +++ b/src/modules/practical_training/service/pt_ne_config_data.go @@ -310,12 +310,34 @@ func (r *PtNeConfigDataService) ApplyToNe(paramUser, neType string) error { // ExportToExcel 导出网元的全部配置项数据 func (r *PtNeConfigDataService) ExportToExcel(operaUserName, fileName string) (string, error) { + param := model.PtNeConfigData{CreateBy: operaUserName} confs := r.neConfigService.SelectNeConfigByNeType("*") - datas := r.ptNeConfigDataRepository.SelectList(model.PtNeConfigData{CreateBy: operaUserName}) + datas := r.SelectList(param) if len(datas) == 0 { return "", fmt.Errorf("no changes to data") } - return r.writeSheet(confs, datas, fileName) + + // 找教师示例数据 没有就找系统示例数据 + param.CreateBy = "" + param.StubType = "1" + list := r.SelectList(param) + if len(list) == 0 && param.StubType != "0" { + param.CreateBy = "" + param.StubType = "0" + param.DeptId = "100" + list = r.SelectList(param) + } + + // 同数据替换 + for i, v := range list { + for _, item := range datas { + if item.NeType == v.NeType && item.ParamName == v.ParamName { + list[i] = item + } + } + } + + return r.writeSheet(confs, list, fileName) } // writeSheet 写入表格