From 38261ec614647b11bedc795bbe98b8c68968af38 Mon Sep 17 00:00:00 2001 From: "eason.qian" Date: Mon, 7 May 2018 10:18:16 +0800 Subject: [PATCH 01/41] fix --- src/main/ui/static/analysis/templates/client_rates.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/ui/static/analysis/templates/client_rates.html b/src/main/ui/static/analysis/templates/client_rates.html index 83009e07e..833b9186c 100644 --- a/src/main/ui/static/analysis/templates/client_rates.html +++ b/src/main/ui/static/analysis/templates/client_rates.html @@ -61,7 +61,7 @@
- {{bd.display_name}}[{{bd.percentage}}%] From 59c1dfac8b8ec424aeb7d766473aad2e8d33ad7e Mon Sep 17 00:00:00 2001 From: wangning <164851225@qq.com> Date: Wed, 9 May 2018 09:16:53 +0800 Subject: [PATCH 02/41] update customer impression work time --- .../royalpay/payment/manage/task/CustomerImpressionTask.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 bb956e571..c01de9a20 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 @@ -30,7 +30,7 @@ public class CustomerImpressionTask { private ThreadPoolExecutor generatePool = new ThreadPoolExecutor(10, 30, 5, TimeUnit.SECONDS, new LinkedBlockingQueue()); - @Scheduled(cron = "0 0 3 * * ?") + @Scheduled(cron = "0 0 4 * * ?") public void generateTags() { List clients = clientMapper.listValidClient(); List> splitList = new ArrayList<>(); From 0fe89dbde2c3876a4d1238cf71d05667ec304492 Mon Sep 17 00:00:00 2001 From: wangning <164851225@qq.com> Date: Wed, 9 May 2018 09:22:22 +0800 Subject: [PATCH 03/41] refuse apply --- .../merchants/entity/impls/AuditModify.java | 20 ++++++++----------- 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/src/main/java/au/com/royalpay/payment/manage/merchants/entity/impls/AuditModify.java b/src/main/java/au/com/royalpay/payment/manage/merchants/entity/impls/AuditModify.java index 2fb4092c2..2e84e79d2 100644 --- a/src/main/java/au/com/royalpay/payment/manage/merchants/entity/impls/AuditModify.java +++ b/src/main/java/au/com/royalpay/payment/manage/merchants/entity/impls/AuditModify.java @@ -19,7 +19,6 @@ public class AuditModify extends ClientModify { private Date approve_time; private String refuse_remark; - public AuditModify(JSONObject account, String clientMoniker, Integer approve_result, String approver, Date approve_time) { super(account, clientMoniker); this.approve_result = approve_result; @@ -35,17 +34,15 @@ public class AuditModify extends ClientModify { @Override protected JSONObject getModifyResult() { JSONObject modify = new JSONObject(); - modify.put("approve_result",approve_result); - modify.put("approver",approver); - modify.put("approve_time",approve_time); - if(source!=null){ - modify.put("source",source); - } - if(open_status!=null){ - modify.put("open_status",open_status); + modify.put("approve_result", approve_result); + modify.put("approver", approver); + modify.put("approve_time", approve_time); + if (source != null) { + modify.put("source", source); } - if(StringUtils.isNotEmpty(refuse_remark)){ - modify.put("refuse_remark",refuse_remark); + modify.put("open_status", open_status); + if (StringUtils.isNotEmpty(refuse_remark)) { + modify.put("refuse_remark", refuse_remark); } return modify; } @@ -66,4 +63,3 @@ public class AuditModify extends ClientModify { this.approve_result = approve_result; } } - From c0bd0d4d6cbad9a909e6300f20f02a9164f93c1a Mon Sep 17 00:00:00 2001 From: "eason.qian" Date: Wed, 9 May 2018 09:42:58 +0800 Subject: [PATCH 04/41] fix --- .../royalpay/payment/manage/task/CustomerImpressionTask.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 c01de9a20..ae7b5ac16 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 @@ -30,7 +30,7 @@ public class CustomerImpressionTask { private ThreadPoolExecutor generatePool = new ThreadPoolExecutor(10, 30, 5, TimeUnit.SECONDS, new LinkedBlockingQueue()); - @Scheduled(cron = "0 0 4 * * ?") + @Scheduled(cron = "0 30 3 * * ?") public void generateTags() { List clients = clientMapper.listValidClient(); List> splitList = new ArrayList<>(); From 015e1e388dab3bf8cca044817c57c590c30c27a2 Mon Sep 17 00:00:00 2001 From: yuan <1551130722@qq.com> Date: Wed, 9 May 2018 10:34:04 +0800 Subject: [PATCH 05/41] =?UTF-8?q?=E9=A3=8E=E6=8E=A7=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=AD=9B=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../manage/risk/bean/QueryRiskRecord.java | 17 +++++++--- src/main/ui/static/risk/templates/risk.html | 32 ++++++++++++++++++- 2 files changed, 44 insertions(+), 5 deletions(-) diff --git a/src/main/java/au/com/royalpay/payment/manage/risk/bean/QueryRiskRecord.java b/src/main/java/au/com/royalpay/payment/manage/risk/bean/QueryRiskRecord.java index e43902673..16ab92af8 100644 --- a/src/main/java/au/com/royalpay/payment/manage/risk/bean/QueryRiskRecord.java +++ b/src/main/java/au/com/royalpay/payment/manage/risk/bean/QueryRiskRecord.java @@ -2,6 +2,7 @@ package au.com.royalpay.payment.manage.risk.bean; import com.alibaba.fastjson.JSONObject; +import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.DateUtils; import java.text.ParseException; @@ -19,10 +20,18 @@ public class QueryRiskRecord { public JSONObject toParams() { JSONObject params = new JSONObject(); - params.put("status", this.status); - params.put("client_moniker", this.client_moniker); - params.put("record_id", this.record_id); - params.put("client_id", this.client_id); + if(StringUtils.isNotEmpty(status)){ + params.put("status", this.status); + } + if(StringUtils.isNotEmpty(client_moniker)){ + params.put("client_moniker", this.client_moniker); + } + if(StringUtils.isNotEmpty(record_id)){ + params.put("record_id", this.record_id); + } + if(StringUtils.isNotEmpty(String.valueOf(client_id))){ + params.put("client_id", this.client_id); + } try { if (c_end_time != null) { params.put("c_end_time", DateUtils.parseDate(this.c_end_time, new String[] { "yyyy-MM-dd HH:mm:ss" })); diff --git a/src/main/ui/static/risk/templates/risk.html b/src/main/ui/static/risk/templates/risk.html index ff55c8552..c53c559d8 100644 --- a/src/main/ui/static/risk/templates/risk.html +++ b/src/main/ui/static/risk/templates/risk.html @@ -7,7 +7,37 @@
-
+
+
+
+
+ + +
+    +
+ + + +
+
+ +
+
+
+
+
Records
From 631f705000cc908ba72d331ea03dcca72ee94935 Mon Sep 17 00:00:00 2001 From: yuan <1551130722@qq.com> Date: Wed, 9 May 2018 10:46:49 +0800 Subject: [PATCH 06/41] =?UTF-8?q?dashboard=E4=BA=A4=E6=98=93=E9=A2=9D?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../analysis/core/impls/DashboardServiceImpl.java | 15 +++++++++++++-- src/main/ui/static/dashboard/dashboard.js | 4 ++-- .../ui/static/dashboard/templates/dashboard.html | 4 ++-- 3 files changed, 17 insertions(+), 6 deletions(-) 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 c7a51b3ca..be08de126 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 @@ -23,6 +23,7 @@ import org.apache.commons.lang3.time.DurationFormatUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.cache.annotation.Cacheable; +import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; import java.math.BigDecimal; @@ -35,6 +36,7 @@ import java.util.List; import java.util.Map; import java.util.TimeZone; import java.util.TreeMap; +import java.util.concurrent.TimeUnit; import javax.annotation.Resource; @@ -60,12 +62,22 @@ public class DashboardServiceImpl implements DashboardService,DashboardAnalysisT @Resource private TransactionMapper transactionMapper; + @Resource + private StringRedisTemplate stringRedisTemplate; + @Override public JSONObject getCommonAnalysis1(JSONObject params) { + String jsonStr = stringRedisTemplate.boundValueOps("org_commonAnalysis1"+ params.getString("org_id")+ params.getString("begin")).get(); + JSONObject commonAnalysis1 = JSONObject.parseObject(jsonStr); + if(commonAnalysis1 != null){ + return commonAnalysis1; + } JSONObject res = transactionAnalysisMapper.getClientTransaction(params); -// res.put("new_partners", clientAnalysisMapper.countNewClients(params)); + stringRedisTemplate.boundValueOps("org_commonAnalysis1"+params.getString("org_id")+params.getString("begin")).set(res.toJSONString(), 5, TimeUnit.MINUTES); + return res; + // res.put("new_partners", clientAnalysisMapper.countNewClients(params)); // res.put("total_partners", clientAnalysisMapper.countClients(params)); // res.put("traded_partners", clientAnalysisMapper.countTradedPartners(params)); // List topOrders = transactionAnalysisMapper.getTopOrders(params, new PageBounds(1, 1, Order.formString("aud_fee.desc"))); @@ -75,7 +87,6 @@ public class DashboardServiceImpl implements DashboardService,DashboardAnalysisT // res.put("total_customers", transactionAnalysisMapper.countCustomers(params)); // //res.put("new_customers", transactionAnalysisMapper.countNewCustomers(params)); // res.put("old_customers", transactionAnalysisMapper.countOldCustomers(params)); - return res; } @Override diff --git a/src/main/ui/static/dashboard/dashboard.js b/src/main/ui/static/dashboard/dashboard.js index 088b02048..ba0da91b9 100644 --- a/src/main/ui/static/dashboard/dashboard.js +++ b/src/main/ui/static/dashboard/dashboard.js @@ -415,7 +415,7 @@ define(['angular', 'uiRouter', 'uiBootstrap', 'angularEcharts'], function (angul }) } - function loadFeeAnalysis(params) { + /*function loadFeeAnalysis(params) { var analysisConfig = { chart: { tooltip: { @@ -473,7 +473,7 @@ define(['angular', 'uiRouter', 'uiBootstrap', 'angularEcharts'], function (angul }) } - loadFeeAnalysis($scope.scales[2].params()) + loadFeeAnalysis($scope.scales[2].params())*/ function getMaxRecord() { if ($scope.currentUser.org_id == null) { diff --git a/src/main/ui/static/dashboard/templates/dashboard.html b/src/main/ui/static/dashboard/templates/dashboard.html index 75c4371f7..1eb8df98a 100644 --- a/src/main/ui/static/dashboard/templates/dashboard.html +++ b/src/main/ui/static/dashboard/templates/dashboard.html @@ -232,7 +232,7 @@ -
+
From 665021e05d6411c9115fb3b71246ccac85c32f7e Mon Sep 17 00:00:00 2001 From: wangning <164851225@qq.com> Date: Wed, 9 May 2018 13:23:24 +0800 Subject: [PATCH 07/41] bug fix --- .../core/impls/ActMonDelaySettleServiceImp.java | 5 +++-- .../manage/appclient/core/impls/RetailAppServiceImp.java | 3 ++- .../payment/manage/merchants/core/ClientManager.java | 2 +- .../manage/merchants/core/impls/ClientManagerImpl.java | 8 ++------ .../manage/merchants/web/PartnerViewController.java | 2 +- 5 files changed, 9 insertions(+), 11 deletions(-) diff --git a/src/main/java/au/com/royalpay/payment/manage/activities/monsettledelay/core/impls/ActMonDelaySettleServiceImp.java b/src/main/java/au/com/royalpay/payment/manage/activities/monsettledelay/core/impls/ActMonDelaySettleServiceImp.java index f553a604b..fa21fd761 100644 --- a/src/main/java/au/com/royalpay/payment/manage/activities/monsettledelay/core/impls/ActMonDelaySettleServiceImp.java +++ b/src/main/java/au/com/royalpay/payment/manage/activities/monsettledelay/core/impls/ActMonDelaySettleServiceImp.java @@ -152,7 +152,7 @@ public class ActMonDelaySettleServiceImp implements ActMonDelaySettleService { device.put("rate", params.getBigDecimal("rate") == null ? new BigDecimal(0.15) : params.getBigDecimal("rate")); device.put("expire_time", act.getDate("expire_date")); actMonDelaySettleMapper.save(device); - clientManager.changeManualSettle(client_id,true,device.getString("account_id"),1,"参加活动打开手动清算"); + clientManager.changeManualSettle(account,client_id,true,device.getString("account_id"),1,"参加活动打开手动清算"); } @@ -174,7 +174,8 @@ public class ActMonDelaySettleServiceImp implements ActMonDelaySettleService { clientLog.put("is_valid", 0); clientLog.put("expire_time", new Date()); actMonDelaySettleMapper.update(clientLog); - clientManager.changeManualSettle(client_id,false,device.getString("account_id"),1,"退出活动关闭手动清算"); + JSONObject account = clientAccountMapper.findById(device.getString("account_id")); + clientManager.changeManualSettle(account,client_id,false,device.getString("account_id"),1,"退出活动关闭手动清算"); } private void recodeActClient(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 30038b918..ee01712c7 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 @@ -1542,7 +1542,8 @@ public class RetailAppServiceImp implements RetailAppService { @Override public void changeManualSettle(JSONObject device, boolean manual_settle) { - clientManager.changeManualSettle(device.getIntValue("client_id"), manual_settle, device.getString("account_id"), 1, "商户"+(manual_settle?"打开":"关闭")+"手动清算"); + JSONObject account = clientAccountMapper.findById(device.getString("account_id")); + clientManager.changeManualSettle(account,device.getIntValue("client_id"), manual_settle, device.getString("account_id"), 1, "商户"+(manual_settle?"打开":"关闭")+"手动清算"); } 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 4f2a1293f..dd3a36ba7 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 @@ -229,7 +229,7 @@ public interface ClientManager { void changePaymentPage(JSONObject account, String paypad_version); - void changeManualSettle(int client_id, boolean manual_settle,String operator_id,int type,String operation); + void changeManualSettle(JSONObject account , int client_id, boolean manual_settle,String operator_id,int type,String operation); void changeQRCodePaySurcharge(JSONObject account, boolean paySurcharge); 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 0540b3bb7..8f5479ca2 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 @@ -2676,16 +2676,12 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid @Override @Transactional - public void changeManualSettle(int client_id, boolean manual_settle, String operator_id, int type, String operation) { + public void changeManualSettle(JSONObject account,int client_id, boolean manual_settle, String operator_id, int type, String operation) { JSONObject client = getClientInfo(client_id); if (client == null) { throw new BadRequestException("merchant not found"); } - JSONObject record = new JSONObject(); - record.put("client_id", client_id); - record.put("manual_settle", manual_settle); - clientConfigService.update(record); - + clientModifySupport.processClientConfigModify(new SwitchPermissionModify(account,client.getString("client_moniker"),"manual_settle",manual_settle)); JSONObject actClientLog = new JSONObject(); actClientLog.put("client_id", client_id); actClientLog.put("operator_id", operator_id); diff --git a/src/main/java/au/com/royalpay/payment/manage/merchants/web/PartnerViewController.java b/src/main/java/au/com/royalpay/payment/manage/merchants/web/PartnerViewController.java index 59567a097..3e2e8fcad 100644 --- a/src/main/java/au/com/royalpay/payment/manage/merchants/web/PartnerViewController.java +++ b/src/main/java/au/com/royalpay/payment/manage/merchants/web/PartnerViewController.java @@ -365,7 +365,7 @@ public class PartnerViewController { @PartnerMapping(value = "/manual_settle", method = RequestMethod.PUT, roles = PartnerRole.ADMIN) @ResponseBody public void manualSettle(@ModelAttribute(CommonConsts.PARTNER_STATUS) JSONObject account, @RequestParam boolean manual_settle) { - clientManager.changeManualSettle(account.getIntValue("client_id"), manual_settle, account.getString("account_id"), 1, "商户" + (manual_settle ? "打开" : "关闭") + "手动清算"); + clientManager.changeManualSettle(account,account.getIntValue("client_id"), manual_settle, account.getString("account_id"), 1, "商户" + (manual_settle ? "打开" : "关闭") + "手动清算"); } @PartnerMapping(value = "/checkContract", method = RequestMethod.GET) From f3f6af80f6963da9489e8daedc4fac9e41c33112 Mon Sep 17 00:00:00 2001 From: yuan <1551130722@qq.com> Date: Wed, 9 May 2018 18:31:34 +0800 Subject: [PATCH 08/41] =?UTF-8?q?=E5=95=86=E6=88=B7=E7=AB=AF=E5=A2=9E?= =?UTF-8?q?=E5=95=86=E6=88=B7=E8=AE=A2=E5=8D=95ID=E7=94=9F=E6=88=90?= =?UTF-8?q?=E4=BA=8C=E7=BB=B4=E7=A0=81=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/db/modify.sql | 25 +++ .../billqrcode/bean/NewBillQrCodeBean.java | 77 ++++++++++ .../manage/billqrcode/bean/QueryBillBean.java | 46 ++++++ .../billqrcode/core/PartnerBillService.java | 20 +++ .../core/impl/PartnerBillServiceImpl.java | 128 ++++++++++++++++ .../billqrcode/web/PartnerBillController.java | 37 +++++ .../billqrcode/DirectedBillCodeMapper.java | 33 ++++ .../impl/MerchantIdManageServiceImpl.java | 14 +- .../DirectedBillCodeStatusDailyCheck.java | 23 +++ src/main/ui/index.html | 5 + src/main/ui/static/boot/index-boot.js | 3 +- .../payment/billqrcode/bill-qrcode-manage.js | 85 ++++++++++ .../billqrcode/templates/bill_qrcode.html | 145 ++++++++++++++++++ 13 files changed, 631 insertions(+), 10 deletions(-) create mode 100644 src/main/java/au/com/royalpay/payment/manage/billqrcode/bean/NewBillQrCodeBean.java create mode 100644 src/main/java/au/com/royalpay/payment/manage/billqrcode/bean/QueryBillBean.java create mode 100644 src/main/java/au/com/royalpay/payment/manage/billqrcode/core/PartnerBillService.java create mode 100644 src/main/java/au/com/royalpay/payment/manage/billqrcode/core/impl/PartnerBillServiceImpl.java create mode 100644 src/main/java/au/com/royalpay/payment/manage/billqrcode/web/PartnerBillController.java create mode 100644 src/main/java/au/com/royalpay/payment/manage/mappers/billqrcode/DirectedBillCodeMapper.java create mode 100644 src/main/java/au/com/royalpay/payment/manage/task/DirectedBillCodeStatusDailyCheck.java create mode 100644 src/main/ui/static/payment/billqrcode/bill-qrcode-manage.js create mode 100644 src/main/ui/static/payment/billqrcode/templates/bill_qrcode.html diff --git a/src/db/modify.sql b/src/db/modify.sql index f37a998db..79f642563 100644 --- a/src/db/modify.sql +++ b/src/db/modify.sql @@ -466,3 +466,28 @@ insert into `royalpay_production`.`sys_configs` ( `config_key`, `config_value`) insert into `royalpay_production`.`sys_configs` ( `config_key`, `config_value`) values ( 'risk_total_amout', '5000'); +CREATE TABLE `pmt_directed_bill_code` ( + `bill_code_id` varchar(50) NOT NULL DEFAULT '', + `client_id` int(15) not NULL, + `client_order_id` varchar(50) DEFAULT NULL, + `status` int(10) DEFAULT '1' COMMENT '账单状态 1:可用,2:关闭 3:完成', + `customer_id` varchar(200) DEFAULT NULL COMMENT 'open_id', + `create_time` datetime not NULL DEFAULT now() comment '账单创建时间', + `currency` varchar(10) not NULL, + `remark` varchar(200) DEFAULT NULL, + `cancle_time` datetime DEFAULT NULL, + `channel` varchar(10) DEFAULT NULL, + `nickname` varchar(80) DEFAULT NULL, + `headimg` varchar(200) DEFAULT NULL, + `code_url` varchar(200) DEFAULT '', + `order_id` varchar(50) DEFAULT '', + `order_amount` decimal(10,4) not NULL comment '账单金额', + `pay_amount` decimal(10,4) DEFAULT NULL comment '订单支付金额', + `pay_time` datetime DEFAULT NULL comment '支付时间', + `order_status` int(10) DEFAULT NULL COMMENT '订单状态(0-New,1-OrderFailed,2-WaitingForPayment,3-OrderCanceled,4-PaymentFailed,5-PaymentSuccess,6-PartialRefund,7-FullRefund)', + PRIMARY KEY (`bill_code_id`), + KEY `client_id` (`client_id`), + KEY `order_id` (`order_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 + + diff --git a/src/main/java/au/com/royalpay/payment/manage/billqrcode/bean/NewBillQrCodeBean.java b/src/main/java/au/com/royalpay/payment/manage/billqrcode/bean/NewBillQrCodeBean.java new file mode 100644 index 000000000..937620a67 --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/billqrcode/bean/NewBillQrCodeBean.java @@ -0,0 +1,77 @@ +package au.com.royalpay.payment.manage.billqrcode.bean; + +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.lang3.StringUtils; + +import java.math.BigDecimal; + +public class NewBillQrCodeBean { + + private BigDecimal order_amount; + + private String currency = "AUD"; + + private String remark; + + private String cancle_time; + + private String client_order_id; + + public JSONObject toJson(){ + JSONObject record = new JSONObject(); + if(order_amount != null){ + record.put("order_amount",order_amount); + } + if(StringUtils.isNotEmpty(remark)){ + record.put("remark",remark); + } + if(StringUtils.isNotEmpty(client_order_id)){ + record.put("client_order_id",client_order_id); + } + if (StringUtils.isNotEmpty(cancle_time)) { + record.put("cancle_time",cancle_time); + } + record.put("currency",currency); + return record; + } + + public BigDecimal getOrder_amount() { + return order_amount; + } + + public void setOrder_amount(BigDecimal order_amount) { + this.order_amount = order_amount; + } + + public String getCurrency() { + return currency; + } + + public void setCurrency(String currency) { + this.currency = currency; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getCancle_time() { + return cancle_time; + } + + public void setCancle_time(String cancle_time) { + this.cancle_time = cancle_time; + } + + public String getClient_order_id() { + return client_order_id; + } + + public void setClient_order_id(String client_order_id) { + this.client_order_id = client_order_id; + } +} diff --git a/src/main/java/au/com/royalpay/payment/manage/billqrcode/bean/QueryBillBean.java b/src/main/java/au/com/royalpay/payment/manage/billqrcode/bean/QueryBillBean.java new file mode 100644 index 000000000..deef3ecf9 --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/billqrcode/bean/QueryBillBean.java @@ -0,0 +1,46 @@ +package au.com.royalpay.payment.manage.billqrcode.bean; + +import com.alibaba.fastjson.JSONObject; +import com.sun.tools.hat.internal.model.JavaObject; +import org.apache.commons.lang3.StringUtils; + +/** + * Created by yuan on 2018/5/9. + */ +public class QueryBillBean { + private int limit = 10; + private int page = 1; + private String status; + + public JSONObject toJson(){ + JSONObject jason = new JSONObject(); + if(StringUtils.isNotEmpty(status)){ + jason.put("status",status); + } + return jason; + } + + public int getLimit() { + return limit; + } + + public void setLimit(int limit) { + this.limit = limit; + } + + public int getPage() { + return page; + } + + public void setPage(int page) { + this.page = page; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } +} diff --git a/src/main/java/au/com/royalpay/payment/manage/billqrcode/core/PartnerBillService.java b/src/main/java/au/com/royalpay/payment/manage/billqrcode/core/PartnerBillService.java new file mode 100644 index 000000000..def496f3c --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/billqrcode/core/PartnerBillService.java @@ -0,0 +1,20 @@ +package au.com.royalpay.payment.manage.billqrcode.core; + +import au.com.royalpay.payment.manage.billqrcode.bean.NewBillQrCodeBean; +import au.com.royalpay.payment.manage.billqrcode.bean.QueryBillBean; +import com.alibaba.fastjson.JSONObject; + +import java.util.List; + +/** + * Created by yuan on 2018/5/3. + */ +public interface PartnerBillService { + String saveBill(JSONObject partner, NewBillQrCodeBean newBillQrCodeBean); + + List listBills(JSONObject partner, QueryBillBean queryBillBean); + + void dailyCheckDirectedBillCode(); + + void disableBills(JSONObject partner,String bill_code_id); +} diff --git a/src/main/java/au/com/royalpay/payment/manage/billqrcode/core/impl/PartnerBillServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/billqrcode/core/impl/PartnerBillServiceImpl.java new file mode 100644 index 000000000..5219dcde8 --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/billqrcode/core/impl/PartnerBillServiceImpl.java @@ -0,0 +1,128 @@ +package au.com.royalpay.payment.manage.billqrcode.core.impl; + +import au.com.royalpay.payment.manage.billqrcode.bean.NewBillQrCodeBean; +import au.com.royalpay.payment.manage.billqrcode.bean.QueryBillBean; +import au.com.royalpay.payment.manage.billqrcode.core.PartnerBillService; +import au.com.royalpay.payment.manage.mappers.billqrcode.DirectedBillCodeMapper; +import au.com.royalpay.payment.manage.mappers.system.ClientMapper; +import au.com.royalpay.payment.manage.merchants.core.ClientManager; +import au.com.royalpay.payment.tools.env.PlatformEnvironment; +import au.com.royalpay.payment.tools.exceptions.BadRequestException; +import au.com.royalpay.payment.tools.exceptions.NotFoundException; +import au.com.royalpay.payment.tools.utils.QRCodeUtils; +import com.alibaba.fastjson.JSONObject; +import com.github.miemiedev.mybatis.paginator.domain.Order; +import com.github.miemiedev.mybatis.paginator.domain.PageBounds; +import javafx.scene.chart.PieChart; +import org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.time.DateFormatUtils; +import org.apache.commons.lang3.time.DateUtils; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +/** + * Created by yuan on 2018/5/3. + */ +@Service +public class PartnerBillServiceImpl implements PartnerBillService { + private org.slf4j.Logger logger = LoggerFactory.getLogger(getClass()); + @Resource + private ClientMapper clientMapper; + + @Resource + private ClientManager clientManager; + + @Resource + private DirectedBillCodeMapper directedBillCodeMapper; + + + @Override + @Transactional + public String saveBill(JSONObject partner, NewBillQrCodeBean newBillQrCodeBean) { + JSONObject client = clientMapper.findClientByMoniker(partner.getString("client_moniker")); + if (client == null) { + throw new NotFoundException("client info not found"); + } + if(StringUtils.isNotEmpty(newBillQrCodeBean.getClient_order_id())){ + JSONObject bill = directedBillCodeMapper.findOne(newBillQrCodeBean.getClient_order_id()); + if(bill != null){ + if(bill.getIntValue("status") == 2){ + throw new BadRequestException("该订单已关闭,请确认"); + } + if(bill.getIntValue("status") == 3){ + throw new BadRequestException("该订单已完成,请确认"); + } + if(bill.getIntValue("status") == 1){ + if(bill.getBigDecimal("order_amount") == newBillQrCodeBean.getOrder_amount()){ + return QRCodeUtils.qrcodeImageCode(bill.getString("code_url"), 250, false); + } + throw new BadRequestException("已有相同订单号正在被支付,详情请查看订单列表"); + } + } + } + JSONObject record = newBillQrCodeBean.toJson(); + if(record.getString("client_order_id") == null){ + record.put("client_order_id","Bill_" + DateFormatUtils.format(new Date(), "yyyyMMddHHmmss") + "_" + RandomStringUtils.random(5, true, true).toUpperCase()); + } + record.put("client_id",partner.getIntValue("client_id")); + record.put("create_time", new Date()); + record.put("status",1); + directedBillCodeMapper.save(record); + String code_url = getQRCodeImg(record); + record.put("code_url",code_url); + directedBillCodeMapper.update(record); + return QRCodeUtils.qrcodeImageCode(code_url, 250, false); + } + + private String getQRCodeImg(JSONObject bill){ + return PlatformEnvironment.getEnv().concatUrl("api/v1.0/business/bills/"+bill.getString("bill_code_id")); + } + + @Override + public List listBills(JSONObject partner, QueryBillBean queryBillBean) { + int client_id = partner.getInteger("client_id"); + JSONObject client = clientManager.getClientInfo(client_id); + if (client == null) { + throw new NotFoundException("client info not found"); + } + JSONObject params = queryBillBean.toJson(); + params.put("client_id",client_id); + List bills = directedBillCodeMapper.findByClientId(params,new PageBounds(queryBillBean.getPage(),queryBillBean.getLimit(), Order.formString("create_time.desc"))); + bills.stream().filter(t->t.getString("code_url")!= null).forEach(t->t.put("code_url",QRCodeUtils.qrcodeImageCode(t.getString("code_url"), 250, false))); + return bills; + } + + @Override + public void disableBills(JSONObject partner, String bill_code_id) { + int client_id = partner.getInteger("client_id"); + JSONObject client = clientManager.getClientInfo(client_id); + if (client == null) { + throw new NotFoundException("client info not found"); + } + JSONObject bill = directedBillCodeMapper.findOneByBillCodeId(bill_code_id); + if(bill.getIntValue("status")==1){ + if(bill.getString("order_id") != null){ + bill.put("status",2); + directedBillCodeMapper.update(bill); + } + } + } + + @Override + public void dailyCheckDirectedBillCode() { + List listAllBill = directedBillCodeMapper.listAllBills(); + for (JSONObject bill: listAllBill) { + if(DateUtils.addDays(bill.getDate("cancle_time"),1).before(new Date())){ + bill.put("status",2); + directedBillCodeMapper.update(bill); + } + } + } +} diff --git a/src/main/java/au/com/royalpay/payment/manage/billqrcode/web/PartnerBillController.java b/src/main/java/au/com/royalpay/payment/manage/billqrcode/web/PartnerBillController.java new file mode 100644 index 000000000..745f281a8 --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/billqrcode/web/PartnerBillController.java @@ -0,0 +1,37 @@ +package au.com.royalpay.payment.manage.billqrcode.web; + +import au.com.royalpay.payment.manage.billqrcode.bean.NewBillQrCodeBean; +import au.com.royalpay.payment.manage.billqrcode.bean.QueryBillBean; +import au.com.royalpay.payment.manage.billqrcode.core.PartnerBillService; +import au.com.royalpay.payment.manage.permission.manager.PartnerMapping; +import au.com.royalpay.payment.tools.CommonConsts; +import com.alibaba.fastjson.JSONObject; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * Created by yuan on 2018/5/3. + */ +@RestController +@RequestMapping("/partner/qrcode") +public class PartnerBillController { + + @Resource + private PartnerBillService partnerBillService; + + @PartnerMapping(value = "/bills", method = RequestMethod.POST) + public String addBill(@ModelAttribute(CommonConsts.PARTNER_STATUS) JSONObject partner, @RequestBody NewBillQrCodeBean newBillQrCodeBean) { + return partnerBillService.saveBill(partner, newBillQrCodeBean); + } + + @PartnerMapping(value = "", method = RequestMethod.GET) + public List listBills(@ModelAttribute(CommonConsts.PARTNER_STATUS) JSONObject partner, QueryBillBean queryBillBean) { + return partnerBillService.listBills(partner,queryBillBean); + } + @PartnerMapping(value = "/{bill_code_id}", method = RequestMethod.DELETE) + public void disableBills(@ModelAttribute(CommonConsts.PARTNER_STATUS) JSONObject partner,@PathVariable String bill_code_id) { + partnerBillService.disableBills(partner,bill_code_id); + } +} diff --git a/src/main/java/au/com/royalpay/payment/manage/mappers/billqrcode/DirectedBillCodeMapper.java b/src/main/java/au/com/royalpay/payment/manage/mappers/billqrcode/DirectedBillCodeMapper.java new file mode 100644 index 000000000..95b64f29e --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/mappers/billqrcode/DirectedBillCodeMapper.java @@ -0,0 +1,33 @@ +package au.com.royalpay.payment.manage.mappers.billqrcode; + +import cn.yixblog.support.mybatis.autosql.annotations.AdvanceSelect; +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 org.apache.ibatis.annotations.Param; + +import java.util.List; + +@AutoMapper(tablename = "pmt_directed_bill_code", pkName = "bill_code_id") +public interface DirectedBillCodeMapper { + @AutoSql(type = SqlType.INSERT) + int save(JSONObject record); + + @AutoSql(type = SqlType.SELECT) + JSONObject findOne(@Param("client_order_id") String client_order_id); + + @AutoSql(type = SqlType.SELECT) + JSONObject findOneByBillCodeId(@Param("bill_code_id") String bill_code_id); + + @AutoSql(type = SqlType.UPDATE) + int update(JSONObject record); + + @AutoSql(type = SqlType.SELECT) + List findByClientId(JSONObject params, PageBounds pageBounds); + + @AutoSql(type = SqlType.SELECT) + @AdvanceSelect(addonWhereClause = "status=1") + List listAllBills(); +} diff --git a/src/main/java/au/com/royalpay/payment/manage/merchantid/core/impl/MerchantIdManageServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/merchantid/core/impl/MerchantIdManageServiceImpl.java index cb6618a72..6a77ac270 100644 --- a/src/main/java/au/com/royalpay/payment/manage/merchantid/core/impl/MerchantIdManageServiceImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/merchantid/core/impl/MerchantIdManageServiceImpl.java @@ -7,6 +7,7 @@ import au.com.royalpay.payment.manage.mappers.client.ClientSubMerchantIdMapper; import au.com.royalpay.payment.manage.mappers.payment.CommonSubMerchantIdMapper; import au.com.royalpay.payment.manage.mappers.system.ClientMapper; import au.com.royalpay.payment.manage.merchantid.core.MerchantIdManageService; +import au.com.royalpay.payment.tools.env.PlatformEnvironment; import au.com.royalpay.payment.tools.env.SysConfigManager; import au.com.royalpay.payment.tools.exceptions.BadRequestException; import au.com.royalpay.payment.tools.exceptions.ServerErrorException; @@ -144,19 +145,14 @@ public class MerchantIdManageServiceImpl implements MerchantIdManageService { @Override public JSONObject getClientQrCodeImg(JSONObject manager,String sub_merchant_id) { - List clientMonikers = showClientMoniker(manager,sub_merchant_id); - if(clientMonikers.isEmpty()){ - throw new BadRequestException("当前子商户号下暂无商户"); - } - String partner_code = clientMonikers.get(0).getString("client_moniker"); + String partner_code = "PINE"; String orderId = "Merchant" + DateFormatUtils.format(new Date(), "yyyyMMddHHmmss") + "_" + RandomStringUtils.random(5, true, true).toUpperCase(); JSONObject param = new JSONObject(); - param.put("price", 10); + param.put("price", 1); param.put("description", "order"); param.put("operator", "web"); - param.put("currency","CNY"); - String createUrl= "https://mpay.royalpay.com.au/api/v1.0/gateway/partners/" + partner_code + "/orders/" + orderId + "?" + queryParams(partner_code); - + param.put("sub_merchant_id",sub_merchant_id); + String createUrl= PlatformEnvironment.getEnv().concatUrl("api/v1.0/gateway/partners/" + partner_code + "/orders/" + orderId +"/manager/test"+"?" + queryParams(partner_code)); HttpRequestResult result = null; try { result = new HttpRequestGenerator(createUrl, RequestMethod.PUT).setJSONEntity(param).execute(); diff --git a/src/main/java/au/com/royalpay/payment/manage/task/DirectedBillCodeStatusDailyCheck.java b/src/main/java/au/com/royalpay/payment/manage/task/DirectedBillCodeStatusDailyCheck.java new file mode 100644 index 000000000..0ac13ed48 --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/task/DirectedBillCodeStatusDailyCheck.java @@ -0,0 +1,23 @@ +package au.com.royalpay.payment.manage.task; + +import au.com.royalpay.payment.manage.billqrcode.core.PartnerBillService; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * Created by yuan on 2018/5/4. + */ +@Component +@ConditionalOnProperty(value = "app.run-tasks", havingValue = "true") +public class DirectedBillCodeStatusDailyCheck { + @Resource + private PartnerBillService partnerBillService; + + @Scheduled(cron = "0 0 6 * * ?") + public void statusDailyCheck(){ + partnerBillService.dailyCheckDirectedBillCode(); + } +} diff --git a/src/main/ui/index.html b/src/main/ui/index.html index 26b8502c2..73ffa320f 100644 --- a/src/main/ui/index.html +++ b/src/main/ui/index.html @@ -888,6 +888,11 @@ margin-bottom: 10%;"/> Cashiers Management +
  • + + Bill QR Code + +
  • diff --git a/src/main/ui/static/boot/index-boot.js b/src/main/ui/static/boot/index-boot.js index 66de21a27..6e225f3e0 100644 --- a/src/main/ui/static/boot/index-boot.js +++ b/src/main/ui/static/boot/index-boot.js @@ -75,7 +75,8 @@ var modules = [ {path: 'static/application/clientAuthentication', module: 'clientAuthentication', roles: [1]}, {path: 'static/cashback/partner-cashback', module: 'cashbackApp', roles: [1,2,3]}, {path: 'static/integralmall/coupon_cancellation', module: 'couponCancellation', roles: [1,2]}, - {path: 'static/invoice/invoice_assistant', module: 'partnerInvoice', roles: [1]} + {path: 'static/invoice/invoice_assistant', module: 'partnerInvoice', roles: [1]}, + {path: 'static/payment/billqrcode/bill-qrcode-manage', module: 'billQrCodeManagement', roles: [1,2,3]} ]; require(['angular', 'jquery'], function (angular, $) { diff --git a/src/main/ui/static/payment/billqrcode/bill-qrcode-manage.js b/src/main/ui/static/payment/billqrcode/bill-qrcode-manage.js new file mode 100644 index 000000000..cfad253ef --- /dev/null +++ b/src/main/ui/static/payment/billqrcode/bill-qrcode-manage.js @@ -0,0 +1,85 @@ +define(['angular', 'static/commons/commons', 'uiBootstrap', 'uiRouter', 'ngBootSwitch', 'ngFileUpload'], function (angular) { + 'use strict'; + + var app = angular.module('billQrCodeManagement', ['ui.bootstrap', 'ui.router', 'frapontillo.bootstrap-switch', 'ngFileUpload']); + app.config(['$stateProvider', function ($stateProvider) { + $stateProvider.state('bill_qrcode', { + url: '/bill_qrcode', + templateUrl: '/static/payment/billqrcode/templates/bill_qrcode.html', + controller: 'billQrCodeCtrl' + }) + }]); + app.controller('billQrCodeCtrl', ['$scope', '$http', 'commonDialog','$filter','orderService', function ($scope, $http, commonDialog,$filter,orderService) { + $scope.pagination = {}; + $scope.params = {}; + $scope.new_bill = {}; + $scope.today = new Date(); + + $scope.loadBills = function (page) { + var params = angular.copy($scope.params); + params.page = page || $scope.pagination.page || 1; + $http.get('/partner/qrcode', {params: params}).then(function (resp) { + $scope.bills = resp.data; + $scope.pagination = resp.data.pagination; + }); + }; + $scope.loadBills(1); + $scope.generateBill = function () { + var params = angular.copy($scope.new_bill); + if(!params.client_order_id){ + alert("client order id为空,是否后台自动生成?"); + } + if(!params.order_amount){ + alert("order amount不可为空!"); + return; + } + if(params.cancle_time){ + params.cancle_time = $filter('date')(params.cancle_time, 'yyyy-MM-dd HH:mm:ss') + }else { + alert("Expire Date 不可为空!"); + } + $http.post('/partner/qrcode/bills',params).then(function (resp) { + commonDialog.alert({title: 'Success', content: 'Success', type: 'success'}); + $scope.code_url = resp.data; + $scope.loadBills(1); + },function (resp) { + commonDialog.alert({title: 'Error', content: resp.data.message, type: 'error'}); + }); + }; + $scope.disableBill = function (bill) { + commonDialog.confirm( + { + title: 'Delete Bill', + content: 'Are you sure to delete this bill?' + }).then(function () { + $http.delete('/partner/qrcode/'+bill.bill_code_id).then(function(){ + $scope.loadBills(1); + }); + }) + }; + $scope.clearBill = function () { + $scope.new_bill = {}; + $scope.code_url = ""; + }; + + $scope.showTradeDetail = function (order) { + orderService.clientOrderDetail(order) + }; + }]); + + app.filter('billStatus', function () { + return function (status) { + switch (status + '') { + case '1': + return 'wait for payment'; + case '2': + return 'disabled'; + case '3': + return 'payment success' + } + } + }); + + + return app; +}); \ No newline at end of file diff --git a/src/main/ui/static/payment/billqrcode/templates/bill_qrcode.html b/src/main/ui/static/payment/billqrcode/templates/bill_qrcode.html new file mode 100644 index 000000000..6a8e58cf5 --- /dev/null +++ b/src/main/ui/static/payment/billqrcode/templates/bill_qrcode.html @@ -0,0 +1,145 @@ +
    +
    +

    Bill QR Code

    + +
    + +
    +
    +
    +
    +
    +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    + +
    + +
    + +

    Client Order Id 为空时,系统自动生成

    +
    +
    +
    + +
    + +
    +
    +
    + +
    +     + +
    +
    +
    + +
    +
    +
    +
    +

    Bill List      + All | + Success | + Disabled + +

    +
    +
    +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + +
    PriceClient Order IdCreate timeExpire timeRemarkOrder StatusBill StatusPayerOperation
    + + + + + Disable +
    +
    + +
    +
    +
    + + + \ No newline at end of file From 2f2d21f03e97d139dfba3c207dcb43a776f4b1ec Mon Sep 17 00:00:00 2001 From: yuan <1551130722@qq.com> Date: Wed, 9 May 2018 19:00:32 +0800 Subject: [PATCH 09/41] fix~ --- .../billqrcode/core/impl/PartnerBillServiceImpl.java | 2 +- .../static/payment/billqrcode/templates/bill_qrcode.html | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/au/com/royalpay/payment/manage/billqrcode/core/impl/PartnerBillServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/billqrcode/core/impl/PartnerBillServiceImpl.java index 5219dcde8..a4957e74f 100644 --- a/src/main/java/au/com/royalpay/payment/manage/billqrcode/core/impl/PartnerBillServiceImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/billqrcode/core/impl/PartnerBillServiceImpl.java @@ -82,7 +82,7 @@ public class PartnerBillServiceImpl implements PartnerBillService { } private String getQRCodeImg(JSONObject bill){ - return PlatformEnvironment.getEnv().concatUrl("api/v1.0/business/bills/"+bill.getString("bill_code_id")); + return PlatformEnvironment.getEnv().concatUrl("api/v1.0/share_code/business/bills/"+bill.getString("bill_code_id")); } @Override diff --git a/src/main/ui/static/payment/billqrcode/templates/bill_qrcode.html b/src/main/ui/static/payment/billqrcode/templates/bill_qrcode.html index 6a8e58cf5..4f3b521b0 100644 --- a/src/main/ui/static/payment/billqrcode/templates/bill_qrcode.html +++ b/src/main/ui/static/payment/billqrcode/templates/bill_qrcode.html @@ -1,3 +1,8 @@ +

    Bill QR Code

    @@ -95,7 +100,8 @@ - + From c0fffb94e3b84bab5947dd88d7c71a7e3f53d41c Mon Sep 17 00:00:00 2001 From: yuan <1551130722@qq.com> Date: Wed, 9 May 2018 19:56:04 +0800 Subject: [PATCH 10/41] fix html --- src/main/ui/static/dashboard/dashboard.js | 10 ++--- .../payment/billqrcode/bill-qrcode-manage.js | 24 +++++++++++- .../billqrcode/templates/bill_qrcode.html | 37 +++++++++++-------- 3 files changed, 50 insertions(+), 21 deletions(-) diff --git a/src/main/ui/static/dashboard/dashboard.js b/src/main/ui/static/dashboard/dashboard.js index ba0da91b9..2f9d7c595 100644 --- a/src/main/ui/static/dashboard/dashboard.js +++ b/src/main/ui/static/dashboard/dashboard.js @@ -100,7 +100,7 @@ define(['angular', 'uiRouter', 'uiBootstrap', 'angularEcharts'], function (angul loadTradeAmountInTypes(); loadTradePartnersInTypes(); loadTopPartners(); - loadTradeTimeAnalysis(); + /*loadTradeTimeAnalysis();*/ loadTradeLimite(); }; @@ -281,7 +281,7 @@ define(['angular', 'uiRouter', 'uiBootstrap', 'angularEcharts'], function (angul $scope.analysis.top_partners = chartParser.parse(topPartnerConfig, resp.data.reverse()); }) } - function loadTradeTimeAnalysis() { + /*function loadTradeTimeAnalysis() { var timeAnalysis = function (legend, series) { return { // title : { @@ -413,9 +413,9 @@ define(['angular', 'uiRouter', 'uiBootstrap', 'angularEcharts'], function (angul }); $scope.analysis.trade_time = timeAnalysis(leg, series); }) - } + }*/ - /*function loadFeeAnalysis(params) { + function loadFeeAnalysis(params) { var analysisConfig = { chart: { tooltip: { @@ -473,7 +473,7 @@ define(['angular', 'uiRouter', 'uiBootstrap', 'angularEcharts'], function (angul }) } - loadFeeAnalysis($scope.scales[2].params())*/ + loadFeeAnalysis($scope.scales[2].params()) function getMaxRecord() { if ($scope.currentUser.org_id == null) { diff --git a/src/main/ui/static/payment/billqrcode/bill-qrcode-manage.js b/src/main/ui/static/payment/billqrcode/bill-qrcode-manage.js index cfad253ef..a5d0b2248 100644 --- a/src/main/ui/static/payment/billqrcode/bill-qrcode-manage.js +++ b/src/main/ui/static/payment/billqrcode/bill-qrcode-manage.js @@ -13,7 +13,10 @@ define(['angular', 'static/commons/commons', 'uiBootstrap', 'uiRouter', 'ngBootS $scope.pagination = {}; $scope.params = {}; $scope.new_bill = {}; - $scope.today = new Date(); + $scope.minDate = new Date(); + var maxDate = new Date(); + $scope.maxDate = maxDate.setDate(maxDate.getDate() + 14); + $scope.loadBills = function (page) { var params = angular.copy($scope.params); @@ -80,6 +83,25 @@ define(['angular', 'static/commons/commons', 'uiBootstrap', 'uiRouter', 'ngBootS } }); + app.filter('remarkCut', function () { + return function (value, wordwise, max, tail) { + if (!value) return ''; + + max = parseInt(max, 10); + if (!max) return value; + if (value.length <= max) return value; + + value = value.substr(0, max); + if (wordwise) { + var lastspace = value.lastIndexOf(' '); + if (lastspace != -1) { + value = value.substr(0, lastspace); + } + } + return value + (tail || ' …'); + }; + }); + return app; }); \ No newline at end of file diff --git a/src/main/ui/static/payment/billqrcode/templates/bill_qrcode.html b/src/main/ui/static/payment/billqrcode/templates/bill_qrcode.html index 4f3b521b0..aadf73be3 100644 --- a/src/main/ui/static/payment/billqrcode/templates/bill_qrcode.html +++ b/src/main/ui/static/payment/billqrcode/templates/bill_qrcode.html @@ -24,9 +24,14 @@
    - +
    + + $ +
    +

    @@ -35,7 +40,8 @@ + datepicker-options="{minDate:minDate,maxDate:maxDate}" name="cancle_time" required> +

    Expire Date 不得超过十五天

    @@ -49,7 +55,8 @@
    - + +

    Remark 不得超过100字符

    @@ -88,28 +95,28 @@ - + - - - + - + + + - + - - - + - + + + - + From 0ce6b156dd63ee138a3b8e07ba78ec652831ea0a Mon Sep 17 00:00:00 2001 From: yuan <1551130722@qq.com> Date: Mon, 14 May 2018 13:52:50 +0800 Subject: [PATCH 21/41] fix html~~~ --- src/main/ui/index.html | 18 +- src/main/ui/static/boot/index-boot.js | 1 - .../ui/static/payment/good/good-manage.js | 57 +++- src/main/ui/static/payment/good/good-sale.js | 3 +- .../payment/good/templates/good_sale.html | 264 +++++++++--------- .../static/payment/good/templates/goods.html | 249 +++++++++-------- 6 files changed, 325 insertions(+), 267 deletions(-) diff --git a/src/main/ui/index.html b/src/main/ui/index.html index 73ffa320f..74f25f658 100644 --- a/src/main/ui/index.html +++ b/src/main/ui/index.html @@ -888,11 +888,6 @@ margin-bottom: 10%;"/> Cashiers Management -
  • - - Bill QR Code - -
  • @@ -919,16 +914,21 @@ margin-bottom: 10%;"/>
  • - Products & Sale + Extended products diff --git a/src/main/ui/static/boot/index-boot.js b/src/main/ui/static/boot/index-boot.js index 6e225f3e0..55e98e262 100644 --- a/src/main/ui/static/boot/index-boot.js +++ b/src/main/ui/static/boot/index-boot.js @@ -59,7 +59,6 @@ var modules = [ {path: 'static/boot/indexMainApp', module: 'indexMainApp', roles: [1, 2, 3]}, {path: 'static/commons/commons', module: 'commons', roles: [1, 2, 3]}, {path: 'static/payment/good/good-manage', module: 'goodManagement', roles: [1, 2, 3]}, - {path: 'static/payment/good/good-sale', module: 'goodSale', roles: [1, 2, 3]}, {path: 'static/payment/partner/partner', module: 'partnerInfoApp', roles: [1, 2, 3]}, {path: 'static/payment/tradelog/tradelog', module: 'tradeLogApp', roles: [1, 2, 3]}, {path: 'static/payment/tradelog/transflow', module: 'balanceReport', roles: [1, 2, 3]}, diff --git a/src/main/ui/static/payment/good/good-manage.js b/src/main/ui/static/payment/good/good-manage.js index bbfdf88ae..cf2324d83 100644 --- a/src/main/ui/static/payment/good/good-manage.js +++ b/src/main/ui/static/payment/good/good-manage.js @@ -10,6 +10,11 @@ define(['angular', 'static/commons/commons', 'uiBootstrap', 'uiRouter', 'ngBootS templateUrl: '/static/payment/good/templates/goods.html', controller: 'goodListCtrl', data: {label: '商品列表'} + }).state('goods.sale', { + url: '/sale', + templateUrl: '/static/payment/good/templates/good_sale.html', + controller: 'goodOrderListCtrl', + data: {label: '商品列表'} }).state('goods.new', { url: '/new', templateUrl: '/static/payment/good/templates/add_good.html', @@ -196,7 +201,57 @@ define(['angular', 'static/commons/commons', 'uiBootstrap', 'uiRouter', 'ngBootS $scope.ctrl = {}; }]); - + app.controller('goodOrderListCtrl', ['$scope', '$http', function ($scope, $http) { + $scope.pagination = {}; + $scope.params = {status:'1'}; + $scope.today = new Date(); + $scope.chooseToday = function () { + $scope.params.datefrom = $scope.params.dateto = new Date(); + $scope.loadGoodOrders(1); + }; + $scope.chooseYesterday = function () { + var yesterday = new Date(); + yesterday.setDate(yesterday.getDate() - 1); + $scope.params.datefrom = $scope.params.dateto = yesterday; + $scope.loadGoodOrders(1); + }; + $scope.chooseLast7Days = function () { + $scope.params.dateto = new Date(); + var day = new Date(); + day.setDate(day.getDate() - 7); + $scope.params.datefrom = day; + $scope.loadGoodOrders(1); + }; + $scope.thisMonth = function () { + $scope.params.dateto = new Date(); + var monthBegin = new Date(); + monthBegin.setDate(1); + $scope.params.datefrom = monthBegin; + $scope.loadGoodOrders(1); + }; + $scope.lastMonth = function () { + var monthFinish = new Date(); + monthFinish.setDate(0); + $scope.params.dateto = monthFinish; + var monthBegin = new Date(); + monthBegin.setDate(0); + monthBegin.setDate(1); + $scope.params.datefrom = monthBegin; + $scope.loadGoodOrders(1); + }; + $scope.loadGoodOrders = function (page) { + var params = angular.copy($scope.params); + if (params.status=='ALL'){ + delete params.status; + } + params.page = page || $scope.pagination.page || 1; + $http.get('/sys/client/goods/goodOrders', {params: params}).then(function (resp) { + $scope.sales = resp.data.data; + $scope.pagination = resp.data.pagination; + }); + }; + $scope.loadGoodOrders(1); + }]); return app; }); \ No newline at end of file diff --git a/src/main/ui/static/payment/good/good-sale.js b/src/main/ui/static/payment/good/good-sale.js index d21af8f22..af1c50538 100644 --- a/src/main/ui/static/payment/good/good-sale.js +++ b/src/main/ui/static/payment/good/good-sale.js @@ -1,6 +1,7 @@ /** * Created by yishuqian on 8/29/16. */ +/* define(['angular', 'static/commons/commons', 'uiBootstrap', 'uiRouter', 'ngBootSwitch'], function (angular) { 'use strict'; @@ -67,4 +68,4 @@ define(['angular', 'static/commons/commons', 'uiBootstrap', 'uiRouter', 'ngBootS }]); return app; -}); \ No newline at end of file +});*/ diff --git a/src/main/ui/static/payment/good/templates/good_sale.html b/src/main/ui/static/payment/good/templates/good_sale.html index 4151186ae..40183929a 100644 --- a/src/main/ui/static/payment/good/templates/good_sale.html +++ b/src/main/ui/static/payment/good/templates/good_sale.html @@ -1,158 +1,146 @@ -
    -
    -

    List of Products Sold

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

    - All | - Payment Success | - Waiting for Payment -

    +
    +
    +
    +
    +
    +
    +
    + + +
    +
    + +
    +
    +
    +
    -
    -
    - -
    -
    -
    - -
    - ~ -
    - -
    - -
    - Today -
    -
    - Yesterday -
    - - - -
    - + ~ +
    +
    +
    + Today +
    +
    + Yesterday +
    + + +
    - - - - - -
    +
    + + + + + +
    +
    +
    -
    -
    -

    List of Products Sold

    -
    - -
    -
  • PriceOrder Amount Client Order IdCreate timeExpire timeRemarkPayer Order Status Bill StatusPayerExpire DateRemarkCreate time Operation
    From 7f5dd867c3ccee7ac12c2eb3eab2bd1c9712dee1 Mon Sep 17 00:00:00 2001 From: "eason.qian" Date: Wed, 9 May 2018 21:05:00 +0800 Subject: [PATCH 11/41] fix --- .../manage/merchants/core/impls/ClientManagerImpl.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/au/com/royalpay/payment/manage/merchants/core/impls/ClientManagerImpl.java b/src/main/java/au/com/royalpay/payment/manage/merchants/core/impls/ClientManagerImpl.java index 8f5479ca2..f7a08274c 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 @@ -669,6 +669,7 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid boolean checkGreenChannel = client.getIntValue("approve_result") == 2 && (client.getIntValue("source") == 1 || client.getIntValue("source") == 2); AuditModify auditModify = new AuditModify(manager, clientMoniker, pass, manager.getString("manager_id"), new Date()); auditModify.setOpen_status(5); + client.put("open_status", 5); if (client.getIntValue("source") == 5) { auditModify.setSource(1); } @@ -2182,6 +2183,7 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid if (CollectionUtils.isEmpty(existFiles)) { throw new BadRequestException("The Agree File is not Complete!"); } + client.put("open_status", 3); clientModifySupport.processClientModify(new OpenStatusModify(manager, clientMoniker, 3)); saveClientAuditProcess(client.getIntValue("client_id"), 2, 3, "合同制作完成,等待BD处理", manager); // sendAgreeFileMsgToBD(client,null); @@ -2541,8 +2543,8 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid } else { openStatusModify.setApprove_time(new Date()); openStatusModify.setApprove_result(4); - } + client.put("open_status", 4); clientModifySupport.processClientModify(openStatusModify); saveClientAuditProcess(client.getIntValue("client_id"), open_status_from, 4, "BD完成签字提交compliance审核", manager); if (manager != null) { From bce5a86aa4f63a152bce6df6127e328eec5f3ff4 Mon Sep 17 00:00:00 2001 From: yuan <1551130722@qq.com> Date: Thu, 10 May 2018 10:59:09 +0800 Subject: [PATCH 12/41] fix bug~ --- .../task/DirectedBillCodeStatusDailyCheck.java | 2 +- .../payment/billqrcode/templates/bill_qrcode.html | 15 +++++++++------ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/main/java/au/com/royalpay/payment/manage/task/DirectedBillCodeStatusDailyCheck.java b/src/main/java/au/com/royalpay/payment/manage/task/DirectedBillCodeStatusDailyCheck.java index 0ac13ed48..6f9159d02 100644 --- a/src/main/java/au/com/royalpay/payment/manage/task/DirectedBillCodeStatusDailyCheck.java +++ b/src/main/java/au/com/royalpay/payment/manage/task/DirectedBillCodeStatusDailyCheck.java @@ -16,7 +16,7 @@ public class DirectedBillCodeStatusDailyCheck { @Resource private PartnerBillService partnerBillService; - @Scheduled(cron = "0 0 6 * * ?") + @Scheduled(cron = "0 30 5 * * ?") public void statusDailyCheck(){ partnerBillService.dailyCheckDirectedBillCode(); } diff --git a/src/main/ui/static/payment/billqrcode/templates/bill_qrcode.html b/src/main/ui/static/payment/billqrcode/templates/bill_qrcode.html index aadf73be3..c9715a2cc 100644 --- a/src/main/ui/static/payment/billqrcode/templates/bill_qrcode.html +++ b/src/main/ui/static/payment/billqrcode/templates/bill_qrcode.html @@ -35,13 +35,13 @@
    - +
    -

    Expire Date 不得超过十五天

    +

    The date of expiry should not exceed fifteen days

    @@ -49,14 +49,14 @@
    -

    Client Order Id 为空时,系统自动生成

    +

    System will automatically generated when the client order id is empty

    -

    Remark 不得超过100字符

    +

    within 100 characters

    @@ -87,7 +87,10 @@ Success | Disabled + ng-click="params.status=2;loadBills(1)">Disabled | + + +
    @@ -118,7 +121,7 @@
    - From ddee63590fad3f8ffc4f16fc7a734279af0c8df4 Mon Sep 17 00:00:00 2001 From: wangning <164851225@qq.com> Date: Thu, 10 May 2018 14:14:55 +0800 Subject: [PATCH 13/41] alsjd --- .../manage/task/WeekReportGenerationTask.java | 5 ++ .../impls/CustomerImpressionImplTest.java | 73 +++++-------------- 2 files changed, 22 insertions(+), 56 deletions(-) diff --git a/src/main/java/au/com/royalpay/payment/manage/task/WeekReportGenerationTask.java b/src/main/java/au/com/royalpay/payment/manage/task/WeekReportGenerationTask.java index 4964aa5d2..787ab4324 100644 --- a/src/main/java/au/com/royalpay/payment/manage/task/WeekReportGenerationTask.java +++ b/src/main/java/au/com/royalpay/payment/manage/task/WeekReportGenerationTask.java @@ -28,4 +28,9 @@ public class WeekReportGenerationTask { lastweek = DateUtils.addDays(lastweek, -7); weekReporter.generateReport(DateFormatUtils.format(lastweek, "yyyy-MM-dd"), true); } + public static void main(String[] args) { + String asd = "a sd "; + System.out.println(asd); + System.out.println(asd.trim()); + } } diff --git a/src/test/java/au/com/royalpay/payment/manage/apps/core/impls/CustomerImpressionImplTest.java b/src/test/java/au/com/royalpay/payment/manage/apps/core/impls/CustomerImpressionImplTest.java index 0a0758101..3d21743bf 100644 --- a/src/test/java/au/com/royalpay/payment/manage/apps/core/impls/CustomerImpressionImplTest.java +++ b/src/test/java/au/com/royalpay/payment/manage/apps/core/impls/CustomerImpressionImplTest.java @@ -2,6 +2,7 @@ package au.com.royalpay.payment.manage.apps.core.impls; import au.com.royalpay.payment.manage.mappers.payment.OrderMapper; import au.com.royalpay.payment.manage.mappers.system.ClientMapper; +import au.com.royalpay.payment.manage.mappers.system.OrgMapper; import com.alibaba.fastjson.JSONObject; @@ -10,7 +11,6 @@ import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; @@ -23,10 +23,7 @@ import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; -import java.util.HashMap; import java.util.Iterator; -import java.util.List; -import java.util.Map; import javax.annotation.Resource; @@ -44,7 +41,8 @@ public class CustomerImpressionImplTest { private StringRedisTemplate stringRedisTemplate; @Resource private ClientMapper clientMapper; - + @Resource + private OrgMapper orgMapper; // @Test // public void redisQueue() { @@ -56,75 +54,38 @@ public class CustomerImpressionImplTest { // } // } - @Ignore + @Test public void excel() { try { - - List asd =null; - Map map = new HashMap<>(); - asd.forEach(p->{ - map.put(p.getString("sub_merchant_id"),p); - }); - - XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(new File("/Users/wangning/Desktop/qwe.xlsx"))); + XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(new File("/Users/wangning/Desktop/asd.xlsx"))); XSSFSheet sheet = workbook.getSheetAt(0); Iterator rowIterator = sheet.rowIterator(); Row row = null; Cell cell = null; while (rowIterator.hasNext()) { row = rowIterator.next(); - cell = row.getCell(1); - if(cell==null){ + cell = row.getCell(3); + cell.setCellType(HSSFCell.CELL_TYPE_STRING); + + JSONObject client = clientMapper.findClientByMoniker(cell.getStringCellValue().trim()); + if(client==null){ + System.out.println(); continue; } - cell.setCellType(HSSFCell.CELL_TYPE_STRING); - JSONObject tmpOBJ = map.get(cell.getStringCellValue()); - if(tmpOBJ==null){ + JSONObject org = orgMapper.findOne(client.getIntValue("org_id")); + if(org==null){ continue; } - row.createCell(4).setCellValue(tmpOBJ.getString("cc")); - row.createCell(5).setCellValue(tmpOBJ.getString("maxct")); + + row.createCell(5).setCellValue(org.getString("name")); } -// -// -// if (!"Australia".equals(row.getCell(1).getStringCellValue())) { -// continue; -// } -// cell = row.getCell(0); -// cell.setCellType(HSSFCell.CELL_TYPE_STRING); -// -// JSONObject client = clientMapper.clientInfoBySubMerchantId(cell.getStringCellValue()); -// if(client==null){ -// continue; -// } -// row.createCell(4).setCellValue(client.getString("bd_user_name")); -// row.createCell(5).setCellValue(client.getString("client_moniker")); -// row.createCell(6).setCellValue(client.getString("short_name")); -// } -// -// XSSFSheet sheet3 = workbook.getSheetAt(3); -// Iterator rowIterator3 = sheet3.rowIterator(); -// while (rowIterator3.hasNext()) { -// row = rowIterator3.next(); -// if (!"Australia".equals(row.getCell(1).getStringCellValue())) { -// continue; -// } -// cell = row.getCell(0); -// cell.setCellType(HSSFCell.CELL_TYPE_STRING); -// JSONObject client = clientMapper.clientInfoBySubMerchantId(cell.getStringCellValue()); -// if(client==null){ -// continue; -// } -// row.createCell(4).setCellValue(client.getString("bd_user_name")); -// row.createCell(5).setCellValue(client.getString("client_moniker")); -// row.createCell(6).setCellValue(client.getString("short_name")); -// } - OutputStream out = new FileOutputStream("/Users/wangning/Desktop/订单fin.xlsx"); + OutputStream out = new FileOutputStream("/Users/wangning/Desktop/春节活动报名结果通知(包含BD名称).xlsx"); workbook.write(out); workbook.close(); } catch (IOException e) { e.printStackTrace(); } } + } \ No newline at end of file From 14854979f8a7ac20c67428f87c6047faee90543e Mon Sep 17 00:00:00 2001 From: wangning <164851225@qq.com> Date: Thu, 10 May 2018 15:42:05 +0800 Subject: [PATCH 14/41] close Estimate future interface --- .../ui/static/analysis/settle_estimate_analysis.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/ui/static/analysis/settle_estimate_analysis.js b/src/main/ui/static/analysis/settle_estimate_analysis.js index 6d7a5eb9c..196486476 100644 --- a/src/main/ui/static/analysis/settle_estimate_analysis.js +++ b/src/main/ui/static/analysis/settle_estimate_analysis.js @@ -25,12 +25,12 @@ define(['angular', 'static/commons/commons', 'static/commons/angular-ueditor', ' $scope.listLogs(); $scope.future_loading = true; $scope.listEsitimate = function () { - $http.get('/analysis/estimate/future').then(function (resp) { - $scope.future = resp.data; - $scope.future_loading = false; - }, function () { - $scope.future_loading = true; - }); + // $http.get('/analysis/estimate/future').then(function (resp) { + // $scope.future = resp.data; + // $scope.future_loading = false; + // }, function () { + // $scope.future_loading = true; + // }); } $scope.listEsitimate(); From 0bdb01445b995ace118f5616663b96b670c4c72e Mon Sep 17 00:00:00 2001 From: wangning <164851225@qq.com> Date: Thu, 10 May 2018 15:44:21 +0800 Subject: [PATCH 15/41] roll back --- .../manage/task/WeekReportGenerationTask.java | 5 -- .../impls/CustomerImpressionImplTest.java | 66 +++++++++---------- 2 files changed, 33 insertions(+), 38 deletions(-) diff --git a/src/main/java/au/com/royalpay/payment/manage/task/WeekReportGenerationTask.java b/src/main/java/au/com/royalpay/payment/manage/task/WeekReportGenerationTask.java index 787ab4324..4964aa5d2 100644 --- a/src/main/java/au/com/royalpay/payment/manage/task/WeekReportGenerationTask.java +++ b/src/main/java/au/com/royalpay/payment/manage/task/WeekReportGenerationTask.java @@ -28,9 +28,4 @@ public class WeekReportGenerationTask { lastweek = DateUtils.addDays(lastweek, -7); weekReporter.generateReport(DateFormatUtils.format(lastweek, "yyyy-MM-dd"), true); } - public static void main(String[] args) { - String asd = "a sd "; - System.out.println(asd); - System.out.println(asd.trim()); - } } diff --git a/src/test/java/au/com/royalpay/payment/manage/apps/core/impls/CustomerImpressionImplTest.java b/src/test/java/au/com/royalpay/payment/manage/apps/core/impls/CustomerImpressionImplTest.java index 3d21743bf..c574a9387 100644 --- a/src/test/java/au/com/royalpay/payment/manage/apps/core/impls/CustomerImpressionImplTest.java +++ b/src/test/java/au/com/royalpay/payment/manage/apps/core/impls/CustomerImpressionImplTest.java @@ -54,38 +54,38 @@ public class CustomerImpressionImplTest { // } // } - @Test - public void excel() { - try { - XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(new File("/Users/wangning/Desktop/asd.xlsx"))); - XSSFSheet sheet = workbook.getSheetAt(0); - Iterator rowIterator = sheet.rowIterator(); - Row row = null; - Cell cell = null; - while (rowIterator.hasNext()) { - row = rowIterator.next(); - cell = row.getCell(3); - cell.setCellType(HSSFCell.CELL_TYPE_STRING); - - JSONObject client = clientMapper.findClientByMoniker(cell.getStringCellValue().trim()); - if(client==null){ - System.out.println(); - continue; - } - JSONObject org = orgMapper.findOne(client.getIntValue("org_id")); - if(org==null){ - continue; - } - - row.createCell(5).setCellValue(org.getString("name")); - } - - OutputStream out = new FileOutputStream("/Users/wangning/Desktop/春节活动报名结果通知(包含BD名称).xlsx"); - workbook.write(out); - workbook.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } +// @Test +// public void excel() { +// try { +// XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(new File("/Users/wangning/Desktop/asd.xlsx"))); +// XSSFSheet sheet = workbook.getSheetAt(0); +// Iterator rowIterator = sheet.rowIterator(); +// Row row = null; +// Cell cell = null; +// while (rowIterator.hasNext()) { +// row = rowIterator.next(); +// cell = row.getCell(3); +// cell.setCellType(HSSFCell.CELL_TYPE_STRING); +// +// JSONObject client = clientMapper.findClientByMoniker(cell.getStringCellValue().trim()); +// if(client==null){ +// System.out.println(); +// continue; +// } +// JSONObject org = orgMapper.findOne(client.getIntValue("org_id")); +// if(org==null){ +// continue; +// } +// +// row.createCell(5).setCellValue(org.getString("name")); +// } +// +// OutputStream out = new FileOutputStream("/Users/wangning/Desktop/春节活动报名结果通知(包含BD名称).xlsx"); +// workbook.write(out); +// workbook.close(); +// } catch (IOException e) { +// e.printStackTrace(); +// } +// } } \ No newline at end of file From a5f97c0fa0711ed4c6bf98ae15afbca7c33b8e02 Mon Sep 17 00:00:00 2001 From: wangning <164851225@qq.com> Date: Thu, 10 May 2018 15:44:39 +0800 Subject: [PATCH 16/41] roll back --- .../core/impls/CustomerImpressionImplTest.java | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/src/test/java/au/com/royalpay/payment/manage/apps/core/impls/CustomerImpressionImplTest.java b/src/test/java/au/com/royalpay/payment/manage/apps/core/impls/CustomerImpressionImplTest.java index c574a9387..3a8c1c25c 100644 --- a/src/test/java/au/com/royalpay/payment/manage/apps/core/impls/CustomerImpressionImplTest.java +++ b/src/test/java/au/com/royalpay/payment/manage/apps/core/impls/CustomerImpressionImplTest.java @@ -4,27 +4,12 @@ import au.com.royalpay.payment.manage.mappers.payment.OrderMapper; import au.com.royalpay.payment.manage.mappers.system.ClientMapper; import au.com.royalpay.payment.manage.mappers.system.OrgMapper; -import com.alibaba.fastjson.JSONObject; - -import org.apache.poi.hssf.usermodel.HSSFCell; -import org.apache.poi.ss.usermodel.Cell; -import org.apache.poi.ss.usermodel.Row; -import org.apache.poi.xssf.usermodel.XSSFSheet; -import org.apache.poi.xssf.usermodel.XSSFWorkbook; -import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.junit4.SpringRunner; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.util.Iterator; - import javax.annotation.Resource; /** From e63f08ba19dbdf301ea1071de5fbb5b32469b179 Mon Sep 17 00:00:00 2001 From: wangning <164851225@qq.com> Date: Thu, 10 May 2018 16:12:28 +0800 Subject: [PATCH 17/41] fix bug --- .../com/royalpay/payment/manage/mappers/system/ClientMapper.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/au/com/royalpay/payment/manage/mappers/system/ClientMapper.xml b/src/main/resources/au/com/royalpay/payment/manage/mappers/system/ClientMapper.xml index ba3b6391b..2a0b8eccd 100644 --- a/src/main/resources/au/com/royalpay/payment/manage/mappers/system/ClientMapper.xml +++ b/src/main/resources/au/com/royalpay/payment/manage/mappers/system/ClientMapper.xml @@ -286,7 +286,7 @@ From 194b5d60a202775d27b106736148e4b3386cabad Mon Sep 17 00:00:00 2001 From: wangning <164851225@qq.com> Date: Thu, 10 May 2018 17:20:20 +0800 Subject: [PATCH 18/41] fix bug --- .../ui/static/analysis/settle_estimate_analysis.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/ui/static/analysis/settle_estimate_analysis.js b/src/main/ui/static/analysis/settle_estimate_analysis.js index 196486476..6d7a5eb9c 100644 --- a/src/main/ui/static/analysis/settle_estimate_analysis.js +++ b/src/main/ui/static/analysis/settle_estimate_analysis.js @@ -25,12 +25,12 @@ define(['angular', 'static/commons/commons', 'static/commons/angular-ueditor', ' $scope.listLogs(); $scope.future_loading = true; $scope.listEsitimate = function () { - // $http.get('/analysis/estimate/future').then(function (resp) { - // $scope.future = resp.data; - // $scope.future_loading = false; - // }, function () { - // $scope.future_loading = true; - // }); + $http.get('/analysis/estimate/future').then(function (resp) { + $scope.future = resp.data; + $scope.future_loading = false; + }, function () { + $scope.future_loading = true; + }); } $scope.listEsitimate(); From 420e6449104482b296d2de26df767e6fec4d1a97 Mon Sep 17 00:00:00 2001 From: "eason.qian" Date: Fri, 11 May 2018 11:13:49 +0800 Subject: [PATCH 19/41] fix --- .../ui/static/payment/billqrcode/templates/bill_qrcode.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/ui/static/payment/billqrcode/templates/bill_qrcode.html b/src/main/ui/static/payment/billqrcode/templates/bill_qrcode.html index c9715a2cc..9f68fafde 100644 --- a/src/main/ui/static/payment/billqrcode/templates/bill_qrcode.html +++ b/src/main/ui/static/payment/billqrcode/templates/bill_qrcode.html @@ -49,7 +49,7 @@
    -

    System will automatically generated when the client order id is empty

    +

    System will automatically generate when the client order id is empty

    From 77621c6418430e7b150fff76d7206c56bb41e8fe Mon Sep 17 00:00:00 2001 From: yuan <1551130722@qq.com> Date: Fri, 11 May 2018 14:01:47 +0800 Subject: [PATCH 20/41] fix~ --- .../manage/billqrcode/bean/QueryBillBean.java | 12 +++++ .../core/impl/PartnerBillServiceImpl.java | 2 +- .../billqrcode/templates/bill_qrcode.html | 47 +++++++++++++------ 3 files changed, 46 insertions(+), 15 deletions(-) diff --git a/src/main/java/au/com/royalpay/payment/manage/billqrcode/bean/QueryBillBean.java b/src/main/java/au/com/royalpay/payment/manage/billqrcode/bean/QueryBillBean.java index deef3ecf9..89a45c93b 100644 --- a/src/main/java/au/com/royalpay/payment/manage/billqrcode/bean/QueryBillBean.java +++ b/src/main/java/au/com/royalpay/payment/manage/billqrcode/bean/QueryBillBean.java @@ -11,12 +11,16 @@ public class QueryBillBean { private int limit = 10; private int page = 1; private String status; + private String client_order_id; public JSONObject toJson(){ JSONObject jason = new JSONObject(); if(StringUtils.isNotEmpty(status)){ jason.put("status",status); } + if(StringUtils.isNotEmpty(client_order_id)){ + jason.put("client_order_id",client_order_id); + } return jason; } @@ -43,4 +47,12 @@ public class QueryBillBean { public void setStatus(String status) { this.status = status; } + + public String getClient_order_id() { + return client_order_id; + } + + public void setClient_order_id(String client_order_id) { + this.client_order_id = client_order_id; + } } diff --git a/src/main/java/au/com/royalpay/payment/manage/billqrcode/core/impl/PartnerBillServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/billqrcode/core/impl/PartnerBillServiceImpl.java index a4957e74f..5d8f9c715 100644 --- a/src/main/java/au/com/royalpay/payment/manage/billqrcode/core/impl/PartnerBillServiceImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/billqrcode/core/impl/PartnerBillServiceImpl.java @@ -95,7 +95,7 @@ public class PartnerBillServiceImpl implements PartnerBillService { JSONObject params = queryBillBean.toJson(); params.put("client_id",client_id); List bills = directedBillCodeMapper.findByClientId(params,new PageBounds(queryBillBean.getPage(),queryBillBean.getLimit(), Order.formString("create_time.desc"))); - bills.stream().filter(t->t.getString("code_url")!= null).forEach(t->t.put("code_url",QRCodeUtils.qrcodeImageCode(t.getString("code_url"), 250, false))); + bills.stream().filter(t->StringUtils.isNotEmpty(t.getString("code_url"))).forEach(t->t.put("code_url",QRCodeUtils.qrcodeImageCode(t.getString("code_url"), 250, false))); return bills; } diff --git a/src/main/ui/static/payment/billqrcode/templates/bill_qrcode.html b/src/main/ui/static/payment/billqrcode/templates/bill_qrcode.html index c9715a2cc..3a0ff9daa 100644 --- a/src/main/ui/static/payment/billqrcode/templates/bill_qrcode.html +++ b/src/main/ui/static/payment/billqrcode/templates/bill_qrcode.html @@ -46,10 +46,10 @@
    - +
    -

    System will automatically generated when the client order id is empty

    +

    System will automatically generate when the Reference NO is empty

    @@ -79,19 +79,38 @@
    -
    +
    -

    Bill List      - All | - Success | - Disabled | - - - +
    +
    + +   + All | + Success | + Disabled +
    +         +
    + + +
    +
    + +
    +
    +

    +
    +
    +
    +

    + Bill List

    @@ -99,7 +118,7 @@
    Order AmountClient Order IdReference NO Payer Order Status Bill Status
    - - - - - - - - - - - - - - - - - - - - - - - - - +
    +
    +

    List of Products Sold

    +
    -
    - -
    Sale IDPayment Order IDProduct NameUnit PriceQuantityOrder TotalOrder StatusCreate Time
    - PAID - NOT PAID - CLOSED -
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Sale IDPayment Order IDProduct NameUnit PriceQuantityOrder TotalOrder StatusCreate Time
    + PAID + NOT PAID + CLOSED +
    -
    - + -
    + + + - \ No newline at end of file + diff --git a/src/main/ui/static/payment/good/templates/goods.html b/src/main/ui/static/payment/good/templates/goods.html index 1ad5e2a60..8a6b4dd2e 100644 --- a/src/main/ui/static/payment/good/templates/goods.html +++ b/src/main/ui/static/payment/good/templates/goods.html @@ -1,135 +1,150 @@ -
    -
    -

    Product Management

    - -
    -
    +
    +

    Product & Sale

    + +
    +
    -
    -
    -
    -
    - - - - -
    - - -
    -
    - - -
    - - - - - -
    - -
    -
    + -
    - -
    -
    +
    -
    \ No newline at end of file From 1d666071ff67161de147b190e30a07d23ff73251 Mon Sep 17 00:00:00 2001 From: wangning <164851225@qq.com> Date: Mon, 14 May 2018 14:16:00 +0800 Subject: [PATCH 22/41] add bill page --- .../images/utilities/bill_electricity.png | Bin 0 -> 3277 bytes .../ui/static/images/utilities/bill_gas.png | Bin 0 -> 3749 bytes .../static/images/utilities/bill_internet.png | Bin 0 -> 3608 bytes .../ui/static/images/utilities/bill_life.png | Bin 0 -> 4137 bytes .../ui/static/images/utilities/bill_water.png | Bin 0 -> 3158 bytes .../ui/static/images/utilities/r_logo.png | Bin 0 -> 3823 bytes .../templates/alipay/v1/bill_retail_jsapi.js | 79 ++++++++++++ .../templates/payment/bill_gateway_jsapi.css | 120 ++++++++++++++++++ .../templates/payment/v1/bill_retail_jsapi.js | 106 ++++++++++++++++ 9 files changed, 305 insertions(+) create mode 100644 src/main/ui/static/images/utilities/bill_electricity.png create mode 100644 src/main/ui/static/images/utilities/bill_gas.png create mode 100644 src/main/ui/static/images/utilities/bill_internet.png create mode 100644 src/main/ui/static/images/utilities/bill_life.png create mode 100644 src/main/ui/static/images/utilities/bill_water.png create mode 100644 src/main/ui/static/images/utilities/r_logo.png create mode 100644 src/main/ui/static/templates/alipay/v1/bill_retail_jsapi.js create mode 100644 src/main/ui/static/templates/payment/bill_gateway_jsapi.css create mode 100644 src/main/ui/static/templates/payment/v1/bill_retail_jsapi.js diff --git a/src/main/ui/static/images/utilities/bill_electricity.png b/src/main/ui/static/images/utilities/bill_electricity.png new file mode 100644 index 0000000000000000000000000000000000000000..5fa51aea63550fba8a3f1347e96b47fab9f18882 GIT binary patch literal 3277 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 LNkvXXu0mjfUt~!% literal 0 HcmV?d00001 diff --git a/src/main/ui/static/images/utilities/bill_gas.png b/src/main/ui/static/images/utilities/bill_gas.png new file mode 100644 index 0000000000000000000000000000000000000000..b0465d65963d1bda6c97024bb632421d643b9da1 GIT binary patch literal 3749 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 literal 0 HcmV?d00001 diff --git a/src/main/ui/static/images/utilities/bill_water.png b/src/main/ui/static/images/utilities/bill_water.png new file mode 100644 index 0000000000000000000000000000000000000000..4cdd6efe57cad64ba01f3c40bddefed4f86346aa GIT binary patch literal 3158 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 + display: block; + margin: auto; + width: 250px; +} +div,span,img,button,a,p{ + box-sizing: border-box; +} +body{ + background: #fff; +} +.royal-container{ + margin-top: 20%; + display: block; + width: 100%; + padding: 10px 30px; +} + +.royal-container .royal-row{ + border-bottom: 1px solid #d1d2d4; + padding: 5px 0; +} +.royal-container .royal-row.brand{ + text-align: center; +} +.royal-container .royal-row.brand img{ + display: block; + max-width: 60%; + max-height: 100px; + margin: auto; +} +.royal-container .royal-row.brand .name{ + display: block; + margin: auto; + font-size: 1.6em; +} +.text-title{ + color: #888888; + font-size: 0.9em; +} + +.text-main{ + color: #333333; + font-size: 1.1em; +} + +.royal-pay-btn{ + background: #30af69; + color: #fff; + width: 96%; + display: block; + margin: 10px auto 30px; + height: 50px; + line-height: 50px; + font-size: 1.4em; + text-align: center; +} + +.alipay .royal-pay-btn{ + background: #108ee9; +} + +.alipay .amount_title{ + background: #108ee9; +} + +.amount_title{ + height: 14%; + z-index: 10; + background: #30af69; + max-height: 200px; + min-height: 120px; + width: 100%; +} +.amount_title_logo{ + float: left; + max-width: 90px; + min-width: 80px; + margin-left: 10px; +} +.amount_title_content{ + float: left; +} +.amount_title_content_amount{ + font-family: Avenir-Roman; + font-size: 30px; + color: #FFFFFF; +} + +.amount_title_content_text{ + font-family: PingFangSC-Regular; + font-size: 17px; + color: #FFFFFF; +} +.merchant_info{ + height: 15%; + z-index: 1; + position: absolute; + width: 94%; + margin: -5% 0% 0px 3%; + text-align: center; + background-color: #FFFFFF; + box-shadow: 0px 0px 8px 0px rgba(171,171,171,0.50); +} + +.merchant_info img{ + max-height: 70px; + min-height: 50px; +} \ No newline at end of file diff --git a/src/main/ui/static/templates/payment/v1/bill_retail_jsapi.js b/src/main/ui/static/templates/payment/v1/bill_retail_jsapi.js new file mode 100644 index 000000000..f9c529a9e --- /dev/null +++ b/src/main/ui/static/templates/payment/v1/bill_retail_jsapi.js @@ -0,0 +1,106 @@ + +$(document).ready(function () { + 'use strict'; + decode(); + + function decode() { + var redirect = window.redirect; + while (redirect.indexOf('://') < 0) { + redirect = decodeURIComponent(redirect); + if (redirect == window.redirect) { + break; + } + window.redirect = redirect; + } + } + + var dataCache = {paying: false}; + $('#key_P').bind('touchstart', startPay); + + function startPay() { + $('#wdiv').show(); + if (dataCache.paying) { + return; + } + dataCache.paying = true; + + $.ajax({ + url: '/api/payment/v1.0/wechat_jsapi_payment/partners/' + window.client_moniker + '/orders/' + window.order_id + '/preorder', + method: 'get', + dataType: 'json', + success: function (pay) { + try { + if (pay.direct_paid) { + dataCache.paying = false; + location.href = window.redirect; + } + var paydata = pay.jsapi; + invokePay(paydata); + }catch (e) { + alert("Unexpected Error:" + e); + $('#wdiv').hide(); + dataCache.paying = false; + } + }, + error: function (jqXhr) { + var respText = jqXhr.responseText; + try { + alert(JSON.parse(respText).message); + $('#wdiv').hide(); + dataCache.paying = false; + } catch (e) { + alert("Unexpected Error:" + respText); + $('#wdiv').hide(); + dataCache.paying = false; + } + + } + }); + + + } + + function invokePay(paydata) { + WeixinJSBridge.invoke('getBrandWCPayRequest', { + 'appId': paydata.appId, + 'timeStamp': paydata.timeStamp, + 'nonceStr': paydata.nonceStr, + 'package': paydata.package, + 'signType': paydata.signType, + 'paySign': paydata.paySign + }, function (res) { + dataCache.paying = false; + if (res.err_msg == 'get_brand_wcpay_request:ok') { + startCheckOrder(window.order_id) + } else { + if (res.err_msg != 'get_brand_wcpay_request:cancel' && res.err_msg != 'get_brand_wcpay_request:fail') { + alert('WeChat Error:' + res.err_msg); + } + if (window.paydata) { + location.href = window.redirect + (window.redirect.indexOf('?') < 0 ? '?' : '&') + 'success=false'; + } + } + //todo get status from server + $('#wdiv').hide(); + }) + } + + function startCheckOrder(orderId) { + function checkOrderStd() { + $.ajax({ + url: '/api/v1.0/payment/orders/' + orderId + '/status', + method: 'GET', + dataType: 'json', + success: function (res) { + if (res.paid) { + location.href = window.redirect + (window.redirect.indexOf('?') < 0 ? '?' : '&') + 'success=true'; + } else { + setTimeout(checkOrderStd, 500); + } + } + }) + } + + checkOrderStd(); + } +}); \ No newline at end of file From ec0ead8d681949455a3d7050d3bbf9aa72e19415 Mon Sep 17 00:00:00 2001 From: wangning <164851225@qq.com> Date: Mon, 14 May 2018 15:12:44 +0800 Subject: [PATCH 23/41] update --- .../appclient/web/RetailAppController.java | 29 ++++++++++++++++--- .../templates/payment/bill_gateway_jsapi.css | 4 +-- 2 files changed, 27 insertions(+), 6 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 e88beb389..da34cde9a 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 @@ -22,22 +22,31 @@ import au.com.royalpay.payment.tools.exceptions.ForbiddenException; import au.com.royalpay.payment.tools.http.HttpUtils; import au.com.royalpay.payment.tools.merchants.beans.QRCodeConfig; import au.com.royalpay.payment.tools.merchants.beans.UpdateSurchargeDTO; + import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; + import org.apache.commons.lang3.time.DateUtils; import org.springframework.validation.Errors; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.ModelAndView; -import javax.annotation.Resource; -import javax.servlet.http.HttpServletResponse; -import javax.validation.Valid; import java.math.BigDecimal; import java.text.ParseException; import java.util.Date; import java.util.List; import java.util.Map; +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; + import static au.com.royalpay.payment.tools.CommonConsts.RETAIL_DEVICE; /** @@ -461,4 +470,16 @@ public class RetailAppController { public void getInvoiceFile(@ModelAttribute(RETAIL_DEVICE) JSONObject device,AppQueryBean appQueryBean,HttpServletResponse httpResponse) throws Exception { retailAppService.getInvoiceFile(device,appQueryBean,httpResponse); } + + @RequestMapping(value = "/surcharge", method = RequestMethod.GET) + public JSONObject changeQRCodePaySurCharge(@ModelAttribute(RETAIL_DEVICE) JSONObject device) { + JSONObject client = retailAppService.getClientInfo(device); + JSONObject result = new JSONObject(); + result.put("qrcode_surcharge", client.getBooleanValue("qrcode_surcharge")); + result.put("retail_surcharge", client.getBooleanValue("retail_surcharge")); + result.put("api_surcharge", client.getBooleanValue("api_surcharge")); + result.put("require_custinfo", client.getBooleanValue("require_custinfo")); + result.put("require_remark", client.getBooleanValue("require_remark")); + return result; + } } diff --git a/src/main/ui/static/templates/payment/bill_gateway_jsapi.css b/src/main/ui/static/templates/payment/bill_gateway_jsapi.css index c1842eee5..3440c90b9 100644 --- a/src/main/ui/static/templates/payment/bill_gateway_jsapi.css +++ b/src/main/ui/static/templates/payment/bill_gateway_jsapi.css @@ -104,7 +104,7 @@ body{ color: #FFFFFF; } .merchant_info{ - height: 15%; + height: 100px; z-index: 1; position: absolute; width: 94%; @@ -115,6 +115,6 @@ body{ } .merchant_info img{ - max-height: 70px; + max-height: 60px; min-height: 50px; } \ No newline at end of file From dc1f20c8382ece17afad6ecf84b0364dd1c38a11 Mon Sep 17 00:00:00 2001 From: wangning <164851225@qq.com> Date: Mon, 14 May 2018 15:13:03 +0800 Subject: [PATCH 24/41] add mail test --- .../impls/CustomerImpressionImplTest.java | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/src/test/java/au/com/royalpay/payment/manage/apps/core/impls/CustomerImpressionImplTest.java b/src/test/java/au/com/royalpay/payment/manage/apps/core/impls/CustomerImpressionImplTest.java index 3a8c1c25c..a12a957e1 100644 --- a/src/test/java/au/com/royalpay/payment/manage/apps/core/impls/CustomerImpressionImplTest.java +++ b/src/test/java/au/com/royalpay/payment/manage/apps/core/impls/CustomerImpressionImplTest.java @@ -3,15 +3,33 @@ package au.com.royalpay.payment.manage.apps.core.impls; import au.com.royalpay.payment.manage.mappers.payment.OrderMapper; import au.com.royalpay.payment.manage.mappers.system.ClientMapper; import au.com.royalpay.payment.manage.mappers.system.OrgMapper; +import au.com.royalpay.payment.tools.mail.MailGunClient; +import au.com.royalpay.payment.tools.mail.SendMail; +import com.alibaba.fastjson.JSONObject; + +import org.apache.commons.codec.binary.Base64; +import org.apache.commons.lang3.time.DateUtils; +import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.web.bind.annotation.RequestMethod; + +import java.io.IOException; +import java.net.URISyntaxException; +import java.nio.charset.Charset; +import java.util.Date; +import java.util.HashSet; +import java.util.Set; import javax.annotation.Resource; +import cn.yixblog.platform.http.HttpRequestGenerator; +import cn.yixblog.platform.http.HttpRequestResult; + /** * Created by wangning on 05/01/2018. */ @@ -28,6 +46,8 @@ public class CustomerImpressionImplTest { private ClientMapper clientMapper; @Resource private OrgMapper orgMapper; + @Resource + private MailGunClient mailGunClient; // @Test // public void redisQueue() { @@ -73,4 +93,54 @@ public class CustomerImpressionImplTest { // } // } + @Test + public void sendSimpleMessage() throws Exception { + String url = "https://api.mailgun.net/v3/dev.showcodes.com/events"; + HttpRequestGenerator generator = new HttpRequestGenerator(url, RequestMethod.POST).addHeader("Authorization", getHeader()); + + generator.addQueryString("ascending", "yes"); + generator.addQueryString("limit", "12"); + System.out.println(String.valueOf(DateUtils.addDays(new Date(),1))); + HttpRequestResult res = null; + try { + res = generator.execute(); + } catch (URISyntaxException e) { + e.printStackTrace(); + } + System.out.println(res.getException()); + System.out.println(); + System.out.println(); + + try { + System.out.println(res.getResponseContentJSONObj().toJSONString()); + } catch (IOException e) { + e.printStackTrace(); + } + } + + private String getHeader() { + String auth = "api:key-96fa3b5866ace125b8ec5a9d27e19353"; + byte[] encodedAuth = Base64.encodeBase64(auth.getBytes(Charset.forName("UTF-8"))); + String authHeader = "Basic " + new String(encodedAuth); + return authHeader; + } + + @Test + public void sendSimpleMessages() throws Exception { + SendMail sendMail = new SendMail(); + sendMail.setContent("

    Hi kira

    "); + Set mailCCs = new HashSet<>(); + mailCCs.add("164851225@qq.com"); + sendMail.setMailCcs(mailCCs); + Set mailtos = new HashSet<>(); + mailtos.add("1029811920@qq.com"); + sendMail.setMailTos(mailtos); + sendMail.setTitle("Final Test"); + + JSONObject result = mailGunClient.sendMail(sendMail); + System.out.println(result.toJSONString()); + System.out.println(result.toJSONString()); + System.out.println(result.toJSONString()); + } + } \ No newline at end of file From 8512a9d0a9b71aae06347c0928ece0ef2e4ff6a5 Mon Sep 17 00:00:00 2001 From: wangning <164851225@qq.com> Date: Mon, 14 May 2018 17:30:24 +0800 Subject: [PATCH 25/41] add mailgun notify --- .../system/web/MailCallBackController.java | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 src/main/java/au/com/royalpay/payment/manage/system/web/MailCallBackController.java diff --git a/src/main/java/au/com/royalpay/payment/manage/system/web/MailCallBackController.java b/src/main/java/au/com/royalpay/payment/manage/system/web/MailCallBackController.java new file mode 100644 index 000000000..f6a449ba4 --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/system/web/MailCallBackController.java @@ -0,0 +1,40 @@ +package au.com.royalpay.payment.manage.system.web; + +import org.apache.commons.io.IOUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import java.io.IOException; + +import javax.servlet.ServletInputStream; +import javax.servlet.http.HttpServletRequest; + +@RestController +@RequestMapping(value = "/mailgun/") +public class MailCallBackController { + Logger logger = LoggerFactory.getLogger(getClass()); + @RequestMapping(value = "/callback", method = RequestMethod.POST) + public void contractList(@RequestBody String content, HttpServletRequest req) { + logger.info("kira"+content); + logger.info(content); + + int len = req.getContentLength(); + ServletInputStream iii = null; + try { + iii = req.getInputStream(); + byte[] buffer = new byte[len]; + iii.read(buffer, 0, len); + logger.info("kiratest"+new String(buffer,"UTF-8")); + IOUtils.closeQuietly(iii); + + } catch (IOException e) { + e.printStackTrace(); + } + + + } +} From e5ef17bd7edcd3dcfec35fcf714e28b8a520da78 Mon Sep 17 00:00:00 2001 From: wangning <164851225@qq.com> Date: Mon, 14 May 2018 17:31:51 +0800 Subject: [PATCH 26/41] update --- .../payment/manage/system/web/MailCallBackController.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/au/com/royalpay/payment/manage/system/web/MailCallBackController.java b/src/main/java/au/com/royalpay/payment/manage/system/web/MailCallBackController.java index f6a449ba4..de4a4a9e8 100644 --- a/src/main/java/au/com/royalpay/payment/manage/system/web/MailCallBackController.java +++ b/src/main/java/au/com/royalpay/payment/manage/system/web/MailCallBackController.java @@ -14,7 +14,7 @@ import javax.servlet.ServletInputStream; import javax.servlet.http.HttpServletRequest; @RestController -@RequestMapping(value = "/mailgun/") +@RequestMapping(value = "/mailgun") public class MailCallBackController { Logger logger = LoggerFactory.getLogger(getClass()); @RequestMapping(value = "/callback", method = RequestMethod.POST) @@ -34,7 +34,5 @@ public class MailCallBackController { } catch (IOException e) { e.printStackTrace(); } - - } } From 9a1844fa136e31a932c78ad75639ea9f96262dd8 Mon Sep 17 00:00:00 2001 From: wangning <164851225@qq.com> Date: Mon, 14 May 2018 17:52:27 +0800 Subject: [PATCH 27/41] update --- .../system/web/MailCallBackController.java | 24 ++++--------------- 1 file changed, 5 insertions(+), 19 deletions(-) diff --git a/src/main/java/au/com/royalpay/payment/manage/system/web/MailCallBackController.java b/src/main/java/au/com/royalpay/payment/manage/system/web/MailCallBackController.java index de4a4a9e8..2e780a5a8 100644 --- a/src/main/java/au/com/royalpay/payment/manage/system/web/MailCallBackController.java +++ b/src/main/java/au/com/royalpay/payment/manage/system/web/MailCallBackController.java @@ -1,6 +1,5 @@ package au.com.royalpay.payment.manage.system.web; -import org.apache.commons.io.IOUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.RequestBody; @@ -8,9 +7,8 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; -import java.io.IOException; +import java.util.Map; -import javax.servlet.ServletInputStream; import javax.servlet.http.HttpServletRequest; @RestController @@ -18,21 +16,9 @@ import javax.servlet.http.HttpServletRequest; public class MailCallBackController { Logger logger = LoggerFactory.getLogger(getClass()); @RequestMapping(value = "/callback", method = RequestMethod.POST) - public void contractList(@RequestBody String content, HttpServletRequest req) { - logger.info("kira"+content); - logger.info(content); - - int len = req.getContentLength(); - ServletInputStream iii = null; - try { - iii = req.getInputStream(); - byte[] buffer = new byte[len]; - iii.read(buffer, 0, len); - logger.info("kiratest"+new String(buffer,"UTF-8")); - IOUtils.closeQuietly(iii); - - } catch (IOException e) { - e.printStackTrace(); - } + public void contractList(@RequestBody Map content, HttpServletRequest req) { + content.values().forEach(p->{ + logger.info("kira"+p); + }); } } From 99487530a3b409d494bc7fb8ccdf83bd024c3d64 Mon Sep 17 00:00:00 2001 From: "eason.qian" Date: Mon, 14 May 2018 18:35:22 +0800 Subject: [PATCH 28/41] fix --- .../payment/manage/system/web/MailCallBackController.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/main/java/au/com/royalpay/payment/manage/system/web/MailCallBackController.java b/src/main/java/au/com/royalpay/payment/manage/system/web/MailCallBackController.java index 2e780a5a8..7b172ce52 100644 --- a/src/main/java/au/com/royalpay/payment/manage/system/web/MailCallBackController.java +++ b/src/main/java/au/com/royalpay/payment/manage/system/web/MailCallBackController.java @@ -16,9 +16,7 @@ import javax.servlet.http.HttpServletRequest; public class MailCallBackController { Logger logger = LoggerFactory.getLogger(getClass()); @RequestMapping(value = "/callback", method = RequestMethod.POST) - public void contractList(@RequestBody Map content, HttpServletRequest req) { - content.values().forEach(p->{ - logger.info("kira"+p); - }); + public void contractList(@RequestBody String content, HttpServletRequest req) { + logger.info(content); } } From 3d0310cf02801227c3869767d53badc8a7541e92 Mon Sep 17 00:00:00 2001 From: "eason.qian" Date: Tue, 15 May 2018 14:38:07 +0800 Subject: [PATCH 29/41] fix --- pom.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pom.xml b/pom.xml index 6c9ab7a3d..d43ae02c5 100644 --- a/pom.xml +++ b/pom.xml @@ -16,6 +16,11 @@ au.com.royalpay.payment tools + + cn.yixblog + yixblog-platform + 1.2.0 + au.com.royalpay.payment payment-core From 8f88d8084bc000306e023b6cdd1b6fc7373e8ab6 Mon Sep 17 00:00:00 2001 From: yuan <1551130722@qq.com> Date: Tue, 15 May 2018 18:12:05 +0800 Subject: [PATCH 30/41] fix bug --- src/main/ui/static/payment/invoice/invoice.js | 3 ++- src/main/ui/static/payment/invoice/templates/invoice.html | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/ui/static/payment/invoice/invoice.js b/src/main/ui/static/payment/invoice/invoice.js index 3d485eeb2..f02fc73e7 100644 --- a/src/main/ui/static/payment/invoice/invoice.js +++ b/src/main/ui/static/payment/invoice/invoice.js @@ -1,7 +1,7 @@ /** * Created by yixian on 2017-02-05. */ -define(['angular'], function (angular) { +define(['angular','decimal'], function (angular,decimal) { 'use strict'; var app = angular.module('invoiceApp', ['ui.router']); app.config(['$stateProvider', function ($stateProvider) { @@ -67,6 +67,7 @@ define(['angular'], function (angular) { $scope.tradeLogs = resp.data.data; $scope.pagination = resp.data.pagination; $scope.analysis = resp.data.analysis; + $scope.total_surcharge = decimal.add($scope.analysis.total_surcharge,$scope.analysis.tax_amount).toFixed(2); $scope.analysis.refund_fee = angular.copy(Math.abs($scope.analysis.refund_fee)); }, function (resp) { commonDialog.alert({title: 'Search failed', content: resp.data.message, type: 'error'}); diff --git a/src/main/ui/static/payment/invoice/templates/invoice.html b/src/main/ui/static/payment/invoice/templates/invoice.html index 9606c0804..81a760973 100644 --- a/src/main/ui/static/payment/invoice/templates/invoice.html +++ b/src/main/ui/static/payment/invoice/templates/invoice.html @@ -141,7 +141,7 @@
    Total Surcharge + ng-bind="total_surcharge|currency:'AUD '">
    From 139711f66295b0c6e68b03537669678e2be7a3a0 Mon Sep 17 00:00:00 2001 From: yuan <1551130722@qq.com> Date: Tue, 15 May 2018 18:45:54 +0800 Subject: [PATCH 31/41] fix html --- .../ui/static/payment/partner/partner-manage.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/main/ui/static/payment/partner/partner-manage.js b/src/main/ui/static/payment/partner/partner-manage.js index 0f2545c36..672af88c2 100644 --- a/src/main/ui/static/payment/partner/partner-manage.js +++ b/src/main/ui/static/payment/partner/partner-manage.js @@ -344,6 +344,10 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter return; } + if ($scope.partner.company_name.indexOf("Migration") != -1) { + alert("Company Name包含敏感词汇,请检查后重新提交!"); + return; + } if ($scope.partner.company_phone_a && ('' + $scope.partner.company_phone_a != '')) { if ($scope.partner.company_phone_a.indexOf('0') == 0) { alert("Please remove the first character '0' of area code"); @@ -920,6 +924,10 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter return; } + if ($scope.partner.company_name.indexOf("Migration") != -1) { + alert("Company Name包含敏感词汇,请检查后重新提交!"); + return; + } if ($scope.partner.company_phone.indexOf(' ') != -1) { alert('Company Phone can not contain space character'); return; @@ -1788,7 +1796,10 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter return; } $scope.errmsg = null; - + if ($scope.partner.company_name.indexOf("Migration") != -1) { + alert("Company Name包含敏感词汇,请检查后重新提交!"); + return; + } if ($scope.partner.company_phone_a && ('' + $scope.partner.company_phone_a != '')) { if ($scope.partner.company_phone_a.indexOf('0') == 0) { From 68339f4027a8a1c2bcf9ac1aff135e95570411d1 Mon Sep 17 00:00:00 2001 From: yuan <1551130722@qq.com> Date: Wed, 16 May 2018 10:46:43 +0800 Subject: [PATCH 32/41] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0gateway=E9=80=89=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../royalpay/payment/manage/mappers/payment/OrderMapper.xml | 2 ++ src/main/ui/static/boot/indexMainApp.js | 4 +++- src/main/ui/static/boot/managerMainApp.js | 4 +++- .../static/payment/partner/templates/partner_pay_logs.html | 4 +++- .../payment/tradelog/templates/partner_trade_logs.html | 6 ++++-- .../ui/static/payment/tradelog/templates/trade_logs.html | 6 ++++-- 6 files changed, 19 insertions(+), 7 deletions(-) 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 d2ffdcf7b..027f4ac1b 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 @@ -85,6 +85,8 @@ THEN 'Third Party Gateway' WHEN 10 THEN 'APP' + WHEN 12 + THEN 'MICROAPP' END AS gateway, p.client_moniker partner_code, p.short_name partner_name, diff --git a/src/main/ui/static/boot/indexMainApp.js b/src/main/ui/static/boot/indexMainApp.js index 7737488a4..fb359860b 100644 --- a/src/main/ui/static/boot/indexMainApp.js +++ b/src/main/ui/static/boot/indexMainApp.js @@ -540,7 +540,9 @@ define(['angular', 'angularSanitize', 'angularAnimate', 'angularMessages', 'uiRo case '10': return 'APP'; case '11': - return 'Share Code' + return 'Share Code'; + case '12': + return 'MICROAPP' } } }); diff --git a/src/main/ui/static/boot/managerMainApp.js b/src/main/ui/static/boot/managerMainApp.js index 5909fa751..f0850e4e8 100644 --- a/src/main/ui/static/boot/managerMainApp.js +++ b/src/main/ui/static/boot/managerMainApp.js @@ -325,7 +325,9 @@ define(['angular', 'angularSanitize', 'angularAnimate', 'angularMessages', 'uiRo case '10': return 'APP网关'; case '11': - return '账单码' + return '账单码'; + case '12': + return '小程序' } } }); 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 3a8000e4d..2a050bb0d 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 @@ -58,7 +58,9 @@ APP | Share Code + ng-click="params.gateway=[11];loadTradeLogs(1)">Share Code | + MICROAPP

    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 dfc9bcbb4..ddb9e7da0 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 @@ -118,9 +118,11 @@ Third Party Gateway | APP + ng-click="params.gateway=[10];loadTradeLogs(1)">APP | Share Code + ng-click="params.gateway=[11];loadTradeLogs(1)">Share Code | + MICROAPP

    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 36d8b6f17..a265e5f0a 100644 --- a/src/main/ui/static/payment/tradelog/templates/trade_logs.html +++ b/src/main/ui/static/payment/tradelog/templates/trade_logs.html @@ -156,9 +156,11 @@ Third Party Gateway | APP + ng-click="params.gateway=[10];loadTradeLogs(1)">APP | Share Code + ng-click="params.gateway=[11];loadTradeLogs(1)">Share Code | + MICROAPP

    From 9a51b08d41877437b802f1e56fdf29768df59f63 Mon Sep 17 00:00:00 2001 From: wangning <164851225@qq.com> Date: Wed, 16 May 2018 17:32:24 +0800 Subject: [PATCH 33/41] change microapp to MiniProgram --- .../ui/static/payment/partner/templates/partner_pay_logs.html | 2 +- .../static/payment/tradelog/templates/partner_trade_logs.html | 2 +- src/main/ui/static/payment/tradelog/templates/trade_logs.html | 2 +- 3 files changed, 3 insertions(+), 3 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 2a050bb0d..351050ba1 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 @@ -60,7 +60,7 @@ Share Code | MICROAPP + ng-click="params.gateway=[12];loadTradeLogs(1)">MiniProgram

    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 ddb9e7da0..44741988a 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 @@ -122,7 +122,7 @@ Share Code | MICROAPP + ng-click="params.gateway=[12];loadTradeLogs(1)">MiniProgram

    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 a265e5f0a..a73711411 100644 --- a/src/main/ui/static/payment/tradelog/templates/trade_logs.html +++ b/src/main/ui/static/payment/tradelog/templates/trade_logs.html @@ -160,7 +160,7 @@ Share Code | MICROAPP + ng-click="params.gateway=[12];loadTradeLogs(1)">MiniProgram

    From 601e678e09ec6d832e4e717edb3040da6915d2b9 Mon Sep 17 00:00:00 2001 From: wangning <164851225@qq.com> Date: Thu, 17 May 2018 12:09:17 +0800 Subject: [PATCH 34/41] update --- .../payment/manage/appclient/web/RetailAppController.java | 5 ++++- 1 file changed, 4 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 da34cde9a..70ca70922 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 @@ -448,10 +448,13 @@ public class RetailAppController { } @RequestMapping(value = "/qrcode", method = RequestMethod.GET) - public JSONObject getQrcode(@ModelAttribute(RETAIL_DEVICE) JSONObject device,@RequestParam(required = false,defaultValue = "0") int client_id, QRCodeConfig config) { + public JSONObject getQrcode(@ModelAttribute(RETAIL_DEVICE) JSONObject device,@RequestParam(required = false,defaultValue = "0") int client_id, QRCodeConfig config,@RequestParam(required = false,defaultValue = "0") int app_client_ids) { if(client_id==0){ client_id = device.getIntValue("client_id"); } + if(app_client_ids!=0){ + client_id = app_client_ids; + } return retailAppService.getQrcode(device,config,client_id); } From b55f8e3f9d2b4c9a7ec7d37fc88c0badd084da5e Mon Sep 17 00:00:00 2001 From: wangning <164851225@qq.com> Date: Thu, 17 May 2018 12:09:35 +0800 Subject: [PATCH 35/41] update --- .../impls/CustomerImpressionImplTest.java | 44 ++++++++----------- 1 file changed, 19 insertions(+), 25 deletions(-) diff --git a/src/test/java/au/com/royalpay/payment/manage/apps/core/impls/CustomerImpressionImplTest.java b/src/test/java/au/com/royalpay/payment/manage/apps/core/impls/CustomerImpressionImplTest.java index a12a957e1..615a1ee29 100644 --- a/src/test/java/au/com/royalpay/payment/manage/apps/core/impls/CustomerImpressionImplTest.java +++ b/src/test/java/au/com/royalpay/payment/manage/apps/core/impls/CustomerImpressionImplTest.java @@ -3,10 +3,6 @@ package au.com.royalpay.payment.manage.apps.core.impls; import au.com.royalpay.payment.manage.mappers.payment.OrderMapper; import au.com.royalpay.payment.manage.mappers.system.ClientMapper; import au.com.royalpay.payment.manage.mappers.system.OrgMapper; -import au.com.royalpay.payment.tools.mail.MailGunClient; -import au.com.royalpay.payment.tools.mail.SendMail; - -import com.alibaba.fastjson.JSONObject; import org.apache.commons.codec.binary.Base64; import org.apache.commons.lang3.time.DateUtils; @@ -22,8 +18,6 @@ import java.io.IOException; import java.net.URISyntaxException; import java.nio.charset.Charset; import java.util.Date; -import java.util.HashSet; -import java.util.Set; import javax.annotation.Resource; @@ -46,8 +40,8 @@ public class CustomerImpressionImplTest { private ClientMapper clientMapper; @Resource private OrgMapper orgMapper; - @Resource - private MailGunClient mailGunClient; +// @Resource +// private MailGunClient mailGunClient; // @Test // public void redisQueue() { @@ -125,22 +119,22 @@ public class CustomerImpressionImplTest { return authHeader; } - @Test - public void sendSimpleMessages() throws Exception { - SendMail sendMail = new SendMail(); - sendMail.setContent("

    Hi kira

    "); - Set mailCCs = new HashSet<>(); - mailCCs.add("164851225@qq.com"); - sendMail.setMailCcs(mailCCs); - Set mailtos = new HashSet<>(); - mailtos.add("1029811920@qq.com"); - sendMail.setMailTos(mailtos); - sendMail.setTitle("Final Test"); - - JSONObject result = mailGunClient.sendMail(sendMail); - System.out.println(result.toJSONString()); - System.out.println(result.toJSONString()); - System.out.println(result.toJSONString()); - } +// @Test +// public void sendSimpleMessages() throws Exception { +// SendMail sendMail = new SendMail(); +// sendMail.setContent("

    Hi kira

    "); +// Set mailCCs = new HashSet<>(); +// mailCCs.add("164851225@qq.com"); +// sendMail.setMailCcs(mailCCs); +// Set mailtos = new HashSet<>(); +// mailtos.add("1029811920@qq.com"); +// sendMail.setMailTos(mailtos); +// sendMail.setTitle("Final Test"); +// +// JSONObject result = mailGunClient.sendMail(sendMail); +// System.out.println(result.toJSONString()); +// System.out.println(result.toJSONString()); +// System.out.println(result.toJSONString()); +// } } \ No newline at end of file From 3034bf99fd3b382136ea265c98a7177dadf4b270 Mon Sep 17 00:00:00 2001 From: yixian Date: Thu, 17 May 2018 16:57:34 +0800 Subject: [PATCH 36/41] task edit for docker --- .../manage/task/BillOrderCheckTask.java | 41 ++++---- ...ckPartnerAuthStatusAndSendMessageTask.java | 8 +- .../manage/task/CustomerImpressionTask.java | 39 ++++---- .../task/DailyReportGenerationTask.java | 9 +- .../manage/task/DashboardTaskManager.java | 9 +- .../DirectedBillCodeStatusDailyCheck.java | 8 +- .../manage/task/OfeiOrderCheckTask.java | 22 +++-- .../manage/task/PartnerInitEmailChecker.java | 11 ++- ...artnerTransactionsDailyMsgTaskManager.java | 9 +- .../manage/task/PostponeClientTask.java | 96 ++++++++++--------- .../manage/task/RedPackTaskManager.java | 9 +- .../manage/task/SettleEstimateTaskManger.java | 11 ++- .../manage/task/SubMerchantIdTaskManager.java | 8 +- .../manage/task/WeekReportGenerationTask.java | 11 ++- 14 files changed, 177 insertions(+), 114 deletions(-) diff --git a/src/main/java/au/com/royalpay/payment/manage/task/BillOrderCheckTask.java b/src/main/java/au/com/royalpay/payment/manage/task/BillOrderCheckTask.java index b2498e66f..c44acb701 100644 --- a/src/main/java/au/com/royalpay/payment/manage/task/BillOrderCheckTask.java +++ b/src/main/java/au/com/royalpay/payment/manage/task/BillOrderCheckTask.java @@ -2,17 +2,15 @@ package au.com.royalpay.payment.manage.task; import au.com.royalpay.payment.manage.mappers.bill.BillOrderMapper; import au.com.royalpay.payment.manage.mappers.payment.OrderMapper; - +import au.com.royalpay.payment.tools.scheduler.SynchronizedScheduler; import com.alibaba.fastjson.JSONObject; - import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; -import java.util.List; - import javax.annotation.Resource; +import java.util.List; /** * Created by wangning on 2018/1/2. @@ -25,25 +23,30 @@ public class BillOrderCheckTask { @Resource private OrderMapper orderMapper; + @Resource + private SynchronizedScheduler synchronizedScheduler; @Scheduled(cron = "0 0/3 * * * ?") public void checkGreenChannel() { - List orderIds = billOrderMapper.findOrderIdByStatus("0"); - if(CollectionUtils.isEmpty(orderIds)){ - return; - } - for (String p : orderIds) { - if (p==null){ - continue; + synchronizedScheduler.executeProcess("manage_task:checkGreenChannel", 120_000, () -> { + List orderIds = billOrderMapper.findOrderIdByStatus("0"); + if (CollectionUtils.isEmpty(orderIds)) { + return; } - JSONObject order = orderMapper.find(p); - int status = order.getIntValue("status"); - if(status==3||status==1){ - billOrderMapper.updateStatusByOrderId(p,"2"); + for (String p : orderIds) { + if (p == null) { + continue; + } + JSONObject order = orderMapper.find(p); + int status = order.getIntValue("status"); + if (status == 3 || status == 1) { + billOrderMapper.updateStatusByOrderId(p, "2"); + } + if (status == 5) { + billOrderMapper.updateStatusByOrderId(p, "1"); + } } - if(status==5){ - billOrderMapper.updateStatusByOrderId(p,"1"); - } - } + }); + } } diff --git a/src/main/java/au/com/royalpay/payment/manage/task/CheckPartnerAuthStatusAndSendMessageTask.java b/src/main/java/au/com/royalpay/payment/manage/task/CheckPartnerAuthStatusAndSendMessageTask.java index d8b18c490..75da6d0b9 100644 --- a/src/main/java/au/com/royalpay/payment/manage/task/CheckPartnerAuthStatusAndSendMessageTask.java +++ b/src/main/java/au/com/royalpay/payment/manage/task/CheckPartnerAuthStatusAndSendMessageTask.java @@ -2,6 +2,7 @@ package au.com.royalpay.payment.manage.task; import au.com.royalpay.payment.manage.application.core.SimpleClientService; +import au.com.royalpay.payment.tools.scheduler.SynchronizedScheduler; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -16,13 +17,16 @@ import javax.annotation.Resource; public class CheckPartnerAuthStatusAndSendMessageTask { @Resource private SimpleClientService simpleClientService; + @Resource + private SynchronizedScheduler synchronizedScheduler; + // @Scheduled(cron = "0 0 9 * * ?") // public void checkAuthAndSendMessage(){ // simpleClientService.checkAuthAndSendMessage(); // } @Scheduled(cron = "0 0 9 * * ?") - public void checkGreenChannel(){ - simpleClientService.checkGreenChannelClients(); + public void checkGreenChannel() { + synchronizedScheduler.executeProcess("manage_task:CheckPartnerAuthStatus", 120_000, () -> simpleClientService.checkGreenChannelClients()); } } 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 ae7b5ac16..0e0920d32 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 @@ -3,6 +3,7 @@ package au.com.royalpay.payment.manage.task; import au.com.royalpay.payment.manage.apps.core.CustomerImpressionService; import au.com.royalpay.payment.manage.mappers.system.ClientMapper; +import au.com.royalpay.payment.tools.scheduler.SynchronizedScheduler; import com.alibaba.fastjson.JSONObject; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; @@ -27,32 +28,36 @@ public class CustomerImpressionTask { private ClientMapper clientMapper; @Resource private CustomerImpressionService customerImpressionService; + @Resource + private SynchronizedScheduler synchronizedScheduler; private ThreadPoolExecutor generatePool = new ThreadPoolExecutor(10, 30, 5, TimeUnit.SECONDS, new LinkedBlockingQueue()); @Scheduled(cron = "0 30 3 * * ?") public void generateTags() { - List clients = clientMapper.listValidClient(); - List> splitList = new ArrayList<>(); - for (int i = 0; i < clients.size(); i+=200) { - if(i+200>clients.size()){ - splitList.add(clients.subList(i,clients.size())); - }else { - splitList.add(clients.subList(i,i+200)); - } + synchronizedScheduler.executeProcess("manage_task:CustomerImpression", 120_000, () -> { + List clients = clientMapper.listValidClient(); + List> splitList = new ArrayList<>(); + for (int i = 0; i < clients.size(); i += 200) { + if (i + 200 > clients.size()) { + splitList.add(clients.subList(i, clients.size())); + } else { + splitList.add(clients.subList(i, i + 200)); + } - } - for (List splitClients : splitList) { - Runnable task = () -> splitClients.forEach((p)->{ - System.out.println("当前执行到"+p.getIntValue("client_id")); - customerImpressionService.generateTag(p.getIntValue("client_id")); - }); - generatePool.execute(task); - } + } + for (List splitClients : splitList) { + Runnable task = () -> splitClients.forEach((p) -> { + System.out.println("当前执行到" + p.getIntValue("client_id")); + customerImpressionService.generateTag(p.getIntValue("client_id")); + }); + generatePool.execute(task); + } + }); } @Scheduled(cron = "0/1 * * * * ?") public void generateInfo() { - customerImpressionService.generateInfo(); + synchronizedScheduler.executeProcess("manage_task:CustomerImpression", 1_000, () -> customerImpressionService.generateInfo()); } } diff --git a/src/main/java/au/com/royalpay/payment/manage/task/DailyReportGenerationTask.java b/src/main/java/au/com/royalpay/payment/manage/task/DailyReportGenerationTask.java index 08f43b0a5..020182dd2 100644 --- a/src/main/java/au/com/royalpay/payment/manage/task/DailyReportGenerationTask.java +++ b/src/main/java/au/com/royalpay/payment/manage/task/DailyReportGenerationTask.java @@ -2,6 +2,7 @@ package au.com.royalpay.payment.manage.task; import au.com.royalpay.payment.manage.analysis.core.DailyReport; +import au.com.royalpay.payment.tools.scheduler.SynchronizedScheduler; import org.apache.commons.lang3.time.DateFormatUtils; import org.apache.commons.lang3.time.DateUtils; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; @@ -21,10 +22,14 @@ public class DailyReportGenerationTask { @Resource private DailyReport dailyReport; + @Resource + private SynchronizedScheduler synchronizedScheduler; @Scheduled(cron = "0 0 10 * * ?") public void autoGenerateReport() { - Date yesterday = DateUtils.addDays(new Date(), -1); - dailyReport.generateReport(DateFormatUtils.format(yesterday, "yyyy-MM-dd"), true); + synchronizedScheduler.executeProcess("manage_task:autoGenerateDailyReport", 120_000, () -> { + Date yesterday = DateUtils.addDays(new Date(), -1); + dailyReport.generateReport(DateFormatUtils.format(yesterday, "yyyy-MM-dd"), true); + }); } } diff --git a/src/main/java/au/com/royalpay/payment/manage/task/DashboardTaskManager.java b/src/main/java/au/com/royalpay/payment/manage/task/DashboardTaskManager.java index 8b580a49e..9003942f1 100644 --- a/src/main/java/au/com/royalpay/payment/manage/task/DashboardTaskManager.java +++ b/src/main/java/au/com/royalpay/payment/manage/task/DashboardTaskManager.java @@ -2,6 +2,7 @@ package au.com.royalpay.payment.manage.task; import au.com.royalpay.payment.manage.analysis.core.DashboardService; +import au.com.royalpay.payment.tools.scheduler.SynchronizedScheduler; import org.apache.commons.lang3.time.DateUtils; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.scheduling.annotation.Scheduled; @@ -19,8 +20,12 @@ import javax.annotation.Resource; public class DashboardTaskManager { @Resource private DashboardService dashboardService; + @Resource + private SynchronizedScheduler synchronizedScheduler; + @Scheduled(cron = "0 0 2 * * ?") - public void analysisDashboard(){ - dashboardService.generateCustomersAndOrdersStatistics(DateUtils.addDays(new Date(), -1)); + public void analysisDashboard() { + synchronizedScheduler.executeProcess("manage_task:dashboardTask", 120_000, + () -> dashboardService.generateCustomersAndOrdersStatistics(DateUtils.addDays(new Date(), -1))); } } diff --git a/src/main/java/au/com/royalpay/payment/manage/task/DirectedBillCodeStatusDailyCheck.java b/src/main/java/au/com/royalpay/payment/manage/task/DirectedBillCodeStatusDailyCheck.java index 6f9159d02..acf52088f 100644 --- a/src/main/java/au/com/royalpay/payment/manage/task/DirectedBillCodeStatusDailyCheck.java +++ b/src/main/java/au/com/royalpay/payment/manage/task/DirectedBillCodeStatusDailyCheck.java @@ -1,6 +1,7 @@ package au.com.royalpay.payment.manage.task; import au.com.royalpay.payment.manage.billqrcode.core.PartnerBillService; +import au.com.royalpay.payment.tools.scheduler.SynchronizedScheduler; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -15,9 +16,12 @@ import javax.annotation.Resource; public class DirectedBillCodeStatusDailyCheck { @Resource private PartnerBillService partnerBillService; + @Resource + private SynchronizedScheduler synchronizedScheduler; @Scheduled(cron = "0 30 5 * * ?") - public void statusDailyCheck(){ - partnerBillService.dailyCheckDirectedBillCode(); + public void statusDailyCheck() { + synchronizedScheduler.executeProcess("manage_task:dailyCheckDirected", 120_000, + () -> partnerBillService.dailyCheckDirectedBillCode()); } } diff --git a/src/main/java/au/com/royalpay/payment/manage/task/OfeiOrderCheckTask.java b/src/main/java/au/com/royalpay/payment/manage/task/OfeiOrderCheckTask.java index a7afa75a7..661c55dc5 100644 --- a/src/main/java/au/com/royalpay/payment/manage/task/OfeiOrderCheckTask.java +++ b/src/main/java/au/com/royalpay/payment/manage/task/OfeiOrderCheckTask.java @@ -3,6 +3,7 @@ package au.com.royalpay.payment.manage.task; import au.com.royalpay.payment.manage.mappers.ofei.TopUpOrderMapper; import au.com.royalpay.payment.manage.ofei.core.OfeiServer; +import au.com.royalpay.payment.tools.scheduler.SynchronizedScheduler; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -22,14 +23,19 @@ public class OfeiOrderCheckTask { private OfeiServer ofeiServer; @Resource private TopUpOrderMapper topUpOrderMapper; + @Resource + private SynchronizedScheduler synchronizedScheduler; + @Scheduled(cron = "0 0/20 * * * ?") - public void checkGreenChannel(){ - List orderIds = topUpOrderMapper.findOrderIdByStatus("10"); - if(CollectionUtils.isEmpty(orderIds)){ - return; - } - for (String orderId : orderIds) { - ofeiServer.checkOrder(orderId); - } + public void checkGreenChannel() { + synchronizedScheduler.executeProcess("manage_task:ofeiOrderCheck", 120_000, () -> { + List orderIds = topUpOrderMapper.findOrderIdByStatus("10"); + if (CollectionUtils.isEmpty(orderIds)) { + return; + } + for (String orderId : orderIds) { + ofeiServer.checkOrder(orderId); + } + }); } } diff --git a/src/main/java/au/com/royalpay/payment/manage/task/PartnerInitEmailChecker.java b/src/main/java/au/com/royalpay/payment/manage/task/PartnerInitEmailChecker.java index fd0acb9c6..9464522ed 100644 --- a/src/main/java/au/com/royalpay/payment/manage/task/PartnerInitEmailChecker.java +++ b/src/main/java/au/com/royalpay/payment/manage/task/PartnerInitEmailChecker.java @@ -3,6 +3,7 @@ package au.com.royalpay.payment.manage.task; import au.com.royalpay.payment.manage.merchants.core.ClientManager; import au.com.royalpay.payment.tools.env.PlatformEnvironment; +import au.com.royalpay.payment.tools.scheduler.SynchronizedScheduler; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -13,15 +14,19 @@ import javax.annotation.Resource; * Created by yixian on 2017-02-22. */ @Component -@ConditionalOnProperty(value = "app.run-tasks",havingValue = "true") +@ConditionalOnProperty(value = "app.run-tasks", havingValue = "true") public class PartnerInitEmailChecker { @Resource private ClientManager clientManager; + @Resource + private SynchronizedScheduler synchronizedScheduler; + @Scheduled(cron = "0 0/5 * * * *") - public void checkEmailStatus(){ + public void checkEmailStatus() { if (PlatformEnvironment.getEnv().taskEnabled()) { - clientManager.checkEmailStatus(); + synchronizedScheduler.executeProcess("manage_task:emailStatusCheck", 120_000, + () -> clientManager.checkEmailStatus()); } } } diff --git a/src/main/java/au/com/royalpay/payment/manage/task/PartnerTransactionsDailyMsgTaskManager.java b/src/main/java/au/com/royalpay/payment/manage/task/PartnerTransactionsDailyMsgTaskManager.java index e89b10039..0ee93c32b 100644 --- a/src/main/java/au/com/royalpay/payment/manage/task/PartnerTransactionsDailyMsgTaskManager.java +++ b/src/main/java/au/com/royalpay/payment/manage/task/PartnerTransactionsDailyMsgTaskManager.java @@ -2,6 +2,7 @@ package au.com.royalpay.payment.manage.task; import au.com.royalpay.payment.manage.analysis.core.CustomersAnalysisService; +import au.com.royalpay.payment.tools.scheduler.SynchronizedScheduler; import org.apache.commons.lang3.time.DateUtils; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.scheduling.annotation.Scheduled; @@ -19,8 +20,12 @@ import javax.annotation.Resource; public class PartnerTransactionsDailyMsgTaskManager { @Resource private CustomersAnalysisService customersAnalysisService; + @Resource + private SynchronizedScheduler synchronizedScheduler; + @Scheduled(cron = "0 0 8 * * ?") - public void analysisDashboard(){ - customersAnalysisService.sendPartnerTransactionDaily(DateUtils.addDays(new Date(), -1)); + public void analysisDashboard() { + synchronizedScheduler.executeProcess("manage_task:partnerDailyMsg", 120_000, + () -> customersAnalysisService.sendPartnerTransactionDaily(DateUtils.addDays(new Date(), -1))); } } diff --git a/src/main/java/au/com/royalpay/payment/manage/task/PostponeClientTask.java b/src/main/java/au/com/royalpay/payment/manage/task/PostponeClientTask.java index 8648c3ce6..f2342bb43 100644 --- a/src/main/java/au/com/royalpay/payment/manage/task/PostponeClientTask.java +++ b/src/main/java/au/com/royalpay/payment/manage/task/PostponeClientTask.java @@ -8,6 +8,7 @@ import au.com.royalpay.payment.tools.connections.mpsupport.MpWechatApi; import au.com.royalpay.payment.tools.connections.mpsupport.MpWechatApiProvider; import au.com.royalpay.payment.tools.connections.mpsupport.beans.TemplateMessage; +import au.com.royalpay.payment.tools.scheduler.SynchronizedScheduler; import com.alibaba.fastjson.JSONObject; import org.apache.commons.lang3.time.DateFormatUtils; @@ -44,56 +45,61 @@ public class PostponeClientTask { private ClientAccountMapper clientAccountMapper; @Resource private ManagerMapper managerMapper; + @Resource + private SynchronizedScheduler synchronizedScheduler; + - @Scheduled(cron = "0 30 8 * * ?") + @Scheduled(cron = "0 30 8 * * ?") public void checkGreenChannel() { - Date now = new Date(); - Date tomorrow = DateUtils.addDays(now, 1); - Date yearTomorrow = DateUtils.addYears(tomorrow, 1); - String expireDate = DateFormatUtils.format(yearTomorrow, "yyyy-MM-dd"); - List expiryClient = clientRateMapper.getAllExpiry(now); - - if(CollectionUtils.isEmpty(expiryClient)){ - return; - } - Map expiryClients = new HashMap<>(); - expiryClient.forEach(p -> { - expiryClients.put(p.getInteger("client_id"), p); - }); - expiryClients.values().forEach(p -> { - int client_id = p.getIntValue("client_id"); - List adminAccounts = clientAccountMapper.listAdminAccounts(client_id); - List clientRates = clientRateMapper.maxChannelExpiryTime(client_id, null); - JSONObject wechatRate = clientRateMapper.latestChannelCleanDays("Wechat", p.getIntValue("client_id")); - int cleanDays = 1; - if (wechatRate.getInteger("clean_days") != null) { - cleanDays = wechatRate.getIntValue("clean_days"); - } else { - cleanDays = wechatRate.getIntValue("c_clean_days"); + synchronizedScheduler.executeProcess("manage_task:postPoneClient", 120_000, () -> { + Date now = new Date(); + Date tomorrow = DateUtils.addDays(now, 1); + Date yearTomorrow = DateUtils.addYears(tomorrow, 1); + String expireDate = DateFormatUtils.format(yearTomorrow, "yyyy-MM-dd"); + List expiryClient = clientRateMapper.getAllExpiry(now); + + if (CollectionUtils.isEmpty(expiryClient)) { + return; } - int finalCleanDays = cleanDays; - clientRates.forEach(o -> { - JSONObject record = clientRateMapper.latestExpiryConfig(client_id,o.getString("rate_name")); - record.remove("client_rate_id"); - record.put("active_time", now); - record.put("manager_id", 0); - record.put("expiry_time", yearTomorrow); - record.put("create_time", now); - record.put("update_time", now); - record.put("clean_days", finalCleanDays); - record.put("manager_name", "System"); - record.put("remark", "费率到期系统自动延期1年"); - clientRateMapper.saveRate(record); - + Map expiryClients = new HashMap<>(); + expiryClient.forEach(p -> { + expiryClients.put(p.getInteger("client_id"), p); }); - adminAccounts.forEach(o -> { - sendClientPostponeNotify(o, expireDate); + expiryClients.values().forEach(p -> { + int client_id = p.getIntValue("client_id"); + List adminAccounts = clientAccountMapper.listAdminAccounts(client_id); + List clientRates = clientRateMapper.maxChannelExpiryTime(client_id, null); + JSONObject wechatRate = clientRateMapper.latestChannelCleanDays("Wechat", p.getIntValue("client_id")); + int cleanDays = 1; + if (wechatRate.getInteger("clean_days") != null) { + cleanDays = wechatRate.getIntValue("clean_days"); + } else { + cleanDays = wechatRate.getIntValue("c_clean_days"); + } + int finalCleanDays = cleanDays; + clientRates.forEach(o -> { + JSONObject record = clientRateMapper.latestExpiryConfig(client_id, o.getString("rate_name")); + record.remove("client_rate_id"); + record.put("active_time", now); + record.put("manager_id", 0); + record.put("expiry_time", yearTomorrow); + record.put("create_time", now); + record.put("update_time", now); + record.put("clean_days", finalCleanDays); + record.put("manager_name", "System"); + record.put("remark", "费率到期系统自动延期1年"); + clientRateMapper.saveRate(record); + + }); + adminAccounts.forEach(o -> { + sendClientPostponeNotify(o, expireDate); + }); }); + sendComplianceNotify(expiryClients, expireDate); }); - sendComplianceNotify(expiryClients, expireDate); } - private void sendClientPostponeNotify(JSONObject account,String newExpireDate) { + private void sendClientPostponeNotify(JSONObject account, String newExpireDate) { JSONObject client = clientManager.getClientInfo(account.getIntValue("client_id")); try { @@ -101,8 +107,8 @@ public class PostponeClientTask { if (api != null) { String templateId = api.getTemplateId("client-postpone"); if (templateId != null) { - TemplateMessage notice = initClientMessage(client,newExpireDate,account.getString("wechat_openid"),templateId); - api.sendTemplateMessage(notice); + TemplateMessage notice = initClientMessage(client, newExpireDate, account.getString("wechat_openid"), templateId); + api.sendTemplateMessage(notice); } } } catch (Exception e) { @@ -129,7 +135,7 @@ public class PostponeClientTask { private TemplateMessage initClientMessage(JSONObject client, String newExpiryDate, String wechatOpenid, String templateId) { TemplateMessage notice = new TemplateMessage(wechatOpenid, templateId, null); notice.put("first", "您好,您的合同费率已到期,根据合同协议系统已自动为您延期1年。", "#ff0000"); - notice.put("keyword1", client.getString("short_name")+"("+client.getString("client_moniker")+")", "#ff0000"); + notice.put("keyword1", client.getString("short_name") + "(" + client.getString("client_moniker") + ")", "#ff0000"); notice.put("keyword2", newExpiryDate, "#0000ff"); notice.put("remark", "如有疑问请联系RoyalPay", "#000000"); return notice; diff --git a/src/main/java/au/com/royalpay/payment/manage/task/RedPackTaskManager.java b/src/main/java/au/com/royalpay/payment/manage/task/RedPackTaskManager.java index b1b25a4e1..790670dc6 100644 --- a/src/main/java/au/com/royalpay/payment/manage/task/RedPackTaskManager.java +++ b/src/main/java/au/com/royalpay/payment/manage/task/RedPackTaskManager.java @@ -3,6 +3,7 @@ package au.com.royalpay.payment.manage.task; import au.com.royalpay.payment.manage.redpack.core.ActRedPackService; import au.com.royalpay.payment.manage.redpack.core.RedpackService; +import au.com.royalpay.payment.tools.scheduler.SynchronizedScheduler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; @@ -23,20 +24,22 @@ public class RedPackTaskManager { private RedpackService redpackService; @Resource private ActRedPackService actRedPackService; + @Resource + private SynchronizedScheduler synchronizedScheduler; @Scheduled(cron = "0 0/10 * * * ?") public void updateRedPackStatus() { - redpackService.updateRedPacketsStatus("3"); + synchronizedScheduler.executeProcess("manage_task:updateRedpackStatus", 120_000, () -> redpackService.updateRedPacketsStatus("3")); } @Scheduled(cron = "0 0/10 * * * ?") public void updateAlipayRedPackStatus() { - redpackService.updateAlipayRedPacketsStatus("3"); + synchronizedScheduler.executeProcess("manage_task:updateAlipayRedpackStatus", 120_000, () -> redpackService.updateAlipayRedPacketsStatus("3")); } @Scheduled(cron = "0 0/3 * * * *") public void resendFailedRedpack() { - actRedPackService.resendFailed(); + synchronizedScheduler.executeProcess("manage_task:resendFailedRedpack", 120_000, () -> actRedPackService.resendFailed()); } } diff --git a/src/main/java/au/com/royalpay/payment/manage/task/SettleEstimateTaskManger.java b/src/main/java/au/com/royalpay/payment/manage/task/SettleEstimateTaskManger.java index 3cb196f24..2699d3d26 100644 --- a/src/main/java/au/com/royalpay/payment/manage/task/SettleEstimateTaskManger.java +++ b/src/main/java/au/com/royalpay/payment/manage/task/SettleEstimateTaskManger.java @@ -2,6 +2,7 @@ package au.com.royalpay.payment.manage.task; import au.com.royalpay.payment.manage.analysis.core.EstimateAnalysisService; import au.com.royalpay.payment.manage.analysis.core.PlatformClearService; +import au.com.royalpay.payment.tools.scheduler.SynchronizedScheduler; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -19,26 +20,28 @@ public class SettleEstimateTaskManger { @Resource private PlatformClearService platformClearService; + @Resource + private SynchronizedScheduler synchronizedScheduler; // 3:15 am at every work days @Scheduled(cron = "0 20 3 * * ?") public void generateSettleAmount() { - estimateAnalysisService.generateSettleAmount(); + synchronizedScheduler.executeProcess("manage_task:genSettleAmount", 120_000, () -> estimateAnalysisService.generateSettleAmount()); } // 2:15 every day @Scheduled(cron = "0 0 3 * * ?") public void generateTransactionAmount() { - estimateAnalysisService.generateTransactionData(); + synchronizedScheduler.executeProcess("manage_task:genTransAmount", 120_000, () -> estimateAnalysisService.generateTransactionData()); } @Scheduled(cron = "0 0 13 * * ?") public void generateSettleLogs() { - platformClearService.generateSettleLogs(); + synchronizedScheduler.executeProcess("manage_task:genSettleLog", 120_000, () -> platformClearService.generateSettleLogs()); } @Scheduled(cron = "0 0 10 * * ?") public void generateSettleLogs2() { - platformClearService.generateSettleLogs(); + synchronizedScheduler.executeProcess("manage_task:genSettleLog", 120_000, () -> platformClearService.generateSettleLogs()); } } diff --git a/src/main/java/au/com/royalpay/payment/manage/task/SubMerchantIdTaskManager.java b/src/main/java/au/com/royalpay/payment/manage/task/SubMerchantIdTaskManager.java index ef2d50b53..e6dd275cb 100644 --- a/src/main/java/au/com/royalpay/payment/manage/task/SubMerchantIdTaskManager.java +++ b/src/main/java/au/com/royalpay/payment/manage/task/SubMerchantIdTaskManager.java @@ -1,6 +1,7 @@ package au.com.royalpay.payment.manage.task; import au.com.royalpay.payment.manage.merchantid.core.MerchantIdManageService; +import au.com.royalpay.payment.tools.scheduler.SynchronizedScheduler; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -12,8 +13,11 @@ import javax.annotation.Resource; public class SubMerchantIdTaskManager { @Resource private MerchantIdManageService merchantIdManageService; + @Resource + private SynchronizedScheduler synchronizedScheduler; + @Scheduled(cron = "0 0 4 * * ?") - public void analysisDashboard(){ - merchantIdManageService.generateClientsSunMerchantId(); + public void analysisDashboard() { + synchronizedScheduler.executeProcess("manage_task:checkSubMchId", 120_000, () -> merchantIdManageService.generateClientsSunMerchantId()); } } diff --git a/src/main/java/au/com/royalpay/payment/manage/task/WeekReportGenerationTask.java b/src/main/java/au/com/royalpay/payment/manage/task/WeekReportGenerationTask.java index 4964aa5d2..aef28d736 100644 --- a/src/main/java/au/com/royalpay/payment/manage/task/WeekReportGenerationTask.java +++ b/src/main/java/au/com/royalpay/payment/manage/task/WeekReportGenerationTask.java @@ -2,6 +2,7 @@ package au.com.royalpay.payment.manage.task; import au.com.royalpay.payment.manage.analysis.core.WeekReporter; +import au.com.royalpay.payment.tools.scheduler.SynchronizedScheduler; import org.apache.commons.lang3.time.DateFormatUtils; import org.apache.commons.lang3.time.DateUtils; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; @@ -21,11 +22,15 @@ public class WeekReportGenerationTask { @Resource private WeekReporter weekReporter; + @Resource + private SynchronizedScheduler synchronizedScheduler; @Scheduled(cron = "0 0 2 * * 1") public void autoGenerateReport() { - Date lastweek = new Date(); - lastweek = DateUtils.addDays(lastweek, -7); - weekReporter.generateReport(DateFormatUtils.format(lastweek, "yyyy-MM-dd"), true); + synchronizedScheduler.executeProcess("manage_task:genWeekReport", 120_000, () -> { + Date lastweek = new Date(); + lastweek = DateUtils.addDays(lastweek, -7); + weekReporter.generateReport(DateFormatUtils.format(lastweek, "yyyy-MM-dd"), true); + }); } } From d95e848045dd1804d7b0bf1e7721087223b6d956 Mon Sep 17 00:00:00 2001 From: yixian Date: Thu, 17 May 2018 21:43:12 +0800 Subject: [PATCH 37/41] compile error --- .../royalpay/payment/manage/billqrcode/bean/QueryBillBean.java | 1 - .../manage/billqrcode/core/impl/PartnerBillServiceImpl.java | 2 -- 2 files changed, 3 deletions(-) diff --git a/src/main/java/au/com/royalpay/payment/manage/billqrcode/bean/QueryBillBean.java b/src/main/java/au/com/royalpay/payment/manage/billqrcode/bean/QueryBillBean.java index 89a45c93b..bf5e7fb6b 100644 --- a/src/main/java/au/com/royalpay/payment/manage/billqrcode/bean/QueryBillBean.java +++ b/src/main/java/au/com/royalpay/payment/manage/billqrcode/bean/QueryBillBean.java @@ -1,7 +1,6 @@ package au.com.royalpay.payment.manage.billqrcode.bean; import com.alibaba.fastjson.JSONObject; -import com.sun.tools.hat.internal.model.JavaObject; import org.apache.commons.lang3.StringUtils; /** diff --git a/src/main/java/au/com/royalpay/payment/manage/billqrcode/core/impl/PartnerBillServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/billqrcode/core/impl/PartnerBillServiceImpl.java index 5d8f9c715..7029bc925 100644 --- a/src/main/java/au/com/royalpay/payment/manage/billqrcode/core/impl/PartnerBillServiceImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/billqrcode/core/impl/PartnerBillServiceImpl.java @@ -13,7 +13,6 @@ import au.com.royalpay.payment.tools.utils.QRCodeUtils; import com.alibaba.fastjson.JSONObject; import com.github.miemiedev.mybatis.paginator.domain.Order; import com.github.miemiedev.mybatis.paginator.domain.PageBounds; -import javafx.scene.chart.PieChart; import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.DateFormatUtils; @@ -23,7 +22,6 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; -import java.util.Calendar; import java.util.Date; import java.util.List; From 9acc33a5092724baa082eeb338fb8f6a9110f5e9 Mon Sep 17 00:00:00 2001 From: wangning <164851225@qq.com> Date: Fri, 18 May 2018 10:01:51 +0800 Subject: [PATCH 38/41] fixbug daily_transactions --- .../manage/appclient/core/impls/RetailAppServiceImp.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/au/com/royalpay/payment/manage/appclient/core/impls/RetailAppServiceImp.java b/src/main/java/au/com/royalpay/payment/manage/appclient/core/impls/RetailAppServiceImp.java index ee01712c7..046be4ee5 100644 --- a/src/main/java/au/com/royalpay/payment/manage/appclient/core/impls/RetailAppServiceImp.java +++ b/src/main/java/au/com/royalpay/payment/manage/appclient/core/impls/RetailAppServiceImp.java @@ -1133,8 +1133,9 @@ public class RetailAppServiceImp implements RetailAppService { @Override public JSONObject listDailyTransactions(String dateStr, String timezone, boolean thisDevOnly, JSONObject device,String app_client_ids) { try { + JSONObject client = clientManager.getClientInfo(device.getIntValue("client_id")); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); - dateFormat.setTimeZone(TimeZone.getTimeZone(timezone)); + dateFormat.setTimeZone(TimeZone.getTimeZone(client.getString("timezone"))); Date date = dateFormat.parse(dateStr); String clientType = device.getString("client_type"); DeviceRegister register = deviceSupport.findRegister(clientType); From 963c7951de6a0d4206b08fe6e0f732bc5fc42633 Mon Sep 17 00:00:00 2001 From: yuan <1551130722@qq.com> Date: Fri, 18 May 2018 14:02:36 +0800 Subject: [PATCH 39/41] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=BA=A2=E5=8C=85?= =?UTF-8?q?=E8=BF=94=E7=8E=B0=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/db/modify.sql | 2 + .../ActRedPacketsCustomerOrdersMapper.java | 4 + .../redpack/beans/CustomerRedpackActBean.java | 9 + .../manage/redpack/beans/RedpackQuery.java | 9 +- .../redpack/core/ActRedPackService.java | 7 + .../core/impls/ActRedPackServiceImpl.java | 12 + .../web/ActRedpackConfigController.java | 19 +- .../ActRedPacketsCustomerOrdersMapper.xml | 50 +++- .../redpackets/act-redpackets-customer.js | 202 ++++++++++++++- .../templates/act_customer_detail.html | 9 +- .../templates/act_customer_edit.html | 41 ++- .../templates/act_customer_partners.html | 58 +++-- .../templates/act_customer_send_orders.html | 235 +++++++++++++++--- .../redpackets/templates/add_act_client.html | 51 ++++ 14 files changed, 637 insertions(+), 71 deletions(-) create mode 100644 src/main/ui/static/config/redpackets/templates/add_act_client.html diff --git a/src/db/modify.sql b/src/db/modify.sql index 79f642563..33cff6cca 100644 --- a/src/db/modify.sql +++ b/src/db/modify.sql @@ -490,4 +490,6 @@ CREATE TABLE `pmt_directed_bill_code` ( KEY `order_id` (`order_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 +ALTER TABLE `act_red_packets_customer` ADD COLUMN `rule_max_num_limit` tinyint(1) DEFAULT 1 COMMENT '0:Whole Activity,1:day' + diff --git a/src/main/java/au/com/royalpay/payment/manage/mappers/redpack/ActRedPacketsCustomerOrdersMapper.java b/src/main/java/au/com/royalpay/payment/manage/mappers/redpack/ActRedPacketsCustomerOrdersMapper.java index 67c544ec4..631a78ca6 100644 --- a/src/main/java/au/com/royalpay/payment/manage/mappers/redpack/ActRedPacketsCustomerOrdersMapper.java +++ b/src/main/java/au/com/royalpay/payment/manage/mappers/redpack/ActRedPacketsCustomerOrdersMapper.java @@ -44,4 +44,8 @@ public interface ActRedPacketsCustomerOrdersMapper { PageList listOrders(JSONObject jsonObject, PageBounds pageBounds); List listUnsend(@Param("act_id") String actId, @Param("before") Date before); + + List getCustomerRedpackAnalysis(JSONObject params); + + JSONObject analysisCustomerLuckyMoney(JSONObject params); } diff --git a/src/main/java/au/com/royalpay/payment/manage/redpack/beans/CustomerRedpackActBean.java b/src/main/java/au/com/royalpay/payment/manage/redpack/beans/CustomerRedpackActBean.java index bbe9b58de..cf9b1a460 100644 --- a/src/main/java/au/com/royalpay/payment/manage/redpack/beans/CustomerRedpackActBean.java +++ b/src/main/java/au/com/royalpay/payment/manage/redpack/beans/CustomerRedpackActBean.java @@ -13,6 +13,7 @@ public class CustomerRedpackActBean { private String act_name; private BigDecimal rule_order_total; private int rule_max_num; + private int rule_max_num_limit; private int status=0; private List prize_type_list; @@ -59,4 +60,12 @@ public class CustomerRedpackActBean { public void setPrize_type_list(List prize_type_list) { this.prize_type_list = prize_type_list; } + + public int getRule_max_num_limit() { + return rule_max_num_limit; + } + + public void setRule_max_num_limit(int rule_max_num_limit) { + this.rule_max_num_limit = rule_max_num_limit; + } } diff --git a/src/main/java/au/com/royalpay/payment/manage/redpack/beans/RedpackQuery.java b/src/main/java/au/com/royalpay/payment/manage/redpack/beans/RedpackQuery.java index 2a54140c7..bbad4bfb5 100644 --- a/src/main/java/au/com/royalpay/payment/manage/redpack/beans/RedpackQuery.java +++ b/src/main/java/au/com/royalpay/payment/manage/redpack/beans/RedpackQuery.java @@ -2,6 +2,7 @@ package au.com.royalpay.payment.manage.redpack.beans; import au.com.royalpay.payment.core.exceptions.ParamInvalidException; import com.alibaba.fastjson.JSONObject; +import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.DateUtils; import java.text.ParseException; @@ -50,16 +51,16 @@ public class RedpackQuery { throw new ParamInvalidException("event_date", "error.payment.valid.invalid_date_format"); } } - if (short_name != null){ + if (StringUtils.isNotEmpty(short_name)){ param.put("short_name",short_name); } - if (client_moniker != null){ + if (StringUtils.isNotEmpty(client_moniker)){ param.put("client_moniker",client_moniker); } - if (nickname != null){ + if (StringUtils.isNotEmpty(nickname)){ param.put("nickname",nickname); } - if (org_id != null){ + if (StringUtils.isNotEmpty(org_id)){ param.put("org_id",org_id); } if (bd != null){ diff --git a/src/main/java/au/com/royalpay/payment/manage/redpack/core/ActRedPackService.java b/src/main/java/au/com/royalpay/payment/manage/redpack/core/ActRedPackService.java index 7e7c886c7..5a4b44fef 100644 --- a/src/main/java/au/com/royalpay/payment/manage/redpack/core/ActRedPackService.java +++ b/src/main/java/au/com/royalpay/payment/manage/redpack/core/ActRedPackService.java @@ -1,8 +1,11 @@ package au.com.royalpay.payment.manage.redpack.core; import au.com.royalpay.payment.core.exceptions.RedPackException; +import au.com.royalpay.payment.manage.redpack.beans.RedpackQuery; import com.alibaba.fastjson.JSONObject; +import java.util.List; + /** * Created by wangning on 2017/8/10. */ @@ -23,4 +26,8 @@ public interface ActRedPackService { JSONObject listCustomerOrders(JSONObject params, int page, int limit); void resendFailed(); + + List getCustomerRedpackAnalysis(String act_id, RedpackQuery redpackQuery); + + JSONObject analysisCustomerLuckyMoney(JSONObject params); } diff --git a/src/main/java/au/com/royalpay/payment/manage/redpack/core/impls/ActRedPackServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/redpack/core/impls/ActRedPackServiceImpl.java index 963cdcd66..6dc0a9a25 100644 --- a/src/main/java/au/com/royalpay/payment/manage/redpack/core/impls/ActRedPackServiceImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/redpack/core/impls/ActRedPackServiceImpl.java @@ -7,6 +7,7 @@ import au.com.royalpay.payment.manage.mappers.redpack.ActPrizeTypeCustomerMapper import au.com.royalpay.payment.manage.mappers.redpack.ActRedPacketsCustomerMapper; import au.com.royalpay.payment.manage.mappers.redpack.ActRedPacketsCustomerOrdersMapper; import au.com.royalpay.payment.manage.mappers.system.CustomerMapper; +import au.com.royalpay.payment.manage.redpack.beans.RedpackQuery; import au.com.royalpay.payment.manage.redpack.core.ActRedPackService; import au.com.royalpay.payment.tools.CommonConsts; import au.com.royalpay.payment.tools.connections.mpsupport.MpWechatApi; @@ -286,4 +287,15 @@ public class ActRedPackServiceImpl implements ActRedPackService { } } + @Override + public List getCustomerRedpackAnalysis(String act_id, RedpackQuery redpackQuery) { + JSONObject params = redpackQuery.params(); + params.put("act_id", act_id); + return actRedPacketsCustomerOrdersMapper.getCustomerRedpackAnalysis(params); + } + + @Override + public JSONObject analysisCustomerLuckyMoney(JSONObject params) { + return actRedPacketsCustomerOrdersMapper.analysisCustomerLuckyMoney(params); + } } diff --git a/src/main/java/au/com/royalpay/payment/manage/redpack/web/ActRedpackConfigController.java b/src/main/java/au/com/royalpay/payment/manage/redpack/web/ActRedpackConfigController.java index 0023166f3..2c25f1b04 100644 --- a/src/main/java/au/com/royalpay/payment/manage/redpack/web/ActRedpackConfigController.java +++ b/src/main/java/au/com/royalpay/payment/manage/redpack/web/ActRedpackConfigController.java @@ -1,12 +1,14 @@ package au.com.royalpay.payment.manage.redpack.web; import au.com.royalpay.payment.manage.permission.manager.ManagerMapping; +import au.com.royalpay.payment.manage.redpack.beans.RedpackQuery; import au.com.royalpay.payment.tools.permission.enums.ManagerRole; import au.com.royalpay.payment.manage.redpack.core.ActRedPackService; import com.alibaba.fastjson.JSONObject; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import java.util.List; /** * Created by wangning on 2017/8/10. @@ -30,10 +32,21 @@ public class ActRedpackConfigController { } @RequestMapping(value = "/act/{act_id}",method = RequestMethod.GET) - private JSONObject listCustomerOrders(@PathVariable String act_id, @RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "10") int limit){ - JSONObject params = new JSONObject(); + private JSONObject listCustomerOrders(@PathVariable String act_id, RedpackQuery redpackQuery){ + JSONObject params = redpackQuery.params(); params.put("actId",act_id); - return actRedPackService.listCustomerOrders(params,page,limit); + return actRedPackService.listCustomerOrders(params,redpackQuery.getPage(),redpackQuery.getLimit()); } + @ManagerMapping(value = "/{act_id}/sendLogs/analysis",method = RequestMethod.GET) + public List getCustomerRedpackAnalysis(@PathVariable String act_id, RedpackQuery query){ + return actRedPackService.getCustomerRedpackAnalysis(act_id,query); + } + + @ManagerMapping(value = "/act/{act_id}/analysis",method = RequestMethod.GET) + public JSONObject customerLuckyMoneyAnalysis(@PathVariable String act_id, RedpackQuery query){ + JSONObject params= query.params(); + params.put("act_id",act_id); + return actRedPackService.analysisCustomerLuckyMoney(params); + } } diff --git a/src/main/resources/au/com/royalpay/payment/manage/mappers/redpack/ActRedPacketsCustomerOrdersMapper.xml b/src/main/resources/au/com/royalpay/payment/manage/mappers/redpack/ActRedPacketsCustomerOrdersMapper.xml index d569bb1cc..bdf193373 100644 --- a/src/main/resources/au/com/royalpay/payment/manage/mappers/redpack/ActRedPacketsCustomerOrdersMapper.xml +++ b/src/main/resources/au/com/royalpay/payment/manage/mappers/redpack/ActRedPacketsCustomerOrdersMapper.xml @@ -23,9 +23,25 @@ + + and event_time >= #{from} + and event_time <= #{to} + GROUP BY date + + + + + \ No newline at end of file diff --git a/src/main/ui/static/config/redpackets/act-redpackets-customer.js b/src/main/ui/static/config/redpackets/act-redpackets-customer.js index 7560792c8..c9e2a7ebf 100644 --- a/src/main/ui/static/config/redpackets/act-redpackets-customer.js +++ b/src/main/ui/static/config/redpackets/act-redpackets-customer.js @@ -37,11 +37,184 @@ define(['angular', 'static/commons/commons', 'uiBootstrap', 'uiRouter', 'ngBootS }]); - app.controller('actCustomerRedpackOrdersCtrl',['$scope','$http',function ($scope, $http) { + app.controller('actCustomerRedpackOrdersCtrl',['$scope','$http','$filter',function ($scope, $http,$filter) { + $scope.analysis = {}; + $scope.today = new Date(); + $scope.chooseToday = function () { + $scope.analysis.begin = $scope.analysis.end = new Date(); + $scope.doAnalysis(); + }; + $scope.chooseYesterday = function () { + var yesterday = new Date(); + yesterday.setDate(yesterday.getDate() - 1); + $scope.analysis.begin = $scope.analysis.end = yesterday; + $scope.doAnalysis(); + }; + $scope.chooseLast7Days = function () { + $scope.analysis.end = new Date(); + var day = new Date(); + day.setDate(day.getDate() - 7); + $scope.analysis.begin = day; + $scope.doAnalysis(); + }; + $scope.thisMonth = function () { + $scope.analysis.end = new Date(); + var monthBegin = new Date(); + monthBegin.setDate(1); + $scope.analysis.begin = monthBegin; + $scope.doAnalysis(); + }; + $scope.doAnalysis = function () { + var params = angular.copy($scope.analysis); + if (params.begin) { + params.from = $filter('date')(params.begin, 'yyyyMMdd'); + } else { + params.from = $filter('date')(new Date(), 'yyyyMMdd'); + } + if (params.end) { + params.to = $filter('date')(params.end, 'yyyyMMdd'); + } else { + params.to = $filter('date')(new Date(), 'yyyyMMdd'); + } + $http.get('/sys/redpack/customer/'+$scope.act.act_id+'/sendLogs/analysis', {params: params}).then(function (resp) { + $scope.redPackCounts = angular.copy(resp.data); + var dates = []; + var send_counts = []; + var fail_counts = []; + var receive_counts = []; + var refund_counts = []; + var amounts = []; + var real_amounts = []; + resp.data.forEach(function (e) { + dates.push(e.date); + send_counts.push(e.send_counts); + fail_counts.push(e.fail_counts); + receive_counts.push(e.receive_counts); + refund_counts.push(e.refund_counts); + amounts.push(e.amount); + real_amounts.push(e.real_amount); + }); + var customerRedPackSendLogsHistory = function (dates, send_counts, fail_counts, receive_counts, refund_counts, amounts, real_amounts) { + return { + color: colors, + tooltip: { + trigger: 'axis', + axisPointer: { // 坐标轴指示器,坐标轴触发有效 + type: 'shadow' // 默认为直线,可选为:'line' | 'shadow' + } + }, + legend: { + data: ['已领取', '发送未领取', '发送失败', '退回', '发送红包金额', '实际红包金额'] + }, + grid: { + left: '3%', + right: '4%', + bottom: '3%', + containLabel: true + }, + xAxis: [ + { + type: 'category', + data: dates + } + ], + yAxis: [ + { + type: 'value', + name: 'RedPackets' + }, { + type: 'value', + name: 'Amount(¥)' + } + ], + series: [{ + name: '已领取', + type: 'bar', + stack: 'repackets', + data: receive_counts + }, + { + name: '发送未领取', + type: 'bar', + stack: 'repackets', + data: send_counts + }, + { + name: '发送失败', + type: 'bar', + stack: 'repackets', + data: fail_counts + }, + + { + name: '退回', + type: 'bar', + stack: 'repackets', + data: refund_counts + }, + { + name: '发送红包金额', + type: 'line', + yAxisIndex: 1, + data: amounts + }, + { + name: '实际红包金额', + type: 'line', + yAxisIndex: 1, + data: real_amounts + } + ] + }; + }; + $scope.customerRedPackSendLogsHistory = customerRedPackSendLogsHistory(dates, send_counts, fail_counts, receive_counts, refund_counts, amounts, real_amounts); + + }) + }; + $scope.chooseLast7Days(); + + /* 《==========================================OrderList========================================================>*/ + $scope.params = {}; $scope.redpack_order_pagination = {}; + $scope.chooseTodayForLogs = function () { + $scope.params.begin = $scope.params.end = new Date(); + $scope.listOrders(1); + }; + $scope.chooseYesterdayForLogs = function () { + var yesterday = new Date(); + yesterday.setDate(yesterday.getDate() - 1); + $scope.params.begin = $scope.params.end = yesterday; + $scope.listOrders(1); + }; + $scope.chooseLast7DaysForLogs = function () { + $scope.params.end = new Date(); + var day = new Date(); + day.setDate(day.getDate() - 7); + $scope.params.begin = day; + $scope.listOrders(1); + }; + $scope.thisMonthForLogs = function () { + $scope.params.end = new Date(); + var monthBegin = new Date(); + monthBegin.setDate(1); + $scope.params.begin = monthBegin; + $scope.listOrders(1); + }; + $scope.customerLuckyMoneyAnalysis = function (params) { + $http.get('/sys/redpack/customer/act/' + $scope.act.act_id + '/analysis', {params: params}).then(function (resp) { + $scope.luckyMoneyAnalysis = resp.data; + }); + }; + $scope.customerLuckyMoneyAnalysis({}); $scope.listOrders = function (page) { - var params = angular.copy($scope.redpack_order_pagination); - params.page = page || params.page || 1; + var params = angular.copy($scope.params); + if (params.begin) { + params.from = $filter('date')(params.begin, 'yyyyMMdd'); + } + if (params.end) { + params.to = $filter('date')(params.end, 'yyyyMMdd'); + } + params.page = page || $scope.redpack_order_pagination.page || 1; $http.get('/sys/redpack/customer/act/'+$scope.act.act_id, {params: params}).then(function (resp) { $scope.redpack_order_pagination = resp.data.pagination; $scope.orders = resp.data.data; @@ -94,6 +267,17 @@ define(['angular', 'static/commons/commons', 'uiBootstrap', 'uiRouter', 'ngBootS }; $scope.listClients(); + $scope.addAttendClient = function () { + $uibModal.open({ + templateUrl: '/static/config/redpackets/templates/add_act_client.html', + controller: 'addClientInfoCtrl', + resolve: { + act: $scope.act + } + }).result.then(function () { + $scope.listClients(); + }) + }; $scope.editClientInfo = function (client) { var client = angular.copy(client); $uibModal.open({ @@ -129,6 +313,18 @@ define(['angular', 'static/commons/commons', 'uiBootstrap', 'uiRouter', 'ngBootS $scope.$close(); } }]); + app.controller('addClientInfoCtrl',['$scope', '$http','act','commonDialog', function ($scope, $http,act,commonDialog) { + $scope.client = {act_name:act.act_name}; + $scope.doAddClientInfo = function(){ + var params= {'send_name':$scope.client.send_name,'act_name':$scope.client.act_name,'wishing':$scope.client.wishing}; + $http.post('/sys/lucky_money/customer/acts/'+act.act_id+'/partners/'+$scope.client.client_moniker,params).then(function () { + commonDialog.alert({title: 'Success', content: '新增成功!', type: 'success'}); + $scope.$close(); + }, function (resp) { + commonDialog.alert({title: 'Error', content: resp.data.message, type: 'error'}) + }); + } + }]); app.filter('send_status', function () { return function (stateValue) { diff --git a/src/main/ui/static/config/redpackets/templates/act_customer_detail.html b/src/main/ui/static/config/redpackets/templates/act_customer_detail.html index cc58cb6ca..44ec94f1e 100644 --- a/src/main/ui/static/config/redpackets/templates/act_customer_detail.html +++ b/src/main/ui/static/config/redpackets/templates/act_customer_detail.html @@ -49,13 +49,20 @@

    红包限制:订单满足的最小金额

    -
    +

    红包限制:每个客户每天最多所能获取的红包数量

    +
    + +
    +

    +

    红包限制:每个客户活动期间最多所能获取的红包数量

    +
    +
    diff --git a/src/main/ui/static/config/redpackets/templates/act_customer_edit.html b/src/main/ui/static/config/redpackets/templates/act_customer_edit.html index 94663d4a5..b492c3886 100644 --- a/src/main/ui/static/config/redpackets/templates/act_customer_edit.html +++ b/src/main/ui/static/config/redpackets/templates/act_customer_edit.html @@ -53,8 +53,20 @@
    - -
    + +
    + + +
    +
    +
    @@ -79,6 +91,31 @@
    +
    + +
    + +

    红包限制:每个客户活动内最多所能获取的红包数量

    +
    +
    + No more than 100 +
    +
    + No less than 1 +
    +
    + Required Field +
    +
    +
    +
    +
    diff --git a/src/main/ui/static/config/redpackets/templates/act_customer_partners.html b/src/main/ui/static/config/redpackets/templates/act_customer_partners.html index a82ef1586..3518cdb57 100644 --- a/src/main/ui/static/config/redpackets/templates/act_customer_partners.html +++ b/src/main/ui/static/config/redpackets/templates/act_customer_partners.html @@ -1,23 +1,35 @@ -
    - - - - - - - - - - - - - - - - - -
    ClientSend NameAct NameOperation
    {{client.short_name}}({{client.client_moniker}}) - - -
    -
    \ No newline at end of file +
    +
    +
    +
    + +
    +
    +
    + +
    +
    +
    + + + + + + + + + + + + + + + + + +
    ClientSend NameAct NameOperation
    {{client.short_name}}({{client.client_moniker}}) + + +
    +
    +
    diff --git a/src/main/ui/static/config/redpackets/templates/act_customer_send_orders.html b/src/main/ui/static/config/redpackets/templates/act_customer_send_orders.html index ca3e2c59c..42846e4b1 100644 --- a/src/main/ui/static/config/redpackets/templates/act_customer_send_orders.html +++ b/src/main/ui/static/config/redpackets/templates/act_customer_send_orders.html @@ -1,37 +1,206 @@ -
    - - - - - - - - - - - - - - - - - -
    Client MonikerstatusOrder AmountCreate Time
    {{order.client_moniker}}{{order.status|send_status}}{{order.order_amount}}{{order.create_time}}
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + +
    + ~ +
    + +
    - +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    -
    Total Records:{{redpack_order_pagination.totalCount}};Total Pages:{{redpack_order_pagination.totalPages}}
    +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    + +
    + +
    +
    + +
    + +
    + ~ +
    + +
    + +
    + Today +
    +
    + Yesterday +
    + + +
    +
    +
    +
    +
    -
    \ No newline at end of file +
    +
    +
    + Orders(总共红包{{luckyMoneyAnalysis.total_counts}}|{{luckyMoneyAnalysis.total_amount}}¥; + 已发红包{{luckyMoneyAnalysis.send_counts}}|{{luckyMoneyAnalysis.send_amount}}¥;客户所得红包{{luckyMoneyAnalysis.receive_counts}}|{{luckyMoneyAnalysis.receive_amount}}¥ + 待发送红包{{luckyMoneyAnalysis.unsend_counts}}|{{luckyMoneyAnalysis.unsend_amount}}¥)
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + +
    Client MonikerLucky MoneyOrder AmountNick NamestatusEvent TimeCreate Time
    {{order.client_moniker}}{{order.red_packet_amount}}{{order.order_amount}} {{order.nickname}}{{order.status|send_status}}{{order.event_time}}{{order.create_time}}
    + + +
    +
    + +
    diff --git a/src/main/ui/static/config/redpackets/templates/add_act_client.html b/src/main/ui/static/config/redpackets/templates/add_act_client.html new file mode 100644 index 000000000..455539848 --- /dev/null +++ b/src/main/ui/static/config/redpackets/templates/add_act_client.html @@ -0,0 +1,51 @@ + + + \ No newline at end of file From 54ae201cdecb8adc6a3a2d5fbb62b8f02e2467fc Mon Sep 17 00:00:00 2001 From: wangning <164851225@qq.com> Date: Fri, 18 May 2018 14:26:24 +0800 Subject: [PATCH 40/41] modify redpack send rule --- .../core/impls/ActRedPackServiceImpl.java | 42 +++++++++++++------ .../ActRedPacketsCustomerOrdersMapper.xml | 6 ++- 2 files changed, 35 insertions(+), 13 deletions(-) diff --git a/src/main/java/au/com/royalpay/payment/manage/redpack/core/impls/ActRedPackServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/redpack/core/impls/ActRedPackServiceImpl.java index 963cdcd66..a0bf423ee 100644 --- a/src/main/java/au/com/royalpay/payment/manage/redpack/core/impls/ActRedPackServiceImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/redpack/core/impls/ActRedPackServiceImpl.java @@ -15,13 +15,15 @@ import au.com.royalpay.payment.tools.connections.mpsupport.beans.WechatRedpack; import au.com.royalpay.payment.tools.exceptions.ForbiddenException; import au.com.royalpay.payment.tools.exceptions.NotFoundException; import au.com.royalpay.payment.tools.utils.PageListUtils; + import com.alibaba.fastjson.JSONObject; import com.github.miemiedev.mybatis.paginator.domain.PageBounds; import com.github.miemiedev.mybatis.paginator.domain.PageList; + import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.lang3.RandomStringUtils; -import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.RandomUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.DateFormatUtils; import org.apache.commons.lang3.time.DateUtils; import org.slf4j.Logger; @@ -30,7 +32,6 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.util.Assert; -import javax.annotation.Resource; import java.math.BigDecimal; import java.util.Collections; import java.util.Date; @@ -39,6 +40,8 @@ import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; +import javax.annotation.Resource; + /** * Created by wangning on 2017/8/10. */ @@ -129,37 +132,51 @@ public class ActRedPackServiceImpl implements ActRedPackService { int getTotalCounts = getRedPacketsByOpenid(open_id, new Date(), actId); int ruleMaxNum = redpackCustomerActivity.getIntValue("rule_max_num"); if (getTotalCounts >= ruleMaxNum) { - logger.error("open_id:" + open_id + "当日红包发送数量已到达" + ruleMaxNum + "!跳过"); + logger.debug("open_id:" + open_id + "已达到本次活动发送最大次数" + ruleMaxNum + "!跳过"); return; } - takeRedpack(actId,orderId, client_id, clientApply, currencyAmount, open_id, 0); + + int getDailyTotalCounts = getRedPacketsByOpenid(open_id, new Date(), actId); + int ruleMaxNumLimit = redpackCustomerActivity.getIntValue("rule_max_num_limit"); + if (getDailyTotalCounts >= ruleMaxNumLimit) { + logger.debug("open_id:" + open_id + "已达当日发送最大次数" + ruleMaxNumLimit + "!跳过"); + return; + } + + takeRedpack(actId, orderId, client_id, clientApply, currencyAmount, open_id, 0); } - private void takeRedpack(String actId,String orderId, int client_id, JSONObject clientApply, BigDecimal currencyAmount, String open_id, int tryTimes) + private void takeRedpack(String actId, String orderId, int client_id, JSONObject clientApply, BigDecimal currencyAmount, String open_id, int tryTimes) throws RedPackException { if (tryTimes > 5) { return; } + int random = (int) (Math.random() * 100); + if (random > 80) { + logger.info("未达到触发概率当前概率为:" + random); + return; + } + List prizeTypes = actPrizeTypeCustomerMapper.listAvailableTypes(actId); Collections.shuffle(prizeTypes); int totalWeight = 0; for (JSONObject prizeType : prizeTypes) { totalWeight += prizeType.getIntValue("weight"); } - int ran = RandomUtils.nextInt(0,totalWeight); + int ran = RandomUtils.nextInt(0, totalWeight); for (JSONObject prizeType : prizeTypes) { ran -= prizeType.getIntValue("weight"); if (ran < 0) { String lock = Long.toString(System.currentTimeMillis(), 36) + RandomStringUtils.random(5, true, true); - int lockedCount = actRedPacketsCustomerOrdersMapper.lockPrize(actId,lock, prizeType.getString("type_id"), open_id, client_id, orderId, currencyAmount, - new Date()); + int lockedCount = actRedPacketsCustomerOrdersMapper.lockPrize(actId, lock, prizeType.getString("type_id"), open_id, client_id, orderId, + currencyAmount, new Date()); if (lockedCount > 0) { doSendActLuckyMoney(open_id, lock, clientApply.getString("act_name"), clientApply.getString("send_name"), clientApply.getString("wishing")); break; } else { - takeRedpack(actId,orderId, client_id, clientApply, currencyAmount, open_id, tryTimes + 1); + takeRedpack(actId, orderId, client_id, clientApply, currencyAmount, open_id, tryTimes + 1); break; } } @@ -211,8 +228,8 @@ public class ActRedPackServiceImpl implements ActRedPackService { if (redpack_counts > 0) { for (int i = 0; i < redpack_counts; i++) { BigDecimal amount = amountFrom.equals(amountTo) ? amountFrom - : amountFrom.add(BigDecimal.valueOf(RandomUtils.nextInt(0,amountTo.subtract(amountFrom).multiply(CommonConsts.HUNDRED).intValue())) - .divide(CommonConsts.HUNDRED, 2, BigDecimal.ROUND_DOWN)); + : amountFrom.add(BigDecimal.valueOf(RandomUtils.nextInt(0, amountTo.subtract(amountFrom).multiply(CommonConsts.HUNDRED).intValue())) + .divide(CommonConsts.HUNDRED, 2, BigDecimal.ROUND_DOWN)); JSONObject prize = new JSONObject(); String prefix = DateFormatUtils.format(new Date(), "yyyyMMddHHmmssSSS"); String red_packet_order_id = prefix + RandomStringUtils.random(28 - prefix.length(), true, true); @@ -277,7 +294,8 @@ public class ActRedPackServiceImpl implements ActRedPackService { pool.execute(() -> { JSONObject clientApply = actClientApplyMapper.findActivity(actId, redpack.getIntValue("client_id")); try { - doSendActLuckyMoney(redpack.getString("open_id"), redpack.getString("lock"), clientApply.getString("act_name"), clientApply.getString("send_name"), clientApply.getString("wishing")); + doSendActLuckyMoney(redpack.getString("open_id"), redpack.getString("lock"), clientApply.getString("act_name"), + clientApply.getString("send_name"), clientApply.getString("wishing")); } catch (RedPackException e) { e.printStackTrace(); } diff --git a/src/main/resources/au/com/royalpay/payment/manage/mappers/redpack/ActRedPacketsCustomerOrdersMapper.xml b/src/main/resources/au/com/royalpay/payment/manage/mappers/redpack/ActRedPacketsCustomerOrdersMapper.xml index d569bb1cc..49f1afa1c 100644 --- a/src/main/resources/au/com/royalpay/payment/manage/mappers/redpack/ActRedPacketsCustomerOrdersMapper.xml +++ b/src/main/resources/au/com/royalpay/payment/manage/mappers/redpack/ActRedPacketsCustomerOrdersMapper.xml @@ -17,7 +17,11 @@ SELECT o.customer_id,sum(if(t.transaction_type='Credit',t.clearing_amount,0)) amount, - sum(if(t.transaction_type='Credit',t.clearing_amount div 10,0)) points, COUNT(DISTINCT o.order_id) orders,max(t.clearing_amount) max_order FROM pmt_orders o INNER JOIN pmt_transactions t on t.order_id=o.order_id and t.system_generate=0 and (t.transaction_type='Credit' or t.transaction_type>0) @@ -224,12 +223,11 @@ and o.org_id in #{org_id} - GROUP BY o.customer_id ORDER BY points desc + GROUP BY o.customer_id