| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425 | 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{    /// <summary>    /// 团组下单前信息    /// </summary>    public class GroupOrderPreInfoRepository : BaseRepository<Grp_OrderPreInfo, OrderPreInfoView>    {        private readonly IMapper _mapper;        private readonly DelegationInfoRepository _groupInfoRep;        public GroupOrderPreInfoRepository(SqlSugarClient sqlSugar, IMapper mapper, DelegationInfoRepository groupInfoRep) : base(sqlSugar)        {            _mapper = mapper;            _groupInfoRep = groupInfoRep;        }        /// <summary>        /// 获取基础信息        /// </summary>        /// <param name="tempId"></param>        /// <returns></returns>        public async Task<JsonView> 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<Sys_SetData>()                .Where(x => x.IsDel == 0 && x.STid == 109)                .Select(x => new { x.Id, x.Name })                .ToListAsync();            var names = await _sqlSugar.Queryable<Grp_OrderPreInfo>()                .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;        }        /// <summary>        /// 获取模板信息        /// </summary>        /// <param name="tempId">模板编号,默认 1404</param>        /// <returns></returns>        public async Task<GrpOrderPreItemView[]> TempInfoById(int tempId = 1404)        {            var tempInfos = await _sqlSugar.Queryable<Sys_FormTemp, Sys_SetData, Sys_SetData>((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;        }        /// <summary>        /// 获取模板信息        /// </summary>        /// <param name="tempId">模板编号,默认 1404</param>        /// <returns></returns>        public async Task<GrpOrderPreItemMobileView[]> TempMobileInfoById(int tempId = 1404)        {            var tempInfos = await _sqlSugar.Queryable<Sys_FormTemp, Sys_SetData, Sys_SetData>((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 GrpOrderPreItemMobileView()                {                    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;        }        /// <summary>        /// 获取团组下单前信息        /// </summary>        /// <param name="id">下单前信息Id</param>        /// <param name="tempId">模板编号,默认 1404</param>        /// <param name="portType">端口号</param>        /// <returns></returns>        public async Task<JsonView> InfoAsync(int id, int tempId = 1404)        {            var jw = new JsonView() { Code = StatusCodes.Status200OK, Msg = "操作成功!" };            var view = new GrpOrderPreInfoView();            var info = await _sqlSugar.Queryable<Grp_OrderPreInfo>()                .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<Sys_FormTemp, Grp_OrderPreItem, Sys_SetData, Sys_SetData>((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;        }        /// <summary>        /// 获取团组下单前信息        /// </summary>        /// <param name="id">下单前信息Id</param>        /// <param name="tempId">模板编号,默认 1404</param>        /// <param name="portType">端口号</param>        /// <returns></returns>        public async Task<JsonView> MobileInfoAsync(int id, int tempId = 1404)        {            var jw = new JsonView() { Code = StatusCodes.Status200OK, Msg = "操作成功!" };            var view = new GrpOrderPreInfoMobileView();            var info = await _sqlSugar.Queryable<Grp_OrderPreInfo>()                .FirstAsync(x => x.IsDel == 0 && x.Id == id);            var temps = await TempMobileInfoById(tempId);            if (info == null)            {                view.Items = temps;                jw.Data = view;                return jw;            }            view.Id = id;            view.Name = info.Name;            view.GroupId = info.GroupId;            if (info.GroupId > 0)            {                var groupInfo = await _sqlSugar.Queryable<Grp_DelegationInfo>().FirstAsync(x => x.IsDel == 0 && x.Id == info.GroupId);                if (groupInfo != null)                {                    view.GroupId = groupInfo.Id;                    view.GroupName = groupInfo.TeamName;                }            }            var items = await _sqlSugar.Queryable<Sys_FormTemp, Grp_OrderPreItem, Sys_SetData, Sys_SetData>((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 GrpOrderPreItemMobileView()                {                    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;        }        /// <summary>        /// 获取团组下单前信息 op        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        public async Task<JsonView> 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<Grp_OrderPreItem>();            // 处理每一项信息            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<Grp_OrderPreInfo>().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;        }        /// <summary>        /// 获取团组下单前信息 Del        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        public async Task<JsonView> 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<Grp_OrderPreInfo>()                .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<Grp_OrderPreItem>()                .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;        }    }}
 |