Exemple #1
0
        /// <summary>
        /// 审核单据
        /// </summary>
        /// <param name="param">条件实体</param>
        /// <returns></returns>
        public WCFAddUpdateResult AuditBill(WF_AuditRecordParam param)
        {
            WCFAddUpdateResult rst = new WCFAddUpdateResult();

            try
            {
                #region 判断提交值
                this.CheckSession();
                if (string.IsNullOrEmpty(param.SourceTableEngName))
                {
                    throw new WarnException("请指定相关审核业务单据!");
                }
                if (param.SourceBillGuid == null)
                {
                    throw new WarnException("请指定相关审核业务单据ID!");
                }
                //if (string.IsNullOrEmpty(param.SourceBillNo)) throw new WarnException("请指定相关审核业务单据编号!");
                if (param.AuditResult.ToStringHasNull() == "")
                {
                    throw new WarnException("请指定审批意见!");
                }


                #endregion
                #region 获取相关表定义
                WF_TableResult tblRst = new WF_TableResult();
                WF_TableBLL    tblBll = new WF_TableBLL();
                tblBll.SessionInfo = this.SessionInfo;
                tblRst             = tblBll.GetInfo(new WF_TableParam()
                {
                    WF_TableEngName = param.SourceTableEngName
                });
                if (tblRst == null || tblRst.WF_TableID <= 0)
                {
                    throw new WarnException("系统中未发现定义的业务表!");
                }
                if (tblRst.WF_TableFieldList == null || tblRst.WF_TableFieldList.Count < 0)
                {
                    throw new WarnException("系统中未发现定义的业务表相关字段!");
                }
                if (!tblRst.WF_TableFieldList.Exists(a => a.IsKeyGuid.ToBooleanHasNull() == true))
                {
                    throw new WarnException("系统中未发现定义的业务表相关主键字段!");
                }
                #endregion
                #region 判断当前记录状态
                object sourceInfo = this.GetSourceAuditStatus(tblRst, param.SourceBillGuid);
                string oldStatus  = sourceInfo.GetType().GetProperty("Status").GetValue(sourceInfo, null).ToStringHasNull();
                if (oldStatus.ToLower() == "complete")
                {
                    throw new WarnException("您的单据已审核完成,不允许提交!");
                }
                if (oldStatus.ToLower() == "nopass")
                {
                    throw new WarnException("您提交的单据已拒绝,不允许再次提交!");
                }
                #endregion
                #region 判断是否已提交业务单据,否则加入审核记录
                string billStatus = "", billApproveStatus = "";
                List <WF_AuditRecordResult> stepList = new List <WF_AuditRecordResult>();
                WhereClip whereClip = WF_AuditRecord._.SourceBillGuid == param.SourceBillGuid &&
                                      WF_AuditRecord._.GCompanyID == this.SessionInfo.CompanyID &&
                                      WF_AuditRecord._.IsDeleted == false &&
                                      WF_AuditRecord._.IsCurrent > 0 &&
                                      WF_AuditRecord._.SourceTableEngName == param.SourceTableEngName;
                stepList = this.SelectList <WF_AuditRecordResult>(whereClip, WF_AuditRecord._.SeqNo.Asc);
                if (stepList == null && stepList.Count <= 0)
                {
                    throw new WarnException("您的相关单据未提交!");
                }
                List <WF_AuditRecordResult> newAuditRecList = new List <WF_AuditRecordResult>();
                WF_AuditRecordResult        currAuditRec    = new WF_AuditRecordResult();
                WF_AuditRecordResult        nextAuditRec    = new WF_AuditRecordResult();
                #region 添加审核记录
                if (!stepList.Exists(a => a.IsCurrent > 0))
                {
                    throw new WarnException("当前业务单据已审核完成!");
                }
                currAuditRec = stepList.FirstOrDefault(a => a.IsCurrent == 1 && a.AuditEmpIDs.IndexOf("," + this.SessionInfo.UserID.ToStringHasNull() + ",") >= 0);
                if (currAuditRec == null)
                {
                    throw new WarnException("您没有审核当前业务单据的权限!");
                }
                nextAuditRec = stepList.FirstOrDefault(a => a.IsCurrent == 2 && a.SeqNo > currAuditRec.SeqNo);
                #region 审核情况
                int stdManNum      = currAuditRec.GreeMans.ToInt32();
                int stdCheckManNum = currAuditRec.AuditEmpIDs.ToStringHasNull().Split(',').ToArray().Where(a => a.ToStringHasNull().Trim() != "").Distinct().ToArray().Length;
                if (stdManNum > stdCheckManNum)
                {
                    stdManNum = stdCheckManNum;
                }
                if (stdManNum <= 0)
                {
                    stdManNum = 1;
                }
                List <WF_AuditRecordLineResult> auditRecList = this.GetAuditRecLineList(new WF_AuditRecordLineParam()
                {
                    WF_RecGuid = currAuditRec.WF_RecGuid
                });

                if (auditRecList.Exists(a => a.AuditEmpID == this.SessionInfo.UserID && a.AuditResult.ToStringHasNull() != ""))
                {
                    throw new WarnException("您已审核当前业务单据,不允许重复审核!");
                }
                WF_AuditRecordLineResult currEmpAuditRec = auditRecList.Find(a => a.AuditEmpID == this.SessionInfo.UserID);
                #region 更新审核人意见
                if (currEmpAuditRec == null)
                {
                    currEmpAuditRec                    = new WF_AuditRecordLineResult();
                    currEmpAuditRec.WF_RecGuid         = currAuditRec.WF_RecGuid;
                    currEmpAuditRec.SourceBillGuid     = currAuditRec.SourceBillGuid;
                    currEmpAuditRec.WFAuditGuid        = currAuditRec.WFAuditGuid;
                    currEmpAuditRec.WFAuditLineGuid    = currAuditRec.WFAuditLineGuid;
                    currEmpAuditRec.SourceTableEngName = currAuditRec.SourceTableEngName;
                    currEmpAuditRec.SourceBillNo       = currAuditRec.SourceBillNo;
                    currEmpAuditRec.AuditEmpID         = this.SessionInfo.UserID;
                    currEmpAuditRec.AuditEmpName       = this.SessionInfo.UserName;
                    currEmpAuditRec.AuditResult        = param.AuditResult;
                    currEmpAuditRec.AuditRemark        = param.AuditRemark;
                }
                else
                {
                    currEmpAuditRec.AuditResult = param.AuditResult;
                    currEmpAuditRec.AuditRemark = param.AuditRemark;
                }
                this.AddOrUpdateAuditRecLine(currEmpAuditRec);
                #endregion
                #region 重新获取当前步骤的审批记录
                auditRecList = this.GetAuditRecLineList(new WF_AuditRecordLineParam()
                {
                    WF_RecGuid = currAuditRec.WF_RecGuid
                });
                int currManGreeNum = auditRecList.Where(a => a.AuditResult.ToStringHasNull() == "同意").Select(a => a.AuditEmpID).Distinct().ToArray().Length;
                #endregion
                #region  意的处理
                if (param.AuditResult == "同意")
                {
                    currManGreeNum++;
                    if (currManGreeNum >= stdManNum)//审核人数通过
                    {
                        currAuditRec.IsCurrent      = 0;
                        currAuditRec.AuditResult    = param.AuditResult;
                        currAuditRec.AuditRemark    = param.AuditRemark;
                        currAuditRec.UpdatedEmpID   = this.SessionInfo.UserID;
                        currAuditRec.UpdatedEmpName = this.SessionInfo.UserName;
                        currAuditRec.UpdatedTime    = DateTime.Now;
                        if (nextAuditRec == null)//审核完成
                        {
                            billStatus        = "Complete";
                            billApproveStatus = "审核完成";
                            ChangeSourceBllAuditStatus(tblRst, billStatus, billApproveStatus, sourceInfo);
                            AfterAuditExeMethod(param.SourceTableEngName, oldStatus, billStatus, tblRst.TriggerStatus, tblRst.AfterAuditMethodPath, tblRst.AfterAuditMethodName, param.SourceBillGuid);
                        }
                        else
                        {
                            this.Update <WF_AuditRecordResult>(new WF_AuditRecordResult()
                            {
                                IsCurrent      = 1,
                                UpdatedEmpID   = this.SessionInfo.UserID,
                                UpdatedEmpName = this.SessionInfo.UserName,
                                UpdatedTime    = DateTime.Now
                            }, WF_AuditRecord._.WF_RecGuid == nextAuditRec.WF_RecGuid);
                        }
                        this.Update <WF_AuditRecordResult>(currAuditRec, WF_AuditRecord._.WF_RecGuid == currAuditRec.WF_RecGuid);
                    }
                }
                #endregion
                #region 拒绝和驳回的处理(NoPass,Reject)
                else
                {
                    currAuditRec.IsCurrent      = 0;
                    currAuditRec.AuditResult    = param.AuditResult;
                    currAuditRec.AuditRemark    = param.AuditRemark;
                    currAuditRec.UpdatedEmpID   = this.SessionInfo.UserID;
                    currAuditRec.UpdatedEmpName = this.SessionInfo.UserName;
                    currAuditRec.UpdatedTime    = DateTime.Now;
                    this.Update <WF_AuditRecordResult>(currAuditRec, WF_AuditRecord._.WF_RecGuid == currAuditRec.WF_RecGuid);
                    if (param.AuditResult == "拒绝")
                    {
                        billStatus        = "NoPass";
                        billApproveStatus = "拒绝";
                    }
                    else
                    {
                        billStatus        = "New";
                        billApproveStatus = "待提交";
                    }
                    ChangeSourceBllAuditStatus(tblRst, billStatus, billApproveStatus, sourceInfo);
                    AfterAuditExeMethod(param.SourceTableEngName, oldStatus, billStatus, tblRst.TriggerStatus, tblRst.AfterAuditMethodPath, tblRst.AfterAuditMethodName, param.SourceBillGuid);

                    //将后续审批节点失效掉(删除)
                    this.Update <WF_AuditRecordResult>(new WF_AuditRecordResult()
                    {
                        IsDeleted      = true,
                        UpdatedEmpID   = this.SessionInfo.UserID,
                        UpdatedEmpName = this.SessionInfo.UserName,
                        UpdatedTime    = DateTime.Now
                    }, WF_AuditRecord._.IsCurrent == 2 &&
                                                       WF_AuditRecord._.WFAuditGuid == currAuditRec.WFAuditGuid &&
                                                       WF_AuditRecord._.SourceBillGuid == currAuditRec.SourceBillGuid &&
                                                       WF_AuditRecord._.IsDeleted == false);
                    this.Update <WF_AuditRecordLineResult>(new WF_AuditRecordLineResult()
                    {
                        IsDeleted      = true,
                        UpdatedEmpID   = this.SessionInfo.UserID,
                        UpdatedEmpName = this.SessionInfo.UserName,
                        UpdatedTime    = DateTime.Now
                    }, WF_AuditRecordLine._.IsDeleted == false &&
                                                           WF_AuditRecordLine._.AuditResult.IsNull("") == "" &&
                                                           WF_AuditRecordLine._.WFAuditGuid == currAuditRec.WFAuditGuid &&
                                                           WF_AuditRecordLine._.SourceBillGuid == currAuditRec.SourceBillGuid);
                }
                #endregion
                #endregion
                #endregion
                #endregion
                rst.Key = 1;
            }
            catch (WarnException exp)
            {
                throw exp;
            }
            catch (System.Exception exp)
            {
                LogInfoBLL.WriteLog(this.SessionInfo, exp);
            }
            return(rst);
        }
Exemple #2
0
        public WCFAddUpdateResult AddOrUpdateAuditRecLine(WF_AuditRecordLineResult param)
        {
            WCFAddUpdateResult ret = new WCFAddUpdateResult();

            try
            {
                if (param.WF_RecGuid == null)
                {
                    throw new WarnException("请指定关联审批记录ID!");
                }
                if (param.SourceBillGuid == null)
                {
                    throw new WarnException("请指定关联单据ID!");
                }
                if (param.WFAuditGuid == null)
                {
                    throw new WarnException("请指定关联审批基准ID!");
                }
                if (param.WFAuditLineGuid == null)
                {
                    throw new WarnException("请指定关联审批基准明细ID!");
                }
                if (string.IsNullOrEmpty(param.SourceTableEngName))
                {
                    throw new WarnException("请指定关联业务表名!");
                }
                //if (string.IsNullOrEmpty(param.SourceBillNo)) throw new WarnException("请指定关联业务单据编号!");
                if (param.WF_RecLineGuid == null)
                {
                    param.WF_RecLineGuid = Guid.NewGuid();
                    param.GCompanyID     = this.SessionInfo.CompanyID;
                    param.CreatedEmpID   = this.SessionInfo.UserID;
                    param.CreatedEmpName = this.SessionInfo.UserName;
                    param.CreatedTime    = DateTime.Now;
                    param.IsDeleted      = false;
                    this.Insert <WF_AuditRecordLineResult>(param);
                }
                else
                {
                    param.UpdatedEmpID   = this.SessionInfo.UserID;
                    param.UpdatedEmpName = this.SessionInfo.UserName;
                    param.UpdatedTime    = DateTime.Now;
                    this.Update <WF_AuditRecordLineResult>(param, WF_AuditRecordLine._.WFAuditLineGuid == param.WF_RecLineGuid);
                }
                ret.Key            = param.WF_RecLineID;
                ret.KeyGuid        = param.WF_RecLineGuid;
                ret.BillNo         = param.SourceBillNo;
                ret.CreatedTime    = param.CreatedTime;
                ret.CreatedEmpID   = param.CreatedEmpID;
                ret.CreatedEmpName = param.CreatedEmpName;
                ret.UpdatedEmpID   = param.UpdatedEmpID;
                ret.UpdatedEmpName = param.UpdatedEmpName;
                ret.UpdatedTime    = param.UpdatedTime;
            }
            catch (WarnException exp)
            {
                throw exp;
            }
            catch (System.Exception exp)
            {
                LogInfoBLL.WriteLog(this.SessionInfo, exp);
            }
            return(ret);
        }
Exemple #3
0
        /// <summary>
        /// 提交审核
        /// </summary>
        /// <param name="param">条件实体</param>
        /// <returns>返回生效的当前审核</returns>
        public WCFAddUpdateResult SubmitBill(WF_AuditRecordParam param)
        {
            WCFAddUpdateResult rst = new WCFAddUpdateResult();

            try
            {
                #region 判断提交值
                this.CheckSession();
                if (string.IsNullOrEmpty(param.SourceTableEngName))
                {
                    throw new WarnException("请指定相关审核业务单据!");
                }
                if (param.SourceBillGuid == null)
                {
                    throw new WarnException("请指定相关审核业务单据ID!");
                }
                //if (string.IsNullOrEmpty(param.SourceBillNo)) throw new WarnException("请指定相关审核业务单据编号!");

                #endregion
                #region 获取相关表定义
                WF_TableResult tblRst = new WF_TableResult();
                WF_TableBLL    tblBll = new WF_TableBLL();
                tblBll.SessionInfo = this.SessionInfo;
                tblRst             = tblBll.GetInfo(new WF_TableParam()
                {
                    WF_TableEngName = param.SourceTableEngName
                });
                if (tblRst == null || tblRst.WF_TableID <= 0)
                {
                    throw new WarnException("系统中未发现定义的业务表!");
                }
                if (tblRst.WF_TableFieldList == null || tblRst.WF_TableFieldList.Count < 0)
                {
                    throw new WarnException("系统中未发现定义的业务表相关字段!");
                }
                if (!tblRst.WF_TableFieldList.Exists(a => a.IsKeyGuid.ToBooleanHasNull() == true))
                {
                    throw new WarnException("系统中未发现定义的业务表相关主键字段!");
                }
                #endregion
                #region 判断当前记录状态
                object sourceInfo = this.GetSourceAuditStatus(tblRst, param.SourceBillGuid);
                //判断是否取消
                bool isCancel = sourceInfo.GetType().GetProperty("IsCancel") != null?sourceInfo.GetType().GetProperty("IsCancel").GetValue(sourceInfo, null).ToBooleanHasNull() : false;

                if (isCancel)
                {
                    throw new WarnException("您的单据已取消不允许执行当前操作!");
                }
                string oldStatus = sourceInfo.GetType().GetProperty("Status").GetValue(sourceInfo, null).ToStringHasNull();
                if (oldStatus.ToLower() == "approve")
                {
                    throw new WarnException("您的单据已提交,不允许重复提交!");
                }
                if (oldStatus.ToLower() == "complete")
                {
                    throw new WarnException("您的单据已审核完成,不允许提交!");
                }
                if (oldStatus.ToLower() == "nopass")
                {
                    throw new WarnException("您提交的单据已拒绝,不允许再次提交!");
                }
                #endregion
                #region 获取相关审核基础流程
                WF_AuditBillBLL auditBll = new WF_AuditBillBLL();
                auditBll.SessionInfo = this.SessionInfo;
                WF_AuditBillResult auditBillRst = auditBll.GetInfo(new WF_AuditBillParam()
                {
                    TableName = param.SourceTableEngName
                });
                if (auditBillRst == null || auditBillRst.WFAuditGuid == null ||
                    auditBillRst.WF_AuditBillLineList == null || auditBillRst.WF_AuditBillLineList.Count <= 0)
                {
                    throw new WarnException("未定相关业务单据的审核流程!");
                }
                if (auditBillRst.WF_AuditBillLineList.Exists(a => a.AuditEmpIDs.ToStringHasNull().Trim() == "" && a.NextType != "审核完成"))
                {
                    throw new WarnException("相关审批流程中,未找到相关审核人!");
                }
                #endregion
                #region 判断是否已提交业务单据,否则加入审核记录
                WF_AuditRecordResult currentStep = new WF_AuditRecordResult();
                WhereClip            whereClip   = WF_AuditRecord._.SourceBillGuid == param.SourceBillGuid &&
                                                   WF_AuditRecord._.GCompanyID == this.SessionInfo.CompanyID &&
                                                   WF_AuditRecord._.IsDeleted == false &&
                                                   WF_AuditRecord._.SourceTableEngName == param.SourceTableEngName &&
                                                   WF_AuditRecord._.IsCurrent == true;
                currentStep = this.Select <WF_AuditRecordResult>(whereClip);
                if (currentStep != null && currentStep.WF_RecGuid != null)
                {
                    throw new WarnException("当前单据已提交,正处于审核流程中,不允许重复提交!");
                }
                List <WF_AuditRecordResult> newAuditRecList = new List <WF_AuditRecordResult>();
                WF_AuditRecordResult        newAuditRec     = new WF_AuditRecordResult();
                #region 添加提交LOG记录
                newAuditRec.WF_RecGuid         = Guid.NewGuid();
                newAuditRec.GCompanyID         = this.SessionInfo.CompanyID;
                newAuditRec.SourceTableEngName = auditBillRst.TableName;
                newAuditRec.SourceBillNo       = param.SourceBillNo;
                newAuditRec.SourceBillGuid     = param.SourceBillGuid;
                newAuditRec.WFAuditGuid        = auditBillRst.WFAuditGuid;
                newAuditRec.WFAuditLineGuid    = null;
                newAuditRec.SeqNo          = 0;
                newAuditRec.GreeMans       = 0;
                newAuditRec.AuditEmpIDs    = "," + this.SessionInfo.UserID + ",";
                newAuditRec.AuditEmpNames  = this.SessionInfo.UserName;
                newAuditRec.IsCurrent      = 0;
                newAuditRec.AuditResult    = "提交";
                newAuditRec.AuditRemark    = "用户" + this.SessionInfo.UserName + "提交审核";
                newAuditRec.CreatedEmpID   = this.SessionInfo.UserID;
                newAuditRec.CreatedEmpName = this.SessionInfo.UserName;
                newAuditRec.CreatedTime    = DateTime.Now;
                newAuditRec.IsDeleted      = false;
                newAuditRecList.Add(newAuditRec);
                #endregion
                #region 添加审核记录
                string   billStatus = "", billApproveStatus = "";
                string[] arrEmpIds, arrEmpNames; int idx = 0;
                WF_AuditRecordLineResult auditRecLine;
                foreach (WF_AuditBillLineResult info in auditBillRst.WF_AuditBillLineList)
                {
                    newAuditRec                    = new WF_AuditRecordResult();
                    newAuditRec.WF_RecGuid         = Guid.NewGuid();
                    newAuditRec.GCompanyID         = this.SessionInfo.CompanyID;
                    newAuditRec.SourceTableEngName = auditBillRst.TableName;
                    newAuditRec.SourceBillNo       = param.SourceBillNo;
                    newAuditRec.SourceBillGuid     = param.SourceBillGuid;
                    newAuditRec.WFAuditGuid        = auditBillRst.WFAuditGuid;
                    newAuditRec.WFAuditLineGuid    = info.WFAuditLineGuid;
                    newAuditRec.SeqNo              = info.StepNo;
                    newAuditRec.GreeMans           = info.GreeMans;
                    newAuditRec.AuditEmpIDs        = info.AuditEmpIDs.ToStringHasNull().Trim() != "" ? ("," + info.AuditEmpIDs + ",") : "";//暂时是指定到人
                    newAuditRec.AuditEmpNames      = info.AuditEmpNames;
                    newAuditRec.IsCurrent          = 2;
                    newAuditRec.CreatedEmpID       = this.SessionInfo.UserID;
                    newAuditRec.CreatedEmpName     = this.SessionInfo.UserName;
                    newAuditRec.CreatedTime        = DateTime.Now;
                    newAuditRec.IsDeleted          = false;
                    if (info.OperationType == "提交")
                    {
                        newAuditRec.IsCurrent = 1;
                        billStatus            = "Approve";
                        billApproveStatus     = "待审核";//" + info.AuditEmpNames.ToStringHasNull() + "
                        if (info.NextType == "审核完成" && info.AuditEmpIDs.ToStringHasNull().Trim() == "")
                        {
                            billStatus            = "Complete";
                            billApproveStatus     = "审核完成";
                            newAuditRec.IsCurrent = 0;
                            newAuditRecList.Add(newAuditRec);
                            break;
                        }
                    }
                    newAuditRecList.Add(newAuditRec);
                    #region 添加审人明细记录
                    idx         = 0;
                    arrEmpIds   = newAuditRec.AuditEmpIDs.ToStringHasNull().Split(',').Where(a => a.ToStringHasNull().Trim() != "").Distinct().ToArray();
                    arrEmpNames = newAuditRec.AuditEmpNames.ToStringHasNull().Split(',').Where(a => a.ToStringHasNull().Trim() != "").Distinct().ToArray();
                    foreach (string s in arrEmpIds)
                    {
                        auditRecLine                    = new WF_AuditRecordLineResult();
                        auditRecLine.WF_RecGuid         = newAuditRec.WF_RecGuid;
                        auditRecLine.SourceBillGuid     = newAuditRec.SourceBillGuid;
                        auditRecLine.WFAuditGuid        = newAuditRec.WFAuditGuid;
                        auditRecLine.WFAuditLineGuid    = newAuditRec.WFAuditLineGuid;
                        auditRecLine.SourceTableEngName = newAuditRec.SourceTableEngName;
                        auditRecLine.SourceBillNo       = newAuditRec.SourceBillNo;
                        auditRecLine.AuditEmpID         = s.ToInt32();
                        auditRecLine.AuditEmpName       = arrEmpNames[idx];
                        this.AddOrUpdateAuditRecLine(auditRecLine);
                        idx++;
                    }
                    #endregion
                }
                if (newAuditRecList.Count > 0)
                {
                    this.BatchInsert <WF_AuditRecordResult>(newAuditRecList);
                    this.BatchExecute();
                }
                if (billStatus != "")
                {
                    ChangeSourceBllAuditStatus(tblRst, billStatus, billApproveStatus, sourceInfo);
                    AfterAuditExeMethod(param.SourceTableEngName, oldStatus, billStatus, tblRst.TriggerStatus, tblRst.AfterAuditMethodPath, tblRst.AfterAuditMethodName, param.SourceBillGuid);
                }
                #endregion
                #endregion
                rst.Key = 1;
            }
            catch (WarnException exp)
            {
                throw exp;
            }
            catch (System.Exception exp)
            {
                LogInfoBLL.WriteLog(this.SessionInfo, exp);
            }
            return(rst);
        }