修复:通过转发日志中重新发送短信时,{{接收时间}}错误 #218

This commit is contained in:
pppscn 2022-09-21 10:18:39 +08:00
parent 8418155826
commit 74cbddc192
1 changed files with 164 additions and 165 deletions

View File

@ -1,166 +1,165 @@
package com.idormy.sms.forwarder.utils package com.idormy.sms.forwarder.utils
import android.os.Looper import android.os.Looper
import android.util.Log import android.util.Log
import androidx.work.OneTimeWorkRequestBuilder import androidx.work.OneTimeWorkRequestBuilder
import androidx.work.WorkManager import androidx.work.WorkManager
import androidx.work.workDataOf import androidx.work.workDataOf
import com.google.gson.Gson import com.google.gson.Gson
import com.idormy.sms.forwarder.R import com.idormy.sms.forwarder.R
import com.idormy.sms.forwarder.database.entity.LogsAndRuleAndSender import com.idormy.sms.forwarder.database.entity.LogsAndRuleAndSender
import com.idormy.sms.forwarder.database.entity.Rule import com.idormy.sms.forwarder.database.entity.Rule
import com.idormy.sms.forwarder.database.entity.Sender import com.idormy.sms.forwarder.database.entity.Sender
import com.idormy.sms.forwarder.entity.MsgInfo import com.idormy.sms.forwarder.entity.MsgInfo
import com.idormy.sms.forwarder.entity.result.SendResponse import com.idormy.sms.forwarder.entity.result.SendResponse
import com.idormy.sms.forwarder.entity.setting.* import com.idormy.sms.forwarder.entity.setting.*
import com.idormy.sms.forwarder.utils.sender.* import com.idormy.sms.forwarder.utils.sender.*
import com.idormy.sms.forwarder.workers.SendWorker import com.idormy.sms.forwarder.workers.SendWorker
import com.idormy.sms.forwarder.workers.UpdateLogsWorker import com.idormy.sms.forwarder.workers.UpdateLogsWorker
import com.xuexiang.xui.utils.ResUtils import com.xuexiang.xui.utils.ResUtils
import com.xuexiang.xutil.XUtil import com.xuexiang.xutil.XUtil
import com.xuexiang.xutil.data.DateUtils import java.util.*
import java.text.SimpleDateFormat
import java.util.*
object SendUtils {
private const val TAG = "SendUtils"
object SendUtils {
private const val TAG = "SendUtils" //批量发送消息
/*fun sendMsgList(infoList: List<MsgInfo>, type: String) {
//批量发送消息 for (msgInfo in infoList) {
/*fun sendMsgList(infoList: List<MsgInfo>, type: String) { sendMsg(msgInfo, type)
for (msgInfo in infoList) { }
sendMsg(msgInfo, type) }*/
}
}*/ //发送消息
fun sendMsg(msgInfo: MsgInfo) {
//发送消息 val request = OneTimeWorkRequestBuilder<SendWorker>()
fun sendMsg(msgInfo: MsgInfo) { .setInputData(workDataOf(Worker.sendMsgInfo to Gson().toJson(msgInfo)))
val request = OneTimeWorkRequestBuilder<SendWorker>() .build()
.setInputData(workDataOf(Worker.sendMsgInfo to Gson().toJson(msgInfo))) WorkManager.getInstance(XUtil.getContext()).enqueue(request)
.build() }
WorkManager.getInstance(XUtil.getContext()).enqueue(request)
} /**
* 重发消息从日志获取消息内容并尝试重发
/** * 根据当前rule和sender来重发而不是失败时设置的规则
* 重发消息从日志获取消息内容并尝试重发 */
* 根据当前rule和sender来重发而不是失败时设置的规则 fun resendMsg(item: LogsAndRuleAndSender, rematch: Boolean) {
*/ Log.d(TAG, item.logs.toString())
fun resendMsg(item: LogsAndRuleAndSender, rematch: Boolean) {
Log.d(TAG, item.logs.toString()) val date: Date = try {
//DateUtils.string2Date(item.logs.time.toString(), SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()))
val date: Date = try { item.logs.time
DateUtils.string2Date(item.logs.time.toString(), SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault())) } catch (e: Exception) {
} catch (e: Exception) { e.printStackTrace()
e.printStackTrace() Date()
Date() }
} val simInfo: String = item.logs.simInfo
val simInfo: String = item.logs.simInfo val simSlot: Int = if (simInfo.startsWith("SIM2")) 2 else 1
val simSlot: Int = if (simInfo.startsWith("SIM2")) 2 else 1 val msgInfo = MsgInfo(item.logs.type, item.logs.from, item.logs.content, date, simInfo, simSlot)
val msgInfo = MsgInfo(item.logs.type, item.logs.from, item.logs.content, date, simInfo, simSlot) Log.d(TAG, "resendMsg msgInfo:$msgInfo")
Log.d(TAG, "resendMsg msgInfo:$msgInfo")
if (rematch) {
if (rematch) { sendMsg(msgInfo)
sendMsg(msgInfo) return
return }
}
sendMsgSender(msgInfo, item.relation.rule, item.relation.sender, item.logs.id)
sendMsgSender(msgInfo, item.relation.rule, item.relation.sender, item.logs.id) }
}
//匹配发送通道发送消息
//匹配发送通道发送消息 fun sendMsgSender(msgInfo: MsgInfo, rule: Rule, sender: Sender, logId: Long) {
fun sendMsgSender(msgInfo: MsgInfo, rule: Rule, sender: Sender, logId: Long) { try {
try { when (sender.type) {
when (sender.type) { TYPE_DINGTALK_GROUP_ROBOT -> {
TYPE_DINGTALK_GROUP_ROBOT -> { val settingVo = Gson().fromJson(sender.jsonSetting, DingtalkGroupRobotSetting::class.java)
val settingVo = Gson().fromJson(sender.jsonSetting, DingtalkGroupRobotSetting::class.java) DingtalkGroupRobotUtils.sendMsg(settingVo, msgInfo, rule, logId)
DingtalkGroupRobotUtils.sendMsg(settingVo, msgInfo, rule, logId) }
} TYPE_EMAIL -> {
TYPE_EMAIL -> { val settingVo = Gson().fromJson(sender.jsonSetting, EmailSetting::class.java)
val settingVo = Gson().fromJson(sender.jsonSetting, EmailSetting::class.java) EmailUtils.sendMsg(settingVo, msgInfo, rule, logId)
EmailUtils.sendMsg(settingVo, msgInfo, rule, logId) }
} TYPE_BARK -> {
TYPE_BARK -> { val settingVo = Gson().fromJson(sender.jsonSetting, BarkSetting::class.java)
val settingVo = Gson().fromJson(sender.jsonSetting, BarkSetting::class.java) BarkUtils.sendMsg(settingVo, msgInfo, rule, logId)
BarkUtils.sendMsg(settingVo, msgInfo, rule, logId) }
} TYPE_WEBHOOK -> {
TYPE_WEBHOOK -> { val settingVo = Gson().fromJson(sender.jsonSetting, WebhookSetting::class.java)
val settingVo = Gson().fromJson(sender.jsonSetting, WebhookSetting::class.java) WebhookUtils.sendMsg(settingVo, msgInfo, rule, logId)
WebhookUtils.sendMsg(settingVo, msgInfo, rule, logId) }
} TYPE_WEWORK_ROBOT -> {
TYPE_WEWORK_ROBOT -> { val settingVo = Gson().fromJson(sender.jsonSetting, WeworkRobotSetting::class.java)
val settingVo = Gson().fromJson(sender.jsonSetting, WeworkRobotSetting::class.java) WeworkRobotUtils.sendMsg(settingVo, msgInfo, rule, logId)
WeworkRobotUtils.sendMsg(settingVo, msgInfo, rule, logId) }
} TYPE_WEWORK_AGENT -> {
TYPE_WEWORK_AGENT -> { val settingVo = Gson().fromJson(sender.jsonSetting, WeworkAgentSetting::class.java)
val settingVo = Gson().fromJson(sender.jsonSetting, WeworkAgentSetting::class.java) WeworkAgentUtils.sendMsg(settingVo, msgInfo, rule, logId)
WeworkAgentUtils.sendMsg(settingVo, msgInfo, rule, logId) }
} TYPE_SERVERCHAN -> {
TYPE_SERVERCHAN -> { val settingVo = Gson().fromJson(sender.jsonSetting, ServerchanSetting::class.java)
val settingVo = Gson().fromJson(sender.jsonSetting, ServerchanSetting::class.java) ServerchanUtils.sendMsg(settingVo, msgInfo, rule, logId)
ServerchanUtils.sendMsg(settingVo, msgInfo, rule, logId) }
} TYPE_TELEGRAM -> {
TYPE_TELEGRAM -> { val settingVo = Gson().fromJson(sender.jsonSetting, TelegramSetting::class.java)
val settingVo = Gson().fromJson(sender.jsonSetting, TelegramSetting::class.java) TelegramUtils.sendMsg(settingVo, msgInfo, rule, logId)
TelegramUtils.sendMsg(settingVo, msgInfo, rule, logId) }
} TYPE_SMS -> {
TYPE_SMS -> { val settingVo = Gson().fromJson(sender.jsonSetting, SmsSetting::class.java)
val settingVo = Gson().fromJson(sender.jsonSetting, SmsSetting::class.java) SmsUtils.sendMsg(settingVo, msgInfo, rule, logId)
SmsUtils.sendMsg(settingVo, msgInfo, rule, logId) }
} TYPE_FEISHU -> {
TYPE_FEISHU -> { val settingVo = Gson().fromJson(sender.jsonSetting, FeishuSetting::class.java)
val settingVo = Gson().fromJson(sender.jsonSetting, FeishuSetting::class.java) FeishuUtils.sendMsg(settingVo, msgInfo, rule, logId)
FeishuUtils.sendMsg(settingVo, msgInfo, rule, logId) }
} TYPE_PUSHPLUS -> {
TYPE_PUSHPLUS -> { val settingVo = Gson().fromJson(sender.jsonSetting, PushplusSetting::class.java)
val settingVo = Gson().fromJson(sender.jsonSetting, PushplusSetting::class.java) PushplusUtils.sendMsg(settingVo, msgInfo, rule, logId)
PushplusUtils.sendMsg(settingVo, msgInfo, rule, logId) }
} TYPE_GOTIFY -> {
TYPE_GOTIFY -> { val settingVo = Gson().fromJson(sender.jsonSetting, GotifySetting::class.java)
val settingVo = Gson().fromJson(sender.jsonSetting, GotifySetting::class.java) GotifyUtils.sendMsg(settingVo, msgInfo, rule, logId)
GotifyUtils.sendMsg(settingVo, msgInfo, rule, logId) }
} TYPE_DINGTALK_INNER_ROBOT -> {
TYPE_DINGTALK_INNER_ROBOT -> { val settingVo = Gson().fromJson(sender.jsonSetting, DingtalkInnerRobotSetting::class.java)
val settingVo = Gson().fromJson(sender.jsonSetting, DingtalkInnerRobotSetting::class.java) DingtalkInnerRobotUtils.sendMsg(settingVo, msgInfo, rule, logId)
DingtalkInnerRobotUtils.sendMsg(settingVo, msgInfo, rule, logId) }
} TYPE_FEISHU_APP -> {
TYPE_FEISHU_APP -> { val settingVo = Gson().fromJson(sender.jsonSetting, FeishuAppSetting::class.java)
val settingVo = Gson().fromJson(sender.jsonSetting, FeishuAppSetting::class.java) FeishuAppUtils.sendMsg(settingVo, msgInfo, rule, logId)
FeishuAppUtils.sendMsg(settingVo, msgInfo, rule, logId) }
} else -> {
else -> { updateLogs(logId, 0, "未知发送通道")
updateLogs(logId, 0, "未知发送通道") }
} }
} } catch (e: Exception) {
} catch (e: Exception) { e.printStackTrace()
e.printStackTrace() updateLogs(logId, 0, e.message.toString())
updateLogs(logId, 0, e.message.toString()) }
} }
}
//更新转发日志状态
//更新转发日志状态 fun updateLogs(logId: Long?, status: Int, response: String) {
fun updateLogs(logId: Long?, status: Int, response: String) {
//测试的没有记录ID这里取巧了
//测试的没有记录ID这里取巧了 if (logId == null || logId == 0L) {
if (logId == null || logId == 0L) { if (Looper.myLooper() == null) Looper.prepare()
if (Looper.myLooper() == null) Looper.prepare() if (status == 2) {
if (status == 2) { XToastUtils.success(ResUtils.getString(R.string.request_succeeded))
XToastUtils.success(ResUtils.getString(R.string.request_succeeded)) } else {
} else { XToastUtils.error(ResUtils.getString(R.string.request_failed) + response)
XToastUtils.error(ResUtils.getString(R.string.request_failed) + response) }
} Looper.loop()
Looper.loop() return
return }
}
val sendResponse = SendResponse(logId, status, response)
val sendResponse = SendResponse(logId, status, response) val request = OneTimeWorkRequestBuilder<UpdateLogsWorker>()
val request = OneTimeWorkRequestBuilder<UpdateLogsWorker>() .setInputData(
.setInputData( workDataOf(
workDataOf( Worker.updateLogs to Gson().toJson(sendResponse)
Worker.updateLogs to Gson().toJson(sendResponse) )
) )
) .build()
.build() WorkManager.getInstance(XUtil.getContext()).enqueue(request)
WorkManager.getInstance(XUtil.getContext()).enqueue(request) }
}
} }