commit
9c5f01958a
@ -0,0 +1,35 @@
|
||||
package au.com.royalpay.payment.manage.dataAnalysis.core;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
|
||||
/**
|
||||
* @Author lvjian
|
||||
* @Date 2018/6/28 18:40
|
||||
*/
|
||||
public interface DataAnalysisService {
|
||||
|
||||
/**
|
||||
* 获取数据分析1
|
||||
* @param params
|
||||
* @param response
|
||||
* @return
|
||||
*/
|
||||
JSONObject getDataAnalysis1(JSONObject params, JSONObject response);
|
||||
|
||||
/**
|
||||
* 获取数据分析2
|
||||
* @param params
|
||||
* @param response
|
||||
* @return
|
||||
*/
|
||||
JSONObject getDataAnalysis2(JSONObject params, JSONObject response);
|
||||
|
||||
/**
|
||||
* 新需求
|
||||
* 获取cny_amount统计值
|
||||
* @param params
|
||||
* @param response
|
||||
* @return
|
||||
*/
|
||||
JSONObject getCnyAmount(JSONObject params, JSONObject response);
|
||||
}
|
||||
@ -0,0 +1,65 @@
|
||||
package au.com.royalpay.payment.manage.dataAnalysis.core;
|
||||
|
||||
import au.com.royalpay.payment.manage.analysis.mappers.ClientAnalysisMapper;
|
||||
import au.com.royalpay.payment.manage.analysis.mappers.TransactionAnalysisMapper;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.github.miemiedev.mybatis.paginator.domain.Order;
|
||||
import com.github.miemiedev.mybatis.paginator.domain.PageBounds;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author lvjian
|
||||
* @Date 2018/6/28 18:42
|
||||
*/
|
||||
@Service
|
||||
public class DataAnalysisServiceImpl implements DataAnalysisService {
|
||||
|
||||
@Resource
|
||||
private ClientAnalysisMapper clientAnalysisMapper;
|
||||
|
||||
@Resource
|
||||
private TransactionAnalysisMapper transactionAnalysisMapper;
|
||||
|
||||
@Override
|
||||
public JSONObject getDataAnalysis1(JSONObject params, JSONObject response) {
|
||||
|
||||
//新加的商户数
|
||||
response.put("new_partners", clientAnalysisMapper.countNewClients(params));
|
||||
//总商户数
|
||||
response.put("total_partners", clientAnalysisMapper.countClients(params));
|
||||
//产生交易的商户数
|
||||
response.put("traded_partners", clientAnalysisMapper.countTradedPartners(params));
|
||||
//交易总额
|
||||
response.put("trade_amount", transactionAnalysisMapper.analysisTotalAmount(params));
|
||||
return response;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject getDataAnalysis2(JSONObject params, JSONObject response) {
|
||||
|
||||
//交易笔数
|
||||
response.put("trade_count", transactionAnalysisMapper.analysisTotalCount(params));
|
||||
List<JSONObject> topOrders = transactionAnalysisMapper.getTopOrders(params);
|
||||
//最大交易额
|
||||
if (!topOrders.isEmpty()) {
|
||||
response.put("max_order", topOrders.get(0).get("aud_fee"));
|
||||
} else {
|
||||
response.put("max_order", 0);
|
||||
}
|
||||
//总消费人数
|
||||
response.put("total_customers", transactionAnalysisMapper.countCustomers(params));
|
||||
//老客户人数
|
||||
response.put("old_customers", transactionAnalysisMapper.countOldCustomers(params));
|
||||
return response;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject getCnyAmount(JSONObject params, JSONObject response) {
|
||||
response.put("cny_amount", transactionAnalysisMapper.getCnyAmount(params));
|
||||
return response;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,54 @@
|
||||
package au.com.royalpay.payment.manage.dataAnalysis.web;
|
||||
|
||||
import au.com.royalpay.payment.manage.dataAnalysis.core.DataAnalysisService;
|
||||
import au.com.royalpay.payment.manage.dataAnalysis.util.MyUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.apache.commons.lang3.time.DateUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.text.DateFormat;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @Author lvjian
|
||||
* @Date 2018/6/28 18:32
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping(value = "/out")
|
||||
public class DataAnalysisController {
|
||||
|
||||
@Autowired
|
||||
private DataAnalysisService dataAnalysisService;
|
||||
|
||||
@RequestMapping(value = "/data_analysis")
|
||||
public JSONObject dataAnalysis(@RequestParam(value = "begin", required = false) String begin,
|
||||
@RequestParam(value = "offset", defaultValue = "1") Integer offset) throws ParseException {
|
||||
|
||||
JSONObject params = new JSONObject();
|
||||
if (begin == null) {
|
||||
Date beginInit = MyUtil.getYMD(new Date());
|
||||
Date endInit = DateUtils.addDays(beginInit,offset);
|
||||
params.put("begin",beginInit);
|
||||
params.put("end",endInit);
|
||||
} else {
|
||||
DateFormat format = new SimpleDateFormat("yyyyMMdd");
|
||||
if (offset < 0) {
|
||||
params.put("end", format.parse(begin));
|
||||
params.put("begin", DateUtils.addDays(format.parse(begin),offset));
|
||||
} else {
|
||||
params.put("begin", format.parse(begin));
|
||||
params.put("end", DateUtils.addDays(format.parse(begin),offset));
|
||||
}
|
||||
}
|
||||
JSONObject response = new JSONObject();
|
||||
response = dataAnalysisService.getDataAnalysis1(params,response);
|
||||
response = dataAnalysisService.getDataAnalysis2(params,response);
|
||||
response = dataAnalysisService.getCnyAmount(params, response);
|
||||
return response;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,29 @@
|
||||
package au.com.royalpay.payment.manage.mappers.risk;
|
||||
|
||||
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 com.github.miemiedev.mybatis.paginator.domain.PageBounds;
|
||||
import com.github.miemiedev.mybatis.paginator.domain.PageList;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
/**
|
||||
* Create by yixian at 2017-12-21 11:45
|
||||
*/
|
||||
@AutoMapper(tablename = "risk_customer_black_list", pkName = "openid")
|
||||
public interface RiskCustomerBlackListMapper {
|
||||
@AutoSql(type = SqlType.SELECT)
|
||||
JSONObject findByOpenid(@Param("openid") String openid);
|
||||
|
||||
@AutoSql(type = SqlType.SELECT)
|
||||
@AdvanceSelect(addonWhereClause = "is_valid=1")
|
||||
PageList<JSONObject> query(JSONObject params, PageBounds pagination);
|
||||
|
||||
@AutoSql(type = SqlType.UPDATE)
|
||||
void update(JSONObject customerBlackList);
|
||||
|
||||
@AutoSql(type = SqlType.INSERT)
|
||||
void save(JSONObject customerBlackList);
|
||||
}
|
||||
@ -0,0 +1,46 @@
|
||||
package au.com.royalpay.payment.manage.risk.bean;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
public class QueryBlackListCustomer {
|
||||
private String openid;
|
||||
|
||||
private int page = 1;
|
||||
private int limit = 10;
|
||||
|
||||
|
||||
|
||||
public JSONObject toParams() {
|
||||
JSONObject params = new JSONObject();
|
||||
if(StringUtils.isNotEmpty(openid)){
|
||||
params.put("openid", this.openid);
|
||||
}
|
||||
params.put("is_valid", 1);
|
||||
return params;
|
||||
}
|
||||
|
||||
public String getOpenid() {
|
||||
return openid;
|
||||
}
|
||||
|
||||
public void setOpenid(String openid) {
|
||||
this.openid = openid;
|
||||
}
|
||||
|
||||
public int getPage() {
|
||||
return page;
|
||||
}
|
||||
|
||||
public void setPage(int page) {
|
||||
this.page = page;
|
||||
}
|
||||
|
||||
public int getLimit() {
|
||||
return limit;
|
||||
}
|
||||
|
||||
public void setLimit(int limit) {
|
||||
this.limit = limit;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,15 @@
|
||||
app.yeepay.merchant-id=
|
||||
app.yeepay.app-key=cbp_120180219
|
||||
app.yeepay.aes-secret-key=
|
||||
app.yeepay.public-key.store-type=string
|
||||
app.yeepay.public-key.cert-type=RSA2048
|
||||
app.yeepay.public-key.value=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6p0XWjscY+gsyqKRhw9MeLsEmhFdBRhT2emOck/F1Omw38ZWhJxh9kDfs5HzFJMrVozgU+SJFDONxs8UB0wMILKRmqfLcfClG9MyCNuJkkfm0HFQv1hRGdOvZPXj3Bckuwa7FrEXBRYUhK7vJ40afumspthmse6bs6mZxNn/mALZ2X07uznOrrc2rk41Y2HftduxZw6T4EmtWuN2x4CZ8gwSyPAW5ZzZJLQ6tZDojBK4GZTAGhnn3bg5bBsBlw2+FLkCQBuDsJVsFPiGh/b6K/+zGTvWyUcu+LUj2MejYQELDO3i2vQXVDk7lVi2/TcUYefvIcssnzsfCfjaorxsuwIDAQAB
|
||||
app.yeepay.public-key.password=
|
||||
app.yeepay.private-key.store-type=string
|
||||
app.yeepay.private-key.cert-type=RSA2048
|
||||
app.yeepay.private-key.value=MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCdaxJm3b5bvPZHvvXDfJ4NUiG7yISRYgUfiQycVKCJZ2jL+Y29Hmcnc1hPMZjVbJYPkhaIp+f92j7qf5P/qo+Ru4DyY3HhzsJAZMMWVlWeaEG+nZsyN06XC7NiUrFMLUAyqtaYRPDBKHKss54at16rQO7UoqXVqhKZyWdBgRbX0J3X0z82LEh11u8Izi/mUH42NY6ttkDsxBzXeNcT81RHrm9A/R/6AzzykFAPxGVdjjmbYnrk/WUwLDaKdf1RvDF/kWSCmbzQSX/D24UcDekd50TJHaqhjvBVFwLtiFWAO7xudEDhByfj22YOZuhuddyhJygkUI996IKtl+UFIfI1AgMBAAECggEATWTgBj0NIxNTTlDfib4SAuCXfziFnOjBNhDuZ0ngJ830oxxNiGaTNr0p9L2gs4WQfZVIiOVsVM1hU29n9zIHJhI2wnUL/4Xk0T35AFlv/NKrSCk6rUSt2etBxZx8WMSCpKaDnRd/+qeFQc2JdP8khzQEd/yDZfoY7Q0tO/JYpb++XMFYBRpLINYwH8xteTAeRGp1A5+UwvPMJelNeBlPqMqTAPruh/yLUvYg1/rJjkOUi0yOUyKhs+NJDOXdBcrSXswdJyMMITYQ9dhpWFz4/imklHDKk29+Oy5uEGB1OQvTW469Cm2b2suAyvI4oE1pAFb6dGz6uE9fwzJljM1+IQKBgQDshMwyOC3BmXOo54o92cUwYR0TJg0KHQAbJLirQxlX4ILUGxxEFsv2TdVzushYS/1K8zecz9VQnch19mo+qyxfdq/FNXe1DDXolnu2AoYVvqpeCXumjmz4v2dlBW2TTFvmUpy0QK2QImgBW1/sjI88OgiJHdyqaqR0ASMLB1mGWQKBgQCqYl82MSqUqRl2yTiW+h9lymlgXWl5qFx/J3YGMURz3Xq5qzK4swEYfHfmkofNNpTXwIbDjGGq/ipZZLmyLfS68PRnquJEwCyFX3cgXUKg8380nDPdUQxsLpvMupUuKjyNhN4twpy2A/Ti53UC7vx5J+Z/mVjE3QgaURIAEBSHPQKBgQCOI0x3za0p0KdiVSuN+gZ4CZSoglCJyF3c8heMzLk5R3I4N8an4K9YaPQjJZfrAFfLKBk+wuPmG7xxr9Gvsbzr7e657GTxR9JJ4c2c1y1vefL2qmpF8QfqAVUIr9dnExeTdgg4hzoHCbZJQnmGNf6KajHg/TI0s/v6vwgpQ5R4mQKBgDI3Kd574RPNPp7+sPn2H5jNbf8jqLldQF2NUMCEdqs7RDdCWIGM6C7CSEghOXrmsjlgGZe6YPKXU/3irMPxvWX3K+D9wRAIH1bzitV0BvYOrZfgzXxVrbaYifxtpRflBNGkriKIb81JHzxcgOTrcGd4tfs3Q61Jg2DWMdro4lP1AoGBAOJ8JLkbrODRvHp9fCy9cOiF0LD/fZBW49l6xQbx7lLtzbwa/nk672hFhzfy565j4ejywykVIOWmoMS5RqWXB07rbyF0OZrfEcLPArfXZ4iE6T9OZ2UJLK0gdUWz4oYWBRK7NQd5qEMOiUFy8YOGgT+dESVYwN2irwLikuET0S9a
|
||||
app.yeepay.private-key.password=
|
||||
app.yeepay.http-client.connect-timeout=30000
|
||||
app.yeepay.http-client.read-timeout=30000
|
||||
app.yeepay.http-client.max-conn-total=200
|
||||
app.yeepay.http-client.max-conn-per-route=0
|
||||
Binary file not shown.
@ -0,0 +1,163 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Merchant Locations</title>
|
||||
<meta name="viewport" content="initial-scale=1.0, user-scalable=no">
|
||||
<script type="text/javascript" src="/static/lib/jquery/jquery-2.1.4.min.js"></script>
|
||||
<meta charset="utf-8">
|
||||
<style>
|
||||
#map {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
html, body {
|
||||
height: 100%;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.controls {
|
||||
margin-top: 10px;
|
||||
border: 1px solid transparent;
|
||||
border-radius: 2px 0 0 2px;
|
||||
box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
height: 32px;
|
||||
outline: none;
|
||||
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
#pac-input {
|
||||
background-color: #fff;
|
||||
font-family: Roboto;
|
||||
font-size: 15px;
|
||||
font-weight: 300;
|
||||
margin-left: 12px;
|
||||
padding: 0 11px 0 13px;
|
||||
text-overflow: ellipsis;
|
||||
width: 300px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<input id="pac-input" class="controls" type="text" placeholder="Search Merchant Location">
|
||||
<div id="map"></div>
|
||||
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyDUu6qXRV-j24rSdbPOMfVdTN1-2OfC2o8&libraries=places"
|
||||
type="text/javascript"></script>
|
||||
|
||||
<!--<script src="http://maps.google.cn/maps/api/js?sensor=true&key=AIzaSyDNx0I5o5U0HWPjpHqB4N-y4_f-GLZq4oQ®ion=aus&language=zh-CN"-->
|
||||
<!--type="text/javascript"></script>-->
|
||||
<script>
|
||||
var merchant_location;
|
||||
|
||||
function initMap() {
|
||||
var infoWindow = new google.maps.InfoWindow;
|
||||
try {
|
||||
merchant_location = JSON.parse(window.parent.document.getElementById('merchant_location').innerText);
|
||||
} catch (err) {
|
||||
merchant_location = null;
|
||||
}
|
||||
var map = new google.maps.Map(document.getElementById('map'), {
|
||||
zoom: 13,
|
||||
center: {lat: -33.8688, lng: 151.2195},
|
||||
mapTypeId: 'roadmap'
|
||||
});
|
||||
if (merchant_location) {
|
||||
var point = new google.maps.LatLng(
|
||||
parseFloat(merchant_location.latitude),
|
||||
parseFloat(merchant_location.longitude)
|
||||
);
|
||||
map.setCenter(point, 3);
|
||||
|
||||
var infowincontent = document.createElement('div');
|
||||
var strong = document.createElement('strong');
|
||||
strong.textContent = merchant_location.short_name + '(' + merchant_location.client_moniker + ')';
|
||||
infowincontent.appendChild(strong);
|
||||
infowincontent.appendChild(document.createElement('br'));
|
||||
|
||||
var merchant_address = document.createElement('p');
|
||||
merchant_address.textContent = 'Address: ' + merchant_location.address;
|
||||
infowincontent.appendChild(merchant_address);
|
||||
|
||||
var contact_bd = document.createElement('text');
|
||||
contact_bd.setAttribute("style", "color:blue");
|
||||
contact_bd.textContent = 'BD:' + merchant_location.bd_user_name;
|
||||
infowincontent.appendChild(contact_bd);
|
||||
}
|
||||
|
||||
// var add_view = window.parent.document.getElementById('add_view').innerText;
|
||||
var add_view = 'true';
|
||||
// Create the search box and link it to the UI element.
|
||||
var input = document.getElementById('pac-input');
|
||||
var searchBox = new google.maps.places.SearchBox(input);
|
||||
map.controls[google.maps.ControlPosition.TOP_LEFT].push(input);
|
||||
if (add_view === 'true') {
|
||||
$('#pac-input').show();
|
||||
// Bias the SearchBox results towards current map's viewport.
|
||||
map.addListener('bounds_changed', function () {
|
||||
searchBox.setBounds(map.getBounds());
|
||||
});
|
||||
|
||||
searchBox.addListener('places_changed', function () {
|
||||
var places = searchBox.getPlaces();
|
||||
if (places.length == 0) {
|
||||
return;
|
||||
}
|
||||
marker.setMap(null);
|
||||
places.forEach(function (place) {
|
||||
if (!place.geometry) {
|
||||
console.log("Returned place contains no geometry");
|
||||
return;
|
||||
}
|
||||
marker = new google.maps.Marker({
|
||||
map: map,
|
||||
position: place.geometry.location
|
||||
});
|
||||
marker.setMap(map);
|
||||
map.setCenter(place.geometry.location, 3);
|
||||
});
|
||||
});
|
||||
}
|
||||
var marker = new google.maps.Marker();
|
||||
if (merchant_location) {
|
||||
marker = new google.maps.Marker({
|
||||
map: map,
|
||||
position: point
|
||||
});
|
||||
}
|
||||
var geocoder = new google.maps.Geocoder();
|
||||
map.addListener('click', function (event) {
|
||||
var editmap = window.parent.document.getElementById('editmap').innerText;
|
||||
if (editmap === 'true') {
|
||||
marker.setMap(null);
|
||||
marker = new google.maps.Marker({
|
||||
map: map,
|
||||
position: event.latLng
|
||||
});
|
||||
marker.setMap(map);
|
||||
merchant_location = {};
|
||||
geocoder.geocode({
|
||||
'latLng': event.latLng
|
||||
}, function (results, status) {
|
||||
if (status == google.maps.GeocoderStatus.OK) {
|
||||
if (results[0]) {
|
||||
merchant_location.address = results[0].formatted_address;
|
||||
merchant_location.latitude = event.latLng.lat();
|
||||
merchant_location.longitude = event.latLng.lng();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
if (merchant_location) {
|
||||
marker.addListener('mouseover', function () {
|
||||
infoWindow.setContent(infowincontent);
|
||||
infoWindow.open(map, marker);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
initMap();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@ -0,0 +1,41 @@
|
||||
define(['../app'], function (app) {
|
||||
'use strict';
|
||||
|
||||
var yeepayBusinessContentMap = [
|
||||
{
|
||||
"label": "服务贸易",
|
||||
"value": "SERVICETRADE"
|
||||
},
|
||||
{
|
||||
"label": "货物贸易",
|
||||
"value": "GOODSTRADE"
|
||||
},
|
||||
{
|
||||
"label": "留学",
|
||||
"value": "OVERSEASTUDY"
|
||||
},
|
||||
{
|
||||
"label": "酒店机票",
|
||||
"value": "HOTELTICKET"
|
||||
},
|
||||
{
|
||||
"label": "国际运输",
|
||||
"value": "INTTRANSPORT"
|
||||
},
|
||||
{
|
||||
"label": "旅游服务",
|
||||
"value": "TOURSERVICE"
|
||||
},
|
||||
{
|
||||
"label": "保险",
|
||||
"value": "INSURANCE"
|
||||
}
|
||||
];
|
||||
app.factory('yeepayBusinessContentMap', function () {
|
||||
return {
|
||||
configs: function () {
|
||||
return yeepayBusinessContentMap;
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
@ -0,0 +1,45 @@
|
||||
define(['../app'], function (app) {
|
||||
'use strict';
|
||||
|
||||
var yeepayIndustryMap = [
|
||||
{
|
||||
"label": "货物贸易",
|
||||
"value": "ehk100000"
|
||||
},
|
||||
{
|
||||
"label": "旅游",
|
||||
"value": "ehk200000"
|
||||
},
|
||||
{
|
||||
"label": "文化教育",
|
||||
"value": "ehk300000"
|
||||
},
|
||||
{
|
||||
"label": "服务贸易",
|
||||
"value": "ehk400000"
|
||||
},
|
||||
{
|
||||
"label": "物流",
|
||||
"value": "ehk500000"
|
||||
},
|
||||
{
|
||||
"label": "数字娱乐",
|
||||
"value": "ehk600000"
|
||||
},
|
||||
{
|
||||
"label": "金融保险",
|
||||
"value": "ehk700000"
|
||||
},
|
||||
{
|
||||
"label": "其他",
|
||||
"value": "ehk999999"
|
||||
}
|
||||
];
|
||||
app.factory('yeepayIndustryMap', function () {
|
||||
return {
|
||||
configs: function () {
|
||||
return yeepayIndustryMap;
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 59 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 4.0 KiB |
@ -0,0 +1,181 @@
|
||||
<div class="content">
|
||||
<form novalidate name="subForm">
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">Apply Yeepay Sub Merchant Id</div>
|
||||
<div class="panel-body">
|
||||
<div class="form-horizontal">
|
||||
<div class="form-group"
|
||||
ng-class="{'has-error':subForm.business_content.$invalid && subForm.business_content.$dirty}">
|
||||
<label class="control-label col-sm-3" for="business_content">* Business Content</label>
|
||||
<div class="col-sm-8">
|
||||
<select class="form-control" name="business_content"
|
||||
ng-model="subMerchantInfo.business_content"
|
||||
id="business_content" required
|
||||
ng-options="business_content.value as business_content.label for business_content in yeepay_business_contents">
|
||||
<option value="">Please Choose</option>
|
||||
</select>
|
||||
<div ng-messages="subForm.business_content.$error" ng-if="subForm.business_content.$dirty">
|
||||
<p class="small text-danger" ng-message="required">Required Field</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="form-group"
|
||||
ng-class="{'has-error':subForm.industry.$invalid && subForm.industry.$dirty}">
|
||||
<label class="control-label col-sm-3" for="industry">* Business Category</label>
|
||||
<div class="col-sm-8">
|
||||
<select class="form-control" name="industry"
|
||||
ng-model="subMerchantInfo.industry"
|
||||
id="industry" required
|
||||
ng-options="industry.value as industry.label for industry in yeepay_industries">
|
||||
<option value="">Please Choose</option>
|
||||
</select>
|
||||
<div ng-messages="subForm.industry.$error" ng-if="subForm.industry.$dirty">
|
||||
<p class="small text-danger" ng-message="required">Required Field</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-3" >* Corporate ID Card Front</label>
|
||||
<div class="col-sm-8">
|
||||
<div class="form-control-static">
|
||||
<button class="btn btn-success" type="button"
|
||||
ngf-select="uploadLegalIDcardFront($file)"
|
||||
accept="image/*">
|
||||
<i class="fa fa-upload"></i> Upload Corporate ID Card Front
|
||||
</button>
|
||||
</div>
|
||||
<uib-progressbar value="legalIDcardFrontProgress.value"
|
||||
ng-if="legalIDcardFrontProgress"></uib-progressbar>
|
||||
<div ng-if="legalIDcardFront">Url:{{legalIDcardFront}}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-3" >* Corporate ID Card Back</label>
|
||||
<div class="col-sm-8">
|
||||
<div class="form-control-static">
|
||||
<button class="btn btn-success" type="button"
|
||||
ngf-select="uploadLegalIDcardBack($file)"
|
||||
accept="image/*">
|
||||
<i class="fa fa-upload"></i> Upload Corporate ID Card Back
|
||||
</button>
|
||||
</div>
|
||||
<uib-progressbar value="legalIDcardBackProgress.value"
|
||||
ng-if="legalIDcardBackProgress"></uib-progressbar>
|
||||
<div ng-if="legalIDcardBack">Url:{{legalIDcardBack}}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-3" >* Business Licence</label>
|
||||
<div class="col-sm-8">
|
||||
<div class="form-control-static">
|
||||
<button class="btn btn-success" type="button"
|
||||
ngf-select="uploadBusinessLicence($file)"
|
||||
accept="image/*">
|
||||
<i class="fa fa-upload"></i> Upload Business Licence
|
||||
</button>
|
||||
</div>
|
||||
<uib-progressbar value="businessLicenceProgress.value"
|
||||
ng-if="businessLicenceProgress"></uib-progressbar>
|
||||
<div ng-if="businessLicence">Url:{{businessLicence}}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-3" >* Tax Level</label>
|
||||
<div class="col-sm-8">
|
||||
<div class="form-control-static">
|
||||
<button class="btn btn-success" type="button"
|
||||
ngf-select="uploadTaxLevel($file)"
|
||||
accept="image/*">
|
||||
<i class="fa fa-upload"></i> Upload Tax Level
|
||||
</button>
|
||||
</div>
|
||||
<uib-progressbar value="taxLevelProgress.value"
|
||||
ng-if="taxLevelProgress"></uib-progressbar>
|
||||
<div ng-if="taxLevel">Url:{{taxLevel}}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-3" >* Bank Account Opening Permit</label>
|
||||
<div class="col-sm-8">
|
||||
<div class="form-control-static">
|
||||
<button class="btn btn-success" type="button"
|
||||
ngf-select="uploadBankAccountOpen($file)"
|
||||
accept="image/*">
|
||||
<i class="fa fa-upload"></i> Upload Bank Account Opening Permit
|
||||
</button>
|
||||
</div>
|
||||
<uib-progressbar value="bankAccountOpenProgress.value"
|
||||
ng-if="bankAccountOpenProgress"></uib-progressbar>
|
||||
<div ng-if="bankAccountOpen">Url:{{bankAccountOpen}}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-3" >* Organization Code Proof</label>
|
||||
<div class="col-sm-8">
|
||||
<div class="form-control-static">
|
||||
<button class="btn btn-success" type="button"
|
||||
ngf-select="uploadOrgCode($file)"
|
||||
accept="image/*">
|
||||
<i class="fa fa-upload"></i> Upload Organization Code Proof
|
||||
</button>
|
||||
</div>
|
||||
<uib-progressbar value="orgCodeProgress.value"
|
||||
ng-if="orgCodeProgress"></uib-progressbar>
|
||||
<div ng-if="orgCode">Url:{{orgCode}}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-3" >Non-standard Protocol File</label>
|
||||
<div class="col-sm-8">
|
||||
<div class="form-control-static">
|
||||
<button class="btn btn-success" type="button"
|
||||
ngf-select="uploadNonStanProtocol($file)"
|
||||
accept="image/*">
|
||||
<i class="fa fa-upload"></i> Upload Non-standard Protocol File
|
||||
</button>
|
||||
</div>
|
||||
<uib-progressbar value="nonStanProtocolProgress.value"
|
||||
ng-if="nonStanProtocolProgress"></uib-progressbar>
|
||||
<div ng-if="nonStanProtocol">Url:{{nonStanProtocol}}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-3" >Other Zip File</label>
|
||||
<div class="col-sm-8">
|
||||
<div class="form-control-static">
|
||||
<button class="btn btn-success" type="button"
|
||||
ngf-select="uploadZipPath($file)"
|
||||
accept="image/*">
|
||||
<i class="fa fa-upload"></i> Upload Other Zip File
|
||||
</button>
|
||||
</div>
|
||||
<uib-progressbar value="zipPathProgress.value"
|
||||
ng-if="zipPathProgress"></uib-progressbar>
|
||||
<div ng-if="zipPath">Url:{{zipPath}}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="btn-group margin-bottom margin-top">
|
||||
<button class="btn btn-success" type="button"
|
||||
ng-click="saveYeepayApply(subForm)">Submit
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
@ -0,0 +1,76 @@
|
||||
<div ui-view>
|
||||
<section class="content-header">
|
||||
<h1>Blacklist</h1>
|
||||
<ol class="breadcrumb">
|
||||
<li><i class="fa fa-list-alt"></i> Risk Manager</li>
|
||||
<li class="active">Customer Blacklist</li>
|
||||
</ol>
|
||||
</section>
|
||||
<section class="content">
|
||||
<div class="box box-warning">
|
||||
<div class="box-header">
|
||||
<div class="form-inline">
|
||||
<div class="form-group">
|
||||
<label class="control-label" for="partner-code-search">Openid</label>
|
||||
<input type="text" class="form-control" id="partner-code-search"
|
||||
ng-enter="loadCustomerBlackList(1)"
|
||||
ng-model="params.openid">
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<button class="btn btn-primary" type="button" ng-click="loadCustomerBlackList(1)"><i
|
||||
class="fa fa-search"></i></button>
|
||||
</div>
|
||||
|
||||
<div class="form-group pull-right">
|
||||
<button class="btn btn-info" type="button" ng-click="save()"><i class="fa fa-plus"></i>Add</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="box box-warning">
|
||||
<div class="box-header">Customer</div>
|
||||
<div class="box-body table-responsive">
|
||||
<table class="table table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Openid</th>
|
||||
<th>Customer</th>
|
||||
<th>Operation Time</th>
|
||||
<th>Remark</th>
|
||||
<th>Operation</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr ng-repeat="customer in customerList">
|
||||
<td>{{customer.openid}}</td>
|
||||
<td style="white-space: nowrap;overflow: hidden;text-overflow:ellipsis;">
|
||||
<img ng-src="{{customer.headimg}}" style="height: 30px;width:30px;" class="img-circle" ng-if="customer.headimg"> {{customer.nickname}}
|
||||
</td>
|
||||
<td>{{customer.creation_date}}</td>
|
||||
<td>{{customer.remark}}</td>
|
||||
<td>
|
||||
<a role="button" class="text-bold text-danger"
|
||||
ng-click="disableCustomer(customer.openid)">Disable</a>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="modal-footer">
|
||||
<uib-pagination ng-if="customerList.length"
|
||||
class="pagination"
|
||||
total-items="pagination.totalCount"
|
||||
boundary-links="true"
|
||||
ng-model="pagination.page"
|
||||
items-per-page="pagination.limit"
|
||||
max-size="10"
|
||||
ng-change="loadCustomerBlackList()"
|
||||
previous-text="‹"
|
||||
next-text="›"
|
||||
first-text="«"
|
||||
last-text="»"></uib-pagination>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
@ -0,0 +1,28 @@
|
||||
<section class="content-header">
|
||||
<h1>New Customer Blacklist</h1>
|
||||
</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">
|
||||
<form role="form" style="margin:0px auto;width: 50%">
|
||||
<div class="form-group">
|
||||
<label>Open ID</label>
|
||||
<input ng-model="params.openid" class="form-control" type="text" />
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Remark</label>
|
||||
<input ng-model="params.remark" class="form-control" type="text" />
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<button class="btn btn-primary btn-block" ng-click="addCustomer()">save</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -0,0 +1,53 @@
|
||||
<div class="modal-header">
|
||||
<h4>Edit Risk Merchants</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<form novalidate name="accountForm" class="form-horizontal">
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-3" for="client-moniker">Client Moniker</label>
|
||||
<div class="col-sm-7">
|
||||
<input class="form-control" type="text" id="client-moniker" name="client_moniker"
|
||||
ng-model="attentions.client_moniker" disabled>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-3" for="attentions-remark">Remark</label>
|
||||
<div class="col-sm-7">
|
||||
<input class="form-control" type="text" id="attentions-remark" name="remark"
|
||||
ng-model="attentions.remark">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-3">Channels</label>
|
||||
<p class="checkbox-inline checkbox col-sm-7">
|
||||
<label>
|
||||
<input type="checkbox" ng-model="attentions.enjoin_wechat" name="WeChat|微信">WeChat|微信
|
||||
</label>
|
||||
<label>
|
||||
<input type="checkbox" ng-model="attentions.enjoin_alipay" name="Alipay|支付宝">Alipay|支付宝
|
||||
</label>
|
||||
<label>
|
||||
<input type="checkbox" ng-model="attentions.enjoin_bestpay" name="Bestpay|翼支付">Bestpay|翼支付
|
||||
</label>
|
||||
<label>
|
||||
<input type="checkbox" ng-model="attentions.enjoin_jd" name="JD|京东">JD|京东
|
||||
</label>
|
||||
<label>
|
||||
<input type="checkbox" ng-model="attentions.enjoin_hf" name="HF|汇付">HF|汇付
|
||||
</label>
|
||||
</p>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<div class="btn-group">
|
||||
<button class="btn btn-success" type="button" ng-click="update(attentions)">Submit</button>
|
||||
</div>
|
||||
<div class="btn-group">
|
||||
<button class="btn btn-danger" type="button" ng-click="$dismiss()">Cancel</button>
|
||||
</div>
|
||||
</div>
|
||||
Loading…
Reference in new issue