记得上下班打卡 | 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
e9c4b455
Commit
e9c4b455
authored
Aug 12, 2026
by
姜秀龙
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
会员需求1
parent
931332ff
Changes
28
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
28 changed files
with
1621 additions
and
467 deletions
+1621
-467
AdamMemberBuildParam.java
...iquidnet/service/adam/dto/admin/AdamMemberBuildParam.java
+3
-0
AdamMemberPriceBuildParam.java
...net/service/adam/dto/admin/AdamMemberPriceBuildParam.java
+4
-0
AdamMemberRightsBuildParam.java
...et/service/adam/dto/admin/AdamMemberRightsBuildParam.java
+2
-0
AdamMemberPriceVo.java
.../com/liquidnet/service/adam/dto/vo/AdamMemberPriceVo.java
+5
-16
AdamMemberRightsVo.java
...com/liquidnet/service/adam/dto/vo/AdamMemberRightsVo.java
+3
-0
AdamMemberVo.java
.../java/com/liquidnet/service/adam/dto/vo/AdamMemberVo.java
+1
-3
AdamMemberPriorityCouponAdminVo.java
...ce/adam/dto/vo/admin/AdamMemberPriorityCouponAdminVo.java
+31
-0
MemberOrderDetailAdminVo.java
...t/service/adam/dto/vo/admin/MemberOrderDetailAdminVo.java
+4
-0
AdamMemberAdminController.java
...b/controller/zhengzai/adam/AdamMemberAdminController.java
+39
-5
AdamMemberCodeAdminController.java
...ntroller/zhengzai/adam/AdamMemberCodeAdminController.java
+39
-2
code_mgt.html
...sources/templates/zhengzai/adam/member/code/code_mgt.html
+107
-22
info.html
...c/main/resources/templates/zhengzai/adam/member/info.html
+914
-287
detail.html
...urces/templates/zhengzai/adam/order/orderList/detail.html
+50
-0
IAdamMemberPriceAdminService.java
...n/zhengzai/adam/service/IAdamMemberPriceAdminService.java
+1
-1
IAdamMemberRightsAdminService.java
.../zhengzai/adam/service/IAdamMemberRightsAdminService.java
+1
-1
AdamMemberOrderAdminServiceImpl.java
...ai/adam/service/impl/AdamMemberOrderAdminServiceImpl.java
+88
-0
AdamMemberPriceAdminServiceImpl.java
...ai/adam/service/impl/AdamMemberPriceAdminServiceImpl.java
+129
-67
AdamMemberRightsAdminServiceImpl.java
...i/adam/service/impl/AdamMemberRightsAdminServiceImpl.java
+26
-37
liquidnet-client-admin-web-druid-dev.yml
...liquidnet-config/liquidnet-client-admin-web-druid-dev.yml
+2
-2
liquidnet-client-admin-web-druid-test.yml
...iquidnet-config/liquidnet-client-admin-web-druid-test.yml
+2
-2
AdamMemberRights.java
...a/com/liquidnet/service/adam/entity/AdamMemberRights.java
+5
-0
CandyPriorityCouponUsageDto.java
.../service/candy/dto/admin/CandyPriorityCouponUsageDto.java
+25
-0
CandyUserCouponMapper.java
...liquidnet/service/candy/mapper/CandyUserCouponMapper.java
+6
-0
CandyUserCouponMapper.xml
.../liquidnet/service/candy/mapper/CandyUserCouponMapper.xml
+20
-0
db_adam_member_price_multi_package.sql
...ice-adam-impl/docu/db_adam_member_price_multi_package.sql
+43
-0
db_ln_adam_initialdata.sql
...quidnet-service-adam-impl/docu/db_ln_adam_initialdata.sql
+3
-0
AdamMemberController.java
...quidnet/service/adam/controller/AdamMemberController.java
+46
-12
AdamMemberOrderServiceImpl.java
...service/adam/service/impl/AdamMemberOrderServiceImpl.java
+22
-10
No files found.
liquidnet-bus-api/liquidnet-service-adam-api/src/main/java/com/liquidnet/service/adam/dto/admin/AdamMemberBuildParam.java
View file @
e9c4b455
...
...
@@ -7,6 +7,7 @@ import lombok.Data;
import
javax.validation.constraints.NotBlank
;
import
javax.validation.constraints.NotNull
;
import
java.io.Serializable
;
import
java.math.BigDecimal
;
@ApiModel
(
value
=
"AdamMemberBuildParam"
,
description
=
"编辑会员入参"
)
@Data
...
...
@@ -39,6 +40,8 @@ public class AdamMemberBuildParam implements Serializable {
@ApiModelProperty
(
required
=
true
,
value
=
"是否开售:1-开售|2-停售"
)
@NotNull
(
message
=
"是否开售不能为空"
)
private
Integer
onsale
;
@ApiModelProperty
(
required
=
false
,
value
=
"双倍积分[1-关闭,2-开启]"
)
private
BigDecimal
integralRate
;
@ApiModelProperty
(
required
=
false
,
value
=
"限购数量,0不限购[200]"
,
example
=
"0"
)
private
Integer
limitation
;
@ApiModelProperty
(
required
=
false
,
value
=
"限购开始时间[yyyy-MM-dd]"
)
...
...
liquidnet-bus-api/liquidnet-service-adam-api/src/main/java/com/liquidnet/service/adam/dto/admin/AdamMemberPriceBuildParam.java
View file @
e9c4b455
...
...
@@ -31,6 +31,10 @@ public class AdamMemberPriceBuildParam implements Serializable {
@ApiModelProperty
(
required
=
true
,
value
=
"有效天数"
)
@Min
(
value
=
1
,
message
=
"有效天数不得小于1"
)
private
Integer
days
;
@ApiModelProperty
(
required
=
false
,
value
=
"价格包名称"
)
private
String
name
;
@ApiModelProperty
(
required
=
false
,
value
=
"价格状态[0-不可用|1-上线中|2-已下线],删除传2"
)
private
Integer
state
;
@ApiModelProperty
(
required
=
false
,
value
=
"双倍积分[1-关闭,2-开启]"
)
private
BigDecimal
integralRate
;
...
...
liquidnet-bus-api/liquidnet-service-adam-api/src/main/java/com/liquidnet/service/adam/dto/admin/AdamMemberRightsBuildParam.java
View file @
e9c4b455
...
...
@@ -36,4 +36,6 @@ public class AdamMemberRightsBuildParam implements Serializable {
private
String
detail
;
@ApiModelProperty
(
required
=
false
,
value
=
"展示顺序"
)
private
Integer
seqNo
;
@ApiModelProperty
(
required
=
false
,
value
=
"绑定价格包ID,空表示全档回退共用"
)
private
String
memberPriceId
;
}
liquidnet-bus-api/liquidnet-service-adam-api/src/main/java/com/liquidnet/service/adam/dto/vo/AdamMemberPriceVo.java
View file @
e9c4b455
package
com
.
liquidnet
.
service
.
adam
.
dto
.
vo
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
com.liquidnet.commons.lang.util.DateUtil
;
import
com.liquidnet.service.adam.entity.AdamAddresses
;
import
com.fasterxml.jackson.annotation.JsonIgnoreProperties
;
import
com.liquidnet.service.adam.entity.AdamMemberPrice
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
...
...
@@ -10,18 +8,17 @@ import lombok.Data;
import
java.io.Serializable
;
import
java.math.BigDecimal
;
import
java.
time.LocalDateTime
;
import
java.
util.List
;
@ApiModel
(
value
=
"AdamMemberPriceVo"
,
description
=
"会员价格"
)
@Data
@JsonIgnoreProperties
(
ignoreUnknown
=
true
)
public
class
AdamMemberPriceVo
implements
Serializable
{
private
static
final
long
serialVersionUID
=
-
8106910166417645208L
;
@ApiModelProperty
(
position
=
1
,
value
=
"会员价格ID"
)
private
String
memberPriceId
;
@ApiModelProperty
(
position
=
2
,
value
=
"会员类型ID"
)
private
String
memberId
;
// @ApiModelProperty(position = 3, value = "价格状态[0-不可用,1-上线中,2-已下线]")
// private Integer state;
@ApiModelProperty
(
position
=
4
,
value
=
"价格包名称"
)
private
String
name
;
@ApiModelProperty
(
position
=
5
,
value
=
"原价"
)
...
...
@@ -32,12 +29,8 @@ public class AdamMemberPriceVo implements Serializable {
private
BigDecimal
priceSpecial
;
@ApiModelProperty
(
position
=
8
,
value
=
"有效天数"
)
private
Integer
days
;
// @ApiModelProperty(position = 8, value = "会员包须知")
// private String detail;
// @JsonFormat(shape=JsonFormat.Shape.STRING, pattern= DateUtil.DATE_FULL_STR)
// private LocalDateTime createdAt;
// @JsonFormat(shape=JsonFormat.Shape.STRING, pattern= DateUtil.DATE_FULL_STR)
// private LocalDateTime updatedAt;
@ApiModelProperty
(
position
=
9
,
value
=
"本价格包权益"
)
private
List
<
AdamMemberRightsVo
>
rightsVoList
;
private
static
final
AdamMemberPriceVo
obj
=
new
AdamMemberPriceVo
();
...
...
@@ -53,15 +46,11 @@ public class AdamMemberPriceVo implements Serializable {
if
(
null
==
source
)
return
this
;
this
.
setMemberPriceId
(
source
.
getMemberPriceId
());
this
.
setMemberId
(
source
.
getMemberId
());
// this.setState(source.getState());
this
.
setName
(
source
.
getName
());
this
.
setPrice
(
source
.
getPrice
());
this
.
setPriceFixed
(
source
.
getPriceFixed
());
this
.
setPriceSpecial
(
source
.
getPriceSpecial
());
this
.
setDays
(
source
.
getDays
());
// this.setDetail(source.getDetail());
// this.setCreatedAt(source.getCreatedAt());
// this.setUpdatedAt(source.getUpdatedAt());
return
this
;
}
}
liquidnet-bus-api/liquidnet-service-adam-api/src/main/java/com/liquidnet/service/adam/dto/vo/AdamMemberRightsVo.java
View file @
e9c4b455
...
...
@@ -25,6 +25,8 @@ public class AdamMemberRightsVo implements java.io.Serializable, Cloneable {
private
String
cover
;
@ApiModelProperty
(
position
=
7
,
value
=
"详情内容"
)
private
String
detail
;
@ApiModelProperty
(
position
=
8
,
value
=
"绑定价格包ID,空表示全档回退共用"
)
private
String
memberPriceId
;
public
AdamMemberRightsVo
setSeqNo
(
Integer
seqNo
)
{
this
.
seqNo
=
seqNo
;
...
...
@@ -60,6 +62,7 @@ public class AdamMemberRightsVo implements java.io.Serializable, Cloneable {
this
.
setLabel
(
source
.
getLabel
());
this
.
setCover
(
source
.
getCover
());
this
.
setDetail
(
source
.
getDetail
());
this
.
setMemberPriceId
(
source
.
getMemberPriceId
());
return
this
;
}
}
liquidnet-bus-api/liquidnet-service-adam-api/src/main/java/com/liquidnet/service/adam/dto/vo/AdamMemberVo.java
View file @
e9c4b455
...
...
@@ -62,10 +62,8 @@ public class AdamMemberVo implements java.io.Serializable, Cloneable {
@JsonFormat
(
shape
=
JsonFormat
.
Shape
.
STRING
,
pattern
=
DateUtil
.
DATE_FULL_STR
)
private
LocalDateTime
limiteAt
;
@ApiModelProperty
(
position
=
20
,
value
=
"会员卡价格信息"
)
@ApiModelProperty
(
position
=
20
,
value
=
"会员卡价格信息
(含各档 rightsVoList)
"
)
private
List
<
AdamMemberPriceVo
>
priceVoList
;
@ApiModelProperty
(
position
=
21
,
value
=
"会员专属权益"
)
private
List
<
AdamMemberRightsVo
>
rightsVoList
;
@ApiModelProperty
(
position
=
22
,
value
=
"用户会员信息"
)
private
AdamUserMemberVo
userMemberVo
;
@ApiModelProperty
(
position
=
23
,
value
=
"购买会员限购[0-名额已满|1-允许购买|2-限购未开始]"
)
...
...
liquidnet-bus-api/liquidnet-service-adam-api/src/main/java/com/liquidnet/service/adam/dto/vo/admin/AdamMemberPriorityCouponAdminVo.java
0 → 100644
View file @
e9c4b455
package
com
.
liquidnet
.
service
.
adam
.
dto
.
vo
.
admin
;
import
lombok.Data
;
import
java.io.Serializable
;
import
java.time.LocalDateTime
;
/**
* 会员订单详情-优先券使用情况
*/
@Data
public
class
AdamMemberPriorityCouponAdminVo
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
private
String
ucouponId
;
private
String
name
;
private
String
mobile
;
/** 专享标识文案 */
private
String
exclusiveLabel
;
private
Integer
exclusive
;
/** 用户券状态文案 */
private
String
stateLabel
;
private
Integer
state
;
private
String
title
;
/** 券类型文案 */
private
String
couTypeLabel
;
private
Integer
couType
;
private
LocalDateTime
bindAt
;
private
LocalDateTime
duedAt
;
private
LocalDateTime
usedAt
;
}
liquidnet-bus-api/liquidnet-service-adam-api/src/main/java/com/liquidnet/service/adam/dto/vo/admin/MemberOrderDetailAdminVo.java
View file @
e9c4b455
...
...
@@ -7,6 +7,8 @@ import com.liquidnet.service.adam.dto.vo.AdamUserMemberVo;
import
com.liquidnet.service.adam.entity.AdamUser
;
import
lombok.Data
;
import
java.util.List
;
/**
* @author AnJiabin <anjiabin@zhengzai.tv>
* @version V1.0
...
...
@@ -23,4 +25,6 @@ public class MemberOrderDetailAdminVo {
private
AdamUserInfoVo
adamUserInfoVo
;
private
AdamUserMemberVo
adamUserMemberVo
;
private
AdamMemberOrderExtVo
adamMemberOrderExtVo
;
/** 该用户优先券(cou_type=101)使用情况 */
private
List
<
AdamMemberPriorityCouponAdminVo
>
priorityCouponList
;
}
liquidnet-bus-client/liquidnet-client-admin/liquidnet-client-admin-web/src/main/java/com/liquidnet/client/admin/web/controller/zhengzai/adam/AdamMemberAdminController.java
View file @
e9c4b455
...
...
@@ -35,6 +35,8 @@ import org.springframework.validation.annotation.Validated;
import
org.springframework.web.bind.annotation.*
;
import
java.util.Arrays
;
import
java.util.Comparator
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.stream.Collectors
;
...
...
@@ -102,6 +104,10 @@ public class AdamMemberAdminController extends BaseController {
)
);
mmap
.
put
(
"member"
,
member
);
mmap
.
put
(
"memberPriceList"
,
java
.
util
.
Collections
.
emptyList
());
mmap
.
put
(
"memberRightsList"
,
java
.
util
.
Collections
.
emptyList
());
mmap
.
put
(
"couponMemberDtoListMap"
,
java
.
util
.
Collections
.
emptyMap
());
mmap
.
put
(
"memberPrice"
,
null
);
if
(
null
!=
member
)
{
List
<
AdamMemberRights
>
memberRightsList
=
adamMemberRightsAdminService
.
list
(
Wrappers
.
lambdaQuery
(
AdamMemberRights
.
class
)
...
...
@@ -109,6 +115,8 @@ public class AdamMemberAdminController extends BaseController {
.
eq
(
AdamMemberRights:
:
getMemberId
,
member
.
getMemberId
())
.
select
(
AdamMemberRights:
:
getMrightsId
,
AdamMemberRights:
:
getMemberId
,
AdamMemberRights:
:
getMemberPriceId
,
AdamMemberRights:
:
getCover
,
AdamMemberRights:
:
getTitle
,
AdamMemberRights:
:
getSubTitle
,
...
...
@@ -116,6 +124,7 @@ public class AdamMemberAdminController extends BaseController {
)
);
mmap
.
put
(
"memberRightsList"
,
memberRightsList
);
mmap
.
put
(
"couponMemberDtoListMap"
,
java
.
util
.
Collections
.
emptyMap
());
if
(!
CollectionUtils
.
isEmpty
(
memberRightsList
))
{
List
<
String
>
mrightsIdList
=
memberRightsList
.
stream
().
map
(
AdamMemberRights:
:
getMrightsId
).
collect
(
Collectors
.
toList
());
...
...
@@ -127,17 +136,28 @@ public class AdamMemberAdminController extends BaseController {
mmap
.
put
(
"couponMemberDtoListMap"
,
couponMemberDtoListMap
);
}
AdamMemberPrice
memberPrice
=
adamMemberPriceAdminService
.
getOne
(
Wrappers
.
lambdaQuery
(
AdamMemberPrice
.
class
)
.
eq
(
AdamMemberPrice:
:
getState
,
1
)
List
<
AdamMemberPrice
>
memberPriceList
=
adamMemberPriceAdminService
.
list
(
Wrappers
.
lambdaQuery
(
AdamMemberPrice
.
class
)
.
in
(
AdamMemberPrice:
:
getState
,
Arrays
.
asList
(
1
,
2
)
)
.
eq
(
AdamMemberPrice:
:
getMemberId
,
member
.
getMemberId
())
.
orderByAsc
(
AdamMemberPrice:
:
getState
)
.
orderByAsc
(
AdamMemberPrice:
:
getDays
)
.
select
(
AdamMemberPrice:
:
getMemberPriceId
,
AdamMemberPrice:
:
getMemberId
,
AdamMemberPrice:
:
getName
,
AdamMemberPrice:
:
getPrice
,
AdamMemberPrice:
:
getPriceFixed
,
AdamMemberPrice:
:
getPriceSpecial
,
AdamMemberPrice:
:
getDays
AdamMemberPrice:
:
getDays
,
AdamMemberPrice:
:
getState
)
);
mmap
.
put
(
"memberPriceList"
,
memberPriceList
);
AdamMemberPrice
memberPrice
=
CollectionUtils
.
isEmpty
(
memberPriceList
)
?
null
:
memberPriceList
.
stream
()
.
filter
(
p
->
p
.
getState
()
!=
null
&&
p
.
getState
()
==
1
)
.
max
(
Comparator
.
comparing
(
AdamMemberPrice:
:
getDays
,
Comparator
.
nullsFirst
(
Integer:
:
compareTo
)))
.
orElse
(
null
);
mmap
.
put
(
"memberPrice"
,
memberPrice
);
}
mmap
.
put
(
"platformUrl"
,
platformUrl
);
...
...
@@ -167,7 +187,7 @@ public class AdamMemberAdminController extends BaseController {
@PostMapping
(
"edit_price"
)
@ResponseBody
public
AjaxResult
editPrice
(
@Validated
AdamMemberPriceBuildParam
parameter
)
{
return
this
.
toAjax
(
adamMemberPriceAdminService
.
edit
(
parameter
));
return
AjaxResult
.
success
(
adamMemberPriceAdminService
.
edit
(
parameter
));
}
@ApiOperation
(
value
=
"会员套餐:权益编辑"
)
...
...
@@ -179,13 +199,27 @@ public class AdamMemberAdminController extends BaseController {
if
(
parameter
.
getState
()
!=
2
)
{
// 这里编辑包含新增、更新、删除分别对应state:1,1,2
parameter
.
setState
(
1
);
if
(
StringUtils
.
isBlank
(
parameter
.
getMemberPriceId
()))
{
return
AjaxResult
.
warn
(
"请指定权益所属价格包"
);
}
}
else
if
(
StringUtils
.
isBlank
(
parameter
.
getMrightsId
()))
{
return
AjaxResult
.
warn
(
"请指定要删除的权益ID"
);
}
if
(
null
==
parameter
.
getSeqNo
())
{
parameter
.
setSeqNo
(
0
);
}
return
this
.
toAjax
(
adamMemberRightsAdminService
.
edit
(
parameter
));
AdamMemberRights
rights
=
adamMemberRightsAdminService
.
edit
(
parameter
);
if
(
rights
==
null
||
StringUtils
.
isBlank
(
rights
.
getMrightsId
()))
{
return
AjaxResult
.
error
(
"权益保存失败"
);
}
// 显式回传 id,避免实体序列化字段名差异导致前端读不到
Map
<
String
,
Object
>
data
=
new
HashMap
<>(
8
);
data
.
put
(
"mrightsId"
,
rights
.
getMrightsId
());
data
.
put
(
"memberId"
,
rights
.
getMemberId
());
data
.
put
(
"memberPriceId"
,
rights
.
getMemberPriceId
());
data
.
put
(
"state"
,
rights
.
getState
());
data
.
put
(
"title"
,
rights
.
getTitle
());
return
AjaxResult
.
success
(
data
);
}
// @ApiOperation(value = "会员套餐:券编辑")
...
...
liquidnet-bus-client/liquidnet-client-admin/liquidnet-client-admin-web/src/main/java/com/liquidnet/client/admin/web/controller/zhengzai/adam/AdamMemberCodeAdminController.java
View file @
e9c4b455
...
...
@@ -25,10 +25,12 @@ import org.apache.shiro.authz.annotation.RequiresPermissions;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Controller
;
import
org.springframework.ui.ModelMap
;
import
org.springframework.util.CollectionUtils
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.ArrayList
;
import
java.util.Comparator
;
import
java.util.List
;
@Api
(
tags
=
"会员码管理"
)
...
...
@@ -46,34 +48,69 @@ public class AdamMemberCodeAdminController extends BaseController {
@GetMapping
(
"mgt"
)
public
String
viewCodeMgt
(
@RequestParam
String
memberId
,
ModelMap
mmap
)
{
mmap
.
put
(
"memberId"
,
memberId
);
AdamMemberPrice
memberPrice
=
adamMemberPriceAdminService
.
getOne
(
Wrappers
.
lambdaQuery
(
AdamMemberPrice
.
class
)
List
<
AdamMemberPrice
>
memberPriceList
=
adamMemberPriceAdminService
.
list
(
Wrappers
.
lambdaQuery
(
AdamMemberPrice
.
class
)
.
eq
(
AdamMemberPrice:
:
getState
,
1
)
.
eq
(
AdamMemberPrice:
:
getMemberId
,
memberId
)
.
select
(
AdamMemberPrice:
:
getMid
,
AdamMemberPrice:
:
getMemberPriceId
,
AdamMemberPrice:
:
getName
,
AdamMemberPrice:
:
getPrice
,
AdamMemberPrice:
:
getPriceFixed
,
AdamMemberPrice:
:
getPriceSpecial
,
AdamMemberPrice:
:
getDays
)
.
orderByAsc
(
AdamMemberPrice:
:
getDays
)
);
// 默认选中天数最长的价格包(通常为年卡),创建时可改选其它档
AdamMemberPrice
memberPrice
=
CollectionUtils
.
isEmpty
(
memberPriceList
)
?
null
:
memberPriceList
.
stream
()
.
max
(
Comparator
.
comparing
(
AdamMemberPrice:
:
getDays
,
Comparator
.
nullsFirst
(
Integer:
:
compareTo
)))
.
orElse
(
null
);
mmap
.
put
(
"memberPrice"
,
memberPrice
);
mmap
.
put
(
"memberPriceList"
,
memberPriceList
);
return
prefix
+
"/code_mgt"
;
}
@ApiOperation
(
value
=
"会员码:上线价格包列表"
)
@RequiresPermissions
(
"adam:member:code:creation"
)
@GetMapping
(
"mgt/prices"
)
@ResponseBody
public
AjaxResult
listOnlinePrices
(
@RequestParam
String
memberId
)
{
List
<
AdamMemberPrice
>
memberPriceList
=
adamMemberPriceAdminService
.
list
(
Wrappers
.
lambdaQuery
(
AdamMemberPrice
.
class
)
.
eq
(
AdamMemberPrice:
:
getState
,
1
)
.
eq
(
AdamMemberPrice:
:
getMemberId
,
memberId
)
.
select
(
AdamMemberPrice:
:
getMid
,
AdamMemberPrice:
:
getMemberPriceId
,
AdamMemberPrice:
:
getName
,
AdamMemberPrice:
:
getPrice
,
AdamMemberPrice:
:
getPriceFixed
,
AdamMemberPrice:
:
getPriceSpecial
,
AdamMemberPrice:
:
getDays
)
.
orderByAsc
(
AdamMemberPrice:
:
getDays
)
);
return
AjaxResult
.
success
(
memberPriceList
);
}
@RequiresPermissions
(
"adam:member:code:mgt:list"
)
@Log
(
title
=
"会员管理:会员码:管理"
,
businessType
=
BusinessType
.
LIST
)
@PostMapping
(
"mgt/list"
)
@ResponseBody
public
TableDataInfo
listCodeMgt
(
@RequestParam
String
memberId
)
{
// TODO: 2021/9/23 码生成记录
LambdaQueryWrapper
<
AdamMemberCodeBatch
>
queryWrapper
=
Wrappers
.
lambdaQuery
(
AdamMemberCodeBatch
.
class
);
queryWrapper
.
eq
(
AdamMemberCodeBatch:
:
getState
,
1
);
// 本页按会员进入:只看该会员批次(member_id 精确匹配)
if
(
StringUtils
.
isNotBlank
(
memberId
))
{
queryWrapper
.
eq
(
AdamMemberCodeBatch:
:
getMemberId
,
memberId
);
}
queryWrapper
.
select
(
AdamMemberCodeBatch:
:
getBatchNo
,
AdamMemberCodeBatch:
:
getMemberName
,
AdamMemberCodeBatch:
:
getMemberCombo
,
AdamMemberCodeBatch:
:
getMemberPriceId
,
AdamMemberCodeBatch:
:
getGenNum
,
AdamMemberCodeBatch:
:
getUseNum
,
AdamMemberCodeBatch:
:
getDetail
,
...
...
liquidnet-bus-client/liquidnet-client-admin/liquidnet-client-admin-web/src/main/resources/templates/zhengzai/adam/member/code/code_mgt.html
View file @
e9c4b455
...
...
@@ -2,13 +2,12 @@
<html
lang=
"zh"
xmlns:th=
"http://www.thymeleaf.org"
xmlns:shiro=
"http://www.pollix.at/thymeleaf/shiro"
>
<head>
<th:block
th:include=
"include :: header('会员码管理')"
/>
<th:block
th:include=
"include :: select2-css"
/>
</head>
<body
class=
"gray-bg"
>
<div
class=
"container-div"
>
<div
class=
"row"
>
<div
class=
"btn-group-sm"
id=
"toolbar"
role=
"group"
>
<a
class=
"btn btn-success"
href=
"#member-gencode-form"
data-toggle=
"modal
"
shiro:hasPermission=
"adam:member:code:creation"
>
<a
id=
"btnCreateMemberCode"
class=
"btn btn-success"
href=
"javascript:void(0)"
onclick=
"openCreateModal()
"
shiro:hasPermission=
"adam:member:code:creation"
>
<i
class=
"fa fa-plus"
></i>
创建
</a>
</div>
...
...
@@ -24,14 +23,21 @@
<form
role=
"form"
id=
"form-member-code-generate"
>
<input
name=
"memberId"
type=
"hidden"
th:value=
"${memberId}"
readonly
>
<input
name=
"memberPriceId"
type=
"hidden"
th:value=
"${memberPrice.memberPriceId}"
readonly
>
<div
class=
"form-group"
>
<label
class=
"pull-left"
>
生产数量:
</label>
<input
type=
"number"
name=
"genNum"
class=
"form-control"
style=
"width: 30%;height: 20px;"
placeholder=
"生产数量"
>
<label>
兑换套餐:
</label>
<!-- 不用 select2:动态 option 会被 select2 吃掉只剩一条 -->
<select
name=
"memberPriceId"
id=
"memberPriceId"
class=
"form-control noselect2"
required
>
<option
value=
""
>
加载中...
</option>
</select>
<p
class=
"help-block m-b-none text-muted"
style=
"margin-top:6px;"
>
兑换后按所选价格包天数开会员,并发放该档权益
</p>
</div>
<div
class=
"form-group"
>
<!-- <label>备注:</label>-->
<textarea
rows=
"3"
name=
"detail"
placeholder=
"备注描述"
class=
"form-control"
></textarea>
<label>
生产数量:
</label>
<input
type=
"text"
name=
"genNum"
class=
"form-control"
placeholder=
"请输入生产数量(1-100)"
maxlength=
"3"
>
</div>
<div
class=
"form-group"
>
<label>
备注描述:
</label>
<textarea
rows=
"3"
name=
"detail"
placeholder=
"请输入备注描述"
class=
"form-control"
></textarea>
</div>
<div
class=
"text-center"
style=
"margin-bottom: -15px;margin-top: 10px;"
>
<button
class=
"btn btn-sm btn-primary m-t-n-xs"
type=
"button"
onclick=
"memberCodeGenerate()"
>
...
...
@@ -45,33 +51,48 @@
</div>
</div>
<th:block
th:include=
"include :: footer"
/>
<th:block
th:include=
"include :: select2-js"
/>
<script
th:inline=
"javascript"
>
var
viewMemberCodeListFlg
=
[[
$
{@
permission
.
hasPermi
(
'adam:member:code:list'
)}]];
var
memberId
=
[[
$
{
memberId
}]];
var
prefix
=
ctx
+
"adam/mcode"
;
var
onlinePriceList
=
[];
$
(
function
()
{
var
options
=
{
url
:
prefix
+
"/mgt/list
?memberId="
+
memberId
,
url
:
prefix
+
"/mgt/list
"
,
createUrl
:
prefix
+
"/mgt/creation/{id}"
,
exportUrl
:
prefix
+
"/export_code"
,
detailUrl
:
ctx
+
"adam/order/orderList/detail/{id}"
,
sortName
:
"createdAt"
,
sortOrder
:
"desc"
,
modalName
:
"会员码创建记录"
,
queryParams
:
function
(
params
)
{
return
{
pageSize
:
params
.
limit
,
pageNum
:
params
.
offset
/
params
.
limit
+
1
,
searchValue
:
params
.
search
,
orderByColumn
:
params
.
sort
,
isAsc
:
params
.
order
,
memberId
:
memberId
};
},
columns
:
[{
checkbox
:
true
},
{
field
:
'memberName'
,
title
:
'会员名称'
,
width
:
22
0
width
:
18
0
},
{
field
:
'memberCombo'
,
title
:
'会员套餐名称'
,
width
:
180
title
:
'兑换套餐'
,
width
:
200
},
{
field
:
'memberPriceId'
,
title
:
'价格包ID'
,
width
:
140
},
{
field
:
'genNum'
,
...
...
@@ -86,7 +107,7 @@
{
field
:
'detail'
,
title
:
'备注'
,
width
:
2
8
0
width
:
2
2
0
},
{
field
:
'operator'
,
...
...
@@ -112,9 +133,10 @@
}]
};
$
.
table
.
init
(
options
);
// 打开列表页就拉套餐
reloadOnlinePrices
();
});
/* 会员码列表 */
function
memberCodeList
(
batchNo
)
{
$
.
modal
.
openTab
(
"会员码列表"
,
prefix
+
'/mgt/code?batchNo='
+
batchNo
);
}
...
...
@@ -122,6 +144,9 @@
$
(
"#form-member-code-generate"
).
validate
({
onkeyup
:
false
,
rules
:{
memberPriceId
:
{
required
:
true
},
genNum
:
{
required
:
true
,
number
:
true
,
...
...
@@ -135,6 +160,9 @@
}
},
messages
:
{
memberPriceId
:
{
required
:
"请选择兑换套餐"
},
genNum
:
{
required
:
"请输入生产数量"
,
number
:
"生产数量必须为数字"
,
...
...
@@ -146,28 +174,85 @@
minlength
:
"备注描述不得少于2个字符"
,
maxlength
:
"备注描述不得大于100个字符"
}
},
focusCleanup
:
true
});
function
fillPriceOptions
(
list
)
{
onlinePriceList
=
list
||
[];
var
$sel
=
$
(
'#memberPriceId'
);
$sel
.
empty
();
if
(
!
onlinePriceList
.
length
)
{
$sel
.
append
(
$
(
'<option></option>'
).
val
(
''
).
text
(
'暂无上线价格包'
));
$
(
'#btnCreateMemberCode'
).
addClass
(
'disabled'
);
return
;
}
// 默认不选中:合上时不会误以为只有年卡一条;点开可见全部上线档
$sel
.
append
(
$
(
'<option></option>'
).
val
(
''
).
text
(
'请选择兑换套餐(共'
+
onlinePriceList
.
length
+
'档)'
));
$
.
each
(
onlinePriceList
,
function
(
i
,
mp
)
{
var
text
=
(
mp
.
name
||
'未命名'
)
+
' · '
+
(
mp
.
days
!=
null
?
mp
.
days
:
'-'
)
+
'天 · ¥'
+
(
mp
.
price
!=
null
?
mp
.
price
:
'-'
);
$sel
.
append
(
$
(
'<option></option>'
).
attr
(
'value'
,
mp
.
memberPriceId
).
text
(
text
));
});
$
(
'#btnCreateMemberCode'
).
removeClass
(
'disabled'
);
console
.
log
(
'[member-code] online prices:'
,
onlinePriceList
.
length
,
onlinePriceList
);
}
function
reloadOnlinePrices
(
done
)
{
$
.
ajax
({
url
:
prefix
+
'/mgt/prices'
,
type
:
'get'
,
data
:
{
memberId
:
memberId
},
dataType
:
'json'
,
success
:
function
(
res
)
{
var
list
=
(
res
&&
res
.
code
==
web_status
.
SUCCESS
&&
res
.
data
)
?
res
.
data
:
[];
fillPriceOptions
(
list
);
if
(
typeof
done
===
'function'
)
{
done
(
list
);
}
},
error
:
function
()
{
fillPriceOptions
([]);
$
.
modal
.
msgWarning
(
"加载兑换套餐失败,请刷新页面重试"
);
if
(
typeof
done
===
'function'
)
{
done
([]);
}
}
});
}
function
openCreateModal
()
{
if
(
$
(
'#btnCreateMemberCode'
).
hasClass
(
'disabled'
))
{
$
.
modal
.
alertWarning
(
"暂无上线价格包,请先在会员套餐中配置并上线"
);
return
;
}
reloadOnlinePrices
(
function
(
list
)
{
if
(
!
list
.
length
)
{
$
.
modal
.
alertWarning
(
"暂无上线价格包,请先在会员套餐中配置并上线"
);
return
;
}
$
(
'#member-gencode-form'
).
modal
(
'show'
);
});
}
function
memberCodeGenerate
()
{
if
(
!
$
(
'#memberPriceId'
).
val
())
{
$
.
modal
.
alertWarning
(
"请选择兑换套餐"
);
return
;
}
if
(
$
.
validate
.
form
(
"form-member-code-generate"
))
{
$
(
'#member-gencode-form'
).
hide
(
);
$
(
'#member-gencode-form'
).
modal
(
'hide'
);
$
.
operate
.
saveModal
(
prefix
+
"/mgt/creation"
,
$
(
'#form-member-code-generate'
).
serialize
(),
memberCodeGenerateCallback
);
}
}
function
memberCodeGenerateCallback
(
result
)
{
if
(
typeof
callback
==
"function"
)
{
callback
(
result
);
}
if
(
result
.
code
==
web_status
.
SUCCESS
)
{
$
.
modal
.
alertSuccess
(
result
.
msg
);
setTimeout
(
"refreshTab()"
,
1500
);
}
else
if
(
result
.
code
==
web_status
.
WARNING
)
{
$
(
'#member-gencode-form'
).
show
(
);
$
(
'#member-gencode-form'
).
modal
(
'show'
);
$
.
modal
.
alertWarning
(
result
.
msg
);
}
else
{
$
(
'#member-gencode-form'
).
show
(
);
$
(
'#member-gencode-form'
).
modal
(
'show'
);
$
.
modal
.
alertError
(
result
.
msg
);
}
}
...
...
liquidnet-bus-client/liquidnet-client-admin/liquidnet-client-admin-web/src/main/resources/templates/zhengzai/adam/member/info.html
View file @
e9c4b455
This diff is collapsed.
Click to expand it.
liquidnet-bus-client/liquidnet-client-admin/liquidnet-client-admin-web/src/main/resources/templates/zhengzai/adam/order/orderList/detail.html
View file @
e9c4b455
...
...
@@ -178,6 +178,56 @@
</div>
<div
class=
"row"
style=
"margin-top: 10px;"
>
<div
class=
"col-sm-12"
>
<div
class=
"ibox float-e-margins"
>
<div
class=
"ibox-title ibox-title-gray dashboard-header"
>
<h5>
优先券使用情况
</h5>
</div>
<div
class=
"ibox-content"
>
<table
class=
"table table-bordered table-striped"
>
<thead>
<tr>
<th>
券ID
</th>
<th>
姓名
</th>
<th>
手机号
</th>
<th>
专享标识
</th>
<th>
用户券状态
</th>
<th>
券标题
</th>
<th>
券类型
</th>
<th>
发放时间
</th>
<th>
到期时间
</th>
<th>
使用时间
</th>
</tr>
</thead>
<tbody>
<tr
th:each=
"coupon : ${orderDetailsVo.priorityCouponList}"
>
<td
th:text=
"${coupon.ucouponId}"
></td>
<td
th:text=
"${coupon.name}"
></td>
<td
th:text=
"${coupon.mobile}"
></td>
<td
th:text=
"${coupon.exclusiveLabel}"
></td>
<td>
<span
class=
"badge badge-success"
th:if=
"${coupon.state == 1}"
th:text=
"${coupon.stateLabel}"
></span>
<span
class=
"badge badge-danger"
th:if=
"${coupon.state == 5}"
th:text=
"${coupon.stateLabel}"
></span>
<span
class=
"badge badge-warning"
th:if=
"${coupon.state == 3}"
th:text=
"${coupon.stateLabel}"
></span>
<span
class=
"badge badge-inverse"
th:if=
"${coupon.state != 1 and coupon.state != 5 and coupon.state != 3}"
th:text=
"${coupon.stateLabel}"
></span>
</td>
<td
th:text=
"${coupon.title}"
></td>
<td
th:text=
"${coupon.couTypeLabel}"
></td>
<td
th:text=
"${coupon.bindAt != null ? #temporals.format(coupon.bindAt, 'yyyy-MM-dd HH:mm:ss') : '-'}"
></td>
<td
th:text=
"${coupon.duedAt != null ? #temporals.format(coupon.duedAt, 'yyyy-MM-dd HH:mm:ss') : '-'}"
></td>
<td
th:text=
"${coupon.usedAt != null ? #temporals.format(coupon.usedAt, 'yyyy-MM-dd HH:mm:ss') : '-'}"
></td>
</tr>
<tr
th:if=
"${orderDetailsVo.priorityCouponList == null or #lists.isEmpty(orderDetailsVo.priorityCouponList)}"
>
<td
colspan=
"10"
class=
"text-center"
>
暂无优先券记录
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</section>
<th:block
th:include=
"include :: footer"
/>
...
...
liquidnet-bus-client/liquidnet-client-admin/liquidnet-client-admin-zhengzai/src/main/java/com/liquidnet/client/admin/zhengzai/adam/service/IAdamMemberPriceAdminService.java
View file @
e9c4b455
...
...
@@ -6,5 +6,5 @@ import com.liquidnet.service.adam.entity.AdamMemberPrice;
public
interface
IAdamMemberPriceAdminService
extends
IService
<
AdamMemberPrice
>
{
boolean
edit
(
AdamMemberPriceBuildParam
param
);
AdamMemberPrice
edit
(
AdamMemberPriceBuildParam
param
);
}
liquidnet-bus-client/liquidnet-client-admin/liquidnet-client-admin-zhengzai/src/main/java/com/liquidnet/client/admin/zhengzai/adam/service/IAdamMemberRightsAdminService.java
View file @
e9c4b455
...
...
@@ -6,5 +6,5 @@ import com.liquidnet.service.adam.entity.AdamMemberRights;
public
interface
IAdamMemberRightsAdminService
extends
IService
<
AdamMemberRights
>
{
boolean
edit
(
AdamMemberRightsBuildParam
param
);
AdamMemberRights
edit
(
AdamMemberRightsBuildParam
param
);
}
liquidnet-bus-client/liquidnet-client-admin/liquidnet-client-admin-zhengzai/src/main/java/com/liquidnet/client/admin/zhengzai/adam/service/impl/AdamMemberOrderAdminServiceImpl.java
View file @
e9c4b455
...
...
@@ -18,9 +18,12 @@ import com.liquidnet.service.adam.dto.vo.AdamMemberOrderExtVo;
import
com.liquidnet.service.adam.dto.vo.AdamMemberOrderVo
;
import
com.liquidnet.service.adam.dto.vo.AdamUserInfoVo
;
import
com.liquidnet.service.adam.dto.vo.AdamUserMemberVo
;
import
com.liquidnet.service.adam.dto.vo.admin.AdamMemberPriorityCouponAdminVo
;
import
com.liquidnet.service.adam.dto.vo.admin.MemberOrderDetailAdminVo
;
import
com.liquidnet.service.adam.entity.*
;
import
com.liquidnet.service.adam.mapper.*
;
import
com.liquidnet.service.candy.dto.admin.CandyPriorityCouponUsageDto
;
import
com.liquidnet.service.candy.mapper.CandyUserCouponMapper
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
...
...
@@ -63,6 +66,8 @@ public class AdamMemberOrderAdminServiceImpl extends ServiceImpl<AdamMemberOrder
private
AdamMemberOrderExtMapper
adamMemberOrderExtMapper
;
@Autowired
private
AdamMemberRefundMapper
adamMemberRefundMapper
;
@Autowired
private
CandyUserCouponMapper
candyUserCouponMapper
;
@Autowired
private
RedisDataSourceUtil
redisDataSourceUtil
;
...
...
@@ -124,9 +129,92 @@ public class AdamMemberOrderAdminServiceImpl extends ServiceImpl<AdamMemberOrder
detailAdminVo
.
setAdamUserInfoVo
(
adamUserInfoVo
);
detailAdminVo
.
setAdamUser
(
adamUser
);
detailAdminVo
.
setAdamMemberOrderExtVo
(
AdamMemberOrderExtVo
.
getNew
().
copy
(
adamMemberOrderExt
));
detailAdminVo
.
setPriorityCouponList
(
buildPriorityCouponList
(
adamMemberOrderVo
.
getUid
()));
return
detailAdminVo
;
}
private
List
<
AdamMemberPriorityCouponAdminVo
>
buildPriorityCouponList
(
String
uid
)
{
List
<
AdamMemberPriorityCouponAdminVo
>
result
=
new
ArrayList
<>();
if
(
uid
==
null
||
uid
.
isEmpty
())
{
return
result
;
}
List
<
CandyPriorityCouponUsageDto
>
usageList
=
candyUserCouponMapper
.
selectPriorityCouponUsageByUid
(
uid
);
if
(
CollectionUtils
.
isEmpty
(
usageList
))
{
return
result
;
}
for
(
CandyPriorityCouponUsageDto
usage
:
usageList
)
{
AdamMemberPriorityCouponAdminVo
vo
=
new
AdamMemberPriorityCouponAdminVo
();
vo
.
setUcouponId
(
usage
.
getUcouponId
());
vo
.
setName
(
usage
.
getName
());
vo
.
setMobile
(
usage
.
getMobile
());
vo
.
setExclusive
(
usage
.
getExclusive
());
vo
.
setExclusiveLabel
(
resolveExclusiveLabel
(
usage
.
getExclusive
()));
vo
.
setState
(
usage
.
getState
());
vo
.
setStateLabel
(
resolveCouponStateLabel
(
usage
.
getState
()));
vo
.
setTitle
(
usage
.
getTitle
());
vo
.
setCouType
(
usage
.
getCouType
());
vo
.
setCouTypeLabel
(
resolveCouTypeLabel
(
usage
.
getCouType
()));
vo
.
setBindAt
(
usage
.
getBindAt
());
vo
.
setDuedAt
(
usage
.
getDuedAt
());
vo
.
setUsedAt
(
usage
.
getUsedAt
());
result
.
add
(
vo
);
}
return
result
;
}
private
String
resolveExclusiveLabel
(
Integer
exclusive
)
{
if
(
null
==
exclusive
)
{
return
"-"
;
}
if
(
exclusive
==
1
)
{
return
"会员礼包"
;
}
if
(
exclusive
==
0
)
{
return
"常规"
;
}
return
String
.
valueOf
(
exclusive
);
}
private
String
resolveCouponStateLabel
(
Integer
state
)
{
if
(
null
==
state
)
{
return
"-"
;
}
switch
(
state
)
{
case
1
:
return
"可用"
;
case
2
:
return
"无效"
;
case
3
:
return
"已过期"
;
case
5
:
return
"已使用"
;
case
9
:
return
"移除不展示(过期或已使用)"
;
default
:
return
String
.
valueOf
(
state
);
}
}
private
String
resolveCouTypeLabel
(
Integer
couType
)
{
if
(
null
==
couType
)
{
return
"-"
;
}
switch
(
couType
)
{
case
1
:
return
"代金卷"
;
case
2
:
return
"满减卷"
;
case
3
:
return
"兑换卷"
;
case
4
:
return
"折扣卷"
;
case
101
:
return
"优先卷"
;
default
:
return
String
.
valueOf
(
couType
);
}
}
@Override
@Transactional
public
AjaxResult
refundProcessing
(
AdamMemberOrderRefundParam
param
,
AdamMemberOrder
memberOrder
)
{
...
...
liquidnet-bus-client/liquidnet-client-admin/liquidnet-client-admin-zhengzai/src/main/java/com/liquidnet/client/admin/zhengzai/adam/service/impl/AdamMemberPriceAdminServiceImpl.java
View file @
e9c4b455
This diff is collapsed.
Click to expand it.
liquidnet-bus-client/liquidnet-client-admin/liquidnet-client-admin-zhengzai/src/main/java/com/liquidnet/client/admin/zhengzai/adam/service/impl/AdamMemberRightsAdminServiceImpl.java
View file @
e9c4b455
...
...
@@ -19,8 +19,9 @@ import org.springframework.util.CollectionUtils;
import
java.time.LocalDateTime
;
import
java.util.ArrayList
;
import
java.util.Comparator
;
import
java.util.List
;
import
java.util.stream.
IntStream
;
import
java.util.stream.
Collectors
;
@Service
public
class
AdamMemberRightsAdminServiceImpl
extends
ServiceImpl
<
AdamMemberRightsMapper
,
AdamMemberRights
>
implements
IAdamMemberRightsAdminService
{
...
...
@@ -30,7 +31,7 @@ public class AdamMemberRightsAdminServiceImpl extends ServiceImpl<AdamMemberRigh
private
RedisDataSourceUtil
redisDataSourceUtil
;
@Override
public
boolean
edit
(
AdamMemberRightsBuildParam
param
)
{
public
AdamMemberRights
edit
(
AdamMemberRightsBuildParam
param
)
{
String
loginName
=
ShiroUtils
.
getLoginName
();
LocalDateTime
now
=
LocalDateTime
.
now
();
String
mrightsId
=
param
.
getMrightsId
();
...
...
@@ -40,6 +41,7 @@ public class AdamMemberRightsAdminServiceImpl extends ServiceImpl<AdamMemberRigh
if
(
isAddFlag
)
{
saveOrUpdateInfo
.
setMrightsId
(
IDGenerator
.
nextMilliId2
());
saveOrUpdateInfo
.
setMemberId
(
param
.
getMemberId
());
saveOrUpdateInfo
.
setMemberPriceId
(
StringUtils
.
trimToNull
(
param
.
getMemberPriceId
()));
saveOrUpdateInfo
.
setState
(
1
);
saveOrUpdateInfo
.
setSeqNo
(
param
.
getSeqNo
());
...
...
@@ -57,57 +59,44 @@ public class AdamMemberRightsAdminServiceImpl extends ServiceImpl<AdamMemberRigh
.
eq
(
AdamMemberRights:
:
getMemberId
,
param
.
getMemberId
())
.
eq
(
AdamMemberRights:
:
getMrightsId
,
param
.
getMrightsId
());
saveOrUpdateInfo
.
setMrightsId
(
param
.
getMrightsId
());
saveOrUpdateInfo
.
setMemberId
(
param
.
getMemberId
());
saveOrUpdateInfo
.
setState
(
param
.
getState
());
saveOrUpdateInfo
.
setOperator
(
loginName
);
saveOrUpdateInfo
.
setUpdatedAt
(
now
);
if
(
param
.
getState
()
!=
2
)
{
saveOrUpdateInfo
.
setMemberPriceId
(
StringUtils
.
trimToNull
(
param
.
getMemberPriceId
()));
saveOrUpdateInfo
.
setSeqNo
(
param
.
getSeqNo
());
saveOrUpdateInfo
.
setTitle
(
param
.
getTitle
());
saveOrUpdateInfo
.
setSubTitle
(
param
.
getSubTitle
());
saveOrUpdateInfo
.
setLabel
(
param
.
getLabel
());
saveOrUpdateInfo
.
setCover
(
param
.
getCover
());
saveOrUpdateInfo
.
setDetail
(
param
.
getDetail
());
// 允许清空绑定:用 set 显式更新可空字段
updateWrapper
.
set
(
AdamMemberRights:
:
getMemberPriceId
,
StringUtils
.
trimToNull
(
param
.
getMemberPriceId
()));
}
saveOrUpadateRst
=
adamMemberRightsMapper
.
update
(
saveOrUpdateInfo
,
updateWrapper
)
>
0
;
}
if
(
saveOrUpadateRst
)
{
// 同步REDIS:用户端:购买会员详情页:权益列表
List
<
AdamMemberRightsVo
>
vos
=
(
List
<
AdamMemberRightsVo
>)
redisDataSourceUtil
.
getRedisAdamUtil
().
get
(
AdamRedisConst
.
INFO_MEMBER_RIGHTS
.
concat
(
param
.
getMemberId
()));
if
(
CollectionUtils
.
isEmpty
(
vos
))
{
vos
=
new
ArrayList
<>();
}
if
(
isAddFlag
)
{
vos
.
add
(
AdamMemberRightsVo
.
getNew
().
copy
(
saveOrUpdateInfo
));
}
else
{
if
(
param
.
getState
()
==
2
)
{
// 移除
vos
.
removeIf
(
r
->
r
.
getMrightsId
().
equals
(
param
.
getMrightsId
()));
}
else
{
List
<
AdamMemberRightsVo
>
finalVos
=
vos
;
int
idx
=
IntStream
.
range
(
0
,
finalVos
.
size
())
.
filter
(
i
->
finalVos
.
get
(
i
).
getMrightsId
().
equals
(
mrightsId
))
.
findFirst
().
orElse
(-
1
);
if
(-
1
==
idx
)
{
vos
.
add
(
AdamMemberRightsVo
.
getNew
().
copy
(
saveOrUpdateInfo
));
}
else
{
AdamMemberRightsVo
existVo
=
vos
.
get
(
idx
);
existVo
.
setSeqNo
(
saveOrUpdateInfo
.
getSeqNo
());
existVo
.
setTitle
(
saveOrUpdateInfo
.
getTitle
());
existVo
.
setSubTitle
(
saveOrUpdateInfo
.
getSubTitle
());
existVo
.
setLabel
(
saveOrUpdateInfo
.
getLabel
());
existVo
.
setCover
(
saveOrUpdateInfo
.
getCover
());
existVo
.
setDetail
(
saveOrUpdateInfo
.
getDetail
());
vos
.
set
(
idx
,
existVo
);
}
}
if
(!
saveOrUpadateRst
)
{
return
null
;
}
redisDataSourceUtil
.
getRedisAdamUtil
().
set
(
AdamRedisConst
.
INFO_MEMBER_RIGHTS
.
concat
(
param
.
getMemberId
()),
vos
);
// 与价格包一致:从 DB 全量重载 Redis,避免增量补丁丢权益 / 缺 memberPriceId
refreshMemberRightsRedis
(
param
.
getMemberId
());
return
saveOrUpdateInfo
;
}
return
saveOrUpadateRst
;
private
void
refreshMemberRightsRedis
(
String
memberId
)
{
List
<
AdamMemberRights
>
onlineList
=
adamMemberRightsMapper
.
selectList
(
Wrappers
.
lambdaQuery
(
AdamMemberRights
.
class
)
.
eq
(
AdamMemberRights:
:
getMemberId
,
memberId
)
.
eq
(
AdamMemberRights:
:
getState
,
1
)
.
orderByAsc
(
AdamMemberRights:
:
getSeqNo
));
List
<
AdamMemberRightsVo
>
vos
=
CollectionUtils
.
isEmpty
(
onlineList
)
?
new
ArrayList
<>()
:
onlineList
.
stream
()
.
sorted
(
Comparator
.
comparing
(
AdamMemberRights:
:
getSeqNo
,
Comparator
.
nullsLast
(
Integer:
:
compareTo
)))
.
map
(
r
->
AdamMemberRightsVo
.
getNew
().
copy
(
r
))
.
collect
(
Collectors
.
toList
());
redisDataSourceUtil
.
getRedisAdamUtil
().
set
(
AdamRedisConst
.
INFO_MEMBER_RIGHTS
.
concat
(
memberId
),
vos
);
}
}
liquidnet-bus-config/liquidnet-config/liquidnet-client-admin-web-druid-dev.yml
View file @
e9c4b455
...
...
@@ -6,14 +6,14 @@ spring:
druid
:
# 主库数据源
master
:
url
:
jdbc:mysql://${liquidnet.mysql.master.urlHostAndPort}/${liquidnet.mysql.master.database-name}?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
url
:
jdbc:mysql://${liquidnet.mysql.master.urlHostAndPort}/${liquidnet.mysql.master.database-name}?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
&connectTimeout=5000&socketTimeout=10000
username
:
${liquidnet.mysql.master.username}
password
:
${liquidnet.mysql.master.password}
# 从库数据源
slave
:
# 从数据源开关/默认关闭
enabled
:
false
url
:
jdbc:mysql://${liquidnet.mysql.slave.urlHostAndPort}/${liquidnet.mysql.slave.database-name}?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
url
:
jdbc:mysql://${liquidnet.mysql.slave.urlHostAndPort}/${liquidnet.mysql.slave.database-name}?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
&connectTimeout=5000&socketTimeout=10000
username
:
${liquidnet.mysql.slave.username}
password
:
${liquidnet.mysql.slave.password}
# 初始连接数
...
...
liquidnet-bus-config/liquidnet-config/liquidnet-client-admin-web-druid-test.yml
View file @
e9c4b455
...
...
@@ -6,14 +6,14 @@ spring:
druid
:
# 主库数据源
master
:
url
:
jdbc:mysql://${liquidnet.mysql.master.urlHostAndPort}/${liquidnet.mysql.master.database-name}?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
url
:
jdbc:mysql://${liquidnet.mysql.master.urlHostAndPort}/${liquidnet.mysql.master.database-name}?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
&connectTimeout=5000&socketTimeout=10000
username
:
${liquidnet.mysql.master.username}
password
:
${liquidnet.mysql.master.password}
# 从库数据源
slave
:
# 从数据源开关/默认关闭
enabled
:
false
url
:
jdbc:mysql://${liquidnet.mysql.slave.urlHostAndPort}/${liquidnet.mysql.slave.database-name}?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
url
:
jdbc:mysql://${liquidnet.mysql.slave.urlHostAndPort}/${liquidnet.mysql.slave.database-name}?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
&connectTimeout=5000&socketTimeout=10000
username
:
${liquidnet.mysql.slave.username}
password
:
${liquidnet.mysql.slave.password}
# 初始连接数
...
...
liquidnet-bus-do/liquidnet-service-adam-do/src/main/java/com/liquidnet/service/adam/entity/AdamMemberRights.java
View file @
e9c4b455
...
...
@@ -32,6 +32,11 @@ public class AdamMemberRights implements Serializable {
*/
private
String
memberId
;
/**
* 绑定的价格包ID;空表示兼容老逻辑(该卡下任意价格包可回退使用)
*/
private
String
memberPriceId
;
/**
* 发放状态[0-INIT|1-NORMAL|2-INVALID]
*/
...
...
liquidnet-bus-do/liquidnet-service-candy-do/src/main/java/com/liquidnet/service/candy/dto/admin/CandyPriorityCouponUsageDto.java
0 → 100644
View file @
e9c4b455
package
com
.
liquidnet
.
service
.
candy
.
dto
.
admin
;
import
lombok.Data
;
import
java.io.Serializable
;
import
java.time.LocalDateTime
;
/**
* 优先券使用情况查询结果
*/
@Data
public
class
CandyPriorityCouponUsageDto
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
private
String
ucouponId
;
private
String
name
;
private
String
mobile
;
private
Integer
exclusive
;
private
Integer
state
;
private
String
title
;
private
Integer
couType
;
private
LocalDateTime
bindAt
;
private
LocalDateTime
duedAt
;
private
LocalDateTime
usedAt
;
}
liquidnet-bus-do/liquidnet-service-candy-do/src/main/java/com/liquidnet/service/candy/mapper/CandyUserCouponMapper.java
View file @
e9c4b455
...
...
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import
com.liquidnet.service.candy.dto.CandyUserCouponBasicDto
;
import
com.liquidnet.service.candy.dto.CouponDao
;
import
com.liquidnet.service.candy.dto.admin.CandyPriorityCouponUsageDto
;
import
com.liquidnet.service.candy.entity.CandyUserCoupon
;
import
org.apache.ibatis.annotations.Param
;
...
...
@@ -44,4 +45,9 @@ public interface CandyUserCouponMapper extends BaseMapper<CandyUserCoupon> {
* 查询羊毛卷信息
*/
List
<
CouponDao
>
WoolRoll
();
/**
* 按用户查优先券使用情况(cou_type=101)
*/
List
<
CandyPriorityCouponUsageDto
>
selectPriorityCouponUsageByUid
(
@Param
(
"uid"
)
String
uid
);
}
liquidnet-bus-do/liquidnet-service-candy-do/src/main/resources/com/liquidnet/service/candy/mapper/CandyUserCouponMapper.xml
View file @
e9c4b455
...
...
@@ -109,4 +109,24 @@
and d.status = 6
order by a.used_at;
</select>
<select
id=
"selectPriorityCouponUsageByUid"
resultType=
"com.liquidnet.service.candy.dto.admin.CandyPriorityCouponUsageDto"
>
SELECT
cuc.ucoupon_id AS ucouponId,
auml.`name` AS `name`,
auml.mobile AS mobile,
cuc.`exclusive` AS exclusive,
cuc.state AS state,
ac.title AS title,
ac.cou_type AS couType,
cuc.bind_at AS bindAt,
cuc.dued_at AS duedAt,
cuc.used_at AS usedAt
FROM candy_user_coupon AS cuc
LEFT JOIN adam_user_mobile_locate AS auml ON auml.uid = cuc.uid
JOIN candy_coupon AS ac ON ac.coupon_id = cuc.coupon_id
WHERE cuc.uid = #{uid,jdbcType=VARCHAR}
AND ac.cou_type = 101
ORDER BY cuc.bind_at DESC, cuc.ucoupon_id DESC
</select>
</mapper>
liquidnet-bus-service/liquidnet-service-adam/liquidnet-service-adam-impl/docu/db_adam_member_price_multi_package.sql
0 → 100644
View file @
e9c4b455
-- 多档会员:权益绑价格包 + 老数据洗到年档
-- 月卡/体验等价格包请在 admin「会员套餐」页新增,不要用本脚本灌业务数据。
-- ========== 1) DDL(若已执行过可跳过)==========
ALTER
TABLE
adam_member_rights
ADD
COLUMN
member_price_id
VARCHAR
(
64
)
NULL
COMMENT
'绑定价格包ID(必绑具体档;空仅历史兼容,执行下方洗数后应无空)'
AFTER
member_id
;
CREATE
INDEX
idx_amember_rights_price_id
ON
adam_member_rights
(
member_price_id
);
-- ========== 2) 洗数:NULL 权益绑到该会员「天数最大」的价格包(视为年档)==========
-- 若同一 member 有多条 days 并列最大,取 member_price_id 字典序最小的一条
UPDATE
adam_member_rights
r
INNER
JOIN
(
SELECT
p
.
member_id
,
MIN
(
p
.
member_price_id
)
AS
year_price_id
FROM
adam_member_price
p
INNER
JOIN
(
SELECT
member_id
,
MAX
(
days
)
AS
max_days
FROM
adam_member_price
WHERE
state
IN
(
1
,
2
)
GROUP
BY
member_id
)
m
ON
m
.
member_id
=
p
.
member_id
AND
m
.
max_days
=
p
.
days
WHERE
p
.
state
IN
(
1
,
2
)
GROUP
BY
p
.
member_id
)
y
ON
y
.
member_id
=
r
.
member_id
SET
r
.
member_price_id
=
y
.
year_price_id
WHERE
r
.
member_price_id
IS
NULL
AND
r
.
state
=
1
;
-- 检查是否还有空绑定(期望 0 行)
-- SELECT mid, mrights_id, member_id, title FROM adam_member_rights WHERE state = 1 AND member_price_id IS NULL;
-- ========== 3) Redis(会员价/权益读 Redis,Mongo 已注释不用)==========
-- 洗数后必须刷缓存,否则线上仍是旧 rights(缺 memberPriceId)。
-- 任选其一:
-- A) admin 打开会员套餐,随便保存一条该卡权益(会 refreshMemberRightsRedis)
-- B) 手工删 key(memberId 按实际替换,登登登一般是 1):
-- DEL adam:info:member:rights:1
-- DEL adam:info:member:price:1
-- (若有 V 版)DEL adam:info:member:rights:v:1
-- 下次请求会按代码从 DB/逻辑重建;价格包建议在 admin 保存一次价格以确保 price 列表正确。
-- ========== 4) 后续运营 ==========
-- admin 新增月卡/体验价格包后,在「编辑」弹窗内配置本档权益与券张数。
liquidnet-bus-service/liquidnet-service-adam/liquidnet-service-adam-impl/docu/db_ln_adam_initialdata.sql
View file @
e9c4b455
...
...
@@ -353,6 +353,9 @@ alter table adam_member add limite_at datetime(3) null comment '限购结束时
alter
table
adam_member_price
modify
price_fixed
decimal
(
8
,
2
)
null
comment
'购买价格'
;
alter
table
adam_member_price
add
price_special
decimal
(
8
,
2
)
null
comment
'特价:首次、首年优惠价'
after
price_fixed
;
#
多档会员:权益可绑价格包(详见
db_adam_member_price_multi_package
.
sql
)
#
alter
table
adam_member_rights
add
member_price_id
varchar
(
64
)
null
comment
'绑定价格包ID,空表示全档回退共用'
after
member_id
;
#
会员码表调整
alter
table
adam_member_code
modify
state
tinyint
null
comment
'状态[0-可用|1-已用|2-无效]'
;
create
index
idx_amember_code_id
on
adam_member_code
(
code
);
...
...
liquidnet-bus-service/liquidnet-service-adam/liquidnet-service-adam-impl/src/main/java/com/liquidnet/service/adam/controller/AdamMemberController.java
View file @
e9c4b455
...
...
@@ -24,6 +24,9 @@ import org.springframework.web.bind.annotation.RequestParam;
import
org.springframework.web.bind.annotation.RestController
;
import
javax.validation.constraints.NotBlank
;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.List
;
@ApiSupport
(
order
=
10030
)
@Api
(
tags
=
"会员信息"
)
...
...
@@ -52,30 +55,61 @@ public class AdamMemberController {
// memberVo.setBuySwitch(adamRdmService.getSwitch(AdamRedisConst.SWITCH_BUY_MEMBER));
memberVo
.
calculateLimitMarker
(
adamRdmService
.
getMaxMemberLimitation
());
memberVo
.
setPriceVoList
(
adamRdmService
.
getMemberPriceVoByMemberId
(
memberVo
.
getMemberId
()));
String
currentUid
=
CurrentUtil
.
getCurrentUid
();
int
rightsVFlag
=
0
;
if
(!
StringUtils
.
isEmpty
(
currentUid
))
{
AdamUserMemberVo
userMemberVo
=
adamRdmService
.
getUserMemberVoByUid
(
currentUid
);
memberVo
.
setUserMemberVo
(
userMemberVo
);
if
(
null
==
userMemberVo
||
!
userMemberVo
.
isActive
())
{
memberVo
.
setRightsVoList
(
adamRdmService
.
getMemberRightsVoByMemberId
(
memberVo
.
getMemberId
(),
0
));
}
else
if
(
userMemberVo
.
isActive
())
{
memberVo
.
setRightsVoList
(
userMemberVo
.
isOldMember
()
?
adamRdmService
.
getMemberRightsVoByMemberId
(
memberVo
.
getMemberId
(),
1
)
:
adamRdmService
.
getMemberRightsVoByMemberId
(
memberVo
.
getMemberId
(),
0
)
);
if
(
null
!=
userMemberVo
&&
userMemberVo
.
isActive
()
&&
userMemberVo
.
isOldMember
())
{
rightsVFlag
=
1
;
}
}
else
{
memberVo
.
setUserMemberVo
(
null
);
memberVo
.
setRightsVoList
(
adamRdmService
.
getMemberRightsVoByMemberId
(
memberVo
.
getMemberId
(),
0
));
}
// 权益只挂在价格包下:priceVoList[].rightsVoList
memberVo
.
setPriceVoList
(
attachRightsToPriceList
(
adamRdmService
.
getMemberPriceVoByMemberId
(
memberVo
.
getMemberId
()),
adamRdmService
.
getMemberRightsVoByMemberId
(
memberVo
.
getMemberId
(),
rightsVFlag
),
rightsVFlag
));
}
return
ResponseDto
.
success
(
memberVo
);
}
/**
* 将权益挂到对应价格包。
* vFlag=0:按 memberPriceId 精确匹配;
* vFlag=1:老会员展示用权益无价格包绑定,挂到每个价格包下。
*/
private
List
<
AdamMemberPriceVo
>
attachRightsToPriceList
(
List
<
AdamMemberPriceVo
>
priceVoList
,
List
<
AdamMemberRightsVo
>
rightsVoList
,
int
rightsVFlag
)
{
if
(
priceVoList
==
null
||
priceVoList
.
isEmpty
())
{
return
priceVoList
;
}
List
<
AdamMemberRightsVo
>
allRights
=
rightsVoList
==
null
?
Collections
.
emptyList
()
:
rightsVoList
;
for
(
AdamMemberPriceVo
priceVo
:
priceVoList
)
{
if
(
rightsVFlag
==
1
)
{
priceVo
.
setRightsVoList
(
allRights
);
continue
;
}
String
priceId
=
priceVo
.
getMemberPriceId
();
if
(
StringUtils
.
isEmpty
(
priceId
))
{
priceVo
.
setRightsVoList
(
Collections
.
emptyList
());
continue
;
}
List
<
AdamMemberRightsVo
>
matched
=
new
ArrayList
<>();
for
(
AdamMemberRightsVo
rightsVo
:
allRights
)
{
if
(
priceId
.
equals
(
rightsVo
.
getMemberPriceId
()))
{
matched
.
add
(
rightsVo
);
}
}
priceVo
.
setRightsVoList
(
matched
);
}
return
priceVoList
;
}
@ApiOperationSupport
(
order
=
2
)
@ApiOperation
(
value
=
"会员协议"
)
@GetMapping
(
"agreement"
)
...
...
liquidnet-bus-service/liquidnet-service-adam/liquidnet-service-adam-impl/src/main/java/com/liquidnet/service/adam/service/impl/AdamMemberOrderServiceImpl.java
View file @
e9c4b455
...
...
@@ -376,7 +376,8 @@ public class AdamMemberOrderServiceImpl implements IAdamMemberOrderService {
if
(
now
.
isAfter
(
AdamUserMemberVo
.
spotTime
))
{
// 权益券发放
toMqSqls
.
add
(
SqlMapping
.
get
(
"candy_mgt_coupon.add_for_member"
));
LinkedList
<
Object
[]>
initMemberRightsCouponObjs
=
this
.
issueMemberRightsCouponProcessing
(
now
,
userInfoVo
.
getMobile
(),
handleMemberOrderVo
.
getMemberId
());
LinkedList
<
Object
[]>
initMemberRightsCouponObjs
=
this
.
issueMemberRightsCouponProcessing
(
now
,
userInfoVo
.
getMobile
(),
handleMemberOrderVo
.
getMemberId
(),
handleMemberOrderVo
.
getMemberPriceId
());
queueUtils
.
sendMsgByRedis
(
MQConst
.
AdamQueue
.
SQL_UMEMBER
.
getKey
(),
SqlMapping
.
gets
(
toMqSqls
,
operationObjs
,
initMemberOrderObjs
,
initMemberOrderExtObjs
,
updateUserInfoObjs
,
updateUserMobileLocateObjs
,
initMemberRightsCouponObjs
)
...
...
@@ -576,7 +577,8 @@ public class AdamMemberOrderServiceImpl implements IAdamMemberOrderService {
// 权益券发放
toMqSqls
.
add
(
SqlMapping
.
get
(
"candy_mgt_coupon.add_for_member"
));
LinkedList
<
Object
[]>
initMemberRightsCouponObjs
=
this
.
issueMemberRightsCouponProcessing
(
now
,
userInfoVo
.
getMobile
(),
initMemberOrderVo
.
getMemberId
());
LinkedList
<
Object
[]>
initMemberRightsCouponObjs
=
this
.
issueMemberRightsCouponProcessing
(
now
,
userInfoVo
.
getMobile
(),
initMemberOrderVo
.
getMemberId
(),
initMemberOrderVo
.
getMemberPriceId
());
s
=
System
.
currentTimeMillis
();
queueUtils
.
sendMsgByRedis
(
MQConst
.
AdamQueue
.
SQL_UMEMBER
.
getKey
(),
...
...
@@ -652,27 +654,25 @@ public class AdamMemberOrderServiceImpl implements IAdamMemberOrderService {
}
/**
* 发放会员专属特权券
*
* @param now 时间
* @param mobile 用户手机号
* @param memberId 会员ID
* @return LinkedList<Object[]>
* 发放会员专属特权券(仅发放绑定当前价格包的权益)
*/
private
LinkedList
<
Object
[]>
issueMemberRightsCouponProcessing
(
LocalDateTime
now
,
String
mobile
,
String
memberId
)
{
private
LinkedList
<
Object
[]>
issueMemberRightsCouponProcessing
(
LocalDateTime
now
,
String
mobile
,
String
memberId
,
String
memberPriceId
)
{
LinkedList
<
Object
[]>
initMemberRightsCouponObjs
=
CollectionUtil
.
linkedListObjectArr
();
List
<
AdamMemberRightsVo
>
memberRightsVoList
=
adamRdmService
.
getMemberRightsVoByMemberId
(
memberId
,
0
);
memberRightsVoList
=
filterRightsByMemberPriceId
(
memberRightsVoList
,
memberPriceId
);
if
(!
CollectionUtils
.
isEmpty
(
memberRightsVoList
))
{
memberRightsVoList
.
forEach
(
r
->
{
List
<
AdamMemberRightsCouponVo
>
memberRightsCouponVoList
=
adamRdmService
.
getMemberRightsCouponVoByRightsId
(
r
.
getMrightsId
());
if
(!
CollectionUtils
.
isEmpty
(
memberRightsCouponVoList
))
{
// 该权益下关联券统计
Map
<
String
,
Long
>
rightsCouponCtMap
=
memberRightsCouponVoList
.
stream
()
.
collect
(
Collectors
.
groupingBy
(
AdamMemberRightsCouponVo:
:
getCouponId
,
Collectors
.
counting
()));
rightsCouponCtMap
.
forEach
((
couponId
,
num
)
->
{
if
(
num
<=
0
)
{
return
;
}
initMemberRightsCouponObjs
.
add
(
new
Object
[]{
r
.
getMrightsId
(),
couponId
,
num
,
mobile
,
now
,
mobile
,
now
}
);
...
...
@@ -683,4 +683,16 @@ public class AdamMemberOrderServiceImpl implements IAdamMemberOrderService {
return
initMemberRightsCouponObjs
;
}
/**
* 只使用绑定当前价格包的权益(需先执行洗数把历史 NULL 绑到年档)
*/
private
List
<
AdamMemberRightsVo
>
filterRightsByMemberPriceId
(
List
<
AdamMemberRightsVo
>
rightsVoList
,
String
memberPriceId
)
{
if
(
CollectionUtils
.
isEmpty
(
rightsVoList
)
||
StringUtils
.
isEmpty
(
memberPriceId
))
{
return
Collections
.
emptyList
();
}
return
rightsVoList
.
stream
()
.
filter
(
r
->
memberPriceId
.
equals
(
r
.
getMemberPriceId
()))
.
collect
(
Collectors
.
toList
());
}
}
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