diff --git a/app/admin/apis/cooperativemanage/cooperative.go b/app/admin/apis/cooperativemanage/cooperative.go index 4c9c2af..62d941c 100644 --- a/app/admin/apis/cooperativemanage/cooperative.go +++ b/app/admin/apis/cooperativemanage/cooperative.go @@ -654,19 +654,13 @@ func AssistantInviteMemberReportList(c *gin.Context) { req.SysUser = sysUser //req.CooperativeBusinessId = sysUser.CooperativeBusinessId - list, count, err := req.List() + ret, err := req.List() if err != nil { logger.Errorf("err:", err) app.Error(c, http.StatusInternalServerError, err, "查询失败") return } - ret := models.AssistantInviteMemberReportListResp{ - List: list, - CurPage: req.Page, - Count: count, - } - app.OK(c, ret, "") return } diff --git a/app/admin/models/commodity.go b/app/admin/models/commodity.go index a1c6ab4..6885bf2 100644 --- a/app/admin/models/commodity.go +++ b/app/admin/models/commodity.go @@ -289,7 +289,7 @@ type ErpCommodityListResp struct { Total int `json:"count"` // 数据总条数 PageIndex int `json:"pageIndex"` // 页码 PageSize int `json:"pageSize"` // 每页展示条数 - ExportUrl string `json:"export_url"` // 1-导出 + ExportUrl string `json:"export_url"` // 文件路径 } func (m *ErpCommodityListReq) List() (*ErpCommodityListResp, error) { diff --git a/app/admin/models/order.go b/app/admin/models/order.go index 201f487..677d76a 100644 --- a/app/admin/models/order.go +++ b/app/admin/models/order.go @@ -1163,16 +1163,31 @@ func (m *Order) Revert() error { return nil }) eg.Go(func() error { - err := begin.Table("order_card").Where("id=?", orderCard.ID).Updates(&map[string]interface{}{ - //"store_id": m.StoreId, - "card_status": OrderCardStatusCompleted, - "revert_store_id": m.RevertStoreId, - "revert_time": time.Now(), - "revert_shopper_code": m.RevertShopperCode, - }).Error - if err != nil { - logger.Errorf("err:", logger.Field("err", err)) - return err + if m.RevertExpressNo != "" { // 物流单号不为空则记录到数据库;2024/2/1 产品新需求,解决用户物流归还但小程序不提交归还信息,店员要输入手机号的问题 + err = begin.Table("order_card").Where("id=?", orderCard.ID).Updates(&map[string]interface{}{ + //"store_id": m.StoreId, + "card_status": OrderCardStatusCompleted, + "revert_store_id": m.RevertStoreId, + "revert_time": time.Now(), + "revert_shopper_code": m.RevertShopperCode, + "revert_express_no": m.RevertExpressNo, + }).Error + if err != nil { + logger.Errorf("err:", logger.Field("err", err)) + return err + } + } else { + err = begin.Table("order_card").Where("id=?", orderCard.ID).Updates(&map[string]interface{}{ + //"store_id": m.StoreId, + "card_status": OrderCardStatusCompleted, + "revert_store_id": m.RevertStoreId, + "revert_time": time.Now(), + "revert_shopper_code": m.RevertShopperCode, + }).Error + if err != nil { + logger.Errorf("err:", logger.Field("err", err)) + return err + } } var count int64 err = orm.Eloquent.Table("order_card").Where("order_id=?", orderCard.OrderId). diff --git a/app/admin/models/user.go b/app/admin/models/user.go index 978eed9..4c133c0 100644 --- a/app/admin/models/user.go +++ b/app/admin/models/user.go @@ -813,11 +813,13 @@ func (m *UserAddress) TableName() string { type InviteMemberReport struct { Model - Uid uint32 `json:"uid" gorm:"index"` // 店员uid - StoreId uint32 `json:"store_id" gorm:"index"` // 门店id - GoldCount uint32 `json:"gold_count"` // 黄金数量 - PlatinumCount uint32 `json:"platinum_count"` // 白金数量 - BlackGoldCount uint32 `json:"black_gold_count"` // 黑金数量 + Uid uint32 `json:"uid" gorm:"index"` // 店员uid + StoreId uint32 `json:"store_id" gorm:"index"` // 门店id + GoldCount uint32 `json:"gold_count"` // 黄金数量 + GoldCountHalf uint32 `json:"gold_count_half"` // 半年黄金数量 + GoldCountQuarter uint32 `json:"gold_count_quarter"` // 季度黄金数量 + PlatinumCount uint32 `json:"platinum_count"` // 白金数量 + BlackGoldCount uint32 `json:"black_gold_count"` // 黑金数量 //ReportTime string `json:"report_time" gorm:"index"` // 业绩时间 Date string `json:"date" gorm:"index"` // 业绩时间 DeductAmount uint32 `json:"deduct_amount"` // 店员提成 @@ -826,7 +828,9 @@ type InviteMemberReport struct { GoldDeduct uint32 `json:"gold_deduct"` // 黄金会员提成 PlatinumDeduct uint32 `json:"platinum_deduct"` // 白金会员提成 BlackGoldDeduct uint32 `json:"black_gold_deduct"` // 黑金会员提成 - RenewalGoldCount uint32 `json:"renewal_gold_count"` // 续费黄金会员数量(自动) + RenewalGoldCount uint32 `json:"renewal_gold_count"` // 续费年度黄金会员数量(自动) + RenewalGoldCountHalf uint32 `json:"renewal_gold_count_half"` // 续费半年黄金会员数量(自动) + RenewalGoldCountQuarter uint32 `json:"renewal_gold_count_quarter"` // 续费季度黄金会员数量(自动) RenewalPlatinumCount uint32 `json:"renewal_platinum_count"` // 续费白金会员数量(自动) RenewalBlackGoldCount uint32 `json:"renewal_black_gold_count"` // 续费黑金会员数量(自动) UpgradeGoldToPlatinumCount uint32 `json:"upgrade_gold_to_platinum_count" gorm:"default:0"` // 升级:黄金->白金数量(自动) @@ -2565,29 +2569,35 @@ func GetSysUser(suid interface{}) (SysUser, error) { type AssistantInviteMemberReportReq struct { CooperativeBusinessId uint32 `json:"cooperative_business_id"` // 合作商id StoreId uint32 `json:"store_id"` // 门店id - SysUser SysUser `json:"sys_user"` - Date string `json:"date"` // 日期 - Page int `json:"pageIndex"` // 页码 - PageSize int `json:"pageSize"` // 每页数量 + Uid uint32 `json:"uid"` // 店员小程序id + InviteName string `json:"invite_name"` // 邀请人昵称 + Date string `json:"date"` // 日期 + PageIndex int `json:"pageIndex"` // 页码 + PageSize int `json:"pageSize"` // 每页数量 + IsExport uint32 `json:"is_export"` // 1-导出 + SysUser SysUser `json:"sys_user"` // } type AssistantInviteMemberReportListResp struct { - Count int64 `json:"count"` - List []InviteMemberReport `json:"list"` - CurPage int `json:"cur_page"` + List []InviteMemberReport `json:"list"` + Total int64 `json:"count"` // 数据总条数 + PageIndex int `json:"pageIndex"` // 页码 + PageSize int `json:"pageSize"` // 每页展示条数 + ExportUrl string `json:"export_url"` // 导出excel地址 } -func (m *AssistantInviteMemberReportReq) List() ([]InviteMemberReport, int64, error) { +func (m *AssistantInviteMemberReportReq) List() (*AssistantInviteMemberReportListResp, error) { + resp := new(AssistantInviteMemberReportListResp) var memberReport []InviteMemberReport var users []UserInfo - err := orm.Eloquent.Table("user").Where("user_type=2").Where("shop_assistant_name=''").Find(&users).Error + err := orm.Eloquent.Table("user").Where("user_type=2").Find(&users).Error if err != nil { logger.Error("err:", logger.Field("err", err)) - return memberReport, 0, err + return nil, err } - uids := make([]uint32, 0, len(users)) + uids := make(map[string]uint32, 0) for i, _ := range users { - uids = append(uids, users[i].Uid) + uids[users[i].ShopAssistantName] = users[i].Uid } qs := orm.Eloquent.Table("invite_member_report") @@ -2596,8 +2606,14 @@ func (m *AssistantInviteMemberReportReq) List() ([]InviteMemberReport, int64, er } else { qs = qs.Where("cooperative_business_id=?", m.CooperativeBusinessId) } - if len(uids) > 0 { - qs = qs.Where("uid NOT IN (?)", uids) + //if len(uids) > 0 { + // qs = qs.Where("uid NOT IN (?)", uids) + //} + if m.InviteName != "" { + m.Uid = uids[m.InviteName] + } + if m.Uid != 0 { + qs = qs.Where("uid=?", m.Uid) } if m.StoreId != 0 { qs = qs.Where("store_id=?", m.StoreId) @@ -2610,9 +2626,9 @@ func (m *AssistantInviteMemberReportReq) List() ([]InviteMemberReport, int64, er err = qs.Count(&count).Error if err != nil { logger.Error("count err:", logger.Field("err", err)) - return memberReport, 0, err + return nil, err } - page := m.Page - 1 + page := m.PageIndex - 1 if page < 0 { page = 0 } @@ -2621,10 +2637,18 @@ func (m *AssistantInviteMemberReportReq) List() ([]InviteMemberReport, int64, er } //totalPage := int(count)/m.PageSize + 1 - err = qs.Order("store_id DESC,id DESC").Offset(page * m.PageSize).Limit(m.PageSize).Find(&memberReport).Error - if err != nil && err != RecordNotFound { - logger.Error("err:", logger.Field("err", err)) - return memberReport, count, err + if m.IsExport == 1 { // 导出excel + err = qs.Order("store_id DESC,id DESC").Find(&memberReport).Error + if err != nil && err != RecordNotFound { + logger.Error("err:", logger.Field("err", err)) + return nil, err + } + } else { + err = qs.Order("store_id DESC,id DESC").Offset(page * m.PageSize).Limit(m.PageSize).Find(&memberReport).Error + if err != nil && err != RecordNotFound { + logger.Error("err:", logger.Field("err", err)) + return nil, err + } } //assistant := GetUserByUid(m.Uid) @@ -2645,7 +2669,23 @@ func (m *AssistantInviteMemberReportReq) List() ([]InviteMemberReport, int64, er // memberReport[len(memberReport)-1].DeductAmount += report.BlackGoldCount * report.BlackGoldDeduct //} memberReport = InviteMemberReportListSetUser(memberReport) - return memberReport, count, nil + memberReport = InviteMemberReportListSetStore(memberReport) + + if m.IsExport == 1 { + fileName, err := inviteMemberReport(memberReport) + if err != nil { + logger.Error("err:", logger.Field("err", err)) + return nil, err + } + resp.ExportUrl = fileName + } else { + resp.List = memberReport + resp.Total = count + resp.PageSize = m.PageSize + resp.PageIndex = m.PageIndex + } + + return resp, nil } // 店员绩效导出excel @@ -2689,17 +2729,26 @@ func inviteMemberReport(list []InviteMemberReport) (string, error) { nExcelStartRow := 0 for i := 0; i < len(list); i++ { + storeName := "" + if list[i].Store != nil { + storeName = list[i].Store.Name + } + shopAssistantName := "" + if list[i].User != nil { + shopAssistantName = list[i].User.ShopAssistantName + } + row = []interface{}{ - list[i].User.ShopAssistantName, // 昵称 - list[i].Uid, // 小程序ID - list[i].CooperativeName, // 合作商名称 - list[i].Store.Name, // 门店名称 - list[i].Date, // 月份 - list[i].GoldCount, // 开通会员:年费黄金 - //开通会员:半年黄金 - //开通会员:季度黄金 - list[i].PlatinumCount, // 开通会员:年费白金 - list[i].BlackGoldCount, // 开通会员:年费黑金 + shopAssistantName, // 昵称 + list[i].Uid, // 小程序ID + list[i].CooperativeName, // 合作商名称 + storeName, // 门店名称 + list[i].Date, // 月份 + list[i].GoldCount, // 开通会员:年费黄金 + list[i].GoldCountHalf, //开通会员:半年黄金 + list[i].GoldCountQuarter, //开通会员:季度黄金 + list[i].PlatinumCount, // 开通会员:年费白金 + list[i].BlackGoldCount, // 开通会员:年费黑金 list[i].InviteRenewalGoldCount, // 续费会员(干预):年费黄金 list[i].InviteRenewalPlatinumCount, // 续费会员(干预):白金 @@ -2709,16 +2758,15 @@ func inviteMemberReport(list []InviteMemberReport) (string, error) { list[i].InviteUpgradeGoldToBlackCount, // 升级(干预):黄金->黑金数量 list[i].InviteUpgradePlatinumToBlackCount, // 升级(干预):白金->黑金数量 - list[i].RenewalGoldCount, // 续费会员(自动):年费黄金 - // 续费会员(自动):半年黄金 - // 续费会员(自动):季度黄金 - list[i].RenewalPlatinumCount, // 续费会员(自动):白金 - list[i].RenewalBlackGoldCount, // 续费会员(自动):黑金 + list[i].RenewalGoldCount, // 续费会员(自动):年费黄金 + list[i].RenewalGoldCountHalf, // 续费会员(自动):半年黄金 + list[i].RenewalGoldCountQuarter, // 续费会员(自动):季度黄金 + list[i].RenewalPlatinumCount, // 续费会员(自动):白金 + list[i].RenewalBlackGoldCount, // 续费会员(自动):黑金 list[i].UpgradeGoldToPlatinumCount, // 升级(自动):黄金->白金数量 list[i].UpgradeGoldToBlackCount, // 升级(自动):黄金->黑金数量 list[i].UpgradePlatinumToBlackCount, // 升级(自动):白金->黑金数量 - list[i].Date, } for j, _ := range row { @@ -2745,30 +2793,29 @@ func inviteMemberReport(list []InviteMemberReport) (string, error) { {"type":"right","color":"000000","style":1}, {"type":"bottom","color":"000000","style":1}]}`) - endRow := fmt.Sprintf("L%d", nExcelStartRow+2) + endRow := fmt.Sprintf("X%d", nExcelStartRow+2) // 合并单元格 _ = file.MergeCell(fSheet, "A1", "A2") _ = file.MergeCell(fSheet, "B1", "B2") _ = file.MergeCell(fSheet, "C1", "C2") _ = file.MergeCell(fSheet, "D1", "D2") _ = file.MergeCell(fSheet, "E1", "E2") - _ = file.MergeCell(fSheet, "F1", "K1") - _ = file.MergeCell(fSheet, "L1", "N1") + _ = file.MergeCell(fSheet, "F1", "J1") + _ = file.MergeCell(fSheet, "K1", "M1") + _ = file.MergeCell(fSheet, "N1", "P1") + _ = file.MergeCell(fSheet, "Q1", "U1") + _ = file.MergeCell(fSheet, "V1", "X1") //设置单元格高度 file.SetRowHeight("Sheet1", 1, 20) file.SetRowHeight("Sheet1", 2, 20) - - // 设置单元格大小 - file.SetColWidth("Sheet1", "A", "A", 15) - file.SetColWidth("Sheet1", "B", "B", 20) // 从列 C 到列 K,逐一设置宽度为 20 - for col := 'C'; col <= 'K'; col++ { + for col := 'F'; col <= 'X'; col++ { colName := string(col) - file.SetColWidth("Sheet1", colName, colName, 12) + file.SetColWidth("Sheet1", colName, colName, 9) } // 应用样式到整个表格 - _ = file.SetCellStyle("Sheet1", "A1", "L1", style1) + _ = file.SetCellStyle("Sheet1", "A1", "X1", style1) _ = file.SetCellStyle("Sheet1", "A2", endRow, style) fmt.Println("save fileName:", config.ExportConfig.Path+fileName) diff --git a/docs/docs.go b/docs/docs.go index 83862e3..edbb15b 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -4903,16 +4903,26 @@ const docTemplate = `{ "type": "object", "properties": { "count": { + "description": "数据总条数", "type": "integer" }, - "cur_page": { - "type": "integer" + "export_url": { + "description": "导出excel地址", + "type": "string" }, "list": { "type": "array", "items": { "$ref": "#/definitions/models.InviteMemberReport" } + }, + "pageIndex": { + "description": "页码", + "type": "integer" + }, + "pageSize": { + "description": "每页展示条数", + "type": "integer" } } }, @@ -4927,6 +4937,14 @@ const docTemplate = `{ "description": "日期", "type": "string" }, + "invite_name": { + "description": "邀请人昵称", + "type": "string" + }, + "is_export": { + "description": "1-导出", + "type": "integer" + }, "pageIndex": { "description": "页码", "type": "integer" @@ -4941,6 +4959,10 @@ const docTemplate = `{ }, "sys_user": { "$ref": "#/definitions/models.SysUser" + }, + "uid": { + "description": "店员小程序id", + "type": "integer" } } }, @@ -5882,7 +5904,7 @@ const docTemplate = `{ "type": "integer" }, "export_url": { - "description": "1-导出", + "description": "文件路径", "type": "string" }, "list": { @@ -7399,6 +7421,14 @@ const docTemplate = `{ "description": "黄金数量", "type": "integer" }, + "gold_count_half": { + "description": "半年黄金数量", + "type": "integer" + }, + "gold_count_quarter": { + "description": "季度黄金数量", + "type": "integer" + }, "gold_deduct": { "description": "黄金会员提成", "type": "integer" @@ -7444,7 +7474,15 @@ const docTemplate = `{ "type": "integer" }, "renewal_gold_count": { - "description": "续费黄金会员数量(自动)", + "description": "续费年度黄金会员数量(自动)", + "type": "integer" + }, + "renewal_gold_count_half": { + "description": "续费半年黄金会员数量(自动)", + "type": "integer" + }, + "renewal_gold_count_quarter": { + "description": "续费季度黄金会员数量(自动)", "type": "integer" }, "renewal_platinum_count": { diff --git a/docs/swagger.json b/docs/swagger.json index c85a173..f914095 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -4892,16 +4892,26 @@ "type": "object", "properties": { "count": { + "description": "数据总条数", "type": "integer" }, - "cur_page": { - "type": "integer" + "export_url": { + "description": "导出excel地址", + "type": "string" }, "list": { "type": "array", "items": { "$ref": "#/definitions/models.InviteMemberReport" } + }, + "pageIndex": { + "description": "页码", + "type": "integer" + }, + "pageSize": { + "description": "每页展示条数", + "type": "integer" } } }, @@ -4916,6 +4926,14 @@ "description": "日期", "type": "string" }, + "invite_name": { + "description": "邀请人昵称", + "type": "string" + }, + "is_export": { + "description": "1-导出", + "type": "integer" + }, "pageIndex": { "description": "页码", "type": "integer" @@ -4930,6 +4948,10 @@ }, "sys_user": { "$ref": "#/definitions/models.SysUser" + }, + "uid": { + "description": "店员小程序id", + "type": "integer" } } }, @@ -5871,7 +5893,7 @@ "type": "integer" }, "export_url": { - "description": "1-导出", + "description": "文件路径", "type": "string" }, "list": { @@ -7388,6 +7410,14 @@ "description": "黄金数量", "type": "integer" }, + "gold_count_half": { + "description": "半年黄金数量", + "type": "integer" + }, + "gold_count_quarter": { + "description": "季度黄金数量", + "type": "integer" + }, "gold_deduct": { "description": "黄金会员提成", "type": "integer" @@ -7433,7 +7463,15 @@ "type": "integer" }, "renewal_gold_count": { - "description": "续费黄金会员数量(自动)", + "description": "续费年度黄金会员数量(自动)", + "type": "integer" + }, + "renewal_gold_count_half": { + "description": "续费半年黄金会员数量(自动)", + "type": "integer" + }, + "renewal_gold_count_quarter": { + "description": "续费季度黄金会员数量(自动)", "type": "integer" }, "renewal_platinum_count": { diff --git a/docs/swagger.yaml b/docs/swagger.yaml index 26698c8..a5ab4a0 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -420,13 +420,21 @@ definitions: models.AssistantInviteMemberReportListResp: properties: count: + description: 数据总条数 type: integer - cur_page: - type: integer + export_url: + description: 导出excel地址 + type: string list: items: $ref: '#/definitions/models.InviteMemberReport' type: array + pageIndex: + description: 页码 + type: integer + pageSize: + description: 每页展示条数 + type: integer type: object models.AssistantInviteMemberReportReq: properties: @@ -436,6 +444,12 @@ definitions: date: description: 日期 type: string + invite_name: + description: 邀请人昵称 + type: string + is_export: + description: 1-导出 + type: integer pageIndex: description: 页码 type: integer @@ -447,6 +461,9 @@ definitions: type: integer sys_user: $ref: '#/definitions/models.SysUser' + uid: + description: 店员小程序id + type: integer type: object models.BatchPrintInfo: properties: @@ -1129,7 +1146,7 @@ definitions: description: 数据总条数 type: integer export_url: - description: 1-导出 + description: 文件路径 type: string list: items: @@ -2238,6 +2255,12 @@ definitions: gold_count: description: 黄金数量 type: integer + gold_count_half: + description: 半年黄金数量 + type: integer + gold_count_quarter: + description: 季度黄金数量 + type: integer gold_deduct: description: 黄金会员提成 type: integer @@ -2272,7 +2295,13 @@ definitions: description: 续费黑金会员数量(自动) type: integer renewal_gold_count: - description: 续费黄金会员数量(自动) + description: 续费年度黄金会员数量(自动) + type: integer + renewal_gold_count_half: + description: 续费半年黄金会员数量(自动) + type: integer + renewal_gold_count_quarter: + description: 续费季度黄金会员数量(自动) type: integer renewal_platinum_count: description: 续费白金会员数量(自动)