Пример #1
0
        /// <summary>
        /// 复制自身到mr_daily中
        /// </summary>
        /// <param name="daily">为空时,返回新实体,否则将改变实体的值</param>
        /// <returns></returns>
        public tbl_mr_dailyItem CopyToDailyMr(tbl_mr_dailyItem daily)
        {
            bool isNew = daily == null;

            if (isNew)
            {
                daily = new tbl_mr_dailyItem();
            }
            string[] fields = new string[] {
                "imei", "imsi", "mobile", "user_md10", "mcc", "province_id", "city_id", "sp_trone_id", "trone_id",
                "trone_order_id", "ori_trone", "ori_order", "linkid", "cp_param", "service_code", "price", "ip", "status",
                "syn_flag", "mo_table", "mo_id", "mr_date", "create_date", "IsMatch", "sp_api_url_id", "sp_id", "cp_id",
                "ivr_time", "trone_type", "api_order_id"
            };
            daily.IgnoreEquals = true;
            foreach (var f in fields)
            {
                object t = this[f];
                if (isNew && t == null)
                {
                    continue;
                }
                daily[f] = this[f];
            }
            if (isNew)
            {
                daily.mr_id = this.id;
            }
            return(daily);
        }
Пример #2
0
        protected virtual void StartPorcess()
        {
            WriteDebug("StartPorcess", false);
            LightDataModel.tbl_troneItem trone = null;
            var isms = LoadItem();
            if (isms == null)
            {
                WriteError("linkid not found");
                return;
            }
            if (!IsNew)
            {//update 不同步重复数据
                WriteExisted();
                return;
            }
            WriteDebug("ItemNotExisted", false);
            isms.ip = Shotgun.Library.Static.GetUserHostAddress();
            //isms.orgUrl = GetQuery();
            isms.recdate = DateTime.Now;
            isms.sp_api_url_id = API_URL_Config_Id;
            isms.sp_id = api.sp_id;
            //isms.API_Config_Id = API_Config_Id;

            //isms.linkid= //已经在LoadItem中赋值


            string err;
            if (IsMo)
            {//MO
                if (!string.IsNullOrEmpty(api.MoPrice))
                    isms.price = GetFee(api.MoPrice);

                err = InsertMO();
                MoCopyToMr();
            }
            else
            {//MR
                if (!string.IsNullOrEmpty(api.MrPrice))
                    isms.price = GetFee(api.MrPrice);
                MoCopyToMr();
                err = InsertMR();
            }
            if (string.IsNullOrEmpty(isms.ori_trone) && U2DMap.ContainsKey("ori_trone"))
            {//虚似端口
                if (C_VIRTUAL_PORT.Equals(U2DMap["ori_trone"], StringComparison.OrdinalIgnoreCase))
                    isms.ori_trone = string.Format("3{0:00000}", API_URL_Config_Id);
            }
            if (string.IsNullOrEmpty(isms.ori_order) && U2DMap.ContainsKey("ori_order"))
            {//虚似指令
                if (C_VIRTUAL_MSG.Equals(U2DMap["ori_order"], StringComparison.OrdinalIgnoreCase))
                    isms.ori_order = string.Format("ht_3{0:00000}_{1}", API_URL_Config_Id, isms.price);
            }

            if (!U2DMap.ContainsKey("mmc"))
                isms.mcc = "460";//没有设置mmc动作时,写入默认值

            WriteDebug("ValueCollected");


            if (isms.trone_id == 0)
            {
                if (!IsMo && string.IsNullOrEmpty(api.MrStatus))//MR 安全检查
                {//MR 数据,未配置状态检查时,进行“状态”关键字检查,以防万一
                    if (CheckStatusKeywords())
                        isms.trone_id = C_TM_STATUS_NOT_CONFIG;//存在“状态”关键字
                }
                try
                {

                    if (!IsSpServerBack(isms))
                    {//非正常SP服务的回传
                        isms.trone_id = C_TM_SERVER_IP_ERROR;
                    }
                    else if (isms.trone_id == 0)
                    {
                        trone = FillToneId(dBase, isms);
                        if (trone != null && IsMo && HasMoTroneOrderId)
                        {
                            var torder = FindTroneOrder(_MoItem);
                            if (torder != null)
                                _MoItem.trone_order_id = torder.id;
                        }
                    }
                }
#if !DEBUG
                catch (Exception ex)
                {
                    WriteDebug("TroneMathcFail:" + ex.Message);
                }
#endif
                finally { }
            }
            WriteDebug("TroneIdMatched");


            if (!string.IsNullOrEmpty(err))
            {
                WriteError(err);
                return;
            }
            try
            {

                if (_MrItem != null)
                {
                    if (_MoItem != null)
                    {
                        _MrItem.mo_id = _MoItem.id;
                        _MrItem.mo_table = _MoItem.TableName;
                        if (_MrItem.trone_id <= 0)
                            _MrItem.trone_id = _MoItem.trone_id;
                    }
                    _MrItem.IsMatch = _MrItem.trone_id > 0;
                    dBase.SaveData(_MrItem);
                }

                if (_MoItem != null)
                    dBase.SaveData(_MoItem);
            }
            catch (System.Data.Common.DbException)
            {
                WriteError("database busy");
                return;
            }
            WriteSuccess();
            WriteDebug("CoreProcessed", true);
            var db3 = (Shotgun.Database.IBaseDataPerformance)dBase;
            db3.EnableRecord = true;
            if (_MrItem != null)
            {//同步新的MR记录
                if (_MrItem.cp_id == 0 || _MrItem.cp_id == 34)
                    DoPush(trone);
            }


            try
            {
                if (_MrItem != null)
                {
                    LightDataModel.tbl_mr_dailyItem daily = null;
                    if (IsMo)
                    {
                        daily = LightDataModel.tbl_mr_dailyItem.GetVRDaily(dBase, _MrItem);
                    }
                    daily = _MrItem.CopyToDailyMr(daily);
                    dBase.SaveData(daily);

                }
            }
            catch { }

            WriteDebug(db3.PerformanceReport());
            WriteDebug("ALL done", true);
        }