using cylsg.Model.ECTEModel; using cylsg.Model.utilityViewModel; using cylsg.utility.Extend; using ECTESTOA; using Furion.LinqBuilder; using Models; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; namespace cylsg.Application.CyOS { /// /// 川印报销经理API /// [Authorize] [ApiDescriptionSettings("CYOA")] public class CyOSBaoXiaoJingLiController: IDynamicApiController { private readonly IOAServices _OAServices; private readonly ISqlSugarClient _SugarClient; private ECTESTOAPermissions Permissions; public CyOSBaoXiaoJingLiController(IOAServices oaservices, ISqlSugarClient sugarClient) { _OAServices = oaservices; _SugarClient = sugarClient.AsTenant().GetConnection("ECTESTOADB"); } /// /// 查询 /// [HttpPost] public async Task getplanelist(SearchOaWorekPlan param) { if (!await CheckRols()) { throw Oops.Oh("没有权限"); } Expression> SearchList = (x) => true; //川印工作单 SearchList = SearchList.And(x => x.ApprovalStatus != PlanStatusType.Uncommitted); SearchList = SearchList.And(x => x.MemberId == _OAServices.firmId); SearchList = SearchList.And(x => x.PlanType == 3); SearchList = SearchList.And(x => x.PlanDataType == 17); //必须有两个人审批过了 SearchList = SearchList.And(x => x.OaWorkPlanShenpis.Count(y=>y.Buzhou==1)>1||(x.ApprovalStatus!= PlanStatusType.unApproval)); if (!string.IsNullOrEmpty(param.StaffName)) { SearchList = SearchList.And(x => x.SentStaff.Name.Contains(param.StaffName)); } if (param.StaffMemberIdId != null) { SearchList = SearchList.And(x => x.MemberId == param.StaffMemberIdId); } if (param.PlanDataType > 0) { SearchList = SearchList.And(x => x.PlanDataType == param.PlanDataType); } if (param.PlanStartTimeStart != null) { SearchList = SearchList.And(x => x.PlanStartTime >param.PlanStartTimeStart); } if (param.PlanStartTimeEnd != null) { SearchList = SearchList.And(x => x.PlanStartTime <= param.PlanStartTimeEnd.Value.AddDays(1)); } //审批状态 if (param.ApprovalStatus != null) { SearchList = SearchList.And(x => x.ApprovalStatus == param.ApprovalStatus); } //报销状态 if (param.EvaluationStatus != null) { SearchList = SearchList.And(x => x.EvaluationStatus == param.EvaluationStatus); } //强制增加员工过滤 RefAsync totle = 0; var data = await _SugarClient.Queryable().Includes(x => x.OaWorkPlanShenpis.Where(y=>y.Buzhou==1).ToList()).Includes(x => x.Depart) .Where(SearchList).OrderByDescending(x => x.PlanStartTime).ToPageListAsync(param.page.PageIndex, param.page.PageSize, totle); var sum = await _SugarClient.Queryable() .Where(SearchList).SumAsync(x=>x.PlanMoney); param.page.TotalCount = totle; return new WorekPlandto { list = data, page = param.page, TotalMoney = sum ?? 0 }; } /// /// 获取报销单详情 /// /// /// [HttpGet] public async Task GetPlanInfo(int id) { if (!await CheckRols()) { throw Oops.Oh("没有权限"); } return await _SugarClient.Queryable().Includes(x=>x.OaWorkPlanShenpis,y=>y.ApprovalStaff).Includes(x=>x.SentStaff).Includes(x=>x.Depart).Includes(x=>x.WorkPlanAttachments).Where(x => x.Keyid == id).FirstAsync(); } /// /// 审批权限 /// /// [HttpPost] public async Task BaoxiaoPlan(OaWorkPlanShenpi param) { if (param.ApprovalStatus == PlanStatusType.unApproval) throw Oops.Oh("不可设置为未审批状态"); if (!await CheckRols()) { throw Oops.Oh("没有权限"); } var data = await _SugarClient.Queryable().Includes(x => x.OaWorkPlanShenpis).Where(x => x.Keyid == param.OA_WorkPlanId).FirstAsync(); if (data == null) throw Oops.Oh("没有找到报销单"); if ( data.ApprovalStatus != PlanStatusType.unApproval) throw Oops.Oh("报销单已经批复完毕"); if (data.ApprovalStatus == PlanStatusType.Uncommitted) { throw Oops.Oh("报销单未提交不可审批"); } OaWorkPlanShenpi shenpi = data.OaWorkPlanShenpis.Where(x => x.ApprovalStaffId == Permissions.MemberId&&x.Buzhou==2).FirstOrDefault(); await _SugarClient.AsTenant().BeginTranAsync(); try { if (shenpi != null) { //已经批复 throw Oops.Oh("报销单已经批复完毕 不可更改"); //shenpi.ApprovalStatus = param.ApprovalStatus; //shenpi.Buzhou = 2; //shenpi.ApprovalTime = DateTime.Now; //shenpi.ApprovalContent = param.ApprovalContent; //await _SugarClient.Updateable(shenpi).ExecuteCommandAsync(); } else { shenpi = new OaWorkPlanShenpi() { ApprovalStaffId = Permissions.MemberId, ApprovalContent = param.ApprovalContent, ApprovalStatus = param.ApprovalStatus, ApprovalTime = DateTime.Now, ///总经理审批为2 Buzhou = 2, CreateTime = DateTime.Now, Operator = Permissions.Name, OA_WorkPlanId = param.OA_WorkPlanId, }; await _SugarClient.Insertable(shenpi).ExecuteCommandAsync(); } if(!(param.RewardResult?.isPureNum()==true)) { throw Oops.Oh("科目选择错误"); } //审批时可修改内容 data.RewardResult = param.RewardResult; data.PlanContent = param.PlanContent; if(param.PlanMoney>0&¶m.PlanMoney<=data.PlanMoney) data.PlanMoney = param.PlanMoney; data.ApprovalTime = DateTime.Now; data.ApprovalStatus = param.ApprovalStatus; data.ApprovalContent = param.ApprovalContent; data.LastUpdateTime = DateTime.Now; await _SugarClient.Updateable(data).ExecuteCommandAsync(); await _SugarClient.AsTenant().CommitTranAsync(); return true; } catch (Exception e) { await _SugarClient.AsTenant().RollbackTranAsync(); throw; } } /// /// 批量审批 /// [HttpPost] public async Task BatchShenPi(BatchShenPiIn param) { if (param.ApprovalStatus == PlanStatusType.unApproval) throw Oops.Oh("不可设置为未审批状态"); if (!param.OA_WorkPlanIds.Any()) throw Oops.Oh("未选中任何报销单"); if (!await CheckRols()) { throw Oops.Oh("没有权限"); } var dataList = await _SugarClient.Queryable().Includes(x => x.OaWorkPlanShenpis).In(param.OA_WorkPlanIds).ToListAsync(); if (dataList == null||dataList.Count==0) throw Oops.Oh("没有找到报销单"); try { await _SugarClient.AsTenant().BeginTranAsync(); foreach (var item in dataList) { if (item.ApprovalStatus != PlanStatusType.unApproval) { await _SugarClient.AsTenant().RollbackTranAsync(); throw Oops.Oh($"{item.SentStaff.Name} 的报销单:{item.PlanContent}---已经批复完毕,终止本次操作"); } if (item.ApprovalStatus == PlanStatusType.Uncommitted) { await _SugarClient.AsTenant().RollbackTranAsync(); throw Oops.Oh($"{item.SentStaff.Name} 的报销单:{item.PlanContent}---已经未提交或者未完成前置审批,终止本次操作"); } if( item.OaWorkPlanShenpis.Where(x=>x.Buzhou == 1&&x.ApprovalStatus== PlanStatusType.Yes).Count()<2) { await _SugarClient.AsTenant().RollbackTranAsync(); throw Oops.Oh($"{item.SentStaff.Name} 的报销单:{item.PlanContent}---未完成前置审批,终止本次操作"); } OaWorkPlanShenpi shenpi = item.OaWorkPlanShenpis.Where(x => x.ApprovalStaffId == Permissions.MemberId && x.Buzhou == 2).FirstOrDefault(); if (shenpi != null) { await _SugarClient.AsTenant().RollbackTranAsync(); //已经批复 throw Oops.Oh($"{item.SentStaff.Name} 的报销单:{item.PlanContent} ----报销单已经批复完毕 不可更改,操作终止"); } else { shenpi = new OaWorkPlanShenpi() { ApprovalStaffId = Permissions.MemberId, ApprovalContent = param.ApprovalContent, ApprovalStatus = param.ApprovalStatus, ApprovalTime = DateTime.Now, //总经理审批为2 Buzhou = 2, CreateTime = DateTime.Now, Operator = Permissions.Name, OA_WorkPlanId = item.Keyid, }; await _SugarClient.Insertable(shenpi).ExecuteCommandAsync(); } //审批时可修改内容 item.ApprovalTime = DateTime.Now; item.ApprovalStatus = param.ApprovalStatus; item.ApprovalContent = param.ApprovalContent; item.LastUpdateTime = DateTime.Now; await _SugarClient.Updateable(item).ExecuteCommandAsync(); } await _SugarClient.AsTenant().CommitTranAsync(); return true; } catch (Exception) { await _SugarClient.AsTenant().RollbackTranAsync(); throw; } } /// /// 判断是否具有权限 /// /// private async Task CheckRols() { var pr = await _OAServices.GetOAPermissions(); Permissions = pr; if (pr != null && pr.MemberId != null) { if (pr.BF_Isbaoxiaojingli) return true; else return false; } else return false; } } /// /// 批量审批参数 /// public class BatchShenPiIn { /// /// 工作计划ID 报销单ID /// [Required] public int[] OA_WorkPlanIds { get; set; } /// /// 审批状态 /// [Required] public PlanStatusType? ApprovalStatus { get; set; } /// /// 审批内容 /// public string ApprovalContent { get; set; } } }