diff --git a/business/jxstore/event/event.go b/business/jxstore/event/event.go index f1386394f..80a329e66 100644 --- a/business/jxstore/event/event.go +++ b/business/jxstore/event/event.go @@ -375,7 +375,7 @@ func UpdateMessageGroup(ctx *jxcontext.Context, groupID int, payload map[string] return num, err } -func DeleteMessageGroup(ctx *jxcontext.Context, groupID int, userID string) (errCode string, err error) { +func DeleteMessageGroup(ctx *jxcontext.Context, groupID int, userID string, flag bool) (errCode string, err error) { var ( db = dao.GetDB() messageGroup = &model.MessageGroup{ @@ -385,52 +385,65 @@ func DeleteMessageGroup(ctx *jxcontext.Context, groupID int, userID string) (err if err = dao.GetEntity(db, messageGroup, "GroupID"); err != nil { return errCode, err } - //token中用户与传入user不一致就判定为踢人 - if ctx.GetUserID() != userID { - if messageGroup.UserID != ctx.GetUserID() { - messageGroupMembers, err := dao.GetMessageGroupMembers(db, groupID, 0, ctx.GetUserID()) + //解散群 + if flag { + messageGroup.DeletedAt = time.Now() + messageGroup.LastOperator = ctx.GetUserName() + dao.UpdateEntity(db, messageGroup, "DeletedAt", "LastOperator") + messageGroupMembers, _ := dao.GetMessageGroupMembers(db, groupID, 0, "") + for _, v := range messageGroupMembers { + v.DeletedAt = time.Now() + v.LastOperator = ctx.GetUserName() + dao.UpdateEntity(db, v, "DeletedAt", "LastOperator") + } + } else { + //token中用户与传入user不一致就判定为踢人 + if ctx.GetUserID() != userID { + if messageGroup.UserID != ctx.GetUserID() { + messageGroupMembers, err := dao.GetMessageGroupMembers(db, groupID, 0, ctx.GetUserID()) + if err != nil { + return errCode, err + } + if messageGroupMembers[0].Type == model.GroupMemberTypeNormal { + return errCode, fmt.Errorf("只有创建者和管理员才能踢人!") + } + } + messageGroupMembers, err := dao.GetMessageGroupMembers(db, groupID, 0, userID) if err != nil { return errCode, err } - if messageGroupMembers[0].Type == model.GroupMemberTypeNormal { - return errCode, fmt.Errorf("只有创建者和管理员才能踢人!") + messageGroupMembers[0].DeletedAt = time.Now() + messageGroupMembers[0].LastOperator = ctx.GetUserName() + dao.UpdateEntity(db, messageGroupMembers[0], "DeletedAt", "LastOperator") + } else { + quitPrice := messageGroup.QuitPrice + userBill, err := dao.GetUserBill(db, userID, "") + userBillGroupMaster, err := dao.GetUserBill(db, messageGroup.UserID, "") + if err != nil { + return errCode, err } - } - messageGroupMembers, err := dao.GetMessageGroupMembers(db, groupID, 0, userID) - if err != nil { - return errCode, err - } - messageGroupMembers[0].DeletedAt = time.Now() - messageGroupMembers[0].LastOperator = ctx.GetUserName() - dao.UpdateEntity(db, messageGroupMembers[0], "DeletedAt", "LastOperator") - } else { - quitPrice := messageGroup.QuitPrice - userBill, err := dao.GetUserBill(db, userID, "") - userBillGroupMaster, err := dao.GetUserBill(db, messageGroup.UserID, "") - if err != nil { - return errCode, err - } - if userBill.AccountBalance < quitPrice { - return model.ErrCodeAccountBalanceNotEnough, fmt.Errorf("用户余额不足,请充值!") - } - dao.Begin(db) - defer func() { - if r := recover(); r != nil { + if userBill.AccountBalance < quitPrice { + return model.ErrCodeAccountBalanceNotEnough, fmt.Errorf("用户余额不足,请充值!") + } + dao.Begin(db) + defer func() { + if r := recover(); r != nil { + dao.Rollback(db) + panic(r) + } + }() + //账户支出 + if err = financial.AddExpendUpdateAccount(db, userBill, model.BillTypeQuitGroup, quitPrice, 0); err != nil { dao.Rollback(db) - panic(r) + return errCode, err } - }() - //账户支出 - if err = financial.AddExpendUpdateAccount(db, userBill, model.BillTypeQuitGroup, quitPrice, 0); err != nil { - dao.Rollback(db) - return errCode, err + //群主收到退团金额 + if err = financial.AddIncomeUpdateAccount(db, userBillGroupMaster, model.BillTypeQuitGroup, quitPrice, 0); err != nil { + dao.Rollback(db) + return errCode, err + } + dao.Commit(db) } - //群主收到退团金额 - if err = financial.AddIncomeUpdateAccount(db, userBillGroupMaster, model.BillTypeQuitGroup, quitPrice, 0); err != nil { - dao.Rollback(db) - return errCode, err - } - dao.Commit(db) } return errCode, err } diff --git a/business/model/dao/event.go b/business/model/dao/event.go index 48ca8a963..8ef087161 100644 --- a/business/model/dao/event.go +++ b/business/model/dao/event.go @@ -267,8 +267,8 @@ func GetMessageGroupMembers(db *DaoDB, groupID, groupType int, memberUserID stri FROM message_group_member a ` if groupType != 0 { - sql += ` JOIN message_group b ON b.group_id = a.group_id AND b.type = ?` - sqlParams = append(sqlParams, groupType) + sql += ` JOIN message_group b ON b.group_id = a.group_id AND b.type = ? AND b.deleted_at = ?` + sqlParams = append(sqlParams, groupType, utils.DefaultTimeValue) } sql += ` WHERE a.deleted_at = ? diff --git a/controllers/event_controller.go b/controllers/event_controller.go index 20ea4c520..3165678f7 100644 --- a/controllers/event_controller.go +++ b/controllers/event_controller.go @@ -364,12 +364,13 @@ func (c *EventController) UpdateMessageGroup() { // @Param token header string true "认证token" // @Param groupID formData int true "组号" // @Param userID formData string true "userID" +// @Param flag formData bool false "是否是解散群" // @Success 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult // @router /DeleteMessageGroup [post] func (c *EventController) DeleteMessageGroup() { c.callDeleteMessageGroup(func(params *tEventDeleteMessageGroupParams) (retVal interface{}, errCode string, err error) { - errCode, err = event.DeleteMessageGroup(params.Ctx, params.GroupID, params.UserID) + errCode, err = event.DeleteMessageGroup(params.Ctx, params.GroupID, params.UserID, params.Flag) return retVal, errCode, err }) }