移动系统liao
2025-02-08 479b6cfc60113f692f6f9146bcd7b9231a32b0e8
cylsg/cylsg.Application/CyOS/CyOSBaoXiaoJingLiController.cs
New file
@@ -0,0 +1,231 @@
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
{
    /// <summary>
    /// 川印报销经理API
    /// </summary>
    [Authorize]
    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");
        }
        /// <summary>
        ///  查询
        /// </summary>
        [HttpPost]
        public async Task<WorekPlandto> getplanelist(SearchOaWorekPlan param)
        {
            if (!await CheckRols())
            {
                throw Oops.Oh("没有权限");
            }
            Expression<Func<OaWorkPlan, bool>> 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<int> totle = 0;
            var data = await _SugarClient.Queryable<OaWorkPlan>().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<OaWorkPlan>()
                .Where(SearchList).SumAsync(x=>x.PlanMoney);
            param.page.TotalCount = totle;
            return new WorekPlandto
            {
                list = data,
                page = param.page,
                TotalMoney = sum ?? 0
            };
        }
        /// <summary>
        ///  获取报销单详情
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        [HttpGet]
        public async Task<OaWorkPlan> GetPlanInfo(int id)
        {
            if (!await CheckRols())
            {
                throw Oops.Oh("没有权限");
            }
            return await _SugarClient.Queryable<OaWorkPlan>().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();
        }
        /// <summary>
        /// 审批权限
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public async Task<bool> BaoxiaoPlan(OaWorkPlanShenpi param)
        {
            if (param.ApprovalStatus == PlanStatusType.unApproval)
                throw Oops.Oh("不可设置为未审批状态");
            if (!await CheckRols())
            {
                throw Oops.Oh("没有权限");
            }
            var data = await _SugarClient.Queryable<OaWorkPlan>().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&&param.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;
            }
        }
        /// <summary>
        /// 判断是否具有权限
        /// </summary>
        /// <returns></returns>
        private async Task<bool> 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;
        }
    }
}