yuanrf пре 1 дан
родитељ
комит
171a663b4e

+ 26 - 5
OASystem/OASystem.Api/Controllers/FinancialController.cs

@@ -1,4 +1,4 @@
-using Aspose.Cells;
+using Aspose.Cells;
 using Aspose.Words;
 using EyeSoft.Extensions;
 using EyeSoft.IO;
@@ -54,6 +54,8 @@ namespace OASystem.API.Controllers
         private readonly ForeignReceivablesRepository _foreignReceivablesRepository;
         private readonly CheckBoxsRepository _groupCheckBox; //团组成本选中项 仓库
 
+        private readonly GroupExtraCostRepository _groupExtraCostRepository; //团组超支费用 仓库
+
         /// <summary>
         /// 初始化
         /// </summary>
@@ -72,7 +74,8 @@ namespace OASystem.API.Controllers
             DelegationInfoRepository delegationInfoRep,
             SetDataRepository setDataRep,
             ForeignReceivablesRepository foreignReceivablesRepository,
-            CheckBoxsRepository groupCheckBox
+            CheckBoxsRepository groupCheckBox,
+            GroupExtraCostRepository groupExtraCostRepository
             )
         {
             _mapper = mapper;
@@ -90,6 +93,7 @@ namespace OASystem.API.Controllers
             _setDataRep = setDataRep;
             _foreignReceivablesRepository = foreignReceivablesRepository;
             _groupCheckBox = groupCheckBox;
+            _groupExtraCostRepository = groupExtraCostRepository;
         }
 
         #region 日付申请
@@ -896,7 +900,7 @@ namespace OASystem.API.Controllers
         }
 
 
-        private readonly static Dictionary<int, string> _receivablesFeilDownloadType = new Dictionary<int, string>() 
+        private readonly static Dictionary<int, string> _receivablesFeilDownloadType = new Dictionary<int, string>()
         {
             { 1,"生成收款单(四川)"},
             { 2,"生成收款单(北京)"},
@@ -1526,7 +1530,7 @@ namespace OASystem.API.Controllers
 
                         for (int i = 0; i < filePaths.Count; i++)
                         {
-                            filePaths[i] = Path.Combine(sourceFolderPath, filePaths[i]); 
+                            filePaths[i] = Path.Combine(sourceFolderPath, filePaths[i]);
                         }
 
                         // 4. 生成目标Zip文件路径
@@ -5194,6 +5198,17 @@ namespace OASystem.API.Controllers
                 }
 
                 var overspendAuditUser = AppSettingsHelper.Get<OverspendAuditUserView>("OverspendAuditUser");
+                var di = _sqlSugar.Queryable<Grp_DelegationInfo>()
+                .LeftJoin<Sys_SetData>((di, s) => di.ExtOverCurrency == s.Id && s.IsDel == 0)
+                .Where((di, s) => di.Id == dto.diId && di.IsDel == 0)
+                .Select((di, s) => new
+                {
+                    di.Id,
+                    di.ExtOverLimit,
+                    di.ExtOverCurrency,
+                    CurrencyName = s.Name
+                })
+                .First();
 
                 var result = new
                 {
@@ -5206,7 +5221,13 @@ namespace OASystem.API.Controllers
                         jinliExpand = overspendAuditUser.Find(x => x.Job == "opJinLi").Users.Select(x => x.Id),
                         zhuguanExpand = overspendAuditUser.Find(x => x.Job == "opZhuGuan").Users.Select(x => x.Id),
                         syzhuguanExpand = overspendAuditUser.Find(x => x.Job == "syZhuGuan").Users.Select(x => x.Id),
-                    }
+                    },
+                    ExtOver = new
+                    {
+                        Limit = di?.ExtOverLimit ?? 0.00m,
+                        Currency = di?.ExtOverCurrency ?? 836
+                    },
+                    GroupExtraPrice = await _groupExtraCostRepository.GetGroupExtraPriceByDiId(dto.diId)
                 };
 
                 return Ok(JsonView(true, "查询成功", result));

+ 19 - 2
OASystem/OASystem.Api/Controllers/GroupsController.cs

@@ -22486,7 +22486,11 @@ end as 'country'
 
                     if (tp == typeof(int))
                     {
-                        var val = List_GC1.Sum(x => (int)x.GetType().GetProperty(item.Name).GetValue(x));
+                        var val = List_GC1.Sum(x =>
+                        {
+                            var raw = x.GetType().GetProperty(item.Name).GetValue(x);
+                            return raw == null ? 0 : (int)raw;
+                        });
                         if (val == 0)
                         {
                             var columnSetting = ColumnSetting.FirstOrDefault(x => x.P == item.Name);
@@ -22499,7 +22503,11 @@ end as 'country'
 
                     if (tp == typeof(decimal))
                     {
-                        var val = List_GC1.Sum(x => (decimal)x.GetType().GetProperty(item.Name).GetValue(x));
+                        var val = List_GC1.Sum(x =>
+                        {
+                            var raw = x.GetType().GetProperty(item.Name).GetValue(x);
+                            return raw == null ? 0m : (decimal)raw;
+                        });
                         if (val == 0)
                         {
                             var columnSetting = ColumnSetting.FirstOrDefault(x => x.P == item.Name);
@@ -32129,6 +32137,14 @@ ORDER BY
             return Ok(JsonView(true, "SUCCESS", backData));
         }
 
+        [HttpPost]
+        public async Task<IActionResult> ConferenceAffairsChildAddRowReturnId(ConferenceAffairsChildAddRowReturnIdDto dto)
+        {
+            var data = _mapper.Map<Grp_ConferenceAffairsCostChild>(dto.data);
+            var id = await _sqlSugar.Insertable(data).ExecuteReturnIdentityAsync();
+            return Ok(JsonView(true, "SUCCESS", new { id }));
+        }
+
         /// <summary>
         /// 会务成本从表新增行
         /// </summary>
@@ -32199,6 +32215,7 @@ ORDER BY
 
             return Ok(JsonView(true, "新增成功!", result));
         }
+
         /// <summary>
         /// 会务成本从表图片文件上传
         /// </summary>

+ 5 - 4
OASystem/OASystem.Domain/AutoMappers/_baseMappingProfile.cs

@@ -105,7 +105,7 @@ namespace OASystem.Domain.AutoMappers
             #region 机票费用录入
             CreateMap<AirTicketResOp, Grp_AirTicketReservations>();
             CreateMap<CardPayment, Grp_CreditCardPayment>();
-            CreateMap<Grp_GroupCostParameter,AirGroupCostParameterView>();
+            CreateMap<Grp_GroupCostParameter, AirGroupCostParameterView>();
             CreateMap<Edit_GrpCreditCardPaymentDto, Grp_CreditCardPayment>();
             #endregion
 
@@ -115,7 +115,7 @@ namespace OASystem.Domain.AutoMappers
 
             #region 商邀费用
             CreateMap<OpInvitationOfficialActivitiesDto, Grp_InvitationOfficialActivities>();
-            CreateMap<OpInvitationOfficialActivitiesDto,Res_InvitationOfficialActivityData>();
+            CreateMap<OpInvitationOfficialActivitiesDto, Res_InvitationOfficialActivityData>();
             CreateMap<Grp_InvitationOfficialActivities, InvitationOfficialActivitiesByIdView>();
             CreateMap<Grp_InvitationOfficialActivities, Grp_InvitationOfficialActivitiesView>();
             #endregion
@@ -338,10 +338,10 @@ namespace OASystem.Domain.AutoMappers
             #endregion
             #region 客户资料板块
             CreateMap<DeleClient, Crm_DeleClient>();
-            CreateMap<CustomerFamily,Crm_VisaCustomerFamily>();
+            CreateMap<CustomerFamily, Crm_VisaCustomerFamily>();
             CreateMap<CustomerCerts, Crm_CustomerCert>();
             CreateMap<VisaCustomerCompany, Crm_VisaCustomerCompany>();
-            CreateMap<VisaCustomerSchool,Crm_VisaCustomerSchool>();
+            CreateMap<VisaCustomerSchool, Crm_VisaCustomerSchool>();
             #endregion
             #region 新客户资料
             CreateMap<NewClientOpDto, Crm_NewClientData>();
@@ -409,6 +409,7 @@ namespace OASystem.Domain.AutoMappers
             #region 会务成本
             CreateMap<ConferenceAffairsCostView, Grp_ConferenceAffairsCost>();
             CreateMap<ConferenceAffairsCostChildView, Grp_ConferenceAffairsCostChild>();
+            CreateMap<ConferenceAffairsCostChildExpandView, Grp_ConferenceAffairsCostChild>();
             #endregion
 
             #region 公司日常 KPI

+ 5 - 0
OASystem/OASystem.Domain/Dtos/Groups/ConferenceAffairsInIt.cs

@@ -21,6 +21,11 @@ namespace OASystem.Domain.Dtos.Groups
         public int userId { get; set; }
     }
 
+    public class ConferenceAffairsChildAddRowReturnIdDto
+    {
+        public ConferenceAffairsCostChildView data { get; set; }
+    }
+
     public class ConferenceAffairsChildImageUploadDto
     {
         public int childId { get; set; }

+ 7 - 0
OASystem/OASystem.Domain/ViewModels/Groups/ConferenceAffairsCostView.cs

@@ -59,6 +59,13 @@
 
     }
 
+    public class ConferenceAffairsCostChildExpandView : ConferenceAffairsCostChildView
+    {
+        /// <summary>
+        /// 主表Id
+        /// </summary>
+        public int ConferenceAffairsCostId { get; set; }
+    }
 
     public class ConferenceAffairsCostChildView
     {

+ 180 - 0
OASystem/OASystem.Infrastructure/Repositories/Financial/GroupExtraCostRepository.cs

@@ -0,0 +1,180 @@
+using AutoMapper;
+using OASystem.Domain.Entities.Financial;
+using OASystem.Domain.ViewModels.Financial;
+using OASystem.Domain.Entities.Groups;
+using OASystem.Domain;
+using OASystem.Infrastructure.Repositories.System;
+using OASystem.Domain.ViewModels.Groups;
+using Microsoft.Extensions.Logging;
+
+namespace OASystem.Infrastructure.Repositories.Financial
+{
+
+    public class GroupExtraPriceResult
+    {
+        /// <summary>
+        /// 剩余金额
+        /// </summary>
+        public decimal RemainingAmount { get; set; }
+        /// <summary>
+        /// 金额币种
+        /// </summary>
+        public int RemainingCurrency { get; set; }
+        /// <summary>
+        /// 剩余百分比
+        /// </summary>
+        public decimal RemainingPercentage { get; set; }
+
+        /// <summary>
+        /// 已用金额
+        /// </summary>
+        public decimal UsedAmount { get; set; }
+    }
+    /// <summary>
+    /// 财务 - 团组超支费用
+    /// </summary>
+    public class GroupExtraCostRepository : BaseRepository<Fin_GroupExtraCost, Fin_GroupExtraCostView>
+    {
+        private readonly IMapper _mapper;
+
+        private readonly SetDataRepository _setDataRepository;
+
+        //添加日志
+        private readonly ILogger<GroupExtraCostRepository> _logger;
+
+        public GroupExtraCostRepository(SqlSugarClient sqlSugar, IMapper mapper, SetDataRepository setDataRepository, ILogger<GroupExtraCostRepository> logger)
+            : base(sqlSugar)
+        {
+            _mapper = mapper;
+            _setDataRepository = setDataRepository;
+            _logger = logger;
+        }
+
+        public async Task<GroupExtraPriceResult> GetGroupExtraPriceByDiId(int diId)
+        {
+            var sumPriceList = await Query(x => x.DiId == diId && x.IsDel == 0)
+            .LeftJoin<Grp_CreditCardPayment>((x, y) => x.Id == y.CId && y.CTable == 1015)
+            .Where((x, y) => x.PriceSum > 0 && y.IsDel == 0)
+            .Select((x, y) => new { x.Id, x.PriceSum, x.PriceCurrency, x.PriceType, y.DayRate })
+            .ToListAsync();
+
+            var upperLimit = _sqlSugar.Queryable<Grp_DelegationInfo>()
+            .Where(x => x.Id == diId && x.IsDel == 0)
+            .Select(x => new { x.ExtOverLimit, x.ExtOverCurrency })
+            .First();
+
+            if (upperLimit == null)
+            {
+                _logger.LogError("团组超支费用查询失败,团组不存在 diId: {diId}", diId);
+                return new GroupExtraPriceResult()
+                {
+                    RemainingAmount = 0,
+                    RemainingCurrency = 836, //RMB
+                    RemainingPercentage = 1,
+                    UsedAmount = 0
+                };
+            }
+
+            if (!sumPriceList.Any())
+            {
+                _logger.LogError("团组超支费用查询失败,团组超支费用为0 diId: {diId}", diId);
+                return new GroupExtraPriceResult()
+                {
+                    RemainingAmount = upperLimit.ExtOverLimit,
+                    RemainingCurrency = upperLimit.ExtOverCurrency,
+                    RemainingPercentage = 1,
+                    UsedAmount = 0
+                };
+            }
+
+            //剩余金额
+            decimal remainingAmount = 0;
+            //金额币种
+            int remainingCurrency = 0;
+            //剩余百分比
+            decimal remainingPercentage = 0;
+            //已用额度
+            decimal usedAmount = 0;
+
+            //获取超支部分的汇率
+            var currRate = await _setDataRepository.PostCurrencyByDiid(diId, 1015, upperLimit.ExtOverCurrency);
+            var currRateInfo = (currRate.Data as CurrencyInfo);
+            if (currRateInfo == null)
+            {
+                currRateInfo = new CurrencyInfo()
+                {
+                    Rate = 1,
+                };
+            }
+
+            var currencyCount = sumPriceList
+            .GroupBy(x => x.PriceCurrency)
+            .ToList();
+
+            if (currencyCount.Count > 1)
+            {
+                //全部转为RMB处理
+                var rmbPrice = sumPriceList.Sum(x => x.PriceSum * x.DayRate);
+                var upperLimitRmbPrice = upperLimit.ExtOverLimit * currRateInfo.Rate;
+                remainingAmount = upperLimitRmbPrice - rmbPrice;
+                remainingCurrency = 836; //RMB
+                if (upperLimitRmbPrice > 0)
+                {
+                    remainingPercentage = remainingAmount / upperLimitRmbPrice;
+                }
+                else
+                {
+                    remainingPercentage = 1;
+                }
+
+                usedAmount = rmbPrice;
+            }
+            else
+            {
+                if (upperLimit.ExtOverCurrency == currencyCount.First().Key)
+                {
+                    remainingAmount = upperLimit.ExtOverLimit - sumPriceList.Sum(x => x.PriceSum);
+                    remainingCurrency = upperLimit.ExtOverCurrency; //原币种
+                    if (upperLimit.ExtOverLimit > 0)
+                    {
+                        remainingPercentage = remainingAmount / upperLimit.ExtOverLimit;
+                    }
+                    else
+                    {
+                        remainingPercentage = 1;
+                    }
+                    usedAmount = sumPriceList.Sum(x => x.PriceSum);
+                }
+                else
+                {
+                    //转换为RMB比较
+                    var rmbPrice = sumPriceList.Sum(x => x.PriceSum * x.DayRate);
+                    var upperLimitRmbPrice = upperLimit.ExtOverLimit * currRateInfo.Rate;
+                    remainingAmount = upperLimitRmbPrice - rmbPrice;
+                    remainingCurrency = 836; //RMB
+                    if (upperLimitRmbPrice > 0)
+                    {
+                        remainingPercentage = remainingAmount / upperLimitRmbPrice;
+                    }
+                    else
+                    {
+                        remainingPercentage = 1;
+                    }
+                    usedAmount = rmbPrice;
+                }
+            }
+
+            remainingPercentage = Math.Round(remainingPercentage, 2);
+            remainingAmount = Math.Round(remainingAmount, 2);
+            usedAmount = Math.Round(usedAmount, 2);
+
+            return new GroupExtraPriceResult()
+            {
+                RemainingAmount = remainingAmount,
+                RemainingCurrency = remainingCurrency,
+                RemainingPercentage = remainingPercentage,
+                UsedAmount = usedAmount
+            };
+        }
+    }
+}