mitao
2024-09-13 b3cef9d27013afee054bdd467defd0b6be218526
修改bug
44个文件已修改
2个文件已添加
511 ■■■■ 已修改文件
pom.xml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-auth/pom.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-auth/src/main/resources/bootstrap.yml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-auth/src/test/java/com/ruoyi/auth/UserTokenTest.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/ruoyi-common-core/pom.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-gateway/src/main/resources/bootstrap.yml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-article/pom.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/controller/management/MgtSensitiveWordsController.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/controller/management/dto/MgtSensitiveWordsDTO.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/controller/management/vo/MgtArticleVO.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/domain/Article.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/listener/SensitiveWordsListener.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/service/ISensitiveWordsService.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/service/impl/ArticleCommentsServiceImpl.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/service/impl/SensitiveWordsServiceImpl.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-article/src/main/resources/bootstrap.yml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-auction/pom.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/dto/MgtAuctionGoodsDTO.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/dto/MgtAuctionSalesroomDTO.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-auction/src/main/resources/bootstrap.yml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-file/src/main/resources/bootstrap.yml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/pom.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/dto/GoodsGroupPurchaseDTO.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/dto/GoodsSeckillUpd.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/dto/GoodsSkuDTO.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/GoodsSeckillMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsSeckillService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsGroupPurchaseServiceImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSeckillServiceImpl.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSkuServiceImpl.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/task/GoodsScheduler.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/resources/bootstrap.yml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/resources/mapper/goods/GoodsSeckillMapper.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/pom.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/resources/bootstrap.yml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/pom.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/management/MgtBusinessDataController.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/management/vo/MgtOrderStaticsVO.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/MgtBusinessDataService.java 52 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/resources/bootstrap.yml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-promotion/src/main/resources/bootstrap.yml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-seata-demo/pom.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-seata-demo/src/main/resources/bootstrap.yml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml
@@ -36,6 +36,7 @@
        <poi.version>4.1.2</poi.version>
        <transmittable-thread-local.version>2.14.2</transmittable-thread-local.version>
        <zxing.version>3.2.1</zxing.version>
        <easyexcel.version>4.0.2</easyexcel.version>
    </properties>
    <!-- 依赖声明 -->
@@ -212,7 +213,11 @@
                <artifactId>ruoyi-api-system</artifactId>
                <version>${ruoyi.version}</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>easyexcel</artifactId>
                <version>${easyexcel.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
@@ -232,6 +237,7 @@
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>
    </dependencies>
    <build>
ruoyi-auth/pom.xml
@@ -89,6 +89,12 @@
            <groupId>com.ruoyi</groupId>
            <artifactId>ruoyi-common-swagger</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    
    <build>
ruoyi-auth/src/main/resources/bootstrap.yml
@@ -17,13 +17,14 @@
    nacos:
      discovery:
        # 服务注册地址
        server-addr: 127.0.0.1:8858
        server-addr: 127.0.0.1:8848
        service: ${spring.application.name}
        group: DEFAULT_GROUP
        namespace: 689e0f09-d102-460c-ac5c-5ea50a3174be
        ip: 192.168.110.188
      config:
        # 配置中心地址
        server-addr: 127.0.0.1:8858
        server-addr: 127.0.0.1:8848
        namespace: 689e0f09-d102-460c-ac5c-5ea50a3174be
        group: DEFAULT_GROUP
        name: ${spring.application.name}
ruoyi-auth/src/test/java/com/ruoyi/auth/UserTokenTest.java
New file
@@ -0,0 +1,20 @@
package com.ruoyi.auth;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
/**
 * @author mitao
 * @date 2024/8/15
 */
@Slf4j
@SpringBootTest
public class UserTokenTest {
    @Test
    public void test() {
    }
}
ruoyi-common/ruoyi-common-core/pom.xml
@@ -132,7 +132,11 @@
            <version>2.8.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
        </dependency>
    </dependencies>
</project>
ruoyi-gateway/src/main/resources/bootstrap.yml
@@ -17,13 +17,14 @@
    nacos:
      discovery:
        # 服务注册地址
        server-addr: 127.0.0.1:8858
        server-addr: 127.0.0.1:8848
        service: ${spring.application.name}
        group: DEFAULT_GROUP
        namespace: 689e0f09-d102-460c-ac5c-5ea50a3174be
        ip: 192.168.110.188
      config:
        # 配置中心地址
        server-addr: 127.0.0.1:8858
        server-addr: 127.0.0.1:8848
        namespace: 689e0f09-d102-460c-ac5c-5ea50a3174be
        group: DEFAULT_GROUP
        name: ${spring.application.name}
@@ -42,7 +43,7 @@
      datasource:
        ds1:
          nacos:
            server-addr: 127.0.0.1:8858
            server-addr: 127.0.0.1:8848
            dataId: sentinel-ruoyi-gateway
            groupId: DEFAULT_GROUP
            data-type: json
ruoyi-modules/ruoyi-article/pom.xml
@@ -101,17 +101,6 @@
      <version>1.2.47</version>
    </dependency>
    <dependency>
      <groupId>cn.afterturn</groupId>
      <artifactId>easypoi-spring-boot-starter</artifactId>
      <version>4.0.0</version>
      <exclusions>
        <exclusion>
          <artifactId>guava</artifactId>
          <groupId>com.google.guava</groupId>
        </exclusion>
      </exclusions>
    </dependency>
    <!-- 分布式事务 -->
    <dependency>
      <groupId>com.ruoyi</groupId>
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/controller/management/MgtSensitiveWordsController.java
@@ -1,23 +1,31 @@
package com.ruoyi.article.controller.management;
import com.alibaba.excel.EasyExcel;
import com.ruoyi.article.controller.management.dto.MgtSensitiveWordsDTO;
import com.ruoyi.article.controller.management.dto.MgtSensitiveWordsQuery;
import com.ruoyi.article.controller.management.vo.MgtSensitiveWordsVO;
import com.ruoyi.article.service.ISensitiveWordsService;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.page.CollUtils;
import com.ruoyi.common.core.utils.page.PageDTO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import java.io.IOException;
import java.net.URLEncoder;
import javax.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
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.RequestPart;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
/**
 * <p>
@@ -72,4 +80,46 @@
        sensitiveWordsService.removeById(id);
        return R.ok();
    }
    /**
     * 下载导入模板
     *
     * @param response
     */
    @ApiOperation("下载导入模板")
    @GetMapping("/exportTemplate")
    public void exportSensitiveWordsTemplate(HttpServletResponse response) {
        // 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman
        response.setContentType(
                "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setCharacterEncoding("utf-8");
        // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
        try {
            String fileName = URLEncoder.encode("敏感词导入模板", "UTF-8").replaceAll("\\+", "%20");
            response.setHeader("Content-disposition",
                    "attachment;filename*=utf-8''" + fileName + ".xlsx");
            EasyExcel.write(response.getOutputStream(), MgtSensitiveWordsDTO.class)
                    .sheet("敏感词导入模板")
                    .doWrite(CollUtils.emptyList());
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
    /**
     * 敏感词导入
     *
     * @param file 导入文件
     * @return
     */
    @ApiOperation("敏感词导入")
    @PostMapping("/importSensitiveWords")
    public R<?> importSensitiveWords(@RequestPart("file") MultipartFile file) {
        try {
            sensitiveWordsService.importSensitiveWords(file);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        return R.ok();
    }
}
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/controller/management/dto/MgtSensitiveWordsDTO.java
@@ -1,5 +1,6 @@
package com.ruoyi.article.controller.management.dto;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
@@ -18,5 +19,6 @@
    @ApiModelProperty(value = "敏感词")
    @NotBlank(message = "敏感词不能为空")
    @ExcelProperty("敏感词")
    private String word;
}
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/controller/management/vo/MgtArticleVO.java
@@ -75,4 +75,7 @@
    
    @ApiModelProperty(value = "是否被举报")
    private Boolean reported;
    @ApiModelProperty(value = "资讯评论查看状态 1:未查看 2:已查看")
    private Integer readStatus;
}
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/domain/Article.java
@@ -102,4 +102,7 @@
    @ApiModelProperty(value = "是否被举报")
    private Boolean reported;
    @ApiModelProperty(value = "资讯评论查看状态 1:未查看 2:已查看")
    private Integer readStatus;
}
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/listener/SensitiveWordsListener.java
New file
@@ -0,0 +1,70 @@
package com.ruoyi.article.listener;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.read.listener.ReadListener;
import com.alibaba.excel.util.ListUtils;
import com.alibaba.fastjson2.JSON;
import com.ruoyi.article.controller.management.dto.MgtSensitiveWordsDTO;
import com.ruoyi.article.domain.SensitiveWords;
import com.ruoyi.article.service.ISensitiveWordsService;
import com.ruoyi.common.core.utils.page.BeanUtils;
import java.util.List;
import lombok.extern.slf4j.Slf4j;
/**
 * @author mitao
 * @date 2024/9/11
 */
@Slf4j
public class SensitiveWordsListener implements ReadListener<MgtSensitiveWordsDTO> {
    /**
     * 每隔100条存储数据库,实际使用中可以100条,然后清理list ,方便内存回收
     */
    private static final int BATCH_COUNT = 100;
    /**
     * 缓存的数据
     */
    private List<MgtSensitiveWordsDTO> cachedDataList = ListUtils.newArrayListWithExpectedSize(
            BATCH_COUNT);
    private ISensitiveWordsService sensitiveWordsService;
    /**
     * 如果使用了spring,请使用这个构造方法。每次创建Listener的时候需要把spring管理的类传进来
     *
     * @param sensitiveWordsService
     */
    public SensitiveWordsListener(ISensitiveWordsService sensitiveWordsService) {
        this.sensitiveWordsService = sensitiveWordsService;
    }
    @Override
    public void invoke(MgtSensitiveWordsDTO data, AnalysisContext analysisContext) {
        log.info("解析到一条数据:{}", JSON.toJSONString(data));
        cachedDataList.add(data);
        // 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM
        if (cachedDataList.size() >= BATCH_COUNT) {
            saveData();
            // 存储完成清理 list
            cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
        }
    }
    private void saveData() {
        log.info("{}条数据,开始存储数据库!", cachedDataList.size());
        // 拷贝数据
        List<SensitiveWords> sensitiveWords = BeanUtils.copyList(cachedDataList,
                SensitiveWords.class);
        // 批量存入数据库
        sensitiveWordsService.saveBatch(sensitiveWords);
    }
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        // 这里也要保存数据,确保最后遗留的数据也存储到数据库
        saveData();
        log.info("所有数据解析完成!");
    }
}
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/service/ISensitiveWordsService.java
@@ -8,8 +8,10 @@
import com.ruoyi.common.core.utils.page.PageDTO;
import com.ruoyi.system.api.domain.dto.judgeSensitiveWordsDTO;
import com.ruoyi.system.api.domain.vo.judgeSensitiveWordsVO;
import java.io.IOException;
import java.util.List;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.multipart.MultipartFile;
/**
 * <p>
@@ -38,4 +40,12 @@
     * @param dto 敏感词数据传输对象
     */
    void saveSensitiveWords(MgtSensitiveWordsDTO dto);
    /**
     * 敏感词导入
     *
     * @param file 导入文件
     * @return
     */
    void importSensitiveWords(MultipartFile file) throws IOException;
}
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/service/impl/ArticleCommentsServiceImpl.java
@@ -69,6 +69,7 @@
        }
        Article byId = articleMapper.selectById(articleCommentsDTO.getArticleId());
        byId.setCommentCount(byId.getCommentCount()+1);
        byId.setReadStatus(byId.getReadStatus() == 2 ? 1 : 2);
        articleMapper.updateById(byId);
        this.saveOrUpdate(articleComments);
    }
@@ -91,6 +92,7 @@
     * @return PageDTO<MgtArticleCommentsVO>
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public PageDTO<MgtArticleCommentsVO> getArticleCommentsPage(MgtArticleCommentsQuery query) {
        PageDTO<MgtArticleCommentsVO> result;
        Set<Long> memberIdSet = null;
@@ -131,7 +133,10 @@
            });
            result = pageVO;
        }
        // 修改查看评论状态
        Article article = articleMapper.selectById(query.getArticleId());
        article.setReadStatus(2);
        articleMapper.updateById(article);
        return result;
    }
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/service/impl/SensitiveWordsServiceImpl.java
@@ -1,5 +1,6 @@
package com.ruoyi.article.service.impl;
import com.alibaba.excel.EasyExcel;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -8,6 +9,7 @@
import com.ruoyi.article.controller.management.dto.MgtSensitiveWordsQuery;
import com.ruoyi.article.controller.management.vo.MgtSensitiveWordsVO;
import com.ruoyi.article.domain.SensitiveWords;
import com.ruoyi.article.listener.SensitiveWordsListener;
import com.ruoyi.article.mapper.SensitiveWordsMapper;
import com.ruoyi.article.service.ISensitiveWordsService;
import com.ruoyi.common.core.utils.StringUtils;
@@ -16,10 +18,12 @@
import com.ruoyi.common.core.utils.page.PageDTO;
import com.ruoyi.system.api.domain.dto.judgeSensitiveWordsDTO;
import com.ruoyi.system.api.domain.vo.judgeSensitiveWordsVO;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
/**
 * <p>
@@ -93,4 +97,16 @@
    public void saveSensitiveWords(MgtSensitiveWordsDTO dto) {
        this.save(BeanUtils.copyBean(dto, SensitiveWords.class));
    }
    /**
     * 敏感词导入
     *
     * @param file 导入文件
     * @return
     */
    @Override
    public void importSensitiveWords(MultipartFile file) throws IOException {
        EasyExcel.read(file.getInputStream(), MgtSensitiveWordsDTO.class,
                new SensitiveWordsListener(this)).sheet().doRead();
    }
}
ruoyi-modules/ruoyi-article/src/main/resources/bootstrap.yml
@@ -17,13 +17,14 @@
    nacos:
      discovery:
        # 服务注册地址
        server-addr: 192.168.110.188:8858
        server-addr: 192.168.110.188:8848
        service: ${spring.application.name}
        group: DEFAULT_GROUP
        namespace: 689e0f09-d102-460c-ac5c-5ea50a3174be
        ip: 192.168.110.188
      config:
        # 配置中心地址
        server-addr: 192.168.110.188:8858
        server-addr: 192.168.110.188:8848
        namespace: 689e0f09-d102-460c-ac5c-5ea50a3174be
        group: DEFAULT_GROUP
        name: ${spring.application.name}
ruoyi-modules/ruoyi-auction/pom.xml
@@ -114,17 +114,7 @@
      <artifactId>alipay-sdk-java</artifactId>
      <version>4.39.95.ALL</version>
    </dependency>
    <dependency>
      <groupId>cn.afterturn</groupId>
      <artifactId>easypoi-spring-boot-starter</artifactId>
      <version>4.0.0</version>
      <exclusions>
        <exclusion>
          <artifactId>guava</artifactId>
          <groupId>com.google.guava</groupId>
        </exclusion>
      </exclusions>
    </dependency>
    <!-- 分布式事务 -->
    <dependency>
      <groupId>com.ruoyi</groupId>
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/dto/MgtAuctionGoodsDTO.java
@@ -6,7 +6,6 @@
import io.swagger.annotations.ApiModelProperty;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import lombok.Data;
@@ -57,10 +56,8 @@
    private String description;
    @ApiModelProperty(value = "分享标题")
    @NotBlank(message = "分享标题不能为空")
    private String shareTitle;
    @ApiModelProperty(value = "分享图片")
    @NotBlank(message = "分享图片不能为空")
    private String sharePic;
}
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/dto/MgtAuctionSalesroomDTO.java
@@ -58,11 +58,9 @@
    private String clientCoverPic;
    @ApiModelProperty(value = "分享标题")
    @NotBlank(message = "分享标题不能为空")
    private String shareTitle;
    @ApiModelProperty(value = "分享图片")
    @NotBlank(message = "分享图片不能为空")
    private String sharePic;
    @Valid
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java
@@ -557,12 +557,19 @@
        auctionGoodsinfoVO.setMinimumMarkupAmount(byId.getMinimumMarkupAmount());
        auctionGoodsinfoVO.setSpec(goodsSkuOne.getSpec());
        auctionGoodsinfoVO.setSpecUnit(goodsSkuOne.getSpecUnit());
        auctionGoodsinfoVO.setShareTitle(goodsSkuOne.getShareTitle());
        auctionGoodsinfoVO.setDetail(goodsSkuOne.getDetail());
        auctionGoodsinfoVO.setBond(byId.getBond());
        auctionGoodsinfoVO.setYears(goodsSkuOne.getYears());
        auctionGoodsinfoVO.setSharePic(byId.getSharePic());
        if (StringUtils.isNotBlank(byId.getShareTitle())) {
        auctionGoodsinfoVO.setShareTitle(byId.getShareTitle());
        } else {
            auctionGoodsinfoVO.setShareTitle(goodsSkuOne.getSkuName());
        }
        if (StringUtils.isNotBlank(byId.getSharePic())) {
            auctionGoodsinfoVO.setSharePic(byId.getSharePic());
        } else {
            auctionGoodsinfoVO.setSharePic(goodsSkuOne.getCoverPic());
        }
        LambdaQueryWrapper<AuctionBidRecord> wrapper1= Wrappers.lambdaQuery();
        wrapper1.eq(AuctionBidRecord::getAuctionType,1);
        wrapper1.eq(AuctionBidRecord::getTargetId,byId.getId());
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java
@@ -467,8 +467,17 @@
        memberAuctionSalesroomInfoVO.setEndTime(byId.getEndTime());
        memberAuctionSalesroomInfoVO.setType(byId.getType());
        memberAuctionSalesroomInfoVO.setDescription(byId.getDescription());
        memberAuctionSalesroomInfoVO.setSharePic(byId.getSharePic());
        memberAuctionSalesroomInfoVO.setShareTitle(byId.getShareTitle());
        if (StringUtils.isNotBlank(byId.getShareTitle())) {
            memberAuctionSalesroomInfoVO.setShareTitle(byId.getShareTitle());
        } else {
            memberAuctionSalesroomInfoVO.setShareTitle(byId.getSalesroomName());
        }
        if (StringUtils.isNotBlank(byId.getSharePic())) {
            memberAuctionSalesroomInfoVO.setSharePic(byId.getSharePic());
        } else {
            memberAuctionSalesroomInfoVO.setSharePic(byId.getCoverPic());
        }
        memberAuctionSalesroomInfoVO.setStartTime(byId.getStartTime());
        memberAuctionSalesroomInfoVO.setStatus(byId.getStatus());
        memberAuctionSalesroomInfoVO.setCoverPic(byId.getCoverPic());
@@ -1674,8 +1683,7 @@
        map.put("message_type", "start");
        map.put("type", "1");
        String msg = objectMapper.writeValueAsString(map);
        sysUserClient.pushByClientType(WebsocketMessageDTO.builder().message(msg)
                .clientType(ClientTypeEnum.AUCTIONEER).build(), SecurityConstants.INNER);
        sysUserClient.pushAll(msg, SecurityConstants.INNER);
    }
    @Override
@@ -1738,8 +1746,7 @@
        map.put("message_type", "end");
        map.put("type", "1");
        String msg = objectMapper.writeValueAsString(map);
        sysUserClient.pushByClientType(WebsocketMessageDTO.builder().message(msg)
                .clientType(ClientTypeEnum.AUCTIONEER).build(), SecurityConstants.INNER);
        sysUserClient.pushAll(msg, SecurityConstants.INNER);
    }
    @Override
ruoyi-modules/ruoyi-auction/src/main/resources/bootstrap.yml
@@ -17,13 +17,14 @@
    nacos:
      discovery:
        # 服务注册地址
        server-addr: 192.168.110.188:8858
        server-addr: 192.168.110.188:8848
        service: ${spring.application.name}
        group: DEFAULT_GROUP
        namespace: 689e0f09-d102-460c-ac5c-5ea50a3174be
        ip: 192.168.110.188
      config:
        # 配置中心地址
        server-addr: 192.168.110.188:8858
        server-addr: 192.168.110.188:8848
        namespace: 689e0f09-d102-460c-ac5c-5ea50a3174be
        group: DEFAULT_GROUP
        name: ${spring.application.name}
ruoyi-modules/ruoyi-file/src/main/resources/bootstrap.yml
@@ -23,13 +23,14 @@
    nacos:
      discovery:
        # 服务注册地址
        server-addr: 127.0.0.1:8858
        server-addr: 127.0.0.1:8848
        service: ${spring.application.name}
        group: DEFAULT_GROUP
        namespace: 689e0f09-d102-460c-ac5c-5ea50a3174be
        ip: 192.168.110.188
      config:
        # 配置中心地址
        server-addr: 127.0.0.1:8858
        server-addr: 127.0.0.1:8848
        namespace: 689e0f09-d102-460c-ac5c-5ea50a3174be
        group: DEFAULT_GROUP
        name: ${spring.application.name}
ruoyi-modules/ruoyi-goods/pom.xml
@@ -112,18 +112,6 @@
      <version>4.39.95.ALL</version>
    </dependency>
    <dependency>
      <groupId>cn.afterturn</groupId>
      <artifactId>easypoi-spring-boot-starter</artifactId>
      <version>4.0.0</version>
      <exclusions>
        <exclusion>
          <artifactId>guava</artifactId>
          <groupId>com.google.guava</groupId>
        </exclusion>
      </exclusions>
    </dependency>
    <!-- 分布式事务 -->
    <dependency>
      <groupId>com.ruoyi</groupId>
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/dto/GoodsGroupPurchaseDTO.java
@@ -24,11 +24,9 @@
    private Long goodsSkuId;
    @ApiModelProperty(value = "分享标题")
    @NotBlank(message = "分享标题不能为空")
    private String shareTitle;
    @ApiModelProperty(value = "分享图片")
    @NotBlank(message = "分享图片不能为空")
    private String sharePic;
    @ApiModelProperty(value = "团购价格")
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/dto/GoodsSeckillUpd.java
@@ -5,7 +5,6 @@
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.time.LocalDateTime;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -41,11 +40,9 @@
    private Integer limitNumber;
    @ApiModelProperty(value = "分享标题")
    @NotBlank(message = "分享标题不能为空")
    private String shareTitle;
    @ApiModelProperty(value = "分享图片")
    @NotBlank(message = "分享图片不能为空")
    private String sharePic;
    @ApiModelProperty(value = "秒杀开始时间", notes = "传 2024-05-21 18:18:49 不可传:2024-05-21T18:18:49 ")
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/dto/GoodsSkuDTO.java
@@ -76,11 +76,11 @@
    private String album;
    @ApiModelProperty(value = "分享标题")
    @NotBlank(message = "分享标题不能为空")
    // @NotBlank(message = "分享标题不能为空")
    private String shareTitle;
    @ApiModelProperty(value = "分享图片")
    @NotBlank(message = "分享图片不能为空")
    // @NotBlank(message = "分享图片不能为空")
    private String sharePic;
    @ApiModelProperty(value = "商品信息")
@@ -89,7 +89,6 @@
    private List<GoodsInfoTitleValueDTO> goodsInfoTitleValueDTOList;
    @ApiModelProperty(value = "商品描述")
    @NotBlank(message = "商品描述不能为空")
    private String description;
    @ApiModelProperty(value = "商品说明")
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/GoodsSeckillMapper.java
@@ -22,4 +22,6 @@
    void updateListingStatusBatch(@Param("listingStatus") Integer listingStatus,
            @Param("goodsSeckillList") List<GoodsSeckill> goodsSeckillList);
    void updSeckillStatus();
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsSeckillService.java
@@ -78,4 +78,9 @@
    PageDTO<HomeGoodsSeckillVO> getHomeGoodsSeckillVOList(HomeGoodsSkuDTO homeGoodsSkuDTO);
    HomeGoodsSeckillInfoVO getHomeGoodsSeckillInfo(@RequestBody HomeGoodsSkuDTO homeGoodsSkuDTO);
    /**
     * 结束异常的秒杀
     */
    void updSeckillStatus();
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsGroupPurchaseServiceImpl.java
@@ -401,12 +401,20 @@
            goodsGroupPurchaseInfoVO.setYears(String.valueOf(byId.getYears().getYear()));
            goodsGroupPurchaseInfoVO.setCoverPic(byId.getCoverPic());
            goodsGroupPurchaseInfoVO.setPrice(byId.getPrice());
            if (StringUtils.isNotBlank(one.getShareTitle())) {
            goodsGroupPurchaseInfoVO.setShareTitle(one.getShareTitle());
            } else {
                goodsGroupPurchaseInfoVO.setShareTitle(byId.getSkuName());
            }
            if (StringUtils.isNotBlank(one.getSharePic())) {
                goodsGroupPurchaseInfoVO.setSharePic(one.getSharePic());
            } else {
                goodsGroupPurchaseInfoVO.setSharePic(byId.getCoverPic());
            }
            goodsGroupPurchaseInfoVO.setGroupStatus(one.getGroupStatus());
            goodsGroupPurchaseInfoVO.setStartStatus(one.getStartStatus());
            goodsGroupPurchaseInfoVO.setStartTime(one.getStartTime());
            goodsGroupPurchaseInfoVO.setEndTime(one.getEndTime());
            goodsGroupPurchaseInfoVO.setSharePic(one.getSharePic());
            goodsGroupPurchaseInfoVO.setGroupPurchasePrice(one.getGroupPurchasePrice());
            goodsGroupPurchaseInfoVO.setGroupSize(one.getGroupSize());
            goodsGroupPurchaseInfoVO.setLimitNumber(one.getLimitNumber());
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSeckillServiceImpl.java
@@ -476,6 +476,16 @@
        homeGoodsSeckillInfoVO.setCoverPic(data6.getCoverPic());
        homeGoodsSeckillInfoVO.setAlbum(data6.getAlbum());
        homeGoodsSeckillInfoVO.setShareTitle(byId.getShareTitle());
        if (StringUtils.isNotBlank(byId.getShareTitle())) {
            homeGoodsSeckillInfoVO.setShareTitle(byId.getShareTitle());
        } else {
            homeGoodsSeckillInfoVO.setShareTitle(data6.getSkuName());
        }
        if (StringUtils.isNotBlank(byId.getSharePic())) {
            homeGoodsSeckillInfoVO.setSharePic(byId.getSharePic());
        } else {
            homeGoodsSeckillInfoVO.setSharePic(data6.getCoverPic());
        }
        homeGoodsSeckillInfoVO.setSeckillPrice(byId.getSeckillPrice());
        homeGoodsSeckillInfoVO.setDescription(data6.getDescription());
        homeGoodsSeckillInfoVO.setDetail(data6.getDetail());
@@ -512,4 +522,12 @@
        return homeGoodsSeckillInfoVO;
    }
    /**
     * 结束异常的秒杀
     */
    @Override
    public void updSeckillStatus() {
        baseMapper.updSeckillStatus();
    }
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSkuServiceImpl.java
@@ -476,9 +476,17 @@
        homeGoodsSkuInfoVO.setDescription(byId.getDescription());
        homeGoodsSkuInfoVO.setStock(byId.getStock());
        homeGoodsSkuInfoVO.setDetail(byId.getDetail());
        homeGoodsSkuInfoVO.setShareTitle(byId.getShareTitle());
        homeGoodsSkuInfoVO.setSharePic(byId.getSharePic());
        if (StringUtils.isBlank(byId.getShareTitle())) {
            homeGoodsSkuInfoVO.setShareTitle(byId.getSkuName());
        } else {
            homeGoodsSkuInfoVO.setShareTitle(byId.getShareTitle());
        }
        if (StringUtils.isBlank(byId.getSharePic())) {
            homeGoodsSkuInfoVO.setSharePic(byId.getCoverPic());
        } else {
            homeGoodsSkuInfoVO.setSharePic(byId.getSharePic());
        }
        LambdaQueryWrapper<GoodsGroupPurchase> queryWrapper1 =new LambdaQueryWrapper<>();
        queryWrapper1.eq(GoodsGroupPurchase::getListingStatus,
                        ListingStatusEnum.ON_SHELVES)
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/task/GoodsScheduler.java
@@ -49,4 +49,11 @@
            asyncMethodService.groupPurchaseScheduleTask(groupPurchaseList);
        }
    }
    // 每天凌晨执行
    @Scheduled(cron = "0 0 0 * * ?")
    private void timingTaskEnd() {
        log.info(">>>>>>>>>>>>>>>>>>>>结束异常秒杀任务<<<<<<<<<<<<<<<<<<<<");
        goodsSeckillService.updSeckillStatus();
    }
}
ruoyi-modules/ruoyi-goods/src/main/resources/bootstrap.yml
@@ -17,13 +17,14 @@
    nacos:
      discovery:
        # 服务注册地址
        server-addr: 127.0.0.1:8858
        server-addr: 127.0.0.1:8848
        service: ${spring.application.name}
        group: DEFAULT_GROUP
        namespace: 689e0f09-d102-460c-ac5c-5ea50a3174be
        ip: 192.168.110.188
      config:
        # 配置中心地址
        server-addr: 127.0.0.1:8858
        server-addr: 127.0.0.1:8848
        namespace: 689e0f09-d102-460c-ac5c-5ea50a3174be
        group: DEFAULT_GROUP
        name: ${spring.application.name}
ruoyi-modules/ruoyi-goods/src/main/resources/mapper/goods/GoodsSeckillMapper.xml
@@ -13,6 +13,7 @@
      </if>
    </where>
  </update>
  <select id="getGoodsSeckillPage"
    resultType="com.ruoyi.goods.controller.management.vo.GoodsSeckillVO">
    SELECT
@@ -39,4 +40,11 @@
    </where>
    ORDER BY gs.create_time DESC
  </select>
  <update id="updSeckillStatus">
    UPDATE t_goods_seckill
    SET start_status = 2
    WHERE del_flag = 0
      AND start_status != 2
      AND end_time &lt; CURTIME()
  </update>
</mapper>
ruoyi-modules/ruoyi-member/pom.xml
@@ -125,18 +125,6 @@
      <version>4.39.95.ALL</version>
    </dependency>
    <dependency>
      <groupId>cn.afterturn</groupId>
      <artifactId>easypoi-spring-boot-starter</artifactId>
      <version>4.0.0</version>
      <exclusions>
        <exclusion>
          <artifactId>guava</artifactId>
          <groupId>com.google.guava</groupId>
        </exclusion>
      </exclusions>
    </dependency>
    <!-- 分布式事务 -->
    <dependency>
      <groupId>com.ruoyi</groupId>
ruoyi-modules/ruoyi-member/src/main/resources/bootstrap.yml
@@ -17,13 +17,14 @@
    nacos:
      discovery:
        # 服务注册地址
        server-addr: 127.0.0.1:8858
        server-addr: 127.0.0.1:8848
        service: ${spring.application.name}
        group: DEFAULT_GROUP
        namespace: 689e0f09-d102-460c-ac5c-5ea50a3174be
        ip: 192.168.110.188
      config:
        # 配置中心地址
        server-addr: 127.0.0.1:8858
        server-addr: 127.0.0.1:8848
        namespace: 689e0f09-d102-460c-ac5c-5ea50a3174be
        group: DEFAULT_GROUP
        name: ${spring.application.name}
ruoyi-modules/ruoyi-order/pom.xml
@@ -154,18 +154,6 @@
      <version>1.1.9</version>
    </dependency>
    <dependency>
      <groupId>cn.afterturn</groupId>
      <artifactId>easypoi-spring-boot-starter</artifactId>
      <version>4.0.0</version>
      <exclusions>
        <exclusion>
          <artifactId>guava</artifactId>
          <groupId>com.google.guava</groupId>
        </exclusion>
      </exclusions>
    </dependency>
    <!-- 分布式事务 -->
    <dependency>
      <groupId>com.ruoyi</groupId>
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/management/MgtBusinessDataController.java
@@ -7,6 +7,7 @@
import com.ruoyi.order.service.impl.MgtBusinessDataService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import javax.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
@@ -50,4 +51,17 @@
    public R<MgtOrderStaticsChartVO> getChart() {
        return R.ok(mgtBusinessDataService.getChart());
    }
    /**
     * 业务数据导出
     *
     * @param query
     * @param response
     */
    @ApiOperation("导出业务数据统计")
    @PostMapping("/export")
    public void exportBusinessData(@Validated @RequestBody MgtOrderStaticsQuery query,
            HttpServletResponse response) {
        mgtBusinessDataService.exportBusinessData(query, response);
    }
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/management/vo/MgtOrderStaticsVO.java
@@ -1,5 +1,6 @@
package com.ruoyi.order.controller.management.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
@@ -16,44 +17,58 @@
    private static final long serialVersionUID = -6511810306263817540L;
    @ApiModelProperty("商城订单统计-订单总数")
    @ExcelProperty("商城订单统计-订单总数")
    private Long mallOrderTotalCount;
    @ApiModelProperty("商城订单统计-商城订单")
    @ExcelProperty("商城订单统计-商城订单")
    private Long mallOrderCount;
    @ApiModelProperty("商城订单统计-秒杀订单")
    @ExcelProperty("商城订单统计-秒杀订单")
    private Long seckillOrderCount;
    @ApiModelProperty("商城订单统计-团购订单")
    @ExcelProperty("商城订单统计-团购订单")
    private Long groupPurchaseOrderCount;
    @ApiModelProperty("商城订单统计-订单总金额")
    @ExcelProperty("商城订单统计-订单总金额")
    private BigDecimal mallOrderTotalAmount;
    @ApiModelProperty("商城订单统计-商城总金额")
    @ExcelProperty("商城订单统计-商城总金额")
    private BigDecimal mallTotalAmount;
    @ApiModelProperty("商城订单统计-秒杀总金额")
    @ExcelProperty("商城订单统计-秒杀总金额")
    private BigDecimal seckillTotalAmount;
    @ApiModelProperty("商城订单统计-团购总金额")
    @ExcelProperty("商城订单统计-团购总金额")
    private BigDecimal groupPurchaseTotalAmount;
    @ApiModelProperty("拍卖订单统计-订单总数")
    @ExcelProperty("拍卖订单统计-订单总数")
    private Long auctionOrderTotalCount;
    @ApiModelProperty("拍卖订单统计-拍卖商品订单")
    @ExcelProperty("拍卖订单统计-拍卖商品订单")
    private Long auctionGoodsOrderCount;
    @ApiModelProperty("拍卖订单统计-拍卖场订单")
    @ExcelProperty("拍卖订单统计-拍卖场订单")
    private Long auctionSalesroomOrderCount;
    @ApiModelProperty("拍卖订单统计-订单总金额")
    @ExcelProperty("拍卖订单统计-订单总金额")
    private BigDecimal auctionOrderTotalAmount;
    @ApiModelProperty("拍卖订单统计-拍卖商品总金额")
    @ExcelProperty("拍卖订单统计-拍卖商品总金额")
    private BigDecimal auctionGoodsTotalAmount;
    
    @ApiModelProperty("拍卖订单统计-拍卖场总金额")
    @ExcelProperty("拍卖订单统计-拍卖场总金额")
    private BigDecimal auctionSalesroomTotalAmount;
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/MgtBusinessDataService.java
@@ -1,5 +1,7 @@
package com.ruoyi.order.service.impl;
import com.alibaba.excel.EasyExcel;
import com.google.common.collect.Lists;
import com.ruoyi.common.core.enums.AuctionOrderTypeEnum;
import com.ruoyi.common.core.enums.OrderFromEnum;
import com.ruoyi.common.core.enums.OrderTypeEnum;
@@ -15,6 +17,7 @@
import com.ruoyi.order.service.IOrderService;
import com.ruoyi.system.api.domain.Order;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
@@ -29,6 +32,7 @@
import java.util.concurrent.Executors;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.NotNull;
@@ -57,10 +61,8 @@
        LocalDateTime startTime = timeByTimeType.get(0);
        LocalDateTime endTime = timeByTimeType.get(1);
        List<Order> orderList = orderService.getStaticsOrderList(startTime, endTime);
        if (orderList.isEmpty()) {
            throw new ServiceException("暂无数据");
        }
        MgtOrderStaticsVO mgtOrderStaticsVO = new MgtOrderStaticsVO();
        if (CollUtils.isNotEmpty(orderList)) {
        /* ***************************************商城订单统计*************************************** */
        // 商城订单统计-订单总数
        long mallOrderTotalCount = orderList.stream()
@@ -76,7 +78,8 @@
                .count();
        // 商城订单统计-团购订单
        long groupPurchaseOrderCount = orderList.stream()
                .filter(order -> order.getOrderFrom().equals(OrderFromEnum.GROUP_PURCHASE_ORDERS))
                    .filter(order -> order.getOrderFrom()
                            .equals(OrderFromEnum.GROUP_PURCHASE_ORDERS))
                .count();
        // 商城订单统计-订单总金额
        BigDecimal mallOrderTotalAmount = orderList.stream()
@@ -93,7 +96,8 @@
        // 商城订单统计-团购总金额
        BigDecimal groupPurchaseTotalAmount = orderList.stream()
                .filter(order -> order.getOrderFrom().equals(OrderFromEnum.GROUP_PURCHASE_ORDERS))
                    .filter(order -> order.getOrderFrom()
                            .equals(OrderFromEnum.GROUP_PURCHASE_ORDERS))
                .map(Order::getTotalAmount).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
        mgtOrderStaticsVO.setMallOrderTotalCount(mallOrderTotalCount);
@@ -114,12 +118,14 @@
        // 拍卖订单统计-拍卖商品订单
        long auctionGoodsOrderCount = orderList.stream()
                .filter(order -> order.getOrderFrom().equals(OrderFromEnum.AUCTION_ORDERS)
                        && order.getAuctionOrderType().equals(AuctionOrderTypeEnum.REGULAR_ITEMS))
                            && order.getAuctionOrderType()
                            .equals(AuctionOrderTypeEnum.REGULAR_ITEMS))
                .count();
        // 拍卖订单统计-拍卖场订单
        long auctionSalesroomOrderCount = orderList.stream()
                .filter(order -> order.getOrderFrom().equals(OrderFromEnum.AUCTION_ORDERS)
                        && order.getAuctionOrderType().equals(AuctionOrderTypeEnum.AUCTION_ITEMS))
                            && order.getAuctionOrderType()
                            .equals(AuctionOrderTypeEnum.AUCTION_ITEMS))
                .count();
        // 拍卖订单统计-订单总金额
        BigDecimal auctionOrderTotalAmount = orderList.stream()
@@ -129,13 +135,15 @@
        // 拍卖订单统计-拍卖商品总金额
        BigDecimal auctionGoodsTotalAmount = orderList.stream()
                .filter(order -> order.getOrderFrom().equals(OrderFromEnum.AUCTION_ORDERS)
                        && order.getAuctionOrderType().equals(AuctionOrderTypeEnum.REGULAR_ITEMS)
                            && order.getAuctionOrderType()
                            .equals(AuctionOrderTypeEnum.REGULAR_ITEMS)
                )
                .map(Order::getTotalAmount).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
        // 拍卖订单统计-拍卖场总金额
        BigDecimal auctionSalesroomTotalAmount = orderList.stream()
                .filter(order -> order.getOrderFrom().equals(OrderFromEnum.AUCTION_ORDERS)
                        && order.getAuctionOrderType().equals(AuctionOrderTypeEnum.AUCTION_ITEMS))
                            && order.getAuctionOrderType()
                            .equals(AuctionOrderTypeEnum.AUCTION_ITEMS))
                .map(Order::getTotalAmount).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
        mgtOrderStaticsVO.setAuctionOrderTotalCount(auctionOrderTotalCount);
@@ -145,6 +153,7 @@
        mgtOrderStaticsVO.setAuctionOrderTotalAmount(auctionOrderTotalAmount);
        mgtOrderStaticsVO.setAuctionGoodsTotalAmount(auctionGoodsTotalAmount);
        mgtOrderStaticsVO.setAuctionSalesroomTotalAmount(auctionSalesroomTotalAmount);
        }
        return mgtOrderStaticsVO;
    }
@@ -310,4 +319,29 @@
                .limit(numOfDaysBetween + 1) // 加1是因为包含结束日期
                .collect(Collectors.toList());
    }
    /**
     * 业务数据导出
     *
     * @param query
     * @param response
     */
    public void exportBusinessData(MgtOrderStaticsQuery query, HttpServletResponse response) {
        MgtOrderStaticsVO overview = getOverview(query);
        // 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman
        response.setContentType(
                "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setCharacterEncoding("utf-8");
        // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
        try {
            String fileName = URLEncoder.encode("业务数据", "UTF-8").replaceAll("\\+", "%20");
            response.setHeader("Content-disposition",
                    "attachment;filename*=utf-8''" + fileName + ".xlsx");
            EasyExcel.write(response.getOutputStream(), MgtOrderStaticsVO.class)
                    .sheet("业务数据")
                    .doWrite(Lists.newArrayList(overview));
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}
ruoyi-modules/ruoyi-order/src/main/resources/bootstrap.yml
@@ -17,13 +17,14 @@
    nacos:
      discovery:
        # 服务注册地址
        server-addr: 127.0.0.1:8858
        server-addr: 127.0.0.1:8848
        service: ${spring.application.name}
        group: DEFAULT_GROUP
        namespace: 689e0f09-d102-460c-ac5c-5ea50a3174be
        ip: 192.168.110.188
      config:
        # 配置中心地址
        server-addr: 127.0.0.1:8858
        server-addr: 127.0.0.1:8848
        namespace: 689e0f09-d102-460c-ac5c-5ea50a3174be
        group: DEFAULT_GROUP
        name: ${spring.application.name}
ruoyi-modules/ruoyi-promotion/src/main/resources/bootstrap.yml
@@ -17,14 +17,14 @@
    nacos:
      discovery:
        # 服务注册地址
        server-addr: 127.0.0.1:8858
        server-addr: 127.0.0.1:8848
        service: ${spring.application.name}
        group: DEFAULT_GROUP
        namespace: 689e0f09-d102-460c-ac5c-5ea50a3174be
        ip: 192.168.110.188
      config:
        # 配置中心地址
        server-addr: 127.0.0.1:8858
        server-addr: 127.0.0.1:8848
        namespace: 689e0f09-d102-460c-ac5c-5ea50a3174be
        group: DEFAULT_GROUP
        name: ${spring.application.name}
ruoyi-modules/ruoyi-seata-demo/pom.xml
@@ -97,17 +97,6 @@
      <version>1.2.47</version>
    </dependency>
    <dependency>
      <groupId>cn.afterturn</groupId>
      <artifactId>easypoi-spring-boot-starter</artifactId>
      <version>4.0.0</version>
      <exclusions>
        <exclusion>
          <artifactId>guava</artifactId>
          <groupId>com.google.guava</groupId>
        </exclusion>
      </exclusions>
    </dependency>
    <!-- 分布式事务 -->
    <dependency>
      <groupId>com.ruoyi</groupId>
ruoyi-modules/ruoyi-seata-demo/src/main/resources/bootstrap.yml
@@ -17,13 +17,13 @@
    nacos:
      discovery:
        # 服务注册地址
        server-addr: 192.168.110.188:8858
        server-addr: 192.168.110.188:8848
        service: ${spring.application.name}
        group: DEFAULT_GROUP
        namespace: 689e0f09-d102-460c-ac5c-5ea50a3174be
      config:
        # 配置中心地址
        server-addr: 192.168.110.188:8858
        server-addr: 192.168.110.188:8848
        namespace: 689e0f09-d102-460c-ac5c-5ea50a3174be
        group: DEFAULT_GROUP
        name: ${spring.application.name}
ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml
@@ -17,13 +17,13 @@
    nacos:
      discovery:
        # 服务注册地址
        server-addr: 192.168.110.188:8858
        server-addr: 192.168.110.188:8848
        service: ${spring.application.name}
        group: DEFAULT_GROUP
        namespace: 689e0f09-d102-460c-ac5c-5ea50a3174be
      config:
        # 配置中心地址
        server-addr: 192.168.110.188:8858
        server-addr: 192.168.110.188:8848
        namespace: 689e0f09-d102-460c-ac5c-5ea50a3174be
        group: DEFAULT_GROUP
        name: ${spring.application.name}