phpcjl
2024-12-05 3416b2daf4eae1491a9eabe4d6671e02c760be6a
1.完成开发门店打分接口
6个文件已修改
4个文件已添加
170 ■■■■ 已修改文件
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/PointSetting.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/PhoneNumberValidator.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserPointController.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/VipCenter.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/UserPointService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/PointSettingServiceImpl.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/UserPointServiceImpl.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/vip/Describe.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/vip/Level.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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")
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/PhoneNumberValidator.java
New file
@@ -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));
        }
    }
}
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();
    }
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/VipCenter.java
New file
@@ -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 {
}
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);
}
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();
    }
}
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);
    }
}
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/vip/Describe.java
New file
@@ -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;
}
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/vip/Level.java
New file
@@ -0,0 +1,11 @@
package com.ruoyi.account.vo.vip;
public class Level {
    /**
     * 会员名称
     */
    private String name;
}
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>