using AutoMapper; using EyeSoft.Collections.Generic; using Newtonsoft.Json; using OASystem.Domain; using OASystem.Domain.Dtos.Groups; using OASystem.Domain.Entities.Groups; using OASystem.Domain.ViewModels.Groups; using Org.BouncyCastle.Ocsp; using Org.BouncyCastle.Utilities; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace OASystem.Infrastructure.Repositories.Groups { /// /// 团组下单前信息 /// public class GroupOrderPreInfoRepository : BaseRepository { private readonly IMapper _mapper; private readonly DelegationInfoRepository _groupInfoRep; public GroupOrderPreInfoRepository(SqlSugarClient sqlSugar, IMapper mapper, DelegationInfoRepository groupInfoRep) : base(sqlSugar) { _mapper = mapper; _groupInfoRep = groupInfoRep; } /// /// 获取基础信息 /// /// /// public async Task DataInit(int userId) { var jw = new JsonView() { Code = StatusCodes.Status200OK, Msg = "操作成功!" }; // 获取团组名称列表(端口类型为1) var groupNames = await _groupInfoRep.GetGroupNameList(new Domain.Dtos.Groups.GroupNameDto() { PortType = 1 }); var tempDatas = await _sqlSugar.Queryable() .Where(x => x.IsDel == 0 && x.STid == 109) .Select(x => new { x.Id, x.Name }) .ToListAsync(); var names = await _sqlSugar.Queryable() .Where(x => x.IsDel == 0 && x.CreateUserId == userId) .OrderByDescending(x => x.Id) .Select(x => new { x.Id, x.Name }) .ToListAsync(); jw.Data = new { groupNames = groupNames, tempDatas = tempDatas, names = names }; return jw; } /// /// 获取模板信息 /// /// 模板编号,默认 1404 /// public async Task TempInfoById(int tempId = 1404) { var tempInfos = await _sqlSugar.Queryable((ft, sd1, sd2) => new JoinQueryInfos( JoinType.Left, ft.FieldNameId == sd1.Id, JoinType.Left, ft.FieldTypeId == sd2.Id )) .Where((ft, sd1, sd2) => ft.IsDel == 0 && ft.TempId == tempId) .OrderBy((ft, sd1, sd2) => ft.Index) .Select((ft, sd1, sd2) => new GrpOrderPreItemView() { FieldTempId = ft.Id, FieldName = sd1.Name, OriginVal = "-", // FieldTypeName = !string.IsNullOrEmpty(ft.Remark) ? sd2.Name +"-"+ ft.Remark : sd2.Name, FieldTypeName = sd2.Name, IsRequired = ft.IsRequired, IsRemark = ft.IsRemark, Index = ft.Index }) .ToArrayAsync(); return tempInfos; } /// /// 获取团组下单前信息 /// /// 下单前信息Id /// 模板编号,默认 1404 /// public async Task InfoAsync(int id, int tempId = 1404) { var jw = new JsonView() { Code = StatusCodes.Status200OK, Msg = "操作成功!" }; var view = new GrpOrderPreInfoView(); var info = await _sqlSugar.Queryable() .FirstAsync(x => x.IsDel == 0 && x.Id == id); var temps = await TempInfoById(tempId); if (info == null) { view.Items = temps; jw.Data = view; return jw; } view.Id = id; view.Name = info.Name; view.GroupId = info.GroupId; var items = await _sqlSugar.Queryable((ft, opi, sd1, sd2) => new JoinQueryInfos( JoinType.Inner, ft.Id == opi.FormTempId, JoinType.Left, ft.FieldNameId == sd1.Id, JoinType.Left, ft.FieldTypeId == sd2.Id )) .Where((ft, opi, sd1, sd2) => ft.IsDel == 0 && opi.IsDel == 0 && opi.ParentId == id && ft.TempId == tempId) .OrderBy((ft, opi, sd1, sd2) => ft.Index) .Select((ft, opi, sd1, sd2) => new GrpOrderPreItemView() { Id = opi.Id, ParentId = opi.ParentId, FieldTempId = ft.Id, FieldName = sd1.Name, FieldTypeName = sd2.Name, OriginVal = opi.Value, Remark = opi.Remark, IsRequired = ft.IsRequired, IsRemark = ft.IsRemark, Index = ft.Index }) .ToArrayAsync(); // 如果原始数据不存在或者数量不匹配,则补充模板中缺失的字段 if (!items.Any()) { view.Items = temps; } else { var itemsList = items.ToList(); foreach (var temp in temps) { if (!itemsList.Any(x => x.FieldName.Equals(temp.FieldName))) { itemsList.Add(temp); } } view.Items = itemsList.OrderBy(x => x.Index).ToArray(); } jw.Data = view; return jw; } /// /// 获取团组下单前信息 op /// /// /// public async Task OpAsync(GroupOrderPreInfoOpDto dto) { int dataId = dto.Id; var jw = new JsonView() { Code = StatusCodes.Status400BadRequest, Msg = "操作成功!" }; int currUserId = dto.CurrUserId; if (currUserId < 1) { jw.Msg = MsgTips.UserId; return jw; } if (string.IsNullOrEmpty(dto.Name)) { jw.Msg = $"名称不能为空!"; return jw; } var info = new Grp_OrderPreInfo() { Id = dataId, Name = dto.Name, GroupId = dto.GroupId, CreateUserId = currUserId }; var items = new List(); // 处理每一项信息 foreach (var item in dto.Items) { var val = ""; // 如果新值为 string[] 时,序列化为 JSON 字符串,否则直接转换 if (item.NewValue is Array obj) { val = JsonConvert.SerializeObject( (string[])item.NewValue); } else if(item.NewValue != null) val = item.NewValue.ToString(); items.Add(new Grp_OrderPreItem() { Id = item.Id, ParentId = item.ParentId, FormTempId = item.FieldTempId, Value = val, CreateUserId = currUserId, Remark = item.Remark }); } var addItems = items.Where(x => x.Id <= 0).ToArray(); var updItems = items.Where(x => x.Id > 0).ToArray(); _sqlSugar.BeginTran(); if (dto.Id > 0) //修改 { var infoUpd = await _sqlSugar.Updateable(info) .UpdateColumns(x => new { x.Name, x.GroupId }) .ExecuteCommandAsync(); if (infoUpd < 1) { _sqlSugar.RollbackTran(); jw.Msg = $"修改失败!"; return jw; } if (addItems.Any()) await _sqlSugar.Insertable(addItems).ExecuteCommandAsync(); if (updItems.Any()) await _sqlSugar.Updateable(updItems).UpdateColumns(x => new { x.Value, x.Remark }).ExecuteCommandAsync(); } else if (dto.Id <= 0) //新增 { var isNul = await _sqlSugar.Queryable().FirstAsync(x => x.IsDel == 0 && x.Name.Equals(dto.Name)); if (isNul != null) { _sqlSugar.RollbackTran(); jw.Msg = $"名称重复!"; return jw; } dataId = await _sqlSugar.Insertable(info).ExecuteReturnIdentityAsync(); if (dataId < 1) { _sqlSugar.RollbackTran(); jw.Msg = $"新增失败!"; return jw; } // 设置所有项的 ParentId 为新增后的 Id foreach (var item in items) item.ParentId = dataId; if (items.Any()) await _sqlSugar.Insertable(items).ExecuteCommandAsync(); } _sqlSugar.CommitTran(); jw.Msg = $"操作成功!"; jw.Code = StatusCodes.Status200OK; jw.Data = dataId; return jw; } /// /// 获取团组下单前信息 Del /// /// /// public async Task DelAsync(GroupOrderPreInfoDelDto dto) { var jw = new JsonView() { Code = StatusCodes.Status400BadRequest, Msg = "操作成功!" }; int currUserId = dto.CurrUserId, id = dto.Id; if (currUserId < 1) { jw.Msg = MsgTips.UserId; return jw; } if (currUserId < 1) { jw.Msg = MsgTips.Id; return jw; } _sqlSugar.BeginTran(); var parentDel = await _sqlSugar.Updateable() .SetColumns(a => new Grp_OrderPreInfo() { DeleteUserId = currUserId, IsDel = 1, DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }) .Where(x => x.Id == id) .ExecuteCommandAsync(); var subDel = await _sqlSugar.Updateable() .SetColumns(a => new Grp_OrderPreItem() { DeleteUserId = currUserId, IsDel = 1, DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }) .Where(x => x.ParentId == id) .ExecuteCommandAsync(); _sqlSugar.CommitTran(); jw.Msg = $"操作成功!"; jw.Code = StatusCodes.Status200OK; return jw; } } }