Explorar o código

提成处理至商邀部分

yuanrf hai 11 meses
pai
achega
a2b99bce88
Modificáronse 1 ficheiros con 132 adicións e 0 borrados
  1. 132 0
      OASystem/OASystem.Api/Controllers/FinancialController.cs

+ 132 - 0
OASystem/OASystem.Api/Controllers/FinancialController.cs

@@ -47,6 +47,11 @@ using Org.BouncyCastle.Asn1.Crmf;
 using EyeSoft.Extensions;
 using System.Collections;
 using SqlSugar.Extensions;
+using System.Linq.Expressions;
+using MathNet.Numerics.Distributions;
+using System.Diagnostics.Metrics;
+using EyeSoft.Collections.Generic;
+using Microsoft.Extensions.Hosting;
 
 namespace OASystem.API.Controllers
 {
@@ -4784,6 +4789,133 @@ Group by PriceType ", dto.diId);
             {
 
 
+            }
+            else if (Invitation.Contains(userId))
+            {
+                // 2)付费公务活动部分:¥50 / 团;
+                //4)不付费公务活动部分(自己联络)额外奖励:¥200 / 团(若公务活动方与邀请方为同一机构,奖励金额为¥100 / 团);
+                //5)只发邀请的团组不付费邀请额外奖励:¥100 / 团;
+                //邀请方已授权我司签发的邀请仍按照:¥100 / 团,无额外奖励。 
+                var officialList = _sqlSugar.Queryable<Res_OfficialActivities, Grp_DelegationInfo>((x,a)=> 
+                    new JoinQueryInfos(JoinType.Left,a.Id == x.DiId)
+                ).Where((x,a) => x.IsSubmitApproval == 0 && x.IsDel == 0 && a.IsDel == 0
+                    && a.VisitDate > StartDateTime && a.VisitDate < EndDateTime
+                )
+                .Select((x, a) => new
+                {
+                    a.Id,
+                    a.TeamName,
+                    a.VisitDate,
+                    x.CreateUserId,
+                    x.Type
+                })
+                .ToList();
+
+                var groups = officialList.GroupBy(x => x.Id);
+
+                foreach (var group in groups)
+                {
+                    var officialGroupList = group.GroupBy(d => d.CreateUserId);
+                    int operUserMax = 0, operMaxCount = 0;
+
+                    foreach (var item in officialGroupList)
+                    {
+                        if (item.Count() > operMaxCount)
+                        {
+                            operUserMax = item.Key;
+                            operMaxCount = item.Count();
+                        }
+                    }
+
+                    string temp = string.Empty;
+                    bool isBasics = operUserMax == userId;
+                    var comMoney = 0;
+
+                    foreach (var item in group)
+                    {
+                        if (item.Type == 0)
+                        {
+                            comMoney += (100 + 300);
+                        }
+                        else if (item.Type == 1)
+                        {
+                            comMoney += 300;
+                        }
+                        else if (item.Type == 2)
+                        {
+                            comMoney += 200;
+                        }
+                    }
+                }
+            }
+            else if (Visa.Contains(userId)) //签证
+            {
+                // 1)办理英国、加拿大、美国签证¥50元 / 人 / 团;
+                // 申根国家及其他所有国家¥30元 / 人 / 团;
+                var existsCountry = new string[] { "英国", "加拿大", "美国" };
+                var whereExpression = Expressionable.Create<Grp_VisaInfo, Grp_DelegationInfo, Grp_CreditCardPayment>()
+                    .Or(
+                        (x, a, b) => x.IsDel == 0 && x.CreateUserId == userId && (b.IsAuditGM == 1 || b.IsAuditGM == 3)
+                        && a.IsDel == 0 && a.VisitDate > StartDateTime && a.VisitDate < EndDateTime && b.IsDel == 0 && x.IsThird == 0 && x.PassengerType == 974
+                    );
+                var listVisa = _sqlSugar.Queryable<Grp_VisaInfo, Grp_DelegationInfo, Grp_CreditCardPayment>((x, a, b) => new
+                    JoinQueryInfos(
+                        JoinType.Left, a.Id == x.DIId,
+                        JoinType.Left, b.CTable == 80 && b.CId == x.Id)
+                    )
+                .Where(whereExpression.ToExpression())
+                .Select((x, a, b) => new
+                    {
+                        a.Id,
+                        a.TeamName,
+                        a.VisitDate,
+                        a.TeamLevSId,
+                        a.VisitPNumber,
+                        a.VisitCountry,
+                        x.VisaDescription,
+                        x.VisaFreeNumber,
+                        x.VisaNumber,
+                        x.VisaPrice
+                })
+                .ToList();
+
+                var groupByid = listVisa.GroupBy(x => x.Id);
+                foreach (var visaArr in groupByid)
+                {
+                    var groupinfo = listVisa.First(x => x.Id == visaArr.Key);
+                    var singlePrice = existsCountry.Where(x => groupinfo.VisitCountry.Contains(x)).Count() > 0 ? 50 : 30;
+                    int count = 0, money = 0;
+                    var arr = new ArrayList();
+                    foreach (var visa in visaArr)
+                    {
+                        if (visa.VisaPrice > 0)
+                        {
+                            count += visa.VisaFreeNumber + visa.VisaNumber;
+                            money += singlePrice * (visa.VisaFreeNumber + visa.VisaNumber);
+                        }
+                        else
+                        {
+                            count -= visa.VisaFreeNumber + visa.VisaNumber;
+                            money -= singlePrice * (visa.VisaFreeNumber + visa.VisaNumber);
+                        }
+                        string info = $"签证 {visa.VisaDescription}  {(visa.VisaPrice > 0 ? "" : "此笔为退费!")} 人数为{visa.VisaFreeNumber + visa.VisaNumber} 单价为{singlePrice} 金额为{singlePrice * (visa.VisaFreeNumber + visa.VisaNumber)}";
+                        arr.Add(info);
+                    }
+                   
+                    string temp  = "本团人数" + groupinfo.VisitPNumber + ",该人员" + user.CnName + "共办理英国、加拿大、美国签证" + (singlePrice == 50 ? count : 0).ToString() + "本护照(包含免签人员),申根国家及其他所有国家" + (singlePrice == 30 ? count : 0).ToString() + "本。" + user.CnName + "提成共" + money.ToString("#0.00") + "元";
+
+                    resultArr.Add(new
+                    {
+                        groupinfo.TeamName,
+                        groupinfo.Id,
+                        chiArr = arr,
+                        teamLvStr = teamLv.Find(x => x.Id == groupinfo.TeamLevSId)?.Name,
+                        groupinfo.VisitDate,
+                        temp,
+                        price = money,
+                    });
+                }
+
             }
 
             jw.Data = resultArr;