From 95ab62159057ed825a25870977ef2641fd704fab Mon Sep 17 00:00:00 2001
From: soul2 <1052986332@qq.com>
Date: Mon, 11 Mar 2024 17:47:30 +0800
Subject: [PATCH] =?UTF-8?q?2024=E5=B9=B43=E6=9C=8811=E6=97=A5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 92 ++++++++++++++++---
pom.xml | 8 +-
.../soul2/demo/controller/QrController.java | 62 +++++++++++++
src/main/java/cn/soul2/demo/dto/QrDTO.java | 62 +++++++++++++
src/main/java/cn/soul2/demo/entity/QrDO.java | 92 +++++++++++++++++++
.../java/cn/soul2/demo/mapper/QrMapper.java | 18 ++++
.../soul2/demo/repository/IQrRepository.java | 29 ++++++
.../repository/impl/QrRepositoryImpl.java | 71 ++++++++++++++
.../cn/soul2/demo/service/IQrService.java | 10 ++
.../cn/soul2/demo/service/QrServiceImpl.java | 12 +++
.../demo/utils/MybatisFastGenerator.java | 10 +-
src/main/java/cn/soul2/demo/vo/QrVO.java | 53 +++++++++++
src/main/resources/application-cors.yml | 2 +-
src/main/resources/application-datasource.yml | 6 +-
src/main/resources/application.yml | 4 +-
15 files changed, 503 insertions(+), 28 deletions(-)
create mode 100644 src/main/java/cn/soul2/demo/controller/QrController.java
create mode 100644 src/main/java/cn/soul2/demo/dto/QrDTO.java
create mode 100644 src/main/java/cn/soul2/demo/entity/QrDO.java
create mode 100644 src/main/java/cn/soul2/demo/mapper/QrMapper.java
create mode 100644 src/main/java/cn/soul2/demo/repository/IQrRepository.java
create mode 100644 src/main/java/cn/soul2/demo/repository/impl/QrRepositoryImpl.java
create mode 100644 src/main/java/cn/soul2/demo/service/IQrService.java
create mode 100644 src/main/java/cn/soul2/demo/service/QrServiceImpl.java
create mode 100644 src/main/java/cn/soul2/demo/vo/QrVO.java
diff --git a/README.md b/README.md
index 2b56b50..22440e2 100644
--- a/README.md
+++ b/README.md
@@ -1,21 +1,87 @@
-# soul2-java-demo-version_1
+# **需求整理**
-处于试验性质的Java模板
+## 一、 **二维码**
-## 开始
+### 1. **二维码位置**
-```bash
-git clone http://gitea.soul2.cn/soul2/soul2-java-demo-version_1.git
-```
+ ● 以二维码的形式存在于教材各处,作用形式大约为课后习题或课中做调查问卷式的信息收集,每个二维码可在后台单独配置指向的URL页面
-## 分支
+ ● 二维码的数量可变,但属于敏感操作
-- `master`: 上线
-- `develop`: 最新的开发版
+### 2. **页面来源**
-## 运行
+页面来自第三方(如问卷星)或自建页面
-使用dev环境
-` -Dspring.profiles.active=dev`
+### 3. **跳转**
-2022年9月6日 第一版 By soul2
\ No newline at end of file
+ 扫描二维码后进入固定的URL,获取微信身份并进行转发到最终指向,以避免页面来源失效后需要替换页面的问题
+
+## 二、 **后台功能**
+
+### 1、 **二维码指向管理**
+
+ ● 可管理每个二维码指向的URL页面,但后台本身不负责URL页面的可访问性
+
+ ● 可增加二维码
+
+### 2、 **信息解析**
+
+ 解析二维码收集到的信息结果,呈现方式待定
+
+## 三、 **第三方**
+
+### 1、 **问卷设置**
+
+通过第三方(如问卷星)设置问题和回答
+
+### 2、 **结果返回**
+
+ 通过第三方的数据推送将得到的结果存储到数据库中以待后台使用
+
+ 问卷星:https://www.wjx.cn/api.aspx
+
+## 四、 **数据库**
+
+### 1、 **二维码表**
+
+ToURL:指向的url
+
+Tip:注释
+
+### 2、 **问卷表**
+
+QRId:指向的二维码id,多个问卷同时指向同一个二维码时取更新日期最新的一个
+
+### 3、 **题目表**
+
+Title:题目标题
+
+Content:题目描述
+
+Type:题目类型【单选/多选/文字】
+
+### 4、 **选项表**
+
+Content:选项内容
+
+Weights:权重
+
+Points:分值
+
+### 5、 **问卷-题目表**
+
+连接问卷和题目
+
+### 6、 **题目-选项表**
+
+连接问卷和选项
+
+### 7、 **答卷表**
+
+存储问卷id,答卷时间日期等
+
+答卷分完成和未完成
+
+### 8、 **答卷选项表**
+
+存储答卷id,题目,选择的选项或回答内容以及得分情况
diff --git a/pom.xml b/pom.xml
index b2db21c..e56dd4e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -9,12 +9,12 @@
cn.soul2
- java-demo
+ jyjc-admin
0.0.1-SNAPSHOT
- java-demo
- java-demo
+ jyjc-admin
+ jyjc-admin
- 11
+ 8
diff --git a/src/main/java/cn/soul2/demo/controller/QrController.java b/src/main/java/cn/soul2/demo/controller/QrController.java
new file mode 100644
index 0000000..b8c6370
--- /dev/null
+++ b/src/main/java/cn/soul2/demo/controller/QrController.java
@@ -0,0 +1,62 @@
+package cn.soul2.demo.controller;
+
+import cn.soul2.demo.dto.QrDTO;
+import cn.soul2.demo.entity.QrDO;
+import cn.soul2.demo.repository.IQrRepository;
+import cn.soul2.demo.utils.base.BackUtils;
+import cn.soul2.demo.utils.base.PageUtils;
+import cn.soul2.demo.vo.QrVO;
+import cn.soul2.demo.vo.base.Back;
+import cn.soul2.demo.vo.base.VPage;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @author Soul2
+ * @date 2024-03-11 15:16
+ */
+
+@Slf4j
+@RestController
+@RequestMapping("/qr")
+public class QrController {
+
+ @Autowired
+ IQrRepository qrRepository;
+
+ @PostMapping("/page")
+ Back> page(@RequestBody QrDTO dto) {
+ VPage page = qrRepository.page(dto);
+ VPage toPage = PageUtils.to(page, page.getRows().stream().map(e -> {
+ QrVO vo = new QrVO();
+ BeanUtils.copyProperties(e, vo);
+ return vo;
+ }).collect(Collectors.toList()));
+ return BackUtils.success(toPage);
+ }
+
+ @PostMapping("/saveOrUpdate")
+ Back saveOrUpdate(@RequestBody List dtos) {
+ return BackUtils.success(qrRepository.saveOrUpdate(dtos));
+ }
+
+ @PostMapping("/remove")
+ Back remove(@RequestBody List ids) {
+ return BackUtils.success(qrRepository.remove(ids));
+ }
+
+ @PostMapping("status")
+ public Back status(@RequestBody QrDTO dto) {
+ return BackUtils.success(qrRepository.status(dto));
+ }
+
+
+}
diff --git a/src/main/java/cn/soul2/demo/dto/QrDTO.java b/src/main/java/cn/soul2/demo/dto/QrDTO.java
new file mode 100644
index 0000000..80b1c2b
--- /dev/null
+++ b/src/main/java/cn/soul2/demo/dto/QrDTO.java
@@ -0,0 +1,62 @@
+package cn.soul2.demo.dto;
+
+import cn.soul2.demo.dto.base.PageParams;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.time.LocalDateTime;
+
+/**
+ * @author Soul2
+ * @date 2024-03-11 14:35
+ */
+
+@Data
+@Accessors(chain = true)
+public class QrDTO extends PageParams {
+
+ /**
+ * 二维码id
+ */
+ private String id;
+
+ /**
+ * 指向的URL
+ */
+ private String toUrl;
+
+ /**
+ * 问卷id
+ */
+ private String qnId;
+
+ /**
+ * 状态:0:禁用;1:启用;
+ */
+ private Integer status;
+
+
+ /**
+ * 开始时间
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime startTime;
+
+ /**
+ * 结束时间
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime endTime;
+
+ /**
+ * 注释
+ */
+ private String tip;
+
+ /**
+ * 二维码url
+ */
+ private String qrUrl;
+
+}
diff --git a/src/main/java/cn/soul2/demo/entity/QrDO.java b/src/main/java/cn/soul2/demo/entity/QrDO.java
new file mode 100644
index 0000000..622dd3f
--- /dev/null
+++ b/src/main/java/cn/soul2/demo/entity/QrDO.java
@@ -0,0 +1,92 @@
+package cn.soul2.demo.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 二维码表
+ *
+ *
+ * @author Soul2
+ * @since 2024-03-11 17:01:53
+ */
+@Getter
+@Setter
+@Accessors(chain = true)
+@TableName("tb_qr")
+public class QrDO extends Model {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 二维码id
+ */
+ @TableField("id")
+ private String id;
+
+ /**
+ * 指向的URL
+ */
+ @TableField("to_url")
+ private String toUrl;
+
+ /**
+ * 问卷id
+ */
+ @TableField("qn_id")
+ private String qnId;
+
+ /**
+ * 注释
+ */
+ @TableField("tip")
+ private String tip;
+
+ /**
+ * 二维码url
+ */
+ @TableField("qr_url")
+ private String qrUrl;
+
+ /**
+ * 状态:0:禁用;1:启用;
+ */
+ @TableField("status")
+ private Integer status;
+
+ /**
+ * 更新时间
+ */
+ @TableField(value = "updated_time", fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updatedTime;
+
+ /**
+ * 创建时间
+ */
+ @TableField(value = "created_time", fill = FieldFill.INSERT)
+ private LocalDateTime createdTime;
+
+ /**
+ * 删除标识: 0-存在; 1-删除
+ */
+ @TableField("removed")
+ @TableLogic
+ private Integer removed;
+
+
+ @Override
+ public Serializable pkVal() {
+ return null;
+ }
+
+}
diff --git a/src/main/java/cn/soul2/demo/mapper/QrMapper.java b/src/main/java/cn/soul2/demo/mapper/QrMapper.java
new file mode 100644
index 0000000..e890bbd
--- /dev/null
+++ b/src/main/java/cn/soul2/demo/mapper/QrMapper.java
@@ -0,0 +1,18 @@
+package cn.soul2.demo.mapper;
+
+import cn.soul2.demo.entity.QrDO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ *
+ * 二维码表 Mapper 接口
+ *
+ *
+ * @author Soul2
+ * @since 2024-03-11 14:28:45
+ */
+@Mapper
+public interface QrMapper extends BaseMapper {
+
+}
diff --git a/src/main/java/cn/soul2/demo/repository/IQrRepository.java b/src/main/java/cn/soul2/demo/repository/IQrRepository.java
new file mode 100644
index 0000000..1a62699
--- /dev/null
+++ b/src/main/java/cn/soul2/demo/repository/IQrRepository.java
@@ -0,0 +1,29 @@
+package cn.soul2.demo.repository;
+
+import cn.soul2.demo.dto.QrDTO;
+import cn.soul2.demo.entity.QrDO;
+import cn.soul2.demo.vo.QrVO;
+import cn.soul2.demo.vo.base.VPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.Collection;
+
+/**
+ *
+ * 二维码表 服务类
+ *
+ *
+ * @author Soul2
+ * @since 2024-03-11 14:28:45
+ */
+public interface IQrRepository extends IService {
+
+ VPage page(QrDTO dto);
+
+ Boolean saveOrUpdate(Collection dtos);
+
+ Boolean remove(Collection ids);
+
+
+ boolean status(QrDTO status);
+}
diff --git a/src/main/java/cn/soul2/demo/repository/impl/QrRepositoryImpl.java b/src/main/java/cn/soul2/demo/repository/impl/QrRepositoryImpl.java
new file mode 100644
index 0000000..7357e34
--- /dev/null
+++ b/src/main/java/cn/soul2/demo/repository/impl/QrRepositoryImpl.java
@@ -0,0 +1,71 @@
+package cn.soul2.demo.repository.impl;
+
+import cn.soul2.demo.dto.QrDTO;
+import cn.soul2.demo.entity.QrDO;
+import cn.soul2.demo.mapper.QrMapper;
+import cn.soul2.demo.repository.IQrRepository;
+import cn.soul2.demo.utils.base.PageUtils;
+import cn.soul2.demo.vo.QrVO;
+import cn.soul2.demo.vo.base.VPage;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * 二维码表 服务实现类
+ *
+ *
+ * @author Soul2
+ * @since 2024-03-11 14:28:45
+ */
+@Service
+public class QrRepositoryImpl extends ServiceImpl implements IQrRepository {
+
+
+ @Override
+ public VPage page(QrDTO dto) {
+ LambdaQueryWrapper query = Wrappers.lambdaQuery();
+ query.likeRight(StringUtils.isNotBlank(dto.getTip()), QrDO::getTip, dto.getTip())
+ .eq(StringUtils.isNotBlank(dto.getId()), QrDO::getId, dto.getId());
+ if (dto.getStartTime() != null && dto.getEndTime() != null) {
+ query.between(QrDO::getUpdatedTime, dto.getStartTime(), dto.getEndTime());
+ } else {
+ query.ge(dto.getStartTime() != null, QrDO::getUpdatedTime, dto.getStartTime())
+ .le(dto.getEndTime() != null, QrDO::getUpdatedTime, dto.getEndTime());
+ }
+ query.orderByDesc(QrDO::getUpdatedTime).orderByDesc(QrDO::getCreatedTime);
+ return PageUtils.to(super.page(PageUtils.build(dto)));
+ }
+
+ @Override
+ public Boolean saveOrUpdate(Collection dtos) {
+ List list = dtos.stream().map(dto -> {
+ QrDO r = new QrDO();
+ BeanUtils.copyProperties(dto, r);
+ return r;
+ }).collect(Collectors.toList());
+ return super.saveOrUpdateBatch(list);
+ }
+
+ @Override
+ public Boolean remove(Collection ids) {
+ return super.removeBatchByIds(ids);
+ }
+
+ @Override
+ public boolean status(QrDTO status) {
+ LambdaUpdateWrapper update = Wrappers.lambdaUpdate();
+ QrDO qr = new QrDO();
+ BeanUtils.copyProperties(status, qr);
+ return updateById(qr);
+ }
+}
diff --git a/src/main/java/cn/soul2/demo/service/IQrService.java b/src/main/java/cn/soul2/demo/service/IQrService.java
new file mode 100644
index 0000000..1468055
--- /dev/null
+++ b/src/main/java/cn/soul2/demo/service/IQrService.java
@@ -0,0 +1,10 @@
+package cn.soul2.demo.service;
+
+/**
+ * @author Soul2
+ * @date 2024-03-11 15:20
+ */
+
+public interface IQrService {
+
+}
diff --git a/src/main/java/cn/soul2/demo/service/QrServiceImpl.java b/src/main/java/cn/soul2/demo/service/QrServiceImpl.java
new file mode 100644
index 0000000..7bdc49f
--- /dev/null
+++ b/src/main/java/cn/soul2/demo/service/QrServiceImpl.java
@@ -0,0 +1,12 @@
+package cn.soul2.demo.service;
+
+import org.springframework.stereotype.Service;
+
+/**
+ * @author Soul2
+ * @date 2024-03-11 15:20
+ */
+
+@Service
+public class QrServiceImpl implements IQrService {
+}
diff --git a/src/main/java/cn/soul2/demo/utils/MybatisFastGenerator.java b/src/main/java/cn/soul2/demo/utils/MybatisFastGenerator.java
index ecc8e5d..5c7a83d 100644
--- a/src/main/java/cn/soul2/demo/utils/MybatisFastGenerator.java
+++ b/src/main/java/cn/soul2/demo/utils/MybatisFastGenerator.java
@@ -19,15 +19,15 @@ public class MybatisFastGenerator {
private static final DatasourceConfig DATASOURCE_CONFIG = new DatasourceConfig(
"Soul2",
- "jdbc:mysql://next.soul2.cn:3306/cn_soul2?characterEncoding=utf8&serverTimezone=GMT%2B8",
- "buildemo",
- "86ba@qybgz"
+ "jdbc:mysql://localhost:3306/pioneer?characterEncoding=utf8&serverTimezone=GMT%2B8",
+ "root",
+ "123456"
);
/**
* 设置需要生成的表名
*/
private static final String[] TABLE_NAMES = {
- "data_table_demo"
+ "tb_qr"
};
/**
* 模块名称
@@ -42,7 +42,7 @@ public class MybatisFastGenerator {
* 设置过滤表前缀
*/
private static final String[] TABLE_PREFIX = {
- "b_", "r_"
+ "b_", "r_", "tb_"
};
private static FastAutoGenerator generator(Boolean update) {
diff --git a/src/main/java/cn/soul2/demo/vo/QrVO.java b/src/main/java/cn/soul2/demo/vo/QrVO.java
new file mode 100644
index 0000000..c88d207
--- /dev/null
+++ b/src/main/java/cn/soul2/demo/vo/QrVO.java
@@ -0,0 +1,53 @@
+package cn.soul2.demo.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.time.LocalDateTime;
+
+/**
+ * @author Soul2
+ * @date 2024-03-11 15:16
+ */
+
+@Data
+@Accessors(chain = true)
+public class QrVO {
+
+ /**
+ * 二维码id
+ */
+ private String id;
+
+ /**
+ * 指向的URL
+ */
+ private String toUrl;
+
+ /**
+ * 问卷id
+ */
+ private String qnId;
+
+ /**
+ * 状态:0:禁用;1:启用;
+ */
+ private Integer status;
+
+ /**
+ * 更新时间
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime updatedTime;
+
+ /**
+ * 注释
+ */
+ private String tip;
+
+ /**
+ * 二维码url
+ */
+ private String qrUrl;
+}
diff --git a/src/main/resources/application-cors.yml b/src/main/resources/application-cors.yml
index c450caa..5b1dfce 100644
--- a/src/main/resources/application-cors.yml
+++ b/src/main/resources/application-cors.yml
@@ -10,7 +10,7 @@ spring:
on-profile: dev
cors:
- allow-origin: http://localhost:6901
+ allow-origin: http://localhost:6100
---
spring:
diff --git a/src/main/resources/application-datasource.yml b/src/main/resources/application-datasource.yml
index d80bfb9..4e6b0c2 100644
--- a/src/main/resources/application-datasource.yml
+++ b/src/main/resources/application-datasource.yml
@@ -1,8 +1,8 @@
spring.datasource.druid:
# MySQL
- url: jdbc:mysql://next.soul2.cn:3306/cn_soul2?characterEncoding=utf8&serverTimezone=GMT%2B8
- username: buildemo
- password: 86ba@qybgz
+ url: jdbc:mysql://localhost:3306/pioneer?characterEncoding=utf8&serverTimezone=GMT%2B8
+ username: root
+ password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
# 连接池配置
initial-size: 1
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index ae9b057..80997c9 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -1,12 +1,12 @@
server:
#端口
- port: 7301
+ port: 7600
#上下文
servlet.context-path: /
spring:
- application.name: java-demo
+ application.name: jyjc-admin
profiles.include: datasource,mybatis-plus,cors