add 增加merchant warrior合规材料

master
luoyang 5 years ago
parent 79425c194f
commit 39ce176318

@ -0,0 +1,26 @@
package au.com.royalpay.payment.manage.mappers.system;
import com.alibaba.fastjson.JSONObject;
import com.yixsoft.support.mybatis.autosql.annotations.AdvanceSelect;
import com.yixsoft.support.mybatis.autosql.annotations.AutoMapper;
import com.yixsoft.support.mybatis.autosql.annotations.AutoSql;
import com.yixsoft.support.mybatis.autosql.annotations.SqlType;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* Created by yishuqian on 06/03/2017.
*/
@AutoMapper(tablename = "sys_merchant_warrior_files", pkName = "file_id")
public interface ClientMWFilesMapper {
@AutoSql(SqlType.INSERT)
void save(JSONObject partner);
@AutoSql(SqlType.UPDATE)
void update(JSONObject partner);
@AutoSql(SqlType.SELECT)
@AdvanceSelect(addonWhereClause = "is_valid = 1")
List<JSONObject> findClientFile(@Param("client_id") int clientId);
}

@ -0,0 +1,88 @@
package au.com.royalpay.payment.manage.merchants.beans;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.StringUtils;
/**
* Created by yishuqian on 07/03/2017.
*/
public class ClientMWAuthFilesInfo {
private String upay_application_form;
private String upay_agreement_file;
private String upay_offer_letter;
private String upay_driver_license;
private String upay_residence_certificate;
private String upay_risk_level;
private String upay_risk_remark;
public JSONObject toJson(){
return (JSONObject)JSONObject.toJSON(this);
}
public JSONObject toRiskInfoJson() {
JSONObject params = new JSONObject();
if (StringUtils.isNotBlank(upay_risk_level)) {
params.put("upay_risk_level", upay_risk_level);
}
if (StringUtils.isNotBlank(upay_risk_remark)) {
params.put("upay_risk_remark", upay_risk_remark);
}
return params;
}
public String getUpay_agreement_file() {
return upay_agreement_file;
}
public String getUpay_application_form() {
return upay_application_form;
}
public String getUpay_driver_license() {
return upay_driver_license;
}
public String getUpay_offer_letter() {
return upay_offer_letter;
}
public void setUpay_agreement_file(String upay_agreement_file) {
this.upay_agreement_file = upay_agreement_file;
}
public void setUpay_application_form(String upay_application_form) {
this.upay_application_form = upay_application_form;
}
public String getUpay_residence_certificate() {
return upay_residence_certificate;
}
public String getUpay_risk_level() {
return upay_risk_level;
}
public void setUpay_driver_license(String upay_driver_license) {
this.upay_driver_license = upay_driver_license;
}
public void setUpay_offer_letter(String upay_offer_letter) {
this.upay_offer_letter = upay_offer_letter;
}
public void setUpay_residence_certificate(String upay_residence_certificate) {
this.upay_residence_certificate = upay_residence_certificate;
}
public String getUpay_risk_remark() {
return upay_risk_remark;
}
public void setUpay_risk_level(String upay_risk_level) {
this.upay_risk_level = upay_risk_level;
}
public void setUpay_risk_remark(String upay_risk_remark) {
this.upay_risk_remark = upay_risk_remark;
}
}

@ -255,12 +255,16 @@ public interface ClientManager {
void updateClientIdInfo(String clientMoniker,JSONObject params, JSONObject manager);
void updateMWRiskInfoByClient(String clientMoniker,JSONObject params, JSONObject manager);
JSONObject getAuthFiles(JSONObject manager, String clientMoniker);
JSONObject getClientViewAuthFiles(JSONObject manager, String clientMoniker);
JSONObject getAllAuthFiles(JSONObject manager, String clientMoniker);
JSONObject getMWAuthFiles(JSONObject manager, String clientMoniker);
JSONObject getAllKycFiles(JSONObject manager, String clientMoniker);
JSONObject getSourceAgreeFiles(JSONObject manage, String clientMoniker);
@ -273,6 +277,8 @@ public interface ClientManager {
void uploadAuthFilesManager(JSONObject manager, String clientMoniker, ClientAuthFilesInfo filesInfo);
void uploadMWAuthFilesManager(JSONObject manager, String clientMoniker, ClientMWAuthFilesInfo filesInfo);
void uploadKycFiles(JSONObject manager, String clientMoniker, ClientKycFilesInfo filesInfo);
List<JSONObject> uploadKycFilesForWaitCompliance(JSONObject manager, String clientMoniker, ClientKycFilesInfo filesInfo);
@ -379,6 +385,8 @@ public interface ClientManager {
void downloadComplianceZip(@PathVariable String clientMoniker, HttpServletResponse response) throws Exception;
void downloadMWComplianceZip(@PathVariable String clientMoniker, HttpServletResponse response) throws Exception;
void configMasterMerchant(JSONObject manager, String clientMoniker, String master_merchant);
JSONObject getSettlementLog(JSONObject manager, String clientMoniker, TradeLogQuery query);

@ -45,6 +45,7 @@ import au.com.royalpay.payment.manage.mappers.system.*;
import au.com.royalpay.payment.manage.merchants.beans.*;
import au.com.royalpay.payment.manage.merchants.core.*;
import au.com.royalpay.payment.manage.merchants.entity.impls.*;
import au.com.royalpay.payment.manage.merchants.enums.UPayAuthFileEnum;
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;
@ -237,6 +238,8 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
@Resource
private ClientFilesMapper clientFilesMapper;
@Resource
private ClientMWFilesMapper clientMWAuthFilesInfo;
@Resource
private TransactionMapper transactionMapper;
@ -3376,6 +3379,46 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
}
}
@Override
public void downloadMWComplianceZip(String clientMoniker, HttpServletResponse response) throws Exception {
JSONObject client = getClientInfoByMoniker(clientMoniker);
if (client == null) {
throw new InvalidShortIdException();
}
List<JSONObject> files = clientMWAuthFilesInfo.findClientFile(client.getIntValue("client_id"));
if (files != null && files.size() > 0) {
List<String> filePaths = new ArrayList<>();
for (JSONObject file : files) {
filePaths.add(file.getString("file_value"));
}
try {
String downloadFilename = clientMoniker + "_Compliance_Files_" + DateFormatUtils.format(new Date(), "dd/MM/yyyy HH:mm:ss").toString() + ".zip";// 文件的名称
logger.info("正在下载合规文件=====>" + downloadFilename);
// downloadFilename = URLEncoder.encode(downloadFilename, "UTF-8");//转换中文否则可能会产生乱码
response.setContentType("application/octet-stream");// 指明response的返回对象是文件流
response.setHeader("Content-Disposition", "attachment;filename=" + downloadFilename);// 设置在下载框默认显示的文件名
ZipOutputStream zos = new ZipOutputStream(response.getOutputStream());
for (String file : filePaths) {
URL url = new URL(file);
zos.putNextEntry(new ZipEntry(file.substring(file.lastIndexOf("/"))));
InputStream fis = url.openConnection().getInputStream();
byte[] buffer = new byte[1024];
int r = 0;
while ((r = fis.read(buffer)) != -1) {
zos.write(buffer, 0, r);
}
fis.close();
}
zos.flush();
zos.close();
logger.info("合规文件下载成功=====>" + downloadFilename);
} catch (IOException e) {
logger.error("合规文件下载失败", e);
}
}
}
@Override
public void configMasterMerchant(JSONObject manager, String clientMoniker, String master_merchant) {
@ -3540,6 +3583,17 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
clientApproveIdInfo(params,client);
}
@Override
public void updateMWRiskInfoByClient(String clientMoniker, JSONObject params, JSONObject manager) {
JSONObject client = getClientInfoByMoniker(clientMoniker);
if (client == null) {
throw new InvalidShortIdException();
}
int clientId = client.getIntValue("client_id");
params.put("client_id", client.getIntValue("client_id"));
clientConfigMapper.update(params);
}
@Override
public void checkTodo(JSONObject manager, List<TodoNotice> notices) {
if (ManagerRole.OPERATOR.hasRole(manager.getIntValue("role"))) {
@ -3649,6 +3703,20 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
return fileJson;
}
@Override
public JSONObject getMWAuthFiles(JSONObject manager, String clientMoniker) {
JSONObject client = getClientInfoByMoniker(clientMoniker);
if (client == null) {
throw new InvalidShortIdException();
}
List<JSONObject> clientFiles = clientMWAuthFilesInfo.findClientFile(client.getIntValue("client_id"));
JSONObject fileJson = new JSONObject();
for (JSONObject file : clientFiles) {
fileJson.put(file.getString("file_name"), file.getString("file_value"));
}
return fileJson;
}
@Override
public JSONObject getAllKycFiles(JSONObject manager, String clientMoniker) {
JSONObject client = getClientInfoByMoniker(clientMoniker);
@ -3790,6 +3858,25 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
}
}
@Override
@Transactional
public void uploadMWAuthFilesManager(JSONObject manager, String clientMoniker, ClientMWAuthFilesInfo filesInfo) {
JSONObject client = getClientInfoByMoniker(clientMoniker);
if (client == null) {
throw new InvalidShortIdException();
}
int clientId = client.getIntValue("client_id");
try {
updateSysMWClientFiles(manager, clientId, UPayAuthFileEnum.UPAY_APPLICATION_FORM.getFileName(), filesInfo.getUpay_application_form());
updateSysMWClientFiles(manager, clientId, UPayAuthFileEnum.UPAY_AGREEMENT_FILE.getFileName(), filesInfo.getUpay_agreement_file());
updateSysMWClientFiles(manager, clientId, UPayAuthFileEnum.UPAY_OFFER_LETTER.getFileName(), filesInfo.getUpay_offer_letter());
updateSysMWClientFiles(manager, clientId, UPayAuthFileEnum.UPAY_DRIVER_LICENSE.getFileName(), filesInfo.getUpay_driver_license());
updateSysMWClientFiles(manager, clientId, UPayAuthFileEnum.UPAY_RESIDENCE_CERTIFICATE.getFileName(), filesInfo.getUpay_residence_certificate());
} catch (Exception e) {
logger.error("上传合规文件失败", e);
}
}
@Override
@Transactional
public void uploadKycFiles(JSONObject manager, String clientMoniker, ClientKycFilesInfo filesInfo) {
@ -4239,6 +4326,20 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
}
}
public void updateSysMWClientFiles(JSONObject manager, int clientId, String fileType, String fileValue) {
if (fileValue != null) {
JSONObject fileJson = new JSONObject();
fileJson.put("client_id", clientId);
fileJson.put("last_update_date", new Date());
fileJson.put("last_update_by", manager.getString("display_name"));
fileJson.put("file_name", fileType);
fileJson.put("file_value", fileValue);
fileJson.put("is_valid", 1);
clientMWAuthFilesInfo.save(fileJson);
logger.info(clientId + "的fileType文件上传成功");
}
}
public void updateSysClientFilesWithoutRepeat(JSONObject manager, int clientId, String fileType, String fileValue) {
List<JSONObject> repetitiveFiles = clientFilesMapper.findRepetitiveFilesForDelete(clientId,fileType);
if (fileValue != null) {

@ -0,0 +1,28 @@
package au.com.royalpay.payment.manage.merchants.enums;
public enum UPayAuthFileEnum {
ALL(""),
UPAY_APPLICATION_FORM("upay_application_form"),
UPAY_AGREEMENT_FILE("upay_agreement_file"),
UPAY_OFFER_LETTER("upay_offer_letter"),
UPAY_DRIVER_LICENSE("upay_driver_license"),
UPAY_RESIDENCE_CERTIFICATE("upay_residence_certificate");
private final String fileName;
public String getFileName() {
return fileName;
}
UPayAuthFileEnum(String fileName) {
this.fileName = fileName;
}
public String[] getFileNameArrays() {
return new String[]{UPAY_APPLICATION_FORM.getFileName(),
UPAY_AGREEMENT_FILE.getFileName(),
UPAY_OFFER_LETTER.getFileName(),
UPAY_DRIVER_LICENSE.getFileName(),
UPAY_RESIDENCE_CERTIFICATE.getFileName()};
}
}

@ -96,6 +96,11 @@ public class PartnerManageController {
clientManager.updateClientIdInfo(clientMoniker, params, manager);
}
@ManagerMapping(value = "/{clientMoniker}/mw_risk_info", method = RequestMethod.PUT, role = {ManagerRole.ADMIN, ManagerRole.OPERATOR})
public void updateMWRiskInfoByClient(@PathVariable String clientMoniker, @RequestBody JSONObject params, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) {
clientManager.updateMWRiskInfoByClient(clientMoniker, params, manager);
}
@ManagerMapping(value = "/{clientMoniker}/qrcode", method = RequestMethod.GET)
public JSONObject getQrCodeImg(@PathVariable String clientMoniker, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager, QRCodeConfig config) {
return clientManager.getQRCode(manager, clientMoniker, config);
@ -564,6 +569,11 @@ public class PartnerManageController {
return clientManager.getAllAuthFiles(manager, clientMoniker);
}
@ManagerMapping(value = "/{clientMoniker}/mw_file", method = RequestMethod.GET, role = {ManagerRole.ADMIN, ManagerRole.OPERATOR, ManagerRole.BD_USER, ManagerRole.SERVANT})
public JSONObject getMWAuthFiles(@PathVariable String clientMoniker, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) {
return clientManager.getMWAuthFiles(manager, clientMoniker);
}
@ManagerMapping(value = "/{clientMoniker}/kycFile", method = RequestMethod.GET, role = {ManagerRole.ADMIN, ManagerRole.OPERATOR, ManagerRole.BD_USER, ManagerRole.SERVANT})
public JSONObject getKycFiles(@PathVariable String clientMoniker, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) {
return clientManager.getAllKycFiles(manager, clientMoniker);
@ -585,6 +595,12 @@ public class PartnerManageController {
clientManager.uploadAuthFilesManager(manager, clientMoniker, filesInfo);
}
@ManagerMapping(value = "/{clientMoniker}/mw_file", method = RequestMethod.PUT, role = {ManagerRole.ADMIN, ManagerRole.OPERATOR, ManagerRole.BD_USER})
public void uploadMWAuthFiles(@PathVariable String clientMoniker, @RequestBody ClientMWAuthFilesInfo filesInfo,
@ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) {
clientManager.uploadMWAuthFilesManager(manager, clientMoniker, filesInfo);
}
@ManagerMapping(value = "/{clientMoniker}/kycFile", method = RequestMethod.PUT, role = {ManagerRole.ADMIN, ManagerRole.OPERATOR, ManagerRole.BD_USER})
public void uploadKycFiles(@PathVariable String clientMoniker, @RequestBody ClientKycFilesInfo filesInfo,
@ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) {
@ -647,6 +663,11 @@ public class PartnerManageController {
clientManager.downloadComplianceZip(clientMoniker, response);
}
@ManagerMapping(value = "/{clientMoniker}/download/MWcomplianceAsZIP", method = RequestMethod.GET, role = {ManagerRole.ADMIN, ManagerRole.OPERATOR})
public void downloadMWComplianceZip(@PathVariable String clientMoniker, HttpServletResponse response) throws Exception {
clientManager.downloadMWComplianceZip(clientMoniker, response);
}
@ManagerMapping(value = "/{clientMoniker}/master_configuration", method = RequestMethod.PUT, role = {ManagerRole.ADMIN, ManagerRole.OPERATOR})
public void configMasterMerchant(@PathVariable String clientMoniker, @RequestBody JSONObject merchant, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) {
clientManager.configMasterMerchant(manager, clientMoniker, merchant.getString("master_merchant"));

@ -28,10 +28,9 @@ public class OrgInfo {
private Double wechat_rate_value;
private Double bestpay_rate_value;
private Double alipayonline_rate_value;
private Double jd_rate_value;
private Double hf_rate_value;
private Double yeepay_rate_value;
private Double cb_bankpay_rate_value;
private Double rpaypmt_card_rate_value;
private Double rpaypmt_dd_rate_value;
private int is_valid;
private String search_text;
private int page = 1;
@ -41,12 +40,10 @@ public class OrgInfo {
private String commission_type;
private Double min_wechat_rate;
private Double min_alipay_rate;
private Double min_bestpay_rate;
private Double min_jd_rate;
private Double min_alipayonline_rate;
private Double min_hf_rate;
private Double min_yeepay_rate;
private Double min_cb_bankpay_rate;
private Double min_rpaypmt_card_rate;
private Double min_rpaypmt_dd_rate;
private String state;
private String senior_parent_org_id;
@ -201,14 +198,6 @@ public class OrgInfo {
this.alipayonline_rate_value = alipayonline_rate_value;
}
public Double getJd_rate_value() {
return jd_rate_value;
}
public void setJd_rate_value(Double jd_rate_value) {
this.jd_rate_value = jd_rate_value;
}
public String getSearch_text() {
return search_text;
}
@ -273,22 +262,6 @@ public class OrgInfo {
this.min_alipay_rate = min_alipay_rate;
}
public Double getMin_bestpay_rate() {
return min_bestpay_rate;
}
public void setMin_bestpay_rate(Double min_bestpay_rate) {
this.min_bestpay_rate = min_bestpay_rate;
}
public Double getMin_jd_rate() {
return min_jd_rate;
}
public void setMin_jd_rate(Double min_jd_rate) {
this.min_jd_rate = min_jd_rate;
}
public Double getMin_alipayonline_rate() {
return min_alipayonline_rate;
}
@ -297,22 +270,6 @@ public class OrgInfo {
this.min_alipayonline_rate = min_alipayonline_rate;
}
public Double getHf_rate_value() {
return hf_rate_value;
}
public void setHf_rate_value(Double hf_rate_value) {
this.hf_rate_value = hf_rate_value;
}
public Double getMin_hf_rate() {
return min_hf_rate;
}
public void setMin_hf_rate(Double min_hf_rate) {
this.min_hf_rate = min_hf_rate;
}
public String getState() {
return state;
}
@ -328,22 +285,6 @@ public class OrgInfo {
this.senior_parent_org_id = senior_parent_org_id;
}
public Double getYeepay_rate_value() {
return yeepay_rate_value;
}
public void setYeepay_rate_value(Double yeepay_rate_value) {
this.yeepay_rate_value = yeepay_rate_value;
}
public Double getMin_yeepay_rate() {
return min_yeepay_rate;
}
public void setMin_yeepay_rate(Double min_yeepay_rate) {
this.min_yeepay_rate = min_yeepay_rate;
}
public Double getCb_bankpay_rate_value() {
return cb_bankpay_rate_value;
}
@ -360,4 +301,35 @@ public class OrgInfo {
this.min_cb_bankpay_rate = min_cb_bankpay_rate;
}
public Double getRpaypmt_card_rate_value() {
return rpaypmt_card_rate_value;
}
public Double getRpaypmt_dd_rate_value() {
return rpaypmt_dd_rate_value;
}
public void setRpaypmt_card_rate_value(Double rpaypmt_card_rate_value) {
this.rpaypmt_card_rate_value = rpaypmt_card_rate_value;
}
public void setRpaypmt_dd_rate_value(Double rpaypmt_dd_rate_value) {
this.rpaypmt_dd_rate_value = rpaypmt_dd_rate_value;
}
public Double getMin_rpaypmt_card_rate() {
return min_rpaypmt_card_rate;
}
public Double getMin_rpaypmt_dd_rate() {
return min_rpaypmt_dd_rate;
}
public void setMin_rpaypmt_card_rate(Double min_rpaypmt_card_rate) {
this.min_rpaypmt_card_rate = min_rpaypmt_card_rate;
}
public void setMin_rpaypmt_dd_rate(Double min_rpaypmt_dd_rate) {
this.min_rpaypmt_dd_rate = min_rpaypmt_dd_rate;
}
}

@ -1,15 +1,15 @@
spring:
datasource:
master:
host: 192.168.0.4:3306
host: 192.168.0.84:3306
jdbc-url: jdbc:mysql://${spring.datasource.master.host}/${spring.datasource.master.schema-name}?useUnicode=true&characterEncoding=utf8&useSSL=false
password: taylor
schema-name: royalpay_production
username: taylor
password: rpayplus
schema-name: royalpay
username: root
slave:
host: 192.168.0.4:3306
host: 192.168.0.84:3306
jdbc-url: jdbc:mysql://${spring.datasource.slave.host}/${spring.datasource.slave.schema-name}?useUnicode=true&characterEncoding=utf8&useSSL=false
password: taylor
schema-name: royalpay_production
username: taylor
password: rpayplus
schema-name: royalpay
username: root
type: com.zaxxer.hikari.HikariDataSource

@ -124,7 +124,7 @@
<div class="col-sm-8">
<div class="input-group">
<input class="form-control" type="number" ng-model="org.alipay_rate_value"
id="alipay_rate_value_input" name="alipay_rate_value" max="100" min="0">
id="alipay_rate_value_input" name="alipay_rate_value" max="100" min="0" required>
<span class="input-group-addon">%</span>
</div>
</div>
@ -136,32 +136,7 @@
<div class="col-sm-8">
<div class="input-group">
<input class="form-control" type="number" ng-model="org.wechat_rate_value"
id="wechat_rate_value_input" name="wechat_rate_value" max="100" min="0">
<span class="input-group-addon">%</span>
</div>
</div>
</div>
<div class="form-group"
ng-class="{'has-error':org_form.bestpay_rate_value.$invalid && org_form.bestpay_rate_value.$dirty}">
<label class="control-label col-sm-2" for="bestpay_rate_value_input">Bestpay rate *</label>
<div class="col-sm-8">
<div class="input-group">
<input class="form-control" type="number" ng-model="org.bestpay_rate_value"
id="bestpay_rate_value_input" name="bestpay_rate_value" max="100"
min="0">
<span class="input-group-addon">%</span>
</div>
</div>
</div>
<div class="form-group"
ng-class="{'has-error':org_form.jd_rate_value.$invalid && org_form.jd_rate_value.$dirty}">
<label class="control-label col-sm-2" for="jd_rate_value_input">JD Pay rate *</label>
<div class="col-sm-8">
<div class="input-group">
<input class="form-control" type="number" ng-model="org.jd_rate_value"
id="jd_rate_value_input" name="jd_rate_value" max="100" min="0">
id="wechat_rate_value_input" name="wechat_rate_value" max="100" min="0" required>
<span class="input-group-addon">%</span>
</div>
</div>
@ -174,35 +149,11 @@
<div class="input-group">
<input class="form-control" type="number" ng-model="org.alipayonline_rate_value"
id="alipayonline_rate_value_input" name="alipayonline_rate_value"
max="100" min="0">
max="100" min="0" required>
<span class="input-group-addon">%</span>
</div>
</div>
</div>
<!--<div class="form-group"
ng-class="{'has-error':org_form.hf_rate_value.$invalid && org_form.hf_rate_value.$dirty}">
<label class="control-label col-sm-2" for="hf_rate_value_input">HF Rate *</label>
<div class="col-sm-8">
<div class="input-group">
<input class="form-control" type="number" ng-model="org.hf_rate_value"
id="hf_rate_value_input" name="hf_rate_value"
max="100" min="0">
<span class="input-group-addon">%</span>
</div>
</div>
</div>-->
<!--<div class="form-group"
ng-class="{'has-error':org_form.yeepay_rate_value.$invalid && org_form.yeepay_rate_value.$dirty}">
<label class="control-label col-sm-2" for="yeepay_rate_value_input">Yeepay Rate *</label>
<div class="col-sm-8">
<div class="input-group">
<input class="form-control" type="number" ng-model="org.yeepay_rate_value"
id="yeepay_rate_value_input" name="yeepay_rate_value"
max="100" min="0">
<span class="input-group-addon">%</span>
</div>
</div>
</div>-->
<div class="form-group"
ng-class="{'has-error':org_form.cb_bankpay_rate_value.$invalid && org_form.cb_bankpay_rate_value.$dirty}">
<label class="control-label col-sm-2" for="cb_bankpay_rate_value_input">CB BankPay Rate *</label>
@ -210,107 +161,104 @@
<div class="input-group">
<input class="form-control" type="number" ng-model="org.cb_bankpay_rate_value"
id="cb_bankpay_rate_value_input" name="cb_bankpay_rate_value"
max="100" min="0">
max="100" min="0" required>
<span class="input-group-addon">%</span>
</div>
</div>
</div>
</div>
<div>
<div class="form-group"
ng-class="{'has-error':org_form.min_wechat_rate.$invalid && org_form.min_wechat_rate.$dirty}">
<label class="control-label col-sm-2" for="min_wechat_rate_input">Min Wechat Rate *</label>
ng-class="{'has-error':org_form.rpaypmt_card_rate_value.$invalid && org_form.rpaypmt_card_rate_value.$dirty}">
<label class="control-label col-sm-2" for="rpaypmt_card_rate_value_input">Card Payment Rate *</label>
<div class="col-sm-8">
<div class="input-group">
<input class="form-control form-control-float" type="number" ng-model="org.min_wechat_rate"
id="min_wechat_rate_input" name="min_wechat_rate" max="100" min="0">
<input class="form-control" type="number" ng-model="org.rpaypmt_card_rate_value"
id="rpaypmt_card_rate_value_input" name="rpaypmt_card_rate_value"
max="100" min="0" required>
<span class="input-group-addon">%</span>
</div>
</div>
</div>
<div class="form-group"
ng-class="{'has-error':org_form.min_alipay_rate.$invalid && org_form.min_alipay_rate.$dirty}">
<label class="control-label col-sm-2" for="min_alipay_rate_input">Min Alipay Rate *</label>
ng-class="{'has-error':org_form.rpaypmt_dd_rate_value.$invalid && org_form.rpaypmt_dd_rate_value.$dirty}">
<label class="control-label col-sm-2" for="rpaypmt_dd_rate_value_input">Direct Debit Rate *</label>
<div class="col-sm-8">
<div class="input-group">
<input class="form-control" type="number" ng-model="org.min_alipay_rate"
id="min_alipay_rate_input" name="min_alipay_rate" max="100" min="0" required>
<input class="form-control" type="number" ng-model="org.rpaypmt_dd_rate_value"
id="rpaypmt_dd_rate_value_input" name="rpaypmt_dd_rate_value"
max="100" min="0" required>
<span class="input-group-addon">%</span>
</div>
</div>
</div>
</div>
<div>
<div class="form-group"
ng-class="{'has-error':org_form.min_bestpay_rate.$invalid && org_form.min_bestpay_rate.$dirty}">
<label class="control-label col-sm-2" for="min_bestpay_rate_input">Min Bestpay Rate *</label>
ng-class="{'has-error':org_form.min_wechat_rate.$invalid && org_form.min_wechat_rate.$dirty}">
<label class="control-label col-sm-2" for="min_wechat_rate_input">Min Wechat Rate</label>
<div class="col-sm-8">
<div class="input-group">
<input class="form-control form-control-float" type="number"
ng-model="org.min_bestpay_rate"
id="min_bestpay_rate_input" name="min_bestpay_rate" max="100" min="0"
required>
<input class="form-control form-control-float" type="number" ng-model="org.min_wechat_rate"
id="min_wechat_rate_input" name="min_wechat_rate" max="100" min="0">
<span class="input-group-addon">%</span>
</div>
</div>
</div>
<div class="form-group"
ng-class="{'has-error':org_form.min_jd_rate.$invalid && org_form.min_jd_rate.$dirty}">
<label class="control-label col-sm-2" for="min_jd_rate_input">Min Jd Rate *</label>
ng-class="{'has-error':org_form.min_alipay_rate.$invalid && org_form.min_alipay_rate.$dirty}">
<label class="control-label col-sm-2" for="min_alipay_rate_input">Min Alipay Rate</label>
<div class="col-sm-8">
<div class="input-group">
<input class="form-control" type="number" ng-model="org.min_jd_rate"
id="min_jd_rate_input" name="min_jd_rate" max="100" min="0" required>
<input class="form-control" type="number" ng-model="org.min_alipay_rate"
id="min_alipay_rate_input" name="min_alipay_rate" max="100" min="0">
<span class="input-group-addon">%</span>
</div>
</div>
</div>
<div class="form-group"
ng-class="{'has-error':org_form.min_alipayonline_rate.$invalid && org_form.min_alipayonline_rate.$dirty}">
<label class="control-label col-sm-2" for="min_alipayonline_rate_input">Min Alipayonline Rate *</label>
<label class="control-label col-sm-2" for="min_alipayonline_rate_input">Min Alipayonline Rate</label>
<div class="col-sm-8">
<div class="input-group">
<input class="form-control" type="number" ng-model="org.min_alipayonline_rate"
id="min_alipayonline_rate_input" name="min_alipayonline_rate" max="100"
min="0" required>
min="0">
<span class="input-group-addon">%</span>
</div>
</div>
</div>
<!--<div class="form-group"
ng-class="{'has-error':org_form.min_hf_rate.$invalid && org_form.min_hf_rate.$dirty}">
<label class="control-label col-sm-2" for="min_hf_rate_input">Min HF Rate *</label>
<div class="form-group"
ng-class="{'has-error':org_form.min_cb_bankpay_rate.$invalid && org_form.min_cb_bankpay_rate.$dirty}">
<label class="control-label col-sm-2" for="min_cb_bankpay_rate_input">Min CB BankPay Rate</label>
<div class="col-sm-8">
<div class="input-group">
<input class="form-control" type="number" ng-model="org.min_hf_rate"
id="min_hf_rate_input" name="min_hf_rate" max="100"
min="0" required>
<input class="form-control" type="number" ng-model="org.min_cb_bankpay_rate"
id="min_cb_bankpay_rate_input" name="min_cb_bankpay_rate" max="100"
min="0">
<span class="input-group-addon">%</span>
</div>
</div>
</div>-->
<!--<div class="form-group"
ng-class="{'has-error':org_form.min_yeepay_rate.$invalid && org_form.min_yeepay_rate.$dirty}">
<label class="control-label col-sm-2" for="min_yeepay_rate_input">Min Yeepay Rate *</label>
</div>
<div class="form-group"
ng-class="{'has-error':org_form.min_rpaypmt_card_rate.$invalid && org_form.min_rpaypmt_card_rate.$dirty}">
<label class="control-label col-sm-2" for="min_rpaypmt_card_rate_input">Min Card Payment Rate</label>
<div class="col-sm-8">
<div class="input-group">
<input class="form-control" type="number" ng-model="org.min_yeepay_rate"
id="min_yeepay_rate_input" name="min_yeepay_rate" max="100"
min="0" required>
<input class="form-control" type="number" ng-model="org.min_rpaypmt_card_rate"
id="min_rpaypmt_card_rate_input" name="min_rpaypmt_card_rate" max="100"
min="0">
<span class="input-group-addon">%</span>
</div>
</div>
</div>-->
</div>
<div class="form-group"
ng-class="{'has-error':org_form.min_cb_bankpay_rate.$invalid && org_form.min_cb_bankpay_rate.$dirty}">
<label class="control-label col-sm-2" for="min_cb_bankpay_rate_input">Min CB BankPay Rate *</label>
ng-class="{'has-error':org_form.min_rpaypmt_dd_rate.$invalid && org_form.min_rpaypmt_dd_rate.$dirty}">
<label class="control-label col-sm-2" for="min_rpaypmt_dd_rate_input">Min Direct Debit Rate</label>
<div class="col-sm-8">
<div class="input-group">
<input class="form-control" type="number" ng-model="org.min_cb_bankpay_rate"
id="min_cb_bankpay_rate_input" name="min_cb_bankpay_rate_rate" max="100"
min="0" required>
<input class="form-control" type="number" ng-model="org.min_rpaypmt_dd_rate"
id="min_rpaypmt_dd_rate_input" name="min_rpaypmt_dd_rate" max="100"
min="0">
<span class="input-group-addon">%</span>
</div>
</div>

@ -113,34 +113,18 @@
</div>
</div>
<div ng-if="org.commission_type == 1">
<div class="form-group" ng-class="{'has-error':org_form.alipay_rate_value.$invalid && org_form.alipay_rate_value.$dirty}">
<label class="control-label col-sm-2" for="alipay_rate_value_input">Alipay Rate *</label>
<div class="col-sm-8">
<input class="form-control form-control-float" type="number" ng-model="org.alipay_rate_value" id="alipay_rate_value_input" name="alipay_rate_value" max="100" min="0">
<span class="input-group-addon form-control-span">%</span>
</div>
</div>
<div class="form-group" ng-class="{'has-error':org_form.wechat_rate_value.$invalid && org_form.wechat_rate_value.$dirty}">
<label class="control-label col-sm-2" for="wechat_rate_value_input">Wechat Rate *</label>
<div class="col-sm-8">
<input class="form-control form-control-float" type="number" ng-model="org.wechat_rate_value" id="wechat_rate_value_input" name="wechat_rate_value" max="100" min="0">
<input class="form-control form-control-float" type="number" ng-model="org.wechat_rate_value" id="wechat_rate_value_input" name="wechat_rate_value" max="100" min="0" required>
<span class="input-group-addon form-control-span">%</span>
</div>
</div>
<div class="form-group" ng-class="{'has-error':org_form.bestpay_rate_value.$invalid && org_form.bestpay_rate_value.$dirty}">
<label class="control-label col-sm-2" for="bestpay_rate_value_input">Bestpay Rate *</label>
<div class="col-sm-8">
<input class="form-control form-control-float" type="number" ng-model="org.bestpay_rate_value" id="bestpay_rate_value_input" name="bestpay_rate_value" max="100" min="0">
<span class="input-group-addon form-control-span">%</span>
</div>
</div>
<div class="form-group" ng-class="{'has-error':org_form.jd_rate_value.$invalid && org_form.jd_rate_value.$dirty}">
<label class="control-label col-sm-2" for="jd_rate_value_input">JD Pay Rate *</label>
<div class="form-group" ng-class="{'has-error':org_form.alipay_rate_value.$invalid && org_form.alipay_rate_value.$dirty}">
<label class="control-label col-sm-2" for="alipay_rate_value_input">Alipay Rate *</label>
<div class="col-sm-8">
<input class="form-control form-control-float" type="number" ng-model="org.jd_rate_value" id="jd_rate_value_input" name="jd_rate_value" max="100" min="0">
<input class="form-control form-control-float" type="number" ng-model="org.alipay_rate_value" id="alipay_rate_value_input" name="alipay_rate_value" max="100" min="0" required>
<span class="input-group-addon form-control-span">%</span>
</div>
</div>
@ -148,28 +132,28 @@
<div class="form-group" ng-class="{'has-error':org_form.alipayonline_rate_value.$invalid && org_form.alipayonline_rate_value.$dirty}">
<label class="control-label col-sm-2" for="alipayonline_rate_value_input">AlipayOnline Rate *</label>
<div class="col-sm-8">
<input class="form-control form-control-float" type="number" ng-model="org.alipayonline_rate_value" id="alipayonline_rate_value_input" name="alipayonline_rate_value" max="100" min="0">
<input class="form-control form-control-float" type="number" ng-model="org.alipayonline_rate_value" id="alipayonline_rate_value_input" name="alipayonline_rate_value" max="100" min="0" required>
<span class="input-group-addon form-control-span">%</span>
</div>
</div>
<!--<div class="form-group" ng-class="{'has-error':org_form.hf_rate_value.$invalid && org_form.hf_rate_value.$dirty}">
<label class="control-label col-sm-2" for="hf_rate_value_input">HF Rate *</label>
<div class="form-group" ng-class="{'has-error':org_form.cb_bankpay_rate_value.$invalid && org_form.cb_bankpay_rate_value.$dirty}">
<label class="control-label col-sm-2" for="cb_bankpay_rate_value_input">CB BankPay Rate *</label>
<div class="col-sm-8">
<input class="form-control form-control-float" type="number" ng-model="org.hf_rate_value" id="hf_rate_value_input" name="hf_rate_value" max="100" min="0">
<input class="form-control form-control-float" type="number" ng-model="org.cb_bankpay_rate_value" id="cb_bankpay_rate_value_input" name="cb_bankpay_rate_value" max="100" min="0" required>
<span class="input-group-addon form-control-span">%</span>
</div>
</div>
<div class="form-group" ng-class="{'has-error':org_form.yeepay_rate_value.$invalid && org_form.yeepay_rate_value.$dirty}">
<label class="control-label col-sm-2" for="yeepay_rate_value_input">Yeepay Rate *</label>
<div class="form-group" ng-class="{'has-error':org_form.rpaypmt_card_rate_value.$invalid && org_form.rpaypmt_card_rate_value.$dirty}">
<label class="control-label col-sm-2" for="rpaypmt_card_rate_value_input">Card Payment Rate *</label>
<div class="col-sm-8">
<input class="form-control form-control-float" type="number" ng-model="org.yeepay_rate_value" id="yeepay_rate_value_input" name="yeepay_rate_value" max="100" min="0">
<input class="form-control form-control-float" type="number" ng-model="org.rpaypmt_card_rate_value" id="rpaypmt_card_rate_value_input" name="rpaypmt_card_rate_value" max="100" min="0" required>
<span class="input-group-addon form-control-span">%</span>
</div>
</div>-->
<div class="form-group" ng-class="{'has-error':org_form.cb_bankpay_rate_value.$invalid && org_form.cb_bankpay_rate_value.$dirty}">
<label class="control-label col-sm-2" for="cb_bankpay_rate_value_input">CB BankPay Rate *</label>
</div>
<div class="form-group" ng-class="{'has-error':org_form.rpaypmt_dd_rate_value.$invalid && org_form.rpaypmt_dd_rate_value.$dirty}">
<label class="control-label col-sm-2" for="rpaypmt_dd_rate_value_input">Direct Debit Rate *</label>
<div class="col-sm-8">
<input class="form-control form-control-float" type="number" ng-model="org.cb_bankpay_rate_value" id="cb_bankpay_rate_value_input" name="cb_bankpay_rate_value" max="100" min="0">
<input class="form-control form-control-float" type="number" ng-model="org.rpaypmt_dd_rate_value" id="rpaypmt_dd_rate_value_input" name="rpaypmt_dd_rate_value" max="100" min="0" required>
<span class="input-group-addon form-control-span">%</span>
</div>
</div>
@ -179,7 +163,7 @@
<div>
<div class="form-group"
ng-class="{'has-error':org_form.min_wechat_rate.$invalid && org_form.min_wechat_rate.$dirty}">
<label class="control-label col-sm-2" for="min_wechat_rate_input">Min Wechat Rate *</label>
<label class="control-label col-sm-2" for="min_wechat_rate_input">Min Wechat Rate</label>
<div class="col-sm-8">
<input class="form-control form-control-float" type="number" ng-model="org.min_wechat_rate"
id="min_wechat_rate_input" name="min_wechat_rate" max="100" min="0">
@ -188,7 +172,7 @@
</div>
<div class="form-group"
ng-class="{'has-error':org_form.min_alipay_rate.$invalid && org_form.min_alipay_rate.$dirty}">
<label class="control-label col-sm-2" for="min_alipay_rate_input">Min Alipay Rate *</label>
<label class="control-label col-sm-2" for="min_alipay_rate_input">Min Alipay Rate</label>
<div class="col-sm-8">
<input class="form-control form-control-float" type="number" ng-model="org.min_alipay_rate"
id="min_alipay_rate_input" name="min_alipay_rate" max="100" min="0">
@ -196,104 +180,46 @@
</div>
</div>
<div class="form-group"
ng-class="{'has-error':org_form.min_bestpay_rate.$invalid && org_form.min_bestpay_rate.$dirty}">
<label class="control-label col-sm-2" for="min_bestpay_rate_input">Min Bestpay Rate *</label>
<div class="col-sm-8">
<input class="form-control form-control-float" type="number" ng-model="org.min_bestpay_rate"
id="min_bestpay_rate_input" name="min_bestpay_rate" max="100" min="0">
<span class="input-group-addon form-control-span">%</span>
</div>
</div>
<div class="form-group"
ng-class="{'has-error':org_form.min_jd_rate.$invalid && org_form.min_jd_rate.$dirty}">
<label class="control-label col-sm-2" for="min_jd_rate_input">Min Jd Rate *</label>
<div class="col-sm-8">
<input class="form-control form-control-float" type="number" ng-model="org.min_jd_rate"
id="min_jd_rate_input" name="min_jd_rate" max="100" min="0">
<span class="input-group-addon form-control-span">%</span>
</div>
</div>
<div class="form-group"
ng-class="{'has-error':org_form.min_alipayonline_rate.$invalid && org_form.min_alipayonline_rate.$dirty}">
<label class="control-label col-sm-2" for="min_alipayonline_rate_input">Min Alipayonline Rate *</label>
<label class="control-label col-sm-2" for="min_alipayonline_rate_input">Min Alipayonline Rate</label>
<div class="col-sm-8">
<input class="form-control form-control-float" type="number" ng-model="org.min_alipayonline_rate"
id="min_alipayonline_rate_input" name="min_alipayonline_rate" max="100" min="0">
<span class="input-group-addon form-control-span">%</span>
</div>
</div>
<!--<div class="form-group"
ng-class="{'has-error':org_form.min_hf_rate.$invalid && org_form.min_hf_rate.$dirty}">
<label class="control-label col-sm-2" for="min_hf_rate_input">Min HF Rate *</label>
<div class="form-group"
ng-class="{'has-error':org_form.min_cb_bankpay_rate.$invalid && org_form.min_cb_bankpay_rate.$dirty}">
<label class="control-label col-sm-2" for="min_cb_bankpay_rate_input">Min CB BankPay Rate</label>
<div class="col-sm-8">
<input class="form-control form-control-float" type="number" ng-model="org.min_hf_rate"
id="min_hf_rate_input" name="min_hf_rate" max="100" min="0">
<input class="form-control form-control-float" type="number" ng-model="org.min_cb_bankpay_rate"
id="min_cb_bankpay_rate_input" name="min_cb_bankpay_rate" max="100" min="0">
<span class="input-group-addon form-control-span">%</span>
</div>
</div>
<div class="form-group"
ng-class="{'has-error':org_form.min_yeepay_rate.$invalid && org_form.min_yeepay_rate.$dirty}">
<label class="control-label col-sm-2" for="min_yeepay_rate_input">Min Yeepay Rate *</label>
ng-class="{'has-error':org_form.min_rpaypmt_card_rate.$invalid && org_form.min_rpaypmt_card_rate.$dirty}">
<label class="control-label col-sm-2" for="min_rpaypmt_card_rate_input">Min Card Payment Rate</label>
<div class="col-sm-8">
<input class="form-control form-control-float" type="number" ng-model="org.min_yeepay_rate"
id="min_yeepay_rate_input" name="min_yeepay_rate" max="100" min="0">
<input class="form-control form-control-float" type="number" ng-model="org.min_rpaypmt_card_rate"
id="min_rpaypmt_card_rate_input" name="min_rpaypmt_card_rate" max="100" min="0">
<span class="input-group-addon form-control-span">%</span>
</div>
</div>-->
</div>
<div class="form-group"
ng-class="{'has-error':org_form.min_cb_bankpay_rate.$invalid && org_form.min_cb_bankpay_rate.$dirty}">
<label class="control-label col-sm-2" for="min_yeepay_rate_input">Min CB BankPay Rate *</label>
ng-class="{'has-error':org_form.min_rpaypmt_dd_rate.$invalid && org_form.min_rpaypmt_dd_rate.$dirty}">
<label class="control-label col-sm-2" for="min_rpaypmt_dd_rate_input">Min Direct Debit Rate</label>
<div class="col-sm-8">
<input class="form-control form-control-float" type="number" ng-model="org.min_cb_bankpay_rate"
id="min_cb_bankpay_rate_input" name="min_cb_bankpay_rate" max="100" min="0">
<input class="form-control form-control-float" type="number" ng-model="org.min_rpaypmt_dd_rate"
id="min_rpaypmt_dd_rate_input" name="min_rpaypmt_dd_rate" max="100" min="0">
<span class="input-group-addon form-control-span">%</span>
</div>
</div>
</div>
</div>
<!-- <div ng-if="(org.type == 0 || currentUser.org_id !=null)">
<div class="form-group"
ng-class="{'has-error':org_form.min_alipay_rate.$invalid && org_form.min_alipay_rate.$dirty}">
<label class="control-label col-sm-2" for="min_alipay_rate_input">Min Alipay Rate *</label>
<div class="col-sm-8">
<input class="form-control" type="number" ng-model="org.min_alipay_rate"
id="min_alipay_rate_input" name="min_alipay_rate" max="100">
</div>
</div>
<div class="form-group"
ng-class="{'has-error':org_form.min_bestpay_rate.$invalid && org_form.min_bestpay_rate.$dirty}">
<label class="control-label col-sm-2" for="min_bestpay_rate_input">Min Bestpay Rate *</label>
<div class="col-sm-8">
<input class="form-control" type="number" ng-model="org.min_bestpay_rate"
id="min_bestpay_rate_input" name="min_bestpay_rate" max="100">
</div>
</div>
<div class="form-group"
ng-class="{'has-error':org_form.min_jd_rate.$invalid && org_form.min_jd_rate.$dirty}">
<label class="control-label col-sm-2" for="min_jd_rate_input">Min Jd Rate *</label>
<div class="col-sm-8">
<input class="form-control" type="number" ng-model="org.min_jd_rate"
id="min_jd_rate_input" name="min_jd_rate" max="100">
</div>
</div>
<div class="form-group"
ng-class="{'has-error':org_form.min_alipayonline_rate.$invalid && org_form.min_alipayonline_rate.$dirty}">
<label class="control-label col-sm-2" for="min_alipayonline_rate_input">Min Alipayonline Rate *</label>
<div class="col-sm-8">
<input class="form-control" type="number" ng-model="org.min_alipayonline_rate"
id="min_alipayonline_rate_input" name="min_alipayonline_rate" max="100">
</div>
</div>
</div>-->
<div class="form-group" ng-class="{'has-error':org_form.contact_person.$invalid && org_form.contact_person.$dirty}">
<label class="control-label col-sm-2" for="org_contact_person_input">Contact Person *</label>
<div class="col-sm-8">
@ -766,12 +692,6 @@
<img ng-if='clientExtracts.channel=="Alipay"' src="/static/images/alipay_sign_lg.png"/>
<img ng-if='clientExtracts.channel=="AlipayOnline"' style="width: 48px;height: 48px" src="/static/images/alipay_online.png"/>
<img ng-if='clientExtracts.channel=="Wechat"' src="/static/images/wechatpay_sign_lg.png"/>
<img ng-if='clientExtracts.channel=="Bestpay"' src="/static/images/bestpay_sign_lg.png"/>
<img ng-if='clientExtracts.channel=="hf"' src="/static/images/hf_sign_lg.png"/>
<img ng-if='clientExtracts.channel=="jd"' src="/static/images/jd_sign_lg.png"/>
<img ng-if='clientExtracts.channel=="Yeepay"' src="/static/images/yeepay_sign_lg.png"/>
<img ng-if='clientExtracts.channel=="Rpay"' src="/static/images/rpayplus_sign_lg.png"/>
{{clientExtracts.channel}}
</td>
</tr>

@ -167,6 +167,15 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter
return $http.get('/sys/partners/' + $stateParams.clientMoniker + '/file');
}]
}
}).state('partners.detail.MW_files', {
url: '/mw_files',
templateUrl: '/static/payment/partner/templates/partner_mw_auth_files.html',
controller: 'partnerMWAuthFileCtrl',
resolve: {
file: ['$http', '$stateParams', function ($http, $stateParams) {
return $http.get('/sys/partners/' + $stateParams.clientMoniker + '/mw_file');
}]
}
}).state('partners.detail.kyc_files', {
url: '/kyc_files',
templateUrl: '/static/payment/kyc/templates/partner_kyc_files.html',
@ -4378,6 +4387,253 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter
}]);
app.controller('partnerMWAuthFileCtrl', ['$scope', '$http', '$rootScope', 'commonDialog', '$state', 'Upload', 'file', function ($scope, $http, $rootScope, commonDialog, $state, Upload, file) {
$scope.id_info_form = {edit: false};
$scope.file = file.data || {};
$scope.file.upay_risk_level = $scope.partner.upay_risk_level;
$scope.file.upay_risk_remark = $scope.partner.upay_risk_remark;
$scope.uploadApplyFile = function (file) {
if (file != null) {
if (file.size > 3 * 1024 * 1024) {
commonDialog.alert({title: 'Error', content: '文件大小不能超过3MB请压缩后重试', type: 'error'})
} else {
$scope.bankFileProgress = {value: 0};
Upload.upload({
url: '/attachment/files',
data: {file: file}
}).then(function (resp) {
delete $scope.bankFileProgress;
$scope.file.upay_application_form = resp.data.url;
$scope.updateFile();
if ($scope.file.upay_application_form.endsWith('pdf')) {
$scope.bankIsImage = false;
} else {
$scope.bankIsImage = true;
}
}, function (resp) {
delete $scope.bankFileProgress;
commonDialog.alert({title: 'Upload Failed', content: resp.data.message, type: 'error'})
}, function (evt) {
$scope.bankFileProgress.value = parseInt(100 * evt.loaded / evt.total);
})
}
}
};
$scope.agreeIsImage = true;
if ($scope.file.file_agreement_info && $scope.file.file_agreement_info.endsWith('pdf')) {
$scope.agreeIsImage = false;
}
$scope.bankIsImage = true;
if ($scope.file.upay_application_form && $scope.file.upay_application_form.endsWith('pdf')) {
$scope.bankIsImage = false;
}
$scope.companyIsImage = true;
if ($scope.file.file_company_info && $scope.file.file_company_info.endsWith('pdf')) {
$scope.companyIsImage = false;
}
$scope.applyIsImage = true;
if ($scope.file.file_apply_info && $scope.file.file_apply_info.endsWith('pdf')) {
$scope.applyIsImage = false;
}
$scope.idIsImage = true;
if ($scope.file.file_id_info && $scope.file.file_id_info.endsWith('pdf')) {
$scope.idIsImage = false;
}
$scope.uploadAgreementFile = function (file) {
if (file != null) {
if (file.size > 3 * 1024 * 1024) {
commonDialog.alert({title: 'Error', content: '文件大小不能超过3MB请压缩后重试', type: 'error'})
} else {
$scope.companyFileProgress = {value: 0};
Upload.upload({
url: '/attachment/files',
data: {file: file}
}).then(function (resp) {
delete $scope.companyFileProgress;
$scope.file.upay_agreement_file = resp.data.url;
$scope.updateFile();
if ($scope.file.upay_agreement_file.endsWith('pdf')) {
$scope.companyIsImage = false;
} else {
$scope.companyIsImage = true;
}
}, function (resp) {
delete $scope.companyFileProgress;
commonDialog.alert({title: 'Upload Failed', content: resp.data.message, type: 'error'})
}, function (evt) {
$scope.companyFileProgress.value = parseInt(100 * evt.loaded / evt.total);
})
}
}
};
$scope.uploadOfferFile = function (file) {
if (file != null) {
if (file.size > 3 * 1024 * 1024) {
commonDialog.alert({title: 'Error', content: '文件大小不能超过3MB请压缩后重试', type: 'error'})
} else {
$scope.idFileProgress = {value: 0};
Upload.upload({
url: '/attachment/files',
data: {file: file}
}).then(function (resp) {
delete $scope.idFileProgress;
$scope.file.upay_offer_letter = resp.data.url;
$scope.updateFile();
if ($scope.file.upay_offer_letter.endsWith('pdf')) {
$scope.idIsImage = false;
} else {
$scope.idIsImage = true;
}
}, function (resp) {
delete $scope.idFileProgress;
commonDialog.alert({title: 'Upload Failed', content: resp.data.message, type: 'error'})
}, function (evt) {
$scope.idFileProgress.value = parseInt(100 * evt.loaded / evt.total);
})
}
}
};
$scope.uploadDriverFile = function (file) {
if (file != null) {
if (file.size > 10 * 1024 * 1024) {
commonDialog.alert({title: 'Error', content: '文件大小不能超过10MB请压缩后重试', type: 'error'})
} else {
$scope.agreementFileProgress = {value: 0};
Upload.upload({
url: '/attachment/files',
data: {file: file}
}).then(function (resp) {
delete $scope.agreementFileProgress;
$scope.file.upay_driver_license = resp.data.url;
$scope.updateFile();
if ($scope.file.upay_driver_license.endsWith('pdf')) {
$scope.agreeIsImage = false;
} else {
$scope.agreeIsImage = true;
}
}, function (resp) {
delete $scope.agreementFileProgress;
commonDialog.alert({title: 'Upload Failed', content: resp.data.message, type: 'error'})
}, function (evt) {
$scope.agreementFileProgress.value = parseInt(100 * evt.loaded / evt.total);
})
}
}
};
$scope.uploadResidenceFile = function (file) {
if (file != null) {
if (file.size > 3 * 1024 * 1024) {
commonDialog.alert({title: 'Error', content: '文件大小不能超过3MB请压缩后重试', type: 'error'})
} else {
$scope.applyFileProgress = {value: 0};
Upload.upload({
url: '/attachment/files',
data: {file: file}
}).then(function (resp) {
delete $scope.applyFileProgress;
$scope.file.upay_residence_certificate = resp.data.url;
$scope.updateFile();
if ($scope.file.upay_residence_certificate.endsWith('pdf')) {
$scope.applyIsImage = false;
} else {
$scope.applyIsImage = true;
}
}, function (resp) {
delete $scope.applyFileProgress;
commonDialog.alert({title: 'Upload Failed', content: resp.data.message, type: 'error'})
}, function (evt) {
$scope.applyFileProgress.value = parseInt(100 * evt.loaded / evt.total);
})
}
}
};
$scope.saveIdInfo = function () {
if (!$scope.file.upay_risk_level) {
commonDialog.alert({title: 'Error', content: '请选择商户风险等级', type: 'error'});
return;
}
var config = {};
config.upay_risk_level = $scope.file.upay_risk_level;
config.upay_risk_remark = $scope.file.upay_risk_remark;
$http.put('/sys/partners/' + $scope.partner.client_moniker + '/mw_risk_info', config).then(function (resp) {
commonDialog.alert({title: 'Success', content: 'Risk Info Updated', type: 'success'})
$state.reload();
}, function (resp) {
commonDialog.alert({title: 'Error', content: resp.data.message, type: 'error'})
$state.reload();
});
};
$scope.cancelIdInfo = function () {
$state.reload();
$scope.id_info_form.edit=false
};
$scope.downloadAsZip = function () {
var url = '/sys/partners/' + $scope.partner.client_moniker + '/download/MWcomplianceAsZIP';
return url;
};
$scope.deleteComplianceFiles = function (file_id) {
commonDialog.confirm({
title: 'Warning',
content: 'This operation will delete the file, Are you sure?'
}).then(function () {
$http.put('/sys/partners/auth_file/' + file_id + '/delete').then(function (resp) {
commonDialog.alert({
title: 'Success',
content: 'Delete Successful',
type: 'success'
});
$state.reload();
}, function (resp) {
commonDialog.alert({title: 'Error', content: resp.data.message, type: 'error'});
})
})
};
$scope.updateFile = function () {
$http.put('/sys/partners/' + $scope.partner.client_moniker + '/mw_file', $scope.file).then(function () {
commonDialog.alert({
title: 'Success',
content: 'Upload Successful',
type: 'success'
});
$state.reload();
}, function (resp) {
commonDialog.alert({title: 'Error', content: resp.data.message, type: 'error'});
})
}
function commitError() {
commonDialog.alert({
title: 'Error',
content: 'Missing file',
type: 'error'
});
};
$scope.complianceCheck = function () {
if (!$rootScope.complianceCheck) {
$rootScope.complianceCheck = {};
}
$rootScope.complianceCheck.client_id = $scope.partner.client_id;
$rootScope.complianceCheck.authFile = true;
};
$scope.complianceChangeCheck = function () {
if ($rootScope.complianceCheck) {
if ($scope.partner.client_id != $rootScope.complianceCheck.client_id) {
delete $rootScope.complianceCheck;
}
}
};
$scope.complianceChangeCheck();
}]);
app.controller('partnerKycFileCtrl', ['$scope', '$http', '$rootScope', 'commonDialog', '$state', 'Upload', 'file', function ($scope, $http, $rootScope, commonDialog, $state, Upload, file) {
$scope.file = file.data || {};

@ -277,6 +277,9 @@
<li ui-sref-active="active" ng-if="partner.show_all_permission && partner.is_valid==1">
<a ui-sref=".files">Compliance Files</a>
</li>
<li ui-sref-active="active" ng-if="partner.show_all_permission && partner.is_valid==1">
<a ui-sref=".MW_files">Merchant Warrior Compliance Files</a>
</li>
<!--<li ui-sref-active="active" ng-if="partner.show_all_permission && partner.is_valid==1">
<a ui-sref=".kyc_files">KYC Files</a>
</li>-->

@ -0,0 +1,194 @@
<style type="text/css">
img {
width: 100%;
}
</style>
<div class="panel panel-default">
<div class="panel-heading">Audit Files &nbsp;&nbsp;&nbsp;
<a class="btn-group btn btn-success" ng-if="file" ng-href="{{downloadAsZip()}}" target="_blank">
<i class="fa fa-cloud-download">一键下载</i>
</a>
</div>
<div class="panel-body">
<div class="form-horizontal">
<div class="panel panel-info">
<div class="panel-heading"><h4>
Merchant Warrior商户风险评级
<a class="small" role="button" ng-if="!id_info_form.edit" ng-click="id_info_form.edit=true">
<i class="fa fa-edit"></i></a>
</h4></div>
<div class="panel-body">
<div class="row form-horizontal">
<div class="form-group" ng-if="id_info_form.edit">
<label class="control-label col-sm-2">* 商户风险等级 </label>
<div class="col-sm-4">
<div class="form-control-static">
<select class="form-control"
ng-model="file.upay_risk_level" style="width: 250px">
<option value="">Please Choose</option>
<option value="low" class="risk-options" style="color: green">低风险</option>
<option value="medium" class="risk-options" style="color: orange">中风险</option>
<option value="high" class="risk-options" style="color: red">高风险</option>
</select>
</div>
</div>
</div>
<div class="form-group" ng-if="id_info_form.edit">
<label class="control-label col-sm-2">风控备注</label>
<div class="col-sm-4">
<div class="form-control-static">
<textarea class="form-control" ng-model="file.upay_risk_remark" style="height: 100px"></textarea>
</div>
</div>
</div>
<div class="form-group" ng-if="!id_info_form.edit">
<label class="control-label col-sm-2">商户风险等级 </label>
<div class="col-sm-4">
<div class="form-control-static">
<span ng-if="file.upay_risk_level=='low'" style="color: green">低风险</span>
<span ng-if="file.upay_risk_level=='medium'" style="color: orange">中风险</span>
<span ng-if="file.upay_risk_level=='high'" style="color: red">高风险</span>
</div>
</div>
</div>
<div class="form-group" ng-if="!id_info_form.edit">
<label class="control-label col-sm-2">风控备注</label>
<div class="col-sm-4">
<div class="form-control-static">
<textarea class="form-control" ng-model="file.upay_risk_remark" style="height: 100px" disabled></textarea>
</div>
</div>
</div>
</div>
</div>
<div class="panel-footer" ng-if="id_info_form.edit">
<button class="btn btn-success" ng-click="saveIdInfo()">保存</button>
<button class="btn btn-danger" ng-click="cancelIdInfo()">取消</button>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2">* Merchant Warrior申请表</label>
<div class="col-sm-4">
<div class="form-control-static">
<button class="btn btn-primary" type="button"
ngf-select="uploadApplyFile($file)">
<i class="fa fa-upload"></i> Upload
</button>
<i class="fa fa-check-square-o check-i" aria-hidden="true" style="float: none" ng-if="$root.complianceCheck.authFile"></i>
<a role="button" download="" target="_blank" class="btn-group btn btn-warning" type="button" href="{{file.upay_application_form}}" ><i class="fa fa-download"></i></a>
</div>
<uib-progressbar value="bankFileProgress.value" ng-if="bankFileProgress"></uib-progressbar>
<table>
<tbody>
<tr>
<td><a ng-if="bankIsImage" target="_blank" ng-href="{{file.upay_application_form}}">
<img ng-src="{{file.upay_application_form}}"class="col-sm-6" onerror="this.src='/static/images/file_close.png'">
</a>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2">* Letter of Offer邀约信 </label>
<div class="col-sm-4">
<div class="form-control-static">
<button class="btn btn-primary" type="button"
ngf-select="uploadOfferFile($file)">
<i class="fa fa-upload"></i> Upload
</button>
<i class="fa fa-check-square-o check-i" aria-hidden="true" style="float: none" ng-if="$root.complianceCheck.authFile"></i>
<a role="button" download="" target="_blank" class="btn-group btn btn-warning" type="button" href="{{file.upay_offer_letter}}" ><i class="fa fa-download"></i></a>
</div>
<uib-progressbar value="idFileProgress.value" ng-if="idFileProgress"></uib-progressbar>
<table>
<tbody>
<tr>
<td><a ng-if="idIsImage" target="_blank" ng-href="{{file.upay_offer_letter}}">
<img ng-src="{{file.upay_offer_letter}}"class="col-sm-6"onerror="this.src='/static/images/file_close.png'">
</a>
</td>
</tr>
</tbody></table>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2">* Merchant Warrior商户签署协议</label>
<div class="col-sm-4">
<div class="form-control-static">
<button class="btn btn-primary" type="button"
ngf-select="uploadAgreementFile($file)">
<i class="fa fa-upload"></i> Upload
</button>
<i class="fa fa-check-square-o check-i" aria-hidden="true" style="float: none" ng-if="$root.complianceCheck.authFile"></i>
<a role="button" download="" target="_blank" class="btn-group btn btn-warning" type="button" href="{{file.upay_agreement_file}}" ><i class="fa fa-download"></i></a>
</div>
<uib-progressbar value="companyFileProgress.value" ng-if="companyFileProgress"></uib-progressbar>
<table><tbody>
<tr>
<td><a ng-if="companyIsImage" target="_blank" ng-href="{{file.upay_agreement_file}}">
<img ng-src="{{file.upay_agreement_file}}"class="col-sm-6" onerror="this.src='/static/images/file_close.png'">
</a>
</td>
</tr>
</tbody></table>
</div>
</div>
<div class="form-horizontal">
<div class="form-group">
<label class="control-label col-sm-2">* 最终受益人驾驶执照</label>
<div class="col-sm-4">
<div class="form-control-static">
<button class="btn btn-primary" type="button"
ngf-select="uploadDriverFile($file)">
<i class="fa fa-upload"></i> Upload
</button>
<i class="fa fa-check-square-o check-i" aria-hidden="true" style="float: none" ng-if="$root.complianceCheck.authFile"></i>
<a role="button" download="" target="_blank" class="btn-group btn btn-warning" type="button" href="{{file.upay_driver_license}}" ><i class="fa fa-download"></i></a>
</div>
<uib-progressbar value="agreementFileProgress.value" ng-if="agreementFileProgress"></uib-progressbar>
<table>
<tbody>
<tr>
<td><a ng-if="idIsImage" target="_blank" ng-href="{{file.upay_driver_license}}">
<img ng-src="{{file.upay_driver_license}}"class="col-sm-6" onerror="this.src='/static/images/file_close.png'">
</a>
</td>
</tr>
</tbody></table>
</div>
</div>
</div>
<div class="form-horizontal">
<div class="form-group">
<label class="control-label col-sm-2">* 受益人居住证明文件</label>
<div class="col-sm-4">
<div class="form-control-static">
<button class="btn btn-primary" type="button"
ngf-select="uploadResidenceFile($file)">
<i class="fa fa-upload"></i> Upload
</button>
<i class="fa fa-check-square-o check-i" style="float: none" aria-hidden="true"ng-if="$root.complianceCheck.authFile"></i>
<a role="button" download="" target="_blank" class="btn-group btn btn-warning" type="button" href="{{file.upay_residence_certificate}}" ><i class="fa fa-download"></i></a>
</div>
<uib-progressbar value="bankFileProgress.value" ng-if="applyFileProgress"></uib-progressbar>
<table>
<tbody>
<tr>
<td><a ng-if="idIsImage" target="_blank" ng-href="{{file.upay_residence_certificate}}">
<img ng-src="{{file.upay_residence_certificate}}" class="col-sm-6" onerror="this.src='/static/images/file_close.png'">
</a>
</td>
</tr>
</tbody></table>
</div>
</div>
</div>
</div>
</div>
</div>
Loading…
Cancel
Save