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

master
taylor.dang 5 years ago
commit 4997d6ff11

@ -9,7 +9,7 @@
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>manage</artifactId>
<version>1.4.12</version>
<version>1.4.21</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<jib-maven-plugin.version>1.8.0</jib-maven-plugin.version>

@ -27,6 +27,8 @@ public interface ClientAnalysisMapper {
// 统计所有的商户,包括禁用的
int countClientsAll(JSONObject params);
int countValidClientsAll(@Param("industry") String industry);
// 统计一段时期新增的商户数
List<JSONObject> listNewClients(JSONObject params);

@ -6,11 +6,14 @@ import au.com.royalpay.payment.tools.utils.PageListUtils;
import com.alibaba.fastjson.JSONObject;
import com.github.miemiedev.mybatis.paginator.domain.PageBounds;
import com.github.miemiedev.mybatis.paginator.domain.PageList;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.ParseException;
import java.util.Date;
import java.util.List;
@ -70,7 +73,18 @@ public class DataAnalysisServiceImpl implements DataAnalysisService {
@Override
public List<JSONObject> getRpIndustryEchartsData(String from, String to, String industry, String managerId) throws ParseException {
Date modifyTo = DateUtils.addDays(DateUtils.parseDate(to, "yyyy-MM-dd"), 1);
return transactionAnalysisMapper.getRpIndustryEchartsData(from, DateFormatUtils.format(modifyTo, "yyyy-MM-dd HH:mm:ss"), industry, managerId);
List<JSONObject> data = transactionAnalysisMapper.getRpIndustryEchartsData(from, DateFormatUtils.format(modifyTo, "yyyy-MM-dd HH:mm:ss"), industry, managerId);
BigDecimal totalClients = new BigDecimal(clientAnalysisMapper.countValidClientsAll(industry));
for (JSONObject detail : data) {
BigDecimal industryClients = detail.getBigDecimal("industry_trans_clients");
if (!StringUtils.equalsIgnoreCase("0", industry)) {
industryClients = industryClients.subtract(new BigDecimal(1));
detail.put("industry_trans_clients", industryClients.setScale(0, RoundingMode.DOWN));
}
detail.put("total_client", totalClients.setScale(0, RoundingMode.DOWN));
detail.put("in_total_pcent", industryClients.divide(totalClients, 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100)));
}
return data;
}
@Override

@ -5,7 +5,10 @@ import au.com.royalpay.payment.core.utils.PaymentValidUtils;
import au.com.royalpay.payment.manage.gateway.advice.Gtw2Ctrl;
import au.com.royalpay.payment.manage.gateway.core.GatewayMerchantApply;
import au.com.royalpay.payment.tools.connections.attachment.core.AttachmentClient;
import au.com.royalpay.payment.tools.exceptions.BadRequestException;
import com.alibaba.fastjson.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.validation.Errors;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
@ -19,6 +22,7 @@ import javax.annotation.Resource;
@RequestMapping("/api/v1.0/org_gateway/partners/{shortId}")
@Gtw2Ctrl
public class GtwPayController {
private Logger logger = LoggerFactory.getLogger(getClass());
@Resource
private GatewayMerchantApply gatewayMerchantApply;
@Resource
@ -41,12 +45,18 @@ public class GtwPayController {
}
@PostMapping("/attachment/files")
public JSONObject uploadFile(@PathVariable String shortId,@RequestParam MultipartFile file) throws Exception {
public JSONObject uploadFile(@PathVariable String shortId,@RequestParam MultipartFile file) {
JSONObject org = gatewayMerchantApply.validOrgV200(shortId);
if (org == null) {
throw new InvalidShortIdException();
}
JSONObject fileInfo = attachmentClient.uploadFile(file, false);
JSONObject fileInfo = new JSONObject();
try {
fileInfo = attachmentClient.uploadFile(file, false);
} catch (Exception e) {
logger.error("file upload fail :{}" , e.getMessage());
throw new BadRequestException("File upload failed");
}
fileInfo.put("file_type", fileInfo.getString("filetype"));
fileInfo.remove("filepath");
fileInfo.remove("length");

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

@ -51,6 +51,8 @@ public interface TransactionMapper {
PageList<JSONObject> listPreRefundClients(PageBounds pagination);
PageList<JSONObject> listPreGeekCostClients(PageBounds pagination);
JSONObject validAnalysis(@Param("from") Date from, @Param("to") Date to, @Param("channel") String channel, @Param("merchant_id") String merchantId);
List<JSONObject> listUnclearedTransactionsOfClient(@Param("client_id") int clientId, @Param("end") Date finish, @Param("settleDate") Date settleDate);

@ -3,8 +3,8 @@ package au.com.royalpay.payment.manage.merchants.beans;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.annotation.JSONField;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Pattern;
/**
@ -95,12 +95,7 @@ public class ClientRegisterInfo {
private String country;
@Pattern(regexp = "^((Australia/West)|(Australia/Eucla)|(Australia/North)|(Australia/South)|(Australia/Brisbane)|(Australia/Melbourne)|(Australia/LHI))$", message = "error.payment.valid.invalid_timezone")
private String timezone;
private String jdindustry;
private String royalpayindustry;
private String hfindustry;
private String lakalapayindustry;
private String lakalapaygoods;
private String lakalapaysettle;
private String referrer_id;
private String referrer_name;
@ -364,14 +359,6 @@ public class ClientRegisterInfo {
this.alipayIndustry = alipayIndustry;
}
public String getJdindustry() {
return jdindustry;
}
public void setJdindustry(String jdindustry) {
this.jdindustry = jdindustry;
}
public String getRoyalpayindustry() {
return royalpayindustry;
}
@ -412,14 +399,6 @@ public class ClientRegisterInfo {
this.merchant_video_url = merchant_video_url;
}
public String getHfindustry() {
return hfindustry;
}
public void setHfindustry(String hfindustry) {
this.hfindustry = hfindustry;
}
public void setStoreName(String storeName) {
this.storeName = storeName;
}
@ -444,30 +423,6 @@ public class ClientRegisterInfo {
return client_pay_desc;
}
public String getLakalapayindustry() {
return lakalapayindustry;
}
public void setLakalapayindustry(String lakalapayindustry) {
this.lakalapayindustry = lakalapayindustry;
}
public String getLakalapaygoods() {
return lakalapaygoods;
}
public void setLakalapaygoods(String lakalapaygoods) {
this.lakalapaygoods = lakalapaygoods;
}
public String getLakalapaysettle() {
return lakalapaysettle;
}
public void setLakalapaysettle(String lakalapaysettle) {
this.lakalapaysettle = lakalapaysettle;
}
public String getRepresentativePerson() {
return representativePerson;
}

@ -42,6 +42,7 @@ 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.rservices.core.RServicesApplyService;
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;
@ -310,6 +311,8 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
private GatewayMerchantApply gatewayMerchantApply;
@Resource
private RetailRSvcService retailRSvcService;
@Resource
private RServicesApplyService rServicesApplyService;
@Resource
@ -6582,15 +6585,19 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
}
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);
//增值模式1:固定手续费;2:固定金额扣款
saveIncrementalService.put("incremental_mode", incrementalService.getIntValue("incremental_rate_value") == 0 ? 2 : 1);
saveIncrementalService.put("incremental_rate_value", incrementalService.getString("incremental_rate_value"));
saveIncrementalService.put("total_incremental_amount", incrementalService.getString("total_incremental_amount"));
saveIncrementalService.put("title", incrementalService.getString("title"));
if (existIncrementalService == null) {
clientIncrementalMapper.save(saveIncrementalService);
if (StringUtils.equalsIgnoreCase("RP跨境商城", saveIncrementalService.getString("channel"))) {
afterGeekShopSave(saveIncrementalService, client);
}
} else {
clientIncrementalMapper.update(saveIncrementalService);
}
}
@Override
@ -6664,6 +6671,22 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
}
}
private void afterGeekShopSave(JSONObject serviceInfo, JSONObject client) {
JSONObject clientConfig = clientConfigMapper.find(client.getIntValue("client_id"));
clientConfig.put("geek_shop_status", 1);
clientConfigMapper.update(clientConfig);
if (serviceInfo.getBigDecimal("total_incremental_amount").compareTo(new BigDecimal(0)) > 0) {
serviceInfo.put("amount", serviceInfo.getString("total_incremental_amount"));
serviceInfo.put("service_code", "RYCBSM");
String title = serviceInfo.getString("title");
if (StringUtils.isBlank(title)) {
title = "RP跨境商城开通费用";
}
serviceInfo.put("title", title);
rServicesApplyService.saveDebitDetail(serviceInfo, client);
}
}
private String[] getChildClientIds(int clientId) {
JSONObject mchConfig = merchantInfoProvider.getMchExtParams(clientId);
List<String> clientIds = new ArrayList<>();

@ -7,10 +7,8 @@ import au.com.royalpay.payment.tools.CommonConsts;
import au.com.royalpay.payment.tools.exceptions.ForbiddenException;
import au.com.royalpay.payment.tools.http.HttpUtils;
import au.com.royalpay.payment.tools.permission.enums.PartnerRole;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
@ -21,11 +19,10 @@ import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import java.lang.reflect.Method;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.lang.reflect.Method;
/**
* Created by yixian on 2016-06-25.

@ -10,4 +10,6 @@ public interface RServicesApplyService {
void passServicesApply(String applyId, JSONObject manager);
void refuseServicesApply(String applyId, JSONObject manager);
void saveDebitDetail(JSONObject applyInfo, JSONObject client);
}

@ -100,6 +100,7 @@ public class RServicesApplyServiceImpl implements RServicesApplyService {
serviceInfo.put("incremental_mode", 2);
serviceInfo.put("incremental_rate_value", 0);
}
serviceInfo.put("title", applyInfo.getString("title"));
if (clientServices == null) {
serviceInfo.put("incremental_id", UUID.randomUUID().toString());
serviceInfo.put("client_id", applyInfo.getIntValue("client_id"));
@ -141,6 +142,12 @@ public class RServicesApplyServiceImpl implements RServicesApplyService {
private void afterPassProcessingApply(JSONObject applyInfo) {
JSONObject client = clientManager.getClientInfo(applyInfo.getIntValue("client_id"));
saveDebitDetail(applyInfo, client);
sendNotify(applyInfo, client);
}
@Override
public void saveDebitDetail(JSONObject applyInfo, JSONObject client) {
String orderId = "R-" + client.getString("client_moniker") + "-" + applyInfo.getString("service_code") + "-" + DateFormatUtils.format(new Date(), "yyyyMMddHHmmssSSS") + "-" + RandomStringUtils.random(3, true, false).toUpperCase();
JSONObject transaction = new JSONObject();
transaction.put("org_id", client.getIntValue("org_id"));
@ -182,8 +189,6 @@ public class RServicesApplyServiceImpl implements RServicesApplyService {
order.put("status", 7);
order.put("channel", "System");
pmtOrderMapper.save(order);
sendNotify(applyInfo, client);
}
private void sendNotify(JSONObject applyInfo, JSONObject client) {

@ -56,7 +56,7 @@ public interface TradeLogService {
void fullReleasePreAuthorization(JSONObject account, TradeLogQuery query)throws Exception;
JSONObject listPreRefundClients(PreRefundQueryBean params);
JSONObject listPreRefundClients(PreRefundQueryBean params, String preType);
void exportSettlementLog(TradeLogQuery query, JSONObject partner, HttpServletResponse response);

@ -74,7 +74,6 @@ import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
@ -1454,15 +1453,14 @@ public class TradeLogServiceImpl implements TradeLogService {
}
@Override
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;
public JSONObject listPreRefundClients(PreRefundQueryBean params, String preType) {
PageList data = null;
if (StringUtils.equalsIgnoreCase("geek", preType)) {
data = transactionMapper.listPreGeekCostClients(new PageBounds(params.getPage(), params.getLimit()));
} else {
return JSONObject.parseObject(preRefundDataStr);
data = transactionMapper.listPreRefundClients(new PageBounds(params.getPage(), params.getLimit()));
}
return PageListUtils.buildPageListResult(data);
}
@Override

@ -4,7 +4,7 @@ spring.profiles.active=dev,alipay,bestpay,jd,wechat,rpay,yeepay
env.company=RoyalPay
multipart.max-file-size=10Mb
multipart.max-file-size=10MB
spring.datasource.test-while-idle=true
#连接池检测释放周期
@ -155,4 +155,7 @@ qcloud.scf.region=ap-hongkong
apple.message.apns.file=
apple.message.apns.password=
android.message.appkey=
android.message.secret=
android.message.secret=
spring.servlet.multipart.max-file-size=20MB
spring.servlet.multipart.max-request-size=20MB

@ -53,6 +53,21 @@
<foreach collection="org_ids" item="org_id" open="(" close=")" separator=",">#{org_id}</foreach></if>
</select>
<!--显示所有的商户,包括禁用的-->
<select id="countValidClientsAll" resultType="java.lang.Integer">
SELECT count(client_id)
FROM sys_clients
WHERE
create_time &lt;= now() and (approve_result is null or approve_result !=0) and is_valid=1
<if test="industry != null and industry=='1'.toString()">
and (royalpayindustry = 1 or (royalpayindustry like '100%' and CHAR_LENGTH(royalpayindustry)=5))
</if>
<if test="industry != null and industry!='0'.toString() and industry!='1'.toString()">
<bind name="industry" value="industry+'%'"/>
AND royalpayindustry like #{industry}
</if>
</select>
<select id="listNewClients" resultType="com.alibaba.fastjson.JSONObject">
<![CDATA[
SELECT count(client_id) new_clients,DATE_FORMAT(date(create_time),'%d/%m/%Y') create_times
@ -251,7 +266,7 @@
]]>
GROUP by c.sub_merchant_id
</select>
<select id="tradeSubMerchantIdBy60Days" resultType="com.alibaba.fastjson.JSONObject">
<![CDATA[
SELECT COUNT(DISTINCT c.client_id) client_count,
@ -309,4 +324,4 @@
</where>
GROUP by c.clean_days
</select>
</mapper>
</mapper>

@ -1111,18 +1111,33 @@
SELECT
sum(so.total) as total_amount,
sum(so.orders) as orders,
<if test="industry != null and industry=='1'.toString()">
count(Distinct IF((c.royalpayindustry =1 or (c.royalpayindustry like '100%' and CHAR_LENGTH(c.royalpayindustry)=5)), so.client_id,0)) as industry_trans_clients,
SUM(IF((c.royalpayindustry =1 or (c.royalpayindustry like '100%' and CHAR_LENGTH(c.royalpayindustry)=5)),so.total,0)) as industry_total_amount,
SUM(IF((c.royalpayindustry =1 or (c.royalpayindustry like '100%' and CHAR_LENGTH(c.royalpayindustry)=5)),so.orders,0)) as industry_orders,
convert(SUM(IF((c.royalpayindustry =1 or (c.royalpayindustry like '100%' and CHAR_LENGTH(c.royalpayindustry)=5)),so.total,0))/sum( so.total )*100,decimal(15,2)) as amount_pcent,
convert(SUM(IF((c.royalpayindustry =1 or (c.royalpayindustry like '100%' and CHAR_LENGTH(c.royalpayindustry)=5)),so.orders,0))/sum( so.orders )*100,decimal(15,2)) as order_pcent,
</if>
<if test="industry == null or industry=='0'.toString()">
count(Distinct so.client_id) as industry_trans_clients,
sum(so.total) as industry_total_amount,
sum(so.orders) as industry_orders,
100 as amount_pcent,
100 as order_pcent,
</if>
<if test="industry != null and industry!='0'.toString()">
<bind name="industry" value="industry+'%'"/>
count(Distinct IF(c.royalpayindustry like #{industry}, so.client_id,0)) as industry_trans_clients,
SUM(IF(c.royalpayindustry like #{industry},so.total,0)) as industry_total_amount,
SUM(IF(c.royalpayindustry like #{industry},so.orders,0)) as industry_orders,
convert(SUM(IF(c.royalpayindustry like #{industry},so.total,0))/sum( so.total )*100,decimal(15,2)) as amount_pcent,
convert(SUM(IF(c.royalpayindustry like #{industry},so.orders,0))/sum( so.orders )*100,decimal(15,2)) as order_pcent,
</if>
DATE_FORMAT(so.date, '%Y-%m-%d' ) as trans_date
FROM
statistics_customer_order so
inner JOIN sys_clients c ON so.client_id = c.client_id
AND c.is_valid = 1
<if test="industry != null and industry=='1'.toString()">
AND (c.royalpayindustry =1 or c.royalpayindustry like '100%')
</if>
<if test="industry != null and industry!='0'.toString() and industry!='1'">
<bind name="industry" value="industry +'%'"/>
AND c.royalpayindustry like #{industry}
</if>
and so.date >= #{from}
and so.date &lt; #{to}
and so.client_id!=0
@ -1136,6 +1151,7 @@
order by trans_date asc
</select>
<select id="getTopRpIndustryData" resultType="com.alibaba.fastjson.JSONObject">
SELECT
sum(so.total) as total_amount,
@ -1148,7 +1164,7 @@
inner JOIN sys_clients c ON so.client_id = c.client_id
AND c.is_valid = 1
<if test="industry != null and industry=='1'.toString()">
AND (c.royalpayindustry =1 or c.royalpayindustry like '100%')
AND (c.royalpayindustry =1 or (c.royalpayindustry like '100%' and CHAR_LENGTH(c.royalpayindustry)=5))
</if>
<if test="industry != null and industry!='0'.toString() and industry!='1'.toString()">
<bind name="industry" value="industry+'%'"/>

@ -448,16 +448,62 @@
<if test="to!=null">and t.transaction_time &lt; #{to}</if>
</select>
<select id="listPreRefundClients" resultType="com.alibaba.fastjson.JSONObject">
SELECT sc.client_id,
sc.client_moniker,
IFNULL(SUM(IF(pt.transaction_type = 'Credit', pt.clearing_amount, -pt.clearing_amount)), 0) amount,
IFNULL(MAX(pt.create_time), sc.approve_time) transation_time
FROM pmt_transactions pt,
sys_clients sc
WHERE clearing_status = 0
AND pt.client_id = sc.client_id
GROUP BY client_id
HAVING amount &lt; 0
SELECT
sc.client_id,
sc.client_moniker,
IFNULL(
SUM(
IF
(
(pt.channel = 'System'
AND pt.remark not LIKE '%RYCBSM%') or pt.channel != 'System',
IF
( pt.transaction_type = 'Credit', pt.clearing_amount,- pt.clearing_amount ),
0
)
),
0
) amount,
IFNULL( MAX( pt.create_time ), sc.approve_time ) transation_time
FROM
pmt_transactions pt,
sys_clients sc
WHERE
clearing_status = 0
AND pt.client_id = sc.client_id
GROUP BY
client_id
HAVING
amount &lt; 0
</select>
<select id="listPreGeekCostClients" resultType="com.alibaba.fastjson.JSONObject">
SELECT
sc.client_id,
sc.client_moniker,
IFNULL(
SUM(
IF
(
pt.channel = 'System'
AND pt.remark LIKE '%RYCBSM%',
IF
( pt.transaction_type = 'Credit', pt.clearing_amount,- pt.clearing_amount ),
0
)
),
0
) amount,
IFNULL( MAX( pt.create_time ), sc.approve_time ) transation_time
FROM
pmt_transactions pt,
sys_clients sc
WHERE
clearing_status = 0
AND pt.client_id = sc.client_id
GROUP BY
client_id
HAVING
amount &lt; 0
</select>
<select id="validAnalysis" resultType="com.alibaba.fastjson.JSONObject">
<![CDATA[

@ -90,7 +90,7 @@
AND c.business_structure=#{business_structure}
</if>
<if test="industry != null and industry == '1'.toString()">
AND (c.royalpayindustry =1 or c.royalpayindustry like '100%')
AND (c.royalpayindustry =1 or (c.royalpayindustry like '100%' and CHAR_LENGTH(c.royalpayindustry)=5))
</if>
<if test="industry!=null and industry != '0'.toString() and industry and industry!='1'">
<bind name="industry" value="industry+'%'"/>

@ -636,8 +636,8 @@ margin-bottom: 10%;"/>
</a>
</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>授信退款|Credit refund</span>
<a ui-sref="pre_refund" ui-sref-opts="{reload:true}">
<i class="fa fa-tv"></i> <span>商户欠款列表|Credit refund</span>
</a>
</li>
<li ui-sref-active="active">

@ -425,4 +425,4 @@ define(['angular', 'uiBootstrap', 'uiRouter', 'angularEcharts','./transaction/an
}]);
return app;
});
});

@ -6,27 +6,55 @@ define(['angular', 'jquery', 'uiRouter', './monitoring/analysis-monitoring'],
'use strict';
var app = angular.module('preRefundApp', ['ui.router']);
app.config(['$stateProvider', function ($stateProvider) {
$stateProvider.state('analysis_monitoring.pre_refund', {
$stateProvider.state('pre_refund', {
controller: 'preRefundCtrl',
templateUrl: '/static/analysis/templates/pre_refund.html',
url: '/pre_refund'
}).state('pre_refund.refund_partner', {
url: '/refund_client',
templateUrl: '/static/analysis/templates/pre_refund_partners.html',
controller: 'refundPartnerListCtrl'
}).state('pre_refund.geek_partner', {
url: '/geek_partner',
templateUrl: '/static/analysis/templates/pre_refund_partners.html',
controller: 'geekPartnerListCtrl'
})
}]);
app.controller('preRefundCtrl', ['$scope', '$http', function ($scope, $http) {
$scope.pagination = {};
$scope.params = {};
$scope.loadPrefund = function (page) {
var params = angular.copy($scope.params);
params.page = page || $scope.pagination.page || 1;
$http.get('/sys_logs/pre_refund/list', {params: params})
.then(function (resp) {
$scope.log_risk = resp.data.data;
$scope.pagination = resp.data.pagination;
});
};
$scope.loadPrefund();
app.controller('preRefundCtrl', ['$scope', '$http','$state', function ($scope, $http,$state) {
if ($state.is('pre_refund')){
$state.go('.refund_partner');
}
}]);
app.controller('refundPartnerListCtrl', ['$scope', '$http', function ($scope, $http) {
$scope.pagination = {};
$scope.params = {};
$scope.loadPrefund = function (page) {
var params = angular.copy($scope.params);
params.page = page || $scope.pagination.page || 1;
$http.get('/sys_logs/pre_refund/list', {params: params})
.then(function (resp) {
$scope.log_risk = resp.data.data;
$scope.pagination = resp.data.pagination;
});
};
$scope.loadPrefund();
}]);
}]);
app.controller('geekPartnerListCtrl', ['$scope', '$http', function ($scope, $http) {
$scope.pagination = {};
$scope.params = {};
$scope.loadPrefund = function (page) {
var params = angular.copy($scope.params);
params.page = page || $scope.pagination.page || 1;
$http.get('/sys_logs/pre_geek_cost/list', {params: params})
.then(function (resp) {
$scope.log_risk = resp.data.data;
$scope.pagination = resp.data.pagination;
});
};
$scope.loadPrefund();
}]);
return app;
});
});

@ -1,54 +1,35 @@
<section class="content-header">
<h1>授信退款|Credit refund</h1>
<h1>商户欠款列表</h1>
<ol class="breadcrumb">
<li>
<i class="fa fa-list-alt"></i> Transaction
</li>
<li class="active">授信退款|Credit refund</li>
<li class="active">商户欠款列表</li>
</ol>
</section>
<section class="content">
<div class="content">
<div class="row">
<div class="box">
<div class="box-body table-responsive">
<table class="table table-bordered table-hover table-striped">
<thead>
<tr>
<th>商户编码</th>
<th>欠费金额(AUD)</th>
<th>最后交易时间</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="log in log_risk">
<td ng-bind="log.client_moniker">
</td>
<td ng-bind="log.amount"></td>
<td ng-bind="log.transation_time |date:'yyyy-MM-dd HH:mm:ss'"></td>
</tr>
</tbody>
</table>
<div class="box-footer" ng-if="log_risk.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="loadPrefund()"
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 class="col-sm-12 analysis-nav">
<ul class="nav nav-pills">
<li ui-sref-active-eq="active">
<a ui-sref="pre_refund.refund_partner"><span>授信退款</span></a>
</li>
<li ui-sref-active="active">
<a ui-sref="pre_refund.geek_partner"> <span>RP跨境商城欠款商户</span></a>
</li>
</ul>
</div>
</div>
<div class="row">
<div class="col-sm-12">
<div class="nav-tabs-custom">
<div class="tab-content" ui-view>
</div>
</div>
</div>
</div>
</div>
</section>

@ -0,0 +1,50 @@
<div class="content">
<div class="row">
<div class="col-sm-12">
<div class="box-solid">
<div class="row">
<div class="box">
<div class="box-body">
<table class="table table-bordered table-hover table-striped">
<thead>
<tr>
<th>商户编码</th>
<th>欠费金额(AUD)</th>
<th>最后交易时间</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="log in log_risk">
<td ng-bind="log.client_moniker">
</td>
<td ng-bind="log.amount"></td>
<td ng-bind="log.transation_time |date:'yyyy-MM-dd HH:mm:ss'"></td>
</tr>
</tbody>
</table>
<div class="box-footer" ng-if="log_risk.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="loadPrefund()"
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>
</div>
</div>
</div>
</div>
</div>

@ -1,7 +1,7 @@
/**
* Created by yishuqian on 24/05/2017.
*/
define(['angular', 'uiBootstrap', 'uiRouter', 'angularEcharts'], function (angular) {
define(['angular', 'uiBootstrap', 'uiRouter', 'angularEcharts','echarts'], function (angular,echarts) {
'use strict';
var colors = ['#00c0ef', '#00a65a', '#ff851b', '#f39c12', '#d81b60', '#605ca8', '#dd4b39', '#008080', '#8B008B', '#D2691E', '#708090'];
var app = angular.module('analysisTransaction', ['ui.bootstrap', 'ui.router', 'ngEcharts']);
@ -445,12 +445,13 @@ define(['angular', 'uiBootstrap', 'uiRouter', 'angularEcharts'], function (angul
$scope.params = {industry: 0};
$scope.today = new Date();
$scope.pagination = {limit:20};
$scope.royalpay_label = '全部';
$scope.loadRoyalpayindustry = function () {
$http.get('/static/data/royalpayindustry.json').then(function (resp) {
$scope.royalpayindustry = resp.data;
var selectAll = {
"label": "All",
"label": "全部",
"mccCode": "0",
"children":{}
};
@ -462,6 +463,7 @@ define(['angular', 'uiBootstrap', 'uiRouter', 'angularEcharts'], function (angul
$scope.onRoyalPayIndustrySelect = function (selectedItem) {
$scope.params.royalpay_label = selectedItem.label;
$scope.royalpay_label = selectedItem.label;
$scope.params.industry = selectedItem.mccCode;
$scope.doAnalysis();
};
@ -500,56 +502,362 @@ define(['angular', 'uiBootstrap', 'uiRouter', 'angularEcharts'], function (angul
$scope.params.from = monthBegin;
$scope.doAnalysis();
};
var amountAnalysis = {
var orderOption = {
chart: {
yAxis: {
splitLine: {show: true},
axisLine: {
lineStyle: {
color: '#000'
}
}
},
backgroundColor: '#fff',
tooltip: {
trigger: 'axis',
formatter: '{b}:AUD {c}'
},
yAxis: {
type: 'value',
name: '交易金额(AUD)'
axisPointer: {
type: 'shadow'
},
formatter: '总订单数 : {c0}<br />' +
'行业订单数 : {c1}<br /> ' +
'占比 : {c4}%'
},
color: colors
legend: {
data: ['当日总订单数', '行业订单数'],
textStyle: {
color: '#000'
}
}
},
xAxis: {
basic: {
type: 'category',
boundaryGap: false
axisLine: {
lineStyle: {
color: '#000'
}
}
},
key: 'trans_date'
},
series: [
series: [{
basic: {
label:{
normal: {
show: true,
position: 'outside',
offset: [0, 0],
textStyle: {
fontSize: 15,
fontFamily: 'Arial'
}
}},
name: '当日总订单数',
type: 'line',
smooth: true,
showAllSymbol: true,
symbol: 'emptyCircle',
symbolSize: 5
},
column: {key: 'orders'}
}, {
basic: {
label:{
normal: {
show: true,
position: 'right',
offset: [0, 0],
textStyle: {
fontSize: 15,
fontFamily: 'Arial'
}
}},
name: '行业订单数',
type: 'bar',
barWidth: 10,
itemStyle: {
barBorderRadius: 5,
color: '#14c8d4'
}
},
column: {key: 'industry_orders'}
}, {
basic: {
name: '当日总订单数',
type: 'bar',
barGap: '-100%',
barWidth: 10,
z: -12,
itemStyle: {
color: '#fff'
}
},
column: {key: 'orders'}
}, {
basic: {
name: '当日总订单数',
type: 'pictorialBar',
symbol: 'rect',
itemStyle: {
color: '#0f375f'
},
symbolRepeat: true,
symbolSize: [12, 4],
symbolMargin: 1,
z: -10
},
column: {key: 'orders'}
},
{
basic: {type: 'line', label: {normal: {show: true}}, showAllSymbols: true},
column: {key: 'total_amount'}
basic: {
name: 'pcent',
type: 'pictorialBar',
symbol: 'rect',
itemStyle: {
color: '#fff'
},
symbolRepeat: true,
symbolSize: [12, 4],
symbolMargin: 1,
z: -10
},
column: {key: 'order_pcent'}
}
]
};
var ordersAnalysis = {
var amountOption = {
chart: {
yAxis: {
splitLine: {show: true},
axisLine: {
lineStyle: {
color: '#000'
}
}
},
backgroundColor: '#fff',
tooltip: {
trigger: 'axis',
formatter: '{b}:AUD {c}'
axisPointer: {
type: 'shadow'
},
formatter: '总交易额 : AUD {c0}<br />' +
'行业交易额 : AUD {c1}<br /> ' +
'占比 : {c4}%'
},
legend: {
data: ['当日总交易额', '行业交易额'],
textStyle: {
color: '#000'
}
}
},
xAxis: {
basic: {
axisLine: {
lineStyle: {
color: '#000'
}
}
},
key: 'trans_date'
},
series: [{
basic: {
label:{
normal: {
show: true,
position: 'outside',
offset: [0, 0],
textStyle: {
fontSize: 15,
fontFamily: 'Arial'
}
}},
name: '当日总交易额',
type: 'line',
smooth: true,
showAllSymbol: true,
symbol: 'emptyCircle',
symbolSize: 5
},
column: {key: 'total_amount'}
}, {
basic: {
label:{
normal: {
show: true,
position: 'right',
offset: [0, 0],
textStyle: {
fontSize: 12,
fontFamily: 'Arial'
}
}},
name: '行业交易额',
type: 'bar',
barWidth: 10,
itemStyle: {
barBorderRadius: 5,
color: '#14c8d4'
}
},
column: {key: 'industry_total_amount'}
}, {
basic: {
name: '当日总交易额',
type: 'bar',
barGap: '-100%',
barWidth: 10,
z: -12,
itemStyle: {
color: '#fff'
}
},
column: {key: 'total_amount'}
}, {
basic: {
name: '当日总交易额',
type: 'pictorialBar',
symbol: 'rect',
itemStyle: {
color: '#0f375f'
},
symbolRepeat: true,
symbolSize: [12, 4],
symbolMargin: 1,
z: -10
},
column: {key: 'total_amount'}
},
{
basic: {
name: 'pcent',
type: 'pictorialBar',
symbol: 'rect',
itemStyle: {
color: '#fff'
},
symbolRepeat: true,
symbolSize: [12, 4],
symbolMargin: 1,
z: -10
},
column: {key: 'amount_pcent'}
}
]
};
var partnerOption = {
chart: {
yAxis: {
type: 'value',
name: '订单数'
splitLine: {show: true},
axisLine: {
lineStyle: {
color: '#000'
}
}
},
backgroundColor: '#fff',
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow'
},
formatter: '行业总商户数 : {c3}<br />' +
'行业产生交易商户数 : {c1}<br /> ' +
'占比 : {c0}%'
},
color: colors
legend: {
data: ['行业总商户数', '行业产生交易商户数'],
textStyle: {
color: '#000'
}
}
},
xAxis: {
basic: {
type: 'category',
boundaryGap: false
axisLine: {
lineStyle: {
color: '#000'
}
}
},
key: 'trans_date'
},
series: [
{
basic: {type: 'line', label: {normal: {show: true}}, showAllSymbols: true},
column: {key: 'orders'}
}
basic: {
name: 'pcent',
type: 'pictorialBar',
symbol: 'rect',
itemStyle: {
color: '#fff'
},
symbolRepeat: true,
symbolSize: [12, 4],
symbolMargin: 1,
z: -10
},
column: {key: 'in_total_pcent'}
},
{
basic: {
label:{
normal: {
show: true,
position: 'right',
offset: [0, 0],
textStyle: {
fontSize: 15,
fontFamily: 'Arial'
}
}},
name: '行业产生交易商户数',
type: 'line',
smooth: true,
showAllSymbol: true,
symbol: 'emptyCircle',
symbolSize: 5
},
column: {key: 'industry_trans_clients'}
}, {
basic: {
name: '行业产生交易商户数',
type: 'bar',
barWidth: 10,
itemStyle: {
barBorderRadius: 5,
color: '#14c8d4'
}
},
column: {key: 'industry_trans_clients'}
},{
basic: {
name: '行业总商户数',
type: 'bar',
barGap: '-100%',
barWidth: 10,
z: -12,
itemStyle: {
color: '#fff'
}
},
column: {key: 'total_client'}
}, {
basic: {
name: '行业总商户数',
type: 'pictorialBar',
symbol: 'rect',
itemStyle: {
color: '#0f375f'
},
symbolRepeat: true,
symbolSize: [12, 4],
symbolMargin: 1,
z: -10
},
column: {key: 'total_client'}
}
]
};
@ -565,8 +873,9 @@ define(['angular', 'uiBootstrap', 'uiRouter', 'angularEcharts'], function (angul
delete params.royalpay_label;
$http.get('/analysis/rp_industry/echarts', {params: params}).then(function (resp) {
$scope.analysisData = resp.data;
$scope.amountAnalysis = chartParser.parse(amountAnalysis, resp.data);
$scope.ordersAnalysis = chartParser.parse(ordersAnalysis, resp.data);
$scope.amountAnalysis = chartParser.parse(amountOption, resp.data);
$scope.ordersAnalysis = chartParser.parse(orderOption, resp.data);
$scope.partnerAnalysis = chartParser.parse(partnerOption, resp.data);
$scope.future_loading = false;
$scope.chooseDay = $filter('date')($scope.params.from, 'yyyy-MM-dd');
$scope.loadTopTransPartners(1);

@ -99,6 +99,9 @@
<div class="chart" echarts="ordersAnalysis" style="height: 300px"
chart-setter="choseDayEchart($chart)"
ng-class="{nodata:ordersAnalysis.nodata}"></div>
<div class="chart" echarts="partnerAnalysis" style="height: 300px"
chart-setter="choseDayEchart($chart)"
ng-class="{nodata:partnerAnalysis.nodata}"></div>
</div>
</div>
</div>

@ -79,4 +79,4 @@ define(['angular', 'echarts'], function (angular, echarts) {
}
}]);
return app;
});
});

@ -72,4 +72,4 @@ define(['../app', 'angular'], function (app, angular) {
}
}]);
});
});

@ -579,4 +579,4 @@ define(["../app"], function (app) {
}
});
})
;
;

@ -884,11 +884,11 @@
</a>
</div>
<div ng-if="('preRefund'|withModule)" class="col-sm-2 col-xs-6">
<a ui-sref="analysis_monitoring.pre_refund" ui-sref-opts="{reload:true}">
<a ui-sref="pre_refund" ui-sref-opts="{reload:true}">
<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>

@ -5759,13 +5759,11 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter
$scope.isCreate = true;
$scope.initData =function(){
$scope.isCreate = angular.copy(params.isCreate);
if($scope.isCreate ){
$scope.model.incremental_mode = "1"
if($scope.isCreate){
$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();

@ -1308,26 +1308,6 @@
</div>
</div>
<div class="form-group"
ng-class="{'has-error':partnerForm.jdindustry.$invalid && partnerForm.jdindustry.$dirty}">
<label class="control-label col-sm-2" for="jdindustry-input">
*JDPay Industry</label>
<div class="col-sm-8">
<select class="form-control" name="jdindustry"
ng-model="partner.jdindustry"
id="jdindustry-input" required
ng-options="industry.value as industry.label for industry in jdindustry">
<option value="">Please Choose</option>
</select>
<div ng-messages="partnerForm.jdindustryindustry.$error"
ng-if="partnerForm.jdindustryindustry.$dirty">
<p class="small text-danger" ng-message="required">Required
Field</p>
</div>
</div>
</div>
<div class="form-group"
ng-class="{'has-error':partnerForm.industry.$invalid && partnerForm.industry.$dirty}">
<label class="control-label col-sm-2" for="industry-input">
@ -1366,76 +1346,6 @@
</div>
</div>
<div class="form-group" ng-if="(10|withRole) || (1|withRole)">
<label class="control-label col-sm-2"
for="hf_category">HF Industry</label>
<div class="col-sm-8">
<input class="form-control" id="hf_category" required
name="hf_label" readonly
ng-model="partner.hfindustry|partner_hf_industry"
multi-level-select-popup="hfindustry"
on-select="onHfIndustrySelect($selected)"
chose-one-level="false">
</div>
</div>
<div class="form-group"
ng-class="{'has-error':partnerForm.lakalapayindustry.$invalid && partnerForm.lakalapayindustry.$dirty}">
<label class="control-label col-sm-2" for="lakalapayindustry-input">
*LakalaPay Industry</label>
<div class="col-sm-8">
<select class="form-control" name="lakalapayindustry"
ng-model="partner.lakalapayindustry"
id="lakalapayindustry-input" required
ng-options="industry.value as industry.label for industry in lakalapayindustry">
<option value="">Please Choose</option>
</select>
<div ng-messages="partnerForm.lakalapayindustry.$error"
ng-if="partnerForm.lakalapayindustry.$dirty">
<p class="small text-danger" ng-message="required">
Required Field</p>
</div>
</div>
</div>
<div class="form-group"
ng-class="{'has-error':partnerForm.lakalapaygoods.$invalid && partnerForm.lakalapaygoods.$dirty}">
<label class="control-label col-sm-2" for="lakalapaygoods-input">
*LakalaPay Category</label>
<div class="col-sm-8">
<select class="form-control" name="lakalapaygoods"
ng-model="partner.lakalapaygoods"
id="lakalapaygoods-input" required
ng-options="industry.value as industry.label for industry in lakalapaygoods">
<option value="">Please Choose</option>
</select>
<div ng-messages="partnerForm.lakalapaygoods.$error"
ng-if="partnerForm.lakalapaygoods.$dirty">
<p class="small text-danger" ng-message="required">
Required Field</p>
</div>
</div>
</div>
<div class="form-group"
ng-class="{'has-error':partnerForm.lakalapaysettle.$invalid && partnerForm.lakalapaysettle.$dirty}">
<label class="control-label col-sm-2" for="lakalapaysettle-input">
*LakalaPay Settlement Code</label>
<div class="col-sm-8">
<select class="form-control" name="lakalapaysettle"
ng-model="partner.lakalapaysettle"
id="lakalapaysettle-input" required
ng-options="industry.value as industry.label for industry in lakalapaysettle">
<option value="">Please Choose</option>
</select>
<div ng-messages="partnerForm.lakalapaysettle.$error"
ng-if="partnerForm.lakalapaysettle.$dirty">
<p class="small text-danger" ng-message="required">
Required Field</p>
</div>
</div>
</div>
</div>
</div>
</div>

@ -1172,27 +1172,6 @@
</div>
</div>
<div class="form-group"
ng-class="{'has-error':partnerForm.jdindustry.$invalid && partnerForm.jdindustry.$dirty}">
<label class="control-label col-sm-2" for="jdindustry-input">
*JDPay Industry</label>
<div class="col-sm-8">
<select class="form-control" name="jdindustry"
ng-model="partner.jdindustry"
id="jdindustry-input" required
ng-options="industry.value as industry.label for industry in jdindustry">
<option value="">Please Choose</option>
</select>
<div ng-messages="partnerForm.jdindustryindustry.$error"
ng-if="partnerForm.jdindustryindustry.$dirty">
<p class="small text-danger" ng-message="required">Required
Field</p>
</div>
</div>
</div>
<div class="form-group"
ng-class="{'has-error':partnerForm.industry.$invalid && partnerForm.industry.$dirty}">
<label class="control-label col-sm-2" for="industry-input">
@ -1231,75 +1210,6 @@
</div>
</div>
<div class="form-group" ng-if="('10'|withRole) || ('1'|withRole)">
<label class="control-label col-sm-2"
for="hf_category">HF Industry</label>
<div class="col-sm-8" >
<input class="form-control" id="hf_category" required
name="hf_label" readonly
ng-model="partner.hfindustry |partner_hf_industry"
multi-level-select-popup="hfindustry"
on-select="onHfIndustrySelect($selected)"
chose-one-level="false">
</div>
</div>
<div class="form-group"
ng-class="{'has-error':partnerForm.lakalapayindustry.$invalid && partnerForm.lakalapayindustry.$dirty}">
<label class="control-label col-sm-2" for="lakalapayindustry-input">
*LakalaPay Industry</label>
<div class="col-sm-8">
<select class="form-control" name="lakalapayindustry"
ng-model="partner.lakalapayindustry"
id="lakalapayindustry-input" required
ng-options="industry.value as industry.label for industry in lakalapayindustry">
<option value="">Please Choose</option>
</select>
<div ng-messages="partnerForm.lakalapayindustry.$error"
ng-if="partnerForm.lakalapayindustry.$dirty">
<p class="small text-danger" ng-message="required">
Required Field</p>
</div>
</div>
</div>
<div class="form-group"
ng-class="{'has-error':partnerForm.lakalapaygoods.$invalid && partnerForm.lakalapaygoods.$dirty}">
<label class="control-label col-sm-2" for="lakalapaygoods-input">
*LakalaPay Category</label>
<div class="col-sm-8">
<select class="form-control" name="lakalapaygoods"
ng-model="partner.lakalapaygoods"
id="lakalapaygoods-input" required
ng-options="industry.value as industry.label for industry in lakalapaygoods">
<option value="">Please Choose</option>
</select>
<div ng-messages="partnerForm.lakalapaygoods.$error"
ng-if="partnerForm.lakalapaygoods.$dirty">
<p class="small text-danger" ng-message="required">
Required Field</p>
</div>
</div>
</div>
<div class="form-group"
ng-class="{'has-error':partnerForm.lakalapaysettle.$invalid && partnerForm.lakalapaysettle.$dirty}">
<label class="control-label col-sm-2" for="lakalapaysettle-input">
*LakalaPay Settlement Code</label>
<div class="col-sm-8">
<select class="form-control" name="lakalapaysettle"
ng-model="partner.lakalapaysettle"
id="lakalapaysettle-input" required
ng-options="industry.value as industry.label for industry in lakalapaysettle">
<option value="">Please Choose</option>
</select>
<div ng-messages="partnerForm.lakalapaysettle.$error"
ng-if="partnerForm.lakalapaysettle.$dirty">
<p class="small text-danger" ng-message="required">
Required Field</p>
</div>
</div>
</div>
</div>
</div>

@ -18,19 +18,7 @@
</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-4">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}">
<div class="form-group has-feedback" ng-class="{'has-error':service_form.incremental_rate_value.$invalid && service_form.incremental_rate_value.$dirty}">
<label class="control-label col-sm-4" style="text-align: right">Rate Value:</label>
<div class="col-sm-6">
<div class="input-group">
@ -50,7 +38,8 @@
</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}">
<div class="form-group has-feedback" ng-if="isCreate"
ng-class="{'has-error':service_form.total_incremental_amount.$invalid && service_form.total_incremental_amount.$dirty}">
<label class="control-label col-sm-4" 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"
@ -62,6 +51,25 @@
</div>
</div>
</div>
<div class="form-group has-feedback" ng-if="!isCreate">
<label class="control-label col-sm-4" 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" maxlength="20" id="total_incremental_amount" readonly>
</div>
</div>
<div class="form-group has-feedback" ng-class="{'has-error':service_form.title.$invalid && service_form.title.$dirty}">
<label class="control-label col-sm-4" style="text-align: right">付费内容(eg:RP跨境商城入门版1年开通费):</label>
<div class="col-sm-6">
<textarea name="title" class="form-control" ng-model="model.title"
maxlength="50" id="title" required></textarea>
<div ng-messages="service_form.title.$error" ng-if="service_form.title.$dirty">
<div class="small text-danger" ng-message="required">
<i class="glyphicon glyphicon-alert"></i> Required Field
</div>
</div>
</div>
</div>
</form>
</div>
</div>
@ -69,4 +77,4 @@
<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>
</div>

@ -1035,16 +1035,6 @@
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2">JDPay Industry</label>
<div class="col-sm-10">
<p class="form-control-static industry-p"
ng-bind="partner.jdindustry|partner_jd_industry"></p>
<i class="fa fa-check-square-o check-i" aria-hidden="true"
ng-if="$root.complianceCheck.clientInfo"></i>
</div>
</div>
<div class="form-group">
<div class="col-sm-5">
<label class="control-label col-sm-5">Wechat Industry</label>
@ -1079,45 +1069,6 @@
ng-if="$root.complianceCheck.clientInfo"></i>
</div>
</div>
<div class="form-group" ng-if="partner.hfindustry&&(('10'|withRole) || ('1'|withRole))">
<label class="control-label col-sm-2">HF Industry</label>
<div class="col-sm-10">
<p class="form-control-static industry-p" ng-if="partner.hfindustry">
{{partner.hfindustry| partner_hf_industry}}
&nbsp;&nbsp;&nbsp;({{partner.hfindustry}})
</p>
<i class="fa fa-check-square-o check-i" aria-hidden="true"
ng-if="$root.complianceCheck.clientInfo"></i>
</div>
</div>
<div class="form-group" ng-if="sysconfig.active_channels.indexOf('LakalaPay')!=-1">
<label class="control-label col-sm-2">LakalaPay Industry</label>
<div class="col-sm-10">
<p class="form-control-static industry-p"
ng-bind="partner.lakalapayindustry|partner_lakala_industry"></p>
<i class="fa fa-check-square-o check-i" aria-hidden="true"
ng-if="$root.complianceCheck.clientInfo"></i>
</div>
</div>
<div class="form-group" ng-if="sysconfig.active_channels.indexOf('LakalaPay')!=-1">
<label class="control-label col-sm-2">LakalaPay Category</label>
<div class="col-sm-10">
<p class="form-control-static industry-p"
ng-bind="partner.lakalapaygoods"></p>
<i class="fa fa-check-square-o check-i" aria-hidden="true"
ng-if="$root.complianceCheck.clientInfo"></i>
</div>
</div>
<div class="form-group" ng-if="sysconfig.active_channels.indexOf('LakalaPay')!=-1">
<label class="control-label col-sm-2">LakalaPay Settlement Code</label>
<div class="col-sm-10">
<p class="form-control-static industry-p"
ng-bind="partner.lakalapaysettle |partner_lakala_settle"></p>
<i class="fa fa-check-square-o check-i" aria-hidden="true"
ng-if="$root.complianceCheck.clientInfo"></i>
</div>
</div>
</div>
</div>
</div>

@ -1168,26 +1168,6 @@
</div>
</div>
<div class="form-group"
ng-class="{'has-error':partnerForm.jdindustry.$invalid && partnerForm.jdindustry.$dirty}">
<label class="control-label col-sm-2" for="jdindustry-input">
*JDPay Industry</label>
<div class="col-sm-8">
<select class="form-control" name="jdindustry"
ng-model="partner.jdindustry"
id="jdindustry-input" required
ng-options="industry.value as industry.label for industry in jdindustry">
<option value="">Please Choose</option>
</select>
<div ng-messages="partnerForm.jdindustryindustry.$error"
ng-if="partnerForm.jdindustryindustry.$dirty">
<p class="small text-danger" ng-message="required">Required
Field</p>
</div>
</div>
</div>
<div class="form-group"
ng-class="{'has-error':partnerForm.industry.$invalid && partnerForm.industry.$dirty}">
<label class="control-label col-sm-2" for="industry-input">
@ -1226,76 +1206,6 @@
</div>
</div>
<div class="form-group" ng-if="('10'|withRole) || ('1'|withRole)">
<label class="control-label col-sm-2"
for="hf_category">HF Industry</label>
<div class="col-sm-8" >
<input class="form-control" id="hf_category" required
name="hf_label" readonly
ng-model="partner.hfindustry|partner_hf_industry"
multi-level-select-popup="hfindustry"
on-select="onHfIndustrySelect($selected)"
chose-one-level="false">
</div>
</div>
<div class="form-group"
ng-class="{'has-error':partnerForm.lakalapayindustry.$invalid && partnerForm.lakalapayindustry.$dirty}">
<label class="control-label col-sm-2" for="lakalapayindustry-input">
*LakalaPay Industry</label>
<div class="col-sm-8">
<select class="form-control" name="lakalapayindustry"
ng-model="partner.lakalapayindustry"
id="lakalapayindustry-input" required
ng-options="industry.value as industry.label for industry in lakalapayindustry">
<option value="">Please Choose</option>
</select>
<div ng-messages="partnerForm.lakalapayindustry.$error"
ng-if="partnerForm.lakalapayindustry.$dirty">
<p class="small text-danger" ng-message="required">
Required Field</p>
</div>
</div>
</div>
<div class="form-group"
ng-class="{'has-error':partnerForm.lakalapaygoods.$invalid && partnerForm.lakalapaygoods.$dirty}">
<label class="control-label col-sm-2" for="lakalapaygoods-input">
*LakalaPay Category</label>
<div class="col-sm-8">
<select class="form-control" name="lakalapaygoods"
ng-model="partner.lakalapaygoods"
id="lakalapaygoods-input" required
ng-options="industry.value as industry.label for industry in lakalapaygoods">
<option value="">Please Choose</option>
</select>
<div ng-messages="partnerForm.lakalapaygoods.$error"
ng-if="partnerForm.lakalapaygoods.$dirty">
<p class="small text-danger" ng-message="required">
Required Field</p>
</div>
</div>
</div>
<div class="form-group"
ng-class="{'has-error':partnerForm.lakalapaysettle.$invalid && partnerForm.lakalapaysettle.$dirty}">
<label class="control-label col-sm-2" for="lakalapaysettle-input">
*LakalaPay Settlement Code</label>
<div class="col-sm-8">
<select class="form-control" name="lakalapaysettle"
ng-model="partner.lakalapaysettle"
id="lakalapaysettle-input" required
ng-options="industry.value as industry.label for industry in lakalapaysettle">
<option value="">Please Choose</option>
</select>
<div ng-messages="partnerForm.lakalapaysettle.$error"
ng-if="partnerForm.lakalapaysettle.$dirty">
<p class="small text-danger" ng-message="required">
Required Field</p>
</div>
</div>
</div>
</div>
</div>

Loading…
Cancel
Save