luofl
2025-02-20 e4eaabefaaa2ca95f809c47a11712c3bee56e1b5
修改物流信息导入模板
29个文件已修改
2个文件已添加
322 ■■■■ 已修改文件
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/UserCoupon.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/vo/CouponInfoVo.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/factory/OrderClientFallbackFactory.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/feignClient/OrderClient.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/vo/OrderSaleNum.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/BalanceChangeRecordController.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserCouponController.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/VipCenterController.java 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WithdrawalRequestsController.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/BalanceChangeRecordServiceImpl.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/WalletStatisticsDetail.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/resources/mapper/account/AppUserMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/resources/mapper/account/BalanceChangeRecordMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/OrderMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/OrderService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/CommissionServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/OrderInfoVo.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/Dockerfile 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/CouponInfoController.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/GoodsEvaluateController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShareController.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopController.java 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/ShopServiceImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/resources/mapper/other/ShopMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java
@@ -81,6 +81,11 @@
    @PostMapping("/app-user/getAppUserByPhone")
    R<List<AppUser>> getAppUserByPhone(@RequestParam("phone") String phone);
    /**
     * 根据用户电话模糊搜索用户列表(包含被删除的用户)
     * @param phone
     * @return
     */
    @GetMapping("/app-user/getAppUserByPhoneNoFilter")
    public R<List<AppUser>> getAppUserByPhoneNoFilter(@RequestParam("phone") String phone);
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/UserCoupon.java
@@ -66,6 +66,15 @@
    @ApiModelProperty(value = "优惠劵id")
    @TableField("coupon_id")
    private Integer couponId;
    /**
     * 优惠券快照
     */
    @TableField("coupon_info")
    private String couponInfo;
    @ApiModelProperty(value = "优惠劵信息")
    @TableField(exist = false)
    private CouponInfoVo couponInfoVo;
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/vo/CouponInfoVo.java
@@ -120,5 +120,8 @@
    @TableField(exist = false)
    private List<String> goodNames;
    @ApiModelProperty(value = "其他商品名称")
    private String goodsNameJson;
}
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/factory/OrderClientFallbackFactory.java
@@ -3,6 +3,7 @@
import com.ruoyi.common.core.domain.R;
import com.ruoyi.order.feignClient.OrderClient;
import com.ruoyi.order.model.Order;
import com.ruoyi.order.vo.OrderSaleNum;
import org.springframework.cloud.openfeign.FallbackFactory;
import java.util.List;
@@ -29,6 +30,11 @@
            }
            @Override
            public R<Integer> getShopSaleNumByShopIds(OrderSaleNum orderSaleNum) {
                return R.fail("获取门店销售订单数量失败:" + cause.getMessage());
            }
            @Override
            public R<Set<Long>> getAppUserByShoppingShop(Integer shopId) {
                return R.fail("获取所有在指定门店消费的用户id失败:" + cause.getMessage());
            }
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/feignClient/OrderClient.java
@@ -5,6 +5,7 @@
import com.ruoyi.common.core.domain.R;
import com.ruoyi.order.factory.OrderClientFallbackFactory;
import com.ruoyi.order.model.Order;
import com.ruoyi.order.vo.OrderSaleNum;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@@ -40,6 +41,9 @@
    @PostMapping("/order/getShopSaleNum")
    R<Integer> getShopSaleNum(@RequestParam("shopId") Integer shopId, @RequestParam("type") Integer type);
    @PostMapping("/order/getShopSaleNumByShopIds")
    R<Integer> getShopSaleNumByShopIds(@RequestBody OrderSaleNum orderSaleNum);
    /**
     * 获取所有在指定门店消费的用户id
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/vo/OrderSaleNum.java
New file
@@ -0,0 +1,11 @@
package com.ruoyi.order.vo;
import lombok.Data;
import java.util.List;
@Data
public class OrderSaleNum {
    private List<Integer> shopIds;
    private Integer type;
}
ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java
@@ -91,6 +91,7 @@
    public LoginUser getLoginUserApplet() {
        LoginUser loginUserAppletToken = getLoginUserAppletToken(ServletUtils.getRequest());
        if (loginUserAppletToken == null) {
            System.out.println("loginUserAppletToken: "+loginUserAppletToken);
            throw new NotPermissionException("令牌已过期,请重新登录!");
        }
        return loginUserAppletToken;
@@ -103,6 +104,14 @@
    }
    
    /**
     * 判断用户是否登录
     */
    public boolean isLoginApplet() {
        LoginUser loginUserAppletToken = getLoginUserAppletToken(ServletUtils.getRequest());
        return loginUserAppletToken != null;
    }
    /**
     * 小程序 获取用户身份信息
     *
     * @return 用户信息
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java
@@ -131,6 +131,7 @@
    @PostMapping("/getAppUserById")
    public AppUser getAppUserById(@RequestParam("id") Long id) {
        System.out.println("根据id获取用户:"+id);
        return appUserService.getById(id);
    }
@@ -399,23 +400,42 @@
    @GetMapping("/change")
    @ApiOperation(value = "推广中心", tags = {"小程序-推广中心"})
    public R<AppUser> change(@ApiParam("换绑用户手机号") String phone) {
        Long userId1 = tokenService.getLoginUserApplet().getUserid();
        AppUser byId = appUserService.getById(userId1);
        List<AppUser> appUserList = appUserService.list(new LambdaQueryWrapper<AppUser>()
                .eq(AppUser::getInviteUserId, userId1)
                .eq(AppUser::getPhone, phone));
        if (!CollectionUtils.isEmpty(appUserList)){
            return R.fail("绑定关系已存在!");
        }
//        List<AppUser> appUserList = appUserService.list(new LambdaQueryWrapper<AppUser>()
//                .eq(AppUser::getInviteUserId, userId1)
//                .eq(AppUser::getPhone, phone));
//        if (!CollectionUtils.isEmpty(appUserList)){
//            return R.fail("绑定关系已存在!");
//        }
        //获取绑定门店
        AppUser user = appUserService.lambdaQuery()
                .eq(AppUser::getPhone, phone)
                .eq(AppUser::getDelFlag, 0)
                .eq(AppUser::getStatus, 1)
                .one();
        // 获取当前用户的所有下级
        List<AppUser> allSubordinates = getAllSubordinates(byId.getId());
        long count = allSubordinates.stream().filter(appUser -> appUser.getId().equals(user.getId())).count();
        if (count > 0) {
            return R.fail("绑定关系已存在!");
        }
        if (user == null) {
            return R.fail("当前手机号未注册");
        }
        Long userId = user.getId();
        if (userId.equals(byId.getId())) {
            return R.fail("不能选择自己为绑定人。");
        }
        byId.setInviteUserId(user.getId());
        appUserService.updateById(byId);
        return R.ok();
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/BalanceChangeRecordController.java
@@ -2,11 +2,9 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.account.api.model.AppUser;
import com.ruoyi.account.api.model.BalanceChangeRecord;
import com.ruoyi.account.dto.BalanceQuery;
import com.ruoyi.account.service.BalanceChangeRecordService;
import com.ruoyi.account.vo.CommissionDetail;
import com.ruoyi.account.vo.CommissionStatistics;
import com.ruoyi.account.vo.WalletStatistics;
import com.ruoyi.account.vo.WalletStatisticsDetail;
@@ -18,6 +16,7 @@
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.util.List;
/**
@@ -48,7 +47,17 @@
    @ApiOperation(value = "余额变更明细", tags = {"后台"})
    public R<IPage<BalanceChangeRecord>> page(@RequestBody BalanceQuery agentQuery) {
        return R.ok(balanceChangeRecordService.pageList(agentQuery));
        IPage<BalanceChangeRecord> page = balanceChangeRecordService.pageList(agentQuery);
        for (BalanceChangeRecord record : page.getRecords()) {
            BigDecimal beforeAmount = record.getBeforeAmount();
            BigDecimal afterAmount = record.getAfterAmount();
            if (beforeAmount.compareTo(afterAmount) > 0){
                record.setFlag(2);
            }else {
                record.setFlag(1);
            }
        }
        return R.ok(page);
    }
    /**
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserCouponController.java
@@ -88,9 +88,9 @@
        Page<UserCoupon> page = chainWrapper.page(Page.of(pageNum-1, pageSize));
        for (UserCoupon record : page.getRecords()) {
            record.setIdStr(record.getId().toString());
            CouponInfo data = couponClient.detail(record.getCouponId()).getData();
            CouponInfoVo vo = new CouponInfoVo();
            BeanUtils.copyProperties(data,vo);
            String couponInfo = record.getCouponInfo();
            CouponInfoVo vo = JSON.parseObject(couponInfo, CouponInfoVo.class);
//            BeanUtils.copyProperties(data,vo);
            //如果是商品券,将商品名称返回
            if (vo.getCouponType()==4){
                List<String> goodNames = new ArrayList<>();
@@ -98,8 +98,8 @@
                    List<Goods> data1 = goodsClient.getAllGoods().getData();
                    List<String> collect = data1.stream().map(Goods::getName).collect(Collectors.toList());
                    goodNames.addAll(collect);
                }else if(StringUtils.isEmpty(data.getForGoodIds())){
                    goodNames.addAll(JSON.parseArray(data.getGoodsNameJson(), String.class));
                }else if(StringUtils.isEmpty(vo.getForGoodIds())){
                    goodNames.addAll(JSON.parseArray(vo.getGoodsNameJson(), String.class));
                }else {
                    String[] split = vo.getForGoodIds().split(",");
                    R<List<Goods>> goodsById = goodsClient.getGoodsById(split);
@@ -255,9 +255,12 @@
                userPointService.save(userPoint);
            }
        }
        //增加优惠券记录,根据时间类型设置开始结束时间
        UserCoupon userCoupon = new UserCoupon();
        userCoupon.setAppUserId(userid);
        userCoupon.setCouponInfo(JSON.toJSONString(data));
        if (data.getPeriodType()==1) {
            userCoupon.setStartTime(data.getPeriodStartTime().atTime(0, 0, 0));
            userCoupon.setEndTime(data.getPeriodEndTime().atTime(23, 59, 59));
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/VipCenterController.java
@@ -12,6 +12,7 @@
import com.ruoyi.account.vo.vip.VipLevel;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.utils.bean.BeanUtils;
import com.ruoyi.common.security.service.TokenService;
import com.ruoyi.other.api.domain.*;
@@ -87,29 +88,27 @@
            VipLevel vipLevel = new VipLevel();
            List<Level> levelList = new ArrayList<>();
            // 批量获取 goodsVip 和 vipGoods
            List<Integer> vipIds = vipSettingList.stream().map(VipSetting::getId).collect(Collectors.toList());
            Map<Integer, R<List<VipGood>>> vipGoodsMap = getVipGoods(vipIds);
            vipSettingList.forEach(vipSetting -> {
                Level level = new Level();
                level.setName(vipSetting.getVipName());
                BeanUtils.copyBeanProp(level, vipSetting);
                level.setVipDesc(baseSetting.getContent());
                R<List<VipGood>> vipGoodR = vipGoodsMap.get(vipSetting.getId());
                if (R.isError(vipGoodR)) {
                    throw new ServiceException("会员商品获取失败");
                }
                List<VipGood> vipGoodList = vipGoodR.getData();
                if (vipGoodList != null && !vipGoodList.isEmpty()) {
                    List<String> goodsNames = new ArrayList<>();
                    vipGoodList.forEach(vipGood -> {
                        Goods goods = JSON.parseObject(vipGood.getGood_json(), Goods.class);
                if (StringUtils.isNotEmpty(vipSetting.getGoodIds())){
                    String[] goodsIds = vipSetting.getGoodIds().split(",");
                    List<Goods> goodsList = goodsClient.getGoodsById(goodsIds).getData();
                    if (goodsList != null) {
                        for (Goods goods : goodsList) {
                            if (goods.getDelFlag().equals(0)){
                        goodsNames.add(goods.getName());
                    });
                    level.setGoodsNames(goodsNames);
                }
                        }
                    }
                }
                level.setGoodsNames(goodsNames);
                levelList.add(level);
            });
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WithdrawalRequestsController.java
@@ -19,6 +19,8 @@
import com.ruoyi.account.vo.WithdrawalAuth;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.service.TokenService;
import com.ruoyi.system.api.model.LoginUser;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
@@ -49,6 +51,8 @@
    
    @Resource
    private BalanceChangeRecordService balanceChangeRecordService;
    @Resource
    private TokenService tokenService;
    /**
     * 提现申请
@@ -112,6 +116,20 @@
                singlePay.setCallbackUrl("/account/withdrawal-requests/withdrawalCallback");
                SinglePayResult singlePayResult = TransferUtil.singlePay(singlePay);
                if(null == singlePayResult){
                    LoginUser loginUserApplet = tokenService.getLoginUserApplet();
                    AppUser appUser = appUserService.getById(loginUserApplet.getUserid());
                    BigDecimal balance = appUser.getBalance();
                    BalanceChangeRecord balanceChangeRecord = new BalanceChangeRecord();
                    balanceChangeRecord.setAppUserId(appUser.getId());
                    balanceChangeRecord.setVipId(appUser.getVipId());
//                    balanceChangeRecord.setOrderId(withdrawalRequests.getId());
                    balanceChangeRecord.setChangeType(2);
                    balanceChangeRecord.setBeforeAmount(balance);
                    balanceChangeRecord.setChangeAmount(withdrawalAmount);
                    balanceChangeRecord.setAfterAmount(appUser.getBalance());
                    balanceChangeRecord.setDelFlag(0);
                    balanceChangeRecord.setCreateTime(LocalDateTime.now());
                    balanceChangeRecordService.save(balanceChangeRecord);
                    return R.fail("转账失败");
                }
                withdrawal.setStatus(1);
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/BalanceChangeRecordServiceImpl.java
@@ -78,9 +78,22 @@
        List<BalanceChangeRecord> balanceChangeRecordList = this.baseMapper.selectBalanceChangeRecordList1(balanceChangeRecord);
        List<WalletStatisticsDetail> walletStatisticsDetailList = new ArrayList<>();
        BigDecimal totalWithdraw = BigDecimal.ZERO;
        for (BalanceChangeRecord changeRecord : balanceChangeRecordList) {
            WalletStatisticsDetail walletStatisticsDetail = new WalletStatisticsDetail();
            BeanUtils.copyBeanProp(walletStatisticsDetail, changeRecord);
            BigDecimal beforeAmount = changeRecord.getBeforeAmount();
            BigDecimal afterAmount = changeRecord.getAfterAmount();
            if (beforeAmount.compareTo(afterAmount) < 0 && changeRecord.getChangeType().equals(2)){
                BigDecimal changeAmount = changeRecord.getChangeAmount();
                totalWithdraw = totalWithdraw.add(changeAmount);
                walletStatisticsDetail.setFlag(2);
            }else {
                walletStatisticsDetail.setFlag(1);
            }
            walletStatisticsDetailList.add(walletStatisticsDetail);
        }
        // 按时间排序(倒序)
@@ -113,12 +126,12 @@
                ));
        BigDecimal totalRecharge = shopCommissionMap.get(1);
        BigDecimal totalWithdraw = shopCommissionMap.get(2);
        BigDecimal totalShopWithdraw = shopCommissionMap.get(7);
        List<WalletStatisticsDetail> walletStatisticsDetailList2 = walletStatisticsDetailList.subList(fromIndex, toIndex);
        for (WalletStatisticsDetail changeRecord : walletStatisticsDetailList2) {
            if (changeRecord.getChangeType().equals(1) || changeRecord.getChangeType().equals(3) || changeRecord.getChangeType().equals(4) || changeRecord.getChangeType().equals(6)) {
            Integer flag = changeRecord.getFlag();
            if (flag.equals(1)){
                changeRecord.setChangeAmountString("+¥" + changeRecord.getChangeAmount());
            } else {
                changeRecord.setChangeAmountString("-¥" + changeRecord.getChangeAmount());
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/WalletStatisticsDetail.java
@@ -1,5 +1,6 @@
package com.ruoyi.account.vo;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.core.annotation.Excel;
import io.swagger.annotations.ApiModelProperty;
@@ -50,4 +51,7 @@
    @ApiModelProperty(value = "变更数量--带金额符号")
    @Excel(name = "变更数量")
    private String changeAmountString;
    @ApiModelProperty(value = "增或减标识: 1-增 2-减")
    private Integer flag;
}
ruoyi-service/ruoyi-account/src/main/resources/mapper/account/AppUserMapper.xml
@@ -144,7 +144,7 @@
    </select>
    <select id="getUserStatisticsDetail" resultType="com.ruoyi.account.vo.UserStatisticsDetail">
        SELECT
            SUM(tau.total_point) totalScore,
            SUM(tau.shop_point+tau.share_point+tau.total_invite_point+tau.total_register_point+tau.total_share_point+tau.total_sign_point+tau.total_hour_point+total_performance_point) totalScore,
            SUM(tau.shop_point) consumeScore,
            SUM(tau.share_point) rebateScore,
            SUM(tau.total_invite_point) inviteScore,
ruoyi-service/ruoyi-account/src/main/resources/mapper/account/BalanceChangeRecordMapper.xml
@@ -70,7 +70,7 @@
        tbcr.after_amount
        FROM
        t_balance_change_record tbcr
        LEFT JOIN t_app_user tau ON tbcr.app_user_id = tau.id
        LEFT JOIN t_app_user tau ON tbcr.app_user_id = tau.id and tau.del_flag = 0
        <where>
            <if test="changeRecord.userName != null and changeRecord.userName != ''">
                and tau.name like concat('%',#{changeRecord.userName},'%')
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java
@@ -461,6 +461,12 @@
        return R.ok(shopSaleNum);
    }
    @PostMapping("/getShopSaleNumByShopIds")
    public R<Integer> getShopSaleNumByShopIds(@RequestBody OrderSaleNum orderSaleNum){
        Integer shopSaleNum = orderService.getShopSaleNumByShopIds(orderSaleNum.getShopIds(), orderSaleNum.getType());
        return R.ok(shopSaleNum);
    }
    /**
     * 获取所有在指定门店消费的用户id
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/OrderMapper.java
@@ -55,4 +55,6 @@
     * @return
     */
    Integer getShopSaleNum(@Param("shopId") Integer shopId, @Param("type") Integer type);
    Integer getShopSaleNumByShopIds(@Param("shopIds") List<Integer> shopIds, @Param("type") Integer type);
}
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/OrderService.java
@@ -117,4 +117,6 @@
     * 导入物流信息
     */
    void importExpress(String url);
    Integer getShopSaleNumByShopIds(List<Integer> shopIds, Integer type);
}
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/CommissionServiceImpl.java
@@ -69,7 +69,7 @@
                    .eq(OrderGood::getOrderId, order.getId()));
            AppUser appUser = appUserClient.getAppUserById(order.getAppUserId());
            if(null == appUser){
                return;
                continue;
            }
            //直推上级分佣金额
            BigDecimal ztsj_price = BigDecimal.ZERO;
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java
@@ -132,13 +132,10 @@
    private RegionClient regionClient;
    
    @Override
    public List<OrderVO> selectOrderListByUserId(Integer status, Long userId) {
        return orderMapper.selectOrderListByUserId(status, userId);
    }
    @Override
@@ -307,6 +304,7 @@
    
    /**
     * 管理后台获取订单列表数据
     *
     * @param orderPageList
     * @return
     */
@@ -354,7 +352,6 @@
        if (null != orderPageList.getAppUserIds()){
            orderPageList.setAppUserIds(orderPageList.getAppUserIds().stream().distinct().collect(Collectors.toList()));
        }
        PageInfo<OrderPageListVo> pageInfo = new PageInfo<>(orderPageList.getPageCurr(), orderPageList.getPageSize());
@@ -415,10 +412,9 @@
    }
    /**
     * 小程序取消订单
     *
     * @param orderId
     * @return
     */
@@ -448,6 +444,7 @@
    /**
     * 确认发货操作
     *
     * @return
     */
    @Override
@@ -490,9 +487,9 @@
    }
    /**
     * 取消订单操作
     *
     * @param orderId
     * @return
     */
@@ -516,6 +513,7 @@
    
    /**
     * 返回订单支付金额和回退积分和会员等级
     *
     * @param order
     */
    public R refundPayMoney(Order order){
@@ -688,6 +686,7 @@
    /**
     * 取消订单后回调处理
     *
     * @return
     */
    @Override
@@ -754,6 +753,7 @@
    /**
     * 取消订单快递费回退
     *
     * @return
     */
    @Override
@@ -800,10 +800,9 @@
    }
    
    /**
     * 收货操作
     *
     * @param orderId
     * @return
     */
@@ -833,6 +832,7 @@
    
    /**
     * 获取订单详情
     *
     * @param orderId
     * @return
     */
@@ -872,9 +872,14 @@
            MapTrackKD100Vo mapTrackKD100Vo = JSON.parseObject(order.getExpressResult(), MapTrackKD100Vo.class);
            orderInfo.setExpress(mapTrackKD100Vo);
        }
        if (StringUtils.isNotEmpty(order.getExpressJson()) && !order.getExpressJson().equals("NULL")){
            JSONObject jsonObject = JSON.parseObject(order.getExpressJson());
            orderInfo.setExpressCompany(jsonObject.getString("com"));
            orderInfo.setExpressNumber(jsonObject.getString("num"));
        }
        List<OrderGood> orderGoods = orderGoodMapper.selectList(new LambdaQueryWrapper<OrderGood>().eq(OrderGood::getOrderId, orderId).eq(OrderGood::getDelFlag, 0));
        int sum = orderGoods.stream().mapToInt(OrderGood::getNum).sum();
        System.out.println("111111111111222");
        orderInfo.setGoodsNum(sum);
        List<Object> goodsJson = new ArrayList<>();
        for (OrderGood orderGood : orderGoods) {
@@ -916,6 +921,7 @@
    /**
     * 获取商品销售数量
     *
     * @param goodsId
     * @return
     */
@@ -927,6 +933,7 @@
    /**
     * 获取店铺订单数量
     *
     * @param shopId
     * @param type
     * @return
@@ -1080,4 +1087,8 @@
        }
    }
    @Override
    public Integer getShopSaleNumByShopIds(List<Integer> shopIds, Integer type) {
        return this.baseMapper.getShopSaleNumByShopIds(shopIds, type);
    }
}
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/OrderInfoVo.java
@@ -73,5 +73,9 @@
    private String activityName;
    @ApiModelProperty("核销码BASE64")
    private String writeOffCode;
    @ApiModelProperty("快递公司")
    private String expressCompany;
    @ApiModelProperty("快递单号")
    private String expressNumber;
    
}
ruoyi-service/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml
@@ -143,4 +143,17 @@
            and order_type = #{type}
        </if>
    </select>
    <select id="getShopSaleNumByShopIds" resultType="java.lang.Integer">
        select
        ifnull(count(1), 0)
        from t_order a
        where del_flag = 0 and pay_status = 2 and order_status in (1, 2, 3, 4, 7, 8)
        and shop_id in
        <foreach collection="shopIds" item="shopId" separator="," open="(" close=")" index="index">
            #{shopId}
        </foreach>
        <if test="null != type">
            and order_type = #{type}
        </if>
    </select>
</mapper>
ruoyi-service/ruoyi-other/Dockerfile
New file
@@ -0,0 +1,24 @@
# 使用官方的 OpenJDK 8 JRE 镜像作为基础镜像
FROM docker.m.daocloud.io/library/openjdk:8-jre-alpine
# 设置维护者信息
LABEL maintainer="luofl,mit"
# 创建必要的目录
RUN mkdir -p /xss/server/logs \
    && mkdir -p /xss/server/temp
# 设置工作目录
WORKDIR /xss/server
# 设置默认环境变量(可被运行时覆盖)
ENV SERVER_PORT=9600
# 声明容器暴露的端口(静态值更可靠)
EXPOSE 9600
# 将本地构建的 JAR 文件复制到镜像中
ADD ./target/ruoyi-modules-other.jar ./app.jar
# 定义容器启动时运行的命令
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-Dserver.port=${SERVER_PORT}", "-jar", "app.jar"]
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/CouponInfoController.java
@@ -80,6 +80,9 @@
    @ApiOperation(value = "优惠劵管理-详情", tags = {"管理后台-活动管理"})
    public R<CouponInfo> detail(@RequestParam("id") Integer id) {
        CouponInfo byId = couponInfoService.getById(id);
        if (byId == null){
            return R.fail("优惠劵不存在");
        }
        String forGoodIds = byId.getForGoodIds();
        if (!"-1".equals(forGoodIds) && StringUtils.isNotEmpty(forGoodIds)){
            List<Goods> goods = goodsService.listByIds(Arrays.asList(forGoodIds.split(",")));
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/GoodsEvaluateController.java
@@ -150,7 +150,7 @@
        }
        if (StringUtils.isNotEmpty(goodsEvaluate.getPhone())) {
            usersPhoneList = appUserClient.getAppUserByPhone(goodsEvaluate.getPhone()).getData().stream().map(AppUser::getId).collect(Collectors.toList());
            usersPhoneList = appUserClient.getAppUserByPhoneNoFilter(goodsEvaluate.getPhone()).getData().stream().map(AppUser::getId).collect(Collectors.toList());
            if (usersPhoneList.isEmpty()) {
                return R.ok(new Page<>());
            }
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShareController.java
@@ -255,6 +255,16 @@
            userIds.addAll(userList.stream().map(AppUser::getId).collect(Collectors.toList()));
        }
        List<Share> list = shareService.list();
        if (CollectionUtils.isEmpty(list)){
            return R.ok(Page.of(pageNum, pageSize));
        }
        List<Long> objectIds = list.stream().map(Share::getObjectId).distinct().collect(Collectors.toList());
        List<AppUser> appUsers = appUserClient.listByIds(objectIds);
        List<Long> appUserIds = appUsers.stream().filter(item -> !item.getDelFlag()).map(AppUser::getId).collect(Collectors.toList());
        if (CollectionUtils.isEmpty(userIds)){
            userIds = appUserIds;
        }
        Page<Share> page = shareService.lambdaQuery()
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopController.java
@@ -15,6 +15,7 @@
import com.ruoyi.common.security.utils.MD5Generator;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.order.feignClient.OrderClient;
import com.ruoyi.order.vo.OrderSaleNum;
import com.ruoyi.order.vo.VerifiableShopVo;
import com.ruoyi.other.api.domain.*;
import com.ruoyi.other.mapper.ShopMapper;
@@ -688,14 +689,35 @@
    @ApiOperation(value = "门店统计", tags = {"管理后台-首页统计"})
    public R<ShopStatistics> shopStatistics(@ApiParam("门店id") Integer shopId) {
        ShopStatistics shopStatistics = shopMapper.getShopStatistics(shopId);
        if(null == shopId){
            shopId = 0;
        }
        Integer serviceOrder = orderClient.getShopSaleNum(shopId, 1).getData();
        Integer goodsOrder = orderClient.getShopSaleNum(shopId, 2).getData();
        List<Integer> shopIds;
        shopIds = shopService.list(new LambdaQueryWrapper<Shop>()
                        .eq(Shop::getDelFlag, 0)
                        .eq(shopId !=null,Shop::getId, shopId))
                .stream()
                .map(Shop::getId)
                .collect(Collectors.toList());
        if (CollectionUtils.isEmpty(shopIds)){
            shopStatistics.setTotalOrder(0);
            shopStatistics.setServiceOrder(0);
            shopStatistics.setGoodsOrder(0);
        }else {
            OrderSaleNum serviceOrderSaleNum = new OrderSaleNum();
            serviceOrderSaleNum.setShopIds(shopIds);
            serviceOrderSaleNum.setType(1);
            Integer serviceOrder = orderClient.getShopSaleNumByShopIds(serviceOrderSaleNum).getData();
            OrderSaleNum goodsOrderSaleNum = new OrderSaleNum();
            goodsOrderSaleNum.setShopIds(shopIds);
            goodsOrderSaleNum.setType(2);
            Integer goodsOrder = orderClient.getShopSaleNumByShopIds(goodsOrderSaleNum).getData();
        shopStatistics.setTotalOrder(serviceOrder + goodsOrder);
        shopStatistics.setServiceOrder(serviceOrder);
        shopStatistics.setGoodsOrder(goodsOrder);
        }
        return R.ok(shopStatistics);
    }
    
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/ShopServiceImpl.java
@@ -1,5 +1,6 @@
package com.ruoyi.other.service.impl;
import cn.afterturn.easypoi.cache.manager.IFileLoader;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -8,6 +9,7 @@
import com.ruoyi.account.api.model.AppUser;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.exception.auth.NotPermissionException;
import com.ruoyi.common.core.utils.GeodesyUtil;
import com.ruoyi.common.core.utils.ServletUtils;
import com.ruoyi.common.core.utils.StringUtils;
@@ -137,14 +139,20 @@
    @Override
    public ShopDetailVO getShopDetail(Integer shopId, BigDecimal longitude, BigDecimal latitude) {
        Long userid = tokenService.getLoginUserApplet().getUserid();
        Long userid = null;
        if (tokenService.isLoginApplet()){
            userid = tokenService.getLoginUserApplet().getUserid();
        }
        // 查询店铺详情
        ShopDetailVO shopDetailVO = shopMapper.selectShopDetail(shopId);
        if (shopDetailVO == null) {
            throw new ServiceException("查询店铺不存在");
        }
        if (userid != null){
        ShopScore one = shopScoreService.getOne(new LambdaQueryWrapper<ShopScore>().eq(ShopScore::getAppUserId, userid).eq(ShopScore::getShopId, shopId).last(" order by create_time desc limit 0, 1"));
        shopDetailVO.setMyScore(null == one ? BigDecimal.ZERO : one.getScore());
        }
        // 计算距离
        if (shopDetailVO.getLongitude() != null && shopDetailVO.getLatitude() != null){
            String shopLocation = String.format("%s,%s", shopDetailVO.getLongitude(), shopDetailVO.getLatitude());
ruoyi-service/ruoyi-other/src/main/resources/mapper/other/ShopMapper.xml
@@ -68,9 +68,9 @@
            SUM(ts.can_withdraw_money) canWithdrawMoney,
            SUM(ts.withdraw_money) alreadyWithdrawMoney
        FROM
            t_shop ts
            t_shop ts where ts.del_flag = 0
            <if test="null != shopId">
                where ts.id = #{shopId}
                and ts.id = #{shopId}
            </if>
    </select>
</mapper>