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 Microsoft.CodeAnalysis.CSharp.Syntax; using Models; 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] [ApiDescriptionSettings("CYOA")] 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; } /// /// 获取预约配送信息 /// /// /// [HttpPost] public async Task GetListAppointmentDeliverList(ApoointmentDeliverSearchParam Param) { if (!await CheckRols()) { throw Oops.Oh("没有权限"); } Expression> SearchList = (x) => true; SearchList = SearchList.And(x => x.FirmId == _OAServices.firmId); SearchList = SearchList.And(x => x.Creater == Permissions.MemberId); if (!string.IsNullOrEmpty(Param.Content)) { SearchList = SearchList.And(x => x.Remark.Contains(Param.Content)); } if (Param.MemberId != null) { SearchList = SearchList.And(x => x.FirmId == Param.MemberId); } if (Param.TimeStart !=null) { SearchList = SearchList.And(x => x.CreateTime> Param.TimeStart); } if (Param.TimeEnd != null) { SearchList = SearchList.And(x => x.CreateTime < Param.TimeEnd.Value.AddDays(1)); } if (Param.DeliverState != null) { SearchList = SearchList.And(x => x.Chulistatus == Param.DeliverState); } //强制增加员工过滤 RefAsync totle = 0; var data = await _SugarClient.Queryable() .Where(SearchList).OrderByDescending(x => x.ChuliTime).ToPageListAsync(Param.page.PageIndex, Param.page.PageSize, totle); Param.page.TotalCount = totle; return new AppointmentDeliverRet { Data = data, page= Param.page, }; } /// /// 创建一个预约配送 /// /// /// [LimitFilter(LimiType = Limttype.User,timespan =5,ResponseMeg ="请勿在5内重复请求",InCount =1)] public async Task CreatAppointmentDeliver(OA_DeliverTixing Param) { if( string.IsNullOrEmpty(Param.Remark)) throw Oops.Oh("内容必填"); if (!await CheckRols()) { throw Oops.Oh("没有权限"); } Param.FirmId = _OAServices.firmId; Param.CreateTime = DateTime.Now; Param.Creater = Permissions.MemberId; Param.Chulistatus = AppointmentDeliverState.unAccept; return await _SugarClient.Insertable(Param).ExecuteCommandAsync(); } /// /// 修改预约提醒 /// /// /// public async Task UpDataAppointmentDeliver(OA_DeliverTixing Param) { if( Param.Chulistatus== AppointmentDeliverState.Accept) throw Oops.Oh("状态不可修改为受理状态"); if (!(Param.Keyid>0)) throw Oops.Oh("Keyid不能为空"); if (string.IsNullOrEmpty(Param.Remark)) throw Oops.Oh("内容必填"); if (!await CheckRols()) { throw Oops.Oh("没有权限"); } var data= await _SugarClient.Queryable().Where(x => x.Keyid == Param.Keyid&&x.FirmId==_OAServices.firmId&&x.Creater==Permissions.MemberId).FirstAsync(); if (data == null) throw Oops.Oh("没找到数据"); if(data.Chulistatus == AppointmentDeliverState.Accept) throw Oops.Oh("已受理状态不可修改"); if (data.Remark!=Param.Remark) { data.Remark = Param.Remark; data.LastUpdateTime = DateTime.Now; data.Updater = Permissions.MemberId; return await _SugarClient.Updateable(data).ExecuteCommandAsync(); } return 1; } /// /// 删除预约提醒 /// /// /// public async Task DelAppointmentDeliver(OA_DeliverTixing Param) { if (!(Param.Keyid > 0)) throw Oops.Oh("Keyid不能为空"); if (!await CheckRols()) { throw Oops.Oh("没有权限"); } var data = await _SugarClient.Queryable().Where(x => x.Keyid == Param.Keyid && x.Creater == Permissions.MemberId&&x.FirmId==_OAServices.firmId).FirstAsync(); if (data == null) throw Oops.Oh("没找到数据或者没有权限"); if( data.Chulistatus!= AppointmentDeliverState.unAccept) throw Oops.Oh("已受理状态不可删除"); return await _SugarClient.Deleteable(data).ExecuteCommandAsync(); } /// /// 获取送货单 /// /// [HttpPost] public async Task GetDeliverPlans(DeliverPlanSearchParam Param) { if (!await CheckRols()) { throw Oops.Oh("没有权限"); } Expression> SearchList = (x) => true; SearchList = SearchList.And(x => x.FirmId == _OAServices.firmId); SearchList = SearchList.And(x => x.Creater == Permissions.MemberId);//只看自己 SearchList = SearchList.And(x => x.ShifouDelivery !=2);//过滤有效 if (Param.DeliverKeyID!=null) { SearchList = SearchList.And(x => x.DriverId == Param.DeliverKeyID); } //客户名称 if (!string.IsNullOrEmpty(Param.CorporateClient)) { SearchList = SearchList.And(x => x.CompanyName.Contains(Param.CorporateClient)); } if (Param.TimeStart != null) { SearchList = SearchList.And(x => x.CreateTime > Param.TimeStart); } if (Param.TimeEnd != null) { SearchList = SearchList.And(x => x.CreateTime < Param.TimeEnd.Value.AddDays(1)); } if (Param.DeliveredState != null) { if (Param.DeliveredState != DeliveredType.Delivered) { SearchList = SearchList.And(x => x.Deliveredstatus != DeliveredType.Delivered); } else { SearchList = SearchList.And(x => x.Deliveredstatus == DeliveredType.Delivered); } } //强制增加员工过滤 RefAsync totle = 0; var data = await _SugarClient.Queryable().Includes(x => x.Driver) .Where(SearchList).OrderByDescending(x => x.CreateTime.Value.Date).OrderBy(x=>SqlFunc.Asc(x.Sort)).ToPageListAsync(Param.page.PageIndex, Param.page.PageSize, totle); Param.page.TotalCount = totle; return new DeliverOderPageRet { Data = data, page = Param.page, }; } /// /// 获取送货单详情 /// /// /// public async Task GetDeliverPlanInfo(Guid KeyId) { if (!await CheckRols()) { throw Oops.Oh("没有权限"); } return await _SugarClient.Queryable().Includes(x => x.Attachments).Includes(x=>x.Driver).Includes(x=>x.Manager) .Where(x => x.Creater == Permissions.MemberId && x.Keyid == KeyId && x.ShifouDelivery != 2).FirstAsync(); } /// /// 判断是否具有权限 /// /// 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; } /// /// 配送预约 /// public class AppointmentDeliverRet { /// /// 数据列表 /// public List Data { get; set; } /// /// 页面参数 /// public PageModel page { get; set; } } /// /// 配送单数据返回 /// public class DeliverOderPageRet { /// /// 数据列表 /// public List Data { get; set; } /// /// 页面参数 /// public PageModel page { get; set; } } }