Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in
Toggle navigation
T
tcm-system
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
TCM
tcm-system
Commits
ef7a6608
Commit
ef7a6608
authored
May 23, 2019
by
zjy
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
user/role/tright 5.23
完成胖丁公司列表等代码和商户查看详情等代码 需要增加验证码和手机验证码
parent
e84b1deb
Changes
27
Hide whitespace changes
Inline
Side-by-side
Showing
27 changed files
with
1324 additions
and
52 deletions
+1324
-52
CompanyController.java
.../pangding/web/authority/controller/CompanyController.java
+155
-1
ComputerRegisterController.java
.../web/authority/controller/ComputerRegisterController.java
+26
-19
LoginController.java
...om/pangding/web/authority/controller/LoginController.java
+42
-0
MobileRegisterController.java
...ng/web/authority/controller/MobileRegisterController.java
+13
-17
VerifyCodeController.java
...ngding/web/authority/controller/VerifyCodeController.java
+49
-0
CompanyBankCardDao.java
...va/com/pangding/web/authority/dao/CompanyBankCardDao.java
+9
-0
CompanyDao.java
src/main/java/com/pangding/web/authority/dao/CompanyDao.java
+4
-0
CompanyBankCardDaoImpl.java
...ngding/web/authority/dao/impl/CompanyBankCardDaoImpl.java
+17
-0
CompanyDaoImpl.java
...a/com/pangding/web/authority/dao/impl/CompanyDaoImpl.java
+10
-0
CompanyService.java
...va/com/pangding/web/authority/service/CompanyService.java
+70
-1
RegisterService.java
...a/com/pangding/web/authority/service/RegisterService.java
+5
-1
VerifyCodeService.java
...com/pangding/web/authority/service/VerifyCodeService.java
+30
-0
CompanyServiceImpl.java
...ngding/web/authority/service/impl/CompanyServiceImpl.java
+171
-1
RegisterServiceImpl.java
...gding/web/authority/service/impl/RegisterServiceImpl.java
+32
-11
VerifyCodeServiceImpl.java
...ing/web/authority/service/impl/VerifyCodeServiceImpl.java
+83
-0
VerifyCodeConstant.java
...a/com/pangding/web/authority/util/VerifyCodeConstant.java
+21
-0
VerifyCodeUtil.java
.../java/com/pangding/web/authority/util/VerifyCodeUtil.java
+260
-0
BankCardListReqVo.java
...om/pangding/web/authority/vo/reqvo/BankCardListReqVo.java
+19
-0
BankSubmitReqVo.java
.../com/pangding/web/authority/vo/reqvo/BankSubmitReqVo.java
+19
-0
CompanyAndCompanyExtendSaveReqVo.java
.../authority/vo/reqvo/CompanyAndCompanyExtendSaveReqVo.java
+151
-0
CompanyExtendGetReqVo.java
...angding/web/authority/vo/reqvo/CompanyExtendGetReqVo.java
+10
-0
CompanyResVo.java
...ava/com/pangding/web/authority/vo/reqvo/CompanyResVo.java
+43
-0
CreateQrCodeUrlReqVo.java
...pangding/web/authority/vo/reqvo/CreateQrCodeUrlReqVo.java
+27
-0
EnterpriceSubmitReqVo.java
...angding/web/authority/vo/reqvo/EnterpriceSubmitReqVo.java
+18
-0
IndividualSubmitReqVo.java
...angding/web/authority/vo/reqvo/IndividualSubmitReqVo.java
+18
-0
ListCompanyReqVo.java
...com/pangding/web/authority/vo/reqvo/ListCompanyReqVo.java
+10
-0
MerchantCreateReqVo.java
.../pangding/web/authority/vo/reqvo/MerchantCreateReqVo.java
+12
-1
No files found.
src/main/java/com/pangding/web/authority/controller/CompanyController.java
View file @
ef7a6608
package
com
.
pangding
.
web
.
authority
.
controller
;
import
com.pangding.web.authority.service.CompanyService
;
import
com.pangding.web.authority.vo.CompanyBankCardVo
;
import
com.pangding.web.authority.vo.CompanyExtendVo
;
import
com.pangding.web.authority.vo.CompanyVo
;
import
com.pangding.web.authority.vo.UserVo
;
import
com.pangding.web.authority.vo.reqvo.*
;
import
com.yanzuoguang.util.helper.CheckerHelper
;
import
com.yanzuoguang.util.vo.PageSizeData
;
import
com.yanzuoguang.util.vo.ResponseResult
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.http.MediaType
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
...
...
@@ -16,10 +25,155 @@ import org.springframework.web.bind.annotation.RestController;
@RequestMapping
(
value
=
"/company"
)
public
class
CompanyController
{
@Autowired
CompanyService
companyServiceImpl
;
/**
* 保存公司信息
* @param reqVo
*/
@RequestMapping
(
value
=
"/saveCompany"
,
method
=
RequestMethod
.
POST
,
produces
=
MediaType
.
APPLICATION_JSON_UTF8_VALUE
)
public
void
saveCompany
(
@RequestBody
CompanyVo
company
){
public
ResponseResult
<
String
>
saveCompany
(
@RequestBody
CompanyAndCompanyExtendSaveReqVo
reqVo
){
CheckerHelper
.
newInstance
()
.
notBlankCheck
(
"invitationCompanyId"
,
reqVo
.
getInvitationCompanyId
())
.
notBlankCheck
(
"companyName"
,
reqVo
.
getCompanyName
())
.
notBlankCheck
(
"companyType"
,
reqVo
.
getCompanyType
())
.
notBlankCheck
(
"businessLicenseCode"
,
reqVo
.
getBusinessLicenseCode
())
.
notBlankCheck
(
"address"
,
reqVo
.
getAddress
())
.
notBlankCheck
(
"companyAttribute"
,
reqVo
.
getCompanyAttribute
())
.
notBlankCheck
(
"contactName"
,
reqVo
.
getContactName
())
.
notBlankCheck
(
"contactPhone"
,
reqVo
.
getContactPhone
())
.
checkPhoneNo
(
"contactPhone"
,
reqVo
.
getContactPhone
())
.
notBlankCheck
(
"contactCode"
,
reqVo
.
getContactCode
())
.
checkIdCard
(
"contactCode"
,
reqVo
.
getContactCode
())
.
notBlankCheck
(
"electromicAgreementCode"
,
reqVo
.
getElectromicAgreementCode
())
.
notBlankCheck
(
"signingStatus"
,
reqVo
.
getSigningStatus
())
.
notBlankCheck
(
"status"
,
reqVo
.
getStatus
())
.
notBlankCheck
(
"nature"
,
reqVo
.
getNature
())
.
checkException
();
return
ResponseResult
.
result
(
companyServiceImpl
.
saveCompany
(
reqVo
));
}
/**
* 保存银行卡信息,并调用第三方接口发送手机验证码
*
* @param reqVo
* @return
*/
@RequestMapping
(
value
=
"/saveBank"
,
method
=
RequestMethod
.
POST
,
produces
=
MediaType
.
APPLICATION_JSON_UTF8_VALUE
)
public
ResponseResult
<
String
>
saveBank
(
@RequestBody
CompanyBankCardVo
reqVo
){
checkBank
(
reqVo
);
return
ResponseResult
.
result
(
companyServiceImpl
.
saveBank
(
reqVo
));
}
private
void
checkBank
(
CompanyBankCardVo
reqVo
){
CheckerHelper
.
newInstance
()
.
notBlankCheck
(
"bankCardCode"
,
reqVo
.
getBankCardCode
())
.
notNumberCheck
(
"bankCardCode"
,
reqVo
.
getBankCardCode
())
.
notBlankCheck
(
"bankName"
,
reqVo
.
getBankName
())
.
notBlankCheck
(
"bankAddress"
,
reqVo
.
getBankAddress
())
.
notBlankCheck
(
"bankCode"
,
reqVo
.
getBankCode
())
.
notBlankCheck
(
"type"
,
reqVo
.
getType
())
.
notBlankCheck
(
"companyId"
,
reqVo
.
getCompanyId
())
.
notBlankCheck
(
"name"
,
reqVo
.
getName
())
.
notBlankCheck
(
"idCard"
,
reqVo
.
getIdCard
())
.
checkIdCard
(
"idCard"
,
reqVo
.
getIdCard
())
.
notBlankCheck
(
"reservedPhone"
,
reqVo
.
getReservedPhone
())
.
checkPhoneNo
(
"reservedPhone"
,
reqVo
.
getReservedPhone
())
.
notBlankCheck
(
"bindingCode"
,
reqVo
.
getBindingCode
())
.
notBlankCheck
(
"bindingTime"
,
reqVo
.
getBindingTime
())
.
checkException
();
}
/**
* 提交银行卡信息,验证手机验证码,并更新银行卡状态
* @param reqVo
* @return
*/
@RequestMapping
(
value
=
"/bankSubmit"
,
method
=
RequestMethod
.
POST
,
produces
=
MediaType
.
APPLICATION_JSON_UTF8_VALUE
)
public
ResponseResult
<
String
>
bankSubmit
(
@RequestBody
BankSubmitReqVo
reqVo
){
checkBank
(
reqVo
);
CheckerHelper
.
newInstance
()
.
notBlankCheck
(
"verifyCode"
,
reqVo
.
getVerifyCode
())
.
checkException
();
return
ResponseResult
.
result
(
companyServiceImpl
.
bankSubmit
(
reqVo
));
}
/**
* 获取银行卡列表
* @param reqVo
* @return
*/
@RequestMapping
(
value
=
"/bankCardList"
,
method
=
RequestMethod
.
POST
,
produces
=
MediaType
.
APPLICATION_JSON_UTF8_VALUE
)
public
ResponseResult
<
PageSizeData
<
CompanyBankCardVo
>>
bankCardList
(
@RequestBody
BankCardListReqVo
reqVo
){
return
ResponseResult
.
result
(
companyServiceImpl
.
getBankCardList
(
reqVo
));
}
/**
* 分页查询公司信息
* @param reqVo
* @return
*/
@RequestMapping
(
value
=
"/list"
,
method
=
RequestMethod
.
POST
,
produces
=
MediaType
.
APPLICATION_JSON_UTF8_VALUE
)
public
ResponseResult
<
PageSizeData
<
CompanyVo
>>
list
(
@RequestBody
ListCompanyReqVo
reqVo
){
return
ResponseResult
.
result
(
companyServiceImpl
.
list
(
reqVo
));
}
/**
* 查询公司和公司扩展表信息
* @param reqVo
* @return
*/
@RequestMapping
(
value
=
"/detail"
,
method
=
RequestMethod
.
POST
,
produces
=
MediaType
.
APPLICATION_JSON_UTF8_VALUE
)
public
ResponseResult
<
CompanyResVo
>
detail
(
@RequestBody
CompanyGetReqVo
reqVo
){
CheckerHelper
.
newInstance
()
.
notBlankCheck
(
"companyId"
,
reqVo
.
getId
())
.
checkException
();
return
ResponseResult
.
result
(
companyServiceImpl
.
getDetail
(
reqVo
));
}
/**
* 获取我的二维码url
* @param reqVo
*/
@RequestMapping
(
value
=
"/getQrCodeUrl"
,
method
=
RequestMethod
.
POST
,
produces
=
MediaType
.
APPLICATION_JSON_UTF8_VALUE
)
public
ResponseResult
<
String
>
getQrCodeUrl
(
@RequestBody
CompanyExtendGetReqVo
reqVo
){
CheckerHelper
.
newInstance
()
.
notBlankCheck
(
"id"
,
reqVo
.
getId
())
.
checkException
();
return
ResponseResult
.
result
(
companyServiceImpl
.
getQrCodeUrl
(
reqVo
));
}
/**
* 根据二维码源码调用微信接口获取二维码url
* @param reqVo
* @return
*/
@RequestMapping
(
value
=
"/createQrCode"
,
method
=
RequestMethod
.
POST
,
produces
=
MediaType
.
APPLICATION_JSON_UTF8_VALUE
)
public
ResponseResult
<
String
>
createQrCode
(
@RequestBody
CreateQrCodeUrlReqVo
reqVo
){
CheckerHelper
.
newInstance
()
.
notBlankCheck
(
"companyId"
,
reqVo
.
getCompanyId
())
.
notBlankCheck
(
"select"
,
reqVo
.
getSelect
())
.
checkException
();
return
ResponseResult
.
result
(
companyServiceImpl
.
createQrCodeUrl
(
reqVo
));
}
/**
* 添加用户
* @param reqVo
* @return
*/
@RequestMapping
(
value
=
"/saveUser"
,
method
=
RequestMethod
.
POST
,
produces
=
MediaType
.
APPLICATION_JSON_UTF8_VALUE
)
public
ResponseResult
<
String
>
saveUser
(
@RequestBody
WebUserReqVo
reqVo
){
CheckerHelper
.
newInstance
()
.
notBlankCheck
(
"account"
,
reqVo
.
getAccount
())
.
notBlankCheck
(
"password"
,
reqVo
.
getPassword
())
.
notBlankCheck
(
"phone"
,
reqVo
.
getPhone
())
.
checkPhoneNo
(
"phone"
,
reqVo
.
getPhone
())
.
notBlankCheck
(
"status"
,
reqVo
.
getStatus
())
.
notBlankCheck
(
"creator"
,
reqVo
.
getCreator
())
.
notBlankCheck
(
"companyId"
,
reqVo
.
getCompanyId
())
.
checkException
();
return
ResponseResult
.
result
(
companyServiceImpl
.
saveUser
(
reqVo
));
}
}
src/main/java/com/pangding/web/authority/controller/ComputerRegisterController.java
View file @
ef7a6608
package
com
.
pangding
.
web
.
authority
.
controller
;
import
com.pangding.web.authority.vo.cloudvo.LoginResVo
;
import
com.pangding.web.authority.vo.reqvo.*
;
import
com.pangding.web.authority.service.RegisterService
;
import
com.pangding.web.authority.service.UserService
;
...
...
@@ -58,6 +57,11 @@ public class ComputerRegisterController {
*/
@RequestMapping
(
value
=
"/individual"
,
method
=
RequestMethod
.
POST
,
produces
=
MediaType
.
APPLICATION_JSON_UTF8_VALUE
)
public
ResponseResult
<
SaveCompanyResVo
>
saveIndividual
(
@RequestBody
RegisterIndividualReqVo
reqVo
){
checkIndividual
(
reqVo
);
return
ResponseResult
.
result
(
registerServiceImpl
.
saveIndividual
(
reqVo
));
}
private
void
checkIndividual
(
RegisterIndividualReqVo
reqVo
){
CheckerHelper
.
newInstance
()
.
notBlankCheck
(
"contactName"
,
reqVo
.
getContactName
())
.
notBlankCheck
(
"contactCode"
,
reqVo
.
getContactCode
())
...
...
@@ -67,7 +71,15 @@ public class ComputerRegisterController {
.
notBlankCheck
(
"contactPhone"
,
reqVo
.
getContactPhone
())
.
checkPhoneNo
(
"contactPhone"
,
reqVo
.
getContactPhone
())
.
checkException
();
return
ResponseResult
.
result
(
registerServiceImpl
.
saveIndividual
(
reqVo
));
}
@RequestMapping
(
value
=
"/individualSubmit"
,
method
=
RequestMethod
.
POST
,
produces
=
MediaType
.
APPLICATION_JSON_UTF8_VALUE
)
public
ResponseResult
<
String
>
individualSubmit
(
@RequestBody
IndividualSubmitReqVo
reqVo
){
checkIndividual
(
reqVo
);
CheckerHelper
.
newInstance
()
.
notBlankCheck
(
"verifyCode"
,
reqVo
.
getVerifyCode
());
String
verifyCode
=
registerServiceImpl
.
individualSubmit
(
reqVo
);
return
ResponseResult
.
result
(
verifyCode
);
}
/**
...
...
@@ -80,6 +92,11 @@ public class ComputerRegisterController {
*/
@RequestMapping
(
value
=
"/enterprise"
,
method
=
RequestMethod
.
POST
,
produces
=
MediaType
.
APPLICATION_JSON_UTF8_VALUE
)
public
ResponseResult
<
SaveCompanyResVo
>
saveEnterprise
(
@RequestBody
RegisterEnterpriceReqVo
reqVo
){
checkEnterprice
(
reqVo
);
return
ResponseResult
.
result
(
registerServiceImpl
.
saveEnterprice
(
reqVo
));
}
private
void
checkEnterprice
(
RegisterEnterpriceReqVo
reqVo
){
CheckerHelper
.
newInstance
()
.
notBlankCheck
(
"companyName"
,
reqVo
.
getCompanyName
())
.
notBlankCheck
(
"companyAddress"
,
reqVo
.
getAddress
())
...
...
@@ -101,24 +118,14 @@ public class ComputerRegisterController {
.
notBlankCheck
(
"reservedPhone"
,
reqVo
.
getReservedPhone
())
.
checkPhoneNo
(
"reservedPhone"
,
reqVo
.
getReservedPhone
())
.
checkException
();
return
ResponseResult
.
result
(
registerServiceImpl
.
saveEnterprise
(
reqVo
));
}
};
/**
* 登陆,验证用户名或手机号,密码是否正确
* 返回token,account,LoginCompanyResVo对象(id:公司id,status:公司状态,companyAttribute:属性,bankCardCodeList:绑定的银行卡数组)
*
* @param reqVo
* @return
*/
@RequestMapping
(
value
=
"/login"
,
method
=
RequestMethod
.
POST
,
produces
=
MediaType
.
APPLICATION_JSON_UTF8_VALUE
)
public
ResponseResult
<
LoginResVo
>
login
(
@RequestBody
LoginReqVo
reqVo
){
@RequestMapping
(
value
=
"/enterpriceSubmit"
,
method
=
RequestMethod
.
POST
,
produces
=
MediaType
.
APPLICATION_JSON_UTF8_VALUE
)
public
ResponseResult
<
String
>
enterpriceSubmit
(
@RequestBody
EnterpriceSubmitReqVo
reqVo
){
checkEnterprice
(
reqVo
);
CheckerHelper
.
newInstance
()
.
notBlankCheck
(
"account or phone"
,
reqVo
.
getAccountOrPhone
())
.
notBlankCheck
(
"pass"
,
reqVo
.
getPassword
())
.
checkException
();
return
ResponseResult
.
result
(
registerServiceImpl
.
login
(
reqVo
));
.
notBlankCheck
(
"verifyCode"
,
reqVo
.
getVerifyCode
());
String
verifyCode
=
registerServiceImpl
.
enterpriceSubmit
(
reqVo
);
return
ResponseResult
.
result
(
verifyCode
);
}
}
src/main/java/com/pangding/web/authority/controller/LoginController.java
0 → 100644
View file @
ef7a6608
package
com
.
pangding
.
web
.
authority
.
controller
;
import
com.pangding.web.authority.service.RegisterService
;
import
com.pangding.web.authority.vo.cloudvo.LoginResVo
;
import
com.pangding.web.authority.vo.reqvo.LoginReqVo
;
import
com.yanzuoguang.util.helper.CheckerHelper
;
import
com.yanzuoguang.util.vo.ResponseResult
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.http.MediaType
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMethod
;
import
org.springframework.web.bind.annotation.RestController
;
import
javax.servlet.http.HttpSession
;
/**
* @Author zhangjinyao
* @create 2019/5/23 10:49
*/
@RestController
@RequestMapping
(
value
=
"login"
)
public
class
LoginController
{
@Autowired
RegisterService
registerServiceImpl
;
/**
* 登陆,验证用户名或手机号,密码是否正确
* 返回token,account,LoginCompanyResVo对象(id:公司id,status:公司状态,companyAttribute:属性,bankCardCodeList:绑定的银行卡数组)
*
* @param reqVo
* @return
*/
@RequestMapping
(
value
=
"/login"
,
method
=
RequestMethod
.
POST
,
produces
=
MediaType
.
APPLICATION_JSON_UTF8_VALUE
)
public
ResponseResult
<
LoginResVo
>
computer
(
@RequestBody
LoginReqVo
reqVo
){
CheckerHelper
.
newInstance
()
.
notBlankCheck
(
"account or phone"
,
reqVo
.
getAccountOrPhone
())
.
notBlankCheck
(
"password"
,
reqVo
.
getPassword
())
.
checkException
();
return
ResponseResult
.
result
(
registerServiceImpl
.
login
(
reqVo
));
}
}
src/main/java/com/pangding/web/authority/controller/MobileRegisterController.java
View file @
ef7a6608
package
com
.
pangding
.
web
.
authority
.
controller
;
import
com.pangding.web.authority.vo.cloudvo.LoginResVo
;
import
com.pangding.web.authority.vo.reqvo.RegisterIndividualReqVo
;
import
com.pangding.web.authority.vo.reqvo.RegisterUserReqVo
;
import
com.pangding.web.authority.vo.reqvo.*
;
import
com.pangding.web.authority.service.RegisterService
;
import
com.pangding.web.authority.vo.CompanyVo
;
import
com.pangding.web.authority.vo.reqvo.LoginReqVo
;
import
com.pangding.web.authority.vo.reqvo.SaveCompanyResVo
;
import
com.yanzuoguang.util.helper.CheckerHelper
;
import
com.yanzuoguang.util.vo.ResponseResult
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -70,20 +67,19 @@ public class MobileRegisterController {
return
ResponseResult
.
result
(
registerServiceImpl
.
saveIndividual
(
reqVo
));
}
/**
* 登陆,验证用户名或手机号,密码是否正确
* 返回token,account,LoginCompanyResVo对象(id:公司id,status:公司状态,companyAttribute:属性,bankCardCodeList:绑定的银行卡数组)
*
* @param reqVo
* @return
*/
@RequestMapping
(
value
=
"/login"
,
method
=
RequestMethod
.
POST
,
produces
=
MediaType
.
APPLICATION_JSON_UTF8_VALUE
)
public
ResponseResult
<
LoginResVo
>
login
(
@RequestBody
LoginReqVo
reqVo
){
@RequestMapping
(
value
=
"/individualSubmit"
,
method
=
RequestMethod
.
POST
,
produces
=
MediaType
.
APPLICATION_JSON_UTF8_VALUE
)
public
ResponseResult
<
String
>
individualSubmit
(
@RequestBody
IndividualSubmitReqVo
reqVo
){
CheckerHelper
.
newInstance
()
.
notBlankCheck
(
"account or phone"
,
reqVo
.
getAccountOrPhone
())
.
notBlankCheck
(
"password"
,
reqVo
.
getPassword
())
.
notBlankCheck
(
"contactName"
,
reqVo
.
getContactName
())
.
notBlankCheck
(
"contactCode"
,
reqVo
.
getContactCode
())
.
checkIdCard
(
"contactCode"
,
reqVo
.
getContactCode
())
.
notBlankCheck
(
"companyAttribute"
,
reqVo
.
getCompanyAttribute
())
.
notBlankCheck
(
"companyName"
,
reqVo
.
getCompanyName
())
.
notBlankCheck
(
"contactPhone"
,
reqVo
.
getContactPhone
())
.
checkPhoneNo
(
"contactPhone"
,
reqVo
.
getContactPhone
())
.
notBlankCheck
(
"verifyCode"
,
reqVo
.
getVerifyCode
())
.
checkException
();
return
ResponseResult
.
result
(
registerServiceImpl
.
login
(
reqVo
));
String
verifyCode
=
registerServiceImpl
.
individualSubmit
(
reqVo
);
return
ResponseResult
.
result
(
verifyCode
);
}
}
src/main/java/com/pangding/web/authority/controller/VerifyCodeController.java
0 → 100644
View file @
ef7a6608
package
com
.
pangding
.
web
.
authority
.
controller
;
import
com.pangding.web.authority.service.VerifyCodeService
;
import
com.yanzuoguang.util.vo.ResponseResult
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMethod
;
import
org.springframework.web.bind.annotation.RestController
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
javax.servlet.http.HttpSession
;
import
java.io.IOException
;
/**
* @Author zhangjinyao
* @create 2019/5/23 11:17
*/
@RestController
@RequestMapping
(
value
=
"verify"
)
public
class
VerifyCodeController
{
@Autowired
VerifyCodeService
verifyCodeServiceImpl
;
/**
* 获取验证码图片
*
* @param request
* @param response
* @throws IOException
*/
@RequestMapping
(
value
=
"/getImage"
,
method
=
RequestMethod
.
GET
)
public
ResponseResult
getImage
(
HttpServletRequest
request
,
HttpServletResponse
response
)
throws
IOException
{
verifyCodeServiceImpl
.
getImage
(
request
,
response
);
return
new
ResponseResult
();
}
/**
* 验证验证码
*
* @param request
* @param session
* @return
*/
@RequestMapping
(
value
=
"validImage"
,
method
=
RequestMethod
.
GET
)
public
ResponseResult
<
String
>
validImage
(
HttpServletRequest
request
,
HttpSession
session
){
return
ResponseResult
.
result
(
verifyCodeServiceImpl
.
validImage
(
request
,
session
));
}
}
src/main/java/com/pangding/web/authority/dao/CompanyBankCardDao.java
View file @
ef7a6608
package
com
.
pangding
.
web
.
authority
.
dao
;
import
com.pangding.web.authority.vo.CompanyBankCardVo
;
import
com.pangding.web.authority.vo.reqvo.BankCardListReqVo
;
import
com.yanzuoguang.dao.BaseDao
;
import
com.yanzuoguang.util.vo.PageSizeData
;
/**
* @Author zhangjinyao
* @create 2019/5/16 19:17
*/
public
interface
CompanyBankCardDao
extends
BaseDao
{
/**
* 获取银行卡列表分页数据
* @param reqVo
* @return
*/
PageSizeData
<
CompanyBankCardVo
>
getBankCardList
(
BankCardListReqVo
reqVo
);
}
src/main/java/com/pangding/web/authority/dao/CompanyDao.java
View file @
ef7a6608
package
com
.
pangding
.
web
.
authority
.
dao
;
import
com.pangding.web.authority.vo.CompanyVo
;
import
com.pangding.web.authority.vo.reqvo.ListCompanyReqVo
;
import
com.yanzuoguang.dao.BaseDao
;
import
com.yanzuoguang.util.vo.PageSizeData
;
/**
* @Author zhangjinyao
...
...
@@ -14,4 +16,6 @@ public interface CompanyDao extends BaseDao {
* @param companyVo CompanyVo对象
*/
void
checkPhone
(
CompanyVo
companyVo
);
PageSizeData
<
CompanyVo
>
getCompanyList
(
ListCompanyReqVo
reqVo
);
}
src/main/java/com/pangding/web/authority/dao/impl/CompanyBankCardDaoImpl.java
View file @
ef7a6608
...
...
@@ -2,7 +2,9 @@ package com.pangding.web.authority.dao.impl;
import
com.pangding.web.authority.dao.CompanyBankCardDao
;
import
com.pangding.web.authority.vo.CompanyBankCardVo
;
import
com.pangding.web.authority.vo.reqvo.BankCardListReqVo
;
import
com.yanzuoguang.dao.impl.BaseDaoImpl
;
import
com.yanzuoguang.util.vo.PageSizeData
;
import
org.springframework.stereotype.Component
;
/**
...
...
@@ -11,8 +13,23 @@ import org.springframework.stereotype.Component;
*/
@Component
public
class
CompanyBankCardDaoImpl
extends
BaseDaoImpl
implements
CompanyBankCardDao
{
private
static
final
String
GET_BANK_CARD_LIST
=
"GET_BANK_CARD_LIST"
;
@Override
protected
void
init
()
{
register
(
CompanyBankCardVo
.
class
);
table
.
add
(
GET_BANK_CARD_LIST
,
"select * from pd_company_bank_card where 1=1 "
)
.
add
(
"companyId"
,
"and company_id = ?"
);
}
/**
* 获取银行卡列表分页数据
* @param reqVo
* @return
*/
@Override
public
PageSizeData
<
CompanyBankCardVo
>
getBankCardList
(
BankCardListReqVo
reqVo
)
{
return
this
.
queryPage
(
CompanyBankCardVo
.
class
,
reqVo
,
GET_BANK_CARD_LIST
,
reqVo
);
}
}
src/main/java/com/pangding/web/authority/dao/impl/CompanyDaoImpl.java
View file @
ef7a6608
...
...
@@ -2,7 +2,9 @@ package com.pangding.web.authority.dao.impl;
import
com.pangding.web.authority.dao.CompanyDao
;
import
com.pangding.web.authority.vo.CompanyVo
;
import
com.pangding.web.authority.vo.reqvo.ListCompanyReqVo
;
import
com.yanzuoguang.dao.impl.BaseDaoImpl
;
import
com.yanzuoguang.util.vo.PageSizeData
;
import
org.springframework.stereotype.Component
;
/**
...
...
@@ -13,6 +15,7 @@ import org.springframework.stereotype.Component;
public
class
CompanyDaoImpl
extends
BaseDaoImpl
implements
CompanyDao
{
private
static
final
String
CHECK_PHONE
=
"CHECK_PHONE"
;
private
static
final
String
SELECT
=
"SELECT"
;
@Override
protected
void
init
()
{
...
...
@@ -20,10 +23,17 @@ public class CompanyDaoImpl extends BaseDaoImpl implements CompanyDao {
register
(
CompanyVo
.
class
);
table
.
addExist
(
CHECK_PHONE
,
"contact_phone"
);
table
.
add
(
"SELECT"
,
"select * from pd_company where 1=1 "
);
}
@Override
public
void
checkPhone
(
CompanyVo
companyVo
)
{
this
.
checkExist
(
CHECK_PHONE
,
companyVo
,
"电话号码已存在"
);
}
@Override
public
PageSizeData
<
CompanyVo
>
getCompanyList
(
ListCompanyReqVo
reqVo
)
{
return
this
.
queryPage
(
CompanyVo
.
class
,
reqVo
,
SELECT
,
reqVo
);
}
}
src/main/java/com/pangding/web/authority/service/CompanyService.java
View file @
ef7a6608
package
com
.
pangding
.
web
.
authority
.
service
;
import
com.pangding.web.authority.vo.CompanyBankCardVo
;
import
com.pangding.web.authority.vo.CompanyVo
;
import
com.pangding.web.authority.vo.UserVo
;
import
com.pangding.web.authority.vo.reqvo.*
;
import
com.yanzuoguang.util.vo.PageSizeData
;
/**
* @author Administrator
*/
public
interface
CompanyService
{
/**
* 修改公司信息
* @param companyVo
*/
public
void
updateCompa
yStatus
(
CompanyVo
companyVo
);
void
updateCompan
yStatus
(
CompanyVo
companyVo
);
/**
* 分页查询公司信息
* @param reqVo
* @return
*/
PageSizeData
<
CompanyVo
>
list
(
ListCompanyReqVo
reqVo
);
/**
* 查询公司和公司扩展表信息
* @param reqVo
* @return
*/
CompanyResVo
getDetail
(
CompanyGetReqVo
reqVo
);
/**
* 保存公司信息
* @param reqVo
*/
String
saveCompany
(
CompanyAndCompanyExtendSaveReqVo
reqVo
);
/**
* 保存银行卡信息,并调用第三方接口发送手机验证码
*
* @param reqVo
* @return
*/
String
saveBank
(
CompanyBankCardVo
reqVo
);
/**
* 提交银行卡信息,验证手机验证码,并更新银行卡状态
* @param reqVo
* @return
*/
String
bankSubmit
(
BankSubmitReqVo
reqVo
);
/**
* 获取二维码url
* @param reqVo
* @return
*/
String
getQrCodeUrl
(
CompanyExtendGetReqVo
reqVo
);
/**
* 根据二维码源码调用微信接口获取二维码url
* @param reqVo
* @return
*/
String
createQrCodeUrl
(
CreateQrCodeUrlReqVo
reqVo
);
/**
* 获取银行卡列表
* @param reqVo
* @return
*/
PageSizeData
<
CompanyBankCardVo
>
getBankCardList
(
BankCardListReqVo
reqVo
);
/**
* 添加用户
* @param reqVo
* @return
*/
String
saveUser
(
WebUserReqVo
reqVo
);
}
src/main/java/com/pangding/web/authority/service/RegisterService.java
View file @
ef7a6608
...
...
@@ -49,7 +49,7 @@ public interface RegisterService {
* @param reqVo
* @return 返回保存数据各表的主键
*/
SaveCompanyResVo
saveEnterpri
s
e
(
RegisterEnterpriceReqVo
reqVo
);
SaveCompanyResVo
saveEnterpri
c
e
(
RegisterEnterpriceReqVo
reqVo
);
/**
* 登陆,验证用户名或手机号,密码是否正确
...
...
@@ -59,4 +59,8 @@ public interface RegisterService {
* @return
*/
LoginResVo
login
(
LoginReqVo
reqVo
);
String
individualSubmit
(
IndividualSubmitReqVo
reqVo
);
String
enterpriceSubmit
(
EnterpriceSubmitReqVo
reqVo
);
}
src/main/java/com/pangding/web/authority/service/VerifyCodeService.java
0 → 100644
View file @
ef7a6608
package
com
.
pangding
.
web
.
authority
.
service
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
javax.servlet.http.HttpSession
;
import
java.io.IOException
;
/**
* @Author zhangjinyao
* @create 2019/5/23 11:49
*/
public
interface
VerifyCodeService
{
/**
* 获取验证码图片
*
* @param request
* @param response
* @throws IOException
*/
void
getImage
(
HttpServletRequest
request
,
HttpServletResponse
response
)
throws
IOException
;
/**
* 验证验证码
*
* @param request
* @param session
* @return
*/
String
validImage
(
HttpServletRequest
request
,
HttpSession
session
);
}
src/main/java/com/pangding/web/authority/service/impl/CompanyServiceImpl.java
View file @
ef7a6608
package
com
.
pangding
.
web
.
authority
.
service
.
impl
;
import
com.pangding.web.authority.dao.CompanyBankCardDao
;
import
com.pangding.web.authority.dao.CompanyDao
;
import
com.pangding.web.authority.dao.CompanyExtendDao
;
import
com.pangding.web.authority.service.CompanyService
;
import
com.pangding.web.authority.service.UserService
;
import
com.pangding.web.authority.vo.CompanyBankCardVo
;
import
com.pangding.web.authority.vo.CompanyExtendVo
;
import
com.pangding.web.authority.vo.CompanyVo
;
import
com.pangding.web.authority.vo.UserVo
;
import
com.pangding.web.authority.vo.reqvo.*
;
import
com.yanzuoguang.util.base.ObjectHelper
;
import
com.yanzuoguang.util.exception.CodeException
;
import
com.yanzuoguang.util.helper.StringHelper
;
import
com.yanzuoguang.util.vo.PageSizeData
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
java.util.List
;
/**
* @author Administrator
*/
@Service
public
class
CompanyServiceImpl
implements
CompanyService
{
@Autowired
private
CompanyDao
companyDao
;
@Autowired
private
CompanyExtendDao
companyExtendDaoImpl
;
@Autowired
private
CompanyBankCardDao
companyBankCardDao
;
@Autowired
private
UserService
userServiceImpl
;
/**
* 修改公司信息
* @param companyVo
*/
@Override
public
void
updateCompayStatus
(
CompanyVo
companyVo
){
public
void
updateCompa
n
yStatus
(
CompanyVo
companyVo
){
CompanyVo
company
=
companyDao
.
load
(
companyVo
.
getId
(),
CompanyVo
.
class
);
ObjectHelper
.
writeWithFrom
(
company
,
companyVo
);
companyDao
.
update
(
company
);
}
/**
* 分页查询公司信息
* @param reqVo
* @return
*/
@Override
public
PageSizeData
<
CompanyVo
>
list
(
ListCompanyReqVo
reqVo
)
{
PageSizeData
<
CompanyVo
>
pageSizeData
=
companyDao
.
getCompanyList
(
reqVo
);
if
(
null
==
pageSizeData
||
null
==
pageSizeData
.
getList
()
||
pageSizeData
.
getList
().
isEmpty
()){
throw
new
CodeException
(
"暂无公司信息"
);
}
return
pageSizeData
;
}
/**
* 查询公司和公司扩展表信息
* @param reqVo
* @return
*/
@Override
public
CompanyResVo
getDetail
(
CompanyGetReqVo
reqVo
)
{
CompanyResVo
resVo
=
new
CompanyResVo
();
/*获取公司表信息*/
CompanyVo
companyVo
=
companyDao
.
load
(
reqVo
,
CompanyVo
.
class
);
if
(
null
!=
companyVo
){
resVo
.
setCompanyVo
(
companyVo
);
}
/*获取公司扩展表信息*/
CompanyExtendGetReqVo
companyExtendGetReqVo
=
new
CompanyExtendGetReqVo
();
companyExtendGetReqVo
.
setId
(
reqVo
.
getId
());
CompanyExtendVo
companyExtendVo
=
companyExtendDaoImpl
.
load
(
companyExtendGetReqVo
,
CompanyExtendVo
.
class
);
if
(
null
!=
companyExtendVo
){
resVo
.
setCompanyExtendVo
(
companyExtendVo
);
}
/*获取公司银行卡列表*/
CompanyBankCardGetReqVo
companyBankCardGetReqVo
=
new
CompanyBankCardGetReqVo
();
companyBankCardGetReqVo
.
setCompanyId
(
reqVo
.
getId
());
List
<
CompanyBankCardVo
>
companyBankCardVoList
=
companyBankCardDao
.
loadList
(
companyBankCardGetReqVo
,
CompanyBankCardVo
.
class
);
if
(
null
!=
companyBankCardVoList
||
!
companyBankCardVoList
.
isEmpty
()){
resVo
.
setBankCardVoList
(
companyBankCardVoList
);
}
return
resVo
;
}
/**
* 保存公司信息
* @param reqVo
*/
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
String
saveCompany
(
CompanyAndCompanyExtendSaveReqVo
reqVo
)
{
/*若id为空,则新建,若不为空,则更新*/
if
(
null
==
reqVo
.
getId
()
||
reqVo
.
getId
().
isEmpty
()){
reqVo
.
setId
(
StringHelper
.
getNewID
());
}
/*保存公司表*/
CompanyVo
companyVo
=
new
CompanyVo
();
ObjectHelper
.
writeWithFrom
(
companyVo
,
reqVo
);
companyVo
.
setId
(
reqVo
.
getId
());
companyDao
.
save
(
companyVo
);
/*保存公司扩展表*/
CompanyExtendVo
companyExtendVo
=
new
CompanyExtendVo
();
ObjectHelper
.
writeWithFrom
(
companyExtendVo
,
reqVo
);
companyExtendVo
.
setId
(
reqVo
.
getId
());
companyExtendDaoImpl
.
save
(
companyExtendVo
);
return
reqVo
.
getId
();
}
/**
* 保存银行卡信息,并调用第三方接口发送手机验证码
*
* @param reqVo
* @return
*/
@Override
public
String
saveBank
(
CompanyBankCardVo
reqVo
)
{
String
id
=
StringHelper
.
getNewID
();
reqVo
.
setId
(
id
);
companyBankCardDao
.
save
(
reqVo
);
/*此处需要调用第三方接口发送手机验证码*/
return
id
;
}
/**
* 提交银行卡信息,验证手机验证码,并更新银行卡状态
* @param reqVo
* @return
*/
@Override
public
String
bankSubmit
(
BankSubmitReqVo
reqVo
)
{
/*此处应该将请求数据发送到第三方接口,获取到的返回值用于更新银行卡状态*/
return
reqVo
.
getVerifyCode
();
}
/**
* 获取二维码url
* @param reqVo
* @return
*/
@Override
public
String
getQrCodeUrl
(
CompanyExtendGetReqVo
reqVo
)
{
CompanyExtendVo
companyExtendVo
=
companyExtendDaoImpl
.
load
(
reqVo
,
CompanyExtendVo
.
class
);
if
(
null
==
companyExtendVo
.
getQrCodeUrl
()
||
companyExtendVo
.
getQrCodeUrl
().
isEmpty
()){
throw
new
CodeException
(
"未拥有二维码url,请先添加"
);
}
return
companyExtendVo
.
getQrCodeUrl
();
}
/**
* 根据二维码源码调用微信接口获取二维码url
* @param reqVo
* @return
*/
@Override
public
String
createQrCodeUrl
(
CreateQrCodeUrlReqVo
reqVo
)
{
CompanyExtendGetReqVo
reqVo1
=
new
CompanyExtendGetReqVo
();
reqVo1
.
setId
(
reqVo
.
getCompanyId
());
CompanyExtendVo
companyExtendVo
=
companyExtendDaoImpl
.
load
(
reqVo1
,
CompanyExtendVo
.
class
);
String
qrCode
=
companyExtendVo
.
getQrCode
();
String
select
=
reqVo
.
getSelect
();
/*此处应调用微信接口传入qrCode和select获取qrCodeUrl*/
return
null
;
}
/**
* 获取银行卡列表分页数据
* @param reqVo
* @return
*/
@Override
public
PageSizeData
<
CompanyBankCardVo
>
getBankCardList
(
BankCardListReqVo
reqVo
)
{
return
companyBankCardDao
.
getBankCardList
(
reqVo
);
}
/**
* 添加用户
* @param reqVo
* @return
*/
@Override
public
String
saveUser
(
WebUserReqVo
reqVo
)
{
return
userServiceImpl
.
saveUser
(
reqVo
);
}
}
src/main/java/com/pangding/web/authority/service/impl/RegisterServiceImpl.java
View file @
ef7a6608
...
...
@@ -13,6 +13,7 @@ import com.yanzuoguang.token.TokenHelper;
import
com.yanzuoguang.util.base.ObjectHelper
;
import
com.yanzuoguang.util.exception.CodeException
;
import
com.yanzuoguang.util.helper.StringHelper
;
import
com.yanzuoguang.util.vo.ResponseResult
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
...
...
@@ -132,6 +133,7 @@ public class RegisterServiceImpl implements RegisterService {
extendVo
.
setId
(
reqVo
.
getId
());
companyExtendDaoImpl
.
save
(
extendVo
);
/*此处应该调用第三方接口发送手机验证码*/
CompanyBankCardVo
companyBankCardVo
=
new
CompanyBankCardVo
();
companyBankCardVo
.
setCompanyId
(
reqVo
.
getId
());
companyBankCardVo
.
setId
(
StringHelper
.
getNewID
());
...
...
@@ -151,13 +153,17 @@ public class RegisterServiceImpl implements RegisterService {
req
.
setProductCompanyId
(
reqVo
.
getId
());
req
.
setUserId
(
userVo
.
getId
());
req
.
setUsername
(
userVo
.
getAccount
());
String
merchantId
=
(
String
)
storeFeign
.
merchantCreate
(
req
).
getData
(
);
req
.
setReqId
(
StringHelper
.
getNewID
()
);
SaveCompanyResVo
resVo
=
new
SaveCompanyResVo
();
if
(
storeFeign
.
merchantCreate
(
req
).
getCode
().
equals
(
"00"
)){
String
merchantId
=
(
String
)
storeFeign
.
merchantCreate
(
req
).
getData
();
resVo
.
setMerchantId
(
merchantId
);
}
resVo
.
setCompanyId
(
companyVo
.
getId
());
resVo
.
setCompanyBankCardId
(
companyBankCardVo
.
getId
());
resVo
.
setCompanyExtendId
(
extendVo
.
getId
());
resVo
.
setMerchantId
(
merchantId
);
resVo
.
setUserId
(
userVo
.
getId
());
return
resVo
;
...
...
@@ -171,7 +177,7 @@ public class RegisterServiceImpl implements RegisterService {
*/
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
SaveCompanyResVo
saveEnterpri
s
e
(
RegisterEnterpriceReqVo
reqVo
)
{
public
SaveCompanyResVo
saveEnterpri
c
e
(
RegisterEnterpriceReqVo
reqVo
)
{
this
.
checkPhone
(
reqVo
.
getContactPhone
());
...
...
@@ -183,14 +189,13 @@ public class RegisterServiceImpl implements RegisterService {
extendVo
.
setId
(
reqVo
.
getId
());
companyExtendDaoImpl
.
save
(
extendVo
);
SaveCompanyResVo
resVo
=
new
SaveCompanyResVo
();
/*此处应该调用第三方接口发送手机验证码*/
CompanyBankCardVo
companyBankCardVo
=
new
CompanyBankCardVo
();
ObjectHelper
.
writeWithFrom
(
companyBankCardVo
,
reqVo
);
companyBankCardVo
.
setId
(
StringHelper
.
getNewID
());
companyBankCardVo
.
setCompanyId
(
reqVo
.
getId
());
companyBankCardVo
.
setBankName
(
reqVo
.
getBankName
());
companyBankCardVo
.
setBankCardCode
(
reqVo
.
getBankCardCode
());
companyBankCardVo
.
setBankAddress
(
reqVo
.
getBankAddress
());
companyBankCardVo
.
setBankCode
(
reqVo
.
getBankCode
());
companyBankCardVo
.
setReservedPhone
(
reqVo
.
getReservedPhone
());
companyBankCardDaoImpl
.
save
(
companyBankCardVo
);
UserVo
userReqVo
=
new
UserVo
();
...
...
@@ -200,6 +205,7 @@ public class RegisterServiceImpl implements RegisterService {
userDaoImpl
.
update
(
userVo
);
MerchantCreateReqVo
req
=
new
MerchantCreateReqVo
();
req
.
setReqId
(
StringHelper
.
getNewID
());
req
.
setId
(
StringHelper
.
getNewID
());
req
.
setName
(
reqVo
.
getCompanyName
());
req
.
setAddress
(
reqVo
.
getAddress
());
...
...
@@ -207,13 +213,16 @@ public class RegisterServiceImpl implements RegisterService {
req
.
setProductCompanyId
(
reqVo
.
getId
());
req
.
setUserId
(
userVo
.
getId
());
req
.
setUsername
(
userVo
.
getAccount
());
String
merchantId
=
(
String
)
storeFeign
.
merchantCreate
(
req
).
getData
();
SaveCompanyResVo
resVo
=
new
SaveCompanyResVo
();
if
(
storeFeign
.
merchantCreate
(
req
).
getCode
().
equals
(
"00"
)){
Merchant
merchant
=
(
Merchant
)
storeFeign
.
merchantCreate
(
req
).
getData
();
String
merchantId
=
merchant
.
getId
();
resVo
.
setMerchantId
(
merchantId
);
}
resVo
.
setCompanyId
(
companyVo
.
getId
());
resVo
.
setCompanyBankCardId
(
companyBankCardVo
.
getId
());
resVo
.
setCompanyExtendId
(
extendVo
.
getId
());
resVo
.
setMerchantId
(
merchantId
);
resVo
.
setUserId
(
userVo
.
getId
());
return
resVo
;
...
...
@@ -277,4 +286,16 @@ public class RegisterServiceImpl implements RegisterService {
return
resVo
;
}
@Override
public
String
individualSubmit
(
IndividualSubmitReqVo
reqVo
)
{
/*此处应该将请求数据发送到第三方接口,返回的数据用于更新公司信息*/
return
reqVo
.
getVerifyCode
();
}
@Override
public
String
enterpriceSubmit
(
EnterpriceSubmitReqVo
reqVo
)
{
/*此处应该将请求数据发送到第三方接口,返回的数据用于更新公司信息*/
return
reqVo
.
getVerifyCode
();
}
}
src/main/java/com/pangding/web/authority/service/impl/VerifyCodeServiceImpl.java
0 → 100644
View file @
ef7a6608
package
com
.
pangding
.
web
.
authority
.
service
.
impl
;
import
com.pangding.web.authority.service.VerifyCodeService
;
import
com.pangding.web.authority.util.VerifyCodeConstant
;
import
com.pangding.web.authority.util.VerifyCodeUtil
;
import
com.yanzuoguang.util.exception.CodeException
;
import
org.springframework.stereotype.Service
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
javax.servlet.http.HttpSession
;
import
java.io.IOException
;
import
java.io.OutputStream
;
import
java.time.LocalDateTime
;
import
java.time.ZoneId
;
/**
* @Author zhangjinyao
* @create 2019/5/23 11:51
*/
@Service
public
class
VerifyCodeServiceImpl
implements
VerifyCodeService
{
/**
* 获取验证码
*
* @param request
* @param response
* @throws IOException
*/
@Override
public
void
getImage
(
HttpServletRequest
request
,
HttpServletResponse
response
)
throws
IOException
{
response
.
setHeader
(
"Pragma"
,
"No-cache"
);
response
.
setHeader
(
"Cache-Control"
,
"no-cache"
);
response
.
setDateHeader
(
"Expires"
,
VerifyCodeConstant
.
EXPIRES
);
response
.
setContentType
(
"image/jpeg"
);
// 生成随机字串
String
verifyCode
=
VerifyCodeUtil
.
generateVerifyCode
(
VerifyCodeConstant
.
VERIFY_SIZE
);
// 存入会话session
HttpSession
session
=
request
.
getSession
(
true
);
// 删除以前的
session
.
removeAttribute
(
"verCode"
);
session
.
removeAttribute
(
"codeTime"
);
session
.
setAttribute
(
"verCode"
,
verifyCode
.
toLowerCase
());
session
.
setAttribute
(
"codeTime"
,
LocalDateTime
.
now
());
// 生成图片
int
width
=
VerifyCodeConstant
.
WIDTH
;
int
height
=
VerifyCodeConstant
.
HEIGHT
;
OutputStream
out
=
response
.
getOutputStream
();
VerifyCodeUtil
.
outputImage
(
width
,
height
,
out
,
verifyCode
);
}
/**
* 验证验证码
*
* @param request
* @param session
* @return
*/
@Override
public
String
validImage
(
HttpServletRequest
request
,
HttpSession
session
)
{
String
code
=
request
.
getParameter
(
"code"
);
Object
verCode
=
session
.
getAttribute
(
"verCode"
);
if
(
null
==
verCode
)
{
request
.
setAttribute
(
"errmsg"
,
"验证码已失效,请重新输入"
);
throw
new
CodeException
(
"验证码已失效,请重新输入"
);
}
String
verCodeStr
=
verCode
.
toString
();
LocalDateTime
localDateTime
=
(
LocalDateTime
)
session
.
getAttribute
(
"codeTime"
);
long
past
=
localDateTime
.
atZone
(
ZoneId
.
systemDefault
()).
toInstant
().
toEpochMilli
();
long
now
=
LocalDateTime
.
now
().
atZone
(
ZoneId
.
systemDefault
()).
toInstant
().
toEpochMilli
();
if
(
verCodeStr
==
null
||
code
==
null
||
code
.
isEmpty
()
||
!
verCodeStr
.
equalsIgnoreCase
(
code
)){
request
.
setAttribute
(
"errmsg"
,
"验证码错误"
);
throw
new
CodeException
(
"验证码错误"
);
}
else
if
((
now
-
past
)/
VerifyCodeConstant
.
MILLISECOND
/
VerifyCodeConstant
.
SECOND
>
VerifyCodeConstant
.
LIMIT_SECOND
){
request
.
setAttribute
(
"errmsg"
,
"验证码已过期,重新获取"
);
throw
new
CodeException
(
"验证码已过期,重新获取"
);
}
else
{
//验证成功,删除存储的验证码
session
.
removeAttribute
(
"verCode"
);
return
"验证成功"
;
}
}
}
src/main/java/com/pangding/web/authority/util/VerifyCodeConstant.java
0 → 100644
View file @
ef7a6608
package
com
.
pangding
.
web
.
authority
.
util
;
/**
* @Author zhangjinyao
* @create 2019/5/23 11:39
*/
public
class
VerifyCodeConstant
{
public
static
final
int
EXPIRES
=
0
;
public
static
final
int
VERIFY_SIZE
=
4
;
public
static
final
int
WIDTH
=
100
;
public
static
final
int
HEIGHT
=
30
;
public
static
final
int
MILLISECOND
=
1000
;
public
static
final
int
SECOND
=
60
;
public
static
final
int
LIMIT_SECOND
=
5
;
}
src/main/java/com/pangding/web/authority/util/VerifyCodeUtil.java
0 → 100644
View file @
ef7a6608
package
com
.
pangding
.
web
.
authority
.
util
;
import
javax.imageio.ImageIO
;
import
java.awt.*
;
import
java.awt.geom.AffineTransform
;
import
java.awt.image.BufferedImage
;
import
java.io.File
;
import
java.io.FileOutputStream
;
import
java.io.IOException
;
import
java.io.OutputStream
;
import
java.util.Arrays
;
import
java.util.Random
;
/**
* @Author zhangjinyao
* @create 2019/5/23 11:11
*/
public
class
VerifyCodeUtil
{
//使用到Algerian字体,系统里没有的话需要安装字体,字体只显示大写,去掉了1,0,i,o几个容易混淆的字符
public
static
final
String
VERIFY_CODES
=
"23456789ABCDEFGHJKLMNPQRSTUVWXYZ"
;
private
static
Random
random
=
new
Random
();
/**
* 使用系统默认字符源生成验证码
* @param verifySize 验证码长度
* @return
*/
public
static
String
generateVerifyCode
(
int
verifySize
){
return
generateVerifyCode
(
verifySize
,
VERIFY_CODES
);
}
/**
* 使用指定源生成验证码
* @param verifySize 验证码长度
* @param sources 验证码字符源
* @return
*/
public
static
String
generateVerifyCode
(
int
verifySize
,
String
sources
){
if
(
sources
==
null
||
sources
.
length
()
==
0
){
sources
=
VERIFY_CODES
;
}
int
codesLen
=
sources
.
length
();
Random
rand
=
new
Random
(
System
.
currentTimeMillis
());
StringBuilder
verifyCode
=
new
StringBuilder
(
verifySize
);
for
(
int
i
=
0
;
i
<
verifySize
;
i
++){
verifyCode
.
append
(
sources
.
charAt
(
rand
.
nextInt
(
codesLen
-
1
)));
}
return
verifyCode
.
toString
();
}
/**
* 生成随机验证码文件,并返回验证码值
* @param w
* @param h
* @param outputFile
* @param verifySize
* @return
*/
public
static
String
outputVerifyImage
(
int
w
,
int
h
,
File
outputFile
,
int
verifySize
)
throws
IOException
{
String
verifyCode
=
generateVerifyCode
(
verifySize
);
outputImage
(
w
,
h
,
outputFile
,
verifyCode
);
return
verifyCode
;
}
/**
* 输出随机验证码图片流,并返回验证码值
* @param w
* @param h
* @param os
* @param verifySize
* @return
*/
public
static
String
outputVerifyImage
(
int
w
,
int
h
,
OutputStream
os
,
int
verifySize
)
throws
IOException
{
String
verifyCode
=
generateVerifyCode
(
verifySize
);
outputImage
(
w
,
h
,
os
,
verifyCode
);
return
verifyCode
;
}
/**
* 生成指定验证码图像文件
* @param w
* @param h
* @param outputFile
* @param code
* @throws IOException
*/
public
static
void
outputImage
(
int
w
,
int
h
,
File
outputFile
,
String
code
)
throws
IOException
{
if
(
outputFile
==
null
){
return
;
}
File
dir
=
outputFile
.
getParentFile
();
if
(!
dir
.
exists
()){
dir
.
mkdirs
();
}
try
{
outputFile
.
createNewFile
();
FileOutputStream
fos
=
new
FileOutputStream
(
outputFile
);
outputImage
(
w
,
h
,
fos
,
code
);
fos
.
close
();
}
catch
(
IOException
e
){
throw
e
;
}
}
/**
* 输出指定验证码图片流
* @param w
* @param h
* @param os
* @param code
* @throws IOException
*/
public
static
void
outputImage
(
int
w
,
int
h
,
OutputStream
os
,
String
code
)
throws
IOException
{
int
verifySize
=
code
.
length
();
BufferedImage
image
=
new
BufferedImage
(
w
,
h
,
BufferedImage
.
TYPE_INT_RGB
);
Random
rand
=
new
Random
();
Graphics2D
g2
=
image
.
createGraphics
();
g2
.
setRenderingHint
(
RenderingHints
.
KEY_ANTIALIASING
,
RenderingHints
.
VALUE_ANTIALIAS_ON
);
Color
[]
colors
=
new
Color
[
5
];
Color
[]
colorSpaces
=
new
Color
[]
{
Color
.
WHITE
,
Color
.
CYAN
,
Color
.
GRAY
,
Color
.
LIGHT_GRAY
,
Color
.
MAGENTA
,
Color
.
ORANGE
,
Color
.
PINK
,
Color
.
YELLOW
};
float
[]
fractions
=
new
float
[
colors
.
length
];
for
(
int
i
=
0
;
i
<
colors
.
length
;
i
++){
colors
[
i
]
=
colorSpaces
[
rand
.
nextInt
(
colorSpaces
.
length
)];
fractions
[
i
]
=
rand
.
nextFloat
();
}
Arrays
.
sort
(
fractions
);
g2
.
setColor
(
Color
.
GRAY
);
// 设置边框色
g2
.
fillRect
(
0
,
0
,
w
,
h
);
Color
c
=
getRandColor
(
200
,
250
);
g2
.
setColor
(
c
);
// 设置背景色
g2
.
fillRect
(
0
,
2
,
w
,
h
-
4
);
//绘制干扰线
Random
random
=
new
Random
();
g2
.
setColor
(
getRandColor
(
160
,
200
));
// 设置线条的颜色
for
(
int
i
=
0
;
i
<
20
;
i
++)
{
int
x
=
random
.
nextInt
(
w
-
1
);
int
y
=
random
.
nextInt
(
h
-
1
);
int
xl
=
random
.
nextInt
(
6
)
+
1
;
int
yl
=
random
.
nextInt
(
12
)
+
1
;
g2
.
drawLine
(
x
,
y
,
x
+
xl
+
40
,
y
+
yl
+
20
);
}
// 添加噪点
float
yawpRate
=
0.05f
;
// 噪声率
int
area
=
(
int
)
(
yawpRate
*
w
*
h
);
for
(
int
i
=
0
;
i
<
area
;
i
++)
{
int
x
=
random
.
nextInt
(
w
);
int
y
=
random
.
nextInt
(
h
);
int
rgb
=
getRandomIntColor
();
image
.
setRGB
(
x
,
y
,
rgb
);
}
shear
(
g2
,
w
,
h
,
c
);
// 使图片扭曲
g2
.
setColor
(
getRandColor
(
100
,
160
));
int
fontSize
=
h
-
4
;
Font
font
=
new
Font
(
"Algerian"
,
Font
.
ITALIC
,
fontSize
);
g2
.
setFont
(
font
);
char
[]
chars
=
code
.
toCharArray
();
for
(
int
i
=
0
;
i
<
verifySize
;
i
++){
AffineTransform
affine
=
new
AffineTransform
();
affine
.
setToRotation
(
Math
.
PI
/
4
*
rand
.
nextDouble
()
*
(
rand
.
nextBoolean
()
?
1
:
-
1
),
(
w
/
verifySize
)
*
i
+
fontSize
/
2
,
h
/
2
);
g2
.
setTransform
(
affine
);
g2
.
drawChars
(
chars
,
i
,
1
,
((
w
-
10
)
/
verifySize
)
*
i
+
5
,
h
/
2
+
fontSize
/
2
-
10
);
}
g2
.
dispose
();
ImageIO
.
write
(
image
,
"jpg"
,
os
);
}
private
static
Color
getRandColor
(
int
fc
,
int
bc
)
{
if
(
fc
>
255
){
fc
=
255
;
}
if
(
bc
>
255
){
bc
=
255
;
}
int
r
=
fc
+
random
.
nextInt
(
bc
-
fc
);
int
g
=
fc
+
random
.
nextInt
(
bc
-
fc
);
int
b
=
fc
+
random
.
nextInt
(
bc
-
fc
);
return
new
Color
(
r
,
g
,
b
);
}
private
static
int
getRandomIntColor
()
{
int
[]
rgb
=
getRandomRgb
();
int
color
=
0
;
for
(
int
c
:
rgb
)
{
color
=
color
<<
8
;
color
=
color
|
c
;
}
return
color
;
}
private
static
int
[]
getRandomRgb
()
{
int
[]
rgb
=
new
int
[
3
];
for
(
int
i
=
0
;
i
<
3
;
i
++)
{
rgb
[
i
]
=
random
.
nextInt
(
255
);
}
return
rgb
;
}
private
static
void
shear
(
Graphics
g
,
int
w1
,
int
h1
,
Color
color
)
{
shearX
(
g
,
w1
,
h1
,
color
);
shearY
(
g
,
w1
,
h1
,
color
);
}
private
static
void
shearX
(
Graphics
g
,
int
w1
,
int
h1
,
Color
color
)
{
int
period
=
random
.
nextInt
(
2
);
boolean
borderGap
=
true
;
int
frames
=
1
;
int
phase
=
random
.
nextInt
(
2
);
for
(
int
i
=
0
;
i
<
h1
;
i
++)
{
double
d
=
(
double
)
(
period
>>
1
)
*
Math
.
sin
((
double
)
i
/
(
double
)
period
+
(
6.2831853071795862
D
*
(
double
)
phase
)
/
(
double
)
frames
);
g
.
copyArea
(
0
,
i
,
w1
,
1
,
(
int
)
d
,
0
);
if
(
borderGap
)
{
g
.
setColor
(
color
);
g
.
drawLine
((
int
)
d
,
i
,
0
,
i
);
g
.
drawLine
((
int
)
d
+
w1
,
i
,
w1
,
i
);
}
}
}
private
static
void
shearY
(
Graphics
g
,
int
w1
,
int
h1
,
Color
color
)
{
int
period
=
random
.
nextInt
(
40
)
+
10
;
boolean
borderGap
=
true
;
int
frames
=
20
;
int
phase
=
7
;
for
(
int
i
=
0
;
i
<
w1
;
i
++)
{
double
d
=
(
double
)
(
period
>>
1
)
*
Math
.
sin
((
double
)
i
/
(
double
)
period
+
(
6.2831853071795862
D
*
(
double
)
phase
)
/
(
double
)
frames
);
g
.
copyArea
(
i
,
0
,
1
,
h1
,
0
,
(
int
)
d
);
if
(
borderGap
)
{
g
.
setColor
(
color
);
g
.
drawLine
(
i
,
(
int
)
d
,
i
,
0
);
g
.
drawLine
(
i
,
(
int
)
d
+
h1
,
i
,
h1
);
}
}
}
}
src/main/java/com/pangding/web/authority/vo/reqvo/BankCardListReqVo.java
0 → 100644
View file @
ef7a6608
package
com
.
pangding
.
web
.
authority
.
vo
.
reqvo
;
import
com.yanzuoguang.util.vo.PageSizeReqVo
;
/**
* @Author zhangjinyao
* @create 2019/5/23 19:31
*/
public
class
BankCardListReqVo
extends
PageSizeReqVo
{
private
String
companyId
;
public
String
getCompanyId
()
{
return
companyId
;
}
public
void
setCompanyId
(
String
companyId
)
{
this
.
companyId
=
companyId
;
}
}
src/main/java/com/pangding/web/authority/vo/reqvo/BankSubmitReqVo.java
0 → 100644
View file @
ef7a6608
package
com
.
pangding
.
web
.
authority
.
vo
.
reqvo
;
import
com.pangding.web.authority.vo.CompanyBankCardVo
;
/**
* @Author zhangjinyao
* @create 2019/5/23 18:48
*/
public
class
BankSubmitReqVo
extends
CompanyBankCardVo
{
private
String
verifyCode
;
public
String
getVerifyCode
()
{
return
verifyCode
;
}
public
void
setVerifyCode
(
String
verifyCode
)
{
this
.
verifyCode
=
verifyCode
;
}
}
src/main/java/com/pangding/web/authority/vo/reqvo/CompanyAndCompanyExtendSaveReqVo.java
0 → 100644
View file @
ef7a6608
package
com
.
pangding
.
web
.
authority
.
vo
.
reqvo
;
import
com.pangding.web.authority.vo.CompanyVo
;
import
com.yanzuoguang.dao.TableAnnotation
;
/**
* @Author zhangjinyao
* @create 2019/5/23 18:06
*/
public
class
CompanyAndCompanyExtendSaveReqVo
extends
CompanyVo
{
private
String
qrCode
;
private
int
qrCodeType
;
private
String
qrCodeUrl
;
private
int
isSubAccount
;
private
String
subAccountRule
;
private
int
isSubProfit
;
private
String
subProfitRule
;
private
int
isWithdraw
;
private
String
withdrawRule
;
private
int
isScanCodePay
;
private
String
payRule
;
private
int
isInvitate
;
private
String
invitateRule
;
private
String
invitationCode
;
public
String
getQrCode
()
{
return
qrCode
;
}
public
void
setQrCode
(
String
qrCode
)
{
this
.
qrCode
=
qrCode
;
}
public
int
getQrCodeType
()
{
return
qrCodeType
;
}
public
void
setQrCodeType
(
int
qrCodeType
)
{
this
.
qrCodeType
=
qrCodeType
;
}
public
String
getQrCodeUrl
()
{
return
qrCodeUrl
;
}
public
void
setQrCodeUrl
(
String
qrCodeUrl
)
{
this
.
qrCodeUrl
=
qrCodeUrl
;
}
public
int
getIsSubAccount
()
{
return
isSubAccount
;
}
public
void
setIsSubAccount
(
int
isSubAccount
)
{
this
.
isSubAccount
=
isSubAccount
;
}
public
String
getSubAccountRule
()
{
return
subAccountRule
;
}
public
void
setSubAccountRule
(
String
subAccountRule
)
{
this
.
subAccountRule
=
subAccountRule
;
}
public
int
getIsSubProfit
()
{
return
isSubProfit
;
}
public
void
setIsSubProfit
(
int
isSubProfit
)
{
this
.
isSubProfit
=
isSubProfit
;
}
public
String
getSubProfitRule
()
{
return
subProfitRule
;
}
public
void
setSubProfitRule
(
String
subProfitRule
)
{
this
.
subProfitRule
=
subProfitRule
;
}
public
int
getIsWithdraw
()
{
return
isWithdraw
;
}
public
void
setIsWithdraw
(
int
isWithdraw
)
{
this
.
isWithdraw
=
isWithdraw
;
}
public
String
getWithdrawRule
()
{
return
withdrawRule
;
}
public
void
setWithdrawRule
(
String
withdrawRule
)
{
this
.
withdrawRule
=
withdrawRule
;
}
public
int
getIsScanCodePay
()
{
return
isScanCodePay
;
}
public
void
setIsScanCodePay
(
int
isScanCodePay
)
{
this
.
isScanCodePay
=
isScanCodePay
;
}
public
String
getPayRule
()
{
return
payRule
;
}
public
void
setPayRule
(
String
payRule
)
{
this
.
payRule
=
payRule
;
}
public
int
getIsInvitate
()
{
return
isInvitate
;
}
public
void
setIsInvitate
(
int
isInvitate
)
{
this
.
isInvitate
=
isInvitate
;
}
public
String
getInvitateRule
()
{
return
invitateRule
;
}
public
void
setInvitateRule
(
String
invitateRule
)
{
this
.
invitateRule
=
invitateRule
;
}
public
String
getInvitationCode
()
{
return
invitationCode
;
}
public
void
setInvitationCode
(
String
invitationCode
)
{
this
.
invitationCode
=
invitationCode
;
}
}
src/main/java/com/pangding/web/authority/vo/reqvo/CompanyExtendGetReqVo.java
View file @
ef7a6608
...
...
@@ -7,6 +7,16 @@ package com.pangding.web.authority.vo.reqvo;
public
class
CompanyExtendGetReqVo
{
private
String
invitationCode
;
private
String
id
;
public
String
getId
()
{
return
id
;
}
public
void
setId
(
String
id
)
{
this
.
id
=
id
;
}
public
String
getInvitationCode
()
{
return
invitationCode
;
}
...
...
src/main/java/com/pangding/web/authority/vo/reqvo/CompanyResVo.java
0 → 100644
View file @
ef7a6608
package
com
.
pangding
.
web
.
authority
.
vo
.
reqvo
;
import
com.pangding.web.authority.vo.CompanyBankCardVo
;
import
com.pangding.web.authority.vo.CompanyExtendVo
;
import
com.pangding.web.authority.vo.CompanyVo
;
import
java.util.List
;
/**
* @Author zhangjinyao
* @create 2019/5/23 14:53
*/
public
class
CompanyResVo
{
private
CompanyVo
companyVo
;
private
CompanyExtendVo
companyExtendVo
;
private
List
<
CompanyBankCardVo
>
bankCardVoList
;
public
List
<
CompanyBankCardVo
>
getBankCardVoList
()
{
return
bankCardVoList
;
}
public
void
setBankCardVoList
(
List
<
CompanyBankCardVo
>
bankCardVoList
)
{
this
.
bankCardVoList
=
bankCardVoList
;
}
public
CompanyVo
getCompanyVo
()
{
return
companyVo
;
}
public
void
setCompanyVo
(
CompanyVo
companyVo
)
{
this
.
companyVo
=
companyVo
;
}
public
CompanyExtendVo
getCompanyExtendVo
()
{
return
companyExtendVo
;
}
public
void
setCompanyExtendVo
(
CompanyExtendVo
companyExtendVo
)
{
this
.
companyExtendVo
=
companyExtendVo
;
}
}
src/main/java/com/pangding/web/authority/vo/reqvo/CreateQrCodeUrlReqVo.java
0 → 100644
View file @
ef7a6608
package
com
.
pangding
.
web
.
authority
.
vo
.
reqvo
;
/**
* @Author zhangjinyao
* @create 2019/5/23 19:26
*/
public
class
CreateQrCodeUrlReqVo
{
private
String
companyId
;
private
String
select
;
public
String
getCompanyId
()
{
return
companyId
;
}
public
void
setCompanyId
(
String
companyId
)
{
this
.
companyId
=
companyId
;
}
public
String
getSelect
()
{
return
select
;
}
public
void
setSelect
(
String
select
)
{
this
.
select
=
select
;
}
}
src/main/java/com/pangding/web/authority/vo/reqvo/EnterpriceSubmitReqVo.java
0 → 100644
View file @
ef7a6608
package
com
.
pangding
.
web
.
authority
.
vo
.
reqvo
;
/**
* @Author zhangjinyao
* @create 2019/5/23 16:19
*/
public
class
EnterpriceSubmitReqVo
extends
RegisterEnterpriceReqVo
{
private
String
verifyCode
;
public
String
getVerifyCode
()
{
return
verifyCode
;
}
public
void
setVerifyCode
(
String
verifyCode
)
{
this
.
verifyCode
=
verifyCode
;
}
}
src/main/java/com/pangding/web/authority/vo/reqvo/IndividualSubmitReqVo.java
0 → 100644
View file @
ef7a6608
package
com
.
pangding
.
web
.
authority
.
vo
.
reqvo
;
/**
* @Author zhangjinyao
* @create 2019/5/23 16:04
*/
public
class
IndividualSubmitReqVo
extends
RegisterIndividualReqVo
{
private
String
verifyCode
;
public
String
getVerifyCode
()
{
return
verifyCode
;
}
public
void
setVerifyCode
(
String
verifyCode
)
{
this
.
verifyCode
=
verifyCode
;
}
}
src/main/java/com/pangding/web/authority/vo/reqvo/ListCompanyReqVo.java
0 → 100644
View file @
ef7a6608
package
com
.
pangding
.
web
.
authority
.
vo
.
reqvo
;
import
com.yanzuoguang.util.vo.PageSizeReqVo
;
/**
* @Author zhangjinyao
* @create 2019/5/23 14:28
*/
public
class
ListCompanyReqVo
extends
PageSizeReqVo
{
}
src/main/java/com/pangding/web/authority/vo/reqvo/MerchantCreateReqVo.java
View file @
ef7a6608
package
com
.
pangding
.
web
.
authority
.
vo
.
reqvo
;
import
com.pangding.web.authority.vo.Merchant
;
import
com.sun.org.apache.xml.internal.security.Init
;
import
com.yanzuoguang.util.vo.InitDao
;
/**
* @Author zhangjinyao
* @create 2019/5/22 11:56
*/
public
class
MerchantCreateReqVo
extends
Merchant
{
public
class
MerchantCreateReqVo
extends
Merchant
{
private
String
reqId
;
public
String
getReqId
()
{
return
reqId
;
}
public
void
setReqId
(
String
reqId
)
{
reqId
=
reqId
;
}
}
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