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; }
}
}