You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
279 lines
9.5 KiB
279 lines
9.5 KiB
package workwechat
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"key_performance_indicators/middleware/wechatapp/wechatstatice"
|
|
"key_performance_indicators/models/modelshr"
|
|
"key_performance_indicators/models/modelskpi"
|
|
"key_performance_indicators/overall"
|
|
"key_performance_indicators/overall/publicmethod"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
// 发送文本通知消息
|
|
func (s *SentMessage) SendMessage() (callBackByte []byte, err error) {
|
|
sendUrl, token, err := wechatstatice.GetSendMsgTokenUrl("kpi", "send")
|
|
if err != nil {
|
|
return
|
|
}
|
|
fmt.Printf("%v---------sendUrl, token----------->%v\n", sendUrl, token)
|
|
|
|
sendDate, _ := json.Marshal(s)
|
|
callBackByte = publicmethod.CurlPostJosn(sendUrl, sendDate)
|
|
return
|
|
}
|
|
|
|
// 发送迷你信息设定
|
|
func (sendMsg *SentSmallMessage) InitMes() *SentSmallMessage {
|
|
sendMsg.MsgType = "template_card"
|
|
sendMsg.AgentId = 1000036
|
|
sendMsg.EnableIdTrans = 0
|
|
sendMsg.EnableDuplicateCheck = 0
|
|
sendMsg.DuplicateCheckInterval = 1800
|
|
|
|
// var templateCard TemplateCardMsgContMini
|
|
sendMsg.TemplateCard.CardType = "text_notice"
|
|
//头部左标题部分
|
|
sendMsg.TemplateCard.Source.IconUrl = "https://docu.hxgk.group/images/2022_01/3f7a1120a559e9bee3991b85eb34d103.png"
|
|
sendMsg.TemplateCard.Source.DescColor = 1
|
|
//引用文献样式
|
|
sendMsg.TemplateCard.QuoteArea.Type = 0
|
|
//整体卡片的点击跳转事件,text_notice必填本字段
|
|
sendMsg.TemplateCard.CardAction.Type = 1
|
|
// sendMsg.TemplateCard = templateCard
|
|
return sendMsg
|
|
}
|
|
|
|
// 发送迷你信息设定
|
|
func (sendMsg *SentMiniMessage) InitMes() *SentMiniMessage {
|
|
sendMsg.MsgType = "template_card"
|
|
sendMsg.AgentId = 1000036
|
|
sendMsg.EnableIdTrans = 0
|
|
sendMsg.EnableDuplicateCheck = 0
|
|
sendMsg.DuplicateCheckInterval = 1800
|
|
|
|
// var templateCard TemplateCardMsgContMini
|
|
sendMsg.TemplateCard.CardType = "text_notice"
|
|
//头部左标题部分
|
|
sendMsg.TemplateCard.Source.IconUrl = "https://docu.hxgk.group/images/2022_01/3f7a1120a559e9bee3991b85eb34d103.png"
|
|
sendMsg.TemplateCard.Source.DescColor = 1
|
|
//引用文献样式
|
|
sendMsg.TemplateCard.QuoteArea.Type = 0
|
|
//整体卡片的点击跳转事件,text_notice必填本字段
|
|
sendMsg.TemplateCard.CardAction.Type = 1
|
|
// sendMsg.TemplateCard = templateCard
|
|
return sendMsg
|
|
}
|
|
|
|
// 发送迷你文本通知消息
|
|
func (s *SentMiniMessage) SendMessage() (callBackByte []byte, err error) {
|
|
sendUrl, token, err := wechatstatice.GetSendMsgTokenUrl("kpi", "send")
|
|
if err != nil {
|
|
return
|
|
}
|
|
fmt.Printf("%v---------sendUrl, token----------->%v\n", sendUrl, token)
|
|
|
|
sendDate, _ := json.Marshal(s)
|
|
callBackByte = publicmethod.CurlPostJosn(sendUrl, sendDate)
|
|
return
|
|
}
|
|
|
|
// 发送迷你文本通知消息
|
|
func (s *SentSmallMessage) SendMessage() (callBackByte []byte, err error) {
|
|
sendUrl, token, err := wechatstatice.GetSendMsgTokenUrl("kpi", "send")
|
|
if err != nil {
|
|
return
|
|
}
|
|
fmt.Printf("%v---------sendUrl, token----------->%v\n", sendUrl, token)
|
|
|
|
sendDate, _ := json.Marshal(s)
|
|
callBackByte = publicmethod.CurlPostJosn(sendUrl, sendDate)
|
|
return
|
|
}
|
|
|
|
// 更新文本通知消息
|
|
func (s *UpdateMessage) UpdateMessage() (callBackByte []byte, err error) {
|
|
sendUrl, token, err := wechatstatice.GetSendMsgTokenUrl("kpi", "update")
|
|
if err != nil {
|
|
return
|
|
}
|
|
fmt.Printf("%v---------sendUrl, token----------->%v\n", sendUrl, token)
|
|
|
|
sendDate, _ := json.Marshal(s)
|
|
callBackByte = publicmethod.CurlPostJosn(sendUrl, sendDate)
|
|
return
|
|
}
|
|
|
|
// 更新文本通知(map类型)
|
|
func UpdateMessageMap(mapAry map[string]interface{}) (callBackByte []byte, err error) {
|
|
sendUrl, token, err := wechatstatice.GetSendMsgTokenUrl("kpi", "update")
|
|
if err != nil {
|
|
return
|
|
}
|
|
fmt.Printf("%v---------sendUrl, token----------->%v\n", sendUrl, token)
|
|
sendDate, _ := json.Marshal(mapAry)
|
|
callBackByte = publicmethod.CurlPostJosn(sendUrl, sendDate)
|
|
return
|
|
}
|
|
|
|
/*
|
|
*
|
|
@ 作者: 秦东
|
|
@ 时间: 2023-04-24 08:22:22
|
|
@ 功能: 写入企业微信模版信息发送回调
|
|
@ 参数
|
|
|
|
#wechatCallBack 文本发送回调
|
|
#sendMsg 发送文本信息
|
|
#typeClass 类型(1:文本通知型;2:图文展示型;3:按钮交互型;4:投票选择型;5:多项选择型)
|
|
#ordeeId 审批记录Id
|
|
#enforcer 接收人
|
|
|
|
@ 返回值
|
|
|
|
#err
|
|
|
|
@ 方法原型
|
|
|
|
#func WriteUpdateWechatTempmsg(wechatCallBack []byte, sendMsg SentMiniMessage, typeClass int, ordeeId int64, enforcer []string) (err error)
|
|
*/
|
|
func WriteUpdateWechatTempmsg(wechatCallBack []byte, sendMsg SentMiniMessage, typeClass int, ordeeId int64, enforcer []string) (err error) {
|
|
var weChatCallBack publicmethod.WechatCallBack
|
|
err = json.Unmarshal(wechatCallBack, &weChatCallBack)
|
|
if err != nil {
|
|
return
|
|
}
|
|
if weChatCallBack.Errcode != 0 {
|
|
return
|
|
}
|
|
sendMsgJson, err := json.Marshal(sendMsg)
|
|
if err != nil {
|
|
return
|
|
}
|
|
var insetCont modelskpi.UpdateWechatTempmsg
|
|
insetCont.Type = typeClass //类型(1:文本通知型;2:图文展示型;3:按钮交互型;4:投票选择型;5:多项选择型)"`
|
|
insetCont.Sendmsgcont = string(sendMsgJson) //发送文件信息"`
|
|
insetCont.Msgid = weChatCallBack.MsgId //消息id,用于撤回应用消息"`
|
|
insetCont.ResponseCode = weChatCallBack.ResponseCode //仅消息类型为“按钮交互型”,“投票选择型”和“多项选择型”的模板卡片消息返回,应用可使用response_code调用更新模版卡片消息接口,72小时内有效,且只能使用一次"`
|
|
insetCont.Orderkey = ordeeId //流程id"`
|
|
insetCont.Enforcer = strings.Join(enforcer, ",") //执行人"`
|
|
insetCont.State = 2 //状态(1:已执行更新;2:未执行更新)"`
|
|
insetCont.TaskId = sendMsg.TemplateCard.TaskId //任务id,同一个应用任务id不能重复,只能由数字、字母和“_-@”组成,最长128字节,填了action_menu字段的话本字段必填"`
|
|
insetCont.Time = time.Now().Unix() //写入时间"`
|
|
err = insetCont.AddCont()
|
|
return
|
|
}
|
|
|
|
/*
|
|
*
|
|
@ 作者: 秦东
|
|
@ 时间: 2023-04-24 13:29:27
|
|
@ 功能: 更新卡片
|
|
@ 参数
|
|
|
|
#typeClass 类型(1:文本通知型;2:图文展示型;3:按钮交互型;4:投票选择型;5:多项选择型)'
|
|
#attribute 1:未操作,2:同意;3:驳回
|
|
#orderkey 流程识别符
|
|
#enforcer 执行人
|
|
|
|
@ 返回值
|
|
|
|
#UpDateCont 更新信息
|
|
#err 信息提示
|
|
|
|
@ 方法原型
|
|
|
|
#func UpdateWechatMsgCont(typeClass int, orderkey, enforcer string) (UpDateCont []byte, err error)
|
|
*/
|
|
func UpdateWechatMsgCont(typeClass, attribute int, orderkey int64, enforcer string) (UpDateCont []byte, err error) {
|
|
if typeClass == 0 {
|
|
typeClass = 1
|
|
}
|
|
if orderkey == 0 || enforcer == "" {
|
|
return
|
|
}
|
|
var updateWechatCont []modelskpi.UpdateWechatTempmsg
|
|
err = overall.CONSTANT_DB_KPI.Where("`sate` = 2 AND `type` = ? AND `orderkey` = ? AND FIND_IN_SET(?,`enforcer`)", typeClass, orderkey, enforcer).Find(&updateWechatCont).Error
|
|
if err != nil || len(updateWechatCont) < 1 {
|
|
return
|
|
}
|
|
for _, uv := range updateWechatCont {
|
|
sendUpdateMsg := publicmethod.MapOut[string]()
|
|
var weChatMsgCont SentMiniMessage
|
|
json.Unmarshal([]byte(uv.Sendmsgcont), &weChatMsgCont)
|
|
|
|
templateCardCont := publicmethod.MapOut[string]()
|
|
templateCardCont["card_type"] = weChatMsgCont.TemplateCard.CardType
|
|
templateCardCont["source"] = weChatMsgCont.TemplateCard.Source
|
|
templateCardCont["main_title"] = weChatMsgCont.TemplateCard.MainTitle
|
|
templateCardCont["task_id"] = weChatMsgCont.TemplateCard.TaskId
|
|
templateCardCont["action_menu"] = weChatMsgCont.TemplateCard.ActionMenu
|
|
templateCardCont["quote_area"] = weChatMsgCont.TemplateCard.QuoteArea
|
|
templateCardCont["horizontal_content_list"] = weChatMsgCont.TemplateCard.HorizontalContentList
|
|
templateCardCont["card_action"] = weChatMsgCont.TemplateCard.CardAction
|
|
|
|
var userCont modelshr.PersonArchives
|
|
userCont.GetCont(map[string]interface{}{"`key`": enforcer}, "`name`")
|
|
attributeTitle := "同意申请"
|
|
switch attribute {
|
|
case 2:
|
|
attributeTitle = "同意申请"
|
|
case 3:
|
|
attributeTitle = "驳回申请"
|
|
default:
|
|
attributeTitle = "操作申请"
|
|
}
|
|
titleStr := fmt.Sprintf("%v已%v,查看详情", userCont.Name, attributeTitle)
|
|
for i, v := range weChatMsgCont.TemplateCard.JumpList {
|
|
if v.Type == 1 {
|
|
weChatMsgCont.TemplateCard.JumpList[i].Title = titleStr
|
|
}
|
|
}
|
|
templateCardCont["jump_list"] = weChatMsgCont.TemplateCard.JumpList
|
|
|
|
receiveMsgMan := strings.Split(uv.Enforcer, ",")
|
|
if len(receiveMsgMan) < 1 {
|
|
|
|
return
|
|
}
|
|
var weCahtOpenId []string
|
|
for _, v := range receiveMsgMan {
|
|
var userContWechat modelshr.PersonArchives
|
|
userContWechat.GetCont(map[string]interface{}{"`key`": v}, "`wechat`", "`work_wechat`")
|
|
if userContWechat.Wechat != "" {
|
|
if !publicmethod.IsInTrue[string](userContWechat.Wechat, weCahtOpenId) {
|
|
weCahtOpenId = append(weCahtOpenId, userContWechat.Wechat)
|
|
}
|
|
}
|
|
if userContWechat.WorkWechat != "" {
|
|
if !publicmethod.IsInTrue[string](userContWechat.WorkWechat, weCahtOpenId) {
|
|
weCahtOpenId = append(weCahtOpenId, userContWechat.WorkWechat)
|
|
}
|
|
}
|
|
|
|
}
|
|
if len(weCahtOpenId) < 1 {
|
|
|
|
return
|
|
}
|
|
sendUpdateMsg["userids"] = weCahtOpenId
|
|
sendUpdateMsg["agentid"] = weChatMsgCont.AgentId
|
|
sendUpdateMsg["response_code"] = uv.ResponseCode
|
|
sendUpdateMsg["enable_id_trans"] = 1
|
|
sendUpdateMsg["template_card"] = templateCardCont
|
|
|
|
UpDateCont, err = UpdateMessageMap(sendUpdateMsg)
|
|
if err != nil {
|
|
return
|
|
}
|
|
var editUpdateWechatCont modelskpi.UpdateWechatTempmsg
|
|
editCont := publicmethod.MapOut[string]()
|
|
editCont["`sate`"] = 1
|
|
editCont["`time`"] = time.Now().Unix()
|
|
err = editUpdateWechatCont.EiteCont(map[string]interface{}{"`id`": uv.Id}, editCont)
|
|
}
|
|
|
|
return
|
|
}
|
|
|