作者 yangfu

增加:订单统计

@@ -56,3 +56,17 @@ func CreateImInfoRepository(transactionContext *transaction.TransactionContext) @@ -56,3 +56,17 @@ func CreateImInfoRepository(transactionContext *transaction.TransactionContext)
56 func CreateImCustomerServiceRepository(transactionContext *transaction.TransactionContext) (domain.ImCustomerServiceRepository, error) { 56 func CreateImCustomerServiceRepository(transactionContext *transaction.TransactionContext) (domain.ImCustomerServiceRepository, error) {
57 return repository.NewImCustomerServiceRepository(transactionContext) 57 return repository.NewImCustomerServiceRepository(transactionContext)
58 } 58 }
  59 +
  60 +// 合伙人类型
  61 +func CreatePartnerCategoryInfoRepository(transactionContext *transaction.TransactionContext) (domain.PartnerCategoryInfoRepository, error) {
  62 + return repository.NewPartnerCategoryInfoRepository(transactionContext)
  63 +}
  64 +
  65 +// 高管
  66 +func CreateUsersRepository(transactionContext *transaction.TransactionContext) (domain.UsersRepository, error) {
  67 + return repository.NewUsersRepository(transactionContext)
  68 +}
  69 +
  70 +func CreateBusinessBonusRepository(transactionContext *transaction.TransactionContext) (domain.BusinessBonusRepository, error) {
  71 + return repository.NewBusinessBonusRepository(transactionContext)
  72 +}
1 package order 1 package order
2 2
3 import ( 3 import (
  4 + "fmt"
4 "gitlab.fjmaimaimai.com/mmm-go/partner/pkg/application/factory" 5 "gitlab.fjmaimaimai.com/mmm-go/partner/pkg/application/factory"
5 "gitlab.fjmaimaimai.com/mmm-go/partner/pkg/domain" 6 "gitlab.fjmaimaimai.com/mmm-go/partner/pkg/domain"
6 "gitlab.fjmaimaimai.com/mmm-go/partner/pkg/infrastructure/utils" 7 "gitlab.fjmaimaimai.com/mmm-go/partner/pkg/infrastructure/utils"
@@ -117,8 +118,11 @@ func orderTotalStatic(order *domain.OrderBase) interface{} { @@ -117,8 +118,11 @@ func orderTotalStatic(order *domain.OrderBase) interface{} {
117 // 订单统计 118 // 订单统计
118 func Statistics(header *protocol.RequestHeader, request *protocol.OrderStatisticsRequest) (rsp *protocol.OrderStatisticsResponse, err error) { 119 func Statistics(header *protocol.RequestHeader, request *protocol.OrderStatisticsRequest) (rsp *protocol.OrderStatisticsResponse, err error) {
119 var ( 120 var (
120 - transactionContext, _ = factory.CreateTransactionContext(nil)  
121 - OrderDao, _ = factory.CreateOrderBaseDao(transactionContext) 121 + transactionContext, _ = factory.CreateTransactionContext(nil)
  122 + OrderDao, _ = factory.CreateOrderBaseDao(transactionContext)
  123 + PartnerInfoRepository, _ = factory.CreatePartnerInfoRepositoryIn(transactionContext)
  124 + partnerInfo *domain.PartnerInfo
  125 + orderBonus domain.OrderBonusResponse
122 ) 126 )
123 if err = transactionContext.StartTransaction(); err != nil { 127 if err = transactionContext.StartTransaction(); err != nil {
124 return nil, err 128 return nil, err
@@ -127,14 +131,11 @@ func Statistics(header *protocol.RequestHeader, request *protocol.OrderStatistic @@ -127,14 +131,11 @@ func Statistics(header *protocol.RequestHeader, request *protocol.OrderStatistic
127 transactionContext.RollbackTransaction() 131 transactionContext.RollbackTransaction()
128 }() 132 }()
129 rsp = &protocol.OrderStatisticsResponse{Statistics: protocol.OrderStatics{}} 133 rsp = &protocol.OrderStatisticsResponse{Statistics: protocol.OrderStatics{}}
130 - //if rsp.Statistics.TodayIntentionQuantity, rsp.Statistics.TodayIntentionMoney, err = OrderDao.OrderStatics(&domain.OrderStaticQuery{  
131 - // BeginTime: utils.GetDayBegin().Unix() * 1000,  
132 - // EndTime: utils.GetDayEnd().Unix() * 1000,  
133 - // OrderType: domain.OrderIntention,  
134 - // PartnerId: header.UserId,  
135 - //}); err != nil {  
136 - // return  
137 - //} 134 + if partnerInfo, err := PartnerInfoRepository.FindOne(map[string]interface{}{"id": header.UserId}); err != nil {
  135 + err = protocol.NewCustomMessage(1, fmt.Sprintf("%v %v", "用户不存在:", header.UserId))
  136 + return
  137 + }
  138 +
138 if rsp.Statistics.TodayRealQuantity, rsp.Statistics.TodayRealMoney, err = OrderDao.OrderStatics(&domain.OrderStaticQuery{ 139 if rsp.Statistics.TodayRealQuantity, rsp.Statistics.TodayRealMoney, err = OrderDao.OrderStatics(&domain.OrderStaticQuery{
139 BeginTime: utils.GetDayBegin().Unix() * 1000, 140 BeginTime: utils.GetDayBegin().Unix() * 1000,
140 EndTime: utils.GetDayEnd().Unix() * 1000, 141 EndTime: utils.GetDayEnd().Unix() * 1000,
@@ -152,6 +153,12 @@ func Statistics(header *protocol.RequestHeader, request *protocol.OrderStatistic @@ -152,6 +153,12 @@ func Statistics(header *protocol.RequestHeader, request *protocol.OrderStatistic
152 } 153 }
153 rsp.Statistics.TodayRealMoney = utils.Decimal(rsp.Statistics.TodayRealMoney) 154 rsp.Statistics.TodayRealMoney = utils.Decimal(rsp.Statistics.TodayRealMoney)
154 rsp.Statistics.CumulativeMoney = utils.Decimal(rsp.Statistics.CumulativeMoney) 155 rsp.Statistics.CumulativeMoney = utils.Decimal(rsp.Statistics.CumulativeMoney)
  156 +
  157 + //事业分红/业务分红
  158 + //var enterpriseBonus,businessBonus float64
  159 + //if orderBonus,err= OrderDao.OrderBonusStatics(domain.OrderBonusQuery{PartnerId:header.UserId});e==nil{
  160 + //
  161 + //}
155 err = transactionContext.CommitTransaction() 162 err = transactionContext.CommitTransaction()
156 return 163 return
157 } 164 }
@@ -9,6 +9,8 @@ import ( @@ -9,6 +9,8 @@ import (
9 type OrderBase struct { 9 type OrderBase struct {
10 //表id 10 //表id
11 Id int64 11 Id int64
  12 + // 公司id
  13 + CompanyId int64 `json:"companyId"`
12 //订单类型 1:实际订单 2:意向订单 14 //订单类型 1:实际订单 2:意向订单
13 OrderType int `pg:",notnull,default:1"` 15 OrderType int `pg:",notnull,default:1"`
14 //订单编号 16 //订单编号
@@ -4,6 +4,8 @@ package domain @@ -4,6 +4,8 @@ package domain
4 type OrderGood struct { 4 type OrderGood struct {
5 //货品id 5 //货品id
6 Id int64 6 Id int64
  7 + // 公司id
  8 + CompanyId int64 `json:"companyId"`
7 //所属订单id 9 //所属订单id
8 OrderId int64 10 OrderId int64
9 //货品名称 长度可能较长 11 //货品名称 长度可能较长
@@ -20,3 +20,19 @@ type DividendOrdersQuery struct { @@ -20,3 +20,19 @@ type DividendOrdersQuery struct {
20 StartTime int64 `json:"startTime" valid:"Required"` 20 StartTime int64 `json:"startTime" valid:"Required"`
21 EndTime int64 `json:"endTime" valid:"Required"` 21 EndTime int64 `json:"endTime" valid:"Required"`
22 } 22 }
  23 +
  24 +// 订单分红统计-查询
  25 +type OrderBonusQuery struct {
  26 + PartnerId int64 `json:"partnerId,omitempty"`
  27 + CompanyId int64 `json:"companyId,omitempty"`
  28 +}
  29 +
  30 +// 订单分红统计-应答
  31 +type OrderBonusResponse struct {
  32 + // 应收分红
  33 + Bonus float64 `json:"partnerId,omitempty"`
  34 + // 订单数量
  35 + Total int64 `json:"companyId,omitempty"`
  36 + // 分红支出
  37 + BonusExpense float64 `json:"bonusExpense,omitempty"`
  38 +}
@@ -12,6 +12,8 @@ type PartnerInfoRepository interface { @@ -12,6 +12,8 @@ type PartnerInfoRepository interface {
12 type PartnerInfo struct { 12 type PartnerInfo struct {
13 // 合伙人ID 13 // 合伙人ID
14 Id int64 `json:"id"` 14 Id int64 `json:"id"`
  15 + // 公司id
  16 + CompanyId int64 `json:"companyId"`
15 // 合伙人姓名 17 // 合伙人姓名
16 PartnerName string `json:"partnerName"` 18 PartnerName string `json:"partnerName"`
17 // 登录账号 19 // 登录账号
@@ -22,7 +24,6 @@ type PartnerInfo struct { @@ -22,7 +24,6 @@ type PartnerInfo struct {
22 Status int `json:"status"` 24 Status int `json:"status"`
23 // 合伙类别 (1.事业合伙人 2.业务合伙人 3.研发合伙人) 25 // 合伙类别 (1.事业合伙人 2.业务合伙人 3.研发合伙人)
24 PartnerCategory int `json:"partnerCategory"` 26 PartnerCategory int `json:"partnerCategory"`
25 -  
26 //所属区域信息 27 //所属区域信息
27 RegionInfo *RegionInfo `json:"regionId"` 28 RegionInfo *RegionInfo `json:"regionId"`
28 //合作时间 29 //合作时间
@@ -31,7 +32,6 @@ type PartnerInfo struct { @@ -31,7 +32,6 @@ type PartnerInfo struct {
31 CreateAt time.Time `json:"createAt"` 32 CreateAt time.Time `json:"createAt"`
32 //更新时间 33 //更新时间
33 UpdateAt time.Time `json:"updateAt"` 34 UpdateAt time.Time `json:"updateAt"`
34 -  
35 //关联业务员 35 //关联业务员
36 Salesman []*Salesman `json:"salesman"` 36 Salesman []*Salesman `json:"salesman"`
37 //合伙人分类信息 37 //合伙人分类信息
@@ -43,6 +43,27 @@ func (dao *OrderBaseDao) OrderStatics(option *domain.OrderStaticQuery) (count in @@ -43,6 +43,27 @@ func (dao *OrderBaseDao) OrderStatics(option *domain.OrderStaticQuery) (count in
43 return 43 return
44 } 44 }
45 45
  46 +//订单分红统计
  47 +func (dao *OrderBaseDao) OrderBonusStatics(option domain.OrderBonusQuery) (rsp domain.OrderBonusResponse, err error) {
  48 + rsp = domain.OrderBonusResponse{}
  49 + if option.PartnerId == 0 && option.CompanyId == 0 {
  50 + return
  51 + }
  52 + tx := dao.transactionContext.PgTx
  53 + q := tx.Model(new(models.OrderBase))
  54 + q.ExcludeColumn("count(*) count")
  55 + q.ExcludeColumn("sum(plan_partner_bonus) bonus")
  56 + q.ExcludeColumn("sum(bonus_expense) bonus_expense")
  57 + if option.PartnerId > 0 {
  58 + q.Where(`"order_base".partner_id =?`, option.PartnerId)
  59 + }
  60 + if option.CompanyId > 0 {
  61 + q.Where(`"order_base".company_id =?`, option.CompanyId)
  62 + }
  63 + err = q.Select(&rsp.Total, &rsp.Bonus, &rsp.BonusExpense)
  64 + return
  65 +}
  66 +
46 //分红订单 67 //分红订单
47 func (dao *OrderBaseDao) DividendOrders(option *domain.DividendOrdersQueryOption) (count int, domainOrders []*domain.OrderBase, err error) { 68 func (dao *OrderBaseDao) DividendOrders(option *domain.DividendOrdersQueryOption) (count int, domainOrders []*domain.OrderBase, err error) {
48 tx := dao.transactionContext.PgTx 69 tx := dao.transactionContext.PgTx
@@ -10,6 +10,8 @@ type OrderBase struct { @@ -10,6 +10,8 @@ type OrderBase struct {
10 tableName struct{} `pg:"order_base"` 10 tableName struct{} `pg:"order_base"`
11 //表id 11 //表id
12 Id int64 `pg:",pk"` 12 Id int64 `pg:",pk"`
  13 + // 公司id
  14 + CompanyId int64
13 //订单类型 1:实际订单 2:意向订单 15 //订单类型 1:实际订单 2:意向订单
14 OrderType int `pg:",notnull,default:1"` 16 OrderType int `pg:",notnull,default:1"`
15 //订单编号 17 //订单编号
@@ -5,6 +5,8 @@ type OrderGood struct { @@ -5,6 +5,8 @@ type OrderGood struct {
5 tableName struct{} `pg:"order_good"` 5 tableName struct{} `pg:"order_good"`
6 //货品id 6 //货品id
7 Id int64 `pg:",pk"` 7 Id int64 `pg:",pk"`
  8 + // 公司id
  9 + CompanyId int64
8 //所属订单id 10 //所属订单id
9 OrderId int64 11 OrderId int64
10 //货品名称 长度可能较长 12 //货品名称 长度可能较长
@@ -10,6 +10,8 @@ type PartnerInfo struct { @@ -10,6 +10,8 @@ type PartnerInfo struct {
10 tableName struct{} `pg:"partner_info"` 10 tableName struct{} `pg:"partner_info"`
11 // 合伙人ID 11 // 合伙人ID
12 Id int64 `pg:",pk"` 12 Id int64 `pg:",pk"`
  13 + // 公司id
  14 + CompanyId int64
13 // 合伙人姓名 15 // 合伙人姓名
14 PartnerName string 16 PartnerName string
15 // 登录账号 17 // 登录账号
@@ -4,7 +4,7 @@ import "time" @@ -4,7 +4,7 @@ import "time"
4 4
5 // 公司信息 5 // 公司信息
6 type Company struct { 6 type Company struct {
7 - tableName struct{} `pg:"Company"` 7 + tableName struct{} `pg:"company"`
8 // 唯一标识 8 // 唯一标识
9 Id int64 9 Id int64
10 // 名称 10 // 名称
@@ -6,8 +6,10 @@ import ( @@ -6,8 +6,10 @@ import (
6 ) 6 )
7 7
8 type UserTokenClaims struct { 8 type UserTokenClaims struct {
9 - UserId int64 `json:"userId"`  
10 - Phone string `json:"phone"` 9 + UserId int64 `json:"userId"`
  10 + CompanyId int64 `json:"companyId"`
  11 + AdminType int `json:"adminType"` //用户类型 1:合伙人 2:高管
  12 + Phone string `json:"phone"`
11 jwt.StandardClaims 13 jwt.StandardClaims
12 } 14 }
13 15
@@ -23,10 +25,12 @@ func ParseJWTToken(token string) (*UserTokenClaims, error) { @@ -23,10 +25,12 @@ func ParseJWTToken(token string) (*UserTokenClaims, error) {
23 } 25 }
24 if tokenClaims != nil { 26 if tokenClaims != nil {
25 if claim, ok := tokenClaims.Claims.(*UserTokenClaims); ok && tokenClaims.Valid { 27 if claim, ok := tokenClaims.Claims.(*UserTokenClaims); ok && tokenClaims.Valid {
  28 + // TODO:多类型用户登录
  29 + claim.CompanyId = 1
  30 + claim.AdminType = 1
26 return claim, nil 31 return claim, nil
27 } 32 }
28 } 33 }
29 -  
30 return nil, err 34 return nil, err
31 } 35 }
32 36
@@ -80,6 +80,8 @@ func (this *BaseController) GetRequestHeader(ctx *context.Context) *protocol.Req @@ -80,6 +80,8 @@ func (this *BaseController) GetRequestHeader(ctx *context.Context) *protocol.Req
80 if len(h.AccessToken) > 0 { 80 if len(h.AccessToken) > 0 {
81 if claim, err := utils.ParseJWTToken(h.AccessToken); err == nil { 81 if claim, err := utils.ParseJWTToken(h.AccessToken); err == nil {
82 h.UserId = claim.UserId 82 h.UserId = claim.UserId
  83 + h.CompanyId = claim.CompanyId
  84 + h.AdminType = claim.AdminType
83 } 85 }
84 } 86 }
85 return h 87 return h
@@ -54,6 +54,12 @@ type OrderStatics struct { @@ -54,6 +54,12 @@ type OrderStatics struct {
54 TodayRealMoney float64 `json:"todayRealMoney"` //今日新增实发订单金额 54 TodayRealMoney float64 `json:"todayRealMoney"` //今日新增实发订单金额
55 CumulativeQuantity int `json:"cumulativeQuantity"` //累计实发订单 55 CumulativeQuantity int `json:"cumulativeQuantity"` //累计实发订单
56 CumulativeMoney float64 `json:"cumulativeMoney"` //累计实发订单金额 56 CumulativeMoney float64 `json:"cumulativeMoney"` //累计实发订单金额
  57 +
  58 + //v0.3.0 新增加
  59 + CareerPrecent float64 `json:"careerPrecent"` // 事业占比
  60 + BusinessPrecent float64 `json:"businessPrecent"` // 业务占比
  61 + DevelopPrecent float64 `json:"developPrecent"` // 研发占比
  62 + BusinessMoney float64 `json:"businessMoney"` // 业务分红累计
57 } 63 }
58 64
59 /*OrderList */ 65 /*OrderList */
@@ -9,8 +9,10 @@ type RequestHeader struct { @@ -9,8 +9,10 @@ type RequestHeader struct {
9 AppProject string 9 AppProject string
10 AccessToken string 10 AccessToken string
11 Uid int64 //用户基本信息Id 11 Uid int64 //用户基本信息Id
12 - CompanyId int64  
13 - UserId int64 //UserId 唯一标识,唯一关联所有用户信息(=user_company.id) 12 +
  13 + CompanyId int64 //公司编号
  14 + UserId int64 //UserId 唯一标识,(类型是合伙人对应表partner_info.id,类型是高层对应表users.id)
  15 + AdminType int //合伙人:1 高管:2
14 16
15 requestId string //请求编号 md5 17 requestId string //请求编号 md5
16 reqIndex int64 //请求链序号 18 reqIndex int64 //请求链序号