From f7f5a925dcf0fcbc6bafc473e4c1f2d0e2d6c7ad Mon Sep 17 00:00:00 2001 From: wangning <164851225@qq.com> Date: Mon, 14 May 2018 16:53:56 +0800 Subject: [PATCH 1/7] tmp --- .../payment/manage/mappers/system/OrgMapper.java | 3 +++ src/main/resources/application-local.properties | 2 +- src/main/resources/application.properties | 6 ++++-- .../payment/manage/mappers/system/OrgMapper.xml | 13 +++++++++++++ .../apps/core/impls/CustomerImpressionImplTest.java | 11 ++++++----- 5 files changed, 27 insertions(+), 8 deletions(-) diff --git a/src/main/java/au/com/royalpay/payment/manage/mappers/system/OrgMapper.java b/src/main/java/au/com/royalpay/payment/manage/mappers/system/OrgMapper.java index 844d1433a..3aa028538 100644 --- a/src/main/java/au/com/royalpay/payment/manage/mappers/system/OrgMapper.java +++ b/src/main/java/au/com/royalpay/payment/manage/mappers/system/OrgMapper.java @@ -47,4 +47,7 @@ public interface OrgMapper { PageList listOrgWithPages(JSONObject paraams, PageBounds order); List listOrgAndChild(@Param("org_id") int org_id); + + JSONObject test(@Param("client_id") int client_id); + } diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index f2f13acd0..91173a856 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -1,6 +1,6 @@ spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.schema-name=royalpay_production -spring.datasource.host=192.168.99.103:3306 +spring.datasource.host=192.168.0.49:3306 spring.datasource.url=jdbc:mysql://${spring.datasource.host}/${spring.datasource.schema-name}?useUnicode=true&characterEncoding=utf8&useSSL=false spring.datasource.username=root spring.datasource.password=root \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 7a0ba348a..555b05da9 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -18,11 +18,11 @@ spring.datasource.max-idle=150 spring.datasource.max-wait=3000 spring.datasource.filters=stat,wall,log4j -spring.redis.host=127.0.0.1 +spring.redis.host=192.168.99.100 spring.redis.port=6379 spring.redis.database=1 -spring.data.mongodb.host=10.30.0.8 +spring.data.mongodb.host=192.168.99.100 spring.data.mongodb.port=27017 spring.data.mongodb.database=admin spring.data.mongodb.username=mongouser @@ -99,3 +99,5 @@ app.foreign-currency=AUD app.ofei.md5-key=Khjx6wejblaJzmG0JBWFlPFKAUxhFIXQ app.ofei.pwd=aomi@8888 app.ofei.sp-code=A1407200 + +mail.mailgun.api_key=api:key-96fa3b5866ace125b8ec5a9d27e19353 diff --git a/src/main/resources/au/com/royalpay/payment/manage/mappers/system/OrgMapper.xml b/src/main/resources/au/com/royalpay/payment/manage/mappers/system/OrgMapper.xml index b23017706..273837f19 100644 --- a/src/main/resources/au/com/royalpay/payment/manage/mappers/system/OrgMapper.xml +++ b/src/main/resources/au/com/royalpay/payment/manage/mappers/system/OrgMapper.xml @@ -70,4 +70,17 @@ + + + \ No newline at end of file diff --git a/src/test/java/au/com/royalpay/payment/manage/apps/core/impls/CustomerImpressionImplTest.java b/src/test/java/au/com/royalpay/payment/manage/apps/core/impls/CustomerImpressionImplTest.java index 3d21743bf..a20030d9a 100644 --- a/src/test/java/au/com/royalpay/payment/manage/apps/core/impls/CustomerImpressionImplTest.java +++ b/src/test/java/au/com/royalpay/payment/manage/apps/core/impls/CustomerImpressionImplTest.java @@ -57,14 +57,14 @@ public class CustomerImpressionImplTest { @Test public void excel() { try { - XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(new File("/Users/wangning/Desktop/asd.xlsx"))); + XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(new File("/Users/wangning/Desktop/11.xlsx"))); XSSFSheet sheet = workbook.getSheetAt(0); Iterator rowIterator = sheet.rowIterator(); Row row = null; Cell cell = null; while (rowIterator.hasNext()) { row = rowIterator.next(); - cell = row.getCell(3); + cell = row.getCell(0); cell.setCellType(HSSFCell.CELL_TYPE_STRING); JSONObject client = clientMapper.findClientByMoniker(cell.getStringCellValue().trim()); @@ -72,15 +72,16 @@ public class CustomerImpressionImplTest { System.out.println(); continue; } - JSONObject org = orgMapper.findOne(client.getIntValue("org_id")); + JSONObject org = orgMapper.test(client.getIntValue("client_id")); if(org==null){ continue; } - row.createCell(5).setCellValue(org.getString("name")); + row.createCell(10).setCellValue(org.getString("sum")); + row.createCell(11).setCellValue(org.getString("counts")); } - OutputStream out = new FileOutputStream("/Users/wangning/Desktop/春节活动报名结果通知(包含BD名称).xlsx"); + OutputStream out = new FileOutputStream("/Users/wangning/Desktop/22.xlsx"); workbook.write(out); workbook.close(); } catch (IOException e) { From 6ab808a45fd578109321ae8fc247bc8057b25caf Mon Sep 17 00:00:00 2001 From: wangning <164851225@qq.com> Date: Tue, 22 May 2018 10:44:25 +0800 Subject: [PATCH 2/7] update --- .../core/impls/RetailAppServiceImp.java | 4 +- .../mappers/system/ClientConfigMapper.java | 3 + .../manage/mappers/system/ClientMapper.java | 3 + .../core/impls/ClientManagerImpl.java | 12 +- .../resources/application-local.properties | 2 +- .../impls/CustomerImpressionImplTest.java | 129 ++++++++++++------ 6 files changed, 103 insertions(+), 50 deletions(-) diff --git a/src/main/java/au/com/royalpay/payment/manage/appclient/core/impls/RetailAppServiceImp.java b/src/main/java/au/com/royalpay/payment/manage/appclient/core/impls/RetailAppServiceImp.java index ee01712c7..1341272f9 100644 --- a/src/main/java/au/com/royalpay/payment/manage/appclient/core/impls/RetailAppServiceImp.java +++ b/src/main/java/au/com/royalpay/payment/manage/appclient/core/impls/RetailAppServiceImp.java @@ -255,8 +255,8 @@ public class RetailAppServiceImp implements RetailAppService { JSONObject res = new JSONObject(); res.put("url", url); res.put("qrcode", QRCodeUtils.qrcodeImageCode(url, 250, false)); -// res.put("qrcode_board", merchantInfoProvider.getQrCodeBoard(client, config,clientAccountMapper.findById(device.getString("account_id")),"APP")); - res.put("qrcode_board", merchantInfoProvider.getQrCodeBoard(client, config)); + res.put("qrcode_board", merchantInfoProvider.getQrCodeBoard(client, config,clientAccountMapper.findById(device.getString("account_id")),"APP")); +// res.put("qrcode_board", merchantInfoProvider.getQrCodeBoard(client, config)); return res; } diff --git a/src/main/java/au/com/royalpay/payment/manage/mappers/system/ClientConfigMapper.java b/src/main/java/au/com/royalpay/payment/manage/mappers/system/ClientConfigMapper.java index 0c6773bc3..f4d6bc33e 100644 --- a/src/main/java/au/com/royalpay/payment/manage/mappers/system/ClientConfigMapper.java +++ b/src/main/java/au/com/royalpay/payment/manage/mappers/system/ClientConfigMapper.java @@ -27,4 +27,7 @@ public interface ClientConfigMapper { @AutoSql(type = SqlType.SELECT) JSONObject find(@Param("client_id") int client_id); + + @AutoSql(type = SqlType.SELECT) + List getAll(); } diff --git a/src/main/java/au/com/royalpay/payment/manage/mappers/system/ClientMapper.java b/src/main/java/au/com/royalpay/payment/manage/mappers/system/ClientMapper.java index 7e5f17df0..37e3b1f03 100644 --- a/src/main/java/au/com/royalpay/payment/manage/mappers/system/ClientMapper.java +++ b/src/main/java/au/com/royalpay/payment/manage/mappers/system/ClientMapper.java @@ -74,4 +74,7 @@ public interface ClientMapper { List listSubMerchantId(); List listBySubMerchantId(@Param("sub_merchant_id") String sub_merchant_id); + + @AutoSql(type = SqlType.SELECT) + List AllClients(); } diff --git a/src/main/java/au/com/royalpay/payment/manage/merchants/core/impls/ClientManagerImpl.java b/src/main/java/au/com/royalpay/payment/manage/merchants/core/impls/ClientManagerImpl.java index dfc624bb8..6cdc7b2fc 100644 --- a/src/main/java/au/com/royalpay/payment/manage/merchants/core/impls/ClientManagerImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/merchants/core/impls/ClientManagerImpl.java @@ -1621,8 +1621,8 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid @Override public String getQrCodeBoard(JSONObject client, QRCodeConfig config,JSONObject account,String plantform) { // JSONObject org = orgMapper.findOne(client.getIntValue("org_id")); - return merchantInfoProvider.getQrCodeBoard(client, config); -// return merchantInfoProvider.getQrCodeBoard(client, config,account,plantform); +// return merchantInfoProvider.getQrCodeBoard(client, config); + return merchantInfoProvider.getQrCodeBoard(client, config,account,plantform); } @Override @@ -1646,8 +1646,8 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid qrboardConfig.put("brandw", "600"); qrboardConfig.put("brandh", "200"); String type = qrboardConfig.getString("type"); -// 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,mongoTemplate,manager,plantform); +// QRBoard board = QRBoardProvider.getQRBoard(type, qrboardConfig, client, config); board.drawBoardImage(ous); } catch (Exception e) { throw new ServerErrorException("QR board config not set for current organize", e); @@ -1667,8 +1667,8 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid JSONObject qrboardConfig = JSON.parseObject(qrBoardConfigString); String type = qrboardConfig.getString("type"); -// 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,mongoTemplate,manager,plantform); +// QRBoard board = QRBoardProvider.getQRBoard(type, qrboardConfig, client, config); board.drawBoardImage(ous); } catch (Exception e) { throw new ServerErrorException("QR board config not set for current organize", e); diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index 91173a856..c9015a1d9 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -1,6 +1,6 @@ spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.schema-name=royalpay_production -spring.datasource.host=192.168.0.49:3306 +spring.datasource.host=192.168.99.100:3306 spring.datasource.url=jdbc:mysql://${spring.datasource.host}/${spring.datasource.schema-name}?useUnicode=true&characterEncoding=utf8&useSSL=false spring.datasource.username=root spring.datasource.password=root \ No newline at end of file diff --git a/src/test/java/au/com/royalpay/payment/manage/apps/core/impls/CustomerImpressionImplTest.java b/src/test/java/au/com/royalpay/payment/manage/apps/core/impls/CustomerImpressionImplTest.java index 9de6610e1..75473b0f3 100644 --- a/src/test/java/au/com/royalpay/payment/manage/apps/core/impls/CustomerImpressionImplTest.java +++ b/src/test/java/au/com/royalpay/payment/manage/apps/core/impls/CustomerImpressionImplTest.java @@ -1,6 +1,7 @@ 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.system.ClientConfigMapper; import au.com.royalpay.payment.manage.mappers.system.ClientMapper; import au.com.royalpay.payment.manage.mappers.system.OrgMapper; 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 org.apache.commons.codec.binary.Base64; +import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.DateUtils; import org.junit.Test; import org.junit.runner.RunWith; @@ -21,8 +23,12 @@ import org.springframework.web.bind.annotation.RequestMethod; import java.io.IOException; import java.net.URISyntaxException; import java.nio.charset.Charset; +import java.util.ArrayList; import java.util.Date; +import java.util.HashMap; import java.util.HashSet; +import java.util.List; +import java.util.Map; import java.util.Set; import javax.annotation.Resource; @@ -34,7 +40,7 @@ import cn.yixblog.platform.http.HttpRequestResult; * Created by wangning on 05/01/2018. */ @SpringBootTest -@ActiveProfiles({ "local", "alipay", "wechat", "jd", "bestpay" }) +@ActiveProfiles({ "proxy", "alipay", "wechat", "jd", "bestpay" }) @RunWith(SpringRunner.class) public class CustomerImpressionImplTest { @Resource @@ -48,7 +54,8 @@ public class CustomerImpressionImplTest { private OrgMapper orgMapper; @Resource private MailGunClient mailGunClient; - + @Resource + private ClientConfigMapper clientConfigMapper; // @Test // public void redisQueue() { @@ -60,40 +67,39 @@ public class CustomerImpressionImplTest { // } // } -// @Test -// public void excel() { -// try { -// XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(new File("/Users/wangning/Desktop/asd.xlsx"))); -// XSSFSheet sheet = workbook.getSheetAt(0); -// Iterator rowIterator = sheet.rowIterator(); -// Row row = null; -// Cell cell = null; -// while (rowIterator.hasNext()) { -// row = rowIterator.next(); -// cell = row.getCell(3); -// cell.setCellType(HSSFCell.CELL_TYPE_STRING); -// -// JSONObject client = clientMapper.findClientByMoniker(cell.getStringCellValue().trim()); -// if(client==null){ -// System.out.println(); -// continue; -// } -// JSONObject org = orgMapper.findOne(client.getIntValue("org_id")); -// if(org==null){ -// continue; -// } -// -// row.createCell(5).setCellValue(org.getString("name")); -// } -// -// OutputStream out = new FileOutputStream("/Users/wangning/Desktop/春节活动报名结果通知(包含BD名称).xlsx"); -// workbook.write(out); -// workbook.close(); -// } catch (IOException e) { -// e.printStackTrace(); -// } -// } - + // @Test + // public void excel() { + // try { + // XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(new File("/Users/wangning/Desktop/asd.xlsx"))); + // XSSFSheet sheet = workbook.getSheetAt(0); + // Iterator rowIterator = sheet.rowIterator(); + // Row row = null; + // Cell cell = null; + // while (rowIterator.hasNext()) { + // row = rowIterator.next(); + // cell = row.getCell(3); + // cell.setCellType(HSSFCell.CELL_TYPE_STRING); + // + // JSONObject client = clientMapper.findClientByMoniker(cell.getStringCellValue().trim()); + // if(client==null){ + // System.out.println(); + // continue; + // } + // JSONObject org = orgMapper.findOne(client.getIntValue("org_id")); + // if(org==null){ + // continue; + // } + // + // row.createCell(5).setCellValue(org.getString("name")); + // } + // + // OutputStream out = new FileOutputStream("/Users/wangning/Desktop/春节活动报名结果通知(包含BD名称).xlsx"); + // workbook.write(out); + // workbook.close(); + // } catch (IOException e) { + // e.printStackTrace(); + // } + // } @Test public void sendSimpleMessage() throws Exception { @@ -126,7 +132,7 @@ public class CustomerImpressionImplTest { generator.addQueryString("ascending", "yes"); generator.addQueryString("v:my-custom-data", "123456789"); generator.addQueryString("limit", "12"); - System.out.println(String.valueOf(DateUtils.addDays(new Date(),1))); + System.out.println(String.valueOf(DateUtils.addDays(new Date(), 1))); HttpRequestResult res = null; try { res = generator.execute(); @@ -154,14 +160,16 @@ public class CustomerImpressionImplTest { @Test public void sendSimpleMessages() throws Exception { SendMail sendMail = new SendMail(); - sendMail.setFrom("postmaster@mail.royalpay.com.au"); - sendMail.setContent("

Hi kira

"); + sendMail.setFrom("info@mail.royalpay.com.au"); + sendMail.setContent("

Hi

"); + List list = new ArrayList<>(); + list.add("testTag"); +// sendMail.setTags(list); Set mailCCs = new HashSet<>(); mailCCs.add("asd1159111@163.com"); sendMail.setMailCcs(mailCCs); Set mailtos = new HashSet<>(); - mailtos.add("1029811920@qq.com"); - mailtos.add("164851225@qq.com"); + mailtos.add("eason.qian@royalpay.com.au"); sendMail.setMailTos(mailtos); sendMail.setTitle("Final Test"); @@ -171,4 +179,43 @@ public class CustomerImpressionImplTest { 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 clients = clientMapper.AllClients(); + List clientConfigs = clientConfigMapper.getAll(); + Map clientConfigMap = new HashMap<>(); + Map 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)); + } + + } + }); + + }); + } } \ No newline at end of file From c81e91d1b2e12072daa3b469684d77c404968c1c Mon Sep 17 00:00:00 2001 From: wangning <164851225@qq.com> Date: Wed, 23 May 2018 09:45:09 +0800 Subject: [PATCH 3/7] update --- .../payment/manage/merchants/core/impls/ClientManagerImpl.java | 2 +- .../payment/manage/notice/core/impls/NoticeManageImpl.java | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/au/com/royalpay/payment/manage/merchants/core/impls/ClientManagerImpl.java b/src/main/java/au/com/royalpay/payment/manage/merchants/core/impls/ClientManagerImpl.java index 00c29e2c3..ec73b90f2 100644 --- a/src/main/java/au/com/royalpay/payment/manage/merchants/core/impls/ClientManagerImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/merchants/core/impls/ClientManagerImpl.java @@ -706,7 +706,7 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid } else if (checkGreenChannel && client.getIntValue("open_status") == 5) { // 绿色通道通过后不发邮件 logger.info("PASS 绿色通道:" + clientMoniker); - saveClientAuditProcess(client.getIntValue("client_id"), open_status, 5, "绿色通道申请通过", manager); + saveClientAuditProcess(client.getIntValue("client_id"), open_status, 5, "合规通过", manager); } else { initAdminUserAndSendEmail(manager, clientMoniker, client); saveClientAuditProcess(client.getIntValue("client_id"), open_status, 5, "合规通过", manager); diff --git a/src/main/java/au/com/royalpay/payment/manage/notice/core/impls/NoticeManageImpl.java b/src/main/java/au/com/royalpay/payment/manage/notice/core/impls/NoticeManageImpl.java index 341611d72..84b15a597 100644 --- a/src/main/java/au/com/royalpay/payment/manage/notice/core/impls/NoticeManageImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/notice/core/impls/NoticeManageImpl.java @@ -234,4 +234,5 @@ public class NoticeManageImpl implements NoticeManage { noticeManageMapper.updateNotice(notice); } + } From de98a7c279500c9bd171e043aa953dd1f21faad7 Mon Sep 17 00:00:00 2001 From: yuan <1551130722@qq.com> Date: Wed, 23 May 2018 09:59:32 +0800 Subject: [PATCH 4/7] add --- src/main/ui/merchant_application.html | 929 ++++++++++++++++++ .../ui/static/css/merchant_application.css | 422 ++++++++ src/main/ui/static/images/step/gou.png | Bin 0 -> 2689 bytes src/main/ui/static/images/step/num1_1.png | Bin 0 -> 2413 bytes src/main/ui/static/images/step/num1_2.png | Bin 0 -> 2845 bytes src/main/ui/static/images/step/num1_3.png | Bin 0 -> 3172 bytes src/main/ui/static/images/step/num1_4.png | Bin 0 -> 2607 bytes src/main/ui/static/images/step/num1_5.png | Bin 0 -> 2946 bytes src/main/ui/static/images/step/send_code.png | Bin 0 -> 3582 bytes .../merchant_application.js | 204 ++++ 10 files changed, 1555 insertions(+) create mode 100644 src/main/ui/merchant_application.html create mode 100644 src/main/ui/static/css/merchant_application.css create mode 100644 src/main/ui/static/images/step/gou.png create mode 100644 src/main/ui/static/images/step/num1_1.png create mode 100644 src/main/ui/static/images/step/num1_2.png create mode 100644 src/main/ui/static/images/step/num1_3.png create mode 100644 src/main/ui/static/images/step/num1_4.png create mode 100644 src/main/ui/static/images/step/num1_5.png create mode 100644 src/main/ui/static/images/step/send_code.png create mode 100644 src/main/ui/static/merchantapplication/merchant_application.js diff --git a/src/main/ui/merchant_application.html b/src/main/ui/merchant_application.html new file mode 100644 index 000000000..2006536b9 --- /dev/null +++ b/src/main/ui/merchant_application.html @@ -0,0 +1,929 @@ + + + + + + + RoyalPay | Merchant Application + + + + + + + + + + + + + + + + Partner Register + + + + + + + + + + + + +
+
+
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+ + + + + +
+
+
+ +
+ +
+
+
+
+ + Account Information +
+
+ + Company Information +
+
+ + Bank Account +
+
+ + Submit Materials +
+
+ + Success +
+
+
+
+ +
+
+ + + +
+
+ + Required Field +
+ +
+ + Required Field +
+ +
+ + Required Field +
+ +
+ + Required Field +
+
+
+ + +
+

Required Field

+
+
+
+ +
+ + Required Field +
+ +
+
+ +
+

{{resError}}

+
+
+
+
+
+
+ + + +
+
+ + Required Field +
+
+ + + +
+
+ + Required Field +
+ +
+ + Required Field +
+
+ + Required Field +
+
+ + Required Field +
+
+ + Required Field +
+ +
+
+ +
+

{{resError}}

+
+
+
+
+
+
+ + Required Field +
+ +
+ + Required Field +
+ +
+ + Required Field +
+ +
+ + Required Field +
+
+ + Required Field +
+
+ + Required Field +
+
+ + Required Field +
+
+ + Required Field +
+
+ + Required Field +
+
+ + Required Field +
+ +
+
+ +
+

{{resError}}

+
+
+
+
+
+
+ +
{{rateConfig}}
+ Required Field +
+ +
+
+ +
%
+
+ Required Field +
+ +
+
+ +
%
+
+ Required Field +
+ +
+
+ +
%
+
+ Required Field +
+
+
+ +
%
+
+ Required Field +
+
+
+ +
%
+
+ Required Field +
+
+
+ +
+
+
+
+ +
+

{{resError}}

+
+
+
+
+ +
+
+
+ +
+
+
恭喜注册成功
+
欢迎使用RoyalPay收单服务
+
+
+
+
+
注意事项:
+

1、需要完成 合规材料的提交,具体请查看appxx菜单xx功能;

+

2、在完成合规认证之前,不会对交易进行清算;

+

3、账户名和密码以及相关信息已发送至账户邮箱,请妥善保护自己的密码,及时进行修改。

+
+
+
+ +
+

{{resError}}

+
+
+
+
+
+
+
+ + + +
+ +
+
+ + +
+
+ + \ No newline at end of file diff --git a/src/main/ui/static/css/merchant_application.css b/src/main/ui/static/css/merchant_application.css new file mode 100644 index 000000000..49d16a26c --- /dev/null +++ b/src/main/ui/static/css/merchant_application.css @@ -0,0 +1,422 @@ +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:nth-child(1):before{ + background: #1ea4ec; +} +body .dis_before:nth-child(2):before{ + background: #1ea4ec; +} +body .dis_before:nth-child(3):before{ + background: #1ea4ec; +} +body .dis_before:nth-child(4):before{ + background: #1ea4ec; +} +body .dis_before:nth-child(5):before { + background: #1ea4ec; + } +/*.progress_inner__step:before{ + background: #1ea4ec; +} +.step_submit_color{ + color: white; + +}*/ + + diff --git a/src/main/ui/static/images/step/gou.png b/src/main/ui/static/images/step/gou.png new file mode 100644 index 0000000000000000000000000000000000000000..f4a81919afecf302160917ec3afb445862dea74a GIT binary patch literal 2689 zcmV-{3V!v8P){oH=ECY0Yyk@4 z8jS0vK;aw!tAe9XpdH;}tKN@+Yd8*s699DoyzAoG_g4T92pFgeWU}1MLR^9QeK6X) zG5PE=&$1eT?!}~!DZd72K!k3YhMK&VnFRosc-(#;9Pb7upPlzvRszr+e|`;2PwF)9 zc{?(#JTqTnYx^`f++B4vbv>ZueXIhYNy5i0O(#!-h%m{32%JX3(0`+6HaaM z6KVxOj`7Uz+93RzMF7t5&^fK!N2mpW(5ruXXRAk_^%m>;dpL90Iu3@vTr93;=KP%K>d_NT>t=DgKY& zJ`&M>xo+@RGqbP+mH7qQ0qCCJ3en$r@%6#Wgp=T~cdGA>%R6ZWAQYcIdS_3+RKht7 zMtg5`-&q>~UVPostlzH+2($p;#jjrc$P7WNB`6I*=AMW`s72s?x4p^e+8poj#O%#4ZwIJ7IIp-AycJ+Z7svhzo`U>HUi)sKX>s_ zbqF^DFrIw$%eWnefbcRn>|JkaK`H<7sa}t26?aH1VwiKz1X|-w?p_IFmj6=|5 z@#E3JdI3<_yJi}KHi$1En1_R{2f(ByXp8vv0HCmWac;7zwghbwKL&ugB}qx1chW+| zG!MNh2-+q-GyV%ky&cidwFiRorZ>|KLEFT)E)FoCmH@1r^HvuGZ4}>10P29Ct>PyH zg6zozVrn>Ov-lwZ%giCxeGaY~g0_pl_BmM2v&XkL1o~AaK5n8+RSwHs zrW*n;{_@q0ZWXtBRj@7yy!fkjJ7HCDy}_VO!%A5Qy!flV8w~=|4var<61Yj&O6wM;nH^Jm0A!ACZS+MgRJ zF9fO`+ZOS|Dd1`n=}3M6H`2rChM-O21Ni!7*y~1LjOg}oXL1AUf}myMi~RsA32#DT9lOW9^oo|V8lGo8}O8F%3KNSGkVds;3oA&4B6+)hD|PejMjt=|5GIfIR={Bhvflp0Y2eCG;C%sylf$T)NICMqU-ktz#k`<)teUl zJ?pICLKeVJ3oTGqp$e*wpHd(w>3MDcqNbohZAJ3#f5;33rM0B%50r8HH& zSgYCBHVa6ry^j{E>Z(+(GV!(g0Dg+7BxbHca-L7ygWzyitj(AK z*Vhifa#;9&M8pS8o-)pazpTsLC&6L`01Im%W(z+)9TDNENgzn!2`47KdsWL|6##J% z035jNBZ$;2*ut5O!q5BKN&uqticIEUJ|K|Da9ztm(yDKhC?~_Wpi4Y-F6(seRO@U# z0IOEv+W??}ZBt0OJPULMOvU(KyJM#+z9{Dm0P#ji%P>VBggyZ;@-(_^St&U2H5k{} z+P<#xV@=t*W?kX{1X_G5<04 v!_;vpKcX8Di-g$#I`=NW*;#M?{O|t*H6u>jbVF#)00000NkvXXu0mjfe5x2^ literal 0 HcmV?d00001 diff --git a/src/main/ui/static/images/step/num1_1.png b/src/main/ui/static/images/step/num1_1.png new file mode 100644 index 0000000000000000000000000000000000000000..e4a8e24962f35e91794d5bdf9cad4ecfa19443ff GIT binary patch literal 2413 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 literal 0 HcmV?d00001 diff --git a/src/main/ui/static/images/step/num1_2.png b/src/main/ui/static/images/step/num1_2.png new file mode 100644 index 0000000000000000000000000000000000000000..c009a6baa8b20515cf59fbf8bc8038b5003d9540 GIT binary patch literal 2845 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 KMNUMnLSTYQqS^HT literal 0 HcmV?d00001 diff --git a/src/main/ui/static/images/step/num1_4.png b/src/main/ui/static/images/step/num1_4.png new file mode 100644 index 0000000000000000000000000000000000000000..e1b9e40285e180860fd34c74c9879191b1751223 GIT binary patch literal 2607 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 RvuFSS002ovPDHLkV1if=oPhuU literal 0 HcmV?d00001 diff --git a/src/main/ui/static/images/step/num1_5.png b/src/main/ui/static/images/step/num1_5.png new file mode 100644 index 0000000000000000000000000000000000000000..63524502e12b640e0e50423cd3b91bffa7434765 GIT binary patch literal 2946 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 P&;c~nv{lPg&_VwPVp`v8 literal 0 HcmV?d00001 diff --git a/src/main/ui/static/merchantapplication/merchant_application.js b/src/main/ui/static/merchantapplication/merchant_application.js new file mode 100644 index 000000000..3dc2f44da --- /dev/null +++ b/src/main/ui/static/merchantapplication/merchant_application.js @@ -0,0 +1,204 @@ +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 + } + ]; + + function getQueryString(name) { + var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); + var r = window.location.search.substr(1).match(reg); + if (r != null)return unescape(r[2]); + return null; + } + + var from = getQueryString("from"); + + $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.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.goToLogin = function () { + $scope.seconds = $scope.seconds -1; + if ($scope.seconds == 0) { + location.href = '/login.html'; + } + }; + + $scope.partner = {}; + + if (from != null && from.toString().length == 1) { + $scope.partner.source = from; + } + $scope.validateForm = function (form,index) { + /* if (form.$invalid) { + angular.forEach(form, function (item, key) { + if (key.indexOf('$') < 0) { + item.$dirty = true; + } + }); + return; + }*/ + $scope.changeChoose(index); + + }; + + + $scope.getTestCode = function(){ + var second=59; + var timerHandler; + timerHandler =$interval(function(){ + if(second<=0){ + $interval.cancel(timerHandler); //当执行的时间59s,结束时,取消定时器 ,cancle方法取消 + second=59; + $scope.description="获取验证码"; + $scope.canClick=false; //因为 ng-disabled属于布尔值,设置按钮可以点击,可点击发送 + }else{ + $scope.description=second+"s后重发"; + second--; + $scope.canClick=true; + } + },1000) //每一秒执行一次$interval定时器方法 + }; + + $scope.sendVerificationCode = function () { + $scope.getTestCode(); + }; + + $scope.save = function (from,index) { + $scope.validateForm(from,index); + /* var timer = $interval(function(){ + $scope.goToLogin(); + },1000);*/ + } + + + + /* $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); + }); + };*/ +}]); \ No newline at end of file From 2733a1ea76c9e5560c3b43b1347288bfa696af23 Mon Sep 17 00:00:00 2001 From: "eason.qian" Date: Wed, 23 May 2018 18:44:12 +0800 Subject: [PATCH 5/7] fix --- .../core/SimpleClientApplyService.java | 1 + .../impls/SimpleClientApplyServiceImpl.java | 19 ++++++++++++++----- .../web/SimpleClientApplyController.java | 9 +++++++++ 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/main/java/au/com/royalpay/payment/manage/application/core/SimpleClientApplyService.java b/src/main/java/au/com/royalpay/payment/manage/application/core/SimpleClientApplyService.java index 762a81c00..180040505 100644 --- a/src/main/java/au/com/royalpay/payment/manage/application/core/SimpleClientApplyService.java +++ b/src/main/java/au/com/royalpay/payment/manage/application/core/SimpleClientApplyService.java @@ -22,4 +22,5 @@ public interface SimpleClientApplyService { void deleteVerifyMailKey(String codeKey); + void checkAccountName(String acocunt_name); } diff --git a/src/main/java/au/com/royalpay/payment/manage/application/core/impls/SimpleClientApplyServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/application/core/impls/SimpleClientApplyServiceImpl.java index 52f322a93..67c7969ce 100644 --- a/src/main/java/au/com/royalpay/payment/manage/application/core/impls/SimpleClientApplyServiceImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/application/core/impls/SimpleClientApplyServiceImpl.java @@ -1,18 +1,18 @@ package au.com.royalpay.payment.manage.application.core.impls; import au.com.royalpay.payment.manage.application.core.SimpleClientApplyService; +import au.com.royalpay.payment.manage.mappers.system.ClientAccountMapper; import au.com.royalpay.payment.manage.merchants.beans.NewAccountBean; import au.com.royalpay.payment.manage.merchants.core.ClientManager; import au.com.royalpay.payment.manage.system.core.MailGunService; import au.com.royalpay.payment.tools.env.PlatformEnvironment; import au.com.royalpay.payment.tools.env.SysConfigManager; 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.mail.SendMail; import au.com.royalpay.payment.tools.utils.sms.SmsSingleSender; - import com.alibaba.fastjson.JSONObject; - import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Value; @@ -21,15 +21,14 @@ import org.springframework.util.Assert; import org.thymeleaf.context.Context; import org.thymeleaf.spring4.SpringTemplateEngine; +import javax.annotation.PostConstruct; +import javax.annotation.Resource; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.concurrent.TimeUnit; -import javax.annotation.PostConstruct; -import javax.annotation.Resource; - public class SimpleClientApplyServiceImpl implements SimpleClientApplyService { @Value("${royalpay.sms.appid}") @@ -44,6 +43,8 @@ public class SimpleClientApplyServiceImpl implements SimpleClientApplyService { private SpringTemplateEngine thymeleaf; @Resource private ClientManager clientManager; + @Resource + private ClientAccountMapper clientAccountMapper; @Resource private StringRedisTemplate stringRedisTemplate; @@ -167,6 +168,14 @@ public class SimpleClientApplyServiceImpl implements SimpleClientApplyService { stringRedisTemplate.delete(getVerifyMailRedisKey(codeKey)); } + @Override + public void checkAccountName(String account_name) { + JSONObject account = clientAccountMapper.findByUsernameForDuplicate(account_name); + if (!account.isEmpty()){ + throw new ForbiddenException("用户名已被注册"); + } + } + private String getRegisterClientRedisKey(String phoneNumber){ return REGISTER_CLIENT_PREFIX +phoneNumber; } diff --git a/src/main/java/au/com/royalpay/payment/manage/application/web/SimpleClientApplyController.java b/src/main/java/au/com/royalpay/payment/manage/application/web/SimpleClientApplyController.java index 2d666d8ce..c553591ea 100644 --- a/src/main/java/au/com/royalpay/payment/manage/application/web/SimpleClientApplyController.java +++ b/src/main/java/au/com/royalpay/payment/manage/application/web/SimpleClientApplyController.java @@ -29,6 +29,15 @@ public class SimpleClientApplyController { private SimpleClientApplyService simpleClientApplyService; @Resource private SignInAccountService signInAccountService; + + @RequestMapping(value = "/account/{account_name}", method = RequestMethod.GET) + @ResponseBody + public void checkAccountName(@PathVariable String account_name, Errors errors){ + HttpUtils.handleValidErrors(errors); + simpleClientApplyService.checkAccountName(account_name); + } + + @RequestMapping(value = "/account/{codeKey}", method = RequestMethod.POST) @ResponseBody public void registerAccount(@PathVariable String codeKey, @RequestBody @Valid NewAccountBean accountBean, Errors errors, HttpServletResponse response) From 9889521acd1b50b22f453de5a89260b9e5e8ed7f Mon Sep 17 00:00:00 2001 From: yuan <1551130722@qq.com> Date: Thu, 24 May 2018 16:44:24 +0800 Subject: [PATCH 6/7] fix~ --- .../application/beans/ClientPreApplyBean.java | 191 ++++++++++++++++++ .../core/SimpleClientApplyService.java | 5 + .../impls/SimpleClientApplyServiceImpl.java | 186 ++++++++++++++++- .../web/SimpleClientApplyController.java | 23 ++- .../preapply/SysClientPreMapperMapper.java | 23 +++ src/main/ui/merchant_application.html | 167 ++++++--------- .../ui/static/css/merchant_application.css | 8 + .../merchant_application.js | 156 +++++++++----- 8 files changed, 588 insertions(+), 171 deletions(-) create mode 100644 src/main/java/au/com/royalpay/payment/manage/application/beans/ClientPreApplyBean.java create mode 100644 src/main/java/au/com/royalpay/payment/manage/mappers/preapply/SysClientPreMapperMapper.java diff --git a/src/main/java/au/com/royalpay/payment/manage/application/beans/ClientPreApplyBean.java b/src/main/java/au/com/royalpay/payment/manage/application/beans/ClientPreApplyBean.java new file mode 100644 index 000000000..6520aa333 --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/application/beans/ClientPreApplyBean.java @@ -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; + } +} diff --git a/src/main/java/au/com/royalpay/payment/manage/application/core/SimpleClientApplyService.java b/src/main/java/au/com/royalpay/payment/manage/application/core/SimpleClientApplyService.java index 180040505..4a5582db9 100644 --- a/src/main/java/au/com/royalpay/payment/manage/application/core/SimpleClientApplyService.java +++ b/src/main/java/au/com/royalpay/payment/manage/application/core/SimpleClientApplyService.java @@ -1,5 +1,6 @@ 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 com.alibaba.fastjson.JSONObject; @@ -22,5 +23,9 @@ public interface SimpleClientApplyService { void deleteVerifyMailKey(String codeKey); + void updateApplyInfo(ClientPreApplyBean companyBean,String client_moniker); + + JSONObject getBankInfo(String bsb_no); + void checkAccountName(String acocunt_name); } diff --git a/src/main/java/au/com/royalpay/payment/manage/application/core/impls/SimpleClientApplyServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/application/core/impls/SimpleClientApplyServiceImpl.java index 67c7969ce..4a566fc52 100644 --- a/src/main/java/au/com/royalpay/payment/manage/application/core/impls/SimpleClientApplyServiceImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/application/core/impls/SimpleClientApplyServiceImpl.java @@ -1,7 +1,9 @@ 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.mappers.system.ClientAccountMapper; +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.core.ClientManager; import au.com.royalpay.payment.manage.system.core.MailGunService; @@ -11,13 +13,21 @@ 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.mail.SendMail; -import au.com.royalpay.payment.tools.utils.sms.SmsSingleSender; + +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 org.apache.commons.lang3.RandomStringUtils; 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.data.redis.core.StringRedisTemplate; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.util.Assert; +import org.springframework.web.bind.annotation.RequestMethod; import org.thymeleaf.context.Context; import org.thymeleaf.spring4.SpringTemplateEngine; @@ -27,10 +37,16 @@ import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; +import java.io.IOException; +import java.net.URISyntaxException; +import java.util.*; import java.util.concurrent.TimeUnit; + +@Service public class SimpleClientApplyServiceImpl implements SimpleClientApplyService { + @Value("${royalpay.sms.appid}") private int appId; @Value("${royalpay.sms.appkey}") @@ -46,6 +62,22 @@ public class SimpleClientApplyServiceImpl implements SimpleClientApplyService { @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 private StringRedisTemplate stringRedisTemplate; private final SmsSingleSender smsSingleSender = new SmsSingleSender(appId, appKey); @@ -171,11 +203,159 @@ public class SimpleClientApplyServiceImpl implements SimpleClientApplyService { @Override public void checkAccountName(String account_name) { JSONObject account = clientAccountMapper.findByUsernameForDuplicate(account_name); - if (!account.isEmpty()){ + 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 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; + } private String getRegisterClientRedisKey(String phoneNumber){ return REGISTER_CLIENT_PREFIX +phoneNumber; } diff --git a/src/main/java/au/com/royalpay/payment/manage/application/web/SimpleClientApplyController.java b/src/main/java/au/com/royalpay/payment/manage/application/web/SimpleClientApplyController.java index c553591ea..02fabda40 100644 --- a/src/main/java/au/com/royalpay/payment/manage/application/web/SimpleClientApplyController.java +++ b/src/main/java/au/com/royalpay/payment/manage/application/web/SimpleClientApplyController.java @@ -1,5 +1,6 @@ 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.merchants.beans.NewAccountBean; import au.com.royalpay.payment.manage.signin.beans.LoginInfo; @@ -9,20 +10,15 @@ import au.com.royalpay.payment.tools.http.HttpUtils; import com.alibaba.fastjson.JSONObject; -import org.springframework.stereotype.Controller; import org.springframework.validation.Errors; -import org.springframework.web.bind.annotation.PathVariable; -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.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; -@Controller +@RestController @RequestMapping("/register") public class SimpleClientApplyController { @Resource @@ -32,8 +28,7 @@ public class SimpleClientApplyController { @RequestMapping(value = "/account/{account_name}", method = RequestMethod.GET) @ResponseBody - public void checkAccountName(@PathVariable String account_name, Errors errors){ - HttpUtils.handleValidErrors(errors); + public void checkAccountName(@PathVariable String account_name){ simpleClientApplyService.checkAccountName(account_name); } @@ -70,4 +65,14 @@ public class SimpleClientApplyController { signInAccountService.accountCheck(loginInfo); 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); + } } diff --git a/src/main/java/au/com/royalpay/payment/manage/mappers/preapply/SysClientPreMapperMapper.java b/src/main/java/au/com/royalpay/payment/manage/mappers/preapply/SysClientPreMapperMapper.java new file mode 100644 index 000000000..8a268e2cd --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/mappers/preapply/SysClientPreMapperMapper.java @@ -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); +} diff --git a/src/main/ui/merchant_application.html b/src/main/ui/merchant_application.html index 2006536b9..44fc174a7 100644 --- a/src/main/ui/merchant_application.html +++ b/src/main/ui/merchant_application.html @@ -175,26 +175,26 @@
-
+
-
+
-
+
-
+
-
+
- - - - - + + + + +
@@ -241,19 +241,17 @@
- - - + ng-class="{'has-error':accountForm.username.$invalid && accountForm.username.$dirty}"> + +
+

用户名已存在

+
- Required Field + required maxlength="50" name="contact_person" ng-focus="checkUserName(partner.username)">
- Required Field
- Required Field -
+ minlength="6" maxlength="12" name="password"> +
+

6~12个字符,区分大小写

+
- Required Field
- - -
-

Required Field

+
+ +61 + +
+
@@ -301,14 +295,12 @@ ng-class="{'has-error':accountForm.code.$invalid && accountForm.code.$dirty}"> - Required Field

- -

- Required Field
- - +
+
+
- Required Field
- Required Field
@@ -364,15 +349,11 @@ ng-options="state.value as state.label for state in states"> - Required Field
- Required Field
@@ -382,14 +363,12 @@ ng-options="industry.value as industry.label for industry in industries"> - Required Field

- - Required Field
- - Required Field
-
- - Required Field +
+
+ + +
- Required Field
- Required Field
- Required Field
+ ng-class="{'has-error':bankForm.system.$invalid && bankForm.bank_system.$dirty}"> - Required Field
+ ng-class="{'has-error':bankForm.postcode.$invalid && bankForm.bank_postcode.$dirty}"> - Required Field
+ ng-class="{'has-error':bankForm.state.$invalid && bankForm.bank_state.$dirty}"> - Required Field
- Required Field

-
{{rateConfig}}
- Required Field
%
- Required Field
%
- Required Field
%
- Required Field
@@ -548,9 +500,6 @@ min="0.6" max="2.2" step="0.1" id="bestpay_rate_value_input" required>
%
- Required Field
@@ -560,19 +509,16 @@ min="0.6" max="2.2" step="0.1" id="jd_rate_value_input" required>
%
- Required Field
- +

-
diff --git a/src/main/ui/static/css/merchant_application.css b/src/main/ui/static/css/merchant_application.css index 49d16a26c..b533aebb1 100644 --- a/src/main/ui/static/css/merchant_application.css +++ b/src/main/ui/static/css/merchant_application.css @@ -396,19 +396,27 @@ body .progress_inner input[type="radio"] { .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{ diff --git a/src/main/ui/static/merchantapplication/merchant_application.js b/src/main/ui/static/merchantapplication/merchant_application.js index 3dc2f44da..f3a6d76bd 100644 --- a/src/main/ui/static/merchantapplication/merchant_application.js +++ b/src/main/ui/static/merchantapplication/merchant_application.js @@ -94,23 +94,28 @@ angular.module('applyPartnerApp', ['ngMessages']).controller('applyPartnerCtrl', "value": 338 } ]; - - function getQueryString(name) { - var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); - var r = window.location.search.substr(1).match(reg); - if (r != null)return unescape(r[2]); - return null; - } - - var from = getQueryString("from"); - + $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) { @@ -118,60 +123,113 @@ angular.module('applyPartnerApp', ['ngMessages']).controller('applyPartnerCtrl', $scope.chooseArray[index] = true; $scope.disabledArray[index] = true; }; - - $scope.goToLogin = function () { - $scope.seconds = $scope.seconds -1; - if ($scope.seconds == 0) { - location.href = '/login.html'; - } + $scope.getRateConfig = function () { + $http.get('/sys/partners/sys_rates').then(function (resp) { + $scope.sysRateConfig = resp.data; + }, function (resp) { + }) }; - - $scope.partner = {}; - - if (from != null && from.toString().length == 1) { - $scope.partner.source = from; - } - $scope.validateForm = function (form,index) { - /* if (form.$invalid) { - angular.forEach(form, function (item, key) { - if (key.indexOf('$') < 0) { - item.$dirty = true; - } - }); - return; - }*/ - $scope.changeChoose(index); - - }; - - - $scope.getTestCode = function(){ + $scope.sendPhoneCodeTime = function(){ var second=59; var timerHandler; timerHandler =$interval(function(){ if(second<=0){ - $interval.cancel(timerHandler); //当执行的时间59s,结束时,取消定时器 ,cancle方法取消 + $interval.cancel(timerHandler); second=59; $scope.description="获取验证码"; - $scope.canClick=false; //因为 ng-disabled属于布尔值,设置按钮可以点击,可点击发送 + $scope.canClick=false; }else{ $scope.description=second+"s后重发"; second--; $scope.canClick=true; } - },1000) //每一秒执行一次$interval定时器方法 + },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; + }); }; - $scope.sendVerificationCode = function () { - $scope.getTestCode(); - }; - $scope.save = function (from,index) { - $scope.validateForm(from,index); - /* var timer = $interval(function(){ - $scope.goToLogin(); - },1000);*/ - } From 54f7f8ee9ccf120f2db409fbac84862e670009e3 Mon Sep 17 00:00:00 2001 From: yuan <1551130722@qq.com> Date: Thu, 24 May 2018 16:45:42 +0800 Subject: [PATCH 7/7] fix~ --- .../manage/appclient/core/impls/RetailAppServiceImp.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/au/com/royalpay/payment/manage/appclient/core/impls/RetailAppServiceImp.java b/src/main/java/au/com/royalpay/payment/manage/appclient/core/impls/RetailAppServiceImp.java index 00192414b..046be4ee5 100644 --- a/src/main/java/au/com/royalpay/payment/manage/appclient/core/impls/RetailAppServiceImp.java +++ b/src/main/java/au/com/royalpay/payment/manage/appclient/core/impls/RetailAppServiceImp.java @@ -255,8 +255,8 @@ public class RetailAppServiceImp implements RetailAppService { JSONObject res = new JSONObject(); res.put("url", url); res.put("qrcode", QRCodeUtils.qrcodeImageCode(url, 250, false)); - res.put("qrcode_board", merchantInfoProvider.getQrCodeBoard(client, config,clientAccountMapper.findById(device.getString("account_id")),"APP")); -// res.put("qrcode_board", merchantInfoProvider.getQrCodeBoard(client, config)); +// res.put("qrcode_board", merchantInfoProvider.getQrCodeBoard(client, config,clientAccountMapper.findById(device.getString("account_id")),"APP")); + res.put("qrcode_board", merchantInfoProvider.getQrCodeBoard(client, config)); return res; }