Browse Source

提交确认部分完善

yuanrf 8 months ago
parent
commit
f77a834578

+ 198 - 29
OASystem/OASystem.Api/Controllers/FinancialController.cs

@@ -32,7 +32,6 @@ using System.Data.OleDb;
 using System.Diagnostics;
 using System.Globalization;
 using System.IO.Compression;
-
 namespace OASystem.API.Controllers
 {
     /// <summary>
@@ -4930,11 +4929,11 @@ Group by PriceType ", dto.diId);
                     {
                         TeamName = groupinfo.TeamName,
                         TeamId = groupinfo.Id,
-                        chiArr = infos,
-                        teamLvStr = teamLv.Find(x=>x.Id == groupinfo.TeamLevSId)?.Name,
+                        ChiArr = infos,
+                        TeamLvStr = teamLv.Find(x=>x.Id == groupinfo.TeamLevSId)?.Name,
                         VisitDate = groupinfo.VisitDate,
-                        temp = temp,
-                        price = (groupAirCount * 10),
+                        Temp = temp,
+                        Price = (groupAirCount * 10),
                     }) ;
                 }
             }
@@ -5002,11 +5001,11 @@ Group by PriceType ", dto.diId);
                     {
                         TeamName = groupinfo.TeamName,
                         TeamId =  groupinfo.Id,
-                        chiArr = infos,
-                        teamLvStr = teamLv.Find(x => x.Id == groupinfo.TeamLevSId)?.Name,
+                        ChiArr = infos,
+                        TeamLvStr = teamLv.Find(x => x.Id == groupinfo.TeamLevSId)?.Name,
                         VisitDate =  groupinfo.VisitDate,
-                        temp = temp,
-                        price = totalPrice,
+                        Temp = temp,
+                        Price = totalPrice,
                     });
                 }
 
@@ -5031,11 +5030,11 @@ Group by PriceType ", dto.diId);
                     {
                         TeamName = groupinfo.TeamName,
                         TeamId = groupinfo.Id,
-                        chiArr = new List<string>() { temp },
-                        teamLvStr = teamLv.Find(x => x.Id == groupinfo.TeamLevSId)?.Name,
+                        ChiArr = new List<string>() { temp },
+                        TeamLvStr = teamLv.Find(x => x.Id == groupinfo.TeamLevSId)?.Name,
                         VisitDate = groupinfo.VisitDate,
-                        temp = temp,
-                        price = price
+                        Temp = temp,
+                        Price = price
                     });
                 }
 
@@ -5127,11 +5126,11 @@ Group by PriceType ", dto.diId);
                     {
                         TeamName = groupinfo.TeamName,
                         TeamId =  groupinfo.Id,
-                        chiArr = infos,
-                        teamLvStr = teamLv.Find(x => x.Id == groupinfo.TeamLevSId)?.Name,
+                        ChiArr = infos,
+                        TeamLvStr = teamLv.Find(x => x.Id == groupinfo.TeamLevSId)?.Name,
                         VisitDate = groupinfo.VisitDate,
-                        temp =  temp,
-                        price = money,
+                        Temp =  temp,
+                        Price = money,
                     });
                 }
             }
@@ -5195,11 +5194,11 @@ Group by PriceType ", dto.diId);
                     {
                         TeamName =  groupinfo.TeamName,
                         TeamId = groupinfo.Id,
-                        chiArr = arr,
-                        teamLvStr = teamLv.Find(x => x.Id == groupinfo.TeamLevSId)?.Name,
+                        ChiArr = arr,
+                        TeamLvStr = teamLv.Find(x => x.Id == groupinfo.TeamLevSId)?.Name,
                         VisitDate =  groupinfo.VisitDate,
-                        temp =  temp,
-                        price = money,
+                        Temp =  temp,
+                        Price = money,
                     });
                 }
                     
@@ -5214,7 +5213,7 @@ Group by PriceType ", dto.diId);
                 {
                     //var number = item.GetType().GetProperty("price")?.GetValue(item)?.ToString();
                     //total += decimal.TryParse(number,out decimal numberInt) ? numberInt : 0.00M;
-                    total += item.price;
+                    total += item.Price;
                 }
 
                 jw.Data = new
@@ -5279,10 +5278,10 @@ Group by PriceType ", dto.diId);
                             No,
                             item.TeamName,
                             item.VisitDate,
-                            item.teamLvStr,
-                            item.temp,
-                            infos =  string.Join("\r\n",item.chiArr),
-                            price = item.price + "元",
+                            item.TeamLvStr,
+                            item.Temp,
+                            infos =  string.Join("\r\n",item.ChiArr),
+                            price = item.Price + "元",
                         });
 
                         No++;
@@ -5320,20 +5319,99 @@ Group by PriceType ", dto.diId);
         }
 
         /// <summary>
-        /// 提成确认
+        /// 提成财务确认通知
         /// </summary>
         /// <returns></returns>
         [HttpPost]
 
-        public IActionResult SaveRoyaltyDetaile(SaveRoyaltyDetaileDto dto)
+        public async Task<IActionResult> RoyaltyConfirmByFin(RoyaltyConfirmDto dto)
         {
             var jw = JsonView(false);
+
+            if (!DateTime.TryParse(dto.StartData, out DateTime StartDateTime))
+            {
+                jw.Msg = "开始时间格式有误!";
+                return Ok(jw);
+            }
+            if (!DateTime.TryParse(dto.EndData, out DateTime EndDateTime))
+            {
+                jw.Msg = "结束时间格式有误!";
+                return Ok(jw);
+            }
+            if (DateTime.Compare(StartDateTime, EndDateTime) > 0)
+            {
+                jw.Msg = "开始时间大于结束时间!";
+                return Ok(jw);
+            }
+
             if (dto.ComputeRoyaltiesList.Count != 0)
             {
+                var user = _sqlSugar.Queryable<Sys_Users>().First(x => x.Id == dto.UserId);
+                if (user == null) { return Ok(JsonView(false, "通知失败! 人员信息有误!")); }
+
                 //保存提成信息   
-                //消息通知对应人员(公司 部门 人员 时间段) 
+                //消息通知对应人员(公司 部门 人员 时间段 团组id 是否确定 ) 
+                List<Fin_RoyaltyConfirm> entitys = dto.ComputeRoyaltiesList.Select(x => new Fin_RoyaltyConfirm
+                {
+                    UserId = dto.UserId,
+                    ChiArr = JsonConvert.SerializeObject(x.ChiArr),
+                    CreateTime = DateTime.Now,
+                    CreateUserId = dto.UserId,
+                    IsConfirm = 0,
+                    TeamId = x.TeamId,
+                    TeamLvStr = x.TeamLvStr,
+                    Price = x.Price,
+                    VisitDate = x.VisitDate,
+                    TeamName = x.TeamName,
+                    Temp = x.Temp
+                }).ToList();
+
+                var expressionSoftDeleteWhere = Expressionable.Create<Fin_RoyaltyConfirm>()
+                    .And(it => it.VisitDate >= StartDateTime)
+                    .And(it => it.VisitDate <= EndDateTime)
+                    .And(it => it.IsDel == 0)
+                    .And(it => it.UserId == dto.UserId)
+                    .And(it => it.IsConfirm == 0)
+                    .ToExpression();
+
+                var expressionSelectWhere = Expressionable.Create<Fin_RoyaltyConfirm>()
+                    .And(it => it.VisitDate >= StartDateTime)
+                    .And(it => it.VisitDate <= EndDateTime)
+                    .And(it => it.IsDel == 0)
+                    .And(it => it.UserId == dto.UserId)
+                    .And(it => it.IsConfirm == 1)
+                    .ToExpression();
 
+                _sqlSugar.BeginTran();
 
+                try
+                {
+                    _ = _sqlSugar.Updateable<Fin_RoyaltyConfirm>().SetColumns(it => new Fin_RoyaltyConfirm() { IsDel = 1, DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm"), DeleteUserId = dto.UserId })
+                                                            .Where(expressionSoftDeleteWhere)
+                                                            .ExecuteCommand();
+
+                    var confirmYes = _sqlSugar.Queryable<Fin_RoyaltyConfirm>().Where(expressionSelectWhere).Select(x => x.TeamId).ToList();
+
+                    entitys = entitys.Where(x => !confirmYes.Contains(x.TeamId)).ToList();
+
+                    _ = _sqlSugar.Insertable<Fin_RoyaltyConfirm>(entitys).ExecuteCommand();
+
+                    _sqlSugar.CommitTran();
+
+                    //调用通知
+                    var title = "提成确认";
+                    var center = $@"{dto.StartData}-{dto.EndData}提成财务已确认,请尽快查看!
+【{dto.StartData}-{dto.EndData}】";
+                    var ids = new List<int> { 235 }; //dto.UserId
+                    await GeneralMethod.MessageIssueAndNotification(MessageTypeEnum.GroupBusinessOperations,title, center, ids);
+
+                    jw = JsonView(true, $"人员:{user.CnName} {dto.StartData}-{dto.EndData} 通知成功!");
+                }
+                catch (Exception ex)
+                {
+                    _sqlSugar.RollbackTran();
+                    jw = JsonView(false, "保存失败!" + ex.Message);
+                }
             }
             else
             {
@@ -5343,10 +5421,101 @@ Group by PriceType ", dto.diId);
             return Ok(jw);
         }
 
+        /// <summary>
+        /// 查询提成信息
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
         [HttpPost]
         public IActionResult QueryRoyaltyInfo(QueryRoyaltyInfoDto dto)
         {
             var jw = JsonView(false);
+
+            if (!DateTime.TryParse(dto.StartDate, out DateTime StartDateTime))
+            {
+                jw.Msg = "开始时间格式有误!";
+                return Ok(jw);
+            }
+            if (!DateTime.TryParse(dto.EndDate, out DateTime EndDateTime))
+            {
+                jw.Msg = "结束时间格式有误!";
+                return Ok(jw);
+            }
+            if (DateTime.Compare(StartDateTime, EndDateTime) > 0)
+            {
+                jw.Msg = "开始时间大于结束时间!";
+                return Ok(jw);
+            }
+
+            var expressionSelectWhere = Expressionable.Create<Fin_RoyaltyConfirm>()
+                    .And(it => it.VisitDate >= StartDateTime)
+                    .And(it => it.VisitDate <= EndDateTime)
+                    .And(it => it.IsDel == 0)
+                    .And(it => it.UserId == dto.UserId)
+                    .ToExpression();
+
+            try
+            {
+                var query = _sqlSugar.Queryable<Fin_RoyaltyConfirm>().Where(expressionSelectWhere).ToList().Select(x => new
+                {
+                    x.Price,
+                    ChiArr = JsonConvert.DeserializeObject<List<string>>(x.ChiArr),
+                    x.IsConfirm,
+                    x.Id,
+                    x.TeamId,
+                    x.TeamName,
+                    x.TeamLvStr,
+                    x.Temp,
+                    x.VisitDate,
+                });
+
+                jw = JsonView(true, "获取成功!", query);
+            }
+            catch (Exception ex)
+            {
+                jw = JsonView(true, "获取失败!" + ex.Message);
+            }
+
+            return Ok(jw);
+        }
+
+        /// <summary>
+        /// 个人提成确认
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        public IActionResult RoyaltyConfirmByUser(RoyaltyConfirmByUserDto dto)
+        {
+            var jw = JsonView(false);
+
+            var stateArr = new int[] {0 , 1}; 
+
+            if (!stateArr.Contains(dto.State))
+            {
+                return Ok(JsonView(false,"状态标识有误!"));
+            }
+
+            if (dto.Data != null && dto.Data.Count != 0)
+            {
+                var expressionUpdateWhere = Expressionable.Create<Fin_RoyaltyConfirm>()
+                   .And(it => dto.Data.Contains (it.Id))
+                   .And(it => it.IsDel == 0)
+                   .ToExpression();
+
+                var count  =  _sqlSugar.Updateable<Fin_RoyaltyConfirm>().SetColumns(x => new Fin_RoyaltyConfirm
+                {
+                    IsConfirm = dto.State,
+                })
+                .Where(expressionUpdateWhere).ExecuteCommand();
+
+                jw.Msg = $"{count}个团组确认成功!";
+                jw.Code = 200;
+            }
+            else
+            {
+                jw.Msg = "Data为空!";
+            }
             return Ok(jw);
         }
         #endregion

+ 1 - 1
OASystem/OASystem.Api/Controllers/GroupsController.cs

@@ -298,7 +298,7 @@ namespace OASystem.API.Controllers
                                              .Where((di) => di.IsDel == 0 && !string.IsNullOrWhiteSpace(di.TeamName))
                                              .WhereIF(!string.IsNullOrEmpty(dto.Search), (di) => di.TeamName.Contains(dto.Search))
                                              .OrderBy((di) => new { id = SqlFunc.Desc(di.Id) })
-                                             .Select((di) => new { id = di.Id, name = di.TeamName })
+                                             .Select((di) => new { id = di.Id, name = di.TeamName, di.ClientName , di.VisitPNumber , di.VisitCountry, di.VisitDays, di.VisitStartDate , di.VisitEndDate })
                                              .Distinct()
                                              .ToPageListAsync(dto.PageIndex, dto.PageSize, total);
             watch.Stop();

+ 16 - 10
OASystem/OASystem.Domain/Dtos/Financial/ComputeRoyaltiesDto.cs

@@ -24,17 +24,17 @@ namespace OASystem.Domain.Dtos.Financial
     /// <summary>
     /// 提成信息保存
     /// </summary>
-    public class SaveRoyaltyDetaileDto
+    public class RoyaltyConfirmDto
     {
         /// <summary>
         /// 开始时间
         /// </summary>
-        public DateTime StartDataTime { get; set; }
+        public string StartData { get; set; }
 
         /// <summary>
         /// 结束时间
         /// </summary>
-        public DateTime EndDataTime { get; set; }
+        public string EndData { get; set; }
 
         /// <summary>
         /// 提成人员Id
@@ -59,20 +59,26 @@ namespace OASystem.Domain.Dtos.Financial
 
     public class QueryRoyaltyInfoDto
     {
-        /// <summary>
-        /// 提成人员Id
-        /// </summary>
         public int UserId { get; set; }
+        public string StartDate { get; set; }
+        public string EndDate { get; set; }
     }
 
     public class ComputeRoyaltiesView
     {
-        public decimal price { get; set; }
+        public decimal Price { get; set; }
         public string TeamName { get; set; }
         public int TeamId { get; set; }
-        public List<string> chiArr { get; set; }
-        public string? teamLvStr { get; set; }
+        public List<string> ChiArr { get; set; }
+        public string? TeamLvStr { get; set; }
         public DateTime VisitDate { get; set; }
-        public string temp { get; set; }
+        public string Temp { get; set; }
+    }
+
+    public class RoyaltyConfirmByUserDto
+    {
+        public List<int> Data { get; set; }
+
+        public int State { get; set; }
     }
 }

+ 58 - 0
OASystem/OASystem.Domain/Entities/Financial/Fin_RoyaltyConfirm.cs

@@ -0,0 +1,58 @@
+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_RoyaltyConfirm:EntityBase
+    {
+        /// <summary>
+        /// 提成金额
+        /// </summary>
+        public decimal Price { get; set; }
+        /// <summary>
+        /// 团组名称
+        /// </summary>
+        public string TeamName { get; set; }
+        /// <summary>
+        /// 团组id
+        /// </summary>
+        public int TeamId { get; set; }
+
+        /// <summary>
+        /// 提成明细 JSON
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(1000)")]
+        public string ChiArr { get; set; }
+        
+        /// <summary>
+        /// 团组等级
+        /// </summary>
+        public string? TeamLvStr { get; set; }
+        /// <summary>
+        /// 出访时间
+        /// </summary>
+        public DateTime VisitDate { get; set; }
+        
+        /// <summary>
+        /// 提成总信息
+        /// </summary>
+        public string Temp { get; set; }
+
+        /// <summary>
+        /// 是否确认
+        /// </summary>
+        public int IsConfirm { get; set; }
+        
+        /// <summary>
+        /// 提成人员id
+        /// </summary>
+        public int UserId { get; set; }
+
+    }
+}