master
duLingLing 5 years ago
parent f4834125cc
commit efc63cc373

@ -24,6 +24,7 @@
<dependency>
<groupId>au.com.royalpay.payment</groupId>
<artifactId>payment-core</artifactId>
<version>1.1.6</version>
</dependency>
<dependency>
<groupId>au.com.royalpay.payment</groupId>

@ -0,0 +1,36 @@
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 org.apache.ibatis.executor.keygen.Jdbc3KeyGenerator;
import java.util.List;
/**
* @Author DuLingLing
* @create 2019/11/13 0013 14:49
*/
@AutoMapper(tablename = "sys_client_incremental", pkName = "incremental_id", keyGenerator = Jdbc3KeyGenerator.class)
public interface ClientIncrementalMapper {
/**
*
* @param clientId
* @return
*/
@AutoSql(type = SqlType.SELECT)
List<JSONObject> findAllByclientMoniker(@Param("client_id") int clientId);
@AutoSql(type = SqlType.SELECT)
JSONObject findByClinetIdAndChannel(@Param("client_id")int clinet_id, @Param("channel")String channel);
@AutoSql(type = SqlType.INSERT)
void save(JSONObject saveIncrementalService);
@AutoSql(type = SqlType.UPDATE)
void update(JSONObject saveIncrementalService);
}

@ -475,4 +475,26 @@ public interface ClientManager {
JSONObject getClientInfoByAggree(JSONObject account);
JSONObject getComplianceFilesForBD(JSONObject account);
/**
*
*
* @param clientMoniker
* @return
*/
JSONObject partnerIncrementalService(String clientMoniker);
/**
* /
* @param clientMoniker
* @param incrementalService
*/
void changePartnerIncrementalService(String clientMoniker, JSONObject incrementalService,JSONObject manager);
/**
* /
* @param clientMoniker
* @param incrementalService
*/
void changeSwitchIncrementalService(String clientMoniker, JSONObject incrementalService,JSONObject manager);
}

@ -17,6 +17,7 @@ import au.com.royalpay.payment.core.PaymentChannelApi;
import au.com.royalpay.payment.core.exceptions.EmailException;
import au.com.royalpay.payment.core.exceptions.InvalidShortIdException;
import au.com.royalpay.payment.core.mappers.SysClientMapper;
import au.com.royalpay.payment.core.surcharge.IncrementalChannel;
import au.com.royalpay.payment.core.utils.OrderExpiryRuleResolver;
import au.com.royalpay.payment.manage.analysis.mappers.TransactionAnalysisMapper;
import au.com.royalpay.payment.manage.appclient.beans.AppClientBean;
@ -105,6 +106,7 @@ import org.springframework.ui.Model;
import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.thymeleaf.context.Context;
import org.thymeleaf.spring5.SpringTemplateEngine;
@ -162,6 +164,8 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
private StringRedisTemplate stringRedisTemplate;
@Resource
private ClientComplianceApply clientComplianceApply;
@Resource
private ClientIncrementalMapper clientIncrementalMapper;
@Value("${app.redis.prefix}")
private String redisPrefix;
@ -5891,4 +5895,76 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
return key;
}
public JSONObject partnerIncrementalService(String clientMoniker){
JSONObject client = clientMapper.findClientByMoniker(clientMoniker);
if(client==null){
throw new InvalidShortIdException();
}
List<JSONObject> service = clientIncrementalMapper.findAllByclientMoniker(client.getInteger("client_id"));
List<String> incrementalChannels = new ArrayList<>();
for (IncrementalChannel e : IncrementalChannel.values()) {
boolean exist = false;
for(JSONObject s : service){
exist = e.getChannel().equals(s.getString("channel"));
if(exist){
break;
}
}
if(!exist){
incrementalChannels.add(e.getChannel());
}
}
incrementalChannels.remove("system");
return new JSONObject(){{
put("all_service",service);
put("incremental_channel",incrementalChannels);
}};
}
public void changePartnerIncrementalService(String clientMoniker, JSONObject incrementalService,JSONObject manager){
JSONObject client = clientMapper.findClientByMoniker(clientMoniker);
if(client==null){
throw new InvalidShortIdException();
}
JSONObject existIncrementalService = clientIncrementalMapper.findByClinetIdAndChannel(client.getInteger("client_id"),incrementalService.getString("channel"));
JSONObject saveIncrementalService = new JSONObject();
if(existIncrementalService==null){
saveIncrementalService.put("incremental_id",UUID.randomUUID().toString());
saveIncrementalService.put("channel",incrementalService.getString("channel"));
saveIncrementalService.put("create_time",new Date());
saveIncrementalService.put("update_time",new Date());
saveIncrementalService.put("is_valid",1);
}else{
saveIncrementalService.put("incremental_id",incrementalService.getString("incremental_id"));
saveIncrementalService.put("update_time",new Date());
}
saveIncrementalService.put("client_id",client.getInteger("client_id"));
saveIncrementalService.put("operator",manager.getString("display_name"));
saveIncrementalService.put("incremental_mode",incrementalService.getInteger("incremental_mode"));
saveIncrementalService.put("incremental_rate_value",incrementalService.getInteger("incremental_mode")==1?incrementalService.getString("incremental_rate_value"):0);
saveIncrementalService.put("total_incremental_amount",incrementalService.getInteger("incremental_mode")!=1?incrementalService.getString("total_incremental_amount"):0);
if(existIncrementalService==null){
clientIncrementalMapper.save(saveIncrementalService);
}else{
clientIncrementalMapper.update(saveIncrementalService);
}
}
public void changeSwitchIncrementalService(String clientMoniker, JSONObject incrementalService, JSONObject manager){
JSONObject client = clientMapper.findClientByMoniker(clientMoniker);
if(client==null){
throw new InvalidShortIdException();
}
JSONObject existIncrementalService = clientIncrementalMapper.findByClinetIdAndChannel(client.getInteger("client_id"),incrementalService.getString("channel"));
if(existIncrementalService==null){
throw new BadRequestException("Incremental service is not exist");
}
existIncrementalService.put("update_time",new Date());
existIncrementalService.put("incremental_id",incrementalService.getString("incremental_id"));
existIncrementalService.put("is_valid",incrementalService.getInteger("is_valid"));
existIncrementalService.put("operator",manager.getString("display_name"));
clientIncrementalMapper.update(existIncrementalService);
}
}

@ -809,4 +809,34 @@ public class PartnerManageController {
public void switchPartnerCBChannelConfig(@PathVariable String clientMoniker, @PathVariable String channelKey, @RequestBody JSONObject channel) {
clientManager.partnerCBChannelConfig(clientMoniker, channelKey, channel.getString("channel_id"));
}
/**
*
* @param clientMoniker
* @return
*/
@ManagerMapping(value = "/{clientMoniker}/incremental_service", method = RequestMethod.GET, role = {ManagerRole.ADMIN, ManagerRole.OPERATOR})
public JSONObject getClientIncrementalService(@PathVariable String clientMoniker){
return clientManager.partnerIncrementalService(clientMoniker);
}
/**
* /
* @param clientMoniker
* @param incrementalService
*/
@ManagerMapping(value = "/{clientMoniker}/incremental_service", method = RequestMethod.POST, role = {ManagerRole.ADMIN, ManagerRole.OPERATOR})
public void updateClientIncrementalService(@PathVariable("clientMoniker") String clientMoniker,@RequestBody JSONObject incrementalService, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager){
clientManager.changePartnerIncrementalService(clientMoniker,incrementalService,manager);
}
/**
* /
* @param clientMoniker
* @param incrementalService
*/
@ManagerMapping(value = "/{clientMoniker}/incremental_service/status", method = RequestMethod.PUT, role = {ManagerRole.ADMIN, ManagerRole.OPERATOR})
public void switchClientIncrementalService(@PathVariable("clientMoniker") String clientMoniker,@RequestBody JSONObject incrementalService, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager){
clientManager.changeSwitchIncrementalService(clientMoniker,incrementalService,manager);
}
}

@ -602,4 +602,16 @@ public class PartnerViewController {
public void deleteAuthFiles(@PathVariable String fileId, @ModelAttribute(CommonConsts.PARTNER_STATUS) JSONObject account) {
clientManager.deleteAuthFiles(fileId);
}
/**
*
* @param clientMoniker
* @return
*/
@PartnerMapping(value = "/{clientMoniker}/incremental_service", method = RequestMethod.GET, roles = {PartnerRole.ADMIN, PartnerRole.MANAGER})
@ResponseBody
public JSONObject getClientIncrementalService(@PathVariable String clientMoniker){
return clientManager.partnerIncrementalService(clientMoniker);
}
}

@ -1035,6 +1035,10 @@ margin-bottom: 10%;"/>
</ul>
</li>
<li class="has-submenu" ui-sref-active="active">
<a ui-sref="partnerIncrementalService"><i class="fa fa-plus-square-o"></i>R Service</a>
</li>
</ul>
<!-- End navigation menu -->
</div> <!-- end #navigation -->

@ -78,7 +78,8 @@ var modules = [
{path: 'static/payment/surchargeaccount/partner-surcharge-account', module: 'surchargeAccountApp', roles: [1,2,3]},
{path: 'static/integralmall/coupon_cancellation', module: 'couponCancellation', roles: [1,2]},
{path: 'static/invoice/invoice_assistant', module: 'partnerInvoice', roles: [1]},
{path: 'static/payment/billqrcode/bill-qrcode-manage', module: 'billQrCodeManagement', roles: [1,2,3]}
{path: 'static/payment/billqrcode/bill-qrcode-manage', module: 'billQrCodeManagement', roles: [1,2,3]},
{path: 'static/incrementalService/partner-incremental-service', module: 'partnerIncrementalService', roles: [1,2,3]}
];
require(['angular', 'jquery'], function (angular, $) {

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

@ -0,0 +1,46 @@
define(['angular', 'uiBootstrap', 'uiRouter'], function (angular) {
'use strict';
var app = angular.module('partnerIncrementalService', ['ui.bootstrap', 'ui.router']);
app.config(['$stateProvider', function ($stateProvider) {
$stateProvider.state('partnerIncrementalService', {
url: '/partner_incremental_service',
templateUrl: '/static/incrementalService/templates/partner_incremental_service.html',
controller: 'partnerIncrementalServiceCtrl',
resolve:{
partner:['$http',function($http){
return $http.get('/client/partner_info');
}]
}
}).state('partnerIncrementalServiceInfo', {
url: '/partner_incremental_service_info',
templateUrl: '/static/incrementalService/templates/partner_incremental_service_info.html',
controller: 'partnerIncrementalServiceInfoCtrl',
params:{
service:null,
partner:null
}
});
}]);
app.controller('partnerIncrementalServiceCtrl', ['$scope', '$http', '$state', 'partner', function ($scope, $http, $state, partner) {
$scope.serviceAll = [];
$scope.channelOptions = [];
$scope.clientInfo = angular.copy(partner.data);
$scope.initDate = function(){
$http.get("/client/partner_info/"+$scope.clientInfo.client_moniker+"/incremental_service").then(function (res) {
$scope.serviceAll = res.data.all_service;
$scope.serviceAll.forEach(function(service){
service.logo_url = '/static/images/'+service.channel+'.jpg'
})
$scope.channelOptions = res.data.incremental_channel;
})
}
$scope.initDate();
$scope.queryServiceInfo = function(service){
$state.go('partnerIncrementalServiceInfo', {service: service,partner:$scope.clientInfo});
}
}]);
app.controller('partnerIncrementalServiceInfoCtrl',['$scope', '$http', '$state','$stateParams',function($scope,$http,$state,$stateParams){
debugger
}]);
return app;
});

@ -0,0 +1,20 @@
<div>
<h3 style="padding: 0px 0px 0px 20px">{{serviceAll.length>0?'已开通增值服务':'您尚未开通任何增值服务'}}</h3>
</div>
<div class="row" style="height: 100%">
<div class="col-sm-12">
<div class="table-responsive col-sm-12" ng-if="serviceAll.length>0">
<div class="col-sm-3" ng-repeat=" service in serviceAll">
<div style="height: 200px;width: 200px; line-height:150px;margin: 10px">
<div class="row">
<div class="col-sm-2" style="padding-left: 50px">
<img width="200px" height="100%" ng-src="{{service.logo_url}}" style="cursor:pointer" ng-click="queryServiceInfo(service)" >
</div>
<div class="col-sm-10">
</div>
</div>
</div>
</div>
</div>
</div>
</div>

@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
</body>
</html>

@ -197,6 +197,10 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter
url: '/permission_client',
templateUrl: 'static/payment/partner/templates/partner_permission.html',
controller: 'permissionClientCtrl'
}).state('partners.detail.incremental_service', {
url: '/incremental_service',
templateUrl: 'static/payment/partner/templates/incremental_service.html',
controller: 'incrementalServiceCtrl'
});
}]);
app.controller('partnerListCtrl', ['$scope', '$sce', '$http', '$filter', '$uibModal', 'businessStructuresMap', 'industryMap', 'stateMap', 'sectorMap', 'countryMap',
@ -5186,6 +5190,123 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter
};
}]);
app.controller('incrementalServiceCtrl',['$scope', '$http', '$uibModal', '$state', '$filter', 'commonDialog',function($scope, $http, $uibModal, $state, $filter, commonDialog){
$scope.serviceAll = {};
$scope.channelOptions=[];
$scope.initData = function(){
$http.get('/sys/partners/' + $scope.partner.client_moniker+'/incremental_service').then(function(res){
$scope.serviceAll = res.data.all_service;
$scope.serviceAll.forEach(function(service){
service.logo_url = '/static/images/'+service.channel+'.jpg'
})
$scope.channelOptions=res.data.incremental_channel;
})
}
$scope.initData();
$scope.newServiceChannelDialog = function (){
$uibModal.open({
templateUrl: '/static/payment/partner/templates/incremental_service_dialog.html',
controller: 'incrementalServiceDialogCtrl',
resolve: {
params: function(){
return {
isCreate:true,
clientMoniker:$scope.partner.client_moniker,
channelOptions:$scope.channelOptions,
serviceChannel:null
}
}
}
}).result.then(function () {
$scope.initData();
});
}
$scope.editServiceChannelDialog = function (serviceChannel){
$uibModal.open({
templateUrl: '/static/payment/partner/templates/incremental_service_dialog.html',
controller: 'incrementalServiceDialogCtrl',
resolve: {
params: function(){
return {
isCreate:false,
clientMoniker:$scope.partner.client_moniker,
channelOptions:$scope.channelOptions,
serviceChannel:serviceChannel
}
}
}
}).result.then(function () {
$scope.initData();
});
}
$scope.updateStatus = function(service){
commonDialog.confirm({
title: 'Update '+service.channel+ ' Incremental Service Status',
content: 'Are you sure update ' + service.channel + ' status',
choises: [
{label: 'Submit', className: 'btn-success', key: 1},
{label: 'Cancel', className: 'btn-warning', key: 0, dismiss: true}
]
}).then(function (choice) {
if (choice == 1) {
service.is_valid = !service.is_valid;
$http.put('/sys/partners/'+$scope.partner.client_moniker+'/incremental_service/status',service).then(function(res){
commonDialog.alert({
title: 'Success',
content: 'Update Service Successful!',
type: 'success'
});
$scope.initData();
},function (resp) {
commonDialog.alert({title: 'Error', content: resp.data.message, type: 'error'});
$scope.initData();
})
}
})
}
}]);
app.controller('incrementalServiceDialogCtrl',['$scope','$http','params','commonDialog',function($scope ,$http,params,commonDialog){
$scope.model ={};
$scope.ctrl = {sending: false};
$scope.isCreate = true;
$scope.initData =function(){
$scope.isCreate = angular.copy(params.isCreate);
if($scope.isCreate ){
$scope.model.incremental_mode = "1"
$scope.model.channel= angular.copy(params.channelOptions[0])
$scope.model.channelOptions= angular.copy(params.channelOptions)
}else{
$scope.model = angular.copy(params.serviceChannel);
$scope.model.incremental_mode = $scope.model.incremental_mode.toString()
}
}
$scope.initData();
$scope.save = function(form){
if (form.$invalid) {
angular.forEach(form, function (item, key) {
if (key.indexOf('$') < 0) {
item.$dirty = true;
}
});
return;
}
$scope.ctrl.sending = true;
$http.post('/sys/partners/'+params.clientMoniker+'/incremental_service',$scope.model).then(function(res){
commonDialog.alert({
title: 'Success',
content: $scope.isCreate?'Create':'Update'+' Service Successful!',
type: 'success'
});
$scope.ctrl.sending = false;
$scope.$close();
},function (resp) {
$scope.ctrl.sending = false;
commonDialog.alert({title: 'Error', content: resp.data.message, type: 'error'});
})
}
}])
app.filter('bdOrg', function () {

@ -0,0 +1,38 @@
<div class="row">
<div class="col-sm-12">
<div class="table-responsive col-sm-12">
<button class="btn btn-success" role="button" ng-if="channelOptions.length>0" ng-click="newServiceChannelDialog()" style="margin: 5px">新增增值服务</button>
<table class="table table-bordered table-hover table-striped">
<thead>
<tr>
<th>Logo</th>
<th>Channel</th>
<th>Mode</th>
<th>Rate Value</th>
<th>Total Amount</th>
<th>Operator</th>
<th>Create Time</th>
<th>Update Time</th>
<th>Operation</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="service in serviceAll">
<td><img height="80px" width="80px" ng-src="{{service.logo_url}}"/></td>
<td style="line-height: 80px">{{service.channel}}</td>
<td style="line-height: 80px">{{service.incremental_mode==1?'固定手续费':'固定金额扣款' }}</td>
<td style="line-height: 80px">{{service.incremental_rate_value!=null?service.incremental_rate_value+'%':'-'}}</td>
<td style="line-height: 80px">{{service.total_incremental_amount}}</td>
<td style="line-height: 80px">{{service.operator}}</td>
<td style="line-height: 80px">{{service.create_time}}</td>
<td style="line-height: 80px">{{service.update_time}}</td>
<td style="line-height: 80px">
<a role="button" ng-click="editServiceChannelDialog(service)" ng-if="'011'|withRole"><i class="fa fa-edit"></i></a> |
<a role="button" ng-click="updateStatus(service)">{{service.is_valid?'Disabled':'Enable'}}</a>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>

@ -0,0 +1,68 @@
<div class="modal-header">
<h4>{{isCreate?"New":"Edit"}} Service</h4>
</div>
<div class="modal-body">
<div class="alert alert-danger" ng-if="errmsg" ng-bind="errmsg"></div>
<div class="row">
<div class="col-sm-12">
<form novalidate name="service_form" class="form-horizontal">
<div class="form-group has-feedback" ng-if="isCreate"
ng-class="{'has-error':service_form.channel.$invalid && service_form.channel.$dirty}">
<label class="control-label col-sm-5">Service Channel:</label>
<div class="col-sm-6">
<select class="form-control" name="channel" id="channel-input" required
ng-model="model.channel"
ng-options="channel for channel in model.channelOptions">
</select>
<span ng-messages="service_form.channel.$error" ng-if="service_form.channel.$dirty" ng-message="required">Required Field</span>
</div>
</div>
<div class="form-group has-feedback"
ng-class="{'has-error':service_form.incremental_mode.$invalid && service_form.incremental_mode.$dirty}">
<label class="control-label col-sm-5">Mode:</label>
<div class="col-sm-6">
<select class="form-control" name="incrementalMode" id="incrementalMode-input" required
ng-model="model.incremental_mode">
<option value="1">固定手续费</option>
<option value="2">固定金额扣款</option>
</select>
<span ng-messages="service_form.incremental_mode.$error" ng-if="service_form.incremental_mode.$dirty" ng-message="required">Required Field</span>
</div>
</div>
<div class="form-group has-feedback" ng-if="model.incremental_mode==1" ng-class="{'has-error':service_form.incremental_rate_value.$invalid && service_form.incremental_rate_value.$dirty}">>
<label class="control-label col-sm-5" style="text-align: right">Rate Value:</label>
<div class="col-sm-6">
<div class="input-group">
<input type="number" name="incremental_rate_value" stringToNumber2 class="form-control" ng-model="model.incremental_rate_value"
min="0.0" step="0.1" id="incremental_rate_value" required>
<div class="input-group-addon">%</div>
</div>
<div ng-messages="service_form.incremental_rate_value.$error" ng-if="service_form.incremental_rate_value.$dirty" ng-message="required">
<div class="small text-danger" ng-message="min">
<i class="glyphicon glyphicon-alert"></i> No less than 0.0%
</div>
<div class="small text-danger" ng-message="required">
<i class="glyphicon glyphicon-alert"></i> Required Field
</div>
</div>
</div>
</div>
<div class="form-group has-feedback" ng-if="model.incremental_mode==2" ng-class="{'has-error':service_form.total_incremental_amount.$invalid && service_form.total_incremental_amount.$dirty}">>
<label class="control-label col-sm-5" style="text-align: right">Amount:</label>
<div class="col-sm-6">
<input type="number" name="total_incremental_amount" stringToNumber2 class="form-control" ng-model="model.total_incremental_amount"
min="0" id="total_incremental_amount" required>
<div ng-messages="service_form.total_incremental_amount.$error" ng-if="service_form.total_incremental_amount.$dirty" ng-message="required"></div>
</div>
</div>
</form>
</div>
</div>
</div>
<div class="modal-footer">
<button class="btn btn-success" type="button" ng-click="save(service_form)" ng-disabled="ctrl.sending">Submit</button>
<button class="btn btn-danger" type="button" ng-click="$dismiss()">Cancel</button>
</div>

@ -295,6 +295,9 @@
<li ui-sref-active="active" ng-if="partner.is_valid==1">
<a ui-sref=".permission_client">Permissions</a>
</li>
<li ui-sref-active="active" ng-if="partner.is_valid==1">
<a ui-sref=".incremental_service">Incremental Service</a>
</li>
</ul>
<div class="tab-content" ui-view>
<div class="panel panel-default">

Loading…
Cancel
Save