|
@@ -23,6 +23,8 @@ using TypeInfo = OASystem.Domain.ViewModels.Statistics.TypeInfo;
|
|
|
using System.Net.NetworkInformation;
|
|
|
using System.ComponentModel.Design;
|
|
|
using NetTaste;
|
|
|
+using OASystem.Domain.ViewModels.QiYeWeChat;
|
|
|
+using NPOI.POIFS.Crypt.Dsig;
|
|
|
|
|
|
namespace OASystem.API.Controllers
|
|
|
{
|
|
@@ -2184,9 +2186,9 @@ namespace OASystem.API.Controllers
|
|
|
/// </summary>
|
|
|
/// <param name="_dto">市场部销售额请求dto</param>
|
|
|
/// <returns></returns>
|
|
|
- [HttpPost("PostMarketingSalesStatistics")]
|
|
|
+ [HttpPost("PostMarketingSalesStatistics_Year")]
|
|
|
[ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
|
|
|
- public async Task<IActionResult> PostMarketingSalesStatistics(MarketingSalesStatisticsDto _dto)
|
|
|
+ public async Task<IActionResult> PostMarketingSalesStatistics_Year(MarketingSalesStatisticsDto _dto)
|
|
|
{
|
|
|
#region 参数验证
|
|
|
|
|
@@ -2209,34 +2211,122 @@ namespace OASystem.API.Controllers
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
- //TODO:sugar 报错
|
|
|
- //Invalid attempt to call FieldCount when reader is closed
|
|
|
- //Invalid operation.The connection is closed.
|
|
|
- //今年销售额
|
|
|
string beginDt = $"{_dto.BeginDt} 00:00:00",endDt = $"{_dto.EndDt} 23:59:59";
|
|
|
- var paras = new SugarParameter[]{
|
|
|
- new SugarParameter("@companyId", _dto.CompanyId),
|
|
|
- new SugarParameter("@groupPickupUserId", _dto.GroupPickupUserId),
|
|
|
- new SugarParameter("@beginDt", beginDt),
|
|
|
- new SugarParameter("@endDt", endDt),
|
|
|
- new SugarParameter("@thisSales", null, true),
|
|
|
- new SugarParameter("@lastSales", null, true),
|
|
|
- new SugarParameter("@yoy", null, true)
|
|
|
- };
|
|
|
- var dt = await _sqlSugar.Ado.UseStoredProcedure().GetDataTableAsync("CalculateSales", paras);
|
|
|
+
|
|
|
+ return Ok(JsonView(true, "操作成功!", await GroupSales(_dto.CompanyId, _dto.GroupPickupUserId, beginDt, endDt)));
|
|
|
+ }
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 计算团组销售额
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="companyId"></param>
|
|
|
+ /// <param name="groupPickupUserId"></param>
|
|
|
+ /// <param name="beginDt"></param>
|
|
|
+ /// <param name="endDt"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ private async Task<SalesYOYView> GroupSales(int companyId, int groupPickupUserId, string beginDt, string endDt)
|
|
|
+ {
|
|
|
decimal thisSales = 0.00M, lastSales = 0.00M, yoy = 0.00M;
|
|
|
- if (dt.Rows.Count > 0)
|
|
|
+ string userSqlWhere = "";
|
|
|
+ if (companyId > 0) userSqlWhere += string.Format($" And CompanyId={companyId}");
|
|
|
+ if (groupPickupUserId > 0) userSqlWhere += string.Format($" And Id={groupPickupUserId}");
|
|
|
+ string sql = string.Format($@"SELECT
|
|
|
+ SUM(Sales) AS Sales
|
|
|
+FROM
|
|
|
+ (
|
|
|
+ SELECT
|
|
|
+ YEAR(di.VisitDate) AS [Year],
|
|
|
+ (
|
|
|
+ SELECT
|
|
|
+ SUM(ItemSumPrice * Rate)
|
|
|
+ FROM
|
|
|
+ Fin_ForeignReceivables
|
|
|
+ WHERE
|
|
|
+ IsDel = 0
|
|
|
+ AND AddingWay IN (0, 1, 2)
|
|
|
+ AND di.Id = Diid
|
|
|
+ ) AS Sales
|
|
|
+ FROM
|
|
|
+ Grp_DelegationInfo di
|
|
|
+ WHERE
|
|
|
+ di.IsDel = 0
|
|
|
+ AND di.JietuanOperator IN (
|
|
|
+ SELECT
|
|
|
+ Id
|
|
|
+ FROM
|
|
|
+ Sys_Users
|
|
|
+ WITH
|
|
|
+ (NoLock)
|
|
|
+ WHERE
|
|
|
+ IsDel = 0 {userSqlWhere}
|
|
|
+ )
|
|
|
+ AND di.VisitDate BETWEEN '{beginDt}' AND '{endDt}'
|
|
|
+ ) temp");
|
|
|
+
|
|
|
+ var salesData = await _sqlSugar.SqlQueryable<SalesView>(sql).FirstAsync();
|
|
|
+
|
|
|
+ thisSales = salesData?.Sales ?? 0.00M;
|
|
|
+
|
|
|
+ string lastBeginDt = Convert.ToDateTime(beginDt).AddYears(-1).ToString("yyyy-MM-dd HH:mm:ss"),
|
|
|
+ lastEndDt = Convert.ToDateTime(endDt).AddYears(-1).ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
+ string lastSql = string.Format($@"SELECT
|
|
|
+ SUM(Sales) AS Sales
|
|
|
+FROM
|
|
|
+ (
|
|
|
+ SELECT
|
|
|
+ YEAR(di.VisitDate) AS [Year],
|
|
|
+ (
|
|
|
+ SELECT
|
|
|
+ SUM(ItemSumPrice * Rate)
|
|
|
+ FROM
|
|
|
+ Fin_ForeignReceivables
|
|
|
+ WHERE
|
|
|
+ IsDel = 0
|
|
|
+ AND AddingWay IN (0, 1, 2)
|
|
|
+ AND di.Id = Diid
|
|
|
+ ) AS Sales
|
|
|
+ FROM
|
|
|
+ Grp_DelegationInfo di
|
|
|
+ WHERE
|
|
|
+ di.IsDel = 0
|
|
|
+ AND di.JietuanOperator IN (
|
|
|
+ SELECT
|
|
|
+ Id
|
|
|
+ FROM
|
|
|
+ Sys_Users
|
|
|
+ WITH
|
|
|
+ (NoLock)
|
|
|
+ WHERE
|
|
|
+ IsDel = 0 {userSqlWhere}
|
|
|
+ )
|
|
|
+ AND di.VisitDate BETWEEN '{lastBeginDt}' AND '{lastEndDt}'
|
|
|
+ ) temp");
|
|
|
+
|
|
|
+ var salesData1 = await _sqlSugar.SqlQueryable<SalesView>(lastSql).FirstAsync();
|
|
|
+ lastSales = salesData1?.Sales ?? 0.00M;
|
|
|
+
|
|
|
+ if (lastSales != 0 && thisSales != 0) yoy = (thisSales - lastSales) / lastSales;
|
|
|
+
|
|
|
+ var _view = new SalesYOYView
|
|
|
{
|
|
|
- thisSales = decimal.Parse( dt.Rows[0]["ThisSales"].ToString() ?? "0.00");
|
|
|
- lastSales = decimal.Parse(dt.Rows[0]["LastSales"].ToString() ?? "0.00");
|
|
|
- yoy = decimal.Parse(dt.Rows[0]["YOY"].ToString() ?? "0.00");
|
|
|
- }
|
|
|
+ thisSales = thisSales.ToString("#0.00"),
|
|
|
+ lastSales = lastSales.ToString("#0.00"),
|
|
|
+ yoy = yoy.ToString("#0.00")
|
|
|
+
|
|
|
+ };
|
|
|
+ return _view;
|
|
|
+ }
|
|
|
+
|
|
|
+ private class SalesView
|
|
|
+ {
|
|
|
+ public decimal Sales { get; set; }
|
|
|
+ }
|
|
|
|
|
|
- return Ok(JsonView(true, "操作成功!", new {
|
|
|
- thisYearSales = decimal.Parse(thisSales.ToString("#0.00")),
|
|
|
- lastYearSales = decimal.Parse(lastSales.ToString("#0.00")),
|
|
|
- yoy = decimal.Parse(yoy.ToString("#0.00")) }));
|
|
|
+ private class SalesYOYView
|
|
|
+ {
|
|
|
+ public string thisSales { get; set; }
|
|
|
+ public string lastSales { get; set; }
|
|
|
+ public string yoy { get; set; }
|
|
|
}
|
|
|
|
|
|
|
|
@@ -2376,9 +2466,43 @@ Order By Count Desc");
|
|
|
}
|
|
|
else return Ok(JsonView(false, "StatisticsType不在可取范围!"));
|
|
|
|
|
|
- var data = await _sqlSugar.SqlQueryable<MarketingSalesGroupStatisticsView>(sql).ToListAsync();
|
|
|
+ if (_dto.PortType == 1)
|
|
|
+ {
|
|
|
+ string sql1 = 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");
|
|
|
|
|
|
- return Ok(JsonView(true, "操作成功!", data, data.Count));
|
|
|
+
|
|
|
+ var customerTypeData = await _sqlSugar.SqlQueryable<MarketingSalesGroupStatisticsView>(sql1).ToListAsync();
|
|
|
+
|
|
|
+ string sql2 = 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");
|
|
|
+ var clientGradeData = await _sqlSugar.SqlQueryable<MarketingSalesGroupStatisticsView>(sql2).ToListAsync();
|
|
|
+ return Ok(JsonView(true, "操作成功!", new {
|
|
|
+ customerTypeData= customerTypeData,
|
|
|
+ clientGradeData = clientGradeData
|
|
|
+ }));
|
|
|
+
|
|
|
+ }
|
|
|
+ else if (_dto.PortType == 2 || _dto.PortType == 3)
|
|
|
+ {
|
|
|
+ var data = await _sqlSugar.SqlQueryable<MarketingSalesGroupStatisticsView>(sql).ToListAsync();
|
|
|
+ return Ok(JsonView(true, "操作成功!", data, data.Count));
|
|
|
+ }
|
|
|
+ else return Ok(JsonView(false, MsgTips.Port));
|
|
|
}
|
|
|
|
|
|
/// <summary>
|