记得上下班打卡 | 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
9c50d04f
Commit
9c50d04f
authored
Apr 11, 2022
by
jiangxiulong
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/dev_nft_411' into dev_nft_411
parents
98118fb4
f3f7bc0b
Changes
22
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
22 changed files
with
1183 additions
and
32 deletions
+1183
-32
GoblinRedisConst.java
...m/liquidnet/service/goblin/constant/GoblinRedisConst.java
+22
-0
GoblinGoodsAnticipateAddParam.java
...vice/goblin/dto/manage/GoblinGoodsAnticipateAddParam.java
+59
-0
GoblinGoodsAnticipateParam.java
...service/goblin/dto/manage/GoblinGoodsAnticipateParam.java
+37
-0
GoblinGoodsAnticipateUpdateParam.java
...e/goblin/dto/manage/GoblinGoodsAnticipateUpdateParam.java
+38
-0
GoblinGoodsAnticipateValueParam.java
...ce/goblin/dto/manage/GoblinGoodsAnticipateValueParam.java
+76
-0
GoblinGoodsAnticipateValueVo.java
...ce/goblin/dto/manage/vo/GoblinGoodsAnticipateValueVo.java
+82
-0
GoblinGoodAnticipateUserVo.java
...net/service/goblin/dto/vo/GoblinGoodAnticipateUserVo.java
+43
-0
GoblinGoodsAnticipateVo.java
...uidnet/service/goblin/dto/vo/GoblinGoodsAnticipateVo.java
+100
-0
IGoblinGoodsAnticipateService.java
...service/goblin/service/IGoblinGoodsAnticipateService.java
+45
-0
IGoblinGoodsAnticipateUserService.java
...ice/goblin/service/IGoblinGoodsAnticipateUserService.java
+13
-0
IGoblinGoodsAnticipateValueService.java
...ce/goblin/service/IGoblinGoodsAnticipateValueService.java
+13
-0
db_ln_goblin_initialdata.sql
...net-service-goblin-impl/docu/db_ln_goblin_initialdata.sql
+47
-0
GoblinGoodsAnticipateController.java
...in/controller/manage/GoblinGoodsAnticipateController.java
+96
-0
GoblinGoodsAnticipateServiceImpl.java
...goblin/service/impl/GoblinGoodsAnticipateServiceImpl.java
+279
-0
GoblinGoodsAnticipateUserServiceImpl.java
...in/service/impl/GoblinGoodsAnticipateUserServiceImpl.java
+17
-0
GoblinGoodsAnticipateValueServiceImpl.java
...n/service/impl/GoblinGoodsAnticipateValueServiceImpl.java
+17
-0
GoblinMongoUtils.java
...a/com/liquidnet/service/goblin/util/GoblinMongoUtils.java
+105
-3
GoblinOrderUtils.java
...a/com/liquidnet/service/goblin/util/GoblinOrderUtils.java
+1
-4
GoblinRedisUtils.java
...a/com/liquidnet/service/goblin/util/GoblinRedisUtils.java
+49
-0
bootstrap-service-goblin.yml
...blin-impl/src/main/resources/bootstrap-service-goblin.yml
+6
-6
sqlmap.properties
...-service-goblin-impl/src/main/resources/sqlmap.properties
+31
-19
TestGoblinGoodsAnticipate.java
...-goblin-impl/src/test/java/TestGoblinGoodsAnticipate.java
+7
-0
No files found.
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/constant/GoblinRedisConst.java
View file @
9c50d04f
...
...
@@ -205,6 +205,28 @@ public class GoblinRedisConst {
*/
public
static
final
String
USER_DIGITAL_ARTWORK_GENMARK
=
PREFIX
.
concat
(
"u_d_art_gm:"
);
/* ----------------------------------------------------------------- */
/**
* 用户预约标识
* {goblin:user:anticipate:${skuId}:${uid},(goblin_goods_anticipate_user)}
*/
public
static
final
String
USER_ANTICIPATE_STATE
=
PREFIX
.
concat
(
"user:anticipate:"
);
/**
* 真实预约人数
* {goblin:anticipate:people:${autId},numPeople}
*/
public
static
final
String
ANTICIPATE_PEOPLE
=
PREFIX
.
concat
(
"anticipate:people:"
);
/**
* 记录sku
*/
public
static
final
String
ANTICIPATE_SKUID
=
PREFIX
.
concat
(
"anticipate:skuId:"
);
/* ----------------------------------------------------------------- */
/* ----------------------------------------------------------------- */
}
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/dto/manage/GoblinGoodsAnticipateAddParam.java
0 → 100644
View file @
9c50d04f
package
com
.
liquidnet
.
service
.
goblin
.
dto
.
manage
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
com.liquidnet.commons.lang.util.DateUtil
;
import
com.liquidnet.service.goblin.dto.manage.vo.GoblinGoodsAnticipateValueVo
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
javax.validation.constraints.NotBlank
;
import
java.time.LocalDate
;
import
java.time.LocalDateTime
;
import
java.util.List
;
/**
*
* @author liquidnet
* @since 2022-04-07
*/
@ApiModel
(
value
=
"GoblinGoodsAnticipateParam"
,
description
=
"预约"
)
@Data
public
class
GoblinGoodsAnticipateAddParam
{
/**
* 预约名称
*/
@ApiModelProperty
(
value
=
"预约名称"
)
@NotBlank
(
message
=
"预约名称"
)
private
String
name
;
/**
* 预约规则
*/
@ApiModelProperty
(
value
=
"预约规则"
)
@NotBlank
(
message
=
"预约规则"
)
private
String
rule
;
/**
* 预约人数
*/
@ApiModelProperty
(
value
=
"预约人数"
)
private
Long
aboutPeople
;
/**
* 预约开始时间
*/
@ApiModelProperty
(
value
=
"预约开始时间"
)
@JsonFormat
(
shape
=
JsonFormat
.
Shape
.
STRING
,
pattern
=
DateUtil
.
DATE_FULL_STR
)
private
LocalDateTime
aboutStartDate
;
/**
* 预约结束时间
*/
@ApiModelProperty
(
value
=
"预约结束时间"
)
@JsonFormat
(
shape
=
JsonFormat
.
Shape
.
STRING
,
pattern
=
DateUtil
.
DATE_FULL_STR
)
private
LocalDateTime
aboutEndDate
;
}
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/dto/manage/GoblinGoodsAnticipateParam.java
0 → 100644
View file @
9c50d04f
package
com
.
liquidnet
.
service
.
goblin
.
dto
.
manage
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
javax.validation.constraints.Max
;
import
javax.validation.constraints.Min
;
import
javax.validation.constraints.NotNull
;
/**
* <p>
* 预约表
* </p>
*
* @author liquidnet
* @since 2022-04-07
*/
@ApiModel
(
value
=
"GoblinGoodsAnticipateParam"
,
description
=
"预约"
)
@Data
public
class
GoblinGoodsAnticipateParam
{
@ApiModelProperty
(
position
=
11
,
required
=
true
,
value
=
"当前记录起始索引"
,
example
=
"1"
)
@Min
(
value
=
1
,
message
=
"起始索引无效"
)
@NotNull
(
message
=
"起始索引无效"
)
private
Integer
pageNum
;
@ApiModelProperty
(
position
=
12
,
required
=
true
,
value
=
"每页显示记录数"
,
example
=
"20"
)
@Max
(
value
=
100
,
message
=
"显示记录数无效"
)
@NotNull
(
message
=
"显示记录数无效"
)
private
Integer
pageSize
;
/**
* 预约名称
*/
private
String
name
;
}
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/dto/manage/GoblinGoodsAnticipateUpdateParam.java
0 → 100644
View file @
9c50d04f
package
com
.
liquidnet
.
service
.
goblin
.
dto
.
manage
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
javax.validation.constraints.NotBlank
;
import
java.time.LocalDateTime
;
/**
*
* @author liquidnet
* @since 2022-04-07
*/
@ApiModel
(
value
=
"GoblinGoodsAnticipateParam"
,
description
=
"预约"
)
@Data
public
class
GoblinGoodsAnticipateUpdateParam
{
@ApiModelProperty
(
value
=
"预约id"
)
@NotBlank
(
message
=
"预约id"
)
private
String
antId
;
/**
* 预约名称
*/
@ApiModelProperty
(
value
=
"预约名称"
)
@NotBlank
(
message
=
"预约名称"
)
private
String
name
;
/**
* 预约规则
*/
@ApiModelProperty
(
value
=
"预约规则"
)
@NotBlank
(
message
=
"预约规则"
)
private
String
rule
;
}
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/dto/manage/GoblinGoodsAnticipateValueParam.java
0 → 100644
View file @
9c50d04f
package
com
.
liquidnet
.
service
.
goblin
.
dto
.
manage
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
java.time.LocalDate
;
import
java.time.LocalDateTime
;
import
java.io.Serializable
;
import
java.util.List
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
com.liquidnet.commons.lang.util.DateUtil
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
javax.validation.constraints.NotBlank
;
/**
* <p>
* 预约关联sku和spu表
* </p>
*
* @author liquidnet
* @since 2022-04-08
*/
@Data
public
class
GoblinGoodsAnticipateValueParam
{
private
static
final
long
serialVersionUID
=
1L
;
/**
* antId
*/
@ApiModelProperty
(
value
=
"antId"
)
@NotBlank
(
message
=
"antId不能为空"
)
private
String
antId
;
/**
* sku名称
*/
@ApiModelProperty
(
value
=
"sku名称"
)
@NotBlank
(
message
=
"skuName不能为空"
)
private
String
skuName
;
/**
* sku_id 对应 goblin_goods_sku.sku_id
*/
@ApiModelProperty
(
value
=
"sku_id 对应 goblin_goods_sku.sku_id"
)
@NotBlank
(
message
=
"skuId不能为空"
)
private
String
skuId
;
/**
* spu_id对应 goblin_goods_spu_id
*/
@ApiModelProperty
(
value
=
"spu_id对应 goblin_goods_spu_id"
)
@NotBlank
(
message
=
"spuId不能为空"
)
private
String
spuId
;
/**
* 预约开始时间
*/
@ApiModelProperty
(
value
=
"预约开始时间"
)
@JsonFormat
(
shape
=
JsonFormat
.
Shape
.
STRING
,
pattern
=
DateUtil
.
DATE_FULL_STR
)
@NotBlank
(
message
=
"预约开始时间不能为空"
)
private
LocalDateTime
aboutStartDate
;
/**
* 预约结束时间
*/
@ApiModelProperty
(
value
=
"预约结束时间"
)
@JsonFormat
(
shape
=
JsonFormat
.
Shape
.
STRING
,
pattern
=
DateUtil
.
DATE_FULL_STR
)
@NotBlank
(
message
=
"预约结束时间不能为空"
)
private
LocalDateTime
aboutEndDate
;
}
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/dto/manage/vo/GoblinGoodsAnticipateValueVo.java
0 → 100644
View file @
9c50d04f
package
com
.
liquidnet
.
service
.
goblin
.
dto
.
manage
.
vo
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
com.liquidnet.commons.lang.util.DateUtil
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.time.LocalDateTime
;
/**
* <p>
* 预约关联sku和spu表
* </p>
*
* @author liquidnet
* @since 2022-04-08
*/
@Data
public
class
GoblinGoodsAnticipateValueVo
{
private
static
final
long
serialVersionUID
=
1L
;
/**
* antId
*/
@ApiModelProperty
(
value
=
"antId"
)
private
String
antId
;
/**
* sku名称
*/
@ApiModelProperty
(
value
=
"sku名称"
)
private
String
skuName
;
/**
* sku_id 对应 goblin_goods_sku.sku_id
*/
@ApiModelProperty
(
value
=
"sku_id 对应 goblin_goods_sku.sku_id"
)
private
String
skuId
;
/**
* spu_id对应 goblin_goods_spu_id
*/
@ApiModelProperty
(
value
=
"spu_id对应 goblin_goods_spu_id"
)
private
String
spuId
;
/**
* 预约开始时间
*/
@ApiModelProperty
(
value
=
"预约开始时间"
)
@JsonFormat
(
shape
=
JsonFormat
.
Shape
.
STRING
,
pattern
=
DateUtil
.
DATE_FULL_STR
)
private
LocalDateTime
aboutStartDate
;
/**
* 预约结束时间
*/
@ApiModelProperty
(
value
=
"预约结束时间"
)
@JsonFormat
(
shape
=
JsonFormat
.
Shape
.
STRING
,
pattern
=
DateUtil
.
DATE_FULL_STR
)
private
LocalDateTime
aboutEndDate
;
/**
* 创建时间
*/
@ApiModelProperty
(
value
=
"创建时间"
)
@JsonFormat
(
shape
=
JsonFormat
.
Shape
.
STRING
,
pattern
=
DateUtil
.
DATE_FULL_STR
)
private
LocalDateTime
createdDate
;
/**
* 修改时间
*/
@ApiModelProperty
(
value
=
"修改时间"
)
@JsonFormat
(
shape
=
JsonFormat
.
Shape
.
STRING
,
pattern
=
DateUtil
.
DATE_FULL_STR
)
private
LocalDateTime
updateDate
;
/**
* 删除(0:未删除1:已删除)
*/
@ApiModelProperty
(
value
=
"删除(0:未删除1:已删除)"
)
private
Integer
delTag
;
}
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/dto/vo/GoblinGoodAnticipateUserVo.java
0 → 100644
View file @
9c50d04f
package
com
.
liquidnet
.
service
.
goblin
.
dto
.
vo
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.io.Serializable
;
/**
* @Author: GH
* @Date: 2022/4/10 18:18
* @Description:
*/
@Data
@NoArgsConstructor
public
class
GoblinGoodAnticipateUserVo
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
public
static
final
Integer
STATE_VALID
=
1
;
public
static
final
Integer
STATE_INVALID
=
1
;
@ApiModelProperty
(
value
=
"uid"
)
private
String
uid
;
@ApiModelProperty
(
value
=
"用户手机号"
)
private
String
phone
;
@ApiModelProperty
(
value
=
"用户预约的skuId"
)
private
String
skuId
;
@ApiModelProperty
(
value
=
"用户状态"
)
private
Integer
state
;
public
GoblinGoodAnticipateUserVo
(
String
uid
,
String
phone
,
String
skuId
,
Integer
state
)
{
this
.
uid
=
uid
;
this
.
phone
=
phone
;
this
.
skuId
=
skuId
;
this
.
state
=
state
;
}
}
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/dto/vo/GoblinGoodsAnticipateVo.java
0 → 100644
View file @
9c50d04f
package
com
.
liquidnet
.
service
.
goblin
.
dto
.
vo
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
com.liquidnet.commons.lang.util.DateUtil
;
import
com.liquidnet.service.goblin.dto.manage.vo.GoblinGoodsAnticipateValueVo
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
javax.validation.constraints.NotBlank
;
import
java.io.Serializable
;
import
java.time.LocalDateTime
;
import
java.util.List
;
/**
* <p>
* 预约表
* </p>
*
* @author liquidnet
* @since 2022-04-07
*/
@Data
@EqualsAndHashCode
(
callSuper
=
false
)
public
class
GoblinGoodsAnticipateVo
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
/**
* id
*/
private
String
id
;
/**
* ant_id
*/
private
String
antId
;
/**
* 预约名称
*/
@ApiModelProperty
(
value
=
"预约名称"
)
private
String
name
;
/**
* 预约规则
*/
@ApiModelProperty
(
value
=
"预约规则"
)
private
String
rule
;
/**
* 预约人数
*/
@ApiModelProperty
(
value
=
"预约人数"
)
private
Long
aboutPeople
;
/**
* 预约人数
*/
@ApiModelProperty
(
value
=
"实际预约人数"
)
private
Long
actualPeople
;
/**
* 预约开始时间
*/
@ApiModelProperty
(
value
=
"预约开始时间"
)
@JsonFormat
(
shape
=
JsonFormat
.
Shape
.
STRING
,
pattern
=
DateUtil
.
DATE_FULL_STR
)
private
LocalDateTime
aboutStartDate
;
/**
* 预约结束时间
*/
@ApiModelProperty
(
value
=
"预约结束时间"
)
@JsonFormat
(
shape
=
JsonFormat
.
Shape
.
STRING
,
pattern
=
DateUtil
.
DATE_FULL_STR
)
private
LocalDateTime
aboutEndDate
;
/**
* 创建时间
*/
@ApiModelProperty
(
value
=
"创建时间"
)
@JsonFormat
(
shape
=
JsonFormat
.
Shape
.
STRING
,
pattern
=
DateUtil
.
DATE_FULL_STR
)
private
LocalDateTime
createdDate
;
/**
* 修改时间
*/
@ApiModelProperty
(
value
=
"修改时间"
)
@JsonFormat
(
shape
=
JsonFormat
.
Shape
.
STRING
,
pattern
=
DateUtil
.
DATE_FULL_STR
)
private
LocalDateTime
updateDate
;
/**
* 删除(0:未删除1:已删除)
*/
@ApiModelProperty
(
value
=
"删除(0:未删除1:已删除)"
)
private
Integer
delTag
;
@ApiModelProperty
(
value
=
"目前三种状态(0:未开始,1:预约中,2:已结束)"
)
private
Integer
state
;
}
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/service/IGoblinGoodsAnticipateService.java
0 → 100644
View file @
9c50d04f
package
com
.
liquidnet
.
service
.
goblin
.
service
;
import
com.github.pagehelper.PageInfo
;
import
com.liquidnet.service.base.ResponseDto
;
import
com.liquidnet.service.goblin.dto.manage.GoblinGoodsAnticipateAddParam
;
import
com.liquidnet.service.goblin.dto.manage.GoblinGoodsAnticipateParam
;
import
com.liquidnet.service.goblin.dto.manage.GoblinGoodsAnticipateUpdateParam
;
import
com.liquidnet.service.goblin.dto.manage.GoblinGoodsAnticipateValueParam
;
import
com.liquidnet.service.goblin.dto.vo.GoblinGoodsAnticipateVo
;
import
java.util.List
;
/**
* <p>
* 预约表 服务类
* </p>
*
* @author liquidnet
* @since 2022-04-07
*/
public
interface
IGoblinGoodsAnticipateService
{
/**
* 分页获取预约商品列表
* @param goodsAnticipateParam :
* @return :List<GoblinGoodsAnticipateVo>
*/
ResponseDto
<
PageInfo
<
GoblinGoodsAnticipateVo
>>
list
(
GoblinGoodsAnticipateParam
goodsAnticipateParam
);
ResponseDto
<
Object
>
add
(
GoblinGoodsAnticipateAddParam
goodsAnticipateAddParam
);
ResponseDto
<
Object
>
update
(
GoblinGoodsAnticipateUpdateParam
goodsAnticipateUpdateParam
);
ResponseDto
<
Object
>
updatePeople
(
String
antId
,
Long
people
);
ResponseDto
<
Object
>
delete
(
String
antId
);
ResponseDto
<
Object
>
getSkus
(
String
spuId
);
ResponseDto
<
Object
>
userAbout
(
String
antId
,
String
skuId
,
String
uid
,
String
phone
,
Integer
state
);
ResponseDto
<
Object
>
addAnticipateValues
(
List
<
GoblinGoodsAnticipateValueParam
>
list
);
ResponseDto
<
Object
>
updateAnticipateValues
(
List
<
GoblinGoodsAnticipateValueParam
>
list
);
}
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/service/IGoblinGoodsAnticipateUserService.java
0 → 100644
View file @
9c50d04f
package
com
.
liquidnet
.
service
.
goblin
.
service
;
/**
* <p>
* 预约表关联user表 服务类
* </p>
*
* @author liquidnet
* @since 2022-04-07
*/
public
interface
IGoblinGoodsAnticipateUserService
{
}
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/service/IGoblinGoodsAnticipateValueService.java
0 → 100644
View file @
9c50d04f
package
com
.
liquidnet
.
service
.
goblin
.
service
;
/**
* <p>
* 预约关联sku和spu表 服务类
* </p>
*
* @author liquidnet
* @since 2022-04-07
*/
public
interface
IGoblinGoodsAnticipateValueService
{
}
liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/docu/db_ln_goblin_initialdata.sql
View file @
9c50d04f
...
...
@@ -1060,6 +1060,53 @@ create table goblin_user_coupon
)
engine
=
InnoDB
comment
'商城用户券信息'
;
create
unique
index
uidx_guc_ucoupon_id
on
goblin_user_coupon
(
ucoupon_id
);
#
-- >>------------------------------------------------------------------------------------
DROP
TABLE
IF
EXISTS
`goblin_goods_anticipate`
;
CREATE
TABLE
`goblin_goods_anticipate`
(
`id`
bigint
NOT
NULL
AUTO_INCREMENT
COMMENT
'自增主键id'
,
`ant_id`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
NOT
NULL
COMMENT
'ant_id'
,
`name`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
NOT
NULL
COMMENT
'预约名称'
,
`about_people`
bigint
NULL
DEFAULT
0
COMMENT
'预约人数'
,
`actual_people`
bigint
NULL
DEFAULT
0
COMMENT
'实际预约人数'
,
`about_start_date`
datetime
NOT
NULL
COMMENT
'预约开始时间'
,
`about_end_date`
datetime
NOT
NULL
COMMENT
'预约结束时间'
,
`created_date`
datetime
NOT
NULL
ON
UPDATE
CURRENT_TIMESTAMP
COMMENT
'创建时间'
,
`del_tag`
int
(
1
)
UNSIGNED
ZEROFILL
NOT
NULL
DEFAULT
0
COMMENT
'删除(0:未删除1:已删除)'
,
PRIMARY
KEY
(
`id`
)
USING
BTREE
)
ENGINE
=
InnoDB
CHARACTER
SET
=
utf8mb4
COLLATE
=
utf8mb4_unicode_ci
COMMENT
=
'预约表'
ROW_FORMAT
=
Dynamic
;
create
unique
index
goblin_goods_anticipate
on
goblin_goods_anticipate
(
ant_id
);
#
-- >>------------------------------------------------------------------------------------
DROP
TABLE
IF
EXISTS
`goblin_goods_anticipate_value`
;
CREATE
TABLE
`goblin_goods_anticipate_value`
(
`id`
bigint
NOT
NULL
AUTO_INCREMENT
COMMENT
'自增主键id'
,
`ant_id`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
NOT
NULL
COMMENT
'预约id 对应(goblin_goods_anticipate.id)'
,
`sku_name`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
NOT
NULL
COMMENT
'sku名称'
,
`sku_id`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
NOT
NULL
COMMENT
'sku_id 对应 goblin_goods_sku.sku_id'
,
`spu_id`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
NOT
NULL
COMMENT
'spu_id对应 goblin_goods_spu_id'
,
`about_start_date`
datetime
NOT
NULL
COMMENT
'预约开始时间'
,
`about_end_date`
datetime
NOT
NULL
COMMENT
'预约结束时间'
,
`created_date`
datetime
NOT
NULL
ON
UPDATE
CURRENT_TIMESTAMP
COMMENT
'创建时间'
,
`update_date`
datetime
NULL
DEFAULT
NULL
COMMENT
'修改时间'
,
`del_tag`
int
(
1
)
UNSIGNED
ZEROFILL
NOT
NULL
DEFAULT
0
COMMENT
'删除(0:未删除1:已删除)'
,
PRIMARY
KEY
(
`id`
)
USING
BTREE
)
ENGINE
=
InnoDB
CHARACTER
SET
=
utf8mb4
COLLATE
=
utf8mb4_unicode_ci
COMMENT
=
'预约关联sku和spu表'
ROW_FORMAT
=
Dynamic
;
#
-- >>------------------------------------------------------------------------------------
DROP
TABLE
IF
EXISTS
`goblin_goods_anticipate_user`
;
CREATE
TABLE
`goblin_goods_anticipate_user`
(
`id`
bigint
NOT
NULL
AUTO_INCREMENT
COMMENT
'主键id'
,
`uid`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
NOT
NULL
COMMENT
'用户id'
,
`phone`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
NOT
NULL
COMMENT
'手机号'
,
`sku_id`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
NOT
NULL
COMMENT
'sku_id'
,
`state`
int
NOT
NULL
COMMENT
'状态(0:正常(默认))'
,
PRIMARY
KEY
(
`id`
)
USING
BTREE
)
ENGINE
=
InnoDB
CHARACTER
SET
=
utf8mb4
COLLATE
=
utf8mb4_unicode_ci
COMMENT
=
'预约表关联user表'
ROW_FORMAT
=
Dynamic
;
#
-- >>------------------------------------------------------------------------------------
#
-- >>------------------------------------------------------------------------------------
#
-- >>------------------------------------------------------------------------------------
\ No newline at end of file
liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/src/main/java/com/liquidnet/service/goblin/controller/manage/GoblinGoodsAnticipateController.java
0 → 100644
View file @
9c50d04f
package
com
.
liquidnet
.
service
.
goblin
.
controller
.
manage
;
import
com.github.pagehelper.PageInfo
;
import
com.liquidnet.service.base.ResponseDto
;
import
com.liquidnet.service.goblin.dto.manage.GoblinGoodsAnticipateAddParam
;
import
com.liquidnet.service.goblin.dto.manage.GoblinGoodsAnticipateParam
;
import
com.liquidnet.service.goblin.dto.manage.GoblinGoodsAnticipateUpdateParam
;
import
com.liquidnet.service.goblin.dto.manage.GoblinGoodsAnticipateValueParam
;
import
com.liquidnet.service.goblin.dto.vo.GoblinGoodsAnticipateVo
;
import
com.liquidnet.service.goblin.service.IGoblinGoodsAnticipateService
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.List
;
/**
* <p>
* 预约表 前端控制器
* </p>
*
* @author liquidnet
* @since 2022-04-07
*/
@Slf4j
@RestController
@Api
(
tags
=
"预约相关"
)
@RequestMapping
(
"/goblin/anticipate"
)
public
class
GoblinGoodsAnticipateController
{
@Autowired
IGoblinGoodsAnticipateService
goblinGoodsAnticipateService
;
@ApiOperation
(
"创建预约信息"
)
@PostMapping
(
"/add"
)
public
ResponseDto
<
Object
>
add
(
@RequestBody
GoblinGoodsAnticipateAddParam
goodsAnticipateAddParam
)
{
return
goblinGoodsAnticipateService
.
add
(
goodsAnticipateAddParam
);
}
@PostMapping
(
"/list"
)
@ApiOperation
(
"获取预约列表"
)
public
ResponseDto
<
PageInfo
<
GoblinGoodsAnticipateVo
>>
list
(
GoblinGoodsAnticipateParam
goodsAnticipateParam
)
{
return
goblinGoodsAnticipateService
.
list
(
goodsAnticipateParam
);
}
@ApiOperation
(
"修改预约人数"
)
@PostMapping
(
"/updatePeople"
)
public
ResponseDto
<
Object
>
updatePeople
(
@RequestParam
(
name
=
"antId"
,
required
=
true
)
String
antId
,
@RequestParam
(
name
=
"people"
,
required
=
true
)
Long
people
)
{
return
goblinGoodsAnticipateService
.
updatePeople
(
antId
,
people
);
}
@ApiOperation
(
"修改预约"
)
@PostMapping
(
"/update"
)
public
ResponseDto
<
Object
>
update
(
GoblinGoodsAnticipateUpdateParam
goodsAnticipateUpdateParam
)
{
return
goblinGoodsAnticipateService
.
update
(
goodsAnticipateUpdateParam
);
}
@ApiOperation
(
"删除预约"
)
@DeleteMapping
(
"/delete"
)
public
ResponseDto
<
Object
>
delete
(
@RequestParam
(
name
=
"antId"
)
String
antId
)
{
return
goblinGoodsAnticipateService
.
delete
(
antId
);
}
@ApiOperation
(
"创建预约关联sku"
)
@PostMapping
(
"/addAnticipateValues"
)
public
ResponseDto
<
Object
>
addAnticipateValues
(
List
<
GoblinGoodsAnticipateValueParam
>
list
)
{
return
goblinGoodsAnticipateService
.
addAnticipateValues
(
list
);
}
@ApiOperation
(
"修改预约关联"
)
@PostMapping
(
"/updateAnticipateValues"
)
public
ResponseDto
<
Object
>
updateAnticipateValues
(
List
<
GoblinGoodsAnticipateValueParam
>
list
)
{
return
goblinGoodsAnticipateService
.
updateAnticipateValues
(
list
);
}
@ApiOperation
(
"用户预约(state预约标识:0为预约,1为取消预约)"
)
@PostMapping
(
"/userAbout"
)
public
ResponseDto
<
Object
>
userAbout
(
@RequestParam
(
name
=
"antId"
,
required
=
true
)
String
antId
,
@RequestParam
(
name
=
"skuId"
,
required
=
true
)
String
skuId
,
@RequestParam
(
name
=
"uid"
,
required
=
true
)
String
uid
,
@RequestParam
(
name
=
"phone"
,
required
=
true
)
String
phone
,
@RequestParam
(
name
=
"state"
,
required
=
true
)
Integer
state
)
{
return
goblinGoodsAnticipateService
.
userAbout
(
antId
,
skuId
,
uid
,
phone
,
state
);
}
@ApiOperation
(
"根据spuId查询出所有的sku"
)
@PostMapping
(
""
)
public
ResponseDto
<
Object
>
getSkus
(
@RequestParam
(
name
=
"apuId"
)
String
SpuId
)
{
return
goblinGoodsAnticipateService
.
getSkus
(
SpuId
);
}
}
liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/src/main/java/com/liquidnet/service/goblin/service/impl/GoblinGoodsAnticipateServiceImpl.java
0 → 100644
View file @
9c50d04f
This diff is collapsed.
Click to expand it.
liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/src/main/java/com/liquidnet/service/goblin/service/impl/GoblinGoodsAnticipateUserServiceImpl.java
0 → 100644
View file @
9c50d04f
package
com
.
liquidnet
.
service
.
goblin
.
service
.
impl
;
import
com.liquidnet.service.goblin.service.IGoblinGoodsAnticipateUserService
;
import
org.springframework.stereotype.Service
;
/**
* <p>
* 预约表关联user表 服务实现类
* </p>
*
* @author liquidnet
* @since 2022-04-07
*/
@Service
public
class
GoblinGoodsAnticipateUserServiceImpl
implements
IGoblinGoodsAnticipateUserService
{
}
liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/src/main/java/com/liquidnet/service/goblin/service/impl/GoblinGoodsAnticipateValueServiceImpl.java
0 → 100644
View file @
9c50d04f
package
com
.
liquidnet
.
service
.
goblin
.
service
.
impl
;
import
com.liquidnet.service.goblin.service.IGoblinGoodsAnticipateValueService
;
import
org.springframework.stereotype.Service
;
/**
* <p>
* 预约关联sku和spu表 服务实现类
* </p>
*
* @author liquidnet
* @since 2022-04-07
*/
@Service
public
class
GoblinGoodsAnticipateValueServiceImpl
implements
IGoblinGoodsAnticipateValueService
{
}
liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/src/main/java/com/liquidnet/service/goblin/util/GoblinMongoUtils.java
View file @
9c50d04f
...
...
@@ -4,9 +4,8 @@ import com.liquidnet.commons.lang.util.CollectionUtil;
import
com.liquidnet.commons.lang.util.DateUtil
;
import
com.liquidnet.service.base.PagedResult
;
import
com.liquidnet.service.goblin.constant.GoblinStatusConst
;
import
com.liquidnet.service.goblin.dto.manage.GoblinStoreMgtCouponFilterParam
;
import
com.liquidnet.service.goblin.dto.manage.GoblinStoreMgtGoodsFilterParam
;
import
com.liquidnet.service.goblin.dto.manage.GoblinStoreMgtNoticeFilterParam
;
import
com.liquidnet.service.goblin.dto.manage.*
;
import
com.liquidnet.service.goblin.dto.manage.vo.GoblinGoodsAnticipateValueVo
;
import
com.liquidnet.service.goblin.dto.manage.vo.GoblinMgtCategorySpecVo
;
import
com.liquidnet.service.goblin.dto.manage.vo.GoblinStoreMgtCouponListVo
;
import
com.liquidnet.service.goblin.dto.manage.vo.GoblinStoreMgtGoodsListVo
;
...
...
@@ -37,6 +36,7 @@ import org.springframework.util.CollectionUtils;
import
java.math.BigDecimal
;
import
java.time.LocalDateTime
;
import
java.time.format.DateTimeFormatter
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
...
...
@@ -54,6 +54,108 @@ public class GoblinMongoUtils {
@Autowired
GoblinRedisUtils
redisUtils
;
/* ---------------------------------------- 预约数据源 ---------------------------------------- */
/**
* 分页查询
*/
public
HashMap
<
String
,
Object
>
getGoblinGoodsAnticipateVos
(
GoblinGoodsAnticipateParam
goodsAnticipateParam
)
{
HashMap
<
String
,
Object
>
info
=
CollectionUtil
.
mapStringObject
();
Pageable
pageable
=
PageRequest
.
of
(
goodsAnticipateParam
.
getPageNum
()
-
1
,
goodsAnticipateParam
.
getPageSize
(),
Sort
.
by
(
Sort
.
Direction
.
DESC
,
"createdDate"
));
Criteria
criteria
=
Criteria
.
where
(
"delTag"
).
is
(
0
);
if
(
StringUtils
.
isNotBlank
(
goodsAnticipateParam
.
getName
()))
{
criteria
=
criteria
.
and
(
"name"
).
is
(
goodsAnticipateParam
.
getName
());
}
Query
query
=
Query
.
query
(
criteria
);
//查询总数
long
count
=
mongoTemplate
.
count
(
query
,
GoblinGoodsAnticipateVo
.
class
,
GoblinGoodsAnticipateVo
.
class
.
getSimpleName
());
query
.
with
(
pageable
);
List
<
GoblinGoodsAnticipateVo
>
voList
=
mongoTemplate
.
find
(
query
,
GoblinGoodsAnticipateVo
.
class
,
GoblinGoodsAnticipateVo
.
class
.
getSimpleName
());
info
.
put
(
"total"
,
count
);
info
.
put
(
"data"
,
voList
);
return
info
;
}
/**
* 新增预约
*/
public
void
setGoblinGoodsAnticipateVo
(
GoblinGoodsAnticipateVo
vo
)
{
mongoTemplate
.
insert
(
vo
,
GoblinGoodsAnticipateVo
.
class
.
getSimpleName
());
}
/**
* 新增用户预约
*/
public
void
setGoblinGoodsAnticipateUserVo
(
GoblinGoodAnticipateUserVo
vo
)
{
mongoTemplate
.
insert
(
vo
,
GoblinGoodAnticipateUserVo
.
class
.
getSimpleName
());
}
/**
* 根据antId修改 预约人数
*/
public
void
updateGoblinGoodsAnticipateVoPeople
(
String
antId
,
Long
people
)
{
Query
query
=
Query
.
query
(
Criteria
.
where
(
"antId"
).
is
(
antId
));
Update
update
=
new
Update
().
set
(
"aboutPeople"
,
people
).
set
(
"updateDate"
,
LocalDateTime
.
now
());
mongoTemplate
.
updateFirst
(
query
,
update
,
GoblinGoodsAnticipateVo
.
class
.
getSimpleName
());
}
/**
* 根据antId修改 预约人数
*/
public
void
updateGoblinGoodsAnticipateVo
(
GoblinGoodsAnticipateUpdateParam
goodsAnticipateUpdateParam
)
{
Query
query
=
Query
.
query
(
Criteria
.
where
(
"antId"
).
is
(
goodsAnticipateUpdateParam
.
getAntId
()));
Update
update
=
new
Update
().
set
(
"name"
,
goodsAnticipateUpdateParam
.
getName
()).
set
(
"rule"
,
goodsAnticipateUpdateParam
.
getRule
()).
set
(
"updateDate"
,
LocalDateTime
.
now
());
mongoTemplate
.
updateFirst
(
query
,
update
,
GoblinGoodsAnticipateVo
.
class
.
getSimpleName
());
}
/**
* 根据amtId删除VO
*/
public
boolean
delGoodsAnticipateVo
(
String
antId
)
{
//查询该预约下有多少个开启预约的skuId
delAnticipateValues
(
antId
);
redisUtils
.
delGoodsAnticipateVo
(
antId
);
Query
query
=
Query
.
query
(
Criteria
.
where
(
"antId"
).
is
(
antId
));
return
mongoTemplate
.
remove
(
query
,
GoblinGoodsAnticipateVo
.
class
.
getSimpleName
()).
getDeletedCount
()
>
0
;
}
/**
* 根据活动id查询关联
*/
public
List
<
GoblinGoodsAnticipateValueVo
>
getGoodsAnticipateValues
(
String
antId
){
Criteria
criteria
=
Criteria
.
where
(
"antId"
).
is
(
antId
);
Query
query
=
Query
.
query
(
criteria
);
return
mongoTemplate
.
find
(
query
,
GoblinGoodsAnticipateValueVo
.
class
,
GoblinGoodsAnticipateValueVo
.
class
.
getSimpleName
());
}
/**
* 根据用户预约
*/
public
void
delGoodsAnticipateUserVo
(
String
uid
,
String
skuId
)
{
Query
query
=
Query
.
query
(
Criteria
.
where
(
"uid"
).
is
(
uid
).
and
(
"skuId"
).
is
(
skuId
));
mongoTemplate
.
remove
(
query
,
GoblinGoodsAnticipateVo
.
class
.
getSimpleName
()).
getDeletedCount
();
}
/**
* 根据预约ID获取预约详情
*/
public
GoblinGoodsAnticipateVo
getAnticipateVo
(
String
antId
)
{
return
mongoTemplate
.
findOne
(
Query
.
query
(
Criteria
.
where
(
"autId"
).
is
(
antId
)),
GoblinGoodsAnticipateVo
.
class
,
GoblinGoodsAnticipateVo
.
class
.
getSimpleName
());
}
/**
* 添加预约中间表信息
*/
public
void
addAnticipateValues
(
GoblinGoodsAnticipateValueVo
goodsAnticipateValueVo
)
{
mongoTemplate
.
insert
(
goodsAnticipateValueVo
,
GoblinGoodsAnticipateValueVo
.
class
.
getSimpleName
());
}
public
void
delAnticipateValues
(
String
antId
){
Query
query
=
Query
.
query
(
Criteria
.
where
(
"antId"
).
is
(
antId
));
mongoTemplate
.
remove
(
query
,
GoblinGoodsAnticipateValueVo
.
class
.
getSimpleName
()).
getDeletedCount
();
}
/* ---------------------------------------- 平台分类数据源 ---------------------------------------- */
public
List
<
GoblinSelfGoodsCategoryVo
>
getSelfGoodsCategoryVos
()
{
...
...
liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/src/main/java/com/liquidnet/service/goblin/util/GoblinOrderUtils.java
View file @
9c50d04f
...
...
@@ -2,10 +2,7 @@ package com.liquidnet.service.goblin.util;
import
com.alibaba.fastjson.JSON
;
import
com.fasterxml.jackson.core.type.TypeReference
;
import
com.liquidnet.commons.lang.util.CollectionUtil
;
import
com.liquidnet.commons.lang.util.CurrentUtil
;
import
com.liquidnet.commons.lang.util.HttpUtil
;
import
com.liquidnet.commons.lang.util.JsonUtils
;
import
com.liquidnet.commons.lang.util.*
;
import
com.liquidnet.service.adam.dto.vo.AdamRscPolymer01Vo
;
import
com.liquidnet.service.base.ResponseDto
;
import
com.liquidnet.service.candy.param.BackCouponParam
;
...
...
liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/src/main/java/com/liquidnet/service/goblin/util/GoblinRedisUtils.java
View file @
9c50d04f
...
...
@@ -42,6 +42,55 @@ public class GoblinRedisUtils {
redisUtil
.
del
(
keys
);
}
/* ---------------------------------------- 预约相关 ---------------------------------------- */
/**
* 该skuId已开启预约
*/
public
void
setAnticipate
(
String
skuId
){
redisUtil
.
set
(
GoblinRedisConst
.
ANTICIPATE_SKUID
.
concat
(
skuId
),
1
);
}
public
GoblinGoodAnticipateUserVo
getUserAboutAut
(
String
skuId
,
String
uid
)
{
return
(
GoblinGoodAnticipateUserVo
)
redisUtil
.
get
(
GoblinRedisConst
.
USER_ANTICIPATE_STATE
.
concat
(
skuId
).
concat
(
uid
));
}
/**
* 新增用户预约
*/
public
void
setUserAboutSku
(
GoblinGoodAnticipateUserVo
user
)
{
goblinMongoUtils
.
setGoblinGoodsAnticipateUserVo
(
user
);
redisUtil
.
set
(
GoblinRedisConst
.
USER_ANTICIPATE_STATE
.
concat
(
user
.
getSkuId
()).
concat
(
user
.
getUid
()),
user
);
}
/**
* 删除用户预约
*/
public
void
delUserAboutSku
(
String
skuId
,
String
uid
)
{
goblinMongoUtils
.
delGoodsAnticipateUserVo
(
uid
,
skuId
);
redisUtil
.
del
(
GoblinRedisConst
.
USER_ANTICIPATE_STATE
.
concat
(
skuId
).
concat
(
uid
));
}
/**
* 实际预约人数修改
*/
public
void
setAutId
(
String
autId
,
Integer
state
)
{
Integer
num
=
(
Integer
)
redisUtil
.
get
(
GoblinRedisConst
.
ANTICIPATE_PEOPLE
.
concat
(
autId
));
if
(
state
.
equals
(
GoblinGoodAnticipateUserVo
.
STATE_VALID
)){
redisUtil
.
set
(
GoblinRedisConst
.
ANTICIPATE_PEOPLE
.
concat
(
autId
),
num
==
null
?
1
:
num
+
1
);
}
if
(
state
.
equals
(
GoblinGoodAnticipateUserVo
.
STATE_INVALID
)&&
num
!=
null
){
redisUtil
.
set
(
GoblinRedisConst
.
ANTICIPATE_PEOPLE
.
concat
(
autId
),
num
-
1
);
}
}
/**
* 删除预约
*/
public
void
delGoodsAnticipateVo
(
String
skuId
)
{
redisUtil
.
del
(
GoblinRedisConst
.
ANTICIPATE_SKUID
.
concat
(
skuId
));
}
/* ---------------------------------------- sku库存相关 ---------------------------------------- */
public
void
setSkuStock
(
String
marketPre
,
String
skuId
,
Integer
stock
)
{
String
rk
=
GoblinRedisConst
.
REAL_STOCK_SKU
;
...
...
liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/src/main/resources/bootstrap-service-goblin.yml
View file @
9c50d04f
...
...
@@ -10,9 +10,9 @@ spring:
cloud
:
config
:
# uri: http://127.0.0.1:7002/support-config
# uri: http://39.107.71.112:7002/support-config
profile
:
${liquidnet.cloudConfig.profile}
name
:
${spring.application.name}
#默认为spring.application.name
discovery
:
enabled
:
true
service-id
:
liquidnet-support-config
\ No newline at end of file
uri
:
http://39.107.71.112:7002/support-config
# profile: ${liquidnet.cloudConfig.profile}
# name: ${spring.application.name} #默认为spring.application.name
# discovery:
# enabled: true
# service-id: liquidnet-support-config
\ No newline at end of file
liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/src/main/resources/sqlmap.properties
View file @
9c50d04f
This diff is collapsed.
Click to expand it.
liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/src/test/java/TestGoblinGoodsAnticipate.java
0 → 100644
View file @
9c50d04f
import
org.springframework.boot.test.context.SpringBootTest
;
@SpringBootTest
public
class
TestGoblinGoodsAnticipate
{
}
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