Пример #1
0
        public void insertOpt10059(List <TB_OPT10059> lst)
        {
            using (var conn = new NpgsqlConnection(Config.GetDbConnStr()))
            {
                try
                {
                    conn.Open();
                    String sql = @"CALL insert_tb_opt10059(
@p_stock_dt
,@p_stock_cd
,@p_buy_sell
,@p_amt_amount
,@p_domestic_investor
,@p_foreign_investor
,@p_institution
,@p_financial_investment
,@p_insurance
,@p_investment_trust
,@p_etc_financial
,@p_bank
,@p_pension_fund
,@p_private_equity_fund
,@p_nation
,@p_etc_corporation
,@p_foregin_investment_in_korea
,@p_prev_next
)";


                    using (var cmd = new NpgsqlCommand(sql, conn))
                    {
                        for (int i = 0; i < lst.Count(); i++)
                        {
                            TB_OPT10059 tmp = lst[i];
                            //cmd.CommandType = CommandType.StoredProcedure;
                            cmd.Parameters.AddWithValue("@p_stock_dt", tmp.stock_dt);
                            cmd.Parameters.AddWithValue("@p_stock_cd", tmp.stock_cd);
                            cmd.Parameters.AddWithValue("@p_buy_sell", tmp.buy_sell);
                            cmd.Parameters.AddWithValue("@p_amt_amount", tmp.amt_amount);
                            cmd.Parameters.AddWithValue("@p_domestic_investor", tmp.domestic_investor);
                            cmd.Parameters.AddWithValue("@p_foreign_investor", tmp.foreign_investor);
                            cmd.Parameters.AddWithValue("@p_institution", tmp.institution);
                            cmd.Parameters.AddWithValue("@p_financial_investment", tmp.financial_investment);
                            cmd.Parameters.AddWithValue("@p_insurance", tmp.insurance);
                            cmd.Parameters.AddWithValue("@p_investment_trust", tmp.investment_trust);
                            cmd.Parameters.AddWithValue("@p_etc_financial", tmp.etc_financial);
                            cmd.Parameters.AddWithValue("@p_bank", tmp.bank);
                            cmd.Parameters.AddWithValue("@p_pension_fund", tmp.pension_fund);
                            cmd.Parameters.AddWithValue("@p_private_equity_fund", tmp.private_equity_fund);
                            cmd.Parameters.AddWithValue("@p_nation", tmp.nation);
                            cmd.Parameters.AddWithValue("@p_etc_corporation", tmp.etc_corporation);
                            cmd.Parameters.AddWithValue("@p_foregin_investment_in_korea", tmp.foregin_investment_in_korea);
                            cmd.Parameters.AddWithValue("@p_prev_next", tmp.prev_next);
                            cmd.ExecuteNonQuery();
                            cmd.Parameters.Clear();
                        }
                    }
                }
                catch (Exception ex)
                {
                    FileLog.PrintF("[insertOpt10015]Exception ex=" + ex.Message);
                    //{ "42883: insert_tb_stock(p_market_cd => text, p_stock_cd => text, p_stock_nm => text, p_stock_dt => text, p_cnt => integer, p_last_price => text, p_stock_state => text, p_construction => text) 이름의 함수가 없음"}
                    //		Message	"42601: 구문 오류, 입력 끝부분"	string
                }
            }
        }
Пример #2
0
        public override void ReceivedData(AxKHOpenAPILib.AxKHOpenAPI axKHOpenAPI, AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveTrDataEvent e)
        {
            FileLog.PrintF("ReceivedData OPT10059");
            try
            {
                /*
                 * sScrNo – 화면번호
                 * sRQName – 사용자구분 명
                 * sTrCode – Tran 명
                 * sRecordName – Record 명
                 * sPreNext – 연속조회 유무
                 */
                List <TB_OPT10059> lst  = new List <TB_OPT10059>();
                String             종목코드 = "XXXX";
                int nCnt = axKHOpenAPI.GetRepeatCnt(e.sTrCode, e.sRQName);

                String keyStockCodeLayout = "sRQName:{0}|sTrCode:{1}|sScreenNo:{2}";
                String keyStockCode       = String.Format(keyStockCodeLayout
                                                          , e.sRQName
                                                          , e.sTrCode
                                                          , e.sScrNo
                                                          );
                종목코드 = AppLib.getClass1Instance().getStockCode(keyStockCode);

                String keyLayout = "sRQName:{0}|sTrCode:{1}|sScreenNo:{2}|stockCode:{3}";
                String key       = String.Format(keyLayout
                                                 , e.sRQName
                                                 , e.sTrCode
                                                 , e.sScrNo
                                                 , 종목코드
                                                 );

                spell = AppLib.getClass1Instance().getSpell(key);
                String startDate = spell.startDate;

                String lastStockDate = "";
                int    startDate일자   = 0;
                if (!int.TryParse(startDate, out startDate일자))
                {
                    startDate일자 = 0;
                }

                if (nCnt > 0)
                {
                    for (int i = 0; i < nCnt; i++)
                    {
                        int 일자 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "일자").Trim());//[0]
                        lastStockDate = 일자.ToString();
                        if (startDate != null)
                        {
                            if (!(일자 >= startDate일자))
                            {
                                //입력받은 20200301 을 정수로 바꾼 strartDAte일자
                                //데이터로 받을 "일자" 가 이것보다 큰것만 가져온다.
                                //명령을 넣을때 실제로 시작일자는 ui상에서 종료일자가 들어간다.\
                                // api는 시작일자를 기준으로 내림차순으로 하기 때문이다.
                                //내림차순으로 받은거에서 끊는 역할을 해준다.
                                break;
                            }
                        }

                        int 개인투자자  = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "개인투자자").Trim());  //[6]
                        int 외국인투자자 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "외국인투자자").Trim()); //[7]
                        int 기관계    = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "기관계").Trim());    //[8]
                        int 금융투자   = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "금융투자").Trim());   //[9]
                        int 보험     = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "보험").Trim());     //[10]
                        int 투신     = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "투신").Trim());     //[11]
                        int 기타금융   = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "기타금융").Trim());   //[12]
                        int 은행     = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "은행").Trim());     //[13]
                        int 연기금등   = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "연기금등").Trim());   //[14]
                        int 사모펀드   = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "사모펀드").Trim());   //[15]
                        int 국가     = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "국가").Trim());     //[16]
                        int 기타법인   = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "기타법인").Trim());   //[17]
                        int 내외국인   = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "내외국인").Trim());   //[18]


                        TB_OPT10059 tmp = new TB_OPT10059();
                        tmp.stock_cd             = 종목코드;
                        tmp.stock_dt             = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "일자").Trim();
                        tmp.buy_sell             = spell.buyOrSell;
                        tmp.amt_amount           = spell.priceOrAmount;
                        tmp.domestic_investor    = 개인투자자;
                        tmp.foreign_investor     = 외국인투자자;
                        tmp.institution          = 기관계;
                        tmp.financial_investment = 금융투자;
                        tmp.insurance            = 보험;
                        tmp.investment_trust     = 투신;
                        tmp.etc_financial        = 기타금융;
                        tmp.bank                        = 은행;
                        tmp.pension_fund                = 연기금등;
                        tmp.private_equity_fund         = 사모펀드;
                        tmp.nation                      = 국가;
                        tmp.etc_corporation             = 기타법인;
                        tmp.foregin_investment_in_korea = 내외국인;
                        tmp.prev_next                   = e.sPrevNext;
                        lst.Add(tmp);
                    }
                }
                else
                {
                    종목코드 = "00000";
                }

                if (lst.Count() > 0)
                {
                    DailyData dd = new DailyData();
                    dd.insertOpt10059(lst);
                }

                int prevNext = 0;
                int.TryParse(e.sPrevNext, out prevNext);
                //ScreenNumber.getClass1Instance().DisconnectRealData(e.sScrNo);
                //ScreenNumber.getClass1Instance().SetRealRemove("ALL", "ALL");
                //래치를 호출해서 잠김을 제거한다.--래치 일단 제거 호출하는데도 제거 했다. 1초에 5번 호출 규칙만 적용해보자.
                AppLib.getClass1Instance().setOpt10081(spell.sTrCode);
                //2020년03월29일 확인 내용
                //nprevNext가 0이면 종료고 2이면 진행으로 알고 있었다.
                //그런데 어느시점이 지나가면 그게 아닌것 같다.
                //이걸 확인하려면 디비에 이걸 넣어야한다.
                //2012년까지 정상동작하고 이전데이터는 무조건 prev_next를 0을 리턴한다.
                //이건 수동으로 봐야겠다. 끝.

                if (startDate.Equals("ZERO") || (startDate.Length == 8 && startDate.CompareTo(lastStockDate) >= 0) || prevNext == 0)
                //ZERO면 한번만 호출이다. 또는 시작일과 마지막 리턴일이 같다면 종료되어야한다.
                {
                    AppLib.getClass1Instance().removeSpellDictionary(spell.key);
                    int    position = spell.key.LastIndexOf("|");
                    String key1     = spell.key.Substring(0, position);
                    //래치를 호출해서 잠김을 제거한다.--래치 일단 제거 호출하는데도 제거 했다. 1초에 5번 호출 규칙만 적용해보자.
                }
                else if (prevNext > 0)
                {
                    //putReceivedQueueAndsetNextSpell(key, prevNext, lastStockDate);
                    OpenApi.Spell.SpellOpt tmp = spell.ShallowCopy();
                    tmp.nPrevNext     = prevNext;
                    tmp.lastStockDate = lastStockDate;
                    AppLib.getClass1Instance().removeSpellDictionary(key);
                    AppLib.getClass1Instance().AddSpellDictionary(key, tmp);
                    AppLib.getClass1Instance().EnqueueByOrderQueue(tmp);  //주문을 다시 넣는다.
                }
            }
            catch (Exception ex)
            {
                FileLog.PrintF("[ALERT-ReceivedData-OPT10059]Exception ex=" + ex.Message);
            }
        }