using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using XStockNew.Entity;
using XStockNew.Entity.Base;
using System.Data;
using System.Reflection;
using System.Collections;
using System.Data.SqlClient;
using XydSoft.FrameWork;
using XStockNew.Entity.DAL;

namespace XStockNew.CollectData
{
   ///


   /// 采集复权信息
   ///

   public class CollectRestore
   {
       ///
       /// 入口函数
       ///

       public static void CollectRestoreInfo()
       {
           var list = CollectRestore.GetList();
           List result = new List();
           foreach (var item in list)
           {
               if (CacheData.IsAStock(item.Code))
               {
                   result.Add(item);
               }
           }
           if (list != null && list.Count > 0)
           {
               XydSoft.FrameWork.DAL.SqlServerHelperSQL sqlServerHelperSQL = new XydSoft.FrameWork.DAL.SqlServerHelperSQL(Const.SqlServerConnectionString);
               sqlServerHelperSQL.ExecuteSql("truncate table TB_RestoreInfo");
               DAL_RestoreInfo.BatchAdd(result);
           }
       }

       ///


       /// 读取数据
       ///

       ///
       public static List GetList()
       {
           List list = new List();
           string path = Path.Combine(ConstData.DZHPath, @"download\pwr\full.PWR");
           BinaryReader sReader = new BinaryReader(File.Open(path, FileMode.Open));
           sReader.BaseStream.Position = 12;
           int i;
           while (sReader.BaseStream.Length > sReader.BaseStream.Position)
           {
               RestoreInfo restoreInfo = new RestoreInfo();
               string codeString = System.Text.Encoding.Default.GetString(sReader.ReadBytes(8));
               int code = codeString.ToLower().Replace("sh", "").Replace("sz", "").ToInteger();
               sReader.BaseStream.Position += 8;
               i = sReader.ReadInt32();
               while (i > 0)
               {
                   DateTime date = DateTime.Parse("1970-01-01").AddSeconds(i);
                   float 股数量 = sReader.ReadSingle();
                   float 配股 = sReader.ReadSingle();
                   float 配股价 = sReader.ReadSingle();
                   float 分红 = sReader.ReadSingle();
                   if (sReader.BaseStream.Length > sReader.BaseStream.Position)
                       i = sReader.ReadInt32();
                   else
                       break;
                   if (分红 > 0 || 股数量 > 0 || 配股 > 0 || 配股价 > 0)
                       list.Add(new RestoreInfo()
                       {
                           Bonus = 分红,
                           BonusIssueAmount = 股数量,
                           Code = code,
                           Date = date,
                           RationedSharesAmount = 配股,
                           RationedSharesPrice = 配股价,
                       });
               }
           }
           sReader.Close();
           return list;
       }
   }
}


Leave a Reply