using AutoMapper;
using MySqlX.XDevAPI.Common;
using OASystem.Domain;
using OASystem.Domain.Dtos.Groups;
using OASystem.Domain.Entities.Groups;
using OASystem.Domain.Entities.Resource;
using OASystem.Domain.ViewModels.Groups;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Result = OASystem.Domain.Result;
namespace OASystem.Infrastructure.Repositories.Groups
{
///
/// 倒推表 仓储
///
public class InvertedListRepository:BaseRepository
{
private readonly IMapper _mapper;
private readonly Result _result;
private readonly DelegationInfoRepository _delegationInfoRep;
public InvertedListRepository(SqlSugarClient sqlSugar, IMapper mapper, DelegationInfoRepository delegationInfoRep)
: base(sqlSugar)
{
_mapper = mapper;
_result = new Result() { Code = -1, Msg = "系统错误!", Data = new List() { } };
_delegationInfoRep = delegationInfoRep;
}
///
/// 基础数据
///
///
public async Task _Init()
{
dynamic groupData = null;
var groupData1 = await _delegationInfoRep.PostShareGroupInfos(1);
if (groupData1.Code == 0)
{
groupData = groupData1.Data;
}
var setData = await _sqlSugar.Queryable().Where(it => it.IsDel == 0).ToListAsync();
var officialTypeData = setData.Where(it => it.STid == 81).Select(it => new { it.Id,it.Name }).ToList();
var visaTypeData = setData.Where(it => it.STid == 82).Select(it => new { it.Id, it.Name }).ToList();
_result.Code = 0;
_result.Msg = "操作成功!";
_result.Data = new {
groupData = groupData,
officialTypeData = officialTypeData,
visaTypeData = visaTypeData
};
return _result;
}
///
/// Info
///
///
public async Task _Info(int portTypeId,int diId)
{
#region 参数验证
if (portTypeId < 1)
{
_result.Msg = "请输入有效的PortType参数值";
return _result;
}
if (diId < 1)
{
_result.Msg = "请输入有效的DiId参数值";
return _result;
}
#endregion
string sql = string.Format(@$"Select * From Grp_InvertedList Where Isdel={0} And DiId = {diId}");
var info = await _sqlSugar.SqlQueryable(sql).FirstAsync();
if (info == null) {
info = new InvertedListInfoView();
info.IsQuery = true;
var groupInfo = await _sqlSugar.Queryable().Where(it => it.IsDel == 0 && it.Id == diId).FirstAsync();
if (groupInfo == null)
{
_result.Msg = @$"团组数据不存在!";
return _result;
}
List visitCountry = new List();
string grpVisitCountry = groupInfo.VisitCountry;
if (!string.IsNullOrEmpty(grpVisitCountry))
{
grpVisitCountry = _delegationInfoRep.FormartTeamName(grpVisitCountry);
visitCountry = grpVisitCountry.Split("、").ToList();
}
string sqqzRemark = "";
//签证费用标准
var visaFeeDatas = await _sqlSugar.Queryable().Where(it => it.IsDel == 0).ToListAsync();
List visaCountryInfos = new List();
string countryStr = "";
string countryDesc = "";
foreach (var item in visitCountry)
{
int visaDays = Convert.ToInt32(visaFeeDatas.Find(it => it.VisaCountry.Equals(item.Trim()))?.VisaTime ?? "0");
visaCountryInfos.Add(new VisaCountryInfo()
{
Country = item,
OfficialTypeId = -1,
VisaTypeId = -1,
VisaDay = visaDays
});
countryStr += $"{item}、";
countryDesc += $"{item}签证{visaDays}个工作日,";
}
if (countryStr.Length > 0)
{
countryStr = countryStr.Substring(0, countryStr.Length - 1);
}
if (countryDesc.Length > 0)
{
countryDesc = countryDesc.Substring(0, countryDesc.Length - 1);
}
sqqzRemark = $"申请{countryStr}签证;{countryDesc}\r\n(签证周期仅供参考)";
info.VisaCountryData = visaCountryInfos;
info.SendVisaRemark = sqqzRemark;
_result.Data = info;
_result.Msg = "未查询到数据!";
_result.Code = 0;
return _result;
}
int ilId = info.Id;
string visaSql = string.Format(@$"Select * From Grp_InvertedListVisaCountry Where Isdel={0} And ILId = {ilId}");
var visaCountryInfo = await _sqlSugar.SqlQueryable(visaSql).ToListAsync();
info.VisaCountryData = visaCountryInfo;
_result.Data = info;
_result.Code = 0;
return _result;
}
///
/// Create
///
///
///
public async Task _Create(int userId,int diId)
{
#region 参数验证
if (diId < 1)
{
_result.Msg = $@"请输入有效的DiId参数值!";
return _result;
}
if (userId < 1)
{
_result.Msg = $@"请输入有效的UserId参数值!";
return _result;
}
#endregion
var selectInfo = await _sqlSugar.Queryable().Where(it => it.IsDel == 0 && it.DiId == diId).FirstAsync();
if (selectInfo != null)
{
_result.Msg = @$"该数据已存在,不可重复创建!";
return _result;
}
var groupInfo = await _sqlSugar.Queryable().Where(it => it.IsDel == 0 && it.Id == diId).FirstAsync();
if (groupInfo == null)
{
_result.Msg = @$"团组数据不存在,不可创建!";
return _result;
}
if (string.IsNullOrEmpty( groupInfo.VisitDate.ToString()))
{
_result.Msg = @$"团组出访时间未填写,不可创建!";
return _result;
}
DateTime visitDt = groupInfo.VisitDate;
List visitCountry = new List();
string grpVisitCountry = groupInfo.VisitCountry;
if (!string.IsNullOrEmpty(grpVisitCountry))
{
grpVisitCountry = _delegationInfoRep.FormartTeamName(grpVisitCountry);
visitCountry = grpVisitCountry.Split("、").ToList();
}
//签证费用标准
var visaFeeDatas = await _sqlSugar.Queryable().Where(it => it.IsDel == 0).ToListAsync();
string sqqzRemark = "";
List visaCountryInfos = new List();
string countryStr = "";
string countryDesc = "";
foreach (var item in visitCountry)
{
int visaDays = Convert.ToInt32(visaFeeDatas.Find(it => it.VisaCountry.Equals(item.Trim()))?.VisaTime ?? "0");
visaCountryInfos.Add(new VisaCountryInfo()
{
Country = item,
OfficialTypeId = -1,
VisaTypeId = -1,
VisaDay = visaDays
});
countryStr += $"{item}、";
countryDesc += $"{item}签证{visaDays}个工作日,";
}
if (countryStr.Length > 0)
{
countryStr = countryStr.Substring(0, countryStr.Length - 1);
}
if (countryDesc.Length > 0)
{
countryDesc = countryDesc.Substring(0, countryDesc.Length - 1);
}
sqqzRemark = $"申请{countryStr}签证;{countryDesc}\r\n(签证周期仅供参考)";
/*
* 默认步骤所需提前天数
* A 自然日 B 工作日
*/
int approvalData_advanceDays = -60, //报批资料准备
approval_advanceDays = -45, //报批
IssueApproval_advanceDays = -33, //出批件、办护照
//ApplyPassport_advanceDays = -30, //办护照
VisaInformation_advanceDays = -16, //签证资料准备
sendVisa_advanceDays = -12, //送签
issueVisa_advanceDays = -5, //出签
preTripMeeting_advanceDays = -3, //行前会
airportdDropOff_advanceDays = 0; //送机
var info = new Grp_InvertedList() {
DiId = diId,
ApprovalDataDt = visitDt.AddDays(approvalData_advanceDays).ToString("yyyy-MM-dd"),
ApprovalDt = visitDt.AddDays(approval_advanceDays).ToString("yyyy-MM-dd"),
ApprovalType = -1,
IssueApprovalDt = visitDt.AddDays(IssueApproval_advanceDays).ToString("yyyy-MM-dd"),
//ApplyPassportDt = visitDt.AddDays(ApplyPassport_advanceDays).ToString("yyyy-MM-dd"),
VisaInformationDt = visitDt.AddDays(VisaInformation_advanceDays).ToString("yyyy-MM-dd"),
SendVisaDt = visitDt.AddDays(sendVisa_advanceDays).ToString("yyyy-MM-dd"),
IssueVisaDt = visitDt.AddDays(issueVisa_advanceDays).ToString("yyyy-MM-dd"),
PreTripMeetingDt = visitDt.AddDays(preTripMeeting_advanceDays).ToString("yyyy-MM-dd"),
AirportdDropOffDt = visitDt.AddDays(airportdDropOff_advanceDays).ToString("yyyy-MM-dd"),
CreateUserId = userId,
};
if (!string.IsNullOrEmpty(sqqzRemark)) info.SendVisaRemark = sqqzRemark;
_sqlSugar.BeginTran();
int add1 = await _sqlSugar.Insertable(info).ExecuteReturnIdentityAsync();
if (add1<1)
{
_result.Msg = $@"倒推表添加失败!";
_sqlSugar.RollbackTran();
return _result;
}
List _InvertedListVisaCountries = new List();
foreach (var item in visitCountry)
{
int days = Convert.ToInt32(visaFeeDatas.Find(x => x.VisaCountry.Equals(item.Trim()))?.VisaTime ?? "0");
_InvertedListVisaCountries.Add(new Grp_InvertedListVisaCountry()
{
ILId = add1,
Country = item,
OfficialTypeId = -1,
VisaTypeId = -1,
VisaDay = days,
});
}
int add2 = await _sqlSugar.Insertable(_InvertedListVisaCountries).ExecuteReturnIdentityAsync();
_sqlSugar.CommitTran();
_result.Code = 0;
_result.Msg = @$"操作成功!";
return _result;
}
///
/// Update
///
///
///
public async Task _Update(InvertedListUpdateDto dto)
{
#region 参数验证
if (dto.DiId < 1)
{
_result.Msg = $@"请输入有效的DiId参数值!";
return _result;
}
if (dto.Id < 1)
{
_result.Msg = $@"请输入有效的Id参数值!";
return _result;
}
#endregion
Grp_InvertedList _InvertedList = _mapper.Map(dto);
List _InvertedListVisaCountries = new List();
if (dto.VisaCountryData.Count > 0)
{
_InvertedListVisaCountries = _mapper.Map>(dto.VisaCountryData);
}
_sqlSugar.BeginTran();
int update1 = await _sqlSugar.Updateable(_InvertedList)
.IgnoreColumns(it => new { it.CreateTime,it.IsDel })
.ExecuteCommandAsync();
if (update1 < 1)
{
_sqlSugar.RollbackTran();
_result.Msg = @$"修改失败!";
return _result;
}
if (_InvertedListVisaCountries.Count > 0)
{
int update2 = await _sqlSugar.Updateable(_InvertedListVisaCountries)
.IgnoreColumns(it => new { it.CreateTime, it.IsDel })
.ExecuteCommandAsync();
if (update2 < 1)
{
_sqlSugar.RollbackTran();
_result.Msg = @$"修改失败!";
return _result;
}
}
_sqlSugar.CommitTran();
_result.Code = 0;
_result.Msg = @$"操作成功!";
return _result;
}
}
}