using OASystem.Domain.Dtos.Groups; using OASystem.Domain.Entities.Groups; using OASystem.Domain.ViewModels.Groups; using OASystem.Domain; using OASystem.Infrastructure.Repositories.System; using OASystem.Infrastructure.Tools; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using AutoMapper; namespace OASystem.Infrastructure.Repositories.Groups { /// /// 出入境费用-草稿 仓库 /// public class EnterExitCostDraftRepository : BaseRepository { private readonly IMapper _mapper; private readonly SetDataRepository _setDataRep; public EnterExitCostDraftRepository(SqlSugarClient sqlSugar, IMapper mapper, SetDataRepository setDataRep) : base(sqlSugar) { _setDataRep = setDataRep; _mapper = mapper; } /// /// 权限用户基础数据 /// /// public async Task> PermissionViewUsersAsync() { var gj_jobPostIds = new List() { 22, 32 }; var viewPermissionData = await _sqlSugar.Queryable() .Where(x => x.IsDel == 0 && ((x.DepId == 7 && gj_jobPostIds.Contains(x.JobPostId)) || x.DepId == 6)) .Select(x => new PermissionViewUserview { Id = x.Id, Name = x.CnName }) .ToListAsync(); return viewPermissionData; } /// /// 出入境费用草稿 --> 权限验证 /// /// 草稿Id /// 操作权限 1:查看;2:新增;3:编辑;4:删除;5:下载; /// public async Task PermissionValidationAsync(int darftId, int userId, int permission=1) { //参数验证 if (darftId < 1) return false; var permissionIds = new List() { 1, 2, 3, 4, 5 }; if (!permissionIds.Contains(permission)) return false; var info = await _sqlSugar.Queryable() .Where(it => it.DraftId == darftId && it.UserId == userId && it.Permission == permission) .FirstAsync(); if (info != null) return true; return false; } /// /// 移动端操作权限验证 /// /// /// /// 1 查看 2 编辑 /// public async Task<(bool, string)> MobilePermissionsValidationAsync(int id, int currUserId, int permissionType = 1) { bool status = false; string msg = string.Empty; var enterExitCostData = await _sqlSugar.Queryable().OrderByDescending(x => x.CreateTime).FirstAsync(it => it.Id == id && it.IsDel == 0); if (permissionType == 1) { status = await PermissionValidationAsync(id, currUserId);//查看权限 if (enterExitCostData.CreateUserId == currUserId) status = true; //查看权限 if (!status) { var setUserName = await _sqlSugar.Queryable().Where(x => x.Id == enterExitCostData.CreateUserId).Select(x => x.CnName).FirstAsync(); msg = $"{setUserName}设置了你不能查看当前团组的出入境费用明细数据,如要查看,请联系{setUserName}!"; } return (status, msg); } else if (permissionType == 2) { if (enterExitCostData.CreateUserId == currUserId) status = true; //编辑权限 if (!status) { var setUserName = await _sqlSugar.Queryable().Where(x => x.Id == enterExitCostData.CreateUserId).Select(x => x.CnName).FirstAsync(); msg = $"您没有编辑权限,“{setUserName}”才可编辑!"; } return (status, msg); } else msg = $"请传入正确的权限验证类型!"; return (status, msg); } /// /// 查询 根据 Id 查询 /// /// public async Task EnterExitCostDraftInfoById(EnterExitCostDraftInfoByIdDto dto) { var result = new JsonView() { Code = 400, Msg = "暂无数据" }; var id = dto.Id; var enterExitCostDraftData = await _sqlSugar.Queryable().OrderByDescending(x => x.CreateTime).FirstAsync(it => it.Id == id && it.IsDel == 0); var enterExitCostInfoView = new EnterExitCostDraftInfoView(); if (dto.PortType == 1 || dto.PortType == 2 || dto.PortType == 3) { if (enterExitCostDraftData != null) { enterExitCostInfoView = _mapper.Map(enterExitCostDraftData); var isView = await PermissionValidationAsync(enterExitCostDraftData.Id, dto.CurrUserId); if (isView) enterExitCostInfoView.IsView = true; //查看权限 if (enterExitCostDraftData.CreateUserId == dto.CurrUserId) { enterExitCostInfoView.IsSave = true; //操作权限 enterExitCostInfoView.IsView = true; //查看权限 } if (!enterExitCostInfoView.IsView) { var setUserName = await _sqlSugar.Queryable().Where(x => x.Id == enterExitCostDraftData.CreateUserId).Select(x => x.CnName).FirstAsync(); result.Msg = $"{setUserName}设置了你不能查看当前团组的出入境费用明细数据-草稿,如要查看,请联系{setUserName}!"; return result; } enterExitCostInfoView.ViewUsers = await _sqlSugar .Queryable() .Where(x => x.IsDel == 0 && x.DraftId == id) .Select(x => x.UserId) .ToArrayAsync(); var dayAndCostDraftSql = string.Format(@"Select ntf.Country,ntf.City,ssd.Name CurremcyCode,ssd.Remark CurrencyName,gdac.* From Grp_DayAndCostDraft gdac Left Join Grp_NationalTravelFee ntf On ntf.Id = gdac.NationalTravelFeeId Left Join Sys_SetData ssd On ssd.STid = 66 And gdac.Currency = ssd.Id Where gdac.Isdel = 0 And ntf.IsDel = 0 And gdac.ParentId = {0} Order By [Type] ASC,[Days] ASC", id); var dayAndCostDraftData = await _sqlSugar.SqlQueryable(dayAndCostDraftSql).ToListAsync(); enterExitCostInfoView.QuarterageData = dayAndCostDraftData.Where(it => it.Type == 1).ToList(); //住宿费 1 enterExitCostInfoView.BoardWagesData = dayAndCostDraftData.Where(it => it.Type == 2).ToList(); //伙食费 2 enterExitCostInfoView.MiscellaneousFeeData = dayAndCostDraftData.Where(it => it.Type == 3).ToList(); //公杂费 3 enterExitCostInfoView.TrainingExpenseData = dayAndCostDraftData.Where(it => it.Type == 4).ToList(); //培训费 4 enterExitCostInfoView.DayOtherPriceData = _sqlSugar.Queryable() .Where(x => x.IsDel == 0 && x.ParentId == id) .Select(x => new DayOtherPriceDraftView { ParentId = x.ParentId, Id = x.Id, Cost = x.Cost, Currency = x.Currency, Index = x.Index, SetDataId = x.SetDataId, SubTotal = x.SubTotal, Remark = x.Remark, }) .OrderBy(x => x.Index) .ToList(); enterExitCostInfoView.Currencys = (List?)CommonFun.GetCurrencyChinaToList(enterExitCostDraftData.CurrencyRemark); result.Msg = "操作成功"; result.Code = 200; } else { // List views = new List() // { // new DayAndCostInfoView {Days=1}, // new DayAndCostInfoView {Days=2}, // new DayAndCostInfoView {Days=3}, // new DayAndCostInfoView {Days=4}, // new DayAndCostInfoView {Days=5}, // new DayAndCostInfoView {Days=6}, // new DayAndCostInfoView {Days=7}, // new DayAndCostInfoView {Days=8}, // }; // enterExitCostInfoView.QuarterageData = views; // enterExitCostInfoView.BoardWagesData = views; // enterExitCostInfoView.MiscellaneousFeeData = views; // enterExitCostInfoView.TrainingExpenseData = views; // result.Code = 0; result.Msg = "未查询出数据!!!"; } result.Data = enterExitCostInfoView; } else result.Msg = MsgTips.Port; return result; } /// /// Add Or Update /// /// /// public async Task EnterExitCostDraftOp(EnterExitCostDraftOpDto dto) { Result result = new Result() { Code = -1, Msg = "操作失败!" }; if (dto.SumJJC == 0) dto.OutsideJJPay = 0; if (dto.SumGWC == 0) dto.OutsideGWPay = 0; if (dto.SumTDC == 0) dto.OutsideTDPay = 0; var enterExitCost = _mapper.Map(dto); enterExitCost.Remark = dto.FirstItemRemark; //enterExitCost.InsidePay = enterExitCost.Visa + enterExitCost.YiMiao + enterExitCost.HeSuan + enterExitCost.Service + enterExitCost.Safe + enterExitCost.Ticket; var subData = new List(); var quarterageData = _mapper.Map>(dto.QuarterageData); //住宿费 1 quarterageData = quarterageData.Select(it => { it.CreateUserId = dto.UserId; return it; }).ToList(); if (quarterageData.Any()) subData.AddRange(quarterageData); var boardWagesData = _mapper.Map>(dto.BoardWagesData); //伙食费 2 boardWagesData = boardWagesData.Select(it => { it.CreateUserId = dto.UserId; return it; }).ToList(); if (boardWagesData.Any()) subData.AddRange(boardWagesData); var miscellaneousFeeData = _mapper.Map>(dto.MiscellaneousFeeData); //公杂费 3 miscellaneousFeeData = miscellaneousFeeData.Select(it => { it.CreateUserId = dto.UserId; return it; }).ToList(); if (miscellaneousFeeData.Any()) subData.AddRange(miscellaneousFeeData); var trainingExpenseData = _mapper.Map>(dto.TrainingExpenseData); //培训费 4 trainingExpenseData = trainingExpenseData.Select(it => { it.CreateUserId = dto.UserId; return it; }).ToList(); if (trainingExpenseData.Any()) subData.AddRange(trainingExpenseData); //处理币种string enterExitCost.CurrencyRemark = CommonFun.GetCurrencyChinaToString(dto.Currencys); enterExitCost.CreateUserId = dto.UserId; _sqlSugar.BeginTran(); if (dto.PortType == 1) { try { int enterExitId = 0; var isNull = _sqlSugar.Queryable().Where(it => it.IsDel == 0 && it.DraftName.Equals(dto.DraftName)).First(); if (isNull != null) //修改 { //编辑验证 if (isNull.CreateUserId != dto.UserId) { var userName = _sqlSugar.Queryable().Where(x => isNull.CreateUserId == isNull.Id).Select(x => x.CnName).First(); _sqlSugar.RollbackTran(); result.Msg = $"该条信息只有操作人“{userName}”可修改!"; return result; } var updateId = _sqlSugar.Updateable(enterExitCost) .IgnoreColumns(it => new { it.DeleteUserId, it.DeleteTime, it.CreateUserId, it.CreateTime, it.IsDel }) .WhereColumns(it => it.DraftName) .ExecuteCommand(); if (updateId > 0) { enterExitId = isNull.Id; } else { _sqlSugar.RollbackTran(); result.Msg = "修改操作失败!"; return result; } } else //添加 { //添加 enterExitId = _sqlSugar.Insertable(enterExitCost).ExecuteReturnIdentity(); if (enterExitId < 1) { _sqlSugar.RollbackTran(); result.Msg = "添加操作失败!"; return result; } subData.Select(x => { x.Id = 0; return x; }).ToList(); dto.DayOtherPriceData.Select(x => { x.Id = 0; return x; }).ToList(); //默认添加查看权限 var users = await PermissionViewUsersAsync(); var userIds = users.Select(x => x.Id).ToList(); if (userIds.Any()) { var permissions = new List(); foreach (var userId in userIds) { permissions.Add(new Grp_EnterExitCostDraftPermission() { DraftId = enterExitId, UserId = userId, Permission = 1 }); } if (permissions.Any()) { _sqlSugar.Insertable(permissions).ExecuteReturnIdentity(); } } } if (enterExitId > 0) { subData = subData.Select(x => { x.ParentId = enterExitId; return x; }).ToList(); var addList = subData.Where(x => x.Id == 0).ToList(); var updateList = subData.Where(x => x.Id > 0).ToList(); if (addList.Any()) { var rowCount = _sqlSugar.Insertable(addList).ExecuteCommand(); } if (updateList.Any()) { var rowCount = _sqlSugar.Updateable(updateList).ExecuteCommand(); } if (dto.DayOtherPriceData.Any()) { var inserList = dto.DayOtherPriceData .Where(x => x.Id == 0) .Select(x => new Grp_DayOtherPriceDraft { Cost = x.Cost, Id = x.Id, CreateTime = DateTime.Now, CreateUserId = dto.UserId, Currency = x.Currency, ParentId = enterExitId, Index = x.Index, IsDel = 0, SetDataId = x.SetDataId, SubTotal = x.SubTotal, Remark = x.Remark, }) .ToList(); var updateList1 = dto.DayOtherPriceData .Where(x => x.Id != 0) .Select(x => new Grp_DayOtherPriceDraft { Cost = x.Cost, Id = x.Id, CreateTime = DateTime.Now, CreateUserId = dto.UserId, Currency = x.Currency, ParentId = enterExitId, Index = x.Index, IsDel = 0, SetDataId = x.SetDataId, SubTotal = x.SubTotal, Remark = x.Remark }) .ToList(); if (inserList.Any()) { var rowCount = _sqlSugar.Insertable(inserList).ExecuteCommand(); } if (updateList1.Any()) { var rowCount = _sqlSugar.Updateable(updateList1).ExecuteCommand(); } } } _sqlSugar.CommitTran(); result.Code = 0; result.Msg = "操作成功!"; result.Data = new { sign = enterExitId, draftName = enterExitCost.DraftName }; } catch (Exception ex) { _sqlSugar.RollbackTran(); result.Msg = ex.Message; } } else result.Msg = MsgTips.Port; return result; } /// /// Del /// /// /// public async Task EnterExitCostDraftSubItemDel(EnterExitCostDraftSubItemDelDto dto) { Result result = new Result(); var data = new Grp_DayAndCostDraft() { Id = dto.Id, IsDel = 1, DeleteUserId = dto.DeleteUserId, DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") }; var del = _sqlSugar.Updateable(data).UpdateColumns(it => new { it.IsDel, it.DeleteUserId, it.DeleteTime }).ExecuteCommand(); if (del > 0) result.Code = 0; else result.Msg = string.Format("删除失败!"); return result; } /// /// 一键清空 /// 删除主表数据 Update /// 删除子表数据 delete /// /// /// /// public async Task OneClickEmpty(int id, int userId) { Result result = new Result() { Code = -1, Msg = "操作成功!" }; if (id < 1) return result = new Result() { Code = -1, Msg = "请传入有效的Id参数!" }; if (userId < 1) return result = new Result() { Code = -1, Msg = "请传入有效的UserId参数!" }; BeginTran(); int update = await _sqlSugar.Updateable() .SetColumns(it => new Grp_EnterExitCostDraft() { IsDel = 1, DeleteUserId = userId, DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }) .Where(it => it.Id == id) .ExecuteCommandAsync(); if (update > 0) { await _sqlSugar.Updateable() .SetColumns(it => new Grp_DayAndCostDraft() { IsDel = 1, DeleteUserId = userId, DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }) .Where(it => it.ParentId == id) .ExecuteCommandAsync(); await _sqlSugar.Updateable() .SetColumns(it => new Grp_DayOtherPriceDraft() { IsDel = 1, DeleteUserId = userId, DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }) .Where(it => it.ParentId == id) .ExecuteCommandAsync(); result.Code = 0; result.Msg = "操作成功!"; CommitTran(); } else { result.Msg = "操作失败"; RollbackTran(); } return result; } } }