作者 陈志颖

refactor:优化分红预算

@@ -67,101 +67,31 @@ func (domainService *ConfirmDividendsIncentivesEstimateService) Confirm(orderGoo @@ -67,101 +67,31 @@ func (domainService *ConfirmDividendsIncentivesEstimateService) Confirm(orderGoo
67 } 67 }
68 } 68 }
69 69
70 - // 确认业绩分红预算  
71 - var dividendsEstimateDetails []*service.DividendsEstimateDetail  
72 - for _, orderGood := range orderGoods {  
73 - log.Logger.Info("业绩分红预算产品", map[string]interface{}{  
74 - "orderGood": orderGood,  
75 - })  
76 -  
77 - if orderGood.CooperationContractNumber == "" {  
78 - var orderNumber string  
79 - if orderGood.DividendsOrderNumber != "" {  
80 - orderNumber = orderGood.DividendsOrderNumber  
81 - } else {  
82 - orderNumber = orderGood.DividendsReturnedOrderNumber 70 + // 查询共创项目
  71 + cooperationProjectsMap := make(map[string]*domain.CooperationProject, 0)
  72 + if count, cooperationProjectsFound, err := cooperationProjectRepository.Find(map[string]interface{}{
  73 + "companyId": companyId,
  74 + "orgId": orgId,
  75 + "offsetLimit": false,
  76 + }); err != nil {
  77 + return nil, err
  78 + } else {
  79 + if count > 0 {
  80 + for _, cooperationProjectFound := range cooperationProjectsFound {
  81 + cooperationProjectsMap[cooperationProjectFound.CooperationProjectNumber] = cooperationProjectFound
83 } 82 }
84 - dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{  
85 - DividendsUser: nil,  
86 - DividendsParticipateType: 0,  
87 - DividendsStage: 0,  
88 - DividendsAmount: 0,  
89 - OrderOrReturnedOrderNumber: orderNumber,  
90 - IsSuccessfully: false,  
91 - Reason: "产品未关联合约,不能进行分红预算",  
92 - })  
93 - continue  
94 } 83 }
  84 + }
95 85
96 - var cooperationContract *domain.CooperationContract  
97 -  
98 - // 获取合约  
99 - if _, ok := cooperationContractsMap[orderGood.CooperationContractNumber]; !ok {  
100 - var orderNumber string  
101 - if orderGood.DividendsOrderNumber != "" {  
102 - orderNumber = orderGood.DividendsOrderNumber  
103 - } else {  
104 - orderNumber = orderGood.DividendsReturnedOrderNumber  
105 - }  
106 - dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{  
107 - DividendsUser: nil,  
108 - DividendsParticipateType: 0,  
109 - DividendsStage: 0,  
110 - DividendsAmount: 0,  
111 - OrderOrReturnedOrderNumber: orderNumber,  
112 - IsSuccessfully: false,  
113 - Reason: "共创合约" + orderGood.CooperationContractNumber + "不存在", 86 + // 确认业绩分红预算
  87 + var dividendsEstimateDetails []*service.DividendsEstimateDetail
  88 + go func() {
  89 + for _, orderGood := range orderGoods {
  90 + log.Logger.Info("业绩分红预算产品", map[string]interface{}{
  91 + "orderGood": orderGood,
114 }) 92 })
115 - continue  
116 - } else {  
117 - cooperationContract = cooperationContractsMap[orderGood.CooperationContractNumber]  
118 - }  
119 93
120 - //cooperationContract, err := cooperationContractRepository.FindOne(map[string]interface{}{  
121 - // "cooperationContractNumber": orderGood.CooperationContractNumber,  
122 - // "companyId": orderGood.CompanyId,  
123 - // "orgId": orderGood.OrgId,  
124 - //})  
125 - //if err != nil {  
126 - // var orderNumber string  
127 - // if orderGood.DividendsOrderNumber != "" {  
128 - // orderNumber = orderGood.DividendsOrderNumber  
129 - // } else {  
130 - // orderNumber = orderGood.DividendsReturnedOrderNumber  
131 - // }  
132 - // dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{  
133 - // DividendsUser: nil,  
134 - // DividendsParticipateType: 0,  
135 - // DividendsStage: 0,  
136 - // DividendsAmount: 0,  
137 - // OrderOrReturnedOrderNumber: orderNumber,  
138 - // IsSuccessfully: false,  
139 - // Reason: "共创合约错误",  
140 - // })  
141 - // continue  
142 - //}  
143 - if cooperationContract == nil {  
144 - var orderNumber string  
145 - if orderGood.DividendsOrderNumber != "" {  
146 - orderNumber = orderGood.DividendsOrderNumber  
147 - } else {  
148 - orderNumber = orderGood.DividendsReturnedOrderNumber  
149 - }  
150 - dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{  
151 - DividendsUser: nil,  
152 - DividendsParticipateType: 0,  
153 - DividendsStage: 0,  
154 - DividendsAmount: 0,  
155 - OrderOrReturnedOrderNumber: orderNumber,  
156 - IsSuccessfully: false,  
157 - Reason: "共创合约" + orderGood.CooperationContractNumber + "不存在",  
158 - })  
159 - continue  
160 - } else {  
161 - log.Logger.Info("产品相关的合约", map[string]interface{}{  
162 - "cooperationContract": cooperationContract,  
163 - })  
164 - if cooperationContract.Status == 2 { 94 + if orderGood.CooperationContractNumber == "" {
165 var orderNumber string 95 var orderNumber string
166 if orderGood.DividendsOrderNumber != "" { 96 if orderGood.DividendsOrderNumber != "" {
167 orderNumber = orderGood.DividendsOrderNumber 97 orderNumber = orderGood.DividendsOrderNumber
@@ -175,20 +105,14 @@ func (domainService *ConfirmDividendsIncentivesEstimateService) Confirm(orderGoo @@ -175,20 +105,14 @@ func (domainService *ConfirmDividendsIncentivesEstimateService) Confirm(orderGoo
175 DividendsAmount: 0, 105 DividendsAmount: 0,
176 OrderOrReturnedOrderNumber: orderNumber, 106 OrderOrReturnedOrderNumber: orderNumber,
177 IsSuccessfully: false, 107 IsSuccessfully: false,
178 - Reason: "共创合约" + orderGood.CooperationContractNumber + "已暂停", 108 + Reason: "产品未关联合约,不能进行分红预算",
179 }) 109 })
180 continue 110 continue
181 } 111 }
182 - }  
183 112
184 - // 获取共创项目  
185 - if cooperationContract.CooperationProjectNumber != "" {  
186 - cooperationProject, err := cooperationProjectRepository.FindOne(map[string]interface{}{  
187 - "cooperationProjectNumber": cooperationContract.CooperationProjectNumber,  
188 - "companyId": cooperationContract.Company.CompanyId,  
189 - "orgId": cooperationContract.Org.OrgId,  
190 - })  
191 - if err != nil { 113 + // 获取合约
  114 + var cooperationContract *domain.CooperationContract
  115 + if _, ok := cooperationContractsMap[orderGood.CooperationContractNumber]; !ok {
192 var orderNumber string 116 var orderNumber string
193 if orderGood.DividendsOrderNumber != "" { 117 if orderGood.DividendsOrderNumber != "" {
194 orderNumber = orderGood.DividendsOrderNumber 118 orderNumber = orderGood.DividendsOrderNumber
@@ -202,11 +126,142 @@ func (domainService *ConfirmDividendsIncentivesEstimateService) Confirm(orderGoo @@ -202,11 +126,142 @@ func (domainService *ConfirmDividendsIncentivesEstimateService) Confirm(orderGoo
202 DividendsAmount: 0, 126 DividendsAmount: 0,
203 OrderOrReturnedOrderNumber: orderNumber, 127 OrderOrReturnedOrderNumber: orderNumber,
204 IsSuccessfully: false, 128 IsSuccessfully: false,
205 - Reason: "共创项目" + cooperationContract.CooperationProjectNumber + "查询错误", 129 + Reason: "共创合约" + orderGood.CooperationContractNumber + "不存在",
206 }) 130 })
207 continue 131 continue
  132 + } else {
  133 + cooperationContract = cooperationContractsMap[orderGood.CooperationContractNumber]
  134 + if cooperationContract.Status == 2 {
  135 + var orderNumber string
  136 + if orderGood.DividendsOrderNumber != "" {
  137 + orderNumber = orderGood.DividendsOrderNumber
  138 + } else {
  139 + orderNumber = orderGood.DividendsReturnedOrderNumber
  140 + }
  141 + dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{
  142 + DividendsUser: nil,
  143 + DividendsParticipateType: 0,
  144 + DividendsStage: 0,
  145 + DividendsAmount: 0,
  146 + OrderOrReturnedOrderNumber: orderNumber,
  147 + IsSuccessfully: false,
  148 + Reason: "共创合约" + orderGood.CooperationContractNumber + "已暂停",
  149 + })
  150 + continue
  151 + }
208 } 152 }
209 - if cooperationProject == nil { 153 +
  154 + //cooperationContract, err := cooperationContractRepository.FindOne(map[string]interface{}{
  155 + // "cooperationContractNumber": orderGood.CooperationContractNumber,
  156 + // "companyId": orderGood.CompanyId,
  157 + // "orgId": orderGood.OrgId,
  158 + //})
  159 + //if err != nil {
  160 + // var orderNumber string
  161 + // if orderGood.DividendsOrderNumber != "" {
  162 + // orderNumber = orderGood.DividendsOrderNumber
  163 + // } else {
  164 + // orderNumber = orderGood.DividendsReturnedOrderNumber
  165 + // }
  166 + // dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{
  167 + // DividendsUser: nil,
  168 + // DividendsParticipateType: 0,
  169 + // DividendsStage: 0,
  170 + // DividendsAmount: 0,
  171 + // OrderOrReturnedOrderNumber: orderNumber,
  172 + // IsSuccessfully: false,
  173 + // Reason: "共创合约错误",
  174 + // })
  175 + // continue
  176 + //}
  177 + //if cooperationContract == nil {
  178 + // var orderNumber string
  179 + // if orderGood.DividendsOrderNumber != "" {
  180 + // orderNumber = orderGood.DividendsOrderNumber
  181 + // } else {
  182 + // orderNumber = orderGood.DividendsReturnedOrderNumber
  183 + // }
  184 + // dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{
  185 + // DividendsUser: nil,
  186 + // DividendsParticipateType: 0,
  187 + // DividendsStage: 0,
  188 + // DividendsAmount: 0,
  189 + // OrderOrReturnedOrderNumber: orderNumber,
  190 + // IsSuccessfully: false,
  191 + // Reason: "共创合约" + orderGood.CooperationContractNumber + "不存在",
  192 + // })
  193 + // continue
  194 + //} else {
  195 + // log.Logger.Info("产品相关的合约", map[string]interface{}{
  196 + // "cooperationContract": cooperationContract,
  197 + // })
  198 + // if cooperationContract.Status == 2 {
  199 + // var orderNumber string
  200 + // if orderGood.DividendsOrderNumber != "" {
  201 + // orderNumber = orderGood.DividendsOrderNumber
  202 + // } else {
  203 + // orderNumber = orderGood.DividendsReturnedOrderNumber
  204 + // }
  205 + // dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{
  206 + // DividendsUser: nil,
  207 + // DividendsParticipateType: 0,
  208 + // DividendsStage: 0,
  209 + // DividendsAmount: 0,
  210 + // OrderOrReturnedOrderNumber: orderNumber,
  211 + // IsSuccessfully: false,
  212 + // Reason: "共创合约" + orderGood.CooperationContractNumber + "已暂停",
  213 + // })
  214 + // continue
  215 + // }
  216 + //}
  217 +
  218 + // 获取共创项目
  219 + //if cooperationContract.CooperationProjectNumber != "" {
  220 + // cooperationProject, err := cooperationProjectRepository.FindOne(map[string]interface{}{
  221 + // "cooperationProjectNumber": cooperationContract.CooperationProjectNumber,
  222 + // "companyId": cooperationContract.Company.CompanyId,
  223 + // "orgId": cooperationContract.Org.OrgId,
  224 + // })
  225 + // if err != nil {
  226 + // var orderNumber string
  227 + // if orderGood.DividendsOrderNumber != "" {
  228 + // orderNumber = orderGood.DividendsOrderNumber
  229 + // } else {
  230 + // orderNumber = orderGood.DividendsReturnedOrderNumber
  231 + // }
  232 + // dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{
  233 + // DividendsUser: nil,
  234 + // DividendsParticipateType: 0,
  235 + // DividendsStage: 0,
  236 + // DividendsAmount: 0,
  237 + // OrderOrReturnedOrderNumber: orderNumber,
  238 + // IsSuccessfully: false,
  239 + // Reason: "共创项目" + cooperationContract.CooperationProjectNumber + "查询错误",
  240 + // })
  241 + // continue
  242 + // }
  243 + // if cooperationProject == nil {
  244 + // var orderNumber string
  245 + // if orderGood.DividendsOrderNumber != "" {
  246 + // orderNumber = orderGood.DividendsOrderNumber
  247 + // } else {
  248 + // orderNumber = orderGood.DividendsReturnedOrderNumber
  249 + // }
  250 + // dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{
  251 + // DividendsUser: nil,
  252 + // DividendsParticipateType: 0,
  253 + // DividendsStage: 0,
  254 + // DividendsAmount: 0,
  255 + // OrderOrReturnedOrderNumber: orderNumber,
  256 + // IsSuccessfully: false,
  257 + // Reason: "共创项目" + cooperationContract.CooperationProjectNumber + "已结束或不存在",
  258 + // })
  259 + // continue
  260 + // }
  261 + //}
  262 +
  263 + // 判断共创项目是否存在
  264 + if _, ok := cooperationProjectsMap[cooperationContract.CooperationProjectNumber]; !ok {
210 var orderNumber string 265 var orderNumber string
211 if orderGood.DividendsOrderNumber != "" { 266 if orderGood.DividendsOrderNumber != "" {
212 orderNumber = orderGood.DividendsOrderNumber 267 orderNumber = orderGood.DividendsOrderNumber
@@ -224,66 +279,191 @@ func (domainService *ConfirmDividendsIncentivesEstimateService) Confirm(orderGoo @@ -224,66 +279,191 @@ func (domainService *ConfirmDividendsIncentivesEstimateService) Confirm(orderGoo
224 }) 279 })
225 continue 280 continue
226 } 281 }
227 - }  
228 282
229 - if orderGood.DividendsOrderNumber != "" { // 获取分红订单  
230 - // 获取分红订单  
231 - dividendsOrder, err2 := dividendsOrderRepository.FindOne(map[string]interface{}{  
232 - "dividendsOrderNumber": orderGood.DividendsOrderNumber,  
233 - "companyId": orderGood.CompanyId,  
234 - "orgId": orderGood.OrgId,  
235 - })  
236 - if err2 != nil {  
237 - dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{  
238 - DividendsUser: nil,  
239 - DividendsParticipateType: 0,  
240 - DividendsStage: 0,  
241 - DividendsAmount: 0,  
242 - OrderOrReturnedOrderNumber: orderGood.DividendsOrderNumber,  
243 - IsSuccessfully: false,  
244 - Reason: "分红订单" + orderGood.DividendsOrderNumber + "查询错误", 283 + if orderGood.DividendsOrderNumber != "" { // 获取分红订单
  284 + // 获取分红订单
  285 + dividendsOrder, err2 := dividendsOrderRepository.FindOne(map[string]interface{}{
  286 + "dividendsOrderNumber": orderGood.DividendsOrderNumber,
  287 + "companyId": orderGood.CompanyId,
  288 + "orgId": orderGood.OrgId,
245 }) 289 })
246 - continue  
247 - }  
248 - if dividendsOrder == nil {  
249 - dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{  
250 - DividendsUser: nil,  
251 - DividendsParticipateType: 0,  
252 - DividendsStage: 0,  
253 - DividendsAmount: 0,  
254 - OrderOrReturnedOrderNumber: orderGood.DividendsOrderNumber,  
255 - IsSuccessfully: false,  
256 - Reason: "分红订单" + orderGood.DividendsOrderNumber + "不存在",  
257 - })  
258 - continue  
259 - } 290 + if err2 != nil {
  291 + dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{
  292 + DividendsUser: nil,
  293 + DividendsParticipateType: 0,
  294 + DividendsStage: 0,
  295 + DividendsAmount: 0,
  296 + OrderOrReturnedOrderNumber: orderGood.DividendsOrderNumber,
  297 + IsSuccessfully: false,
  298 + Reason: "分红订单" + orderGood.DividendsOrderNumber + "查询错误",
  299 + })
  300 + continue
  301 + }
  302 + if dividendsOrder == nil {
  303 + dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{
  304 + DividendsUser: nil,
  305 + DividendsParticipateType: 0,
  306 + DividendsStage: 0,
  307 + DividendsAmount: 0,
  308 + OrderOrReturnedOrderNumber: orderGood.DividendsOrderNumber,
  309 + IsSuccessfully: false,
  310 + Reason: "分红订单" + orderGood.DividendsOrderNumber + "不存在",
  311 + })
  312 + continue
  313 + }
260 314
261 - // 匹配分红规则  
262 - var dividendsIncentivesRuleMatched *domain.DividendsIncentivesRule  
263 - for _, dividendsIncentivesRule := range cooperationContract.DividendsIncentivesRules {  
264 - if (dividendsOrder.OrderTime.After(dividendsIncentivesRule.DividendsIncentivesStageStart) || dividendsOrder.OrderTime.Equal(dividendsIncentivesRule.DividendsIncentivesStageStart)) &&  
265 - (dividendsOrder.OrderTime.Before(dividendsIncentivesRule.DividendsIncentivesStageEnd) || dividendsOrder.OrderTime.Equal(dividendsIncentivesRule.DividendsIncentivesStageEnd)) {  
266 - dividendsIncentivesRuleMatched = dividendsIncentivesRule  
267 - break 315 + // 匹配分红规则
  316 + var dividendsIncentivesRuleMatched *domain.DividendsIncentivesRule
  317 + for _, dividendsIncentivesRule := range cooperationContract.DividendsIncentivesRules {
  318 + if (dividendsOrder.OrderTime.After(dividendsIncentivesRule.DividendsIncentivesStageStart) || dividendsOrder.OrderTime.Equal(dividendsIncentivesRule.DividendsIncentivesStageStart)) &&
  319 + (dividendsOrder.OrderTime.Before(dividendsIncentivesRule.DividendsIncentivesStageEnd) || dividendsOrder.OrderTime.Equal(dividendsIncentivesRule.DividendsIncentivesStageEnd)) {
  320 + dividendsIncentivesRuleMatched = dividendsIncentivesRule
  321 + break
  322 + }
  323 + }
  324 + if dividendsIncentivesRuleMatched == nil {
  325 + dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{
  326 + DividendsUser: nil,
  327 + DividendsParticipateType: 0,
  328 + DividendsStage: 0,
  329 + DividendsAmount: 0,
  330 + OrderOrReturnedOrderNumber: orderGood.DividendsOrderNumber,
  331 + IsSuccessfully: false,
  332 + Reason: "未匹配到分红规则",
  333 + })
  334 + continue
268 } 335 }
269 - }  
270 - if dividendsIncentivesRuleMatched == nil {  
271 - dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{  
272 - DividendsUser: nil,  
273 - DividendsParticipateType: 0,  
274 - DividendsStage: 0,  
275 - DividendsAmount: 0,  
276 - OrderOrReturnedOrderNumber: orderGood.DividendsOrderNumber,  
277 - IsSuccessfully: false,  
278 - Reason: "未匹配到分红规则",  
279 - })  
280 - continue  
281 - }  
282 336
283 - // 计算分红  
284 - if dividendsIncentivesRuleMatched != nil { 337 + // 计算分红
  338 + if dividendsIncentivesRuleMatched != nil {
  339 + for _, undertaker := range cooperationContract.Undertakers {
  340 + // 添加承接人分红预算信息详情
  341 + if dividendsIncentivesRuleMatched.DividendsIncentivesPercentage > 0 {
  342 + undertakerDividendsAmount, _ := decimal.NewFromFloat(orderGood.OrderGoodAmount).Mul(decimal.NewFromFloat(dividendsIncentivesRuleMatched.DividendsIncentivesPercentage).Div(decimal.NewFromFloat(100))).Float64()
  343 + dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{
  344 + DividendsUser: &domain.User{
  345 + UserId: undertaker.UserId,
  346 + UserBaseId: undertaker.UserBaseId,
  347 + Org: undertaker.Org,
  348 + Orgs: undertaker.Orgs,
  349 + Department: undertaker.Department,
  350 + Roles: undertaker.Roles,
  351 + UserInfo: undertaker.UserInfo,
  352 + UserType: undertaker.UserType,
  353 + UserName: undertaker.UserInfo.UserName,
  354 + UserPhone: undertaker.UserPhone,
  355 + Status: undertaker.Status,
  356 + Company: undertaker.Company,
  357 + },
  358 + DividendsParticipateType: domain.UNDERTAKER,
  359 + DividendsStage: dividendsIncentivesRuleMatched.DividendsIncentivesStage,
  360 + DividendsAmount: undertakerDividendsAmount,
  361 + OrderOrReturnedOrderNumber: dividendsOrder.DividendsOrderNumber,
  362 + IsSuccessfully: true,
  363 + CooperationContractUndertakerId: undertaker.UndertakerId,
  364 + DividendsPercentage: dividendsIncentivesRuleMatched.DividendsIncentivesPercentage,
  365 + })
  366 + }
  367 + // 添加推荐人分红预算信息详情
  368 + if undertaker.Referrer != nil {
  369 + if dividendsIncentivesRuleMatched.ReferrerPercentage > 0 {
  370 + referrerDividendsAmount, _ := decimal.NewFromFloat(orderGood.OrderGoodAmount).Mul(decimal.NewFromFloat(dividendsIncentivesRuleMatched.ReferrerPercentage).Div(decimal.NewFromFloat(100))).Float64()
  371 + dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{
  372 + DividendsUser: &domain.User{
  373 + UserId: undertaker.Referrer.UserId,
  374 + UserBaseId: undertaker.Referrer.UserBaseId,
  375 + Org: undertaker.Referrer.Org,
  376 + Orgs: undertaker.Referrer.Orgs,
  377 + Department: undertaker.Referrer.Department,
  378 + Roles: undertaker.Referrer.Roles,
  379 + UserInfo: undertaker.Referrer.UserInfo,
  380 + UserType: undertaker.Referrer.UserType,
  381 + UserName: undertaker.Referrer.UserName,
  382 + UserPhone: undertaker.Referrer.UserPhone,
  383 + Company: undertaker.Referrer.Company,
  384 + },
  385 + DividendsParticipateType: domain.REFERRER,
  386 + DividendsStage: dividendsIncentivesRuleMatched.DividendsIncentivesStage,
  387 + DividendsAmount: referrerDividendsAmount,
  388 + OrderOrReturnedOrderNumber: dividendsOrder.DividendsOrderNumber,
  389 + IsSuccessfully: true,
  390 + CooperationContractUndertakerId: undertaker.UndertakerId,
  391 + DividendsPercentage: dividendsIncentivesRuleMatched.ReferrerPercentage,
  392 + })
  393 + }
  394 + }
  395 + // 添加关联业务员分红预算信息详情
  396 + if undertaker.Salesman != nil {
  397 + if dividendsIncentivesRuleMatched.SalesmanPercentage > 0 {
  398 + salesmanDividendsAmount, _ := decimal.NewFromFloat(orderGood.OrderGoodAmount).Mul(decimal.NewFromFloat(dividendsIncentivesRuleMatched.SalesmanPercentage).Div(decimal.NewFromFloat(100))).Float64()
  399 + dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{
  400 + DividendsUser: &domain.User{
  401 + UserId: undertaker.Salesman.UserId,
  402 + UserBaseId: undertaker.Salesman.UserBaseId,
  403 + Org: undertaker.Salesman.Org,
  404 + Orgs: undertaker.Salesman.Orgs,
  405 + Department: undertaker.Salesman.Department,
  406 + Roles: undertaker.Salesman.Roles,
  407 + UserInfo: undertaker.Salesman.UserInfo,
  408 + UserType: undertaker.Salesman.UserType,
  409 + UserName: undertaker.Salesman.UserInfo.UserName,
  410 + UserPhone: undertaker.Salesman.UserPhone,
  411 + Company: undertaker.Salesman.Company,
  412 + },
  413 + DividendsParticipateType: domain.SALESMAN,
  414 + DividendsStage: dividendsIncentivesRuleMatched.DividendsIncentivesStage,
  415 + DividendsAmount: salesmanDividendsAmount,
  416 + OrderOrReturnedOrderNumber: dividendsOrder.DividendsOrderNumber,
  417 + IsSuccessfully: true,
  418 + CooperationContractUndertakerId: undertaker.UndertakerId,
  419 + DividendsPercentage: dividendsIncentivesRuleMatched.SalesmanPercentage,
  420 + })
  421 + }
  422 + }
  423 + }
  424 + }
  425 + } else if orderGood.DividendsReturnedOrderNumber != "" { // 获取退货单
  426 + dividendsReturnedOrder, err3 := dividendsReturnedOrderRepository.FindOne(map[string]interface{}{
  427 + "dividendsReturnedOrderNumber": orderGood.DividendsReturnedOrderNumber,
  428 + "companyId": orderGood.CompanyId,
  429 + "orgId": orderGood.OrgId,
  430 + })
  431 + if err3 != nil {
  432 + dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{
  433 + DividendsUser: nil,
  434 + DividendsParticipateType: 0,
  435 + DividendsStage: 0,
  436 + DividendsAmount: 0,
  437 + OrderOrReturnedOrderNumber: orderGood.DividendsReturnedOrderNumber,
  438 + IsSuccessfully: false,
  439 + Reason: "退货单" + orderGood.DividendsReturnedOrderNumber + "不存在",
  440 + })
  441 + continue
  442 + }
  443 + if dividendsReturnedOrder == nil {
  444 + dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{
  445 + DividendsUser: nil,
  446 + DividendsParticipateType: 0,
  447 + DividendsStage: 0,
  448 + DividendsAmount: 0,
  449 + OrderOrReturnedOrderNumber: orderGood.DividendsReturnedOrderNumber,
  450 + IsSuccessfully: false,
  451 + Reason: "退货单" + orderGood.DividendsReturnedOrderNumber + "不存在",
  452 + })
  453 + continue
  454 + }
  455 + // 匹配分红规则
  456 + var dividendsIncentivesRuleMatched *domain.DividendsIncentivesRule
  457 + for _, dividendsIncentivesRule := range cooperationContract.DividendsIncentivesRules {
  458 + if (dividendsReturnedOrder.OrderTime.After(dividendsIncentivesRule.DividendsIncentivesStageStart) || dividendsReturnedOrder.OrderTime.Equal(dividendsIncentivesRule.DividendsIncentivesStageStart)) &&
  459 + (dividendsReturnedOrder.OrderTime.Before(dividendsIncentivesRule.DividendsIncentivesStageEnd) || dividendsReturnedOrder.OrderTime.Equal(dividendsIncentivesRule.DividendsIncentivesStageEnd)) {
  460 + dividendsIncentivesRuleMatched = dividendsIncentivesRule
  461 + break
  462 + }
  463 + }
  464 + // 计算分红
285 for _, undertaker := range cooperationContract.Undertakers { 465 for _, undertaker := range cooperationContract.Undertakers {
286 - // 添加承接人分红预算信息详情 466 + // 添加承接人分红退货预算信息详情
287 if dividendsIncentivesRuleMatched.DividendsIncentivesPercentage > 0 { 467 if dividendsIncentivesRuleMatched.DividendsIncentivesPercentage > 0 {
288 undertakerDividendsAmount, _ := decimal.NewFromFloat(orderGood.OrderGoodAmount).Mul(decimal.NewFromFloat(dividendsIncentivesRuleMatched.DividendsIncentivesPercentage).Div(decimal.NewFromFloat(100))).Float64() 468 undertakerDividendsAmount, _ := decimal.NewFromFloat(orderGood.OrderGoodAmount).Mul(decimal.NewFromFloat(dividendsIncentivesRuleMatched.DividendsIncentivesPercentage).Div(decimal.NewFromFloat(100))).Float64()
289 dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{ 469 dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{
@@ -303,14 +483,15 @@ func (domainService *ConfirmDividendsIncentivesEstimateService) Confirm(orderGoo @@ -303,14 +483,15 @@ func (domainService *ConfirmDividendsIncentivesEstimateService) Confirm(orderGoo
303 }, 483 },
304 DividendsParticipateType: domain.UNDERTAKER, 484 DividendsParticipateType: domain.UNDERTAKER,
305 DividendsStage: dividendsIncentivesRuleMatched.DividendsIncentivesStage, 485 DividendsStage: dividendsIncentivesRuleMatched.DividendsIncentivesStage,
306 - DividendsAmount: undertakerDividendsAmount,  
307 - OrderOrReturnedOrderNumber: dividendsOrder.DividendsOrderNumber, 486 + DividendsAmount: -undertakerDividendsAmount,
  487 + OrderOrReturnedOrderNumber: dividendsReturnedOrder.DividendsReturnedOrderNumber,
308 IsSuccessfully: true, 488 IsSuccessfully: true,
309 CooperationContractUndertakerId: undertaker.UndertakerId, 489 CooperationContractUndertakerId: undertaker.UndertakerId,
310 DividendsPercentage: dividendsIncentivesRuleMatched.DividendsIncentivesPercentage, 490 DividendsPercentage: dividendsIncentivesRuleMatched.DividendsIncentivesPercentage,
311 }) 491 })
312 } 492 }
313 - // 添加推荐人分红预算信息详情 493 +
  494 + // 添加推荐人分红退货预算信息详情
314 if undertaker.Referrer != nil { 495 if undertaker.Referrer != nil {
315 if dividendsIncentivesRuleMatched.ReferrerPercentage > 0 { 496 if dividendsIncentivesRuleMatched.ReferrerPercentage > 0 {
316 referrerDividendsAmount, _ := decimal.NewFromFloat(orderGood.OrderGoodAmount).Mul(decimal.NewFromFloat(dividendsIncentivesRuleMatched.ReferrerPercentage).Div(decimal.NewFromFloat(100))).Float64() 497 referrerDividendsAmount, _ := decimal.NewFromFloat(orderGood.OrderGoodAmount).Mul(decimal.NewFromFloat(dividendsIncentivesRuleMatched.ReferrerPercentage).Div(decimal.NewFromFloat(100))).Float64()
@@ -330,15 +511,16 @@ func (domainService *ConfirmDividendsIncentivesEstimateService) Confirm(orderGoo @@ -330,15 +511,16 @@ func (domainService *ConfirmDividendsIncentivesEstimateService) Confirm(orderGoo
330 }, 511 },
331 DividendsParticipateType: domain.REFERRER, 512 DividendsParticipateType: domain.REFERRER,
332 DividendsStage: dividendsIncentivesRuleMatched.DividendsIncentivesStage, 513 DividendsStage: dividendsIncentivesRuleMatched.DividendsIncentivesStage,
333 - DividendsAmount: referrerDividendsAmount,  
334 - OrderOrReturnedOrderNumber: dividendsOrder.DividendsOrderNumber, 514 + DividendsAmount: -referrerDividendsAmount,
  515 + OrderOrReturnedOrderNumber: dividendsReturnedOrder.DividendsReturnedOrderNumber,
335 IsSuccessfully: true, 516 IsSuccessfully: true,
336 CooperationContractUndertakerId: undertaker.UndertakerId, 517 CooperationContractUndertakerId: undertaker.UndertakerId,
337 DividendsPercentage: dividendsIncentivesRuleMatched.ReferrerPercentage, 518 DividendsPercentage: dividendsIncentivesRuleMatched.ReferrerPercentage,
338 }) 519 })
339 } 520 }
340 } 521 }
341 - // 添加关联业务员分红预算信息详情 522 +
  523 + // 添加关联业务员分红退货预算信息详情
342 if undertaker.Salesman != nil { 524 if undertaker.Salesman != nil {
343 if dividendsIncentivesRuleMatched.SalesmanPercentage > 0 { 525 if dividendsIncentivesRuleMatched.SalesmanPercentage > 0 {
344 salesmanDividendsAmount, _ := decimal.NewFromFloat(orderGood.OrderGoodAmount).Mul(decimal.NewFromFloat(dividendsIncentivesRuleMatched.SalesmanPercentage).Div(decimal.NewFromFloat(100))).Float64() 526 salesmanDividendsAmount, _ := decimal.NewFromFloat(orderGood.OrderGoodAmount).Mul(decimal.NewFromFloat(dividendsIncentivesRuleMatched.SalesmanPercentage).Div(decimal.NewFromFloat(100))).Float64()
@@ -358,8 +540,8 @@ func (domainService *ConfirmDividendsIncentivesEstimateService) Confirm(orderGoo @@ -358,8 +540,8 @@ func (domainService *ConfirmDividendsIncentivesEstimateService) Confirm(orderGoo
358 }, 540 },
359 DividendsParticipateType: domain.SALESMAN, 541 DividendsParticipateType: domain.SALESMAN,
360 DividendsStage: dividendsIncentivesRuleMatched.DividendsIncentivesStage, 542 DividendsStage: dividendsIncentivesRuleMatched.DividendsIncentivesStage,
361 - DividendsAmount: salesmanDividendsAmount,  
362 - OrderOrReturnedOrderNumber: dividendsOrder.DividendsOrderNumber, 543 + DividendsAmount: -salesmanDividendsAmount,
  544 + OrderOrReturnedOrderNumber: dividendsReturnedOrder.DividendsReturnedOrderNumber,
363 IsSuccessfully: true, 545 IsSuccessfully: true,
364 CooperationContractUndertakerId: undertaker.UndertakerId, 546 CooperationContractUndertakerId: undertaker.UndertakerId,
365 DividendsPercentage: dividendsIncentivesRuleMatched.SalesmanPercentage, 547 DividendsPercentage: dividendsIncentivesRuleMatched.SalesmanPercentage,
@@ -368,135 +550,9 @@ func (domainService *ConfirmDividendsIncentivesEstimateService) Confirm(orderGoo @@ -368,135 +550,9 @@ func (domainService *ConfirmDividendsIncentivesEstimateService) Confirm(orderGoo
368 } 550 }
369 } 551 }
370 } 552 }
371 - } else if orderGood.DividendsReturnedOrderNumber != "" { // 获取退货单  
372 - dividendsReturnedOrder, err3 := dividendsReturnedOrderRepository.FindOne(map[string]interface{}{  
373 - "dividendsReturnedOrderNumber": orderGood.DividendsReturnedOrderNumber,  
374 - "companyId": orderGood.CompanyId,  
375 - "orgId": orderGood.OrgId,  
376 - })  
377 - if err3 != nil {  
378 - dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{  
379 - DividendsUser: nil,  
380 - DividendsParticipateType: 0,  
381 - DividendsStage: 0,  
382 - DividendsAmount: 0,  
383 - OrderOrReturnedOrderNumber: orderGood.DividendsReturnedOrderNumber,  
384 - IsSuccessfully: false,  
385 - Reason: "退货单" + orderGood.DividendsReturnedOrderNumber + "不存在",  
386 - })  
387 - continue  
388 - }  
389 - if dividendsReturnedOrder == nil {  
390 - dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{  
391 - DividendsUser: nil,  
392 - DividendsParticipateType: 0,  
393 - DividendsStage: 0,  
394 - DividendsAmount: 0,  
395 - OrderOrReturnedOrderNumber: orderGood.DividendsReturnedOrderNumber,  
396 - IsSuccessfully: false,  
397 - Reason: "退货单" + orderGood.DividendsReturnedOrderNumber + "不存在",  
398 - })  
399 - continue  
400 - }  
401 - // 匹配分红规则  
402 - var dividendsIncentivesRuleMatched *domain.DividendsIncentivesRule  
403 - for _, dividendsIncentivesRule := range cooperationContract.DividendsIncentivesRules {  
404 - if (dividendsReturnedOrder.OrderTime.After(dividendsIncentivesRule.DividendsIncentivesStageStart) || dividendsReturnedOrder.OrderTime.Equal(dividendsIncentivesRule.DividendsIncentivesStageStart)) &&  
405 - (dividendsReturnedOrder.OrderTime.Before(dividendsIncentivesRule.DividendsIncentivesStageEnd) || dividendsReturnedOrder.OrderTime.Equal(dividendsIncentivesRule.DividendsIncentivesStageEnd)) {  
406 - dividendsIncentivesRuleMatched = dividendsIncentivesRule  
407 - break  
408 - }  
409 - }  
410 - // 计算分红  
411 - for _, undertaker := range cooperationContract.Undertakers {  
412 - // 添加承接人分红退货预算信息详情  
413 - if dividendsIncentivesRuleMatched.DividendsIncentivesPercentage > 0 {  
414 - undertakerDividendsAmount, _ := decimal.NewFromFloat(orderGood.OrderGoodAmount).Mul(decimal.NewFromFloat(dividendsIncentivesRuleMatched.DividendsIncentivesPercentage).Div(decimal.NewFromFloat(100))).Float64()  
415 - dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{  
416 - DividendsUser: &domain.User{  
417 - UserId: undertaker.UserId,  
418 - UserBaseId: undertaker.UserBaseId,  
419 - Org: undertaker.Org,  
420 - Orgs: undertaker.Orgs,  
421 - Department: undertaker.Department,  
422 - Roles: undertaker.Roles,  
423 - UserInfo: undertaker.UserInfo,  
424 - UserType: undertaker.UserType,  
425 - UserName: undertaker.UserInfo.UserName,  
426 - UserPhone: undertaker.UserPhone,  
427 - Status: undertaker.Status,  
428 - Company: undertaker.Company,  
429 - },  
430 - DividendsParticipateType: domain.UNDERTAKER,  
431 - DividendsStage: dividendsIncentivesRuleMatched.DividendsIncentivesStage,  
432 - DividendsAmount: -undertakerDividendsAmount,  
433 - OrderOrReturnedOrderNumber: dividendsReturnedOrder.DividendsReturnedOrderNumber,  
434 - IsSuccessfully: true,  
435 - CooperationContractUndertakerId: undertaker.UndertakerId,  
436 - DividendsPercentage: dividendsIncentivesRuleMatched.DividendsIncentivesPercentage,  
437 - })  
438 - }  
439 -  
440 - // 添加推荐人分红退货预算信息详情  
441 - if undertaker.Referrer != nil {  
442 - if dividendsIncentivesRuleMatched.ReferrerPercentage > 0 {  
443 - referrerDividendsAmount, _ := decimal.NewFromFloat(orderGood.OrderGoodAmount).Mul(decimal.NewFromFloat(dividendsIncentivesRuleMatched.ReferrerPercentage).Div(decimal.NewFromFloat(100))).Float64()  
444 - dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{  
445 - DividendsUser: &domain.User{  
446 - UserId: undertaker.Referrer.UserId,  
447 - UserBaseId: undertaker.Referrer.UserBaseId,  
448 - Org: undertaker.Referrer.Org,  
449 - Orgs: undertaker.Referrer.Orgs,  
450 - Department: undertaker.Referrer.Department,  
451 - Roles: undertaker.Referrer.Roles,  
452 - UserInfo: undertaker.Referrer.UserInfo,  
453 - UserType: undertaker.Referrer.UserType,  
454 - UserName: undertaker.Referrer.UserName,  
455 - UserPhone: undertaker.Referrer.UserPhone,  
456 - Company: undertaker.Referrer.Company,  
457 - },  
458 - DividendsParticipateType: domain.REFERRER,  
459 - DividendsStage: dividendsIncentivesRuleMatched.DividendsIncentivesStage,  
460 - DividendsAmount: -referrerDividendsAmount,  
461 - OrderOrReturnedOrderNumber: dividendsReturnedOrder.DividendsReturnedOrderNumber,  
462 - IsSuccessfully: true,  
463 - CooperationContractUndertakerId: undertaker.UndertakerId,  
464 - DividendsPercentage: dividendsIncentivesRuleMatched.ReferrerPercentage,  
465 - })  
466 - }  
467 - }  
468 -  
469 - // 添加关联业务员分红退货预算信息详情  
470 - if undertaker.Salesman != nil {  
471 - if dividendsIncentivesRuleMatched.SalesmanPercentage > 0 {  
472 - salesmanDividendsAmount, _ := decimal.NewFromFloat(orderGood.OrderGoodAmount).Mul(decimal.NewFromFloat(dividendsIncentivesRuleMatched.SalesmanPercentage).Div(decimal.NewFromFloat(100))).Float64()  
473 - dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{  
474 - DividendsUser: &domain.User{  
475 - UserId: undertaker.Salesman.UserId,  
476 - UserBaseId: undertaker.Salesman.UserBaseId,  
477 - Org: undertaker.Salesman.Org,  
478 - Orgs: undertaker.Salesman.Orgs,  
479 - Department: undertaker.Salesman.Department,  
480 - Roles: undertaker.Salesman.Roles,  
481 - UserInfo: undertaker.Salesman.UserInfo,  
482 - UserType: undertaker.Salesman.UserType,  
483 - UserName: undertaker.Salesman.UserInfo.UserName,  
484 - UserPhone: undertaker.Salesman.UserPhone,  
485 - Company: undertaker.Salesman.Company,  
486 - },  
487 - DividendsParticipateType: domain.SALESMAN,  
488 - DividendsStage: dividendsIncentivesRuleMatched.DividendsIncentivesStage,  
489 - DividendsAmount: -salesmanDividendsAmount,  
490 - OrderOrReturnedOrderNumber: dividendsReturnedOrder.DividendsReturnedOrderNumber,  
491 - IsSuccessfully: true,  
492 - CooperationContractUndertakerId: undertaker.UndertakerId,  
493 - DividendsPercentage: dividendsIncentivesRuleMatched.SalesmanPercentage,  
494 - })  
495 - }  
496 - }  
497 - }  
498 } 553 }
499 - } 554 + }()
  555 +
500 return dividendsEstimateDetails, nil 556 return dividendsEstimateDetails, nil
501 } 557 }
502 558