/// <summary>
        /// 分单
        /// </summary>
        /// <param name="rule"></param>
        /// <param name="bizschemacode"></param>
        /// <param name="bizobjectid"></param>
        /// <param name="participant"></param>
        /// <param name="workitemid"></param>
        /// <returns></returns>
        public rtn_data SendOrder(AllocationOrderRule rule, string bizschemacode, string bizobjectid, string participant, string workitemid, string loanAmount)
        {
            rtn_data rtn = new rtn_data();

            #region 分单
            string zsPerson = rule.FinalCreditPerson;
            double amount;
            if (double.TryParse(loanAmount, out amount))
            {
                //贷款金额大于终审的审核额度
                if (amount > rule.FinalLoanAmountTo)
                {
                    zsPerson = GetSpecialAudit(amount);
                }
            }

            Dictionary <string, object> values = new Dictionary <string, object>();
            values.Add("cyzXSCS", rule.FirstCreditPerson);
            values.Add("cyzXSZS", zsPerson);
            values.Add("allocation_available", 0);//不可再分单;
            var setResult = AppUtility.Engine.BizObjectManager.SetPropertyValues(bizschemacode, bizobjectid, participant, values);
            if (setResult)
            {
                BPM.SubmitItem(workitemid, BoolMatchValue.True, "", participant);
                rtn.code    = 1;
                rtn.message = "分单成功";
            }
            else
            {
                rtn.code    = -1;
                rtn.message = "分单失败";
            }
            #endregion
            return(rtn);
        }
        /// <summary>
        /// 保存到订单记录表
        /// </summary>
        /// <param name="rule">规则</param>
        /// <param name="instanceid">流程id</param>
        /// <param name="workitemid">任务id</param>
        /// <param name="applicationNumber">申请单号</param>
        /// <param name="loanAmount">贷款金额</param>
        /// <param name="originatorUnit">发起人部门id</param>
        /// <param name="currentNum">当前待办中的申请数量(零售)</param>
        /// <returns></returns>
        public bool SaveToOrderHis(AllocationOrderRule rule, string instanceid, string workitemid, string applicationNumber, string loanAmount, string originatorUnit, int currentNum)
        {
            int    channel_type = originatorUnit == "28a0ba01-4f58-4097-96cb-77c2b09e8253" ? 0 : 1;
            string sqlInsert    = @"insert into C_Auto_Allocation_Order_Detail(Allocation_Date,instanceid,workitemid,application_number,channel_type,
asset_condition,loan_amount,usercode,username,final_usercode,final_username,app_num,rule_channel_type,rule_asset_condition,rule_amount_from,rule_amount_to,rule_limit_num) 
values(sysdate,'{0}','{1}','{2}',{3},'{4}',{5},'{6}','{7}','{8}','{9}',{10},'{11}','{12}',{13},{14},{15})";

            sqlInsert = string.Format(sqlInsert, instanceid, workitemid, applicationNumber, channel_type,
                                      rule.AssetCondition, loanAmount, rule.UserCode, rule.UserName, rule.FinalUserCode, rule.FinalUserName,
                                      currentNum, rule.ChannelType, rule.AssetCondition, rule.LoanAmountFrom, rule.LoanAmountTo, rule.LimitNumber);
            return(AppUtility.Engine.EngineConfig.CommandFactory.CreateCommand().ExecuteNonQuery(sqlInsert) > 0);
        }
        public AllocationOrderRule UserRule(string UserId)
        {
            string    sqlGetRules = string.Format("select * from i_CreditGetOrderRules where FIRSTCREDITPERSON='{0}'", UserId);
            DataTable dtRules     = AppUtility.Engine.EngineConfig.CommandFactory.CreateCommand().ExecuteDataTable(sqlGetRules);

            if (dtRules.Rows.Count > 0)
            {
                //规则
                AllocationOrderRule rule = ToRule(dtRules.Rows[0]);
                return(rule);
            }
            return(null);
        }
        /// <summary>
        /// 是否需要分单
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public bool NeedAllocationOrder(InstanceContext context)
        {
            string    sql = "select * from i_" + context.BizObjectSchemaCode + " where objectid='" + context.BizObjectId + "'";
            DataTable dt  = AppUtility.Engine.EngineConfig.CommandFactory.CreateCommand().ExecuteDataTable(sql);

            if (dt.Rows.Count > 0)
            {
                string cyz = dt.Rows[0]["cyzxscs"] + string.Empty;
                #region 参与者为空
                if (string.IsNullOrEmpty(cyz))
                {
                    //1.查询有没有贷款历史;
                    string appType   = dt.Rows[0]["application_type_code"] + string.Empty;
                    string sqlGetHis = "";
                    #region 查询历史申请订单  SQL
                    if (appType == "00001")
                    {
                        string sqlGetIDCardNo = @"select det.id_card_nbr from i_application{0} app
left join i_applicant_detail{0} det on app.objectid=det.parentobjectid and det.identification_code2=1
where app.objectid='{1}' order by app.createdtime desc";
                        sqlGetIDCardNo = string.Format(sqlGetIDCardNo, context.BizObjectSchemaCode.Replace("APPLICATION", ""), context.BizObjectId);
                        string idcardno = AppUtility.Engine.EngineConfig.CommandFactory.CreateCommand().ExecuteScalar(sqlGetIDCardNo) + string.Empty;

                        sqlGetHis = GetQueryHisApplicationSql(idcardno, context.BizObjectId, appType);
                    }
                    else
                    {
                        string sqlGetOrgNo = @"select det.ORGANIZATION_CDE from i_application app
left join i_company_detail det on app.objectid=det.parentobjectid and det.identification_code3=1
where app.objectid='{0}' order by app.createdtime desc";
                        sqlGetOrgNo = string.Format(sqlGetOrgNo, context.BizObjectId);
                        string orgNo = AppUtility.Engine.EngineConfig.CommandFactory.CreateCommand().ExecuteScalar(sqlGetOrgNo) + string.Empty;

                        sqlGetHis = GetQueryHisApplicationSql(orgNo, context.BizObjectId, appType);
                    }
                    #endregion
                    DataTable dtHistory = AppUtility.Engine.EngineConfig.CommandFactory.CreateCommand().ExecuteDataTable(sqlGetHis);
                    if (dtHistory.Rows.Count > 0)
                    {
                        string cyzxscs = "";
                        foreach (DataRow r in dtHistory.Rows)
                        {
                            cyzxscs = r["cyzxscs"] + string.Empty;
                            if (!string.IsNullOrEmpty(cyzxscs))
                            {
                                break;
                            }
                        }
                        AddLog(LogFileName, DateTime.Now.ToString("yyyy-MM-dd"), "历史参与者为:" + cyzxscs + ",实例ID为-->" + context.InstanceId);
                        //用户可用,采用历史分单规则,不需要重新分单
                        if (UserAvailable(cyzxscs))
                        {
                            #region 给参与者赋值
                            AllocationOrderRule rule = UserRule(cyzxscs);
                            string cyzxszs           = "";
                            if (rule != null)
                            {
                                cyzxszs = rule.FinalCreditPerson;
                                //增加判断贷款金额
                                double dk_amount;
                                if (double.TryParse(dt.Rows[0]["financedamount"] + string.Empty, out dk_amount))
                                {
                                    //贷款金额大于终审的审核额度
                                    if (dk_amount > rule.FinalLoanAmountTo)
                                    {
                                        cyzxszs = GetSpecialAudit(dk_amount);
                                    }
                                }
                            }
                            Dictionary <string, object> dicPara = new Dictionary <string, object>();
                            dicPara.Add("cyzxscs", cyzxscs);
                            dicPara.Add("cyzxszs", cyzxszs);
                            AppUtility.Engine.BizObjectManager.SetPropertyValues(context.BizObjectSchemaCode, context.BizObjectId, "", dicPara);
                            #endregion
                            return(false);
                        }
                    }
                    return(true);
                }
                #endregion
                #region 参与者不为空
                else
                {
                    //用户可用,不用分单
                    if (UserAvailable(cyz))
                    {
                        return(false);
                    }
                    else
                    {
                        return(true);
                    }
                }
                #endregion
            }
            return(true);
        }