Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
B
browser-backend
Project
Project
Details
Activity
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
Administrator
browser-backend
Commits
da5c9260
Commit
da5c9260
authored
Aug 26, 2020
by
Administrator
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'staging' into 'master'
Staging See merge request
!166
parents
aa155da0
db62d2f3
Hide whitespace changes
Inline
Side-by-side
Showing
22 changed files
with
745 additions
and
29 deletions
+745
-29
AccountDto.java
...a/com/edgec/browserbackend/account/domain/AccountDto.java
+18
-2
AccountRepositoryCustom.java
...erbackend/account/repository/AccountRepositoryCustom.java
+2
-0
AccountRepositoryCustomImpl.java
...ckend/account/repository/AccountRepositoryCustomImpl.java
+12
-0
AccountServiceImpl.java
...owserbackend/account/service/impl/AccountServiceImpl.java
+5
-1
VpsErrorCode.java
.../edgec/browserbackend/browser/ErrorCode/VpsErrorCode.java
+57
-0
VpsController.java
...dgec/browserbackend/browser/controller/VpsController.java
+113
-0
Vps.java
...ain/java/com/edgec/browserbackend/browser/domain/Vps.java
+72
-0
AssignVpsDto.java
...va/com/edgec/browserbackend/browser/dto/AssignVpsDto.java
+24
-0
UserVpsDto.java
...java/com/edgec/browserbackend/browser/dto/UserVpsDto.java
+28
-0
VpsPageResultDto.java
...om/edgec/browserbackend/browser/dto/VpsPageResultDto.java
+18
-0
GlobalFieldRepositoryCustomImpl.java
...d/browser/repository/GlobalFieldRepositoryCustomImpl.java
+0
-15
UserVpsRepository.java
.../browserbackend/browser/repository/UserVpsRepository.java
+17
-0
UserVpsRepositoryCustom.java
...erbackend/browser/repository/UserVpsRepositoryCustom.java
+7
-3
UserVpsRepositoryCustomImpl.java
...ckend/browser/repository/UserVpsRepositoryCustomImpl.java
+45
-0
VpsRepository.java
...dgec/browserbackend/browser/repository/VpsRepository.java
+24
-0
IpResourceServiceImpl.java
...erbackend/browser/service/Impl/IpResourceServiceImpl.java
+3
-5
ShopServiceImpl.java
.../browserbackend/browser/service/Impl/ShopServiceImpl.java
+13
-2
VpsServiceImpl.java
...c/browserbackend/browser/service/Impl/VpsServiceImpl.java
+206
-0
VpsService.java
.../com/edgec/browserbackend/browser/service/VpsService.java
+29
-0
ErrorCode.java
.../edgec/browserbackend/common/commons/error/ErrorCode.java
+1
-0
BeanUtils.java
...java/com/edgec/browserbackend/common/utils/BeanUtils.java
+50
-0
logback-spring.xml
src/main/resources/logback-spring.xml
+1
-1
No files found.
src/main/java/com/edgec/browserbackend/account/domain/AccountDto.java
View file @
da5c9260
...
...
@@ -2,6 +2,7 @@ package com.edgec.browserbackend.account.domain;
import
com.edgec.browserbackend.browser.domain.IpSummary
;
import
com.edgec.browserbackend.browser.domain.ShopSummary
;
import
org.springframework.util.StringUtils
;
import
java.util.ArrayList
;
import
java.util.Date
;
...
...
@@ -47,11 +48,13 @@ public class AccountDto {
private
List
<
String
>
queryIpUrlList
;
private
String
promotionCode
;
private
Promotion
promotion
;
private
int
authorized
;
public
AccountDto
(){
public
AccountDto
()
{
}
...
...
@@ -67,8 +70,13 @@ public class AccountDto {
this
.
setPermission
(
account
.
getPermission
());
this
.
setWhiteList
(
account
.
getWhiteList
());
this
.
setQueryIpUrlList
(
account
.
getQueryIpUrlList
());
if
(
account
.
getPromotion
()
!=
null
)
if
(
account
.
getPromotion
()
!=
null
)
{
this
.
setPromotion
(
account
.
getPromotion
());
}
if
(!
StringUtils
.
isEmpty
(
account
.
getPromotionCode
()))
{
this
.
setPromotionCode
(
account
.
getPromotionCode
());
}
this
.
authorized
=
account
.
getAuthorized
();
}
...
...
@@ -240,4 +248,12 @@ public class AccountDto {
public
void
setAuthorized
(
int
authorized
)
{
this
.
authorized
=
authorized
;
}
public
String
getPromotionCode
()
{
return
promotionCode
;
}
public
void
setPromotionCode
(
String
promotionCode
)
{
this
.
promotionCode
=
promotionCode
;
}
}
src/main/java/com/edgec/browserbackend/account/repository/AccountRepositoryCustom.java
View file @
da5c9260
...
...
@@ -14,4 +14,6 @@ public interface AccountRepositoryCustom {
Long
convertToDistributor
(
String
id
,
boolean
tag
);
List
<
String
>
findIdsByParentId
(
String
Id
);
}
src/main/java/com/edgec/browserbackend/account/repository/AccountRepositoryCustomImpl.java
View file @
da5c9260
...
...
@@ -10,12 +10,16 @@ import org.springframework.data.mongodb.core.aggregation.AggregationResults;
import
org.springframework.data.mongodb.core.aggregation.MatchOperation
;
import
org.springframework.data.mongodb.core.aggregation.ProjectionOperation
;
import
org.springframework.data.mongodb.core.query.BasicQuery
;
import
org.springframework.data.mongodb.core.query.Criteria
;
import
org.springframework.data.mongodb.core.query.Query
;
import
org.springframework.data.mongodb.core.query.Update
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.regex.Pattern
;
import
java.util.stream.Collectors
;
import
static
org
.
springframework
.
data
.
mongodb
.
core
.
query
.
Criteria
.
where
;
...
...
@@ -78,4 +82,12 @@ public class AccountRepositoryCustomImpl implements AccountRepositoryCustom {
return
upsert
.
getModifiedCount
();
}
@Override
public
List
<
String
>
findIdsByParentId
(
String
id
)
{
Query
query
=
new
Query
(
Criteria
.
where
(
"_id"
).
regex
(
Pattern
.
compile
(
"^"
+
id
+
".*$"
)));
// query.fields().include("_id"); 这样写返回的 String 为 {_id:""}
return
mongoTemplate
.
find
(
query
,
Account
.
class
).
stream
().
map
(
Account:
:
getName
).
collect
(
Collectors
.
toList
());
}
}
src/main/java/com/edgec/browserbackend/account/service/impl/AccountServiceImpl.java
View file @
da5c9260
...
...
@@ -16,6 +16,7 @@ import com.edgec.browserbackend.browser.ErrorCode.BrowserErrorCode;
import
com.edgec.browserbackend.browser.domain.IpSummary
;
import
com.edgec.browserbackend.browser.domain.ShopSummary
;
import
com.edgec.browserbackend.browser.dto.PageInfo
;
import
com.edgec.browserbackend.browser.repository.GlobalFieldRepository
;
import
com.edgec.browserbackend.browser.service.IpResourceService
;
import
com.edgec.browserbackend.browser.service.ShopService
;
import
com.edgec.browserbackend.common.commons.error.ClientRequestException
;
...
...
@@ -101,6 +102,9 @@ public class AccountServiceImpl implements AccountService {
@Autowired
private
PaymentService
paymentService
;
@Autowired
private
GlobalFieldRepository
globalFieldRepository
;
@Override
public
List
<
UserBillList
>
getUserBills0
(
String
name
)
{
...
...
@@ -473,7 +477,7 @@ public class AccountServiceImpl implements AccountService {
list
.
add
(
"184"
);
list
.
add
(
"170"
);
if
(!
StringUtils
.
isEmpty
(
account
.
getPhoneNumber
())
&&
!
list
.
contains
(
account
.
getPhoneNumber
().
substring
(
0
,
3
))
&&
inviter
!=
null
)
{
paymentService
.
bankTransferInsertion
(
account
.
getName
(),
16
);
paymentService
.
bankTransferInsertion
(
account
.
getName
(),
globalFieldRepository
.
findAll
().
get
(
0
).
getRegisterGift
()
);
}
log
.
info
(
"new account has been created: "
+
account
.
getName
());
...
...
src/main/java/com/edgec/browserbackend/browser/ErrorCode/VpsErrorCode.java
0 → 100644
View file @
da5c9260
package
com
.
edgec
.
browserbackend
.
browser
.
ErrorCode
;
import
com.edgec.browserbackend.common.commons.error.ErrorCode
;
import
com.fasterxml.jackson.annotation.JsonValue
;
/**
* @author xuxin
* @date 2020/8/13 17:19
* @description
*/
public
enum
VpsErrorCode
implements
ErrorCode
{
/**
* 未知错误
*/
UNKNOWN
(
ErrorCode
.
COMMON_UNKNOWN
,
"unknown"
),
/**
* vps不存在
*/
VPS_NOT_EXIST
(
VPS_BASE
+
201
,
"The VPS do not exist"
),
/**
* 不具备分配权限
*/
VPS_NOT_ACCESS
(
VPS_BASE
+
202
,
"The user do not has access to assign vps"
);
private
final
int
code
;
private
final
String
reason
;
VpsErrorCode
(
int
value
,
String
reasonPhrase
)
{
this
.
code
=
value
;
this
.
reason
=
reasonPhrase
;
}
@Override
public
int
value
()
{
return
this
.
code
;
}
@JsonValue
@Override
public
int
getCode
()
{
return
code
;
}
@Override
public
String
toString
()
{
return
Integer
.
toString
(
this
.
code
);
}
@Override
public
String
getReason
()
{
return
reason
;
}
}
src/main/java/com/edgec/browserbackend/browser/controller/VpsController.java
0 → 100644
View file @
da5c9260
package
com
.
edgec
.
browserbackend
.
browser
.
controller
;
import
com.edgec.browserbackend.account.dto.ResultDto
;
import
com.edgec.browserbackend.browser.domain.Vps
;
import
com.edgec.browserbackend.browser.dto.AssignVpsDto
;
import
com.edgec.browserbackend.browser.dto.PageInfo
;
import
com.edgec.browserbackend.browser.dto.VpsPageResultDto
;
import
com.edgec.browserbackend.browser.service.VpsService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.domain.Page
;
import
org.springframework.data.domain.PageRequest
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.*
;
import
java.security.Principal
;
import
java.util.List
;
/**
* @author xuxin
* @date 2020/8/13 11:49
* @description
*/
@RestController
@RequestMapping
(
"/vps"
)
public
class
VpsController
{
@Autowired
private
VpsService
vpsService
;
@PostMapping
(
"/add"
)
public
ResultDto
addVps
(
Principal
principal
,
@Validated
@RequestBody
Vps
vps
)
{
ResultDto
resultDto
=
new
ResultDto
();
vps
.
setOwner1
(
principal
.
getName
());
String
s
=
vpsService
.
addVps
(
vps
);
resultDto
.
setData
(
s
);
return
resultDto
;
}
@DeleteMapping
(
"/{id}"
)
public
ResultDto
deleteVps
(
Principal
principal
,
@PathVariable
String
id
)
{
ResultDto
resultDto
=
new
ResultDto
();
vpsService
.
deleteVps
(
principal
.
getName
(),
id
);
resultDto
.
setStatus
(
0
);
return
resultDto
;
}
@PutMapping
(
"/update"
)
public
ResultDto
updateVps
(
@RequestBody
Vps
vps
)
{
ResultDto
resultDto
=
new
ResultDto
();
vpsService
.
updateVps
(
vps
);
resultDto
.
setStatus
(
0
);
return
resultDto
;
}
/**
* 登录
*/
@GetMapping
(
"/login_vps/{id}"
)
public
ResultDto
getVps
(
@PathVariable
String
id
)
{
ResultDto
resultDto
=
new
ResultDto
();
String
rdp
=
vpsService
.
loginVps
(
id
);
resultDto
.
setStatus
(
0
);
resultDto
.
setData
(
rdp
);
return
resultDto
;
}
/**
* 列表
*/
@GetMapping
(
"/list"
)
public
ResultDto
getVpsList
(
Principal
principal
,
@RequestParam
(
value
=
"page"
)
int
page
,
@RequestParam
(
value
=
"size"
)
int
size
)
{
ResultDto
resultDto
=
new
ResultDto
();
Pageable
pageable
=
PageRequest
.
of
(
page
,
size
);
Page
<
Vps
>
pageInfo
=
vpsService
.
queryPage
(
principal
.
getName
(),
pageable
);
resultDto
.
setData
(
pageInfo
);
/// 临时这样写,有空了得去掉下面三行
PageInfo
pageResult
=
new
PageInfo
(
pageInfo
.
getPageable
().
getPageNumber
(),
pageInfo
.
getTotalPages
(),
(
int
)
pageInfo
.
getTotalElements
());
VpsPageResultDto
<
Vps
>
shopPageResultDto
=
new
VpsPageResultDto
<
Vps
>(
pageInfo
.
getContent
(),
pageResult
);
resultDto
.
setData
(
shopPageResultDto
);
resultDto
.
setStatus
(
0
);
return
resultDto
;
}
/**
* 分配 vps 给子账户
*/
@PostMapping
(
"/assign"
)
public
ResultDto
assignVpsList
(
Principal
principal
,
@RequestBody
AssignVpsDto
assignVpsDto
)
{
ResultDto
resultDto
=
new
ResultDto
();
vpsService
.
assignVpsList
(
principal
.
getName
(),
assignVpsDto
);
resultDto
.
setStatus
(
0
);
return
resultDto
;
}
/**
* 查看当前vps已经绑定的 子用户
*/
@GetMapping
(
"/list/{id}"
)
public
ResultDto
getVpsList
(
Principal
principal
,
@PathVariable
String
id
)
{
ResultDto
resultDto
=
new
ResultDto
();
List
<
String
>
list
=
vpsService
.
queryAssignUserList
(
principal
.
getName
(),
id
);
resultDto
.
setData
(
list
);
resultDto
.
setStatus
(
0
);
return
resultDto
;
}
}
src/main/java/com/edgec/browserbackend/browser/domain/Vps.java
0 → 100644
View file @
da5c9260
package
com
.
edgec
.
browserbackend
.
browser
.
domain
;
import
com.edgec.browserbackend.common.utils.Aes
;
import
com.fasterxml.jackson.annotation.JsonIgnoreProperties
;
import
lombok.Data
;
import
org.springframework.data.annotation.Id
;
import
org.springframework.data.mongodb.core.mapping.Document
;
import
javax.validation.constraints.NotEmpty
;
/**
* @author xuxin
* @date 2020/8/13 10:49
* @description
*/
@Data
@Document
(
"vps"
)
@JsonIgnoreProperties
(
ignoreUnknown
=
true
)
public
class
Vps
{
/**
* vps id
*/
@Id
private
String
id
;
/**
* vps ip
*/
@NotEmpty
private
String
vpsIp
;
/**
* vps 登录名
*/
@NotEmpty
private
String
vpsUser
;
/**
* vps 登录密码
*/
@NotEmpty
private
String
vpsPassword
;
/**
* vps 所绑定的店铺名
*/
@NotEmpty
private
String
vpsShopName
;
/**
* vps 创建者,即当前登录用户
*/
private
String
owner1
;
/**
* vps 创建者的父账号id
*/
private
String
owner2
;
/**
* ip的购买时间点
*/
private
long
createTime
;
public
String
getVpsPassword
()
{
return
Aes
.
aesDecrypt
(
vpsPassword
);
}
public
void
setVpsPassword
(
String
vpsPassword
)
{
this
.
vpsPassword
=
Aes
.
aesEncrypt
(
vpsPassword
);
}
}
src/main/java/com/edgec/browserbackend/browser/dto/AssignVpsDto.java
0 → 100644
View file @
da5c9260
package
com
.
edgec
.
browserbackend
.
browser
.
dto
;
import
lombok.Data
;
import
java.util.List
;
/**
* @author xuxin
* @date 2020/8/15 18:06
* @description
*/
@Data
public
class
AssignVpsDto
{
/**
* 需要分配的 vpsId 列表
*/
private
List
<
String
>
vpsIds
;
/**
* 接收vps分配的用户id
*/
private
List
<
String
>
userIds
;
}
src/main/java/com/edgec/browserbackend/browser/dto/UserVpsDto.java
0 → 100644
View file @
da5c9260
package
com
.
edgec
.
browserbackend
.
browser
.
dto
;
import
com.fasterxml.jackson.annotation.JsonIgnoreProperties
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
org.springframework.data.annotation.Id
;
import
org.springframework.data.mongodb.core.mapping.Document
;
import
java.util.List
;
/**
* @author xuxin
* @date 2020/8/14 14:57
* @description 记录的是 vps 的分配
*/
@Data
@AllArgsConstructor
@Document
(
"uservps"
)
@JsonIgnoreProperties
(
ignoreUnknown
=
true
)
public
class
UserVpsDto
{
@Id
private
String
userId
;
private
List
<
String
>
vpsIdList
;
}
src/main/java/com/edgec/browserbackend/browser/dto/VpsPageResultDto.java
0 → 100644
View file @
da5c9260
package
com
.
edgec
.
browserbackend
.
browser
.
dto
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
java.util.List
;
/**
* @author xuxin
* @date 2020/8/19 17:48
* @description
*/
@Data
@AllArgsConstructor
public
class
VpsPageResultDto
<
T
>
{
List
<
T
>
vpsList
;
PageInfo
vpsPage
;
}
src/main/java/com/edgec/browserbackend/browser/repository/GlobalFieldRepositoryCustomImpl.java
deleted
100644 → 0
View file @
aa155da0
package
com
.
edgec
.
browserbackend
.
browser
.
repository
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.mongodb.core.MongoTemplate
;
/**
* @author xuxin
* @date 2020/8/3 17:02
* @description
*/
public
class
GlobalFieldRepositoryCustomImpl
implements
GlobalFieldRepositoryCustom
{
@Autowired
private
MongoTemplate
mongoTemplate
;
}
src/main/java/com/edgec/browserbackend/browser/repository/UserVpsRepository.java
0 → 100644
View file @
da5c9260
package
com
.
edgec
.
browserbackend
.
browser
.
repository
;
import
com.edgec.browserbackend.browser.dto.UserVpsDto
;
import
org.springframework.data.mongodb.repository.MongoRepository
;
import
java.util.List
;
/**
* @author xuxin
* @date 2020/8/15 17:35
* @description
*/
public
interface
UserVpsRepository
extends
MongoRepository
<
UserVpsDto
,
String
>,
UserVpsRepositoryCustom
{
List
<
UserVpsDto
>
findByUserIdLikeAndVpsIdListIn
(
String
id
,
String
vpsId
);
}
src/main/java/com/edgec/browserbackend/browser/repository/
GlobalField
RepositoryCustom.java
→
src/main/java/com/edgec/browserbackend/browser/repository/
UserVps
RepositoryCustom.java
View file @
da5c9260
package
com
.
edgec
.
browserbackend
.
browser
.
repository
;
import
java.util.List
;
/**
* @author xuxin
* @date 2020/8/
3 17:00
* @date 2020/8/
24 14:07
* @description
*/
public
interface
GlobalFieldRepositoryCustom
{
public
interface
UserVpsRepositoryCustom
{
boolean
deleteVpsIdOfUserVpsList
(
String
id
,
String
vpsId
);
boolean
updateAll
(
List
<
String
>
userIds
,
List
<
String
>
vpsIds
);
}
src/main/java/com/edgec/browserbackend/browser/repository/UserVpsRepositoryCustomImpl.java
0 → 100644
View file @
da5c9260
package
com
.
edgec
.
browserbackend
.
browser
.
repository
;
import
com.edgec.browserbackend.browser.dto.UserVpsDto
;
import
com.mongodb.client.result.UpdateResult
;
import
org.bson.Document
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.mongodb.core.MongoTemplate
;
import
org.springframework.data.mongodb.core.query.BasicQuery
;
import
org.springframework.data.mongodb.core.query.Update
;
import
java.util.List
;
import
static
org
.
springframework
.
data
.
mongodb
.
core
.
query
.
Criteria
.
where
;
/**
* @author xuxin
* @date 2020/8/24 14:08
* @description
*/
public
class
UserVpsRepositoryCustomImpl
implements
UserVpsRepositoryCustom
{
@Autowired
private
MongoTemplate
mongoTemplate
;
@Override
public
boolean
deleteVpsIdOfUserVpsList
(
String
id
,
String
vpsId
)
{
Document
doc
=
new
Document
();
BasicQuery
basicQuery
=
new
BasicQuery
(
doc
);
basicQuery
.
addCriteria
(
where
(
"_id"
).
is
(
id
));
Update
update
=
new
Update
();
update
.
pull
(
"vpsIdList"
,
vpsId
);
UpdateResult
result
=
mongoTemplate
.
updateFirst
(
basicQuery
,
update
,
UserVpsDto
.
class
);
return
result
.
getModifiedCount
()
>=
1
;
}
@Override
public
boolean
updateAll
(
List
<
String
>
userIds
,
List
<
String
>
vpsIds
)
{
Document
doc
=
new
Document
();
BasicQuery
basicQuery
=
new
BasicQuery
(
doc
);
basicQuery
.
addCriteria
(
where
(
"_id"
).
in
(
userIds
));
Update
update
=
new
Update
();
update
.
addToSet
(
"vpsIdList"
).
each
(
vpsIds
);
UpdateResult
result
=
mongoTemplate
.
updateMulti
(
basicQuery
,
update
,
UserVpsDto
.
class
);
return
result
.
getModifiedCount
()
==
userIds
.
size
();
}
}
src/main/java/com/edgec/browserbackend/browser/repository/VpsRepository.java
0 → 100644
View file @
da5c9260
package
com
.
edgec
.
browserbackend
.
browser
.
repository
;
import
com.edgec.browserbackend.browser.domain.Vps
;
import
org.springframework.data.domain.Page
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.data.mongodb.repository.MongoRepository
;
import
java.util.List
;
import
java.util.Optional
;
/**
* @author xuxin
* @date 2020/8/13 11:44
* @description
*/
public
interface
VpsRepository
extends
MongoRepository
<
Vps
,
String
>
{
Page
<
Vps
>
findByIdInOrderByCreateTimeDesc
(
List
<
String
>
idList
,
Pageable
pageable
);
List
<
Vps
>
findByOwner1OrOwner2
(
String
userId1
,
String
userId2
);
Optional
<
Vps
>
findByIdAndOwner1AndOwner2
(
String
id
,
String
owner1
,
String
owner2
);
}
src/main/java/com/edgec/browserbackend/browser/service/Impl/IpResourceServiceImpl.java
View file @
da5c9260
...
...
@@ -644,10 +644,9 @@ public class IpResourceServiceImpl implements IpResourceService {
// 获取当前用户的账户
Account
account
=
accountRepository
.
findByName
(
username
).
orElseThrow
(()
->
new
ClientRequestException
(
AccountErrorCode
.
NAMENOTEXIST
));
// 获取当前用户对应的 groupType 的 ip 资及未使用的 ip资源
List
<
IpResource
>
ipResources
=
new
ArrayList
<>();
List
<
IpResource
>
notUsed
=
new
ArrayList
<>();
// 获取当前用户的 ip 资及未使用的 ip资源
dealIpResourceByGroup
(
ipResources
,
notUsed
,
account
,
username
,
groupType
);
if
(
CollectionUtils
.
isNotEmpty
(
notUsed
))
{
...
...
@@ -932,9 +931,8 @@ public class IpResourceServiceImpl implements IpResourceService {
List
<
String
>
accountNameList
=
new
ArrayList
<>();
accountNameList
.
add
(
account
.
getName
());
boolean
isParent
=
false
;
if
(
account
.
getParent
()
==
null
)
{
isParent
=
true
;
boolean
isParent
=
account
.
getParent
()
==
null
;
if
(
isParent
)
{
// 获取当前用户的 子账户名
List
<
String
>
children
=
accountRepository
.
findByParent
(
account
.
getName
()).
stream
().
map
(
Account:
:
getName
).
collect
(
Collectors
.
toList
());
accountNameList
.
addAll
(
children
);
...
...
src/main/java/com/edgec/browserbackend/browser/service/Impl/ShopServiceImpl.java
View file @
da5c9260
...
...
@@ -290,12 +290,16 @@ public class ShopServiceImpl implements ShopService {
throw
new
ClientRequestException
(
AccountErrorCode
.
NOPERMISSION
);
}
logger
.
info
(
"assign shops step-1 "
+
account
.
getPermission
());
// 2. 校验当前用户是否绑定了对应的 shops,并获取 usershops信息
List
<
UserShop
>
userShops
=
userShopRepository
.
findByUsernameAndShopIdIn
(
username
,
shopIds
);
if
(
userShops
==
null
||
userShops
.
size
()
<
1
)
{
throw
new
ClientRequestException
(
BrowserErrorCode
.
USER_NOT_BIND_SHOP
);
}
logger
.
info
(
"assign shops step-2 "
+
userShops
.
stream
().
map
(
UserShop:
:
getShopId
).
collect
(
Collectors
.
toList
()).
toArray
().
toString
());
// 3. 查询 目标 账户是否存在,并获取账户信息。注意:目标账户只能是当前用户的子账户
List
<
Account
>
accounts
=
accountRepository
.
findByNameIn
(
users
);
if
(
accounts
==
null
||
accounts
.
size
()
!=
users
.
size
())
{
...
...
@@ -305,6 +309,7 @@ public class ShopServiceImpl implements ShopService {
if
(
ac
.
getParent
()
==
null
||
!
ac
.
getParent
().
equals
(
username
))
{
throw
new
ClientRequestException
(
AccountErrorCode
.
NOPERMISSION
);
}
logger
.
info
(
"assign shops step-3 "
+
ac
.
getName
());
}
// 4. 获取 shop 信息 并校验
...
...
@@ -313,7 +318,7 @@ public class ShopServiceImpl implements ShopService {
if
(
shops
==
null
||
shops
.
size
()
<
1
)
{
throw
new
ClientRequestException
(
BrowserErrorCode
.
SHOPNOTEXIST
);
}
logger
.
info
(
"assign shops step-4 "
+
shops
.
size
());
try
{
if
(
shops
.
size
()
==
1
)
{
// 5. 删除除当前用户外的所有 usershop 信息
...
...
@@ -321,6 +326,7 @@ public class ShopServiceImpl implements ShopService {
for
(
Account
account1
:
accounts
)
{
// todo 这个地方有点多余
UserShop
userShop1
=
userShopRepository
.
findByUsernameAndShopId
(
account1
.
getName
(),
shops
.
get
(
0
).
getShopId
());
logger
.
info
(
"assign shops step-5.1 "
+
(
userShop1
==
null
));
if
(
userShop1
!=
null
)
{
continue
;
}
...
...
@@ -328,21 +334,26 @@ public class ShopServiceImpl implements ShopService {
// 6. 封装 目标账户的 usershop信息并保存
userShop1
=
new
UserShop
(
account1
.
getName
(),
shops
.
get
(
0
).
getShopId
(),
"-1"
);
userShopRepository
.
save
(
userShop1
);
logger
.
info
(
"assign shops step-5.2 "
+
userShop1
.
toString
());
}
}
else
{
shops
.
forEach
(
shop
->
{
for
(
Account
account1
:
accounts
)
{
UserShop
userShop1
=
userShopRepository
.
findByUsernameAndShopId
(
account1
.
getName
(),
shop
.
getShopId
());
logger
.
info
(
"assign shops step-5.1 "
+
(
userShop1
==
null
));
if
(
userShop1
!=
null
)
{
return
;
continue
;
}
userShop1
=
new
UserShop
(
account1
.
getName
(),
shop
.
getShopId
(),
"-1"
);
userShopRepository
.
save
(
userShop1
);
logger
.
info
(
"assign shops step-5.2 "
+
userShop1
.
toString
());
}
}
);
}
logger
.
info
(
"---------assign shops-----------"
);
}
catch
(
Exception
e
)
{
logger
.
error
(
"fail to assign"
,
e
.
getMessage
());
throw
new
ClientRequestException
(
BrowserErrorCode
.
UNKNOWN
);
...
...
src/main/java/com/edgec/browserbackend/browser/service/Impl/VpsServiceImpl.java
0 → 100644
View file @
da5c9260
package
com
.
edgec
.
browserbackend
.
browser
.
service
.
Impl
;
import
com.edgec.browserbackend.account.domain.Account
;
import
com.edgec.browserbackend.account.repository.AccountRepository
;
import
com.edgec.browserbackend.browser.ErrorCode.VpsErrorCode
;
import
com.edgec.browserbackend.browser.domain.Vps
;
import
com.edgec.browserbackend.browser.dto.AssignVpsDto
;
import
com.edgec.browserbackend.browser.dto.UserVpsDto
;
import
com.edgec.browserbackend.browser.repository.UserVpsRepository
;
import
com.edgec.browserbackend.browser.repository.VpsRepository
;
import
com.edgec.browserbackend.browser.service.VpsService
;
import
com.edgec.browserbackend.common.commons.error.ClientRequestException
;
import
com.edgec.browserbackend.common.utils.BeanUtils
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.domain.Page
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.StringUtils
;
import
java.time.Instant
;
import
java.util.ArrayList
;
import
java.util.Iterator
;
import
java.util.List
;
import
java.util.Optional
;
import
java.util.stream.Collectors
;
/**
* @author xuxin
* @date 2020/8/13 11:45
* @description
*/
@Slf4j
@Service
public
class
VpsServiceImpl
implements
VpsService
{
@Autowired
private
VpsRepository
vpsRepository
;
@Autowired
private
AccountRepository
accountRepository
;
@Autowired
private
UserVpsRepository
userVpsRepository
;
private
static
String
rdpString
=
"screen mode id:i:2\n"
+
"use multimon:i:0\n"
+
"desktopwidth:i:1920\n"
+
"desktopheight:i:1080\n"
+
"session bpp:i:32\n"
+
"winposstr:s:0,1,96,127,1920,1001\n"
+
"compression:i:1\n"
+
"keyboardhook:i:2\n"
+
"audiocapturemode:i:0\n"
+
"videoplaybackmode:i:1\n"
+
"connection type:i:7\n"
+
"networkautodetect:i:1\n"
+
"bandwidthautodetect:i:1\n"
+
"displayconnectionbar:i:1\n"
+
"enableworkspacereconnect:i:0\n"
+
"disable wallpaper:i:0\n"
+
"allow font smoothing:i:0\n"
+
"allow desktop composition:i:0\n"
+
"disable full window drag:i:1\n"
+
"disable menu anims:i:1\n"
+
"disable themes:i:0\n"
+
"disable cursor setting:i:0\n"
+
"bitmapcachepersistenable:i:1\n"
+
"full address:s:#VPS_IP#\n"
+
"audiomode:i:0\n"
+
"redirectprinters:i:1\n"
+
"redirectcomports:i:0\n"
+
"redirectsmartcards:i:1\n"
+
"redirectclipboard:i:1\n"
+
"redirectposdevices:i:0\n"
+
"autoreconnection enabled:i:1\n"
+
"authentication level:i:2\n"
+
"prompt for credentials:i:0\n"
+
"negotiate security layer:i:1\n"
+
"remoteapplicationmode:i:0\n"
+
"alternate shell:s:\n"
+
"shell working directory:s:\n"
+
"gatewayhostname:s:\n"
+
"gatewayusagemethod:i:4\n"
+
"gatewaycredentialssource:i:4\n"
+
"gatewayprofileusagemethod:i:0\n"
+
"promptcredentialonce:i:0\n"
+
"gatewaybrokeringtype:i:0\n"
+
"use redirection server name:i:0\n"
+
"rdgiskdcproxy:i:0\n"
+
"kdcproxyname:s:\n"
+
"drivestoredirect:s:C:\\:s:D:\\\n"
+
"username:s:#VPS_USER#\n"
+
"password 51:b:#VPS_PASSWORD#\n"
;
@Override
public
String
addVps
(
Vps
vps
)
{
Optional
<
Account
>
byId
=
accountRepository
.
findById
(
vps
.
getOwner1
());
String
parent
=
null
;
if
(
byId
.
isPresent
())
{
parent
=
byId
.
get
().
getParent
();
}
if
(!
StringUtils
.
isEmpty
(
parent
))
{
vps
.
setOwner2
(
parent
);
}
vps
.
setCreateTime
(
Instant
.
now
().
toEpochMilli
());
Vps
save
=
vpsRepository
.
save
(
vps
);
return
save
.
getId
();
}
@Override
public
void
deleteVps
(
String
userId
,
String
vpsId
)
{
Vps
vps
=
vpsRepository
.
findById
(
vpsId
).
orElseThrow
(()
->
new
ClientRequestException
(
VpsErrorCode
.
VPS_NOT_EXIST
));
if
(
userId
.
equals
(
vps
.
getOwner1
())
||
userId
.
equals
(
vps
.
getOwner2
()))
{
vpsRepository
.
deleteById
(
vpsId
);
// 删除与当前 vps 相关的 分配信息
List
<
String
>
userIds
=
accountRepository
.
findIdsByParentId
(
userId
);
// 移除账户列表中的 vps 的创建者 与 父用户
userIds
.
remove
(
vps
.
getOwner1
());
userIds
.
remove
(
vps
.
getOwner2
());
userIds
.
forEach
(
// 删除 UserVpsDto 中 UserVpsList 分配的 vpsId
userId1
->
userVpsRepository
.
deleteVpsIdOfUserVpsList
(
userId1
,
vpsId
)
);
}
else
{
throw
new
ClientRequestException
(
VpsErrorCode
.
VPS_NOT_ACCESS
);
}
}
@Override
public
void
updateVps
(
Vps
vps
)
{
Vps
destination
=
vpsRepository
.
findById
(
vps
.
getId
()).
orElseThrow
(()
->
new
ClientRequestException
(
VpsErrorCode
.
VPS_NOT_EXIST
));
vps
.
setId
(
null
);
BeanUtils
.
mergeObject
(
vps
,
destination
);
vpsRepository
.
save
(
destination
);
}
@Override
public
String
loginVps
(
String
id
)
{
Vps
vps
=
vpsRepository
.
findById
(
id
).
orElseThrow
(()
->
new
ClientRequestException
(
VpsErrorCode
.
VPS_NOT_EXIST
));
return
rdpString
.
replace
(
"#VPS_IP#"
,
vps
.
getVpsIp
()).
replace
(
"#VPS_USER#"
,
vps
.
getVpsUser
()).
replace
(
"#VPS_PASSWORD#"
,
vps
.
getVpsPassword
())
+
"shopname:"
+
vps
.
getVpsShopName
();
}
@Override
public
Page
<
Vps
>
queryPage
(
String
userId
,
Pageable
pageable
)
{
// 1. 获取属于当前创建的 vps
List
<
String
>
ids
=
new
ArrayList
<>(
vpsRepository
.
findByOwner1OrOwner2
(
userId
,
userId
).
stream
().
map
(
Vps:
:
getId
).
collect
(
Collectors
.
toList
()));
// 2. 获取分配给当前登录用户的vps
UserVpsDto
userVpsDto
=
userVpsRepository
.
findById
(
userId
).
orElse
(
null
);
if
(
userVpsDto
!=
null
)
{
ids
.
addAll
(
userVpsDto
.
getVpsIdList
());
}
Page
<
Vps
>
page
=
vpsRepository
.
findByIdInOrderByCreateTimeDesc
(
ids
,
pageable
);
/*// 由于在删除vps的时候,没有在分配的账户中删除对应的 vps。所以需要在这里进行惰性删除
List<String> list = page.getContent().stream().map(Vps::getId).collect(Collectors.toList());
if (userVpsDto != null) {
userVpsDto.getVpsIdList().removeAll(list);
userVpsRepository.save(userVpsDto);
}*/
return
page
;
}
@Override
public
void
assignVpsList
(
String
userId
,
AssignVpsDto
assignVpsDto
)
{
Optional
<
Account
>
byId
=
accountRepository
.
findById
(
userId
);
String
parent
=
null
;
if
(
byId
.
isPresent
())
{
parent
=
byId
.
get
().
getParent
();
}
if
(!
StringUtils
.
isEmpty
(
parent
))
{
throw
new
ClientRequestException
(
VpsErrorCode
.
VPS_NOT_ACCESS
);
}
// 分配前,先删除之前的分配信息
// 1. 获取当前用户的所有关联账户(自身+子账户)
List
<
String
>
ids
=
accountRepository
.
findIdsByParentId
(
userId
);
Iterable
<
Vps
>
vpsIter
=
vpsRepository
.
findAllById
(
assignVpsDto
.
getVpsIds
());
Iterator
<
Vps
>
iterator
=
vpsIter
.
iterator
();
while
(
iterator
.
hasNext
())
{
List
<
String
>
currentIds
=
new
ArrayList
<>(
ids
);
Vps
next
=
iterator
.
next
();
// 移除账户列表中的 vps 的创建者 与 父用户
currentIds
.
remove
(
next
.
getOwner1
());
currentIds
.
remove
(
next
.
getOwner2
());
currentIds
.
forEach
(
// 删除 UserVpsDto 中 UserVpsList 分配的 vpsId
userId1
->
userVpsRepository
.
deleteVpsIdOfUserVpsList
(
userId1
,
next
.
getId
())
);
}
boolean
b
=
userVpsRepository
.
updateAll
(
assignVpsDto
.
getUserIds
(),
assignVpsDto
.
getVpsIds
());
if
(!
b
)
{
log
.
error
(
"批量分配给用户 {} vps类别 {} 失败"
,
assignVpsDto
.
getUserIds
(),
assignVpsDto
.
getVpsIds
());
}
}
@Override
public
List
<
String
>
queryAssignUserList
(
String
user
,
String
vpsId
)
{
Vps
vps
=
vpsRepository
.
findByIdAndOwner1AndOwner2
(
vpsId
,
user
,
null
).
orElseThrow
(()
->
new
ClientRequestException
(
VpsErrorCode
.
VPS_NOT_EXIST
));
return
userVpsRepository
.
findByUserIdLikeAndVpsIdListIn
(
user
,
vps
.
getId
()).
stream
().
map
(
UserVpsDto:
:
getUserId
).
collect
(
Collectors
.
toList
());
}
}
src/main/java/com/edgec/browserbackend/browser/service/VpsService.java
0 → 100644
View file @
da5c9260
package
com
.
edgec
.
browserbackend
.
browser
.
service
;
import
com.edgec.browserbackend.browser.domain.Vps
;
import
com.edgec.browserbackend.browser.dto.AssignVpsDto
;
import
org.springframework.data.domain.Page
;
import
org.springframework.data.domain.Pageable
;
import
java.util.List
;
/**
* @author xuxin
* @date 2020/8/13 11:45
* @description
*/
public
interface
VpsService
{
String
addVps
(
Vps
vps
);
void
deleteVps
(
String
userId
,
String
id
);
void
updateVps
(
Vps
vps
);
String
loginVps
(
String
id
);
Page
<
Vps
>
queryPage
(
String
user
,
Pageable
pageable
);
void
assignVpsList
(
String
userId
,
AssignVpsDto
assignVpsDto
);
List
<
String
>
queryAssignUserList
(
String
user
,
String
vpsId
);
}
src/main/java/com/edgec/browserbackend/common/commons/error/ErrorCode.java
View file @
da5c9260
...
...
@@ -17,6 +17,7 @@ public interface ErrorCode {
public
static
final
int
AUTH_BASE
=
500000
;
public
static
final
int
BROWSER_BASE
=
600000
;
public
static
final
int
VPS_BASE
=
700000
;
int
value
();
...
...
src/main/java/com/edgec/browserbackend/common/utils/BeanUtils.java
0 → 100644
View file @
da5c9260
package
com
.
edgec
.
browserbackend
.
common
.
utils
;
import
lombok.extern.slf4j.Slf4j
;
import
java.lang.reflect.Field
;
/**
* @author xuxin
* @date 2020/8/17 11:27
* @description
*/
@Slf4j
public
class
BeanUtils
{
/**
* 赋值给同类对象
* 将origin属性注入到destination中
*
* @param origin 原始对象
* @param destination 目标对象
* @param <T> 泛型
*/
public
static
<
T
>
void
mergeObject
(
T
origin
,
T
destination
)
{
if
(
origin
==
null
||
destination
==
null
)
{
return
;
}
if
(!
origin
.
getClass
().
equals
(
destination
.
getClass
()))
{
return
;
}
Field
[]
fields
=
origin
.
getClass
().
getDeclaredFields
();
for
(
Field
field
:
fields
)
{
field
.
setAccessible
(
true
);
Object
value
=
null
;
try
{
value
=
field
.
get
(
origin
);
if
(
value
!=
null
&&
!
""
.
equals
(
value
))
{
field
.
set
(
destination
,
value
);
}
}
catch
(
IllegalAccessException
e
)
{
log
.
error
(
"同类对象赋值失败"
,
e
);
}
field
.
setAccessible
(
false
);
}
}
}
src/main/resources/logback-spring.xml
View file @
da5c9260
...
...
@@ -72,7 +72,7 @@
</root>
</springProfile>
<springProfile
name=
"
test
"
>
<springProfile
name=
"
staging
"
>
<!-- In production env, logging info++ -->
<root
level=
"info"
>
<appender-ref
ref=
"info_file"
/>
...
...
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