Esempio n. 1
0
        public OutWareCheckData GetOutWareCheckData(string billNo)
        {
            OutWareCheckData outWareCheckData = null;

            if (!string.IsNullOrEmpty(billNo))
            {
                outWareCheckData = this.Get <OutWareCheckData>(billNo);
            }
            if (outWareCheckData == null)
            {
                object lockItem = lockObjDic.GetOrAdd(billNo, new object());
                lock (lockItem)
                {
                    outWareCheckData = this.Get <OutWareCheckData>(billNo);
                    if (outWareCheckData == null)
                    {
                        //CacheItemPolicy policy = new CacheItemPolicy();
                        //policy.SlidingExpiration = new TimeSpan(0, 60, 0); //60分钟内不访问自动剔除
                        LibBcfData ppWorkOrderBcf = (LibBcfData)LibBcfSystem.Default.GetBcfInstance("qc.OwQualityCheck");
                        DataSet    ds             = ppWorkOrderBcf.BrowseTo(new object[] { billNo });
                        outWareCheckData = new OutWareCheckData(ds);
                        this.Set(billNo, outWareCheckData, new TimeSpan(0, 60, 0));
                    }
                }
            }
            return(outWareCheckData);
        }
Esempio n. 2
0
        public static void DelBcf(string progId, List <string> list, LibDataAccess dataAccess, LibManagerMessage manager = null)
        {
            if (manager == null)
            {
                manager = new LibManagerMessage();
            }
            try
            {
                foreach (var item in list)
                {
                    if (!string.IsNullOrEmpty(item))
                    {
                        LibBcfData bcfData = (LibBcfData)LibBcfSystem.Default.GetBcfInstance(progId);
                        bcfData.DataAccess = dataAccess;
                        DataSet ds = bcfData.BrowseTo(new object[] { item });

                        if (ds == null || ds.Tables.Count <= 0 || ds.Tables[0].Rows.Count <= 0)
                        {
                            continue;
                        }
                        ds.Clear();
                        bcfData.Delete(new object[] { item });
                    }
                }
            }
            catch (Exception ex)
            {
                manager.AddMessage(new LibMessage()
                {
                    MessageKind = LibMessageKind.Error,
                    Message     = string.Format("系统错误:{0}", ex.Message)
                });
            }
        }
Esempio n. 3
0
        public static Result ExceptionTrack(string personId, string BillNo, DateTime PlanEndTime, string Solution, int DealwithState, string userId)
        {
            Result        res      = new Result();
            LibBcfData    bcfData  = (LibBcfData)LibBcfSystem.Default.GetBcfInstance("com.AbnormalTrace");
            LibEntryParam param    = new LibEntryParam();
            DataSet       dataSet  = bcfData.AddNew(param);
            DataTable     masterDt = dataSet.Tables[0];

            masterDt.BeginLoadData();
            DataRow masterRow = masterDt.Rows[0];

            try
            {
                masterRow.BeginEdit();
                try
                {
                    masterRow["TYPEID"]           = "P001";
                    masterRow["FROMBILLNO"]       = BillNo;
                    masterRow["PLANENDTIME"]      = LibDateUtils.DateTimeToLibDateTime(PlanEndTime);
                    masterRow["SOLUTION"]         = Solution;
                    masterRow["DEALWITHSTATE"]    = DealwithState;
                    masterRow["DEALWITHPERSONID"] = personId;
                }
                catch
                {
                    throw;
                }
                finally
                {
                    masterRow.EndEdit();
                }
            }
            catch
            {
                throw;
            }
            finally
            {
                masterDt.EndLoadData();
            }
            bcfData.InnerSave(BillAction.AddNew, null, dataSet);
            if (bcfData.ManagerMessage.IsThrow)
            {
                res.Message     = "数据有误";
                res.ReturnValue = false;
            }
            else
            {
                res.ReturnValue = true;
                //Service.PushMessage(userId, PushType.Message);
            }
            return(res);
        }
Esempio n. 4
0
        public string Register(RegisterInfo info)
        {
            string        error      = string.Empty;
            LibDataAccess dataAccess = new LibDataAccess();
            string        userId     = LibSysUtils.ToString(dataAccess.ExecuteScalar(string.Format("select USERID from AXPUSER where USERID={0}",
                                                                                                   LibStringBuilder.GetQuotString(info.inputId))));

            if (string.IsNullOrEmpty(userId))
            {
                string personId = LibSysUtils.ToString(dataAccess.ExecuteScalar(string.Format("select PERSONID from COMPERSON where PERSONNAME={0} and DEPTID={1}",
                                                                                              LibStringBuilder.GetQuotString(info.inputName), LibStringBuilder.GetQuotString(info.inputDept))));
                //如果遇到同部门同名的情况。建议客户手动创建人员主数据。
                if (string.IsNullOrEmpty(personId))
                {
                    LibBcfData bcfData   = (LibBcfData)LibBcfSystem.Default.GetBcfInstance("com.Person");
                    DataSet    dataSet   = bcfData.AddNew(null);
                    DataRow    masterRow = dataSet.Tables[0].Rows[0];
                    masterRow.BeginEdit();
                    try
                    {
                        if (string.IsNullOrEmpty(LibSysUtils.ToString(masterRow["PERSONID"])))
                        {
                            masterRow["PERSONID"] = personId = LibCommUtils.GetInternalId().ToString();
                        }
                        masterRow["PERSONNAME"] = info.inputName;
                        masterRow["GENDER"]     = info.gender;
                        masterRow["DEPTID"]     = info.inputDept;
                        masterRow["MAIL"]       = info.inputEmail;
                        masterRow["PHONENO"]    = info.inputPhone;
                    }
                    finally
                    {
                        masterRow.EndEdit();
                    }
                    dataSet  = bcfData.InnerSave(BillAction.AddNew, new object[] { personId }, dataSet);
                    personId = LibSysUtils.ToString(dataSet.Tables[0].Rows[0]["PERSONID"]);
                }
                if (!string.IsNullOrEmpty(personId))
                {
                    string sql = string.Format("insert into AXPUSER(USERID,USERPASSWORD,PERSONID,ISUSE) values({0},{1},{2},0)",
                                               LibStringBuilder.GetQuotString(info.inputId), LibStringBuilder.GetQuotString(info.inputPassword1),
                                               LibStringBuilder.GetQuotString(personId));
                    dataAccess.ExecuteNonQuery(sql);
                }
            }
            else
            {
                error = "账号已注册";
            }
            return(error);
        }
Esempio n. 5
0
        public string Audit(string progId, string billNo, int rowId, string userId, string password, bool isPass)
        {
            //模拟用户登录
            SystemService server    = new SystemService();
            LoginInfo     loginInfo = server.Login(userId, password, false);

            if (loginInfo.PersonId == null)
            {
                return("登录失败");
            }
            //根据progid构建bcf
            LibBcfData bcf = (LibBcfData)LibBcfSystem.Default.GetBcfInstance(progId);

            bcf.Handle = LibHandleCache.Default.GetHandle(string.Empty, LibHandeleType.None, userId, loginInfo.PersonId, loginInfo.PersonName, "");

            //根据rowid判断是行审核还是单据审核
            if (rowId > 0)
            {
                Dictionary <int, SortedList <int, List <LibApproveFlowInfo> > > dic =
                    new Dictionary <int, SortedList <int, List <LibApproveFlowInfo> > >();
                dic.Add(rowId, new SortedList <int, List <LibApproveFlowInfo> >( ));
                bcf.AuditRow(new object[] { billNo }, isPass, dic, new Dictionary <int, int>());
            }
            else
            {
                bcf.Audit(new object[] { billNo }, isPass, new Dictionary <string, LibChangeRecord>(), -1, null);
            }

            StringBuilder sb = new StringBuilder();

            //根据messagelist判断是否操作成功
            if (bcf.ManagerMessage.IsThrow)
            {
                foreach (LibMessage item in bcf.ManagerMessage.MessageList)
                {
                    sb.Append(item.Message);
                }
                return(sb.ToString());
            }
            else
            {
                return("审核成功");
            }
        }
Esempio n. 6
0
        public string SubmitAudit(string billNo, string progId)
        {
            LibBcfData bcf = (LibBcfData)LibBcfSystem.Default.GetBcfInstance(progId);

            bcf.SubmitAudit(new object[] { billNo }, false, new Dictionary <string, LibChangeRecord>(), null);
            StringBuilder sb = new StringBuilder();

            if (bcf.ManagerMessage.IsThrow)
            {
                foreach (LibMessage item in bcf.ManagerMessage.MessageList)
                {
                    sb.Append(item.Message);
                }
                return(sb.ToString());
            }
            else
            {
                return("送审成功");
            }
        }
Esempio n. 7
0
        public PurCheckData GetPurCheckData(string billNo)
        {
            PurCheckData purCheckData = null;

            byte[] mybyte = this.StringGetBytes(billNo);
            if (mybyte != null)
            {
                purCheckData = (PurCheckData)RetrieveObjectex(mybyte);
            }


            if (purCheckData == null)
            {
                object lockItem = lockObjDic.GetOrAdd(billNo, new object());
                lock (lockItem)
                {
                    mybyte = this.StringGetBytes(billNo);
                    if (mybyte != null)
                    {
                        purCheckData = (PurCheckData)RetrieveObjectex(mybyte);
                    }
                    //  purCheckData = this.Get< PurCheckData>(billNo)  ;
                    if (purCheckData == null)
                    {
                        //CacheItemPolicy policy = new CacheItemPolicy();
                        //policy.SlidingExpiration = new TimeSpan(0, 60, 0); //60分钟内不访问自动剔除
                        LibBcfData ppWorkOrderBcf = (LibBcfData)LibBcfSystem.Default.GetBcfInstance("qc.PurQualityCheck");
                        DataSet    ds             = ppWorkOrderBcf.BrowseTo(new object[] { billNo });
                        purCheckData = new PurCheckData(ds);
                        this.Set(billNo, purCheckData, new TimeSpan(0, 720, 0));


                        //   byte[] binaryDataResult = GetBinaryFormatData(purCheckData);
                        //   Default.StringSetBytes(billNo, binaryDataResult, new TimeSpan(0, 30, 0));
                    }
                }
            }
            return(purCheckData);
        }
Esempio n. 8
0
        /// <summary>
        /// 获取审核单据数据
        /// </summary>
        /// <param name="progId"></param>
        /// <param name="billNo"></param>
        /// <param name="RowId"></param>
        /// <returns></returns>
        public static Result GetBillInfo(string userId, string handle, string progId, string billNo, int RowId)
        {
            Result res = new Result();

            res.ReturnValue = true;
            LibHandle Handle = LibHandleCache.Default.IsExistsHandle(LibHandeleType.PC, userId);

            VerificationHandle(userId, handle, Handle, res);
            if (res.ReturnValue)
            {
                try
                {
                    LibBcfData bcfData = (LibBcfData)LibBcfSystem.Default.GetBcfInstance(progId);
                    DataSet    ds      = bcfData.BrowseTo(new object[] { billNo });
                    if (RowId > 0)
                    {
                        DataSet   newDs = new DataSet();
                        DataTable dt    = ds.Tables[1].Clone();
                        newDs.Tables.Add(ds.Tables[0].Copy());
                        DataRow selrow = ds.Tables[1].Select("ROW_ID='" + RowId + "'")[0];
                        dt.ImportRow(selrow);
                        newDs.Tables.Add(dt);
                        res.Info = newDs;
                    }
                    else
                    {
                        res.Info = ds;
                    }
                    res.ReturnValue = true;
                }
                catch (Exception ex)
                {
                    res.ReturnValue = false;
                    res.Message     = "审核失败!" + ex.Message;
                }
            }
            return(res);
        }
Esempio n. 9
0
        /// <summary>
        /// 将object格式化成字节数组byte[]
        /// </summary>
        /// <param name="billNo">单据编号</param>
        /// <returns>字节数组</returns>

        public ProduceData GetProduceData(string billNo)
        {
            ProduceData produceData = null;
            string      json        = this.StringGet(billNo);

            if (!string.IsNullOrEmpty((json)))
            {
                produceData = JsonUtiler.Deserialize <ProduceData>(json);
            }
            if (produceData == null)
            {
                object lockItem = lockObjDic.GetOrAdd(billNo, new object());
                lock (lockItem)
                {
                    json = this.StringGet(billNo);
                    if (!string.IsNullOrEmpty((json)))
                    {
                        produceData = JsonUtiler.Deserialize <ProduceData>(json);
                    }
                    //  produceData = this.Get< ProduceData>(billNo)  ;
                    if (produceData == null)
                    {
                        //CacheItemPolicy policy = new CacheItemPolicy();
                        //policy.SlidingExpiration = new TimeSpan(0, 60, 0); //60分钟内不访问自动剔除
                        LibBcfData ppWorkOrderBcf = (LibBcfData)LibBcfSystem.Default.GetBcfInstance("pp.WorkOrder");
                        DataSet    ds             = ppWorkOrderBcf.BrowseTo(new object[] { billNo });
                        produceData = new ProduceData(ds);
                        this.Set(billNo, produceData, new TimeSpan(0, 720, 0));

                        //   byte[] binaryDataResult = GetBinaryFormatData(produceData);
                        //   Default.StringSetBytes(billNo, binaryDataResult, new TimeSpan(0, 30, 0));
                    }
                }
            }
            return(produceData);
        }
Esempio n. 10
0
        public static void CheckRuleData(LibBcfData bcf)
        {
            bool    isCodingRule   = bcf.ProgId == "com.CodingRule";
            string  totalLenName   = isCodingRule ? "CODINGRULELENGTH" : "BARCODELENGTH";
            DataRow masterRow      = bcf.DataSet.Tables[0].Rows[0];
            int     barcodeLength  = 0;
            bool    hasDy          = false;
            bool    hasSerialNum   = false;
            int     maxRowNo       = 0;
            int     serialNumRowNo = 0;

            foreach (DataRow curRow in bcf.DataSet.Tables[1].Rows)
            {
                if (curRow.RowState == DataRowState.Deleted)
                {
                    continue;
                }
                int rowNo = LibSysUtils.ToInt32(curRow["ROWNO"]);
                if (maxRowNo < rowNo)
                {
                    maxRowNo = rowNo;
                }
                int       sectionLength     = LibSysUtils.ToInt32(curRow["SECTIONLENGTH"]);
                DataRow[] childRows         = curRow.GetChildRows(bcf.DataSet.Relations[1]);
                bool      hasDetail         = false;
                BarcodeRuleSectionType type = (BarcodeRuleSectionType)LibSysUtils.ToInt32(curRow["SECTIONTYPE"]);
                if (type == BarcodeRuleSectionType.Dynamic)
                {
                    if (!hasDy)
                    {
                        hasDy = true;
                    }
                    if (string.IsNullOrEmpty(LibSysUtils.ToString(curRow["FIELDNAME"])))
                    {
                        bcf.ManagerMessage.AddMessage(LibMessageKind.Error, string.Format("行{0}设定为动态段,字段名不能为空。", rowNo));
                    }
                    foreach (DataRow subRow in childRows)
                    {
                        if (subRow.RowState == DataRowState.Deleted)
                        {
                            continue;
                        }
                        if (!hasDetail)
                        {
                            hasDetail = true;
                        }
                        int sectionValueLen = LibSysUtils.ToString(subRow["SECTIONVALUE"]).Length;
                        if (sectionLength != sectionValueLen)
                        {
                            bcf.ManagerMessage.AddMessage(LibMessageKind.Error,
                                                          string.Format("行{0}的编码段长度为{1},子行{2}的编码值长度为{3}。长度须相等。",
                                                                        rowNo, sectionLength, LibSysUtils.ToInt32(subRow["ROWNO"]), sectionValueLen));
                        }
                    }
                }
                else
                {
                    if (!string.IsNullOrEmpty(LibSysUtils.ToString(curRow["FIELDNAME"])))
                    {
                        bcf.ManagerMessage.AddMessage(LibMessageKind.Error, string.Format("行{0}非动态段,字段名不能有值。", rowNo));
                    }
                    if (LibSysUtils.ToBoolean(curRow["DYRULEDETAIL"]))
                    {
                        bcf.ManagerMessage.AddMessage(LibMessageKind.Error, string.Format("行{0}非动态段,不能有动态规则明细。", rowNo));
                    }
                }
                switch (type)
                {
                case BarcodeRuleSectionType.SerialNum:
                    if (hasSerialNum)
                    {
                        bcf.ManagerMessage.AddMessage(LibMessageKind.Error, "编码规则明细里不能同时设置多笔流水号。");
                    }
                    else
                    {
                        hasSerialNum = true;
                    }
                    serialNumRowNo = rowNo;
                    if (sectionLength < 3)
                    {
                        bcf.ManagerMessage.AddMessage(LibMessageKind.Warn, "流水码的编码长度建议最少大于3");
                    }
                    break;

                case BarcodeRuleSectionType.DateL:
                    if (sectionLength != 8)
                    {
                        curRow["SECTIONLENGTH"] = 8;
                    }
                    break;

                case BarcodeRuleSectionType.DateL1:
                    if (sectionLength != 8)
                    {
                        curRow["SECTIONLENGTH"] = 4;
                    }
                    break;

                case BarcodeRuleSectionType.DateS:
                case BarcodeRuleSectionType.DateS1:
                case BarcodeRuleSectionType.DateAB:
                    if (sectionLength != 6)
                    {
                        curRow["SECTIONLENGTH"] = 6;
                    }
                    break;

                case BarcodeRuleSectionType.DateL16:
                    if (sectionLength != 7)
                    {
                        curRow["SECTIONLENGTH"] = 7;
                    }
                    break;

                case BarcodeRuleSectionType.DateS16:
                    if (sectionLength != 5)
                    {
                        curRow["SECTIONLENGTH"] = 5;
                    }
                    break;

                default:
                    break;
                }
                if (LibSysUtils.ToBoolean(curRow["DYRULEDETAIL"]) != hasDetail)
                {
                    curRow["DYRULEDETAIL"] = hasDetail;
                }
                barcodeLength += LibSysUtils.ToInt32(curRow["SECTIONLENGTH"]);
            }
            if (!hasSerialNum)
            {
                bcf.ManagerMessage.AddMessage(LibMessageKind.Error, "编码规则明细里需存在一笔流水号。");
            }
            else if (serialNumRowNo != maxRowNo)
            {
                bcf.ManagerMessage.AddMessage(LibMessageKind.Error, "编码规则明细里的流水号必须是最后一笔数据。");
            }
            if (hasDy && string.IsNullOrEmpty(LibSysUtils.ToString(masterRow["PROGID"])))
            {
                bcf.ManagerMessage.AddMessage(LibMessageKind.Error, "编码规则明细存在动态段,表头功能字段不能为空。");
            }
            if (LibSysUtils.ToInt32(masterRow[totalLenName]) != barcodeLength)
            {
                masterRow[totalLenName] = barcodeLength;
            }
        }
Esempio n. 11
0
        /// <summary>
        /// 审核操作
        /// </summary>
        /// <param name="progId"></param>
        /// <param name="billNo"></param>
        /// <param name="rowId"></param>
        /// <param name="userId"></param>
        /// <param name="handle"></param>
        /// <param name="isPass"></param>
        /// <param name="message"></param>
        /// <returns></returns>
        public static Result Audit(string progId, string billNo, int rowId, string userId, string handle, bool isPass, string message)
        {
            Result res = new Result();

            res.ReturnValue = true;
            LibHandle Handle = LibHandleCache.Default.IsExistsHandle(LibHandeleType.PC, userId);

            VerificationHandle(userId, handle, Handle, res);
            if (res.ReturnValue)
            {
                try
                {
                    //根据progid构建bcf
                    LibBcfData bcf = (LibBcfData)LibBcfSystem.Default.GetBcfInstance(progId);
                    if (bcf == null)
                    {
                        res.ReturnValue = false;
                        res.Message     = "请输入正确progId!";
                        return(res);
                    }
                    bcf.Handle = Handle;

                    //根据rowid判断是行审核还是单据审核
                    if (rowId > 0)
                    {
                        Dictionary <int, SortedList <int, List <LibApproveFlowInfo> > > dic =
                            new Dictionary <int, SortedList <int, List <LibApproveFlowInfo> > >();
                        dic.Add(rowId, new SortedList <int, List <LibApproveFlowInfo> >());
                        bcf.AuditRow(new object[] { billNo }, isPass, dic, new Dictionary <int, int>());
                    }
                    else
                    {
                        //string.Empty 为审核意见,后期加上
                        bcf.Audit(new object[] { billNo }, isPass, string.Empty, new Dictionary <string, LibChangeRecord>(), -1, null);
                    }

                    StringBuilder sb = new StringBuilder();

                    //根据messagelist判断是否操作成功
                    if (bcf.ManagerMessage.IsThrow)
                    {
                        foreach (LibMessage item in bcf.ManagerMessage.MessageList)
                        {
                            sb.Append(item.Message);
                        }
                        res.Message     = sb.ToString();
                        res.ReturnValue = false;
                    }
                    else
                    {
                        res.ReturnValue = true;
                        res.Message     = "审核成功!";
                        PushMessage(userId, PushType.Approval);
                    }
                }
                catch (Exception ex)
                {
                    res.ReturnValue = false;
                    res.Message     = "审核失败!" + ex.Message;
                }
            }
            return(res);
        }
Esempio n. 12
0
        public UpLoadFileResult UpLoadFile1(HttpPostedFile file, string progId = "")
        {
            UpLoadFileResult upLoadFileResult = new UpLoadFileResult();

            bool isLocalHost = true;

            string fileName = LibDateUtils.Now().Ticks.ToString();

            fileName = file.FileName.Replace(file.FileName.Substring(0, file.FileName.LastIndexOf('.')), fileName);
            string filePath = Path.Combine(EnvProvider.Default.RuningPath, "TempData", "ImportData", fileName);
            string url      = Path.Combine("\\TempData", "ImportData", fileName);

            #region 对应实体图片路径
            if (!string.IsNullOrEmpty(progId))
            {
                string  sql     = string.Format(" SELECT Url,LocalHost FROM ComImagePath WHERE Progid='{0}' ", progId);
                DataSet dataSet = new LibDataAccess().ExecuteDataSet(sql);
                if (dataSet != null && dataSet.Tables.Count > 0 && dataSet.Tables[0].Rows.Count > 0)
                {
                    DataRow dr = dataSet.Tables[0].Rows[0];
                    isLocalHost = LibSysUtils.ToBoolean(dr["LocalHost"]);
                    url         = LibSysUtils.Combine(LibSysUtils.ToString(dr["Url"]), fileName);
                    filePath    = LibSysUtils.Combine(EnvProvider.Default.RuningPath, url);
                }
            }
            #endregion

            #region 新增图片实体
            LibEntryParam entryParam = new LibEntryParam();

            DataSet    dataset = null;
            LibBcfData bcfData = (LibBcfData)LibBcfSystem.Default.GetBcfInstance("KanTime.Picture");
            dataset = bcfData.AddNew(entryParam);

            #region 填充数据
            dataset.EnforceConstraints = false;
            try
            {
                #region  表头
                DataRow masterRow = dataset.Tables[0].Rows[0];
                masterRow.BeginEdit();
                masterRow["Name"] = fileName;
                masterRow["Url"]  = url;
                masterRow.EndEdit();
                #endregion

                #region 明细
                //dataset.Tables[1].BeginLoadData();
                //dataset.Tables[1].EndLoadData();
                #endregion
            }
            finally
            {
                dataset.EnforceConstraints = true;
            }
            dataset = bcfData.InnerSave(BillAction.AddNew, null, dataset);
            if (bcfData.ManagerMessage.IsThrow)
            {
                StringBuilder strMsg = new StringBuilder();
                foreach (var item in bcfData.ManagerMessage.MessageList)
                {
                    strMsg.AppendFormat("{0}", item.Message);
                }
                throw new Exception(strMsg.ToString());
            }
            #endregion

            #endregion

            file.SaveAs(filePath);

            #region 返回本机或外网地址
            if (isLocalHost)
            {
                upLoadFileResult.FileName = url;
            }
            else
            {
                upLoadFileResult.FileName = LibSysUtils.Combine(EnvProvider.Default.UploadHostName, url);
            }
            #endregion

            upLoadFileResult.success = true;
            return(upLoadFileResult);
        }
Esempio n. 13
0
        protected override void BeforeUpdate()
        {
            base.BeforeUpdate();
            int bodyRowCount = 0;
            int subRowCount  = 0;

            //检查行审核的启用是否有效
            DataRow masterRow = this.DataSet.Tables[0].Rows[0];

            if (LibSysUtils.ToBoolean(masterRow["ISAPPROVEROW"]))
            {
                string     progId  = LibSysUtils.ToString(masterRow["PROGID"]);
                LibBcfData bcfData = (LibBcfData)LibBcfSystem.Default.GetBcfInstance(progId);
                if (bcfData != null && bcfData.Template.FuncPermission.UsingApproveRow == false)
                {
                    this.ManagerMessage.AddMessage(LibMessageKind.Error, string.Format("审核流程:功能{0}的实现中未启用行审核,审核流不能配置为行审核。", progId));
                }
            }
            List <string> useConditionList = new List <string>();
            string        useCondition     = string.Empty;

            foreach (DataRow curRow in this.DataSet.Tables[1].Rows)
            {
                if (curRow.RowState == DataRowState.Deleted)
                {
                    continue;
                }
                useCondition = LibSysUtils.ToString(curRow["USECONDITION"]);
                if (useConditionList.Contains(useCondition) == false)
                {
                    useConditionList.Add(useCondition);
                }
                else
                {
                    this.ManagerMessage.AddMessage(LibMessageKind.Error, string.Format("审核流程:不能使用相同的使用条件。行号:{0}", curRow["ROWNO"]));
                }

                bodyRowCount++;
                SortedList <int, HashSet <string> > tempList = new SortedList <int, HashSet <string> >();
                HashSet <int> tempHashSet = new HashSet <int>();
                DataRow[]     childRows   = curRow.GetChildRows(this.DataSet.Relations[1]);
                if (childRows != null)
                {
                    subRowCount = 0;
                    foreach (DataRow childRow in childRows)
                    {
                        if (childRow.RowState == DataRowState.Deleted)
                        {
                            continue;
                        }
                        subRowCount++;
                        int flowLevel = LibSysUtils.ToInt32(childRow["FLOWLEVEL"]);
                        if (!tempList.ContainsKey(flowLevel))
                        {
                            tempList.Add(flowLevel, new HashSet <string>());
                        }
                        HashSet <string> hashSet        = tempList[flowLevel];
                        string           personId       = LibSysUtils.ToString(childRow["PERSONID"]);
                        string           deptId         = LibSysUtils.ToString(childRow["DEPTID"]);
                        string           dutyId         = LibSysUtils.ToString(childRow["DUTYID"]);
                        string           deptColumnName = LibSysUtils.ToString(childRow["DEPTIDCOLUMN"]);
                        if (string.IsNullOrEmpty(personId) && string.IsNullOrEmpty(dutyId))
                        {
                            this.ManagerMessage.AddMessage(LibMessageKind.Error, string.Format("审核流程明细:具体审核人和岗位必须要指定一个。行号:{0}", childRow["ROWNO"]));
                        }
                        if (string.IsNullOrEmpty(personId) == false && string.IsNullOrEmpty(dutyId) == false)
                        {
                            this.ManagerMessage.AddMessage(LibMessageKind.Error, string.Format("审核流程明细:具体审核人和岗位不能同时指定。行号:{0}", childRow["ROWNO"]));
                        }
                        if (string.IsNullOrEmpty(personId) == false)
                        {
                            //设定了具体审核人就不用再设置部门(或动态部门字段)
                            if (string.IsNullOrEmpty(deptId) == false ||
                                string.IsNullOrEmpty(deptColumnName) == false)
                            {
                                this.ManagerMessage.AddMessage(LibMessageKind.Warn, string.Format("审核流程明细:设定了具体审核人,再设置部门(或动态部门字段)无意义。行号:{0}", childRow["ROWNO"]));
                            }
                            if (hashSet.Contains(personId))
                            {
                                this.ManagerMessage.AddMessage(LibMessageKind.Error, string.Format("审核流程明细:同一层级不能出现相同的人。行号:{0}", childRow["ROWNO"]));
                            }
                            else
                            {
                                hashSet.Add(personId);
                            }
                            bool independent = LibSysUtils.ToBoolean(childRow["INDEPENDENT"]);
                            if (independent && !tempHashSet.Contains(flowLevel))
                            {
                                tempHashSet.Add(flowLevel);
                            }
                        }
                        else
                        {
                            if (string.IsNullOrEmpty(deptId) == false && string.IsNullOrEmpty(deptColumnName) == false)
                            {
                                this.ManagerMessage.AddMessage(LibMessageKind.Error, string.Format("审核流程明细:部门和动态部门字段只能设置一个。行号:{0}", childRow["ROWNO"]));
                            }
                        }
                    }
                    if (subRowCount == 0)
                    {
                        this.ManagerMessage.AddMessage(LibMessageKind.Error, string.Format("审核流程:行号为{0}的流程必须配置至少一个审核过程。", curRow["ROWNO"]));
                    }
                    int preLevel = -1;
                    foreach (var item in tempList)
                    {
                        if (preLevel == -1)
                        {
                            preLevel = item.Key;
                            if (preLevel != 1)
                            {
                                this.ManagerMessage.AddMessage(LibMessageKind.Error, string.Format("审核流程明细:最小层级必须从1开始。"));
                            }
                        }
                        else if (++preLevel != item.Key)
                        {
                            this.ManagerMessage.AddMessage(LibMessageKind.Error, string.Format("审核流程明细:层级中间不能有断层。"));
                            break;
                        }
                        if (item.Value.Count == 1 && tempHashSet.Contains(item.Key))
                        {
                            this.ManagerMessage.AddMessage(LibMessageKind.Error, string.Format("审核流程明细:同一层级存在多人时才能勾选独立决策权。"));
                        }
                    }
                }
            }
            if (bodyRowCount == 0)
            {
                this.ManagerMessage.AddMessage(LibMessageKind.Error, string.Format("必须配置至少一个审核流程。"));
            }
        }