luodangjia
2024-12-17 ce7f72ff0a44cb6e980b05a538a0339439248b99
Merge remote-tracking branch 'origin/master'

# Conflicts:
# ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShareController.java
27个文件已修改
3个文件已添加
572 ■■■■ 已修改文件
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/BalanceChangeRecord.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/Goods.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/GoodsAppUser.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/GoodsArea.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/GoodsSeckill.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/GoodsShop.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/GoodsVip.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/SeckillActivityInfo.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysUser.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/BalanceChangeRecordController.java 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserPointController.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/excel/UserPointEx.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/BalanceChangeRecordService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/BalanceChangeRecordServiceImpl.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/UserPointServiceImpl.java 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/CommissionStatistics.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/resources/mapper/account/UserPointMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/GoodsController.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/SeckillActivityInfoController.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/dto/SetDto.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/SeckillActivityInfoMapper.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/GoodsServiceImpl.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/SeckillActivityInfoServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/ShopPointServiceImpl.java 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/resources/mapper/other/GoodsMapper.xml 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/resources/mapper/other/SeckillActivityInfoMapper.xml 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/BalanceChangeRecord.java
@@ -4,10 +4,12 @@
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.math.BigDecimal;
@@ -61,4 +63,16 @@
    @ApiModelProperty("消费金额")
    private BigDecimal amount;
    @ApiModelProperty(value = "开始时间")
    @TableField(exist = false)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime startTime;
    @ApiModelProperty(value = "结束时间")
    @TableField(exist = false)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime endTime;
}
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/Goods.java
@@ -139,5 +139,9 @@
    @ApiModelProperty(value = "地区价格")
    private List<GoodsArea> goodsAreaList;
    public String getIdStr() {
        return String.valueOf(id);
    }
}
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/GoodsAppUser.java
@@ -38,5 +38,25 @@
    @TableField("app_user_id")
    private Long appUserId;
    @TableField(exist = false)
    @ApiModelProperty(value = "用户名称")
    private String userName;
    @TableField(exist = false)
    @ApiModelProperty(value = "用户手机号")
    private String phone;
    @TableField(exist = false)
    @ApiModelProperty(value = "会员等级")
    private String vipName;
    @TableField(exist = false)
    @ApiModelProperty(value = "会员id")
    private Integer vipId;
    public String getIdStr() {
        return String.valueOf(id);
    }
}
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/GoodsArea.java
@@ -129,6 +129,10 @@
    @TableField("bound_shop_superiors_points")
    private Integer boundShopSuperiorsPoints;
    @ApiModelProperty(value = "vip名子")
    @TableField(exist = false)
    private String vipName;
    @TableField(exist = false)
    private List<GoodsArea> goodsAreaList;
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/GoodsSeckill.java
@@ -70,7 +70,11 @@
    @ApiModelProperty(value = "获取返佣积分上级类型(1=直推上级,2=直帮上级)")
    @TableField("superior_type")
    private Integer superiorType;
    private String superiorType;
    @ApiModelProperty(value = "获取分佣金额上级类型(1=直推上级,2=直帮上级)")
    @TableField("superior_price_type")
    private String superiorPriceType;
    @ApiModelProperty(value = "核销门店可获得服务费")
    @TableField("servuce_shop_charges")
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/GoodsShop.java
@@ -38,5 +38,25 @@
    @TableField("shop_id")
    private Integer shopId;
    @ApiModelProperty(value = "门店名称")
    @TableField(exist = false)
    private String shopName;
    @ApiModelProperty(value = "店长名称")
    @TableField(exist = false)
    private String ownerName;
    @ApiModelProperty(value = "联系电话")
    @TableField(exist = false)
    private String phone;
    @ApiModelProperty(value = "门店地址")
    @TableField(exist = false)
    private String address;
    public String getIdStr(){
        return String.valueOf(id);
    }
}
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/GoodsVip.java
@@ -104,5 +104,9 @@
    @TableField("bound_shop_superiors_points")
    private Integer boundShopSuperiorsPoints;
    @ApiModelProperty(value = "vip名子")
    @TableField(exist = false)
    private String vipName;
}
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/SeckillActivityInfo.java
@@ -1,10 +1,12 @@
package com.ruoyi.other.api.domain;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.time.LocalDateTime;
@@ -53,10 +55,14 @@
    @ApiModelProperty(value = "活动开始日期")
    @TableField("start_time")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime startTime;
    @ApiModelProperty(value = "活动结束日期")
    @TableField("end_time")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime endTime;
    @ApiModelProperty(value = "是否上架:0否 1是")
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysUser.java
@@ -116,12 +116,14 @@
     * 角色类型 1=平台 2=公司 3=门店 4=修理厂
     */
    @ApiModelProperty(value = "角色类型 1=平台 2=门店")
    @TableField("role_type")
    private Integer roleType;
    @Excel(name = "密码修改时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Type.EXPORT)
    private Date passWordUpdate;
    @ApiModelProperty(value = "对象ID")
    @TableField("objectId")
    private Integer objectId;
    @ApiModelProperty(value = "备注")
@@ -401,7 +403,11 @@
    public void setForbiddenRemark(String forbiddenRemark) {
        this.forbiddenRemark = forbiddenRemark;
    }
    public List<String> getRoleNames() {
        return roleNames;
    }
    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java
@@ -130,6 +130,9 @@
        if (loginUser == null) {
            throw new RuntimeException("令牌已过期,请重新登录!");
        }
        if(null == loginUser.getUserid()){
            loginUser.setUserid(loginUser.getSysUser().getUserId());
        }
        return loginUser;
    }
    
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
@@ -230,7 +230,7 @@
    {
        SysDept info = deptMapper.selectDeptById(dept.getParentId());
        // 如果父节点不为正常状态,则不允许新增子节点
        if (!UserConstants.DEPT_NORMAL.equals(info.getStatus()))
        if (null != info && !UserConstants.DEPT_NORMAL.equals(info.getStatus()))
        {
            throw new ServiceException("部门停用,不允许新增");
        }
@@ -347,7 +347,7 @@
        Iterator<SysDept> it = list.iterator();
        while (it.hasNext())
        {
            SysDept n = (SysDept) it.next();
            SysDept n = it.next();
            if (StringUtils.isNotNull(n.getParentId()) && n.getParentId().longValue() == t.getDeptId().longValue())
            {
                tlist.add(n);
@@ -361,6 +361,6 @@
     */
    private boolean hasChild(List<SysDept> list, SysDept t)
    {
        return getChildList(list, t).size() > 0 ? true : false;
        return getChildList(list, t).size() > 0;
    }
}
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
@@ -11,6 +11,7 @@
import com.ruoyi.common.datascope.annotation.DataScope;
import com.ruoyi.common.security.service.TokenService;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.api.domain.SysDept;
import com.ruoyi.system.api.domain.SysRole;
import com.ruoyi.system.api.domain.SysUser;
import com.ruoyi.system.api.query.ChangeUserQuery;
@@ -19,12 +20,10 @@
import com.ruoyi.system.domain.SysUserRole;
import com.ruoyi.system.mapper.*;
import com.ruoyi.system.query.GetSysUserList;
import com.ruoyi.system.service.ISysConfigService;
import com.ruoyi.system.service.ISysRoleService;
import com.ruoyi.system.service.ISysUserRoleService;
import com.ruoyi.system.service.ISysUserService;
import com.ruoyi.system.service.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
@@ -75,6 +74,10 @@
    
    @Resource
    private TokenService tokenService;
    @Lazy
    @Resource
    private ISysDeptService deptService;
    
    
    /**
@@ -520,11 +523,16 @@
            List<String> roleNames = new ArrayList<>();
            for (SysUserRole sysUserRole : list1) {
                SysRole sysRole = sysRoleService.selectRoleById(sysUserRole.getRoleId());
                if(null == sysRole){
                    continue;
                }
                roleNames.add(sysRole.getRoleName());
            }
            Long[] roleIds = new Long[]{};
            sysUser.setRoleIds(list1.stream().map(SysUserRole::getRoleId).collect(Collectors.toList()).toArray(roleIds));
            sysUser.setRoleNames(roleNames);
            SysDept sysDept = deptService.selectDeptById(sysUser.getDeptId());
            sysUser.setDept(sysDept);
        }
        return pageInfo.setRecords(list);
    }
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/BalanceChangeRecordController.java
@@ -1,19 +1,26 @@
package com.ruoyi.account.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.account.api.model.BalanceChangeRecord;
import com.ruoyi.account.api.model.UserClickLog;
import com.ruoyi.account.api.model.UserPoint;
import com.ruoyi.account.dto.BalanceQuery;
import com.ruoyi.account.dto.UserCancelQuery;
import com.ruoyi.account.excel.UserPointEx;
import com.ruoyi.account.service.BalanceChangeRecordService;
import com.ruoyi.account.vo.CommissionStatistics;
import com.ruoyi.account.vo.UserPointStatistics;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.poi.ExcelUtil;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
/**
 * @author zhibing.pu
@@ -45,6 +52,78 @@
        return R.ok(balanceChangeRecordService.pageList(agentQuery));
    }
//    /**
//     * 用户分佣统计
//     */
//    @GetMapping("/commissionStatistics")
//    @ApiOperation(value = "用户分佣统计", tags = "管理后台-财务统计-用户分佣统计")
//    public R<CommissionStatistics> commissionStatistics(UserPoint userPoint) {
//        userPoint.setType(2);
//        IPage<UserPoint> userPointPage = userPointService.getUserPointPage(Page.of(userPoint.getPageNum(), userPoint.getPageSize()), userPoint);
//        UserPointStatistics statistics = userPointService.getStatistics(userPoint);
//        CommissionStatistics commissionStatistics = new CommissionStatistics();
//        commissionStatistics.setStatistics(statistics);
//        commissionStatistics.setUserPointPage(userPointPage);
//        return R.ok(commissionStatistics);
//    }
//
//    /**
//     * 导出用户分佣统计
//     */
//    @GetMapping("/commissionExport")
//    @ApiOperation(value = "用户分佣统计导出", tags = "管理后台-财务统计-用户分佣统计")
//    public void commissionExport(HttpServletResponse response, UserPoint userPoint) {
//        userPoint.setType(2);
//        IPage<UserPoint> userPointPage = userPointService.getUserPointPage(Page.of(1, Integer.MAX_VALUE), userPoint);
//        List<UserPoint> userPointList = userPointPage.getRecords();
//        List<UserPointEx> userPointExList = new ArrayList<>();
//        for (UserPoint point : userPointList) {
//            UserPointEx userPointEx = new UserPointEx();
//            userPointEx.setUserName(point.getUserName());
//            userPointEx.setPhone(point.getPhone());
//            userPointEx.setChangeTime(point.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
//            userPointEx.setChangeNum(point.getVariablePoint().toString());
//            Integer type = point.getType();
//            switch (type) {
//                case 1:
//                    userPointEx.setType("消费积分");
//                    break;
//                case 2:
//                    userPointEx.setType("返佣积分");
//                    break;
//                case 3:
//                    userPointEx.setType("拉新人积分");
//                    break;
//                case 4:
//                    userPointEx.setType("兑换商品");
//                    break;
//                case 5:
//                    userPointEx.setType("门店业绩");
//                    break;
//                case 6:
//                    userPointEx.setType("门店返佣");
//                    break;
//                case 7:
//                    userPointEx.setType("技师业绩");
//                    break;
//                case 8:
//                    userPointEx.setType("转赠积分");
//                    break;
//                case 9:
//                    userPointEx.setType("做工积分");
//                    break;
//                case 10:
//                    userPointEx.setType("注册积分");
//                    break;
//                default:
//                    userPointEx.setType("未知积分");
//            }
//            userPointExList.add(userPointEx);
//        }
//        ExcelUtil<UserPointEx> util = new ExcelUtil<>(UserPointEx.class);
//        util.exportExcel(response, userPointExList, "用户分佣统计");
//    }
    
    
}
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserPointController.java
@@ -1,10 +1,8 @@
package com.ruoyi.account.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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.UserPoint;
import com.ruoyi.account.service.AppUserService;
import com.ruoyi.account.service.UserPointService;
@@ -21,7 +19,6 @@
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/excel/UserPointEx.java
New file
@@ -0,0 +1,38 @@
package com.ruoyi.account.excel;
import com.ruoyi.common.core.annotation.Excel;
import lombok.Data;
@Data
public class UserPointEx {
    /**
     * 用户名称
     */
    @Excel(name = "用户名称")
    private String userName;
    /**
     * 联系电话
     */
    @Excel(name = "联系电话")
    private String phone;
    /**
     * 变更类型
     */
    @Excel(name = "变更类型")
    private String type;
    /**
     * 变更时间
     */
    @Excel(name = "变更时间")
    private String changeTime;
    /**
     * 变更数量
     */
    @Excel(name = "变更数量")
    private String changeNum;
}
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/BalanceChangeRecordService.java
@@ -1,10 +1,14 @@
package com.ruoyi.account.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.account.api.model.BalanceChangeRecord;
import com.ruoyi.account.dto.BalanceQuery;
import com.ruoyi.account.vo.CommissionStatistics;
public interface BalanceChangeRecordService extends IService<BalanceChangeRecord> {
    IPage<BalanceChangeRecord> pageList(BalanceQuery agentQuery);
    CommissionStatistics commissionStatistics(Page<BalanceChangeRecord> page, BalanceChangeRecord balanceChangeRecord);
}
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/BalanceChangeRecordServiceImpl.java
@@ -1,17 +1,32 @@
package com.ruoyi.account.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.account.api.model.AppUser;
import com.ruoyi.account.api.model.BalanceChangeRecord;
import com.ruoyi.account.api.model.UserClickLog;
import com.ruoyi.account.api.model.WithdrawalRequests;
import com.ruoyi.account.dto.BalanceQuery;
import com.ruoyi.account.mapper.BalanceChangeRecordMapper;
import com.ruoyi.account.service.AppUserService;
import com.ruoyi.account.service.BalanceChangeRecordService;
import com.ruoyi.account.vo.CommissionStatistics;
import com.ruoyi.common.core.utils.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.List;
import java.util.stream.Collectors;
@Service
public class BalanceChangeRecordServiceImpl extends ServiceImpl<BalanceChangeRecordMapper, BalanceChangeRecord> implements BalanceChangeRecordService {
    @Resource
    private AppUserService appUserService;
    @Override
    public IPage<BalanceChangeRecord> pageList(BalanceQuery agentQuery) {
        Page<BalanceChangeRecord> page = new Page<>();
@@ -20,4 +35,28 @@
        IPage<BalanceChangeRecord> shopIPage = this.baseMapper.pageList(page, agentQuery);
        return shopIPage;
    }
    @Override
    public CommissionStatistics commissionStatistics(Page<BalanceChangeRecord> page, BalanceChangeRecord balanceChangeRecord) {
        List<AppUser> appUserList = appUserService.list(new LambdaQueryWrapper<AppUser>()
                .like(StringUtils.isNotEmpty(balanceChangeRecord.getUserName()), AppUser::getName, balanceChangeRecord.getUserName())
                .like(StringUtils.isNotEmpty(balanceChangeRecord.getUserPhone()), AppUser::getPhone, balanceChangeRecord.getUserPhone()));
        if (CollectionUtils.isEmpty(appUserList)){
            return new CommissionStatistics();
        }
        List<Long> appUserIds = appUserList.stream().map(AppUser::getId).collect(Collectors.toList());
        BigDecimal totalCommission = appUserList.stream()
                .map(AppUser::getTotalDistributionAmount)
                .reduce(BigDecimal.ZERO, BigDecimal::add);
        Page<BalanceChangeRecord> changeRecordPage = page(page, new LambdaQueryWrapper<BalanceChangeRecord>()
                .in(BalanceChangeRecord::getAppUserId, appUserIds)
                .between(balanceChangeRecord.getStartTime() != null && balanceChangeRecord.getEndTime() != null,
                        BalanceChangeRecord::getCreateTime, balanceChangeRecord.getStartTime(), balanceChangeRecord.getEndTime()));
        return new CommissionStatistics(totalCommission, changeRecordPage);
    }
}
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/UserPointServiceImpl.java
@@ -163,56 +163,69 @@
    @Override
    public UserPointStatistics getStatistics(UserPoint userPoint) {
        try {
            if (StringUtils.isNotEmpty(userPoint.getUserName()) && StringUtils.isNotEmpty(userPoint.getPhone())) {
                List<Long> userIds = appUserService.listObjs(new LambdaQueryWrapper<AppUser>()
                                .select(AppUser::getId)
                                .like(AppUser::getName, userPoint.getUserName())
                                .like(AppUser::getPhone, userPoint.getPhone()))
                        .stream()
                        .map(appUserId -> (Long) appUserId)
                        .collect(Collectors.toList());
                userPoint.setUserIds(userIds);
            }
        if (StringUtils.isNotEmpty(userPoint.getUserName()) || StringUtils.isNotEmpty(userPoint.getPhone())) {
            List<Long> userIds = appUserService.listObjs(new LambdaQueryWrapper<AppUser>()
                            .select(AppUser::getId)
                            .like(StringUtils.isNotEmpty(userPoint.getUserName()),AppUser::getName, userPoint.getUserName())
                            .like(StringUtils.isNotEmpty(userPoint.getPhone()),AppUser::getPhone, userPoint.getPhone()))
                    .stream()
                    .map(appUserId -> (Long) appUserId)
                    .collect(Collectors.toList());
            userPoint.setUserIds(userIds);
            List<UserPoint> userPointList = userPointMapper.findLatestChangeByType(userPoint);
            Map<Integer, Integer> userBalanceMap = userPointList.stream()
                    .collect(Collectors.groupingBy(
                            UserPoint::getType,
                            Collectors.summingInt(UserPoint::getBalance)
                    ));
            int consumePoint = userBalanceMap.getOrDefault(PointChangeType.CONSUME.getCode(), 0);
            int sharePoint = userBalanceMap.getOrDefault(PointChangeType.COMMISSION_RETURN.getCode(), 0);
            int pullNewPoint = userBalanceMap.getOrDefault(PointChangeType.NEW_USER_REFERRAL.getCode(), 0);
            int registerPoint = userBalanceMap.getOrDefault(PointChangeType.REGISTRATION.getCode(), 0);
            int workPoint = userBalanceMap.getOrDefault(PointChangeType.WORK_PERFORMANCE.getCode(), 0);
            int shopAchievementPoint = userBalanceMap.getOrDefault(PointChangeType.TECHNICIAN_PERFORMANCE.getCode(), 0);
            int exchangeGoodsPoint = userBalanceMap.getOrDefault(PointChangeType.EXCHANGE_GOODS.getCode(), 0);
            int storeAchievementPoint = userBalanceMap.getOrDefault(PointChangeType.STORE_PERFORMANCE.getCode(), 0);
            int storeCommissionPoint = userBalanceMap.getOrDefault(PointChangeType.STORE_COMMISSION_RETURN.getCode(), 0);
            int transferPoint = userBalanceMap.getOrDefault(PointChangeType.TRANSFER_POINTS.getCode(), 0);
            int totalPoint = consumePoint + sharePoint + pullNewPoint + registerPoint + workPoint + shopAchievementPoint + exchangeGoodsPoint + storeAchievementPoint + storeCommissionPoint + transferPoint;
            UserPointStatistics userPointStatistics = new UserPointStatistics();
            userPointStatistics.setTotalPoint(totalPoint);
            userPointStatistics.setConsumePoint(consumePoint);
            userPointStatistics.setSharePoint(sharePoint);
            userPointStatistics.setPullNewPoint(pullNewPoint);
            userPointStatistics.setRegisterPoint(registerPoint);
            userPointStatistics.setWorkPoint(workPoint);
            userPointStatistics.setShopAchievementPoint(shopAchievementPoint);
            return userPointStatistics;
        } catch (Exception e) {
            // 记录异常日志
            log.error("获取用户点统计信息时出错", e);
            throw new RuntimeException("获取用户点统计信息时出错", e);
        }
        List<UserPoint> userPointList = userPointMapper.findLatestChangeByType(userPoint);
        Map<Integer, Integer> userBalanceMap = userPointList.stream()
                .collect(Collectors.toMap(UserPoint::getType, UserPoint::getBalance));
        Integer consumePoint = Optional.ofNullable(userBalanceMap.get(PointChangeType.CONSUME.getCode())).orElse(0);
        Integer sharePoint = Optional.ofNullable(userBalanceMap.get(PointChangeType.COMMISSION_RETURN.getCode())).orElse(0);
        Integer pullNewPoint = Optional.ofNullable(userBalanceMap.get(PointChangeType.NEW_USER_REFERRAL.getCode())).orElse(0);
        Integer registerPoint = Optional.ofNullable(userBalanceMap.get(PointChangeType.REGISTRATION.getCode())).orElse(0);
        Integer workPoint = Optional.ofNullable(userBalanceMap.get(PointChangeType.WORK_PERFORMANCE.getCode())).orElse(0);
        Integer shopAchievementPoint = Optional.ofNullable(userBalanceMap.get(PointChangeType.TECHNICIAN_PERFORMANCE.getCode())).orElse(0);
        Integer exchangeGoodsPoint = Optional.ofNullable(userBalanceMap.get(PointChangeType.EXCHANGE_GOODS.getCode())).orElse(0);
        Integer storeAchievementPoint = Optional.ofNullable(userBalanceMap.get(PointChangeType.STORE_PERFORMANCE.getCode())).orElse(0);
        Integer storeCommissionPoint = Optional.ofNullable(userBalanceMap.get(PointChangeType.STORE_COMMISSION_RETURN.getCode())).orElse(0);
        Integer transferPoint = Optional.ofNullable(userBalanceMap.get(PointChangeType.TRANSFER_POINTS.getCode())).orElse(0);
        Integer totalPoint = consumePoint + sharePoint + pullNewPoint + registerPoint + workPoint + shopAchievementPoint + exchangeGoodsPoint + storeAchievementPoint + storeCommissionPoint + transferPoint;
        UserPointStatistics userPointStatistics = new UserPointStatistics();
        userPointStatistics.setTotalPoint(totalPoint);
        userPointStatistics.setConsumePoint(consumePoint);
        userPointStatistics.setSharePoint(sharePoint);
        userPointStatistics.setPullNewPoint(pullNewPoint);
        userPointStatistics.setRegisterPoint(registerPoint);
        userPointStatistics.setWorkPoint(workPoint);
        userPointStatistics.setShopAchievementPoint(shopAchievementPoint);
        return userPointStatistics;
    }
    @Override
    public IPage<UserPoint> getUserPointPage(Page<UserPoint> page, UserPoint userPoint) {
        List<AppUser> appUserList = appUserService.list(new LambdaQueryWrapper<AppUser>()
                .eq(AppUser::getPhone, userPoint.getPhone())
                .like(AppUser::getName, userPoint.getUserName()));
        if (appUserList.isEmpty()){
            return page;
        }
        List<Long> userIds = appUserList.stream().map(AppUser::getId).collect(Collectors.toList());
        Page<UserPoint> userPointPage = page(page, new LambdaQueryWrapper<UserPoint>()
                .in(!CollectionUtils.isEmpty(userIds), UserPoint::getAppUserId, userIds)
                .in(UserPoint::getAppUserId, userIds)
                .eq(userPoint.getType() != null, UserPoint::getType, userPoint.getType())
                .between( userPoint.getStartTime()!= null && userPoint.getEndTime() !=null,UserPoint::getCreateTime, userPoint.getStartTime(), userPoint.getEndTime())
                .orderByDesc(UserPoint::getCreateTime));
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/CommissionStatistics.java
New file
@@ -0,0 +1,27 @@
package com.ruoyi.account.vo;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.account.api.model.BalanceChangeRecord;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
@ApiModel(description = "用户分佣统计响应")
@Data
public class CommissionStatistics {
    @ApiModelProperty(value = "分佣总计")
    private Integer totalCommission;
    @ApiModelProperty(value = "分页数据", required = true)
    private IPage<BalanceChangeRecord> userPointPage;
    public CommissionStatistics() {
    }
    public CommissionStatistics(BigDecimal totalCommission, Page<BalanceChangeRecord> changeRecordPage) {
    }
}
ruoyi-service/ruoyi-account/src/main/resources/mapper/account/UserPointMapper.xml
@@ -47,7 +47,7 @@
                     create_time,
                     app_user_id,
                     object_id,
                     ROW_NUMBER() OVER (PARTITION BY type ORDER BY create_time DESC) AS rn
                     ROW_NUMBER() OVER (PARTITION BY `type`,app_user_id ORDER BY create_time DESC) AS rn
                 FROM
                     t_user_point
                 <where>
@@ -55,7 +55,7 @@
                             create_time BETWEEN #{startTime} AND #{endTime}
                         </if>
                         <if test="type != null">
                             AND type = #{type}
                             AND `type` = #{type}
                         </if>
                         <if test="userIds != null and userIds.size !=0">
                             AND app_user_id IN
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java
@@ -250,7 +250,9 @@
        String content = baseSetting.getContent();
        JSONObject jsonObject = JSONObject.parseObject(content);
        Long days = jsonObject.getLong("days");
        commissionService.addToCommissionDelayQueue(order.getId(), LocalDateTime.now().plusDays(days));
        if (days != null && days > 0){
            commissionService.addToCommissionDelayQueue(order.getId(), LocalDateTime.now().plusDays(days));
        }
    }
    
    
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/GoodsController.java
@@ -78,6 +78,18 @@
    }
    /**
     * 更新上/下架状态
     */
    @PutMapping("/manageGoodsStatus/{goodsId}/{status}")
    @ApiOperation(value = "商品上/下架", tags = {"管理后台-商品管理"})
    public R<Void> manageGoodsStatus(@PathVariable("goodsId") Long goodsId,
                                     @PathVariable("status") Integer status){
        goodsService.lambdaUpdate().eq(Goods::getId, goodsId).set(Goods::getStatus, status).update();
        return R.ok();
    }
    /**
     * 后台商品删除
     */
    @DeleteMapping("/manageGoodsDelete/{goodsId}")
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/SeckillActivityInfoController.java
@@ -3,6 +3,8 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.page.TableDataInfo;
@@ -10,12 +12,14 @@
import com.ruoyi.other.api.domain.GoodsSeckill;
import com.ruoyi.other.api.domain.SeckillActivityInfo;
import com.ruoyi.other.api.vo.GetSeckillActivityInfo;
import com.ruoyi.other.mapper.SeckillActivityInfoMapper;
import com.ruoyi.other.service.GoodsSeckillService;
import com.ruoyi.other.service.SeckillActivityInfoService;
import com.ruoyi.other.vo.SeckillActivityDetailVO;
import com.ruoyi.other.vo.SeckillActivityVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@@ -39,6 +43,9 @@
    
    @Resource
    private GoodsSeckillService goodsSeckillService;
    @Resource
    private SeckillActivityInfoMapper seckillActivityInfoMapper;
    
    
    
@@ -85,6 +92,19 @@
    /**
     * 秒杀活动列表
     */
    @GetMapping("/manageList")
    @ApiOperation(value = "秒杀活动列表",tags = {"小程序-商城-首页","后台管理-活动管理-秒杀活动"})
    public R<IPage<SeckillActivityVO>> manageList(@ApiParam("页码") @RequestParam Integer pageNum,
                                                 @ApiParam("每一页数据大小") Integer pageSize,
                                                 Goods goods)
    {
        IPage<SeckillActivityVO> IPage = seckillActivityInfoMapper.querySeckillActivity(Page.of(pageNum, pageSize), goods);
        return R.ok(IPage);
    }
    /**
     * 新增秒杀活动
     */
    @PostMapping("/save")
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/dto/SetDto.java
New file
@@ -0,0 +1,15 @@
package com.ruoyi.other.dto;
import com.ruoyi.other.api.domain.VipSetting;
import lombok.Data;
import java.util.List;
/**
 * @author zhibing.pu
 * @date 2024/12/16 17:06
 */
@Data
public class SetDto {
   private List<VipSetting> vipSettingList;
}
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/SeckillActivityInfoMapper.java
@@ -1,10 +1,13 @@
package com.ruoyi.other.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.other.api.domain.Goods;
import com.ruoyi.other.api.domain.SeckillActivityInfo;
import com.ruoyi.other.vo.SeckillActivityDetailVO;
import com.ruoyi.other.vo.SeckillActivityVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@@ -20,5 +23,7 @@
    List<SeckillActivityVO> listSeckillActivity(Goods goods);
    IPage<SeckillActivityVO> querySeckillActivity(@Param("page") Page<SeckillActivityVO> page,@Param("goods") Goods goods);
    SeckillActivityDetailVO selectDetail(Integer seckillActivityId);
}
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/GoodsServiceImpl.java
@@ -21,6 +21,7 @@
import com.ruoyi.other.service.*;
import com.ruoyi.other.vo.GoodsVO;
import com.ruoyi.system.api.model.LoginUser;
import org.jetbrains.annotations.NotNull;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
@@ -29,6 +30,7 @@
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
 * <p>
@@ -205,7 +207,6 @@
                    area.setProvinceCode(goodsArea.getProvinceCode());
                    area.setCityCode(goodsArea.getCityCode());
                    area.setDistrictsCode(goodsArea.getDistrictsCode());
                    goodsAreaList1.add(area);
                }
                goodsAreaService.saveBatch(goodsAreaList1);
            }
@@ -241,7 +242,6 @@
                    area.setProvinceCode(goodsArea.getProvinceCode());
                    area.setCityCode(goodsArea.getCityCode());
                    area.setDistrictsCode(goodsArea.getDistrictsCode());
                    goodsAreaList1.add(area);
                }
                goodsAreaService.updateBatchById(goodsAreaList1);
            }
@@ -251,19 +251,49 @@
    @Override
    public Goods getManageGoodsDetail(Long goodsId) {
        Goods goods = getById(goodsId);
        if (goods == null){
            return null;
        }
        // 指定门店
        List<GoodsShop> goodsShops = goodsShopService.list(new LambdaQueryWrapper<GoodsShop>()
                .eq(GoodsShop::getGoodsId, goodsId));
        for (GoodsShop goodsShop : goodsShops) {
            Shop shop = shopMapper.selectById(goodsShop.getShopId());
            goodsShop.setShopName(shop.getName());
            goodsShop.setOwnerName(shop.getShopManager());
            goodsShop.setPhone(shop.getPhone());
            goodsShop.setAddress(shop.getAddress());
        }
        goods.setGoodsShopList(goodsShops);
        // 指定用户
        List<GoodsAppUser> goodsAppUserList = goodsAppUserService.list(new LambdaQueryWrapper<GoodsAppUser>()
                .eq(GoodsAppUser::getGoodsId, goodsId));
        List<Long> userIds = goodsAppUserList.stream().map(GoodsAppUser::getAppUserId).collect(Collectors.toList());
        List<AppUser> appUsers = appUserClient.listByIds(userIds);
        for (GoodsAppUser goodsAppUser : goodsAppUserList) {
            appUsers.stream().filter(u -> u.getId().equals(goodsAppUser.getAppUserId())).findFirst().ifPresent( u -> {
                goodsAppUser.setUserName(u.getName());
                goodsAppUser.setPhone(u.getPhone());
                VipSetting vipSetting = vipSettingService.getById(u.getVipId());
                if (vipSetting != null){
                    goodsAppUser.setVipName(vipSetting.getVipName());
                    goodsAppUser.setVipId(u.getVipId());
                }
            });
        }
        goods.setGoodsAppUserList(goodsAppUserList);
        // 会员价格
        List<GoodsVip> goodsVipList = goodsVipService.list(new LambdaQueryWrapper<GoodsVip>()
                .eq(GoodsVip::getGoodsId, goodsId));
        List<VipSetting> vipSettings = getVipSettings(goodsVipList.stream().map(GoodsVip::getVip));
        goodsVipList.forEach(goodsArea -> vipSettings.stream()
                .filter(vipSetting -> vipSetting.getId().equals(goodsArea.getVip()))
                .findFirst().ifPresent( vipSetting -> goodsArea.setVipName(vipSetting.getVipName())));
        goods.setGoodsVipList(goodsVipList);
        // 特殊地区售价设置
@@ -276,12 +306,36 @@
        List<GoodsArea> goodsAreaList1 = new ArrayList<>();
        listMap.forEach((s, goodsAreas) -> {
            GoodsArea goodsArea = goodsAreas.get(0);
            goodsArea.setGoodsAreaList(goodsAreas);
            goodsAreaList1.add(goodsArea);
            List<VipSetting> vipSettings1 = getVipSettings(goodsAreas.stream().map(GoodsArea::getVip));
            goodsAreas.forEach(goodsArea -> vipSettings1.stream()
                    .filter(vipSetting -> vipSetting.getId().equals(goodsArea.getVip()))
                    .findFirst().ifPresent( vipSetting -> goodsArea.setVipName(vipSetting.getVipName())));
            GoodsArea goodsArea1 = getGoodsArea(goodsAreas);
            goodsAreaList1.add(goodsArea1);
        });
        goods.setGoodsAreaList(goodsAreaList1);
        return goods;
    }
    private List<VipSetting> getVipSettings(Stream<Integer> goodsVipList) {
        List<Integer> vipIds = goodsVipList.collect(Collectors.toList());
        return vipSettingService.listByIds(vipIds);
    }
    @NotNull
    private static GoodsArea getGoodsArea(List<GoodsArea> goodsAreas) {
        GoodsArea goodsArea = goodsAreas.get(0);
        GoodsArea goodsArea1 = new GoodsArea();
        goodsArea1.setProvinceCode(goodsArea.getProvinceCode());
        goodsArea1.setCityCode(goodsArea.getCityCode());
        goodsArea1.setDistrictsCode(goodsArea.getDistrictsCode());
        goodsArea1.setProvince(goodsArea.getProvince());
        goodsArea1.setCity(goodsArea.getCity());
        goodsArea1.setDistricts(goodsArea.getDistricts());
        goodsArea1.setGoodsAreaList(goodsAreas);
        return goodsArea1;
    }
}
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/SeckillActivityInfoServiceImpl.java
@@ -46,7 +46,7 @@
    @Override
    public List<SeckillActivityVO> listSeckillActivity(Goods goods) {
        LoginUser loginUserApplet = tokenService.getLoginUserApplet();
        LoginUser loginUserApplet = tokenService.getLoginUser();
        AppUser appUser = appUserClient.getAppUserById(loginUserApplet.getUserid());
        goods.setVipId(appUser.getVipId());
        return seckillActivityInfoMapper.listSeckillActivity(goods);
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/ShopPointServiceImpl.java
@@ -40,17 +40,18 @@
        String shopName = shopPoint.getShopName();
        String phone = shopPoint.getPhone();
        String shopLeaderName = shopPoint.getShopLeaderName();
        if (StringUtils.isNotEmpty(shopName) || StringUtils.isNotEmpty(phone) || StringUtils.isNotEmpty(shopLeaderName)) {
            List<Integer> shopIds = shopService.listObjs(new LambdaQueryWrapper<Shop>()
                            .select(Shop::getId)
                            .like(StringUtils.isNotEmpty(shopName), Shop::getName, shopName)
                            .like(StringUtils.isNotEmpty(phone), Shop::getPhone, phone)
                            .like(StringUtils.isNotEmpty(shopLeaderName), Shop::getShopManager, shopLeaderName))
                    .stream().map(o -> (Integer) o).collect(Collectors.toList());
            shopPoint.setShopIds(shopIds);
        List<Integer> shopIds = shopService.listObjs(new LambdaQueryWrapper<Shop>()
                        .select(Shop::getId)
                        .like(StringUtils.isNotEmpty(shopName), Shop::getName, shopName)
                        .like(StringUtils.isNotEmpty(phone), Shop::getPhone, phone)
                        .like(StringUtils.isNotEmpty(shopLeaderName), Shop::getShopManager, shopLeaderName))
                .stream().map(o -> (Integer) o).collect(Collectors.toList());
        if (CollectionUtils.isEmpty(shopIds)) {
            return new ShopPointStatistics();
        }
        shopPoint.setShopIds(shopIds);
        ShopPointStatistics shopPointStatistics = new ShopPointStatistics();
        List<ShopPoint> latestChangeByType = shopPointMapper.findLatestChangeByType(shopPoint);
ruoyi-service/ruoyi-other/src/main/resources/mapper/other/GoodsMapper.xml
@@ -33,7 +33,9 @@
            tg.shop_cost,
            tg.`status`,
            tg.purchase_limit,
            tg.sale_num
            tg.sale_num,
            tg.cash_payment,
            tg.point_payment
        FROM
            t_goods tg
                LEFT JOIN t_goods_category tgc ON tg.goods_category_id = tgc.id
ruoyi-service/ruoyi-other/src/main/resources/mapper/other/SeckillActivityInfoMapper.xml
@@ -46,4 +46,29 @@
                LEFT JOIN t_goods_seckill tgs ON tgs.seckill_activity_info_id = tsai.id
        WHERE tsai.id = #{seckillActivityId} AND tsai.del_flag = 0
    </select>
    <select id="querySeckillActivity" resultType="com.ruoyi.other.vo.SeckillActivityVO">
        SELECT
        tsai.id,
        tg.`name`,
        tg.introduction,
        tg.home_page_picture,
        tg.original_price,
        tgs.selling_price,
        tg.sale_num,
        tsai.start_time
        FROM
        t_seckill_activity_info tsai
        LEFT JOIN t_goods tg ON tsai.good_id = tg.id
        LEFT JOIN t_goods_seckill tgs ON tgs.seckill_activity_info_id = tsai.id
        WHERE tsai.end_time >= NOW() AND tsai.del_flag = 0
        <if test="goods.name != null and goods.name != ''">
            AND tg.`name` LIKE concat('%',#{goods.name},'%')
        </if>
        <if test="goods.goodsCategoryId != null">
            AND tg.goods_category_id = #{goods.goodsCategoryId}
        </if>
        <if test="goods.vipId != null">
            AND find_in_set(#{goods.vipId},tgs.vip) > 0
        </if>
    </select>
</mapper>