作者 yangfu

审核消息发送

@@ -23,7 +23,7 @@ yunpian_app_key ="0bf6fb10a11a68a95dee80901eb545b5" @@ -23,7 +23,7 @@ yunpian_app_key ="0bf6fb10a11a68a95dee80901eb545b5"
23 #存储 http://ability.fjmaimaimai.com:8080/ 23 #存储 http://ability.fjmaimaimai.com:8080/
24 source_host ="http://mmm-opp-dev.fjmaimaimai.com/" 24 source_host ="http://mmm-opp-dev.fjmaimaimai.com/"
25 source_virtual_path=file/opp 25 source_virtual_path=file/opp
26 -source_path ="${aliyun_file_access||/var/www/opp/file} 26 +source_path =/var/www/opp/file
27 27
28 #网易云信 IM 28 #网易云信 IM
29 net_im_base_url ="https://api.netease.im/nimserver" 29 net_im_base_url ="https://api.netease.im/nimserver"
@@ -39,6 +39,13 @@ var errmessge ErrorMap = map[int]string{ @@ -39,6 +39,13 @@ var errmessge ErrorMap = map[int]string{
39 5201: "该机会模板未配置审批人,请选择其他模板", 39 5201: "该机会模板未配置审批人,请选择其他模板",
40 } 40 }
41 41
  42 +const (
  43 + MsgTypeBulletin = 1 //公告
  44 + MsgTypeCommend = 2 //表彰
  45 + MsgTypeInteraction = 4 //互动消息
  46 + MsgTypeAudit = 8 //机会审核
  47 +)
  48 +
42 /*MessageCenter */ 49 /*MessageCenter */
43 type MessageCenterRequest struct { 50 type MessageCenterRequest struct {
44 MsgType int `json:"msgType" valid:"Required"` 51 MsgType int `json:"msgType" valid:"Required"`
  1 +package agg
  2 +
  3 +import (
  4 + "fmt"
  5 + "gitlab.fjmaimaimai.com/mmm-go/gocomm/identity/idgen"
  6 + "gitlab.fjmaimaimai.com/mmm-go/gocomm/pkg/log"
  7 + "opp/models"
  8 + "opp/protocol"
  9 + "time"
  10 +)
  11 +
  12 +var (
  13 + MessageApprove = "提交了一条%v机会消息,需要您审核"
  14 +)
  15 +
  16 +//发送审批消息
  17 +func SendApproveMsg(receiverId int64, name string, companyId int64, chanceId int64, chanceTypeId int) (err error) {
  18 + var (
  19 + userMsg *models.UserMsg
  20 + chanceType *models.ChanceType
  21 + )
  22 + if chanceType, err = models.GetChanceTypeById(chanceTypeId); err != nil {
  23 + return
  24 + }
  25 + userMsg = &models.UserMsg{
  26 + Id: idgen.Next(),
  27 + CompanyId: companyId,
  28 + ReceiveUserId: receiverId,
  29 + MsgType: protocol.MsgTypeAudit,
  30 + Message: fmt.Sprintf(MessageApprove, chanceType.Name),
  31 + SourceId: chanceId,
  32 + SourceType: protocol.SourceTypeChance,
  33 + IsPublic: 0,
  34 + CreateAt: time.Now(),
  35 + }
  36 + if _, err = models.AddUserMsg(userMsg); err != nil {
  37 + return
  38 + }
  39 + logMsg(userMsg, name)
  40 + return
  41 +}
  42 +
  43 +//打印消息日志
  44 +func logMsg(msg *models.UserMsg, name string) {
  45 + log.Info(fmt.Sprintf("发送消息 消息类型:%v Receiver:%v(%v) Message:%v SourceId:%v SourceType:%v",
  46 + msg.MsgType, msg.ReceiveUserId, name, msg.Message, msg.SourceId, msg.SourceType))
  47 +}
@@ -30,10 +30,10 @@ type SuplusApprove struct { @@ -30,10 +30,10 @@ type SuplusApprove struct {
30 } 30 }
31 31
32 //新增审批实例 32 //新增审批实例
33 -func (s SuplusApprove) NewApproveInstance(header *protocol.RequestHeader, process []*models.AuditFlowProcess) (err error) { 33 +func (s SuplusApprove) NewApproveInstance(header *protocol.RequestHeader, process []*models.AuditFlowProcess) (response NewApproveInstanceResponse, err error) {
34 var ( 34 var (
35 - request NewApproveInstanceRequest  
36 - response NewApproveInstanceResponse 35 + request NewApproveInstanceRequest
  36 + //response NewApproveInstanceResponse
37 mapApproves map[int]*Approve = make(map[int]*Approve) 37 mapApproves map[int]*Approve = make(map[int]*Approve)
38 relativeId int64 38 relativeId int64
39 userCompany *models.UserCompany 39 userCompany *models.UserCompany
@@ -85,8 +85,6 @@ func (s SuplusApprove) NewApproveInstance(header *protocol.RequestHeader, proces @@ -85,8 +85,6 @@ func (s SuplusApprove) NewApproveInstance(header *protocol.RequestHeader, proces
85 approve.ApproveUsers = append(approve.ApproveUsers, ApproveUsers{ 85 approve.ApproveUsers = append(approve.ApproveUsers, ApproveUsers{
86 Uid: item.Uid, 86 Uid: item.Uid,
87 Name: approver.NickName, 87 Name: approver.NickName,
88 - //RoleId:5,  
89 - RoleId: 0,  
90 }) 88 })
91 } 89 }
92 request.RelativeId = relativeId 90 request.RelativeId = relativeId
@@ -193,25 +191,42 @@ type NewApproveInstanceRequest struct { @@ -193,25 +191,42 @@ type NewApproveInstanceRequest struct {
193 RelativeId int64 `json:"relativeId"` //关联id 191 RelativeId int64 `json:"relativeId"` //关联id
194 192
195 } 193 }
196 -type NewApproveInstanceResponse interface{} 194 +type NewApproveInstanceResponse struct {
  195 + MessageData []MessageDataItem `json:"messageData"`
  196 +}
197 197
198 //审批节点 198 //审批节点
199 type Approve struct { 199 type Approve struct {
200 ApproveWay int `json:"approveWay"` //审批方式 1 会签 2 或签 3 发起人从角色成员中自选 200 ApproveWay int `json:"approveWay"` //审批方式 1 会签 2 或签 3 发起人从角色成员中自选
201 ApproveType int `json:"approveType"` //审批类型 1 业务区域负责人 2 指定成员 3 角色 201 ApproveType int `json:"approveType"` //审批类型 1 业务区域负责人 2 指定成员 3 角色
  202 + IsDefault int `json:"isDefault"` //1 是默认 0 不是
  203 + RoleName string `json:"roleName"` //角色名/负责人
  204 + RoleId int `json:"roleId"` //角色id
202 ApproveUsers []ApproveUsers `json:"approveUsers"` //审批人 205 ApproveUsers []ApproveUsers `json:"approveUsers"` //审批人
203 } 206 }
204 207
205 //审批人 208 //审批人
206 type ApproveUsers struct { 209 type ApproveUsers struct {
207 - Uid int64 `json:"uid"` //用户id  
208 - Name string `json:"name"` //用户名  
209 - IsDefault int `json:"isDefault"` //1 是默认 0 不是  
210 - RoleName string `json:"roleName"` //角色名/负责人  
211 - RoleId int `json:"roleId"` //角色id 210 + Uid int64 `json:"uid"` //用户id
  211 + Name string `json:"name"` //用户名
212 ParentIds []int `json:"parentIds"` 212 ParentIds []int `json:"parentIds"`
213 } 213 }
214 214
  215 +//审批 消息列表
  216 +type MessageDataItem struct {
  217 + MessageContent contentItem `json:"messageContent"`
  218 + ReceiverInfo receiverInfo `json:"receiverInfo"`
  219 +}
  220 +type contentItem struct {
  221 + ApproveInstanceId int `json:"approveInstanceId"` //审批实例-id
  222 + ApproveProcessId int `json:"approveProcessId"` //审批进程节点-id
  223 + RelativeId int `json:"relativeId"` //机会编号
  224 +}
  225 +type receiverInfo struct {
  226 + ReceiverUid int64 `json:"receiverUid"` //用户id
  227 + ReceiverName string `json:"receiverName"` //接收人
  228 +}
  229 +
215 /*ApproveItem 审批操作*/ 230 /*ApproveItem 审批操作*/
216 type ApproveItemRequest struct { 231 type ApproveItemRequest struct {
217 RelativeId int64 `json:"relativeId"` //关联id 232 RelativeId int64 `json:"relativeId"` //关联id
@@ -269,10 +269,23 @@ func ChanceSubmit(header *protocol.RequestHeader, request *protocol.ChanceSubmit @@ -269,10 +269,23 @@ func ChanceSubmit(header *protocol.RequestHeader, request *protocol.ChanceSubmit
269 } 269 }
270 } 270 }
271 if len(auditFlows) > 0 { 271 if len(auditFlows) > 0 {
272 - if err = suplusApprove.NewApproveInstance(header, auditFlows); err != nil {  
273 - log.Error(fmt.Sprintf("uid:%v", header.UserId), "request suplus-approve.NewApproveInstance err", err) 272 + //7.发送审批实例给审批服务器
  273 + if m, e := suplusApprove.NewApproveInstance(header, auditFlows); e != nil {
  274 + log.Error(fmt.Sprintf("uid:%v", header.UserId), "request suplus-approve.NewApproveInstance err", e)
274 orm.Rollback() 275 orm.Rollback()
  276 + err = e
275 return 277 return
  278 + } else {
  279 + //7.发送消息通知给审核人(审核消息)
  280 + for i := range m.MessageData {
  281 + message := m.MessageData[i]
  282 + if err = agg.SendApproveMsg(message.ReceiverInfo.ReceiverUid, message.ReceiverInfo.ReceiverName,
  283 + header.CompanyId, chance.Id, chance.ChanceTypeId); err != nil {
  284 + log.Error(err)
  285 + orm.Rollback()
  286 + return
  287 + }
  288 + }
276 } 289 }
277 } 290 }
278 291
@@ -295,8 +308,6 @@ func ChanceSubmit(header *protocol.RequestHeader, request *protocol.ChanceSubmit @@ -295,8 +308,6 @@ func ChanceSubmit(header *protocol.RequestHeader, request *protocol.ChanceSubmit
295 } 308 }
296 orm.Commit() 309 orm.Commit()
297 310
298 - //6.激活审核流  
299 - //TODO:7.发送消息通知给审核人(审核消息)  
300 rsp = &protocol.ChanceSubmitResponse{} 311 rsp = &protocol.ChanceSubmitResponse{}
301 return 312 return
302 } 313 }
@@ -342,21 +353,6 @@ func ChanceUpdate(header *protocol.RequestHeader, request *protocol.ChanceSubmit @@ -342,21 +353,6 @@ func ChanceUpdate(header *protocol.RequestHeader, request *protocol.ChanceSubmit
342 } 353 }
343 } 354 }
344 355
345 - //4.查询审核配置  
346 - //5.生成审核流 删除旧的 生成新的  
347 - //if auditFlows, err = GenAuditFlowProcess(header, chance.Id, template.Id, auditConfig); err != nil {  
348 - // log.Error(err)  
349 - // orm.Rollback()  
350 - // return  
351 - //}  
352 - //for i := 0; i < len(auditFlows); i++ {  
353 - // if _, err = orm.Insert(auditFlows[i]); err != nil {  
354 - // log.Error(err)  
355 - // orm.Rollback()  
356 - // return  
357 - // }  
358 - //}  
359 -  
360 //6.更新文件 356 //6.更新文件
361 { 357 {
362 if chanceData, err = models.GetChanceDataByChanceId(chance.Id); err == nil { 358 if chanceData, err = models.GetChanceDataByChanceId(chance.Id); err == nil {