From 968482fc550f9105072faaba5ce08cb094a698f0 Mon Sep 17 00:00:00 2001 From: lijikun Date: Sat, 4 Jan 2025 16:30:31 +0800 Subject: [PATCH 1/2] =?UTF-8?q?1=E6=9C=884=E6=97=A5,=E5=AF=B9=E4=BA=8E?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E7=94=A8=E6=88=B7=E5=8D=A1=E5=88=B8,?= =?UTF-8?q?=E7=BB=99=E7=94=A8=E6=88=B7=E5=8F=91=E6=94=BE=E5=8D=A1=E5=88=B8?= =?UTF-8?q?=E7=9A=84=E8=BF=94=E5=9B=9E=E4=BF=A1=E6=81=AF=E8=BF=9B=E8=A1=8C?= =?UTF-8?q?=E4=BF=AE=E6=94=B9,=E7=BB=99=E7=94=A8=E6=88=B7=E5=8F=91?= =?UTF-8?q?=E6=94=BE=E5=8D=A1=E5=88=B8=E6=97=B6=E5=88=A4=E6=96=AD=E6=98=AF?= =?UTF-8?q?=E5=90=A6=E5=AD=98=E5=9C=A8=E4=BA=8Emember=5Finfo=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/controller/couponusers/couponUsers.go | 16 +++---- internal/logic/couponusers/couponUsers.go | 66 ++++++++++++++++---------- internal/service/couponusers.go | 8 ++-- 3 files changed, 52 insertions(+), 38 deletions(-) diff --git a/internal/controller/couponusers/couponUsers.go b/internal/controller/couponusers/couponUsers.go index eb8a398..92034a6 100644 --- a/internal/controller/couponusers/couponUsers.go +++ b/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.SuccessWithMsg("删除成功")) + r.Response.WriteJsonExit(dto.SuccessWithMsg(fmt.Sprintf("删除了%d条", affected))) } // 接受前端传来的excel表格,并解析,返回jwcode切片,可以有重复的,在插入时进行验证,如果有重复的,只插入一次 @@ -69,7 +69,7 @@ func (c *CouponUsers) InsertCouponUserByExcel(r *ghttp.Request) { /*解析请求*/ // 从请求中获取文件 - file, _, err := r.FormFile("excelFile") + file, _, err := r.FormFile("file") if err != nil { r.Response.WriteJsonExit(dto.Error(err.Error())) } @@ -88,7 +88,7 @@ func (c *CouponUsers) InsertCouponUserByExcel(r *ghttp.Request) { } /*调用方法解析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 { @@ -96,10 +96,10 @@ func (c *CouponUsers) InsertCouponUserByExcel(r *ghttp.Request) { } //没报错,但插入数据0条 if result == 0 { - r.Response.WriteJsonExit(dto.Error("发放失败,发放了0人")) + r.Response.WriteJsonExit(dto.Error("所要发放的人员已在数据库中存在或不存在于member_info表中")) } //成功处理 - r.Response.WriteJsonExit(dto.SuccessWithMsg(fmt.Sprintf("发放成功,发放了%d人", result))) + r.Response.WriteJsonExit(dto.SuccessWithMsg(fmt.Sprintf("导入成功%d人,导入失败%d人", result, result1))) /*调用方法解析excel文件,并将解析出结果传入另一个函数去发放卡券*/ } @@ -111,7 +111,7 @@ func (c *CouponUsers) InsertCouponUserByJwcodeStr(r *ghttp.Request) { 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 { @@ -119,10 +119,10 @@ func (c *CouponUsers) InsertCouponUserByJwcodeStr(r *ghttp.Request) { } //没报错,但插入数据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))) } /*近期使用*/ diff --git a/internal/logic/couponusers/couponUsers.go b/internal/logic/couponusers/couponUsers.go index 4ab67b0..a831bf5 100644 --- a/internal/logic/couponusers/couponUsers.go +++ b/internal/logic/couponusers/couponUsers.go @@ -78,14 +78,14 @@ func (s *sCouponUsers) DeleteCouponUserByJwcode(ctx context.Context, couponId, j return result, err } -// 通过excel导入精网号 -func (s *sCouponUsers) InsertJwcodeByExcel(ctx context.Context, file multipart.File, couponId int) (num int, err error) { +// 通过excel导入精网号, 并发放卡券 +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) { //打开文件并返回一个excelize.File对象,用于读取和操作Excel文件的内容 f, err := excelize.OpenReader(file) if err != nil { - return 0, errors.New("打开文件失败") + return 0, 0, errors.New("打开文件失败") } // 延时关闭文件 defer func(f *excelize.File) { @@ -98,12 +98,12 @@ func (s *sCouponUsers) InsertJwcodeByExcel(ctx context.Context, file multipart.F //读取所有工作表名称 GetSheetMap := f.GetSheetMap() if len(GetSheetMap) == 0 { - return 0, errors.New("没有工作表") + return 0, 0, errors.New("没有工作表") } rows, err := f.GetRows("Sheet1") if err != nil { - return 0, err + return 0, 0, err } // 将每行的第一列转换为int,并添加到切片中 @@ -127,22 +127,22 @@ func (s *sCouponUsers) InsertJwcodeByExcel(ctx context.Context, file multipart.F //将字符串转换为整数 jwcode, err := strconv.Atoi(jwcodeStr) if err != nil { - return 0, errors.New("参数转换失败") + return 0, 0, errors.New("参数转换失败") } jwcodes = append(jwcodes, jwcode) /*参数校验*/ } /*给用户发放卡券*/ - num, err = s.InsertCouponUsersByJwcodes(ctx, jwcodes, couponId) + num, num1, err = s.InsertCouponUsersByJwcodes(ctx, jwcodes, couponId) /*给用户发放卡券*/ //return //返回jwcodes切片 - return num, err + return num, num1, err } // 传来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, ",") //转换成int @@ -154,20 +154,20 @@ func (s *sCouponUsers) InsertCouponUsersByJwcodeStr(ctx context.Context, jwcodeS } jwcodeInt, err := strconv.Atoi(jwcode) if err != nil { - return 0, errors.New("参数转换失败") + return 0, 0, errors.New("参数转换失败") } 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层调用了,但不能删除 -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) var uniqueJwcodes []int //存放去重后的精网号 @@ -180,28 +180,42 @@ func (s *sCouponUsers) InsertCouponUsersByJwcodes(ctx context.Context, jwcodes [ //插入数据 for _, jwcode := range uniqueJwcodes { - //检查数据库中是否存在 + //检查数据库表coupon_users中是否存在 count, err := dao.CouponUsers.Ctx(ctx).Where("jwcode = ?", jwcode).Where("coupon_id = ?", couponId).Count() if err != nil { - return num, errors.New("检索数据库中是否已存在数据失败") + return num, num1, errors.New("检索数据库中是否已存在数据失败") } - //不存在,可以插入 + //coupon_users中不存在,可以插入 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 { - 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了,上传到数据库表,到时候直接从表里查 diff --git a/internal/service/couponusers.go b/internal/service/couponusers.go index 3768a9e..6f2f4d5 100644 --- a/internal/service/couponusers.go +++ b/internal/service/couponusers.go @@ -20,12 +20,12 @@ 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导入精网号 - InsertJwcodeByExcel(ctx context.Context, file multipart.File, couponId int) (num int, err error) + // 通过excel导入精网号, 并发放卡券 + InsertJwcodeByExcel(ctx context.Context, file multipart.File, couponId int) (num int, num1 int, err error) // 传来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层调用了,但不能删除 - 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了,上传到数据库表,到时候直接从表里查 InsertJwcodesToRedisByExcel(file multipart.File) (err error) // 判断某用户能否抽到卡券 From 1f15b51145524ec2b0ed77c01b0b88691d6c3a0f Mon Sep 17 00:00:00 2001 From: lijikun Date: Sat, 4 Jan 2025 18:01:31 +0800 Subject: [PATCH 2/2] =?UTF-8?q?1=E6=9C=884=E6=97=A5=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E7=BC=96=E8=BE=91=E5=8D=A1=E5=88=B8=E6=97=B6=E4=B8=8D=E6=94=B9?= =?UTF-8?q?=E5=8A=A8=E6=97=A5=E6=9C=9F=E5=88=99=E5=A4=A9=E6=95=B0=E5=8A=A0?= =?UTF-8?q?=E4=B8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/logic/coupon/coupon.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/logic/coupon/coupon.go b/internal/logic/coupon/coupon.go index feadf72..e131d02 100644 --- a/internal/logic/coupon/coupon.go +++ b/internal/logic/coupon/coupon.go @@ -79,7 +79,7 @@ func (s *sCoupon) InsertCoupon(ctx context.Context, req *coupon.InsertCouponReq) Cover: req.Image, ImgUrl: req.Image, StartTime: req.StartTime.Unix(), - EndTime: req.EndTime.Add(23*gtime.H + 59*gtime.M + 59*gtime.S).Unix(), + EndTime: req.EndTime.Unix(), }).Insert() } else { _, 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, ImgUrl: req.Image, 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() } if err != nil {