作者 yangfu

把握分修改

@@ -242,3 +242,24 @@ func (this *MessageController) MsgChanceThumbUp() { @@ -242,3 +242,24 @@ func (this *MessageController) MsgChanceThumbUp() {
242 header := controllers.GetRequestHeader(this.Ctx) 242 header := controllers.GetRequestHeader(this.Ctx)
243 msg = protocol.NewReturnResponse(message.MsgChanceThumbUp(header, request)) 243 msg = protocol.NewReturnResponse(message.MsgChanceThumbUp(header, request))
244 } 244 }
  245 +
  246 +//MsgChanceRevise 消息中心-机会补充
  247 +//@router /msgChanceRevise [post]
  248 +func (this *MessageController) MsgChanceRevise() {
  249 + var msg *protocol.ResponseMessage
  250 + defer func() {
  251 + this.Resp(msg)
  252 + }()
  253 + var request *protocol.MsgChanceReviseRequest
  254 + if err := json.Unmarshal(this.ByteBody, &request); err != nil {
  255 + log.Error(err)
  256 + msg = protocol.BadRequestParam(1)
  257 + return
  258 + }
  259 + if b, m := this.Valid(request); !b {
  260 + msg = m
  261 + return
  262 + }
  263 + header := controllers.GetRequestHeader(this.Ctx)
  264 + msg = protocol.NewReturnResponse(message.MsgChanceRevise(header, request))
  265 +}
  1 +package models
  2 +
  3 +import (
  4 + "time"
  5 +
  6 + "github.com/astaxie/beego/orm"
  7 +)
  8 +
  9 +type ChanceReviseLog struct {
  10 + Id int64 `orm:"column(id);pk" description:"id 主键"`
  11 + ChanceId int64 `orm:"column(chance_id)" description:"机会编号"`
  12 + UserCompanyId int64 `orm:"column(user_company_id);null" description:"用户编号 编辑机会的人"`
  13 + Data string `orm:"column(data);null" description:"机会数据"`
  14 + CreateAt time.Time `orm:"column(create_at);type(timestamp);null" description:"创建时间"`
  15 +}
  16 +
  17 +func (t *ChanceReviseLog) TableName() string {
  18 + return "chance_revise_log"
  19 +}
  20 +
  21 +func init() {
  22 + orm.RegisterModel(new(ChanceReviseLog))
  23 +}
  24 +
  25 +// AddChanceReviseLog insert a new ChanceReviseLog into database and returns
  26 +// last inserted Id on success.
  27 +func AddChanceReviseLog(m *ChanceReviseLog) (id int64, err error) {
  28 + o := orm.NewOrm()
  29 + id, err = o.Insert(m)
  30 + return
  31 +}
  32 +
  33 +// GetChanceReviseLogById retrieves ChanceReviseLog by Id. Returns error if
  34 +// Id doesn't exist
  35 +func GetChanceReviseLogById(id int64) (v *ChanceReviseLog, err error) {
  36 + o := orm.NewOrm()
  37 + v = &ChanceReviseLog{Id: id}
  38 + if err = o.Read(v); err == nil {
  39 + return v, nil
  40 + }
  41 + return nil, err
  42 +}
@@ -14,6 +14,11 @@ type AchievementItem struct { @@ -14,6 +14,11 @@ type AchievementItem struct {
14 Provider *BaseUserInfo `json:"provider"` 14 Provider *BaseUserInfo `json:"provider"`
15 Content string `json:"content"` 15 Content string `json:"content"`
16 Pictures []Picture `json:"pictures"` 16 Pictures []Picture `json:"pictures"`
  17 + //GraspScore float64 `json:"graspScore"` //把握分
  18 + //GraspScorePercent float64 `json:"graspScorePercent"` //把握分百分比
  19 +}
  20 +
  21 +type GraspScore struct {
17 GraspScore float64 `json:"graspScore"` //把握分 22 GraspScore float64 `json:"graspScore"` //把握分
18 GraspScorePercent float64 `json:"graspScorePercent"` //把握分百分比 23 GraspScorePercent float64 `json:"graspScorePercent"` //把握分百分比
19 } 24 }
@@ -24,6 +29,7 @@ type AchievementCommonListItem struct { @@ -24,6 +29,7 @@ type AchievementCommonListItem struct {
24 StatisticData interface{} `json:"statisticData,omitempty"` //统计数据(是否收藏/点赞 浏览数 点赞总数 评论数)ChanceData 29 StatisticData interface{} `json:"statisticData,omitempty"` //统计数据(是否收藏/点赞 浏览数 点赞总数 评论数)ChanceData
25 //我审核的-通过 30 //我审核的-通过
26 Score interface{} `json:"score,omitempty"` 31 Score interface{} `json:"score,omitempty"`
  32 + GraspScore interface{} `json:"graspScore,omitempty"` //把握分
27 //模板 33 //模板
28 ChanceType interface{} `json:"chanceType,omitempty"` //机会类型 34 ChanceType interface{} `json:"chanceType,omitempty"` //机会类型
29 ChanceTemplate interface{} `json:"template,omitempty"` //机会模板 35 ChanceTemplate interface{} `json:"template,omitempty"` //机会模板
@@ -96,6 +102,7 @@ type AchievementDetailRequest struct { @@ -96,6 +102,7 @@ type AchievementDetailRequest struct {
96 } 102 }
97 type AchievementDetailResponse struct { 103 type AchievementDetailResponse struct {
98 Achievement AchievementItem `json:"achievement,omitempty"` //成果详情 104 Achievement AchievementItem `json:"achievement,omitempty"` //成果详情
  105 + GraspScore interface{} `json:"graspScore,omitempty"` //把握分
99 StatisticData interface{} `json:"statisticData,omitempty"` //统计数据(是否收藏/点赞 浏览数 点赞总数 评论数 106 StatisticData interface{} `json:"statisticData,omitempty"` //统计数据(是否收藏/点赞 浏览数 点赞总数 评论数
100 //模板 107 //模板
101 ChanceType interface{} `json:"chanceType,omitempty"` //机会类型 108 ChanceType interface{} `json:"chanceType,omitempty"` //机会类型
@@ -107,8 +114,8 @@ type AchievementDetailResponse struct { @@ -107,8 +114,8 @@ type AchievementDetailResponse struct {
107 114
108 type UserGraspInfo struct { 115 type UserGraspInfo struct {
109 Provider *BaseUserInfo `json:"provider"` 116 Provider *BaseUserInfo `json:"provider"`
110 - GraspScore float64 `json:"graspScore"` //把握分  
111 - GraspScorePercent float64 `json:"graspScorePercent"` //把握分百分比 117 + GraspScore GraspScore `json:"graspScore"` //把握分
  118 + //GraspScorePercent float64 `json:"graspScorePercent"` //把握分百分比
112 Type int `json:"type"` //1:把握人 2:提供者 119 Type int `json:"type"` //1:把握人 2:提供者
113 } 120 }
114 121
@@ -332,6 +332,24 @@ type ChanceCommentItemOrm struct { @@ -332,6 +332,24 @@ type ChanceCommentItemOrm struct {
332 SenderUserId int64 `orm:"column(sender_user_id)"` 332 SenderUserId int64 `orm:"column(sender_user_id)"`
333 } 333 }
334 334
  335 +//我的评论
  336 +type ChanceReviseItemOrm struct {
  337 + CommChanceItemOrm
  338 + MsgItemOrm
  339 +}
  340 +
  341 +//消息
  342 +type MsgItemOrm struct {
  343 + MsgId int64 `orm:"column(msg_id)"`
  344 + MsgTime time.Time `orm:"column(msg_time)"` //收藏时间
  345 + //评论对象类型
  346 + SourceType int `orm:"column(source_type)"`
  347 + SourceId int64 `orm:"column(source_id)"`
  348 + IsRead int64 `orm:"column(is_read)"`
  349 + ReceiveUserId int64 `orm:"column(receive_user_id)"`
  350 + SenderUserId int64 `orm:"column(sender_user_id)"`
  351 +}
  352 +
335 //通用 机会orm对象 353 //通用 机会orm对象
336 type CommChanceItemOrm struct { 354 type CommChanceItemOrm struct {
337 ChanceId int64 `orm:"column(chance_id)"` 355 ChanceId int64 `orm:"column(chance_id)"`
@@ -544,11 +562,16 @@ type MsgCommonListItem struct { @@ -544,11 +562,16 @@ type MsgCommonListItem struct {
544 CommentedData interface{} `json:"commentedData,omitempty"` 562 CommentedData interface{} `json:"commentedData,omitempty"`
545 563
546 SourceType int `json:"sourceType,omitempty"` //类型 1:机会 2:评论 564 SourceType int `json:"sourceType,omitempty"` //类型 1:机会 2:评论
  565 + SourceId int64 `json:"sourceId,omitempty"` //类型 1:机会 2:评论
547 ChanceStatus int `json:"chanceStatus"` //0:正常 1.删除 2.关闭 566 ChanceStatus int `json:"chanceStatus"` //0:正常 1.删除 2.关闭
548 ReviewStatus int `json:"reviewStatus"` //审核状态 567 ReviewStatus int `json:"reviewStatus"` //审核状态
549 568
550 IsRead bool `json:"isRead"` 569 IsRead bool `json:"isRead"`
551 ChanceId int64 `json:"chanceId"` //机会编号 570 ChanceId int64 `json:"chanceId"` //机会编号
  571 + ChanceReviseLogId int64 `json:"chanceReviseLogId,omitempty"` //机会补充编号
  572 +}
  573 +
  574 +type MsgItem struct {
552 } 575 }
553 type ChanceItem struct { 576 type ChanceItem struct {
554 Id int64 `json:"id"` 577 Id int64 `json:"id"`
@@ -3,9 +3,10 @@ package protocol @@ -3,9 +3,10 @@ package protocol
3 const ( 3 const (
4 SourceTypeChance = 1 //机会 4 SourceTypeChance = 1 //机会
5 SourceTypeComment = 2 //机会评论 5 SourceTypeComment = 2 //机会评论
6 - SourceTypeBulletin = 3 6 + SourceTypeBulletin = 3 //公告
7 SourceTypeAchievement = 4 //成果 7 SourceTypeAchievement = 4 //成果
8 SourceTypeAchievementComment = 5 //成果评论 8 SourceTypeAchievementComment = 5 //成果评论
  9 + SourceTypeChanceReviseLog = 6 //机会变更
9 ) 10 )
10 11
11 /*IComment */ 12 /*IComment */
@@ -72,6 +72,7 @@ const ( @@ -72,6 +72,7 @@ const (
72 MsgTypeAuditBy = 16 //机会被审核消息-我提交的 72 MsgTypeAuditBy = 16 //机会被审核消息-我提交的
73 MsgTypeComment = 32 //评论 73 MsgTypeComment = 32 //评论
74 MsgTypeThumbUp = 64 //点赞 74 MsgTypeThumbUp = 64 //点赞
  75 + MsgTypeChanceRevise = 128 //补充机会
75 ) 76 )
76 77
77 var ( 78 var (
@@ -81,6 +82,7 @@ var ( @@ -81,6 +82,7 @@ var (
81 82
82 MessageZanChance = "点赞了您发布的机会" 83 MessageZanChance = "点赞了您发布的机会"
83 MessageZanComment = "点赞了您发布的评论" 84 MessageZanComment = "点赞了您发布的评论"
  85 + MessageChanceRevise = "补充了您发布的%v机会信息"
84 ) 86 )
85 87
86 /*MessageCenter */ 88 /*MessageCenter */
@@ -258,6 +260,16 @@ type MsgChanceThumbUpResponse struct { @@ -258,6 +260,16 @@ type MsgChanceThumbUpResponse struct {
258 Total int `json:"total"` 260 Total int `json:"total"`
259 } 261 }
260 262
  263 +/*MsgChanceRevise 消息中心-机会补充*/
  264 +type MsgChanceReviseRequest struct {
  265 + LastId int64 `json:"lastId"`
  266 + PageSize int `json:"pageSize" valid:"Required"`
  267 +}
  268 +type MsgChanceReviseResponse struct {
  269 + List []MsgCommonListItem `json:"list"`
  270 + Total int `json:"total"`
  271 +}
  272 +
261 //我的审核机会列表 273 //我的审核机会列表
262 type MsgChanceApproveItemOrm struct { 274 type MsgChanceApproveItemOrm struct {
263 ChanceUserId int64 `orm:"column(chance_user_id)"` 275 ChanceUserId int64 `orm:"column(chance_user_id)"`
@@ -393,6 +393,14 @@ func init() { @@ -393,6 +393,14 @@ func init() {
393 393
394 beego.GlobalControllerRouter["opp/controllers/v1:MessageController"] = append(beego.GlobalControllerRouter["opp/controllers/v1:MessageController"], 394 beego.GlobalControllerRouter["opp/controllers/v1:MessageController"] = append(beego.GlobalControllerRouter["opp/controllers/v1:MessageController"],
395 beego.ControllerComments{ 395 beego.ControllerComments{
  396 + Method: "MsgChanceRevise",
  397 + Router: `/msgChanceRevise`,
  398 + AllowHTTPMethods: []string{"post"},
  399 + MethodParams: param.Make(),
  400 + Params: nil})
  401 +
  402 + beego.GlobalControllerRouter["opp/controllers/v1:MessageController"] = append(beego.GlobalControllerRouter["opp/controllers/v1:MessageController"],
  403 + beego.ControllerComments{
396 Method: "MsgChanceSubmit", 404 Method: "MsgChanceSubmit",
397 Router: `/msgChanceSubmit`, 405 Router: `/msgChanceSubmit`,
398 AllowHTTPMethods: []string{"post"}, 406 AllowHTTPMethods: []string{"post"},
@@ -3,6 +3,7 @@ package agg @@ -3,6 +3,7 @@ package agg
3 import ( 3 import (
4 "fmt" 4 "fmt"
5 "gitlab.fjmaimaimai.com/mmm-go/gocomm/pkg/log" 5 "gitlab.fjmaimaimai.com/mmm-go/gocomm/pkg/log"
  6 + "opp/internal/utils"
6 "opp/models" 7 "opp/models"
7 "opp/protocol" 8 "opp/protocol"
8 ) 9 )
@@ -197,3 +198,41 @@ func ValidChancePermission(uid, cid int64, items []*protocol.CommonListItem) (er @@ -197,3 +198,41 @@ func ValidChancePermission(uid, cid int64, items []*protocol.CommonListItem) (er
197 } 198 }
198 return 199 return
199 } 200 }
  201 +
  202 +//设置机会详情
  203 +func SetChanceItem(header *protocol.RequestHeader, chance protocol.CommChanceItemOrm) (item protocol.ChanceItem, chanceStatus int) {
  204 + var provider *protocol.BaseUserInfo
  205 + var err error
  206 + if provider, err = GetUserBaseInfo(chance.ChanceUserId, header.CompanyId); err != nil {
  207 + chanceStatus = protocol.ChanceStatusDelete
  208 + log.Error(err)
  209 + return
  210 + }
  211 + if len(chance.SourceContent) == 0 || chance.ChanceEnableStatus == 0 { //机会删除
  212 + chanceStatus = protocol.ChanceStatusDelete
  213 + }
  214 + if chance.Status == models.ChanceStatusClose { //机会关闭
  215 + chanceStatus = protocol.ChanceStatusClose
  216 + return
  217 + }
  218 +
  219 + item = protocol.ChanceItem{
  220 + Id: chance.ChanceId,
  221 + Provider: provider,
  222 + CreateTime: chance.CreateTime.Unix() * 1000,
  223 + //PublicStatus: chance.PublishStatus,
  224 + }
  225 + utils.JsonUnmarshal(chance.SourceContent, &item.FormList)
  226 + item.FormList = ClearEmptyForm(item.FormList)
  227 + utils.JsonUnmarshal(chance.Images, &item.Pictures)
  228 + utils.JsonUnmarshal(chance.Voices, &item.Speechs)
  229 + utils.JsonUnmarshal(chance.Videos, &item.Videos)
  230 + return item, chanceStatus
  231 +}
  232 +
  233 +func SetMsgItem(header *protocol.RequestHeader, msg protocol.MsgItemOrm, commItem *protocol.MsgCommonListItem) {
  234 + commItem.MsgId = msg.MsgId
  235 + commItem.MsgTime = msg.MsgTime.Unix() * 1000
  236 + commItem.IsRead = msg.IsRead == 1
  237 + commItem.SourceId = msg.SourceId
  238 +}
@@ -44,6 +44,10 @@ func AchievementPool(header *protocol.RequestHeader, request *protocol.Achieveme @@ -44,6 +44,10 @@ func AchievementPool(header *protocol.RequestHeader, request *protocol.Achieveme
44 item := ormItems[i] 44 item := ormItems[i]
45 rspItem := &protocol.AchievementCommonListItem{ 45 rspItem := &protocol.AchievementCommonListItem{
46 Achievement: GetAchievementItem(header, item), 46 Achievement: GetAchievementItem(header, item),
  47 + GraspScore: protocol.GraspScore{
  48 + GraspScore: item.GraspScore,
  49 + GraspScorePercent: item.GraspScore,
  50 + },
47 StatisticData: GetStatisticData(header, item.StaticDataOrm, item.AchievementId), 51 StatisticData: GetStatisticData(header, item.StaticDataOrm, item.AchievementId),
48 ChanceTemplate: getTemplate(item.TemplateId), 52 ChanceTemplate: getTemplate(item.TemplateId),
49 ChanceType: getChanceType(item.ChanceTypeId), 53 ChanceType: getChanceType(item.ChanceTypeId),
@@ -69,8 +73,8 @@ func GetAchievementItem(header *protocol.RequestHeader, from protocol.CommAchiev @@ -69,8 +73,8 @@ func GetAchievementItem(header *protocol.RequestHeader, from protocol.CommAchiev
69 Provider: provider, 73 Provider: provider,
70 CreateTime: from.CreateTime.Unix() * 1000, 74 CreateTime: from.CreateTime.Unix() * 1000,
71 Content: from.SourceContent, 75 Content: from.SourceContent,
72 - GraspScore: from.GraspScore,  
73 - GraspScorePercent: from.GraspScore, 76 + //GraspScore: from.GraspScore,
  77 + //GraspScorePercent: from.GraspScore,
74 } 78 }
75 jsonUnmarshal(from.Images, &item.Pictures) 79 jsonUnmarshal(from.Images, &item.Pictures)
76 } 80 }
@@ -127,6 +131,10 @@ func AchievementDetail(header *protocol.RequestHeader, request *protocol.Achieve @@ -127,6 +131,10 @@ func AchievementDetail(header *protocol.RequestHeader, request *protocol.Achieve
127 rsp = &protocol.AchievementDetailResponse{} 131 rsp = &protocol.AchievementDetailResponse{}
128 { 132 {
129 rsp.Achievement = GetAchievementItem(header, item) 133 rsp.Achievement = GetAchievementItem(header, item)
  134 + rsp.GraspScore = protocol.GraspScore{
  135 + GraspScore: item.GraspScore,
  136 + GraspScorePercent: item.GraspScore,
  137 + }
130 rsp.StatisticData = GetStatisticData(header, item.StaticDataOrm, item.AchievementId) 138 rsp.StatisticData = GetStatisticData(header, item.StaticDataOrm, item.AchievementId)
131 rsp.ChanceTemplate = getTemplate(item.TemplateId) 139 rsp.ChanceTemplate = getTemplate(item.TemplateId)
132 rsp.ChanceType = getChanceType(item.ChanceTypeId) 140 rsp.ChanceType = getChanceType(item.ChanceTypeId)
@@ -139,8 +147,10 @@ func AchievementDetail(header *protocol.RequestHeader, request *protocol.Achieve @@ -139,8 +147,10 @@ func AchievementDetail(header *protocol.RequestHeader, request *protocol.Achieve
139 newParticipant := func(user *protocol.BaseUserInfo, score float64, t int) protocol.UserGraspInfo { 147 newParticipant := func(user *protocol.BaseUserInfo, score float64, t int) protocol.UserGraspInfo {
140 return protocol.UserGraspInfo{ 148 return protocol.UserGraspInfo{
141 Provider: user, 149 Provider: user,
  150 + GraspScore: protocol.GraspScore{
142 GraspScore: score, 151 GraspScore: score,
143 GraspScorePercent: score, 152 GraspScorePercent: score,
  153 + },
144 Type: t, 154 Type: t,
145 } 155 }
146 } 156 }
@@ -168,43 +178,16 @@ func AchievementDetail(header *protocol.RequestHeader, request *protocol.Achieve @@ -168,43 +178,16 @@ func AchievementDetail(header *protocol.RequestHeader, request *protocol.Achieve
168 for i := range chances { 178 for i := range chances {
169 chance := chances[i] 179 chance := chances[i]
170 commItem := &protocol.CommonListItem{} 180 commItem := &protocol.CommonListItem{}
171 - commItem.Chance, commItem.ChanceStatus = SetChanceItem(header, chance.CommChanceItemOrm) 181 + commItem.Chance, commItem.ChanceStatus = agg.SetChanceItem(header, chance.CommChanceItemOrm)
172 //commItem.ChanceTemplate = getTemplate(chance.TemplateId) 182 //commItem.ChanceTemplate = getTemplate(chance.TemplateId)
173 //commItem.ChanceType = getChanceType(chance.ChanceTypeId) 183 //commItem.ChanceType = getChanceType(chance.ChanceTypeId)
  184 + //commItem.Score=protocol.GraspScore{
  185 + // GraspScore:chance.,
  186 + // GraspScorePercent:chance.GraspScore,
  187 + //}
174 commItem.ChanceId = chance.ChanceId 188 commItem.ChanceId = chance.ChanceId
175 rsp.SourceChance = append(rsp.SourceChance, commItem) 189 rsp.SourceChance = append(rsp.SourceChance, commItem)
176 } 190 }
177 agg.ValidChancePermission(header.UserId, header.CompanyId, rsp.SourceChance) 191 agg.ValidChancePermission(header.UserId, header.CompanyId, rsp.SourceChance)
178 return 192 return
179 } 193 }
180 -  
181 -//设置机会详情  
182 -func SetChanceItem(header *protocol.RequestHeader, chance protocol.CommChanceItemOrm) (item protocol.ChanceItem, chanceStatus int) {  
183 - var provider *protocol.BaseUserInfo  
184 - var err error  
185 - if provider, err = agg.GetUserBaseInfo(chance.ChanceUserId, header.CompanyId); err != nil {  
186 - chanceStatus = protocol.ChanceStatusDelete  
187 - log.Error(err)  
188 - return  
189 - }  
190 - if len(chance.SourceContent) == 0 || chance.ChanceEnableStatus == 0 { //机会删除  
191 - chanceStatus = protocol.ChanceStatusDelete  
192 - }  
193 - if chance.Status == models.ChanceStatusClose { //机会关闭  
194 - chanceStatus = protocol.ChanceStatusClose  
195 - return  
196 - }  
197 -  
198 - item = protocol.ChanceItem{  
199 - Id: chance.ChanceId,  
200 - Provider: provider,  
201 - CreateTime: chance.CreateTime.Unix() * 1000,  
202 - //PublicStatus: chance.PublishStatus,  
203 - }  
204 - jsonUnmarshal(chance.SourceContent, &item.FormList)  
205 - item.FormList = clearEmptyForm(item.FormList)  
206 - jsonUnmarshal(chance.Images, &item.Pictures)  
207 - jsonUnmarshal(chance.Voices, &item.Speechs)  
208 - jsonUnmarshal(chance.Videos, &item.Videos)  
209 - return item, chanceStatus  
210 -}  
@@ -12,6 +12,7 @@ import ( @@ -12,6 +12,7 @@ import (
12 "opp/models" 12 "opp/models"
13 "opp/protocol" 13 "opp/protocol"
14 "opp/services/agg" 14 "opp/services/agg"
  15 + "reflect"
15 "strings" 16 "strings"
16 "time" 17 "time"
17 ) 18 )
@@ -576,6 +577,9 @@ func ChanceUpdate(header *protocol.RequestHeader, request *protocol.ChanceUpdate @@ -576,6 +577,9 @@ func ChanceUpdate(header *protocol.RequestHeader, request *protocol.ChanceUpdate
576 return 577 return
577 } 578 }
578 auditConfig = &protocol.AuditConfig{NoApprover: template.NoApprover} 579 auditConfig = &protocol.AuditConfig{NoApprover: template.NoApprover}
  580 +
  581 + go CheckChanceUpdate(header, chance, request)
  582 +
579 orm := orm.NewOrm() 583 orm := orm.NewOrm()
580 orm.Begin() 584 orm.Begin()
581 //6.更新文件 585 //6.更新文件
@@ -707,6 +711,142 @@ func ChanceUpdate(header *protocol.RequestHeader, request *protocol.ChanceUpdate @@ -707,6 +711,142 @@ func ChanceUpdate(header *protocol.RequestHeader, request *protocol.ChanceUpdate
707 return 711 return
708 } 712 }
709 713
  714 +//检查机会更新
  715 +func CheckChanceUpdate(header *protocol.RequestHeader, chance *models.Chance, request *protocol.ChanceUpdateRequest) {
  716 + var (
  717 + //chanceData *models.ChanceData
  718 + isSaveLog bool = false
  719 + chanceReviseLog *models.ChanceReviseLog
  720 + message string
  721 + )
  722 + defer func() {
  723 + if p := recover(); p != nil {
  724 + log.Error(p)
  725 + } else {
  726 + log.Debug("")
  727 + }
  728 + }()
  729 + if header.UserId == chance.UserId {
  730 + return
  731 + }
  732 + type ChanceModifyLog struct {
  733 + DiffContents interface{} `json:"diffContents"`
  734 + Speechs []protocol.Speech `json:"speechs"`
  735 + Pictures []protocol.Picture `json:"pictures"`
  736 + Videos []protocol.Video `json:"videos"`
  737 + }
  738 + var modifyLog = ChanceModifyLog{}
  739 + diffFormList := func(source string, dis []*protocol.Form) {
  740 + type DiffContent struct {
  741 + Content string `json:"content"`
  742 + }
  743 + var (
  744 + src []*protocol.Form
  745 + mapForm map[string]*protocol.Form = make(map[string]*protocol.Form)
  746 + diffStructs = []DiffContent{}
  747 + )
  748 + jsonUnmarshal(source, &src)
  749 + for i := range src {
  750 + mapForm[src[i].Label] = src[i]
  751 + }
  752 + for i := range dis {
  753 + isDiff := false
  754 + srcValue := ""
  755 + if v, ok := mapForm[dis[i].Label]; ok {
  756 + srcValue = v.Value
  757 + if dis[i].Value != v.Value {
  758 + isDiff = true
  759 + }
  760 + } else {
  761 + isDiff = true
  762 + }
  763 + if isDiff {
  764 + diffStructs = append(diffStructs, DiffContent{
  765 + Content: fmt.Sprintf("将“%v”由“%v”改为 “%v“", dis[i].Label, srcValue, dis[i].Value)})
  766 + if !isSaveLog {
  767 + isSaveLog = true
  768 + }
  769 + }
  770 + }
  771 + modifyLog.DiffContents = diffStructs
  772 + }
  773 +
  774 + diffChanceData := func() {
  775 + var (
  776 + speechs []protocol.Speech
  777 + pictures []protocol.Picture
  778 + videos []protocol.Video
  779 + )
  780 + if chanceData, e := models.GetChanceDataByChanceId(chance.Id); e == nil {
  781 + jsonUnmarshal(chanceData.Speechs, &speechs)
  782 + jsonUnmarshal(chanceData.Images, &pictures)
  783 + jsonUnmarshal(chanceData.Videos, &videos)
  784 + if !reflect.DeepEqual(request.Videos, videos) || !reflect.DeepEqual(request.Pictures, pictures) {
  785 + if !isSaveLog {
  786 + isSaveLog = true
  787 + }
  788 + modifyLog.Videos = request.Videos
  789 + }
  790 + if !reflect.DeepEqual(request.Pictures, pictures) {
  791 + if !isSaveLog {
  792 + isSaveLog = true
  793 + }
  794 + modifyLog.Pictures = request.Pictures
  795 + }
  796 + if !reflect.DeepEqual(request.Speechs, speechs) {
  797 + if !isSaveLog {
  798 + isSaveLog = true
  799 + }
  800 + modifyLog.Speechs = request.Speechs
  801 + }
  802 + } else {
  803 + if !isSaveLog {
  804 + isSaveLog = true
  805 + }
  806 + modifyLog.Speechs = request.Speechs
  807 + modifyLog.Videos = request.Videos
  808 + modifyLog.Speechs = request.Speechs
  809 + }
  810 + }
  811 +
  812 + diffFormList(chance.SourceContent, request.FormList)
  813 + diffChanceData()
  814 +
  815 + if isSaveLog {
  816 + orm := orm.NewOrm()
  817 + orm.Begin()
  818 + //保存修改详情
  819 + chanceReviseLog = &models.ChanceReviseLog{
  820 + Id: idgen.Next(),
  821 + ChanceId: chance.Id,
  822 + UserCompanyId: header.UserId,
  823 + Data: common.AssertJson(modifyLog),
  824 + CreateAt: time.Now(),
  825 + }
  826 + if _, e := orm.Insert(chanceReviseLog); e != nil {
  827 + log.Error(e)
  828 + orm.Rollback()
  829 + return
  830 + }
  831 + if chanceType, err := models.GetChanceTypeById(chance.ChanceTypeId); err != nil {
  832 + log.Error(err)
  833 + orm.Rollback()
  834 + return
  835 + } else {
  836 + message = fmt.Sprintf(protocol.MessageChanceRevise, chanceType.Name)
  837 + }
  838 + //发送修改机会消息
  839 + if err := agg.SendMsgWithHeader(header, chance.UserId, "", chanceReviseLog.Id, protocol.SourceTypeChanceReviseLog, message, protocol.MsgTypeChanceRevise, chance.Id); err != nil {
  840 + log.Error(err)
  841 + orm.Rollback()
  842 + return
  843 + }
  844 +
  845 + //TODO:保存变更日志
  846 + orm.Commit()
  847 + }
  848 +}
  849 +
710 //修改公开状态 850 //修改公开状态
711 func ChanceChangePublish(header *protocol.RequestHeader, request *protocol.ChanceChangePublishRequest) (rsp *protocol.ChanceChangePublishResponse, err error) { 851 func ChanceChangePublish(header *protocol.RequestHeader, request *protocol.ChanceChangePublishRequest) (rsp *protocol.ChanceChangePublishResponse, err error) {
712 var ( 852 var (
@@ -586,6 +586,37 @@ func MsgChanceThumbUp(header *protocol.RequestHeader, request *protocol.MsgChanc @@ -586,6 +586,37 @@ func MsgChanceThumbUp(header *protocol.RequestHeader, request *protocol.MsgChanc
586 return 586 return
587 } 587 }
588 588
  589 +//消息中心-机会补充
  590 +func MsgChanceRevise(header *protocol.RequestHeader, request *protocol.MsgChanceReviseRequest) (rsp *protocol.MsgChanceReviseResponse, err error) {
  591 + var (
  592 + myChances []protocol.ChanceReviseItemOrm
  593 + total int
  594 + )
  595 +
  596 + if total, err = models.GetChanceCommentMsg(header.UserId, request.LastId, request.PageSize, protocol.MsgTypeThumbUp, &myChances); err != nil {
  597 + if err == orm.ErrNoRows {
  598 + err = nil
  599 + return
  600 + }
  601 + log.Error(err)
  602 + return
  603 + }
  604 + rsp = &protocol.MsgChanceReviseResponse{Total: total}
  605 + rsp.List = make([]protocol.MsgCommonListItem, 0)
  606 + for i := 0; i < len(myChances); i++ {
  607 + chance := myChances[i]
  608 + commItem := protocol.MsgCommonListItem{}
  609 + commItem.Chance, commItem.ChanceStatus = agg.SetChanceItem(header, chance.CommChanceItemOrm)
  610 + agg.SetMsgItem(header, chance.MsgItemOrm, &commItem)
  611 +
  612 + commItem.ChanceId = chance.ChanceId
  613 + commItem.ReviewStatus = chance.ReviewStatus
  614 + //commItem.ChanceReviseLogId = chance.SourceId
  615 + rsp.List = append(rsp.List, commItem)
  616 + }
  617 + return
  618 +}
  619 +
589 //H5公告详情 620 //H5公告详情
590 func H5Announcement(header *protocol.RequestHeader, request *protocol.AnnouncementRequest) (rsp *protocol.AnnouncementResponse, err error) { 621 func H5Announcement(header *protocol.RequestHeader, request *protocol.AnnouncementRequest) (rsp *protocol.AnnouncementResponse, err error) {
591 var ( 622 var (