Merge remote-tracking branch 'origin/develop' into develop

master
yixian 5 years ago
commit 0ed1de9c4c

@ -10,6 +10,11 @@
<modelVersion>4.0.0</modelVersion>
<artifactId>manage</artifactId>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<jib-maven-plugin.version>1.1.2</jib-maven-plugin.version>
<docker-image.version>1.0.4</docker-image.version>
</properties>
<dependencies>
<dependency>
@ -197,6 +202,28 @@
<executable>true</executable>
</configuration>
</plugin>
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>${jib-maven-plugin.version}</version>
<configuration>
<from>
<image>hkccr.ccs.tencentyun.com/cross-payment/base:v1.0</image>
</from>
<to>
<image>hkccr.ccs.tencentyun.com/cross-payment-dev/manage-dev:${docker-image.version}</image>
</to>
<allowInsecureRegistries>true</allowInsecureRegistries>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>

@ -655,7 +655,7 @@ public class BDPrizeServiceImpl implements BDPrizeService {
int rowNum = 0;
Row row = sheet.createRow(rowNum);
String[] title = {"Client Moniker", "Order Date Range", "Client Rate", "Client Source", "Init Months", "Transaction", "Coefficient", "BD Rate",
"Commission", "Channel"};
"Commission", "RoyalPay Surcharge", "Channel"};
for (int i = 0; i < title.length; i++) {
row.createCell(i, Cell.CELL_TYPE_STRING).setCellValue(title[i]);
}
@ -673,7 +673,8 @@ public class BDPrizeServiceImpl implements BDPrizeService {
row.createCell(6, Cell.CELL_TYPE_STRING).setCellValue(bdlog.getString("coefficient"));
row.createCell(7, Cell.CELL_TYPE_STRING).setCellValue(bdlog.getString("bd_rate") + "%");
row.createCell(8, Cell.CELL_TYPE_STRING).setCellValue(bdlog.getString("prize_value"));
row.createCell(9, Cell.CELL_TYPE_STRING).setCellValue(bdlog.getString("channel"));
row.createCell(9, Cell.CELL_TYPE_STRING).setCellValue(bdlog.getString("royal_surcharge"));
row.createCell(10, Cell.CELL_TYPE_STRING).setCellValue(bdlog.getString("channel"));
}
wb.write(ous);
ous.flush();

@ -85,6 +85,6 @@ public class LogRiskController {
@GetMapping(value = "/pre_refund/list")
public JSONObject listPreRefund(PreRefundQueryBean preRefundQueryBean) {
return PageListUtils.buildPageListResult(tradeLogService.listPreRefundClients(preRefundQueryBean));
return tradeLogService.listPreRefundClients(preRefundQueryBean);
}
}

@ -16,12 +16,15 @@ public interface ClearingDistributedSurchargeMapper {
List<JSONObject> findTransactions(@Param("client_id") int clientId);
@AutoSql(type = SqlType.UPDATE)
void update(JSONObject transaction);
@AutoSql(type = SqlType.INSERT)
void save(JSONObject transactions);
List<JSONObject> getMonthDetailByClientId(@Param("datefrom") Date datefrom, @Param("dateto") Date dateto);
List<JSONObject> findTransactionsByDate(JSONObject params);
List<JSONObject> findSurchargeTransactionsByDetailId(@Param("client_id") int clientId, @Param("detailId") String detailId);
List<JSONObject> listUnClearedByMonth(@Param("dateto") DateTime dateTo);
}

@ -3,33 +3,23 @@ package au.com.royalpay.payment.manage.merchants.core;
import au.com.royalpay.payment.core.exceptions.EmailException;
import au.com.royalpay.payment.manage.appclient.beans.AppClientBean;
import au.com.royalpay.payment.manage.appclient.beans.AppMerchantBean;
import au.com.royalpay.payment.manage.merchants.beans.BankAccountInfo;
import au.com.royalpay.payment.manage.merchants.beans.ClientAuthFilesInfo;
import au.com.royalpay.payment.manage.merchants.beans.ClientRateConfig;
import au.com.royalpay.payment.manage.merchants.beans.ClientRegisterInfo;
import au.com.royalpay.payment.manage.merchants.beans.NewAccountBean;
import au.com.royalpay.payment.manage.merchants.beans.PartnerQuery;
import au.com.royalpay.payment.manage.merchants.beans.SubMerchantIdApply;
import au.com.royalpay.payment.manage.merchants.beans.*;
import au.com.royalpay.payment.manage.tradelog.beans.TradeLogQuery;
import au.com.royalpay.payment.tools.merchants.beans.QRCodeConfig;
import au.com.royalpay.payment.tools.merchants.beans.UpdateSurchargeDTO;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.apache.ibatis.annotations.Param;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
/**
* Created by yixian on 2016-06-25.
*/
@ -287,7 +277,7 @@ public interface ClientManager {
List<JSONObject> getAccountDetailByMonths(JSONObject account,String clientMoniker);
List<JSONObject> getAccountTransactionsByDate(JSONObject account,String clientMoniker, String date);
List<JSONObject> getAccountTransactionsByDetailId(JSONObject account,String clientMoniker, String detailId);
List<JSONObject> getAccountMonthDetails(JSONObject account,String clientMoniker);
@ -432,4 +422,6 @@ public interface ClientManager {
void resetRefundPasswordByManage(String clientMoniker,JSONObject manage, JSONObject json);
List<Integer> listLevel3Client(int client_id);
void updateRefundCreditLine(JSONObject manager, String clientMoniker, JSONObject refundLineInfo);
}

@ -33,6 +33,7 @@ import au.com.royalpay.payment.manage.merchants.beans.*;
import au.com.royalpay.payment.manage.merchants.core.*;
import au.com.royalpay.payment.manage.merchants.entity.impls.*;
import au.com.royalpay.payment.manage.notice.core.MailService;
import au.com.royalpay.payment.manage.permission.utils.OrgCheckUtils;
import au.com.royalpay.payment.manage.signin.beans.TodoNotice;
import au.com.royalpay.payment.manage.signin.core.ManagerTodoNoticeProvider;
import au.com.royalpay.payment.manage.signin.core.SignInAccountService;
@ -1877,6 +1878,22 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
return clientMapper.childClientId(clientId);
}
@Override
public void updateRefundCreditLine(JSONObject manager, String clientMoniker, JSONObject refundLineInfo) {
JSONObject client = getClientInfoByMoniker(clientMoniker);
if (client == null) {
throw new InvalidShortIdException();
}
OrgCheckUtils.checkOrgPermission(manager, client);
JSONObject update = new JSONObject();
int clientId = client.getIntValue("client_id");
BigDecimal refundCreditLine = refundLineInfo.getBigDecimal("refund_credit_line");
update.put("client_id", clientId);
update.put("refund_credit_line", refundCreditLine);
clientMapper.update(update);
clientInfoCacheSupport.clearClientCache(clientId);
}
@Override
@Transactional
public void updateClientBDUsers(JSONObject manager, String clientMoniker, JSONObject data) throws Exception {
@ -3495,24 +3512,12 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
}
@Override
public List<JSONObject> getAccountTransactionsByDate(JSONObject account, String clientMoniker, String date) {
public List<JSONObject> getAccountTransactionsByDetailId(JSONObject account, String clientMoniker, String detailId) {
JSONObject client = getClientInfoByMoniker(clientMoniker);
if (client == null) {
throw new InvalidShortIdException();
}
JSONObject params = new JSONObject();
params.put("client_id", client.getIntValue("client_id"));
params.put("year", date.substring(0, 4));
params.put("month", date.substring(date.length() - 2, date.length()));
List<JSONObject> transactions = clearingDistributedSurchargeMapper.findTransactionsByDate(params);
transactions.forEach(e -> {
if ("Credit".equals(e.getString("type"))) {
JSONObject manager = managerMapper.findDetail(e.getString("operation"));
e.put("operator_displayname", manager.getString("display_name"));
}
});
return transactions;
return clearingDistributedSurchargeMapper.findSurchargeTransactionsByDetailId(client.getIntValue("client_id"),detailId);
}
@Override
@ -3521,8 +3526,7 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
if (client == null) {
throw new InvalidShortIdException();
}
List<JSONObject> details = financialSurchargeAccountDetailMapper.findDetailsByClientId(client.getIntValue("client_id"));
return details;
return financialSurchargeAccountDetailMapper.findDetailsByClientId(client.getIntValue("client_id"));
}
@Override
@ -3540,19 +3544,19 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
throw new ServerErrorException("Processing task, wait for a moment");
}
try {
JSONObject surcharge_account = clientsSurchargeAccountsMapper.find(client.getIntValue("client_id"));
JSONObject surchargeAccount = clientsSurchargeAccountsMapper.find(client.getIntValue("client_id"));
transaction.put("client_id", client.getIntValue("client_id"));
transaction.put("type", "Credit");
transaction.put("total_surcharge", BigDecimal.ZERO);
transaction.put("tax_amount", BigDecimal.ZERO);
transaction.put("post_balance", surcharge_account.getBigDecimal("balance").add(transaction.getBigDecimal("amount")));
transaction.put("post_balance", surchargeAccount.getBigDecimal("balance").add(transaction.getBigDecimal("amount")));
transaction.put("operation", account.getString("manager_id"));
transaction.put("create_time", new Date());
clearingDistributedSurchargeMapper.save(transaction);
surcharge_account.put("balance", surcharge_account.getBigDecimal("balance").add(transaction.getBigDecimal("amount")));
clientsSurchargeAccountsMapper.update(surcharge_account);
surchargeAccount.put("balance", surchargeAccount.getBigDecimal("balance").add(transaction.getBigDecimal("amount")));
clientsSurchargeAccountsMapper.update(surchargeAccount);
} finally {
locker.unlock(clientMoniker + "_surcharge_account_save");

@ -1,13 +1,7 @@
package au.com.royalpay.payment.manage.merchants.web;
import au.com.royalpay.payment.manage.dev.core.MerchantLocationService;
import au.com.royalpay.payment.manage.merchants.beans.BankAccountInfo;
import au.com.royalpay.payment.manage.merchants.beans.ClientAuthFilesInfo;
import au.com.royalpay.payment.manage.merchants.beans.ClientRateConfig;
import au.com.royalpay.payment.manage.merchants.beans.ClientRegisterInfo;
import au.com.royalpay.payment.manage.merchants.beans.NewAccountBean;
import au.com.royalpay.payment.manage.merchants.beans.PartnerQuery;
import au.com.royalpay.payment.manage.merchants.beans.SubMerchantIdApply;
import au.com.royalpay.payment.manage.merchants.beans.*;
import au.com.royalpay.payment.manage.merchants.core.ClientManager;
import au.com.royalpay.payment.manage.permission.manager.ManagerMapping;
import au.com.royalpay.payment.manage.permission.manager.RequireManager;
@ -19,21 +13,14 @@ import au.com.royalpay.payment.tools.merchants.beans.QRCodeConfig;
import au.com.royalpay.payment.tools.permission.enums.ManagerRole;
import com.alibaba.fastjson.JSONObject;
import org.springframework.validation.Errors;
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.RestController;
import java.io.IOException;
import java.io.OutputStream;
import java.util.List;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.IOException;
import java.io.OutputStream;
import java.util.List;
/**
* Created by yixian on 2016-06-27.
@ -182,6 +169,11 @@ public class PartnerManageController {
clientManager.updateClientPaymentConfig(manager, clientMoniker, subMerchantInfo);
}
@ManagerMapping(value = "/{clientMoniker}/refund_credit_line", method = RequestMethod.PUT, role = {ManagerRole.OPERATOR, ManagerRole.BD_USER})
public void updateRefundCreditLine(@PathVariable String clientMoniker, @RequestBody JSONObject refundLineInfo, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) {
clientManager.updateRefundCreditLine(manager, clientMoniker, refundLineInfo);
}
@ManagerMapping(value = "/{clientMoniker}/rpay_payment_config", method = RequestMethod.PUT, role = {ManagerRole.OPERATOR, ManagerRole.BD_USER})
public void updatePartnerRpayPaymentConfig(@PathVariable String clientMoniker, @RequestBody JSONObject rpaySubMerchantInfo, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) {
clientManager.updateClientRpayPaymentConfig(manager, clientMoniker, rpaySubMerchantInfo);
@ -415,9 +407,10 @@ public class PartnerManageController {
public List<JSONObject> accountTransactions(@ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager, @PathVariable String clientMoniker) {
return clientManager.getAccountTransactions(manager, clientMoniker);
}
@ManagerMapping(value = "/{clientMoniker}/account/transactions/date", method = RequestMethod.GET, role = {ManagerRole.ADMIN, ManagerRole.OPERATOR})
public List<JSONObject> accountTransactionsByDate(@ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager, @PathVariable String clientMoniker,@RequestParam String date) {
return clientManager.getAccountTransactionsByDate(manager, clientMoniker, date);
public List<JSONObject> accountTransactionsByDate(@ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager, @PathVariable String clientMoniker, @RequestParam String detailId) {
return clientManager.getAccountTransactionsByDetailId(manager, clientMoniker, detailId);
}
@ManagerMapping(value = "/{clientMoniker}/account/save", method = RequestMethod.POST, role = {ManagerRole.ADMIN, ManagerRole.OPERATOR})

@ -7,7 +7,6 @@ import au.com.royalpay.payment.manage.merchants.beans.ClientRegisterInfo;
import au.com.royalpay.payment.manage.merchants.beans.NewAccountBean;
import au.com.royalpay.payment.manage.merchants.core.ClientManager;
import au.com.royalpay.payment.manage.merchants.core.ClientSignEventSupport;
import au.com.royalpay.payment.manage.permission.manager.ManagerMapping;
import au.com.royalpay.payment.manage.permission.manager.PartnerMapping;
import au.com.royalpay.payment.manage.permission.manager.RequirePartner;
import au.com.royalpay.payment.manage.support.wechatclients.KangaLandWechatApiImpl;
@ -21,31 +20,21 @@ import au.com.royalpay.payment.tools.exceptions.BadRequestException;
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.permission.enums.ManagerRole;
import au.com.royalpay.payment.tools.permission.enums.PartnerRole;
import au.com.royalpay.payment.tools.permission.wechat.WechatMapping;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.Errors;
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 java.io.IOException;
import java.io.OutputStream;
import java.util.List;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.IOException;
import java.io.OutputStream;
import java.util.List;
/**
* view for partner client
@ -197,7 +186,7 @@ public class PartnerViewController {
@PartnerMapping(value = "/{clientMoniker}/account/transactions/date", method = RequestMethod.GET, roles = {PartnerRole.ADMIN, PartnerRole.MANAGER})
@ResponseBody
public List<JSONObject> accountTransactionsByDate(@ModelAttribute(CommonConsts.PARTNER_STATUS) JSONObject manager, @PathVariable String clientMoniker,@RequestParam String date) {
return clientManager.getAccountTransactionsByDate(manager, clientMoniker, date);
return clientManager.getAccountTransactionsByDetailId(manager, clientMoniker, date);
}
@PartnerMapping(value = "/{clientMoniker}/account/months", method = RequestMethod.GET, roles = {PartnerRole.ADMIN, PartnerRole.MANAGER})
@ -254,7 +243,7 @@ public class PartnerViewController {
return "wechat_bind";
}
@RequestMapping(value = "/account_receive_notice", method = RequestMethod.PUT)
@PutMapping(value = "/account_receive_notice")
@ResponseBody
public JSONObject toggleReceiveNotice(@ModelAttribute(CommonConsts.WECHATINFO) JSONObject user, @RequestBody JSONObject enable) {
if (user == null) {

@ -2,7 +2,6 @@ package au.com.royalpay.payment.manage.surchargeAccount.core;
import com.alibaba.fastjson.JSONObject;
import java.util.Date;
import java.util.List;
public interface SurchargeAccountService {
@ -11,6 +10,6 @@ public interface SurchargeAccountService {
List<JSONObject> listSettledDatesInMonth(String mon);
void fillMothsSurcharge(JSONObject manager, String detail_id);
void fillMothsSurcharge(JSONObject manager, String detailId);
}

@ -11,8 +11,6 @@ import au.com.royalpay.payment.tools.exceptions.ServerErrorException;
import au.com.royalpay.payment.tools.lock.Locker;
import au.com.royalpay.payment.tools.permission.enums.ManagerRole;
import com.alibaba.fastjson.JSONObject;
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;
@ -21,7 +19,6 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.text.DateFormat;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
@ -39,12 +36,11 @@ public class SurchargeAccountServiceImpl implements SurchargeAccountService {
private Locker locker;
@Resource
private ClientsSurchargeAccountsMapper clientsSurchargeAccountsMapper;
Logger logger = LoggerFactory.getLogger(ClientContractServiceImpl.class);
private Logger logger = LoggerFactory.getLogger(ClientContractServiceImpl.class);
@Override
@Transactional
@Transactional(rollbackFor = Exception.class)
public void generatorMonthDetail() {
DateTime dateTo = DateTime.now().withMillisOfDay(0).withDayOfMonth(1);
logger.info("===============Start generator surcharge account month detail==============={}", new Date());
@ -67,6 +63,7 @@ public class SurchargeAccountServiceImpl implements SurchargeAccountService {
.reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
detail.put("credit_amount", creditAmount);
detail.put("debit_amount", debitAmount);
detail.put("total_surcharge", creditAmount.add(debitAmount));
JSONObject lastTrans = surchargeTrans.stream().max(Comparator.comparing(trans -> trans.getDate("create_time")))
.orElse(null);
BigDecimal postBalance;
@ -80,8 +77,13 @@ public class SurchargeAccountServiceImpl implements SurchargeAccountService {
detail.put("send_mail", 0);
detail.put("wx_send", 0);
detail.put("create_time", new Date());
detail.put("is_valid", 0);
detail.put("checkout", 0);
financialSurchargeAccountDetailMapper.save(detail);
//更新手续费明细中的账单id
surchargeTrans.forEach(trans -> {
trans.put("bill_id", detail.getString("detail_id"));
clearingDistributedSurchargeMapper.update(trans);
});
}
logger.info("===============generator OVER==============={}", new Date());
}
@ -92,35 +94,36 @@ public class SurchargeAccountServiceImpl implements SurchargeAccountService {
}
@Override
public void fillMothsSurcharge(JSONObject manager, String detail_id) {
public void fillMothsSurcharge(JSONObject manager, String detailId) {
if (!(ManagerRole.ADMIN.hasRole(manager.getIntValue("role")) || ManagerRole.OPERATOR.hasRole(manager.getIntValue("role")) || ManagerRole.FINANCIAL_STAFF.hasRole(manager.getIntValue("role")))) {
throw new ForbiddenException("无法执行平账操作,权限不足");
}
JSONObject detail = financialSurchargeAccountDetailMapper.findByDetailId(detail_id);
if (detail.getBooleanValue("is_valid")) {
JSONObject detail = financialSurchargeAccountDetailMapper.findByDetailId(detailId);
if (detail.getBooleanValue("checkout")) {
throw new BadRequestException("该记录已结清");
}
if (!locker.lock(detail.getIntValue("client_id") + "_" + detail.getString("settle_month") + "_fill", 120_000)) {
throw new ServerErrorException("Processing task, wait for a moment");
}
try {
JSONObject surcharge_account = clientsSurchargeAccountsMapper.find(detail.getIntValue("client_id"));
JSONObject surchargeAccount = clientsSurchargeAccountsMapper.find(detail.getIntValue("client_id"));
JSONObject transaction = new JSONObject();
transaction.put("client_id", detail.getIntValue("client_id"));
transaction.put("type", "Credit");
transaction.put("bill_id", detailId);
transaction.put("total_surcharge", BigDecimal.ZERO);
transaction.put("tax_amount", BigDecimal.ZERO);
transaction.put("amount", detail.getBigDecimal("debit_amount").negate());
transaction.put("post_balance", surcharge_account.getBigDecimal("balance").add(transaction.getBigDecimal("amount")));
transaction.put("post_balance", surchargeAccount.getBigDecimal("balance").add(transaction.getBigDecimal("amount")));
transaction.put("operation", manager.getString("manager_id"));
transaction.put("create_time", new Date());
transaction.put("remark", detail.getString("settle_month") + "冲正");
clearingDistributedSurchargeMapper.save(transaction);
surcharge_account.put("balance", surcharge_account.getBigDecimal("balance").add(transaction.getBigDecimal("amount")));
clientsSurchargeAccountsMapper.update(surcharge_account);
detail.put("is_valid", 1);
detail.put("operator_id", manager.getString("manager_id"));
surchargeAccount.put("balance", surchargeAccount.getBigDecimal("balance").add(transaction.getBigDecimal("amount")));
clientsSurchargeAccountsMapper.update(surchargeAccount);
detail.put("checkout", 1);
detail.put("operator_id", manager.getString("display_name"));
financialSurchargeAccountDetailMapper.update(detail);
} finally {
locker.unlock(detail.getIntValue("client_id") + "_" + detail.getString("settle_month") + "_fill");

@ -3,16 +3,11 @@ package au.com.royalpay.payment.manage.surchargeAccount.web;
import au.com.royalpay.payment.manage.permission.manager.ManagerMapping;
import au.com.royalpay.payment.manage.surchargeAccount.core.SurchargeAccountService;
import au.com.royalpay.payment.tools.CommonConsts;
import au.com.royalpay.payment.tools.exceptions.BadRequestException;
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 java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
@RequestMapping("/sys/surcharge_account")
@ -27,8 +22,8 @@ public class SurchargeAccountController {
return surchargeAccountService.listSettledDatesInMonth(month);
}
@ManagerMapping(value = "/fill/{detail_id}", role = {ManagerRole.ADMIN, ManagerRole.OPERATOR, ManagerRole.FINANCIAL_STAFF}, method = RequestMethod.PUT)
public void fillMothsSurcharge(@ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager, @PathVariable String detail_id) {
surchargeAccountService.fillMothsSurcharge(manager, detail_id);
@ManagerMapping(value = "/fill/{detailId}", role = {ManagerRole.ADMIN, ManagerRole.OPERATOR, ManagerRole.FINANCIAL_STAFF}, method = RequestMethod.PUT)
public void fillMothsSurcharge(@ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager, @PathVariable String detailId) {
surchargeAccountService.fillMothsSurcharge(manager, detailId);
}
}

@ -3,7 +3,6 @@ package au.com.royalpay.payment.manage.tradelog.core;
import au.com.royalpay.payment.manage.tradelog.beans.PreRefundQueryBean;
import au.com.royalpay.payment.manage.tradelog.beans.TradeLogQuery;
import com.alibaba.fastjson.JSONObject;
import com.github.miemiedev.mybatis.paginator.domain.PageList;
import org.springframework.ui.Model;
import javax.servlet.http.HttpServletResponse;
@ -49,7 +48,7 @@ public interface TradeLogService {
void fullReleasePreAuthorization(JSONObject account, TradeLogQuery query)throws Exception;
PageList<JSONObject> listPreRefundClients(PreRefundQueryBean params);
JSONObject listPreRefundClients(PreRefundQueryBean params);
void exportSettlementLog(TradeLogQuery query, JSONObject partner, HttpServletResponse response);

@ -10,16 +10,13 @@ import au.com.royalpay.payment.core.exceptions.InvalidShortIdException;
import au.com.royalpay.payment.core.exceptions.OrderNotMatchException;
import au.com.royalpay.payment.core.exceptions.ParamInvalidException;
import au.com.royalpay.payment.manage.mappers.client.ClientCustomersMapper;
import au.com.royalpay.payment.manage.mappers.log.ClearingDetailAnalysisMapper;
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.log.LogSettleMailMapper;
import au.com.royalpay.payment.manage.mappers.payment.AustracDataMapper;
import au.com.royalpay.payment.manage.mappers.payment.OrderMapper;
import au.com.royalpay.payment.manage.mappers.payment.RefundAuditionMapper;
import au.com.royalpay.payment.manage.mappers.payment.RefundMapper;
import au.com.royalpay.payment.manage.mappers.payment.TransactionMapper;
import au.com.royalpay.payment.manage.mappers.system.*;
import au.com.royalpay.payment.manage.mappers.payment.*;
import au.com.royalpay.payment.manage.mappers.system.ClientAccountMapper;
import au.com.royalpay.payment.manage.mappers.system.ClientDeviceMapper;
import au.com.royalpay.payment.manage.mappers.system.CustomerMapper;
import au.com.royalpay.payment.manage.mappers.system.ManagerCustomerRelationAlipayMapper;
import au.com.royalpay.payment.manage.merchants.core.ClientManager;
import au.com.royalpay.payment.manage.organizations.core.OrgManager;
import au.com.royalpay.payment.manage.tradelog.beans.PreRefundQueryBean;
@ -33,13 +30,11 @@ import au.com.royalpay.payment.tools.permission.enums.PartnerRole;
import au.com.royalpay.payment.tools.utils.CurrencyAmountUtils;
import au.com.royalpay.payment.tools.utils.PageListUtils;
import au.com.royalpay.payment.tools.utils.TimeZoneUtils;
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 com.github.miemiedev.mybatis.paginator.domain.Paginator;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
@ -47,34 +42,25 @@ import net.sf.jasperreports.engine.JasperRunManager;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.export.JRXlsExporter;
import net.sf.jasperreports.engine.export.ooxml.JRXlsxExporter;
import net.sf.jasperreports.export.ExporterInput;
import net.sf.jasperreports.export.OutputStreamExporterOutput;
import net.sf.jasperreports.export.SimpleExporterInput;
import net.sf.jasperreports.export.SimpleOutputStreamExporterOutput;
import net.sf.jasperreports.export.SimpleXlsxReportConfiguration;
import net.sf.jasperreports.export.*;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringEscapeUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.ui.Model;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
@ -87,13 +73,11 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import static au.com.royalpay.payment.manage.permission.utils.OrgCheckUtils.checkOrgPermission;
@ -118,8 +102,6 @@ public class TradeLogServiceImpl implements TradeLogService {
@Resource
private ClearingDetailMapper clearingDetailMapper;
@Resource
private ClearingDetailAnalysisMapper clearingDetailAnalysisMapper;
@Resource
private MpPaymentApi mpPaymentApi;
@Resource
private TransactionMapper transactionMapper;
@ -134,10 +116,9 @@ public class TradeLogServiceImpl implements TradeLogService {
@Resource
private ClientCustomersMapper clientCustomersMapper;
@Resource
LogSettleMailMapper logSettleMailMapper;
@Resource
private ClearingLogMapper clearingLogMapper;
@Resource
private StringRedisTemplate stringRedisTemplate;
@Resource
private OrgManager orgManager;
@ -1181,7 +1162,6 @@ public class TradeLogServiceImpl implements TradeLogService {
int count = 0;
for (JSONObject object : logs) {
if (object.getIntValue("clearing_status") == 2 && object.getIntValue("client_id") == client.getIntValue("client_id")) {
System.out.println(object.getString("order_id"));
JSONObject updation = new JSONObject();
updation.put("transaction_id", object.getString("transaction_id"));
updation.put("clearing_status", 0);
@ -1199,8 +1179,15 @@ public class TradeLogServiceImpl implements TradeLogService {
}
@Override
public PageList<JSONObject> listPreRefundClients(PreRefundQueryBean params) {
return transactionMapper.listPreRefundClients(new PageBounds(params.getPage(), params.getLimit()));
public JSONObject listPreRefundClients(PreRefundQueryBean params) {
String preRefundDataStr = stringRedisTemplate.boundValueOps("payment:pre_refund_data").get();
if (StringUtils.isEmpty(preRefundDataStr)) {
JSONObject preRefundData = PageListUtils.buildPageListResult(transactionMapper.listPreRefundClients(new PageBounds(params.getPage(), params.getLimit())));
stringRedisTemplate.boundValueOps("payment:pre_refund_data").set(preRefundData.toJSONString(), 1, TimeUnit.HOURS);
return preRefundData;
} else {
return JSONObject.parseObject(preRefundDataStr);
}
}
@Override

@ -407,8 +407,8 @@
from
statistics_customer_order ss
<where>
<if test="begin!=null">and s.date &gt;= #{begin}</if>
<if test="end!=null">and s.date &lt; #{end}</if>
<if test="begin!=null">and ss.date &gt;= #{begin}</if>
<if test="end!=null">and ss.date &lt; #{end}</if>
</where>
) s ON c.client_id = s.client_id

@ -27,6 +27,7 @@
d.total_transaction,
d.prize_value,
d.coefficient,
d.royal_surcharge,
d.channel
FROM
financial_bd_prize_detail d

@ -2,7 +2,6 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="au.com.royalpay.payment.manage.mappers.system.ClearingDistributedSurchargeMapper">
<select id="getMonthDetailByClientId" resultType="com.alibaba.fastjson.JSONObject">
<![CDATA[
SELECT d.client_id,
c.client_moniker,
c.company_name,
@ -13,37 +12,30 @@
FROM log_clearing_distributed_surcharge d
INNER JOIN sys_clients c ON c.client_id = d.client_id
WHERE d.create_time >= #{datefrom}
AND d.create_time < #{dateto}
AND #{dateto} > d.create_time
AND c.is_valid = 1
GROUP BY d.client_id
]]>
</select>
<select id="findTransactions" resultType="com.alibaba.fastjson.JSONObject">
<![CDATA[
SELECT *
FROM log_clearing_distributed_surcharge
WHERE client_id = #{client_id}
ORDER BY create_time DESC
]]>
</select>
<select id="findTransactionsByDate" resultType="com.alibaba.fastjson.JSONObject">
<![CDATA[
SELECT *
<select id="findSurchargeTransactionsByDetailId" resultType="com.alibaba.fastjson.JSONObject">
SELECT client_id,clearing_detail_id, settle_date,total_surcharge,tax_amount, type, amount,create_time,operation,remark
FROM log_clearing_distributed_surcharge
WHERE client_id = #{client_id}
AND year(create_time) = #{year}
AND month(create_time) = #{month}
ORDER BY create_time DESC
]]>
AND bill_id = #{detailId}
ORDER BY create_time
DESC
</select>
<select id="listUnClearedByMonth" resultType="com.alibaba.fastjson.JSONObject">
<![CDATA[
select d.*
from log_clearing_distributed_surcharge d
where d.bill_id is null
and d.create_time < #{dateto}
]]>
and #{dateto} > d.create_time
</select>
</mapper>

@ -2,37 +2,35 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="au.com.royalpay.payment.manage.mappers.system.FinancialSurchargeAccountDetailMapper">
<select id="findDetailsByMonth" resultType="com.alibaba.fastjson.JSONObject">
<![CDATA[
SELECT d.*,c.client_moniker,c.short_name,c.company_name
FROM financial_surcharge_account_detail d INNER JOIN sys_clients c ON c.client_id=d.client_id
WHERE d.settle_month = #{settle_month}
]]>
</select>
<select id="findDetailsByClientId" resultType="com.alibaba.fastjson.JSONObject">
<![CDATA[
SELECT d.*,c.client_moniker,c.short_name,c.company_name
FROM financial_surcharge_account_detail d INNER JOIN sys_clients c ON c.client_id=d.client_id
WHERE d.client_id = #{client_id} ORDER BY create_time desc
]]>
</select>
<select id="listSettlementDatesInMonth" resultType="com.alibaba.fastjson.JSONObject">
<![CDATA[
SELECT d.*,c.client_moniker,c.short_name,c.company_name,s.balance
FROM financial_surcharge_account_detail d INNER JOIN sys_clients c ON c.client_id=d.client_id
LEFT JOIN sys_clients_surcharge_accounts s ON s.client_id = d.client_id
WHERE
d.settle_month= #{month}
ORDER BY s.balance ASC
]]>
SELECT fsad.detail_id,
fsad.settle_month,
fsad.total_surcharge,
fsad.credit_amount,
fsad.debit_amount,
sc.client_moniker,
sc.short_name,
sc.company_name
FROM financial_surcharge_account_detail fsad,
sys_clients sc
WHERE fsad.client_id = sc.client_id
AND fsad.settle_month = #{month}
</select>
<select id="listSettlementDatesByClientId" resultType="com.alibaba.fastjson.JSONObject">
<![CDATA[
SELECT d.*,c.client_moniker,c.short_name,c.company_name,s.balance
FROM financial_surcharge_account_detail d INNER JOIN sys_clients c ON c.client_id=d.client_id
LEFT JOIN sys_clients_surcharge_accounts s ON s.client_id = d.client_id
WHERE
s.client_id = #{client_id}
ORDER BY s.create_time DESC
]]>
</select>
</mapper>

@ -1,110 +1,182 @@
<html xmlns:th="http://www.thymeleaf.org" lang="zh">
<h4>Dear <span th:text="${short_name}"></span> :</h4>
<p>I'm happy to let you know that your RoyalPay Cross-border Payment account has been set up.<br>
<div style="margin-left: 1rem;margin-right: 1rem;margin-top: 2rem;margin-bottom: 2rem">
<h4 style="font-family: Avenir-Heavy;font-size: 2rem;color: #000000;letter-spacing: 0;">Dear <span
th:text="${short_name}"></span> :</h4>
<p style="font-family: Avenir-Light;font-size: 1rem;color: #2A2A2A;letter-spacing: 0;">I'm happy to let you know
that your RoyalPay Cross-border Payment account has been set up.<br>
很高兴通知您贵司RoyalPay跨境全支付已经开通</p>
<p>Please kindly log on the website below to manage your accounts and transactions:<br>
<p style="font-family: Avenir-Light;font-size: 1rem;color: #2A2A2A;letter-spacing: 0;">Please kindly log on the
website below to manage your accounts and transactions:<br>
请登录这个网站查询管理所有交易</p>
<table style="border: 1px solid #333;width: 100%">
<tbody>
<tr>
<td colspan="3" align="center">
Log on website:<a href="https://mpay.royalpay.com.au">https://mpay.royalpay.com.au/</a>
</td>
</tr>
<tr>
<th></th>
<th>Account Name</th>
<th>p/w</th>
</tr>
<tr>
<th>Manager Account</th>
<td align="center" th:text="${username}"></td>
<td align="center" th:text="${password}"></td>
</tr>
</tbody>
</table>
<ul>
<div style="background-image: linear-gradient(-177deg, #FFF7ED 0%, #FFECD7 100%);width: 100%;">
<div style="display: flex;justify-content: center;font-family: Avenir-Light;font-size: 2rem;color: #FF6600;letter-spacing: 0;padding: 1rem">
Manager Account
</div>
<div style="display: flex;justify-content: space-around;padding: 1rem">
<div>
<div style="display: inline;font-family: Avenir-Heavy;font-size: 1rem;color: #9A948F;letter-spacing: 0;">
Account Name:
</div>
<div th:text="${username}"
style="display: inline; font-family: Avenir-Heavy;font-size: 1rem;color: #000000;letter-spacing: 0;">
</div>
<div style="margin-bottom: 2rem;margin-top: 2rem;">
<div style="display: inline;font-family: Avenir-Heavy;font-size: 1rem;color: #9A948F;letter-spacing: 0;">
Log on website:
</div>
<div style="display: inline"><a href="https://mpay.royalpay.com.au"
style="color: #FF700F;font-family: Avenir-Light;font-size: 1rem;letter-spacing: 0;">https://mpay.royalpay.com.au/</a>
</div>
</div>
</div>
<div>
<div style="display: inline;font-family: Avenir-Heavy;font-size: 1rem;color: #9A948F;letter-spacing: 0;">
p/w:
</div>
<div th:text="${password}"
style="display: inline; font-family: Avenir-Heavy;font-size: 1rem;color: #000000;letter-spacing: 0;">
</div>
</div>
</div>
</div>
<div style="font-family: Avenir-Heavy;font-size: 2rem;color: #000000;letter-spacing: 0; margin-top: 1rem;">
attention
</div>
<ul style="font-family: Avenir-Light;font-size: 1rem;color: #2A2A2A;letter-spacing: 0;">
<li>The password can be changed any time when you login. 您登陆后可以任意修改密码</li>
<li>It's recommended to change your password as soon as first login. 建议首次登陆后就修改您的密码</li>
<li>You can set up different accounts for the staff. (At the category:"Accounts")
您可以为您的员工配置其他账号在Accounts菜单内
</li>
</ul>
<p>Please find the User Guide here :<a
href="https://www.royalpay.com.au/downloads/royalpay_user_guide.pdf" target="_blank">User
Guide for PC</a> or
<a
href="https://help.royalpay.com.au/iphone/app_manual_v1.pdf" target="_blank">User
<div style="margin-top: 1rem">
<div style="display: inline">Please find the User Guide here :</div>
<div style="display: inline;font-family: Avenir-Light;font-size: 1rem;color: #FF6600;letter-spacing: 0;text-decoration: underline">
<a style="color: #FF6600" href="https://www.royalpay.com.au/downloads/royalpay_user_guide.pdf"
target="_blank">User
Guide for PC</a>
</div>
<div style="display: inline">or</div>
<div style="display: inline;font-family: Avenir-Light;font-size: 1rem;color: #FF6600;letter-spacing: 0;text-decoration: underline">
<a style="color: #FF6600;" href="https://help.royalpay.com.au/iphone/app_manual_v1.pdf" target="_blank">User
Guide for APP</a>
</p>
<p>您可以点击链接下载用户手册:<a href="https://www.royalpay.com.au/downloads/royalpay_user_guide.pdf"
target="_blank">PC用户手册</a>
<a href="https://help.royalpay.com.au/iphone/app_manual_v1.pdf"
</div>
</div>
<div style="margin-top: 1rem">
<div style="display: inline">您可以点击链接下载用户手册 :</div>
<div style="display: inline;font-family: Avenir-Light;font-size: 1rem;color: #FF6600;letter-spacing: 0;text-decoration: underline
"><a style="color: #FF6600" href="https://www.royalpay.com.au/downloads/royalpay_user_guide.pdf"
target="_blank">PC用户手册</a>
</div>
<div style="display: inline"></div>
<div style="display: inline;font-family: Avenir-Light;font-size: 1rem;color: #FF6600;letter-spacing: 0;text-decoration: underline
"><a style="color: #FF6600" href="https://help.royalpay.com.au/iphone/app_manual_v1.pdf"
target="_blank">APP用户手册</a>
</p>
</div>
</div>
<div style="margin-top: 1rem;margin-bottom: 1rem;font-family: Avenir-Light;font-size: 1rem;color: #4A4A4A;letter-spacing: 0;">
<div style="display: inline;font-family: Avenir-Light;font-size: 1rem;color: #4A4A4A;letter-spacing: 0;">(If
you
cannot open the link above, you can copy and paste this url to your
browser.如果您无法点击上面的链接可以复制当前url到浏览器地址栏
</div>
<div style="display: inline"><b style="color: #FF6600;">https://www.royalpay.com.au/downloads/royalpay_user_guide.pdf</b>
</div>
<div style="display: inline">)</div>
</div>
<div style="width: 100%;height: 0.1rem;background: #F9E6D8;margin-top: 2rem;margin-bottom: 2rem;"></div>
<p>(If you cannot open the link above, you can copy and paste this url to your browser.
如果您无法点击上面的链接可以复制当前url到浏览器地址栏
<b>https://www.royalpay.com.au/downloads/royalpay_user_guide.pdf</b>)</p>
<hr>
<p>You can search "<a
<p style="font-family: Avenir-Light;font-size: 1rem;color: #2A2A2A;letter-spacing: 0;">You can search "<a
style="color: #FF6600;text-decoration: none"
href="https://itunes.apple.com/app/royalpay/id1049566852?l=en&mt=8">RoyalPay</a>" in APP
Store to download APP for IOSwhich helps check your payment receiving records.</p>
<p>您可以在APP Store里搜索"RoyalPay"下载royalpay的app来进行收款和接收到账提醒等。</p>
<p><img src="https://mpay.royalpay.com.au/static/images/app_guide.png"> <br></p>
<hr>
<p>Online RoyalPay Cross-border Payment is also available! The development of the document (API) is
here.</p>
<p>如需接入网站支付系统可将下方API链接及授权信息发给IT团队</p>
<p style="background: #e0e0e0">
Chinse version:<br>
<a href="https://mpay.royalpay.com.au/docs/cn/">https://mpay.royalpay.com.au/docs/cn/</a><br><br>
<p style="font-family: PingFang-SC-Medium;font-size: 1rem;color: #000000;letter-spacing: 0;">
您可以在APP Store里搜索"<a style="color: #FF6600;text-decoration: none"
href="https://itunes.apple.com/app/royalpay/id1049566852?l=en&mt=8">RoyalPay</a>"下载royalpay的app来进行收款和接收到账提醒等。
</p>
<p><img style="width: 100%" src="https://mpay.royalpay.com.au/static/images/App_banner.png"> <br>
</p>
English version:<br>
<a href="https://mpay.royalpay.com.au/docs/en/">https://mpay.royalpay.com.au/docs/en/</a><br><br>
<div style="width: 100%;height: 0.1rem;background: #F9E6D8;margin-top: 2rem;margin-bottom: 2rem;"></div>
<span th:text="'Partner Code:'+${client_moniker}"></span><br>
<p style="font-family: Avenir-Light;font-size: 1rem;color: #2A2A2A;letter-spacing: 0;">Online RoyalPay
Cross-border
Payment is also available! The development of the document (API) is
here.</p>
<p style="font-family: Avenir-Light;font-size: 1rem;color: #2A2A2A;letter-spacing: 0;">
如需接入网站支付系统可将下方API链接及授权信息发给IT团队</p>
<div style="background: #F4F4F4;width: 100%;">
<div style="font-family: Avenir-Heavy;font-size: 1rem;color: #2A2A2A;letter-spacing: 0;padding-left: 2rem;padding-top: 2rem">
Chinse version:
</div>
<div style="font-family: Avenir-Light;font-size: 1rem;color: #002A00;letter-spacing: 0;padding-left: 2rem;">
<a style="color: #FF6600"
href="https://mpay.royalpay.com.au/docs/cn/">https://mpay.royalpay.com.au/docs/cn/</a>
</div>
<div style="font-family: Avenir-Heavy;font-size: 1rem;color: #2A2A2A;letter-spacing: 0;padding-left: 2rem;padding-top: 2rem">
English version:
</div>
<div style="font-family: Avenir-Light;font-size: 1rem;color: #002A00;letter-spacing: 0;padding-left: 2rem;">
<a style="color: #FF6600"
href="https://mpay.royalpay.com.au/docs/en/">https://mpay.royalpay.com.au/docs/en/</a>
</div>
<div style="font-family: Avenir-Heavy;font-size: 1rem;color: #2A2A2A;letter-spacing: 0;padding-left: 2rem;padding-top: 2rem">
<span th:text="'Partner Code:'+${client_moniker}"></span>
</div>
<div style="font-family: Avenir-Heavy;font-size: 1rem;color: #2A2A2A;letter-spacing: 0;padding-left: 2rem;padding-bottom: 2rem">
<span th:text="'Credential Code:'+${credential_code}"></span>
</p>
</div>
</div>
<p>
Please contact us via any way displaying below if you have any questions. Thank you for choosing
RoyalPay.<br>
<div style="font-family: Avenir-Light;font-size: 1rem;color: #2A2A2A;letter-spacing: 0;margin-top: 1rem;margin-bottom: 1rem">
Please
contact us via any
way displaying below if you have any questions. Thank you for choosing
RoyalPay.
</div>
<div style="font-family: Avenir-Light;font-size: 1rem;color: #2A2A2A;letter-spacing: 0;margin-top: 1rem;margin-bottom: 1rem">
十分感谢您对RoyalPay皇家支付的信任和支持。如果您有任何问题随时可以按以下方式与我们联系。谢谢
</p>
<div style="background: #d0d0d0" th:if="${#lists.size(bds)>0}">
<h4>
Your dedicated account manager<br>
您的专属客户经理
</h4>
<p th:each="bd : ${bds}">
<span th:text="${bd.display_name}"></span><br>
Email:<a href="mailto:$bd.email" th:utext="${bd.email}"></a><br>
<span th:text="${bd.phone}"></span><br>
<span th:if="${bd['wechat']!=null} and ${bd['wechat']!=''}" th:text="${bd.wechat}"></span>
</p>
</div>
<hr>
<h4>Best Regards</h4>
<p>
<img style="width: 120px;height: 120px"
src="https://mpay.royalpay.com.au/static/images/logo_new.jpg"> <br>
Contact Us<br>
Email:<br>
<a href="mailto:info@royalpay.com.au">info@royalpay.com.au</a> <br>
Tel:<br>
1300 10 77 50<br>
<br>
Service WeChat Account:<br>
<div style="width: 100%;height: 0.2rem;background: #FF6600;margin-top: 2rem;margin-bottom: 2rem;"></div>
<h4 style="font-family: Avenir-Heavy;font-size: 2rem;color: #000000;letter-spacing: 0;">Best Regards</h4>
<div style="display: flex;justify-content: center;">
<img style="width: 10rem;height: 7.5rem"
src="https://mpay.royalpay.com.au/static/images/logo_light.png">
</div>
<div style="display: flex;justify-content: space-around">
<div style="font-family: Avenir-Medium;font-size: 1rem;color: #888888;">
<div style="">Email:<br/><a style="color: #888888;text-decoration: none" href="mailto:info@royalpay.com.au">info@royalpay.com.au</a></div>
<div style="margin-top: 1rem;">Tel:<br/>1300 10 77 50</div>
<div style="margin-top: 1rem;">Level 14, 383 Kent Street, Sydney NSW 2000</div>
<div style="margin-top: 1rem;">Tunnel Show Pty Ltd trading as RoyalPay</div>
</div>
<div style="font-family: Avenir-Medium;font-size: 1rem;color: #888888;">
<div>
<div style="display: inline;">Service WeChat Account:</div>
<br/>
<img src="https://mpay.royalpay.com.au/static/images/customer_service.jpg"
style="width: 60px"><br>
Level 14, 383 Kent Street, Sydney NSW 2000<br>
<br>
Level 11, 15 William Street, Melbourne VIC 3000
</p>
<p>Tunnel Show Pty Ltd trading as RoyalPay<br>
Representative of AFSL licensee 448066
</p>
style="width: 3rem;height: 3rem">
</div>
<div style="margin-top: 2rem;">Level 11, 15 William Street, Melbourne VIC 3000</div>
<div style="margin-top: 1rem;">Representative of AFSL licensee 448066</div>
</div>
</div>
<div style="width: 100%;height: 0.1rem;background: #F9E6D8;margin-top: 2rem;margin-bottom: 2rem;"></div>
</div>
</html>

@ -1,5 +1,5 @@
<!DOCTYPE html>
<html>
<html style="height: 100%;">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
@ -30,7 +30,7 @@
<!-- Theme style -->
<link rel="stylesheet" href="./static/lib/dist/css/AdminLTE.min.css">
<link rel="stylesheet" href="./static/css/main.css">
<link rel="stylesheet" href="./static/css/login.css">
<!--[if lt IE 9]>
@ -46,7 +46,36 @@
a:link {
color: #08c;
}
@media (min-width: 768px) {
.qrcode-target-show {
background-position: -201px -199px;
}
.qrcode-target-hide {
background-position: -260px -260px;
}
.qrcode-target {
/*position: absolute;*/
width: 60px;
height: 80px;
margin-left: 93%;
margin-top: 0%;
margin-bottom: -8%;
display: block;
top: 0;
right: 0;
_right: 1px;
background-image: url(https://file.royalpay.com.au/open/2017/08/24/1503560419337_eiPHQHQRxGymVPaRHKCPndIO87zRWQ.png);
background-repeat: no-repeat;
cursor: pointer;
z-index: 101;
-webkit-transition: background-position .2s cubic-bezier(0.25, .5, .5, .9);
-moz-transition: background-position .2s cubic-bezier(0.25, .5, .5, .9);
transition: background-position .2s cubic-bezier(0.25, .5, .5, .9);
}
}
@media (max-width: 768px) {
.qrcode-target-show {
background-position: -201px -199px;
}
@ -60,8 +89,8 @@
width: 60px;
height: 60px;
margin-left: 87%;
margin-top: -6%;
margin-bottom: -6%;
margin-top: -7%;
margin-bottom: -8%;
display: block;
top: 0;
right: 0;
@ -74,6 +103,9 @@
-moz-transition: background-position .2s cubic-bezier(0.25, .5, .5, .9);
transition: background-position .2s cubic-bezier(0.25, .5, .5, .9);
}
}
</style>
</head>
<body class="hold-transition login-page login-page-bg">
@ -121,44 +153,44 @@
</div>
</div>
<div class="login-box login-box-right divloginbox">
<div class="login-box-right">
<!-- /.login-logo -->
<div class="login-box-body login-box-bg">
<div class="login-container login-box-bg">
<a href="#" class="qrcode-target qrcode-target-show" id="app-btn" title="扫码登录" seed="authcenter-qrshow"></a>
<p style="text-align: center;"><img src="static/images/rp_logo_vertical.svg"
style="width: 80%;margin-top: -15%;margin-bottom: -10%;"></p>
<p style="text-align: center;"><img src="static/images/rp_login_logo.png"
style="width: 18%;margin-top: 14.1%"></p>
<p style="text-align: center;font-size:20px;">Easy BusinessEasy Payment</p>
<div id="qrdiv" hidden style="width: 70%;margin-left: 13%;">
<p class="ad">Easy BusinessEasy Payment</p>
<div id="qrdiv" hidden class="qrdiv">
<img style="width: 100%" id="qrimgdev">
<span style="margin-left: 13%">打开RoyalPay App扫码登录</span>
<span>打开RoyalPay App扫码登录</span>
</div>
<form action="" method="post" id="loginForm" visible>
<form action="" method="post" id="loginForm" visible class="form">
<div class="form-group has-feedback">
<input type="text" id="loginid-input" class="form-control" placeholder="Login ID">
<span class="glyphicon glyphicon-user form-control-feedback"></span>
<input type="text" id="loginid-input" class="form-control login-info" placeholder="Login ID">
<!--<span class="glyphicon glyphicon-user form-control-feedback"></span>-->
</div>
<div class="form-group has-feedback">
<input type="password" id="pwd-input" class="form-control" placeholder="Password">
<span class="glyphicon glyphicon-lock form-control-feedback"></span>
<input type="password" id="pwd-input" class="form-control login-info" placeholder="Password">
<!--<span class="glyphicon glyphicon-lock form-control-feedback"></span>-->
</div>
<!--<span style="padding-left: 70%;font-size: smaller" id="forgetPassword">Forgot Password</span>-->
<!--<br/>-->
<div class="row">
<div class="form-group col-xs-12">
<input type="text" name="verifyCode" class="form-control" style="width: 70%;display: inline"
<input type="text" name="verifyCode" class="form-control login-info" style="width: 70%;display: inline"
id="verifyCode" placeholder="Verification Code">
<img style="width:30%;display:inline;height: 34px;float: right" id="kaptcha"
<img class="captcha" id="kaptcha"
src="/global/userstatus/captcha-login"
title="点击更换"/>
</div>
<!-- /.col -->
<div class="col-xs-12 margin-bottom">
<button type="button" id="login-btn" style="background-color: #f06010"
class="btn btn-warning btn-block btn-flat">Sign In
<div class="col-xs-12 login-submit-margin">
<button type="button" id="login-btn"
class="btn btn-warning btn-block btn-flat login-submit">Sign In
</button>
</div>
<div class="col-xs-12" id="wechat-btn-div" hidden>
@ -166,33 +198,20 @@
<i class="fa fa-wechat"></i> WeChat Sign In
</button>
</div>
<a href="#" id="forgetPassword-btn">I forgot my password</a>
<a href="#" id="forgetPassword-btn" class="forget">I forgot my password</a>
</div>
</form>
<!--<div tabindex="-1" role="dialog" class="modal fade ng-isolate-scope in" style="z-index: 1050; display: none;"-->
<!--id="qrmodal">-->
<!--<div class="modal-dialog modal-sm">-->
<!--<div class="modal-content" uib-modal-transclude="">-->
<!--<div style="width: 100%;padding: 10px;" class="ng-scope">-->
<!--Use Royalpay App Scan<br>-->
<!--<img style="width: 100%" id="qrimg">-->
<!--</div>-->
<!--</div>-->
<!--</div>-->
<!--</div>-->
<div class="row">
<div class="login-submit-margin">
<div class="col-sm-12 download-app">Download Royalpay App:
&nbsp;&nbsp;
<a href="https://itunes.apple.com/cn/app/royalpay/id1049566852?l=en&mt=8"><img src="/static/images/Bitmap.png"></a>
<a href="https://royalpay-1256684202.cos.ap-chengdu.myqcloud.com/royalpay_release_2.1.3_20190420_google.apk"><img src="/static/images/Bitmap1.png"></a></div>
<!--<div class="col-sm-6">-->
<!---->
<!-- /* border-radius: 0; */
box-shadow: none;
border-color: #d2d6de;
height: 34px;
padding: 6px 12px;
font-size: 14px;
line-height: 1.42857143;
color: #555;
/* background-color: #fff; */
/* background-image: none; */
border: 1px solid #ccc;-->
<!--</div>-->
</div>
</div>
</div>
<!-- /.login-box-body -->
</div>

@ -0,0 +1,374 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link rel="apple-touch-icon" sizes="57x57" href="ico/apple-icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="ico/apple-icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="ico/apple-icon-72x72.png">
<link rel="apple-touch-icon" sizes="76x76" href="ico/apple-icon-76x76.png">
<link rel="apple-touch-icon" sizes="114x114" href="ico/apple-icon-114x114.png">
<link rel="apple-touch-icon" sizes="120x120" href="ico/apple-icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="ico/apple-icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="ico/apple-icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="ico/apple-icon-180x180.png">
<link rel="icon" type="image/png" sizes="192x192" href="ico/android-icon-192x192.png">
<link rel="icon" type="image/png" sizes="32x32" href="ico/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="96x96" href="ico/favicon-96x96.png">
<link rel="icon" type="image/png" sizes="16x16" href="ico/favicon-16x16.png">
<link rel="manifest" href="ico/manifest.json">
<meta name="msapplication-TileColor" content="#ffffff">
<meta name="msapplication-TileImage" content="/ms-icon-144x144.png">
<meta name="theme-color" content="#ffffff">
<title>RoyalPay | Sign in</title>
<!-- Tell the browser to be responsive to screen width -->
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
<!-- Bootstrap 3.3.5 -->
<link href="static/lib/bootstrap/css/bootstrap.min.css" rel="stylesheet">
<!-- Font Awesome -->
<link href="static/lib/font-awesome-4.6.3/css/font-awesome.min.css" rel="stylesheet">
<!-- Theme style -->
<link rel="stylesheet" href="./static/lib/dist/css/AdminLTE.min.css">
<link rel="stylesheet" href="./static/css/main.css">
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
<style>
a:hover {
color: #08c;
text-decoration: underline;
}
a:link {
color: #08c;
}
.qrcode-target-show {
background-position: -201px -199px;
}
.qrcode-target-hide {
background-position: -260px -260px;
}
.qrcode-target {
/*position: absolute;*/
width: 60px;
height: 60px;
margin-left: 87%;
margin-top: -6%;
margin-bottom: -6%;
display: block;
top: 0;
right: 0;
_right: 1px;
background-image: url(https://file.royalpay.com.au/open/2017/08/24/1503560419337_eiPHQHQRxGymVPaRHKCPndIO87zRWQ.png);
background-repeat: no-repeat;
cursor: pointer;
z-index: 101;
-webkit-transition: background-position .2s cubic-bezier(0.25, .5, .5, .9);
-moz-transition: background-position .2s cubic-bezier(0.25, .5, .5, .9);
transition: background-position .2s cubic-bezier(0.25, .5, .5, .9);
}
</style>
</head>
<body class="hold-transition login-page login-page-bg">
<div tabindex="-100" role="dialog" class="modal fade ng-isolate-scope in" style="z-index: 1055; display: none;"
id="findPassword">
<div class="modal-dialog modal-sm">
<div class="modal-content" uib-modal-transclude="">
<div style="width: 100%;padding: 10px;" class="ng-scope">
<p class="login-box-msg">Reset Password</p>
<form action="" method="post">
<div class="form-group has-feedback">
<input type="text" id="partner_code" class="form-control" placeholder="Partner Code">
<span class="glyphicon glyphicon-user form-control-feedback"></span>
</div>
<div class="row">
<div class="form-group col-xs-12">
<input type="text" name="verifyCode" class="form-control" style="width: 70%;display: inline"
id="email—verifyCode" placeholder="Verification Code">
<img style="width:30%;display:inline;height: 34px;float: right" id="email-kaptcha"
src="/global/userstatus/captcha-login"
title="点击更换"/>
</div>
<div class="col-xs-6">
<div class="checkbox icheck">
<label class="" style="font-size: smaller">
Please enter your partner code
</label>
</div>
</div>
<!-- /.col -->
<div class="col-xs-6">
<button type="button" id="submitEmail-btn" class="btn btn-primary btn-flat col-xs-6">
Submit
</button>
<button type="button" id="cancel-btn" class="btn btn-default btn-flat col-xs-6">Cancel
</button>
</div>
<!-- /.col -->
</div>
</form>
</div>
</div>
</div>
</div>
<div class="login-box login-box-right divloginbox">
<!-- /.login-logo -->
<div class="login-box-body login-box-bg">
<a href="#" class="qrcode-target qrcode-target-show" id="app-btn" title="扫码登录" seed="authcenter-qrshow"></a>
<p style="text-align: center;"><img src="static/images/rp_logo_vertical.svg"
style="width: 80%;margin-top: -15%;margin-bottom: -10%;"></p>
<p style="text-align: center;font-size:20px;">Easy BusinessEasy Payment</p>
<div id="qrdiv" hidden style="width: 70%;margin-left: 13%;">
<img style="width: 100%" id="qrimgdev">
<span style="margin-left: 13%">打开RoyalPay App扫码登录</span>
</div>
<form action="" method="post" id="loginForm" visible>
<div class="form-group has-feedback">
<input type="text" id="loginid-input" class="form-control" placeholder="Login ID">
<span class="glyphicon glyphicon-user form-control-feedback"></span>
</div>
<div class="form-group has-feedback">
<input type="password" id="pwd-input" class="form-control" placeholder="Password">
<span class="glyphicon glyphicon-lock form-control-feedback"></span>
</div>
<!--<span style="padding-left: 70%;font-size: smaller" id="forgetPassword">Forgot Password</span>-->
<!--<br/>-->
<div class="row">
<div class="form-group col-xs-12">
<input type="text" name="verifyCode" class="form-control" style="width: 70%;display: inline"
id="verifyCode" placeholder="Verification Code">
<img style="width:30%;display:inline;height: 34px;float: right" id="kaptcha"
src="/global/userstatus/captcha-login"
title="点击更换"/>
</div>
<!-- /.col -->
<div class="col-xs-12 margin-bottom">
<button type="button" id="login-btn" style="background-color: #f06010"
class="btn btn-warning btn-block btn-flat">Sign In
</button>
</div>
<div class="col-xs-12" id="wechat-btn-div" hidden>
<button type="button" id="wechat-btn" style="background-color: #f06010" class="btn btn-warning btn-block btn-flat">
<i class="fa fa-wechat"></i> WeChat Sign In
</button>
</div>
<a href="#" id="forgetPassword-btn">I forgot my password</a>
</div>
</form>
<!--<div tabindex="-1" role="dialog" class="modal fade ng-isolate-scope in" style="z-index: 1050; display: none;"-->
<!--id="qrmodal">-->
<!--<div class="modal-dialog modal-sm">-->
<!--<div class="modal-content" uib-modal-transclude="">-->
<!--<div style="width: 100%;padding: 10px;" class="ng-scope">-->
<!--Use Royalpay App Scan<br>-->
<!--<img style="width: 100%" id="qrimg">-->
<!--</div>-->
<!--</div>-->
<!--</div>-->
<!--</div>-->
<!---->
<!-- /* border-radius: 0; */
box-shadow: none;
border-color: #d2d6de;
height: 34px;
padding: 6px 12px;
font-size: 14px;
line-height: 1.42857143;
color: #555;
/* background-color: #fff; */
/* background-image: none; */
border: 1px solid #ccc;-->
</div>
<!-- /.login-box-body -->
</div>
<!-- /.login-box -->
<!-- jQuery 2.1.4 -->
<script src="static/lib/jquery/jquery-2.1.4.min.js"></script>
<script src="static/lib/jquery/jquery.cookie.js"></script>
<!-- Bootstrap 3.3.5 -->
<script src="static/lib/bootstrap/js/bootstrap.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
if (window.console) {
var cons = console;
if (cons) {
cons.log("%c ", "padding:0px 300px;font-size:75px;background:url('https://file.royalpay.com.au/open/2017/08/24/1503558671611_yFZRCWzH7m3CVz2EJj2tu8jlmjS9PQ.png') no-repeat");
cons.log("%c温馨提示请不要调皮地在此粘贴执行任何内容这可能会导致您的账户受到攻击给您带来损失 ^_^'", " text-shadow: 0 1px 0 #ccc,0 2px 0 #c9c9c9,0 3px 0 #bbb,0 4px 0 #b9b9b9,0 5px 0 #aaa,0 6px 1px rgba(0,0,0,.1),0 0 5px rgba(0,0,0,.1),0 1px 3px rgba(0,0,0,.3),0 3px 5px rgba(0,0,0,.2),0 5px 10px rgba(0,0,0,.25),0 10px 10px rgba(0,0,0,.2),0 20px 20px rgba(0,0,0,.15);font-size:20px")
cons.log("做地球上最具互联网性、创新性、专业有爱的支付团队。 https://www.royalpay.com.au")
}
}
var ua = navigator.userAgent.toLowerCase();
if (ua.indexOf('micromessenger') >= 0) {
$('#wechat-btn-div').show();
$('#app-btn').hide();
$('#wechat-btn').click(function () {
location.href = '/global/userstatus/partner_signin_wechat';
});
}
function getUrlParam(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象
var r = window.location.search.substr(1).match(reg); //匹配目标参数
if (r != null) {
return unescape(r[2]);
} else {
return null; //返回参数值
}
}
$('input').keypress(function (evt) {
if (evt.keyCode == 13) {
$('#login-btn').click();
}
});
$('#verifyCode').focus(function () {
var expire = $.cookie('code_expire_time');
if(expire!=null && new Date(parseInt(expire))<new Date()){
$('#kaptcha').click();
}
});
$('#login-btn').click(function () {
var loginid = $('#loginid-input').val();
if (loginid == null || loginid.length == 0) {
alert('请填写账号');
return;
}
var pwd = $('#pwd-input').val();
if (pwd == null || pwd.length == 0) {
alert('请填写密码');
return;
}
var verifyCode = $('#verifyCode').val();
if (verifyCode == null || verifyCode.length == 0) {
alert('请填写验证码');
return;
}
$.ajax({
url: '/global/userstatus/partner_signin',
method: 'post',
data: JSON.stringify({loginId: loginid, password: pwd, verifyCode: verifyCode}),
contentType: 'application/json',
dataType: 'text',
success: function () {
var from = getUrlParam("f");
location.href = from ? decodeURIComponent(from) : 'index.html'
},
error: function (jqXHR) {
alert(JSON.parse(jqXHR.responseText).message);
$('#kaptcha').attr("src", "/global/userstatus/captcha-login?" + Math.floor(Math.random() * 100));
}
})
});
$('#kaptcha').click(function () {
$(this).attr("src", "/global/userstatus/captcha-login?" + Math.floor(Math.random() * 100));
});
$('#email-kaptcha').click(function () {
$(this).attr("src", "/global/userstatus/captcha-login?" + Math.floor(Math.random() * 100));
});
$('#app-btn').click(function () {
if ($('#qrdiv').is(":visible")) {
$('#app-btn').attr('class', 'qrcode-target qrcode-target-show');
$('#loginForm').show();
$('#qrdiv').hide();
return;
}
if ($('#qrdiv').is(":hidden")) {
$('#app-btn').attr('class', 'qrcode-target qrcode-target-hide');
getNewQRCode();
}
});
function getNewQRCode() {
$.ajax({
url: '/global/userstatus/partner_signin_app_qrcode',
method: 'get',
dataType: 'json',
success: function (data) {
$('#qrimgdev').attr('src', data.code_img);
$('#qrdiv').show();
$('#loginForm').hide();
setTimeout(function () {
checkQRStatus(data.code_id)
}, 2000);
},
error: function (jqXHR) {
alert(jqXHR.responseJSON.message);
}
})
}
function checkQRStatus(codeId) {
$.ajax({
url: '/global/userstatus/partner_signin_app_qrcode/' + codeId + '/check',
method: 'get',
success: function () {
location.href = '/index.html'
},
error: function () {
if ($('#qrdiv').is(":visible")) {
setTimeout(function () {
checkQRStatus(codeId)
}, 2000)
}
}
})
}
$('#forgetPassword-btn').click(function () {
// $('#findPassword').show();
location.href = 'forget_password.html'
});
$('#cancel-btn').click(function () {
$('#findPassword').hide();
});
$('#submitEmail-btn').click(function () {
var partner_code = $('#partner_code').val();
if (partner_code == null || partner_code.length == 0) {
alert('请填入商户编码');
return;
}
var verifyCode = $('#email—verifyCode').val();
if (verifyCode == null || verifyCode.length == 0) {
alert('请填写验证码');
return;
}
$.ajax({
url: '/global/userstatus/partner_forgetpassword',
method: 'post',
data: JSON.stringify({partner_code: partner_code, verifyCode: verifyCode}),
contentType: 'application/json',
dataType: 'text',
success: function () {
alert("Reset password email has send your");
$('#findPassword').hide();
},
error: function (jqXHR) {
alert(JSON.parse(jqXHR.responseText).message);
$('#email-kaptcha').attr("src", "/global/userstatus/captcha-login?" + Math.floor(Math.random() * 100));
}
})
})
})
</script>
</body>
</html>

@ -1,5 +1,5 @@
<!DOCTYPE html>
<html>
<html style="height: 100%;">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
@ -30,70 +30,158 @@
<!-- Theme style -->
<link rel="stylesheet" href="./static/lib/dist/css/AdminLTE.min.css">
<link rel="stylesheet" href="./static/css/main.css">
<link rel="stylesheet" href="./static/css/m_login.css">
<!-->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
<style>
@media (min-width: 768px) {
.qrcode-target-show {
background-position: -199px -199px;
}
.qrcode-target-hide {
background-position: -260px -260px;
}
.qrcode-target {
/*position: absolute;*/
width: 60px;
height: 80px;
margin-left: 96%;
margin-top: 0%;
margin-bottom: -8%;
display: block;
top: 0;
right: 0;
_right: 1px;
background-image: url(https://file.royalpay.com.au/open/2017/08/24/1503560419337_eiPHQHQRxGymVPaRHKCPndIO87zRWQ.png);
background-repeat: no-repeat;
cursor: pointer;
z-index: 101;
-webkit-transition: background-position .2s cubic-bezier(0.25, .5, .5, .9);
-moz-transition: background-position .2s cubic-bezier(0.25, .5, .5, .9);
transition: background-position .2s cubic-bezier(0.25, .5, .5, .9);
}
}
@media (max-width: 768px) {
.qrcode-target-show {
background-position: -201px -199px;
}
.qrcode-target-hide {
background-position: -260px -260px;
}
.qrcode-target {
/*position: absolute;*/
width: 60px;
height: 60px;
margin-left: 87%;
margin-top: -7%;
margin-bottom: -8%;
display: block;
top: 0;
right: 0;
_right: 1px;
background-image: url(https://file.royalpay.com.au/open/2017/08/24/1503560419337_eiPHQHQRxGymVPaRHKCPndIO87zRWQ.png);
background-repeat: no-repeat;
cursor: pointer;
z-index: 101;
-webkit-transition: background-position .2s cubic-bezier(0.25, .5, .5, .9);
-moz-transition: background-position .2s cubic-bezier(0.25, .5, .5, .9);
transition: background-position .2s cubic-bezier(0.25, .5, .5, .9);
}
}
</style>
</head>
<body class="hold-transition login-page login-page-bg">
<div tabindex="-1" role="dialog" class="modal fade ng-isolate-scope in" style="z-index: 1050; display: none;"
id="qrmodal">
<div class="modal-dialog modal-sm">
<div class="modal-content" uib-modal-transclude="">
<div style="width: 100%;padding: 10px;" class="ng-scope">
请使用微信扫描<br>
<img style="width: 100%" id="qrimg">
</div>
</div>
</div>
</div>
<div class="login-box login-box-right divloginbox">
<!--<div tabindex="-1" role="dialog" class="modal fade ng-isolate-scope in" style="z-index: 1050; display: none;"-->
<!--id="qrmodal">-->
<!--<div class="modal-dialog modal-sm">-->
<!--<div class="modal-content" uib-modal-transclude="">-->
<!--<div style="width: 100%;padding: 10px;" class="ng-scope">-->
<!--请使用微信扫描<br>-->
<!--<img style="width: 100%" id="qrimg">-->
<!--</div>-->
<!--</div>-->
<!--</div>-->
<!--</div>-->
<div class="row" style="text-align: center">
<a href="#" class="qrcode-target qrcode-target-show" id="app-btn" title="扫码登录" seed="authcenter-qrshow"></a>
<div class="login-container text-center">
<!-- /.login-logo -->
<div class="login-box-body login-box-bg">
<p style="text-align: center;"><img src="static/images/rp_logo_vertical.svg" style="width: 80%;margin-top: -15%;margin-bottom: -10%;"></p>
<div class="login-box-bg">
<div class="col-md-6">
<p style="text-align: center;"><img src="static/images/rp_login_logo.png" style="width: 40%;margin-top: 10%"></p>
<p style="text-align: center;font-size:20px;">Easy BusinessEasy Payment</p>
<p class="ad">Easy BusinessEasy Payment</p>
</div>
<form action="" method="post">
<div class="col-md-6">
<div id="qrdiv" hidden class="qrdiv">
<img style="width: 60%" id="qrimgdev"><br>
<span>请使用微信扫描</span>
</div>
<form action="" method="post" id="loginForm">
<div class="form-group has-feedback">
<input type="text" id="loginid-input" class="form-control" placeholder="账号">
<span class="glyphicon glyphicon-user form-control-feedback"></span>
<input type="text" id="loginid-input" class="form-control login-info" placeholder="Login ID">
<!--<span class="glyphicon glyphicon-user form-control-feedback"></span>-->
</div>
<div class="form-group has-feedback">
<input type="password" id="pwd-input" class="form-control" placeholder="密码">
<span class="glyphicon glyphicon-lock form-control-feedback"></span>
<input type="password" id="pwd-input" class="form-control login-info" placeholder="Password">
<!--<span class="glyphicon glyphicon-lock form-control-feedback"></span>-->
</div>
<div class="row">
<div class="form-group col-xs-12">
<input type="text" name="verifyCode" class="form-control" style="width: 70%;display: inline"
id="verifyCode" placeholder="验证码">
<input type="text" name="verifyCode" class="form-control login-info" style="width: 70%;display: inline"
id="verifyCode" placeholder="Verification Code">
<img style="width:30%;display:inline;height: 34px;float: right" id="kaptcha"
src="/global/userstatus/captcha-login"
title="点击更换"/>
</div>
<!-- /.col -->
<div class="col-xs-12 margin-bottom">
<button type="button" id="login-btn" style="background-color: #f06010" class="btn btn-warning btn-block btn-flat">Sign In</button>
<button type="button" id="login-btn" class="btn btn-info btn-block btn-flat login-submit">Sign In</button>
</div>
<div class="col-xs-12">
<button type="button" id="wechat-btn" style="background-color: #f06010" class="btn btn-warning btn-block btn-flat">
<div class="col-xs-12" hidden id="wechat-btn-div">
<button type="button" id="wechat-btn" class="btn btn-warning btn-block btn-flat">
<i class="fa fa-wechat"></i> WeChat Sign In
</button>
</div>
<!-- /.col -->
</div>
</form>
</div>
<div class="row">
<div class="login-submit-margin">
<div class="col-md-12 download-app">
Download Royalpay App:
&nbsp;&nbsp;
<a href="https://itunes.apple.com/cn/app/royalpay/id1049566852?l=en&mt=8"><img src="/static/images/Bitmap.png"></a>
<a href="https://royalpay-1256684202.cos.ap-chengdu.myqcloud.com/royalpay_release_2.1.3_20190420_google.apk"><img src="/static/images/Bitmap1.png"></a>
</div>
<!--<div class="col-sm-6">-->
<!---->
<!--</div>-->
</div>
</div>
</div>
<!-- /.login-box-body -->
</div>
</div>
<!-- /.login-box -->
<!-- jQuery 2.1.4 -->
@ -162,18 +250,37 @@
$(this).attr("src", "/global/userstatus/captcha-login?" + Math.floor(Math.random() * 100));
});
$('#wechat-btn').click(function () {
var ua = navigator.userAgent.toLowerCase();
if (ua.indexOf('micromessenger') >= 0) {
location.href = '/global/userstatus/manager_signin_wechat'
} else {
$('#wechat-btn-div').show();
$('#app-btn').hide();
$('#wechat-btn').click(function () {
location.href = '/global/userstatus/partner_signin_wechat';
});
}
$('#app-btn').click(function () {
if ($('#qrdiv').is(":visible")) {
$('#app-btn').attr('class', 'qrcode-target qrcode-target-show');
$('#loginForm').show();
$('#qrdiv').hide();
return;
}
if ($('#qrdiv').is(":hidden")) {
$('#app-btn').attr('class', 'qrcode-target qrcode-target-hide');
getNewQRCode();
}
});
function getNewQRCode() {
$.ajax({
url: '/global/userstatus/manager_signin_wechat_qrcode',
method: 'get',
dataType: 'json',
success: function (data) {
$('#qrmodal').find('img#qrimg').attr('src', data.code_img);
$('#qrmodal').show();
$('#qrimgdev').attr('src', data.code_img);
$('#qrdiv').show();
$('#loginForm').hide();
setTimeout(function () {
checkQRStatus(data.code_id)
}, 2000);
@ -183,6 +290,14 @@
}
})
}
$('#wechat-btn').click(function () {
var ua = navigator.userAgent.toLowerCase();
if (ua.indexOf('micromessenger') >= 0) {
location.href = '/global/userstatus/manager_signin_wechat'
} else {
getNewQRCode();
}
});
$('#qrmodal').click(function () {
$(this).hide()

@ -0,0 +1,208 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link rel="apple-touch-icon" sizes="57x57" href="ico/apple-icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="ico/apple-icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="ico/apple-icon-72x72.png">
<link rel="apple-touch-icon" sizes="76x76" href="ico/apple-icon-76x76.png">
<link rel="apple-touch-icon" sizes="114x114" href="ico/apple-icon-114x114.png">
<link rel="apple-touch-icon" sizes="120x120" href="ico/apple-icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="ico/apple-icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="ico/apple-icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="ico/apple-icon-180x180.png">
<link rel="icon" type="image/png" sizes="192x192" href="ico/android-icon-192x192.png">
<link rel="icon" type="image/png" sizes="32x32" href="ico/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="96x96" href="ico/favicon-96x96.png">
<link rel="icon" type="image/png" sizes="16x16" href="ico/favicon-16x16.png">
<link rel="manifest" href="ico/manifest.json">
<meta name="msapplication-TileColor" content="#ffffff">
<meta name="msapplication-TileImage" content="/ms-icon-144x144.png">
<meta name="theme-color" content="#ffffff">
<title>RoyalPay | 管理登录</title>
<!-- Tell the browser to be responsive to screen width -->
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
<!-- Bootstrap 3.3.5 -->
<link href="static/lib/bootstrap/css/bootstrap.min.css" rel="stylesheet">
<!-- Font Awesome -->
<link href="static/lib/font-awesome-4.6.3/css/font-awesome.min.css" rel="stylesheet">
<!-- Theme style -->
<link rel="stylesheet" href="./static/lib/dist/css/AdminLTE.min.css">
<link rel="stylesheet" href="./static/css/main.css">
<!-->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body class="hold-transition login-page login-page-bg">
<div tabindex="-1" role="dialog" class="modal fade ng-isolate-scope in" style="z-index: 1050; display: none;"
id="qrmodal">
<div class="modal-dialog modal-sm">
<div class="modal-content" uib-modal-transclude="">
<div style="width: 100%;padding: 10px;" class="ng-scope">
请使用微信扫描<br>
<img style="width: 100%" id="qrimg">
</div>
</div>
</div>
</div>
<div class="login-box login-box-right divloginbox">
<!-- /.login-logo -->
<div class="login-box-body login-box-bg">
<p style="text-align: center;"><img src="static/images/rp_logo_vertical.svg" style="width: 80%;margin-top: -15%;margin-bottom: -10%;"></p>
<p style="text-align: center;font-size:20px;">Easy BusinessEasy Payment</p>
<form action="" method="post">
<div class="form-group has-feedback">
<input type="text" id="loginid-input" class="form-control" placeholder="账号">
<span class="glyphicon glyphicon-user form-control-feedback"></span>
</div>
<div class="form-group has-feedback">
<input type="password" id="pwd-input" class="form-control" placeholder="密码">
<span class="glyphicon glyphicon-lock form-control-feedback"></span>
</div>
<div class="row">
<div class="form-group col-xs-12">
<input type="text" name="verifyCode" class="form-control" style="width: 70%;display: inline"
id="verifyCode" placeholder="验证码">
<img style="width:30%;display:inline;height: 34px;float: right" id="kaptcha"
src="/global/userstatus/captcha-login"
title="点击更换"/>
</div>
<!-- /.col -->
<div class="col-xs-12 margin-bottom">
<button type="button" id="login-btn" style="background-color: #f06010" class="btn btn-warning btn-block btn-flat">Sign In</button>
</div>
<div class="col-xs-12">
<button type="button" id="wechat-btn" style="background-color: #f06010" class="btn btn-warning btn-block btn-flat">
<i class="fa fa-wechat"></i> WeChat Sign In
</button>
</div>
<!-- /.col -->
</div>
</form>
</div>
<!-- /.login-box-body -->
</div>
<!-- /.login-box -->
<!-- jQuery 2.1.4 -->
<script src="static/lib/jquery/jquery-2.1.4.min.js"></script>
<script src="static/lib/jquery/jquery.cookie.js"></script>
<!-- Bootstrap 3.3.5 -->
<script src="static/lib/bootstrap/js/bootstrap.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
function getUrlParam(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象
var r = window.location.search.substr(1).match(reg); //匹配目标参数
if (r != null) {
return unescape(r[2]);
}else {
return null; //返回参数值
}
}
$('input').keypress(function (evt) {
if (evt.keyCode == 13) {
$('#login-btn').click();
}
});
$('#verifyCode').focus(function () {
var expire = $.cookie('code_expire_time');
if(expire!=null && new Date(parseInt(expire))<new Date()){
$('#kaptcha').click();
}
});
$('#login-btn').click(function () {
var loginid = $('#loginid-input').val();
if (loginid == null || loginid.length == 0) {
alert('请填写账号');
return;
}
var pwd = $('#pwd-input').val();
if (pwd == null || pwd.length == 0) {
alert('请填写密码');
return;
}
var verifyCode = $('#verifyCode').val();
if (verifyCode == null || verifyCode.length == 0) {
alert('请填写验证码');
return;
}
$.ajax({
url: '/global/userstatus/manager_signin',
method: 'post',
data: JSON.stringify({loginId: loginid, password: pwd, verifyCode: verifyCode}),
contentType: 'application/json',
dataType: 'text',
success: function () {
var from = getUrlParam("f");
location.href = from ? decodeURIComponent(from) : 'managev2.html'
},
error: function (jqXHR) {
alert(JSON.parse(jqXHR.responseText).message);
$('#kaptcha').attr("src", "/global/userstatus/captcha-login?" + Math.floor(Math.random() * 100));
}
})
});
$('#kaptcha').click(function () {
$(this).attr("src", "/global/userstatus/captcha-login?" + Math.floor(Math.random() * 100));
});
$('#wechat-btn').click(function () {
var ua = navigator.userAgent.toLowerCase();
if (ua.indexOf('micromessenger') >= 0) {
location.href = '/global/userstatus/manager_signin_wechat'
} else {
$.ajax({
url: '/global/userstatus/manager_signin_wechat_qrcode',
method: 'get',
dataType: 'json',
success: function (data) {
$('#qrmodal').find('img#qrimg').attr('src', data.code_img);
$('#qrmodal').show();
setTimeout(function () {
checkQRStatus(data.code_id)
}, 2000);
},
error: function (jqXHR) {
alert(jqXHR.responseJSON.message);
}
})
}
});
$('#qrmodal').click(function () {
$(this).hide()
});
function checkQRStatus(codeId) {
$.ajax({
url: '/global/userstatus/manager_signin_wechat_qrcode/' + codeId + '/check',
method: 'get',
success: function () {
location.href = '/managev2.html'
},
error: function () {
setTimeout(function () {
checkQRStatus(codeId)
}, 2000)
}
})
}
})
</script>
</body>
</html>

@ -605,7 +605,7 @@ margin-bottom: 10%;"/>
</li>
<li ui-sref-active="active" ng-if="('preRefund'|withModule)">
<a ui-sref="analysis_monitoring.pre_refund" ui-sref-opts="{reload:true}">
<i class="fa fa-tv"></i> <span>商户欠款|Pre Refund</span>
<i class="fa fa-tv"></i> <span>授信退款|Credit refund</span>
</a>
</li>
<li ui-sref-active="active">

@ -18,16 +18,6 @@
</ol>
</section>
<div class="content">
<!--<div class="row margin-bottom">
<div class="col-sm-12">
<button class="btn btn-danger" type="button" ui-sref=".rate_warnings">
<i class="fa fa-bell"></i> Rate Expire Warnings
</button>
<button class="btn btn-primary" type="button" ui-sref=".date_setting">
<i class="fa fa-cog"></i> Settlement Date Config
</button>
</div>
</div>-->
<div class="box box-warning">
<div class="box-header">Settlement Dates</div>
<div class="box-body">
@ -39,147 +29,5 @@
</div>
</div>
</div>
<div class="row">
<div class="col-sm-12">
<div class="box-solid">
<div class="box box-warning">
<div class="box-header">
<div class="row">
<div class="col-sm-12">
<div class="form-horizontal">
<div class="form-group col-sm-12">
<div class="form-inline">
<label class="control-label col-sm-2" for="sub-merchant-search">Partner
Code</label>
<div class="col-sm-10">
<input type="text" class="form-control"
id="sub-merchant-search"
ng-model="params.clientMoniker">
</div>
</div>
</div>
<div class="form-group col-xs-12 col-sm-12">
<label class="control-label col-xs-4 col-sm-2">Date Range</label>
<div class="col-sm-10">
<div class="form-control-static form-inline">
<div style="display: inline-block">
<input class="form-control" id="date-from-input"
ng-model="params.begin"
uib-datepicker-popup size="10" placeholder="From"
is-open="dateBegin.open" ng-click="dateBegin.open=true"
datepicker-options="{maxDate:params.end||today}">
</div>
~
<div style="display: inline-block">
<input class="form-control" id="date-to-input"
ng-model="params.end"
uib-datepicker-popup size="10" placeholder="To"
is-open="dateTo.open" ng-click="dateTo.open=true"
datepicker-options="{minDate:params.begin,maxDate:today}">
</div>
<div class="btn-group">
<a role="button" class="btn btn-default btn-sm"
ng-click="chooseToday()">Today</a>
</div>
<div class="btn-group">
<a role="button" class="btn btn-default btn-sm"
ng-click="chooseYesterday()">Yesterday</a>
</div>
<div class="btn-group">
<a role="button" class="btn btn-default btn-sm"
ng-click="chooseLast7Days()">Last 7 Days</a>
</div>
<div class="btn-group">
<a role="button" class="btn btn-default btn-sm"
ng-click="thisMonth()">This Month</a>
</div>
<div class="btn-group">
<a role="button" class="btn btn-default btn-sm"
ng-click="lastMonth()">Last Month</a>
</div>
<div uib-dropdown ng-if="orgs" class="btn-group">
<button id="single-button" type="button" class="btn btn-default"
uib-dropdown-toggle ng-disabled="disabled">
{{showOrg}} <span class="caret"></span>
</button>
<ul class="dropdown-menu" uib-dropdown-menu
aria-labelledby="single-button">
<li><a ng-click="chooseOrg('all')">All</a></li>
<li ng-repeat="org in orgs"><a ng-click="chooseOrg(org)">{{org.name}}</a>
</li>
</ul>
</div>
<button class="btn btn-success" type="button"
ng-click="loadClearingLogs()">
<i class="fa fa-search"></i>
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="box box-warning">
<div class="box-header">
<h3 class="box-title">
<span ng-if="clearing_logs.length">Total | Clearing Amount: {{analysis.total|currency:'AUD '}},
Transfer to Merchant: {{analysis.income|currency:'AUD '}}, Merchant Service Fee: {{analysis.fee|currency:'AUD '}}</span>
</h3>
</div>
<div class="box-body">
<div class="row cen col-sm-12">
<div class="table-responsive">
<table class="table table-bordered table-hover table-striped">
<thead>
<tr>
<th>Partner Name</th>
<th>Total Amount</th>
<th>Transfer to Merchant</th>
<th>Merchant Service Fee</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="log in clearing_logs">
<td ng-bind="log.short_name"></td>
<td ng-bind="log.total|currency:'AUD '"></td>
<td ng-bind="log.income|currency:'AUD '"></td>
<td ng-bind="log.fee|currency:'AUD '"></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="box-footer" ng-if="clearing_logs.length">
<uib-pagination class="pagination"
total-items="pagination.totalCount"
boundary-links="true"
ng-model="pagination.page"
items-per-page="pagination.limit"
max-size="10"
ng-change="loadClearingLogs()"
previous-text="&lsaquo;"
next-text="&rsaquo;"
first-text="&laquo;"
last-text="&raquo;"></uib-pagination>
<div class="row">
<div class="col-xs-12">Total Records:{{pagination.totalCount}};Total Pages:{{pagination.totalPages}}</div>
</div>
</div>
</div>
<div class="box box-warning">
<div class="box-header with-border">清算金额趋势</div>
<div class="box-body">
<div class="chart" echarts="clearingHistory" style="height: 300px"
ng-class="{nodata:clearingHistory.nodata}"></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>

@ -1,10 +1,10 @@
<section class="content-header">
<h1>Pre Refund</h1>
<h1>授信退款|Credit refund</h1>
<ol class="breadcrumb">
<li>
<i class="fa fa-list-alt"></i> Transaction
</li>
<li class="active">Pre Refund</li>
<li class="active">授信退款|Credit refund</li>
</ol>
</section>
<section class="content">
@ -14,19 +14,17 @@
<table class="table table-bordered table-hover table-striped">
<thead>
<tr>
<th>Partner</th>
<th>Amount</th>
<th>Last Refund Time</th>
<th>商户编码</th>
<th>欠费金额(AUD)</th>
<th>最后交易时间</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="log in log_risk" ng-class="{warning:trade.clearing_status==2}">
<td>
{{log.client_moniker}}
<tr ng-repeat="log in log_risk">
<td ng-bind="log.client_moniker">
</td>
<td>{{log.amount}}</td>
<td>{{log.transation_time}}</td>
<td ng-bind="log.amount"></td>
<td ng-bind="log.transation_time |date:'yyyy-MM-dd HH:mm:ss'"></td>
</tr>
</tbody>
</table>
@ -43,7 +41,9 @@
first-text="&laquo;"
last-text="&raquo;"></uib-pagination>
<div class="row">
<div class="col-xs-12">Total Records:{{pagination.totalCount}};Total Pages:{{pagination.totalPages}}</div>
<div class="col-xs-12">Total Records:{{pagination.totalCount}};Total
Pages:{{pagination.totalPages}}
</div>
</div>
</div>
</div>

@ -161,6 +161,7 @@
<th>Coefficient</th>
<th>BD Rate</th>
<th>Commission</th>
<th>RoyalPay Surcharge</th>
<th>Fund</th>
<th>Channel</th>
</tr>
@ -179,6 +180,7 @@
<td ng-bind="log.coefficient"></td>
<td ng-bind="log.bd_rate+'%'"></td>
<td ng-bind="log.prize_value|currency:'AUD '"></td>
<td ng-bind="log.royal_surcharge|currency:'AUD '"></td>
<td ng-bind="log.donation|currency:'AUD '"></td>
<td>
<img ng-if="log.channel=='Alipay'" uib-tooltip="Alipay" src="/static/images/alipay_sign_lg.png">

@ -0,0 +1,253 @@
/***login***/
@media (min-width: 768px) {
.login-box-right {
width: 42.2%;
height: 100%;
background-color: black;
opacity: 0.8;
position: relative;
left: 57.8%
}
.login-page-bg {
width: 100%;
height: 100%;
background-color: #d2d6de;
background: url(../images/bg2.png);
/*background: url(../images/logonbg.jpg) ;*/
position: relative;
background-size: 100% 100%;
}
.login-container {
text-align: center;
}
.ad {
text-align: center;
font-size: 20px;
color: #FFFFFF;
}
.qrdiv {
width: 50%;
margin-left: 26%;
color: #FFFFFF;
}
.form {
padding: 4% 25%
}
.login-box-bg {
/*background-color: rgba(255,255,255,0.5);*/
/*box-shadow: 0px 2px 20px 2px rgba(0, 0, 0, 0.3);*/
/*filter: alpha(opacity=40);*/
/*opacity: 0.8;*/
}
.login-info{
/*height: 45px;*/
background-color: black;
font-size: 18px;
color: white;
}
.captcha {
width: 30%;
display: inline;
height: 34px;
float: right
}
.login-submit{
background-color: #f06010;
font-size: 18px;
}
.login-submit-margin{
margin-top: 10%;
}
.forget{
color: #f06010;
font-size: 18px;
}
.download-app{
color: #FFFFFF;
font-size: 15px;
}
.download-app img{
width: 100px;
}
.divloginbox {
animation: loginbox 1s;
-moz-animation: loginbox 1s;
-webkit-animation: loginbox 1s;
-o-animation: loginbox 1s;
}
@keyframes loginbox {
from {
margin-right: -30%
}
to {
margin-right: 35%
}
}
@-moz-keyframes loginbox {
from {
margin-right: -30%
}
to {
margin-right: 35%
}
}
@-webkit-keyframes loginbox {
from {
margin-right: -30%
}
to {
margin-right: 35%
}
}
@-o-keyframes loginbox {
from {
margin-right: -30%
}
to {
margin-right: 35%
}
}
}
@media (max-width: 768px) {
.login-page-bg {
background: url('');
background-color: #d2d6de;
}
.login-box-right {
margin-top: 20%;
margin: 7% auto;
width: 90%;
}
.login-box-bg {
/*background-color: rgba(255,255,255,0.5);*/
box-shadow: 0px 2px 20px 2px rgba(0, 0, 0, 0.3);
filter: alpha(opacity=40);
opacity: 0.7;
}
.login-container {
text-align: center;
background: #fff;
padding: 20px;
border-top: 0;
color: #666;
}
.ad {
text-align: center;
font-size: 20px;
color: #000000;
}
.qrdiv {
width: 50%;
margin-left: 26%;
}
.form {
}
.login-info{
}
.captcha {
width: 30%;
display: inline;
height: 34px;
float: right
}
.login-submit{
background-color: #f06010;
}
.login-submit-margin{
margin-bottom: 20px;
margin-top:20px;
}
.forget{
}
.download-app{
color: #000000;
font-size: 15px;
}
.download-app img{
width: 50px;
}
.divloginbox {
animation: loginboxtop 1s;
-moz-animation: loginboxtop 1s;
-webkit-animation: loginboxtop 1s;
-o-animation: loginboxtop 1s;
}
@keyframes loginboxtop {
from {
margin-top: 0
}
to {
margin-top: 20%
}
}
@-moz-keyframes loginboxtop {
from {
margin-top: 0
}
to {
margin-top: 20%
}
}
@-webkit-keyframes loginboxtop {
from {
margin-top: 0
}
to {
margin-top: 20%
}
}
@-o-keyframes loginboxtop {
from {
margin-top: 0
}
to {
margin-top: 20%
}
}
}
/***login***/

@ -0,0 +1,215 @@
/***login***/
@media (min-width: 768px) {
.login-container {
width: 800px;
margin: 12% auto;
margin-bottom: 0;
}
.login-info{
background-color: black;
opacity: 0.8;
color: white;
border-radius:4px
}
.login-box-right {
margin-right: 35%;
}
.login-page-bg {
width: 100%;
height: 100%;
background-color: #d2d6de;
background: url(../images/bg3.png);
/*background: url(../images/logonbg.jpg) ;*/
position: relative;
background-size: 100% 100%;
}
.login-box-bg {
/*background-color: rgba(255,255,255,0.5);*/
/*box-shadow: 0px 2px 20px 2px rgba(0, 0, 0, 0.3);*/
filter: alpha(opacity=40);
opacity: 0.8;
}
.ad {
text-align: center;
font-size: 20px;
color: #FFFFFF;
}
.login-submit{
background-color: #54C7FF;
border-color: #54C7FF;
margin-top: 10%;
color: white;
}
.qrdiv {
color: #FFFFFF;
}
.login-submit-margin{
margin-top: 45%;
color: #FFFFFF;
}
.download-app {
font-size: 15px;
}
.download-app img{
width: 100px;
}
.divloginbox {
animation: loginbox 1s;
-moz-animation: loginbox 1s;
-webkit-animation: loginbox 1s;
-o-animation: loginbox 1s;
}
@keyframes loginbox {
from {
margin-right: -30%
}
to {
margin-right: 35%
}
}
@-moz-keyframes loginbox {
from {
margin-right: -30%
}
to {
margin-right: 35%
}
}
@-webkit-keyframes loginbox {
from {
margin-right: -30%
}
to {
margin-right: 35%
}
}
@-o-keyframes loginbox {
from {
margin-right: -30%
}
to {
margin-right: 35%
}
}
}
@media (max-width: 768px) {
.login-container {
width: 90%;
margin: 7% auto;
}
.login-info{
}
.login-page-bg {
background: url('');
background-color: #d2d6de;
}
.login-box-right {
margin-top: 20%;
margin-right: auto;
}
.login-box-bg {
/*background-color: rgba(255,255,255,0.5);*/
box-shadow: 0px 2px 20px 2px rgba(0, 0, 0, 0.3);
filter: alpha(opacity=40);
opacity: 0.7;
background-color: white;
}
.login-submit{
background-color: #e08e0b;
border-color: #e08e0b;
}
.ad {
text-align: center;
font-size: 20px;
color: #000000;
}
.qrdiv {
color: #000000;
}
.login-submit-margin{
margin-top: 10%;
}
.download-app {
font-size: 15px;
}
.download-app img{
width: 50px;
}
.divloginbox {
animation: loginboxtop 1s;
-moz-animation: loginboxtop 1s;
-webkit-animation: loginboxtop 1s;
-o-animation: loginboxtop 1s;
}
@keyframes loginboxtop {
from {
margin-top: 0
}
to {
margin-top: 20%
}
}
@-moz-keyframes loginboxtop {
from {
margin-top: 0
}
to {
margin-top: 20%
}
}
@-webkit-keyframes loginboxtop {
from {
margin-top: 0
}
to {
margin-top: 20%
}
}
@-o-keyframes loginboxtop {
from {
margin-top: 0
}
to {
margin-top: 20%
}
}
}
/***login***/

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

@ -826,7 +826,7 @@
<div class="description-block">
<img src="/static/images/main_menu/transaction_arrears_green.png"/>
<div class="description-text">
<span class="description-text">商户欠</span>
<span class="description-text">授信退</span>
</div>
</div>
</a>

@ -699,7 +699,6 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter
};
$scope.showFile();
$scope.passClient = function () {
$scope.refreshWechatInstitutionMerchantId();
if ($scope.partner.enable_hf) {
if ($scope.partner.hfindustry == null) {
alert("已开启HF支付通道HF行业不可为空!");
@ -772,7 +771,6 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter
});
};
$scope.pass2GreenChannel = function () {
$scope.refreshWechatInstitutionMerchantId();
commonDialog.confirm({
title: 'Green Channel Audit Partner',
content: 'Are you sure to mark partner ' + $scope.partner.company_name + ' green channel audited '
@ -1424,6 +1422,7 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter
$scope.ctrl.editMaxOrderAmount = false;
$scope.ctrl.editOrderExpiryConfig = false;
$scope.ctrl.editRefundPwd = false;
$scope.ctrl.editRefundCreditLine = false;
})
};
$scope.qrConfig = {currency: 'AUD'};
@ -1504,6 +1503,17 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter
})
};
$scope.setRefundCreditLine = function () {
if (!$scope.paymentInfo) {
return;
}
$http.put('/sys/partners/' + $scope.partner.client_moniker + '/refund_credit_line', {refund_credit_line: $scope.paymentInfo.refund_credit_line}).then(function (resp) {
$scope.loadPartnerPaymentInfo();
}, function (resp) {
commonDialog.alert({title: 'Error', content: resp.data.message, type: 'error'})
});
};
$scope.updateClientQRCodePaySurCharge = function () {
if (!$scope.paymentInfo) {
return;
@ -2309,7 +2319,7 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter
});
};
$scope.getBankInfo = function (bsb_no) {
if (bsb_no != null && bsb_no != "") {
if (bsb_no != null && bsb_no !== "") {
$http.get('/sys/partners/' + $scope.partner.client_moniker + '/bank_account/bank_info/' + bsb_no).then(function (resp) {
$scope.bankInfo = resp.data;
$scope.bankaccount.bank = $scope.bankInfo.bank;

@ -495,6 +495,33 @@
</div>
</div>
<!--授信退款额度-->
<div class="form-group" ng-if="('100000000'|withRole)&& paymentInfo.enable_pre_refund">
<label class="col-sm-2 control-label">Refund Credit Line</label>
<div class="col-sm-9">
<p ng-if="!ctrl.editRefundCreditLine" class="form-control-static">
{{paymentInfo.refund_credit_line||'Not Configure'}}
<a role="button" ng-click="ctrl.editRefundCreditLine=true" ng-if="'01'|withRole"><i
class="fa fa-edit"></i></a>
</p>
<div class="input-group" ng-if="ctrl.editRefundCreditLine">
<input type="number" maxlength="6" class="form-control"
ng-model="paymentInfo.refund_credit_line">
<div class="input-group-btn">
<button class="btn btn-success"
ng-click="setRefundCreditLine()">
<i class="fa fa-check"></i>
</button>
</div>
<div class="input-group-btn">
<button class="btn btn-danger" ng-click="ctrl.editRefundCreditLine=false">
<i class="fa fa-remove"></i>
</button>
</div>
</div>
</div>
</div>
<div class="form-group" ng-if="('100000000'|withRole)">
<label class="col-sm-2 control-label">Reset Refund Password</label>
<div class="col-sm-9">

@ -3,7 +3,6 @@
*/
define(['angular', 'decimal', 'uiBootstrap', 'uiRouter', 'angularEcharts'], function (angular) {
'use strict';
var colors = ['#00c0ef', '#00a65a', '#ff851b', '#f39c12', '#d81b60', '#605ca8', '#dd4b39', '#008080', '#8B008B', '#D2691E', '#708090'];
var app = angular.module('surchargeAccountApp', ['ui.bootstrap', 'ui.router', 'ngEcharts']);
app.config(['$stateProvider', function ($stateProvider) {
$stateProvider.state('surcharge_account', {
@ -25,22 +24,13 @@ define(['angular', 'decimal', 'uiBootstrap', 'uiRouter', 'angularEcharts'], func
$scope.partner = angular.copy(partner.data);
$scope.getBalance = function () {
$scope.surcharge = {};
if ($scope.partner.surcharge_mode != undefined && $scope.partner.surcharge_mode == "distributed") {
if ($scope.partner.surcharge_mode !== undefined && $scope.partner.surcharge_mode === "distributed") {
$http.get('/client/partner_info/' + $scope.partner.client_moniker + '/surcharge_account').then(function (resp) {
$scope.surcharge = resp.data;
})
}
};
$scope.getTransactions = function () {
$http.get('/client/partner_info/' + $scope.partner.client_moniker + '/account/transactions').then(function (resp) {
$scope.transactions = resp.data;
})
}
$scope.getBalance();
$scope.getTransactions();
$scope.getDetailByMonths = function () {
$http.get('/client/partner_info/' + $scope.partner.client_moniker + '/account/months').then(function (resp) {
$scope.report = resp.data;
@ -93,20 +83,17 @@ define(['angular', 'decimal', 'uiBootstrap', 'uiRouter', 'angularEcharts'], func
};
})
};
$scope.surchargeAccountDetail = function (client_moniker,mon) {
$scope.surchargeAccountDetail = function (detail) {
$uibModal.open({
templateUrl: '/static/payment/surchargeaccount/templates/partner_surcharge_account_month_dialog.html',
controller: 'accountDetailCtrl',
size: 'lg',
resolve: {
client_moniker: function () {
return client_moniker;
},
month: function () {
return mon;
detail: function(){
return detail;
},
transactions: ['$http', function ($http) {
return $http.get('/sys/partners/' + client_moniker + '/account/transactions/date?date='+mon);
surchargeDetailData: ['$http', function ($http) {
return $http.get('/sys/partners/' + detail.client_moniker + '/account/transactions/date?detailId=' + detail.detail_id);
}]
}
}).result.then(function () {
@ -115,9 +102,8 @@ define(['angular', 'decimal', 'uiBootstrap', 'uiRouter', 'angularEcharts'], func
$scope.loadReport($scope.report.month);
});
};
$scope.fillMonthsSurcharge = function (details) {
var contentHtml = $sce.trustAsHtml('即将为[' + details.short_name + ']冲正,<span style="color: red">请确认商户信息</span>');
$scope.fillMonthsSurcharge = function (detail) {
var contentHtml = $sce.trustAsHtml('请确认商户[' + detail.short_name + ']已线下付款,再执行此操作</span>');
commonDialog.confirm({
title: '后付费账户冲正',
content: '',
@ -125,7 +111,7 @@ define(['angular', 'decimal', 'uiBootstrap', 'uiRouter', 'angularEcharts'], func
{label: 'Cancel', className: 'btn-danger', key: '2', dismiss: true}],
contentHtml: contentHtml
}).then(function () {
$http.put('/sys/surcharge_account/fill/' + details.detail_id).then(function () {
$http.put('/sys/surcharge_account/fill/' + detail.detail_id).then(function () {
commonDialog.alert({title: 'Success', content: '冲正成功', type: 'success'});
$scope.loadReport($scope.report.month);
}, function (resp) {
@ -136,26 +122,10 @@ define(['angular', 'decimal', 'uiBootstrap', 'uiRouter', 'angularEcharts'], func
};
}]);
app.controller('accountDetailCtrl', ['$scope','$http','transactions','client_moniker','commonDialog','month', function ($scope, $http, transactions,client_moniker,commonDialog,month) {
$scope.transactions = angular.copy(transactions.data);
$scope.params = {};
$scope.month = angular.copy(month);
$scope.getBalance = function () {
$http.get('/sys/partners/' + client_moniker + '/surcharge_account').then(function (resp) {
$scope.surcharge = resp.data;
})
};
$scope.getBalance();
$scope.getTransactions = function () {
$http.get('/sys/partners/' + client_moniker + '/account/transactions/date?date=' + $scope.month).then(function (resp) {
$scope.transactions = resp.data;
});
}
app.controller('accountDetailCtrl', ['$scope', '$http', 'detail', 'surchargeDetailData', function ($scope, $http, detail, surchargeDetailData) {
$scope.surchargeDetailData = angular.copy(surchargeDetailData.data);
$scope.month = angular.copy(detail.settle_month);
}]);
return app;
});

@ -10,13 +10,6 @@
<section class="content">
<div class="box box-default">
<div class="box-header">
<!-- <div uib-dropdown>
<button class="btn btn-primary" uib-dropdown-toggle type="button" ng-bind="params.year"></button>
<ul class="dropdown-menu" uib-dropdown-menu role="menu">
<li ng-repeat="year in availableYears" role="menuitem"><a role="button" ng-click="initMonth(year)" ng-bind="year"></a></li>
</ul>
</div>-->
<div ng-repeat="year in availableYears" style="display: inline">
<button class="btn btn-info"
ng-click="initMonth(year)"
@ -27,7 +20,7 @@
</div>
<div class="box-body">
<div class="row">
<div class="col-xs-3" ng-repeat="mon in months">
<div class="col-xs-1" ng-repeat="mon in months">
<a class="text-success" role="button" ng-click="loadReport(mon)" ng-if="hasReport(mon)">
<h2 ng-bind="mon.substring(5,7)"></h2>
</a>
@ -44,41 +37,32 @@
<table class="table table-striped">
<thead>
<tr>
<th>商户编号</th>
<th>Short Name</th>
<th>Total Surcharge</th>
<!--<th>充值总额</th>-->
<!--<th>支出总额</th>-->
<th>商户编码</th>
<th>商户简称</th>
<th>总手续费</th>
<th>是否结清</th>
<!--<th>余额</th>-->
<th>操作</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="details in report.details">
<tr ng-repeat="detail in report.details">
<td style="vertical-align:middle">
<a class="text-primary" role="button" title="Detail"
ui-sref="partners.detail({clientMoniker:details.client_moniker})">
<span ng-bind="details.client_moniker"></span></a>
ui-sref="partners.detail({clientMoniker:detail.client_moniker})">
<span ng-bind="detail.client_moniker"></span></a>
</td>
<td ng-bind="details.short_name" style="vertical-align:middle"></td>
<td ng-bind="details.total_surcharge | currency:'$'"></td>
<!--<td ng-bind="details.credit_amount|currency:'$'" style="color: green;vertical-align:middle" ></td>-->
<!--<td ng-bind="details.debit_amount|currency:'$'" style="color: red;vertical-align:middle"></td>-->
<td ng-bind="detail.short_name" style="vertical-align:middle"></td>
<td ng-bind="detail.total_surcharge | currency:'AUD'"></td>
<td style="vertical-align:middle">
<span ng-if="details.is_valid">已结清</span>
<span ng-if="!details.is_valid">未付款</span>
<span ng-if="detail.checkout">已结清</span>
<span ng-if="!detail.checkout">未付款</span>
</td>
<!--<td>-->
<!--<span ng-if="details.balance>=0" style="color: green">{{details.balance|currency:'$'}}</span>-->
<!--<span ng-if="details.balance<0" style="color: red">{{details.balance|currency:'$'}}</span>-->
<!--</td>-->
<td style="vertical-align:middle">
<!-- 等待邮件和微信推送模板 -->
<!--<a style="cursor: pointer" > 催款</a>-->
<!--<a style="cursor: pointer" ng-click="showDetail()">充值</a>-->
<button class="btn btn-warning" ng-if="!details.is_valid" type="button" ng-click="fillMonthsSurcharge(details)">冲正</button>
<i class="fa fa-bars" style="font-size: 15px;color: #3c8dbc;cursor: pointer;padding-left: 15px" ng-click="surchargeAccountDetail(details.client_moniker,details.settle_month)"></i>
<button class="btn btn-warning" ng-if="!detail.checkout" type="button"
ng-click="fillMonthsSurcharge(detail)">冲正
</button>
<i class="fa fa-bars" style="font-size: 15px;color: #3c8dbc;cursor: pointer;padding-left: 15px"
ng-click="surchargeAccountDetail(detail)"></i>
</td>
</tr>
</tbody>

@ -1,110 +1,8 @@
<section class="content-header">
<h1>
Client Surcharge Account
</h1>
<ol class="breadcrumb">
<li class="active"><i class="fa fa-dashboard"></i> Surcharge Account</li>
</ol>
</section>
<div class="content">
<div class="row">
<div class="col-sm-12">
<div class="box-solid">
<div class="box box-warning">
<div class="box-header">
<div class="form-horizontal col-sm-8" style="margin-top: 30px">
<div class="form-group">
<label class="control-label col-xs-4 col-sm-3">手续费账户余额</label>
<div class="col-sm-6" style="font-size: 25px">
<p>{{surcharge.balance|currency:'AUD'}}</p>
</div>
</div>
<!--<div class="form-group" ng-if="partner.surcharge_mode=='distributed'">-->
<!--<label class="control-label col-xs-4 col-sm-3">允许手续费账户欠款</label>-->
<!--<div class="col-sm-6">-->
<!--<input type="checkbox" ng-model="partner.allow_surcharge_credit" bs-switch-->
<!--switch-change="allowSurchargeCredit(partner.allow_surcharge_credit)" switch-readonly="true">-->
<!--</div>-->
<!--</div>-->
<!--<div class="form-group">-->
<!--<label class="control-label col-xs-4 col-sm-3" style="padding-top:0px">Surcharge Mode:</label>-->
<!--<div class="col-xs-8 col-sm-6">-->
<!--<span class="control-label" ng-bind="partner.surcharge_mode"></span>-->
<!--<p class="text-info">-->
<!--<i class="fa fa-info"></i>启用到收支分离(distributed)模式,将使消费者支付手续费模式失效-->
<!--</p>-->
<!--</div>-->
<!--</div>-->
</div>
</div>
</div>
<div class="box">
<div class="box box-default">
<div class="box-header">Credits</div>
<div class="box-body">
<div class="table-responsive col-sm-12">
<table class="table table-bordered table-striped table-hover">
<thead>
<tr>
<th>Num</th>
<th>Create Time</th>
<th>Amount</th>
<th>Remark</th>
<th>Operator</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="tr in transactions|propsFilter:{type:'Credit',create_time:ctrl.day}:true">
<td>{{$index+1}}</td>
<td ng-bind="tr.create_time|date:'yyyy-MM-dd HH:mm:ss'"></td>
<td ng-bind="tr.amount|currency:'AUD'"></td>
<td ng-bind="tr.remark"></td>
<td ng-bind="tr.operator_displayname"></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="box box-default">
<div class="box-header">Debits</div>
<div class="box-body">
<div class="table-responsive col-sm-12">
<table class="table table-bordered table-striped table-hover">
<thead>
<tr>
<th>Num</th>
<th>Settle Date</th>
<th>Amount</th>
<th>Total Surcharge</th>
<th>Tax Amount</th>
<th>Remark</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="tr in transactions|propsFilter:{type:'Debit',create_time:ctrl.day}:true">
<td>{{$index+1}}</td>
<td ng-bind="tr.settle_date|date:'yyyy-MM-dd'"></td>
<td ng-bind="tr.amount|currency:'AUD'"></td>
<td ng-bind="tr.total_surcharge|currency:'AUD'"></td>
<td ng-bind="tr.tax_amount|currency:'AUD'"></td>
<td ng-bind="tr.remark"></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<section class="content-header">
<h1>
每月手续费
Monthly Surcharge
<span style="float: right">Merchant Surcharge (<span
style="color: red">{{surcharge.balance|currency:'AUD'}}</span>)</span>
</h1>
</section>
<div class="content">
@ -115,22 +13,20 @@
<table class="table table-bordered table-striped table-hover">
<thead>
<tr>
<th>清算月份</th>
<th>Settle Month</th>
<th>Total Surcharge</th>
<th>支出总额</th>
<th>是否结清</th>
<th>操作</th>
<th>Whether Settle</th>
<th>Detail</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="details in report">
<td ng-bind="details.settle_month"></td>
<td ng-bind="details.total_surcharge | currency:'$'"></td>
<td ng-bind="details.debit_amount|currency:'$'"
<td ng-bind="details.total_surcharge|currency:'$'"
style="color: red;vertical-align:middle"></td>
<td style="vertical-align:middle">
<span ng-if="details.is_valid">已结清</span>
<span ng-if="!details.is_valid">未付款</span>
<span ng-if="details.is_valid">Yes</span>
<span ng-if="!details.is_valid">No</span>
</td>
<td style="vertical-align:middle">
<i class="fa fa-bars"

@ -1,5 +1,5 @@
<div class="modal-header">
<h4>Surcharge Account Detail{{partner.client_moniker?'('+partner.client_moniker+')':''}}</h4>
<h4>Surcharge Accountdddd Detail{{partner.client_moniker?'('+partner.client_moniker+')':''}}</h4>
</div>
<div class="modal-body">
<div class="box box-default">
@ -9,7 +9,6 @@
<table class="table table-bordered table-striped table-hover">
<thead>
<tr>
<th>Num</th>
<th>Settle Date</th>
<th>Amount</th>
<th>Total Surcharge</th>
@ -18,15 +17,15 @@
</tr>
</thead>
<tbody>
<tr ng-repeat="tr in transactions|propsFilter:{type:'Debit'}:true">
<td>{{$index+1}}</td>
<td ng-bind="tr.settle_date|date:'yyyy-MM-dd'"></td>
<td ng-bind="tr.amount|currency:'AUD'"></td>
<td ng-bind="tr.total_surcharge|currency:'AUD'"></td>
<td ng-bind="tr.tax_amount|currency:'AUD'"></td>
<tr ng-repeat="detail in surchargeDetailData">
<td ng-bind="detail.settle_date|date:'yyyy-MM-dd'"></td>
<td ng-bind="detail.amount|currency:'AUD'"></td>
<td ng-bind="detail.total_surcharge|currency:'AUD'"></td>
<td ng-bind="detail.tax_amount|currency:'AUD'"></td>
<td>
{{tr.remark}}
<a ng-href="/client/clean_logs/{{tr.client_id}}/settlement_logs/{{tr.clearing_detail_id}}/export" target="_blank" title="Download">
{{detail.remark}}
<a ng-href="/client/clean_logs/{{tr.client_id}}/settlement_logs/{{tr.clearing_detail_id}}/export"
target="_blank" title="Download">
<i class="fa fa-download"></i>
</a>
</td>

@ -1,34 +1,7 @@
<div class="modal-header">
<h4>Surcharge Account Detail{{partner.client_moniker?'('+partner.client_moniker+')':''}}</h4>
<h4>Surcharge Account Detail</h4>
</div>
<div class="modal-body">
<div class="box box-warning">
<div class="box-body" style="font-size: 35px;text-align: right">
{{surcharge.balance|currency:'AUD'}}<i class="fa fa-plus-square-o" style="font-size: 15px;padding-left: 15px;cursor: pointer" ng-click="addDetail()"></i>
</div>
</div>
<div class="box box-warning" ng-if="canAddDetail">
<div class="box-body">
<div class="row" style="margin-left: 20px;">
<div class="form-group">
<label>
Amount:
</label>
<input type="number" ng-model="params.amount">
<label>
remark:
</label>
<input type="text" ng-model="params.remark">
<div class="btn-group">
<a class="btn btn-success" role="button" ng-click="save()">Submit</a>
</div>
<div class="btn-group">
<a class="btn btn-danger" ng-click="cancel()" >Cancel</a>
</div>
</div>
</div>
</div>
</div>
<div class="box box-default">
<div class="box-header">Credits</div>
<div class="box-body">
@ -36,7 +9,6 @@
<table class="table table-bordered table-striped table-hover">
<thead>
<tr>
<th>Num</th>
<th>Create Time</th>
<th>Amount</th>
<th>Remark</th>
@ -44,12 +16,11 @@
</tr>
</thead>
<tbody>
<tr ng-repeat="tr in transactions|propsFilter:{type:'Credit'}:true">
<td>{{$index+1}}</td>
<td ng-bind="tr.create_time|date:'yyyy-MM-dd HH:mm:ss'"></td>
<td ng-bind="tr.amount|currency:'AUD'"></td>
<td ng-bind="tr.remark"></td>
<td ng-bind="tr.operator_displayname"></td>
<tr ng-repeat="surcharge in surchargeDetailData|propsFilter:{type:'Credit'}:true">
<td ng-bind="surcharge.create_time|date:'yyyy-MM-dd HH:mm:ss'"></td>
<td ng-bind="surcharge.amount|currency:'AUD'"></td>
<td ng-bind="surcharge.remark"></td>
<td ng-bind="surcharge.operator"></td>
</tr>
</tbody>
</table>
@ -63,7 +34,6 @@
<table class="table table-bordered table-striped table-hover">
<thead>
<tr>
<th>Num</th>
<th>Settle Date</th>
<th>Amount</th>
<th>Total Surcharge</th>
@ -72,15 +42,15 @@
</tr>
</thead>
<tbody>
<tr ng-repeat="tr in transactions|propsFilter:{type:'Debit'}:true">
<td>{{$index+1}}</td>
<td ng-bind="tr.settle_date|date:'yyyy-MM-dd'"></td>
<td ng-bind="tr.amount|currency:'AUD'"></td>
<td ng-bind="tr.total_surcharge|currency:'AUD'"></td>
<td ng-bind="tr.tax_amount|currency:'AUD'"></td>
<tr ng-repeat="surcharge in surchargeDetailData|propsFilter:{type:'Debit'}:true">
<td ng-bind="surcharge.settle_date|date:'yyyy-MM-dd'"></td>
<td ng-bind="surcharge.amount|currency:'AUD'"></td>
<td ng-bind="surcharge.total_surcharge|currency:'AUD'"></td>
<td ng-bind="surcharge.tax_amount|currency:'AUD'"></td>
<td>
{{tr.remark}}
<a ng-href="/sys/clean_logs/{{tr.client_id}}/settlement_logs/{{tr.clearing_detail_id}}/export" target="_blank" title="Download">
{{surcharge.remark}}
<a ng-href="/sys/clean_logs/{{surcharge.client_id}}/settlement_logs/{{surcharge.clearing_detail_id}}/export"
target="_blank" title="Download">
<i class="fa fa-download"></i>
</a>
</td>

@ -1,12 +1,7 @@
<div class="modal-header">
<h4>Surcharge Account Detail{{partner.client_moniker?'('+partner.client_moniker+')':''}}</h4>
<h4>Surcharge Account Detail</h4>
</div>
<div class="modal-body">
<div class="box box-warning">
<div class="box-body" style="font-size: 35px;text-align: right">
{{surcharge.balance|currency:'AUD'}}
</div>
</div>
<div class="box box-default">
<div class="box-header">Credits</div>
<div class="box-body">
@ -14,7 +9,6 @@
<table class="table table-bordered table-striped table-hover">
<thead>
<tr>
<th>Num</th>
<th>Create Time</th>
<th>Amount</th>
<th>Remark</th>
@ -22,12 +16,12 @@
</tr>
</thead>
<tbody>
<tr ng-repeat="tr in transactions|propsFilter:{type:'Credit'}:true">
<td>{{$index+1}}</td>
<td ng-bind="tr.create_time|date:'yyyy-MM-dd HH:mm:ss'"></td>
<td ng-bind="tr.amount|currency:'AUD'"></td>
<td ng-bind="tr.remark"></td>
<td ng-bind="tr.operator_displayname"></td>
<tr ng-repeat="surcharge in surchargeDetailData|propsFilter:{type:'Credit'}:true">
<td ng-bind="surcharge.create_time|date:'yyyy-MM-dd HH:mm:ss'"></td>
<td ng-bind="surcharge.amount|currency:'AUD'"></td>
<td ng-bind="surcharge.remark"></td>
<td ng-bind="surcharge.operation"></td>
</tr>
</tr>
</tbody>
</table>
@ -41,24 +35,24 @@
<table class="table table-bordered table-striped table-hover">
<thead>
<tr>
<th>Num</th>
<th>Settle Date</th>
<th>Amount</th>
<th>Total Surcharge</th>
<th>Tax Amount</th>
<th>Remark</th>
<th>Details</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="tr in transactions|propsFilter:{type:'Debit'}:true">
<td>{{$index+1}}</td>
<td ng-bind="tr.settle_date|date:'yyyy-MM-dd'"></td>
<td ng-bind="tr.amount|currency:'AUD'"></td>
<td ng-bind="tr.total_surcharge|currency:'AUD'"></td>
<td ng-bind="tr.tax_amount|currency:'AUD'"></td>
<tr ng-repeat="surcharge in surchargeDetailData|propsFilter:{type:'Debit'}:true">
<td ng-bind="surcharge.settle_date|date:'yyyy-MM-dd'"></td>
<td ng-bind="surcharge.amount|currency:'AUD'"></td>
<td ng-bind="surcharge.total_surcharge|currency:'AUD'"></td>
<td ng-bind="surcharge.tax_amount|currency:'AUD'"></td>
<td ng-bind="surcharge.remark"></td>
<td>
{{tr.remark}}
<a ng-href="/sys/clean_logs/{{tr.client_id}}/settlement_logs/{{tr.clearing_detail_id}}/export" target="_blank" title="Download">
<a ng-href="/sys/clean_logs/{{surcharge.client_id}}/settlement_logs/{{surcharge.clearing_detail_id}}/export"
target="_blank" title="Download">
<i class="fa fa-download"></i>
</a>
</td>

@ -170,6 +170,9 @@ define(['angular', 'uiBootstrap', 'uiRouter'], function (angular) {
url += connectSymbol + 'dev_id=' + params.dev_id;
connectSymbol = '&'
}
if (!params.client_ids) {
$scope.params.client_ids = [$scope.currentUser.client.client_id]
}
params.client_ids.forEach(function (i) {
url += connectSymbol + 'client_ids=' + i;
connectSymbol = '&';

Loading…
Cancel
Save