123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- using AutoMapper;
- using Newtonsoft.Json;
- using OASystem.Domain;
- using OASystem.Domain.Entities.Groups;
- using OASystem.Domain.ViewModels.JuHeExchangeRate;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace OASystem.Infrastructure.Repositories.Groups
- {
- /// <summary>
- /// 团组流程总览表仓储
- /// </summary>
- public class ProcessOverviewRepository : BaseRepository<Grp_ProcessOverview, Grp_ProcessOverview>
- {
- private readonly IMapper _mapper;
- private readonly DelegationInfoRepository _groupRep;
- public ProcessOverviewRepository(SqlSugarClient sqlSugar, IMapper mapper, DelegationInfoRepository groupRep) : base(sqlSugar)
- {
- _mapper = mapper;
- _groupRep = groupRep;
- }
- /// <summary>
- /// 团组流程初始化
- /// </summary>
- /// <param name="request">创建流程请求参数</param>
- /// <returns>创建的流程信息</returns>
- public async Task<Result> ProcessInitAsync(int groupId,int currUserId)
- {
- //团组验证
- var groupInfo = await _sqlSugar.Queryable<Grp_DelegationInfo>().FirstAsync(g => g.Id == groupId);
- if (groupInfo == null)
- {
- return new Result { Code = 400, Msg = "团组不存在" };
- }
- // 检查是否已存在流程
- var existingProcesses = await _sqlSugar.Queryable<Grp_ProcessOverview>().Where(p => p.GroupId == groupId).ToListAsync();
- if (existingProcesses.Any())
- {
- return new Result { Code = 400, Msg = "该团组的流程已存在" };
- }
- //处理签证国家
- var visaCountries = _groupRep.GroupSplitCountry(groupInfo.VisitCountry);
- // 定义默认的流程节点
- var processs = Grp_ProcessOverview.ProcessInit(groupId,currUserId,visaCountries);
- _sqlSugar.BeginTran();
- foreach (var item in processs)
- {
- var processId = await _sqlSugar.Insertable(item).ExecuteReturnIdentityAsync();
- if (processId < 1 )
- {
- _sqlSugar.RollbackTran();
- return new Result { Code = 400, Msg = "团组流程进度总览表添加失败!" };
- }
- var nodes = item.Nodes.Select((nodeDto, index) => new Grp_ProcessNode
- {
- ProcessId = processId,
- NodeName = nodeDto.NodeName,
- NodeOrder = nodeDto.NodeOrder,
- OverallStatus = ProcessStatus.UnStarted,
- //Country = nodeDto.Country,
- IsCurrent = nodeDto.IsCurrent,
- Remark =nodeDto.Remark
- }).ToList();
- var nodeIds = await _sqlSugar.Insertable(nodes).ExecuteCommandAsync();
- if (nodeIds < 1)
- {
- _sqlSugar.RollbackTran();
- return new Result { Code = 400, Msg = "团组流程进度流程表添加失败!" };
- }
- }
- _sqlSugar.CommitTran();
- return new Result { Code = 200, Msg = "添加成功!" }; ;
- }
- /// <summary>
- /// 获取团组的所有流程及流程详情
- /// </summary>
- /// <param name="request">创建流程请求参数</param>
- /// <returns>创建的流程信息</returns>
- public async Task<Result> ProcessesDetailsAsync(int groupId)
- {
- //团组验证
- var groupInfo = await _sqlSugar.Queryable<Grp_DelegationInfo>().FirstAsync(g => g.Id == groupId);
- if (groupInfo == null)
- {
- return new Result { Code = 400, Msg = "团组不存在" };
- }
- // 检查是否已存在流程
- var existingProcesses = await _sqlSugar.Queryable<Grp_ProcessOverview>().Where(p => p.GroupId == groupId).ToListAsync();
- if (!existingProcesses.Any())
- {
- return new Result { Code = 400, Msg = "该团组的流程不存在" };
- }
- var users = await _sqlSugar.Queryable<Sys_Users>().ToListAsync();
- var processData = await _sqlSugar.Queryable<Grp_ProcessOverview>()
- .Where(p => p.GroupId == groupId && p.IsDel == 0)
- .Mapper(p => p.Nodes, p => p.Nodes.First().ProcessId)
- .ToListAsync();
- var processes = processData.Select(p => new
- {
- p.Id,
- p.GroupId,
- p.ProcessType,
- ProcessName = p.ProcessType.GetEnumDescription(),
- //p.OverallStatus,
- //StatusText = p.OverallStatus.GetDescription(),
- Nodes = p.Nodes.Select(n => {
- //单独处理签证板块
- var visaSubNodes = new List<VisaNode>();
- string remark = string.Empty;
- if (p.ProcessType == GroupProcessType.Visa)
- {
- visaSubNodes = JsonConvert.DeserializeObject<List<VisaNode>>(n.Remark);
- }
- return new
- {
- n.Id,
- n.ProcessId,
- n.NodeOrder,
- n.NodeName,
- n.OverallStatus,
- StatusText = p.OverallStatus.GetEnumDescription(),
- Operator = users.FirstOrDefault(u => u.Id == n.Operator)?.CnName ?? "-",
- OpeateTime = n.OperationTime.HasValue ? n.OperationTime.Value.ToString("yyyy-MM-dd HH:mm:ss") : "-",
- //节点类型为签证时使用
- visaSubNodes
- };
- }).OrderBy(n => n.NodeOrder).ToList()
- }).ToList();
- return new Result { Code = 200,Data = processes, Msg = "查询成功!" };
- }
- }
- }
|