添加消息推送
diff --git a/config/application-devel-pg.properties b/config/application-devel-pg.properties
index 7c2ec22..408a43a 100644
--- a/config/application-devel-pg.properties
+++ b/config/application-devel-pg.properties
@@ -35,7 +35,7 @@
#============== 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 0000000..9bc836a
--- /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 5b109df..eb74c4c 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.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 @@
@Autowired
private lateinit var sourceTypeService: SourceTypeService
+ @Autowired
+ private lateinit var kafkaSendMsgService: KafkaSendMsgService
+
+
/// 公共函数部分
private fun preCheck(builder: TransactionBuilder) {
builder.preCheck()
@@ -386,6 +391,9 @@
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 6c9ce1a..d9bd0a8 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<String, String>
- 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<String, String>, 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 b8ea4fc..16f1742 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 @@
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 @@
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 9d78020..824ebc1 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 @@
}
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 8146652..27f63ad 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<TBPages,String>
\ No newline at end of file
+interface PagesDao : JpaRepository<TBPages, String>
+
+@Repository
+interface MsgDao : JpaRepository<TBMsg, String>
\ 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 76ad4c6..47540f4 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 @@
@Repository
interface MobileUserDao : JpaRepository<TBMobileUser, String> {
fun findByPhone(phone: String): TBMobileUser?
+
+ fun findByUseridAndStatus(userid:String,status:String):List<TBMobileUser>?
}
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 276d8d0..afee39c 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 @@
@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 0000000..53ec2f0
--- /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 cbe892b..6c9b74a 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 @@
@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 0311352..3baacb3 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 @@
fun saveCard(card:TCard):TCard
fun sendSms(phone:String,code:String):BaseResp
+
+ fun findByUseridAndStatus(userid:String,status:String):List<TBMobileUser>?
}
\ 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 cc1bc47..9412111 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 @@
resp
}
}
+
+ override fun findByUseridAndStatus(userid: String, status: String): List<TBMobileUser>? {
+ return mobileUserDao.findByUseridAndStatus(userid,status)
+ }
}
\ No newline at end of file