using AutoMapper;
using EyeSoft.Collections.Generic;
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()
{
var jw = new JsonView() { Code = StatusCodes.Status200OK, Msg = "操作成功!" };
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).OrderByDescending(x => x.Id).Select(x => new { x.Id, x.Name }).ToListAsync();
jw.Data = new
{
groupNames = groupNames,
tempDatas = tempDatas,
names = names
};
return jw;
}
///
/// 获取模板信息
///
///
///
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;
}
///
/// 获取团组下单前信息
///
///
///
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.TempId = tempId;
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 = !string.IsNullOrEmpty(ft.Remark) ? sd2.Name + "-" + ft.Remark : sd2.Name,
FieldTypeName = sd2.Name,
OriginVal = opi.Value,
IsRequired = ft.IsRequired,
IsRemark = ft.IsRemark,
Index = ft.Index
})
.ToArrayAsync();
if (!items.Any()) view.Items = temps;
else
{
if (items.Length != temps.Length)
{
foreach (var item in temps)
{
if (items.FirstOrDefault(x => x.FieldName.Equals(item.FieldName)) == null)
{
var arr = new GrpOrderPreItemView[] { item };
view.Items.AddRange(arr);
}
}
}
else view.Items = items;
view.Items = view.Items.Length > 0 ? view.Items.OrderBy(x => x.Index).ToArray() : view.Items;
}
jw.Data = view;
return jw;
}
///
/// 获取团组下单前信息 op
///
///
///
public async Task OpAsync(GroupOrderPreInfoOpDto dto)
{
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 = dto.Id,
Name = dto.Name,
GroupId = dto.GroupId,
CreateUserId = currUserId
};
var items = new List();
foreach (var item in dto.Items)
{
items.Add(new Grp_OrderPreItem()
{
Id = item.Id,
ParentId = item.ParentId,
FormTempId = item.FieldTempId,
Value = item.NewValue == null ? string.Empty: item.NewValue.ToString() ,
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;
}
var addId = await _sqlSugar.Insertable(info).ExecuteReturnIdentityAsync();
if (addId < 1)
{
_sqlSugar.RollbackTran();
jw.Msg = $"新增失败!";
return jw;
}
foreach (var item in items) item.ParentId = addId;
if (items.Any()) await _sqlSugar.Insertable(items).ExecuteCommandAsync();
}
_sqlSugar.CommitTran();
jw.Msg = $"操作成功!";
jw.Code = StatusCodes.Status200OK;
return jw;
}
}
}