puzhibing
2025-01-13 acccff9860b271d55c55dc87486f7c20b9896e6c
修改bug
15个文件已修改
183 ■■■■ 已修改文件
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/GoodsAppUser.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/TechnicianClient.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WithdrawalRequestsController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/payment/model/SinglePayCallbackResult.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ShoppingCartServiceImpl.java 111 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/OrderActivityInfoController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopWithdrawController.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/GoodsServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/util/payment/model/SinglePayCallbackResult.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/resources/mapper/other/SeckillActivityInfoMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java
@@ -59,7 +59,7 @@
    R<Long> getVipCount(@RequestParam("userId")Long userId, @RequestParam("vipId") Integer vipId );
    @GetMapping("/app-user/listByIds")
    @PostMapping("/app-user/listByIds")
    List<AppUser> listByIds(@RequestParam("ids") List<Long> list);
    /**
@@ -87,7 +87,7 @@
     * @param userId
     * @return
     */
    @PutMapping("/app-user/setLowerUserShop")
    @PostMapping("/app-user/setLowerUserShop")
    R<List<AppUser>>  setLowerUserShop(@RequestParam("userId") Long userId,@RequestParam("shopId") Integer shopId);
    
    
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/GoodsAppUser.java
@@ -39,6 +39,9 @@
    private Long appUserId;
    @TableField(exist = false)
    private String appUserIdStr;
    @TableField(exist = false)
    @ApiModelProperty(value = "用户名称")
    private String userName;
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/TechnicianClient.java
@@ -29,6 +29,6 @@
     * @param ids
     * @return
     */
    @PostMapping("/technician-subscribe/getTechnicianByIds")
    @PostMapping("/technician/getTechnicianByIds")
    R<List<Technician>> getTechnicianByIds(@RequestParam("ids") Collection<Integer> ids);
}
ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java
@@ -5,6 +5,7 @@
import java.util.concurrent.TimeUnit;
import javax.servlet.http.HttpServletRequest;
import com.ruoyi.common.core.exception.auth.NotPermissionException;
import com.ruoyi.system.api.model.LoginUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -90,7 +91,7 @@
    public LoginUser getLoginUserApplet() {
        LoginUser loginUserAppletToken = getLoginUserAppletToken(ServletUtils.getRequest());
        if (loginUserAppletToken == null) {
            throw new RuntimeException("令牌已过期,请重新登录!");
            throw new NotPermissionException("令牌已过期,请重新登录!");
        }
        return loginUserAppletToken;
    }
@@ -128,7 +129,7 @@
    public LoginUser getLoginUser() {
        LoginUser loginUser = getLoginUser(ServletUtils.getRequest());
        if (loginUser == null) {
            throw new RuntimeException("令牌已过期,请重新登录!");
            throw new NotPermissionException("令牌已过期,请重新登录!");
        }
        if(null == loginUser.getUserid()){
            loginUser.setUserid(loginUser.getSysUser().getUserId());
ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java
@@ -1,5 +1,6 @@
package com.ruoyi.gateway.filter;
import com.ruoyi.common.core.exception.auth.NotPermissionException;
import com.ruoyi.gateway.config.properties.AntiShakeProperties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -131,7 +132,7 @@
    /**
     * 防抖处理
     */
    public void antiShake(ServerHttpRequest request) throws Exception{
    public void antiShake(ServerHttpRequest request) {
        HttpMethod method = request.getMethod();
        if(HttpMethod.OPTIONS == method || !antiShakeProperties.getEnable()){
            return;
@@ -174,20 +175,19 @@
    /**
     * 验证token
     * @param request
     * @throws Exception
     */
    public void verifyToken(ServerHttpRequest request) throws Exception{
    public void verifyToken(ServerHttpRequest request) {
        String token = getToken(request);
        if (StringUtils.isEmpty(token)) {
            throw new RuntimeException("令牌不能为空");
            throw new NotPermissionException("令牌不能为空");
        }
        Claims claims = JwtUtils.parseToken(token);
        if (claims == null) {
            throw new RuntimeException("令牌已过期或验证不正确!");
            throw new NotPermissionException("令牌已过期或验证不正确!");
        }
        String userid = JwtUtils.getUserId(claims);
        if (StringUtils.isEmpty(userid)) {
            throw new RuntimeException("令牌验证失败");
            throw new NotPermissionException("令牌验证失败");
        }
    }
    
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java
@@ -643,8 +643,8 @@
    }
    @GetMapping("/listByIds")
    List<AppUser> listByIds(@RequestParam("ids") List<Long> ids) {
    @PostMapping("/listByIds")
    public List<AppUser> listByIds(@RequestParam("ids") List<Long> ids) {
        if(ids.size() == 0){
            return new ArrayList<>();
        }
@@ -664,7 +664,7 @@
    /**
     * 设置指定用户的下级用户绑定门店
     */
    @PutMapping("setLowerUserShop")
    @PostMapping("/setLowerUserShop")
    public R<Void> setLowerUserShop(@RequestParam("userId") Long userId,@RequestParam("shopId") Integer shopId) {
        appUserService.update(new LambdaUpdateWrapper<AppUser>()
                .set(AppUser::getShopId,shopId)
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WithdrawalRequestsController.java
@@ -157,7 +157,7 @@
    @PostMapping("/withdrawalCallback")
    public Object withdrawalCallback(@RequestBody SinglePayCallbackResult singlePayCallbackResult){
        Integer status = singlePayCallbackResult.getStatus();
        if(203 == status){
        if(203 == status || 205 == status){
            String merchantOrderNo = singlePayCallbackResult.getMerchantOrderNo();
            WithdrawalRequests withdrawalRequests = withdrawalRequestsService.getById(merchantOrderNo);
            if(1 == withdrawalRequests.getStatus()){
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/payment/model/SinglePayCallbackResult.java
@@ -15,6 +15,13 @@
     * 202 处理中 批次正在处理中状态
     * 203 处理完成 批次中的每笔明细都明确了代付结果
     * 204 批次不存在 汇聚未受理该批次的请求,找不到该批次,明确失败
     * 205 交易成功 明确交易成功的状态码
     * 208 订单已取消 代付订单被商户审核为拒绝付款
     * 210 账务冻结中 确认出款后对商户的账户余额进行冻结处理
     * 211 账务解冻中 确认失败后对商户的账户余额进行解冻处理
     * 212 订单取消中 商户审核为拒绝付款的中间状态
     * 213 账务扣款中 确认成功后对商户的账户冻结款的扣款处理
     * 214 订单不存在 汇聚未受理该笔代付请求,找不到该笔订单,明确失败
     */
    private Integer status;
    /**
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java
@@ -744,7 +744,7 @@
            orderInfo.setRecipient(userAddress.getRecieveName() + "-" + userAddress.getRecievePhone());
            orderInfo.setAddress(userAddress.getRecieveAddress());
        }
        if(StringUtils.isNotEmpty(order.getExpressJson())){
        if(StringUtils.isNotEmpty(order.getExpressJson()) && !"NULL".equals(order.getExpressJson())){
            JSONObject jsonObject = JSON.parseObject(order.getExpressJson());
            String com = jsonObject.getString("com");
            String num = jsonObject.getString("num");
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ShoppingCartServiceImpl.java
@@ -509,6 +509,10 @@
        confirmOrderVo.setDiscountAmount(activityAmount);
        int earnPoint = goodsList.stream().mapToInt(MyShoppingCartVo::getEarnSpendingPoints).sum();
        confirmOrderVo.setEarnPoint(earnPoint);
        if(BigDecimal.ZERO.compareTo(paymentMoney) > 0){
            paymentMoney = BigDecimal.ZERO;
        }
        //支付金额,订单金额-订单优惠
        confirmOrderVo.setPayMoney(paymentMoney);
        confirmOrderVo.setResidualPoint(appUser.getAvailablePoint().intValue());
@@ -916,6 +920,10 @@
                }
            }
        }
        if(BigDecimal.ZERO.compareTo(paymentMoney) > 0){
            paymentMoney = BigDecimal.ZERO;
        }
        //构建订单明细
        Order order = new Order();
        order.setAppUserId(userid);
@@ -1036,21 +1044,98 @@
        //开始构建支付数据
        //现金支付
        paymentMoney = paymentMoney.add(expressFee).setScale(2, RoundingMode.HALF_EVEN);
        if(BigDecimal.ZERO.compareTo(paymentMoney) > 0){
            paymentMoney = BigDecimal.ZERO;
        }
        if(1 == shoppingCartPayment.getPaymentType()){
            //调起微信支付
            String goodsNames = goodsList.stream().map(MyShoppingCartVo::getName).collect(Collectors.joining("\n"));
            UniPayResult uniPayResult = PaymentUtil.uniPay(order.getOrderNumber(), paymentMoney.doubleValue(), order.getOrderType() == 1 ? "购买服务商品" : "购买单品商品",
                    goodsNames, "", "/order/shopping-cart/shoppingCartPaymentCallback", appUser.getWxOpenid(), null);
            if(null == uniPayResult || !"100".equals(uniPayResult.getRa_Code())){
                return R.fail(null == uniPayResult ? "支付失败" : uniPayResult.getRb_CodeMsg());
            if(BigDecimal.ZERO.compareTo(paymentMoney) < 0){
                //调起微信支付
                String goodsNames = goodsList.stream().map(MyShoppingCartVo::getName).collect(Collectors.joining("\n"));
                UniPayResult uniPayResult = PaymentUtil.uniPay(order.getOrderNumber(), paymentMoney.doubleValue(), order.getOrderType() == 1 ? "购买服务商品" : "购买单品商品",
                        goodsNames, "", "/order/shopping-cart/shoppingCartPaymentCallback", appUser.getWxOpenid(), null);
                if(null == uniPayResult || !"100".equals(uniPayResult.getRa_Code())){
                    return R.fail(null == uniPayResult ? "支付失败" : uniPayResult.getRb_CodeMsg());
                }
                String rc_result = uniPayResult.getRc_Result();
                JSONObject jsonObject = JSON.parseObject(rc_result);
                jsonObject.put("orderId", order.getId().toString());
                //将支付数据添加到redis队列中,便于定时任务去校验是否完成支付,没有完成支付支付,15分钟后关闭订单。
                long second = LocalDateTime.now().plusMinutes(15).toEpochSecond(ZoneOffset.UTC);
                redisTemplate.opsForZSet().add("OrderPayment", order.getOrderNumber(), second);
                return R.ok(jsonObject.toJSONString());
            }else{
                earnPoint = order.getGetPoint();
                appUser = appUserClient.getAppUserById(order.getAppUserId());
                Integer lavePoint = appUser.getLavePoint();
                paymentMoney = order.getPaymentAmount();
                //构建积分流水记录
                if(earnPoint > 0){
                    PointSetting pointSetting = pointSettingClient.getPointSetting(appUser.getVipId()).getData();
                    int earnPoint1 = 0;
                    if(null != pointSetting && 1 == pointSetting.getBuyPointOpen()){
                        earnPoint1 = new BigDecimal(earnPoint).multiply(pointSetting.getBuyPoint().divide(new BigDecimal(100))).intValue();
                    }
                    appUser.setShopPoint(appUser.getShopPoint() + earnPoint);
                    appUser.setLavePoint(appUser.getLavePoint() + earnPoint);
                    appUser.setTotalPoint(appUser.getTotalPoint() + earnPoint);
                    appUser.setAvailablePoint(appUser.getAvailablePoint() + earnPoint1);
                    appUser.setTotalAvailablePoint(appUser.getTotalAvailablePoint() + earnPoint1);
                    JSONObject jsonObject = new JSONObject();
                    jsonObject.put("shopPoint", earnPoint);
                    jsonObject.put("availablePoint", earnPoint1);
                    if(null != pointSetting && 1 == pointSetting.getBuyPointGift()){
                        appUser.setTransferablePoint(appUser.getTransferablePoint() + earnPoint1);
                        jsonObject.put("transferablePoint", earnPoint1);
                    }
                    UserPoint userPoint = new UserPoint();
                    userPoint.setType(1);
                    userPoint.setHistoricalPoint(lavePoint);
                    userPoint.setVariablePoint(earnPoint);
                    userPoint.setBalance(appUser.getLavePoint());
                    userPoint.setCreateTime(LocalDateTime.now());
                    userPoint.setAppUserId(appUser.getId());
                    userPoint.setObjectId(order.getId());
                    userPoint.setExtention(jsonObject.toJSONString());
                    userPointClient.saveUserPoint(userPoint);
                }
                appUser.setShopAmount(appUser.getShopAmount().add(paymentMoney).setScale(2, RoundingMode.HALF_EVEN));
                appUser.setLastShopTime(LocalDateTime.now());
                appUserClient.editAppUserById(appUser);
                //变更等级
                appUserClient.vipUpgrade(appUser.getId());
                //修改订支付状态
                order.setPayStatus(2);
                //自提
                if(order.getOrderType() == 1 && StringUtils.isEmpty(order.getAddressJson())){
                    order.setOrderStatus(2);
                }
                orderService.updateById(order);
                //处理优惠券
                if(null != order.getUserCouponId()){
                    UserCoupon userCoupon = userCouponClient.getUserCoupon(order.getUserCouponId()).getData();
                    if(null != userCoupon && null == userCoupon.getUseTime()){
                        userCoupon.setStatus(2);
                        userCoupon.setUseTime(LocalDateTime.now());
                        userCouponClient.editUserCoupon(userCoupon);
                    }
                }
                //添加查询快递信息队列
                if(StringUtils.isNotEmpty(order.getExpressJson())){
                    //一小时后定时查询快递信息
                    redisTemplate.opsForZSet().add("order_express", order.getId(), LocalDateTime.now().plusHours(1).toEpochSecond(ZoneOffset.UTC));
                }
                //删除购物车数据
                userid = tokenService.getLoginUserApplet().getUserid();
                List<OrderGood> list1 = orderGoodService.list(new LambdaQueryWrapper<OrderGood>().eq(OrderGood::getOrderId, order.getId()));
                List<Integer> goodsIds1 = list1.stream().map(OrderGood::getGoodsId).collect(Collectors.toList());
                this.remove(new LambdaQueryWrapper<ShoppingCart>().eq(ShoppingCart::getAppUserId, userid).in(ShoppingCart::getGoodsId, goodsIds1));
            }
            String rc_result = uniPayResult.getRc_Result();
            JSONObject jsonObject = JSON.parseObject(rc_result);
            jsonObject.put("orderId", order.getId().toString());
            //将支付数据添加到redis队列中,便于定时任务去校验是否完成支付,没有完成支付支付,15分钟后关闭订单。
            long second = LocalDateTime.now().plusMinutes(15).toEpochSecond(ZoneOffset.UTC);
            redisTemplate.opsForZSet().add("OrderPayment", order.getOrderNumber(), second);
            return R.ok(jsonObject.toJSONString());
        }
        //账户余额
        BigDecimal redPacketAmount = BigDecimal.ZERO;
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/OrderActivityInfoController.java
@@ -62,7 +62,7 @@
    public R<Void> saveActivityConfig(@RequestBody OrderActivityInfo orderActivityInfo){
        orderActivityInfo.setIsShelf(0);
        if (org.springframework.util.StringUtils.hasLength(orderActivityInfo.getVipIds())){
            List<String> vipIds = Arrays.asList(orderActivityInfo.getVipIds().split(","));
            List<String> vipIds = new ArrayList<>(Arrays.asList(orderActivityInfo.getVipIds().split(",")));
            List<OrderActivityInfo> list = orderActivityInfoService.lambdaQuery()
                    .le(OrderActivityInfo::getStartTime, orderActivityInfo.getStartTime())
                    .or()
@@ -70,7 +70,7 @@
            if (!list.isEmpty()){
                for (OrderActivityInfo activityInfo : list) {
                    List<String> vips = Arrays.asList(activityInfo.getVipIds().split(","));
                    vipIds.retainAll(vips);
                    vipIds.addAll(vips);
                    if (!vipIds.isEmpty()){
                        StringBuilder message = new StringBuilder();
                        List<String> collect = vips.stream().sorted().collect(Collectors.toList());
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopWithdrawController.java
@@ -26,6 +26,7 @@
import com.ruoyi.other.util.payment.model.SinglePayCallbackResult;
import com.ruoyi.other.util.payment.model.SinglePayResult;
import com.ruoyi.system.api.domain.SysUser;
import com.ruoyi.system.api.feignClient.SysUserClient;
import com.ruoyi.system.api.model.LoginUser;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -65,6 +66,9 @@
    
    @Resource
    private AppUserClient appUserClient;
    @Resource
    private SysUserClient sysUserClient;
    
    
    
@@ -121,7 +125,8 @@
    @GetMapping("/shop/with")
    @ApiOperation(value = "提现申请", notes = "提现申请列表", tags = {"门店后台"})
    public R shopwith(@RequestParam BigDecimal money){
        SysUser sysUser = tokenService.getLoginUser().getSysUser();
        Long userid = tokenService.getLoginUser().getUserid();
        SysUser sysUser = sysUserClient.getSysUser(userid).getData();
        Integer objectId = sysUser.getObjectId();
        Shop shop = shopService.getById(objectId);
        if (money.compareTo(shop.getCanWithdrawMoney())>0){
@@ -179,7 +184,7 @@
                return R.fail("查询账户余额出错");
            }
            Double useAbleSettAmount = accountBalanceQueryResult.getUseAbleSettAmount();
            if(useAbleSettAmount < shopWithdraw1.getMoney().doubleValue()){
            if(useAbleSettAmount < (shopWithdraw1.getMoney().doubleValue() + 1)){
                return R.fail("账户可用余额不足,请先补充账户余额");
            }
            //银行卡转账
@@ -238,7 +243,7 @@
    @PostMapping("/withdrawalCallback")
    public Object withdrawalCallback(@RequestBody SinglePayCallbackResult singlePayCallbackResult){
        Integer status = singlePayCallbackResult.getStatus();
        if(203 == status){
        if(203 == status || 205 == status){
            String merchantOrderNo = singlePayCallbackResult.getMerchantOrderNo();
            ShopWithdraw shopWithdraw = shopWithdrawService.getById(merchantOrderNo);
            if(1 == shopWithdraw.getStatus()){
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/GoodsServiceImpl.java
@@ -459,6 +459,7 @@
        List<AppUser> appUsers = appUserClient.listByIds(userIds);
        for (GoodsAppUser goodsAppUser : goodsAppUserList) {
            appUsers.stream().filter(u -> u.getId().equals(goodsAppUser.getAppUserId())).findFirst().ifPresent( u -> {
                goodsAppUser.setAppUserIdStr(goodsAppUser.getAppUserId().toString());
                goodsAppUser.setUserName(u.getName());
                goodsAppUser.setPhone(u.getPhone());
                VipSetting vipSetting = vipSettingService.getById(u.getVipId());
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/util/payment/model/SinglePayCallbackResult.java
@@ -11,6 +11,17 @@
public class SinglePayCallbackResult {
    /**
     * 交易状态
     * 201 批次已创建 汇聚受理并创建该批次的初始状态
     * 202 处理中 批次正在处理中状态
     * 203 处理完成 批次中的每笔明细都明确了代付结果
     * 204 批次不存在 汇聚未受理该批次的请求,找不到该批次,明确失败
     * 205 交易成功 明确交易成功的状态码
     * 208 订单已取消 代付订单被商户审核为拒绝付款
     * 210 账务冻结中 确认出款后对商户的账户余额进行冻结处理
     * 211 账务解冻中 确认失败后对商户的账户余额进行解冻处理
     * 212 订单取消中 商户审核为拒绝付款的中间状态
     * 213 账务扣款中 确认成功后对商户的账户冻结款的扣款处理
     * 214 订单不存在 汇聚未受理该笔代付请求,找不到该笔订单,明确失败
     */
    private Integer status;
    /**
ruoyi-service/ruoyi-other/src/main/resources/mapper/other/SeckillActivityInfoMapper.xml
@@ -64,7 +64,7 @@
        tgc.`name` goodsCategoryName,
        tg.operating_cost,
        tg.shop_cost,
        tg.purchase_limit maxNum,
        tsai.max_num maxNum,
        tg.home_page_picture,
        tg.original_price,
        tg.sale_num,