记得上下班打卡 | git大法好,push需谨慎
Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
liquidnet-bus-v1
Project
Project
Details
Activity
Releases
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
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
董敬伟
liquidnet-bus-v1
Commits
7b1f5153
Commit
7b1f5153
authored
Jul 20, 2026
by
wangyifan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
slime:拼团订单管理
parent
dd624d7d
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
617 additions
and
11 deletions
+617
-11
KylinGroupBuyPartnerOrderDetailVo.java
...in/dto/vo/groupbuy/KylinGroupBuyPartnerOrderDetailVo.java
+52
-0
KylinGroupBuyPartnerOrderListVo.java
...ylin/dto/vo/groupbuy/KylinGroupBuyPartnerOrderListVo.java
+45
-0
KylinGroupBuyPartnerOrderMemberVo.java
...in/dto/vo/groupbuy/KylinGroupBuyPartnerOrderMemberVo.java
+29
-0
KylinGroupBuyPartnerOrderStatsVo.java
...lin/dto/vo/groupbuy/KylinGroupBuyPartnerOrderStatsVo.java
+26
-0
IKylinGroupBuyPartnerService.java
...e/kylin/service/partner/IKylinGroupBuyPartnerService.java
+24
-3
pom.xml
...uidnet-service-slime/liquidnet-service-slime-impl/pom.xml
+4
-0
KylinGroupBuyPartnerController.java
...vice/slime/controller/KylinGroupBuyPartnerController.java
+39
-0
KylinGroupBuyPartnerServiceImpl.java
...e/slime/service/impl/KylinGroupBuyPartnerServiceImpl.java
+272
-8
GroupBuyOrderExcelUtil.java
.../liquidnet/service/slime/util/GroupBuyOrderExcelUtil.java
+126
-0
No files found.
liquidnet-bus-api/liquidnet-service-kylin-api/src/main/java/com/liquidnet/service/kylin/dto/vo/groupbuy/KylinGroupBuyPartnerOrderDetailVo.java
0 → 100644
View file @
7b1f5153
package
com
.
liquidnet
.
service
.
kylin
.
dto
.
vo
.
groupbuy
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.io.Serializable
;
import
java.math.BigDecimal
;
import
java.util.List
;
/**
* 管理端拼团订单详情 VO(与列表 VO 分离)。
*/
@Data
public
class
KylinGroupBuyPartnerOrderDetailVo
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
@ApiModelProperty
(
value
=
"拼团订单号"
)
private
String
groupOrderId
;
@ApiModelProperty
(
value
=
"活动ID"
)
private
String
activityId
;
@ApiModelProperty
(
value
=
"拼团活动名称"
)
private
String
activityName
;
@ApiModelProperty
(
value
=
"订单状态 0拼团中 1拼团成功 2拼团失败 -1待支付发起 3已取消"
)
private
Integer
status
;
@ApiModelProperty
(
value
=
"订单金额(团长票单实付)"
)
private
BigDecimal
orderAmount
;
@ApiModelProperty
(
value
=
"创建时间"
)
private
String
createdAt
;
@ApiModelProperty
(
value
=
"当前参团人数"
)
private
Integer
currentCount
;
@ApiModelProperty
(
value
=
"成团目标人数"
)
private
Integer
targetCount
;
@ApiModelProperty
(
value
=
"参团成员"
)
private
List
<
KylinGroupBuyPartnerOrderMemberVo
>
members
;
@ApiModelProperty
(
value
=
"发起人用户ID"
)
private
String
leaderUserId
;
@ApiModelProperty
(
value
=
"发起人昵称"
)
private
String
leaderNickname
;
@ApiModelProperty
(
value
=
"发起人头像"
)
private
String
leaderAvatar
;
}
liquidnet-bus-api/liquidnet-service-kylin-api/src/main/java/com/liquidnet/service/kylin/dto/vo/groupbuy/KylinGroupBuyPartnerOrderListVo.java
0 → 100644
View file @
7b1f5153
package
com
.
liquidnet
.
service
.
kylin
.
dto
.
vo
.
groupbuy
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.io.Serializable
;
import
java.math.BigDecimal
;
/**
* 管理端拼团订单列表 VO(与详情 VO 分离)。
*/
@Data
public
class
KylinGroupBuyPartnerOrderListVo
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
@ApiModelProperty
(
value
=
"拼团订单号 groupOrderId"
)
private
String
groupOrderId
;
@ApiModelProperty
(
value
=
"拼团活动名称"
)
private
String
activityName
;
@ApiModelProperty
(
value
=
"发起人用户ID"
)
private
String
leaderUserId
;
@ApiModelProperty
(
value
=
"发起人昵称"
)
private
String
leaderNickname
;
@ApiModelProperty
(
value
=
"发起人头像"
)
private
String
leaderAvatar
;
@ApiModelProperty
(
value
=
"当前参团人数"
)
private
Integer
currentCount
;
@ApiModelProperty
(
value
=
"成团目标人数"
)
private
Integer
targetCount
;
@ApiModelProperty
(
value
=
"订单金额(团长票单实付)"
)
private
BigDecimal
orderAmount
;
@ApiModelProperty
(
value
=
"创建时间 yyyy-MM-dd HH:mm:ss"
)
private
String
createdAt
;
@ApiModelProperty
(
value
=
"状态 0拼团中 1拼团成功 2拼团失败;列表可能出现 -1待支付发起 3已取消"
)
private
Integer
status
;
}
liquidnet-bus-api/liquidnet-service-kylin-api/src/main/java/com/liquidnet/service/kylin/dto/vo/groupbuy/KylinGroupBuyPartnerOrderMemberVo.java
0 → 100644
View file @
7b1f5153
package
com
.
liquidnet
.
service
.
kylin
.
dto
.
vo
.
groupbuy
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.io.Serializable
;
/**
* 管理端拼团订单详情-成员项。
*/
@Data
public
class
KylinGroupBuyPartnerOrderMemberVo
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
@ApiModelProperty
(
value
=
"用户ID"
)
private
String
userId
;
@ApiModelProperty
(
value
=
"昵称"
)
private
String
nickname
;
@ApiModelProperty
(
value
=
"头像"
)
private
String
avatar
;
@ApiModelProperty
(
value
=
"是否团长 1是 0否"
)
private
Integer
isLeader
;
@ApiModelProperty
(
value
=
"成员状态 -1待支付 0已加入 1已退款 2已取消"
)
private
Integer
status
;
}
liquidnet-bus-api/liquidnet-service-kylin-api/src/main/java/com/liquidnet/service/kylin/dto/vo/groupbuy/KylinGroupBuyPartnerOrderStatsVo.java
0 → 100644
View file @
7b1f5153
package
com
.
liquidnet
.
service
.
kylin
.
dto
.
vo
.
groupbuy
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.io.Serializable
;
/**
* 管理端拼团订单统计。
*/
@Data
public
class
KylinGroupBuyPartnerOrderStatsVo
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
@ApiModelProperty
(
value
=
"订单总数(含待支付发起、已取消)"
)
private
Long
total
;
@ApiModelProperty
(
value
=
"拼团中数量 status=0"
)
private
Long
pending
;
@ApiModelProperty
(
value
=
"拼团成功数量 status=1"
)
private
Long
success
;
@ApiModelProperty
(
value
=
"拼团失败数量 status=2"
)
private
Long
failed
;
}
liquidnet-bus-api/liquidnet-service-kylin-api/src/main/java/com/liquidnet/service/kylin/service/partner/IKylinGroupBuyPartnerService.java
View file @
7b1f5153
...
@@ -5,9 +5,11 @@ import com.liquidnet.service.base.ResponseDto;
...
@@ -5,9 +5,11 @@ import com.liquidnet.service.base.ResponseDto;
import
com.liquidnet.service.kylin.dto.param.KylinGroupBuyActivityCreateParam
;
import
com.liquidnet.service.kylin.dto.param.KylinGroupBuyActivityCreateParam
;
import
com.liquidnet.service.kylin.dto.param.KylinGroupBuyActivityUpdateParam
;
import
com.liquidnet.service.kylin.dto.param.KylinGroupBuyActivityUpdateParam
;
import
com.liquidnet.service.kylin.dto.vo.groupbuy.KylinGroupBuyActivityVo
;
import
com.liquidnet.service.kylin.dto.vo.groupbuy.KylinGroupBuyActivityVo
;
import
com.liquidnet.service.kylin.dto.vo.groupbuy.KylinGroupBuyOrderVo
;
import
com.liquidnet.service.kylin.dto.vo.groupbuy.KylinGroupBuyPartnerOrderDetailVo
;
import
com.liquidnet.service.kylin.dto.vo.groupbuy.KylinGroupBuyPartnerOrderListVo
;
import
com.liquidnet.service.kylin.dto.vo.groupbuy.KylinGroupBuyPartnerOrderStatsVo
;
import
java
.util.List
;
import
java
x.servlet.http.HttpServletResponse
;
import
java.util.Map
;
import
java.util.Map
;
public
interface
IKylinGroupBuyPartnerService
{
public
interface
IKylinGroupBuyPartnerService
{
...
@@ -26,5 +28,24 @@ public interface IKylinGroupBuyPartnerService {
...
@@ -26,5 +28,24 @@ public interface IKylinGroupBuyPartnerService {
ResponseDto
<
Boolean
>
toggle
(
String
activityId
,
Integer
targetStatus
);
ResponseDto
<
Boolean
>
toggle
(
String
activityId
,
Integer
targetStatus
);
ResponseDto
<
List
<
KylinGroupBuyOrderVo
>>
orders
(
String
activityId
,
Integer
status
,
Integer
page
,
Integer
size
);
/**
* 拼团订单顶部统计:总数 + 拼团中/成功/失败。
*/
ResponseDto
<
KylinGroupBuyPartnerOrderStatsVo
>
orderStats
();
/**
* 拼团订单分页列表。status 仅允许 0/1/2 或空(空=全部含 -1/3)。
*/
ResponseDto
<
PageInfo
<
KylinGroupBuyPartnerOrderListVo
>>
orderList
(
String
keyword
,
Integer
status
,
Integer
page
,
Integer
size
);
/**
* 拼团订单详情。
*/
ResponseDto
<
KylinGroupBuyPartnerOrderDetailVo
>
orderDetail
(
String
groupOrderId
);
/**
* 导出拼团订单(列同列表,筛选同列表)。
*/
void
exportOrders
(
String
keyword
,
Integer
status
,
HttpServletResponse
response
);
}
}
liquidnet-bus-service/liquidnet-service-slime/liquidnet-service-slime-impl/pom.xml
View file @
7b1f5153
...
@@ -50,6 +50,10 @@
...
@@ -50,6 +50,10 @@
<version>
1.0-SNAPSHOT
</version>
<version>
1.0-SNAPSHOT
</version>
<scope>
compile
</scope>
<scope>
compile
</scope>
</dependency>
</dependency>
<dependency>
<groupId>
com.alibaba
</groupId>
<artifactId>
easyexcel
</artifactId>
</dependency>
</dependencies>
</dependencies>
<build>
<build>
...
...
liquidnet-bus-service/liquidnet-service-slime/liquidnet-service-slime-impl/src/main/java/com/liquidnet/service/slime/controller/KylinGroupBuyPartnerController.java
View file @
7b1f5153
...
@@ -5,6 +5,9 @@ import com.liquidnet.service.base.ResponseDto;
...
@@ -5,6 +5,9 @@ import com.liquidnet.service.base.ResponseDto;
import
com.liquidnet.service.kylin.dto.param.KylinGroupBuyActivityCreateParam
;
import
com.liquidnet.service.kylin.dto.param.KylinGroupBuyActivityCreateParam
;
import
com.liquidnet.service.kylin.dto.param.KylinGroupBuyActivityUpdateParam
;
import
com.liquidnet.service.kylin.dto.param.KylinGroupBuyActivityUpdateParam
;
import
com.liquidnet.service.kylin.dto.vo.groupbuy.KylinGroupBuyActivityVo
;
import
com.liquidnet.service.kylin.dto.vo.groupbuy.KylinGroupBuyActivityVo
;
import
com.liquidnet.service.kylin.dto.vo.groupbuy.KylinGroupBuyPartnerOrderDetailVo
;
import
com.liquidnet.service.kylin.dto.vo.groupbuy.KylinGroupBuyPartnerOrderListVo
;
import
com.liquidnet.service.kylin.dto.vo.groupbuy.KylinGroupBuyPartnerOrderStatsVo
;
import
com.liquidnet.service.kylin.service.partner.IKylinGroupBuyPartnerService
;
import
com.liquidnet.service.kylin.service.partner.IKylinGroupBuyPartnerService
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
io.swagger.annotations.ApiOperation
;
...
@@ -20,6 +23,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
...
@@ -20,6 +23,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
import
org.springframework.web.bind.annotation.RestController
;
import
javax.servlet.http.HttpServletResponse
;
import
javax.validation.Valid
;
import
javax.validation.Valid
;
import
javax.validation.constraints.NotNull
;
import
javax.validation.constraints.NotNull
;
import
java.util.Map
;
import
java.util.Map
;
...
@@ -81,4 +85,39 @@ public class KylinGroupBuyPartnerController {
...
@@ -81,4 +85,39 @@ public class KylinGroupBuyPartnerController {
@RequestParam
(
"targetStatus"
)
@NotNull
(
message
=
"目标状态不能为空"
)
Integer
targetStatus
)
{
@RequestParam
(
"targetStatus"
)
@NotNull
(
message
=
"目标状态不能为空"
)
Integer
targetStatus
)
{
return
groupBuyPartnerService
.
toggle
(
activityId
,
targetStatus
);
return
groupBuyPartnerService
.
toggle
(
activityId
,
targetStatus
);
}
}
@GetMapping
(
"/orders/stats"
)
@ApiOperation
(
value
=
"拼团订单统计"
,
position
=
10
)
@ApiResponse
(
response
=
KylinGroupBuyPartnerOrderStatsVo
.
class
,
code
=
200
,
message
=
"接口返回对象参数"
)
public
ResponseDto
<
KylinGroupBuyPartnerOrderStatsVo
>
orderStats
()
{
return
groupBuyPartnerService
.
orderStats
();
}
@GetMapping
(
"/orders"
)
@ApiOperation
(
value
=
"拼团订单列表"
,
position
=
11
)
@ApiResponse
(
response
=
KylinGroupBuyPartnerOrderListVo
.
class
,
code
=
200
,
message
=
"接口返回对象参数"
)
public
ResponseDto
<
PageInfo
<
KylinGroupBuyPartnerOrderListVo
>>
orderList
(
@RequestParam
(
value
=
"keyword"
,
required
=
false
)
String
keyword
,
@RequestParam
(
value
=
"status"
,
required
=
false
)
Integer
status
,
@RequestParam
(
value
=
"page"
,
required
=
false
,
defaultValue
=
"1"
)
Integer
page
,
@RequestParam
(
value
=
"size"
,
required
=
false
,
defaultValue
=
"20"
)
Integer
size
)
{
return
groupBuyPartnerService
.
orderList
(
keyword
,
status
,
page
,
size
);
}
@GetMapping
(
"/orders/details"
)
@ApiOperation
(
value
=
"拼团订单详情"
,
position
=
12
)
@ApiResponse
(
response
=
KylinGroupBuyPartnerOrderDetailVo
.
class
,
code
=
200
,
message
=
"接口返回对象参数"
)
public
ResponseDto
<
KylinGroupBuyPartnerOrderDetailVo
>
orderDetail
(
@RequestParam
(
"groupOrderId"
)
@NotNull
(
message
=
"拼团订单号不能为空"
)
String
groupOrderId
)
{
return
groupBuyPartnerService
.
orderDetail
(
groupOrderId
);
}
@GetMapping
(
"/orders/export"
)
@ApiOperation
(
value
=
"导出拼团订单"
,
position
=
13
)
public
void
exportOrders
(
@RequestParam
(
value
=
"keyword"
,
required
=
false
)
String
keyword
,
@RequestParam
(
value
=
"status"
,
required
=
false
)
Integer
status
,
HttpServletResponse
response
)
{
groupBuyPartnerService
.
exportOrders
(
keyword
,
status
,
response
);
}
}
}
liquidnet-bus-service/liquidnet-service-slime/liquidnet-service-slime-impl/src/main/java/com/liquidnet/service/slime/service/impl/KylinGroupBuyPartnerServiceImpl.java
View file @
7b1f5153
...
@@ -15,11 +15,18 @@ import com.liquidnet.service.kylin.dto.param.KylinGroupBuyActivityCreateParam;
...
@@ -15,11 +15,18 @@ import com.liquidnet.service.kylin.dto.param.KylinGroupBuyActivityCreateParam;
import
com.liquidnet.service.kylin.dto.param.KylinGroupBuyActivityUpdateParam
;
import
com.liquidnet.service.kylin.dto.param.KylinGroupBuyActivityUpdateParam
;
import
com.liquidnet.service.kylin.dto.vo.groupbuy.KylinGroupBuyActivityVo
;
import
com.liquidnet.service.kylin.dto.vo.groupbuy.KylinGroupBuyActivityVo
;
import
com.liquidnet.service.kylin.dto.vo.groupbuy.KylinGroupBuyDiscountVo
;
import
com.liquidnet.service.kylin.dto.vo.groupbuy.KylinGroupBuyDiscountVo
;
import
com.liquidnet.service.kylin.dto.vo.groupbuy.KylinGroupBuyMemberVo
;
import
com.liquidnet.service.kylin.dto.vo.groupbuy.KylinGroupBuyOrderVo
;
import
com.liquidnet.service.kylin.dto.vo.groupbuy.KylinGroupBuyOrderVo
;
import
com.liquidnet.service.kylin.dto.vo.groupbuy.KylinGroupBuyPartnerOrderDetailVo
;
import
com.liquidnet.service.kylin.dto.vo.groupbuy.KylinGroupBuyPartnerOrderListVo
;
import
com.liquidnet.service.kylin.dto.vo.groupbuy.KylinGroupBuyPartnerOrderMemberVo
;
import
com.liquidnet.service.kylin.dto.vo.groupbuy.KylinGroupBuyPartnerOrderStatsVo
;
import
com.liquidnet.service.kylin.dto.vo.middle.KylinTicketTimesVo
;
import
com.liquidnet.service.kylin.dto.vo.middle.KylinTicketTimesVo
;
import
com.liquidnet.service.kylin.dto.vo.middle.KylinTicketVo
;
import
com.liquidnet.service.kylin.dto.vo.middle.KylinTicketVo
;
import
com.liquidnet.service.kylin.dto.vo.mongo.KylinOrderTicketVo
;
import
com.liquidnet.service.kylin.dto.vo.mongo.KylinPerformanceVo
;
import
com.liquidnet.service.kylin.dto.vo.mongo.KylinPerformanceVo
;
import
com.liquidnet.service.kylin.service.partner.IKylinGroupBuyPartnerService
;
import
com.liquidnet.service.kylin.service.partner.IKylinGroupBuyPartnerService
;
import
com.liquidnet.service.slime.util.GroupBuyOrderExcelUtil
;
import
com.liquidnet.service.slime.util.ObjectUtil
;
import
com.liquidnet.service.slime.util.ObjectUtil
;
import
com.liquidnet.service.slime.util.QueueUtil
;
import
com.liquidnet.service.slime.util.QueueUtil
;
import
com.liquidnet.service.slime.util.RedisSlimeUtils
;
import
com.liquidnet.service.slime.util.RedisSlimeUtils
;
...
@@ -31,14 +38,19 @@ import org.springframework.data.mongodb.core.query.Criteria;
...
@@ -31,14 +38,19 @@ import org.springframework.data.mongodb.core.query.Criteria;
import
org.springframework.data.mongodb.core.query.Query
;
import
org.springframework.data.mongodb.core.query.Query
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.CollectionUtils
;
import
org.springframework.util.CollectionUtils
;
import
org.springframework.util.StringUtils
;
import
javax.servlet.http.HttpServletResponse
;
import
java.math.BigDecimal
;
import
java.math.BigDecimal
;
import
java.time.LocalDateTime
;
import
java.time.LocalDateTime
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.HashMap
;
import
java.util.HashSet
;
import
java.util.LinkedList
;
import
java.util.LinkedList
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Map
;
import
java.util.Set
;
import
java.util.regex.Pattern
;
import
java.util.stream.Collectors
;
import
java.util.stream.Collectors
;
@Service
@Service
...
@@ -193,18 +205,270 @@ public class KylinGroupBuyPartnerServiceImpl implements IKylinGroupBuyPartnerSer
...
@@ -193,18 +205,270 @@ public class KylinGroupBuyPartnerServiceImpl implements IKylinGroupBuyPartnerSer
return
ResponseDto
.
success
(
true
);
return
ResponseDto
.
success
(
true
);
}
}
private
static
final
int
EXPORT_MAX_SIZE
=
10000
;
@Override
public
ResponseDto
<
KylinGroupBuyPartnerOrderStatsVo
>
orderStats
()
{
String
collection
=
KylinGroupBuyOrderVo
.
class
.
getSimpleName
();
KylinGroupBuyPartnerOrderStatsVo
result
=
new
KylinGroupBuyPartnerOrderStatsVo
();
result
.
setTotal
(
mongoTemplate
.
count
(
Query
.
query
(
new
Criteria
()),
collection
));
result
.
setPending
(
mongoTemplate
.
count
(
Query
.
query
(
Criteria
.
where
(
"status"
).
is
(
GroupBuyStatusConst
.
OrderStatus
.
PENDING
)),
collection
));
result
.
setSuccess
(
mongoTemplate
.
count
(
Query
.
query
(
Criteria
.
where
(
"status"
).
is
(
GroupBuyStatusConst
.
OrderStatus
.
SUCCESS
)),
collection
));
result
.
setFailed
(
mongoTemplate
.
count
(
Query
.
query
(
Criteria
.
where
(
"status"
).
is
(
GroupBuyStatusConst
.
OrderStatus
.
FAILED
)),
collection
));
return
ResponseDto
.
success
(
result
);
}
@Override
@Override
public
ResponseDto
<
List
<
KylinGroupBuyOrderVo
>>
orders
(
String
activityId
,
Integer
status
,
Integer
page
,
Integer
size
)
{
public
ResponseDto
<
PageInfo
<
KylinGroupBuyPartnerOrderListVo
>>
orderList
(
String
keyword
,
Integer
status
,
Criteria
criteria
=
Criteria
.
where
(
"activityId"
).
is
(
activityId
);
Integer
page
,
Integer
size
)
{
ResponseDto
<
Boolean
>
statusCheck
=
validateOrderListStatus
(
status
);
if
(!
statusCheck
.
isSuccess
())
{
return
ResponseDto
.
failure
(
statusCheck
.
getMessage
());
}
Criteria
criteria
=
buildOrderListCriteria
(
keyword
,
status
);
String
collection
=
KylinGroupBuyOrderVo
.
class
.
getSimpleName
();
long
total
=
mongoTemplate
.
count
(
Query
.
query
(
criteria
),
collection
);
Query
dataQuery
=
Query
.
query
(
criteria
).
with
(
Sort
.
by
(
Sort
.
Direction
.
DESC
,
"createdAt"
));
int
pageNo
=
page
==
null
||
page
<
1
?
1
:
page
;
int
pageSize
=
size
==
null
||
size
<
1
?
20
:
size
;
dataQuery
.
skip
((
long
)
(
pageNo
-
1
)
*
pageSize
).
limit
(
pageSize
);
List
<
KylinGroupBuyOrderVo
>
orders
=
mongoTemplate
.
find
(
dataQuery
,
KylinGroupBuyOrderVo
.
class
,
collection
);
List
<
KylinGroupBuyPartnerOrderListVo
>
list
=
toPartnerOrderListVos
(
orders
);
PageInfo
<
KylinGroupBuyPartnerOrderListVo
>
pageInfo
=
new
PageInfo
<>(
list
);
pageInfo
.
setTotal
(
total
);
pageInfo
.
setPageNum
(
pageNo
);
pageInfo
.
setPageSize
(
pageSize
);
return
ResponseDto
.
success
(
pageInfo
);
}
@Override
public
ResponseDto
<
KylinGroupBuyPartnerOrderDetailVo
>
orderDetail
(
String
groupOrderId
)
{
if
(!
StringUtils
.
hasText
(
groupOrderId
))
{
return
ResponseDto
.
failure
(
"拼团订单号不能为空"
);
}
KylinGroupBuyOrderVo
order
=
mongoTemplate
.
findOne
(
Query
.
query
(
Criteria
.
where
(
"groupOrderId"
).
is
(
groupOrderId
)),
KylinGroupBuyOrderVo
.
class
,
KylinGroupBuyOrderVo
.
class
.
getSimpleName
());
if
(
order
==
null
)
{
return
ResponseDto
.
failure
(
"拼团订单不存在"
);
}
return
ResponseDto
.
success
(
toPartnerOrderDetailVo
(
order
));
}
@Override
public
void
exportOrders
(
String
keyword
,
Integer
status
,
HttpServletResponse
response
)
{
ResponseDto
<
Boolean
>
statusCheck
=
validateOrderListStatus
(
status
);
if
(!
statusCheck
.
isSuccess
())
{
throw
new
IllegalArgumentException
(
statusCheck
.
getMessage
());
}
Criteria
criteria
=
buildOrderListCriteria
(
keyword
,
status
);
Query
query
=
Query
.
query
(
criteria
).
with
(
Sort
.
by
(
Sort
.
Direction
.
DESC
,
"createdAt"
)).
limit
(
EXPORT_MAX_SIZE
);
List
<
KylinGroupBuyOrderVo
>
orders
=
mongoTemplate
.
find
(
query
,
KylinGroupBuyOrderVo
.
class
,
KylinGroupBuyOrderVo
.
class
.
getSimpleName
());
List
<
KylinGroupBuyPartnerOrderListVo
>
rows
=
toPartnerOrderListVos
(
orders
);
try
{
GroupBuyOrderExcelUtil
.
export
(
rows
,
response
);
}
catch
(
Exception
e
)
{
throw
new
IllegalStateException
(
"导出拼团订单失败"
,
e
);
}
}
private
ResponseDto
<
Boolean
>
validateOrderListStatus
(
Integer
status
)
{
if
(
status
==
null
)
{
return
ResponseDto
.
success
(
true
);
}
if
(
GroupBuyStatusConst
.
OrderStatus
.
PENDING
.
equals
(
status
)
||
GroupBuyStatusConst
.
OrderStatus
.
SUCCESS
.
equals
(
status
)
||
GroupBuyStatusConst
.
OrderStatus
.
FAILED
.
equals
(
status
))
{
return
ResponseDto
.
success
(
true
);
}
return
ResponseDto
.
failure
(
"状态仅支持:0拼团中、1拼团成功、2拼团失败"
);
}
private
Criteria
buildOrderListCriteria
(
String
keyword
,
Integer
status
)
{
List
<
Criteria
>
andList
=
new
ArrayList
<>();
if
(
status
!=
null
)
{
if
(
status
!=
null
)
{
criteria
.
and
(
"status"
).
is
(
status
);
andList
.
add
(
Criteria
.
where
(
"status"
).
is
(
status
)
);
}
}
Query
query
=
Query
.
query
(
criteria
).
with
(
Sort
.
by
(
Sort
.
Direction
.
DESC
,
"createdAt"
));
if
(
StringUtils
.
hasText
(
keyword
))
{
if
(
page
!=
null
&&
size
!=
null
&&
page
>
0
&&
size
>
0
)
{
String
escaped
=
escapeRegex
(
keyword
.
trim
());
query
.
skip
((
long
)
(
page
-
1
)
*
size
).
limit
(
size
);
andList
.
add
(
new
Criteria
().
orOperator
(
Criteria
.
where
(
"groupOrderId"
).
regex
(
escaped
,
"i"
),
Criteria
.
where
(
"members.nickname"
).
regex
(
escaped
,
"i"
),
Criteria
.
where
(
"leaderUserId"
).
regex
(
escaped
,
"i"
)
));
}
}
return
ResponseDto
.
success
(
mongoTemplate
.
find
(
query
,
if
(
andList
.
isEmpty
())
{
KylinGroupBuyOrderVo
.
class
,
KylinGroupBuyOrderVo
.
class
.
getSimpleName
()));
return
new
Criteria
();
}
if
(
andList
.
size
()
==
1
)
{
return
andList
.
get
(
0
);
}
return
new
Criteria
().
andOperator
(
andList
.
toArray
(
new
Criteria
[
0
]));
}
private
List
<
KylinGroupBuyPartnerOrderListVo
>
toPartnerOrderListVos
(
List
<
KylinGroupBuyOrderVo
>
orders
)
{
List
<
KylinGroupBuyPartnerOrderListVo
>
result
=
new
ArrayList
<>();
if
(
CollectionUtils
.
isEmpty
(
orders
))
{
return
result
;
}
Map
<
String
,
String
>
activityNameMap
=
loadActivityNameMap
(
orders
);
Map
<
String
,
BigDecimal
>
amountMap
=
loadLeaderAmountMap
(
orders
);
for
(
KylinGroupBuyOrderVo
order
:
orders
)
{
KylinGroupBuyPartnerOrderListVo
vo
=
new
KylinGroupBuyPartnerOrderListVo
();
vo
.
setGroupOrderId
(
order
.
getGroupOrderId
());
vo
.
setActivityName
(
activityNameMap
.
get
(
order
.
getActivityId
()));
vo
.
setLeaderUserId
(
order
.
getLeaderUserId
());
KylinGroupBuyMemberVo
leader
=
findLeaderMember
(
order
);
if
(
leader
!=
null
)
{
vo
.
setLeaderNickname
(
leader
.
getNickname
());
vo
.
setLeaderAvatar
(
leader
.
getAvatar
());
}
vo
.
setCurrentCount
(
order
.
getCurrentCount
());
vo
.
setTargetCount
(
order
.
getTargetCount
());
vo
.
setOrderAmount
(
amountMap
.
get
(
order
.
getGroupOrderId
()));
vo
.
setCreatedAt
(
order
.
getCreatedAt
());
vo
.
setStatus
(
order
.
getStatus
());
result
.
add
(
vo
);
}
return
result
;
}
private
KylinGroupBuyPartnerOrderDetailVo
toPartnerOrderDetailVo
(
KylinGroupBuyOrderVo
order
)
{
KylinGroupBuyPartnerOrderDetailVo
vo
=
new
KylinGroupBuyPartnerOrderDetailVo
();
vo
.
setGroupOrderId
(
order
.
getGroupOrderId
());
vo
.
setActivityId
(
order
.
getActivityId
());
KylinGroupBuyActivityVo
activity
=
findActivity
(
order
.
getActivityId
());
vo
.
setActivityName
(
activity
==
null
?
null
:
activity
.
getName
());
vo
.
setStatus
(
order
.
getStatus
());
vo
.
setOrderAmount
(
resolveLeaderAmount
(
order
));
vo
.
setCreatedAt
(
order
.
getCreatedAt
());
vo
.
setCurrentCount
(
order
.
getCurrentCount
());
vo
.
setTargetCount
(
order
.
getTargetCount
());
vo
.
setLeaderUserId
(
order
.
getLeaderUserId
());
List
<
KylinGroupBuyPartnerOrderMemberVo
>
members
=
new
ArrayList
<>();
if
(!
CollectionUtils
.
isEmpty
(
order
.
getMembers
()))
{
for
(
KylinGroupBuyMemberVo
m
:
order
.
getMembers
())
{
KylinGroupBuyPartnerOrderMemberVo
item
=
new
KylinGroupBuyPartnerOrderMemberVo
();
item
.
setUserId
(
m
.
getUserId
());
item
.
setNickname
(
m
.
getNickname
());
item
.
setAvatar
(
m
.
getAvatar
());
item
.
setStatus
(
m
.
getStatus
());
boolean
isLeader
=
order
.
getLeaderUserId
()
!=
null
&&
order
.
getLeaderUserId
().
equals
(
m
.
getUserId
());
item
.
setIsLeader
(
isLeader
?
1
:
0
);
members
.
add
(
item
);
}
}
vo
.
setMembers
(
members
);
KylinGroupBuyMemberVo
leader
=
findLeaderMember
(
order
);
if
(
leader
!=
null
)
{
vo
.
setLeaderNickname
(
leader
.
getNickname
());
vo
.
setLeaderAvatar
(
leader
.
getAvatar
());
}
return
vo
;
}
private
Map
<
String
,
String
>
loadActivityNameMap
(
List
<
KylinGroupBuyOrderVo
>
orders
)
{
Set
<
String
>
activityIds
=
new
HashSet
<>();
for
(
KylinGroupBuyOrderVo
order
:
orders
)
{
if
(
StringUtils
.
hasText
(
order
.
getActivityId
()))
{
activityIds
.
add
(
order
.
getActivityId
());
}
}
Map
<
String
,
String
>
map
=
new
HashMap
<>();
if
(
activityIds
.
isEmpty
())
{
return
map
;
}
List
<
KylinGroupBuyActivityVo
>
activities
=
mongoTemplate
.
find
(
Query
.
query
(
Criteria
.
where
(
"activityId"
).
in
(
activityIds
)),
KylinGroupBuyActivityVo
.
class
,
KylinGroupBuyActivityVo
.
class
.
getSimpleName
());
for
(
KylinGroupBuyActivityVo
activity
:
activities
)
{
map
.
put
(
activity
.
getActivityId
(),
activity
.
getName
());
}
return
map
;
}
private
Map
<
String
,
BigDecimal
>
loadLeaderAmountMap
(
List
<
KylinGroupBuyOrderVo
>
orders
)
{
Map
<
String
,
String
>
groupToTicket
=
new
HashMap
<>();
Set
<
String
>
ticketIds
=
new
HashSet
<>();
for
(
KylinGroupBuyOrderVo
order
:
orders
)
{
String
ticketId
=
resolveLeaderOrderTicketsId
(
order
);
if
(
StringUtils
.
hasText
(
ticketId
))
{
groupToTicket
.
put
(
order
.
getGroupOrderId
(),
ticketId
);
ticketIds
.
add
(
ticketId
);
}
}
Map
<
String
,
BigDecimal
>
ticketAmount
=
new
HashMap
<>();
if
(!
ticketIds
.
isEmpty
())
{
List
<
KylinOrderTicketVo
>
tickets
=
mongoTemplate
.
find
(
Query
.
query
(
Criteria
.
where
(
"orderTicketsId"
).
in
(
ticketIds
)),
KylinOrderTicketVo
.
class
,
KylinOrderTicketVo
.
class
.
getSimpleName
());
for
(
KylinOrderTicketVo
ticket
:
tickets
)
{
ticketAmount
.
put
(
ticket
.
getOrderTicketsId
(),
ticket
.
getPriceActual
());
}
for
(
String
ticketId
:
ticketIds
)
{
if
(!
ticketAmount
.
containsKey
(
ticketId
))
{
Object
cached
=
redisUtil
.
get
(
KylinRedisConst
.
ORDER
.
concat
(
ticketId
));
if
(
cached
instanceof
KylinOrderTicketVo
)
{
ticketAmount
.
put
(
ticketId
,
((
KylinOrderTicketVo
)
cached
).
getPriceActual
());
}
}
}
}
Map
<
String
,
BigDecimal
>
result
=
new
HashMap
<>();
for
(
Map
.
Entry
<
String
,
String
>
e
:
groupToTicket
.
entrySet
())
{
result
.
put
(
e
.
getKey
(),
ticketAmount
.
get
(
e
.
getValue
()));
}
return
result
;
}
private
BigDecimal
resolveLeaderAmount
(
KylinGroupBuyOrderVo
order
)
{
String
ticketId
=
resolveLeaderOrderTicketsId
(
order
);
if
(!
StringUtils
.
hasText
(
ticketId
))
{
return
null
;
}
Object
cached
=
redisUtil
.
get
(
KylinRedisConst
.
ORDER
.
concat
(
ticketId
));
if
(
cached
instanceof
KylinOrderTicketVo
)
{
return
((
KylinOrderTicketVo
)
cached
).
getPriceActual
();
}
KylinOrderTicketVo
ticket
=
mongoTemplate
.
findOne
(
Query
.
query
(
Criteria
.
where
(
"orderTicketsId"
).
is
(
ticketId
)),
KylinOrderTicketVo
.
class
,
KylinOrderTicketVo
.
class
.
getSimpleName
());
return
ticket
==
null
?
null
:
ticket
.
getPriceActual
();
}
private
String
resolveLeaderOrderTicketsId
(
KylinGroupBuyOrderVo
order
)
{
if
(
order
==
null
)
{
return
null
;
}
if
(
StringUtils
.
hasText
(
order
.
getOrderTicketsId
()))
{
return
order
.
getOrderTicketsId
();
}
KylinGroupBuyMemberVo
leader
=
findLeaderMember
(
order
);
return
leader
==
null
?
null
:
leader
.
getOrderTicketsId
();
}
private
KylinGroupBuyMemberVo
findLeaderMember
(
KylinGroupBuyOrderVo
order
)
{
if
(
order
==
null
||
!
StringUtils
.
hasText
(
order
.
getLeaderUserId
())
||
CollectionUtils
.
isEmpty
(
order
.
getMembers
()))
{
return
null
;
}
for
(
KylinGroupBuyMemberVo
m
:
order
.
getMembers
())
{
if
(
order
.
getLeaderUserId
().
equals
(
m
.
getUserId
()))
{
return
m
;
}
}
return
null
;
}
/** Mongo $regex 不支持 \\Q..\\E,手工转义特殊字符。 */
private
static
String
escapeRegex
(
String
input
)
{
return
Pattern
.
compile
(
"([\\\\.*+?^${}()|\\[\\]])"
).
matcher
(
input
).
replaceAll
(
"\\\\$1"
);
}
}
private
ResponseDto
<
Boolean
>
validateParam
(
KylinGroupBuyActivityCreateParam
param
)
{
private
ResponseDto
<
Boolean
>
validateParam
(
KylinGroupBuyActivityCreateParam
param
)
{
...
...
liquidnet-bus-service/liquidnet-service-slime/liquidnet-service-slime-impl/src/main/java/com/liquidnet/service/slime/util/GroupBuyOrderExcelUtil.java
0 → 100644
View file @
7b1f5153
package
com
.
liquidnet
.
service
.
slime
.
util
;
import
com.alibaba.excel.EasyExcel
;
import
com.alibaba.excel.support.ExcelTypeEnum
;
import
com.liquidnet.commons.lang.util.DateUtil
;
import
com.liquidnet.service.kylin.constant.GroupBuyStatusConst
;
import
com.liquidnet.service.kylin.dto.vo.groupbuy.KylinGroupBuyPartnerOrderListVo
;
import
org.springframework.http.HttpHeaders
;
import
org.springframework.http.MediaType
;
import
org.springframework.util.CollectionUtils
;
import
javax.servlet.ServletOutputStream
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.IOException
;
import
java.math.BigDecimal
;
import
java.math.RoundingMode
;
import
java.nio.charset.StandardCharsets
;
import
java.time.LocalDateTime
;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.List
;
/**
* 拼团订单列表导出(EasyExcel,对齐 goblin exportOrderList)。
*/
public
final
class
GroupBuyOrderExcelUtil
{
private
GroupBuyOrderExcelUtil
()
{
}
public
static
void
export
(
List
<
KylinGroupBuyPartnerOrderListVo
>
rows
,
HttpServletResponse
response
)
throws
IOException
{
if
(
CollectionUtils
.
isEmpty
(
rows
))
{
return
;
}
ServletOutputStream
outputStream
=
null
;
try
{
String
fileName
=
DateUtil
.
Formatter
.
yyyyMMddHHmmssTrim
.
format
(
LocalDateTime
.
now
())
.
concat
(
new
String
((
"拼团订单"
).
getBytes
(
"gb2312"
),
StandardCharsets
.
ISO_8859_1
));
response
.
setHeader
(
HttpHeaders
.
CONTENT_DISPOSITION
,
"attachment;filename="
.
concat
(
fileName
).
concat
(
ExcelTypeEnum
.
XLSX
.
getValue
()));
response
.
setContentType
(
MediaType
.
MULTIPART_FORM_DATA_VALUE
);
response
.
setCharacterEncoding
(
StandardCharsets
.
UTF_8
.
name
());
outputStream
=
response
.
getOutputStream
();
EasyExcel
.
write
(
outputStream
)
.
head
(
buildHead
())
.
sheet
(
"拼团订单"
)
.
doWrite
(
buildRows
(
rows
));
}
finally
{
if
(
outputStream
!=
null
)
{
try
{
outputStream
.
close
();
}
catch
(
Exception
ignored
)
{
}
}
}
}
private
static
List
<
List
<
String
>>
buildHead
()
{
List
<
List
<
String
>>
head
=
new
ArrayList
<>();
head
.
add
(
Collections
.
singletonList
(
"订单号"
));
head
.
add
(
Collections
.
singletonList
(
"拼团活动"
));
head
.
add
(
Collections
.
singletonList
(
"发起人"
));
head
.
add
(
Collections
.
singletonList
(
"参团人数"
));
head
.
add
(
Collections
.
singletonList
(
"成团人数"
));
head
.
add
(
Collections
.
singletonList
(
"订单金额"
));
head
.
add
(
Collections
.
singletonList
(
"创建时间"
));
head
.
add
(
Collections
.
singletonList
(
"状态"
));
return
head
;
}
private
static
List
<
List
<
String
>>
buildRows
(
List
<
KylinGroupBuyPartnerOrderListVo
>
list
)
{
List
<
List
<
String
>>
rows
=
new
ArrayList
<>(
list
.
size
());
for
(
KylinGroupBuyPartnerOrderListVo
vo
:
list
)
{
List
<
String
>
row
=
new
ArrayList
<>(
8
);
row
.
add
(
nullToEmpty
(
vo
.
getGroupOrderId
()));
row
.
add
(
nullToEmpty
(
vo
.
getActivityName
()));
row
.
add
(
nullToEmpty
(
vo
.
getLeaderNickname
()));
row
.
add
(
formatProgress
(
vo
.
getCurrentCount
(),
vo
.
getTargetCount
()));
row
.
add
(
vo
.
getTargetCount
()
==
null
?
""
:
vo
.
getTargetCount
()
+
"人"
);
row
.
add
(
formatAmount
(
vo
.
getOrderAmount
()));
row
.
add
(
nullToEmpty
(
vo
.
getCreatedAt
()));
row
.
add
(
statusText
(
vo
.
getStatus
()));
rows
.
add
(
row
);
}
return
rows
;
}
private
static
String
formatProgress
(
Integer
current
,
Integer
target
)
{
int
c
=
current
==
null
?
0
:
current
;
int
t
=
target
==
null
?
0
:
target
;
return
c
+
"/"
+
t
+
"人"
;
}
private
static
String
formatAmount
(
BigDecimal
amount
)
{
if
(
amount
==
null
)
{
return
""
;
}
return
amount
.
setScale
(
2
,
RoundingMode
.
HALF_UP
).
toPlainString
();
}
private
static
String
statusText
(
Integer
status
)
{
if
(
status
==
null
)
{
return
""
;
}
if
(
GroupBuyStatusConst
.
OrderStatus
.
PENDING
.
equals
(
status
))
{
return
"拼团中"
;
}
if
(
GroupBuyStatusConst
.
OrderStatus
.
SUCCESS
.
equals
(
status
))
{
return
"拼团成功"
;
}
if
(
GroupBuyStatusConst
.
OrderStatus
.
FAILED
.
equals
(
status
))
{
return
"拼团失败"
;
}
if
(
GroupBuyStatusConst
.
OrderStatus
.
PREPARE
.
equals
(
status
))
{
return
"待支付发起"
;
}
if
(
GroupBuyStatusConst
.
OrderStatus
.
CANCELLED
.
equals
(
status
))
{
return
"已取消"
;
}
return
String
.
valueOf
(
status
);
}
private
static
String
nullToEmpty
(
String
s
)
{
return
s
==
null
?
""
:
s
;
}
}
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