From 38da65cf72e13166d5be654bf188fed59c2c43d9 Mon Sep 17 00:00:00 2001 From: "james.zhao" Date: Mon, 12 Nov 2018 11:06:56 +0800 Subject: [PATCH 01/45] Yeepay init --- pom.xml | 6 +- .../impls/ChannelsAnalysisServiceImpl.java | 4 +- .../core/impls/DashboardServiceImpl.java | 2 +- .../core/impls/RetailAppServiceImp.java | 4 + .../listeners/AfterPaymentFinishListener.java | 51 ++- .../core/impls/BDPrizeServiceImpl.java | 2 +- .../manage/merchants/core/ClientManager.java | 14 + .../core/impls/ClientManagerImpl.java | 164 ++++++++ .../web/PartnerManageController.java | 25 ++ .../manage/organizations/beans/OrgInfo.java | 18 + .../core/impls/OrgManagerImpl.java | 2 +- .../attachment/web/AttachmentController.java | 12 + .../resources/application-yeepay.properties | 15 + src/main/resources/application.properties | 4 +- .../CustomerAndOrdersStatisticsMapper.xml | 6 +- .../templates/mail/gateway_email_notice.html | 32 ++ .../ui/static/analysis/channels_analysis.js | 47 ++- src/main/ui/static/analysis/clearing-log.js | 4 +- .../analysis/templates/customer_analysis.html | 2 + .../templates/manage_customers_orders.html | 6 +- .../templates/partner_customers_orders.html | 6 +- .../templates/partner_trans_analysis.html | 6 +- .../analysis/templates/trans_analysis.html | 15 +- .../templates/trans_analysis_monthly.html | 11 +- .../transaction_amount_Analysis.html | 8 +- src/main/ui/static/commons/commons.js | 4 +- .../services/yeepayBusinessContentMap.js | 41 ++ .../commons/services/yeepayIndustryMap.js | 45 +++ .../commons/templates/order_detail.html | 4 +- src/main/ui/static/config/bdprize/bdprize.js | 4 +- .../organizations/templates/new_org.html | 26 +- .../organizations/templates/org_detail.html | 18 +- src/main/ui/static/css/img/rp_logo1.png | Bin 51350 -> 60315 bytes .../static/dashboard/templates/dashboard.html | 15 +- src/main/ui/static/images/yeepay_sign.png | Bin 0 -> 1615 bytes src/main/ui/static/images/yeepay_sign_lg.png | Bin 0 -> 4128 bytes .../payment/custom/templates/custom.html | 4 +- .../payment/invoice/templates/invoice.html | 4 +- .../static/payment/partner/partner-manage.js | 378 +++++++++++++++++- src/main/ui/static/payment/partner/partner.js | 13 +- .../apply_yeepay_sub_merchant_id.html | 181 +++++++++ .../templates/client_bankaccounts.html | 10 +- .../templates/client_payment_info.html | 80 ++++ .../templates/partner_bankaccounts.html | 3 +- .../partner/templates/partner_new_rate.html | 26 +- .../partner/templates/partner_pay_logs.html | 11 +- .../templates/partner_payment_info.html | 37 ++ .../templates/sub_merchant_id_apply.html | 63 ++- .../tradelog/templates/balance_report.html | 8 +- .../templates/partner_settlement_dialog.html | 7 +- .../templates/partner_trade_logs.html | 9 +- .../tradelog/templates/trade_logs.html | 8 +- 52 files changed, 1389 insertions(+), 76 deletions(-) create mode 100644 src/main/resources/application-yeepay.properties create mode 100644 src/main/resources/templates/mail/gateway_email_notice.html create mode 100644 src/main/ui/static/commons/services/yeepayBusinessContentMap.js create mode 100644 src/main/ui/static/commons/services/yeepayIndustryMap.js create mode 100644 src/main/ui/static/images/yeepay_sign.png create mode 100644 src/main/ui/static/images/yeepay_sign_lg.png create mode 100644 src/main/ui/static/payment/partner/templates/apply_yeepay_sub_merchant_id.html diff --git a/pom.xml b/pom.xml index cfb6e206d..c394163c9 100644 --- a/pom.xml +++ b/pom.xml @@ -40,6 +40,10 @@ au.com.royalpay.payment rpay-core + + au.com.royalpay.payment + yeepay-core + com.github.stuxuhai jpinyin @@ -204,4 +208,4 @@ - \ No newline at end of file + diff --git a/src/main/java/au/com/royalpay/payment/manage/analysis/core/impls/ChannelsAnalysisServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/analysis/core/impls/ChannelsAnalysisServiceImpl.java index 5ad52e954..0ab5fa1ae 100644 --- a/src/main/java/au/com/royalpay/payment/manage/analysis/core/impls/ChannelsAnalysisServiceImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/analysis/core/impls/ChannelsAnalysisServiceImpl.java @@ -30,6 +30,8 @@ public class ChannelsAnalysisServiceImpl implements ChannelsAnalysisService { listChannel.add(putParam(params,"AlipayOnline")); listChannel.add(putParam(params,"jd")); listChannel.add(putParam(params,"hf")); + listChannel.add(putParam(params,"Rpay")); + listChannel.add(putParam(params,"Yeepay")); return listChannel; } @@ -40,7 +42,7 @@ public class ChannelsAnalysisServiceImpl implements ChannelsAnalysisService { } List list = new ArrayList<>(); Map analysisMap = new TreeMap<>(); - String[] channels = {"Wechat","Bestpay","Alipay","jd","AlipayOnline","hf", "Rpay"}; + String[] channels = {"Wechat","Bestpay","Alipay","jd","AlipayOnline","hf", "Rpay","Yeepay"}; for (String channel:channels){ analysisChannelCustomers(params, analysisMap, channel); } diff --git a/src/main/java/au/com/royalpay/payment/manage/analysis/core/impls/DashboardServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/analysis/core/impls/DashboardServiceImpl.java index c63347edc..9ef8e1afb 100644 --- a/src/main/java/au/com/royalpay/payment/manage/analysis/core/impls/DashboardServiceImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/analysis/core/impls/DashboardServiceImpl.java @@ -556,7 +556,7 @@ public class DashboardServiceImpl implements DashboardService,DashboardAnalysisT } } private JSONObject getTodayChannelCount(JSONObject params){ - String[] channels = new String[]{"Bestpay","Wechat","Alipay","jd","AlipayOnline","hf", "Rpay"}; + String[] channels = new String[]{"Bestpay","Wechat","Alipay","jd","AlipayOnline","hf", "Rpay","Yeepay"}; JSONObject resp = new JSONObject(); for(String channel:channels) { params.put("channel", channel); 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 f682cf30a..4c69e53fc 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 @@ -1378,6 +1378,10 @@ public class RetailAppServiceImp implements RetailAppService { if (Hf.containsKey("channel")) { channels.add(Hf); } + JSONObject Yeepay = getChannel(clientId, now, "Yeepay"); + if (Yeepay.containsKey("channel")) { + channels.add(Yeepay); + } res.put("channels", channels); return res; } diff --git a/src/main/java/au/com/royalpay/payment/manage/apps/events/listeners/AfterPaymentFinishListener.java b/src/main/java/au/com/royalpay/payment/manage/apps/events/listeners/AfterPaymentFinishListener.java index 5aecb73bf..0ac43fd05 100644 --- a/src/main/java/au/com/royalpay/payment/manage/apps/events/listeners/AfterPaymentFinishListener.java +++ b/src/main/java/au/com/royalpay/payment/manage/apps/events/listeners/AfterPaymentFinishListener.java @@ -28,29 +28,36 @@ public class AfterPaymentFinishListener implements ApplicationListener listRpaySubMerchantIdApplys(JSONObject manager, String clientMoniker); + List listYeepaySubMerchantIdApplys(JSONObject manager, String clientMoniker); + String subMerchantApplication(String clientMoniker, SubMerchantIdApply subMerchantApply,JSONObject manager); List listMerchantIds(String clientMoniker,JSONObject manager); @@ -332,13 +337,22 @@ public interface ClientManager { String getShortLink(String client_moniker); + String getGatewayShortLink(String client_moniker,String channel); + @Transactional void switchHfLink(JSONObject manager, String clientMoniker,boolean allow); + @Transactional + void switchGatewayLink(JSONObject manager, String clientMoniker,String channel,boolean allow); + void sendHfEmailNotice(JSONObject order); + void sendGatewayEmailNotice(JSONObject order); + void subRpayMerchantApplication(String clientMoniker,JSONObject merchantInfo, JSONObject manager); + void subYeepayMerchantApplication(String clientMoniker,JSONObject merchantInfo, JSONObject manager); + void updateAllPartnerPassword(String clientMoniker, List emails); void postponeClientRate(Date now, Date yearTomorrow, String expireDate, JSONObject client); 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 40042d8cc..093767660 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 @@ -7,6 +7,8 @@ import au.com.royalpay.payment.channels.wechat.config.WechatPayEnvironment; import au.com.royalpay.payment.channels.wechat.runtime.MpPaymentApi; import au.com.royalpay.payment.channels.wechat.runtime.WxPayClient; import au.com.royalpay.payment.channels.wechat.runtime.beans.SubMerchantInfo; +import au.com.royalpay.payment.channels.yeepay.mappers.YeePayClientConfigMapper; +import au.com.royalpay.payment.channels.yeepay.runtime.YeePayClient; import au.com.royalpay.payment.core.PaymentChannelApi; import au.com.royalpay.payment.core.exceptions.EmailException; import au.com.royalpay.payment.core.exceptions.InvalidShortIdException; @@ -120,6 +122,7 @@ import com.github.miemiedev.mybatis.paginator.domain.Order; import com.github.miemiedev.mybatis.paginator.domain.PageBounds; import com.github.miemiedev.mybatis.paginator.domain.PageList; +import com.yeepay.yop.sdk.service.kj.model.SubmerchantRegisterResult; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.RandomStringUtils; @@ -243,6 +246,12 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid @Resource private RpayApi rpayApi; + @Resource + private YeePayClient yeePayClient; + + @Resource + private YeePayClientConfigMapper yeePayClientConfigMapper; + @Resource private ManagerMapper managerMapper; @Resource @@ -432,6 +441,10 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid String hfQrcodeUrl = PlatformEnvironment.getEnv().concatUrl("/api/v1.0/hf_gateway/partners/" + client.getString("client_moniker") + "/jump/app"); client.put("hfQrcodeUrl", QRCodeUtils.qrcodeImageCode(hfQrcodeUrl, 250, true)); } + if (client.getString("yeepay_pay_url") != null) { + String yeepayQrcodeUrl = PlatformEnvironment.getEnv().concatUrl("/api/v1.0/yeepay/partners/" + client.getString("client_moniker") + "/jump/app"); + client.put("yeepayQrcodeUrl", QRCodeUtils.qrcodeImageCode(yeepayQrcodeUrl, 250, true)); + } return client; } @@ -795,6 +808,25 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid clientInfoCacheSupport.clearClientCache(clientId); } + @Transactional + @Override + public void updateClientYeepayPaymentConfig(JSONObject manager, String clientMoniker, JSONObject yeepaySubMerchantInfo) { + JSONObject client = getClientInfoByMoniker(clientMoniker); + if (client == null) { + throw new InvalidShortIdException(); + } + checkOrgPermission(manager, client); + if(client.getString("yeepay_sub_merchant_id").equals(yeepaySubMerchantInfo.getString("yeepay_sub_merchant_id"))){ + throw new BadRequestException("The sub merchant Id is in use"); + } + JSONObject yeepayConfigValid =yeePayClientConfigMapper.findMerchantConfig(client.getIntValue("client_id")); + yeePayClientConfigMapper.updateSubMerchantIdValid(yeepayConfigValid.getString("yeepay_config_id"),0); + JSONObject yeepayConfig = yeePayClientConfigMapper.findMerchantConfigBySub(yeepaySubMerchantInfo.getString("yeepay_sub_merchant_id")); + yeePayClientConfigMapper.updateSubMerchantIdValid(yeepayConfig.getString("yeepay_config_id"),1); + client.put("yeepay_sub_merchant_id",yeepaySubMerchantInfo.getString("yeepay_sub_merchant_id")); + clientMapper.update(client); + } + @Override public void updateAliSubMerchantId(JSONObject manager, String clientMoniker, JSONObject aliSubMerchantInfo) { JSONObject client = getClientInfoByMoniker(clientMoniker); @@ -1220,6 +1252,9 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid if (channel.equals("hf") && !allow && client.getBoolean("enable_hf_email_notice")) { clientModifySupport.processClientConfigModify(new SwitchPermissionModify(manager, clientMoniker, "enable_hf_email_notice", allow)); } + if (channel.equals("yeepay") && !allow && client.getBoolean("enable_yeepay_email_notice")) { + clientModifySupport.processClientConfigModify(new SwitchPermissionModify(manager, clientMoniker, "enable_yeepay_email_notice", allow)); + } clientModifySupport.processClientConfigModify(new SwitchPermissionModify(manager, clientMoniker, "enable_" + channel.toLowerCase(), allow)); logger.info(manager.getString("display_name") + "(" + manager.getString("manager_id") + ") switched client " + clientMoniker + " channel " @@ -1591,6 +1626,7 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid checkAddRate(config, "jd", "jd_rate_value", org, "min_jd_rate"); checkAddRate(config, "hf", "hf_rate_value", org, "min_hf_rate"); checkAddRate(config, "Rpay", "Rpay_rate_value", org, "min_Rpay_rate"); + checkAddRate(config, "Yeepay", "yeepay_rate_value", org, "min_yeepay_rate"); configNewClientRate(config, clientId, "Wechat", "wechat_rate_value", org, "min_wechat_rate"); configNewClientRate(config, clientId, "Alipay", "alipay_rate_value", org, "min_alipay_rate"); @@ -1599,6 +1635,7 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid configNewClientRate(config, clientId, "jd", "jd_rate_value", org, "min_jd_rate"); configNewClientRate(config, clientId, "hf", "hf_rate_value", org, "min_hf_rate"); configNewClientRate(config, clientId, "Rpay", "Rpay_rate_value", org, "min_Rpay_rate"); + configNewClientRate(config, clientId, "Yeepay", "yeepay_rate_value", org, "min_yeepay_rate"); //todo 暂不更新Rpay+ 费率信息 rpayApi.modifySurchargeConfig(client); @@ -3572,6 +3609,20 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid return null; } + @Override + public List listYeepaySubMerchantIdApplys(JSONObject manager, String clientMoniker) { + JSONObject client = getClientInfoByMoniker(clientMoniker); + if (client == null) { + throw new InvalidShortIdException(); + } + checkOrgPermission(manager, client); + List applices = yeePayClientConfigMapper.findAllMerchantConfig(client.getInteger("client_id")); + if (!applices.isEmpty()) { + return applices; + } + return null; + } + @Override @CacheEvict(value = ":all_sub_merchant_id_applices:", key = "#clientMoniker") public String subMerchantApplication(String clientMoniker, SubMerchantIdApply subMerchantApply, JSONObject manager) { @@ -3635,6 +3686,39 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid } } + + @Override + @Transactional + public void subYeepayMerchantApplication(String clientMoniker, JSONObject merchantInfo, JSONObject manager) { + JSONObject client = getClientInfoByMoniker(clientMoniker); + if (client == null) { + throw new InvalidShortIdException(); + } + checkOrgPermission(manager, client); + List yeepayClientConfigs = yeePayClientConfigMapper.findAllMerchantConfig(client.getIntValue("client_id")); + if(yeepayClientConfigs!=null){ + for(JSONObject yeepayClientConfig:yeepayClientConfigs){ + if(yeepayClientConfig.getIntValue("is_valid")==1){ + yeePayClientConfigMapper.updateSubMerchantIdValid(yeepayClientConfig.getString("yeepay_config_id"),0); + } + } + } + merchantInfo.put("create_time",new Date()); + merchantInfo.put("operator",manager.getString("display_name")); + merchantInfo.put("client_id",client.getIntValue("client_id")); + merchantInfo.put("vouchers",merchantInfo.getJSONObject("vouchers").toJSONString()); + yeePayClientConfigMapper.saveMerchantConfig(merchantInfo); + JSONObject yeepayConfig = yeePayClientConfigMapper.findMerchantConfig(client.getIntValue("client_id")); + SubmerchantRegisterResult result = yeePayClient.registerMerchant(client,yeepayConfig); + if(result.getStatus().equals("FAILED")){ + throw new BadRequestException(result.getErrorMsg()); + } + yeepayConfig.put("sub_merchant_id",result.getSubMerchantId()); + yeePayClientConfigMapper.updateSubMerchantId(yeepayConfig.getString("yeepay_config_id"),result.getMerchantId(),result.getSubMerchantId()); + client.put("yeepay_sub_merchant_id",result.getSubMerchantId()); + clientMapper.update(client); + } + @Override public List listMerchantIds(String clientMoniker, JSONObject manager) { JSONObject client = getClientInfoByMoniker(clientMoniker); @@ -3878,6 +3962,30 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid } + @Override + public void switchGatewayLink(JSONObject manager, String clientMoniker,String channel, boolean allow) { + JSONObject client = getClientInfoByMoniker(clientMoniker); + if (client == null) { + throw new InvalidShortIdException(); + } + checkOrgPermission(manager, client); + + if (allow) { + if (StringUtils.isEmpty(client.getString(channel+"_pay_url"))) { + String channel_pay_url = getGatewayShortLink(clientMoniker,channel.toLowerCase()); + client.put(channel+"_pay_url", channel_pay_url); + JSONObject clientConfig = new JSONObject(); + clientConfig.put(channel+"_pay_url", channel_pay_url); + clientConfig.put("client_id", client.getIntValue("client_id")); + clientConfigMapper.update(clientConfig); + clientMapper.update(client); + } + } + clientModifySupport.processClientConfigModify(new SwitchPermissionModify(manager, clientMoniker, "enable_"+channel+"_link", allow)); + clientModifySupport.processClientConfigModify(new SwitchPermissionModify(manager, clientMoniker, "enable_"+channel, allow)); + + } + @Override public void sendHfEmailNotice(JSONObject order) { JSONObject client = clientMapper.findClient(order.getIntValue("client_id")); @@ -3917,6 +4025,55 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid }).start(); } + @Override + public void sendGatewayEmailNotice(JSONObject order) { + JSONObject client = clientMapper.findClient(order.getIntValue("client_id")); + JSONObject clientConfig = clientConfigMapper.find(order.getIntValue("client_id")); + if (client == null || clientConfig == null) { + return; + } + if (client.getString("contact_email") == null || + !clientConfig.getBoolean("enable_"+order.getString("channel").toLowerCase()+"_email_notice")) { + return; + } + Context ctx = new Context(); + ctx.setVariable("img_url", PlatformEnvironment.getEnv().concatUrl("/static/images/royalpay_logo.png")); + ctx.setVariable("name", client.getString("contact_person")); + ctx.setVariable("order_id", order.getString("order_id")); + ctx.setVariable("amount", order.getString("total_amount")); + ctx.setVariable("currency", order.getString("currency")); + ctx.setVariable("channel", getOrderChannel(order.getString("channel"))); + String create_time = ""; + if (client.getString("timezone") != null) { + create_time = DateFormatUtils.format(order.getDate("create_time"), + "yyyy-MM-dd HH:mm:ss", TimeZone.getTimeZone(client.getString("timezone"))); + } else { + create_time = DateFormatUtils.format(order.getDate("create_time"), "yyyy-MM-dd HH:mm:ss"); + } + ctx.setVariable("time", create_time); + final String content = thymeleaf.process( "mail/gateway_email_notice", ctx); + final String mailTo = client.getString("contact_email"); + if (StringUtils.isEmpty(mailTo)) { + throw new EmailException("Client Contact Email is invalid"); + } + new Thread(() -> { + try { + mailService.sendEmail("你刚刚有一笔到账信息", mailTo, "", content); + } catch (Exception ignored) { + logger.error("邮件发送失败", ignored); + } + }).start(); + } + + private String getOrderChannel(String channel){ + switch(channel){ + case "hf": + return "汇付"; + case "Yeepay": + return "易宝支付"; + } + return ""; + } @Override public void updateAllPartnerPassword(String clientMoniker, List emails) { JSONObject client = getClientInfoByMoniker(clientMoniker); @@ -3946,6 +4103,13 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid return api.registerShortUrl(longUrl); } + @Override + public String getGatewayShortLink(String clientMoniker, String channel) { + String longUrl = PlatformEnvironment.getEnv().concatUrl("/api/v1.0/"+channel+"/partners/" + clientMoniker + "/jump/pc"); + MpWechatApi api = mpWechatApiProvider.getNewPaymentApi(); + return api.registerShortUrl(longUrl); + } + private void isRiskyMerchant(JSONObject client, JSONObject bankAccount) { JSONObject needCheckParams = new JSONObject(); diff --git a/src/main/java/au/com/royalpay/payment/manage/merchants/web/PartnerManageController.java b/src/main/java/au/com/royalpay/payment/manage/merchants/web/PartnerManageController.java index 52d4c1681..fee7980d0 100644 --- a/src/main/java/au/com/royalpay/payment/manage/merchants/web/PartnerManageController.java +++ b/src/main/java/au/com/royalpay/payment/manage/merchants/web/PartnerManageController.java @@ -178,6 +178,11 @@ public class PartnerManageController { clientManager.updateClientRpayPaymentConfig(manager, clientMoniker, rpaySubMerchantInfo); } + @ManagerMapping(value = "/{clientMoniker}/yeepay_payment_config", method = RequestMethod.PUT, role = {ManagerRole.OPERATOR, ManagerRole.BD_USER}) + public void updatePartnerYeepayPaymentConfig(@PathVariable String clientMoniker, @RequestBody JSONObject yeepaySubMerchantInfo, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) { + clientManager.updateClientYeepayPaymentConfig(manager, clientMoniker, yeepaySubMerchantInfo); + } + @ManagerMapping(value = "/{clientMoniker}/ali_sub_merchant_id", method = RequestMethod.PUT, role = {ManagerRole.OPERATOR}) public void updateAliSubMerchantId(@PathVariable String clientMoniker, @RequestBody JSONObject aliSubMerchantInfo, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) { clientManager.updateAliSubMerchantId(manager, clientMoniker, aliSubMerchantInfo); @@ -546,6 +551,11 @@ public class PartnerManageController { return clientManager.listRpaySubMerchantIdApplys(manager, clientMoniker); } + @ManagerMapping(value = "/{clientMoniker}/list_yeepay_sub_applices", method = RequestMethod.GET, role = {ManagerRole.OPERATOR, ManagerRole.ADMIN}) + public List listYeepaySubMerchantIdApplys(@PathVariable String clientMoniker, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) { + return clientManager.listYeepaySubMerchantIdApplys(manager, clientMoniker); + } + @ManagerMapping(value = "/{clientMoniker}/sub_apply", method = RequestMethod.POST, role = {ManagerRole.OPERATOR, ManagerRole.ADMIN}) public String subMerchantApplication(@PathVariable String clientMoniker, @RequestBody SubMerchantIdApply subMerchantIdApply, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) { return clientManager.subMerchantApplication(clientMoniker,subMerchantIdApply,manager); @@ -580,11 +590,26 @@ public class PartnerManageController { clientManager.switchPermission(manager, clientMoniker, "enable_hf_email_notice", pass.getBooleanValue("allow")); } + @ManagerMapping(value = "/{clientMoniker}/{channel}", method = RequestMethod.PUT, role = {ManagerRole.ADMIN, ManagerRole.OPERATOR}) + public void switchGateWayLinkPermission(@PathVariable String clientMoniker, @PathVariable String channel,@RequestBody JSONObject pass, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) { + clientManager.switchGatewayLink(manager, clientMoniker, channel,pass.getBooleanValue("allow")); + } + + @ManagerMapping(value = "/{clientMoniker}/{channel}/email_notice", method = RequestMethod.PUT, role = {ManagerRole.OPERATOR, ManagerRole.BD_USER}) + public void switchGatewayEmailNotice(@PathVariable String clientMoniker, @PathVariable String channel,@RequestBody JSONObject pass, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) { + clientManager.switchPermission(manager, clientMoniker,"enable_"+channel+"_email_notice", pass.getBooleanValue("allow")); + } + @ManagerMapping(value = "/{clientMoniker}/registRpaySubMerchantId", method = RequestMethod.POST, role = {ManagerRole.OPERATOR, ManagerRole.ADMIN}) public void subRpayMerchantApplication(@PathVariable String clientMoniker,@RequestBody JSONObject merchantInfo,@ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) { clientManager.subRpayMerchantApplication(clientMoniker, merchantInfo,manager); } + @ManagerMapping(value = "/{clientMoniker}/registYeepaySubMerchantId", method = RequestMethod.POST, role = {ManagerRole.OPERATOR, ManagerRole.ADMIN}) + public void subYeepayMerchantApplication(@PathVariable String clientMoniker,@RequestBody JSONObject merchantInfo,@ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) { + clientManager.subYeepayMerchantApplication(clientMoniker, merchantInfo,manager); + } + @RequestMapping(value = "/compliance", method = RequestMethod.GET) @RequireManager(role = { ManagerRole.OPERATOR}) public JSONObject lisPartnersByCompliance(@ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager, PartnerQuery query) { diff --git a/src/main/java/au/com/royalpay/payment/manage/organizations/beans/OrgInfo.java b/src/main/java/au/com/royalpay/payment/manage/organizations/beans/OrgInfo.java index 47269e2c8..772911b27 100644 --- a/src/main/java/au/com/royalpay/payment/manage/organizations/beans/OrgInfo.java +++ b/src/main/java/au/com/royalpay/payment/manage/organizations/beans/OrgInfo.java @@ -29,6 +29,7 @@ public class OrgInfo { private Double alipayonline_rate_value; private Double jd_rate_value; private Double hf_rate_value; + private Double yeepay_rate_value; private int is_valid; private String search_text; private int page = 1; @@ -42,6 +43,7 @@ public class OrgInfo { private Double min_jd_rate; private Double min_alipayonline_rate; private Double min_hf_rate; + private Double min_yeepay_rate; private String state; private String senior_parent_org_id; @@ -323,4 +325,20 @@ public class OrgInfo { public void setSenior_parent_org_id(String senior_parent_org_id) { this.senior_parent_org_id = senior_parent_org_id; } + + public Double getYeepay_rate_value() { + return yeepay_rate_value; + } + + public void setYeepay_rate_value(Double yeepay_rate_value) { + this.yeepay_rate_value = yeepay_rate_value; + } + + public Double getMin_yeepay_rate() { + return min_yeepay_rate; + } + + public void setMin_yeepay_rate(Double min_yeepay_rate) { + this.min_yeepay_rate = min_yeepay_rate; + } } diff --git a/src/main/java/au/com/royalpay/payment/manage/organizations/core/impls/OrgManagerImpl.java b/src/main/java/au/com/royalpay/payment/manage/organizations/core/impls/OrgManagerImpl.java index 9e126ffd5..243bd6083 100644 --- a/src/main/java/au/com/royalpay/payment/manage/organizations/core/impls/OrgManagerImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/organizations/core/impls/OrgManagerImpl.java @@ -233,7 +233,7 @@ public class OrgManagerImpl implements OrgManager { JSONArray rate1 = new JSONArray(); JSONArray rate2 = new JSONArray(); if(orgObject.getString("commission_type").equals(json.getString("commission_type"))){ - String[] rates = new String[]{"alipay_rate_value","wechat_rate_value","bestpay_rate_value","alipayonline_rate_value","jd_rate_value"}; + String[] rates = new String[]{"alipay_rate_value","wechat_rate_value","bestpay_rate_value","alipayonline_rate_value","jd_rate_value","yeepay_rate_value"}; for (String rateName: rates ){ if(StringUtils.isEmpty(orgObject.getString(rateName))){ rate1.add(rateName); diff --git a/src/main/java/au/com/royalpay/payment/manage/support/attachment/web/AttachmentController.java b/src/main/java/au/com/royalpay/payment/manage/support/attachment/web/AttachmentController.java index bccc665f9..9382f9e1d 100644 --- a/src/main/java/au/com/royalpay/payment/manage/support/attachment/web/AttachmentController.java +++ b/src/main/java/au/com/royalpay/payment/manage/support/attachment/web/AttachmentController.java @@ -1,9 +1,11 @@ package au.com.royalpay.payment.manage.support.attachment.web; +import au.com.royalpay.payment.channels.yeepay.runtime.YeePayClient; import au.com.royalpay.payment.manage.permission.manager.RequireManager; import au.com.royalpay.payment.manage.permission.manager.RequirePartner; import au.com.royalpay.payment.tools.connections.attachment.core.AttachmentClient; import com.alibaba.fastjson.JSONObject; +import com.yeepay.yop.sdk.service.kj.model.FileUploadResult; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @@ -20,6 +22,8 @@ import java.io.IOException; public class AttachmentController { @Resource private AttachmentClient attachmentClient; + @Resource + private YeePayClient yeePayClient; @RequestMapping(value = "/files", method = RequestMethod.POST) @RequirePartner @@ -27,6 +31,14 @@ public class AttachmentController { public JSONObject uploadImage(@RequestParam MultipartFile file) throws IOException { return attachmentClient.uploadFile(file,false); } + + @RequestMapping(value = "/yeepayFiles", method = RequestMethod.POST) + @RequirePartner + @RequireManager + public FileUploadResult uploadYeepayImage(@RequestParam MultipartFile file) throws IOException { + return yeePayClient.uploadFile(file.getOriginalFilename(),"VOUCHER",file.getInputStream()); + } + @RequestMapping(value = "/riskFiles", method = RequestMethod.POST) public JSONObject uploadRiskImage(@RequestParam MultipartFile file) throws IOException { return attachmentClient.uploadFile(file,false); diff --git a/src/main/resources/application-yeepay.properties b/src/main/resources/application-yeepay.properties new file mode 100644 index 000000000..badb2632e --- /dev/null +++ b/src/main/resources/application-yeepay.properties @@ -0,0 +1,15 @@ +app.yeepay.merchant-id= +app.yeepay.app-key=cbp_120180219 +app.yeepay.aes-secret-key= +app.yeepay.public-key.store-type=string +app.yeepay.public-key.cert-type=RSA2048 +app.yeepay.public-key.value=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6p0XWjscY+gsyqKRhw9MeLsEmhFdBRhT2emOck/F1Omw38ZWhJxh9kDfs5HzFJMrVozgU+SJFDONxs8UB0wMILKRmqfLcfClG9MyCNuJkkfm0HFQv1hRGdOvZPXj3Bckuwa7FrEXBRYUhK7vJ40afumspthmse6bs6mZxNn/mALZ2X07uznOrrc2rk41Y2HftduxZw6T4EmtWuN2x4CZ8gwSyPAW5ZzZJLQ6tZDojBK4GZTAGhnn3bg5bBsBlw2+FLkCQBuDsJVsFPiGh/b6K/+zGTvWyUcu+LUj2MejYQELDO3i2vQXVDk7lVi2/TcUYefvIcssnzsfCfjaorxsuwIDAQAB +app.yeepay.public-key.password= +app.yeepay.private-key.store-type=string +app.yeepay.private-key.cert-type=RSA2048 +app.yeepay.private-key.value=MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCdaxJm3b5bvPZHvvXDfJ4NUiG7yISRYgUfiQycVKCJZ2jL+Y29Hmcnc1hPMZjVbJYPkhaIp+f92j7qf5P/qo+Ru4DyY3HhzsJAZMMWVlWeaEG+nZsyN06XC7NiUrFMLUAyqtaYRPDBKHKss54at16rQO7UoqXVqhKZyWdBgRbX0J3X0z82LEh11u8Izi/mUH42NY6ttkDsxBzXeNcT81RHrm9A/R/6AzzykFAPxGVdjjmbYnrk/WUwLDaKdf1RvDF/kWSCmbzQSX/D24UcDekd50TJHaqhjvBVFwLtiFWAO7xudEDhByfj22YOZuhuddyhJygkUI996IKtl+UFIfI1AgMBAAECggEATWTgBj0NIxNTTlDfib4SAuCXfziFnOjBNhDuZ0ngJ830oxxNiGaTNr0p9L2gs4WQfZVIiOVsVM1hU29n9zIHJhI2wnUL/4Xk0T35AFlv/NKrSCk6rUSt2etBxZx8WMSCpKaDnRd/+qeFQc2JdP8khzQEd/yDZfoY7Q0tO/JYpb++XMFYBRpLINYwH8xteTAeRGp1A5+UwvPMJelNeBlPqMqTAPruh/yLUvYg1/rJjkOUi0yOUyKhs+NJDOXdBcrSXswdJyMMITYQ9dhpWFz4/imklHDKk29+Oy5uEGB1OQvTW469Cm2b2suAyvI4oE1pAFb6dGz6uE9fwzJljM1+IQKBgQDshMwyOC3BmXOo54o92cUwYR0TJg0KHQAbJLirQxlX4ILUGxxEFsv2TdVzushYS/1K8zecz9VQnch19mo+qyxfdq/FNXe1DDXolnu2AoYVvqpeCXumjmz4v2dlBW2TTFvmUpy0QK2QImgBW1/sjI88OgiJHdyqaqR0ASMLB1mGWQKBgQCqYl82MSqUqRl2yTiW+h9lymlgXWl5qFx/J3YGMURz3Xq5qzK4swEYfHfmkofNNpTXwIbDjGGq/ipZZLmyLfS68PRnquJEwCyFX3cgXUKg8380nDPdUQxsLpvMupUuKjyNhN4twpy2A/Ti53UC7vx5J+Z/mVjE3QgaURIAEBSHPQKBgQCOI0x3za0p0KdiVSuN+gZ4CZSoglCJyF3c8heMzLk5R3I4N8an4K9YaPQjJZfrAFfLKBk+wuPmG7xxr9Gvsbzr7e657GTxR9JJ4c2c1y1vefL2qmpF8QfqAVUIr9dnExeTdgg4hzoHCbZJQnmGNf6KajHg/TI0s/v6vwgpQ5R4mQKBgDI3Kd574RPNPp7+sPn2H5jNbf8jqLldQF2NUMCEdqs7RDdCWIGM6C7CSEghOXrmsjlgGZe6YPKXU/3irMPxvWX3K+D9wRAIH1bzitV0BvYOrZfgzXxVrbaYifxtpRflBNGkriKIb81JHzxcgOTrcGd4tfs3Q61Jg2DWMdro4lP1AoGBAOJ8JLkbrODRvHp9fCy9cOiF0LD/fZBW49l6xQbx7lLtzbwa/nk672hFhzfy565j4ejywykVIOWmoMS5RqWXB07rbyF0OZrfEcLPArfXZ4iE6T9OZ2UJLK0gdUWz4oYWBRK7NQd5qEMOiUFy8YOGgT+dESVYwN2irwLikuET0S9a +app.yeepay.private-key.password= +app.yeepay.http-client.connect-timeout=30000 +app.yeepay.http-client.read-timeout=30000 +app.yeepay.http-client.max-conn-total=200 +app.yeepay.http-client.max-conn-per-route=0 diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index f1575e412..09513a4d3 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,6 +1,6 @@ server.port=5000 -spring.profiles.active=dev,alipay,bestpay,jd,wechat,rpay +spring.profiles.active=dev,alipay,bestpay,jd,wechat,rpay,yeepay env.company=RoyalPay @@ -131,4 +131,4 @@ settle.abafile.bank.ANZ.bank=ANZ settle.abafile.bank.ANZ.apca=514624 settle.abafile.bank.ANZ.bsb=013006 settle.abafile.bank.ANZ.account-no=837022519 -settle.abafile.bank.ANZ.account-name=Tunnel Show Pty Ltd \ No newline at end of file +settle.abafile.bank.ANZ.account-name=Tunnel Show Pty Ltd diff --git a/src/main/resources/au/com/royalpay/payment/manage/analysis/mappers/CustomerAndOrdersStatisticsMapper.xml b/src/main/resources/au/com/royalpay/payment/manage/analysis/mappers/CustomerAndOrdersStatisticsMapper.xml index 253dcc017..e5b705835 100644 --- a/src/main/resources/au/com/royalpay/payment/manage/analysis/mappers/CustomerAndOrdersStatisticsMapper.xml +++ b/src/main/resources/au/com/royalpay/payment/manage/analysis/mappers/CustomerAndOrdersStatisticsMapper.xml @@ -318,7 +318,9 @@ ifnull(sum(CASE WHEN s.channel = 'hf' THEN s.total ELSE 0 END),0) hfamount, ifnull(sum(CASE WHEN s.channel = 'hf' THEN s.orders ELSE 0 END),0) hf_order_count, ifnull(sum(CASE WHEN s.channel = 'Rpay' THEN s.total ELSE 0 END),0) rpayamount, - ifnull(sum(CASE WHEN s.channel = 'Rpay' THEN s.orders ELSE 0 END),0) rpay_order_count + ifnull(sum(CASE WHEN s.channel = 'Rpay' THEN s.orders ELSE 0 END),0) rpay_order_count, + ifnull(sum(CASE WHEN s.channel = 'Yeepay' THEN s.total ELSE 0 END),0) yeepayamount, + ifnull(sum(CASE WHEN s.channel = 'Yeepay' THEN s.orders ELSE 0 END),0) yeepay_order_count FROM statistics_customer_order s LEFT JOIN sys_clients c ON c.client_id = s.client_id and c.is_valid=1 ]]> @@ -564,4 +566,4 @@ - \ No newline at end of file + diff --git a/src/main/resources/templates/mail/gateway_email_notice.html b/src/main/resources/templates/mail/gateway_email_notice.html new file mode 100644 index 000000000..e2bbfbff9 --- /dev/null +++ b/src/main/resources/templates/mail/gateway_email_notice.html @@ -0,0 +1,32 @@ + + + + + + +
+
+
+ +
+
+

您好,

+

您有一笔收款信息如下:

+
+

RoyalPay到账提醒:

+
    +
  • 支付渠道:
  • +
  • 订单编号:
  • +
  • 收款金额: 
  • +
  • 到账时间:
  • +
+
+ 此致
+ RoyalPay +
+
+ +
+ + + diff --git a/src/main/ui/static/analysis/channels_analysis.js b/src/main/ui/static/analysis/channels_analysis.js index c9153a7db..2ebcd186f 100644 --- a/src/main/ui/static/analysis/channels_analysis.js +++ b/src/main/ui/static/analysis/channels_analysis.js @@ -158,7 +158,7 @@ define(['angular', 'static/commons/commons', 'static/commons/angular-ueditor', ' trigger: 'axis' }, legend: { - data: ['Alipay交易金额','AlipayOnline交易金额', 'Bestpay交易金额','Wechat交易金额',"JD Pay交易金额","HF Pay交易金额"], + data: ['Alipay交易金额','AlipayOnline交易金额', 'Bestpay交易金额','Wechat交易金额',"JD Pay交易金额","HF Pay交易金额","Yeepay交易金额"], bottom: 0, height: '15%', width: '80%', @@ -170,7 +170,7 @@ define(['angular', 'static/commons/commons', 'static/commons/angular-ueditor', ' type: 'value' } ], - color: ['#00a0e9','#00a0e9','#FF2D96','#09bb07','#DC0808',"#FFFF33"] + color: ['#00a0e9','#00a0e9','#FF2D96','#09bb07','#DC0808',"#FFFF33","#66ff00"] }, xAxis: { basic: {type: 'category', boundaryGap: false}, @@ -242,6 +242,17 @@ define(['angular', 'static/commons/commons', 'static/commons/angular-ueditor', ' yAxisIndex: 0 }, column: {key: 'hf.total'} + }, + { + basic: { + name: 'Yeepay交易金额', + type: 'line', + label: {normal: {show: true}}, + showAllSymbols: true, + showSymbol: true, + yAxisIndex: 0 + }, + column: {key: 'Yeepay.total'} } ] }; @@ -252,7 +263,7 @@ define(['angular', 'static/commons/commons', 'static/commons/angular-ueditor', ' trigger: 'axis' }, legend: { - data: ['Alipay交易订单','AlipayOnline交易订单', 'Bestpay交易订单','Wechat交易订单',"JD Pay交易订单","HF Pay交易订单"], + data: ['Alipay交易订单','AlipayOnline交易订单', 'Bestpay交易订单','Wechat交易订单',"JD Pay交易订单","HF Pay交易订单","Yeepay交易订单"], bottom: 0, height: '15%', width: '80%', @@ -264,7 +275,7 @@ define(['angular', 'static/commons/commons', 'static/commons/angular-ueditor', ' type: 'value' } ], - color: ['#00a0e9','00a0e9','#FF2D96','#09bb07','#DC0808',"#FFFF33"] + color: ['#00a0e9','00a0e9','#FF2D96','#09bb07','#DC0808',"#FFFF33","#66ff00"] }, xAxis: { basic: {type: 'category', boundaryGap: false}, @@ -336,7 +347,18 @@ define(['angular', 'static/commons/commons', 'static/commons/angular-ueditor', ' yAxisIndex: 0 }, column: {key: 'hf.orders'} - } + }, + { + basic: { + name: 'Yeepay交易订单', + type: 'line', + label: {normal: {show: true}}, + showAllSymbols: true, + showSymbol: true, + yAxisIndex: 0 + }, + column: {key: 'Yeepay.orders'} + }, ] }; var channels_single_amount_chart = { @@ -345,7 +367,7 @@ define(['angular', 'static/commons/commons', 'static/commons/angular-ueditor', ' trigger: 'axis' }, legend: { - data: ['Alipay交易客单价','AlipayOnline交易客单价', 'Bestpay交易客单价','Wechat交易客单价',"JD Pay交易客单价","HF Pay交易客单价"], + data: ['Alipay交易客单价','AlipayOnline交易客单价', 'Bestpay交易客单价','Wechat交易客单价',"JD Pay交易客单价","HF Pay交易客单价","Yeepay交易客单价"], bottom: 0, }, yAxis: [ @@ -354,7 +376,7 @@ define(['angular', 'static/commons/commons', 'static/commons/angular-ueditor', ' type: 'value' } ], - color: ['#00a0e9','#00a0e9','#FF2D96','#09bb07','#DC0808',"#FFFF33"] + color: ['#00a0e9','#00a0e9','#FF2D96','#09bb07','#DC0808',"#FFFF33","#66ff00"] }, xAxis: { basic: {type: 'category', boundaryGap: false}, @@ -426,6 +448,17 @@ define(['angular', 'static/commons/commons', 'static/commons/angular-ueditor', ' yAxisIndex: 0 }, column: {key: 'hf.single_amount'} + }, + { + basic: { + name: 'Yeepay交易客单价', + type: 'line', + label: {normal: {show: true}}, + showAllSymbols: true, + showSymbol: true, + yAxisIndex: 0 + }, + column: {key: 'Yeepay.single_amount'} } ] }; diff --git a/src/main/ui/static/analysis/clearing-log.js b/src/main/ui/static/analysis/clearing-log.js index feeaaeb19..e8ceabfb6 100644 --- a/src/main/ui/static/analysis/clearing-log.js +++ b/src/main/ui/static/analysis/clearing-log.js @@ -545,8 +545,10 @@ define(['angular', 'decimal', 'uiBootstrap', 'uiRouter', 'angularEcharts'], func return '/static/images/hf_sign_lg.png'; case 'Rpay': return '/static/images/rpayplus_sign_lg.png'; + case 'Yeepay': + return '/static/images/yeepay_sign_lg.png'; } } }); return app; -}); \ No newline at end of file +}); diff --git a/src/main/ui/static/analysis/templates/customer_analysis.html b/src/main/ui/static/analysis/templates/customer_analysis.html index 099aba25f..72c40413d 100644 --- a/src/main/ui/static/analysis/templates/customer_analysis.html +++ b/src/main/ui/static/analysis/templates/customer_analysis.html @@ -203,6 +203,8 @@ uib-tooltip="HF Pay" ng-if="order.channel=='hf'"/> + {{order.order_id}} {{order.short_name}}(HF Pay | RPay + + ng-click="params.channel='RPAY';doAnalysis(1)">RPay + | + Yeepay

@@ -148,4 +150,4 @@ - \ No newline at end of file + diff --git a/src/main/ui/static/analysis/templates/partner_customers_orders.html b/src/main/ui/static/analysis/templates/partner_customers_orders.html index 25b7e3865..88436a1f0 100644 --- a/src/main/ui/static/analysis/templates/partner_customers_orders.html +++ b/src/main/ui/static/analysis/templates/partner_customers_orders.html @@ -101,6 +101,10 @@ ng-click="params.channel='jd';doAnalysis(1)">JD Pay | HF Pay + RPay + | + Yeepay

@@ -133,4 +137,4 @@ - \ No newline at end of file + diff --git a/src/main/ui/static/analysis/templates/partner_trans_analysis.html b/src/main/ui/static/analysis/templates/partner_trans_analysis.html index b282d5943..4af659a20 100644 --- a/src/main/ui/static/analysis/templates/partner_trans_analysis.html +++ b/src/main/ui/static/analysis/templates/partner_trans_analysis.html @@ -100,7 +100,9 @@ JD Pay | HF Pay + ng-click="params.channel='hf';doAnalysis(1)">HF Pay | + Yeepay

@@ -133,4 +135,4 @@ - \ No newline at end of file + diff --git a/src/main/ui/static/analysis/templates/trans_analysis.html b/src/main/ui/static/analysis/templates/trans_analysis.html index f1ab22f81..f80936201 100644 --- a/src/main/ui/static/analysis/templates/trans_analysis.html +++ b/src/main/ui/static/analysis/templates/trans_analysis.html @@ -99,7 +99,9 @@ HF Pay | RPay + + ng-click="params.channel='RPAY';doAnalysis(1)">RPay + | + Yeepay

@@ -209,6 +211,15 @@ +
+
+
Yeepay
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Paying Surcharge
diff --git a/src/main/ui/static/payment/partner/templates/partner_bankaccounts.html b/src/main/ui/static/payment/partner/templates/partner_bankaccounts.html index 854e13fb7..5385003d5 100644 --- a/src/main/ui/static/payment/partner/templates/partner_bankaccounts.html +++ b/src/main/ui/static/payment/partner/templates/partner_bankaccounts.html @@ -172,6 +172,7 @@
  • JDpay
  • HFpay
  • Rpay+
  • +
  • Yeepay
  • @@ -212,4 +213,4 @@ - \ No newline at end of file + diff --git a/src/main/ui/static/payment/partner/templates/partner_new_rate.html b/src/main/ui/static/payment/partner/templates/partner_new_rate.html index 6b6872b29..189a97ab1 100644 --- a/src/main/ui/static/payment/partner/templates/partner_new_rate.html +++ b/src/main/ui/static/payment/partner/templates/partner_new_rate.html @@ -160,6 +160,30 @@ +
    + +
    +
    + +
    %
    +
    +
    +
    + No more than 2.2% +
    +
    + No less than 0.6% +
    +
    + Required Field +
    +
    + +
    +
    +
    @@ -214,4 +238,4 @@ \ No newline at end of file +
    diff --git a/src/main/ui/static/payment/partner/templates/partner_pay_logs.html b/src/main/ui/static/payment/partner/templates/partner_pay_logs.html index 630f9d6ab..da618eaeb 100644 --- a/src/main/ui/static/payment/partner/templates/partner_pay_logs.html +++ b/src/main/ui/static/payment/partner/templates/partner_pay_logs.html @@ -31,7 +31,9 @@ Partial Refund | Full Refund + ng-click="params.status='FULL_REFUNDED';loadTradeLogs(1)">Full Refund | + Yeepay

    @@ -87,7 +89,9 @@ HFpay | RPay + + ng-click="params.channel='RPAY';loadTradeLogs(1)">RPay + | + Yeepay

    @@ -188,6 +192,7 @@ + {{trade.order_id}} @@ -371,4 +375,4 @@ - \ No newline at end of file + diff --git a/src/main/ui/static/payment/tradelog/templates/partner_settlement_dialog.html b/src/main/ui/static/payment/tradelog/templates/partner_settlement_dialog.html index 30380e9a6..3640a2c4b 100644 --- a/src/main/ui/static/payment/tradelog/templates/partner_settlement_dialog.html +++ b/src/main/ui/static/payment/tradelog/templates/partner_settlement_dialog.html @@ -45,6 +45,11 @@ +
  • + + + +
  • @@ -251,4 +256,4 @@ - \ No newline at end of file + diff --git a/src/main/ui/static/payment/tradelog/templates/partner_trade_logs.html b/src/main/ui/static/payment/tradelog/templates/partner_trade_logs.html index b69d79e45..c27eedccf 100644 --- a/src/main/ui/static/payment/tradelog/templates/partner_trade_logs.html +++ b/src/main/ui/static/payment/tradelog/templates/partner_trade_logs.html @@ -95,9 +95,11 @@ JD Pay | HF Pay + ng-click="params.channel='HF';loadTradeLogs(1)">HF Pay | RPay+ + ng-click="params.channel='RPAY';loadTradeLogs(1)">RPay+ | + Yeepay

    @@ -325,6 +327,7 @@ + {{trade.order_id}}
    @@ -232,4 +237,4 @@ last-text="»">
    Total Records:{{pagination.totalCount}};Total Pages:{{pagination.totalPages}}
    - \ No newline at end of file + diff --git a/src/main/ui/static/payment/partner/templates/partner_payment_info.html b/src/main/ui/static/payment/partner/templates/partner_payment_info.html index 804ab968b..3cdc89959 100644 --- a/src/main/ui/static/payment/partner/templates/partner_payment_info.html +++ b/src/main/ui/static/payment/partner/templates/partner_payment_info.html @@ -56,6 +56,14 @@

    +
    + +
    +

    + {{paymentInfo.yeepay_sub_merchant_id||'初始化'}} +

    +
    +
    @@ -209,6 +217,12 @@
    +
    + +
    + +
    +
    @@ -354,6 +368,29 @@ +
    +
    + + +
    +
    + + +
    +   仅支持微信客户端扫描 +
    +
    +
    + +
    + +
    +
    diff --git a/src/main/ui/static/payment/partner/templates/sub_merchant_id_apply.html b/src/main/ui/static/payment/partner/templates/sub_merchant_id_apply.html index 8deec83d1..52b6da3ee 100644 --- a/src/main/ui/static/payment/partner/templates/sub_merchant_id_apply.html +++ b/src/main/ui/static/payment/partner/templates/sub_merchant_id_apply.html @@ -149,4 +149,65 @@ - \ No newline at end of file + +
    +
    +
    +
    +
    +
    +

    + Yeepay Sub Merchant Id : {{partner.yeepay_sub_merchant_id}} + +

    + +
    +
    +
    +
    +

    List of Sub Merchant Id

    +
    +
    +
      +
    • + Sub Merchant Id + (当前使用){{id_apply.sub_merchant_id}} +
    • +
    • + Apply Time + +
    • +
    • + Business Content + {{id_apply.business_content | yeepayBusinessContent}} +
    • +
    • + Business Category + {{id_apply.industry | yeepayIndustry}} +
    • +
    • + Operator + +
    • +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    + diff --git a/src/main/ui/static/payment/tradelog/templates/balance_report.html b/src/main/ui/static/payment/tradelog/templates/balance_report.html index c6acfce95..91feaa526 100644 --- a/src/main/ui/static/payment/tradelog/templates/balance_report.html +++ b/src/main/ui/static/payment/tradelog/templates/balance_report.html @@ -97,7 +97,9 @@ HF Pay | RPay + + ng-click="params.channel='RPAY';loadTradeLogs(1)">RPay + | + Yeepay

    @@ -298,6 +300,8 @@ uib-tooltip="HF Pay" ng-if="trade.channel=='hf'"/> + {{trade.order_id2}}
    @@ -386,4 +389,4 @@ - \ No newline at end of file + diff --git a/src/main/ui/static/payment/tradelog/templates/trade_logs.html b/src/main/ui/static/payment/tradelog/templates/trade_logs.html index b4a3173f4..baa6712bd 100644 --- a/src/main/ui/static/payment/tradelog/templates/trade_logs.html +++ b/src/main/ui/static/payment/tradelog/templates/trade_logs.html @@ -135,7 +135,9 @@ HF Pay | RPay + + ng-click="params.channel='RPAY';loadTradeLogs(1)">RPay + | + Yeepay

    @@ -355,6 +357,8 @@ uib-tooltip="HF Pay" ng-if="trade.channel=='hf'"/> + {{trade.order_id}}
    @@ -405,4 +409,4 @@ - \ No newline at end of file + From 285a436a9133fa0af0cf4dfb36097daca9dd78cc Mon Sep 17 00:00:00 2001 From: lujian Date: Mon, 12 Nov 2018 11:13:12 +0800 Subject: [PATCH 02/45] =?UTF-8?q?[fix]=E9=A3=8E=E6=8E=A7=E9=9C=80=E6=B1=82?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/impl/RiskBusinessServiceImpl.java | 8 +++++-- .../manage/mappers/payment/OrderMapper.xml | 3 ++- .../templates/mail/risk_upload_mail.html | 1 + src/main/ui/static/analysis/risk_business.js | 9 ++++++-- .../analysis/templates/new_riskEvent.html | 8 ++++--- .../analysis/templates/riskEvent_detail.html | 22 +++++++++++++------ .../analysis/templates/risk_business.html | 4 ++-- 7 files changed, 38 insertions(+), 17 deletions(-) diff --git a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java index 365852461..a547c05b8 100644 --- a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java @@ -204,14 +204,17 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo for (int i = 0; i < orderIdArray.length; i++) { JSONObject orderInfo = orderMapper.findOrderById(orderIdArray[i],client.getIntValue("client_id")); // 判断该笔订单是否存在,是否属于该商户 + // 由于查询订单时已经关联商户了,所以只会抛出订单不匹配的异常 if (orderInfo == null) - throw new OrderNotExistsException(); + throw new OrderNotMatchException(); + /* else { - if (!clientMoniker.equals(orderInfo.getString("partner_code"))) { + if (!clientMoniker.equals(orderInfo.getString("client_moniker"))) { throw new OrderNotMatchException(); } orderAmountList.add(orderInfo.getString("total_amount")); } + */ } params.put("order_amounts", StringUtils.join(orderAmountList, ",")); } @@ -444,6 +447,7 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo ctx.setVariable("uploadUrl", uploadUrl); ctx.setVariable("royalpay_order_type", event.getIntValue("royalpay_order_type")); ctx.setVariable("warning_order_type", event.getIntValue("warning_order_type")); + ctx.setVariable("description", event.getString("description")); String[] orderIds = event.getString("order_ids").split(","); List orders = new ArrayList(); switch (event.getIntValue("order_type")){ diff --git a/src/main/resources/au/com/royalpay/payment/manage/mappers/payment/OrderMapper.xml b/src/main/resources/au/com/royalpay/payment/manage/mappers/payment/OrderMapper.xml index 2eb0ebb9b..818a9fd68 100644 --- a/src/main/resources/au/com/royalpay/payment/manage/mappers/payment/OrderMapper.xml +++ b/src/main/resources/au/com/royalpay/payment/manage/mappers/payment/OrderMapper.xml @@ -750,6 +750,7 @@
    +

    2、

    如果提交的材料不齐, 则有关停支付的风险。感谢,辛苦。

    Submit Risk Materials

    diff --git a/src/main/ui/static/analysis/risk_business.js b/src/main/ui/static/analysis/risk_business.js index fa8177534..409aaddc8 100644 --- a/src/main/ui/static/analysis/risk_business.js +++ b/src/main/ui/static/analysis/risk_business.js @@ -161,8 +161,8 @@ define(['angular', 'jquery', 'uiRouter', './monitoring/analysis-monitoring'], } ]); - app.controller('riskEventDetailCtrl', ['$scope', '$state', '$http', '$uibModal', '$filter', 'Upload', 'commonDialog', 'riskEvent', - function ($scope, $state, $http, $uibModal, $filter, Upload, commonDialog, riskEvent) { + app.controller('riskEventDetailCtrl', ['$scope', '$state', '$http', '$uibModal', '$filter', 'Upload', 'commonDialog', 'riskEvent', 'orderService', + function ($scope, $state, $http, $uibModal, $filter, Upload, commonDialog, riskEvent, orderService) { $scope.orderTypes = orderTypesMap; $scope.resultTypes = resultTypesMap; @@ -279,6 +279,7 @@ define(['angular', 'jquery', 'uiRouter', './monitoring/analysis-monitoring'], }) }; + // 发送email $scope.resendUploadEmail = function () { commonDialog.confirm({ title: 'Warning', @@ -295,6 +296,10 @@ define(['angular', 'jquery', 'uiRouter', './monitoring/analysis-monitoring'], }) }; + // 订单详情 + $scope.showTradeDetail = function (order) { + orderService.managerOrderDetail(order) + }; // 以下为BD上传材料相关 $scope.material={}; diff --git a/src/main/ui/static/analysis/templates/new_riskEvent.html b/src/main/ui/static/analysis/templates/new_riskEvent.html index 4900bf874..c48e47f96 100644 --- a/src/main/ui/static/analysis/templates/new_riskEvent.html +++ b/src/main/ui/static/analysis/templates/new_riskEvent.html @@ -158,15 +158,17 @@ ng-if="riskEvent.order_type != 4" ng-class="{'has-error':riskEventForm.order_ids.$invalid && riskEventForm.order_ids.$dirty}"> + for="order-ids-input">Platform Transaction IDs
    - +

    - +

    @@ -227,8 +227,8 @@ Partner - Order ID Platform Transaction ID + Order ID Order Description Customer ID IP @@ -247,8 +247,8 @@ {{trade.client.short_name}}({{trade.client.client_moniker}}) - {{trade.order_id}} {{trade.system_transaction_id}} + {{trade.order_id}} {{trade.order_description}} {{trade.customer_id}} {{trade.customer_ip}} @@ -267,6 +267,7 @@ + @@ -275,24 +276,31 @@ + + +
    Platform Transaction ID Order ID Amount Input AmountStatus Create Time GatewayOperation
    {{trade.system_transaction_id}} {{trade.order_id}} {{trade.currency}} {{trade.total_amount}} {{trade.currency}} {{trade.display_amount}} AUD {{trade.clearing_amount}} - - + + - + + + +
    @@ -389,7 +397,7 @@ ng-if="riskEventEdit.order_type != 4" ng-class="{'has-error':riskEventForm.order_ids.$invalid && riskEventForm.order_ids.$dirty}">

    - +
    Date: Mon, 12 Nov 2018 19:43:55 +0800 Subject: [PATCH 03/45] =?UTF-8?q?[fix]=E9=A3=8E=E6=8E=A7=E9=9C=80=E6=B1=82?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mappers/payment/TransactionMapper.java | 12 +++ .../mappers/riskbusiness/RiskEventMapper.java | 3 + .../core/RiskBusinessService.java | 7 ++ .../core/impl/RiskBusinessServiceImpl.java | 94 ++++++++++++++----- .../web/RiskBusinessController.java | 13 +++ .../manage/mappers/payment/OrderMapper.xml | 11 +-- src/main/ui/static/analysis/risk_business.js | 2 + .../analysis/templates/riskEvent_detail.html | 14 ++- .../analysis/templates/risk_business.html | 8 +- 9 files changed, 126 insertions(+), 38 deletions(-) diff --git a/src/main/java/au/com/royalpay/payment/manage/mappers/payment/TransactionMapper.java b/src/main/java/au/com/royalpay/payment/manage/mappers/payment/TransactionMapper.java index d2b2a2dac..8f4ab97b4 100644 --- a/src/main/java/au/com/royalpay/payment/manage/mappers/payment/TransactionMapper.java +++ b/src/main/java/au/com/royalpay/payment/manage/mappers/payment/TransactionMapper.java @@ -9,6 +9,7 @@ import com.github.miemiedev.mybatis.paginator.domain.PageBounds; import com.github.miemiedev.mybatis.paginator.domain.PageList; import org.apache.ibatis.annotations.Param; import org.joda.time.DateTime; +import org.springframework.beans.factory.annotation.Autowired; import java.math.BigDecimal; import java.util.Date; @@ -145,4 +146,15 @@ public interface TransactionMapper { List getHfClearAmount(JSONObject params); List analysisForATOReport(@Param("clientId") int clientId, @Param("from") Date startOfMon, @Param("to") Date endOfMon); + + /** + * 付款退款都是同一个退款单号 + * @param clientId + * @param systemTransactionId + * @return + */ + @AutoSql(type = SqlType.SELECT) + PageList findByClientIdAndSystemTransactionId(@Param("client_id") int clientId, + @Param("system_transaction_id") String systemTransactionId, + PageBounds pageBounds); } diff --git a/src/main/java/au/com/royalpay/payment/manage/mappers/riskbusiness/RiskEventMapper.java b/src/main/java/au/com/royalpay/payment/manage/mappers/riskbusiness/RiskEventMapper.java index d27b4351b..200a00356 100644 --- a/src/main/java/au/com/royalpay/payment/manage/mappers/riskbusiness/RiskEventMapper.java +++ b/src/main/java/au/com/royalpay/payment/manage/mappers/riskbusiness/RiskEventMapper.java @@ -31,4 +31,7 @@ public interface RiskEventMapper { @AutoSql(type = SqlType.SELECT) JSONObject findById(@Param("risk_id") String riskId); + @AutoSql(type = SqlType.DELETE) + void deleteRiskEvent(@Param("risk_id") String risk_id); + } diff --git a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/RiskBusinessService.java b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/RiskBusinessService.java index 52ccf932d..bb6a2be17 100644 --- a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/RiskBusinessService.java +++ b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/RiskBusinessService.java @@ -84,4 +84,11 @@ public interface RiskBusinessService { * @return */ JSONObject getRiskMaterial(JSONObject param); + + /** + * 补全历史数据的real_order_ids + */ + void completeEventRealOrderIds(); + + void deleteRiskEvent(String riskId); } diff --git a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java index a547c05b8..b6b9f3510 100644 --- a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java @@ -6,6 +6,7 @@ import au.com.royalpay.payment.core.exceptions.OrderNotExistsException; import au.com.royalpay.payment.core.exceptions.OrderNotMatchException; import au.com.royalpay.payment.manage.mappers.log.AppMessageLogMapper; import au.com.royalpay.payment.manage.mappers.payment.OrderMapper; +import au.com.royalpay.payment.manage.mappers.payment.TransactionMapper; import au.com.royalpay.payment.manage.mappers.riskbusiness.RiskEventMapper; import au.com.royalpay.payment.manage.mappers.riskbusiness.RiskFileMapper; import au.com.royalpay.payment.manage.mappers.riskbusiness.RiskMaterialMapper; @@ -77,6 +78,8 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo @Resource private OrderMapper orderMapper; @Resource + private TransactionMapper transactionMapper; + @Resource private StringRedisTemplate stringRedisTemplate; @Resource private SpringTemplateEngine thymeleaf; @@ -146,21 +149,20 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo @Override public List getRiskEventOrderList(JSONObject riskEvent) { - String orderIds = riskEvent.getString("order_ids"); + //String orderIds = riskEvent.getString("order_ids"); + String realOrderIds = riskEvent.getString("real_order_ids"); JSONObject client = clientMapper.findClientByMonikerAll(riskEvent.getString("client_moniker")); List tradeLogs = new ArrayList<>(); /** * 通用号调单会有client为空的情况,所以无法查到订单信息 */ - if (client != null && StringUtils.isNotBlank(orderIds)) { - String[] orderIdArray = orderIds.trim().split(","); + if (client != null && StringUtils.isNotBlank(realOrderIds)) { + String[] orderIdArray = realOrderIds.trim().split(","); JSONObject orderInfo = new JSONObject(); - String realOrderId = ""; // 获取订单信息 if (riskEvent.getIntValue("order_type") == 3) { for (int i = 0; i < orderIdArray.length; i++) { - realOrderId = orderMapper.findOrderById(orderIdArray[i],client.getIntValue("client_id")).getString("order_id"); - orderInfo = tradeLogService.getOrderDetail(new JSONObject(), riskEvent.getString("client_moniker"), realOrderId, null); + orderInfo = tradeLogService.getOrderDetail(new JSONObject(), riskEvent.getString("client_moniker"), orderIdArray[i], null); tradeLogs.add(orderInfo); } } else { @@ -173,8 +175,7 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo return tradeLogs; } - @Override - public void addRiskEvent(JSONObject params, JSONObject manager) { + private JSONObject getEvent(JSONObject params) { // 通用号调单不需要填写client_moniker JSONObject client = null; String clientMoniker = params.getString("client_moniker"); @@ -185,8 +186,6 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo } } - params.put("fillin_id", manager.getString("manager_id")); - params.put("fillin_person", manager.getString("display_name")); String orderIds = params.getString("order_ids"); if (StringUtils.isNotBlank(orderIds)) { // 去除所有空格与中文逗号',' @@ -195,6 +194,7 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo params.put("order_ids", orderIds); String[] orderIdArray = orderIds.split(","); List orderAmountList = new ArrayList<>(); + List realOrderIdList = new ArrayList<>(); /** * 通用号调单的时候,是不用填写client_moniker的,但是系统需要client_id关联查询订单信息, * 所以当client为空的时候,就不去校验订单的信息了,从而order_amounts字段为空 @@ -202,10 +202,10 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo */ if (client != null) { for (int i = 0; i < orderIdArray.length; i++) { - JSONObject orderInfo = orderMapper.findOrderById(orderIdArray[i],client.getIntValue("client_id")); + PageList transactionList = transactionMapper.findByClientIdAndSystemTransactionId(client.getIntValue("client_id"), orderIdArray[i], new PageBounds(Order.formString("transaction_time.desc"))); // 判断该笔订单是否存在,是否属于该商户 // 由于查询订单时已经关联商户了,所以只会抛出订单不匹配的异常 - if (orderInfo == null) + if (transactionList == null || transactionList.size() <= 0) throw new OrderNotMatchException(); /* else { @@ -215,15 +215,27 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo orderAmountList.add(orderInfo.getString("total_amount")); } */ + + // 将订单order_id存入数据库方便后面快速查询 + JSONObject orderInfo = transactionList.get(0); + realOrderIdList.add(orderInfo.getString("order_id")); + orderAmountList.add(orderInfo.getString("transaction_amount")); } params.put("order_amounts", StringUtils.join(orderAmountList, ",")); + params.put("real_order_ids", StringUtils.join(realOrderIdList, ",")); } } + return params; + } + @Override + public void addRiskEvent(JSONObject params, JSONObject manager) { + params = getEvent(params); riskEventMapper.save(params); } @Override public void updateRiskEvent(JSONObject params) { + params = getEvent(params); riskEventMapper.update(params); } @@ -280,7 +292,7 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo event.put("result_type", RiskResultTypeEnum.SEND_EMAIL_TO_BD.getResultType()); event.put("submit_url",uploadUrl); Integer orderType = event.getInteger("order_type"); - if (orderType == RiskOrderTypeEnum.WARNING_ORDER.getOrderType()) { + if (orderType.equals(RiskOrderTypeEnum.WARNING_ORDER.getOrderType())) { event.put("result_type", RiskResultTypeEnum.ALREADY_HANDLED.getResultType()); } riskEventMapper.update(event); @@ -291,8 +303,6 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo if(event.getIntValue("order_type")==3){ sendAppRiskMessage(event); } - - } private void sendAppRiskMessage(JSONObject event){ @@ -448,12 +458,13 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo ctx.setVariable("royalpay_order_type", event.getIntValue("royalpay_order_type")); ctx.setVariable("warning_order_type", event.getIntValue("warning_order_type")); ctx.setVariable("description", event.getString("description")); - String[] orderIds = event.getString("order_ids").split(","); + //String[] orderIds = event.getString("order_ids").split(","); + String[] realOrderIds = event.getString("real_order_ids").split(","); List orders = new ArrayList(); switch (event.getIntValue("order_type")){ case 1: case 2: - for(String orderId : orderIds){ + for(String orderId : realOrderIds){ JSONObject order = orderMapper.findOrderById(orderId,client.getIntValue("client_id")); if(order==null){ throw new BadRequestException("Order: "+orderId+" not exists"); @@ -465,10 +476,8 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo ctx.setVariable("emailsTos", bdEmails); break; case 3: - String realOrderId = ""; - for(String orderId : orderIds){ - realOrderId = orderMapper.findOrderById(orderId,client.getIntValue("client_id")).getString("order_id"); - JSONObject order = tradeLogService.getOrderDetail(new JSONObject(), clientMoniker, realOrderId, null); + for(String orderId : realOrderIds){ + JSONObject order = tradeLogService.getOrderDetail(new JSONObject(), clientMoniker, orderId, null); if(order==null){ throw new BadRequestException("Order: "+orderId+" not exists"); } @@ -526,16 +535,42 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo return null; } + @Override + public void completeEventRealOrderIds() { + List riskEventList = getRiskEvents(null); + if (riskEventList != null && riskEventList.size() > 0) { + for (JSONObject riskEvent : riskEventList) { + String clientMoniker = riskEvent.getString("client_moniker"); + JSONObject client = clientMapper.findClientByMonikerAll(clientMoniker); + String systemTransactionIds = riskEvent.getString("order_ids"); + if (StringUtils.isBlank(systemTransactionIds)) + continue; + String[] systemTransactionIdArr = riskEvent.getString("order_ids").split(","); + List realOrderIds = new ArrayList<>(); + if (client == null) + continue; + for (int i = 0; i < systemTransactionIdArr.length; i++) { + PageList transactionList = transactionMapper.findByClientIdAndSystemTransactionId( + client.getIntValue("client_id"), + systemTransactionIdArr[i], + new PageBounds(Order.formString("transaction_time.desc"))); + if (transactionList != null && transactionList.size() > 0) + realOrderIds.add(transactionList.get(0).getString("order_id")); + } + riskEvent.put("real_order_ids", StringUtils.join(realOrderIds, ",")); + //updateRiskEvent(riskEvent); + riskEventMapper.update(riskEvent); + } + } + } private byte[] generateRiskOrders(JSONObject event) throws IOException { String[] orderIds = event.getString("order_ids").split(","); JSONObject client = clientMapper.findClientByMonikerAll(event.getString("client_moniker")); Workbook wb = new XSSFWorkbook(); - String realOrderId = ""; for(String orderId : orderIds){ - realOrderId = orderMapper.findOrderById(orderId,client.getIntValue("client_id")).getString("order_id"); - JSONObject orderDetail = tradeLogService.getOrderDetail(new JSONObject(), event.getString("client_moniker"), realOrderId, null); + JSONObject orderDetail = tradeLogService.getOrderDetail(new JSONObject(), event.getString("client_moniker"), orderId, null); Sheet sheet = wb.createSheet(orderId); sheet.setDefaultColumnWidth((short) 40); Row row0 = sheet.createRow(0); @@ -652,6 +687,11 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo @Override public void checkTodo(JSONObject manager, List notices) { + /** + * 1、判断登录的角色是不是BD + * 2、列出BD管理的商户 + * 3、 + */ if (ManagerRole.BD_USER.hasRole(manager.getIntValue("role"))) { JSONObject params = new JSONObject(); params.put("bd_id", manager.getString("manager_id")); @@ -681,4 +721,10 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo } } } + + @Override + public void deleteRiskEvent(String riskId) { + riskEventMapper.deleteRiskEvent(riskId); + } + } diff --git a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/web/RiskBusinessController.java b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/web/RiskBusinessController.java index b92252ec5..837a29134 100644 --- a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/web/RiskBusinessController.java +++ b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/web/RiskBusinessController.java @@ -56,6 +56,8 @@ public class RiskBusinessController { @PostMapping(value = "events") public void RegisterRiskEvent(@RequestBody JSONObject params, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) { + params.put("fillin_id", manager.getString("manager_id")); + params.put("fillin_person", manager.getString("display_name")); riskBusinessService.addRiskEvent(params, manager); } @@ -128,5 +130,16 @@ public class RiskBusinessController { JSONObject param = partnerQuery.toJsonParam(); return clientManager.getClientBySimpleQuery(param); } + + // 更新库中的orderIds + @GetMapping(value = "/complete/real_order_id") + public void completeEventRealOrderIds() { + riskBusinessService.completeEventRealOrderIds(); + } + + @GetMapping(value = "/delete/event") + public void deleteRiskEvent(@RequestParam("risk_id") String riskId) { + riskBusinessService.deleteRiskEvent(riskId); + } } diff --git a/src/main/resources/au/com/royalpay/payment/manage/mappers/payment/OrderMapper.xml b/src/main/resources/au/com/royalpay/payment/manage/mappers/payment/OrderMapper.xml index 818a9fd68..4c51f4555 100644 --- a/src/main/resources/au/com/royalpay/payment/manage/mappers/payment/OrderMapper.xml +++ b/src/main/resources/au/com/royalpay/payment/manage/mappers/payment/OrderMapper.xml @@ -739,14 +739,6 @@ - +
    +
    + + +
    +
    +
    From 0322fc05706621bfb926c2418e997e58f370e219 Mon Sep 17 00:00:00 2001 From: lujian Date: Wed, 14 Nov 2018 09:09:00 +0800 Subject: [PATCH 06/45] =?UTF-8?q?[fix]=E9=A3=8E=E6=8E=A7=E5=AF=B9app?= =?UTF-8?q?=E7=AB=AF=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../appclient/web/RetailAppController.java | 69 ++++++++++++++ .../core/RiskBusinessService.java | 18 ++++ .../core/impl/RiskBusinessServiceImpl.java | 90 ++++++++++++++++++- .../web/RiskBusinessController.java | 1 + .../mappers/riskbusiness/RiskEventMapper.xml | 15 ++++ 5 files changed, 192 insertions(+), 1 deletion(-) diff --git a/src/main/java/au/com/royalpay/payment/manage/appclient/web/RetailAppController.java b/src/main/java/au/com/royalpay/payment/manage/appclient/web/RetailAppController.java index 2b0c92902..92569a46c 100644 --- a/src/main/java/au/com/royalpay/payment/manage/appclient/web/RetailAppController.java +++ b/src/main/java/au/com/royalpay/payment/manage/appclient/web/RetailAppController.java @@ -13,6 +13,9 @@ import au.com.royalpay.payment.manage.bill.core.BillOrderService; import au.com.royalpay.payment.manage.bill.core.BillService; import au.com.royalpay.payment.manage.merchants.beans.ClientAuthFilesInfo; import au.com.royalpay.payment.manage.merchants.beans.ClientUpdateInfo; +import au.com.royalpay.payment.manage.riskbusiness.bean.RiskEventQuery; +import au.com.royalpay.payment.manage.riskbusiness.core.RiskBusinessService; +import au.com.royalpay.payment.manage.riskbusiness.core.RiskUploadService; import au.com.royalpay.payment.manage.settlement.core.ManualSettleSupport; import au.com.royalpay.payment.manage.signin.beans.ChangePwdBean; import au.com.royalpay.payment.manage.signin.core.SignInStatusManager; @@ -29,9 +32,11 @@ import au.com.royalpay.payment.tools.merchants.beans.UpdateSurchargeDTO; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; +import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.DateUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.Errors; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @@ -75,6 +80,11 @@ public class RetailAppController { @Resource private AttachmentClient attachmentClient; + @Autowired + private RiskBusinessService riskBusinessService; + + @Autowired + private RiskUploadService riskUploadService; @RequestMapping(value = "/token", method = RequestMethod.PUT) public void updateDevToken(@ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device, @RequestBody JSONObject token) { @@ -565,4 +575,63 @@ public class RetailAppController { retailAppService.cancelCouponAccuessLog(accuess_id, remark); } + /** + * app端获取风控通知信息 + * @param clientId + * @return + */ + @GetMapping(value = "/risk/business/notice") + public JSONObject riskNotice(@RequestParam("client_id") int clientId) { + return riskBusinessService.getNoticeInfo(clientId); + } + + /** + * app端风控事件列表接口 + * @param riskEventQuery + * @return + */ + @GetMapping(value = "/risk/business/events") + public JSONObject getRiskEvents(RiskEventQuery riskEventQuery) { + JSONObject param = riskEventQuery.toJSON(); + param.put("client_moniker", riskEventQuery.getClientMoniker()); + return riskBusinessService.getRiskEventsByPage(param, null); + } + + /** + * app端风控事件详情接口 + * @param riskId + * @return + */ + @GetMapping(value = "/risk/business/events/{risk_id}") + public JSONObject getRiskEventDetail(@PathVariable("risk_id") String riskId) { + JSONObject riskEvent = riskBusinessService.getRiskEventDetail(riskId); + List tradeLogs = riskBusinessService.getRiskEventOrderList(riskEvent); + riskEvent.put("tradeLogs", tradeLogs); + return riskEvent; + } + + /** + * app端获取风控事件上传的材料信息 + * @param riskId + * @return + */ + @GetMapping(value = "/risk/business/events/{risk_id}/materials") + public JSONObject getRiskEventMaterialsRemark(@PathVariable("risk_id") String riskId) { + return riskBusinessService.getRiskEventMaterialsRemark(riskId); + } + + /** + * app端上传调单材料接口 + * @param material + */ + @PostMapping(value = "/risk/business/events") + public void uploadMaterial(@RequestBody JSONObject material) { + riskUploadService.submitMaterial(material); + } + + @RequestMapping(value = "/risk/business/upload/files", method = RequestMethod.POST) + public JSONObject uploadImage(@RequestParam MultipartFile file) throws Exception { + return attachmentClient.uploadFile(file,false); + } + } diff --git a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/RiskBusinessService.java b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/RiskBusinessService.java index bb6a2be17..83a9cb955 100644 --- a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/RiskBusinessService.java +++ b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/RiskBusinessService.java @@ -90,5 +90,23 @@ public interface RiskBusinessService { */ void completeEventRealOrderIds(); + /** + * 删除事件 + * @param riskId + */ void deleteRiskEvent(String riskId); + + /** + * 商户端获取通知信息 + * @param clientId + * @return + */ + JSONObject getNoticeInfo(int clientId); + + /** + * 获取风控事件所需上传的材料说明 + * @param riskId + * @return + */ + JSONObject getRiskEventMaterialsRemark(String riskId); } diff --git a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java index b6b9f3510..f36badc9b 100644 --- a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java @@ -30,6 +30,7 @@ import au.com.royalpay.payment.tools.permission.enums.ManagerRole; import au.com.royalpay.payment.tools.exceptions.ServerErrorException; import au.com.royalpay.payment.tools.threadpool.RoyalThreadPoolExecutor; import au.com.royalpay.payment.tools.utils.PageListUtils; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.github.miemiedev.mybatis.paginator.domain.Order; import com.github.miemiedev.mybatis.paginator.domain.PageBounds; @@ -46,6 +47,7 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.thymeleaf.context.Context; import org.thymeleaf.spring4.SpringTemplateEngine; @@ -113,7 +115,7 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo public JSONObject getRiskEventsByPage(JSONObject params, JSONObject manager) { // 如果登录的角色是BD,添加查询条件result_type为1,2,3,4,order_type为1或者2 - if (ManagerRole.BD_USER.hasRole(manager.getIntValue("role"))) { + if (manager != null && ManagerRole.BD_USER.hasRole(manager.getIntValue("role"))) { params.put("bd_id", manager.getString("manager_id")); List orderTypes = Arrays.asList(RiskOrderTypeEnum.WECHAT_ORDER.getOrderType(), RiskOrderTypeEnum.ALIPAY_ORDER.getOrderType()); @@ -536,6 +538,7 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo } @Override + @Transactional public void completeEventRealOrderIds() { List riskEventList = getRiskEvents(null); if (riskEventList != null && riskEventList.size() > 0) { @@ -727,4 +730,89 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo riskEventMapper.deleteRiskEvent(riskId); } + @Override + public JSONObject getNoticeInfo(int clientId) { + + JSONObject client = clientMapper.findClient(clientId); + if(client == null){ + throw new InvalidShortIdException(); + } + JSONObject params = new JSONObject(); + params.put("is_send_client", 1); + List resultTypes = Arrays.asList(RiskResultTypeEnum.SEND_EMAIL_TO_BD.getResultType(), + RiskResultTypeEnum.MATERIAL_NOT_PASS.getResultType()); + params.put("result_types", resultTypes); + PageList riskEventList = riskEventMapper.listRisksByPage(params, new PageBounds(Order.formString("create_time.desc"))); + + JSONObject result = new JSONObject(); + result.put("notice_flag", false); + if (riskEventList != null && riskEventList.size() > 0) { + result.put("notice_flag", true); + } + return result; + } + + @Override + public JSONObject getRiskEventMaterialsRemark(String riskId) { + JSONObject riskEvent = riskEventMapper.findById(riskId); + Integer orderType = riskEvent.getInteger("order_type"); + List materialItemList = new ArrayList<>(); + + List materialsRemark = new ArrayList<>(); + if (orderType.equals(RiskOrderTypeEnum.WECHAT_ORDER.getOrderType())) { + materialsRemark = Arrays.asList( + "1、物流公司发货单据照片 要求:每笔交易对应的物流单必须提供,且单据必须清晰可见\n" + + "Photos of logistics companies’ goods-delivery documents Requirement: The logistics order record corresponding to each transaction must be provided, and details of records should be clearly visible. ", + "2、用户购买虚拟物品需要提供聊天记录、订单信息、发货凭证截图、 虚拟物品最终消费场景(例如何种游戏、软件)、提供消费场景网址/下载链接 要求:每笔交易对应的截图必须清晰可见\n" + + "Users need to provide chat records, order information, screenshots of delivery documents, final consumption scenarios of virtual goods (such as games, software); provide consumer scene URL / download link. Requirement: The screenshot corresponding to each transaction must be clearly visible. ", + "3、购物小票/发票存根照片 照片应清晰,必须显示商户名称、商户地址、购物时间、物品名称 购物金额等\n" + + "Photos of shopping receipts/ invoice stubs Requirement: The photos should be clear and must show Merchant name, Business address, Transaction time, Product information, Quantity purchased, etc. ", + "4、显示商户门牌号码和店头名称的照片 要求:清晰可见,至少一张\n" + + "Photos of Merchant Street number & Merchant name Requirement: At least one visible photo ", + "5、显示商户营业场景所场内部情况(如店内商品陈列、收银台等)的照片 要求:照片清晰,且能清楚显示商户实际售卖物品或服务,至少三张\n" + + "Photos of internal environment of merchant business (such as in-store merchandise display, checkout counter, etc.) Requirements: The photos (at least three) showing merchant activities including actual selling-goods or services obviously ", + "6、其他图片\n" + + "Other pictures " + ); + } else if (orderType.equals(RiskOrderTypeEnum.ALIPAY_ORDER.getOrderType())) { + String alipayMaterials = riskEvent.getString("alipay_materials"); + if (StringUtils.isNotBlank(alipayMaterials)) { + List alipayMaterialRemarkList = JSONObject.parseArray(alipayMaterials, JSONObject.class); + if (alipayMaterialRemarkList != null && alipayMaterialRemarkList.size() > 0) { + for (int i = 0; i < alipayMaterialRemarkList.size(); i++) { + materialsRemark.add(alipayMaterialRemarkList.get(i).getString("question" + (i + 1))); + } + } + } + } else if (orderType.equals(RiskOrderTypeEnum.ROYALPAY_ORDER.getOrderType())) { + materialsRemark = Arrays.asList( + "1.请解释相应的消费场景/业务模式,例如网站商城,扫码支付, 消费者到店支付等;\n" + + "Please explain the relative payment scenario/business activities, for example, online store, QR code payment, payment at the store, etc;", + "2.提供相应购物清单,订单小票(请提供与被查交易订单号相匹配的交易时间及金额的发票);\n" + + "Provide related shopping lists, invoices. (Please provide the invoices, amount of which matches that of the abnormal transaction);", + "3.提供相应的发货证明,报关单(若有消费者在国内购买,请提供物流单据或报关单);\n" + + "Relative proof of delivery, customs declaration (If the consumer purchased from China, please provide shipping receipt or customs declaration);", + "4.提供您的门店照片(门店照及店铺内的照片各一张, 一张可以看到商户名的门头照,一张可以看到相关商品或服务的店内照片);\n" + + "Photos of the store ( one of each front-store and in-store);", + "5.其他可以还原交易背景的资料,如和消费者的聊天记录等,来佐证被查单号交易的真实性;\n" + + "Other materials that can verify the payment scenario, for example, chatting history, to prove the truth of the transactions;", + "6、其他图片\n" + + "Other pictures" + ); + } + + JSONObject material = getRiskMaterial(riskEvent); + for (int i = 0; i < materialsRemark.size(); i++) { + JSONObject materialItem = new JSONObject(); + materialItem.put("question" + (i + 1), materialsRemark.get(i)); + if (material != null) + materialItem.put("file" + (i + 1), material.getJSONArray("file" + (i + 1))); + materialItemList.add(materialItem); + } + JSONObject result = new JSONObject(); + result.put("material", materialItemList); + if (material != null && material.containsKey("description")) + result.put("description", material.getString("description")); + return result; + } } diff --git a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/web/RiskBusinessController.java b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/web/RiskBusinessController.java index 837a29134..60ef91875 100644 --- a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/web/RiskBusinessController.java +++ b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/web/RiskBusinessController.java @@ -30,6 +30,7 @@ import java.util.List; */ @RestController @ManagerMapping(value = "/risk/business/", role = {ManagerRole.OPERATOR, ManagerRole.ADMIN, ManagerRole.BD_USER, ManagerRole.RISK_MANAGER}) +//@RequestMapping(value = "/risk/business/") public class RiskBusinessController { @Autowired diff --git a/src/main/resources/au/com/royalpay/payment/manage/mappers/riskbusiness/RiskEventMapper.xml b/src/main/resources/au/com/royalpay/payment/manage/mappers/riskbusiness/RiskEventMapper.xml index b9bf6b672..b666dc8d1 100644 --- a/src/main/resources/au/com/royalpay/payment/manage/mappers/riskbusiness/RiskEventMapper.xml +++ b/src/main/resources/au/com/royalpay/payment/manage/mappers/riskbusiness/RiskEventMapper.xml @@ -23,6 +23,9 @@ re.in_user_blacklist, re.processed_remark, re.create_time, + re.alipay_materials, + re.is_send_client, + re.real_order_ids, sc.industry, sc.short_name, IFNULL(sc.sub_merchant_id, re.sub_merchant_id) sub_merchant_id @@ -66,10 +69,15 @@ AND re.risk_id = #{risk_id} + AND re.client_moniker = #{client_moniker} + + AND re.is_send_client = #{is_send_client} + + #{order_type_item} @@ -93,19 +101,26 @@ AND re.order_ids LIKE CONCAT('%', #{order_ids}, '%') + AND sc.sub_merchant_id = #{sub_merchant_id} + AND sc.industry = #{industry} + AND re.receive_email_date = #{receive_email_date} + AND re.reply_email_date = #{reply_email_date} + + AND re.real_order_ids = #{real_order_ids} + \ No newline at end of file From 7be33376abc2906f4c7511fb99034e676f7275fe Mon Sep 17 00:00:00 2001 From: "james.zhao" Date: Wed, 14 Nov 2018 10:02:04 +0800 Subject: [PATCH 07/45] Yeepay Order Dev --- .../royalpay/payment/manage/dev/web/TestController.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/au/com/royalpay/payment/manage/dev/web/TestController.java b/src/main/java/au/com/royalpay/payment/manage/dev/web/TestController.java index 57adeb692..4e654a8b6 100644 --- a/src/main/java/au/com/royalpay/payment/manage/dev/web/TestController.java +++ b/src/main/java/au/com/royalpay/payment/manage/dev/web/TestController.java @@ -6,6 +6,7 @@ import au.com.royalpay.payment.channels.bestpay.runtime.BestPayClient; import au.com.royalpay.payment.channels.jd.runtime.JDClient; import au.com.royalpay.payment.channels.rpay.runtime.RpayClient; import au.com.royalpay.payment.channels.wechat.runtime.WxPayClient; +import au.com.royalpay.payment.channels.yeepay.runtime.YeePayClient; import au.com.royalpay.payment.core.PaymentApi; import au.com.royalpay.payment.core.exceptions.InvalidShortIdException; import au.com.royalpay.payment.core.exceptions.OrderNotExistsException; @@ -102,6 +103,8 @@ public class TestController implements ApplicationEventPublisherAware { @Resource private RpayClient rpayClient; @Resource + private YeePayClient yeepayClient; + @Resource private TradeLogService tradeLogService; @Resource private RetailAppService retailAppService; @@ -306,6 +309,9 @@ public class TestController implements ApplicationEventPublisherAware { String rpayjson = JSON.toJSONString(orderInfo, SerializerFeature.PrettyFormat); res.put("xml", rpayjson); break; + case "Yeepay": + res.put("xml", yeepayClient.queryOrderStd(orderId).toString()); + break; default: throw new BadRequestException("Not Support channel:" + channel); } @@ -350,6 +356,9 @@ public class TestController implements ApplicationEventPublisherAware { xmlStr = XmlFormatUtils.formatXml(elem); res.put("xml", xmlStr); break; + case "Yeepay": + res.put("xml", yeepayClient.queryRefundStd(refundOrder.getString("out_refund_id")).toString()); + break; default: throw new BadRequestException("Not Support channel:" + channel); } From ab2242079c18c86d325da069d0bb12110f5569ed Mon Sep 17 00:00:00 2001 From: lujian Date: Wed, 14 Nov 2018 15:18:09 +0800 Subject: [PATCH 08/45] =?UTF-8?q?[fix]=E9=A3=8E=E6=8E=A7=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../riskbusiness/core/impl/RiskBusinessServiceImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java index f36badc9b..d79b14fd6 100644 --- a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java @@ -804,9 +804,9 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo JSONObject material = getRiskMaterial(riskEvent); for (int i = 0; i < materialsRemark.size(); i++) { JSONObject materialItem = new JSONObject(); - materialItem.put("question" + (i + 1), materialsRemark.get(i)); + materialItem.put("question", materialsRemark.get(i)); if (material != null) - materialItem.put("file" + (i + 1), material.getJSONArray("file" + (i + 1))); + materialItem.put("file", material.getJSONArray("file" + (i + 1))); materialItemList.add(materialItem); } JSONObject result = new JSONObject(); From bbc079e03f1218cd211728a3585cb6b0b82c44a4 Mon Sep 17 00:00:00 2001 From: lujian Date: Thu, 15 Nov 2018 15:08:27 +0800 Subject: [PATCH 09/45] =?UTF-8?q?[fix]=E9=A3=8E=E6=8E=A7=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../appclient/web/RetailAppController.java | 16 +++++++++++++--- .../core/impl/RiskUploadServiceIpml.java | 1 + 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/main/java/au/com/royalpay/payment/manage/appclient/web/RetailAppController.java b/src/main/java/au/com/royalpay/payment/manage/appclient/web/RetailAppController.java index 92569a46c..b2c1c30d8 100644 --- a/src/main/java/au/com/royalpay/payment/manage/appclient/web/RetailAppController.java +++ b/src/main/java/au/com/royalpay/payment/manage/appclient/web/RetailAppController.java @@ -16,6 +16,7 @@ import au.com.royalpay.payment.manage.merchants.beans.ClientUpdateInfo; import au.com.royalpay.payment.manage.riskbusiness.bean.RiskEventQuery; import au.com.royalpay.payment.manage.riskbusiness.core.RiskBusinessService; import au.com.royalpay.payment.manage.riskbusiness.core.RiskUploadService; +import au.com.royalpay.payment.manage.riskbusiness.enums.RiskResultTypeEnum; import au.com.royalpay.payment.manage.settlement.core.ManualSettleSupport; import au.com.royalpay.payment.manage.signin.beans.ChangePwdBean; import au.com.royalpay.payment.manage.signin.core.SignInStatusManager; @@ -44,6 +45,7 @@ import org.springframework.web.servlet.ModelAndView; import java.math.BigDecimal; import java.text.ParseException; +import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.Map; @@ -592,9 +594,17 @@ public class RetailAppController { */ @GetMapping(value = "/risk/business/events") public JSONObject getRiskEvents(RiskEventQuery riskEventQuery) { - JSONObject param = riskEventQuery.toJSON(); - param.put("client_moniker", riskEventQuery.getClientMoniker()); - return riskBusinessService.getRiskEventsByPage(param, null); + JSONObject params = riskEventQuery.toJSON(); + params.put("client_moniker", riskEventQuery.getClientMoniker()); + params.put("is_send_client", 1); + params.putIfAbsent("page", 1); + List resultTypes = Arrays.asList(RiskResultTypeEnum.SEND_EMAIL_TO_BD.getResultType(), + RiskResultTypeEnum.WAIT_FOR_AUDIT.getResultType(), + RiskResultTypeEnum.MATERIAL_AUDIT_PASS.getResultType(), + RiskResultTypeEnum.MATERIAL_NOT_PASS.getResultType(), + RiskResultTypeEnum.ALREADY_HANDLED.getResultType()); + params.put("result_types", resultTypes); + return riskBusinessService.getRiskEventsByPage(params, null); } /** diff --git a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskUploadServiceIpml.java b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskUploadServiceIpml.java index 17133ae4a..6cea25854 100644 --- a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskUploadServiceIpml.java +++ b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskUploadServiceIpml.java @@ -40,6 +40,7 @@ public class RiskUploadServiceIpml implements RiskUploadService { @Override public void submitMaterial(JSONObject material) { JSONObject event = riskEventMapper.findById(material.getString("risk_id")); + material.putIfAbsent("update_time", DateFormatUtils.format(new Date(), "yyyy-MM-dd hh:mm:ss")); riskMaterialMapper.save(material); material.put("material_id",riskMaterialMapper.findAllMaterials(material.getString("risk_id")).get(0).getString("material_id")); for(int i=1;i<=10;i++){ From 872d5664498518128191ed15c7b0f3e8fa9a91fe Mon Sep 17 00:00:00 2001 From: lujian Date: Thu, 15 Nov 2018 15:16:32 +0800 Subject: [PATCH 10/45] [fix] --- .../manage/riskbusiness/core/RiskBusinessService.java | 2 ++ .../riskbusiness/core/impl/RiskBusinessServiceImpl.java | 9 +++++++++ .../manage/riskbusiness/web/RiskBusinessController.java | 5 +++++ 3 files changed, 16 insertions(+) diff --git a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/RiskBusinessService.java b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/RiskBusinessService.java index 83a9cb955..9a426ed12 100644 --- a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/RiskBusinessService.java +++ b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/RiskBusinessService.java @@ -109,4 +109,6 @@ public interface RiskBusinessService { * @return */ JSONObject getRiskEventMaterialsRemark(String riskId); + + JSONObject updateIsSendClient(String riskId); } diff --git a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java index d79b14fd6..19955dd31 100644 --- a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java @@ -815,4 +815,13 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo result.put("description", material.getString("description")); return result; } + + @Override + public JSONObject updateIsSendClient(String riskId) { + JSONObject event = riskEventMapper.findById(riskId); + event.put("is_send_client", 1); + riskEventMapper.update(event); + event = riskEventMapper.findById(riskId); + return event; + } } diff --git a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/web/RiskBusinessController.java b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/web/RiskBusinessController.java index 60ef91875..c93d27d8f 100644 --- a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/web/RiskBusinessController.java +++ b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/web/RiskBusinessController.java @@ -142,5 +142,10 @@ public class RiskBusinessController { public void deleteRiskEvent(@RequestParam("risk_id") String riskId) { riskBusinessService.deleteRiskEvent(riskId); } + + @GetMapping(value = "/update/event/is_send_client") + public JSONObject updateRiskEvent(@RequestParam("risk_id") String riskId) { + return riskBusinessService.updateIsSendClient(riskId); + } } From 03bae404745269b0fc69d219b9b3994b110980ff Mon Sep 17 00:00:00 2001 From: lujian Date: Thu, 15 Nov 2018 15:35:12 +0800 Subject: [PATCH 11/45] [fix] --- .../payment/manage/riskbusiness/web/RiskBusinessController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/web/RiskBusinessController.java b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/web/RiskBusinessController.java index c93d27d8f..be14e5b64 100644 --- a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/web/RiskBusinessController.java +++ b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/web/RiskBusinessController.java @@ -144,7 +144,7 @@ public class RiskBusinessController { } @GetMapping(value = "/update/event/is_send_client") - public JSONObject updateRiskEvent(@RequestParam("risk_id") String riskId) { + public JSONObject updateRiskEventIsSendClient(@RequestParam("risk_id") String riskId) { return riskBusinessService.updateIsSendClient(riskId); } } From ed84c506f9deb28a00a1f525c3ee27082da4acf7 Mon Sep 17 00:00:00 2001 From: "james.zhao" Date: Thu, 15 Nov 2018 18:00:58 +0800 Subject: [PATCH 12/45] update app message --- .../core/impl/RiskBusinessServiceImpl.java | 71 ++++++++++--------- 1 file changed, 37 insertions(+), 34 deletions(-) diff --git a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java index 19955dd31..a727e396e 100644 --- a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java @@ -14,6 +14,7 @@ import au.com.royalpay.payment.manage.mappers.system.ClientDeviceTokenMapper; import au.com.royalpay.payment.manage.mappers.system.ClientMapper; import au.com.royalpay.payment.manage.mappers.system.ClientBDMapper; import au.com.royalpay.payment.manage.notice.core.MailService; +import au.com.royalpay.payment.manage.pushMessage.APNSMessageHelper; import au.com.royalpay.payment.manage.pushMessage.bean.AppManagerMessageBuilder; import au.com.royalpay.payment.manage.riskbusiness.core.RiskBusinessService; import au.com.royalpay.payment.manage.riskbusiness.enums.RiskResultTypeEnum; @@ -104,6 +105,9 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo private Map senderMap = new HashMap<>(); + @Resource + private APNSMessageHelper apnsMessageHelper; + private ThreadPoolExecutor sendingAppleMsgPool = new ThreadPoolExecutor(10, 30, 5, TimeUnit.SECONDS, new LinkedBlockingQueue()); @Override @@ -311,41 +315,40 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo JSONObject client = clientMapper.findClientByMoniker(event.getString("client_moniker")); logger.debug("sendRiskAppMessage-" + client.getString("client_moniker") + "-" + "risk_id:"+event.getString("risk_id")); List tokens = clientDeviceTokenMapper.listTokensByClient_id(client.getIntValue("client_id")); - for (final JSONObject devToken : tokens) { - Runnable task = () -> { - String token = devToken.getString("token"); - if (token == null) { - return; - } - JSONObject log = saveAppMessageLog(devToken.getString("dev_id"), devToken.getIntValue("client_id"), "risk", token, - event.getString("risk_id")); - try { - event.put("send_type", "risk"); - JSONObject type = new JSONObject(); - type.put("send_type", "risk"); - type.put("id", event.getString("risk_id")); - AppMsgSender sender = senderMap.get(devToken.getString("client_type")); - if (token == null || sender == null) { - return; - } - JSONObject managerMsg = new JSONObject(); - managerMsg.put("title", LocaleSupport.localeMessage("app.message.title.risk")); - managerMsg.put("body", - LocaleSupport.localeMessage("app.message.body.risk")); - managerMsg.put("type", type); - managerMsg.put("data", event); - managerMsg.put("msgType", "risk"); - AppMessage appMessage = new AppManagerMessageBuilder(managerMsg).buildMessage(); - sender.sendMessage(appMessage, devToken); - log.put("status", 2); - appMessageLogMapper.update(log); - } catch (Exception e) { - logger.error("出错了:" + e.getMessage()); - appMessageLogMapper.updateStatus(log.getString("send_id"), 1, e.getMessage()); - throw new ServerErrorException("Send App " + devToken.getString("client_type") + " Failed", e); + for (JSONObject devToken : tokens) { + String token = devToken.getString("token"); + if (token == null) { + continue; + } + JSONObject log = saveAppMessageLog(devToken.getString("dev_id"), devToken.getIntValue("client_id"), "risk", token, + event.getString("risk_id")); + try { + JSONObject type = new JSONObject(); + type.put("send_type", "risk"); + type.put("id", event.getString("risk_id")); + apnsMessageHelper.sendAppleMessageDetail( + LocaleSupport.localeMessage("app.message.title.risk"), LocaleSupport.localeMessage("app.message.body.risk"), + token, event, type); + AppMsgSender sender = senderMap.get(devToken.getString("client_type")); + if (token == null || sender == null) { + continue; } - }; - sendingAppleMsgPool.execute(task); + JSONObject managerMsg = new JSONObject(); + managerMsg.put("title", LocaleSupport.localeMessage("app.message.title.risk")); + managerMsg.put("body", + LocaleSupport.localeMessage("app.message.body.risk")); + managerMsg.put("type", type); + managerMsg.put("data", event); + managerMsg.put("msgType", "risk"); + AppMessage appMessage = new AppManagerMessageBuilder(managerMsg).buildMessage(); + sender.sendMessage(appMessage, devToken); + log.put("status", 2); + appMessageLogMapper.update(log); + } catch (Exception e) { + logger.error("出错了:" + e.getMessage()); + appMessageLogMapper.updateStatus(log.getString("send_id"), 1, e.getMessage()); + throw new ServerErrorException("Send App " + devToken.getString("client_type") + " Failed", e); + } } } From ca864b4f0bf91eafc6b0869da0ff8139ef539e63 Mon Sep 17 00:00:00 2001 From: "james.zhao" Date: Thu, 15 Nov 2018 18:01:33 +0800 Subject: [PATCH 13/45] update --- src/main/resources/i18n/msg_en.properties | 2 +- src/main/resources/i18n/msg_zh.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/i18n/msg_en.properties b/src/main/resources/i18n/msg_en.properties index 5af979791..e7663bb89 100644 --- a/src/main/resources/i18n/msg_en.properties +++ b/src/main/resources/i18n/msg_en.properties @@ -88,7 +88,7 @@ todo.bd.order=The merchant managed by you is transferred. Please submit the mate app.message.title.payment=Payment Message app.message.body.payment=You have received a payment of app.message.title.risk=Risk Control Message -app.message.body.risk=You have received a risk control reminder. Please check the email for details. +app.message.body.risk=You have received a risk control reminder. Please handle as soon as possible. app.message.title.notice=System Message app.message.body.refund=Your refund request has bean sent,refund count is app.message.body.cashback=You got a cashback of diff --git a/src/main/resources/i18n/msg_zh.properties b/src/main/resources/i18n/msg_zh.properties index 44b3ca6ea..c700ff329 100644 --- a/src/main/resources/i18n/msg_zh.properties +++ b/src/main/resources/i18n/msg_zh.properties @@ -84,7 +84,7 @@ todo.bd.order=有商户被调单,请尽快提交材料 app.message.title.payment=到账通知 app.message.body.payment=您有一笔新的到账, app.message.title.risk=风控通知 -app.message.body.risk=您收到了一条风控提醒,详情请查看邮件 +app.message.body.risk=您收到了一条风控提醒,请及时处理 app.message.title.notice=系统通知 app.message.body.refund=退款申请已提交渠道方处理,退款金额 app.message.body.cashback=您获得了一笔ROYALPAY返现,金额 From 39d76ade6b49da9933978330df1a72c8459d861c Mon Sep 17 00:00:00 2001 From: lujian Date: Thu, 15 Nov 2018 18:41:34 +0800 Subject: [PATCH 14/45] [fix] --- .../riskbusiness/core/impl/RiskBusinessServiceImpl.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java index a727e396e..1b77e3f0d 100644 --- a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java @@ -108,6 +108,11 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo @Resource private APNSMessageHelper apnsMessageHelper; + @Resource + public void setAppMsgSenders(AppMsgSender[] senders) { + Arrays.stream(senders).forEach(appMsgSender -> senderMap.put(appMsgSender.devType(), appMsgSender)); + } + private ThreadPoolExecutor sendingAppleMsgPool = new ThreadPoolExecutor(10, 30, 5, TimeUnit.SECONDS, new LinkedBlockingQueue()); @Override From 4a563a148f329a839a272c7efe7e6c62d0a2117f Mon Sep 17 00:00:00 2001 From: lujian Date: Thu, 15 Nov 2018 19:20:34 +0800 Subject: [PATCH 15/45] [fix] --- .../riskbusiness/core/impl/RiskBusinessServiceImpl.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java index 1b77e3f0d..39edbadc2 100644 --- a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java @@ -331,9 +331,9 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo JSONObject type = new JSONObject(); type.put("send_type", "risk"); type.put("id", event.getString("risk_id")); - apnsMessageHelper.sendAppleMessageDetail( - LocaleSupport.localeMessage("app.message.title.risk"), LocaleSupport.localeMessage("app.message.body.risk"), - token, event, type); +// apnsMessageHelper.sendAppleMessageDetail( +// LocaleSupport.localeMessage("app.message.title.risk"), LocaleSupport.localeMessage("app.message.body.risk"), +// token, event, type); AppMsgSender sender = senderMap.get(devToken.getString("client_type")); if (token == null || sender == null) { continue; @@ -352,7 +352,7 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo } catch (Exception e) { logger.error("出错了:" + e.getMessage()); appMessageLogMapper.updateStatus(log.getString("send_id"), 1, e.getMessage()); - throw new ServerErrorException("Send App " + devToken.getString("client_type") + " Failed", e); + throw new ServerErrorException("Send App " + devToken.getString("client_type") + " Failed" + ",token" + token, e); } } } From 06d4c3a51292fa587fee3f87d4ff657b8be78c7b Mon Sep 17 00:00:00 2001 From: lujian Date: Fri, 16 Nov 2018 16:43:36 +0800 Subject: [PATCH 16/45] [fix] --- .../core/impl/RiskBusinessServiceImpl.java | 61 ++++++++++--------- 1 file changed, 32 insertions(+), 29 deletions(-) diff --git a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java index 39edbadc2..46f665e31 100644 --- a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java @@ -321,39 +321,42 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo logger.debug("sendRiskAppMessage-" + client.getString("client_moniker") + "-" + "risk_id:"+event.getString("risk_id")); List tokens = clientDeviceTokenMapper.listTokensByClient_id(client.getIntValue("client_id")); for (JSONObject devToken : tokens) { - String token = devToken.getString("token"); - if (token == null) { - continue; - } - JSONObject log = saveAppMessageLog(devToken.getString("dev_id"), devToken.getIntValue("client_id"), "risk", token, - event.getString("risk_id")); - try { - JSONObject type = new JSONObject(); - type.put("send_type", "risk"); - type.put("id", event.getString("risk_id")); + Runnable task = () -> { + String token = devToken.getString("token"); + if (token == null || devToken.getString("client_type") == null) { + return; + } + JSONObject log = saveAppMessageLog(devToken.getString("dev_id"), devToken.getIntValue("client_id"), "risk" + devToken.getString("client_type"), token, + event.getString("risk_id")); + try { + JSONObject type = new JSONObject(); + type.put("send_type", "risk"); + type.put("id", event.getString("risk_id")); // apnsMessageHelper.sendAppleMessageDetail( // LocaleSupport.localeMessage("app.message.title.risk"), LocaleSupport.localeMessage("app.message.body.risk"), // token, event, type); - AppMsgSender sender = senderMap.get(devToken.getString("client_type")); - if (token == null || sender == null) { - continue; + AppMsgSender sender = senderMap.get(devToken.getString("client_type")); + if (StringUtils.isBlank(token) || sender == null) { + return; + } + JSONObject managerMsg = new JSONObject(); + managerMsg.put("title", LocaleSupport.localeMessage("app.message.title.risk")); + managerMsg.put("body", + LocaleSupport.localeMessage("app.message.body.risk")); + managerMsg.put("type", type); + managerMsg.put("data", new JSONObject()); + managerMsg.put("msgType", "risk"); + AppMessage appMessage = new AppManagerMessageBuilder(managerMsg).buildMessage(); + sender.sendMessage(appMessage, devToken); + log.put("status", 2); + appMessageLogMapper.update(log); + } catch (Exception e) { + logger.error("出错了:" + e.getMessage()); + appMessageLogMapper.updateStatus(log.getString("send_id"), 1, e.getMessage()); + throw new ServerErrorException("Send App " + devToken.getString("client_type") + " Failed" + ",token" + token, e); } - JSONObject managerMsg = new JSONObject(); - managerMsg.put("title", LocaleSupport.localeMessage("app.message.title.risk")); - managerMsg.put("body", - LocaleSupport.localeMessage("app.message.body.risk")); - managerMsg.put("type", type); - managerMsg.put("data", event); - managerMsg.put("msgType", "risk"); - AppMessage appMessage = new AppManagerMessageBuilder(managerMsg).buildMessage(); - sender.sendMessage(appMessage, devToken); - log.put("status", 2); - appMessageLogMapper.update(log); - } catch (Exception e) { - logger.error("出错了:" + e.getMessage()); - appMessageLogMapper.updateStatus(log.getString("send_id"), 1, e.getMessage()); - throw new ServerErrorException("Send App " + devToken.getString("client_type") + " Failed" + ",token" + token, e); - } + }; + sendingAppleMsgPool.execute(task); } } From 8580e7e4ce050915b565968dd7a6d3b8f4d6403f Mon Sep 17 00:00:00 2001 From: "james.zhao" Date: Sun, 18 Nov 2018 16:01:21 +0800 Subject: [PATCH 17/45] Update --- .../ui/static/payment/partner/templates/partner_pay_logs.html | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/ui/static/payment/partner/templates/partner_pay_logs.html b/src/main/ui/static/payment/partner/templates/partner_pay_logs.html index da618eaeb..71d3cadb5 100644 --- a/src/main/ui/static/payment/partner/templates/partner_pay_logs.html +++ b/src/main/ui/static/payment/partner/templates/partner_pay_logs.html @@ -32,8 +32,6 @@ ng-click="params.status='PARTIAL_REFUNDED';loadTradeLogs(1)">Partial Refund | Full Refund | - Yeepay

    From 3e814c663aa7705e7baeddfb95e40981bf9bdad1 Mon Sep 17 00:00:00 2001 From: luoyang Date: Mon, 19 Nov 2018 10:17:36 +0800 Subject: [PATCH 18/45] fix estimate monday --- .../core/impls/EstimateAnalysisServiceImpl.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/java/au/com/royalpay/payment/manage/analysis/core/impls/EstimateAnalysisServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/analysis/core/impls/EstimateAnalysisServiceImpl.java index c12c98bcb..2a8bd8270 100644 --- a/src/main/java/au/com/royalpay/payment/manage/analysis/core/impls/EstimateAnalysisServiceImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/analysis/core/impls/EstimateAnalysisServiceImpl.java @@ -82,7 +82,15 @@ public class EstimateAnalysisServiceImpl implements EstimateAnalysisService { //今天 Calendar calendar = Calendar.getInstance(); calendar.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai")); - Date todayDate = new Date(); + + //如果是周一,显示周五的数据 + Calendar cal=Calendar.getInstance(); + cal.setTime(new Date()); + int week=cal.get(Calendar.DAY_OF_WEEK); + if (week ==2) { + cal.add(Calendar.DATE, -3); + } + Date todayDate = cal.getTime(); String dateStr = DateFormatUtils.format(todayDate, "yyyy/MM/dd"); if (estimateAnalysisMapper.checkDayIsCleanDay(dateStr) != null) { JSONObject today = getDaySettleInfo(todayDate); From f885797ac42349359b5da64beb0c24c565fef287 Mon Sep 17 00:00:00 2001 From: luoyang Date: Mon, 19 Nov 2018 11:08:16 +0800 Subject: [PATCH 19/45] fix estimate monday --- .../impls/EstimateAnalysisServiceImpl.java | 66 +++++++++++-------- 1 file changed, 39 insertions(+), 27 deletions(-) diff --git a/src/main/java/au/com/royalpay/payment/manage/analysis/core/impls/EstimateAnalysisServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/analysis/core/impls/EstimateAnalysisServiceImpl.java index 2a8bd8270..5e5abe65e 100644 --- a/src/main/java/au/com/royalpay/payment/manage/analysis/core/impls/EstimateAnalysisServiceImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/analysis/core/impls/EstimateAnalysisServiceImpl.java @@ -90,10 +90,12 @@ public class EstimateAnalysisServiceImpl implements EstimateAnalysisService { if (week ==2) { cal.add(Calendar.DATE, -3); } - Date todayDate = cal.getTime(); + Date todayDate = new Date(); + Date todayClearDate = cal.getTime(); String dateStr = DateFormatUtils.format(todayDate, "yyyy/MM/dd"); if (estimateAnalysisMapper.checkDayIsCleanDay(dateStr) != null) { - JSONObject today = getDaySettleInfo(todayDate); + JSONObject todaySettle = getDaySettleInfo(todayDate); + JSONObject today = getDayClearInfo(todayClearDate, todaySettle); try { JSONObject realToday = todaySettleInfo(todayDate); today.put("t1", realToday.getBigDecimal("t1")); @@ -175,6 +177,41 @@ public class EstimateAnalysisServiceImpl implements EstimateAnalysisService { dayInfo.put("t1", 0); } + //T2 + maxDays = estimateAnalysisMapper.findLastCleanDays(end_date, 1); + end_date = maxDays.getString("date_str"); + cleanDays = estimateAnalysisMapper.findLastCleanDays(start_date, 1); + start_date = cleanDays.getString("date_str"); + JSONObject totalAmountT2 = estimateAnalysisMapper.findAllTransactionByDate(start_date, end_date, t2client); + if (totalAmountT2 != null) { + dayInfo.put("t2", totalAmountT2.getBigDecimal("total_amount")); + } else { + dayInfo.put("t2", 0); + } + + //T3 + maxDays = estimateAnalysisMapper.findLastCleanDays(end_date, 1); + end_date = maxDays.getString("date_str"); + cleanDays = estimateAnalysisMapper.findLastCleanDays(start_date, 1); + start_date = cleanDays.getString("date_str"); + JSONObject totalAmountT3 = estimateAnalysisMapper.findAllTransactionByDate(start_date, end_date, t3client); + if (totalAmountT3 != null) { + dayInfo.put("t3", totalAmountT3.getBigDecimal("total_amount")); + } else { + dayInfo.put("t3", 0); + } + dayInfo.put("estimate_date", endStr); + dayInfo.put("total", dayInfo.getBigDecimal("t1").add(dayInfo.getBigDecimal("t2")).add(dayInfo.getBigDecimal("t3"))); + return dayInfo; + } + + //把清算预估和到账金额分离 + public JSONObject getDayClearInfo(Date date, JSONObject dayInfo) { + dayInfo.put("platformGetSettleFee", BigDecimal.ZERO); + String endStr = DateFormatUtils.format(date, "yyyy/MM/dd"); + JSONObject maxDays = estimateAnalysisMapper.findMaxCleanDays(endStr); + String end_date = maxDays.getString("date_str"); + JSONObject cleanDays = estimateAnalysisMapper.findLastCleanDays(endStr, 1); List tencentSettle = platformSettlementMapper.findBySettleDate(new Date(maxDays.getDate("date_str").getTime() - 86400000L), "Wechat"); if (tencentSettle != null && tencentSettle.size()>0) { for (JSONObject logs : tencentSettle) { @@ -235,31 +272,6 @@ public class EstimateAnalysisServiceImpl implements EstimateAnalysisService { } cleanDays.clear(); - //T2 - maxDays = estimateAnalysisMapper.findLastCleanDays(end_date, 1); - end_date = maxDays.getString("date_str"); - cleanDays = estimateAnalysisMapper.findLastCleanDays(start_date, 1); - start_date = cleanDays.getString("date_str"); - JSONObject totalAmountT2 = estimateAnalysisMapper.findAllTransactionByDate(start_date, end_date, t2client); - if (totalAmountT2 != null) { - dayInfo.put("t2", totalAmountT2.getBigDecimal("total_amount")); - } else { - dayInfo.put("t2", 0); - } - - //T3 - maxDays = estimateAnalysisMapper.findLastCleanDays(end_date, 1); - end_date = maxDays.getString("date_str"); - cleanDays = estimateAnalysisMapper.findLastCleanDays(start_date, 1); - start_date = cleanDays.getString("date_str"); - JSONObject totalAmountT3 = estimateAnalysisMapper.findAllTransactionByDate(start_date, end_date, t3client); - if (totalAmountT3 != null) { - dayInfo.put("t3", totalAmountT3.getBigDecimal("total_amount")); - } else { - dayInfo.put("t3", 0); - } - dayInfo.put("estimate_date", endStr); - dayInfo.put("total", dayInfo.getBigDecimal("t1").add(dayInfo.getBigDecimal("t2")).add(dayInfo.getBigDecimal("t3"))); return dayInfo; } From 1b43e2ac4d355a29f46ff021cdc0eb1a1ab387b0 Mon Sep 17 00:00:00 2001 From: lujian Date: Mon, 19 Nov 2018 14:01:58 +0800 Subject: [PATCH 20/45] =?UTF-8?q?[fix]=E6=98=AF=E5=90=A6=E5=8F=91=E9=80=81?= =?UTF-8?q?=E5=95=86=E6=88=B7=E3=80=81=E8=B6=85=E6=9C=9F=E6=8F=90=E9=86=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/impl/RiskBusinessServiceImpl.java | 33 ++++++++++++++-- .../core/impl/RiskUploadServiceIpml.java | 2 +- src/main/ui/static/analysis/risk_business.js | 39 ++++++++++++++++--- .../analysis/templates/audit_material.html | 6 +++ .../analysis/templates/new_riskEvent.html | 9 +++++ .../analysis/templates/riskEvent_detail.html | 22 ++++++++++- .../analysis/templates/risk_business.html | 13 ++++++- 7 files changed, 110 insertions(+), 14 deletions(-) diff --git a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java index 46f665e31..7d7279375 100644 --- a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java @@ -17,6 +17,7 @@ import au.com.royalpay.payment.manage.notice.core.MailService; import au.com.royalpay.payment.manage.pushMessage.APNSMessageHelper; import au.com.royalpay.payment.manage.pushMessage.bean.AppManagerMessageBuilder; import au.com.royalpay.payment.manage.riskbusiness.core.RiskBusinessService; +import au.com.royalpay.payment.manage.riskbusiness.enums.RiskEmailStatusEnum; import au.com.royalpay.payment.manage.riskbusiness.enums.RiskResultTypeEnum; import au.com.royalpay.payment.manage.signin.beans.TodoNotice; import au.com.royalpay.payment.manage.signin.core.ManagerTodoNoticeProvider; @@ -55,6 +56,7 @@ import org.thymeleaf.spring4.SpringTemplateEngine; import javax.servlet.http.HttpServletResponse; import java.io.*; import java.net.URL; +import java.text.ParseException; import java.util.*; import javax.annotation.Resource; import java.util.concurrent.LinkedBlockingQueue; @@ -138,6 +140,31 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo } PageList riskEvents = riskEventMapper.listRisksByPage(params, new PageBounds(params.getInteger("page"), 10, Order.formString("create_time.desc"))); + + /** + * 以下为判断调单事件是否过期 + * 微信调单、支付宝调单、royalpay调单 + * 未处理、已发送、待审核、打回 + */ + Date currentDate = new Date(), replyDate; + Integer resultType, orderType; + boolean isPassTimeout = false; + for (JSONObject riskEvent : riskEvents) { + try { + replyDate = DateUtils.parseDate(riskEvent.getString("reply_email_date"), "yyyy-MM-dd"); + } catch (ParseException e) { + replyDate = currentDate; + e.printStackTrace(); + } + resultType = riskEvent.getInteger("result_type"); + orderType = riskEvent.getInteger("order_type"); + isPassTimeout = (currentDate.after(replyDate)) && + (!resultType.equals(RiskResultTypeEnum.MATERIAL_AUDIT_PASS.getResultType())) && + (!resultType.equals(RiskResultTypeEnum.ALREADY_HANDLED.getResultType())) && + (!orderType.equals(RiskOrderTypeEnum.WARNING_ORDER.getOrderType())) && + (!orderType.equals(RiskOrderTypeEnum.GENERAL_ORDER.getOrderType())); + riskEvent.put("pass_timeout", isPassTimeout); + } return PageListUtils.buildPageListResult(riskEvents); } @@ -164,9 +191,7 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo String realOrderIds = riskEvent.getString("real_order_ids"); JSONObject client = clientMapper.findClientByMonikerAll(riskEvent.getString("client_moniker")); List tradeLogs = new ArrayList<>(); - /** - * 通用号调单会有client为空的情况,所以无法查到订单信息 - */ + // 通用号调单会有client为空的情况,所以无法查到订单信息 if (client != null && StringUtils.isNotBlank(realOrderIds)) { String[] orderIdArray = realOrderIds.trim().split(","); JSONObject orderInfo = new JSONObject(); @@ -299,7 +324,7 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo try { String emailId = mailService.sendRiskEmail(title, emailsTos.isEmpty() ? "" : StringUtils.join(emailsTos, ","), emailsCcs.isEmpty() ? "" : StringUtils.join(emailsCcs, ","), "",content, null,event.getIntValue("order_type")); - event.put("email_status",1); + event.put("email_status", RiskEmailStatusEnum.ALREADY_SEND.getEmailStatus()); event.put("result_type", RiskResultTypeEnum.SEND_EMAIL_TO_BD.getResultType()); event.put("submit_url",uploadUrl); Integer orderType = event.getInteger("order_type"); diff --git a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskUploadServiceIpml.java b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskUploadServiceIpml.java index 6cea25854..1bd58955b 100644 --- a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskUploadServiceIpml.java +++ b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskUploadServiceIpml.java @@ -40,7 +40,7 @@ public class RiskUploadServiceIpml implements RiskUploadService { @Override public void submitMaterial(JSONObject material) { JSONObject event = riskEventMapper.findById(material.getString("risk_id")); - material.putIfAbsent("update_time", DateFormatUtils.format(new Date(), "yyyy-MM-dd hh:mm:ss")); + material.put("update_time", DateFormatUtils.format(new Date(), "yyyy-MM-dd hh:mm:ss")); riskMaterialMapper.save(material); material.put("material_id",riskMaterialMapper.findAllMaterials(material.getString("risk_id")).get(0).getString("material_id")); for(int i=1;i<=10;i++){ diff --git a/src/main/ui/static/analysis/risk_business.js b/src/main/ui/static/analysis/risk_business.js index 113e07cc1..7bdc9f72d 100644 --- a/src/main/ui/static/analysis/risk_business.js +++ b/src/main/ui/static/analysis/risk_business.js @@ -167,7 +167,11 @@ define(['angular', 'jquery', 'uiRouter', './monitoring/analysis-monitoring'], $scope.orderTypes = orderTypesMap; $scope.resultTypes = resultTypesMap; $scope.channelResults = channelResultArray; + if (riskEvent.data.is_send_client == 1) + riskEvent.data.is_send_client = true; $scope.riskEvent = riskEvent.data; + // 编辑表格的数据保存对象,重新从源数据复制,从而取消保存操作时不会更新视图 + $scope.riskEventEdit = angular.copy(riskEvent.data); //var index = $scope.riskEvent.order_ids.lastIndexOf(","); //$scope.riskEvent.order_ids = $scope.riskEvent.order_ids.substring(0, index) + "," + $scope.riskEvent.order_ids.substring(index + 1); // 获取数据库中对应的渠道字段 @@ -179,8 +183,28 @@ define(['angular', 'jquery', 'uiRouter', './monitoring/analysis-monitoring'], } else { orderChannel = null; } - // 编辑表格的数据保存对象,重新从源数据复制,从而取消保存操作时不会更新视图 - $scope.riskEventEdit = angular.copy(riskEvent.data); + + /** + * order_ids在指定位置换行 + * @param str + * @param position + * @returns {*} + */ + $scope.splitStr = function (str, position) { + var strArr = str.split(","); + var resultStr = ''; + for (var i = 0; i < strArr.length; i++) { + resultStr += strArr[i]; + if (i == (strArr.length - 1)) + break; + if ((i + 1) % position == 0) + resultStr += ", "; + else + resultStr += ","; + } + return resultStr; + }; + $scope.riskEvent.order_ids = $scope.splitStr($scope.riskEvent.order_ids, 3); // order_type转换为string类型是因为前端select控件这样才会显示初值 $scope.riskEventEdit.order_type += ""; @@ -531,7 +555,7 @@ define(['angular', 'jquery', 'uiRouter', './monitoring/analysis-monitoring'], }); }); }); - } + }; } ]); @@ -550,7 +574,7 @@ define(['angular', 'jquery', 'uiRouter', './monitoring/analysis-monitoring'], {key: new Date().getTime(), value: ""}); // 用时间戳作为每个item的key // 增加新的input后允许删除 $scope.canMinus = true; - } + }; $scope.decrease = function($index) { // 如果input大于1,删除 @@ -561,7 +585,7 @@ define(['angular', 'jquery', 'uiRouter', './monitoring/analysis-monitoring'], if ($scope.materials.length == 1) { $scope.canMinus = false; } - } + }; var array=new Array(); $scope.combineMaterials = function() { for (var i = 0; i < $scope.materials.length; i++) { @@ -571,8 +595,9 @@ define(['angular', 'jquery', 'uiRouter', './monitoring/analysis-monitoring'], } console.log(JSON.stringify(array)); return JSON.stringify(array); - } + }; + $scope.is_send_client = false; $scope.save = function(form) { if (form.$invalid) { angular.forEach(form, function (item, key) { @@ -597,6 +622,8 @@ define(['angular', 'jquery', 'uiRouter', './monitoring/analysis-monitoring'], $scope.riskEvent.alipay_materials = $scope.combineMaterials(); + $scope.riskEvent.is_send_client = $scope.is_send_client; + $http.post('/risk/business/events', $scope.riskEvent).then(function (resp) { commonDialog.alert({ title: 'Success', diff --git a/src/main/ui/static/analysis/templates/audit_material.html b/src/main/ui/static/analysis/templates/audit_material.html index b62e28732..d4e157704 100644 --- a/src/main/ui/static/analysis/templates/audit_material.html +++ b/src/main/ui/static/analysis/templates/audit_material.html @@ -156,4 +156,10 @@
    + diff --git a/src/main/ui/static/analysis/templates/new_riskEvent.html b/src/main/ui/static/analysis/templates/new_riskEvent.html index d1308f634..2376af142 100644 --- a/src/main/ui/static/analysis/templates/new_riskEvent.html +++ b/src/main/ui/static/analysis/templates/new_riskEvent.html @@ -233,6 +233,15 @@ +
    + +
    + +
    +
    + diff --git a/src/main/ui/static/analysis/templates/riskEvent_detail.html b/src/main/ui/static/analysis/templates/riskEvent_detail.html index cf87f3394..a95d9b951 100644 --- a/src/main/ui/static/analysis/templates/riskEvent_detail.html +++ b/src/main/ui/static/analysis/templates/riskEvent_detail.html @@ -142,6 +142,16 @@ +
    + +
    + +
    +
    +
    @@ -408,12 +418,13 @@ for="order-ids-input">Platform Transaction IDs
    - +

    +
    + +
    + +
    +
    +
    From 8cd3940c7c915d4c1e3ecd2a228170c00ee6daa2 Mon Sep 17 00:00:00 2001 From: lujian Date: Mon, 26 Nov 2018 14:30:57 +0800 Subject: [PATCH 38/45] =?UTF-8?q?[fix]=E9=A3=8E=E6=8E=A7=E5=A4=84=E7=90=86?= =?UTF-8?q?=E6=B5=81=E7=A8=8B=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../appclient/core/RetailAppService.java | 2 + .../core/impls/RetailAppServiceImp.java | 21 +++++++ .../appclient/web/RetailAppController.java | 4 +- .../riskbusiness/RiskProcessLogMapper.java | 24 ++++++++ .../core/RiskBusinessService.java | 2 + .../core/RiskProcessLogService.java | 28 ++++++++++ .../core/impl/RiskBusinessServiceImpl.java | 55 +++++++++++++++---- .../core/impl/RiskProcessLogServiceImpl.java | 45 +++++++++++++++ .../core/impl/RiskUploadServiceIpml.java | 32 +++++++---- .../enums/RiskResultTypeEnum.java | 13 +++++ .../web/RiskBusinessController.java | 22 +++++--- .../web/RiskFileUploadController.java | 15 ++++- .../web/RiskProcessLogController.java | 33 +++++++++++ src/main/ui/static/analysis/risk_business.js | 40 +++++++++++++- .../analysis/templates/new_riskEvent.html | 8 ++- .../analysis/templates/riskEvent_detail.html | 11 ++++ 16 files changed, 319 insertions(+), 36 deletions(-) create mode 100644 src/main/java/au/com/royalpay/payment/manage/mappers/riskbusiness/RiskProcessLogMapper.java create mode 100644 src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/RiskProcessLogService.java create mode 100644 src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskProcessLogServiceImpl.java create mode 100644 src/main/java/au/com/royalpay/payment/manage/riskbusiness/web/RiskProcessLogController.java diff --git a/src/main/java/au/com/royalpay/payment/manage/appclient/core/RetailAppService.java b/src/main/java/au/com/royalpay/payment/manage/appclient/core/RetailAppService.java index 94850ee79..9b99846f7 100644 --- a/src/main/java/au/com/royalpay/payment/manage/appclient/core/RetailAppService.java +++ b/src/main/java/au/com/royalpay/payment/manage/appclient/core/RetailAppService.java @@ -167,4 +167,6 @@ public interface RetailAppService { JSONObject getStyle(); void cancelCouponAccuessLog(String accuess_id, String remark); + + void submitMaterial(JSONObject material, JSONObject device); } 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 4c69e53fc..ebe0154a5 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 @@ -33,6 +33,9 @@ import au.com.royalpay.payment.manage.notice.core.NoticePartner; import au.com.royalpay.payment.manage.openim.core.CustomerServiceService; import au.com.royalpay.payment.manage.pushMessage.APNSMessageHelper; import au.com.royalpay.payment.manage.pushMessage.bean.AppManagerMessageBuilder; +import au.com.royalpay.payment.manage.riskbusiness.core.RiskProcessLogService; +import au.com.royalpay.payment.manage.riskbusiness.core.RiskUploadService; +import au.com.royalpay.payment.manage.riskbusiness.enums.RiskResultTypeEnum; import au.com.royalpay.payment.manage.signin.beans.ChangePwdBean; import au.com.royalpay.payment.manage.signin.core.SignInAccountService; import au.com.royalpay.payment.manage.signin.core.impls.SignInAccountServiceImpl; @@ -176,6 +179,10 @@ public class RetailAppServiceImp implements RetailAppService { private CouponAccuessLogMapper couponAccuessLogMapper; @Resource private CouponValidateService couponValidateService; + @Resource + private RiskProcessLogService riskProcessLogService; + @Resource + private RiskUploadService riskUploadService; private Map senderMap = new HashMap<>(); private final String fileName[] = { "client_bank_file", "client_id_file", "client_company_file" }; @@ -1861,4 +1868,18 @@ public class RetailAppServiceImp implements RetailAppService { return sourceStr; } + @Override + public void submitMaterial(JSONObject material, JSONObject device) { + riskUploadService.submitMaterial(material); + JSONObject account = clientAccountMapper.findById(device.getString("account_id")); + if (account == null) + account = new JSONObject(); + riskProcessLogService.addRiskProcessLog(material.getString("risk_id"), + account.getString("account_id"), + account.getString("display_name"), + RiskResultTypeEnum.WAIT_FOR_AUDIT.getRemark(), + RiskResultTypeEnum.SEND_EMAIL_TO_BD.getResultType(), + RiskResultTypeEnum.WAIT_FOR_AUDIT.getResultType()); + } + } diff --git a/src/main/java/au/com/royalpay/payment/manage/appclient/web/RetailAppController.java b/src/main/java/au/com/royalpay/payment/manage/appclient/web/RetailAppController.java index b2c1c30d8..740cd6c6b 100644 --- a/src/main/java/au/com/royalpay/payment/manage/appclient/web/RetailAppController.java +++ b/src/main/java/au/com/royalpay/payment/manage/appclient/web/RetailAppController.java @@ -635,8 +635,8 @@ public class RetailAppController { * @param material */ @PostMapping(value = "/risk/business/events") - public void uploadMaterial(@RequestBody JSONObject material) { - riskUploadService.submitMaterial(material); + public void uploadMaterial(@RequestBody JSONObject material, @ModelAttribute(RETAIL_DEVICE) JSONObject device) { + retailAppService.submitMaterial(material, device); } @RequestMapping(value = "/risk/business/upload/files", method = RequestMethod.POST) diff --git a/src/main/java/au/com/royalpay/payment/manage/mappers/riskbusiness/RiskProcessLogMapper.java b/src/main/java/au/com/royalpay/payment/manage/mappers/riskbusiness/RiskProcessLogMapper.java new file mode 100644 index 000000000..aeaf6848d --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/mappers/riskbusiness/RiskProcessLogMapper.java @@ -0,0 +1,24 @@ +package au.com.royalpay.payment.manage.mappers.riskbusiness; + +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 com.github.miemiedev.mybatis.paginator.domain.PageBounds; +import com.github.miemiedev.mybatis.paginator.domain.PageList; +import org.apache.ibatis.annotations.Param; + +/** + * @Description: + * @Author: lujian + * @Date: 2018/11/22 15:32 + */ +@AutoMapper(tablename = "risk_process_log", pkName = "risk_process_id") +public interface RiskProcessLogMapper { + + @AutoSql(type = SqlType.SELECT) + PageList getRiskProcessLogs(@Param("risk_id") String riskId, PageBounds pagination); + + @AutoSql(type = SqlType.INSERT) + void addRiskProcessLog(JSONObject log); +} diff --git a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/RiskBusinessService.java b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/RiskBusinessService.java index 9a426ed12..778eb6069 100644 --- a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/RiskBusinessService.java +++ b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/RiskBusinessService.java @@ -110,5 +110,7 @@ public interface RiskBusinessService { */ JSONObject getRiskEventMaterialsRemark(String riskId); + JSONObject riskEventMaterialPass(JSONObject params, JSONObject manager); + JSONObject updateIsSendClient(String riskId); } diff --git a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/RiskProcessLogService.java b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/RiskProcessLogService.java new file mode 100644 index 000000000..2050feeb2 --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/RiskProcessLogService.java @@ -0,0 +1,28 @@ +package au.com.royalpay.payment.manage.riskbusiness.core; + +import com.alibaba.fastjson.JSONObject; +import com.github.miemiedev.mybatis.paginator.domain.PageBounds; +import com.github.miemiedev.mybatis.paginator.domain.PageList; + +/** + * @Description: + * @Author: lujian + * @Date: 2018/11/22 15:40 + */ +public interface RiskProcessLogService { + + /** + * 获取事件处理流程 + * @param riskId + * @return + */ + PageList getRiskProcessLogs(String riskId); + + /** + * 新增处理流程 + * @param log + */ + void addRiskProcessLog(JSONObject log); + + void addRiskProcessLog(String riskId, String operatorId, String operator, String remark, int resultTypeFrom, int resultTypeTo); +} diff --git a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java index 56792f71c..2ff7d6db5 100644 --- a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java @@ -17,6 +17,7 @@ import au.com.royalpay.payment.manage.notice.core.MailService; import au.com.royalpay.payment.manage.pushMessage.APNSMessageHelper; import au.com.royalpay.payment.manage.pushMessage.bean.AppManagerMessageBuilder; import au.com.royalpay.payment.manage.riskbusiness.core.RiskBusinessService; +import au.com.royalpay.payment.manage.riskbusiness.core.RiskProcessLogService; import au.com.royalpay.payment.manage.riskbusiness.enums.RiskEmailStatusEnum; import au.com.royalpay.payment.manage.riskbusiness.enums.RiskResultTypeEnum; import au.com.royalpay.payment.manage.signin.beans.TodoNotice; @@ -95,6 +96,9 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo private RoyalThreadPoolExecutor royalThreadPoolExecutor; private final String UPLOAD_MAIL_PREFIX = "UPLOAD_MAIL"; + @Resource + private RiskProcessLogService riskProcessLogService; + @Resource private RiskMaterialMapper riskMaterialMapper; @Resource @@ -271,6 +275,13 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo public void addRiskEvent(JSONObject params, JSONObject manager) { params = getEvent(params); riskEventMapper.save(params); + params = riskEventMapper.findAll(params).get(0); + riskProcessLogService.addRiskProcessLog(params.getString("risk_id"), + params.getString("fillin_id"), + params.getString("fillin_person"), + RiskResultTypeEnum.NOT_HANDLED.getRemark(), + RiskResultTypeEnum.NOT_HANDLED.getResultType(), + RiskResultTypeEnum.NOT_HANDLED.getResultType()); } @Override @@ -336,6 +347,12 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo event.put("result_type", RiskResultTypeEnum.ALREADY_HANDLED.getResultType()); } riskEventMapper.update(event); + riskProcessLogService.addRiskProcessLog(event.getString("risk_id"), + event.getString("fillin_id"), + event.getString("fillin_person"), + RiskResultTypeEnum.SEND_EMAIL_TO_BD.getRemark(), + RiskResultTypeEnum.NOT_HANDLED.getResultType(), + RiskResultTypeEnum.SEND_EMAIL_TO_BD.getResultType()); if(event.getIntValue("is_send_client") == 1){ sendAppRiskMessage(event); } @@ -416,10 +433,17 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo try { String emailId = mailService.sendRiskEmail("You need to resubmit risk materials", emailsTos.isEmpty() ? "" : StringUtils.join(emailsTos, ","), emailsCcs.isEmpty() ? "" : StringUtils.join(emailsCcs, ","), "",content, null,event.getIntValue("order_type")); - event.put("email_status",2); + event.put("email_status",RiskEmailStatusEnum.BACK_AND_SEND.getEmailStatus()); event.put("result_type",RiskResultTypeEnum.MATERIAL_NOT_PASS.getResultType()); event.put("submit_url",uploadUrl); riskEventMapper.update(event); + // 日志记录 + riskProcessLogService.addRiskProcessLog(riskId, + event.getString("fillin_id"), + event.getString("fillin_person"), + RiskResultTypeEnum.MATERIAL_NOT_PASS.getRemark(), + RiskResultTypeEnum.WAIT_FOR_AUDIT.getResultType(), + RiskResultTypeEnum.MATERIAL_NOT_PASS.getResultType()); } catch (Exception e) { throw new EmailException("Email Sending Failed", e); } @@ -462,14 +486,13 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo expireDay = "3"; } )*/ - // 原来设定的过期时间是7天,现在改成半个月 - String expireDay = "180"; + // 原来设定的过期时间是7天 + String expireDay = "3650"; stringRedisTemplate.boundValueOps(getRiskUploadKey(codeKey)).set(codeKeyValue, Long.parseLong(expireDay), TimeUnit.DAYS); String uploadUrl = PlatformEnvironment.getEnv().concatUrl("/risk/upload/") + event.getString("risk_id") + "/" + codeKey; int orderType = event.getIntValue("order_type"); if (orderType == 1 || orderType == 2) uploadUrl = PlatformEnvironment.getEnv().concatUrl("/manage.html#/analysis/monitoring/") + event.getString("risk_id") + "/bd/detail?codeKey=" + codeKey; - //uploadUrl = "localhost:9009" + "/manage.html#/analysis/monitoring/" + event.getString("risk_id") + "/bd/detail"; List bds = clientBDMapper.listClientBDInfoAvailable(client.getIntValue("client_id"), new Date()); List bdNames = new ArrayList<>(); List bdEmails = new ArrayList<>(); @@ -509,6 +532,11 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo } List orders = new ArrayList(); int isSendClient = event.getIntValue("is_send_client"); + ctx.setVariable("emailsTos", bdEmails); + if (isSendClient == 1) { + ctx.setVariable("emailsTos", clientEmails); + ctx.setVariable("emailsCcs", bdEmails); + } switch (event.getIntValue("order_type")){ case 1: case 2: @@ -521,7 +549,6 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo } ctx.setVariable("orders", orders); ctx.setVariable("title","Your merchants needs to submit risk materials"); - ctx.setVariable("emailsTos", bdEmails); break; case 3: for(String orderId : realOrderIds){ @@ -548,12 +575,6 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo // ctx.setVariable("files",attachList); case 4: ctx.setVariable("title","RoyalPay风控调查 — " + client.getString("short_name")); - ctx.setVariable("emailsTos", bdEmails); - if (isSendClient == 1) { - ctx.setVariable("emailsTos", clientEmails); - ctx.setVariable("emailsCcs", bdEmails); - } - break; } return ctx; @@ -866,6 +887,18 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo return result; } + @Override + public JSONObject riskEventMaterialPass(JSONObject params, JSONObject manager) { + riskEventMapper.update(params); + riskProcessLogService.addRiskProcessLog(params.getString("risk_id"), + manager.getString("manager_id"), + manager.getString("display_name"), + RiskResultTypeEnum.MATERIAL_AUDIT_PASS.getRemark(), + params.getIntValue("result_type"), + RiskResultTypeEnum.MATERIAL_AUDIT_PASS.getResultType()); + return params; + } + @Override public JSONObject updateIsSendClient(String riskId) { JSONObject event = riskEventMapper.findById(riskId); diff --git a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskProcessLogServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskProcessLogServiceImpl.java new file mode 100644 index 000000000..2743fd4bd --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskProcessLogServiceImpl.java @@ -0,0 +1,45 @@ +package au.com.royalpay.payment.manage.riskbusiness.core.impl; + +import au.com.royalpay.payment.manage.mappers.riskbusiness.RiskProcessLogMapper; +import au.com.royalpay.payment.manage.riskbusiness.core.RiskProcessLogService; +import com.alibaba.fastjson.JSONObject; +import com.github.miemiedev.mybatis.paginator.domain.Order; +import com.github.miemiedev.mybatis.paginator.domain.PageBounds; +import com.github.miemiedev.mybatis.paginator.domain.PageList; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +/** + * @Description: + * @Author: lujian + * @Date: 2018/11/22 15:46 + */ +@Service +public class RiskProcessLogServiceImpl implements RiskProcessLogService { + + @Resource + private RiskProcessLogMapper riskProcessLogMapper; + + @Override + public PageList getRiskProcessLogs(String riskId) { + return riskProcessLogMapper.getRiskProcessLogs(riskId, new PageBounds(Order.formString("create_time"))); + } + + @Override + public void addRiskProcessLog(JSONObject log) { + riskProcessLogMapper.addRiskProcessLog(log); + } + + @Override + public void addRiskProcessLog(String riskId, String operatorId, String operator, String remark, int resultTypeFrom, int resultTypeTo) { + JSONObject log = new JSONObject(); + log.put("risk_id", riskId); + log.put("operator_id", operatorId); + log.put("operator", operator); + log.put("remark", remark); + log.put("result_type_from", resultTypeFrom); + log.put("result_type_to", resultTypeTo); + riskProcessLogMapper.addRiskProcessLog(log); + } +} diff --git a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskUploadServiceIpml.java b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskUploadServiceIpml.java index 65faa5f9e..e53ecf4d0 100644 --- a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskUploadServiceIpml.java +++ b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskUploadServiceIpml.java @@ -7,6 +7,7 @@ import au.com.royalpay.payment.manage.mappers.riskbusiness.RiskMaterialMapper; import au.com.royalpay.payment.manage.mappers.system.ClientMapper; import au.com.royalpay.payment.manage.notice.core.MailService; import au.com.royalpay.payment.manage.riskbusiness.core.RiskBusinessService; +import au.com.royalpay.payment.manage.riskbusiness.core.RiskProcessLogService; import au.com.royalpay.payment.manage.riskbusiness.core.RiskUploadService; import au.com.royalpay.payment.manage.riskbusiness.enums.RiskResultTypeEnum; import au.com.royalpay.payment.tools.exceptions.BadRequestException; @@ -17,6 +18,7 @@ import org.apache.commons.lang3.time.DateFormatUtils; import org.apache.commons.lang3.time.DateUtils; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.thymeleaf.context.Context; import org.thymeleaf.spring4.SpringTemplateEngine; @@ -34,15 +36,22 @@ public class RiskUploadServiceIpml implements RiskUploadService { @Resource private RiskEventMapper riskEventMapper; @Resource + private RiskProcessLogService riskProcessLogService; + @Resource private StringRedisTemplate stringRedisTemplate; private final String UPLOAD_MAIL_PREFIX = "UPLOAD_MAIL"; @Override public void submitMaterial(JSONObject material) { - JSONObject event = riskEventMapper.findById(material.getString("risk_id")); + String riskId = material.getString("risk_id"); + JSONObject event = riskEventMapper.findById(riskId); + Integer resultType = event.getInteger("result_type"); + if (!resultType.equals(RiskResultTypeEnum.SEND_EMAIL_TO_BD.getResultType()) && !resultType.equals(RiskResultTypeEnum.MATERIAL_NOT_PASS.getResultType())) { + throw new BadRequestException("Committed Already"); + } material.put("update_time", DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss")); riskMaterialMapper.save(material); - material.put("material_id",riskMaterialMapper.findAllMaterials(material.getString("risk_id")).get(0).getString("material_id")); + material.put("material_id",riskMaterialMapper.findAllMaterials(riskId).get(0).getString("material_id")); for(int i=1;i<=10;i++){ if(material.containsKey("file"+i+"_url")){ List urls = (List)material.get("file"+i+"_url"); @@ -67,16 +76,17 @@ public class RiskUploadServiceIpml implements RiskUploadService { @Override public void checkUploadMailKey(String codeKey,String risk_id) { JSONObject event = riskEventMapper.findById(risk_id); + //到期日前一天的下午6点前url可用 - try { - String reply = DateFormatUtils.format(DateUtils.addDays(event.getDate("reply_email_date"),-1),"yyyy-MM-dd 18:00:00"); - if(new Date().after( DateUtils.parseDate(reply,new String[]{"yyyy-MM-dd HH:mm:ss"}))){ - deleteUploadMailKey(codeKey); - throw new BadRequestException("Url expired"); - } - } catch (ParseException e) { - e.printStackTrace(); - } +// try { +// String reply = DateFormatUtils.format(DateUtils.addDays(event.getDate("reply_email_date"),-1),"yyyy-MM-dd 18:00:00"); +// if(new Date().after( DateUtils.parseDate(reply,new String[]{"yyyy-MM-dd HH:mm:ss"}))){ +// deleteUploadMailKey(codeKey); +// throw new BadRequestException("Url expired"); +// } +// } catch (ParseException e) { +// e.printStackTrace(); +// } if (StringUtils.isNotEmpty(codeKey)) { String redisUpload = stringRedisTemplate.boundValueOps(getRiskUploadKey(codeKey)).get(); diff --git a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/enums/RiskResultTypeEnum.java b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/enums/RiskResultTypeEnum.java index 2938586d8..9aeb054c7 100644 --- a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/enums/RiskResultTypeEnum.java +++ b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/enums/RiskResultTypeEnum.java @@ -15,6 +15,15 @@ public enum RiskResultTypeEnum { private Integer resultType; + private static final String[] REMARK_ARR = { + "风控事件已创建", + "已发送邮件,资料完善中", + "资料已提交,等待审核", + "材料审核通过", + "材料打回", + "已处理" + }; + RiskResultTypeEnum(Integer resultType) { this.resultType = resultType; } @@ -26,4 +35,8 @@ public enum RiskResultTypeEnum { public void setResultType(Integer resultType) { this.resultType = resultType; } + + public String getRemark() { + return REMARK_ARR[resultType]; + } } diff --git a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/web/RiskBusinessController.java b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/web/RiskBusinessController.java index 2629b5a9a..7827b312e 100644 --- a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/web/RiskBusinessController.java +++ b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/web/RiskBusinessController.java @@ -6,23 +6,17 @@ import au.com.royalpay.payment.manage.permission.manager.ManagerMapping; import au.com.royalpay.payment.manage.riskbusiness.bean.RiskEventQuery; import au.com.royalpay.payment.manage.riskbusiness.core.RiskBusinessService; import au.com.royalpay.payment.manage.riskbusiness.core.RiskMaterialService; +import au.com.royalpay.payment.manage.riskbusiness.core.RiskProcessLogService; import au.com.royalpay.payment.manage.riskbusiness.enums.RiskResultTypeEnum; import au.com.royalpay.payment.tools.CommonConsts; import au.com.royalpay.payment.tools.permission.enums.ManagerRole; -import cn.yixblog.support.mybatis.autosql.annotations.AutoSql; import com.alibaba.fastjson.JSONObject; -import com.sun.org.apache.xerces.internal.impl.dv.xs.BooleanDV; -import com.sun.org.apache.xpath.internal.operations.Bool; -import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -import java.text.DateFormat; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Date; + import java.util.List; /** @@ -43,6 +37,9 @@ public class RiskBusinessController { @Autowired private ClientManager clientManager; + @Autowired + private RiskProcessLogService riskProcessLogService; + @GetMapping(value = "events") public JSONObject getRiskEvents(RiskEventQuery riskEventQuery, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) { JSONObject params = riskEventQuery.toJSON(); @@ -55,6 +52,7 @@ public class RiskBusinessController { JSONObject riskEvent = riskBusinessService.getRiskEventDetail(riskId); List tradeLogs = riskBusinessService.getRiskEventOrderList(riskEvent); riskEvent.put("tradeLogs", tradeLogs); + riskEvent.put("process_logs", riskProcessLogService.getRiskProcessLogs(riskId)); return riskEvent; } @@ -71,6 +69,12 @@ public class RiskBusinessController { riskBusinessService.updateRiskEvent(params); } + @PutMapping(value = "events/pass") + public void riskEventMaterialPass(@RequestBody JSONObject params, + @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) { + riskBusinessService.riskEventMaterialPass(params, manager); + } + @GetMapping(value = "/{risk_id}/download/materialsAsZIP") public void downloadComplianceZip(@PathVariable("risk_id") String riskId, HttpServletResponse response) throws Exception { riskBusinessService.downloadAuditMaterialZiP(riskId, response); @@ -129,8 +133,8 @@ public class RiskBusinessController { params.put("result_type", RiskResultTypeEnum.ALREADY_HANDLED.getResultType()); } riskBusinessService.updateRiskEvent(params); - } + @RequestMapping(value = "/{risk_id}/urge",method = RequestMethod.PUT) public void urgeEmail(@PathVariable String risk_id) throws IOException { riskBusinessService.sendUrgeEmail(risk_id); diff --git a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/web/RiskFileUploadController.java b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/web/RiskFileUploadController.java index 2145b046d..63da4f111 100644 --- a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/web/RiskFileUploadController.java +++ b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/web/RiskFileUploadController.java @@ -1,7 +1,10 @@ package au.com.royalpay.payment.manage.riskbusiness.web; import au.com.royalpay.payment.manage.riskbusiness.core.RiskBusinessService; +import au.com.royalpay.payment.manage.riskbusiness.core.RiskProcessLogService; import au.com.royalpay.payment.manage.riskbusiness.core.RiskUploadService; +import au.com.royalpay.payment.manage.riskbusiness.enums.RiskResultTypeEnum; +import au.com.royalpay.payment.tools.CommonConsts; import com.alibaba.fastjson.JSONObject; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; @@ -15,6 +18,8 @@ public class RiskFileUploadController { private RiskUploadService riskUploadService; @Resource private RiskBusinessService riskBusinessService; + @Resource + private RiskProcessLogService riskProcessLogService; /** * 上传材料的链接 @@ -41,9 +46,17 @@ public class RiskFileUploadController { * @param material */ @RequestMapping(value = "/{codeKey}", method = RequestMethod.POST) - public void upload(@PathVariable String codeKey, @RequestBody JSONObject material) { + public void upload(@PathVariable String codeKey, + @RequestBody JSONObject material, + @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) { // riskUploadService.checkUploadMailKey(codeKey, material.getString("risk_id")); riskUploadService.submitMaterial(material); + riskProcessLogService.addRiskProcessLog(material.getString("risk_id"), + manager.getString("manager_id"), + manager.getString("display_name"), + RiskResultTypeEnum.WAIT_FOR_AUDIT.getRemark(), + RiskResultTypeEnum.SEND_EMAIL_TO_BD.getResultType(), + RiskResultTypeEnum.WAIT_FOR_AUDIT.getResultType()); riskUploadService.deleteUploadMailKey(codeKey); } diff --git a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/web/RiskProcessLogController.java b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/web/RiskProcessLogController.java new file mode 100644 index 000000000..cdfc2ba39 --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/web/RiskProcessLogController.java @@ -0,0 +1,33 @@ +package au.com.royalpay.payment.manage.riskbusiness.web; + +import au.com.royalpay.payment.manage.riskbusiness.core.RiskProcessLogService; +import com.alibaba.fastjson.JSONObject; +import com.google.gson.JsonObject; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.xml.bind.util.JAXBSource; +import java.util.List; + +/** + * @Description: + * @Author: lujian + * @Date: 2018/11/22 15:52 + */ +@RestController +@RequestMapping(value = "/risk/business/process/logs") +public class RiskProcessLogController { + + @Resource + private RiskProcessLogService riskProcessLogService; + + @GetMapping(value = "/{risk_id}") + public List getRiskProcessLogs(@PathVariable("risk_id") String riskId) { + return riskProcessLogService.getRiskProcessLogs(riskId); + } + + @PostMapping + public void addRiskProcessLog(@RequestBody JSONObject log) { + riskProcessLogService.addRiskProcessLog(log); + } +} diff --git a/src/main/ui/static/analysis/risk_business.js b/src/main/ui/static/analysis/risk_business.js index 0cf9eac60..7b4c1ff50 100644 --- a/src/main/ui/static/analysis/risk_business.js +++ b/src/main/ui/static/analysis/risk_business.js @@ -170,6 +170,11 @@ define(['angular', 'jquery', 'uiRouter', './monitoring/analysis-monitoring'], if (riskEvent.data.is_send_client == 1) riskEvent.data.is_send_client = true; $scope.riskEvent = riskEvent.data; + + $http.get('/risk/business/process/logs/' + $scope.riskEvent.risk_id).then(function (resp) { + $scope.riskEvent.process_logs = resp.data; + }); + // 编辑表格的数据保存对象,重新从源数据复制,从而取消保存操作时不会更新视图 $scope.riskEventEdit = angular.copy(riskEvent.data); //var index = $scope.riskEvent.order_ids.lastIndexOf(","); @@ -333,6 +338,31 @@ define(['angular', 'jquery', 'uiRouter', './monitoring/analysis-monitoring'], $scope.material={}; $scope.material.update_time=$filter('date')(new Date(), 'yyyy-MM-dd HH:mm:ss'); $scope.material.risk_id = $scope.riskEvent.risk_id; + // $scope.uploadFile = function(files, index) { + // if (files && files.length) { + // var urls = new Array(); + // var value = 0; + // var progressKey = 'fileProgress' + (index + 1); + // $scope[progressKey] = {value: 0}; + // for (var i = 0; i < files.length; i++) { + // var file = files[i]; + // Upload.upload({ + // url: '/attachment/riskFiles', + // data: {file: file} + // }).then(function (resp) { + // urls.push(resp.data.url); + // }, function (resp) { + // delete $scope[progressKey]; + // alert('Upload Failed'); + // }, function (evt) { + // value += parseInt(100 * evt.loaded / evt.total ); + // $scope[progressKey].value = value/(files.length*2); + // }) + // } + // var fileKey = 'file' + (index + 1) +'_url'; + // $scope.material[fileKey] = urls; + // } + // }; $scope.uploadFile1 = function (files) { if (files && files.length) { var urls = new Array(); @@ -540,7 +570,7 @@ define(['angular', 'jquery', 'uiRouter', './monitoring/analysis-monitoring'], // 材料审核 $scope.auditMaterial = function(auditType) { - var url = '/risk/business/events'; + var url = '/risk/business/events/pass'; var warningMessageHTML = '是否确定通过该材料?'; if (auditType == 3) { commonDialog.confirm({ @@ -656,7 +686,13 @@ define(['angular', 'jquery', 'uiRouter', './monitoring/analysis-monitoring'], $scope.riskEvent.is_send_client = $scope.is_send_client; + var saveRiskBtn = document.getElementById('save-risk-btn'); + var saveRiskBtnInnerHtmlBak = saveRiskBtn.innerHTML; + saveRiskBtn.disabled = true; + saveRiskBtn.innerHTML = " Processing"; $http.post('/risk/business/events', $scope.riskEvent).then(function (resp) { + saveRiskBtn.innerHTML = saveRiskBtnInnerHtmlBak; + saveRiskBtn.disabled = false; commonDialog.alert({ title: 'Success', content: 'Register new riskEvent successfully', @@ -664,6 +700,8 @@ define(['angular', 'jquery', 'uiRouter', './monitoring/analysis-monitoring'], }); $state.go('^',{}, {reload: true}); }, function (resp) { + saveRiskBtn.innerHTML = saveRiskBtnInnerHtmlBak; + saveRiskBtn.disabled = false; commonDialog.alert({ title: 'Error', content: resp.data.message, diff --git a/src/main/ui/static/analysis/templates/new_riskEvent.html b/src/main/ui/static/analysis/templates/new_riskEvent.html index 36f27ed82..b678c4570 100644 --- a/src/main/ui/static/analysis/templates/new_riskEvent.html +++ b/src/main/ui/static/analysis/templates/new_riskEvent.html @@ -246,11 +246,17 @@
    -
    +
    + cancel +
    diff --git a/src/main/ui/static/analysis/templates/riskEvent_detail.html b/src/main/ui/static/analysis/templates/riskEvent_detail.html index a95d9b951..08917465a 100644 --- a/src/main/ui/static/analysis/templates/riskEvent_detail.html +++ b/src/main/ui/static/analysis/templates/riskEvent_detail.html @@ -1,4 +1,15 @@
    +
    +
    + +
    + + +
    + +
    +
    +
    -
    -
    -

    1、物流公司发货单据照片 - 要求:每笔交易对应的物流单必须提供,且单据必须清晰可见
    - Photos of logistics companies’ goods-delivery documents - Requirement: The logistics order record corresponding to each transaction must be provided, and details of records should be clearly visible. -

    -

    1.请解释相应的消费场景/业务模式,例如网站商城,扫码支付, 消费者到店支付等;
    - Please explain the relative payment scenario/business activities, for example, online store, QR code payment, payment at the store, etc; -

    -
    -
    -   
    -
    - - - -
    -
    -
    -
    -
    -

    2、用户购买虚拟物品需要提供聊天记录、订单信息、发货凭证截图、虚拟物品最终消费场景(例如何种游戏、软件)、提供消费场景网址/下载链接 - 要求:每笔交易对应的截图必须清晰可见
    - Users need to provide chat records, order information, screenshots of delivery documents, final consumption scenarios of virtual goods (such as games, software); provide consumer scene URL / download link. - Requirement: The screenshot corresponding to each transaction must be clearly visible. -

    -

    2.提供相应购物清单,订单小票(请提供与被查交易订单号相匹配的交易时间及金额的发票);
    - Provide related shopping lists, invoices. (Please provide the invoices, amount of which matches that of the abnormal transaction); -

    -
    -
    -   
    -
    - - - -
    -
    -
    -
    +
    -

    3、购物小票/发票存根照片 - 照片应清晰,必须显示商户名称、商户地址、购物时间、物品名称 - 购物金额等
    - Photos of shopping receipts/ invoice stubs - Requirement: The photos should be clear and must show Merchant name, Business address, Transaction time, Product information, Quantity purchased, etc. -

    -

    3.提供相应的发货证明,报关单(若有消费者在国内购买,请提供物流单据或报关单);
    - Relative proof of delivery, customs declaration (If the consumer purchased from China, please provide shipping receipt or customs declaration); -

    +

      
    -
    -
    -

    4、显示商户门牌号码和店头名称的照片 - 要求:清晰可见,至少一张
    - Photos of Merchant Street number & Merchant name - Requirement: At least one visible photo -

    -

    4.提供您的门店照片(门店照及店铺内的照片各一张, 一张可以看到商户名的门头照,一张可以看到相关商品或服务的店内照片);
    - Photos of the store ( one of each front-store and in-store); -

    -
    -
    -   
    -
    - - - -
    -
    - -
    -
    -
    -

    5、显示商户营业场景所场内部情况(如店内商品陈列、收银台等)的照片 - 要求:照片清晰,且能清楚显示商户实际售卖物品或服务,至少三张
    - Photos of internal environment of merchant business (such as in-store merchandise display, checkout counter, etc.) - Requirements: The photos (at least three) showing merchant activities including actual selling-goods or services obviously -

    -

    5.其他可以还原交易背景的资料,如和消费者的聊天记录等,来佐证被查单号交易的真实性;
    - Other materials that can verify the payment scenario, for example, chatting history, to prove the truth of the transactions; -

    -
    -
    -   
    -
    - - - -
    -
    - -
    -
    -
    -

    6、其他图片
    - Other pictures -

    -
    -
    -   
    -
    - - - -
    -
    - -
    diff --git a/src/main/ui/static/analysis/templates/riskEvent_detail_bd.html b/src/main/ui/static/analysis/templates/riskEvent_detail_bd.html index 78aa1bf82..8ce630ed2 100644 --- a/src/main/ui/static/analysis/templates/riskEvent_detail_bd.html +++ b/src/main/ui/static/analysis/templates/riskEvent_detail_bd.html @@ -57,200 +57,55 @@
    -
    -
    -

    - 1、物流公司发货单据照片 - 要求:每笔交易对应的物流单必须提供,且单据必须清晰可见
    - Photos of logistics companies’ goods-delivery documents - Requirement: The logistics order record corresponding to each transaction must be provided, - and details of records should be clearly visible. -

    -

    - 1.请解释相应的消费场景/业务模式,例如网站商城,扫码支付, 消费者到店支付等;
    - Please explain the relative payment scenario/business activities, - for example, online store, QR code payment, payment at the store, etc; -

    -
    -
    -
    - -
    -   
    -
    - {{file1Progress.value}}% - -
    -
    -
    -
    -
    -

    - 2、用户购买虚拟物品需要提供聊天记录、订单信息、发货凭证截图、 - 虚拟物品最终消费场景(例如何种游戏、软件)、提供消费场景网址/下载链接 - 要求:每笔交易对应的截图必须清晰可见
    - Users need to provide chat records, order information, screenshots of delivery documents, - final consumption scenarios of virtual goods (such as games, software); - provide consumer scene URL / download link. - Requirement: The screenshot corresponding to each transaction must be clearly visible. -

    -

    - 2.提供相应购物清单,订单小票(请提供与被查交易订单号相匹配的交易时间及金额的发票);
    - Provide related shopping lists, invoices. - (Please provide the invoices, amount of which matches that of the abnormal transaction); -

    -
    -
    -
    - -
    -   
    -
    - {{file2Progress.value}}% - -
    -
    - -
    -
    -
    -

    - 3、购物小票/发票存根照片 - 照片应清晰,必须显示商户名称、商户地址、购物时间、物品名称 - 购物金额等
    - Photos of shopping receipts/ invoice stubs - Requirement: The photos should be clear and must show Merchant name, - Business address, Transaction time, Product information, Quantity purchased, etc. -

    -

    - 3.提供相应的发货证明,报关单(若有消费者在国内购买,请提供物流单据或报关单);
    - Relative proof of delivery, customs declaration - (If the consumer purchased from China, please provide shipping receipt or customs declaration); -

    -
    -
    -
    - -
    -   
    -
    - {{file3Progress.value}}% - -
    -
    -
    -
    +
    -

    - 4、显示商户门牌号码和店头名称的照片 - 要求:清晰可见,至少一张
    - Photos of Merchant Street number & Merchant name - Requirement: At least one visible photo -

    -

    - 4.提供您的门店照片(门店照及店铺内的照片各一张, 一张可以看到商户名的门头照,一张可以看到相关商品或服务的店内照片);
    - Photos of the store ( one of each front-store and in-store); -

    +

    {{item.question}}

      
    - {{file4Progress.value}}% - -
    -
    + {{item.fileProgressValue}}% -
    -
    -
    -

    - 5、显示商户营业场景所场内部情况(如店内商品陈列、收银台等)的照片 - 要求:照片清晰,且能清楚显示商户实际售卖物品或服务,至少三张
    - Photos of internal environment of merchant business - (such as in-store merchandise display, checkout counter, etc.) - Requirements: The photos (at least three) - showing merchant activities including actual selling-goods or services obviously -

    -

    - 5.其他可以还原交易背景的资料,如和消费者的聊天记录等,来佐证被查单号交易的真实性;
    - Other materials that can verify the payment scenario, for example, - chatting history, to prove the truth of the transactions; -

    -
    -
    -
    - -
    -   
    -
    - {{file5Progress.value}}% - + +
    -
    -
    -
    -

    6、其他图片
    - Other pictures -

    -
    -
    -
    - -
    -   
    -
    - {{file6Progress.value}}% - -
    -
    -
    -
    - Submit
    From 50aae1323a3e00ef3eaec4ef412850dea3ce7325 Mon Sep 17 00:00:00 2001 From: lujian Date: Tue, 27 Nov 2018 10:52:28 +0800 Subject: [PATCH 40/45] =?UTF-8?q?[fix]=E9=87=8D=E5=A4=8D=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../manage/riskbusiness/core/RiskBusinessService.java | 4 +++- .../riskbusiness/core/impl/RiskBusinessServiceImpl.java | 9 ++++++++- .../manage/riskbusiness/web/RiskBusinessController.java | 5 ++--- .../static/analysis/templates/riskEvent_detail_bd.html | 8 ++++++++ src/main/ui/static/analysis/templates/risk_business.html | 4 ++-- 5 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/RiskBusinessService.java b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/RiskBusinessService.java index 778eb6069..abb23270c 100644 --- a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/RiskBusinessService.java +++ b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/RiskBusinessService.java @@ -68,8 +68,10 @@ public interface RiskBusinessService { /** * 发送拒绝邮件 * @param riskId + * @param refuseDescription + * @throws IOException */ - void sendRefuseEmail(String riskId) throws IOException; + void sendRefuseEmail(String riskId, String refuseDescription) throws IOException; /** * 发送提醒邮件 diff --git a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java index 79f301f7c..177ad51f0 100644 --- a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java @@ -17,6 +17,7 @@ import au.com.royalpay.payment.manage.notice.core.MailService; import au.com.royalpay.payment.manage.pushMessage.APNSMessageHelper; import au.com.royalpay.payment.manage.pushMessage.bean.AppManagerMessageBuilder; import au.com.royalpay.payment.manage.riskbusiness.core.RiskBusinessService; +import au.com.royalpay.payment.manage.riskbusiness.core.RiskMaterialService; import au.com.royalpay.payment.manage.riskbusiness.core.RiskProcessLogService; import au.com.royalpay.payment.manage.riskbusiness.enums.RiskEmailStatusEnum; import au.com.royalpay.payment.manage.riskbusiness.enums.RiskResultTypeEnum; @@ -102,6 +103,8 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo @Resource private RiskMaterialMapper riskMaterialMapper; @Resource + private RiskMaterialService riskMaterialService; + @Resource private RiskFileMapper riskFileMapper; @Resource private ClientDeviceTokenMapper clientDeviceTokenMapper; @@ -424,8 +427,11 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo } @Override - public void sendRefuseEmail(String riskId) throws IOException { + public void sendRefuseEmail(String riskId, String refuseDescription) throws IOException { JSONObject event = getRiskEventDetail(riskId); + if (RiskResultTypeEnum.MATERIAL_NOT_PASS.getResultType().intValue() == event.getIntValue("result_type")) { + throw new BadRequestException("Refused Already!"); + } Context ctx = getMailContext(event); ctx.setVariable("refuse",true); ctx.setVariable("refuse_description", riskMaterialMapper.findAllMaterials(riskId).get(0).getString("refuse_description")); @@ -441,6 +447,7 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo event.put("result_type",RiskResultTypeEnum.MATERIAL_NOT_PASS.getResultType()); event.put("submit_url",uploadUrl); riskEventMapper.update(event); + riskMaterialService.updateRiskMaterial(riskId, refuseDescription); // 日志记录 riskProcessLogService.addRiskProcessLog(riskId, event.getString("fillin_id"), diff --git a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/web/RiskBusinessController.java b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/web/RiskBusinessController.java index 7827b312e..a0159e385 100644 --- a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/web/RiskBusinessController.java +++ b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/web/RiskBusinessController.java @@ -87,9 +87,8 @@ public class RiskBusinessController { } @RequestMapping(value = "/{risk_id}/refuse",method = RequestMethod.PUT) - public void refuseEmail(@PathVariable String risk_id, @RequestBody JSONObject otherParams) throws IOException { - riskMaterialService.updateRiskMaterial(risk_id, otherParams.getString("refuse_description")); - riskBusinessService.sendRefuseEmail(risk_id); + public void refuseEmail(@PathVariable("risk_id") String riskId, @RequestBody JSONObject otherParams) throws IOException { + riskBusinessService.sendRefuseEmail(riskId, otherParams.getString("refuse_description")); } @GetMapping(value = "/{risk_id}/material") diff --git a/src/main/ui/static/analysis/templates/riskEvent_detail_bd.html b/src/main/ui/static/analysis/templates/riskEvent_detail_bd.html index 8ce630ed2..eebc8afcf 100644 --- a/src/main/ui/static/analysis/templates/riskEvent_detail_bd.html +++ b/src/main/ui/static/analysis/templates/riskEvent_detail_bd.html @@ -57,6 +57,14 @@
    +
    + +
    +
    +

    +
    +
    +

    {{item.question}}

    diff --git a/src/main/ui/static/analysis/templates/risk_business.html b/src/main/ui/static/analysis/templates/risk_business.html index 6648f3db0..09df3b0c5 100644 --- a/src/main/ui/static/analysis/templates/risk_business.html +++ b/src/main/ui/static/analysis/templates/risk_business.html @@ -160,13 +160,13 @@ - New Event + New Event
    From 799cc6da489d48e9fb8f0d23303c4681b8133bf3 Mon Sep 17 00:00:00 2001 From: "james.zhao" Date: Tue, 27 Nov 2018 17:14:29 +0800 Subject: [PATCH 41/45] email update --- .../listeners/AfterPaymentFinishListener.java | 2 +- src/main/resources/application-dev.properties | 2 +- src/main/resources/application.properties | 3 +- .../mappers/riskbusiness/RiskEventMapper.xml | 160 +++++++++++++++++- src/main/ui/static/analysis/risk_business.js | 65 ++++++- .../analysis/templates/risk_business.html | 108 +++++++++--- 6 files changed, 302 insertions(+), 38 deletions(-) diff --git a/src/main/java/au/com/royalpay/payment/manage/apps/events/listeners/AfterPaymentFinishListener.java b/src/main/java/au/com/royalpay/payment/manage/apps/events/listeners/AfterPaymentFinishListener.java index 0ac43fd05..b52e8387b 100644 --- a/src/main/java/au/com/royalpay/payment/manage/apps/events/listeners/AfterPaymentFinishListener.java +++ b/src/main/java/au/com/royalpay/payment/manage/apps/events/listeners/AfterPaymentFinishListener.java @@ -28,7 +28,7 @@ public class AfterPaymentFinishListener implements ApplicationListener - - AND re.receive_email_date = #{receive_email_date} + + AND re.receive_email_date >= #{receive_email_date_begin} - - AND re.reply_email_date = #{reply_email_date} + + AND re.receive_email_date <= #{receive_email_date_end} + + + + AND re.reply_email_date >= #{reply_email_date_begin} + + + + AND re.reply_email_date <= #{reply_email_date_begin} @@ -123,4 +131,146 @@ - \ No newline at end of file + + + + + diff --git a/src/main/ui/static/analysis/risk_business.js b/src/main/ui/static/analysis/risk_business.js index f98346da7..e05f95423 100644 --- a/src/main/ui/static/analysis/risk_business.js +++ b/src/main/ui/static/analysis/risk_business.js @@ -128,8 +128,8 @@ define(['angular', 'jquery', 'uiRouter', './monitoring/analysis-monitoring'], }]); - app.controller('riskBusinessCtrl', ['$scope', '$state', '$http', '$uibModal', '$filter', 'commonDialog', 'industryMap', - function ($scope, $state, $http, $uibModal, $filter, commonDialog, industryMap) { + app.controller('riskBusinessCtrl', ['$scope', '$state', '$http', '$uibModal', '$filter', 'commonDialog', 'industryMap','chartParser', + function ($scope, $state, $http, $uibModal, $filter, commonDialog, industryMap, chartParser) { $scope.orderTypes = orderTypesMap; $scope.orderTypesForBD = orderTypesMapForBD; $scope.resultTypes = resultTypesMap; @@ -139,13 +139,20 @@ define(['angular', 'jquery', 'uiRouter', './monitoring/analysis-monitoring'], $scope.amountSection = amountSectionMap; $scope.pagination = {}; $scope.params = {}; - + var industries = new Array(); + angular.forEach($scope.industries, function (industry) { + industries.push(industry.label); + }); + industries.push('未知行业'); + console.log(industries); // 加载风险注册事件 $scope.loadRiskEvents = function (page) { var params = angular.copy($scope.params); params.page = page || $scope.pagination.page || 1; - params.replyEmailDate = $filter('date')(params.replyEmailDate, 'yyyy-MM-dd'); - params.receiveEmailDate = $filter('date')(params.receiveEmailDate, 'yyyy-MM-dd'); + params.replyEmailDateBegin = $filter('date')(params.replyEmailDateBegin, 'yyyy-MM-dd'); + params.replyEmailDateEnd = $filter('date')(params.replyEmailDateEnd, 'yyyy-MM-dd'); + params.receiveEmailDateBegin = $filter('date')(params.receiveEmailDateBegin, 'yyyy-MM-dd'); + params.receiveEmailDateEnd = $filter('date')(params.receiveEmailDateEnd, 'yyyy-MM-dd'); if (params.section != null) { var sectionArray = params.section.split('-'); params.startAmount = sectionArray[0]; @@ -155,6 +162,54 @@ define(['angular', 'jquery', 'uiRouter', './monitoring/analysis-monitoring'], $scope.riskEvents = resp.data.data; $scope.pagination = resp.data.pagination; }); + $http.get('/risk/business/events/analysis/industry', {params: params}).then(function (resp) { + $scope.riskEventsByIndustry = resp.data; + $scope.risk_industry_chart = chartParser.parse(industryAmount(industries),$scope.riskEventsByIndustry); + }); + + }; + + var industryAmount = function (industries) { + return { + chart: { + tooltip: { + trigger: 'item', + formatter: "{a}
    {b} : {c}" + }, + // color: colors, + legend: { + orient: 'vertical', + left: 'right', + data: industries + } + }, + series: [{ + basic: { + name: '风控事件单量', type: 'pie', + radius: '80%', + center: ['50%', '60%'], + label:{ //饼图图形上的文本标签 + normal:{ + show:true, + position:'outer', //标签的位置 + textStyle : { + fontWeight : 300 , + fontSize : 16 //文字的字体大小 + }, + formatter:'{d}%' + } + }, + itemStyle: { + emphasis: { + shadowBlur: 10, + shadowOffsetX: 0, + shadowColor: 'rgba(0, 0, 0, 0.5)' + } + } + }, + column: {key: 'amount', name: 'industry'} + }] + } }; $scope.loadRiskEvents(1); diff --git a/src/main/ui/static/analysis/templates/risk_business.html b/src/main/ui/static/analysis/templates/risk_business.html index 09df3b0c5..6f21c1e85 100644 --- a/src/main/ui/static/analysis/templates/risk_business.html +++ b/src/main/ui/static/analysis/templates/risk_business.html @@ -108,39 +108,75 @@
    -
    + + +
    +
    +

    RiskEvent Analysis

    +
    + +
    +
    +

    行业占比

    +
    +
    +
    +

    金额分布

    +
    +
    +
    +
    + +
    From d643f8cea7883d9f251199be94dede12f46b625d Mon Sep 17 00:00:00 2001 From: "james.zhao" Date: Wed, 28 Nov 2018 16:44:38 +0800 Subject: [PATCH 42/45] =?UTF-8?q?=E9=A3=8E=E6=8E=A7=20e-charts=E5=88=86?= =?UTF-8?q?=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mappers/payment/TransactionMapper.java | 4 + .../mappers/riskbusiness/RiskEventMapper.java | 4 + .../riskbusiness/RiskOrdersMapper.java | 16 +++ .../riskbusiness/bean/RiskEventQuery.java | 56 ++++++++ .../core/RiskBusinessService.java | 16 +++ .../core/impl/RiskBusinessServiceImpl.java | 85 +++++++++++- .../web/RiskBusinessController.java | 18 +++ .../mappers/riskbusiness/RiskEventMapper.xml | 131 ++++++++++++------ src/main/ui/static/analysis/risk_business.js | 50 ++++++- .../analysis/templates/risk_business.html | 6 +- 10 files changed, 342 insertions(+), 44 deletions(-) create mode 100644 src/main/java/au/com/royalpay/payment/manage/mappers/riskbusiness/RiskOrdersMapper.java diff --git a/src/main/java/au/com/royalpay/payment/manage/mappers/payment/TransactionMapper.java b/src/main/java/au/com/royalpay/payment/manage/mappers/payment/TransactionMapper.java index 8f4ab97b4..9a47c34f4 100644 --- a/src/main/java/au/com/royalpay/payment/manage/mappers/payment/TransactionMapper.java +++ b/src/main/java/au/com/royalpay/payment/manage/mappers/payment/TransactionMapper.java @@ -38,6 +38,10 @@ public interface TransactionMapper { @AdvanceSelect(addonWhereClause = "refund_id is null and system_generate=0 and transaction_type = 'Credit'") JSONObject findIncomeByOrderId(@Param("order_id") String orderId); + @AutoSql(type = SqlType.SELECT) + @AdvanceSelect(addonWhereClause = "transaction_type = 'Credit'") + JSONObject findByOrderId(@Param("order_id") String orderId); + @AutoSql(type = SqlType.SELECT) @AdvanceSelect(addonWhereClause = "refund_id is null and system_generate=1") JSONObject findSystemIncomeByOrderId(@Param("order_id") String orderId); diff --git a/src/main/java/au/com/royalpay/payment/manage/mappers/riskbusiness/RiskEventMapper.java b/src/main/java/au/com/royalpay/payment/manage/mappers/riskbusiness/RiskEventMapper.java index 200a00356..3cfed3757 100644 --- a/src/main/java/au/com/royalpay/payment/manage/mappers/riskbusiness/RiskEventMapper.java +++ b/src/main/java/au/com/royalpay/payment/manage/mappers/riskbusiness/RiskEventMapper.java @@ -28,6 +28,10 @@ public interface RiskEventMapper { PageList listRisksByPage(JSONObject params, PageBounds pageBounds); + List analysisByIndustry(JSONObject params); + + List analysisByAmount(JSONObject params); + @AutoSql(type = SqlType.SELECT) JSONObject findById(@Param("risk_id") String riskId); diff --git a/src/main/java/au/com/royalpay/payment/manage/mappers/riskbusiness/RiskOrdersMapper.java b/src/main/java/au/com/royalpay/payment/manage/mappers/riskbusiness/RiskOrdersMapper.java new file mode 100644 index 000000000..ddf743854 --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/mappers/riskbusiness/RiskOrdersMapper.java @@ -0,0 +1,16 @@ +package au.com.royalpay.payment.manage.mappers.riskbusiness; + +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; + +@AutoMapper(tablename = "risk_orders", pkName = "risk_order_id") +public interface RiskOrdersMapper { + @AutoSql(type= SqlType.INSERT) + void save(JSONObject params); + + @AutoSql(type = SqlType.DELETE) + void clearOrders(@Param("risk_id") String riskId); +} diff --git a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/bean/RiskEventQuery.java b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/bean/RiskEventQuery.java index 29b3bb14f..53d5e7246 100644 --- a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/bean/RiskEventQuery.java +++ b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/bean/RiskEventQuery.java @@ -38,9 +38,17 @@ public class RiskEventQuery { // 收到调单邮件日期 private String receiveEmailDate; + private String receiveEmailDateBegin; + + private String receiveEmailDateEnd; + // 邮件回复截止日期 private String replyEmailDate; + private String replyEmailDateBegin; + + private String replyEmailDateEnd; + private Integer page = 1; // 金额区间 @@ -135,6 +143,38 @@ public class RiskEventQuery { this.replyEmailDate = replyEmailDate; } + public String getReceiveEmailDateBegin() { + return receiveEmailDateBegin; + } + + public void setReceiveEmailDateBegin(String receiveEmailDateBegin) { + this.receiveEmailDateBegin = receiveEmailDateBegin; + } + + public String getReceiveEmailDateEnd() { + return receiveEmailDateEnd; + } + + public void setReceiveEmailDateEnd(String receiveEmailDateEnd) { + this.receiveEmailDateEnd = receiveEmailDateEnd; + } + + public String getReplyEmailDateBegin() { + return replyEmailDateBegin; + } + + public void setReplyEmailDateBegin(String replyEmailDateBegin) { + this.replyEmailDateBegin = replyEmailDateBegin; + } + + public String getReplyEmailDateEnd() { + return replyEmailDateEnd; + } + + public void setReplyEmailDateEnd(String replyEmailDateEnd) { + this.replyEmailDateEnd = replyEmailDateEnd; + } + public Integer getPage() { return page; } @@ -184,6 +224,22 @@ public class RiskEventQuery { params.put("reply_email_date", replyEmailDate); } + if (receiveEmailDateBegin != null) { + params.put("receive_email_date_begin", receiveEmailDateBegin); + } + + if (receiveEmailDateEnd != null) { + params.put("receive_email_date_end", receiveEmailDateEnd); + } + + if (replyEmailDateBegin != null) { + params.put("reply_email_date_begin", replyEmailDateBegin); + } + + if (replyEmailDateEnd != null) { + params.put("reply_email_date_end", replyEmailDateEnd); + } + if (page != null && page > 0) { params.put("page", page); } diff --git a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/RiskBusinessService.java b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/RiskBusinessService.java index abb23270c..74a62881f 100644 --- a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/RiskBusinessService.java +++ b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/RiskBusinessService.java @@ -27,6 +27,20 @@ public interface RiskBusinessService { */ JSONObject getRiskEventsByPage(JSONObject params, JSONObject manager); + /** + * 风险事件按行业分析 + * @param params + * @return + */ + List analysisByIndustry(JSONObject params, JSONObject manager); + + /** + * 风险事件列表按金额分析 + * @param params + * @return + */ + List analysisByAmount(JSONObject params, JSONObject manager); + /** * 风险事件详情 * @param riskId @@ -115,4 +129,6 @@ public interface RiskBusinessService { JSONObject riskEventMaterialPass(JSONObject params, JSONObject manager); JSONObject updateIsSendClient(String riskId); + + void completeOrderAmount(); } diff --git a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java index 177ad51f0..e7b9798fc 100644 --- a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java @@ -10,6 +10,7 @@ import au.com.royalpay.payment.manage.mappers.payment.TransactionMapper; import au.com.royalpay.payment.manage.mappers.riskbusiness.RiskEventMapper; import au.com.royalpay.payment.manage.mappers.riskbusiness.RiskFileMapper; import au.com.royalpay.payment.manage.mappers.riskbusiness.RiskMaterialMapper; +import au.com.royalpay.payment.manage.mappers.riskbusiness.RiskOrdersMapper; import au.com.royalpay.payment.manage.mappers.system.ClientDeviceTokenMapper; import au.com.royalpay.payment.manage.mappers.system.ClientMapper; import au.com.royalpay.payment.manage.mappers.system.ClientBDMapper; @@ -107,6 +108,8 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo @Resource private RiskFileMapper riskFileMapper; @Resource + private RiskOrdersMapper riskOrdersMapper; + @Resource private ClientDeviceTokenMapper clientDeviceTokenMapper; @Resource private AppMessageLogMapper appMessageLogMapper; @@ -179,6 +182,49 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo return PageListUtils.buildPageListResult(riskEvents); } + @Override + public List analysisByIndustry(JSONObject params, JSONObject manager) { + List industryAnalysis = riskEventMapper.analysisByIndustry(params); + for(JSONObject industry:industryAnalysis){ + if(StringUtils.isBlank(industry.getString("industry"))){ + industry.put("industry","未知行业"); + } + } + return industryAnalysis; + } + + private List industryArray(){ + List industryArray = new ArrayList<>(); + industryArray.add("鞋包服饰"); + industryArray.add("机票行业"); + industryArray.add("软件服务"); + industryArray.add("旅游票务"); + industryArray.add("国际租车"); + industryArray.add("医疗服务(出国)"); + industryArray.add("医疗服务(不出国)"); + industryArray.add("留学教育(网络教育)"); + industryArray.add("留学教育(一年及以下)"); + industryArray.add("其它货物贸易行业"); + industryArray.add("文具/办公用品"); + industryArray.add("综合商城"); + industryArray.add("酒店行业"); + industryArray.add("教育行业"); + industryArray.add("国际物流"); + industryArray.add("数码电器"); + industryArray.add("母婴"); + industryArray.add("化妆品"); + industryArray.add("食品"); + industryArray.add("留学教育(一年以上)"); + industryArray.add("其它服务行业"); + industryArray.add("未知行业"); + return industryArray; + } + + @Override + public List analysisByAmount(JSONObject params, JSONObject manager) { + return riskEventMapper.analysisByAmount(params); + } + @Override public JSONObject getRiskEventDetail(String riskId) { @@ -266,7 +312,7 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo // 将订单order_id存入数据库方便后面快速查询 JSONObject orderInfo = transactionList.get(0); realOrderIdList.add(orderInfo.getString("order_id")); - orderAmountList.add(orderInfo.getString("transaction_amount")); + orderAmountList.add(orderInfo.getString("clearing_amount")); } params.put("order_amounts", StringUtils.join(orderAmountList, ",")); params.put("real_order_ids", StringUtils.join(realOrderIdList, ",")); @@ -278,6 +324,7 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo public void addRiskEvent(JSONObject params, JSONObject manager) { params = getEvent(params); riskEventMapper.save(params); + setRiskOrders(params); params = riskEventMapper.findAll(params).get(0); riskProcessLogService.addRiskProcessLog(params.getString("risk_id"), params.getString("fillin_id"), @@ -287,10 +334,27 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo RiskResultTypeEnum.NOT_HANDLED.getResultType()); } + private void setRiskOrders(JSONObject params){ + if(StringUtils.isNotBlank(params.getString("order_ids"))){ + String riskId = params.getString("risk_id"); + String orderIds = params.getString("real_order_ids"); + for(String orderId : orderIds.split(",")){ + JSONObject order = transactionMapper.findByOrderId(orderId); + JSONObject riskOrder = new JSONObject(); + riskOrder.put("risk_id",riskId); + riskOrder.put("order_id",orderId); + riskOrder.put("clearing_amount",order.getString("clearing_amount")); + riskOrdersMapper.save(riskOrder); + } + } + } + @Override public void updateRiskEvent(JSONObject params) { params = getEvent(params); riskEventMapper.update(params); + riskOrdersMapper.clearOrders(params.getString("risk_id")); + setRiskOrders(params); } @Override @@ -930,4 +994,23 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo event = riskEventMapper.findById(riskId); return event; } + + @Override + public void completeOrderAmount() { + List riskEventList = getRiskEvents(null); + for(JSONObject riskEvent:riskEventList){ + if(riskEvent.getIntValue("order_type")==4 || StringUtils.isBlank(riskEvent.getString("real_order_ids"))){ + continue; + } + String[] order_ids=riskEvent.getString("real_order_ids").split(","); + for(String orderId : order_ids){ + JSONObject transaction = transactionMapper.findByOrderId(orderId); + JSONObject riskOrder = new JSONObject(); + riskOrder.put("risk_id",riskEvent.getString("risk_id")); + riskOrder.put("order_id",transaction.getString("order_id")); + riskOrder.put("clearing_amount",transaction.getString("clearing_amount")); + riskOrdersMapper.save(riskOrder); + } + } + } } diff --git a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/web/RiskBusinessController.java b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/web/RiskBusinessController.java index a0159e385..b589de9fb 100644 --- a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/web/RiskBusinessController.java +++ b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/web/RiskBusinessController.java @@ -46,6 +46,18 @@ public class RiskBusinessController { return riskBusinessService.getRiskEventsByPage(params, manager); } + @GetMapping(value = "events/analysis/industry") + public List analysisByIndustry(RiskEventQuery riskEventQuery, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) { + JSONObject params = riskEventQuery.toJSON(); + return riskBusinessService.analysisByIndustry(params, manager); + } + + @GetMapping(value = "events/analysis/amount") + public List analysisByAmount(RiskEventQuery riskEventQuery, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) { + JSONObject params = riskEventQuery.toJSON(); + return riskBusinessService.analysisByAmount(params, manager); + } + @GetMapping(value = "events/{risk_id}") public JSONObject getRiskEventDetail(@PathVariable("risk_id") String riskId, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) { @@ -160,5 +172,11 @@ public class RiskBusinessController { public JSONObject updateRiskEventIsSendClient(@RequestParam("risk_id") String riskId) { return riskBusinessService.updateIsSendClient(riskId); } + + @GetMapping(value = "/complete/event/order_amount") + public String completeOrderAmount() { + riskBusinessService.completeOrderAmount(); + return "SUCCESS"; + } } diff --git a/src/main/resources/au/com/royalpay/payment/manage/mappers/riskbusiness/RiskEventMapper.xml b/src/main/resources/au/com/royalpay/payment/manage/mappers/riskbusiness/RiskEventMapper.xml index 663a6004a..e188bec19 100644 --- a/src/main/resources/au/com/royalpay/payment/manage/mappers/riskbusiness/RiskEventMapper.xml +++ b/src/main/resources/au/com/royalpay/payment/manage/mappers/riskbusiness/RiskEventMapper.xml @@ -33,26 +33,11 @@ LEFT JOIN sys_clients sc ON re.client_moniker = sc.client_moniker - RIGHT JOIN( - SELECT distinct re.risk_id - FROM - risk_event re, - risk_event_help reh - - reh.risk_event_help_id < (LENGTH(re.order_amounts) - LENGTH(REPLACE(re.order_amounts, ',' , ''))) + 1 - - AND cast(SUBSTRING_INDEX(SUBSTRING_INDEX(order_amounts,',',reh.risk_event_help_id + 1),',',-1) as signed) >= #{start_amount} - - - - AND cast(SUBSTRING_INDEX(SUBSTRING_INDEX(order_amounts,',',reh.risk_event_help_id + 1),',',-1) as signed) <= #{end_amount} - - - - ) temp - on re.risk_id = temp.risk_id + RIGHT JOIN + (SELECT DISTINCT(risk_id) FROM risk_orders + WHERE #{start_amount} <= clearing_amount AND #{end_amount} > clearing_amount) ro + ON re.risk_id = ro.risk_id - INNER JOIN( SELECT DISTINCT client_id @@ -184,24 +169,10 @@ LEFT JOIN sys_clients sc ON re.client_moniker = sc.client_moniker - RIGHT JOIN( - SELECT distinct re.risk_id - FROM - risk_event re, - risk_event_help reh - - reh.risk_event_help_id < (LENGTH(re.order_amounts) - LENGTH(REPLACE(re.order_amounts, ',' , ''))) + 1 - - AND cast(SUBSTRING_INDEX(SUBSTRING_INDEX(order_amounts,',',reh.risk_event_help_id + 1),',',-1) as signed) >= #{start_amount} - - - - AND cast(SUBSTRING_INDEX(SUBSTRING_INDEX(order_amounts,',',reh.risk_event_help_id + 1),',',-1) as signed) <= #{end_amount} - - - - ) temp - on re.risk_id = temp.risk_id + RIGHT JOIN + (SELECT DISTINCT(risk_id) FROM risk_orders + WHERE #{start_amount} <= clearing_amount AND #{end_amount} > clearing_amount) ro + ON re.risk_id = ro.risk_id @@ -270,7 +241,89 @@ GROUP BY sc.industry - + diff --git a/src/main/ui/static/analysis/risk_business.js b/src/main/ui/static/analysis/risk_business.js index e05f95423..bfeeba04d 100644 --- a/src/main/ui/static/analysis/risk_business.js +++ b/src/main/ui/static/analysis/risk_business.js @@ -166,6 +166,10 @@ define(['angular', 'jquery', 'uiRouter', './monitoring/analysis-monitoring'], $scope.riskEventsByIndustry = resp.data; $scope.risk_industry_chart = chartParser.parse(industryAmount(industries),$scope.riskEventsByIndustry); }); + $http.get('/risk/business/events/analysis/amount', {params: params}).then(function (resp) { + $scope.riskEventsByAmount = resp.data; + $scope.risk_amount_chart = chartParser.parse(intervalsAmount(),$scope.riskEventsByAmount); + }); }; @@ -187,7 +191,7 @@ define(['angular', 'jquery', 'uiRouter', './monitoring/analysis-monitoring'], basic: { name: '风控事件单量', type: 'pie', radius: '80%', - center: ['50%', '60%'], + center: ['50%', '58%'], label:{ //饼图图形上的文本标签 normal:{ show:true, @@ -212,6 +216,50 @@ define(['angular', 'jquery', 'uiRouter', './monitoring/analysis-monitoring'], } }; + var intervalsAmount = function () { + return { + chart: { + tooltip: { + trigger: 'item', + formatter: "{a}
    {b} : {c}" + }, + // color: colors, + legend: { + orient: 'vertical', + left: 'right', + data: [ '0-500','500-1000','1000-1500','1500-2000','2000-2500','2500-3000','3000-3500','3500-4000','4000-4500','4500-5000','5000-5500','5500-6000', + '6000-6500','6500-7000','7000-7500','7500-8000','8000-8500','8500-9000','>9000'] + } + }, + series: [{ + basic: { + name: '风控事件单量', type: 'pie', + radius: '80%', + center: ['50%', '58%'], + label:{ //饼图图形上的文本标签 + normal:{ + show:true, + position:'outer', //标签的位置 + textStyle : { + fontWeight : 300 , + fontSize : 16 //文字的字体大小 + }, + formatter:'{d}%' + } + }, + itemStyle: { + emphasis: { + shadowBlur: 10, + shadowOffsetX: 0, + shadowColor: 'rgba(0, 0, 0, 0.5)' + } + } + }, + column: {key: 'amount', name: 'intervals'} + }] + } + }; + $scope.loadRiskEvents(1); } ]); diff --git a/src/main/ui/static/analysis/templates/risk_business.html b/src/main/ui/static/analysis/templates/risk_business.html index 6f21c1e85..8c06c882d 100644 --- a/src/main/ui/static/analysis/templates/risk_business.html +++ b/src/main/ui/static/analysis/templates/risk_business.html @@ -303,12 +303,12 @@

    行业占比

    + ng-class="{nodata:risk_industry_chart.nodata}">

    金额分布

    -
    +
    From 5dd947a9db7d9a05345d2f54bfb01afb7af02614 Mon Sep 17 00:00:00 2001 From: lujian Date: Wed, 28 Nov 2018 18:55:01 +0800 Subject: [PATCH 43/45] =?UTF-8?q?[fix]=E6=96=B0=E5=A2=9E=E6=94=AF=E4=BB=98?= =?UTF-8?q?=E6=88=90=E5=8A=9F=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../manage/merchants/core/ClientManager.java | 2 + .../core/impls/ClientManagerImpl.java | 11 ++ .../web/PartnerManageController.java | 5 + .../resources/templates/success_new_v2.html | 153 ++++++++++++++++++ .../static/payment/partner/partner-manage.js | 16 ++ .../templates/partner_payment_info.html | 35 +++- 6 files changed, 216 insertions(+), 6 deletions(-) create mode 100644 src/main/resources/templates/success_new_v2.html diff --git a/src/main/java/au/com/royalpay/payment/manage/merchants/core/ClientManager.java b/src/main/java/au/com/royalpay/payment/manage/merchants/core/ClientManager.java index 20e94280d..82976ea57 100644 --- a/src/main/java/au/com/royalpay/payment/manage/merchants/core/ClientManager.java +++ b/src/main/java/au/com/royalpay/payment/manage/merchants/core/ClientManager.java @@ -247,6 +247,8 @@ public interface ClientManager { void changePaymentPage(JSONObject manager, String clientMoniker, String paypad_version); + void changePaymentSuccessPage(JSONObject manager, String clientMoniker, String paysuccess_version); + void changePaymentPage(JSONObject account, String paypad_version); void changeManualSettle(JSONObject account , int client_id, boolean manual_settle,String operator_id,int type,String operation); 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 093767660..f783c9beb 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 @@ -3032,6 +3032,17 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid clientModifySupport.processClientConfigModify(new PaypadVersionModify(manager, clientMoniker, paypad_version)); } + @Override + public void changePaymentSuccessPage(JSONObject manager, String clientMoniker, String paysuccess_version) { + JSONObject client = getClientInfoByMoniker(clientMoniker); + if (client == null) { + throw new InvalidShortIdException(); + } + checkOrgPermission(manager, client); + client.put("paysuccess_version", paysuccess_version); + clientMapper.update(client); + } + @Override public void changePaymentPage(JSONObject account, String paypad_version) { int clientId = account.getIntValue("client_id"); diff --git a/src/main/java/au/com/royalpay/payment/manage/merchants/web/PartnerManageController.java b/src/main/java/au/com/royalpay/payment/manage/merchants/web/PartnerManageController.java index fee7980d0..7bb29b70d 100644 --- a/src/main/java/au/com/royalpay/payment/manage/merchants/web/PartnerManageController.java +++ b/src/main/java/au/com/royalpay/payment/manage/merchants/web/PartnerManageController.java @@ -298,6 +298,11 @@ public class PartnerManageController { clientManager.changePaymentPage(manager, clientMoniker, pass.getString("paypad_version")); } + @ManagerMapping(value = "/{clientMoniker}/paysuccess_version", method = RequestMethod.PUT, role = {ManagerRole.OPERATOR, ManagerRole.BD_USER}) + public void changePaymentSuccessPage(@PathVariable String clientMoniker, @RequestBody JSONObject pass, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) { + clientManager.changePaymentSuccessPage(manager, clientMoniker, pass.getString("paysuccess_version")); + } + @ManagerMapping(value = "/{clientMoniker}/trade_logs", method = RequestMethod.GET, role = {ManagerRole.ADMIN, ManagerRole.BD_USER, ManagerRole.OPERATOR, ManagerRole.SERVANT, ManagerRole.DIRECTOR, ManagerRole.FINANCIAL_STAFF}) public JSONObject listPartnerTradeLogs(@PathVariable String clientMoniker, TradeLogQuery query, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) throws Exception { return tradeLogService.listPartnerTradeLogs(manager, null, clientMoniker, query, null); diff --git a/src/main/resources/templates/success_new_v2.html b/src/main/resources/templates/success_new_v2.html new file mode 100644 index 000000000..e1ffeeccd --- /dev/null +++ b/src/main/resources/templates/success_new_v2.html @@ -0,0 +1,153 @@ + + + + + + + + + + + + + Pay Successful + Payment Failed + Order Closed + Not Pay + + + + + + + + + + +
    +

    + + 支付成功 +

    + 支付失败 + 已关闭 + 未支付 + +
    +
    +
    +
    +
    商户:
    +
    ${client.short_name}
    +
    +
    +
    支付金额:
    +
    +
    +
    +
    输入金额:
    +
    +
    +
    +
    手续费:
    +
    +
    +
    +
    汇率:
    +
    ${order.exchange_rate}
    +
    +
    +
    时间:
    +
    +
    +
    +
    单号:
    +
    +
    +
    +
    流水号:
    +
    +
    +
    +
    备注:
    +
    +
    +
    +
    + + + +
    +
    +
    +
    +
    + + + +
    + +
    +
    +
    +
    +
    +
    +
    +
    恭喜您!获得一笔鼓励金
    +
    活动期间任意消费满10澳币,获取随机鼓励金
    +
    +
    0.00
    +
    点击翻倍
    +
    +
    +
    +
    +
    X 1
    + 查看累积金额 +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    恭喜您!获得积分奖励
    +
    使用RoyalPay任意消费满10澳币,获取相应积分
    +
    + +
    +
    +
    +
    +
    +20积分
    + 查看累积积分 +
    +
    +
    +
    + + \ No newline at end of file diff --git a/src/main/ui/static/payment/partner/partner-manage.js b/src/main/ui/static/payment/partner/partner-manage.js index bbb99024e..7e9d00720 100644 --- a/src/main/ui/static/payment/partner/partner-manage.js +++ b/src/main/ui/static/payment/partner/partner-manage.js @@ -1805,6 +1805,22 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter }) }; + // 更改支付成功页 + $scope.changePaySuccessPage = function () { + if (!$scope.paymentInfo) { + return; + } + $http.put('/sys/partners/' + $scope.partner.client_moniker + '/paysuccess_version', {paysuccess_version: $scope.paymentInfo.paysuccess_version}).then(function () { + $scope.loadPartnerPaymentInfo(); + }, function (resp) { + commonDialog.alert({ + title: 'failed to change Payment Success Page Version', + content: resp.data.message, + type: 'error' + }) + }) + }; + $scope.toggleRequireCustInfo = function () { if (!$scope.paymentInfo) { return; diff --git a/src/main/ui/static/payment/partner/templates/partner_payment_info.html b/src/main/ui/static/payment/partner/templates/partner_payment_info.html index 3cdc89959..581f53caa 100644 --- a/src/main/ui/static/payment/partner/templates/partner_payment_info.html +++ b/src/main/ui/static/payment/partner/templates/partner_payment_info.html @@ -466,18 +466,41 @@
    Payment Page
    -
    -
    - -
    +
    +
    + +
    +
    + +
    + + +
    +
    +
    + +
    +
    - - + +
    +
    + +
    + + +
    From baa99631d14ea19e959fd53ceef97ee43d117616 Mon Sep 17 00:00:00 2001 From: "james.zhao" Date: Thu, 29 Nov 2018 10:12:53 +0800 Subject: [PATCH 44/45] =?UTF-8?q?info=E9=82=AE=E7=AE=B1=E5=AF=86=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../payment/manage/notice/core/impls/MailServiceImp.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/au/com/royalpay/payment/manage/notice/core/impls/MailServiceImp.java b/src/main/java/au/com/royalpay/payment/manage/notice/core/impls/MailServiceImp.java index cb639e796..7fc1e71ff 100644 --- a/src/main/java/au/com/royalpay/payment/manage/notice/core/impls/MailServiceImp.java +++ b/src/main/java/au/com/royalpay/payment/manage/notice/core/impls/MailServiceImp.java @@ -127,7 +127,7 @@ public class MailServiceImp implements MailService { noticeBean.setFiles(files.toString()); } noticeBean.setSenderAddress("info@royalpay.com.au"); - noticeBean.setPassword("Vaba6439"); + noticeBean.setPassword("Rpay2018"); String postUrl = mailHost + "/mail?" + generateMailSignParam(); @@ -162,7 +162,7 @@ public class MailServiceImp implements MailService { noticeBean.setMailClients(mailClients); noticeBean.setContent(content); noticeBean.setSenderAddress("info@royalpay.com.au"); - noticeBean.setPassword("Vaba6439"); + noticeBean.setPassword("Rpay2018"); String postUrl = mailHost + "/mail/single?" + generateMailSignParam(); HttpRequestResult result = null; try { From f8f2d4b254901969fe32ae9053085c6e51b937f1 Mon Sep 17 00:00:00 2001 From: "james.zhao" Date: Thu, 29 Nov 2018 10:20:23 +0800 Subject: [PATCH 45/45] update --- .../payment/manage/task/CustomerImpressionTask.java | 10 +++++----- .../payment/manage/task/UpdatePartnerPasswordTask.java | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/au/com/royalpay/payment/manage/task/CustomerImpressionTask.java b/src/main/java/au/com/royalpay/payment/manage/task/CustomerImpressionTask.java index 265908393..f4b7c7e74 100644 --- a/src/main/java/au/com/royalpay/payment/manage/task/CustomerImpressionTask.java +++ b/src/main/java/au/com/royalpay/payment/manage/task/CustomerImpressionTask.java @@ -48,7 +48,7 @@ public class CustomerImpressionTask { } for (List splitClients : splitList) { Runnable task = () -> splitClients.forEach((p) -> { - System.out.println("当前执行到" + p.getIntValue("client_id")); +// System.out.println("当前执行到" + p.getIntValue("client_id")); customerImpressionService.generateTag(p.getIntValue("client_id")); }); generatePool.execute(task); @@ -56,8 +56,8 @@ public class CustomerImpressionTask { }); } - @Scheduled(cron = "0/1 * * * * ?") - public void customerImpressionGenerateInfo() { - synchronizedScheduler.executeProcess("manage_task:CustomerImpression", 1_000, () -> customerImpressionService.generateInfo()); - } +// @Scheduled(cron = "0/1 * * * * ?") +// public void customerImpressionGenerateInfo() { +// synchronizedScheduler.executeProcess("manage_task:CustomerImpression", 1_000, () -> customerImpressionService.generateInfo()); +// } } diff --git a/src/main/java/au/com/royalpay/payment/manage/task/UpdatePartnerPasswordTask.java b/src/main/java/au/com/royalpay/payment/manage/task/UpdatePartnerPasswordTask.java index 5c7152c06..c063e1e95 100644 --- a/src/main/java/au/com/royalpay/payment/manage/task/UpdatePartnerPasswordTask.java +++ b/src/main/java/au/com/royalpay/payment/manage/task/UpdatePartnerPasswordTask.java @@ -15,7 +15,7 @@ import java.util.Arrays; import java.util.List; @Component -@ConditionalOnProperty(value = "app.run-tasks", havingValue = "false") +@ConditionalOnProperty(value = "app.run-tasks", havingValue = "true") public class UpdatePartnerPasswordTask { private Logger logger = LoggerFactory.getLogger(getClass()); @Resource