using cylsg.Core; using cylsg.Model.ECTEModel; using cylsg.Model.TransferOrder; using cylsg.Model.utilityViewModel; using cylsg.utility.Extend; using Cylsg.Filter; using ECTESTOA; using EzCoreNet.Redis; using Furion.LinqBuilder; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; using TencentCloud.Hunyuan.V20230901.Models; using TencentCloud.Mrs.V20200910.Models; namespace cylsg.Application.CyOS { /// /// 川印普通员工控制器 /// [Authorize] public class CyOSStaffController : IDynamicApiController { private readonly IOAServices _OAServices; private readonly ISqlSugarClient _SugarClient; private readonly IEzCoreNetRedisService _ezCoreNetRedisService; private ECTESTOAPermissions Permissions; public CyOSStaffController(IOAServices oaServices, ISqlSugarClient sugarClient,IEzCoreNetRedisService netRedisService) { _OAServices = oaServices; _SugarClient = sugarClient.AsTenant().GetConnection("ECTESTOADB"); _ezCoreNetRedisService = netRedisService; } /// /// 查询 /// [HttpPost] public async Task getplanelist(SearchOaWorekPlan param) { if(! await CheckRols()) { throw Oops.Oh("没有权限"); } Expression> SearchList = (x) => true; SearchList = SearchList.And(x => x.MemberId == _OAServices.firmId); SearchList = SearchList.And(x => x.PlanType == 3); SearchList = SearchList.And(x => x.PlanDataType == 17); if (!string.IsNullOrEmpty(param.StaffName)) { SearchList = SearchList.And(x => x.SentStaff.Name.Contains(param.StaffName)); } if ( param.StaffMemberIdId !=null) { SearchList = SearchList.And(x => x.SentStaffId==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); } //强制增加员工过滤 SearchList = SearchList.And(x => x.SentStaffId == Permissions.MemberId); RefAsync totle=0; var data= await _SugarClient.Queryable< OaWorkPlan >().Includes(x=>x.SentStaff).Includes(x=>x.OaWorkPlanShenpis).Where(SearchList).OrderByDescending(x => x.PlanStartTime).ToPageListAsync(param.page.PageIndex,param.page.PageSize, totle); param.page.TotalCount = totle; var sum = await _SugarClient.Queryable().Includes(x => x.SentStaff).Where(SearchList).SumAsync(x => x.PlanMoney); return new WorekPlandto { list = data, page = param.page, TotalMoney=sum??0 }; } /// /// 创建报销单 /// /// /// [LimitFilter(LimiType = Limttype.User, timespan = 10, ResponseMeg = "请勿在10秒内重复申请该接口")] public async Task CreatOderAsync(OaWorkPlan pram) { if (!await CheckRols()) { throw Oops.Oh("没有权限"); } if(pram.PlanMoney<=0) { throw Oops.Oh("报销金额不可小于等于0"); } if(string.IsNullOrEmpty(pram.PlanContent)) { throw Oops.Oh("报销摘要不可为空"); } if(pram.HoubufapiaoStatus==null) { throw Oops.Oh("发票状态不可为空"); } if(string.IsNullOrEmpty(pram.RewardResult)) { throw Oops.Oh("科目ID RewardResult不能为空"); } OaSubjectSet? kemu = null; try { var kemuid= pram.RewardResult.toInt(); kemu= _SugarClient.Queryable().Where(x => x.Keyid == kemuid && x.FirmId == _OAServices.firmId && x.SubjectType == "贷" && x.Status == true).First(); if(kemu==null) throw Oops.Oh("科目选择错误,或者失效"); } catch (Exception) { throw Oops.Oh("科目 RewardResult 选择错误,或者失效"); } if(pram.HoubufapiaoStatus== HoubufapiaoStatusType.You) { if( pram.WorkPlanAttachments.Where(x=>x.AttachmentType==1).Count()<=0) throw Oops.Oh("有发票时,必须上传发票"); } if (pram.WorkPlanAttachments?.Count > 0) { foreach (var item in pram.WorkPlanAttachments) { if( item.AttachmentType<=0||item.AttachmentType>3) throw Oops.Oh("附件类型AttachmentType错误"); if(string.IsNullOrEmpty(item.PlanAttachment)) { throw Oops.Oh("附件地址不能为空"); } item.CreateTime = DateTime.Now; item.Operator = Permissions.Name; } } if (pram.ApprovalStatus != PlanStatusType.Uncommitted) pram.EvaluationContent = _ezCoreNetRedisService.GetYYYMMddAnd4sn(); else pram.EvaluationContent = ""; pram.PlanType = 3;//固定为3 pram.MemberId = _OAServices.firmId; pram.SentStaffId = Permissions.MemberId; pram.ReciveStaffId = Permissions.MemberId; pram.PlanDataType = 17; pram.DepartId = Permissions.DepartId; pram.PlanStartTime = DateTime.Now; pram.RewardContent = kemu.SubjectName; pram.LastUpdateTime = DateTime.Now; pram.Operator = Permissions.Name; pram.PlanTitle = ""; pram.PlanRunTime = DateTime.Now; pram.PlanRemark = ""; pram.PlanPeople = Permissions.Name; pram.PlanComplany = ""; if(pram.PlanStatus!= PlanStatusType.Uncommitted) { pram.PlanStatus = PlanStatusType.unApproval; } pram.ApprovalStaffId = Guid.Empty; pram.ApprovalTime=DateTime.Now; pram.ApprovalContent = ""; pram.EvaluationStaffId = Guid.Empty; pram.EvaluationTime = DateTime.Now; pram.RewardMoney = 0; pram.RewardType = 1; pram.Keyid = null; await _SugarClient.InsertNav(pram).Include(x=>x.WorkPlanAttachments).ExecuteCommandAsync(); return true; } /// /// 创建报销单 /// /// /// [LimitFilter(LimiType = Limttype.User, timespan = 10, ResponseMeg = "请勿在10秒内重复申请该接口")] public async Task EditOderAsync(OaWorkPlan pram) { if (!await CheckRols()) { throw Oops.Oh("没有权限"); } if (pram.WorkPlanAttachments?.Count > 0) { foreach (var item in pram.WorkPlanAttachments) { if (item.AttachmentType <= 0 || item.AttachmentType > 3) throw Oops.Oh("附件类型AttachmentType错误"); if (string.IsNullOrEmpty(item.PlanAttachment)) { throw Oops.Oh("附件地址不能为空"); } if(item.CreateTime==null) item.CreateTime = DateTime.Now; if (item.Operator == null) item.Operator = Permissions.Name; } } //获取原始数据 var data= await _SugarClient.Queryable().Includes(x=>x.WorkPlanAttachments).Includes(x=>x.OaWorkPlanShenpis).Where(x=>x.Keyid==pram.Keyid&&x.SentStaffId==Permissions.MemberId).FirstAsync(); if(data==null) throw Oops.Oh("没有权限"); if (data.ApprovalStatus != PlanStatusType.Uncommitted) { if (data.ApprovalStatus != PlanStatusType.unApproval || data.OaWorkPlanShenpis.Count > 0) { if (data.HoubufapiaoStatus == HoubufapiaoStatusType.HouBuFaPiao && data.HoubufapiaoStatus == HoubufapiaoStatusType.HouBuFaPiao) { //后补发票,只能修改发票和附件 await _SugarClient.UpdateNav(data).Include(x => x.WorkPlanAttachments).ExecuteCommandAsync(); return true; } else throw Oops.Oh("已经进入审批流程不可修改"); } } if (data.RewardResult != pram.RewardResult) { try { OaSubjectSet kemu = null; var kemuid = pram.RewardResult.toInt(); kemu = _SugarClient.Queryable().Where(x => x.Keyid == kemuid && x.FirmId == _OAServices.firmId && x.SubjectType == "贷" && x.Status == true).First(); if (kemu == null) throw Oops.Oh("科目选择错误,或者失效"); data.RewardResult = pram.RewardResult; data.RewardContent = kemu.SubjectName; } catch (Exception) { throw Oops.Oh("科目 RewardResult 选择错误,或者失效"); } } if(data.ApprovalStatus== PlanStatusType.Uncommitted&&pram.ApprovalStatus== PlanStatusType.unApproval) { //重新提交必须修改新的单号 data.EvaluationContent = _ezCoreNetRedisService.GetYYYMMddAnd4sn(); data.ApprovalStatus = pram.ApprovalStatus; } data.PlanMoney=pram.PlanMoney; //摘要 data.PlanContent =pram.PlanContent; //发票状态 data.HoubufapiaoStatus = pram.HoubufapiaoStatus; //附件 data.WorkPlanAttachments = pram.WorkPlanAttachments; data.LastUpdateTime = DateTime.Now; //data .PlanType 不可更改 =3 await _SugarClient.UpdateNav(data).Include(x => x.WorkPlanAttachments).ExecuteCommandAsync(); return true; } /// /// 获取详情 /// /// /// [HttpGet] public async Task GetPlanInfo(int id) { if (!await CheckRols()) { throw Oops.Oh("没有权限"); } return await _SugarClient.Queryable().Includes(x=>x.SentStaff).Includes(x => x.OaWorkPlanShenpis,y=>y.ApprovalStaff).Includes(x=>x.Depart).Includes(x=>x.WorkPlanAttachments).Where(x => x.Keyid == id).FirstAsync(); } /// /// 删除 /// /// [HttpDelete] public async Task DelOderAsync(int id ) { if(id==0) { throw Oops.Oh("编号错误"); } if (!await CheckRols()) { throw Oops.Oh("没有权限"); } //获取原始数据 var data = await _SugarClient.Queryable().Includes(x => x.WorkPlanAttachments).Includes(x => x.OaWorkPlanShenpis).Where(x => x.Keyid == id && x.MemberId == Permissions.MemberId).FirstAsync(); if (data == null) throw Oops.Oh("没找到申请"); if (data.ApprovalStatus == PlanStatusType.Yes || data.OaWorkPlanShenpis.Count > 0) { throw Oops.Oh("已经进入审批流程不可修改"); } await _SugarClient.DeleteNav(data).Include(x => x.WorkPlanAttachments).ExecuteCommandAsync(); return true; } /// /// 判断是否具有权限 /// /// private async Task< bool> CheckRols() { var pr= await _OAServices.GetOAPermissions(); Permissions = pr ; if (pr != null &&pr.MemberId!=null) { return true; } else return false; } } /// /// //搜索参数 /// public class SearchOaWorekPlan { /// /// 页面参数 /// public PageModel page { get; set; } /// /// 员工姓名 /// public string? StaffName { get; set; } /// /// 员工Id /// public Guid? StaffMemberIdId { get; set; } /// /// 状态 是否审批 /// public PlanStatusType? ApprovalStatus { get; set; } /// /// 更正为报销状态 /// public BaoxiaoStausType? EvaluationStatus { get; set; } /// /// 起始时间 /// public DateTime? PlanStartTimeStart { get; set; } /// /// 结束时间 /// public DateTime? PlanStartTimeEnd { get; set; } /// /// 类别,默认为17 只能为17 /// public int? PlanDataType { get; set; } } public class WorekPlandto { /// /// 数据 /// public List< OaWorkPlan> list { get; set; } /// /// 页面统计 /// public PageModel page { get; set; } /// /// 统计 /// public decimal TotalMoney { get; set; } = 0; } }