From 3416b2daf4eae1491a9eabe4d6671e02c760be6a Mon Sep 17 00:00:00 2001 From: phpcjl <phpcjl@gmail.com> Date: 星期四, 05 十二月 2024 16:45:47 +0800 Subject: [PATCH] 1.完成开发门店打分接口 --- ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/UserPointServiceImpl.java | 72 +++++++++++++++++++++-- ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/VipCenter.java | 14 ++++ ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/PhoneNumberValidator.java | 28 +++++++++ ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/UserPointService.java | 2 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/PointSettingServiceImpl.java | 7 + ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserPointController.java | 16 ---- ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/vip/Level.java | 11 +++ ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/vip/Describe.java | 10 +++ ruoyi-service/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml | 6 + ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/PointSetting.java | 4 10 files changed, 142 insertions(+), 28 deletions(-) diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/PointSetting.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/PointSetting.java index c6bb0be..15a7069 100644 --- a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/PointSetting.java +++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/PointSetting.java @@ -105,7 +105,7 @@ @ApiModelProperty(value = "门店业绩积分") @TableField("shop_point") - private BigDecimal shopPoint; + private Integer shopPoint; @ApiModelProperty(value = "门店业绩积分 1开0关") @TableField("shop_point_open") @@ -129,7 +129,7 @@ @ApiModelProperty(value = "拉新人积分") @TableField("get_new_point") - private BigDecimal getNewPoint; + private Integer getNewPoint; @ApiModelProperty(value = "拉新人积分 1开0关") @TableField("get_new_point_open") diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/PhoneNumberValidator.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/PhoneNumberValidator.java new file mode 100644 index 0000000..2ba287d --- /dev/null +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/PhoneNumberValidator.java @@ -0,0 +1,28 @@ +package com.ruoyi.common.core.utils; + +public class PhoneNumberValidator { + + // 定义一个匹配中国手机号的正则表达式 + private static final String CHINA_PHONE_REGEX = "^1[3-9]\\d{9}$"; + + /** + * 验证给定的字符串是否符合中国手机号的格式. + * + * @param phoneNumber 要验证的手机号 + * @return 如果手机号格式正确返回true,否则返回false + */ + public static boolean isValidChinaPhoneNumber(String phoneNumber) { + if (phoneNumber == null || phoneNumber.isEmpty()) { + return false; + } + return phoneNumber.matches(CHINA_PHONE_REGEX); + } + + public static void main(String[] args) { + // 测试几个号码 + String[] phoneNumbers = {"13800138000", "15912345678", "18612345678", "110", "12345678901", "19912345678"}; + for (String phoneNumber : phoneNumbers) { + System.out.println("Phone number: " + phoneNumber + " is valid: " + isValidChinaPhoneNumber(phoneNumber)); + } + } +} diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserPointController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserPointController.java index 75fef0e..7ab6d0a 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserPointController.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserPointController.java @@ -1,10 +1,7 @@ package com.ruoyi.account.controller; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.ruoyi.account.api.model.AppUser; import com.ruoyi.account.api.model.UserPoint; -import com.ruoyi.account.service.AppUserService; import com.ruoyi.account.service.UserPointService; import com.ruoyi.account.vo.UserPointDetailVO; import com.ruoyi.account.vo.UserPointVO; @@ -40,8 +37,6 @@ public class UserPointController extends BaseController { @Resource private UserPointService userPointService; - @Resource - private AppUserService appUserService; /** @@ -86,15 +81,8 @@ */ @PostMapping("/transferPoint") @ApiOperation("转赠积分") - public R<Void> transferPoint(@ApiParam("积分") BigDecimal point, @ApiParam("手机号") Long phone) { - AppUser appUser = appUserService.getOne(new LambdaQueryWrapper<AppUser>() - .eq(AppUser::getPhone, phone)); - - - - if (null == appUser) { - return R.fail("用户不存在"); - } + public R<Void> transferPoint(@ApiParam("积分") @RequestParam BigDecimal point, @ApiParam("手机号") @RequestParam String phone) { + userPointService.transferPoint(point, phone); return R.ok(); } diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/VipCenter.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/VipCenter.java new file mode 100644 index 0000000..4dce832 --- /dev/null +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/VipCenter.java @@ -0,0 +1,14 @@ +package com.ruoyi.account.controller; + +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/vipCenter") +@Api(tags = "小程序-会员中心") +public class VipCenter { + + + +} diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/UserPointService.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/UserPointService.java index 3057915..a274f27 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/UserPointService.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/UserPointService.java @@ -24,5 +24,5 @@ List<UserPointDetailVO> getUserPointDetail(Long userId, LocalDateTime startTime, LocalDateTime endTime, Integer type); - void transferPoint(BigDecimal point, Long phone); + void transferPoint(BigDecimal point, String phone); } diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/PointSettingServiceImpl.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/PointSettingServiceImpl.java index e8a14f5..50fdd69 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/PointSettingServiceImpl.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/PointSettingServiceImpl.java @@ -20,7 +20,10 @@ @Override public PointSetting getPointSettingByAppUserId(Long appUserId) { AppUser appUser = appUserService.getById(appUserId); - R<PointSetting> pointSetting = pointSettingClient.getPointSetting(appUser.getVipId()); - return null; + R<PointSetting> r = pointSettingClient.getPointSetting(appUser.getVipId()); + if (!R.isSuccess(r)){ + throw new RuntimeException("获取积分设置失败"); + } + return r.getData(); } } diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/UserPointServiceImpl.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/UserPointServiceImpl.java index 08487d3..3775d83 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/UserPointServiceImpl.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/UserPointServiceImpl.java @@ -3,23 +3,25 @@ import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.ruoyi.account.api.feignClient.AppUserClient; import com.ruoyi.account.api.model.AppUser; -import com.ruoyi.account.api.model.BalanceChangeRecord; import com.ruoyi.account.api.model.UserPoint; import com.ruoyi.account.enums.PointChangeType; import com.ruoyi.account.mapper.UserPointMapper; import com.ruoyi.account.service.AppUserService; +import com.ruoyi.account.service.PointSettingService; import com.ruoyi.account.service.UserPointService; import com.ruoyi.account.service.VipSettingService; import com.ruoyi.account.vo.UserPointDetailVO; import com.ruoyi.account.vo.UserPointVO; -import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.exception.ServiceException; +import com.ruoyi.common.core.utils.PhoneNumberValidator; import com.ruoyi.common.security.service.TokenService; +import com.ruoyi.other.api.domain.PointSetting; import com.ruoyi.other.api.domain.VipSetting; -import com.ruoyi.other.api.feignClient.RemoteVipSettingClient; import com.ruoyi.system.api.model.LoginUser; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.math.BigDecimal; @@ -27,6 +29,7 @@ import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.stream.Collectors; /** @@ -38,6 +41,7 @@ * @since 2024-11-21 */ @Service +@Slf4j public class UserPointServiceImpl extends ServiceImpl<UserPointMapper, UserPoint> implements UserPointService { @Resource private AppUserService appUserService; @@ -45,6 +49,8 @@ private TokenService tokenService; @Resource private VipSettingService vipSettingService; + @Resource + private PointSettingService pointSettingService; @Override public UserPointVO getUserPoint(Long userId) { @@ -89,14 +95,66 @@ @Override - public void transferPoint(BigDecimal point, Long phone) { - AppUser appUserForPhoe = appUserService.getOne(new LambdaQueryWrapper<AppUser>() - .eq(AppUser::getPhone, phone)); + @Transactional + public void transferPoint(BigDecimal point, String phone) { + if (!PhoneNumberValidator.isValidChinaPhoneNumber(phone)) { + throw new ServiceException("无效的电话号码"); + } LoginUser loginUserApplet = tokenService.getLoginUserApplet(); Long userid = loginUserApplet.getUserid(); + VipSetting vipSetting = vipSettingService.getVipSettingByUserId(userid); + if (vipSetting == null) { + throw new ServiceException("VIP 设置未找到"); + } + if (vipSetting.getVipGiftRole() == 0) { + throw new ServiceException("转赠积分权限未开启"); + } + AppUser appUser = appUserService.getById(userid); + if (appUser == null) { + throw new ServiceException("用户未找到"); + } + Integer totalPoint = appUser.getLavePoint(); + PointSetting pointSetting = pointSettingService.getPointSettingByAppUserId(userid); + if (pointSetting == null) { + throw new ServiceException("积分设置未找到"); + } + Integer buyPointOpen = pointSetting.getBuyPointOpen(); + + List<UserPoint> userPointList = list(new LambdaQueryWrapper<UserPoint>() + .eq(UserPoint::getAppUserId, userid)); + Map<Integer, Integer> userBalanceMap = userPointList.stream() + .collect(Collectors.toMap(UserPoint::getType, UserPoint::getBalance)); + + totalPoint -= getAdjustedPoint(userBalanceMap, PointChangeType.CONSUME.getCode(), buyPointOpen == 0); + totalPoint -= getAdjustedPoint(userBalanceMap, PointChangeType.COMMISSION_RETURN.getCode(), pointSetting.getSharePointOpen() == 0); + totalPoint -= getAdjustedPoint(userBalanceMap, PointChangeType.STORE_COMMISSION_RETURN.getCode(), pointSetting.getShopSharePointOpen() == 0); + totalPoint -= getAdjustedPoint(userBalanceMap, PointChangeType.STORE_PERFORMANCE.getCode(), pointSetting.getShopPointOpen() == 0); + totalPoint -= getAdjustedPoint(userBalanceMap, PointChangeType.TECHNICIAN_PERFORMANCE.getCode(), pointSetting.getPersonPointOpen() == 0); + totalPoint -= getAdjustedPoint(userBalanceMap, PointChangeType.NEW_USER_REFERRAL.getCode(), pointSetting.getGetNewPointOpen() == 0); + totalPoint -= getAdjustedPoint(userBalanceMap, PointChangeType.REGISTRATION.getCode(), pointSetting.getGetRegisPointOpen() == 0); + totalPoint -= getAdjustedPoint(userBalanceMap, PointChangeType.WORK_PERFORMANCE.getCode(), pointSetting.getWorkPointOpen() == 0); + + if (point.compareTo(new BigDecimal(totalPoint)) > 0) { + throw new ServiceException("转赠积分不足"); + } + + AppUser appUserForPhoe = appUserService.getOne(new LambdaQueryWrapper<AppUser>() + .eq(AppUser::getPhone, phone)); + if (appUserForPhoe == null) { + throw new ServiceException("目标用户未找到"); + } + + appUserForPhoe.setLavePoint(appUserForPhoe.getLavePoint() + point.intValue()); + appUserService.updateById(appUserForPhoe); + + log.info("积分转赠完成,用户ID: {}, 新积分: {}", appUserForPhoe.getId(), appUserForPhoe.getLavePoint()); + } + + private int getAdjustedPoint(Map<Integer, Integer> userBalanceMap, int pointTypeCode, boolean isOpen) { + return isOpen ? 0 : Optional.ofNullable(userBalanceMap.get(pointTypeCode)).orElse(0); } } diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/vip/Describe.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/vip/Describe.java new file mode 100644 index 0000000..d2ee8ac --- /dev/null +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/vip/Describe.java @@ -0,0 +1,10 @@ +package com.ruoyi.account.vo.vip; + +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.annotations.ApiModelProperty; + +public class Describe { + + @ApiModelProperty(value = "会员专属权益") + private String vipInfo; +} diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/vip/Level.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/vip/Level.java new file mode 100644 index 0000000..cfe2841 --- /dev/null +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/vip/Level.java @@ -0,0 +1,11 @@ +package com.ruoyi.account.vo.vip; + +public class Level { + + /** + * 会员名称 + */ + private String name; + + +} diff --git a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml index 54acfa5..c5188f0 100644 --- a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml +++ b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml @@ -28,9 +28,11 @@ o.id, o.order_number, o.order_status, + o.good_name, + o.good_pics, + o.num, o.point, - o.payment_amount, - o.create_time + o.payment_amount ORDER BY o.create_time DESC </select> -- Gitblit v1.7.1