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