diff --git a/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/enums/Status.java b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/enums/Status.java
new file mode 100644
index 0000000..3d66a77
--- /dev/null
+++ b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/enums/Status.java
@@ -0,0 +1,30 @@
+package com.flossom.common.core.enums;
+
+/**
+ * 用户状态
+ *
+ * @author flossom
+ */
+public enum Status
+{
+ OK("0", "正常"), DISABLE("1", "停用"), DELETED("2", "删除");
+
+ private final String code;
+ private final String info;
+
+ Status(String code, String info)
+ {
+ this.code = code;
+ this.info = info;
+ }
+
+ public String getCode()
+ {
+ return code;
+ }
+
+ public String getInfo()
+ {
+ return info;
+ }
+}
diff --git a/flossom-modules/flossom-mini-program/pom.xml b/flossom-modules/flossom-mini-program/pom.xml
index 7635905..1c21d51 100644
--- a/flossom-modules/flossom-mini-program/pom.xml
+++ b/flossom-modules/flossom-mini-program/pom.xml
@@ -78,6 +78,13 @@
flossom-common-swagger
+
+
+ org.apache.httpcomponents
+ httpclient
+ 4.5.2
+
+
diff --git a/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/Enums/FirstPageTypeEnum.java b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/Enums/FirstPageTypeEnum.java
new file mode 100644
index 0000000..a5f55df
--- /dev/null
+++ b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/Enums/FirstPageTypeEnum.java
@@ -0,0 +1,26 @@
+package com.flossom.miniProgram.Enums;
+
+/**
+ * 首页配置项枚举
+ * 对应数据库:wx_welcome_setting ——> type
+ */
+public enum FirstPageTypeEnum {
+
+ First_PAGE_VIDEO(1, "启动页视频"), FIRST_WELCOME_IMAGE(2, "欢迎页"), LOGIN_IMAGE(3, "登录页");
+
+ private final Integer type;
+ private final String desc;
+
+ FirstPageTypeEnum(Integer type, String desc) {
+ this.type = type;
+ this.desc = desc;
+ }
+
+ public Integer getType() {
+ return type;
+ }
+
+ public String getDesc() {
+ return desc;
+ }
+}
diff --git a/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/Enums/SystemSettingKeyEnum.java b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/Enums/SystemSettingKeyEnum.java
new file mode 100644
index 0000000..1186141
--- /dev/null
+++ b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/Enums/SystemSettingKeyEnum.java
@@ -0,0 +1,27 @@
+package com.flossom.miniProgram.Enums;
+
+/**
+ * 系统设置-key 枚举
+ */
+public enum SystemSettingKeyEnum {
+ USER_AGREEMENT("USER_AGREEMENT", "用户协议"),
+ PRIVACY_AGREEMENT("PRIVACY_AGREEMENT", "隐私协议"),
+ INTEGRAL_RULE("INTEGRAL_RULE", "积分规则"),
+ ABOUT_US("ABOUT_US", "关于我们");
+
+ private final String key;
+ private final String remark;
+
+ SystemSettingKeyEnum(String key, String remark) {
+ this.key = key;
+ this.remark = remark;
+ }
+
+ public String getKey() {
+ return key;
+ }
+
+ public String getRemark() {
+ return remark;
+ }
+}
diff --git a/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/FlossomMiniProgramApplication.java b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/FlossomMiniProgramApplication.java
index 26d3055..7d4e892 100644
--- a/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/FlossomMiniProgramApplication.java
+++ b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/FlossomMiniProgramApplication.java
@@ -1,4 +1,4 @@
-package com.flossom.system;
+package com.flossom.miniProgram;
import com.flossom.common.security.annotation.EnableCustomConfig;
import com.flossom.common.security.annotation.EnableRyFeignClients;
diff --git a/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/controller/LoginController.java b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/controller/LoginController.java
new file mode 100644
index 0000000..8317725
--- /dev/null
+++ b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/controller/LoginController.java
@@ -0,0 +1,53 @@
+package com.flossom.miniProgram.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.flossom.common.core.web.controller.BaseController;
+import com.flossom.common.core.web.domain.AjaxResult;
+import com.flossom.miniProgram.domain.WxCode2SessionRet;
+import com.flossom.miniProgram.utils.MiniProgramUtils;
+import org.apache.commons.codec.digest.DigestUtils;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class LoginController extends BaseController {
+
+ @PostMapping("/wx/login")
+ public AjaxResult getJwt(@RequestParam(value = "code") String code,
+ @RequestParam(value = "rawData", required = false) String rawData,
+ @RequestParam(value = "signature", required = false) String signature) throws Exception {
+ // 1. 使用临时凭证code获取 appi + appsecret + code
+ WxCode2SessionRet wxCode2SessionRet = JSON.parseObject(MiniProgramUtils.getSessionKeyAndOpenId(code), WxCode2SessionRet.class);
+ if (0 != wxCode2SessionRet.getErrcode()) {
+ return AjaxResult.error(wxCode2SessionRet.getErrmsg());
+ }
+
+ // 2.校验签名 小程序发送的签名signature与服务器端生成的签名signature2 = sha1(rawData + sessionKey)
+ String signature2 = DigestUtils.sha1Hex(rawData + wxCode2SessionRet.getSession_key());
+ if (!signature.equals(signature2)) {
+ return AjaxResult.error("签名校验失败");
+ }
+
+ // 5.根据返回的User实体类,判断用户是否是新用户,是的话,将用户信息存到数据库;
+ // 用户非敏感信息:rawData
+ // 签名:signature
+ JSONObject rawDataJson = JSON.parseObject(rawData);
+// LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
+// lqw.eq(User::getOpenId, openid);
+// User user = userService.getOne(lqw);
+// if (user == null) {
+// // 用户信息入库
+// String nickName = rawDataJson.getString("nickName");
+// String avatarUrl = rawDataJson.getString("avatarUrl");
+// user = new User();
+// user.setOpenId(openid);
+// user.setAvatar(avatarUrl);
+// user.setNickName(nickName);
+// userService.save(user);
+// }
+ return AjaxResult.success();
+ }
+
+}
diff --git a/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/controller/SystemSettingController.java b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/controller/SystemSettingController.java
new file mode 100644
index 0000000..f85e3fe
--- /dev/null
+++ b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/controller/SystemSettingController.java
@@ -0,0 +1,61 @@
+package com.flossom.miniProgram.controller;
+
+import com.flossom.common.core.web.controller.BaseController;
+import com.flossom.common.core.web.domain.AjaxResult;
+import com.flossom.miniProgram.service.ISystemSettingService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 平台参数设置
+ */
+@RestController
+@RequestMapping("/system/setting")
+public class SystemSettingController extends BaseController {
+
+ @Autowired
+ private ISystemSettingService systemSettingService;
+
+ /**
+ * 获取 用户协议
+ *
+ * @return
+ */
+ @GetMapping("/getUserAgreement")
+ public AjaxResult getUserAgreement() {
+ return AjaxResult.success(systemSettingService.getUserAgreement());
+ }
+
+ /**
+ * 获取 隐私协议
+ *
+ * @return
+ */
+ @GetMapping("/getPrivacyAgreement")
+ public AjaxResult getPrivacyAgreement() {
+ return AjaxResult.success(systemSettingService.getPrivacyAgreement());
+ }
+
+ /**
+ * 获取 积分规则
+ *
+ * @return
+ */
+ @GetMapping("/getIntegralRule")
+ public AjaxResult getIntegralRule() {
+ return AjaxResult.success(systemSettingService.getIntegralRule());
+ }
+
+ /**
+ * 获取 关于我们
+ *
+ * @return
+ */
+ @GetMapping("/getAboutUs")
+ public AjaxResult getAboutUs() {
+ return AjaxResult.success(systemSettingService.getAboutUs());
+ }
+
+}
diff --git a/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/controller/WelcomeController.java b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/controller/WelcomeController.java
new file mode 100644
index 0000000..c399fc7
--- /dev/null
+++ b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/controller/WelcomeController.java
@@ -0,0 +1,35 @@
+package com.flossom.miniProgram.controller;
+
+import com.flossom.common.core.web.controller.BaseController;
+import com.flossom.common.core.web.domain.AjaxResult;
+import com.flossom.miniProgram.service.IWelcomeService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 首页视频、欢迎页、登录页
+ */
+@RestController
+@RequestMapping("/welcome")
+public class WelcomeController extends BaseController {
+
+ @Autowired
+ private IWelcomeService welcomeService;
+
+ /**
+ * 获取首页视频
+ * @return
+ */
+ @GetMapping("/obtain/firstPageVideo")
+ public AjaxResult obtainFirstPageVideo() {
+ return AjaxResult.success(welcomeService.obtainFirstPageVideo());
+ }
+
+ @GetMapping("/obtain/firstPageIntroduction")
+ public AjaxResult obtainFirstPageIntroduction() {
+ return AjaxResult.success(welcomeService.obtainFirstPageIntroduction());
+ }
+
+}
diff --git a/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/domain/WxSystemSetting.java b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/domain/WxSystemSetting.java
new file mode 100644
index 0000000..6e828c7
--- /dev/null
+++ b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/domain/WxSystemSetting.java
@@ -0,0 +1,79 @@
+package com.flossom.miniProgram.domain;
+
+import com.flossom.common.core.web.domain.BaseEntity;
+
+public class WxSystemSetting extends BaseEntity {
+
+ private String id;
+
+ /**
+ * 键
+ */
+ private String key;
+
+ /**
+ * 值
+ */
+ private String value;
+
+ /**
+ * 说明
+ */
+ private String instructions;
+
+ /**
+ * 状态(0正常 1停用
+ */
+ private String status;
+
+ public WxSystemSetting() {
+ }
+
+ public WxSystemSetting(String id, String key, String value, String instructions, String status) {
+ this.id = id;
+ this.key = key;
+ this.value = value;
+ this.instructions = instructions;
+ this.status = status;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getKey() {
+ return key;
+ }
+
+ public void setKey(String key) {
+ this.key = key;
+ }
+
+ public String getValue() {
+ return value;
+ }
+
+ public void setValue(String value) {
+ this.value = value;
+ }
+
+ public String getInstructions() {
+ return instructions;
+ }
+
+ public void setInstructions(String instructions) {
+ this.instructions = instructions;
+ }
+
+ public String getStatus() {
+ return status;
+ }
+
+ public void setStatus(String status) {
+ this.status = status;
+ }
+}
diff --git a/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/domain/WxUserMember.java b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/domain/WxUserMember.java
new file mode 100644
index 0000000..47dc282
--- /dev/null
+++ b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/domain/WxUserMember.java
@@ -0,0 +1,120 @@
+package com.flossom.miniProgram.domain;
+
+import com.flossom.common.core.web.domain.BaseEntity;
+
+import java.util.Date;
+
+public class WxUserMember extends BaseEntity {
+
+ private Integer id;
+
+ /**
+ * 昵称
+ */
+ private String nickname;
+
+ /**
+ * 头像
+ */
+ private String headimg;
+
+ /**
+ * 姓名
+ */
+ private String username;
+
+ /**
+ * 积分 decimal(10,2)
+ */
+ private Double credit;
+
+ /**
+ * openid
+ */
+ private String openid;
+
+ /**
+ * DEFAULT NULL
+ */
+ private String unionid;
+
+ /**
+ * 微信号
+ */
+ private String wechat;
+
+ /**
+ * 应该是邀请码来的
+ */
+ private String code;
+
+ /**
+ * 默认普通会员
+ */
+ private Integer level;
+
+ /**
+ * 手机
+ */
+ private String mobile;
+
+ /**
+ * 密码
+ */
+ private String password;
+
+ /**
+ * 个人二维码
+ */
+ private String userQr;// 个人二维码
+
+ /**
+ * 省
+ */
+ private String province;
+
+ /**
+ * 市
+ */
+ private String city;
+
+ /**
+ * 区
+ */
+ private String area;
+
+ /**
+ * 生日
+ */
+ private Date birthday;
+
+ /**
+ * 1可以,2不可以
+ */
+ private Integer clock;
+
+ /**
+ * DEFAULT '1' ,'1可以2不可以',
+ */
+ private Integer activity;
+
+ /**
+ * DEFAULT '1' COMMENT '1 未对接到中控 2已经对接 3对接失败'
+ */
+ private Integer isAbutment;
+
+ /**
+ * decimal(15,2) DEFAULT '0.00'
+ */
+ private Double collagenDay;
+
+ /**
+ * decimal(15,2) DEFAULT '0.00'
+ */
+ private Double collagenMount;
+
+ /**
+ * 登陆时间
+ */
+ private Date loginTime;
+}
diff --git a/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/domain/WxWelcomeSetting.java b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/domain/WxWelcomeSetting.java
new file mode 100644
index 0000000..a42bd95
--- /dev/null
+++ b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/domain/WxWelcomeSetting.java
@@ -0,0 +1,104 @@
+package com.flossom.miniProgram.domain;
+
+import com.flossom.common.core.web.domain.BaseEntity;
+
+public class WxWelcomeSetting extends BaseEntity {
+ private static final long serialVersionUID = 1L;
+
+ private String id;
+ /**
+ * 标题
+ */
+ private String title;
+
+ /**
+ * 介绍
+ */
+ private String introduction;
+
+ /**
+ * 类型:1 启动页视频、2 欢迎页、 3 登录页'
+ */
+ private Integer type;
+
+ private Integer sort;
+
+ /**
+ * 地址
+ */
+ private String url;
+
+ /**
+ * 状态(0正常 1停用)
+ */
+ private String status;
+
+ public WxWelcomeSetting() {
+ }
+
+ public WxWelcomeSetting(String id, String title, String introduction, Integer type, Integer sort, String url, String status) {
+ this.id = id;
+ this.title = title;
+ this.introduction = introduction;
+ this.type = type;
+ this.sort = sort;
+ this.url = url;
+ this.status = status;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public String getIntroduction() {
+ return introduction;
+ }
+
+ public void setIntroduction(String introduction) {
+ this.introduction = introduction;
+ }
+
+ public Integer getType() {
+ return type;
+ }
+
+ public void setType(Integer type) {
+ this.type = type;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ public String getStatus() {
+ return status;
+ }
+
+ public void setStatus(String status) {
+ this.status = status;
+ }
+
+ public Integer getSort() {
+ return sort;
+ }
+
+ public void setSort(Integer sort) {
+ this.sort = sort;
+ }
+}
diff --git a/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/domain/vo/WxCode2SessionRet.java b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/domain/vo/WxCode2SessionRet.java
new file mode 100644
index 0000000..a9e86da
--- /dev/null
+++ b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/domain/vo/WxCode2SessionRet.java
@@ -0,0 +1,63 @@
+package com.flossom.miniProgram.domain.vo;
+
+/**
+ * 登录响应结果
+ */
+public class WxCode2SessionRet {
+ private String openid;
+ private String session_key;
+ private String unionid;
+ private Integer errcode;
+ private String errmsg;
+
+ public WxCode2SessionRet() {
+ }
+
+ public WxCode2SessionRet(String openid, String session_key, String unionid, Integer errcode, String errmsg) {
+ this.openid = openid;
+ this.session_key = session_key;
+ this.unionid = unionid;
+ this.errcode = errcode;
+ this.errmsg = errmsg;
+ }
+
+ public String getOpenid() {
+ return openid;
+ }
+
+ public void setOpenid(String openid) {
+ this.openid = openid;
+ }
+
+ public String getSession_key() {
+ return session_key;
+ }
+
+ public void setSession_key(String session_key) {
+ this.session_key = session_key;
+ }
+
+ public String getUnionid() {
+ return unionid;
+ }
+
+ public void setUnionid(String unionid) {
+ this.unionid = unionid;
+ }
+
+ public Integer getErrcode() {
+ return errcode;
+ }
+
+ public void setErrcode(Integer errcode) {
+ this.errcode = errcode;
+ }
+
+ public String getErrmsg() {
+ return errmsg;
+ }
+
+ public void setErrmsg(String errmsg) {
+ this.errmsg = errmsg;
+ }
+}
diff --git a/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/mapper/SystemSettingMapper.java b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/mapper/SystemSettingMapper.java
new file mode 100644
index 0000000..82c0668
--- /dev/null
+++ b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/mapper/SystemSettingMapper.java
@@ -0,0 +1,10 @@
+package com.flossom.miniProgram.mapper;
+
+import com.flossom.miniProgram.Enums.SystemSettingKeyEnum;
+import com.flossom.miniProgram.domain.WxSystemSetting;
+
+public interface SystemSettingMapper {
+
+ WxSystemSetting getSystemSettingByKey(String systemSetKey);
+
+}
diff --git a/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/mapper/WelcomeMapper.java b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/mapper/WelcomeMapper.java
new file mode 100644
index 0000000..9dd4dfd
--- /dev/null
+++ b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/mapper/WelcomeMapper.java
@@ -0,0 +1,19 @@
+package com.flossom.miniProgram.mapper;
+
+
+import com.flossom.miniProgram.domain.WxWelcomeSetting;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface WelcomeMapper {
+
+ /**
+ * 根据 typs 获取首页配置项
+ *
+ * @param type 类型:1 启动页视频、2 欢迎页、 3 登录页
+ * @return
+ */
+ public List obtainWxWlComeSetting(@Param("type") Integer type);
+
+}
diff --git a/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/service/ISystemSettingService.java b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/service/ISystemSettingService.java
new file mode 100644
index 0000000..9093118
--- /dev/null
+++ b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/service/ISystemSettingService.java
@@ -0,0 +1,14 @@
+package com.flossom.miniProgram.service;
+
+import com.flossom.miniProgram.domain.WxSystemSetting;
+
+public interface ISystemSettingService {
+
+ WxSystemSetting getUserAgreement();
+
+ WxSystemSetting getPrivacyAgreement();
+
+ WxSystemSetting getIntegralRule();
+
+ WxSystemSetting getAboutUs();
+}
diff --git a/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/service/IWelcomeService.java b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/service/IWelcomeService.java
new file mode 100644
index 0000000..421d7e2
--- /dev/null
+++ b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/service/IWelcomeService.java
@@ -0,0 +1,14 @@
+package com.flossom.miniProgram.service;
+
+
+import com.flossom.miniProgram.domain.WxWelcomeSetting;
+
+import java.util.List;
+
+public interface IWelcomeService {
+
+ public WxWelcomeSetting obtainFirstPageVideo();
+
+
+ public List obtainFirstPageIntroduction();
+}
diff --git a/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/service/impl/SystemSettingServiceImpl.java b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/service/impl/SystemSettingServiceImpl.java
new file mode 100644
index 0000000..114e695
--- /dev/null
+++ b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/service/impl/SystemSettingServiceImpl.java
@@ -0,0 +1,57 @@
+package com.flossom.miniProgram.service.impl;
+
+import com.flossom.miniProgram.Enums.SystemSettingKeyEnum;
+import com.flossom.miniProgram.domain.WxSystemSetting;
+import com.flossom.miniProgram.mapper.SystemSettingMapper;
+import com.flossom.miniProgram.service.ISystemSettingService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class SystemSettingServiceImpl implements ISystemSettingService {
+
+ @Autowired
+ private SystemSettingMapper systemSettingMapper;
+
+ /**
+ * 获取 用户协议
+ *
+ * @return
+ */
+ @Override
+ public WxSystemSetting getUserAgreement() {
+ return systemSettingMapper.getSystemSettingByKey(SystemSettingKeyEnum.USER_AGREEMENT.getKey());
+ }
+
+
+ /**
+ * 获取 隐私协议
+ *
+ * @return
+ */
+ @Override
+ public WxSystemSetting getPrivacyAgreement() {
+ return systemSettingMapper.getSystemSettingByKey(SystemSettingKeyEnum.PRIVACY_AGREEMENT.getKey());
+ }
+
+ /**
+ * 获取 积分规则
+ *
+ * @return
+ */
+ @Override
+ public WxSystemSetting getIntegralRule() {
+ return systemSettingMapper.getSystemSettingByKey(SystemSettingKeyEnum.INTEGRAL_RULE.getKey());
+ }
+
+ /**
+ * 获取 关于我们
+ *
+ * @return
+ */
+ @Override
+ public WxSystemSetting getAboutUs() {
+ return systemSettingMapper.getSystemSettingByKey(SystemSettingKeyEnum.ABOUT_US.getKey());
+ }
+
+}
diff --git a/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/service/impl/WelcomeServiceImpl.java b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/service/impl/WelcomeServiceImpl.java
new file mode 100644
index 0000000..e5726bc
--- /dev/null
+++ b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/service/impl/WelcomeServiceImpl.java
@@ -0,0 +1,36 @@
+package com.flossom.miniProgram.service.impl;
+
+import com.flossom.miniProgram.Enums.FirstPageTypeEnum;
+import com.flossom.miniProgram.domain.WxWelcomeSetting;
+import com.flossom.miniProgram.mapper.WelcomeMapper;
+import com.flossom.miniProgram.service.IWelcomeService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class WelcomeServiceImpl implements IWelcomeService {
+
+ @Autowired
+ private WelcomeMapper welcomeMapper;
+
+ @Override
+ public WxWelcomeSetting obtainFirstPageVideo() {
+ List settings = welcomeMapper.obtainWxWlComeSetting(FirstPageTypeEnum.First_PAGE_VIDEO.getType());
+ if (settings == null || settings.size() == 0) {
+ return null;
+ }
+ // 首页视频只有一个,配置多个只返回第一个
+ return settings.get(0);
+ }
+
+ @Override
+ public List obtainFirstPageIntroduction() {
+ List settings = welcomeMapper.obtainWxWlComeSetting(FirstPageTypeEnum.FIRST_WELCOME_IMAGE.getType());
+ if (settings == null || settings.size() == 0) {
+ return null;
+ }
+ return settings;
+ }
+}
diff --git a/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/utils/ByteGroup.java b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/utils/ByteGroup.java
new file mode 100644
index 0000000..40624f9
--- /dev/null
+++ b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/utils/ByteGroup.java
@@ -0,0 +1,26 @@
+package com.flossom.miniProgram.utils;
+
+import java.util.ArrayList;
+
+public class ByteGroup {
+ ArrayList byteContainer = new ArrayList();
+
+ public byte[] toBytes() {
+ byte[] bytes = new byte[byteContainer.size()];
+ for (int i = 0; i < byteContainer.size(); i++) {
+ bytes[i] = byteContainer.get(i);
+ }
+ return bytes;
+ }
+
+ public ByteGroup addBytes(byte[] bytes) {
+ for (byte b : bytes) {
+ byteContainer.add(b);
+ }
+ return this;
+ }
+
+ public int size() {
+ return byteContainer.size();
+ }
+}
diff --git a/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/utils/HttpClientUtils.java b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/utils/HttpClientUtils.java
new file mode 100644
index 0000000..5a9fdb0
--- /dev/null
+++ b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/utils/HttpClientUtils.java
@@ -0,0 +1,334 @@
+package com.flossom.miniProgram.utils;
+
+
+import com.flossom.common.core.utils.StringUtils;
+import org.apache.http.Consts;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.NameValuePair;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.config.RequestConfig;
+import org.apache.http.client.config.RequestConfig.Builder;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.client.utils.URIBuilder;
+import org.apache.http.conn.ConnectTimeoutException;
+import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
+import org.apache.http.conn.ssl.SSLContextBuilder;
+import org.apache.http.conn.ssl.TrustStrategy;
+import org.apache.http.conn.ssl.X509HostnameVerifier;
+import org.apache.http.entity.ContentType;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
+import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.util.EntityUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLException;
+import javax.net.ssl.SSLSession;
+import javax.net.ssl.SSLSocket;
+import java.io.IOException;
+import java.net.SocketTimeoutException;
+import java.net.URI;
+import java.security.GeneralSecurityException;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+public class HttpClientUtils {
+
+ private static final Logger log = LoggerFactory.getLogger(MiniProgramUtils.class);
+
+ public static final int connTimeout = 10000;
+ public static final int readTimeout = 10000;
+ public static final String charset = "UTF-8";
+ private static HttpClient client = null;
+
+ static {
+ PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
+ cm.setMaxTotal(128);
+ cm.setDefaultMaxPerRoute(128);
+ client = HttpClients.custom().setConnectionManager(cm).build();
+ }
+
+ public static String postParameters(String url, String parameterStr) throws ConnectTimeoutException, SocketTimeoutException, Exception {
+ return post(url, parameterStr, "application/x-www-form-urlencoded", charset, connTimeout, readTimeout);
+ }
+
+ public static String postParameters(String url, String parameterStr, String charset, Integer connTimeout, Integer readTimeout) throws ConnectTimeoutException, SocketTimeoutException, Exception {
+ return post(url, parameterStr, "application/x-www-form-urlencoded", charset, connTimeout, readTimeout);
+ }
+
+ public static String postParameters(String url, Map params) throws ConnectTimeoutException,
+ SocketTimeoutException, Exception {
+ return postForm(url, params, null, connTimeout, readTimeout);
+ }
+
+ public static String postParameters(String url, Map params, Integer connTimeout, Integer readTimeout) throws ConnectTimeoutException,
+ SocketTimeoutException, Exception {
+ return postForm(url, params, null, connTimeout, readTimeout);
+ }
+
+ public static String get(String url) throws Exception {
+ return get(url, charset, null, null);
+ }
+
+ public static String get(String url, String charset) throws Exception {
+ return get(url, charset, connTimeout, readTimeout);
+ }
+
+ public static String getParameters(String url, Map params) throws Exception {
+ URIBuilder builder = new URIBuilder(url);
+ if (params != null) {
+ for (String key : params.keySet()) {
+ builder.addParameter(key, params.get(key));
+ }
+ }
+ URI uri = builder.build();
+ return get(uri.toString(), charset, null, null);
+ }
+
+ /**
+ * 发送一个 Post 请求, 使用指定的字符集编码.
+ *
+ * @param url
+ * @param body RequestBody
+ * @param mimeType 例如 application/xml "application/x-www-form-urlencoded" a=1&b=2&c=3
+ * @param charset 编码
+ * @param connTimeout 建立链接超时时间,毫秒.
+ * @param readTimeout 响应超时时间,毫秒.
+ * @return ResponseBody, 使用指定的字符集编码.
+ * @throws ConnectTimeoutException 建立链接超时异常
+ * @throws SocketTimeoutException 响应超时
+ * @throws Exception
+ */
+ public static String post(String url, String body, String mimeType, String charset, Integer connTimeout, Integer readTimeout)
+ throws ConnectTimeoutException, SocketTimeoutException, Exception {
+ HttpClient client = null;
+ HttpPost post = new HttpPost(url);
+ String result = "";
+ try {
+ if (StringUtils.isNotBlank(body)) {
+ HttpEntity entity = new StringEntity(body, ContentType.create(mimeType, charset));
+ post.setEntity(entity);
+ }
+ // 设置参数
+ RequestConfig.Builder customReqConf = RequestConfig.custom();
+ if (connTimeout != null) {
+ customReqConf.setConnectTimeout(connTimeout);
+ }
+ if (readTimeout != null) {
+ customReqConf.setSocketTimeout(readTimeout);
+ }
+ post.setConfig(customReqConf.build());
+
+ HttpResponse res;
+ if (url.startsWith("https")) {
+ // 执行 Https 请求.
+ client = createSSLInsecureClient();
+ res = client.execute(post);
+ } else {
+ // 执行 Http 请求.
+ client = HttpClientUtils.client;
+ res = client.execute(post);
+ }
+ result = EntityUtils.toString(res.getEntity(), charset);
+ } catch (Exception ex) {
+ log.error("HttpClient request error!", ex);
+ throw ex;
+ } finally {
+ post.releaseConnection();
+ if (url.startsWith("https") && client != null && client instanceof CloseableHttpClient) {
+ ((CloseableHttpClient) client).close();
+ }
+ }
+ return result;
+ }
+
+ /**
+ * 提交form表单
+ *
+ * @param url
+ * @param params
+ * @param connTimeout
+ * @param readTimeout
+ * @return
+ * @throws ConnectTimeoutException
+ * @throws SocketTimeoutException
+ * @throws Exception
+ */
+ public static String postForm(String url, Map params, Map headers, Integer connTimeout, Integer readTimeout) throws ConnectTimeoutException,
+ SocketTimeoutException, Exception {
+
+ HttpClient client = null;
+ HttpPost post = new HttpPost(url);
+ try {
+ if (params != null && !params.isEmpty()) {
+ List formParams = new ArrayList();
+ Set> entrySet = params.entrySet();
+ for (Entry entry : entrySet) {
+ formParams.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
+ }
+ UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formParams, Consts.UTF_8);
+ post.setEntity(entity);
+ }
+
+ if (headers != null && !headers.isEmpty()) {
+ for (Entry entry : headers.entrySet()) {
+ post.addHeader(entry.getKey(), entry.getValue());
+ }
+ }
+ // 设置参数
+ Builder customReqConf = RequestConfig.custom();
+ if (connTimeout != null) {
+ customReqConf.setConnectTimeout(connTimeout);
+ }
+ if (readTimeout != null) {
+ customReqConf.setSocketTimeout(readTimeout);
+ }
+ post.setConfig(customReqConf.build());
+ HttpResponse res = null;
+ if (url.startsWith("https")) {
+ // 执行 Https 请求.
+ client = createSSLInsecureClient();
+ res = client.execute(post);
+ } else {
+ // 执行 Http 请求.
+ client = HttpClientUtils.client;
+ res = client.execute(post);
+ }
+ return EntityUtils.toString(res.getEntity(), charset);
+ } catch (Exception ex) {
+ log.error("HttpClient request error!", ex);
+ throw ex;
+ } finally {
+ post.releaseConnection();
+ if (url.startsWith("https") && client != null
+ && client instanceof CloseableHttpClient) {
+ ((CloseableHttpClient) client).close();
+ }
+ }
+ }
+
+ /**
+ * 发送一个 GET 请求
+ *
+ * @param url
+ * @param charset
+ * @param connTimeout 建立链接超时时间,毫秒.
+ * @param readTimeout 响应超时时间,毫秒.
+ * @return
+ * @throws ConnectTimeoutException 建立链接超时
+ * @throws SocketTimeoutException 响应超时
+ * @throws Exception
+ */
+ public static String get(String url, String charset, Integer connTimeout, Integer readTimeout)
+ throws ConnectTimeoutException, SocketTimeoutException, Exception {
+
+ HttpClient client = null;
+ HttpGet get = new HttpGet(url);
+ String result = "";
+ try {
+ // 设置参数
+ Builder customReqConf = RequestConfig.custom();
+ if (connTimeout != null) {
+ customReqConf.setConnectTimeout(connTimeout);
+ }
+ if (readTimeout != null) {
+ customReqConf.setSocketTimeout(readTimeout);
+ }
+ get.setConfig(customReqConf.build());
+
+ HttpResponse res = null;
+
+ if (url.startsWith("https")) {
+ // 执行 Https 请求.
+ client = createSSLInsecureClient();
+ res = client.execute(get);
+ } else {
+ // 执行 Http 请求.
+ client = HttpClientUtils.client;
+ res = client.execute(get);
+ }
+ result = EntityUtils.toString(res.getEntity(), charset);
+ } catch (Exception ex) {
+ log.error("HttpClient request error!", ex);
+ throw ex;
+ } finally {
+ get.releaseConnection();
+ if (url.startsWith("https") && client != null && client instanceof CloseableHttpClient) {
+ ((CloseableHttpClient) client).close();
+ }
+ }
+ return result;
+ }
+
+ /**
+ * 从 response 里获取 charset
+ *
+ * @param ressponse
+ * @return
+ */
+ @SuppressWarnings("unused")
+ private static String getCharsetFromResponse(HttpResponse ressponse) {
+ // Content-Type:text/html; charset=GBK
+ if (ressponse.getEntity() != null && ressponse.getEntity().getContentType() != null && ressponse.getEntity().getContentType().getValue() != null) {
+ String contentType = ressponse.getEntity().getContentType().getValue();
+ if (contentType.contains("charset=")) {
+ return contentType.substring(contentType.indexOf("charset=") + 8);
+ }
+ }
+ return null;
+ }
+
+ /**
+ * 创建 SSL连接
+ *
+ * @return
+ * @throws GeneralSecurityException
+ */
+ private static CloseableHttpClient createSSLInsecureClient() throws GeneralSecurityException {
+ try {
+ SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
+ public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {
+ return true;
+ }
+ }).build();
+ SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, new X509HostnameVerifier() {
+
+ @Override
+ public boolean verify(String arg0, SSLSession arg1) {
+ return true;
+ }
+
+ @Override
+ public void verify(String host, SSLSocket ssl)
+ throws IOException {
+ }
+
+ @Override
+ public void verify(String host, X509Certificate cert)
+ throws SSLException {
+ }
+
+ @Override
+ public void verify(String host, String[] cns,
+ String[] subjectAlts) throws SSLException {
+ }
+ });
+ return HttpClients.custom().setSSLSocketFactory(sslsf).build();
+ } catch (GeneralSecurityException e) {
+ throw e;
+ }
+ }
+
+}
diff --git a/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/utils/MiniProgramUtils.java b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/utils/MiniProgramUtils.java
new file mode 100644
index 0000000..d035032
--- /dev/null
+++ b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/utils/MiniProgramUtils.java
@@ -0,0 +1,52 @@
+package com.flossom.miniProgram.utils;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 小程序工具类
+ */
+public class MiniProgramUtils {
+
+ private static final String WX_APPID = "";
+ private static final String WX_SECRET = "";
+
+ private static final String loginUrl = "https://api.weixin.qq.com/sns/jscode2session";
+
+ public static String getSessionKeyAndOpenId(String jsCode) throws Exception {
+ return getSessionKeyAndOpenId(WX_APPID, WX_SECRET, jsCode, "authorization_code");
+ }
+
+ /**
+ * 通过 code 去微信服务器换取 openid 和 session_key
+ * @param appid
+ * @param secret
+ * @param jsCode
+ * @param grant_type
+ *
+ * 响应结果:
+ * {
+ * "openid":"xxxxxx", 用户唯一标识
+ * "session_key":"xxxxx", 会话密钥
+ * "unionid":"xxxxx",
+ * "errcode":0, 错误码
+ * "errmsg":"xxxxx"
+ * }
+ *
+ * errcode :
+ * 40029 code 无效 js_code 无效
+ * 45011 api minute-quota reach limit mustslower retry next minute API 调用太频繁,请稍候再试
+ * 40226 code blocked 高风险等级用户,小程序登录拦截 。风险等级详见用户安全解方案
+ * -1 system error 系统繁忙,此时请开发者稍候再试
+ */
+ public static String getSessionKeyAndOpenId(String appid, String secret, String jsCode, String grant_type) throws Exception {
+ Map params = new HashMap<>();
+ params.put("appid", appid);
+ params.put("secret", secret);
+ params.put("jsCode", jsCode);
+ params.put("grant_type", grant_type);
+ return HttpClientUtils.getParameters(loginUrl, params);
+ }
+
+
+}
diff --git a/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/utils/PKCS7Encoder.java b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/utils/PKCS7Encoder.java
new file mode 100644
index 0000000..30d6b5d
--- /dev/null
+++ b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/utils/PKCS7Encoder.java
@@ -0,0 +1,56 @@
+package com.flossom.miniProgram.utils;
+
+import java.nio.charset.Charset;
+import java.util.Arrays;
+
+public class PKCS7Encoder {
+
+ static Charset CHARSET = Charset.forName("utf-8");
+ static int BLOCK_SIZE = 32;
+
+ /**
+ * 获得对明文进行补位填充的字节.
+ *
+ * @param count 需要进行填充补位操作的明文字节个数
+ * @return 补齐用的字节数组
+ */
+ public static byte[] encode(int count) {
+ // 计算需要填充的位数
+ int amountToPad = BLOCK_SIZE - (count % BLOCK_SIZE);
+ if (amountToPad == 0) {
+ amountToPad = BLOCK_SIZE;
+ }
+ // 获得补位所用的字符
+ char padChr = chr(amountToPad);
+ String tmp = new String();
+ for (int index = 0; index < amountToPad; index++) {
+ tmp += padChr;
+ }
+ return tmp.getBytes(CHARSET);
+ }
+
+ /**
+ * 删除解密后明文的补位字符
+ *
+ * @param decrypted 解密后的明文
+ * @return 删除补位字符后的明文
+ */
+ public static byte[] decode(byte[] decrypted) {
+ int pad = decrypted[decrypted.length - 1];
+ if (pad < 1 || pad > 32) {
+ pad = 0;
+ }
+ return Arrays.copyOfRange(decrypted, 0, decrypted.length - pad);
+ }
+
+ /**
+ * 将数字转化成ASCII码对应的字符,用于对明文进行补码
+ *
+ * @param a 需要转化的数字
+ * @return 转化得到的字符
+ */
+ static char chr(int a) {
+ byte target = (byte) (a & 0xFF);
+ return (char) target;
+ }
+}
diff --git a/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/utils/WxCryptUtils.java b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/utils/WxCryptUtils.java
new file mode 100644
index 0000000..3095dfa
--- /dev/null
+++ b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/utils/WxCryptUtils.java
@@ -0,0 +1,54 @@
+package com.flossom.miniProgram.utils;
+
+import org.apache.commons.codec.binary.Base64;
+
+import javax.crypto.Cipher;
+import javax.crypto.spec.IvParameterSpec;
+import javax.crypto.spec.SecretKeySpec;
+import java.nio.charset.StandardCharsets;
+import java.security.AlgorithmParameters;
+
+public class WxCryptUtils {
+
+ /**
+ * 小程序 数据解密
+ *
+ * @param encryptData 加密数据
+ * @param iv 对称解密算法初始向量
+ * @param sessionKey 对称解密秘钥
+ * @return 解密数据
+ */
+ public static String decrypt(String encryptData, String iv, String sessionKey) throws Exception {
+ AlgorithmParameters algorithmParameters = AlgorithmParameters.getInstance("AES");
+ algorithmParameters.init(new IvParameterSpec(Base64.decodeBase64(iv)));
+ Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
+ cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(Base64.decodeBase64(sessionKey), "AES"), algorithmParameters);
+ byte[] decode = PKCS7Encoder.decode(cipher.doFinal(Base64.decodeBase64(encryptData)));
+ String decryptStr = new String(decode, StandardCharsets.UTF_8);
+ return decryptStr;
+ }
+
+ /**
+ * 数据加密
+ *
+ * @param data 需要加密的数据
+ * @param iv 对称加密算法初始向量
+ * @param sessionKey 对称加密秘钥
+ * @return 加密数据
+ */
+ public static String encrypt(String data, String iv, String sessionKey) throws Exception {
+ AlgorithmParameters algorithmParameters = AlgorithmParameters.getInstance("AES");
+ algorithmParameters.init(new IvParameterSpec(Base64.decodeBase64(iv)));
+ Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
+ cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(Base64.decodeBase64(sessionKey), "AES"), algorithmParameters);
+ byte[] textBytes = data.getBytes(StandardCharsets.UTF_8);
+ ByteGroup byteGroup = new ByteGroup();
+ byteGroup.addBytes(textBytes);
+ byte[] padBytes = PKCS7Encoder.encode(byteGroup.size());
+ byteGroup.addBytes(padBytes);
+ byte[] encryptBytes = cipher.doFinal(byteGroup.toBytes());
+ return Base64.encodeBase64String(encryptBytes);
+ }
+
+
+}
diff --git a/flossom-modules/flossom-mini-program/src/main/resources/bootstrap.yml b/flossom-modules/flossom-mini-program/src/main/resources/bootstrap.yml
index 8454283..44b6641 100644
--- a/flossom-modules/flossom-mini-program/src/main/resources/bootstrap.yml
+++ b/flossom-modules/flossom-mini-program/src/main/resources/bootstrap.yml
@@ -23,3 +23,7 @@ spring:
# 共享配置
shared-configs:
- application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
+logging:
+ level:
+ org.springframework.jdbc.core.JdbcTemplate: DEBUG # 这里使用了Spring Boot默认的数据源连接池,若使用其他连接池则根据对应的类名进行调整
+ com.flossom.miniProgram.mapper: TRACE # 将com.example.mapper替换为自定义Mapper接口的全限定名
diff --git a/flossom-modules/flossom-mini-program/src/main/resources/mapper/miniProgram/SystemSettingMapper.xml b/flossom-modules/flossom-mini-program/src/main/resources/mapper/miniProgram/SystemSettingMapper.xml
new file mode 100644
index 0000000..2153cb2
--- /dev/null
+++ b/flossom-modules/flossom-mini-program/src/main/resources/mapper/miniProgram/SystemSettingMapper.xml
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select id,
+ `key`,
+ `value`,
+ instructions,
+ status,
+ create_by,
+ create_time,
+ update_by,
+ update_time,
+ remark
+ from wx_system_setting
+
+
+
+
+
+
+ and `key` = #{key}
+
+
+
+
+
+
+
+
diff --git a/flossom-modules/flossom-mini-program/src/main/resources/mapper/miniProgram/WelcomeMapper.xml b/flossom-modules/flossom-mini-program/src/main/resources/mapper/miniProgram/WelcomeMapper.xml
new file mode 100644
index 0000000..afdd861
--- /dev/null
+++ b/flossom-modules/flossom-mini-program/src/main/resources/mapper/miniProgram/WelcomeMapper.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select id, title, introduction, type, sort, url, status, create_by, create_time, update_by, update_time, remark
+ from wx_welcome_setting
+
+
+
+
+
+
+ and type = #{type}
+
+
+
+
+
+
+
+
+
diff --git a/pom.xml b/pom.xml
index d6ee60a..c097719 100644
--- a/pom.xml
+++ b/pom.xml
@@ -35,6 +35,7 @@
8.2.2
4.1.2
2.14.3
+ 5.8.23
@@ -206,6 +207,14 @@
${flossom.version}
+
+
+ cn.hutool
+ hutool-bom
+ ${hutool.version}
+ pom
+ import
+