diff --git a/pom.xml b/pom.xml index adaacec07..94a2f7150 100644 --- a/pom.xml +++ b/pom.xml @@ -40,6 +40,10 @@ au.com.royalpay.payment rpay-core + + au.com.royalpay.payment + yeepay-core + com.github.stuxuhai jpinyin @@ -204,4 +208,4 @@ - \ No newline at end of file + diff --git a/src/main/java/au/com/royalpay/payment/manage/analysis/core/impls/ChannelsAnalysisServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/analysis/core/impls/ChannelsAnalysisServiceImpl.java index 5ad52e954..0ab5fa1ae 100644 --- a/src/main/java/au/com/royalpay/payment/manage/analysis/core/impls/ChannelsAnalysisServiceImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/analysis/core/impls/ChannelsAnalysisServiceImpl.java @@ -30,6 +30,8 @@ public class ChannelsAnalysisServiceImpl implements ChannelsAnalysisService { listChannel.add(putParam(params,"AlipayOnline")); listChannel.add(putParam(params,"jd")); listChannel.add(putParam(params,"hf")); + listChannel.add(putParam(params,"Rpay")); + listChannel.add(putParam(params,"Yeepay")); return listChannel; } @@ -40,7 +42,7 @@ public class ChannelsAnalysisServiceImpl implements ChannelsAnalysisService { } List list = new ArrayList<>(); Map analysisMap = new TreeMap<>(); - String[] channels = {"Wechat","Bestpay","Alipay","jd","AlipayOnline","hf", "Rpay"}; + String[] channels = {"Wechat","Bestpay","Alipay","jd","AlipayOnline","hf", "Rpay","Yeepay"}; for (String channel:channels){ analysisChannelCustomers(params, analysisMap, channel); } diff --git a/src/main/java/au/com/royalpay/payment/manage/analysis/core/impls/DashboardServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/analysis/core/impls/DashboardServiceImpl.java index c63347edc..9ef8e1afb 100644 --- a/src/main/java/au/com/royalpay/payment/manage/analysis/core/impls/DashboardServiceImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/analysis/core/impls/DashboardServiceImpl.java @@ -556,7 +556,7 @@ public class DashboardServiceImpl implements DashboardService,DashboardAnalysisT } } private JSONObject getTodayChannelCount(JSONObject params){ - String[] channels = new String[]{"Bestpay","Wechat","Alipay","jd","AlipayOnline","hf", "Rpay"}; + String[] channels = new String[]{"Bestpay","Wechat","Alipay","jd","AlipayOnline","hf", "Rpay","Yeepay"}; JSONObject resp = new JSONObject(); for(String channel:channels) { params.put("channel", channel); diff --git a/src/main/java/au/com/royalpay/payment/manage/analysis/mappers/TransactionAnalysisMapper.java b/src/main/java/au/com/royalpay/payment/manage/analysis/mappers/TransactionAnalysisMapper.java index d9986be29..3e52621c3 100644 --- a/src/main/java/au/com/royalpay/payment/manage/analysis/mappers/TransactionAnalysisMapper.java +++ b/src/main/java/au/com/royalpay/payment/manage/analysis/mappers/TransactionAnalysisMapper.java @@ -78,4 +78,11 @@ public interface TransactionAnalysisMapper { List getAreaMerchantAmountByCycle(JSONObject params); JSONObject getOrderClearAmount(@Param("order_id") String order_id); + + /** + * 获取到cny_amount字段 + * @param params + * @return + */ + BigDecimal getCnyAmount(JSONObject params); } diff --git a/src/main/java/au/com/royalpay/payment/manage/apps/events/listeners/AfterPaymentFinishListener.java b/src/main/java/au/com/royalpay/payment/manage/apps/events/listeners/AfterPaymentFinishListener.java index 5aecb73bf..b52e8387b 100644 --- a/src/main/java/au/com/royalpay/payment/manage/apps/events/listeners/AfterPaymentFinishListener.java +++ b/src/main/java/au/com/royalpay/payment/manage/apps/events/listeners/AfterPaymentFinishListener.java @@ -28,29 +28,36 @@ public class AfterPaymentFinishListener implements ApplicationListener topOrders = transactionAnalysisMapper.getTopOrders(params); + //最大交易额 + if (!topOrders.isEmpty()) { + response.put("max_order", topOrders.get(0).get("aud_fee")); + } else { + response.put("max_order", 0); + } + //总消费人数 + response.put("total_customers", transactionAnalysisMapper.countCustomers(params)); + //老客户人数 + response.put("old_customers", transactionAnalysisMapper.countOldCustomers(params)); + return response; + } + + @Override + public JSONObject getCnyAmount(JSONObject params, JSONObject response) { + response.put("cny_amount", transactionAnalysisMapper.getCnyAmount(params)); + return response; + } +} diff --git a/src/main/java/au/com/royalpay/payment/manage/dataAnalysis/util/MyUtil.java b/src/main/java/au/com/royalpay/payment/manage/dataAnalysis/util/MyUtil.java new file mode 100644 index 000000000..9285fb785 --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/dataAnalysis/util/MyUtil.java @@ -0,0 +1,27 @@ +package au.com.royalpay.payment.manage.dataAnalysis.util; + +import java.util.Calendar; +import java.util.Date; + +/** + * @Author lvjian + * @Date 2018/6/28 18:34 + */ +public class MyUtil { + + /** + * 时分秒清零,保留年月日 + * @param date + * @return + */ + public static Date getYMD(Date date) { + + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MILLISECOND, 0); + return calendar.getTime(); + } +} diff --git a/src/main/java/au/com/royalpay/payment/manage/dataAnalysis/web/DataAnalysisController.java b/src/main/java/au/com/royalpay/payment/manage/dataAnalysis/web/DataAnalysisController.java new file mode 100644 index 000000000..a5fb11304 --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/dataAnalysis/web/DataAnalysisController.java @@ -0,0 +1,54 @@ +package au.com.royalpay.payment.manage.dataAnalysis.web; + +import au.com.royalpay.payment.manage.dataAnalysis.core.DataAnalysisService; +import au.com.royalpay.payment.manage.dataAnalysis.util.MyUtil; +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.lang3.time.DateUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; + +/** + * @Author lvjian + * @Date 2018/6/28 18:32 + */ +@RestController +@RequestMapping(value = "/out") +public class DataAnalysisController { + + @Autowired + private DataAnalysisService dataAnalysisService; + + @RequestMapping(value = "/data_analysis") + public JSONObject dataAnalysis(@RequestParam(value = "begin", required = false) String begin, + @RequestParam(value = "offset", defaultValue = "1") Integer offset) throws ParseException { + + JSONObject params = new JSONObject(); + if (begin == null) { + Date beginInit = MyUtil.getYMD(new Date()); + Date endInit = DateUtils.addDays(beginInit,offset); + params.put("begin",beginInit); + params.put("end",endInit); + } else { + DateFormat format = new SimpleDateFormat("yyyyMMdd"); + if (offset < 0) { + params.put("end", format.parse(begin)); + params.put("begin", DateUtils.addDays(format.parse(begin),offset)); + } else { + params.put("begin", format.parse(begin)); + params.put("end", DateUtils.addDays(format.parse(begin),offset)); + } + } + JSONObject response = new JSONObject(); + response = dataAnalysisService.getDataAnalysis1(params,response); + response = dataAnalysisService.getDataAnalysis2(params,response); + response = dataAnalysisService.getCnyAmount(params, response); + return response; + } +} diff --git a/src/main/java/au/com/royalpay/payment/manage/dev/web/TestController.java b/src/main/java/au/com/royalpay/payment/manage/dev/web/TestController.java index 155d70770..b1f72c515 100644 --- a/src/main/java/au/com/royalpay/payment/manage/dev/web/TestController.java +++ b/src/main/java/au/com/royalpay/payment/manage/dev/web/TestController.java @@ -6,6 +6,7 @@ import au.com.royalpay.payment.channels.bestpay.runtime.BestPayClient; import au.com.royalpay.payment.channels.jd.runtime.JDClient; import au.com.royalpay.payment.channels.rpay.runtime.RpayClient; import au.com.royalpay.payment.channels.wechat.runtime.WxPayClient; +import au.com.royalpay.payment.channels.yeepay.runtime.YeePayClient; import au.com.royalpay.payment.core.PaymentApi; import au.com.royalpay.payment.core.exceptions.InvalidShortIdException; import au.com.royalpay.payment.core.exceptions.OrderNotExistsException; @@ -102,6 +103,8 @@ public class TestController implements ApplicationEventPublisherAware { @Resource private RpayClient rpayClient; @Resource + private YeePayClient yeepayClient; + @Resource private TradeLogService tradeLogService; @Resource private RetailAppService retailAppService; @@ -306,6 +309,9 @@ public class TestController implements ApplicationEventPublisherAware { String rpayjson = JSON.toJSONString(orderInfo, SerializerFeature.PrettyFormat); res.put("xml", rpayjson); break; + case "Yeepay": + res.put("xml", yeepayClient.queryOrderStd(orderId).toString()); + break; default: throw new BadRequestException("Not Support channel:" + channel); } @@ -350,6 +356,9 @@ public class TestController implements ApplicationEventPublisherAware { xmlStr = XmlFormatUtils.formatXml(elem); res.put("xml", xmlStr); break; + case "Yeepay": + res.put("xml", yeepayClient.queryRefundStd(refundOrder.getString("out_refund_id")).toString()); + break; default: throw new BadRequestException("Not Support channel:" + channel); } diff --git a/src/main/java/au/com/royalpay/payment/manage/management/clearing/core/impl/CleanServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/management/clearing/core/impl/CleanServiceImpl.java index 27f2fdeb9..52cce8e4d 100644 --- a/src/main/java/au/com/royalpay/payment/manage/management/clearing/core/impl/CleanServiceImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/management/clearing/core/impl/CleanServiceImpl.java @@ -11,10 +11,7 @@ import au.com.royalpay.payment.manage.mappers.log.LogSettleMailMapper; import au.com.royalpay.payment.manage.mappers.log.ValidationLogMapper; import au.com.royalpay.payment.manage.mappers.payment.TaskManualSettleMapper; import au.com.royalpay.payment.manage.mappers.payment.TransactionMapper; -import au.com.royalpay.payment.manage.mappers.system.CalendarMapper; -import au.com.royalpay.payment.manage.mappers.system.ClientRateMapper; -import au.com.royalpay.payment.manage.mappers.system.ManagerMapper; -import au.com.royalpay.payment.manage.mappers.system.RateMapper; +import au.com.royalpay.payment.manage.mappers.system.*; import au.com.royalpay.payment.manage.merchants.core.ClientConfigService; import au.com.royalpay.payment.manage.merchants.core.ClientManager; import au.com.royalpay.payment.manage.notice.core.MailService; @@ -157,6 +154,9 @@ public class CleanServiceImpl implements CleanService, ManagerTodoNoticeProvider @Resource private SysConfigManager sysConfigManager; + @Resource + private ClientDeviceMapper clientDeviceMapper; + @Value("${app.settlement.email-to}") private String settlementEmailTo; @Value("${app.settlement.email-cc}") @@ -828,13 +828,15 @@ public class CleanServiceImpl implements CleanService, ManagerTodoNoticeProvider int rowNum = 0; Row row = sheet.createRow(rowNum); String[] title = {"order Id", "Client Order Id", "Transaction Time", "Channel", "Gateway", "Exchange Rate", "Transaction Type", "Currency", - "Input Amount", "Total Amount", "Clearing Amount", "Sruchange Rate", "Settle Amount", "Remark"}; + "Input Amount", "Total Amount", "Clearing Amount", "Sruchange Rate", "Settle Amount", "Remark", "Dev No"}; String[] analysis = {"Total Credit", "Total Debit", "Gross Amount", "Total Charge", "Net Amount"}; for (int i = 0; i < title.length; i++) { row.createCell(i, Cell.CELL_TYPE_STRING).setCellValue(title[i]); } JSONObject channels = clearTransation.getJSONObject("channels"); + JSONObject device; + String clientDevId = ""; for (Object o : clearTransation.getJSONArray("report")) { JSONObject settle = (JSONObject) o; if (settle.getBigDecimal("clearing_amount").compareTo(BigDecimal.ZERO) == 0) { @@ -865,6 +867,10 @@ public class CleanServiceImpl implements CleanService, ManagerTodoNoticeProvider row.createCell(12, Cell.CELL_TYPE_STRING).setCellValue(settle.getBigDecimal("settle_amount") == null ? "" : settle.getBigDecimal("settle_amount").setScale(2, BigDecimal.ROUND_DOWN).toPlainString()); row.createCell(13, Cell.CELL_TYPE_STRING).setCellValue(settle.getString("order_detail")); + device = clientDeviceMapper.find(settle.getString("dev_id")); + if (device != null) + clientDevId = device.getString("client_dev_id"); + row.createCell(14, Cell.CELL_TYPE_STRING).setCellValue(clientDevId); } row = sheet.createRow(++rowNum); for (int i = 0; i < analysis.length; i++) { diff --git a/src/main/java/au/com/royalpay/payment/manage/mappers/risk/RiskCustomerBlackListMapper.java b/src/main/java/au/com/royalpay/payment/manage/mappers/risk/RiskCustomerBlackListMapper.java new file mode 100644 index 000000000..042aa2a3d --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/mappers/risk/RiskCustomerBlackListMapper.java @@ -0,0 +1,29 @@ +package au.com.royalpay.payment.manage.mappers.risk; + +import cn.yixblog.support.mybatis.autosql.annotations.AdvanceSelect; +import cn.yixblog.support.mybatis.autosql.annotations.AutoMapper; +import cn.yixblog.support.mybatis.autosql.annotations.AutoSql; +import cn.yixblog.support.mybatis.autosql.annotations.SqlType; +import com.alibaba.fastjson.JSONObject; +import com.github.miemiedev.mybatis.paginator.domain.PageBounds; +import com.github.miemiedev.mybatis.paginator.domain.PageList; +import org.apache.ibatis.annotations.Param; + +/** + * Create by yixian at 2017-12-21 11:45 + */ +@AutoMapper(tablename = "risk_customer_black_list", pkName = "openid") +public interface RiskCustomerBlackListMapper { + @AutoSql(type = SqlType.SELECT) + JSONObject findByOpenid(@Param("openid") String openid); + + @AutoSql(type = SqlType.SELECT) + @AdvanceSelect(addonWhereClause = "is_valid=1") + PageList query(JSONObject params, PageBounds pagination); + + @AutoSql(type = SqlType.UPDATE) + void update(JSONObject customerBlackList); + + @AutoSql(type = SqlType.INSERT) + void save(JSONObject customerBlackList); +} \ No newline at end of file diff --git a/src/main/java/au/com/royalpay/payment/manage/merchants/core/ClientManager.java b/src/main/java/au/com/royalpay/payment/manage/merchants/core/ClientManager.java index 1c21c90fd..82976ea57 100644 --- a/src/main/java/au/com/royalpay/payment/manage/merchants/core/ClientManager.java +++ b/src/main/java/au/com/royalpay/payment/manage/merchants/core/ClientManager.java @@ -64,6 +64,9 @@ public interface ClientManager { @Transactional void updateClientRpayPaymentConfig(JSONObject manager, String clientMoniker, JSONObject rpaySubMerchantInfo); + @Transactional + void updateClientYeepayPaymentConfig(JSONObject manager, String clientMoniker, JSONObject yeepaySubMerchantInfo); + @Transactional void updateAliSubMerchantId(JSONObject manager, String clientMoniker, JSONObject aliSubMerchantInfo); @@ -244,6 +247,8 @@ public interface ClientManager { void changePaymentPage(JSONObject manager, String clientMoniker, String paypad_version); + void changePaymentSuccessPage(JSONObject manager, String clientMoniker, String paysuccess_version); + void changePaymentPage(JSONObject account, String paypad_version); void changeManualSettle(JSONObject account , int client_id, boolean manual_settle,String operator_id,int type,String operation); @@ -304,6 +309,8 @@ public interface ClientManager { List listRpaySubMerchantIdApplys(JSONObject manager, String clientMoniker); + List listYeepaySubMerchantIdApplys(JSONObject manager, String clientMoniker); + String subMerchantApplication(String clientMoniker, SubMerchantIdApply subMerchantApply,JSONObject manager); List listMerchantIds(String clientMoniker,JSONObject manager); @@ -332,13 +339,22 @@ public interface ClientManager { String getShortLink(String client_moniker); + String getGatewayShortLink(String client_moniker,String channel); + @Transactional void switchHfLink(JSONObject manager, String clientMoniker,boolean allow); + @Transactional + void switchGatewayLink(JSONObject manager, String clientMoniker,String channel,boolean allow); + void sendHfEmailNotice(JSONObject order); + void sendGatewayEmailNotice(JSONObject order); + void subRpayMerchantApplication(String clientMoniker,JSONObject merchantInfo, JSONObject manager); + void subYeepayMerchantApplication(String clientMoniker,JSONObject merchantInfo, JSONObject manager); + void updateAllPartnerPassword(String clientMoniker, List emails); void postponeClientRate(Date now, Date yearTomorrow, String expireDate, JSONObject client); diff --git a/src/main/java/au/com/royalpay/payment/manage/merchants/core/impls/ClientManagerImpl.java b/src/main/java/au/com/royalpay/payment/manage/merchants/core/impls/ClientManagerImpl.java index 40042d8cc..f783c9beb 100644 --- a/src/main/java/au/com/royalpay/payment/manage/merchants/core/impls/ClientManagerImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/merchants/core/impls/ClientManagerImpl.java @@ -7,6 +7,8 @@ import au.com.royalpay.payment.channels.wechat.config.WechatPayEnvironment; import au.com.royalpay.payment.channels.wechat.runtime.MpPaymentApi; import au.com.royalpay.payment.channels.wechat.runtime.WxPayClient; import au.com.royalpay.payment.channels.wechat.runtime.beans.SubMerchantInfo; +import au.com.royalpay.payment.channels.yeepay.mappers.YeePayClientConfigMapper; +import au.com.royalpay.payment.channels.yeepay.runtime.YeePayClient; import au.com.royalpay.payment.core.PaymentChannelApi; import au.com.royalpay.payment.core.exceptions.EmailException; import au.com.royalpay.payment.core.exceptions.InvalidShortIdException; @@ -120,6 +122,7 @@ 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 com.yeepay.yop.sdk.service.kj.model.SubmerchantRegisterResult; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.RandomStringUtils; @@ -243,6 +246,12 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid @Resource private RpayApi rpayApi; + @Resource + private YeePayClient yeePayClient; + + @Resource + private YeePayClientConfigMapper yeePayClientConfigMapper; + @Resource private ManagerMapper managerMapper; @Resource @@ -432,6 +441,10 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid String hfQrcodeUrl = PlatformEnvironment.getEnv().concatUrl("/api/v1.0/hf_gateway/partners/" + client.getString("client_moniker") + "/jump/app"); client.put("hfQrcodeUrl", QRCodeUtils.qrcodeImageCode(hfQrcodeUrl, 250, true)); } + if (client.getString("yeepay_pay_url") != null) { + String yeepayQrcodeUrl = PlatformEnvironment.getEnv().concatUrl("/api/v1.0/yeepay/partners/" + client.getString("client_moniker") + "/jump/app"); + client.put("yeepayQrcodeUrl", QRCodeUtils.qrcodeImageCode(yeepayQrcodeUrl, 250, true)); + } return client; } @@ -795,6 +808,25 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid clientInfoCacheSupport.clearClientCache(clientId); } + @Transactional + @Override + public void updateClientYeepayPaymentConfig(JSONObject manager, String clientMoniker, JSONObject yeepaySubMerchantInfo) { + JSONObject client = getClientInfoByMoniker(clientMoniker); + if (client == null) { + throw new InvalidShortIdException(); + } + checkOrgPermission(manager, client); + if(client.getString("yeepay_sub_merchant_id").equals(yeepaySubMerchantInfo.getString("yeepay_sub_merchant_id"))){ + throw new BadRequestException("The sub merchant Id is in use"); + } + JSONObject yeepayConfigValid =yeePayClientConfigMapper.findMerchantConfig(client.getIntValue("client_id")); + yeePayClientConfigMapper.updateSubMerchantIdValid(yeepayConfigValid.getString("yeepay_config_id"),0); + JSONObject yeepayConfig = yeePayClientConfigMapper.findMerchantConfigBySub(yeepaySubMerchantInfo.getString("yeepay_sub_merchant_id")); + yeePayClientConfigMapper.updateSubMerchantIdValid(yeepayConfig.getString("yeepay_config_id"),1); + client.put("yeepay_sub_merchant_id",yeepaySubMerchantInfo.getString("yeepay_sub_merchant_id")); + clientMapper.update(client); + } + @Override public void updateAliSubMerchantId(JSONObject manager, String clientMoniker, JSONObject aliSubMerchantInfo) { JSONObject client = getClientInfoByMoniker(clientMoniker); @@ -1220,6 +1252,9 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid if (channel.equals("hf") && !allow && client.getBoolean("enable_hf_email_notice")) { clientModifySupport.processClientConfigModify(new SwitchPermissionModify(manager, clientMoniker, "enable_hf_email_notice", allow)); } + if (channel.equals("yeepay") && !allow && client.getBoolean("enable_yeepay_email_notice")) { + clientModifySupport.processClientConfigModify(new SwitchPermissionModify(manager, clientMoniker, "enable_yeepay_email_notice", allow)); + } clientModifySupport.processClientConfigModify(new SwitchPermissionModify(manager, clientMoniker, "enable_" + channel.toLowerCase(), allow)); logger.info(manager.getString("display_name") + "(" + manager.getString("manager_id") + ") switched client " + clientMoniker + " channel " @@ -1591,6 +1626,7 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid checkAddRate(config, "jd", "jd_rate_value", org, "min_jd_rate"); checkAddRate(config, "hf", "hf_rate_value", org, "min_hf_rate"); checkAddRate(config, "Rpay", "Rpay_rate_value", org, "min_Rpay_rate"); + checkAddRate(config, "Yeepay", "yeepay_rate_value", org, "min_yeepay_rate"); configNewClientRate(config, clientId, "Wechat", "wechat_rate_value", org, "min_wechat_rate"); configNewClientRate(config, clientId, "Alipay", "alipay_rate_value", org, "min_alipay_rate"); @@ -1599,6 +1635,7 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid configNewClientRate(config, clientId, "jd", "jd_rate_value", org, "min_jd_rate"); configNewClientRate(config, clientId, "hf", "hf_rate_value", org, "min_hf_rate"); configNewClientRate(config, clientId, "Rpay", "Rpay_rate_value", org, "min_Rpay_rate"); + configNewClientRate(config, clientId, "Yeepay", "yeepay_rate_value", org, "min_yeepay_rate"); //todo 暂不更新Rpay+ 费率信息 rpayApi.modifySurchargeConfig(client); @@ -2995,6 +3032,17 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid clientModifySupport.processClientConfigModify(new PaypadVersionModify(manager, clientMoniker, paypad_version)); } + @Override + public void changePaymentSuccessPage(JSONObject manager, String clientMoniker, String paysuccess_version) { + JSONObject client = getClientInfoByMoniker(clientMoniker); + if (client == null) { + throw new InvalidShortIdException(); + } + checkOrgPermission(manager, client); + client.put("paysuccess_version", paysuccess_version); + clientMapper.update(client); + } + @Override public void changePaymentPage(JSONObject account, String paypad_version) { int clientId = account.getIntValue("client_id"); @@ -3572,6 +3620,20 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid return null; } + @Override + public List listYeepaySubMerchantIdApplys(JSONObject manager, String clientMoniker) { + JSONObject client = getClientInfoByMoniker(clientMoniker); + if (client == null) { + throw new InvalidShortIdException(); + } + checkOrgPermission(manager, client); + List applices = yeePayClientConfigMapper.findAllMerchantConfig(client.getInteger("client_id")); + if (!applices.isEmpty()) { + return applices; + } + return null; + } + @Override @CacheEvict(value = ":all_sub_merchant_id_applices:", key = "#clientMoniker") public String subMerchantApplication(String clientMoniker, SubMerchantIdApply subMerchantApply, JSONObject manager) { @@ -3635,6 +3697,39 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid } } + + @Override + @Transactional + public void subYeepayMerchantApplication(String clientMoniker, JSONObject merchantInfo, JSONObject manager) { + JSONObject client = getClientInfoByMoniker(clientMoniker); + if (client == null) { + throw new InvalidShortIdException(); + } + checkOrgPermission(manager, client); + List yeepayClientConfigs = yeePayClientConfigMapper.findAllMerchantConfig(client.getIntValue("client_id")); + if(yeepayClientConfigs!=null){ + for(JSONObject yeepayClientConfig:yeepayClientConfigs){ + if(yeepayClientConfig.getIntValue("is_valid")==1){ + yeePayClientConfigMapper.updateSubMerchantIdValid(yeepayClientConfig.getString("yeepay_config_id"),0); + } + } + } + merchantInfo.put("create_time",new Date()); + merchantInfo.put("operator",manager.getString("display_name")); + merchantInfo.put("client_id",client.getIntValue("client_id")); + merchantInfo.put("vouchers",merchantInfo.getJSONObject("vouchers").toJSONString()); + yeePayClientConfigMapper.saveMerchantConfig(merchantInfo); + JSONObject yeepayConfig = yeePayClientConfigMapper.findMerchantConfig(client.getIntValue("client_id")); + SubmerchantRegisterResult result = yeePayClient.registerMerchant(client,yeepayConfig); + if(result.getStatus().equals("FAILED")){ + throw new BadRequestException(result.getErrorMsg()); + } + yeepayConfig.put("sub_merchant_id",result.getSubMerchantId()); + yeePayClientConfigMapper.updateSubMerchantId(yeepayConfig.getString("yeepay_config_id"),result.getMerchantId(),result.getSubMerchantId()); + client.put("yeepay_sub_merchant_id",result.getSubMerchantId()); + clientMapper.update(client); + } + @Override public List listMerchantIds(String clientMoniker, JSONObject manager) { JSONObject client = getClientInfoByMoniker(clientMoniker); @@ -3878,6 +3973,30 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid } + @Override + public void switchGatewayLink(JSONObject manager, String clientMoniker,String channel, boolean allow) { + JSONObject client = getClientInfoByMoniker(clientMoniker); + if (client == null) { + throw new InvalidShortIdException(); + } + checkOrgPermission(manager, client); + + if (allow) { + if (StringUtils.isEmpty(client.getString(channel+"_pay_url"))) { + String channel_pay_url = getGatewayShortLink(clientMoniker,channel.toLowerCase()); + client.put(channel+"_pay_url", channel_pay_url); + JSONObject clientConfig = new JSONObject(); + clientConfig.put(channel+"_pay_url", channel_pay_url); + clientConfig.put("client_id", client.getIntValue("client_id")); + clientConfigMapper.update(clientConfig); + clientMapper.update(client); + } + } + clientModifySupport.processClientConfigModify(new SwitchPermissionModify(manager, clientMoniker, "enable_"+channel+"_link", allow)); + clientModifySupport.processClientConfigModify(new SwitchPermissionModify(manager, clientMoniker, "enable_"+channel, allow)); + + } + @Override public void sendHfEmailNotice(JSONObject order) { JSONObject client = clientMapper.findClient(order.getIntValue("client_id")); @@ -3917,6 +4036,55 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid }).start(); } + @Override + public void sendGatewayEmailNotice(JSONObject order) { + JSONObject client = clientMapper.findClient(order.getIntValue("client_id")); + JSONObject clientConfig = clientConfigMapper.find(order.getIntValue("client_id")); + if (client == null || clientConfig == null) { + return; + } + if (client.getString("contact_email") == null || + !clientConfig.getBoolean("enable_"+order.getString("channel").toLowerCase()+"_email_notice")) { + return; + } + Context ctx = new Context(); + ctx.setVariable("img_url", PlatformEnvironment.getEnv().concatUrl("/static/images/royalpay_logo.png")); + ctx.setVariable("name", client.getString("contact_person")); + ctx.setVariable("order_id", order.getString("order_id")); + ctx.setVariable("amount", order.getString("total_amount")); + ctx.setVariable("currency", order.getString("currency")); + ctx.setVariable("channel", getOrderChannel(order.getString("channel"))); + String create_time = ""; + if (client.getString("timezone") != null) { + create_time = DateFormatUtils.format(order.getDate("create_time"), + "yyyy-MM-dd HH:mm:ss", TimeZone.getTimeZone(client.getString("timezone"))); + } else { + create_time = DateFormatUtils.format(order.getDate("create_time"), "yyyy-MM-dd HH:mm:ss"); + } + ctx.setVariable("time", create_time); + final String content = thymeleaf.process( "mail/gateway_email_notice", ctx); + final String mailTo = client.getString("contact_email"); + if (StringUtils.isEmpty(mailTo)) { + throw new EmailException("Client Contact Email is invalid"); + } + new Thread(() -> { + try { + mailService.sendEmail("你刚刚有一笔到账信息", mailTo, "", content); + } catch (Exception ignored) { + logger.error("邮件发送失败", ignored); + } + }).start(); + } + + private String getOrderChannel(String channel){ + switch(channel){ + case "hf": + return "汇付"; + case "Yeepay": + return "易宝支付"; + } + return ""; + } @Override public void updateAllPartnerPassword(String clientMoniker, List emails) { JSONObject client = getClientInfoByMoniker(clientMoniker); @@ -3946,6 +4114,13 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid return api.registerShortUrl(longUrl); } + @Override + public String getGatewayShortLink(String clientMoniker, String channel) { + String longUrl = PlatformEnvironment.getEnv().concatUrl("/api/v1.0/"+channel+"/partners/" + clientMoniker + "/jump/pc"); + MpWechatApi api = mpWechatApiProvider.getNewPaymentApi(); + return api.registerShortUrl(longUrl); + } + private void isRiskyMerchant(JSONObject client, JSONObject bankAccount) { JSONObject needCheckParams = new JSONObject(); diff --git a/src/main/java/au/com/royalpay/payment/manage/merchants/web/PartnerManageController.java b/src/main/java/au/com/royalpay/payment/manage/merchants/web/PartnerManageController.java index 52d4c1681..7bb29b70d 100644 --- a/src/main/java/au/com/royalpay/payment/manage/merchants/web/PartnerManageController.java +++ b/src/main/java/au/com/royalpay/payment/manage/merchants/web/PartnerManageController.java @@ -178,6 +178,11 @@ public class PartnerManageController { clientManager.updateClientRpayPaymentConfig(manager, clientMoniker, rpaySubMerchantInfo); } + @ManagerMapping(value = "/{clientMoniker}/yeepay_payment_config", method = RequestMethod.PUT, role = {ManagerRole.OPERATOR, ManagerRole.BD_USER}) + public void updatePartnerYeepayPaymentConfig(@PathVariable String clientMoniker, @RequestBody JSONObject yeepaySubMerchantInfo, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) { + clientManager.updateClientYeepayPaymentConfig(manager, clientMoniker, yeepaySubMerchantInfo); + } + @ManagerMapping(value = "/{clientMoniker}/ali_sub_merchant_id", method = RequestMethod.PUT, role = {ManagerRole.OPERATOR}) public void updateAliSubMerchantId(@PathVariable String clientMoniker, @RequestBody JSONObject aliSubMerchantInfo, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) { clientManager.updateAliSubMerchantId(manager, clientMoniker, aliSubMerchantInfo); @@ -293,6 +298,11 @@ public class PartnerManageController { clientManager.changePaymentPage(manager, clientMoniker, pass.getString("paypad_version")); } + @ManagerMapping(value = "/{clientMoniker}/paysuccess_version", method = RequestMethod.PUT, role = {ManagerRole.OPERATOR, ManagerRole.BD_USER}) + public void changePaymentSuccessPage(@PathVariable String clientMoniker, @RequestBody JSONObject pass, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) { + clientManager.changePaymentSuccessPage(manager, clientMoniker, pass.getString("paysuccess_version")); + } + @ManagerMapping(value = "/{clientMoniker}/trade_logs", method = RequestMethod.GET, role = {ManagerRole.ADMIN, ManagerRole.BD_USER, ManagerRole.OPERATOR, ManagerRole.SERVANT, ManagerRole.DIRECTOR, ManagerRole.FINANCIAL_STAFF}) public JSONObject listPartnerTradeLogs(@PathVariable String clientMoniker, TradeLogQuery query, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) throws Exception { return tradeLogService.listPartnerTradeLogs(manager, null, clientMoniker, query, null); @@ -546,6 +556,11 @@ public class PartnerManageController { return clientManager.listRpaySubMerchantIdApplys(manager, clientMoniker); } + @ManagerMapping(value = "/{clientMoniker}/list_yeepay_sub_applices", method = RequestMethod.GET, role = {ManagerRole.OPERATOR, ManagerRole.ADMIN}) + public List listYeepaySubMerchantIdApplys(@PathVariable String clientMoniker, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) { + return clientManager.listYeepaySubMerchantIdApplys(manager, clientMoniker); + } + @ManagerMapping(value = "/{clientMoniker}/sub_apply", method = RequestMethod.POST, role = {ManagerRole.OPERATOR, ManagerRole.ADMIN}) public String subMerchantApplication(@PathVariable String clientMoniker, @RequestBody SubMerchantIdApply subMerchantIdApply, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) { return clientManager.subMerchantApplication(clientMoniker,subMerchantIdApply,manager); @@ -580,11 +595,26 @@ public class PartnerManageController { clientManager.switchPermission(manager, clientMoniker, "enable_hf_email_notice", pass.getBooleanValue("allow")); } + @ManagerMapping(value = "/{clientMoniker}/{channel}", method = RequestMethod.PUT, role = {ManagerRole.ADMIN, ManagerRole.OPERATOR}) + public void switchGateWayLinkPermission(@PathVariable String clientMoniker, @PathVariable String channel,@RequestBody JSONObject pass, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) { + clientManager.switchGatewayLink(manager, clientMoniker, channel,pass.getBooleanValue("allow")); + } + + @ManagerMapping(value = "/{clientMoniker}/{channel}/email_notice", method = RequestMethod.PUT, role = {ManagerRole.OPERATOR, ManagerRole.BD_USER}) + public void switchGatewayEmailNotice(@PathVariable String clientMoniker, @PathVariable String channel,@RequestBody JSONObject pass, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) { + clientManager.switchPermission(manager, clientMoniker,"enable_"+channel+"_email_notice", pass.getBooleanValue("allow")); + } + @ManagerMapping(value = "/{clientMoniker}/registRpaySubMerchantId", method = RequestMethod.POST, role = {ManagerRole.OPERATOR, ManagerRole.ADMIN}) public void subRpayMerchantApplication(@PathVariable String clientMoniker,@RequestBody JSONObject merchantInfo,@ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) { clientManager.subRpayMerchantApplication(clientMoniker, merchantInfo,manager); } + @ManagerMapping(value = "/{clientMoniker}/registYeepaySubMerchantId", method = RequestMethod.POST, role = {ManagerRole.OPERATOR, ManagerRole.ADMIN}) + public void subYeepayMerchantApplication(@PathVariable String clientMoniker,@RequestBody JSONObject merchantInfo,@ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) { + clientManager.subYeepayMerchantApplication(clientMoniker, merchantInfo,manager); + } + @RequestMapping(value = "/compliance", method = RequestMethod.GET) @RequireManager(role = { ManagerRole.OPERATOR}) public JSONObject lisPartnersByCompliance(@ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager, PartnerQuery query) { diff --git a/src/main/java/au/com/royalpay/payment/manage/organizations/beans/OrgInfo.java b/src/main/java/au/com/royalpay/payment/manage/organizations/beans/OrgInfo.java index 47269e2c8..772911b27 100644 --- a/src/main/java/au/com/royalpay/payment/manage/organizations/beans/OrgInfo.java +++ b/src/main/java/au/com/royalpay/payment/manage/organizations/beans/OrgInfo.java @@ -29,6 +29,7 @@ public class OrgInfo { private Double alipayonline_rate_value; private Double jd_rate_value; private Double hf_rate_value; + private Double yeepay_rate_value; private int is_valid; private String search_text; private int page = 1; @@ -42,6 +43,7 @@ public class OrgInfo { private Double min_jd_rate; private Double min_alipayonline_rate; private Double min_hf_rate; + private Double min_yeepay_rate; private String state; private String senior_parent_org_id; @@ -323,4 +325,20 @@ public class OrgInfo { public void setSenior_parent_org_id(String senior_parent_org_id) { this.senior_parent_org_id = senior_parent_org_id; } + + public Double getYeepay_rate_value() { + return yeepay_rate_value; + } + + public void setYeepay_rate_value(Double yeepay_rate_value) { + this.yeepay_rate_value = yeepay_rate_value; + } + + public Double getMin_yeepay_rate() { + return min_yeepay_rate; + } + + public void setMin_yeepay_rate(Double min_yeepay_rate) { + this.min_yeepay_rate = min_yeepay_rate; + } } diff --git a/src/main/java/au/com/royalpay/payment/manage/organizations/core/impls/OrgManagerImpl.java b/src/main/java/au/com/royalpay/payment/manage/organizations/core/impls/OrgManagerImpl.java index 9e126ffd5..243bd6083 100644 --- a/src/main/java/au/com/royalpay/payment/manage/organizations/core/impls/OrgManagerImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/organizations/core/impls/OrgManagerImpl.java @@ -233,7 +233,7 @@ public class OrgManagerImpl implements OrgManager { JSONArray rate1 = new JSONArray(); JSONArray rate2 = new JSONArray(); if(orgObject.getString("commission_type").equals(json.getString("commission_type"))){ - String[] rates = new String[]{"alipay_rate_value","wechat_rate_value","bestpay_rate_value","alipayonline_rate_value","jd_rate_value"}; + String[] rates = new String[]{"alipay_rate_value","wechat_rate_value","bestpay_rate_value","alipayonline_rate_value","jd_rate_value","yeepay_rate_value"}; for (String rateName: rates ){ if(StringUtils.isEmpty(orgObject.getString(rateName))){ rate1.add(rateName); diff --git a/src/main/java/au/com/royalpay/payment/manage/risk/bean/QueryBlackListCustomer.java b/src/main/java/au/com/royalpay/payment/manage/risk/bean/QueryBlackListCustomer.java new file mode 100644 index 000000000..fd3de0de7 --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/risk/bean/QueryBlackListCustomer.java @@ -0,0 +1,46 @@ +package au.com.royalpay.payment.manage.risk.bean; + +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.lang3.StringUtils; + +public class QueryBlackListCustomer { + private String openid; + + private int page = 1; + private int limit = 10; + + + + public JSONObject toParams() { + JSONObject params = new JSONObject(); + if(StringUtils.isNotEmpty(openid)){ + params.put("openid", this.openid); + } + params.put("is_valid", 1); + return params; + } + + public String getOpenid() { + return openid; + } + + public void setOpenid(String openid) { + this.openid = openid; + } + + public int getPage() { + return page; + } + + public void setPage(int page) { + this.page = page; + } + + public int getLimit() { + return limit; + } + + public void setLimit(int limit) { + this.limit = limit; + } +} diff --git a/src/main/java/au/com/royalpay/payment/manage/risk/core/RiskMerchantService.java b/src/main/java/au/com/royalpay/payment/manage/risk/core/RiskMerchantService.java index 3dc5eb074..d0eb061ad 100644 --- a/src/main/java/au/com/royalpay/payment/manage/risk/core/RiskMerchantService.java +++ b/src/main/java/au/com/royalpay/payment/manage/risk/core/RiskMerchantService.java @@ -33,4 +33,12 @@ public interface RiskMerchantService { void addAttentionMerchant(JSONObject manager, String clientMoniker, JSONObject params); void disableAttentionMerchant(JSONObject manager, String clientMoniker); + + JSONObject customerBlackList(JSONObject manager, QueryBlackListCustomer queryBlackListCustomer); + + void disableBlackListCustomer(JSONObject manager, String openid); + + void updateAttentionMerchant(JSONObject manager, String clientMoniker, JSONObject attention); + + void addBlackListCustomer(JSONObject manager, String openid, String remark); } diff --git a/src/main/java/au/com/royalpay/payment/manage/risk/core/impl/RiskMerchantServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/risk/core/impl/RiskMerchantServiceImpl.java index 4b6dd5e6d..f7655bfd9 100644 --- a/src/main/java/au/com/royalpay/payment/manage/risk/core/impl/RiskMerchantServiceImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/risk/core/impl/RiskMerchantServiceImpl.java @@ -2,6 +2,8 @@ package au.com.royalpay.payment.manage.risk.core.impl; import au.com.royalpay.payment.manage.mappers.risk.*; import au.com.royalpay.payment.manage.mappers.system.ClientBankAccountMapper; +import au.com.royalpay.payment.manage.mappers.system.CustomerMapper; +import au.com.royalpay.payment.manage.mappers.system.ManagerCustomerRelationAlipayMapper; import au.com.royalpay.payment.manage.merchants.core.ClientManager; import au.com.royalpay.payment.manage.risk.bean.*; import au.com.royalpay.payment.manage.risk.core.RiskMerchantService; @@ -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.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -39,6 +42,12 @@ public class RiskMerchantServiceImpl implements RiskMerchantService { private RiskAttentionMerchantsMapper riskAttentionMerchantsAMapper; @Resource private ClientBankAccountMapper clientBankAccountMapper; + @Resource + private RiskCustomerBlackListMapper riskCustomerBlackListMapper; + @Resource + private CustomerMapper customerMapper; + @Resource + private ManagerCustomerRelationAlipayMapper managerCustomerRelationAlipayMapper; @Override @Transactional @@ -243,6 +252,11 @@ public class RiskMerchantServiceImpl implements RiskMerchantService { attention.put("contact_phone", client.getString("contact_phone")); attention.put("bank_account_no", bankAccount == null || bankAccount.size() <= 0 ? "" : bankAccount.get(0).getString("account_no")); attention.put("is_valid", 1); + attention.put("enjoin_wechat", params.getBoolean("enjoin_wechat")== null ? true : params.getBoolean("enjoin_wechat")); + attention.put("enjoin_alipay", params.getBoolean("enjoin_alipay")== null ? true : params.getBoolean("enjoin_alipay")); + attention.put("enjoin_bestpay", params.getBoolean("enjoin_bestpay")== null ? true : params.getBoolean("enjoin_bestpay")); + attention.put("enjoin_jd", params.getBoolean("enjoin_jd")== null ? true : params.getBoolean("enjoin_jd")); + attention.put("enjoin_hf", params.getBoolean("enjoin_hf")== null ? true : params.getBoolean("enjoin_hf")); attention.put("creation_date", params.getDate("creation_date")==null ? new Date() : params.getDate("creation_date")); attention.put("creation_by", manager.getString("manager_id")); attention.put("remark", params.getString("remark")); @@ -276,4 +290,82 @@ public class RiskMerchantServiceImpl implements RiskMerchantService { attentionMerchant.put("last_update_by", manager.getString("manager_id")); riskAttentionMerchantsAMapper.update(attentionMerchant); } + + @Override + public JSONObject customerBlackList(JSONObject manager, QueryBlackListCustomer queryBlackListCustomer) { + JSONObject params = queryBlackListCustomer.toParams(); + if (manager == null) { + throw new BadRequestException("登录状态已过期,请清新登录再试"); + } + PageList customerList = riskCustomerBlackListMapper.query(params, new PageBounds(queryBlackListCustomer.getPage(), queryBlackListCustomer.getLimit())); + JSONObject customer = new JSONObject(); + JSONObject customerAlipay = new JSONObject(); + for(JSONObject cus : customerList ){ + if (cus.getString("openid").startsWith("olH")) { + customer = customerMapper.findCustomerGlobalpayByOpenId(cus.getString("openid")); + } else { + customer = customerMapper.findCustomerByOpenId(cus.getString("openid")); + } + if (customer != null && !customer.isEmpty()) { + cus.put("headimg", customer.getString("headimg")); + cus.put("nickname", customer.getString("nickname")); + continue; + } + customerAlipay = managerCustomerRelationAlipayMapper.findCustomerByUserId(cus.getString("openid")); + if (customerAlipay != null) { + cus.put("headimg", customerAlipay.getString("headimg")); + cus.put("nickname", customerAlipay.getString("nickname")); + } + } + return PageListUtils.buildPageListResult(customerList); + } + + @Override + public void disableBlackListCustomer(JSONObject manager, String openid) { + if (manager == null) { + throw new BadRequestException("登录状态已过期,请清新登录再试"); + } + JSONObject customerBlackList = riskCustomerBlackListMapper.findByOpenid(openid); + if (customerBlackList == null) { + throw new BadRequestException("The customer does not exist"); + } + customerBlackList.put("is_valid", 0); + customerBlackList.put("last_update_date", new Date()); + customerBlackList.put("last_update_by", manager.getString("manager_id")); + riskCustomerBlackListMapper.update(customerBlackList); + } + + @Override + public void updateAttentionMerchant(JSONObject manager, String clientMoniker, JSONObject attention) { + if (manager == null) { + throw new BadRequestException("登录状态已过期,请清新登录再试"); + } + JSONObject attentionMerchant = riskAttentionMerchantsAMapper.findByClientMoniker(clientMoniker); + if (attentionMerchant == null) { + throw new BadRequestException("The client does not exist"); + } + attentionMerchant.put("enjoin_wechat", attention.getBoolean("enjoin_wechat")); + attentionMerchant.put("enjoin_alipay", attention.getBoolean("enjoin_alipay")); + attentionMerchant.put("enjoin_bestpay", attention.getBoolean("enjoin_bestpay")); + attentionMerchant.put("enjoin_jd", attention.getBoolean("enjoin_jd")); + attentionMerchant.put("enjoin_hf", attention.getBoolean("enjoin_hf")); + attentionMerchant.put("last_update_date", new Date()); + attentionMerchant.put("last_update_by", manager.getString("manager_id")); + riskAttentionMerchantsAMapper.update(attentionMerchant); + } + + @Override + public void addBlackListCustomer(JSONObject manager, String openid, String remark) { + if (manager == null) { + throw new BadRequestException("登录状态已过期,请清新登录再试"); + } + JSONObject customer = new JSONObject(); + customer.put("openid", openid); + customer.put("remark", remark); + customer.put("creation_date", new Date()); + customer.put("creation_by", manager.getString("manager_id")); + customer.put("last_update_date", new Date()); + customer.put("last_update_by", manager.getString("manager_id")); + riskCustomerBlackListMapper.save(customer); + } } diff --git a/src/main/java/au/com/royalpay/payment/manage/risk/web/RiskController.java b/src/main/java/au/com/royalpay/payment/manage/risk/web/RiskController.java index b1ffbff18..d306186cd 100644 --- a/src/main/java/au/com/royalpay/payment/manage/risk/web/RiskController.java +++ b/src/main/java/au/com/royalpay/payment/manage/risk/web/RiskController.java @@ -8,12 +8,7 @@ import au.com.royalpay.payment.tools.permission.enums.ManagerRole; import com.alibaba.fastjson.JSONObject; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @@ -104,4 +99,24 @@ public class RiskController { public void disableRiskMerchant(@ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager, @PathVariable String clientMoniker) { riskMerchantService.disableAttentionMerchant(manager, clientMoniker); } + + @ManagerMapping(value = "/customer/blacklist", role = ManagerRole.RISK_MANAGER, method = RequestMethod.GET) + public JSONObject blackListCustomer(@ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager, QueryBlackListCustomer queryBlackListCustomer) { + return riskMerchantService.customerBlackList(manager, queryBlackListCustomer); + } + + @ManagerMapping(value = "/customer/blacklist/{openid}", role = ManagerRole.RISK_MANAGER, method = RequestMethod.PUT) + public void disableRiskCustomer(@ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager, @PathVariable String openid) { + riskMerchantService.disableBlackListCustomer(manager, openid); + } + + @ManagerMapping(value = "/attention/{clientMoniker}/detail", role = ManagerRole.RISK_MANAGER, method = RequestMethod.PUT) + public void updateRiskMerchant(@ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager, @PathVariable String clientMoniker, @RequestBody JSONObject attention) { + riskMerchantService.updateAttentionMerchant(manager, clientMoniker, attention); + } + + @ManagerMapping(value = "/customer/{openid}/blacklist", role = ManagerRole.RISK_MANAGER, method = RequestMethod.POST) + public void saveRiskCustomer(@ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager, @PathVariable String openid, @RequestBody JSONObject remark) { + riskMerchantService.addBlackListCustomer(manager, openid, remark.getString("remark")); + } } diff --git a/src/main/java/au/com/royalpay/payment/manage/support/attachment/web/AttachmentController.java b/src/main/java/au/com/royalpay/payment/manage/support/attachment/web/AttachmentController.java index bccc665f9..9382f9e1d 100644 --- a/src/main/java/au/com/royalpay/payment/manage/support/attachment/web/AttachmentController.java +++ b/src/main/java/au/com/royalpay/payment/manage/support/attachment/web/AttachmentController.java @@ -1,9 +1,11 @@ package au.com.royalpay.payment.manage.support.attachment.web; +import au.com.royalpay.payment.channels.yeepay.runtime.YeePayClient; import au.com.royalpay.payment.manage.permission.manager.RequireManager; import au.com.royalpay.payment.manage.permission.manager.RequirePartner; import au.com.royalpay.payment.tools.connections.attachment.core.AttachmentClient; import com.alibaba.fastjson.JSONObject; +import com.yeepay.yop.sdk.service.kj.model.FileUploadResult; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @@ -20,6 +22,8 @@ import java.io.IOException; public class AttachmentController { @Resource private AttachmentClient attachmentClient; + @Resource + private YeePayClient yeePayClient; @RequestMapping(value = "/files", method = RequestMethod.POST) @RequirePartner @@ -27,6 +31,14 @@ public class AttachmentController { public JSONObject uploadImage(@RequestParam MultipartFile file) throws IOException { return attachmentClient.uploadFile(file,false); } + + @RequestMapping(value = "/yeepayFiles", method = RequestMethod.POST) + @RequirePartner + @RequireManager + public FileUploadResult uploadYeepayImage(@RequestParam MultipartFile file) throws IOException { + return yeePayClient.uploadFile(file.getOriginalFilename(),"VOUCHER",file.getInputStream()); + } + @RequestMapping(value = "/riskFiles", method = RequestMethod.POST) public JSONObject uploadRiskImage(@RequestParam MultipartFile file) throws IOException { return attachmentClient.uploadFile(file,false); diff --git a/src/main/java/au/com/royalpay/payment/manage/task/CustomerImpressionTask.java b/src/main/java/au/com/royalpay/payment/manage/task/CustomerImpressionTask.java index 265908393..f4b7c7e74 100644 --- a/src/main/java/au/com/royalpay/payment/manage/task/CustomerImpressionTask.java +++ b/src/main/java/au/com/royalpay/payment/manage/task/CustomerImpressionTask.java @@ -48,7 +48,7 @@ public class CustomerImpressionTask { } for (List splitClients : splitList) { Runnable task = () -> splitClients.forEach((p) -> { - System.out.println("当前执行到" + p.getIntValue("client_id")); +// System.out.println("当前执行到" + p.getIntValue("client_id")); customerImpressionService.generateTag(p.getIntValue("client_id")); }); generatePool.execute(task); @@ -56,8 +56,8 @@ public class CustomerImpressionTask { }); } - @Scheduled(cron = "0/1 * * * * ?") - public void customerImpressionGenerateInfo() { - synchronizedScheduler.executeProcess("manage_task:CustomerImpression", 1_000, () -> customerImpressionService.generateInfo()); - } +// @Scheduled(cron = "0/1 * * * * ?") +// public void customerImpressionGenerateInfo() { +// synchronizedScheduler.executeProcess("manage_task:CustomerImpression", 1_000, () -> customerImpressionService.generateInfo()); +// } } diff --git a/src/main/java/au/com/royalpay/payment/manage/task/UpdatePartnerPasswordTask.java b/src/main/java/au/com/royalpay/payment/manage/task/UpdatePartnerPasswordTask.java index 5c7152c06..c063e1e95 100644 --- a/src/main/java/au/com/royalpay/payment/manage/task/UpdatePartnerPasswordTask.java +++ b/src/main/java/au/com/royalpay/payment/manage/task/UpdatePartnerPasswordTask.java @@ -15,7 +15,7 @@ import java.util.Arrays; import java.util.List; @Component -@ConditionalOnProperty(value = "app.run-tasks", havingValue = "false") +@ConditionalOnProperty(value = "app.run-tasks", havingValue = "true") public class UpdatePartnerPasswordTask { private Logger logger = LoggerFactory.getLogger(getClass()); @Resource diff --git a/src/main/java/au/com/royalpay/payment/manage/tradelog/core/impls/TradeLogServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/tradelog/core/impls/TradeLogServiceImpl.java index 6e57d28d5..64eff18d1 100644 --- a/src/main/java/au/com/royalpay/payment/manage/tradelog/core/impls/TradeLogServiceImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/tradelog/core/impls/TradeLogServiceImpl.java @@ -20,6 +20,7 @@ import au.com.royalpay.payment.manage.mappers.payment.RefundAuditionMapper; import au.com.royalpay.payment.manage.mappers.payment.RefundMapper; import au.com.royalpay.payment.manage.mappers.payment.TransactionMapper; import au.com.royalpay.payment.manage.mappers.system.ClientAccountMapper; +import au.com.royalpay.payment.manage.mappers.system.ClientDeviceMapper; import au.com.royalpay.payment.manage.mappers.system.CustomerMapper; import au.com.royalpay.payment.manage.mappers.system.ManagerCustomerRelationAlipayMapper; import au.com.royalpay.payment.manage.merchants.core.ClientManager; @@ -139,6 +140,9 @@ public class TradeLogServiceImpl implements TradeLogService { @Resource private OrgManager orgManager; + @Resource + private ClientDeviceMapper clientDeviceMapper; + // @Value("classpath:/jasper/trans_flow.jasper") // @Value("classpath:/jasper/trans_flow_new.jasper") @Value("classpath:/jasper/partner_invoice_gst.jasper") @@ -670,6 +674,24 @@ public class TradeLogServiceImpl implements TradeLogService { if (transFlow.getJSONArray("data").size() > 0) { try { List dataList = (List) transFlow.get("data"); + String transType; + JSONObject device; + int status; + for (JSONObject data : dataList) { + transType = data.getString("trans_type"); + if (!"refund".equals(transType)) + continue; + status = data.getIntValue("status"); + if (status == 6) + transType = "Partly " + transType; + else if (status == 7) { + transType = "Fully " + transType; + } + data.put("trans_type", transType); + device = clientDeviceMapper.find(data.getString("order_dev_id")); + if (device != null) + data.put("dev_id", device.getString("client_dev_id")); + } JSONObject parmerters = new JSONObject(); parmerters.put("dateFrom", StringUtils.isNotBlank(query.getDatefrom()) ? query.getDatefrom() : ""); parmerters.put("dateTo", StringUtils.isNotBlank(query.getDateto()) ? query.getDateto() : DateFormatUtils.format(new Date(), "yyyyMMdd")); diff --git a/src/main/resources/application-dev.properties b/src/main/resources/application-dev.properties index 51ea1ca57..277abb93f 100644 --- a/src/main/resources/application-dev.properties +++ b/src/main/resources/application-dev.properties @@ -3,4 +3,4 @@ spring.datasource.schema-name=royalpay_production spring.datasource.host=192.168.0.111:3306 spring.datasource.url=jdbc:mysql://${spring.datasource.host}/${spring.datasource.schema-name}?useUnicode=true&characterEncoding=utf8&useSSL=false spring.datasource.username=root -spring.datasource.password=root \ No newline at end of file +spring.datasource.password=root diff --git a/src/main/resources/application-yeepay.properties b/src/main/resources/application-yeepay.properties new file mode 100644 index 000000000..badb2632e --- /dev/null +++ b/src/main/resources/application-yeepay.properties @@ -0,0 +1,15 @@ +app.yeepay.merchant-id= +app.yeepay.app-key=cbp_120180219 +app.yeepay.aes-secret-key= +app.yeepay.public-key.store-type=string +app.yeepay.public-key.cert-type=RSA2048 +app.yeepay.public-key.value=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6p0XWjscY+gsyqKRhw9MeLsEmhFdBRhT2emOck/F1Omw38ZWhJxh9kDfs5HzFJMrVozgU+SJFDONxs8UB0wMILKRmqfLcfClG9MyCNuJkkfm0HFQv1hRGdOvZPXj3Bckuwa7FrEXBRYUhK7vJ40afumspthmse6bs6mZxNn/mALZ2X07uznOrrc2rk41Y2HftduxZw6T4EmtWuN2x4CZ8gwSyPAW5ZzZJLQ6tZDojBK4GZTAGhnn3bg5bBsBlw2+FLkCQBuDsJVsFPiGh/b6K/+zGTvWyUcu+LUj2MejYQELDO3i2vQXVDk7lVi2/TcUYefvIcssnzsfCfjaorxsuwIDAQAB +app.yeepay.public-key.password= +app.yeepay.private-key.store-type=string +app.yeepay.private-key.cert-type=RSA2048 +app.yeepay.private-key.value=MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCdaxJm3b5bvPZHvvXDfJ4NUiG7yISRYgUfiQycVKCJZ2jL+Y29Hmcnc1hPMZjVbJYPkhaIp+f92j7qf5P/qo+Ru4DyY3HhzsJAZMMWVlWeaEG+nZsyN06XC7NiUrFMLUAyqtaYRPDBKHKss54at16rQO7UoqXVqhKZyWdBgRbX0J3X0z82LEh11u8Izi/mUH42NY6ttkDsxBzXeNcT81RHrm9A/R/6AzzykFAPxGVdjjmbYnrk/WUwLDaKdf1RvDF/kWSCmbzQSX/D24UcDekd50TJHaqhjvBVFwLtiFWAO7xudEDhByfj22YOZuhuddyhJygkUI996IKtl+UFIfI1AgMBAAECggEATWTgBj0NIxNTTlDfib4SAuCXfziFnOjBNhDuZ0ngJ830oxxNiGaTNr0p9L2gs4WQfZVIiOVsVM1hU29n9zIHJhI2wnUL/4Xk0T35AFlv/NKrSCk6rUSt2etBxZx8WMSCpKaDnRd/+qeFQc2JdP8khzQEd/yDZfoY7Q0tO/JYpb++XMFYBRpLINYwH8xteTAeRGp1A5+UwvPMJelNeBlPqMqTAPruh/yLUvYg1/rJjkOUi0yOUyKhs+NJDOXdBcrSXswdJyMMITYQ9dhpWFz4/imklHDKk29+Oy5uEGB1OQvTW469Cm2b2suAyvI4oE1pAFb6dGz6uE9fwzJljM1+IQKBgQDshMwyOC3BmXOo54o92cUwYR0TJg0KHQAbJLirQxlX4ILUGxxEFsv2TdVzushYS/1K8zecz9VQnch19mo+qyxfdq/FNXe1DDXolnu2AoYVvqpeCXumjmz4v2dlBW2TTFvmUpy0QK2QImgBW1/sjI88OgiJHdyqaqR0ASMLB1mGWQKBgQCqYl82MSqUqRl2yTiW+h9lymlgXWl5qFx/J3YGMURz3Xq5qzK4swEYfHfmkofNNpTXwIbDjGGq/ipZZLmyLfS68PRnquJEwCyFX3cgXUKg8380nDPdUQxsLpvMupUuKjyNhN4twpy2A/Ti53UC7vx5J+Z/mVjE3QgaURIAEBSHPQKBgQCOI0x3za0p0KdiVSuN+gZ4CZSoglCJyF3c8heMzLk5R3I4N8an4K9YaPQjJZfrAFfLKBk+wuPmG7xxr9Gvsbzr7e657GTxR9JJ4c2c1y1vefL2qmpF8QfqAVUIr9dnExeTdgg4hzoHCbZJQnmGNf6KajHg/TI0s/v6vwgpQ5R4mQKBgDI3Kd574RPNPp7+sPn2H5jNbf8jqLldQF2NUMCEdqs7RDdCWIGM6C7CSEghOXrmsjlgGZe6YPKXU/3irMPxvWX3K+D9wRAIH1bzitV0BvYOrZfgzXxVrbaYifxtpRflBNGkriKIb81JHzxcgOTrcGd4tfs3Q61Jg2DWMdro4lP1AoGBAOJ8JLkbrODRvHp9fCy9cOiF0LD/fZBW49l6xQbx7lLtzbwa/nk672hFhzfy565j4ejywykVIOWmoMS5RqWXB07rbyF0OZrfEcLPArfXZ4iE6T9OZ2UJLK0gdUWz4oYWBRK7NQd5qEMOiUFy8YOGgT+dESVYwN2irwLikuET0S9a +app.yeepay.private-key.password= +app.yeepay.http-client.connect-timeout=30000 +app.yeepay.http-client.read-timeout=30000 +app.yeepay.http-client.max-conn-total=200 +app.yeepay.http-client.max-conn-per-route=0 diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index f1575e412..5be79cb73 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,6 +1,6 @@ server.port=5000 -spring.profiles.active=dev,alipay,bestpay,jd,wechat,rpay +spring.profiles.active=dev,alipay,bestpay,jd,wechat,rpay,yeepay env.company=RoyalPay @@ -56,7 +56,7 @@ app.agreetemplate.classic.path=https://file.royalpay.com.au/open/2017/07/10/1499 #app.agreetemplate.aggregate.path=https://file.royalpay.com.au/open/2017/11/10/1510280089107_D7CMUz4S1iwBI9IPj5P6ItkiGClmPK.pdf app.agreetemplate.aggregate.path=https://file.royalpay.com.au/open/2017/11/17/1510890355946_hQt6yGc0NJ8TYeK7XCuuSAnTI31M7v.pdf -app.host.main=https://mpay.royalpay.com.au/ +app.host.main=http://192.168.0.85:9002/ app.host.regions.cn=https://mpay-cn.royalpay.com.au/ app.host.regions.au=https://mpay-au.royalpay.com.au/ app.debug=true @@ -88,6 +88,7 @@ app.mail.host=https://mailsupport.royalpay.com.au mail.send.credentialCode=Fd1aRfdjc9 apple.message.apns.password=F1b5*ChJPp73 +apple.message.apns.file=/opt/adn android.message.secret=2b96d9bc6169c9554218aab1 android.message.appkey=3f33a10d0a7d4ac94d8f2431 @@ -131,4 +132,4 @@ settle.abafile.bank.ANZ.bank=ANZ settle.abafile.bank.ANZ.apca=514624 settle.abafile.bank.ANZ.bsb=013006 settle.abafile.bank.ANZ.account-no=837022519 -settle.abafile.bank.ANZ.account-name=Tunnel Show Pty Ltd \ No newline at end of file +settle.abafile.bank.ANZ.account-name=Tunnel Show Pty Ltd diff --git a/src/main/resources/au/com/royalpay/payment/manage/analysis/mappers/CustomerAndOrdersStatisticsMapper.xml b/src/main/resources/au/com/royalpay/payment/manage/analysis/mappers/CustomerAndOrdersStatisticsMapper.xml index 253dcc017..e5b705835 100644 --- a/src/main/resources/au/com/royalpay/payment/manage/analysis/mappers/CustomerAndOrdersStatisticsMapper.xml +++ b/src/main/resources/au/com/royalpay/payment/manage/analysis/mappers/CustomerAndOrdersStatisticsMapper.xml @@ -318,7 +318,9 @@ ifnull(sum(CASE WHEN s.channel = 'hf' THEN s.total ELSE 0 END),0) hfamount, ifnull(sum(CASE WHEN s.channel = 'hf' THEN s.orders ELSE 0 END),0) hf_order_count, ifnull(sum(CASE WHEN s.channel = 'Rpay' THEN s.total ELSE 0 END),0) rpayamount, - ifnull(sum(CASE WHEN s.channel = 'Rpay' THEN s.orders ELSE 0 END),0) rpay_order_count + ifnull(sum(CASE WHEN s.channel = 'Rpay' THEN s.orders ELSE 0 END),0) rpay_order_count, + ifnull(sum(CASE WHEN s.channel = 'Yeepay' THEN s.total ELSE 0 END),0) yeepayamount, + ifnull(sum(CASE WHEN s.channel = 'Yeepay' THEN s.orders ELSE 0 END),0) yeepay_order_count FROM statistics_customer_order s LEFT JOIN sys_clients c ON c.client_id = s.client_id and c.is_valid=1 ]]> @@ -564,4 +566,4 @@ - \ No newline at end of file + diff --git a/src/main/resources/au/com/royalpay/payment/manage/analysis/mappers/TransactionAnalysisMapper.xml b/src/main/resources/au/com/royalpay/payment/manage/analysis/mappers/TransactionAnalysisMapper.xml index 97632f2cf..4d2ce0961 100644 --- a/src/main/resources/au/com/royalpay/payment/manage/analysis/mappers/TransactionAnalysisMapper.xml +++ b/src/main/resources/au/com/royalpay/payment/manage/analysis/mappers/TransactionAnalysisMapper.xml @@ -35,6 +35,29 @@ + + + SELECT t.*, + o.status, + o.dev_id order_dev_id, ifnull(o.client_order_id,'--') client_order_id, if(t.channel='Settlement','clearing', if(t.transaction_type='Credit','payment','refund')) trans_type, @@ -844,7 +846,8 @@ select sum(if(temp.transaction_type='Credit',temp.clearing_amount*d.proportion, o.gateway, r.out_refund_id, r.client_refund_id, - o.order_detail + o.order_detail, + o.dev_id FROM pmt_transactions t LEFT JOIN pmt_orders o ON o.order_id = t.order_id LEFT JOIN pmt_refunds r ON r.refund_id = t.refund_id diff --git a/src/main/resources/jasper/trans_excel.jasper b/src/main/resources/jasper/trans_excel.jasper index ddf12f23f..4a5fa401f 100644 Binary files a/src/main/resources/jasper/trans_excel.jasper and b/src/main/resources/jasper/trans_excel.jasper differ diff --git a/src/main/resources/templates/mail/gateway_email_notice.html b/src/main/resources/templates/mail/gateway_email_notice.html new file mode 100644 index 000000000..e2bbfbff9 --- /dev/null +++ b/src/main/resources/templates/mail/gateway_email_notice.html @@ -0,0 +1,32 @@ + + + + + + +
+
+
+ +
+
+

您好,

+

您有一笔收款信息如下:

+
+

RoyalPay到账提醒:

+
    +
  • 支付渠道:
  • +
  • 订单编号:
  • +
  • 收款金额: 
  • +
  • 到账时间:
  • +
+
+ 此致
+ RoyalPay +
+
+ +
+ + + diff --git a/src/main/resources/templates/success_new_v2.html b/src/main/resources/templates/success_new_v2.html new file mode 100644 index 000000000..e1ffeeccd --- /dev/null +++ b/src/main/resources/templates/success_new_v2.html @@ -0,0 +1,153 @@ + + + + + + + + + + + + + Pay Successful + Payment Failed + Order Closed + Not Pay + + + + + + + + + + +
+

+ + 支付成功 +

+ 支付失败 + 已关闭 + 未支付 + +
+
+
+
+
商户:
+
${client.short_name}
+
+
+
支付金额:
+
+
+
+
输入金额:
+
+
+
+
手续费:
+
+
+
+
汇率:
+
${order.exchange_rate}
+
+
+
时间:
+
+
+
+
单号:
+
+
+
+
流水号:
+
+
+
+
备注:
+
+
+
+
+ + + +
+
+
+
+
+ + + +
+ +
+
+
+
+
+
+
+
恭喜您!获得一笔鼓励金
+
活动期间任意消费满10澳币,获取随机鼓励金
+
+
0.00
+
点击翻倍
+
+
+
+
+
X 1
+ 查看累积金额 +
+
+
+
+
+
+
+
+
+
+
恭喜您!获得积分奖励
+
使用RoyalPay任意消费满10澳币,获取相应积分
+
+ +
+
+
+
+
+20积分
+ 查看累积积分 +
+
+
+
+ + \ No newline at end of file diff --git a/src/main/ui/manage.html b/src/main/ui/manage.html index d139c4903..bf9ba0fb7 100644 --- a/src/main/ui/manage.html +++ b/src/main/ui/manage.html @@ -414,6 +414,11 @@ margin-bottom: 10%;"/> 黑名单|Risky Merchants +
  • + + 消费者黑名单|Risky Customer + +
  • 消费排名|Risky Merchants diff --git a/src/main/ui/search_locations.html b/src/main/ui/search_locations.html new file mode 100644 index 000000000..f1263731a --- /dev/null +++ b/src/main/ui/search_locations.html @@ -0,0 +1,163 @@ + + + + Merchant Locations + + + + + + + +
    + + + + + + + \ No newline at end of file diff --git a/src/main/ui/static/analysis/channels_analysis.js b/src/main/ui/static/analysis/channels_analysis.js index c9153a7db..2ebcd186f 100644 --- a/src/main/ui/static/analysis/channels_analysis.js +++ b/src/main/ui/static/analysis/channels_analysis.js @@ -158,7 +158,7 @@ define(['angular', 'static/commons/commons', 'static/commons/angular-ueditor', ' trigger: 'axis' }, legend: { - data: ['Alipay交易金额','AlipayOnline交易金额', 'Bestpay交易金额','Wechat交易金额',"JD Pay交易金额","HF Pay交易金额"], + data: ['Alipay交易金额','AlipayOnline交易金额', 'Bestpay交易金额','Wechat交易金额',"JD Pay交易金额","HF Pay交易金额","Yeepay交易金额"], bottom: 0, height: '15%', width: '80%', @@ -170,7 +170,7 @@ define(['angular', 'static/commons/commons', 'static/commons/angular-ueditor', ' type: 'value' } ], - color: ['#00a0e9','#00a0e9','#FF2D96','#09bb07','#DC0808',"#FFFF33"] + color: ['#00a0e9','#00a0e9','#FF2D96','#09bb07','#DC0808',"#FFFF33","#66ff00"] }, xAxis: { basic: {type: 'category', boundaryGap: false}, @@ -242,6 +242,17 @@ define(['angular', 'static/commons/commons', 'static/commons/angular-ueditor', ' yAxisIndex: 0 }, column: {key: 'hf.total'} + }, + { + basic: { + name: 'Yeepay交易金额', + type: 'line', + label: {normal: {show: true}}, + showAllSymbols: true, + showSymbol: true, + yAxisIndex: 0 + }, + column: {key: 'Yeepay.total'} } ] }; @@ -252,7 +263,7 @@ define(['angular', 'static/commons/commons', 'static/commons/angular-ueditor', ' trigger: 'axis' }, legend: { - data: ['Alipay交易订单','AlipayOnline交易订单', 'Bestpay交易订单','Wechat交易订单',"JD Pay交易订单","HF Pay交易订单"], + data: ['Alipay交易订单','AlipayOnline交易订单', 'Bestpay交易订单','Wechat交易订单',"JD Pay交易订单","HF Pay交易订单","Yeepay交易订单"], bottom: 0, height: '15%', width: '80%', @@ -264,7 +275,7 @@ define(['angular', 'static/commons/commons', 'static/commons/angular-ueditor', ' type: 'value' } ], - color: ['#00a0e9','00a0e9','#FF2D96','#09bb07','#DC0808',"#FFFF33"] + color: ['#00a0e9','00a0e9','#FF2D96','#09bb07','#DC0808',"#FFFF33","#66ff00"] }, xAxis: { basic: {type: 'category', boundaryGap: false}, @@ -336,7 +347,18 @@ define(['angular', 'static/commons/commons', 'static/commons/angular-ueditor', ' yAxisIndex: 0 }, column: {key: 'hf.orders'} - } + }, + { + basic: { + name: 'Yeepay交易订单', + type: 'line', + label: {normal: {show: true}}, + showAllSymbols: true, + showSymbol: true, + yAxisIndex: 0 + }, + column: {key: 'Yeepay.orders'} + }, ] }; var channels_single_amount_chart = { @@ -345,7 +367,7 @@ define(['angular', 'static/commons/commons', 'static/commons/angular-ueditor', ' trigger: 'axis' }, legend: { - data: ['Alipay交易客单价','AlipayOnline交易客单价', 'Bestpay交易客单价','Wechat交易客单价',"JD Pay交易客单价","HF Pay交易客单价"], + data: ['Alipay交易客单价','AlipayOnline交易客单价', 'Bestpay交易客单价','Wechat交易客单价',"JD Pay交易客单价","HF Pay交易客单价","Yeepay交易客单价"], bottom: 0, }, yAxis: [ @@ -354,7 +376,7 @@ define(['angular', 'static/commons/commons', 'static/commons/angular-ueditor', ' type: 'value' } ], - color: ['#00a0e9','#00a0e9','#FF2D96','#09bb07','#DC0808',"#FFFF33"] + color: ['#00a0e9','#00a0e9','#FF2D96','#09bb07','#DC0808',"#FFFF33","#66ff00"] }, xAxis: { basic: {type: 'category', boundaryGap: false}, @@ -426,6 +448,17 @@ define(['angular', 'static/commons/commons', 'static/commons/angular-ueditor', ' yAxisIndex: 0 }, column: {key: 'hf.single_amount'} + }, + { + basic: { + name: 'Yeepay交易客单价', + type: 'line', + label: {normal: {show: true}}, + showAllSymbols: true, + showSymbol: true, + yAxisIndex: 0 + }, + column: {key: 'Yeepay.single_amount'} } ] }; diff --git a/src/main/ui/static/analysis/clearing-log.js b/src/main/ui/static/analysis/clearing-log.js index feeaaeb19..e8ceabfb6 100644 --- a/src/main/ui/static/analysis/clearing-log.js +++ b/src/main/ui/static/analysis/clearing-log.js @@ -545,8 +545,10 @@ define(['angular', 'decimal', 'uiBootstrap', 'uiRouter', 'angularEcharts'], func return '/static/images/hf_sign_lg.png'; case 'Rpay': return '/static/images/rpayplus_sign_lg.png'; + case 'Yeepay': + return '/static/images/yeepay_sign_lg.png'; } } }); return app; -}); \ No newline at end of file +}); diff --git a/src/main/ui/static/analysis/templates/customer_analysis.html b/src/main/ui/static/analysis/templates/customer_analysis.html index 099aba25f..72c40413d 100644 --- a/src/main/ui/static/analysis/templates/customer_analysis.html +++ b/src/main/ui/static/analysis/templates/customer_analysis.html @@ -203,6 +203,8 @@ uib-tooltip="HF Pay" ng-if="order.channel=='hf'"/> + {{order.order_id}} {{order.short_name}}(
    HF Pay | RPay + + ng-click="params.channel='RPAY';doAnalysis(1)">RPay + | + Yeepay

    @@ -148,4 +150,4 @@ - \ No newline at end of file + diff --git a/src/main/ui/static/analysis/templates/partner_customers_orders.html b/src/main/ui/static/analysis/templates/partner_customers_orders.html index 25b7e3865..88436a1f0 100644 --- a/src/main/ui/static/analysis/templates/partner_customers_orders.html +++ b/src/main/ui/static/analysis/templates/partner_customers_orders.html @@ -101,6 +101,10 @@ ng-click="params.channel='jd';doAnalysis(1)">JD Pay | HF Pay + RPay + | + Yeepay

    @@ -133,4 +137,4 @@ - \ No newline at end of file + diff --git a/src/main/ui/static/analysis/templates/partner_trans_analysis.html b/src/main/ui/static/analysis/templates/partner_trans_analysis.html index b282d5943..4af659a20 100644 --- a/src/main/ui/static/analysis/templates/partner_trans_analysis.html +++ b/src/main/ui/static/analysis/templates/partner_trans_analysis.html @@ -100,7 +100,9 @@ JD Pay | HF Pay + ng-click="params.channel='hf';doAnalysis(1)">HF Pay | + Yeepay

    @@ -133,4 +135,4 @@ - \ No newline at end of file + diff --git a/src/main/ui/static/analysis/templates/trans_analysis.html b/src/main/ui/static/analysis/templates/trans_analysis.html index f1ab22f81..f80936201 100644 --- a/src/main/ui/static/analysis/templates/trans_analysis.html +++ b/src/main/ui/static/analysis/templates/trans_analysis.html @@ -99,7 +99,9 @@ HF Pay | RPay + + ng-click="params.channel='RPAY';doAnalysis(1)">RPay + | + Yeepay

    @@ -209,6 +211,15 @@ +
    +
    +
    Yeepay
    +
    + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Paying Surcharge
    diff --git a/src/main/ui/static/payment/partner/templates/partner_bankaccounts.html b/src/main/ui/static/payment/partner/templates/partner_bankaccounts.html index 854e13fb7..5385003d5 100644 --- a/src/main/ui/static/payment/partner/templates/partner_bankaccounts.html +++ b/src/main/ui/static/payment/partner/templates/partner_bankaccounts.html @@ -172,6 +172,7 @@
  • JDpay
  • HFpay
  • Rpay+
  • +
  • Yeepay
  • @@ -212,4 +213,4 @@ - \ No newline at end of file + diff --git a/src/main/ui/static/payment/partner/templates/partner_new_rate.html b/src/main/ui/static/payment/partner/templates/partner_new_rate.html index 6b6872b29..189a97ab1 100644 --- a/src/main/ui/static/payment/partner/templates/partner_new_rate.html +++ b/src/main/ui/static/payment/partner/templates/partner_new_rate.html @@ -160,6 +160,30 @@ +
    + +
    +
    + +
    %
    +
    +
    +
    + No more than 2.2% +
    +
    + No less than 0.6% +
    +
    + Required Field +
    +
    + +
    +
    +
    @@ -214,4 +238,4 @@ \ No newline at end of file +
    diff --git a/src/main/ui/static/payment/partner/templates/partner_pay_logs.html b/src/main/ui/static/payment/partner/templates/partner_pay_logs.html index 630f9d6ab..71d3cadb5 100644 --- a/src/main/ui/static/payment/partner/templates/partner_pay_logs.html +++ b/src/main/ui/static/payment/partner/templates/partner_pay_logs.html @@ -31,7 +31,7 @@ Partial Refund | Full Refund + ng-click="params.status='FULL_REFUNDED';loadTradeLogs(1)">Full Refund |

    @@ -87,7 +87,9 @@ HFpay | RPay + + ng-click="params.channel='RPAY';loadTradeLogs(1)">RPay + | + Yeepay

    @@ -188,6 +190,7 @@ + {{trade.order_id}} @@ -371,4 +375,4 @@ - \ No newline at end of file + diff --git a/src/main/ui/static/payment/tradelog/templates/partner_settlement_dialog.html b/src/main/ui/static/payment/tradelog/templates/partner_settlement_dialog.html index 30380e9a6..3640a2c4b 100644 --- a/src/main/ui/static/payment/tradelog/templates/partner_settlement_dialog.html +++ b/src/main/ui/static/payment/tradelog/templates/partner_settlement_dialog.html @@ -45,6 +45,11 @@ +
  • + + + +
  • @@ -251,4 +256,4 @@ - \ No newline at end of file + diff --git a/src/main/ui/static/payment/tradelog/templates/partner_trade_logs.html b/src/main/ui/static/payment/tradelog/templates/partner_trade_logs.html index b69d79e45..c27eedccf 100644 --- a/src/main/ui/static/payment/tradelog/templates/partner_trade_logs.html +++ b/src/main/ui/static/payment/tradelog/templates/partner_trade_logs.html @@ -95,9 +95,11 @@ JD Pay | HF Pay + ng-click="params.channel='HF';loadTradeLogs(1)">HF Pay | RPay+ + ng-click="params.channel='RPAY';loadTradeLogs(1)">RPay+ | + Yeepay

    @@ -325,6 +327,7 @@ + {{trade.order_id}} + @@ -69,9 +70,18 @@ + diff --git a/src/main/ui/static/risk/templates/customer_blacklist.html b/src/main/ui/static/risk/templates/customer_blacklist.html new file mode 100644 index 000000000..7b9958987 --- /dev/null +++ b/src/main/ui/static/risk/templates/customer_blacklist.html @@ -0,0 +1,76 @@ +
    +
    +

    Blacklist

    + +
    +
    +
    +
    +
    +
    + + +
    + +
    + +
    + +
    + +
    +
    +
    +
    +
    +
    Customer
    +
    +
    @@ -232,4 +235,4 @@ last-text="»">
    Total Records:{{pagination.totalCount}};Total Pages:{{pagination.totalPages}}
    - \ No newline at end of file + diff --git a/src/main/ui/static/payment/partner/templates/partner_payment_info.html b/src/main/ui/static/payment/partner/templates/partner_payment_info.html index 804ab968b..581f53caa 100644 --- a/src/main/ui/static/payment/partner/templates/partner_payment_info.html +++ b/src/main/ui/static/payment/partner/templates/partner_payment_info.html @@ -56,6 +56,14 @@

    +
    + +
    +

    + {{paymentInfo.yeepay_sub_merchant_id||'初始化'}} +

    +
    +
    @@ -209,6 +217,12 @@
    +
    + +
    + +
    +
    @@ -354,6 +368,29 @@ +
    +
    + + +
    +
    + + +
    +   仅支持微信客户端扫描 +
    +
    +
    + +
    + +
    +
    @@ -429,18 +466,41 @@
    Payment Page
    -
    -
    - -
    +
    +
    + +
    +
    + +
    + + +
    +
    +
    + +
    +
    - - + +
    +
    + +
    + + +
    diff --git a/src/main/ui/static/payment/partner/templates/sub_merchant_id_apply.html b/src/main/ui/static/payment/partner/templates/sub_merchant_id_apply.html index 8deec83d1..835b5b5dc 100644 --- a/src/main/ui/static/payment/partner/templates/sub_merchant_id_apply.html +++ b/src/main/ui/static/payment/partner/templates/sub_merchant_id_apply.html @@ -149,4 +149,64 @@
    -
    \ No newline at end of file + +
    +
    +
    +
    +
    +
    +

    + Yeepay Sub Merchant Id : {{partner.yeepay_sub_merchant_id}} +

    + +
    +
    +
    +
    +

    List of Sub Merchant Id

    +
    +
    +
      +
    • + Sub Merchant Id + (当前使用){{id_apply.sub_merchant_id}} +
    • +
    • + Apply Time + +
    • +
    • + Business Content + {{id_apply.business_content | yeepayBusinessContent}} +
    • +
    • + Business Category + {{id_apply.industry | yeepayIndustry}} +
    • +
    • + Operator + +
    • +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/src/main/ui/static/payment/tradelog/templates/balance_report.html b/src/main/ui/static/payment/tradelog/templates/balance_report.html index c6acfce95..91feaa526 100644 --- a/src/main/ui/static/payment/tradelog/templates/balance_report.html +++ b/src/main/ui/static/payment/tradelog/templates/balance_report.html @@ -97,7 +97,9 @@ HF Pay | RPay + + ng-click="params.channel='RPAY';loadTradeLogs(1)">RPay + | + Yeepay

    @@ -298,6 +300,8 @@ uib-tooltip="HF Pay" ng-if="trade.channel=='hf'"/> + {{trade.order_id2}}
    @@ -386,4 +389,4 @@ - \ No newline at end of file + diff --git a/src/main/ui/static/payment/tradelog/templates/trade_logs.html b/src/main/ui/static/payment/tradelog/templates/trade_logs.html index b4a3173f4..baa6712bd 100644 --- a/src/main/ui/static/payment/tradelog/templates/trade_logs.html +++ b/src/main/ui/static/payment/tradelog/templates/trade_logs.html @@ -135,7 +135,9 @@ HF Pay | RPay + + ng-click="params.channel='RPAY';loadTradeLogs(1)">RPay + | + Yeepay

    @@ -355,6 +357,8 @@ uib-tooltip="HF Pay" ng-if="trade.channel=='hf'"/> + {{trade.order_id}}
    @@ -405,4 +409,4 @@ - \ No newline at end of file + diff --git a/src/main/ui/static/risk/risk.js b/src/main/ui/static/risk/risk.js index 6dbf6370d..8bfe25bf8 100644 --- a/src/main/ui/static/risk/risk.js +++ b/src/main/ui/static/risk/risk.js @@ -49,6 +49,10 @@ define(['angular', 'static/commons/commons', 'uiBootstrap', 'uiRouter', 'ngBootS url: '/risk/attention', templateUrl: '/static/risk/templates/attention_merchants.html', controller: 'AttentionMerchantCtrl' + }).state('analysis_monitoring.customer', { + url: '/risk/customer', + templateUrl: '/static/risk/templates/customer_blacklist.html', + controller: 'RiskCustomerBlackListCtrl' }); }]); app.controller('RiskManageCtrl', ['$scope', '$http', function ($scope, $http){ @@ -264,8 +268,22 @@ define(['angular', 'static/commons/commons', 'uiBootstrap', 'uiRouter', 'ngBootS $scope.loadAttentionMerchants(1); }) }; + + $scope.editAttention = function (attention) { + $uibModal.open({ + templateUrl: '/static/risk/templates/risk_merchant_edit.html', + controller: 'editRiskCtrl', + resolve:{ + attention: attention + } + }).result.then(function () { + $scope.loadAttentionMerchants(1); + }) + }; }]); app.controller('newRiskCtrl', ['$scope', '$http','commonDialog', function ($scope, $http,commonDialog) { + $scope.attentions = {"enjoin_wechat": true,"enjoin_alipay": true,"enjoin_bestpay": true, + "enjoin_jd": true,"enjoin_hf": true} $scope.save = function (attentions) { var params = angular.copy(attentions); $http.post('/sys/risk/attention/'+ attentions.client_moniker, params).then(function () { @@ -276,6 +294,61 @@ define(['angular', 'static/commons/commons', 'uiBootstrap', 'uiRouter', 'ngBootS }); }; }]); + app.controller('editRiskCtrl', ['$scope', '$http','commonDialog', 'attention', function ($scope, $http,commonDialog, attention) { + $scope.attentions = angular.copy(attention); + $scope.update = function (attentions) { + var params = angular.copy(attentions); + $http.put('/sys/risk/attention/'+ attentions.client_moniker + '/detail', params).then(function () { + commonDialog.alert({title: 'Success', content: 'add successfully', type: 'success'}); + $scope.$close(); + }, function (resp) { + commonDialog.alert({title: 'Error', content: resp.data.message, type: 'error'}); + }); + }; + }]); + app.controller('RiskCustomerBlackListCtrl', ['$scope', '$http','commonDialog', '$uibModal', function ($scope, $http,commonDialog,$uibModal) { + $scope.params = {}; + $scope.pagination = {}; + $scope.loadCustomerBlackList = function (page) { + var params = angular.copy($scope.params); + params.page = page || $scope.pagination.page || 1; + $http.get('/sys/risk/customer/blacklist', {params : params}).then(function (resp) { + $scope.customerList = resp.data.data; + $scope.pagination = resp.data.pagination; + }); + }; + $scope.loadCustomerBlackList(); + $scope.disableCustomer = function (openid) { + commonDialog.confirm({title: 'Confirm', content: '确定将该用户移除黑名单?' + }).then(function () { + $http.put('/sys/risk/customer/blacklist/' + openid).then(function () { + commonDialog.alert({title: 'Success', content: 'disable successfully', type: 'success'}); + $scope.loadCustomerBlackList(); + }, function (resp) { + commonDialog.alert({title: 'Error', content: resp.data.message, type: 'error'}); + }); + }) + }; + $scope.save = function () { + $uibModal.open({ + templateUrl: '/static/risk/templates/new_customer_blacklist.html', + controller: 'newCustomerBlackListCtrl' + }).result.then(function () { + $scope.loadCustomerBlackList() + }) + }; + }]); + app.controller('newCustomerBlackListCtrl', ['$scope', '$http','commonDialog', function($scope, $http, commonDialog){ + $scope.params = {}; + $scope.addCustomer = function () { + $http.post('/sys/risk/customer/' + $scope.params.openid + '/blacklist', $scope.params).then(function () { + commonDialog.alert({title: 'Success', content: 'disable successfully', type: 'success'}); + $scope.$close(); + }, function (resp) { + commonDialog.alert({title: 'Error', content: resp.data.message, type: 'error'}); + }); + }; + }]); app.filter('risk_type', function () { return function (riskStr) { angular.forEach(riskType,function (type) { diff --git a/src/main/ui/static/risk/templates/attention_merchants.html b/src/main/ui/static/risk/templates/attention_merchants.html index 88aeee434..6d98cbd24 100644 --- a/src/main/ui/static/risk/templates/attention_merchants.html +++ b/src/main/ui/static/risk/templates/attention_merchants.html @@ -56,6 +56,7 @@ Contact Phone Operation Time RemarkDisable Channels Operation
    {{client.contact_phone}} {{client.creation_date}} {{client.remark}} + Wechat + Alipay + Bestpay + JD + HF + Disable + Edit
    + + + + + + + + + + + + + + + + + + +
    OpenidCustomerOperation TimeRemarkOperation
    {{customer.openid}} + {{customer.nickname}} + {{customer.creation_date}}{{customer.remark}} + Disable +
    + +
    + + + \ No newline at end of file diff --git a/src/main/ui/static/risk/templates/new_customer_blacklist.html b/src/main/ui/static/risk/templates/new_customer_blacklist.html new file mode 100644 index 000000000..02e032830 --- /dev/null +++ b/src/main/ui/static/risk/templates/new_customer_blacklist.html @@ -0,0 +1,28 @@ +
    +

    New Customer Blacklist

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + +
    +
    + + +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/src/main/ui/static/risk/templates/risk_add.html b/src/main/ui/static/risk/templates/risk_add.html index 31d9b768e..0911e621e 100644 --- a/src/main/ui/static/risk/templates/risk_add.html +++ b/src/main/ui/static/risk/templates/risk_add.html @@ -27,6 +27,26 @@ is-open="creationCtrl.open" ng-click="creationCtrl.open=true"> +
    + +

    + + + + + +

    +
    diff --git a/src/main/ui/static/risk/templates/risk_merchant_edit.html b/src/main/ui/static/risk/templates/risk_merchant_edit.html new file mode 100644 index 000000000..49b7d7a06 --- /dev/null +++ b/src/main/ui/static/risk/templates/risk_merchant_edit.html @@ -0,0 +1,53 @@ + + + \ No newline at end of file diff --git a/src/main/ui/static/templates/payment/success.css b/src/main/ui/static/templates/payment/success.css index 974fbb4ea..6a1060353 100644 --- a/src/main/ui/static/templates/payment/success.css +++ b/src/main/ui/static/templates/payment/success.css @@ -9,6 +9,9 @@ .pagehead.AlipayOnline{ background-color: #108ee9; } +.pagehead.Yeepay{ + background-color: #23ac38; +} .pagehead img { width: 40px; height: 40px; @@ -406,4 +409,4 @@ color: #fff; background: url(/static/images/button@2x.png) no-repeat; background-size: 100% 100%; -} \ No newline at end of file +}