Merge remote-tracking branch 'origin/develop' into develop

master
wangning 6 years ago
commit ab085e657d

@ -62,5 +62,9 @@ public interface SignInStatusManager {
String appQRCodeSignInStatus(String codeId);
JSONObject customerQRCode();
void scanCustomerQrcode(String codeId, String openid);
String getWechatCustomerId(String codeId);
}

@ -20,6 +20,7 @@ import org.springframework.stereotype.Service;
import org.springframework.web.servlet.ModelAndView;
import java.util.concurrent.TimeUnit;
import java.util.logging.Logger;
import javax.annotation.Resource;
@ -319,6 +320,31 @@ public class SignInStatusManagerImpl implements SignInStatusManager {
return statusKey;
}
@Override
public JSONObject customerQRCode() {
String codeId = "customer_" + RandomStringUtils.random(15, true, true) + "_" + System.currentTimeMillis();
JSONObject res = new JSONObject();
res.put("code_id", codeId);
res.put("code_img", QRCodeUtils.qrcodeImageCode(PlatformEnvironment.getEnv().concatUrl("/global/userstatus/customer_wechat_qrcode/" + codeId), 300,false));
System.out.println("====code:"+codeId);
return res;
}
@Override
public void scanCustomerQrcode(String codeId, String openid) {
stringRedisTemplate.boundValueOps(redisPrefix + ":customer_qrcode:code:" + codeId).set(openid, 1, TimeUnit.MINUTES);
}
@Override
public String getWechatCustomerId(String codeId) {
String statusKey = stringRedisTemplate.boundValueOps(redisPrefix + ":customer_qrcode:code:" + codeId).get();
if (statusKey == null) {
throw new ForbiddenException("Not signed yet");
}
stringRedisTemplate.delete(redisPrefix + ":customer_qrcode:code:" + codeId);
return statusKey;
}
private void lockRandomCodeId(String codeId) {
stringRedisTemplate.boundValueOps(redisPrefix + "partner_signin" + codeId).set(codeId, 30, TimeUnit.SECONDS);

@ -326,4 +326,21 @@ public class SignInController {
}
throw new ForbiddenException("error.not_support_browser");
}
@RequestMapping(value = "/customer_wechat_qrcode", method = RequestMethod.GET)
public JSONObject customerQRCode() {
return signInStatusManager.customerQRCode();
}
@WechatMapping(value = "/customer_wechat_qrcode/{codeId}", method = RequestMethod.GET)
public ModelAndView scanCustomerQrcode(@PathVariable String codeId, @ModelAttribute(CommonConsts.WECHATINFO) JSONObject wechatUser) {
signInStatusManager.scanCustomerQrcode(codeId, wechatUser.getString("openid"));
return new ModelAndView("manager_bind_success");
}
@RequestMapping(value = "/customer_wechat_qrcode/{codeId}/check", method = RequestMethod.GET)
public void getCustomerID(@PathVariable String codeId, HttpServletResponse response) {
String statusKey = signInStatusManager.getWechatCustomerId(codeId);
HttpUtils.setCookie(response, "CustomerID", statusKey,false);
}
}

@ -19,7 +19,7 @@
<li ui-sref-active-eq="active" ng-if="('monitor'|withModule)&&(currentUser.org_id==null)">
<a ui-sref="analysis_monitoring.pre_refund"><i class="fa fa-tv"></i> <span>欠款|Pre Refund</span></a>
</li>
<li ui-sref-active-eq="active" ng-if="('monitor'|withModule)&&(currentUser.org_id==null)">
<li ui-sref-active-eq="active" ng-if="('RiskManagement'|withModule)&&(currentUser.org_id==null)">
<a ui-sref="analysis_monitoring.risk_manager"><i class="fa fa-tv"></i> <span>风控记录|Risk Records</span></a>
</li>

@ -23,11 +23,12 @@
}
.order-box{
height: 600px;
height: 400px;
width: 800px;
margin: 2% auto;
box-shadow: 0px 0px 25px 0px rgba(0,0,0,0.21);
}
.order-box:after{
content:'';
display:block;
@ -66,7 +67,7 @@
color: #FFFFFF;
}
.intro{
line-height: 550px;
margin: 100px 0 50px;
color: #FFFFFF;
}
.order-box .right{
@ -105,9 +106,9 @@
/*成功页*/
.order-box .success-logo{
text-align: center;
height: 200px;
height: 150px;
background: #F0F3FA;
line-height: 200px;
line-height: 150px;
font-family: PingFangSC-Regular;
font-size: 22px;
color: #444444;
@ -122,3 +123,12 @@
color: #444444;
letter-spacing: 0px;
}
@media(max-width:800px){
.order-box{
width:100%;
}
.order-info{
padding:50px 10px;
}
}

@ -8,7 +8,7 @@ define(['angular', 'static/commons/commons', 'uiBootstrap', 'uiRouter', 'ngBootS
controller: 'simpleApplicationListCtrl',
data: {label: '商户自主申请列表'}
}).state('partner_apply.apply_detail', {
url: '/{client_pre_apply_id}/detail',
url: '/{client_pre_apply_id}/apply/detail',
templateUrl: '/static/payment/partner/templates/simple_application_detail.html',
controller: 'simpleApplicationDetailCtrl',
resolve: {

@ -315,18 +315,26 @@
<p class="form-control-static" ng-bind="partner.client_moniker"></p>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2">Company Name</label>
<div class="form-group"
ng-class="{'has-error':partnerForm.company_name.$invalid && partnerForm.company_name.$dirty}">
<label class="control-label col-sm-2" for="company-name-input">Company Name</label>
<div class="col-sm-8">
<p class="form-control-static" ng-bind="partner.company_name"></p>
<input class="form-control" ng-model="partner.company_name" type="text" name="company_name"
id="company-name-input" maxlength="100" required>
<div ng-messages="partnerForm.company_name.$error" ng-if="partnerForm.company_name.$dirty">
<p class="small text-danger" ng-message="required">No more than 100 characters</p>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2">Short Name</label>
</div>
<div class="form-group"
ng-class="{'has-error':partnerForm.short_name.$invalid && partnerForm.short_name.$dirty}">
<label class="control-label col-sm-2" for="company-name-input">Short Name</label>
<div class="col-sm-8">
<p class="form-control-static" ng-bind="partner.short_name"></p>
<input class="form-control" ng-model="partner.short_name" type="text" name="short_name"
id="short-name-input" maxlength="50" required>
<div ng-messages="partnerForm.short_name.$error" ng-if="partnerForm.short_name.$dirty">
<p class="small text-danger" ng-message="required">No more than 50 characters</p>
</div>
</div>
</div>
<div class="form-group"

Loading…
Cancel
Save