Browse Source

销售额页面新增接口

leiy 8 months ago
parent
commit
3ea444c8f9

+ 19 - 23
OASystem/OASystem.Api/Controllers/GroupsController.cs

@@ -74,6 +74,7 @@ using NPOI.XSSF.Model;
 using NetTaste;
 using Microsoft.AspNetCore.Http;
 using EyeSoft.Collections.Generic;
+using K4os.Compression.LZ4.Internal;
 
 namespace OASystem.API.Controllers
 {
@@ -9974,13 +9975,21 @@ ORDER by  gctggrc.id DESC
 
             string guestNames = ""; //格式Mr.xxx Ms.xxx
             List<HotelReservations_PCFD_View> pcfds = new List<HotelReservations_PCFD_View>();
-
+            var hotelSubData = _sqlSugar.Queryable<Grp_HotelReservationsContent>().Where(it => it.IsDel == 0 && it.DiId == _dto.DiId).ToList();
+            var ccpData = _sqlSugar.Queryable<Grp_CreditCardPayment>().Where(it => it.IsDel == 0 && it.DIId == _dto.DiId && it.CTable == 76).ToList();
             #region 数据处理
 
             foreach (var item in hrDtas)
             {
-                var ccpInfo = _sqlSugar.Queryable<Grp_CreditCardPayment>().Where(it => it.DIId == _dto.DiId && it.CId == item.Id).First();
-                string roomCurr = currDatas.Find(it => it.Id == ccpInfo.PaymentCurrency)?.Name ?? "";
+                var ccpInfo = ccpData.Where(it => it.DIId == _dto.DiId && it.CId == item.Id).First();
+
+                var roomInfo = hotelSubData.Where(it => it.HrId == item.Id && it.PriceType == 1).FirstOrDefault(); //房费
+                var breakfastInfo = hotelSubData.Where(it => it.HrId == item.Id && it.PriceType == 2).FirstOrDefault(); //早餐
+                var governmentRentInfo = hotelSubData.Where(it => it.HrId == item.Id && it.PriceType == 3).FirstOrDefault(); //地税
+                var cityTaxInfo = hotelSubData.Where(it => it.HrId == item.Id && it.PriceType == 4).FirstOrDefault(); //城市税
+
+
+                string roomCurr = currDatas.Find(it => it.Id == roomInfo.Currency)?.Name ?? "";
 
                 string singleRoomFeeStr = string.Empty,
                        doubleRoomFeeStr = string.Empty,
@@ -10013,22 +10022,9 @@ ORDER by  gctggrc.id DESC
                        cityTaxStrStr = string.Empty,
                        cityTaxStrCurrency = currDatas.Find(it => it.Id == item.CityTaxCurrency)?.Name ?? "";
 
-                //if (breakfastCurrency.Equals(_currency))
-                //{
-                //    breakfastPriceStr = $"{item.BreakfastPrice.ToString("#0.00")} ({_currency})";
-                //}
-                //if (governmentRentCurrency.Equals(_currency))
-                //{
-                //    governmentRentStr = $"{item.GovernmentRent.ToString("#0.00")} ({_currency})";
-                //}
-                //if (cityTaxStrCurrency.Equals(_currency))
-                //{
-                //    cityTaxStrStr = $"{item.CityTax.ToString("#0.00")} ({_currency})";
-                //}
-
-                breakfastPriceStr = $"{item.BreakfastPrice.ToString("#0.00")} {_currency}";
-                governmentRentStr = $"{item.GovernmentRent.ToString("#0.00")} {_currency}";
-                cityTaxStrStr = $"{item.CityTax.ToString("#0.00")} {_currency}";
+                breakfastPriceStr = $"{breakfastInfo?.Price.ToString("#0.00")} {currDatas.Find(it => it.Id == breakfastInfo?.Currency)?.Name}";
+                governmentRentStr = $"{governmentRentInfo?.Price.ToString("#0.00")} {currDatas.Find(it => it.Id == governmentRentInfo?.Currency)?.Name}";
+                cityTaxStrStr = $"{cityTaxInfo?.Price.ToString("#0.00")} {currDatas.Find(it => it.Id == cityTaxInfo?.Currency)?.Name}";
 
                 pcfds.Add(new HotelReservations_PCFD_View()
                 {
@@ -10049,12 +10045,12 @@ ORDER by  gctggrc.id DESC
                     CityTax = cityTaxStrStr,
 
                     RoomExplanation = item.RoomExplanation,
-                    PayTypeName = _sqlSugar.Queryable<Sys_SetData>().Where(it => it.Id == ccpInfo.PayDId).First()?.Name ?? "",
-                    PayTime = ccpInfo.ConsumptionDate,
-                    BankNo = ccpInfo.BankNo,
+                    PayTypeName = _sqlSugar.Queryable<Sys_SetData>().Where(it => it.Id == roomInfo.PayDId).First()?.Name ?? "",
+                    PayTime = roomInfo.ConsumptionDate,
+                    BankNo = roomInfo.BankNo,
                     PayMoney = payMoneyStr,
                     //PayMoneys = ccpInfo.PayMoney.ToString("#0.00"),
-                    ConsumptionPatterns = ccpInfo.ConsumptionPatterns,
+                    ConsumptionPatterns = roomInfo.ConsumptionPatterns,
                     CardPrice = cardPriceStr,
                     Remark = ccpInfo.Remark
 

+ 94 - 43
OASystem/OASystem.Api/Controllers/StatisticsController.cs

@@ -60,7 +60,6 @@ namespace OASystem.API.Controllers
             _visitingClientsRep = visitingClientsRep;
         }
 
-
         #region 团组报表
 
         /// <summary>
@@ -2073,20 +2072,18 @@ namespace OASystem.API.Controllers
                                        .Select(it => new { id = it.Id, name = it.CompanyName })
                                        .ToList();
             List<int> companyIds = companyData.Select(it => it.id).ToList();
-            //查询所有公司的市场部
-            var depData = _sqlSugar.Queryable<Sys_Department>().Where(it => it.IsDel == 0 && companyIds.Contains(it.CompanyId) && it.DepName.Contains("市场部"))
-                                   .Select(it => new { it.Id, it.CompanyId, it.DepName })
-                                   .ToList();
-            List<int> depIds = depData.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 && (depIds.Contains(it.DepId) || it.Id==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();
 
@@ -2219,6 +2216,32 @@ namespace OASystem.API.Controllers
             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>
@@ -2227,14 +2250,19 @@ namespace OASystem.API.Controllers
         /// <param name="beginDt"></param>
         /// <param name="endDt"></param>
         /// <returns></returns>
-        private async Task<SalesYOYView> GroupSales(int companyId, int groupPickupUserId, string beginDt, string endDt)
+        private async Task<SalesYOYView> GroupSales(int companyId, int groupPickupUserId,string beginDt, string endDt)
         {
-            decimal thisSales = 0.00M, lastSales = 0.00M, yoy = 0.00M;
+            decimal thisSales = 0.00M, lastSales = 0.00M, yoy = 1.00M;
             var _view = new SalesYOYView();
-            //团组查询条件增加 isSure=1
+            List<int> userIds = new List<int>();
+            userIds = await GetUserIds(companyId, groupPickupUserId);
             string userSqlWhere = "";
-            if (companyId > 0) userSqlWhere += string.Format($" And CompanyId={companyId}");
-            if (groupPickupUserId > 0) userSqlWhere += string.Format($" And Id={groupPickupUserId}");
+            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
@@ -2307,18 +2335,13 @@ FROM
         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 < 1 || thisSales < 1)
-            {
-                thisSales = 1.00M;
-                lastSales = 1.00M;
-            }
-
             if (lastSales != 0 && thisSales != 0) yoy = (thisSales - lastSales) / lastSales;
 
             _view = new SalesYOYView
@@ -2378,30 +2401,7 @@ FROM
 
             string userSql = "";
             List<int> userIds = new List<int>();
-            //全部人员Id
-            //查询所有公司的市场部
-
-            var userDatas = await _sqlSugar.Queryable<Sys_Users>()
-                                     .InnerJoin<Sys_Company>((u, c) => u.CompanyId == c.Id)
-                                     .InnerJoin<Sys_Department>((u, c, d) => u.DepId == d.Id)
-                                     .Where((u, c, d) => u.IsDel == 0 && (u.Id == 21 || d.DepName.Contains("市场部")))
-                                     .Select((u, c, d) => new { u.Id ,u.CompanyId,u.CnName})
-                                     .ToListAsync();
-
-
-            if (_dto.CompanyId > 0)
-            {
-                userIds = userDatas.Where(it => it.CompanyId == _dto.CompanyId).Select(it => it.Id).ToList();
-
-                //userIds = _sqlSugar.Queryable<Sys_Users>().Where(it => it.IsDel == 0 && it.CompanyId == _dto.CompanyId).Select(it => it.Id).ToList();
-            }
-
-            if (_dto.GroupPickupUserId > 0)
-            {
-                userIds = userDatas.Where(it => it.Id == _dto.GroupPickupUserId).Select(it => it.Id).ToList();
-            }
-
-            userIds = userDatas.Select(it => it.Id).ToList();
+            userIds = await GetUserIds(_dto.CompanyId, _dto.GroupPickupUserId);
 
             if (userIds.Count > 0)
             {
@@ -2496,6 +2496,13 @@ FROM
             #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 = "";
 
@@ -2507,6 +2514,7 @@ FROM
 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");
@@ -2519,6 +2527,7 @@ Order By Count Desc");
 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");
@@ -2533,6 +2542,7 @@ Order By Count Desc");
 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");
@@ -2546,6 +2556,7 @@ Order By Count Desc");
 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");
@@ -2597,6 +2608,14 @@ Order By Count Desc");
 
             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,
@@ -2604,6 +2623,7 @@ Order By Count Desc");
 	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");
 
@@ -2691,6 +2711,37 @@ Order By Count Desc");
             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
     }
 }

+ 1 - 0
OASystem/OASystem.Domain/AutoMappers/_baseMappingProfile.cs

@@ -280,6 +280,7 @@ namespace OASystem.Domain.AutoMappers
 
             #region 市场客户资料 --> 拜访客户记录
             CreateMap<MarketingSalesVCOperrateDto, Grp_VisitingClients>();
+            CreateMap<MarketingSalesVCSaveInfo, Grp_VisitingClients>();
             #endregion
         }
     }

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

@@ -145,6 +145,17 @@ namespace OASystem.Domain.Dtos.Statistics
         /// Id < 1 添加
         /// </summary>
         public int Id { get; set; }
+       
+    }
+
+    public class MarketingSalesVCSaveDto: MarketingSalesUserPageFuncDtoBase
+    {
+        public List<MarketingSalesVCSaveInfo> Items { get; set; }
+    }
+
+
+    public class MarketingSalesVCSaveInfo
+    {
         public int DiId { get; set; }
         /// <summary>
         /// 拜访时间 - 开始 

+ 6 - 0
OASystem/OASystem.Domain/Enums/BusStatusCode.cs

@@ -24,5 +24,11 @@ namespace OASystem.Domain.Enums
         DeleteFailed = 204,//删除失败
         [Description("请检查端口值是否正确!“portType”:1:WEB;2:ANDROID;3:IOS;")]
         PortTypeError = 205,//端口类型错误
+        [Description("集合没有数据,请传入数据")]
+        ItemsNotFound = 206,//没有找到数据
+        [Description("DiId值错误")]
+        DiIdValueError = 207,//DiId值错误
+        [Description("UserId值错误")]
+        UserIdValueError = 208,//UserId值错误
     }
 }

+ 1 - 1
OASystem/OASystem.Infrastructure/Repositories/Groups/HotelPriceRepository.cs

@@ -53,7 +53,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
         public async Task<JsonView> _ItemsByDiId(int portType,int diId)
         {
 
-            string sql = string.Format(@"Select row_number() over(order by hr.CreateTime Desc) as Row_Number,
+            string sql = string.Format(@"Select row_number() over(order by hr.CheckInDate asc) as Row_Number,
 										 hr.Id,hr.DiId,sd1.Name As GuestType,hr.ReservationsNo,hr.HotelName,hr.CheckInDate,hr.CheckOutDate,
 										 ccp.PayMoney, ccp.PaymentCurrency,sd2.Name PayCurrency,hr.CreateUserId,u.CnName As CreateUserName,
 										 hr.CreateTime,ccp.IsAuditGM,ccp.IsPay

+ 39 - 0
OASystem/OASystem.Infrastructure/Repositories/Groups/VisitingClientsRepository.cs

@@ -93,6 +93,45 @@ Where vc.Isdel = 0 And vc.DiId = {diId}");
             else return new JsonView() { Code = (int)BusStatusCode.PortTypeError, Msg = BusStatusCode.PortTypeError.GetEnumDescription() };
         }
 
+
+        public async Task<JsonView> _Save(MarketingSalesVCSaveDto _dto)
+        {
+            var infos = _mapper.Map<List<Grp_VisitingClients>>(_dto.Items);
+
+            if (_dto.PortType == 1 || _dto.PortType == 2 || _dto.PortType == 3)
+            {
+
+                if (infos.Count > 0)
+                {
+                    infos.ForEach(it => {
+                        it.CreateUserId = _dto.UserId;
+                    });
+                    int diid = infos[0].DiId;
+                    int userId = _dto.UserId; 
+                    if (diid < 1) return new JsonView() { Code = (int)BusStatusCode.DiIdValueError, Msg = BusStatusCode.DiIdValueError.GetEnumDescription() };
+                    
+                    if (userId < 1) return new JsonView() { Code = (int)BusStatusCode.UserIdValueError, Msg = BusStatusCode.UserIdValueError.GetEnumDescription() };
+
+
+                    //执行逻辑删除
+                    var update = await _sqlSugar.Updateable<Grp_VisitingClients>()
+                                                .SetColumns(it => new Grp_VisitingClients() { IsDel = 1, DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), DeleteUserId = userId })
+                                                .Where(it => it.DiId == diid)
+                                                .ExecuteCommandAsync();
+
+                    //执行添加
+                    var add = await _sqlSugar.Insertable(infos).ExecuteCommandAsync();
+
+                    if (add > 0) return new JsonView() { Code = (int)BusStatusCode.Success, Msg = BusStatusCode.Success.GetEnumDescription() };
+
+                }
+                else new JsonView() { Code = (int)BusStatusCode.ItemsNotFound, Msg = BusStatusCode.ItemsNotFound.GetEnumDescription() };
+            }
+            else return new JsonView() { Code = (int)BusStatusCode.PortTypeError, Msg = BusStatusCode.PortTypeError.GetEnumDescription() };
+
+            return new JsonView() { Code = (int)BusStatusCode.Failed, Msg = BusStatusCode.Failed.GetEnumDescription() };
+        }
+
         /// <summary>
         /// 团组客户拜访 del
         /// </summary>