作者 yangfu

企业首页统计

@@ -27,4 +27,5 @@ require ( @@ -27,4 +27,5 @@ require (
27 github.com/yudai/gojsondiff v1.0.0 // indirect 27 github.com/yudai/gojsondiff v1.0.0 // indirect
28 github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82 // indirect 28 github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82 // indirect
29 github.com/yudai/pp v2.0.1+incompatible // indirect 29 github.com/yudai/pp v2.0.1+incompatible // indirect
  30 + github.com/shopspring/decimal v1.2.0
30 ) 31 )
@@ -11,3 +11,23 @@ type CooperationGoodsStatisticsDto struct { @@ -11,3 +11,23 @@ type CooperationGoodsStatisticsDto struct {
11 // 排名 11 // 排名
12 Rank int32 `json:"rank"` 12 Rank int32 `json:"rank"`
13 } 13 }
  14 +
  15 +type CooperationModeStatisticsDto struct {
  16 + // 共创人数
  17 + CooperationPeople float64 `json:"cooperationPeople"`
  18 + // 分红预算
  19 + DividendsEstimate string `json:"dividendsEstimate"`
  20 + // 订单金额
  21 + OrderAmount float64 `json:"orderAmount"`
  22 + // 共创模式编号
  23 + CooperationModeNumber string `json:"cooperationModeNumber"`
  24 + // 共创模式
  25 + // cooperationMode *CooperationMode
  26 +}
  27 +
  28 +type DividendStatisticsDto struct {
  29 + // 分红预算
  30 + DividendsEstimate string `json:"dividendsEstimate"`
  31 + // 订单金额
  32 + OrderAmount float64 `json:"orderAmount"`
  33 +}
@@ -20,18 +20,68 @@ type OrderGoodDao struct { @@ -20,18 +20,68 @@ type OrderGoodDao struct {
20 func (dao *OrderGoodDao) CooperationGoodsStatistics(queryOptions map[string]interface{}) ([]*domain.CooperationGoodsStatisticsDto, error) { 20 func (dao *OrderGoodDao) CooperationGoodsStatistics(queryOptions map[string]interface{}) ([]*domain.CooperationGoodsStatisticsDto, error) {
21 tx := dao.transactionContext.PgTx 21 tx := dao.transactionContext.PgTx
22 var goods []*domain.CooperationGoodsStatisticsDto 22 var goods []*domain.CooperationGoodsStatisticsDto
23 - var queryTime string 23 + var queryTime,queryLimit string
24 if _, ok := queryOptions["beginTime"]; ok { 24 if _, ok := queryOptions["beginTime"]; ok {
25 queryTime = fmt.Sprintf("and created_at>='%v' and created_at<'%v'", queryOptions["beginTime"], queryOptions["endTime"]) 25 queryTime = fmt.Sprintf("and created_at>='%v' and created_at<'%v'", queryOptions["beginTime"], queryOptions["endTime"])
26 } 26 }
  27 + if _, ok := queryOptions["limit"]; ok {
  28 + queryLimit = fmt.Sprintf("limit %v", queryOptions["limit"])
  29 + }
27 sql := fmt.Sprintf(`select order_good_name goodName,sum(order_good_amount) goodAmount from order_goods 30 sql := fmt.Sprintf(`select order_good_name goodName,sum(order_good_amount) goodAmount from order_goods
28 -where company_id=? and org_id = ? %v 31 +where company_id=? and org_id = ? %v
29 GROUP BY order_good_name 32 GROUP BY order_good_name
30 -order by goodAmount desc`, queryTime) 33 +order by goodAmount desc
  34 +%v
  35 +`, queryTime,queryLimit)
31 _, err := tx.Query(&goods, sql, queryOptions["companyId"], queryOptions["orgId"]) 36 _, err := tx.Query(&goods, sql, queryOptions["companyId"], queryOptions["orgId"])
32 return goods, err 37 return goods, err
33 } 38 }
34 39
  40 +// CooperationModeStatistics 共创模式统计
  41 +//
  42 +// queryOptions 查询参数
  43 +// - companyId 企业Id
  44 +// - orgId 组织Id
  45 +func (dao *OrderGoodDao) CooperationModeStatistics(queryOptions map[string]interface{}) ([]*domain.CooperationModeStatisticsDto, error) {
  46 + tx := dao.transactionContext.PgTx
  47 + var goods []*domain.CooperationModeStatisticsDto
  48 + sql := fmt.Sprintf(`select count(0) cooperationPeople,sum(a.actually_paid_amount) dividendsEstimate,b.cooperation_mode_number,0 orderAmount
  49 +from credit_accounts a inner join cooperation_contracts b on a.cooperation_contract_number = b.cooperation_contract_number
  50 +where a.company->>'companyId' = '?' and a.org->>'orgId' = '?' and b.status = 1
  51 +group by b.cooperation_mode_number
  52 +`)
  53 + _, err := tx.Query(&goods, sql, queryOptions["companyId"], queryOptions["orgId"])
  54 + return goods, err
  55 +}
  56 +
  57 +// DividendsStatistics 企业分红统计
  58 +//
  59 +// queryOptions 查询参数
  60 +// - beginTime 开始时间
  61 +// - endTime 结束时间
  62 +// - companyId 企业Id
  63 +// - orgId 组织Id
  64 +// - paymentStatus 支付状态
  65 +func (dao *OrderGoodDao) DividendsStatistics(queryOptions map[string]interface{}) (*domain.DividendStatisticsDto, error) {
  66 + tx := dao.transactionContext.PgTx
  67 + var queryTime, queryPaymentStatus string
  68 + if _, ok := queryOptions["beginTime"]; ok {
  69 + queryTime = fmt.Sprintf("and created_at>='%v' and created_at<'%v'", queryOptions["beginTime"], queryOptions["endTime"])
  70 + }
  71 + if _, ok := queryOptions["paymentStatus"]; ok {
  72 + queryPaymentStatus = fmt.Sprintf(" and payment_status=%v", queryOptions["paymentStatus"])
  73 + }
  74 + sql := fmt.Sprintf(`select sum(actually_paid_amount) dividendsEstimate,0 orderAmount
  75 +from credit_accounts
  76 +where company->>'companyId' = '?' and org->>'orgId' = '?' %v %v
  77 +`, queryTime, queryPaymentStatus)
  78 + var s *domain.DividendStatisticsDto
  79 + _, err := tx.Query(&s, sql, queryOptions["companyId"], queryOptions["orgId"])
  80 + return s, err
  81 +}
  82 +
  83 +
  84 +
35 func NewOrderGoodDao(transactionContext *pgTransaction.TransactionContext) (*OrderGoodDao, error) { 85 func NewOrderGoodDao(transactionContext *pgTransaction.TransactionContext) (*OrderGoodDao, error) {
36 if transactionContext == nil { 86 if transactionContext == nil {
37 return nil, fmt.Errorf("transactionContext参数不能为nil") 87 return nil, fmt.Errorf("transactionContext参数不能为nil")
@@ -40,4 +90,4 @@ func NewOrderGoodDao(transactionContext *pgTransaction.TransactionContext) (*Ord @@ -40,4 +90,4 @@ func NewOrderGoodDao(transactionContext *pgTransaction.TransactionContext) (*Ord
40 transactionContext: transactionContext, 90 transactionContext: transactionContext,
41 }, nil 91 }, nil
42 } 92 }
43 -} 93 +}
@@ -5,6 +5,7 @@ import ( @@ -5,6 +5,7 @@ import (
5 pgTransaction "github.com/linmadan/egglib-go/transaction/pg" 5 pgTransaction "github.com/linmadan/egglib-go/transaction/pg"
6 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/domain" 6 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/domain"
7 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/infrastructure/dao" 7 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/infrastructure/dao"
  8 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/infrastructure/utils"
8 "time" 9 "time"
9 ) 10 )
10 11
@@ -41,7 +42,8 @@ func (ptr *PgCommonStatisticsService) Scan(keyFlags []int, queryOption map[strin @@ -41,7 +42,8 @@ func (ptr *PgCommonStatisticsService) Scan(keyFlags []int, queryOption map[strin
41 // totalOrganizationUser 统计组织用户 42 // totalOrganizationUser 统计组织用户
42 43
43 // rankType 排行榜类型,1月榜,2年榜 3总榜,默认展示年榜 44 // rankType 排行榜类型,1月榜,2年榜 3总榜,默认展示年榜
44 -func (ptr *PgCommonStatisticsService) CooperationGoodsStatistics(companyId, orgId int64, rankType int) ([]*domain.CooperationGoodsStatisticsDto, error) { 45 +// top 排名前n个
  46 +func (ptr *PgCommonStatisticsService) CooperationGoodsStatistics(companyId, orgId int64, rankType int, top int) ([]*domain.CooperationGoodsStatisticsDto, error) {
45 orderGoodDao, _ := dao.NewOrderGoodDao(ptr.transactionContext) 47 orderGoodDao, _ := dao.NewOrderGoodDao(ptr.transactionContext)
46 queryOptions := make(map[string]interface{}) 48 queryOptions := make(map[string]interface{})
47 queryOptions["companyId"] = companyId 49 queryOptions["companyId"] = companyId
@@ -60,7 +62,75 @@ func (ptr *PgCommonStatisticsService) CooperationGoodsStatistics(companyId, orgI @@ -60,7 +62,75 @@ func (ptr *PgCommonStatisticsService) CooperationGoodsStatistics(companyId, orgI
60 queryOptions["beginTime"] = beginTime 62 queryOptions["beginTime"] = beginTime
61 queryOptions["endTime"] = endTime 63 queryOptions["endTime"] = endTime
62 } 64 }
63 - return orderGoodDao.CooperationGoodsStatistics(queryOptions) 65 + if top >0{
  66 + queryOptions["limit"] = top
  67 + }
  68 + goods,err:= orderGoodDao.CooperationGoodsStatistics(queryOptions)
  69 + if err!=nil{
  70 + return nil,err
  71 + }
  72 +
  73 + // 2.计算百分比
  74 + var totalAmount float64
  75 + for i:=range goods{
  76 + goods[i].Rank = int32(i)
  77 + totalAmount +=goods[i].GoodAmount
  78 + }
  79 + for i:=range goods{
  80 + goods[i].GoodRatio = utils.Round((goods[i].GoodAmount / totalAmount)*100,0)
  81 + }
  82 + return goods,nil
  83 +}
  84 +
  85 +// CooperationModeStatistics 企业-共创模式统计
  86 +//
  87 +// p1 p1_desc
  88 +func (ptr *PgCommonStatisticsService) CooperationModeStatistics(companyId, orgId int64) ([]*domain.CooperationModeStatisticsDto, error){
  89 + orderGoodDao, _ := dao.NewOrderGoodDao(ptr.transactionContext)
  90 + queryOptions := make(map[string]interface{})
  91 + queryOptions["companyId"] = companyId
  92 + queryOptions["orgId"] = orgId
  93 +
  94 + modeStatistics,err:= orderGoodDao.CooperationModeStatistics(queryOptions)
  95 + if err!=nil{
  96 + return nil,err
  97 + }
  98 +
  99 + return modeStatistics, nil
  100 +}
  101 +
  102 +// DividendsStatistics 分红统计
  103 +//
  104 +// action 1:当前月
  105 +func (ptr *PgCommonStatisticsService) DividendsStatistics(companyId, orgId int64,action int) (interface{}, error){
  106 + orderGoodDao, _ := dao.NewOrderGoodDao(ptr.transactionContext)
  107 + queryOptions := make(map[string]interface{})
  108 + queryOptions["companyId"] = companyId
  109 + queryOptions["orgId"] = orgId
  110 + var beginTime, endTime time.Time
  111 + var res = make(map[string]interface{})
  112 + if action==1{
  113 + y := time.Now().Year()
  114 + m := time.Now().Month()
  115 + beginTime = time.Date(y, m, 1, 0, 0, 0, 0, time.Local)
  116 + endTime = beginTime.AddDate(0, 1, 0)
  117 + queryOptions["beginTime"] = beginTime
  118 + queryOptions["endTime"] = endTime
  119 + }
  120 + totalDividends,err:= orderGoodDao.DividendsStatistics(queryOptions)
  121 + if err!=nil{
  122 + return nil,err
  123 + }
  124 + res["creditAccount"] = totalDividends.DividendsEstimate
  125 + res["orderAmount"] = totalDividends.OrderAmount
  126 +
  127 + queryOptions["paymentStatus"] = 2
  128 + dividendsEstimate,err:= orderGoodDao.DividendsStatistics(queryOptions)
  129 + if err!=nil{
  130 + return nil,err
  131 + }
  132 + res["dividendsEstimate"] = dividendsEstimate.DividendsEstimate
  133 + return res, nil
64 } 134 }
65 135
66 func (ptr *PgCommonStatisticsService) loadQueryOptions(queryOption map[string]interface{}, keys ...string) (map[string]interface{}, error) { 136 func (ptr *PgCommonStatisticsService) loadQueryOptions(queryOption map[string]interface{}, keys ...string) (map[string]interface{}, error) {
1 package utils 1 package utils
2 2
3 -import "strconv" 3 +import (
  4 + "strconv"
  5 + "github.com/shopspring/decimal"
  6 +)
4 7
5 // Intersect 返回两个数组的交集 8 // Intersect 返回两个数组的交集
6 func Intersect(nums1 []int64, nums2 []int64) []int64 { 9 func Intersect(nums1 []int64, nums2 []int64) []int64 {
@@ -68,3 +71,10 @@ func SliceAtoi(sa []string) ([]int64, error) { @@ -68,3 +71,10 @@ func SliceAtoi(sa []string) ([]int64, error) {
68 } 71 }
69 return si, nil 72 return si, nil
70 } 73 }
  74 +
  75 +func Round(value float64, places int32) float64 {
  76 + quantity := decimal.NewFromFloat(value)
  77 + d := quantity.Round(places)
  78 + rsp, _ := d.Float64()
  79 + return rsp
  80 +}