Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
amos-boot-biz
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
项目统一框架
amos-boot-biz
Commits
7b70e96d
Commit
7b70e96d
authored
Apr 23, 2023
by
tianyiming
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
根据单位历史数据使用统一信用代码批量生成二维码
parent
3291ded1
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
80 additions
and
33 deletions
+80
-33
TzBaseEnterpriseInfoDto.java
...amos/boot/module/tzs/api/dto/TzBaseEnterpriseInfoDto.java
+4
-0
TzBaseEnterpriseInfo.java
...amos/boot/module/tzs/api/entity/TzBaseEnterpriseInfo.java
+2
-1
ITzBaseEnterpriseInfoService.java
.../module/tzs/api/service/ITzBaseEnterpriseInfoService.java
+1
-2
IRegUnitInfoService.java
.../boot/module/tzs/flc/api/service/IRegUnitInfoService.java
+2
-0
RegUnitInfoController.java
.../module/tzs/flc/biz/controller/RegUnitInfoController.java
+24
-30
RegUnitInfoServiceImpl.java
...dule/tzs/flc/biz/service/impl/RegUnitInfoServiceImpl.java
+47
-0
No files found.
amos-boot-system-tzs/amos-boot-module-tzs-api/src/main/java/com/yeejoin/amos/boot/module/tzs/api/dto/TzBaseEnterpriseInfoDto.java
View file @
7b70e96d
...
@@ -52,6 +52,10 @@ public class TzBaseEnterpriseInfoDto extends BaseDto {
...
@@ -52,6 +52,10 @@ public class TzBaseEnterpriseInfoDto extends BaseDto {
* 使用单位统一信用代码
* 使用单位统一信用代码
*/
*/
private
String
useCode
;
private
String
useCode
;
@ApiModelProperty
(
value
=
"根据统一信用代码生成的二维码"
)
private
String
qrCode
;
@ApiModelProperty
(
value
=
"使用单位名称"
)
@ApiModelProperty
(
value
=
"使用单位名称"
)
/**
/**
* 使用单位名称
* 使用单位名称
...
...
amos-boot-system-tzs/amos-boot-module-tzs-api/src/main/java/com/yeejoin/amos/boot/module/tzs/api/entity/TzBaseEnterpriseInfo.java
View file @
7b70e96d
...
@@ -176,5 +176,6 @@ public class TzBaseEnterpriseInfo extends BaseEntity {
...
@@ -176,5 +176,6 @@ public class TzBaseEnterpriseInfo extends BaseEntity {
@ApiModelProperty
(
value
=
"质量保证工程师电话"
)
@ApiModelProperty
(
value
=
"质量保证工程师电话"
)
private
String
sqaPhone
;
private
String
sqaPhone
;
@ApiModelProperty
(
value
=
"根据统一信用代码生成的二维码"
)
private
String
qrCode
;
}
}
amos-boot-system-tzs/amos-boot-module-tzs-api/src/main/java/com/yeejoin/amos/boot/module/tzs/api/service/ITzBaseEnterpriseInfoService.java
View file @
7b70e96d
...
@@ -6,7 +6,6 @@ import com.yeejoin.amos.boot.module.tzs.api.dto.EquEnterDto;
...
@@ -6,7 +6,6 @@ import com.yeejoin.amos.boot.module.tzs.api.dto.EquEnterDto;
import
com.yeejoin.amos.boot.module.tzs.api.dto.TzBaseEnterpriseInfoDto
;
import
com.yeejoin.amos.boot.module.tzs.api.dto.TzBaseEnterpriseInfoDto
;
import
com.yeejoin.amos.boot.module.tzs.api.entity.PageParam
;
import
com.yeejoin.amos.boot.module.tzs.api.entity.PageParam
;
import
com.yeejoin.amos.boot.module.tzs.api.entity.TzBaseEnterpriseInfo
;
import
com.yeejoin.amos.boot.module.tzs.api.entity.TzBaseEnterpriseInfo
;
import
com.yeejoin.amos.boot.module.tzs.flc.api.entity.RegUnitInfo
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Map
;
...
@@ -40,5 +39,5 @@ public interface ITzBaseEnterpriseInfoService extends IService<TzBaseEnterpriseI
...
@@ -40,5 +39,5 @@ public interface ITzBaseEnterpriseInfoService extends IService<TzBaseEnterpriseI
TzBaseEnterpriseInfoDto
companyInfoUpdate
(
Map
<
String
,
Object
>
map
);
TzBaseEnterpriseInfoDto
companyInfoUpdate
(
Map
<
String
,
Object
>
map
);
RegUnitInfo
adminInfoUpdate
(
Map
<
String
,
Object
>
map
);
Map
<
String
,
Object
>
adminInfoUpdate
(
Map
<
String
,
Object
>
map
);
}
}
amos-boot-system-tzs/amos-boot-module-tzs-api/src/main/java/com/yeejoin/amos/boot/module/tzs/flc/api/service/IRegUnitInfoService.java
View file @
7b70e96d
...
@@ -66,4 +66,6 @@ public interface IRegUnitInfoService {
...
@@ -66,4 +66,6 @@ public interface IRegUnitInfoService {
Boolean
checkRepeatPhone
(
String
phoneNo
);
Boolean
checkRepeatPhone
(
String
phoneNo
);
void
updateAdminInfo
(
JSONObject
dataResult
);
void
updateAdminInfo
(
JSONObject
dataResult
);
Boolean
creatQrCode
();
}
}
amos-boot-system-tzs/amos-boot-module-tzs-biz/src/main/java/com/yeejoin/amos/boot/module/tzs/flc/biz/controller/RegUnitInfoController.java
View file @
7b70e96d
package
com
.
yeejoin
.
amos
.
boot
.
module
.
tzs
.
flc
.
biz
.
controller
;
package
com
.
yeejoin
.
amos
.
boot
.
module
.
tzs
.
flc
.
biz
.
controller
;
import
java.util.Collection
;
import
com.yeejoin.amos.boot.biz.common.controller.BaseController
;
import
java.util.HashMap
;
import
com.yeejoin.amos.boot.biz.common.entity.DataDictionary
;
import
java.util.List
;
import
com.yeejoin.amos.boot.biz.common.utils.RedisKey
;
import
java.util.Random
;
import
com.yeejoin.amos.boot.biz.common.utils.RedisUtils
;
import
com.yeejoin.amos.boot.module.tzs.flc.api.dto.RegUnitInfoDto
;
import
javax.servlet.http.HttpServletRequest
;
import
com.yeejoin.amos.boot.module.tzs.flc.api.service.IRegUnitInfoService
;
import
com.yeejoin.amos.feign.privilege.Privilege
;
import
com.yeejoin.amos.feign.privilege.model.AgencyUserModel
;
import
com.yeejoin.amos.feign.systemctl.Systemctl
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.http.HttpStatus
;
import
org.springframework.http.HttpStatus
;
import
org.springframework.web.bind.annotation.DeleteMapping
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.PathVariable
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
import
org.springframework.web.context.request.RequestContextHolder
;
import
org.springframework.web.context.request.RequestContextHolder
;
import
org.springframework.web.context.request.ServletRequestAttributes
;
import
org.springframework.web.context.request.ServletRequestAttributes
;
import
org.typroject.tyboot.core.foundation.context.RequestContext
;
import
org.typroject.tyboot.core.foundation.context.RequestContext
;
...
@@ -28,21 +25,11 @@ import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
...
@@ -28,21 +25,11 @@ import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import
org.typroject.tyboot.core.restful.utils.ResponseHelper
;
import
org.typroject.tyboot.core.restful.utils.ResponseHelper
;
import
org.typroject.tyboot.core.restful.utils.ResponseModel
;
import
org.typroject.tyboot.core.restful.utils.ResponseModel
;
import
com.yeejoin.amos.boot.biz.common.controller.BaseController
;
import
javax.servlet.http.HttpServletRequest
;
import
com.yeejoin.amos.boot.biz.common.entity.DataDictionary
;
import
java.util.Collection
;
import
com.yeejoin.amos.boot.biz.common.utils.RedisKey
;
import
java.util.HashMap
;
import
com.yeejoin.amos.boot.biz.common.utils.RedisUtils
;
import
java.util.List
;
import
com.yeejoin.amos.boot.module.tzs.biz.service.impl.StartPlatformTokenService
;
import
java.util.Random
;
import
com.yeejoin.amos.boot.module.tzs.flc.api.dto.RegUnitInfoDto
;
import
com.yeejoin.amos.boot.module.tzs.flc.api.service.IRegUnitInfoService
;
import
com.yeejoin.amos.component.feign.model.FeignClientResult
;
import
com.yeejoin.amos.feign.privilege.Privilege
;
import
com.yeejoin.amos.feign.privilege.model.AgencyUserModel
;
import
com.yeejoin.amos.feign.privilege.model.CompanyModel
;
import
com.yeejoin.amos.feign.systemctl.Systemctl
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
/**
/**
* 单位注册信息表
* 单位注册信息表
...
@@ -89,6 +76,13 @@ public class RegUnitInfoController extends BaseController {
...
@@ -89,6 +76,13 @@ public class RegUnitInfoController extends BaseController {
}
}
@TycloudOperation
(
ApiLevel
=
UserType
.
AGENCY
,
needAuth
=
false
)
@TycloudOperation
(
ApiLevel
=
UserType
.
AGENCY
,
needAuth
=
false
)
@GetMapping
(
value
=
"/creatQrCode"
)
@ApiOperation
(
httpMethod
=
"GET"
,
value
=
"单位历史数据根据统一信用代码生成二维码"
,
notes
=
"单位历史数据根据统一信用代码生成二维码"
)
public
ResponseModel
<
Object
>
creatQrCode
()
{
return
ResponseHelper
.
buildResponse
(
iRegUnitInfoService
.
creatQrCode
());
}
@TycloudOperation
(
ApiLevel
=
UserType
.
AGENCY
,
needAuth
=
false
)
@GetMapping
(
value
=
"/{unitCode}/check"
)
@GetMapping
(
value
=
"/{unitCode}/check"
)
@ApiOperation
(
httpMethod
=
"GET"
,
value
=
"单位注册校验"
,
notes
=
"单位注册校验"
)
@ApiOperation
(
httpMethod
=
"GET"
,
value
=
"单位注册校验"
,
notes
=
"单位注册校验"
)
public
ResponseModel
<
RegUnitInfoDto
>
unitCheck
(
@PathVariable
String
unitCode
,
public
ResponseModel
<
RegUnitInfoDto
>
unitCheck
(
@PathVariable
String
unitCode
,
...
...
amos-boot-system-tzs/amos-boot-module-tzs-biz/src/main/java/com/yeejoin/amos/boot/module/tzs/flc/biz/service/impl/RegUnitInfoServiceImpl.java
View file @
7b70e96d
...
@@ -8,12 +8,14 @@ import com.yeejoin.amos.boot.biz.common.constants.CommonConstant;
...
@@ -8,12 +8,14 @@ import com.yeejoin.amos.boot.biz.common.constants.CommonConstant;
import
com.yeejoin.amos.boot.biz.common.entity.DataDictionary
;
import
com.yeejoin.amos.boot.biz.common.entity.DataDictionary
;
import
com.yeejoin.amos.boot.biz.common.service.impl.DataDictionaryServiceImpl
;
import
com.yeejoin.amos.boot.biz.common.service.impl.DataDictionaryServiceImpl
;
import
com.yeejoin.amos.boot.biz.common.utils.DateUtils
;
import
com.yeejoin.amos.boot.biz.common.utils.DateUtils
;
import
com.yeejoin.amos.boot.biz.common.utils.QRCodeUtil
;
import
com.yeejoin.amos.boot.biz.common.utils.TreeParser
;
import
com.yeejoin.amos.boot.biz.common.utils.TreeParser
;
import
com.yeejoin.amos.boot.module.common.api.entity.OrgUsr
;
import
com.yeejoin.amos.boot.module.common.api.entity.OrgUsr
;
import
com.yeejoin.amos.boot.module.common.biz.service.impl.OrgUsrServiceImpl
;
import
com.yeejoin.amos.boot.module.common.biz.service.impl.OrgUsrServiceImpl
;
import
com.yeejoin.amos.boot.module.tzs.api.dto.BaseUnitLicenceDto
;
import
com.yeejoin.amos.boot.module.tzs.api.dto.BaseUnitLicenceDto
;
import
com.yeejoin.amos.boot.module.tzs.api.entity.BaseUnitLicence
;
import
com.yeejoin.amos.boot.module.tzs.api.entity.BaseUnitLicence
;
import
com.yeejoin.amos.boot.module.tzs.api.entity.TzBaseEnterpriseInfo
;
import
com.yeejoin.amos.boot.module.tzs.api.entity.TzBaseEnterpriseInfo
;
import
com.yeejoin.amos.boot.module.tzs.api.mapper.TzBaseEnterpriseInfoMapper
;
import
com.yeejoin.amos.boot.module.tzs.biz.service.impl.BaseUnitLicenceServiceImpl
;
import
com.yeejoin.amos.boot.module.tzs.biz.service.impl.BaseUnitLicenceServiceImpl
;
import
com.yeejoin.amos.boot.module.tzs.biz.service.impl.StartPlatformTokenService
;
import
com.yeejoin.amos.boot.module.tzs.biz.service.impl.StartPlatformTokenService
;
import
com.yeejoin.amos.boot.module.tzs.biz.service.impl.TzBaseEnterpriseInfoServiceImpl
;
import
com.yeejoin.amos.boot.module.tzs.biz.service.impl.TzBaseEnterpriseInfoServiceImpl
;
...
@@ -31,13 +33,17 @@ import com.yeejoin.amos.feign.privilege.Privilege;
...
@@ -31,13 +33,17 @@ import com.yeejoin.amos.feign.privilege.Privilege;
import
com.yeejoin.amos.feign.privilege.model.AgencyUserModel
;
import
com.yeejoin.amos.feign.privilege.model.AgencyUserModel
;
import
com.yeejoin.amos.feign.privilege.model.CompanyModel
;
import
com.yeejoin.amos.feign.privilege.model.CompanyModel
;
import
com.yeejoin.amos.feign.privilege.model.RoleModel
;
import
com.yeejoin.amos.feign.privilege.model.RoleModel
;
import
com.yeejoin.amos.feign.systemctl.Systemctl
;
import
org.apache.commons.lang3.ObjectUtils
;
import
org.apache.commons.lang3.ObjectUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.http.entity.ContentType
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.mock.web.MockMultipartFile
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.web.client.RestTemplate
;
import
org.springframework.web.client.RestTemplate
;
import
org.springframework.web.multipart.MultipartFile
;
import
org.typroject.tyboot.core.foundation.context.RequestContext
;
import
org.typroject.tyboot.core.foundation.context.RequestContext
;
import
org.typroject.tyboot.core.foundation.utils.Bean
;
import
org.typroject.tyboot.core.foundation.utils.Bean
;
import
org.typroject.tyboot.core.foundation.utils.ValidationUtil
;
import
org.typroject.tyboot.core.foundation.utils.ValidationUtil
;
...
@@ -45,6 +51,9 @@ import org.typroject.tyboot.core.rdbms.service.BaseService;
...
@@ -45,6 +51,9 @@ import org.typroject.tyboot.core.rdbms.service.BaseService;
import
org.typroject.tyboot.core.restful.exception.instance.BadRequest
;
import
org.typroject.tyboot.core.restful.exception.instance.BadRequest
;
import
org.typroject.tyboot.core.restful.utils.ResponseModel
;
import
org.typroject.tyboot.core.restful.utils.ResponseModel
;
import
java.io.ByteArrayInputStream
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.text.ParseException
;
import
java.text.ParseException
;
import
java.util.*
;
import
java.util.*
;
import
java.util.concurrent.Callable
;
import
java.util.concurrent.Callable
;
...
@@ -78,6 +87,8 @@ public class RegUnitInfoServiceImpl extends BaseService<RegUnitInfoDto, RegUnitI
...
@@ -78,6 +87,8 @@ public class RegUnitInfoServiceImpl extends BaseService<RegUnitInfoDto, RegUnitI
@Autowired
@Autowired
TzBaseEnterpriseInfoServiceImpl
tzBaseEnterpriseInfoService
;
TzBaseEnterpriseInfoServiceImpl
tzBaseEnterpriseInfoService
;
@Autowired
TzBaseEnterpriseInfoMapper
tzBaseEnterpriseInfoMapper
;
@Autowired
@Autowired
RestTemplate
restTemplate
;
RestTemplate
restTemplate
;
...
@@ -223,6 +234,24 @@ public class RegUnitInfoServiceImpl extends BaseService<RegUnitInfoDto, RegUnitI
...
@@ -223,6 +234,24 @@ public class RegUnitInfoServiceImpl extends BaseService<RegUnitInfoDto, RegUnitI
return
model
;
return
model
;
}
}
private
static
String
createQRCode
(
String
unitCode
)
{
String
urlString
=
null
;
byte
[]
bytes
=
QRCodeUtil
.
generateQRCodeImageByteData
(
unitCode
,
150
);
InputStream
inputStream
=
new
ByteArrayInputStream
(
bytes
);
try
{
MultipartFile
file
=
new
MockMultipartFile
(
unitCode
+
".png"
,
unitCode
+
".png"
,
ContentType
.
APPLICATION_OCTET_STREAM
.
toString
(),
inputStream
);
FeignClientResult
<
Map
<
String
,
String
>>
date
=
Systemctl
.
fileStorageClient
.
updateCommonFileFree
(
file
,
"tzs/qrcode"
);
if
(
date
!=
null
)
{
Map
<
String
,
String
>
map
=
date
.
getResult
();
Iterator
<
String
>
it
=
map
.
keySet
().
iterator
();
urlString
=
it
.
next
();
}
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
throw
new
BadRequest
(
unitCode
+
":生成二维码失败"
);
}
return
urlString
;
}
public
void
createBaseEnterpriseInfo
(
RegUnitInfoDto
regUnitInfo
)
{
public
void
createBaseEnterpriseInfo
(
RegUnitInfoDto
regUnitInfo
)
{
// 1.查询管辖公司的信息
// 1.查询管辖公司的信息
...
@@ -234,6 +263,10 @@ public class RegUnitInfoServiceImpl extends BaseService<RegUnitInfoDto, RegUnitI
...
@@ -234,6 +263,10 @@ public class RegUnitInfoServiceImpl extends BaseService<RegUnitInfoDto, RegUnitI
baseEnterpriseInfo
.
setUseUnitCertificate
(
regUnitInfo
.
getUnitCodeTypeName
());
baseEnterpriseInfo
.
setUseUnitCertificate
(
regUnitInfo
.
getUnitCodeTypeName
());
baseEnterpriseInfo
.
setUnitType
(
StringUtils
.
join
(
regUnitInfo
.
getUnitTypeList
(),
"#"
));
baseEnterpriseInfo
.
setUnitType
(
StringUtils
.
join
(
regUnitInfo
.
getUnitTypeList
(),
"#"
));
baseEnterpriseInfo
.
setUseCode
(
regUnitInfo
.
getUnitCode
());
baseEnterpriseInfo
.
setUseCode
(
regUnitInfo
.
getUnitCode
());
TzBaseEnterpriseInfo
useCodeResult
=
tzBaseEnterpriseInfoMapper
.
selectOne
(
new
QueryWrapper
<
TzBaseEnterpriseInfo
>().
eq
(
"use_code"
,
regUnitInfo
.
getUnitCode
()));
if
(!
ObjectUtils
.
isEmpty
(
useCodeResult
)
&&
ObjectUtils
.
isEmpty
(
useCodeResult
.
getQrCode
())){
baseEnterpriseInfo
.
setQrCode
(
createQRCode
(
regUnitInfo
.
getUnitCode
()));
}
baseEnterpriseInfo
.
setUseUnit
(
regUnitInfo
.
getName
());
baseEnterpriseInfo
.
setUseUnit
(
regUnitInfo
.
getName
());
baseEnterpriseInfo
.
setProvince
(
regUnitInfo
.
getProvince
());
baseEnterpriseInfo
.
setProvince
(
regUnitInfo
.
getProvince
());
baseEnterpriseInfo
.
setCity
(
regUnitInfo
.
getCity
());
baseEnterpriseInfo
.
setCity
(
regUnitInfo
.
getCity
());
...
@@ -458,6 +491,20 @@ public class RegUnitInfoServiceImpl extends BaseService<RegUnitInfoDto, RegUnitI
...
@@ -458,6 +491,20 @@ public class RegUnitInfoServiceImpl extends BaseService<RegUnitInfoDto, RegUnitI
}
}
}
}
@Override
public
Boolean
creatQrCode
()
{
List
<
TzBaseEnterpriseInfo
>
tzBaseEnterpriseInfoList
=
tzBaseEnterpriseInfoMapper
.
selectList
(
new
QueryWrapper
<
TzBaseEnterpriseInfo
>().
isNull
(
"qr_code"
));
if
(!
ObjectUtils
.
isEmpty
(
tzBaseEnterpriseInfoList
)
&&
tzBaseEnterpriseInfoList
.
size
()
>
0
)
{
for
(
TzBaseEnterpriseInfo
tzBaseEnterpriseInfo
:
tzBaseEnterpriseInfoList
)
{
String
qrCode
=
createQRCode
(
tzBaseEnterpriseInfo
.
getUseCode
());
tzBaseEnterpriseInfoMapper
.
updateById
(
tzBaseEnterpriseInfo
.
setQrCode
(
qrCode
));
}
return
true
;
}
else
{
return
false
;
}
}
private
CompanyModel
dealChildCompany
(
CompanyModel
cm
)
{
private
CompanyModel
dealChildCompany
(
CompanyModel
cm
)
{
cm
.
setChildren
(
this
.
getFilterChild
(
cm
.
getChildren
()
!=
null
?
cm
.
getChildren
()
:
new
ArrayList
()));
cm
.
setChildren
(
this
.
getFilterChild
(
cm
.
getChildren
()
!=
null
?
cm
.
getChildren
()
:
new
ArrayList
()));
cm
.
getChildren
().
stream
().
filter
(
n
->
{
cm
.
getChildren
().
stream
().
filter
(
n
->
{
...
...
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