diff --git a/internal/controller/couponusers/couponUsers.go b/internal/controller/couponusers/couponUsers.go index 1bff627..d433765 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,6 @@ 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())) @@ -89,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 { @@ -97,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("所要发放的人员已存在或不存在该用户")) } //成功处理 - r.Response.WriteJsonExit(dto.SuccessWithMsg(fmt.Sprintf("发放成功,发放了%d人", result))) + r.Response.WriteJsonExit(dto.SuccessWithMsg(fmt.Sprintf("导入成功%d人,导入失败%d人", result, result1))) /*调用方法解析excel文件,并将解析出结果传入另一个函数去发放卡券*/ } @@ -112,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 { @@ -120,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 db6d8ec..c423e48 100644 --- a/internal/logic/couponusers/couponUsers.go +++ b/internal/logic/couponusers/couponUsers.go @@ -79,13 +79,13 @@ func (s *sCouponUsers) DeleteCouponUserByJwcode(ctx context.Context, couponId, j } // 通过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) { //打开文件并返回一个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 2ecbfea..c96e8c4 100644 --- a/internal/service/couponusers.go +++ b/internal/service/couponusers.go @@ -21,11 +21,11 @@ type ( // 根据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) + 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) // 判断某用户能否抽到卡券