*
* 如果需要可以用相同订单号再次发起支付单,支付成功或支付中的无法重复发起订单
- * @apiSuccess {String} order_id RoyalPay订单ID,同时也是微信订单ID,最终支付成功的订单ID可能不同
+ * @apiSuccess {String} order_id RoyalPay订单ID,同时也是支付渠道订单ID,最终支付成功的订单ID可能不同
* @apiSuccess {String} partner_order_id 商户订单ID
* @apiSuccess {String} channel_order_id 渠道方(支付宝、微信)交易流水号
* @apiSuccess {int} total_fee 订单金额,单位是货币最小面值单位
@@ -715,7 +715,7 @@
* @apiSuccess {String} partner_code 商户编码
* @apiSuccess {String} full_name 商户注册全名
* @apiSuccess {String} partner_name 商户名称
- * @apiSuccess {String} order_id RoyalPay订单ID,同时也是微信订单ID,最终支付成功的订单ID可能不同
+ * @apiSuccess {String} order_id RoyalPay订单ID,同时也是支付渠道订单ID,最终支付成功的订单ID可能不同
* @apiSuccess {String} partner_order_id 商户订单ID
* @apiSuccess {String} pay_url 跳转URL
*
@@ -744,17 +744,18 @@
* @apiParam (JSON) {String} description 必填,订单标题(最大长度128字符,超出自动截取)
* @apiParam (JSON) {int} price 必填,金额,单位为货币最小单位,例如使用100表示AUD1.00
* @apiParam (JSON) {String=AUD,CNY} currency=AUD 币种代码
+ * @apiParam (JSON) {String=Alipay,Wechat} channel=Wechat 支付通道,微信小程序只能调用微信渠道,支付宝小程序只能调用支付宝渠道
* @apiParam (JSON) {String} notify_url 支付通知url,详见支付通知api,不填则不会推送支付通知
* @apiParam (JSON) {String} operator 操作人员标识
- * @apiParam (JSON) {String} appid 小程序appid
- * @apiParam (JSON) {String} customer_id 小程序openid
+ * @apiParam (JSON) {String} appid 小程序appid(接入微信小程序必填,支付宝不需要)
+ * @apiParam (JSON) {String} customer_id 小程序获取的用户id(微信为openid,支付宝为userid)
*
* @apiSuccess {String} return_code 执行结果
* @apiSuccess {String} result_code SUCCESS表示创建订单成功,EXISTS表示订单已存在
* @apiSuccess {String} partner_code 商户编码
* @apiSuccess {String} full_name 商户注册全名
* @apiSuccess {String} partner_name 商户名称
- * @apiSuccess {String} order_id RoyalPay订单ID,同时也是微信订单ID,最终支付成功的订单ID可能不同
+ * @apiSuccess {String} order_id RoyalPay订单ID,同时也是支付渠道订单ID,最终支付成功的订单ID可能不同
* @apiSuccess {String} partner_order_id 商户订单ID
* @apiSuccess {String} sdk_params 小程序支付所需参数(Json字符串)
*
@@ -790,7 +791,7 @@
* @apiSuccess {String} partner_code 商户编码
* @apiSuccess {String} full_name 商户注册全名
* @apiSuccess {String} partner_name 商户名称
- * @apiSuccess {String} order_id RoyalPay订单ID,同时也是微信订单ID,最终支付成功的订单ID可能不同
+ * @apiSuccess {String} order_id RoyalPay订单ID,同时也是支付渠道订单ID,最终支付成功的订单ID可能不同
* @apiSuccess {String} partner_order_id 商户订单ID
* @apiSuccess {String} pay_url 跳转URL
*
@@ -835,7 +836,7 @@
* @apiSuccess {String} partner_code 商户编码
* @apiSuccess {String} full_name 商户注册全名
* @apiSuccess {String} partner_name 商户名称
- * @apiSuccess {String} order_id RoyalPay订单ID,同时也是微信订单ID,最终支付成功的订单ID可能不同
+ * @apiSuccess {String} order_id RoyalPay订单ID,同时也是支付渠道订单ID,最终支付成功的订单ID可能不同
* @apiSuccess {String} partner_order_id 商户订单ID
* @apiSuccess {String} sdk_params 调用SDK的参数字符串
*
@@ -874,7 +875,7 @@
* @apiSuccess {String} partner_code 商户编码
* @apiSuccess {String} full_name 商户注册全名
* @apiSuccess {String} partner_name 商户名称
- * @apiSuccess {String} order_id RoyalPay订单ID,同时也是微信订单ID,最终支付成功的订单ID可能不同
+ * @apiSuccess {String} order_id RoyalPay订单ID,同时也是支付渠道订单ID,最终支付成功的订单ID可能不同
* @apiSuccess {String} partner_order_id 商户订单ID
* @apiSuccess {String} pay_url 跳转URL
*
diff --git a/src/document/en/apis.js b/src/document/en/apis.js
index 0f370f2df..5597c2ea1 100644
--- a/src/document/en/apis.js
+++ b/src/document/en/apis.js
@@ -84,7 +84,7 @@
* @apiSuccess {String} partner_code Partner code
* @apiSuccess {String} full_name Partner's full company name when registered
* @apiSuccess {String} partner_name Partner's name
- * @apiSuccess {String} order_id Order id in RoyalPay, which is also WeChat order id. The final order id which is paid may be different from this one.
+ * @apiSuccess {String} order_id Order id in RoyalPay, which is also payment channel(Wechat/Alipay) order id. The final order id which is paid may be different from this one.
* @apiSuccess {String} partner_order_id Partner order id
* @apiSuccess {String} code_url QR Code string. Partners can create the payment QR Code according to this value.
* @apiSuccess {String} qrcode_img QR Code image formatted in Base64. Can be used as the src attribute on img element
@@ -124,7 +124,7 @@
* @apiSuccess {String} partner_code Partner code
* @apiSuccess {String} full_name Partner's full company name when registered
* @apiSuccess {String} partner_name Partner's name
- * @apiSuccess {String} order_id Order id in GlobalFreePay, which is also WeChat order id. The final order id which is paid may be different from this one.
+ * @apiSuccess {String} order_id Order id in GlobalFreePay, which is also payment channel(Wechat/Alipay) order id. The final order id which is paid may be different from this one.
* @apiSuccess {String} partner_order_id Partner order id
* @apiSuccess {String} code_url QR Code string. Partners can create the payment QR Code according to this value.
* @apiSuccess {String} qrcode_img QR Code image formatted in Base64. Can be used as the src attribute on img element
@@ -183,7 +183,7 @@
* @apiSuccess {String} channel Payment channel
* @apiSuccess {String} full_name Partner's full company name when registered
* @apiSuccess {String} partner_name Partner's name
- * @apiSuccess {String} order_id Order id in RoyalPay, which is also WeChat order id.
+ * @apiSuccess {String} order_id Order id in RoyalPay, which is also payment channel(Wechat/Alipay) order id.
* @apiSuccess {String} partner_order_id Partner order id
* @apiSuccess {String} pay_url Payment page in RoyalPay.
*
@@ -239,7 +239,7 @@
* @apiSuccess {String} channel Payment Channel
* @apiSuccess {String} full_name Partner's full company name when registered
* @apiSuccess {String} partner_name Partner's name
- * @apiSuccess {String} order_id Order id in RoyalPay, which is also WeChat order id. The final order id which is paid may be different from this one
+ * @apiSuccess {String} order_id Order id in RoyalPay, which is also payment channel(Wechat/Alipay) order id. The final order id which is paid may be different from this one
* @apiSuccess {String} partner_order_id Partner order id
* @apiSuccess {String} pay_url Payment page in RoyalPay. Can only be accessed through WeChat
*
@@ -310,7 +310,7 @@
*
PAY_FAIL:Payment failed
*
PAY_SUCCESS:Payment succeeded
*
- * @apiSuccess {String} order_id Order id in RoyalPay, which is also WeChat order id.
+ * @apiSuccess {String} order_id Order id in RoyalPay, which is also payment channel(Wechat/Alipay) order id.
* @apiSuccess {String} partner_order_id Partner order id
* @apiSuccess {int} total_fee Order amount, which uses the base unit of current currency
* @apiSuccess {int} real_fee Actual paid amount.(The same as total fee at the moment. After coupon feature is finished, this may be different.)
@@ -356,7 +356,7 @@
* @apiSuccess {String} partner_code Partner code
* @apiSuccess {String} full_name Partner's full company name when registered
* @apiSuccess {String} partner_name Partner's name
- * @apiSuccess {String} order_id Order id in RoyalPay, which is also WeChat order id. The final order id which is paid may be different from this one
+ * @apiSuccess {String} order_id Order id in RoyalPay, which is also payment channel(Wechat/Alipay) order id. The final order id which is paid may be different from this one
* @apiSuccess {String} partner_order_id Partner order id
* @apiSuccess {String} code_url QR Code string. Partners can create the payment QR Code according to this value.
*
@@ -390,7 +390,7 @@
*
Full_REFUND: Full refunded
*
* Use the same order id to call create order API can renew the order. PAYING, PAY_SUCCESS orders cannot be renewed.
- * @apiSuccess {String} order_id Order id in RoyalPay, which is also WeChat order id. The final order id which is paid may be different from this one
+ * @apiSuccess {String} order_id Order id in RoyalPay, which is also payment channel(Wechat/Alipay) order id. The final order id which is paid may be different from this one
* @apiSuccess {String} partner_order_id Partner order id
* @apiSuccess {String} channel_order_id PayChannel(Alipay、Wechat) Transaction Trade No
* @apiSuccess {int} total_fee Order amount, which uses the base unit of current currency
@@ -728,7 +728,7 @@
* @apiSuccess {String} partner_code Partner code
* @apiSuccess {String} full_name Partner's full company name when registered
* @apiSuccess {String} partner_name Partner's name
- * @apiSuccess {String} order_id Order id in RoyalPay, which is also WeChat order id. The final order id which is paid may be different from this one
+ * @apiSuccess {String} order_id Order id in RoyalPay, which is also payment channel(Wechat/Alipay) order id. The final order id which is paid may be different from this one
* @apiSuccess {String} partner_order_id Partner order id
* @apiSuccess {String} pay_url Payment page in RoyalPay. Can only be accessed through WeChat
*
@@ -742,8 +742,8 @@
* @api {PUT} /api/v1.0/gateway/partners/{partner_code}/microapp_orders/{order_id} Create Miniprogram Order
* @apiName microapp
* @apiDescription
- Use for wechat Payment in miniprogram. After create order, returned and redirect param.
- * wechat Channel Only. *
+ Use for call Payment in Wechat/Alipay miniprogram. After create order, returned and redirect param.
+ * *
* MiniProgram_WechatPay doc
*
* @apiVersion 1.0.0
@@ -756,17 +756,18 @@
* @apiParam (JSON) {String} description Required, Order description
* @apiParam (JSON) {int} price Required, Price of the order. Use the base unit of the currency.
* @apiParam (JSON) {String=AUD,CNY} currency=AUD Currency
+ * @apiParam (JSON) {String=Wechat,Alipay} channel=Wechat Payment channel. Wechat for Wechat miniprogram and Alipay for Alipay miniprogram
* @apiParam (JSON) {String} notify_url System will call the notify url if provided when the payment succeeds
* @apiParam (JSON) {String} operator Note for the operator who created this order.
- * @apiParam (JSON) {String} appid wechat app app_id
- * @apiParam (JSON) {String} customer_id wechat app open_id
+ * @apiParam (JSON) {String} appid Wechat channel required, miniprogram app_id
+ * @apiParam (JSON) {String} customer_id wechat miniprogram open_id or alipay miniprogram userid
*
* @apiSuccess {String} return_code Execution result
* @apiSuccess {String} result_code SUCCESS means order created successfully, EXISTS means order has already existed.
* @apiSuccess {String} partner_code Partner code
* @apiSuccess {String} full_name Partner's full company name when registered
* @apiSuccess {String} partner_name Partner's name
- * @apiSuccess {String} order_id Order id in RoyalPay, which is also WeChat order id. The final order id which is paid may be different from this one
+ * @apiSuccess {String} order_id Order id in RoyalPay, which is also payment channel(Wechat/Alipay) order id. The final order id which is paid may be different from this one
* @apiSuccess {String} partner_order_id Partner order id
* @apiSuccess {String} pay_url Payment page in RoyalPay. Can only be accessed through WeChat
* @apiSuccess {String} sdk_params The required parameters for payment.(Json String)
@@ -805,7 +806,7 @@
* @apiSuccess {String} partner_code Partner code
* @apiSuccess {String} full_name Partner's full company name when registered
* @apiSuccess {String} partner_name Partner's name
- * @apiSuccess {String} order_id Order id in RoyalPay, which is also WeChat order id. The final order id which is paid may be different from this one
+ * @apiSuccess {String} order_id Order id in RoyalPay, which is also payment channel(Wechat/Alipay) order id. The final order id which is paid may be different from this one
* @apiSuccess {String} partner_order_id Partner order id
* @apiSuccess {String} pay_url Payment page in RoyalPay. Can only be accessed through WeChat
*
@@ -852,7 +853,7 @@
* @apiSuccess {String} partner_code Partner code
* @apiSuccess {String} full_name Partner's full company name when registered
* @apiSuccess {String} partner_name Partner's name
- * @apiSuccess {String} order_id Order id in RoyalPay, which is also WeChat order id. The final order id which is paid may be different from this one
+ * @apiSuccess {String} order_id Order id in RoyalPay, which is also payment channel(Wechat/Alipay) order id. The final order id which is paid may be different from this one
* @apiSuccess {String} partner_order_id Partner order id
* @apiSuccess {String} sdk_params param string for calling SDK
*
From ce207acfba23c4fb06968e741317ce380a5f34ba Mon Sep 17 00:00:00 2001
From: luoyang
Date: Mon, 5 Aug 2019 14:13:45 +0800
Subject: [PATCH 19/53] =?UTF-8?q?add=20App=E5=A4=A7=E9=A2=9D=E6=B8=A0?=
=?UTF-8?q?=E9=81=93=E5=BC=80=E9=80=9A=E5=BC=B9=E7=AA=97?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 2 +-
.../appclient/core/RetailAppService.java | 6 +
.../core/impls/RetailAppServiceImp.java | 185 +++++++++++-
.../appclient/web/RetailAppController.java | 21 ++
.../mappers/notice/NoticeManageMapper.java | 2 +
.../manage/notice/beans/NoticeInfo.java | 90 ++++++
.../manage/notice/core/NoticeManage.java | 2 +
.../notice/core/impls/NoticeManageImpl.java | 57 +++-
.../mappers/notice/NoticeManageMapper.xml | 13 +
.../mappers/notice/NoticePartnerMapper.xml | 3 +
src/main/ui/static/config/notice/notice.js | 13 +-
.../config/notice/templates/notice_add.html | 263 +++++++++++++++++-
.../notice/templates/notice_detail.html | 7 +
13 files changed, 655 insertions(+), 9 deletions(-)
diff --git a/pom.xml b/pom.xml
index 2776361cb..0a3d855d2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -10,7 +10,7 @@
4.0.0manage
- 1.0.35
+ 1.0.36UTF-8
diff --git a/src/main/java/au/com/royalpay/payment/manage/appclient/core/RetailAppService.java b/src/main/java/au/com/royalpay/payment/manage/appclient/core/RetailAppService.java
index f733aa1a8..69cedabf3 100644
--- a/src/main/java/au/com/royalpay/payment/manage/appclient/core/RetailAppService.java
+++ b/src/main/java/au/com/royalpay/payment/manage/appclient/core/RetailAppService.java
@@ -187,4 +187,10 @@ public interface RetailAppService {
* 退款密码
*/
void resetRefundPassword(JSONObject device, JSONObject json);
+
+ JSONObject toggleCBBankChannel(JSONObject device, String noticeId);
+
+ JSONObject toggleCBBankCustomerSurcharge(JSONObject device, boolean customerSurcharge);
+
+ void getCBBankAggregateFile(JSONObject device, HttpServletResponse httpResponse);
}
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 44761a752..af8b694ee 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
@@ -57,10 +57,7 @@ import au.com.royalpay.payment.tools.merchants.beans.UpdateSurchargeDTO;
import au.com.royalpay.payment.tools.merchants.core.MerchantInfoProvider;
import au.com.royalpay.payment.tools.permission.enums.PartnerRole;
import au.com.royalpay.payment.tools.threadpool.RoyalThreadPoolExecutor;
-import au.com.royalpay.payment.tools.utils.PageListUtils;
-import au.com.royalpay.payment.tools.utils.PasswordUtils;
-import au.com.royalpay.payment.tools.utils.QRCodeUtils;
-import au.com.royalpay.payment.tools.utils.TimeZoneUtils;
+import au.com.royalpay.payment.tools.utils.*;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
@@ -79,6 +76,7 @@ import org.apache.commons.lang3.time.DateUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
@@ -87,6 +85,8 @@ import org.springframework.util.Assert;
import org.thymeleaf.context.Context;
import org.thymeleaf.spring4.SpringTemplateEngine;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
@@ -107,6 +107,7 @@ import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import javax.annotation.Resource;
+import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
/**
@@ -201,6 +202,8 @@ public class RetailAppServiceImp implements RetailAppService {
private SpringTemplateEngine thymeleaf;
@Resource
private StringRedisTemplate stringRedisTemplate;
+ private final String CBBANK_AGGREGATE_FILE = "https://file.royalpay.com.au/open/2019/08/05/1564972204689_uwZvpTBjtLUMcN8c540xcZvux1Rd3O.pdf";
+
@Resource
private SmsSender smsSender;
private final String BIND_ACCOUNT_EMAIL_PREFIX = "BIND_ACCOUNT_EMAIL";
@@ -1285,12 +1288,18 @@ public class RetailAppServiceImp implements RetailAppService {
String father = "";
String html = doc.body().children().wrap(father).html();
// logger.debug("wrapped html---->"+html);
- res.put("content", doc.html());
+ if (res.getIntValue("type")==2) {
+ List buttons = JSONObject.parseArray(res.getString("buttons"),JSONObject.class);
+ res.put("buttons", buttons);
+ }else {
+ res.put("content", doc.html());
+ }
return res;
}
@Override
public List getLatestNotice(int client_id) {
+ JSONObject clientConfig = clientConfigService.find(client_id);
JSONObject notice = new JSONObject();
JSONObject latestNotice = noticeManage.getLatestWindowNotice(client_id);
if (latestNotice != null) {
@@ -1302,12 +1311,70 @@ public class RetailAppServiceImp implements RetailAppService {
unReadParams.put("client_id", client_id);
unReadParams.put("status", 0);
unReadParams.put("is_to_app", 1);
+ unReadParams.put("type", 1);
int counts = noticePartnerMapper.countNoticePartner(unReadParams);
notice.put("unReadCounts", counts);
notice.put("type", "notice");
List result = new ArrayList<>();
result.add(notice);
+ JSONObject confirmNotice = new JSONObject();
+ JSONObject latestConfirmNotice = noticeManage.getLatestWindowConfirmNotice(client_id);
+ if (latestConfirmNotice != null) {
+ latestConfirmNotice.put("id", latestConfirmNotice.getString("notice_id"));
+ latestConfirmNotice.remove("notice_id");
+ List buttons = JSONObject.parseArray(latestConfirmNotice.getString("buttons"),JSONObject.class);
+ latestConfirmNotice.put("buttons", buttons);
+ String content = latestConfirmNotice.getString("content");
+ if (content.indexOf("%excharge_rate%")>0) {
+ JSONObject rate = merchantInfoProvider.clientCurrentRate(client_id, new Date(), "CB_BankPay");
+ if (rate != null) {
+ content = content.replace("%excharge_rate%", (rate.getBigDecimal("rate_value").setScale(2, BigDecimal.ROUND_DOWN).toPlainString() + "%"));
+ }else {
+ content = content.replace("%excharge_rate%", "(暂未配置)");
+ }
+ }
+ if (StringUtils.isNotBlank(latestConfirmNotice.getString("aggregate_file"))) {
+ JSONObject rate = merchantInfoProvider.clientCurrentRate(client_id, new Date(), "CB_BankPay");
+ JSONArray rateInfo = new JSONArray();
+ if (rate != null) {
+ String cleanDays = "T+" + rate.getIntValue("clean_days");
+ String rateValue = rate.getBigDecimal("rate_value").setScale(2, RoundingMode.DOWN).toPlainString() + "%";
+ String EndDate = DateFormatUtils.format(rate.getDate("expiry_date"), "yyyy-MM-dd");
+ String[] rateName = {"清算时间", "签约费率", "结束时间"};
+ String[] rateKey = {cleanDays, rateValue, EndDate};
+ for(int i =0;i buttons = new ArrayList<>();
+ if (button0 != null) {
+ JSONObject buttonJson = JSON.parseObject(button0);
+ if (StringUtils.isNotBlank(buttonJson.getString("name")) && StringUtils.isNotBlank(buttonJson.getString("type"))) {
+ buttons.add(buttonJson);
+ }
+ }
+ if (button1 != null) {
+ JSONObject buttonJson = JSON.parseObject(button1);
+ if (StringUtils.isNotBlank(buttonJson.getString("name")) && StringUtils.isNotBlank(buttonJson.getString("type"))) {
+ buttons.add(buttonJson);
+ }
+ }
+ if (button2 != null) {
+ JSONObject buttonJson = JSON.parseObject(button2);
+ if (StringUtils.isNotBlank(buttonJson.getString("name")) && StringUtils.isNotBlank(buttonJson.getString("type"))) {
+ buttons.add(buttonJson);
+ }
+ }
+ if (buttons.size() > 0 ) {
+ res.put("buttons",buttons);
+ }
+ if (aggregate_file != null) {
+ res.put("aggregate_file",aggregate_file);
+ }
+ if (url != null) {
+ res.put("url",url);
+ }
+ if (type != null) {
+ res.put("type", type);
+ }else {
+ res.put("type", 1);
+ }
return res;
}
public String getTitle() {
@@ -154,4 +198,50 @@ public class NoticeInfo {
public void setDesc(String desc) {
this.desc = desc;
}
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ public void setButton1(String button1) {
+ this.button1 = button1;
+ }
+
+ public String getButton1() {
+ return button1;
+ }
+ public void setButton2(String button2) {
+ this.button2 = button2;
+ }
+
+ public String getButton2() {
+ return button2;
+ }
+ public void setButton0(String button0) {
+ this.button0 = button0;
+ }
+
+ public String getButton0() {
+ return button0;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public String getAggregate_file() {
+ return aggregate_file;
+ }
+
+ public void setAggregate_file(String aggregate_file) {
+ this.aggregate_file = aggregate_file;
+ }
}
diff --git a/src/main/java/au/com/royalpay/payment/manage/notice/core/NoticeManage.java b/src/main/java/au/com/royalpay/payment/manage/notice/core/NoticeManage.java
index a30934aa6..00e461615 100644
--- a/src/main/java/au/com/royalpay/payment/manage/notice/core/NoticeManage.java
+++ b/src/main/java/au/com/royalpay/payment/manage/notice/core/NoticeManage.java
@@ -28,4 +28,6 @@ public interface NoticeManage {
JSONObject getLatestWindowNotice(int client_id);
+ JSONObject getLatestWindowConfirmNotice(int client_id);
+
}
diff --git a/src/main/java/au/com/royalpay/payment/manage/notice/core/impls/NoticeManageImpl.java b/src/main/java/au/com/royalpay/payment/manage/notice/core/impls/NoticeManageImpl.java
index 65e7f0769..8c932290a 100644
--- a/src/main/java/au/com/royalpay/payment/manage/notice/core/impls/NoticeManageImpl.java
+++ b/src/main/java/au/com/royalpay/payment/manage/notice/core/impls/NoticeManageImpl.java
@@ -19,6 +19,7 @@ import com.github.miemiedev.mybatis.paginator.domain.Order;
import com.github.miemiedev.mybatis.paginator.domain.PageBounds;
import com.github.miemiedev.mybatis.paginator.domain.PageList;
+import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
@@ -68,6 +69,18 @@ public class NoticeManageImpl implements NoticeManage {
@Override
public JSONObject listNotices(NoticeQuery query) {
PageList notices = noticeManageMapper.listPageNotices(query.toParams(), new PageBounds(query.getPage(), query.getLimit(), Order.formString("create_time.desc")));
+ for (JSONObject notice : notices) {
+ if (notice.getIntValue("type") == 2) {
+ if (notice.get("buttons") != null) {
+ List buttons = JSONObject.parseArray(notice.getString("buttons"), JSONObject.class);
+ if (buttons != null && buttons.size() > 0) {
+ for (int i = 0; i < buttons.size(); i++) {
+ notice.put("button" + i, buttons.get(i));
+ }
+ }
+ }
+ }
+ }
return PageListUtils.buildPageListResult(notices);
}
@@ -102,6 +115,7 @@ public class NoticeManageImpl implements NoticeManage {
@Override
public JSONObject saveNotice(NoticeInfo noticeInfo, JSONObject manager) {
Date date = new Date();
+ List buttons = new ArrayList<>();
JSONObject notice = noticeInfo.toJson();
notice.put("create_time", date);
notice.put("create_id", manager.getString("manager_id"));
@@ -119,20 +133,43 @@ public class NoticeManageImpl implements NoticeManage {
notice.put("send_clients",sendClients.substring(0,sendClients.length()-1));
}
}
+ buttons = JSONObject.parseArray(notice.getString("buttons"),JSONObject.class);
+ notice.remove("buttons");
noticeManageMapper.createNotice(notice);
-
+ if (notice.getIntValue("type")==2) {
+ for (JSONObject button : buttons) {
+ if (StringUtils.isNotBlank(button.getString("link"))) {
+ if (button.getString("link").indexOf("%noticeId%") > 0) {
+ button.put("link", button.getString("link").replace("%noticeId%", notice.getString("notice_id")));
+ }
+ }
+ }
+ notice.put("buttons", buttons.toString());
+ noticeManageMapper.updateNotice(notice);
+ }
return notice;
}
@Override
public JSONObject getNoticeById(String noticeId) {
JSONObject notice = noticeManageMapper.getNoticeDetailById(noticeId);
+ if (notice.getIntValue("type") == 2) {
+ if (notice.get("buttons") != null) {
+ List buttons = JSONObject.parseArray(notice.getString("buttons"), JSONObject.class);
+ if (buttons != null && buttons.size() > 0) {
+ for (int i = 0; i < buttons.size(); i++) {
+ notice.put("button" + i, buttons.get(i));
+ }
+ }
+ }
+ }
return notice;
}
@Override
@Transactional
public void updateNotice(JSONObject manager, String noticeId, NoticeInfo info) throws Exception {
+ List buttons = new ArrayList<>();
JSONObject noticeInfo = noticeManageMapper.getNoticeDetailById(noticeId);
Assert.notNull(noticeInfo);
Date date = new Date();
@@ -158,6 +195,19 @@ public class NoticeManageImpl implements NoticeManage {
}
}
+ if (notice.getIntValue("type")==2) {
+ buttons = JSONObject.parseArray(notice.getString("buttons"),JSONObject.class);
+ for (JSONObject button : buttons) {
+ if (StringUtils.isNotBlank(button.getString("link"))) {
+ if (button.getString("link").indexOf("%noticeId%") > 0) {
+ button.put("link", button.getString("link").replace("%noticeId%", notice.getString("notice_id")));
+ }
+ }
+ }
+ notice.put("buttons", buttons.toString());
+ }else {
+ notice.remove(buttons);
+ }
noticeManageMapper.updateNotice(notice);
if (info.getStatus() != null && info.getSend_clients() != null) {
if (info.getStatus().equals("1") && noticeInfo.getString("status").equals("0") && !info.getSend_clients().isEmpty()) {
@@ -310,6 +360,11 @@ public class NoticeManageImpl implements NoticeManage {
return noticeManageMapper.getLatestWindowNotice(client_id,new Date());
}
+ @Override
+ public JSONObject getLatestWindowConfirmNotice(int client_id) {
+ return noticeManageMapper.getLatestWindowConfirmNotice(client_id,new Date());
+ }
+
@Override
public void toggleNoticeAppWindow(String noticeId, Boolean isAppWindow) {
JSONObject notice = noticeManageMapper.getNoticeDetailById(noticeId);
diff --git a/src/main/resources/au/com/royalpay/payment/manage/mappers/notice/NoticeManageMapper.xml b/src/main/resources/au/com/royalpay/payment/manage/mappers/notice/NoticeManageMapper.xml
index 67997bf16..dcdd5cf88 100644
--- a/src/main/resources/au/com/royalpay/payment/manage/mappers/notice/NoticeManageMapper.xml
+++ b/src/main/resources/au/com/royalpay/payment/manage/mappers/notice/NoticeManageMapper.xml
@@ -21,6 +21,19 @@
where c.client_id = #{client_id} and n.status = 1
and end_time > #{end_time}
and n.is_app_window = 1
+ and n.type = 1
+ order by n.send_time desc
+ limit 1
+
+
+
diff --git a/src/main/resources/au/com/royalpay/payment/manage/mappers/notice/NoticePartnerMapper.xml b/src/main/resources/au/com/royalpay/payment/manage/mappers/notice/NoticePartnerMapper.xml
index 6f0b045a0..f0fe72f7e 100644
--- a/src/main/resources/au/com/royalpay/payment/manage/mappers/notice/NoticePartnerMapper.xml
+++ b/src/main/resources/au/com/royalpay/payment/manage/mappers/notice/NoticePartnerMapper.xml
@@ -35,5 +35,8 @@
and n.is_to_app=#{is_to_app}
+
+ and n.type=#{type}
+
\ No newline at end of file
diff --git a/src/main/ui/static/config/notice/notice.js b/src/main/ui/static/config/notice/notice.js
index a200062d6..d8b991b5c 100644
--- a/src/main/ui/static/config/notice/notice.js
+++ b/src/main/ui/static/config/notice/notice.js
@@ -90,7 +90,18 @@ define(['angular', 'static/commons/commons', 'static/commons/angular-ueditor', '
app.controller('addNoticeCtrl', ['$scope', '$http', '$filter', '$state', 'commonDialog', function ($scope, $http, $filter, $state, commonDialog) {
$scope.merchantTypes = angular.copy(merchantTypes);
$scope.saveNoticeResult = false;
- $scope.notice = {};
+ $scope.notice = {
+ type : '1',
+ button1:{
+ "method" : 'PUT'
+ },
+ button2:{
+ "method" : 'PUT'
+ },
+ button0:{
+ "method" : 'PUT'
+ }
+ };
$scope.today = new Date();
$scope.save = function (form) {
if (form.$invalid) {
diff --git a/src/main/ui/static/config/notice/templates/notice_add.html b/src/main/ui/static/config/notice/templates/notice_add.html
index 469c281cb..7512564d8 100644
--- a/src/main/ui/static/config/notice/templates/notice_add.html
+++ b/src/main/ui/static/config/notice/templates/notice_add.html
@@ -71,13 +71,274 @@