记得上下班打卡 | 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
Expand all
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;
import
com.liquidnet.service.kylin.dto.param.KylinGroupBuyActivityCreateParam
;
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.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
;
public
interface
IKylinGroupBuyPartnerService
{
...
...
@@ -26,5 +28,24 @@ public interface IKylinGroupBuyPartnerService {
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 @@
<version>
1.0-SNAPSHOT
</version>
<scope>
compile
</scope>
</dependency>
<dependency>
<groupId>
com.alibaba
</groupId>
<artifactId>
easyexcel
</artifactId>
</dependency>
</dependencies>
<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;
import
com.liquidnet.service.kylin.dto.param.KylinGroupBuyActivityCreateParam
;
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.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
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
...
...
@@ -20,6 +23,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
import
javax.servlet.http.HttpServletResponse
;
import
javax.validation.Valid
;
import
javax.validation.constraints.NotNull
;
import
java.util.Map
;
...
...
@@ -81,4 +85,39 @@ public class KylinGroupBuyPartnerController {
@RequestParam
(
"targetStatus"
)
@NotNull
(
message
=
"目标状态不能为空"
)
Integer
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
This diff is collapsed.
Click to expand it.
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