cp_relation.go 13.6 KB
Newer Older
chenweijian's avatar
chenweijian committed
1 2 3 4
package cp_r

import (
	"encoding/json"
chenweijian's avatar
chenweijian committed
5
	"fmt"
chenweijian's avatar
chenweijian committed
6
	"git.hilo.cn/hilo-common/_const/common"
chenweijian's avatar
chenweijian committed
7 8 9 10
	"git.hilo.cn/hilo-common/_const/enum/diamond_e"
	"git.hilo.cn/hilo-common/domain"
	"git.hilo.cn/hilo-common/mycontext"
	"git.hilo.cn/hilo-common/myerr/comerr"
hujiebin's avatar
hujiebin committed
11
	"git.hilo.cn/hilo-common/resource/mysql"
chenweijian's avatar
chenweijian committed
12
	"git.hilo.cn/hilo-common/sdk/tencentyun"
chenweijian's avatar
chenweijian committed
13
	"git.hilo.cn/hilo-common/txop/bag_tx"
chenweijian's avatar
chenweijian committed
14
	"git.hilo.cn/hilo-common/txop/msg"
chenweijian's avatar
chenweijian committed
15
	"git.hilo.cn/hilo-common/utils"
chenweijian's avatar
chenweijian committed
16 17 18
	"github.com/gin-gonic/gin"
	"hilo-user/_const/enum/cp_e"
	"hilo-user/cv/cp_cv"
chenweijian's avatar
chenweijian committed
19
	"hilo-user/cv/user_cv"
chenweijian's avatar
chenweijian committed
20
	"hilo-user/domain/cache/user_c"
chenweijian's avatar
chenweijian committed
21 22 23
	"hilo-user/domain/model/cp_m"
	"hilo-user/domain/model/diamond_m"
	"hilo-user/domain/model/user_m"
chenweijian's avatar
chenweijian committed
24
	"hilo-user/domain/service/cp_s"
chenweijian's avatar
chenweijian committed
25
	"hilo-user/myerr"
chenweijian's avatar
chenweijian committed
26
	"hilo-user/myerr/bizerr"
chenweijian's avatar
chenweijian committed
27 28
	"hilo-user/req"
	"hilo-user/resp"
chenweijian's avatar
chenweijian committed
29
	"strconv"
chenweijian's avatar
chenweijian committed
30
	"time"
chenweijian's avatar
chenweijian committed
31 32 33 34
)

// @Tags cp关系
// @Summary 检查用户是否绑定了cp
chenweijian's avatar
chenweijian committed
35
// @Param externalId query string true "用户的externalId"
chenweijian's avatar
chenweijian committed
36 37 38 39
// @Success 200 {object} cp_cv.CheckCpRelationRes
// @Router /v2/cp/relation/check [get]
func CheckUserCpRelation(c *gin.Context) (*mycontext.MyContext, error) {
	myCtx := mycontext.CreateMyContext(c.Keys)
chenweijian's avatar
chenweijian committed
40
	externalId := c.Query("externalId")
chenweijian's avatar
chenweijian committed
41 42 43
	if externalId == "" {
		return myCtx, bizerr.InvalidParameter
	}
chenweijian's avatar
chenweijian committed
44 45 46 47 48 49

	_, lang, err := req.GetUserIdLang(c, myCtx)
	if err != nil {
		return myCtx, err
	}

chenweijian's avatar
chenweijian committed
50 51 52 53
	if externalId == "" {
		return myCtx, bizerr.InvalidParameter
	}

chenweijian's avatar
chenweijian committed
54
	model := domain.CreateModelContext(myCtx)
chenweijian's avatar
chenweijian committed
55
	user, err := user_m.GetUserByExtId(model, externalId)
chenweijian's avatar
chenweijian committed
56 57 58 59 60 61 62 63 64
	if err != nil {
		return myCtx, err
	}

	cp, err := cp_m.GetCp(model, user.ID)
	if err != nil {
		return myCtx, err
	}
	if cp.Id > 0 {
chenweijian's avatar
chenweijian committed
65
		return myCtx, myerr.ToLocal(msg.GetErrByLanguage(model, common.MSG_ID_ALREADY_HAS_CP, lang, comerr.AlreadyHasCp))
chenweijian's avatar
chenweijian committed
66 67 68 69
	}
	msg, err := msg.GetResMultiTextBy(model, common.MSG_ID_INVITE_CP, lang)
	if err != nil {
		return myCtx, err
chenweijian's avatar
chenweijian committed
70 71
	}

chenweijian's avatar
chenweijian committed
72
	resp.ResponseOk(c, cp_cv.CheckCpRelationRes{Diamond: cp_e.CpRelationInviteDiamond, Msg: msg})
chenweijian's avatar
chenweijian committed
73 74 75 76
	return myCtx, nil
}

// @Tags cp关系
chenweijian's avatar
chenweijian committed
77
// @Summary 发送cp邀请/发起解除cp
chenweijian's avatar
chenweijian committed
78
// @Param externalId formData string true "对方的externalId"
chenweijian's avatar
chenweijian committed
79
// @Param type formData int true "类型1.发起邀请2.发起解除"
chenweijian's avatar
chenweijian committed
80
// @Success 200
chenweijian's avatar
chenweijian committed
81 82
// @Router /v2/cp/relation [post]
func CpRelation(c *gin.Context) (*mycontext.MyContext, error) {
chenweijian's avatar
chenweijian committed
83
	myCtx := mycontext.CreateMyContext(c.Keys)
chenweijian's avatar
chenweijian committed
84
	externalId := c.PostForm("externalId")
chenweijian's avatar
chenweijian committed
85 86 87
	if externalId == "" {
		return myCtx, bizerr.InvalidParameter
	}
chenweijian's avatar
chenweijian committed
88 89 90 91 92 93

	myUserId, lang, err := req.GetUserIdLang(c, myCtx)
	if err != nil {
		return myCtx, err
	}

chenweijian's avatar
chenweijian committed
94 95 96
	optType, err := strconv.Atoi(c.PostForm("type"))
	if err != nil || optType > 2 || optType < 1 {
		return myCtx, bizerr.InvalidParameter
chenweijian's avatar
chenweijian committed
97 98
	}

chenweijian's avatar
chenweijian committed
99
	if optType == 1 { // 邀请
chenweijian's avatar
chenweijian committed
100
		err = cp_s.InviteCpRelation(myCtx, myUserId, externalId, lang)
chenweijian's avatar
chenweijian committed
101
		if err != nil {
chenweijian's avatar
chenweijian committed
102 103
			myCtx.Log.Errorf("InviteCpRelation myUserId:%d, err:%v", myUserId, err)
			return myCtx, err
chenweijian's avatar
chenweijian committed
104
		}
chenweijian's avatar
chenweijian committed
105 106
	} else {
		// 发起解除
chenweijian's avatar
chenweijian committed
107
		err = cp_s.CancelCpRelation(myCtx, myUserId, externalId, lang)
chenweijian's avatar
chenweijian committed
108
		if err != nil {
chenweijian's avatar
chenweijian committed
109 110
			myCtx.Log.Errorf("CancelCpRelation myUserId:%d, err:%v", myUserId, err)
			return myCtx, err
chenweijian's avatar
chenweijian committed
111
		}
chenweijian's avatar
chenweijian committed
112 113
	}

chenweijian's avatar
chenweijian committed
114
	resp.ResponseOk(c, nil)
chenweijian's avatar
chenweijian committed
115 116
	return myCtx, nil
}
chenweijian's avatar
chenweijian committed
117 118 119

// @Tags cp关系
// @Summary 回应cp邀请
chenweijian's avatar
chenweijian committed
120
// @Param externalId formData string true "对方用户的externalId"
chenweijian's avatar
chenweijian committed
121 122 123 124 125
// @Param type formData int true "类型1.接受2.拒绝"
// @Success 200
// @Router /v2/cp/relation/invite/reply [post]
func ReplyCpInvite(c *gin.Context) (*mycontext.MyContext, error) {
	myCtx := mycontext.CreateMyContext(c.Keys)
chenweijian's avatar
chenweijian committed
126
	externalId := c.PostForm("externalId")
chenweijian's avatar
chenweijian committed
127
	if externalId == "" {
chenweijian's avatar
chenweijian committed
128
		return myCtx, myerr.WrapErr(bizerr.InvalidParameter)
chenweijian's avatar
chenweijian committed
129
	}
chenweijian's avatar
chenweijian committed
130 131
	optType, err := strconv.Atoi(c.PostForm("type"))
	if err != nil || optType > 2 || optType < 1 {
chenweijian's avatar
chenweijian committed
132
		return myCtx, myerr.WrapErr(bizerr.InvalidParameter)
chenweijian's avatar
chenweijian committed
133 134 135 136 137 138 139 140 141 142 143 144
	}

	myUserId, lang, err := req.GetUserIdLang(c, myCtx)
	if err != nil {
		return myCtx, err
	}

	model := domain.CreateModelContext(myCtx)
	user, err := user_m.GetUser(model, myUserId)
	if err != nil {
		return myCtx, err
	}
chenweijian's avatar
chenweijian committed
145
	userSender, err := user_m.GetUserByExtId(model, externalId)
chenweijian's avatar
chenweijian committed
146 147 148
	if err != nil {
		return myCtx, err
	}
chenweijian's avatar
chenweijian committed
149
	if userSender.ID == myUserId {
chenweijian's avatar
chenweijian committed
150
		return myCtx, myerr.WrapErr(bizerr.InvalidParameter)
chenweijian's avatar
chenweijian committed
151
	}
chenweijian's avatar
chenweijian committed
152

chenweijian's avatar
chenweijian committed
153
	cpRecord, err := cp_m.GetCpInvite(model, userSender.ID, user.ID, cp_e.CpInvite)
chenweijian's avatar
chenweijian committed
154 155 156 157 158
	if err != nil {
		model.Log.Errorf("ReplyCpInvite userSender:%d, user:%d, err:%v", userSender.ID, user.ID, err)
		return myCtx, err
	}
	if cpRecord == nil || cpRecord.Id == 0 {
chenweijian's avatar
chenweijian committed
159
		return myCtx, myerr.ToLocal(msg.GetErrByLanguage(model, common.MSG_ID_ALREADY_EXPIRED, lang, comerr.AlreadyExpired))
chenweijian's avatar
chenweijian committed
160 161
	}

chenweijian's avatar
chenweijian committed
162 163 164 165 166 167 168
	if optType == 1 { // 接受的时候
		// 自己是否有cp了
		myCp, err := cp_m.GetCp(model, myUserId)
		if err != nil {
			return myCtx, err
		}
		if myCp.Id > 0 {
chenweijian's avatar
chenweijian committed
169
			return myCtx, myerr.ToLocal(msg.GetErrByLanguage(model, common.MSG_ID_ALREADY_HAS_CP, lang, comerr.AlreadyHasCp))
chenweijian's avatar
chenweijian committed
170 171 172 173 174 175 176
		}
		// 对方是否已经有cp了
		senderCp, err := cp_m.GetCp(model, userSender.ID)
		if err != nil {
			return myCtx, err
		}
		if senderCp.Id > 0 {
chenweijian's avatar
chenweijian committed
177
			return myCtx, myerr.ToLocal(msg.GetErrByLanguage(model, common.MSG_ID_ALREADY_HAS_CP, lang, comerr.AlreadyHasCp))
chenweijian's avatar
chenweijian committed
178
		}
chenweijian's avatar
chenweijian committed
179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194
	}
	err = model.Transaction(func(model *domain.Model) error {
		// 更新邀请状态
		updateStatus := cp_e.CpInviteAccept
		if optType == 2 { // 拒接
			updateStatus = cp_e.CpInviteRefuse
		}
		err = cp_m.UpdateStatusCpInvite(model, cpRecord.Id, updateStatus)
		if err != nil {
			model.Log.Errorf("ReplyCpInvite userSender:%d, user:%d, status:%d, err:%v", userSender.ID, user.ID, updateStatus, err)
			return err
		}

		var msgData []byte
		if optType == 1 { // 接受
			// 写入cp关系表
hujiebin's avatar
hujiebin committed
195
			cpId, err := cp_m.CreateCp(model, userSender.ID, user.ID)
chenweijian's avatar
chenweijian committed
196 197 198 199
			if err != nil {
				model.Log.Errorf("ReplyCpInvite userSender:%d, user:%d, status:%d, err:%v", userSender.ID, user.ID, updateStatus, err)
				return err
			}
hujiebin's avatar
hujiebin committed
200 201 202 203 204
			// 初始化cp等级
			if err := cp_m.InitCpLevel(model, mysql.ID(cpId), userSender.ID, user.ID); err != nil {
				model.Log.Errorf("ReplyCpInvite InitCpLevel fail:%v-%v-%v", userSender.ID, user.ID, err)
				return err
			}
hujiebin's avatar
hujiebin committed
205 206 207 208 209 210 211 212 213
			// 初始化cp纪念日
			if err := cp_m.InitCpAnniversary(model, cp_m.CpRelationTmp{
				Entity:  mysql.Entity{ID: mysql.ID(cpId)},
				UserId1: userSender.ID,
				UserId2: user.ID,
			}); err != nil {
				model.Log.Errorf("ReplyCpInvite InitCpAnniversary fail:%v-%v-%v", userSender.ID, user.ID, err)
				return err
			}
chenweijian's avatar
chenweijian committed
214
			// 发放告白礼物
chenweijian's avatar
chenweijian committed
215 216 217 218
			if _, err = bag_tx.SendUserBag(model, userSender.ID, 1, cp_e.CpConfessionGiftId, 1, 3, "告白礼物"); err != nil {
				model.Log.Errorf("ReplyCpInvite userSender:%d, user:%d, status:%d, err:%v", userSender.ID, user.ID, updateStatus, err)
				return err
			}
chenweijian's avatar
chenweijian committed
219 220 221 222 223 224 225 226 227
			// 发放头饰 cwj----
			//if err = headwear_tx.SendHeadwear(model, userSender.ID, 1, 3); err != nil {
			//	model.Log.Errorf("ReplyCpInvite userSender:%d, user:%d, status:%d, err:%v", userSender.ID, user.ID, updateStatus, err)
			//	return err
			//}
			//if err = headwear_tx.SendHeadwear(model, user.ID, 1, 3); err != nil {
			//	model.Log.Errorf("ReplyCpInvite userSender:%d, user:%d, status:%d, err:%v", userSender.ID, user.ID, updateStatus, err)
			//	return err
			//}
chenweijian's avatar
chenweijian committed
228
			// 私信-接受
chenweijian's avatar
chenweijian committed
229 230 231 232 233 234 235 236
			content, err := msg.GetResMultiTextBy(model, common.MSG_ID_BIND_CP_SUCCEED, lang)
			if err != nil {
				return err
			}
			tip, err := msg.GetResMultiTextBy(model, common.MSG_ID_SEND_CP_GIFT, lang)
			if err != nil {
				return err
			}
chenweijian's avatar
chenweijian committed
237 238
			msgData, _ = json.Marshal(cp_m.CpAcceptInviteMessage{
				Identifier: "CpAcceptInviteMessage",
chenweijian's avatar
chenweijian committed
239 240
				Msg:        content,
				Tip:        fmt.Sprintf(tip, userSender.Code),
chenweijian's avatar
chenweijian committed
241 242
				Sender:     user_m.ToUserTiny(userSender),
				Receiver:   user_m.ToUserTiny(user),
chenweijian's avatar
chenweijian committed
243
			})
chenweijian's avatar
chenweijian committed
244
		} else { // 拒绝
chenweijian's avatar
chenweijian committed
245 246 247 248 249 250
			// 退费
			err = diamond_m.ChangeDiamondAccountDetail(model, diamond_e.CpInviteRefund, cpRecord.Id, cpRecord.UserId, cpRecord.DiamondNum)
			if err != nil {
				model.Log.Errorf("ReplyCpInvite UserId:%d, err:%v", cpRecord.UserId, err)
				return err
			}
chenweijian's avatar
chenweijian committed
251
			// 私信-拒绝
chenweijian's avatar
chenweijian committed
252 253 254 255
			content, err := msg.GetResMultiTextBy(model, common.MSG_ID_REJECTED_CP_INVITE, lang)
			if err != nil {
				return err
			}
chenweijian's avatar
chenweijian committed
256 257
			msgData, _ = json.Marshal(cp_m.CpDenyInviteMessage{
				Identifier: "CpDenyInviteMessage",
chenweijian's avatar
chenweijian committed
258
				Msg:        fmt.Sprintf(content, user.Nick),
chenweijian's avatar
chenweijian committed
259
				Sender:     user_m.ToUserTiny(user),
chenweijian's avatar
chenweijian committed
260 261 262 263 264 265 266 267 268 269 270 271 272
			})
		}
		if err := tencentyun.BatchSendCustomMsg(model, 1, userSender.ExternalId, []string{user.ExternalId}, string(msgData), "cp邀请"); err != nil {
			model.Log.Errorf("BatchSendCustomMsg fail:%v", err)
			return err
		}
		return nil
	})
	if err != nil {
		model.Log.Errorf("ReplyCpInvite myUserId:%d, err:%v", myUserId, err)
		return myCtx, err
	}

chenweijian's avatar
chenweijian committed
273
	resp.ResponseOk(c, nil)
chenweijian's avatar
chenweijian committed
274 275
	return myCtx, nil
}
chenweijian's avatar
chenweijian committed
276 277 278

// @Tags cp关系
// @Summary 回应cp解除
chenweijian's avatar
chenweijian committed
279
// @Param externalId formData string true "对方的externalId"
chenweijian's avatar
chenweijian committed
280 281 282 283 284
// @Param type formData int true "类型1.撤销2.接受"
// @Success 200
// @Router /v2/cp/relation/cancel/reply [post]
func ReplyCpCancel(c *gin.Context) (*mycontext.MyContext, error) {
	myCtx := mycontext.CreateMyContext(c.Keys)
chenweijian's avatar
chenweijian committed
285
	externalId := c.PostForm("externalId")
chenweijian's avatar
chenweijian committed
286 287 288
	if externalId == "" {
		return myCtx, bizerr.InvalidParameter
	}
chenweijian's avatar
chenweijian committed
289 290 291 292 293
	optType, err := strconv.Atoi(c.PostForm("type"))
	if err != nil || optType > 2 || optType < 1 {
		return myCtx, bizerr.InvalidParameter
	}

chenweijian's avatar
chenweijian committed
294
	myUserId, lang, err := req.GetUserIdLang(c, myCtx)
chenweijian's avatar
chenweijian committed
295 296 297 298 299 300 301 302 303
	if err != nil {
		return myCtx, err
	}

	model := domain.CreateModelContext(myCtx)
	myUser, err := user_m.GetUser(model, myUserId)
	if err != nil {
		return myCtx, err
	}
chenweijian's avatar
chenweijian committed
304
	user2, err := user_m.GetUserByExtId(model, externalId)
chenweijian's avatar
chenweijian committed
305 306 307 308
	if err != nil {
		return myCtx, err
	}

chenweijian's avatar
chenweijian committed
309 310 311 312
	if user2.ID == myUserId {
		return myCtx, bizerr.InvalidParameter
	}

chenweijian's avatar
chenweijian committed
313 314 315 316 317 318
	cpCancel, err := cp_m.GetCpCancel(model, []uint64{myUser.ID, user2.ID}, cp_e.CpCancel)
	if err != nil {
		model.Log.Errorf("ReplyCpCancel myUser:%d, user2:%d, err:%v", myUser.ID, user2.ID, err)
		return myCtx, err
	}
	if cpCancel == nil || cpCancel.Id == 0 {
chenweijian's avatar
chenweijian committed
319
		return myCtx, myerr.ToLocal(msg.GetErrByLanguage(model, common.MSG_ID_ALREADY_EXPIRED, lang, comerr.AlreadyExpired))
chenweijian's avatar
chenweijian committed
320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346
	}

	if optType == 1 { // 撤销,只有自己能撤销自己的申请
		if cpCancel.UserId != myUserId {
			return myCtx, bizerr.InvalidParameter
		}
	} else { // 接受,只有对方能接受
		if cpCancel.RecUserId != myUserId {
			return myCtx, bizerr.InvalidParameter
		}
	}

	err = model.Transaction(func(model *domain.Model) error {
		// 更新邀请状态
		updateStatus := cp_e.CpCancelRevoke
		if optType == 2 { // 接受
			updateStatus = cp_e.CpCancelAccept
		}
		err = cp_m.UpdateStatusCpCancel(model, cpCancel.Id, updateStatus)
		if err != nil {
			model.Log.Errorf("ReplyCpCancel myUser:%d, user2:%d, status:%d, err:%v", myUser.ID, user2.ID, updateStatus, err)
			return err
		}

		var msgData []byte
		if optType == 1 { // 撤销解除
			// 私信
chenweijian's avatar
chenweijian committed
347 348 349 350
			//content, err := msg.GetResMultiTextBy(model, common.MSG_ID_UNBIND_CP_SUCCEED, lang)
			//if err != nil {
			//	return err
			//}
chenweijian's avatar
chenweijian committed
351 352
			msgData, _ = json.Marshal(cp_m.CpDealCancelMessage{
				Identifier: "CpDealCancelMessage",
chenweijian's avatar
chenweijian committed
353
				Msg:        fmt.Sprintf("%s withdrew my application to lift CP", myUser.Nick), // cwj----
chenweijian's avatar
chenweijian committed
354
				Status:     1,
chenweijian's avatar
chenweijian committed
355 356 357 358 359 360 361 362
			})
		} else { // 接受解除
			// 删除cp关系表的记录
			err = cp_m.DelCpRelation(model, myUser.ID, user2.ID)
			if err != nil {
				model.Log.Errorf("ReplyCpCancel myUser:%d, user2:%d, status:%d, err:%v", myUser.ID, user2.ID, updateStatus, err)
				return err
			}
chenweijian's avatar
chenweijian committed
363
			// 私信-接受解除
chenweijian's avatar
chenweijian committed
364 365 366 367
			content, err := msg.GetResMultiTextBy(model, common.MSG_ID_UNBIND_CP_SUCCEED, lang)
			if err != nil {
				return err
			}
chenweijian's avatar
chenweijian committed
368 369
			msgData, _ = json.Marshal(cp_m.CpDealCancelMessage{
				Identifier: "CpDealCancelMessage",
chenweijian's avatar
chenweijian committed
370
				Msg:        content,
chenweijian's avatar
chenweijian committed
371
				Status:     2,
chenweijian's avatar
chenweijian committed
372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387
			})
		}
		if err := tencentyun.BatchSendCustomMsg(model, 1, myUser.ExternalId, []string{user2.ExternalId}, string(msgData), "cp解除"); err != nil {
			model.Log.Errorf("ReplyCpCancel BatchSendCustomMsg fail:%v", err)
			return err
		}
		return nil
	})
	if err != nil {
		model.Log.Errorf("ReplyCpCancel myUserId:%d, err:%v", myUserId, err)
		return myCtx, err
	}

	resp.ResponseOk(c, cp_cv.CheckCpRelationRes{})
	return myCtx, nil
}
chenweijian's avatar
chenweijian committed
388

chenweijian's avatar
chenweijian committed
389
type CpDetail struct {
chenweijian's avatar
chenweijian committed
390 391
	CpInfo  cp_cv.CvCpInfo  `json:"cpInfo"`  // cp信息
	CpLevel cp_cv.CvCpLevel `json:"cpLevel"` // cp等级
chenweijian's avatar
chenweijian committed
392 393
}

chenweijian's avatar
chenweijian committed
394 395 396 397 398 399 400 401
// @Tags cp关系
// @Summary 详情页cp数据
// @Param externalId query string true "用户的externalId"
// @Success 200 {object} CpDetail
// @Router /v2/cp/relation/detail [get]
func CpDetailPage(c *gin.Context) (*mycontext.MyContext, error) {
	myCtx := mycontext.CreateMyContext(c.Keys)
	externalId := c.Query("externalId")
chenweijian's avatar
chenweijian committed
402 403 404
	if externalId == "" {
		return myCtx, bizerr.InvalidParameter
	}
chenweijian's avatar
chenweijian committed
405 406 407 408 409 410 411 412 413 414 415

	model := domain.CreateModelContext(myCtx)
	user, err := user_m.GetUserByExtId(model, externalId)
	if err != nil {
		return myCtx, err
	}

	cp, err := cp_m.GetCp(model, user.ID)
	if err != nil {
		return myCtx, err
	}
chenweijian's avatar
chenweijian committed
416
	var res *CpDetail
chenweijian's avatar
chenweijian committed
417 418

	if cp.Id > 0 {
chenweijian's avatar
chenweijian committed
419 420 421 422 423
		userIds := []uint64{cp.UserId1, cp.UserId2}
		userMap, err := user_c.GetUserTinyMap(model, userIds, false)
		if err != nil {
			return myCtx, err
		}
chenweijian's avatar
chenweijian committed
424

chenweijian's avatar
chenweijian committed
425 426 427 428 429 430 431 432 433 434 435 436 437 438 439
		res = new(CpDetail)
		// 返回值
		level := cp_m.GetCpLevel(model, cp.Id)
		res.CpLevel = cp_cv.CvCpLevel{
			Level:          level.Level,
			Points:         cp_e.CpLevelPoints[level.Level] + level.Points,
			StartPoints:    cp_e.CpLevelPoints[level.Level],
			ExpireAtUnix:   level.ExpireAt.Unix(),
			SettlementDate: level.ExpireAt.Format(utils.DATE_FORMAT),
		}
		if res.CpLevel.Level != cp_e.CpLevelMax {
			res.CpLevel.EndPoints = cp_e.CpLevelPoints[res.CpLevel.Level+1]
		}
		res.CpInfo = cp_cv.CvCpInfo{
			UserInfo:    user_cv.UserTinyToCvTiny(userMap[cp.UserId1]),
chenweijian's avatar
chenweijian committed
440
			CpUserInfo:  user_cv.UserTinyToCvTiny(userMap[cp.UserId2]),
chenweijian's avatar
chenweijian committed
441 442
			CpDays:      int(time.Now().Sub(cp.CreatedTime).Hours()/24) + 1,
			CreatedUnix: cp.CreatedTime.Unix(),
chenweijian's avatar
chenweijian committed
443 444 445 446 447 448
		}
	}

	resp.ResponseOk(c, res)
	return myCtx, nil
}