diff --git a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java index 6c0bbfe62..ed13c38ff 100644 --- a/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/riskbusiness/core/impl/RiskBusinessServiceImpl.java @@ -2,24 +2,30 @@ package au.com.royalpay.payment.manage.riskbusiness.core.impl; import au.com.royalpay.payment.core.exceptions.EmailException; import au.com.royalpay.payment.core.exceptions.InvalidShortIdException; +import au.com.royalpay.payment.manage.mappers.log.AppMessageLogMapper; import au.com.royalpay.payment.manage.mappers.payment.OrderMapper; import au.com.royalpay.payment.manage.mappers.riskbusiness.RiskEventMapper; import au.com.royalpay.payment.manage.mappers.riskbusiness.RiskFileMapper; import au.com.royalpay.payment.manage.mappers.riskbusiness.RiskMaterialMapper; +import au.com.royalpay.payment.manage.mappers.system.ClientDeviceTokenMapper; import au.com.royalpay.payment.manage.mappers.system.ClientMapper; import au.com.royalpay.payment.manage.mappers.system.ClientBDMapper; import au.com.royalpay.payment.manage.merchants.beans.PartnerQuery; import au.com.royalpay.payment.manage.notice.core.MailService; +import au.com.royalpay.payment.manage.pushMessage.bean.AppManagerMessageBuilder; import au.com.royalpay.payment.manage.riskbusiness.core.RiskBusinessService; import au.com.royalpay.payment.manage.riskbusiness.enums.RiskResultTypeEnum; import au.com.royalpay.payment.manage.signin.beans.TodoNotice; import au.com.royalpay.payment.manage.signin.core.ManagerTodoNoticeProvider; import au.com.royalpay.payment.manage.tradelog.core.TradeLogService; import au.com.royalpay.payment.manage.riskbusiness.enums.RiskOrderTypeEnum; +import au.com.royalpay.payment.tools.device.message.AppMessage; +import au.com.royalpay.payment.tools.device.message.AppMsgSender; import au.com.royalpay.payment.tools.env.PlatformEnvironment; import au.com.royalpay.payment.tools.exceptions.BadRequestException; import au.com.royalpay.payment.tools.locale.LocaleSupport; import au.com.royalpay.payment.tools.permission.enums.ManagerRole; +import au.com.royalpay.payment.tools.exceptions.ServerErrorException; import au.com.royalpay.payment.tools.threadpool.RoyalThreadPoolExecutor; import au.com.royalpay.payment.tools.utils.PageListUtils; import com.alibaba.fastjson.JSONObject; @@ -44,10 +50,10 @@ import org.thymeleaf.spring4.SpringTemplateEngine; import javax.servlet.http.HttpServletResponse; import java.io.*; import java.net.URL; -import java.util.ArrayList; -import java.util.Date; +import java.util.*; import javax.annotation.Resource; -import java.util.List; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; import java.util.concurrent.TimeUnit; @@ -85,6 +91,14 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo private RiskMaterialMapper riskMaterialMapper; @Resource private RiskFileMapper riskFileMapper; + @Resource + private ClientDeviceTokenMapper clientDeviceTokenMapper; + @Resource + private AppMessageLogMapper appMessageLogMapper; + + private Map senderMap = new HashMap<>(); + + private ThreadPoolExecutor sendingAppleMsgPool = new ThreadPoolExecutor(10, 30, 5, TimeUnit.SECONDS, new LinkedBlockingQueue()); @Override public List getRiskEvents(JSONObject params) { @@ -94,7 +108,7 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo @Override public JSONObject getRiskEventsByPage(JSONObject params, JSONObject manager) { - // TODO: 2018/10/19 BD看到的result_type应该是1或者4,后续改进 + // TODO: 2018/10/19 BD看到的result_type应该是1或者4,后续改进 if (ManagerRole.BD_USER.hasRole(manager.getIntValue("role"))) { params.put("bd_id", manager.getString("manager_id")); params.put("result_type", RiskResultTypeEnum.SEND_EMAIL_TO_BD.getResultType()); @@ -231,6 +245,66 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo throw new EmailException("Email Sending Failed", e); } }); + if(event.getIntValue("order_type")==3){ + sendAppRiskMessage(event); + } + + + } + + private void sendAppRiskMessage(JSONObject event){ + JSONObject client = clientMapper.findClientByMoniker(event.getString("client_moniker")); + logger.debug("sendRiskAppMessage-" + client.getString("client_moniker") + "-" + "risk_id:"+event.getString("risk_id")); + List tokens = clientDeviceTokenMapper.listTokensByClient_id(client.getIntValue("client_id")); + for (final JSONObject devToken : tokens) { + Runnable task = () -> { + String token = devToken.getString("token"); + if (token == null) { + return; + } + JSONObject log = saveAppMessageLog(devToken.getString("dev_id"), devToken.getIntValue("client_id"), "risk", token, + event.getString("risk_id")); + try { + event.put("send_type", "risk"); + JSONObject type = new JSONObject(); + type.put("send_type", "risk"); + type.put("id", event.getString("risk_id")); + AppMsgSender sender = senderMap.get(devToken.getString("client_type")); + if (token == null || sender == null) { + return; + } + JSONObject managerMsg = new JSONObject(); + managerMsg.put("title", LocaleSupport.localeMessage("app.message.title.risk")); + managerMsg.put("body", + LocaleSupport.localeMessage("app.message.body.risk")); + managerMsg.put("type", type); + managerMsg.put("data", event); + managerMsg.put("msgType", "risk"); + AppMessage appMessage = new AppManagerMessageBuilder(managerMsg).buildMessage(); + sender.sendMessage(appMessage, devToken); + log.put("status", 2); + appMessageLogMapper.update(log); + } catch (Exception e) { + logger.error("出错了:" + e.getMessage()); + appMessageLogMapper.updateStatus(log.getString("send_id"), 1, e.getMessage()); + throw new ServerErrorException("Send App " + devToken.getString("client_type") + " Failed", e); + } + }; + sendingAppleMsgPool.execute(task); + } + } + + private JSONObject saveAppMessageLog(String dev_id, int client_id, String messageType, String dev_token, String remark) { + JSONObject log = new JSONObject(); + log.put("dev_id", dev_id); + log.put("client_id", client_id); + log.put("msg_type", messageType); + log.put("dev_token", dev_token); + log.put("remark", remark); + log.put("send_time", new Date()); + appMessageLogMapper.save(log); + return log; + } @Override diff --git a/src/main/resources/i18n/msg_en.properties b/src/main/resources/i18n/msg_en.properties index 41ce147b0..5af979791 100644 --- a/src/main/resources/i18n/msg_en.properties +++ b/src/main/resources/i18n/msg_en.properties @@ -87,6 +87,8 @@ todo.bd.order=The merchant managed by you is transferred. Please submit the mate app.message.title.payment=Payment Message app.message.body.payment=You have received a payment of +app.message.title.risk=Risk Control Message +app.message.body.risk=You have received a risk control reminder. Please check the email for details. app.message.title.notice=System Message app.message.body.refund=Your refund request has bean sent,refund count is app.message.body.cashback=You got a cashback of @@ -108,4 +110,4 @@ sys.contract.waring=Dear merchant, your service contract with ROYALPAY is due to sys.contract.info=Dear merchant, your service contract with ROYALPAY has expired. Please check the latest service agreement to renew your contract so as not to affect your normal use. contract.old.waring=Dear Valued Merchants ,to ensure we comply with the ATO, we will need to adjust our current service agreements to be exclusionary of GST. This will result in contractual changes to your agreement,please read it carefully. -sys.mondelay.cancel.waring=Are you sure to quit this activity? \ No newline at end of file +sys.mondelay.cancel.waring=Are you sure to quit this activity? diff --git a/src/main/resources/i18n/msg_zh.properties b/src/main/resources/i18n/msg_zh.properties index ad851b8fc..44b3ca6ea 100644 --- a/src/main/resources/i18n/msg_zh.properties +++ b/src/main/resources/i18n/msg_zh.properties @@ -83,6 +83,8 @@ todo.bd.order=有商户被调单,请尽快提交材料 app.message.title.payment=到账通知 app.message.body.payment=您有一笔新的到账, +app.message.title.risk=风控通知 +app.message.body.risk=您收到了一条风控提醒,详情请查看邮件 app.message.title.notice=系统通知 app.message.body.refund=退款申请已提交渠道方处理,退款金额 app.message.body.cashback=您获得了一笔ROYALPAY返现,金额 @@ -101,4 +103,4 @@ sys.contract.ordinary.waring=尊敬的商户,您与ROYALPAY的服务合同还 sys.contract.waring=尊敬的商户,您与ROYALPAY的服务合同还有{0}天到期,为了不影响您的正常使用,请查看最新服务协议进行续约。 sys.contract.info=尊敬的商户,您与ROYALPAY的服务合同已到期,为了不影响您的正常使用,请查看最新服务协议进行续约。 contract.old.waring=尊敬的商户,RoyalPay于近期正式收到澳洲监管机构的通知,应澳大利亚税务局ATO的要求进行了合同上GST部分的相应调整。请仔细阅读合同条款并确认。 -sys.mondelay.cancel.waring=是否确认退出活动 \ No newline at end of file +sys.mondelay.cancel.waring=是否确认退出活动