Browse Source

市场部销售额 年度/季度/月度 报表(同比) PostMarketingSalesStatistics、团组列表 PostMarketingSalesGroupList、客户类型、客户等级 统计 PostMarketingSalesGroupStatistics、接单排名 PostMarketingSalesOrderRanking 接口代码编写

leiy 9 months ago
parent
commit
0a172e8c89

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

@@ -9415,11 +9415,11 @@ ORDER by  gctggrc.id DESC
             }
 
             #region 应用推送
+            //TODO:酒店预订费用消息推送 移动端完成后取消注释
             //try
             //{
             //    int ccpId = (int)_view.Data.GetType().GetProperty("ccpId").GetValue(_view.Data, null);
             //    int sign = (int)_view.Data.GetType().GetProperty("sign").GetValue(_view.Data, null);
-
             //    await AppNoticeLibrary.SendChatMsg_GroupStatus_ApplyFee(ccpId, sign, QiyeWeChatEnum.GuoJiaoLeaderChat);
             //}
             //catch (Exception ex)

+ 233 - 4
OASystem/OASystem.Api/Controllers/StatisticsController.cs

@@ -21,6 +21,7 @@ using Aspose.Words.Lists;
 using static OASystem.API.OAMethodLib.GeneralMethod;
 using TypeInfo = OASystem.Domain.ViewModels.Statistics.TypeInfo;
 using System.Net.NetworkInformation;
+using System.ComponentModel.Design;
 
 namespace OASystem.API.Controllers
 {
@@ -2032,7 +2033,6 @@ namespace OASystem.API.Controllers
 
         #endregion
 
-
         #region 市场部销售额
 
         /// <summary>
@@ -2137,7 +2137,7 @@ namespace OASystem.API.Controllers
 
         /// <summary>
         ///  市场部销售额
-        ///  年度/季度/月度 报表
+        ///  年度/季度/月度 报表(同比)
         /// </summary>
         /// <param name="_dto">市场部销售额请求dto</param>
         /// <returns></returns>
@@ -2156,6 +2156,95 @@ namespace OASystem.API.Controllers
                 return Ok(JsonView(false, errors.ToString()));
             }
 
+            PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase();
+
+            #region 页面操作权限验证
+            pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(_dto.UserId, _dto.PageId);
+
+            if (pageFunAuthView.CheckAuth == 0) return Ok(JsonView(false, MsgTips.CheckAuth));
+            #endregion
+
+            #endregion
+
+            //今年销售额
+            string beginDt = $"{_dto.BeginDt} 00:00:00",endDt = $"{_dto.EndDt} 23:59:59";
+            decimal thisYearSales = GroupSales(_dto.CompanyId, _dto.GroupPickupUserId, beginDt, endDt);
+
+            //去年销售额
+            string lastYearBeginDt = $"{DateTime.Parse(_dto.BeginDt).AddYears(-1).ToString("yyyy-MM-dd")} 00:00:00";
+            string lastYearEndDt = $"{DateTime.Parse(_dto.EndDt).AddYears(-1).ToString("yyyy-MM-dd")} 23:59:59";
+            decimal lastYearSales = GroupSales(_dto.CompanyId, _dto.GroupPickupUserId, lastYearBeginDt, lastYearEndDt);
+
+            //同比
+            decimal yoy = 0.00M;
+            if (thisYearSales > 0.00M) yoy = (thisYearSales - lastYearSales) / lastYearSales;
+
+            return Ok(JsonView(true, "操作成功!", new { 
+                thisYearSales = decimal.Parse(thisYearSales.ToString("#0.00")), 
+                lastYearSales = decimal.Parse(lastYearSales.ToString("#0.00")),
+                yoy = decimal.Parse(yoy.ToString("#0.00")) }));
+
+
+        }
+
+        /// <summary>
+        /// 计算团组销售额
+        /// </summary>
+        /// <param name="companyId"></param>
+        /// <param name="groupPickupUserId"></param>
+        /// <param name="beginDt"></param>
+        /// <param name="endDt"></param>
+        /// <returns></returns>
+        private decimal GroupSales(int companyId,int groupPickupUserId,string beginDt,string endDt)
+        {
+            decimal sales = 0.00M;
+
+            //相关人员userId
+            List<int> userId = new List<int>();
+            string userSqlWhere = "";
+            if (companyId > 0) userSqlWhere += string.Format($" And CompanyId={companyId}");
+            if (groupPickupUserId > 0) userSqlWhere += string.Format($" And Id={groupPickupUserId}");
+            string userSql = string.Format($" Select * From Sys_Users Where Isdel = 0 {userSqlWhere}");
+            userId = _sqlSugar.SqlQueryable<Sys_Users>(userSql).Select(it => it.Id).ToList();
+
+            //团组信息
+            string groupSql = string.Format($"Select * From Grp_DelegationInfo Where Isdel = 0 And VisitDate Between '{beginDt}' And '{endDt}'");
+            if (userId.Count > 0) groupSql = $"{groupSql} And JietuanOperator In ({string.Join(",", userId)})";
+            var groupIds = _sqlSugar.SqlQueryable<Grp_DelegationInfo>(groupSql).Select(it => it.Id).ToList();
+
+
+            //销售额 = 收款账单.账单模块 + 收款账单.成本预算模块 +  收款账单.分摊费用 Fin_ForeignReceivables
+            List<int> feeTypes = new List<int>() {
+                0 ,//- 账单模块
+                1 ,// - 成本预算模块
+                2 ,// - 分摊费用
+            };
+            var foreignReceivables = _sqlSugar.Queryable<Fin_ForeignReceivables>().Where(it => it.IsDel == 0 && feeTypes.Contains(it.AddingWay) && groupIds.Contains(it.Diid)).ToList();
+            sales = foreignReceivables.Sum(it => it.ItemSumPrice * it.Rate);
+
+            return sales;
+        }
+
+        /// <summary>
+        ///  市场部销售额
+        ///  团组列表
+        /// </summary>
+        /// <param name="_dto">市场部销售额请求dto</param>
+        /// <returns></returns>
+        [HttpPost("PostMarketingSalesGroupList")]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> PostMarketingSalesGroupList(MarketingSalesGroupListDto _dto)
+        {
+            #region  参数验证
+
+            MarketingSalesStatisticsDtoFoalidator validationRules = new MarketingSalesStatisticsDtoFoalidator();
+            var validResult = await validationRules.ValidateAsync(_dto);
+            if (!validResult.IsValid)
+            {
+                var errors = new StringBuilder();
+                foreach (var error in validResult.Errors) errors.AppendLine(error.ErrorMessage);
+                return Ok(JsonView(false, errors.ToString()));
+            }
 
             PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase();
 
@@ -2165,11 +2254,151 @@ namespace OASystem.API.Controllers
             if (pageFunAuthView.CheckAuth == 0) return Ok(JsonView(false, MsgTips.CheckAuth));
             #endregion
 
-            string beginDt = $"{_dto.BeginDt}";
+            #endregion
+
+            string beginDt = $"{_dto.BeginDt} 00:00:00", endDt = $"{_dto.EndDt} 23:59:59";
+
+            string sql = string.Format(@$"Select
+	ROW_NUMBER() Over(Order By CollectionDays) As RowNumber,
+	*
+From(
+	Select 
+	di.Id,
+	di.TeamName, 
+	di.ClientUnit,
+	di.ClientName,
+	di.VisitDate,
+	di.JietuanOperator,
+	di.VisitEndDate,
+	u.CnName As GroupPickupUser,
+	DATEADD(DAY, 7, di.VisitEndDate) As CollectionDays
+	From Grp_DelegationInfo di
+	Left Join Sys_Users u On di.JietuanOperator = u.Id
+	Where di.Isdel = 0 
+	And VisitDate Between '{beginDt}' And  '{endDt}'
+) Temp ");
+
+            RefAsync<int> total = 0;
+            var groupData = await _sqlSugar.SqlQueryable<MarketingSalesGroupList>(sql).ToPageListAsync(_dto.PageIndex, _dto.PageSize, total);
+
+            return Ok(JsonView(true, "操作成功!", groupData, total));
+        }
+
+        /// <summary>
+        ///  市场部销售额
+        ///  客户类型、客户等级 统计
+        /// </summary>
+        /// <param name="_dto">市场部销售额请求dto</param>
+        /// <returns></returns>
+        [HttpPost("PostMarketingSalesGroupStatistics")]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> PostMarketingSalesGroupStatistics(MarketingSalesGroupStatisticsDto _dto)
+        {
+            #region  参数验证
 
-            return Ok(JsonView(true, "操作成功!",""));
+            MarketingSalesStatisticsDtoFoalidator validationRules = new MarketingSalesStatisticsDtoFoalidator();
+            var validResult = await validationRules.ValidateAsync(_dto);
+            if (!validResult.IsValid)
+            {
+                var errors = new StringBuilder();
+                foreach (var error in validResult.Errors) errors.AppendLine(error.ErrorMessage);
+                return Ok(JsonView(false, errors.ToString()));
+            }
+
+            PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase();
+
+            #region 页面操作权限验证
+            pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(_dto.UserId, _dto.PageId);
+
+            if (pageFunAuthView.CheckAuth == 0) return Ok(JsonView(false, MsgTips.CheckAuth));
+            #endregion
+
+            #endregion
+
+            string beginDt = $"{_dto.BeginDt} 00:00:00", endDt = $"{_dto.EndDt} 23:59:59";
+
+            string sql = "";
+
+            if (_dto.StatisticsType == 1 )
+            {
+                sql = string.Format(@$"Select 
+	sd.[Name],
+	Count(*) As [Count]
+From Grp_DelegationInfo di
+Left Join Sys_SetData sd On di.TeamDid = sd.Id
+Where di.Isdel = 0 
+And VisitDate Between '{beginDt}' And  '{endDt}'
+Group By [Name]
+Order By Count Desc");
+            }
+            else if (_dto.StatisticsType == 2)
+            {
+                sql = string.Format(@$"Select 
+	sd.[Name],
+	Count(*) As [Count]
+From Grp_DelegationInfo di
+Left Join Sys_SetData sd On di.TeamLevSId = sd.Id
+Where di.Isdel = 0 
+And VisitDate Between '{beginDt}' And  '{endDt}'
+Group By [Name]
+Order By Count Desc");
+            }
+            else return Ok(JsonView(false, "StatisticsType不在可取范围!"));
+
+            var data = await _sqlSugar.SqlQueryable<MarketingSalesGroupStatisticsView>(sql).ToListAsync();
+
+            return Ok(JsonView(true, "操作成功!", data, data.Count));
+        }
+
+        /// <summary>
+        ///  市场部销售额
+        ///  接单排名
+        /// </summary>
+        /// <param name="_dto">市场部销售额请求dto</param>
+        /// <returns></returns>
+        [HttpPost("PostMarketingSalesOrderRanking")]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> PostMarketingSalesOrderRanking(MarketingSalesOrderRankingDto _dto)
+        {
+            #region  参数验证
+
+            MarketingSalesStatisticsDtoFoalidator validationRules = new MarketingSalesStatisticsDtoFoalidator();
+            var validResult = await validationRules.ValidateAsync(_dto);
+            if (!validResult.IsValid)
+            {
+                var errors = new StringBuilder();
+                foreach (var error in validResult.Errors) errors.AppendLine(error.ErrorMessage);
+                return Ok(JsonView(false, errors.ToString()));
+            }
+
+            PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase();
+
+            #region 页面操作权限验证
+            pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(_dto.UserId, _dto.PageId);
+
+            if (pageFunAuthView.CheckAuth == 0) return Ok(JsonView(false, MsgTips.CheckAuth));
             #endregion
 
+            #endregion
+
+            string beginDt = $"{_dto.BeginDt} 00:00:00", endDt = $"{_dto.EndDt} 23:59:59";
+
+            string sql = string.Format(@$"Select 
+	ROW_NUMBER() Over(Order By Count(*) Desc) As RowNumber,
+	u.CnName As UserName,
+	Count(*) As [Count]
+	From Grp_DelegationInfo di
+	Left Join Sys_Users u On di.JietuanOperator = u.Id
+	Where di.Isdel = 0 
+	And VisitDate Between '{beginDt}' And  '{endDt}'
+	Group By CnName");
+
+
+            RefAsync<int> total = 0;
+
+            var rankingData = await _sqlSugar.SqlQueryable<MarketingSalesOrderRankingView>(sql).ToPageListAsync(_dto.PageIndex, _dto.PageSize, total);
+
+            return Ok(JsonView(true, "操作成功!", rankingData, total));
         }
 
         #endregion

+ 33 - 0
OASystem/OASystem.Domain/Dtos/Statistics/MarketingSalesDto.cs

@@ -91,4 +91,37 @@ namespace OASystem.Domain.Dtos.Statistics
                 .WithMessage("请输入有效结束的日期");
         }
     }
+
+    /// <summary>
+    ///  市场部销售额
+    ///  团组列表
+    /// </summary>
+    public class MarketingSalesGroupListDto : MarketingSalesStatisticsDto {
+
+        public int PageIndex { get; set; } = 1;
+        public int PageSize { get; set; } = 10;
+    }
+
+    /// <summary>
+    ///  市场部销售额
+    ///  客户类型、客户等级 统计
+    /// </summary>
+    public class MarketingSalesGroupStatisticsDto : MarketingSalesStatisticsDto
+    {
+        /// <summary>
+        /// 图形统计类型
+        /// 1 客户类型 2 客户等级
+        /// </summary>
+        public int StatisticsType { get; set; } = 1;
+    }
+
+    /// <summary>
+    ///  市场部销售额
+    ///  接单排名
+    /// </summary>
+    public class MarketingSalesOrderRankingDto : MarketingSalesStatisticsDto
+    {
+        public int PageIndex { get; set; } = 1;
+        public int PageSize { get; set; } = 5;
+    }
 }

+ 35 - 0
OASystem/OASystem.Domain/ViewModels/Statistics/MarketingSalesView.cs

@@ -0,0 +1,35 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.ViewModels.Statistics
+{
+    public class MarketingSalesView
+    {
+    }
+
+    public class MarketingSalesGroupList {
+        public int RowNumber { get; set; }
+        public int Id { get; set; }
+        public string TeamName { get; set; }
+        public string ClientUnit { get; set; }
+        public string ClientName { get; set; }
+        public DateTime VisitDate { get; set; }
+        public DateTime VisitEndDate { get; set; }
+        public DateTime CollectionDays { get; set; }
+        public string GroupPickupUser { get; set; }
+    }
+
+    public class  MarketingSalesGroupStatisticsView {
+        public string Name { get; set; }
+        public int Count { get; set; }
+    }
+
+    public class MarketingSalesOrderRankingView {
+        public int RowNumber { get; set; }
+        public string UserName { get; set; }
+        public int Count { get; set; }
+    }
+}