Esempio n. 1
0
        void loadEliteData(eliteData el)
        {
            List <DataRow> ds  = el.data;
            EliteDataClass edc = new EliteDataClass(el.eliteId);

            for (int i = 0; i < ds.Count; i++)
            {
                DataRow dr = ds[i];
                JdGoodSummayInfoItemClass jsiic = new JdGoodSummayInfoItemClass();
                jsiic.skuId       = dr["JGD02"].ToString();
                jsiic.skuName     = dr["JGD03"].ToString();
                jsiic.couponLink  = dr["JGD07"].ToString();
                jsiic.imgageUrl   = dr["JGD08"].ToString();
                jsiic.materialUrl = dr["JGD09"].ToString();
                jsiic.price       = dr["JGD11"].ToString();
                jsiic.discount    = dr["JGD06"].ToString();
                if (dr["JGD15"] != null)
                {
                    jsiic.elitId = int.Parse(dr["JGD15"].ToString());
                }

                if (dr["JGD16"] != null && !string.IsNullOrEmpty(dr["JGD16"].ToString()))
                {
                    jsiic.isHot = int.Parse(dr["JGD16"].ToString());
                }
                if (dr["JGD17"] != null && !string.IsNullOrEmpty(dr["JGD17"].ToString()))
                {
                    jsiic.inOrderCount30Days = int.Parse(dr["JGD17"].ToString());
                }
                if (!edc.Data.ContainsKey(jsiic.skuId))
                {
                    edc.Data.Add(jsiic.skuId, jsiic);
                }
            }
            edc.lastUpdateTime = DateTime.Now;
            JdGoodsQueryClass.updateElites(el.eliteId, edc);
        }
        public void downloadData()
        {
            Dictionary <string, UpdateData> newAddRec = new Dictionary <string, UpdateData>();

            try
            {
                UpdateText?.Invoke(string.Format("-------------开始下载 {0}------------", DateTime.Now));
                long?batchId = getCurrBatchNo();
                if (batchId == null)
                {
                    UpdateText?.Invoke(string.Format("无法获取到批次号!"));
                    return;
                }
                if (batchId == null)
                {
                    batchId = 100 * (DateTime.Now.Year * 10000 + DateTime.Now.Month * 100 + DateTime.Now.Day) + 1;
                }
                UpdateText?.Invoke(string.Format("当前批次号:{0}", batchId));
                List <DataCondition> currDayConditions = new List <DataCondition>();
                DataCondition        dcc = new DataCondition();
                dcc.Datapoint = new DataPoint("JGD14");
                dcc.strOpt    = ">";
                dcc.value     = string.Format("{0}", 100 * (batchId / 100));
                currDayConditions.Add(dcc);
                string     msg         = null;
                DataSource dss         = GlobalShare.UserAppInfos.First().Value.mapDataSource["JdUnion_Client_Goods_NoXml"];
                DataSet    currDayData = DataSource.InitDataSource(dss, currDayConditions, out msg);
                if (currDayData == null)
                {
                    UpdateText?.Invoke(string.Format("获取当日数据失败!"));
                    return;
                }
                if (currDayData != null)
                {
                    for (int i = 0; i < currDayData.Tables[0].Rows.Count; i++)
                    {
                        eliteData tmp = new eliteData();
                        DataRow   dr  = currDayData.Tables[0].Rows[i];
                        string    eli = dr["JGD15"].ToString();
                        tmp.eliteId = int.Parse(eli);

                        tmp.data = new List <DataRow>();
                        tmp.data.Add(dr);
                        new Task(receiveData, tmp).Start();
                    }
                }
                //List<int> list = JdUnion_GlbObject.getElites();
                //Dictionary<string, string> cols = null;
                HashSet <string> allExistKeys = loadAllKeys();
                if (allExistKeys == null)
                {
                    allExistKeys = new HashSet <string>();
                }
                List <int> list = JdUnion_GlbObject.getElites();
                UpdateText?.Invoke(string.Format("当前数据库存在记录数{0}条!", allExistKeys.Count));

                int ErrCnt  = 0;
                int SaveCnt = 0;
                try
                {
                    foreach (int elit in list)//遍历每个elite
                    {
                        msg = null;
                        bool isExtra = false;
                        List <DataCondition> dics = new List <DataCondition>();
                        DataCondition        dc   = new DataCondition();
                        dc.Datapoint = new DataPoint("goodsReq/eliteId");
                        dc.value     = elit.ToString();
                        dics.Add(dc);
                        DataSet ds = DataSource.InitDataSource("JdUnion_Goods", dics, Program.UserId, out msg, ref isExtra);
                        //DataSet ds = new DataSet();
                        if (msg != null)
                        {
                            UpdateText?.Invoke(string.Format("获取分类数据{0}时出现错误,内容为{1}", elit, msg));
                            continue;
                        }
                        eliteData ed = new eliteData();
                        ed.eliteId = elit;
                        ed.data    = new List <DataRow>();

                        List <UpdateData> ups = DataSource.DataSet2UpdateData(ds, "jdUnion_BatchLoad", Program.UserId);
                        UpdateText?.Invoke(string.Format("{1}类总共接收到{0}条记录", ups.Count, elit));
                        UpdateData batchData = new UpdateData();
                        batchData.keydpt   = new DataPoint("JBTH1");
                        batchData.keyvalue = batchId.Value.ToString();
                        //batchData.Items.Add("JGD01", null);
                        int batchCnt = 1000;
                        for (int i = 0; i < ups.Count; i++)
                        {
                            string key = ups[i].Items["JGD02"].value;
                            if (allExistKeys.Contains(key))
                            {
                                continue;
                            }
                            ed.data.Add(ds.Tables[0].Rows[i]);
                            ups[i].keydpt   = new DataPoint("JGD02");
                            ups[i].keyvalue = key;
                            ups[i].ReqType  = DataRequestType.Add;
                            if (ups[i].Items.ContainsKey("JGD14"))
                            {
                                ups[i].Items["JGD14"].value = batchData.keyvalue;
                            }
                            else
                            {
                                ups[i].Items.Add("JGD14", new UpdateItem("JGD14", batchData.keyvalue));
                            }
                            batchData.SubItems.Add(ups[i]);
                            if (i == ups.Count - 1 || batchData.SubItems.Count == batchCnt)
                            {
                                bool succ = (SaveClientData == null) ? false : (SaveClientData.Invoke("jdUnion_BatchLoad", batchData, DataRequestType.Add));
                                if (!succ)
                                {
                                    ErrCnt += batchData.SubItems.Count;
                                }
                                else
                                {
                                    SaveCnt += batchData.SubItems.Count;
                                    for (int k = 0; k < ups.Count; k++)
                                    {
                                        string skey = ups[k].Items["JGD02"].value;
                                        if (!allExistKeys.Contains(skey))
                                        {
                                            allExistKeys.Add(skey);
                                        }
                                        if (!newAddRec.ContainsKey(skey))
                                        {
                                            newAddRec.Add(skey, ups[k]);
                                        }
                                    }
                                    UpdateText?.Invoke(string.Format("共计条数为{0}条,实际保存条数为{1}条!", ups.Count, batchData.SubItems.Count));
                                }
                                batchData = new UpdateData();
                            }
                        }
                        if (batchData.SubItems.Count > 0)//最后的不能错过。
                        {
                            bool succ = SaveClientData == null ? false : SaveClientData.Invoke("jdUnion_BatchLoad", batchData, DataRequestType.Add);
                            if (!succ)
                            {
                                //MessageBox.Show(string.Format("商品{0}保存错误!", ups[i].keyvalue));
                                ErrCnt += batchData.SubItems.Count;
                            }
                            else
                            {
                                SaveCnt += batchData.SubItems.Count;
                                for (int k = 0; k < ups.Count; k++)
                                {
                                    string skey = ups[k].Items["JGD02"].value;
                                    if (!allExistKeys.Contains(skey))
                                    {
                                        allExistKeys.Add(skey);
                                    }
                                    if (!newAddRec.ContainsKey(skey))
                                    {
                                        newAddRec.Add(skey, ups[k]);
                                    }
                                }
                                UpdateText?.Invoke(string.Format("共计条数为{0}条,实际保存条数为{1}条!", ups.Count, batchData.SubItems.Count));
                            }
                        }

                        if (ErrCnt > 0)
                        {
                            UpdateText?.Invoke(string.Format("错误条数为{0}条!", ErrCnt));
                        }
                        new Task(receiveData, ed).Start();
                    }
                }
                catch (Exception ce)
                {
                    UpdateText?.Invoke(string.Format("错误条数为{0}条!{1}[{2}]", ErrCnt, ce.Message, ce.StackTrace));
                }
                finally
                {
                    //this.Cursor = Cursors.Default;
                }
            }
            catch (Exception ce)
            {
                UpdateText?.Invoke(string.Format("下载数据错误:{0}[{1}]", ce.Message, ce.StackTrace));
            }
            finally
            {
                onSavedData?.Invoke(newAddRec);
            }
        }