作者 yangfu

共创用户列表 明细修改

@@ -225,7 +225,7 @@ func (dao *CooperationContractDao) Find(queryOptions map[string]interface{}) (in @@ -225,7 +225,7 @@ func (dao *CooperationContractDao) Find(queryOptions map[string]interface{}) (in
225 var cooperationContractRelevantModels []*models.CooperationContractRelevant 225 var cooperationContractRelevantModels []*models.CooperationContractRelevant
226 if cooperationContract, err := transform.TransformToCooperationContractDomainModelFromPgModels( 226 if cooperationContract, err := transform.TransformToCooperationContractDomainModelFromPgModels(
227 cooperationContractModel, 227 cooperationContractModel,
228 - &models.CooperationMode{}, 228 + &models.CooperationMode{CooperationModeNumber: cooperationContractModel.CooperationModeNumber},
229 dividendsIncentivesRuleModels, 229 dividendsIncentivesRuleModels,
230 moneyIncentivesRuleModels, 230 moneyIncentivesRuleModels,
231 cooperationContractRelevantModels, 231 cooperationContractRelevantModels,
@@ -39,6 +39,14 @@ func (repository *CooperationContractUndertakerDao) Find(queryOptions map[string @@ -39,6 +39,14 @@ func (repository *CooperationContractUndertakerDao) Find(queryOptions map[string
39 return query, nil 39 return query, nil
40 }) 40 })
41 } 41 }
  42 + if userId, ok := queryOptions["userId"]; ok && userId.(int64) != 0 {
  43 + query.WhereGroup(func(query *orm.Query) (*orm.Query, error) {
  44 + query.WhereOr("user_id = ? ", userId)
  45 + query.WhereOr("referrer->>'userId' = '?' ", userId)
  46 + query.WhereOr("salesman->>'userId' = '?' ", userId)
  47 + return query, nil
  48 + })
  49 + }
42 offsetLimitFlag := true 50 offsetLimitFlag := true
43 if offsetLimit, ok := queryOptions["offsetLimit"]; ok { 51 if offsetLimit, ok := queryOptions["offsetLimit"]; ok {
44 offsetLimitFlag = offsetLimit.(bool) 52 offsetLimitFlag = offsetLimit.(bool)
@@ -312,12 +312,14 @@ func (ptr *CooperationStatisticsService) CompanyCooperationUsersStatistics(query @@ -312,12 +312,14 @@ func (ptr *CooperationStatisticsService) CompanyCooperationUsersStatistics(query
312 312
313 userService, _ := NewUserService() 313 userService, _ := NewUserService()
314 314
  315 + contractUndertakerDao, _ := dao.NewCooperationContractUndertakerDao(ptr.transactionContext)
  316 + dividendsOrderDao, _ := dao.NewDividendsOrderDao(ptr.transactionContext)
315 var retMap = make([]interface{}, 0) 317 var retMap = make([]interface{}, 0)
316 for i := range responses { 318 for i := range responses {
317 responses[i].CooperationTime = time.Now().Unix() * 1000 319 responses[i].CooperationTime = time.Now().Unix() * 1000
318 320
319 item := map[string]interface{}{ 321 item := map[string]interface{}{
320 - "dividendsOrderAmount": responses[i].DividendsOrderAmount, 322 + "dividendsOrderAmount": 0,
321 "actuallyPaidAmount": responses[i].ActuallyPaidAmount, 323 "actuallyPaidAmount": responses[i].ActuallyPaidAmount,
322 "unPaidAmount": responses[i].UnPaidAmount, 324 "unPaidAmount": responses[i].UnPaidAmount,
323 "cooperationTime": time.Now().Unix() * 1000, 325 "cooperationTime": time.Now().Unix() * 1000,
@@ -337,6 +339,16 @@ func (ptr *CooperationStatisticsService) CompanyCooperationUsersStatistics(query @@ -337,6 +339,16 @@ func (ptr *CooperationStatisticsService) CompanyCooperationUsersStatistics(query
337 }, 339 },
338 } 340 }
339 } 341 }
  342 + // 订单金额
  343 + _, contracts, _ := contractUndertakerDao.Find(map[string]interface{}{"orgId": request.OrgId, "userId": responses[i].UserId})
  344 + var contractsNumbers []string
  345 + for i := range contracts {
  346 + contractsNumbers = append(contractsNumbers, contracts[i].CooperationContractNumber)
  347 + }
  348 + if len(contractsNumbers) > 0 {
  349 + item["dividendsOrderAmount"], _ = dividendsOrderDao.CalculateGoodOrderAmount(map[string]interface{}{"orgId": request.OrgId, "cooperationContractNumbers": contractsNumbers})
  350 + }
  351 +
340 retMap = append(retMap, item) 352 retMap = append(retMap, item)
341 } 353 }
342 354
@@ -367,63 +379,208 @@ func (ptr *CooperationStatisticsService) CooperationUserModeStatistics(queryOpti @@ -367,63 +379,208 @@ func (ptr *CooperationStatisticsService) CooperationUserModeStatistics(queryOpti
367 } 379 }
368 queryOptions = tool_funs.SimpleStructToMap(&request) 380 queryOptions = tool_funs.SimpleStructToMap(&request)
369 381
370 - orderGoodDao, _ := dao.NewOrderGoodDao(ptr.transactionContext)  
371 - modeStatistics, err := orderGoodDao.CooperationUserModeStatistics(queryOptions)  
372 - if err != nil {  
373 - return nil, err 382 + contractUndertakerDao, _ := dao.NewCooperationContractUndertakerDao(ptr.transactionContext)
  383 + contractDao, _ := dao.NewCooperationContractDao(ptr.transactionContext)
  384 + cooperationModeRepository, _ := repository.NewCooperationModeRepository(ptr.transactionContext)
  385 +
  386 + // 1.查询承接的合约
  387 + _, contractUndertakers, _ := contractUndertakerDao.Find(map[string]interface{}{"orgId": request.OrgId, "userId": request.UserId})
  388 + var contractsNumbers []string
  389 + for i := range contractUndertakers {
  390 + contractsNumbers = append(contractsNumbers, contractUndertakers[i].CooperationContractNumber)
374 } 391 }
375 - if len(modeStatistics) == 0 { 392 + if len(contractsNumbers) == 0 {
  393 + return struct{}{}, nil
  394 + }
  395 + _, contracts, _ := contractDao.Find(map[string]interface{}{"orgId": request.OrgId, "cooperationContractNumbers": contractsNumbers})
  396 + if len(contracts) == 0 {
376 return struct{}{}, nil 397 return struct{}{}, nil
377 } 398 }
378 399
379 var modeNumbers []string 400 var modeNumbers []string
380 - var mapModeStatistics = make(map[string]*domain.CooperationModeStatisticsDto)  
381 - for i := range modeStatistics {  
382 - mapModeStatistics[modeStatistics[i].CooperationModeNumber] = modeStatistics[i]  
383 - modeNumbers = append(modeNumbers, modeStatistics[i].CooperationModeNumber) 401 + for i := range contracts {
  402 + modeNumbers = append(modeNumbers, contracts[i].CooperationMode.CooperationModeNumber)
  403 + }
  404 + // 2.查询模式
  405 + _, modes, _ := cooperationModeRepository.Find(map[string]interface{}{"orgId": request.OrgId, "cooperationModeNumbers": modeNumbers})
  406 + if len(modes) == 0 {
  407 + return struct{}{}, nil
  408 + }
  409 + var mapMode = make(map[string]*domain.CooperationMode)
  410 + var mapModeContracts = make(map[string][]string)
  411 + var cooperationTypes []interface{}
  412 + for i := range modes {
  413 + mapMode[modes[i].CooperationModeNumber] = modes[i]
  414 + mapModeContracts[modes[i].CooperationModeNumber] = make([]string, 0)
  415 + cooperationTypes = append(cooperationTypes, map[string]interface{}{
  416 + "cooperationModeId": modes[i].CooperationModeId,
  417 + "cooperationModeName": modes[i].CooperationModeName,
  418 + "cooperationModeNumber": modes[i].CooperationModeNumber,
  419 + })
  420 + }
  421 + for i := range contracts {
  422 + key := contracts[i].CooperationMode.CooperationModeNumber
  423 + if _, ok := mapMode[key]; ok {
  424 + mapModeContracts[key] = append(mapModeContracts[key], contracts[i].CooperationContractNumber)
  425 + }
384 } 426 }
385 427
386 - cooperationModeRepository, _ := repository.NewCooperationModeRepository(ptr.transactionContext)  
387 - _, cooperModes, err := cooperationModeRepository.Find(map[string]interface{}{"cooperationModeNumbers": modeNumbers, "orgId": request.OrgId}) 428 + // 3.分红支出
  429 + dividendsDetails, err := ptr.userModeDividend(request.OrgId, mapMode, mapModeContracts)
  430 + if err != nil {
  431 + return nil, err
  432 + }
  433 + // 4.成交订单
  434 + orderDetails, err := ptr.userModeOrder(request.OrgId, mapMode, mapModeContracts)
388 if err != nil { 435 if err != nil {
389 return nil, err 436 return nil, err
390 } 437 }
391 - var cooperationTypes, dividendsExpenseByTypes, orderAmountByTypes []interface{}  
392 - var totalOrderAmount float64  
393 - var totalDividendAmount float64  
394 - for i := range cooperModes {  
395 - m := cooperModes[i]  
396 - if modeStatistics, ok := mapModeStatistics[m.CooperationModeNumber]; ok {  
397 - totalOrderAmount += modeStatistics.OrderAmount  
398 - totalDividendAmount += modeStatistics.DividendsEstimate  
399 - dividendsExpenseByTypes = append(dividendsExpenseByTypes, map[string]interface{}{  
400 - "dividendsTypeName": m.CooperationModeName + "分红支出",  
401 - "dividendsExpense": modeStatistics.DividendsEstimate, //实际已支付金额  
402 - })  
403 - orderAmountByTypes = append(orderAmountByTypes, map[string]interface{}{  
404 - "orderAmount": modeStatistics.OrderAmount,  
405 - "orderTypeName": m.CooperationModeName + "成交订单",  
406 - }) 438 + return map[string]interface{}{
  439 + "cooperationTypes": cooperationTypes,
  440 + "dividendsDetails": dividendsDetails,
  441 + "orderDetails": orderDetails,
  442 + }, nil
  443 +}
  444 +
  445 +// 用户模式分红
  446 +func (ptr *CooperationStatisticsService) userModeDividend(orgId int64, mapMode map[string]*domain.CooperationMode, mapModeContracts map[string][]string) (interface{}, error) {
  447 + creditAccountDao, _ := dao.NewCreditAccountDao(ptr.transactionContext)
  448 + var dividends dividendsExpenseByTypes = make([]dividendsExpenseByType, 0)
  449 + var total float64 = 0
  450 + for _, v := range mapMode {
  451 + numbers := mapModeContracts[v.CooperationModeNumber]
  452 + var dividendsEstimate = &CreditAccountStatisticsResponse{}
  453 + err := creditAccountDao.DividendsStatistics(map[string]interface{}{"orgId": orgId, "cooperationContractNumbers": numbers}, dividendsEstimate)
  454 + if err != nil {
  455 + return nil, err
  456 + }
  457 + dividends = append(dividends, dividendsExpenseByType{
  458 + DividendsTypeName: v.CooperationModeName + "分红支出",
  459 + DividendsExpense: dividendsEstimate.Paid, //实际已支付金额
  460 + })
  461 + total += dividendsEstimate.Paid
  462 + }
  463 + return map[string]interface{}{
  464 + "dividendsExpense": total,
  465 + "dividendsExpenseByTypes": dividends,
  466 + }, nil
  467 +}
  468 +
  469 +// 用户模式订单
  470 +func (ptr *CooperationStatisticsService) userModeOrder(orgId int64, mapMode map[string]*domain.CooperationMode, mapModeContracts map[string][]string) (interface{}, error) {
  471 + creditAccountDao, _ := dao.NewDividendsOrderDao(ptr.transactionContext)
  472 + var dividends orderAmountByTypes = make([]orderAmountByType, 0)
  473 + var total float64 = 0
  474 + for _, v := range mapMode {
  475 + numbers := mapModeContracts[v.CooperationModeNumber]
  476 + amount, err := creditAccountDao.CalculateGoodOrderAmount(map[string]interface{}{"orgId": orgId, "cooperationContractNumbers": numbers})
  477 + if err != nil {
  478 + return nil, err
407 } 479 }
408 - cooperationTypes = append(cooperationTypes, map[string]interface{}{  
409 - "cooperationModeId": m.CooperationModeId,  
410 - "cooperationModeName": m.CooperationModeName,  
411 - "cooperationModeNumber": m.CooperationModeNumber, 480 + dividends = append(dividends, orderAmountByType{
  481 + OrderAmount: amount,
  482 + OrderTypeName: v.CooperationModeName + "成交订单",
412 }) 483 })
  484 + total += amount
413 } 485 }
414 return map[string]interface{}{ 486 return map[string]interface{}{
415 - "cooperationTypes": cooperationTypes,  
416 - "dividendsDetails": map[string]interface{}{  
417 - "dividendsExpense": totalDividendAmount,  
418 - "dividendsExpenseByTypes": dividendsExpenseByTypes,  
419 - },  
420 - "orderDetails": map[string]interface{}{  
421 - "orderAmount": totalOrderAmount,  
422 - "orderAmountByTypes": orderAmountByTypes,  
423 - }, 487 + "orderAmount": total,
  488 + "orderAmountByTypes": dividends,
424 }, nil 489 }, nil
425 } 490 }
426 491
  492 +// 公司 - 共创用户模式统计
  493 +func (ptr *CooperationStatisticsService) CooperationUserModeStatisticsBak(queryOptions map[string]interface{}) (interface{}, error) {
  494 + // 参数验证
  495 + //var request = struct {
  496 + // UserId int64 `json:"userId" valid:"Required"`
  497 + // OrgId int64 `json:"orgId" valid:"Required"`
  498 + //}{}
  499 + //if err := LoadQueryObject(queryOptions, &request); err != nil {
  500 + // return nil, err
  501 + //}
  502 + //queryOptions = tool_funs.SimpleStructToMap(&request)
  503 + //
  504 + //orderGoodDao, _ := dao.NewOrderGoodDao(ptr.transactionContext)
  505 + //modeStatistics, err := orderGoodDao.CooperationUserModeStatistics(queryOptions)
  506 + //if err != nil {
  507 + // return nil, err
  508 + //}
  509 + //if len(modeStatistics) == 0 {
  510 + // return struct{}{}, nil
  511 + //}
  512 + //
  513 + //var modeNumbers []string
  514 + //var mapModeStatistics = make(map[string]*domain.CooperationModeStatisticsDto)
  515 + //for i := range modeStatistics {
  516 + // mapModeStatistics[modeStatistics[i].CooperationModeNumber] = modeStatistics[i]
  517 + // modeNumbers = append(modeNumbers, modeStatistics[i].CooperationModeNumber)
  518 + //}
  519 + //
  520 + //cooperationModeRepository, _ := repository.NewCooperationModeRepository(ptr.transactionContext)
  521 + //_, cooperModes, err := cooperationModeRepository.Find(map[string]interface{}{"cooperationModeNumbers": modeNumbers, "orgId": request.OrgId})
  522 + //if err != nil {
  523 + // return nil, err
  524 + //}
  525 + //var cooperationTypes, dividendsExpenseByTypes, orderAmountByTypes []interface{}
  526 + //var totalOrderAmount float64
  527 + //var totalDividendAmount float64
  528 + //for i := range cooperModes {
  529 + // m := cooperModes[i]
  530 + // if modeStatistics, ok := mapModeStatistics[m.CooperationModeNumber]; ok {
  531 + // totalOrderAmount += modeStatistics.OrderAmount
  532 + // totalDividendAmount += modeStatistics.DividendsEstimate
  533 + // dividendsExpenseByTypes = append(dividendsExpenseByTypes, map[string]interface{}{
  534 + // "dividendsTypeName": m.CooperationModeName + "分红支出",
  535 + // "dividendsExpense": modeStatistics.DividendsEstimate, //实际已支付金额
  536 + // })
  537 + // orderAmountByTypes = append(orderAmountByTypes, map[string]interface{}{
  538 + // "orderAmount": modeStatistics.OrderAmount,
  539 + // "orderTypeName": m.CooperationModeName + "成交订单",
  540 + // })
  541 + // }
  542 + // cooperationTypes = append(cooperationTypes, map[string]interface{}{
  543 + // "cooperationModeId": m.CooperationModeId,
  544 + // "cooperationModeName": m.CooperationModeName,
  545 + // "cooperationModeNumber": m.CooperationModeNumber,
  546 + // })
  547 + //}
  548 + //return map[string]interface{}{
  549 + // "cooperationTypes": cooperationTypes,
  550 + // "dividendsDetails": map[string]interface{}{
  551 + // "dividendsExpense": totalDividendAmount,
  552 + // "dividendsExpenseByTypes": dividendsExpenseByTypes,
  553 + // },
  554 + // "orderDetails": map[string]interface{}{
  555 + // "orderAmount": totalOrderAmount,
  556 + // "orderAmountByTypes": orderAmountByTypes,
  557 + // },
  558 + //}, nil
  559 + return nil, nil
  560 +}
  561 +
  562 +type dividendsExpenseByType struct {
  563 + DividendsTypeName string `json:"dividendsTypeName"`
  564 + DividendsExpense float64 `json:"dividendsExpense"`
  565 +}
  566 +type orderAmountByType struct {
  567 + OrderTypeName string `json:"orderTypeName"`
  568 + OrderAmount float64 `json:"orderAmount"`
  569 +}
  570 +type dividendsExpenseByTypes []dividendsExpenseByType
  571 +
  572 +func (s dividendsExpenseByTypes) Len() int { return len(s) }
  573 +func (s dividendsExpenseByTypes) Less(i, j int) bool {
  574 + return s[i].DividendsExpense < s[j].DividendsExpense
  575 +}
  576 +func (s dividendsExpenseByTypes) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
  577 +
  578 +type orderAmountByTypes []orderAmountByType
  579 +
  580 +func (s orderAmountByTypes) Len() int { return len(s) }
  581 +func (s orderAmountByTypes) Less(i, j int) bool { return s[i].OrderAmount < s[j].OrderAmount }
  582 +func (s orderAmountByTypes) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
  583 +
427 // 公司 - 共创用户分红支付统计 584 // 公司 - 共创用户分红支付统计
428 func (ptr *CooperationStatisticsService) CompanyPaymentHistoryStatistics(queryOptions map[string]interface{}) (interface{}, error) { 585 func (ptr *CooperationStatisticsService) CompanyPaymentHistoryStatistics(queryOptions map[string]interface{}) (interface{}, error) {
429 // 参数验证 586 // 参数验证