package cn.flightfeather.supervision.common.wx
|
|
import cn.flightfeather.supervision.common.net.WXHttpService
|
import cn.flightfeather.supervision.domain.entity.LogMsgSubscribeWx
|
import cn.flightfeather.supervision.domain.mapper.LogMsgSubscribeWxMapper
|
import com.alibaba.fastjson.JSON
|
import com.google.gson.Gson
|
import org.springframework.beans.factory.annotation.Autowired
|
import org.springframework.stereotype.Component
|
import java.util.*
|
import javax.annotation.PostConstruct
|
|
/**
|
* 微信订阅消息模板管理
|
*/
|
@Component
|
class TemplateManager {
|
|
companion object {
|
private lateinit var instance: TemplateManager
|
|
//推送小程序版本
|
private const val PROGRAM_STATE_1 = "developer"//开发版
|
private const val PROGRAM_STATE_2 = "trial"//体验版
|
private const val PROGRAM_STATE_3 = "formal"//正式版
|
|
const val TEMPLATE_1 = "6JQFOJ12yBvKfRg_duSdwKiH5_J3LpICmz3Li-L1Cr8"//倒计时到期提醒,台账
|
const val TEMPLATE_2 = "zPNMzF5WsshniJyl83DD-lDZtNvx7JyqLbKgqDl0qvU"//代办事项提醒,自测智评
|
const val TEMPLATE_3 = "zPNMzF5WsshniJyl83DD-u7MyVoUozOc2kjK8dGZcSA"//代办事项提醒,重要通知,如会议、政府公告(暂定)
|
const val TEMPLATE_4 = "dqREi7vAd03OOirTgBGcm5aCihZJKBjVpiA8Kbu4B8w"//备忘事项提醒,未认证提醒或其他
|
|
//模板id和对应的跳转路径(已有顺序尽量不要修改,新模板往后顺延)
|
val templateList = listOf(
|
Pair(TEMPLATE_1,"pages/m_user/userlogin/userlogin"),
|
Pair(TEMPLATE_2,"pages/m_user/userlogin/userlogin"),
|
Pair(TEMPLATE_3,"pages/m_user/userlogin/userlogin"),
|
Pair(TEMPLATE_4,"pages/m_user/userlogin/userlogin"),
|
)
|
}
|
|
@Autowired
|
lateinit var wxTokenManager: WxTokenManager
|
|
@Autowired
|
lateinit var logMsgSubscribeWxMapper: LogMsgSubscribeWxMapper
|
|
@PostConstruct
|
fun init() {
|
instance = this
|
}
|
|
fun sendMsg(templateId: Int, openId: String, dataList: List<String>): Boolean {
|
val token = wxTokenManager.getAccessToken()
|
val msg = newTemplate(templateId, openId, dataList)
|
val res = WXHttpService.sendMsg(token, msg)
|
return if (res) {
|
//发送成功,则记录相应的日志
|
val log = LogMsgSubscribeWx().apply {
|
lmsOpenId = msg.touser
|
lmsTemplateId = msg.template_id
|
lmsData = Gson().toJson(msg.data)
|
lmsTime = Date()
|
lmsResult = false
|
}
|
logMsgSubscribeWxMapper.insert(log)
|
true
|
} else {
|
false
|
}
|
}
|
|
fun newTemplate(templateId: Int, openId: String, dataList: List<String>): MessageWxVo {
|
val t = templateList[templateId]
|
val msg = MessageWxVo(openId, t.first, t.second, PROGRAM_STATE_3, "zh_CN")
|
when (templateId) {
|
0 -> {
|
val temp = Template1()
|
if (dataList.size == 4) {
|
temp.thing1.value = dataList[0]
|
temp.time2.value = dataList[1]
|
temp.number3.value = dataList[2]
|
temp.thing4.value = dataList[3]
|
}
|
msg.data = temp
|
}
|
1 -> {
|
val temp = Template2()
|
if (dataList.size == 5) {
|
temp.thing15.value = dataList[0]
|
temp.thing1.value = dataList[1]
|
temp.thing4.value = dataList[2]
|
temp.time10.value = dataList[3]
|
temp.thing12.value = dataList[4]
|
}
|
msg.data = temp
|
}
|
2 -> {
|
val temp = Template3()
|
if (dataList.size == 4) {
|
temp.thing1.value = dataList[0]
|
temp.thing4.value = dataList[1]
|
temp.time10.value = dataList[2]
|
temp.thing12.value = dataList[3]
|
}
|
msg.data = temp
|
}
|
}
|
return msg
|
}
|
|
|
|
/**
|
* 台账倒计时提醒
|
*/
|
inner class Template1 {
|
//倒计时名称
|
val thing1: TValue = TValue("")
|
|
//目标时间
|
val time2: TValue = TValue("")
|
|
//剩余天数
|
val number3: TValue = TValue("")
|
|
//备注
|
val thing4: TValue = TValue("")
|
}
|
|
/**
|
* 自测智评提醒
|
*/
|
inner class Template2 {
|
//事项类型
|
val thing15: TValue = TValue("")
|
|
//事项主题
|
val thing1: TValue = TValue("")
|
|
//事项描述
|
val thing4: TValue = TValue("")
|
|
//截止时间
|
val time10: TValue = TValue("")
|
|
//备注消息
|
val thing12: TValue = TValue("")
|
}
|
|
/**
|
* 重要通知,如会议、政府公告(暂定)
|
*/
|
inner class Template3 {
|
//事项主题
|
val thing1: TValue = TValue("")
|
|
//事项描述
|
val thing4: TValue = TValue("")
|
|
//截止时间
|
val time10: TValue = TValue("")
|
|
//备注消息
|
val thing12: TValue = TValue("")
|
}
|
|
/**
|
* 未认证提醒或其他
|
*/
|
inner class Template4 {
|
//活动事件
|
val thing1: TValue = TValue("")
|
|
//备忘事项
|
val thing3: TValue = TValue("")
|
|
//开始时间
|
val time2: TValue = TValue("")
|
|
//温馨提示
|
val thing5: TValue = TValue("")
|
|
//完成进度
|
val thing4: TValue = TValue("")
|
}
|
|
data class TValue(var value: String)
|
}
|