Sfoglia il codice sorgente

提成导入日付

yuanrf 6 mesi fa
parent
commit
2af049ebc7

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

@@ -7,6 +7,7 @@ using EyeSoft.Runtime.InteropServices;
 using FluentValidation;
 using MathNet.Numerics.Distributions;
 using Microsoft.EntityFrameworkCore.Query.Internal;
+using Microsoft.OpenApi.Expressions;
 using NPOI.HPSF;
 using NPOI.HSSF.UserModel;
 using NPOI.SS.Formula.Functions;
@@ -30,12 +31,14 @@ using OfficeOpenXml;
 using Org.BouncyCastle.Math;
 using SqlSugar.Extensions;
 using System.Collections;
+using System.ComponentModel.Design;
 using System.Data;
 using System.Data.OleDb;
 using System.Diagnostics;
 using System.Globalization;
 using System.IO.Compression;
 using System.IO.Pipelines;
+using System.Linq.Expressions;
 
 namespace OASystem.API.Controllers
 {
@@ -240,8 +243,22 @@ namespace OASystem.API.Controllers
         [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
         public async Task<IActionResult> PostDelDailyPayment(DelDailyFeePaymentDto dto)
         {
+            _sqlSugar.BeginTran();
+            
             var result = await _daiRep.Del(dto);
 
+            //删除日付关联表
+            var delCount = _sqlSugar.Updateable<Fin_RoyaltyForm>()
+                .Where(x => x.IsDel == 0 && x.DayOverhead == dto.Id)
+                .SetColumns(x => new Fin_RoyaltyForm
+                {
+                    DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
+                    DeleteUserId = dto.UserId,
+                    IsDel = 1
+                }).ExecuteCommand();
+
+            _sqlSugar.CommitTran();
+
             if (result == null || result.Code != 0)
             {
                 return Ok(JsonView(false, result.Msg));
@@ -5800,6 +5817,227 @@ Group by PriceType ", dto.diId);
             }
             return Ok(jw);
         }
+
+        /// <summary>
+        /// 提成确认信息
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost]
+
+        public IActionResult RoyaltyConfirmInfo()
+        {
+            var jw = JsonView(false);
+
+            var queryExpression = Expressionable.Create<Fin_RoyaltyConfirm>()
+                                    .And(r => r.IsDel == 0)
+                                    .And(r => r.IsConfirm == 1)
+                                    .And(r => r.IsSeed == 0)
+                                    .ToExpression();
+
+            var DbQueryConfirmInfo = _sqlSugar.Queryable<Fin_RoyaltyConfirm>()
+                .LeftJoin<Sys_Users>((r,s) => s.IsDel == 0 && s.Id == r.UserId)
+                .LeftJoin<Sys_JobPost>((r, s , p) => p.IsDel == 0 && p.Id == s.JobPostId)
+                .LeftJoin<Sys_Department>((r, s, p , d) => d.IsDel == 0 && d.Id == p.DepId)
+                .LeftJoin<Sys_Company>((r, s, p, d, c) => c.IsDel == 0 && c.Id == d.CompanyId)
+                .Where(queryExpression)
+                .Select((r, s, p, d, c) => new
+                {
+                    r.UserId,
+                    r.TeamId,
+                    r.Id,
+                    r.TeamName,
+                    r.Price,
+                    s.CnName,   
+                    p.JobName,
+                    d.DepName,
+                    c.CompanyName
+                })
+                .ToList();
+
+            var groupConfirmInfoByUser = DbQueryConfirmInfo.GroupBy(x => x.UserId);
+
+            ArrayList returnData = new ArrayList();
+
+            foreach (var item in groupConfirmInfoByUser)
+            {
+                var first = item.First();
+                returnData.Add(new
+                {
+                    UserId = item.Key,
+                    Count = item.Count(),
+                    first.CompanyName,
+                    first.DepName,
+                    first.JobName,
+                    first.CnName,
+                    SumPrice = item.Sum(x=>x.Price),
+                    RoyaltyIdArr = item.Select(x=>x.Id)
+                });
+            }
+
+            jw = JsonView(true,"获取成功!",returnData);
+
+            return Ok(jw);
+        }
+
+        /// <summary>
+        /// 提交到日付申请
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost]
+        public async Task<IActionResult> RoyaltyFormPrice(RoyaltyFromPriceDto dto)
+        {
+            var jw = JsonView(false,"用户ID为空!");
+
+            var User = _sqlSugar.Queryable<Sys_Users>().First(x => x.Id
+             == dto.CreateId && x.IsDel == 0);
+            if (User == null)
+            {
+                JsonView(false, "createid 不存在!");
+            }
+
+            if (dto.Items.Count > 0)
+            {
+
+                var queryExpression = Expressionable.Create<Fin_RoyaltyConfirm>()
+                                   .And(r => r.IsDel == 0)
+                                   .And(r => r.IsConfirm == 1)
+                                   .And(r => dto.Items.Select(x=>x.UserId).Contains(r.UserId))
+                                   .ToExpression();
+
+                var DbQueryConfirmInfo = _sqlSugar.Queryable<Fin_RoyaltyConfirm>()
+                .LeftJoin<Sys_Users>((r, s) => s.IsDel == 0 && s.Id == r.UserId)
+                .LeftJoin<Sys_JobPost>((r, s, p) => p.IsDel == 0 && p.Id == s.JobPostId)
+                .LeftJoin<Sys_Department>((r, s, p, d) => d.IsDel == 0 && d.Id == p.DepId)
+                .LeftJoin<Sys_Company>((r, s, p, d, c) => c.IsDel == 0 && c.Id == d.CompanyId)
+                .Where(queryExpression)
+                .Select((r, s, p, d, c) => new
+                {
+                    r.UserId,
+                    r.TeamId,
+                    r.Id,
+                    r.TeamName,
+                    r.Price,
+                    s.CnName,
+                    p.JobName,
+                    d.DepName,
+                    c.CompanyName,
+                    CompanyId = c.Id,
+                    UserName = s.CnName,
+                })
+                .ToList();
+
+                //已经提交到日付的用户提成信息
+                var existsDb = _sqlSugar.Queryable<Fin_RoyaltyForm>()
+                    .Where(x => dto.Items
+                        .Select(x => x.UserId).Contains(x.UserId) && x.IsDel == 0 )
+                    .ToList();
+
+                var GroupByConfirmInfo = DbQueryConfirmInfo.GroupBy(x => x.UserId ).ToList();
+                //关联信息
+                List<Fin_RoyaltyForm> relevanceSoure = new List<Fin_RoyaltyForm>();
+
+                AddDailyFeePaymentDto dayPrice = new AddDailyFeePaymentDto()
+                {
+                    UserId = dto.CreateId,
+                    Instructions = DateTime.Now.ToString("yyyy-MM-dd HH:mm") + "  提成导入日付!",
+                    PortType = 1,
+                    CompanyId = 2,
+                    PriceTypeId = 668,
+                    TransferTypeId = 798,
+                };
+
+                List<AddDailyFeePaymentContentDto> ChiDayPrice = new List<AddDailyFeePaymentContentDto>();
+
+                _sqlSugar.BeginTran();
+
+                try
+                {
+                    string message = string.Empty;
+
+                    foreach (var item in GroupByConfirmInfo)
+                    {
+                        var first = item.First();
+
+                        var reqBody = dto.Items.Find(x => x.UserId == item.Key);
+                        var exists = item.Where(x => reqBody!.ChiArr.Contains(x.Id));
+                        var existsDbByUser = existsDb.Where(x => x.UserId == item.Key);
+                        var idsByUser = string.Join(',',existsDbByUser.Select(x=>x.ConfirmIdArr));
+                        var idsByUserList = idsByUser.Split(',')
+                            .Select(x=>
+                            {
+                                if (!string.IsNullOrWhiteSpace(x) && int.TryParse(x, out int intx))
+                                {
+                                    return intx;
+                                }
+                                return 0;
+                            })
+                            .Where(x => x != 0)
+                            .ToList();
+                        var saveArr = exists.Where(x => !idsByUserList.Contains(x.Id));
+                        var existsYes = exists.Where(x => idsByUserList.Contains(x.Id));
+                        var yesPrice = existsYes.Sum(x => x.Price);
+                        var savePrice = saveArr.Sum(x => x.Price);
+
+                        if (saveArr.Count() > 0) {
+
+                            ChiDayPrice.Add(new
+                            AddDailyFeePaymentContentDto
+                            {
+                                ItemTotal = savePrice,
+                                Price = savePrice,
+                                Quantity = 1,
+                                PriceName = first.CnName + "提成金额!",
+                            });
+
+                            relevanceSoure.Add(new
+                             Fin_RoyaltyForm
+                            {
+                                CreateUserId = dto.CreateId,
+                                ConfirmIdArr = string.Join(',', saveArr.Select(x => x.Id)),
+                                CreateTime = DateTime.Now,
+                                IsDel = 0,
+                                UserId = item.Key,
+                            });
+                        }
+
+                        if (yesPrice > 0 ) {
+                            message += $"{first.CnName} 提成 {savePrice}元已导入日付申请 , {yesPrice} 元已经存在 ! \r\n";
+                        }
+                        else {
+                            message += $"{first.CnName} 提成 {savePrice}元已导入日付申请 ! \r\n";
+                        }
+                    }
+
+                    dayPrice.FeeContents = ChiDayPrice;
+                    dayPrice.SumPrice = ChiDayPrice.Sum(x => x.ItemTotal);
+                    if (dayPrice.SumPrice != 0)
+                    {
+                        var ApiResult = await _daiRep.Add(dayPrice);
+
+                        int dailyId = Convert.ToInt32(ApiResult?.Data?.GetType().GetProperty("dailyId").GetValue(ApiResult.Data));
+                        int sign = Convert.ToInt32(ApiResult?.Data?.GetType().GetProperty("sign").GetValue(ApiResult.Data));
+
+                        relevanceSoure.ForEach(x => x.DayOverhead = dailyId);
+
+                        var addCount = _sqlSugar.Insertable<Fin_RoyaltyForm>(relevanceSoure).ExecuteCommand();
+                    }
+
+                    _sqlSugar.CommitTran();
+
+                    //消息通知
+                    //await AppNoticeLibrary.DailyPayReminders_Create_ToCaiwuChat(dailyId, sign, QiyeWeChatEnum.CaiWuChat);
+
+                    jw = JsonView(true, message);
+                }
+                catch (Exception ex)
+                {
+                    _sqlSugar.RollbackTran();
+                    jw = JsonView(false, $" Api  Error  ({ex.Message})");
+                }
+            }
+
+            return Ok(jw);
+        }
         #endregion
 
         #region 团组未审核数据

+ 14 - 0
OASystem/OASystem.Domain/Dtos/Financial/ComputeRoyaltiesDto.cs

@@ -90,4 +90,18 @@ namespace OASystem.Domain.Dtos.Financial
     {
         public List<int> Data { get; set; }
     }
+
+    public class RoyaltyFromPriceDto
+    {
+        public List<RoyaltyFromPriceItem> Items { get; set; }
+
+        public int CreateId { get; set; }
+    }
+
+    public class RoyaltyFromPriceItem
+    {
+        public int UserId { get;set; }
+
+        public List<int> ChiArr { get; set; }
+    }
 }

+ 30 - 0
OASystem/OASystem.Domain/Entities/Financial/Fin_RoyaltyForm.cs

@@ -0,0 +1,30 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.Entities.Financial
+{
+    /// <summary>
+    /// 提成 - 日付关联表
+    /// </summary>
+    public class Fin_RoyaltyForm:EntityBase
+    {
+        /// <summary>
+        /// 用户Id
+        /// </summary>
+        public int UserId { get; set; }
+
+        /// <summary>
+        /// 日付Id
+        /// </summary>
+        public int DayOverhead { get; set; }
+
+        /// <summary>
+        /// 提成确认id
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "nvarchar(500)")]
+        public string ConfirmIdArr { get; set; }
+    }
+}