Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wenchuang-java
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wenchuang
wenchuang-java
Commits
58cc8f87
Commit
58cc8f87
authored
Oct 12, 2024
by
JayZhouLeiHao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修改代码
parent
3a078276
Hide whitespace changes
Inline
Side-by-side
Showing
91 changed files
with
2065 additions
and
804 deletions
+2065
-804
ruoyi-admin/src/main/java/com/ruoyi/web/core/config/H5MemberInterceptor.java
+6
-1
ruoyi-admin/src/main/resources/application-druid.yml
+26
-16
ruoyi-admin/src/main/resources/application.yml
+5
-5
ruoyi-admin/src/main/resources/cert/apiclient_cert.p12
+0
-0
ruoyi-admin/src/main/resources/cert/apiclient_cert.pem
+25
-0
ruoyi-common/src/main/java/com/ruoyi/common/enums/OrderStatus.java
+6
-3
ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
+3
-0
ruoyi-mall/pom.xml
+7
-5
ruoyi-mall/src/main/java/com/cyl/config/AESForWeixinGetPhoneNumber.java
+1
-0
ruoyi-mall/src/main/java/com/cyl/h5/controller/H5ActivityApplyInfoController.java
+8
-1
ruoyi-mall/src/main/java/com/cyl/h5/controller/H5AgreementInfoController.java
+48
-0
ruoyi-mall/src/main/java/com/cyl/h5/controller/H5BlackImgInfoController.java
+41
-0
ruoyi-mall/src/main/java/com/cyl/h5/controller/H5CommonController.java
+9
-3
ruoyi-mall/src/main/java/com/cyl/h5/controller/H5MemberAddressController.java
+7
-0
ruoyi-mall/src/main/java/com/cyl/h5/controller/H5MemberController.java
+22
-9
ruoyi-mall/src/main/java/com/cyl/h5/controller/H5OrderController.java
+97
-85
ruoyi-mall/src/main/java/com/cyl/h5/controller/H5PosterInfoController.java
+40
-0
ruoyi-mall/src/main/java/com/cyl/h5/controller/H5ProductCategoryController.java
+47
-0
ruoyi-mall/src/main/java/com/cyl/h5/controller/H5SalesAddressInfoController.java
+47
-0
ruoyi-mall/src/main/java/com/cyl/h5/controller/H5SlideshowInfoController.java
+49
-0
ruoyi-mall/src/main/java/com/cyl/h5/domain/dto/DeliveryReq.java
+1
-5
ruoyi-mall/src/main/java/com/cyl/h5/domain/dto/OrderProductListDTO.java
+11
-0
ruoyi-mall/src/main/java/com/cyl/h5/domain/form/ApplyRefundForm.java
+7
-4
ruoyi-mall/src/main/java/com/cyl/h5/domain/form/OrderSubmitForm.java
+14
-0
ruoyi-mall/src/main/java/com/cyl/h5/domain/vo/H5OrderVO.java
+15
-0
ruoyi-mall/src/main/java/com/cyl/h5/domain/vo/H5ProductVO.java
+4
-0
ruoyi-mall/src/main/java/com/cyl/h5/service/H5MemberService.java
+12
-0
ruoyi-mall/src/main/java/com/cyl/h5/service/H5OrderService.java
+194
-140
ruoyi-mall/src/main/java/com/cyl/job/OrderJob.java
+1
-1
ruoyi-mall/src/main/java/com/cyl/manager/act/controller/H5IntegralHistoryController.java
+3
-4
ruoyi-mall/src/main/java/com/cyl/manager/act/domain/entity/ActivityApplyInfo.java
+16
-0
ruoyi-mall/src/main/java/com/cyl/manager/act/domain/entity/ActivityInfo.java
+14
-1
ruoyi-mall/src/main/java/com/cyl/manager/act/domain/entity/IntegralHistory.java
+2
-2
ruoyi-mall/src/main/java/com/cyl/manager/act/domain/query/ActivityApplyInfoQuery.java
+2
-0
ruoyi-mall/src/main/java/com/cyl/manager/act/domain/query/ActivityInfoQuery.java
+5
-0
ruoyi-mall/src/main/java/com/cyl/manager/act/domain/vo/ActivityApplyInfoSaveVo.java
+28
-0
ruoyi-mall/src/main/java/com/cyl/manager/act/domain/vo/ActivityInfoVO.java
+4
-0
ruoyi-mall/src/main/java/com/cyl/manager/act/domain/vo/IntegralHistoryVO.java
+1
-1
ruoyi-mall/src/main/java/com/cyl/manager/act/mapper/IntegralHistoryMapper.java
+1
-1
ruoyi-mall/src/main/java/com/cyl/manager/act/service/ActivityApplyInfoService.java
+106
-1
ruoyi-mall/src/main/java/com/cyl/manager/act/service/ActivityInfoService.java
+37
-5
ruoyi-mall/src/main/java/com/cyl/manager/act/service/IntegralHistoryService.java
+33
-21
ruoyi-mall/src/main/java/com/cyl/manager/live/domain/WechatzbjView.java
+126
-0
ruoyi-mall/src/main/java/com/cyl/manager/oms/controller/OrderController.java
+41
-13
ruoyi-mall/src/main/java/com/cyl/manager/oms/domain/entity/Order.java
+18
-2
ruoyi-mall/src/main/java/com/cyl/manager/oms/domain/entity/OrderItem.java
+28
-2
ruoyi-mall/src/main/java/com/cyl/manager/oms/domain/form/DealWithAftersaleForm.java
+12
-0
ruoyi-mall/src/main/java/com/cyl/manager/oms/domain/form/ManagerOrderQueryForm.java
+1
-1
ruoyi-mall/src/main/java/com/cyl/manager/oms/domain/query/OrderQuery.java
+1
-1
ruoyi-mall/src/main/java/com/cyl/manager/oms/domain/vo/ManagerOrderDetailVO.java
+7
-0
ruoyi-mall/src/main/java/com/cyl/manager/oms/domain/vo/ManagerOrderProductVO.java
+16
-0
ruoyi-mall/src/main/java/com/cyl/manager/oms/domain/vo/ManagerOrderVO.java
+12
-1
ruoyi-mall/src/main/java/com/cyl/manager/oms/domain/vo/OrderItemVO.java
+17
-0
ruoyi-mall/src/main/java/com/cyl/manager/oms/domain/vo/OrderVO.java
+13
-2
ruoyi-mall/src/main/java/com/cyl/manager/oms/service/AftersaleService.java
+157
-168
ruoyi-mall/src/main/java/com/cyl/manager/oms/service/OrderItemService.java
+8
-4
ruoyi-mall/src/main/java/com/cyl/manager/oms/service/OrderService.java
+226
-39
ruoyi-mall/src/main/java/com/cyl/manager/oth/controller/SlideshowInfoController.java
+3
-3
ruoyi-mall/src/main/java/com/cyl/manager/oth/domain/entity/AgreementInfo.java
+12
-6
ruoyi-mall/src/main/java/com/cyl/manager/oth/domain/entity/BlackImgInfo.java
+10
-6
ruoyi-mall/src/main/java/com/cyl/manager/oth/domain/entity/ScenicSpotInfo.java
+1
-1
ruoyi-mall/src/main/java/com/cyl/manager/oth/domain/query/AgreementInfoQuery.java
+1
-2
ruoyi-mall/src/main/java/com/cyl/manager/oth/domain/query/BlackImgInfoQuery.java
+1
-2
ruoyi-mall/src/main/java/com/cyl/manager/oth/domain/query/ScenicSpotInfoQuery.java
+1
-1
ruoyi-mall/src/main/java/com/cyl/manager/oth/domain/vo/AgreementInfoVO.java
+21
-8
ruoyi-mall/src/main/java/com/cyl/manager/oth/domain/vo/BlackImgInfoVO.java
+12
-6
ruoyi-mall/src/main/java/com/cyl/manager/oth/domain/vo/ScenicSpotInfoVO.java
+1
-1
ruoyi-mall/src/main/java/com/cyl/manager/oth/service/AgreementInfoService.java
+0
-1
ruoyi-mall/src/main/java/com/cyl/manager/oth/service/BlackImgInfoService.java
+0
-4
ruoyi-mall/src/main/java/com/cyl/manager/oth/service/ScenicSpotInfoService.java
+2
-4
ruoyi-mall/src/main/java/com/cyl/manager/oth/service/SlideshowInfoService.java
+3
-2
ruoyi-mall/src/main/java/com/cyl/manager/pms/domain/entity/Product.java
+11
-0
ruoyi-mall/src/main/java/com/cyl/manager/pms/domain/vo/ProductVO.java
+10
-0
ruoyi-mall/src/main/java/com/cyl/manager/pms/service/ProductService.java
+26
-23
ruoyi-mall/src/main/java/com/cyl/manager/ums/controller/MemberController.java
+16
-8
ruoyi-mall/src/main/java/com/cyl/manager/ums/domain/dto/MemberDTO.java
+14
-0
ruoyi-mall/src/main/java/com/cyl/manager/ums/domain/entity/Member.java
+3
-0
ruoyi-mall/src/main/java/com/cyl/manager/ums/domain/query/MemberQuery.java
+2
-0
ruoyi-mall/src/main/java/com/cyl/manager/ums/domain/vo/MemberVO.java
+4
-0
ruoyi-mall/src/main/java/com/cyl/manager/ums/service/MemberService.java
+55
-11
ruoyi-mall/src/main/java/com/cyl/wechat/WechatController.java
+2
-2
ruoyi-mall/src/main/java/com/cyl/wechat/WechatPayConfig.java
+31
-1
ruoyi-mall/src/main/java/com/cyl/wechat/WechatPayUtil.java
+1
-1
ruoyi-mall/src/main/resources/mapper/act/IntegralHistoryMapper.xml
+1
-3
ruoyi-mall/src/main/resources/mapper/oms/OrderMapper.xml
+21
-5
ruoyi-mall/src/main/resources/mapper/oth/AgreementInfoMapper.xml
+4
-3
ruoyi-mall/src/main/resources/mapper/oth/BlackImgInfoMapper.xml
+4
-3
ruoyi-mall/src/main/resources/mapper/pms/ProductMapper.xml
+1
-0
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserRoleMapper.java
+3
-0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
+97
-150
ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
+3
-0
No files found.
ruoyi-admin/src/main/java/com/ruoyi/web/core/config/H5MemberInterceptor.java
View file @
58cc8f87
...
...
@@ -28,7 +28,12 @@ public class H5MemberInterceptor extends HandlerInterceptorAdapter {
"/h5/wechat/login"
,
"/h5/account/login"
,
"/h5/register"
,
"/h5/validate"
"/h5/validate"
,
"/h5/agreementInfo/list"
,
"/h5/file/upload"
,
"/h5/slideshowInfo/list"
,
"/h5/posterInfo/list"
,
"/h5/blackImgInfo/list"
};
@Override
...
...
ruoyi-admin/src/main/resources/application-druid.yml
View file @
58cc8f87
...
...
@@ -6,9 +6,9 @@ spring:
druid
:
# 主库数据源
master
:
url
:
jdbc:mysql://db1.prd.
jianghuxx
.com:3317/wenchuang_test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&rewriteBatchedStatements=true
url
:
jdbc:mysql://db1.prd.
nyinhong
.com:3317/wenchuang_test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&rewriteBatchedStatements=true
username
:
root
password
:
4f9fa23639242790
password
:
2a0a6dfc62648fc3
# 从库数据源
slave
:
# 从数据源开关/默认关闭
...
...
@@ -21,18 +21,27 @@ spring:
login-username
:
ruoyi
login-password
:
123456
# redis 配置
# redis:
# # 地址
# host: 127.0.0.1
# # 端口,默认为6379
# port: 6379
# # 数据库索引
# database: 0
# # 密码
## password: yongqi@2022
redis
:
# 地址
host
:
localhost
host
:
cluster1.prd.nyinhong.com
# 端口,默认为6379
port
:
63
7
9
port
:
63
1
9
# 数据库索引
database
:
0
# 密码
# password:
password
:
yongqi@2022
ruoyi
:
# 文件路径 示例( Windows配置C:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
profile
:
E:/yinhong/wenchuang/Java/
file
profile
:
/www/wwwroot/wenchuang/pro
file
scheduling
:
enabled
:
false
#操作oss需要的一些参数
...
...
@@ -43,16 +52,17 @@ aliyun:
endPoint
:
你的endpoint
# Endpoint:在阿里云oss控制台查看自己使用的endpoint
bucketName
:
你的bucketName
# bucket 名称
wechat
:
enabled
:
false
appId
:
你的微信服务号信息(h5的时候需要,小程序的时候不需要)
secret
:
你的微信服务号信息(h5的时候需要,小程序的时候不需要)
merchantId
:
微信支付商户号
privateKeyPath
:
微信支付密钥地址相对地址
merchantSerialNumber
:
微信支付密钥对应的序列号
apiV3key
:
微信支付apiV3key
notifyUrl
:
微信支付回调地址
miniProgramAppId
:
wxb323afcbe152514f
miniProgramSecret
:
f975fc175dad70717f9a09384b55a9f7
enabled
:
true
appId
:
secret
:
merchantId
:
1685133653
# privateKeyPath: E:\yinhong\wenchuang\Java\RuoYi-Mall\ruoyi-admin\src\main\resources\cert\apiclient_key.pem
privateKeyPath
:
/www/wwwroot/wenchuang/cert/apiclient_key.pem
merchantSerialNumber
:
36FCC4F5C894D8A64F56AFA572A461E5F50A49B7
apiV3key
:
1ascgdvbhyacbnhfdaqwexzfghbvgfa1
notifyUrl
:
https://wenchuang.yyinhong.cn/api/no-auth/wechat/notify
miniProgramAppId
:
wx4fd771bb1917b4f6
miniProgramSecret
:
72eaa3bc19d635736c5ecfadf3404b1a
sms
:
enabled
:
true
# 阿里云 dysmsapi.aliyuncs.com
...
...
ruoyi-admin/src/main/resources/application.yml
View file @
58cc8f87
...
...
@@ -9,7 +9,7 @@ ruoyi:
# 实例演示开关
demoEnabled
:
true
# 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
profile
:
C:/ruoyi/uploadPath
profile
:
/www/wwwroot/wenchuang/profile
# 获取ip地址开关
addressEnabled
:
true
# 验证码类型 math 数组计算 char 字符验证
...
...
@@ -120,8 +120,8 @@ token:
# 令牌密钥
secret
:
abcdefghijkomnopqrstuvwxyx
# 令牌有效期(默认30分钟)
expireTime
:
30
memberExpireTime
:
30
expireTime
:
3
8
0
memberExpireTime
:
3
8
0
# mybatis-plus 配置
mybatis-plus
:
# 搜索指定包别名
...
...
@@ -156,8 +156,8 @@ xss:
urlPatterns
:
/system/*,/monitor/*,/tool/*
extra
:
wx
:
appid
:
wx
b323afcbe152514f
secret
:
f975fc175dad70717f9a09384b55a9f7
appid
:
wx
4fd771bb1917b4f6
secret
:
72eaa3bc19d635736c5ecfadf3404b1a
redirect
:
"
"
scheduling
:
enabled
:
true
...
...
ruoyi-admin/src/main/resources/cert/apiclient_cert.p12
0 → 100644
View file @
58cc8f87
File added
ruoyi-admin/src/main/resources/cert/apiclient_cert.pem
0 → 100644
View file @
58cc8f87
-----BEGIN CERTIFICATE-----
MIIEITCCAwmgAwIBAgIUNvzE9ciU2KZPVq+lcqRh5fUKSbcwDQYJKoZIhvcNAQEL
BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT
FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg
Q0EwHhcNMjQwOTEyMDMxMDA5WhcNMjkwOTExMDMxMDA5WjB7MRMwEQYDVQQDDAox
Njg1MTMzNjUzMRswGQYDVQQKDBLlvq7kv6HllYbmiLfns7vnu58xJzAlBgNVBAsM
HuS4iua1t+S8mOeyn+W5v+WRiuaciemZkOWFrOWPuDELMAkGA1UEBhMCQ04xETAP
BgNVBAcMCFNoZW5aaGVuMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
3z4OMaUWtmM+Kmygz3wtRZaw/u7p0y96sqA2o0QX/kUfkaDsGWblyCpA9O1CRFER
boNRZO5BRAoCnKFwe0C/xcjwzo9lYTO6oWYdBfTk09gnX6tg5+H63ypfKvhYSjbw
4cNKuvl9uA5KM4MiuPyPCkIGBiReTEsqUsH4jXWRN7aJ/m6FVIAQZDKZ57407uk6
FaMpYxaM1K1xxOSxlezrjR2d95VokKi/SQCkkDypX0THQOKB/iP7/juMVkXHIcD7
n0tNGiiy/9BU3CF9ZZOE5AlpDjaUZoXRMdr4AuKToYvqIzeRbEcVxHU19wTx0WB7
w8JvjtdQYnpCxPTv6k8TsQIDAQABo4G5MIG2MAkGA1UdEwQCMAAwCwYDVR0PBAQD
AgP4MIGbBgNVHR8EgZMwgZAwgY2ggYqggYeGgYRodHRwOi8vZXZjYS5pdHJ1cy5j
b20uY24vcHVibGljL2l0cnVzY3JsP0NBPTFCRDQyMjBFNTBEQkMwNEIwNkFEMzk3
NTQ5ODQ2QzAxQzNFOEVCRDImc2c9SEFDQzQ3MUI2NTQyMkUxMkIyN0E5RDMzQTg3
QUQxQ0RGNTkyNkUxNDAzNzEwDQYJKoZIhvcNAQELBQADggEBAFIMZFxybIjhBPzD
vy1OXKGluTBnVsb20qsSOWkpAHpN660U8BN+GTWWP/l0jZbfnngaMNQpamWd/KPU
f9fy3DfWzF+2iqNSsYxLGRa7Tz6uvxvBlS5mpnRYqiuMzAZhtrVomZV+yNfGPkzO
0K5vi3BsZ+IqkaYQsbVwNW8vxpw604F+k9MLhaVBxSqKKDhtg20Bl/WEEzaEUWvW
wkj44IiT8IQYkS2sSnwQCpo53uTHdYNTmF6DYqB8ZrVS+0G1oVaSqegdBLweVEdJ
msmo2A4a5iQq+JyFSjZNb0hir/BV4er+jXZ0uCs0YGAFGUwh3S1apavFYp073J5x
AEKZ6cU=
-----END CERTIFICATE-----
ruoyi-common/src/main/java/com/ruoyi/common/enums/OrderStatus.java
View file @
58cc8f87
...
...
@@ -12,9 +12,12 @@ public enum OrderStatus
NOT_DELIVERED
(
1
,
"待发货"
),
DELIVERED
(
2
,
"待收货"
),
COMPLETE
(
3
,
"已完成"
),
CLOSED
(
4
,
"已关闭"
),
INVALID
(
5
,
"无效订单"
),
REFUUND
(-
2
,
"售后订单"
);
CLOSED
(
4
,
"已取消"
),
INVALID
(
5
,
"已售后"
),
REFUUND
(
6
,
"售后中"
),
REFUND_ERROR
(
9
,
"退款失败"
),
REFUND_OK
(
8
,
"退款成功"
);
private
final
Integer
type
;
private
final
String
msg
;
...
...
ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
View file @
58cc8f87
...
...
@@ -109,6 +109,9 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
).
permitAll
()
.
antMatchers
(
"/h5/**"
).
permitAll
()
.
antMatchers
(
"/no-auth/**"
).
permitAll
()
.
antMatchers
(
"/h5/slideshowInfo/**"
).
permitAll
()
.
antMatchers
(
"/h5/posterInfo/**"
).
permitAll
()
.
antMatchers
(
"/h5/blackImgInfo/**"
).
permitAll
()
.
antMatchers
(
"/common/download**"
).
anonymous
()
.
antMatchers
(
"/common/download/resource**"
).
anonymous
()
.
antMatchers
(
"/swagger-ui.html"
).
anonymous
()
...
...
ruoyi-mall/pom.xml
View file @
58cc8f87
...
...
@@ -62,11 +62,7 @@
<artifactId>
junit
</artifactId>
<scope>
test
</scope>
</dependency>
<dependency>
<groupId>
org.bouncycastle
</groupId>
<artifactId>
bcprov-jdk15to18
</artifactId>
<version>
1.64
</version>
</dependency>
<dependency>
<groupId>
org.springframework
</groupId>
<artifactId>
spring-test
</artifactId>
...
...
@@ -91,5 +87,11 @@
<groupId>
com.ruoyi
</groupId>
<artifactId>
ruoyi-framework
</artifactId>
</dependency>
<dependency>
<groupId>
org.bouncycastle
</groupId>
<artifactId>
bcprov-jdk15on
</artifactId>
<version>
1.70
</version>
<scope>
compile
</scope>
</dependency>
</dependencies>
</project>
ruoyi-mall/src/main/java/com/cyl/config/AESForWeixinGetPhoneNumber.java
View file @
58cc8f87
...
...
@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
import
com.alibaba.fastjson.JSONObject
;
import
org.bouncycastle.jce.provider.BouncyCastleProvider
;
import
javax.crypto.Cipher
;
import
javax.crypto.spec.IvParameterSpec
;
import
javax.crypto.spec.SecretKeySpec
;
...
...
ruoyi-mall/src/main/java/com/cyl/h5/controller/H5ActivityApplyInfoController.java
View file @
58cc8f87
...
...
@@ -2,6 +2,7 @@ package com.cyl.h5.controller;
import
com.cyl.manager.act.domain.entity.ActivityApplyInfo
;
import
com.cyl.manager.act.domain.query.ActivityApplyInfoQuery
;
import
com.cyl.manager.act.domain.vo.ActivityApplyInfoSaveVo
;
import
com.cyl.manager.act.service.ActivityApplyInfoService
;
import
com.ruoyi.common.annotation.Log
;
import
com.ruoyi.common.core.controller.BaseController
;
...
...
@@ -35,7 +36,6 @@ public class H5ActivityApplyInfoController extends BaseController {
@ApiOperation
(
"我的报名列表"
)
@PostMapping
(
"/list"
)
public
ResponseEntity
<
Page
<
ActivityApplyInfo
>>
list
(
@RequestBody
ActivityApplyInfoQuery
query
,
Pageable
page
)
{
query
.
setUserId
(
getUserId
());
List
<
ActivityApplyInfo
>
list
=
service
.
selectList
(
query
,
page
);
return
ResponseEntity
.
ok
(
new
PageImpl
<>(
list
,
page
,
((
com
.
github
.
pagehelper
.
Page
)
list
).
getTotal
()));
}
...
...
@@ -52,4 +52,11 @@ public class H5ActivityApplyInfoController extends BaseController {
public
ResponseEntity
<
Integer
>
edit
(
@RequestBody
ActivityApplyInfo
activityApplyInfo
)
{
return
ResponseEntity
.
ok
(
service
.
update
(
activityApplyInfo
));
}
@ApiOperation
(
"新增活动报名信息"
)
@Log
(
title
=
"活动报名信息"
,
businessType
=
BusinessType
.
INSERT
)
@PostMapping
public
ResponseEntity
<
Integer
>
insert
(
@RequestBody
ActivityApplyInfoSaveVo
activityApplyInfoSaveVo
)
{
return
ResponseEntity
.
ok
(
service
.
insertAll
(
activityApplyInfoSaveVo
));
}
}
ruoyi-mall/src/main/java/com/cyl/h5/controller/H5AgreementInfoController.java
0 → 100644
View file @
58cc8f87
package
com
.
cyl
.
h5
.
controller
;
import
com.cyl.manager.oth.domain.entity.AgreementInfo
;
import
com.cyl.manager.oth.domain.query.AgreementInfoQuery
;
import
com.cyl.manager.oth.service.AgreementInfoService
;
import
com.ruoyi.common.annotation.Log
;
import
com.ruoyi.common.core.controller.BaseController
;
import
com.ruoyi.common.enums.BusinessType
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.domain.Page
;
import
org.springframework.data.domain.PageImpl
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.security.access.prepost.PreAuthorize
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.List
;
/**
* 协议管理信息Controller
*
* @author zcc
* @date 2024-08-01
*/
@Api
(
description
=
"小程序-协议管理信息接口列表"
)
@RestController
@RequestMapping
(
"/h5/agreementInfo"
)
public
class
H5AgreementInfoController
extends
BaseController
{
@Autowired
private
AgreementInfoService
service
;
@ApiOperation
(
"小程序-查询协议管理信息列表"
)
@PostMapping
(
"/list"
)
public
ResponseEntity
<
Page
<
AgreementInfo
>>
list
(
@RequestBody
AgreementInfoQuery
query
,
Pageable
page
)
{
List
<
AgreementInfo
>
list
=
service
.
selectList
(
query
,
page
);
return
ResponseEntity
.
ok
(
new
PageImpl
<>(
list
,
page
,
((
com
.
github
.
pagehelper
.
Page
)
list
).
getTotal
()));
}
@ApiOperation
(
"小程序-获取协议管理信息详细信息"
)
@GetMapping
(
value
=
"/{id}"
)
public
ResponseEntity
<
AgreementInfo
>
getInfo
(
@PathVariable
(
"id"
)
Long
id
)
{
return
ResponseEntity
.
ok
(
service
.
selectById
(
id
));
}
}
ruoyi-mall/src/main/java/com/cyl/h5/controller/H5BlackImgInfoController.java
0 → 100644
View file @
58cc8f87
package
com
.
cyl
.
h5
.
controller
;
import
com.cyl.manager.oth.domain.entity.BlackImgInfo
;
import
com.cyl.manager.oth.domain.query.BlackImgInfoQuery
;
import
com.cyl.manager.oth.service.BlackImgInfoService
;
import
com.ruoyi.common.annotation.Log
;
import
com.ruoyi.common.core.controller.BaseController
;
import
com.ruoyi.common.enums.BusinessType
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.domain.Page
;
import
org.springframework.data.domain.PageImpl
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.security.access.prepost.PreAuthorize
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.List
;
/**
* 背景图管理信息Controller
*
* @author zcc
* @date 2024-08-01
*/
@Api
(
description
=
"小程序-背景图管理信息接口列表"
)
@RestController
@RequestMapping
(
"/h5/blackImgInfo"
)
public
class
H5BlackImgInfoController
extends
BaseController
{
@Autowired
private
BlackImgInfoService
service
;
@ApiOperation
(
"小程序-查询背景图管理信息列表"
)
@PostMapping
(
"/list"
)
public
ResponseEntity
<
Page
<
BlackImgInfo
>>
list
(
@RequestBody
BlackImgInfoQuery
query
,
Pageable
page
)
{
List
<
BlackImgInfo
>
list
=
service
.
selectList
(
query
,
page
);
return
ResponseEntity
.
ok
(
new
PageImpl
<>(
list
,
page
,
((
com
.
github
.
pagehelper
.
Page
)
list
).
getTotal
()));
}
}
ruoyi-mall/src/main/java/com/cyl/h5/controller/H5CommonController.java
View file @
58cc8f87
...
...
@@ -12,6 +12,7 @@ import com.ruoyi.common.core.domain.AjaxResult;
import
com.ruoyi.common.core.redis.RedisService
;
import
com.ruoyi.common.enums.BusinessType
;
import
com.ruoyi.common.utils.OssUtils
;
import
com.ruoyi.common.utils.file.FileUploadUtils
;
import
com.ruoyi.system.service.ISysConfigService
;
import
io.swagger.annotations.ApiOperation
;
import
org.apache.commons.lang3.StringUtils
;
...
...
@@ -20,6 +21,7 @@ import org.springframework.http.ResponseEntity;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.multipart.MultipartFile
;
import
java.io.IOException
;
import
java.util.*
;
import
java.util.stream.Collectors
;
...
...
@@ -96,9 +98,13 @@ public class H5CommonController {
}
@PostMapping
(
"/h5/file/upload"
)
public
AjaxResult
uploadFile
(
MultipartFile
file
)
{
String
url
=
ossUtils
.
uploadOneFile
(
file
);
return
AjaxResult
.
successData
(
url
);
public
AjaxResult
uploadFile
(
MultipartFile
file
)
throws
IOException
{
//返回上传oss的url
String
url
=
FileUploadUtils
.
upload
(
file
);
AjaxResult
ajax
=
AjaxResult
.
success
();
ajax
.
put
(
"fileName"
,
file
.
getOriginalFilename
());
ajax
.
put
(
"url"
,
url
);
return
ajax
;
}
@GetMapping
(
"/no-auth/config/get"
)
...
...
ruoyi-mall/src/main/java/com/cyl/h5/controller/H5MemberAddressController.java
View file @
58cc8f87
...
...
@@ -3,12 +3,15 @@ package com.cyl.h5.controller;
import
com.cyl.h5.service.H5MemberAddressService
;
import
com.cyl.manager.ums.domain.form.MemberAddressForm
;
import
com.cyl.manager.ums.domain.vo.MemberAddressVO
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.List
;
@Api
(
description
=
"小程序-会员收货地址"
)
@RestController
@RequestMapping
(
"/h5/member/address"
)
public
class
H5MemberAddressController
{
...
...
@@ -17,6 +20,7 @@ public class H5MemberAddressController {
private
H5MemberAddressService
h5MemberAddressService
;
@GetMapping
(
"/list"
)
@ApiOperation
(
"小程序-会员收货地址列表"
)
public
ResponseEntity
<
List
<
MemberAddressVO
>>
getList
(){
return
ResponseEntity
.
ok
(
h5MemberAddressService
.
selectList
());
}
...
...
@@ -27,11 +31,13 @@ public class H5MemberAddressController {
}
@PostMapping
(
"/create"
)
@ApiOperation
(
"小程序-新增会员收货地址"
)
public
ResponseEntity
<
Integer
>
create
(
@RequestBody
MemberAddressForm
memberAddressForm
){
return
ResponseEntity
.
ok
(
h5MemberAddressService
.
insert
(
memberAddressForm
));
}
@PutMapping
(
"/update"
)
@ApiOperation
(
"小程序-修改会员收货地址"
)
public
ResponseEntity
<
Integer
>
update
(
@RequestBody
MemberAddressForm
memberAddressForm
){
return
ResponseEntity
.
ok
(
h5MemberAddressService
.
update
(
memberAddressForm
));
}
...
...
@@ -42,6 +48,7 @@ public class H5MemberAddressController {
}
@DeleteMapping
(
"/{id}"
)
@ApiOperation
(
"小程序-删除会员收货地址"
)
public
ResponseEntity
<
Integer
>
remove
(
@PathVariable
Long
id
)
{
return
ResponseEntity
.
ok
(
h5MemberAddressService
.
deleteById
(
id
));
}
...
...
ruoyi-mall/src/main/java/com/cyl/h5/controller/H5MemberController.java
View file @
58cc8f87
package
com
.
cyl
.
h5
.
controller
;
import
com.alibaba.fastjson.JSON
;
import
com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper
;
import
com.cyl.h5.domain.form.RegisterForm
;
import
com.cyl.h5.domain.vo.H5LoginVO
;
import
com.cyl.h5.domain.vo.RegisterVO
;
import
com.cyl.h5.domain.vo.ValidatePhoneVO
;
import
com.cyl.h5.domain.vo.WechatLoginVO
;
import
com.cyl.h5.service.H5MemberService
;
import
com.cyl.manager.ums.domain.entity.Member
;
import
com.cyl.manager.ums.domain.vo.MemberVO
;
import
com.cyl.manager.ums.mapper.MemberMapper
;
import
com.ruoyi.common.core.domain.model.LoginMember
;
import
com.ruoyi.framework.web.service.TokenService
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.http.ResponseEntity
;
...
...
@@ -19,6 +23,7 @@ import org.springframework.web.bind.annotation.*;
import
javax.servlet.http.HttpServletRequest
;
@Api
(
description
=
"小程序-会员信息接口"
)
@RestController
@RequestMapping
(
"/h5"
)
public
class
H5MemberController
{
...
...
@@ -26,29 +31,31 @@ public class H5MemberController {
@Autowired
private
H5MemberService
service
;
@Autowired
private
MemberMapper
memberMapper
;
@Autowired
private
TokenService
tokenService
;
@ApiOperation
(
"会员注册"
)
@PostMapping
(
"/register"
)
public
ResponseEntity
<
RegisterVO
>
register
(
@RequestBody
RegisterForm
request
){
public
ResponseEntity
<
RegisterVO
>
register
(
@RequestBody
RegisterForm
request
)
{
return
ResponseEntity
.
ok
(
service
.
register
(
request
));
}
@ApiOperation
(
"注册登录验证码校验手机号"
)
@GetMapping
(
"/validate/{phone}"
)
public
ResponseEntity
<
ValidatePhoneVO
>
validate
(
@PathVariable
String
phone
){
public
ResponseEntity
<
ValidatePhoneVO
>
validate
(
@PathVariable
String
phone
)
{
return
ResponseEntity
.
ok
(
service
.
validate
(
phone
));
}
@ApiOperation
(
"手机号密码登录"
)
@PostMapping
(
"/account/login"
)
public
ResponseEntity
<
H5LoginVO
>
accountLogin
(
@RequestBody
String
data
){
public
ResponseEntity
<
H5LoginVO
>
accountLogin
(
@RequestBody
String
data
)
{
return
ResponseEntity
.
ok
(
service
.
accountLogin
(
data
));
}
@
Pos
tMapping
(
"/wechat/login"
)
public
ResponseEntity
<
H5LoginVO
>
wechatLogin
(
String
data
)
throws
Exception
{
@
Ge
tMapping
(
"/wechat/login"
)
public
ResponseEntity
<
H5LoginVO
>
wechatLogin
(
@RequestParam
(
"data"
)
String
data
)
throws
Exception
{
if
(
StringUtils
.
isEmpty
(
data
))
{
return
ResponseEntity
.
ok
(
null
);
}
...
...
@@ -58,19 +65,19 @@ public class H5MemberController {
@ApiOperation
(
"sms登录"
)
@PostMapping
(
"/sms/login"
)
public
ResponseEntity
<
H5LoginVO
>
smsLogin
(
@RequestBody
String
data
){
public
ResponseEntity
<
H5LoginVO
>
smsLogin
(
@RequestBody
String
data
)
{
return
ResponseEntity
.
ok
(
service
.
smsLogin
(
data
));
}
@ApiOperation
(
"获取会员信息"
)
@GetMapping
(
"/member/info"
)
public
ResponseEntity
<
MemberVO
>
getMemberInfo
(){
public
ResponseEntity
<
MemberVO
>
getMemberInfo
()
{
return
ResponseEntity
.
ok
(
service
.
getMemberInfo
());
}
@ApiOperation
(
"设置会员微信信息"
)
@PostMapping
(
"/member/setWechatInfo"
)
public
void
setWechatInfo
(
@RequestBody
String
data
){
public
void
setWechatInfo
(
@RequestBody
String
data
)
{
service
.
setWechatInfo
(
data
);
}
...
...
@@ -78,8 +85,14 @@ public class H5MemberController {
@GetMapping
(
"/record/login"
)
public
void
add
(
HttpServletRequest
request
)
{
LoginMember
loginMember
=
tokenService
.
getLoginMember
(
request
);
if
(
loginMember
!=
null
){
if
(
loginMember
!=
null
)
{
service
.
insert
(
loginMember
.
getMemberId
());
}
}
@ApiOperation
(
"修改会员信息"
)
@PutMapping
(
"/upd"
)
public
void
upd
(
@RequestBody
Member
member
)
{
service
.
upd
(
member
);
}
}
ruoyi-mall/src/main/java/com/cyl/h5/controller/H5OrderController.java
View file @
58cc8f87
...
...
@@ -7,8 +7,10 @@ import com.cyl.h5.domain.vo.*;
import
com.cyl.h5.service.H5OrderService
;
import
com.cyl.manager.oms.domain.entity.Aftersale
;
import
com.cyl.manager.oms.domain.entity.Order
;
import
com.cyl.manager.oms.domain.entity.OrderItem
;
import
com.cyl.manager.oms.domain.form.DealWithAftersaleForm
;
import
com.cyl.manager.oms.service.AftersaleService
;
import
com.cyl.manager.oms.service.OrderItemService
;
import
com.cyl.manager.oms.service.OrderService
;
import
com.cyl.manager.ums.domain.entity.Member
;
import
com.ruoyi.common.constant.Constants
;
...
...
@@ -17,6 +19,7 @@ import com.ruoyi.common.core.redis.RedisService;
import
com.ruoyi.common.enums.AftersaleStatus
;
import
com.ruoyi.common.enums.OrderStatus
;
import
com.ruoyi.framework.config.LocalDataUtil
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -27,6 +30,7 @@ import org.springframework.web.bind.annotation.*;
import
javax.validation.Valid
;
@Api
(
description
=
"小程序-订单信息"
)
@RestController
@RequestMapping
(
"/h5/order"
)
@Slf4j
...
...
@@ -40,20 +44,23 @@ public class H5OrderController {
@Autowired
private
OrderService
orderService
;
@ApiOperation
(
"下单"
)
@Autowired
private
OrderItemService
orderItemService
;
@ApiOperation
(
"小程序-下单"
)
@PostMapping
(
"/add"
)
public
ResponseEntity
<
Long
>
submit
(
@RequestBody
OrderSubmitForm
form
)
{
Member
member
=
(
Member
)
LocalDataUtil
.
getVar
(
Constants
.
MEMBER_INFO
);
Long
memberId
=
member
.
getId
();
String
redisKey
=
"h5_order_add"
+
memberId
;
String
redisValue
=
memberId
+
"_"
+
System
.
currentTimeMillis
();
try
{
try
{
redisService
.
lock
(
redisKey
,
redisValue
,
60
);
return
ResponseEntity
.
ok
(
service
.
submit
(
form
));
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
log
.
info
(
"创建订单方法异常"
,
e
);
throw
new
RuntimeException
(
e
.
getMessage
());
}
finally
{
}
finally
{
try
{
redisService
.
unLock
(
redisKey
,
redisValue
);
}
catch
(
Exception
e
)
{
...
...
@@ -64,50 +71,59 @@ public class H5OrderController {
@ApiOperation
(
"下单前校验"
)
@PostMapping
(
"/addOrderCheck"
)
public
ResponseEntity
<
OrderCalcVO
>
addOrderCheck
(
@RequestBody
OrderCreateForm
orderCreateForm
){
public
ResponseEntity
<
OrderCalcVO
>
addOrderCheck
(
@RequestBody
OrderCreateForm
orderCreateForm
)
{
return
ResponseEntity
.
ok
(
service
.
addOrderCheck
(
orderCreateForm
));
}
@ApiOperation
(
"订单列表"
)
@GetMapping
(
"/page"
)
public
ResponseEntity
<
PageImpl
<
H5OrderVO
>>
orderPage
(
Integer
status
,
Pageable
pageable
){
public
ResponseEntity
<
PageImpl
<
H5OrderVO
>>
orderPage
(
Integer
status
,
Pageable
pageable
)
{
Member
member
=
(
Member
)
LocalDataUtil
.
getVar
(
Constants
.
MEMBER_INFO
);
return
ResponseEntity
.
ok
(
service
.
orderPage
(
status
,
member
.
getId
(),
pageable
));
}
@ApiOperation
(
"订单详情"
)
@GetMapping
(
"/orderDetail"
)
public
ResponseEntity
<
H5OrderVO
>
orderDetail
(
@RequestParam
(
required
=
false
)
Long
orderId
){
if
(
orderId
==
null
){
public
ResponseEntity
<
H5OrderVO
>
orderDetail
(
@RequestParam
(
required
=
false
)
Long
orderId
)
{
if
(
orderId
==
null
)
{
throw
new
RuntimeException
(
"系统繁忙"
);
}
return
ResponseEntity
.
ok
(
service
.
orderDetail
(
orderId
));
}
/**
* 确认收货
*
* @param orderId
* @param type=0主订单,type=1子订单
* @return
*/
@ApiOperation
(
"确认收货"
)
@GetMapping
(
"/orderComplete"
)
public
ResponseEntity
<
String
>
orderComplete
(
Long
orderId
)
{
log
.
info
(
"确认收货,订单id:"
+
orderId
);
String
redisKey
=
"h5_oms_order_complete_"
+
orderId
;
String
redisValue
=
orderId
+
"_"
+
System
.
currentTimeMillis
();
try
{
redisService
.
lock
(
redisKey
,
redisValue
,
60
);
return
ResponseEntity
.
ok
(
service
.
orderComplete
(
orderId
));
}
catch
(
Exception
e
){
log
.
error
(
"确认收货异常"
,
e
);
public
ResponseEntity
<
String
>
orderComplete
(
Long
orderId
,
Long
type
)
{
log
.
info
(
"确认收货,订单id:"
+
orderId
);
String
redisKey
=
"h5_oms_order_complete_"
+
orderId
;
String
redisValue
=
orderId
+
"_"
+
System
.
currentTimeMillis
();
Member
member
=
(
Member
)
LocalDataUtil
.
getVar
(
Constants
.
MEMBER_INFO
);
Long
memberId
=
member
.
getId
();
try
{
redisService
.
lock
(
redisKey
,
redisValue
,
60
);
return
ResponseEntity
.
ok
(
service
.
orderComplete
(
orderId
,
type
,
memberId
));
}
catch
(
Exception
e
)
{
log
.
error
(
"确认收货异常"
,
e
);
throw
new
RuntimeException
(
e
.
getMessage
());
}
finally
{
try
{
redisService
.
unLock
(
redisKey
,
redisValue
);
}
catch
(
Exception
e
)
{
log
.
error
(
""
,
e
);
}
finally
{
try
{
redisService
.
unLock
(
redisKey
,
redisValue
);
}
catch
(
Exception
e
)
{
log
.
error
(
""
,
e
);
}
}
}
@ApiOperation
(
"订单数量统计"
)
@GetMapping
(
"/countOrder"
)
public
ResponseEntity
<
CountOrderVO
>
orderNumCount
(){
public
ResponseEntity
<
CountOrderVO
>
orderNumCount
()
{
Member
member
=
(
Member
)
LocalDataUtil
.
getVar
(
Constants
.
MEMBER_INFO
);
Long
memberId
=
member
.
getId
();
return
ResponseEntity
.
ok
(
service
.
orderNumCount
(
memberId
));
...
...
@@ -115,69 +131,76 @@ public class H5OrderController {
@ApiOperation
(
"取消订单"
)
@PostMapping
(
"/orderCancel"
)
public
ResponseEntity
<
String
>
orderCancel
(
@RequestBody
CancelOrderForm
request
){
public
ResponseEntity
<
String
>
orderCancel
(
@RequestBody
CancelOrderForm
request
)
{
Member
member
=
(
Member
)
LocalDataUtil
.
getVar
(
Constants
.
MEMBER_INFO
);
String
redisKey
=
"h5_oms_order_cancel_"
+
request
.
getIdList
().
get
(
0
);
String
redisValue
=
request
.
getIdList
().
get
(
0
)
+
"_"
+
System
.
currentTimeMillis
();
try
{
redisService
.
lock
(
redisKey
,
redisValue
,
60
);
String
redisKey
=
"h5_oms_order_cancel_"
+
request
.
getIdList
().
get
(
0
);
String
redisValue
=
request
.
getIdList
().
get
(
0
)
+
"_"
+
System
.
currentTimeMillis
();
try
{
redisService
.
lock
(
redisKey
,
redisValue
,
60
);
return
ResponseEntity
.
ok
(
service
.
orderBatchCancel
(
request
,
member
.
getId
()));
}
catch
(
Exception
e
)
{
log
.
error
(
"订单取消方法异常"
,
e
);
}
catch
(
Exception
e
)
{
log
.
error
(
"订单取消方法异常"
,
e
);
throw
new
RuntimeException
(
"订单取消失败"
);
}
finally
{
}
finally
{
try
{
redisService
.
unLock
(
redisKey
,
redisValue
);
}
catch
(
Exception
e
)
{
log
.
error
(
""
,
e
);
redisService
.
unLock
(
redisKey
,
redisValue
);
}
catch
(
Exception
e
)
{
log
.
error
(
""
,
e
);
}
}
}
@ApiOperation
(
"订单支付"
)
@PostMapping
(
"/orderPay"
)
public
ResponseEntity
<
OrderPayVO
>
orderPay
(
@RequestBody
OrderPayForm
req
){
log
.
info
(
"订单支付"
,
"提交的数据:"
+
JSONObject
.
toJSONString
(
req
));
String
redisKey
=
"h5_oms_order_pay_"
+
req
.
getPayId
();
String
redisValue
=
req
.
getPayId
()
+
"_"
+
System
.
currentTimeMillis
();
public
ResponseEntity
<
OrderPayVO
>
orderPay
(
@RequestBody
OrderPayForm
req
)
{
log
.
info
(
"订单支付"
,
"提交的数据:"
+
JSONObject
.
toJSONString
(
req
));
String
redisKey
=
"h5_oms_order_pay_"
+
req
.
getPayId
();
String
redisValue
=
req
.
getPayId
()
+
"_"
+
System
.
currentTimeMillis
();
try
{
redisService
.
lock
(
redisKey
,
redisValue
,
60
);
Member
member
=
(
Member
)
LocalDataUtil
.
getVar
(
Constants
.
MEMBER_INFO
);
Long
memberId
=
member
.
getId
();
req
.
setMemberId
(
memberId
);
return
ResponseEntity
.
ok
(
service
.
orderPay
(
req
));
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
log
.
error
(
"支付方法异常"
,
e
);
throw
new
RuntimeException
(
e
.
getMessage
());
}
finally
{
try
{
redisService
.
unLock
(
redisKey
,
redisValue
);
}
catch
(
Exception
e
)
{
log
.
error
(
""
,
e
);
}
finally
{
try
{
redisService
.
unLock
(
redisKey
,
redisValue
);
}
catch
(
Exception
e
)
{
log
.
error
(
""
,
e
);
}
}
}
@ApiOperation
(
"申请售后"
)
@PostMapping
(
"/applyRefund"
)
public
ResponseEntity
<
Boolean
>
applyRefund
(
@RequestBody
ApplyRefundForm
applyRefundForm
){
public
ResponseEntity
<
Boolean
>
applyRefund
(
@RequestBody
ApplyRefundForm
applyRefundForm
)
{
String
redisKey
=
"h5_oms_order_applyRefund_"
+
applyRefundForm
.
getOrderId
();
String
redisValue
=
applyRefundForm
.
getOrderId
()
+
"_"
+
System
.
currentTimeMillis
();
try
{
Member
member
=
(
Member
)
LocalDataUtil
.
getVar
(
Constants
.
MEMBER_INFO
);
Long
memberId
=
member
.
getId
();
try
{
redisService
.
lock
(
redisKey
,
redisValue
,
60
);
Order
order
=
service
.
applyRefund
(
applyRefundForm
);
Order
order
=
service
.
selectById
(
applyRefundForm
.
getOrderId
()
);
// 如果是未发货,系统自动退款
if
(
order
.
getStatus
().
equals
(
OrderStatus
.
NOT_DELIVERED
.
getType
()))
{
DealWithAftersaleForm
req
=
new
DealWithAftersaleForm
();
req
.
setOrderId
(
applyRefundForm
.
getOrderId
());
req
.
setMemberId
(
memberId
);
req
.
setOrderItemId
(
applyRefundForm
.
getOrderItemId
());
req
.
setOptType
(
1
);
aftersaleService
.
dealWith
(
req
,
order
.
getMemberId
(),
"直接发起退款"
);
//申请售后
}
else
{
service
.
applyRefund
(
applyRefundForm
);
}
return
ResponseEntity
.
ok
(
true
);
}
catch
(
Exception
e
)
{
log
.
error
(
"申请售后发生异常"
,
e
);
}
catch
(
Exception
e
)
{
log
.
error
(
"申请售后发生异常"
,
e
);
throw
new
RuntimeException
(
e
.
getMessage
());
}
finally
{
}
finally
{
try
{
redisService
.
unLock
(
redisKey
,
redisValue
);
}
catch
(
Exception
e
)
{
...
...
@@ -188,17 +211,17 @@ public class H5OrderController {
@ApiOperation
(
"取消售后"
)
@GetMapping
(
"/cancelRefund"
)
public
ResponseEntity
<
String
>
cancelRefund
(
Long
orderI
d
)
{
log
.
info
(
"【取消售后】订单id:"
+
orderId
);
String
redisKey
=
"h5_oms_order_cancelRefund_"
+
orderId
;
String
redisValue
=
orderId
+
"_"
+
System
.
currentTimeMillis
();
try
{
public
ResponseEntity
<
String
>
cancelRefund
(
Long
orderI
temId
)
{
log
.
info
(
"【取消售后】订单id:"
+
orderI
temI
d
);
String
redisKey
=
"h5_oms_order_cancelRefund_"
+
orderI
temI
d
;
String
redisValue
=
orderI
temI
d
+
"_"
+
System
.
currentTimeMillis
();
try
{
redisService
.
lock
(
redisKey
,
redisValue
,
60
);
return
ResponseEntity
.
ok
(
service
.
cancelRefund
(
orderId
));
}
catch
(
Exception
e
)
{
log
.
error
(
"取消售后发生异常"
,
e
);
return
ResponseEntity
.
ok
(
service
.
cancelRefund
(
orderI
temI
d
));
}
catch
(
Exception
e
)
{
log
.
error
(
"取消售后发生异常"
,
e
);
throw
new
RuntimeException
(
e
.
getMessage
());
}
finally
{
}
finally
{
try
{
redisService
.
unLock
(
redisKey
,
redisValue
);
}
catch
(
Exception
e
)
{
...
...
@@ -209,44 +232,33 @@ public class H5OrderController {
@ApiOperation
(
"售后订单详情"
)
@GetMapping
(
"/refundOrderDetail"
)
public
ResponseEntity
<
AftersaleRefundInfoVO
>
refundOrderDetail
(
@RequestParam
Long
orderId
){
public
ResponseEntity
<
AftersaleRefundInfoVO
>
refundOrderDetail
(
@RequestParam
Long
orderId
)
{
return
ResponseEntity
.
ok
(
service
.
refundOrderDetail
(
orderId
));
}
@ApiOperation
(
"用户提交退货单号"
)
@PostMapping
(
"/aftersale/delivery"
)
public
AjaxResult
delivery
(
@RequestBody
@Valid
DeliveryReq
req
){
log
.
info
(
"用户提交退货单号"
,
"提交的数据:"
+
JSONObject
.
toJSONString
(
req
));
String
redisKey
=
"h5_oms_order_delivery_"
+
req
.
getOrderId
();
String
redisValue
=
req
.
getOrderId
()
+
"_"
+
System
.
currentTimeMillis
();
public
AjaxResult
delivery
(
@RequestBody
@Valid
DeliveryReq
req
)
{
log
.
info
(
"用户提交退货单号"
,
"提交的数据:"
+
JSONObject
.
toJSONString
(
req
));
String
redisKey
=
"h5_oms_order_delivery_"
+
req
.
getOrderId
();
String
redisValue
=
req
.
getOrderId
()
+
"_"
+
System
.
currentTimeMillis
();
try
{
redisService
.
lock
(
redisKey
,
redisValue
,
60
);
Order
order
=
service
.
selectById
(
req
.
getOrderId
());
Aftersale
aftersale
=
aftersaleService
.
queryAfterSale
(
req
.
getOrderId
());
if
(
order
==
null
||
aftersale
==
null
){
OrderItem
order
=
orderItemService
.
selectById
(
req
.
getOrderId
());
if
(
order
==
null
)
{
return
AjaxResult
.
error
(
"未查询到订单信息"
);
}
//仅退款不需要退货
if
(
aftersale
.
getType
()
==
1
){
return
AjaxResult
.
error
(
"仅退款不需要退货"
);
}
if
(
aftersale
.
getStatus
()
!=
AftersaleStatus
.
WAIT
.
getType
()){
return
AjaxResult
.
error
(
"当前状态不可退货"
);
}
//更新退款单
aftersale
.
setRefundWpCode
(
req
.
getDeliveryCompanyCode
());
aftersale
.
setRefundWaybillCode
(
req
.
getDeliverySn
());
aftersaleService
.
update
(
aftersale
);
order
.
setRefundOn
(
req
.
getDeliverySn
());
orderItemService
.
update
(
order
);
return
AjaxResult
.
success
();
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
log
.
error
(
"用户提交退货单号异常"
,
e
);
return
AjaxResult
.
error
(
"提交发货信息失败"
);
}
finally
{
try
{
redisService
.
unLock
(
redisKey
,
redisValue
);
}
catch
(
Exception
e
)
{
log
.
error
(
""
,
e
);
}
finally
{
try
{
redisService
.
unLock
(
redisKey
,
redisValue
);
}
catch
(
Exception
e
)
{
log
.
error
(
""
,
e
);
}
}
}
...
...
ruoyi-mall/src/main/java/com/cyl/h5/controller/H5PosterInfoController.java
0 → 100644
View file @
58cc8f87
package
com
.
cyl
.
h5
.
controller
;
import
com.cyl.manager.oth.domain.entity.PosterInfo
;
import
com.cyl.manager.oth.domain.query.PosterInfoQuery
;
import
com.cyl.manager.oth.service.PosterInfoService
;
import
com.ruoyi.common.annotation.Log
;
import
com.ruoyi.common.core.controller.BaseController
;
import
com.ruoyi.common.enums.BusinessType
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.domain.Page
;
import
org.springframework.data.domain.PageImpl
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.security.access.prepost.PreAuthorize
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.List
;
/**
* 主引流海报信息Controller
*
* @author zcc
* @date 2024-08-01
*/
@Api
(
description
=
"小程序-主引流海报信息接口列表"
)
@RestController
@RequestMapping
(
"/h5/posterInfo"
)
public
class
H5PosterInfoController
extends
BaseController
{
@Autowired
private
PosterInfoService
service
;
@ApiOperation
(
"小程序-查询主引流海报信息列表"
)
@PostMapping
(
"/list"
)
public
ResponseEntity
<
Page
<
PosterInfo
>>
list
(
@RequestBody
PosterInfoQuery
query
,
Pageable
page
)
{
List
<
PosterInfo
>
list
=
service
.
selectList
(
query
,
page
);
return
ResponseEntity
.
ok
(
new
PageImpl
<>(
list
,
page
,
((
com
.
github
.
pagehelper
.
Page
)
list
).
getTotal
()));
}
}
ruoyi-mall/src/main/java/com/cyl/h5/controller/H5ProductCategoryController.java
0 → 100644
View file @
58cc8f87
package
com
.
cyl
.
h5
.
controller
;
import
com.cyl.manager.pms.convert.ProductCategoryConvert
;
import
com.cyl.manager.pms.domain.entity.ProductCategory
;
import
com.cyl.manager.pms.domain.query.ProductCategoryQuery
;
import
com.cyl.manager.pms.domain.vo.ProductCategoryVO
;
import
com.cyl.manager.pms.service.ProductCategoryService
;
import
com.ruoyi.common.annotation.Log
;
import
com.ruoyi.common.core.controller.BaseController
;
import
com.ruoyi.common.enums.BusinessType
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.security.access.prepost.PreAuthorize
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.List
;
/**
* 商品分类Controller
*
* @author zcc
* @date 2022-11-28
*/
@Api
(
description
=
"小程序-商品分类接口列表"
)
@RestController
@RequestMapping
(
"/h5/productCategory"
)
public
class
H5ProductCategoryController
extends
BaseController
{
@Autowired
private
ProductCategoryService
service
;
@Autowired
private
ProductCategoryConvert
convert
;
@ApiOperation
(
"小程序-查询商品分类列表"
)
@PostMapping
(
"/list"
)
public
ResponseEntity
<
List
<
ProductCategoryVO
>>
list
(
@RequestBody
ProductCategoryQuery
query
)
{
List
<
ProductCategoryVO
>
list
=
service
.
selectList
(
query
,
null
);
return
ResponseEntity
.
ok
(
list
);
}
@ApiOperation
(
"小程序-获取商品分类详细信息"
)
@GetMapping
(
value
=
"/{id}"
)
public
ResponseEntity
<
ProductCategory
>
getInfo
(
@PathVariable
(
"id"
)
Long
id
)
{
return
ResponseEntity
.
ok
(
service
.
selectById
(
id
));
}
}
ruoyi-mall/src/main/java/com/cyl/h5/controller/H5SalesAddressInfoController.java
0 → 100644
View file @
58cc8f87
package
com
.
cyl
.
h5
.
controller
;
import
com.cyl.manager.oth.domain.entity.SalesAddressInfo
;
import
com.cyl.manager.oth.domain.query.SalesAddressInfoQuery
;
import
com.cyl.manager.oth.service.SalesAddressInfoService
;
import
com.ruoyi.common.annotation.Log
;
import
com.ruoyi.common.core.controller.BaseController
;
import
com.ruoyi.common.enums.BusinessType
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.domain.Page
;
import
org.springframework.data.domain.PageImpl
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.security.access.prepost.PreAuthorize
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.List
;
/**
* 退货地址信息Controller
*
* @author zcc
* @date 2024-08-01
*/
@Api
(
description
=
"小程序-退货地址信息接口列表"
)
@RestController
@RequestMapping
(
"/h5/salesAddressInfo"
)
public
class
H5SalesAddressInfoController
extends
BaseController
{
@Autowired
private
SalesAddressInfoService
service
;
@ApiOperation
(
"查询退货地址信息列表"
)
@PostMapping
(
"/list"
)
public
ResponseEntity
<
Page
<
SalesAddressInfo
>>
list
(
@RequestBody
SalesAddressInfoQuery
query
,
Pageable
page
)
{
List
<
SalesAddressInfo
>
list
=
service
.
selectList
(
query
,
page
);
return
ResponseEntity
.
ok
(
new
PageImpl
<>(
list
,
page
,
((
com
.
github
.
pagehelper
.
Page
)
list
).
getTotal
()));
}
@ApiOperation
(
"获取退货地址信息详细信息"
)
@GetMapping
(
value
=
"/{id}"
)
public
ResponseEntity
<
SalesAddressInfo
>
getInfo
(
@PathVariable
(
"id"
)
Long
id
)
{
return
ResponseEntity
.
ok
(
service
.
selectById
(
id
));
}
}
ruoyi-mall/src/main/java/com/cyl/h5/controller/H5SlideshowInfoController.java
0 → 100644
View file @
58cc8f87
package
com
.
cyl
.
h5
.
controller
;
import
com.cyl.manager.oth.domain.entity.SlideshowInfo
;
import
com.cyl.manager.oth.domain.query.SlideshowInfoQuery
;
import
com.cyl.manager.oth.service.SlideshowInfoService
;
import
com.ruoyi.common.annotation.Log
;
import
com.ruoyi.common.core.controller.BaseController
;
import
com.ruoyi.common.enums.BusinessType
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.domain.Page
;
import
org.springframework.data.domain.PageImpl
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.security.access.prepost.PreAuthorize
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.List
;
/**
* 轮播图信息Controller
*
* @author zcc
* @date 2024-08-01
*/
@Api
(
description
=
"小程序-轮播图信息接口列表"
)
@RestController
@RequestMapping
(
"/h5/slideshowInfo"
)
public
class
H5SlideshowInfoController
extends
BaseController
{
@Autowired
private
SlideshowInfoService
service
;
@ApiOperation
(
"小程序-查询轮播图信息列表"
)
@PostMapping
(
"/list"
)
public
ResponseEntity
<
Page
<
SlideshowInfo
>>
list
(
@RequestBody
SlideshowInfoQuery
query
,
Pageable
page
)
{
List
<
SlideshowInfo
>
list
=
service
.
selectList
(
query
,
page
);
return
ResponseEntity
.
ok
(
new
PageImpl
<>(
list
,
page
,
((
com
.
github
.
pagehelper
.
Page
)
list
).
getTotal
()));
}
@ApiOperation
(
"小程序-获取轮播图信息详细信息"
)
@GetMapping
(
value
=
"/{id}"
)
public
ResponseEntity
<
SlideshowInfo
>
getInfo
(
@PathVariable
(
"id"
)
Long
id
)
{
return
ResponseEntity
.
ok
(
service
.
selectById
(
id
));
}
}
ruoyi-mall/src/main/java/com/cyl/h5/domain/dto/DeliveryReq.java
View file @
58cc8f87
...
...
@@ -16,7 +16,7 @@
@ApiModel
(
value
=
"发货记录"
)
public
class
DeliveryReq
{
@ApiModelProperty
(
value
=
"订单id"
,
required
=
true
)
@ApiModelProperty
(
value
=
"
子
订单id"
,
required
=
true
)
@NotNull
(
message
=
"订单id不能为空"
)
private
Long
orderId
;
...
...
@@ -24,7 +24,4 @@
@NotBlank
(
message
=
"物流单号不能为空"
)
private
String
deliverySn
;
@ApiModelProperty
(
value
=
"快递公司Code"
,
required
=
true
)
@NotBlank
(
message
=
"快递公司Code不能为空"
)
private
String
deliveryCompanyCode
;
}
\ No newline at end of file
ruoyi-mall/src/main/java/com/cyl/h5/domain/dto/OrderProductListDTO.java
View file @
58cc8f87
...
...
@@ -34,6 +34,17 @@
@ApiModelProperty
(
value
=
"运费"
,
hidden
=
true
)
private
BigDecimal
freightAmount
;
@ApiModelProperty
(
value
=
"优惠后金额"
,
hidden
=
true
)
private
BigDecimal
couponMoney
;
@ApiModelProperty
(
value
=
"使用积分"
,
hidden
=
true
)
private
BigDecimal
useIntegral
;
private
BigDecimal
giveIntegral
;
@ApiModelProperty
(
"抵扣金额"
)
private
BigDecimal
deMoney
;
@ApiModelProperty
(
value
=
"隐藏 业务过程中的数据"
,
hidden
=
true
)
private
Sku
sku
;
...
...
ruoyi-mall/src/main/java/com/cyl/h5/domain/form/ApplyRefundForm.java
View file @
58cc8f87
...
...
@@ -16,19 +16,22 @@ public class ApplyRefundForm {
@ApiModelProperty
(
value
=
"申请售后类型 1:仅退款 2:退货退款"
,
required
=
true
)
private
Integer
applyRefundType
;
@ApiModelProperty
(
value
=
"退款原因"
,
required
=
true
)
@ApiModelProperty
(
value
=
"退款原因"
)
private
String
reason
;
@ApiModelProperty
(
value
=
"申请退货数量"
,
required
=
true
)
private
Integer
quantity
;
@ApiModelProperty
(
value
=
"退款金额"
)
private
BigDecimal
refundAmount
;
@ApiModelProperty
(
value
=
"退还积分"
)
private
BigDecimal
refundIntegral
;
@ApiModelProperty
(
value
=
"描述"
)
private
String
description
;
@ApiModelProperty
(
"凭证图片以逗号隔开"
)
private
String
proofPics
;
@ApiModelProperty
(
name
=
"如果只生请一笔售后传入子订单的id"
)
private
Long
orderItemId
;
}
ruoyi-mall/src/main/java/com/cyl/h5/domain/form/OrderSubmitForm.java
View file @
58cc8f87
package
com
.
cyl
.
h5
.
domain
.
form
;
import
com.cyl.h5.domain.dto.OrderProductListDTO
;
import
com.ruoyi.common.annotation.Excel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
javax.validation.constraints.NotEmpty
;
import
javax.validation.constraints.NotNull
;
import
java.math.BigDecimal
;
import
java.util.List
;
@Data
...
...
@@ -17,6 +20,17 @@ public class OrderSubmitForm {
/** 订单来源,购物车则为cart */
private
String
from
;
private
Long
memberCouponId
;
@ApiModelProperty
(
"订单总金额"
)
private
BigDecimal
totalAmount
;
@ApiModelProperty
(
"应付金额(实际支付金额)"
)
private
BigDecimal
payAmount
;
private
BigDecimal
totalIntegral
;
private
BigDecimal
giveIntegral
;
private
BigDecimal
deMoney
;
@NotEmpty
private
List
<
OrderProductListDTO
>
skuList
;
@Data
...
...
ruoyi-mall/src/main/java/com/cyl/h5/domain/vo/H5OrderVO.java
View file @
58cc8f87
...
...
@@ -75,4 +75,19 @@ public class H5OrderVO {
@ApiModelProperty
(
"支付倒计时"
)
private
Long
timeToPay
;
@ApiModelProperty
(
"抵扣金额"
)
private
BigDecimal
deMoney
;
private
String
deliveryCompany
;
@ApiModelProperty
(
value
=
"退款原因"
,
required
=
true
)
private
String
reason
;
@ApiModelProperty
(
"凭证图片以逗号隔开"
)
private
String
proofPics
;
/**
* 赠送积分
*/
private
BigDecimal
giveIntegral
;
}
ruoyi-mall/src/main/java/com/cyl/h5/domain/vo/H5ProductVO.java
View file @
58cc8f87
...
...
@@ -9,4 +9,8 @@ public class H5ProductVO {
private
String
pic
;
private
String
name
;
private
BigDecimal
price
;
private
BigDecimal
startPrice
;
private
BigDecimal
endPrice
;
}
ruoyi-mall/src/main/java/com/cyl/h5/service/H5MemberService.java
View file @
58cc8f87
...
...
@@ -321,6 +321,18 @@ public class H5MemberService {
memberWechatMapper
.
update
(
null
,
wrapper
);
}
public
void
upd
(
Member
member
)
{
UpdateWrapper
<
Member
>
wrapper
=
new
UpdateWrapper
<>();
wrapper
.
eq
(
"id"
,
member
.
getId
());
if
(
StringUtils
.
isNotEmpty
(
member
.
getNickname
())){
wrapper
.
set
(
"nickname"
,
member
.
getNickname
());
}
if
(
StringUtils
.
isNotEmpty
(
member
.
getAvatar
())){
wrapper
.
set
(
"avatar"
,
member
.
getAvatar
());
}
memberMapper
.
update
(
null
,
wrapper
);
}
/**
* 新增会员登录记录
*
...
...
ruoyi-mall/src/main/java/com/cyl/h5/service/H5OrderService.java
View file @
58cc8f87
...
...
@@ -12,7 +12,9 @@ import com.cyl.h5.domain.dto.OrderProductListDTO;
import
com.cyl.h5.domain.dto.PayNotifyMessageDTO
;
import
com.cyl.h5.domain.form.*
;
import
com.cyl.h5.domain.vo.*
;
import
com.cyl.manager.act.domain.entity.IntegralHistory
;
import
com.cyl.manager.act.domain.entity.MemberCoupon
;
import
com.cyl.manager.act.mapper.IntegralHistoryMapper
;
import
com.cyl.manager.act.service.IntegralHistoryService
;
import
com.cyl.manager.act.service.MemberCouponService
;
import
com.cyl.manager.oms.convert.AftersaleItemConvert
;
...
...
@@ -31,6 +33,7 @@ import com.cyl.manager.ums.domain.entity.MemberCart;
import
com.cyl.manager.ums.domain.entity.MemberWechat
;
import
com.cyl.manager.ums.mapper.MemberAddressMapper
;
import
com.cyl.manager.ums.mapper.MemberCartMapper
;
import
com.cyl.manager.ums.mapper.MemberMapper
;
import
com.cyl.manager.ums.mapper.MemberWechatMapper
;
import
com.cyl.wechat.WechatPayData
;
import
com.cyl.wechat.WechatPayService
;
...
...
@@ -41,13 +44,17 @@ import com.ruoyi.common.core.redis.RedisService;
import
com.ruoyi.common.enums.AftersaleStatus
;
import
com.ruoyi.common.enums.OrderRefundStatus
;
import
com.ruoyi.common.enums.OrderStatus
;
import
com.ruoyi.common.exception.ServiceException
;
import
com.ruoyi.common.utils.AesCryptoUtils
;
import
com.ruoyi.common.utils.DateUtils
;
import
com.ruoyi.common.utils.IDGenerator
;
import
com.ruoyi.framework.config.LocalDataUtil
;
import
com.wechat.pay.java.service.partnerpayments.jsapi.model.Transaction
;
import
lombok.extern.slf4j.Slf4j
;
import
org.aspectj.weaver.ast.Or
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.data.domain.PageImpl
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.http.ResponseEntity
;
...
...
@@ -116,6 +123,9 @@ public class H5OrderService {
@Autowired
private
AftersaleItemConvert
aftersaleItemConvert
;
@Value
(
"${aes.key}"
)
private
String
aesKey
;
@Autowired
private
OrderItemConvert
orderItemConvert
;
...
...
@@ -125,6 +135,12 @@ public class H5OrderService {
@Autowired
private
MemberCouponService
memberCouponService
;
@Autowired
private
MemberMapper
memberMapper
;
@Autowired
private
IntegralHistoryMapper
integralHistoryMapper
;
@Transactional
public
Long
submit
(
OrderSubmitForm
form
)
{
Member
member
=
(
Member
)
LocalDataUtil
.
getVar
(
Constants
.
MEMBER_INFO
);
...
...
@@ -177,9 +193,6 @@ public class H5OrderService {
}
couponAmount
=
coupon
.
getCouponAmount
();
}
//计算商品总额、订单总额(订单总金额=商品总金额,因为暂时没有运费等概念)
BigDecimal
productTotalAmount
=
BigDecimal
.
ZERO
;
BigDecimal
orderTotalAmount
=
BigDecimal
.
ZERO
;
for
(
OrderProductListDTO
dto
:
skuList
)
{
if
(!
querySkuMap
.
containsKey
(
dto
.
getSkuId
()))
{
throw
new
RuntimeException
(
"商品SKU不存在"
);
...
...
@@ -195,8 +208,6 @@ public class H5OrderService {
if
(
sku
.
getStock
()
<
skuQuantityMap
.
get
(
sku
.
getId
()))
{
throw
new
RuntimeException
(
"库存不足"
);
}
productTotalAmount
=
productTotalAmount
.
add
(
sku
.
getPrice
().
multiply
(
BigDecimal
.
valueOf
(
skuQuantityMap
.
get
(
sku
.
getId
()))));
orderTotalAmount
=
orderTotalAmount
.
add
(
sku
.
getPrice
().
multiply
(
BigDecimal
.
valueOf
(
skuQuantityMap
.
get
(
sku
.
getId
()))));
dto
.
setSku
(
sku
);
dto
.
setProduct
(
product
);
}
...
...
@@ -215,20 +226,41 @@ public class H5OrderService {
order
.
setMemberUsername
(
member
.
getNickname
());
order
.
setPayType
(
Constants
.
PayType
.
WECHAT
);
order
.
setCouponAmount
(
couponAmount
);
order
.
setTotalIntegral
(
form
.
getTotalIntegral
());
order
.
setMemberCouponId
(
form
.
getMemberCouponId
());
order
.
setTotalAmount
(
orderTotalAmount
);
order
.
setDeMoney
(
form
.
getDeMoney
());
order
.
setGiveIntegral
(
form
.
getGiveIntegral
());
order
.
setTotalAmount
(
form
.
getTotalAmount
());
order
.
setPurchasePrice
(
BigDecimal
.
ZERO
);
order
.
setFreightAmount
(
BigDecimal
.
ZERO
);
BigDecimal
subtract
=
orderTotalAmount
.
subtract
(
couponAmount
);
order
.
setPayAmount
(
subtract
.
compareTo
(
BigDecimal
.
ZERO
)
>
0
?
subtract
:
BigDecimal
.
ZERO
);
order
.
setPayAmount
(
form
.
getPayAmount
());
//是否使用积分进行扣减
if
(
order
.
getPayAmount
().
compareTo
(
BigDecimal
.
ZERO
)
==
0
)
{
order
.
setStatus
(
Constants
.
OrderStatus
.
SEND
);
//扣减积分
BigDecimal
integral
=
member
.
getIntegral
().
subtract
(
order
.
getTotalIntegral
());
UpdateWrapper
<
Member
>
updateWrapper
=
new
UpdateWrapper
<>();
updateWrapper
.
eq
(
"id"
,
member
.
getId
());
updateWrapper
.
set
(
"integral"
,
integral
);
memberMapper
.
update
(
null
,
updateWrapper
);
IntegralHistory
history
=
new
IntegralHistory
();
history
.
setOpType
(
2
);
history
.
setSubOpType
(
23
);
history
.
setAmount
(
order
.
getTotalIntegral
());
history
.
setOrderId
(
orderId
);
history
.
setOrderAmount
(
form
.
getPayAmount
());
history
.
setMemberId
(
member
.
getId
());
history
.
setCreateTime
(
LocalDateTime
.
now
());
integralHistoryMapper
.
insert
(
history
);
}
else
{
order
.
setStatus
(
Constants
.
OrderStatus
.
NOTPAID
);
}
order
.
setAftersaleStatus
(
1
);
order
.
setReceiverName
(
memberAddress
.
getName
());
order
.
setReceiverPhone
(
memberAddress
.
getPhoneHidden
(
));
order
.
setReceiverPhone
(
AesCryptoUtils
.
decrypt
(
aesKey
,
memberAddress
.
getPhoneEncrypted
()
));
order
.
setReceiverPhoneEncrypted
(
memberAddress
.
getPhoneEncrypted
());
order
.
setReceiverPostCode
(
memberAddress
.
getPostCode
());
order
.
setReceiverProvince
(
memberAddress
.
getProvince
());
...
...
@@ -449,41 +481,89 @@ public class H5OrderService {
optHistory
.
setCreateTime
(
optDate
);
optHistory
.
setUpdateTime
(
optDate
);
orderOperateHistoryMapper
.
insert
(
optHistory
);
//赠送积分逻辑
});
}
@Transactional
public
String
orderComplete
(
Long
orderId
)
{
public
String
orderComplete
(
Long
orderId
,
Long
type
,
Long
memberId
)
{
BigDecimal
totalMoney
=
BigDecimal
.
ZERO
;
LocalDateTime
optDate
=
LocalDateTime
.
now
();
Order
order
=
orderMapper
.
selectById
(
orderId
);
OrderItem
queryOrderItem
=
new
OrderItem
();
queryOrderItem
.
setOrderId
(
orderId
);
List
<
OrderItem
>
orderItemList
=
orderItemMapper
.
selectByEntity
(
queryOrderItem
);
if
(
order
==
null
||
CollectionUtil
.
isEmpty
(
orderItemList
))
{
throw
new
RuntimeException
(
"未查询到订单信息"
);
}
// 只有【待收货】状态才能确认
if
(!
order
.
getStatus
().
equals
(
Constants
.
H5OrderStatus
.
DELIVERED
))
{
throw
new
RuntimeException
(
"订单状态已改变,请刷新"
);
if
(
type
==
1
)
{
OrderItem
orderItem
=
orderItemMapper
.
selectById
(
orderId
);
if
(
orderItem
==
null
)
{
throw
new
RuntimeException
(
"未查询到订单信息"
);
}
// 只有【待收货】状态才能确认
if
(!
orderItem
.
getStatus
().
equals
(
"6"
))
{
throw
new
RuntimeException
(
"订单状态已改变,请刷新"
);
}
totalMoney
=
orderItem
.
getGiveIntegral
();
orderItem
.
setUpdateTime
(
optDate
);
UpdateWrapper
<
OrderItem
>
updateWrapper
=
new
UpdateWrapper
<>();
updateWrapper
.
eq
(
"id"
,
orderId
);
updateWrapper
.
set
(
"status"
,
7
);
updateWrapper
.
set
(
"update_time"
,
optDate
);
orderItemMapper
.
update
(
null
,
updateWrapper
);
}
else
{
Order
order
=
orderMapper
.
selectById
(
orderId
);
OrderItem
queryOrderItem
=
new
OrderItem
();
queryOrderItem
.
setOrderId
(
orderId
);
List
<
OrderItem
>
orderItemList
=
orderItemMapper
.
selectByEntity
(
queryOrderItem
);
if
(
order
==
null
||
CollectionUtil
.
isEmpty
(
orderItemList
))
{
throw
new
RuntimeException
(
"未查询到订单信息"
);
}
totalMoney
=
order
.
getGiveIntegral
();
order
.
setStatus
(
Constants
.
H5OrderStatus
.
COMPLETED
);
order
.
setReceiveTime
(
optDate
);
order
.
setConfirmStatus
(
1
);
order
.
setUpdateTime
(
optDate
);
order
.
setUpdateBy
(
SecurityUtil
.
getLocalMember
().
getId
());
orderMapper
.
updateById
(
order
);
//修改子订单状态
List
<
OrderItem
>
orderItems
=
orderItemMapper
.
selectList
(
new
QueryWrapper
<
OrderItem
>().
eq
(
"order_id"
,
orderId
));
if
(
CollectionUtil
.
isNotEmpty
(
orderItems
))
{
for
(
OrderItem
orderItem
:
orderItems
)
{
orderItem
.
setUpdateTime
(
optDate
);
UpdateWrapper
<
OrderItem
>
updateWrapper
=
new
UpdateWrapper
<>();
updateWrapper
.
eq
(
"id"
,
orderItem
.
getId
());
updateWrapper
.
set
(
"status"
,
7
);
updateWrapper
.
set
(
"update_time"
,
optDate
);
orderItemMapper
.
update
(
null
,
updateWrapper
);
}
}
//创建订单操作记录
OrderOperateHistory
optHistory
=
new
OrderOperateHistory
();
optHistory
.
setOrderId
(
order
.
getId
());
optHistory
.
setOrderSn
(
order
.
getOrderSn
());
optHistory
.
setOperateMan
(
""
+
order
.
getMemberId
());
optHistory
.
setOrderStatus
(
Constants
.
H5OrderStatus
.
COMPLETED
);
optHistory
.
setCreateTime
(
optDate
);
optHistory
.
setCreateBy
(
order
.
getMemberId
());
optHistory
.
setUpdateBy
(
order
.
getMemberId
());
optHistory
.
setUpdateTime
(
optDate
);
orderOperateHistoryMapper
.
insert
(
optHistory
);
}
order
.
setStatus
(
Constants
.
H5OrderStatus
.
COMPLETED
);
order
.
setReceiveTime
(
optDate
);
order
.
setConfirmStatus
(
1
);
order
.
setUpdateTime
(
optDate
);
order
.
setUpdateBy
(
SecurityUtil
.
getLocalMember
().
getId
());
orderMapper
.
updateById
(
order
);
//创建订单操作记录
OrderOperateHistory
optHistory
=
new
OrderOperateHistory
();
optHistory
.
setOrderId
(
order
.
getId
());
optHistory
.
setOrderSn
(
order
.
getOrderSn
());
optHistory
.
setOperateMan
(
""
+
order
.
getMemberId
());
optHistory
.
setOrderStatus
(
Constants
.
H5OrderStatus
.
COMPLETED
);
optHistory
.
setCreateTime
(
optDate
);
optHistory
.
setCreateBy
(
order
.
getMemberId
());
optHistory
.
setUpdateBy
(
order
.
getMemberId
());
optHistory
.
setUpdateTime
(
optDate
);
orderOperateHistoryMapper
.
insert
(
optHistory
);
return
order
.
getOrderSn
();
//赠送积分
if
(
totalMoney
.
compareTo
(
BigDecimal
.
ZERO
)
>
0
)
{
//赠送积分
Member
member
=
memberMapper
.
selectById
(
memberId
);
UpdateWrapper
<
Member
>
updateWrapper
=
new
UpdateWrapper
<>();
updateWrapper
.
eq
(
"id"
,
member
.
getId
());
updateWrapper
.
set
(
"integral"
,
member
.
getIntegral
().
add
(
totalMoney
));
memberMapper
.
update
(
null
,
updateWrapper
);
IntegralHistory
history
=
new
IntegralHistory
();
history
.
setOpType
(
1
);
history
.
setSubOpType
(
12
);
history
.
setAmount
(
totalMoney
);
history
.
setOrderId
(
orderId
);
history
.
setMemberId
(
memberId
);
history
.
setCreateTime
(
LocalDateTime
.
now
());
integralHistoryMapper
.
insert
(
history
);
}
return
"确认收货成功!"
;
}
/**
...
...
@@ -515,7 +595,7 @@ public class H5OrderService {
if
(
CollectionUtil
.
isEmpty
(
orderItem
))
{
throw
new
RuntimeException
(
"未查询到订单信息"
);
}
long
count
=
orderList
.
stream
().
filter
(
it
->
!
Constants
.
H5OrderStatus
.
UN_PAY
.
equals
(
it
.
getStatus
())).
count
();
long
count
=
orderList
.
stream
().
filter
(
it
->
!
Constants
.
H5OrderStatus
.
UN_PAY
.
equals
(
it
.
getStatus
())
&&
!
Constants
.
H5OrderStatus
.
NOT_DELIVERED
.
equals
(
it
.
getStatus
())
).
count
();
if
(
count
>
0
)
{
throw
new
RuntimeException
(
"订单状态已更新,请刷新页面"
);
}
...
...
@@ -612,7 +692,7 @@ public class H5OrderService {
wechatPaymentHistory
=
new
WechatPaymentHistory
();
wechatPaymentHistory
.
setOrderId
(
orderList
.
get
(
0
).
getPayId
());
wechatPaymentHistory
.
setMemberId
(
req
.
getMemberId
());
wechatPaymentHistory
.
setOpenid
(
memberWechat
.
getOpenid
()
);
wechatPaymentHistory
.
setOpenid
(
openId
);
wechatPaymentHistory
.
setTitle
(
orderItemList
.
get
(
0
).
getProductName
());
wechatPaymentHistory
.
setMoney
(
orderList
.
get
(
0
).
getPayAmount
());
wechatPaymentHistory
.
setOpType
(
Constants
.
PaymentOpType
.
PAY
);
...
...
@@ -647,7 +727,8 @@ public class H5OrderService {
String
signatureStr
=
Stream
.
of
(
appId
,
String
.
valueOf
(
timeStamp
),
nonceStr
,
prepayId
)
.
collect
(
Collectors
.
joining
(
"\n"
,
""
,
"\n"
));
try
{
paySign
=
WechatPayUtil
.
getSign
(
signatureStr
,
WechatPayData
.
privateKeyPath
);
paySign
=
WechatPayUtil
.
getSign
(
signatureStr
,
"/www/wwwroot/wenchuang/cert/apiclient_key.pem"
);
// paySign = WechatPayUtil.getSign(signatureStr, "E:\\yinhong\\wenchuang\\Java\\RuoYi-Mall\\ruoyi-admin\\src\\main\\resources\\cert\\apiclient_key.pem");
}
catch
(
Exception
e
)
{
throw
new
RuntimeException
(
"支付失败"
);
}
...
...
@@ -674,7 +755,7 @@ public class H5OrderService {
LocalDateTime
optDate
=
LocalDateTime
.
now
();
try
{
redisService
.
lock
(
redisKey
,
redisValue
,
60
);
//先判断
回
信回调的是否未success
//先判断
微
信回调的是否未success
if
(!
Transaction
.
TradeStateEnum
.
SUCCESS
.
equals
(
messageDTO
.
getTradeStatus
()))
{
log
.
error
(
"【订单支付回调】订单状态不是支付成功状态"
+
messageDTO
.
getTradeStatus
());
throw
new
RuntimeException
();
...
...
@@ -709,6 +790,17 @@ public class H5OrderService {
//处理积分
integralHistoryService
.
handleIntegral
(
order
.
getId
(),
order
.
getPayAmount
(),
order
.
getMemberId
());
//修改子订单状态
List
<
OrderItem
>
orderItemList
=
orderItemMapper
.
selectList
(
new
QueryWrapper
<
OrderItem
>().
eq
(
"order_id"
,
order
.
getId
()));
if
(
CollectionUtil
.
isNotEmpty
(
orderItemList
))
{
orderItemList
.
forEach
(
orderItem
->
{
UpdateWrapper
<
OrderItem
>
updateWrapper
=
new
UpdateWrapper
<>();
updateWrapper
.
eq
(
"id"
,
orderItem
.
getId
());
updateWrapper
.
set
(
"status"
,
"5"
);
orderItemMapper
.
update
(
null
,
updateWrapper
);
});
}
});
UpdateWrapper
<
WechatPaymentHistory
>
paymentHistoryUpdateWrapper
=
new
UpdateWrapper
<>();
paymentHistoryUpdateWrapper
.
eq
(
"order_id"
,
messageDTO
.
getOutTradeNo
()).
set
(
"payment_id"
,
messageDTO
.
getTradeNo
())
...
...
@@ -735,77 +827,35 @@ public class H5OrderService {
*/
@Transactional
public
Order
applyRefund
(
ApplyRefundForm
applyRefundForm
)
{
Order
order
=
orderMapper
.
selectById
(
applyRefundForm
.
getOrderId
());
//是否符合售后条件
this
.
checkIfCanApplyRefund
(
order
);
LocalDateTime
optDate
=
LocalDateTime
.
now
();
Long
memberId
=
order
.
getMemberId
();
//创建售后单aftersale
Aftersale
addAftersale
=
new
Aftersale
();
addAftersale
.
setId
(
IDGenerator
.
generateId
());
addAftersale
.
setMemberId
(
order
.
getMemberId
());
addAftersale
.
setOrderId
(
order
.
getId
());
addAftersale
.
setReturnAmount
(
order
.
getPayAmount
());
addAftersale
.
setType
(
applyRefundForm
.
getApplyRefundType
());
addAftersale
.
setStatus
(
AftersaleStatus
.
APPLY
.
getType
());
addAftersale
.
setReason
(
applyRefundForm
.
getReason
());
addAftersale
.
setQuantity
(
applyRefundForm
.
getQuantity
());
addAftersale
.
setReason
(
applyRefundForm
.
getReason
());
addAftersale
.
setDescription
(
applyRefundForm
.
getDescription
());
addAftersale
.
setProofPics
(
applyRefundForm
.
getProofPics
());
addAftersale
.
setCreateTime
(
optDate
);
addAftersale
.
setCreateBy
(
memberId
);
addAftersale
.
setUpdateTime
(
optDate
);
addAftersale
.
setUpdateBy
(
memberId
);
int
rows
=
aftersaleMapper
.
insert
(
addAftersale
);
if
(
rows
!=
1
)
{
throw
new
RuntimeException
(
"插入订单售后失败"
);
}
//创建aftersale item
QueryWrapper
<
OrderItem
>
orderItemQw
=
new
QueryWrapper
<>();
orderItemQw
.
eq
(
"order_id"
,
order
.
getId
());
List
<
OrderItem
>
orderItemList
=
orderItemMapper
.
selectList
(
orderItemQw
);
List
<
AftersaleItem
>
addAftersaleItemList
=
new
ArrayList
<>();
orderItemList
.
forEach
(
orderItem
->
{
AftersaleItem
aftersaleItem
=
new
AftersaleItem
();
aftersaleItem
.
setMemberId
(
memberId
);
aftersaleItem
.
setAftersaleId
(
addAftersale
.
getId
());
aftersaleItem
.
setOrderId
(
orderItem
.
getOrderId
());
aftersaleItem
.
setOrderItemId
(
orderItem
.
getId
());
aftersaleItem
.
setReturnAmount
(
orderItem
.
getSalePrice
().
multiply
(
BigDecimal
.
valueOf
(
orderItem
.
getQuantity
())));
aftersaleItem
.
setQuantity
(
orderItem
.
getQuantity
());
aftersaleItem
.
setCreateTime
(
optDate
);
aftersaleItem
.
setCreateBy
(
memberId
);
aftersaleItem
.
setUpdateTime
(
optDate
);
aftersaleItem
.
setUpdateBy
(
memberId
);
addAftersaleItemList
.
add
(
aftersaleItem
);
});
rows
=
aftersaleItemMapper
.
insertBatch
(
addAftersaleItemList
);
if
(
rows
<
1
)
{
throw
new
RuntimeException
(
"创建售后订单item失败"
);
}
//更新订单
OrderItem
orderItem
=
orderItemMapper
.
selectById
(
applyRefundForm
.
getOrderItemId
());
if
(
null
==
orderItem
)
{
throw
new
ServiceException
(
"所选产品信息有误!"
);
}
Order
order
=
orderMapper
.
selectById
(
orderItem
.
getOrderId
());
if
(
null
==
order
)
{
throw
new
ServiceException
(
"订单不存在!"
);
}
//修改子订单状态
UpdateWrapper
<
OrderItem
>
itemUpdateWrapper
=
new
UpdateWrapper
<>();
itemUpdateWrapper
.
eq
(
"id"
,
orderItem
.
getId
());
itemUpdateWrapper
.
set
(
"status"
,
"0"
);
itemUpdateWrapper
.
set
(
"update_time"
,
optDate
);
itemUpdateWrapper
.
set
(
"reason"
,
applyRefundForm
.
getReason
());
itemUpdateWrapper
.
set
(
"proof_pics"
,
applyRefundForm
.
getProofPics
());
int
row
=
orderItemMapper
.
update
(
null
,
itemUpdateWrapper
);
if
(
row
!=
1
)
{
throw
new
RuntimeException
(
"申请售后失败!"
);
}
//修改主订单状态
UpdateWrapper
<
Order
>
updateWrapper
=
new
UpdateWrapper
<>();
updateWrapper
.
eq
(
"id"
,
order
.
getId
()).
set
(
"aftersale_status"
,
OrderRefundStatus
.
APPLY
.
getType
())
.
set
(
"update_time"
,
optDate
)
.
set
(
"update_by"
,
memberId
);
rows
=
orderMapper
.
update
(
null
,
updateWrapper
);
if
(
rows
<
1
)
{
throw
new
RuntimeException
(
"修改订单状态失败"
);
}
//创建订单操作记录
OrderOperateHistory
optHistory
=
new
OrderOperateHistory
();
optHistory
.
setOrderId
(
order
.
getId
());
optHistory
.
setOrderSn
(
order
.
getOrderSn
());
optHistory
.
setOperateMan
(
""
+
memberId
);
optHistory
.
setOrderStatus
(
11
);
optHistory
.
setCreateTime
(
optDate
);
optHistory
.
setCreateBy
(
memberId
);
optHistory
.
setUpdateBy
(
memberId
);
optHistory
.
setUpdateTime
(
optDate
);
rows
=
orderOperateHistoryMapper
.
insert
(
optHistory
);
if
(
rows
<
1
)
{
throw
new
RuntimeException
(
"创建订单操作记录失败"
);
updateWrapper
.
eq
(
"id"
,
order
.
getId
());
updateWrapper
.
set
(
"status"
,
OrderStatus
.
REFUUND
.
getType
());
updateWrapper
.
set
(
"update_time"
,
optDate
);
int
update
=
orderMapper
.
update
(
null
,
updateWrapper
);
if
(
update
!=
1
)
{
throw
new
RuntimeException
(
"申请售后失败!"
);
}
return
order
;
}
...
...
@@ -817,10 +867,10 @@ public class H5OrderService {
*/
private
void
checkIfCanApplyRefund
(
Order
order
)
{
if
(
order
==
null
)
{
throw
new
RuntimeException
(
"
为
查询到订单信息"
);
throw
new
RuntimeException
(
"
未
查询到订单信息"
);
}
Integer
status
=
order
.
getStatus
();
boolean
flag
=
OrderStatus
.
NOT_DELIVERED
.
getType
().
equals
(
status
)
||
OrderStatus
.
DELIVERED
.
getType
().
equals
(
status
)
boolean
flag
=
OrderStatus
.
NOT_DELIVERED
.
getType
().
equals
(
status
)
||
OrderStatus
.
COMPLETE
.
getType
().
equals
(
status
);
if
(!
flag
)
{
throw
new
RuntimeException
(
"该订单无法申请售后"
);
...
...
@@ -842,41 +892,28 @@ public class H5OrderService {
* @return
*/
@Transactional
public
String
cancelRefund
(
Long
orderId
)
{
Order
order
=
orderMapper
.
selectById
(
order
Id
);
if
(
order
==
null
)
{
public
String
cancelRefund
(
Long
orderI
temI
d
)
{
Order
Item
orderItem
=
orderItemMapper
.
selectById
(
orderItem
Id
);
if
(
order
Item
==
null
)
{
throw
new
RuntimeException
(
"未查询到该订单"
);
}
//查询是否有(待处理和退货中)售后单
QueryWrapper
<
Aftersale
>
aftersaleQw
=
new
QueryWrapper
<>();
aftersaleQw
.
eq
(
"order_id"
,
orderId
);
aftersaleQw
.
in
(
"status"
,
Arrays
.
asList
(
AftersaleStatus
.
APPLY
.
getType
(),
AftersaleStatus
.
WAIT
.
getType
()));
Aftersale
aftersale
=
aftersaleMapper
.
selectOne
(
aftersaleQw
);
if
(
aftersale
==
null
)
{
throw
new
RuntimeException
(
"无售后单"
);
}
if
(
OrderRefundStatus
.
SUCCESS
.
getType
().
equals
(
order
.
getAftersaleStatus
()))
{
throw
new
RuntimeException
(
"已退款成功"
);
}
Member
member
=
(
Member
)
LocalDataUtil
.
getVar
(
Constants
.
MEMBER_INFO
);
LocalDateTime
optDate
=
LocalDateTime
.
now
();
//更新售后单状态
UpdateWrapper
<
Aftersale
>
aftersaleUpdateWrapper
=
new
UpdateWrapper
<>();
aftersaleUpdateWrapper
.
eq
(
"id"
,
aftersale
.
getId
());
aftersaleUpdateWrapper
.
set
(
"status"
,
AftersaleStatus
.
CANCEL
.
getType
());
aftersaleUpdateWrapper
.
set
(
"update_time"
,
optDate
);
aftersaleUpdateWrapper
.
set
(
"update_by"
,
member
.
getId
());
int
rows
=
aftersaleMapper
.
update
(
null
,
aftersaleUpdateWrapper
);
if
(
rows
<
1
)
{
throw
new
RuntimeException
(
"更新售后单失败"
);
//查询主订单中有几个子订单
Order
order
=
orderMapper
.
selectById
(
orderItem
.
getOrderId
());
List
<
OrderItem
>
orderItemList
=
orderItemMapper
.
selectList
(
new
QueryWrapper
<
OrderItem
>().
eq
(
"order_id"
,
order
.
getId
()));
if
(
orderItemList
.
size
()
>
1
)
{
}
//更新订单售后状态
// 更新订单
UpdateWrapper
<
Order
>
updateOrderWrapper
=
new
UpdateWrapper
<>();
updateOrderWrapper
.
eq
(
"id"
,
orderId
)
.
set
(
"aftersale_status"
,
OrderRefundStatus
.
NO_REFUND
.
getType
()).
set
(
"update_time"
,
optDate
)
UpdateWrapper
<
OrderItem
>
updateOrderWrapper
=
new
UpdateWrapper
<>();
updateOrderWrapper
.
eq
(
"id"
,
orderItemId
)
.
set
(
"status"
,
"4"
)
.
set
(
"update_time"
,
optDate
)
.
set
(
"update_by"
,
member
.
getId
());
rows
=
order
Mapper
.
update
(
null
,
updateOrderWrapper
);
int
rows
=
orderItem
Mapper
.
update
(
null
,
updateOrderWrapper
);
if
(
rows
!=
1
)
{
throw
new
RuntimeException
(
"更新订单状态失败"
);
}
...
...
@@ -917,4 +954,21 @@ public class H5OrderService {
public
Order
selectById
(
Long
orderId
)
{
return
orderMapper
.
selectById
(
orderId
);
}
public
String
refundOn
(
Long
id
,
String
on
)
{
OrderItem
orderItem
=
orderItemMapper
.
selectById
(
id
);
if
(
null
==
orderItem
)
{
throw
new
ServiceException
(
"子订单不存在!"
);
}
UpdateWrapper
<
OrderItem
>
updateWrapper
=
new
UpdateWrapper
<>();
updateWrapper
.
eq
(
"id"
,
id
);
updateWrapper
.
set
(
"status"
,
"2"
);
updateWrapper
.
set
(
"refund_on"
,
on
);
int
row
=
orderItemMapper
.
update
(
null
,
updateWrapper
);
if
(
row
>
1
)
{
return
"提交成功!"
;
}
return
"提交失败!"
;
}
}
ruoyi-mall/src/main/java/com/cyl/job/OrderJob.java
View file @
58cc8f87
...
...
@@ -55,7 +55,7 @@ public class OrderJob {
QueryWrapper
<
Order
>
qw
=
new
QueryWrapper
<>();
qw
.
eq
(
"status"
,
Constants
.
OrderStatus
.
GET
);
qw
.
eq
(
"aftersale_status"
,
1
);
qw
.
le
(
"delivery_time"
,
LocalDateTime
.
now
().
minusDays
(
15
));
qw
.
le
(
"delivery_time"
,
LocalDateTime
.
now
().
minusDays
(
7
));
List
<
Order
>
orderList
=
orderMapper
.
selectList
(
qw
);
h5OrderService
.
orderCompleteByJob
(
orderList
);
log
.
info
(
"【订单完成任务结束】,处理了:{}个订单"
,
orderList
.
size
());
...
...
ruoyi-mall/src/main/java/com/cyl/manager/act/controller/H5IntegralHistoryController.java
View file @
58cc8f87
...
...
@@ -71,10 +71,9 @@ public class H5IntegralHistoryController extends BaseController {
}
@ApiOperation
(
"积分统计"
)
@
Pos
tMapping
(
"/stat"
)
public
ResponseEntity
<
IntegralStatVO
>
statIntegral
(
@RequestBody
IntegralHistoryQuery
query
)
{
IntegralStatVO
res
=
service
.
statIntegral
(
query
);
@
Ge
tMapping
(
"/stat"
)
public
ResponseEntity
<
IntegralStatVO
>
statIntegral
()
{
IntegralStatVO
res
=
service
.
statIntegral
(
null
);
return
ResponseEntity
.
ok
(
res
);
}
}
ruoyi-mall/src/main/java/com/cyl/manager/act/domain/entity/ActivityApplyInfo.java
View file @
58cc8f87
...
...
@@ -25,6 +25,8 @@ public class ActivityApplyInfo extends BaseAudit {
@Excel
(
name
=
"活动id"
)
private
Long
activityId
;
@TableField
(
exist
=
false
)
private
String
coverUrl
;
/**
* 报名用户id
*/
...
...
@@ -84,4 +86,18 @@ public class ActivityApplyInfo extends BaseAudit {
@ApiModelProperty
(
"删除标志(0代表存在 2代表删除)"
)
private
String
delFlag
;
@ApiModelProperty
(
"报名人数"
)
@Excel
(
name
=
"报名人数"
)
@TableField
(
exist
=
false
)
private
String
num
;
@ApiModelProperty
(
"人数限制"
)
@Excel
(
name
=
"人数限制"
)
@TableField
(
exist
=
false
)
private
Long
personCondition
;
/**
* 活动结束时间
*/
private
String
activityEndTime
;
}
ruoyi-mall/src/main/java/com/cyl/manager/act/domain/entity/ActivityInfo.java
View file @
58cc8f87
...
...
@@ -2,8 +2,10 @@ package com.cyl.manager.act.domain.entity;
import
java.time.LocalDateTime
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
com.ruoyi.common.annotation.Excel
;
import
com.ruoyi.common.core.domain.BaseAudit
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
...
...
@@ -16,7 +18,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
@ApiModel
(
description
=
"活动信息对象"
)
@Data
@TableName
(
"activity_info"
)
public
class
ActivityInfo
{
public
class
ActivityInfo
extends
BaseAudit
{
private
static
final
long
serialVersionUID
=
1L
;
@ApiModelProperty
(
"主键"
)
...
...
@@ -86,4 +88,15 @@ public class ActivityInfo {
@ApiModelProperty
(
"删除标志"
)
private
String
delFlag
;
/**
* 活动状态(0:启用,1:禁用)
*/
private
String
status
;
/**
* 报名人数
*/
@TableField
(
exist
=
false
)
private
Integer
num
;
}
ruoyi-mall/src/main/java/com/cyl/manager/act/domain/entity/IntegralHistory.java
View file @
58cc8f87
...
...
@@ -35,8 +35,8 @@ public class IntegralHistory {
@Excel
(
name
=
"类型 1:收入 2:支出 3:其他"
)
private
Integer
opType
;
@ApiModelProperty
(
"子类型:11签到 12消费获得 21退款扣除积分"
)
@Excel
(
name
=
"子类型:11签到 12消费获得 21退款扣除积分"
)
@ApiModelProperty
(
"子类型:11签到 12消费获得 21退款扣除积分
22 兑换优惠券,23平台扣除,24平台赠送,25退款退回积分
"
)
@Excel
(
name
=
"子类型:11签到 12消费获得 21退款扣除积分
22 兑换优惠券,23平台扣除,24平台赠送,25退款退回积分
"
)
private
Integer
subOpType
;
@ApiModelProperty
(
"订单金额"
)
...
...
ruoyi-mall/src/main/java/com/cyl/manager/act/domain/query/ActivityApplyInfoQuery.java
View file @
58cc8f87
...
...
@@ -24,4 +24,6 @@ public class ActivityApplyInfoQuery {
private
String
cancelUserName
;
private
Long
userId
;
private
Long
activityId
;
}
ruoyi-mall/src/main/java/com/cyl/manager/act/domain/query/ActivityInfoQuery.java
View file @
58cc8f87
...
...
@@ -40,4 +40,9 @@ public class ActivityInfoQuery {
@ApiModelProperty
(
"活动介绍 精确匹配"
)
private
String
activityIntroduce
;
/**
* 活动状态(0:启用,1:禁用)
*/
private
String
status
;
}
ruoyi-mall/src/main/java/com/cyl/manager/act/domain/vo/ActivityApplyInfoSaveVo.java
0 → 100644
View file @
58cc8f87
package
com
.
cyl
.
manager
.
act
.
domain
.
vo
;
import
com.cyl.manager.act.domain.entity.ActivityApplyInfo
;
import
com.ruoyi.common.annotation.Excel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.util.List
;
@Data
public
class
ActivityApplyInfoSaveVo
{
/**
* 活动id
*/
private
Long
activityId
;
private
Long
userId
;
/**
* 活动结束时间
*/
private
String
activityEndTime
;
/**
* 报名用户数组
*/
private
List
<
ActivityApplyInfo
>
activityApplyInfos
;
}
ruoyi-mall/src/main/java/com/cyl/manager/act/domain/vo/ActivityInfoVO.java
View file @
58cc8f87
...
...
@@ -52,4 +52,8 @@ public class ActivityInfoVO {
@Excel
(
name
=
"备注"
)
private
String
remark
;
private
String
delFlag
;
/**
* 活动状态(0:启用,1:禁用)
*/
private
String
status
;
}
ruoyi-mall/src/main/java/com/cyl/manager/act/domain/vo/IntegralHistoryVO.java
View file @
58cc8f87
...
...
@@ -23,7 +23,7 @@ public class IntegralHistoryVO {
@Excel
(
name
=
"类型 1:收入 2:支出 3:其他"
)
private
Integer
opType
;
/** 子类型:11签到 12消费获得 21退款扣除积分 */
@Excel
(
name
=
"子类型:11签到 12消费获得 21退款扣除积分"
)
@Excel
(
name
=
"子类型:11签到 12消费获得 21退款扣除积分
22 兑换优惠券,23平台扣除,24平台赠送
"
)
private
Integer
subOpType
;
/** 订单金额 */
@Excel
(
name
=
"订单金额"
)
...
...
ruoyi-mall/src/main/java/com/cyl/manager/act/mapper/IntegralHistoryMapper.java
View file @
58cc8f87
...
...
@@ -20,5 +20,5 @@ public interface IntegralHistoryMapper extends BaseMapper<IntegralHistory> {
*/
List
<
IntegralHistory
>
selectByEntity
(
IntegralHistory
integralHistory
);
IntegralStatVO
statIntegral
(
Lo
calDateTime
start
,
LocalDateTime
end
,
Lo
ng
memberId
);
IntegralStatVO
statIntegral
(
Long
memberId
);
}
ruoyi-mall/src/main/java/com/cyl/manager/act/service/ActivityApplyInfoService.java
View file @
58cc8f87
package
com
.
cyl
.
manager
.
act
.
service
;
import
java.text.ParseException
;
import
java.text.SimpleDateFormat
;
import
java.util.Arrays
;
import
java.util.Date
;
import
java.util.List
;
import
java.time.LocalDateTime
;
import
java.util.Optional
;
import
cn.hutool.core.util.RandomUtil
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper
;
import
com.baomidou.mybatisplus.core.toolkit.CollectionUtils
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
com.cyl.manager.act.domain.entity.ActivityApplyInfo
;
import
com.cyl.manager.act.domain.entity.ActivityInfo
;
import
com.cyl.manager.act.domain.query.ActivityApplyInfoQuery
;
import
com.cyl.manager.act.domain.vo.ActivityApplyInfoSaveVo
;
import
com.cyl.manager.act.mapper.ActivityApplyInfoMapper
;
import
com.cyl.manager.act.mapper.ActivityInfoMapper
;
import
com.cyl.manager.ums.domain.entity.Member
;
import
com.cyl.manager.ums.mapper.MemberMapper
;
import
com.github.pagehelper.PageHelper
;
import
com.ruoyi.common.core.domain.entity.SysUser
;
import
com.ruoyi.common.utils.sign.Md5Utils
;
import
com.ruoyi.system.mapper.SysUserMapper
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.domain.Pageable
;
import
org.apache.commons.lang3.StringUtils
;
...
...
@@ -30,6 +43,9 @@ public class ActivityApplyInfoService {
@Autowired
private
ActivityInfoMapper
activityInfoMapper
;
@Autowired
private
MemberMapper
memberMapper
;
/**
* 查询活动报名信息
*
...
...
@@ -37,7 +53,31 @@ public class ActivityApplyInfoService {
* @return 活动报名信息
*/
public
ActivityApplyInfo
selectById
(
Long
id
)
{
return
activityApplyInfoMapper
.
selectById
(
id
);
ActivityApplyInfo
activityApplyInfo
=
activityApplyInfoMapper
.
selectById
(
id
);
int
num
;
List
<
ActivityApplyInfo
>
list
=
activityApplyInfoMapper
.
selectList
(
Wrappers
.<
ActivityApplyInfo
>
lambdaQuery
()
.
eq
(
ActivityApplyInfo:
:
getActivityId
,
activityApplyInfo
.
getActivityId
()).
ne
(
ActivityApplyInfo:
:
getStatus
,
3
));
if
(
CollectionUtils
.
isNotEmpty
(
list
))
{
num
=
list
.
size
();
}
else
{
num
=
0
;
}
Optional
.
ofNullable
(
activityInfoMapper
.
selectById
(
activityApplyInfo
.
getActivityId
()))
.
ifPresent
(
activityInfo
->
{
activityApplyInfo
.
setActivityTitle
(
activityInfo
.
getActivityTitle
());
activityApplyInfo
.
setCoverUrl
(
activityInfo
.
getCoverUrl
());
activityApplyInfo
.
setActivityDate
(
activityInfo
.
getActivityDate
());
activityApplyInfo
.
setActivityAddress
(
activityInfo
.
getActivityAddress
());
activityApplyInfo
.
setApplyStartTime
(
activityInfo
.
getApplyStartTime
());
activityApplyInfo
.
setApplyEndTime
(
activityInfo
.
getApplyEndTime
());
activityApplyInfo
.
setNum
(
num
+
"/"
+
activityInfo
.
getPersonCondition
());
activityApplyInfo
.
setPersonCondition
(
activityInfo
.
getPersonCondition
());
});
Member
member
=
memberMapper
.
selectById
(
activityApplyInfo
.
getUserId
());
if
(
null
!=
member
)
{
activityApplyInfo
.
setCancelUserName
(
member
.
getNickname
());
}
return
activityApplyInfo
;
}
/**
...
...
@@ -48,6 +88,21 @@ public class ActivityApplyInfoService {
* @return 活动报名信息
*/
public
List
<
ActivityApplyInfo
>
selectList
(
ActivityApplyInfoQuery
query
,
Pageable
page
)
{
List
<
ActivityApplyInfo
>
result
=
activityApplyInfoMapper
.
selectList
(
null
);
if
(
CollectionUtils
.
isNotEmpty
(
result
))
{
result
.
forEach
(
activityApplyInfo
->
{
//判断报名活动是否到期并且未核销
if
(
activityApplyInfo
.
getStatus
().
equals
(
"0"
))
{
if
(
isBeforeCurrentTime
(
activityApplyInfo
.
getActivityEndTime
()))
{
UpdateWrapper
<
ActivityApplyInfo
>
updateWrapper
=
new
UpdateWrapper
<>();
updateWrapper
.
eq
(
"id"
,
activityApplyInfo
.
getId
());
updateWrapper
.
set
(
"status"
,
"2"
);
//修改状态
activityApplyInfoMapper
.
update
(
null
,
updateWrapper
);
}
}
});
}
if
(
page
!=
null
)
{
PageHelper
.
startPage
(
page
.
getPageNumber
()
+
1
,
page
.
getPageSize
());
}
...
...
@@ -68,22 +123,42 @@ public class ActivityApplyInfoService {
if
(!
StringUtils
.
isEmpty
(
status
))
{
qw
.
eq
(
"status"
,
status
);
}
if
(
null
!=
query
.
getActivityId
())
{
qw
.
eq
(
"activity_id"
,
query
.
getActivityId
());
}
List
<
ActivityApplyInfo
>
activityApplyInfos
=
activityApplyInfoMapper
.
selectList
(
qw
);
if
(
CollectionUtils
.
isNotEmpty
(
activityApplyInfos
))
{
activityApplyInfos
.
forEach
(
activityApplyInfo
->
{
Optional
.
ofNullable
(
activityInfoMapper
.
selectById
(
activityApplyInfo
.
getActivityId
()))
.
ifPresent
(
activityInfo
->
{
activityApplyInfo
.
setActivityTitle
(
activityInfo
.
getActivityTitle
());
activityApplyInfo
.
setCoverUrl
(
activityInfo
.
getCoverUrl
());
activityApplyInfo
.
setActivityDate
(
activityInfo
.
getActivityDate
());
activityApplyInfo
.
setActivityAddress
(
activityInfo
.
getActivityAddress
());
activityApplyInfo
.
setApplyStartTime
(
activityInfo
.
getApplyStartTime
());
activityApplyInfo
.
setApplyEndTime
(
activityInfo
.
getApplyEndTime
());
//获取报名人数
List
<
ActivityApplyInfo
>
list
=
activityApplyInfoMapper
.
selectList
(
Wrappers
.<
ActivityApplyInfo
>
lambdaQuery
()
.
eq
(
ActivityApplyInfo:
:
getActivityId
,
activityInfo
.
getId
()).
ne
(
ActivityApplyInfo:
:
getStatus
,
"3"
));
activityApplyInfo
.
setNum
(
String
.
valueOf
(
list
.
size
()));
activityApplyInfo
.
setPersonCondition
(
activityInfo
.
getPersonCondition
());
});
});
}
return
activityApplyInfos
;
}
public
static
boolean
isBeforeCurrentTime
(
String
inputTime
)
{
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
"yyyy/MM/dd HH:mm"
);
try
{
Date
date
=
sdf
.
parse
(
inputTime
);
return
date
.
before
(
new
Date
());
}
catch
(
ParseException
e
)
{
throw
new
RuntimeException
(
"时间格式错误"
,
e
);
}
}
/**
* 新增活动报名信息
*
...
...
@@ -97,6 +172,36 @@ public class ActivityApplyInfoService {
}
/**
* 批量新增活动报名信息
*
* @param activityApplyInfoSaveVo 活动报名信息
* @return 结果
*/
public
int
insertAll
(
ActivityApplyInfoSaveVo
activityApplyInfoSaveVo
)
{
int
i
=
0
;
if
(
null
!=
activityApplyInfoSaveVo
.
getActivityId
())
{
ActivityInfo
activityInfo
=
activityInfoMapper
.
selectById
(
activityApplyInfoSaveVo
.
getActivityId
());
if
(
CollectionUtils
.
isNotEmpty
(
activityApplyInfoSaveVo
.
getActivityApplyInfos
()))
{
for
(
ActivityApplyInfo
activityApplyInfo
:
activityApplyInfoSaveVo
.
getActivityApplyInfos
())
{
activityApplyInfo
.
setCreateTime
(
LocalDateTime
.
now
());
activityApplyInfo
.
setDelFlag
(
"0"
);
activityApplyInfo
.
setActivityEndTime
(
activityApplyInfoSaveVo
.
getActivityEndTime
());
activityApplyInfo
.
setActivityTitle
(
activityInfo
.
getActivityTitle
());
activityApplyInfo
.
setActivityDate
(
activityInfo
.
getActivityDate
());
activityApplyInfo
.
setActivityAddress
(
activityInfo
.
getActivityAddress
());
activityApplyInfo
.
setApplyStartTime
(
activityInfo
.
getApplyStartTime
());
activityApplyInfo
.
setActivityId
(
activityInfo
.
getId
());
activityApplyInfo
.
setUserId
(
activityApplyInfoSaveVo
.
getUserId
());
activityApplyInfo
.
setApplyEndTime
(
activityInfo
.
getApplyEndTime
());
activityApplyInfo
.
setCancelCode
(
RandomUtil
.
randomString
(
10
));
i
=
activityApplyInfoMapper
.
insert
(
activityApplyInfo
);
}
}
}
return
i
;
}
/**
* 修改活动报名信息
*
* @param activityApplyInfo 活动报名信息
...
...
ruoyi-mall/src/main/java/com/cyl/manager/act/service/ActivityInfoService.java
View file @
58cc8f87
...
...
@@ -4,9 +4,14 @@ import java.time.LocalDateTime;
import
java.util.Arrays
;
import
java.util.List
;
import
java.time.LocalDateTime
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.toolkit.CollectionUtils
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
com.cyl.manager.act.domain.entity.ActivityApplyInfo
;
import
com.cyl.manager.act.domain.entity.ActivityInfo
;
import
com.cyl.manager.act.domain.query.ActivityInfoQuery
;
import
com.cyl.manager.act.mapper.ActivityApplyInfoMapper
;
import
com.cyl.manager.act.mapper.ActivityInfoMapper
;
import
com.github.pagehelper.PageHelper
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -17,7 +22,6 @@ import org.springframework.stereotype.Service;
/**
* 活动信息Service业务层处理
*
*
* @author zcc
*/
@Service
...
...
@@ -25,6 +29,10 @@ public class ActivityInfoService {
@Autowired
private
ActivityInfoMapper
activityInfoMapper
;
@Autowired
private
ActivityApplyInfoMapper
activityApplyInfoMapper
;
/**
* 查询活动信息
*
...
...
@@ -32,14 +40,23 @@ public class ActivityInfoService {
* @return 活动信息
*/
public
ActivityInfo
selectById
(
Long
id
)
{
return
activityInfoMapper
.
selectById
(
id
);
ActivityInfo
activityInfo
=
activityInfoMapper
.
selectById
(
id
);
//获取报名人数
List
<
ActivityApplyInfo
>
activityApplyInfos
=
activityApplyInfoMapper
.
selectList
(
Wrappers
.<
ActivityApplyInfo
>
lambdaQuery
()
.
eq
(
ActivityApplyInfo:
:
getActivityId
,
activityInfo
.
getId
())
.
ne
(
ActivityApplyInfo:
:
getDelFlag
,
"2"
)
.
notIn
(
ActivityApplyInfo:
:
getStatus
,
2
,
3
));
if
(
CollectionUtils
.
isNotEmpty
(
activityApplyInfos
))
{
activityInfo
.
setNum
(
activityApplyInfos
.
size
());
}
return
activityInfo
;
}
/**
* 查询活动信息列表
*
* @param query 查询条件
* @param page 分页条件
* @param page
分页条件
* @return 活动信息
*/
public
List
<
ActivityInfo
>
selectList
(
ActivityInfoQuery
query
,
Pageable
page
)
{
...
...
@@ -47,7 +64,7 @@ public class ActivityInfoService {
PageHelper
.
startPage
(
page
.
getPageNumber
()
+
1
,
page
.
getPageSize
());
}
QueryWrapper
<
ActivityInfo
>
qw
=
new
QueryWrapper
<>();
qw
.
eq
(
"del_flag"
,
0
);
qw
.
eq
(
"del_flag"
,
0
);
String
activityTitle
=
query
.
getActivityTitle
();
if
(!
StringUtils
.
isEmpty
(
activityTitle
))
{
qw
.
eq
(
"activity_title"
,
activityTitle
);
...
...
@@ -64,6 +81,9 @@ public class ActivityInfoService {
if
(!
StringUtils
.
isEmpty
(
applyEndTime
))
{
qw
.
eq
(
"apply_end_time"
,
applyEndTime
);
}
if
(!
StringUtils
.
isEmpty
(
query
.
getStatus
()))
{
qw
.
eq
(
"status"
,
query
.
getStatus
());
}
String
activityAddress
=
query
.
getActivityAddress
();
if
(!
StringUtils
.
isEmpty
(
activityAddress
))
{
qw
.
eq
(
"activity_address"
,
activityAddress
);
...
...
@@ -84,7 +104,19 @@ public class ActivityInfoService {
if
(!
StringUtils
.
isEmpty
(
activityIntroduce
))
{
qw
.
eq
(
"activity_introduce"
,
activityIntroduce
);
}
return
activityInfoMapper
.
selectList
(
qw
);
List
<
ActivityInfo
>
list
=
activityInfoMapper
.
selectList
(
qw
);
if
(
CollectionUtils
.
isNotEmpty
(
list
))
{
list
.
forEach
(
activityInfo
->
{
//获取报名人数
List
<
ActivityApplyInfo
>
activityApplyInfos
=
activityApplyInfoMapper
.
selectList
(
Wrappers
.<
ActivityApplyInfo
>
lambdaQuery
()
.
eq
(
ActivityApplyInfo:
:
getActivityId
,
activityInfo
.
getId
())
.
notIn
(
ActivityApplyInfo:
:
getStatus
,
2
,
3
));
if
(
CollectionUtils
.
isNotEmpty
(
activityApplyInfos
))
{
activityInfo
.
setNum
(
activityApplyInfos
.
size
());
}
});
}
return
list
;
}
/**
...
...
ruoyi-mall/src/main/java/com/cyl/manager/act/service/IntegralHistoryService.java
View file @
58cc8f87
...
...
@@ -7,13 +7,19 @@ import java.util.List;
import
com.alibaba.fastjson.JSON
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper
;
import
com.cyl.h5.config.SecurityUtil
;
import
com.cyl.manager.act.constant.IntegralRule
;
import
com.cyl.manager.act.domain.vo.IntegralStatVO
;
import
com.cyl.manager.oms.domain.entity.Order
;
import
com.cyl.manager.oms.mapper.OrderMapper
;
import
com.cyl.manager.ums.domain.entity.Member
;
import
com.cyl.manager.ums.domain.entity.MemberAccount
;
import
com.cyl.manager.ums.mapper.MemberAccountMapper
;
import
com.cyl.manager.ums.mapper.MemberMapper
;
import
com.github.pagehelper.PageHelper
;
import
com.ruoyi.common.constant.Constants
;
import
com.ruoyi.common.exception.ServiceException
;
import
com.ruoyi.system.service.ISysConfigService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -40,6 +46,10 @@ public class IntegralHistoryService {
private
MemberAccountMapper
memberAccountMapper
;
@Autowired
private
ISysConfigService
sysConfigService
;
@Autowired
private
MemberMapper
memberMapper
;
@Autowired
private
OrderMapper
orderMapper
;
/**
* 查询积分流水表
...
...
@@ -142,32 +152,36 @@ public class IntegralHistoryService {
}
public
void
handleIntegral
(
Long
orderId
,
BigDecimal
amount
,
Long
memberId
)
{
String
config
=
sysConfigService
.
selectConfigByKey
(
Constants
.
INTEGRAL_RULE_KEY
);
IntegralRule
rule
;
if
(
StringUtils
.
isNotEmpty
(
config
))
{
rule
=
JSON
.
parseObject
(
config
,
IntegralRule
.
class
);
}
else
{
rule
=
new
IntegralRule
();
//扣除用户积分
Member
member
=
memberMapper
.
selectById
(
memberId
);
if
(
null
==
member
)
{
throw
new
ServiceException
(
"用户信息异常!"
);
}
BigDecimal
divide
=
amount
.
divide
(
rule
.
getOrderAmount
(),
0
,
RoundingMode
.
DOWN
);
if
(
divide
.
compareTo
(
BigDecimal
.
ZERO
)
<
1
)
{
log
.
info
(
"订单:{},金额:{}不足{}元,不记录积分"
,
orderId
,
amount
,
rule
.
getOrderAmount
());
return
;
//获取订单信息
Order
order
=
orderMapper
.
selectById
(
orderId
);
if
(
null
==
order
)
{
throw
new
ServiceException
(
"订单信息异常!"
)
;
}
BigDecimal
total
=
divide
.
multiply
(
rule
.
getOrderCount
());
if
(
total
.
compareTo
(
BigDecimal
.
ZERO
)
<
1
)
{
log
.
info
(
"订单:{},
orderCount为0,不记录积分"
,
orderId
);
if
(
null
==
order
.
getTotalIntegral
()
||
order
.
getTotalIntegral
().
compareTo
(
BigDecimal
.
ZERO
)
<
1
)
{
log
.
info
(
"订单:{},
金额为0,不记录积分"
,
orderId
);
return
;
}
BigDecimal
integral
=
member
.
getIntegral
().
subtract
(
order
.
getTotalIntegral
());
UpdateWrapper
<
Member
>
updateWrapper
=
new
UpdateWrapper
<>();
updateWrapper
.
eq
(
"id"
,
memberId
);
updateWrapper
.
set
(
"integral"
,
integral
);
memberMapper
.
update
(
null
,
updateWrapper
);
IntegralHistory
history
=
new
IntegralHistory
();
history
.
setOpType
(
1
);
history
.
setSubOpType
(
12
);
history
.
setAmount
(
total
);
history
.
setOpType
(
2
);
history
.
setSubOpType
(
23
);
history
.
setAmount
(
order
.
getTotalIntegral
()
);
history
.
setOrderId
(
orderId
);
history
.
setOrderAmount
(
amount
);
history
.
setMemberId
(
memberId
);
history
.
setCreateTime
(
LocalDateTime
.
now
());
in
sert2
(
history
);
in
tegralHistoryMapper
.
insert
(
history
);
}
/**
...
...
@@ -195,9 +209,7 @@ public class IntegralHistoryService {
PageHelper
.
startPage
(
page
.
getPageNumber
()
+
1
,
page
.
getPageSize
());
}
QueryWrapper
<
IntegralHistory
>
qw
=
new
QueryWrapper
<>();
qw
.
eq
(
"member_id"
,
SecurityUtil
.
getLocalMember
().
getId
())
.
ge
(
"create_time"
,
query
.
getStart
())
.
le
(
"create_time"
,
query
.
getEnd
());
qw
.
eq
(
"member_id"
,
SecurityUtil
.
getLocalMember
().
getId
());
Integer
opType
=
query
.
getOpType
();
if
(
opType
!=
null
)
{
qw
.
eq
(
"op_type"
,
opType
);
...
...
@@ -212,7 +224,7 @@ public class IntegralHistoryService {
public
IntegralStatVO
statIntegral
(
IntegralHistoryQuery
query
)
{
Long
memberId
=
SecurityUtil
.
getLocalMember
().
getId
();
IntegralStatVO
statVO
=
integralHistoryMapper
.
statIntegral
(
query
.
getStart
(),
query
.
getEnd
(),
memberId
);
IntegralStatVO
statVO
=
integralHistoryMapper
.
statIntegral
(
memberId
);
if
(
statVO
==
null
)
{
statVO
=
new
IntegralStatVO
();
}
...
...
ruoyi-mall/src/main/java/com/cyl/manager/live/domain/WechatzbjView.java
0 → 100644
View file @
58cc8f87
package
com
.
cyl
.
manager
.
live
.
domain
;
import
java.util.Date
;
/**
* 调取微信接口创建直播间所用实体
*
* @author songrongzhen
* @date 2023/05/05
*/
public
class
WechatzbjView
{
/**
* 直播间房号
*/
private
Number
id
;
/**
* 直播间名字
* 是否必填:是
*/
private
String
name
;
/**
* 背景图,填入mediaID(mediaID获取后,三天内有效)
* 是否必填:是
*/
private
String
coverImg
;
/**
* 直播计划开始时间(开播时间需要在当前时间的10分钟后 并且 开始时间不能在 6 个月后)
* 是否必填:是
*/
private
Number
startTime
;
/**
* 直播计划结束时间(开播时间和结束时间间隔不得短于30分钟,不得超过24小时)
* 是否必填:是
*/
private
Number
endTime
;
/**
* 主播昵称
* 是否必填:是
*/
private
String
anchorName
;
/**
* 主播微信号
* 是否必填:是
*/
private
String
anchorWechat
;
/**
* 主播副号微信号
* 是否必填:否
*/
private
String
subAnchorWechat
;
/**
* 创建者微信号
* 是否必填:否
*/
private
String
createrWechat
;
/**
* 分享图,填入mediaID(mediaID获取后,三天内有效)
* 是否必填:是
*/
private
String
shareImg
;
/**
* 购物直播频道封面图,填入mediaID(mediaID获取后,三天内有效)
* 是否必填:是
*/
private
String
feedsImg
;
/**
* 是否开启官方收录 【1: 开启,0:关闭】,默认开启收录
* 是否必填:否
*/
private
Number
isFeedsPublic
;
/**
* 直播间类型 【1: 推流,0:手机直播】
* 是否必填:是
*/
private
Number
type
;
/**
* 是否关闭点赞 【0:开启,1:关闭】
* 是否必填:是
*/
private
Number
closeLike
;
/**
* 是否关闭货架 【0:开启,1:关闭】
* 是否必填:是
*/
private
Number
closeGoods
;
/**
* 是否关闭评论 【0:开启,1:关闭】
* 是否必填:是
*/
private
Number
closeComment
;
/**
* 是否关闭回放 【0:开启,1:关闭】
* 是否必填:否
*/
private
Number
closeReplay
;
/**
* 是否关闭分享 【0:开启,1:关闭】
* 是否必填:否
*/
private
Number
closeShare
;
/**
* 是否关闭客服 【0:开启,1:关闭】
* 是否必填:否
*/
private
Number
closeKf
;
}
\ No newline at end of file
ruoyi-mall/src/main/java/com/cyl/manager/oms/controller/OrderController.java
View file @
58cc8f87
...
...
@@ -2,6 +2,7 @@ package com.cyl.manager.oms.controller;
import
com.cyl.manager.oms.convert.OrderConvert
;
import
com.cyl.manager.oms.domain.entity.Order
;
import
com.cyl.manager.oms.domain.entity.OrderItem
;
import
com.cyl.manager.oms.domain.query.OrderQuery
;
import
com.cyl.manager.oms.domain.form.DeliverProductForm
;
import
com.cyl.manager.oms.domain.form.ManagerOrderQueryForm
;
...
...
@@ -25,13 +26,14 @@ import org.springframework.security.access.prepost.PreAuthorize;
import
org.springframework.web.bind.annotation.*
;
import
java.util.List
;
/**
* 订单表Controller
*
*
* @author zcc
* @date 2022-12-01
*/
@Api
(
description
=
"订单表接口列表"
)
@Api
(
description
=
"订单表接口列表"
)
@RestController
@RequestMapping
(
"/oms/order"
)
@Slf4j
...
...
@@ -93,7 +95,7 @@ public class OrderController extends BaseController {
@ApiOperation
(
"删除订单表"
)
@PreAuthorize
(
"@ss.hasPermi('oms:order:remove')"
)
@Log
(
title
=
"订单表"
,
businessType
=
BusinessType
.
DELETE
)
@DeleteMapping
(
"/{id}"
)
@DeleteMapping
(
"/{id}"
)
public
ResponseEntity
<
Integer
>
remove
(
@PathVariable
Long
id
)
{
return
ResponseEntity
.
ok
(
service
.
deleteById
(
id
));
}
...
...
@@ -102,27 +104,28 @@ public class OrderController extends BaseController {
@PreAuthorize
(
"@ss.hasPermi('oms:order:note:add')"
)
@Log
(
title
=
"订单表"
,
businessType
=
BusinessType
.
UPDATE
)
@PostMapping
(
"/merchantNote/add"
)
public
ResponseEntity
<
Integer
>
saveMerchantNote
(
@RequestBody
Order
order
){
public
ResponseEntity
<
Integer
>
saveMerchantNote
(
@RequestBody
Order
order
)
{
return
ResponseEntity
.
ok
(
service
.
saveMerchantNote
(
order
));
}
@ApiOperation
(
"管理后台订单发货"
)
@PreAuthorize
(
"@ss.hasPermi('oms:order:delivery')"
)
@PostMapping
(
"/deliverProduct"
)
public
ResponseEntity
<
String
>
delivery
(
@RequestBody
DeliverProductForm
request
){
public
ResponseEntity
<
String
>
delivery
(
@RequestBody
DeliverProductForm
request
)
{
Long
userId
=
SecurityUtils
.
getUserId
();
String
redisKey
=
"oms_order_deliverProduct"
+
request
.
getOrderId
();
String
redisValue
=
request
.
getOrderId
()
+
"_"
+
System
.
currentTimeMillis
();
try
{
try
{
redisService
.
lock
(
redisKey
,
redisValue
,
60
);
return
ResponseEntity
.
ok
(
service
.
deliverProduct
(
request
,
userId
));
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
log
.
error
(
"订单发货接口异常"
);
throw
new
RuntimeException
(
"发货失败"
);
}
finally
{
try
{
redisService
.
unLock
(
redisKey
,
redisValue
);;
}
catch
(
Exception
e
){
}
finally
{
try
{
redisService
.
unLock
(
redisKey
,
redisValue
);
;
}
catch
(
Exception
e
)
{
log
.
error
(
""
,
e
);
}
}
...
...
@@ -130,15 +133,40 @@ public class OrderController extends BaseController {
@ApiOperation
(
"订单日志"
)
@GetMapping
(
"/log/{orderId}"
)
public
ResponseEntity
<
List
<
OrderOperateHistoryVO
>>
log
(
@PathVariable
Long
orderId
){
public
ResponseEntity
<
List
<
OrderOperateHistoryVO
>>
log
(
@PathVariable
Long
orderId
)
{
return
ResponseEntity
.
ok
(
service
.
log
(
orderId
));
}
@PreAuthorize
(
"@ss.hasAnyRoles('admin')"
)
@ApiOperation
(
"订单解密"
)
@GetMapping
(
"/decryptPhone/{orderId}"
)
public
ResponseEntity
<
String
>
decryptPhone
(
@PathVariable
Long
orderId
){
public
ResponseEntity
<
String
>
decryptPhone
(
@PathVariable
Long
orderId
)
{
String
decryptPhone
=
service
.
decryptPhone
(
orderId
);
return
ResponseEntity
.
ok
(
decryptPhone
);
}
@ApiOperation
(
"查询退款产品信息"
)
@GetMapping
(
value
=
"/refundOrderDetail/{id}"
)
public
ResponseEntity
<
List
<
OrderItem
>>
refundOrderDetail
(
@PathVariable
(
"id"
)
Long
id
)
{
return
ResponseEntity
.
ok
(
service
.
refundOrderDetail
(
id
));
}
@ApiOperation
(
"通过OR驳回,STATUS=0通过,STATUS=1驳回"
)
@GetMapping
(
"/refund"
)
public
ResponseEntity
<
String
>
refund
(
Long
id
,
Long
status
)
{
return
ResponseEntity
.
ok
(
service
.
refund
(
id
,
status
));
}
@ApiOperation
(
"退款"
)
@GetMapping
(
"/tuikuan"
)
public
ResponseEntity
<
String
>
tuikuan
(
Long
id
)
{
return
ResponseEntity
.
ok
(
service
.
tuikuan
(
id
));
}
@ApiOperation
(
"驳回"
)
@GetMapping
(
"/bohui"
)
public
ResponseEntity
<
String
>
bohui
(
Long
id
,
Long
type
)
{
return
ResponseEntity
.
ok
(
service
.
bohui
(
id
,
type
));
}
}
ruoyi-mall/src/main/java/com/cyl/manager/oms/domain/entity/Order.java
View file @
58cc8f87
...
...
@@ -61,8 +61,8 @@ public class Order extends BaseAudit {
@Excel
(
name
=
"支付方式:0->未支付;1->支付宝;2->微信"
)
private
Integer
payType
;
@ApiModelProperty
(
"订单状态:0->待付款;1->待发货;2->
已发货;3->已完成;4->已关闭;5->无效订单
"
)
@Excel
(
name
=
"订单状态:0->待付款;1->待发货;2->
已发货;3->已完成;4->已关闭;5->无效订单
"
)
@ApiModelProperty
(
"订单状态:0->待付款;1->待发货;2->
待收货;3->已完成;4->订单取消;5->售后取消;->6:售后处理中,7:申请失败,8: 退款成功,9:待退款
"
)
@Excel
(
name
=
"订单状态:0->待付款;1->待发货;2->
待收货;3->已完成;4->订单取消;5->售后取消;->6:售后处理中,7:申请失败,8: 退款成功,9:待退款
"
)
private
Integer
status
;
@ApiModelProperty
(
"退款状态,枚举值:1:无售后或售后关闭,2:售后处理中,3:退款中,4: 退款成功"
)
...
...
@@ -159,4 +159,20 @@ public class Order extends BaseAudit {
@ApiModelProperty
(
"优惠券金额"
)
private
BigDecimal
couponAmount
;
@ApiModelProperty
(
"抵扣金额"
)
private
BigDecimal
deMoney
;
@ApiModelProperty
(
"使用积分"
)
private
BigDecimal
totalIntegral
;
@ApiModelProperty
(
value
=
"退款原因"
,
required
=
true
)
private
String
reason
;
@ApiModelProperty
(
"凭证图片以逗号隔开"
)
private
String
proofPics
;
/**
* 赠送积分
*/
private
BigDecimal
giveIntegral
;
}
ruoyi-mall/src/main/java/com/cyl/manager/oms/domain/entity/OrderItem.java
View file @
58cc8f87
...
...
@@ -10,12 +10,13 @@ import io.swagger.annotations.ApiModelProperty;
import
com.ruoyi.common.core.domain.BaseAudit
;
import
lombok.Data
;
import
com.baomidou.mybatisplus.annotation.TableName
;
/**
* 订单中所包含的商品对象 oms_order_item
*
*
* @author zcc
*/
@ApiModel
(
description
=
"订单中所包含的商品对象"
)
@ApiModel
(
description
=
"订单中所包含的商品对象"
)
@Data
@TableName
(
"oms_order_item"
)
public
class
OrderItem
extends
BaseAudit
{
...
...
@@ -81,4 +82,29 @@ public class OrderItem extends BaseAudit {
@Excel
(
name
=
"商品sku属性:[{\"key\":\"颜色\",\"value\":\"颜色\"},{\"key\":\"容量\",\"value\":\"4G\"}]"
)
private
String
spData
;
@ApiModelProperty
(
"优惠后金额"
)
private
BigDecimal
couponMoney
;
@ApiModelProperty
(
"使用积分"
)
private
BigDecimal
useIntegral
;
@ApiModelProperty
(
"抵扣金额"
)
private
BigDecimal
deMoney
;
@ApiModelProperty
(
"状态(0:售后中,1:申请失败,2:待退款,3:退款失败,4:售后取消,5:待发货,6:待收货,7:已完成,8:退款成功,9:已取消)"
)
private
String
status
;
/**
* 赠送积分
*/
private
BigDecimal
giveIntegral
;
@ApiModelProperty
(
value
=
"退款原因"
)
private
String
reason
;
@ApiModelProperty
(
"凭证图片以逗号隔开"
)
private
String
proofPics
;
@ApiModelProperty
(
"退货单号"
)
private
String
refundOn
;
}
ruoyi-mall/src/main/java/com/cyl/manager/oms/domain/form/DealWithAftersaleForm.java
View file @
58cc8f87
...
...
@@ -20,4 +20,15 @@ import javax.validation.constraints.NotNull;
@ApiModelProperty
(
name
=
"remark"
,
value
=
"拒绝理由 操作类型为2时必填"
,
required
=
true
,
dataType
=
"String"
)
private
String
remark
;
@ApiModelProperty
(
name
=
"如果只生请一笔售后传入子订单的id"
)
private
Long
orderItemId
;
@ApiModelProperty
(
name
=
"退款原因"
)
private
String
reason
;
@ApiModelProperty
(
"凭证图片以逗号隔开"
)
private
String
proofPics
;
private
Long
memberId
;
}
\ No newline at end of file
ruoyi-mall/src/main/java/com/cyl/manager/oms/domain/form/ManagerOrderQueryForm.java
View file @
58cc8f87
...
...
@@ -30,7 +30,7 @@ public class ManagerOrderQueryForm {
@ApiModelProperty
(
name
=
"payType"
,
value
=
"支付方式 0->未支付;1->支付宝;2->微信"
,
required
=
true
,
dataType
=
"Integer"
)
private
Integer
payType
;
@ApiModelProperty
(
name
=
"status"
,
value
=
"订单状态:0->待付款;1->待发货;2->
已发货;3->已完成;4->已关闭;5->无效订单
"
,
required
=
true
,
dataType
=
"String"
)
@ApiModelProperty
(
name
=
"status"
,
value
=
"订单状态:0->待付款;1->待发货;2->
待收货;3->已完成;4->订单取消;5->售后取消;->6:售后处理中,7:申请失败,8: 退款成功,9:待退款
"
,
required
=
true
,
dataType
=
"String"
)
private
Integer
status
;
@ApiModelProperty
(
"省份/直辖市 精确匹配"
)
...
...
ruoyi-mall/src/main/java/com/cyl/manager/oms/domain/query/OrderQuery.java
View file @
58cc8f87
...
...
@@ -35,7 +35,7 @@ public class OrderQuery {
@ApiModelProperty
(
"支付方式:0->未支付;1->支付宝;2->微信 精确匹配"
)
private
Integer
payType
;
@ApiModelProperty
(
"订单状态:0->待付款;1->待发货;2->
已发货;3->已完成;4->已关闭;5->无效订单 精确匹配
"
)
@ApiModelProperty
(
"订单状态:0->待付款;1->待发货;2->
待收货;3->已完成;4->订单取消;5->售后取消;->6:售后处理中,7:申请失败,8: 退款成功,9:待退款
"
)
private
Integer
status
;
@ApiModelProperty
(
"退款状态,枚举值:1:无售后或售后关闭,2:售后处理中,3:退款中,4: 退款成功 精确匹配"
)
...
...
ruoyi-mall/src/main/java/com/cyl/manager/oms/domain/vo/ManagerOrderDetailVO.java
View file @
58cc8f87
...
...
@@ -44,4 +44,11 @@ public class ManagerOrderDetailVO {
@ApiModelProperty
(
"订单金额"
)
private
BigDecimal
totalAmount
;
private
BigDecimal
couponAmount
;
@ApiModelProperty
(
"抵扣金额"
)
private
BigDecimal
deMoney
;
/**
* 赠送积分
*/
private
BigDecimal
giveIntegral
;
}
ruoyi-mall/src/main/java/com/cyl/manager/oms/domain/vo/ManagerOrderProductVO.java
View file @
58cc8f87
...
...
@@ -9,6 +9,7 @@ import java.math.BigDecimal;
@Data
@ApiModel
(
"订单"
)
public
class
ManagerOrderProductVO
{
private
Long
id
;
@ApiModelProperty
(
"商品id"
)
private
Long
productId
;
@ApiModelProperty
(
"商品名称"
)
...
...
@@ -21,5 +22,20 @@ public class ManagerOrderProductVO {
private
Integer
buyNum
;
@ApiModelProperty
(
"销售价格"
)
private
BigDecimal
salePrice
;
@ApiModelProperty
(
"优惠后金额"
)
private
BigDecimal
couponMoney
;
private
String
status
;
@ApiModelProperty
(
value
=
"退款原因"
)
private
String
reason
;
@ApiModelProperty
(
"凭证图片以逗号隔开"
)
private
String
proofPics
;
@ApiModelProperty
(
"退货单号"
)
private
String
refundOn
;
@ApiModelProperty
(
"使用积分"
)
private
BigDecimal
useIntegral
;
}
ruoyi-mall/src/main/java/com/cyl/manager/oms/domain/vo/ManagerOrderVO.java
View file @
58cc8f87
...
...
@@ -31,7 +31,7 @@ public class ManagerOrderVO {
@ApiModelProperty
(
name
=
"avatar"
,
value
=
"用户头像"
,
required
=
true
,
dataType
=
"String"
)
private
String
avatar
;
@ApiModelProperty
(
name
=
"status"
,
value
=
"
订单状态:0->待付款;1->待发货;2->已发货;3->已完成;4->已关闭;5->无效订单
"
,
required
=
true
,
dataType
=
"Integer"
)
@ApiModelProperty
(
name
=
"status"
,
value
=
"
0->待付款;1->待发货;2->已发货;3->已完成;4->已关闭;5->无效订单;->6:售后处理中,7:退款中,8: 退款成功
"
,
required
=
true
,
dataType
=
"Integer"
)
private
Integer
status
;
@ApiModelProperty
(
"退款状态,枚举值:1:无售后或售后关闭,2:售后处理中,3:退款中,4: 退款成功"
)
...
...
@@ -92,6 +92,8 @@ public class ManagerOrderVO {
private
String
receiverProvince
;
private
String
receiverPhoneEncrypted
;
private
String
receiverCity
;
private
String
receiverDistrict
;
...
...
@@ -101,4 +103,13 @@ public class ManagerOrderVO {
private
String
mark
;
private
BigDecimal
couponAmount
;
@ApiModelProperty
(
"抵扣金额"
)
private
BigDecimal
deMoney
;
@ApiModelProperty
(
"使用积分"
)
private
BigDecimal
totalIntegral
;
/**
* 赠送积分
*/
private
BigDecimal
giveIntegral
;
}
ruoyi-mall/src/main/java/com/cyl/manager/oms/domain/vo/OrderItemVO.java
View file @
58cc8f87
...
...
@@ -3,6 +3,7 @@ package com.cyl.manager.oms.domain.vo;
import
java.math.BigDecimal
;
import
com.ruoyi.common.annotation.Excel
;
import
com.ruoyi.common.core.domain.BaseAudit
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
/**
* 订单中所包含的商品 数据视图对象
...
...
@@ -55,4 +56,20 @@ public class OrderItemVO extends BaseAudit {
/** 商品sku属性:[{\"key\":\"颜色\",\"value\":\"颜色\"},{\"key\":\"容量\",\"value\":\"4G\"}] */
@Excel
(
name
=
"商品sku属性:[{\"key\":\"颜色\",\"value\":\"颜色\"},{\"key\":\"容量\",\"value\":\"4G\"}]"
)
private
String
spData
;
private
BigDecimal
deMoney
;
/**
* 赠送积分
*/
private
BigDecimal
giveIntegral
;
@ApiModelProperty
(
value
=
"退款原因"
)
private
String
reason
;
@ApiModelProperty
(
"凭证图片以逗号隔开"
)
private
String
proofPics
;
@ApiModelProperty
(
"退货单号"
)
private
String
refundOn
;
@ApiModelProperty
(
"优惠后金额"
)
private
BigDecimal
couponMoney
;
}
ruoyi-mall/src/main/java/com/cyl/manager/oms/domain/vo/OrderVO.java
View file @
58cc8f87
...
...
@@ -8,6 +8,7 @@ import com.cyl.manager.oms.domain.entity.OrderItem;
import
com.ruoyi.common.annotation.Excel
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
com.ruoyi.common.core.domain.BaseAudit
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
/**
* 订单表 数据视图对象
...
...
@@ -43,8 +44,8 @@ public class OrderVO extends BaseAudit {
/** 支付方式:0->未支付;1->支付宝;2->微信 */
@Excel
(
name
=
"支付方式:0->未支付;1->支付宝;2->微信"
)
private
Integer
payType
;
/** 订单状态:0->待付款;1->待发货;2->
已发货;3->已完成;4->已关闭;5->无效订单
*/
@Excel
(
name
=
"订单状态:0->待付款;1->待发货;2->
已发货;3->已完成;4->已关闭;5->无效订单
"
)
/** 订单状态:0->待付款;1->待发货;2->
待收货;3->已完成;4->订单取消;5->售后取消;->6:售后处理中,7:申请失败,8: 退款成功,9:待退款
*/
@Excel
(
name
=
"订单状态:0->待付款;1->待发货;2->
待收货;3->已完成;4->订单取消;5->售后取消;->6:售后处理中,7:申请失败,8: 退款成功,9:待退款
"
)
private
Integer
status
;
/** 退款状态,枚举值:1:无售后或售后关闭,2:售后处理中,3:退款中,4: 退款成功 */
@Excel
(
name
=
"退款状态,枚举值:1:无售后或售后关闭,2:售后处理中,3:退款中,4: 退款成功"
)
...
...
@@ -52,6 +53,11 @@ public class OrderVO extends BaseAudit {
/** 物流公司(配送方式) */
@Excel
(
name
=
"物流公司(配送方式)"
)
private
String
deliveryCompany
;
@ApiModelProperty
(
value
=
"退款原因"
,
required
=
true
)
private
String
reason
;
@ApiModelProperty
(
"凭证图片以逗号隔开"
)
private
String
proofPics
;
/** 物流单号 */
@Excel
(
name
=
"物流单号"
)
private
String
deliverySn
;
...
...
@@ -109,5 +115,10 @@ public class OrderVO extends BaseAudit {
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
@Excel
(
name
=
"确认收货时间"
,
width
=
30
,
dateFormat
=
"yyyy-MM-dd HH:mm:ss"
)
private
LocalDateTime
receiveTime
;
@ApiModelProperty
(
"抵扣金额"
)
private
BigDecimal
deMoney
;
@ApiModelProperty
(
"使用积分"
)
private
BigDecimal
totalIntegral
;
private
List
<
OrderItem
>
items
;
}
ruoyi-mall/src/main/java/com/cyl/manager/oms/service/AftersaleService.java
View file @
58cc8f87
...
...
@@ -3,15 +3,19 @@ package com.cyl.manager.oms.service;
import
java.math.BigDecimal
;
import
java.time.LocalDateTime
;
import
java.util.*
;
import
java.util.concurrent.atomic.AtomicReference
;
import
java.util.stream.Collectors
;
import
cn.hutool.core.collection.CollectionUtil
;
import
cn.hutool.core.util.RandomUtil
;
import
cn.hutool.core.util.StrUtil
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONObject
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper
;
import
com.cyl.manager.act.domain.entity.IntegralHistory
;
import
com.cyl.manager.act.mapper.IntegralHistoryMapper
;
import
com.cyl.manager.act.service.MemberCouponService
;
import
com.cyl.manager.oms.convert.OrderOperateHistoryConvert
;
import
com.cyl.manager.oms.domain.entity.*
;
...
...
@@ -32,6 +36,9 @@ import com.ruoyi.common.core.domain.AjaxResult;
import
com.ruoyi.common.core.domain.model.LoginUser
;
import
com.ruoyi.common.enums.AftersaleStatus
;
import
com.ruoyi.common.enums.OrderRefundStatus
;
import
com.ruoyi.common.enums.OrderStatus
;
import
com.ruoyi.common.exception.ServiceException
;
import
com.ruoyi.framework.config.LocalDataUtil
;
import
com.wechat.pay.java.service.refund.model.Refund
;
import
com.wechat.pay.java.service.refund.model.RefundNotification
;
import
lombok.extern.slf4j.Slf4j
;
...
...
@@ -79,6 +86,8 @@ public class AftersaleService {
private
WechatPayService
wechatPayService
;
@Autowired
private
OrderOperateHistoryMapper
operateHistoryMapper
;
@Autowired
private
IntegralHistoryMapper
integralHistoryMapper
;
/**
* 查询订单售后
...
...
@@ -239,7 +248,6 @@ public class AftersaleService {
* 售后处理
*
* @param request 请求体
* @param user 操作人
* @return
*/
@Transactional
(
rollbackFor
=
Exception
.
class
)
...
...
@@ -248,32 +256,76 @@ public class AftersaleService {
if
(
order
==
null
)
{
throw
new
RuntimeException
(
"无该订单"
);
}
QueryWrapper
<
Aftersale
>
aftersaleQw
=
new
QueryWrapper
<>();
aftersaleQw
.
eq
(
"order_id"
,
request
.
getOrderId
());
if
(
request
.
getOptType
()
==
3
)
{
aftersaleQw
.
eq
(
"status"
,
1
);
}
else
{
aftersaleQw
.
eq
(
"status"
,
0
);
}
Aftersale
aftersale
=
aftersaleMapper
.
selectOne
(
aftersaleQw
);
if
(
aftersale
==
null
)
{
throw
new
RuntimeException
(
"没有售后单"
);
}
//售后状态与售后类型是否对应
if
(
Constants
.
OptType
.
AGREE
.
equals
(
request
.
getOptType
())
||
Constants
.
OptType
.
REFUSE
.
equals
(
request
.
getOptType
()))
{
if
(!
AftersaleStatus
.
APPLY
.
getType
().
equals
(
aftersale
.
getStatus
()))
{
throw
new
RuntimeException
(
"订单状态错误,请刷新页面后重试!"
);
LocalDateTime
optDate
=
LocalDateTime
.
now
();
//不是0元订单
if
(
order
.
getPayAmount
().
compareTo
(
BigDecimal
.
ZERO
)
>
0
)
{
//只申请一笔售后
if
(
request
.
getOrderItemId
()
!=
null
)
{
List
<
OrderItem
>
orderItem
=
orderItemMapper
.
selectList
(
new
QueryWrapper
<
OrderItem
>().
eq
(
"id"
,
request
.
getOrderItemId
()));
if
(
CollectionUtil
.
isNotEmpty
(
orderItem
))
{
// 是否需要发起退款
if
(
request
.
getOptType
()
==
Constants
.
OptType
.
AGREE
)
{
BigDecimal
money
=
new
BigDecimal
(
"0.00"
);
if
(
orderItem
.
get
(
0
).
getCouponMoney
()
==
null
||
orderItem
.
get
(
0
).
getCouponMoney
().
compareTo
(
BigDecimal
.
ZERO
)
<=
0
)
{
money
=
orderItem
.
get
(
0
).
getSalePrice
();
}
else
{
money
=
orderItem
.
get
(
0
).
getCouponMoney
();
}
BigDecimal
multiply
=
money
.
multiply
(
BigDecimal
.
valueOf
(
orderItem
.
get
(
0
).
getQuantity
()));
//开始退款
Refund
wechatResponse
=
wechatPayService
.
refundPay
(
order
.
getOrderSn
()
+
RandomUtil
.
randomNumbers
(
5
),
order
.
getPayId
()
+
""
,
"https://wenchuang.yyinhong.cn/api/no-auth/wechat/weChatRefundNotify"
,
multiply
.
multiply
(
new
BigDecimal
(
"100"
)).
longValue
(),
order
.
getPayAmount
().
multiply
(
new
BigDecimal
(
"100"
)).
longValue
(),
request
.
getReason
());
log
.
info
(
"发起微信退款返回信息,tradeRefund:{}"
,
JSONObject
.
toJSONString
(
wechatResponse
==
null
?
""
:
wechatResponse
));
//库存回滚
orderItem
.
stream
().
collect
(
Collectors
.
groupingBy
(
it
->
it
.
getSkuId
())).
forEach
((
k
,
v
)
->
{
AtomicReference
<
Integer
>
totalCount
=
new
AtomicReference
<>(
0
);
v
.
forEach
(
it
->
totalCount
.
updateAndGet
(
v1
->
v1
+
it
.
getQuantity
()));
skuMapper
.
updateStockById
(
k
,
optDate
,
-
1
*
totalCount
.
get
());
});
//处理积分
sendBack
(
request
.
getMemberId
(),
null
,
orderItem
.
get
(
0
).
getId
());
}
}
//全部退款
}
else
{
if
(
request
.
getOptType
()
==
Constants
.
OptType
.
AGREE
)
{
//开始退款
Refund
wechatResponse
=
wechatPayService
.
refundPay
(
order
.
getOrderSn
()
+
RandomUtil
.
randomNumbers
(
5
),
order
.
getPayId
()
+
""
,
"https://wenchuang.yyinhong.cn/api/no-auth/wechat/weChatRefundNotify"
,
order
.
getPayAmount
().
multiply
(
new
BigDecimal
(
"100"
)).
longValue
(),
order
.
getPayAmount
().
multiply
(
new
BigDecimal
(
"100"
)).
longValue
(),
request
.
getReason
());
log
.
info
(
"发起微信退款返回信息,tradeRefund:{}"
,
JSONObject
.
toJSONString
(
wechatResponse
==
null
?
""
:
wechatResponse
));
List
<
OrderItem
>
orderItem
=
orderItemMapper
.
selectList
(
new
QueryWrapper
<
OrderItem
>().
eq
(
"order_id"
,
request
.
getOrderId
()));
if
(
CollectionUtil
.
isNotEmpty
(
orderItem
))
{
//库存回滚
orderItem
.
stream
().
collect
(
Collectors
.
groupingBy
(
it
->
it
.
getSkuId
())).
forEach
((
k
,
v
)
->
{
AtomicReference
<
Integer
>
totalCount
=
new
AtomicReference
<>(
0
);
v
.
forEach
(
it
->
totalCount
.
updateAndGet
(
v1
->
v1
+
it
.
getQuantity
()));
skuMapper
.
updateStockById
(
k
,
optDate
,
-
1
*
totalCount
.
get
());
});
}
//处理积分
sendBack
(
request
.
getMemberId
(),
order
.
getId
(),
null
);
//修改子订单状态
List
<
OrderItem
>
orderItems
=
orderItemMapper
.
selectList
(
new
QueryWrapper
<
OrderItem
>().
eq
(
"order_id"
,
request
.
getOrderId
()));
if
(
CollectionUtil
.
isNotEmpty
(
orderItems
))
{
for
(
OrderItem
item
:
orderItems
)
{
item
.
setStatus
(
"9"
);
orderItemMapper
.
updateById
(
item
);
}
}
}
}
}
else
{
if
(!
AftersaleStatus
.
WAIT
.
getType
().
equals
(
aftersale
.
getStatus
()))
{
throw
new
RuntimeException
(
"订单状态错误,请刷新页面后重试!"
);
}
}
//拒绝则理由必填
if
(
Constants
.
OptType
.
REFUSE
.
equals
(
request
.
getOptType
())
&&
StrUtil
.
isBlank
(
request
.
getRemark
()))
{
throw
new
RuntimeException
(
"请填写拒绝理由"
);
//处理积分
sendBack
(
request
.
getMemberId
(),
order
.
getId
(),
null
);
}
LocalDateTime
optDate
=
LocalDateTime
.
now
();
//要创建的订单操作记录,status后续判断再设置
OrderOperateHistory
optHistory
=
new
OrderOperateHistory
();
optHistory
.
setOrderId
(
order
.
getId
());
...
...
@@ -283,102 +335,97 @@ public class AftersaleService {
optHistory
.
setCreateBy
(
userId
);
optHistory
.
setUpdateBy
(
userId
);
optHistory
.
setUpdateTime
(
optDate
);
//封装售后wrapper
UpdateWrapper
<
Aftersale
>
aftersaleWrapper
=
new
UpdateWrapper
<>();
aftersaleWrapper
.
eq
(
"order_id"
,
request
.
getOrderId
());
aftersaleWrapper
.
eq
(
"status"
,
AftersaleStatus
.
APPLY
.
getType
());
aftersaleWrapper
.
set
(
"handle_man"
,
optUserName
);
aftersaleWrapper
.
set
(
"update_time"
,
optDate
);
aftersaleWrapper
.
set
(
"handle_time"
,
optDate
);
aftersaleWrapper
.
set
(
"update_by"
,
userId
);
//封装订单wrapper
UpdateWrapper
<
Order
>
orderWrapper
=
new
UpdateWrapper
<>();
orderWrapper
.
eq
(
"id"
,
request
.
getOrderId
());
orderWrapper
.
set
(
"update_time"
,
optDate
);
orderWrapper
.
set
(
"update_by"
,
userId
);
//更新订单、售后单,创建操作记录
if
(
request
.
getOptType
().
equals
(
Constants
.
OptType
.
REFUSE
))
{
aftersaleWrapper
.
set
(
"status"
,
AftersaleStatus
.
REJECT
.
getType
());
aftersaleWrapper
.
set
(
"handle_note"
,
request
.
getRemark
());
orderWrapper
.
set
(
"aftersale_status"
,
OrderRefundStatus
.
NO_REFUND
.
getType
());
optHistory
.
setOrderStatus
(
14
);
}
else
if
(
request
.
getOptType
().
equals
(
Constants
.
OptType
.
AGREE
))
{
aftersaleWrapper
.
set
(
"status"
,
AftersaleStatus
.
WAIT
.
getType
());
orderWrapper
.
set
(
"aftersale_status"
,
Objects
.
equals
(
aftersale
.
getType
(),
1
)
?
3
:
2
);
optHistory
.
setOrderStatus
(
12
);
}
else
{
//如果是退货退款 order身上的售后状态应该是保持不变的 仅退款的话就进入退款了
orderWrapper
.
set
(
"aftersale_status"
,
3
);
int
row
=
orderMapper
.
update
(
null
,
orderWrapper
);
if
(
row
!=
1
)
{
throw
new
RuntimeException
(
"修改订单状态失败"
);
}
}
int
rows
=
aftersaleMapper
.
update
(
null
,
aftersaleWrapper
);
// if (rows < 1) {
// throw new RuntimeException("更新售后单失败");
// }
rows
=
orderMapper
.
update
(
null
,
orderWrapper
);
if
(
rows
<
1
)
{
throw
new
RuntimeException
(
"更新订单失败"
);
orderWrapper
.
set
(
"reason"
,
request
.
getReason
());
orderWrapper
.
set
(
"proof_pics"
,
request
.
getProofPics
());
orderWrapper
.
set
(
"status"
,
OrderStatus
.
CLOSED
.
getType
());
int
row
=
orderMapper
.
update
(
null
,
orderWrapper
);
if
(
row
!=
1
)
{
throw
new
RuntimeException
(
"修改订单状态失败"
);
}
rows
=
orderOperateHistoryMapper
.
insert
(
optHistory
);
if
(
rows
<
1
)
{
throw
new
RuntimeException
(
"创建订单操作记录失败"
);
}
// 是否需要发起退款
if
((
request
.
getOptType
()
==
Constants
.
OptType
.
GIVING
||
(
request
.
getOptType
()
==
Constants
.
OptType
.
AGREE
&&
aftersale
.
getType
()
==
1
)))
{
tradeRefund
(
aftersale
,
order
,
optDate
,
userId
);
List
<
OrderItem
>
orderItem
=
orderItemMapper
.
selectList
(
new
QueryWrapper
<
OrderItem
>().
eq
(
"order_id"
,
request
.
getOrderId
()));
//库存回滚
orderItem
.
stream
().
collect
(
Collectors
.
groupingBy
(
it
->
it
.
getSkuId
())).
forEach
((
k
,
v
)
->
{
AtomicReference
<
Integer
>
totalCount
=
new
AtomicReference
<>(
0
);
v
.
forEach
(
it
->
totalCount
.
updateAndGet
(
v1
->
v1
+
it
.
getQuantity
()));
skuMapper
.
updateStockById
(
k
,
optDate
,
-
1
*
totalCount
.
get
());
});
optHistory
.
setOrderStatus
(
OrderStatus
.
CLOSED
.
getType
());
int
his
=
orderOperateHistoryMapper
.
insert
(
optHistory
);
if
(
his
!=
1
)
{
log
.
info
(
"订单日志记录失败!"
);
}
}
public
void
tradeRefund
(
Aftersale
returnApply
,
Order
order
,
LocalDateTime
optDate
,
Long
userId
)
{
//查一下微信订单
QueryWrapper
<
WechatPaymentHistory
>
qw
=
new
QueryWrapper
<>();
qw
.
eq
(
"order_id"
,
order
.
getPayId
()).
eq
(
"op_type"
,
1
);
WechatPaymentHistory
history
=
wechatPaymentHistoryMapper
.
selectOne
(
qw
);
//查用户的微信信息
QueryWrapper
<
MemberWechat
>
wechatQw
=
new
QueryWrapper
<>();
wechatQw
.
eq
(
"member_id"
,
order
.
getMemberId
());
MemberWechat
memberWechat
=
memberWechatMapper
.
selectOne
(
wechatQw
);
//查订单item
QueryWrapper
<
OrderItem
>
itemQw
=
new
QueryWrapper
<>();
itemQw
.
eq
(
"order_id"
,
order
.
getId
());
OrderItem
orderItem
=
orderItemMapper
.
selectOne
(
itemQw
);
//开始退款
Refund
wechatResponse
=
wechatPayService
.
refundPay
(
returnApply
.
getId
()
+
""
,
order
.
getPayId
()
+
""
,
"https://mall.ichengle.top/api/no-auth/wechat/weChatRefundNotify"
,
returnApply
.
getReturnAmount
().
multiply
(
new
BigDecimal
(
"100"
)).
longValue
(),
history
.
getMoney
().
multiply
(
new
BigDecimal
(
"100"
)).
longValue
(),
returnApply
.
getReason
());
log
.
info
(
"发起微信退款返回信息,tradeRefund:{}"
,
JSONObject
.
toJSONString
(
wechatResponse
==
null
?
""
:
wechatResponse
));
if
(
wechatResponse
!=
null
&&
Arrays
.
asList
(
"PROCESSING"
,
"SUCCESS"
).
contains
(
wechatResponse
.
getStatus
().
name
()))
{
qw
=
new
QueryWrapper
<>();
qw
.
eq
(
"order_id"
,
order
.
getId
()).
eq
(
"op_type"
,
3
);
WechatPaymentHistory
refundHistory
=
wechatPaymentHistoryMapper
.
selectOne
(
qw
);
if
(
refundHistory
==
null
)
{
WechatPaymentHistory
wechatPaymentHistory
=
new
WechatPaymentHistory
();
wechatPaymentHistory
.
setPaymentId
(
wechatResponse
.
getRefundId
());
wechatPaymentHistory
.
setMemberId
(
order
.
getMemberId
());
wechatPaymentHistory
.
setOpenid
(
memberWechat
.
getOpenid
());
wechatPaymentHistory
.
setTitle
(
orderItem
.
getProductName
());
wechatPaymentHistory
.
setOrderId
(
order
.
getId
());
wechatPaymentHistory
.
setMoney
(
returnApply
.
getReturnAmount
().
multiply
(
new
BigDecimal
(
"100"
)));
wechatPaymentHistory
.
setOpType
(
3
);
wechatPaymentHistory
.
setPaymentStatus
(
0
);
wechatPaymentHistory
.
setResponseBody
(
JSON
.
toJSONString
(
wechatResponse
));
wechatPaymentHistory
.
setCreateTime
(
optDate
);
wechatPaymentHistory
.
setUpdateTime
(
optDate
);
wechatPaymentHistory
.
setCreateBy
(
userId
);
wechatPaymentHistory
.
setUpdateBy
(
userId
);
wechatPaymentHistoryMapper
.
insert
(
wechatPaymentHistory
);
/**
* 退回积分
*/
public
void
sendBack
(
Long
memberId
,
Long
orderId
,
Long
orderItemId
)
{
BigDecimal
integral
=
new
BigDecimal
(
"0.00"
);
if
(
orderItemId
!=
null
)
{
//只返回一部分积分
OrderItem
orderItem
=
orderItemMapper
.
selectById
(
orderItemId
);
if
(
null
==
orderItem
)
{
throw
new
ServiceException
(
"退款商品信息有误!"
);
}
else
{
UpdateWrapper
<
WechatPaymentHistory
>
updateWrapper
=
new
UpdateWrapper
<>();
updateWrapper
.
eq
(
"id"
,
refundHistory
.
getId
())
.
set
(
"payment_id"
,
wechatResponse
.
getRefundId
()).
set
(
"update_time"
,
optDate
);
wechatPaymentHistoryMapper
.
update
(
null
,
updateWrapper
);
if
(
orderItem
.
getUseIntegral
()
!=
null
&&
orderItem
.
getUseIntegral
().
compareTo
(
BigDecimal
.
ZERO
)
>
0
)
{
//记录积分流水
IntegralHistory
integralHistory
=
new
IntegralHistory
();
integralHistory
.
setMemberId
(
memberId
);
integralHistory
.
setAmount
(
orderItem
.
getUseIntegral
());
integralHistory
.
setOpType
(
Constants
.
OptType
.
AGREE
);
integralHistory
.
setSubOpType
(
25
);
integralHistory
.
setOrderAmount
(
orderItem
.
getCouponMoney
());
integralHistory
.
setOrderId
(
orderItem
.
getOrderId
());
integralHistoryMapper
.
insert
(
integralHistory
);
//修改用户积分
Member
member
=
memberMapper
.
selectById
(
memberId
);
if
(
null
==
member
)
{
throw
new
ServiceException
(
"会员信息有误!"
);
}
BigDecimal
add
=
member
.
getIntegral
().
add
(
orderItem
.
getUseIntegral
());
UpdateWrapper
<
Member
>
updateWrapper
=
new
UpdateWrapper
<>();
updateWrapper
.
eq
(
"id"
,
memberId
);
updateWrapper
.
set
(
"integral"
,
add
);
memberMapper
.
update
(
null
,
updateWrapper
);
}
}
}
if
(
orderId
!=
null
)
{
//全部退款
Order
order
=
orderMapper
.
selectById
(
orderId
);
if
(
order
==
null
)
{
throw
new
ServiceException
(
"订单信息有误!"
);
}
//记录积分流水
if
(
order
.
getTotalIntegral
()
!=
null
&&
order
.
getTotalIntegral
().
compareTo
(
BigDecimal
.
ZERO
)
>
0
)
{
IntegralHistory
integralHistory
=
new
IntegralHistory
();
integralHistory
.
setMemberId
(
memberId
);
integralHistory
.
setAmount
(
order
.
getTotalIntegral
());
integralHistory
.
setOpType
(
Constants
.
OptType
.
AGREE
);
integralHistory
.
setSubOpType
(
25
);
integral
=
order
.
getTotalIntegral
();
integralHistory
.
setCreateTime
(
LocalDateTime
.
now
());
integralHistory
.
setOrderAmount
(
order
.
getPayAmount
());
integralHistory
.
setOrderId
(
order
.
getId
());
integralHistoryMapper
.
insert
(
integralHistory
);
//修改用户积分
Member
member
=
memberMapper
.
selectById
(
memberId
);
if
(
null
==
member
)
{
throw
new
ServiceException
(
"会员信息有误!"
);
}
BigDecimal
add
=
member
.
getIntegral
().
add
(
integral
);
UpdateWrapper
<
Member
>
updateWrapper
=
new
UpdateWrapper
<>();
updateWrapper
.
eq
(
"id"
,
memberId
);
updateWrapper
.
set
(
"integral"
,
add
);
memberMapper
.
update
(
null
,
updateWrapper
);
}
}
}
...
...
@@ -393,64 +440,6 @@ public class AftersaleService {
if
(
"PROCESSING"
.
equals
(
weChatRefundNotify
.
getRefundStatus
().
name
()))
{
return
;
}
//查一下微信订单
QueryWrapper
<
WechatPaymentHistory
>
qw
=
new
QueryWrapper
<>();
qw
.
eq
(
"payment_id"
,
weChatRefundNotify
.
getRefundId
()).
eq
(
"op_type"
,
3
);
WechatPaymentHistory
history
=
wechatPaymentHistoryMapper
.
selectOne
(
qw
);
if
(
history
==
null
)
{
log
.
info
(
"未找到退款单"
);
throw
new
RuntimeException
();
}
LocalDateTime
optDate
=
LocalDateTime
.
now
();
QueryWrapper
<
Order
>
orderQw
=
new
QueryWrapper
<>();
orderQw
.
eq
(
"id"
,
history
.
getOrderId
());
Order
order
=
orderMapper
.
selectOne
(
orderQw
);
if
(
order
.
getStatus
()
==
OrderRefundStatus
.
SUCCESS
.
getType
())
{
log
.
info
(
"订单已经是退款成功状态"
);
throw
new
RuntimeException
();
}
QueryWrapper
<
Aftersale
>
aftersaleQw
=
new
QueryWrapper
<>();
aftersaleQw
.
eq
(
"order_id"
,
history
.
getOrderId
()).
eq
(
"status"
,
AftersaleStatus
.
WAIT
.
getType
());
if
(
"SUCCESS"
.
equals
(
weChatRefundNotify
.
getRefundStatus
().
name
()))
{
//更改订单表
UpdateWrapper
<
Order
>
orderUpdateWrapper
=
new
UpdateWrapper
<>();
orderUpdateWrapper
.
eq
(
"id"
,
history
.
getOrderId
())
.
set
(
"aftersale_status"
,
OrderRefundStatus
.
SUCCESS
.
getType
());
orderMapper
.
update
(
null
,
orderUpdateWrapper
);
//更改 售后表
UpdateWrapper
<
Aftersale
>
aftersaleWrapper
=
new
UpdateWrapper
<>();
aftersaleWrapper
.
eq
(
"order_id"
,
history
.
getOrderId
()).
set
(
"status"
,
AftersaleStatus
.
SUCCESS
.
getType
());
aftersaleMapper
.
update
(
null
,
aftersaleWrapper
);
//更改 微信表
UpdateWrapper
<
WechatPaymentHistory
>
paymentWrapper
=
new
UpdateWrapper
<>();
paymentWrapper
.
eq
(
"payment_id"
,
weChatRefundNotify
.
getRefundId
()).
eq
(
"op_type"
,
3
)
.
set
(
"payment_status"
,
1
);
wechatPaymentHistoryMapper
.
update
(
null
,
paymentWrapper
);
OrderOperateHistory
optHistory
=
new
OrderOperateHistory
();
optHistory
.
setOrderId
(
order
.
getId
());
optHistory
.
setOperateMan
(
"系统"
);
optHistory
.
setCreateTime
(
optDate
);
optHistory
.
setCreateBy
(
order
.
getMemberId
());
optHistory
.
setUpdateBy
(
order
.
getMemberId
());
optHistory
.
setUpdateTime
(
optDate
);
optHistory
.
setOrderStatus
(
13
);
operateHistoryMapper
.
insert
(
optHistory
);
// 回滚商品和sku销量
OrderItem
orderItem
=
orderItemMapper
.
selectOne
(
new
QueryWrapper
<
OrderItem
>().
eq
(
"order_id"
,
order
.
getId
()));
skuMapper
.
updateStockById
(
orderItem
.
getSkuId
(),
LocalDateTime
.
now
(),
-
1
*
orderItem
.
getQuantity
());
//退还优惠券
if
(
order
.
getMemberCouponId
()
!=
null
)
{
memberCouponService
.
backCoupon
(
Arrays
.
asList
(
order
.
getMemberCouponId
()));
}
}
else
{
//更改订单表
UpdateWrapper
<
Order
>
orderUpdateWrapper
=
new
UpdateWrapper
<>();
orderUpdateWrapper
.
eq
(
"id"
,
history
.
getOrderId
())
.
set
(
"aftersale_status"
,
OrderRefundStatus
.
FAIL
.
getType
());
orderMapper
.
update
(
null
,
orderUpdateWrapper
);
}
}
public
List
<
OrderOperateHistoryVO
>
log
(
Long
orderId
)
{
...
...
@@ -464,8 +453,8 @@ public class AftersaleService {
public
Aftersale
queryAfterSale
(
Long
orderId
)
{
QueryWrapper
<
Aftersale
>
itemQw
=
new
QueryWrapper
<>();
itemQw
.
eq
(
"order_id"
,
orderId
);
itemQw
.
in
(
"status"
,
Arrays
.
asList
(
AftersaleStatus
.
APPLY
.
getType
(),
AftersaleStatus
.
WAIT
.
getType
()));
itemQw
.
eq
(
"order_id"
,
orderId
);
itemQw
.
in
(
"status"
,
Arrays
.
asList
(
AftersaleStatus
.
APPLY
.
getType
(),
AftersaleStatus
.
WAIT
.
getType
()));
return
aftersaleMapper
.
selectOne
(
itemQw
);
}
}
ruoyi-mall/src/main/java/com/cyl/manager/oms/service/OrderItemService.java
View file @
58cc8f87
...
...
@@ -4,6 +4,7 @@ import java.math.BigDecimal;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.time.LocalDateTime
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.cyl.h5.domain.dto.OrderProductListDTO
;
...
...
@@ -22,7 +23,6 @@ import org.springframework.transaction.annotation.Transactional;
/**
* 订单中所包含的商品Service业务层处理
*
*
* @author zcc
*/
@Service
...
...
@@ -44,7 +44,7 @@ public class OrderItemService extends ServiceImpl<OrderItemMapper, OrderItem> {
* 查询订单中所包含的商品列表
*
* @param query 查询条件
* @param page 分页条件
* @param page
分页条件
* @return 订单中所包含的商品
*/
public
List
<
OrderItem
>
selectList
(
OrderItemQuery
query
,
Pageable
page
)
{
...
...
@@ -144,19 +144,23 @@ public class OrderItemService extends ServiceImpl<OrderItemMapper, OrderItem> {
@Transactional
public
void
saveOrderItem
(
Member
member
,
LocalDateTime
optTime
,
Long
orderId
,
List
<
OrderProductListDTO
>
list
){
Long
orderId
,
List
<
OrderProductListDTO
>
list
)
{
List
<
OrderItem
>
addOrderItemList
=
new
ArrayList
<>();
list
.
forEach
(
item
->
{
OrderItem
orderItem
=
new
OrderItem
();
orderItem
.
setId
(
IDGenerator
.
generateId
());
orderItem
.
setGiveIntegral
(
item
.
getGiveIntegral
());
orderItem
.
setOrderId
(
orderId
);
orderItem
.
setProductId
(
item
.
getProduct
().
getId
());
orderItem
.
setOutProductId
(
item
.
getProduct
().
getOutProductId
());
orderItem
.
setSkuId
(
item
.
getSku
().
getId
());
orderItem
.
setOutSkuId
(
item
.
getSku
().
getOutSkuId
());
orderItem
.
setPic
(
item
.
getSku
().
getPic
());
orderItem
.
setDeMoney
(
item
.
getDeMoney
());
orderItem
.
setProductName
(
item
.
getProduct
().
getName
());
orderItem
.
setSalePrice
(
item
.
getSku
().
getPrice
());
orderItem
.
setCouponMoney
(
item
.
getCouponMoney
());
orderItem
.
setUseIntegral
(
item
.
getUseIntegral
());
orderItem
.
setQuantity
(
item
.
getQuantity
());
orderItem
.
setProductCategoryId
(
item
.
getProduct
().
getCategoryId
());
orderItem
.
setSpData
(
item
.
getSku
().
getSpData
());
...
...
@@ -165,7 +169,7 @@ public class OrderItemService extends ServiceImpl<OrderItemMapper, OrderItem> {
addOrderItemList
.
add
(
orderItem
);
});
boolean
flag
=
saveBatch
(
addOrderItemList
);
if
(!
flag
){
if
(!
flag
)
{
throw
new
RuntimeException
(
"新增订单item失败"
);
}
}
...
...
ruoyi-mall/src/main/java/com/cyl/manager/oms/service/OrderService.java
View file @
58cc8f87
...
...
@@ -2,11 +2,15 @@ package com.cyl.manager.oms.service;
import
cn.hutool.core.collection.CollUtil
;
import
cn.hutool.core.collection.CollectionUtil
;
import
cn.hutool.core.util.RandomUtil
;
import
com.alibaba.fastjson.JSONObject
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.cyl.h5.domain.query.OrderH5Query
;
import
com.cyl.manager.act.domain.entity.IntegralHistory
;
import
com.cyl.manager.act.mapper.IntegralHistoryMapper
;
import
com.cyl.manager.oms.convert.OrderConvert
;
import
com.cyl.manager.oms.convert.OrderOperateHistoryConvert
;
import
com.cyl.manager.oms.domain.entity.Order
;
...
...
@@ -27,11 +31,16 @@ import com.cyl.manager.ums.domain.entity.Member;
import
com.cyl.manager.ums.mapper.MemberAddressMapper
;
import
com.cyl.manager.ums.mapper.MemberCartMapper
;
import
com.cyl.manager.ums.mapper.MemberMapper
;
import
com.cyl.wechat.WechatPayService
;
import
com.github.pagehelper.PageHelper
;
import
com.ruoyi.common.constant.Constants
;
import
com.ruoyi.common.enums.OrderStatus
;
import
com.ruoyi.common.exception.ServiceException
;
import
com.ruoyi.common.utils.AesCryptoUtils
;
import
com.ruoyi.common.utils.PhoneUtils
;
import
com.ruoyi.common.utils.SecurityUtils
;
import
com.wechat.pay.java.service.refund.model.Refund
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
...
...
@@ -41,17 +50,19 @@ import org.springframework.data.domain.Pageable;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
java.math.BigDecimal
;
import
java.time.LocalDateTime
;
import
java.util.*
;
import
java.util.concurrent.atomic.AtomicReference
;
import
java.util.stream.Collectors
;
/**
* 订单表Service业务层处理
*
*
* @author zcc
*/
@Service
@Slf4j
public
class
OrderService
{
@Autowired
private
OrderMapper
orderMapper
;
...
...
@@ -81,6 +92,10 @@ public class OrderService {
private
OrderDeliveryHistoryMapper
orderDeliveryHistoryMapper
;
@Autowired
private
OrderOperateHistoryConvert
historyConvert
;
@Autowired
(
required
=
false
)
private
WechatPayService
wechatPayService
;
@Autowired
private
IntegralHistoryMapper
integralHistoryMapper
;
/**
* 查询订单表
...
...
@@ -90,13 +105,14 @@ public class OrderService {
*/
public
ManagerOrderDetailVO
selectById
(
Long
id
)
{
Order
order
=
orderMapper
.
selectById
(
id
);
if
(
order
==
null
){
if
(
order
==
null
)
{
throw
new
RuntimeException
(
"查不到订单信息"
);
}
ManagerOrderDetailVO
managerOrderDetailVO
=
new
ManagerOrderDetailVO
();
//封装订单信息
managerOrderDetailVO
.
setOrderId
(
id
);
managerOrderDetailVO
.
setCouponAmount
(
order
.
getCouponAmount
());
managerOrderDetailVO
.
setDeMoney
(
order
.
getDeMoney
());
managerOrderDetailVO
.
setOrderSn
(
order
.
getOrderSn
());
managerOrderDetailVO
.
setOrderStatus
(
order
.
getStatus
());
managerOrderDetailVO
.
setCreateTime
(
order
.
getCreateTime
());
...
...
@@ -115,8 +131,8 @@ public class OrderService {
managerOrderAddressVo
.
setAddress
(
order
.
getReceiverDetailAddress
());
managerOrderAddressVo
.
setArea
(
order
.
getReceiverProvince
()
+
order
.
getReceiverCity
()
+
order
.
getReceiverDistrict
());
order
.
getReceiverCity
()
+
order
.
getReceiverDistrict
());
managerOrderAddressVo
.
setName
(
order
.
getReceiverName
());
managerOrderDetailVO
.
setAddressInfo
(
managerOrderAddressVo
);
//查询会员信息
...
...
@@ -130,8 +146,15 @@ public class OrderService {
List
<
ManagerOrderProductVO
>
productList
=
new
ArrayList
<>();
orderItemList
.
forEach
(
item
->
{
ManagerOrderProductVO
productVO
=
new
ManagerOrderProductVO
();
productVO
.
setId
(
item
.
getId
());
productVO
.
setProductId
(
item
.
getProductId
());
productVO
.
setCouponMoney
(
item
.
getCouponMoney
());
productVO
.
setBuyNum
(
item
.
getQuantity
());
productVO
.
setStatus
(
item
.
getStatus
());
productVO
.
setReason
(
item
.
getReason
());
productVO
.
setRefundOn
(
item
.
getRefundOn
());
productVO
.
setUseIntegral
(
item
.
getUseIntegral
());
productVO
.
setProofPics
(
item
.
getProofPics
());
productVO
.
setPic
(
item
.
getPic
());
productVO
.
setProductName
(
item
.
getProductName
());
productVO
.
setSalePrice
(
item
.
getSalePrice
());
...
...
@@ -146,22 +169,30 @@ public class OrderService {
* 查询订单表列表
*
* @param query 查询条件
* @param page 分页条件
* @param page
分页条件
* @return 订单表
*/
public
PageImpl
<
ManagerOrderVO
>
selectList
(
ManagerOrderQueryForm
query
,
Pageable
page
)
{
if
(
page
!=
null
)
{
PageHelper
.
startPage
(
page
.
getPageNumber
()
+
1
,
page
.
getPageSize
());
}
if
(!
StringUtils
.
isEmpty
(
query
.
getUserPhone
())){
if
(!
StringUtils
.
isEmpty
(
query
.
getUserPhone
()))
{
query
.
setUserPhone
(
AesCryptoUtils
.
encrypt
(
aesKey
,
query
.
getUserPhone
()));
}
List
<
ManagerOrderVO
>
managerOrderVOList
=
orderMapper
.
selectManagerOrderPage
(
query
);
if
(
CollectionUtil
.
isEmpty
(
managerOrderVOList
)){
if
(
CollectionUtil
.
isEmpty
(
managerOrderVOList
))
{
return
new
PageImpl
<>(
managerOrderVOList
,
page
,
0
);
}
managerOrderVOList
.
forEach
(
managerOrderVO
->
{
if
(
StringUtils
.
isNotEmpty
(
managerOrderVO
.
getReceiverPhoneEncrypted
())){
//解密手机号
String
phone
=
AesCryptoUtils
.
decrypt
(
aesKey
,
managerOrderVO
.
getReceiverPhoneEncrypted
());
managerOrderVO
.
setReceiverPhone
(
phone
);
managerOrderVO
.
setUserPhone
(
phone
);
}
});
long
total
=
((
com
.
github
.
pagehelper
.
Page
)
managerOrderVOList
).
getTotal
();
Map
<
Long
,
ManagerOrderVO
>
orderMap
=
managerOrderVOList
.
stream
().
collect
(
Collectors
.
toMap
(
ManagerOrderVO:
:
getId
,
it
->
it
,
(
v1
,
v2
)
->
v2
,
LinkedHashMap:
:
new
));
Map
<
Long
,
ManagerOrderVO
>
orderMap
=
managerOrderVOList
.
stream
().
collect
(
Collectors
.
toMap
(
ManagerOrderVO:
:
getId
,
it
->
it
,
(
v1
,
v2
)
->
v2
,
LinkedHashMap:
:
new
));
//查orderItem
QueryWrapper
<
OrderItem
>
qw
=
new
QueryWrapper
<>();
qw
.
in
(
"order_id"
,
orderMap
.
keySet
());
...
...
@@ -266,7 +297,7 @@ public class OrderService {
public
Integer
saveMerchantNote
(
Order
order
)
{
Order
orderInDb
=
orderMapper
.
selectById
(
order
.
getId
());
if
(
orderInDb
==
null
){
if
(
orderInDb
==
null
)
{
throw
new
RuntimeException
(
"订单不存在"
);
}
UpdateWrapper
<
Order
>
qw
=
new
UpdateWrapper
<>();
...
...
@@ -278,8 +309,9 @@ public class OrderService {
/**
* 管理后台发货
* 目前发货是这样的:待发货、已发货、已完成都能执行发货,每次都会创建一条新的发货记录且修改订单发货信息
*
* @param request 发货请求
* @param userId 操作人
* @param userId
操作人
* @return 结果
*/
@Transactional
...
...
@@ -289,40 +321,40 @@ public class OrderService {
QueryWrapper
<
OrderItem
>
qw
=
new
QueryWrapper
<>();
qw
.
eq
(
"order_id"
,
request
.
getOrderId
());
List
<
OrderItem
>
orderItemList
=
orderItemMapper
.
selectList
(
qw
);
if
(
order
==
null
||
CollectionUtil
.
isEmpty
(
orderItemList
)){
if
(
order
==
null
||
CollectionUtil
.
isEmpty
(
orderItemList
))
{
throw
new
RuntimeException
(
"未找到该订单信息"
);
}
// 是否为待发货、已发货 、已完成
if
(!(
Constants
.
OrderStatus
.
SEND
.
equals
(
order
.
getStatus
())
||
Constants
.
OrderStatus
.
GET
.
equals
(
order
.
getStatus
())
||
Constants
.
OrderStatus
.
CONFIRM
.
equals
(
order
.
getStatus
()))){
throw
new
RuntimeException
(
"订单状态错误"
);
}
Integer
orderStatus
=
Constants
.
OrderStatus
.
SEND
.
equals
(
order
.
getStatus
())
?
Constants
.
OrderStatus
.
GET
:
order
.
getStatus
();
//更新订单
LocalDateTime
optDate
=
LocalDateTime
.
now
();
order
.
setUpdateBy
(
null
);
order
.
setStatus
(
orderStatus
);
order
.
setStatus
(
OrderStatus
.
DELIVERED
.
getType
()
);
order
.
setDeliveryTime
(
optDate
);
order
.
setUpdateTime
(
optDate
);
order
.
setDeliveryCompany
(
request
.
getExpressName
());
order
.
setDeliverySn
(
request
.
getExpressSn
());
orderMapper
.
updateById
(
order
);
//更新子订单状态
for
(
OrderItem
orderItem
:
orderItemList
)
{
UpdateWrapper
<
OrderItem
>
updateWrapper
=
new
UpdateWrapper
<>();
updateWrapper
.
eq
(
"id"
,
orderItem
.
getId
());
updateWrapper
.
set
(
"status"
,
"6"
);
orderItemMapper
.
update
(
null
,
updateWrapper
);
}
//创建新的发货记录
this
.
createDeliveryHistory
(
request
,
userId
,
optDate
);
//创建订单操作记录
this
.
createOrderOptHistory
(
order
.
getId
(),
order
.
getOrderSn
(),
orderStatus
,
userId
,
optDate
);
this
.
createOrderOptHistory
(
order
.
getId
(),
order
.
getOrderSn
(),
OrderStatus
.
DELIVERED
.
getType
()
,
userId
,
optDate
);
return
"发货成功"
;
}
/**
* 创建发货记录
*
* @param request 发货请求
* @param userId 操作人
* @param userId
操作人
* @param optDate 操作时间
*/
private
void
createDeliveryHistory
(
DeliverProductForm
request
,
Long
userId
,
LocalDateTime
optDate
){
private
void
createDeliveryHistory
(
DeliverProductForm
request
,
Long
userId
,
LocalDateTime
optDate
)
{
OrderDeliveryHistory
orderDeliveryHistory
=
new
OrderDeliveryHistory
();
orderDeliveryHistory
.
setOrderId
(
request
.
getOrderId
());
orderDeliveryHistory
.
setDeliveryCompany
(
request
.
getExpressName
());
...
...
@@ -337,12 +369,13 @@ public class OrderService {
/**
* 创建订单操作历史
* @param orderId 订单id
*
* @param orderId 订单id
* @param orderStatus 订单状态
* @param userId 操作人
* @param optDate 操作时间
* @param userId
操作人
* @param optDate
操作时间
*/
private
void
createOrderOptHistory
(
Long
orderId
,
String
orderSn
,
Integer
orderStatus
,
Long
userId
,
LocalDateTime
optDate
){
private
void
createOrderOptHistory
(
Long
orderId
,
String
orderSn
,
Integer
orderStatus
,
Long
userId
,
LocalDateTime
optDate
)
{
OrderOperateHistory
optHistory
=
new
OrderOperateHistory
();
optHistory
.
setOrderId
(
orderId
);
optHistory
.
setOrderSn
(
orderSn
);
...
...
@@ -360,6 +393,7 @@ public class OrderService {
/**
* 根据订单id查询订单操作日志
*
* @param orderId 订单id
* @return 结果
*/
...
...
@@ -375,9 +409,9 @@ public class OrderService {
public
String
decryptPhone
(
Long
orderId
)
{
Order
order
=
orderMapper
.
selectById
(
orderId
);
String
receiverPhoneEncrypted
=
order
.
getReceiverPhoneEncrypted
();
if
(
receiverPhoneEncrypted
!=
null
)
{
return
AesCryptoUtils
.
decrypt
(
aesKey
,
receiverPhoneEncrypted
);
}
else
{
if
(
receiverPhoneEncrypted
!=
null
)
{
return
AesCryptoUtils
.
decrypt
(
aesKey
,
receiverPhoneEncrypted
);
}
else
{
return
null
;
}
}
...
...
@@ -388,16 +422,169 @@ public class OrderService {
return
false
;
}
UpdateWrapper
<
Order
>
updateWrapper
=
new
UpdateWrapper
<>();
updateWrapper
.
set
(
"receiver_name"
,
order
.
getReceiverName
())
.
set
(
"receiver_phone"
,
PhoneUtils
.
hidePhone
(
order
.
getReceiverPhone
()))
.
set
(
"receiver_city"
,
order
.
getReceiverCity
())
.
set
(
"receiver_district"
,
order
.
getReceiverDistrict
())
.
set
(
"receiver_province"
,
order
.
getReceiverProvince
())
.
set
(
"receiver_detail_address"
,
order
.
getReceiverDetailAddress
())
.
set
(
"receiver_phone_encrypted"
,
AesCryptoUtils
.
encrypt
(
aesKey
,
order
.
getReceiverPhone
()))
.
set
(
"update_time"
,
LocalDateTime
.
now
());
updateWrapper
.
eq
(
"id"
,
order
.
getId
());
updateWrapper
.
set
(
"receiver_name"
,
order
.
getReceiverName
())
.
set
(
"receiver_phone"
,
PhoneUtils
.
hidePhone
(
order
.
getReceiverPhone
()))
.
set
(
"receiver_city"
,
order
.
getReceiverCity
())
.
set
(
"receiver_district"
,
order
.
getReceiverDistrict
())
.
set
(
"receiver_province"
,
order
.
getReceiverProvince
())
.
set
(
"receiver_detail_address"
,
order
.
getReceiverDetailAddress
())
.
set
(
"receiver_phone_encrypted"
,
AesCryptoUtils
.
encrypt
(
aesKey
,
order
.
getReceiverPhone
()))
.
set
(
"update_time"
,
LocalDateTime
.
now
());
updateWrapper
.
eq
(
"id"
,
order
.
getId
());
int
update
=
orderMapper
.
update
(
null
,
updateWrapper
);
return
update
==
1
;
}
public
List
<
OrderItem
>
refundOrderDetail
(
Long
orderId
)
{
//查询需要售后的产品
QueryWrapper
<
OrderItem
>
orderItemQw
=
new
QueryWrapper
<>();
orderItemQw
.
eq
(
"order_id"
,
orderId
);
orderItemQw
.
eq
(
"status"
,
"0"
);
List
<
OrderItem
>
orderItemList
=
orderItemMapper
.
selectList
(
orderItemQw
);
return
orderItemList
;
}
public
String
refund
(
Long
id
,
Long
status
)
{
OrderItem
orderItem
=
orderItemMapper
.
selectById
(
id
);
if
(
null
==
orderItem
)
{
throw
new
ServiceException
(
"子订单不存在!"
);
}
Order
order
=
orderMapper
.
selectById
(
orderItem
.
getOrderId
());
if
(
null
==
order
)
{
throw
new
ServiceException
(
"订单不存在!"
);
}
//通过
if
(
status
==
0L
)
{
UpdateWrapper
<
OrderItem
>
updateWrapper
=
new
UpdateWrapper
<>();
updateWrapper
.
eq
(
"id"
,
orderItem
.
getId
());
updateWrapper
.
set
(
"status"
,
"2"
);
orderItemMapper
.
update
(
null
,
updateWrapper
);
return
"已通过"
;
}
else
{
UpdateWrapper
<
OrderItem
>
updateWrapper
=
new
UpdateWrapper
<>();
updateWrapper
.
eq
(
"id"
,
orderItem
.
getId
());
updateWrapper
.
set
(
"status"
,
"1"
);
orderItemMapper
.
update
(
null
,
updateWrapper
);
return
"已驳回"
;
}
}
@Transactional
public
String
tuikuan
(
Long
id
)
{
LocalDateTime
optDate
=
LocalDateTime
.
now
();
BigDecimal
money
=
new
BigDecimal
(
"0.00"
);
List
<
OrderItem
>
orderItem
=
orderItemMapper
.
selectList
(
new
LambdaQueryWrapper
<
OrderItem
>().
eq
(
OrderItem:
:
getId
,
id
));
if
(
CollectionUtil
.
isEmpty
(
orderItem
))
{
throw
new
ServiceException
(
"子订单不存在!"
);
}
Order
order
=
orderMapper
.
selectById
(
orderItem
.
get
(
0
).
getOrderId
());
if
(
null
==
order
)
{
throw
new
ServiceException
(
"订单不存在!"
);
}
if
(
orderItem
.
get
(
0
).
getCouponMoney
()
!=
null
&&
orderItem
.
get
(
0
).
getCouponMoney
().
compareTo
(
BigDecimal
.
ZERO
)
>
0
)
{
money
=
orderItem
.
get
(
0
).
getCouponMoney
();
if
(
orderItem
.
get
(
0
).
getCouponMoney
().
compareTo
(
BigDecimal
.
ZERO
)
==
0
)
{
orderItem
.
get
(
0
).
setStatus
(
"8"
);
orderItemMapper
.
updateById
(
orderItem
.
get
(
0
));
//库存回滚
orderItem
.
stream
().
collect
(
Collectors
.
groupingBy
(
it
->
it
.
getSkuId
())).
forEach
((
k
,
v
)
->
{
AtomicReference
<
Integer
>
totalCount
=
new
AtomicReference
<>(
0
);
v
.
forEach
(
it
->
totalCount
.
updateAndGet
(
v1
->
v1
+
it
.
getQuantity
()));
skuMapper
.
updateStockById
(
k
,
optDate
,
-
1
*
totalCount
.
get
());
});
//退还积分
Member
member
=
memberMapper
.
selectById
(
order
.
getMemberId
());
UpdateWrapper
<
Member
>
updateWrapper
=
new
UpdateWrapper
<>();
updateWrapper
.
eq
(
"id"
,
member
.
getId
());
BigDecimal
add
=
member
.
getIntegral
().
add
(
orderItem
.
get
(
0
).
getUseIntegral
());
updateWrapper
.
set
(
"integral"
,
add
);
memberMapper
.
update
(
null
,
updateWrapper
);
IntegralHistory
history
=
new
IntegralHistory
();
history
.
setOpType
(
1
);
history
.
setSubOpType
(
25
);
history
.
setAmount
(
orderItem
.
get
(
0
).
getUseIntegral
());
history
.
setOrderId
(
order
.
getId
());
history
.
setOrderAmount
(
order
.
getPayAmount
());
history
.
setMemberId
(
order
.
getMemberId
());
history
.
setCreateTime
(
LocalDateTime
.
now
());
integralHistoryMapper
.
insert
(
history
);
return
"退款成功"
;
}
}
else
{
money
=
orderItem
.
get
(
0
).
getSalePrice
();
}
try
{
BigDecimal
multiply
=
money
.
multiply
(
BigDecimal
.
valueOf
(
orderItem
.
get
(
0
).
getQuantity
()));
long
refundAmount
=
multiply
.
multiply
(
new
BigDecimal
(
"100"
)).
longValue
();
long
totalAmount
=
order
.
getPayAmount
().
multiply
(
new
BigDecimal
(
"100"
)).
longValue
();
log
.
info
(
"开始退款, 订单号: {}, 支付ID: {}, 退款金额: {}, 原支付金额: {}, 退款原因: {}"
,
order
.
getOrderSn
(),
order
.
getPayId
(),
refundAmount
,
totalAmount
,
orderItem
.
get
(
0
).
getReason
());
Refund
wechatResponse
=
wechatPayService
.
refundPay
(
order
.
getOrderSn
()
+
RandomUtil
.
randomNumbers
(
5
),
order
.
getPayId
()
+
""
,
"https://wenchuang.yyinhong.cn/api/no-auth/wechat/weChatRefundNotify"
,
refundAmount
,
totalAmount
,
orderItem
.
get
(
0
).
getReason
()
);
log
.
info
(
"发起微信退款返回信息, tradeRefund: {}"
,
JSONObject
.
toJSONString
(
wechatResponse
==
null
?
""
:
wechatResponse
));
}
catch
(
Exception
e
)
{
log
.
error
(
"退款过程中发生异常: "
,
e
);
}
orderItem
.
get
(
0
).
setStatus
(
"8"
);
orderItemMapper
.
updateById
(
orderItem
.
get
(
0
));
if
(
orderItem
.
get
(
0
).
getUseIntegral
()
!=
null
&&
orderItem
.
get
(
0
).
getUseIntegral
().
compareTo
(
BigDecimal
.
ZERO
)
>
0
){
//退还积分
Member
member
=
memberMapper
.
selectById
(
order
.
getMemberId
());
UpdateWrapper
<
Member
>
updateWrapper
=
new
UpdateWrapper
<>();
updateWrapper
.
eq
(
"id"
,
member
.
getId
());
BigDecimal
add
=
member
.
getIntegral
().
add
(
orderItem
.
get
(
0
).
getUseIntegral
());
updateWrapper
.
set
(
"integral"
,
add
);
memberMapper
.
update
(
null
,
updateWrapper
);
IntegralHistory
history
=
new
IntegralHistory
();
history
.
setOpType
(
1
);
history
.
setSubOpType
(
25
);
history
.
setAmount
(
orderItem
.
get
(
0
).
getUseIntegral
());
history
.
setOrderId
(
order
.
getId
());
history
.
setOrderAmount
(
order
.
getPayAmount
());
history
.
setMemberId
(
member
.
getId
());
history
.
setCreateTime
(
LocalDateTime
.
now
());
integralHistoryMapper
.
insert
(
history
);
}
//库存回滚
orderItem
.
stream
().
collect
(
Collectors
.
groupingBy
(
it
->
it
.
getSkuId
())).
forEach
((
k
,
v
)
->
{
AtomicReference
<
Integer
>
totalCount
=
new
AtomicReference
<>(
0
);
v
.
forEach
(
it
->
totalCount
.
updateAndGet
(
v1
->
v1
+
it
.
getQuantity
()));
skuMapper
.
updateStockById
(
k
,
optDate
,
-
1
*
totalCount
.
get
());
});
return
"退款成功"
;
}
public
String
bohui
(
Long
id
,
Long
type
)
{
OrderItem
orderItem
=
orderItemMapper
.
selectById
(
id
);
if
(
null
==
orderItem
)
{
throw
new
ServiceException
(
"子订单不存在!"
);
}
Order
order
=
orderMapper
.
selectById
(
orderItem
.
getOrderId
());
if
(
null
==
order
)
{
throw
new
ServiceException
(
"订单不存在!"
);
}
if
(
type
==
0L
)
{
orderItem
.
setStatus
(
"1"
);
}
else
{
orderItem
.
setStatus
(
"3"
);
}
int
row
=
orderItemMapper
.
updateById
(
orderItem
);
if
(
row
>
1
)
{
return
"驳回成功"
;
}
return
"驳回失败"
;
}
}
ruoyi-mall/src/main/java/com/cyl/manager/oth/controller/SlideshowInfoController.java
View file @
58cc8f87
...
...
@@ -74,8 +74,8 @@ public class SlideshowInfoController extends BaseController {
@ApiOperation
(
"删除轮播图信息"
)
@PreAuthorize
(
"@ss.hasPermi('oth:slideshowInfo:remove')"
)
@Log
(
title
=
"轮播图信息"
,
businessType
=
BusinessType
.
DELETE
)
@DeleteMapping
(
"/{id
s
}"
)
public
ResponseEntity
<
Integer
>
remove
(
@PathVariable
Long
[]
ids
)
{
return
ResponseEntity
.
ok
(
service
.
deleteByIds
(
id
s
));
@DeleteMapping
(
"/{id}"
)
public
ResponseEntity
<
Integer
>
remove
(
@PathVariable
Long
id
)
{
return
ResponseEntity
.
ok
(
service
.
deleteByIds
(
id
));
}
}
ruoyi-mall/src/main/java/com/cyl/manager/oth/domain/entity/AgreementInfo.java
View file @
58cc8f87
...
...
@@ -19,12 +19,18 @@ public class AgreementInfo extends BaseAudit {
@ApiModelProperty
(
"主键"
)
private
Long
id
;
@ApiModelProperty
(
"
协议内容
"
)
@Excel
(
name
=
"
协议内容
"
)
private
String
c
ontent
;
@ApiModelProperty
(
"
用户协议
"
)
@Excel
(
name
=
"
用户协议
"
)
private
String
userC
ontent
;
@ApiModelProperty
(
"
类型(0:用户协议,1:隐私协议,2:购买须知)
"
)
@Excel
(
name
=
"
类型"
,
readConverterExp
=
"0=:用户协议,1:隐私协议,2:购买须知
"
)
private
String
type
;
@ApiModelProperty
(
"
隐私协议
"
)
@Excel
(
name
=
"
隐私协议
"
)
private
String
privacyContent
;
@ApiModelProperty
(
"购买协议"
)
@Excel
(
name
=
"购买协议"
)
private
String
buyContent
;
@ApiModelProperty
(
"是否展示直播(0:否,1:是)"
)
private
String
isZb
;
}
ruoyi-mall/src/main/java/com/cyl/manager/oth/domain/entity/BlackImgInfo.java
View file @
58cc8f87
...
...
@@ -19,12 +19,16 @@ public class BlackImgInfo extends BaseAudit {
@ApiModelProperty
(
"主键"
)
private
Long
id
;
@ApiModelProperty
(
"背景图url"
)
@Excel
(
name
=
"背景图url"
)
private
String
i
mgUrl
;
@ApiModelProperty
(
"
首页
背景图url"
)
@Excel
(
name
=
"
首页
背景图url"
)
private
String
homeI
mgUrl
;
@ApiModelProperty
(
"类型(0:首页,1:产品分类,2:我的)"
)
@Excel
(
name
=
"类型"
,
readConverterExp
=
"0=:首页,1:产品分类,2:我的"
)
private
String
type
;
@ApiModelProperty
(
"产品分类背景图url"
)
@Excel
(
name
=
"产品分类背景图url"
)
private
String
typeImgUrl
;
@ApiModelProperty
(
"我的背景图url"
)
@Excel
(
name
=
"我的背景图url"
)
private
String
thisImgUrl
;
}
ruoyi-mall/src/main/java/com/cyl/manager/oth/domain/entity/ScenicSpotInfo.java
View file @
58cc8f87
...
...
@@ -45,7 +45,7 @@ public class ScenicSpotInfo extends BaseAudit {
@ApiModelProperty
(
"相关产品id"
)
@Excel
(
name
=
"相关产品id"
)
private
Long
productId
;
private
String
productIds
;
@ApiModelProperty
(
"备注"
)
@Excel
(
name
=
"备注"
)
...
...
ruoyi-mall/src/main/java/com/cyl/manager/oth/domain/query/AgreementInfoQuery.java
View file @
58cc8f87
...
...
@@ -14,6 +14,5 @@ import io.swagger.annotations.ApiModelProperty;
@Data
public
class
AgreementInfoQuery
{
@ApiModelProperty
(
"类型(0:用户协议,1:隐私协议,2:购买须知)"
)
private
String
type
;
}
ruoyi-mall/src/main/java/com/cyl/manager/oth/domain/query/BlackImgInfoQuery.java
View file @
58cc8f87
...
...
@@ -11,7 +11,6 @@ import io.swagger.annotations.ApiModelProperty;
@ApiModel
(
description
=
"背景图管理信息 查询 对象"
)
@Data
public
class
BlackImgInfoQuery
{
@ApiModelProperty
(
"类型(0:首页,1:产品分类,2:我的) 精确匹配"
)
private
String
type
;
}
ruoyi-mall/src/main/java/com/cyl/manager/oth/domain/query/ScenicSpotInfoQuery.java
View file @
58cc8f87
...
...
@@ -30,6 +30,6 @@ public class ScenicSpotInfoQuery {
private
String
introduce
;
@ApiModelProperty
(
"相关产品id 精确匹配"
)
private
Long
productId
;
private
Long
productId
s
;
}
ruoyi-mall/src/main/java/com/cyl/manager/oth/domain/vo/AgreementInfoVO.java
View file @
58cc8f87
...
...
@@ -3,20 +3,33 @@ package com.cyl.manager.oth.domain.vo;
import
com.ruoyi.common.annotation.Excel
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
com.ruoyi.common.core.domain.BaseAudit
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
/**
* 协议管理信息 数据视图对象
*
*
* @author zcc
*/
@Data
public
class
AgreementInfoVO
extends
BaseAudit
{
/** 主键 */
/**
* 主键
*/
private
Long
id
;
/** 协议内容 */
@Excel
(
name
=
"协议内容"
)
private
String
content
;
/** 类型(0:用户协议,1:隐私协议,2:购买须知) */
@Excel
(
name
=
"类型"
,
readConverterExp
=
"0=:用户协议,1:隐私协议,2:购买须知"
)
private
String
type
;
@ApiModelProperty
(
"用户协议"
)
@Excel
(
name
=
"用户协议"
)
private
String
userContent
;
@ApiModelProperty
(
"隐私协议"
)
@Excel
(
name
=
"隐私协议"
)
private
String
privacyContent
;
@ApiModelProperty
(
"购买协议"
)
@Excel
(
name
=
"购买协议"
)
private
String
buyContent
;
@ApiModelProperty
(
"是否展示直播(0:否,1:是)"
)
private
String
isZb
;
}
ruoyi-mall/src/main/java/com/cyl/manager/oth/domain/vo/BlackImgInfoVO.java
View file @
58cc8f87
...
...
@@ -3,6 +3,7 @@ package com.cyl.manager.oth.domain.vo;
import
com.ruoyi.common.annotation.Excel
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
com.ruoyi.common.core.domain.BaseAudit
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
/**
* 背景图管理信息 数据视图对象
...
...
@@ -13,10 +14,15 @@ import lombok.Data;
public
class
BlackImgInfoVO
extends
BaseAudit
{
/** 主键 */
private
Long
id
;
/** 背景图url */
@Excel
(
name
=
"背景图url"
)
private
String
imgUrl
;
/** 类型(0:首页,1:产品分类,2:我的) */
@Excel
(
name
=
"类型"
,
readConverterExp
=
"0=:首页,1:产品分类,2:我的"
)
private
String
type
;
@ApiModelProperty
(
"首页背景图url"
)
@Excel
(
name
=
"首页背景图url"
)
private
String
homeImgUrl
;
@ApiModelProperty
(
"产品分类背景图url"
)
@Excel
(
name
=
"产品分类背景图url"
)
private
String
typeImgUrl
;
@ApiModelProperty
(
"我的背景图url"
)
@Excel
(
name
=
"我的背景图url"
)
private
String
thisImgUrl
;
}
ruoyi-mall/src/main/java/com/cyl/manager/oth/domain/vo/ScenicSpotInfoVO.java
View file @
58cc8f87
...
...
@@ -34,7 +34,7 @@ public class ScenicSpotInfoVO extends BaseAudit {
private
String
introduce
;
/** 相关产品id */
@Excel
(
name
=
"相关产品id"
)
private
Long
productId
;
private
String
productIds
;
/** 备注 */
@Excel
(
name
=
"备注"
)
private
String
remark
;
...
...
ruoyi-mall/src/main/java/com/cyl/manager/oth/service/AgreementInfoService.java
View file @
58cc8f87
...
...
@@ -47,7 +47,6 @@ public class AgreementInfoService {
PageHelper
.
startPage
(
page
.
getPageNumber
()
+
1
,
page
.
getPageSize
());
}
LambdaQueryWrapper
<
AgreementInfo
>
qw
=
new
LambdaQueryWrapper
<>();
qw
.
eq
(
AgreementInfo:
:
getType
,
query
.
getType
());
return
agreementInfoMapper
.
selectList
(
qw
);
}
...
...
ruoyi-mall/src/main/java/com/cyl/manager/oth/service/BlackImgInfoService.java
View file @
58cc8f87
...
...
@@ -46,10 +46,6 @@ public class BlackImgInfoService {
PageHelper
.
startPage
(
page
.
getPageNumber
()
+
1
,
page
.
getPageSize
());
}
QueryWrapper
<
BlackImgInfo
>
qw
=
new
QueryWrapper
<>();
String
type
=
query
.
getType
();
if
(!
StringUtils
.
isEmpty
(
type
))
{
qw
.
eq
(
"type"
,
type
);
}
return
blackImgInfoMapper
.
selectList
(
qw
);
}
...
...
ruoyi-mall/src/main/java/com/cyl/manager/oth/service/ScenicSpotInfoService.java
View file @
58cc8f87
...
...
@@ -2,6 +2,8 @@ package com.cyl.manager.oth.service;
import
java.util.Arrays
;
import
java.util.List
;
import
java.time.LocalDateTime
;
import
cn.hutool.core.collection.CollectionUtil
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.cyl.manager.oth.domain.entity.ScenicSpotInfo
;
import
com.cyl.manager.oth.domain.query.ScenicSpotInfoQuery
;
...
...
@@ -69,10 +71,6 @@ public class ScenicSpotInfoService {
if
(!
StringUtils
.
isEmpty
(
introduce
))
{
qw
.
eq
(
"introduce"
,
introduce
);
}
Long
productId
=
query
.
getProductId
();
if
(
productId
!=
null
)
{
qw
.
eq
(
"product_id"
,
productId
);
}
return
scenicSpotInfoMapper
.
selectList
(
qw
);
}
...
...
ruoyi-mall/src/main/java/com/cyl/manager/oth/service/SlideshowInfoService.java
View file @
58cc8f87
...
...
@@ -51,6 +51,7 @@ public class SlideshowInfoService {
if
(!
StringUtils
.
isEmpty
(
nameLike
))
{
qw
.
like
(
"name"
,
nameLike
);
}
qw
.
orderByAsc
(
"order_num"
);
return
slideshowInfoMapper
.
selectList
(
qw
);
}
...
...
@@ -81,8 +82,8 @@ public class SlideshowInfoService {
* @param ids 需要删除的轮播图信息主键
* @return 结果
*/
public
int
deleteByIds
(
Long
[]
ids
)
{
return
slideshowInfoMapper
.
updateDelFlagByIds
(
ids
);
public
int
deleteByIds
(
Long
id
)
{
return
slideshowInfoMapper
.
deleteById
(
id
);
}
/**
...
...
ruoyi-mall/src/main/java/com/cyl/manager/pms/domain/entity/Product.java
View file @
58cc8f87
...
...
@@ -85,4 +85,15 @@ public class Product extends BaseAudit {
@Excel
(
name
=
"商品分类名称"
)
private
String
productCategoryName
;
/**
* 虚拟销量
*/
@ApiModelProperty
(
"虚拟销量"
)
@Excel
(
name
=
"虚拟销量"
)
private
Long
virtualSales
;
private
BigDecimal
startPrice
;
private
BigDecimal
endPrice
;
}
ruoyi-mall/src/main/java/com/cyl/manager/pms/domain/vo/ProductVO.java
View file @
58cc8f87
...
...
@@ -63,5 +63,15 @@ public class ProductVO extends BaseAudit {
private
String
productCategoryName
;
@Excel
(
name
=
"商品销售属性,json格式"
)
private
String
productAttr
;
private
BigDecimal
startPrice
;
private
BigDecimal
endPrice
;
/**
* 虚拟销量
*/
private
Long
virtualSales
;
private
List
<
Sku
>
skuList
;
}
ruoyi-mall/src/main/java/com/cyl/manager/pms/service/ProductService.java
View file @
58cc8f87
...
...
@@ -4,8 +4,10 @@ import java.util.*;
import
java.time.LocalDateTime
;
import
java.util.stream.Collectors
;
import
cn.hutool.core.bean.BeanUtil
;
import
cn.hutool.core.collection.CollectionUtil
;
import
cn.hutool.json.JSONUtil
;
import
com.alibaba.fastjson2.util.BeanUtils
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.cyl.h5.domain.vo.ProductDetailVO
;
...
...
@@ -29,7 +31,6 @@ import org.springframework.transaction.annotation.Transactional;
/**
* 商品信息Service业务层处理
*
*
* @author zcc
*/
@Service
...
...
@@ -53,7 +54,7 @@ public class ProductService {
*/
public
ProductVO
selectById
(
Long
id
)
{
Product
product
=
productMapper
.
selectById
(
id
);
ProductVO
productVO
=
convert
.
do2vo
(
product
);
ProductVO
productVO
=
BeanUtil
.
toBean
(
product
,
ProductVO
.
class
);
QueryWrapper
<
Sku
>
qw
=
new
QueryWrapper
<>();
qw
.
eq
(
"product_id"
,
product
.
getId
());
List
<
Sku
>
skus
=
skuMapper
.
selectList
(
qw
);
...
...
@@ -65,7 +66,7 @@ public class ProductService {
* 查询商品信息列表
*
* @param query 查询条件
* @param page 分页条件
* @param page
分页条件
* @return 商品信息
*/
public
List
<
Product
>
selectList
(
ProductQuery
query
,
Pageable
page
)
{
...
...
@@ -73,13 +74,13 @@ public class ProductService {
PageHelper
.
startPage
(
page
.
getPageNumber
()
+
1
,
page
.
getPageSize
());
}
QueryWrapper
<
Product
>
qw
=
new
QueryWrapper
<>();
if
(
StringUtils
.
isNoneEmpty
(
query
.
getOrderField
())){
if
(
StringUtils
.
isNoneEmpty
(
query
.
getOrderField
()))
{
if
(
StringUtils
.
isNotEmpty
(
query
.
getOrderSort
())
&&
"desc"
.
equalsIgnoreCase
(
query
.
getOrderSort
()))
{
qw
.
orderByDesc
(
query
.
getOrderField
());
}
else
{
qw
.
orderByAsc
(
query
.
getOrderField
());
}
}
else
{
}
else
{
qw
.
orderByDesc
(
"publish_status"
);
qw
.
orderByAsc
(
"sort"
);
}
...
...
@@ -87,19 +88,21 @@ public class ProductService {
if
(
categoryId
!=
null
)
{
qw
.
eq
(
"category_id"
,
categoryId
);
}
Integer
publishStatus
=
query
.
getPublishStatus
();
if
(
publishStatus
!=
null
)
{
qw
.
eq
(
"publish_status"
,
publishStatus
);
}
String
search
=
query
.
getSearch
();
if
(
StringUtils
.
isNoneEmpty
(
search
)){
qw
.
like
(
"name"
,
"%"
.
concat
(
query
.
getSearch
().
trim
()).
concat
(
"%"
));
if
(
StringUtils
.
isNotEmpty
(
query
.
getProductCategoryNameLike
()))
{
qw
.
eq
(
"product_category_name"
,
query
.
getProductCategoryNameLike
());
}
if
(
CollectionUtil
.
isNotEmpty
(
query
.
getExcludeProductIds
()))
{
qw
.
notIn
(
"id"
,
query
.
getExcludeProductIds
());
String
search
=
query
.
getNameLike
();
if
(
StringUtils
.
isNoneEmpty
(
search
))
{
qw
.
like
(
"name"
,
"%"
.
concat
(
search
.
trim
()).
concat
(
"%"
));
}
if
(
CollectionUtil
.
isNotEmpty
(
query
.
getIds
()))
{
qw
.
in
(
"id"
,
query
.
getIds
());
qw
.
in
(
"id"
,
query
.
getIds
());
}
if
(
null
!=
query
.
getPublishStatus
())
{
qw
.
in
(
"publish_status"
,
query
.
getPublishStatus
());
}
if
(
CollectionUtil
.
isNotEmpty
(
query
.
getExcludeProductIds
()))
{
qw
.
in
(
"id"
,
query
.
getExcludeProductIds
());
}
return
productMapper
.
selectList
(
qw
);
}
...
...
@@ -113,11 +116,11 @@ public class ProductService {
@Transactional
public
int
insert
(
ProductVO
productVO
)
{
Product
product
=
convert
.
vo2do
(
productVO
);
Product
product
=
BeanUtil
.
toBean
(
productVO
,
Product
.
class
);
product
.
setCreateTime
(
LocalDateTime
.
now
());
List
<
Sku
>
skuList
=
productVO
.
getSkuList
();
productMapper
.
insert
(
product
);
if
(
skuList
!=
null
)
{
if
(
skuList
!=
null
)
{
skuList
.
forEach
(
sku
->
{
sku
.
setProductId
(
product
.
getId
());
sku
.
setCreateTime
(
LocalDateTime
.
now
());
...
...
@@ -141,20 +144,20 @@ public class ProductService {
return
0
;
}
Long
userId
=
SecurityUtils
.
getUserId
();
Product
product
=
convert
.
vo2do
(
productVO
);
Product
product
=
BeanUtil
.
toBean
(
productVO
,
Product
.
class
);
List
<
Sku
>
skuList
=
productVO
.
getSkuList
();
product
.
setUpdateBy
(
userId
);
product
.
setUpdateTime
(
LocalDateTime
.
now
());
productMapper
.
updateById
(
product
);
//查找库中所有的sku
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
"product_id"
,
product
.
getId
());
Map
<
Long
,
Sku
>
skuMap
=
skuMapper
.
selectByMap
(
map
).
stream
().
collect
(
Collectors
.
toMap
(
it
->
it
.
getId
(),
it
->
it
));
//针对已有的进行编辑
List
<
Sku
>
updateList
=
productVO
.
getSkuList
().
stream
().
filter
(
it
->
it
.
getId
()
!=
null
).
collect
(
Collectors
.
toList
());
if
(!
CollectionUtil
.
isEmpty
(
updateList
))
{
log
.
info
(
"共有{}个sku需要修改,{},productId:{}"
,
updateList
.
size
(),
JSONUtil
.
toJsonStr
(
updateList
),
productVO
.
getId
());
updateList
.
forEach
(
it
->
{
log
.
info
(
"共有{}个sku需要修改,{},productId:{}"
,
updateList
.
size
(),
JSONUtil
.
toJsonStr
(
updateList
),
productVO
.
getId
());
updateList
.
forEach
(
it
->
{
Sku
sku
=
skuMap
.
get
(
it
.
getId
());
sku
.
setUpdateBy
(
SecurityUtils
.
getUserId
());
sku
.
setUpdateTime
(
LocalDateTime
.
now
());
...
...
@@ -169,7 +172,7 @@ public class ProductService {
//针对没有的进行新增
List
<
Sku
>
addList
=
productVO
.
getSkuList
().
stream
().
filter
(
it
->
it
.
getId
()
==
null
).
collect
(
Collectors
.
toList
());
if
(!
CollectionUtil
.
isEmpty
(
addList
))
{
log
.
info
(
"共有{}个sku需要新增,{},productId:{}"
,
addList
.
size
(),
JSONUtil
.
toJsonStr
(
addList
),
productVO
.
getId
());
log
.
info
(
"共有{}个sku需要新增,{},productId:{}"
,
addList
.
size
(),
JSONUtil
.
toJsonStr
(
addList
),
productVO
.
getId
());
addList
.
forEach
(
sku
->
{
sku
.
setProductId
(
product
.
getId
());
sku
.
setCreateTime
(
LocalDateTime
.
now
());
...
...
@@ -179,7 +182,7 @@ public class ProductService {
//删除
List
<
Long
>
deleteIds
=
skuMap
.
keySet
().
stream
().
filter
(
it
->
!
idList
.
contains
(
it
)).
collect
(
Collectors
.
toList
());
if
(!
CollectionUtil
.
isEmpty
(
deleteIds
))
{
log
.
info
(
"共有{}个sku需要删除,{},productId:{}"
,
deleteIds
.
size
(),
JSONUtil
.
toJsonStr
(
deleteIds
),
productVO
.
getId
());
log
.
info
(
"共有{}个sku需要删除,{},productId:{}"
,
deleteIds
.
size
(),
JSONUtil
.
toJsonStr
(
deleteIds
),
productVO
.
getId
());
skuMapper
.
deleteBatchIds
(
deleteIds
);
}
return
1
;
...
...
ruoyi-mall/src/main/java/com/cyl/manager/ums/controller/MemberController.java
View file @
58cc8f87
package
com
.
cyl
.
manager
.
ums
.
controller
;
import
com.cyl.manager.ums.convert.MemberConvert
;
import
com.cyl.manager.ums.domain.dto.MemberDTO
;
import
com.cyl.manager.ums.domain.form.ChangeMemberStatusForm
;
import
com.cyl.manager.ums.domain.entity.Member
;
import
com.cyl.manager.ums.domain.query.MemberQuery
;
...
...
@@ -24,13 +25,14 @@ import org.springframework.security.access.prepost.PreAuthorize;
import
org.springframework.web.bind.annotation.*
;
import
java.util.List
;
/**
* 会员信息Controller
*
*
* @author zcc
* @date 2022-11-28
*/
@Api
(
description
=
"会员信息接口列表"
)
@Api
(
description
=
"会员信息接口列表"
)
@RestController
public
class
MemberController
extends
BaseController
{
@Autowired
...
...
@@ -40,7 +42,7 @@ public class MemberController extends BaseController {
@Autowired
private
WechatAuthService
wechatAuthService
;
@RequestMapping
(
path
=
{
"/ums/member/wechat/code"
,
"/h5/member/wechat/code"
,
"/no-auth/wechat/code"
},
method
=
RequestMethod
.
GET
)
@RequestMapping
(
path
=
{
"/ums/member/wechat/code"
,
"/h5/member/wechat/code"
,
"/no-auth/wechat/code"
},
method
=
RequestMethod
.
GET
)
public
AjaxResult
getWechatCode
(
@RequestParam
(
required
=
false
)
String
scene
)
{
return
AjaxResult
.
successData
(
wechatAuthService
.
getQRCode
(
scene
));
}
...
...
@@ -50,7 +52,7 @@ public class MemberController extends BaseController {
@PostMapping
(
"/ums/member/list"
)
public
ResponseEntity
<
Page
<
Member
>>
list
(
@RequestBody
MemberQuery
query
,
Pageable
page
)
{
List
<
Member
>
list
=
service
.
selectList
(
query
,
page
);
return
ResponseEntity
.
ok
(
new
PageImpl
<>(
list
,
page
,
((
com
.
github
.
pagehelper
.
Page
)
list
).
getTotal
()));
return
ResponseEntity
.
ok
(
new
PageImpl
<>(
list
,
page
,
((
com
.
github
.
pagehelper
.
Page
)
list
).
getTotal
()));
}
@ApiOperation
(
"导出会员信息列表"
)
...
...
@@ -70,6 +72,12 @@ public class MemberController extends BaseController {
return
ResponseEntity
.
ok
(
service
.
selectById
(
id
));
}
@ApiOperation
(
"会员积分增加减少"
)
@PostMapping
(
value
=
"/ums/member/integralAddOrSub"
)
public
ResponseEntity
<
Integer
>
integralAddOrSub
(
@RequestBody
MemberDTO
member
)
{
return
ResponseEntity
.
ok
(
service
.
integralAddOrSub
(
member
));
}
@ApiOperation
(
"新增会员信息"
)
@PreAuthorize
(
"@ss.hasPermi('ums:member:add')"
)
@Log
(
title
=
"会员信息"
,
businessType
=
BusinessType
.
INSERT
)
...
...
@@ -97,7 +105,7 @@ public class MemberController extends BaseController {
@ApiOperation
(
"删除会员信息"
)
@PreAuthorize
(
"@ss.hasPermi('ums:member:remove')"
)
@Log
(
title
=
"会员信息"
,
businessType
=
BusinessType
.
DELETE
)
@DeleteMapping
(
"/ums/member/{id}"
)
@DeleteMapping
(
"/ums/member/{id}"
)
public
ResponseEntity
<
Integer
>
remove
(
@PathVariable
Long
id
)
{
return
ResponseEntity
.
ok
(
service
.
deleteById
(
id
));
}
...
...
@@ -105,19 +113,19 @@ public class MemberController extends BaseController {
@ApiOperation
((
"修改会员账户状态"
))
@Log
(
title
=
"会员信息"
,
businessType
=
BusinessType
.
UPDATE
)
@PostMapping
(
"/ums/member/status/change"
)
public
ResponseEntity
<
Integer
>
changeStatus
(
@RequestBody
ChangeMemberStatusForm
form
){
public
ResponseEntity
<
Integer
>
changeStatus
(
@RequestBody
ChangeMemberStatusForm
form
)
{
return
ResponseEntity
.
ok
(
service
.
changeStatus
(
form
));
}
@ApiOperation
(
"会员手机号解密"
)
@GetMapping
(
"/ums/member/phone/decrypt/{phoneEncrypted}"
)
public
ResponseEntity
<
String
>
getPhoneDecrypted
(
@PathVariable
String
phoneEncrypted
){
public
ResponseEntity
<
String
>
getPhoneDecrypted
(
@PathVariable
String
phoneEncrypted
)
{
return
ResponseEntity
.
ok
(
service
.
getPhoneDecrypted
(
phoneEncrypted
));
}
@ApiOperation
(
"查看会员统计数据"
)
@GetMapping
(
"/ums/member/view/statistics/{memberId}"
)
public
ResponseEntity
<
MemberDataStatisticsVO
>
viewStatistics
(
@PathVariable
Long
memberId
){
public
ResponseEntity
<
MemberDataStatisticsVO
>
viewStatistics
(
@PathVariable
Long
memberId
)
{
return
ResponseEntity
.
ok
(
service
.
viewStatistics
(
memberId
));
}
}
ruoyi-mall/src/main/java/com/cyl/manager/ums/domain/dto/MemberDTO.java
0 → 100644
View file @
58cc8f87
package
com
.
cyl
.
manager
.
ums
.
domain
.
dto
;
import
lombok.Data
;
import
java.math.BigDecimal
;
@Data
public
class
MemberDTO
{
private
String
type
;
private
Long
memberId
;
private
BigDecimal
integral
;
}
ruoyi-mall/src/main/java/com/cyl/manager/ums/domain/entity/Member.java
View file @
58cc8f87
...
...
@@ -85,6 +85,9 @@ public class Member extends BaseAudit {
@Excel
(
name
=
"等级"
)
private
Integer
level
;
@ApiModelProperty
(
"用户身份(0:普通用户,1:核销人员)"
)
private
String
userType
;
@ApiModelProperty
(
"用户剩余积分"
)
@Excel
(
name
=
"用户剩余积分"
)
private
BigDecimal
integral
;
...
...
ruoyi-mall/src/main/java/com/cyl/manager/ums/domain/query/MemberQuery.java
View file @
58cc8f87
...
...
@@ -66,4 +66,6 @@ public class MemberQuery {
private
String
beginTime
;
private
String
endTime
;
private
String
userType
;
}
ruoyi-mall/src/main/java/com/cyl/manager/ums/domain/vo/MemberVO.java
View file @
58cc8f87
...
...
@@ -6,6 +6,7 @@ import java.time.LocalDateTime;
import
com.ruoyi.common.annotation.Excel
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
com.ruoyi.common.core.domain.BaseAudit
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
/**
* 会员信息 数据视图对象
...
...
@@ -61,6 +62,9 @@ public class MemberVO extends BaseAudit {
/** 等级 */
@Excel
(
name
=
"等级"
)
private
Integer
level
;
@ApiModelProperty
(
"用户身份(0:普通用户,1:核销人员)"
)
private
String
userType
;
/** 用户剩余积分 */
@Excel
(
name
=
"用户剩余积分"
)
private
BigDecimal
integral
;
...
...
ruoyi-mall/src/main/java/com/cyl/manager/ums/service/MemberService.java
View file @
58cc8f87
...
...
@@ -3,8 +3,11 @@ package com.cyl.manager.ums.service;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper
;
import
com.cyl.manager.act.domain.entity.IntegralHistory
;
import
com.cyl.manager.act.mapper.IntegralHistoryMapper
;
import
com.cyl.manager.oms.mapper.AftersaleMapper
;
import
com.cyl.manager.oms.mapper.OrderMapper
;
import
com.cyl.manager.ums.domain.dto.MemberDTO
;
import
com.cyl.manager.ums.domain.entity.Member
;
import
com.cyl.manager.ums.domain.entity.MemberCart
;
import
com.cyl.manager.ums.mapper.MemberCartMapper
;
...
...
@@ -21,13 +24,14 @@ import org.springframework.beans.factory.annotation.Value;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.stereotype.Service
;
import
java.math.BigDecimal
;
import
java.time.LocalDateTime
;
import
java.util.Date
;
import
java.util.List
;
/**
* 会员信息Service业务层处理
*
*
* @author zcc
*/
@Service
...
...
@@ -46,6 +50,9 @@ public class MemberService {
@Autowired
private
AftersaleMapper
aftersaleMapper
;
@Autowired
private
IntegralHistoryMapper
integralHistoryMapper
;
/**
* 查询会员信息
*
...
...
@@ -57,42 +64,79 @@ public class MemberService {
}
/**
* 会员积分增加减少
*/
public
int
integralAddOrSub
(
MemberDTO
dto
)
{
Member
member
=
memberMapper
.
selectById
(
dto
.
getMemberId
());
if
(
null
!=
member
)
{
IntegralHistory
integralHistory
=
new
IntegralHistory
();
BigDecimal
jf
=
new
BigDecimal
(
"0.0"
);
if
(
dto
.
getType
().
equals
(
"0"
))
{
//平台扣减
integralHistory
.
setMemberId
(
dto
.
getMemberId
());
integralHistory
.
setAmount
(
dto
.
getIntegral
());
integralHistory
.
setOpType
(
2
);
integralHistory
.
setSubOpType
(
23
);
jf
=
member
.
getIntegral
().
subtract
(
dto
.
getIntegral
());
}
else
if
(
dto
.
getType
().
equals
(
"1"
))
{
//平台赠送
integralHistory
.
setMemberId
(
dto
.
getMemberId
());
integralHistory
.
setAmount
(
dto
.
getIntegral
());
integralHistory
.
setOpType
(
1
);
integralHistory
.
setSubOpType
(
24
);
jf
=
member
.
getIntegral
().
add
(
dto
.
getIntegral
());
}
UpdateWrapper
<
Member
>
updateWrapper
=
new
UpdateWrapper
<>();
updateWrapper
.
eq
(
"id"
,
dto
.
getMemberId
());
updateWrapper
.
set
(
"integral"
,
jf
);
memberMapper
.
update
(
null
,
updateWrapper
);
integralHistory
.
setCreateTime
(
LocalDateTime
.
now
());
return
integralHistoryMapper
.
insert
(
integralHistory
);
}
return
0
;
}
/**
* 查询会员信息列表
*
* @param query 查询条件
* @param page 分页条件
* @param page
分页条件
* @return 会员信息
*/
public
List
<
Member
>
selectList
(
MemberQuery
query
,
Pageable
page
)
{
if
(
page
!=
null
)
{
PageHelper
.
startPage
(
page
.
getPageNumber
()
+
1
,
page
.
getPageSize
(),
SortUtil
.
sort2string
(
page
.
getSort
(),
"id desc"
));
PageHelper
.
startPage
(
page
.
getPageNumber
()
+
1
,
page
.
getPageSize
(),
SortUtil
.
sort2string
(
page
.
getSort
(),
"id desc"
));
}
QueryWrapper
<
Member
>
qw
=
new
QueryWrapper
<>();
String
nicknameLike
=
query
.
getNickname
();
if
(!
StringUtils
.
isEmpty
(
nicknameLike
))
{
qw
.
like
(
"nickname"
,
nicknameLike
);
}
if
(!
StringUtils
.
isEmpty
(
query
.
getUserType
()))
{
qw
.
like
(
"user_type"
,
query
.
getUserType
());
}
String
phone
=
query
.
getPhone
();
if
(!
StringUtils
.
isEmpty
(
phone
))
{
qw
.
eq
(
"phone_encrypted"
,
AesCryptoUtils
.
encrypt
(
aesKey
,
phone
));
}
if
(!
StringUtils
.
isEmpty
(
query
.
getBeginTime
())
&&
!
StringUtils
.
isEmpty
(
query
.
getEndTime
())){
if
(!
StringUtils
.
isEmpty
(
query
.
getBeginTime
())
&&
!
StringUtils
.
isEmpty
(
query
.
getEndTime
()))
{
qw
.
ge
(
"create_time"
,
query
.
getBeginTime
());
qw
.
lt
(
"create_time"
,
query
.
getEndTime
());
}
if
(
query
.
getHasMark
()
!=
null
)
{
switch
(
query
.
getHasMark
())
{
case
0
:
qw
.
isNull
(
"mark"
).
or
().
eq
(
"mark"
,
""
);
qw
.
isNull
(
"mark"
).
or
().
eq
(
"mark"
,
""
);
break
;
case
1
:
qw
.
isNotNull
(
"mark"
).
ne
(
"mark"
,
""
);
qw
.
isNotNull
(
"mark"
).
ne
(
"mark"
,
""
);
break
;
default
:
break
;
}
}
if
(
query
.
getStatus
()
!=
null
){
if
(
query
.
getStatus
()
!=
null
)
{
qw
.
eq
(
"status"
,
query
.
getStatus
());
}
return
memberMapper
.
selectList
(
qw
);
...
...
@@ -121,10 +165,10 @@ public class MemberService {
public
int
updateMark
(
Member
member
)
{
UpdateWrapper
<
Member
>
updateWrapper
=
new
UpdateWrapper
<>();
updateWrapper
.
set
(
"mark"
,
member
.
getMark
())
.
set
(
"update_time"
,
LocalDateTime
.
now
())
.
eq
(
"id"
,
member
.
getId
());
return
memberMapper
.
update
(
null
,
updateWrapper
);
updateWrapper
.
set
(
"mark"
,
member
.
getMark
())
.
set
(
"update_time"
,
LocalDateTime
.
now
())
.
eq
(
"id"
,
member
.
getId
());
return
memberMapper
.
update
(
null
,
updateWrapper
);
}
/**
...
...
ruoyi-mall/src/main/java/com/cyl/wechat/WechatController.java
View file @
58cc8f87
...
...
@@ -41,8 +41,8 @@ public class WechatController {
}
@ApiOperation
(
"获取微信用户授权信息"
)
@
Pos
tMapping
(
"/getWechatUserAuth"
)
public
ResponseEntity
<
WechatUserAuth
>
getWechatUserAuth
(
@Request
Body
String
data
){
@
Ge
tMapping
(
"/getWechatUserAuth"
)
public
ResponseEntity
<
WechatUserAuth
>
getWechatUserAuth
(
@Request
Param
(
"data"
)
String
data
){
return
ResponseEntity
.
ok
(
service
.
getWechatUserAuth
(
data
));
}
}
ruoyi-mall/src/main/java/com/cyl/wechat/WechatPayConfig.java
View file @
58cc8f87
...
...
@@ -2,9 +2,12 @@ package com.cyl.wechat;
import
com.wechat.pay.java.core.Config
;
import
com.wechat.pay.java.core.RSAAutoCertificateConfig
;
import
org.springframework.core.io.ClassPathResource
;
import
org.springframework.core.io.support.PathMatchingResourcePatternResolver
;
import
org.springframework.core.io.support.ResourcePatternResolver
;
import
java.io.IOException
;
public
class
WechatPayConfig
{
private
static
Config
wechatPayConfig
;
...
...
@@ -17,7 +20,34 @@ public class WechatPayConfig {
if
(
wechatPayConfig
==
null
)
{
wechatPayConfig
=
new
RSAAutoCertificateConfig
.
Builder
()
.
merchantId
(
WechatPayData
.
merchantId
)
.
privateKeyFromPath
(
WechatPayData
.
privateKeyPath
)
.
privateKey
(
"-----BEGIN PRIVATE KEY-----\n"
+
"MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDfPg4xpRa2Yz4q\n"
+
"bKDPfC1FlrD+7unTL3qyoDajRBf+RR+RoOwZZuXIKkD07UJEURFug1Fk7kFECgKc\n"
+
"oXB7QL/FyPDOj2VhM7qhZh0F9OTT2Cdfq2Dn4frfKl8q+FhKNvDhw0q6+X24Dkoz\n"
+
"gyK4/I8KQgYGJF5MSypSwfiNdZE3ton+boVUgBBkMpnnvjTu6ToVoyljFozUrXHE\n"
+
"5LGV7OuNHZ33lWiQqL9JAKSQPKlfRMdA4oH+I/v+O4xWRcchwPufS00aKLL/0FTc\n"
+
"IX1lk4TkCWkONpRmhdEx2vgC4pOhi+ojN5FsRxXEdTX3BPHRYHvDwm+O11BiekLE\n"
+
"9O/qTxOxAgMBAAECggEATk/ojsXI9+ZMknlU2DRJdVXtdSC+adUIB81oHVHv0MTS\n"
+
"1DVNXYPZK6SW8NSiIHEH2mq6jNt/jaytSeDgInyOSYW549wtxjFtUN0PZV2JQD9d\n"
+
"YJQwBGgjp1Gn3N0Nq8smKSxm9Lw8u+pXYUapUZdXXlPW5SSw57aefDWLSaRqcs4w\n"
+
"TmruBaTTXGXyqjijQ2CRmxMaxH8kksetretHUyvgUGPntMXcROoIN22DbCkKiOdh\n"
+
"F5IEDKdfCB/P+4nI0pmbaCm8mbRb7jykptJg3/sHu0cKLD4JNHNwOzk2hUmIIPk0\n"
+
"tw+VNgJBP4xnhOZlEe+mdGBGqQD1ZqXHCWYg0bkoIQKBgQDzM8aq3xvDiDXBX7+O\n"
+
"rVEOTA05w/B4AvPxXSOqxCGlPjBPoxHGcDCwNYoNQvZU2NYKbOWOhZZm0vUw1uqm\n"
+
"beXrfnWlYXycUl3aKI6k8YHrMTMvwgtLJXVIguvCW2Pup1gWX+uAuybaJl5ynnpf\n"
+
"vjawxUxwDZYjh76V8jJOdzEtVQKBgQDq/WWBJbLFPYSjyuzthZaZ5aOAI8VZMNEr\n"
+
"iWTm2zN7+jUVOIwVorQtQjZPCZyTh3U9m60BBrZixsIogVGAuplR/B63YkB1hWut\n"
+
"SKnauJLzcgsOQa1lmWHnJcxtA2eZ1iGuH2eiFB/c0GEznpVId40Gs3fEpt+xR45h\n"
+
"W4h1Iges7QKBgAkcPGn0N58IgDMBOjTHC01Ezg4G6AAm5Cp7ebWQ6U2+WaLyEd1k\n"
+
"IH7JUqWSh5XAFayITcUb/flWF7c/pcScQ0uiDhgm4bsdXsSoVkeZgGtmCWvVkgS7\n"
+
"n3wa42gBcmnjPOqBp1nIKPltDIawpxblEjlm+qkL6T7le980FmxYDLCNAoGBAJv8\n"
+
"+ZRxYepsm8/etMg3FXGzboVxOV+reC5eVgypFdQGk5Yyo0r5ZoFkooh06OtF0B3F\n"
+
"aWJ1Aj0vk1MwBNpfA8fYhMtW/VMF7iRpR9dZDrNr0Mr17hSzbLnz7W+wAuWrr0/W\n"
+
"qQR+N2htKxkI/C/OrF72Y1q3K2aTCYC3Mi4PGOlBAoGBAJGIuDGQVaWY7XlKNYqk\n"
+
"g+0l3CoPO1GokGU17YVzrM4UrvNqPy6R/+KHtX/XYd0kh+4xHKEIydC2TZXHvdvo\n"
+
"AuP1zrEmnV0FZy8quw+89KX5uj0SO81yGHReDawlG2AAMZc6SmYrEFumlFKBOeVn\n"
+
"Hf8trwRlMLiv+10a4bwZtNon\n"
+
"-----END PRIVATE KEY-----\n"
)
.
merchantSerialNumber
(
WechatPayData
.
merchantSerialNumber
)
.
apiV3Key
(
WechatPayData
.
apiV3key
)
.
build
();
...
...
ruoyi-mall/src/main/java/com/cyl/wechat/WechatPayUtil.java
View file @
58cc8f87
...
...
@@ -29,7 +29,7 @@ public class WechatPayUtil {
public
static
String
getSign
(
String
signatureStr
,
String
privateKey
)
throws
InvalidKeyException
,
NoSuchAlgorithmException
,
SignatureException
,
IOException
,
URISyntaxException
{
//replace 根据实际情况,不一定都需要
String
replace
=
privateKey
.
replace
(
"\\n"
,
"\n"
);
InputStream
certStream
=
Files
.
newInputStream
(
Paths
.
get
(
privateKey
));
InputStream
certStream
=
Files
.
newInputStream
(
Paths
.
get
(
replace
));
PrivateKey
merchantPrivateKey
=
PemUtil
.
readPemPrivateKey
(
certStream
);
Signature
sign
=
Signature
.
getInstance
(
"SHA256withRSA"
);
sign
.
initSign
(
merchantPrivateKey
);
...
...
ruoyi-mall/src/main/resources/mapper/act/IntegralHistoryMapper.xml
View file @
58cc8f87
...
...
@@ -34,8 +34,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
select sum(case when op_type = 1 then amount else 0 end) as income,
sum(case when op_type = 2 then amount else 0 end) as expenditure
from act_integral_history
where member_id = #{param3}
and create_time >= #{param1}
and create_time
<![CDATA[ <= ]]>
#{param2}
where member_id = #{param1}
</select>
</mapper>
ruoyi-mall/src/main/resources/mapper/oms/OrderMapper.xml
View file @
58cc8f87
...
...
@@ -95,6 +95,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
select
a.id,
a.order_sn orderSn,
a.de_money deMoney,
a.aftersale_status aftersaleStatus,
a.status,
a.member_username userName,
...
...
@@ -114,6 +115,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
a.receiver_district receiverDistrict,
a.receiver_detail_address receiverDetailAddress,
a.delivery_time deliveryTime,
a.receiver_phone_encrypted receiverPhoneEncrypted,
a.delivery_sn deliverySn,
-- b.quantity buyNum,
-- b.pic,
...
...
@@ -183,15 +185,26 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
delete_status=0
and member_id=#{memberId}
<if
test=
"status==-1"
>
and status in (1,2,3,4)
and status in (1,2,3,4
,5,6,7,8,9
)
</if>
<if
test=
"status>-1 and status<3"
>
and status=#{status}
and aftersale_status=1
<if
test=
"status==6"
>
and status in (5,6,9,8,5,6,7,8,9)
</if>
<if
test=
"status==-2"
>
and aftersale_status in (2, 3)
</if>
<if
test=
"status==0"
>
and status in (0)
</if>
<if
test=
"status==1"
>
and status in (1)
</if>
<if
test=
"status==2"
>
and status in (2)
</if>
<if
test=
"status==3"
>
and status in (3)
</if>
order by create_time desc
</select>
<select
id=
"selectOrderDetail"
resultType=
"com.cyl.h5.domain.vo.H5OrderVO"
>
...
...
@@ -214,7 +227,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
receiver_province,
receiver_city,
receiver_district,
receiver_detail_address
receiver_detail_address,
de_money,
delivery_company,
give_integral
from oms_order
where
delete_status=0
...
...
ruoyi-mall/src/main/resources/mapper/oth/AgreementInfoMapper.xml
View file @
58cc8f87
...
...
@@ -6,8 +6,9 @@
<resultMap
type=
"AgreementInfo"
id=
"AgreementInfoResult"
>
<result
property=
"id"
column=
"id"
/>
<result
property=
"content"
column=
"content"
/>
<result
property=
"type"
column=
"type"
/>
<result
property=
"userContent"
column=
"user_content"
/>
<result
property=
"privacyContent"
column=
"privacy_content"
/>
<result
property=
"buyContent"
column=
"buy_content"
/>
<result
property=
"createBy"
column=
"create_by"
/>
<result
property=
"createTime"
column=
"create_time"
/>
<result
property=
"updateBy"
column=
"update_by"
/>
...
...
@@ -19,7 +20,7 @@
</resultMap>
<sql
id=
"selectAgreementInfoVo"
>
select id,
content, type
, create_by, create_time, update_by, update_time
select id,
user_content, privacy_content,buy_content
, create_by, create_time, update_by, update_time
from agreement_info
</sql>
...
...
ruoyi-mall/src/main/resources/mapper/oth/BlackImgInfoMapper.xml
View file @
58cc8f87
...
...
@@ -6,8 +6,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<resultMap
type=
"BlackImgInfo"
id=
"BlackImgInfoResult"
>
<result
property=
"id"
column=
"id"
/>
<result
property=
"imgUrl"
column=
"img_url"
/>
<result
property=
"type"
column=
"type"
/>
<result
property=
"homeImgUrl"
column=
"home_img_url"
/>
<result
property=
"typeImgUrl"
column=
"type_img_url"
/>
<result
property=
"thisImgUrl"
column=
"this_img_url"
/>
<result
property=
"createBy"
column=
"create_by"
/>
<result
property=
"createTime"
column=
"create_time"
/>
<result
property=
"updateBy"
column=
"update_by"
/>
...
...
@@ -19,7 +20,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap>
<sql
id=
"selectBlackImgInfoVo"
>
select id,
img_url, type,
create_by, create_time, update_by, update_time from black_img_info
select id,
home_img_url, type_img_url, this_img_url,
create_by, create_time, update_by, update_time from black_img_info
</sql>
<select
id=
"selectByEntity"
parameterType=
"BlackImgInfo"
resultMap=
"BlackImgInfoResult"
>
...
...
ruoyi-mall/src/main/resources/mapper/pms/ProductMapper.xml
View file @
58cc8f87
...
...
@@ -21,6 +21,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result
property=
"detailMobileHtml"
column=
"detail_mobile_html"
/>
<result
property=
"brandName"
column=
"brand_name"
/>
<result
property=
"productCategoryName"
column=
"product_category_name"
/>
<result
property=
"virtualSales"
column=
"virtual_sales"
/>
<result
property=
"createBy"
column=
"create_by"
/>
<result
property=
"createTime"
column=
"create_time"
/>
<result
property=
"updateBy"
column=
"update_by"
/>
...
...
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserRoleMapper.java
View file @
58cc8f87
...
...
@@ -64,4 +64,7 @@ public interface SysUserRoleMapper
@Select
(
"SELECT count(0) FROM sys_user_role WHERE user_id = #{userId} AND role_id = #{roleId}"
)
int
countRoleAndUserId
(
@Param
(
"roleId"
)
Long
roleId
,
@Param
(
"userId"
)
Long
userId
);
@Select
(
"SELECT * FROM sys_user_role WHERE user_id = #{userId}"
)
SysUserRole
selectByUserId
(
@Param
(
"userId"
)
Long
userId
);
}
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
View file @
58cc8f87
...
...
@@ -2,6 +2,7 @@ package com.ruoyi.system.service.impl;
import
java.util.ArrayList
;
import
java.util.List
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -28,12 +29,11 @@ import com.ruoyi.system.service.ISysUserService;
/**
* 用户 业务层处理
*
*
* @author ruoyi
*/
@Service
public
class
SysUserServiceImpl
implements
ISysUserService
{
public
class
SysUserServiceImpl
implements
ISysUserService
{
private
static
final
Logger
log
=
LoggerFactory
.
getLogger
(
SysUserServiceImpl
.
class
);
@Autowired
...
...
@@ -56,84 +56,83 @@ public class SysUserServiceImpl implements ISysUserService
/**
* 根据条件分页查询用户列表
*
*
* @param user 用户信息
* @return 用户信息集合信息
*/
@Override
@DataScope
(
deptAlias
=
"d"
,
userAlias
=
"u"
)
public
List
<
SysUser
>
selectUserList
(
SysUser
user
)
{
return
userMapper
.
selectUserList
(
user
);
public
List
<
SysUser
>
selectUserList
(
SysUser
user
)
{
List
<
SysUser
>
sysUsers
=
userMapper
.
selectUserList
(
user
);
for
(
SysUser
sysUser
:
sysUsers
)
{
SysUserRole
sysUserRole
=
userRoleMapper
.
selectByUserId
(
sysUser
.
getUserId
());
if
(
null
!=
sysUserRole
)
{
sysUser
.
setRoleId
(
sysUserRole
.
getRoleId
());
}
}
return
sysUsers
;
}
/**
* 根据条件分页查询已分配用户角色列表
*
*
* @param user 用户信息
* @return 用户信息集合信息
*/
@Override
@DataScope
(
deptAlias
=
"d"
,
userAlias
=
"u"
)
public
List
<
SysUser
>
selectAllocatedList
(
SysUser
user
)
{
public
List
<
SysUser
>
selectAllocatedList
(
SysUser
user
)
{
return
userMapper
.
selectAllocatedList
(
user
);
}
/**
* 根据条件分页查询未分配用户角色列表
*
*
* @param user 用户信息
* @return 用户信息集合信息
*/
@Override
@DataScope
(
deptAlias
=
"d"
,
userAlias
=
"u"
)
public
List
<
SysUser
>
selectUnallocatedList
(
SysUser
user
)
{
public
List
<
SysUser
>
selectUnallocatedList
(
SysUser
user
)
{
return
userMapper
.
selectUnallocatedList
(
user
);
}
/**
* 通过用户名查询用户
*
*
* @param userName 用户名
* @return 用户对象信息
*/
@Override
public
SysUser
selectUserByUserName
(
String
userName
)
{
public
SysUser
selectUserByUserName
(
String
userName
)
{
return
userMapper
.
selectUserByUserName
(
userName
);
}
/**
* 通过用户ID查询用户
*
*
* @param userId 用户ID
* @return 用户对象信息
*/
@Override
public
SysUser
selectUserById
(
Long
userId
)
{
public
SysUser
selectUserById
(
Long
userId
)
{
return
userMapper
.
selectUserById
(
userId
);
}
/**
* 查询用户所属角色组
*
*
* @param userName 用户名
* @return 结果
*/
@Override
public
String
selectUserRoleGroup
(
String
userName
)
{
public
String
selectUserRoleGroup
(
String
userName
)
{
List
<
SysRole
>
list
=
roleMapper
.
selectRolesByUserName
(
userName
);
StringBuffer
idsStr
=
new
StringBuffer
();
for
(
SysRole
role
:
list
)
{
for
(
SysRole
role
:
list
)
{
idsStr
.
append
(
role
.
getRoleName
()).
append
(
","
);
}
if
(
StringUtils
.
isNotEmpty
(
idsStr
.
toString
()))
{
if
(
StringUtils
.
isNotEmpty
(
idsStr
.
toString
()))
{
return
idsStr
.
substring
(
0
,
idsStr
.
length
()
-
1
);
}
return
idsStr
.
toString
();
...
...
@@ -141,21 +140,18 @@ public class SysUserServiceImpl implements ISysUserService
/**
* 查询用户所属岗位组
*
*
* @param userName 用户名
* @return 结果
*/
@Override
public
String
selectUserPostGroup
(
String
userName
)
{
public
String
selectUserPostGroup
(
String
userName
)
{
List
<
SysPost
>
list
=
postMapper
.
selectPostsByUserName
(
userName
);
StringBuffer
idsStr
=
new
StringBuffer
();
for
(
SysPost
post
:
list
)
{
for
(
SysPost
post
:
list
)
{
idsStr
.
append
(
post
.
getPostName
()).
append
(
","
);
}
if
(
StringUtils
.
isNotEmpty
(
idsStr
.
toString
()))
{
if
(
StringUtils
.
isNotEmpty
(
idsStr
.
toString
()))
{
return
idsStr
.
substring
(
0
,
idsStr
.
length
()
-
1
);
}
return
idsStr
.
toString
();
...
...
@@ -163,16 +159,14 @@ public class SysUserServiceImpl implements ISysUserService
/**
* 校验用户名称是否唯一
*
*
* @param userName 用户名称
* @return 结果
*/
@Override
public
String
checkUserNameUnique
(
String
userName
)
{
public
String
checkUserNameUnique
(
String
userName
)
{
int
count
=
userMapper
.
checkUserNameUnique
(
userName
);
if
(
count
>
0
)
{
if
(
count
>
0
)
{
return
UserConstants
.
NOT_UNIQUE
;
}
return
UserConstants
.
UNIQUE
;
...
...
@@ -185,12 +179,10 @@ public class SysUserServiceImpl implements ISysUserService
* @return
*/
@Override
public
String
checkPhoneUnique
(
SysUser
user
)
{
public
String
checkPhoneUnique
(
SysUser
user
)
{
Long
userId
=
StringUtils
.
isNull
(
user
.
getUserId
())
?
-
1L
:
user
.
getUserId
();
SysUser
info
=
userMapper
.
checkPhoneUnique
(
user
.
getPhonenumber
());
if
(
StringUtils
.
isNotNull
(
info
)
&&
info
.
getUserId
().
longValue
()
!=
userId
.
longValue
())
{
if
(
StringUtils
.
isNotNull
(
info
)
&&
info
.
getUserId
().
longValue
()
!=
userId
.
longValue
())
{
return
UserConstants
.
NOT_UNIQUE
;
}
return
UserConstants
.
UNIQUE
;
...
...
@@ -203,12 +195,10 @@ public class SysUserServiceImpl implements ISysUserService
* @return
*/
@Override
public
String
checkEmailUnique
(
SysUser
user
)
{
public
String
checkEmailUnique
(
SysUser
user
)
{
Long
userId
=
StringUtils
.
isNull
(
user
.
getUserId
())
?
-
1L
:
user
.
getUserId
();
SysUser
info
=
userMapper
.
checkEmailUnique
(
user
.
getEmail
());
if
(
StringUtils
.
isNotNull
(
info
)
&&
info
.
getUserId
().
longValue
()
!=
userId
.
longValue
())
{
if
(
StringUtils
.
isNotNull
(
info
)
&&
info
.
getUserId
().
longValue
()
!=
userId
.
longValue
())
{
return
UserConstants
.
NOT_UNIQUE
;
}
return
UserConstants
.
UNIQUE
;
...
...
@@ -216,33 +206,28 @@ public class SysUserServiceImpl implements ISysUserService
/**
* 校验用户是否允许操作
*
*
* @param user 用户信息
*/
@Override
public
void
checkUserAllowed
(
SysUser
user
)
{
if
(
StringUtils
.
isNotNull
(
user
.
getUserId
())
&&
user
.
isAdmin
())
{
public
void
checkUserAllowed
(
SysUser
user
)
{
if
(
StringUtils
.
isNotNull
(
user
.
getUserId
())
&&
user
.
isAdmin
())
{
throw
new
ServiceException
(
"不允许操作超级管理员用户"
);
}
}
/**
* 校验用户是否有数据权限
*
*
* @param userId 用户id
*/
@Override
public
void
checkUserDataScope
(
Long
userId
)
{
if
(!
SysUser
.
isAdmin
(
SecurityUtils
.
getUserId
()))
{
public
void
checkUserDataScope
(
Long
userId
)
{
if
(!
SysUser
.
isAdmin
(
SecurityUtils
.
getUserId
()))
{
SysUser
user
=
new
SysUser
();
user
.
setUserId
(
userId
);
List
<
SysUser
>
users
=
SpringUtils
.
getAopProxy
(
this
).
selectUserList
(
user
);
if
(
StringUtils
.
isEmpty
(
users
))
{
if
(
StringUtils
.
isEmpty
(
users
))
{
throw
new
ServiceException
(
"没有权限访问用户数据!"
);
}
}
...
...
@@ -250,14 +235,13 @@ public class SysUserServiceImpl implements ISysUserService
/**
* 新增保存用户信息
*
*
* @param user 用户信息
* @return 结果
*/
@Override
@Transactional
public
int
insertUser
(
SysUser
user
)
{
public
int
insertUser
(
SysUser
user
)
{
// 新增用户信息
int
rows
=
userMapper
.
insertUser
(
user
);
// 新增用户岗位关联
...
...
@@ -269,26 +253,24 @@ public class SysUserServiceImpl implements ISysUserService
/**
* 注册用户信息
*
*
* @param user 用户信息
* @return 结果
*/
@Override
public
boolean
registerUser
(
SysUser
user
)
{
public
boolean
registerUser
(
SysUser
user
)
{
return
userMapper
.
insertUser
(
user
)
>
0
;
}
/**
* 修改保存用户信息
*
*
* @param user 用户信息
* @return 结果
*/
@Override
@Transactional
public
int
updateUser
(
SysUser
user
)
{
public
int
updateUser
(
SysUser
user
)
{
Long
userId
=
user
.
getUserId
();
// 删除用户与角色关联
userRoleMapper
.
deleteUserRoleByUserId
(
userId
);
...
...
@@ -303,101 +285,91 @@ public class SysUserServiceImpl implements ISysUserService
/**
* 用户授权角色
*
* @param userId 用户ID
*
* @param userId
用户ID
* @param roleIds 角色组
*/
@Override
@Transactional
public
void
insertUserAuth
(
Long
userId
,
Long
[]
roleIds
)
{
public
void
insertUserAuth
(
Long
userId
,
Long
[]
roleIds
)
{
userRoleMapper
.
deleteUserRoleByUserId
(
userId
);
insertUserRole
(
userId
,
roleIds
);
}
/**
* 修改用户状态
*
*
* @param user 用户信息
* @return 结果
*/
@Override
public
int
updateUserStatus
(
SysUser
user
)
{
public
int
updateUserStatus
(
SysUser
user
)
{
return
userMapper
.
updateUser
(
user
);
}
/**
* 修改用户基本信息
*
*
* @param user 用户信息
* @return 结果
*/
@Override
public
int
updateUserProfile
(
SysUser
user
)
{
public
int
updateUserProfile
(
SysUser
user
)
{
return
userMapper
.
updateUser
(
user
);
}
/**
* 修改用户头像
*
*
* @param userName 用户名
* @param avatar 头像地址
* @param avatar
头像地址
* @return 结果
*/
@Override
public
boolean
updateUserAvatar
(
String
userName
,
String
avatar
)
{
public
boolean
updateUserAvatar
(
String
userName
,
String
avatar
)
{
return
userMapper
.
updateUserAvatar
(
userName
,
avatar
)
>
0
;
}
/**
* 重置用户密码
*
*
* @param user 用户信息
* @return 结果
*/
@Override
public
int
resetPwd
(
SysUser
user
)
{
public
int
resetPwd
(
SysUser
user
)
{
return
userMapper
.
updateUser
(
user
);
}
/**
* 重置用户密码
*
*
* @param userName 用户名
* @param password 密码
* @return 结果
*/
@Override
public
int
resetUserPwd
(
String
userName
,
String
password
)
{
public
int
resetUserPwd
(
String
userName
,
String
password
)
{
return
userMapper
.
resetUserPwd
(
userName
,
password
);
}
/**
* 新增用户角色信息
*
*
* @param user 用户对象
*/
public
void
insertUserRole
(
SysUser
user
)
{
public
void
insertUserRole
(
SysUser
user
)
{
Long
[]
roles
=
user
.
getRoleIds
();
if
(
StringUtils
.
isNotNull
(
roles
))
{
if
(
StringUtils
.
isNotNull
(
roles
))
{
// 新增用户与角色管理
List
<
SysUserRole
>
list
=
new
ArrayList
<
SysUserRole
>();
for
(
Long
roleId
:
roles
)
{
for
(
Long
roleId
:
roles
)
{
SysUserRole
ur
=
new
SysUserRole
();
ur
.
setUserId
(
user
.
getUserId
());
ur
.
setRoleId
(
roleId
);
list
.
add
(
ur
);
}
if
(
list
.
size
()
>
0
)
{
if
(
list
.
size
()
>
0
)
{
userRoleMapper
.
batchUserRole
(
list
);
}
}
...
...
@@ -405,25 +377,21 @@ public class SysUserServiceImpl implements ISysUserService
/**
* 新增用户岗位信息
*
*
* @param user 用户对象
*/
public
void
insertUserPost
(
SysUser
user
)
{
public
void
insertUserPost
(
SysUser
user
)
{
Long
[]
posts
=
user
.
getPostIds
();
if
(
StringUtils
.
isNotNull
(
posts
))
{
if
(
StringUtils
.
isNotNull
(
posts
))
{
// 新增用户与岗位管理
List
<
SysUserPost
>
list
=
new
ArrayList
<
SysUserPost
>();
for
(
Long
postId
:
posts
)
{
for
(
Long
postId
:
posts
)
{
SysUserPost
up
=
new
SysUserPost
();
up
.
setUserId
(
user
.
getUserId
());
up
.
setPostId
(
postId
);
list
.
add
(
up
);
}
if
(
list
.
size
()
>
0
)
{
if
(
list
.
size
()
>
0
)
{
userPostMapper
.
batchUserPost
(
list
);
}
}
...
...
@@ -431,25 +399,21 @@ public class SysUserServiceImpl implements ISysUserService
/**
* 新增用户角色信息
*
* @param userId 用户ID
*
* @param userId
用户ID
* @param roleIds 角色组
*/
public
void
insertUserRole
(
Long
userId
,
Long
[]
roleIds
)
{
if
(
StringUtils
.
isNotNull
(
roleIds
))
{
public
void
insertUserRole
(
Long
userId
,
Long
[]
roleIds
)
{
if
(
StringUtils
.
isNotNull
(
roleIds
))
{
// 新增用户与角色管理
List
<
SysUserRole
>
list
=
new
ArrayList
<
SysUserRole
>();
for
(
Long
roleId
:
roleIds
)
{
for
(
Long
roleId
:
roleIds
)
{
SysUserRole
ur
=
new
SysUserRole
();
ur
.
setUserId
(
userId
);
ur
.
setRoleId
(
roleId
);
list
.
add
(
ur
);
}
if
(
list
.
size
()
>
0
)
{
if
(
list
.
size
()
>
0
)
{
userRoleMapper
.
batchUserRole
(
list
);
}
}
...
...
@@ -457,14 +421,13 @@ public class SysUserServiceImpl implements ISysUserService
/**
* 通过用户ID删除用户
*
*
* @param userId 用户ID
* @return 结果
*/
@Override
@Transactional
public
int
deleteUserById
(
Long
userId
)
{
public
int
deleteUserById
(
Long
userId
)
{
// 删除用户与角色关联
userRoleMapper
.
deleteUserRoleByUserId
(
userId
);
// 删除用户与岗位表
...
...
@@ -474,16 +437,14 @@ public class SysUserServiceImpl implements ISysUserService
/**
* 批量删除用户信息
*
*
* @param userIds 需要删除的用户ID
* @return 结果
*/
@Override
@Transactional
public
int
deleteUserByIds
(
Long
[]
userIds
)
{
for
(
Long
userId
:
userIds
)
{
public
int
deleteUserByIds
(
Long
[]
userIds
)
{
for
(
Long
userId
:
userIds
)
{
checkUserAllowed
(
new
SysUser
(
userId
));
}
// 删除用户与角色关联
...
...
@@ -495,17 +456,15 @@ public class SysUserServiceImpl implements ISysUserService
/**
* 导入用户数据
*
* @param userList 用户数据列表
*
* @param userList
用户数据列表
* @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据
* @param userId 操作用户
* @param userId
操作用户
* @return 结果
*/
@Override
public
String
importUser
(
List
<
SysUser
>
userList
,
Boolean
isUpdateSupport
,
Long
userId
)
{
if
(
StringUtils
.
isNull
(
userList
)
||
userList
.
size
()
==
0
)
{
public
String
importUser
(
List
<
SysUser
>
userList
,
Boolean
isUpdateSupport
,
Long
userId
)
{
if
(
StringUtils
.
isNull
(
userList
)
||
userList
.
size
()
==
0
)
{
throw
new
ServiceException
(
"导入用户数据不能为空!"
);
}
int
successNum
=
0
;
...
...
@@ -513,48 +472,36 @@ public class SysUserServiceImpl implements ISysUserService
StringBuilder
successMsg
=
new
StringBuilder
();
StringBuilder
failureMsg
=
new
StringBuilder
();
String
password
=
configService
.
selectConfigByKey
(
"sys.user.initPassword"
);
for
(
SysUser
user
:
userList
)
{
try
{
for
(
SysUser
user
:
userList
)
{
try
{
// 验证是否存在这个用户
SysUser
u
=
userMapper
.
selectUserByUserName
(
user
.
getUserName
());
if
(
StringUtils
.
isNull
(
u
))
{
if
(
StringUtils
.
isNull
(
u
))
{
user
.
setPassword
(
SecurityUtils
.
encryptPassword
(
password
));
user
.
setCreateBy
(
userId
);
this
.
insertUser
(
user
);
successNum
++;
successMsg
.
append
(
"<br/>"
+
successNum
+
"、账号 "
+
user
.
getUserName
()
+
" 导入成功"
);
}
else
if
(
isUpdateSupport
)
{
}
else
if
(
isUpdateSupport
)
{
user
.
setUpdateBy
(
userId
);
this
.
updateUser
(
user
);
successNum
++;
successMsg
.
append
(
"<br/>"
+
successNum
+
"、账号 "
+
user
.
getUserName
()
+
" 更新成功"
);
}
else
{
}
else
{
failureNum
++;
failureMsg
.
append
(
"<br/>"
+
failureNum
+
"、账号 "
+
user
.
getUserName
()
+
" 已存在"
);
}
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
failureNum
++;
String
msg
=
"<br/>"
+
failureNum
+
"、账号 "
+
user
.
getUserName
()
+
" 导入失败:"
;
failureMsg
.
append
(
msg
+
e
.
getMessage
());
log
.
error
(
msg
,
e
);
}
}
if
(
failureNum
>
0
)
{
if
(
failureNum
>
0
)
{
failureMsg
.
insert
(
0
,
"很抱歉,导入失败!共 "
+
failureNum
+
" 条数据格式不正确,错误如下:"
);
throw
new
ServiceException
(
failureMsg
.
toString
());
}
else
{
}
else
{
successMsg
.
insert
(
0
,
"恭喜您,数据已全部导入成功!共 "
+
successNum
+
" 条,数据如下:"
);
}
return
successMsg
.
toString
();
...
...
ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
View file @
58cc8f87
...
...
@@ -65,6 +65,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if
test=
"userName != null and userName != ''"
>
AND u.user_name like concat('%', #{userName}, '%')
</if>
<if
test=
"nickName != null and nickName != ''"
>
AND u.nick_name like concat('%', #{nickName}, '%')
</if>
<if
test=
"status != null and status != ''"
>
AND u.status = #{status}
</if>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment