예제 #1
0
        public void GetSNRulerDetail(Newtonsoft.Json.Linq.JObject requestValue, Newtonsoft.Json.Linq.JObject Data, MESStationReturn StationReturn)
        {
            OleExec db = DBPools["SFCDB"].Borrow();

            try
            {
                string                      rulerName = Data["Name"].ToString();
                T_C_SN_RULE                 TCSR      = new T_C_SN_RULE(db, DB_TYPE_ENUM.Oracle);
                Row_C_SN_RULE               c         = TCSR.GetDataByName(rulerName, db);
                T_C_SN_RULE_DETAIL          TCSRD     = new T_C_SN_RULE_DETAIL(db, DB_TYPE_ENUM.Oracle);
                List <Row_C_SN_RULE_DETAIL> rs        = TCSRD.GetDataByRuleID(c.ID, db);
                List <C_SN_RULE_DETAIL>     ret       = new List <C_SN_RULE_DETAIL>();
                for (int i = 0; i < rs.Count; i++)
                {
                    ret.Add(rs[i].GetDataObject());
                }
                StationReturn.Data   = ret;
                StationReturn.Status = StationReturnStatusValue.Pass;
            }
            catch (Exception e)
            {
                throw e;
            }
            finally
            {
                DBPools["SFCDB"].Return(db);
            }
        }
예제 #2
0
        public static string GetNextSN(string RuleName, OleExec DB, string WO)
        {
            Row_C_SN_RULE root = null;
            List <Row_C_SN_RULE_DETAIL> detail = null;

            if (_Root.ContainsKey(RuleName))
            {
                root = _Root[RuleName];
            }
            else
            {
                T_C_SN_RULE TCSR = new T_C_SN_RULE(DB, MESDataObject.DB_TYPE_ENUM.Oracle);
                root = TCSR.GetDataByName(RuleName, DB);
                _Root.Add(RuleName, root);
            }

            if (_Detail.ContainsKey(RuleName))
            {
                detail = _Detail[RuleName];
            }
            else
            {
                T_C_SN_RULE_DETAIL TCSRD = new T_C_SN_RULE_DETAIL(DB, MESDataObject.DB_TYPE_ENUM.Oracle);
                detail = TCSRD.GetDataByRuleID(root.ID, DB);
                _Detail.Add(RuleName, detail);
            }
            string SN        = "";
            bool   ResetFlag = false;

            for (int i = 0; i < detail.Count; i++)
            {
                detail[i].LockMe(DB);
                if (detail[i].INPUTTYPE == "PREFIX")
                {
                    SN += detail[i].CURVALUE;
                }
                else if (detail[i].INPUTTYPE == "YYYY" || detail[i].INPUTTYPE == "MM" || detail[i].INPUTTYPE == "DD")
                {
                    string codeType = detail[i].CODETYPE;
                    List <Row_C_CODE_MAPPING> CodeMapping = null;
                    if (_CodeMapping.ContainsKey(codeType))
                    {
                        CodeMapping = _CodeMapping[codeType];
                    }
                    else
                    {
                        T_C_CODE_MAPPING TCCM = new T_C_CODE_MAPPING(DB, DB_TYPE_ENUM.Oracle);
                        CodeMapping = TCCM.GetDataByName(codeType, DB);
                        if (CodeMapping != null)
                        {
                            _CodeMapping.Add(codeType, CodeMapping);
                        }
                    }
                    string VALUE = null;
                    switch (detail[i].INPUTTYPE)
                    {
                    case "YYYY":
                        VALUE = DateTime.Now.Year.ToString();
                        break;

                    case "MM":
                        VALUE = DateTime.Now.Month.ToString();
                        break;

                    case "DD":
                        VALUE = DateTime.Now.Day.ToString();
                        break;
                    }


                    Row_C_CODE_MAPPING TAG = CodeMapping.Find(T => T.VALUE == VALUE);
                    if (detail[i].CURVALUE != TAG.CODEVALUE)
                    {
                        detail[i].CURVALUE = TAG.CODEVALUE;
                        if (detail[i].RESETSN_FLAG == 1)
                        {
                            ResetFlag = true;
                        }
                    }
                    SN += detail[i].CURVALUE;
                }
                else if (detail[i].INPUTTYPE == "WK")
                {
                    string wk        = detail[i].CODETYPE;
                    string sql       = $@"SELECT TO_CHAR(SYSDATE,'{wk}') FROM DUAL";
                    string currentWK = (string)DB.ExecSelectOneValue(sql);
                    SN += currentWK;
                }
                else if (detail[i].INPUTTYPE == "SQL")
                {
                    string sql = detail[i].CURVALUE;
                    sql = sql.Replace("{WO}", WO);
                    string value = (string)DB.ExecSelectOneValue(sql);
                    SN += value;
                }
                else if (detail[i].INPUTTYPE == "SN")
                {
                    if (ResetFlag)
                    {
                        detail[i].VALUE10 = detail[i].RESETVALUE;
                    }
                    string codeType = detail[i].CODETYPE;
                    List <Row_C_CODE_MAPPING> CodeMapping = null;
                    if (_CodeMapping.ContainsKey(codeType))
                    {
                        CodeMapping = _CodeMapping[codeType];
                    }
                    else
                    {
                        T_C_CODE_MAPPING TCCM = new T_C_CODE_MAPPING(DB, DB_TYPE_ENUM.Oracle);
                        CodeMapping = TCCM.GetDataByName(codeType, DB);
                        if (CodeMapping != null)
                        {
                            _CodeMapping.Add(codeType, CodeMapping);
                        }
                    }
                    int curValue = int.Parse(detail[i].VALUE10);
                    curValue++;
                    detail[i].VALUE10 = curValue.ToString();
                    int    T  = CodeMapping.Count;
                    string sn = "";

                    while (curValue / T != 0)
                    {
                        int R = curValue % T;
                        sn       = CodeMapping[R].CODEVALUE + sn;
                        curValue = curValue / T;
                    }
                    sn = CodeMapping[curValue].CODEVALUE + sn;
                    if (sn.Length < detail[i].CURVALUE.Length)
                    {
                        for (int k = 0; detail[i].CURVALUE.Length != sn.Length; k++)
                        {
                            sn = "0" + sn;
                        }
                    }
                    if (sn.Length > detail[i].CURVALUE.Length)
                    {
                        throw new Exception("生成的SN超過最大值!");
                    }

                    detail[i].CURVALUE = sn;
                    SN += detail[i].CURVALUE;
                }
                int T1 = 0;
                detail[i].EDIT_TIME = DateTime.Now;
                string ret = DB.ExecSQL(detail[i].GetUpdateString(DB_TYPE_ENUM.Oracle));
                if (!Int32.TryParse(ret, out T1))
                {
                    throw new Exception("更新序列值出錯!" + ret);
                }
            }
            int T2 = 0;

            root.CURVALUE = SN;
            string ret1 = DB.ExecSQL(root.GetUpdateString(DB_TYPE_ENUM.Oracle));

            if (!Int32.TryParse(ret1, out T2))
            {
                throw new Exception("更新序列值出錯!" + ret1);
            }
            return(SN);
        }