using AutoMapper; using OASystem.Domain; using OASystem.Domain.Dtos.Groups; using OASystem.Domain.Entities.Groups; using OASystem.Domain.ViewModels.Groups; using OASystem.Infrastructure.Tools; namespace OASystem.Infrastructure.Repositories.Groups { /// /// 签证流程步骤仓储 /// public class VisaProcessRepository : BaseRepository { private readonly IMapper _mapper; public VisaProcessRepository(SqlSugarClient sqlSugar, IMapper mapper) : base(sqlSugar) { _mapper = mapper; } /// /// 创建签证流程步骤 /// /// /// /// public async Task Create(int createUderId,int groupId) { //团组有效验证 var groupIsValid = await _sqlSugar.Queryable() .Where(g => g.Id == groupId && g.IsDel == 0) .AnyAsync(); if (!groupIsValid) { return new Result(400, "团组无效,无法创建签证流程步骤。"); } var existingSteps = await _sqlSugar.Queryable() .Where(s => s.GroupId == groupId && s.IsDel == 0) .AnyAsync(); if (existingSteps) { return new Result(400, "该团组的签证流程步骤已存在,无法重复创建。"); } var steps = Grp_VisaProcessSteps.StepsInit(groupId, createUderId); var add = await _sqlSugar.Insertable(steps).ExecuteCommandAsync(); if (add < 1) return new Result(400, "签证流程步骤创建失败。"); return new Result(200,"Success"); } /// /// 签证流程 Info /// /// /// /// public async Task Info(VisaProcessInfoByGroupIdDto dto) { //团组有效验证 //var groupIsValid = await _sqlSugar.Queryable() // .Where(g => g.Id == dto.GroupId && g.IsDel == 0) // .AnyAsync(); //if (!groupIsValid) //{ // return new Result(400, "团组无效,无法查询签证流程步骤。"); //} var query = await _sqlSugar.Queryable() .Where(s => s.GroupId == dto.GroupId && s.IsDel == 0) .OrderBy(s => s.Step) .ToListAsync(); var infos = query.Select(s => new { s.Id, s.GroupId, s.Step, s.DataType, s.TypedValue, //s.StoreVal, s.IsCompleted, s.AttachUrl, s.TypedFileNameValue, s.Remark }).ToList(); string msg = "Success"; //如果不存在,则返回默认数据 if (infos == null || infos.Count < 1) { infos = Grp_VisaProcessSteps.StepsInit(dto.GroupId, 208).Select(s => new { s.Id, s.GroupId, s.Step, s.DataType, s.TypedValue, //s.StoreVal, s.IsCompleted, s.AttachUrl, s.TypedFileNameValue, s.Remark }).ToList(); msg = "签证流程步骤信息不存在,展示默认数据。"; } //数据按照类型处理 var datas = new List(); var view = new VisaProcessStepsInfoView(); foreach (var item in infos) { if (item.DataType == "string") { var info = new VisaProcessStepsInfoByStringView { Id = item.Id, GroupId = item.GroupId, Step = item.Step, DataType = item.DataType, TypedValue = item.TypedValue == null ? "" : item.TypedValue.ToString(), //StoreVal = item.StoreVal, IsCompleted = item.IsCompleted, AttachUrl = item.TypedFileNameValue, Remark = item.Remark }; if (item.Step == 1) view.Step1 = info; else if (item.Step == 2) view.Step2 = info; else if (item.Step == 3) view.Step3 = info; else if (item.Step == 4) view.Step4 = info; else if (item.Step == 5) view.Step5 = info; else if (item.Step == 8) view.Step8 = info; datas.Add(info); } else if (item.DataType == "bool") { bool boolVal = false; if (item.TypedValue != null) { boolVal = (bool)item.TypedValue; } var info = new VisaProcessStepsInfoByBoolView { Id = item.Id, GroupId = item.GroupId, Step = item.Step, DataType = item.DataType, TypedValue = boolVal, IsCompleted = item.IsCompleted, AttachUrl = item.TypedFileNameValue, Remark = item.Remark }; if (item.Step == 6) view.Step6 = info; datas.Add(info); } else if (item.DataType == "string[]") { var listVal = new List(); var contnet = new VisaProcessSteps7Content() { IsSelected = false }; if (item.TypedValue != null) { listVal = item.TypedValue switch { List stringList => stringList, IEnumerable stringEnumerable => stringEnumerable.ToList(), string str => new List { str }, IEnumerable objectEnumerable => objectEnumerable.Select(x => x?.ToString() ?? "").ToList(), _ => new List { item.TypedValue.ToString() ?? "" } }; if (listVal != null && listVal.Count > 0) { contnet.IsSelected = bool.TryParse(CommonFun.GetValueOrDefault(listVal,0), out _); contnet.ProjectedDate = CommonFun.GetValueOrDefault(listVal, 1); } } var info = new VisaProcessStepsInfoByListView { Id = item.Id, GroupId = item.GroupId, Step = item.Step, DataType = item.DataType, TypedValue = contnet, IsCompleted = item.IsCompleted, AttachUrl = item.TypedFileNameValue, Remark = item.Remark }; if (item.Step == 7) view.Step7 = info; datas.Add(info); } } return new Result(200, msg, view); } /// /// 修改签证流程步骤 /// /// /// /// public async Task Update(Grp_VisaProcessSteps info) { var update = await _sqlSugar.Updateable() .SetColumns(s => new Grp_VisaProcessSteps { StoreVal = info.StoreVal, //AttachUrl = info.AttachUrl, //IsCompleted = info.IsCompleted, LastUpdateUserId = info.LastUpdateUserId, LastUpdateTime = DateTime.Now, Remark = info.Remark }) .Where(s => s.Id == info.Id && s.IsDel == 0) .ExecuteCommandAsync(); if (update < 1) return new Result(400, "更新失败!"); return new Result(200, "Success"); } /// /// 批量修改top4Steps /// /// /// public async Task UpdateBatchTop4Step(int groupId,int currUserId) { var steps = new List() { 1, //签证启动日 2, //分配工作 3, //送外办时间 4, //预计出签时间 }; var visaSteps = await _sqlSugar.Queryable() .Where(s => s.GroupId == groupId && s.IsDel == 0 && steps.Contains(s.Step)) .ToListAsync(); if (visaSteps.Count < 1) return new Result(400, "签证流程信息不存在。"); //倒推表信息 var invertedInfo = await _sqlSugar.Queryable() .Where(i => i.DiId == groupId && i.IsDel == 0) .FirstAsync(); if (invertedInfo == null) return new Result(400, "倒推表信息不存在。"); //设置操作人和时间 foreach (var item in visaSteps) { //默认确认完成 item.IsCompleted = true; item.LastUpdateUserId = currUserId; item.LastUpdateTime = DateTime.Now; } //step=1 设置启动日值 visaSteps.FirstOrDefault(x => x.Step == 1).TypedValue = DateTime.Now.ToString("yyyy-MM-dd"); //step=2 分配工作 visaSteps.FirstOrDefault(x => x.Step == 2).TypedValue = invertedInfo.IssueApprovalDt; //step=3 送外办时间 visaSteps.FirstOrDefault(x => x.Step == 3).TypedValue = invertedInfo.SendVisaDt; //step=4 预计出签时间 visaSteps.FirstOrDefault(x => x.Step == 4).TypedValue = invertedInfo.IssueVisaDt; var update = await _sqlSugar.Updateable(visaSteps) .UpdateColumns(it => new { it.StoreVal, it.LastUpdateUserId,it.LastUpdateTime }) .ExecuteCommandAsync(); if (update < 1) return new Result(400, "更新失败!"); return new Result(200, "Success"); } /// /// 设置已完成的步骤 /// /// /// public async Task SetCompleted(int id,int currUserId) { //步骤信息验证 var stepInfo = await _sqlSugar.Queryable() .Where(s => s.Id == id && s.IsDel == 0 && s.IsCompleted) .FirstAsync(); if (stepInfo != null) return new Result(400, "步骤信息已完成,无法重复设置。"); var update = await _sqlSugar.Updateable() .SetColumns(s => new Grp_VisaProcessSteps { IsCompleted = true, LastUpdateUserId = currUserId, LastUpdateTime = DateTime.Now }) .Where(s => s.Id == id && s.IsDel == 0 && !s.IsCompleted) .ExecuteCommandAsync(); if (update < 1) return new Result(400, "状态设置失败!"); return new Result(200, "Success"); } } }