移动系统liao
2025-03-07 8c92db325f7c801d2df095763a17673fa6c92085
cylsg/cylsg.Application/CyOS/CyOSBaoXiaoJingLiController.cs
@@ -1,5 +1,6 @@
using cylsg.Model.ECTEModel;
using cylsg.Model.utilityViewModel;
using cylsg.utility.Extend;
using ECTESTOA;
using Furion.LinqBuilder;
using Models;
@@ -16,6 +17,7 @@
    /// 川印报销经理API
    /// </summary>
    [Authorize]
    [ApiDescriptionSettings("CYOA")]
    public class CyOSBaoXiaoJingLiController: IDynamicApiController
    {
        private readonly IOAServices _OAServices;
@@ -42,6 +44,7 @@
            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);
@@ -135,6 +138,10 @@
                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
@@ -168,6 +175,17 @@
                    };
                    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;
@@ -191,6 +209,101 @@
        }
        /// <summary>
        /// 批量审批
        /// </summary>
        [HttpPost]
        public async Task<bool> BatchShenPi(BatchShenPiIn param)
        {
            if (param.ApprovalStatus == PlanStatusType.unApproval)
                throw Oops.Oh("不可设置为未审批状态");
            if (!param.OA_WorkPlanIds.Any())
                throw Oops.Oh("未选中任何报销单");
            if (!await CheckRols())
            {
                throw Oops.Oh("没有权限");
            }
            var dataList = await _SugarClient.Queryable<OaWorkPlan>().Includes(x => x.OaWorkPlanShenpis).In(param.OA_WorkPlanIds).ToListAsync();
            if (dataList == null||dataList.Count==0)
                throw Oops.Oh("没有找到报销单");
            try
            {
                await _SugarClient.AsTenant().BeginTranAsync();
                foreach (var item in dataList)
                {
                    if (item.ApprovalStatus != PlanStatusType.unApproval)
                    {
                        await _SugarClient.AsTenant().RollbackTranAsync();
                        throw Oops.Oh($"{item.SentStaff.Name} 的报销单:{item.PlanContent}---已经批复完毕,终止本次操作");
                    }
                    if (item.ApprovalStatus == PlanStatusType.Uncommitted)
                    {
                        await _SugarClient.AsTenant().RollbackTranAsync();
                        throw Oops.Oh($"{item.SentStaff.Name} 的报销单:{item.PlanContent}---已经未提交或者未完成前置审批,终止本次操作");
                    }
                   if( item.OaWorkPlanShenpis.Where(x=>x.Buzhou == 1&&x.ApprovalStatus== PlanStatusType.Yes).Count()<2)
                    {
                        await _SugarClient.AsTenant().RollbackTranAsync();
                        throw Oops.Oh($"{item.SentStaff.Name} 的报销单:{item.PlanContent}---未完成前置审批,终止本次操作");
                    }
                    OaWorkPlanShenpi shenpi = item.OaWorkPlanShenpis.Where(x => x.ApprovalStaffId == Permissions.MemberId && x.Buzhou == 2).FirstOrDefault();
                    if (shenpi != null)
                    {
                        await _SugarClient.AsTenant().RollbackTranAsync();
                        //已经批复
                        throw Oops.Oh($"{item.SentStaff.Name} 的报销单:{item.PlanContent} ----报销单已经批复完毕 不可更改,操作终止");
                    }
                    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 = item.Keyid,
                        };
                        await _SugarClient.Insertable(shenpi).ExecuteCommandAsync();
                    }
                    //审批时可修改内容
                    item.ApprovalTime = DateTime.Now;
                    item.ApprovalStatus = param.ApprovalStatus;
                    item.ApprovalContent = param.ApprovalContent;
                    item.LastUpdateTime = DateTime.Now;
                    await _SugarClient.Updateable(item).ExecuteCommandAsync();
                }
                await _SugarClient.AsTenant().CommitTranAsync();
                return true;
            }
            catch (Exception)
            {
                await _SugarClient.AsTenant().RollbackTranAsync();
                throw;
            }
        }
        /// <summary>
        /// 判断是否具有权限
        /// </summary>
        /// <returns></returns>
@@ -210,5 +323,27 @@
                return false;
        }
    }
    /// <summary>
    /// 批量审批参数
    /// </summary>
    public class BatchShenPiIn
    {
        /// <summary>
        /// 工作计划ID 报销单ID
        /// </summary>
        [Required]
        public int[] OA_WorkPlanIds { get; set; }
        /// <summary>
        /// 审批状态
        /// </summary>
        [Required]
        public PlanStatusType? ApprovalStatus { get; set; }
        /// <summary>
        /// 审批内容
        /// </summary>
        public string ApprovalContent { get; set; }
    }
}