commit
800e4059c5
@ -0,0 +1,27 @@
|
||||
package au.com.royalpay.payment.manage.mappers.system;
|
||||
|
||||
import cn.yixblog.support.mybatis.autosql.annotations.AdvanceSelect;
|
||||
import cn.yixblog.support.mybatis.autosql.annotations.AutoMapper;
|
||||
import cn.yixblog.support.mybatis.autosql.annotations.AutoSql;
|
||||
import cn.yixblog.support.mybatis.autosql.annotations.SqlType;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@AutoMapper(tablename = "log_clearing_distributed_surcharge", pkName = "log_id")
|
||||
public interface ClearingDistributedSurchargeMapper {
|
||||
|
||||
List<JSONObject> findTransactions(@Param("client_id") int clientId);
|
||||
|
||||
@AutoSql(type = SqlType.INSERT)
|
||||
void save(JSONObject transactions);
|
||||
|
||||
List<JSONObject> getMonthDetailByClientId(@Param("datefrom") Date datefrom, @Param("dateto") Date dateto);
|
||||
|
||||
List<JSONObject> findTransactionsByDate(JSONObject params);
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
package au.com.royalpay.payment.manage.mappers.system;
|
||||
|
||||
import cn.yixblog.support.mybatis.autosql.annotations.AdvanceSelect;
|
||||
import cn.yixblog.support.mybatis.autosql.annotations.AutoMapper;
|
||||
import cn.yixblog.support.mybatis.autosql.annotations.AutoSql;
|
||||
import cn.yixblog.support.mybatis.autosql.annotations.SqlType;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@AutoMapper(tablename = "sys_clients_surcharge_accounts", pkName = "client_id")
|
||||
public interface ClientsSurchargeAccountsMapper {
|
||||
|
||||
@AutoSql(type = SqlType.SELECT)
|
||||
@AdvanceSelect(addonWhereClause = "is_valid=1")
|
||||
JSONObject find(@Param("client_id") int clientId);
|
||||
|
||||
@AutoSql(type = SqlType.INSERT)
|
||||
void save(JSONObject surchargeAccount);
|
||||
|
||||
@AutoSql(type = SqlType.UPDATE)
|
||||
void update(JSONObject surchargeAccount);
|
||||
}
|
@ -0,0 +1,28 @@
|
||||
package au.com.royalpay.payment.manage.mappers.system;
|
||||
|
||||
import cn.yixblog.support.mybatis.autosql.annotations.AutoMapper;
|
||||
import cn.yixblog.support.mybatis.autosql.annotations.AutoSql;
|
||||
import cn.yixblog.support.mybatis.autosql.annotations.SqlType;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@AutoMapper(tablename = "financial_surcharge_account_detail", pkName = "detail_id")
|
||||
public interface FinancialSurchargeAccountDetailMapper {
|
||||
|
||||
List<JSONObject> findDetailsByMonth(@Param("settle_month") String settle_month);
|
||||
|
||||
List<JSONObject> findDetailsByClientId(@Param("client_id") int client_id);
|
||||
|
||||
@AutoSql(type = SqlType.INSERT)
|
||||
void save(JSONObject detail);
|
||||
|
||||
List<JSONObject> listSettlementDatesInMonth(@Param("month") String month);
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,30 @@
|
||||
package au.com.royalpay.payment.manage.merchants.entity.impls;
|
||||
|
||||
import au.com.royalpay.payment.manage.merchants.entity.ClientConfigModify;
|
||||
import au.com.royalpay.payment.manage.merchants.entity.ClientModify;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
|
||||
/**
|
||||
* Create by yixian at 2018-04-12 16:43
|
||||
*/
|
||||
public class SurchargeModeModify extends ClientModify {
|
||||
private String surcharge_mode;
|
||||
|
||||
|
||||
public SurchargeModeModify(JSONObject account, String clientMoniker, String surcharge_mode) {
|
||||
super(account, clientMoniker);
|
||||
this.surcharge_mode = surcharge_mode;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String business() {
|
||||
return "切换商户清算模式(surcharge_mode)";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected JSONObject getModifyResult() {
|
||||
JSONObject modify = new JSONObject();
|
||||
modify.put("surcharge_mode", surcharge_mode);
|
||||
return modify;
|
||||
}
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
package au.com.royalpay.payment.manage.merchants.entity.impls;
|
||||
|
||||
import au.com.royalpay.payment.manage.merchants.entity.ClientConfigModify;
|
||||
import au.com.royalpay.payment.manage.merchants.entity.ClientModify;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
|
||||
/**
|
||||
* Create by yixian at 2018-04-12 16:43
|
||||
*/
|
||||
public class SwitchAllowSurchargeCreditModify extends ClientModify {
|
||||
private String key;
|
||||
private boolean value;
|
||||
|
||||
public SwitchAllowSurchargeCreditModify(JSONObject account, String clientMoniker, String key, boolean value) {
|
||||
super(account, clientMoniker);
|
||||
this.key = key;
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String business() {
|
||||
|
||||
return (value?"开启 ":"关闭 ")+key;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected JSONObject getModifyResult() {
|
||||
JSONObject modify = new JSONObject();
|
||||
modify.put(key, value);
|
||||
return modify;
|
||||
}
|
||||
}
|
@ -0,0 +1,14 @@
|
||||
package au.com.royalpay.payment.manage.surchargeAccount.core;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
public interface SurchargeAccountService {
|
||||
|
||||
void generatorMonthDetail();
|
||||
|
||||
List<JSONObject> listSettledDatesInMonth(String mon);
|
||||
|
||||
}
|
@ -0,0 +1,66 @@
|
||||
package au.com.royalpay.payment.manage.surchargeAccount.core.impl;
|
||||
|
||||
import au.com.royalpay.payment.manage.mappers.system.ClearingDistributedSurchargeMapper;
|
||||
import au.com.royalpay.payment.manage.mappers.system.FinancialSurchargeAccountDetailMapper;
|
||||
import au.com.royalpay.payment.manage.surchargeAccount.core.SurchargeAccountService;
|
||||
import au.com.royalpay.payment.manage.system.core.impl.ClientContractServiceImpl;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.apache.commons.lang3.time.DateFormatUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
public class SurchargeAccountServiceImpl implements SurchargeAccountService{
|
||||
|
||||
@Resource
|
||||
private ClearingDistributedSurchargeMapper clearingDistributedSurchargeMapper;
|
||||
@Resource
|
||||
private FinancialSurchargeAccountDetailMapper financialSurchargeAccountDetailMapper;
|
||||
|
||||
Logger logger = LoggerFactory.getLogger(ClientContractServiceImpl.class);
|
||||
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void generatorMonthDetail(){
|
||||
Calendar monthCal = Calendar.getInstance();
|
||||
monthCal.setTime(new Date());
|
||||
monthCal.set(Calendar.DAY_OF_MONTH, 1);
|
||||
monthCal.set(Calendar.HOUR_OF_DAY, 0);
|
||||
monthCal.set(Calendar.MINUTE, 0);
|
||||
monthCal.set(Calendar.SECOND, 0);
|
||||
Date dateto = monthCal.getTime();
|
||||
monthCal.set(Calendar.MONTH, (monthCal.get(Calendar.MONTH) - 1));
|
||||
Date datefrom = monthCal.getTime();
|
||||
|
||||
logger.info("===============Start generator surcharge account month detail===============" + new Date());
|
||||
List<JSONObject> thisMonthDetail = clearingDistributedSurchargeMapper.getMonthDetailByClientId(datefrom, dateto);
|
||||
logger.info("this month details : " + thisMonthDetail.toString());
|
||||
|
||||
for (JSONObject detail : thisMonthDetail) {
|
||||
detail.put("send_mail", 0);
|
||||
detail.put("wx_send", 0);
|
||||
detail.put("settle_month", DateFormatUtils.format(datefrom, "yyyy-MM"));
|
||||
detail.put("create_time", new Date());
|
||||
financialSurchargeAccountDetailMapper.save(detail);
|
||||
}
|
||||
|
||||
logger.info("===============generator OVER===============" + new Date());
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<JSONObject> listSettledDatesInMonth(String mon) {
|
||||
List<JSONObject> settledDates = financialSurchargeAccountDetailMapper.listSettlementDatesInMonth(mon);
|
||||
|
||||
return settledDates;
|
||||
}
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
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")
|
||||
@RestController
|
||||
public class SurchargeAccountController {
|
||||
|
||||
|
||||
@Resource
|
||||
private SurchargeAccountService surchargeAccountService;
|
||||
|
||||
@ManagerMapping(value = "/month/{month}/settled_dates", role = {ManagerRole.ADMIN,ManagerRole.OPERATOR}, method = RequestMethod.GET)
|
||||
public List<JSONObject> surchargeAccountSettledDates(@ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager, @PathVariable String month) {
|
||||
return surchargeAccountService.listSettledDatesInMonth(month);
|
||||
}
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
package au.com.royalpay.payment.manage.task;
|
||||
|
||||
import au.com.royalpay.payment.manage.surchargeAccount.core.SurchargeAccountService;
|
||||
import au.com.royalpay.payment.tools.scheduler.SynchronizedScheduler;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
@Component
|
||||
@ConditionalOnProperty(value = "app.run-tasks", havingValue = "true")
|
||||
public class SurchargeAccountMonthTask {
|
||||
@Resource
|
||||
private SynchronizedScheduler synchronizedScheduler;
|
||||
@Resource
|
||||
private SurchargeAccountService surchargeAccountService;
|
||||
|
||||
|
||||
|
||||
|
||||
@Scheduled(cron = "0 30 6 1 * ?")
|
||||
public void generateSurchargeAccountDetail() {
|
||||
synchronizedScheduler.executeProcess("manage_task:generateSurchargeAccountMonth", 120_000, () ->
|
||||
surchargeAccountService.generatorMonthDetail());
|
||||
}
|
||||
}
|
@ -0,0 +1,31 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!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,
|
||||
SUM(IF(d.type='Credit',amount,0)) credit_amount,
|
||||
SUM(IF(d.type='Debit',amount,0)) debit_amount
|
||||
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 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 * 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
|
||||
]]>
|
||||
</select>
|
||||
|
||||
</mapper>
|
@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!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>
|
||||
</mapper>
|
@ -0,0 +1,111 @@
|
||||
<div class="content">
|
||||
<div class="row">
|
||||
<div class="col-md-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-xs-12">–>-->
|
||||
<!--<!–<label class="control-label col-xs-4 col-sm-2">Date Range</label>–>-->
|
||||
<!--<!–<div class="col-sm-10 col-xs-8">–>-->
|
||||
<!--<!–<div class="form-control-static form-inline">–>-->
|
||||
<!--<!–<div style="display: inline-block">–>-->
|
||||
<!--<!–<input class="form-control" id="date-from-input"–>-->
|
||||
<!--<!–ng-model="params.datefrom"–>-->
|
||||
<!--<!–uib-datepicker-popup size="10" placeholder="From"–>-->
|
||||
<!--<!–is-open="dateBegin.open" ng-click="dateBegin.open=true"–>-->
|
||||
<!--<!–datepicker-options="{maxDate:params.dateto||today}">–>-->
|
||||
<!--<!–</div>–>-->
|
||||
<!--<!–~–>-->
|
||||
<!--<!–<div style="display: inline-block">–>-->
|
||||
<!--<!–<input class="form-control" id="date-to-input"–>-->
|
||||
<!--<!–ng-model="params.dateto"–>-->
|
||||
<!--<!–uib-datepicker-popup size="10" placeholder="To"–>-->
|
||||
<!--<!–is-open="dateTo.open" ng-click="dateTo.open=true"–>-->
|
||||
<!--<!–datepicker-options="{minDate:params.datefrom,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>–>-->
|
||||
<!--<!–</div>–>-->
|
||||
<!--<!–</div>–>-->
|
||||
<!--<!–<button class="btn btn-success" type="button" ng-click="loadSettlementLogs(1)">–>-->
|
||||
<!--<!–<i class="fa fa-search"></i> Search–>-->
|
||||
<!--<!–</button>–>-->
|
||||
<!--<!–</div>–>-->
|
||||
<!--</div>-->
|
||||
<!--</div>-->
|
||||
<!--</div>-->
|
||||
<!--</div>-->
|
||||
<div class="box box-warning">
|
||||
<div class="box-header">
|
||||
<h3 class="box-title">Surcharge Account Details</h3>
|
||||
|
||||
</div>
|
||||
<div class="box-body table-responsive">
|
||||
<table class="table table-bordered table-hover table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Client Moniker</th>
|
||||
<th>Settle Date</th>
|
||||
<th>Credit Amount</th>
|
||||
<th>Debit Amount</th>
|
||||
<th>Create_time</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr ng-repeat="log in details">
|
||||
<td ng-bind="log.client_moniker"></td>
|
||||
<td ng-bind="log.settle_month"></td>
|
||||
<td ng-bind="log.credit_amount|currency:'AUD'"></td>
|
||||
<td ng-bind="log.debit_amount|currency:'AUD'"></td>
|
||||
<td ng-bind="log.create_time"></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="panel-footer" ng-if="settlementLogs.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="loadSettlementLogs()"
|
||||
previous-text="‹"
|
||||
next-text="›"
|
||||
first-text="«"
|
||||
last-text="»"></uib-pagination>
|
||||
<div class="row">
|
||||
<div class="col-xs-12">Total Records:{{pagination.totalCount}};Total
|
||||
Pages:{{pagination.totalPages}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.box-footer -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
@ -0,0 +1,149 @@
|
||||
/**
|
||||
* Created by yishuqian on 01/06/2017.
|
||||
*/
|
||||
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', {
|
||||
url: '/surcharge_account',
|
||||
templateUrl: '/static/payment/surchargeaccount/templates/client_surcharge_account.html',
|
||||
resolve: {
|
||||
partner: ['$http', function ($http) {
|
||||
return $http.get('/client/partner_info');
|
||||
}]
|
||||
},
|
||||
controller: 'clientSurchargeAccountCtrl'
|
||||
}).state('surcharge_account_month', {
|
||||
url: '/surcharge_account_month',
|
||||
templateUrl: '/static/payment/surchargeaccount/templates/account_month_logs.html',
|
||||
controller: 'surchargeAccountMonthCtrl'
|
||||
})
|
||||
}]);
|
||||
app.controller('clientSurchargeAccountCtrl', ['$scope', '$http','$state','$filter', 'commonDialog','partner', function ($scope, $http,$state,$filter, commonDialog, partner) {
|
||||
|
||||
$scope.partner = angular.copy(partner.data);
|
||||
|
||||
$scope.getBalance = function () {
|
||||
$scope.surcharge = {};
|
||||
|
||||
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();
|
||||
|
||||
|
||||
}]);
|
||||
app.controller('surchargeAccountMonthCtrl', ['$scope', '$http', '$filter', '$timeout', '$uibModal', 'commonDialog', 'chartParser',
|
||||
function ($scope, $http, $filter, $timeout, $uibModal, commonDialog, chartParser) {
|
||||
$scope.params = {year: new Date().getFullYear()};
|
||||
$scope.availableYears = [new Date().getFullYear() - 1, new Date().getFullYear()];
|
||||
$scope.initMonth = function (year) {
|
||||
$scope.params.year = year;
|
||||
$scope.months = [];
|
||||
for (var i = 1; i < 13; i++) {
|
||||
var mon = '00' + i;
|
||||
mon = mon.substr(mon.length - 2, 2);
|
||||
$scope.months.push(year + '-' + mon);
|
||||
}
|
||||
};
|
||||
$scope.initMonth(new Date().getFullYear());
|
||||
$scope.hasReport = function (mon) {
|
||||
var start = '2017-02';//todo modify in different country
|
||||
var end = $filter('date')(new Date().setMonth(new Date().getMonth()-1), 'yyyy-MM');
|
||||
return start <= mon && end >= mon
|
||||
};
|
||||
$scope.loadReport = function (mon) {
|
||||
|
||||
$http.get('/sys/surcharge_account/month/' + mon + '/settled_dates').then(function (resp) {
|
||||
$scope.report = {
|
||||
month: mon,
|
||||
details: resp.data
|
||||
};
|
||||
})
|
||||
};
|
||||
$scope.surchargeAccountDetail = function (client_moniker,mon) {
|
||||
$uibModal.open({
|
||||
templateUrl: '/static/payment/surchargeaccount/templates/partner_surcharge_account_dialog.html',
|
||||
controller: 'accountDetailCtrl',
|
||||
size: 'lg',
|
||||
resolve: {
|
||||
client_moniker: function () {
|
||||
return client_moniker;
|
||||
},
|
||||
month: function () {
|
||||
return mon;
|
||||
},
|
||||
transactions: ['$http', function ($http) {
|
||||
return $http.get('/sys/partners/' + client_moniker + '/account/transactions/date?date='+mon);
|
||||
}]
|
||||
}
|
||||
}).result.then(function () {
|
||||
$scope.loadReport($scope.report.month);
|
||||
}, function () {
|
||||
$scope.loadReport($scope.report.month);
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
|
||||
}]);
|
||||
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.canAddDetail = false;
|
||||
$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;
|
||||
});
|
||||
}
|
||||
|
||||
$scope.addDetail = function () {
|
||||
$scope.canAddDetail = true;
|
||||
};
|
||||
|
||||
$scope.cancel = function () {
|
||||
$scope.canAddDetail = false;
|
||||
$scope.params = {};
|
||||
}
|
||||
$scope.save = function () {
|
||||
$http.post('/sys/partners/' + client_moniker + '/account/save', {amount:$scope.params.amount,remark:$scope.params.remark}).then(function (resp) {
|
||||
$scope.getTransactions();
|
||||
$scope.getBalance();
|
||||
$scope.canAddDetail = false;
|
||||
$scope.params = {};
|
||||
}, function (resp) {
|
||||
commonDialog.alert({title: 'Error', content: resp.data.message, type: 'error'});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
}]);
|
||||
|
||||
|
||||
return app;
|
||||
});
|
@ -0,0 +1,76 @@
|
||||
<section class="content-header">
|
||||
<h1>Surcharge Account Detail</h1>
|
||||
<ol class="breadcrumb">
|
||||
<li>
|
||||
<i class="fa fa-sitemap"></i> Compliance
|
||||
</li>
|
||||
<li class="active">Surcharge Account Detail</li>
|
||||
</ol>
|
||||
</section>
|
||||
<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)"
|
||||
ng-bind="year"
|
||||
ng-class="{'active':year == params.year}"
|
||||
></button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="box-body">
|
||||
<div class="row">
|
||||
<div class="col-xs-3" 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>
|
||||
<h2 class="text-gray" ng-bind="mon.substring(5,7)" ng-if="!hasReport(mon)"></h2>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="box box-warning" ng-if="report">
|
||||
<div class="box-header">
|
||||
<span ng-bind="report.month"></span>
|
||||
</div>
|
||||
<div class="box-body table-responsive">
|
||||
<table class="table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>商户编号</th>
|
||||
<th>Short Name</th>
|
||||
<th>充值总额</th>
|
||||
<th>支出总额</th>
|
||||
<th>余额</th>
|
||||
<th>操作</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr ng-repeat="details in report.details">
|
||||
<td ng-bind="details.client_moniker"></td>
|
||||
<td ng-bind="details.short_name"></td>
|
||||
<td ng-bind="details.credit_amount|currency:'$'" style="color: green"></td>
|
||||
<td ng-bind="details.debit_amount|currency:'$'" style="color: red"></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>
|
||||
<!-- 等待邮件和微信推送模板 -->
|
||||
<!--<a style="cursor: pointer" > 催款</a>-->
|
||||
<!--<a style="cursor: pointer" ng-click="showDetail()">充值</a>-->
|
||||
<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>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
@ -0,0 +1,114 @@
|
||||
|
||||
<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" ng-if="partner.surcharge_mode=='distributed'">
|
||||
<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 class="col-sm-4" style="text-align: center" ng-if="code_url">
|
||||
<a class="thumbnail" download ng-href="{{code_url}}" uib-tooltip="Download">
|
||||
<img ng-src="{{code_url}}">
|
||||
</a>
|
||||
<p>
|
||||
<a ng-href="{{code_url}}" download><i class="fa fa-download"></i> Download Bill QR
|
||||
Code Image</a>
|
||||
</p>
|
||||
</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>
|
@ -0,0 +1,88 @@
|
||||
<div class="modal-header">
|
||||
<h4>Surcharge Account Detail{{partner.client_moniker?'('+partner.client_moniker+')':''}}</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">
|
||||
<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'}: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'}: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>
|
Loading…
Reference in new issue