merge conflict

master
wangning 7 years ago
commit 3bbf73298d

@ -0,0 +1,191 @@
package au.com.royalpay.payment.manage.application.beans;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.time.DateUtils;
import java.util.Date;
/**
* Created by yuan on 2018/5/23.
*/
public class ClientPreApplyBean {
private String username;
private String password;
private String contact_person;
private String contact_phone;
private String contact_email;
private String company_name;
private String company_phone;
private String abn;
private String short_name;
private String address;
private String suburb;
private String state;
private String postcode;
private String industry;
private String bank_no;
private String bank_name;
private String bsb_no;
private String clean_days;
private boolean agree;
public JSONObject insertObject() {
JSONObject res = (JSONObject) JSON.toJSON(this);
return res;
}
public String getCompany_name() {
return company_name;
}
public void setCompany_name(String company_name) {
this.company_name = company_name;
}
public String getAbn() {
return abn;
}
public void setAbn(String abn) {
this.abn = abn;
}
public String getShort_name() {
return short_name;
}
public void setShort_name(String short_name) {
this.short_name = short_name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getSuburb() {
return suburb;
}
public void setSuburb(String suburb) {
this.suburb = suburb;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public String getPostcode() {
return postcode;
}
public void setPostcode(String postcode) {
this.postcode = postcode;
}
public String getIndustry() {
return industry;
}
public void setIndustry(String industry) {
this.industry = industry;
}
public String getBank_no() {
return bank_no;
}
public void setBank_no(String bank_no) {
this.bank_no = bank_no;
}
public String getBank_name() {
return bank_name;
}
public void setBank_name(String bank_name) {
this.bank_name = bank_name;
}
public String getBsb_no() {
return bsb_no;
}
public void setBsb_no(String bsb_no) {
this.bsb_no = bsb_no;
}
public String getClean_days() {
return clean_days;
}
public void setClean_days(String clean_days) {
this.clean_days = clean_days;
}
public boolean isAgree() {
return agree;
}
public void setAgree(boolean agree) {
this.agree = agree;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getContact_person() {
return contact_person;
}
public void setContact_person(String contact_person) {
this.contact_person = contact_person;
}
public String getContact_phone() {
return contact_phone;
}
public void setContact_phone(String contact_phone) {
this.contact_phone = contact_phone;
}
public String getContact_email() {
return contact_email;
}
public void setContact_email(String contact_email) {
this.contact_email = contact_email;
}
public String getCompany_phone() {
return company_phone;
}
public void setCompany_phone(String company_phone) {
this.company_phone = company_phone;
}
}

@ -1,5 +1,6 @@
package au.com.royalpay.payment.manage.application.core; package au.com.royalpay.payment.manage.application.core;
import au.com.royalpay.payment.manage.application.beans.ClientPreApplyBean;
import au.com.royalpay.payment.manage.merchants.beans.NewAccountBean; import au.com.royalpay.payment.manage.merchants.beans.NewAccountBean;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
@ -24,4 +25,9 @@ public interface SimpleClientApplyService {
void verifyMail(String address, JSONObject loginAccount); void verifyMail(String address, JSONObject loginAccount);
void updateApplyInfo(ClientPreApplyBean companyBean,String client_moniker);
JSONObject getBankInfo(String bsb_no);
void checkAccountName(String acocunt_name);
} }

@ -1,6 +1,9 @@
package au.com.royalpay.payment.manage.application.core.impls; package au.com.royalpay.payment.manage.application.core.impls;
import au.com.royalpay.payment.manage.application.beans.ClientPreApplyBean;
import au.com.royalpay.payment.manage.application.core.SimpleClientApplyService; import au.com.royalpay.payment.manage.application.core.SimpleClientApplyService;
import au.com.royalpay.payment.manage.mappers.system.*;
import au.com.royalpay.payment.manage.mappers.preapply.SysClientPreMapperMapper;
import au.com.royalpay.payment.manage.merchants.beans.NewAccountBean; import au.com.royalpay.payment.manage.merchants.beans.NewAccountBean;
import au.com.royalpay.payment.manage.merchants.core.ClientManager; import au.com.royalpay.payment.manage.merchants.core.ClientManager;
import au.com.royalpay.payment.manage.signin.beans.LoginInfo; import au.com.royalpay.payment.manage.signin.beans.LoginInfo;
@ -9,34 +12,46 @@ import au.com.royalpay.payment.manage.system.core.MailGunService;
import au.com.royalpay.payment.tools.env.PlatformEnvironment; import au.com.royalpay.payment.tools.env.PlatformEnvironment;
import au.com.royalpay.payment.tools.env.SysConfigManager; import au.com.royalpay.payment.tools.env.SysConfigManager;
import au.com.royalpay.payment.tools.exceptions.BadRequestException; import au.com.royalpay.payment.tools.exceptions.BadRequestException;
import au.com.royalpay.payment.tools.exceptions.ForbiddenException;
import au.com.royalpay.payment.tools.exceptions.ServerErrorException; import au.com.royalpay.payment.tools.exceptions.ServerErrorException;
import au.com.royalpay.payment.tools.locale.LocaleSupport; import au.com.royalpay.payment.tools.locale.LocaleSupport;
import au.com.royalpay.payment.tools.mail.SendMail; import au.com.royalpay.payment.tools.mail.SendMail;
import au.com.royalpay.payment.tools.utils.PasswordUtils;
import cn.yixblog.platform.http.HttpRequestGenerator;
import cn.yixblog.platform.http.HttpRequestResult;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.github.qcloudsms.SmsSingleSender; import com.github.qcloudsms.SmsSingleSender;
import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert; import org.springframework.util.Assert;
import org.springframework.web.bind.annotation.RequestMethod;
import org.thymeleaf.context.Context; import org.thymeleaf.context.Context;
import org.thymeleaf.spring4.SpringTemplateEngine; import org.thymeleaf.spring4.SpringTemplateEngine;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import java.io.IOException;
import java.net.URISyntaxException;
import java.util.*;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
@Service @Service
public class SimpleClientApplyServiceImpl implements SimpleClientApplyService { public class SimpleClientApplyServiceImpl implements SimpleClientApplyService {
@Value("${royalpay.sms.appid}") @Value("${royalpay.sms.appid}")
private int appId; private int appId;
@Value("${royalpay.sms.appkey}") @Value("${royalpay.sms.appkey}")
@ -52,6 +67,24 @@ public class SimpleClientApplyServiceImpl implements SimpleClientApplyService {
@Resource @Resource
private SignInAccountService signInAccountService; private SignInAccountService signInAccountService;
@Resource
private ClientAccountMapper clientAccountMapper;
@Resource
private SysClientPreMapperMapper sysClientPreMapperMapper;
@Resource
private ClientBankAccountMapper clientBankAccountMapper;
@Resource
private ClientMapper clientMapper;
@Resource
private ClientRateMapper clientRateMapper;
@Resource
private ClientConfigMapper clientConfigMapper;
@Resource @Resource
private StringRedisTemplate stringRedisTemplate; private StringRedisTemplate stringRedisTemplate;
private final SmsSingleSender ssender = new SmsSingleSender(appId, appKey); private final SmsSingleSender ssender = new SmsSingleSender(appId, appKey);
@ -174,6 +207,163 @@ public class SimpleClientApplyServiceImpl implements SimpleClientApplyService {
stringRedisTemplate.delete(getVerifyMailRedisKey(codeKey)); stringRedisTemplate.delete(getVerifyMailRedisKey(codeKey));
} }
@Override
public void checkAccountName(String account_name) {
JSONObject account = clientAccountMapper.findByUsernameForDuplicate(account_name);
if (account != null){
throw new ForbiddenException("用户名已被注册");
}
}
@Override
@Transactional
public void updateApplyInfo(ClientPreApplyBean companyBean, String username) {
JSONObject apply = sysClientPreMapperMapper.findByUserName(username);
if (apply == null ){
throw new BadRequestException();
}
JSONObject applyInfo = companyBean.insertObject();
applyInfo.put("client_pre_apply_id",apply.getIntValue("client_pre_apply_id"));
applyInfo.put("update_time",new Date());
sysClientPreMapperMapper.update(applyInfo);
if(applyInfo.getBoolean("agree")){
applyerToClient(username);
}
}
@Transactional
private void applyerToClient(String username){
JSONObject apply = sysClientPreMapperMapper.findByUserName(username);
String clientMoniker = generateClientMoniker();
JSONObject sysClient = new JSONObject();
sysClient.put("company_name",apply.getString("company_name"));
sysClient.put("abn",apply.getString("abn"));
sysClient.put("short_name",apply.getString("short_name"));
sysClient.put("address",apply.getString("address"));
sysClient.put("suburb",apply.getString("suburb"));
sysClient.put("state",apply.getString("state"));
sysClient.put("postcode",apply.getString("postcode"));
sysClient.put("industry",apply.getString("industry"));
sysClient.put("contact_person",apply.getString("contact_person"));
sysClient.put("contact_email",apply.getString("contact_email"));
sysClient.put("contact_phone",apply.getString("contact_phone"));
sysClient.put("company_phone",apply.getString("company_phone"));
sysClient.put("client_moniker",clientMoniker);
sysClient.put("create_time",new Date());
sysClient.put("source",4);
sysClient.put("creator",0);
clientMapper.save(sysClient);
int clientId = sysClient.getIntValue("client_id");
JSONObject sysAccount = new JSONObject();
sysAccount.put("username",apply.getString("username"));
sysAccount.put("display_name",apply.getString("username"));
String salt = PasswordUtils.newSalt();
sysAccount.put("salt", salt);
sysAccount.put("password_hash", PasswordUtils.hashPwd(apply.getString("password"), salt));
sysAccount.put("password_aes", PasswordUtils.encryptAESPwd(apply.getString("password")));
sysAccount.put("creator",0);
sysAccount.put("contact_phone",apply.getString("contact_phone"));
sysAccount.put("password_hash",apply.getString("password"));
sysAccount.put("client_id",clientId);
sysAccount.put("create_time",new Date());
clientAccountMapper.save(sysAccount);
JSONObject sysBank = new JSONObject();
sysBank.put("client_id",clientId);
sysBank.put("account_no",apply.getString("bank_no"));
sysBank.put("account_name",apply.getString("bank_name"));
sysBank.put("bsb_no",apply.getString("bsb_no"));
JSONObject bankInfo = getBankInfo(apply.getString("bsb_no"));
sysBank.put("bank",bankInfo.getString("bank"));
sysBank.put("city",bankInfo.getString("city"));
sysBank.put("address",bankInfo.getString("address"));
sysBank.put("system",bankInfo.getString("system"));
sysBank.put("postcode",bankInfo.getString("postcode"));
sysBank.put("state",bankInfo.getString("state"));
sysBank.put("branch",bankInfo.getString("branch"));
clientBankAccountMapper.save(sysBank);
JSONObject sysConfig = new JSONObject();
sysConfig.put("client_id",clientId);
sysConfig.put("client_moniker",clientMoniker);
sysConfig.put("clean_days",apply.getIntValue("clean_days"));
clientConfigMapper.save(sysConfig);
JSONObject sysRate = new JSONObject();
sysRate.put("client_id",clientId);
sysRate.put("clean_days",apply.getIntValue("clean_days"));
sysRate.put("remark","自主申请");
sysRate.put("create_time", new Date());
sysRate.put("update_time", new Date());
sysRate.put("active_time", DateFormatUtils.format(new Date(), "yyyy-MM-dd"));
sysRate.put("expiry_time", DateFormatUtils.format(DateUtils.addYears(new Date(),1), "yyyy-MM-dd"));
JSONObject rateConfig = clientManager.getSysRateConfig();
JSONObject chooseRate = new JSONObject();
if (apply.getIntValue("clean_days") == 1){
chooseRate = rateConfig.getJSONObject("t1");
}
if (apply.getIntValue("clean_days") == 2){
chooseRate = rateConfig.getJSONObject("t2");
}
if (apply.getIntValue("clean_days") == 3){
chooseRate = rateConfig.getJSONObject("t3");
}
sysRate.putAll(chooseRate);
configNewClientRate(sysRate, clientId, "Wechat", "Wechat");
configNewClientRate(sysRate, clientId, "Alipay", "Alipay");
configNewClientRate(sysRate, clientId, "AlipayOnline", "AlipayOnline");
configNewClientRate(sysRate, clientId, "Bestpay", "Bestpay");
configNewClientRate(sysRate, clientId, "jd", "JDpay");
}
private String generateClientMoniker(){
String clientMoniker = RandomStringUtils.random(4, true, true).toUpperCase();
JSONObject client = clientMapper.findClientByMoniker(clientMoniker);
if (client != null){
generateClientMoniker();
}
return clientMoniker;
}
private void configNewClientRate(JSONObject config, int clientId, String channel, String rateKey) {
if (config.containsKey(rateKey)) {
JSONObject newConfig = new JSONObject();
newConfig.putAll(config);
newConfig.put("rate_value", config.getBigDecimal(rateKey));
newConfig.put("rate_name", channel);
if (!clientRateMapper.listClientRatesForSaving(clientId, config.getDate("active_time"), config.getDate("expiry_time"),
config.getDoubleValue("rate_value"), config.getInteger("clean_days"), channel).isEmpty()) {
return;
}
List<JSONObject> existRate = clientRateMapper.listCurrentClientRates(clientId, config.getDate("active_time"), channel);
for (JSONObject rateLog : existRate) {
rateLog.put("expiry_time", DateUtils.addDays(config.getDate("active_time"), -1));
clientRateMapper.updateConfig(rateLog);
}
clientRateMapper.saveRate(newConfig);
}
}
@Override
public JSONObject getBankInfo(String bsb_no) {
String url = "https://api.bank.codes/au-bsb/json/ab9379cfdab559509bbdcdd11923489f/" + bsb_no;
JSONObject banInfo = new JSONObject();
try {
HttpRequestResult result = new HttpRequestGenerator(url, RequestMethod.GET).execute();
if (result.isSuccess()) {
banInfo = result.getResponseContentJSONObj();
}
} catch (URISyntaxException | IOException e) {
}
return banInfo;
}
@Override @Override
public void verifyMail(String address, JSONObject loginAccount) { public void verifyMail(String address, JSONObject loginAccount) {
LoginInfo loginInfo = new LoginInfo(); LoginInfo loginInfo = new LoginInfo();

@ -1,5 +1,6 @@
package au.com.royalpay.payment.manage.application.web; package au.com.royalpay.payment.manage.application.web;
import au.com.royalpay.payment.manage.application.beans.ClientPreApplyBean;
import au.com.royalpay.payment.manage.application.core.SimpleClientApplyService; import au.com.royalpay.payment.manage.application.core.SimpleClientApplyService;
import au.com.royalpay.payment.manage.merchants.beans.NewAccountBean; import au.com.royalpay.payment.manage.merchants.beans.NewAccountBean;
import au.com.royalpay.payment.tools.CommonConsts; import au.com.royalpay.payment.tools.CommonConsts;
@ -7,25 +8,27 @@ import au.com.royalpay.payment.tools.http.HttpUtils;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import org.springframework.stereotype.Controller;
import org.springframework.validation.Errors; import org.springframework.validation.Errors;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.*;
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.ResponseBody;
import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.ModelAndView;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid; import javax.validation.Valid;
@Controller @RestController
@RequestMapping("/register") @RequestMapping("/register")
public class SimpleClientApplyController { public class SimpleClientApplyController {
@Resource @Resource
private SimpleClientApplyService simpleClientApplyService; private SimpleClientApplyService simpleClientApplyService;
@RequestMapping(value = "/account/{account_name}", method = RequestMethod.GET)
@ResponseBody
public void checkAccountName(@PathVariable String account_name){
simpleClientApplyService.checkAccountName(account_name);
}
@RequestMapping(value = "/account/{codeKey}", method = RequestMethod.POST) @RequestMapping(value = "/account/{codeKey}", method = RequestMethod.POST)
@ResponseBody @ResponseBody
public void registerAccount(@PathVariable String codeKey, @RequestBody @Valid NewAccountBean accountBean, Errors errors, HttpServletResponse response) public void registerAccount(@PathVariable String codeKey, @RequestBody @Valid NewAccountBean accountBean, Errors errors, HttpServletResponse response)
@ -56,4 +59,13 @@ public class SimpleClientApplyController {
simpleClientApplyService.deleteVerifyMailKey(codeKey); simpleClientApplyService.deleteVerifyMailKey(codeKey);
} }
@RequestMapping(value = "/info/update/{username}", method = RequestMethod.POST)
public void registerCompanyInfo(@PathVariable String username, @RequestBody @Valid ClientPreApplyBean applyBean) throws Exception {
simpleClientApplyService.updateApplyInfo(applyBean,username);
}
@RequestMapping(value = "/info/bank/{bsb_no}", method = RequestMethod.GET)
public JSONObject getBankInfo(@PathVariable String bsb_no) throws Exception {
return simpleClientApplyService.getBankInfo(bsb_no);
}
} }

@ -0,0 +1,23 @@
package au.com.royalpay.payment.manage.mappers.preapply;
import cn.yixblog.support.mybatis.autosql.annotations.AutoMapper;
import cn.yixblog.support.mybatis.autosql.annotations.AutoSql;
import cn.yixblog.support.mybatis.autosql.annotations.SqlType;
import com.alibaba.fastjson.JSONObject;
import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@AutoMapper(tablename = "sys_client_pre_apply", pkName = "client_pre_apply_id")
public interface SysClientPreMapperMapper {
@AutoSql(type = SqlType.UPDATE)
void update(JSONObject data);
@AutoSql(type = SqlType.INSERT)
void save(JSONObject data);
@AutoSql(type = SqlType.SELECT)
JSONObject findByUserName(@Param("username") String username);
}

@ -27,4 +27,7 @@ public interface ClientConfigMapper {
@AutoSql(type = SqlType.SELECT) @AutoSql(type = SqlType.SELECT)
JSONObject find(@Param("client_id") int client_id); JSONObject find(@Param("client_id") int client_id);
@AutoSql(type = SqlType.SELECT)
List<JSONObject> getAll();
} }

@ -74,4 +74,7 @@ public interface ClientMapper {
List<JSONObject> listSubMerchantId(); List<JSONObject> listSubMerchantId();
List<JSONObject> listBySubMerchantId(@Param("sub_merchant_id") String sub_merchant_id); List<JSONObject> listBySubMerchantId(@Param("sub_merchant_id") String sub_merchant_id);
@AutoSql(type = SqlType.SELECT)
List<JSONObject> AllClients();
} }

@ -47,4 +47,7 @@ public interface OrgMapper {
PageList<JSONObject> listOrgWithPages(JSONObject paraams, PageBounds order); PageList<JSONObject> listOrgWithPages(JSONObject paraams, PageBounds order);
List<JSONObject> listOrgAndChild(@Param("org_id") int org_id); List<JSONObject> listOrgAndChild(@Param("org_id") int org_id);
JSONObject test(@Param("client_id") int client_id);
} }

@ -706,7 +706,7 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
} else if (checkGreenChannel && client.getIntValue("open_status") == 5) { } else if (checkGreenChannel && client.getIntValue("open_status") == 5) {
// 绿色通道通过后不发邮件 // 绿色通道通过后不发邮件
logger.info("PASS 绿色通道:" + clientMoniker); logger.info("PASS 绿色通道:" + clientMoniker);
saveClientAuditProcess(client.getIntValue("client_id"), open_status, 5, "绿色通道申请通过", manager); saveClientAuditProcess(client.getIntValue("client_id"), open_status, 5, "合规通过", manager);
} else { } else {
initAdminUserAndSendEmail(manager, clientMoniker, client); initAdminUserAndSendEmail(manager, clientMoniker, client);
saveClientAuditProcess(client.getIntValue("client_id"), open_status, 5, "合规通过", manager); saveClientAuditProcess(client.getIntValue("client_id"), open_status, 5, "合规通过", manager);
@ -1633,8 +1633,8 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
@Override @Override
public String getQrCodeBoard(JSONObject client, QRCodeConfig config,JSONObject account,String plantform) { public String getQrCodeBoard(JSONObject client, QRCodeConfig config,JSONObject account,String plantform) {
// JSONObject org = orgMapper.findOne(client.getIntValue("org_id")); // JSONObject org = orgMapper.findOne(client.getIntValue("org_id"));
return merchantInfoProvider.getQrCodeBoard(client, config); // return merchantInfoProvider.getQrCodeBoard(client, config);
// return merchantInfoProvider.getQrCodeBoard(client, config,account,plantform); return merchantInfoProvider.getQrCodeBoard(client, config,account,plantform);
} }
@Override @Override
@ -1658,8 +1658,8 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
qrboardConfig.put("brandw", "600"); qrboardConfig.put("brandw", "600");
qrboardConfig.put("brandh", "200"); qrboardConfig.put("brandh", "200");
String type = qrboardConfig.getString("type"); String type = qrboardConfig.getString("type");
// QRBoard board = QRBoardProvider.getQRBoard(type, qrboardConfig, client, config,mongoTemplate,manager,plantform); QRBoard board = QRBoardProvider.getQRBoard(type, qrboardConfig, client, config,mongoTemplate,manager,plantform);
QRBoard board = QRBoardProvider.getQRBoard(type, qrboardConfig, client, config); // QRBoard board = QRBoardProvider.getQRBoard(type, qrboardConfig, client, config);
board.drawBoardImage(ous); board.drawBoardImage(ous);
} catch (Exception e) { } catch (Exception e) {
throw new ServerErrorException("QR board config not set for current organize", e); throw new ServerErrorException("QR board config not set for current organize", e);
@ -1679,8 +1679,8 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
JSONObject qrboardConfig = JSON.parseObject(qrBoardConfigString); JSONObject qrboardConfig = JSON.parseObject(qrBoardConfigString);
String type = qrboardConfig.getString("type"); String type = qrboardConfig.getString("type");
// QRBoard board = QRBoardProvider.getQRBoard(type, qrboardConfig, client, config,mongoTemplate,manager,plantform); QRBoard board = QRBoardProvider.getQRBoard(type, qrboardConfig, client, config,mongoTemplate,manager,plantform);
QRBoard board = QRBoardProvider.getQRBoard(type, qrboardConfig, client, config); // QRBoard board = QRBoardProvider.getQRBoard(type, qrboardConfig, client, config);
board.drawBoardImage(ous); board.drawBoardImage(ous);
} catch (Exception e) { } catch (Exception e) {
throw new ServerErrorException("QR board config not set for current organize", e); throw new ServerErrorException("QR board config not set for current organize", e);

@ -234,4 +234,5 @@ public class NoticeManageImpl implements NoticeManage {
noticeManageMapper.updateNotice(notice); noticeManageMapper.updateNotice(notice);
} }
} }

@ -70,4 +70,17 @@
</where> </where>
</select> </select>
<select id="test" resultType="com.alibaba.fastjson.JSONObject">
<![CDATA[
select sum(clearing_amount) sum,count(DISTINCT(order_id)) counts
from pmt_transactions
where channel !='Settlement' and
transaction_type = 'Credit' and
transaction_time>'2018-01-01' and
transaction_time<'2018-05-01' and
client_id = #{client_id} and system_generate = 0
]]>
</select>
</mapper> </mapper>

@ -0,0 +1,876 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no">
<title>RoyalPay | Merchant Application</title>
<meta name="description"
content=" As Australias first WeChat Cross-Border payment gatewayWe are working to build a bridge between Australian merchants and Chinese consumers.Marketing Tools like WeChat Coupons,Membership Cards,Lucky Money are provided to all merchants to Increase sales which is proved effective in the wechat ecology.">
<meta name="keywords"
content="澳洲微信支付、澳洲跨境支付、行业解决方案、澳洲支付、澳洲商圈、微信营销、公众号、Wechat、Official Account、Industry Solution、Cross-Border Payment、Australia Wechat">
<!-- Bootstrap 3.3.5 -->
<link href="static/css/merchant_application.css" rel="stylesheet">
<link href="static/lib/bootstrap/css/bootstrap.min.css" rel="stylesheet">
<!-- Font Awesome -->
<link href="static/lib/font-awesome-4.6.3/css/font-awesome.min.css" rel="stylesheet">
<!-- Font Awesome -->
<!-- Ionicons -->
<!-- Theme style -->
<link rel="stylesheet" href="./static/css/index_register.css">
<link rel="stylesheet" href="static/lib/dist/css/AdminLTE.min.css">
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
<title>Partner Register</title>
<script type="text/javascript" src="/static/lib/jquery/jquery-2.1.4.min.js"></script>
<script type="text/javascript" src="/static/lib/angularjs/angular.min.js"></script>
<script type="text/javascript" src="/static/lib/angularjs/angular-messages.js"></script>
<script type="text/javascript" src="/static/lib/bootstrap/js/bootstrap.min.js"></script>
<script type="text/javascript" src="/static/lib/blocs.min.js"></script>
<script type="text/javascript" src="/static/merchantapplication/merchant_application.js"></script>
<style type="text/css">
.register-box-bg {
background-color: rgba(255, 255, 255, 0.9);
box-shadow: 0px 2px 20px 2px rgba(0, 0, 0, 0.3);
filter: alpha(opacity=40);
/*opacity: 0.7;*/
}
.captcha {
width: 30%;
height: 35px;
padding: 6px 12px;
font-size: 14px;
line-height: 1.42857143;
color: #555;
background-color: #fff;
background-image: none;
border: 1px solid #ccc;
border-radius: 4px;
}
@media (min-width: 544px) {
.content-with {
width: 800px;
}
.register-box {
margin-top: 10%;
}
body .progress {
display: block;
}
body .step_show {
display: none;
}
}
@media (max-width: 544px) {
body .progress {
display: none;
}
.content_align{
width: 80%;
}
body .step_show {
display: block;
}
.register-box {
width: 89%;
}
}
</style>
<script>
var _hmt = _hmt || [];
(function () {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?d7e727bd889ea69d369cba051844dfe5";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script>
</head>
<body class="pace-done fp-viewing-0" ng-app="applyPartnerApp" ng-controller="applyPartnerCtrl">
<!--[if lte IE 8]>
<span class="lower-ie"></span>
<![endif]-->
<div class="pace pace-inactive">
<div class="pace-progress" data-progress-text="100%" data-progress="99"
style="transform: translate3d(100%, 0px, 0px);">
<div class="pace-progress-inner"></div>
</div>
<div class="pace-activity"></div>
</div>
<div id="main">
<div id="page-index" class="register-page">
<nav id="header" class="navbar navbar-dark navbar-full navbar-bg">
<div class="container">
<div class="navbar-header">
<button class="navbar-toggle collapsed" type="button" data-toggle="collapse"
data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="https://www.royalpay.com.au/">
<img src="/static/images/logo.svg" alt="" class="navbar--logo"
style="width: 275px;height: 32px;display: block;margin-top: 3.2%;">
</a>
</div>
<ul class="nav navbar-nav navbar-right navbar-collapse collapse">
<li id="nav-index" class="nav-item">
<a href="https://www.royalpay.com.au/" class="nav-link">Home</a>
</li>
<li class="nav-item dropdown">
<a role="button" class="nav-link dropdown-toggle" data-toggle="dropdown">Wechat</a>
<ul class="dropdown-menu">
<li><a href="https://www.royalpay.com.au/feature.html" target="_blank">Features</a></li>
<li><a href="https://www.royalpay.com.au/industry.html" target="_blank">Industry</a></li>
<li><a href="https://www.royalpay.com.au/marketing.html" target="_blank">Marketing</a></li>
</ul>
</li>
<li class="nav-item dropdown">
<a role="button" class="nav-link dropdown-toggle" data-toggle="dropdown">GATEWAY API</a>
<ul class="dropdown-menu">
<li><a href="https://mpay.royalpay.com.au/docs/en/" target="_blank">En</a></li>
<li><a href="https://mpay.royalpay.com.au/docs/cn/" target="_blank">中文</a></li>
</ul>
</li>
<li class="nav-item">
<a role="button" class="nav-link dropdown-toggle" data-toggle="dropdown">About Us</a>
<ul class="dropdown-menu">
<li><a href="https://www.royalpay.com.au/about.html" target="_blank">About Us</a></li>
<li><a href="https://www.royalpay.com.au/c_news.html">News</a></li>
<li><a href="https://www.royalpay.com.au/c_career.html">Career</a></li>
</ul>
</li>
<li class="nav-item">
<a href="https://www.royalpay.com.au/download.html" class="nav-link">App</a>
</li>
<li class="nav-item hidden-xs hidden-sm">
<a href="https://mpay.royalpay.com.au/login.html" target="_blank"
class="btn btn-success signin">Sign In</a>
</li>
<li class="nav-item hidden-xs hidden-sm">
<a href="https://mpay.royalpay.com.au/partner_register.html" target="_blank"
class="btn btn-success signin">Apply</a>
</li>
</ul>
</div>
</nav>
<div id="fullpage" class="fullpage-wrapper">
<div class='progress' style="height: 0px">
<div class='progress_inner'>
<div class='progress_inner__step' ng-class="{'body .dis_before:nth-child(1):before':chooseArray[0],'dis_before':chooseArray[0]}">
<label for='step-1'>Account Information</label>
</div>
<div class='progress_inner__step' ng-class="{'body .dis_before:nth-child(2):before':chooseArray[1],'dis_before':chooseArray[1]}">
<label for='step-2'>Company Information</label>
</div>
<div class='progress_inner__step' ng-class="{'body .dis_before:nth-child(3):before':chooseArray[2],'dis_before':chooseArray[2]}">
<label for='step-3'>Bank Account</label>
</div>
<div class='progress_inner__step' ng-class="{'body .dis_before:nth-child(4):before':chooseArray[3],'dis_before':chooseArray[3]}">
<label for='step-4'>Clean Days</label>
</div>
<div class='progress_inner__step' ng-class="{'body .dis_before:nth-child(5):before':chooseArray[4],'dis_before':chooseArray[4]}">
<label for='step-5'>Success</label>
</div>
<input checked='checked' id='step-1' name='step' type='radio' ng-disabled = "!chooseArray[0]" ng-checked="chooseArray[0]" >
<input id='step-2' name='step' type='radio' ng-disabled = "!chooseArray[1]" ng-checked="chooseArray[1]">
<input id='step-3' name='step' type='radio' ng-disabled = "!chooseArray[2]" ng-checked="chooseArray[2]">
<input id='step-4' name='step' type='radio' ng-disabled = "!chooseArray[3]" ng-checked="chooseArray[3]" >
<input id='step-5' name='step' type='radio' ng-disabled = "!chooseArray[4]" ng-checked="chooseArray[4]">
<div class='progress_inner__bar'></div>
<div class='progress_inner__bar--set'></div>
<div class='progress_inner__tabs'>
</div>
<!--<div class='progress_inner__status'>
<div class='box_base'></div>
<div class='box_lid'></div>
<div class='box_ribbon'></div>
<div class='box_bow'>
<div class='box_bow__left'></div>
<div class='box_bow__right'></div>
</div>
<div class='box_item'></div>
<div class='box_tag'></div>
<div class='box_string'></div>
</div>-->
</div>
</div>
<div class="step_show">
<div class="step_header" ng-show="chooseArray[0]">
<img src="static/images/step/num1_1.png">
<span class="text-bold">Account Information</span>
</div>
<div class="step_header" ng-show="chooseArray[1]">
<img src="static/images/step/num1_2.png">
<span class="text-bold">Company Information</span>
</div>
<div class="step_header" ng-show="chooseArray[2]">
<img src="static/images/step/num1_3.png">
<span class="text-bold">Bank Account</span>
</div>
<div class="step_header" ng-show="chooseArray[3]">
<img src="static/images/step/num1_4.png">
<span class="text-bold">Submit Materials</span>
</div>
<div class="step_header" ng-show="chooseArray[4]">
<img src="static/images/step/num1_5.png">
<span class="text-bold">Success</span>
</div>
</div>
<div class="register-box content-with">
<div class="register-box-body register-box-bg">
<p class="login-box-msg">Easy BusinessEasy Payment</p>
<form novalidate name="accountForm" action="" method="post" ng-show="chooseArray[0]">
<div class="form-group has-feedback"
ng-class="{'has-error':accountForm.username.$invalid && accountForm.username.$dirty}">
<input type="text" class="form-control" ng-model="partner.username" name="username"
placeholder="Account Name" required maxlength="80" ng-mousedown="name_exist = false">
<div style="text-align: left" ng-if="name_exist">
<p class="small text-danger">用户名已存在</p>
</div>
</div>
<div class="form-group has-feedback"
ng-class="{'has-error':accountForm.contact_person.$invalid && accountForm.contact_person.$dirty}">
<input class="form-control" ng-model="partner.contact_person" placeholder="Your Name"
required maxlength="50" name="contact_person" ng-focus="checkUserName(partner.username)">
</div>
<div class="form-group has-feedback"
ng-class="{'has-error':accountForm.contact_email.$invalid && accountForm.contact_email.$dirty}">
<input class="form-control" ng-model="partner.contact_email" placeholder="Work Email"
required
maxlength="50" name="contact_email">
</div>
<div class="form-group has-feedback"
ng-class="{'has-error':accountForm.password.$invalid && accountForm.password.$dirty}">
<input type="password" class="form-control" ng-model="partner.password" placeholder="Password" required
minlength="6" maxlength="12" name="password">
<div style="text-align: left">
<p style="text-align: left" class="small text-info">6~12个字符区分大小写</p>
</div></div>
<div class="form-group has-feedback"
ng-class="{'has-error':(accountForm.rePassword.$invalid && accountForm.rePassword.$dirty) ||partner.rePassword != partner.password}">
<input type="password" class="form-control" ng-model="partner.rePassword" placeholder="Confirm Password"
required
maxlength="50" name="rePassword">
</div>
<div class="row">
<div class="form-group col-xs-12"
ng-class="{'has-error':accountForm.contact_phone.$invalid && accountForm.contact_phone.$dirty}">
<div class="input-group">
<span class="input-group-addon">+61</span>
<input type="text" name="contact_phone" required ng-model="partner.contact_phone"
class="form-control" style="width: 80%;display: inline"
placeholder="Your Phone">
<button type="button" class="btn btn-success" style="width:20%;display:inline;height: 34px;float: right;border-radius: 0px"
title="发送验证码" ng-click="sendVerificationCode(partner.contact_phone)"
ng-bind="description" ng-disabled="canClick"></button>
</div>
</div>
</div>
<div class="form-group has-feedback"
ng-class="{'has-error':accountForm.code.$invalid && accountForm.code.$dirty}">
<input class="form-control" ng-model="partner.code" placeholder="Code"
required maxlength="50" name="code">
</div>
<div class="row">
<div class="col-xs-12 margin-bottom">
<button type="button" class="btn btn-success btn-block btn-flat"
ng-click="saveApplyInfo(accountForm,1)">Next
</button>
<div>
<p ng-if="resError" style="padding: 6px 12px;font-size: 14px;"
class="small text-danger">{{resError}}</p>
</div>
</div>
</div>
</form>
<form novalidate name="companyForm" action="" method="post" ng-show="chooseArray[1]">
<div class="form-group has-feedback"
ng-class="{'has-error':companyForm.company_name.$invalid && companyForm.company_name.$dirty}">
<input type="text" class="form-control" ng-model="partner.company_name" name="company_name"
placeholder="Company Name" required maxlength="80">
</div>
<div class="form-group has-feedback"
ng-class="{'has-error':companyForm.abn.$invalid && companyForm.abn.$dirty}">
<input class="form-control" ng-model="partner.abn" placeholder="ABN"
required maxlength="50" name="abn">
</div>
<div class="form-group has-feedback"
ng-class="{'has-error':companyForm.short_name.$invalid && companyForm.short_name.$dirty}">
<input type="text" class="form-control" ng-model="partner.short_name" name="short_name"
placeholder="Merchant Name" required maxlength="80">
</div>
<div class="form-group has-feedback"
ng-class="{'has-error':companyForm.company_phone.$invalid && companyForm.company_phone.$dirty}">
<input type="text" class="form-control" ng-model="partner.company_phone" name="company_phone"
placeholder="Company phone" required maxlength="80">
</div>
<div class="form-group has-feedback"
ng-class="{'has-error':companyForm.address.$invalid && companyForm.address.$dirty}">
<textarea class="form-control" ng-model="partner.address" placeholder="Address"
name="address" required maxlength="100"></textarea>
</div>
<div class="form-group has-feedback"
ng-class="{'has-error':companyForm.suburb.$invalid && companyForm.suburb.$dirty}">
<input class="form-control" ng-model="partner.suburb" placeholder="Suburb" required
maxlength="50" name="suburb">
</div>
<div class="form-group has-feedback"
ng-class="{'has-error':companyForm.state.$invalid && companyForm.state.$dirty}">
<select class="form-control" name="state"
ng-model="partner.state"
id="state-input" required
ng-options="state.value as state.label for state in states">
<option value="">State</option>
</select>
</div>
<div class="form-group has-feedback"
ng-class="{'has-error':companyForm.postcode.$invalid && companyForm.postcode.$dirty}">
<input class="form-control" ng-model="partner.postcode" placeholder="Postcode" required
maxlength="50" name="postcode">
</div>
<div class="form-group has-feedback"
ng-class="{'has-error':companyForm.industry.$invalid && companyForm.industry.$dirty}">
<select class="form-control" name="industry"
ng-model="partner.industry"
id="industry-input" required
ng-options="industry.value as industry.label for industry in industries">
<option value="">Industry</option>
</select>
</div>
<div class="row">
<div class="col-xs-12 margin-bottom">
<button type="button" class="btn btn-success btn-block btn-flat"
ng-click="saveApplyInfo(companyForm,2)">Next
</button>
<div>
<p ng-if="resError" style="padding: 6px 12px;font-size: 14px;"
class="small text-danger">{{resError}}</p>
</div>
</div>
</div>
</form>
<form novalidate name="bankForm" action="" method="post" ng-show="chooseArray[2]">
<div class="form-group has-feedback"
ng-class="{'has-error':bankForm.account_no.$invalid && bankForm.account_no.$dirty}">
<input class="form-control" ng-model="partner.bank_no" placeholder="Account No"
required
name="account_no">
</div>
<div class="form-group has-feedback"
ng-class="{'has-error':bankForm.account_name.$invalid && bankForm.account_name.$dirty}">
<input class="form-control" ng-model="partner.bank_name" placeholder="Account Name"
required name="account_name">
</div>
<div class="row">
<div class="form-group col-xs-12"
ng-class="{'has-error':bankForm.bsb_no.$invalid && bankForm.bsb_no.$dirty}">
<input class="form-control" ng-model="partner.bsb_no" placeholder="BSB No" required
name="bsb_no" style="width: 80%;display: inline">
<button type="button" class="btn btn-success" style="width:20%;display:inline;height: 34px;float: right;border-radius: 0px"
title="Search" ng-click="searchBankInfo(partner.bsb_no)">Search</button>
</div>
</div>
<div class="form-group has-feedback"
ng-class="{'has-error':bankForm.bank.$invalid && bankForm.bank.$dirty}">
<input class="form-control" ng-model="bankaccount.bank" placeholder="Bank" required
name="bank">
</div>
<div class="form-group has-feedback"
ng-class="{'has-error':bankForm.city.$invalid && bankForm.city.$dirty}">
<input class="form-control" ng-model="bankaccount.city" placeholder="City" required
name="city">
</div>
<div class="form-group has-feedback"
ng-class="{'has-error':bankForm.address.$invalid && bankForm.address.$dirty}">
<input class="form-control" ng-model="bankaccount.address" placeholder="Address" required
name="address">
</div>
<div class="form-group has-feedback"
ng-class="{'has-error':bankForm.system.$invalid && bankForm.bank_system.$dirty}">
<input class="form-control" ng-model="bankaccount.system" placeholder="System" required
name="system">
</div>
<div class="form-group has-feedback"
ng-class="{'has-error':bankForm.postcode.$invalid && bankForm.bank_postcode.$dirty}">
<input class="form-control" ng-model="bankaccount.postcode" placeholder="Postcode" required
name="postcode">
</div>
<div class="form-group has-feedback"
ng-class="{'has-error':bankForm.state.$invalid && bankForm.bank_state.$dirty}">
<input class="form-control" ng-model="bankaccount.state" placeholder="State" required
name="state">
</div>
<div class="form-group has-feedback"
ng-class="{'has-error':bankForm.branch.$invalid && bankForm.branch.$dirty}">
<input class="form-control" ng-model="bankaccount.branch" placeholder="Branch" required
name="branch">
</div>
<div class="row">
<div class="col-xs-12 margin-bottom">
<button type="button" class="btn btn-success btn-block btn-flat"
ng-click="saveApplyInfo(bankForm,3)">Next
</button>
<div>
<p ng-if="resError" style="padding: 6px 12px;font-size: 14px;"
class="small text-danger">{{resError}}</p>
</div>
</div>
</div>
</form>
<form novalidate name="cleanForm" action="" method="post" ng-show="chooseArray[3]">
<div class="form-group has-feedback"
ng-class="{'has-error':cleanForm.clean_days.$invalid && cleanForm.clean_days.$dirty}">
<select class="form-control" ng-model="partner.clean_days" id="citySelect"
ng-change="changeDays(partner.clean_days)" name="clean_days">
<option value="">Clean Days</option>
<option value="1">T+1</option>
<option value="2">T+2</option>
<option value="3">T+3</option>
</select>
<div>{{rateConfig}}</div>
</div>
<div class="form-group has-feedback"
ng-class="{'has-error':cleanForm.wechat_rate_value.$invalid && cleanForm.wechat_rate_value.$dirty}">
<div class="input-group">
<input type="number" placeholder="WeChat Rate Value" name="wechat_rate_value"
stringToNumber2 class="form-control" ng-model="rate.wechat_rate_value"
min="0.6" max="2.2" step="0.1" id="wechat_rate_value_input" required>
<div class="input-group-addon">%</div>
</div>
</div>
<div class="form-group has-feedback"
ng-class="{'has-error':cleanForm.alipay_rate_value.$invalid && cleanForm.alipay_rate_value.$dirty}">
<div class="input-group">
<input type="number" placeholder="Alipay Rate Value(Retail)" name="alipay_rate_value"
stringToNumber2 class="form-control" ng-model="rate.alipay_rate_value"
min="0.6" max="2.2" step="0.1" id="alipay_rate_value_input" required>
<div class="input-group-addon">%</div>
</div>
</div>
<div class="form-group has-feedback"
ng-class="{'has-error':cleanForm.alipayonline_rate_value.$invalid && cleanForm.alipayonline_rate_value.$dirty}">
<div class="input-group">
<input type="number" placeholder="Alipay Rate Value(Online)"
name="alipayonline_rate_value" stringToNumber2 class="form-control"
ng-model="rate.alipayonline_rate_value"
min="0.6" max="2.2" step="0.1" id="alipayonline_rate_value_input" required>
<div class="input-group-addon">%</div>
</div>
</div>
<div class="form-group has-feedback"
ng-class="{'has-error':cleanForm.bestpay_rate_value.$invalid && cleanForm.bestpay_rate_value.$dirty}">
<div class="input-group">
<input type="number" placeholder="Bestpay Rate Value" name="bestpay_rate_value"
stringToNumber2 class="form-control" ng-model="rate.bestpay_rate_value"
min="0.6" max="2.2" step="0.1" id="bestpay_rate_value_input" required>
<div class="input-group-addon">%</div>
</div>
</div>
<div class="form-group has-feedback"
ng-class="{'has-error':cleanForm.jd_rate_value.$invalid && cleanForm.jd_rate_value.$dirty}">
<div class="input-group">
<input type="number" placeholder="JD Rate Value" name="jd_rate_value" stringToNumber2
class="form-control" ng-model="rate.jd_rate_value"
min="0.6" max="2.2" step="0.1" id="jd_rate_value_input" required>
<div class="input-group-addon">%</div>
</div>
</div>
<div class="form-group has-feedback">
<div class="checkbox agree_left agree-text">
<label><input type="checkbox" ng-model="partner.agree" value="1">Agree to Terms & Conditions</label>
</div>
</div>
<div class="row">
<div class="col-xs-12 margin-bottom">
<button type="button" class="btn btn-success btn-block btn-flat"
ng-click="saveApplyInfo(cleanForm,4)" ng-disabled="!partner.agree" >Submit
</button>
<div>
<p ng-if="resError" style="padding: 6px 12px;font-size: 14px;"
class="small text-danger">{{resError}}</p>
</div>
</div>
</div>
</form>
<!-- <form novalidate name="materialsForm" action="" method="post" ng-show="chooseArray[4]">
<div class="form-horizontal" style="text-align: left">
<div class="form-group">
<label class="control-label col-sm-2">* Shop Photo</label>
<div class="col-sm-5">
<div class="form-control-static">
<button class="btn btn-primary" type="button"
ngf-select="uploadShopPhoto($file)" accept="image/*" ngf-max-size="2MB">
<i class="fa fa-upload"></i> Upload Shop Photo1
</button>
</div>
<uib-progressbar value="shopPhotoProgress.value"
ng-if="shopPhotoProgress"></uib-progressbar>
<img ng-src="{{partner.company_photo}}" ng-if="partner.company_photo"
class="thumbnail img-size col-sm-9">
</div>
<div class="col-sm-5">
<div class="form-control-static">
<button class="btn btn-primary" type="button"
ngf-select="uploadStorePhoto($file)" accept="image/*"
ngf-max-size="2MB">
<i class="fa fa-upload"></i> Upload Shop Photo2
</button>
</div>
<uib-progressbar value="storePhotoProgress.value"
ng-if="storePhotoProgress"></uib-progressbar>
<img ng-src="{{partner.store_photo}}" ng-if="partner.store_photo"
class="thumbnail img-size col-sm-9">
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2">Logo</label>
<div class="col-sm-8">
<div class="form-control-static">
<button class="btn btn-success" type="button" ngf-select="uploadLogo($file)"
accept="image/*" ngf-max-size="1MB">
<i class="fa fa-upload"></i> Upload Logo
</button>
</div>
<uib-progressbar value="logoProgress.value" ng-if="logoProgress"></uib-progressbar>
<img ng-src="{{partner.logo_url}}" ng-if="partner.logo_url" style="height: 100px;">
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2">* bank statement</label>
<div class="col-sm-4">
<div class="form-control-static">
<button class="btn btn-primary" type="button"
ngf-select="uploadBankFile($file)">
<i class="fa fa-upload"></i> Upload
</button>
<a ng-if="file.client_bank_file" role="button" class="btn-group btn btn-warning"
type="button" ng-href="{{file.client_bank_file}}" target="_blank"><i
class="fa fa-download"></i></a>
<i class="fa fa-check-square-o check-i" aria-hidden="true" style="float: none"
ng-if="$root.complianceCheck.authFile"></i>
</div>
<uib-progressbar value="bankFileProgress.value"
ng-if="bankFileProgress"></uib-progressbar>
<a ng-if="bankIsImage" target="_blank" ng-href="{{file.client_bank_file}}">
<img ng-src="{{file.client_bank_file}}" class="col-sm-8"></a>
</div>
<div class="col-sm-6">
<div class="form-control-static">
<p>Example请保证图片信息清晰可见,如下图</p>
<img class="col-sm-6 img-responsive" style="border: 1px solid #ddd"
src="https://file.royalpay.com.au/open/2017/03/07/1488859920633_5ruVtDa30yY2ytBSDAAqxg0Ob2nreh.jpeg">
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2">* Certificate of Registration</label>
<div class="col-sm-4">
<div class="form-control-static">
<button class="btn btn-primary" type="button"
ngf-select="uploadCompanyFile($file)">
<i class="fa fa-upload"></i> Upload
</button>
<a ng-if="file.client_company_file" role="button"
class="btn-group btn btn-warning" type="button"
ng-href="{{file.client_company_file}}" target="_blank"><i
class="fa fa-download"></i></a>
<i class="fa fa-check-square-o check-i" aria-hidden="true" style="float: none"
ng-if="$root.complianceCheck.authFile"></i>
</div>
<uib-progressbar value="companyFileProgress.value"
ng-if="companyFileProgress"></uib-progressbar>
<a ng-if="companyIsImage" ng-href="{{file.client_company_file}}" target="_blank">
<img ng-src="{{file.client_company_file}}" class="col-sm-8"></a>
</div>
<div class="col-sm-6">
<div class="form-control-static">
<div class="col-sm-6">
<p>Example公司请提供以下文件图片</p>
<img class="col-xs-12 img-responsive" style="border: 1px solid #ddd"
src="https://file.royalpay.com.au/open/2017/03/07/1488865011738_mW91ylSb5V1NJYu8jxvBPGNN49Zyel.jpeg">
&lt;!&ndash;<img class="col-sm-12" src="https://file.royalpay.com.au/open/2017/03/07/1488864017622_BppIfz1yhMeoF0Z49rHt2gZIfVOihA.jpeg">&ndash;&gt;
</div>
<div class="col-sm-6">
<p>sole
trade个体户),partnership合伙,trust信托请在http://abr.business.gov.au将查询结果截图上传</p>
<img class="col-sm-12 img-responsive" style="border: 1px solid #ddd"
src="https://file.royalpay.com.au/open/2017/03/07/1488860564017_37spL6phUySM27oRtO4cQ7FOJblYJ6.jpeg">
</div>
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2">* ID </label>
<div class="col-sm-4">
<div class="form-control-static">
<button class="btn btn-primary" type="button"
ngf-select="uploadIDFile($file)">
<i class="fa fa-upload"></i> Upload
</button>
<a ng-if="file.client_id_file" role="button" class="btn-group btn btn-warning"
type="button" ng-href="{{file.client_id_file}}" target="_blank"><i
class="fa fa-download"></i></a>
<i class="fa fa-check-square-o check-i" aria-hidden="true" style="float: none"
ng-if="$root.complianceCheck.authFile"></i>
</div>
<uib-progressbar value="idFileProgress.value"
ng-if="idFileProgress"></uib-progressbar>
<a ng-if="idIsImage" ng-href="{{file.client_id_file}}" target="_blank">
<img ng-src="{{file.client_id_file}}" class="col-sm-8"></a>
</div>
<div class="col-sm-6">
<div class="form-control-static">
<div class="col-sm-6">
<p>Example请保证图片(护照或驾照)信息清晰可见,如下图</p>
<img class="col-xs-12 img-responsive" style="border: 1px solid #ddd"
src="https://file.royalpay.com.au/open/2017/06/29/1498725651779_OPiqOP1dGnTpaxPsCR3P9lVrp4384b.jpg">
</div>
<div class="col-sm-6">
<br/>
<br/>
<img class="col-sm-12 img-responsive" style="border: 1px solid #ddd"
src="https://file.royalpay.com.au/open/2017/06/29/1498725678615_Bv2tzUtihY5U6YK9ScveXzKkVWOnrF.jpg">
</div>
</div>
</div>
</div>
<div class="form-horizontal">
<div class="form-group">
<label class="control-label col-sm-2">* Agreement</label>
<div class="col-sm-4">
<div class="form-control-static">
<button class="btn btn-primary" type="button"
ngf-select="uploadAgreementFile($file)">
<i class="fa fa-upload"></i> Upload
</button>
<a ng-if="file.client_agree_file" role="button"
class="btn-group btn btn-warning" type="button"
ng-href="{{file.client_agree_file}}" target="_blank"><i
class="fa fa-download"></i></a>
<i class="fa fa-check-square-o check-i" aria-hidden="true"
style="float: none" ng-if="$root.complianceCheck.authFile"></i>
</div>
<uib-progressbar value="agreementFileProgress.value"
ng-if="agreementFileProgress"></uib-progressbar>
<a ng-if="agreeIsImage" target="_blank" ng-href="{{file.client_agree_file}}">
<img ng-src="{{file.client_agree_file}}" class="col-sm-8"></a>
</div>
<div class="col-sm-6">
<div class="form-control-static">
<p>Example请保证图片信息清晰可见,如下图</p>
<img class="col-sm-6 img-responsive" style="border: 1px solid #ddd"
src="https://file.royalpay.com.au/open/2017/06/15/1497454561900_5mf5KC4WGkXyFynv025JlTukAq8BqX.png">
</div>
</div>
</div>
</div>
<div class="form-horizontal">
<div class="form-group">
<label class="control-label col-sm-2">Application Form(optional)</label>
<div class="col-sm-4">
<div class="form-control-static">
<button class="btn btn-primary" type="button"
ngf-select="uploadApplyFile($file)">
<i class="fa fa-upload"></i> Upload
</button>
<a ng-if="file.client_apply_file" role="button"
class="btn-group btn btn-warning" type="button"
ng-href="{{file.client_apply_file}}" target="_blank"><i
class="fa fa-download"></i></a>
<i class="fa fa-check-square-o check-i" style="float: none"
aria-hidden="true" ng-if="$root.complianceCheck.authFile"></i>
</div>
<uib-progressbar value="bankFileProgress.value"
ng-if="applyFileProgress"></uib-progressbar>
<a ng-if="applyIsImage" target="_blank" ng-href="{{file.client_apply_file}}">
<img ng-src="{{file.client_apply_file}}" class="col-sm-8"></a>
</div>
<div class="col-sm-6">
<div class="form-control-static">
<p>Example请保证图片信息清晰可见,如下图</p>
<img class="col-sm-6 img-responsive" style="border: 1px solid #ddd"
src="https://file.royalpay.com.au/open/2017/06/15/1497454548133_uSn0TP2uQNLEfnMB57CMrxG2jTOWHG.png">
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-xs-12 margin-bottom">
<button type="button" class="btn btn-success btn-block btn-flat"
ng-click="submit(materialsForm)">Submit
</button>
<div>
<p ng-if="resError" style="padding: 6px 12px;font-size: 14px;"
class="small text-danger">{{resError}}</p>
</div>
</div>
</div>
</form>-->
<form ng-show="chooseArray[4]">
<div class="success_wrapper">
<div class="success_img">
<img height="40" width="40" src="static/images/step/gou.png">
</div>
<div class="success_text">
<div>恭喜注册成功</div>
<div class="success_text2">欢迎使用RoyalPay收单服务</div>
</div>
</div>
<div class="success_content">
<div class="content_align">
<div>注意事项:</div>
<p>1、需要完成 合规材料的提交具体请查看appxx菜单xx功能</p>
<p>2、在完成合规认证之前不会对交易进行清算</p>
<p>3、账户名和密码以及相关信息已发送至账户邮箱请妥善保护自己的密码及时进行修改。</p>
</div>
<div class="row">
<div class="col-xs-12 margin-bottom2">
<button type="button" id="login-btn7" class="btn btn-success btn-block btn-flat"
onclick="window.location.href='/login.html'">
{{seconds}}秒后,将跳转登录页, 或点击直接跳转登录页
</button>
<div>
<p ng-if="resError" style="padding: 6px 12px;font-size: 14px;"
class="small text-danger">{{resError}}</p>
</div>
</div>
</div>
</div>
</form>
</div>
</div>
<div class="modal fade">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"
aria-label="Close"><span
aria-hidden="true">&times;</span>
<span class="sr-only">Close</span></button>
<h4 class="modal-title">Success</h4>
</div>
<div class="modal-body">
Registered merchant application has been submitted successfully
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close
</button>
</div>
</div>
</div>
</div>
</div>
<section class="section section-six fp-auto-height footer">
<div class="container">
<div class="row margin-bottom">
<div class="col-md-4 footer-item">
CONTACT US
<hr>
Level 14<br>
383 Kent Street<br>
Sydney NSW 2000<br>
<br>
Level 11<br>
15 William Street<br>
Melbourne VIC 3000<br>
<br>
1300-10-77-50<br>
03 9448 8865<br>
info@royalpay.com.au
</div>
<div class="col-md-4 sitemap footer-item">
SITE MAP
<hr>
<div class="row">
<div class="col-xs-6">
<p><a href="/">RoyalPay</a></p>
<p><a href="https://mpay.royalpay.com.au/docs/en/">Gateway API</a></p>
<p><a href="https://www.royalpay.com.au/industry.html">Industry Solution</a></p>
<p><a href="https://www.royalpay.com.au/marketing.html">Marketing Service</a></p>
</div>
<div class="col-xs-6">
<p><a href="https://www.royalpay.com.au/about.html">About Us</a></p>
<p><a href="https://www.royalpay.com.au/c_news.html">News</a></p>
<p><a href="https://www.royalpay.com.au/c_career.html">Career</a></p>
<p><a href="https://www.royalpay.com.au/download.html">Downloads</a></p>
</div>
</div>
</div>
<div class="col-md-4 footer-item">
SUPPORT
<hr>
<div class="row">
<div class="col-xs-6 qr-box">
<img src="static/css/img/qr_royalpay.png">
RoyalPay WeChat Official Account
</div>
<div class="col-xs-6 qr-box">
<img src="static/css/img/qr_service.png">
Customer Service
</div>
</div>
</div>
</div>
</div>
<div class="copyright">
<div class="container">
<div class="row">
<div class="col-xs-12 text-center">
© 2016 Tunnel Show Pty. Ltd. | Representative of AFSL licensee 448066
</div>
</div>
</div>
</div>
</section>
</div>
</div>
</div>
<div id="fp-nav" class="right"></div>
<div id="cli_dialog_div"></div>
</body>
</html>

@ -0,0 +1,430 @@
body .progress_inner #step-5:checked + div + div + div + div > .box_base, body .progress_inner #step-4:checked + input + div + div + div + div > .box_base, body .progress_inner #step-2:checked + input + input + input + div + div + div + div > .box_base, body .progress_inner #step-3:checked + input + input + div + div + div + div > .box_base, body .progress_inner #step-1:checked + input + input + input + input + div + div + div + div > .box_base {
top: 50%;
left: 0px;
opacity: 1;
}
body .progress_inner #step-5:checked + div + div + div + div > .box_item, body .progress_inner #step-4:checked + input + div + div + div + div > .box_item, body .progress_inner #step-2:checked + input + input + input + div + div + div + div > .box_item, body .progress_inner #step-3:checked + input + input + div + div + div + div > .box_item, body .progress_inner #step-1:checked + input + input + input + input + div + div + div + div > .box_item {
top: -30px;
left: 0px;
opacity: 0;
}
body .progress_inner #step-5:checked + div + div + div + div > .box_lid, body .progress_inner #step-4:checked + input + div + div + div + div > .box_lid, body .progress_inner #step-2:checked + input + input + input + div + div + div + div > .box_lid {
top: -20px;
left: 0px;
opacity: 0;
}
body .progress_inner #step-5:checked + div + div + div + div > .box_item, body .progress_inner #step-4:checked + input + div + div + div + div > .box_item, body .progress_inner #step-2:checked + input + input + input + div + div + div + div > .box_item {
top: -10px;
left: 0px;
opacity: 1;
}
body .progress_inner #step-5:checked + div + div + div + div > .box_item, body .progress_inner #step-4:checked + input + div + div + div + div > .box_item, body .progress_inner #step-3:checked + input + input + div + div + div + div > .box_item {
top: 10px;
left: 0px;
opacity: 1;
}
body .progress_inner #step-5:checked + div + div + div + div > .box_lid, body .progress_inner #step-4:checked + input + div + div + div + div > .box_lid, body .progress_inner #step-3:checked + input + input + div + div + div + div > .box_lid {
top: -1px;
left: 0px;
opacity: 1;
}
body .progress_inner #step-5:checked + div + div + div + div > .box_ribbon, body .progress_inner #step-4:checked + input + div + div + div + div > .box_ribbon, body .progress_inner #step-3:checked + input + input + div + div + div + div > .box_ribbon {
top: 70%;
left: 0px;
opacity: 0;
}
body .progress_inner #step-5:checked + div + div + div + div > .box_bow, body .progress_inner #step-4:checked + input + div + div + div + div > .box_bow, body .progress_inner #step-3:checked + input + input + div + div + div + div > .box_bow {
top: 0px;
left: 0px;
opacity: 0;
}
body .progress_inner #step-5:checked + div + div + div + div > .box_ribbon, body .progress_inner #step-4:checked + input + div + div + div + div > .box_ribbon {
top: 50%;
left: 0px;
opacity: 1;
}
body .progress_inner #step-5:checked + div + div + div + div > .box_bow, body .progress_inner #step-4:checked + input + div + div + div + div > .box_bow {
top: -10px;
left: 0px;
opacity: 1;
}
body .progress_inner #step-5:checked + div + div + div + div > .box_tag {
top: 10px;
left: 20px;
opacity: 1;
}
body .progress_inner #step-5:checked + div + div + div + div > .box_string {
top: 10px;
left: 20px;
opacity: 1;
}
* {
box-sizing: border-box;
}
body .progress_inner__step:before, body .progress_inner, body .progress_inner__status .box_base, body .progress_inner__status .box_item, body .progress_inner__status .box_ribbon, body .progress_inner__status .box_bow, body .progress_inner__status .box_bow__left, body .progress_inner__status .box_bow__right, body .progress_inner__status .box_tag, body .progress_inner__status .box_string {
position: absolute;
left: 0;
right: 0;
top:42%;
-webkit-transform: translateY(-50%);
transform: translateY(-50%);
margin: auto;
}
body .progress_inner__bar, body .progress_inner__bar--set {
height: 6px;
left: 10%;
background: -webkit-repeating-linear-gradient(45deg, #1ea4ec, #1ea4ec 4px, #1f8bc5 4px, #1f8bc5 10px);
background: repeating-linear-gradient(45deg, #1ea4ec, #1ea4ec 4px, #1f8bc5 4px, #1f8bc5 10px);
-webkit-transition: width 800ms cubic-bezier(0.915, 0.015, 0.3, 1.005);
transition: width 800ms cubic-bezier(0.915, 0.015, 0.3, 1.005);
border-radius: 6px;
width: 0;
position: relative;
z-index: -1;
}
body .progress_inner__step:before {
width: 30px;
height: 30px;
color: #70afd0;
background: white;
line-height: 30px;
border: 3px solid #a6cde2;
font-size: 12px;
top: 3px;
border-radius: 100%;
-webkit-transition: all .4s;
transition: all .4s;
cursor: pointer;
pointer-events: none;
}
body .progress_inner__step {
width: 20%;
font-size: 14px;
padding: 0 10px;
-webkit-transition: all .4s;
transition: all .4s;
float: left;
text-align: center;
position: relative;
}
body .progress_inner__step label {
padding-top: 50px;
top: -20px;
display: block;
position: relative;
cursor: pointer;
}
/*body .progress_inner__step:hover {
color: white;
}
body .progress_inner__step:hover:before {
color: white;
background: #1ea4ec;
}*/
body {
font-family: "Nunito", sans-serif;
background: #a6cde2;
color: #2e6c8e;
text-align: center;
font-weight: 900;
}
body .progress_inner {
height: 200px;
width: 1000px;
}
body .progress_inner #step-5:checked + div {
width: 80%;
}
body .progress_inner #step-5:checked + div + div + div > .tab:nth-of-type(5) {
opacity: 1;
top: 0;
}
body .progress_inner #step-5:checked + div + div + div + div {
right: 10%;
}
body .progress_inner #step-4:checked + input + div {
width: 60%;
}
body .progress_inner #step-4:checked + input + div + div + div > .tab:nth-of-type(4) {
opacity: 1;
top: 0;
}
body .progress_inner #step-4:checked + input + div + div + div + div {
right: 30%;
}
body .progress_inner #step-3:checked + input + input + div {
width: 40%;
}
body .progress_inner #step-3:checked + input + input + div + div + div > .tab:nth-of-type(3) {
opacity: 1;
top: 0;
}
body .progress_inner #step-3:checked + input + input + div + div + div + div {
right: 50%;
}
body .progress_inner #step-2:checked + input + input + input + div {
width: 20%;
}
body .progress_inner #step-2:checked + input + input + input + div + div + div > .tab:nth-of-type(2) {
opacity: 1;
top: 0;
}
body .progress_inner #step-2:checked + input + input + input + div + div + div + div {
right: 70%;
}
body .progress_inner #step-1:checked + input + input + input + input + div {
width: 0%;
}
body .progress_inner #step-1:checked + input + input + input + input + div + div + div > .tab:nth-of-type(1) {
opacity: 1;
top: 0;
}
body .progress_inner #step-1:checked + input + input + input + input + div + div + div + div {
right: 90%;
}
body .progress_inner__step:nth-of-type(1):before {
content: "1";
}
body .progress_inner__step:nth-of-type(2):before {
content: "2";
}
body .progress_inner__step:nth-of-type(3):before {
content: "3";
}
body .progress_inner__step:nth-of-type(4):before {
content: "4";
}
body .progress_inner__step:nth-of-type(5):before {
content: "5";
}
body .progress_inner__step:nth-of-type(6):before {
content: "6";
}
body .progress_inner__bar--set {
width: 80%;
top: -6px;
background: #70afd0;
position: relative;
z-index: -2;
}
body .progress_inner__tabs .tab {
opacity: 0;
position: absolute;
top: 40px;
text-align: center;
margin-top: 80px;
box-shadow: 0px 2px 1px #80b7d5;
padding: 30px;
background: white;
border-radius: 10px;
-webkit-transition: all .2s;
transition: all .2s;
}
body .progress_inner__tabs .tab h1 {
margin: 0;
}
body .progress_inner__tabs .tab p {
font-weight: 400;
opacity: 0.8;
}
body .progress_inner__status {
width: 40px;
height: 40px;
top: -65px;
-webkit-transition: right 800ms cubic-bezier(0.915, 0.015, 0.3, 1.005);
transition: right 800ms cubic-bezier(0.915, 0.015, 0.3, 1.005);
-webkit-transform: translateX(50%);
transform: translateX(50%);
position: absolute;
}
body .progress_inner__status div {
opacity: 0;
-webkit-transition: all 600ms cubic-bezier(0.915, 0.015, 0.3, 1.005);
transition: all 600ms cubic-bezier(0.915, 0.015, 0.3, 1.005);
-webkit-transition-delay: 300ms;
transition-delay: 300ms;
}
body .progress_inner__status div {
position: absolute;
}
body .progress_inner__status .box_base {
background: -webkit-repeating-linear-gradient(45deg, #986c5d, #986c5d 2px, #775144 2px, #775144 4px);
background: repeating-linear-gradient(45deg, #986c5d, #986c5d 2px, #775144 2px, #775144 4px);
width: 36px;
height: 40px;
z-index: 1;
border-radius: 1px;
}
body .progress_inner__status .box_lid {
width: 40px;
height: 13.33333px;
background: #775144;
z-index: 2;
border-radius: 1px;
top: 0;
}
body .progress_inner__status .box_item {
width: 20px;
height: 20px;
background: #be69d2;
z-index: 0;
border-radius: 4px;
-webkit-transform: rotate(45deg);
transform: rotate(45deg);
}
body .progress_inner__status .box_ribbon {
width: 10px;
height: 42px;
background: #ee0f29;
z-index: 4;
border-radius: 1px;
}
body .progress_inner__status .box_bow__left, body .progress_inner__status .box_bow__right {
width: 6px;
height: 10px;
background: #be0c21;
position: absolute;
z-index: 3;
opacity: 1;
border-radius: 1px;
}
body .progress_inner__status .box_bow {
top: -6px;
z-index: 1;
-webkit-transition-delay: 500ms;
transition-delay: 500ms;
}
body .progress_inner__status .box_bow__left {
left: 6px;
-webkit-transform: rotate(45deg);
transform: rotate(45deg);
}
body .progress_inner__status .box_bow__right {
left: -4px;
-webkit-transform: rotate(-45deg);
transform: rotate(-45deg);
}
body .progress_inner__status .box_tag {
width: 20px;
height: 10px;
background: #487ac7;
z-index: 4;
-webkit-transform: rotate(-10deg) translateX(-40px) translateY(0px);
transform: rotate(-10deg) translateX(-40px) translateY(0px);
border-radius: 2px;
-webkit-transition-delay: 500ms;
transition-delay: 500ms;
}
body .progress_inner__status .box_string {
width: 17px;
height: 2px;
background: #343434;
z-index: 4;
-webkit-transform: rotate(-39deg) translateX(-22px) translateY(-12px);
transform: rotate(-39deg) translateX(-22px) translateY(-12px);
}
body .progress_inner input[type="radio"] {
display: none;
}
.step_header{
text-align: left;
padding-left:7%;
}
.step_header img{
height: 30px;
width: 30px;
}
.success_wrapper{
margin-top: 30px;
text-align: center;
}
.success_img{
display: inline-block;
}
.success_img img{
vertical-align: baseline;
}
.success_text{
text-align: left;
display: inline-block;
margin-left: 14px;
}
.success_text2{
font-family: PingFangSC-Regular;
font-size: 15px;
color: #8B919D;
letter-spacing: 0px;
}
.success_content{
margin-top: 50px;
font-family: PingFangSC-Regular;
font-size: 15px;
color: #8B919D;
letter-spacing: 0px;
}
.content_align{
margin:0 auto;
width:50%;
text-align:left;
}
.margin-bottom2{
margin-top: 120px;
}
.agree-text{
font-family: SanFranciscoText-Regular;
font-size: 15px;
color: #FF6600;
letter-spacing: 0px;
}
.agree-to{
border: 1px solid #FF6600;
padding: 6px 8px 6px 8px;
color: grey;
cursor: pointer;
}
.agree_left{
text-align: left;
}
body .dis_before{
color: white;
}
body .dis_before:nth-child(1):before{
color: white;
background: #1ea4ec;
}
body .dis_before:nth-child(2):before{
color: white;
background: #1ea4ec;
}
body .dis_before:nth-child(3):before{
color: white;
background: #1ea4ec;
}
body .dis_before:nth-child(4):before{
color: white;
background: #1ea4ec;
}
body .dis_before:nth-child(5):before {
color: white;
background: #1ea4ec;
}
/*.progress_inner__step:before{
background: #1ea4ec;
}
.step_submit_color{
color: white;
}*/

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

@ -0,0 +1,262 @@
angular.module('applyPartnerApp', ['ngMessages']).controller('applyPartnerCtrl', ['$scope', '$http','$interval', function ($scope, $http,$interval) {
var countryMap = [{
"label": "AUS",
"value": "AUS"
}, {
"label": "CHN",
"value": "CHN"
}];
var stateMap = [
{
"label": "ACT",
"value": "ACT"
},
{
"label": "NSW",
"value": "NSW"
},
{
"label": "NT",
"value": "NT"
},
{
"label": "QLD",
"value": "QLD"
},
{
"label": "SA",
"value": "SA"
},
{
"label": "TAS",
"value": "TAS"
},
{
"label": "VIC",
"value": "VIC"
},
{
"label": "WA",
"value": "WA"
}
];
var industryMap = [
{
"label": "综合商城 Integrated Store",
"value": 336
},
{
"label": "食品 Food",
"value": 335
},
{
"label": "化妆品 Cosmetics",
"value": 334
},
{
"label": "鞋包服饰 Clothes",
"value": 327
},
{
"label": "酒店行业 Hospitality industry",
"value": 328
},
{
"label": "数码电器 Electric appliances",
"value": 332
},
{
"label": "母婴 Baby and maternal products",
"value": 333
},
{
"label": "文具/办公用品 Office supplies",
"value": 337
},
{
"label": "机票行业 Airline tickets industry",
"value": 339
},
{
"label": "国际物流 International logistics",
"value": 330
},
{
"label": "教育行业 Education section",
"value": 329
},
{
"label": "其它服务行业 Other services industry",
"value": 331
},
{
"label": "其它货物贸易行业 Other goods trade industry",
"value": 338
}
];
$scope.name_exist = false;
$scope.industries = angular.copy(industryMap);
$scope.states = angular.copy(stateMap);
$scope.countries = angular.copy(countryMap);
$scope.seconds = 6;
$scope.canClick=false;
$scope.description = "Send Code";
$scope.partner = {};
$scope.bankaccount = {};
$scope.rate = {};
$scope.checkUserName = function (username) {
if(username != null && username != ''){
$http.get('/register/account/' + $scope.partner.username).then(function (resp) {
$scope.name_exist = false;
}, function (resp) {
if (resp.data.status == 403){
$scope.name_exist = true;
}
})
}
};
$scope.disabledArray = new Array(true, false, false, false, false);
$scope.chooseArray = new Array(true, false, false, false, false);
$scope.changeChoose = function (index) {
$scope.chooseArray = new Array(false, false, false, false, false);
$scope.chooseArray[index] = true;
$scope.disabledArray[index] = true;
};
$scope.getRateConfig = function () {
$http.get('/sys/partners/sys_rates').then(function (resp) {
$scope.sysRateConfig = resp.data;
}, function (resp) {
})
};
$scope.sendPhoneCodeTime = function(){
var second=59;
var timerHandler;
timerHandler =$interval(function(){
if(second<=0){
$interval.cancel(timerHandler);
second=59;
$scope.description="获取验证码";
$scope.canClick=false;
}else{
$scope.description=second+"s后重发";
second--;
$scope.canClick=true;
}
},1000)
};
$scope.goToLogin = function () {
var timer = $interval(function(){
$scope.seconds = $scope.seconds -1;
if ($scope.seconds == 0) {
location.href = '/login.html';
}
},1000)
};
$scope.sendVerificationCode = function (phone_number) {
$scope.sendPhoneCodeTime();
$http.post('/register/get/code/{number}').then(function (resp) {
}, function (resp) {
$scope.resError = resp.data.message;
});
};
$scope.searchBankInfo = function (bsb_no) {
if (bsb_no != null && bsb_no != "") {
$http.get('/register/info/bank/' + bsb_no).then(function (resp) {
$scope.bankInfo = resp.data;
$scope.bankaccount.bank = $scope.bankInfo.bank;
$scope.bankaccount.city = $scope.bankInfo.city;
$scope.bankaccount.address = $scope.bankInfo.address;
$scope.bankaccount.system = $scope.bankInfo.system;
$scope.bankaccount.postcode = $scope.bankInfo.postcode;
$scope.bankaccount.state = $scope.bankInfo.state;
$scope.bankaccount.branch = $scope.bankInfo.branch;
});
} else {
$scope.resError = "请先填写BSB No";
}
};
$scope.changeDays = function (clean_days) {
if (clean_days) {
switch (clean_days) {
case '1': {
$scope.rate.wechat_rate_value = parseFloat($scope.sysRateConfig.t1.Wechat);
$scope.rate.alipay_rate_value = parseFloat($scope.sysRateConfig.t1.Alipay);
$scope.rate.alipayonline_rate_value = parseFloat($scope.sysRateConfig.t1.AlipayOnline);
$scope.rate.bestpay_rate_value = parseFloat($scope.sysRateConfig.t1.Bestpay);
$scope.rate.jd_rate_value = parseFloat($scope.sysRateConfig.t1.JDpay);
break;
}
case '2': {
$scope.rate.wechat_rate_value = parseFloat($scope.sysRateConfig.t2.Wechat);
$scope.rate.alipay_rate_value = parseFloat($scope.sysRateConfig.t2.Alipay);
$scope.rate.bestpay_rate_value = parseFloat($scope.sysRateConfig.t2.Bestpay);
$scope.rate.alipayonline_rate_value = parseFloat($scope.sysRateConfig.t2.AlipayOnline);
$scope.rate.jd_rate_value = parseFloat($scope.sysRateConfig.t2.JDpay);
break;
}
case '3': {
$scope.rate.wechat_rate_value = parseFloat($scope.sysRateConfig.t3.Wechat);
$scope.rate.alipay_rate_value = parseFloat($scope.sysRateConfig.t3.Alipay);
$scope.rate.bestpay_rate_value = parseFloat($scope.sysRateConfig.t3.Bestpay);
$scope.rate.alipayonline_rate_value = parseFloat($scope.sysRateConfig.t3.AlipayOnline);
$scope.rate.jd_rate_value = parseFloat($scope.sysRateConfig.t3.JDpay);
break;
}
}
}
};
$scope.saveApplyInfo = function (form,index) {
if (form.$invalid) {
angular.forEach(form, function (item, key) {
if (key.indexOf('$') < 0) {
item.$dirty = true;
}
});
return;
}
$http.post('/register/info/update/' + $scope.partner.username, $scope.partner).then(function (resp) {
if (index == 3) {
$scope.getRateConfig();
}
if (index == 4) {
$scope.goToLogin();
}
$scope.changeChoose(index);
}, function (resp) {
$scope.resError = resp.data.message;
});
};
<!--/partners/application/captcha-image-->
/* $scope.captchaImage = '/partners/application/captcha-image';
$scope.changeCaptchaImage = function () {
$scope.captchaImage = '/partners/application/captcha-image?' + Math.floor(Math.random() * 100);
};
$scope.save = function (form) {
if (form.$invalid) {
angular.forEach(form, function (item, key) {
if (key.indexOf('$') < 0) {
item.$dirty = true;
}
});
return;
}
$scope.partner.company_name = $scope.partner.short_name;
$('#login-btn').attr('disabled', true);
$http.post('partners/application', $scope.partner).then(function (resp) {
alert("Registered merchant application has been submitted successfully");
location.href = 'partner_register_success.html';
//commonDialog.alert({title: 'Success', content: 'Registered merchant application has been submitted successfully', type: 'success'});
}, function (resp) {
alert(resp.data.message);
$scope.resError = resp.data.message;
$scope.changeCaptchaImage();
$('#login-btn').attr('disabled', false);
});
};*/
}]);

@ -1,6 +1,7 @@
package au.com.royalpay.payment.manage.apps.core.impls; package au.com.royalpay.payment.manage.apps.core.impls;
import au.com.royalpay.payment.manage.mappers.payment.OrderMapper; import au.com.royalpay.payment.manage.mappers.payment.OrderMapper;
import au.com.royalpay.payment.manage.mappers.system.ClientConfigMapper;
import au.com.royalpay.payment.manage.mappers.system.ClientMapper; import au.com.royalpay.payment.manage.mappers.system.ClientMapper;
import au.com.royalpay.payment.manage.mappers.system.OrgMapper; import au.com.royalpay.payment.manage.mappers.system.OrgMapper;
import au.com.royalpay.payment.tools.mail.MailGunClient; import au.com.royalpay.payment.tools.mail.MailGunClient;
@ -9,6 +10,7 @@ import au.com.royalpay.payment.tools.mail.SendMail;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import org.apache.commons.codec.binary.Base64; import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateUtils; import org.apache.commons.lang3.time.DateUtils;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
@ -21,8 +23,12 @@ import org.springframework.web.bind.annotation.RequestMethod;
import java.io.IOException; import java.io.IOException;
import java.net.URISyntaxException; import java.net.URISyntaxException;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set; import java.util.Set;
import javax.annotation.Resource; import javax.annotation.Resource;
@ -34,7 +40,7 @@ import cn.yixblog.platform.http.HttpRequestResult;
* Created by wangning on 05/01/2018. * Created by wangning on 05/01/2018.
*/ */
@SpringBootTest @SpringBootTest
@ActiveProfiles({ "local", "alipay", "wechat", "jd", "bestpay" }) @ActiveProfiles({ "proxy", "alipay", "wechat", "jd", "bestpay" })
@RunWith(SpringRunner.class) @RunWith(SpringRunner.class)
public class CustomerImpressionImplTest { public class CustomerImpressionImplTest {
@Resource @Resource
@ -48,7 +54,8 @@ public class CustomerImpressionImplTest {
private OrgMapper orgMapper; private OrgMapper orgMapper;
@Resource @Resource
private MailGunClient mailGunClient; private MailGunClient mailGunClient;
@Resource
private ClientConfigMapper clientConfigMapper;
// @Test // @Test
// public void redisQueue() { // public void redisQueue() {
@ -94,7 +101,6 @@ public class CustomerImpressionImplTest {
// } // }
// } // }
@Test @Test
public void sendSimpleMessage() throws Exception { public void sendSimpleMessage() throws Exception {
String url = "https://api.mailgun.net/v3/dev.showcodes.com/messages?from=postmaster@mail.royalpay.com.au&to=164851225@qq.com,1029811920@qq.com&subject=啊是记录&text=暗杀苏&v:my-custom-data={\"key\":\"value\"}"; String url = "https://api.mailgun.net/v3/dev.showcodes.com/messages?from=postmaster@mail.royalpay.com.au&to=164851225@qq.com,1029811920@qq.com&subject=啊是记录&text=暗杀苏&v:my-custom-data={\"key\":\"value\"}";
@ -155,13 +161,15 @@ public class CustomerImpressionImplTest {
public void sendSimpleMessages() throws Exception { public void sendSimpleMessages() throws Exception {
SendMail sendMail = new SendMail(); SendMail sendMail = new SendMail();
sendMail.setFrom("info@mail.royalpay.com.au"); sendMail.setFrom("info@mail.royalpay.com.au");
sendMail.setContent("<html><p>Hi kira</p ></html>"); sendMail.setContent("<html><p>Hi</p ></html>");
List<String> list = new ArrayList<>();
list.add("testTag");
// sendMail.setTags(list);
Set<String> mailCCs = new HashSet<>(); Set<String> mailCCs = new HashSet<>();
mailCCs.add("asd1159111@163.com"); mailCCs.add("asd1159111@163.com");
sendMail.setMailCcs(mailCCs); sendMail.setMailCcs(mailCCs);
Set<String> mailtos = new HashSet<>(); Set<String> mailtos = new HashSet<>();
mailtos.add("eason.qian@royalpay.com.au"); mailtos.add("eason.qian@royalpay.com.au");
mailtos.add("164851225@qq.com");
sendMail.setMailTos(mailtos); sendMail.setMailTos(mailtos);
sendMail.setTitle("Final Test"); sendMail.setTitle("Final Test");
@ -171,4 +179,43 @@ public class CustomerImpressionImplTest {
System.out.println(result.toJSONString()); System.out.println(result.toJSONString());
} }
@Test
public void asd() {
JSONObject client = clientMapper.findClient(9);
JSONObject var = new JSONObject();
var.put("client_moniker", client.getString("client_moniker"));
var.put("short_name", client.getString("short_name"));
JSONObject result = mailGunClient.addListMember(client.getString("contact_email"), "merchants@mail.royalpay.com.au", client.getString("contact_person"),
var);
}
@Test
public void qwe() {
List<JSONObject> clients = clientMapper.AllClients();
List<JSONObject> clientConfigs = clientConfigMapper.getAll();
Map<String, JSONObject> clientConfigMap = new HashMap<>();
Map<String, JSONObject> clientMap = new HashMap<>();
clientConfigs.forEach(p -> {
clientConfigMap.put(p.getString("client_moniker"), p);
});
clients.forEach(p -> {
clientMap.put(p.getString("client_moniker"), p);
});
String split = "--";
String cc = "cc:";
String c = "c";
clientConfigMap.values().forEach(p -> {
String clientMoniker = p.getString("client_moniker");
JSONObject tmpClient = clientMap.get(clientMoniker);
tmpClient.keySet().forEach(o->{
if(StringUtils.isNotEmpty(p.getString(o))){
if(!tmpClient.getString(o).equals(p.getString(o))){
System.out.println(clientMoniker+split+o+split+cc+p.getString(o)+split+c+tmpClient.getString(o));
}
}
});
});
}
} }
Loading…
Cancel
Save