master
duLingLing 5 years ago
commit 22a66b89c2

@ -5,12 +5,12 @@
<parent>
<groupId>au.com.royalpay.payment</groupId>
<artifactId>payment-parent</artifactId>
<version>1.1.0</version>
<version>1.1.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>manage</artifactId>
<version>1.2.0</version>
<version>1.2.1</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

@ -208,5 +208,5 @@ public interface RetailAppService {
void deleteGreenChannelAuthFiles(JSONObject device, String filesInfo);
void commitAuthFilesToCompliance(JSONObject device);
void commitAuthFilesToCompliance(JSONObject device,JSONObject photoInfo);
}

@ -49,6 +49,7 @@ import au.com.royalpay.payment.tools.device.message.AppMsgSender;
import au.com.royalpay.payment.tools.device.support.DeviceRegister;
import au.com.royalpay.payment.tools.env.PlatformEnvironment;
import au.com.royalpay.payment.tools.env.RequestEnvironment;
import au.com.royalpay.payment.tools.env.SysConfigManager;
import au.com.royalpay.payment.tools.exceptions.BadRequestException;
import au.com.royalpay.payment.tools.exceptions.ForbiddenException;
import au.com.royalpay.payment.tools.exceptions.NotFoundException;
@ -208,6 +209,8 @@ public class RetailAppServiceImp implements RetailAppService {
@Resource
private ClientBankAccountMapper clientBankAccountMapper;
@Resource
private SysConfigManager sysConfigManager;
@Resource
private StringRedisTemplate stringRedisTemplate;
private final String CBBANK_AGGREGATE_FILE = "https://file.royalpay.com.au/open/2019/08/05/1564972204689_uwZvpTBjtLUMcN8c540xcZvux1Rd3O.pdf";
private final String IMG_AGGREGATE_FILE = "https://file.royalpay.com.au/open/2019/08/22/1566440384256_R7Jc3cl5JPZsmVznKffzStwVMELwsl.pdf";
@ -2269,6 +2272,8 @@ public class RetailAppServiceImp implements RetailAppService {
client.put("wechat_rate", weChatRate.getBigDecimal("rate_value").setScale(2, BigDecimal.ROUND_DOWN));
client.put("clean", "T+" + weChatRate.getString("clean_days"));
client.put("clean_days", weChatRate.getString("clean_days"));
String rateConfig = sysConfigManager.getSysConfig().getString("sys_rates");
JSONObject sysConfigRate = JSONObject.parseObject(rateConfig);
try {
JSONObject alipayRate = merchantInfoProvider.clientCurrentRate(client.getIntValue("client_id"), new Date(), "Alipay");
@ -2276,16 +2281,6 @@ public class RetailAppServiceImp implements RetailAppService {
client.put("alipay_rate", alipayRate.getBigDecimal("rate_value").setScale(2, BigDecimal.ROUND_DOWN));
}
JSONObject bestPayRate = merchantInfoProvider.clientCurrentRate(client.getIntValue("client_id"), new Date(), "Bestpay");
if (bestPayRate != null) {
client.put("bestpay_rate", bestPayRate.getBigDecimal("rate_value").setScale(2, BigDecimal.ROUND_DOWN));
}
JSONObject jdRate = merchantInfoProvider.clientCurrentRate(client.getIntValue("client_id"), new Date(), "jd");
if (jdRate != null) {
client.put("jd_rate", jdRate.getBigDecimal("rate_value").setScale(2, BigDecimal.ROUND_DOWN));
}
JSONObject alipayOnlineRate = merchantInfoProvider.clientCurrentRate(client.getIntValue("client_id"), new Date(), "AlipayOnline");
if (alipayOnlineRate != null) {
client.put("alipay_online_rate", alipayOnlineRate.getBigDecimal("rate_value").setScale(2, BigDecimal.ROUND_DOWN));
@ -2299,6 +2294,22 @@ public class RetailAppServiceImp implements RetailAppService {
throw new BadRequestException("Merchant Rate Not Configure,Please Contact Customer Service");
}
try {
JSONObject bestPayRate = merchantInfoProvider.clientCurrentRate(client.getIntValue("client_id"), new Date(), "Bestpay");
if (bestPayRate != null) {
client.put("bestpay_rate", bestPayRate.getBigDecimal("rate_value").setScale(2, BigDecimal.ROUND_DOWN));
}
JSONObject jdRate = merchantInfoProvider.clientCurrentRate(client.getIntValue("client_id"), new Date(), "jd");
if (jdRate != null) {
client.put("jd_rate", jdRate.getBigDecimal("rate_value").setScale(2, BigDecimal.ROUND_DOWN));
}
} catch (Exception ignored) {
JSONObject rate = sysConfigRate.getJSONObject("t" + weChatRate.getString("clean_days"));
client.put("bestpay_rate", rate.getBigDecimal("Bestpay").setScale(2, BigDecimal.ROUND_DOWN));
client.put("jd_rate", rate.getBigDecimal("JDpay").setScale(2, BigDecimal.ROUND_DOWN));
}
JSONObject bankAccount = getBankAccountByClientId(client.getIntValue("client_id"));
if (bankAccount == null || bankAccount.size() <= 0) {
throw new BadRequestException("The Partner's Account is not config!");
@ -2349,11 +2360,12 @@ public class RetailAppServiceImp implements RetailAppService {
}
@Override
public void commitAuthFilesToCompliance(JSONObject device) {
public void commitAuthFilesToCompliance(JSONObject device, JSONObject photoInfo) {
String clientType = device.getString("client_type");
deviceSupport.findRegister(clientType);
JSONObject client = clientManager.getClientInfo(device.getIntValue("client_id"));
JSONObject account = clientAccountMapper.findById(device.getString("account_id"));
account.put("photo_info", photoInfo);
clientManager.commitAuthFilesToCompliance(client.getString("client_moniker"), account,"App");
}

@ -781,7 +781,16 @@ public class RetailAppController {
*/
@RequestMapping(value = "/client/auth_file/commit_to_compliance", method = RequestMethod.POST)
public void commitToComplianceAuthFiles(@ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device){
retailAppService.commitAuthFilesToCompliance(device);
retailAppService.commitAuthFilesToCompliance(device, null);
}
/**
*
* @param device
* @params photoInfo
*/
@RequestMapping(value = "/client/auth_file/commit_to_compliance_new", method = RequestMethod.POST)
public void commitToComplianceAuthFiles(@ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device, @RequestBody JSONObject photoInfo){
retailAppService.commitAuthFilesToCompliance(device, photoInfo);
}
}

@ -6,6 +6,8 @@ import au.com.royalpay.payment.manage.complianceAudit.bean.ClientComplianceQuery
import au.com.royalpay.payment.manage.complianceAudit.core.ClientComplianceApply;
import au.com.royalpay.payment.manage.mappers.system.ClientComplianceCompanyMapper;
import au.com.royalpay.payment.manage.mappers.system.ClientFilesMapper;
import au.com.royalpay.payment.manage.mappers.system.ClientMapper;
import au.com.royalpay.payment.manage.merchants.core.ClientManager;
import au.com.royalpay.payment.tools.exceptions.BadRequestException;
import au.com.royalpay.payment.tools.permission.enums.ManagerRole;
import au.com.royalpay.payment.tools.utils.PageListUtils;
@ -13,6 +15,7 @@ import com.alibaba.fastjson.JSONObject;
import com.github.miemiedev.mybatis.paginator.domain.Order;
import com.github.miemiedev.mybatis.paginator.domain.PageBounds;
import com.github.miemiedev.mybatis.paginator.domain.PageList;
import org.apache.commons.lang3.StringUtils;
import org.omg.CORBA.SystemException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -31,6 +34,10 @@ public class ClientComplianceApplyImpl implements ClientComplianceApply
private ClientComplianceCompanyMapper clientComplianceCompanyMapper;
@Resource
private ClientFilesMapper clientFilesMapper;
@Resource
private ClientManager clientManager;
@Resource
private ClientMapper clientMapper;
@Override
public JSONObject listClientComplianceApply(JSONObject manager, ClientComplianceQuery applyQuery) {
@ -88,6 +95,24 @@ public class ClientComplianceApplyImpl implements ClientComplianceApply
complianceDetail.put("description",' ');
clientComplianceCompanyMapper.update(complianceDetail);
clientFilesMapper.passCompliance(clientId);
JSONObject client = clientManager.getClientInfo(clientId);
boolean clientChanged = false;
if (StringUtils.isNotBlank(complianceDetail.getString("company_photo"))) {
client.put("company_photo", complianceDetail.getString("company_photo"));
clientChanged = true;
}
if (StringUtils.isNotBlank(complianceDetail.getString("store_photo"))) {
client.put("store_photo", complianceDetail.getString("store_photo"));
clientChanged = true;
}
if (StringUtils.isNotBlank(complianceDetail.getString("company_website"))) {
client.put("company_website", complianceDetail.getString("company_website"));
clientChanged = true;
}
if (clientChanged) {
clientMapper.update(client);
}
}
@Override

@ -275,6 +275,17 @@ public class TestController implements ApplicationEventPublisherAware {
return list.isEmpty() ? new JSONObject() : list.get(0);
}
@ManagerMapping(value = "/fix_transaction/{orderId}", method = RequestMethod.GET, role = ManagerRole.DEVELOPER)
public void fixTransactionsByOrderId(@PathVariable String orderId) {
JSONObject order = orderMapper.find(orderId);
try {
String orderChannel = StringUtils.defaultIfEmpty(order.getString("order_channel"), order.getString("channel"));
paymentApi.checkOrderStatus(order.getString("order_id"), orderChannel, true);
} catch (Exception e) {
logger.error("fix transaction error:" + order.getString("order_id"));
}
}
@ManagerMapping(value = "/fix_transaction", method = RequestMethod.PUT, role = ManagerRole.DEVELOPER)
public void fixTransactions() {
List<JSONObject> orders = orderMapper.listOrdersWithNoTransactions();

@ -6,6 +6,7 @@ import cn.yixblog.support.mybatis.autosql.annotations.AutoSql;
import cn.yixblog.support.mybatis.autosql.annotations.SqlType;
import com.alibaba.fastjson.JSONObject;
import org.apache.ibatis.annotations.Param;
import org.springframework.core.annotation.Order;
import java.util.List;
@ -32,8 +33,6 @@ public interface ClientFilesMapper {
@AdvanceSelect(addonWhereClause = "is_valid = 1 and (status = 0 or status = 3) and file_name='client_agree_file'")
List<JSONObject> findClientAggreeFileCommit(@Param("client_id") int clientId);
@AutoSql(type = SqlType.SELECT)
@AdvanceSelect(addonWhereClause = "is_valid = 1")
List<JSONObject> findAllClientFile(@Param("client_id") int clientId);
@AutoSql(type = SqlType.SELECT)

@ -2036,7 +2036,24 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
throw new InvalidShortIdException();
}
JSONObject file = signInAccountService.checkAuthFileStatus(client);
file.put("file_company", clientComplianceCompanyMapper.findFileByClientId(account.getIntValue("client_id")));
JSONObject compliance = clientComplianceCompanyMapper.findFileByClientId(account.getIntValue("client_id"));
file.put("file_company", compliance);
JSONObject photoInfo = new JSONObject();
photoInfo.put("company_photo", client.getString("company_photo"));
photoInfo.put("store_photo", client.getString("store_photo"));
photoInfo.put("web_site", client.getString("company_website"));
if (compliance != null) {
if (StringUtils.isNotBlank(compliance.getString("company_photo"))) {
photoInfo.put("company_photo", compliance.getString("company_photo"));
}
if (StringUtils.isNotBlank(compliance.getString("store_photo"))) {
photoInfo.put("store_photo", compliance.getString("store_photo"));
}
if (StringUtils.isNotBlank(compliance.getString("company_website"))) {
photoInfo.put("web_site", compliance.getString("company_website"));
}
}
file.put("photo_info", photoInfo);
return file;
}
@ -2066,6 +2083,8 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
client.put("wechat_rate", weChatRate.getBigDecimal("rate_value").setScale(2, BigDecimal.ROUND_DOWN));
client.put("clean", "T+" + weChatRate.getString("clean_days"));
client.put("clean_days", weChatRate.getString("clean_days"));
String rateConfig = sysConfigManager.getSysConfig().getString("sys_rates");
JSONObject sysConfigRate = JSONObject.parseObject(rateConfig);
try {
JSONObject alipayRate = merchantInfoProvider.clientCurrentRate(client.getIntValue("client_id"), new Date(), "Alipay");
@ -2073,16 +2092,6 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
client.put("alipay_rate", alipayRate.getBigDecimal("rate_value").setScale(2, BigDecimal.ROUND_DOWN));
}
JSONObject bestPayRate = merchantInfoProvider.clientCurrentRate(client.getIntValue("client_id"), new Date(), "Bestpay");
if (bestPayRate != null) {
client.put("bestpay_rate", bestPayRate.getBigDecimal("rate_value").setScale(2, BigDecimal.ROUND_DOWN));
}
JSONObject jdRate = merchantInfoProvider.clientCurrentRate(client.getIntValue("client_id"), new Date(), "jd");
if (jdRate != null) {
client.put("jd_rate", jdRate.getBigDecimal("rate_value").setScale(2, BigDecimal.ROUND_DOWN));
}
JSONObject alipayOnlineRate = merchantInfoProvider.clientCurrentRate(client.getIntValue("client_id"), new Date(), "AlipayOnline");
if (alipayOnlineRate != null) {
client.put("alipay_online_rate", alipayOnlineRate.getBigDecimal("rate_value").setScale(2, BigDecimal.ROUND_DOWN));
@ -2093,7 +2102,23 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
client.put("cbbank_rate", cbBankPayRate.getBigDecimal("rate_value").setScale(2, BigDecimal.ROUND_DOWN));
}
} catch (Exception ignored) {
throw new BadRequestException("Merchant Rate Not Configure");
throw new BadRequestException("Merchant Rate Not Configure,Please Contact Customer Service");
}
try {
JSONObject bestPayRate = merchantInfoProvider.clientCurrentRate(client.getIntValue("client_id"), new Date(), "Bestpay");
if (bestPayRate != null) {
client.put("bestpay_rate", bestPayRate.getBigDecimal("rate_value").setScale(2, BigDecimal.ROUND_DOWN));
}
JSONObject jdRate = merchantInfoProvider.clientCurrentRate(client.getIntValue("client_id"), new Date(), "jd");
if (jdRate != null) {
client.put("jd_rate", jdRate.getBigDecimal("rate_value").setScale(2, BigDecimal.ROUND_DOWN));
}
} catch (Exception ignored) {
JSONObject rate = sysConfigRate.getJSONObject("t" + weChatRate.getString("clean_days"));
client.put("bestpay_rate", rate.getBigDecimal("Bestpay").setScale(2, BigDecimal.ROUND_DOWN));
client.put("jd_rate", rate.getBigDecimal("JDpay").setScale(2, BigDecimal.ROUND_DOWN));
}
JSONObject bankAccount = getBankAccountByClientId(client.getIntValue("client_id"));
@ -2940,7 +2965,7 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
file.put("file_id", existFile.getString("file_id"));
clientFilesMapper.update(file);
}
if (!renewal && client.getIntValue("source") != 4) {
if (!renewal) {
clientModifySupport.processClientModify(new OpenStatusModify(manager, clientMoniker, 2));
}
@ -3329,6 +3354,10 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
@Transactional
public void commitAuthFilesToCompliance(String clientMoniker, JSONObject account, String source) {
JSONObject client = getClientInfoByMoniker(clientMoniker);
String clientPayType = "";
String companyPhoto = "";
String storePhoto= "";
String webSite= "";
int sourceEnum = 2;
if (client == null) {
throw new InvalidShortIdException();
@ -3353,13 +3382,21 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
if ("app".equals(source.toLowerCase())) {
sourceEnum = 1;
}
JSONObject photoInfo = account.getJSONObject("photo_info");
if (photoInfo != null) {
companyPhoto = photoInfo.getString("company_photo");
storePhoto = photoInfo.getString("store_photo");
webSite = photoInfo.getString("web_site");
}
JSONObject fileComp = clientComplianceCompanyMapper.findFileByClientId(client.getIntValue("client_id"));
if (fileComp == null) {
fileComp = new JSONObject();
fileComp.put("client_id", client.getIntValue("client_id"));
fileComp.put("submit_time", new Date());
fileComp.put("status", 0);
fileComp.put("company_photo", companyPhoto);
fileComp.put("store_photo", storePhoto);
fileComp.put("company_website", webSite);
fileComp.put("source", sourceEnum);
fileComp.put("commit_by_id", account.getString("account_id"));
clientComplianceCompanyMapper.save(fileComp);
@ -3367,6 +3404,9 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
} else if (fileComp.getIntValue("status") == 2) {
fileComp.put("status", 0);
fileComp.put("submit_time", new Date());
fileComp.put("company_photo", companyPhoto);
fileComp.put("store_photo", storePhoto);
fileComp.put("company_website", webSite);
fileComp.put("source", sourceEnum);
fileComp.put("commit_by_id", account.getString("account_id"));
clientComplianceCompanyMapper.update(fileComp);
@ -3403,6 +3443,8 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
client.put("wechat_rate", weChatRate.getBigDecimal("rate_value").setScale(2, BigDecimal.ROUND_DOWN));
client.put("clean", "T+" + weChatRate.getString("clean_days"));
client.put("clean_days", weChatRate.getString("clean_days"));
String rateConfig = sysConfigManager.getSysConfig().getString("sys_rates");
JSONObject sysConfigRate = JSONObject.parseObject(rateConfig);
try {
JSONObject alipayRate = merchantInfoProvider.clientCurrentRate(client.getIntValue("client_id"), new Date(), "Alipay");
@ -3410,16 +3452,6 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
client.put("alipay_rate", alipayRate.getBigDecimal("rate_value").setScale(2, BigDecimal.ROUND_DOWN));
}
JSONObject bestPayRate = merchantInfoProvider.clientCurrentRate(client.getIntValue("client_id"), new Date(), "Bestpay");
if (bestPayRate != null) {
client.put("bestpay_rate", bestPayRate.getBigDecimal("rate_value").setScale(2, BigDecimal.ROUND_DOWN));
}
JSONObject jdRate = merchantInfoProvider.clientCurrentRate(client.getIntValue("client_id"), new Date(), "jd");
if (jdRate != null) {
client.put("jd_rate", jdRate.getBigDecimal("rate_value").setScale(2, BigDecimal.ROUND_DOWN));
}
JSONObject alipayOnlineRate = merchantInfoProvider.clientCurrentRate(client.getIntValue("client_id"), new Date(), "AlipayOnline");
if (alipayOnlineRate != null) {
client.put("alipay_online_rate", alipayOnlineRate.getBigDecimal("rate_value").setScale(2, BigDecimal.ROUND_DOWN));
@ -3430,7 +3462,23 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
client.put("cbbank_rate", cbBankPayRate.getBigDecimal("rate_value").setScale(2, BigDecimal.ROUND_DOWN));
}
} catch (Exception ignored) {
throw new BadRequestException("Merchant Rate Not Configure");
throw new BadRequestException("Merchant Rate Not Configure,Please Contact Customer Service");
}
try {
JSONObject bestPayRate = merchantInfoProvider.clientCurrentRate(client.getIntValue("client_id"), new Date(), "Bestpay");
if (bestPayRate != null) {
client.put("bestpay_rate", bestPayRate.getBigDecimal("rate_value").setScale(2, BigDecimal.ROUND_DOWN));
}
JSONObject jdRate = merchantInfoProvider.clientCurrentRate(client.getIntValue("client_id"), new Date(), "jd");
if (jdRate != null) {
client.put("jd_rate", jdRate.getBigDecimal("rate_value").setScale(2, BigDecimal.ROUND_DOWN));
}
} catch (Exception ignored) {
JSONObject rate = sysConfigRate.getJSONObject("t" + weChatRate.getString("clean_days"));
client.put("bestpay_rate", rate.getBigDecimal("Bestpay").setScale(2, BigDecimal.ROUND_DOWN));
client.put("jd_rate", rate.getBigDecimal("JDpay").setScale(2, BigDecimal.ROUND_DOWN));
}
JSONObject bankAccount = getBankAccountByClientId(client.getIntValue("client_id"));
@ -4129,7 +4177,7 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
transactions.forEach(e -> {
if ("Credit".equals(e.getString("type")) && !"settle revoke".equals(e.getString("remark"))) {
JSONObject manager = managerMapper.findDetail(e.getString("operation"));
e.put("operator_displayname", manager.getString("display_name"));
e.put("operator", manager.getString("display_name"));
}
});
return transactions;
@ -4150,7 +4198,14 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
if (client == null) {
throw new InvalidShortIdException();
}
return clearingDistributedSurchargeMapper.findSurchargeTransactionsByDetailId(client.getIntValue("client_id"), detailId);
List<JSONObject> transactions = clearingDistributedSurchargeMapper.findSurchargeTransactionsByDetailId(client.getIntValue("client_id"), detailId);
transactions.forEach(e -> {
if ("Credit".equals(e.getString("type")) && !"settle revoke".equals(e.getString("remark"))) {
JSONObject manager = managerMapper.findDetail(e.getString("operation"));
e.put("operator", manager.getString("display_name"));
}
});
return transactions;
}
@Override

@ -55,9 +55,11 @@ public class PartnerManageController {
}
@RequestMapping(value = "/init/merchant_code", method = RequestMethod.GET)
public String initMerchantCode() {
return clientManager.initMerchantCode();
@RequestMapping(value = "/init/merchant_code", method = RequestMethod.GET,produces = "application/json")
public JSONObject initMerchantCode() {
JSONObject result = new JSONObject();
result.put("partner_code", clientManager.initMerchantCode());
return result;
}
@RequestMapping(value = "/init/check_code_isvalid", method = RequestMethod.GET)

@ -44,6 +44,7 @@ import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
@ -583,7 +584,8 @@ public class PartnerViewController {
@PartnerMapping(value = "/clientCompliance/{clientMoniker}/viewCommit", method = RequestMethod.POST)
@ResponseBody
public void clientComplianceViewCommit(@PathVariable String clientMoniker ,@ModelAttribute(CommonConsts.PARTNER_STATUS) JSONObject account) {
public void clientComplianceViewCommit(@PathVariable String clientMoniker ,@ModelAttribute(CommonConsts.PARTNER_STATUS) JSONObject account, @RequestBody JSONObject photoInfo) {
account.put("photo_info", photoInfo);
clientManager.commitAuthFilesToCompliance(clientMoniker, account, "Web");
}

@ -464,7 +464,7 @@ public class SignInAccountServiceImpl implements SignInAccountService, Applicati
"company_phone", "suburb", "postcode", "state", "contact_person", "contact_phone", "contact_email", "short_name", "logo_url", "enable_refund",
"enable_refund_auth", "retail_surcharge", "require_custinfo", "require_remark", "logo_thumbnail", "creator", "create_time", "approver",
"approve_result", "approve_time", "open_status", "timezone", "has_children", "source", "customer_surcharge_rate", "enable_alipay", "enable_wechat",
"enable_bestpay", "manual_settle", "skip_clearing", "mail_confirm", "surcharge_mode"};
"enable_bestpay", "manual_settle", "skip_clearing", "mail_confirm", "surcharge_mode", "company_photo", "store_photo", "company_website"};
for (String col : columns) {
simpleClient.put(col, client.get(col));
}
@ -707,13 +707,33 @@ public class SignInAccountServiceImpl implements SignInAccountService, Applicati
}
result.put("client_less_file", clientFilesIsLess);
if (clientFilesIsLess) {
whenClientLessFile(client, result);
}
}
}
return result;
}
private void whenClientLessFile(JSONObject client,JSONObject result) {
JSONObject authFileCompliance = clientComplianceCompanyMapper.findFileByClientId(client.getIntValue("client_id"));
if (authFileCompliance != null && StringUtils.isNotBlank(authFileCompliance.getString("description"))) {
result.put("client_refuse_reason", "Refuse reason/打回原因:" + authFileCompliance.getString("description"));
}
JSONObject photoInfo = new JSONObject();
photoInfo.put("company_photo", client.getString("company_photo"));
photoInfo.put("store_photo", client.getString("store_photo"));
photoInfo.put("web_site", client.getString("company_website"));
if (authFileCompliance != null) {
if (StringUtils.isNotBlank(authFileCompliance.getString("company_photo"))) {
photoInfo.put("company_photo", authFileCompliance.getString("company_photo"));
}
if (StringUtils.isNotBlank(authFileCompliance.getString("store_photo"))) {
photoInfo.put("store_photo", authFileCompliance.getString("store_photo"));
}
if (StringUtils.isNotBlank(authFileCompliance.getString("company_website"))) {
photoInfo.put("web_site", authFileCompliance.getString("company_website"));
}
return result;
}
result.put("photo_info", photoInfo);
}
}

@ -135,7 +135,7 @@ public class SurchargeAccountServiceImpl implements SurchargeAccountService {
surchargeAccount.put("balance", surchargeAccount.getBigDecimal("balance").add(transaction.getBigDecimal("amount")));
clientsSurchargeAccountsMapper.update(surchargeAccount);
detail.put("checkout", 1);
detail.put("operator_id", manager.getString("display_name"));
detail.put("operator_id", manager.getString("manager_id"));
financialSurchargeAccountDetailMapper.update(detail);
} finally {
locker.unlock(detail.getIntValue("client_id") + "_" + detail.getString("settle_month") + "_fill");

@ -19,6 +19,11 @@
and file_name='client_agree_file'
and status != 1
</select>
<select id="findAllClientFile" resultType="com.alibaba.fastjson.JSONObject">
select * from sys_files where is_valid = 1
and client_id = #{client_id}
order by last_update_date asc
</select>
<update id="confirmAgreeFile">
update sys_files
set state = 2

@ -395,7 +395,7 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter
}
$scope.initMerchantCode = function () {
$http.get('/sys/partners/init/merchant_code').then(function (response) {
$scope.partner.client_moniker = response.data;
$scope.partner.client_moniker = response.data.partner_code;
$scope.merchantCodeChecked = true;
$scope.merchantIsValid = true;
});
@ -2969,7 +2969,7 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter
}
$scope.initMerchantCode = function () {
$http.get('/sys/partners/init/merchant_code').then(function (response) {
$scope.partner.client_moniker = response.data;
$scope.partner.client_moniker = response.data.partner_code;
$scope.merchantCodeChecked = true;
$scope.merchantIsValid = true;
});

@ -812,6 +812,50 @@ define(['angular', 'decimal', 'uiRouter', 'ngBootSwitch', 'ngFileUpload', 'uiBoo
app.controller('clientCommitToComplianceFilesCtrl', ['$scope', '$http', '$rootScope', 'commonDialog', '$state', 'Upload', 'file','partner', function ($scope, $http, $rootScope, commonDialog, $state, Upload, file, partner) {
$scope.file = file.data || {};
$scope.partner = partner.data || {};
$scope.uploadStorePhoto = function (file) {
if (file != null) {
if (file.size > 2 * 1024 * 1024) {
commonDialog.alert({title: 'Error', content: '文件大小不能超过2MB请压缩后重试', type: 'error'})
} else {
$scope.storePhotoProgress = {value: 0};
Upload.upload({
url: '/attachment/files',
data: {file: file}
}).then(function (resp) {
delete $scope.storePhotoProgress;
$scope.file.photo_info.store_photo = resp.data.url;
}, function (resp) {
delete $scope.storePhotoProgress;
commonDialog.alert({title: 'Upload Failed', content: resp.data.message, type: 'error'})
}, function (evt) {
$scope.storePhotoProgress.value = parseInt(100 * evt.loaded / evt.total);
})
}
}
};
$scope.uploadShopPhoto = function (file) {
if (file != null) {
if (file.size > 2 * 1024 * 1024) {
commonDialog.alert({title: 'Error', content: '文件大小不能超过2MB请压缩后重试', type: 'error'})
} else {
$scope.shopPhotoProgress = {value: 0};
Upload.upload({
url: '/attachment/files',
data: {file: file}
}).then(function (resp) {
delete $scope.shopPhotoProgress;
$scope.file.photo_info.company_photo = resp.data.url;
}, function (resp) {
delete $scope.shopPhotoProgress;
commonDialog.alert({title: 'Upload Failed', content: resp.data.message, type: 'error'})
}, function (evt) {
$scope.shopPhotoProgress.value = parseInt(100 * evt.loaded / evt.total);
})
}
}
};
//audit files
$scope.uploadBankFile = function (file) {
if (file != null) {
@ -860,7 +904,6 @@ define(['angular', 'decimal', 'uiRouter', 'ngBootSwitch', 'ngFileUpload', 'uiBoo
if ($scope.file.file_id_info && $scope.file.file_id_info.endsWith('pdf')) {
$scope.idIsImage = false;
}
$scope.uploadCompanyFile = function (file) {
if (file != null) {
if (file.size > 3 * 1024 * 1024) {
@ -1017,12 +1060,16 @@ define(['angular', 'decimal', 'uiRouter', 'ngBootSwitch', 'ngFileUpload', 'uiBoo
commonDialog.alert({title: 'Error', content: '请提交* Certificate of Registration', type: 'error'});
return;
}
;
if ((!$scope.file.photo_info.company_photo || !$scope.file.photo_info.store_photo) && !$scope.file.photo_info.web_site) {
alert('Please upload two photos or fill out the website');
return;
}
commonDialog.confirm({
title: 'Warning',
content: 'Are you sure to submit files?'
}).then(function () {
$http.post('/client/partner_info/clientCompliance/' + $scope.partner.client_moniker + '/viewCommit', $scope.file).then(function () {
$http.post('/client/partner_info/clientCompliance/' + $scope.partner.client_moniker + '/viewCommit', $scope.file.photo_info).then(function () {
commonDialog.alert({
title: 'Success',
content: 'Commit Successful',
@ -1855,6 +1902,17 @@ define(['angular', 'decimal', 'uiRouter', 'ngBootSwitch', 'ngFileUpload', 'uiBoo
$scope.$close(signInfo);
};
}]);
var compare = function (x, y) {
x = parseInt(x);
y = parseInt(y);
if (x < y) {
return -1;
} else if (x > y) {
return 1;
} else {
return 0;
}
};
return app;
});

@ -35,7 +35,11 @@
<div class="col-sm-10">
<p class="form-control-static">
<a class="text-primary" role="button" title="Detail"
ui-sref="partners.detail({clientMoniker:partner.client_moniker})">
<span id="parent_code">{{partner.client_moniker}}</span>
</a>
</p>
</div>
</div>
@ -70,6 +74,41 @@
</div>
<div class="panel-body">
<div class="form-horizontal">
<div class="form-group">
<label class="control-label col-sm-4" style="text-align: center;">
Website
</label>
<div class="col-sm-6">
<input type="text" class="form-control" ng-if="file.file_company.company_website"
ng-model="file.file_company.company_website"
maxlength="200" readonly>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-4" style="text-align: center;">Shop Photo
</label>
<div class="col-sm-3">
<div class="form-control-static"><em>1:</em>&nbsp;
</div>
<uib-progressbar value="shopPhotoProgress.value"
ng-if="shopPhotoProgress"></uib-progressbar>
<a target="_blank" ng-if="file.file_company.company_photo" ng-href="{{file.file_company.company_photo}}">
<img ng-src="{{file.file_company.company_photo}}"
ng-if="file.file_company.company_photo"
class="thumbnail img-size col-sm-9">
</a>
</div>
<div class="col-sm-3">
<div class="form-control-static"><em>2:</em>&nbsp;
</div>
<uib-progressbar value="storePhotoProgress.value"
ng-if="storePhotoProgress"></uib-progressbar>
<a target="_blank" ng-if="file.file_company.store_photo" ng-href="{{file.file_company.store_photo}}">
<img ng-src="{{file.file_company.store_photo}}" ng-if="file.file_company.store_photo"
class="thumbnail img-size col-sm-9">
</a>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-4" style="text-align: center;">* bank statement
<span ng-if="file.client_bank_file[0].status == 0" class="small text-dark">(未提交)</span>

@ -2,6 +2,19 @@
img {
width: 100%;
}
.btn btn-default:active{
position: relative;
top: 1px;
box-shadow: inset 0 3px 5px 0 rgba(0,0,0, 0.2);
outline: 0;
}
.btn-default:active,
.btn-default.active,
.open > .dropdown-toggle.btn-default {
color: #333;
background-color: #f7bf90;
border-color: #adadad;
}
</style>
<section class="content-header">
<h1>商户合规文件补充
@ -11,6 +24,64 @@
</section>
<div class="panel-body box box-warning ng-scope" style="margin-top: 20px;">
<div class="form-horizontal">
<div class="form-group">
<div class="panel-body">
<div class="form-horizontal">
<div class="form-group">
<label class="control-label col-sm-3">Shop Photo</label>
<div class="col-sm-3">
<div class="form-control-static"><em>1:</em>&nbsp;
<button class="btn btn-primary" type="button" ng-if="file.client_less_file && file.file_company.status != 0 && file.file_company.status!=1"
ngf-select="uploadShopPhoto($file)" accept="image/*">
<i class="fa fa-upload"></i> Upload Shop Photo1
</button>
</div>
<uib-progressbar value="shopPhotoProgress.value"
ng-if="shopPhotoProgress"></uib-progressbar>
<a target="_blank" ng-if="file.photo_info.company_photo" ng-href="{{file.photo_info.company_photo}}">
<img ng-src="{{file.photo_info.company_photo}}"
ng-if="file.photo_info.company_photo"
class="thumbnail img-size col-sm-9">
</a>
</div>
<div class="col-sm-3">
<div class="form-control-static"><em>2:</em>&nbsp;
<button class="btn btn-primary" type="button" ng-if="file.client_less_file && file.file_company.status != 0 && file.file_company.status!=1"
ngf-select="uploadStorePhoto($file)" accept="image/*">
<i class="fa fa-upload"></i> Upload Shop Photo2
</button>
</div>
<uib-progressbar value="storePhotoProgress.value"
ng-if="storePhotoProgress"></uib-progressbar>
<a target="_blank" ng-if="file.photo_info.store_photo" ng-href="{{file.photo_info.store_photo}}">
<img ng-src="{{file.photo_info.store_photo}}" ng-if="file.photo_info.store_photo"
class="thumbnail img-size col-sm-9">
</a>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-3">
Website</label>
<div class="col-sm-6">
<input type="text" class="form-control" ng-if="file.client_less_file && file.file_company.status != 0 && file.file_company.status!=1"
ng-model="file.photo_info.web_site"
maxlength="200">
<input type="text" class="form-control" ng-if="!file.client_less_file"
ng-model="file.photo_info.web_site"
maxlength="200" readonly>
<p class="text-info">
<i class="fa fa-info"></i> We are dedicated to provide you and your customers a better payment experience. To achieve this, we would like to request a fully completed trading information from you according to your actual payment scenarios:<br>
1) please provide a website link if the transactions take place in online scenario;<br>
2) provide two shop photos with inside and outside scenes if the transactions take place in offline scenario.<br>
<i class="fa fa-info"></i> Please be aware that failing to submit the related documents may affect your payment service. Thank you very much for your cooperation.<br>
<i class="fa fa-info"></i> 请根据您的实际交易场景完善网站信息和店铺照片,如您使用线上交易,请补充网站信息。如您使用线下交易,请补充店铺照片两张。如未根据实际交易场景选择提交材料,将会影响交易
</p>
</div>
</div>
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-3">* bank statement</label>
<div class="col-sm-3">

@ -37,20 +37,17 @@ define(['angular', 'decimal', 'uiBootstrap', 'uiRouter', 'angularEcharts'], func
})
};
$scope.getDetailByMonths();
$scope.surchargeAccountDetail = function (client_moniker,mon) {
$scope.surchargeAccountDetail = function (detail) {
$uibModal.open({
templateUrl: '/static/payment/surchargeaccount/templates/client_surcharge_account_dialog.html',
controller: 'accountDetailCtrl',
size: 'lg',
resolve: {
client_moniker: function () {
return client_moniker;
},
month: function () {
return mon;
detail: function(){
return detail;
},
transactions: ['$http', function ($http) {
return $http.get('/client/partner_info/' + client_moniker + '/account/transactions/date?date=' + mon);
surchargeDetailData: ['$http', function ($http) {
return $http.get('/client/partner_info/' + detail.client_moniker + '/account/transactions/date?detailId=' + detail.detail_id);
}]
}
});

@ -25,13 +25,13 @@
<td ng-bind="details.total_surcharge|currency:'$'"
style="color: red;vertical-align:middle"></td>
<td style="vertical-align:middle">
<span ng-if="details.is_valid">Yes</span>
<span ng-if="!details.is_valid">No</span>
<span ng-if="details.checkout">Yes</span>
<span ng-if="!details.checkout">No</span>
</td>
<td style="vertical-align:middle">
<i class="fa fa-bars"
style="font-size: 15px;color: #3c8dbc;cursor: pointer;padding-left: 15px"
ng-click="surchargeAccountDetail(details.client_moniker,details.settle_month)"></i>
ng-click="surchargeAccountDetail(details)"></i>
</td>
</tr>
</tbody>

@ -2,6 +2,30 @@
<h4>Surcharge Accountdddd Detail{{partner.client_moniker?'('+partner.client_moniker+')':''}}</h4>
</div>
<div class="modal-body">
<div class="box box-default">
<div class="box-header">Credits</div>
<div class="box-body">
<div class="table-responsive col-sm-12">
<table class="table table-bordered table-striped table-hover">
<thead>
<tr>
<th>Create Time</th>
<th>Amount</th>
<th>Remark</th>
<th>Operator</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="surcharge in surchargeDetailData|propsFilter:{type:'Credit'}:true">
<td ng-bind="surcharge.create_time|date:'yyyy-MM-dd HH:mm:ss'"></td>
<td ng-bind="surcharge.amount|currency:'AUD'"></td>
<td ng-bind="surcharge.remark"></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="box box-default">
<div class="box-header">Debits</div>
<div class="box-body">
@ -17,7 +41,7 @@
</tr>
</thead>
<tbody>
<tr ng-repeat="detail in surchargeDetailData">
<tr ng-repeat="detail in surchargeDetailData|propsFilter:{type:'Debit'}:true">
<td ng-bind="detail.settle_date|date:'yyyy-MM-dd'"></td>
<td ng-bind="detail.amount|currency:'AUD'"></td>
<td ng-bind="detail.total_surcharge|currency:'AUD'"></td>

Loading…
Cancel
Save