Browse Source

1月7日,前端测试完成,上线正式环境

master
lijikun 6 months ago
parent
commit
6fda1cad93
  1. 15
      internal/controller/couponusers/couponUsers.go
  2. 4
      internal/logic/coupon/coupon.go
  3. 64
      internal/logic/couponusers/couponUsers.go
  4. 6
      internal/service/couponusers.go

15
internal/controller/couponusers/couponUsers.go

@ -56,7 +56,7 @@ func (c *CouponUsers) DeleteCouponUserByJwcode(r *ghttp.Request) {
r.Response.WriteJsonExit(dto.Error("删除失败,删除了0条")) r.Response.WriteJsonExit(dto.Error("删除失败,删除了0条"))
} }
//成功处理 //成功处理
r.Response.WriteJsonExit(dto.SuccessWithMsg("删除成功"))
r.Response.WriteJsonExit(dto.SuccessWithMsg(fmt.Sprintf("删除了%d条", affected)))
} }
// 接受前端传来的excel表格,并解析,返回jwcode切片,可以有重复的,在插入时进行验证,如果有重复的,只插入一次 // 接受前端传来的excel表格,并解析,返回jwcode切片,可以有重复的,在插入时进行验证,如果有重复的,只插入一次
@ -69,7 +69,6 @@ func (c *CouponUsers) InsertCouponUserByExcel(r *ghttp.Request) {
/*解析请求*/ /*解析请求*/
// 从请求中获取文件 // 从请求中获取文件
//file, _, err := r.FormFile("excelFile")
file, _, err := r.FormFile("file") file, _, err := r.FormFile("file")
if err != nil { if err != nil {
r.Response.WriteJsonExit(dto.Error(err.Error())) r.Response.WriteJsonExit(dto.Error(err.Error()))
@ -89,7 +88,7 @@ func (c *CouponUsers) InsertCouponUserByExcel(r *ghttp.Request) {
} }
/*调用方法解析excel文件,并将解析出结果传入另一个函数去发放卡券*/ /*调用方法解析excel文件,并将解析出结果传入另一个函数去发放卡券*/
result, err := service.CouponUsers().InsertJwcodeByExcel(r.Context(), file, req.CouponId)
result, result1, err := service.CouponUsers().InsertJwcodeByExcel(r.Context(), file, req.CouponId)
//错误处理 //错误处理
if err != nil { if err != nil {
@ -97,10 +96,10 @@ func (c *CouponUsers) InsertCouponUserByExcel(r *ghttp.Request) {
} }
//没报错,但插入数据0条 //没报错,但插入数据0条
if result == 0 { if result == 0 {
r.Response.WriteJsonExit(dto.Error("发放失败,发放了0人"))
r.Response.WriteJsonExit(dto.Error("所要发放的人员已存在或不存在该用户"))
} }
//成功处理 //成功处理
r.Response.WriteJsonExit(dto.SuccessWithMsg(fmt.Sprintf("发放成功,发放了%d人", result)))
r.Response.WriteJsonExit(dto.SuccessWithMsg(fmt.Sprintf("导入成功%d人,导入失败%d人", result, result1)))
/*调用方法解析excel文件,并将解析出结果传入另一个函数去发放卡券*/ /*调用方法解析excel文件,并将解析出结果传入另一个函数去发放卡券*/
} }
@ -112,7 +111,7 @@ func (c *CouponUsers) InsertCouponUserByJwcodeStr(r *ghttp.Request) {
r.Response.WriteJsonExit(dto.Error(err.Error())) r.Response.WriteJsonExit(dto.Error(err.Error()))
} }
result, err := service.CouponUsers().InsertCouponUsersByJwcodeStr(r.Context(), req.Jwcodes, req.CouponId)
result, result1, err := service.CouponUsers().InsertCouponUsersByJwcodeStr(r.Context(), req.Jwcodes, req.CouponId)
//错误处理 //错误处理
if err != nil { if err != nil {
@ -120,10 +119,10 @@ func (c *CouponUsers) InsertCouponUserByJwcodeStr(r *ghttp.Request) {
} }
//没报错,但插入数据0条 //没报错,但插入数据0条
if result == 0 { if result == 0 {
r.Response.WriteJsonExit(dto.Error("发放失败,发放了0人"))
r.Response.WriteJsonExit(dto.Error("所要发放的人员已存在或不存在该用户"))
} }
//成功处理 //成功处理
r.Response.WriteJsonExit(dto.SuccessWithMsg(fmt.Sprintf("发放成功,发放了%d人", result)))
r.Response.WriteJsonExit(dto.SuccessWithMsg(fmt.Sprintf("导入成功%d人,导入失败%d人", result, result1)))
} }
/*近期使用*/ /*近期使用*/

4
internal/logic/coupon/coupon.go

@ -79,7 +79,7 @@ func (s *sCoupon) InsertCoupon(ctx context.Context, req *coupon.InsertCouponReq)
Cover: req.Image, Cover: req.Image,
ImgUrl: req.Image, ImgUrl: req.Image,
StartTime: req.StartTime.Unix(), StartTime: req.StartTime.Unix(),
EndTime: req.EndTime.Add(23*gtime.H + 59*gtime.M + 59*gtime.S).Unix(),
EndTime: req.EndTime.Unix(),
}).Insert() }).Insert()
} else { } else {
_, err = dao.Coupon.Ctx(ctx).Data(do.Coupon{ _, err = dao.Coupon.Ctx(ctx).Data(do.Coupon{
@ -87,7 +87,7 @@ func (s *sCoupon) InsertCoupon(ctx context.Context, req *coupon.InsertCouponReq)
Cover: req.Image, Cover: req.Image,
ImgUrl: req.Image, ImgUrl: req.Image,
StartTime: req.StartTime.Unix(), StartTime: req.StartTime.Unix(),
EndTime: req.EndTime.Add(23*gtime.H + 59*gtime.M + 59*gtime.S).Unix(),
EndTime: req.EndTime.Unix(),
}).WherePri(req.Id).Update() }).WherePri(req.Id).Update()
} }
if err != nil { if err != nil {

64
internal/logic/couponusers/couponUsers.go

@ -79,13 +79,13 @@ func (s *sCouponUsers) DeleteCouponUserByJwcode(ctx context.Context, couponId, j
} }
// 通过excel导入精网号, 解析并发放卡券 // 通过excel导入精网号, 解析并发放卡券
func (s *sCouponUsers) InsertJwcodeByExcel(ctx context.Context, file multipart.File, couponId int) (num int, err error) {
func (s *sCouponUsers) InsertJwcodeByExcel(ctx context.Context, file multipart.File, couponId int) (num, num1 int, err error) {
// func (s *sCouponUsers) InsertJwcodeByExcel(file multipart.File) (jwcodes []int, err error) { // func (s *sCouponUsers) InsertJwcodeByExcel(file multipart.File) (jwcodes []int, err error) {
//打开文件并返回一个excelize.File对象,用于读取和操作Excel文件的内容 //打开文件并返回一个excelize.File对象,用于读取和操作Excel文件的内容
f, err := excelize.OpenReader(file) f, err := excelize.OpenReader(file)
if err != nil { if err != nil {
return 0, errors.New("打开文件失败")
return 0, 0, errors.New("打开文件失败")
} }
// 延时关闭文件 // 延时关闭文件
defer func(f *excelize.File) { defer func(f *excelize.File) {
@ -98,12 +98,12 @@ func (s *sCouponUsers) InsertJwcodeByExcel(ctx context.Context, file multipart.F
//读取所有工作表名称 //读取所有工作表名称
GetSheetMap := f.GetSheetMap() GetSheetMap := f.GetSheetMap()
if len(GetSheetMap) == 0 { if len(GetSheetMap) == 0 {
return 0, errors.New("没有工作表")
return 0, 0, errors.New("没有工作表")
} }
rows, err := f.GetRows("Sheet1") rows, err := f.GetRows("Sheet1")
if err != nil { if err != nil {
return 0, err
return 0, 0, err
} }
// 将每行的第一列转换为int,并添加到切片中 // 将每行的第一列转换为int,并添加到切片中
@ -127,22 +127,22 @@ func (s *sCouponUsers) InsertJwcodeByExcel(ctx context.Context, file multipart.F
//将字符串转换为整数 //将字符串转换为整数
jwcode, err := strconv.Atoi(jwcodeStr) jwcode, err := strconv.Atoi(jwcodeStr)
if err != nil { if err != nil {
return 0, errors.New("参数转换失败")
return 0, 0, errors.New("参数转换失败")
} }
jwcodes = append(jwcodes, jwcode) jwcodes = append(jwcodes, jwcode)
/*参数校验*/ /*参数校验*/
} }
/*给用户发放卡券*/ /*给用户发放卡券*/
num, err = s.InsertCouponUsersByJwcodes(ctx, jwcodes, couponId)
num, num1, err = s.InsertCouponUsersByJwcodes(ctx, jwcodes, couponId)
/*给用户发放卡券*/ /*给用户发放卡券*/
//return //返回jwcodes切片 //return //返回jwcodes切片
return num, err
return num, num1, err
} }
// 传来jwcodes字符串,解析并发放卡券 // 传来jwcodes字符串,解析并发放卡券
func (s *sCouponUsers) InsertCouponUsersByJwcodeStr(ctx context.Context, jwcodeStr string, couponId int) (num int, err error) {
func (s *sCouponUsers) InsertCouponUsersByJwcodeStr(ctx context.Context, jwcodeStr string, couponId int) (num, num1 int, err error) {
//将字符串转换为切片 //将字符串转换为切片
jwcodes := strings.Split(jwcodeStr, ",") jwcodes := strings.Split(jwcodeStr, ",")
//转换成int //转换成int
@ -154,20 +154,20 @@ func (s *sCouponUsers) InsertCouponUsersByJwcodeStr(ctx context.Context, jwcodeS
} }
jwcodeInt, err := strconv.Atoi(jwcode) jwcodeInt, err := strconv.Atoi(jwcode)
if err != nil { if err != nil {
return 0, errors.New("参数转换失败")
return 0, 0, errors.New("参数转换失败")
} }
jwcodesInt = append(jwcodesInt, jwcodeInt) jwcodesInt = append(jwcodesInt, jwcodeInt)
} }
/*给用户发放卡券*/ /*给用户发放卡券*/
num, err = s.InsertCouponUsersByJwcodes(ctx, jwcodesInt, couponId)
num, num1, err = s.InsertCouponUsersByJwcodes(ctx, jwcodesInt, couponId)
/*给用户发放卡券*/ /*给用户发放卡券*/
return
return num, num1, err
} }
// 根据精网号发放用户优惠券,群发 //不被controller层调用了,但不能删除 // 根据精网号发放用户优惠券,群发 //不被controller层调用了,但不能删除
func (s *sCouponUsers) InsertCouponUsersByJwcodes(ctx context.Context, jwcodes []int, couponId int) (num int, err error) {
func (s *sCouponUsers) InsertCouponUsersByJwcodes(ctx context.Context, jwcodes []int, couponId int) (num, num1 int, err error) {
//去重 //去重
m := make(map[int]bool) m := make(map[int]bool)
var uniqueJwcodes []int //存放去重后的精网号 var uniqueJwcodes []int //存放去重后的精网号
@ -180,28 +180,42 @@ func (s *sCouponUsers) InsertCouponUsersByJwcodes(ctx context.Context, jwcodes [
//插入数据 //插入数据
for _, jwcode := range uniqueJwcodes { for _, jwcode := range uniqueJwcodes {
//检查数据库中是否存在
//检查数据库表coupon_users中是否存在
count, err := dao.CouponUsers.Ctx(ctx).Where("jwcode = ?", jwcode).Where("coupon_id = ?", couponId).Count() count, err := dao.CouponUsers.Ctx(ctx).Where("jwcode = ?", jwcode).Where("coupon_id = ?", couponId).Count()
if err != nil { if err != nil {
return num, errors.New("检索数据库中是否已存在数据失败")
return num, num1, errors.New("检索数据库中是否已存在数据失败")
} }
//不存在,可以插入
//coupon_users中不存在,可以插入
if count == 0 { if count == 0 {
result, err := dao.CouponUsers.Ctx(ctx).Insert(g.Map{
"jwcode": jwcode,
"coupon_id": couponId,
"time": gtime.Now().Unix(),
})
//判断在member_info表中是否存在
count1, err := dao.MemberInfo.Ctx(ctx).Where("jwcode = ?", jwcode).Count()
if err != nil { if err != nil {
return num, errors.New("插入数据库失败")
return num, num1, errors.New("检索member_info中是否已存在数据失败")
}
//在member_info表中存在
if count1 > 0 {
result, err := dao.CouponUsers.Ctx(ctx).Insert(g.Map{
"jwcode": jwcode,
"coupon_id": couponId,
"time": gtime.Now().Unix(),
})
if err != nil {
return num, num1, errors.New("插入数据库失败")
}
//获取受影响的行数
affected, err := result.RowsAffected()
num += int(affected)
} else {
//在member_info表中不存在
num1++
} }
//获取受影响的行数
affected, err := result.RowsAffected()
num += int(affected)
} else {
//在coupon_users中存在,即已经有卡券了
num1++
} }
} }
return num, err //返回受影响的行数,即新增的条数
return num, num1, err //返回受影响的行数,即新增的条数
} }
// 导入满足条件的用户jwcode到redis //不上传到redis了,上传到数据库表,到时候直接从表里查 // 导入满足条件的用户jwcode到redis //不上传到redis了,上传到数据库表,到时候直接从表里查

6
internal/service/couponusers.go

@ -21,11 +21,11 @@ type (
// 根据jwcode,优惠券id删除用户 // 根据jwcode,优惠券id删除用户
DeleteCouponUserByJwcode(ctx context.Context, couponId int, jwcode int) (result sql.Result, err error) 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)
InsertJwcodeByExcel(ctx context.Context, file multipart.File, couponId int) (num int, num1 int, err error)
// 传来jwcodes字符串,解析并发放卡券 // 传来jwcodes字符串,解析并发放卡券
InsertCouponUsersByJwcodeStr(ctx context.Context, jwcodeStr string, couponId int) (num int, err error)
InsertCouponUsersByJwcodeStr(ctx context.Context, jwcodeStr string, couponId int) (num int, num1 int, err error)
// 根据精网号发放用户优惠券,群发 //不被controller层调用了,但不能删除 // 根据精网号发放用户优惠券,群发 //不被controller层调用了,但不能删除
InsertCouponUsersByJwcodes(ctx context.Context, jwcodes []int, couponId int) (num int, err error)
InsertCouponUsersByJwcodes(ctx context.Context, jwcodes []int, couponId int) (num int, num1 int, err error)
// 导入满足条件的用户jwcode到redis //不上传到redis了,上传到数据库表,到时候直接从表里查 // 导入满足条件的用户jwcode到redis //不上传到redis了,上传到数据库表,到时候直接从表里查
InsertJwcodesToRedisByExcel(file multipart.File) (err error) InsertJwcodesToRedisByExcel(file multipart.File) (err error)
// 判断某用户能否抽到卡券 // 判断某用户能否抽到卡券

Loading…
Cancel
Save