diff --git a/src/db/modify.sql b/src/db/modify.sql
index 41c6cf7c8..da66cb8c9 100644
--- a/src/db/modify.sql
+++ b/src/db/modify.sql
@@ -139,11 +139,11 @@ ALTER TABLE sys_clients_customers ADD COLUMN channel varchar(15) not NULL ;
ALTER TABLE sys_clients_customers ADD COLUMN last_payment_time datetime DEFAULT NULL COMMENT '最后一次付款时间';
ALTER TABLE sys_org ADD COLUMN parent_org_id int(11) DEFAULT NULL;
-ALTER TABLE sys_org ADD COLUMN min_wechat_rate DECIMAL(3,2) DEFAULT NULL COMMENT '旗下商户最低微信费率';
-ALTER TABLE sys_org ADD COLUMN min_alipay_rate DECIMAL(3,2) DEFAULT NULL COMMENT '旗下商户最低支付宝费率';
-ALTER TABLE sys_org ADD COLUMN min_alipayonline_rate DECIMAL(3,2) DEFAULT NULL COMMENT '旗下商户最低支付宝线上费率';
-ALTER TABLE sys_org ADD COLUMN min_bestpay_rate DECIMAL(3,2) DEFAULT NULL COMMENT '旗下商户最低翼支付费率';
-ALTER TABLE sys_org ADD COLUMN min_jd_rate DECIMAL(3,2) DEFAULT NULL COMMENT '旗下商户最低京东费率';
+ALTER TABLE sys_org ADD COLUMN min_wechat_rate DECIMAL(3,2) DEFAULT 'NULL' COMMENT '旗下商户最低微信费率';
+ALTER TABLE sys_org ADD COLUMN min_alipay_rate DECIMAL(3,2) DEFAULT 'NULL' COMMENT '旗下商户最低支付宝费率';
+ALTER TABLE sys_org ADD COLUMN min_alipayonline_rate DECIMAL(3,2) DEFAULT 'NULL' COMMENT '旗下商户最低支付宝线上费率';
+ALTER TABLE sys_org ADD COLUMN min_bestpay_rate DECIMAL(3,2) DEFAULT 'NULL' COMMENT '旗下商户最低翼支付费率';
+ALTER TABLE sys_org ADD COLUMN min_jd_rate DECIMAL(3,2) DEFAULT 'NULL' COMMENT '旗下商户最低京东费率';
ALTER TABLE sys_org ADD COLUMN commission_type SMALLINT(1) DEFAULT '1' COMMENT '提成类型 1:渠道计算法 2:总交易额比例 3:收益比例';
@@ -185,3 +185,25 @@ CREATE TABLE `financial_agent_commission_detail` (
alter table financial_partner_commission add column commission_type smallint(1) DEFAULT 1 COMMENT '提成类型 1:渠道计算法 2:总交易额比例 3:收益比例';
alter table financial_partner_commission_detail add column commission_type smallint(1) DEFAULT 1 COMMENT '提成类型 1:渠道计算法 2:总交易额比例 3:收益比例';
+
+
+INSERT INTO `royalpay_production`.`sys_configs`(`config_key` , `config_value`)
+VALUES
+ (
+ 'android_version_content' ,
+ '近期更新:\n\n1、修复了付款二维码的保存可能会失败的错误\n2、新增多种渠道订单及清算\n3、修复清算记录显示错误'
+ );
+
+INSERT INTO `royalpay_production`.`sys_configs`(`config_key` , `config_value`)
+VALUES
+ (
+ 'android_version' ,
+ '2.8.1'
+ );
+
+INSERT INTO `royalpay_production`.`sys_configs`(`config_key` , `config_value`)
+VALUES
+ (
+ 'android_update' ,
+ 'true'
+ );
\ No newline at end of file
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 f01490ced..c600744ea 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
@@ -953,9 +953,9 @@ public class RetailAppServiceImp implements RetailAppService {
String version = device.getString("version");
String clientType = device.getString("client_type");
deviceSupport.findRegister(clientType);
- String newAppVersion = PlatformEnvironment.getEnv().getNewVersion();
- Boolean isUpdate = PlatformEnvironment.getEnv().isAppUpdate();
- String updateContent = PlatformEnvironment.getEnv().getAppUpdateContent();
+ String newAppVersion = PlatformEnvironment.getEnv().getNewVersion(clientType);
+ Boolean isUpdate = PlatformEnvironment.getEnv().isAppUpdate(clientType);
+ String updateContent = PlatformEnvironment.getEnv().getAppUpdateContent(clientType);
int update_type = 0;// 0:不更新 1:更新 2:强制更新
if (newAppVersion.compareToIgnoreCase(version) > 0) {
update_type = 1;
diff --git a/src/main/java/au/com/royalpay/payment/manage/cashback/core/CashbackService.java b/src/main/java/au/com/royalpay/payment/manage/cashback/core/CashbackService.java
index 52ba05f10..faa58ad37 100644
--- a/src/main/java/au/com/royalpay/payment/manage/cashback/core/CashbackService.java
+++ b/src/main/java/au/com/royalpay/payment/manage/cashback/core/CashbackService.java
@@ -6,6 +6,7 @@ import com.github.miemiedev.mybatis.paginator.domain.PageBounds;
import com.github.miemiedev.mybatis.paginator.domain.PageList;
import java.math.BigDecimal;
+import java.util.Date;
import java.util.List;
/**
@@ -32,4 +33,6 @@ public interface CashbackService {
JSONObject analysisCashback(JSONObject params);
void drawDeposits(BigDecimal drawAmount, int clientId, JSONObject operator);
+
+ void saveSurchargeDiscountCashback(int clientId, String clientMoniker, String transactionOrderId, BigDecimal cashbackAmount, Date date, String remark);
}
\ No newline at end of file
diff --git a/src/main/java/au/com/royalpay/payment/manage/cashback/core/impl/CashbackServiceImp.java b/src/main/java/au/com/royalpay/payment/manage/cashback/core/impl/CashbackServiceImp.java
index f93ed8d3a..4cd24c53e 100644
--- a/src/main/java/au/com/royalpay/payment/manage/cashback/core/impl/CashbackServiceImp.java
+++ b/src/main/java/au/com/royalpay/payment/manage/cashback/core/impl/CashbackServiceImp.java
@@ -1,11 +1,14 @@
package au.com.royalpay.payment.manage.cashback.core.impl;
import java.math.BigDecimal;
+import java.util.Date;
import java.util.List;
import javax.annotation.Resource;
import au.com.royalpay.payment.core.PmtCashbackService;
+import org.apache.commons.lang3.RandomStringUtils;
+import org.apache.commons.lang3.time.DateFormatUtils;
import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSONObject;
@@ -111,7 +114,25 @@ public class CashbackServiceImp implements CashbackService {
@Override
public void drawDeposits(BigDecimal drawAmount, int clientId, JSONObject operator) {
- pmtCashbackService.drawDeposits(drawAmount,clientId,operator);
+ pmtCashbackService.drawDeposits(drawAmount, clientId, operator);
+ }
+
+ @Override
+ public void saveSurchargeDiscountCashback(int clientId, String clientMoniker, String transactionOrderId, BigDecimal cashbackAmount, Date date, String remark) {
+ if (!cashbackRecordsMapper.findBySurchargeDiscountLog(clientId, date).isEmpty()) {
+ return;
+ }
+ String cashback_id = 'R' + clientMoniker + "-" + DateFormatUtils.format(date, "yyyyMMddHHmmssSSS") + "-" + RandomStringUtils.random(3, true, false).toUpperCase();
+ //营销账户
+ JSONObject cashback = new JSONObject();
+ cashback.put("cashback_id", cashback_id);
+ cashback.put("client_id", clientId);
+ cashback.put("cashback_amount", cashbackAmount);
+ cashback.put("order_id", transactionOrderId);
+ cashback.put("cashback_type", 2);
+ cashback.put("remark", remark);
+ cashback.put("create_time", date);
+ cashbackRecordsMapper.save(cashback);
}
}
diff --git a/src/main/java/au/com/royalpay/payment/manage/management/clearing/core/SettleDelayConfigurer.java b/src/main/java/au/com/royalpay/payment/manage/management/clearing/core/SettleDelayConfigurer.java
index 38be7a244..f5e4e0235 100644
--- a/src/main/java/au/com/royalpay/payment/manage/management/clearing/core/SettleDelayConfigurer.java
+++ b/src/main/java/au/com/royalpay/payment/manage/management/clearing/core/SettleDelayConfigurer.java
@@ -3,7 +3,9 @@ package au.com.royalpay.payment.manage.management.clearing.core;
import au.com.royalpay.payment.manage.management.clearing.beans.SettleDelayConfig;
import com.alibaba.fastjson.JSONObject;
import com.github.miemiedev.mybatis.paginator.domain.PageList;
+import org.springframework.transaction.annotation.Transactional;
+import java.util.Date;
import java.util.List;
/**
@@ -20,4 +22,6 @@ public interface SettleDelayConfigurer {
PageList getClientRank(JSONObject params);
+ @Transactional
+ void addCashback(Date date);
}
diff --git a/src/main/java/au/com/royalpay/payment/manage/management/clearing/core/impl/SettleDelayConfigurerImpl.java b/src/main/java/au/com/royalpay/payment/manage/management/clearing/core/impl/SettleDelayConfigurerImpl.java
index 34926db28..96b5e91c2 100644
--- a/src/main/java/au/com/royalpay/payment/manage/management/clearing/core/impl/SettleDelayConfigurerImpl.java
+++ b/src/main/java/au/com/royalpay/payment/manage/management/clearing/core/impl/SettleDelayConfigurerImpl.java
@@ -1,39 +1,41 @@
package au.com.royalpay.payment.manage.management.clearing.core.impl;
-import java.math.BigDecimal;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.annotation.Resource;
-
-import org.apache.commons.lang3.time.DateFormatUtils;
-import org.apache.commons.lang3.time.DateUtils;
-import org.joda.time.DateTime;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.stereotype.Service;
-
-import com.alibaba.fastjson.JSONObject;
-import com.github.miemiedev.mybatis.paginator.domain.Order;
-import com.github.miemiedev.mybatis.paginator.domain.PageBounds;
-import com.github.miemiedev.mybatis.paginator.domain.PageList;
-
import au.com.royalpay.payment.core.exceptions.InvalidShortIdException;
+import au.com.royalpay.payment.manage.appclient.core.RetailAppService;
import au.com.royalpay.payment.manage.cashback.core.CashbackService;
import au.com.royalpay.payment.manage.management.clearing.beans.SettleDelayConfig;
import au.com.royalpay.payment.manage.management.clearing.core.SettleDelayConfigurer;
+import au.com.royalpay.payment.manage.mappers.log.ClearingDetailMapper;
import au.com.royalpay.payment.manage.mappers.log.ClearingLogMapper;
import au.com.royalpay.payment.manage.mappers.payment.TransactionMapper;
import au.com.royalpay.payment.manage.mappers.system.ClientSettleDelayConfMapper;
import au.com.royalpay.payment.manage.merchants.core.ClientManager;
+import au.com.royalpay.payment.tools.CommonConsts;
+import au.com.royalpay.payment.tools.env.PlatformEnvironment;
+import au.com.royalpay.payment.tools.exceptions.BadRequestException;
+import au.com.royalpay.payment.tools.lock.Locker;
+import au.com.royalpay.payment.tools.utils.CurrencyAmountUtils;
import au.com.royalpay.payment.tools.utils.PageListUtils;
+import com.alibaba.fastjson.JSONObject;
+import com.github.miemiedev.mybatis.paginator.domain.Order;
+import com.github.miemiedev.mybatis.paginator.domain.PageBounds;
+import com.github.miemiedev.mybatis.paginator.domain.PageList;
+import org.apache.commons.lang3.time.DateFormatUtils;
+import org.apache.commons.lang3.time.DateUtils;
+import org.joda.time.DateTime;
+import org.joda.time.DateTimeConstants;
+import org.joda.time.LocalDate;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.Assert;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
/**
* Create by yixian at 2017-09-08 15:06
@@ -50,6 +52,12 @@ public class SettleDelayConfigurerImpl implements SettleDelayConfigurer {
private TransactionMapper transactionMapper;
@Resource
private ClearingLogMapper clearingLogMapper;
+ @Resource
+ private ClearingDetailMapper clearingDetailMapper;
+ @Resource
+ private Locker locker;
+ @Resource
+ private RetailAppService retailAppService;
private Logger logger = LoggerFactory.getLogger(getClass());
@Override
@@ -147,9 +155,9 @@ public class SettleDelayConfigurerImpl implements SettleDelayConfigurer {
DateTime dt = new DateTime(jsonObject.getDate("create_time"));
int weekOfYear = dt.getWeekOfWeekyear();
JSONObject cashBackMapElement = cashBackMap.get(weekOfYear);
- if(cashBackMapElement!=null){
- cashBackMapElement.put("cashback_amount",cashBackMapElement.getBigDecimal("cashback_amount").add(jsonObject.getBigDecimal("cashback_amount")));
- }else {
+ if (cashBackMapElement != null) {
+ cashBackMapElement.put("cashback_amount", cashBackMapElement.getBigDecimal("cashback_amount").add(jsonObject.getBigDecimal("cashback_amount")));
+ } else {
cashBackMap.put(weekOfYear, jsonObject);
}
}
@@ -159,7 +167,7 @@ public class SettleDelayConfigurerImpl implements SettleDelayConfigurer {
JSONObject sunday = weekendAnalysisMap.get(resultEntry.getInteger("weekend") + 1);
Date saturday = null;
try {
- saturday = sf.parse(String.valueOf(resultEntry.getInteger("weekend")));
+ saturday = sf.parse(String.valueOf(resultEntry.getInteger("weekend")));
} catch (ParseException e) {
logger.info("获取延迟清算金额时 日期转换错误");
}
@@ -167,11 +175,11 @@ public class SettleDelayConfigurerImpl implements SettleDelayConfigurer {
if (resultEntry.getBigDecimal("settle_amount") == null) {
continue;
}
- resultEntry.put("weekend",resultEntry.getIntValue("weekend")+2);
+ resultEntry.put("weekend", resultEntry.getIntValue("weekend") + 2);
resultEntry.put("settle_amount", resultEntry.getBigDecimal("settle_amount").add(sunday.getBigDecimal("settle_amount")));
resultEntry.put("transaction_amount", resultEntry.getBigDecimal("transaction_amount").add(sunday.getBigDecimal("transaction_amount")));
- if (cashBackMap.containsKey(new DateTime(saturday).getWeekOfWeekyear()+1)) {
- resultEntry.put("cashback", cashBackMap.get(new DateTime(saturday).getWeekOfWeekyear()+1).getBigDecimal("cashback_amount"));
+ if (cashBackMap.containsKey(new DateTime(saturday).getWeekOfWeekyear() + 1)) {
+ resultEntry.put("cashback", cashBackMap.get(new DateTime(saturday).getWeekOfWeekyear() + 1).getBigDecimal("cashback_amount"));
} else {
resultEntry.put("cashback", 0);
}
@@ -190,4 +198,75 @@ public class SettleDelayConfigurerImpl implements SettleDelayConfigurer {
public PageList getClientRank(JSONObject params) {
return cashbackService.getSettleDelayRank(params, new PageBounds(params.getIntValue("page"), params.getIntValue("limit")));
}
+
+ @Override
+ @Transactional
+ public void addCashback(Date date) {
+ String key = "settle_delay_cashback";
+ if (!locker.lock(key, 600_000)) {
+ return;
+ }
+ try {
+ date = DateUtils.truncate(date, Calendar.DATE);
+ LocalDate processDate = LocalDate.fromDateFields(date);
+ if (processDate.getDayOfWeek() != DateTimeConstants.TUESDAY) {
+ throw new BadRequestException("Not tuesday");
+ }
+ LocalDate sunday = processDate.minusDays(processDate.getDayOfWeek());
+ LocalDate saturday = sunday.minusDays(1);
+ List clientAttends = clientSettleDelayConfMapper.listClients(new JSONObject(), new PageBounds());
+ for (JSONObject attend : clientAttends) {
+ Date monday = DateUtils.addDays(date, -1);
+ if (attend.getDate("from_date").after(monday) || attend.getDate("to_date").before(monday)) {
+ continue;
+ }
+ int clientId = attend.getIntValue("client_id");
+ JSONObject client = clientManager.getClientInfo(clientId);
+ if (client == null) {
+ continue;
+ }
+ String clientMoniker = client.getString("client_moniker");
+ JSONObject clearing = clearingDetailMapper.listReport(date, clientId);
+ if (clearing == null) {
+ continue;
+ }
+ int detailId = clearing.getIntValue("clear_detail_id");
+ List settleTrans = transactionMapper.listSettlementTransactions(detailId);
+ Assert.notEmpty(settleTrans, "No Settle History");
+ String transactionOrderId = settleTrans.get(0).getString("order_id");
+ List transactions = transactionMapper.listTransactionsOfClearingOrder(detailId, new PageBounds());
+ BigDecimal totalSurcharge = BigDecimal.ZERO;
+ for (JSONObject transaction : transactions) {
+ Date day = transaction.getDate("transaction_time");
+ LocalDate transactionDate = LocalDate.fromDateFields(day);
+ if (transactionDate.equals(sunday) || transactionDate.equals(saturday)) {
+ continue;
+ }
+ BigDecimal surcharge = transaction.getBigDecimal("clearing_amount").subtract(transaction.getBigDecimal("settle_amount"));
+ if ("Debit".equals(transaction.getString("transaction_type"))) {
+ surcharge = surcharge.multiply(BigDecimal.valueOf(-1));
+ }
+ totalSurcharge = totalSurcharge.add(surcharge);
+ }
+ BigDecimal cashbackAmount = CurrencyAmountUtils.scale(totalSurcharge.multiply(attend.getBigDecimal("surcharge_discount")).divide(CommonConsts.HUNDRED, 2, BigDecimal.ROUND_HALF_UP), PlatformEnvironment.getEnv().getForeignCurrency());
+ String remark = "Surcharge cashback for " + saturday.toString("dd/MMM/yyyy", Locale.ENGLISH) + " ~ " + sunday.toString("dd/MMM/yyyy", Locale.ENGLISH);
+ if (cashbackAmount.compareTo(BigDecimal.ZERO) > 0) {
+ cashbackService.saveSurchargeDiscountCashback(clientId, clientMoniker, transactionOrderId, cashbackAmount, date, remark);
+ try {
+ if (!PlatformEnvironment.getEnv().isDebug()) {
+ JSONObject order = new JSONObject();
+ order.put("order_id", transactionOrderId);
+ order.put("client_id", clientId);
+ retailAppService.sendCashbackMessage(cashbackAmount.toPlainString(), order);// app message
+ }
+ } catch (Exception e) {
+ logger.error("发送App消息失败", e);
+ }
+ }
+ }
+ } finally {
+ locker.unlock(key);
+ }
+
+ }
}
diff --git a/src/main/java/au/com/royalpay/payment/manage/management/clearing/handlers/SendWeekendDelayCashbackSaver.java b/src/main/java/au/com/royalpay/payment/manage/management/clearing/handlers/SendWeekendDelayCashbackSaver.java
new file mode 100644
index 000000000..881694f43
--- /dev/null
+++ b/src/main/java/au/com/royalpay/payment/manage/management/clearing/handlers/SendWeekendDelayCashbackSaver.java
@@ -0,0 +1,26 @@
+package au.com.royalpay.payment.manage.management.clearing.handlers;
+
+import au.com.royalpay.payment.core.events.SettleNotifySendingEvent;
+import au.com.royalpay.payment.manage.management.clearing.core.SettleDelayConfigurer;
+import org.apache.commons.lang3.time.DateUtils;
+import org.springframework.context.ApplicationListener;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Calendar;
+import java.util.Date;
+
+/**
+ * Create by yixian at 2017-12-25 13:48
+ */
+@Service
+public class SendWeekendDelayCashbackSaver implements ApplicationListener {
+ @Resource
+ private SettleDelayConfigurer settleDelayConfigurer;
+
+ @Override
+ public void onApplicationEvent(SettleNotifySendingEvent event) {
+ Date eventTime = new Date(event.getEventTime());
+ settleDelayConfigurer.addCashback(DateUtils.truncate(eventTime, Calendar.DATE));
+ }
+}
diff --git a/src/main/java/au/com/royalpay/payment/manage/management/sysconfig/web/SysConfigController.java b/src/main/java/au/com/royalpay/payment/manage/management/sysconfig/web/SysConfigController.java
index cee5b6558..6aaea6373 100644
--- a/src/main/java/au/com/royalpay/payment/manage/management/sysconfig/web/SysConfigController.java
+++ b/src/main/java/au/com/royalpay/payment/manage/management/sysconfig/web/SysConfigController.java
@@ -4,12 +4,19 @@ import au.com.royalpay.payment.manage.management.sysconfig.core.ClearDateManager
import au.com.royalpay.payment.manage.permission.manager.ManagerMapping;
import au.com.royalpay.payment.tools.env.SysConfigManager;
import au.com.royalpay.payment.tools.permission.enums.ManagerRole;
+
import com.alibaba.fastjson.JSONObject;
-import org.springframework.web.bind.annotation.*;
-import javax.annotation.Resource;
+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.RestController;
+
import java.util.List;
+import javax.annotation.Resource;
+
/**
* Created by yixian on 2017-01-06.
*/
@@ -40,4 +47,9 @@ public class SysConfigController {
public void updateMonthClearDays(@PathVariable String monthPattern, @RequestBody List days) {
clearDateManager.setMonthClearDays(monthPattern, days);
}
+
+
+ public static void main(String[] args) {
+ System.out.println("asd".equals(null));
+ }
}
diff --git a/src/main/resources/templates/mail/new_client_notice.html b/src/main/resources/templates/mail/new_client_notice.html
index 63f92795f..92b414be8 100644
--- a/src/main/resources/templates/mail/new_client_notice.html
+++ b/src/main/resources/templates/mail/new_client_notice.html
@@ -92,7 +92,7 @@
Service WeChat Account:
- Level 2, 50 Bridge Street, Sydney NSW 2000
+ Level 14, 383 Kent Street, Sydney NSW 2000
Level 11, 15 William Street, Melbourne VIC 3000
diff --git a/src/main/resources/templates/mail/settlement_mail.html b/src/main/resources/templates/mail/settlement_mail.html
index cdf158df8..2646fe311 100644
--- a/src/main/resources/templates/mail/settlement_mail.html
+++ b/src/main/resources/templates/mail/settlement_mail.html
@@ -13,7 +13,7 @@
Representative of AFS Licensee 448066
------------------------------
Lv.11,15 William Street, Melbourne 3000
- Lv.7, 50 Bridge Street, Sydney, NSW 2000
+ Lv.14, 383 Kent Street, Sydney, NSW 2000
P: 1300 1077 50
E: settlement@royalpay.com.au
www.royalpay.com.au
diff --git a/src/main/ui/partner_register.html b/src/main/ui/partner_register.html
index 3a5dc375a..92e7be85a 100644
--- a/src/main/ui/partner_register.html
+++ b/src/main/ui/partner_register.html
@@ -564,8 +564,8 @@