Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
C
cms
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
iuav
cms
Commits
9969d290
提交
9969d290
authored
10月 18, 2023
作者:
zhenjie
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'develop'
上级
2c5a7a0a
c7cd8598
隐藏空白字符变更
内嵌
并排
正在显示
17 个修改的文件
包含
795 行增加
和
23 行删除
+795
-23
ActivityDTO.java
...ava/com/mmc/iuav/user/model/dto/activity/ActivityDTO.java
+47
-0
ActivityPartDTO.java
...com/mmc/iuav/user/model/dto/activity/ActivityPartDTO.java
+40
-0
ActivityQO.java
.../src/main/java/com/mmc/iuav/user/model/qo/ActivityQO.java
+48
-0
UserAccountQO.java
...c/main/java/com/mmc/iuav/user/model/qo/UserAccountQO.java
+3
-0
ActivityVO.java
.../java/com/mmc/iuav/user/model/vo/activity/ActivityVO.java
+55
-0
ActivityController.java
...mmc/iuav/user/controller/activity/ActivityController.java
+73
-0
UserPointsEnum.java
...uav/user/controller/userpoints/config/UserPointsEnum.java
+4
-2
ActivityDao.java
...user/src/main/java/com/mmc/iuav/user/dao/ActivityDao.java
+41
-0
ActivityDO.java
...in/java/com/mmc/iuav/user/entity/activity/ActivityDO.java
+57
-0
ActivityPartDO.java
...ava/com/mmc/iuav/user/entity/activity/ActivityPartDO.java
+30
-0
ActivityService.java
.../main/java/com/mmc/iuav/user/service/ActivityService.java
+31
-0
ActivityServiceImpl.java
...a/com/mmc/iuav/user/service/impl/ActivityServiceImpl.java
+157
-0
CompanyAuthServiceImpl.java
...om/mmc/iuav/user/service/impl/CompanyAuthServiceImpl.java
+1
-0
UserAccountServiceImpl.java
...om/mmc/iuav/user/service/impl/UserAccountServiceImpl.java
+21
-19
UserServiceDao.xml
...service-user/src/main/resources/mapper/UserServiceDao.xml
+17
-1
activity.xml
...e/cms-service-user/src/main/resources/mapper/activity.xml
+169
-0
kustomization.yaml
kustomization/overlays/dev/kustomization.yaml
+1
-1
没有找到文件。
cms-common/cms-common-model/src/main/java/com/mmc/iuav/user/model/dto/activity/ActivityDTO.java
0 → 100644
浏览文件 @
9969d290
package
com
.
mmc
.
iuav
.
user
.
model
.
dto
.
activity
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.io.Serializable
;
import
java.util.Date
;
import
java.util.List
;
/**
* @author: zj
* @Date: 2023/10/16 14:49
*/
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
ActivityDTO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
-
5184984402965050696L
;
@ApiModelProperty
(
value
=
"id"
)
private
Integer
id
;
@ApiModelProperty
(
value
=
"活动类型"
)
private
Integer
activityType
;
@ApiModelProperty
(
value
=
"活动名称"
)
private
String
activityName
;
@ApiModelProperty
(
value
=
"开始时间"
)
private
Date
startTime
;
@ApiModelProperty
(
value
=
"结束时间"
)
private
Date
endTime
;
@ApiModelProperty
(
value
=
"描述"
)
private
String
description
;
@ApiModelProperty
(
value
=
"活动状态:0暂停, 1进行中"
)
private
Integer
activityStatus
;
@ApiModelProperty
(
value
=
"奖励类型(0积分,1余额,2优惠券)"
)
private
Integer
rewardType
;
@ApiModelProperty
(
value
=
"奖励额度"
)
private
Integer
rewardValue
;
@ApiModelProperty
(
value
=
"人数限制"
)
private
Integer
requireNum
;
@ApiModelProperty
(
value
=
"创建时间"
)
private
Date
createTime
;
@ApiModelProperty
(
value
=
"活动参与者集合"
)
private
List
<
ActivityPartDTO
>
activityPartDTOS
;
}
cms-common/cms-common-model/src/main/java/com/mmc/iuav/user/model/dto/activity/ActivityPartDTO.java
0 → 100644
浏览文件 @
9969d290
package
com
.
mmc
.
iuav
.
user
.
model
.
dto
.
activity
;
import
com.mmc.iuav.user.model.dto.UserAccountSimpleDTO
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.io.Serializable
;
import
java.util.Date
;
/**
* @author: zj
* @Date: 2023/10/17 10:51
*/
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
ActivityPartDTO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
2536974516884301653L
;
@ApiModelProperty
(
value
=
"id"
)
private
Integer
id
;
@ApiModelProperty
(
value
=
"活动id"
)
private
Integer
activityId
;
@ApiModelProperty
(
value
=
"用户id"
)
private
Integer
userAccountId
;
@ApiModelProperty
(
value
=
"被邀请用户id"
)
private
Integer
pUserAccountId
;
@ApiModelProperty
(
value
=
"邀请时间"
)
private
Date
createTime
;
@ApiModelProperty
(
value
=
"用户信息"
)
private
UserAccountSimpleDTO
accountSimpleDTO
;
@ApiModelProperty
(
value
=
"被邀请用户"
)
private
UserAccountSimpleDTO
pAccountSimpleDTO
;
@ApiModelProperty
(
value
=
"奖励额度"
)
private
Integer
rewardValue
;
}
cms-common/cms-common-model/src/main/java/com/mmc/iuav/user/model/qo/ActivityQO.java
0 → 100644
浏览文件 @
9969d290
package
com
.
mmc
.
iuav
.
user
.
model
.
qo
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
org.springframework.data.domain.Page
;
import
javax.validation.constraints.Min
;
import
javax.validation.constraints.NotNull
;
import
java.io.Serializable
;
/**
* @author: zj
* @Date: 2023/10/16 15:23
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public
class
ActivityQO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
-
5184984402962050696L
;
@ApiModelProperty
(
value
=
"活动id"
)
private
Integer
activityId
;
@ApiModelProperty
(
value
=
"用户id"
)
private
Integer
userAccountId
;
@ApiModelProperty
(
value
=
"活动类型(0用户邀请活动)"
)
private
Integer
activityType
;
@ApiModelProperty
(
value
=
"活动状态:0暂停, 1进行中"
)
private
Integer
activityStatus
;
@ApiModelProperty
(
value
=
"页码"
,
required
=
true
,
example
=
"1"
)
@NotNull
(
message
=
"页码不能为空"
,
groups
=
Page
.
class
)
@Min
(
value
=
1
,
groups
=
Page
.
class
)
private
Integer
pageNo
;
@ApiModelProperty
(
value
=
"每页显示数"
,
required
=
true
,
example
=
"10"
)
@NotNull
(
message
=
"每页显示数不能为空"
,
groups
=
Page
.
class
)
@Min
(
value
=
1
,
groups
=
Page
.
class
)
private
Integer
pageSize
;
public
void
buildCurrentPage
()
{
this
.
pageNo
=
(
pageNo
-
1
)
*
pageSize
;
}
}
cms-common/cms-common-model/src/main/java/com/mmc/iuav/user/model/qo/UserAccountQO.java
浏览文件 @
9969d290
...
...
@@ -50,6 +50,9 @@ public class UserAccountQO implements Serializable {
@ApiModelProperty
(
value
=
"企业认证状态(0未通过,1通过)"
,
example
=
"1"
)
private
Integer
companyAuthStatus
;
@ApiModelProperty
(
value
=
"小猪结算认证(0未通过,1通过)"
,
example
=
"1"
)
private
Integer
xzAuthStatus
;
@ApiModelProperty
(
value
=
"电子签章认证状态(0未通过,1通过)"
,
hidden
=
true
)
private
Integer
entVerifyStatus
;
...
...
cms-common/cms-common-model/src/main/java/com/mmc/iuav/user/model/vo/activity/ActivityVO.java
0 → 100644
浏览文件 @
9969d290
package
com
.
mmc
.
iuav
.
user
.
model
.
vo
.
activity
;
import
com.mmc.iuav.group.Insert
;
import
com.mmc.iuav.group.Update
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
javax.validation.constraints.NotBlank
;
import
javax.validation.constraints.NotNull
;
import
java.io.Serializable
;
import
java.util.Date
;
/**
* @author: zj
* @Date: 2023/10/16 14:50
*/
@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
public
class
ActivityVO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
-
7232980603049531614L
;
@ApiModelProperty
(
value
=
"id"
)
@NotNull
(
message
=
"id不能为空"
,
groups
=
{
Update
.
class
})
private
Integer
id
;
@ApiModelProperty
(
value
=
"活动类型"
)
@NotNull
(
message
=
"活动类型不能为空"
,
groups
=
{
Insert
.
class
,
Update
.
class
})
private
Integer
activityType
;
@ApiModelProperty
(
value
=
"活动名称"
)
@NotBlank
(
message
=
"活动名称不能为空"
,
groups
=
{
Insert
.
class
,
Update
.
class
})
private
String
activityName
;
@ApiModelProperty
(
value
=
"开始时间"
)
@NotNull
(
message
=
"活动开始时间不能为空"
,
groups
=
{
Insert
.
class
,
Update
.
class
})
private
Date
startTime
;
@ApiModelProperty
(
value
=
"结束时间"
)
@NotNull
(
message
=
"活动结束时间不能为空"
,
groups
=
{
Insert
.
class
,
Update
.
class
})
private
Date
endTime
;
@ApiModelProperty
(
value
=
"描述"
)
private
String
description
;
@ApiModelProperty
(
value
=
"活动状态:0暂停, 1进行中"
)
@NotNull
(
message
=
"活动状态不能为空"
,
groups
=
{
Insert
.
class
,
Update
.
class
})
private
Integer
activityStatus
;
@ApiModelProperty
(
value
=
"奖励类型(0积分,1余额,2优惠券)"
)
@NotNull
(
message
=
"奖励类型不能为空"
,
groups
=
{
Insert
.
class
,
Update
.
class
})
private
Integer
rewardType
;
@ApiModelProperty
(
value
=
"奖励额度"
)
@NotNull
(
message
=
"奖励额度不能为空"
,
groups
=
{
Insert
.
class
,
Update
.
class
})
private
Integer
rewardValue
;
@ApiModelProperty
(
value
=
"人数限制"
)
@NotNull
(
message
=
"人数限制不能为空"
,
groups
=
{
Insert
.
class
,
Update
.
class
})
private
Integer
requireNum
;
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/controller/activity/ActivityController.java
0 → 100644
浏览文件 @
9969d290
package
com
.
mmc
.
iuav
.
user
.
controller
.
activity
;
import
com.mmc.iuav.group.Insert
;
import
com.mmc.iuav.group.Page
;
import
com.mmc.iuav.group.Update
;
import
com.mmc.iuav.response.ResultBody
;
import
com.mmc.iuav.user.controller.BaseController
;
import
com.mmc.iuav.user.model.dto.activity.ActivityDTO
;
import
com.mmc.iuav.user.model.qo.ActivityQO
;
import
com.mmc.iuav.user.model.vo.activity.ActivityVO
;
import
com.mmc.iuav.user.service.ActivityService
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
io.swagger.annotations.ApiResponse
;
import
io.swagger.annotations.ApiResponses
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.*
;
/**
* @author: zj
* @Date: 2023/10/16 15:06
*/
@Api
(
tags
=
"活动管理"
)
@RequestMapping
(
"/activity/"
)
@RestController
public
class
ActivityController
extends
BaseController
{
@Autowired
private
ActivityService
activityService
;
@ApiOperation
(
value
=
"添加活动"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)})
@PostMapping
(
"insert"
)
public
ResultBody
insertActivity
(
@Validated
(
Insert
.
class
)
@RequestBody
ActivityVO
activity
)
{
return
activityService
.
insertActivity
(
activity
);
}
@ApiOperation
(
value
=
"修改活动"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)})
@PostMapping
(
"update"
)
public
ResultBody
updateActivity
(
@Validated
(
Update
.
class
)
@RequestBody
ActivityVO
activity
)
{
return
activityService
.
updateActivity
(
activity
);
}
@ApiOperation
(
value
=
"活动详情"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ActivityDTO
.
class
)})
@GetMapping
(
"details"
)
public
ResultBody
details
(
@RequestParam
Integer
id
)
{
return
activityService
.
details
(
id
);
}
@ApiOperation
(
value
=
"删除活动"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)})
@GetMapping
(
"delete"
)
public
ResultBody
delete
(
@RequestParam
Integer
id
)
{
return
activityService
.
delete
(
id
);
}
@ApiOperation
(
value
=
"活动列表"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)})
@PostMapping
(
"listActivityPages"
)
public
ResultBody
listActivityPages
(
@Validated
(
Page
.
class
)
@RequestBody
ActivityQO
activityQO
)
{
return
activityService
.
listActivityPages
(
activityQO
);
}
@ApiOperation
(
value
=
"活动邀请详情"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)})
@PostMapping
(
"inviteDetail"
)
public
ResultBody
inviteDetail
(
@Validated
(
Page
.
class
)
@RequestBody
ActivityQO
activityQO
)
{
return
activityService
.
inviteDetail
(
activityQO
);
}
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/controller/userpoints/config/UserPointsEnum.java
浏览文件 @
9969d290
...
...
@@ -10,10 +10,12 @@ public enum UserPointsEnum {
REGISTER
(
0
,
"注册"
),
REAL_NAME_AUTHENTICATION
(
1
,
"实名认证"
),
PILOT_CERTIFICATION
(
2
,
"飞手认证"
),
TOPIC_REWARD
(
3
,
"
发布话题
奖励"
),
TOPIC_REWARD
(
3
,
"
论坛发布
奖励"
),
SIGN_IN_REWARD
(
4
,
"签到"
),
OTHER_CHANGE
(
5
,
"其他变动"
),
USER_USE
(
6
,
"使用"
);
USER_USE
(
6
,
"使用"
),
INVITE_USER
(
7
,
"邀请用户"
),
;
private
int
code
;
private
String
message
;
...
...
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/dao/ActivityDao.java
0 → 100644
浏览文件 @
9969d290
package
com
.
mmc
.
iuav
.
user
.
dao
;
import
com.mmc.iuav.user.entity.activity.ActivityDO
;
import
com.mmc.iuav.user.entity.activity.ActivityPartDO
;
import
com.mmc.iuav.user.model.qo.ActivityQO
;
import
org.apache.ibatis.annotations.Mapper
;
import
java.util.List
;
/**
* @author: zj
* @Date: 2023/10/16 15:08
*/
@Mapper
public
interface
ActivityDao
{
void
delete
(
Integer
id
);
ActivityDO
details
(
Integer
id
);
int
countListActivityPages
(
ActivityQO
activityQO
);
List
<
ActivityDO
>
listActivityPages
(
ActivityQO
activityQO
);
int
countCurrentActivity
(
ActivityDO
activity
);
void
insertActivity
(
ActivityDO
activityDO
);
void
updateActivity
(
ActivityDO
activityDO
);
int
countSameActivityName
(
ActivityDO
activityDO
);
ActivityDO
currentActivity
(
Integer
activityType
);
int
countActivityPart
(
Integer
activityId
,
Integer
userAccountId
);
void
insertActivityPart
(
ActivityPartDO
activityPartDO
);
List
<
ActivityPartDO
>
activityPartDetail
(
ActivityQO
activityQO
);
int
countActivityPartDetail
(
ActivityQO
activityQO
);
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/entity/activity/ActivityDO.java
0 → 100644
浏览文件 @
9969d290
package
com
.
mmc
.
iuav
.
user
.
entity
.
activity
;
import
com.mmc.iuav.user.model.dto.activity.ActivityDTO
;
import
com.mmc.iuav.user.model.vo.activity.ActivityVO
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
org.springframework.util.CollectionUtils
;
import
java.io.Serializable
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.stream.Collectors
;
/**
* @author: zj
* @Date: 2023/10/16 14:42
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public
class
ActivityDO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
-
1748125765671153744L
;
private
Integer
id
;
private
Integer
activityType
;
private
String
activityName
;
private
Date
startTime
;
private
Date
endTime
;
private
String
description
;
private
Integer
activityStatus
;
private
Integer
rewardType
;
private
Integer
rewardValue
;
private
Integer
requireNum
;
private
Date
createTime
;
private
List
<
ActivityPartDO
>
activityPartDTOS
;
public
ActivityDTO
buildActivityDTO
()
{
return
ActivityDTO
.
builder
().
id
(
this
.
id
).
activityType
(
this
.
activityType
).
activityName
(
this
.
activityName
).
activityStatus
(
this
.
activityStatus
)
.
startTime
(
this
.
startTime
).
endTime
(
this
.
endTime
).
description
(
this
.
description
).
rewardType
(
this
.
rewardType
).
rewardValue
(
this
.
rewardValue
)
.
requireNum
(
this
.
requireNum
).
createTime
(
this
.
createTime
).
activityPartDTOS
(
CollectionUtils
.
isEmpty
(
this
.
activityPartDTOS
)
?
null
:
this
.
activityPartDTOS
.
stream
().
map
(
ActivityPartDO:
:
buildActivityPartDTO
).
collect
(
Collectors
.
toList
())
).
build
();
}
public
ActivityDO
(
ActivityVO
activityVO
)
{
this
.
id
=
activityVO
.
getId
();
this
.
activityType
=
activityVO
.
getActivityType
();
this
.
activityName
=
activityVO
.
getActivityName
();
this
.
activityStatus
=
activityVO
.
getActivityStatus
();
this
.
startTime
=
activityVO
.
getStartTime
();
this
.
endTime
=
activityVO
.
getEndTime
();
this
.
description
=
activityVO
.
getDescription
();
this
.
rewardType
=
activityVO
.
getRewardType
();
this
.
rewardValue
=
activityVO
.
getRewardValue
();
this
.
requireNum
=
activityVO
.
getRequireNum
();
}
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/entity/activity/ActivityPartDO.java
0 → 100644
浏览文件 @
9969d290
package
com
.
mmc
.
iuav
.
user
.
entity
.
activity
;
import
com.mmc.iuav.user.model.dto.activity.ActivityPartDTO
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.io.Serializable
;
import
java.util.Date
;
/**
* @author: zj
* @Date: 2023/10/16 14:44
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public
class
ActivityPartDO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1113620415679504481L
;
private
Integer
id
;
private
Integer
activityId
;
private
Integer
userAccountId
;
private
Integer
pUserAccountId
;
private
Date
createTime
;
public
ActivityPartDTO
buildActivityPartDTO
()
{
return
ActivityPartDTO
.
builder
().
id
(
this
.
id
).
activityId
(
this
.
activityId
).
userAccountId
(
this
.
userAccountId
)
.
pUserAccountId
(
this
.
pUserAccountId
).
createTime
(
this
.
createTime
).
build
();
}
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/service/ActivityService.java
0 → 100644
浏览文件 @
9969d290
package
com
.
mmc
.
iuav
.
user
.
service
;
import
com.mmc.iuav.response.ResultBody
;
import
com.mmc.iuav.user.model.qo.ActivityQO
;
import
com.mmc.iuav.user.model.vo.activity.ActivityVO
;
/**
* @author: zj
* @Date: 2023/10/16 15:09
*/
public
interface
ActivityService
{
ResultBody
insertActivity
(
ActivityVO
activity
);
ResultBody
updateActivity
(
ActivityVO
activity
);
ResultBody
details
(
Integer
id
);
ResultBody
listActivityPages
(
ActivityQO
activityQO
);
/**
* @param activityType
* @param userAccountId 邀请人id
* @param pUserAccountId 被邀请人id
* @return
*/
ResultBody
participateActivity
(
Integer
activityType
,
Integer
userAccountId
,
Integer
pUserAccountId
);
ResultBody
delete
(
Integer
id
);
ResultBody
inviteDetail
(
ActivityQO
activityQO
);
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/service/impl/ActivityServiceImpl.java
0 → 100644
浏览文件 @
9969d290
package
com
.
mmc
.
iuav
.
user
.
service
.
impl
;
import
com.mmc.iuav.page.PageResult
;
import
com.mmc.iuav.response.ResultBody
;
import
com.mmc.iuav.user.dao.ActivityDao
;
import
com.mmc.iuav.user.entity.activity.ActivityDO
;
import
com.mmc.iuav.user.entity.activity.ActivityPartDO
;
import
com.mmc.iuav.user.model.dto.UserAccountSimpleDTO
;
import
com.mmc.iuav.user.model.dto.activity.ActivityDTO
;
import
com.mmc.iuav.user.model.dto.activity.ActivityPartDTO
;
import
com.mmc.iuav.user.model.qo.ActivityQO
;
import
com.mmc.iuav.user.model.vo.activity.ActivityVO
;
import
com.mmc.iuav.user.model.vo.userpoints.ChangeUserPointVO
;
import
com.mmc.iuav.user.service.ActivityService
;
import
com.mmc.iuav.user.service.UserAccountService
;
import
com.mmc.iuav.user.service.userpoints.UserPointsService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.util.CollectionUtils
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.stream.Collectors
;
/**
* @author: zj
* @Date: 2023/10/16 15:09
*/
@Service
@Slf4j
public
class
ActivityServiceImpl
implements
ActivityService
{
@Autowired
private
ActivityDao
activityDao
;
@Autowired
private
UserPointsService
userPointsService
;
@Autowired
private
UserAccountService
userAccountService
;
@Override
public
ResultBody
insertActivity
(
ActivityVO
activity
)
{
ActivityDO
activityDO
=
new
ActivityDO
(
activity
);
int
countSame
=
activityDao
.
countSameActivityName
(
activityDO
);
if
(
countSame
>
0
)
{
return
ResultBody
.
error
(
"活动名称已存在!"
);
}
// 活动时间不能有交集
int
count
=
activityDao
.
countCurrentActivity
(
activityDO
);
if
(
count
>
0
)
{
return
ResultBody
.
error
(
"当前有活动正在进行中!"
);
}
activityDao
.
insertActivity
(
activityDO
);
return
ResultBody
.
success
();
}
@Override
public
ResultBody
updateActivity
(
ActivityVO
activity
)
{
ActivityDO
activityDO
=
new
ActivityDO
(
activity
);
int
countSame
=
activityDao
.
countSameActivityName
(
activityDO
);
if
(
countSame
>
0
)
{
return
ResultBody
.
error
(
"活动名称已存在!"
);
}
// 活动时间不能有交集
int
count
=
activityDao
.
countCurrentActivity
(
activityDO
);
if
(
count
>
0
)
{
return
ResultBody
.
error
(
"当前有活动正在进行中!"
);
}
activityDao
.
updateActivity
(
activityDO
);
return
ResultBody
.
success
();
}
@Override
public
ResultBody
details
(
Integer
id
)
{
ActivityDO
activityDO
=
activityDao
.
details
(
id
);
if
(
activityDO
!=
null
)
{
return
ResultBody
.
success
(
activityDO
.
buildActivityDTO
());
}
return
ResultBody
.
success
();
}
@Override
public
ResultBody
listActivityPages
(
ActivityQO
activityQO
)
{
int
count
=
activityDao
.
countListActivityPages
(
activityQO
);
if
(
count
==
0
)
{
return
ResultBody
.
success
(
PageResult
.
buildPage
(
activityQO
.
getPageNo
(),
activityQO
.
getPageSize
(),
count
));
}
Integer
pageNo
=
activityQO
.
getPageNo
();
activityQO
.
buildCurrentPage
();
List
<
ActivityDO
>
activityDOS
=
activityDao
.
listActivityPages
(
activityQO
);
List
<
ActivityDTO
>
activityDTOS
=
activityDOS
.
stream
().
map
(
ActivityDO:
:
buildActivityDTO
).
collect
(
Collectors
.
toList
());
return
ResultBody
.
success
(
PageResult
.
buildPage
(
pageNo
,
activityQO
.
getPageSize
(),
count
,
activityDTOS
));
}
@Transactional
@Override
public
ResultBody
participateActivity
(
Integer
activityType
,
Integer
userAccountId
,
Integer
pUserAccountId
)
{
ActivityDO
activityDO
=
activityDao
.
currentActivity
(
activityType
);
if
(
activityDO
==
null
)
{
return
ResultBody
.
success
();
}
// 查询是否超过奖励限制
int
count
=
activityDao
.
countActivityPart
(
activityDO
.
getId
(),
userAccountId
);
if
(
activityDO
.
getRequireNum
()
==
0
||
count
<
activityDO
.
getRequireNum
())
{
// 暂时只奖励积分
ChangeUserPointVO
changePoint
=
new
ChangeUserPointVO
();
changePoint
.
setUserAccountId
(
userAccountId
);
changePoint
.
setChangePoint
(
activityDO
.
getRewardValue
());
changePoint
.
setChangeType
(
7
);
userPointsService
.
change
(
changePoint
);
}
// 记录领取信息(被邀请)
ActivityPartDO
activityPartDO
=
new
ActivityPartDO
(
null
,
activityDO
.
getId
(),
userAccountId
,
pUserAccountId
,
new
Date
());
activityDao
.
insertActivityPart
(
activityPartDO
);
return
ResultBody
.
success
();
}
@Override
public
ResultBody
delete
(
Integer
id
)
{
activityDao
.
delete
(
id
);
return
ResultBody
.
success
();
}
@Override
public
ResultBody
inviteDetail
(
ActivityQO
activityQO
)
{
int
count
=
activityDao
.
countActivityPartDetail
(
activityQO
);
if
(
count
==
0
)
{
return
ResultBody
.
success
(
PageResult
.
buildPage
(
activityQO
.
getPageNo
(),
activityQO
.
getPageSize
(),
count
));
}
Integer
pageNo
=
activityQO
.
getPageNo
();
activityQO
.
buildCurrentPage
();
List
<
ActivityPartDO
>
activityPartDOS
=
activityDao
.
activityPartDetail
(
activityQO
);
List
<
ActivityPartDTO
>
activityPartDTOS
=
activityPartDOS
.
stream
().
map
(
ActivityPartDO:
:
buildActivityPartDTO
).
collect
(
Collectors
.
toList
());
// 邀请人id
List
<
Integer
>
userIds
=
activityPartDTOS
.
stream
().
map
(
ActivityPartDTO:
:
getUserAccountId
).
collect
(
Collectors
.
toList
());
// 被邀请人id
List
<
Integer
>
pUserIds
=
activityPartDTOS
.
stream
().
map
(
ActivityPartDTO:
:
getPUserAccountId
).
collect
(
Collectors
.
toList
());
List
<
UserAccountSimpleDTO
>
userAccountSimpleDTOS
=
userAccountService
.
feignListUserAccountByIds
(
userIds
);
List
<
UserAccountSimpleDTO
>
pUserAccountDTOS
=
userAccountService
.
feignListUserAccountByIds
(
pUserIds
);
if
(!
CollectionUtils
.
isEmpty
(
userAccountSimpleDTOS
))
{
Map
<
Integer
,
UserAccountSimpleDTO
>
userMap
=
userAccountSimpleDTOS
.
stream
().
collect
(
Collectors
.
toMap
(
UserAccountSimpleDTO:
:
getId
,
k1
->
k1
,
(
k1
,
k2
)
->
k2
));
for
(
ActivityPartDTO
activityPartDTO
:
activityPartDTOS
)
{
activityPartDTO
.
setAccountSimpleDTO
(
userMap
.
get
(
activityPartDTO
.
getUserAccountId
()));
}
}
if
(!
CollectionUtils
.
isEmpty
(
pUserAccountDTOS
))
{
Map
<
Integer
,
UserAccountSimpleDTO
>
pUserMap
=
pUserAccountDTOS
.
stream
().
collect
(
Collectors
.
toMap
(
UserAccountSimpleDTO:
:
getId
,
k1
->
k1
,
(
k1
,
k2
)
->
k2
));
for
(
ActivityPartDTO
activityPartDTO
:
activityPartDTOS
)
{
activityPartDTO
.
setPAccountSimpleDTO
(
pUserMap
.
get
(
activityPartDTO
.
getPUserAccountId
()));
}
}
return
ResultBody
.
success
(
PageResult
.
buildPage
(
pageNo
,
activityQO
.
getPageSize
(),
count
,
activityPartDTOS
));
}
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/service/impl/CompanyAuthServiceImpl.java
浏览文件 @
9969d290
...
...
@@ -75,6 +75,7 @@ public class CompanyAuthServiceImpl implements CompanyAuthService {
}
//将字符串转化成json对象
JSONObject
businessResJson
=
JSONObject
.
parseObject
(
businessRes
);
System
.
out
.
println
(
businessResJson
.
toString
());
if
(
businessResJson
.
getString
(
"success"
).
equals
(
"false"
))
{
return
ResultBody
.
error
(
ResultEnum
.
BUSINESS_LICENSE_CHECK_ANALYSIS_ERROR
);
}
else
{
...
...
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/service/impl/UserAccountServiceImpl.java
浏览文件 @
9969d290
...
...
@@ -22,16 +22,12 @@ import com.mmc.iuav.user.model.qo.UserRcdQO;
import
com.mmc.iuav.user.model.vo.*
;
import
com.mmc.iuav.user.model.vo.userpoints.UserPointsVO
;
import
com.mmc.iuav.user.mq.MqProducer
;
import
com.mmc.iuav.user.service.CompanyAuthService
;
import
com.mmc.iuav.user.service.RealNameAuthService
;
import
com.mmc.iuav.user.service.UserAccountService
;
import
com.mmc.iuav.user.service.WxService
;
import
com.mmc.iuav.user.service.*
;
import
com.mmc.iuav.user.util.SmsUtil
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.redis.core.StringRedisTemplate
;
import
org.springframework.messaging.simp.annotation.SendToUser
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.interceptor.TransactionAspectSupport
;
...
...
@@ -61,6 +57,9 @@ public class UserAccountServiceImpl implements UserAccountService {
private
RealNameAuthService
realNameAuthService
;
@Autowired
private
ActivityService
activityService
;
@Autowired
private
CooperationDao
cooperationDao
;
@Autowired
...
...
@@ -147,7 +146,7 @@ public class UserAccountServiceImpl implements UserAccountService {
public
ResultBody
update
(
UserAccountVO
userAccountVO
)
{
UserAccountDO
userAccountDO
=
new
UserAccountDO
(
userAccountVO
);
int
i
=
userServiceDao
.
selectUserAccountNickName
(
userAccountDO
);
if
(
i
!=
0
)
{
if
(
i
!=
0
)
{
return
ResultBody
.
error
(
"昵称被占用,请重新修改"
);
}
userServiceDao
.
update
(
userAccountDO
);
...
...
@@ -196,7 +195,7 @@ public class UserAccountServiceImpl implements UserAccountService {
}
for
(
UserAccountDO
userAccountDO
:
list
)
{
Integer
districtChildId
=
userAccountDO
.
getDistrictChildId
();
if
(
districtChildId
!=
null
)
{
if
(
districtChildId
!=
null
)
{
String
districtChild
=
userServiceDao
.
getDistrictChild
(
districtChildId
);
userAccountDO
.
setRegion
(
districtChild
);
}
...
...
@@ -254,6 +253,8 @@ public class UserAccountServiceImpl implements UserAccountService {
if
(
realNameAuthByUId
!=
null
&&
realNameAuthByUId
.
getCheckStatus
()
==
1
)
{
realNameextracted
(
id
);
}
// 奖励邀请人
activityService
.
participateActivity
(
0
,
rcdUserId
,
id
);
return
ResultBody
.
success
();
}
...
...
@@ -363,6 +364,7 @@ public class UserAccountServiceImpl implements UserAccountService {
// 设置推荐(邀请)伙伴个数
buildInviteCount
(
uIds
,
userAccountDOList
);
List
<
UserAccountVO
>
userAccountVOS
=
userAccountDOList
.
stream
().
map
(
UserAccountDO:
:
buildUserAccountVO
).
collect
(
Collectors
.
toList
());
return
ResultBody
.
success
(
PageResult
.
buildPage
(
pageNo
,
param
.
getPageSize
(),
count
,
userAccountVOS
));
}
...
...
@@ -465,11 +467,11 @@ public class UserAccountServiceImpl implements UserAccountService {
@Override
public
ResultBody
getVerifyCode
(
Integer
userAccountId
,
String
phoneNum
)
{
Integer
count
=
userServiceDao
.
countPhoneNum
(
phoneNum
);
if
(
count
>
0
)
{
return
ResultBody
.
error
(
"80001"
,
"手机号已存在"
);
Integer
count
=
userServiceDao
.
countPhoneNum
(
phoneNum
);
if
(
count
>
0
)
{
return
ResultBody
.
error
(
"80001"
,
"手机号已存在"
);
}
// 根据手机号生成验证码
// 根据手机号生成验证码
String
verifyCode
=
CodeUtil
.
getRandomNum
(
6
);
// 保存到redis中
Map
<
String
,
String
>
redisData
=
new
HashMap
<>();
...
...
@@ -497,7 +499,7 @@ public class UserAccountServiceImpl implements UserAccountService {
}
int
count
=
userServiceDao
.
countPhoneNums
(
phoneNum
,
userAccountId
);
if
(
count
>
0
)
{
return
ResultBody
.
error
(
"80001"
,
"手机号已存在"
);
return
ResultBody
.
error
(
"80001"
,
"手机号已存在"
);
}
userServiceDao
.
updateAccountPhone
(
userAccountId
,
phoneNum
);
return
ResultBody
.
success
();
...
...
@@ -506,9 +508,9 @@ public class UserAccountServiceImpl implements UserAccountService {
@Override
public
ResultBody
appUpdateUser
(
UserMessageQO
userMessageQO
)
{
int
i
=
userServiceDao
.
selectUserAccount
(
userMessageQO
);
if
(
i
!=
0
)
{
if
(
i
!=
0
)
{
return
ResultBody
.
error
(
"昵称被占用,请重新修改"
);
}
else
{
}
else
{
userServiceDao
.
appUpdateUser
(
userMessageQO
);
}
return
ResultBody
.
success
();
...
...
@@ -516,11 +518,11 @@ public class UserAccountServiceImpl implements UserAccountService {
@Override
public
UserAccountMessageVo
userMessages
(
Integer
userAccountId
)
{
UserAccountMessageVo
user
=
userServiceDao
.
userMessages
(
userAccountId
);
if
(
user
!=
null
)
{
List
<
String
>
strings
=
userServiceDao
.
userMessagesPilot
(
user
.
getPilotId
());
user
.
setAbilityName
(
strings
);
}
UserAccountMessageVo
user
=
userServiceDao
.
userMessages
(
userAccountId
);
if
(
user
!=
null
)
{
List
<
String
>
strings
=
userServiceDao
.
userMessagesPilot
(
user
.
getPilotId
());
user
.
setAbilityName
(
strings
);
}
return
user
;
}
...
...
csm-service/cms-service-user/src/main/resources/mapper/UserServiceDao.xml
浏览文件 @
9969d290
...
...
@@ -24,6 +24,7 @@
<result
property=
"companyAuthStatus"
column=
"companyAuthStatus"
/>
<result
property=
"companyName"
column=
"company_name"
/>
<result
property=
"realNameAuthStatus"
column=
"realNameAuthStatus"
/>
<result
property=
"xzAuthStatus"
column=
"xz_auth_status"
/>
<association
property=
"userRcdDO"
javaType=
"com.mmc.iuav.user.entity.UserRcdDO"
>
<id
property=
"id"
column=
"user_rcd_id"
/>
<result
property=
"rcdUserId"
column=
"rcd_user_id"
/>
...
...
@@ -283,6 +284,7 @@
LEFT JOIN company_member cm ON cm.user_account_id = ua.id
LEFT JOIN company_info ci ON ci.id = cm.company_info_id
LEFT JOIN real_name_auth rna ON rna.user_account_id = ua.id
LEFT JOIN xz_auth xza ON ua.id = xza.user_account_id
WHERE
ua.disable = 0 and ua.port_type = 100
<if
test=
"companyInfoId != null"
>
...
...
@@ -303,6 +305,12 @@
<if
test=
"realAuthStatus == 0"
>
AND ( rna.check_status is null or rna.check_status = 0 )
</if>
<if
test=
"xzAuthStatus == 1"
>
AND xza.xz_auth_status = #{xzAuthStatus}
</if>
<if
test=
"realAuthStatus == 0"
>
AND ( xza.xz_auth_status is null or xza.xz_auth_status = 0 )
</if>
<if
test=
"startTime != null "
>
AND ua.create_time >= #{startTime}
</if>
...
...
@@ -345,7 +353,8 @@
r_user.nick_name AS rcdNickname,
r_user.user_name AS rcdUserName,
rna.user_name,
rna.check_status as realNameAuthStatus
rna.check_status as realNameAuthStatus,
xza.xz_auth_status
FROM
user_account ua
LEFT JOIN company_member cm ON cm.user_account_id = ua.id
...
...
@@ -353,6 +362,7 @@
LEFT JOIN user_rcd rcd ON rcd.user_account_id = ua.id
LEFT JOIN user_account r_user ON r_user.id = rcd.rcd_user_id
LEFT JOIN real_name_auth rna ON rna.user_account_id = ua.id
LEFT JOIN xz_auth xza ON ua.id = xza.user_account_id
WHERE
ua.`disable` = 0
AND ua.port_type = 100
...
...
@@ -374,6 +384,12 @@
<if
test=
"realAuthStatus == 0"
>
AND ( rna.check_status is null or rna.check_status = 0 )
</if>
<if
test=
"xzAuthStatus == 1"
>
AND xza.xz_auth_status = #{xzAuthStatus}
</if>
<if
test=
"realAuthStatus == 0"
>
AND ( xza.xz_auth_status is null or xza.xz_auth_status = 0 )
</if>
<if
test=
"startTime != null "
>
AND ua.create_time >= #{startTime}
</if>
...
...
csm-service/cms-service-user/src/main/resources/mapper/activity.xml
0 → 100644
浏览文件 @
9969d290
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"com.mmc.iuav.user.dao.ActivityDao"
>
<resultMap
id=
"activityResultMap"
type=
"com.mmc.iuav.user.entity.activity.ActivityDO"
>
<id
column=
"id"
property=
"id"
/>
<result
column=
"activity_type"
property=
"activityType"
/>
<result
column=
"activity_name"
property=
"activityName"
/>
<result
column=
"start_time"
property=
"startTime"
/>
<result
column=
"end_time"
property=
"endTime"
/>
<result
column=
"description"
property=
"description"
/>
<result
column=
"activity_status"
property=
"activityStatus"
/>
<result
column=
"reward_type"
property=
"rewardType"
/>
<result
column=
"reward_value"
property=
"rewardValue"
/>
<result
column=
"require_num"
property=
"requireNum"
/>
<result
column=
"create_time"
property=
"createTime"
/>
</resultMap>
<sql
id=
"activity_column"
>
ac.id, ac.activity_type, ac.activity_name, ac.start_time, ac.end_time, ac.description, ac.activity_status,
ac.reward_type, ac.reward_value, ac.require_num, ac.create_time
</sql>
<sql
id=
"activity_part_column"
>
ap.id, ap.activity_id, ap.user_account_id, ap.p_user_account_id, ap.create_time
</sql>
<insert
id=
"insertActivity"
parameterType=
"com.mmc.iuav.user.entity.activity.ActivityDO"
useGeneratedKeys=
"true"
keyProperty=
"id"
>
insert into activity (activity_type, activity_name, start_time, end_time, description, activity_status, reward_type,
reward_value, require_num, create_time)
values (#{activityType}, #{activityName}, #{startTime}, #{endTime}, #{description}, #{activityStatus}, #{rewardType},
#{rewardValue}, #{requireNum}, NOW())
</insert>
<insert
id=
"insertActivityPart"
parameterType=
"com.mmc.iuav.user.entity.activity.ActivityPartDO"
keyProperty=
"id"
useGeneratedKeys=
"true"
>
insert into activity_part (activity_id, user_account_id, p_user_account_id, create_time)
values (#{activityId}, #{userAccountId}, #{pUserAccountId}, NOW())
</insert>
<update
id=
"updateActivity"
parameterType=
"com.mmc.iuav.user.entity.activity.ActivityDO"
>
update activity
<set>
<if
test=
"activityType != null"
>
activity_type = #{activityType},
</if>
<if
test=
"activityName != null"
>
activity_name = #{activityName},
</if>
<if
test=
"startTime != null"
>
start_time = #{startTime},
</if>
<if
test=
"endTime != null"
>
end_time = #{endTime},
</if>
<if
test=
"description != null"
>
description = #{description},
</if>
<if
test=
"activityStatus != null"
>
activity_status = #{activityStatus},
</if>
<if
test=
"rewardType != null"
>
reward_type = #{rewardType},
</if>
<if
test=
"rewardValue != null"
>
reward_value = #{rewardValue},
</if>
<if
test=
"requireNum != null"
>
require_num = #{requireNum}
</if>
</set>
where id = #{id}
</update>
<update
id=
"delete"
>
update activity set is_deleted = 1 where id = #{id}
</update>
<select
id=
"details"
resultType=
"com.mmc.iuav.user.entity.activity.ActivityDO"
>
select
<include
refid=
"activity_column"
/>
from activity ac where ac.id = #{id}
</select>
<select
id=
"countListActivityPages"
resultType=
"java.lang.Integer"
parameterType=
"com.mmc.iuav.user.model.qo.ActivityQO"
>
select count(*) from activity
where is_deleted = 0
<if
test=
"activityType != null"
>
and activity_type = #{activityType}
</if>
<if
test=
"activityStatus != null"
>
and activity_status = #{activityStatus}
</if>
</select>
<select
id=
"listActivityPages"
resultType=
"com.mmc.iuav.user.entity.activity.ActivityDO"
>
select
<include
refid=
"activity_column"
/>
from activity ac
where ac.is_deleted = 0
<if
test=
"activityType != null"
>
and ac.activity_type = #{activityType}
</if>
<if
test=
"activityStatus != null"
>
and ac.activity_status = #{activityStatus}
</if>
order by ac.id desc
limit #{pageNo}, #{pageSize}
</select>
<select
id=
"countCurrentActivity"
resultType=
"java.lang.Integer"
parameterType=
"com.mmc.iuav.user.entity.activity.ActivityDO"
>
select count(*) from activity ac
where ac.is_deleted = 0 and ac.activity_status = 1
<if
test=
"startTime != null"
>
and ( #{startTime} >= ac.start_time and ac.end_time >= #{startTime} )
</if>
<if
test=
"endTime != null"
>
and ( #{endTime} >= ac.start_time and ac.end_time >= #{endTime} )
</if>
</select>
<select
id=
"countSameActivityName"
resultType=
"java.lang.Integer"
parameterType=
"com.mmc.iuav.user.entity.activity.ActivityDO"
>
select count(*) from activity
where is_deleted = 0
<if
test=
"activityName != null"
>
and activity_name = #{activityName}
</if>
<if
test=
"id != null"
>
and id != #{id}
</if>
</select>
<select
id=
"currentActivity"
resultType=
"com.mmc.iuav.user.entity.activity.ActivityDO"
>
select
<include
refid=
"activity_column"
/>
from activity ac
where ac.is_deleted = 0 and ac.activity_status = 0 and ( NOW() >= ac.start_time and ac.end_time >= NOW() ) and
ac.activityType =
#{activityType}
</select>
<select
id=
"countActivityPart"
resultType=
"java.lang.Integer"
>
select count(*) from activity ac inner join activity_part acp on ac.id = acp.activity_id
where acp.activity_id = #{activityId} and acp.user_account_id = #{userAccountId}
</select>
<select
id=
"activityPartDetail"
resultType=
"com.mmc.iuav.user.entity.activity.ActivityPartDO"
parameterType=
"com.mmc.iuav.user.model.qo.ActivityQO"
>
select
<include
refid=
"activity_part_column"
/>
, ac.reward_value
from activity_part ap inner join activity ac on ap.activity_id = ac.id
where ac.id = #{activityId}
order by ap.id desc
limit #{pageNo}, #{pageSize}
</select>
<select
id=
"countActivityPartDetail"
resultType=
"java.lang.Integer"
parameterType=
"com.mmc.iuav.user.model.qo.ActivityQO"
>
select count(*)
from activity_part ap inner join activity ac on ap.activity_id = ac.id
where ac.id = #{activityId}
</select>
</mapper>
\ No newline at end of file
kustomization/overlays/dev/kustomization.yaml
浏览文件 @
9969d290
...
...
@@ -18,4 +18,4 @@ patches:
images
:
-
name
:
REGISTRY/NAMESPACE/IMAGE:TAG
newName
:
mmc-registry.cn-shenzhen.cr.aliyuncs.com/sharefly-dev/cms
newTag
:
29ee7f3da55705f8f2e5bdef746c1756c1ce8fef
newTag
:
b38bc5b6374e85ae77c492215d7ff3830022547a
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论