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

master
taylor.dang 5 years ago
commit 4997d6ff11

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

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

@ -6,11 +6,14 @@ import au.com.royalpay.payment.tools.utils.PageListUtils;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.github.miemiedev.mybatis.paginator.domain.PageBounds; import com.github.miemiedev.mybatis.paginator.domain.PageBounds;
import com.github.miemiedev.mybatis.paginator.domain.PageList; 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.DateFormatUtils;
import org.apache.commons.lang3.time.DateUtils; import org.apache.commons.lang3.time.DateUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.ParseException; import java.text.ParseException;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
@ -70,7 +73,18 @@ public class DataAnalysisServiceImpl implements DataAnalysisService {
@Override @Override
public List<JSONObject> getRpIndustryEchartsData(String from, String to, String industry, String managerId) throws ParseException { 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); 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 @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.advice.Gtw2Ctrl;
import au.com.royalpay.payment.manage.gateway.core.GatewayMerchantApply; 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.connections.attachment.core.AttachmentClient;
import au.com.royalpay.payment.tools.exceptions.BadRequestException;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.validation.Errors; import org.springframework.validation.Errors;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
@ -19,6 +22,7 @@ import javax.annotation.Resource;
@RequestMapping("/api/v1.0/org_gateway/partners/{shortId}") @RequestMapping("/api/v1.0/org_gateway/partners/{shortId}")
@Gtw2Ctrl @Gtw2Ctrl
public class GtwPayController { public class GtwPayController {
private Logger logger = LoggerFactory.getLogger(getClass());
@Resource @Resource
private GatewayMerchantApply gatewayMerchantApply; private GatewayMerchantApply gatewayMerchantApply;
@Resource @Resource
@ -41,12 +45,18 @@ public class GtwPayController {
} }
@PostMapping("/attachment/files") @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); JSONObject org = gatewayMerchantApply.validOrgV200(shortId);
if (org == null) { if (org == null) {
throw new InvalidShortIdException(); 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.put("file_type", fileInfo.getString("filetype"));
fileInfo.remove("filepath"); fileInfo.remove("filepath");
fileInfo.remove("length"); fileInfo.remove("length");

@ -85,6 +85,11 @@ public class LogRiskController {
@GetMapping(value = "/pre_refund/list") @GetMapping(value = "/pre_refund/list")
public JSONObject listPreRefund(PreRefundQueryBean preRefundQueryBean) { 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> 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); 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); 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.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.annotation.JSONField; import com.alibaba.fastjson.annotation.JSONField;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Pattern; import javax.validation.constraints.Pattern;
/** /**
@ -95,12 +95,7 @@ public class ClientRegisterInfo {
private String country; 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") @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 timezone;
private String jdindustry;
private String royalpayindustry; private String royalpayindustry;
private String hfindustry;
private String lakalapayindustry;
private String lakalapaygoods;
private String lakalapaysettle;
private String referrer_id; private String referrer_id;
private String referrer_name; private String referrer_name;
@ -364,14 +359,6 @@ public class ClientRegisterInfo {
this.alipayIndustry = alipayIndustry; this.alipayIndustry = alipayIndustry;
} }
public String getJdindustry() {
return jdindustry;
}
public void setJdindustry(String jdindustry) {
this.jdindustry = jdindustry;
}
public String getRoyalpayindustry() { public String getRoyalpayindustry() {
return royalpayindustry; return royalpayindustry;
} }
@ -412,14 +399,6 @@ public class ClientRegisterInfo {
this.merchant_video_url = merchant_video_url; 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) { public void setStoreName(String storeName) {
this.storeName = storeName; this.storeName = storeName;
} }
@ -444,30 +423,6 @@ public class ClientRegisterInfo {
return client_pay_desc; 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() { public String getRepresentativePerson() {
return representativePerson; 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.merchants.entity.impls.*;
import au.com.royalpay.payment.manage.notice.core.MailService; import au.com.royalpay.payment.manage.notice.core.MailService;
import au.com.royalpay.payment.manage.permission.utils.OrgCheckUtils; 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.beans.TodoNotice;
import au.com.royalpay.payment.manage.signin.core.ManagerTodoNoticeProvider; import au.com.royalpay.payment.manage.signin.core.ManagerTodoNoticeProvider;
import au.com.royalpay.payment.manage.signin.core.SignInAccountService; import au.com.royalpay.payment.manage.signin.core.SignInAccountService;
@ -310,6 +311,8 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
private GatewayMerchantApply gatewayMerchantApply; private GatewayMerchantApply gatewayMerchantApply;
@Resource @Resource
private RetailRSvcService retailRSvcService; private RetailRSvcService retailRSvcService;
@Resource
private RServicesApplyService rServicesApplyService;
@Resource @Resource
@ -6582,15 +6585,19 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
} }
saveIncrementalService.put("client_id", client.getInteger("client_id")); saveIncrementalService.put("client_id", client.getInteger("client_id"));
saveIncrementalService.put("operator", manager.getString("display_name")); saveIncrementalService.put("operator", manager.getString("display_name"));
saveIncrementalService.put("incremental_mode", incrementalService.getInteger("incremental_mode")); //增值模式1:固定手续费;2:固定金额扣款
saveIncrementalService.put("incremental_rate_value", incrementalService.getInteger("incremental_mode") == 1 ? incrementalService.getString("incremental_rate_value") : 0); saveIncrementalService.put("incremental_mode", incrementalService.getIntValue("incremental_rate_value") == 0 ? 2 : 1);
saveIncrementalService.put("total_incremental_amount", incrementalService.getInteger("incremental_mode") != 1 ? incrementalService.getString("total_incremental_amount") : 0); 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) { if (existIncrementalService == null) {
clientIncrementalMapper.save(saveIncrementalService); clientIncrementalMapper.save(saveIncrementalService);
if (StringUtils.equalsIgnoreCase("RP跨境商城", saveIncrementalService.getString("channel"))) {
afterGeekShopSave(saveIncrementalService, client);
}
} else { } else {
clientIncrementalMapper.update(saveIncrementalService); clientIncrementalMapper.update(saveIncrementalService);
} }
} }
@Override @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) { private String[] getChildClientIds(int clientId) {
JSONObject mchConfig = merchantInfoProvider.getMchExtParams(clientId); JSONObject mchConfig = merchantInfoProvider.getMchExtParams(clientId);
List<String> clientIds = new ArrayList<>(); 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.exceptions.ForbiddenException;
import au.com.royalpay.payment.tools.http.HttpUtils; import au.com.royalpay.payment.tools.http.HttpUtils;
import au.com.royalpay.payment.tools.permission.enums.PartnerRole; import au.com.royalpay.payment.tools.permission.enums.PartnerRole;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -21,11 +19,10 @@ import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod; import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import java.lang.reflect.Method;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.lang.reflect.Method;
/** /**
* Created by yixian on 2016-06-25. * Created by yixian on 2016-06-25.

@ -10,4 +10,6 @@ public interface RServicesApplyService {
void passServicesApply(String applyId, JSONObject manager); void passServicesApply(String applyId, JSONObject manager);
void refuseServicesApply(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_mode", 2);
serviceInfo.put("incremental_rate_value", 0); serviceInfo.put("incremental_rate_value", 0);
} }
serviceInfo.put("title", applyInfo.getString("title"));
if (clientServices == null) { if (clientServices == null) {
serviceInfo.put("incremental_id", UUID.randomUUID().toString()); serviceInfo.put("incremental_id", UUID.randomUUID().toString());
serviceInfo.put("client_id", applyInfo.getIntValue("client_id")); serviceInfo.put("client_id", applyInfo.getIntValue("client_id"));
@ -141,6 +142,12 @@ public class RServicesApplyServiceImpl implements RServicesApplyService {
private void afterPassProcessingApply(JSONObject applyInfo) { private void afterPassProcessingApply(JSONObject applyInfo) {
JSONObject client = clientManager.getClientInfo(applyInfo.getIntValue("client_id")); 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(); 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(); JSONObject transaction = new JSONObject();
transaction.put("org_id", client.getIntValue("org_id")); transaction.put("org_id", client.getIntValue("org_id"));
@ -182,8 +189,6 @@ public class RServicesApplyServiceImpl implements RServicesApplyService {
order.put("status", 7); order.put("status", 7);
order.put("channel", "System"); order.put("channel", "System");
pmtOrderMapper.save(order); pmtOrderMapper.save(order);
sendNotify(applyInfo, client);
} }
private void sendNotify(JSONObject applyInfo, JSONObject client) { private void sendNotify(JSONObject applyInfo, JSONObject client) {

@ -56,7 +56,7 @@ public interface TradeLogService {
void fullReleasePreAuthorization(JSONObject account, TradeLogQuery query)throws Exception; 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); void exportSettlementLog(TradeLogQuery query, JSONObject partner, HttpServletResponse response);

@ -74,7 +74,6 @@ import java.text.DecimalFormat;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.zip.ZipEntry; import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream; import java.util.zip.ZipOutputStream;
@ -1454,15 +1453,14 @@ public class TradeLogServiceImpl implements TradeLogService {
} }
@Override @Override
public JSONObject listPreRefundClients(PreRefundQueryBean params) { public JSONObject listPreRefundClients(PreRefundQueryBean params, String preType) {
String preRefundDataStr = stringRedisTemplate.boundValueOps("payment:pre_refund_data").get(); PageList data = null;
if (StringUtils.isEmpty(preRefundDataStr)) { if (StringUtils.equalsIgnoreCase("geek", preType)) {
JSONObject preRefundData = PageListUtils.buildPageListResult(transactionMapper.listPreRefundClients(new PageBounds(params.getPage(), params.getLimit()))); data = transactionMapper.listPreGeekCostClients(new PageBounds(params.getPage(), params.getLimit()));
stringRedisTemplate.boundValueOps("payment:pre_refund_data").set(preRefundData.toJSONString(), 1, TimeUnit.HOURS);
return preRefundData;
} else { } else {
return JSONObject.parseObject(preRefundDataStr); data = transactionMapper.listPreRefundClients(new PageBounds(params.getPage(), params.getLimit()));
} }
return PageListUtils.buildPageListResult(data);
} }
@Override @Override

@ -4,7 +4,7 @@ spring.profiles.active=dev,alipay,bestpay,jd,wechat,rpay,yeepay
env.company=RoyalPay env.company=RoyalPay
multipart.max-file-size=10Mb multipart.max-file-size=10MB
spring.datasource.test-while-idle=true spring.datasource.test-while-idle=true
#连接池检测释放周期 #连接池检测释放周期
@ -156,3 +156,6 @@ apple.message.apns.file=
apple.message.apns.password= apple.message.apns.password=
android.message.appkey= 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> <foreach collection="org_ids" item="org_id" open="(" close=")" separator=",">#{org_id}</foreach></if>
</select> </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"> <select id="listNewClients" resultType="com.alibaba.fastjson.JSONObject">
<![CDATA[ <![CDATA[
SELECT count(client_id) new_clients,DATE_FORMAT(date(create_time),'%d/%m/%Y') create_times SELECT count(client_id) new_clients,DATE_FORMAT(date(create_time),'%d/%m/%Y') create_times

@ -1111,18 +1111,33 @@
SELECT SELECT
sum(so.total) as total_amount, sum(so.total) as total_amount,
sum(so.orders) as orders, 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 DATE_FORMAT(so.date, '%Y-%m-%d' ) as trans_date
FROM FROM
statistics_customer_order so statistics_customer_order so
inner JOIN sys_clients c ON so.client_id = c.client_id inner JOIN sys_clients c ON so.client_id = c.client_id
AND c.is_valid = 1 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 >= #{from}
and so.date &lt; #{to} and so.date &lt; #{to}
and so.client_id!=0 and so.client_id!=0
@ -1136,6 +1151,7 @@
order by trans_date asc order by trans_date asc
</select> </select>
<select id="getTopRpIndustryData" resultType="com.alibaba.fastjson.JSONObject"> <select id="getTopRpIndustryData" resultType="com.alibaba.fastjson.JSONObject">
SELECT SELECT
sum(so.total) as total_amount, sum(so.total) as total_amount,
@ -1148,7 +1164,7 @@
inner JOIN sys_clients c ON so.client_id = c.client_id inner JOIN sys_clients c ON so.client_id = c.client_id
AND c.is_valid = 1 AND c.is_valid = 1
<if test="industry != null and industry=='1'.toString()"> <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>
<if test="industry != null and industry!='0'.toString() and industry!='1'.toString()"> <if test="industry != null and industry!='0'.toString() and industry!='1'.toString()">
<bind name="industry" value="industry+'%'"/> <bind name="industry" value="industry+'%'"/>

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

@ -90,7 +90,7 @@
AND c.business_structure=#{business_structure} AND c.business_structure=#{business_structure}
</if> </if>
<if test="industry != null and industry == '1'.toString()"> <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>
<if test="industry!=null and industry != '0'.toString() and industry and industry!='1'"> <if test="industry!=null and industry != '0'.toString() and industry and industry!='1'">
<bind name="industry" value="industry+'%'"/> <bind name="industry" value="industry+'%'"/>

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

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

@ -1,54 +1,35 @@
<section class="content-header"> <section class="content-header">
<h1>授信退款|Credit refund</h1> <h1>商户欠款列表</h1>
<ol class="breadcrumb"> <ol class="breadcrumb">
<li> <li>
<i class="fa fa-list-alt"></i> Transaction <i class="fa fa-list-alt"></i> Transaction
</li> </li>
<li class="active">授信退款|Credit refund</li> <li class="active">商户欠款列表</li>
</ol> </ol>
</section> </section>
<section class="content">
<div class="content">
<div class="row">
<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="row">
<div class="box"> <div class="col-sm-12">
<div class="box-body table-responsive"> <div class="nav-tabs-custom">
<table class="table table-bordered table-hover table-striped"> <div class="tab-content" ui-view>
<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>
</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. * 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'; 'use strict';
var colors = ['#00c0ef', '#00a65a', '#ff851b', '#f39c12', '#d81b60', '#605ca8', '#dd4b39', '#008080', '#8B008B', '#D2691E', '#708090']; var colors = ['#00c0ef', '#00a65a', '#ff851b', '#f39c12', '#d81b60', '#605ca8', '#dd4b39', '#008080', '#8B008B', '#D2691E', '#708090'];
var app = angular.module('analysisTransaction', ['ui.bootstrap', 'ui.router', 'ngEcharts']); 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.params = {industry: 0};
$scope.today = new Date(); $scope.today = new Date();
$scope.pagination = {limit:20}; $scope.pagination = {limit:20};
$scope.royalpay_label = '全部';
$scope.loadRoyalpayindustry = function () { $scope.loadRoyalpayindustry = function () {
$http.get('/static/data/royalpayindustry.json').then(function (resp) { $http.get('/static/data/royalpayindustry.json').then(function (resp) {
$scope.royalpayindustry = resp.data; $scope.royalpayindustry = resp.data;
var selectAll = { var selectAll = {
"label": "All", "label": "全部",
"mccCode": "0", "mccCode": "0",
"children":{} "children":{}
}; };
@ -462,6 +463,7 @@ define(['angular', 'uiBootstrap', 'uiRouter', 'angularEcharts'], function (angul
$scope.onRoyalPayIndustrySelect = function (selectedItem) { $scope.onRoyalPayIndustrySelect = function (selectedItem) {
$scope.params.royalpay_label = selectedItem.label; $scope.params.royalpay_label = selectedItem.label;
$scope.royalpay_label = selectedItem.label;
$scope.params.industry = selectedItem.mccCode; $scope.params.industry = selectedItem.mccCode;
$scope.doAnalysis(); $scope.doAnalysis();
}; };
@ -500,56 +502,362 @@ define(['angular', 'uiBootstrap', 'uiRouter', 'angularEcharts'], function (angul
$scope.params.from = monthBegin; $scope.params.from = monthBegin;
$scope.doAnalysis(); $scope.doAnalysis();
}; };
var amountAnalysis = { var orderOption = {
chart: { chart: {
yAxis: {
splitLine: {show: true},
axisLine: {
lineStyle: {
color: '#000'
}
}
},
backgroundColor: '#fff',
tooltip: { tooltip: {
trigger: 'axis', trigger: 'axis',
formatter: '{b}:AUD {c}' axisPointer: {
}, type: 'shadow'
yAxis: { },
type: 'value', formatter: '总订单数 : {c0}<br />' +
name: '交易金额(AUD)' '行业订单数 : {c1}<br /> ' +
'占比 : {c4}%'
}, },
color: colors legend: {
data: ['当日总订单数', '行业订单数'],
textStyle: {
color: '#000'
}
}
}, },
xAxis: { xAxis: {
basic: { basic: {
type: 'category', axisLine: {
boundaryGap: false lineStyle: {
color: '#000'
}
}
}, },
key: 'trans_date' 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}, basic: {
column: {key: 'total_amount'} 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: { chart: {
yAxis: {
splitLine: {show: true},
axisLine: {
lineStyle: {
color: '#000'
}
}
},
backgroundColor: '#fff',
tooltip: { tooltip: {
trigger: 'axis', 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: { yAxis: {
type: 'value', splitLine: {show: true},
name: '订单数' 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: { xAxis: {
basic: { basic: {
type: 'category', axisLine: {
boundaryGap: false lineStyle: {
color: '#000'
}
}
}, },
key: 'trans_date' key: 'trans_date'
}, },
series: [ series: [
{ {
basic: {type: 'line', label: {normal: {show: true}}, showAllSymbols: true}, basic: {
column: {key: 'orders'} 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; delete params.royalpay_label;
$http.get('/analysis/rp_industry/echarts', {params: params}).then(function (resp) { $http.get('/analysis/rp_industry/echarts', {params: params}).then(function (resp) {
$scope.analysisData = resp.data; $scope.analysisData = resp.data;
$scope.amountAnalysis = chartParser.parse(amountAnalysis, resp.data); $scope.amountAnalysis = chartParser.parse(amountOption, resp.data);
$scope.ordersAnalysis = chartParser.parse(ordersAnalysis, resp.data); $scope.ordersAnalysis = chartParser.parse(orderOption, resp.data);
$scope.partnerAnalysis = chartParser.parse(partnerOption, resp.data);
$scope.future_loading = false; $scope.future_loading = false;
$scope.chooseDay = $filter('date')($scope.params.from, 'yyyy-MM-dd'); $scope.chooseDay = $filter('date')($scope.params.from, 'yyyy-MM-dd');
$scope.loadTopTransPartners(1); $scope.loadTopTransPartners(1);

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

@ -884,11 +884,11 @@
</a> </a>
</div> </div>
<div ng-if="('preRefund'|withModule)" class="col-sm-2 col-xs-6"> <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"> <div class="description-block">
<img src="/static/images/main_menu/transaction_arrears_green.png"/> <img src="/static/images/main_menu/transaction_arrears_green.png"/>
<div class="description-text"> <div class="description-text">
<span class="description-text">授信退款</span> <span class="description-text">商户欠款列表</span>
</div> </div>
</div> </div>
</a> </a>

@ -5759,13 +5759,11 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter
$scope.isCreate = true; $scope.isCreate = true;
$scope.initData =function(){ $scope.initData =function(){
$scope.isCreate = angular.copy(params.isCreate); $scope.isCreate = angular.copy(params.isCreate);
if($scope.isCreate ){ if($scope.isCreate){
$scope.model.incremental_mode = "1"
$scope.model.channel= angular.copy(params.channelOptions[0]) $scope.model.channel= angular.copy(params.channelOptions[0])
$scope.model.channelOptions= angular.copy(params.channelOptions) $scope.model.channelOptions= angular.copy(params.channelOptions)
}else{ }else{
$scope.model = angular.copy(params.serviceChannel); $scope.model = angular.copy(params.serviceChannel);
$scope.model.incremental_mode = $scope.model.incremental_mode.toString()
} }
} }
$scope.initData(); $scope.initData();

@ -1308,26 +1308,6 @@
</div> </div>
</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" <div class="form-group"
ng-class="{'has-error':partnerForm.industry.$invalid && partnerForm.industry.$dirty}"> ng-class="{'has-error':partnerForm.industry.$invalid && partnerForm.industry.$dirty}">
<label class="control-label col-sm-2" for="industry-input"> <label class="control-label col-sm-2" for="industry-input">
@ -1366,76 +1346,6 @@
</div> </div>
</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> </div>
</div> </div>

@ -1172,27 +1172,6 @@
</div> </div>
</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" <div class="form-group"
ng-class="{'has-error':partnerForm.industry.$invalid && partnerForm.industry.$dirty}"> ng-class="{'has-error':partnerForm.industry.$invalid && partnerForm.industry.$dirty}">
<label class="control-label col-sm-2" for="industry-input"> <label class="control-label col-sm-2" for="industry-input">
@ -1231,75 +1210,6 @@
</div> </div>
</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> </div>

@ -18,19 +18,7 @@
</div> </div>
</div> </div>
<div class="form-group has-feedback" <div class="form-group has-feedback" ng-class="{'has-error':service_form.incremental_rate_value.$invalid && service_form.incremental_rate_value.$dirty}">
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}">
<label class="control-label col-sm-4" style="text-align: right">Rate Value:</label> <label class="control-label col-sm-4" style="text-align: right">Rate Value:</label>
<div class="col-sm-6"> <div class="col-sm-6">
<div class="input-group"> <div class="input-group">
@ -50,7 +38,8 @@
</div> </div>
</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}"> <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> <label class="control-label col-sm-4" style="text-align: right">Amount:</label>
<div class="col-sm-6"> <div class="col-sm-6">
<input type="number" name="total_incremental_amount" stringToNumber2 class="form-control" ng-model="model.total_incremental_amount" <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>
</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> </form>
</div> </div>
</div> </div>

@ -1035,16 +1035,6 @@
</div> </div>
</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="form-group">
<div class="col-sm-5"> <div class="col-sm-5">
<label class="control-label col-sm-5">Wechat Industry</label> <label class="control-label col-sm-5">Wechat Industry</label>
@ -1079,45 +1069,6 @@
ng-if="$root.complianceCheck.clientInfo"></i> ng-if="$root.complianceCheck.clientInfo"></i>
</div> </div>
</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> </div>
</div> </div>

@ -1168,26 +1168,6 @@
</div> </div>
</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" <div class="form-group"
ng-class="{'has-error':partnerForm.industry.$invalid && partnerForm.industry.$dirty}"> ng-class="{'has-error':partnerForm.industry.$invalid && partnerForm.industry.$dirty}">
<label class="control-label col-sm-2" for="industry-input"> <label class="control-label col-sm-2" for="industry-input">
@ -1226,76 +1206,6 @@
</div> </div>
</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> </div>

Loading…
Cancel
Save