From 2919029b8152cba56c3744ba488d0b8c1d755aed Mon Sep 17 00:00:00 2001
From: admin <1752476835@qq.com>
Date: Mon, 6 May 2024 10:20:46 +0800
Subject: [PATCH] =?UTF-8?q?=E6=9C=80=E6=96=B0=E4=BB=A3=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
play-admin/pom.xml | 20 +-
.../java/com/starry/admin/Application.java | 1 -
.../mybatis/handler/MyMetaObjectHandler.java | 13 +-
.../admin/common/oss/OssProperties.java | 2 +-
.../admin/common/play/wx/CommonText.java | 38 ++
.../admin/common/play/wx/HttpUtils.java | 199 ++++++++++
.../common/play/wx/MyX509TrustManager.java | 28 ++
.../admin/common/play/wx/WXPayXmlUtil.java | 27 ++
.../admin/common/play/wx/WeChatConstants.java | 45 +++
.../common/play/wx/WxPlayProperties.java | 69 ++++
.../admin/common/play/wx/WxPlayUtils.java | 354 ++++++++++++++++++
.../security/config/SpringSecurityConfig.java | 17 +-
.../filter/JwtAuthenticationTokenFilter.java | 122 ++++--
.../PlayClerkArticleInfoController.java | 87 +++++
.../PlayCustomArticleInfoController.java | 83 ++++
.../mapper/PlayClerkArticleInfoMapper.java | 16 +
.../mapper/PlayCustomArticleInfoMapper.java | 16 +
.../entity/PlayClerkArticleInfoEntity.java | 73 ++++
.../entity/PlayCustomArticleInfoEntity.java | 53 +++
.../module/vo/PlayClerkArticleQueryVo.java | 14 +
.../module/vo/PlayClerkArticleReturnVo.java | 68 ++++
.../service/IPlayClerkArticleInfoService.java | 65 ++++
.../IPlayCustomArticleInfoService.java | 69 ++++
.../impl/PlayClerkArticleInfoServiceImpl.java | 106 ++++++
.../PlayCustomArticleInfoServiceImpl.java | 105 ++++++
.../PlayBalanceDetailsInfoController.java | 77 ++++
.../mapper/PlayBalanceDetailsInfoMapper.java | 16 +
.../entity/PlayBalanceDetailsInfoEntity.java | 72 ++++
.../module/vo/PlayBalanceDetailsQueryVo.java | 10 +
.../module/vo/PlayBalanceDetailsReturnVo.java | 91 +++++
.../IPlayBalanceDetailsInfoService.java | 88 +++++
.../PlayBalanceDetailsInfoServiceImpl.java | 140 +++++++
.../PlayClerkCommodityController.java | 10 -
.../PlayClerkLevelInfoController.java | 4 +
.../PlayClerkUserInfoController.java | 25 +-
.../PlayClarkUserEvaluateInfoEntity.java | 21 ++
.../entity/PlayClerkCommodityEntity.java | 11 +-
.../entity/PlayClerkDataReviewInfoEntity.java | 12 +-
.../entity/PlayClerkUserDetailResultVo.java | 2 +-
.../entity/PlayClerkUserInfoEntity.java | 15 +-
.../entity/PlayClerkUserInfoQueryVo.java | 9 +-
.../entity/PlayClerkUserListResultVo.java | 50 +++
...iftInfoEntity.java => PlayGiftInfoVo.java} | 4 +-
.../clear/module/vo/PlayClerkUserAddVo.java | 1 +
.../module/vo/PlayClerkUserStateEditVo.java | 58 +++
.../service/IPlayClerkCommodityService.java | 19 +-
.../service/IPlayClerkLevelInfoService.java | 8 +
.../service/IPlayClerkUserInfoService.java | 27 +-
.../impl/PlayClerkCommodityServiceImpl.java | 33 +-
.../impl/PlayClerkLevelInfoServiceImpl.java | 12 +-
.../impl/PlayClerkUserInfoServiceImpl.java | 67 +++-
.../PlayCustomLevelInfoController.java | 94 +++++
.../PlayCustomUserInfoController.java | 50 +--
.../mapper/PlayCustomLevelInfoMapper.java | 16 +
.../entity/PlayCustomLevelInfoEntity.java | 56 +++
.../entity/PlayCustomUserInfoEntity.java | 29 +-
.../module/vo/PlayCustomLevelAddVo.java | 34 ++
.../module/vo/PlayCustomLevelEditVo.java | 40 ++
.../module/vo/PlayCustomUserStateEditVo.java | 59 +++
.../service/IPlayCustomLevelInfoService.java | 90 +++++
.../service/IPlayCustomUserInfoService.java | 17 +-
.../impl/PlayCustomLevelInfoServiceImpl.java | 131 +++++++
.../impl/PlayCustomUserInfoServiceImpl.java | 11 +-
.../PlayCustomFollowInfoController.java | 83 ++++
.../mapper/PlayCustomFollowInfoMapper.java | 16 +
.../entity/PlayCustomFollowInfoEntity.java | 57 +++
.../service/IPlayCustomFollowInfoService.java | 79 ++++
.../impl/PlayCustomFollowInfoServiceImpl.java | 127 +++++++
.../controller/PlayGiftInfoController.java | 83 ++++
.../gift/mapper/PlayGiftInfoMapper.java | 16 +
.../module/entity/PlayGiftInfoEntity.java | 78 ++++
.../gift/service/IPlayGiftInfoService.java | 73 ++++
.../service/impl/PlayGiftInfoServiceImpl.java | 104 +++++
...ller.java => PlayOrderInfoController.java} | 51 +--
.../PlayOrderRewardInfoController.java | 42 +++
.../order/mapper/OrderDetailsInfoMapper.java | 31 --
.../modules/order/mapper/OrderInfoMapper.java | 31 --
.../order/mapper/OrderLogInfoMapper.java | 15 -
.../order/mapper/PlayOrderInfoMapper.java | 14 +
.../module/entity/OrderDetailsInfoEntity.java | 54 ---
.../module/entity/OrderLogInfoEntity.java | 59 ---
...foEntity.java => PlayOrderInfoEntity.java} | 67 +++-
.../module/vo/PlayOrderRewardQueryVo.java | 16 +
.../module/vo/PlayOrderRewardReturnVo.java | 80 ++++
.../service/IOrderDetailsInfoService.java | 64 ----
.../order/service/IOrderInfoService.java | 77 ----
.../order/service/IOrderLogInfoService.java | 61 ---
.../order/service/IPlayOrderInfoService.java | 145 +++++++
.../impl/OrderDetailsInfoServiceImpl.java | 94 -----
.../service/impl/OrderInfoServiceImpl.java | 166 --------
.../service/impl/OrderLogInfoServiceImpl.java | 98 -----
.../impl/PlayOrderInfoServiceImpl.java | 246 ++++++++++++
.../controller/SysTenantController.java | 4 +-
.../platform/entity/SysTenantEntity.java | 5 +
.../controller/PlayNoticeInfoController.java | 4 +-
.../entity/PlayCommodityInfoEntity.java | 4 +-
.../system/controller/SysMenuController.java | 1 +
.../system/controller/SysRoleController.java | 4 +-
...AdministrativeAreaDictInfoServiceImpl.java | 1 -
.../weichat/controller/WxClerkController.java | 98 +++--
.../controller/WxCommodityController.java | 41 ++
.../controller/WxCommonController.java | 1 +
.../controller/WxCustomController.java | 228 ++++++++++-
.../weichat/controller/WxGiftController.java | 29 ++
.../weichat/controller/WxOauthController.java | 36 +-
.../weichat/controller/WxPlayController.java | 107 ++++++
.../entity/PlayClarkCommodityTreeData.java | 40 ++
.../entity/PlayClerkFollowStateUpdate.java | 27 ++
.../entity/PlayClerkUserByWxAddVo.java | 6 +
.../entity/PlayClerkUserLoginResponseVo.java | 2 +-
.../weichat/entity/PlayClerkUserOtherVo.java | 2 +-
.../weichat/entity/PlayGiftInfoDto.java | 44 +++
.../entity/PlayOrderInfoCommodityAdd.java | 44 +++
.../weichat/entity/PlayOrderInfoGiftAdd.java | 38 ++
.../entity/PlayOrderInfoRewardAdd.java | 33 ++
.../weichat/service/WxAccessTokenService.java | 5 +-
.../WxCustomMpService.java} | 6 +-
.../weichat/service/WxCustomUserService.java | 59 +++
.../weichat/service/WxOauthService.java | 26 +-
.../com/starry/admin/utils/MoneyUtils.java | 36 ++
.../mapper/order/OrderDetailsInfoMapper.xml | 47 ---
.../mapper/order/OrderInfoMapper.xml | 63 ----
play-admin/src/main/resources/play.properties | 14 +
.../com/starry/common/domain/BaseEntity.java | 5 +-
.../com/starry/common/redis/RedisCache.java | 8 +-
pom.xml | 19 +-
126 files changed, 5276 insertions(+), 1137 deletions(-)
create mode 100644 play-admin/src/main/java/com/starry/admin/common/play/wx/CommonText.java
create mode 100644 play-admin/src/main/java/com/starry/admin/common/play/wx/HttpUtils.java
create mode 100644 play-admin/src/main/java/com/starry/admin/common/play/wx/MyX509TrustManager.java
create mode 100644 play-admin/src/main/java/com/starry/admin/common/play/wx/WXPayXmlUtil.java
create mode 100644 play-admin/src/main/java/com/starry/admin/common/play/wx/WeChatConstants.java
create mode 100644 play-admin/src/main/java/com/starry/admin/common/play/wx/WxPlayProperties.java
create mode 100644 play-admin/src/main/java/com/starry/admin/common/play/wx/WxPlayUtils.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/article/controller/PlayClerkArticleInfoController.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/article/controller/PlayCustomArticleInfoController.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/article/mapper/PlayClerkArticleInfoMapper.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/article/mapper/PlayCustomArticleInfoMapper.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/article/module/entity/PlayClerkArticleInfoEntity.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/article/module/entity/PlayCustomArticleInfoEntity.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/article/module/vo/PlayClerkArticleQueryVo.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/article/module/vo/PlayClerkArticleReturnVo.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/article/service/IPlayClerkArticleInfoService.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/article/service/IPlayCustomArticleInfoService.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/article/service/impl/PlayClerkArticleInfoServiceImpl.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/article/service/impl/PlayCustomArticleInfoServiceImpl.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/balance/controller/PlayBalanceDetailsInfoController.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/balance/mapper/PlayBalanceDetailsInfoMapper.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/balance/module/entity/PlayBalanceDetailsInfoEntity.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/balance/module/vo/PlayBalanceDetailsQueryVo.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/balance/module/vo/PlayBalanceDetailsReturnVo.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/balance/service/IPlayBalanceDetailsInfoService.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/balance/service/impl/PlayBalanceDetailsInfoServiceImpl.java
rename play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/{PlayGiftInfoEntity.java => PlayGiftInfoVo.java} (81%)
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/clear/module/vo/PlayClerkUserStateEditVo.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/custom/controller/PlayCustomLevelInfoController.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/custom/mapper/PlayCustomLevelInfoMapper.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/custom/module/entity/PlayCustomLevelInfoEntity.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/custom/module/vo/PlayCustomLevelAddVo.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/custom/module/vo/PlayCustomLevelEditVo.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/custom/module/vo/PlayCustomUserStateEditVo.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/custom/service/IPlayCustomLevelInfoService.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/custom/service/impl/PlayCustomLevelInfoServiceImpl.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/follow/controller/PlayCustomFollowInfoController.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/follow/mapper/PlayCustomFollowInfoMapper.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/follow/module/entity/PlayCustomFollowInfoEntity.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/follow/service/IPlayCustomFollowInfoService.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/follow/service/impl/PlayCustomFollowInfoServiceImpl.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/gift/controller/PlayGiftInfoController.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/gift/mapper/PlayGiftInfoMapper.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/gift/module/entity/PlayGiftInfoEntity.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/gift/service/IPlayGiftInfoService.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/gift/service/impl/PlayGiftInfoServiceImpl.java
rename play-admin/src/main/java/com/starry/admin/modules/order/controller/{OrderInfoController.java => PlayOrderInfoController.java} (70%)
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/order/controller/PlayOrderRewardInfoController.java
delete mode 100644 play-admin/src/main/java/com/starry/admin/modules/order/mapper/OrderDetailsInfoMapper.java
delete mode 100644 play-admin/src/main/java/com/starry/admin/modules/order/mapper/OrderInfoMapper.java
delete mode 100644 play-admin/src/main/java/com/starry/admin/modules/order/mapper/OrderLogInfoMapper.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/order/mapper/PlayOrderInfoMapper.java
delete mode 100644 play-admin/src/main/java/com/starry/admin/modules/order/module/entity/OrderDetailsInfoEntity.java
delete mode 100644 play-admin/src/main/java/com/starry/admin/modules/order/module/entity/OrderLogInfoEntity.java
rename play-admin/src/main/java/com/starry/admin/modules/order/module/entity/{OrderInfoEntity.java => PlayOrderInfoEntity.java} (55%)
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/order/module/vo/PlayOrderRewardQueryVo.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/order/module/vo/PlayOrderRewardReturnVo.java
delete mode 100644 play-admin/src/main/java/com/starry/admin/modules/order/service/IOrderDetailsInfoService.java
delete mode 100644 play-admin/src/main/java/com/starry/admin/modules/order/service/IOrderInfoService.java
delete mode 100644 play-admin/src/main/java/com/starry/admin/modules/order/service/IOrderLogInfoService.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/order/service/IPlayOrderInfoService.java
delete mode 100644 play-admin/src/main/java/com/starry/admin/modules/order/service/impl/OrderDetailsInfoServiceImpl.java
delete mode 100644 play-admin/src/main/java/com/starry/admin/modules/order/service/impl/OrderInfoServiceImpl.java
delete mode 100644 play-admin/src/main/java/com/starry/admin/modules/order/service/impl/OrderLogInfoServiceImpl.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/order/service/impl/PlayOrderInfoServiceImpl.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxCommodityController.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxGiftController.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxPlayController.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClarkCommodityTreeData.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkFollowStateUpdate.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayGiftInfoDto.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayOrderInfoCommodityAdd.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayOrderInfoGiftAdd.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayOrderInfoRewardAdd.java
rename play-admin/src/main/java/com/starry/admin/modules/weichat/{controller/WxCustomService.java => service/WxCustomMpService.java} (94%)
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/weichat/service/WxCustomUserService.java
create mode 100644 play-admin/src/main/java/com/starry/admin/utils/MoneyUtils.java
delete mode 100644 play-admin/src/main/resources/mapper/order/OrderDetailsInfoMapper.xml
delete mode 100644 play-admin/src/main/resources/mapper/order/OrderInfoMapper.xml
create mode 100644 play-admin/src/main/resources/play.properties
diff --git a/play-admin/pom.xml b/play-admin/pom.xml
index 89aeefd..b117866 100644
--- a/play-admin/pom.xml
+++ b/play-admin/pom.xml
@@ -93,17 +93,10 @@
com.github.binarywang
wx-java-mp-spring-boot-starter
-
-
- com.github.binarywang
- weixin-java-pay
-
-
-
-
-
-
+ com.github.wxpay
+ wxpay-sdk
+ 0.0.3
@@ -129,9 +122,14 @@
com.tencentcloudapi
tencentcloud-sdk-java-dnspod
3.1.322
+
+
+ okio
+ com.squareup.okio
+
+
-
diff --git a/play-admin/src/main/java/com/starry/admin/Application.java b/play-admin/src/main/java/com/starry/admin/Application.java
index ec6c3c9..4c6bdfd 100644
--- a/play-admin/src/main/java/com/starry/admin/Application.java
+++ b/play-admin/src/main/java/com/starry/admin/Application.java
@@ -14,5 +14,4 @@ public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
-
}
diff --git a/play-admin/src/main/java/com/starry/admin/common/mybatis/handler/MyMetaObjectHandler.java b/play-admin/src/main/java/com/starry/admin/common/mybatis/handler/MyMetaObjectHandler.java
index d7d5a5e..4e36f5f 100644
--- a/play-admin/src/main/java/com/starry/admin/common/mybatis/handler/MyMetaObjectHandler.java
+++ b/play-admin/src/main/java/com/starry/admin/common/mybatis/handler/MyMetaObjectHandler.java
@@ -11,6 +11,8 @@ import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
import java.util.Date;
/**
@@ -32,7 +34,7 @@ public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
log.info("start insert fill ....");
- this.setFieldValByName("createdTime", new Date(), metaObject);
+// this.setFieldValByName("createdTime", getDate(), metaObject);
this.setFieldValByName("deleted", false, metaObject);
this.setFieldValByName("version", 1L, metaObject);
Object createUser = this.getFieldValByName("createdBy", metaObject);
@@ -46,13 +48,20 @@ public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void updateFill(MetaObject metaObject) {
log.info("start update fill ....");
- this.setFieldValByName("updatedTime", new Date(), metaObject);
+// this.setFieldValByName("updatedTime", getDate(), metaObject);
Object createUser = this.getFieldValByName("updatedBy", metaObject);
if (createUser == null) {
this.setFieldValByName("createdBy", getOperatorId(), metaObject);
}
}
+ public Date getDate() {
+
+ LocalDateTime localDateTime = LocalDateTime.now();
+ return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
+// return Date.from(localDateTime.toInstant(ZoneOffset.ofHours(8)));
+ }
+
public String getOperatorId() {
if (request.getServletPath().startsWith("/wx/")) {
String tenantKey = request.getHeader("tenantkey");
diff --git a/play-admin/src/main/java/com/starry/admin/common/oss/OssProperties.java b/play-admin/src/main/java/com/starry/admin/common/oss/OssProperties.java
index 64953ad..91372e2 100644
--- a/play-admin/src/main/java/com/starry/admin/common/oss/OssProperties.java
+++ b/play-admin/src/main/java/com/starry/admin/common/oss/OssProperties.java
@@ -22,7 +22,7 @@ public class OssProperties implements InitializingBean {
public String bucketName;
@Override
- public void afterPropertiesSet() throws Exception {
+ public void afterPropertiesSet() {
ENDPOINT = getEndpoint();
KEY_ID = getAccessKeyId();
KEY_SECRET = getAccessKeySecret();
diff --git a/play-admin/src/main/java/com/starry/admin/common/play/wx/CommonText.java b/play-admin/src/main/java/com/starry/admin/common/play/wx/CommonText.java
new file mode 100644
index 0000000..31da476
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/common/play/wx/CommonText.java
@@ -0,0 +1,38 @@
+package com.starry.admin.common.play.wx;
+
+public class CommonText {
+
+ public static final String DATA_NOT_EXIST = "数据不存在";
+
+ /**
+ * 微信公众号
+ */
+ public static final String WECHAT_CONFIG_DOES_NOT_EXIST = "未配置公司微信公众号的相关信息";
+ public static final String WECHAT_PAY_CONFIG_DOES_NOT_EXIST = "未配置公司微信支付的相关信息";
+ public static final String OPENID_DOES_NOT_EXIST = "请上传微信用户openid";
+ public static final String WECHAT_TRADE_TYPE_DOES_NOT_EXIST = "请上传微信支付交易类型";
+ public static final String OPENID_ALREADY_BIND = "该微信号已被其他账号绑定!";
+ public static final String ADMIN_OPENID_DOES_NOT_EXIST = "请上传管理员openid";
+ public static final String OPENID_DOES_NOT_FIND = "未获取到对应微信用户openid";
+ public static final String WECHAT_CODE_DOES_NOT_EXIST = "请上传微信用户code";
+ public static final String WECHAT_USER_TOKEN_DOES_ERR = "获取微信用户token失败";
+ public static final String UNIFIEDORDER_ERR = "统一下单失败";
+ public static final String UNIFIEDORDER_ERR_PREPAY_ID_NOT_FIND = "统一下单失败,未生成PREPAY_ID";
+
+ /**
+ * 微信小程序
+ */
+ public static final String MINI_OPENID_DOES_NOT_EXIST = "请上传小程序用户openid";
+ public static final String WECHAT_MINI_CONFIG_DOES_NOT_EXIST = "未配置公司微信小程序的相关信息";
+ public static final String WECHAT_MINI_PARAM_NOT_EXIST = "缺少所需小程序参数!";
+ public static final String WECHAT_MINI_IV_NOT_EXIST = "请上传iv参数";
+ public static final String WECHAT_MINI_SESSION_KEY_DOES_NOT_EXIST = "请上传session_key参数";
+ public static final String WECHAT_MINI_ENCRYPTED_DATA_DOES_NOT_EXIST = "请上传encrypted_data参数";
+ public static final String WECHAT_MINI_ENCRYPTED_DATA_PARSE_ERR = "encrypted_data解析失败";
+ public static final String WECHAT_MINI_ENCRYPTED_DATA_NOT_HAVE_PHONE_NUM = "encrypted_data中未解析出电话号码";
+
+ /**
+ * 支付相关
+ */
+ public static final String ORDER_PAY_TYPE_NOT_EXIST = "请上传支付方式!";
+}
diff --git a/play-admin/src/main/java/com/starry/admin/common/play/wx/HttpUtils.java b/play-admin/src/main/java/com/starry/admin/common/play/wx/HttpUtils.java
new file mode 100644
index 0000000..d9cbf9b
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/common/play/wx/HttpUtils.java
@@ -0,0 +1,199 @@
+package com.starry.admin.common.play.wx;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.starry.admin.common.exception.CustomException;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.http.HttpEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.ssl.SSLContexts;
+import org.apache.http.util.EntityUtils;
+
+import javax.net.ssl.HttpsURLConnection;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLSocketFactory;
+import javax.net.ssl.TrustManager;
+import java.io.*;
+import java.net.ConnectException;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.net.URLConnection;
+import java.nio.charset.StandardCharsets;
+import java.security.KeyStore;
+
+@Slf4j
+public class HttpUtils {
+
+ public static JSONObject httpRequest(String requestUrl, String requestMethod, String outputStr) {
+ StringBuilder buffer = new StringBuilder();
+ try {
+ // 创建SSLContext对象,并使用我们指定的信任管理器初始化
+ TrustManager[] tm = {new MyX509TrustManager()};
+ SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
+ sslContext.init(null, tm, new java.security.SecureRandom());
+ // 从上述SSLContext对象中得到SSLSocketFactory对象
+ SSLSocketFactory ssf = sslContext.getSocketFactory();
+
+ URL url = new URL(requestUrl);
+ HttpsURLConnection httpUrlConn = (HttpsURLConnection) url.openConnection();
+ httpUrlConn.setSSLSocketFactory(ssf);
+ httpUrlConn.setDoOutput(true);
+ httpUrlConn.setDoInput(true);
+ httpUrlConn.setUseCaches(false);
+ // 设置请求方式(GET/POST)
+ httpUrlConn.setRequestMethod(requestMethod);
+ if ("GET".equalsIgnoreCase(requestMethod)) httpUrlConn.connect();
+ // 当有数据需要提交时
+ if (null != outputStr) {
+ OutputStream outputStream = httpUrlConn.getOutputStream();
+ // 注意编码格式,防止中文乱码
+ outputStream.write(outputStr.getBytes(StandardCharsets.UTF_8));
+ outputStream.close();
+ }
+ // 将返回的输入流转换成字符串
+ InputStream inputStream = httpUrlConn.getInputStream();
+ InputStreamReader inputStreamReader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);
+ BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
+
+ String str;
+ while ((str = bufferedReader.readLine()) != null) {
+ buffer.append(str);
+ }
+ bufferedReader.close();
+ inputStreamReader.close();
+ // 释放资源
+ inputStream.close();
+ httpUrlConn.disconnect();
+ return JSONObject.parseObject(buffer.toString());
+ } catch (ConnectException ce) {
+ log.error("weixin server connection timed out");
+ } catch (Exception e) {
+ log.error("weixin play error", e);
+ }
+ return null;
+ }
+
+// /**
+// * 向指定 URL 发送POST方法的请求
+// *
+// * @param url 发送请求的 URL
+// * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
+// * @return 所代表远程资源的响应结果
+// */
+// public static String sendPost(String url, String param) {
+// URLConnection conn = getConnection(url);
+// StringBuilder result = new StringBuilder();
+// try (PrintWriter out = new PrintWriter(conn.getOutputStream()); BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()))) {
+// out.print(param);
+// out.flush();
+// String line;
+// while ((line = in.readLine()) != null) {
+// result.append(line);
+// }
+// } catch (Exception e) {
+// log.error("sendPost error", e);
+// }
+// return result.toString();
+// }
+
+
+ public static String sendPost(String requestUrl, String outputStr) throws IOException {
+ HttpURLConnection conn = getConnection(requestUrl);
+ // 当outputStr不为null时向输出流写数据
+ if (null != outputStr) {
+ OutputStream outputStream = conn.getOutputStream();
+ // 注意编码格式
+ outputStream.write(outputStr.getBytes(StandardCharsets.UTF_8));
+ outputStream.close();
+ }
+
+ try (InputStream inputStream = conn.getInputStream(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8))) {
+ // 从输入流读取返回内容
+ String str;
+ StringBuilder buffer = new StringBuilder();
+ while ((str = bufferedReader.readLine()) != null) {
+ buffer.append(str);
+ }
+ // 释放资源
+ conn.disconnect();
+ return buffer.toString();
+ } catch (Exception e) {
+ log.error("sendPost error,url = {},outputStr={}", requestUrl, outputStr, e);
+ }
+ return null;
+ }
+
+
+ /**
+ * 需要使用证书请求接口
+ */
+ public static String requestWithCert(String url, String pay_cert, String mchid, String data) throws Exception {
+ KeyStore keyStore = KeyStore.getInstance("PKCS12");
+ try (FileInputStream is = new FileInputStream(pay_cert)) {
+ // 这里写密码..默认是你的MCHID
+ keyStore.load(is, mchid.toCharArray());
+ }
+ // Trust own CA and all self-signed certs
+ SSLContext sslcontext = SSLContexts.custom().loadKeyMaterial(keyStore, mchid.toCharArray())// 这里也是写密码的
+ .build();
+ // Allow TLSv1 protocol only
+ SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(sslcontext, new String[]{"TLSv1"}, null, SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
+ try (CloseableHttpClient httpclient = HttpClients.custom().setSSLSocketFactory(socketFactory).build()) {
+ HttpPost httpPost = getHttpPost(url, data);
+ try (CloseableHttpResponse response = httpclient.execute(httpPost)) {
+ HttpEntity entity = response.getEntity();
+ String jsonStr = EntityUtils.toString(response.getEntity(), "UTF-8");
+ EntityUtils.consume(entity);
+ return jsonStr;
+ }
+ }
+ }
+
+ private static HttpPost getHttpPost(String url, String data) {
+ HttpPost httpPost = new HttpPost(url); // 设置响应头信息
+ httpPost.addHeader("Connection", "keep-alive");
+ httpPost.addHeader("Accept", "*/*");
+ httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
+ httpPost.addHeader("Host", "api.mch.weixin.qq.com");
+ httpPost.addHeader("X-Requested-With", "XMLHttpRequest");
+ httpPost.addHeader("Cache-Control", "max-age=0");
+ httpPost.addHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0) ");
+ httpPost.setEntity(new StringEntity(data, "UTF-8"));
+ return httpPost;
+ }
+
+
+ /**
+ * 获取网络连接
+ *
+ * @param url URL
+ * @return URLConnection
+ */
+ private static HttpURLConnection getConnection(String url) {
+ try {
+ URL realUrl = new URL(url);
+ // 打开和URL之间的连接
+ URLConnection conn = realUrl.openConnection();
+ // 设置通用的请求属性
+ conn.setRequestProperty("Charset", "UTF-8");
+ conn.setRequestProperty("accept", "*/*");
+ conn.setRequestProperty("connection", "Keep-Alive");
+ conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
+ // 发送POST请求必须设置如下两行
+ conn.setDoOutput(true);
+ conn.setDoInput(true);
+ conn.setRequestProperty("content-type", "application/x-www-form-urlencoded");
+ return (HttpURLConnection) conn;
+ } catch (IOException e) {
+ log.error("getConnection error", e);
+ throw new CustomException("getConnection error," + e.getMessage());
+ }
+
+ }
+
+
+}
diff --git a/play-admin/src/main/java/com/starry/admin/common/play/wx/MyX509TrustManager.java b/play-admin/src/main/java/com/starry/admin/common/play/wx/MyX509TrustManager.java
new file mode 100644
index 0000000..10d43b5
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/common/play/wx/MyX509TrustManager.java
@@ -0,0 +1,28 @@
+package com.starry.admin.common.play.wx;
+
+import javax.net.ssl.X509TrustManager;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+
+
+/**
+ * 对于https请求,我们需要一个证书信任管理器,这个管理器类需要自己定义,但需要实现X509TrustManager接口
+ * 证书信任管理器(用于https请求)
+ * 这个证书管理器的作用就是让它信任我们指定的证书,上面的代码意味着信任所有证书,不管是否权威机构颁发。
+ *
+ * @author jiangyin
+ */
+public class MyX509TrustManager implements X509TrustManager {
+
+ @Override
+ public void checkClientTrusted(X509Certificate[] chain, String authType) {
+ }
+
+ public void checkServerTrusted(X509Certificate[] chain, String authType) {
+ }
+
+ public X509Certificate[] getAcceptedIssuers() {
+ return null;
+ }
+
+}
diff --git a/play-admin/src/main/java/com/starry/admin/common/play/wx/WXPayXmlUtil.java b/play-admin/src/main/java/com/starry/admin/common/play/wx/WXPayXmlUtil.java
new file mode 100644
index 0000000..6e7c705
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/common/play/wx/WXPayXmlUtil.java
@@ -0,0 +1,27 @@
+package com.starry.admin.common.play.wx;
+
+import org.w3c.dom.Document;
+
+import javax.xml.XMLConstants;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+public final class WXPayXmlUtil {
+ public static DocumentBuilder newDocumentBuilder() throws ParserConfigurationException {
+ DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
+ documentBuilderFactory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
+ documentBuilderFactory.setFeature("http://xml.org/sax/features/external-general-entities", false);
+ documentBuilderFactory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
+ documentBuilderFactory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
+ documentBuilderFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
+ documentBuilderFactory.setXIncludeAware(false);
+ documentBuilderFactory.setExpandEntityReferences(false);
+
+ return documentBuilderFactory.newDocumentBuilder();
+ }
+
+ public static Document newDocument() throws ParserConfigurationException {
+ return newDocumentBuilder().newDocument();
+ }
+}
diff --git a/play-admin/src/main/java/com/starry/admin/common/play/wx/WeChatConstants.java b/play-admin/src/main/java/com/starry/admin/common/play/wx/WeChatConstants.java
new file mode 100644
index 0000000..710a4d2
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/common/play/wx/WeChatConstants.java
@@ -0,0 +1,45 @@
+package com.starry.admin.common.play.wx;
+
+public class WeChatConstants {
+
+ public enum SignType {
+ MD5, HMACSHA256
+ }
+
+ public static final String FIELD_SIGN = "sign";
+
+ /**
+ * 支付成功回调地址
+ */
+ public static String NOTIFY_URL = "http://8.142.116.233:8001/pay/wxpay/callback";
+
+
+ /**
+ * 支付证书路径
+ */
+ public static String PAY_CERT_LOC = "C:\\CTO\\java\\apache-tomcat-8.0.50\\wxcert\\";
+
+ /**
+ * 微信 trade_type 参数
+ */
+ public static final String TRADE_TYPE_JSAPI = "JSAPI";//JSAPI支付 例如 : 直接调用微信支付
+ public static final String TRADE_TYPE_NATIVE = "NATIVE";//Native支付 例如 : 扫码支付
+
+ /**
+ * 统一下单
+ */
+ public static String UNIFIEDORDER_URL = "https://api.mch.weixin.qq.com/pay/unifiedorder";
+ /**
+ * 订单支付状态查询
+ */
+ public static String ORDERQUERY_URL = "https://api.mch.weixin.qq.com/pay/orderquery";
+ /**
+ * 退款
+ */
+ public static String REFUND_URL = "https://api.mch.weixin.qq.com/secapi/pay/refund";
+ /**
+ * 提现
+ */
+ public static String TRANSFERS_URL = "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers";
+
+}
\ No newline at end of file
diff --git a/play-admin/src/main/java/com/starry/admin/common/play/wx/WxPlayProperties.java b/play-admin/src/main/java/com/starry/admin/common/play/wx/WxPlayProperties.java
new file mode 100644
index 0000000..5554f4b
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/common/play/wx/WxPlayProperties.java
@@ -0,0 +1,69 @@
+package com.starry.admin.common.play.wx;
+
+import lombok.Data;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.PropertySource;
+
+@Data
+@Configuration
+@ConfigurationProperties(prefix = "wx.play")
+@PropertySource(value = {"classpath:play.properties"})
+public class WxPlayProperties implements InitializingBean {
+
+ /**
+ * 设置微信公众号或者小程序等的appid
+ */
+ private String appId;
+ /**
+ * 微信支付商户号
+ */
+ private String mchId;
+
+ /**
+ * 证书相对路径
+ */
+ private String privateKeyPath;
+
+ /**
+ * 证书相对路径
+ */
+ private String privateCertPath;
+
+ /**
+ * 下单回调地址
+ */
+ private String returnUrl;
+
+ /**
+ * 退款回调地址
+ */
+ private String refundUrl;
+
+
+ /**
+ * apiV3key
+ */
+ private String apiV3key;
+
+
+ public static String APP_ID = "";
+ public static String MCH_ID = "";
+ public static String PRIVATE_KEY_PATH = "";
+ public static String PRIVATE_CERT_PATH = "";
+ public static String RETURN_URL = "";
+ public static String REFUND_URL = "";
+ public static String API_V3KEY = "";
+
+ @Override
+ public void afterPropertiesSet() {
+ APP_ID = getAppId();
+ MCH_ID = getMchId();
+ PRIVATE_KEY_PATH = getPrivateKeyPath();
+ PRIVATE_CERT_PATH = getPrivateCertPath();
+ RETURN_URL = getReturnUrl();
+ REFUND_URL = getRefundUrl();
+ API_V3KEY = getApiV3key();
+ }
+}
diff --git a/play-admin/src/main/java/com/starry/admin/common/play/wx/WxPlayUtils.java b/play-admin/src/main/java/com/starry/admin/common/play/wx/WxPlayUtils.java
new file mode 100644
index 0000000..cf446ff
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/common/play/wx/WxPlayUtils.java
@@ -0,0 +1,354 @@
+package com.starry.admin.common.play.wx;
+
+import cn.hutool.core.util.IdUtil;
+import com.github.wxpay.sdk.WXPayUtil;
+import com.starry.admin.common.exception.CustomException;
+import lombok.extern.slf4j.Slf4j;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+import javax.crypto.Mac;
+import javax.crypto.spec.SecretKeySpec;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.io.StringWriter;
+import java.nio.charset.StandardCharsets;
+import java.security.InvalidKeyException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.security.SecureRandom;
+import java.util.*;
+
+@Slf4j
+public class WxPlayUtils {
+
+ private static final String SYMBOLS = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
+
+ private static final Random RANDOM = new SecureRandom();
+
+
+ /**
+ * @param openId 微信公众号ID
+ * @param appid 用户ID
+ * @param mchId 商户ID
+ * @param orderId 订单ID
+ * @param spBillCreateIp 终端设备ID
+ * @param body 商品描述
+ * @param totalFee 商品金额
+ * @param attach 附加数据,在查询API和支付通知中原样返回,可作为自定义参数使用(传入租户ID)
+ * @return
+ * @throws Exception
+ */
+ public static String unifiedOrderJSAPI(String openId, String appid, String mchId, String orderId, String spBillCreateIp, String body, String attach, int totalFee) throws Exception {
+ Map playRequestParameters = new HashMap<>();
+ playRequestParameters.put("appid", appid);
+ playRequestParameters.put("mch_id", mchId);
+ playRequestParameters.put("nonce_str", IdUtil.fastSimpleUUID());
+ playRequestParameters.put("body", body);
+ playRequestParameters.put("attach", attach);
+ playRequestParameters.put("out_trade_no", orderId);
+ playRequestParameters.put("total_fee", String.valueOf(totalFee));
+ playRequestParameters.put("spbill_create_ip", spBillCreateIp);
+ playRequestParameters.put("notify_url", WxPlayProperties.RETURN_URL);
+ playRequestParameters.put("trade_type", "JSAPI");
+ playRequestParameters.put("openId", openId);
+ String nonce_str = IdUtil.fastSimpleUUID();
+ //生成签名, 统一下单
+ log.debug("paraMap------------{}", playRequestParameters);
+ String sign = WXPayUtil.generateSignature(playRequestParameters, orderId);
+ log.debug("sign:{}", sign);
+ playRequestParameters.put("sign", sign);
+ String xml = WXPayUtil.mapToXml(playRequestParameters);//将所有参数(map)转xml格式
+ String new_xml = new String(xml.getBytes(StandardCharsets.UTF_8));
+ log.debug("xml:{}", new_xml);
+ //发送post请求"统一下单接口"返回预支付id:prepay_id
+ String xmlStr = HttpUtils.sendPost(WeChatConstants.UNIFIEDORDER_URL, generateSignedXml(playRequestParameters, orderId));
+// String xmlStr = HttpUtils.sendPost(WeChatConstants.UNIFIEDORDER_URL, generateSignedXml(playRequestParameters, orderId));
+ log.debug("xmlStr:{}", xmlStr);
+ Map map = WXPayUtil.xmlToMap(xmlStr);
+
+ // 如果预支付返回状态码为不为SUCCESS,说明预支付接口调用失败(通讯业务失败),抛出异常,业务进行处理
+ if (!map.get("return_code").equals("SUCCESS")) {
+ throw new CustomException(map.get("return_msg"));
+ }
+ // 如果预支付返回状态码为不为SUCCESS,说明预支付接口调用失败(交易业务失败),抛出异常,业务进行处理
+ if (!map.get("result_code ").equals("SUCCESS")) {
+ throw new CustomException(map.get("err_code_des"));
+ }
+ return map.get("prepay_id");
+ }
+
+ /**
+ * 订单支付状态查询
+ *
+ * @param wechat_appid
+ * @param wechat_mchid
+ * @param wechat_seckey
+ * @param out_trade_no
+ * @return
+ * @throws Exception
+ */
+ public static Map orderQuery(String wechat_appid, String wechat_mchid, String wechat_seckey, String out_trade_no) throws Exception {
+ //拼接 参数
+ Map paraMap = new HashMap();
+ paraMap.put("appid", wechat_appid);
+ paraMap.put("mch_id", wechat_mchid);
+ paraMap.put("nonce_str", IdUtil.fastSimpleUUID());
+ paraMap.put("out_trade_no", out_trade_no);//订单号
+ String sign = WXPayUtil.generateSignature(paraMap, wechat_seckey);
+ paraMap.put("sign", sign);
+ String xml = WXPayUtil.mapToXml(paraMap);//将所有参数(map)转xml格式
+ String xmlStr = HttpUtils.sendPost(WeChatConstants.ORDERQUERY_URL, xml);//发送post请求"统一下单接口"返回预支付id:prepay_id
+ return WXPayUtil.xmlToMap(xmlStr);
+ }
+
+ /**
+ * XML格式字符串转换为Map
+ *
+ * @param strXML XML字符串
+ * @return XML数据转换后的Map
+ */
+ public static Map xmlToMap(String strXML) throws Exception {
+ Map data = new HashMap<>();
+ DocumentBuilder documentBuilder = WXPayXmlUtil.newDocumentBuilder();
+// InputStream stream = new ByteArrayInputStream(strXML.getBytes("UTF-8"));
+ InputStream stream = new ByteArrayInputStream(strXML.getBytes("GBK"));
+ Document doc = documentBuilder.parse(stream);
+ doc.getDocumentElement().normalize();
+ NodeList nodeList = doc.getDocumentElement().getChildNodes();
+ for (int idx = 0; idx < nodeList.getLength(); ++idx) {
+ Node node = nodeList.item(idx);
+ if (node.getNodeType() == Node.ELEMENT_NODE) {
+ Element element = (Element) node;
+ data.put(element.getNodeName(), element.getTextContent());
+ }
+ }
+ try {
+ stream.close();
+ } catch (Exception ignored) {
+
+ }
+ return data;
+ }
+
+
+ /**
+ * 将Map转换为XML格式的字符串
+ *
+ * @param data Map类型数据
+ * @return XML格式的字符串
+ * @throws Exception 系统异常
+ */
+ public static String mapToXml(Map data) throws Exception {
+ Document document = WXPayXmlUtil.newDocument();
+ Element root = document.createElement("xml");
+ document.appendChild(root);
+ for (String key : data.keySet()) {
+ String value = data.get(key);
+ if (value == null) {
+ value = "";
+ }
+ value = value.trim();
+ Element filed = document.createElement(key);
+ filed.appendChild(document.createTextNode(value));
+ root.appendChild(filed);
+ }
+ TransformerFactory tf = TransformerFactory.newInstance();
+ Transformer transformer = tf.newTransformer();
+ DOMSource source = new DOMSource(document);
+ transformer.setOutputProperty(OutputKeys.ENCODING, "GBK");
+// transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
+ transformer.setOutputProperty(OutputKeys.INDENT, "yes");
+ StringWriter writer = new StringWriter();
+ StreamResult result = new StreamResult(writer);
+ transformer.transform(source, result);
+ String output = writer.getBuffer().toString();
+ try {
+ writer.close();
+ } catch (Exception ignored) {
+ }
+ return output;
+ }
+
+
+ /**
+ * 生成带有 sign 的 XML 格式字符串
+ *
+ * @param data Map类型数据
+ * @param key API密钥
+ * @return 含有sign字段的XML
+ */
+ public static String generateSignedXml(final Map data, String key) throws Exception {
+ return generateSignedXml(data, key, WeChatConstants.SignType.MD5);
+ }
+
+ /**
+ * 生成带有 sign 的 XML 格式字符串
+ *
+ * @param data Map类型数据
+ * @param key API密钥
+ * @param signType 签名类型
+ * @return 含有sign字段的XML
+ */
+ public static String generateSignedXml(final Map data, String key, WeChatConstants.SignType signType) throws Exception {
+ String sign = generateSignature(data, key, signType);
+ data.put(WeChatConstants.FIELD_SIGN, sign);
+ return mapToXml(data);
+ }
+
+
+ /**
+ * 判断签名是否正确
+ *
+ * @param xmlStr XML格式数据
+ * @param key API密钥
+ * @return 签名是否正确
+ * @throws Exception 系统异常
+ */
+ public static boolean isSignatureValid(String xmlStr, String key) throws Exception {
+ Map data = xmlToMap(xmlStr);
+ if (!data.containsKey(WeChatConstants.FIELD_SIGN)) {
+ return false;
+ }
+ String sign = data.get(WeChatConstants.FIELD_SIGN);
+ return generateSignature(data, key).equals(sign);
+ }
+
+ /**
+ * 判断签名是否正确,必须包含sign字段,否则返回false。使用MD5签名。
+ *
+ * @param data Map类型数据
+ * @param key API密钥
+ * @return 签名是否正确
+ * @throws Exception 系统异常
+ */
+ public static boolean isSignatureValid(Map data, String key) throws Exception {
+ return isSignatureValid(data, key, WeChatConstants.SignType.MD5);
+ }
+
+ /**
+ * 判断签名是否正确,必须包含sign字段,否则返回false。
+ *
+ * @param data Map类型数据
+ * @param key API密钥
+ * @param signType 签名方式
+ * @return 签名是否正确
+ * @throws Exception 系统异常
+ */
+ public static boolean isSignatureValid(Map data, String key, WeChatConstants.SignType signType) throws Exception {
+ if (!data.containsKey(WeChatConstants.FIELD_SIGN)) {
+ return false;
+ }
+ String sign = data.get(WeChatConstants.FIELD_SIGN);
+ return generateSignature(data, key, signType).equals(sign);
+ }
+
+ /**
+ * 生成签名
+ *
+ * @param data 待签名数据
+ * @param key API密钥
+ * @return 签名
+ */
+ public static String generateSignature(final Map data, String key) throws Exception {
+ return generateSignature(data, key, WeChatConstants.SignType.MD5);
+ }
+
+ /**
+ * 生成签名. 注意,若含有sign_type字段,必须和signType参数保持一致。
+ *
+ * @param data 待签名数据
+ * @param key API密钥
+ * @param signType 签名方式
+ * @return 签名
+ */
+ public static String generateSignature(final Map data, String key, WeChatConstants.SignType signType) throws Exception {
+ Set keySet = data.keySet();
+ String[] keyArray = keySet.toArray(new String[0]);
+ Arrays.sort(keyArray);
+ StringBuilder sb = new StringBuilder();
+ for (String k : keyArray) {
+ if (k.equals(WeChatConstants.FIELD_SIGN)) {
+ continue;
+ }
+ // 参数值为空,则不参与签名
+ if (!data.get(k).trim().isEmpty()) {
+ sb.append(k).append("=").append(data.get(k).trim()).append("&");
+ }
+ }
+ sb.append("key=").append(key);
+ if (WeChatConstants.SignType.MD5.equals(signType)) {
+ return MD5(sb.toString()).toUpperCase();
+ } else if (WeChatConstants.SignType.HMACSHA256.equals(signType)) {
+ return HmacSHA256(sb.toString(), key);
+ } else {
+ throw new Exception(String.format("Invalid sign_type: %s", signType));
+ }
+ }
+
+
+ /**
+ * 获取随机字符串 Nonce Str
+ *
+ * @return String 随机字符串
+ */
+ public static String generateNonceStr() {
+ char[] nonceChars = new char[32];
+ for (int index = 0; index < nonceChars.length; ++index) {
+ nonceChars[index] = SYMBOLS.charAt(RANDOM.nextInt(SYMBOLS.length()));
+ }
+ return new String(nonceChars);
+ }
+
+
+ /**
+ * 生成 MD5
+ *
+ * @param data 待处理数据
+ * @return MD5结果
+ */
+ public static String MD5(String data) throws Exception {
+ MessageDigest md = MessageDigest.getInstance("MD5");
+ byte[] array = md.digest(data.getBytes(StandardCharsets.UTF_8));
+ StringBuilder sb = new StringBuilder();
+ for (byte item : array) {
+ sb.append(Integer.toHexString((item & 0xFF) | 0x100), 1, 3);
+ }
+ return sb.toString().toUpperCase();
+ }
+
+ /**
+ * 生成 HmacSHA256
+ *
+ * @param data 待处理数据
+ * @param key 密钥
+ * @return 加密结果
+ * @throws NoSuchAlgorithmException,InvalidKeyException 系统异常
+ */
+ public static String HmacSHA256(String data, String key) throws NoSuchAlgorithmException, InvalidKeyException {
+ Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
+ SecretKeySpec secret_key = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
+ sha256_HMAC.init(secret_key);
+ byte[] array = sha256_HMAC.doFinal(data.getBytes(StandardCharsets.UTF_8));
+ StringBuilder sb = new StringBuilder();
+ for (byte item : array) {
+ sb.append(Integer.toHexString((item & 0xFF) | 0x100), 1, 3);
+ }
+ return sb.toString().toUpperCase();
+ }
+
+ /**
+ * 获取当前时间戳,单位秒
+ */
+ public static long getCurrentTimestamp() {
+ return System.currentTimeMillis() / 1000;
+ }
+}
diff --git a/play-admin/src/main/java/com/starry/admin/common/security/config/SpringSecurityConfig.java b/play-admin/src/main/java/com/starry/admin/common/security/config/SpringSecurityConfig.java
index 2748347..c52030c 100644
--- a/play-admin/src/main/java/com/starry/admin/common/security/config/SpringSecurityConfig.java
+++ b/play-admin/src/main/java/com/starry/admin/common/security/config/SpringSecurityConfig.java
@@ -23,6 +23,9 @@ import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
+import org.springframework.web.cors.CorsConfiguration;
+import org.springframework.web.cors.CorsConfigurationSource;
+import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import javax.annotation.Resource;
import java.util.Set;
@@ -58,7 +61,7 @@ public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
.antMatchers("/login", "/captcha/get-captcha", "/wx/**").permitAll()
// 跨域请求会先进行一次options请求
.antMatchers(HttpMethod.OPTIONS).permitAll().anyRequest()// 除上面外的所有请求全部需要鉴权认证
- .authenticated();
+ .authenticated().and().cors().configurationSource(this.corsConfigurationSource());
// 禁用缓存
httpSecurity.headers().cacheControl();
// 添加Logout filter
@@ -69,6 +72,18 @@ public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
httpSecurity.exceptionHandling().accessDeniedHandler(customAccessDeniedHandler).authenticationEntryPoint(customAuthenticationEntryPoint);
}
+ private CorsConfigurationSource corsConfigurationSource(){
+ CorsConfiguration corsConfiguration = new CorsConfiguration();
+ corsConfiguration.setAllowCredentials(true);
+ corsConfiguration.addAllowedHeader("*"); // 这个得加上,一些复杂的请求方式会带有header,不加上跨域会失效。
+ corsConfiguration.addAllowedMethod("*");
+ corsConfiguration.addExposedHeader("*");
+ corsConfiguration.addAllowedOriginPattern("*");
+ UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
+ source.registerCorsConfiguration("/**",corsConfiguration);
+ return source;
+ }
+
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService()).passwordEncoder(passwordEncoder());
diff --git a/play-admin/src/main/java/com/starry/admin/common/security/filter/JwtAuthenticationTokenFilter.java b/play-admin/src/main/java/com/starry/admin/common/security/filter/JwtAuthenticationTokenFilter.java
index 4ff3735..47b2db4 100644
--- a/play-admin/src/main/java/com/starry/admin/common/security/filter/JwtAuthenticationTokenFilter.java
+++ b/play-admin/src/main/java/com/starry/admin/common/security/filter/JwtAuthenticationTokenFilter.java
@@ -5,7 +5,9 @@ import cn.hutool.core.util.StrUtil;
import com.starry.admin.common.component.JwtToken;
import com.starry.admin.common.domain.LoginUser;
import com.starry.admin.common.exception.CustomException;
+import com.starry.admin.modules.clear.module.entity.PlayClerkUserInfoEntity;
import com.starry.admin.modules.clear.service.impl.PlayClerkUserInfoServiceImpl;
+import com.starry.admin.modules.custom.module.entity.PlayCustomUserInfoEntity;
import com.starry.admin.modules.custom.service.impl.PlayCustomUserInfoServiceImpl;
import com.starry.admin.modules.platform.entity.SysTenantEntity;
import com.starry.admin.modules.platform.service.ISysTenantService;
@@ -23,11 +25,11 @@ import org.springframework.web.servlet.HandlerExceptionResolver;
import javax.annotation.Resource;
import javax.servlet.FilterChain;
-import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.NotNull;
-import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
/**
* @author admin
@@ -61,29 +63,62 @@ public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {
@Override
- protected void doFilterInternal(@NotNull HttpServletRequest httpServletRequest, @NotNull HttpServletResponse httpServletResponse, @NotNull FilterChain filterChain) throws ServletException, IOException {
- // 微信公众号的请求
- if (httpServletRequest.getServletPath().startsWith("/wx/")) {
- String clerkToken = httpServletRequest.getHeader(Constants.CLERK_USER_LOGIN_TOKEN);
- String customToken = httpServletRequest.getHeader(Constants.CUSTOM_USER_LOGIN_TOKEN);
- String tenantKey = httpServletRequest.getHeader("tenantkey");
- String tenantId = getTenantId(clerkToken, customToken, tenantKey);
- if (!checkTenantId(tenantId)) {
- resolver.resolveException(httpServletRequest, httpServletResponse, null, new CustomException("租户信息异常"));
- return;
- }
- SecurityUtils.setTenantId(tenantId);
- } else {
- // 管理端的请求
- LoginUser jwtUser = jwtToken.getNewLoginUser(httpServletRequest);
- if (null != jwtUser && null == SecurityContextHolder.getContext().getAuthentication()) {
- jwtToken.verifyToken(jwtUser);
- UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(jwtUser, null, jwtUser.getAuthorities());
- authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(httpServletRequest));
- SecurityContextHolder.getContext().setAuthentication(authentication);
+ protected void doFilterInternal(@NotNull HttpServletRequest httpServletRequest, @NotNull HttpServletResponse httpServletResponse, @NotNull FilterChain filterChain) {
+ log.info("url = {}", httpServletRequest.getRequestURI());
+ try {
+
+
+ // 微信公众号的请求,必须存在tenantkey,否则抛出异常
+ if (httpServletRequest.getServletPath().startsWith("/wx/")) {
+ String tenantKey = httpServletRequest.getHeader("tenantkey");
+ if (StrUtil.isBlank(tenantKey)) {
+ resolver.resolveException(httpServletRequest, httpServletResponse, null, new CustomException("tenantkey不能为空"));
+ return;
+ }
+ Map notLoginUrls = new HashMap<>();
+ notLoginUrls.put("/wx/common/area/tree", "1");
+ notLoginUrls.put("/wx/common/file/upload", "1");
+ notLoginUrls.put("/wx/common/audio/upload", "1");
+ notLoginUrls.put("/wx/oauth2/getConfigAddress", "1");
+ notLoginUrls.put("/clerk/level/queryAll", "1");
+ notLoginUrls.put("/wx/clerk/class/queryAll", "1");
+ notLoginUrls.put("/wx/clerk/user/queryByPage", "1");
+ notLoginUrls.put("/wx/clerk/user/queryGiftById", "1");
+ notLoginUrls.put("/wx/clerk/user/queryPriceById", "1");
+ notLoginUrls.put("/wx/clerk/user/queryTrendsById", "1");
+ notLoginUrls.put("/wx/clerk/user/queryEvaluateById", "1");
+ if (notLoginUrls.containsKey(httpServletRequest.getServletPath())) {
+ String tenantId = getTenantId(null, null, tenantKey);
+ if (!checkTenantId(tenantId)) {
+ resolver.resolveException(httpServletRequest, httpServletResponse, null, new CustomException("租户信息异常"));
+ return;
+ }
+ SecurityUtils.setTenantId(tenantId);
+ } else {
+ String clerkToken = httpServletRequest.getHeader(Constants.CLERK_USER_LOGIN_TOKEN);
+ String customToken = httpServletRequest.getHeader(Constants.CUSTOM_USER_LOGIN_TOKEN);
+ String tenantId = getTenantId(clerkToken, customToken, tenantKey);
+ if (!checkTenantId(tenantId)) {
+ resolver.resolveException(httpServletRequest, httpServletResponse, null, new CustomException("租户信息异常"));
+ return;
+ }
+ SecurityUtils.setTenantId(tenantId);
+ }
+ } else {
+ // 管理端的请求
+ LoginUser jwtUser = jwtToken.getNewLoginUser(httpServletRequest);
+ if (null != jwtUser && null == SecurityContextHolder.getContext().getAuthentication()) {
+ jwtToken.verifyToken(jwtUser);
+ UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(jwtUser, null, jwtUser.getAuthorities());
+ authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(httpServletRequest));
+ SecurityContextHolder.getContext().setAuthentication(authentication);
+ }
}
+ filterChain.doFilter(httpServletRequest, httpServletResponse);
+ } catch (Exception e) {
+ log.error("系统异常", e);
+ resolver.resolveException(httpServletRequest, httpServletResponse, null, new CustomException("租户及授权验证失败"));
}
- filterChain.doFilter(httpServletRequest, httpServletResponse);
}
@@ -98,27 +133,34 @@ public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {
*/
public String getTenantId(String clerkToken, String customToken, String tenantKey) {
String tenantId = "";
- //如果用户(陪玩或客户)已登录,从token中获取租户ID
- if (StrUtil.isNotBlank(clerkToken) || StrUtil.isNotBlank(customToken)) {
- String userId;
- try {
- userId = tokenService.getWxUserIdByToken(StrUtil.isNotBlank(clerkToken) ? clerkToken : customToken);
- } catch (Exception e) {
- return "";
- }
- if (clerkToken != null) {
+ try {
+ //如果用户(陪玩或客户)已登录,从token中获取租户ID
+ if (StrUtil.isNotBlank(clerkToken) || StrUtil.isNotBlank(customToken)) {
+ String userId = tokenService.getWxUserIdByToken(StrUtil.isNotBlank(clerkToken) ? clerkToken : customToken);
String redisKey = "TENANT_INFO:" + userId;
SecurityUtils.setTenantId(redisCache.getCacheObject(redisKey));
- tenantId = clerkUserInfoService.selectById(userId).getTenantId();
+ if (clerkToken != null) {
+ PlayClerkUserInfoEntity entity = clerkUserInfoService.selectById(userId);
+ if (entity == null) {
+ log.error("当前登录陪玩不存在,clerkToken={},tenantKey={}", clerkToken, tenantKey);
+ }
+ tenantId = entity != null ? entity.getTenantId() : "";
+ } else {
+ PlayCustomUserInfoEntity entity = customUserInfoService.selectById(userId);
+ if (entity == null) {
+ log.error("当前登录顾客不存在,customToken={},tenantKey={}", customToken, tenantKey);
+ }
+ tenantId = entity != null ? entity.getTenantId() : "";
+ }
} else {
- tenantId = customUserInfoService.selectById(userId).getTenantId();
- }
- } else {
- // 如果用户未登录,从tenantKey中获取租户ID,然后验证租户ID是否存在,以及租户是否过期等
- SysTenantEntity entity = sysTenantService.selectByTenantKey(tenantKey);
- if (entity != null) {
- tenantId = entity.getTenantId();
+ // 如果用户未登录,从tenantKey中获取租户ID,然后验证租户ID是否存在,以及租户是否过期等
+ SysTenantEntity entity = sysTenantService.selectByTenantKey(tenantKey);
+ if (entity != null) {
+ tenantId = entity.getTenantId();
+ }
}
+ } catch (Exception e) {
+ log.error("获取tenantKey异常,clerkToken={},customToken={},tenantKey = {}", clerkToken, customToken, tenantKey, e);
}
return tenantId;
}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/article/controller/PlayClerkArticleInfoController.java b/play-admin/src/main/java/com/starry/admin/modules/article/controller/PlayClerkArticleInfoController.java
new file mode 100644
index 0000000..7d2b78c
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/article/controller/PlayClerkArticleInfoController.java
@@ -0,0 +1,87 @@
+package com.starry.admin.modules.article.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.starry.admin.modules.article.module.entity.PlayClerkArticleInfoEntity;
+import com.starry.admin.modules.article.module.vo.PlayClerkArticleQueryVo;
+import com.starry.admin.modules.article.module.vo.PlayClerkArticleReturnVo;
+import com.starry.admin.modules.article.service.IPlayClerkArticleInfoService;
+import com.starry.admin.modules.article.service.IPlayCustomArticleInfoService;
+import com.starry.common.annotation.Log;
+import com.starry.common.enums.BusinessType;
+import com.starry.common.result.R;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+/**
+ * 店员动态信息Controller
+ *
+ * @author admin
+ * @since 2024-05-04
+ */
+@RestController
+@RequestMapping("/clerk/article")
+public class PlayClerkArticleInfoController {
+ @Resource
+ private IPlayClerkArticleInfoService playClerkArticleInfoService;
+ @Resource
+ private IPlayCustomArticleInfoService playCustomArticleInfoService;
+
+
+ /**
+ * 查询店员动态信息列表
+ */
+ @PostMapping("/list")
+ public R list(PlayClerkArticleQueryVo vo) {
+ IPage list = playClerkArticleInfoService.selectPlayClerkArticleInfoByPage(vo);
+ return R.ok(list);
+ }
+
+ /**
+ * 获取店员动态信息详细信息
+ */
+ @GetMapping(value = "/{id}")
+ public R getInfo(@PathVariable("id") String id) {
+ return R.ok(playClerkArticleInfoService.selectPlayClerkArticleInfoById(id));
+ }
+
+ /**
+ * 新增店员动态信息
+ */
+ @Log(title = "店员动态信息", businessType = BusinessType.INSERT)
+ @PostMapping("/create")
+ public R create(@RequestBody PlayClerkArticleInfoEntity playClerkArticleInfo) {
+ boolean success = playClerkArticleInfoService.create(playClerkArticleInfo);
+ if (success) {
+ return R.ok();
+ }
+ return R.error("添加失败");
+ }
+
+ /**
+ * 修改店员动态信息
+ */
+ @Log(title = "店员动态信息", businessType = BusinessType.UPDATE)
+ @PostMapping(value = "/update/{id}")
+ public R update(@PathVariable String id, @RequestBody PlayClerkArticleInfoEntity playClerkArticleInfo) {
+ playClerkArticleInfo.setId(id);
+ boolean success = playClerkArticleInfoService.update(playClerkArticleInfo);
+ if (success) {
+ return R.ok();
+ }
+ return R.error("修改失败");
+ }
+
+ /**
+ * 删除店员动态信息
+ */
+ @Log(title = "店员动态信息", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public R remove(@PathVariable String[] ids) {
+ for (String id : ids) {
+ playClerkArticleInfoService.deletePlayClerkArticleInfoById(id);
+ playCustomArticleInfoService.deleteByArticleId(id);
+ }
+ return R.ok();
+ }
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/article/controller/PlayCustomArticleInfoController.java b/play-admin/src/main/java/com/starry/admin/modules/article/controller/PlayCustomArticleInfoController.java
new file mode 100644
index 0000000..5d48dd6
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/article/controller/PlayCustomArticleInfoController.java
@@ -0,0 +1,83 @@
+package com.starry.admin.modules.article.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.starry.admin.modules.article.module.entity.PlayCustomArticleInfoEntity;
+import com.starry.admin.modules.article.service.IPlayCustomArticleInfoService;
+import com.starry.common.annotation.Log;
+import com.starry.common.enums.BusinessType;
+import com.starry.common.result.R;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+/**
+ * 陪玩点赞动态信息Controller
+ *
+ * @author admin
+ * @since 2024-05-04
+ */
+@RestController
+@RequestMapping("/custom/article")
+public class PlayCustomArticleInfoController {
+ @Resource
+ private IPlayCustomArticleInfoService playCustomArticleInfoService;
+
+ /**
+ * 查询陪玩点赞动态信息列表
+ */
+ @PreAuthorize("@customSs.hasPermission('play:info:list')")
+ @GetMapping("/list")
+ public R list(PlayCustomArticleInfoEntity playCustomArticleInfo) {
+ IPage list = playCustomArticleInfoService.selectPlayCustomArticleInfoByPage(playCustomArticleInfo);
+ return R.ok(list);
+ }
+
+ /**
+ * 获取陪玩点赞动态信息详细信息
+ */
+ @PreAuthorize("@customSs.hasPermission('play:info:query')")
+ @GetMapping(value = "/{id}")
+ public R getInfo(@PathVariable("id") String id) {
+ return R.ok(playCustomArticleInfoService.selectPlayCustomArticleInfoById(id));
+ }
+
+ /**
+ * 新增陪玩点赞动态信息
+ */
+ @PreAuthorize("@customSs.hasPermission('play:info:create')")
+ @Log(title = "陪玩点赞动态信息", businessType = BusinessType.INSERT)
+ @PostMapping("/create")
+ public R create(@RequestBody PlayCustomArticleInfoEntity playCustomArticleInfo) {
+ boolean success = playCustomArticleInfoService.create(playCustomArticleInfo);
+ if (success) {
+ return R.ok();
+ }
+ return R.error("添加失败");
+ }
+
+ /**
+ * 修改陪玩点赞动态信息
+ */
+ @PreAuthorize("@customSs.hasPermission('play:info:edit')")
+ @Log(title = "陪玩点赞动态信息", businessType = BusinessType.UPDATE)
+ @PostMapping(value = "/update/{id}")
+ public R update(@PathVariable String id, @RequestBody PlayCustomArticleInfoEntity playCustomArticleInfo) {
+ playCustomArticleInfo.setId(id);
+ boolean success = playCustomArticleInfoService.update(playCustomArticleInfo);
+ if (success) {
+ return R.ok();
+ }
+ return R.error("修改失败");
+ }
+
+ /**
+ * 删除陪玩点赞动态信息
+ */
+ @PreAuthorize("@customSs.hasPermission('play:info:remove')")
+ @Log(title = "陪玩点赞动态信息", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public R remove(@PathVariable String[] ids) {
+ return R.ok(playCustomArticleInfoService.deletePlayCustomArticleInfoByIds(ids));
+ }
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/article/mapper/PlayClerkArticleInfoMapper.java b/play-admin/src/main/java/com/starry/admin/modules/article/mapper/PlayClerkArticleInfoMapper.java
new file mode 100644
index 0000000..6c47a35
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/article/mapper/PlayClerkArticleInfoMapper.java
@@ -0,0 +1,16 @@
+package com.starry.admin.modules.article.mapper;
+
+
+import com.github.yulichang.base.MPJBaseMapper;
+import com.starry.admin.modules.article.module.entity.PlayClerkArticleInfoEntity;
+
+/**
+ * 店员动态信息Mapper接口
+ *
+ * @author admin
+ * @since 2024-05-04
+ */
+public interface PlayClerkArticleInfoMapper extends MPJBaseMapper {
+
+
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/article/mapper/PlayCustomArticleInfoMapper.java b/play-admin/src/main/java/com/starry/admin/modules/article/mapper/PlayCustomArticleInfoMapper.java
new file mode 100644
index 0000000..7578704
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/article/mapper/PlayCustomArticleInfoMapper.java
@@ -0,0 +1,16 @@
+package com.starry.admin.modules.article.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.starry.admin.modules.article.module.entity.PlayCustomArticleInfoEntity;
+
+/**
+ * 陪玩点赞动态信息Mapper接口
+ *
+ * @author admin
+ * @since 2024-05-04
+ */
+public interface PlayCustomArticleInfoMapper extends BaseMapper {
+
+
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/article/module/entity/PlayClerkArticleInfoEntity.java b/play-admin/src/main/java/com/starry/admin/modules/article/module/entity/PlayClerkArticleInfoEntity.java
new file mode 100644
index 0000000..5599777
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/article/module/entity/PlayClerkArticleInfoEntity.java
@@ -0,0 +1,73 @@
+package com.starry.admin.modules.article.module.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.starry.common.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+
+/**
+ * 店员动态信息对象 play_clerk_article_info
+ *
+ * @author admin
+ * @since 2024-05-04
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("play_clerk_article_info")
+public class PlayClerkArticleInfoEntity extends BaseEntity {
+
+
+ /**
+ * UUID
+ */
+ private String id;
+
+ /**
+ * 租户ID
+ */
+ private String tenantId;
+
+ /**
+ * 陪玩用户ID
+ */
+ private String playUserId;
+
+ /**
+ * 动态标题
+ */
+ private String articleTitle;
+
+ /**
+ * 动态内容类型(0:图片,1:视频)
+ */
+ private String articleType;
+
+ /**
+ * 动态内容
+ */
+ private String articleCon;
+
+ /**
+ * 发布时间
+ */
+ private Date releaseTime;
+
+ /**
+ * 点赞人数
+ */
+ private Long agreedQuantity;
+
+ /**
+ * 审核状态(0:未审核:1:审核通过,2:审核不通过)
+ */
+ private String reviewState;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/article/module/entity/PlayCustomArticleInfoEntity.java b/play-admin/src/main/java/com/starry/admin/modules/article/module/entity/PlayCustomArticleInfoEntity.java
new file mode 100644
index 0000000..97da070
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/article/module/entity/PlayCustomArticleInfoEntity.java
@@ -0,0 +1,53 @@
+package com.starry.admin.modules.article.module.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.starry.common.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+
+/**
+ * 陪玩点赞动态信息对象 play_custom_article_info
+ *
+ * @author admin
+ * @since 2024-05-04
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("play_custom_article_info")
+public class PlayCustomArticleInfoEntity extends BaseEntity {
+
+
+ /**
+ * UUID
+ */
+ private String id;
+
+ /**
+ * 租户ID
+ */
+ private String tenantId;
+
+ /**
+ * 动态ID
+ */
+ private String articleId;
+
+ /**
+ * 店员ID
+ */
+ private String clerkUserId;
+
+ /**
+ * 顾客ID
+ */
+ private String customUserId;
+
+ /**
+ * 点赞时间
+ */
+ private Date endorseTime;
+
+
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/article/module/vo/PlayClerkArticleQueryVo.java b/play-admin/src/main/java/com/starry/admin/modules/article/module/vo/PlayClerkArticleQueryVo.java
new file mode 100644
index 0000000..f931008
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/article/module/vo/PlayClerkArticleQueryVo.java
@@ -0,0 +1,14 @@
+package com.starry.admin.modules.article.module.vo;
+
+import com.starry.common.domain.BasePageEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * @author admin
+ * 动态信息查询对象
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class PlayClerkArticleQueryVo extends BasePageEntity {
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/article/module/vo/PlayClerkArticleReturnVo.java b/play-admin/src/main/java/com/starry/admin/modules/article/module/vo/PlayClerkArticleReturnVo.java
new file mode 100644
index 0000000..0ce75b0
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/article/module/vo/PlayClerkArticleReturnVo.java
@@ -0,0 +1,68 @@
+package com.starry.admin.modules.article.module.vo;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author admin
+ * 动态信息查询返回对象
+ */
+@Data
+public class PlayClerkArticleReturnVo {
+
+
+ /**
+ * UUID
+ */
+ private String id;
+ /**
+ * 陪玩用户ID
+ */
+ private String userId;
+
+ /**
+ * 陪玩用户昵称
+ */
+ private String nickname;
+
+ /**
+ * 陪玩用户头像
+ */
+ private String avatar;
+
+ /**
+ * 动态标题
+ */
+ private String articleTitle;
+
+ /**
+ * 动态内容类型(0:图片,1:视频)
+ */
+ private String articleType;
+
+ /**
+ * 动态内容
+ */
+ private String articleCon;
+
+ /**
+ * 发布时间
+ */
+ private Date releaseTime;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+ /**
+ * 点赞人数
+ */
+ private Long agreedQuantity;
+
+ /**
+ * 审核状态(0:未审核:1:审核通过,2:审核不通过)
+ */
+ private String reviewState;
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/article/service/IPlayClerkArticleInfoService.java b/play-admin/src/main/java/com/starry/admin/modules/article/service/IPlayClerkArticleInfoService.java
new file mode 100644
index 0000000..1b68aa3
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/article/service/IPlayClerkArticleInfoService.java
@@ -0,0 +1,65 @@
+package com.starry.admin.modules.article.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.starry.admin.modules.article.module.entity.PlayClerkArticleInfoEntity;
+import com.starry.admin.modules.article.module.vo.PlayClerkArticleQueryVo;
+import com.starry.admin.modules.article.module.vo.PlayClerkArticleReturnVo;
+
+
+/**
+ * 店员动态信息Service接口
+ *
+ * @author admin
+ * @since 2024-05-04
+ */
+public interface IPlayClerkArticleInfoService extends IService {
+ /**
+ * 查询店员动态信息
+ *
+ * @param id 店员动态信息主键
+ * @return 店员动态信息
+ */
+ PlayClerkArticleInfoEntity selectPlayClerkArticleInfoById(String id);
+
+
+ /**
+ * 查询店员动态信息列表
+ *
+ * @param vo 店员动态信息查询对象
+ * @return 店员动态信息集合
+ */
+ IPage selectPlayClerkArticleInfoByPage(PlayClerkArticleQueryVo vo);
+
+ /**
+ * 新增店员动态信息
+ *
+ * @param playClerkArticleInfo 店员动态信息
+ * @return 结果
+ */
+ boolean create(PlayClerkArticleInfoEntity playClerkArticleInfo);
+
+ /**
+ * 修改店员动态信息
+ *
+ * @param playClerkArticleInfo 店员动态信息
+ * @return 结果
+ */
+ boolean update(PlayClerkArticleInfoEntity playClerkArticleInfo);
+
+ /**
+ * 批量删除店员动态信息
+ *
+ * @param ids 需要删除的店员动态信息主键集合
+ * @return 结果
+ */
+ int deletePlayClerkArticleInfoByIds(String[] ids);
+
+ /**
+ * 删除店员动态信息信息
+ *
+ * @param id 店员动态信息主键
+ * @return 结果
+ */
+ int deletePlayClerkArticleInfoById(String id);
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/article/service/IPlayCustomArticleInfoService.java b/play-admin/src/main/java/com/starry/admin/modules/article/service/IPlayCustomArticleInfoService.java
new file mode 100644
index 0000000..7d96f49
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/article/service/IPlayCustomArticleInfoService.java
@@ -0,0 +1,69 @@
+package com.starry.admin.modules.article.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.starry.admin.modules.article.module.entity.PlayCustomArticleInfoEntity;
+
+/**
+ * 陪玩点赞动态信息Service接口
+ *
+ * @author admin
+ * @since 2024-05-04
+ */
+public interface IPlayCustomArticleInfoService extends IService {
+ /**
+ * 查询陪玩点赞动态信息
+ *
+ * @param id 陪玩点赞动态信息主键
+ * @return 陪玩点赞动态信息
+ */
+ PlayCustomArticleInfoEntity selectPlayCustomArticleInfoById(String id);
+
+ /**
+ * 查询陪玩点赞动态信息列表
+ *
+ * @param playCustomArticleInfo 陪玩点赞动态信息
+ * @return 陪玩点赞动态信息集合
+ */
+ IPage selectPlayCustomArticleInfoByPage(PlayCustomArticleInfoEntity playCustomArticleInfo);
+
+ /**
+ * 新增陪玩点赞动态信息
+ *
+ * @param playCustomArticleInfo 陪玩点赞动态信息
+ * @return 结果
+ */
+ boolean create(PlayCustomArticleInfoEntity playCustomArticleInfo);
+
+ /**
+ * 修改陪玩点赞动态信息
+ *
+ * @param playCustomArticleInfo 陪玩点赞动态信息
+ * @return 结果
+ */
+ boolean update(PlayCustomArticleInfoEntity playCustomArticleInfo);
+
+ /**
+ * 批量删除陪玩点赞动态信息
+ *
+ * @param ids 需要删除的陪玩点赞动态信息主键集合
+ * @return 结果
+ */
+ int deletePlayCustomArticleInfoByIds(String[] ids);
+
+ /**
+ * 删除陪玩点赞动态信息信息
+ *
+ * @param id 陪玩点赞动态信息主键
+ * @return 结果
+ */
+ int deletePlayCustomArticleInfoById(String id);
+
+
+ /**
+ * 根据动态ID删除点赞信息
+ *
+ * @param articleId 动态ID
+ */
+ void deleteByArticleId(String articleId);
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/article/service/impl/PlayClerkArticleInfoServiceImpl.java b/play-admin/src/main/java/com/starry/admin/modules/article/service/impl/PlayClerkArticleInfoServiceImpl.java
new file mode 100644
index 0000000..7ffc12d
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/article/service/impl/PlayClerkArticleInfoServiceImpl.java
@@ -0,0 +1,106 @@
+package com.starry.admin.modules.article.service.impl;
+
+import cn.hutool.core.util.IdUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import com.starry.admin.modules.article.mapper.PlayClerkArticleInfoMapper;
+import com.starry.admin.modules.article.module.entity.PlayClerkArticleInfoEntity;
+import com.starry.admin.modules.article.module.vo.PlayClerkArticleQueryVo;
+import com.starry.admin.modules.article.module.vo.PlayClerkArticleReturnVo;
+import com.starry.admin.modules.article.service.IPlayClerkArticleInfoService;
+import com.starry.admin.modules.clear.module.entity.PlayClerkUserInfoEntity;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Arrays;
+
+/**
+ * 店员动态信息Service业务层处理
+ *
+ * @author admin
+ * @since 2024-05-04
+ */
+@Service
+public class PlayClerkArticleInfoServiceImpl extends ServiceImpl implements IPlayClerkArticleInfoService {
+ @Resource
+ private PlayClerkArticleInfoMapper playClerkArticleInfoMapper;
+
+ /**
+ * 查询店员动态信息
+ *
+ * @param id 店员动态信息主键
+ * @return 店员动态信息
+ */
+ @Override
+ public PlayClerkArticleInfoEntity selectPlayClerkArticleInfoById(String id) {
+ return this.baseMapper.selectById(id);
+ }
+
+ /**
+ * 查询店员动态信息列表
+ *
+ * @param vo 店员动态信息查询对象
+ * @return 店员动态信息
+ */
+ @Override
+ public IPage selectPlayClerkArticleInfoByPage(PlayClerkArticleQueryVo vo) {
+ MPJLambdaWrapper lambdaQueryWrapper = new MPJLambdaWrapper()
+ //查询主表全部字段
+ .selectAll(PlayClerkArticleInfoEntity.class)
+ //陪玩用户表全部字段
+ .selectAll(PlayClerkUserInfoEntity.class)
+ //陪玩用户表
+ .leftJoin(PlayClerkUserInfoEntity.class, PlayClerkUserInfoEntity::getId, PlayClerkArticleInfoEntity::getPlayUserId);
+ return this.baseMapper.selectJoinPage(new Page<>(vo.getPageNum(), vo.getPageSize()), PlayClerkArticleReturnVo.class, lambdaQueryWrapper);
+ }
+
+ /**
+ * 新增店员动态信息
+ *
+ * @param playClerkArticleInfo 店员动态信息
+ * @return 结果
+ */
+ @Override
+ public boolean create(PlayClerkArticleInfoEntity playClerkArticleInfo) {
+ if (StrUtil.isBlankIfStr(playClerkArticleInfo.getId())) {
+ playClerkArticleInfo.setId(IdUtil.fastSimpleUUID());
+ }
+ return save(playClerkArticleInfo);
+ }
+
+ /**
+ * 修改店员动态信息
+ *
+ * @param playClerkArticleInfo 店员动态信息
+ * @return 结果
+ */
+ @Override
+ public boolean update(PlayClerkArticleInfoEntity playClerkArticleInfo) {
+ return updateById(playClerkArticleInfo);
+ }
+
+ /**
+ * 批量删除店员动态信息
+ *
+ * @param ids 需要删除的店员动态信息主键
+ * @return 结果
+ */
+ @Override
+ public int deletePlayClerkArticleInfoByIds(String[] ids) {
+ return playClerkArticleInfoMapper.deleteBatchIds(Arrays.asList(ids));
+ }
+
+ /**
+ * 删除店员动态信息信息
+ *
+ * @param id 店员动态信息主键
+ * @return 结果
+ */
+ @Override
+ public int deletePlayClerkArticleInfoById(String id) {
+ return playClerkArticleInfoMapper.deleteById(id);
+ }
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/article/service/impl/PlayCustomArticleInfoServiceImpl.java b/play-admin/src/main/java/com/starry/admin/modules/article/service/impl/PlayCustomArticleInfoServiceImpl.java
new file mode 100644
index 0000000..d92f5a4
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/article/service/impl/PlayCustomArticleInfoServiceImpl.java
@@ -0,0 +1,105 @@
+package com.starry.admin.modules.article.service.impl;
+
+import cn.hutool.core.util.IdUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.starry.admin.modules.article.mapper.PlayCustomArticleInfoMapper;
+import com.starry.admin.modules.article.module.entity.PlayCustomArticleInfoEntity;
+import com.starry.admin.modules.article.service.IPlayCustomArticleInfoService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Arrays;
+
+
+/**
+ * 陪玩点赞动态信息Service业务层处理
+ *
+ * @author admin
+ * @since 2024-05-04
+ */
+@Service
+public class PlayCustomArticleInfoServiceImpl extends ServiceImpl implements IPlayCustomArticleInfoService {
+ @Resource
+ private PlayCustomArticleInfoMapper playCustomArticleInfoMapper;
+
+ /**
+ * 查询陪玩点赞动态信息
+ *
+ * @param id 陪玩点赞动态信息主键
+ * @return 陪玩点赞动态信息
+ */
+ @Override
+ public PlayCustomArticleInfoEntity selectPlayCustomArticleInfoById(String id) {
+ return this.baseMapper.selectById(id);
+ }
+
+ /**
+ * 查询陪玩点赞动态信息列表
+ *
+ * @param playCustomArticleInfo 陪玩点赞动态信息
+ * @return 陪玩点赞动态信息
+ */
+ @Override
+ public IPage selectPlayCustomArticleInfoByPage(PlayCustomArticleInfoEntity playCustomArticleInfo) {
+ Page page = new Page<>(1, 10);
+ return this.baseMapper.selectPage(page, new LambdaQueryWrapper<>());
+ }
+
+ /**
+ * 新增陪玩点赞动态信息
+ *
+ * @param playCustomArticleInfo 陪玩点赞动态信息
+ * @return 结果
+ */
+ @Override
+ public boolean create(PlayCustomArticleInfoEntity playCustomArticleInfo) {
+ if (StrUtil.isBlankIfStr(playCustomArticleInfo.getId())) {
+ playCustomArticleInfo.setId(IdUtil.fastSimpleUUID());
+ }
+ return save(playCustomArticleInfo);
+ }
+
+ /**
+ * 修改陪玩点赞动态信息
+ *
+ * @param playCustomArticleInfo 陪玩点赞动态信息
+ * @return 结果
+ */
+ @Override
+ public boolean update(PlayCustomArticleInfoEntity playCustomArticleInfo) {
+ return updateById(playCustomArticleInfo);
+ }
+
+ /**
+ * 批量删除陪玩点赞动态信息
+ *
+ * @param ids 需要删除的陪玩点赞动态信息主键
+ * @return 结果
+ */
+ @Override
+ public int deletePlayCustomArticleInfoByIds(String[] ids) {
+ return playCustomArticleInfoMapper.deleteBatchIds(Arrays.asList(ids));
+ }
+
+ /**
+ * 删除陪玩点赞动态信息信息
+ *
+ * @param id 陪玩点赞动态信息主键
+ * @return 结果
+ */
+ @Override
+ public int deletePlayCustomArticleInfoById(String id) {
+ return playCustomArticleInfoMapper.deleteById(id);
+ }
+
+ @Override
+ public void deleteByArticleId(String articleId) {
+ LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>();
+ lambdaQueryWrapper.eq(PlayCustomArticleInfoEntity::getArticleId, articleId);
+ this.baseMapper.delete(lambdaQueryWrapper);
+ }
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/balance/controller/PlayBalanceDetailsInfoController.java b/play-admin/src/main/java/com/starry/admin/modules/balance/controller/PlayBalanceDetailsInfoController.java
new file mode 100644
index 0000000..92b1bbf
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/balance/controller/PlayBalanceDetailsInfoController.java
@@ -0,0 +1,77 @@
+package com.starry.admin.modules.balance.controller;
+
+import com.starry.admin.modules.balance.module.entity.PlayBalanceDetailsInfoEntity;
+import com.starry.admin.modules.balance.module.vo.PlayBalanceDetailsQueryVo;
+import com.starry.admin.modules.balance.service.IPlayBalanceDetailsInfoService;
+import com.starry.common.annotation.Log;
+import com.starry.common.enums.BusinessType;
+import com.starry.common.result.R;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+/**
+ * 余额明细Controller
+ *
+ * @author admin
+ * @since 2024-04-30
+ */
+@RestController
+@RequestMapping("/balance/details")
+public class PlayBalanceDetailsInfoController {
+ @Resource
+ private IPlayBalanceDetailsInfoService playBalanceDetailsInfoService;
+
+
+ /**
+ * 查询余额明细列表
+ */
+ @PostMapping("/list")
+ public R list(@RequestBody PlayBalanceDetailsQueryVo vo) {
+ return R.ok(playBalanceDetailsInfoService.selectByPage(vo));
+ }
+
+ /**
+ * 获取余额明细详细信息
+ */
+ @GetMapping(value = "/{id}")
+ public R getInfo(@PathVariable("id") String id) {
+ return R.ok(playBalanceDetailsInfoService.selectPlayBalanceDetailsInfoById(id));
+ }
+
+ /**
+ * 新增余额明细
+ */
+ @Log(title = "余额明细", businessType = BusinessType.INSERT)
+ @PostMapping("/create")
+ public R create(@RequestBody PlayBalanceDetailsInfoEntity playBalanceDetailsInfo) {
+ boolean success = playBalanceDetailsInfoService.create(playBalanceDetailsInfo);
+ if (success) {
+ return R.ok();
+ }
+ return R.error("添加失败");
+ }
+
+ /**
+ * 修改余额明细
+ */
+ @Log(title = "余额明细", businessType = BusinessType.UPDATE)
+ @PostMapping(value = "/update/{id}")
+ public R update(@PathVariable String id, @RequestBody PlayBalanceDetailsInfoEntity playBalanceDetailsInfo) {
+ playBalanceDetailsInfo.setId(id);
+ boolean success = playBalanceDetailsInfoService.update(playBalanceDetailsInfo);
+ if (success) {
+ return R.ok();
+ }
+ return R.error("修改失败");
+ }
+
+ /**
+ * 删除余额明细
+ */
+ @Log(title = "余额明细", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public R remove(@PathVariable String[] ids) {
+ return R.ok(playBalanceDetailsInfoService.deletePlayBalanceDetailsInfoByIds(ids));
+ }
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/balance/mapper/PlayBalanceDetailsInfoMapper.java b/play-admin/src/main/java/com/starry/admin/modules/balance/mapper/PlayBalanceDetailsInfoMapper.java
new file mode 100644
index 0000000..215f4c5
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/balance/mapper/PlayBalanceDetailsInfoMapper.java
@@ -0,0 +1,16 @@
+package com.starry.admin.modules.balance.mapper;
+
+
+import com.github.yulichang.base.MPJBaseMapper;
+import com.starry.admin.modules.balance.module.entity.PlayBalanceDetailsInfoEntity;
+
+/**
+ * 余额明细Mapper接口
+ *
+ * @author admin
+ * @since 2024-04-30
+ */
+public interface PlayBalanceDetailsInfoMapper extends MPJBaseMapper {
+
+
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/balance/module/entity/PlayBalanceDetailsInfoEntity.java b/play-admin/src/main/java/com/starry/admin/modules/balance/module/entity/PlayBalanceDetailsInfoEntity.java
new file mode 100644
index 0000000..73fbe0c
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/balance/module/entity/PlayBalanceDetailsInfoEntity.java
@@ -0,0 +1,72 @@
+package com.starry.admin.modules.balance.module.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.starry.common.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 余额明细对象 play_balance_details_info
+ *
+ * @author admin
+ * @since 2024-04-30
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("play_balance_details_info")
+public class PlayBalanceDetailsInfoEntity extends BaseEntity {
+
+
+ /**
+ * UUID
+ */
+ private String id;
+
+ /**
+ * 租户ID
+ */
+ private String tenantId;
+
+ /**
+ * 用户ID
+ */
+ private String userId;
+
+ /**
+ * 用户类型[0:陪玩;1:顾客]
+ */
+ private String userType;
+
+ /**
+ * 操作前余额
+ */
+ private BigDecimal balanceBeforeOperation;
+
+ /**
+ * 操作后余额
+ */
+ private BigDecimal balanceAfterOperation;
+
+ /**
+ * 操作类型
+ */
+ private String operationType;
+
+ /**
+ * 操作时间
+ */
+ private Date operationTime;
+
+ /**
+ * 操作金额
+ */
+ private BigDecimal balanceMoney;
+
+ /**
+ * 订单ID
+ */
+ private String orderId;
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/balance/module/vo/PlayBalanceDetailsQueryVo.java b/play-admin/src/main/java/com/starry/admin/modules/balance/module/vo/PlayBalanceDetailsQueryVo.java
new file mode 100644
index 0000000..6e62960
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/balance/module/vo/PlayBalanceDetailsQueryVo.java
@@ -0,0 +1,10 @@
+package com.starry.admin.modules.balance.module.vo;
+
+import com.starry.common.domain.BasePageEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class PlayBalanceDetailsQueryVo extends BasePageEntity {
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/balance/module/vo/PlayBalanceDetailsReturnVo.java b/play-admin/src/main/java/com/starry/admin/modules/balance/module/vo/PlayBalanceDetailsReturnVo.java
new file mode 100644
index 0000000..3c75bbd
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/balance/module/vo/PlayBalanceDetailsReturnVo.java
@@ -0,0 +1,91 @@
+package com.starry.admin.modules.balance.module.vo;
+
+import com.starry.common.domain.BasePageEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class PlayBalanceDetailsReturnVo extends BasePageEntity {
+
+ /**
+ * UUID
+ */
+ private String id;
+
+ /**
+ * 操作前余额
+ */
+ private BigDecimal balanceBeforeOperation;
+
+ /**
+ * 操作后余额
+ */
+ private BigDecimal balanceAfterOperation;
+
+ /**
+ * 操作类型
+ */
+ private String operationType;
+
+ /**
+ * 操作时间
+ */
+ private Date operationTime;
+
+ /**
+ * 操作金额
+ */
+ private BigDecimal balanceMoney;
+
+ /**
+ * 订单ID
+ */
+ private String orderId;
+
+
+ /**
+ * 订单金额
+ */
+ private BigDecimal orderMoney;
+
+ /**
+ * 支付方式,0:余额支付,1:微信支付,2:支付宝支付
+ */
+ private String payMethod;
+
+ /**
+ * 赠送金额
+ */
+ private BigDecimal giftAmount;
+
+
+ /**
+ * 订单最终金额
+ */
+ private BigDecimal finalAmount;
+
+ /**
+ * 订单备注
+ */
+ private String orderRemark;
+
+
+ /**
+ * 顾客Id
+ */
+ private String customUserId;
+
+ /**
+ * 顾客昵称
+ */
+ private String nickname;
+
+ /**
+ * 头像
+ */
+ private String avatar;
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/balance/service/IPlayBalanceDetailsInfoService.java b/play-admin/src/main/java/com/starry/admin/modules/balance/service/IPlayBalanceDetailsInfoService.java
new file mode 100644
index 0000000..5821a25
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/balance/service/IPlayBalanceDetailsInfoService.java
@@ -0,0 +1,88 @@
+package com.starry.admin.modules.balance.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.starry.admin.modules.balance.module.entity.PlayBalanceDetailsInfoEntity;
+import com.starry.admin.modules.balance.module.vo.PlayBalanceDetailsQueryVo;
+import com.starry.admin.modules.balance.module.vo.PlayBalanceDetailsReturnVo;
+
+import java.math.BigDecimal;
+
+/**
+ * 余额明细Service接口
+ *
+ * @author admin
+ * @since 2024-04-30
+ */
+public interface IPlayBalanceDetailsInfoService extends IService {
+ /**
+ * 查询余额明细
+ *
+ * @param id 余额明细主键
+ * @return 余额明细
+ */
+ PlayBalanceDetailsInfoEntity selectPlayBalanceDetailsInfoById(String id);
+
+
+ /**
+ * 查询余额明细列表
+ *
+ * @param vo 余额明细查询对象
+ * @return 余额明细集合
+ */
+ IPage selectByPage(PlayBalanceDetailsQueryVo vo);
+
+
+ /**
+ * 查询余额明细列表
+ *
+ * @param playBalanceDetailsInfo 余额明细
+ * @return 余额明细集合
+ */
+ IPage selectPlayBalanceDetailsInfoByPage(PlayBalanceDetailsInfoEntity playBalanceDetailsInfo);
+
+
+ /**
+ * 新增余额明细信息
+ *
+ * @param userType 用户类型[0:陪玩;1:顾客]
+ * @param userId 用户ID
+ * @param balanceBeforeOperation 操作前余额
+ * @param balanceAfterOperation 操作后余额
+ * @param operationType 操作类型
+ * @param balanceMoney 操作金额
+ */
+ void create(String userType, String userId, BigDecimal balanceBeforeOperation, BigDecimal balanceAfterOperation, String operationType, BigDecimal balanceMoney);
+
+ /**
+ * 新增余额明细
+ *
+ * @param playBalanceDetailsInfo 余额明细
+ * @return 结果
+ */
+ boolean create(PlayBalanceDetailsInfoEntity playBalanceDetailsInfo);
+
+ /**
+ * 修改余额明细
+ *
+ * @param playBalanceDetailsInfo 余额明细
+ * @return 结果
+ */
+ boolean update(PlayBalanceDetailsInfoEntity playBalanceDetailsInfo);
+
+ /**
+ * 批量删除余额明细
+ *
+ * @param ids 需要删除的余额明细主键集合
+ * @return 结果
+ */
+ int deletePlayBalanceDetailsInfoByIds(String[] ids);
+
+ /**
+ * 删除余额明细信息
+ *
+ * @param id 余额明细主键
+ * @return 结果
+ */
+ int deletePlayBalanceDetailsInfoById(String id);
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/balance/service/impl/PlayBalanceDetailsInfoServiceImpl.java b/play-admin/src/main/java/com/starry/admin/modules/balance/service/impl/PlayBalanceDetailsInfoServiceImpl.java
new file mode 100644
index 0000000..d102786
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/balance/service/impl/PlayBalanceDetailsInfoServiceImpl.java
@@ -0,0 +1,140 @@
+package com.starry.admin.modules.balance.service.impl;
+
+import cn.hutool.core.util.IdUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import com.starry.admin.modules.balance.mapper.PlayBalanceDetailsInfoMapper;
+import com.starry.admin.modules.balance.module.entity.PlayBalanceDetailsInfoEntity;
+import com.starry.admin.modules.balance.module.vo.PlayBalanceDetailsQueryVo;
+import com.starry.admin.modules.balance.module.vo.PlayBalanceDetailsReturnVo;
+import com.starry.admin.modules.balance.service.IPlayBalanceDetailsInfoService;
+import com.starry.admin.modules.custom.module.entity.PlayCustomUserInfoEntity;
+import com.starry.admin.modules.order.module.entity.PlayOrderInfoEntity;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.util.Arrays;
+import java.util.Date;
+
+/**
+ * 余额明细Service业务层处理
+ *
+ * @author admin
+ * @since 2024-04-30
+ */
+@Service
+public class PlayBalanceDetailsInfoServiceImpl extends ServiceImpl implements IPlayBalanceDetailsInfoService {
+ @Resource
+ private PlayBalanceDetailsInfoMapper playBalanceDetailsInfoMapper;
+
+ /**
+ * 查询余额明细
+ *
+ * @param id 余额明细主键
+ * @return 余额明细
+ */
+ @Override
+ public PlayBalanceDetailsInfoEntity selectPlayBalanceDetailsInfoById(String id) {
+ return this.baseMapper.selectById(id);
+ }
+
+
+ @Override
+ public IPage selectByPage(PlayBalanceDetailsQueryVo vo) {
+ MPJLambdaWrapper lambdaQueryWrapper = new MPJLambdaWrapper()
+ //查询主表全部字段
+ .selectAll(PlayBalanceDetailsInfoEntity.class)
+ //查询顾客表
+ .selectAll(PlayCustomUserInfoEntity.class)
+ //查询订单表全部字段
+ .selectAll(PlayOrderInfoEntity.class)
+ .selectAs(PlayOrderInfoEntity::getId, "orderId")
+ .selectAs(PlayOrderInfoEntity::getRemark, "orderId")
+ .leftJoin(PlayOrderInfoEntity.class, PlayOrderInfoEntity::getId, PlayBalanceDetailsInfoEntity::getOrderId)
+ .selectAs(PlayCustomUserInfoEntity::getId, "customUserId")
+ .leftJoin(PlayCustomUserInfoEntity.class, PlayCustomUserInfoEntity::getId, PlayBalanceDetailsInfoEntity::getUserId);
+ lambdaQueryWrapper.orderByDesc(PlayBalanceDetailsInfoEntity::getUserId);
+ lambdaQueryWrapper.orderByDesc(PlayBalanceDetailsInfoEntity::getOperationTime);
+ return this.baseMapper.selectJoinPage(new Page<>(vo.getPageNum(), vo.getPageSize()), PlayBalanceDetailsReturnVo.class, lambdaQueryWrapper);
+
+ }
+
+ /**
+ * 查询余额明细列表
+ *
+ * @param playBalanceDetailsInfo 余额明细
+ * @return 余额明细
+ */
+ @Override
+ public IPage selectPlayBalanceDetailsInfoByPage(PlayBalanceDetailsInfoEntity playBalanceDetailsInfo) {
+ Page page = new Page<>(1, 10);
+ return this.baseMapper.selectPage(page, new LambdaQueryWrapper<>());
+ }
+
+
+ @Override
+ public void create(String userType, String userId, BigDecimal balanceBeforeOperation, BigDecimal balanceAfterOperation, String operationType, BigDecimal balanceMoney) {
+ PlayBalanceDetailsInfoEntity entity = new PlayBalanceDetailsInfoEntity();
+ entity.setId(IdUtil.fastSimpleUUID());
+ entity.setUserType(userType);
+ entity.setUserId(userId);
+ entity.setBalanceBeforeOperation(balanceBeforeOperation);
+ entity.setBalanceAfterOperation(balanceAfterOperation);
+ entity.setOperationType(operationType);
+ entity.setBalanceMoney(balanceMoney);
+ entity.setOperationTime(new Date());
+ this.baseMapper.insert(entity);
+ }
+
+ /**
+ * 新增余额明细
+ *
+ * @param playBalanceDetailsInfo 余额明细
+ * @return 结果
+ */
+ @Override
+ public boolean create(PlayBalanceDetailsInfoEntity playBalanceDetailsInfo) {
+ if (StrUtil.isBlankIfStr(playBalanceDetailsInfo.getId())) {
+ playBalanceDetailsInfo.setId(IdUtil.fastSimpleUUID());
+ }
+ return save(playBalanceDetailsInfo);
+ }
+
+ /**
+ * 修改余额明细
+ *
+ * @param playBalanceDetailsInfo 余额明细
+ * @return 结果
+ */
+ @Override
+ public boolean update(PlayBalanceDetailsInfoEntity playBalanceDetailsInfo) {
+ return updateById(playBalanceDetailsInfo);
+ }
+
+ /**
+ * 批量删除余额明细
+ *
+ * @param ids 需要删除的余额明细主键
+ * @return 结果
+ */
+ @Override
+ public int deletePlayBalanceDetailsInfoByIds(String[] ids) {
+ return playBalanceDetailsInfoMapper.deleteBatchIds(Arrays.asList(ids));
+ }
+
+ /**
+ * 删除余额明细信息
+ *
+ * @param id 余额明细主键
+ * @return 结果
+ */
+ @Override
+ public int deletePlayBalanceDetailsInfoById(String id) {
+ return playBalanceDetailsInfoMapper.deleteById(id);
+ }
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/clear/controller/PlayClerkCommodityController.java b/play-admin/src/main/java/com/starry/admin/modules/clear/controller/PlayClerkCommodityController.java
index 89080a3..a95469a 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/clear/controller/PlayClerkCommodityController.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/clear/controller/PlayClerkCommodityController.java
@@ -2,14 +2,12 @@ package com.starry.admin.modules.clear.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.starry.admin.modules.clear.module.entity.PlayClerkCommodityEntity;
-import com.starry.admin.modules.clear.module.vo.PlayClerkCommodityEditVo;
import com.starry.admin.modules.clear.module.vo.PlayClerkCommodityQueryVo;
import com.starry.admin.modules.clear.service.IPlayClerkCommodityService;
import com.starry.common.annotation.Log;
import com.starry.common.enums.BusinessType;
import com.starry.common.result.R;
import com.starry.common.utils.ConvertUtil;
-import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@@ -68,14 +66,6 @@ public class PlayClerkCommodityController {
}
- @Log(title = "启停陪玩服务项目", businessType = BusinessType.UPDATE)
- @PostMapping(value = "/startStopClerkItem")
- public R startStopClerkItem(@Validated @RequestBody PlayClerkCommodityEditVo vo) {
- playClerkCommodityService.startStopClerkItem(vo.getCommodityType(), vo.getEnablingState());
- return R.ok("成功");
- }
-
-
/**
* 修改陪玩服务项目
*/
diff --git a/play-admin/src/main/java/com/starry/admin/modules/clear/controller/PlayClerkLevelInfoController.java b/play-admin/src/main/java/com/starry/admin/modules/clear/controller/PlayClerkLevelInfoController.java
index 3073523..17d3625 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/clear/controller/PlayClerkLevelInfoController.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/clear/controller/PlayClerkLevelInfoController.java
@@ -1,5 +1,6 @@
package com.starry.admin.modules.clear.controller;
+import com.starry.admin.common.exception.CustomException;
import com.starry.admin.modules.clear.module.entity.PlayClerkLevelInfoEntity;
import com.starry.admin.modules.clear.module.vo.PlayClerkLevelAddVo;
import com.starry.admin.modules.clear.module.vo.PlayClerkLevelEditVo;
@@ -78,6 +79,9 @@ public class PlayClerkLevelInfoController {
@DeleteMapping("delMaxLevel")
public R remove() {
int level = playClerkLevelInfoService.selectMaxLevel();
+ if (level <= 1) {
+ throw new CustomException("最后一级,不允许删除");
+ }
playClerkLevelInfoService.delMaxLevelByLevel(level);
return R.ok();
}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/clear/controller/PlayClerkUserInfoController.java b/play-admin/src/main/java/com/starry/admin/modules/clear/controller/PlayClerkUserInfoController.java
index 98a242e..3d6440f 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/clear/controller/PlayClerkUserInfoController.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/clear/controller/PlayClerkUserInfoController.java
@@ -5,10 +5,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.starry.admin.modules.clear.module.entity.PlayClerkLevelInfoEntity;
import com.starry.admin.modules.clear.module.entity.PlayClerkUserInfoEntity;
import com.starry.admin.modules.clear.module.entity.PlayClerkUserInfoQueryVo;
-import com.starry.admin.modules.clear.module.vo.PlayClerkLevelQueryReturnVo;
-import com.starry.admin.modules.clear.module.vo.PlayClerkUserAddToWxVo;
-import com.starry.admin.modules.clear.module.vo.PlayClerkUserAddVo;
-import com.starry.admin.modules.clear.module.vo.PlayClerkUserEditVo;
+import com.starry.admin.modules.clear.module.entity.PlayClerkUserListResultVo;
+import com.starry.admin.modules.clear.module.vo.*;
import com.starry.admin.modules.clear.service.IPlayClerkCommodityService;
import com.starry.admin.modules.clear.service.IPlayClerkLevelInfoService;
import com.starry.admin.modules.clear.service.IPlayClerkUserInfoService;
@@ -57,7 +55,7 @@ public class PlayClerkUserInfoController {
*/
@PostMapping("listByPage")
public R listByPage(PlayClerkUserInfoQueryVo vo) {
- IPage list = playClerkUserInfoService.selectPlayClerkUserInfoByPage(vo);
+ IPage list = playClerkUserInfoService.selectPlayClerkUserInfoByPage(vo);
return R.ok(list);
}
@@ -67,7 +65,7 @@ public class PlayClerkUserInfoController {
*/
@GetMapping("/list")
public R list(PlayClerkUserInfoQueryVo vo) {
- IPage list = playClerkUserInfoService.selectPlayClerkUserInfoByPage(vo);
+ IPage list = playClerkUserInfoService.selectPlayClerkUserInfoByPage(vo);
return R.ok(list);
}
@@ -131,6 +129,21 @@ public class PlayClerkUserInfoController {
return R.error("修改失败");
}
+
+ /**
+ * 修改店员状态
+ */
+ @Log(title = "店员", businessType = BusinessType.UPDATE)
+ @PostMapping(value = "/updateState")
+ public R updateState(@Validated @RequestBody PlayClerkUserStateEditVo vo) {
+ PlayClerkUserInfoEntity entity = ConvertUtil.entityToVo(vo, PlayClerkUserInfoEntity.class);
+ boolean success = playClerkUserInfoService.update(entity);
+ if (success) {
+ return R.ok();
+ }
+ return R.error("修改失败");
+ }
+
/**
* 删除店员
*/
diff --git a/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClarkUserEvaluateInfoEntity.java b/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClarkUserEvaluateInfoEntity.java
index bef019c..f941d81 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClarkUserEvaluateInfoEntity.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClarkUserEvaluateInfoEntity.java
@@ -65,6 +65,11 @@ public class PlayClarkUserEvaluateInfoEntity {
*/
private String commodityUnit;
+ /**
+ * 点赞数
+ */
+ public Integer likeCount;
+
public PlayClarkUserEvaluateInfoEntity(String id, String evaluatorId, String evaluatorUsername, String evaluatorAvatar, String con, Date evaluateTime, String orderId, String clarkUsername, String commodityId, String commodityName, String commodityUnit) {
this.id = id;
@@ -79,4 +84,20 @@ public class PlayClarkUserEvaluateInfoEntity {
this.commodityName = commodityName;
this.commodityUnit = commodityUnit;
}
+
+ public PlayClarkUserEvaluateInfoEntity(String id, String evaluatorId, String evaluatorUsername, String evaluatorAvatar, String con, Date evaluateTime, String orderId, String clarkUsername, String commodityId, String commodityName, String commodityUnit, int likeCount) {
+ this.id = id;
+ this.evaluatorId = evaluatorId;
+ this.evaluatorUsername = evaluatorUsername;
+ this.evaluatorAvatar = evaluatorAvatar;
+ this.con = con;
+ this.evaluateTime = evaluateTime;
+ this.orderId = orderId;
+ this.clarkUsername = clarkUsername;
+ this.commodityId = commodityId;
+ this.commodityName = commodityName;
+ this.commodityUnit = commodityUnit;
+ this.likeCount = likeCount;
+ }
+
}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClerkCommodityEntity.java b/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClerkCommodityEntity.java
index 5a50335..76f0cc5 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClerkCommodityEntity.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClerkCommodityEntity.java
@@ -5,6 +5,8 @@ import com.starry.common.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
+import java.math.BigDecimal;
+
/**
* 陪玩服务项目对象 play_clerk_commodity
*
@@ -13,7 +15,7 @@ import lombok.EqualsAndHashCode;
*/
@Data
@EqualsAndHashCode(callSuper = false)
-@TableName("play_clerk_commodity")
+@TableName("play_clerk_commodity_info")
public class PlayClerkCommodityEntity extends BaseEntity {
@@ -50,8 +52,13 @@ public class PlayClerkCommodityEntity extends BaseEntity gifts;
+ private List gifts;
/**
* 服务项目
diff --git a/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClerkUserInfoEntity.java b/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClerkUserInfoEntity.java
index 56c8f39..433a890 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClerkUserInfoEntity.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClerkUserInfoEntity.java
@@ -8,6 +8,7 @@ import com.starry.common.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
+import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
@@ -38,6 +39,11 @@ public class PlayClerkUserInfoEntity extends BaseEntity
*/
private String phone;
+ /**
+ * 微信号码
+ */
+ private String weiChatCode;
+
/**
* 陪玩用户ID
*/
@@ -58,6 +64,7 @@ public class PlayClerkUserInfoEntity extends BaseEntity
*/
private String levelId;
+
/**
* 店员类型
*/
@@ -120,9 +127,9 @@ public class PlayClerkUserInfoEntity extends BaseEntity
private String city;
/**
- * 账户余额(单位分)
+ * 账户余额
*/
- private String accountBalance;
+ private BigDecimal accountBalance;
/**
* 备注
@@ -172,10 +179,10 @@ public class PlayClerkUserInfoEntity extends BaseEntity
/**
* 随机接单状态【1:允许,0:禁止】
*/
- private String randomOrder;
+ private String randomOrderState;
/**
- * 店员状态(0:不是陪玩,1:陪玩)
+ * 店员状态(0:不是陪玩,1:陪玩,2:资料审核中)
*/
private String clerkState;
/**
diff --git a/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClerkUserInfoQueryVo.java b/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClerkUserInfoQueryVo.java
index afeded3..0121a39 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClerkUserInfoQueryVo.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClerkUserInfoQueryVo.java
@@ -24,7 +24,6 @@ public class PlayClerkUserInfoQueryVo extends BasePageEntity {
*/
private String levelId;
-
/**
* 店员类型
*/
@@ -45,10 +44,15 @@ public class PlayClerkUserInfoQueryVo extends BasePageEntity {
*/
private String listingState;
+ /**
+ * 是否推荐状态(1:已推荐,0:未推荐)
+ */
+ private String recommendationState;
+
/**
* 员工状态【1:是陪玩,0:不是陪玩】
*/
- private String clerkState;
+ private String clerkState = "1";
/**
* 手机号码
@@ -56,5 +60,4 @@ public class PlayClerkUserInfoQueryVo extends BasePageEntity {
private String phone;
-
}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClerkUserListResultVo.java b/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClerkUserListResultVo.java
index d93c33a..56a0240 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClerkUserListResultVo.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClerkUserListResultVo.java
@@ -45,6 +45,12 @@ public class PlayClerkUserListResultVo {
*/
private String audio;
+
+ /**
+ * 星座
+ */
+ private String constellation;
+
/**
* 标签
*/
@@ -65,6 +71,16 @@ public class PlayClerkUserListResultVo {
*/
private Integer age;
+ /**
+ * 所在省份
+ */
+ private String province;
+
+ /**
+ * 所在城市
+ */
+ private String city;
+
/**
* 关注(0:未关注,1:已关注)
@@ -76,9 +92,43 @@ public class PlayClerkUserListResultVo {
*/
private String onlineState;
+ /**
+ * 上架状态【1:上架,0:下架】
+ */
+ private String listingState;
+
+
+ /**
+ * 实名状态【1:已实名,0:未实名】
+ */
+ private String realState;
+
+ /**
+ * 是否必须实名【1:必须实名,0:非必须实名,2:跟随店铺设置】
+ */
+ private String mandatoryRealState;
+
+ /**
+ * 随机接单状态【1:允许,0:禁止】
+ */
+ private String randomOrderState;
+
+
/**
* 服务项目
*/
private List commodity;
+ /**
+ * 地址
+ */
+ private String address;
+
+
+ /**
+ * 最低消费
+ */
+ private String latestConsumption = "最低1船票";
+
+
}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayGiftInfoEntity.java b/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayGiftInfoVo.java
similarity index 81%
rename from play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayGiftInfoEntity.java
rename to play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayGiftInfoVo.java
index 77f0488..19fccd5 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayGiftInfoEntity.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayGiftInfoVo.java
@@ -8,7 +8,7 @@ import lombok.Data;
*/
@Data
-public class PlayGiftInfoEntity {
+public class PlayGiftInfoVo {
/**
@@ -37,7 +37,7 @@ public class PlayGiftInfoEntity {
*/
private String state;
- public PlayGiftInfoEntity(String id, String name, String url, Integer number, String state) {
+ public PlayGiftInfoVo(String id, String name, String url, Integer number, String state) {
this.id = id;
this.name = name;
this.url = url;
diff --git a/play-admin/src/main/java/com/starry/admin/modules/clear/module/vo/PlayClerkUserAddVo.java b/play-admin/src/main/java/com/starry/admin/modules/clear/module/vo/PlayClerkUserAddVo.java
index 6e4cc64..86c7221 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/clear/module/vo/PlayClerkUserAddVo.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/clear/module/vo/PlayClerkUserAddVo.java
@@ -97,4 +97,5 @@ public class PlayClerkUserAddVo {
*/
private String remark;
+
}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/clear/module/vo/PlayClerkUserStateEditVo.java b/play-admin/src/main/java/com/starry/admin/modules/clear/module/vo/PlayClerkUserStateEditVo.java
new file mode 100644
index 0000000..19ee1ab
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/clear/module/vo/PlayClerkUserStateEditVo.java
@@ -0,0 +1,58 @@
+package com.starry.admin.modules.clear.module.vo;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+
+@Data
+public class PlayClerkUserStateEditVo {
+
+ /**
+ * id
+ */
+ @NotBlank(message = "id不能为空")
+ private String id;
+
+ /**
+ * 是否推荐状态(1:已推荐,0:未推荐)
+ */
+ private String recommendationState;
+
+ /**
+ * 是否置顶状态(1:已置顶,0:未置顶)
+ */
+ private String pinToTopState;
+
+ /**
+ * 在线状态【1:在线,0:离线】
+ */
+ private String onlineState;
+
+ /**
+ * 上架状态【1:上架,0:下架】
+ */
+ private String listingState;
+
+ /**
+ * 显示状态【1:显示,0:隐藏】
+ */
+ private String displayState;
+
+ /**
+ * 实名状态【1:已实名,0:未实名】
+ */
+ private String realState;
+
+ /**
+ * 是否必须实名【1:必须实名,0:非必须实名】
+ */
+ private String mandatoryRealState;
+
+ /**
+ * 随机接单状态【1:允许,0:禁止】
+ */
+ private String randomOrderState;
+
+
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/clear/service/IPlayClerkCommodityService.java b/play-admin/src/main/java/com/starry/admin/modules/clear/service/IPlayClerkCommodityService.java
index c0f54e2..b2e3e0e 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/clear/service/IPlayClerkCommodityService.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/clear/service/IPlayClerkCommodityService.java
@@ -23,6 +23,22 @@ public interface IPlayClerkCommodityService extends IService getClerkCommodityList(String userId);
+
+ /**
+ * 根据用户ID,查询当前用户的服务项目类型
+ *
+ * @param userId 用户ID
+ * @return List
+ */
+ List selectCommodityTypeByUser(String userId);
+
/**
* 根据用户ID,查询当前用户的服务项目
*
@@ -42,8 +58,9 @@ public interface IPlayClerkCommodityService extends IService {
+
+
/**
+ * 获取新增陪玩时,默认最低等级ID
+ * @return PlayClerkLevelInfoEntity
+ */
+ PlayClerkLevelInfoEntity getDefaultLevel();
+ /**
+ *
* 查询店员等级
*
* @param id 店员等级主键
diff --git a/play-admin/src/main/java/com/starry/admin/modules/clear/service/IPlayClerkUserInfoService.java b/play-admin/src/main/java/com/starry/admin/modules/clear/service/IPlayClerkUserInfoService.java
index 308028f..5196b1b 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/clear/service/IPlayClerkUserInfoService.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/clear/service/IPlayClerkUserInfoService.java
@@ -4,8 +4,11 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.starry.admin.modules.clear.module.entity.PlayClerkUserInfoEntity;
import com.starry.admin.modules.clear.module.entity.PlayClerkUserInfoQueryVo;
+import com.starry.admin.modules.clear.module.entity.PlayClerkUserListResultVo;
import com.starry.admin.modules.weichat.entity.PlayClerkUserLoginResponseVo;
+import java.math.BigDecimal;
+
/**
* 店员Service接口
@@ -48,7 +51,7 @@ public interface IPlayClerkUserInfoService extends IService selectByPage(PlayClerkUserInfoQueryVo vo, String customUserId);
+
/**
* 查询店员列表
*
* @param vo 店员查询对象
* @return 店员集合
*/
- IPage selectPlayClerkUserInfoByPage(PlayClerkUserInfoQueryVo vo);
+ IPage selectPlayClerkUserInfoByPage(PlayClerkUserInfoQueryVo vo);
/**
* 新增店员
diff --git a/play-admin/src/main/java/com/starry/admin/modules/clear/service/impl/PlayClerkCommodityServiceImpl.java b/play-admin/src/main/java/com/starry/admin/modules/clear/service/impl/PlayClerkCommodityServiceImpl.java
index 2c4c62c..1ad48b3 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/clear/service/impl/PlayClerkCommodityServiceImpl.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/clear/service/impl/PlayClerkCommodityServiceImpl.java
@@ -15,8 +15,8 @@ import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Arrays;
-import java.util.Collections;
import java.util.List;
+import java.util.stream.Collectors;
/**
* 陪玩服务项目Service业务层处理
@@ -35,14 +35,20 @@ public class PlayClerkCommodityServiceImpl extends ServiceImpl lambdaQueryWrapper = new LambdaQueryWrapper<>();
+ lambdaQueryWrapper.eq(PlayClerkCommodityEntity::getPlayUserId, userId);
+ this.baseMapper.delete(lambdaQueryWrapper);
+ //根据当前租户的服务项目,生成陪玩项目数据
for (PlayCommodityInfoEntity commodityInfo : playCommodityInfoService.selectAll()) {
PlayClerkCommodityEntity entity = new PlayClerkCommodityEntity();
- entity.setPlayUserId(playUserId);
+ entity.setPlayUserId(userId);
entity.setCommodityId(commodityInfo.getId());
entity.setCommodityType(commodityInfo.getItemType());
entity.setCommodityName(commodityInfo.getItemName());
entity.setCommodityPrice(commodityInfo.getPrice());
+ entity.setServiceDuration(commodityInfo.getServiceDuration());
entity.setEnablingState("1");
this.create(entity);
}
@@ -51,10 +57,23 @@ public class PlayClerkCommodityServiceImpl extends ServiceImpl selectByUser(String playUserId) {
+ public List getClerkCommodityList(String userId) {
+ List list = this.selectCommodityTypeByUser(userId);
+ return list.stream().map(PlayClerkCommodityEntity::getCommodityType).collect(Collectors.toList());
+ }
+
+ @Override
+ public List selectCommodityTypeByUser(String userId) {
LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.groupBy(PlayClerkCommodityEntity::getCommodityType);
- lambdaQueryWrapper.eq(PlayClerkCommodityEntity::getPlayUserId, playUserId);
+ lambdaQueryWrapper.eq(PlayClerkCommodityEntity::getPlayUserId, userId);
+ return this.baseMapper.selectList(lambdaQueryWrapper);
+ }
+
+ @Override
+ public List selectByUser(String userId) {
+ LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>();
+ lambdaQueryWrapper.eq(PlayClerkCommodityEntity::getPlayUserId, userId);
return this.baseMapper.selectList(lambdaQueryWrapper);
}
@@ -65,11 +84,11 @@ public class PlayClerkCommodityServiceImpl extends ServiceImpl lambdaQueryWrapper = new LambdaQueryWrapper<>();
- lambdaQueryWrapper.eq(PlayClerkCommodityEntity::getPlayUserId, "1");
+ lambdaQueryWrapper.eq(PlayClerkCommodityEntity::getPlayUserId, clerkUserId);
lambdaQueryWrapper.eq(PlayClerkCommodityEntity::getCommodityType, type);
this.baseMapper.update(entity, lambdaQueryWrapper);
}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/clear/service/impl/PlayClerkLevelInfoServiceImpl.java b/play-admin/src/main/java/com/starry/admin/modules/clear/service/impl/PlayClerkLevelInfoServiceImpl.java
index e446bcd..0ad61fd 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/clear/service/impl/PlayClerkLevelInfoServiceImpl.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/clear/service/impl/PlayClerkLevelInfoServiceImpl.java
@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.starry.admin.common.exception.CustomException;
import com.starry.admin.modules.clear.mapper.PlayClerkLevelInfoMapper;
import com.starry.admin.modules.clear.module.entity.PlayClerkLevelInfoEntity;
import com.starry.admin.modules.clear.service.IPlayClerkLevelInfoService;
@@ -27,6 +28,15 @@ public class PlayClerkLevelInfoServiceImpl extends ServiceImpl list = this.selectAll();
+ if (list != null && !list.isEmpty()) {
+ return list.get(0);
+ }
+ throw new CustomException("系统错误,等级数据未初始化");
+ }
+
/**
* 查询店员等级
*
@@ -41,7 +51,7 @@ public class PlayClerkLevelInfoServiceImpl extends ServiceImpl selectAll() {
- LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper();
+ LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.orderByAsc(PlayClerkLevelInfoEntity::getLevel);
return this.baseMapper.selectList(lambdaQueryWrapper);
}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/clear/service/impl/PlayClerkUserInfoServiceImpl.java b/play-admin/src/main/java/com/starry/admin/modules/clear/service/impl/PlayClerkUserInfoServiceImpl.java
index 8f39191..93acc70 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/clear/service/impl/PlayClerkUserInfoServiceImpl.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/clear/service/impl/PlayClerkUserInfoServiceImpl.java
@@ -8,19 +8,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.starry.admin.modules.clear.mapper.PlayClerkUserInfoMapper;
-import com.starry.admin.modules.clear.module.entity.PlayClerkDataReviewInfoEntity;
-import com.starry.admin.modules.clear.module.entity.PlayClerkLevelInfoEntity;
-import com.starry.admin.modules.clear.module.entity.PlayClerkUserInfoEntity;
-import com.starry.admin.modules.clear.module.entity.PlayClerkUserInfoQueryVo;
+import com.starry.admin.modules.clear.module.entity.*;
import com.starry.admin.modules.clear.module.vo.PlayClerkCommodityQueryVo;
import com.starry.admin.modules.clear.service.IPlayClerkCommodityService;
-import com.starry.admin.modules.clear.service.IPlayClerkDataReviewInfoService;
import com.starry.admin.modules.clear.service.IPlayClerkUserInfoService;
+import com.starry.admin.modules.follow.module.entity.PlayCustomFollowInfoEntity;
+import com.starry.admin.modules.follow.service.IPlayCustomFollowInfoService;
import com.starry.admin.modules.weichat.entity.PlayClerkUserLoginResponseVo;
import com.starry.common.utils.ConvertUtil;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
+import java.math.BigDecimal;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
@@ -46,7 +45,7 @@ public class PlayClerkUserInfoServiceImpl extends ServiceImpl lambdaQueryWrapper = new LambdaQueryWrapper<>();
- lambdaQueryWrapper.eq(PlayClerkUserInfoEntity::getPlayUserId, openId);
+ lambdaQueryWrapper.eq(PlayClerkUserInfoEntity::getOpenid, openId);
return this.baseMapper.selectOne(lambdaQueryWrapper);
}
@@ -74,12 +73,13 @@ public class PlayClerkUserInfoServiceImpl extends ServiceImpl list = dataReviewInfoService.queryList(dataReviewInfo);
Map map = list.stream().collect(Collectors.toMap(PlayClerkDataReviewInfoEntity::getDataType, account -> account));
@@ -92,10 +92,10 @@ public class PlayClerkUserInfoServiceImpl extends ServiceImpl selectPlayClerkUserInfoByPage(PlayClerkUserInfoQueryVo vo) {
- Page page = new Page<>(vo.getPageNum(), vo.getPageSize());
+ public IPage selectPlayClerkUserInfoByPage(PlayClerkUserInfoQueryVo vo) {
+ Page page = new Page<>(vo.getPageNum(), vo.getPageSize());
MPJLambdaWrapper lambdaQueryWrapper = new MPJLambdaWrapper()
//查询主表全部字段
- .selectAll(PlayClerkUserInfoEntity.class)
+ .selectAll(PlayClerkUserInfoEntity.class).selectAs(PlayClerkUserInfoEntity::getCity, "address")
//等级表
.selectAs(PlayClerkLevelInfoEntity::getName, "levelName").leftJoin(PlayClerkLevelInfoEntity.class, PlayClerkLevelInfoEntity::getId, PlayClerkUserInfoEntity::getLevelId);
+
+
//服务项目表
-
-
if (StrUtil.isNotBlank(vo.getNickname())) {
lambdaQueryWrapper.like(PlayClerkUserInfoEntity::getNickname, vo.getNickname());
}
@@ -145,9 +155,32 @@ public class PlayClerkUserInfoServiceImpl extends ServiceImpl selectByPage(PlayClerkUserInfoQueryVo vo, String customUserId) {
+ IPage voIPage = this.selectPlayClerkUserInfoByPage(vo);
+ // 如果当前顾客已登录,查询是否关注
+ if (StrUtil.isNotBlank(customUserId)) {
+ LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>();
+ lambdaQueryWrapper.eq(PlayCustomFollowInfoEntity::getCustomUserId, customUserId);
+ List customFollowInfoEntities = customFollowInfoService.list(lambdaQueryWrapper);
+ Map customFollows = customFollowInfoEntities.stream().collect(Collectors.toMap(PlayCustomFollowInfoEntity::getClerkUserId, PlayCustomFollowInfoEntity::getFollowState));
+ for (PlayClerkUserListResultVo record : voIPage.getRecords()) {
+ if (customFollows.containsKey(record.getId())) {
+ record.setFollowState(customFollows.get(record.getId()));
+ record.setCommodity(playClerkCommodityService.getClerkCommodityList(record.getId()));
+ record.setAddress(record.getCity());
+ }
+ }
+ }
+
+ return voIPage;
}
/**
diff --git a/play-admin/src/main/java/com/starry/admin/modules/custom/controller/PlayCustomLevelInfoController.java b/play-admin/src/main/java/com/starry/admin/modules/custom/controller/PlayCustomLevelInfoController.java
new file mode 100644
index 0000000..9f9d1c4
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/custom/controller/PlayCustomLevelInfoController.java
@@ -0,0 +1,94 @@
+package com.starry.admin.modules.custom.controller;
+
+import com.starry.admin.common.exception.CustomException;
+import com.starry.admin.modules.custom.module.entity.PlayCustomLevelInfoEntity;
+import com.starry.admin.modules.custom.module.vo.PlayCustomLevelAddVo;
+import com.starry.admin.modules.custom.module.vo.PlayCustomLevelEditVo;
+import com.starry.admin.modules.custom.service.IPlayCustomLevelInfoService;
+import com.starry.common.annotation.Log;
+import com.starry.common.enums.BusinessType;
+import com.starry.common.result.R;
+import com.starry.common.utils.ConvertUtil;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 顾客等级Controller
+ *
+ * @author admin
+ * @since 2024-05-04
+ */
+@RestController
+@RequestMapping("/custom/level")
+public class PlayCustomLevelInfoController {
+ @Resource
+ private IPlayCustomLevelInfoService playCustomLevelInfoService;
+
+ /**
+ * 查询顾客等级列表
+ */
+ @PostMapping("/listAll")
+ public R listAll() {
+ List list = playCustomLevelInfoService.selectPlayCustomLevelInfoByPage();
+ return R.ok(list);
+ }
+
+ /**
+ * 获取顾客等级详细信息
+ */
+ @GetMapping(value = "/{id}")
+ public R getInfo(@PathVariable("id") String id) {
+ return R.ok(playCustomLevelInfoService.selectPlayCustomLevelInfoById(id));
+ }
+
+
+ /**
+ * 新增顾客等级
+ */
+ @Log(title = "店员等级", businessType = BusinessType.INSERT)
+ @PostMapping("/create")
+ public R create(@RequestBody PlayCustomLevelAddVo vo) {
+ PlayCustomLevelInfoEntity entity = ConvertUtil.entityToVo(vo, PlayCustomLevelInfoEntity.class);
+ int level = playCustomLevelInfoService.selectMaxLevel();
+ entity.setLevel(level + 1);
+ boolean success = playCustomLevelInfoService.create(entity);
+ if (success) {
+ return R.ok();
+ }
+ return R.error("添加失败");
+ }
+
+
+ /**
+ * 修改顾客等级
+ */
+ @Log(title = "顾客等级", businessType = BusinessType.UPDATE)
+ @PostMapping(value = "/update")
+ public R update(@RequestBody PlayCustomLevelEditVo vo) {
+ if (playCustomLevelInfoService.selectPlayCustomLevelInfoById(vo.getId()) == null) {
+ throw new CustomException("对象不存在");
+ }
+ PlayCustomLevelInfoEntity entity = ConvertUtil.entityToVo(vo, PlayCustomLevelInfoEntity.class);
+ boolean success = playCustomLevelInfoService.update(entity);
+ if (success) {
+ return R.ok();
+ }
+ return R.error("修改失败");
+ }
+
+ /**
+ * 删除店员等级
+ */
+ @Log(title = "店员等级", businessType = BusinessType.DELETE)
+ @DeleteMapping("delMaxLevel")
+ public R remove() {
+ int level = playCustomLevelInfoService.selectMaxLevel();
+ if (level <= 1) {
+ throw new CustomException("最后一级,不允许删除");
+ }
+ playCustomLevelInfoService.delMaxLevelByLevel(level);
+ return R.ok();
+ }
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/custom/controller/PlayCustomUserInfoController.java b/play-admin/src/main/java/com/starry/admin/modules/custom/controller/PlayCustomUserInfoController.java
index 29dc26a..1f44038 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/custom/controller/PlayCustomUserInfoController.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/custom/controller/PlayCustomUserInfoController.java
@@ -1,42 +1,34 @@
package com.starry.admin.modules.custom.controller;
+import com.baomidou.mybatisplus.core.metadata.IPage;
import com.starry.admin.modules.custom.module.entity.PlayCustomUserInfoEntity;
+import com.starry.admin.modules.custom.module.vo.PlayCustomUserStateEditVo;
import com.starry.admin.modules.custom.service.IPlayCustomUserInfoService;
+import com.starry.common.annotation.Log;
import com.starry.common.enums.BusinessType;
import com.starry.common.result.R;
-
-
-import com.starry.common.annotation.Log;
-import org.springframework.security.access.prepost.PreAuthorize;
+import com.starry.common.utils.ConvertUtil;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
/**
* 顾客Controller
*
* @author admin
- * @since 2024-04-08
+ * @since 2024-04-08
*/
@RestController
-@RequestMapping("/play/info")
+@RequestMapping("/custom/user")
public class PlayCustomUserInfoController {
@Resource
private IPlayCustomUserInfoService playCustomUserInfoService;
-/**
- * 查询顾客列表
- */
-@PreAuthorize("@customSs.hasPermission('play:info:list')")
-@GetMapping("/list")
+ /**
+ * 查询顾客列表
+ */
+ @GetMapping("/list")
public R list(PlayCustomUserInfoEntity playCustomUserInfo) {
IPage list = playCustomUserInfoService.selectPlayCustomUserInfoByPage(playCustomUserInfo);
return R.ok(list);
@@ -45,7 +37,6 @@ public class PlayCustomUserInfoController {
/**
* 获取顾客详细信息
*/
- @PreAuthorize("@customSs.hasPermission('play:info:query')")
@GetMapping(value = "/{id}")
public R getInfo(@PathVariable("id") String id) {
return R.ok(playCustomUserInfoService.selectById(id));
@@ -54,7 +45,6 @@ public class PlayCustomUserInfoController {
/**
* 新增顾客
*/
- @PreAuthorize("@customSs.hasPermission('play:info:create')")
@Log(title = "顾客", businessType = BusinessType.INSERT)
@PostMapping("/create")
public R create(@RequestBody PlayCustomUserInfoEntity playCustomUserInfo) {
@@ -65,10 +55,23 @@ public class PlayCustomUserInfoController {
return R.error("添加失败");
}
+ /**
+ * 修改顾客状态
+ */
+ @Log(title = "顾客", businessType = BusinessType.UPDATE)
+ @PostMapping(value = "/updateState")
+ public R updateState(@Validated @RequestBody PlayCustomUserStateEditVo vo) {
+ PlayCustomUserInfoEntity entity = ConvertUtil.entityToVo(vo, PlayCustomUserInfoEntity.class);
+ boolean success = playCustomUserInfoService.update(entity);
+ if (success) {
+ return R.ok();
+ }
+ return R.error("修改失败");
+ }
+
/**
* 修改顾客
*/
- @PreAuthorize("@customSs.hasPermission('play:info:edit')")
@Log(title = "顾客", businessType = BusinessType.UPDATE)
@PostMapping(value = "/update/{id}")
public R update(@PathVariable String id, @RequestBody PlayCustomUserInfoEntity playCustomUserInfo) {
@@ -83,7 +86,6 @@ public class PlayCustomUserInfoController {
/**
* 删除顾客
*/
- @PreAuthorize("@customSs.hasPermission('play:info:remove')")
@Log(title = "顾客", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R remove(@PathVariable String[] ids) {
diff --git a/play-admin/src/main/java/com/starry/admin/modules/custom/mapper/PlayCustomLevelInfoMapper.java b/play-admin/src/main/java/com/starry/admin/modules/custom/mapper/PlayCustomLevelInfoMapper.java
new file mode 100644
index 0000000..9199484
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/custom/mapper/PlayCustomLevelInfoMapper.java
@@ -0,0 +1,16 @@
+package com.starry.admin.modules.custom.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.starry.admin.modules.custom.module.entity.PlayCustomLevelInfoEntity;
+
+/**
+ * 顾客等级Mapper接口
+ *
+ * @author admin
+ * @since 2024-05-04
+ */
+public interface PlayCustomLevelInfoMapper extends BaseMapper {
+
+
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/custom/module/entity/PlayCustomLevelInfoEntity.java b/play-admin/src/main/java/com/starry/admin/modules/custom/module/entity/PlayCustomLevelInfoEntity.java
new file mode 100644
index 0000000..7279504
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/custom/module/entity/PlayCustomLevelInfoEntity.java
@@ -0,0 +1,56 @@
+package com.starry.admin.modules.custom.module.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.starry.common.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 顾客等级对象 play_custom_level_info
+ *
+ * @author admin
+ * @since 2024-05-04
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("play_custom_level_info")
+public class PlayCustomLevelInfoEntity extends BaseEntity {
+
+
+ /**
+ * UUID
+ */
+ private String id;
+
+ /**
+ * 租户ID
+ */
+ private String tenantId;
+
+ /**
+ * 等级名称
+ */
+ private String name;
+
+ /**
+ * 等级数字(排序字段)
+ */
+ private Integer level;
+
+ /**
+ * 上一级消费金额
+ */
+ private String consumptionAmount;
+
+ /**
+ * 满减比例
+ */
+ private Integer discount;
+
+ /**
+ * 头像框地址
+ */
+ private String avatarFrameAddress;
+
+
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/custom/module/entity/PlayCustomUserInfoEntity.java b/play-admin/src/main/java/com/starry/admin/modules/custom/module/entity/PlayCustomUserInfoEntity.java
index 212a6cf..5657b53 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/custom/module/entity/PlayCustomUserInfoEntity.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/custom/module/entity/PlayCustomUserInfoEntity.java
@@ -6,6 +6,7 @@ import com.starry.common.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
+import java.math.BigDecimal;
import java.util.Date;
/**
@@ -41,12 +42,12 @@ public class PlayCustomUserInfoEntity extends BaseEntity {
+
+
+ /**
+ * 获取新增顾客时,默认最低等级ID
+ *
+ * @return PlayCustomLevelInfoEntity
+ */
+ PlayCustomLevelInfoEntity getDefaultLevel();
+
+ /**
+ * 查询顾客等级列表
+ *
+ * @return 顾客等级集合
+ */
+ List selectAll();
+
+ /**
+ * 查询顾客等级
+ *
+ * @param id 顾客等级主键
+ * @return 顾客等级
+ */
+ PlayCustomLevelInfoEntity selectPlayCustomLevelInfoById(String id);
+
+ /**
+ * 查询顾客等级列表
+ *
+ * @return 顾客等级集合
+ */
+ List selectPlayCustomLevelInfoByPage();
+
+ /**
+ * 新增顾客等级
+ *
+ * @param playCustomLevelInfo 顾客等级
+ * @return 结果
+ */
+ boolean create(PlayCustomLevelInfoEntity playCustomLevelInfo);
+
+ /**
+ * 修改顾客等级
+ *
+ * @param playCustomLevelInfo 顾客等级
+ * @return 结果
+ */
+ boolean update(PlayCustomLevelInfoEntity playCustomLevelInfo);
+
+ /**
+ * 批量删除顾客等级
+ *
+ * @param ids 需要删除的顾客等级主键集合
+ * @return 结果
+ */
+ int deletePlayCustomLevelInfoByIds(String[] ids);
+
+ /**
+ * 删除顾客等级信息
+ *
+ * @param id 顾客等级主键
+ * @return 结果
+ */
+ int deletePlayCustomLevelInfoById(String id);
+
+ /**
+ * 查询最大等级
+ *
+ * @return 最大等级
+ */
+ int selectMaxLevel();
+
+
+ /**
+ * 删除最大等级
+ */
+ void delMaxLevelByLevel(Integer level);
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/custom/service/IPlayCustomUserInfoService.java b/play-admin/src/main/java/com/starry/admin/modules/custom/service/IPlayCustomUserInfoService.java
index ea65c0b..a5bba01 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/custom/service/IPlayCustomUserInfoService.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/custom/service/IPlayCustomUserInfoService.java
@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.starry.admin.modules.custom.module.entity.PlayCustomUserInfoEntity;
+import java.math.BigDecimal;
+
/**
* 顾客Service接口
*
@@ -21,7 +23,6 @@ public interface IPlayCustomUserInfoService extends IService implements IPlayCustomLevelInfoService {
+ @Resource
+ private PlayCustomLevelInfoMapper playCustomLevelInfoMapper;
+
+
+ @Override
+ public PlayCustomLevelInfoEntity getDefaultLevel() {
+ List list = this.selectAll();
+ if (list != null && !list.isEmpty()) {
+ return list.get(0);
+ }
+ throw new CustomException("系统错误,等级数据未初始化");
+ }
+
+ @Override
+ public List selectAll() {
+ LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>();
+ lambdaQueryWrapper.orderByAsc(PlayCustomLevelInfoEntity::getLevel);
+ return this.baseMapper.selectList(lambdaQueryWrapper);
+ }
+
+
+ /**
+ * 查询顾客等级
+ *
+ * @param id 顾客等级主键
+ * @return 顾客等级
+ */
+ @Override
+ public PlayCustomLevelInfoEntity selectPlayCustomLevelInfoById(String id) {
+ return this.baseMapper.selectById(id);
+ }
+
+ /**
+ * 查询顾客等级列表
+ *
+ * @return 顾客等级
+ */
+ @Override
+ public List selectPlayCustomLevelInfoByPage() {
+ LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>();
+ lambdaQueryWrapper.orderByAsc(PlayCustomLevelInfoEntity::getLevel);
+ return this.baseMapper.selectList(lambdaQueryWrapper);
+ }
+
+ /**
+ * 新增顾客等级
+ *
+ * @param playCustomLevelInfo 顾客等级
+ * @return 结果
+ */
+ @Override
+ public boolean create(PlayCustomLevelInfoEntity playCustomLevelInfo) {
+ if (StrUtil.isBlankIfStr(playCustomLevelInfo.getId())) {
+ playCustomLevelInfo.setId(IdUtil.fastSimpleUUID());
+ }
+ return save(playCustomLevelInfo);
+ }
+
+ /**
+ * 修改顾客等级
+ *
+ * @param playCustomLevelInfo 顾客等级
+ * @return 结果
+ */
+ @Override
+ public boolean update(PlayCustomLevelInfoEntity playCustomLevelInfo) {
+ return updateById(playCustomLevelInfo);
+ }
+
+ /**
+ * 批量删除顾客等级
+ *
+ * @param ids 需要删除的顾客等级主键
+ * @return 结果
+ */
+ @Override
+ public int deletePlayCustomLevelInfoByIds(String[] ids) {
+ return playCustomLevelInfoMapper.deleteBatchIds(Arrays.asList(ids));
+ }
+
+ /**
+ * 删除顾客等级信息
+ *
+ * @param id 顾客等级主键
+ * @return 结果
+ */
+ @Override
+ public int deletePlayCustomLevelInfoById(String id) {
+ return playCustomLevelInfoMapper.deleteById(id);
+ }
+
+ @Override
+ public int selectMaxLevel() {
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ queryWrapper.select("max(level) as level ");
+ PlayCustomLevelInfoEntity entity = this.baseMapper.selectOne(queryWrapper);
+ return entity == null ? 0 : entity.getLevel();
+ }
+
+ @Override
+ public void delMaxLevelByLevel(Integer level) {
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(PlayCustomLevelInfoEntity::getLevel, level);
+ this.baseMapper.delete(queryWrapper);
+ }
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/custom/service/impl/PlayCustomUserInfoServiceImpl.java b/play-admin/src/main/java/com/starry/admin/modules/custom/service/impl/PlayCustomUserInfoServiceImpl.java
index 52503ca..268df00 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/custom/service/impl/PlayCustomUserInfoServiceImpl.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/custom/service/impl/PlayCustomUserInfoServiceImpl.java
@@ -12,6 +12,7 @@ import com.starry.admin.modules.custom.service.IPlayCustomUserInfoService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
+import java.math.BigDecimal;
import java.util.Arrays;
/**
@@ -32,7 +33,6 @@ public class PlayCustomUserInfoServiceImpl extends ServiceImpl list = playCustomFollowInfoService.selectPlayCustomFollowInfoByPage(playCustomFollowInfo);
+ return R.ok(list);
+ }
+
+ /**
+ * 获取顾客关注陪玩信息详细信息
+ */
+ @PreAuthorize("@customSs.hasPermission('play:info:query')")
+ @GetMapping(value = "/{id}")
+ public R getInfo(@PathVariable("id") String id) {
+ return R.ok(playCustomFollowInfoService.selectPlayCustomFollowInfoById(id));
+ }
+
+ /**
+ * 新增顾客关注陪玩信息
+ */
+ @PreAuthorize("@customSs.hasPermission('play:info:create')")
+ @Log(title = "顾客关注陪玩信息", businessType = BusinessType.INSERT)
+ @PostMapping("/create")
+ public R create(@RequestBody PlayCustomFollowInfoEntity playCustomFollowInfo) {
+ boolean success = playCustomFollowInfoService.create(playCustomFollowInfo);
+ if (success) {
+ return R.ok();
+ }
+ return R.error("添加失败");
+ }
+
+ /**
+ * 修改顾客关注陪玩信息
+ */
+ @PreAuthorize("@customSs.hasPermission('play:info:edit')")
+ @Log(title = "顾客关注陪玩信息", businessType = BusinessType.UPDATE)
+ @PostMapping(value = "/update/{id}")
+ public R update(@PathVariable String id, @RequestBody PlayCustomFollowInfoEntity playCustomFollowInfo) {
+ playCustomFollowInfo.setId(id);
+ boolean success = playCustomFollowInfoService.update(playCustomFollowInfo);
+ if (success) {
+ return R.ok();
+ }
+ return R.error("修改失败");
+ }
+
+ /**
+ * 删除顾客关注陪玩信息
+ */
+ @PreAuthorize("@customSs.hasPermission('play:info:remove')")
+ @Log(title = "顾客关注陪玩信息", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public R remove(@PathVariable String[] ids) {
+ return R.ok(playCustomFollowInfoService.deletePlayCustomFollowInfoByIds(ids));
+ }
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/follow/mapper/PlayCustomFollowInfoMapper.java b/play-admin/src/main/java/com/starry/admin/modules/follow/mapper/PlayCustomFollowInfoMapper.java
new file mode 100644
index 0000000..ddd2a81
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/follow/mapper/PlayCustomFollowInfoMapper.java
@@ -0,0 +1,16 @@
+package com.starry.admin.modules.follow.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.starry.admin.modules.follow.module.entity.PlayCustomFollowInfoEntity;
+
+/**
+ * 顾客关注陪玩信息Mapper接口
+ *
+ * @author admin
+ * @since 2024-04-30
+ */
+public interface PlayCustomFollowInfoMapper extends BaseMapper {
+
+
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/follow/module/entity/PlayCustomFollowInfoEntity.java b/play-admin/src/main/java/com/starry/admin/modules/follow/module/entity/PlayCustomFollowInfoEntity.java
new file mode 100644
index 0000000..8fa6bd7
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/follow/module/entity/PlayCustomFollowInfoEntity.java
@@ -0,0 +1,57 @@
+package com.starry.admin.modules.follow.module.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.starry.common.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+
+/**
+ * 顾客关注陪玩信息对象 play_custom_follow_info
+ *
+ * @author admin
+ * @since 2024-04-30
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("play_custom_follow_info")
+public class PlayCustomFollowInfoEntity extends BaseEntity {
+
+
+ /**
+ * UUID
+ */
+ private String id;
+
+ /**
+ * 租户ID
+ */
+ private String tenantId;
+
+ /**
+ * 顾客ID
+ */
+ private String customUserId;
+
+ /**
+ * 陪玩ID
+ */
+ private String clerkUserId;
+
+ /**
+ * 关注时间
+ */
+ private Date followTime;
+
+ /**
+ * 取消关注时间
+ */
+ private Date unfollowTime;
+
+ /**
+ * 关注状态[0:未关注,1:已关注]
+ */
+ private String followState;
+
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/follow/service/IPlayCustomFollowInfoService.java b/play-admin/src/main/java/com/starry/admin/modules/follow/service/IPlayCustomFollowInfoService.java
new file mode 100644
index 0000000..b2519ca
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/follow/service/IPlayCustomFollowInfoService.java
@@ -0,0 +1,79 @@
+package com.starry.admin.modules.follow.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.starry.admin.modules.follow.module.entity.PlayCustomFollowInfoEntity;
+
+/**
+ * 顾客关注陪玩信息Service接口
+ *
+ * @author admin
+ * @since 2024-04-30
+ */
+public interface IPlayCustomFollowInfoService extends IService {
+ /**
+ * 查询顾客关注陪玩信息
+ *
+ * @param id 顾客关注陪玩信息主键
+ * @return 顾客关注陪玩信息
+ */
+ PlayCustomFollowInfoEntity selectPlayCustomFollowInfoById(String id);
+
+ /**
+ * 修改关注状态
+ *
+ * @param customUserId 顾客ID
+ * @param clarkUserId 陪玩ID
+ * @return 关注状态[0:未关注,1:已关注]
+ */
+ String queryFollowState(String customUserId, String clarkUserId);
+
+ /**
+ * 修改关注状态
+ *
+ * @param customUserId 顾客ID
+ * @param clarkUserId 陪玩ID
+ * @param followState 关注状态[0:未关注,1:已关注]
+ */
+ void updateFollowState(String customUserId, String clarkUserId, String followState);
+
+ /**
+ * 查询顾客关注陪玩信息列表
+ *
+ * @param playCustomFollowInfo 顾客关注陪玩信息
+ * @return 顾客关注陪玩信息集合
+ */
+ IPage selectPlayCustomFollowInfoByPage(PlayCustomFollowInfoEntity playCustomFollowInfo);
+
+ /**
+ * 新增顾客关注陪玩信息
+ *
+ * @param playCustomFollowInfo 顾客关注陪玩信息
+ * @return 结果
+ */
+ boolean create(PlayCustomFollowInfoEntity playCustomFollowInfo);
+
+ /**
+ * 修改顾客关注陪玩信息
+ *
+ * @param playCustomFollowInfo 顾客关注陪玩信息
+ * @return 结果
+ */
+ boolean update(PlayCustomFollowInfoEntity playCustomFollowInfo);
+
+ /**
+ * 批量删除顾客关注陪玩信息
+ *
+ * @param ids 需要删除的顾客关注陪玩信息主键集合
+ * @return 结果
+ */
+ int deletePlayCustomFollowInfoByIds(String[] ids);
+
+ /**
+ * 删除顾客关注陪玩信息信息
+ *
+ * @param id 顾客关注陪玩信息主键
+ * @return 结果
+ */
+ int deletePlayCustomFollowInfoById(String id);
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/follow/service/impl/PlayCustomFollowInfoServiceImpl.java b/play-admin/src/main/java/com/starry/admin/modules/follow/service/impl/PlayCustomFollowInfoServiceImpl.java
new file mode 100644
index 0000000..63fda85
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/follow/service/impl/PlayCustomFollowInfoServiceImpl.java
@@ -0,0 +1,127 @@
+package com.starry.admin.modules.follow.service.impl;
+
+import cn.hutool.core.util.IdUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.starry.admin.modules.follow.mapper.PlayCustomFollowInfoMapper;
+import com.starry.admin.modules.follow.module.entity.PlayCustomFollowInfoEntity;
+import com.starry.admin.modules.follow.service.IPlayCustomFollowInfoService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Arrays;
+import java.util.Date;
+
+/**
+ * 顾客关注陪玩信息Service业务层处理
+ *
+ * @author admin
+ * @since 2024-04-30
+ */
+@Service
+public class PlayCustomFollowInfoServiceImpl extends ServiceImpl implements IPlayCustomFollowInfoService {
+ @Resource
+ private PlayCustomFollowInfoMapper playCustomFollowInfoMapper;
+
+ /**
+ * 查询顾客关注陪玩信息
+ *
+ * @param id 顾客关注陪玩信息主键
+ * @return 顾客关注陪玩信息
+ */
+ @Override
+ public PlayCustomFollowInfoEntity selectPlayCustomFollowInfoById(String id) {
+ return this.baseMapper.selectById(id);
+ }
+
+
+ @Override
+ public String queryFollowState(String customUserId, String clarkUserId) {
+ LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>();
+ lambdaQueryWrapper.eq(PlayCustomFollowInfoEntity::getClerkUserId, clarkUserId);
+ lambdaQueryWrapper.eq(PlayCustomFollowInfoEntity::getCustomUserId, customUserId);
+ PlayCustomFollowInfoEntity entity = this.baseMapper.selectOne(lambdaQueryWrapper);
+ return entity == null ? "0" : entity.getFollowState();
+ }
+
+ @Override
+ public void updateFollowState(String customUserId, String clarkUserId, String followState) {
+ LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>();
+ lambdaQueryWrapper.eq(PlayCustomFollowInfoEntity::getClerkUserId, clarkUserId);
+ lambdaQueryWrapper.eq(PlayCustomFollowInfoEntity::getCustomUserId, customUserId);
+ PlayCustomFollowInfoEntity entity = this.baseMapper.selectOne(lambdaQueryWrapper);
+ if (entity == null) {
+ entity = new PlayCustomFollowInfoEntity();
+ entity.setCustomUserId(customUserId);
+ entity.setFollowState(followState);
+ entity.setClerkUserId(clarkUserId);
+ entity.setFollowTime(new Date());
+ this.baseMapper.insert(entity);
+ } else {
+ entity.setFollowState(followState);
+ this.baseMapper.updateById(entity);
+ }
+ }
+
+ /**
+ * 查询顾客关注陪玩信息列表
+ *
+ * @param playCustomFollowInfo 顾客关注陪玩信息
+ * @return 顾客关注陪玩信息
+ */
+ @Override
+ public IPage selectPlayCustomFollowInfoByPage(PlayCustomFollowInfoEntity playCustomFollowInfo) {
+ Page page = new Page<>(1, 10);
+ return this.baseMapper.selectPage(page, new LambdaQueryWrapper<>());
+ }
+
+ /**
+ * 新增顾客关注陪玩信息
+ *
+ * @param playCustomFollowInfo 顾客关注陪玩信息
+ * @return 结果
+ */
+ @Override
+ public boolean create(PlayCustomFollowInfoEntity playCustomFollowInfo) {
+ if (StrUtil.isBlankIfStr(playCustomFollowInfo.getId())) {
+ playCustomFollowInfo.setId(IdUtil.fastSimpleUUID());
+ }
+ return save(playCustomFollowInfo);
+ }
+
+ /**
+ * 修改顾客关注陪玩信息
+ *
+ * @param playCustomFollowInfo 顾客关注陪玩信息
+ * @return 结果
+ */
+ @Override
+ public boolean update(PlayCustomFollowInfoEntity playCustomFollowInfo) {
+ return updateById(playCustomFollowInfo);
+ }
+
+ /**
+ * 批量删除顾客关注陪玩信息
+ *
+ * @param ids 需要删除的顾客关注陪玩信息主键
+ * @return 结果
+ */
+ @Override
+ public int deletePlayCustomFollowInfoByIds(String[] ids) {
+ return playCustomFollowInfoMapper.deleteBatchIds(Arrays.asList(ids));
+ }
+
+ /**
+ * 删除顾客关注陪玩信息信息
+ *
+ * @param id 顾客关注陪玩信息主键
+ * @return 结果
+ */
+ @Override
+ public int deletePlayCustomFollowInfoById(String id) {
+ return playCustomFollowInfoMapper.deleteById(id);
+ }
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/gift/controller/PlayGiftInfoController.java b/play-admin/src/main/java/com/starry/admin/modules/gift/controller/PlayGiftInfoController.java
new file mode 100644
index 0000000..a8df0af
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/gift/controller/PlayGiftInfoController.java
@@ -0,0 +1,83 @@
+package com.starry.admin.modules.gift.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.starry.admin.modules.gift.module.entity.PlayGiftInfoEntity;
+import com.starry.admin.modules.gift.service.IPlayGiftInfoService;
+import com.starry.common.annotation.Log;
+import com.starry.common.enums.BusinessType;
+import com.starry.common.result.R;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+/**
+ * 礼物Controller
+ *
+ * @author admin
+ * @since 2024-04-25
+ */
+@RestController
+@RequestMapping("/play/giff")
+public class PlayGiftInfoController {
+ @Resource
+ private IPlayGiftInfoService playGiftInfoService;
+
+ /**
+ * 查询礼物列表
+ */
+ @PreAuthorize("@customSs.hasPermission('play:info:list')")
+ @GetMapping("/list")
+ public R list(PlayGiftInfoEntity playGiftInfo) {
+ IPage list = playGiftInfoService.selectPlayGiftInfoByPage(playGiftInfo);
+ return R.ok(list);
+ }
+
+ /**
+ * 获取礼物详细信息
+ */
+ @PreAuthorize("@customSs.hasPermission('play:info:query')")
+ @GetMapping(value = "/{id}")
+ public R getInfo(@PathVariable("id") String id) {
+ return R.ok(playGiftInfoService.selectPlayGiftInfoById(id));
+ }
+
+ /**
+ * 新增礼物
+ */
+ @PreAuthorize("@customSs.hasPermission('play:info:create')")
+ @Log(title = "礼物", businessType = BusinessType.INSERT)
+ @PostMapping("/create")
+ public R create(@RequestBody PlayGiftInfoEntity playGiftInfo) {
+ boolean success = playGiftInfoService.create(playGiftInfo);
+ if (success) {
+ return R.ok();
+ }
+ return R.error("添加失败");
+ }
+
+ /**
+ * 修改礼物
+ */
+ @PreAuthorize("@customSs.hasPermission('play:info:edit')")
+ @Log(title = "礼物", businessType = BusinessType.UPDATE)
+ @PostMapping(value = "/update/{id}")
+ public R update(@PathVariable String id, @RequestBody PlayGiftInfoEntity playGiftInfo) {
+ playGiftInfo.setId(id);
+ boolean success = playGiftInfoService.update(playGiftInfo);
+ if (success) {
+ return R.ok();
+ }
+ return R.error("修改失败");
+ }
+
+ /**
+ * 删除礼物
+ */
+ @PreAuthorize("@customSs.hasPermission('play:info:remove')")
+ @Log(title = "礼物", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public R remove(@PathVariable String[] ids) {
+ return R.ok(playGiftInfoService.deletePlayGiftInfoByIds(ids));
+ }
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/gift/mapper/PlayGiftInfoMapper.java b/play-admin/src/main/java/com/starry/admin/modules/gift/mapper/PlayGiftInfoMapper.java
new file mode 100644
index 0000000..d6017d9
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/gift/mapper/PlayGiftInfoMapper.java
@@ -0,0 +1,16 @@
+package com.starry.admin.modules.gift.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.starry.admin.modules.gift.module.entity.PlayGiftInfoEntity;
+
+/**
+ * 礼物Mapper接口
+ *
+ * @author admin
+ * @since 2024-04-25
+ */
+public interface PlayGiftInfoMapper extends BaseMapper {
+
+
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/gift/module/entity/PlayGiftInfoEntity.java b/play-admin/src/main/java/com/starry/admin/modules/gift/module/entity/PlayGiftInfoEntity.java
new file mode 100644
index 0000000..0de2858
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/gift/module/entity/PlayGiftInfoEntity.java
@@ -0,0 +1,78 @@
+package com.starry.admin.modules.gift.module.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.starry.common.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 礼物对象 play_gift_info
+ *
+ * @author admin
+ * @since 2024-04-25
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("play_gift_info")
+public class PlayGiftInfoEntity extends BaseEntity {
+
+
+ /**
+ * UUID
+ */
+ private String id;
+
+ /**
+ * 租户ID
+ */
+ private String tenantId;
+
+ /**
+ * 礼物名称
+ */
+ private String name;
+
+ /**
+ * 礼物类型(0:盲盒,1:普通礼物)
+ */
+ private String type;
+
+ /**
+ * 礼物图片地址
+ */
+ private String url;
+
+ /**
+ * 单价
+ */
+ private BigDecimal price;
+
+ /**
+ * 价格单位
+ */
+ private String unit;
+
+ /**
+ * 状态(0:正常,1:下架)
+ */
+ private String state;
+
+ /**
+ * 上架时间
+ */
+ private Date listingTime;
+
+ /**
+ * 下架时间
+ */
+ private Date delintingTime;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/gift/service/IPlayGiftInfoService.java b/play-admin/src/main/java/com/starry/admin/modules/gift/service/IPlayGiftInfoService.java
new file mode 100644
index 0000000..51b8b7b
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/gift/service/IPlayGiftInfoService.java
@@ -0,0 +1,73 @@
+package com.starry.admin.modules.gift.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.starry.admin.modules.gift.module.entity.PlayGiftInfoEntity;
+
+import java.util.List;
+
+/**
+ * 礼物Service接口
+ *
+ * @author admin
+ * @since 2024-04-25
+ */
+public interface IPlayGiftInfoService extends IService {
+ /**
+ * 查询礼物
+ *
+ * @param id 礼物主键
+ * @return 礼物
+ */
+ PlayGiftInfoEntity selectPlayGiftInfoById(String id);
+
+
+ /**
+ * 查询所有礼物
+ *
+ * @return List
+ * @author admin
+ * @since 2024/4/25 15:56
+ **/
+ List listByAll();
+
+ /**
+ * 查询礼物列表
+ *
+ * @param playGiftInfo 礼物
+ * @return 礼物集合
+ */
+ IPage selectPlayGiftInfoByPage(PlayGiftInfoEntity playGiftInfo);
+
+ /**
+ * 新增礼物
+ *
+ * @param playGiftInfo 礼物
+ * @return 结果
+ */
+ boolean create(PlayGiftInfoEntity playGiftInfo);
+
+ /**
+ * 修改礼物
+ *
+ * @param playGiftInfo 礼物
+ * @return 结果
+ */
+ boolean update(PlayGiftInfoEntity playGiftInfo);
+
+ /**
+ * 批量删除礼物
+ *
+ * @param ids 需要删除的礼物主键集合
+ * @return 结果
+ */
+ int deletePlayGiftInfoByIds(String[] ids);
+
+ /**
+ * 删除礼物信息
+ *
+ * @param id礼物主键
+ * @return 结果
+ */
+ int deletePlayGiftInfoById(String id);
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/gift/service/impl/PlayGiftInfoServiceImpl.java b/play-admin/src/main/java/com/starry/admin/modules/gift/service/impl/PlayGiftInfoServiceImpl.java
new file mode 100644
index 0000000..2e13f08
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/gift/service/impl/PlayGiftInfoServiceImpl.java
@@ -0,0 +1,104 @@
+package com.starry.admin.modules.gift.service.impl;
+
+import cn.hutool.core.util.IdUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.starry.admin.modules.gift.mapper.PlayGiftInfoMapper;
+import com.starry.admin.modules.gift.module.entity.PlayGiftInfoEntity;
+import com.starry.admin.modules.gift.service.IPlayGiftInfoService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 礼物Service业务层处理
+ *
+ * @author admin
+ * @since 2024-04-25
+ */
+@Service
+public class PlayGiftInfoServiceImpl extends ServiceImpl implements IPlayGiftInfoService {
+ @Resource
+ private PlayGiftInfoMapper playGiftInfoMapper;
+
+ /**
+ * 查询礼物
+ *
+ * @param id 礼物主键
+ * @return 礼物
+ */
+ @Override
+ public PlayGiftInfoEntity selectPlayGiftInfoById(String id) {
+ return this.baseMapper.selectById(id);
+ }
+
+
+ @Override
+ public List listByAll() {
+ return this.baseMapper.selectList(new LambdaQueryWrapper<>());
+ }
+
+ /**
+ * 查询礼物列表
+ *
+ * @param playGiftInfo 礼物
+ * @return 礼物
+ */
+ @Override
+ public IPage selectPlayGiftInfoByPage(PlayGiftInfoEntity playGiftInfo) {
+ Page page = new Page<>(1, 10);
+ return this.baseMapper.selectPage(page, new LambdaQueryWrapper());
+ }
+
+ /**
+ * 新增礼物
+ *
+ * @param playGiftInfo 礼物
+ * @return 结果
+ */
+ @Override
+ public boolean create(PlayGiftInfoEntity playGiftInfo) {
+ if (StrUtil.isBlankIfStr(playGiftInfo.getId())) {
+ playGiftInfo.setId(IdUtil.fastSimpleUUID());
+ }
+ return save(playGiftInfo);
+ }
+
+ /**
+ * 修改礼物
+ *
+ * @param playGiftInfo 礼物
+ * @return 结果
+ */
+ @Override
+ public boolean update(PlayGiftInfoEntity playGiftInfo) {
+ return updateById(playGiftInfo);
+ }
+
+ /**
+ * 批量删除礼物
+ *
+ * @param ids 需要删除的礼物主键
+ * @return 结果
+ */
+ @Override
+ public int deletePlayGiftInfoByIds(String[] ids) {
+ return playGiftInfoMapper.deleteBatchIds(Arrays.asList(ids));
+ }
+
+ /**
+ * 删除礼物信息
+ *
+ * @param id 礼物主键
+ * @return 结果
+ */
+ @Override
+ public int deletePlayGiftInfoById(String id) {
+ return playGiftInfoMapper.deleteById(id);
+ }
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/order/controller/OrderInfoController.java b/play-admin/src/main/java/com/starry/admin/modules/order/controller/PlayOrderInfoController.java
similarity index 70%
rename from play-admin/src/main/java/com/starry/admin/modules/order/controller/OrderInfoController.java
rename to play-admin/src/main/java/com/starry/admin/modules/order/controller/PlayOrderInfoController.java
index df2d63d..8010124 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/order/controller/OrderInfoController.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/order/controller/PlayOrderInfoController.java
@@ -4,13 +4,9 @@ import cn.hutool.core.util.IdUtil;
import com.starry.admin.common.exception.CustomException;
import com.starry.admin.modules.coupon.module.entity.CouponInfoEntity;
import com.starry.admin.modules.coupon.service.ICouponInfoService;
-import com.starry.admin.modules.order.module.entity.OrderDetailsInfoEntity;
-import com.starry.admin.modules.order.module.entity.OrderInfoEntity;
-import com.starry.admin.modules.order.module.entity.OrderLogInfoEntity;
+import com.starry.admin.modules.order.module.entity.PlayOrderInfoEntity;
import com.starry.admin.modules.order.module.vo.*;
-import com.starry.admin.modules.order.service.IOrderDetailsInfoService;
-import com.starry.admin.modules.order.service.IOrderInfoService;
-import com.starry.admin.modules.order.service.IOrderLogInfoService;
+import com.starry.admin.modules.order.service.IPlayOrderInfoService;
import com.starry.admin.modules.play.module.entity.PlayUserInfoEntity;
import com.starry.admin.modules.play.service.IPlayUserInfoService;
import com.starry.common.annotation.Log;
@@ -21,7 +17,6 @@ import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
-import java.util.Date;
/**
@@ -31,30 +26,24 @@ import java.util.Date;
* @since 2024-03-20
*/
@RestController
-@RequestMapping("/order/info")
-public class OrderInfoController {
+@RequestMapping("/order/order/")
+public class PlayOrderInfoController {
@Resource
- private IOrderInfoService orderInfoService;
+ private IPlayOrderInfoService orderInfoService;
- @Resource
- private IOrderDetailsInfoService orderDetailsInfoService;
@Resource
private ICouponInfoService couponInfoService;
- @Resource
- private IOrderLogInfoService orderLogInfoService;
-
@Resource
private IPlayUserInfoService playUserInfoService;
@Log(title = "取消订单", businessType = BusinessType.UPDATE)
- @PreAuthorize("@customSs.hasPermission('order/info/cancellation')")
public R cancellationOrder(@RequestBody OrderInfoCancellationVo vo) {
// 判断操作人是否是陪玩本身
- OrderInfoEntity entity = orderInfoService.selectOrderInfoById(vo.getId());
+ PlayOrderInfoEntity entity = orderInfoService.selectOrderInfoById(vo.getId());
// 校验通过
orderInfoService.orderRefund(vo.getId(), "2", null, false);
@@ -79,11 +68,11 @@ public class OrderInfoController {
// 减少用户余额
// 新增订单记录(订单信息需完善)
- OrderInfoEntity entity = ConvertUtil.entityToVo(addVo, OrderInfoEntity.class);
+ PlayOrderInfoEntity entity = ConvertUtil.entityToVo(addVo, PlayOrderInfoEntity.class);
orderInfoService.create(entity);
// 新增订单处理日志(打赏单,订单直接完成)
- orderLogInfoService.create(new OrderLogInfoEntity(entity.getId(), "1", new Date()));
- orderLogInfoService.create(new OrderLogInfoEntity(entity.getId(), "4", new Date()));
+// orderLogInfoService.create(new OrderLogInfoEntity(entity.getId(), "1", new Date()));
+// orderLogInfoService.create(new OrderLogInfoEntity(entity.getId(), "4", new Date()));
return R.ok("成功");
}
@@ -117,20 +106,20 @@ public class OrderInfoController {
// throw new CustomException("余额不足,无法下单");
// }
- OrderInfoEntity entity = ConvertUtil.entityToVo(addVo, OrderInfoEntity.class);
+ PlayOrderInfoEntity entity = ConvertUtil.entityToVo(addVo, PlayOrderInfoEntity.class);
entity.setId(IdUtil.fastSimpleUUID());
entity.setFirstOrder(true);
- entity.setOrderMoney(String.valueOf(orderTotalMoney));
+// entity.setOrderMoney(String.valueOf(orderTotalMoney));
orderInfoService.create(entity);
// 记录订单日志
- orderLogInfoService.create(new OrderLogInfoEntity(entity.getId(), "0", new Date()));
+// orderLogInfoService.create(new OrderLogInfoEntity(entity.getId(), "0", new Date()));
// 记录订单详细信息
- orderDetailsInfoService.create(new OrderDetailsInfoEntity(entity.getId(), addVo.getPlayUserId(), "0"));
- for (String commodityInfoId : addVo.getCouponIds()) {
- orderDetailsInfoService.create(new OrderDetailsInfoEntity(entity.getId(), commodityInfoId, "1"));
- }
+// orderDetailsInfoService.create(new OrderDetailsInfoEntity(entity.getId(), addVo.getPlayUserId(), "0"));
+// for (String commodityInfoId : addVo.getCouponIds()) {
+// orderDetailsInfoService.create(new OrderDetailsInfoEntity(entity.getId(), commodityInfoId, "1"));
+// }
// 发送通知给陪玩,等待陪玩接单
return R.ok("下单成功,等待接单");
@@ -140,7 +129,6 @@ public class OrderInfoController {
/**
* 分页查询订单列表
*/
- @PreAuthorize("@customSs.hasPermission('order/info/list')")
@GetMapping("/list")
public R list(OrderInfoQueryVo vo) {
return R.ok(orderInfoService.selectOrderInfoList(vo));
@@ -150,7 +138,6 @@ public class OrderInfoController {
/**
* 根据ID查询订单
*/
- @PreAuthorize("@customSs.hasPermission('order/info/query')")
@GetMapping(value = "/{id}")
public R getInfo(@PathVariable("id") String id) {
return R.ok(orderInfoService.selectOrderInfoById(id));
@@ -160,10 +147,9 @@ public class OrderInfoController {
/**
* 根据ID修改订单信息
*/
- @PreAuthorize("@customSs.hasPermission('order/info/edit')")
@Log(title = "修改普通订单", businessType = BusinessType.UPDATE)
@PostMapping(value = "/update/{id}")
- public R update(@PathVariable String id, @RequestBody OrderInfoEntity orderInfoEntity) {
+ public R update(@PathVariable String id, @RequestBody PlayOrderInfoEntity orderInfoEntity) {
orderInfoEntity.setId(id);
boolean success = orderInfoService.update(orderInfoEntity);
if (success) {
@@ -175,7 +161,7 @@ public class OrderInfoController {
/**
* 根据ID进行订单退款
*/
- @PreAuthorize("@customSs.hasPermission('order/info/edit')")
+
@Log(title = "用户发起订单退款申请", businessType = BusinessType.UPDATE)
@PostMapping(value = "/refund/{id}")
public R refund(@RequestBody OrderInfoRefundVo vo) {
@@ -187,7 +173,6 @@ public class OrderInfoController {
/**
* 删除订单
*/
- @PreAuthorize("@customSs.hasPermission('order/info/remove')")
@Log(title = "删除订单", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R remove(@PathVariable String[] ids) {
diff --git a/play-admin/src/main/java/com/starry/admin/modules/order/controller/PlayOrderRewardInfoController.java b/play-admin/src/main/java/com/starry/admin/modules/order/controller/PlayOrderRewardInfoController.java
new file mode 100644
index 0000000..c019158
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/order/controller/PlayOrderRewardInfoController.java
@@ -0,0 +1,42 @@
+package com.starry.admin.modules.order.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.starry.admin.modules.order.module.vo.PlayOrderRewardQueryVo;
+import com.starry.admin.modules.order.module.vo.PlayOrderRewardReturnVo;
+import com.starry.admin.modules.order.service.IPlayOrderInfoService;
+import com.starry.common.annotation.Log;
+import com.starry.common.enums.BusinessType;
+import com.starry.common.result.R;
+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 javax.annotation.Resource;
+
+
+/**
+ * 打赏订单
+ *
+ * @author admin
+ * @since 2024-03-20
+ */
+@RestController
+@RequestMapping("/order/reward/")
+public class PlayOrderRewardInfoController {
+
+
+
+ @Resource
+ private IPlayOrderInfoService orderInfoService;
+
+
+ @Log(title = "查询打赏订单", businessType = BusinessType.INSERT)
+ @PostMapping("/list")
+ public R queryRewardOrder(@RequestBody PlayOrderRewardQueryVo vo) {
+ IPage page = orderInfoService.selectRewardOrderInfoByPage(vo);
+ return R.ok(page);
+ }
+
+
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/order/mapper/OrderDetailsInfoMapper.java b/play-admin/src/main/java/com/starry/admin/modules/order/mapper/OrderDetailsInfoMapper.java
deleted file mode 100644
index fe3ccac..0000000
--- a/play-admin/src/main/java/com/starry/admin/modules/order/mapper/OrderDetailsInfoMapper.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.starry.admin.modules.order.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.starry.admin.modules.order.module.entity.OrderDetailsInfoEntity;
-
-import java.util.List;
-
-/**
- * 订单详细Mapper接口
- *
- * @author admin
- * @since 2024-03-20
- */
-public interface OrderDetailsInfoMapper extends BaseMapper {
- /**
- * 查询订单详细
- *
- * @param id 订单详细主键
- * @return 订单详细
- */
- OrderDetailsInfoEntity selectOrderDetailsInfoById(String id);
-
- /**
- * 查询订单详细列表
- *
- * @param orderDetailsInfo 订单详细
- * @return 订单详细集合
- */
- List selectOrderDetailsInfoList(OrderDetailsInfoEntity orderDetailsInfo);
-
-}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/order/mapper/OrderInfoMapper.java b/play-admin/src/main/java/com/starry/admin/modules/order/mapper/OrderInfoMapper.java
deleted file mode 100644
index 9deabff..0000000
--- a/play-admin/src/main/java/com/starry/admin/modules/order/mapper/OrderInfoMapper.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.starry.admin.modules.order.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.starry.admin.modules.order.module.entity.OrderInfoEntity;
-
-import java.util.List;
-
-/**
- * 订单Mapper接口
- *
- * @author admin
- * @since 2024-03-20
- */
-public interface OrderInfoMapper extends BaseMapper {
- /**
- * 查询订单
- *
- * @param id 订单主键
- * @return 订单
- */
- OrderInfoEntity selectOrderInfoById(String id);
-
- /**
- * 查询订单列表
- *
- * @param orderInfoEntity 订单
- * @return 订单集合
- */
- List selectOrderInfoList(OrderInfoEntity orderInfoEntity);
-
-}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/order/mapper/OrderLogInfoMapper.java b/play-admin/src/main/java/com/starry/admin/modules/order/mapper/OrderLogInfoMapper.java
deleted file mode 100644
index 40474db..0000000
--- a/play-admin/src/main/java/com/starry/admin/modules/order/mapper/OrderLogInfoMapper.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.starry.admin.modules.order.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.starry.admin.modules.order.module.entity.OrderLogInfoEntity;
-
-/**
- * 订单日志Mapper接口
- *
- * @author admin
- * @since 2024-03-22
- */
-public interface OrderLogInfoMapper extends BaseMapper {
-
-
-}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/order/mapper/PlayOrderInfoMapper.java b/play-admin/src/main/java/com/starry/admin/modules/order/mapper/PlayOrderInfoMapper.java
new file mode 100644
index 0000000..0638f5b
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/order/mapper/PlayOrderInfoMapper.java
@@ -0,0 +1,14 @@
+package com.starry.admin.modules.order.mapper;
+
+import com.github.yulichang.base.MPJBaseMapper;
+import com.starry.admin.modules.order.module.entity.PlayOrderInfoEntity;
+
+/**
+ * 订单Mapper接口
+ *
+ * @author admin
+ * @since 2024-03-20
+ */
+public interface PlayOrderInfoMapper extends MPJBaseMapper {
+
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/order/module/entity/OrderDetailsInfoEntity.java b/play-admin/src/main/java/com/starry/admin/modules/order/module/entity/OrderDetailsInfoEntity.java
deleted file mode 100644
index f511b4e..0000000
--- a/play-admin/src/main/java/com/starry/admin/modules/order/module/entity/OrderDetailsInfoEntity.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package com.starry.admin.modules.order.module.entity;
-
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.starry.common.domain.BaseEntity;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-/**
- * 订单详细对象 order_details_info
- *
- * @author admin
- * @since 2024-03-20
- */
-@Data
-@EqualsAndHashCode(callSuper = false)
-@TableName("order_details_info")
-public class OrderDetailsInfoEntity extends BaseEntity {
-
-
- /**
- * UUID
- */
- private String id;
-
- /**
- * 订单ID
- */
- private String orderId;
-
- /**
- * 商品ID(陪玩用户ID or 优惠券)
- */
- private String commodityId;
-
- /**
- * 商品类型【0:1】
- * 0:服务
- * 1:优惠券
- */
- private String commodityType;
-
- /**
- * 备注
- */
- private String remake;
-
-
- public OrderDetailsInfoEntity(String orderId, String commodityId, String commodityType) {
- this.orderId = orderId;
- this.commodityId = commodityId;
- this.commodityType = commodityType;
- }
-}
-
diff --git a/play-admin/src/main/java/com/starry/admin/modules/order/module/entity/OrderLogInfoEntity.java b/play-admin/src/main/java/com/starry/admin/modules/order/module/entity/OrderLogInfoEntity.java
deleted file mode 100644
index c8790dc..0000000
--- a/play-admin/src/main/java/com/starry/admin/modules/order/module/entity/OrderLogInfoEntity.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package com.starry.admin.modules.order.module.entity;
-
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.starry.common.domain.BaseEntity;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-import java.util.Date;
-
-@Data
-@EqualsAndHashCode(callSuper = false)
-@TableName("order_log_info")
-public class OrderLogInfoEntity extends BaseEntity {
-
-
- /**
- * uuid
- */
- private String id;
-
- /**
- * 租户ID
- */
- private String tenantId;
-
- /**
- * 订单ID
- */
- private String orderId;
-
- /**
- * 操作类型
- * 0:下单
- * 1:审核
- * 2:接单
- * 3:服务
- * 4:退款
- * 4:完成
- * 6:取消
- */
- private String operType;
-
- /**
- * 操作时间
- */
- private Date operTime;
-
- /**
- * 备注
- */
- private String remark;
-
-
- public OrderLogInfoEntity(String orderId, String operType, Date operTime) {
- this.orderId = orderId;
- this.operType = operType;
- this.operTime = operTime;
- }
-}
\ No newline at end of file
diff --git a/play-admin/src/main/java/com/starry/admin/modules/order/module/entity/OrderInfoEntity.java b/play-admin/src/main/java/com/starry/admin/modules/order/module/entity/PlayOrderInfoEntity.java
similarity index 55%
rename from play-admin/src/main/java/com/starry/admin/modules/order/module/entity/OrderInfoEntity.java
rename to play-admin/src/main/java/com/starry/admin/modules/order/module/entity/PlayOrderInfoEntity.java
index ac8c08c..30d111d 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/order/module/entity/OrderInfoEntity.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/order/module/entity/PlayOrderInfoEntity.java
@@ -1,11 +1,16 @@
package com.starry.admin.modules.order.module.entity;
+import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
+import com.starry.admin.common.conf.StringTypeHandler;
import com.starry.common.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
+import java.math.BigDecimal;
+import java.util.ArrayList;
import java.util.Date;
+import java.util.List;
/**
* 订单对象 order_info
@@ -16,8 +21,8 @@ import java.util.Date;
@Data
@EqualsAndHashCode(callSuper = false)
-@TableName("order_info")
-public class OrderInfoEntity extends BaseEntity {
+@TableName("play_order_info")
+public class PlayOrderInfoEntity extends BaseEntity {
/**
@@ -52,7 +57,7 @@ public class OrderInfoEntity extends BaseEntity {
private String placeType;
/**
- * 是否是首单【0:不是。1:是】
+ * 是否是首单【0:不是,1:是】
*/
private Boolean firstOrder;
@@ -61,16 +66,47 @@ public class OrderInfoEntity extends BaseEntity {
*/
private String refundType;
+ /**
+ * 商品ID
+ */
+ private String commodityId;
+
+ /**
+ * 商品类型[0:礼物,1:服务]
+ */
+ private String commodityType;
+ /**
+ * 商品单价
+ */
+ private BigDecimal commodityPrice;
+
+ /**
+ * 商品数量
+ */
+ private String commodityNumber;
+
+ /**
+ * 优惠券列表
+ */
+ @TableField(typeHandler = StringTypeHandler.class)
+ private List couponIds = new ArrayList<>();
+
+ /**
+ * 支付方式,0:余额支付,1:微信支付,2:支付宝支付
+ */
+ private String payMethod;
+
+
/**
* 订单金额
*/
- private String orderMoney;
+ private BigDecimal orderMoney;
/**
* 订单最终金额
*/
- private String finalAmount;
+ private BigDecimal finalAmount;
/**
* 下单人
@@ -82,6 +118,11 @@ public class OrderInfoEntity extends BaseEntity {
*/
private Date purchaserTime;
+ /**
+ * 是否需要审核,0:不需要,1:需要
+ */
+ private String reviewRequired;
+
/**
* 审核人
*/
@@ -97,5 +138,21 @@ public class OrderInfoEntity extends BaseEntity {
*/
private String reviewedRemark;
+ /**
+ * 接单人
+ */
+ private String acceptBy;
+
+ /**
+ * 接单时间
+ */
+ private Date acceptTime;
+
+
+ /**
+ * 订单备注
+ */
+ private String remark;
+
}
\ No newline at end of file
diff --git a/play-admin/src/main/java/com/starry/admin/modules/order/module/vo/PlayOrderRewardQueryVo.java b/play-admin/src/main/java/com/starry/admin/modules/order/module/vo/PlayOrderRewardQueryVo.java
new file mode 100644
index 0000000..d4f1b22
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/order/module/vo/PlayOrderRewardQueryVo.java
@@ -0,0 +1,16 @@
+package com.starry.admin.modules.order.module.vo;
+
+
+import com.starry.common.domain.BasePageEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 打赏订单查询对象
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class PlayOrderRewardQueryVo extends BasePageEntity {
+
+
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/order/module/vo/PlayOrderRewardReturnVo.java b/play-admin/src/main/java/com/starry/admin/modules/order/module/vo/PlayOrderRewardReturnVo.java
new file mode 100644
index 0000000..68345ef
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/order/module/vo/PlayOrderRewardReturnVo.java
@@ -0,0 +1,80 @@
+package com.starry.admin.modules.order.module.vo;
+
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 打赏订单查询返回信息
+ */
+@Data
+public class PlayOrderRewardReturnVo {
+
+ /**
+ * 订单ID
+ */
+ private String id;
+
+ /**
+ * 用户ID
+ */
+ private String customUserId;
+
+ /**
+ * 用户昵称
+ */
+ private String customUserNickname;
+
+
+ /**
+ * 用户头像
+ */
+ private String customUserAvatar;
+
+
+ /**
+ * 店员ID
+ */
+ private String clerkUserId;
+
+ /**
+ * 店员昵称
+ */
+ private String clerkUserNickname;
+
+ /**
+ * 店员头像
+ */
+ private String clerkUserAvatar;
+
+
+ /**
+ * 打赏类型
+ */
+ private String rewardType;
+
+
+ /**
+ * 订单金额
+ */
+ private String orderMoney;
+
+
+ /**
+ * 支付金额
+ */
+ private String finalAmount;
+
+
+ /**
+ * 打赏留言
+ */
+ private String remark;
+
+ /**
+ * 打赏时间
+ */
+ private Date purchaserTime;
+
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/order/service/IOrderDetailsInfoService.java b/play-admin/src/main/java/com/starry/admin/modules/order/service/IOrderDetailsInfoService.java
deleted file mode 100644
index f0e1638..0000000
--- a/play-admin/src/main/java/com/starry/admin/modules/order/service/IOrderDetailsInfoService.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package com.starry.admin.modules.order.service;
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.starry.admin.modules.order.module.entity.OrderDetailsInfoEntity;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-
-/**
- * 订单详细Service接口
- *
- * @author admin
- * @since 2024-03-20
- */
-@Service
-public interface IOrderDetailsInfoService extends IService {
- /**
- * 查询订单详细
- *
- * @param id 订单详细主键
- * @return 订单详细
- */
- OrderDetailsInfoEntity selectOrderDetailsInfoById(String id);
-
- /**
- * 查询订单详细列表
- *
- * @param orderDetailsInfo 订单详细
- * @return 订单详细集合
- */
- List selectOrderDetailsInfoList(OrderDetailsInfoEntity orderDetailsInfo);
-
- /**
- * 新增订单详细
- *
- * @param orderDetailsInfo 订单详细
- * @return 结果
- */
- boolean create(OrderDetailsInfoEntity orderDetailsInfo);
-
- /**
- * 修改订单详细
- *
- * @param orderDetailsInfo 订单详细
- * @return 结果
- */
- boolean update(OrderDetailsInfoEntity orderDetailsInfo);
-
- /**
- * 批量删除订单详细
- *
- * @param ids 需要删除的订单详细主键集合
- * @return 结果
- */
- int deleteOrderDetailsInfoByIds(String[] ids);
-
- /**
- * 删除订单详细信息
- *
- * @param id 订单详细主键
- * @return 结果
- */
- int deleteOrderDetailsInfoById(String id);
-}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/order/service/IOrderInfoService.java b/play-admin/src/main/java/com/starry/admin/modules/order/service/IOrderInfoService.java
deleted file mode 100644
index 18e21ee..0000000
--- a/play-admin/src/main/java/com/starry/admin/modules/order/service/IOrderInfoService.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package com.starry.admin.modules.order.service;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.starry.admin.modules.order.module.entity.OrderInfoEntity;
-import com.starry.admin.modules.order.module.vo.OrderInfoQueryVo;
-import org.springframework.stereotype.Service;
-
-/**
- * 订单Service接口
- *
- * @author admin
- * @since 2024-03-20
- */
-@Service
-public interface IOrderInfoService extends IService {
- /**
- * 查询订单
- *
- * @param id 订单主键
- * @return 订单
- */
- OrderInfoEntity selectOrderInfoById(String id);
-
- /**
- * 查询订单列表
- *
- * @param orderInfoEntity 订单
- * @return 订单集合
- */
- IPage selectOrderInfoList(OrderInfoQueryVo orderInfoEntity);
-
- /**
- * 新增订单
- *
- * @param orderInfoEntity 订单
- * @return 结果
- */
- boolean create(OrderInfoEntity orderInfoEntity);
-
- /**
- * 修改订单
- *
- * @param orderInfoEntity 订单
- * @return 结果
- */
- boolean update(OrderInfoEntity orderInfoEntity);
-
- /**
- * 批量删除订单
- *
- * @param ids 需要删除的订单主键集合
- * @return 结果
- */
- int deleteOrderInfoByIds(String[] ids);
-
- /**
- * 删除订单信息
- *
- * @param id 订单主键
- * @return 结果
- */
- int deleteOrderInfoById(String id);
-
-
- /**
- * 订单退款
- *
- * @param id 订单ID
- * @param refundType 退款类型【1:部分退款,2:全部退款】
- * @param refundMoney 退款金额,单位分(仅部分退款有效)
- * @param examine 是否需要审核
- */
- void orderRefund(String id, String refundType, String refundMoney, boolean examine);
-
-
-}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/order/service/IOrderLogInfoService.java b/play-admin/src/main/java/com/starry/admin/modules/order/service/IOrderLogInfoService.java
deleted file mode 100644
index b916bd8..0000000
--- a/play-admin/src/main/java/com/starry/admin/modules/order/service/IOrderLogInfoService.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.starry.admin.modules.order.service;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.starry.admin.modules.order.module.entity.OrderLogInfoEntity;
-
-/**
- * 订单日志Service接口
- *
- * @author admin
- * @since 2024-03-22
- */
-public interface IOrderLogInfoService extends IService {
- /**
- * 查询订单日志
- *
- * @param id 订单日志主键
- * @return 订单日志
- */
- OrderLogInfoEntity selectOrderLogInfoById(String id);
-
- /**
- * 查询订单日志列表
- *
- * @param orderLogInfo 订单日志
- * @return 订单日志集合
- */
- IPage selectOrderLogInfoByPage(OrderLogInfoEntity orderLogInfo);
-
- /**
- * 新增订单日志
- *
- * @param orderLogInfo 订单日志
- * @return 结果
- */
- boolean create(OrderLogInfoEntity orderLogInfo);
-
- /**
- * 修改订单日志
- *
- * @param orderLogInfo 订单日志
- * @return 结果
- */
- boolean update(OrderLogInfoEntity orderLogInfo);
-
- /**
- * 批量删除订单日志
- *
- * @param ids 需要删除的订单日志主键集合
- * @return 结果
- */
- int deleteOrderLogInfoByIds(String[] ids);
-
- /**
- * 删除订单日志信息
- *
- * @param id 订单日志主键
- * @return 结果
- */
- int deleteOrderLogInfoById(String id);
-}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/order/service/IPlayOrderInfoService.java b/play-admin/src/main/java/com/starry/admin/modules/order/service/IPlayOrderInfoService.java
new file mode 100644
index 0000000..6a8e868
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/order/service/IPlayOrderInfoService.java
@@ -0,0 +1,145 @@
+package com.starry.admin.modules.order.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.starry.admin.modules.order.module.entity.PlayOrderInfoEntity;
+import com.starry.admin.modules.order.module.vo.OrderInfoQueryVo;
+import com.starry.admin.modules.order.module.vo.PlayOrderRewardQueryVo;
+import com.starry.admin.modules.order.module.vo.PlayOrderRewardReturnVo;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+
+/**
+ * 订单Service接口
+ *
+ * @author admin
+ * @since 2024-03-20
+ */
+@Service
+public interface IPlayOrderInfoService extends IService {
+
+
+ /**
+ * 新增充值单
+ *
+ * @param orderMoney 订单金额
+ * @param finalAmount 订单最终金额(支付金额)
+ * @param purchaserBy 下单人ID
+ */
+ void createRechargeOrder(BigDecimal orderMoney, BigDecimal finalAmount, String purchaserBy);
+
+
+ /**
+ * 新增打赏单
+ *
+ * @param orderMoney 订单金额
+ * @param finalAmount 订单最终金额(支付金额)
+ * @param purchaserBy 下单人ID
+ */
+ void createRewardOrder(BigDecimal orderMoney, BigDecimal finalAmount, String purchaserBy);
+
+
+ /**
+ * 新增赠送礼物订单
+ *
+ * @param commodityId 商品ID(礼物ID)
+ * @param commodityPrice 商品单价(礼物单价)
+ * @param commodityNumber 商品数量(礼物数量)
+ * @param orderMoney 订单金额
+ * @param finalAmount 订单最终金额(支付金额)
+ * @param purchaserBy 下单人ID
+ */
+ void createGiftOrder(String commodityId, BigDecimal commodityPrice, String commodityNumber, BigDecimal orderMoney, BigDecimal finalAmount, String purchaserBy);
+
+
+ /**
+ * 新增普通订单
+ *
+ * @param orderStatus 订单状态【0:1:2:3:4:5】
+ * * 0:已下单
+ * * 1:已审核(退款 或者 提现需要审核,其余不需要)
+ * * 2:已接单
+ * * 3:已开始
+ * * 4:已完成
+ * * 5:已取消
+ * @param placeType 下单类型(0:指定单,1:随机单。2:打赏单)
+ * @param commodityId 商品ID
+ * @param commodityPrice 商品单价
+ * @param commodityNumber 商品数量
+ * @param orderMoney 订单金额
+ * @param finalAmount 订单最终金额(支付金额)
+ * @param purchaserBy 下单人ID
+ */
+ void createOrdinaryOrder(String orderStatus, String placeType, String commodityId, BigDecimal commodityPrice, String commodityNumber, BigDecimal orderMoney, BigDecimal finalAmount, String purchaserBy);
+
+
+ /**
+ * 分页查询打赏订单
+ *
+ * @param vo 打赏订单查询对象
+ * @return 打赏订单
+ */
+ IPage selectRewardOrderInfoByPage(PlayOrderRewardQueryVo vo);
+
+ /**
+ * 查询订单
+ *
+ * @param id 订单主键
+ * @return 订单
+ */
+ PlayOrderInfoEntity selectOrderInfoById(String id);
+
+ /**
+ * 查询订单列表
+ *
+ * @param orderInfoEntity 订单
+ * @return 订单集合
+ */
+ IPage selectOrderInfoList(OrderInfoQueryVo orderInfoEntity);
+
+ /**
+ * 新增订单
+ *
+ * @param orderInfoEntity 订单
+ * @return 结果
+ */
+ boolean create(PlayOrderInfoEntity orderInfoEntity);
+
+ /**
+ * 修改订单
+ *
+ * @param orderInfoEntity 订单
+ * @return 结果
+ */
+ boolean update(PlayOrderInfoEntity orderInfoEntity);
+
+ /**
+ * 批量删除订单
+ *
+ * @param ids 需要删除的订单主键集合
+ * @return 结果
+ */
+ int deleteOrderInfoByIds(String[] ids);
+
+ /**
+ * 删除订单信息
+ *
+ * @param id 订单主键
+ * @return 结果
+ */
+ int deleteOrderInfoById(String id);
+
+
+ /**
+ * 订单退款
+ *
+ * @param id 订单ID
+ * @param refundType 退款类型【1:部分退款,2:全部退款】
+ * @param refundMoney 退款金额,单位分(仅部分退款有效)
+ * @param examine 是否需要审核
+ */
+ void orderRefund(String id, String refundType, String refundMoney, boolean examine);
+
+
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/order/service/impl/OrderDetailsInfoServiceImpl.java b/play-admin/src/main/java/com/starry/admin/modules/order/service/impl/OrderDetailsInfoServiceImpl.java
deleted file mode 100644
index 4b22380..0000000
--- a/play-admin/src/main/java/com/starry/admin/modules/order/service/impl/OrderDetailsInfoServiceImpl.java
+++ /dev/null
@@ -1,94 +0,0 @@
-package com.starry.admin.modules.order.service.impl;
-
-import cn.hutool.core.util.IdUtil;
-import cn.hutool.core.util.StrUtil;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.starry.admin.modules.order.mapper.OrderDetailsInfoMapper;
-import com.starry.admin.modules.order.module.entity.OrderDetailsInfoEntity;
-import com.starry.admin.modules.order.service.IOrderDetailsInfoService;
-import org.springframework.stereotype.Service;
-
-import javax.annotation.Resource;
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * 订单详细Service业务层处理
- *
- * @author admin
- * @since 2024-03-20
- */
-@Service
-public class OrderDetailsInfoServiceImpl extends ServiceImpl implements IOrderDetailsInfoService {
- @Resource
- private OrderDetailsInfoMapper orderDetailsInfoMapper;
-
- /**
- * 查询订单详细
- *
- * @param id 订单详细主键
- * @return 订单详细
- */
- @Override
- public OrderDetailsInfoEntity selectOrderDetailsInfoById(String id) {
- return orderDetailsInfoMapper.selectOrderDetailsInfoById(id);
- }
-
- /**
- * 查询订单详细列表
- *
- * @param orderDetailsInfo 订单详细
- * @return 订单详细
- */
- @Override
- public List selectOrderDetailsInfoList(OrderDetailsInfoEntity orderDetailsInfo) {
- return orderDetailsInfoMapper.selectOrderDetailsInfoList(orderDetailsInfo);
- }
-
- /**
- * 新增订单详细
- *
- * @param orderDetailsInfo 订单详细
- * @return 结果
- */
- @Override
- public boolean create(OrderDetailsInfoEntity orderDetailsInfo) {
- if (StrUtil.isBlankIfStr(orderDetailsInfo.getId())) {
- orderDetailsInfo.setId(IdUtil.fastSimpleUUID());
- }
- return save(orderDetailsInfo);
- }
-
- /**
- * 修改订单详细
- *
- * @param orderDetailsInfo 订单详细
- * @return 结果
- */
- @Override
- public boolean update(OrderDetailsInfoEntity orderDetailsInfo) {
- return updateById(orderDetailsInfo);
- }
-
- /**
- * 批量删除订单详细
- *
- * @param ids 需要删除的订单详细主键
- * @return 结果
- */
- @Override
- public int deleteOrderDetailsInfoByIds(String[] ids) {
- return orderDetailsInfoMapper.deleteBatchIds(Arrays.asList(ids));
- }
-
- /**
- * 删除订单详细信息
- *
- * @param id 订单详细主键
- * @return 结果
- */
- @Override
- public int deleteOrderDetailsInfoById(String id) {
- return orderDetailsInfoMapper.deleteById(id);
- }
-}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/order/service/impl/OrderInfoServiceImpl.java b/play-admin/src/main/java/com/starry/admin/modules/order/service/impl/OrderInfoServiceImpl.java
deleted file mode 100644
index f43be4d..0000000
--- a/play-admin/src/main/java/com/starry/admin/modules/order/service/impl/OrderInfoServiceImpl.java
+++ /dev/null
@@ -1,166 +0,0 @@
-package com.starry.admin.modules.order.service.impl;
-
-import cn.hutool.core.util.IdUtil;
-import cn.hutool.core.util.StrUtil;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.starry.admin.common.exception.CustomException;
-import com.starry.admin.modules.order.mapper.OrderInfoMapper;
-import com.starry.admin.modules.order.module.entity.OrderInfoEntity;
-import com.starry.admin.modules.order.module.entity.OrderLogInfoEntity;
-import com.starry.admin.modules.order.module.vo.OrderInfoQueryVo;
-import com.starry.admin.modules.order.service.IOrderInfoService;
-import com.starry.admin.modules.order.service.IOrderLogInfoService;
-import com.starry.admin.modules.play.service.IPlayUserInfoService;
-import org.springframework.stereotype.Service;
-
-import javax.annotation.Resource;
-import java.util.Arrays;
-import java.util.Date;
-
-/**
- * 订单Service业务层处理
- *
- * @author admin
- * @since 2024-03-20
- */
-@Service
-public class OrderInfoServiceImpl extends ServiceImpl implements IOrderInfoService {
- @Resource
- private OrderInfoMapper orderInfoMapper;
-
- @Resource
- private IOrderLogInfoService orderLogInfoService;
-
- @Resource
- private IPlayUserInfoService playUserInfoService;
-
- /**
- * 计算退款金额
- *
- * @param refundType 退款类型【1:部分退款,2:全部退款】
- * @param refundMoney 退款金额,单位分(仅部分退款有效)
- * @param entity 订单信息
- * @return 最终退款金额
- */
- private static long getFinalAmount(String refundType, String refundMoney, OrderInfoEntity entity) {
- long finalAmount = 0;
- // 部分退款,计算退款金额是否小于订单金额
- if ("1".equals(refundType)) {
- // 退款金额
- long refundMoneyLong = Long.getLong(refundMoney);
- // 订单金额
- long orderMoney = Long.getLong(entity.getOrderMoney());
- if (refundMoneyLong <= 0) {
- throw new CustomException("退款金额必须大于0");
- }
- if (orderMoney < refundMoneyLong) {
- throw new CustomException("退款金额必须小于订单总金额");
- }
- finalAmount = orderMoney - refundMoneyLong;
- }
- return finalAmount;
- }
-
- /**
- * 查询订单
- *
- * @param id 订单主键
- * @return 订单
- */
- @Override
- public OrderInfoEntity selectOrderInfoById(String id) {
- return orderInfoMapper.selectOrderInfoById(id);
- }
-
- /**
- * 分页查询订单信息
- *
- * @param vo 订单分页查询对象
- * @return 订单分页查询结果
- */
- @Override
- public IPage selectOrderInfoList(OrderInfoQueryVo vo) {
- Page page = new Page<>(vo.getPageNum(), vo.getPageSize());
- LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
- return this.baseMapper.selectPage(page, queryWrapper);
- }
-
- /**
- * 新增订单
- *
- * @param orderInfo 订单
- * @return 结果
- */
- @Override
- public boolean create(OrderInfoEntity orderInfo) {
- if (StrUtil.isBlankIfStr(orderInfo.getId())) {
- orderInfo.setId(IdUtil.fastSimpleUUID());
- }
- orderInfo.setPurchaserBy("sysadmin");
- orderInfo.setPurchaserTime(new Date());
- orderInfo.setReviewedBy("sysadmin");
- orderInfo.setReviewedTime(new Date());
- return save(orderInfo);
- }
-
- /**
- * 修改订单
- *
- * @param orderInfo 订单
- * @return 结果
- */
- @Override
- public boolean update(OrderInfoEntity orderInfo) {
- return updateById(orderInfo);
- }
-
- /**
- * 批量删除订单
- *
- * @param ids 需要删除的订单主键
- * @return 结果
- */
- @Override
- public int deleteOrderInfoByIds(String[] ids) {
- return orderInfoMapper.deleteBatchIds(Arrays.asList(ids));
- }
-
- /**
- * 删除订单信息
- *
- * @param id 订单主键
- * @return 结果
- */
- @Override
- public int deleteOrderInfoById(String id) {
- return orderInfoMapper.deleteById(id);
- }
-
- @Override
- public void orderRefund(String id, String refundType, String refundMoney, boolean examine) {
- OrderInfoEntity entity = this.selectOrderInfoById(id);
- if (entity == null) {
- throw new CustomException("订单不存在");
- }
- if (!"0".equals(entity.getRefundType())) {
- throw new CustomException("订单已退款,无法二次退款");
- }
- // 最终退款金额
- long finalAmount = getFinalAmount(refundType, refundMoney, entity);
-
- // 减少陪玩余额
-// playUserInfoService.editAccountBalance(id, String.valueOf(finalAmount), "reduce");
- // 新增用户余额
-
- // 修改订单信息
- entity.setFinalAmount(String.valueOf(finalAmount));
- entity.setRefundType(refundType);
- entity.setOrderStatus("5");
- this.update(entity);
- // 增加订单处理日志
- orderLogInfoService.create(new OrderLogInfoEntity(entity.getId(), "4", new Date()));
- }
-}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/order/service/impl/OrderLogInfoServiceImpl.java b/play-admin/src/main/java/com/starry/admin/modules/order/service/impl/OrderLogInfoServiceImpl.java
deleted file mode 100644
index 8fe0127..0000000
--- a/play-admin/src/main/java/com/starry/admin/modules/order/service/impl/OrderLogInfoServiceImpl.java
+++ /dev/null
@@ -1,98 +0,0 @@
-package com.starry.admin.modules.order.service.impl;
-
-import cn.hutool.core.util.IdUtil;
-import cn.hutool.core.util.StrUtil;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.starry.admin.modules.order.mapper.OrderLogInfoMapper;
-import com.starry.admin.modules.order.module.entity.OrderLogInfoEntity;
-import com.starry.admin.modules.order.service.IOrderLogInfoService;
-import org.springframework.stereotype.Service;
-
-import javax.annotation.Resource;
-import java.util.Arrays;
-
-
-/**
- * 订单日志Service业务层处理
- *
- * @author admin
- * @since 2024-03-22
- */
-@Service
-public class OrderLogInfoServiceImpl extends ServiceImpl implements IOrderLogInfoService {
- @Resource
- private OrderLogInfoMapper orderLogInfoMapper;
-
- /**
- * 查询订单日志
- *
- * @param id 订单日志主键
- * @return 订单日志
- */
- @Override
- public OrderLogInfoEntity selectOrderLogInfoById(String id) {
- return this.baseMapper.selectById(id);
- }
-
- /**
- * 查询订单日志列表
- *
- * @param orderLogInfo 订单日志
- * @return 订单日志
- */
- @Override
- public IPage selectOrderLogInfoByPage(OrderLogInfoEntity orderLogInfo) {
- Page page = new Page<>(1, 10);
- return this.baseMapper.selectPage(page, new LambdaQueryWrapper<>());
- }
-
- /**
- * 新增订单日志
- *
- * @param orderLogInfo 订单日志
- * @return 结果
- */
- @Override
- public boolean create(OrderLogInfoEntity orderLogInfo) {
- if (StrUtil.isBlankIfStr(orderLogInfo.getId())) {
- orderLogInfo.setId(IdUtil.fastSimpleUUID());
- }
- return save(orderLogInfo);
- }
-
- /**
- * 修改订单日志
- *
- * @param orderLogInfo 订单日志
- * @return 结果
- */
- @Override
- public boolean update(OrderLogInfoEntity orderLogInfo) {
- return updateById(orderLogInfo);
- }
-
- /**
- * 批量删除订单日志
- *
- * @param ids 需要删除的订单日志主键
- * @return 结果
- */
- @Override
- public int deleteOrderLogInfoByIds(String[] ids) {
- return orderLogInfoMapper.deleteBatchIds(Arrays.asList(ids));
- }
-
- /**
- * 删除订单日志信息
- *
- * @param id 订单日志主键
- * @return 结果
- */
- @Override
- public int deleteOrderLogInfoById(String id) {
- return orderLogInfoMapper.deleteById(id);
- }
-}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/order/service/impl/PlayOrderInfoServiceImpl.java b/play-admin/src/main/java/com/starry/admin/modules/order/service/impl/PlayOrderInfoServiceImpl.java
new file mode 100644
index 0000000..9c2fd46
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/order/service/impl/PlayOrderInfoServiceImpl.java
@@ -0,0 +1,246 @@
+package com.starry.admin.modules.order.service.impl;
+
+import cn.hutool.core.util.IdUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import com.starry.admin.common.exception.CustomException;
+import com.starry.admin.modules.clear.module.entity.PlayClerkUserInfoEntity;
+import com.starry.admin.modules.custom.module.entity.PlayCustomUserInfoEntity;
+import com.starry.admin.modules.order.mapper.PlayOrderInfoMapper;
+import com.starry.admin.modules.order.module.entity.PlayOrderInfoEntity;
+import com.starry.admin.modules.order.module.vo.OrderInfoQueryVo;
+import com.starry.admin.modules.order.module.vo.PlayOrderRewardQueryVo;
+import com.starry.admin.modules.order.module.vo.PlayOrderRewardReturnVo;
+import com.starry.admin.modules.order.service.IPlayOrderInfoService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.util.Arrays;
+import java.util.Date;
+
+/**
+ * 订单Service业务层处理
+ *
+ * @author admin
+ * @since 2024-03-20
+ */
+@Service
+public class PlayOrderInfoServiceImpl extends ServiceImpl implements IPlayOrderInfoService {
+ @Resource
+ private PlayOrderInfoMapper orderInfoMapper;
+
+
+ @Override
+ public void createRechargeOrder(BigDecimal orderMoney, BigDecimal finalAmount, String purchaserBy) {
+ PlayOrderInfoEntity entity = new PlayOrderInfoEntity();
+ entity.setOrderStatus("4");
+ entity.setOrderType("0");
+ entity.setOrderMoney(orderMoney);
+ entity.setFinalAmount(finalAmount);
+ entity.setPurchaserBy(purchaserBy);
+ this.baseMapper.insert(entity);
+ }
+
+ /**
+ * 新增打赏单
+ * 打赏订单直接完成
+ *
+ * @param orderMoney 订单金额
+ * @param finalAmount 订单最终金额(支付金额)
+ * @param purchaserBy 下单人ID
+ */
+ @Override
+ public void createRewardOrder(BigDecimal orderMoney, BigDecimal finalAmount, String purchaserBy) {
+ PlayOrderInfoEntity entity = new PlayOrderInfoEntity();
+ entity.setOrderStatus("4");
+ entity.setOrderType("2");
+ entity.setPlaceType("2");
+ entity.setOrderMoney(orderMoney);
+ entity.setFinalAmount(finalAmount);
+ entity.setPurchaserBy(purchaserBy);
+ this.baseMapper.insert(entity);
+
+ }
+
+ @Override
+ public void createGiftOrder(String commodityId, BigDecimal commodityPrice, String commodityNumber, BigDecimal orderMoney, BigDecimal finalAmount, String purchaserBy) {
+ PlayOrderInfoEntity entity = new PlayOrderInfoEntity();
+ entity.setOrderStatus("4");
+ entity.setOrderType("2");
+ entity.setPlaceType("2");
+ entity.setCommodityId(commodityId);
+ entity.setCommodityPrice(commodityPrice);
+ entity.setCommodityType("0");
+ entity.setOrderMoney(orderMoney);
+ entity.setFinalAmount(finalAmount);
+ entity.setPurchaserBy(purchaserBy);
+ this.baseMapper.insert(entity);
+ }
+
+ @Override
+ public void createOrdinaryOrder(String orderStatus, String placeType, String commodityId, BigDecimal commodityPrice, String commodityNumber, BigDecimal orderMoney, BigDecimal finalAmount, String purchaserBy) {
+ PlayOrderInfoEntity entity = new PlayOrderInfoEntity();
+ entity.setOrderStatus(orderStatus);
+ entity.setOrderType("2");
+ entity.setPlaceType(placeType);
+ entity.setCommodityId(commodityId);
+ entity.setCommodityPrice(commodityPrice);
+ entity.setCommodityNumber(commodityNumber);
+ entity.setCommodityType("0");
+ entity.setOrderMoney(orderMoney);
+ entity.setFinalAmount(finalAmount);
+ entity.setPurchaserBy(purchaserBy);
+ this.baseMapper.insert(entity);
+ }
+
+ /**
+ * 计算退款金额
+ *
+ * @param refundType 退款类型【1:部分退款,2:全部退款】
+ * @param refundMoney 退款金额,单位分(仅部分退款有效)
+ * @param entity 订单信息
+ * @return 最终退款金额
+ */
+ private static long getFinalAmount(String refundType, String refundMoney, PlayOrderInfoEntity entity) {
+ long finalAmount = 0;
+// // 部分退款,计算退款金额是否小于订单金额
+// if ("1".equals(refundType)) {
+// // 退款金额
+// long refundMoneyLong = Long.getLong(refundMoney);
+// // 订单金额
+// long orderMoney = Long.getLong(entity.getOrderMoney());
+// if (refundMoneyLong <= 0) {
+// throw new CustomException("退款金额必须大于0");
+// }
+// if (orderMoney < refundMoneyLong) {
+// throw new CustomException("退款金额必须小于订单总金额");
+// }
+// finalAmount = orderMoney - refundMoneyLong;
+// }
+ return finalAmount;
+ }
+
+
+ @Override
+ public IPage selectRewardOrderInfoByPage(PlayOrderRewardQueryVo vo) {
+ MPJLambdaWrapper lambdaQueryWrapper = new MPJLambdaWrapper()
+ //查询主表全部字段
+ .selectAll(PlayOrderInfoEntity.class)
+ //查询顾客表
+ .selectAs(PlayCustomUserInfoEntity::getId, "customUserId").selectAs(PlayCustomUserInfoEntity::getAvatar, "customUserAvatar").selectAs(PlayCustomUserInfoEntity::getNickname, "customUserNickname")
+ //查询陪玩表
+ .selectAs(PlayClerkUserInfoEntity::getId, "clerkUserId").selectAs(PlayClerkUserInfoEntity::getAvatar, "clerkUserAvatar").selectAs(PlayClerkUserInfoEntity::getNickname, "clerkUserNickname")
+ //子表
+ .leftJoin(PlayCustomUserInfoEntity.class, PlayCustomUserInfoEntity::getId, PlayOrderInfoEntity::getPurchaserBy)
+ .leftJoin(PlayClerkUserInfoEntity.class, PlayClerkUserInfoEntity::getId, PlayOrderInfoEntity::getAcceptBy);
+ lambdaQueryWrapper.eq(PlayOrderInfoEntity::getPlaceType, "2");
+ lambdaQueryWrapper.orderByDesc(PlayOrderInfoEntity::getPurchaserTime);
+ return this.baseMapper.selectJoinPage(new Page<>(vo.getPageNum(), vo.getPageSize()), PlayOrderRewardReturnVo.class, lambdaQueryWrapper);
+
+ }
+
+ /**
+ * 查询订单
+ *
+ * @param id 订单主键
+ * @return 订单
+ */
+ @Override
+ public PlayOrderInfoEntity selectOrderInfoById(String id) {
+ return orderInfoMapper.selectById(id);
+ }
+
+ /**
+ * 分页查询订单信息
+ *
+ * @param vo 订单分页查询对象
+ * @return 订单分页查询结果
+ */
+ @Override
+ public IPage selectOrderInfoList(OrderInfoQueryVo vo) {
+ Page page = new Page<>(vo.getPageNum(), vo.getPageSize());
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ return this.baseMapper.selectPage(page, queryWrapper);
+ }
+
+ /**
+ * 新增订单
+ *
+ * @param orderInfo 订单
+ * @return 结果
+ */
+ @Override
+ public boolean create(PlayOrderInfoEntity orderInfo) {
+ if (StrUtil.isBlankIfStr(orderInfo.getId())) {
+ orderInfo.setId(IdUtil.fastSimpleUUID());
+ }
+ orderInfo.setPurchaserBy("sysadmin");
+ orderInfo.setPurchaserTime(new Date());
+ orderInfo.setReviewedBy("sysadmin");
+ orderInfo.setReviewedTime(new Date());
+ return save(orderInfo);
+ }
+
+ /**
+ * 修改订单
+ *
+ * @param orderInfo 订单
+ * @return 结果
+ */
+ @Override
+ public boolean update(PlayOrderInfoEntity orderInfo) {
+ return updateById(orderInfo);
+ }
+
+ /**
+ * 批量删除订单
+ *
+ * @param ids 需要删除的订单主键
+ * @return 结果
+ */
+ @Override
+ public int deleteOrderInfoByIds(String[] ids) {
+ return orderInfoMapper.deleteBatchIds(Arrays.asList(ids));
+ }
+
+ /**
+ * 删除订单信息
+ *
+ * @param id 订单主键
+ * @return 结果
+ */
+ @Override
+ public int deleteOrderInfoById(String id) {
+ return orderInfoMapper.deleteById(id);
+ }
+
+ @Override
+ public void orderRefund(String id, String refundType, String refundMoney, boolean examine) {
+ PlayOrderInfoEntity entity = this.selectOrderInfoById(id);
+ if (entity == null) {
+ throw new CustomException("订单不存在");
+ }
+ if (!"0".equals(entity.getRefundType())) {
+ throw new CustomException("订单已退款,无法二次退款");
+ }
+ // 最终退款金额
+ long finalAmount = getFinalAmount(refundType, refundMoney, entity);
+
+ // 减少陪玩余额
+// playUserInfoService.editAccountBalance(id, String.valueOf(finalAmount), "reduce");
+ // 新增用户余额
+
+ // 修改订单信息
+// entity.setFinalAmount(String.valueOf(finalAmount));
+ entity.setRefundType(refundType);
+ entity.setOrderStatus("5");
+ this.update(entity);
+ // 增加订单处理日志
+// orderLogInfoService.create(new OrderLogInfoEntity(entity.getId(), "4", new Date()));
+ }
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/platform/controller/SysTenantController.java b/play-admin/src/main/java/com/starry/admin/modules/platform/controller/SysTenantController.java
index 27a07bd..f06183a 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/platform/controller/SysTenantController.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/platform/controller/SysTenantController.java
@@ -10,11 +10,11 @@ import com.starry.common.enums.BusinessType;
import com.starry.common.result.R;
import com.starry.common.utils.ConvertUtil;
import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
-import javax.validation.Valid;
/**
@@ -35,7 +35,7 @@ public class SysTenantController {
@PreAuthorize("@customSs.hasPermission('platform:tenant:create')")
@Log(title = "租户表", businessType = BusinessType.INSERT)
@PostMapping("/create")
- public R create(@Valid @RequestBody SysTenantAddVo vo) {
+ public R create(@Validated @RequestBody SysTenantAddVo vo) {
SysTenantEntity entity = ConvertUtil.entityToVo(vo, SysTenantEntity.class);
return sysTenantService.addTenant(entity);
}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/platform/entity/SysTenantEntity.java b/play-admin/src/main/java/com/starry/admin/modules/platform/entity/SysTenantEntity.java
index 2c7e9dc..e18714d 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/platform/entity/SysTenantEntity.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/platform/entity/SysTenantEntity.java
@@ -116,6 +116,11 @@ public class SysTenantEntity extends BaseEntity {
*/
private String appId;
+ /**
+ * 微信商户ID
+ */
+ private String mchId;
+
/**
* 微信公众号的app secret
diff --git a/play-admin/src/main/java/com/starry/admin/modules/play/controller/PlayNoticeInfoController.java b/play-admin/src/main/java/com/starry/admin/modules/play/controller/PlayNoticeInfoController.java
index c881251..94b3767 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/play/controller/PlayNoticeInfoController.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/play/controller/PlayNoticeInfoController.java
@@ -9,10 +9,10 @@ import com.starry.common.enums.BusinessType;
import com.starry.common.result.R;
import com.starry.common.utils.ConvertUtil;
import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
-import javax.validation.Valid;
/**
* 公告Controller
@@ -62,7 +62,7 @@ public class PlayNoticeInfoController {
@PreAuthorize("@customSs.hasPermission('play:info:create')")
@Log(title = "公告", businessType = BusinessType.INSERT)
@PostMapping("/create")
- public R create(@Valid @RequestBody PlayNoticeInfoAddVo vo) {
+ public R create(@Validated @RequestBody PlayNoticeInfoAddVo vo) {
PlayNoticeInfoEntity entity = ConvertUtil.entityToVo(vo, PlayNoticeInfoEntity.class);
boolean success = playNoticeInfoService.create(entity);
if (success) {
diff --git a/play-admin/src/main/java/com/starry/admin/modules/play/module/entity/PlayCommodityInfoEntity.java b/play-admin/src/main/java/com/starry/admin/modules/play/module/entity/PlayCommodityInfoEntity.java
index d679d86..f085f97 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/play/module/entity/PlayCommodityInfoEntity.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/play/module/entity/PlayCommodityInfoEntity.java
@@ -5,6 +5,8 @@ import com.starry.common.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
+import java.math.BigDecimal;
+
/**
* 服务项目对象 play_commodity_info
*
@@ -45,7 +47,7 @@ public class PlayCommodityInfoEntity extends BaseEntity
/**
* 服务单价
*/
- private String price;
+ private BigDecimal price;
}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/system/controller/SysMenuController.java b/play-admin/src/main/java/com/starry/admin/modules/system/controller/SysMenuController.java
index 62251e1..a1363eb 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/system/controller/SysMenuController.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/system/controller/SysMenuController.java
@@ -88,6 +88,7 @@ public class SysMenuController {
return R.error("修改失败");
}
+
@ApiOperation("删除菜单")
@PreAuthorize("@customSs.hasPermission('system:menu:delete')")
@PostMapping(value = "/delete/{id}")
diff --git a/play-admin/src/main/java/com/starry/admin/modules/system/controller/SysRoleController.java b/play-admin/src/main/java/com/starry/admin/modules/system/controller/SysRoleController.java
index 8076b78..aa066d8 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/system/controller/SysRoleController.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/system/controller/SysRoleController.java
@@ -20,10 +20,10 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils;
import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
-import javax.validation.Valid;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -51,7 +51,7 @@ public class SysRoleController {
@ApiOperation("添加角色")
@PreAuthorize("@customSs.hasPermission('system:role:create')")
@PostMapping("/create")
- public R create(@Valid @RequestBody SysRoleAddVo roleAddVo) {
+ public R create(@Validated @RequestBody SysRoleAddVo roleAddVo) {
SysRoleEntity role = new SysRoleEntity();
BeanUtils.copyProperties(roleAddVo, role);
if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleNameUnique(role))) {
diff --git a/play-admin/src/main/java/com/starry/admin/modules/system/service/impl/SysAdministrativeAreaDictInfoServiceImpl.java b/play-admin/src/main/java/com/starry/admin/modules/system/service/impl/SysAdministrativeAreaDictInfoServiceImpl.java
index 679c00e..e9d9c9c 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/system/service/impl/SysAdministrativeAreaDictInfoServiceImpl.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/system/service/impl/SysAdministrativeAreaDictInfoServiceImpl.java
@@ -44,7 +44,6 @@ public class SysAdministrativeAreaDictInfoServiceImpl extends ServiceImpl selectTree(String level) {
- List result = new ArrayList<>();
LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.le(SysAdministrativeAreaDictInfoEntity::getLevel, level);
List list = this.baseMapper.selectList(lambdaQueryWrapper);
diff --git a/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxClerkController.java b/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxClerkController.java
index e56e251..5cb5c81 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxClerkController.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxClerkController.java
@@ -20,21 +20,19 @@ import com.starry.admin.modules.clear.service.IPlayClerkUserInfoService;
import com.starry.admin.modules.clear.service.impl.PlayClerkDataReviewInfoServiceImpl;
import com.starry.admin.modules.clear.service.impl.PlayClerkUserInfoServiceImpl;
import com.starry.admin.modules.weichat.entity.*;
+import com.starry.admin.modules.weichat.service.WxCustomUserService;
import com.starry.admin.utils.SecurityUtils;
import com.starry.common.redis.RedisCache;
import com.starry.common.result.R;
import com.starry.common.utils.ConvertUtil;
import com.starry.common.utils.VerificationCodeUtils;
import lombok.extern.slf4j.Slf4j;
+import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
-import javax.validation.Valid;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
import java.util.concurrent.TimeUnit;
-import java.util.stream.Collectors;
/**
* @author admin
@@ -67,6 +65,9 @@ public class WxClerkController {
@Resource
private IPlayClerkCommodityService playClerkCommodityService;
+ @Resource
+ private WxCustomUserService customUserService;
+
@ClerkUserLogin
@GetMapping("/user/queryById")
@@ -94,7 +95,7 @@ public class WxClerkController {
@ClerkUserLogin
@PostMapping("/user/sendCode")
- public R sendCode(@Valid @RequestBody PlayClerkUserSendCodeVo vo) {
+ public R sendCode(@Validated @RequestBody PlayClerkUserSendCodeVo vo) {
String codeKey = "login_codes:" + SecurityUtils.getTenantId() + "_" + SecureUtil.md5(vo.getAreaCode() + vo.getPhone());
String code = VerificationCodeUtils.getVerificationCode(4);
redisCache.setCacheObject(codeKey, code, 5L, TimeUnit.MINUTES);
@@ -104,7 +105,7 @@ public class WxClerkController {
@ClerkUserLogin
@PostMapping("/user/bindCode")
- public R bindCode(@Valid @RequestBody PlayClerkUserBindCodeVo vo) {
+ public R bindCode(@Validated @RequestBody PlayClerkUserBindCodeVo vo) {
String codeKey = "login_codes:" + SecurityUtils.getTenantId() + "_" + SecureUtil.md5(vo.getAreaCode() + vo.getPhone());
String code = redisCache.getCacheObject(codeKey);
if (code == null || !code.equals(vo.getCode())) {
@@ -124,13 +125,13 @@ public class WxClerkController {
@ClerkUserLogin
@PostMapping("/user/add")
- public R userAdd(@Valid @RequestBody PlayClerkUserByWxAddVo vo) {
+ public R userAdd(@Validated @RequestBody PlayClerkUserByWxAddVo vo) {
String playUserId = ThreadLocalRequestDetail.getClerkUserInfo().getId();
PlayClerkUserInfoEntity userInfo = playClerkUserInfoService.selectById(playUserId);
if (userInfo == null) {
throw new CustomException("系统错误,用户不存在");
}
- if (userInfo.getClerkState().equals("1")) {
+ if ("1".equals(userInfo.getClerkState())) {
throw new CustomException("当前用户已经是店员");
}
PlayClerkDataReviewInfoEntity dataReviewInfo = new PlayClerkDataReviewInfoEntity();
@@ -141,6 +142,8 @@ public class WxClerkController {
if (!dataReviewInfoService.queryList(dataReviewInfo).isEmpty()) {
throw new CustomException("已有申请未审核");
}
+ dataReviewInfo.setClarkAvatar(userInfo.getAvatar());
+ dataReviewInfo.setClarkNickname(userInfo.getNickname());
dataReviewInfo.setContent(JSONObject.toJSONString(vo));
dataReviewInfo.setAddTime(new Date());
dataReviewInfoService.create(dataReviewInfo);
@@ -150,7 +153,7 @@ public class WxClerkController {
@ClerkUserLogin
@PostMapping("/user/updateAvatar")
- public R updateAvatar(@Valid @RequestBody PlayClerkUserAvatarVo vo) {
+ public R updateAvatar(@Validated @RequestBody PlayClerkUserAvatarVo vo) {
PlayClerkUserInfoEntity userInfo = ThreadLocalRequestDetail.getClerkUserInfo();
PlayClerkDataReviewInfoEntity dataReviewInfo = new PlayClerkDataReviewInfoEntity();
@@ -161,6 +164,8 @@ public class WxClerkController {
if (!dataReviewInfoService.queryList(dataReviewInfo).isEmpty()) {
throw new CustomException("已有申请未审核");
}
+ dataReviewInfo.setClarkAvatar(userInfo.getAvatar());
+ dataReviewInfo.setClarkNickname(userInfo.getNickname());
dataReviewInfo.setContent(JSONObject.toJSONString(vo));
dataReviewInfo.setAddTime(new Date());
dataReviewInfoService.create(dataReviewInfo);
@@ -169,7 +174,7 @@ public class WxClerkController {
@ClerkUserLogin
@PostMapping("/user/updateAlbum")
- public R updateAlbum(@Valid @RequestBody PlayClerkUserAlbumVo vo) {
+ public R updateAlbum(@Validated @RequestBody PlayClerkUserAlbumVo vo) {
PlayClerkUserInfoEntity userInfo = ThreadLocalRequestDetail.getClerkUserInfo();
PlayClerkDataReviewInfoEntity dataReviewInfo = new PlayClerkDataReviewInfoEntity();
dataReviewInfo.setPlayUserId(userInfo.getId());
@@ -178,14 +183,17 @@ public class WxClerkController {
if (!dataReviewInfoService.queryList(dataReviewInfo).isEmpty()) {
throw new CustomException("已有申请未审核");
}
+ dataReviewInfo.setClarkAvatar(userInfo.getAvatar());
+ dataReviewInfo.setClarkNickname(userInfo.getNickname());
dataReviewInfo.setContent(JSONObject.toJSONString(vo));
+ dataReviewInfo.setAddTime(new Date());
dataReviewInfoService.create(dataReviewInfo);
return R.ok("申请成功");
}
@ClerkUserLogin
@PostMapping("/user/updateAudio")
- public R updateAudio(@Valid @RequestBody PlayClerkUserAudioVo vo) {
+ public R updateAudio(@Validated @RequestBody PlayClerkUserAudioVo vo) {
PlayClerkUserInfoEntity userInfo = ThreadLocalRequestDetail.getClerkUserInfo();
PlayClerkDataReviewInfoEntity dataReviewInfo = new PlayClerkDataReviewInfoEntity();
dataReviewInfo.setPlayUserId(userInfo.getId());
@@ -194,6 +202,9 @@ public class WxClerkController {
if (!dataReviewInfoService.queryList(dataReviewInfo).isEmpty()) {
throw new CustomException("已有申请未审核");
}
+ dataReviewInfo.setAddTime(new Date());
+ dataReviewInfo.setClarkAvatar(userInfo.getAvatar());
+ dataReviewInfo.setClarkNickname(userInfo.getNickname());
dataReviewInfo.setContent(JSONObject.toJSONString(vo));
dataReviewInfoService.create(dataReviewInfo);
return R.ok("申请成功");
@@ -202,7 +213,7 @@ public class WxClerkController {
@ClerkUserLogin
@PostMapping("/user/updateOnlineState")
- public R updateAudio(@Valid @RequestBody PlayClerkUserOnlineStateVo vo) {
+ public R updateAudio(@Validated @RequestBody PlayClerkUserOnlineStateVo vo) {
String userId = ThreadLocalRequestDetail.getClerkUserInfo().getId();
PlayClerkUserInfoEntity entity = new PlayClerkUserInfoEntity();
entity.setOnlineState(vo.getOnlineState());
@@ -213,15 +224,15 @@ public class WxClerkController {
@ClerkUserLogin
@PostMapping("/user/updateCommodity")
- public R updateAudio(@Valid @RequestBody PlayClerkCommodityEditVo vo) {
- playClerkCommodityService.startStopClerkItem(vo.getCommodityType(), vo.getEnablingState());
+ public R updateAudio(@Validated @RequestBody PlayClerkCommodityEditVo vo) {
+ playClerkCommodityService.startStopClerkItem(vo.getCommodityType(), vo.getEnablingState(), ThreadLocalRequestDetail.getClerkUserInfo().getId());
return R.ok("成功");
}
@ClerkUserLogin
@PostMapping("/user/updateOther")
- public R updateOther(@Valid @RequestBody PlayClerkUserOtherVo vo) {
+ public R updateOther(@Validated @RequestBody PlayClerkUserOtherVo vo) {
PlayClerkUserInfoEntity userInfo = ConvertUtil.entityToVo(vo, PlayClerkUserInfoEntity.class);
userInfo.setId(ThreadLocalRequestDetail.getClerkUserInfo().getId());
playClerkUserInfoService.update(userInfo);
@@ -242,27 +253,28 @@ public class WxClerkController {
* 分页获取店员列表
*
* @param vo PlayClerkUserInfoQueryVo
- * @return 店员礼列表
+ * @return 店员列表
*/
-
@PostMapping("/user/queryByPage")
public R queryByPage(@RequestBody PlayClerkUserInfoQueryVo vo) {
- IPage page = playClerkUserInfoService.selectPlayClerkUserInfoByPage(vo);
- List resultVos = new ArrayList<>();
- for (PlayClerkUserInfoEntity record : page.getRecords()) {
- PlayClerkUserListResultVo item = ConvertUtil.entityToVo(record, PlayClerkUserListResultVo.class);
- List list = playClerkCommodityService.selectByUser(record.getId()).stream().map(PlayClerkCommodityEntity::getCommodityType).collect(Collectors.toList());
- item.setCommodity(list);
- resultVos.add(item);
- }
+ IPage page = playClerkUserInfoService.selectByPage(vo, customUserService.getLoginUserId());
+ return R.ok(page);
+ }
- IPage resultPage = new Page<>();
- resultPage.setRecords(resultVos);
- // 设置分页参数
- resultPage.setCurrent(page.getCurrent());
- resultPage.setSize(page.getSize());
- resultPage.setTotal(resultVos.size()); // 假设total和实际情况一致
- return R.ok(resultPage);
+
+ /**
+ * 获取推荐用户列表
+ *
+ * @return 店员列表
+ */
+ @PostMapping("/user/queryByRecommend")
+ public R queryByRecommend() {
+ PlayClerkUserInfoQueryVo vo = new PlayClerkUserInfoQueryVo();
+ vo.setPageNum(10);
+ vo.setPageSize(9999);
+ vo.setRecommendationState("1");
+ IPage page = playClerkUserInfoService.selectByPage(vo, "");
+ return R.ok(page);
}
/**
@@ -278,14 +290,17 @@ public class WxClerkController {
if (entity == null) {
throw new CustomException("用户不存在");
}
- List list = new ArrayList<>();
- list.add(new PlayGiftInfoEntity(IdUtil.fastSimpleUUID(), "礼物1", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/fc09da2f923d46e6951292ff8f34f6aa.png", 0, "0"));
- list.add(new PlayGiftInfoEntity(IdUtil.fastSimpleUUID(), "礼物2", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/fc09da2f923d46e6951292ff8f34f6aa.png", 1, "0"));
- list.add(new PlayGiftInfoEntity(IdUtil.fastSimpleUUID(), "礼物3", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/fc09da2f923d46e6951292ff8f34f6aa.png", 2, "1"));
- list.add(new PlayGiftInfoEntity(IdUtil.fastSimpleUUID(), "礼物4", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/fc09da2f923d46e6951292ff8f34f6aa.png", 3, "1"));
- list.add(new PlayGiftInfoEntity(IdUtil.fastSimpleUUID(), "礼物5", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/fc09da2f923d46e6951292ff8f34f6aa.png", 4, "1"));
-
- return R.ok(list);
+ Map result = new HashMap<>();
+ List list = new ArrayList<>();
+ list.add(new PlayGiftInfoVo(IdUtil.fastSimpleUUID(), "礼物1", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/fc09da2f923d46e6951292ff8f34f6aa.png", 0, "0"));
+ list.add(new PlayGiftInfoVo(IdUtil.fastSimpleUUID(), "礼物2", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/fc09da2f923d46e6951292ff8f34f6aa.png", 1, "0"));
+ list.add(new PlayGiftInfoVo(IdUtil.fastSimpleUUID(), "礼物3", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/fc09da2f923d46e6951292ff8f34f6aa.png", 2, "1"));
+ list.add(new PlayGiftInfoVo(IdUtil.fastSimpleUUID(), "礼物4", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/fc09da2f923d46e6951292ff8f34f6aa.png", 3, "1"));
+ list.add(new PlayGiftInfoVo(IdUtil.fastSimpleUUID(), "礼物5", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/fc09da2f923d46e6951292ff8f34f6aa.png", 4, "1"));
+ result.put("list", list);
+ result.put("obtainedGift", list.size() - 1);
+ result.put("totalGift", list.size());
+ return R.ok(result);
}
@@ -356,6 +371,7 @@ public class WxClerkController {
entities.add(new PlayClarkUserEvaluateInfoEntity(IdUtil.fastSimpleUUID(), IdUtil.fastSimpleUUID(), "评价人3昵称", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/fc09da2f923d46e6951292ff8f34f6aa.png", "评价内容", new Date(), IdUtil.fastSimpleUUID(), "店员昵称", IdUtil.fastSimpleUUID(), "文字语音条", "一小时"));
entities.add(new PlayClarkUserEvaluateInfoEntity(IdUtil.fastSimpleUUID(), IdUtil.fastSimpleUUID(), "评价人4昵称", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/fc09da2f923d46e6951292ff8f34f6aa.png", "评价内容", new Date(), IdUtil.fastSimpleUUID(), "店员昵称", IdUtil.fastSimpleUUID(), "文字语音条", "一小时"));
entities.add(new PlayClarkUserEvaluateInfoEntity(IdUtil.fastSimpleUUID(), IdUtil.fastSimpleUUID(), "评价人5昵称", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/fc09da2f923d46e6951292ff8f34f6aa.png", "评价内容", new Date(), IdUtil.fastSimpleUUID(), "店员昵称", IdUtil.fastSimpleUUID(), "文字语音条", "一小时"));
+ entities.add(new PlayClarkUserEvaluateInfoEntity(IdUtil.fastSimpleUUID(), IdUtil.fastSimpleUUID(), "评价人5昵称", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/fc09da2f923d46e6951292ff8f34f6aa.png", "评价内容", new Date(), IdUtil.fastSimpleUUID(), "店员昵称", IdUtil.fastSimpleUUID(), "文字语音条", "一小时", 5));
IPage resultPage = new Page<>();
resultPage.setRecords(entities);
diff --git a/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxCommodityController.java b/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxCommodityController.java
new file mode 100644
index 0000000..5a86c3a
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxCommodityController.java
@@ -0,0 +1,41 @@
+package com.starry.admin.modules.weichat.controller;
+
+
+import com.starry.admin.modules.clear.module.entity.PlayClerkCommodityEntity;
+import com.starry.admin.modules.clear.service.IPlayClerkCommodityService;
+import com.starry.admin.modules.weichat.entity.PlayClarkCommodityTreeData;
+import com.starry.common.result.R;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @author admin
+ */
+@Slf4j
+@RestController
+@RequestMapping("/wx/commodity/")
+public class WxCommodityController {
+ @Resource
+ private IPlayClerkCommodityService clerkCommodityService;
+
+ @GetMapping("/getTree")
+ public R getTree(@RequestParam("userId") String userId) {
+ List commodityEntities = clerkCommodityService.selectByUser(userId);
+ Map> item = commodityEntities.stream().collect(Collectors.groupingBy(PlayClerkCommodityEntity::getCommodityName));
+ List result = new ArrayList<>();
+ for (Map.Entry> entry : item.entrySet()) {
+ PlayClarkCommodityTreeData treeData = new PlayClarkCommodityTreeData(entry.getKey(), entry.getValue());
+ result.add(treeData);
+ }
+ return R.ok(result);
+ }
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxCommonController.java b/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxCommonController.java
index 7519596..1d197fc 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxCommonController.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxCommonController.java
@@ -8,6 +8,7 @@ import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson2.JSONObject;
import com.starry.admin.common.exception.CustomException;
import com.starry.admin.common.oss.service.IOssFileService;
+import com.starry.admin.modules.system.entity.SysAdministrativeAreaDictInfoEntity;
import com.starry.admin.modules.system.service.ISysAdministrativeAreaDictInfoService;
import com.starry.admin.modules.weichat.service.WxAccessTokenService;
import com.starry.admin.modules.weichat.utils.WxFileUtils;
diff --git a/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxCustomController.java b/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxCustomController.java
index 54ed1ac..75f2127 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxCustomController.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxCustomController.java
@@ -1,15 +1,36 @@
package com.starry.admin.modules.weichat.controller;
-import com.starry.admin.modules.clear.service.IPlayClerkLevelInfoService;
-import com.starry.admin.modules.clear.service.impl.PlayClerkUserInfoServiceImpl;
+import com.starry.admin.common.aspect.CustomUserLogin;
+import com.starry.admin.common.conf.ThreadLocalRequestDetail;
+import com.starry.admin.common.exception.CustomException;
+import com.starry.admin.modules.balance.service.IPlayBalanceDetailsInfoService;
+import com.starry.admin.modules.clear.module.entity.PlayClerkCommodityEntity;
+import com.starry.admin.modules.clear.module.entity.PlayClerkUserInfoEntity;
+import com.starry.admin.modules.clear.module.entity.PlayClerkUserListResultVo;
+import com.starry.admin.modules.clear.service.IPlayClerkCommodityService;
+import com.starry.admin.modules.clear.service.IPlayClerkUserInfoService;
+import com.starry.admin.modules.custom.module.entity.PlayCustomUserInfoEntity;
+import com.starry.admin.modules.custom.service.IPlayCustomUserInfoService;
+import com.starry.admin.modules.follow.service.IPlayCustomFollowInfoService;
+import com.starry.admin.modules.gift.module.entity.PlayGiftInfoEntity;
+import com.starry.admin.modules.gift.service.IPlayGiftInfoService;
+import com.starry.admin.modules.order.service.IPlayOrderInfoService;
+import com.starry.admin.modules.weichat.entity.PlayClerkFollowStateUpdate;
+import com.starry.admin.modules.weichat.entity.PlayOrderInfoCommodityAdd;
+import com.starry.admin.modules.weichat.entity.PlayOrderInfoGiftAdd;
+import com.starry.admin.modules.weichat.entity.PlayOrderInfoRewardAdd;
+import com.starry.admin.modules.weichat.service.WxCustomUserService;
+import com.starry.admin.utils.MoneyUtils;
import com.starry.common.result.R;
+import com.starry.common.utils.ConvertUtil;
+import com.starry.common.utils.StringUtils;
import lombok.extern.slf4j.Slf4j;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
+import java.math.BigDecimal;
/**
* @author admin
@@ -21,11 +42,206 @@ public class WxCustomController {
@Resource
- private PlayClerkUserInfoServiceImpl playClerkUserInfoService;
+ private IPlayCustomUserInfoService customUserInfoService;
+
+ @Resource
+ private IPlayBalanceDetailsInfoService playBalanceDetailsInfoService;
+ @Resource
+ private IPlayClerkUserInfoService clerkUserInfoService;
+
+ @Resource
+ private IPlayGiftInfoService giftInfoService;
+
+ @Resource
+ private IPlayClerkCommodityService clerkCommodityService;
+ @Resource
+ private IPlayCustomFollowInfoService playCustomFollowInfoService;
+
+
+ @Resource
+ private IPlayClerkCommodityService playClerkCommodityService;
+
+ @Resource
+ private WxCustomUserService customUserService;
+
+ @Resource
+ private IPlayOrderInfoService orderInfoService;
+
+ /**
+ * 根据店员ID查询店员详细信息
+ *
+ * @param id 店员ID
+ * @return 店员详细信息
+ */
+ @GetMapping("/queryClarkDetailedById")
+ public R queryClarkDetailedById(@RequestParam("id") String id) {
+ PlayClerkUserInfoEntity entity = clerkUserInfoService.selectById(id);
+ if (entity == null) {
+ throw new CustomException("用户不存在");
+ }
+ PlayClerkUserListResultVo vo = ConvertUtil.entityToVo(entity, PlayClerkUserListResultVo.class);
+ vo.setAddress(entity.getCity());
+ // 查询是否关注,未登录情况下,默认为未关注
+ String loginUserId = customUserService.getLoginUserId();
+ if (StringUtils.isNotEmpty(loginUserId)) {
+ vo.setFollowState(playCustomFollowInfoService.queryFollowState(loginUserId, vo.getId()));
+ }
+ //服务项目
+ vo.setCommodity(playClerkCommodityService.getClerkCommodityList(vo.getId()));
+ return R.ok(vo);
+ }
+
+ /**
+ * 查询店员详细信息
+ */
+ @CustomUserLogin
+ @GetMapping("/queryById")
+ public R queryById() {
+ String userId = ThreadLocalRequestDetail.getCustomUserInfo().getId();
+ PlayCustomUserInfoEntity customUserInfo = customUserInfoService.selectById(userId);
+ return R.ok(customUserInfo);
+ }
+
+
+ /**
+ * 打赏店员
+ */
+ @CustomUserLogin
+ @PostMapping("/order/reward")
+ public R rewardToOrder(@Validated @RequestBody PlayOrderInfoRewardAdd vo) {
+ MoneyUtils.verificationTypeIsNormal(vo.getMoney());
+ String userId = ThreadLocalRequestDetail.getCustomUserInfo().getId();
+ PlayCustomUserInfoEntity customUserInfo = customUserInfoService.selectById(userId);
+ if (customUserInfo == null) {
+ throw new CustomException("用户身份异常");
+ }
+ PlayClerkUserInfoEntity clerkUserInfo = clerkUserInfoService.selectById(vo.getClearId());
+ if (clerkUserInfo == null) {
+ throw new CustomException("打赏对象不存在");
+ }
+ if (new BigDecimal(vo.getMoney()).compareTo(customUserInfo.getAccountBalance()) > 0) {
+ throw new CustomException("余额不足");
+ }
+ // 记录订单信息
+ orderInfoService.createRewardOrder(new BigDecimal(vo.getMoney()), new BigDecimal(vo.getMoney()), userId);
+
+ // 顾客减少余额
+ customUserInfoService.updateAccountBalanceById(customUserInfo.getId(), customUserInfo.getAccountBalance().subtract(new BigDecimal(vo.getMoney())));
+ playBalanceDetailsInfoService.create("0", customUserInfo.getId(), customUserInfo.getAccountBalance(), customUserInfo.getAccountBalance().subtract(new BigDecimal(vo.getMoney())), "打赏", new BigDecimal(vo.getMoney()).multiply(new BigDecimal("-1")));
+
+ // 陪玩增加余额
+ clerkUserInfoService.updateAccountBalanceById(clerkUserInfo.getId(), clerkUserInfo.getAccountBalance().add(new BigDecimal(vo.getMoney())));
+ playBalanceDetailsInfoService.create("1", clerkUserInfo.getId(), clerkUserInfo.getAccountBalance(), clerkUserInfo.getAccountBalance().add(new BigDecimal(vo.getMoney())), "打赏", new BigDecimal(vo.getMoney()).multiply(new BigDecimal("1")));
+
+ return R.ok("成功");
+ }
+
+
+ @CustomUserLogin
+ @PostMapping("/order/gift")
+ public R giftToOdder(@Validated @RequestBody PlayOrderInfoGiftAdd vo) {
+ int giftQuantity;
+ try {
+ giftQuantity = Integer.parseInt(vo.getGiftQuantity());
+ } catch (Exception e) {
+ throw new CustomException("礼物数量异常");
+ }
+ if (giftQuantity <= 0 || giftQuantity > 10000) {
+ throw new CustomException("礼物数量必须大于0并且小于1000");
+ }
+ String userId = ThreadLocalRequestDetail.getCustomUserInfo().getId();
+ PlayGiftInfoEntity giftInfo = giftInfoService.selectPlayGiftInfoById(vo.getGiftId());
+ if (giftInfo == null) {
+ throw new CustomException("礼物不存在");
+ }
+ PlayCustomUserInfoEntity customUserInfo = customUserInfoService.selectById(userId);
+ if (customUserInfo == null) {
+ throw new CustomException("用户身份异常");
+ }
+ PlayClerkUserInfoEntity clerkUserInfo = clerkUserInfoService.selectById(vo.getClearId());
+ if (clerkUserInfo == null) {
+ throw new CustomException("打赏对象不存在");
+ }
+ BigDecimal money = giftInfo.getPrice().multiply(new BigDecimal(vo.getGiftQuantity()));
+
+ if (money.compareTo(customUserInfo.getAccountBalance()) > 0) {
+ throw new CustomException("账号余额不足");
+ }
+ // 记录订单信息
+
+ orderInfoService.createGiftOrder(vo.getGiftId(), giftInfo.getPrice(), vo.getGiftQuantity(), money, money, userId);
+
+ // 顾客减少余额
+ customUserInfoService.updateAccountBalanceById(customUserInfo.getId(), customUserInfo.getAccountBalance().subtract(money));
+ playBalanceDetailsInfoService.create("0", customUserInfo.getId(), customUserInfo.getAccountBalance(), customUserInfo.getAccountBalance().subtract(money), "赠送礼物", money.multiply(new BigDecimal("-1")));
+
+ // 陪玩增加余额
+ clerkUserInfoService.updateAccountBalanceById(clerkUserInfo.getId(), clerkUserInfo.getAccountBalance().add(money));
+ playBalanceDetailsInfoService.create("1", clerkUserInfo.getId(), clerkUserInfo.getAccountBalance(), clerkUserInfo.getAccountBalance().add(money), "赠送礼物", money.multiply(new BigDecimal("1")));
+
+ return R.ok("成功");
+ }
+
+
+ @CustomUserLogin
+ @PostMapping("/order/commodity")
+ public R commodityToOdder(@Validated @RequestBody PlayOrderInfoCommodityAdd vo) {
+ int commodityId;
+ try {
+ commodityId = Integer.parseInt(vo.getCommodityQuantity());
+ } catch (Exception e) {
+ throw new CustomException("礼物数量异常");
+ }
+ if (commodityId <= 0 || commodityId > 10000) {
+ throw new CustomException("购买数量必须大于0并且小于1000");
+ }
+ String userId = ThreadLocalRequestDetail.getCustomUserInfo().getId();
+
+ PlayClerkCommodityEntity clerkCommodity = clerkCommodityService.selectPlayClerkCommodityById(vo.getCommodityId());
+ if (clerkCommodity == null) {
+ throw new CustomException("服务不存在");
+ }
+ PlayCustomUserInfoEntity customUserInfo = customUserInfoService.selectById(userId);
+ if (customUserInfo == null) {
+ throw new CustomException("用户身份异常");
+ }
+ PlayClerkUserInfoEntity clerkUserInfo = clerkUserInfoService.selectById(vo.getClearId());
+ if (clerkUserInfo == null) {
+ throw new CustomException("打赏对象不存在");
+ }
+ BigDecimal money = clerkCommodity.getCommodityPrice().multiply(new BigDecimal(vo.getCommodityQuantity()));
+
+ if (money.compareTo(customUserInfo.getAccountBalance()) > 0) {
+ throw new CustomException("余额不足");
+ }
+ // 记录订单信息
+
+ orderInfoService.createOrdinaryOrder("2", "0", clerkCommodity.getCommodityId(), clerkCommodity.getCommodityPrice(), vo.getCommodityQuantity(), money, money, userId);
+
+ // 顾客减少余额
+ customUserInfoService.updateAccountBalanceById(customUserInfo.getId(), customUserInfo.getAccountBalance().subtract(money));
+ playBalanceDetailsInfoService.create("0", customUserInfo.getId(), customUserInfo.getAccountBalance(), customUserInfo.getAccountBalance().subtract(money), "打赏", money.multiply(new BigDecimal("-1")));
+ // 陪玩增加余额
+ clerkUserInfoService.updateAccountBalanceById(clerkUserInfo.getId(), clerkUserInfo.getAccountBalance().add(money));
+ playBalanceDetailsInfoService.create("1", clerkUserInfo.getId(), clerkUserInfo.getAccountBalance(), clerkUserInfo.getAccountBalance().add(money), "下单", money.multiply(new BigDecimal("1")));
+
+ return R.ok("成功");
+ }
+
+ @CustomUserLogin
+ @PostMapping("/followState/update")
+ public R followStateUpdate(@Validated @RequestBody PlayClerkFollowStateUpdate vo) {
+ PlayClerkUserInfoEntity clerkUserInfo = clerkUserInfoService.selectById(vo.getClearId());
+ if (clerkUserInfo == null) {
+ throw new CustomException("关注对象不存在");
+ }
+ playCustomFollowInfoService.updateFollowState(ThreadLocalRequestDetail.getCustomUserInfo().getId(), vo.getClearId(), vo.getFollowState());
+ return R.ok("修改成功");
+ }
}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxGiftController.java b/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxGiftController.java
new file mode 100644
index 0000000..a8b618f
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxGiftController.java
@@ -0,0 +1,29 @@
+package com.starry.admin.modules.weichat.controller;
+
+
+import com.starry.admin.modules.gift.service.IPlayGiftInfoService;
+import com.starry.admin.modules.weichat.entity.PlayGiftInfoDto;
+import com.starry.common.result.R;
+import com.starry.common.utils.ConvertUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+/**
+ * @author admin
+ */
+@Slf4j
+@RestController
+@RequestMapping("/wx/gift/")
+public class WxGiftController {
+ @Resource
+ private IPlayGiftInfoService giftInfoService;
+
+ @GetMapping("/listByAll")
+ public R rewardToOrder() {
+ return R.ok(ConvertUtil.entityToVoList(giftInfoService.listByAll(),PlayGiftInfoDto.class));
+ }
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxOauthController.java b/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxOauthController.java
index a24c01b..dd80aae 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxOauthController.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxOauthController.java
@@ -13,6 +13,8 @@ import com.starry.admin.modules.custom.module.entity.PlayCustomUserInfoEntity;
import com.starry.admin.modules.custom.service.IPlayCustomUserInfoService;
import com.starry.admin.modules.weichat.entity.WxUserLoginVo;
import com.starry.admin.modules.weichat.entity.WxUserQueryAddressVo;
+import com.starry.admin.modules.weichat.service.WxCustomMpService;
+import com.starry.admin.modules.weichat.service.WxCustomUserService;
import com.starry.admin.modules.weichat.service.WxOauthService;
import com.starry.admin.modules.weichat.service.WxTokenService;
import com.starry.common.redis.RedisCache;
@@ -20,10 +22,10 @@ import com.starry.common.result.R;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.bean.WxJsapiSignature;
import me.chanjar.weixin.common.error.WxErrorException;
+import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
-import javax.validation.Valid;
import java.util.Date;
import static com.starry.common.constant.Constants.*;
@@ -41,7 +43,7 @@ public class WxOauthController {
@Resource
- private WxCustomService wxCustomService;
+ private WxCustomMpService wxCustomMpService;
@Resource
private IPlayCustomUserInfoService customUserInfoService;
@@ -66,7 +68,7 @@ public class WxOauthController {
if (!StrUtil.isBlankIfStr(vo.getUrl())) {
defaultAddress = vo.getUrl();
}
- WxJsapiSignature wxJsapiSignature = wxCustomService.proxyWxMpService().createJsapiSignature(defaultAddress);
+ WxJsapiSignature wxJsapiSignature = wxCustomMpService.proxyWxMpService().createJsapiSignature(defaultAddress);
return R.ok(wxJsapiSignature);
}
@@ -77,7 +79,7 @@ public class WxOauthController {
if (!StrUtil.isBlankIfStr(vo.getUrl())) {
defaultAddress = vo.getUrl();
}
- String url = wxCustomService.proxyWxMpService().getOAuth2Service().buildAuthorizationUrl(defaultAddress, "snsapi_userinfo", "STATE");
+ String url = wxCustomMpService.proxyWxMpService().getOAuth2Service().buildAuthorizationUrl(defaultAddress, "snsapi_userinfo", "STATE");
return R.ok(url);
}
@@ -88,7 +90,7 @@ public class WxOauthController {
@PostMapping("/clark/login")
- public R clerkLogin(@Valid @RequestBody WxUserLoginVo vo) {
+ public R clerkLogin(@Validated @RequestBody WxUserLoginVo vo) {
String userId = wxOauthService.clarkUserLogin(vo.getCode());
PlayClerkUserInfoEntity entity = clerkUserInfoService.selectById(userId);
if (entity == null) {
@@ -107,7 +109,7 @@ public class WxOauthController {
}
@PostMapping("/clark/loginById")
- public R loginById(@Valid @RequestBody WxUserLoginVo vo) {
+ public R loginById(@Validated @RequestBody WxUserLoginVo vo) {
PlayClerkUserInfoEntity entity = clerkUserInfoService.selectById(vo.getCode());
if (entity == null) {
throw new CustomException("用户不存在");
@@ -139,7 +141,7 @@ public class WxOauthController {
if (!StrUtil.isBlankIfStr(vo.getUrl())) {
defaultAddress = vo.getUrl();
}
- String url = wxCustomService.proxyWxMpService().getOAuth2Service().buildAuthorizationUrl(defaultAddress, "snsapi_userinfo", "STATE");
+ String url = wxCustomMpService.proxyWxMpService().getOAuth2Service().buildAuthorizationUrl(defaultAddress, "snsapi_userinfo", "STATE");
return R.ok(url);
}
@@ -150,7 +152,7 @@ public class WxOauthController {
@PostMapping("/custom/login")
- public R customLogin(@Valid @RequestBody WxUserLoginVo vo) {
+ public R customLogin(@Validated @RequestBody WxUserLoginVo vo) {
String userId = wxOauthService.customUserLogin(vo.getCode());
PlayCustomUserInfoEntity entity = customUserInfoService.selectById(userId);
if (entity == null) {
@@ -168,6 +170,24 @@ public class WxOauthController {
return R.ok(jsonObject);
}
+ @PostMapping("/custom/loginById")
+ public R loginById1(@Validated @RequestBody WxUserLoginVo vo) {
+ PlayCustomUserInfoEntity entity = customUserInfoService.selectById(vo.getCode());
+ if (entity == null) {
+ throw new CustomException("用户不存在");
+ }
+ // 缓存租户信息
+ String redisKey = "TENANT_INFO:" + entity.getId();
+ redisCache.setCacheObject(redisKey, entity.getTenantId());
+ JSONObject jsonObject = JSONObject.from(clerkUserInfoService.getVo(new PlayClerkUserInfoEntity()));
+ String tokenValue = tokenService.createWxUserToken(entity.getId());
+ jsonObject.put("tokenValue", TOKEN_PREFIX + tokenValue);
+ jsonObject.put("tokenName", CLERK_USER_LOGIN_TOKEN);
+ jsonObject.put("loginDate", DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
+ customUserInfoService.updateTokenById(entity.getId(), tokenValue);
+ return R.ok(jsonObject);
+ }
+
@GetMapping("/custom/logout")
@CustomUserLogin
diff --git a/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxPlayController.java b/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxPlayController.java
new file mode 100644
index 0000000..2db8694
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxPlayController.java
@@ -0,0 +1,107 @@
+package com.starry.admin.modules.weichat.controller;
+
+
+import cn.hutool.core.util.StrUtil;
+import com.starry.admin.common.aspect.CustomUserLogin;
+import com.starry.admin.common.conf.ThreadLocalRequestDetail;
+import com.starry.admin.common.exception.CustomException;
+import com.starry.admin.modules.balance.service.IPlayBalanceDetailsInfoService;
+import com.starry.admin.modules.custom.module.entity.PlayCustomUserInfoEntity;
+import com.starry.admin.modules.custom.service.IPlayCustomUserInfoService;
+import com.starry.admin.modules.order.service.IPlayOrderInfoService;
+import com.starry.admin.modules.platform.entity.SysTenantEntity;
+import com.starry.admin.modules.platform.service.impl.SysTenantServiceImpl;
+import com.starry.admin.utils.SecurityUtils;
+import com.starry.common.result.R;
+import com.starry.common.utils.StringUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+
+@Slf4j
+@RestController
+@RequestMapping("/wx/play/")
+public class WxPlayController {
+
+
+ @Resource
+ private SysTenantServiceImpl tenantService;
+
+
+ @Resource
+ private IPlayCustomUserInfoService customUserInfoService;
+
+ @Resource
+ private IPlayBalanceDetailsInfoService playBalanceDetailsInfoService;
+
+ @Resource
+ private IPlayOrderInfoService orderInfoService;
+
+
+ @CustomUserLogin
+ @GetMapping("/custom/createOrder")
+ public R createOrder(@RequestParam("money") String money) {
+ if (StringUtils.isEmpty(money)) {
+ throw new CustomException("请求参数错误,money不能为空");
+ }
+
+ String tenantId = SecurityUtils.getTenantId();
+ if (StrUtil.isBlankIfStr(tenantId)) {
+ throw new CustomException("系统错误,租户ID不能为空");
+ }
+ SysTenantEntity entity = tenantService.selectSysTenantByTenantId(tenantId);
+ if (entity == null) {
+ throw new CustomException("系统错误,租户ID不能为空");
+ }
+
+
+ String openId = ThreadLocalRequestDetail.getCustomUserInfo().getOpenid();
+ //订单总金额,单位为分
+ int totalFee = getTotalFee(money);
+// String orderId = IdUtil.fastSimpleUUID();
+// String body = "body";
+//
+// try {
+// String id = WxPlayUtils.unifiedOrderJSAPI(openId, entity.getAppId(), entity.getMchId(), orderId, "127.0.0.1", body, SecurityUtils.getTenantId(), totalFee);
+// return R.ok(id);
+// } catch (Exception e) {
+// log.error("创建支付订单失败,error=", e);
+// throw new CustomException("创建支付订单失败," + e.getMessage());
+// }
+
+ String userId = ThreadLocalRequestDetail.getCustomUserInfo().getId();
+ PlayCustomUserInfoEntity customUserInfo = customUserInfoService.selectById(userId);
+ if (customUserInfo == null) {
+ throw new CustomException("用户身份异常");
+ }
+
+ orderInfoService.createRechargeOrder(new BigDecimal(totalFee / 100), new BigDecimal(totalFee / 100), userId);
+ customUserInfoService.updateAccountBalanceById(customUserInfo.getId(), customUserInfo.getAccountBalance().add(new BigDecimal(totalFee / 100)));
+ playBalanceDetailsInfoService.create("1", customUserInfo.getId(), customUserInfo.getAccountBalance(), customUserInfo.getAccountBalance().add(new BigDecimal(totalFee / 100)), "充值", new BigDecimal(totalFee / 100));
+
+ return R.ok("成功");
+ }
+
+
+ /**
+ * @param money 金额,单位-元
+ * @return 金额, 单位-分
+ */
+ public int getTotalFee(String money) {
+ int totalFee;
+ try {
+ totalFee = (int) Float.parseFloat(money) * 100;
+ } catch (Exception e) {
+ throw new CustomException("请求参数错误,money类型异常");
+ }
+ if (totalFee <= 0 || totalFee > 1000000) {
+ throw new CustomException("请求参数错误,单笔支付金额必须大于0,且小于10000");
+ }
+ return totalFee;
+ }
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClarkCommodityTreeData.java b/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClarkCommodityTreeData.java
new file mode 100644
index 0000000..be228d7
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClarkCommodityTreeData.java
@@ -0,0 +1,40 @@
+package com.starry.admin.modules.weichat.entity;
+
+import com.starry.admin.modules.clear.module.entity.PlayClerkCommodityEntity;
+import com.starry.common.utils.ConvertUtil;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 店员商品树状数据
+ */
+@Data
+public class PlayClarkCommodityTreeData {
+
+ private String commodityType;
+
+
+ private List value;
+
+
+ public PlayClarkCommodityTreeData(String commodityType, List value) {
+ this.commodityType = commodityType;
+ this.value = ConvertUtil.entityToVoList(value, ClarkCommodityInfo.class);
+ }
+
+ @Data
+ public static class ClarkCommodityInfo {
+
+ private String id;
+
+ private String commodityName;
+
+ private BigDecimal commodityPrice;
+
+ private String serviceDuration;
+
+
+ }
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkFollowStateUpdate.java b/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkFollowStateUpdate.java
new file mode 100644
index 0000000..41778fb
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkFollowStateUpdate.java
@@ -0,0 +1,27 @@
+package com.starry.admin.modules.weichat.entity;
+
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Pattern;
+
+/**
+ * 店员和陪玩关注状态
+ *
+ * @author admin
+ */
+@Data
+public class PlayClerkFollowStateUpdate {
+
+
+ /**
+ * 店员用户ID
+ */
+ @NotBlank(message = "打赏对象不能为空")
+ private String clearId;
+
+ @NotBlank(message = "关注状态不能为空")
+ @Pattern(regexp = "[01]", message = "关注状态必须为0或者1")
+ private String followState;
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkUserByWxAddVo.java b/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkUserByWxAddVo.java
index 4a5960d..9673066 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkUserByWxAddVo.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkUserByWxAddVo.java
@@ -82,6 +82,12 @@ public class PlayClerkUserByWxAddVo {
@Size(min = 1, max = 5, message = "照片必须为1-5张")
private List album;
+
+ /**
+ * 个性签名
+ */
+ private String signature;
+
/**
* 备注
*/
diff --git a/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkUserLoginResponseVo.java b/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkUserLoginResponseVo.java
index 9a3b815..9cdb7e8 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkUserLoginResponseVo.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkUserLoginResponseVo.java
@@ -83,7 +83,7 @@ public class PlayClerkUserLoginResponseVo {
/**
* 标签
*/
- private List labels = new ArrayList<>();
+ private List label = new ArrayList<>();
/**
* 分类
diff --git a/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkUserOtherVo.java b/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkUserOtherVo.java
index 43effa4..05c51fa 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkUserOtherVo.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkUserOtherVo.java
@@ -53,7 +53,7 @@ public class PlayClerkUserOtherVo {
/**
* 标签
*/
- private List labels = new ArrayList<>();
+ private List label = new ArrayList<>();
/**
* 分类
diff --git a/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayGiftInfoDto.java b/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayGiftInfoDto.java
new file mode 100644
index 0000000..75753cb
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayGiftInfoDto.java
@@ -0,0 +1,44 @@
+package com.starry.admin.modules.weichat.entity;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class PlayGiftInfoDto {
+
+ /**
+ * UUID
+ */
+ private String id;
+
+ /**
+ * 租户ID
+ */
+ private String tenantId;
+
+ /**
+ * 礼物名称
+ */
+ private String name;
+
+ /**
+ * 礼物类型(0:盲盒,1:普通礼物)
+ */
+ private String type;
+
+ /**
+ * 礼物图片地址
+ */
+ private String url;
+
+ /**
+ * 单价
+ */
+ private BigDecimal price;
+
+ /**
+ * 价格单位
+ */
+ private String unit;
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayOrderInfoCommodityAdd.java b/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayOrderInfoCommodityAdd.java
new file mode 100644
index 0000000..148feca
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayOrderInfoCommodityAdd.java
@@ -0,0 +1,44 @@
+package com.starry.admin.modules.weichat.entity;
+
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.util.List;
+
+/**
+ * 新增赠礼订单实体
+ *
+ * @author admin
+ */
+@Data
+public class PlayOrderInfoCommodityAdd {
+
+
+ /**
+ * 店员用户ID
+ */
+ @NotBlank(message = "打赏对象不能为空")
+ private String clearId;
+
+
+ @NotBlank(message = "商品ID不能为空")
+ private String commodityId;
+
+ @NotBlank(message = "礼物数量不能为空")
+ private String commodityQuantity;
+
+
+ @NotBlank(message = "微信号不能为空")
+ private String weiChatCode;
+
+ /**
+ * 优惠券ID列表
+ */
+ private List couponIds;
+
+ /**
+ * 备注
+ */
+ private String remark;
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayOrderInfoGiftAdd.java b/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayOrderInfoGiftAdd.java
new file mode 100644
index 0000000..cd904c8
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayOrderInfoGiftAdd.java
@@ -0,0 +1,38 @@
+package com.starry.admin.modules.weichat.entity;
+
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * 新增赠礼订单实体
+ *
+ * @author admin
+ */
+@Data
+public class PlayOrderInfoGiftAdd {
+
+
+ /**
+ * 店员用户ID
+ */
+ @NotBlank(message = "打赏对象不能为空")
+ private String clearId;
+
+
+ @NotBlank(message = "礼物ID不能为空")
+ private String giftId;
+
+ @NotBlank(message = "礼物数量不能为空")
+ private String giftQuantity;
+
+
+ @NotBlank(message = "微信号不能为空")
+ private String weiChatCode;
+
+ /**
+ * 备注
+ */
+ private String remark;
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayOrderInfoRewardAdd.java b/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayOrderInfoRewardAdd.java
new file mode 100644
index 0000000..9807049
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayOrderInfoRewardAdd.java
@@ -0,0 +1,33 @@
+package com.starry.admin.modules.weichat.entity;
+
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * 新增打赏订单实体
+ */
+@Data
+public class PlayOrderInfoRewardAdd {
+
+
+ /**
+ * 店员用户ID
+ */
+ @NotBlank(message = "打赏对象不能为空")
+ private String clearId;
+ /**
+ * 打赏金额
+ */
+ @NotBlank(message = "打赏金额不能为空")
+ private String money;
+
+ @NotBlank(message = "微信号不能为空")
+ private String weiChatCode;
+
+ /**
+ * 备注
+ */
+ private String remark;
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/weichat/service/WxAccessTokenService.java b/play-admin/src/main/java/com/starry/admin/modules/weichat/service/WxAccessTokenService.java
index 6e82078..e5730f4 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/weichat/service/WxAccessTokenService.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/weichat/service/WxAccessTokenService.java
@@ -1,7 +1,6 @@
package com.starry.admin.modules.weichat.service;
-import com.starry.admin.modules.weichat.controller.WxCustomService;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.error.WxErrorException;
import org.springframework.stereotype.Service;
@@ -19,7 +18,7 @@ public class WxAccessTokenService {
@Resource
- private WxCustomService wxCustomService;
+ private WxCustomMpService wxCustomMpService;
/**
@@ -28,7 +27,7 @@ public class WxAccessTokenService {
* @return access_token
*/
public String getAccessToken() throws WxErrorException {
- String token = wxCustomService.proxyWxMpService().getAccessToken();
+ String token = wxCustomMpService.proxyWxMpService().getAccessToken();
log.error("token = " + token);
//缓存业务处理
return token;
diff --git a/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxCustomService.java b/play-admin/src/main/java/com/starry/admin/modules/weichat/service/WxCustomMpService.java
similarity index 94%
rename from play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxCustomService.java
rename to play-admin/src/main/java/com/starry/admin/modules/weichat/service/WxCustomMpService.java
index a16d9f3..f72cd4c 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxCustomService.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/weichat/service/WxCustomMpService.java
@@ -1,4 +1,4 @@
-package com.starry.admin.modules.weichat.controller;
+package com.starry.admin.modules.weichat.service;
import cn.hutool.core.util.StrUtil;
import com.starry.admin.common.exception.CustomException;
@@ -14,7 +14,7 @@ import javax.annotation.Resource;
@Slf4j
@Service
-public class WxCustomService {
+public class WxCustomMpService {
@Resource
private WxMpService wxMpService;
@@ -38,4 +38,6 @@ public class WxCustomService {
wxMpService.addConfigStorage(entity.getAppId(), config);
return wxMpService.switchoverTo(entity.getAppId());
}
+
+
}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/weichat/service/WxCustomUserService.java b/play-admin/src/main/java/com/starry/admin/modules/weichat/service/WxCustomUserService.java
new file mode 100644
index 0000000..1db2196
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/weichat/service/WxCustomUserService.java
@@ -0,0 +1,59 @@
+package com.starry.admin.modules.weichat.service;
+
+import com.starry.admin.modules.custom.module.entity.PlayCustomUserInfoEntity;
+import com.starry.admin.modules.custom.service.IPlayCustomUserInfoService;
+import com.starry.common.constant.Constants;
+import com.starry.common.utils.StringUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.util.Objects;
+
+@Slf4j
+@Service
+public class WxCustomUserService {
+
+
+ @Resource
+ private IPlayCustomUserInfoService customUserInfoService;
+
+
+ @Resource
+ private HttpServletRequest request;
+
+
+ @Resource
+ private WxTokenService tokenService;
+
+
+ /**
+ * 获取当前登录顾客ID
+ *
+ * @return 当前登录顾客ID
+ */
+ public String getLoginUserId() {
+ String userToken = request.getHeader(com.starry.common.constant.Constants.CUSTOM_USER_LOGIN_TOKEN);
+ if (StringUtils.isEmpty(userToken)) {
+ return "";
+ }
+ if (userToken.startsWith(com.starry.common.constant.Constants.TOKEN_PREFIX)) {
+ userToken = userToken.replace(Constants.TOKEN_PREFIX, "");
+ }
+ // 解析token
+ String userId;
+ try {
+ userId = tokenService.getWxUserIdByToken(userToken);
+ } catch (Exception e) {
+ return "";
+ }
+ PlayCustomUserInfoEntity entity = customUserInfoService.selectById(userId);
+ if (Objects.isNull(entity)) {
+ return "";
+ }
+ return userToken.equals(entity.getToken()) ? userId : "";
+ }
+
+
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/weichat/service/WxOauthService.java b/play-admin/src/main/java/com/starry/admin/modules/weichat/service/WxOauthService.java
index 6f44e42..ade4c69 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/weichat/service/WxOauthService.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/weichat/service/WxOauthService.java
@@ -5,10 +5,11 @@ import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import com.starry.admin.common.exception.ServiceException;
import com.starry.admin.modules.clear.module.entity.PlayClerkUserInfoEntity;
+import com.starry.admin.modules.clear.service.IPlayClerkLevelInfoService;
import com.starry.admin.modules.clear.service.IPlayClerkUserInfoService;
import com.starry.admin.modules.custom.module.entity.PlayCustomUserInfoEntity;
+import com.starry.admin.modules.custom.service.IPlayCustomLevelInfoService;
import com.starry.admin.modules.custom.service.IPlayCustomUserInfoService;
-import com.starry.admin.modules.weichat.controller.WxCustomService;
import com.starry.common.utils.ConvertUtil;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.bean.WxOAuth2UserInfo;
@@ -17,6 +18,7 @@ import me.chanjar.weixin.common.error.WxErrorException;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
+import java.util.Date;
@Slf4j
@Service
@@ -24,7 +26,7 @@ public class WxOauthService {
@Resource
- private WxCustomService wxCustomService;
+ private WxCustomMpService wxCustomMpService;
@Resource
@@ -33,6 +35,12 @@ public class WxOauthService {
@Resource
private IPlayClerkUserInfoService clerkUserInfoService;
+ @Resource
+ private IPlayClerkLevelInfoService playClerkLevelInfoService;
+
+ @Resource
+ private IPlayCustomLevelInfoService playCustomLevelInfoService;
+
/**
* 微信用户登录
@@ -54,6 +62,7 @@ public class WxOauthService {
PlayClerkUserInfoEntity entity = ConvertUtil.entityToVo(userInfo, PlayClerkUserInfoEntity.class);
entity.setAvatar(userInfo.getHeadImgUrl());
entity.setId(IdUtil.fastSimpleUUID());
+ entity.setLevelId(playClerkLevelInfoService.getDefaultLevel().getId());
clerkUserInfoService.create(entity);
return entity.getId();
} else {
@@ -81,7 +90,14 @@ public class WxOauthService {
PlayCustomUserInfoEntity entity = ConvertUtil.entityToVo(userInfo, PlayCustomUserInfoEntity.class);
entity.setAvatar(userInfo.getHeadImgUrl());
PlayCustomUserInfoEntity item = customUserInfoService.selectByOpenid(openId);
- entity.setId(item != null ? item.getId() : IdUtil.fastSimpleUUID());
+ if (item == null) {
+ entity.setId(IdUtil.fastSimpleUUID());
+ entity.setRegistrationTime(new Date());
+ entity.setLevelId(playCustomLevelInfoService.getDefaultLevel().getId());
+ } else {
+ entity.setId(item.getId());
+ }
+ entity.setLastLoginTime(new Date());
customUserInfoService.saveOrUpdate(entity);
return entity.getId();
}
@@ -101,7 +117,7 @@ public class WxOauthService {
}
synchronized (code.intern()) {
try {
- return wxCustomService.proxyWxMpService().getOAuth2Service().getAccessToken(code);
+ return wxCustomMpService.proxyWxMpService().getOAuth2Service().getAccessToken(code);
} catch (WxErrorException e) {
throw new RuntimeException(e);
}
@@ -140,7 +156,7 @@ public class WxOauthService {
throw new ServiceException("获取微信授权异常,WxOAuth2AccessToken不能为空");
}
try {
- return wxCustomService.proxyWxMpService().getOAuth2Service().getUserInfo(token, null);
+ return wxCustomMpService.proxyWxMpService().getOAuth2Service().getUserInfo(token, null);
} catch (WxErrorException e) {
throw new RuntimeException(e);
}
diff --git a/play-admin/src/main/java/com/starry/admin/utils/MoneyUtils.java b/play-admin/src/main/java/com/starry/admin/utils/MoneyUtils.java
new file mode 100644
index 0000000..0765826
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/utils/MoneyUtils.java
@@ -0,0 +1,36 @@
+package com.starry.admin.utils;
+
+
+import com.starry.admin.common.exception.CustomException;
+
+/**
+ * 金额辅助类
+ */
+public class MoneyUtils {
+
+
+ /**
+ * 校验金钱值是否正常
+ *
+ * @param money 金钱值
+ */
+ public static void verificationTypeIsNormal(String money) {
+ if (money == null || money.isEmpty()) {
+ throw new CustomException("金额类型异常");
+ }
+ float item;
+ try {
+ item = Float.parseFloat(money);
+ } catch (Exception e) {
+ throw new CustomException("金额类型异常");
+ }
+ if (item < 0f) {
+ throw new CustomException("金额不能小于0");
+ }
+ if (item > Integer.MAX_VALUE) {
+ throw new CustomException("金额超出计算范围");
+ }
+ }
+
+
+}
diff --git a/play-admin/src/main/resources/mapper/order/OrderDetailsInfoMapper.xml b/play-admin/src/main/resources/mapper/order/OrderDetailsInfoMapper.xml
deleted file mode 100644
index 01a78cf..0000000
--- a/play-admin/src/main/resources/mapper/order/OrderDetailsInfoMapper.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- select id,
- order_id,
- commodity_id,
- commodity_type,
- commodity_money,
- remake,
- updated_by,
- created_time,
- created_by,
- deleted,
- version
- from order_details_info
-
-
-
-
-
-
\ No newline at end of file
diff --git a/play-admin/src/main/resources/mapper/order/OrderInfoMapper.xml b/play-admin/src/main/resources/mapper/order/OrderInfoMapper.xml
deleted file mode 100644
index f69071a..0000000
--- a/play-admin/src/main/resources/mapper/order/OrderInfoMapper.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- select id,
- tenant_id,
- order_status,
- order_type,
- place_type,
- first_order,
- refund_type,
- order_money,
- purchaser_by,
- purchaser_time,
- reviewed_by,
- reviewed_time,
- reviewed_remark,
- updated_time,
- updated_by,
- created_time,
- created_by,
- deleted,
- version
- from order_info
-
-
-
-
-
-
\ No newline at end of file
diff --git a/play-admin/src/main/resources/play.properties b/play-admin/src/main/resources/play.properties
new file mode 100644
index 0000000..b89dfc6
--- /dev/null
+++ b/play-admin/src/main/resources/play.properties
@@ -0,0 +1,14 @@
+#微信公众号或者小程序等的appid
+wx.play.appId:xxxxxxxxxxxxx
+#微信支付商户号
+wx.play.mchId:xxxxxxxxxxxxx
+# 证书
+wx.play.apiclient_key.pem:xxxxxxxxx
+# 证书
+wx.play.apiclient_cert.pem:xxxxxxxxx
+# apiV3key
+wx.play.apiV3key:xxxxxxxxxxxxxxxxxx
+#支付回调通知地址
+wx.play.returnUrl:http://xxxxxxxxxx/wxPay/callBack
+# 退款回调地址
+wx.play.refundUrl:http://xxxxxxxxxx/wxPay/refund
diff --git a/play-common/src/main/java/com/starry/common/domain/BaseEntity.java b/play-common/src/main/java/com/starry/common/domain/BaseEntity.java
index fd7a314..f4866cc 100644
--- a/play-common/src/main/java/com/starry/common/domain/BaseEntity.java
+++ b/play-common/src/main/java/com/starry/common/domain/BaseEntity.java
@@ -3,6 +3,7 @@ package com.starry.common.domain;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.Version;
+import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
@@ -36,10 +37,13 @@ public class BaseEntity implements Serializable {
private String createdBy;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@TableField(fill = FieldFill.INSERT)
@ApiModelProperty(value = "创建时间")
private Date createdTime;
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@TableField(fill = FieldFill.UPDATE)
@ApiModelProperty(value = "更新时间")
private Date updatedTime;
@@ -52,7 +56,6 @@ public class BaseEntity implements Serializable {
@ApiModelProperty(value = "数据版本")
private Long version;
-
/**
* 搜索值
*/
diff --git a/play-common/src/main/java/com/starry/common/redis/RedisCache.java b/play-common/src/main/java/com/starry/common/redis/RedisCache.java
index bbddcf6..1360506 100644
--- a/play-common/src/main/java/com/starry/common/redis/RedisCache.java
+++ b/play-common/src/main/java/com/starry/common/redis/RedisCache.java
@@ -1,5 +1,6 @@
package com.starry.common.redis;
+import org.springframework.dao.QueryTimeoutException;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Component;
@@ -26,7 +27,12 @@ public class RedisCache {
*/
public T getCacheObject(final String key) {
ValueOperations operations = redisTemplate.opsForValue();
- return (T) operations.get(key);
+ try {
+ return (T) operations.get(key);
+ } catch (QueryTimeoutException e) {
+ throw new RuntimeException("系统错误,通讯异常");
+ }
+
}
/**
diff --git a/pom.xml b/pom.xml
index 486e6f4..716f465 100644
--- a/pom.xml
+++ b/pom.xml
@@ -186,23 +186,12 @@
- com.github.binarywang
- weixin-java-common
- ${weixin-java.version}
-
-
-
- com.github.binarywang
- weixin-java-miniapp
- ${weixin-java.version}
-
-
-
- com.github.binarywang
- weixin-java-pay
- ${weixin-java.version}
+ com.github.wxpay
+ wxpay-sdk
+ 0.0.3
+
org.redisson
redisson-spring-boot-starter