...
|
...
|
@@ -312,12 +312,14 @@ func (ptr *CooperationStatisticsService) CompanyCooperationUsersStatistics(query |
|
|
|
|
|
userService, _ := NewUserService()
|
|
|
|
|
|
contractUndertakerDao, _ := dao.NewCooperationContractUndertakerDao(ptr.transactionContext)
|
|
|
dividendsOrderDao, _ := dao.NewDividendsOrderDao(ptr.transactionContext)
|
|
|
var retMap = make([]interface{}, 0)
|
|
|
for i := range responses {
|
|
|
responses[i].CooperationTime = time.Now().Unix() * 1000
|
|
|
|
|
|
item := map[string]interface{}{
|
|
|
"dividendsOrderAmount": responses[i].DividendsOrderAmount,
|
|
|
"dividendsOrderAmount": 0,
|
|
|
"actuallyPaidAmount": responses[i].ActuallyPaidAmount,
|
|
|
"unPaidAmount": responses[i].UnPaidAmount,
|
|
|
"cooperationTime": time.Now().Unix() * 1000,
|
...
|
...
|
@@ -337,6 +339,16 @@ func (ptr *CooperationStatisticsService) CompanyCooperationUsersStatistics(query |
|
|
},
|
|
|
}
|
|
|
}
|
|
|
// 订单金额
|
|
|
_, contracts, _ := contractUndertakerDao.Find(map[string]interface{}{"orgId": request.OrgId, "userId": responses[i].UserId})
|
|
|
var contractsNumbers []string
|
|
|
for i := range contracts {
|
|
|
contractsNumbers = append(contractsNumbers, contracts[i].CooperationContractNumber)
|
|
|
}
|
|
|
if len(contractsNumbers) > 0 {
|
|
|
item["dividendsOrderAmount"], _ = dividendsOrderDao.CalculateGoodOrderAmount(map[string]interface{}{"orgId": request.OrgId, "cooperationContractNumbers": contractsNumbers})
|
|
|
}
|
|
|
|
|
|
retMap = append(retMap, item)
|
|
|
}
|
|
|
|
...
|
...
|
@@ -367,63 +379,208 @@ func (ptr *CooperationStatisticsService) CooperationUserModeStatistics(queryOpti |
|
|
}
|
|
|
queryOptions = tool_funs.SimpleStructToMap(&request)
|
|
|
|
|
|
orderGoodDao, _ := dao.NewOrderGoodDao(ptr.transactionContext)
|
|
|
modeStatistics, err := orderGoodDao.CooperationUserModeStatistics(queryOptions)
|
|
|
if err != nil {
|
|
|
return nil, err
|
|
|
contractUndertakerDao, _ := dao.NewCooperationContractUndertakerDao(ptr.transactionContext)
|
|
|
contractDao, _ := dao.NewCooperationContractDao(ptr.transactionContext)
|
|
|
cooperationModeRepository, _ := repository.NewCooperationModeRepository(ptr.transactionContext)
|
|
|
|
|
|
// 1.查询承接的合约
|
|
|
_, contractUndertakers, _ := contractUndertakerDao.Find(map[string]interface{}{"orgId": request.OrgId, "userId": request.UserId})
|
|
|
var contractsNumbers []string
|
|
|
for i := range contractUndertakers {
|
|
|
contractsNumbers = append(contractsNumbers, contractUndertakers[i].CooperationContractNumber)
|
|
|
}
|
|
|
if len(modeStatistics) == 0 {
|
|
|
if len(contractsNumbers) == 0 {
|
|
|
return struct{}{}, nil
|
|
|
}
|
|
|
_, contracts, _ := contractDao.Find(map[string]interface{}{"orgId": request.OrgId, "cooperationContractNumbers": contractsNumbers})
|
|
|
if len(contracts) == 0 {
|
|
|
return struct{}{}, nil
|
|
|
}
|
|
|
|
|
|
var modeNumbers []string
|
|
|
var mapModeStatistics = make(map[string]*domain.CooperationModeStatisticsDto)
|
|
|
for i := range modeStatistics {
|
|
|
mapModeStatistics[modeStatistics[i].CooperationModeNumber] = modeStatistics[i]
|
|
|
modeNumbers = append(modeNumbers, modeStatistics[i].CooperationModeNumber)
|
|
|
for i := range contracts {
|
|
|
modeNumbers = append(modeNumbers, contracts[i].CooperationMode.CooperationModeNumber)
|
|
|
}
|
|
|
// 2.查询模式
|
|
|
_, modes, _ := cooperationModeRepository.Find(map[string]interface{}{"orgId": request.OrgId, "cooperationModeNumbers": modeNumbers})
|
|
|
if len(modes) == 0 {
|
|
|
return struct{}{}, nil
|
|
|
}
|
|
|
var mapMode = make(map[string]*domain.CooperationMode)
|
|
|
var mapModeContracts = make(map[string][]string)
|
|
|
var cooperationTypes []interface{}
|
|
|
for i := range modes {
|
|
|
mapMode[modes[i].CooperationModeNumber] = modes[i]
|
|
|
mapModeContracts[modes[i].CooperationModeNumber] = make([]string, 0)
|
|
|
cooperationTypes = append(cooperationTypes, map[string]interface{}{
|
|
|
"cooperationModeId": modes[i].CooperationModeId,
|
|
|
"cooperationModeName": modes[i].CooperationModeName,
|
|
|
"cooperationModeNumber": modes[i].CooperationModeNumber,
|
|
|
})
|
|
|
}
|
|
|
for i := range contracts {
|
|
|
key := contracts[i].CooperationMode.CooperationModeNumber
|
|
|
if _, ok := mapMode[key]; ok {
|
|
|
mapModeContracts[key] = append(mapModeContracts[key], contracts[i].CooperationContractNumber)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
cooperationModeRepository, _ := repository.NewCooperationModeRepository(ptr.transactionContext)
|
|
|
_, cooperModes, err := cooperationModeRepository.Find(map[string]interface{}{"cooperationModeNumbers": modeNumbers, "orgId": request.OrgId})
|
|
|
// 3.分红支出
|
|
|
dividendsDetails, err := ptr.userModeDividend(request.OrgId, mapMode, mapModeContracts)
|
|
|
if err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
|
var cooperationTypes, dividendsExpenseByTypes, orderAmountByTypes []interface{}
|
|
|
var totalOrderAmount float64
|
|
|
var totalDividendAmount float64
|
|
|
for i := range cooperModes {
|
|
|
m := cooperModes[i]
|
|
|
if modeStatistics, ok := mapModeStatistics[m.CooperationModeNumber]; ok {
|
|
|
totalOrderAmount += modeStatistics.OrderAmount
|
|
|
totalDividendAmount += modeStatistics.DividendsEstimate
|
|
|
dividendsExpenseByTypes = append(dividendsExpenseByTypes, map[string]interface{}{
|
|
|
"dividendsTypeName": m.CooperationModeName + "分红支出",
|
|
|
"dividendsExpense": modeStatistics.DividendsEstimate, //实际已支付金额
|
|
|
})
|
|
|
orderAmountByTypes = append(orderAmountByTypes, map[string]interface{}{
|
|
|
"orderAmount": modeStatistics.OrderAmount,
|
|
|
"orderTypeName": m.CooperationModeName + "成交订单",
|
|
|
// 4.成交订单
|
|
|
orderDetails, err := ptr.userModeOrder(request.OrgId, mapMode, mapModeContracts)
|
|
|
if err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
|
return map[string]interface{}{
|
|
|
"cooperationTypes": cooperationTypes,
|
|
|
"dividendsDetails": dividendsDetails,
|
|
|
"orderDetails": orderDetails,
|
|
|
}, nil
|
|
|
}
|
|
|
|
|
|
// 用户模式分红
|
|
|
func (ptr *CooperationStatisticsService) userModeDividend(orgId int64, mapMode map[string]*domain.CooperationMode, mapModeContracts map[string][]string) (interface{}, error) {
|
|
|
creditAccountDao, _ := dao.NewCreditAccountDao(ptr.transactionContext)
|
|
|
var dividends dividendsExpenseByTypes = make([]dividendsExpenseByType, 0)
|
|
|
var total float64 = 0
|
|
|
for _, v := range mapMode {
|
|
|
numbers := mapModeContracts[v.CooperationModeNumber]
|
|
|
var dividendsEstimate = &CreditAccountStatisticsResponse{}
|
|
|
err := creditAccountDao.DividendsStatistics(map[string]interface{}{"orgId": orgId, "cooperationContractNumbers": numbers}, dividendsEstimate)
|
|
|
if err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
|
dividends = append(dividends, dividendsExpenseByType{
|
|
|
DividendsTypeName: v.CooperationModeName + "分红支出",
|
|
|
DividendsExpense: dividendsEstimate.Paid, //实际已支付金额
|
|
|
})
|
|
|
total += dividendsEstimate.Paid
|
|
|
}
|
|
|
cooperationTypes = append(cooperationTypes, map[string]interface{}{
|
|
|
"cooperationModeId": m.CooperationModeId,
|
|
|
"cooperationModeName": m.CooperationModeName,
|
|
|
"cooperationModeNumber": m.CooperationModeNumber,
|
|
|
return map[string]interface{}{
|
|
|
"dividendsExpense": total,
|
|
|
"dividendsExpenseByTypes": dividends,
|
|
|
}, nil
|
|
|
}
|
|
|
|
|
|
// 用户模式订单
|
|
|
func (ptr *CooperationStatisticsService) userModeOrder(orgId int64, mapMode map[string]*domain.CooperationMode, mapModeContracts map[string][]string) (interface{}, error) {
|
|
|
creditAccountDao, _ := dao.NewDividendsOrderDao(ptr.transactionContext)
|
|
|
var dividends orderAmountByTypes = make([]orderAmountByType, 0)
|
|
|
var total float64 = 0
|
|
|
for _, v := range mapMode {
|
|
|
numbers := mapModeContracts[v.CooperationModeNumber]
|
|
|
amount, err := creditAccountDao.CalculateGoodOrderAmount(map[string]interface{}{"orgId": orgId, "cooperationContractNumbers": numbers})
|
|
|
if err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
|
dividends = append(dividends, orderAmountByType{
|
|
|
OrderAmount: amount,
|
|
|
OrderTypeName: v.CooperationModeName + "成交订单",
|
|
|
})
|
|
|
total += amount
|
|
|
}
|
|
|
return map[string]interface{}{
|
|
|
"cooperationTypes": cooperationTypes,
|
|
|
"dividendsDetails": map[string]interface{}{
|
|
|
"dividendsExpense": totalDividendAmount,
|
|
|
"dividendsExpenseByTypes": dividendsExpenseByTypes,
|
|
|
},
|
|
|
"orderDetails": map[string]interface{}{
|
|
|
"orderAmount": totalOrderAmount,
|
|
|
"orderAmountByTypes": orderAmountByTypes,
|
|
|
},
|
|
|
"orderAmount": total,
|
|
|
"orderAmountByTypes": dividends,
|
|
|
}, nil
|
|
|
}
|
|
|
|
|
|
// 公司 - 共创用户模式统计
|
|
|
func (ptr *CooperationStatisticsService) CooperationUserModeStatisticsBak(queryOptions map[string]interface{}) (interface{}, error) {
|
|
|
// 参数验证
|
|
|
//var request = struct {
|
|
|
// UserId int64 `json:"userId" valid:"Required"`
|
|
|
// OrgId int64 `json:"orgId" valid:"Required"`
|
|
|
//}{}
|
|
|
//if err := LoadQueryObject(queryOptions, &request); err != nil {
|
|
|
// return nil, err
|
|
|
//}
|
|
|
//queryOptions = tool_funs.SimpleStructToMap(&request)
|
|
|
//
|
|
|
//orderGoodDao, _ := dao.NewOrderGoodDao(ptr.transactionContext)
|
|
|
//modeStatistics, err := orderGoodDao.CooperationUserModeStatistics(queryOptions)
|
|
|
//if err != nil {
|
|
|
// return nil, err
|
|
|
//}
|
|
|
//if len(modeStatistics) == 0 {
|
|
|
// return struct{}{}, nil
|
|
|
//}
|
|
|
//
|
|
|
//var modeNumbers []string
|
|
|
//var mapModeStatistics = make(map[string]*domain.CooperationModeStatisticsDto)
|
|
|
//for i := range modeStatistics {
|
|
|
// mapModeStatistics[modeStatistics[i].CooperationModeNumber] = modeStatistics[i]
|
|
|
// modeNumbers = append(modeNumbers, modeStatistics[i].CooperationModeNumber)
|
|
|
//}
|
|
|
//
|
|
|
//cooperationModeRepository, _ := repository.NewCooperationModeRepository(ptr.transactionContext)
|
|
|
//_, cooperModes, err := cooperationModeRepository.Find(map[string]interface{}{"cooperationModeNumbers": modeNumbers, "orgId": request.OrgId})
|
|
|
//if err != nil {
|
|
|
// return nil, err
|
|
|
//}
|
|
|
//var cooperationTypes, dividendsExpenseByTypes, orderAmountByTypes []interface{}
|
|
|
//var totalOrderAmount float64
|
|
|
//var totalDividendAmount float64
|
|
|
//for i := range cooperModes {
|
|
|
// m := cooperModes[i]
|
|
|
// if modeStatistics, ok := mapModeStatistics[m.CooperationModeNumber]; ok {
|
|
|
// totalOrderAmount += modeStatistics.OrderAmount
|
|
|
// totalDividendAmount += modeStatistics.DividendsEstimate
|
|
|
// dividendsExpenseByTypes = append(dividendsExpenseByTypes, map[string]interface{}{
|
|
|
// "dividendsTypeName": m.CooperationModeName + "分红支出",
|
|
|
// "dividendsExpense": modeStatistics.DividendsEstimate, //实际已支付金额
|
|
|
// })
|
|
|
// orderAmountByTypes = append(orderAmountByTypes, map[string]interface{}{
|
|
|
// "orderAmount": modeStatistics.OrderAmount,
|
|
|
// "orderTypeName": m.CooperationModeName + "成交订单",
|
|
|
// })
|
|
|
// }
|
|
|
// cooperationTypes = append(cooperationTypes, map[string]interface{}{
|
|
|
// "cooperationModeId": m.CooperationModeId,
|
|
|
// "cooperationModeName": m.CooperationModeName,
|
|
|
// "cooperationModeNumber": m.CooperationModeNumber,
|
|
|
// })
|
|
|
//}
|
|
|
//return map[string]interface{}{
|
|
|
// "cooperationTypes": cooperationTypes,
|
|
|
// "dividendsDetails": map[string]interface{}{
|
|
|
// "dividendsExpense": totalDividendAmount,
|
|
|
// "dividendsExpenseByTypes": dividendsExpenseByTypes,
|
|
|
// },
|
|
|
// "orderDetails": map[string]interface{}{
|
|
|
// "orderAmount": totalOrderAmount,
|
|
|
// "orderAmountByTypes": orderAmountByTypes,
|
|
|
// },
|
|
|
//}, nil
|
|
|
return nil, nil
|
|
|
}
|
|
|
|
|
|
type dividendsExpenseByType struct {
|
|
|
DividendsTypeName string `json:"dividendsTypeName"`
|
|
|
DividendsExpense float64 `json:"dividendsExpense"`
|
|
|
}
|
|
|
type orderAmountByType struct {
|
|
|
OrderTypeName string `json:"orderTypeName"`
|
|
|
OrderAmount float64 `json:"orderAmount"`
|
|
|
}
|
|
|
type dividendsExpenseByTypes []dividendsExpenseByType
|
|
|
|
|
|
func (s dividendsExpenseByTypes) Len() int { return len(s) }
|
|
|
func (s dividendsExpenseByTypes) Less(i, j int) bool {
|
|
|
return s[i].DividendsExpense < s[j].DividendsExpense
|
|
|
}
|
|
|
func (s dividendsExpenseByTypes) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
|
|
|
|
|
|
type orderAmountByTypes []orderAmountByType
|
|
|
|
|
|
func (s orderAmountByTypes) Len() int { return len(s) }
|
|
|
func (s orderAmountByTypes) Less(i, j int) bool { return s[i].OrderAmount < s[j].OrderAmount }
|
|
|
func (s orderAmountByTypes) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
|
|
|
|
|
|
// 公司 - 共创用户分红支付统计
|
|
|
func (ptr *CooperationStatisticsService) CompanyPaymentHistoryStatistics(queryOptions map[string]interface{}) (interface{}, error) {
|
|
|
// 参数验证
|
...
|
...
|
|