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; using EyeSoft.Collections.Generic; 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 viewPermissionData = await _sqlSugar.Queryable() .LeftJoin((u, d) => u.DepId == d.Id) .Where((u, d) => u.IsDel == 0 && u.HrAudit == 1 && d.DepName.Equals("市场部")) .Select((u, d) => new PermissionViewUserview { Id = u.Id, Name = u.CnName }) .ToListAsync(); //去掉特殊人员 if (viewPermissionData.Any()) { var notName = new string[] { "高媛媛", "管理员" }; viewPermissionData = viewPermissionData.Where(x => !notName.Any(x1 => x.Name.Contains(x1))).ToList(); } //添加特定人员 var feeBasePerm = AppSettingsHelper.Get("FeeBasePerm"); if (feeBasePerm.Any()) { foreach (var item in feeBasePerm) { if (item.Users.Any()) { viewPermissionData.AddRange(item.Users); } } return viewPermissionData.GroupBy(x => x.Id).Select(x => x.First()).OrderBy(x => x.Id).ToList(); } return viewPermissionData; } /// /// 初始化配置权限 /// /// /// /// public async Task InitPerm(int draftId, int currUserId) { var feeBasePerm = AppSettingsHelper.Get("FeeBasePerm"); var intlDplmcyBasePerm = new List(); //国交部 var mktStratBasePerm = new List(); //市场部 if (feeBasePerm.Any()) { var intlDplmcyData = feeBasePerm.Find(x => x.Dept.Equals("IntlDplmcy")); if (intlDplmcyData != null) if (intlDplmcyData.Users.Any()) intlDplmcyBasePerm = intlDplmcyData.Users.ToList(); var mktStratData = feeBasePerm.Find(x => x.Dept.Equals("MktStrat")); if (mktStratData != null) if (mktStratData.Users.Any()) mktStratBasePerm = mktStratData.Users.ToList(); } /* * 权限分配规则 * 刘琪、王鸽、朱琳的账号:默认只能刘、王、朱查看 * 舒庆的账号 默认只能舒、刘、王、朱查看 * 其他销售 默认只能自己、舒、刘、王、朱查看 */ var feeBasePermIds = new List(); if (intlDplmcyBasePerm.Any(x => x.Id == currUserId)) { feeBasePermIds = intlDplmcyBasePerm.Select(x => x.Id).ToList(); } else if (mktStratBasePerm.Any(x => x.Id == currUserId)) { feeBasePermIds.AddRange(mktStratBasePerm.Select(x => x.Id).ToList()); feeBasePermIds.AddRange(intlDplmcyBasePerm.Select(x => x.Id).ToList()); } else { feeBasePermIds.Add(currUserId); feeBasePermIds.AddRange(mktStratBasePerm.Select(x => x.Id).ToList()); feeBasePermIds.AddRange(intlDplmcyBasePerm.Select(x => x.Id).ToList()); } if (feeBasePermIds.Any()) { var permissions = new List(); foreach (var userId in feeBasePermIds) { permissions.Add(new Grp_EnterExitCostDraftPermission() { DraftId = draftId, UserId = userId, Permission = 1, CreateUserId = userId, }); } if (permissions.Any()) { await _sqlSugar.Insertable(permissions).ExecuteReturnIdentityAsync(); return true; } } return false; } /// /// 出入境费用草稿 --> 权限验证 /// /// 草稿Id /// 操作权限 1:查看;2:新增;3:编辑;4:删除;5:下载; /// public async Task<(bool, bool)> PermissionValidationAsync(int darftId, int userId, int permission = 1) { //参数验证 if (darftId < 1) return (false,false); var permissionIds = new List() { 1, 2, 3, 4, 5 }; if (!permissionIds.Contains(permission)) return (false, false); var feeBasePermUserIds = new List(); var feeBasePerm = AppSettingsHelper.Get("FeeBasePerm"); if (feeBasePerm.Any()) { var intlDplmcyData = feeBasePerm.Find(x => x.Dept.Equals("IntlDplmcy")); if (intlDplmcyData != null) if (intlDplmcyData.Users.Any()) feeBasePermUserIds.AddRange(intlDplmcyData.Users.Select(x => x.Id).ToList()); var mktStratData = feeBasePerm.Find(x => x.Dept.Equals("MktStrat")); if (mktStratData != null) if (mktStratData.Users.Any()) feeBasePermUserIds.AddRange(mktStratData.Users.Select(x => x.Id).ToList()); } if (feeBasePermUserIds.Any(x => x == userId)) return (true, true); var info = await _sqlSugar.Queryable() .Where(it => it.DraftId == darftId && it.UserId == userId && it.Permission == permission) .FirstAsync(); if (info != null) return(true, false); return (false, false); } /// /// 查询 根据 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); (bool viewPerm, bool assignPerm) = await PermissionValidationAsync(enterExitCostDraftData.Id, dto.CurrUserId); if (viewPerm || enterExitCostDraftData.CreateUserId == dto.CurrUserId) { enterExitCostInfoView.IsSave = true; //操作权限 enterExitCostInfoView.IsView = true; //查看权限 } else { result.Msg = "未分配查看权限,如要查看,请联系市场部或国交部负责人!"; return result; } //设置权限按钮 if (assignPerm) { enterExitCostInfoView.IsAssignPerm = true; 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.ProvinceId = dto.ProvinceId; 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.CreateUserId == dto.UserId && it.DraftName.Equals(dto.DraftName)).First(); var isNull = _sqlSugar.Queryable().Where(it => it.IsDel == 0 && it.DraftName.Equals(dto.DraftName)).First(); if (isNull != null) //修改 { enterExitId = isNull.Id; (bool viewPerm,bool assignPerm) = await PermissionValidationAsync(enterExitCost.Id, dto.UserId); if (!viewPerm) { _sqlSugar.RollbackTran(); result.Msg = "未分配编辑权限,如要编辑,请联系市场部或国交部负责人!"; return result; } var updateId = _sqlSugar.Updateable(enterExitCost) .IgnoreColumns(it => new { it.DeleteUserId, it.DeleteTime, it.CreateUserId, it.CreateTime, it.IsDel }) .Where(it => it.Id == enterExitId) .ExecuteCommand(); if (updateId < 1) { _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(); //初始化权限(查看、编辑) await InitPerm(enterExitId,dto.UserId); } 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; } /// /// 文件类型 /// /// /// public async Task<(SetDataInfoView[], SetDataInfoView[])> FileOwner(int provinceId = 122) { //122 四川 //108 贵州 //103 重庆 //132 云南 var datas = await _sqlSugar .Queryable() .Where(x => x.IsDel == 0 && (x.STid == 72 || x.STid == 73)) .ToListAsync(); var wordTypeData = datas.Where(x => x.STid == 72 && x.Remark.Contains(provinceId.ToString())) .Select(x => new SetDataInfoView() { Id = x.Id, Name = x.Name, Remark = x.Remark }).ToArray(); if (wordTypeData.Length < 1) { //ProvinceDefaultItem var defaultItem = datas.Where(x => x.STid == 72 && x.Remark.Contains("ProvinceDefaultItem")) .Select(x => new SetDataInfoView() { Id = x.Id, Name = x.Name, Remark = x.Remark }).FirstOrDefault(); wordTypeData = new SetDataInfoView[] { defaultItem }; } var excelTypeData = datas.Where(x => x.STid == 73 && x.Remark.Contains(provinceId.ToString())) .Select(x => new SetDataInfoView() { Id = x.Id, Name = x.Name, Remark = x.Remark }).ToArray(); return (wordTypeData, excelTypeData); } } }