public async Task <bool> SyncData_EveryDate(MC_getToken_Result token)
        {
            string sql = "SELECT MAX(RQ) FROM MN_THD";

            var dbdate = helper.ExecuteScalar(sql, new Dictionary <string, object>()).ToString();

            var startDate = string.IsNullOrEmpty(dbdate)
                ? DateTime.Parse("2019/08/01").ToString("yyyy/MM/dd")
                : DateTime.Parse(dbdate).Date.ToString("yyyy/MM/dd");

            var endDate = DateTime.Now.Date.ToString("yyyy/MM/dd");

            //var result = await RequestAndWriteData(token, startDate, endDate, pageSize);

            LogHelper.Info("开始MN_THD同步作业");

            var result = await
                         RequestAndWriteData_V2 <MC_PickUpGoods_Result, MC_PickUpGoods_ResultInfo>(token, startDate,
                                                                                                   endDate);

            Call_MN_THD_Update();

            LogHelper.Info("本次MN_THD同步作业结束");

            return(result);
        }
        public async Task <bool> SyncData_Today(MC_getToken_Result token)
        {
            var startDate = DateTime.Now.Date.ToString("yyyy/MM/dd");
            var result    = await RequestAndWriteData(token, startDate, startDate);

            Call_MN_THD_Update();

            return(result);
        }
        public bool SyncData_EveryDate(MC_getToken_Result token)
        {
            string sql = "SELECT MAX(RQ) FROM MN_CKD";

            var dbdate = DbUtils.GetExecuteScalarWhere(sql, null).ToString();

            var startDate = string.IsNullOrEmpty(dbdate)?
                            DateTime.Parse("2019/05/01").ToString("yyyy/MM/dd")
                : DateTime.Parse(dbdate).Date.ToString("yyyy/MM/dd");

            var endDate = DateTime.Now.Date.AddDays(-1).ToString("yyyy/MM/dd");


            return(RequestAndWriteData(token, startDate, endDate, pageSize));
        }
        public async Task <bool> SyncData_EveryDate(MC_getToken_Result token)
        {
            string sql = "SELECT MAX(RQ) FROM MN_CKD";

            var dbdate = helper.ExecuteScalar(sql, new Dictionary <string, object>()).ToString();

            var startDate = string.IsNullOrEmpty(dbdate)?
                            DateTime.Parse("2019/05/01").ToString("yyyy/MM/dd")
                : DateTime.Parse(dbdate).Date.ToString("yyyy/MM/dd");

            var endDate = DateTime.Now.Date.AddDays(-1).ToString("yyyy/MM/dd");

            int pageindex = 1;

            return(await RequestAndWriteData(token, startDate, endDate, pageSize));
        }
        public async Task <bool> RequestAndWriteData(MC_getToken_Result token, string rq1, string rq2, int pagesize, int pageindex = 1)
        {
            var startDate = DateTime.Parse(rq1);
            var endDate   = DateTime.Parse(rq2);

            //if (startDate == DateTime.Now.Date)
            //{
            //    Console.Out.WriteLineAsync("时间未到出仓单暂时不同步");
            //    return false;
            //}



            string       parJson = "";
            const string logstr  = "参数:{0}\r\n返回结果:总条数【{1}】,当前页共【{2}】条记录\r\n异常:{3}";

            try
            {
                do
                {
                    rq1 = startDate.ToString("yyyy/MM/dd");
                    rq2 = startDate.AddDays(1) <= endDate?startDate.AddDays(1).ToString("yyyy/MM/dd") : rq1;

                    var pagecount = 0;
                    var total     = 0;
                    pageindex = 1;

                    do
                    {
                        var pars = new MC_OutOfStore_Params(token.token, rq1, rq2, pagesize, pageindex);

                        parJson = JsonConvert.SerializeObject(pars);

                        var result = await
                                     Request <MC_OutOfStore_Result, MC_OutOfStore_Params>(
                            pars);

                        total = result.TotalCount;

                        var msg = string.Format(logstr, parJson, total,
                                                result.resultInfo.Count, "");

                        LogHelper.LogInfo(msg);
                        await Console.Out.WriteLineAsync(msg);

                        if (pagecount == 0)
                        {
                            pagecount = total / pagesize;

                            if (total % pagesize > 0)
                            {
                                pagecount++;
                            }
                        }
                        //写入数据库
                        if (result.resultInfo.Count > 0)
                        {
                            //并发写入
                            foreach (var row in result.resultInfo.AsParallel())
                            {
                                string sql = "SELECT COUNT(*) FROM MN_CKD WHERE FID=:FID";
                                var    par = new Dictionary <string, object>();
                                par.Add(":FID", row.FID);

                                var count = helper.ExecuteScalar(sql, par);

                                if (Convert.ToInt32(count) > 0)
                                {
                                    string where = "AND FID=:FID";
                                    helper.Update(row, where);
                                    continue;
                                }

                                row.ComputeFID();
                                helper.Insert(row);
                            }
                        }
                        pageindex++;
                    } while (pageindex <= pagecount);

                    startDate = startDate.AddDays(2);
                } while (startDate <= endDate);


                return(true);
            }
            catch (Exception e)
            {
                var msg = string.Format(logstr, parJson, 0,
                                        0, e);

                await Console.Out.WriteLineAsync(msg);

                return(false);
            }
        }
Exemple #6
0
        public async Task <bool> RequestAndWriteData_V2 <T1, T3>(MC_getToken_Result token, string rq1, string rq2) where T1 : MC_Request_BaseResult <T3> where T3 : IComputeFID, IFID, new()
        {
            string msg = "";

            var pageSize  = 1000;
            var pageIndex = 1;
            //计算请求参数
            var pars = ComputeParams(token.token, rq1, rq2, pageSize, pageIndex);

            string       parJson = "";
            const string logstr  = "参数:{0}\r\n返回结果:共【{1}】条记录\r\n异常:{2}";

            List <TP> exceptionList = null;

            var action = new Func <TP, Task <List <T3> > >(async(param) =>
            {
                var json         = JsonConvert.SerializeObject(param);
                List <T3> result = null;
                const string log = "参数:{0}\r\n返回结果:共【{1}】条记录\r\n异常:{2}";
                try
                {
                    result = await CommonRequest <T1, T3>(param);

                    var formatTxt = string.Format(log, json,
                                                  result.Count, "");

                    WriteDataToDB(result);
                    result.Clear();
                    LogHelper.Info(formatTxt);
                }
                catch (Exception e)
                {
                    //请求异常时,请加请求参数到异常列表,待列表循环结束后,再重新请求异常列表
                    if (exceptionList == null)
                    {
                        exceptionList = new List <TP>();
                    }

                    var formatTxt = string.Format(log, json, result?.Count ?? 0,
                                                  e.Message);

                    LogHelper.Info(formatTxt);
                    LogHelper.Error(e);
                }
                return(null);
            });

            foreach (var par in pars.AsParallel())
            {
                await action.Invoke(par);
            }

            int fixCount = 0;

            //处理异常列表
            if (exceptionList != null && exceptionList.Count > 0)
            {
                LogHelper.Info("重新请求异常列表数据");
                foreach (var par in exceptionList.AsParallel())
                {
                    try
                    {
                        var result = await CommonRequest <T1, T3>(par);

                        WriteDataToDB(result);
                        fixCount++;
                    }
                    catch (Exception e)
                    {
                        msg = string.Format(logstr, parJson, 0,
                                            0, e.Message);
                        LogHelper.Info(msg);
                        LogHelper.Error(e);
                    }
                }
            }

            return(exceptionList == null || fixCount == exceptionList.Count);
        }
        public bool RequestAndWriteData(MC_getToken_Result token, string rq1, string rq2, int pagesize = 1000, int pageindex = 1)
        {
            var startDate = DateTime.Parse(rq1);
            var endDate   = DateTime.Parse(rq2);

            //if (startDate == DateTime.Now.Date)
            //{
            //    Console.Out.WriteLineAsync("时间未到出仓单暂时不同步");
            //    return false;
            //}

            LogHelper.WriteLog("出仓单开始同步");

            string       parJson = "";
            const string logstr  = "参数:{0}\r\n返回结果:总条数【{1}】,当前页共【{2}】条记录\r\n异常:{3}";

            try
            {
                do
                {
                    rq1 = startDate.ToString("yyyy/MM/dd");
                    rq2 = startDate.AddDays(1) <= endDate?startDate.AddDays(1).ToString("yyyy/MM/dd") : rq1;

                    var pagecount = 0;
                    var total     = 0;
                    pageindex = 1;

                    do
                    {
                        var pars = new MC_OutOfStore_Params(token.token, rq1, rq2, pagesize, pageindex);

                        parJson = JsonConvert.SerializeObject(pars);

                        var result =
                            Request <MC_OutOfStore_Result, MC_OutOfStore_Params>(
                                pars);

                        total = result.TotalCount;

                        var msg = string.Format(logstr, parJson, total,
                                                result.resultInfo.Count, "");

                        LogHelper.WriteLog(msg);

                        if (pagecount == 0)
                        {
                            pagecount = total / pagesize;

                            if (total % pagesize > 0)
                            {
                                pagecount++;
                            }
                        }
                        //写入数据库
                        if (result.resultInfo.Count > 0)
                        {
                            //并发写入
                            foreach (var row in result.resultInfo.AsParallel())
                            {
                                string sql = "SELECT COUNT(*) FROM MN_CKD WHERE 1=1";

                                row.ComputeFID();

                                var where = " AND FID='" + row.FID + "'";
                                sql      += where;

                                var count = DbUtils.CountBySQL(sql);

                                var data = new MC_OutofStore_ResultInfo(row);

                                if (Convert.ToInt32(count) > 0)
                                {
                                    DbUtils.UpdateWithWhere <MC_OutofStore_ResultInfo>(data, where);
                                    continue;
                                }

                                DbUtils.InsertObj(data);
                            }
                        }
                        pageindex++;
                    } while (pageindex <= pagecount);

                    startDate = startDate.AddDays(2);
                } while (startDate <= endDate);


                return(true);
            }
            catch (Exception e)
            {
                var msg = string.Format(logstr, parJson, 0,
                                        0, e);

                LogHelper.WriteLog(msg);
                return(false);
            }
        }
        public async Task <bool> SyncData_Today(MC_getToken_Result token)
        {
            var startDate = DateTime.Now.Date.ToString("yyyy/MM/dd");

            return(await RequestAndWriteData_V2 <MC_OutOfStore_Result, MC_OutofStore_ResultInfo>(token, startDate, startDate));
        }
        public async Task <bool> RequestAndWriteData(MC_getToken_Result token, string rq1, string rq2,
                                                     int pagesize = 1000, int pageindex = 1)
        {
            var startDate = DateTime.Parse(rq1);
            var endDate   = DateTime.Parse(rq2);

            string       parJson = "";
            const string logstr  = "参数:{0}\r\n返回结果:总条数【{1}】,当前页共【{2}】条记录\r\n异常:{3}";

            do
            {
                rq1 = startDate.ToString("yyyy/MM/dd");
                rq2 = startDate.AddDays(1) <= endDate?startDate.AddDays(1).ToString("yyyy/MM/dd") : rq1;

                var pagecount = 0;
                var total     = 0;
                pageindex = 1;

                do
                {
                    try
                    {
                        var pars = new MC_PickUpGoods_Params(token.token, rq1, rq2, pagesize, pageindex);

                        parJson = JsonConvert.SerializeObject(pars);

                        var result = await  Request <MC_PickUpGoods_Result, MC_PickUpGoods_ResultInfo>(pars);

                        total = result.TotalCount;

                        var msg = string.Format(logstr, parJson, total,
                                                result.resultInfo.Count, "");

                        LogHelper.Info(msg);

                        if (pagecount == 0)
                        {
                            pagecount = total / pagesize;

                            if (total % pagesize > 0)
                            {
                                pagecount++;
                            }
                        }

                        //写入数据库
                        WriteDataToDB(result.resultInfo);

                        pageindex++;
                    }
                    catch (Exception e)
                    {
                        LogHelper.Error(e);
                    }
                } while (pageindex <= pagecount);

                startDate = startDate.AddDays(2);
            } while (startDate <= endDate);

            return(true);
        }