Beispiel #1
0
        public List <SynchroLog> GetSynchroLogDatas(Context ctx, string sql)
        {
            List <SynchroLog> logs = null;
            SynchroLog        log  = null;

            DynamicObjectCollection coll = GetObjects(ctx, sql);

            if (coll != null && coll.Count > 0)
            {
                logs = new List <SynchroLog>();

                foreach (var item in coll)
                {
                    if (item != null)
                    {
                        log = new SynchroLog();

                        log.FDataSourceType     = (SynchroDataType)Enum.Parse(typeof(SynchroDataType), SQLUtils.GetFieldValue(item, "FDataSourceType"));
                        log.sourceId            = SQLUtils.GetFieldValue(item, "FDataSourceId");
                        log.K3BillNo            = SQLUtils.GetFieldValue(item, "FBILLNO");
                        log.BeginTime           = Convert.ToDateTime(SQLUtils.GetFieldValue(item, "FSynchroTime"));
                        log.IsSuccess           = Convert.ToInt32(SQLUtils.GetFieldValue(item, "IsSuccess"));
                        log.ErrInfor            = SQLUtils.GetFieldValue(item, "FErrInfor");
                        log.FDataSourceTypeDesc = SQLUtils.GetFieldValue(item, "FDataSourceTypeDesc");
                        log.FOperateId          = SQLUtils.GetFieldValue(item, "FHSOperateId");

                        logs.Add(log);
                    }
                }
            }

            return(logs);
        }
        /// <summary>
        /// 将需要同步的会员(用户)数据进行打包(单个客户)
        /// </summary>
        /// <param name="sourceData"></param>
        /// <param name="log"></param>
        /// <param name="operationType"></param>
        /// <returns></returns>
        public override JObject BuildSynchroDataJson(AbsSynchroDataInfo sourceData, SynchroLog log, SynOperationType operationType)
        {
            JObject root = new JObject();

            root.Add("NeedUpDateFields", new JArray(""));
            root.Add("IsDeleteEntry", "false");
            root.Add("SubSystemId", "");
            root.Add("IsVerifyBaseDataField", "true");

            if (operationType == SynOperationType.SAVE)
            {
                root.Add("Model", ConvertSynObjToJObj(sourceData, operationType));
                return(root);
            }
            //数据更新时的Json格式
            else
            {
                //更新单据时,表体信息必须填写明细表体的主键
                K3CustomerInfo custData = sourceData as K3CustomerInfo;
                string         sFCustId = string.Format(@"/*dialect*/ select FCUSTID from T_BD_CUSTOMER where FNumber = '{0}'", custData.FNumber);

                string sMainFCustId = string.Format(@"/*dialect*/ select FCUSTID from T_BD_CUSTOMER where FNumber = '{0}' and FUseOrgId != 1", custData.FNumber);
                int    subFCustId   = Convert.ToInt32(JsonUtils.ConvertObjectToString(SQLUtils.GetObject(this.K3CloudContext, sMainFCustId, "FCUSTID")));

                DynamicObjectCollection coll = SQLUtils.GetObjects(this.K3CloudContext, sFCustId);

                JArray model = new JArray();

                if (coll.Count > 0)
                {
                    foreach (var item in coll)
                    {
                        if (item["FCUSTID"] != null)
                        {
                            JObject baseData = ConvertSynObjToJObj(sourceData, operationType);
                            baseData.Add("FCUSTID", Convert.ToInt32(JsonUtils.ConvertObjectToString(item["FCUSTID"])));

                            if (subFCustId != Convert.ToInt32(JsonUtils.ConvertObjectToString(item["FCUSTID"])))
                            {
                                K3CustomerInfo soData = sourceData as K3CustomerInfo;
                                baseData = ConvertSynObjToJObj(soData, operationType);
                                baseData.Add("FCUSTID", Convert.ToInt32(JsonUtils.ConvertObjectToString(item["FCUSTID"])));
                            }
                            model.Add(baseData);
                        }
                    }
                }
                root.Add("Model", model);
                return(root);
            }
        }
Beispiel #3
0
        /// <summary>
        /// 记录同步日志
        /// </summary>
        /// <param name="ctx">k3cloud登录上下文</param>
        /// <param name="result">同步结果</param>
        public static void WriteSynchroLog(Context ctx, SynchroLog log, bool notMerge = false)
        {
            lock (objLock)
            {
                string insertSql = "";
                if (notMerge)
                {
                    insertSql = @"
                                 Insert Into HS_T_SynchroLog(FDataSourceType,FDataSourceId,FBILLNO,
                                        FSynchroTime,FIsSuccess,FErrInfor,FDataSourceTypeDesc,FHSOperateId)
                                 Select @FDataSourceType as FDataSourceType,@FDataSourceId as FDataSourceId,
                                        @FBILLNO as FBILLNO,@FSynchroTime as FSynchroTime,
                                        @FIsSuccess as FIsSuccess,@FErrInfor as FErrInfor,
                                        @FDataSourceTypeDesc as FDataSourceTypeDesc,
                                        @FHSOperateId as FHSOperateId ";
                }
                else
                {
                    insertSql = @"if not exists(select 1 from HS_T_SynchroLog where FDataSourceType =@FDataSourceType and FDataSourceId=@FDataSourceId and FBILLNO=@FBILLNO)
                                 Insert Into HS_T_SynchroLog(FDataSourceType,FDataSourceId,FBILLNO,
                                        FSynchroTime,FIsSuccess,FErrInfor,FDataSourceTypeDesc,FHSOperateId)
                                 Select @FDataSourceType as FDataSourceType,@FDataSourceId as FDataSourceId,
                                        @FBILLNO as FBILLNO,@FSynchroTime as FSynchroTime,
                                        @FIsSuccess as FIsSuccess,@FErrInfor as FErrInfor,
                                        @FDataSourceTypeDesc as FDataSourceTypeDesc,
                                        @FHSOperateId as FHSOperateId 
                                Else
                                    Update HS_T_SynchroLog Set FSynchroTime=@FSynchroTime,
                                            FIsSuccess=@FIsSuccess,
                                            FErrInfor=@FErrInfor,
                                            FDataSourceTypeDesc=@FDataSourceTypeDesc,
                                            FHSOperateId=@FHSOperateId
                                    Where FDataSourceType =@FDataSourceType and FDataSourceId=@FDataSourceId and FBILLNO=@FBILLNO
                                ";
                }
                List <SqlParam> paramList = new List <SqlParam>();
                paramList.Add(new SqlParam("@FDataSourceType", KDDbType.String, log.FDataSourceType.ToString()));
                paramList.Add(new SqlParam("@FDataSourceId", KDDbType.String, string.IsNullOrWhiteSpace(log.sourceId) ? string.IsNullOrWhiteSpace(log.sourceNo) ? "0" : log.sourceNo : log.sourceId));
                paramList.Add(new SqlParam("@FBILLNO", KDDbType.String, string.IsNullOrWhiteSpace(log.sourceNo) ? "" : log.sourceNo));
                paramList.Add(new SqlParam("@FSynchroTime", KDDbType.DateTime, DateTime.Now));
                paramList.Add(new SqlParam("@FIsSuccess", KDDbType.String, log.IsSuccess));
                paramList.Add(new SqlParam("@FErrInfor", KDDbType.String, log.ErrInfor));
                paramList.Add(new SqlParam("@FDataSourceTypeDesc", KDDbType.String, GetDataSourceTypeDesc(log.FDataSourceType)));
                paramList.Add(new SqlParam("@FHSOperateId", KDDbType.Int64, ctx.UserId));

                Kingdee.BOS.App.ServiceHelper.GetService <IDBService>().Execute(ctx, insertSql, paramList);
            }
        }
        /// <summary>
        /// 数据同步操作完成后(单张数据)
        /// </summary>
        public virtual void AfterDoSynchroData(HttpResponseResult result, SynchroLog log)
        {
            //更新同步日志的提示信息
            //UpdateSynchroLogInfo(result, log);

            //反写中间库(原系统)的数据的同步状态
            WriteBackSrcStatus(log);

            if (log.IsSuccess == 1 && AutoAudit)
            {
                //将数据提交审核
                //AuditData(result.Result, log);
            }

            //记录同步日志
            LogHelper.WriteSynchroLog(this.K3CloudContext, log);
        }
Beispiel #5
0
        public override JObject BuildSynchroDataJson(AbsSynchroDataInfo sourceData, SynchroLog log, SynOperationType operationType)
        {
            JObject baseData = null;

            if (sourceData != null)
            {
                K3BatchAdjust just = sourceData as K3BatchAdjust;

                if (just != null)
                {
                    baseData = new JObject();

                    baseData.Add("FName", just.FName);
                    baseData.Add("FDate", DateTime.Now);

                    JObject FSaleOrgId = new JObject();
                    FSaleOrgId.Add("FNumber", "100.01");
                    baseData.Add("FSaleOrgId", FSaleOrgId);

                    baseData.Add("FBATCHADJUSTENTRY", BuildBatchAdjustEntry(sourceData));
                }
            }
            return(baseData);
        }
        /// <summary>
        /// 创建同步日志
        /// </summary>
        /// <param name="datas"></param>
        /// <returns></returns>
        protected List <SynchroLog> CreateSynchroLog(IEnumerable <AbsSynchroDataInfo> datas)
        {
            List <SynchroLog> logs = null;

            if (datas != null && datas.Count() > 0)
            {
                logs = new List <SynchroLog>();

                foreach (var data in datas)
                {
                    SynchroLog log = new SynchroLog();
                    //log.FileName = data.FileName;
                    log.GroupId             = groupId;
                    log.BeginTime           = DateTime.Now;
                    log.FDataSourceType     = DataType;
                    log.FDataSourceTypeDesc = LogUtils.GetDataSourceTypeDesc(this.DataType);
                    //log.sourceId = data.srcPKId;
                    log.sourceNo = data.SrcNo;
                    log.K3BillNo = "";
                }
            }

            return(logs);
        }
 public override JObject BuildSynchroDataJson(AbsSynchroDataInfo sourceData, SynchroLog log, SynOperationType operationType)
 {
     return(null);
 }
 /// <summary>
 /// 反写中间库的数据的同步状态
 /// </summary>
 /// <param name="log"></param>
 public virtual void WriteBackSrcStatus(SynchroLog log)
 {
 }
 /// <summary>
 /// 将需要同步的数据转换为JSON格式(单个)
 /// </summary>
 /// <param name="sourceData"></param>
 /// <param name="log"></param>
 /// <param name="operationType"></param>
 /// <returns></returns>
 public abstract JObject BuildSynchroDataJson(AbsSynchroDataInfo sourceData, SynchroLog log, SynOperationType operationType);
 /// <summary>
 /// 单条数据同步之前的相关操作:如判断数据是否存在,存在则先反审核等等之类的动作
 /// </summary>
 public virtual void BeforeDoSynchroDataSign(AbsSynchroDataInfo row, SynchroLog log, out bool cancel)
 {
     cancel = false;
 }