feiyu02
2024-11-19 752e00503f672ddfe2066afb6c235721a3a912b5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
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/mLedger/ledgerhome/ledgerhome"),
//            Pair(TEMPLATE_2, "pages/mAssessment/assessment/assessment"),
            Pair(TEMPLATE_1, "pages/mUser/userlogin/userlogin"),
            Pair(TEMPLATE_2, "pages/mUser/userlogin/userlogin"),
            Pair(TEMPLATE_3, "pages/mUser/userlogin/userlogin"),
            Pair(TEMPLATE_4, "pages/mUser/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
            }
            3 -> {
                val temp = Template4()
                if (dataList.size == 5) {
                    temp.thing1.value = dataList[0]
                    temp.thing3.value = dataList[1]
                    temp.time2.value = dataList[2]
                    temp.thing5.value = dataList[3]
                    temp.thing4.value = dataList[4]
                }
                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)
}