puzhibing
2025-01-11 822345ccbc0f0268376168d2a11338d955f03942
修改bug
31个文件已修改
1个文件已添加
521 ■■■■ 已修改文件
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/UserPointFallbackFactory.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/UserPointClient.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/Goods.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/GoodsClientFallbackFactory.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/GoodsClient.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/ShopClient.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserCouponController.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserPointController.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserSignRecordController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WalletController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WithdrawalRequestsController.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/AppUserService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/UserPointServiceImpl.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/payment/TransferUtil.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/WithdrawalAuth.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/resources/mapper/account/AppUserMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ShoppingCartServiceImpl.java 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/BannerController.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/CouponInfoController.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/GoodsController.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShareController.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopController.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopWithdrawController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/GoodsMapper.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/GoodsEvaluateServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/GoodsServiceImpl.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/SeckillActivityInfoServiceImpl.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/ShopServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/util/payment/TransferUtil.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/resources/mapper/other/GoodsMapper.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/UserPointFallbackFactory.java
@@ -24,6 +24,11 @@
            public R<List<UserPoint>> getUserPointList(UserPoint userPoint) {
                return R.fail("获取积分变动明细失败:" + cause.getMessage());
            }
            @Override
            public R<Boolean> judgmentDailyShare(Long appUserId) {
                return R.fail("判断当天是否分享获得过积分失败:" + cause.getMessage());
            }
        };
    }
}
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/UserPointClient.java
@@ -7,6 +7,7 @@
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
@@ -33,4 +34,13 @@
     */
    @PostMapping("/user-point/getUserPointList")
    R<List<UserPoint>> getUserPointList(@RequestBody UserPoint userPoint);
    /**
     * 判断当天是否分享获得过积分
     * @param appUserId
     * @return
     */
    @PostMapping("/user-point/judgmentDailyShare")
    R<Boolean> judgmentDailyShare(@RequestParam("appUserId") Long appUserId);
}
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/Goods.java
@@ -152,6 +152,18 @@
    @TableField(exist = false)
    private String payMethod;
    /**
     * 排序字段
     */
    @TableField(exist = false)
    private String orderByColumn;
    /**
     * 排序方式
     */
    @TableField(exist = false)
    private String isAsc;
    public String getIdStr() {
        return String.valueOf(id);
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/GoodsClientFallbackFactory.java
@@ -34,6 +34,11 @@
            public R<List<Goods>> getGoodsById(String [] ids) {
                return R.fail("根据ids获取商品详情失败:" + cause.getMessage());
            }
            @Override
            public R editGoodsList(List<Goods> goods) {
                return R.fail("编辑商品信息失败:" + cause.getMessage());
            }
        };
    }
}
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/GoodsClient.java
@@ -6,6 +6,7 @@
import com.ruoyi.other.api.factory.GoodsClientFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
@@ -34,7 +35,17 @@
     */
    @PostMapping("/goods/getGoodsById")
    R<Goods> getGoodsById(@RequestParam("id") Integer id);
    @PostMapping("/goods/getGoodsByIds")
    R<List<Goods>> getGoodsById(@RequestParam("ids") String[]  ids);
    /**
     * 编辑商品信息
     * @param goods
     * @return
     */
    @PostMapping("/goods/editGoods")
    R editGoodsList(@RequestBody List<Goods> goods);
}
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/ShopClient.java
@@ -45,8 +45,8 @@
    @PostMapping("/shop/getShopByUserIds")
    R<List<Shop>> getShopByUserIds(@RequestBody List<Long> userIds);
    @GetMapping("/shop/getShopIdByName")
    R<Set<Integer>> getShopIdByName(String shopName);
    @PostMapping("/shop/getShopIdByName")
    R<Set<Integer>> getShopIdByName(@RequestParam("shopName") String shopName);
    @PostMapping("/shop-balance-statement/getList")
    R<List<ShopBalanceStatement>> getShopBalanceStatementList(@RequestBody ShopBalanceStatement shopBalanceStatement);
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.ruoyi.account.api.model.AppUser;
import com.ruoyi.account.api.model.UserCancellationLog;
import com.ruoyi.account.api.model.UserCoupon;
@@ -140,7 +141,11 @@
    @ResponseBody
    @PostMapping("/getCouponCount")
    public R<Long> getCouponCount(@RequestParam("userId") Long userId, @RequestParam("couponId") Integer couponId) {
        Long count = userCouponService.lambdaQuery().eq(UserCoupon::getAppUserId, userId).eq(UserCoupon::getCouponId, couponId).count();
        LambdaQueryChainWrapper<UserCoupon> chainWrapper = userCouponService.lambdaQuery().eq(UserCoupon::getCouponId, couponId);
        if(null != userId && -1 == userId){
            chainWrapper.eq(UserCoupon::getAppUserId, userId);
        }
        Long count = chainWrapper.count();
        return R.ok(count);
    }
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserCouponController.java
@@ -2,6 +2,7 @@
import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.account.api.model.AppUser;
@@ -98,8 +99,6 @@
                }
            }
            record.setCouponInfoVo(vo);
            if (record.getUseTime()==null){
                record.setStatus(1);
@@ -109,7 +108,6 @@
            }else {
                record.setStatus(2);
            }
            AppUser appUser = appUserService.getById(record.getAppUserId());
            record.setUserName(appUser.getName());
@@ -149,8 +147,6 @@
                }
            }
            record.setCouponInfoVo(vo);
            if (record.getUseTime()==null){
                record.setStatus(1);
@@ -160,7 +156,6 @@
            }else {
                record.setStatus(2);
            }
            AppUser appUser = appUserService.getById(record.getAppUserId());
            record.setUserName(appUser.getName());
@@ -184,6 +179,16 @@
        if (data==null){
            return  R.fail("当前优惠券不存在,请刷新后重试");
        }
        long count = userCouponService.count(new LambdaQueryWrapper<UserCoupon>().eq(UserCoupon::getCouponId, couponId).eq(UserCoupon::getDelFlag, 0));
        if(data.getSendNum() <= count){
            return R.fail("当前优惠券已全部领取完毕");
        }
        count = userCouponService.count(new LambdaQueryWrapper<UserCoupon>().eq(UserCoupon::getCouponId, couponId)
                .eq(UserCoupon::getAppUserId, userid).eq(UserCoupon::getDelFlag, 0));
        if(data.getMaxNum() <= count){
            return R.fail("当前优惠券已达到最大领取限制");
        }
        if (data.getSendType()!=1&& byId.getLavePoint().compareTo(data.getNeedPoint().intValue()) < 0){
           return  R.fail("当前积分不足,兑换失败");
        }
@@ -201,7 +206,7 @@
            appUserService.updateById(byId);
            
            UserPoint userPoint = new UserPoint();
            userPoint.setType(4);
            userPoint.setType(11);
            userPoint.setHistoricalPoint(lavePoint);
            userPoint.setVariablePoint(point);
            userPoint.setBalance(byId.getLavePoint());
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserPointController.java
@@ -173,5 +173,19 @@
        List<UserPoint> list = userPointService.list(queryWrapper);
        return R.ok(list);
    }
    /**
     * 判断当天是否分享获得过积分
     * @param appUserId
     * @return
     */
    @PostMapping("/judgmentDailyShare")
    public R<Boolean> judgmentDailyShare(@RequestParam("appUserId") Long appUserId){
        long count = userPointService.count(new LambdaQueryWrapper<UserPoint>().eq(UserPoint::getAppUserId, appUserId)
                .eq(UserPoint::getType, 4).last(" and DATE_FORMAT(NOW(), '%Y-%m-%d') = DATE_FORMAT(create_time, '%Y-%m-%d')"));
        return R.ok(count != 0);
    }
}
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserSignRecordController.java
@@ -1,6 +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.api.model.UserSignRecord;
@@ -61,6 +62,11 @@
    @ApiOperation(value = "签到", tags = {"小程序-签到"})
    public R<SignBackRDto> sign(){
        Long userId1 = tokenService.getLoginUserApplet().getUserid();
        UserSignRecord one = userSignRecordService.getOne(new LambdaQueryWrapper<UserSignRecord>().eq(UserSignRecord::getAppUserId, userId1)
                .eq(UserSignRecord::getDelFlag, 0).last(" and DATE_FORMAT(NOW(), '%Y-%m-%d') = DATE_FORMAT(create_time, '%Y-%m-%d')"));
        if(null != one){
            return R.fail("今天已经签过到了");
        }
        AppUser appUser = appUserService.getById(userId1);
        //获取当前用户的会员信息
        PointSetting pointSetting = pointSettingClient.getPointSetting(appUser.getVipId()).getData();
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WalletController.java
@@ -102,7 +102,7 @@
        List<BalanceChangeRecord> list = balanceChangeRecordService.list(new LambdaQueryWrapper<BalanceChangeRecord>()
                .eq(changeType != null, BalanceChangeRecord::getChangeType, changeType)
                .between(startTime != null, BalanceChangeRecord::getCreateTime, startTime, endTime)
                .eq(BalanceChangeRecord::getAppUserId, userId));
                .eq(BalanceChangeRecord::getAppUserId, userId).orderByDesc(BalanceChangeRecord::getCreateTime));
        List<Long> orderIds = list.stream().map(BalanceChangeRecord::getOrderId).collect(Collectors.toList());
        if (CollectionUtil.isNotEmpty(orderIds)){
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WithdrawalRequestsController.java
@@ -16,6 +16,7 @@
import com.ruoyi.account.util.payment.model.SinglePay;
import com.ruoyi.account.util.payment.model.SinglePayCallbackResult;
import com.ruoyi.account.util.payment.model.SinglePayResult;
import com.ruoyi.account.vo.WithdrawalAuth;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.web.domain.AjaxResult;
import io.swagger.annotations.Api;
@@ -78,13 +79,16 @@
    
    @PostMapping("/auth")
    @ApiOperation(value = "提现申请审批", tags = {"后台"})
    public R auth(@RequestParam("id") Long id,@ApiParam("2'审核通过',3'审核拒绝'") @RequestParam("auditStatus") Integer auditStatus){
        WithdrawalRequests withdrawal = withdrawalRequestsService.getById(id);
    public R auth(@RequestBody WithdrawalAuth withdrawalAuth){
        WithdrawalRequests withdrawal = withdrawalRequestsService.getById(withdrawalAuth.getId());
        BigDecimal withdrawalAmount = withdrawal.getWithdrawalAmount();
        if(withdrawal.getAuditStatus() != 1){
            return R.fail("不能重复审核");
        }
        Integer auditStatus = withdrawalAuth.getAuditStatus();
        if (auditStatus==2){
            //执行转账操作
            if(withdrawal.getWithdrawalMethod() == 2){
            //先检查账户余额是否充足
            AccountBalanceQueryResult accountBalanceQueryResult = TransferUtil.accountBalanceQuery();
            if(null == accountBalanceQueryResult){
@@ -94,11 +98,9 @@
            if(useAbleSettAmount < withdrawal.getArrivalAmount().doubleValue()){
                return R.fail("账户可用余额不足,请先补充账户余额");
            }
            //执行转账操作
            if(withdrawal.getWithdrawalMethod() == 2){
                //银行卡转账
                SinglePay singlePay = new SinglePay();
                singlePay.setTradeMerchantNo("");
                singlePay.setTradeMerchantNo(TransferUtil.sysTradeMerchantNo);
                singlePay.setMerchantOrderNo(withdrawal.getId().toString());
                singlePay.setReceiverAccountNoEnc(withdrawal.getBankCardNumber());
                singlePay.setReceiverNameEnc(withdrawal.getAccountHolder());
@@ -114,6 +116,7 @@
                withdrawal.setStatus(1);
            }else{
                //微信转账
                return R.fail("微信转账开发中");
            }
        }
        if(3 == auditStatus){
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/AppUserService.java
@@ -84,6 +84,8 @@
    void onlineRecord();
    IPage<AppUser> getAppuserPage(Integer pageNum, Integer pageSize, AppUser appUser, Integer shopId, Set<Long> userId);
    IPage<AppUser> getAppuserPage1(Integer pageNum, Integer pageSize, AppUser appUser,Integer objectId,List<Long> userIds);
    
    /**
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/UserPointServiceImpl.java
@@ -123,7 +123,7 @@
        if (vipSetting == null) {
            return R.fail("VIP 设置未找到");
        }
        if (vipSetting.getId() == 0 && vipSetting.getVipGiftRole() == 0) {
        if (vipSetting.getVipGiftRole() == 0) {
            return R.fail("转赠积分权限未开启");
        }
@@ -131,27 +131,29 @@
        if (appUser == null) {
            return R.fail("用户未找到");
        }
        PointSetting pointSetting = pointSettingService.getPointSettingByAppUserId(userid);
        if (pointSetting == null) {
            return R.fail("积分设置未找到");
        }
        // 可转赠积分总数
        Integer transferablePoint = appUser.getTransferablePoint();
        if (point > transferablePoint) {
            return R.fail("转赠积分不足");
            return R.fail("可转赠积分不足");
        }
        AppUser appUserForPhoe = appUserService.getOne(new LambdaQueryWrapper<AppUser>()
                .eq(AppUser::getPhone, phone));
                .eq(AppUser::getPhone, phone).eq(AppUser::getDelFlag, 0).ne(AppUser::getStatus, 3));
        if (appUserForPhoe == null) {
            return R.fail("目标用户未找到");
            return R.fail("目标用户不存在");
        }
        if(appUserForPhoe.getStatus() == 2){
            return R.fail("目标用户已被冻结");
        }
        if(appUserForPhoe.getId().equals(userid)){
            return R.fail("不能转增给自己");
        }
        Integer lavePoint1 = appUserForPhoe.getLavePoint();
        appUserForPhoe.setLavePoint(appUserForPhoe.getLavePoint() + point);
        appUserForPhoe.setTotalPoint(appUserForPhoe.getTotalPoint() + point);
        appUserForPhoe.setTransferablePoint(transferablePoint + point);
        appUserForPhoe.setAvailablePoint(appUserForPhoe.getAvailablePoint() + point);
        appUserForPhoe.setTotalAvailablePoint(appUserForPhoe.getTotalAvailablePoint() + point);
        appUserService.updateById(appUserForPhoe);
        //构建积分流水记录
        UserPoint userPoint = new UserPoint();
@@ -164,9 +166,7 @@
        userPointService.save(userPoint);
        Integer lavePoint = appUser.getLavePoint();
        appUser.setLavePoint(lavePoint - point);
        Integer totalPoint = appUser.getTotalPoint();
        appUser.setTotalPoint(totalPoint - point);
        appUser.setLavePoint(appUser.getLavePoint() - point);
        appUser.setTransferablePoint(appUser.getTransferablePoint() - point);
        appUser.setAvailablePoint(appUser.getAvailablePoint() - point);
        appUserService.updateById(appUser);
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/payment/TransferUtil.java
@@ -31,6 +31,10 @@
     * 商户号
     */
    private static final String merchantNo = "888122600004175";
    /**
     * 平台-报备商户号
     */
    public static final String sysTradeMerchantNo = "777168500885852";
    
    private static final String format = "yyyy-MM-dd HH:mm:ss";
    /**
@@ -90,7 +94,7 @@
         */
        body.put("paidUse", singlePay.getPaidUse());
        //商户通知地址
        body.put("callbackUrl", singlePay.getCallbackUrl());
        body.put("callbackUrl", callbackUrl + singlePay.getCallbackUrl());
        String sign = null;
        try {
            sign = sign(body);
@@ -211,13 +215,13 @@
    
    
    
    public static String sign(JSONObject body) throws Exception{
    public static String sign(JSONObject body) {
        Set<Map.Entry<String, Object>> entries = body.entrySet();
        List<Map.Entry<String, Object>> infoIds = new ArrayList<Map.Entry<String, Object>>(entries);
        // 对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序)
        Collections.sort(infoIds, new Comparator<Map.Entry<String, Object>>() {
            public int compare(Map.Entry<String, Object> o1, Map.Entry<String, Object> o2) {
                return (o1.getKey()).toString().compareTo(o2.getKey());
                return (o1.getKey()).compareTo(o2.getKey());
            }
        });
        // 构造签名键值对的格式
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/WithdrawalAuth.java
New file
@@ -0,0 +1,19 @@
package com.ruoyi.account.vo;
import lombok.Data;
/**
 * @author zhibing.pu
 * @date 2025/1/11 9:23
 */
@Data
public class WithdrawalAuth {
    /**
     * 申请id
     */
    private Long id;
    /**
     * 审核状态
     */
    private Integer auditStatus;
}
ruoyi-service/ruoyi-account/src/main/resources/mapper/account/AppUserMapper.xml
@@ -45,7 +45,7 @@
                    point(#{nearbyReferrer.longitude},#{nearbyReferrer.latitude}),
                    point(longitude, latitude)
                ) as distance
            from t_app_user where city_code = #{cityCode} and del_flag = 0 and status = 1
            from t_app_user where city_code = #{cityCode} and del_flag = 0 and status = 1 and vip_id >= 4
            <if test="null != nearbyReferrer.name and '' != nearbyReferrer.name">
                and `name` like CONCAT('%', #{nearbyReferrer.name}, '%')
            </if>
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java
@@ -22,10 +22,7 @@
import com.ruoyi.order.model.OrderBalancePayment;
import com.ruoyi.order.model.OrderGood;
import com.ruoyi.order.model.RefundPass;
import com.ruoyi.order.service.CommissionService;
import com.ruoyi.order.service.OrderBalancePaymentService;
import com.ruoyi.order.service.OrderService;
import com.ruoyi.order.service.RefundPassService;
import com.ruoyi.order.service.*;
import com.ruoyi.order.util.ExpressDeliveryUtil;
import com.ruoyi.order.util.payment.PaymentUtil;
import com.ruoyi.order.util.payment.model.RefundCallbackResult;
@@ -102,6 +99,9 @@
    private TechnicianSubscribeClient technicianSubscribeClient;
    @Resource
    private ShopBalanceStatementClient shopBalanceStatementClient;
    @Resource
    private OrderGoodService orderGoodService;
    
    
@@ -484,7 +484,6 @@
            userPoint.setObjectId(order.getId());
            userPointClient.saveUserPoint(userPoint);
            appUserClient.editAppUserById(appUser);
        }
        if(3 == payMethod){
            //开始运费退款,积分支付,运费是单独进行支付的,所以需要单独退款
@@ -655,9 +654,6 @@
        userPoint.setAppUserId(order.getAppUserId());
        userPoint.setObjectId(order.getId());
        userPointClient.saveUserPoint(userPoint);
        order.setRefundStatus(2);
        order.setRefundTime(LocalDateTime.now());
        return R.ok();
    }
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ShoppingCartServiceImpl.java
@@ -485,19 +485,24 @@
        //满XX才打折,只有现金才能优惠
        if((confirmOrderVo.getUseSimultaneously() || (!confirmOrderVo.getUseSimultaneously() && activityAmount.equals(BigDecimal.ZERO)))
                && null != orderActivityInfo && confirmOrder.getPaymentType() == 1){
            BigDecimal zyh = BigDecimal.ZERO;
            OrderActivityInfo activityInfo1 = null;
            for (OrderActivityInfo activityInfo : orderActivityInfo) {
                if(activityInfo.getConditionAmount().compareTo(paymentMoney) <= 0){
                    confirmOrderVo.setActivityName(activityInfo.getActivityName());
                    //优惠后的支付金额
                    BigDecimal multiply = activityInfo.getDiscount().divide(new BigDecimal(10)).multiply(paymentMoney);
                    //优惠金额
                    BigDecimal bigDecimal = paymentMoney.subtract(multiply).setScale(2, RoundingMode.HALF_EVEN);
                    paymentMoney = multiply;
                    activityAmount = activityAmount.add(bigDecimal);
                    break;
                    if(bigDecimal.compareTo(zyh) > 0){
                        zyh = bigDecimal;
                        activityInfo1 = activityInfo;
                    }
                }
            }
            confirmOrderVo.setActivityName(activityInfo1.getActivityName());
            paymentMoney = paymentMoney.subtract(zyh);
            activityAmount = activityAmount.add(zyh);
        }
        confirmOrderVo.setDiscountAmount(activityAmount);
        int earnPoint = goodsList.stream().mapToInt(MyShoppingCartVo::getEarnSpendingPoints).sum();
@@ -761,9 +766,6 @@
            for (MyShoppingCartVo myShoppingCartVo : goodsList) {
                orderPoint += (myShoppingCartVo.getPoint() * myShoppingCartVo.getNumber());
            }
            if(appUser.getLavePoint().intValue() < orderPoint){
                return R.fail("账户剩余积分不足");
            }
        }
        //现金的支付金额
        BigDecimal paymentMoney = orderMoney;
@@ -856,17 +858,22 @@
        OrderActivityInfo orderActivityInfo1 = null;
        if((1 == status || null == shoppingCartPayment.getUserCouponId()) &&
                null != orderActivityInfo && shoppingCartPayment.getPaymentType() != 3){
            //找出最优会的金额
            BigDecimal zyh = BigDecimal.ZERO;
            for (OrderActivityInfo activityInfo : orderActivityInfo) {
                if(activityInfo.getConditionAmount().compareTo(paymentMoney) <= 0){
                    BigDecimal paymentMoney1 = activityInfo.getDiscount().divide(new BigDecimal(10)).multiply(paymentMoney);
                    BigDecimal bigDecimal = paymentMoney.subtract(paymentMoney1).setScale(2, RoundingMode.HALF_EVEN);
                    discount = activityInfo.getDiscount();
                    paymentMoney = paymentMoney1;
                    activityAmount = activityAmount.add(bigDecimal);
                    if(bigDecimal.compareTo(zyh) > 0){
                        zyh = bigDecimal;
                    orderActivityInfo1 = activityInfo;
                    break;
                }
            }
            }
            discount = orderActivityInfo1.getDiscount();
            paymentMoney = paymentMoney.subtract(zyh);
            activityAmount = activityAmount.add(zyh);
        }
        //可获得的消费积分
@@ -932,7 +939,7 @@
        if(3 != shoppingCartPayment.getPaymentType() && (fullReductionAmount.compareTo(BigDecimal.ZERO) > 0 ||moneyAmount.compareTo(BigDecimal.ZERO) > 0 || discountAmount.compareTo(BigDecimal.ZERO) > 0)){
            order.setCouponJson(JSON.toJSONString(couponInfoVo));
        }
        if(activityAmount.compareTo(BigDecimal.ZERO) > 0){
        if(null != orderActivityInfo1){
            order.setActivityJson(JSON.toJSONString(orderActivityInfo1));
        }
        if(null != shoppingCartPayment.getUserAddressId()){
@@ -956,7 +963,7 @@
        if(3 == shoppingCartPayment.getPaymentType()){
            Integer availablePoint = appUser.getAvailablePoint();
            if(availablePoint < orderPoint){
                return R.fail("账户积分不足");
                return R.fail("账户可用积分不足");
            }
        }
        //判断运费支付是否足够
@@ -1043,27 +1050,28 @@
            BigDecimal totalDistributionAmount = appUser.getTotalDistributionAmount();
            BigDecimal balance = appUser.getBalance();
            //红包金额满足支付
            if(paymentMoney.compareTo(totalRedPacketAmount) <= 0){
                totalRedPacketAmount = totalRedPacketAmount.subtract(paymentMoney);
                balance = balance.subtract(paymentMoney);
            BigDecimal paymentMoney1 = paymentMoney;
            if(paymentMoney1.compareTo(totalRedPacketAmount) <= 0){
                totalRedPacketAmount = totalRedPacketAmount.subtract(paymentMoney1);
                balance = balance.subtract(paymentMoney1);
                appUser.setTotalRedPacketAmount(totalRedPacketAmount);
                appUser.setBalance(balance);
                redPacketAmount = paymentMoney;
                redPacketAmount = paymentMoney1;
            }else{
                paymentMoney = paymentMoney.subtract(totalRedPacketAmount);
                paymentMoney1 = paymentMoney1.subtract(totalRedPacketAmount);
                redPacketAmount = totalRedPacketAmount;
                totalRedPacketAmount = BigDecimal.ZERO;
                if(paymentMoney.compareTo(totalDistributionAmount) <= 0){
                    totalDistributionAmount = totalDistributionAmount.subtract(paymentMoney);
                    balance = balance.subtract(paymentMoney);
                if(paymentMoney1.compareTo(totalDistributionAmount) <= 0){
                    totalDistributionAmount = totalDistributionAmount.subtract(paymentMoney1);
                    balance = balance.subtract(paymentMoney1);
                    appUser.setTotalRedPacketAmount(totalRedPacketAmount);
                    appUser.setTotalDistributionAmount(totalDistributionAmount);
                    appUser.setBalance(balance);
                    distributionAmount = paymentMoney;
                    distributionAmount = paymentMoney1;
                }else{
                    paymentMoney = paymentMoney.subtract(totalDistributionAmount);
                    paymentMoney1 = paymentMoney1.subtract(totalDistributionAmount);
                    totalDistributionAmount = BigDecimal.ZERO;
                    balance = balance.subtract(paymentMoney);
                    balance = balance.subtract(paymentMoney1);
                    appUser.setTotalRedPacketAmount(totalRedPacketAmount);
                    appUser.setTotalDistributionAmount(totalDistributionAmount);
                    appUser.setBalance(balance);
@@ -1189,27 +1197,28 @@
                    BigDecimal totalRedPacketAmount = appUser.getTotalRedPacketAmount();
                    BigDecimal totalDistributionAmount = appUser.getTotalDistributionAmount();
                    BigDecimal balance = appUser.getBalance();
                    if(expressFee.compareTo(totalRedPacketAmount) <= 0){
                        totalRedPacketAmount = totalRedPacketAmount.subtract(expressFee);
                        balance = balance.subtract(expressFee);
                    BigDecimal expressFee1 = expressFee;
                    if(expressFee1.compareTo(totalRedPacketAmount) <= 0){
                        totalRedPacketAmount = totalRedPacketAmount.subtract(expressFee1);
                        balance = balance.subtract(expressFee1);
                        appUser.setTotalRedPacketAmount(totalRedPacketAmount);
                        appUser.setBalance(balance);
                        redPacketAmount = expressFee;
                        redPacketAmount = expressFee1;
                    }else{
                        expressFee = expressFee.subtract(totalRedPacketAmount);
                        expressFee1 = expressFee1.subtract(totalRedPacketAmount);
                        redPacketAmount = totalRedPacketAmount;
                        totalRedPacketAmount = BigDecimal.ZERO;
                        if(expressFee.compareTo(totalDistributionAmount) <= 0){
                            totalDistributionAmount = totalDistributionAmount.subtract(expressFee);
                            balance = balance.subtract(expressFee);
                        if(expressFee1.compareTo(totalDistributionAmount) <= 0){
                            totalDistributionAmount = totalDistributionAmount.subtract(expressFee1);
                            balance = balance.subtract(expressFee1);
                            appUser.setTotalRedPacketAmount(totalRedPacketAmount);
                            appUser.setTotalDistributionAmount(totalDistributionAmount);
                            appUser.setBalance(balance);
                            distributionAmount = expressFee;
                            distributionAmount = expressFee1;
                        }else{
                            expressFee = expressFee.subtract(totalDistributionAmount);
                            expressFee1 = expressFee1.subtract(totalDistributionAmount);
                            totalDistributionAmount = BigDecimal.ZERO;
                            balance = balance.subtract(expressFee);
                            balance = balance.subtract(expressFee1);
                            appUser.setTotalRedPacketAmount(totalRedPacketAmount);
                            appUser.setTotalDistributionAmount(totalDistributionAmount);
                            appUser.setBalance(balance);
@@ -1223,8 +1232,8 @@
                    balanceChangeRecord.setAppUserId(appUser.getId());
                    balanceChangeRecord.setOrderId(order.getId());
                    balanceChangeRecord.setChangeType(5);
                    balanceChangeRecord.setBeforeAmount(balance.add(paymentMoney));
                    balanceChangeRecord.setChangeAmount(paymentMoney);
                    balanceChangeRecord.setBeforeAmount(balance.add(expressFee));
                    balanceChangeRecord.setChangeAmount(expressFee);
                    balanceChangeRecord.setAfterAmount(balance);
                    balanceChangeRecord.setDelFlag(0);
                    balanceChangeRecord.setCreateTime(LocalDateTime.now());
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/BannerController.java
@@ -2,10 +2,20 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.account.api.feignClient.AppUserClient;
import com.ruoyi.account.api.model.AppUser;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.ServletUtils;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.security.service.TokenService;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.other.api.domain.Banner;
import com.ruoyi.other.api.domain.Goods;
import com.ruoyi.other.api.domain.SeckillActivityInfo;
import com.ruoyi.other.service.BannerService;
import com.ruoyi.other.service.GoodsService;
import com.ruoyi.other.service.GoodsVipService;
import com.ruoyi.other.service.SeckillActivityInfoService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
@@ -28,6 +38,19 @@
public class BannerController {
    @Resource
    private BannerService bannerService;
    @Resource
    private GoodsService goodsService;
    @Resource
    private GoodsVipService goodsVipService;
    @Resource
    private SeckillActivityInfoService seckillActivityInfoService;
    @Resource
    private TokenService tokenService;
    @Resource
    private AppUserClient appUserClient;
    @GetMapping("/list")
    @ApiOperation(value = "banner列表", tags = {"小程序-banner"})
    public R<List<Banner>> list(@ApiParam("名称") String name,
@@ -37,6 +60,36 @@
                .eq(jumpType!=null,Banner::getJumpType, jumpType)
                .eq(position!=null,Banner::getPosition, position)
                .list();
        Integer vipId = 0;
        String token = SecurityUtils.getToken(ServletUtils.getRequest());
        if(StringUtils.isNotEmpty(token)){
            Long userid = tokenService.getLoginUserApplet().getUserid();
            AppUser appUser = appUserClient.getAppUserById(userid);
            vipId = appUser.getVipId();
        }
        for (Banner banner : list) {
            Integer jumpType1 = banner.getJumpType();
            //商品详情
            if(null != jumpType1 && 3 == jumpType1){
                Goods goods = goodsService.getById(banner.getContent());
                if(null == goods || goods.getDelFlag() == 1){
                    banner.setJumpType(1);
                }
                if(!goods.getCommodityAuthority().contains("-1") && !goods.getCommodityAuthority().contains(vipId.toString())){
                    banner.setJumpType(1);
                }
            }
            //秒杀活动
            if(null != jumpType1 && 4 == jumpType1){
                SeckillActivityInfo activityInfo = seckillActivityInfoService.getById(banner.getContent());
                if(null == activityInfo || activityInfo.getDelFlag() == 1){
                    banner.setJumpType(1);
                }
                if(!activityInfo.getVipIds().contains(vipId.toString())){
                    banner.setJumpType(1);
                }
            }
        }
        return R.ok(list);
    }
    @PostMapping("/add")
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/CouponInfoController.java
@@ -159,19 +159,25 @@
        //查出指定人员可领取优惠券
        List<CouponInfo> list1 = couponInfoService.lambdaQuery().le(CouponInfo::getSendStartTime, now).ge(CouponInfo::getSendEndTime, now).eq(CouponInfo::getPersonType, 2).apply("FIND_IN_SET('" + appUserById.getId() + "', person_ids)").list();
        //查出指定会员可领取优惠劵
        List<CouponInfo> list2 = couponInfoService.lambdaQuery().le(CouponInfo::getSendStartTime, now).ge(CouponInfo::getSendEndTime, now).eq(CouponInfo::getPersonType, 3).apply("FIND_IN_SET('" + appUserById.getVipId() + "', person_ids)").list();
        List<CouponInfo> list2 = couponInfoService.lambdaQuery().le(CouponInfo::getSendStartTime, now).ge(CouponInfo::getSendEndTime, now).eq(CouponInfo::getPersonType, 3).apply("FIND_IN_SET('" + appUserById.getVipId() + "', vip_ids)").list();
        List<CouponInfo> returnList = new ArrayList<>();
        count(userid, list, returnList);
        count(userid, list1, returnList);
        count(userid, list2, returnList);
        return R.ok(returnList);
    }
    private void count(Long userid, List<CouponInfo> list1, List<CouponInfo> returnList) {
        for (CouponInfo couponInfo : list1) {
            Long count = appUserClient.getCouponCount(userid, couponInfo.getId()).getData();
            Long count = appUserClient.getCouponCount(-1L, couponInfo.getId()).getData();
            if(couponInfo.getSendNum() <= count){
                couponInfo.setMaxNum(count.intValue() - couponInfo.getSendNum());
                for (int i = 0; i < couponInfo.getMaxNum(); i++) {
                    returnList.add(couponInfo);
                }
                continue;
            }
            count = appUserClient.getCouponCount(userid, couponInfo.getId()).getData();
            couponInfo.setMaxNum(couponInfo.getMaxNum() - count.intValue());
            for (int i = 0; i < couponInfo.getMaxNum(); i++) {
                returnList.add(couponInfo);
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/GoodsController.java
@@ -198,5 +198,16 @@
        return R.ok(goods);
    }
    /**
     * 编辑商品
     * @param goods
     * @return
     */
    @PostMapping("/editGoodsList")
    public R editGoodsList(@RequestBody List<Goods> goods){
        goodsService.updateBatchById(goods);
        return R.ok();
    }
}
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShareController.java
@@ -4,16 +4,22 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.account.api.feignClient.AppUserClient;
import com.ruoyi.account.api.feignClient.UserPointClient;
import com.ruoyi.account.api.model.AppUser;
import com.ruoyi.account.api.model.UserPoint;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.ServletUtils;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.security.service.TokenService;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.other.api.domain.PointSetting;
import com.ruoyi.other.api.domain.Share;
import com.ruoyi.other.api.domain.Shop;
import com.ruoyi.other.api.feignClient.ShopClient;
import com.ruoyi.other.enums.ShareAddType;
import com.ruoyi.other.enums.ShareAuditStatus;
import com.ruoyi.other.service.PointSettingService;
import com.ruoyi.other.service.ShareService;
import com.ruoyi.system.api.domain.SysUser;
import com.ruoyi.system.api.feignClient.SysUserClient;
@@ -22,6 +28,7 @@
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.List;
/**
@@ -46,6 +53,10 @@
    private ShopClient shopClient;
    @Resource
    private SysUserClient sysUserClient;
    @Resource
    private UserPointClient userPointClient;
    @Resource
    private PointSettingService pointSettingService;
    
    
@@ -235,6 +246,38 @@
    @GetMapping("/auth/getAppletShare")
    public R<Share> getAppletShare(){
        Share one = shareService.getOne(new LambdaQueryWrapper<Share>().eq(Share::getDelFlag, 0).eq(Share::getAppletShare, 1).eq(Share::getAuditStatus, 1).last(" limit 0, 1"));
        //添加每日分享积分
        String token = SecurityUtils.getToken(ServletUtils.getRequest());
        if(StringUtils.isNotEmpty(token)){
            Long userid = tokenService.getLoginUserApplet().getUserid();
            Boolean data = userPointClient.judgmentDailyShare(userid).getData();
            if(!data){
                AppUser appUser = appUserClient.getAppUserById(userid);
                PointSetting pointSetting = pointSettingService.getOne(new LambdaQueryWrapper<PointSetting>().eq(PointSetting::getId, appUser.getVipId()).eq(PointSetting::getDelFlag, 0));
                if(null != pointSetting){
                    Integer everySharePoint = pointSetting.getEverySharePoint();
                    Integer lavePoint = appUser.getLavePoint();
                    appUser.setTotalSharePoint(appUser.getTotalSharePoint() + everySharePoint);
                    appUser.setLavePoint(appUser.getLavePoint() + everySharePoint);
                    appUser.setAvailablePoint(appUser.getAvailablePoint() + everySharePoint);
                    appUser.setTransferablePoint(appUser.getTransferablePoint() + everySharePoint);
                    appUser.setTotalAvailablePoint(appUser.getTotalAvailablePoint() + everySharePoint);
                    appUser.setTotalPoint(appUser.getTotalPoint() + everySharePoint);
                    appUserClient.editAppUserById(appUser);
                    //添加积分流水
                    UserPoint userPoint = new UserPoint();
                    userPoint.setAppUserId(userid);
                    userPoint.setType(4);
                    userPoint.setHistoricalPoint(lavePoint);
                    userPoint.setVariablePoint(everySharePoint);
                    userPoint.setBalance(appUser.getLavePoint());
                    userPoint.setCreateTime(LocalDateTime.now());
                    userPoint.setAppUserId(appUser.getId());
                    userPointClient.saveUserPoint(userPoint);
                }
            }
        }
        return R.ok(one);
    }
    
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopController.java
@@ -503,8 +503,13 @@
        return R.ok(list);
    }
    @GetMapping("/getShopIdByName")
    R<Set<Integer>> getShopIdByName(@RequestParam String shopName){
    /**
     * 根据名称查询门店id
     * @param shopName
     * @return
     */
    @PostMapping("/getShopIdByName")
    public R<Set<Integer>> getShopIdByName(@RequestParam("shopName") String shopName){
        List<Shop> list = shopService.list(new LambdaQueryWrapper<Shop>()
                .like(Shop::getName, shopName));
        return R.ok(list.stream().map(Shop::getId).collect(Collectors.toSet()));
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopWithdrawController.java
@@ -184,7 +184,7 @@
            }
            //银行卡转账
            SinglePay singlePay = new SinglePay();
            singlePay.setTradeMerchantNo("");
            singlePay.setTradeMerchantNo(TransferUtil.sysTradeMerchantNo);
            singlePay.setMerchantOrderNo(shopWithdraw1.getId().toString());
            singlePay.setReceiverAccountNoEnc(shop.getReceiverAccountNoEnc());
            singlePay.setReceiverNameEnc(shop.getReceiverNameEnc());
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/GoodsMapper.java
@@ -26,10 +26,9 @@
    /**
     * 获取商品列表
     * @param pageInfo
     * @param goodsCategoryId
     * @param name
     * @return
     */
    List<GoodsVO> goodsList(PageInfo<GoodsVO> pageInfo, @Param("goodsCategoryId") Integer goodsCategoryId, @Param("name") String name, @Param("vip") Integer vip);
    List<GoodsVO> goodsList(@Param("goodsCategoryId") Integer goodsCategoryId, @Param("name") String name, @Param("vip") Integer vip);
}
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/GoodsEvaluateServiceImpl.java
@@ -16,6 +16,7 @@
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.List;
/**
@@ -45,6 +46,7 @@
            }else {
                LoginUser loginUserApplet = tokenService.getLoginUserApplet();
                goodsEvaluate.setAppUserId(loginUserApplet.getUserid());
                goodsEvaluate.setCreateTime(LocalDateTime.now());
                save(goodsEvaluate);
            }
        }
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/GoodsServiceImpl.java
@@ -1,5 +1,6 @@
package com.ruoyi.other.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@@ -91,7 +92,6 @@
    @Override
    public PageInfo<GoodsVO> goodsList(Goods search) {
        PageInfo<GoodsVO> pageInfo = new PageInfo(search.getPageCurr(), search.getPageSize());
        Integer vipId = 0;
        String provinceCode = null;
        String cityCode = null;
@@ -105,7 +105,7 @@
            cityCode = appUser.getCityCode();
            districtCode = appUser.getDistrictCode();
        }
        List<GoodsVO> list = this.baseMapper.goodsList(pageInfo, search.getGoodsCategoryId(), search.getName(), vipId);
        List<GoodsVO> list = this.baseMapper.goodsList(search.getGoodsCategoryId(), search.getName(), vipId);
        for (GoodsVO goods : list) {
            Price price = getPrice(vipId, goods.getGoodsId(), null, 1, provinceCode, cityCode, districtCode);
            if(null != price){
@@ -116,6 +116,66 @@
            }
            Integer data = orderClient.getGoodsSaleNum(goods.getGoodsId(), 1).getData();
            goods.setSaleNum(data);
        }
        //手动排序
        if(StringUtils.isNotEmpty(search.getOrderByColumn())){
            if("selling_price".equals(search.getOrderByColumn())){
                list.sort(new Comparator<GoodsVO>() {
                    @Override
                    public int compare(GoodsVO o1, GoodsVO o2) {
                        if(null != o1.getSellingPrice() && null != o2.getSellingPrice()){
                            return o1.getSellingPrice().compareTo(o2.getSellingPrice()) * (StringUtils.isNotEmpty(search.getIsAsc()) ? -1 : 1);
                        }
                        if(null == o1.getSellingPrice() && null != o2.getSellingPrice()){
                            return BigDecimal.ZERO.compareTo(o2.getSellingPrice()) * (StringUtils.isNotEmpty(search.getIsAsc()) ? -1 : 1);
                        }
                        if(null != o1.getSellingPrice() && null == o2.getSellingPrice()){
                            return o1.getSellingPrice().compareTo(BigDecimal.ZERO) * (StringUtils.isNotEmpty(search.getIsAsc()) ? -1 : 1);
                        }
                        return 0;
                    }
                });
            }
            if("integral".equals(search.getOrderByColumn())){
                list.sort(new Comparator<GoodsVO>() {
                    @Override
                    public int compare(GoodsVO o1, GoodsVO o2) {
                        if(null != o1.getIntegral() && null != o2.getIntegral()){
                            return o1.getIntegral().compareTo(o2.getIntegral()) * (StringUtils.isNotEmpty(search.getIsAsc()) ? -1 : 1);
                        }
                        if(null == o1.getIntegral() && null != o2.getIntegral()){
                            return Integer.valueOf(0).compareTo(o2.getIntegral()) * (StringUtils.isNotEmpty(search.getIsAsc()) ? -1 : 1);
                        }
                        if(null != o1.getIntegral() && null == o2.getIntegral()){
                            return o1.getIntegral().compareTo(Integer.valueOf(0)) * (StringUtils.isNotEmpty(search.getIsAsc()) ? -1 : 1);
                        }
                        return 0;
                    }
                });
            }
            if("sale_num".equals(search.getOrderByColumn())){
                list.sort(new Comparator<GoodsVO>() {
                    @Override
                    public int compare(GoodsVO o1, GoodsVO o2) {
                        return o1.getSaleNum().compareTo(o2.getSaleNum()) * (StringUtils.isNotEmpty(search.getIsAsc()) ? -1 : 1);
                    }
                });
            }
        }
        //手动处理分页
        PageInfo<GoodsVO> pageInfo = new PageInfo<>();
        pageInfo.setSize(search.getPageSize());
        pageInfo.setTotal(list.size());
        Integer pageSize = search.getPageSize();
        Integer pageNum = (search.getPageCurr() - 1) * pageSize;
        if(list.size() >= (pageNum + 1) * pageSize){
            list = list.subList(pageNum, pageNum + pageSize);
        }else if(pageNum < list.size() && list.size() < (pageNum + 1) * pageSize){
            list = list.subList(pageNum, list.size());
        }else{
            list = new ArrayList<>();
        }
        return pageInfo.setRecords(list);
    }
@@ -141,6 +201,15 @@
        }
        Goods goods = this.getById(goodsId);
        if(null == goods || goods.getDelFlag() == 1){
            throw new RuntimeException("商品不存在");
        }
        if(goods.getStatus() == 1){
            throw new RuntimeException("商品已被下架");
        }
        if(!goods.getCommodityAuthority().contains("-1") && !goods.getCommodityAuthority().contains(vipId.toString())){
            throw new RuntimeException("权限不足");
        }
        GoodsVO goodsVO = new GoodsVO();
        BeanUtils.copyBeanProp(goodsVO, goods);
        goodsVO.setGoodsId(goods.getId());
@@ -265,7 +334,10 @@
    @Override
    public void updateManageGoods(Goods goods) {
        goodsMapper.updateById(goods);
        this.updateById(goods);
        //修改个别字段
        this.update(new LambdaUpdateWrapper<Goods>().eq(Goods::getId, goods.getId()).set(Goods::getSellingPrice, goods.getSellingPrice())
                .set(Goods::getIntegral, goods.getIntegral()));
        // 指定门店
        List<GoodsShop> goodsShopList = goods.getGoodsShopList();
        saveGoodsShopList(goodsShopList, goods.getId());
@@ -283,6 +355,10 @@
        saveGoodsAreaList(goodsAreaList, goods.getId());
    }
    private void saveGoodsAreaList(List<GoodsArea> goodsAreaList, Integer id) {
        goodsAreaService.remove(new LambdaQueryWrapper<GoodsArea>()
                .eq(GoodsArea::getGoodsId, id));
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/SeckillActivityInfoServiceImpl.java
@@ -90,6 +90,16 @@
            AppUser appUser = appUserClient.getAppUserById(userid);
            vipId = appUser.getVipId();
        }
        SeckillActivityInfo activityInfo = this.getById(seckillActivityId);
        if(null == activityInfo || activityInfo.getDelFlag() == 1){
            throw new RuntimeException("活动不存在");
        }
        if(activityInfo.getIsShelves() == 0){
            throw new RuntimeException("活动已下架");
        }
        if(!activityInfo.getVipIds().contains(vipId.toString())){
            throw new RuntimeException("权限不足");
        }
        SeckillActivityDetailVO seckillActivityDetailVO = seckillActivityInfoMapper.selectDetail(seckillActivityId, vipId);
        Integer goodsId = seckillActivityDetailVO.getGoodsId();
@@ -127,6 +137,12 @@
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void saveSeckillActivityInfo(SeckillActivityInfo seckillActivityInfo) {
        Integer goodId = seckillActivityInfo.getGoodId();
        long count = this.count(new LambdaQueryWrapper<SeckillActivityInfo>().eq(SeckillActivityInfo::getGoodId, goodId).eq(SeckillActivityInfo::getDelFlag, 0)
                .eq(SeckillActivityInfo::getIsShelves, 1).last(" and now() between start_time and end_time"));
        if(0 < count){
            throw new RuntimeException("该秒杀商品已在其他秒杀活动中存在");
        }
        this.baseMapper.insert(seckillActivityInfo);
        List<GoodsSeckill> goodsSeckills = seckillActivityInfo.getGoodsSeckills();
        for (GoodsSeckill goodsSeckill : goodsSeckills) {
@@ -140,6 +156,12 @@
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void updateSeckillActivityInfo(SeckillActivityInfo seckillActivityInfo) {
        Integer goodId = seckillActivityInfo.getGoodId();
        long count = this.count(new LambdaQueryWrapper<SeckillActivityInfo>().eq(SeckillActivityInfo::getGoodId, goodId).eq(SeckillActivityInfo::getDelFlag, 0)
                .eq(SeckillActivityInfo::getIsShelves, 1).last(" and now() between start_time and end_time"));
        if(1 < count){
            throw new RuntimeException("该秒杀商品已在其他秒杀活动中存在");
        }
        this.baseMapper.updateById(seckillActivityInfo);
        goodsSeckillService.remove(new LambdaQueryWrapper<GoodsSeckill>().eq(GoodsSeckill::getSeckillActivityInfoId, seckillActivityInfo.getId()));
        List<GoodsSeckill> goodsSeckills = seckillActivityInfo.getGoodsSeckills();
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/ShopServiceImpl.java
@@ -73,7 +73,7 @@
        List<NearbyShopVO> nearbyShopVOS = shopMapper.selectNearbyShopList();
        for (NearbyShopVO nearbyShopVO : nearbyShopVOS) {
            Double wgs84 = GeodesyUtil.getDistance(nearbyShopVO.getLongitude() + "," + nearbyShopVO.getLatitude(), longitude + "," + latitude).get("WGS84");
            nearbyShopVO.setDistance(wgs84);
            nearbyShopVO.setDistance(new BigDecimal(wgs84).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
        }
        nearbyShopVOS.sort(new Comparator<NearbyShopVO>() {
            @Override
@@ -100,7 +100,7 @@
                vo.setAddress(shop.getAddress());
                vo.setHomePicture(shop.getHomePicture());
                Double wgs84 = GeodesyUtil.getDistance(longitude.toString() + "," + latitude.toString(), shop.getLongitude() + "," + shop.getLatitude()).get("WGS84");
                vo.setDistance(wgs84);
                vo.setDistance(new BigDecimal(wgs84).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
                nearbyShopVOS.add(0, vo);
            }
        }
@@ -117,6 +117,7 @@
        Map<Long, List<ShopScore>> shopScoreMap = shopScores.stream().collect(Collectors.groupingBy(ShopScore::getShopId));
        AppUser finalAppUser1 = appUser;
        nearbyShopVOS.forEach(nearbyShopVO -> {
            nearbyShopVO.setScore("5");
            List<ShopScore> scores = shopScoreMap.get(nearbyShopVO.getId());
            if (scores != null && !scores.isEmpty()){
                BigDecimal score = scores.stream()
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/util/payment/TransferUtil.java
@@ -31,8 +31,16 @@
     * 商户号
     */
    private static final String merchantNo = "888122600004175";
    /**
     * 平台-报备商户号
     */
    public static final String sysTradeMerchantNo = "777168500885852";
    
    private static final String format = "yyyy-MM-dd HH:mm:ss";
    /**
     * 支付回调地址
     */
    private static final String callbackUrl = "http://221.182.45.100:9000";
    
    
    /**
@@ -86,7 +94,7 @@
         */
        body.put("paidUse", singlePay.getPaidUse());
        //商户通知地址
        body.put("callbackUrl", singlePay.getCallbackUrl());
        body.put("callbackUrl", callbackUrl + singlePay.getCallbackUrl());
        String sign = null;
        try {
            sign = sign(body);
@@ -207,13 +215,13 @@
    
    
    
    public static String sign(JSONObject body) throws Exception{
    public static String sign(JSONObject body) {
        Set<Map.Entry<String, Object>> entries = body.entrySet();
        List<Map.Entry<String, Object>> infoIds = new ArrayList<Map.Entry<String, Object>>(entries);
        // 对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序)
        Collections.sort(infoIds, new Comparator<Map.Entry<String, Object>>() {
            public int compare(Map.Entry<String, Object> o1, Map.Entry<String, Object> o2) {
                return (o1.getKey()).toString().compareTo(o2.getKey());
                return (o1.getKey()).compareTo(o2.getKey());
            }
        });
        // 构造签名键值对的格式
ruoyi-service/ruoyi-other/src/main/resources/mapper/other/GoodsMapper.xml
@@ -71,5 +71,6 @@
        <if test="null != vip">
            and (FIND_IN_SET(#{vip}, commodity_authority) or commodity_authority like '%-1%')
        </if>
        order by sort desc
    </select>
</mapper>