Exemple #1
0
        public ResultDiagnose Diagnose(BaseDiagData data)
        {
            foreach (var obj in _diagList)
            {
                var ret = obj.Diagnose(data);

                if (ret.ResultCode == eResultDiag.Invalid_Diag_Param)
                    continue;
                else if (ret.ResultCode != eResultDiag.Pass)
                    return ret;
            }

            return new ResultDiagnose()
            {
                ResultCode = eResultDiag.Pass,
                ResultMessage = "正常数据"
            };
        }
Exemple #2
0
        public override ResultDiagnose Diagnose(BaseDiagData data)
        {
            GRDiagData grData = data as GRDiagData;

            if (grData == null)
            {
                return new ResultDiagnose(){
                    ResultCode = eResultDiag.Invalid_Diag_Param,
                    ResultMessage = "诊断数据错误!"
                };
            }

            var grChecker = new DiagnoseHelper();

            StringBuilder sbMsg = new StringBuilder();

            foreach (var checker in grChecker.GRCheckHandler)
            {
                var ret = checker(grData);

                if (ret.ErrorCode == -1)
                {
                    return new ResultDiagnose()
                    {
                        ResultCode = eResultDiag.Error,
                        ResultMessage = ret.ErrorMessage
                    };
                }
                else if (ret.ErrorCode == 0)
                {
                    continue;
                }
                else
                {
                    sbMsg.Append(ret.ErrorMessage);
                }
            }

            if (sbMsg.Length > 0)
            {
                return new ResultDiagnose()
                {
                    ResultCode = eResultDiag.Error,
                    ResultMessage = sbMsg.ToString()
                };
            }

            return new ResultDiagnose()
            {
                ResultCode = eResultDiag.Pass,
                ResultMessage = "数据正常"
            };
        }
Exemple #3
0
 public abstract ResultDiagnose Diagnose(BaseDiagData data);
Exemple #4
0
        public override ResultDiagnose Diagnose(BaseDiagData data)
        {
            var ivData = data as InvoiceDiagData;

            if (ivData == null)
            {
                return new ResultDiagnose()
                {
                    ResultCode = eResultDiag.Invalid_Diag_Param,
                    ResultMessage = "诊断数据错误!"
                };
            }

            var objs = from iv in _dbContext.ABi_Invoice
                       join gi in _dbContext.ABi_GR_Invoice on iv.ABi_Invoice_ID equals gi.ABi_Invoice_ID
                       join gr in _dbContext.ABi_GR on gi.ABi_GR_ID equals gr.ABi_GR_ID
                       join v in _dbContext.ABi_Vendor on iv.ABi_Vendor_ID equals v.ABi_Vendor_ID
                       where iv.InvoiceNumber == ivData.InvoiceNumber && v.VendorCode.Contains(ivData.VendorCode)
                       select new { iv.InvoiceNumber, iv.Deleted, gr.GRNumber, gr.GRItemNumber, v.VendorCode };

            if (objs == null || objs.Count() == 0)
            {
                return new ResultDiagnose()
                {
                    ResultCode = eResultDiag.Error,
                    ResultMessage = String.Format("供应商({0})发票({1})不存在!", ivData.VendorCode, ivData.InvoiceNumber)
                };
            }

            var unmatched = new List<string[]>();
            var delIVs = new List<string[]>();
            foreach (var obj in objs)
            {
                var ivSwaps = from o in _dbContext.yb_invoice_report_swap
                              where o.invoice_no == obj.InvoiceNumber && o.lifnr == obj.VendorCode
                                    && o.belnr == obj.GRNumber && o.bukrs == obj.GRItemNumber
                              select o.invoice_no;

                if (ivSwaps == null || ivSwaps.Count() == 0)
                {
                    if (obj.Deleted == true)
                    {
                        delIVs.Add(new string[] { obj.InvoiceNumber, obj.GRNumber, obj.GRItemNumber, obj.VendorCode, (obj.Deleted == true).ToString() });
                    }
                    else
                        unmatched.Add(new string[]{obj.InvoiceNumber, obj.GRNumber, obj.GRItemNumber, obj.VendorCode, (obj.Deleted == true).ToString()});
                }
            }

            if (unmatched.Count > 0 || delIVs.Count > 0)
            {
                StringBuilder sbMsg = new StringBuilder();
                if (unmatched.Count > 0)
                {
                    sbMsg.AppendLine("以下收货信息没有同步到SAP中,请重新发送发票信息:");
                    foreach (var obj in unmatched)
                    {
                        if (obj[4].ToLower() == "true")
                        {
                            sbMsg.AppendFormat("\t发票号({0}), 收货({1}, {2}),供应商代码({3}) -- 已被用户删除\n", obj[0], obj[1], obj[2], obj[3]);
                        }
                        else
                            sbMsg.AppendFormat("\t发票号({0}), 收货({1}, {2}),供应商代码({3})\n", obj[0], obj[1], obj[2], obj[3]);
                    }
                }

                if (delIVs.Count > 0)
                {
                    sbMsg.AppendLine("\n以下发票收货信息已经被用户删除:");
                    foreach (var obj in delIVs)
                    {
                        if (obj[4].ToLower() == "true")
                        {
                            sbMsg.AppendFormat("\t发票号({0}), 收货({1}, {2}),供应商代码({3}) -- 已被用户删除\n", obj[0], obj[1], obj[2], obj[3]);
                        }
                        else
                            sbMsg.AppendFormat("\t发票号({0}), 收货({1}, {2}),供应商代码({3})\n", obj[0], obj[1], obj[2], obj[3]);
                    }
                }

                return new ResultDiagnose()
                {
                    ResultCode = eResultDiag.Error,
                    ResultMessage = sbMsg.ToString()
                };
            }

            return new ResultDiagnose()
            {
                ResultCode = eResultDiag.Pass,
                ResultMessage = String.Format("数据正常")
            };
        }
Exemple #5
0
        public override ResultDiagnose Diagnose(BaseDiagData data)
        {
            var poData = data as PODiagData;

            if (poData == null)
            {
                return new ResultDiagnose()
                {
                    ResultCode = eResultDiag.Invalid_Diag_Param,
                    ResultMessage = "诊断数据错误!"
                };
            }

            var unsyncPOs = new List<KeyValuePair<string, string>>();

            var newPO = from o in _dbContext.ABi_PO
                        where o.PONumber == poData.PONumber
                               && o.POItemNumber.Contains(poData.POItemNumber)
                        select o;
            var poObjs = from o in _dbContext.yb_po_report_swap
                         where o.ebeln == poData.PONumber && o.ebelp == poData.POItemNumber
                         select o;

            if ((poObjs == null || poObjs.Count() == 0) && (newPO == null || newPO.Count() == 0) )
            {
                unsyncPOs.Add(new KeyValuePair<string, string>(poData.PONumber, poData.POItemNumber));
            }

            var delPOs = new List<KeyValuePair<string, string>>();
            var filteredPOs = new List<KeyValuePair<string, string>>();
            var syncingPOs = new List<KeyValuePair<string, string>>();
            var wrongPOs = new List<KeyValuePair<string, string>>();

            foreach (var po in poObjs)
            {
                if (po.status == false)
                {
                    syncingPOs.Add(new KeyValuePair<string,string>(po.ebeln, po.ebelp));
                }

                if (newPO.FirstOrDefault(o => o.PONumber == po.ebeln && o.POItemNumber == po.ebelp) == null)
                {
                    var delLog = from o in _dbContext.DelLog
                                 where o.Data.Contains(poData.PONumber) && o.Data.Contains(poData.POItemNumber)
                                 select o;

                    if (delLog != null && delLog.Count() > 0)
                    {
                        delPOs.Add(new KeyValuePair<string, string>(po.ebeln, po.ebelp));
                    }

                    if (po.status == true)
                    {
                        if (Config.getInstance().POFilterCompany.Contains(po.bukrs) && String.IsNullOrEmpty(po.matnr))
                        {
                            filteredPOs.Add(new KeyValuePair<string, string>(po.ebeln, po.ebelp));
                        }
                    }
                }

                var poTraces = Trace.TraceHelper.SearchTrace(new Trace.TraceQuery()
                {
                    PONumber = poData.PONumber,
                    POItemNumber = poData.POItemNumber,
                    TraceType = Trace.eTraceType.ePOBase
                });

                if (poTraces != null && poTraces.Count > 0)
                {
                    var pt = poTraces.FirstOrDefault(o => o.Status == (int)Trace.eTraceStatus.eCommit);
                    if (pt != null)
                    {
                        delPOs.Add(new KeyValuePair<string, string>(po.ebeln, po.ebelp));
                    }
                }
            }

            foreach (var po in newPO)
            {
                if (null != poObjs.FirstOrDefault(o => o.ebeln == po.PONumber && o.ebelp == po.POItemNumber))
                    continue;

                if (po.Deletion == true)
                {
                    delPOs.Add(new KeyValuePair<string, string>(po.PONumber, po.POItemNumber));
                }
                else if (!po.ABi_Vendor_ID.HasValue)
                {
                    wrongPOs.Add(new KeyValuePair<string, string>(po.PONumber, po.POItemNumber));
                }
                else
                {
                    var delLog = from o in _dbContext.DelLog
                                 where o.Data.Contains(poData.PONumber) && o.Data.Contains(poData.POItemNumber)
                                 select o;

                    if (delLog != null && delLog.Count() > 0)
                    {
                        delPOs.Add(new KeyValuePair<string, string>(po.PONumber, po.POItemNumber));
                    }
                }
            }

            StringBuilder sbMsg = new StringBuilder();

            if (unsyncPOs.Count > 0)
            {
                sbMsg.AppendLine("以下订单没有从SAP中同步到VP中,请检查SAP中数据或相关逻辑:");
                foreach (var obj in unsyncPOs)
                {
                    sbMsg.AppendFormat("\t订单({0}, {1})\n", obj.Key, obj.Value);
                }
            }

            if (delPOs.Count > 0)
            {
                sbMsg.AppendLine("以下订单已经被用户删除:");
                foreach (var obj in delPOs)
                {
                    sbMsg.AppendFormat("\t订单({0}, {1})\n", obj.Key, obj.Value);
                }
            }

            if (filteredPOs.Count > 0)
            {
                sbMsg.AppendLine("以下订单物料编号为空,并且订单公司不在上线公司列表内,不会导入到VP中:");
                foreach (var obj in filteredPOs)
                {
                    sbMsg.AppendFormat("\t订单({0}, {1})\n", obj.Key, obj.Value);
                }
            }

            if (syncingPOs.Count > 0)
            {
                sbMsg.AppendLine("以下订单还没有同步到VP,后台同步程序正在更新:");
                foreach (var obj in syncingPOs)
                {
                    sbMsg.AppendFormat("\t订单({0}, {1})\n", obj.Key, obj.Value);
                }
            }

            if (wrongPOs.Count > 0)
            {
                sbMsg.AppendLine("以下订单数据不完整或错误:");
                foreach (var obj in wrongPOs)
                {
                    sbMsg.AppendFormat("\t订单({0}, {1})\n", obj.Key, obj.Value);
                }
            }

            if (sbMsg.Length > 0)
            {
                return new ResultDiagnose()
                {
                    ResultCode = eResultDiag.Error,
                    ResultMessage = sbMsg.ToString()
                };
            }

            return new ResultDiagnose()
            {
                ResultCode = eResultDiag.Pass,
                ResultMessage = String.Format("数据正常", poData.PONumber, poData.POItemNumber)
            };
        }