commit f986f3fbd8ad2558139d8a140d8e83f1422d6291
Author: 赵忠林 <170083662@qq.com>
Date: Thu Jul 24 01:21:41 2025 +0800
2.0版本分离
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..2374b22
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,32 @@
+HELP.md
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**
+!**/src/test/**
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+
+### VS Code ###
+.vscode/
+/cert/
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..7d05e99
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,10 @@
+# 默认忽略的文件
+/shelf/
+/workspace.xml
+# 基于编辑器的 HTTP 客户端请求
+/httpRequests/
+# 依赖于环境的 Maven 主目录路径
+/mavenHomeManager.xml
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..f407202
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,391 @@
+
+
+ 4.0.0
+
+ com.gxwebsoft
+ com-gxwebsoft-modules
+ 1.5.0
+
+ com-gxwebsoft-api
+ WebSoftApi project for Spring Boot
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.5.4
+
+
+
+
+ 1.8
+ UTF-8
+ UTF-8
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-devtools
+ runtime
+ true
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-aop
+
+
+
+
+ org.springframework.boot
+ spring-boot-configuration-processor
+ true
+
+
+
+
+ org.projectlombok
+ lombok
+ true
+
+
+
+
+ mysql
+ mysql-connector-java
+ runtime
+
+
+
+
+ com.alibaba
+ druid-spring-boot-starter
+ 1.2.6
+
+
+
+
+ com.baomidou
+ mybatis-plus-boot-starter
+ 3.4.3.3
+
+
+
+
+ com.github.yulichang
+ mybatis-plus-join-boot-starter
+ 1.4.5
+
+
+
+
+ com.baomidou
+ mybatis-plus-generator
+ 3.4.1
+
+
+
+
+ cn.hutool
+ hutool-core
+ 5.8.11
+
+
+ cn.hutool
+ hutool-extra
+ 5.8.11
+
+
+ cn.hutool
+ hutool-http
+ 5.8.11
+
+
+ cn.hutool
+ hutool-crypto
+ 5.8.11
+
+
+
+
+ cn.afterturn
+ easypoi-base
+ 4.4.0
+
+
+
+
+ org.apache.tika
+ tika-core
+ 2.1.0
+
+
+
+
+ com.github.livesense
+ jodconverter-core
+ 1.0.5
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-mail
+
+
+
+
+ com.ibeetl
+ beetl
+ 3.6.1.RELEASE
+
+
+
+
+ io.springfox
+ springfox-boot-starter
+ 3.0.0
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-security
+
+
+
+
+ io.jsonwebtoken
+ jjwt-impl
+ 0.11.2
+
+
+ io.jsonwebtoken
+ jjwt-jackson
+ 0.11.2
+
+
+
+
+ com.github.whvcse
+ easy-captcha
+ 1.6.2
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-redis
+
+
+
+
+ com.aliyun
+ aliyun-java-sdk-core
+ 4.4.3
+
+
+
+ com.alipay.sdk
+ alipay-sdk-java
+ 4.35.0.ALL
+
+
+
+ org.bouncycastle
+ bcprov-jdk15on
+ 1.70
+
+
+
+ commons-logging
+ commons-logging
+ 1.2
+
+
+
+ com.alibaba
+ fastjson
+ 2.0.20
+
+
+
+
+ com.google.zxing
+ core
+ 3.3.3
+
+
+
+ com.google.code.gson
+ gson
+ 2.8.0
+
+
+
+ com.vaadin.external.google
+ android-json
+ 0.0.20131108.vaadin1
+ compile
+
+
+
+
+ com.corundumstudio.socketio
+ netty-socketio
+ 2.0.2
+
+
+
+
+ com.github.wechatpay-apiv3
+ wechatpay-java
+ 0.2.17
+
+
+
+
+ org.springframework.integration
+ spring-integration-mqtt
+
+
+ org.eclipse.paho
+ org.eclipse.paho.client.mqttv3
+ 1.2.0
+
+
+
+ com.github.binarywang
+ weixin-java-miniapp
+ 4.6.0
+
+
+
+ com.github.binarywang
+ weixin-java-mp
+ 4.6.0
+
+
+
+
+ com.aliyun.oss
+ aliyun-sdk-oss
+ 3.17.0
+
+
+
+ com.github.kuaidi100-api
+ sdk
+ 1.0.13
+
+
+
+
+ com.nuonuo
+ open-sdk
+ 1.0.5.2
+
+
+
+
+ com.github.xiaoymin
+ knife4j-spring-boot-starter
+ 3.0.3
+
+
+
+ com.belerweb
+ pinyin4j
+ 2.5.1
+
+
+
+
+ com.aliyun
+ alimt20181012
+ 1.0.3
+
+
+ com.aliyun
+ tea-openapi
+ 0.2.5
+
+
+
+ com.freewayso
+ image-combiner
+ 2.6.9
+
+
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
+
+
+
+
+
+
+
+ src/main/java
+
+ **/*Mapper.xml
+
+
+
+ src/main/resources
+
+ **
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+ 2.5.4
+
+
+
+ org.projectlombok
+ lombok
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 16
+ 16
+
+
+
+
+
+
+
+ aliYunMaven
+ https://maven.aliyun.com/repository/public
+
+
+
+
diff --git a/src/main/java/com/gxwebsoft/WebSoftApplication.java b/src/main/java/com/gxwebsoft/WebSoftApplication.java
new file mode 100644
index 0000000..1a7fa35
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/WebSoftApplication.java
@@ -0,0 +1,31 @@
+package com.gxwebsoft;
+
+import com.gxwebsoft.common.core.config.ConfigProperties;
+import com.gxwebsoft.common.core.config.MqttProperties;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+import org.springframework.web.socket.config.annotation.EnableWebSocket;
+
+/**
+ * 启动类
+ * Created by WebSoft on 2018-02-22 11:29:03
+ */
+@EnableAsync
+@EnableTransactionManagement
+@MapperScan("com.gxwebsoft.**.mapper")
+@EnableConfigurationProperties({ConfigProperties.class, MqttProperties.class})
+@SpringBootApplication
+@EnableScheduling
+@EnableWebSocket
+public class WebSoftApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(WebSoftApplication.class, args);
+ }
+
+}
diff --git a/src/main/java/com/gxwebsoft/bszx/controller/BszxBmController.java b/src/main/java/com/gxwebsoft/bszx/controller/BszxBmController.java
new file mode 100644
index 0000000..269a7e9
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/bszx/controller/BszxBmController.java
@@ -0,0 +1,164 @@
+package com.gxwebsoft.bszx.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.gxwebsoft.cms.service.CmsArticleService;
+import com.gxwebsoft.common.core.web.BaseController;
+import com.gxwebsoft.bszx.service.BszxBmService;
+import com.gxwebsoft.bszx.entity.BszxBm;
+import com.gxwebsoft.bszx.param.BszxBmParam;
+import com.gxwebsoft.common.core.web.ApiResult;
+import com.gxwebsoft.common.core.web.PageResult;
+import com.gxwebsoft.common.core.web.BatchParam;
+import com.gxwebsoft.common.core.annotation.OperationLog;
+import com.gxwebsoft.common.system.entity.User;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 百色中学-报名记录控制器
+ *
+ * @author 科技小王子
+ * @since 2025-03-06 22:50:25
+ */
+@Api(tags = "百色中学-报名记录管理")
+@RestController
+@RequestMapping("/api/bszx/bszx-bm")
+public class BszxBmController extends BaseController {
+ @Resource
+ private BszxBmService bszxBmService;
+ @Resource
+ private CmsArticleService cmsArticleService;
+
+ @PreAuthorize("hasAuthority('bszx:bszxBm:list')")
+ @ApiOperation("分页查询百色中学-报名记录")
+ @GetMapping("/page")
+ public ApiResult> page(BszxBmParam param) {
+ // 使用关联查询
+ return success(bszxBmService.pageRel(param));
+ }
+
+ @PreAuthorize("hasAuthority('bszx:bszxBm:list')")
+ @ApiOperation("查询全部百色中学-报名记录")
+ @GetMapping()
+ public ApiResult> list(BszxBmParam param) {
+ // 使用关联查询
+ return success(bszxBmService.listRel(param));
+ }
+
+ @PreAuthorize("hasAuthority('bszx:bszxBm:list')")
+ @ApiOperation("根据id查询百色中学-报名记录")
+ @GetMapping("/{id}")
+ public ApiResult get(@PathVariable("id") Integer id) {
+ // 使用关联查询
+ return success(bszxBmService.getByIdRel(id));
+ }
+
+ @OperationLog
+ @ApiOperation("申请报名生成邀请函")
+ @PostMapping()
+ public ApiResult> save(@RequestBody BszxBm bszxBm) {
+ // 记录当前登录用户id
+ User loginUser = getLoginUser();
+ if (bszxBm.getName() == null) {
+ return fail("请填写姓名");
+ }
+ if (loginUser != null) {
+ bszxBm.setUserId(loginUser.getUserId());
+ if (bszxBmService.count(new LambdaQueryWrapper().eq(BszxBm::getUserId,loginUser.getUserId())) > 0) {
+ return fail("您已经报名过了",null);
+ }
+ if (bszxBmService.save(bszxBm)) {
+ cmsArticleService.saveInc(bszxBm.getFormId());
+ return success("报名成功");
+ }
+ }
+ return fail("添加失败");
+ }
+
+ @OperationLog
+ @ApiOperation("修改报名信息")
+ @PutMapping()
+ public ApiResult> update(@RequestBody BszxBm bszxBm) {
+ final User loginUser = getLoginUser();
+ if(loginUser == null){
+ return fail("请先登录");
+ }
+ if (bszxBmService.updateById(bszxBm)) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+ @PreAuthorize("hasAuthority('bszx:bszxBm:remove')")
+ @OperationLog
+ @ApiOperation("删除报名记录")
+ @DeleteMapping("/{id}")
+ public ApiResult> remove(@PathVariable("id") Integer id) {
+ if (bszxBmService.removeById(id)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+ @PreAuthorize("hasAuthority('bszx:bszxBm:save')")
+ @OperationLog
+ @ApiOperation("批量添加百色中学-报名记录")
+ @PostMapping("/batch")
+ public ApiResult> saveBatch(@RequestBody List list) {
+ if (bszxBmService.saveBatch(list)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+ @PreAuthorize("hasAuthority('bszx:bszxBm:update')")
+ @OperationLog
+ @ApiOperation("批量修改百色中学-报名记录")
+ @PutMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody BatchParam batchParam) {
+ if (batchParam.update(bszxBmService, "id")) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+ @PreAuthorize("hasAuthority('bszx:bszxBm:remove')")
+ @OperationLog
+ @ApiOperation("批量删除百色中学-报名记录")
+ @DeleteMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody List ids) {
+ if (bszxBmService.removeByIds(ids)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+ @ApiOperation("查询我的报名记录")
+ @GetMapping("/myPage")
+ public ApiResult> myPage(BszxBmParam param) {
+ // 使用关联查询
+ if (getLoginUser() != null) {
+ param.setUserId(getLoginUserId());
+ return success(bszxBmService.pageRel(param));
+ }
+ return fail("请先登录",null);
+ }
+
+ @ApiOperation("获取海报地址")
+ @GetMapping("/generatePoster")
+ public ApiResult> generatePoster() throws Exception {
+ if (getLoginUser() == null) {
+ return fail("请先登录",null);
+ }
+ final BszxBm bm = bszxBmService.getOne(new LambdaQueryWrapper().eq(BszxBm::getUserId, getLoginUser().getUserId()).last("limit 1"));
+ return success("生成宣传海报",bszxBmService.generatePoster(bm));
+ }
+
+}
diff --git a/src/main/java/com/gxwebsoft/bszx/controller/BszxBranchController.java b/src/main/java/com/gxwebsoft/bszx/controller/BszxBranchController.java
new file mode 100644
index 0000000..8699de3
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/bszx/controller/BszxBranchController.java
@@ -0,0 +1,121 @@
+package com.gxwebsoft.bszx.controller;
+
+import com.gxwebsoft.common.core.web.BaseController;
+import com.gxwebsoft.bszx.service.BszxBranchService;
+import com.gxwebsoft.bszx.entity.BszxBranch;
+import com.gxwebsoft.bszx.param.BszxBranchParam;
+import com.gxwebsoft.common.core.web.ApiResult;
+import com.gxwebsoft.common.core.web.PageResult;
+import com.gxwebsoft.common.core.web.PageParam;
+import com.gxwebsoft.common.core.web.BatchParam;
+import com.gxwebsoft.common.core.annotation.OperationLog;
+import com.gxwebsoft.common.system.entity.User;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 百色中学-分部控制器
+ *
+ * @author 科技小王子
+ * @since 2025-03-17 17:18:22
+ */
+@Api(tags = "百色中学-分部管理")
+@RestController
+@RequestMapping("/api/bszx/bszx-branch")
+public class BszxBranchController extends BaseController {
+ @Resource
+ private BszxBranchService bszxBranchService;
+
+ @ApiOperation("分页查询百色中学-分部")
+ @GetMapping("/page")
+ public ApiResult> page(BszxBranchParam param) {
+ // 使用关联查询
+ return success(bszxBranchService.pageRel(param));
+ }
+
+ @ApiOperation("查询全部百色中学-分部")
+ @GetMapping()
+ public ApiResult> list(BszxBranchParam param) {
+ // 使用关联查询
+ return success(bszxBranchService.listRel(param));
+ }
+
+ @ApiOperation("根据id查询百色中学-分部")
+ @GetMapping("/{id}")
+ public ApiResult get(@PathVariable("id") Integer id) {
+ // 使用关联查询
+ return success(bszxBranchService.getByIdRel(id));
+ }
+
+ @PreAuthorize("hasAuthority('bszx:bszxBranch:save')")
+ @OperationLog
+ @ApiOperation("添加百色中学-分部")
+ @PostMapping()
+ public ApiResult> save(@RequestBody BszxBranch bszxBranch) {
+ if (bszxBranchService.save(bszxBranch)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+ @PreAuthorize("hasAuthority('bszx:bszxBranch:update')")
+ @OperationLog
+ @ApiOperation("修改百色中学-分部")
+ @PutMapping()
+ public ApiResult> update(@RequestBody BszxBranch bszxBranch) {
+ if (bszxBranchService.updateById(bszxBranch)) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+ @PreAuthorize("hasAuthority('bszx:bszxBranch:remove')")
+ @OperationLog
+ @ApiOperation("删除百色中学-分部")
+ @DeleteMapping("/{id}")
+ public ApiResult> remove(@PathVariable("id") Integer id) {
+ if (bszxBranchService.removeById(id)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+ @PreAuthorize("hasAuthority('bszx:bszxBranch:save')")
+ @OperationLog
+ @ApiOperation("批量添加百色中学-分部")
+ @PostMapping("/batch")
+ public ApiResult> saveBatch(@RequestBody List list) {
+ if (bszxBranchService.saveBatch(list)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+ @PreAuthorize("hasAuthority('bszx:bszxBranch:update')")
+ @OperationLog
+ @ApiOperation("批量修改百色中学-分部")
+ @PutMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody BatchParam batchParam) {
+ if (batchParam.update(bszxBranchService, "id")) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+ @PreAuthorize("hasAuthority('bszx:bszxBranch:remove')")
+ @OperationLog
+ @ApiOperation("批量删除百色中学-分部")
+ @DeleteMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody List ids) {
+ if (bszxBranchService.removeByIds(ids)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+}
diff --git a/src/main/java/com/gxwebsoft/bszx/controller/BszxClassController.java b/src/main/java/com/gxwebsoft/bszx/controller/BszxClassController.java
new file mode 100644
index 0000000..09ad307
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/bszx/controller/BszxClassController.java
@@ -0,0 +1,156 @@
+package com.gxwebsoft.bszx.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.gxwebsoft.bszx.entity.BszxBranch;
+import com.gxwebsoft.bszx.entity.BszxEra;
+import com.gxwebsoft.bszx.entity.BszxGrade;
+import com.gxwebsoft.bszx.param.BszxGradeParam;
+import com.gxwebsoft.bszx.service.BszxBranchService;
+import com.gxwebsoft.bszx.service.BszxEraService;
+import com.gxwebsoft.bszx.service.BszxGradeService;
+import com.gxwebsoft.common.core.web.BaseController;
+import com.gxwebsoft.bszx.service.BszxClassService;
+import com.gxwebsoft.bszx.entity.BszxClass;
+import com.gxwebsoft.bszx.param.BszxClassParam;
+import com.gxwebsoft.common.core.web.ApiResult;
+import com.gxwebsoft.common.core.web.PageResult;
+import com.gxwebsoft.common.core.web.BatchParam;
+import com.gxwebsoft.common.core.annotation.OperationLog;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 百色中学-班级控制器
+ *
+ * @author 科技小王子
+ * @since 2025-03-06 22:50:25
+ */
+@Api(tags = "百色中学-班级管理")
+@RestController
+@RequestMapping("/api/bszx/bszx-class")
+public class BszxClassController extends BaseController {
+ @Resource
+ private BszxClassService bszxClassService;
+ @Resource
+ private BszxGradeService bszxGradeService;
+ @Resource
+ private BszxBranchService bszxBranchService;
+
+ @ApiOperation("分页查询百色中学-班级")
+ @GetMapping("/page")
+ public ApiResult> page(BszxClassParam param) {
+ // 使用关联查询
+ return success(bszxClassService.pageRel(param));
+ }
+
+ @ApiOperation("查询全部百色中学-班级")
+ @GetMapping()
+ public ApiResult> list(BszxClassParam param) {
+ // 使用关联查询
+ return success(bszxClassService.listRel(param));
+ }
+
+ @ApiOperation("根据id查询百色中学-班级")
+ @GetMapping("/{id}")
+ public ApiResult get(@PathVariable("id") Integer id) {
+ // 使用关联查询
+ return success(bszxClassService.getByIdRel(id));
+ }
+
+ @ApiOperation("百色中学-年级班级数据")
+ @GetMapping("/tree")
+ public ApiResult> tree() {
+ final List list = bszxBranchService.list();
+ final BszxGradeParam bszxGradeParam = new BszxGradeParam();
+ final List gradeList = bszxGradeService.listRel(bszxGradeParam);
+ final BszxClassParam bszxClassParam = new BszxClassParam();
+ final List bszxClasseList = bszxClassService.listRel(bszxClassParam);
+ final Map> collectClass = bszxClasseList.stream().collect(Collectors.groupingBy(BszxClass::getGradeId));
+ gradeList.forEach(d -> {
+ d.setChildren(collectClass.get(d.getId()));
+ });
+ final Map> collectGrade = gradeList.stream().collect(Collectors.groupingBy(BszxGrade::getBranch));
+
+ list.forEach(d -> {
+ d.setChildren(collectGrade.get(d.getId()));
+ });
+
+ return success(list);
+ }
+
+ @PreAuthorize("hasAuthority('bszx:bszxClass:save')")
+ @OperationLog
+ @ApiOperation("添加百色中学-班级")
+ @PostMapping()
+ public ApiResult> save(@RequestBody BszxClass bszxClass) {
+ if (bszxClassService.save(bszxClass)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+ @PreAuthorize("hasAuthority('bszx:bszxClass:update')")
+ @OperationLog
+ @ApiOperation("修改百色中学-班级")
+ @PutMapping()
+ public ApiResult> update(@RequestBody BszxClass bszxClass) {
+ if (bszxClassService.updateById(bszxClass)) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+ @PreAuthorize("hasAuthority('bszx:bszxClass:remove')")
+ @OperationLog
+ @ApiOperation("删除百色中学-班级")
+ @DeleteMapping("/{id}")
+ public ApiResult> remove(@PathVariable("id") Integer id) {
+ if (bszxClassService.removeById(id)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+ @PreAuthorize("hasAuthority('bszx:bszxClass:save')")
+ @OperationLog
+ @ApiOperation("批量添加百色中学-班级")
+ @PostMapping("/batch")
+ public ApiResult> saveBatch(@RequestBody List list) {
+ if (bszxClassService.saveBatch(list)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+ @PreAuthorize("hasAuthority('bszx:bszxClass:update')")
+ @OperationLog
+ @ApiOperation("批量修改百色中学-班级")
+ @PutMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody BatchParam batchParam) {
+ if (batchParam.update(bszxClassService, "id")) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+ @PreAuthorize("hasAuthority('bszx:bszxClass:remove')")
+ @OperationLog
+ @ApiOperation("批量删除百色中学-班级")
+ @DeleteMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody List ids) {
+ if (bszxClassService.removeByIds(ids)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+}
diff --git a/src/main/java/com/gxwebsoft/bszx/controller/BszxEraController.java b/src/main/java/com/gxwebsoft/bszx/controller/BszxEraController.java
new file mode 100644
index 0000000..b752874
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/bszx/controller/BszxEraController.java
@@ -0,0 +1,121 @@
+package com.gxwebsoft.bszx.controller;
+
+import com.gxwebsoft.common.core.web.BaseController;
+import com.gxwebsoft.bszx.service.BszxEraService;
+import com.gxwebsoft.bszx.entity.BszxEra;
+import com.gxwebsoft.bszx.param.BszxEraParam;
+import com.gxwebsoft.common.core.web.ApiResult;
+import com.gxwebsoft.common.core.web.PageResult;
+import com.gxwebsoft.common.core.web.PageParam;
+import com.gxwebsoft.common.core.web.BatchParam;
+import com.gxwebsoft.common.core.annotation.OperationLog;
+import com.gxwebsoft.common.system.entity.User;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 百色中学-年代控制器
+ *
+ * @author 科技小王子
+ * @since 2025-03-06 22:50:25
+ */
+@Api(tags = "百色中学-年代管理")
+@RestController
+@RequestMapping("/api/bszx/bszx-era")
+public class BszxEraController extends BaseController {
+ @Resource
+ private BszxEraService bszxEraService;
+
+ @ApiOperation("分页查询百色中学-年代")
+ @GetMapping("/page")
+ public ApiResult> page(BszxEraParam param) {
+ // 使用关联查询
+ return success(bszxEraService.pageRel(param));
+ }
+
+ @ApiOperation("查询全部百色中学-年代")
+ @GetMapping()
+ public ApiResult> list(BszxEraParam param) {
+ // 使用关联查询
+ return success(bszxEraService.listRel(param));
+ }
+
+ @ApiOperation("根据id查询百色中学-年代")
+ @GetMapping("/{id}")
+ public ApiResult get(@PathVariable("id") Integer id) {
+ // 使用关联查询
+ return success(bszxEraService.getByIdRel(id));
+ }
+
+ @PreAuthorize("hasAuthority('bszx:bszxEra:save')")
+ @OperationLog
+ @ApiOperation("添加百色中学-年代")
+ @PostMapping()
+ public ApiResult> save(@RequestBody BszxEra bszxEra) {
+ if (bszxEraService.save(bszxEra)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+ @PreAuthorize("hasAuthority('bszx:bszxEra:update')")
+ @OperationLog
+ @ApiOperation("修改百色中学-年代")
+ @PutMapping()
+ public ApiResult> update(@RequestBody BszxEra bszxEra) {
+ if (bszxEraService.updateById(bszxEra)) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+ @PreAuthorize("hasAuthority('bszx:bszxEra:remove')")
+ @OperationLog
+ @ApiOperation("删除百色中学-年代")
+ @DeleteMapping("/{id}")
+ public ApiResult> remove(@PathVariable("id") Integer id) {
+ if (bszxEraService.removeById(id)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+ @PreAuthorize("hasAuthority('bszx:bszxEra:save')")
+ @OperationLog
+ @ApiOperation("批量添加百色中学-年代")
+ @PostMapping("/batch")
+ public ApiResult> saveBatch(@RequestBody List list) {
+ if (bszxEraService.saveBatch(list)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+ @PreAuthorize("hasAuthority('bszx:bszxEra:update')")
+ @OperationLog
+ @ApiOperation("批量修改百色中学-年代")
+ @PutMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody BatchParam batchParam) {
+ if (batchParam.update(bszxEraService, "id")) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+ @PreAuthorize("hasAuthority('bszx:bszxEra:remove')")
+ @OperationLog
+ @ApiOperation("批量删除百色中学-年代")
+ @DeleteMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody List ids) {
+ if (bszxEraService.removeByIds(ids)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+}
diff --git a/src/main/java/com/gxwebsoft/bszx/controller/BszxGradeController.java b/src/main/java/com/gxwebsoft/bszx/controller/BszxGradeController.java
new file mode 100644
index 0000000..4c37a62
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/bszx/controller/BszxGradeController.java
@@ -0,0 +1,121 @@
+package com.gxwebsoft.bszx.controller;
+
+import com.gxwebsoft.common.core.web.BaseController;
+import com.gxwebsoft.bszx.service.BszxGradeService;
+import com.gxwebsoft.bszx.entity.BszxGrade;
+import com.gxwebsoft.bszx.param.BszxGradeParam;
+import com.gxwebsoft.common.core.web.ApiResult;
+import com.gxwebsoft.common.core.web.PageResult;
+import com.gxwebsoft.common.core.web.PageParam;
+import com.gxwebsoft.common.core.web.BatchParam;
+import com.gxwebsoft.common.core.annotation.OperationLog;
+import com.gxwebsoft.common.system.entity.User;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 百色中学-年级控制器
+ *
+ * @author 科技小王子
+ * @since 2025-03-06 22:50:25
+ */
+@Api(tags = "百色中学-年级管理")
+@RestController
+@RequestMapping("/api/bszx/bszx-grade")
+public class BszxGradeController extends BaseController {
+ @Resource
+ private BszxGradeService bszxGradeService;
+
+ @ApiOperation("分页查询百色中学-年级")
+ @GetMapping("/page")
+ public ApiResult> page(BszxGradeParam param) {
+ // 使用关联查询
+ return success(bszxGradeService.pageRel(param));
+ }
+
+ @ApiOperation("查询全部百色中学-年级")
+ @GetMapping()
+ public ApiResult> list(BszxGradeParam param) {
+ // 使用关联查询
+ return success(bszxGradeService.listRel(param));
+ }
+
+ @ApiOperation("根据id查询百色中学-年级")
+ @GetMapping("/{id}")
+ public ApiResult get(@PathVariable("id") Integer id) {
+ // 使用关联查询
+ return success(bszxGradeService.getByIdRel(id));
+ }
+
+ @PreAuthorize("hasAuthority('bszx:bszxGrade:save')")
+ @OperationLog
+ @ApiOperation("添加百色中学-年级")
+ @PostMapping()
+ public ApiResult> save(@RequestBody BszxGrade bszxGrade) {
+ if (bszxGradeService.save(bszxGrade)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+ @PreAuthorize("hasAuthority('bszx:bszxGrade:update')")
+ @OperationLog
+ @ApiOperation("修改百色中学-年级")
+ @PutMapping()
+ public ApiResult> update(@RequestBody BszxGrade bszxGrade) {
+ if (bszxGradeService.updateById(bszxGrade)) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+ @PreAuthorize("hasAuthority('bszx:bszxGrade:remove')")
+ @OperationLog
+ @ApiOperation("删除百色中学-年级")
+ @DeleteMapping("/{id}")
+ public ApiResult> remove(@PathVariable("id") Integer id) {
+ if (bszxGradeService.removeById(id)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+ @PreAuthorize("hasAuthority('bszx:bszxGrade:save')")
+ @OperationLog
+ @ApiOperation("批量添加百色中学-年级")
+ @PostMapping("/batch")
+ public ApiResult> saveBatch(@RequestBody List list) {
+ if (bszxGradeService.saveBatch(list)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+ @PreAuthorize("hasAuthority('bszx:bszxGrade:update')")
+ @OperationLog
+ @ApiOperation("批量修改百色中学-年级")
+ @PutMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody BatchParam batchParam) {
+ if (batchParam.update(bszxGradeService, "id")) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+ @PreAuthorize("hasAuthority('bszx:bszxGrade:remove')")
+ @OperationLog
+ @ApiOperation("批量删除百色中学-年级")
+ @DeleteMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody List ids) {
+ if (bszxGradeService.removeByIds(ids)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+}
diff --git a/src/main/java/com/gxwebsoft/bszx/controller/BszxOrderController.java b/src/main/java/com/gxwebsoft/bszx/controller/BszxOrderController.java
new file mode 100644
index 0000000..f59fb8b
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/bszx/controller/BszxOrderController.java
@@ -0,0 +1,77 @@
+package com.gxwebsoft.bszx.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.gxwebsoft.bszx.entity.BszxBm;
+import com.gxwebsoft.bszx.entity.BszxPay;
+import com.gxwebsoft.bszx.param.BszxPayParam;
+import com.gxwebsoft.bszx.service.BszxBmService;
+import com.gxwebsoft.bszx.service.BszxPayService;
+import com.gxwebsoft.common.core.web.ApiResult;
+import com.gxwebsoft.common.core.web.BaseController;
+import com.gxwebsoft.common.core.web.PageResult;
+import com.gxwebsoft.shop.entity.ShopOrder;
+import com.gxwebsoft.shop.param.ShopOrderParam;
+import com.gxwebsoft.shop.service.ShopOrderService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * 百色中学-订单管理
+ *
+ * @author 科技小王子
+ * @since 2025-03-06 22:50:25
+ */
+@Api(tags = "百色中学-订单管理")
+@RestController
+@RequestMapping("/api/bszx/bszx-order")
+public class BszxOrderController extends BaseController {
+ @Resource
+ private BszxPayService bszxPayService;
+ @Resource
+ private BszxBmService bszxBmService;
+ @Resource
+ private ShopOrderService shopOrderService;
+
+ @ApiOperation("分页查询百色中学-订单列表")
+ @GetMapping("/page")
+ public ApiResult> page(ShopOrderParam param) {
+ // 使用关联查询
+ final PageResult result = shopOrderService.pageRel(param);
+ if(!CollectionUtils.isEmpty(result.getList())){
+ final Set userIds = result.getList().stream().map(ShopOrder::getUserId).collect(Collectors.toSet());
+ final List bmList = bszxBmService.list(new LambdaQueryWrapper().in(BszxBm::getUserId, userIds).isNotNull(BszxBm::getName));
+ final Map> collect = bmList.stream().collect(Collectors.groupingBy(BszxBm::getUserId));
+ final Set orderNos = result.getList().stream().map(ShopOrder::getOrderNo).collect(Collectors.toSet());
+ final BszxPayParam bszxPayParam = new BszxPayParam();
+ bszxPayParam.setOrderNos(orderNos);
+ final List bszxPays = bszxPayService.listRel(bszxPayParam);
+ final Map> collectByOrderNo = bszxPays.stream().collect(Collectors.groupingBy(BszxPay::getOrderNo));
+
+ result.getList().forEach(d -> {
+ final List pays = collectByOrderNo.get(d.getOrderNo());
+ if(!CollectionUtils.isEmpty(pays)){
+ d.setDeliveryStatus(20);
+ }
+ final List bmList1 = collect.get(d.getUserId());
+ if(!CollectionUtils.isEmpty(bmList1)){
+ final BszxBm bm = bmList1.get(0);
+ d.setBm(bm);
+ d.setRealName(bm.getName());
+ if(bm.getPhone() != null){
+ d.setPhone(bm.getPhone());
+ }
+ }
+ });
+ }
+ return success(result);
+ }
+
+}
diff --git a/src/main/java/com/gxwebsoft/bszx/controller/BszxPayController.java b/src/main/java/com/gxwebsoft/bszx/controller/BszxPayController.java
new file mode 100644
index 0000000..4332936
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/bszx/controller/BszxPayController.java
@@ -0,0 +1,337 @@
+package com.gxwebsoft.bszx.controller;
+
+import cn.hutool.core.date.DateField;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.NumberUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.gxwebsoft.bszx.entity.BszxBm;
+import com.gxwebsoft.bszx.service.BszxBmService;
+import com.wechat.pay.java.core.notification.*;
+import com.gxwebsoft.common.core.config.ConfigProperties;
+import com.gxwebsoft.common.core.security.JwtUtil;
+import com.gxwebsoft.common.core.utils.RedisUtil;
+import com.gxwebsoft.common.core.web.BaseController;
+import com.gxwebsoft.bszx.service.BszxPayService;
+import com.gxwebsoft.bszx.entity.BszxPay;
+import com.gxwebsoft.bszx.param.BszxPayParam;
+import com.gxwebsoft.common.core.web.ApiResult;
+import com.gxwebsoft.common.core.web.PageResult;
+import com.gxwebsoft.common.core.web.BatchParam;
+import com.gxwebsoft.common.core.annotation.OperationLog;
+import com.gxwebsoft.common.system.entity.Payment;
+import com.gxwebsoft.common.system.entity.User;
+import com.gxwebsoft.shop.entity.ShopOrder;
+import com.gxwebsoft.shop.service.ShopOrderService;
+import com.wechat.pay.java.core.notification.RequestParam;
+import com.wechat.pay.java.service.partnerpayments.jsapi.JsapiService;
+import com.wechat.pay.java.service.partnerpayments.jsapi.model.Transaction;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.math.BigDecimal;
+import java.util.*;
+
+/**
+ * 百色中学-捐款记录控制器
+ *
+ * @author 科技小王子
+ * @since 2025-03-06 22:50:25
+ */
+@Api(tags = "百色中学-捐款记录管理")
+@RestController
+@RequestMapping("/api/bszx/bszx-pay")
+public class BszxPayController extends BaseController {
+ public static JsapiService service;
+ @Resource
+ private BszxPayService bszxPayService;
+ @Resource
+ private BszxBmService bszxBmService;
+ @Resource
+ private RedisUtil redisUtil;
+ @Resource
+ private ShopOrderService shopOrderService;
+ @Resource
+ private ConfigProperties conf;
+ @Value("${spring.profiles.active}")
+ String active;
+
+ @PreAuthorize("hasAuthority('bszx:bszxPay:list')")
+ @ApiOperation("分页查询百色中学-捐款记录")
+ @GetMapping("/page")
+ public ApiResult> page(BszxPayParam param) {
+ // 使用关联查询
+ return success(bszxPayService.pageRel(param));
+ }
+
+ @PreAuthorize("hasAuthority('bszx:bszxPay:list')")
+ @ApiOperation("查询全部百色中学-捐款记录")
+ @GetMapping()
+ public ApiResult> list(BszxPayParam param) {
+ // 使用关联查询
+ return success(bszxPayService.listRel(param));
+ }
+
+ @PreAuthorize("hasAuthority('bszx:bszxPay:list')")
+ @ApiOperation("根据id查询百色中学-捐款记录")
+ @GetMapping("/{id}")
+ public ApiResult get(@PathVariable("id") Integer id) {
+ // 使用关联查询
+ return success(bszxPayService.getByIdRel(id));
+ }
+
+ @OperationLog
+ @ApiOperation("活动捐款")
+ @PostMapping()
+ public ApiResult> save(@RequestBody BszxPay bszxPay, HttpServletRequest request) {
+ if (bszxPay.getPrice().compareTo(BigDecimal.ZERO) == 0) {
+ return fail("金额不能为0");
+ }
+ // 记录当前登录用户id
+ User loginUser = getLoginUser();
+ if (loginUser != null) {
+ String access_token = JwtUtil.getAccessToken(request);
+ bszxPay.setUserId(loginUser.getUserId());
+ // 微信openid(必填)
+ if (StrUtil.isBlank(loginUser.getOpenid())) {
+ return fail("微信openid(必填)");
+ }
+ final BszxBm bmInfo = bszxBmService.getByUserId(loginUser.getUserId());
+ bszxPay.setName(bmInfo.getName());
+ bszxPay.setSex(bmInfo.getSex());
+ bszxPay.setPhone(bmInfo.getPhone());
+ bszxPay.setBranchName(bmInfo.getBranchName());
+ bszxPay.setGradeName(bmInfo.getGradeName());
+ bszxPay.setClassName(bmInfo.getClassName());
+ bszxPay.setAddress(bmInfo.getAddress());
+ bszxPay.setWorkUnit(bmInfo.getWorkUnit());
+ bszxPay.setPosition(bmInfo.getPosition());
+ bszxPay.setAge(bmInfo.getAge());
+ bszxPay.setNumber(bmInfo.getNumber());
+ }
+ if (bszxPayService.save(bszxPay)) {
+ // 调起支付
+ return success("下单成功", bszxPay);
+ }
+ return fail("添加失败");
+ }
+
+ @PreAuthorize("hasAuthority('bszx:bszxPay:update')")
+ @OperationLog
+ @ApiOperation("修改百色中学-捐款记录")
+ @PutMapping()
+ public ApiResult> update(@RequestBody BszxPay bszxPay) {
+ if (bszxPayService.updateById(bszxPay)) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+ @PreAuthorize("hasAuthority('bszx:bszxPay:remove')")
+ @OperationLog
+ @ApiOperation("删除百色中学-捐款记录")
+ @DeleteMapping("/{id}")
+ public ApiResult> remove(@PathVariable("id") Integer id) {
+ if (bszxPayService.removeById(id)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+ @PreAuthorize("hasAuthority('bszx:bszxPay:save')")
+ @OperationLog
+ @ApiOperation("批量添加百色中学-捐款记录")
+ @PostMapping("/batch")
+ public ApiResult> saveBatch(@RequestBody List list) {
+ if (bszxPayService.saveBatch(list)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+ @PreAuthorize("hasAuthority('bszx:bszxPay:update')")
+ @OperationLog
+ @ApiOperation("批量修改百色中学-捐款记录")
+ @PutMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody BatchParam batchParam) {
+ if (batchParam.update(bszxPayService, "id")) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+ @PreAuthorize("hasAuthority('bszx:bszxPay:remove')")
+ @OperationLog
+ @ApiOperation("批量删除百色中学-捐款记录")
+ @DeleteMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody List ids) {
+ if (bszxPayService.removeByIds(ids)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+ @ApiOperation("查询我的报名记录")
+ @GetMapping("/myPage")
+ public ApiResult> myPage(BszxPayParam param) {
+ // 使用关联查询
+ if (getLoginUser() != null) {
+ param.setUserId(getLoginUserId());
+ return success(bszxPayService.pageRel(param));
+ }
+ return fail("请先登录", null);
+ }
+
+ @ApiOperation("统计捐款总金额与人次")
+ @GetMapping("/getCount")
+ public ApiResult> getCount() {
+ final HashMap map = new HashMap<>();
+ final LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
+ final BigDecimal bigDecimal = bszxPayService.sumMoney(wrapper);
+ final int count = bszxPayService.count(new LambdaQueryWrapper());
+ map.put("numbers", count);
+ map.put("totalMoney", bigDecimal);
+ return success(map);
+ }
+
+ @ApiModelProperty("异步通知")
+ @PostMapping("/notify/{tenantId}")
+ public String wxNotify(@RequestHeader Map header, @RequestBody String body,HttpServletRequest request, @PathVariable("tenantId") Integer tenantId) {
+ // 获取支付配置信息用于解密
+ String key = "Payment:1:".concat(tenantId.toString());
+ Payment payment = redisUtil.get(key, Payment.class);
+ String uploadPath = conf.getUploadPath();
+
+ // 开发环境
+ String mid = "1242289702";
+ String apiV3Key = "0b2996803383c3e3391abd9183b54key";
+ String serialNumber = "3B458EB14A28160DC094431A21C0508EFA712D1C";
+ String privateKey = "/Users/gxwebsoft/JAVA/site-java/cert/bszx/apiclient_key.pem";
+ String apiclientCert = "/Users/gxwebsoft/JAVA/site-java/cert/bszx/apiclient_cert.pem";
+ String pubKey = "/Users/gxwebsoft/JAVA/site-java/cert/bszx/0f65a8517c284acb90aa83dd0c23e8f6.pem";
+ String pubId = "PUB_KEY_ID_0112422897022025011300326200001208";
+ // 生产环境
+ if (ObjectUtil.isNotEmpty(payment)) {
+ // 检查 payment 字段是否为空,并避免直接解析为数字
+ mid = payment.getMchId();
+ apiV3Key = payment.getApiKey();
+ serialNumber = payment.getMerchantSerialNumber();
+ privateKey = payment.getApiclientKey();
+ apiclientCert = conf.getUploadPath().concat("/file").concat(payment.getApiclientCert());
+ pubKey = uploadPath.concat("file").concat(payment.getPubKey());
+ pubId = payment.getPubKeyId();
+ }
+ RequestParam requestParam = new RequestParam.Builder()
+ .serialNumber(header.get("wechatpay-serial"))
+ .nonce(header.get("wechatpay-nonce"))
+ .signature(header.get("wechatpay-signature"))
+ .timestamp(header.get("wechatpay-timestamp"))
+ .body(body)
+ .build();
+
+
+// NotificationConfig config = new RSAPublicKeyConfig.Builder()
+// .merchantId(mid)
+// .publicKeyFromPath(pubKey)
+// .publicKeyId(pubId)
+// .privateKeyFromPath(privateKey)
+// .merchantSerialNumber(serialNumber)
+// .apiV3Key(apiV3Key)
+// .build();
+
+ NotificationConfig config = new RSAPublicKeyNotificationConfig.Builder()
+ .publicKeyFromPath(pubKey)
+ .publicKeyId(pubId)
+ .apiV3Key(apiV3Key)
+ .build();
+
+
+ // 初始化 NotificationParser
+ NotificationParser parser = new NotificationParser(config);
+
+ // 以支付通知回调为例,验签、解密并转换成 Transaction
+ try {
+ Transaction transaction = parser.parse(requestParam, Transaction.class);
+ final String outTradeNo = transaction.getOutTradeNo();
+ final String transactionId = transaction.getTransactionId();
+ final Integer total = transaction.getAmount().getTotal();
+ final String tradeStateDesc = transaction.getTradeStateDesc();
+ final Transaction.TradeStateEnum tradeState = transaction.getTradeState();
+ final Transaction.TradeTypeEnum tradeType = transaction.getTradeType();
+ System.out.println("transaction = " + transaction);
+ System.out.println("tradeStateDesc = " + tradeStateDesc);
+ System.out.println("tradeType = " + tradeType);
+ System.out.println("tradeState = " + tradeState);
+ System.out.println("outTradeNo = " + outTradeNo);
+ System.out.println("amount = " + total);
+
+ if (StrUtil.equals("支付成功", tradeStateDesc)) {
+ // 1. 查询要处理的订单
+ ShopOrder order = shopOrderService.getByOutTradeNo(outTradeNo);
+ // 2. 已支付则跳过
+ if (order.getPayStatus().equals(true)) {
+ return "SUCCESS";
+ }
+ // 2. 未支付则处理更新订单状态
+ if (order.getPayStatus().equals(false)) {
+ // 5. TODO 处理订单状态
+ order.setPayTime(DateUtil.date());
+ order.setPayStatus(true);
+ order.setTransactionId(transactionId);
+ order.setPayPrice(new BigDecimal(NumberUtil.decimalFormat("0.00", total * 0.01)));
+ order.setExpirationTime(DateUtil.offset(DateUtil.date(), DateField.YEAR, 10));
+ System.out.println("实际付款金额 = " + order.getPayPrice());
+ return "SUCCESS";
+ }
+ }
+ } catch (Exception $e) {
+ System.out.println($e.getMessage());
+ System.out.println(Arrays.toString($e.getStackTrace()));
+ }
+
+ return "fail";
+ }
+
+
+ @PreAuthorize("hasAuthority('shop:shopOrder:update')")
+ @ApiOperation("修复订单")
+ @PutMapping("/repair")
+ public ApiResult> repair(@RequestBody ShopOrder shopOrder) {
+ if (shopOrderService.queryOrderByOutTradeNo(shopOrder)) {
+ if (bszxPayService.count(new LambdaQueryWrapper().eq(BszxPay::getOrderNo, shopOrder.getOrderNo())) == 0) {
+ final BszxPay bszxPay = new BszxPay();
+ final BszxBm bm = shopOrder.getBm();
+ if (ObjectUtil.isNotEmpty(bm)) {
+ bszxPay.setName(bm.getName());
+ bszxPay.setSex(bm.getSex());
+ bszxPay.setClassName(bm.getClassName());
+ bszxPay.setGradeName(bm.getGradeName());
+ bszxPay.setAddress(bm.getAddress());
+ bszxPay.setWorkUnit(bm.getWorkUnit());
+ bszxPay.setPosition(bm.getPosition());
+ bszxPay.setPrice(shopOrder.getPayPrice());
+ bszxPay.setOrderNo(shopOrder.getOrderNo());
+ bszxPay.setUserId(shopOrder.getUserId());
+ bszxPay.setFormId(shopOrder.getFormId());
+ bszxPay.setComments(shopOrder.getComments());
+ bszxPayService.save(bszxPay);
+ }
+ }
+ return success("修复成功");
+ }
+ return fail("修复失败");
+ }
+
+ @ApiOperation("获取捐款证书")
+ @GetMapping("/generatePayCert/{id}")
+ public ApiResult> generatePayCert(@PathVariable("id") Integer id) throws Exception {
+ return success("获取捐款证书", bszxPayService.generatePayCert(id));
+ }
+}
diff --git a/src/main/java/com/gxwebsoft/bszx/controller/BszxPayRankingController.java b/src/main/java/com/gxwebsoft/bszx/controller/BszxPayRankingController.java
new file mode 100644
index 0000000..f948aa5
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/bszx/controller/BszxPayRankingController.java
@@ -0,0 +1,199 @@
+package com.gxwebsoft.bszx.controller;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.gxwebsoft.bszx.entity.BszxClass;
+import com.gxwebsoft.bszx.entity.BszxPay;
+import com.gxwebsoft.bszx.param.BszxClassParam;
+import com.gxwebsoft.bszx.service.BszxClassService;
+import com.gxwebsoft.bszx.service.BszxPayService;
+import com.gxwebsoft.cms.entity.CmsArticle;
+import com.gxwebsoft.cms.service.CmsArticleService;
+import com.gxwebsoft.common.core.utils.RedisUtil;
+import com.gxwebsoft.common.core.web.BaseController;
+import com.gxwebsoft.bszx.service.BszxPayRankingService;
+import com.gxwebsoft.bszx.entity.BszxPayRanking;
+import com.gxwebsoft.bszx.param.BszxPayRankingParam;
+import com.gxwebsoft.common.core.web.ApiResult;
+import com.gxwebsoft.common.core.web.PageResult;
+import com.gxwebsoft.common.core.web.BatchParam;
+import com.gxwebsoft.common.core.annotation.OperationLog;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 百色中学-捐款排行控制器
+ *
+ * @author 科技小王子
+ * @since 2025-03-25 08:54:09
+ */
+@Api(tags = "百色中学-捐款排行管理")
+@RestController
+@RequestMapping("/api/bszx/bszx-pay-ranking")
+public class BszxPayRankingController extends BaseController {
+ @Resource
+ private BszxPayRankingService bszxPayRankingService;
+ @Resource
+ private CmsArticleService cmsArticleService;
+ @Resource
+ private BszxPayService bszxPayService;
+ @Resource
+ private BszxClassService bszxClassService;
+ @Resource
+ private RedisUtil redisUtil;
+
+ @PreAuthorize("hasAuthority('bszx:bszxPayRanking:list')")
+ @ApiOperation("分页查询百色中学-捐款排行")
+ @GetMapping("/page")
+ public ApiResult> page(BszxPayRankingParam param) {
+ // 使用关联查询
+ return success(bszxPayRankingService.pageRel(param));
+ }
+
+ @PreAuthorize("hasAuthority('bszx:bszxPayRanking:list')")
+ @ApiOperation("查询全部百色中学-捐款排行")
+ @GetMapping()
+ public ApiResult> list(BszxPayRankingParam param) {
+ // 使用关联查询
+ return success(bszxPayRankingService.listRel(param));
+ }
+
+ @ApiOperation("查询全部百色中学-捐款排行榜")
+ @GetMapping("/ranking")
+ public ApiResult> ranking(BszxPayRankingParam param) {
+ final ArrayList rankings = new ArrayList<>();
+ final LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
+ final List list = cmsArticleService.list(new LambdaQueryWrapper().eq(CmsArticle::getCategoryId, 2444));
+
+ list.forEach(item -> {
+ final BszxPayRanking ranking = new BszxPayRanking();
+ wrapper.clear();
+ // 按时间段查询
+ if(param.getCreateTimeStart() != null && param.getCreateTimeEnd() != null){
+ final String timeStart = param.getCreateTimeStart();
+ final String timeEnd = param.getCreateTimeEnd();
+ wrapper.ge(BszxPay::getCreateTime, timeStart);
+ wrapper.le(BszxPay::getCreateTime, timeEnd);
+ }
+ wrapper.eq(BszxPay::getFormId, item.getArticleId());
+ ranking.setFormId(item.getArticleId());
+ ranking.setFormName(item.getTitle());
+ ranking.setNumber(bszxPayService.count(wrapper));
+ ranking.setTotalPrice(bszxPayService.sumMoney(wrapper));
+ rankings.add(ranking);
+ });
+ // totalPrice按大到小排序
+ rankings.sort((o1, o2) -> o2.getTotalPrice().compareTo(o1.getTotalPrice()));
+ return success(rankings);
+ }
+
+
+ @ApiOperation("查询全部百色中学-千班万元")
+ @GetMapping("/ranking2")
+ public ApiResult> ranking2(BszxClassParam param) {
+ final LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
+ final List list = bszxClassService.listRel(param);
+
+ String key = "BSZX:UpdateRanking2";
+ final String isTimeOut = redisUtil.get(key);
+ if(StrUtil.isNotBlank(isTimeOut)){
+ list.sort((o1, o2) -> o2.getTotalMoney().compareTo(o1.getTotalMoney()));
+ return success(list);
+ }
+ list.forEach(item -> {
+ System.out.println("item = " + item);
+ wrapper.clear();
+ wrapper.eq(BszxPay::getGradeName,item.getGradeName());
+ wrapper.eq(BszxPay::getClassName, item.getName());
+ item.setTotalMoney(bszxPayService.sumMoney(wrapper));
+ bszxClassService.updateById(item);
+ });
+ // totalPrice按大到小排序
+ list.sort((o1, o2) -> o2.getTotalMoney().compareTo(o1.getTotalMoney()));
+ redisUtil.set(key, 1,1L, TimeUnit.DAYS);
+ return success(list);
+ }
+
+
+ @PreAuthorize("hasAuthority('bszx:bszxPayRanking:list')")
+ @ApiOperation("根据id查询百色中学-捐款排行")
+ @GetMapping("/{id}")
+ public ApiResult get(@PathVariable("id") Integer id) {
+ // 使用关联查询
+ return success(bszxPayRankingService.getByIdRel(id));
+ }
+
+ @PreAuthorize("hasAuthority('bszx:bszxPayRanking:save')")
+ @OperationLog
+ @ApiOperation("添加百色中学-捐款排行")
+ @PostMapping()
+ public ApiResult> save(@RequestBody BszxPayRanking bszxPayRanking) {
+ if (bszxPayRankingService.save(bszxPayRanking)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+ @PreAuthorize("hasAuthority('bszx:bszxPayRanking:update')")
+ @OperationLog
+ @ApiOperation("修改百色中学-捐款排行")
+ @PutMapping()
+ public ApiResult> update(@RequestBody BszxPayRanking bszxPayRanking) {
+ if (bszxPayRankingService.updateById(bszxPayRanking)) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+ @PreAuthorize("hasAuthority('bszx:bszxPayRanking:remove')")
+ @OperationLog
+ @ApiOperation("删除百色中学-捐款排行")
+ @DeleteMapping("/{id}")
+ public ApiResult> remove(@PathVariable("id") Integer id) {
+ if (bszxPayRankingService.removeById(id)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+ @PreAuthorize("hasAuthority('bszx:bszxPayRanking:save')")
+ @OperationLog
+ @ApiOperation("批量添加百色中学-捐款排行")
+ @PostMapping("/batch")
+ public ApiResult> saveBatch(@RequestBody List list) {
+ if (bszxPayRankingService.saveBatch(list)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+ @PreAuthorize("hasAuthority('bszx:bszxPayRanking:update')")
+ @OperationLog
+ @ApiOperation("批量修改百色中学-捐款排行")
+ @PutMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody BatchParam batchParam) {
+ if (batchParam.update(bszxPayRankingService, "id")) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+ @PreAuthorize("hasAuthority('bszx:bszxPayRanking:remove')")
+ @OperationLog
+ @ApiOperation("批量删除百色中学-捐款排行")
+ @DeleteMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody List ids) {
+ if (bszxPayRankingService.removeByIds(ids)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+}
diff --git a/src/main/java/com/gxwebsoft/bszx/entity/BszxBm.java b/src/main/java/com/gxwebsoft/bszx/entity/BszxBm.java
new file mode 100644
index 0000000..b8af9e1
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/bszx/entity/BszxBm.java
@@ -0,0 +1,149 @@
+package com.gxwebsoft.bszx.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import java.time.LocalDate;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import java.io.Serializable;
+import java.util.Date;
+
+import com.gxwebsoft.cms.entity.CmsArticle;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 百色中学-报名记录
+ *
+ * @author 科技小王子
+ * @since 2025-03-06 22:50:25
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value = "BszxBm对象", description = "百色中学-报名记录")
+public class BszxBm implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "自增ID")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @ApiModelProperty(value = "姓名")
+ private String name;
+
+ @ApiModelProperty(value = "类型 0校友 1单位 2爱心人士")
+ private Integer type;
+
+ @ApiModelProperty(value = "性别 1男 2女")
+ private String sex;
+
+ @ApiModelProperty(value = "性别名称")
+ @TableField(exist = false)
+ private String sexName;
+
+ @ApiModelProperty(value = "手机号码")
+ private String phone;
+
+ @ApiModelProperty(value = "手机号码")
+ @TableField(exist = false)
+ private String mobile;
+
+ @ApiModelProperty(value = "班级ID")
+ private Integer classId;
+
+ @ApiModelProperty(value = "班级")
+ private String className;
+
+ @ApiModelProperty(value = "年级")
+ private String gradeName;
+
+ @ApiModelProperty(value = "分部ID")
+ private Integer branchId;
+
+ @ApiModelProperty(value = "分部名称")
+ @TableField(exist = false)
+ private String branchName;
+
+ @ApiModelProperty(value = "居住地址")
+ private String address;
+
+ @ApiModelProperty(value = "工作单位")
+ private String workUnit;
+
+ @ApiModelProperty(value = "职务")
+ private String position;
+
+ @ApiModelProperty(value = "是否能到场")
+ private String present;
+
+ @ApiModelProperty(value = "年龄")
+ private Integer age;
+
+ @ApiModelProperty(value = "人数")
+ private Integer number;
+
+ @ApiModelProperty(value = "额外信息")
+ private String extra;
+
+ @ApiModelProperty(value = "生成的邀请函存放路径")
+ private String certificate;
+
+ @ApiModelProperty(value = "预定日期")
+ private LocalDate dateTime;
+
+ @ApiModelProperty(value = "表单数据")
+ private String formData;
+
+ @ApiModelProperty(value = "表单ID")
+ private Integer formId;
+
+ @ApiModelProperty(value = "活动名称")
+ @TableField(exist = false)
+ private String formName;
+
+ @ApiModelProperty(value = "用户ID")
+ private Integer userId;
+
+ @ApiModelProperty(value = "昵称")
+ @TableField(exist = false)
+ private String nickname;
+
+ @ApiModelProperty(value = "头像")
+ @TableField(exist = false)
+ private String avatar;
+
+ @ApiModelProperty(value = "排序(数字越小越靠前)")
+ private Integer sortNumber;
+
+ @ApiModelProperty(value = "备注")
+ private String comments;
+
+ @ApiModelProperty(value = "状态, 0正常, 1冻结")
+ private Integer status;
+
+ @ApiModelProperty(value = "是否删除, 0否, 1是")
+ @TableLogic
+ private Integer deleted;
+
+ @ApiModelProperty(value = "租户id")
+ private Integer tenantId;
+
+ @ApiModelProperty(value = "创建时间")
+ private Date createTime;
+
+ @ApiModelProperty(value = "文章对象")
+ @TableField(exist = false)
+ private CmsArticle article;
+
+ public String getSexName() {
+ if (this.sex == null) {
+ return "";
+ }
+ return this.sex.equals("1") ? "男" : "女";
+ }
+
+}
diff --git a/src/main/java/com/gxwebsoft/bszx/entity/BszxBranch.java b/src/main/java/com/gxwebsoft/bszx/entity/BszxBranch.java
new file mode 100644
index 0000000..d0262af
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/bszx/entity/BszxBranch.java
@@ -0,0 +1,43 @@
+package com.gxwebsoft.bszx.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import java.util.List;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 百色中学-分部
+ *
+ * @author 科技小王子
+ * @since 2025-03-17 17:18:22
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value = "BszxBranch对象", description = "百色中学-分部")
+public class BszxBranch implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "ID")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @ApiModelProperty(value = "分部名称 ")
+ private String name;
+
+ @ApiModelProperty(value = "排序(数字越小越靠前)")
+ private Integer sortNumber;
+
+ @ApiModelProperty(value = "租户id")
+ private Integer tenantId;
+
+ @ApiModelProperty(value = "子分类")
+ @TableField(exist = false)
+ private List children;
+
+}
diff --git a/src/main/java/com/gxwebsoft/bszx/entity/BszxClass.java b/src/main/java/com/gxwebsoft/bszx/entity/BszxClass.java
new file mode 100644
index 0000000..ebf7a99
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/bszx/entity/BszxClass.java
@@ -0,0 +1,70 @@
+package com.gxwebsoft.bszx.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 百色中学-班级
+ *
+ * @author 科技小王子
+ * @since 2025-03-06 22:50:25
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value = "BszxClass对象", description = "百色中学-班级")
+public class BszxClass implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "ID")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @ApiModelProperty(value = "时代ID")
+ private Integer eraId;
+
+ @ApiModelProperty(value = "时代名称")
+ @TableField(exist = false)
+ private String eraName;
+
+ @ApiModelProperty(value = "年级ID")
+ private Integer gradeId;
+
+ @ApiModelProperty(value = "年级名称")
+ @TableField(exist = false)
+ private String gradeName;
+
+ @ApiModelProperty(value = "班级")
+ private String name;
+
+ @ApiModelProperty(value = "累计捐款金额")
+ private BigDecimal totalMoney;
+
+ @ApiModelProperty(value = "分部")
+ private Integer branch;
+
+ @ApiModelProperty(value = "分部名称")
+ @TableField(exist = false)
+ private String branchName;
+
+ @ApiModelProperty(value = "排序(数字越小越靠前)")
+ private Integer sortNumber;
+
+ @ApiModelProperty(value = "备注")
+ private String comments;
+
+ @ApiModelProperty(value = "状态, 0正常, 1冻结")
+ private Integer status;
+
+ @ApiModelProperty("子分类")
+ @TableField(exist = false)
+ private List children;
+}
diff --git a/src/main/java/com/gxwebsoft/bszx/entity/BszxEra.java b/src/main/java/com/gxwebsoft/bszx/entity/BszxEra.java
new file mode 100644
index 0000000..b9d6ce6
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/bszx/entity/BszxEra.java
@@ -0,0 +1,43 @@
+package com.gxwebsoft.bszx.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import java.util.List;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 百色中学-年代
+ *
+ * @author 科技小王子
+ * @since 2025-03-06 22:50:25
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value = "BszxEra对象", description = "百色中学-年代")
+public class BszxEra implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "ID")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @ApiModelProperty(value = "年代")
+ private String name;
+
+ @ApiModelProperty(value = "排序(数字越小越靠前)")
+ private Integer sortNumber;
+
+ @ApiModelProperty(value = "租户id")
+ private Integer tenantId;
+
+ @ApiModelProperty(value = "子分类")
+ @TableField(exist = false)
+ private List children;
+
+}
diff --git a/src/main/java/com/gxwebsoft/bszx/entity/BszxGrade.java b/src/main/java/com/gxwebsoft/bszx/entity/BszxGrade.java
new file mode 100644
index 0000000..07a2b64
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/bszx/entity/BszxGrade.java
@@ -0,0 +1,53 @@
+package com.gxwebsoft.bszx.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 百色中学-年级
+ *
+ * @author 科技小王子
+ * @since 2025-03-06 22:50:25
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value = "BszxGrade对象", description = "百色中学-年级")
+public class BszxGrade implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "ID")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @ApiModelProperty(value = "年级")
+ private String name;
+
+ @ApiModelProperty(value = "年代")
+ private Integer eraId;
+
+ @ApiModelProperty(value = "分部")
+ private Integer branch;
+
+ @ApiModelProperty(value = "排序(数字越小越靠前)")
+ private Integer sortNumber;
+
+ @ApiModelProperty(value = "备注")
+ private String comments;
+
+ @ApiModelProperty(value = "状态, 0正常, 1冻结")
+ private Integer status;
+
+ @ApiModelProperty("子分类")
+ @TableField(exist = false)
+ private List children;
+
+}
diff --git a/src/main/java/com/gxwebsoft/bszx/entity/BszxPay.java b/src/main/java/com/gxwebsoft/bszx/entity/BszxPay.java
new file mode 100644
index 0000000..be26eda
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/bszx/entity/BszxPay.java
@@ -0,0 +1,141 @@
+package com.gxwebsoft.bszx.entity;
+
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.IdType;
+import java.time.LocalDate;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import java.io.Serializable;
+import java.util.Date;
+
+import com.gxwebsoft.cms.entity.CmsArticle;
+import com.gxwebsoft.shop.entity.ShopOrder;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 百色中学-捐款记录
+ *
+ * @author 科技小王子
+ * @since 2025-03-06 22:50:25
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value = "BszxPay对象", description = "百色中学-捐款记录")
+public class BszxPay implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "ID")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @ApiModelProperty(value = "年龄")
+ private Integer age;
+
+ @ApiModelProperty(value = "姓名")
+ private String name;
+
+ @ApiModelProperty(value = "性别 1男 2女")
+ private String sex;
+
+ @ApiModelProperty(value = "手机号码")
+ private String phone;
+
+ @ApiModelProperty(value = "手机号码")
+ @TableField(exist = false)
+ private String mobile;
+
+ @ApiModelProperty(value = "分部")
+ private String branchName;
+
+ @ApiModelProperty(value = "班级")
+ private String className;
+
+ @ApiModelProperty(value = "年级")
+ private String gradeName;
+
+ @ApiModelProperty(value = "居住地址")
+ private String address;
+
+ @ApiModelProperty(value = "工作单位")
+ private String workUnit;
+
+ @ApiModelProperty(value = "职务")
+ private String position;
+
+ @ApiModelProperty(value = "数量")
+ private Integer number;
+
+ @ApiModelProperty(value = "付费金额")
+ private BigDecimal price;
+
+ @ApiModelProperty(value = "额外信息")
+ private String extra;
+
+ @ApiModelProperty(value = "订单编号")
+ private String orderNo;
+
+ @ApiModelProperty(value = "预定日期")
+ private LocalDate dateTime;
+
+ @ApiModelProperty(value = "捐赠证书")
+ private String certificate;
+
+ @ApiModelProperty(value = "表单数据")
+ private String formData;
+
+ @ApiModelProperty(value = "来源表ID")
+ private Integer formId;
+
+ @ApiModelProperty(value = "活动名称")
+ @TableField(exist = false)
+ private String formName;
+
+ @ApiModelProperty(value = "用户ID")
+ private Integer userId;
+
+ @ApiModelProperty(value = "昵称")
+ @TableField(exist = false)
+ private String nickname;
+
+ @ApiModelProperty(value = "头像")
+ @TableField(exist = false)
+ private String avatar;
+
+ @ApiModelProperty(value = "排序(数字越小越靠前)")
+ private Integer sortNumber;
+
+ @ApiModelProperty(value = "备注")
+ private String comments;
+
+ @ApiModelProperty(value = "状态, 0正常, 1冻结")
+ private Integer status;
+
+ @ApiModelProperty(value = "是否删除, 0否, 1是")
+ @TableLogic
+ private Integer deleted;
+
+ @ApiModelProperty(value = "租户id")
+ private Integer tenantId;
+
+ @ApiModelProperty(value = "创建时间")
+ private Date createTime;
+
+ @ApiModelProperty(value = "文章")
+ @TableField(exist = false)
+ private CmsArticle article;
+
+ @ApiModelProperty(value = "订单")
+ @TableField(exist = false)
+ private ShopOrder shopOrder;
+
+ public String getSexName() {
+ return this.sex.equals("1") ? "男" : "女";
+ }
+
+}
diff --git a/src/main/java/com/gxwebsoft/bszx/entity/BszxPayRanking.java b/src/main/java/com/gxwebsoft/bszx/entity/BszxPayRanking.java
new file mode 100644
index 0000000..ba8c020
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/bszx/entity/BszxPayRanking.java
@@ -0,0 +1,65 @@
+package com.gxwebsoft.bszx.entity;
+
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import java.io.Serializable;
+import java.util.Date;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 百色中学-捐款排行
+ *
+ * @author 科技小王子
+ * @since 2025-03-25 08:54:09
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value = "BszxPayRanking对象", description = "百色中学-捐款排行")
+public class BszxPayRanking implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "ID")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @ApiModelProperty(value = "来源表ID(文章ID)")
+ private Integer formId;
+
+ @ApiModelProperty(value = "项目名称")
+ @TableField(exist = false)
+ private String formName;
+
+ @ApiModelProperty(value = "数量")
+ private Integer number;
+
+ @ApiModelProperty(value = "获得捐款总金额")
+ private BigDecimal totalPrice;
+
+ @ApiModelProperty(value = "排序(数字越小越靠前)")
+ private Integer sortNumber;
+
+ @ApiModelProperty(value = "备注")
+ private String comments;
+
+ @ApiModelProperty(value = "状态, 0正常, 1冻结")
+ private Integer status;
+
+ @ApiModelProperty(value = "是否删除, 0否, 1是")
+ @TableLogic
+ private Integer deleted;
+
+ @ApiModelProperty(value = "租户id")
+ private Integer tenantId;
+
+ @ApiModelProperty(value = "创建时间")
+ private Date createTime;
+
+}
diff --git a/src/main/java/com/gxwebsoft/bszx/mapper/BszxBmMapper.java b/src/main/java/com/gxwebsoft/bszx/mapper/BszxBmMapper.java
new file mode 100644
index 0000000..7c63575
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/bszx/mapper/BszxBmMapper.java
@@ -0,0 +1,37 @@
+package com.gxwebsoft.bszx.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.gxwebsoft.bszx.entity.BszxBm;
+import com.gxwebsoft.bszx.param.BszxBmParam;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 百色中学-报名记录Mapper
+ *
+ * @author 科技小王子
+ * @since 2025-03-06 22:50:25
+ */
+public interface BszxBmMapper extends BaseMapper {
+
+ /**
+ * 分页查询
+ *
+ * @param page 分页对象
+ * @param param 查询参数
+ * @return List
+ */
+ List selectPageRel(@Param("page") IPage page,
+ @Param("param") BszxBmParam param);
+
+ /**
+ * 查询全部
+ *
+ * @param param 查询参数
+ * @return List
+ */
+ List selectListRel(@Param("param") BszxBmParam param);
+
+}
diff --git a/src/main/java/com/gxwebsoft/bszx/mapper/BszxBranchMapper.java b/src/main/java/com/gxwebsoft/bszx/mapper/BszxBranchMapper.java
new file mode 100644
index 0000000..d94fd0b
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/bszx/mapper/BszxBranchMapper.java
@@ -0,0 +1,37 @@
+package com.gxwebsoft.bszx.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.gxwebsoft.bszx.entity.BszxBranch;
+import com.gxwebsoft.bszx.param.BszxBranchParam;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 百色中学-分部Mapper
+ *
+ * @author 科技小王子
+ * @since 2025-03-17 17:18:22
+ */
+public interface BszxBranchMapper extends BaseMapper {
+
+ /**
+ * 分页查询
+ *
+ * @param page 分页对象
+ * @param param 查询参数
+ * @return List
+ */
+ List selectPageRel(@Param("page") IPage page,
+ @Param("param") BszxBranchParam param);
+
+ /**
+ * 查询全部
+ *
+ * @param param 查询参数
+ * @return List
+ */
+ List selectListRel(@Param("param") BszxBranchParam param);
+
+}
diff --git a/src/main/java/com/gxwebsoft/bszx/mapper/BszxClassMapper.java b/src/main/java/com/gxwebsoft/bszx/mapper/BszxClassMapper.java
new file mode 100644
index 0000000..81d251f
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/bszx/mapper/BszxClassMapper.java
@@ -0,0 +1,37 @@
+package com.gxwebsoft.bszx.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.gxwebsoft.bszx.entity.BszxClass;
+import com.gxwebsoft.bszx.param.BszxClassParam;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 百色中学-班级Mapper
+ *
+ * @author 科技小王子
+ * @since 2025-03-06 22:50:25
+ */
+public interface BszxClassMapper extends BaseMapper {
+
+ /**
+ * 分页查询
+ *
+ * @param page 分页对象
+ * @param param 查询参数
+ * @return List
+ */
+ List selectPageRel(@Param("page") IPage page,
+ @Param("param") BszxClassParam param);
+
+ /**
+ * 查询全部
+ *
+ * @param param 查询参数
+ * @return List
+ */
+ List selectListRel(@Param("param") BszxClassParam param);
+
+}
diff --git a/src/main/java/com/gxwebsoft/bszx/mapper/BszxEraMapper.java b/src/main/java/com/gxwebsoft/bszx/mapper/BszxEraMapper.java
new file mode 100644
index 0000000..17d83c9
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/bszx/mapper/BszxEraMapper.java
@@ -0,0 +1,37 @@
+package com.gxwebsoft.bszx.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.gxwebsoft.bszx.entity.BszxEra;
+import com.gxwebsoft.bszx.param.BszxEraParam;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 百色中学-年代Mapper
+ *
+ * @author 科技小王子
+ * @since 2025-03-06 22:50:25
+ */
+public interface BszxEraMapper extends BaseMapper {
+
+ /**
+ * 分页查询
+ *
+ * @param page 分页对象
+ * @param param 查询参数
+ * @return List
+ */
+ List selectPageRel(@Param("page") IPage page,
+ @Param("param") BszxEraParam param);
+
+ /**
+ * 查询全部
+ *
+ * @param param 查询参数
+ * @return List
+ */
+ List selectListRel(@Param("param") BszxEraParam param);
+
+}
diff --git a/src/main/java/com/gxwebsoft/bszx/mapper/BszxGradeMapper.java b/src/main/java/com/gxwebsoft/bszx/mapper/BszxGradeMapper.java
new file mode 100644
index 0000000..1e566bb
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/bszx/mapper/BszxGradeMapper.java
@@ -0,0 +1,37 @@
+package com.gxwebsoft.bszx.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.gxwebsoft.bszx.entity.BszxGrade;
+import com.gxwebsoft.bszx.param.BszxGradeParam;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 百色中学-年级Mapper
+ *
+ * @author 科技小王子
+ * @since 2025-03-06 22:50:25
+ */
+public interface BszxGradeMapper extends BaseMapper {
+
+ /**
+ * 分页查询
+ *
+ * @param page 分页对象
+ * @param param 查询参数
+ * @return List
+ */
+ List selectPageRel(@Param("page") IPage page,
+ @Param("param") BszxGradeParam param);
+
+ /**
+ * 查询全部
+ *
+ * @param param 查询参数
+ * @return List
+ */
+ List selectListRel(@Param("param") BszxGradeParam param);
+
+}
diff --git a/src/main/java/com/gxwebsoft/bszx/mapper/BszxPayMapper.java b/src/main/java/com/gxwebsoft/bszx/mapper/BszxPayMapper.java
new file mode 100644
index 0000000..020c7ea
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/bszx/mapper/BszxPayMapper.java
@@ -0,0 +1,42 @@
+package com.gxwebsoft.bszx.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.gxwebsoft.bszx.entity.BszxPay;
+import com.gxwebsoft.bszx.param.BszxPayParam;
+import org.apache.ibatis.annotations.Param;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 百色中学-捐款记录Mapper
+ *
+ * @author 科技小王子
+ * @since 2025-03-06 22:50:25
+ */
+public interface BszxPayMapper extends BaseMapper {
+
+ /**
+ * 分页查询
+ *
+ * @param page 分页对象
+ * @param param 查询参数
+ * @return List
+ */
+ List selectPageRel(@Param("page") IPage page,
+ @Param("param") BszxPayParam param);
+
+ /**
+ * 查询全部
+ *
+ * @param param 查询参数
+ * @return List
+ */
+ List selectListRel(@Param("param") BszxPayParam param);
+
+ BigDecimal selectSumMoney(@Param("ew") Wrapper> wrapper);
+
+}
diff --git a/src/main/java/com/gxwebsoft/bszx/mapper/BszxPayRankingMapper.java b/src/main/java/com/gxwebsoft/bszx/mapper/BszxPayRankingMapper.java
new file mode 100644
index 0000000..c6e14b0
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/bszx/mapper/BszxPayRankingMapper.java
@@ -0,0 +1,37 @@
+package com.gxwebsoft.bszx.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.gxwebsoft.bszx.entity.BszxPayRanking;
+import com.gxwebsoft.bszx.param.BszxPayRankingParam;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 百色中学-捐款排行Mapper
+ *
+ * @author 科技小王子
+ * @since 2025-03-25 08:54:09
+ */
+public interface BszxPayRankingMapper extends BaseMapper {
+
+ /**
+ * 分页查询
+ *
+ * @param page 分页对象
+ * @param param 查询参数
+ * @return List
+ */
+ List selectPageRel(@Param("page") IPage page,
+ @Param("param") BszxPayRankingParam param);
+
+ /**
+ * 查询全部
+ *
+ * @param param 查询参数
+ * @return List
+ */
+ List selectListRel(@Param("param") BszxPayRankingParam param);
+
+}
diff --git a/src/main/java/com/gxwebsoft/bszx/mapper/xml/BszxBmMapper.xml b/src/main/java/com/gxwebsoft/bszx/mapper/xml/BszxBmMapper.xml
new file mode 100644
index 0000000..74d0099
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/bszx/mapper/xml/BszxBmMapper.xml
@@ -0,0 +1,113 @@
+
+
+
+
+
+
+ SELECT a.*,b.title as formName, c.name as branchName, u.phone as mobile,u.avatar,u.nickname
+ FROM bszx_bm a
+ LEFT JOIN cms_article b ON a.form_id = b.article_id
+ LEFT JOIN bszx_branch c ON a.branch_id = c.id
+ LEFT JOIN gxwebsoft_core.sys_user u ON a.user_id = u.user_id
+
+
+ AND a.id = #{param.id}
+
+
+ AND a.name LIKE CONCAT('%', #{param.name}, '%')
+
+
+ AND a.type = #{param.type}
+
+
+ AND a.sex = #{param.sex}
+
+
+ AND a.phone LIKE CONCAT('%', #{param.phone}, '%')
+
+
+ AND a.branch_id = #{param.branchId}
+
+
+ AND a.class_name LIKE CONCAT('%', #{param.className}, '%')
+
+
+ AND a.grade_name LIKE CONCAT('%', #{param.gradeName}, '%')
+
+
+ AND a.address LIKE CONCAT('%', #{param.address}, '%')
+
+
+ AND a.work_unit LIKE CONCAT('%', #{param.workUnit}, '%')
+
+
+ AND a.position LIKE CONCAT('%', #{param.position}, '%')
+
+
+ AND a.present = #{param.present}
+
+
+ AND a.age = #{param.age}
+
+
+ AND a.number = #{param.number}
+
+
+ AND a.extra LIKE CONCAT('%', #{param.extra}, '%')
+
+
+ AND a.certificate LIKE CONCAT('%', #{param.certificate}, '%')
+
+
+ AND a.date_time LIKE CONCAT('%', #{param.dateTime}, '%')
+
+
+ AND a.form_data LIKE CONCAT('%', #{param.formData}, '%')
+
+
+ AND a.form_id = #{param.formId}
+
+
+ AND a.user_id = #{param.userId}
+
+
+ AND a.sort_number = #{param.sortNumber}
+
+
+ AND a.comments LIKE CONCAT('%', #{param.comments}, '%')
+
+
+ AND a.status = #{param.status}
+
+
+ AND a.deleted = #{param.deleted}
+
+
+ AND a.deleted = 0
+
+
+ AND a.create_time >= #{param.createTimeStart}
+
+
+ AND a.create_time <= #{param.createTimeEnd}
+
+
+ AND (a.comments LIKE CONCAT('%', #{param.keywords}, '%')
+ OR a.phone = #{param.keywords}
+ OR a.name LIKE CONCAT('%', #{param.keywords}, '%')
+ )
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/java/com/gxwebsoft/bszx/mapper/xml/BszxBranchMapper.xml b/src/main/java/com/gxwebsoft/bszx/mapper/xml/BszxBranchMapper.xml
new file mode 100644
index 0000000..c9c7fa0
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/bszx/mapper/xml/BszxBranchMapper.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+ SELECT a.*
+ FROM bszx_branch a
+
+
+ AND a.id = #{param.id}
+
+
+ AND a.name LIKE CONCAT('%', #{param.name}, '%')
+
+
+ AND a.sort_number = #{param.sortNumber}
+
+
+ AND (a.comments LIKE CONCAT('%', #{param.keywords}, '%')
+ )
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/java/com/gxwebsoft/bszx/mapper/xml/BszxClassMapper.xml b/src/main/java/com/gxwebsoft/bszx/mapper/xml/BszxClassMapper.xml
new file mode 100644
index 0000000..8f07436
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/bszx/mapper/xml/BszxClassMapper.xml
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+ SELECT a.*,b.name as gradeName, c.name as eraName, d.name as branchName
+ FROM bszx_class a
+ LEFT JOIN bszx_grade b ON a.grade_id = b.id
+ LEFT JOIN bszx_era c ON a.era_id = c.id
+ LEFT JOIN bszx_branch d ON a.branch = d.id
+
+
+ AND a.id = #{param.id}
+
+
+ AND a.era_id = #{param.eraId}
+
+
+ AND a.grade_id = #{param.gradeId}
+
+
+ AND b.name = #{param.gradeName}
+
+
+ AND a.name = #{param.name}
+
+
+ AND a.sort_number = #{param.sortNumber}
+
+
+ AND a.branch = #{param.branch}
+
+
+ AND a.comments LIKE CONCAT('%', #{param.comments}, '%')
+
+
+ AND a.status = #{param.status}
+
+
+ AND a.create_time >= #{param.createTimeStart}
+
+
+ AND a.create_time <= #{param.createTimeEnd}
+
+
+ AND (a.name LIKE CONCAT('%', #{param.keywords}, '%')
+ )
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/java/com/gxwebsoft/bszx/mapper/xml/BszxEraMapper.xml b/src/main/java/com/gxwebsoft/bszx/mapper/xml/BszxEraMapper.xml
new file mode 100644
index 0000000..867fdf4
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/bszx/mapper/xml/BszxEraMapper.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+ SELECT a.*
+ FROM bszx_era a
+
+
+ AND a.id = #{param.id}
+
+
+ AND a.name LIKE CONCAT('%', #{param.name}, '%')
+
+
+ AND a.sort_number = #{param.sortNumber}
+
+
+ AND (a.comments LIKE CONCAT('%', #{param.keywords}, '%')
+ )
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/java/com/gxwebsoft/bszx/mapper/xml/BszxGradeMapper.xml b/src/main/java/com/gxwebsoft/bszx/mapper/xml/BszxGradeMapper.xml
new file mode 100644
index 0000000..df9419e
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/bszx/mapper/xml/BszxGradeMapper.xml
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+ SELECT a.*
+ FROM bszx_grade a
+
+
+ AND a.id = #{param.id}
+
+
+ AND a.name LIKE CONCAT('%', #{param.name}, '%')
+
+
+ AND a.era_id = #{param.eraId}
+
+
+ AND a.branch = #{param.branch}
+
+
+ AND a.sort_number = #{param.sortNumber}
+
+
+ AND a.comments LIKE CONCAT('%', #{param.comments}, '%')
+
+
+ AND a.status = #{param.status}
+
+
+ AND a.create_time >= #{param.createTimeStart}
+
+
+ AND a.create_time <= #{param.createTimeEnd}
+
+
+ AND (a.comments LIKE CONCAT('%', #{param.keywords}, '%')
+ )
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/java/com/gxwebsoft/bszx/mapper/xml/BszxPayMapper.xml b/src/main/java/com/gxwebsoft/bszx/mapper/xml/BszxPayMapper.xml
new file mode 100644
index 0000000..fde31b8
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/bszx/mapper/xml/BszxPayMapper.xml
@@ -0,0 +1,126 @@
+
+
+
+
+
+
+ SELECT a.*,b.title as formName,u.phone as mobile,u.avatar,u.nickname
+ FROM bszx_pay a
+ LEFT JOIN cms_article b ON a.form_id = b.article_id
+ LEFT JOIN gxwebsoft_core.sys_user u ON a.user_id = u.user_id
+
+
+ AND a.id = #{param.id}
+
+
+ AND a.age = #{param.age}
+
+
+ AND a.name LIKE CONCAT('%', #{param.name}, '%')
+
+
+ AND a.sex = #{param.sex}
+
+
+ AND a.phone LIKE CONCAT('%', #{param.phone}, '%')
+
+
+ AND a.class_name = #{param.className}
+
+
+ AND a.grade_name LIKE CONCAT('%', #{param.gradeName}, '%')
+
+
+ AND a.address LIKE CONCAT('%', #{param.address}, '%')
+
+
+ AND a.work_unit LIKE CONCAT('%', #{param.workUnit}, '%')
+
+
+ AND a.position LIKE CONCAT('%', #{param.position}, '%')
+
+
+ AND a.number = #{param.number}
+
+
+ AND a.price = #{param.price}
+
+
+ AND a.extra LIKE CONCAT('%', #{param.extra}, '%')
+
+
+ AND a.order_no LIKE CONCAT('%', #{param.orderNo}, '%')
+
+
+ AND a.date_time LIKE CONCAT('%', #{param.dateTime}, '%')
+
+
+ AND a.certificate LIKE CONCAT('%', #{param.certificate}, '%')
+
+
+ AND a.form_data LIKE CONCAT('%', #{param.formData}, '%')
+
+
+ AND a.form_id = #{param.formId}
+
+
+ AND a.user_id = #{param.userId}
+
+
+ AND a.sort_number = #{param.sortNumber}
+
+
+ AND a.comments LIKE CONCAT('%', #{param.comments}, '%')
+
+
+ AND a.status = #{param.status}
+
+
+ AND a.deleted = #{param.deleted}
+
+
+ AND a.deleted = 0
+
+
+ AND a.create_time >= #{param.createTimeStart}
+
+
+ AND a.create_time <= #{param.createTimeEnd}
+
+
+ AND a.order_no IN
+
+ #{item}
+
+
+
+ AND (a.comments LIKE CONCAT('%', #{param.keywords}, '%')
+ OR u.phone = #{param.keywords}
+ OR a.name LIKE CONCAT('%', #{param.keywords}, '%')
+ OR a.order_no = #{param.keywords}
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/java/com/gxwebsoft/bszx/mapper/xml/BszxPayRankingMapper.xml b/src/main/java/com/gxwebsoft/bszx/mapper/xml/BszxPayRankingMapper.xml
new file mode 100644
index 0000000..806e26f
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/bszx/mapper/xml/BszxPayRankingMapper.xml
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+ SELECT a.*,b.title as formName
+ FROM bszx_pay_ranking a
+ LEFT JOIN cms_article b ON a.form_id = b.article_id
+
+
+ AND a.id = #{param.id}
+
+
+ AND a.form_id = #{param.formId}
+
+
+ AND a.number = #{param.number}
+
+
+ AND a.total_price = #{param.totalPrice}
+
+
+ AND a.sort_number = #{param.sortNumber}
+
+
+ AND a.comments LIKE CONCAT('%', #{param.comments}, '%')
+
+
+ AND a.status = #{param.status}
+
+
+ AND a.deleted = #{param.deleted}
+
+
+ AND a.deleted = 0
+
+
+ AND a.create_time >= #{param.createTimeStart}
+
+
+ AND a.create_time <= #{param.createTimeEnd}
+
+
+ AND (a.comments LIKE CONCAT('%', #{param.keywords}, '%')
+ )
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/java/com/gxwebsoft/bszx/param/BszxBmParam.java b/src/main/java/com/gxwebsoft/bszx/param/BszxBmParam.java
new file mode 100644
index 0000000..a6a41ff
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/bszx/param/BszxBmParam.java
@@ -0,0 +1,114 @@
+package com.gxwebsoft.bszx.param;
+
+import java.math.BigDecimal;
+import com.gxwebsoft.common.core.annotation.QueryField;
+import com.gxwebsoft.common.core.annotation.QueryType;
+import com.gxwebsoft.common.core.web.BaseParam;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 百色中学-报名记录查询参数
+ *
+ * @author 科技小王子
+ * @since 2025-03-06 22:50:25
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@ApiModel(value = "BszxBmParam对象", description = "百色中学-报名记录查询参数")
+public class BszxBmParam extends BaseParam {
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "自增ID")
+ @QueryField(type = QueryType.EQ)
+ private Integer id;
+
+ @ApiModelProperty(value = "姓名")
+ private String name;
+
+ @ApiModelProperty(value = "类型 0校友 1单位")
+ @QueryField(type = QueryType.EQ)
+ private Integer type;
+
+ @ApiModelProperty(value = "性别 1男 2女")
+ @QueryField(type = QueryType.EQ)
+ private Integer sex;
+
+ @ApiModelProperty(value = "手机号码")
+ private String phone;
+
+ @ApiModelProperty(value = "班级")
+ private String className;
+
+ @ApiModelProperty(value = "年级")
+ private String gradeName;
+
+ @ApiModelProperty(value = "分部ID")
+ @QueryField(type = QueryType.EQ)
+ private Integer branchId;
+
+ @ApiModelProperty(value = "居住地址")
+ private String address;
+
+ @ApiModelProperty(value = "工作单位")
+ private String workUnit;
+
+ @ApiModelProperty(value = "职务")
+ private String position;
+
+ @ApiModelProperty(value = "是否能到场")
+ @QueryField(type = QueryType.EQ)
+ private Boolean present;
+
+ @ApiModelProperty(value = "年龄")
+ @QueryField(type = QueryType.EQ)
+ private Integer age;
+
+ @ApiModelProperty(value = "人数")
+ @QueryField(type = QueryType.EQ)
+ private Integer number;
+
+ @ApiModelProperty(value = "额外信息")
+ private String extra;
+
+ @ApiModelProperty(value = "生成的邀请函存放路径")
+ private String certificate;
+
+ @ApiModelProperty(value = "预定日期")
+ private String dateTime;
+
+ @ApiModelProperty(value = "表单数据")
+ private String formData;
+
+ @ApiModelProperty(value = "表单ID")
+ @QueryField(type = QueryType.EQ)
+ private Integer formId;
+
+ @ApiModelProperty(value = "用户ID")
+ @QueryField(type = QueryType.EQ)
+ private Integer userId;
+
+ @ApiModelProperty(value = "排序(数字越小越靠前)")
+ @QueryField(type = QueryType.EQ)
+ private Integer sortNumber;
+
+ @ApiModelProperty(value = "备注")
+ private String comments;
+
+ @ApiModelProperty(value = "状态, 0正常, 1冻结")
+ @QueryField(type = QueryType.EQ)
+ private Integer status;
+
+ @ApiModelProperty(value = "是否删除, 0否, 1是")
+ @QueryField(type = QueryType.EQ)
+ private Integer deleted;
+
+ @ApiModelProperty(value = "订单编号")
+ @QueryField(type = QueryType.LIKE)
+ private String orderNo;
+
+}
diff --git a/src/main/java/com/gxwebsoft/bszx/param/BszxBranchParam.java b/src/main/java/com/gxwebsoft/bszx/param/BszxBranchParam.java
new file mode 100644
index 0000000..c1f3cbd
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/bszx/param/BszxBranchParam.java
@@ -0,0 +1,37 @@
+package com.gxwebsoft.bszx.param;
+
+import java.math.BigDecimal;
+import com.gxwebsoft.common.core.annotation.QueryField;
+import com.gxwebsoft.common.core.annotation.QueryType;
+import com.gxwebsoft.common.core.web.BaseParam;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 百色中学-分部查询参数
+ *
+ * @author 科技小王子
+ * @since 2025-03-17 17:18:22
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@ApiModel(value = "BszxBranchParam对象", description = "百色中学-分部查询参数")
+public class BszxBranchParam extends BaseParam {
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "ID")
+ @QueryField(type = QueryType.EQ)
+ private Integer id;
+
+ @ApiModelProperty(value = "分部名称 ")
+ private String name;
+
+ @ApiModelProperty(value = "排序(数字越小越靠前)")
+ @QueryField(type = QueryType.EQ)
+ private Integer sortNumber;
+
+}
diff --git a/src/main/java/com/gxwebsoft/bszx/param/BszxClassParam.java b/src/main/java/com/gxwebsoft/bszx/param/BszxClassParam.java
new file mode 100644
index 0000000..1fa764a
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/bszx/param/BszxClassParam.java
@@ -0,0 +1,64 @@
+package com.gxwebsoft.bszx.param;
+
+import java.math.BigDecimal;
+import com.gxwebsoft.common.core.annotation.QueryField;
+import com.gxwebsoft.common.core.annotation.QueryType;
+import com.gxwebsoft.common.core.web.BaseParam;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 百色中学-班级查询参数
+ *
+ * @author 科技小王子
+ * @since 2025-03-06 22:50:25
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@ApiModel(value = "BszxClassParam对象", description = "百色中学-班级查询参数")
+public class BszxClassParam extends BaseParam {
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "ID")
+ @QueryField(type = QueryType.EQ)
+ private Integer id;
+
+ @ApiModelProperty(value = "时代ID")
+ @QueryField(type = QueryType.EQ)
+ private Integer eraId;
+
+ @ApiModelProperty(value = "年级ID")
+ @QueryField(type = QueryType.EQ)
+ private Integer gradeId;
+
+ @ApiModelProperty(value = "年级")
+ @QueryField(type = QueryType.EQ)
+ private String gradeName;
+
+ @ApiModelProperty(value = "累计捐款金额")
+ @QueryField(type = QueryType.EQ)
+ private BigDecimal totalMoney;
+
+ @ApiModelProperty(value = "班级")
+ private String name;
+
+ @ApiModelProperty(value = "分部")
+ @QueryField(type = QueryType.EQ)
+ private Integer branch;
+
+ @ApiModelProperty(value = "排序(数字越小越靠前)")
+ @QueryField(type = QueryType.EQ)
+ private Integer sortNumber;
+
+ @ApiModelProperty(value = "备注")
+ private String comments;
+
+ @ApiModelProperty(value = "状态, 0正常, 1冻结")
+ @QueryField(type = QueryType.EQ)
+ private Integer status;
+
+}
diff --git a/src/main/java/com/gxwebsoft/bszx/param/BszxEraParam.java b/src/main/java/com/gxwebsoft/bszx/param/BszxEraParam.java
new file mode 100644
index 0000000..58ca68e
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/bszx/param/BszxEraParam.java
@@ -0,0 +1,37 @@
+package com.gxwebsoft.bszx.param;
+
+import java.math.BigDecimal;
+import com.gxwebsoft.common.core.annotation.QueryField;
+import com.gxwebsoft.common.core.annotation.QueryType;
+import com.gxwebsoft.common.core.web.BaseParam;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 百色中学-年代查询参数
+ *
+ * @author 科技小王子
+ * @since 2025-03-06 22:50:25
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@ApiModel(value = "BszxEraParam对象", description = "百色中学-年代查询参数")
+public class BszxEraParam extends BaseParam {
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "ID")
+ @QueryField(type = QueryType.EQ)
+ private Integer id;
+
+ @ApiModelProperty(value = "年代")
+ private String name;
+
+ @ApiModelProperty(value = "排序(数字越小越靠前)")
+ @QueryField(type = QueryType.EQ)
+ private Integer sortNumber;
+
+}
diff --git a/src/main/java/com/gxwebsoft/bszx/param/BszxGradeParam.java b/src/main/java/com/gxwebsoft/bszx/param/BszxGradeParam.java
new file mode 100644
index 0000000..930b927
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/bszx/param/BszxGradeParam.java
@@ -0,0 +1,52 @@
+package com.gxwebsoft.bszx.param;
+
+import java.math.BigDecimal;
+import com.gxwebsoft.common.core.annotation.QueryField;
+import com.gxwebsoft.common.core.annotation.QueryType;
+import com.gxwebsoft.common.core.web.BaseParam;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 百色中学-年级查询参数
+ *
+ * @author 科技小王子
+ * @since 2025-03-06 22:50:25
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@ApiModel(value = "BszxGradeParam对象", description = "百色中学-年级查询参数")
+public class BszxGradeParam extends BaseParam {
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "ID")
+ @QueryField(type = QueryType.EQ)
+ private Integer id;
+
+ @ApiModelProperty(value = "年级")
+ private String name;
+
+ @ApiModelProperty(value = "年代")
+ @QueryField(type = QueryType.EQ)
+ private Integer eraId;
+
+ @ApiModelProperty(value = "分部")
+ @QueryField(type = QueryType.EQ)
+ private Integer branch;
+
+ @ApiModelProperty(value = "排序(数字越小越靠前)")
+ @QueryField(type = QueryType.EQ)
+ private Integer sortNumber;
+
+ @ApiModelProperty(value = "备注")
+ private String comments;
+
+ @ApiModelProperty(value = "状态, 0正常, 1冻结")
+ @QueryField(type = QueryType.EQ)
+ private Integer status;
+
+}
diff --git a/src/main/java/com/gxwebsoft/bszx/param/BszxPayParam.java b/src/main/java/com/gxwebsoft/bszx/param/BszxPayParam.java
new file mode 100644
index 0000000..7786997
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/bszx/param/BszxPayParam.java
@@ -0,0 +1,118 @@
+package com.gxwebsoft.bszx.param;
+
+import java.math.BigDecimal;
+import java.util.Set;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.gxwebsoft.common.core.annotation.QueryField;
+import com.gxwebsoft.common.core.annotation.QueryType;
+import com.gxwebsoft.common.core.web.BaseParam;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.gxwebsoft.common.system.entity.User;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 百色中学-捐款记录查询参数
+ *
+ * @author 科技小王子
+ * @since 2025-03-06 22:50:25
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@ApiModel(value = "BszxPayParam对象", description = "百色中学-捐款记录查询参数")
+public class BszxPayParam extends BaseParam {
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "ID")
+ @QueryField(type = QueryType.EQ)
+ private Integer id;
+
+ @ApiModelProperty(value = "年龄")
+ @QueryField(type = QueryType.EQ)
+ private Integer age;
+
+ @ApiModelProperty(value = "姓名")
+ private String name;
+
+ @ApiModelProperty(value = "性别 1男 2女")
+ @QueryField(type = QueryType.EQ)
+ private Integer sex;
+
+ @ApiModelProperty(value = "手机号码")
+ private String phone;
+
+ @ApiModelProperty(value = "班级")
+ private String className;
+
+ @ApiModelProperty(value = "年级")
+ private String gradeName;
+
+ @ApiModelProperty(value = "居住地址")
+ private String address;
+
+ @ApiModelProperty(value = "工作单位")
+ private String workUnit;
+
+ @ApiModelProperty(value = "职务")
+ private String position;
+
+ @ApiModelProperty(value = "数量")
+ @QueryField(type = QueryType.EQ)
+ private Integer number;
+
+ @ApiModelProperty(value = "付费金额")
+ @QueryField(type = QueryType.EQ)
+ private BigDecimal price;
+
+ @ApiModelProperty(value = "额外信息")
+ private String extra;
+
+ @ApiModelProperty(value = "订单编号")
+ @QueryField(type = QueryType.EQ)
+ private String orderNo;
+
+ @ApiModelProperty(value = "订单编号")
+ @QueryField(type = QueryType.IN)
+ private Set orderNos;
+
+ @ApiModelProperty(value = "预定日期")
+ private String dateTime;
+
+ @ApiModelProperty(value = "捐赠证书")
+ private String certificate;
+
+ @ApiModelProperty(value = "表单数据")
+ private String formData;
+
+ @ApiModelProperty(value = "来源表ID")
+ @QueryField(type = QueryType.EQ)
+ private Integer formId;
+
+ @ApiModelProperty(value = "用户ID")
+ @QueryField(type = QueryType.EQ)
+ private Integer userId;
+
+ @ApiModelProperty(value = "排序(数字越小越靠前)")
+ @QueryField(type = QueryType.EQ)
+ private Integer sortNumber;
+
+ @ApiModelProperty(value = "备注")
+ private String comments;
+
+ @ApiModelProperty(value = "状态, 0正常, 1冻结")
+ @QueryField(type = QueryType.EQ)
+ private Integer status;
+
+ @ApiModelProperty(value = "是否删除, 0否, 1是")
+ @QueryField(type = QueryType.EQ)
+ private Integer deleted;
+
+ @ApiModelProperty(value = "登录用户")
+ @TableField(exist = false)
+ private User loginUser;
+
+}
diff --git a/src/main/java/com/gxwebsoft/bszx/param/BszxPayRankingParam.java b/src/main/java/com/gxwebsoft/bszx/param/BszxPayRankingParam.java
new file mode 100644
index 0000000..8739fe9
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/bszx/param/BszxPayRankingParam.java
@@ -0,0 +1,57 @@
+package com.gxwebsoft.bszx.param;
+
+import java.math.BigDecimal;
+import com.gxwebsoft.common.core.annotation.QueryField;
+import com.gxwebsoft.common.core.annotation.QueryType;
+import com.gxwebsoft.common.core.web.BaseParam;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 百色中学-捐款排行查询参数
+ *
+ * @author 科技小王子
+ * @since 2025-03-25 08:54:09
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@ApiModel(value = "BszxPayRankingParam对象", description = "百色中学-捐款排行查询参数")
+public class BszxPayRankingParam extends BaseParam {
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "ID")
+ @QueryField(type = QueryType.EQ)
+ private Integer id;
+
+ @ApiModelProperty(value = "来源表ID(项目名称)")
+ @QueryField(type = QueryType.EQ)
+ private Integer formId;
+
+ @ApiModelProperty(value = "数量")
+ @QueryField(type = QueryType.EQ)
+ private Integer number;
+
+ @ApiModelProperty(value = "获得捐款总金额")
+ @QueryField(type = QueryType.EQ)
+ private BigDecimal totalPrice;
+
+ @ApiModelProperty(value = "排序(数字越小越靠前)")
+ @QueryField(type = QueryType.EQ)
+ private Integer sortNumber;
+
+ @ApiModelProperty(value = "备注")
+ private String comments;
+
+ @ApiModelProperty(value = "状态, 0正常, 1冻结")
+ @QueryField(type = QueryType.EQ)
+ private Integer status;
+
+ @ApiModelProperty(value = "是否删除, 0否, 1是")
+ @QueryField(type = QueryType.EQ)
+ private Integer deleted;
+
+}
diff --git a/src/main/java/com/gxwebsoft/bszx/service/BszxBmService.java b/src/main/java/com/gxwebsoft/bszx/service/BszxBmService.java
new file mode 100644
index 0000000..f8caaa3
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/bszx/service/BszxBmService.java
@@ -0,0 +1,50 @@
+package com.gxwebsoft.bszx.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gxwebsoft.common.core.web.PageResult;
+import com.gxwebsoft.bszx.entity.BszxBm;
+import com.gxwebsoft.bszx.param.BszxBmParam;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 百色中学-报名记录Service
+ *
+ * @author 科技小王子
+ * @since 2025-03-06 22:50:25
+ */
+public interface BszxBmService extends IService {
+
+ /**
+ * 分页关联查询
+ *
+ * @param param 查询参数
+ * @return PageResult
+ */
+ PageResult pageRel(BszxBmParam param);
+
+ /**
+ * 关联查询全部
+ *
+ * @param param 查询参数
+ * @return List
+ */
+ List listRel(BszxBmParam param);
+
+ /**
+ * 根据id查询
+ *
+ * @param id 自增ID
+ * @return BszxBm
+ */
+ BszxBm getByIdRel(Integer id);
+
+ /**
+ * 生成海报
+ */
+ String generatePoster(BszxBm bm) throws Exception;
+
+ BszxBm getByUserId(Integer userId);
+}
diff --git a/src/main/java/com/gxwebsoft/bszx/service/BszxBranchService.java b/src/main/java/com/gxwebsoft/bszx/service/BszxBranchService.java
new file mode 100644
index 0000000..c7fe0ac
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/bszx/service/BszxBranchService.java
@@ -0,0 +1,42 @@
+package com.gxwebsoft.bszx.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gxwebsoft.common.core.web.PageResult;
+import com.gxwebsoft.bszx.entity.BszxBranch;
+import com.gxwebsoft.bszx.param.BszxBranchParam;
+
+import java.util.List;
+
+/**
+ * 百色中学-分部Service
+ *
+ * @author 科技小王子
+ * @since 2025-03-17 17:18:22
+ */
+public interface BszxBranchService extends IService {
+
+ /**
+ * 分页关联查询
+ *
+ * @param param 查询参数
+ * @return PageResult
+ */
+ PageResult pageRel(BszxBranchParam param);
+
+ /**
+ * 关联查询全部
+ *
+ * @param param 查询参数
+ * @return List
+ */
+ List listRel(BszxBranchParam param);
+
+ /**
+ * 根据id查询
+ *
+ * @param id ID
+ * @return BszxBranch
+ */
+ BszxBranch getByIdRel(Integer id);
+
+}
diff --git a/src/main/java/com/gxwebsoft/bszx/service/BszxClassService.java b/src/main/java/com/gxwebsoft/bszx/service/BszxClassService.java
new file mode 100644
index 0000000..7871918
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/bszx/service/BszxClassService.java
@@ -0,0 +1,42 @@
+package com.gxwebsoft.bszx.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gxwebsoft.common.core.web.PageResult;
+import com.gxwebsoft.bszx.entity.BszxClass;
+import com.gxwebsoft.bszx.param.BszxClassParam;
+
+import java.util.List;
+
+/**
+ * 百色中学-班级Service
+ *
+ * @author 科技小王子
+ * @since 2025-03-06 22:50:25
+ */
+public interface BszxClassService extends IService {
+
+ /**
+ * 分页关联查询
+ *
+ * @param param 查询参数
+ * @return PageResult
+ */
+ PageResult pageRel(BszxClassParam param);
+
+ /**
+ * 关联查询全部
+ *
+ * @param param 查询参数
+ * @return List
+ */
+ List listRel(BszxClassParam param);
+
+ /**
+ * 根据id查询
+ *
+ * @param id ID
+ * @return BszxClass
+ */
+ BszxClass getByIdRel(Integer id);
+
+}
diff --git a/src/main/java/com/gxwebsoft/bszx/service/BszxEraService.java b/src/main/java/com/gxwebsoft/bszx/service/BszxEraService.java
new file mode 100644
index 0000000..efff9da
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/bszx/service/BszxEraService.java
@@ -0,0 +1,42 @@
+package com.gxwebsoft.bszx.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gxwebsoft.common.core.web.PageResult;
+import com.gxwebsoft.bszx.entity.BszxEra;
+import com.gxwebsoft.bszx.param.BszxEraParam;
+
+import java.util.List;
+
+/**
+ * 百色中学-年代Service
+ *
+ * @author 科技小王子
+ * @since 2025-03-06 22:50:25
+ */
+public interface BszxEraService extends IService {
+
+ /**
+ * 分页关联查询
+ *
+ * @param param 查询参数
+ * @return PageResult
+ */
+ PageResult pageRel(BszxEraParam param);
+
+ /**
+ * 关联查询全部
+ *
+ * @param param 查询参数
+ * @return List
+ */
+ List listRel(BszxEraParam param);
+
+ /**
+ * 根据id查询
+ *
+ * @param id ID
+ * @return BszxEra
+ */
+ BszxEra getByIdRel(Integer id);
+
+}
diff --git a/src/main/java/com/gxwebsoft/bszx/service/BszxGradeService.java b/src/main/java/com/gxwebsoft/bszx/service/BszxGradeService.java
new file mode 100644
index 0000000..17b5dfd
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/bszx/service/BszxGradeService.java
@@ -0,0 +1,42 @@
+package com.gxwebsoft.bszx.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gxwebsoft.common.core.web.PageResult;
+import com.gxwebsoft.bszx.entity.BszxGrade;
+import com.gxwebsoft.bszx.param.BszxGradeParam;
+
+import java.util.List;
+
+/**
+ * 百色中学-年级Service
+ *
+ * @author 科技小王子
+ * @since 2025-03-06 22:50:25
+ */
+public interface BszxGradeService extends IService {
+
+ /**
+ * 分页关联查询
+ *
+ * @param param 查询参数
+ * @return PageResult
+ */
+ PageResult pageRel(BszxGradeParam param);
+
+ /**
+ * 关联查询全部
+ *
+ * @param param 查询参数
+ * @return List
+ */
+ List listRel(BszxGradeParam param);
+
+ /**
+ * 根据id查询
+ *
+ * @param id ID
+ * @return BszxGrade
+ */
+ BszxGrade getByIdRel(Integer id);
+
+}
diff --git a/src/main/java/com/gxwebsoft/bszx/service/BszxPayRankingService.java b/src/main/java/com/gxwebsoft/bszx/service/BszxPayRankingService.java
new file mode 100644
index 0000000..962ff2b
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/bszx/service/BszxPayRankingService.java
@@ -0,0 +1,42 @@
+package com.gxwebsoft.bszx.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gxwebsoft.common.core.web.PageResult;
+import com.gxwebsoft.bszx.entity.BszxPayRanking;
+import com.gxwebsoft.bszx.param.BszxPayRankingParam;
+
+import java.util.List;
+
+/**
+ * 百色中学-捐款排行Service
+ *
+ * @author 科技小王子
+ * @since 2025-03-25 08:54:09
+ */
+public interface BszxPayRankingService extends IService {
+
+ /**
+ * 分页关联查询
+ *
+ * @param param 查询参数
+ * @return PageResult
+ */
+ PageResult pageRel(BszxPayRankingParam param);
+
+ /**
+ * 关联查询全部
+ *
+ * @param param 查询参数
+ * @return List
+ */
+ List listRel(BszxPayRankingParam param);
+
+ /**
+ * 根据id查询
+ *
+ * @param id ID
+ * @return BszxPayRanking
+ */
+ BszxPayRanking getByIdRel(Integer id);
+
+}
diff --git a/src/main/java/com/gxwebsoft/bszx/service/BszxPayService.java b/src/main/java/com/gxwebsoft/bszx/service/BszxPayService.java
new file mode 100644
index 0000000..760128b
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/bszx/service/BszxPayService.java
@@ -0,0 +1,51 @@
+package com.gxwebsoft.bszx.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gxwebsoft.common.core.web.PageResult;
+import com.gxwebsoft.bszx.entity.BszxPay;
+import com.gxwebsoft.bszx.param.BszxPayParam;
+import com.gxwebsoft.project.entity.Project;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 百色中学-捐款记录Service
+ *
+ * @author 科技小王子
+ * @since 2025-03-06 22:50:25
+ */
+public interface BszxPayService extends IService {
+
+ /**
+ * 分页关联查询
+ *
+ * @param param 查询参数
+ * @return PageResult
+ */
+ PageResult pageRel(BszxPayParam param);
+
+ /**
+ * 关联查询全部
+ *
+ * @param param 查询参数
+ * @return List
+ */
+ List listRel(BszxPayParam param);
+
+ /**
+ * 根据id查询
+ *
+ * @param id ID
+ * @return BszxPay
+ */
+ BszxPay getByIdRel(Integer id);
+
+ /**
+ * 生成捐款证书
+ */
+ String generatePayCert(Integer id) throws Exception;
+
+ BigDecimal sumMoney(LambdaQueryWrapper between);
+}
diff --git a/src/main/java/com/gxwebsoft/bszx/service/impl/BszxBmServiceImpl.java b/src/main/java/com/gxwebsoft/bszx/service/impl/BszxBmServiceImpl.java
new file mode 100644
index 0000000..fe8d146
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/bszx/service/impl/BszxBmServiceImpl.java
@@ -0,0 +1,160 @@
+package com.gxwebsoft.bszx.service.impl;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.RandomUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.freewayso.image.combiner.ImageCombiner;
+import com.freewayso.image.combiner.enums.OutputFormat;
+import com.gxwebsoft.bszx.entity.BszxClass;
+import com.gxwebsoft.bszx.mapper.BszxBmMapper;
+import com.gxwebsoft.bszx.param.BszxClassParam;
+import com.gxwebsoft.bszx.service.BszxBmService;
+import com.gxwebsoft.bszx.entity.BszxBm;
+import com.gxwebsoft.bszx.param.BszxBmParam;
+import com.gxwebsoft.bszx.service.BszxClassService;
+import com.gxwebsoft.cms.entity.CmsArticle;
+import com.gxwebsoft.cms.service.CmsArticleService;
+import com.gxwebsoft.common.core.config.ConfigProperties;
+import com.gxwebsoft.common.core.utils.FileServerUtil;
+import com.gxwebsoft.common.core.utils.ImageUtil;
+import com.gxwebsoft.common.core.web.PageParam;
+import com.gxwebsoft.common.core.web.PageResult;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 百色中学-报名记录Service实现
+ *
+ * @author 科技小王子
+ * @since 2025-03-06 22:50:25
+ */
+@Service
+public class BszxBmServiceImpl extends ServiceImpl implements BszxBmService {
+ @Value("${config.upload-path}")
+ private String uploadPath;
+ @Value("${config.file-server}")
+ private String fileServer;
+ @Resource
+ private ConfigProperties config;
+ @Resource
+ private CmsArticleService cmsArticleService;
+ @Resource
+ private BszxClassService bszxClassService;
+
+ @Override
+ public PageResult pageRel(BszxBmParam param) {
+ PageParam page = new PageParam<>(param);
+ page.setDefaultOrder("id desc");
+ List list = baseMapper.selectPageRel(page, param);
+ list.forEach(d -> {
+ if(d.getClassId().equals(0)){
+ final BszxClassParam classParam = new BszxClassParam();
+ classParam.setGradeName(d.getGradeName());
+ classParam.setName(d.getClassName());
+ final List bszxClasses = bszxClassService.listRel(classParam);
+ if (!CollectionUtils.isEmpty(bszxClasses)) {
+ BszxClass bszxClass = bszxClasses.get(0);
+ System.out.println("bszxClass = " + bszxClass);
+ d.setClassId(bszxClass.getId());
+ d.setBranchId(bszxClass.getBranch());
+ updateById(d);
+ }
+ }
+ });
+ return new PageResult<>(list, page.getTotal());
+ }
+
+ @Override
+ public List listRel(BszxBmParam param) {
+ List list = baseMapper.selectListRel(param);
+ // 排序
+ PageParam page = new PageParam<>();
+ page.setDefaultOrder("id desc");
+ return page.sortRecords(list);
+ }
+
+ @Override
+ public BszxBm getByIdRel(Integer id) {
+ BszxBmParam param = new BszxBmParam();
+ param.setId(id);
+ return param.getOne(baseMapper.selectListRel(param));
+ }
+
+
+ /**
+ * 生成捐款证书 ...
+ *
+ * @return
+ * @throws Exception
+ */
+ @Override
+ public String generatePoster(BszxBm item) throws Exception {
+ final CmsArticle article = cmsArticleService.getById(7859);
+ if (ObjectUtil.isEmpty(article)) {
+ return null;
+ }
+ if (ObjectUtil.isNotEmpty(item)) {
+ // Font font = new Font("阿里巴巴普惠体", Font.PLAIN, 40);
+ //合成器(指定背景图和输出格式,整个图片的宽高和相关计算依赖于背景图,所以背景图的大小是个基准)
+ ImageCombiner combiner = new ImageCombiner(article.getAddress(), OutputFormat.JPG);
+ //加文本元素:姓名
+// if (item.getType().equals(0)) {
+// combiner.addTextElement(item.getName().concat(" 校友"), 40, 220, 540);
+// } else {
+// combiner.addTextElement(item.getName(), 40, 220, 540);
+// }
+
+// combiner.addTextElement(DateUtil.format(DateUtil.date(), "yyyy年MM月"), 28,650, 1566);
+ //加图片元素:盖章
+// combiner.addImageElement("https://oss.wsdns.cn/20250304/6936b109b09b4919a3498ac5027e728b.png", 600, 1420);
+
+
+ if (item.getType().equals(0)) {
+ combiner.addTextElement(item.getName().concat(" 校友"), 30, 160, 1008);
+ } else {
+ combiner.addTextElement(item.getName(), 30, 160, 1008);
+ }
+
+// combiner.addTextElement(DateUtil.format(DateUtil.date(), "yyyy年MM月"), 28,650, 1566);
+ //加图片元素:盖章
+// combiner.addImageElement("https://oss.wsdns.cn/20250304/6936b109b09b4919a3498ac5027e728b.png", 600, 1420);
+ //执行图片合并
+ combiner.combine();
+
+ if (!FileUtil.exist(uploadPath + "file/poster/" + item.getTenantId() + "/bm")) {
+ FileUtil.mkdir(uploadPath + "file/poster/" + item.getTenantId() + "/bm");
+ }
+ String basePath = "/poster/" + item.getTenantId() + "/bm/big-" + item.getId() + ".jpg";
+ String smallPath = "/poster/" + item.getTenantId() + "/bm/" + item.getId() + ".jpg";
+ String filename = uploadPath + "file" + basePath;
+ String smallFileName = uploadPath + "file" + smallPath;
+ combiner.save(filename);
+
+ File input = new File(filename);
+ File output = new File(smallFileName);
+ ImageUtil.adjustQuality(input, output, 0.8f);
+ if(input.exists()){
+ input.delete();
+ }
+ return fileServer + smallPath + "?r=" + RandomUtil.randomNumbers(4);
+ }
+ return null;
+ }
+
+ @Override
+ public BszxBm getByUserId(Integer userId) {
+ return getOne(new LambdaQueryWrapper().eq(BszxBm::getUserId, userId).last("limit 1"));
+ }
+}
diff --git a/src/main/java/com/gxwebsoft/bszx/service/impl/BszxBranchServiceImpl.java b/src/main/java/com/gxwebsoft/bszx/service/impl/BszxBranchServiceImpl.java
new file mode 100644
index 0000000..7e12499
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/bszx/service/impl/BszxBranchServiceImpl.java
@@ -0,0 +1,47 @@
+package com.gxwebsoft.bszx.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gxwebsoft.bszx.mapper.BszxBranchMapper;
+import com.gxwebsoft.bszx.service.BszxBranchService;
+import com.gxwebsoft.bszx.entity.BszxBranch;
+import com.gxwebsoft.bszx.param.BszxBranchParam;
+import com.gxwebsoft.common.core.web.PageParam;
+import com.gxwebsoft.common.core.web.PageResult;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 百色中学-分部Service实现
+ *
+ * @author 科技小王子
+ * @since 2025-03-17 17:18:22
+ */
+@Service
+public class BszxBranchServiceImpl extends ServiceImpl implements BszxBranchService {
+
+ @Override
+ public PageResult pageRel(BszxBranchParam param) {
+ PageParam page = new PageParam<>(param);
+ page.setDefaultOrder("sort_number asc, create_time desc");
+ List list = baseMapper.selectPageRel(page, param);
+ return new PageResult<>(list, page.getTotal());
+ }
+
+ @Override
+ public List listRel(BszxBranchParam param) {
+ List list = baseMapper.selectListRel(param);
+ // 排序
+ PageParam page = new PageParam<>();
+ page.setDefaultOrder("sort_number asc, create_time desc");
+ return page.sortRecords(list);
+ }
+
+ @Override
+ public BszxBranch getByIdRel(Integer id) {
+ BszxBranchParam param = new BszxBranchParam();
+ param.setId(id);
+ return param.getOne(baseMapper.selectListRel(param));
+ }
+
+}
diff --git a/src/main/java/com/gxwebsoft/bszx/service/impl/BszxClassServiceImpl.java b/src/main/java/com/gxwebsoft/bszx/service/impl/BszxClassServiceImpl.java
new file mode 100644
index 0000000..20ea2f7
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/bszx/service/impl/BszxClassServiceImpl.java
@@ -0,0 +1,68 @@
+package com.gxwebsoft.bszx.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gxwebsoft.bszx.entity.BszxPay;
+import com.gxwebsoft.bszx.mapper.BszxClassMapper;
+import com.gxwebsoft.bszx.service.BszxClassService;
+import com.gxwebsoft.bszx.entity.BszxClass;
+import com.gxwebsoft.bszx.param.BszxClassParam;
+import com.gxwebsoft.bszx.service.BszxPayService;
+import com.gxwebsoft.common.core.utils.RedisUtil;
+import com.gxwebsoft.common.core.web.PageParam;
+import com.gxwebsoft.common.core.web.PageResult;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 百色中学-班级Service实现
+ *
+ * @author 科技小王子
+ * @since 2025-03-06 22:50:25
+ */
+@Service
+public class BszxClassServiceImpl extends ServiceImpl implements BszxClassService {
+ @Resource
+ private RedisUtil redisUtil;
+ @Resource
+ private BszxPayService bszxPayService;
+
+ @Override
+ public PageResult pageRel(BszxClassParam param) {
+ PageParam page = new PageParam<>(param);
+ page.setDefaultOrder("sort_number asc, id asc");
+ List list = baseMapper.selectPageRel(page, param);
+ LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
+
+ if (param.getLimit() == null) {
+ list.forEach(item -> {
+ wrapper.clear();
+// wrapper.eq(BszxPay::getBranchName,item.getBranchName());
+ wrapper.eq(BszxPay::getGradeName,item.getGradeName());
+ wrapper.eq(BszxPay::getClassName, item.getName());
+ item.setTotalMoney(bszxPayService.sumMoney(wrapper));
+ updateById(item);
+ });
+ }
+ return new PageResult<>(list, page.getTotal());
+ }
+
+ @Override
+ public List listRel(BszxClassParam param) {
+ List list = baseMapper.selectListRel(param);
+ // 排序
+ PageParam page = new PageParam<>();
+ page.setDefaultOrder("sort_number asc, id asc");
+ return page.sortRecords(list);
+ }
+
+ @Override
+ public BszxClass getByIdRel(Integer id) {
+ BszxClassParam param = new BszxClassParam();
+ param.setId(id);
+ return param.getOne(baseMapper.selectListRel(param));
+ }
+
+}
diff --git a/src/main/java/com/gxwebsoft/bszx/service/impl/BszxEraServiceImpl.java b/src/main/java/com/gxwebsoft/bszx/service/impl/BszxEraServiceImpl.java
new file mode 100644
index 0000000..ad39481
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/bszx/service/impl/BszxEraServiceImpl.java
@@ -0,0 +1,47 @@
+package com.gxwebsoft.bszx.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gxwebsoft.bszx.mapper.BszxEraMapper;
+import com.gxwebsoft.bszx.service.BszxEraService;
+import com.gxwebsoft.bszx.entity.BszxEra;
+import com.gxwebsoft.bszx.param.BszxEraParam;
+import com.gxwebsoft.common.core.web.PageParam;
+import com.gxwebsoft.common.core.web.PageResult;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 百色中学-年代Service实现
+ *
+ * @author 科技小王子
+ * @since 2025-03-06 22:50:25
+ */
+@Service
+public class BszxEraServiceImpl extends ServiceImpl implements BszxEraService {
+
+ @Override
+ public PageResult pageRel(BszxEraParam param) {
+ PageParam page = new PageParam<>(param);
+ page.setDefaultOrder("sort_number asc, create_time desc");
+ List list = baseMapper.selectPageRel(page, param);
+ return new PageResult<>(list, page.getTotal());
+ }
+
+ @Override
+ public List listRel(BszxEraParam param) {
+ List list = baseMapper.selectListRel(param);
+ // 排序
+ PageParam page = new PageParam<>();
+ page.setDefaultOrder("sort_number asc, create_time desc");
+ return page.sortRecords(list);
+ }
+
+ @Override
+ public BszxEra getByIdRel(Integer id) {
+ BszxEraParam param = new BszxEraParam();
+ param.setId(id);
+ return param.getOne(baseMapper.selectListRel(param));
+ }
+
+}
diff --git a/src/main/java/com/gxwebsoft/bszx/service/impl/BszxGradeServiceImpl.java b/src/main/java/com/gxwebsoft/bszx/service/impl/BszxGradeServiceImpl.java
new file mode 100644
index 0000000..1dded74
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/bszx/service/impl/BszxGradeServiceImpl.java
@@ -0,0 +1,47 @@
+package com.gxwebsoft.bszx.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gxwebsoft.bszx.mapper.BszxGradeMapper;
+import com.gxwebsoft.bszx.service.BszxGradeService;
+import com.gxwebsoft.bszx.entity.BszxGrade;
+import com.gxwebsoft.bszx.param.BszxGradeParam;
+import com.gxwebsoft.common.core.web.PageParam;
+import com.gxwebsoft.common.core.web.PageResult;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 百色中学-年级Service实现
+ *
+ * @author 科技小王子
+ * @since 2025-03-06 22:50:25
+ */
+@Service
+public class BszxGradeServiceImpl extends ServiceImpl implements BszxGradeService {
+
+ @Override
+ public PageResult pageRel(BszxGradeParam param) {
+ PageParam page = new PageParam<>(param);
+ page.setDefaultOrder("sort_number asc, id asc");
+ List list = baseMapper.selectPageRel(page, param);
+ return new PageResult<>(list, page.getTotal());
+ }
+
+ @Override
+ public List listRel(BszxGradeParam param) {
+ List list = baseMapper.selectListRel(param);
+ // 排序
+ PageParam page = new PageParam<>();
+ page.setDefaultOrder("sort_number asc, id asc");
+ return page.sortRecords(list);
+ }
+
+ @Override
+ public BszxGrade getByIdRel(Integer id) {
+ BszxGradeParam param = new BszxGradeParam();
+ param.setId(id);
+ return param.getOne(baseMapper.selectListRel(param));
+ }
+
+}
diff --git a/src/main/java/com/gxwebsoft/bszx/service/impl/BszxPayRankingServiceImpl.java b/src/main/java/com/gxwebsoft/bszx/service/impl/BszxPayRankingServiceImpl.java
new file mode 100644
index 0000000..22cee64
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/bszx/service/impl/BszxPayRankingServiceImpl.java
@@ -0,0 +1,47 @@
+package com.gxwebsoft.bszx.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gxwebsoft.bszx.mapper.BszxPayRankingMapper;
+import com.gxwebsoft.bszx.service.BszxPayRankingService;
+import com.gxwebsoft.bszx.entity.BszxPayRanking;
+import com.gxwebsoft.bszx.param.BszxPayRankingParam;
+import com.gxwebsoft.common.core.web.PageParam;
+import com.gxwebsoft.common.core.web.PageResult;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 百色中学-捐款排行Service实现
+ *
+ * @author 科技小王子
+ * @since 2025-03-25 08:54:09
+ */
+@Service
+public class BszxPayRankingServiceImpl extends ServiceImpl implements BszxPayRankingService {
+
+ @Override
+ public PageResult pageRel(BszxPayRankingParam param) {
+ PageParam page = new PageParam<>(param);
+ page.setDefaultOrder("sort_number asc, create_time desc");
+ List list = baseMapper.selectPageRel(page, param);
+ return new PageResult<>(list, page.getTotal());
+ }
+
+ @Override
+ public List listRel(BszxPayRankingParam param) {
+ List list = baseMapper.selectListRel(param);
+ // 排序
+ PageParam page = new PageParam<>();
+ page.setDefaultOrder("sort_number asc, create_time desc");
+ return page.sortRecords(list);
+ }
+
+ @Override
+ public BszxPayRanking getByIdRel(Integer id) {
+ BszxPayRankingParam param = new BszxPayRankingParam();
+ param.setId(id);
+ return param.getOne(baseMapper.selectListRel(param));
+ }
+
+}
diff --git a/src/main/java/com/gxwebsoft/bszx/service/impl/BszxPayServiceImpl.java b/src/main/java/com/gxwebsoft/bszx/service/impl/BszxPayServiceImpl.java
new file mode 100644
index 0000000..e827035
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/bszx/service/impl/BszxPayServiceImpl.java
@@ -0,0 +1,150 @@
+package com.gxwebsoft.bszx.service.impl;
+
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.RandomUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.freewayso.image.combiner.ImageCombiner;
+import com.freewayso.image.combiner.enums.OutputFormat;
+import com.gxwebsoft.bszx.entity.BszxBm;
+import com.gxwebsoft.bszx.mapper.BszxPayMapper;
+import com.gxwebsoft.bszx.service.BszxBmService;
+import com.gxwebsoft.bszx.service.BszxPayService;
+import com.gxwebsoft.bszx.entity.BszxPay;
+import com.gxwebsoft.bszx.param.BszxPayParam;
+import com.gxwebsoft.cms.entity.CmsArticle;
+import com.gxwebsoft.cms.service.CmsArticleService;
+import com.gxwebsoft.common.core.utils.ImageUtil;
+import com.gxwebsoft.common.core.web.PageParam;
+import com.gxwebsoft.common.core.web.PageResult;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.io.File;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 百色中学-捐款记录Service实现
+ *
+ * @author 科技小王子
+ * @since 2025-03-06 22:50:25
+ */
+@Service
+public class BszxPayServiceImpl extends ServiceImpl implements BszxPayService {
+ @Value("${config.upload-path}")
+ private String uploadPath;
+ @Value("${config.file-server}")
+ private String fileServer;
+
+ @Resource
+ private CmsArticleService cmsArticleService;
+ @Resource
+ public BszxBmService bszxBmService;
+ @Resource
+ private BszxPayService bszxPayService;
+
+ @Override
+ public PageResult pageRel(BszxPayParam param) {
+ PageParam page = new PageParam<>(param);
+ page.setDefaultOrder("price desc, create_time desc");
+ List list = baseMapper.selectPageRel(page, param);
+ list.forEach(item -> {
+ if(item.getId().equals(2088)){
+ item.setFormName("捐款用于设立阙里校友奖学金");
+ }
+ });
+ return new PageResult<>(list, page.getTotal());
+ }
+
+ @Override
+ public List listRel(BszxPayParam param) {
+ List list = baseMapper.selectListRel(param);
+ // 排序
+ PageParam page = new PageParam<>();
+ page.setDefaultOrder("id desc");
+ return page.sortRecords(list);
+ }
+
+ @Override
+ public BszxPay getByIdRel(Integer id) {
+ BszxPayParam param = new BszxPayParam();
+ param.setId(id);
+ final BszxPay item = param.getOne(baseMapper.selectListRel(param));
+ final CmsArticle article = cmsArticleService.getById(item.getFormId());
+ if (ObjectUtil.isNotEmpty(article)) {
+ item.setArticle(article);
+ }
+ return item;
+ }
+
+ /**
+ * 生成捐款证书 ...
+ */
+ @Override
+ public String generatePayCert(Integer id) throws Exception {
+ final BszxPay payCert = getByIdRel(id);
+ final CmsArticle item = cmsArticleService.getById(payCert.getFormId());
+ final BszxBm bm = bszxBmService.getOne(new LambdaQueryWrapper().eq(BszxBm::getUserId, payCert.getUserId()).last("limit 1"));
+ final BigDecimal totalMoney = bszxPayService.sumMoney(new LambdaQueryWrapper().eq(BszxPay::getUserId, payCert.getUserId()));
+ if (StrUtil.isBlank(item.getAddress())) {
+ return null;
+ }
+ if (ObjectUtil.isNotEmpty(payCert)) {
+ //合成器(指定背景图和输出格式,整个图片的宽高和相关计算依赖于背景图,所以背景图的大小是个基准)
+ ImageCombiner combiner = new ImageCombiner("https://oss.wsdns.cn/20250420/811a380e8e124097aa0940a7c68a1f72.jpeg", OutputFormat.JPG);
+ //加图片元素:盖章
+// combiner.addImageElement("https://oss.wsdns.cn/20250304/6936b109b09b4919a3498ac5027e728b.png", 550, 926);
+ //加文本元素:姓名
+ String str;
+ if (bm.getType().equals(0)) {
+ str = bm.getName().concat(" 校友");
+ combiner.addTextElement(str, 32, 930, 450);
+ } else {
+ str = bm.getName();
+ combiner.addTextElement(str, 22, 880, 450);
+ }
+// combiner.addTextElement(bm.getName(), 32,900, 450);
+ //加文本元素:捐款证书内容
+// combiner.addTextElement(" 承您慷慨解囊,襄助百色市百色中学", 32,200, 650);
+// combiner.addTextElement("百廿校庆“" + item.getTitle() + "”项目,捐赠人民币", 32,200, 700);
+ combiner.addTextElement(totalMoney + "", 32, 1330, 600);
+// combiner.addTextElement(" 您对学校的支持,为我们共同教育理", 32,200, 800);
+// combiner.addTextElement("想的实现增添了一份动力。", 32,200, 850);
+// combiner.addTextElement(" 承蒙惠赠,隆情铭感,特颁此证,以资谢旌!", 32, 200, 900);
+// combiner.addTextElement("百色市百色中学", 32,560, 1015);
+// final Date createTime = payCert.getCreateTime();
+// combiner.addTextElement(DateUtil.format(createTime, "yyyy年MM月"), 28,586, 1060);
+// combiner.addTextElement("2025年4月15日", 28,580, 1060);
+
+ //执行图片合并
+ combiner.combine();
+
+ if (!FileUtil.exist(uploadPath + "file/poster/" + payCert.getTenantId() + "/pay")) {
+ FileUtil.mkdir(uploadPath + "file/poster/" + payCert.getTenantId() + "/pay");
+ }
+ String basePath = "/poster/" + payCert.getTenantId() + "/pay/big-" + id + ".jpg";
+ String smallPath = "/poster/" + payCert.getTenantId() + "/pay/" + id + ".jpg";
+ String filename = uploadPath + "file" + basePath;
+ String smallFileName = uploadPath + "file" + smallPath;
+ combiner.save(filename);
+
+ File input = new File(filename);
+ File output = new File(smallFileName);
+ ImageUtil.adjustQuality(input, output, 0.8f);
+ if (input.exists()) {
+ input.delete();
+ }
+ return fileServer + smallPath + "?r=" + RandomUtil.randomNumbers(4);
+ }
+ return null;
+ }
+
+ @Override
+ public BigDecimal sumMoney(LambdaQueryWrapper wrapper) {
+ return baseMapper.selectSumMoney(wrapper);
+ }
+}
diff --git a/src/main/java/com/gxwebsoft/cms/controller/CmsAdController.java b/src/main/java/com/gxwebsoft/cms/controller/CmsAdController.java
new file mode 100644
index 0000000..fe11866
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/cms/controller/CmsAdController.java
@@ -0,0 +1,112 @@
+package com.gxwebsoft.cms.controller;
+
+import com.gxwebsoft.common.core.web.BaseController;
+import com.gxwebsoft.cms.service.CmsAdService;
+import com.gxwebsoft.cms.entity.CmsAd;
+import com.gxwebsoft.cms.param.CmsAdParam;
+import com.gxwebsoft.common.core.web.ApiResult;
+import com.gxwebsoft.common.core.web.PageResult;
+import com.gxwebsoft.common.core.web.BatchParam;
+import com.gxwebsoft.common.system.entity.User;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 广告位控制器
+ *
+ * @author 科技小王子
+ * @since 2024-09-10 20:47:57
+ */
+@Api(tags = "广告位管理")
+@RestController
+@RequestMapping("/api/cms/cms-ad")
+public class CmsAdController extends BaseController {
+ @Resource
+ private CmsAdService cmsAdService;
+
+ @ApiOperation("分页查询广告位")
+ @GetMapping("/page")
+ public ApiResult> page(CmsAdParam param) {
+ // 使用关联查询
+ return success(cmsAdService.pageRel(param));
+ }
+
+ @ApiOperation("查询全部广告位")
+ @GetMapping()
+ public ApiResult> list(CmsAdParam param) {
+ // 使用关联查询
+ return success(cmsAdService.listRel(param));
+ }
+
+ @ApiOperation("根据id查询广告位")
+ @GetMapping("/{id}")
+ public ApiResult get(@PathVariable("id") Integer id) {
+ // 使用关联查询
+ final CmsAd ad = cmsAdService.getByIdRel(id);
+ return success(ad);
+ }
+
+ @ApiOperation("添加广告位")
+ @PostMapping()
+ public ApiResult> save(@RequestBody CmsAd cmsAd) {
+ // 记录当前登录用户id
+ User loginUser = getLoginUser();
+ if (loginUser != null) {
+ cmsAd.setUserId(loginUser.getUserId());
+ }
+ if (cmsAdService.save(cmsAd)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+ @ApiOperation("修改广告位")
+ @PutMapping()
+ public ApiResult> update(@RequestBody CmsAd cmsAd) {
+ if (cmsAdService.updateById(cmsAd)) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+ @ApiOperation("删除广告位")
+ @DeleteMapping("/{id}")
+ public ApiResult> remove(@PathVariable("id") Integer id) {
+ if (cmsAdService.removeById(id)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+ @ApiOperation("批量添加广告位")
+ @PostMapping("/batch")
+ public ApiResult> saveBatch(@RequestBody List list) {
+ if (cmsAdService.saveBatch(list)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+ @ApiOperation("批量修改广告位")
+ @PutMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody BatchParam batchParam) {
+ if (batchParam.update(cmsAdService, "ad_id")) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+ @ApiOperation("批量删除广告位")
+ @DeleteMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody List ids) {
+ if (cmsAdService.removeByIds(ids)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+}
diff --git a/src/main/java/com/gxwebsoft/cms/controller/CmsAdRecordController.java b/src/main/java/com/gxwebsoft/cms/controller/CmsAdRecordController.java
new file mode 100644
index 0000000..a57eda4
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/cms/controller/CmsAdRecordController.java
@@ -0,0 +1,114 @@
+package com.gxwebsoft.cms.controller;
+
+import com.gxwebsoft.common.core.web.BaseController;
+import com.gxwebsoft.cms.service.CmsAdRecordService;
+import com.gxwebsoft.cms.entity.CmsAdRecord;
+import com.gxwebsoft.cms.param.CmsAdRecordParam;
+import com.gxwebsoft.common.core.web.ApiResult;
+import com.gxwebsoft.common.core.web.PageResult;
+import com.gxwebsoft.common.core.web.PageParam;
+import com.gxwebsoft.common.core.web.BatchParam;
+import com.gxwebsoft.common.core.annotation.OperationLog;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 广告图片控制器
+ *
+ * @author 科技小王子
+ * @since 2024-09-10 20:47:57
+ */
+@Api(tags = "广告图片管理")
+@RestController
+@RequestMapping("/api/cms/cms-ad-record")
+public class CmsAdRecordController extends BaseController {
+ @Resource
+ private CmsAdRecordService cmsAdRecordService;
+
+ @ApiOperation("分页查询广告图片")
+ @GetMapping("/page")
+ public ApiResult> page(CmsAdRecordParam param) {
+ // 使用关联查询
+ return success(cmsAdRecordService.pageRel(param));
+ }
+
+ @ApiOperation("查询全部广告图片")
+ @GetMapping()
+ public ApiResult> list(CmsAdRecordParam param) {
+ PageParam page = new PageParam<>(param);
+ page.setDefaultOrder("create_time desc");
+ return success(cmsAdRecordService.list(page.getOrderWrapper()));
+ // 使用关联查询
+ //return success(cmsAdRecordService.listRel(param));
+ }
+
+ @PreAuthorize("hasAuthority('cms:cmsAdRecord:list')")
+ @OperationLog
+ @ApiOperation("根据id查询广告图片")
+ @GetMapping("/{id}")
+ public ApiResult get(@PathVariable("id") Integer id) {
+ return success(cmsAdRecordService.getById(id));
+ // 使用关联查询
+ //return success(cmsAdRecordService.getByIdRel(id));
+ }
+
+ @ApiOperation("添加广告图片")
+ @PostMapping()
+ public ApiResult> save(@RequestBody CmsAdRecord cmsAdRecord) {
+ if (cmsAdRecordService.save(cmsAdRecord)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+ @ApiOperation("修改广告图片")
+ @PutMapping()
+ public ApiResult> update(@RequestBody CmsAdRecord cmsAdRecord) {
+ if (cmsAdRecordService.updateById(cmsAdRecord)) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+ @ApiOperation("删除广告图片")
+ @DeleteMapping("/{id}")
+ public ApiResult> remove(@PathVariable("id") Integer id) {
+ if (cmsAdRecordService.removeById(id)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+ @ApiOperation("批量添加广告图片")
+ @PostMapping("/batch")
+ public ApiResult> saveBatch(@RequestBody List list) {
+ if (cmsAdRecordService.saveBatch(list)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+ @ApiOperation("批量修改广告图片")
+ @PutMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody BatchParam batchParam) {
+ if (batchParam.update(cmsAdRecordService, "ad_record_id")) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+ @ApiOperation("批量删除广告图片")
+ @DeleteMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody List ids) {
+ if (cmsAdRecordService.removeByIds(ids)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+}
diff --git a/src/main/java/com/gxwebsoft/cms/controller/CmsArticleCategoryController.java b/src/main/java/com/gxwebsoft/cms/controller/CmsArticleCategoryController.java
new file mode 100644
index 0000000..d3422f8
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/cms/controller/CmsArticleCategoryController.java
@@ -0,0 +1,111 @@
+package com.gxwebsoft.cms.controller;
+
+import com.gxwebsoft.common.core.web.BaseController;
+import com.gxwebsoft.cms.service.CmsArticleCategoryService;
+import com.gxwebsoft.cms.entity.CmsArticleCategory;
+import com.gxwebsoft.cms.param.CmsArticleCategoryParam;
+import com.gxwebsoft.common.core.web.ApiResult;
+import com.gxwebsoft.common.core.web.PageResult;
+import com.gxwebsoft.common.core.web.BatchParam;
+import com.gxwebsoft.common.system.entity.User;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 文章分类表控制器
+ *
+ * @author 科技小王子
+ * @since 2024-09-10 20:47:57
+ */
+@Api(tags = "文章分类表管理")
+@RestController
+@RequestMapping("/api/cms/cms-article-category")
+public class CmsArticleCategoryController extends BaseController {
+ @Resource
+ private CmsArticleCategoryService cmsArticleCategoryService;
+
+ @ApiOperation("分页查询文章分类表")
+ @GetMapping("/page")
+ public ApiResult> page(CmsArticleCategoryParam param) {
+ // 使用关联查询
+ return success(cmsArticleCategoryService.pageRel(param));
+ }
+
+ @ApiOperation("查询全部文章分类表")
+ @GetMapping()
+ public ApiResult> list(CmsArticleCategoryParam param) {
+ // 使用关联查询
+ return success(cmsArticleCategoryService.listRel(param));
+ }
+
+ @ApiOperation("根据id查询文章分类表")
+ @GetMapping("/{id}")
+ public ApiResult get(@PathVariable("id") Integer id) {
+ // 使用关联查询
+ return success(cmsArticleCategoryService.getByIdRel(id));
+ }
+
+ @ApiOperation("添加文章分类表")
+ @PostMapping()
+ public ApiResult> save(@RequestBody CmsArticleCategory cmsArticleCategory) {
+ // 记录当前登录用户id
+ User loginUser = getLoginUser();
+ if (loginUser != null) {
+ cmsArticleCategory.setUserId(loginUser.getUserId());
+ }
+ if (cmsArticleCategoryService.save(cmsArticleCategory)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+ @ApiOperation("修改文章分类表")
+ @PutMapping()
+ public ApiResult> update(@RequestBody CmsArticleCategory cmsArticleCategory) {
+ if (cmsArticleCategoryService.updateById(cmsArticleCategory)) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+ @ApiOperation("删除文章分类表")
+ @DeleteMapping("/{id}")
+ public ApiResult> remove(@PathVariable("id") Integer id) {
+ if (cmsArticleCategoryService.removeById(id)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+ @ApiOperation("批量添加文章分类表")
+ @PostMapping("/batch")
+ public ApiResult> saveBatch(@RequestBody List list) {
+ if (cmsArticleCategoryService.saveBatch(list)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+ @ApiOperation("批量修改文章分类表")
+ @PutMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody BatchParam batchParam) {
+ if (batchParam.update(cmsArticleCategoryService, "category_id")) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+ @ApiOperation("批量删除文章分类表")
+ @DeleteMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody List ids) {
+ if (cmsArticleCategoryService.removeByIds(ids)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+}
diff --git a/src/main/java/com/gxwebsoft/cms/controller/CmsArticleCommentController.java b/src/main/java/com/gxwebsoft/cms/controller/CmsArticleCommentController.java
new file mode 100644
index 0000000..f2b4338
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/cms/controller/CmsArticleCommentController.java
@@ -0,0 +1,120 @@
+package com.gxwebsoft.cms.controller;
+
+import com.gxwebsoft.common.core.web.BaseController;
+import com.gxwebsoft.cms.service.CmsArticleCommentService;
+import com.gxwebsoft.cms.entity.CmsArticleComment;
+import com.gxwebsoft.cms.param.CmsArticleCommentParam;
+import com.gxwebsoft.common.core.web.ApiResult;
+import com.gxwebsoft.common.core.web.PageResult;
+import com.gxwebsoft.common.core.web.PageParam;
+import com.gxwebsoft.common.core.web.BatchParam;
+import com.gxwebsoft.common.core.annotation.OperationLog;
+import com.gxwebsoft.common.system.entity.User;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 文章评论表控制器
+ *
+ * @author 科技小王子
+ * @since 2024-09-10 20:47:57
+ */
+@Api(tags = "文章评论表管理")
+@RestController
+@RequestMapping("/api/cms/cms-article-comment")
+public class CmsArticleCommentController extends BaseController {
+ @Resource
+ private CmsArticleCommentService cmsArticleCommentService;
+
+ @ApiOperation("分页查询文章评论表")
+ @GetMapping("/page")
+ public ApiResult> page(CmsArticleCommentParam param) {
+ // 使用关联查询
+ return success(cmsArticleCommentService.pageRel(param));
+ }
+
+ @ApiOperation("查询全部文章评论表")
+ @GetMapping()
+ public ApiResult> list(CmsArticleCommentParam param) {
+ PageParam page = new PageParam<>(param);
+ page.setDefaultOrder("create_time desc");
+ return success(cmsArticleCommentService.list(page.getOrderWrapper()));
+ // 使用关联查询
+ //return success(cmsArticleCommentService.listRel(param));
+ }
+
+ @PreAuthorize("hasAuthority('cms:cmsArticleComment:list')")
+ @OperationLog
+ @ApiOperation("根据id查询文章评论表")
+ @GetMapping("/{id}")
+ public ApiResult get(@PathVariable("id") Integer id) {
+ return success(cmsArticleCommentService.getById(id));
+ // 使用关联查询
+ //return success(cmsArticleCommentService.getByIdRel(id));
+ }
+
+ @ApiOperation("添加文章评论表")
+ @PostMapping()
+ public ApiResult> save(@RequestBody CmsArticleComment cmsArticleComment) {
+ // 记录当前登录用户id
+ User loginUser = getLoginUser();
+ if (loginUser != null) {
+ cmsArticleComment.setUserId(loginUser.getUserId());
+ }
+ if (cmsArticleCommentService.save(cmsArticleComment)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+ @ApiOperation("修改文章评论表")
+ @PutMapping()
+ public ApiResult> update(@RequestBody CmsArticleComment cmsArticleComment) {
+ if (cmsArticleCommentService.updateById(cmsArticleComment)) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+ @ApiOperation("删除文章评论表")
+ @DeleteMapping("/{id}")
+ public ApiResult> remove(@PathVariable("id") Integer id) {
+ if (cmsArticleCommentService.removeById(id)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+ @ApiOperation("批量添加文章评论表")
+ @PostMapping("/batch")
+ public ApiResult> saveBatch(@RequestBody List list) {
+ if (cmsArticleCommentService.saveBatch(list)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+ @ApiOperation("批量修改文章评论表")
+ @PutMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody BatchParam batchParam) {
+ if (batchParam.update(cmsArticleCommentService, "comment_id")) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+ @ApiOperation("批量删除文章评论表")
+ @DeleteMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody List ids) {
+ if (cmsArticleCommentService.removeByIds(ids)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+}
diff --git a/src/main/java/com/gxwebsoft/cms/controller/CmsArticleContentController.java b/src/main/java/com/gxwebsoft/cms/controller/CmsArticleContentController.java
new file mode 100644
index 0000000..d3c2da3
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/cms/controller/CmsArticleContentController.java
@@ -0,0 +1,113 @@
+package com.gxwebsoft.cms.controller;
+
+import com.gxwebsoft.common.core.web.BaseController;
+import com.gxwebsoft.cms.service.CmsArticleContentService;
+import com.gxwebsoft.cms.entity.CmsArticleContent;
+import com.gxwebsoft.cms.param.CmsArticleContentParam;
+import com.gxwebsoft.common.core.web.ApiResult;
+import com.gxwebsoft.common.core.web.PageResult;
+import com.gxwebsoft.common.core.web.BatchParam;
+import com.gxwebsoft.common.core.annotation.OperationLog;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 文章记录表控制器
+ *
+ * @author 科技小王子
+ * @since 2024-09-10 20:47:57
+ */
+@Api(tags = "文章记录表管理")
+@RestController
+@RequestMapping("/api/cms/cms-article-content")
+public class CmsArticleContentController extends BaseController {
+ @Resource
+ private CmsArticleContentService cmsArticleContentService;
+
+ @ApiOperation("分页查询文章记录表")
+ @GetMapping("/page")
+ public ApiResult> page(CmsArticleContentParam param) {
+ // 使用关联查询
+ return success(cmsArticleContentService.pageRel(param));
+ }
+
+ @ApiOperation("查询全部文章记录表")
+ @GetMapping()
+ public ApiResult> list(CmsArticleContentParam param) {
+// PageParam page = new PageParam<>(param);
+// page.setDefaultOrder("create_time desc");
+// return success(cmsArticleContentService.list(page.getOrderWrapper()));
+ // 使用关联查询
+ return success(cmsArticleContentService.listRel(param));
+ }
+
+ @PreAuthorize("hasAuthority('cms:cmsArticleContent:list')")
+ @OperationLog
+ @ApiOperation("根据id查询文章记录表")
+ @GetMapping("/{id}")
+ public ApiResult get(@PathVariable("id") Integer id) {
+// return success(cmsArticleContentService.getById(id));
+ // 使用关联查询
+ return success(cmsArticleContentService.getByIdRel(id));
+ }
+
+ @ApiOperation("添加文章记录表")
+ @PostMapping()
+ public ApiResult> save(@RequestBody CmsArticleContent cmsArticleContent) {
+ if (cmsArticleContentService.save(cmsArticleContent)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+ @ApiOperation("修改文章记录表")
+ @PutMapping()
+ public ApiResult> update(@RequestBody CmsArticleContent cmsArticleContent) {
+ if (cmsArticleContentService.updateById(cmsArticleContent)) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+ @ApiOperation("删除文章记录表")
+ @DeleteMapping("/{id}")
+ public ApiResult> remove(@PathVariable("id") Integer id) {
+ if (cmsArticleContentService.removeById(id)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+ @ApiOperation("批量添加文章记录表")
+ @PostMapping("/batch")
+ public ApiResult> saveBatch(@RequestBody List list) {
+ if (cmsArticleContentService.saveBatch(list)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+ @ApiOperation("批量修改文章记录表")
+ @PutMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody BatchParam batchParam) {
+ if (batchParam.update(cmsArticleContentService, "id")) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+ @ApiOperation("批量删除文章记录表")
+ @DeleteMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody List ids) {
+ if (cmsArticleContentService.removeByIds(ids)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+}
diff --git a/src/main/java/com/gxwebsoft/cms/controller/CmsArticleController.java b/src/main/java/com/gxwebsoft/cms/controller/CmsArticleController.java
new file mode 100644
index 0000000..5d501c5
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/cms/controller/CmsArticleController.java
@@ -0,0 +1,360 @@
+package com.gxwebsoft.cms.controller;
+
+import cn.afterturn.easypoi.excel.ExcelImportUtil;
+import cn.afterturn.easypoi.excel.entity.ImportParams;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.gxwebsoft.cms.entity.*;
+import com.gxwebsoft.cms.param.CmsArticleImportParam;
+import com.gxwebsoft.cms.service.*;
+import com.gxwebsoft.common.core.utils.JSONUtil;
+import com.gxwebsoft.common.core.utils.RedisUtil;
+import com.gxwebsoft.common.core.web.BaseController;
+import com.gxwebsoft.cms.param.CmsArticleParam;
+import com.gxwebsoft.common.core.web.ApiResult;
+import com.gxwebsoft.common.core.web.PageResult;
+import com.gxwebsoft.common.core.web.BatchParam;
+import com.gxwebsoft.common.system.entity.User;
+import com.gxwebsoft.common.system.service.UserService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.validation.annotation.Validated;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.util.*;
+
+import static com.gxwebsoft.common.core.constants.ArticleConstants.CACHE_KEY_ARTICLE;
+
+/**
+ * 文章控制器
+ *
+ * @author 科技小王子
+ * @since 2024-09-10 20:47:57
+ */
+@Slf4j
+@Validated
+@Api(tags = "文章管理")
+@RestController
+@RequestMapping("/api/cms/cms-article")
+public class CmsArticleController extends BaseController {
+ @Resource
+ private CmsArticleService cmsArticleService;
+ @Resource
+ private CmsArticleContentService articleContentService;
+ @Resource
+ private CmsNavigationService cmsNavigationService;
+ @Resource
+ private CmsModelService cmsModelService;
+ @Resource
+ private UserService userService;
+ @Resource
+ private RedisUtil redisUtil;
+
+ private static final long CACHE_MINUTES = 30L;
+
+ @ApiOperation("分页查询文章")
+ @GetMapping("/page")
+ public ApiResult> page(CmsArticleParam param) {
+ // 使用关联查询
+ return success(cmsArticleService.pageRel(param));
+ }
+
+ @ApiOperation("查询全部文章")
+ @GetMapping()
+ public ApiResult> list(CmsArticleParam param) {
+ // 使用关联查询
+ return success(cmsArticleService.listRel(param));
+ }
+
+ @ApiOperation("根据id查询文章")
+ @GetMapping("/{id}")
+ public ApiResult get(@PathVariable("id") @NotNull Integer id) {
+ final CmsArticle article = cmsArticleService.getByIdRel(id);
+ if (ObjectUtil.isNotEmpty(article)) {
+ return success(article);
+ }
+ return fail("文章ID不存在",null);
+ }
+
+ @PreAuthorize("hasAuthority('cms:cmsArticle:save')")
+ @ApiOperation("添加文章")
+ @PostMapping()
+ public ApiResult> save(@RequestBody @Valid CmsArticle article) {
+ // 记录当前登录用户id
+ User loginUser = getLoginUser();
+ if (loginUser != null) {
+ article.setUserId(loginUser.getUserId());
+ article.setAuthor(loginUser.getNickname());
+ article.setMerchantId(loginUser.getMerchantId());
+ if (cmsArticleService.saveRel(article)) {
+ return success("添加成功");
+ }
+ }
+ return fail("添加失败");
+ }
+
+ @PreAuthorize("hasAuthority('cms:cmsArticle:update')")
+ @ApiOperation("修改文章")
+ @PutMapping()
+ public ApiResult> update(@RequestBody CmsArticle article) {
+ if (cmsArticleService.updateByIdRel(article)) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+ @PreAuthorize("hasAuthority('cms:cmsArticle:remove')")
+ @ApiOperation("删除文章")
+ @DeleteMapping("/{id}")
+ public ApiResult> remove(@PathVariable("id") Integer id) {
+ if (cmsArticleService.removeById(id)) {
+ redisUtil.delete(CACHE_KEY_ARTICLE + id);
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+ @PreAuthorize("hasAuthority('cms:cmsArticle:save')")
+ @ApiOperation("批量添加文章")
+ @PostMapping("/batch")
+ public ApiResult> saveBatch(@RequestBody List list) {
+ if (cmsArticleService.saveBatch(list)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+ @PreAuthorize("hasAuthority('cms:cmsArticle:update')")
+ @ApiOperation("批量修改文章")
+ @PutMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody BatchParam batchParam) {
+ if (batchParam.update(cmsArticleService, "article_id")) {
+ // 删除缓存
+ final List ids = batchParam.getIds();
+ ids.forEach(id -> {
+ redisUtil.delete(CACHE_KEY_ARTICLE + id);
+ });
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+ @PreAuthorize("hasAuthority('cms:cmsArticle:remove')")
+ @ApiOperation("批量删除文章")
+ @DeleteMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody List ids) {
+ if (cmsArticleService.removeByIds(ids)) {
+ // 删除缓存
+ ids.forEach(id -> {
+ redisUtil.delete(CACHE_KEY_ARTICLE + id);
+ });
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+ @ApiOperation("读取上一篇")
+ @GetMapping("/getPrevious/{id}")
+ public ApiResult