|
@@ -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
|