Browse Source

团组销售额 代码更改

leiy 9 months ago
parent
commit
36cf98ffb9

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

@@ -38,6 +38,7 @@ namespace OASystem.API.Controllers
         private readonly DelegationInfoRepository _groupRep;
         private readonly SetDataRepository _setDataRep;
         private readonly TeamRateRepository _teamRateRep;
+        private readonly VisitingClientsRepository _visitingClientsRep;
 
         /// <summary>
         /// Init
@@ -46,13 +47,14 @@ 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;
         }
 
 
@@ -2108,7 +2110,8 @@ namespace OASystem.API.Controllers
                             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 = "第一季度", beginDt = $"{y}-01-01", endDt = $" {y}-03-31", monthData = monthDatas };
+                        quarterData = new { name = "第一季度", monthData = monthDatas };
                     }
                     else if (q == 1)
                     {
@@ -2120,7 +2123,8 @@ namespace OASystem.API.Controllers
                             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 = "第二季度", beginDt = $"{y}-04-01", endDt = $"{y}-06-30", monthData = monthDatas };
+                        quarterData = new { name = "第二季度",  monthData = monthDatas };
                     }
                     else if (q == 2)
                     {
@@ -2131,7 +2135,8 @@ namespace OASystem.API.Controllers
                             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 = "第三季度", beginDt = $"{y}-07-01", endDt = $"{y}-09-30", monthData = monthDatas };
+                        quarterData = new { name = "第三季度", monthData = monthDatas };
                     }
                     else if (q == 3)
                     {
@@ -2142,7 +2147,8 @@ namespace OASystem.API.Controllers
                             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 = "第四季度", beginDt = $"{y}-10-01", endDt = $"{y}-12-31", monthData = monthDatas }; 
+                        quarterData = new { name = "第四季度", monthData = monthDatas };
                     }
                     quarterDatas.Add(quarterData); 
                 }
@@ -2150,7 +2156,7 @@ namespace OASystem.API.Controllers
                 dtData.Add(new
                 {
                     year = y,
-                    yearData = new { beginDt = $"{y}-01-01", endDt = $"{y}-12-31" },
+                    //yearData = new { beginDt = $"{y}-01-01", endDt = $"{y}-12-31" },
                     quarterData = quarterDatas,
                 });
             }
@@ -2205,12 +2211,12 @@ namespace OASystem.API.Controllers
 
             //今年销售额
             string beginDt = $"{_dto.BeginDt} 00:00:00",endDt = $"{_dto.EndDt} 23:59:59";
-            decimal thisYearSales = GroupSales(_dto.CompanyId, _dto.GroupPickupUserId, beginDt, endDt);
+            decimal thisYearSales = await 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 lastYearSales = await GroupSales(_dto.CompanyId, _dto.GroupPickupUserId, lastYearBeginDt, lastYearEndDt);
 
             //同比
             decimal yoy = 0.00M;
@@ -2232,7 +2238,7 @@ namespace OASystem.API.Controllers
         /// <param name="beginDt"></param>
         /// <param name="endDt"></param>
         /// <returns></returns>
-        private decimal GroupSales(int companyId,int groupPickupUserId,string beginDt,string endDt)
+        private async Task<decimal> GroupSales(int companyId,int groupPickupUserId,string beginDt,string endDt)
         {
             decimal sales = 0.00M;
 
@@ -2242,12 +2248,12 @@ namespace OASystem.API.Controllers
             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();
+            userId = await _sqlSugar.SqlQueryable<Sys_Users>(userSql).Select(it => it.Id).ToListAsync();
 
             //团组信息
             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();
+            var groupIds = await _sqlSugar.SqlQueryable<Grp_DelegationInfo>(groupSql).Select(it => it.Id).ToListAsync();
 
 
             //销售额 = 收款账单.账单模块 + 收款账单.成本预算模块 +  收款账单.分摊费用 Fin_ForeignReceivables
@@ -2256,7 +2262,7 @@ namespace OASystem.API.Controllers
                 1 ,// - 成本预算模块
                 2 ,// - 分摊费用
             };
-            var foreignReceivables = _sqlSugar.Queryable<Fin_ForeignReceivables>().Where(it => it.IsDel == 0 && feeTypes.Contains(it.AddingWay) && groupIds.Contains(it.Diid)).ToList();
+            var foreignReceivables = await _sqlSugar.Queryable<Fin_ForeignReceivables>().Where(it => it.IsDel == 0 && feeTypes.Contains(it.AddingWay) && groupIds.Contains(it.Diid)).ToListAsync();
             sales = foreignReceivables.Sum(it => it.ItemSumPrice * it.Rate);
 
             return sales;
@@ -2438,6 +2444,82 @@ Order By Count Desc");
             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));
+        }
+
         #endregion
     }
 }

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

@@ -21,6 +21,7 @@ using OASystem.Domain.ViewModels.CRM;
 using OASystem.Domain.ViewModels.PersonnelModule;
 using OASystem.Domain.Entities.PersonnelModule;
 using OASystem.Domain.Dtos.PersonnelModule;
+using OASystem.Domain.Dtos.Statistics;
 
 namespace OASystem.Domain.AutoMappers
 {
@@ -276,6 +277,10 @@ namespace OASystem.Domain.AutoMappers
             #region 酒店询价
             CreateMap<HotelInquiryAddOrEditDto, Grp_HotelInquiry>();
             #endregion
+
+            #region 市场客户资料 --> 拜访客户记录
+            CreateMap<MarketingSalesVCOperrateDto, Grp_VisitingClients>();
+            #endregion
         }
     }
 }

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

@@ -6,6 +6,7 @@ using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 using System.Globalization;
+using OASystem.Domain.ViewModels.Groups;
 
 namespace OASystem.Domain.Dtos.Statistics
 {
@@ -124,4 +125,58 @@ namespace OASystem.Domain.Dtos.Statistics
         public int PageIndex { get; set; } = 1;
         public int PageSize { get; set; } = 5;
     }
+
+    public class MarketingSalesVCListDto: MarketingSalesUserPageFuncDtoBase
+    {
+        public int PageIndex { get; set; } = 1;
+        public int PageSize { get; set; } = 10;
+
+        public int DiId { get; set; }
+        public string Search { get; set; }
+    }
+
+    public class MarketingSalesVCOperrateDto : MarketingSalesUserPageFuncDtoBase
+    {
+        /// <summary>
+        /// opearate 时
+        /// Id > 0 修改
+        /// Id < 1 添加
+        /// </summary>
+        public int Id { get; set; }
+        public int DiId { get; set; }
+        /// <summary>
+        /// 拜访时间 - 开始 
+        /// </summary>
+        public DateTime BeginDt { get; set; }
+        /// <summary>
+        /// 拜访时间 - 结束
+        /// </summary>
+        public DateTime EndDt { get; set; }
+        /// <summary>
+        /// 客户单位
+        /// </summary>
+        public string CustomerUnit { get; set; }
+        /// <summary>
+        /// 客户工作
+        /// </summary>
+        public string CustomerJob { get; set; }
+        /// <summary>
+        /// 客户姓名
+        /// </summary>
+        public string CustomerName { get; set; }
+        /// <summary>
+        /// 客户联系方式
+        /// </summary>
+        public string CustomerContact { get; set; }
+        /// <summary>
+        /// 拜访内容
+        /// </summary>
+        public string Remark { get; set; }
+    }
+
+    public class MarketingSalesVCDelDto
+    {
+        public int UserId { get; set; }
+        public int Id { get; set; }
+    }
 }

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

@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.Enums
+{
+    /// <summary>
+    /// 业务状态码
+    /// </summary>
+    public enum  BusStatusCode:int
+    {
+        [Description("操作成功")]
+        Success = 200,//添加成功
+        [Description("操作失败")]
+        Failed = 201,//添加失败
+        [Description("添加失败")]
+        AddFailed = 202,//添加失败
+        [Description("修改失败")]
+        UpdateFailed = 203,//修改失败
+        [Description("删除失败")]
+        DeleteFailed = 204,//删除失败
+        [Description("请检查端口值是否正确!“portType”:1:WEB;2:ANDROID;3:IOS;")]
+        PortTypeError = 205,//端口类型错误
+    }
+}

+ 20 - 0
OASystem/OASystem.Domain/Result.cs

@@ -29,6 +29,26 @@ namespace OASystem.Domain
         /// </summary>
         public static string Fail = "操作失败!";
 
+        /// <summary>
+        /// 添加成功
+        /// </summary>
+        public static string AddSucceed = "添加成功!";
+
+        /// <summary>
+        /// 添加成功
+        /// </summary>
+        public static string AddFail = "添加失败!";
+
+        /// <summary>
+        /// 修改成功
+        /// </summary>
+        public static string EditSucceed = "修改成功!";
+
+        /// <summary>
+        /// 修改成功
+        /// </summary>
+        public static string EditFail = "修改失败!";
+
         /// <summary>
         /// 端口错误消息提示
         /// </summary>

+ 41 - 0
OASystem/OASystem.Domain/ViewModels/Groups/VisitingClientsView.cs

@@ -10,4 +10,45 @@ namespace OASystem.Domain.ViewModels.Groups
     public class VisitingClientsView:Grp_VisitingClients
     {
     }
+
+    public class VisitingClientsListView
+    {
+        public int RowNumber { get; set; }
+        /// <summary>
+        /// opearate 时
+        /// Id > 0 修改
+        /// Id < 1 添加
+        /// </summary>
+        public int Id { get; set; }
+        /// <summary>
+        /// 拜访时间 - 开始 
+        /// </summary>
+        public DateTime BeginDt { get; set; }
+        /// <summary>
+        /// 拜访时间 - 结束
+        /// </summary>
+        public DateTime EndDt { get; set; }
+        /// <summary>
+        /// 客户单位
+        /// </summary>
+        public string CustomerUnit { get; set; }
+        /// <summary>
+        /// 客户工作
+        /// </summary>
+        public string CustomerJob { get; set; }
+        /// <summary>
+        /// 客户姓名
+        /// </summary>
+        public string CustomerName { get; set; }
+        /// <summary>
+        /// 客户联系方式
+        /// </summary>
+        public string CustomerContact { get; set; }
+        /// <summary>
+        /// 拜访内容
+        /// </summary>
+        public string Remark { get; set; }
+        public string Operator { get; set; }
+        public string OperationDt { get; set; }
+    }
 }

+ 85 - 4
OASystem/OASystem.Infrastructure/Repositories/Groups/VisitingClientsRepository.cs

@@ -1,4 +1,6 @@
 using AutoMapper;
+using OASystem.Domain;
+using OASystem.Domain.Dtos.Statistics;
 using OASystem.Domain.Entities.Groups;
 using OASystem.Domain.ViewModels.Groups;
 using System;
@@ -10,24 +12,103 @@ using System.Threading.Tasks;
 namespace OASystem.Infrastructure.Repositories.Groups
 {
     /// <summary>
-    /// 客户拜访仓储
+    /// 客户拜访 仓储
     /// </summary>
     public class VisitingClientsRepository : BaseRepository<Grp_VisitingClients, VisitingClientsView>
     {
 
         private readonly IMapper _mapper;
         private readonly JsonView _view; 
-        public VisitingClientsRepository(SqlSugarClient sqlSugar, IMapper mapper, JsonView view)
+        public VisitingClientsRepository(SqlSugarClient sqlSugar, IMapper mapper)
             : base(sqlSugar)
         {
             _mapper = mapper;
-            _view = new JsonView() { Code = StatusCodes.Status400BadRequest, Msg = "Bad Request" };
+            _view = new JsonView() { Code = StatusCodes.Status400BadRequest, Msg = BusStatusCode.Failed.GetEnumDescription() };
         }
 
-        public async Task<JsonView> _List()
+        /// <summary>
+        /// 获取客户拜访列表
+        /// </summary>
+        /// <param name="portType"></param>
+        /// <param name="pageIndex"></param>
+        /// <param name="pageSize"></param>
+        /// <param name="diId"></param>
+        /// <param name="search"></param>
+        /// <returns></returns>
+        public async Task<JsonView> _List(int portType,int pageIndex, int pageSize,int diId,string search)
         {
+            if (portType ==1 || portType == 2 || portType == 3)
+            {
+                string sql  = string.Format(@$"Select
+	ROW_NUMBER() Over(Order By BeginDt Asc) As RowNumber,
+	vc.Id,
+	vc.BeginDt,
+	vc.EndDt,
+	vc.CustomerUnit,
+	vc.CustomerJob,
+	vc.CustomerName,
+	vc.CustomerContact,
+	u.CnName As Operator,
+	vc.CreateTime As OperationDt
+From Grp_VisitingClients vc 
+Left Join Sys_Users u On vc.CreateUserId = u.Id
+Where vc.Isdel = 0 And vc.DiId = {diId}");
+
+                RefAsync<int > total = 0;
+                var data = await _sqlSugar.SqlQueryable<VisitingClientsListView>(sql).ToPageListAsync(pageIndex, pageSize, total);
+
+                _view.Code = StatusCodes.Status200OK;
+                _view.Msg = MsgTips.Succeed;
+                _view.Data = data;
+                _view.Count = total;
+            }
+
             return _view;
         }
 
+        /// <summary>
+        /// 团组客户拜访 Add Or Edit
+        /// </summary>
+        /// <param name="_dto"></param>
+        /// <returns></returns>
+        public async Task<JsonView> _AddOrEdit(MarketingSalesVCOperrateDto _dto)
+        {
+            var info = _mapper.Map<Grp_VisitingClients>(_dto);
+
+            if (_dto.PortType == 1 || _dto.PortType == 2 || _dto.PortType == 3)
+            {
+                if (info.Id > 0) //编辑
+                {
+                    var update = await _sqlSugar.Updateable(info).IgnoreColumns(it => new { it.CreateTime, it.CreateUserId, it.DeleteUserId, it.DeleteTime, it.IsDel }).ExecuteCommandAsync();
+                    if (update <= 0) return new JsonView() { Code = (int)BusStatusCode.UpdateFailed, Msg = BusStatusCode.UpdateFailed.GetEnumDescription() };
+                }
+                else //新增
+                {
+                    info.CreateUserId = _dto.UserId;
+                    var add = await _sqlSugar.Insertable(info).ExecuteCommandAsync();
+                    if (add <= 0) return new JsonView() { Code = (int)BusStatusCode.AddFailed, Msg = BusStatusCode.AddFailed.GetEnumDescription() };
+                }
+                return new JsonView() { Code = (int)BusStatusCode.Success, Msg = BusStatusCode.Success.GetEnumDescription() };
+            }
+            else return new JsonView() { Code = (int)BusStatusCode.PortTypeError, Msg = BusStatusCode.PortTypeError.GetEnumDescription() };
+        }
+
+        /// <summary>
+        /// 团组客户拜访 del
+        /// </summary>
+        /// <param name="id"></param>
+        /// <param name="userId"></param>
+        /// <returns></returns>
+        public async Task<JsonView> _Del(int id, int userId)
+        {
+            var info = new Grp_VisitingClients() { Id = id, IsDel = 1, DeleteUserId = userId, DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")};
+            var update = await _sqlSugar.Updateable(info)
+                                        .UpdateColumns(it => new { it.IsDel, it.DeleteUserId, it.DeleteTime })
+                                        .WhereColumns(it => it.Id)
+                                        .ExecuteCommandAsync();
+            if (update <= 0) return new JsonView() { Code = (int)BusStatusCode.DeleteFailed, Msg = BusStatusCode.DeleteFailed.GetEnumDescription() };
+            return new JsonView() { Code = (int)BusStatusCode.Success, Msg = BusStatusCode.Success.GetEnumDescription() };
+
+        }
     }
 }