Upd:信用卡合规流程

master
dulingling 4 years ago
parent 9d9499cfc8
commit 4d4ad058b1

@ -52,6 +52,8 @@ public interface ClientFilesMapper {
JSONObject getSourceAgreeFilesByClientId(@Param("client_id") int clientId); JSONObject getSourceAgreeFilesByClientId(@Param("client_id") int clientId);
JSONObject getSourceCardAgreeFilesByClientId(@Param("client_id") int clientId,@Param("file_name")String file_name);
void deleteByClientAndFileId(@Param("file_id") String file_id); void deleteByClientAndFileId(@Param("file_id") String file_id);
void deleteAggreeByClientId(@Param("client_id") int file_id); void deleteAggreeByClientId(@Param("client_id") int file_id);

@ -53,6 +53,8 @@ public interface ClientRateMapper {
JSONObject latestChannelCleanDays(@Param("rate_name")String rate_name, @Param("client_id")int client_id); JSONObject latestChannelCleanDays(@Param("rate_name")String rate_name, @Param("client_id")int client_id);
JSONObject latestCardChannelCleanDays(@Param("rate_name")String rate_name, @Param("client_id")int client_id);
JSONObject latestExpiryConfig(@Param("client_id")int client_id,@Param("rate_name") String rate_name); JSONObject latestExpiryConfig(@Param("client_id")int client_id,@Param("rate_name") String rate_name);

@ -272,6 +272,8 @@ public interface ClientManager {
JSONObject getSourceAgreeFiles(JSONObject manage, String clientMoniker); JSONObject getSourceAgreeFiles(JSONObject manage, String clientMoniker);
JSONObject getSourceCardAgreeFiles(String clientMoniker, JSONObject manager, String fileName);
void deleteAuthFiles(String fileId); void deleteAuthFiles(String fileId);
void deleteAuthFilesByAdmin(String fileId); void deleteAuthFilesByAdmin(String fileId);
@ -300,6 +302,8 @@ public interface ClientManager {
void commitToCompliance(String clientMoniker, JSONObject manager); void commitToCompliance(String clientMoniker, JSONObject manager);
void commitToCardCompliance(String clientMoniker, JSONObject manager);
void commitToDoAgreeFile(String clientMoniker, JSONObject manager); void commitToDoAgreeFile(String clientMoniker, JSONObject manager);
/** /**
@ -387,6 +391,10 @@ public interface ClientManager {
void getAggregateAgreeFile(String clientMoniker, JSONObject manager, boolean renewal) throws Exception; void getAggregateAgreeFile(String clientMoniker, JSONObject manager, boolean renewal) throws Exception;
void getAggregateCardAgreeFile(String clientMoniker, JSONObject manager, boolean renewal) throws Exception;
void getAggregateCardPromotionaAgreeFile(String clientMoniker, JSONObject manager, boolean renewal,Date promotionalEffectiveDate,int promotionalPeriod) throws Exception;
void getNewAggregateAgreeFile(String clientMoniker, JSONObject manager, boolean renewal) throws Exception; void getNewAggregateAgreeFile(String clientMoniker, JSONObject manager, boolean renewal) throws Exception;
void temporaryExportPdf(String clientMoniker, JSONObject manager, HttpServletResponse httpResponse) throws Exception; void temporaryExportPdf(String clientMoniker, JSONObject manager, HttpServletResponse httpResponse) throws Exception;
@ -395,6 +403,8 @@ public interface ClientManager {
void completeAgree(String clientMoniker, JSONObject manager); void completeAgree(String clientMoniker, JSONObject manager);
void cardCompleteAgree(String clientMoniker, JSONObject manager);
void downloadComplianceZip(@PathVariable String clientMoniker, HttpServletResponse response) throws Exception; void downloadComplianceZip(@PathVariable String clientMoniker, HttpServletResponse response) throws Exception;
void downloadMWComplianceZip(@PathVariable String clientMoniker, HttpServletResponse response) throws Exception; void downloadMWComplianceZip(@PathVariable String clientMoniker, HttpServletResponse response) throws Exception;
@ -596,10 +606,4 @@ public interface ClientManager {
void selectBillCodeVersion(JSONObject manager, String clientMoniker, String version); void selectBillCodeVersion(JSONObject manager, String clientMoniker, String version);
void exportLetterOfferPDF(String clientMoniker,HttpServletResponse response);
void exportPromotionalOfferPDF(String moniker, String date, HttpServletResponse response);
void exportTermsConditionsPDF(String clientMoniker,HttpServletResponse response);
} }

@ -183,6 +183,11 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
@Resource @Resource
private ClientIncrementalMapper clientIncrementalMapper; private ClientIncrementalMapper clientIncrementalMapper;
@Value("${client_card.account_reserve}")
private String cardAccountReserve;
@Value("${client_card.annual_rate}")
private String cardAnnualRate;
@Value("${app.redis.prefix}") @Value("${app.redis.prefix}")
private String redisPrefix; private String redisPrefix;
private ApplicationEventPublisher publisher; private ApplicationEventPublisher publisher;
@ -340,6 +345,13 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
private static final String CLIENT_AGREE_FILE = "client_agree_file"; private static final String CLIENT_AGREE_FILE = "client_agree_file";
private static final String CLIENT_COMPANY_FILE = "client_company_file"; private static final String CLIENT_COMPANY_FILE = "client_company_file";
private static final String CLIENT_APPLY_FILE = "client_apply_file"; private static final String CLIENT_APPLY_FILE = "client_apply_file";
//卡支付合同文件
private static final String LETTER_OF_OFFER_FILE="letter_of_offer_file";
private static final String PROMOTIONAL_OFFER_FILE="promotional_offer_file";
private static final String TERMS_AND_CONDITIONS_FILE="terms_and_conditions_file";
private static final List<String> tags = new ArrayList<>(); private static final List<String> tags = new ArrayList<>();
private static final String KYC_UTILITY_BILL_FILE = "kyc_utility_bill_file"; private static final String KYC_UTILITY_BILL_FILE = "kyc_utility_bill_file";
@ -1642,7 +1654,9 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
if (client == null) { if (client == null) {
throw new InvalidShortIdException(); throw new InvalidShortIdException();
} }
clientModifySupport.processClientConfigModify(new SwitchPermissionModify(manager, clientMoniker, permissionKey, allow)); JSONObject upayProfileInfo = sysClientUpayProfileMapper.findInfo(client.getInteger("client_id"));
upayProfileInfo.put(permissionKey,allow);
sysClientUpayProfileMapper.update(upayProfileInfo);
} }
@Override @Override
@ -3157,6 +3171,35 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
} }
} }
@Override
@Transactional
public void getAggregateCardAgreeFile(String clientMoniker, JSONObject manager, boolean renewal){
JSONObject client = clientMapper.findClientByMoniker(clientMoniker);
if (client == null) {
throw new InvalidShortIdException();
}
exportLetterOfferPDF(clientMoniker,manager);
exportTermsConditionsPDF(clientMoniker,manager);
if (!renewal) {
JSONObject cardFlow = clientCardFlowMapper.findClient(client.getInteger("client_id"));
cardFlow.put("open_status",2);
clientCardFlowMapper.update(cardFlow);
}
if (manager != null) {
saveClientAuditProcess(client.getIntValue("client_id"), 1, 2, "Compliance合同制作中", manager,2);
}
}
@Override
@Transactional
public void getAggregateCardPromotionaAgreeFile(String clientMoniker, JSONObject manager, boolean renewal,Date promotionalEffectiveDate,int promotionalPeriod){
JSONObject client = clientMapper.findClientByMoniker(clientMoniker);
if (client == null) {
throw new InvalidShortIdException();
}
exportPromotionalOfferPDF(clientMoniker,manager,promotionalEffectiveDate,promotionalPeriod);
}
@Override @Override
public void getNewAggregateAgreeFile(String clientMoniker, JSONObject manager, boolean renewal) throws Exception { public void getNewAggregateAgreeFile(String clientMoniker, JSONObject manager, boolean renewal) throws Exception {
JSONObject client = getClientInfoByMoniker(clientMoniker); JSONObject client = getClientInfoByMoniker(clientMoniker);
@ -3376,6 +3419,24 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
sendCommissionWechatMessage(client); sendCommissionWechatMessage(client);
} }
@Override
public void cardCompleteAgree(String clientMoniker, JSONObject manager) {
JSONObject client = getClientInfoByMoniker(clientMoniker);
if (client == null) {
throw new InvalidShortIdException();
}
List<JSONObject> existLeffterFiles = clientFilesMapper.findFileByClientAndType(client.getIntValue("client_id"), LETTER_OF_OFFER_FILE);
List<JSONObject> existConditionsFiles = clientFilesMapper.findFileByClientAndType(client.getIntValue("client_id"), TERMS_AND_CONDITIONS_FILE);
if (CollectionUtils.isEmpty(existLeffterFiles) && CollectionUtils.isEmpty(existConditionsFiles)) {
throw new BadRequestException("The Agree File is not Complete!");
}
JSONObject cardFlowInfo = clientCardFlowMapper.findClient(client.getInteger("client_id"));
cardFlowInfo.put("open_status", 3);
clientCardFlowMapper.update(cardFlowInfo);
saveClientAuditProcess(client.getIntValue("client_id"), 2, 3, "合同制作完成等待BD处理", manager,2);
sendCardCommissionWechatMessage(client);
}
@Override @Override
public void downloadComplianceZip(String clientMoniker, HttpServletResponse response) throws Exception { public void downloadComplianceZip(String clientMoniker, HttpServletResponse response) throws Exception {
JSONObject client = getClientInfoByMoniker(clientMoniker); JSONObject client = getClientInfoByMoniker(clientMoniker);
@ -3711,6 +3772,19 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
return sourceFile; return sourceFile;
} }
@Override
public JSONObject getSourceCardAgreeFiles(String clientMoniker, JSONObject manager, String fileName){
JSONObject client = getClientInfoByMoniker(clientMoniker);
if (client == null) {
throw new InvalidShortIdException();
}
JSONObject sourceFile = clientFilesMapper.getSourceCardAgreeFilesByClientId(client.getIntValue("client_id"),fileName);
if (sourceFile != null) {
sourceFile.put(sourceFile.getString("file_name"), sourceFile.getString("file_value"));
}
return sourceFile;
}
@Override @Override
public JSONObject getAllAuthFiles(JSONObject manager, String clientMoniker) { public JSONObject getAllAuthFiles(JSONObject manager, String clientMoniker) {
JSONObject client = getClientInfoByMoniker(clientMoniker); JSONObject client = getClientInfoByMoniker(clientMoniker);
@ -4588,6 +4662,45 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
} }
} }
@Override
@Transactional
public void commitToCardCompliance(String clientMoniker, JSONObject manager) {
JSONObject client = getClientInfoByMoniker(clientMoniker);
if (client == null) {
throw new InvalidShortIdException();
}
client.putAll(clientConfigService.find(client.getIntValue("client_id")));
if (manager != null && ManagerRole.BD_USER.hasRole(manager.getIntValue("role"))) {
int bdOperatClientRole = clientBDMapper.checkBDPermission(client.getIntValue("client_id"), manager.getString("manager_id"));
if (bdOperatClientRole <= 0) {
throw new ForbiddenException();
}
}
// 提交合规启用银行、费率验证 add by Tayl0r 2017/06/13
JSONObject rate = merchantInfoProvider.clientCurrentRate(client.getIntValue("client_id"), new Date(), "rpaypmt_card");
if (rate == null) {
throw new BadRequestException("The Partner's Rate is not config!");
}
List<JSONObject> clientFiles = clientFilesMapper.findClientFile(client.getIntValue("client_id"));
if (clientFiles == null || clientFiles.equals("")) {
throw new BadRequestException("The Compliance File Must Be Uploaded!");
}
JSONObject account = getBankAccountByClientId(client.getIntValue("client_id"));
if (account == null) {
throw new BadRequestException("The Partner's Bank Account is not config!");
}
JSONObject cardFlowInfo = clientCardFlowMapper.findClient(client.getInteger("client_id"));
int open_status_from = cardFlowInfo.getIntValue("open_status");
cardFlowInfo.put("approve_time",new Date());
cardFlowInfo.put("approve_result",4);
cardFlowInfo.put("open_status", 4);
clientCardFlowMapper.update(cardFlowInfo);
saveClientAuditProcess(client.getIntValue("client_id"), open_status_from, 4, "BD完成签字提交compliance审核", manager,2);
if (manager != null) {
sendCardCommissionWechatMessage(client);
}
}
private void saveClientAuditProcess(int client_id, Integer open_status_form, Integer open_status_to, String remark, JSONObject manager,int type) { private void saveClientAuditProcess(int client_id, Integer open_status_form, Integer open_status_to, String remark, JSONObject manager,int type) {
JSONObject log = new JSONObject(); JSONObject log = new JSONObject();
try { try {
@ -4640,6 +4753,11 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
client.putAll(clientConfigService.find(clientId)); client.putAll(clientConfigService.find(clientId));
beforeCommitToDoAgreeValid(client, manager); beforeCommitToDoAgreeValid(client, manager);
JSONObject surCharge = merchantInfoProvider.clientCurrentRate(client.getIntValue("client_id"), new Date(), "rpaypmt_card");
if (surCharge == null || surCharge.size() <= 0) {
throw new BadRequestException("The Partner's Rpaypmt Card Rate is not config!");
}
JSONObject cardFlowInfo = clientCardFlowMapper.findClient(clientId); JSONObject cardFlowInfo = clientCardFlowMapper.findClient(clientId);
if(null != cardFlowInfo){ if(null != cardFlowInfo){
JSONObject cardFlow = new JSONObject(){{ JSONObject cardFlow = new JSONObject(){{
@ -5606,7 +5724,7 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
String wxopenid = compliance.getString("wx_openid"); String wxopenid = compliance.getString("wx_openid");
try { try {
MpWechatApi paymentApi = mpWechatApiProvider.getNewPaymentApi(); MpWechatApi paymentApi = mpWechatApiProvider.getNewPaymentApi();
TemplateMessage msg = initSendCommissionTemplate(wxopenid, paymentApi.getTemplateId("commission"), "BD申请制作卡支付合同" + client_moniker, TemplateMessage msg = initSendCommissionTemplate(wxopenid, paymentApi.getTemplateId("commission"), "BD申请制作信用卡支付合同" + client_moniker,
bd_user_name, "制作卡支付合同申请", "BD申请制作" + short_name + "的卡支付合同"); bd_user_name, "制作卡支付合同申请", "BD申请制作" + short_name + "的卡支付合同");
paymentApi.sendTemplateMessage(msg); paymentApi.sendTemplateMessage(msg);
} catch (WechatException e) { } catch (WechatException e) {
@ -5624,7 +5742,7 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
if (wxopenid != null) { if (wxopenid != null) {
try { try {
MpWechatApi paymentApi = mpWechatApiProvider.getNewPaymentApi(); MpWechatApi paymentApi = mpWechatApiProvider.getNewPaymentApi();
TemplateMessage msg = initSendCommissionTemplate(wxopenid, paymentApi.getTemplateId("commission"), client_moniker + "卡支付合同制作完成", TemplateMessage msg = initSendCommissionTemplate(wxopenid, paymentApi.getTemplateId("commission"), client_moniker + "信用卡支付合同制作完成",
"Compliance", "合规材料", "上传完整合规材料,商户:" + short_name); "Compliance", "合规材料", "上传完整合规材料,商户:" + short_name);
paymentApi.sendTemplateMessage(msg); paymentApi.sendTemplateMessage(msg);
} catch (WechatException e) { } catch (WechatException e) {
@ -5647,7 +5765,7 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
String wxopenid = compliance.getString("wx_openid"); String wxopenid = compliance.getString("wx_openid");
try { try {
MpWechatApi paymentApi = mpWechatApiProvider.getNewPaymentApi(); MpWechatApi paymentApi = mpWechatApiProvider.getNewPaymentApi();
TemplateMessage msg = initSendCommissionTemplate(wxopenid, paymentApi.getTemplateId("commission"), client_moniker + "卡支付合规材料已提交", TemplateMessage msg = initSendCommissionTemplate(wxopenid, paymentApi.getTemplateId("commission"), client_moniker + "信用卡卡支付合规材料已提交",
bd_user_name, "审核材料", "已提交合规材料,等待审核"); bd_user_name, "审核材料", "已提交合规材料,等待审核");
paymentApi.sendTemplateMessage(msg); paymentApi.sendTemplateMessage(msg);
} catch (WechatException e) { } catch (WechatException e) {
@ -7217,12 +7335,11 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
clientInfoCacheSupport.clearClientCache(client.getIntValue("client_id")); clientInfoCacheSupport.clearClientCache(client.getIntValue("client_id"));
} }
@Override private void exportLetterOfferPDF(String clientMoniker,JSONObject manage) {
public void exportLetterOfferPDF(String clientMoniker, HttpServletResponse response) {
JSONObject info = convertClientLetterOfferInfo(clientMoniker); JSONObject info = convertClientLetterOfferInfo(clientMoniker);
String pdfPath = this.getClass().getClassLoader().getResource("").getPath() + "/templates/pdf/letter_of_offer.pdf"; String pdfPath = this.getClass().getClassLoader().getResource("").getPath() + "/templates/pdf/letter_of_offer.pdf";
String fileName = clientMoniker + "_Letter_of_Offer.pdf"; String fileName = clientMoniker + "_Letter_of_Offer.pdf";
publishExcelCardPDFFile(fileName, pdfPath, info, response); publishExcelCardPDFFile(clientMoniker,manage,fileName, pdfPath, info,LETTER_OF_OFFER_FILE);
} }
private JSONObject convertClientLetterOfferInfo(String clientMoniker) { private JSONObject convertClientLetterOfferInfo(String clientMoniker) {
@ -7236,46 +7353,45 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
} }
//获取数据源 //获取数据源
int clientId = client.getInteger("client_id"); int clientId = client.getInteger("client_id");
JSONObject clientRate = clientRateMapper.latestChannelCleanDays("rpaypmt_card", clientId); JSONObject clientRate = clientRateMapper.latestCardChannelCleanDays("rpaypmt_card", clientId);
if (clientRate == null) { if (clientRate == null) {
throw new BadRequestException("rpaypmt_card rate Not configured"); throw new BadRequestException("rpaypmt_card rate Not configured");
} }
JSONObject cardRate = clientRate.getJSONObject("ext_rates"); JSONObject cardRate = clientRate.getJSONObject("ext_rates");
JSONObject bankAccountInfo = clientBankAccountMapper.clientBankAccounts(clientId).get(0); JSONObject bankAccountInfo = clientBankAccountMapper.clientBankAccounts(clientId).get(0);
JSONObject upayProfileInfo = sysClientUpayProfileMapper.findInfo(clientId);
//装在数据 //装在数据
JSONObject info = new JSONObject(); JSONObject info = new JSONObject();
info.put("down_date", convertDateEnglish(new Date()));//下载文件日期 info.put("down_date", convertDateEnglish(new Date()));//下载文件日期
info.put("bussiness_name", client.getString("business_name") + " ABN");//商圈类型 info.put("bussiness_name", (client.containsKey("business_name")?client.getString("business_name"):client.getString("contact_person")) + " ABN");//商圈类型
info.put("partner_address", client.getString("address"));//商家店铺地址 info.put("partner_address", client.getString("address"));//商家店铺地址
info.put("partner_country", client.getString("country"));//国家 info.put("partner_country", client.getString("country"));//国家
info.put("partner_state", client.getString("state"));//洲 info.put("partner_state", client.getString("state"));//洲
info.put("partner_bussiness_name", client.getString("business_name"));//商户商用名称 info.put("partner_bussiness_name", client.getString("business_name"));//商户商用名称
info.put("clean_days", client.getInteger("clean_days"));//T+规则清算天数 info.put("clean_days", client.getInteger("clean_days"));//T+规则清算天数
info.put("partner_industry_mcc", client.getInteger("industry"));//商户行业编码 info.put("partner_industry_mcc", upayProfileInfo.getString("mv_industy"));//信用卡注册商户行业编码
info.put("legal_bussiness", client.getString("contact_person") + " AS " + client.getString("business_name") + " ABN " + client.getString("abn"));//拼接规则:法人名 AS 商用名称 ABD 编码 info.put("legal_bussiness", client.getString("contact_person") + " AS " + (client.containsKey("business_name")?client.getString("business_name"):client.getString("contact_person")) + " ABN " + client.getString("abn"));//拼接规则:法人名 AS 商用名称 ABD 编码
info.put("annual_rate", "0");//年费率 info.put("annual_rate",cardAnnualRate);//年费率
info.put("cost_per_transaction", clientRate.getString("transaction_fee"));//每次交易成本 info.put("cost_per_transaction", clientRate.getString("transaction_fee"));//每次交易成本
info.put("domestic_fee", cardRate.getString("domestic_rate_value"));//国内服务费 info.put("domestic_fee", cardRate.getString("domestic_rate_value"));//国内服务费
info.put("international_fee", cardRate.getString("overseas_rate_value"));//国际服务费 info.put("international_fee", cardRate.getString("overseas_rate_value"));//国际服务费
info.put("account_reserve", "1000");//账户储备金 info.put("account_reserve", cardAccountReserve);//账户储备金
//银行账号信息 //银行账号信息
info.put("account_name", bankAccountInfo.getString("account_name"));// info.put("account_name", bankAccountInfo.getString("account_name"));//
info.put("bsb", bankAccountInfo.getString("bsb_no")); info.put("bsb", bankAccountInfo.getString("bsb_no"));
info.put("account_no", bankAccountInfo.getString("account_no")); info.put("account_no", bankAccountInfo.getString("account_no"));
info.put("card_acceptor_name", "xxxxxxxxxxxxx"); info.put("card_acceptor_name", upayProfileInfo.getString("acceptor_name"));
return info; return info;
} }
@Override private void exportPromotionalOfferPDF(String clientMoniker,JSONObject manager,Date promotionalEffectiveDate,int promotionalPeriod) {
public void exportPromotionalOfferPDF(String clientMoniker, String date, HttpServletResponse response) { JSONObject info = convertPromotionalOfferInfo(clientMoniker,convertDateEnglish(promotionalEffectiveDate),promotionalPeriod);
JSONObject info = convertPromotionalOfferInfo(clientMoniker, date);
String pdfPath = this.getClass().getClassLoader().getResource("").getPath() + "/templates/pdf/promotional_offer.pdf"; String pdfPath = this.getClass().getClassLoader().getResource("").getPath() + "/templates/pdf/promotional_offer.pdf";
String fileName = clientMoniker + "_Promotional_Offer.pdf"; String fileName = clientMoniker + "_Promotional_Offer.pdf";
publishExcelCardPDFFile(fileName, pdfPath, info, response); publishExcelCardPDFFile(clientMoniker,manager,fileName, pdfPath, info,PROMOTIONAL_OFFER_FILE);
} }
private JSONObject convertPromotionalOfferInfo(String clientMoniker, String date) { private JSONObject convertPromotionalOfferInfo(String clientMoniker,String promotionalEffectiveDate,int promotionalPeriod) {
JSONObject client = getClientInfoByMoniker(clientMoniker); JSONObject client = getClientInfoByMoniker(clientMoniker);
if (client == null) { if (client == null) {
throw new InvalidShortIdException(); throw new InvalidShortIdException();
@ -7285,7 +7401,7 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
throw new BadRequestException("The merchant failed the audit!"); throw new BadRequestException("The merchant failed the audit!");
} }
int clientId = client.getInteger("client_id"); int clientId = client.getInteger("client_id");
JSONObject clientRate = clientRateMapper.latestChannelCleanDays("rpaypmt_card", clientId); JSONObject clientRate = clientRateMapper.latestCardChannelCleanDays("rpaypmt_card", clientId);
if (clientRate == null) { if (clientRate == null) {
throw new BadRequestException("rpaypmt_card rate Not configured"); throw new BadRequestException("rpaypmt_card rate Not configured");
} }
@ -7294,22 +7410,20 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
JSONObject info = new JSONObject(); JSONObject info = new JSONObject();
info.put("down_date", convertDateEnglish(new Date()));//下载文件日期 info.put("down_date", convertDateEnglish(new Date()));//下载文件日期
info.put("bussiness_name", client.getString("business_name") + " ABN");//商圈类型 info.put("bussiness_name", (client.containsKey("business_name")?client.getString("business_name"):client.getString("contact_person")) + " ABN");//商圈类型
info.put("partner_address", client.getString("address"));//商家店铺地址 info.put("partner_address", client.getString("address"));//商家店铺地址
info.put("partner_country", client.getString("country"));//国家 info.put("partner_country", client.getString("country"));//国家
info.put("partner_state", client.getString("state"));//洲 info.put("partner_state", client.getString("state"));//洲
info.put("partner_bussiness_name", client.getString("business_name"));//商户商用名称 info.put("partner_bussiness_name", client.getString("business_name"));//商户商用名称
info.put("letter_offer_sub_time", date); info.put("legal_bussiness", client.getString("contact_person") + " AS " + (client.containsKey("business_name")?client.getString("business_name"):client.getString("contact_person")) + " ABN " + client.getString("abn"));//拼接规则:法人名 AS 商用名称 ABD 编码
info.put("legal_bussiness", client.getString("contact_person") + " AS " + client.getString("business_name") + " ABN " + client.getString("abn"));//拼接规则:法人名 AS 商用名称 ABD 编码
info.put("domestic_fee", cardRate.getString("domestic_rate_value"));//国内服务费 info.put("domestic_fee", cardRate.getString("domestic_rate_value"));//国内服务费
info.put("international_fee", cardRate.getString("overseas_rate_value"));//国际服务费 info.put("international_fee", cardRate.getString("overseas_rate_value"));//国际服务费
info.put("promotional_effective_date", "xxxxxxxxx"); info.put("promotional_effective_date", promotionalEffectiveDate);
info.put("promotional_period", "xxxxxxxxx"); info.put("promotional_period", promotionalPeriod);
return info; return info;
} }
@Override private void exportTermsConditionsPDF(String clientMoniker,JSONObject manage) {
public void exportTermsConditionsPDF(String clientMoniker, HttpServletResponse response) {
JSONObject client = getClientInfoByMoniker(clientMoniker); JSONObject client = getClientInfoByMoniker(clientMoniker);
if (client == null) { if (client == null) {
throw new InvalidShortIdException(); throw new InvalidShortIdException();
@ -7319,24 +7433,26 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
} }
String pdfPath = this.getClass().getClassLoader().getResource("").getPath() + "/templates/pdf/terms_and_conditions.pdf"; String pdfPath = this.getClass().getClassLoader().getResource("").getPath() + "/templates/pdf/terms_and_conditions.pdf";
String fileName = clientMoniker + "_Terms_And_Conditions.pdf"; String fileName = clientMoniker + "_Terms_And_Conditions.pdf";
publishExcelCardPDFFile(fileName, pdfPath, new JSONObject(), response); publishExcelCardPDFFile(clientMoniker,manage,fileName, pdfPath, new JSONObject(),TERMS_AND_CONDITIONS_FILE);
} }
private void publishExcelCardPDFFile(String fileName, String pdfPath, JSONObject info, HttpServletResponse response) { private void publishExcelCardPDFFile(String clientMoniker,JSONObject manager, String fileName, String pdfPath, JSONObject info, String fileLabel) {
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "attachment;fileName=" + fileName + ".pdf");
try { try {
OutputStream outs = response.getOutputStream();
PdfUtils pdu = new PdfUtils(); PdfUtils pdu = new PdfUtils();
pdu.setTemplatePdfPath(pdfPath); pdu.setTemplatePdfPath(pdfPath);
pdu.setPdfTemplate(info); pdu.setPdfTemplate(info);
try {
File file = new File(fileName); File file = new File(fileName);
ByteArrayOutputStream bos = pdu.templetPdfBos(file, "", ""); ByteArrayOutputStream bos = pdu.templetPdfBos(file);
outs.write(bos.toByteArray(), 0, bos.toByteArray().length); InputStream stream = new ByteArrayInputStream(bos.toByteArray());
outs.flush(); JSONObject fileRes = attachmentClient.uploadFile(stream, fileName, false);
outs.close(); if (fileRes != null) {
} catch (IOException e) { importCardAgreeFile(clientMoniker, manager, fileRes.getString("url"), fileLabel);
e.printStackTrace(); }
stream.close();
} catch (Exception e) {
logger.error("合同制作出现问题:", e);
}
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -7352,6 +7468,41 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
return day + " " + months[month] + " " + year; return day + " " + months[month] + " " + year;
} }
private void importCardAgreeFile(String clientMoniker, JSONObject manager, String sourceFile, String fileLabel) {
JSONObject client = getClientInfoByMoniker(clientMoniker);
if (client == null) {
throw new InvalidShortIdException();
}
if (sourceFile != null) {
List<JSONObject> existFiles = clientFilesMapper.findFileByClientAndType(client.getIntValue("client_id"), fileLabel);
JSONObject existFile = null;
if (!CollectionUtils.isEmpty(existFiles)) {
existFile = existFiles.get(0);
}
Date now = new Date();
JSONObject file = new JSONObject();
file.put("file_name", fileLabel);
file.put("file_value", sourceFile);
file.put("client_id", client.getIntValue("client_id"));
file.put("last_update_date", now);
file.put("status", 1);
file.put("is_valid", 1);
if (manager == null) {
file.put("last_update_by", "System Import");
} else {
file.put("last_update_by", manager.getString("display_name"));
}
JSONObject contract = clientsContractMapper.findByClientId(client.getIntValue("client_id"));
if (contract == null || now.compareTo(contract.getDate("expiry_date")) > 0 || !contract.getBoolean("has_sign") || existFile == null
|| existFile.isEmpty()) {
clientFilesMapper.save(file);
} else {
file.put("file_id", existFile.getString("file_id"));
clientFilesMapper.update(file);
}
}
}
public void saveLegalAndMarketingInfo(JSONObject partner) { public void saveLegalAndMarketingInfo(JSONObject partner) {
JSONObject representativeInfo = new JSONObject(); JSONObject representativeInfo = new JSONObject();
representativeInfo.put("client_id", partner.getIntValue("client_id")); representativeInfo.put("client_id", partner.getIntValue("client_id"));

@ -595,6 +595,17 @@ public class PartnerManageController {
return clientManager.getSourceAgreeFiles(manager, clientMoniker); return clientManager.getSourceAgreeFiles(manager, clientMoniker);
} }
/**
*
*
* @param clientMoniker
*/
@ManagerMapping(value = "/{clientMoniker}/file/source_card_agree_file", method = RequestMethod.GET, role = {ManagerRole.ADMIN, ManagerRole.OPERATOR, ManagerRole.BD_USER, ManagerRole.SERVANT})
public JSONObject getSourceCardAgreeAuthFiles(@PathVariable String clientMoniker, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager,
@RequestParam("fileName") String fileName){
return clientManager.getSourceCardAgreeFiles(clientMoniker,manager,fileName);
}
@ManagerMapping(value = "/auth_file/{fileId}/delete", method = RequestMethod.PUT, role = {ManagerRole.OPERATOR, ManagerRole.BD_USER}) @ManagerMapping(value = "/auth_file/{fileId}/delete", method = RequestMethod.PUT, role = {ManagerRole.OPERATOR, ManagerRole.BD_USER})
public void deleteAuthFiles(@PathVariable String fileId, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) { public void deleteAuthFiles(@PathVariable String fileId, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) {
clientManager.deleteAuthFilesByAdmin(fileId); clientManager.deleteAuthFilesByAdmin(fileId);
@ -634,12 +645,21 @@ public class PartnerManageController {
clientManager.commitToCompliance(clientMoniker, manager); clientManager.commitToCompliance(clientMoniker, manager);
} }
/**
* BD
* @param clientMoniker
* @param manager
*/
@ManagerMapping(value = "/{clientMoniker}/to_card_compliance", method = RequestMethod.PUT, role = {ManagerRole.ADMIN, ManagerRole.BD_USER})
public void commitToCardCompliance(@PathVariable String clientMoniker, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) {
clientManager.commitToCardCompliance(clientMoniker, manager);
}
@ManagerMapping(value = "/{clientMoniker}/make_agree_file", method = RequestMethod.GET, role = {ManagerRole.ADMIN, ManagerRole.BD_USER}) @ManagerMapping(value = "/{clientMoniker}/make_agree_file", method = RequestMethod.GET, role = {ManagerRole.ADMIN, ManagerRole.BD_USER})
public void commitToDoAgreeFile(@PathVariable String clientMoniker, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) { public void commitToDoAgreeFile(@PathVariable String clientMoniker, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) {
clientManager.commitToDoAgreeFile(clientMoniker, manager); clientManager.commitToDoAgreeFile(clientMoniker, manager);
} }
//TODO BD提交申请卡合规
/** /**
* *
* @param clientMoniker * @param clientMoniker
@ -665,6 +685,29 @@ public class PartnerManageController {
clientManager.getAggregateAgreeFile(clientMoniker, manager, false); clientManager.getAggregateAgreeFile(clientMoniker, manager, false);
} }
/**
*
* @param clientMoniker
* @param manager
* @throws Exception
*/
@ManagerMapping(value = "/{clientMoniker}/export/aggregate/card_agree_pdf", method = RequestMethod.GET, role = {ManagerRole.ADMIN, ManagerRole.DIRECTOR, ManagerRole.OPERATOR})
public void exportAggregateCardAgreeFile(@PathVariable String clientMoniker, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) throws Exception {
clientManager.getAggregateCardAgreeFile(clientMoniker, manager, false);
}
/**
*
* @param clientMoniker
* @param manager
* @throws Exception
*/
@ManagerMapping(value = "/{clientMoniker}/export/aggregate/card_promotiona_agree_pdf", method = RequestMethod.GET, role = {ManagerRole.ADMIN, ManagerRole.DIRECTOR, ManagerRole.OPERATOR})
public void exportAggregateCardPromotionaAgreeFile(@PathVariable String clientMoniker, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager,
@RequestParam("date") Date promotionalEffectiveDate,@RequestParam("period") int promotionalPeriod) throws Exception {
clientManager.getAggregateCardPromotionaAgreeFile(clientMoniker, manager, false,promotionalEffectiveDate,promotionalPeriod);
}
@ManagerMapping(value = "/{clientMoniker}/temp/export/pdf", method = RequestMethod.GET, role = {ManagerRole.ADMIN, ManagerRole.BD_USER, ManagerRole.DIRECTOR, ManagerRole.OPERATOR}) @ManagerMapping(value = "/{clientMoniker}/temp/export/pdf", method = RequestMethod.GET, role = {ManagerRole.ADMIN, ManagerRole.BD_USER, ManagerRole.DIRECTOR, ManagerRole.OPERATOR})
public void temporaryExportPDF(@PathVariable String clientMoniker, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager, HttpServletResponse httpResponse) throws Exception { public void temporaryExportPDF(@PathVariable String clientMoniker, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager, HttpServletResponse httpResponse) throws Exception {
clientManager.temporaryExportPdf(clientMoniker, manager, httpResponse); clientManager.temporaryExportPdf(clientMoniker, manager, httpResponse);
@ -680,6 +723,16 @@ public class PartnerManageController {
clientManager.completeAgree(clientMoniker, manager); clientManager.completeAgree(clientMoniker, manager);
} }
/**
* BD
* @param clientMoniker
* @param manager
*/
@ManagerMapping(value = "/{clientMoniker}/notify/cardCompleteAgree", method = RequestMethod.GET, role = {ManagerRole.ADMIN, ManagerRole.OPERATOR})
public void cardCompleteAgree(@PathVariable String clientMoniker, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) {
clientManager.cardCompleteAgree(clientMoniker, manager);
}
@ManagerMapping(value = "/{clientMoniker}/download/complianceAsZIP", method = RequestMethod.GET, role = {ManagerRole.ADMIN, ManagerRole.OPERATOR}) @ManagerMapping(value = "/{clientMoniker}/download/complianceAsZIP", method = RequestMethod.GET, role = {ManagerRole.ADMIN, ManagerRole.OPERATOR})
public void downloadComplianceZip(@PathVariable String clientMoniker, HttpServletResponse response) throws Exception { public void downloadComplianceZip(@PathVariable String clientMoniker, HttpServletResponse response) throws Exception {
clientManager.downloadComplianceZip(clientMoniker, response); clientManager.downloadComplianceZip(clientMoniker, response);
@ -961,33 +1014,4 @@ public class PartnerManageController {
clientManager.switchPermission(manager, clientMoniker, "enable_international_card", pass.getBooleanValue("allow")); clientManager.switchPermission(manager, clientMoniker, "enable_international_card", pass.getBooleanValue("allow"));
} }
/**
* Letter of Offer pdf
*
* @param clientMoniker
*/
@ManagerMapping(value = "/{clientMoniker}/export/letter_of_offer_pdf", method = RequestMethod.GET, role = {ManagerRole.ADMIN, ManagerRole.OPERATOR})
public void exportLetterOfferPDF(@PathVariable String clientMoniker,HttpServletResponse response){
clientManager.exportLetterOfferPDF(clientMoniker,response);
}
/**
* Promotional Offer pdf
*
* @param clientMoniker
*/
@ManagerMapping(value = "/{clientMoniker}/export/promotional_offer_pdf", method = RequestMethod.GET, role = {ManagerRole.ADMIN, ManagerRole.OPERATOR})
public void exportPromotionalOfferPDF(@PathVariable String clientMoniker, @RequestParam("date")String date, HttpServletResponse response){
clientManager.exportPromotionalOfferPDF(clientMoniker,date,response);
}
/**
* Terms Conditions pdf
*
* @param clientMoniker
*/
@ManagerMapping(value = "/{clientMoniker}/export/terms_conditions_pdf", method = RequestMethod.GET, role = {ManagerRole.ADMIN, ManagerRole.OPERATOR})
public void exportTermsConditionsPDF(@PathVariable String clientMoniker,HttpServletResponse response){
clientManager.exportTermsConditionsPDF(clientMoniker,response);
}
} }

@ -68,6 +68,11 @@ app:
tax: tax:
type: GST type: GST
client_card:
account_reserve: 1000
annual_rate: 0
apple: apple:
message: message:
apns: apns:
@ -153,6 +158,12 @@ spring:
port: 6379 port: 6379
thymeleaf: thymeleaf:
mode: HTML mode: HTML
logging:
level:
au:
com:
royalpay:
payment: debug

@ -19,6 +19,14 @@
and file_name = 'source_agree_file' and file_name = 'source_agree_file'
order by last_update_date desc limit 1 order by last_update_date desc limit 1
</select> </select>
<select id="getSourceCardAgreeFilesByClientId" resultType="com.alibaba.fastjson.JSONObject">
select * from sys_files
where client_id = #{client_id}
and file_name = #{file_name}
order by last_update_date desc limit 1
</select>
<select id="deleteAggreeByClientId" resultType="com.alibaba.fastjson.JSONObject"> <select id="deleteAggreeByClientId" resultType="com.alibaba.fastjson.JSONObject">
update sys_files set is_valid = 0 update sys_files set is_valid = 0
where client_id = #{client_id} where client_id = #{client_id}

@ -177,6 +177,16 @@
limit 1 limit 1
</select> </select>
<select id="latestCardChannelCleanDays" resultType="com.alibaba.fastjson.JSONObject">
SELECT cr.*,c.clean_days c_clean_days FROM sys_client_rates cr
INNER JOIN sys_clients c on c.client_id= cr.client_id and c.is_valid = 1
INNER JOIN sys_clients_card_flow cf ON cf.client_id = c.client_id AND ( cf.approve_result = 4 AND cf.open_status NOT IN (0,5) )
where cr.client_id = #{client_id}
and cr.rate_name = #{rate_name}
order by cr.expiry_time desc
limit 1
</select>
<select id="latestExpiryConfig" resultType="com.alibaba.fastjson.JSONObject"> <select id="latestExpiryConfig" resultType="com.alibaba.fastjson.JSONObject">
SELECT * FROM SELECT * FROM
sys_client_rates sys_client_rates

@ -460,7 +460,21 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter
$scope.fileManager = resp.data; $scope.fileManager = resp.data;
}); });
}; };
$scope.showCardFile = function () {
$http.get('/sys/partners/' + $scope.partner.client_moniker + '/file/source_card_agree_file?fileName=letter_of_offer_file').then(function (resp) {
$scope.letterOfOfferFileManager = resp.data;
});
$http.get('/sys/partners/' + $scope.partner.client_moniker + '/file/source_card_agree_file?fileName=promotional_offer_file').then(function (resp) {
$scope.promotionalOfferFileManager = resp.data;
});
$http.get('/sys/partners/' + $scope.partner.client_moniker + '/file/source_card_agree_file?fileName=terms_and_conditions_file').then(function (resp) {
$scope.termsAndConditionsFile = resp.data;
});
};
$scope.showFile(); $scope.showFile();
$scope.showCardFile();
$scope.passClient = function () { $scope.passClient = function () {
if ($scope.partner.enable_hf) { if ($scope.partner.enable_hf) {
if ($scope.partner.hfindustry == null) { if ($scope.partner.hfindustry == null) {
@ -578,7 +592,7 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter
choises: choises, choises: choises,
contentHtml: contentHtml contentHtml: contentHtml
}).then(function () { }).then(function () {
$http.put('/sys/partners/' + $scope.partner.client_moniker + '/card_audit', {pass: 1}).then(function () { $http.put('/sys/partners/' + $scope.partner.client_moniker + '/card_promotiona_agree_pdf', {pass: 1}).then(function () {
if ($scope.partner.approve_result == 2 && ($scope.partner.source == 1 || $scope.partner.source == 2)) { if ($scope.partner.approve_result == 2 && ($scope.partner.source == 1 || $scope.partner.source == 2)) {
commonDialog.alert({ commonDialog.alert({
title: 'Success', title: 'Success',
@ -649,8 +663,63 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter
$state.reload(); $state.reload();
commonDialog.alert({title: 'Error', content: resp.data.message, type: 'error'}); commonDialog.alert({title: 'Error', content: resp.data.message, type: 'error'});
}); });
}; };
//制作卡支付合同
$scope.exportCardAgreegatePDF = function(){
$scope.showCardBg = true;
$http.get('/sys/partners/' + $scope.partner.client_moniker + '/export/aggregate/card_agree_pdf').then(function () {
commonDialog.alert({
title: 'Success',
content: 'Agreement File Generate Succeed! Please notify BD!',
type: 'success'
});
$scope.showCardBg = false;
$state.reload();
}, function (resp) {
$scope.showCardBg = false;
$state.reload();
commonDialog.alert({title: 'Error', content: resp.data.message, type: 'error'});
});
}
//制作促销合同
$scope.exportCardPromotionaAgreegatePDF = function(){
var title = 'Warning';
$scope.cardPromotionaparams={}
var contentHtml = $sce.trustAsHtml('<lable>请选择优惠生效日:</lable>'+ ' <input placeholder="From" uib-datepicker-popup\n' +
' is-open="ctrl.from" ng-click="ctrl.from=true" ng-model="cardPromotionaparams.date"\n' +
' datepicker-options="{maxDate:filter.to}"><div style="margin-bottom: 2px"></div>' +
' <lable>请输入活动周期:</lable> <input ng-model="cardPromotionaparams.period">');
var choises = [{label: '取消', className: 'btn-danger', key: '2', dismiss: true},
{label: '确认提交', className: 'btn-success', key: '1'}];
var content = '';
$scope.showCardPromotionaBg = true;
commonDialog.confirm({
title: title,
content: content,
choises: choises,
contentHtml: contentHtml
}).then(function (res) {
if(params != null){
$http.get('/sys/partners/' + $scope.partner.client_moniker + '/export/aggregate/card_promotiona_agree_pdf').then(function () {
commonDialog.alert({
title: 'Success',
content: 'Agreement File Generate Succeed! Please notify BD!',
type: 'success'
});
$scope.showCardPromotionaBg = false;
$state.reload();
}, function (resp) {
$scope.showCardPromotionaBg = false;
$state.reload();
commonDialog.alert({title: 'Error', content: resp.data.message, type: 'error'});
});
}
});
}
$scope.Export = function () { $scope.Export = function () {
var url = '/dev/' + $scope.partner.client_moniker + '/export/aggregate/agreepdf'; var url = '/dev/' + $scope.partner.client_moniker + '/export/aggregate/agreepdf';
return url; return url;
@ -681,6 +750,33 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter
} }
} }
}; };
$scope.uploadCardAgreeFile = function (file) {
if (file != null) {
if (file.size > 2 * 1024 * 1024) {
commonDialog.alert({title: 'Error', content: '文件大小不能超过2MB请压缩后重试', type: 'error'})
} else {
Upload.upload({
url: '/attachment/files',
data: {file: file}
}).then(function (resp) {
$scope.agree_file_import = resp.data.url;
$http.put('/sys/partners/' + $scope.partner.client_moniker + '/import/agreepdf', {source_agree_file: $scope.agree_file_import}).then(function () {
commonDialog.alert({
title: 'Success',
content: 'Succeed Imported! Please notify BD',
type: 'success'
});
$state.reload();
}, function (resp) {
commonDialog.alert({title: 'Error', content: resp.data.message, type: 'error'});
})
}, function (resp) {
commonDialog.alert({title: 'Upload Failed', content: resp.data.message, type: 'error'})
})
}
}
};
$scope.notifyBD = function () { $scope.notifyBD = function () {
$http.get('/sys/partners/' + $scope.partner.client_moniker + '/notify/completeAgree').then(function () { $http.get('/sys/partners/' + $scope.partner.client_moniker + '/notify/completeAgree').then(function () {
commonDialog.alert({ commonDialog.alert({
@ -694,6 +790,19 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter
}); });
}; };
$scope.cardNotifyBD = function () {
$http.get('/sys/partners/' + $scope.partner.client_moniker + '/notify/cardCompleteAgree').then(function () {
commonDialog.alert({
title: 'Success',
content: 'Notify BD Successed!.',
type: 'success'
});
$state.reload();
}, function (resp) {
commonDialog.alert({title: 'Upload Failed', content: resp.data.message, type: 'error'});
});
};
$scope.downTempPdf = function () { $scope.downTempPdf = function () {
var url = '/sys/partners/' + $scope.partner.client_moniker + '/temp/export/pdf'; var url = '/sys/partners/' + $scope.partner.client_moniker + '/temp/export/pdf';
return url; return url;
@ -779,6 +888,30 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter
} }
}) })
}; };
$scope.commitToCardCompliance = function(){
commonDialog.confirm({
title: 'Commit to Compliance',
content: 'Are you sure to commit ' + $scope.partner.company_name + ' to compliance',
choises: [
{label: 'Submit', className: 'btn-success', key: 1},
{label: 'Cancel', className: 'btn-warning', key: 0, dismiss: true}
]
}).then(function (choice) {
if (choice == 1) {
$http.put('/sys/partners/' + $scope.partner.client_moniker + '/to_card_compliance', {}).then(function () {
commonDialog.alert({
title: 'Success',
content: 'Commit to Compliance successfully',
type: 'success'
});
$state.reload();
}, function (resp) {
commonDialog.alert({title: 'Error', content: resp.data.message, type: 'error'});
})
}
})
}
$scope.apply2makeAgreeFile = function () { $scope.apply2makeAgreeFile = function () {
$http.get('/sys/partners/' + $scope.partner.client_moniker + '/make_agree_file').then(function () { $http.get('/sys/partners/' + $scope.partner.client_moniker + '/make_agree_file').then(function () {
commonDialog.alert({ commonDialog.alert({

@ -60,6 +60,7 @@
</section> </section>
<div class="content"> <div class="content">
<!-- 跨境支付审核 --> <!-- 跨境支付审核 -->
<div class="box box-warning" ng-if="('10'|withRole)"> <div class="box box-warning" ng-if="('10'|withRole)">
<div class="box-header with-border"> <div class="box-header with-border">
<h3 class="box-title"> <img style="height: 20px;width: 20px" height="20px" src="/static/images/royalpay_sign_s.png"> Compliance <span ng-if="partner.approve_result==5 || partner.refuse_remark.length>0" <h3 class="box-title"> <img style="height: 20px;width: 20px" height="20px" src="/static/images/royalpay_sign_s.png"> Compliance <span ng-if="partner.approve_result==5 || partner.refuse_remark.length>0"
@ -162,7 +163,7 @@
<div class="box-header with-border"> <div class="box-header with-border">
<h3 class="box-title"> <h3 class="box-title">
<img style="height: 20px;width: 20px" src="/static/images/royalpay_sign_s.png"> <img style="height: 20px;width: 20px" src="/static/images/royalpay_sign_s.png">
RP Operation <span ng-if="partner.approve_result==5" style="color: red"> Operation <span ng-if="partner.approve_result==5" style="color: red">
(Refused (Refused
<small class="" ng-if="partner.approve_result==5">:{{partner.refuse_remark}}</small> <small class="" ng-if="partner.approve_result==5">:{{partner.refuse_remark}}</small>
)</span><span ng-if="(partner.source==1 || partner.source==2) && partner.approve_result==2" )</span><span ng-if="(partner.source==1 || partner.source==2) && partner.approve_result==2"
@ -231,17 +232,6 @@
</div> </div>
</div> </div>
</div> </div>
<div class="box box-warning" ng-if="partner.approve_result==1 && partner.approve_email_send==2">
<div class="box-header with-border">
<h3 class="box-title">Solved</h3>
</div>
<div class="box-body">
<div class="pull-left">Make sure you have send the email to client.</div>
<div class="btn-group pull-right" role="group" aria-label="...">
<button type="button" class="btn btn-danger" ng-click="markAuditEmail()">Sure</button>
</div>
</div>
</div>
<!-- 卡支付审核 --> <!-- 卡支付审核 -->
<!-- 给合规权限查看 --> <!-- 给合规权限查看 -->
@ -277,29 +267,35 @@
</button> </button>
</div> </div>
<div class="box-body" ng-if="partner.is_valid==1"> <div class="box-body" ng-if="partner.is_valid==1">
<div ng-if="partner.card_flow_info.open_status != 5"> <div style="margin-bottom: 5px" ng-if="partner.card_flow_info.open_status != 5">
<!--<a role="button" type="button" class="btn btn-success" ng-click="exportPDF()">--> <!--<a role="button" type="button" class="btn btn-success" ng-click="exportPDF()">-->
<!--制作合同</a>--> <!--制作合同</a>-->
<a role="button" type="button" class="btn btn-success" ng-click="exportAgreegatePDF()"> <a role="button" type="button" class="btn btn-success" ng-click="exportCardAgreegatePDF()">
制作全支付合同</a> 制作卡支付合同</a>
<a role="button" type="button" class="btn btn-warning" ngf-select="uploadAgreeFile($file)" <a role="button" type="button" class="btn btn-success" ng-click="exportCardPromotionaAgreegatePDF()">
accept="pdf/*"> 制作促销合同</a>
上传合同</a> (通用合同请选择制作合同,非通用合同模板请人工制作合同后上传)
</div> </div>
<div class="btn-group pull-right" role="group" aria-label="..."> <div class="btn-group pull-right" role="group" aria-label="...">
<button type="button" ng-if="partner.card_flow_info.approve_result!=1" <button type="button" ng-if="partner.card_flow_info.open_status==1 && partner.card_flow_info.approve_result>1 || partner.card_flow_info.open_status==4"
class="btn btn-success" ng-click="passCardClient()">Pass class="btn btn-success" ng-click="passCardClient()">Pass
</button> </button>
<button ng-if="partner.card_flow_info.open_status==1 ||partner.card_flow_info.open_status==4" <button ng-if="partner.card_flow_info.open_status==1 ||partner.card_flow_info.open_status==4"
type="button" class="btn btn-primary" ng-click="cardRefuse()">Refuse type="button" class="btn btn-primary" ng-click="cardRefuse()">Refuse
</button> </button>
</div> </div>
<a style="margin-top: 5px" ng-if="fileManager.source_agree_file" role="button" class="btn-group btn btn-warning" <a ng-if="letterOfOfferFileManager.letter_of_offer_file" role="button" class="btn-group btn btn-warning"
type="button" ng-href="{{fileManager.source_agree_file}}" target="_blank"><i type="button" ng-href="{{letterOfOfferFileManager.letter_of_offer_file}}" target="_blank"> <i
class="fa fa-download"></i>下载合同</a> class="fa fa-download"></i>下载Letter Of Offer合同</a>
<a ng-if="termsAndConditionsFile.terms_and_conditions_file" role="button" class="btn-group btn btn-warning"
type="button" ng-href="{{termsAndConditionsFile.terms_and_conditions_file}}" target="_blank"> <i
class="fa fa-download"></i>下载Terms And Conditions合同</a>
<a ng-if="promotionalOfferFileManager.promotional_offer_file" role="button" class="btn-group btn btn-warning"
type="button" ng-href="{{promotionalOfferFileManager.promotional_offer_file}}" target="_blank"> <i
class="fa fa-download"></i>下载Promotional Offer合同</a>
<span style="margin-top: 5px"ng-if="partner.card_flow_info.open_status != 5"> <span style="margin-top: 5px"ng-if="partner.card_flow_info.open_status != 5">
<a ng-if="partner.card_flow_info.open_status==2" role="button" type="button" class="btn btn-primary" <a ng-if="partner.card_flow_info.open_status==2" role="button" type="button" class="btn btn-primary"
ng-click="notifyBD()"> ng-click="cardNotifyBD()">
<i class="fa fa-thumb-tack"></i> Notify BD</a> <i class="fa fa-thumb-tack"></i> Notify BD</a>
</span> </span>
<div ng-if="partner.audit_card_logs"> <div ng-if="partner.audit_card_logs">
@ -329,9 +325,9 @@
</div> </div>
<!-- 给BD权限查看 --> <!-- 给BD权限查看 -->
<div class="box" ng-if="('100'|withRole) && partner.show_all_permission" <div class="box" ng-if="('100'|withRole) && partner.show_all_permission"
ng-class="{'box-warning':partnercard_flow_info.approve_result!=5,'box-danger':partnercard_flow_info.approve_result==5}"> ng-class="{'box-warning':partner.card_flow_info.approve_result!=5,'box-danger':partner.card_flow_info.approve_result==5}">
<div class="box-header with-border"> <div class="box-header with-border">
<h3 class="box-title"><img style="height: 20px;width: 20px" src="/static/images/card_payment_sign.png"> Card Payment Operation <span ng-if="partner.card_flow_info.approve_result==5" style="color: red"> <h3 class="box-title"><img style="height: 20px;width: 20px" src="/static/images/card_payment_sign.png"> Operation <span ng-if="partner.card_flow_info.approve_result==5" style="color: red">
(Refused (Refused
<small class="" ng-if="partner.card_flow_info.approve_result==5">:{{partner.card_flow_info.refuse_remark}}</small> <small class="" ng-if="partner.card_flow_info.approve_result==5">:{{partner.card_flow_info.refuse_remark}}</small>
)</span><span ng-if="(partner.source==1 || partner.source==2) && partner.approve_result==2" )</span><span ng-if="(partner.source==1 || partner.source==2) && partner.approve_result==2"
@ -348,14 +344,30 @@
</h3> </h3>
</div> </div>
<div class="box-body"> <div class="box-body">
<!--<div class="pull-left" ng-if="partner.approve_result==5">Remark:{{partner.refuse_remark}}</div>--> <a ng-if="letterOfOfferFileManager.letter_of_offer_file && partner.card_flow_info.open_status==3" role="button" class="btn-group btn btn-warning"
<a ng-if="fileManager.source_agree_file" role="button" class="btn-group btn btn-warning" type="button" ng-href="{{letterOfOfferFileManager.letter_of_offer_file}}" target="_blank"> <i
type="button" ng-href="{{fileManager.source_agree_file}}" target="_blank"> <i class="fa fa-download"></i>下载Letter Of Offer合同</a>
class="fa fa-download"></i>下载合同</a> <a ng-if="termsAndConditionsFile.terms_and_conditions_file && partner.card_flow_info.open_status==3" role="button" class="btn-group btn btn-warning"
type="button" ng-href="{{termsAndConditionsFile.terms_and_conditions_file}}" target="_blank"> <i
class="fa fa-download"></i>下载Terms And Conditions合同</a>
<a ng-if="promotionalOfferFileManager.promotional_offer_file && partner.card_flow_info.open_status==3" role="button" class="btn-group btn btn-warning"
type="button" ng-href="{{promotionalOfferFileManager.promotional_offer_file}}" target="_blank"> <i
class="fa fa-download"></i>下载Promotional Offer合同</a>
<div ng-if="partner.card_flow_info.open_status==3" class="btn-group pull-right" role="group" aria-label="..."> <div ng-if="partner.card_flow_info.open_status==3" class="btn-group pull-right" role="group" aria-label="...">
<button type="button" class="btn btn-danger" ng-click="commitToCompliance()">Commit to Compliance <button type="button" class="btn btn-danger" ng-click="commitToCardCompliance()">Commit to Compliance
</button> </button>
</div> </div>
<!--<div>
<a ng-if="letterOfOfferFileManager.letter_of_offer_file && partner.card_flow_info.open_status==3" role="button" class="btn-group btn btn-success"
type="button" ng-href="{{letterOfOfferFileManager.letter_of_offer_file}}" target="_blank"> <i
class="fa fa-upload"></i>上传签约Letter Of Offer合同</a>
<a ng-if="termsAndConditionsFile.terms_and_conditions_file && partner.card_flow_info.open_status==3" role="button" class="btn-group btn btn-success"
type="button" ng-href="{{termsAndConditionsFile.terms_and_conditions_file}}" target="_blank"> <i
class="fa fa-upload"></i>上传签约Terms And Conditions合同</a>
<a ng-if="promotionalOfferFileManager.promotional_offer_file && partner.card_flow_info.open_status==3" role="button" class="btn-group btn btn-success"
type="button" ng-href="{{promotionalOfferFileManager.promotional_offer_file}}" target="_blank"> <i
class="fa fa-upload"></i>上传签约Promotional Offer合同</a>
</div>-->
<div ng-if="!partner.card_flow_info.open_status" class="btn-group pull-right" role="group" aria-label="..."> <div ng-if="!partner.card_flow_info.open_status" class="btn-group pull-right" role="group" aria-label="...">
<button type="button" class="btn btn-primary" ng-click="apply2makeCardAgreeFile()"> <button type="button" class="btn btn-primary" ng-click="apply2makeCardAgreeFile()">
<i class="fa fa-paper-plane"></i> <i class="fa fa-paper-plane"></i>
@ -387,8 +399,10 @@
</div> </div>
</div> </div>
</div> </div>
<!-- 邮件通知 --> <!-- 邮件重发通知 -->
<div class="box box-warning" ng-if="partner.card_flow_info && partner.card_flow_info.approve_result==1 && partner.card_flow_info.approve_email_send==2">
<div class="box box-warning" ng-if="(partner.approve_result==1 && partner.approve_email_send==2) ||
(partner.card_flow_info && partner.card_flow_info.approve_result==1 && partner.card_flow_info.approve_email_send==2)">
<div class="box-header with-border"> <div class="box-header with-border">
<h3 class="box-title">Solved</h3> <h3 class="box-title">Solved</h3>
</div> </div>
@ -1293,7 +1307,7 @@
<div style="text-align: center"> <div style="text-align: center">
<a role="button" style="margin-bottom: 25px;" class="btn btn-success btn-sm ng-scope" <a role="button" style="margin-bottom: 25px;" class="btn btn-success btn-sm ng-scope"
ng-if="('10'|withRole)" ng-click="complianceCheck()">check</a> ng-if="('10'|withRole)" ng-click="complianceCheck()">check</a>
<a role="button" style="margin-bottom: 25px;" class="btn btn-danger btn-sm ng-scope" ng-click="deleteClient()">Delete</a> <a role="button" style="margin-bottom: 25px;" class="btn btn-danger btn-sm ng-scope" ng-click="deleteClient()">Cancel</a>
</div> </div>
</div> </div>
</div> </div>

@ -490,7 +490,7 @@
</div> </div>
</div> </div>
<!-- 卡支付配置 --> <!-- 卡支付配置 -->
<div class="panel panel-default" ng-if="('111'|withRole) || ('retail_surcharge'|withFunc)"> <div class="panel panel-default" ng-if="('111'|withRole) || ('retail_surcharge'|withFunc)" ng-if="paymentInfo.enable_international_card">
<div class="panel-heading">Card Payment Config</div> <div class="panel-heading">Card Payment Config</div>
<div class="panel-body"> <div class="panel-body">
<div class="form-horizontal"> <div class="form-horizontal">

@ -503,7 +503,7 @@
<span ng-if="partner.approve_result==4 && !partner.open_status"><i ng-if="partner.refuse_remark.length>0" class="fa fa-reply" aria-hidden="true" title="被打回重新提交"></i>等待合规</span> <span ng-if="partner.approve_result==4 && !partner.open_status"><i ng-if="partner.refuse_remark.length>0" class="fa fa-reply" aria-hidden="true" title="被打回重新提交"></i>等待合规</span>
</div> </div>
<div ng-if="!partner.card_approve_flow_info" class="col-xs-5"> <div ng-if="!partner.card_approve_flow_info" class="col-xs-5">
<img height="20px" src="/static/images/card_payment_sign.png"><span>等待BD上传材料审核</span> <img height="20px" src="/static/images/card_payment_sign.png"><span> 资料完善中</span>
</div> </div>
<div ng-if="partner.card_approve_flow_info" class="col-xs-5" style="margin-left: 2px" ng-class="{'bg-green':(partner.card_approve_flow_info.approve_result==2 && (partner.source==1 || partner.source==2)),'bg-red':((partner.card_approve_flow_info.open_status==1||partner.card_approve_flow_info.open_status==2||partner.card_approve_flow_info.open_status==4) && partner.card_approve_flow_info.approve_result!=3)||(partner.card_approve_flow_info.approve_result==3 && (!partner.card_approve_flow_info.open_status || partner.card_approve_flow_info.open_status==1 || partner.card_approve_flow_info.open_status == 4))||(partner.card_approve_flow_info.approve_result==4 && !partner.card_approve_flow_info.open_status)}"> <div ng-if="partner.card_approve_flow_info" class="col-xs-5" style="margin-left: 2px" ng-class="{'bg-green':(partner.card_approve_flow_info.approve_result==2 && (partner.source==1 || partner.source==2)),'bg-red':((partner.card_approve_flow_info.open_status==1||partner.card_approve_flow_info.open_status==2||partner.card_approve_flow_info.open_status==4) && partner.card_approve_flow_info.approve_result!=3)||(partner.card_approve_flow_info.approve_result==3 && (!partner.card_approve_flow_info.open_status || partner.card_approve_flow_info.open_status==1 || partner.card_approve_flow_info.open_status == 4))||(partner.card_approve_flow_info.approve_result==4 && !partner.card_approve_flow_info.open_status)}">
<img height="20px" src="/static/images/card_payment_sign.png"> <img height="20px" src="/static/images/card_payment_sign.png">
@ -511,7 +511,7 @@
<span ng-if="!partner.card_approve_flow_info.open_status && !partner.card_approve_flow_info.approve_result && partner.card_approve_flow_info.approve_result!=5 && partner.source!=4">资料完善中</span> <span ng-if="!partner.card_approve_flow_info.open_status && !partner.card_approve_flow_info.approve_result && partner.card_approve_flow_info.approve_result!=5 && partner.source!=4">资料完善中</span>
<span ng-if="!partner.card_approve_flow_info.open_status && !partner.card_approve_flow_info.approve_result && partner.card_approve_flow_info.approve_result!=5 && partner.source==4">(自助开通)资料完善中</span> <span ng-if="!partner.card_approve_flow_info.open_status && !partner.card_approve_flow_info.approve_result && partner.card_approve_flow_info.approve_result!=5 && partner.source==4">(自助开通)资料完善中</span>
<span ng-if="partner.card_approve_flow_info.approve_result==0 && partner.card_approve_flow_info.approve_time">不通过({{partner.card_approve_flow_info.approve_time}})</span> <span ng-if="partner.card_approve_flow_info.approve_result==0 && partner.card_approve_flow_info.approve_time">不通过({{partner.card_approve_flow_info.approve_time}})</span>
<span ng-if="partner.card_approve_flow_info.approve_result==5 && partner.card_approve_flow_info.approve_time && !partner.card_approve_flow_info.open_status">申请打回({{partner.card_approve_flow_info.refuse_remark|limitTo:15}})</span> <span ng-if="partner.card_approve_flow_info.approve_result==5">申请打回({{partner.card_approve_flow_info.refuse_remark|limitTo:15}})</span>
<span ng-if="(partner.card_approve_flow_info.open_status==1||partner.card_approve_flow_info.open_status==4)"><i ng-if="partner.card_approve_flow_info.refuse_remark.length>0" class="fa fa-reply" aria-hidden="true" title="被打回重新提交"></i>等待合规</span> <span ng-if="(partner.card_approve_flow_info.open_status==1||partner.card_approve_flow_info.open_status==4)"><i ng-if="partner.card_approve_flow_info.refuse_remark.length>0" class="fa fa-reply" aria-hidden="true" title="被打回重新提交"></i>等待合规</span>
<span ng-if="partner.card_approve_flow_info.open_status==2">合同制作完成</span> <span ng-if="partner.card_approve_flow_info.open_status==2">合同制作完成</span>
<span ng-if="partner.card_approve_flow_info.open_status==3 && partner.card_approve_flow_info.approve_result!=5">等待BD上传材料审核</span> <span ng-if="partner.card_approve_flow_info.open_status==3 && partner.card_approve_flow_info.approve_result!=5">等待BD上传材料审核</span>

Loading…
Cancel
Save