|
|
@@ -1167,108 +1167,167 @@ namespace OASystem.API.Controllers
|
|
|
[ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
|
|
|
public async Task<IActionResult> PostGroupPageList(GroupPageListDto dto)
|
|
|
{
|
|
|
- #region 参数验证
|
|
|
- if (dto.UserId < 1) return Ok(JsonView(false, "员工Id为空"));
|
|
|
- if (dto.PageId < 1) return Ok(JsonView(false, "页面Id为空"));
|
|
|
+ #region 参数验证
|
|
|
+ if (dto.UserId < 1)
|
|
|
+ return Ok(JsonView(false, "员工Id为空"));
|
|
|
+ if (dto.PageId < 1)
|
|
|
+ return Ok(JsonView(false, "页面Id为空"));
|
|
|
|
|
|
#region 页面操作权限验证
|
|
|
var pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(dto.UserId, dto.PageId);
|
|
|
-
|
|
|
- if (pageFunAuthView.CheckAuth == 0) return Ok(JsonView(false, "您没有查看权限"));
|
|
|
+ if (pageFunAuthView.CheckAuth == 0)
|
|
|
+ return Ok(JsonView(false, "您没有查看权限"));
|
|
|
#endregion
|
|
|
-
|
|
|
#endregion
|
|
|
- if (dto.PortType == 1 || dto.PortType == 2) // web/Android
|
|
|
- {
|
|
|
- string sqlWhere = string.Empty;
|
|
|
- if (dto.IsSure == 0) //未完成
|
|
|
- {
|
|
|
- sqlWhere += string.Format(@" And IsSure = 0");
|
|
|
- }
|
|
|
- else if (dto.IsSure == 1) //已完成
|
|
|
- {
|
|
|
- sqlWhere += string.Format(@" And IsSure = 1");
|
|
|
- }
|
|
|
-
|
|
|
- if (!string.IsNullOrEmpty(dto.SearchCriteria))
|
|
|
- {
|
|
|
- string tj = dto.SearchCriteria;
|
|
|
- sqlWhere += string.Format(@"And (ssd.Name Like '%{0}%' Or TeamName Like '%{1}%' Or ClientName Like '%{2}%' Or ClientName Like '%{3}%' Or su.CnName Like '%{4}%')",
|
|
|
- tj, tj, tj, tj, tj);
|
|
|
- }
|
|
|
-
|
|
|
- if (int.TryParse(dto.Rank, out int rankId))
|
|
|
- {
|
|
|
- if (rankId > 0) sqlWhere += string.Format("And gdi.TeamLevSId = {0}", rankId);
|
|
|
- }
|
|
|
|
|
|
- string sqlWhere1 = string.Empty;
|
|
|
- if (!string.IsNullOrEmpty(dto.Department) && !dto.Department.Equals("全部"))
|
|
|
- {
|
|
|
- sqlWhere1 = string.Format("Where Department = '{0}'", dto.Department);
|
|
|
- }
|
|
|
+ //if (dto.PortType != 1 && dto.PortType != 2) // web/Android
|
|
|
+ // return Ok(JsonView(false, "不支持的端口类型"));
|
|
|
|
|
|
- string sql = string.Format(@"Select Row_Number,Id,SalesQuoteNo,TourCode,TeamTypeId, TeamType,Department,
|
|
|
- TeamLevId,TeamLev,TeamName,ClientName,ClientUnit,
|
|
|
- VisitDate,VisitDays,VisitPNumber,JietuanOperatorId,
|
|
|
- JietuanOperator,IsSure,CreateTime,IsBid,Step
|
|
|
- From (
|
|
|
- Select row_number() over(order by gdi.VisitStartDate Desc) as Row_Number,
|
|
|
- CASE WHEN gdi.JietuanOperator = 4 OR gdi.JietuanOperator = 21 THEN '国交部'
|
|
|
- ELSE (Select DepName FROM OA2023DB.dbo.Sys_Department WHERE Id = su.DepId) END AS 'Department',
|
|
|
- gdi.Id,SalesQuoteNo,TourCode,ssd.Id TeamTypeId, ssd.Name TeamType,gdi.Step,
|
|
|
- ssd1.Id TeamLevId,ssd1.Name TeamLev,TeamName,ClientName,ClientUnit,
|
|
|
- VisitDate,VisitDays,VisitPNumber,JietuanOperator JietuanOperatorId,
|
|
|
- su.CnName JietuanOperator,IsSure,gdi.CreateTime,gdi.IsBid
|
|
|
- From Grp_DelegationInfo gdi
|
|
|
- Left Join Sys_SetData ssd On gdi.TeamDid = ssd.Id
|
|
|
- Left Join Sys_SetData ssd1 On gdi.TeamLevSId = ssd1.Id
|
|
|
- Left Join Sys_Users su On gdi.JietuanOperator = su.Id
|
|
|
- Where gdi.IsDel = 0 {0}
|
|
|
- ) temp {1}", sqlWhere, sqlWhere1);
|
|
|
+ // 构建查询条件
|
|
|
+ var sqlWhereBuilder = new StringBuilder(" WHERE gdi.IsDel = 0");
|
|
|
+ var parameters = new List<SugarParameter>();
|
|
|
|
|
|
- RefAsync<int> total = 0;//REF和OUT不支持异步,想要真的异步这是最优解
|
|
|
- var _DelegationList = await _sqlSugar.SqlQueryable<DelegationListView>(sql).ToPageListAsync(dto.PageIndex, dto.PageSize, total);//ToPageAsync
|
|
|
+ // 完成状态筛选
|
|
|
+ if (dto.IsSure == 0 || dto.IsSure == 1)
|
|
|
+ {
|
|
|
+ sqlWhereBuilder.Append(" AND gdi.IsSure = @IsSure");
|
|
|
+ parameters.Add(new SugarParameter("@IsSure", dto.IsSure));
|
|
|
+ }
|
|
|
|
|
|
- //处理 团组模块实际操作人
|
|
|
- _DelegationList.ForEach(async x =>
|
|
|
- {
|
|
|
+ // 搜索条件
|
|
|
+ if (!string.IsNullOrWhiteSpace(dto.SearchCriteria))
|
|
|
+ {
|
|
|
+ var searchParam = $"%{dto.SearchCriteria.Trim()}%";
|
|
|
+ sqlWhereBuilder.Append(@"
|
|
|
+ AND (ssd.Name LIKE @SearchCriteria
|
|
|
+ OR gdi.TeamName LIKE @SearchCriteria
|
|
|
+ OR gdi.ClientName LIKE @SearchCriteria
|
|
|
+ OR su.CnName LIKE @SearchCriteria)");
|
|
|
+ parameters.Add(new SugarParameter("@SearchCriteria", searchParam));
|
|
|
+ }
|
|
|
|
|
|
- var operators = GeneralMethod.GetGroupModuleOperators(x.Id);
|
|
|
- var operatorNames = new StringBuilder();
|
|
|
- //operatorNames.AppendLine("各模块实际操作人:");
|
|
|
- if (operators.Any())
|
|
|
- {
|
|
|
- operators.ForEach(y =>
|
|
|
- {
|
|
|
+ // 等级筛选
|
|
|
+ if (int.TryParse(dto.Rank, out int rankId) && rankId > 0)
|
|
|
+ {
|
|
|
+ sqlWhereBuilder.Append(" AND gdi.TeamLevSId = @RankId");
|
|
|
+ parameters.Add(new SugarParameter("@RankId", rankId));
|
|
|
+ }
|
|
|
|
|
|
- string label = string.Empty;
|
|
|
- if (y.OperationUsers.Any())
|
|
|
- {
|
|
|
- var users = y.OperationUsers.Select(x => x.UserName).ToList();
|
|
|
- label = string.Join('、', users);
|
|
|
- }
|
|
|
- else label = "暂未指定";
|
|
|
+ // 部门筛选
|
|
|
+ var departmentWhere = string.Empty;
|
|
|
+ if (!string.IsNullOrWhiteSpace(dto.Department) && !dto.Department.Equals("全部"))
|
|
|
+ {
|
|
|
+ departmentWhere = " WHERE Department = @Department";
|
|
|
+ parameters.Add(new SugarParameter("@Department", dto.Department));
|
|
|
+ }
|
|
|
|
|
|
- operatorNames.AppendLine($"{y.CTableName}:{label}");
|
|
|
- operatorNames.AppendLine();
|
|
|
- });
|
|
|
- }
|
|
|
+ // 构建SQL查询
|
|
|
+ string sql = $@"
|
|
|
+ SELECT Row_Number, Id, SalesQuoteNo, TourCode, TeamTypeId, TeamType, Department,
|
|
|
+ TeamLevId, TeamLev, TeamName, ClientName, ClientUnit,
|
|
|
+ VisitDate, VisitDays, VisitPNumber, JietuanOperatorId,
|
|
|
+ JietuanOperator, IsSure, CreateTime, IsBid, Step
|
|
|
+ FROM (
|
|
|
+ SELECT ROW_NUMBER() OVER(ORDER BY gdi.VisitStartDate DESC) AS Row_Number,
|
|
|
+ CASE
|
|
|
+ WHEN gdi.JietuanOperator IN (4, 21) THEN '国交部'
|
|
|
+ ELSE (SELECT DepName FROM OA2023DB.dbo.Sys_Department WHERE Id = su.DepId)
|
|
|
+ END AS 'Department',
|
|
|
+ gdi.Id, SalesQuoteNo, TourCode, ssd.Id AS TeamTypeId, ssd.Name AS TeamType, gdi.Step,
|
|
|
+ ssd1.Id AS TeamLevId, ssd1.Name AS TeamLev, TeamName, ClientName, ClientUnit,
|
|
|
+ VisitDate, VisitDays, VisitPNumber, JietuanOperator AS JietuanOperatorId,
|
|
|
+ su.CnName AS JietuanOperator, IsSure, gdi.CreateTime, gdi.IsBid
|
|
|
+ FROM Grp_DelegationInfo gdi
|
|
|
+ LEFT JOIN Sys_SetData ssd ON gdi.TeamDid = ssd.Id
|
|
|
+ LEFT JOIN Sys_SetData ssd1 ON gdi.TeamLevSId = ssd1.Id
|
|
|
+ LEFT JOIN Sys_Users su ON gdi.JietuanOperator = su.Id
|
|
|
+ {sqlWhereBuilder}
|
|
|
+ ) temp {departmentWhere}";
|
|
|
|
|
|
- x.OperatorLabel = operatorNames.ToString().TrimEnd('\n', '\r');
|
|
|
- });
|
|
|
+ // 执行分页查询
|
|
|
+ RefAsync<int> total = 0;
|
|
|
+ var delegationList = await _sqlSugar.SqlQueryable<DelegationListView>(sql)
|
|
|
+ .AddParameters(parameters)
|
|
|
+ .ToPageListAsync(dto.PageIndex, dto.PageSize, total);
|
|
|
|
|
|
- var _view = new
|
|
|
+ if (!delegationList.Any())
|
|
|
+ {
|
|
|
+ var emptyView = new
|
|
|
{
|
|
|
PageFuncAuth = pageFunAuthView,
|
|
|
- Data = _DelegationList
|
|
|
+ Data = delegationList
|
|
|
};
|
|
|
- return Ok(JsonView(true, "查询成功!", _view, total));
|
|
|
+ return Ok(JsonView(true, "查询成功,暂无数据", emptyView, total));
|
|
|
}
|
|
|
- else
|
|
|
+
|
|
|
+ // 批量处理团组模块实际操作人和背景颜色设置
|
|
|
+ await ProcessDelegationListData(delegationList);
|
|
|
+
|
|
|
+ var resultView = new
|
|
|
{
|
|
|
- return Ok(JsonView(false, "查询失败"));
|
|
|
- }
|
|
|
+ PageFuncAuth = pageFunAuthView,
|
|
|
+ Data = delegationList
|
|
|
+ };
|
|
|
+
|
|
|
+ return Ok(JsonView(true, "查询成功!", resultView, total));
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 批量处理团组数据
|
|
|
+ /// </summary>
|
|
|
+ private async Task ProcessDelegationListData(List<DelegationListView> delegationList)
|
|
|
+ {
|
|
|
+ var groupIds = delegationList.Select(x => x.Id).ToList();
|
|
|
+
|
|
|
+ // 批量查询信用卡支付记录
|
|
|
+ var creditCardPayments = await _sqlSugar.Queryable<Grp_CreditCardPayment>()
|
|
|
+ .Where(y => groupIds.Contains(y.DIId) && y.IsDel == 0)
|
|
|
+ .Select(y => y.DIId)
|
|
|
+ .Distinct()
|
|
|
+ .ToListAsync();
|
|
|
+
|
|
|
+ // 批量查询费用确认记录
|
|
|
+ var feeAcknowledgements = await _sqlSugar.Queryable<Grp_FeeEntryAcknowledge>()
|
|
|
+ .Where(y => groupIds.Contains(y.GroupId) && y.IsDel == 0)
|
|
|
+ .Where(y => y.IsAcknowledged == AcknowledgeStatusEnum.Acknowledged)
|
|
|
+ .Select(y => y.GroupId)
|
|
|
+ .Distinct()
|
|
|
+ .ToListAsync();
|
|
|
+
|
|
|
+ var creditCardPaymentSet = creditCardPayments.ToHashSet();
|
|
|
+ var feeAcknowledgementSet = feeAcknowledgements.ToHashSet();
|
|
|
+
|
|
|
+ // 并行处理每个团组
|
|
|
+ var tasks = delegationList.Select(async x =>
|
|
|
+ {
|
|
|
+ // 处理团组模块实际操作人
|
|
|
+ var operators = GeneralMethod.GetGroupModuleOperators(x.Id);
|
|
|
+ var operatorNames = new StringBuilder();
|
|
|
+
|
|
|
+ if (operators.Any())
|
|
|
+ {
|
|
|
+ foreach (var operatorInfo in operators)
|
|
|
+ {
|
|
|
+ string label = operatorInfo.OperationUsers.Any()
|
|
|
+ ? string.Join('、', operatorInfo.OperationUsers.Select(u => u.UserName))
|
|
|
+ : "暂未指定";
|
|
|
+
|
|
|
+ operatorNames.AppendLine($"{operatorInfo.CTableName}:{label}");
|
|
|
+ operatorNames.AppendLine();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ x.OperatorLabel = operatorNames.ToString().TrimEnd('\n', '\r');
|
|
|
+
|
|
|
+ // 设置背景颜色为红色
|
|
|
+ // C表没数据并且没点提醒确认按钮(无成本费用按钮)的团组该行显示红色
|
|
|
+ bool hasCreditCardPayment = creditCardPaymentSet.Contains(x.Id);
|
|
|
+ bool hasFeeAcknowledgement = feeAcknowledgementSet.Contains(x.Id);
|
|
|
+
|
|
|
+ x.UseRedBackground = !hasCreditCardPayment && !hasFeeAcknowledgement;
|
|
|
+ });
|
|
|
+
|
|
|
+ await Task.WhenAll(tasks);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|