From: qiaowei Date: Fri, 9 Aug 2019 06:43:27 +0000 (+0800) Subject: 添加消息推送 X-Git-Url: https://source.supwisdom.com/gerrit/gitweb?a=commitdiff_plain;h=6aa3e44d2b7b378ad936db079d41748e7e321066;p=epayment%2Ffood_payapi.git 添加消息推送 --- diff --git a/config/application-devel-pg.properties b/config/application-devel-pg.properties index 7c2ec225..408a43a6 100644 --- a/config/application-devel-pg.properties +++ b/config/application-devel-pg.properties @@ -35,7 +35,7 @@ spring.cloud.consul.port=8500 #============== kafka =================== # 指定kafka 代理地址,可以多个 -# spring.kafka.bootstrap-servers=192.168.153.135:9092 +spring.kafka.bootstrap-servers=172.28.201.101:29092 #=============== provider ======================= spring.kafka.producer.retries=3 # 每次批量发送消息的数量 diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/bean/KafkaXgMessage.java b/payapi/src/main/java/com/supwisdom/dlpay/api/bean/KafkaXgMessage.java new file mode 100644 index 00000000..9bc836af --- /dev/null +++ b/payapi/src/main/java/com/supwisdom/dlpay/api/bean/KafkaXgMessage.java @@ -0,0 +1,133 @@ +package com.supwisdom.dlpay.api.bean; + +public class KafkaXgMessage { + + private String title;//提醒标题 + private String content;//提醒消息内容 + private String gids;//gid发送列表,逗号隔开 + private Boolean alltarget;//是否平台全发送 + private String platform;//android,ios + private int type;//TYPE_NOTIFICATION = 1,TYPE_MESSAGE = 2 + + private String url;//跳转url + private String expiretime;//过期时间 + private Boolean callback;//是否回调返回 + private String msg_type;//提醒类型 字典 epay_pos_scan_code_pay、 + private String refno;//流水参考号 + private int retries;//最多重试次数 + private String amount;//消费金额,元,小数点后两位 + private String custom; //扩展参数,原样传递 + + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getGids() { + return gids; + } + + public void setGids(String gids) { + this.gids = gids; + } + + public Boolean getAlltarget() { + return alltarget; + } + + public void setAlltarget(Boolean alltarget) { + this.alltarget = alltarget; + } + + public String getPlatform() { + return platform; + } + + public void setPlatform(String platform) { + this.platform = platform; + } + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getExpiretime() { + return expiretime; + } + + public void setExpiretime(String expiretime) { + this.expiretime = expiretime; + } + + public Boolean getCallback() { + return callback; + } + + public void setCallback(Boolean callback) { + this.callback = callback; + } + + public String getMsg_type() { + return msg_type; + } + + public void setMsg_type(String msg_type) { + this.msg_type = msg_type; + } + + public String getRefno() { + return refno; + } + + public void setRefno(String refno) { + this.refno = refno; + } + + public int getRetries() { + return retries; + } + + public void setRetries(int retries) { + this.retries = retries; + } + + public String getAmount() { + return amount; + } + + public void setAmount(String amount) { + this.amount = amount; + } + + public String getCustom() { + return custom; + } + + public void setCustom(String custom) { + this.custom = custom; + } +} diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt index 5b109df1..eb74c4c7 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt @@ -5,6 +5,7 @@ import com.supwisdom.dlpay.api.dao.TransactionMainDao import com.supwisdom.dlpay.api.domain.* import com.supwisdom.dlpay.api.repositories.AccountService import com.supwisdom.dlpay.api.service.AccountUtilServcie +import com.supwisdom.dlpay.api.service.KafkaSendMsgService import com.supwisdom.dlpay.api.service.SourceTypeService import com.supwisdom.dlpay.api.service.TransactionService import com.supwisdom.dlpay.exception.TransactionCheckException @@ -38,6 +39,10 @@ class TransactionServiceImpl : TransactionService { @Autowired private lateinit var sourceTypeService: SourceTypeService + @Autowired + private lateinit var kafkaSendMsgService: KafkaSendMsgService + + /// 公共函数部分 private fun preCheck(builder: TransactionBuilder) { builder.preCheck() @@ -386,6 +391,9 @@ class TransactionServiceImpl : TransactionService { transaction.endTime = systemUtilService.sysdatetime.sysdate transactionMainDao.save(transaction) + if(transaction.person&&!transaction.personDtl.userid.isNullOrEmpty()){ + kafkaSendMsgService.sendJpushMessage(transaction.personDtl.userid,"交易提醒","你有一笔${transaction.personDtl.amount}元的支出,点击查看详情",transaction.refno, mutableMapOf(),transaction.tenantid) + } return transaction } diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/kafka_service.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/kafka_service.kt index 6c9ce1a2..d9bd0a88 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/kafka_service.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/kafka_service.kt @@ -1,20 +1,70 @@ package com.supwisdom.dlpay.api.service +import com.google.gson.Gson +import com.supwisdom.dlpay.api.bean.KafkaXgMessage +import com.supwisdom.dlpay.framework.util.DateUtil +import com.supwisdom.dlpay.framework.util.TradeDict +import com.supwisdom.dlpay.mobile.dao.MsgDao +import com.supwisdom.dlpay.mobile.domain.TBMsg +import com.supwisdom.dlpay.mobile.service.MobileApiService import mu.KotlinLogging import org.springframework.stereotype.Component import org.springframework.kafka.core.KafkaTemplate import org.springframework.beans.factory.annotation.Autowired - +import org.springframework.scheduling.annotation.Async @Component -class KafkaSendMsgService{ +class KafkaSendMsgService { val logger = KotlinLogging.logger { } - @Autowired private lateinit var kafkaTemplate: KafkaTemplate - fun sendMessage(topic:String,msg: String) { - logger.debug { "$topic,$msg" } - kafkaTemplate.send(topic, msg) + @Autowired + private lateinit var msgDao: MsgDao + @Autowired + private lateinit var mobileApiService: MobileApiService + val gson = Gson() + + val topic = "jpush-messages" + + @Async("kafkaSendMsgService") + fun sendJpushMessage(userid: String, title: String, content: String, refno: String, extras: MutableMap, tenantId: String?) { + val musers = mobileApiService.findByUseridAndStatus(userid, TradeDict.STATUS_NORMAL) + var msg = TBMsg().apply { + this.content = content + this.title = title + this.refno = refno + this.userid = userid + this.lastupdate = DateUtil.getNow() + this.refno = refno + this.extras = gson.toJson(extras) + } + if (musers == null || musers.isEmpty()) { + msg.pushresult = "没有手机用户,消息未推送" + msgDao.save(msg) + return + } + var uids = "" + musers.forEach { + uids += "${it.uid}," + var platform = "android" + if ("ios".equals(it.lastloginplatform, true)) { + platform = "ios" + } + val message = KafkaXgMessage() + message.alltarget = false + message.callback = true + message.content = msg.content + message.title = msg.title + message.platform = platform + message.retries = 3 + extras["refno"] = refno + message.custom = gson.toJson(extras) + message.expiretime = DateUtil.getNewTime(DateUtil.getNow(), 300) + message.gids = it.uid + kafkaTemplate.send(topic, refno, gson.toJson(message)) + } + msg.pusheduids = uids + msgDao.save(msg) } } \ No newline at end of file diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/AuthLoginHandler.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/AuthLoginHandler.kt index b8ea4fcc..16f17427 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/AuthLoginHandler.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/AuthLoginHandler.kt @@ -43,7 +43,8 @@ class AuthLoginSuccessHandler : SimpleUrlAuthenticationSuccessHandler() { lateinit var userService: UserService override fun onAuthenticationSuccess(request: HttpServletRequest, response: HttpServletResponse, authentication: Authentication) { - logger.error(request.getParameter("platform")) + val platform = request.getParameter("platform") + logger.error(platform) val temp = authentication.principal as TBMobileUser val user = mobileApiService.findUserByPhone(temp.phone) val exp = systemUtilService.getSysparaValueAsInt(SysparaUtil.MOBILE_LOGIN_EXPIRE_IN_SECONDS,60*60*24*3) @@ -72,6 +73,7 @@ class AuthLoginSuccessHandler : SimpleUrlAuthenticationSuccessHandler() { user.loginpwderrortime = null } user.lastlogin = DateUtil.getNow() + user.lastloginplatform = platform user.jti = jwt.jti mobileApiService.saveUser(user) var payseted = false diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt index 9d780206..824ebc1f 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt @@ -135,6 +135,9 @@ class ApiInit { } user.status = TradeDict.STATUS_NORMAL user.registerplatform = platform + if(!user.registerplatform.isNullOrEmpty()){ + user.lastloginplatform = user.registerplatform!!.split(",")[1] + } user.devuid = uuid user = mobileApiService.saveUser(user) val newCode = RandomUtils.getRandomString(30) diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/dao/ApiDao.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/dao/ApiDao.kt index 81466528..27f63ad4 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/dao/ApiDao.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/dao/ApiDao.kt @@ -1,8 +1,12 @@ package com.supwisdom.dlpay.mobile.dao +import com.supwisdom.dlpay.mobile.domain.TBMsg import com.supwisdom.dlpay.mobile.domain.TBPages import org.springframework.data.jpa.repository.JpaRepository import org.springframework.stereotype.Repository @Repository -interface PagesDao : JpaRepository \ No newline at end of file +interface PagesDao : JpaRepository + +@Repository +interface MsgDao : JpaRepository \ No newline at end of file diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/dao/MobileUserDao.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/dao/MobileUserDao.kt index 76ad4c68..47540f40 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/dao/MobileUserDao.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/dao/MobileUserDao.kt @@ -7,6 +7,8 @@ import org.springframework.stereotype.Repository @Repository interface MobileUserDao : JpaRepository { fun findByPhone(phone: String): TBMobileUser? + + fun findByUseridAndStatus(userid:String,status:String):List? } diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/domain/TBMobileUser.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/domain/TBMobileUser.kt index 276d8d00..afee39c1 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/domain/TBMobileUser.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/domain/TBMobileUser.kt @@ -167,6 +167,8 @@ class TBMobileUser : UserDetails { @Column(name = "secertkey", length = 64) var secertkey: String? = null + @Column(name = "tenantid", length = 32) + var tenantid:String? = null fun checkLoginpwdtime():Int{ if (this.loginpwderror >= 5 && (System.currentTimeMillis() - this.loginpwderrortime!!) < 1000 * 60 * 30) { diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/domain/TBMsg.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/domain/TBMsg.kt new file mode 100644 index 00000000..53ec2f0b --- /dev/null +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/domain/TBMsg.kt @@ -0,0 +1,41 @@ +package com.supwisdom.dlpay.mobile.domain + +import org.hibernate.annotations.GenericGenerator +import javax.persistence.* + +@Entity +@Table(name = "TB_MSG") +class TBMsg{ + @Id + @GenericGenerator(name = "idGenerator", strategy = "uuid") + @GeneratedValue(generator = "idGenerator") + @Column(name = "msgid", nullable = false, length = 32) + var msgid: String = "" + + @Column(name = "userid", length = 32) + var userid:String = "" + + @Column(name = "title", length = 100) + var title: String? = null + + @Column(name = "refno", length = 32) + var refno: String? = null + + @Column(name = "content", length = 400) + var content: String? = null + + @Column(name = "lastupdate", length = 14) + var lastupdate: String? = null + + @Column(name = "extras", length = 1000) + var extras: String? = null + + @Column(name = "pushresult", length = 500) + var pushresult: String? = null + + @Column(name = "pusheduids", length = 400) + var pusheduids:String? = "" + + @Column(name = "tenantid", length = 32) + var tenantid:String? = null +} diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/domain/TBPages.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/domain/TBPages.kt index cbe892b2..6c9b74af 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/domain/TBPages.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/domain/TBPages.kt @@ -20,4 +20,7 @@ class TBPages{ @Column(name = "lastupdate", length = 14) var lastupdate: String? = null + + @Column(name = "tenantid", length = 32) + var tenantid:String? = null } \ No newline at end of file diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/service/MobileApiService.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/service/MobileApiService.kt index 0311352f..3baacb3b 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/service/MobileApiService.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/service/MobileApiService.kt @@ -23,4 +23,6 @@ interface MobileApiService { fun saveCard(card:TCard):TCard fun sendSms(phone:String,code:String):BaseResp + + fun findByUseridAndStatus(userid:String,status:String):List? } \ No newline at end of file diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/service/impl/MobileApiServiceImpl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/service/impl/MobileApiServiceImpl.kt index cc1bc470..94121110 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/service/impl/MobileApiServiceImpl.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/service/impl/MobileApiServiceImpl.kt @@ -149,4 +149,8 @@ class MobileApiServiceImpl : MobileApiService { resp } } + + override fun findByUseridAndStatus(userid: String, status: String): List? { + return mobileUserDao.findByUseridAndStatus(userid,status) + } } \ No newline at end of file