Browse Source

1月3日晚 导出,查询拥有卡券的用户列表,修改导入excel时传递参数名称

master
lijikun 6 months ago
parent
commit
4049612544
  1. 1
      api/v1/couponusers/couponUsers.go
  2. 3
      internal/cmd/cmd.go
  3. 8
      internal/controller/couponusers/couponUsers.go
  4. 152
      internal/logic/couponusers/couponUsers.go
  5. 7
      internal/service/couponusers.go

1
api/v1/couponusers/couponUsers.go

@ -15,6 +15,7 @@ type GetCouponUsersRes struct {
Jwcode int `json:"jwcode" dc:"精网号"`
DeptName string `json:"deptName" dc:"部门"`
ShopName string `json:"shopName" dc:"门店"`
Total int `json:"total" dc:"总数"`
}
// DelCouponUserByJwcodeReq 删除卡券用户

3
internal/cmd/cmd.go

@ -25,7 +25,8 @@ var (
group.POST("/insert-coupon-users-by-excel", couponusers.NewCouponUsers().InsertCouponUserByExcel) // 通过excel导入jwcode并发放卡券
//group.POST("/insert-coupon-user", couponusers.NewCouponUsers().InsertCouponUser) //给用户发放卡券
group.POST("/insert-coupon-users-by-str", couponusers.NewCouponUsers().InsertCouponUserByJwcodeStr) //通过jwcodes字符串导入jwcode并发放卡券
//近期使用
group.POST("/export-coupon-users", couponusers.NewCouponUsers().ExportCouponUsers) //导出拥有卡券的用户列表
// 近期使用
group.POST("/insert-users-to-redis", couponusers.NewCouponUsers().InsertJwcodesToRedisByExcel) //导入满足条件的用户jwcode到redis
group.POST("/is-eligible-user", couponusers.NewCouponUsers().IsEligibleUser) //判断用户是否满足领取条件
group.POST("/issue-coupon-to-users", couponusers.NewCouponUsers().IssueCouponUser) //给单个用户发放卡券

8
internal/controller/couponusers/couponUsers.go

@ -69,7 +69,8 @@ func (c *CouponUsers) InsertCouponUserByExcel(r *ghttp.Request) {
/*解析请求*/
// 从请求中获取文件
file, _, err := r.FormFile("excelFile")
//file, _, err := r.FormFile("excelFile")
file, _, err := r.FormFile("file")
if err != nil {
r.Response.WriteJsonExit(dto.Error(err.Error()))
}
@ -246,13 +247,14 @@ func (c *CouponUsers) AddRecord(r *ghttp.Request) {
/*近期使用*/
// 未编写
// 导出拥有卡券的用户
func (c *CouponUsers) ExportCouponUsers(r *ghttp.Request) {
var req *couponusers.GetCouponUsersReq
// 解析请求参数
if err := r.Parse(&req); err != nil {
r.Response.WriteJsonExit(dto.Error(err.Error()))
}
//查询数据,创建excel文件,设置表头,写入数据,设置文件名,保存到缓冲区并返回,设置响应头,指定内容类型为excel文件,指定文件名为fileName,将buffer中的内容写入到响应
//查询数据,创建excel文件,设置表头,写入数据,设置文件名,保存到缓冲区并返回,设置响应头,指定内容类型为excel文件,指定文件名为fileName,将buffer中的内容写入响应
service.CouponUsers().ExportCouponUsers(r, req.CouponId, req.Jwcode, req.Name, req.PageNo, req.PageSize)
}

152
internal/logic/couponusers/couponUsers.go

@ -3,16 +3,19 @@ package couponusers
import (
"CouponBackendGo/api/v1/couponusers"
"CouponBackendGo/internal/dao"
"CouponBackendGo/internal/model/dto"
"CouponBackendGo/internal/service"
"context"
"database/sql"
"errors"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/ghttp"
"github.com/gogf/gf/v2/os/gtime"
"github.com/xuri/excelize/v2"
"mime/multipart"
"strconv"
"strings"
"time"
)
type sCouponUsers struct{}
@ -23,74 +26,41 @@ func init() {
// 根据优惠券id查看拥有优惠券的用户
func (s *sCouponUsers) GetCouponUsersByCondition(ctx context.Context, couponId, jwcode int, name string, pageNo, pageSize int) (users []couponusers.GetCouponUsersRes, err error) {
//没有条件查询时,分页
if jwcode == 0 && name == "" {
/*查询所有数据*/
//在coupon_users中查询出对应的jwcode
err = dao.CouponUsers.Ctx(ctx).Fields("jwcode").
Where("coupon_id = ", couponId).Page(pageNo, pageSize).Scan(&users)
if err != nil {
return nil, errors.New("根据卡券id搜索jwcode失败")
}
//根据jwcode查询用户信息
for i, userInfo := range users {
err = dao.MemberInfo.Ctx(ctx).Fields("jwcode", "name", "deptName", "shopName").
Where("jwcode = ?", userInfo.Jwcode).Scan(&users[i])
if err != nil {
return nil, errors.New("根据jwcode搜索用户信息失败")
}
}
/*查询所有数据*/
db := dao.CouponUsers.Ctx(ctx)
return users, err
} else { //有条件查询时,不在分页,全查后筛选
//基于量表JOIN查询
db = db.As("cu").InnerJoin("member_info mi", "cu.jwcode = mi.jwcode").
Where("cu.coupon_id = ?", couponId)
/*查询所有数据*/
//在coupon_users中查询出对应的jwcode
err = dao.CouponUsers.Ctx(ctx).Fields("jwcode").
Where("coupon_id = ", couponId).Scan(&users)
if err != nil {
return nil, errors.New("根据卡券id搜索jwcode失败")
}
//根据jwcode查询用户信息
for i, userInfo := range users {
err = dao.MemberInfo.Ctx(ctx).Fields("jwcode", "name", "deptName", "shopName").
Where("jwcode = ?", userInfo.Jwcode).Scan(&users[i])
if err != nil {
return nil, errors.New("根据jwcode搜索用户信息失败")
}
}
/*查询所有数据*/
//条件查询
if jwcode != 0 && name == "" {
var result []couponusers.GetCouponUsersRes
for _, user := range users {
if user.Jwcode == jwcode {
result = append(result, user)
}
}
return result, err
} else if jwcode == 0 && name != "" {
var result []couponusers.GetCouponUsersRes
for _, user := range users {
if strings.Contains(user.Name, name) {
result = append(result, user)
}
}
return result, err
} else if jwcode != 0 && name != "" {
var result []couponusers.GetCouponUsersRes
for _, user := range users {
if user.Jwcode == jwcode && strings.Contains(user.Name, name) {
result = append(result, user)
}
}
return result, err
}
//如果jwcode条件存在
if jwcode != 0 {
db = db.Where("cu.jwcode = ?", jwcode)
}
return users, err
//如果name条件存在
if name != "" {
db = db.Where("mi.name like ?", "%"+name+"%")
}
//查询总数
total, err := db.Count()
if err != nil {
return nil, errors.New("查询总数失败")
}
//查询数据(分页)
err = db.Fields("mi.jwcode, mi.name, mi.deptName, mi.shopName").
Page(pageNo, pageSize).Scan(&users)
if err != nil {
return nil, errors.New("查询数据失败")
}
//设置总数
for i := range users {
users[i].Total = total
}
return users, err
}
// 根据jwcode,优惠券id删除用户
@ -108,7 +78,7 @@ func (s *sCouponUsers) DeleteCouponUserByJwcode(ctx context.Context, couponId, j
return result, err
}
// 通过excel导入精网号
// 通过excel导入精网号, 解析并发放卡券
func (s *sCouponUsers) InsertJwcodeByExcel(ctx context.Context, file multipart.File, couponId int) (num int, err error) {
// func (s *sCouponUsers) InsertJwcodeByExcel(file multipart.File) (jwcodes []int, err error) {
@ -384,9 +354,57 @@ func (s *sCouponUsers) IssueCouponToUser(ctx context.Context, jwcode, couponId i
}
/*未编写*/
// 导出拥有卡券的用户列表
func (s *sCouponUsers) ExportCouponUsers() {
func (s *sCouponUsers) ExportCouponUsers(r *ghttp.Request, couponId, jwcode int, name string, pageNo, pageSize int) {
//调用查询
users, err := s.GetCouponUsersByCondition(r.Context(), couponId, jwcode, name, pageNo, pageSize)
if err != nil {
r.Response.WriteJsonExit(dto.Error("查询失败:" + err.Error()))
return
}
if len(users) == 0 {
r.Response.WriteJsonExit(dto.Error("查询结果为空"))
return
}
//创建 Excel文件
excelFile := excelize.NewFile() //默认会创建一个Sheet1
sheetName := "Sheet1"
//设置表头
headers := []string{"序号", "精网号", "姓名", "部门", "门店"}
for i, header := range headers {
col := string('A' + i) //将索引转换为 Excel列名
excelFile.SetCellValue(sheetName, col+"1", header)
}
/*写入数据*/
rowIndex := 2 //从第二行开始写入数据
for _, user := range users {
excelFile.SetCellValue(sheetName, "A"+strconv.Itoa(rowIndex), rowIndex-1) //序号
excelFile.SetCellValue(sheetName, "B"+strconv.Itoa(rowIndex), user.Jwcode) //精网号
excelFile.SetCellValue(sheetName, "C"+strconv.Itoa(rowIndex), user.Name) //姓名
excelFile.SetCellValue(sheetName, "D"+strconv.Itoa(rowIndex), user.DeptName) //部门
excelFile.SetCellValue(sheetName, "E"+strconv.Itoa(rowIndex), user.ShopName) //门店
rowIndex++
}
/*写入数据*/
//设置文件名
fileName := "Users_" + time.Now().Format("20060102150405") + ".xlsx"
//保存到缓冲区并返回
buffer, err := excelFile.WriteToBuffer()
if err != nil {
r.Response.WriteJsonExit(dto.Error("生成Excel文件失败:" + err.Error()))
return
}
// 设置响应头,指定内容类型为Excel文件
r.Response.Header().Set("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
// 设置响应头,指定文件名为fileName
r.Response.Header().Set("Content-Disposition", "attachment; filename="+fileName)
// 将buffer中的内容写入响应
r.Response.Write(buffer.Bytes())
}

7
internal/service/couponusers.go

@ -10,6 +10,8 @@ import (
"context"
"database/sql"
"mime/multipart"
"github.com/gogf/gf/v2/net/ghttp"
)
type (
@ -18,7 +20,7 @@ type (
GetCouponUsersByCondition(ctx context.Context, couponId int, jwcode int, name string, pageNo int, pageSize int) (users []couponusers.GetCouponUsersRes, err error)
// 根据jwcode,优惠券id删除用户
DeleteCouponUserByJwcode(ctx context.Context, couponId int, jwcode int) (result sql.Result, err error)
// 通过excel导入精网号
// 通过excel导入精网号, 解析并发放卡券
InsertJwcodeByExcel(ctx context.Context, file multipart.File, couponId int) (num int, err error)
// 传来jwcodes字符串,解析并发放卡券
InsertCouponUsersByJwcodeStr(ctx context.Context, jwcodeStr string, couponId int) (num int, err error)
@ -30,9 +32,8 @@ type (
IsEligibleUser(ctx context.Context, jwcode int, couponIds []int) (img string, err error)
// 给单个用户发放卡券
IssueCouponToUser(ctx context.Context, jwcode int, couponId int) (err error)
/*未编写*/
// 导出拥有卡券的用户列表
ExportCouponUsers()
ExportCouponUsers(r *ghttp.Request, couponId int, jwcode int, name string, pageNo int, pageSize int)
// 添加用户选择武器记录
AddRecord(ctx context.Context, jwcode int, id int, name string) (err error)
}

Loading…
Cancel
Save