From 74b2581c8a9be309ca6454da3ff2c56501368771 Mon Sep 17 00:00:00 2001 From: Pu Zhibing <393733352@qq.com> Date: 星期四, 09 一月 2025 09:30:21 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java | 137 ++++++++++++++++++++++++++++++++++----------- 1 files changed, 104 insertions(+), 33 deletions(-) diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java index 9d47a7a..ed32161 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java @@ -3,19 +3,16 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.ruoyi.account.api.model.AppUserShop; -import com.ruoyi.account.api.model.UserChangeLog; -import com.ruoyi.account.api.model.UserPoint; +import com.ruoyi.account.api.model.*; import com.ruoyi.account.mapper.AppUserMapper; -import com.ruoyi.account.api.model.AppUser; -import com.ruoyi.account.service.AppUserService; -import com.ruoyi.account.service.AppUserShopService; -import com.ruoyi.account.service.UserChangeLogService; -import com.ruoyi.account.service.UserPointService; +import com.ruoyi.account.service.*; import com.ruoyi.account.util.SMSUtil; +import com.ruoyi.account.util.payment.PaymentUtil; +import com.ruoyi.account.util.payment.model.CloseOrderResult; import com.ruoyi.account.util.tencentMap.TencentMapUtil; import com.ruoyi.account.util.weChat.EnvVersion; import com.ruoyi.account.util.weChat.WXCore; @@ -25,26 +22,23 @@ import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.redis.service.RedisService; import com.ruoyi.common.security.service.TokenService; -import com.ruoyi.other.api.domain.PointSetting; -import com.ruoyi.other.api.domain.Region; -import com.ruoyi.other.api.domain.Shop; -import com.ruoyi.other.api.domain.VipSetting; -import com.ruoyi.other.api.feignClient.PointSettingClient; -import com.ruoyi.other.api.feignClient.RegionClient; -import com.ruoyi.other.api.feignClient.ShopClient; -import com.ruoyi.other.api.feignClient.VipSettingClient; +import com.ruoyi.other.api.domain.*; +import com.ruoyi.other.api.feignClient.*; import com.ruoyi.system.api.domain.SysUser; import com.ruoyi.system.api.feignClient.SysUserClient; import com.ruoyi.system.api.model.LoginUser; +import lombok.extern.slf4j.Slf4j; import org.apache.logging.log4j.core.util.UuidUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.math.BigDecimal; import java.time.LocalDateTime; +import java.time.ZoneOffset; import java.util.*; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -61,6 +55,7 @@ * @author luodangjia * @since 2024-11-21 */ +@Slf4j @Service public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> implements AppUserService { @@ -105,6 +100,17 @@ @Resource private RegionClient regionClient; + + @Resource + private CouponInfoClient couponInfoClient; + + @Resource + private UserCouponService userCouponService; + + @Resource + private RedisTemplate redisTemplate; + @Resource + private BalancePaymentService balancePaymentService; /** @@ -355,6 +361,15 @@ appUser.setProvinceCode(region.getCode()); } this.save(appUser); + //添加定时任务队列 + VipSetting vipSetting = vipSettingClient.getVipSetting(1).getData(); + Integer vipCancelDay = vipSetting.getVipCancelDay(); + Integer vipChangeDay = vipSetting.getVipChangeDay(); + //解绑推广人 + redisTemplate.opsForZSet().add("unbind_promoter", appUser.getId().toString(), LocalDateTime.now().plusDays(vipCancelDay).toEpochSecond(ZoneOffset.UTC)); + //可更换推广人 + redisTemplate.opsForZSet().add("replaceable", appUser.getId().toString(), LocalDateTime.now().plusDays(vipChangeDay).toEpochSecond(ZoneOffset.UTC)); + //增加积分变动记录 if(0 == old && regisPoint > 0){ //构建积分流水记录 @@ -366,6 +381,26 @@ userPoint.setCreateTime(LocalDateTime.now()); userPoint.setAppUserId(appUser.getId()); userPointService.save(userPoint); + } + //获取优惠券 + if(0 == old){ + List<CouponInfo> list = couponInfoClient.getCouponInfoByPersonType(4).getData(); + for (CouponInfo couponInfo : list) { + UserCoupon userCoupon = new UserCoupon(); + userCoupon.setDelFlag(0); + userCoupon.setCreateTime(LocalDateTime.now()); + userCoupon.setAppUserId(appUser.getId()); + userCoupon.setCouponId(couponInfo.getId()); + LocalDateTime start = couponInfo.getPeriodStartTime().atTime(0, 0, 0); + LocalDateTime end = couponInfo.getPeriodEndTime().atTime(23, 59, 59); + if(couponInfo.getPeriodType() == 2){ + start = LocalDateTime.now(); + end = start.plusDays(couponInfo.getPeriodDays()); + } + userCoupon.setStartTime(start); + userCoupon.setEndTime(end); + userCouponService.save(userCoupon); + } } //变更等级 vipUpgrade(appUser.getId()); @@ -647,6 +682,9 @@ public List<NearbyReferrerVo> getNearbyReferrer(NearbyReferrer nearbyReferrer) { //使用地图获取省市区数据 String citycode = TencentMapUtil.inverseGeographicalAnalysis(nearbyReferrer.getLongitude(), nearbyReferrer.getLatitude(), false); + if(StringUtils.isEmpty(citycode)){ + citycode = "510100"; + } if(null != citycode){ String cityCode = citycode.substring(0, 4) + "00"; List<NearbyReferrerVo> list = this.baseMapper.getNearbyReferrer(cityCode, nearbyReferrer); @@ -710,23 +748,27 @@ @Override public void unbindThePromoter() { //注册X天后没有升级成黄金会员则自动解绑推广人 - VipSetting vipSetting = vipSettingClient.getVipSetting(1).getData(); - Integer vipCancelDay = vipSetting.getVipCancelDay(); - Integer vipChangeDay = vipSetting.getVipChangeDay(); - List<AppUser> list = this.list(new LambdaQueryWrapper<AppUser>().eq(AppUser::getVipId, 1).eq(AppUser::getDelFlag, 0).isNotNull(AppUser::getInviteUserId) - .eq(AppUser::getStatus, 1).last(" and ADDDATE(create_time,INTERVAL " + vipCancelDay + " DAY) <= now()")); - for (AppUser appUser : list) { - appUser.setInviteUserId(null); - appUser.setShopId(null); - this.updateById(appUser); + + //解绑推广人 + Set<Long> unbind_promoter = redisTemplate.opsForZSet().range("unbind_promoter", 0, LocalDateTime.now().toEpochSecond(ZoneOffset.UTC)); + if(unbind_promoter.size() > 0){ + List<AppUser> list = this.list(new LambdaQueryWrapper<AppUser>().eq(AppUser::getVipId, 1).eq(AppUser::getDelFlag, 0).isNotNull(AppUser::getInviteUserId) + .eq(AppUser::getStatus, 1).in(AppUser::getId, unbind_promoter)); + for (AppUser appUser : list) { + UpdateWrapper<AppUser> updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("invite_user_id", null).set("shop_id", null).eq("id", appUser.getId()); + this.update(updateWrapper); + } } - //可更换推广人 - list = this.list(new LambdaQueryWrapper<AppUser>().eq(AppUser::getVipId, 1).eq(AppUser::getDelFlag, 0).eq(AppUser::getChangePromoter, 0) - .isNull(AppUser::getLastShopTime).eq(AppUser::getStatus, 1).last(" and ADDDATE(create_time,INTERVAL " + vipChangeDay + " DAY) <= now()")); - for (AppUser appUser : list) { - appUser.setChangePromoter(1); - this.updateById(appUser); + Set<Long> replaceable = redisTemplate.opsForZSet().range("replaceable", 0, LocalDateTime.now().toEpochSecond(ZoneOffset.UTC)); + if(replaceable.size() > 0){ + List<AppUser> list = this.list(new LambdaQueryWrapper<AppUser>().eq(AppUser::getDelFlag, 0).eq(AppUser::getChangePromoter, 0) + .eq(AppUser::getStatus, 1).in(AppUser::getId, unbind_promoter)); + for (AppUser appUser : list) { + appUser.setChangePromoter(1); + this.updateById(appUser); + } } } @@ -783,7 +825,7 @@ } @Override - public IPage<AppUser> getAppuserPage(Integer pageNum, Integer pageSize, AppUser appUser) { + public IPage<AppUser> getAppuserPage(Integer pageNum, Integer pageSize, AppUser appUser, Integer shopId, Set<Long> userId) { if (StringUtils.isNotEmpty(appUser.getShopName())){ R<Set<Integer>> shopR = shopClient.getShopIdByName(appUser.getShopName()); if (R.isSuccess(shopR)){ @@ -793,7 +835,7 @@ } } } - return appUserMapper.getAppuserPage(new Page<>(pageNum, pageSize), appUser); + return appUserMapper.getAppuserPage(new Page<>(pageNum, pageSize), appUser, shopId, userId); } @Override public IPage<AppUser> getAppuserPage1(Integer pageNum, Integer pageSize, AppUser appUser,Integer objectId,List<Long> userIds) { @@ -906,4 +948,33 @@ this.updateBatchById(appUserList); } } + + + + /** + * 定时任务关闭订单 + */ + @Override + public void closeOrder() { + //订单支付数据 + long second = LocalDateTime.now().toEpochSecond(ZoneOffset.UTC); + Set<String> orderPayment = redisTemplate.opsForZSet().range("BalanceRecharge", 0, second); + if(orderPayment.size() > 0){ + List<BalancePayment> list = balancePaymentService.list(new LambdaQueryWrapper<BalancePayment>().in(BalancePayment::getId, orderPayment)); + for (BalancePayment order : list) { + if(null == order || order.getStatus() != 1){ + redisTemplate.opsForZSet().remove("BalanceRecharge", order.getId()); + continue; + } + //开始执行关闭订单操作 + CloseOrderResult closeOrderResult = PaymentUtil.closeOrder(order.getId().toString()); + if((null == closeOrderResult || !closeOrderResult.getRa_Status().equals("100")) && + Arrays.asList("0", "4", "101", "10080000", "10080002", "10083004", "10083005").contains(closeOrderResult.getRb_Code())){ + redisTemplate.opsForZSet().add("BalanceRecharge", order.getId(), 0); + log.error("关闭订单失败:{}---->{}", order.getId(), com.alibaba.fastjson2.JSON.toJSONString(closeOrderResult)); + } + redisTemplate.opsForZSet().remove("BalanceRecharge", order.getId()); + } + } + } } -- Gitblit v1.7.1