From b9c49f75a5d446f88ef6ac7caaaf907264cd8a2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Thu, 22 Oct 2020 15:10:06 +0800 Subject: [PATCH] billdrtail --- business/jxstore/cms/user2.go | 143 -------------------------- business/jxstore/financial/bill.go | 5 + business/model/dao/dao_bill.go | 58 +++++++++++ controllers/bill_controller.go | 28 +++++ controllers/cms_user2.go | 14 --- routers/commentsRouter_controllers.go | 18 ++-- routers/router.go | 5 + 7 files changed, 105 insertions(+), 166 deletions(-) create mode 100644 controllers/bill_controller.go diff --git a/business/jxstore/cms/user2.go b/business/jxstore/cms/user2.go index 331914a38..9c9581461 100644 --- a/business/jxstore/cms/user2.go +++ b/business/jxstore/cms/user2.go @@ -8,15 +8,10 @@ import ( "git.rosy.net.cn/jx-callback/business/jxstore/financial" - "git.rosy.net.cn/baseapi" - "git.rosy.net.cn/jx-callback/business/jxutils/excel" - "git.rosy.net.cn/jx-callback/business/jxutils/tasksch" - "git.rosy.net.cn/baseapi/platformapi/dingdingapi" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/auth2" "git.rosy.net.cn/jx-callback/business/auth2/authprovider/dingding" - "git.rosy.net.cn/jx-callback/business/authz" "git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/jxutils/jsonerr" "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" @@ -24,7 +19,6 @@ import ( "git.rosy.net.cn/jx-callback/business/model/dao" "git.rosy.net.cn/jx-callback/globals" "git.rosy.net.cn/jx-callback/globals/api" - "git.rosy.net.cn/jx-callback/globals/api2" ) var ( @@ -123,16 +117,6 @@ func (*UserProvider) UpdateLastLogin(userID string, lastLoginType, fromIP string return err } -// func (*UserProvider) CreateUser(userID2, mobile, email, name string) (user auth2.IUser, err error) { -// realUser := &model.User{ -// UserID2: userID2, -// Mobile: mobile, -// Email: email, -// Name: name, -// } -// return realUser, CreateUser(realUser) -// } - func init() { auth2.Init(userProvider) } @@ -300,31 +284,6 @@ func GetUsers(ctx *jxcontext.Context, userType int, keyword string, userIDs []st return pagedInfo, err } -func GetStoreRoleList(ctx *jxcontext.Context) (roleList []*authz.RoleInfo, err error) { - return authz.StoreRoleList, nil -} - -func GetUserRoleList(ctx *jxcontext.Context, userID string) (roleList []*authz.RoleInfo, err error) { - return api2.RoleMan.GetUserRoleList(userID) -} - -func GetRoleUserList(ctx *jxcontext.Context, r *authz.RoleInfo) (userIDList []string, err error) { - return api2.RoleMan.GetRoleUserList(r) -} - -func GetRolesUserList(ctx *jxcontext.Context, rList []*authz.RoleInfo) (userIDMap map[string][]string, err error) { - userIDMap = make(map[string][]string) - for _, r := range rList { - userIDList, err2 := api2.RoleMan.GetRoleUserList(r) - if err = err2; err == nil { - userIDMap[r.GetFullName()] = userIDList - } else { - break - } - } - return userIDMap, err -} - func checkUserType(userID string, userType int8) (err error) { userList, _, err := dao.GetUsers(dao.GetDB(), 0, "", []string{userID}, nil, nil, 0, 0) if err != nil { @@ -453,108 +412,6 @@ func GetSelfInfo(ctx *jxcontext.Context) (getSelfInfoResult *dao.GetSelfInfoResu return getSelfInfoResult, err } -func (d *GetJdUsersStruct) AppendData(jd JdUserStruct) { - d.locker.RLock() - defer d.locker.RUnlock() - d.userMap = append(d.userMap, jd) -} - -func WriteToExcelJd(task *tasksch.SeqTask, jd []JdUserStruct) (err error) { - var sheetList []*excel.Obj2ExcelSheetConfig - var downloadURL, fileName string - excelConf := &excel.Obj2ExcelSheetConfig{ - Title: "京东用户列表", - Data: jd, - CaptionList: titleListJdUser, - } - sheetList = append(sheetList, excelConf) - if excelConf != nil { - downloadURL, fileName, err = jxutils.UploadExeclAndPushMsg(sheetList, "京东用户列表") - } else { - baseapi.SugarLogger.Debug("WriteToExcel: JdUserStruct is nil!") - } - if err != nil { - baseapi.SugarLogger.Errorf("WriteToExcel:upload %s,failed error:%v", fileName, err) - } else { - noticeMsg := fmt.Sprintf("[详情点我]path=%s, \n", downloadURL) - task.SetNoticeMsg(noticeMsg) - baseapi.SugarLogger.Debugf("WriteToExcel:upload %s, success, downloadURL:%s", fileName, downloadURL) - } - return err -} - -func DeleteUserInfo(ctx *jxcontext.Context, userID string) (err error) { - db := dao.GetDB() - sql := ` - UPDATE user - SET status = ? - WHERE user_id = ? - ` - sqlParams := []interface{}{ - model.NO, - userID, - } - _, err = dao.ExecuteSQL(db, sql, sqlParams) - - /* 删除离职人员门店市场人员 */ - sql2 := ` - UPDATE store t1 - LEFT JOIN user t2 ON t2.mobile = t1.market_man_phone AND t2.status <> 0 - SET t1.market_man_phone = '' - WHERE t2.id IS NULL - ` - _, err = dao.ExecuteSQL(db, sql2, nil) - - /* 删除离职人员门店运营人员 */ - sql3 := ` - UPDATE store t1 - LEFT JOIN user t2 ON t2.mobile = t1.operator_phone AND t2.status <> 0 - SET t1.operator_phone = '' - WHERE t2.id IS NULL - ` - _, err = dao.ExecuteSQL(db, sql3, nil) - - /* 删除离职人员门店运营人员 */ - sql4 := ` - UPDATE store t1 - LEFT JOIN user t2 ON t2.mobile = t1.operator_phone2 AND t2.status <> 0 - SET t1.operator_phone2 = '' - WHERE t2.id IS NULL - ` - _, err = dao.ExecuteSQL(db, sql4, nil) - - /*删除离职人员的角色信息*/ - sql5 := ` - DELETE t1 - FROM casbin_rule t1 - LEFT JOIN user t2 ON t2.user_id = t1.v0 AND t2.status <> 0 - WHERE t2.id IS NULL - ` - _, err = dao.ExecuteSQL(db, sql5, nil) - - //删除token - tokens, err := api.Cacher.Keys("TOKEN.V2." + userID + "*") - for _, v := range tokens { - err = api.Cacher.Del(v) - } - return err -} - -func CleanUserOrderSMSMark(ctx *jxcontext.Context) (err error) { - var ( - db = dao.GetDB() - ) - if time.Now().Day() == 1 { - sql := ` - UPDATE user_order_sms - SET sms_mark = ? - ` - sqlParams := []interface{}{model.NO} - _, err = dao.ExecuteSQL(db, sql, sqlParams) - } - return err -} - func RefreshUserMemberStatus(ctx *jxcontext.Context) (err error) { var ( db = dao.GetDB() diff --git a/business/jxstore/financial/bill.go b/business/jxstore/financial/bill.go index fe3027079..5ec5bd9f8 100644 --- a/business/jxstore/financial/bill.go +++ b/business/jxstore/financial/bill.go @@ -1,6 +1,7 @@ package financial import ( + "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/model/dao" @@ -33,3 +34,7 @@ func AddUserBill(db *dao.DaoDB, billID int64, userID string) (err error) { dao.WrapAddIDCULDEntity(userBillInsert, jxcontext.AdminCtx.GetUserName()) return dao.CreateEntity(db, userBillInsert) } + +func GetUserBillDetail(ctx *jxcontext.Context, userID, fromTime, toTime string, pageSize, offset int) (pagedInfo *model.PagedInfo, err error) { + return dao.GetUserBillDetail(dao.GetDB(), userID, utils.Str2Time(fromTime), utils.Str2Time(toTime), pageSize, offset) +} diff --git a/business/model/dao/dao_bill.go b/business/model/dao/dao_bill.go index 7798f1bea..7b36f4941 100644 --- a/business/model/dao/dao_bill.go +++ b/business/model/dao/dao_bill.go @@ -4,6 +4,7 @@ import ( "time" "git.rosy.net.cn/baseapi/utils" + "git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/model" ) @@ -51,3 +52,60 @@ func GetBillExpend(db *DaoDB, userID string, billType int, fromTime, toTime time err = GetRow(db, &billExpends, sql, sqlParams) return billExpends, err } + +type UserBillDetail struct { + CreatedAt time.Time `json:"created_at"` + LastOperator string `json:"lastOperator"` + BillType int `json:"billType"` + Price int `json:"price"` + Type string `json:"type"` +} + +func GetUserBillDetail(db *DaoDB, userID string, fromTime, toTime time.Time, pageSize, offset int) (pagedInfo *model.PagedInfo, err error) { + var userBillDetails []*UserBillDetail + sql := ` + SELECT SQL_CALC_FOUND_ROWS k.* FROM ( + SELECT a.created_at, a.last_operator, a.type bill_type, a.income_price price, 'income' type + FROM bill_income a + JOIN user_bill b ON a.bill_id = b.bill_id AND b.user_id = ? + ` + sqlParams := []interface{}{userID} + if fromTime != utils.ZeroTimeValue { + sql += ` AND a.created_at >= ?` + sqlParams = append(sqlParams, fromTime) + } + if toTime != utils.ZeroTimeValue { + sql += ` AND a.created_at <= ?` + sqlParams = append(sqlParams, toTime) + } + sql += ` + UNION ALL + SELECT a.created_at, a.last_operator, a.type bill_type, a.expend_price price, 'expend' type + FROM bill_expend a + JOIN user_bill b ON a.bill_id = b.bill_id AND b.user_id = ? + ` + sqlParams = append(sqlParams, userID) + if fromTime != utils.ZeroTimeValue { + sql += ` AND a.created_at >= ?` + sqlParams = append(sqlParams, fromTime) + } + if toTime != utils.ZeroTimeValue { + sql += ` AND a.created_at <= ?` + sqlParams = append(sqlParams, toTime) + } + sql += ` + )k + ORDER BY k.created_at LIMIT ? OFFSET ? + ` + pageSize = jxutils.FormalizePageSize(pageSize) + sqlParams = append(sqlParams, pageSize, offset) + Begin(db) + defer Commit(db) + if err = GetRows(db, &userBillDetails, sql, sqlParams...); err == nil { + pagedInfo = &model.PagedInfo{ + TotalCount: GetLastTotalRowCount(db), + Data: userBillDetails, + } + } + return pagedInfo, err +} diff --git a/controllers/bill_controller.go b/controllers/bill_controller.go new file mode 100644 index 000000000..4cf643947 --- /dev/null +++ b/controllers/bill_controller.go @@ -0,0 +1,28 @@ +package controllers + +import ( + "git.rosy.net.cn/jx-callback/business/jxstore/financial" + "github.com/astaxie/beego" +) + +type BillController struct { + beego.Controller +} + +// @Title 查看用户账户收支明细 +// @Description 查看用户账户收支明细 +// @Param token header string true "认证token" +// @Param userID query string true "用户ID" +// @Param fromTime query string false "开始时间" +// @Param toTime query string false "结束时间" +// @Param offset query int false "列表起始序号(以0开始,缺省为0)" +// @Param pageSize query int false "列表页大小(缺省为50,-1表示全部)" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /GetUserBillDetail [get] +func (c *BillController) GetUserBillDetail() { + c.callGetUserBillDetail(func(params *tBillGetUserBillDetailParams) (retVal interface{}, errCode string, err error) { + retVal, err = financial.GetUserBillDetail(params.Ctx, params.UserID, params.FromTime, params.ToTime, params.PageSize, params.Offset) + return retVal, "", err + }) +} diff --git a/controllers/cms_user2.go b/controllers/cms_user2.go index 6c31b8131..54a3f4e6a 100644 --- a/controllers/cms_user2.go +++ b/controllers/cms_user2.go @@ -177,20 +177,6 @@ func (c *Auth2Controller) UpdateUserByMiniInfo() { }) } -// @Title 禁用用户(删除离职用户信息) -// @Description 禁用用户(删除离职用户信息) -// @Param token header string true "认证token" -// @Param userID query string true "用户userID" -// @Success 200 {object} controllers.CallResult -// @Failure 200 {object} controllers.CallResult -// @router /DeleteUserInfo [delete] -func (c *User2Controller) DeleteUserInfo() { - c.callDeleteUserInfo(func(params *tUser2DeleteUserInfoParams) (retVal interface{}, errCode string, err error) { - err = cms.DeleteUserInfo(params.Ctx, params.UserID) - return retVal, "", err - }) -} - // @Title 会员充值 // @Description 会员充值 // @Param token header string false "认证token" diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index a0cebbbf8..2cdbdb958 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -124,6 +124,15 @@ func init() { Filters: nil, Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:BillController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:BillController"], + beego.ControllerComments{ + Method: "GetUserBillDetail", + Router: `/GetUserBillDetail`, + AllowHTTPMethods: []string{"get"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:EventController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:EventController"], beego.ControllerComments{ Method: "AddMessageGroup", @@ -358,15 +367,6 @@ func init() { Filters: nil, Params: nil}) - beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:User2Controller"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:User2Controller"], - beego.ControllerComments{ - Method: "DeleteUserInfo", - Router: `/DeleteUserInfo`, - AllowHTTPMethods: []string{"delete"}, - MethodParams: param.Make(), - Filters: nil, - Params: nil}) - beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:User2Controller"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:User2Controller"], beego.ControllerComments{ Method: "GetBindAuthInfo", diff --git a/routers/router.go b/routers/router.go index 40d2cede2..4cce9336a 100644 --- a/routers/router.go +++ b/routers/router.go @@ -46,6 +46,11 @@ func init() { &controllers.EventController{}, ), ), + beego.NSNamespace("/bill", + beego.NSInclude( + &controllers.BillController{}, + ), + ), ) beego.AddNamespace(ns) beego.AutoRouter(&controllers.WXPayController{})