|
@@ -21,6 +21,10 @@ 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;
|
|
|
+using NetTaste;
|
|
|
+using OASystem.Domain.ViewModels.QiYeWeChat;
|
|
|
+using NPOI.POIFS.Crypt.Dsig;
|
|
|
|
|
|
namespace OASystem.API.Controllers
|
|
|
{
|
|
@@ -37,6 +41,7 @@ namespace OASystem.API.Controllers
|
|
|
private readonly DelegationInfoRepository _groupRep;
|
|
|
private readonly SetDataRepository _setDataRep;
|
|
|
private readonly TeamRateRepository _teamRateRep;
|
|
|
+ private readonly VisitingClientsRepository _visitingClientsRep;
|
|
|
|
|
|
/// <summary>
|
|
|
/// Init
|
|
@@ -45,16 +50,16 @@ namespace OASystem.API.Controllers
|
|
|
/// <param name="sqlSugar"></param>
|
|
|
/// <param name="groupRep"></param>
|
|
|
/// <param name="setDataRep"></param>
|
|
|
- public StatisticsController(IMapper mapper, SqlSugarClient sqlSugar, DelegationInfoRepository groupRep, SetDataRepository setDataRep, TeamRateRepository teamRate)
|
|
|
+ public StatisticsController(IMapper mapper, SqlSugarClient sqlSugar, DelegationInfoRepository groupRep, SetDataRepository setDataRep, TeamRateRepository teamRate, VisitingClientsRepository visitingClientsRep)
|
|
|
{
|
|
|
_mapper = mapper;
|
|
|
_groupRep = groupRep;
|
|
|
_setDataRep = setDataRep;
|
|
|
_sqlSugar = sqlSugar;
|
|
|
_teamRateRep = teamRate;
|
|
|
+ _visitingClientsRep = visitingClientsRep;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
#region 团组报表
|
|
|
|
|
|
/// <summary>
|
|
@@ -217,8 +222,8 @@ namespace OASystem.API.Controllers
|
|
|
* 超支费用
|
|
|
*/
|
|
|
decimal exTotalAmount = 0.00M;
|
|
|
- string _ecSql = string.Format(@"Select gec.Id As GECId,gec.DiId As GECDiId,gec.PriceName,ccp.PayMoney,sd1.Name As PaymentCurrency,
|
|
|
- ccp.RMBPrice As CNYPrice,ccp.DayRate,ccp.Payee,ccp.OrbitalPrivateTransfer,sd2.Name As PayWay,
|
|
|
+ string _ecSql = string.Format(@"Select gec.Id As GECId,gec.DiId As GECDiId,gec.PriceName,(gec.PriceSum * gec.Coefficient) As PayMoney,sd1.Name As PaymentCurrency,
|
|
|
+ (gec.PriceSum * gec.Coefficient * ccp.DayRate) As CNYPrice,ccp.DayRate,ccp.Payee,ccp.OrbitalPrivateTransfer,sd2.Name As PayWay,
|
|
|
sd3.Name As CardType,ccp.IsPay,u.CnName As Applicant,gec.CreateTime
|
|
|
From OA2023DB.dbo.Fin_GroupExtraCost gec
|
|
|
Left Join Grp_CreditCardPayment ccp On gec.Id = ccp.CId
|
|
@@ -419,26 +424,67 @@ namespace OASystem.API.Controllers
|
|
|
|
|
|
groupHotelFeeViews = await _sqlSugar.SqlQueryable<GroupHotelFeeView>(hotelFeeSql).ToListAsync();
|
|
|
|
|
|
+ List<int> hotelSubIds = groupHotelFeeViews.Select(it => it.HrId).ToList();
|
|
|
+ List<Grp_HotelReservationsContent> groupHotelContentFeeViews = new List<Grp_HotelReservationsContent>();
|
|
|
+ groupHotelContentFeeViews = await _sqlSugar.Queryable<Grp_HotelReservationsContent>().Where(it => hotelSubIds.Contains(it.HrId)).ToListAsync();
|
|
|
+
|
|
|
decimal HotelCNYTotalPrice = 0.00M;
|
|
|
|
|
|
var teamRateData = await _teamRateRep.PostGroupRateInfoByDiId(_dto.DiId);
|
|
|
foreach (var item in groupHotelFeeViews)
|
|
|
{
|
|
|
- HotelCNYTotalPrice += item.CNYPrice;
|
|
|
+ var roomData = groupHotelContentFeeViews.Find(it => it.HrId == item.HrId && it.PriceType == 1); //房费
|
|
|
+ item.RoomPrice = roomData?.Price ?? 0.00M;
|
|
|
+ item.RoomPriceCurrency = _setDatas.Find(it => it.Id == roomData?.Currency)?.Name;
|
|
|
+ string feeMark1 = roomData?.OrbitalPrivateTransfer == 0 ? "公转" : "私转";
|
|
|
+ string isFeeMark1 = roomData?.IsOppay == 1 ? "是" : "否";
|
|
|
+ item.RoomInfoTips = @$"当时汇率:{roomData?.Rate.ToString("#0.0000")} <br/>
|
|
|
+ 收款方:{roomData?.Payee}<br/>
|
|
|
+ 费用标识:{feeMark1} <br/>
|
|
|
+ 支付方式:{_setDatas.Find(it => it.Id == roomData?.PayDId)?.Name} <br/>
|
|
|
+ 卡类型:{_setDatas.Find(it => it.Id == roomData?.CTDId)?.Name}
|
|
|
+ 是否由地接支付:{isFeeMark1} <br/>";
|
|
|
+
|
|
|
+ var breakfastData = groupHotelContentFeeViews.Find(it => it.HrId == item.HrId && it.PriceType == 2); //早餐
|
|
|
+ item.BreakfastPrice = breakfastData?.Price ?? 0.00M;
|
|
|
+ item.BreakfastCurrency = _setDatas.Find(it => it.Id == breakfastData?.Currency)?.Name;
|
|
|
+ string feeMark2 = breakfastData?.OrbitalPrivateTransfer == 0 ? "公转" : "私转";
|
|
|
+ string isFeeMark2 = breakfastData?.IsOppay == 1 ? "是" : "否";
|
|
|
+ item.BreakfastInfoTips = @$"当时汇率:{breakfastData?.Rate.ToString("#0.0000")} <br/>
|
|
|
+ 收款方:{breakfastData?.Payee}<br/>
|
|
|
+ 费用标识:{feeMark2} <br/>
|
|
|
+ 支付方式:{_setDatas.Find(it => it.Id == roomData?.PayDId)?.Name} <br/>
|
|
|
+ 卡类型:{_setDatas.Find(it => it.Id == roomData?.CTDId)?.Name} <br/>
|
|
|
+ 是否由地接支付:{isFeeMark2} <br/>";
|
|
|
+
|
|
|
+ var landTaxData = groupHotelContentFeeViews.Find(it => it.HrId == item.HrId && it.PriceType == 3); //地税
|
|
|
+ item.GovernmentRent = landTaxData?.Price ?? 0.00M;
|
|
|
+ item.GovernmentRentCurrency = _setDatas.Find(it => it.Id == landTaxData?.Currency)?.Name;
|
|
|
+ string feeMark3 = landTaxData?.OrbitalPrivateTransfer == 0 ? "公转" : "私转";
|
|
|
+ string isFeeMark3 = landTaxData?.IsOppay == 1 ? "是" : "否";
|
|
|
+ item.GovernmentRentTips = @$"当时汇率:{landTaxData?.Rate.ToString("#0.0000")} <br/>
|
|
|
+ 收款方:{landTaxData?.Payee}<br/>
|
|
|
+ 费用标识:{feeMark3} <br/>
|
|
|
+ 支付方式:{_setDatas.Find(it => it.Id == landTaxData?.PayDId)?.Name} <br/>
|
|
|
+ 卡类型:{_setDatas.Find(it => it.Id == landTaxData?.CTDId)?.Name} <br/>
|
|
|
+ 是否由地接支付:{isFeeMark3} <br/>";
|
|
|
+
|
|
|
+ var cityTaxData = groupHotelContentFeeViews.Find(it => it.HrId == item.HrId && it.PriceType == 4); //城市税
|
|
|
+ item.CityTax = cityTaxData?.Price ?? 0.00M;
|
|
|
+ item.CityTaxCurrency = _setDatas.Find(it => it.Id == cityTaxData?.Currency)?.Name;
|
|
|
+ string feeMark4 = cityTaxData?.OrbitalPrivateTransfer == 0 ? "公转" : "私转";
|
|
|
+ string isFeeMark4 = landTaxData?.IsOppay == 1 ? "是" : "否";
|
|
|
+ item.CityTaxTips = @$"当时汇率:{cityTaxData?.Rate.ToString("#0.0000")} <br/>
|
|
|
+ 收款方:{cityTaxData?.Payee}<br/>
|
|
|
+ 费用标识:{feeMark4} <br/>
|
|
|
+ 支付方式:{_setDatas.Find(it => it.Id == cityTaxData?.PayDId)?.Name} <br/>
|
|
|
+ 卡类型:{_setDatas.Find(it => it.Id == cityTaxData?.CTDId)?.Name} <br/>
|
|
|
+ 是否由地接支付:{isFeeMark4} <br/>";
|
|
|
|
|
|
+ HotelCNYTotalPrice += item.CNYPrice;
|
|
|
item.PayMoney = item.PayMoney.ConvertToDecimal1();
|
|
|
item.CNYPrice = item.CNYPrice.ConvertToDecimal1();
|
|
|
|
|
|
- string currencyRateStr = "";
|
|
|
- List<string> currencys = new List<string>();
|
|
|
- if (!string.IsNullOrEmpty(item.BreakfastCurrency)) currencys.Add(item.BreakfastCurrency);
|
|
|
- if (!string.IsNullOrEmpty(item.GovernmentRentCurrency)) currencys.Add(item.GovernmentRentCurrency);
|
|
|
- if (!string.IsNullOrEmpty(item.CityTaxCurrency)) currencys.Add(item.CityTaxCurrency);
|
|
|
- if (!string.IsNullOrEmpty(item.PaymentCurrency)) currencys.Add(item.PaymentCurrency);
|
|
|
-
|
|
|
- currencyRateStr = await GeneralMethod.PostGroupRateByCTableAndCurrency(teamRateData, 76, currencys);
|
|
|
-
|
|
|
- item.CurrencyRateStr = currencyRateStr;
|
|
|
}
|
|
|
|
|
|
_geView.GroupHotelFeeViews = groupHotelFeeViews;
|
|
@@ -1128,7 +1174,6 @@ namespace OASystem.API.Controllers
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
-
|
|
|
#region 报表/折线图统计
|
|
|
//企业利润-团组利润
|
|
|
//企业利润-会务利润
|
|
@@ -1991,5 +2036,712 @@ namespace OASystem.API.Controllers
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
+ #region 市场部销售额
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 市场部销售额
|
|
|
+ /// Init 基础数据(公司/人员/年份/季度/月份)
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="_dto">市场部销售额请求dto</param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost("PostMarketingSalesInitData")]
|
|
|
+ [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
|
|
|
+ public async Task<IActionResult> PostMarketingSalesInitData(MarketingSalesInitDataDto _dto)
|
|
|
+ {
|
|
|
+ #region 参数验证
|
|
|
+ MarketingSalesInitDataDtoFoalidator validationRules = new MarketingSalesInitDataDtoFoalidator();
|
|
|
+ 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
|
|
|
+
|
|
|
+
|
|
|
+ var companyData = _sqlSugar.Queryable<Sys_Company>().Where(it => it.IsDel == 0)
|
|
|
+ .Select(it => new { id = it.Id, name = it.CompanyName })
|
|
|
+ .ToList();
|
|
|
+ List<int> companyIds = companyData.Select(it => it.id).ToList();
|
|
|
+
|
|
|
+ List<int> pickGroupUserIds = _sqlSugar.Queryable<Grp_DelegationInfo>().Where(it => it.IsDel == 0)
|
|
|
+ .Select(it => it.JietuanOperator )
|
|
|
+ .ToList();
|
|
|
+
|
|
|
+ //var jobData = _sqlSugar.Queryable<Sys_JobPost>().Where(it => it.IsDel == 0 && companyIds.Contains(it.CompanyId) && (it.JobName.Contains("经理") || it.JobName.Contains("主管")))
|
|
|
+ // .Select(it => new { it.Id, it.CompanyId, it.DepId, it.JobName })
|
|
|
+ // .ToList();
|
|
|
+ //List<int> jobIds = jobData.Select(it => it.Id).ToList();
|
|
|
+ //(depIds.Contains(it.DepId) || jobIds.Contains(it.JobPostId)
|
|
|
+ //userId = 21
|
|
|
+ var userData = _sqlSugar.Queryable<Sys_Users>().Where(it => it.IsDel == 0 && (pickGroupUserIds.Contains(it.Id) || it.Id == 21))
|
|
|
+ .Select(it => new { id = it.Id, companyId = it.CompanyId, name = it.CnName })
|
|
|
+ .ToList();
|
|
|
+
|
|
|
+ companyData.Insert(0, new { id = -1, name = "全部" });
|
|
|
+ userData.Insert(0, new { id = -1, companyId = -1, name = "全部" });
|
|
|
+
|
|
|
+ #region 年份
|
|
|
+
|
|
|
+ var dtData = new List<dynamic>();
|
|
|
+ int dt = DateTime.Now.Year;
|
|
|
+ for (int y = dt; y >= dt-4; y--)
|
|
|
+ {
|
|
|
+ //季度
|
|
|
+ var quarterDatas = new List<dynamic>();
|
|
|
+ quarterDatas.Add(new { name = "全部", beginDt = $"{y}-01-01", endDt = $"{y}-12-31" });
|
|
|
+ for (int q = 0; q < 4; q++)
|
|
|
+ {
|
|
|
+ dynamic quarterData = null;
|
|
|
+ if (q == 0)
|
|
|
+ {
|
|
|
+ var monthDatas = new List<dynamic>();
|
|
|
+ monthDatas.Add(new { name = $"全部", beginDt = $"{y}-01-01", endDt = $" {y}-03-31" });
|
|
|
+ for (int m = 1; m < 4; m++)
|
|
|
+ {
|
|
|
+ MonthlyTimeSegment timeSegment = new MonthlyTimeSegment(y, m);
|
|
|
+ monthDatas.Add(new { name = $"{ConvertToChinese(m)}", beginDt = timeSegment.Start.ToString("yyyy-MM-dd"), endDt = timeSegment.End.ToString("yyyy-MM-dd") });
|
|
|
+ }
|
|
|
+ //quarterData = new { name = "第一季度", beginDt = $"{y}-01-01", endDt = $" {y}-03-31", monthData = monthDatas };
|
|
|
+ quarterData = new { name = "第一季度", monthData = monthDatas };
|
|
|
+ }
|
|
|
+ else if (q == 1)
|
|
|
+ {
|
|
|
+ var monthDatas = new List<dynamic>();
|
|
|
+ monthDatas.Add(new { name = $"全部", beginDt = $"{y}-04-01", endDt = $"{y}-06-30" });
|
|
|
+ for (int m = 4; m < 7; m++)
|
|
|
+ {
|
|
|
+ MonthlyTimeSegment timeSegment = new MonthlyTimeSegment(y, m);
|
|
|
+ monthDatas.Add(new { name = $"{ConvertToChinese(m)}", beginDt = timeSegment.Start.ToString("yyyy-MM-dd"), endDt = timeSegment.End.ToString("yyyy-MM-dd") });
|
|
|
+ }
|
|
|
+
|
|
|
+ //quarterData = new { name = "第二季度", beginDt = $"{y}-04-01", endDt = $"{y}-06-30", monthData = monthDatas };
|
|
|
+ quarterData = new { name = "第二季度", monthData = monthDatas };
|
|
|
+ }
|
|
|
+ else if (q == 2)
|
|
|
+ {
|
|
|
+ var monthDatas = new List<dynamic>();
|
|
|
+ monthDatas.Add(new { name = $"全部", beginDt = $"{y}-07-01", endDt = $"{y}-09-30" });
|
|
|
+ for (int m = 7; m < 10; m++)
|
|
|
+ {
|
|
|
+ MonthlyTimeSegment timeSegment = new MonthlyTimeSegment(y, m);
|
|
|
+ monthDatas.Add(new { name = $"{ConvertToChinese(m)}", beginDt = timeSegment.Start.ToString("yyyy-MM-dd"), endDt = timeSegment.End.ToString("yyyy-MM-dd") });
|
|
|
+ }
|
|
|
+ //quarterData = new { name = "第三季度", beginDt = $"{y}-07-01", endDt = $"{y}-09-30", monthData = monthDatas };
|
|
|
+ quarterData = new { name = "第三季度", monthData = monthDatas };
|
|
|
+ }
|
|
|
+ else if (q == 3)
|
|
|
+ {
|
|
|
+ var monthDatas = new List<dynamic>();
|
|
|
+ monthDatas.Add(new { name = $"全部", beginDt = $"{y}-10-01", endDt = $"{y}-12-31" });
|
|
|
+ for (int m = 10; m < 13; m++)
|
|
|
+ {
|
|
|
+ MonthlyTimeSegment timeSegment = new MonthlyTimeSegment(y, m);
|
|
|
+ monthDatas.Add(new { name = $"{ConvertToChinese(m)}", beginDt = timeSegment.Start.ToString("yyyy-MM-dd"), endDt = timeSegment.End.ToString("yyyy-MM-dd") });
|
|
|
+ }
|
|
|
+ //quarterData = new { name = "第四季度", beginDt = $"{y}-10-01", endDt = $"{y}-12-31", monthData = monthDatas };
|
|
|
+ quarterData = new { name = "第四季度", monthData = monthDatas };
|
|
|
+ }
|
|
|
+ quarterDatas.Add(quarterData);
|
|
|
+ }
|
|
|
+
|
|
|
+ dtData.Add(new
|
|
|
+ {
|
|
|
+ year = y,
|
|
|
+ //yearData = new { beginDt = $"{y}-01-01", endDt = $"{y}-12-31" },
|
|
|
+ quarterData = quarterDatas,
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ return Ok(JsonView(true, "操作成功!", new { companyData = companyData, userData = userData, dtData = dtData }));
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ private static string ConvertToChinese(int month)
|
|
|
+ {
|
|
|
+ if (month < 1 || month > 12)
|
|
|
+ throw new ArgumentOutOfRangeException(nameof(month), "月份必须在1到12之间。");
|
|
|
+
|
|
|
+ var cultureInfo = new System.Globalization.CultureInfo("zh-CN");
|
|
|
+ var dateTimeFormat = cultureInfo.DateTimeFormat;
|
|
|
+ return dateTimeFormat.GetMonthName(month);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 市场部销售额
|
|
|
+ /// 年度/季度/月度 报表(同比)
|
|
|
+ /// (增加团组查询条件 IsSure=1)
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="_dto">市场部销售额请求dto</param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost("PostMarketingSalesStatistics")]
|
|
|
+ [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
|
|
|
+ public async Task<IActionResult> PostMarketingSalesStatistics_Year(MarketingSalesStatisticsDto _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";
|
|
|
+
|
|
|
+ return Ok(JsonView(true, "操作成功!", await GroupSales(_dto.CompanyId, _dto.GroupPickupUserId, beginDt, endDt)));
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private async Task<List<int>> GetUserIds(int companyId, int groupPickupUserId)
|
|
|
+ {
|
|
|
+ //全部人员Id
|
|
|
+ //查询所有公司的市场部
|
|
|
+ List<int> pickGroupIds = _sqlSugar.Queryable<Grp_DelegationInfo>().Where(it => it.IsDel == 0).Select(it => it.JietuanOperator).Distinct().ToList();
|
|
|
+ List<int> userIds = new List<int>();
|
|
|
+ var userDatas = await _sqlSugar.Queryable<Sys_Users>()
|
|
|
+ .InnerJoin<Sys_Company>((u, c) => u.CompanyId == c.Id)
|
|
|
+ .Where((u, c) => u.IsDel == 0 && pickGroupIds.Contains( u.Id))
|
|
|
+ .Select((u, c) => new { u.Id, u.CompanyId, u.CnName })
|
|
|
+ .ToListAsync();
|
|
|
+
|
|
|
+ userIds = userDatas.Select(it => it.Id).ToList();
|
|
|
+ if (companyId > 0)
|
|
|
+ {
|
|
|
+ userIds = userDatas.Where(it => it.CompanyId == companyId).Select(it => it.Id).ToList();
|
|
|
+ }
|
|
|
+ if (groupPickupUserId > 0)
|
|
|
+ {
|
|
|
+ userIds = userDatas.Where(it => it.Id == groupPickupUserId).Select(it => it.Id).ToList();
|
|
|
+ }
|
|
|
+
|
|
|
+ return userIds;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <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 = 1.00M;
|
|
|
+ var _view = new SalesYOYView();
|
|
|
+ List<int> userIds = new List<int>();
|
|
|
+ userIds = await GetUserIds(companyId, groupPickupUserId);
|
|
|
+ string userSqlWhere = "";
|
|
|
+ if (userIds.Count > 0)
|
|
|
+ {
|
|
|
+ userSqlWhere = string.Format($" And Id IN ({string.Join(',', userIds)})");
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ string sql = string.Format($@"SELECT
|
|
|
+ CAST(SUM(Sales) AS decimal(12,2)) AS Sales
|
|
|
+FROM
|
|
|
+ (
|
|
|
+ SELECT
|
|
|
+ YEAR(di.VisitDate) AS [Year],
|
|
|
+ (
|
|
|
+ SELECT
|
|
|
+ CAST(SUM(ItemSumPrice * Rate) AS decimal(12,2))
|
|
|
+ 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.IsSure = 1
|
|
|
+ AND di.JietuanOperator IN (
|
|
|
+ SELECT
|
|
|
+ Id
|
|
|
+ FROM
|
|
|
+ Sys_Users
|
|
|
+ WITH
|
|
|
+ (NoLock)
|
|
|
+ WHERE
|
|
|
+ IsDel = 0 {userSqlWhere}
|
|
|
+ )
|
|
|
+ AND di.VisitDate BETWEEN '{beginDt}' AND '{endDt}'
|
|
|
+ ) temp");
|
|
|
+
|
|
|
+ var newDB = _sqlSugar.CopyNew();
|
|
|
+ var salesData = newDB.SqlQueryable<SalesView>(sql).First();
|
|
|
+
|
|
|
+ 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
|
|
|
+ CAST(SUM(Sales) AS decimal(12,2)) AS Sales
|
|
|
+FROM
|
|
|
+ (
|
|
|
+ SELECT
|
|
|
+ YEAR(di.VisitDate) AS [Year],
|
|
|
+ (
|
|
|
+ SELECT
|
|
|
+ CAST(SUM(ItemSumPrice * Rate) AS decimal(12,2))
|
|
|
+ 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.IsSure = 1
|
|
|
+ AND di.JietuanOperator IN (
|
|
|
+ SELECT
|
|
|
+ Id
|
|
|
+ FROM
|
|
|
+ Sys_Users
|
|
|
+ WITH
|
|
|
+ (NoLock)
|
|
|
+ WHERE
|
|
|
+ IsDel = 0 {userSqlWhere}
|
|
|
+ )
|
|
|
+ AND di.Issure = 1
|
|
|
+ AND di.VisitDate BETWEEN '{lastBeginDt}' AND '{lastEndDt}'
|
|
|
+ ) temp");
|
|
|
+
|
|
|
+ var salesData1 = newDB.SqlQueryable<SalesView>(lastSql).First();
|
|
|
+ lastSales = salesData1?.Sales ?? 0.00M;
|
|
|
+
|
|
|
+ if (lastSales != 0 && thisSales != 0) yoy = (thisSales - lastSales) / lastSales;
|
|
|
+
|
|
|
+ _view = new SalesYOYView
|
|
|
+ {
|
|
|
+ thisYearSales = thisSales.ToString("#0.00"),
|
|
|
+ lastYearSales = lastSales.ToString("#0.00"),
|
|
|
+ yoy = yoy.ToString("#0.00")
|
|
|
+
|
|
|
+ };
|
|
|
+ return _view;
|
|
|
+ }
|
|
|
+
|
|
|
+ private class SalesView
|
|
|
+ {
|
|
|
+ public decimal Sales { get; set; }
|
|
|
+ }
|
|
|
+
|
|
|
+ private class SalesYOYView
|
|
|
+ {
|
|
|
+ public string thisYearSales { get; set; }
|
|
|
+ public string lastYearSales { get; set; }
|
|
|
+ public string yoy { get; set; }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 市场部销售额
|
|
|
+ /// 团组列表
|
|
|
+ /// (增加团组查询条件 IsSure=1)
|
|
|
+ /// </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();
|
|
|
+
|
|
|
+ #region 页面操作权限验证
|
|
|
+ pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(_dto.UserId, _dto.PageId);
|
|
|
+
|
|
|
+ if (pageFunAuthView.CheckAuth == 0) return Ok(JsonView(false, MsgTips.CheckAuth));
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ string userSql = "";
|
|
|
+ List<int> userIds = new List<int>();
|
|
|
+ userIds = await GetUserIds(_dto.CompanyId, _dto.GroupPickupUserId);
|
|
|
+
|
|
|
+ if (userIds.Count > 0)
|
|
|
+ {
|
|
|
+ userSql = @$" And di.JietuanOperator In ({string.Join(",",userIds)})";
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!string.IsNullOrEmpty(_dto.SearchCriteria))
|
|
|
+ {
|
|
|
+ userSql += string.Format(@$" AND di.TeamName Like '%{_dto.SearchCriteria}%'");
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ 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.VisitPNumber,
|
|
|
+ di.JietuanOperator,
|
|
|
+ di.VisitEndDate,
|
|
|
+ (
|
|
|
+ SELECT
|
|
|
+ CAST(
|
|
|
+ COALESCE(SUM(ItemSumPrice * Rate), 0) AS DECIMAL(12, 2)
|
|
|
+ ) AS GroupSales
|
|
|
+ FROM
|
|
|
+ Fin_ForeignReceivables
|
|
|
+ WHERE
|
|
|
+ IsDel = 0
|
|
|
+ AND di.Id = Diid
|
|
|
+ AND AddingWay IN (0, 1, 2)
|
|
|
+ ) AS GroupSales,
|
|
|
+ u.CnName AS GroupPickupUser,
|
|
|
+ DATEADD(DAY, 7, di.VisitEndDate) AS CollectionDays
|
|
|
+ FROM
|
|
|
+ Grp_DelegationInfo di
|
|
|
+ WITH
|
|
|
+ (NoLock)
|
|
|
+ LEFT JOIN Sys_Users u ON di.JietuanOperator = u.Id
|
|
|
+ WHERE
|
|
|
+ di.Isdel = 0
|
|
|
+ AND di.IsSure = 1 {userSql}
|
|
|
+ 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 参数验证
|
|
|
+
|
|
|
+ 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";
|
|
|
+ List<int> userIds = await GetUserIds(_dto.CompanyId, _dto.GroupPickupUserId);
|
|
|
+
|
|
|
+ string userSql = "";
|
|
|
+ if (userIds.Count > 0)
|
|
|
+ {
|
|
|
+ userSql = string.Format(@$" AND JietuanOperator IN ({string.Join(",",userIds)})");
|
|
|
+ }
|
|
|
+
|
|
|
+ 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 IsSure = 1 {userSql}
|
|
|
+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 IsSure = 1 {userSql}
|
|
|
+And VisitDate Between '{beginDt}' And '{endDt}'
|
|
|
+Group By [Name]
|
|
|
+Order By Count Desc");
|
|
|
+ }
|
|
|
+ else return Ok(JsonView(false, "StatisticsType不在可取范围!"));
|
|
|
+
|
|
|
+ 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 IsSure = 1 {userSql}
|
|
|
+And VisitDate Between '{beginDt}' And '{endDt}'
|
|
|
+Group By [Name]
|
|
|
+Order By Count Desc");
|
|
|
+
|
|
|
+
|
|
|
+ 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 IsSure = 1 {userSql}
|
|
|
+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>
|
|
|
+ /// 市场部销售额
|
|
|
+ /// 接单排名
|
|
|
+ /// </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";
|
|
|
+
|
|
|
+ List<int> userIds = await GetUserIds(_dto.CompanyId, _dto.GroupPickupUserId);
|
|
|
+
|
|
|
+ string userSql = "";
|
|
|
+ if (userIds.Count > 0)
|
|
|
+ {
|
|
|
+ userSql = string.Format(@$" AND JietuanOperator IN ({string.Join(",", userIds)})");
|
|
|
+ }
|
|
|
+
|
|
|
+ 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 IsSure = 1 {userSql}
|
|
|
+ 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));
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 市场部销售额
|
|
|
+ /// 客户拜访列表
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="_dto">市场部销售额请求dto</param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost("PostMarketingSalesVCList")]
|
|
|
+ [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
|
|
|
+ public async Task<IActionResult> PostMarketingSalesVCList(MarketingSalesVCListDto _dto)
|
|
|
+ {
|
|
|
+ #region 参数验证
|
|
|
+ MarketingSalesUserPageFuncDtoBaseFoalidator validationRules = new MarketingSalesUserPageFuncDtoBaseFoalidator();
|
|
|
+ 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
|
|
|
+ return Ok(await _visitingClientsRep._List(_dto.PortType,_dto.PageIndex,_dto.PageIndex,_dto.DiId,_dto.Search));
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 市场部销售额
|
|
|
+ /// 客户拜访 操作(添加 Or 编辑)
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="_dto">市场部销售额请求dto</param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost("PostMarketingSalesVCOperate")]
|
|
|
+ [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
|
|
|
+ public async Task<IActionResult> PostMarketingSalesVCOperate(MarketingSalesVCOperrateDto _dto)
|
|
|
+ {
|
|
|
+ #region 参数验证
|
|
|
+ MarketingSalesUserPageFuncDtoBaseFoalidator validationRules = new MarketingSalesUserPageFuncDtoBaseFoalidator();
|
|
|
+ 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
|
|
|
+ return Ok(await _visitingClientsRep._AddOrEdit(_dto));
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 市场部销售额
|
|
|
+ /// 客户拜访 Del
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="_dto">市场部销售额请求dto</param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost("PostMarketingSalesVCDel")]
|
|
|
+ [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
|
|
|
+ public async Task<IActionResult> PostMarketingSalesVCDel(MarketingSalesVCDelDto _dto)
|
|
|
+ {
|
|
|
+
|
|
|
+ return Ok(await _visitingClientsRep._Del(_dto.Id,_dto.UserId));
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 市场部销售额
|
|
|
+ /// 客户拜访 操作 save
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="_dto">市场部销售额请求dto</param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost("PostMarketingSalesVCSave")]
|
|
|
+ [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
|
|
|
+ public async Task<IActionResult> PostMarketingSalesVCSave(MarketingSalesVCSaveDto _dto)
|
|
|
+ {
|
|
|
+ #region 参数验证
|
|
|
+ MarketingSalesUserPageFuncDtoBaseFoalidator validationRules = new MarketingSalesUserPageFuncDtoBaseFoalidator();
|
|
|
+ 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
|
|
|
+ return Ok(await _visitingClientsRep._Save(_dto));
|
|
|
+ }
|
|
|
+
|
|
|
+ #endregion
|
|
|
}
|
|
|
}
|