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

// @Tags cp关系
// @Summary 检查用户是否绑定了cp
chenweijian's avatar
chenweijian committed
36
// @Param externalId query string true "用户的externalId"
chenweijian's avatar
chenweijian committed
37 38 39 40
// @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
41
	externalId := c.Query("externalId")
chenweijian's avatar
chenweijian committed
42 43 44
	if externalId == "" {
		return myCtx, bizerr.InvalidParameter
	}
chenweijian's avatar
chenweijian committed
45 46 47 48 49 50

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

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

chenweijian's avatar
chenweijian committed
55
	model := domain.CreateModelContext(myCtx)
chenweijian's avatar
chenweijian committed
56
	user, err := user_m.GetUserByExtId(model, externalId)
chenweijian's avatar
chenweijian committed
57 58 59 60 61 62 63 64 65
	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
66
		return myCtx, myerr.ToLocal(msg.GetErrByLanguage(model, common.MSG_ID_ALREADY_HAS_CP, lang, comerr.AlreadyHasCp))
chenweijian's avatar
chenweijian committed
67 68 69 70
	}
	msg, err := msg.GetResMultiTextBy(model, common.MSG_ID_INVITE_CP, lang)
	if err != nil {
		return myCtx, err
chenweijian's avatar
chenweijian committed
71 72
	}

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

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

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

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

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

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

// @Tags cp关系
// @Summary 回应cp邀请
chenweijian's avatar
chenweijian committed
121
// @Param externalId formData string true "对方用户的externalId"
chenweijian's avatar
chenweijian committed
122 123 124 125 126
// @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
127
	externalId := c.PostForm("externalId")
chenweijian's avatar
chenweijian committed
128
	if externalId == "" {
chenweijian's avatar
chenweijian committed
129
		return myCtx, myerr.WrapErr(bizerr.InvalidParameter)
chenweijian's avatar
chenweijian committed
130
	}
chenweijian's avatar
chenweijian committed
131 132
	optType, err := strconv.Atoi(c.PostForm("type"))
	if err != nil || optType > 2 || optType < 1 {
chenweijian's avatar
chenweijian committed
133
		return myCtx, myerr.WrapErr(bizerr.InvalidParameter)
chenweijian's avatar
chenweijian committed
134 135 136 137 138 139 140 141 142 143 144 145
	}

	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
146
	userSender, err := user_m.GetUserByExtId(model, externalId)
chenweijian's avatar
chenweijian committed
147 148 149
	if err != nil {
		return myCtx, err
	}
chenweijian's avatar
chenweijian committed
150
	if userSender.ID == myUserId {
chenweijian's avatar
chenweijian committed
151
		return myCtx, myerr.WrapErr(bizerr.InvalidParameter)
chenweijian's avatar
chenweijian committed
152
	}
chenweijian's avatar
chenweijian committed
153

chenweijian's avatar
chenweijian committed
154
	cpRecord, err := cp_m.GetCpInvite(model, userSender.ID, user.ID, cp_e.CpInvite)
chenweijian's avatar
chenweijian committed
155 156 157 158 159
	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
160
		return myCtx, myerr.ToLocal(msg.GetErrByLanguage(model, common.MSG_ID_ALREADY_EXPIRED, lang, comerr.AlreadyExpired))
chenweijian's avatar
chenweijian committed
161 162
	}

chenweijian's avatar
chenweijian committed
163 164 165 166 167 168 169
	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
170
			return myCtx, myerr.ToLocal(msg.GetErrByLanguage(model, common.MSG_ID_ALREADY_HAS_CP, lang, comerr.AlreadyHasCp))
chenweijian's avatar
chenweijian committed
171 172 173 174 175 176 177
		}
		// 对方是否已经有cp了
		senderCp, err := cp_m.GetCp(model, userSender.ID)
		if err != nil {
			return myCtx, err
		}
		if senderCp.Id > 0 {
chenweijian's avatar
chenweijian committed
178
			return myCtx, myerr.ToLocal(msg.GetErrByLanguage(model, common.MSG_ID_ALREADY_HAS_CP, lang, comerr.AlreadyHasCp))
chenweijian's avatar
chenweijian committed
179
		}
chenweijian's avatar
chenweijian committed
180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195
	}
	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
196
			cpId, err := cp_m.CreateCp(model, userSender.ID, user.ID)
chenweijian's avatar
chenweijian committed
197 198 199 200
			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
201 202 203 204 205
			// 初始化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
206 207 208 209 210
			// 初始化cp纪念日
			if err := cp_m.InitCpAnniversary(model, cp_m.CpRelationTmp{
				Entity:  mysql.Entity{ID: mysql.ID(cpId)},
				UserId1: userSender.ID,
				UserId2: user.ID,
211
			}, lang); err != nil {
hujiebin's avatar
hujiebin committed
212 213 214
				model.Log.Errorf("ReplyCpInvite InitCpAnniversary fail:%v-%v-%v", userSender.ID, user.ID, err)
				return err
			}
chenweijian's avatar
chenweijian committed
215
			// 发放告白礼物
chenweijian's avatar
chenweijian committed
216 217 218 219
			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
220 221 222 223 224 225 226 227 228
			// 发放头饰 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
229
			// 私信-接受
chenweijian's avatar
chenweijian committed
230 231 232 233 234 235 236 237
			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
238 239
			msgData, _ = json.Marshal(cp_m.CpAcceptInviteMessage{
				Identifier: "CpAcceptInviteMessage",
chenweijian's avatar
chenweijian committed
240 241
				Msg:        content,
				Tip:        fmt.Sprintf(tip, userSender.Code),
chenweijian's avatar
chenweijian committed
242 243
				Sender:     user_m.ToUserTiny(userSender),
				Receiver:   user_m.ToUserTiny(user),
chenweijian's avatar
chenweijian committed
244
			})
chenweijian's avatar
chenweijian committed
245
		} else { // 拒绝
chenweijian's avatar
chenweijian committed
246
			// 退费
chenweijian's avatar
chenweijian committed
247 248
			err = diamond_tx.SendDiamond(model, cpRecord.UserId, diamond_e.CpInviteRefund, cpRecord.Id, cpRecord.DiamondNum,
				msg_e.MgrSendDiamondProperty)
chenweijian's avatar
chenweijian committed
249 250 251 252
			if err != nil {
				model.Log.Errorf("ReplyCpInvite UserId:%d, err:%v", cpRecord.UserId, err)
				return err
			}
chenweijian's avatar
chenweijian committed
253
			// 私信-拒绝
chenweijian's avatar
chenweijian committed
254 255 256 257
			content, err := msg.GetResMultiTextBy(model, common.MSG_ID_REJECTED_CP_INVITE, lang)
			if err != nil {
				return err
			}
chenweijian's avatar
chenweijian committed
258 259
			msgData, _ = json.Marshal(cp_m.CpDenyInviteMessage{
				Identifier: "CpDenyInviteMessage",
chenweijian's avatar
chenweijian committed
260
				Msg:        fmt.Sprintf(content, user.Nick),
chenweijian's avatar
chenweijian committed
261
				Sender:     user_m.ToUserTiny(user),
chenweijian's avatar
chenweijian committed
262 263 264 265 266 267 268 269 270 271 272 273 274
			})
		}
		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
275
	resp.ResponseOk(c, nil)
chenweijian's avatar
chenweijian committed
276 277
	return myCtx, nil
}
chenweijian's avatar
chenweijian committed
278 279 280

// @Tags cp关系
// @Summary 回应cp解除
chenweijian's avatar
chenweijian committed
281
// @Param externalId formData string true "对方的externalId"
chenweijian's avatar
chenweijian committed
282 283 284 285 286
// @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
287
	externalId := c.PostForm("externalId")
chenweijian's avatar
chenweijian committed
288 289 290
	if externalId == "" {
		return myCtx, bizerr.InvalidParameter
	}
chenweijian's avatar
chenweijian committed
291 292 293 294 295
	optType, err := strconv.Atoi(c.PostForm("type"))
	if err != nil || optType > 2 || optType < 1 {
		return myCtx, bizerr.InvalidParameter
	}

chenweijian's avatar
chenweijian committed
296
	myUserId, lang, err := req.GetUserIdLang(c, myCtx)
chenweijian's avatar
chenweijian committed
297 298 299 300 301 302 303 304 305
	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
306
	user2, err := user_m.GetUserByExtId(model, externalId)
chenweijian's avatar
chenweijian committed
307 308 309 310
	if err != nil {
		return myCtx, err
	}

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

chenweijian's avatar
chenweijian committed
315 316 317 318 319 320
	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
321
		return myCtx, myerr.ToLocal(msg.GetErrByLanguage(model, common.MSG_ID_ALREADY_EXPIRED, lang, comerr.AlreadyExpired))
chenweijian's avatar
chenweijian committed
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 347 348
	}

	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
349 350 351 352
			content, err := msg.GetResMultiTextBy(model, common.MSG_ID_CANCEL_UNBIND_CP, lang)
			if err != nil {
				return err
			}
chenweijian's avatar
chenweijian committed
353 354
			msgData, _ = json.Marshal(cp_m.CpDealCancelMessage{
				Identifier: "CpDealCancelMessage",
chenweijian's avatar
chenweijian committed
355
				Msg:        fmt.Sprintf(content, myUser.Nick),
chenweijian's avatar
chenweijian committed
356
				Status:     1,
chenweijian's avatar
chenweijian committed
357 358 359 360 361 362 363 364
			})
		} 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
365
			// 私信-接受解除
chenweijian's avatar
chenweijian committed
366 367 368 369
			content, err := msg.GetResMultiTextBy(model, common.MSG_ID_UNBIND_CP_SUCCEED, lang)
			if err != nil {
				return err
			}
chenweijian's avatar
chenweijian committed
370 371
			msgData, _ = json.Marshal(cp_m.CpDealCancelMessage{
				Identifier: "CpDealCancelMessage",
chenweijian's avatar
chenweijian committed
372
				Msg:        content,
chenweijian's avatar
chenweijian committed
373
				Status:     2,
chenweijian's avatar
chenweijian committed
374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389
			})
		}
		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
390

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

chenweijian's avatar
chenweijian committed
396 397 398 399 400 401 402 403
// @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
404 405 406
	if externalId == "" {
		return myCtx, bizerr.InvalidParameter
	}
chenweijian's avatar
chenweijian committed
407 408 409 410 411 412 413 414 415 416 417

	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
418
	var res *CpDetail
chenweijian's avatar
chenweijian committed
419 420

	if cp.Id > 0 {
chenweijian's avatar
chenweijian committed
421 422 423 424 425
		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
426

chenweijian's avatar
chenweijian committed
427 428 429 430 431 432 433 434 435 436 437 438 439 440 441
		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
442
			CpUserInfo:  user_cv.UserTinyToCvTiny(userMap[cp.UserId2]),
chenweijian's avatar
chenweijian committed
443 444
			CpDays:      int(time.Now().Sub(cp.CreatedTime).Hours()/24) + 1,
			CreatedUnix: cp.CreatedTime.Unix(),
chenweijian's avatar
chenweijian committed
445 446 447 448 449 450
		}
	}

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