1、定时删除过期数据
2、默认自动续期
This commit is contained in:
		| @ -496,3 +496,30 @@ func (e MemberProxy) DeleteMyProxy(c *gin.Context) { | ||||
|  | ||||
| 	e.OK(nil, "success") | ||||
| } | ||||
|  | ||||
| // 清除自己的代理 | ||||
| func (e MemberProxy) CleanMyProxy(c *gin.Context) { | ||||
| 	req := dto.MemberProxyCleanReq{} | ||||
| 	s := service.MemberProxy{} | ||||
| 	err := e.MakeContext(c). | ||||
| 		MakeOrm(). | ||||
| 		Bind(&req). | ||||
| 		MakeService(&s.Service). | ||||
| 		Errors | ||||
|  | ||||
| 	if err != nil { | ||||
| 		e.Logger.Error(err) | ||||
| 		e.Error(500, nil, "server error") | ||||
| 	} | ||||
|  | ||||
| 	userId := user.GetUserId(c) | ||||
| 	err = s.CleanMyProxy(&req, userId) | ||||
|  | ||||
| 	if err != nil { | ||||
| 		e.Logger.Error(err) | ||||
| 		e.Error(500, nil, err.Error()) | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	e.OK(nil, "success") | ||||
| } | ||||
|  | ||||
| @ -404,3 +404,30 @@ func (e SmsPhone) ChangeAutoRenew(c *gin.Context) { | ||||
|  | ||||
| 	e.OK(nil, "修改自动续费状态成功") | ||||
| } | ||||
|  | ||||
| // 清除我的号码 | ||||
| func (e SmsPhone) CleanMyPhone(c *gin.Context) { | ||||
| 	req := dto.SmsPhoneCleanMyPhoneReq{} | ||||
| 	s := service.SmsPhone{} | ||||
| 	err := e.MakeContext(c). | ||||
| 		MakeOrm(). | ||||
| 		Bind(&req). | ||||
| 		MakeService(&s.Service). | ||||
| 		Errors | ||||
| 	if err != nil { | ||||
| 		e.Logger.Error(err) | ||||
| 		e.Error(500, err, err.Error()) | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	userId := user.GetUserId(c) | ||||
|  | ||||
| 	err = s.CleanMyPhone(&req, userId) | ||||
|  | ||||
| 	if err != nil { | ||||
| 		e.Error(500, err, fmt.Sprintf("清理失败,\r\n失败信息 %s", err.Error())) | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	e.OK(nil, "清理成功") | ||||
| } | ||||
|  | ||||
| @ -29,7 +29,8 @@ func registerMemberProxyRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMi | ||||
| 		r2.POST("user-renewal", api.UserRenewal)                //用户续费 | ||||
| 		r2.POST("change-auto-renewal", api.ChangeAutoRenewal)   //修改自动续费 | ||||
|  | ||||
| 		r2.DELETE("my", api.DeleteMyProxy) //删除我的代理 | ||||
| 		r2.DELETE("my", api.DeleteMyProxy)   //删除我的代理 | ||||
| 		r2.DELETE("clean", api.CleanMyProxy) //清理自己的代理 | ||||
| 	} | ||||
|  | ||||
| 	r := v1.Group("/member-proxy").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole()) | ||||
|  | ||||
| @ -24,6 +24,7 @@ func registerSmsPhoneRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddl | ||||
| 		r1.GET("list", api.GetMyPage)                              // 获取自己的号码列表 | ||||
| 		r1.POST("weakUp", api.WeakUp)                              // 新增号码 | ||||
| 		r1.DELETE("my-number", api.DeleteMyNumber)                 // 删除自己的号码 | ||||
| 		r1.DELETE("clean", api.CleanMyPhone)                       //清理自己的号码 | ||||
| 		r1.PUT("cancel", api.CancelNumber)                         //取消号码 | ||||
| 		r1.PUT("auto-renewal", api.ChangeAutoRenew)                //修改自动续费状态 | ||||
| 	} | ||||
|  | ||||
| @ -140,6 +140,7 @@ func (e *CliProxyService) UseIp(req *dto.CliProxyIPUseReq, userId int) (decimal. | ||||
| 	memberProxy.Password = resp.Data.Password | ||||
| 	memberProxy.UserName = resp.Data.UserName | ||||
| 	memberProxy.Expired = time.Unix(int64(resp.Data.Expired), 0) | ||||
| 	memberProxy.AutoRenewal = 1 | ||||
|  | ||||
| 	err = e.Orm.Transaction(func(tx *gorm.DB) error { | ||||
| 		if err1 := tx.Exec("UPDATE member_balance SET balance = balance - ? WHERE user_id =?", price, userId).Error; err1 != nil { | ||||
|  | ||||
| @ -130,3 +130,7 @@ type MemberProxyResp struct { | ||||
| 	Status      int       `json:"status"` | ||||
| 	AutoRenewal bool      `json:"autoRenewal"` | ||||
| } | ||||
|  | ||||
| type MemberProxyCleanReq struct { | ||||
| 	Type int `json:"type" comment:"类型1-长效ip 2-流量计费"` | ||||
| } | ||||
|  | ||||
| @ -172,3 +172,7 @@ type SmsPhoneChangeAutoRenewReq struct { | ||||
| 	Id        int `json:"id" comment:"短信号码id"` | ||||
| 	AutoRenew int `json:"autoRenew" comment:"是否自动续费 1-不自动续费 2-自动续费"` | ||||
| } | ||||
|  | ||||
| type SmsPhoneCleanMyPhoneReq struct { | ||||
| 	Type int `json:"type" comment:"类型 0-短效 1-长效"` | ||||
| } | ||||
|  | ||||
| @ -15,6 +15,7 @@ import ( | ||||
| 	"go-admin/app/admin/service/dto" | ||||
| 	"go-admin/common/actions" | ||||
| 	cDto "go-admin/common/dto" | ||||
| 	"go-admin/common/global" | ||||
| ) | ||||
|  | ||||
| type MemberProxy struct { | ||||
| @ -329,6 +330,38 @@ func (e *MemberProxy) CreateProxy(req *dto.MemberProxyInsertReq, userId int) (de | ||||
| 	return balance, err | ||||
| } | ||||
|  | ||||
| // 清除我的代理 | ||||
| func (e *MemberProxy) CleanMyProxy(req *dto.MemberProxyCleanReq, userId int) error { | ||||
| 	if err := e.Orm.Where("user_id =? and type =?", userId, req.Type).Delete(&models.MemberProxy{}).Error; err != nil { | ||||
| 		e.Log.Errorf("清除数据失败 err:%v", err) | ||||
| 		return errors.New("删除失败") | ||||
| 	} | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // 删除过期数据 | ||||
| func (e *MemberProxy) DeleteExpired() error { | ||||
| 	configService := SysConfig{Service: e.Service} | ||||
| 	cliProxyConfig := dto.GetSysConfigByKEYForServiceResp{} | ||||
| 	configService.GetWithKey(&dto.SysConfigByKeyReq{ConfigKey: global.ProxyExpiryTime}, &cliProxyConfig) | ||||
|  | ||||
| 	if cliProxyConfig.ConfigValue == "" { | ||||
| 		e.Log.Error("获取动态ip默认时长失败") | ||||
| 		return errors.New("server error") | ||||
| 	} | ||||
|  | ||||
| 	day, _ := strconv.Atoi(cliProxyConfig.ConfigValue) | ||||
| 	timeDruction := time.Hour * 24 * time.Duration(day) | ||||
| 	endTime := time.Now().Add(-timeDruction) | ||||
|  | ||||
| 	if err := e.Orm.Exec("delete from member_proxy where expired <?", endTime).Error; err != nil { | ||||
| 		e.Log.Errorf("删除过期数据失败 err:%v") | ||||
| 	} | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (e *MemberProxy) getUserName(area, state string) (decimal.Decimal, string, error) { | ||||
| 	configService := SysConfig{Service: e.Service} | ||||
| 	cliProxyConfig := dto.GetSysConfigByKEYForServiceResp{} | ||||
|  | ||||
| @ -15,6 +15,7 @@ import ( | ||||
| 	"go-admin/app/admin/service/dto" | ||||
| 	"go-admin/common/actions" | ||||
| 	cDto "go-admin/common/dto" | ||||
| 	"go-admin/common/global" | ||||
| 	"go-admin/common/statuscode" | ||||
| 	"go-admin/config" | ||||
| 	"go-admin/utils/httphelper" | ||||
| @ -214,6 +215,7 @@ func (e *SmsPhone) GetNumber(req *dto.GetNumberReq, userId int) (decimal.Decimal | ||||
| 	} else { | ||||
| 		now = now.Add(time.Minute * time.Duration(serviceItem.ExpirationMinutes)) | ||||
| 		smsPhone.ExpireTime = &now | ||||
| 		smsPhone.AutoRenewal = 2 | ||||
| 	} | ||||
|  | ||||
| 	smsPhone.Status = 1 | ||||
| @ -223,18 +225,24 @@ func (e *SmsPhone) GetNumber(req *dto.GetNumberReq, userId int) (decimal.Decimal | ||||
| 		return decimal.Zero, statuscode.ServerError | ||||
| 	} | ||||
|  | ||||
| 	// if req.Type == 1 { | ||||
| 	// 	//保存长效号码 | ||||
| 	// 	// if code := e.KeepLongTerm(smsPhone.ActivationId); code != statuscode.Success { | ||||
| 	// 	// 	return decimal.Zero, code | ||||
| 	// 	// } | ||||
| 	// } | ||||
|  | ||||
| 	if err := e.Orm.Exec("UPDATE member_balance SET balance = balance -? WHERE user_id =?", price, userId).Error; err != nil { | ||||
| 		e.Log.Errorf("更新余额失败", err) | ||||
| 		return decimal.Zero, statuscode.ServerError | ||||
| 	} | ||||
|  | ||||
| 	//长效号码默认开启续费 | ||||
| 	if req.Type == 1 { | ||||
| 		code := e.ChangeAutoRenewForApi(smsPhone.NewActivationId, true) | ||||
|  | ||||
| 		if code == statuscode.Success { | ||||
| 			smsPhone.AutoRenewal = 1 | ||||
|  | ||||
| 			if err := e.Orm.Model(&smsPhone).Update("auto_renewal", smsPhone.AutoRenewal).Error; err != nil { | ||||
| 				e.Log.Errorf("更新短信号码自动续期失败, %s", err) | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	balance = balanceService.GetBalance(userId) | ||||
|  | ||||
| 	return balance, statuscode.Success | ||||
| @ -777,3 +785,35 @@ func (e *SmsPhone) Remove(d *dto.SmsPhoneDeleteReq, p *actions.DataPermission) e | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // 清除我的数据 | ||||
| func (e *SmsPhone) CleanMyPhone(req *dto.SmsPhoneCleanMyPhoneReq, userId int) error { | ||||
| 	if err := e.Orm.Where("user_id =? and type =?", userId, req.Type).Delete(&models.SmsPhone{}).Error; err != nil { | ||||
| 		e.Log.Errorf("清除用户手机号码失败:%s", err.Error()) | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // 删除过期数据 | ||||
| func (e *SmsPhone) DeleteExpired() error { | ||||
| 	configService := SysConfig{Service: e.Service} | ||||
| 	cliProxyConfig := dto.GetSysConfigByKEYForServiceResp{} | ||||
| 	configService.GetWithKey(&dto.SysConfigByKeyReq{ConfigKey: global.SmsExpiryTime}, &cliProxyConfig) | ||||
|  | ||||
| 	if cliProxyConfig.ConfigValue == "" { | ||||
| 		e.Log.Error("获取短信过期保留时长失败") | ||||
| 		return errors.New("server error") | ||||
| 	} | ||||
|  | ||||
| 	day, _ := strconv.Atoi(cliProxyConfig.ConfigValue) | ||||
| 	timeDruction := time.Hour * 24 * time.Duration(day) | ||||
| 	endTime := time.Now().Add(-timeDruction) | ||||
|  | ||||
| 	if err := e.Orm.Exec("delete from sms_phone where expire_time <?", endTime).Error; err != nil { | ||||
| 		e.Log.Errorf("删除过期数据失败 err:%v") | ||||
| 	} | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| @ -18,6 +18,7 @@ func InitJob() { | ||||
| 		"CleanExpiredOrderJob": CleanExpiredOrderJob{}, //清理过期订单 | ||||
| 		"SmsJob":               SmsJob{},               //短信定时查询验证码 | ||||
| 		"SmsRenewalJob":        SmsRenewalJob{},        //短信定时自动续期 | ||||
| 		"AutoDeleteJob":        AutoDeleteJob{},        //定时删除任务 | ||||
| 		// ... | ||||
| 	} | ||||
| } | ||||
|  | ||||
| @ -9,6 +9,22 @@ import ( | ||||
| type RenewalJob struct{} | ||||
| type SmsRenewalJob struct{} | ||||
| type ExpireProxyJob struct{} | ||||
| type AutoDeleteJob struct{} | ||||
|  | ||||
| // 定时删除任务 | ||||
| func (j AutoDeleteJob) Exec(args interface{}) error { | ||||
| 	memberService := service.MemberProxy{} | ||||
| 	memberService.Orm = GetDb() | ||||
| 	memberService.Log = logger.NewHelper(logger.DefaultLogger) | ||||
| 	phoneService := service.SmsPhone{} | ||||
| 	phoneService.Orm = GetDb() | ||||
| 	phoneService.Log = logger.NewHelper(logger.DefaultLogger) | ||||
|  | ||||
| 	memberService.DeleteExpired() | ||||
| 	phoneService.DeleteExpired() | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // 定时续期任务 | ||||
| func (j RenewalJob) Exec(args interface{}) error { | ||||
|  | ||||
| @ -17,3 +17,16 @@ func TestProxyJob(t *testing.T) { | ||||
| 		t.Error(err) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func TestAutoDeleteJob(t *testing.T) { | ||||
| 	initSetting() | ||||
| 	config.ExtConfig.CliproxyUrl = "https://f.cliproxy.com" | ||||
| 	config.ExtConfig.CliproxyApiUrl = "https://api.cliproxy.com" | ||||
| 	config.ExtConfig.DaisysmsUrl = "https://daisysms.com/stubs/handler_api.php" | ||||
|  | ||||
| 	autoDeleteJob := AutoDeleteJob{} | ||||
|  | ||||
| 	if err := autoDeleteJob.Exec(nil); err != nil { | ||||
| 		t.Error(err) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| @ -2,7 +2,10 @@ package global | ||||
|  | ||||
| //ConfigKey | ||||
| const ( | ||||
| 	流量代理有效天数     = "traffic_proxy_effective_day" | ||||
| 	长效号码续费标准     = "long_number_renew_deduction_standard" | ||||
| 	长效IP续费kk扣除标准 = "ip_renew_deduction_standard" | ||||
| 	TrafficProxyEffectiveDay         = "traffic_proxy_effective_day"          //流量代理有效天数 | ||||
| 	LongNumberRenewDeductionStandard = "long_number_renew_deduction_standard" //长效号码续费标准 | ||||
| 	IPRenewDeductionStandard         = "ip_renew_deduction_standard"          //长效IP续费kk扣除标准 | ||||
|  | ||||
| 	ProxyExpiryTime = "proxy_expiry_time" //代理过期记录保留时长 | ||||
| 	SmsExpiryTime   = "sms_expiry_time"   //接码过期记录保留时长 | ||||
| ) | ||||
|  | ||||
		Reference in New Issue
	
	Block a user