private IList<DssExportHistory> GroupData(IList<LocationTransaction> locTrans, DssOutboundControl dssOutboundControl, DateTime effectiveDate)
        {
            #region 补充0成品工单
            var fgOrderDetIdList = locTrans
                 .Where(l => StringHelper.Eq(l.TransactionType, BusinessConstants.CODE_MASTER_LOCATION_TRANSACTION_TYPE_VALUE_RCT_WO))
                 .Select(l => l.OrderDetailId).Distinct().ToList();
            var rmOrderDetIdList = locTrans
                   .Where(l => StringHelper.Eq(l.TransactionType, BusinessConstants.CODE_MASTER_LOCATION_TRANSACTION_TYPE_VALUE_ISS_WO))
                   .Select(l => l.OrderDetailId).Distinct().ToList();

            var addList = rmOrderDetIdList.Except(fgOrderDetIdList).Distinct().ToList();

            #region 添加虚拟RCT-WO
            if (addList.Count > 0)
            {

                IList<LocationTransaction> virtualWOList = this.GetVirRctWo(addList);//GetVirtualRCTWO 修改为 GetVirRctWo
                if (virtualWOList.Count > 0)
                {
                    foreach (var virtualWO in virtualWOList)
                    {
                        virtualWO.TransactionType = BusinessConstants.CODE_MASTER_LOCATION_TRANSACTION_TYPE_VALUE_RCT_WO;
                        virtualWO.EffectiveDate = effectiveDate;
                        virtualWO.Qty = 0;
                    }
                    locTrans = locTrans.Concat(virtualWOList).ToList();
                }
            }
            #endregion
            #endregion

            #region Transformer
            var fgQuery = locTrans.Where(l => StringHelper.Eq(l.TransactionType, BusinessConstants.CODE_MASTER_LOCATION_TRANSACTION_TYPE_VALUE_RCT_WO)).ToList();
            var rmQuery = locTrans.Where(l => StringHelper.Eq(l.TransactionType, BusinessConstants.CODE_MASTER_LOCATION_TRANSACTION_TYPE_VALUE_ISS_WO)).ToList();

            log.Debug("Begin to group single data, count:" + fgQuery.Count);
            IList<DssExportHistory> dssExportHistoryList = this.GroupSingleDssExportHistory(fgQuery, rmQuery, dssOutboundControl, effectiveDate);
            #endregion

            return dssExportHistoryList;
        }
Beispiel #2
0
        /// <summary>
        /// ISS-UNP 计划外出库
        /// </summary>
        /// <param name="list"></param>
        /// <param name="dssOutboundControl"></param>
        /// <param name="isFLag">是</param>
        /// <returns></returns>
        protected IList <DssExportHistory> ConvertList(IList list, DssOutboundControl dssOutboundControl, bool isFLag)
        {
            IList <DssExportHistory> result = new List <DssExportHistory>();

            if (list != null && list.Count > 0)
            {
                foreach (object obj in list)
                {
                    DssExportHistory dssExportHistory = commonOutboundMgr.ConvertLocationTransactionToDssExportHistory(obj, dssOutboundControl);
                    //add djin 20120910
                    if ((string)((object[])obj)[4] == "Reject" && ((object[])obj).Length > 9)
                    {
                        dssExportHistory.PartyTo = locMgr.LoadLocation((string)((object[])obj)[9]).Region.Code;
                    }

                    dssExportHistory.KeyCode = dssExportHistory.OrderNo;//订单号

                    #region 账户、分账户、成本中心、项目
                    dssExportHistory.DefinedString1 = null; //账户
                    dssExportHistory.DefinedString2 = null; //分账户
                    dssExportHistory.DefinedString3 = null; //成本中心
                    dssExportHistory.DefinedString4 = null; //项目
                    this.GetAccount(dssExportHistory);
                    #endregion

                    result.Add(dssExportHistory);
                }
            }

            return(result);
        }
Beispiel #3
0
        protected IList <DssExportHistory> ConvertList(IList list, DssOutboundControl dssOutboundControl)
        {
            IList <DssExportHistory> result = new List <DssExportHistory>();

            if (list != null && list.Count > 0)
            {
                foreach (object obj in list)
                {
                    DssExportHistory dssExportHistory = commonOutboundMgr.ConvertLocationTransactionToDssExportHistory(obj, dssOutboundControl);

                    dssExportHistory.KeyCode = dssExportHistory.OrderNo;//订单号

                    #region 账户、分账户、成本中心、项目
                    dssExportHistory.DefinedString1 = null; //账户
                    dssExportHistory.DefinedString2 = null; //分账户
                    dssExportHistory.DefinedString3 = null; //成本中心
                    dssExportHistory.DefinedString4 = null; //项目
                    this.GetAccount(dssExportHistory);
                    #endregion

                    result.Add(dssExportHistory);
                }
            }

            return(result);
        }
        //protected override object Serialize(object obj)
        //{
        //    throw new NotImplementedException();
        //}

        #region Private Method
        public IList<DssExportHistory> ConvertList(IList<BillDetail> list, DssOutboundControl dssOutboundControl)
        {
            IList<DssExportHistory> result = new List<DssExportHistory>();
            if (list != null && list.Count > 0)
            {
                foreach (BillDetail billDetail in list)
                {
                    DssExportHistory dssExportHistory = new DssExportHistory();

                    dssExportHistory.DssOutboundControl = dssOutboundControl;
                    dssExportHistory.EventCode = BusinessConstants.DSS_EVENT_CODE_CREATE;
                    dssExportHistory.IsActive = true;
                    dssExportHistory.CreateDate = DateTime.Now;

                    dssExportHistory.OriginalId = billDetail.Id;
                    dssExportHistory.OrderNo = billDetail.ActingBill.OrderHead.OrderNo;
                    dssExportHistory.ReceiptNo = billDetail.ActingBill.ReceiptNo;
                    dssExportHistory.Item = billDetail.ActingBill.Item.Code;
                    dssExportHistory.Location = dssExportHistory.DssOutboundControl.UndefinedString1;//客户库位
                    dssExportHistory.Qty = billDetail.BilledQty;
                    dssExportHistory.EffectiveDate = billDetail.Bill.CreateDate.Date;
                    dssExportHistory.PartyTo = billDetail.Bill.BillAddress.Party.Code;//客户

                    dssExportHistory.DefinedString1 = billDetail.Bill.BillNo;//开票通知单号

                    dssExportHistory.KeyCode = DssHelper.GetBillKeyCode(dssExportHistory, billDetail.Bill.BillNo);

                    this.GetLoctransInfo(dssExportHistory);
                    result.Add(dssExportHistory);
                }
            }

            return result;
        }
        protected override IList<DssExportHistory> ExtractOutboundData(DssOutboundControl dssOutboundControl)
        {
            IList result = commonOutboundMgr.ExtractOutboundDataFromLocationTransaction(dssOutboundControl,
                BusinessConstants.CODE_MASTER_LOCATION_TRANSACTION_TYPE_VALUE_RCT_UNP, MatchMode.Exact);

            return this.ConvertList(result, dssOutboundControl);
        }
        public DssExportHistory ConvertLocationTransactionToDssExportHistory(object obj, DssOutboundControl dssOutboundControl)
        {
            DssExportHistory dssExportHistory = new DssExportHistory();
            dssExportHistory.DssOutboundControl = dssOutboundControl;
            dssExportHistory.EventCode = BusinessConstants.DSS_EVENT_CODE_CREATE;
            dssExportHistory.IsActive = true;
            dssExportHistory.CreateDate = DateTime.Now;

            dssExportHistory.OriginalId = (int)((object[])obj)[0];
            dssExportHistory.OrderNo = (string)((object[])obj)[1];
            dssExportHistory.ReceiptNo = (string)((object[])obj)[2];
            dssExportHistory.Item = (string)((object[])obj)[3];
            dssExportHistory.Location = (string)((object[])obj)[4];
            dssExportHistory.Qty = (decimal)((object[])obj)[5];
            dssExportHistory.EffectiveDate = (DateTime)((object[])obj)[6];
            dssExportHistory.PartyFrom = (string)((object[])obj)[7];
            dssExportHistory.PartyTo = (string)((object[])obj)[8];

            //记录RefLoc
            if (((object[])obj).Length > 9)
            {
                dssExportHistory.ReferenceLocation = (string)((object[])obj)[9];
            }

            return dssExportHistory;
        }
Beispiel #7
0
        private IList <DssExportHistory> ConvertList(IList list, DssOutboundControl dssOutboundControl)
        {
            IList <DssExportHistory> result = new List <DssExportHistory>();

            if (list != null && list.Count > 0)
            {
                foreach (object obj in list)
                {
                    DssExportHistory dssExportHistory = commonOutboundMgr.ConvertLocationTransactionToDssExportHistory(obj, dssOutboundControl);

                    dssExportHistory.Qty = -dssExportHistory.Qty;                             //修正数量

                    dssExportHistory.KeyCode           = dssExportHistory.OrderNo;            //订单号
                    dssExportHistory.ReferenceLocation = dssOutboundControl.UndefinedString1; //客户库位

                    if (dssExportHistory.Location != null && dssExportHistory.ReferenceLocation != null &&
                        dssExportHistory.Location.Trim().ToUpper() == dssExportHistory.ReferenceLocation.Trim().ToUpper())
                    {
                        continue;
                    }
                    result.Add(dssExportHistory);
                }
            }

            return(result);
        }
        public IList<DssExportHistory> ConvertList(IList list, DssOutboundControl dssOutboundControl)
        {
            IList<DssExportHistory> result = new List<DssExportHistory>();
            if (list != null && list.Count > 0)
            {
                foreach (object obj in list)
                {
                    DssExportHistory dssExportHistory = commonOutboundMgrE.ConvertLocationTransactionToDssExportHistory(obj, dssOutboundControl);

                    dssExportHistory.KeyCode = dssExportHistory.OrderNo;//订单号

                    #region 账户、分账户、成本中心、项目
                    dssExportHistory.DefinedString1 = null;//账户
                    dssExportHistory.DefinedString2 = null;//分账户
                    dssExportHistory.DefinedString3 = null;//成本中心
                    dssExportHistory.DefinedString4 = null;//项目
                    this.GetAccount(dssExportHistory);
                    #endregion

                    result.Add(dssExportHistory);
                }
            }

            return result;
        }
Beispiel #9
0
        protected override IList <DssExportHistory> ExtractOutboundData(DssOutboundControl dssOutboundControl)
        {
            IList result = commonOutboundMgr.ExtractOutboundDataFromLocationTransaction(dssOutboundControl,
                                                                                        BusinessConstants.CODE_MASTER_LOCATION_TRANSACTION_TYPE_VALUE_ISS_SO, MatchMode.Start);

            return(this.ConvertList(result, dssOutboundControl));
        }
        //获取issunp djin
        private IList <DssExportHistory> GetIssUnpLocationTransaction(int mark, DssOutboundControl outCon)
        {
            DssOutboundControl       dc     = dssOutboundControlMgr.LoadDssOutboundControl(9);
            IList <DssExportHistory> result = GetRctTrLocationTransaction(dc.Mark, "ISS-UNP");

            string[]         delCCode    = { "0000" };
            DetachedCriteria subjectList = DetachedCriteria.For(typeof(SubjectList));

            subjectList.Add(Expression.In("CostCenterCode", delCCode));
            subjectList.Add(Expression.Eq("SubjectCode", "11111111"));
            IList            subjectListCode  = criteriaMgr.FindAll(subjectList);
            var              miscoOrder       = (from l in result select l.OrderNo).Distinct().ToList();
            DetachedCriteria misOrderCriteria = DetachedCriteria.For(typeof(MiscOrder));//需要删除的miscorder

            misOrderCriteria.Add(Expression.In("OrderNo", miscoOrder));
            misOrderCriteria.Add(Expression.In("SubjectList", subjectListCode));
            IList <MiscOrder>        miscOrderList = criteriaMgr.FindAll <MiscOrder>(misOrderCriteria);
            IList <DssExportHistory> addList       = (from l in result join n in miscOrderList on l.OrderNo equals n.OrderNo select l).ToList();

            foreach (DssExportHistory dssExp in addList)
            {
                dssExp.Qty               = dssExp.Qty * -1;
                dssExp.Comments          = "ISS-UNP2RCT-TR";
                dssExp.ReferenceLocation = dssExp.Location;
                dssExp.Location          = "LXXS";
            }
            return(addList);
        }
        protected override IList<DssExportHistory> ExtractOutboundData(DssOutboundControl dssOutboundControl)
        {
            DetachedCriteria criteria = DetachedCriteria.For(typeof(BillDetail))
                .CreateAlias("Bill", "b")
                .Add(Expression.Gt("Id", dssOutboundControl.Mark))
                .Add(Expression.Eq("b.TransactionType", BusinessConstants.BILL_TRANS_TYPE_SO));
                //.Add(Expression.In("b.Status", new string[] { BusinessConstants.CODE_MASTER_STATUS_VALUE_CREATE, BusinessConstants.CODE_MASTER_STATUS_VALUE_SUBMIT }));

            IList<BillDetail> result = criteriaMgrE.FindAll<BillDetail>(criteria);
            return this.ConvertList(result, dssOutboundControl);
        }
        protected override IList <DssExportHistory> ExtractOutboundData(DssOutboundControl dssOutboundControl)
        {
            DetachedCriteria criteria = DetachedCriteria.For(typeof(BillDetail))
                                        .CreateAlias("Bill", "b")
                                        .Add(Expression.Gt("Id", dssOutboundControl.Mark))
                                        .Add(Expression.Eq("b.TransactionType", BusinessConstants.BILL_TRANS_TYPE_PO))
                                        .Add(Expression.In("b.Status", new string[] { BusinessConstants.CODE_MASTER_STATUS_VALUE_CREATE, BusinessConstants.CODE_MASTER_STATUS_VALUE_SUBMIT }));

            IList <BillDetail> result = criteriaMgr.FindAll <BillDetail>(criteria);

            return(this.ConvertList(result, dssOutboundControl));
        }
Beispiel #13
0
        private void button1_Click(object sender, EventArgs e)
        {
            IWindsorContainer container = new WindsorContainer(new XmlInterpreter(new ConfigResource("castle")));

            com.Sconit.Service.Dss.IOutboundMgr           dssOutboundJob        = container.Resolve <com.Sconit.Service.Dss.IOutboundMgr>("RctwoOutboundMgr.Service");
            com.Sconit.Service.Dss.IDssOutboundControlMgr dssOutboundControlMgr = container.Resolve <com.Sconit.Service.Dss.IDssOutboundControlMgr>("DssOutboundControlMgr.Service");
            DssOutboundControl dssOutboundControl = dssOutboundControlMgr.LoadDssOutboundControl(6);

            dssOutboundJob.ProcessOutbound(dssOutboundControl);
            //IJobRunMgr jobRunMgr = container.Resolve<IJobRunMgr>("JobRunMgr.service");
            //jobRunMgr.RunBatchJobs(container);
            container.Dispose();
        }
 protected override IList<DssExportHistory> ExtractOutboundData(DssOutboundControl dssOutboundControl)
 {
     IList<LocationTransaction> inpTr = this.GetInpLocationTransaction(dssOutboundControl.Mark);
     IList<DssExportHistory> trList = this.GetRctTrLocationTransaction(dssOutboundControl.Mark, "RCT-TR");
     this.ProcessRctTr(trList, dssOutboundControl);
     IList<DssExportHistory> inpList = this.ProcessRctInp(inpTr);
     IList<DssExportHistory> issunplist = GetIssUnpLocationTransaction(dssOutboundControl.Mark, dssOutboundControl);
     IList<DssExportHistory> result = trList.Concat(inpList).ToList();
     result = result.Concat(issunplist).ToList();
     log.Debug("Get records: RCT-TR:" + trList.Count + ",RCT-INP:" + inpList.Count + ",ISS-UNP:" + issunplist.Count + ",concat result:" + result.Count);
     result = this.GroupData(result, dssOutboundControl);
     log.Debug("Group data,now records: " + result.Count);
     return result;
 }
        protected override IList <DssExportHistory> ExtractOutboundData(DssOutboundControl dssOutboundControl)
        {
            IList <LocationTransaction> inpTr  = this.GetInpLocationTransaction(dssOutboundControl.Mark);
            IList <DssExportHistory>    trList = this.GetRctTrLocationTransaction(dssOutboundControl.Mark, "RCT-TR");

            this.ProcessRctTr(trList, dssOutboundControl);
            IList <DssExportHistory> inpList    = this.ProcessRctInp(inpTr);
            IList <DssExportHistory> issunplist = GetIssUnpLocationTransaction(dssOutboundControl.Mark, dssOutboundControl);
            IList <DssExportHistory> result     = trList.Concat(inpList).ToList();

            result = result.Concat(issunplist).ToList();
            log.Debug("Get records: RCT-TR:" + trList.Count + ",RCT-INP:" + inpList.Count + ",ISS-UNP:" + issunplist.Count + ",concat result:" + result.Count);
            result = this.GroupData(result, dssOutboundControl);
            log.Debug("Group data,now records: " + result.Count);
            return(result);
        }
        private void ProcessRctTr(IList <DssExportHistory> list, DssOutboundControl dssOutboundControl)
        {
            if (list != null && list.Count > 0)
            {
                List <int> orderDetIdList = list.Where(l => l.OrderDetailId > 0).Select(l => l.OrderDetailId).Distinct().ToList();

                //orderdet超过2千个会有问题,先临时拆分一下
                IList <LocationTransaction> issList = new List <LocationTransaction>();
                if (orderDetIdList.Count < 2000)
                {
                    issList = this.GetIssTr(orderDetIdList);
                }
                else
                {
                    log.Debug("total count: " + orderDetIdList.Count);
                    int count = orderDetIdList.Count / 2000;
                    for (int i = 0; i <= count; i++)
                    {
                        int interval = i * 2000;
                        int maxCount = i == count ? orderDetIdList.Count - interval : 2000;
                        log.Debug("begin index: " + interval);
                        log.Debug("record count: " + maxCount);
                        List <int> tempOrderDetIdList           = orderDetIdList.GetRange(interval, maxCount);
                        IList <LocationTransaction> tempIssList = this.GetIssTr(tempOrderDetIdList);
                        issList = issList.Concat(tempIssList).ToList();
                    }
                }
                if (issList != null && issList.Count > 0)
                {
                    foreach (var dssExportHistory in list)
                    {
                        var issTrans = issList.Where(i => i.OrderDetailId == dssExportHistory.OrderDetailId).SingleOrDefault();

                        if (issTrans != null)
                        {
                            dssExportHistory.ReferenceLocation = issTrans.Location;
                            //djin 20120903 mod
                            //orginal partyfrom=issTrans.PartyFrom
                            //if (issTrans.Location == "Reject")
                            //    dssExportHistory.PartyFrom = locationMgr.LoadLocation(issTrans.RefLocation).Region.Code;
                            //else
                            dssExportHistory.PartyFrom = issTrans.PartyFrom;
                        }
                    }
                }
            }
        }
        //protected override object Serialize(object obj)
        //{
        //    throw new NotImplementedException();
        //}

        #region Private Method
        private IList <DssExportHistory> ConvertList(IList <BillDetail> list, DssOutboundControl dssOutboundControl)
        {
            DetachedCriteria criteria = DetachedCriteria.For(typeof(DssObjectMapping))
                                        .Add(Expression.Eq("Entity", "BillTo")).Add(Expression.Eq("ExternalSystem", "QAD"))
                                        .Add(Expression.Eq("ExternalEntity", "ShipTo"));

            IList <DssObjectMapping> dom    = criteriaMgr.FindAll <DssObjectMapping>(criteria);
            IList <DssExportHistory> result = new List <DssExportHistory>();

            if (list != null && list.Count > 0)
            {
                foreach (BillDetail billDetail in list)
                {
                    DssExportHistory dssExportHistory = new DssExportHistory();

                    dssExportHistory.DssOutboundControl = dssOutboundControl;
                    dssExportHistory.EventCode          = BusinessConstants.DSS_EVENT_CODE_CREATE;
                    dssExportHistory.IsActive           = true;
                    dssExportHistory.CreateDate         = DateTime.Now;

                    dssExportHistory.OriginalId = billDetail.Id;
                    dssExportHistory.OrderNo    = billDetail.ActingBill.OrderNo;
                    dssExportHistory.ReceiptNo  = billDetail.ActingBill.ReceiptNo;
                    dssExportHistory.Item       = billDetail.ActingBill.Item.Code;
                    dssExportHistory.Location   = dssExportHistory.DssOutboundControl.UndefinedString1;//客户库位
                    dssExportHistory.Qty        = billDetail.BilledQty;
                    //dssExportHistory.EffectiveDate = billDetail.Bill.CreateDate.Date;
                    dssExportHistory.EffectiveDate = DateTime.Now;
                    dssExportHistory.PartyTo       = billDetail.Bill.BillAddress.Party.Code; //客户

                    dssExportHistory.DefinedString1 = billDetail.Bill.BillNo;                //开票通知单号
                    dssExportHistory.DefinedString2 = billDetail.Bill.BillAddress.Code;      //BillTo
                    if (dom != null && dom.Count > 0)
                    {
                        DssObjectMapping sd = dom.Where(d => d.Code == billDetail.Bill.BillAddress.Code).FirstOrDefault();
                        dssExportHistory.DefinedString3 = sd.ExternalCode;  //Map到shipto
                    }

                    dssExportHistory.KeyCode = DssHelper.GetBillKeyCode(dssExportHistory, billDetail.Bill.BillNo);

                    this.GetLoctransInfo(dssExportHistory);
                    result.Add(dssExportHistory);
                }
            }

            return(result);
        }
        private IList <DssExportHistory> ConvertList(IList list, DssOutboundControl dssOutboundControl)
        {
            IList <DssExportHistory> result = new List <DssExportHistory>();

            if (list != null && list.Count > 0)
            {
                foreach (object obj in list)
                {
                    DssExportHistory dssExportHistory = new DssExportHistory();

                    dssExportHistory.DssOutboundControl = dssOutboundControl;
                    dssExportHistory.EventCode          = BusinessConstants.DSS_EVENT_CODE_CREATE;
                    dssExportHistory.IsActive           = true;
                    dssExportHistory.CreateDate         = DateTime.Now;

                    dssExportHistory.OriginalId    = (int)((object[])obj)[0];
                    dssExportHistory.OrderNo       = (string)((object[])obj)[1];
                    dssExportHistory.ReceiptNo     = (string)((object[])obj)[2];
                    dssExportHistory.Item          = (string)((object[])obj)[3];
                    dssExportHistory.Qty           = (decimal)((object[])obj)[4];
                    dssExportHistory.EffectiveDate = (DateTime)((object[])obj)[5];
                    dssExportHistory.PartyFrom     = (string)((object[])obj)[6];

                    if ((string)((object[])obj)[8] == BusinessConstants.SYSTEM_LOCATION_REJECT)
                    {
                        dssExportHistory.PartyTo = (string)((object[])obj)[7];
                        // this.GetLoctransInfo(dssExportHistory);
                        this.GetLoctransInfo(dssExportHistory, true);//10-15上线

                        dssExportHistory.KeyCode = orderHeadMgr.LoadOrderHead(dssExportHistory.OrderNo).ExternalOrderNo;
                    }
                    else
                    {
                        dssExportHistory.PartyTo = (string)((object[])obj)[6];
                        this.GetLoctransInfo(dssExportHistory);

                        dssExportHistory.KeyCode = this.GetKeyCode(dssExportHistory, dssExportHistory.ReceiptNo);
                    }


                    result.Add(dssExportHistory);
                }
            }

            return(result);
        }
        private string GetTransNumber(DssOutboundControl dssOutboundControl, string filePrefix, DateTime effDate)
        {
            string codePrefix = filePrefix + effDate.ToString("yyyyMMdd");

            if (dssOutboundControl.ExternalSystem.Flag != null && dssOutboundControl.ExternalSystem.Flag.Trim() != string.Empty)
            {
                codePrefix += dssOutboundControl.ExternalSystem.Flag.Substring(0, 1);
            }
            else
            {
                codePrefix += "0";
            }

            string transNo = this.numberControlMgr.GenerateNumber(codePrefix, 8);

            return(transNo.Substring(transNo.Length - 17, 17));
        }
        protected override IList<DssExportHistory> ExtractOutboundData(DssOutboundControl dssOutboundControl)
        {
            DetachedCriteria criteria = DetachedCriteria.For(typeof(BillTransaction))
                .Add(Expression.Gt("Id", dssOutboundControl.Mark))
                .Add(Expression.Eq("TransactionType", BusinessConstants.BILL_TRANS_TYPE_PO));

            criteria.SetProjection(Projections.ProjectionList()
                .Add(Projections.Max("Id"))
                .Add(Projections.GroupProperty("OrderNo"))
                .Add(Projections.GroupProperty("ReceiptNo"))
                .Add(Projections.GroupProperty("Item"))
                .Add(Projections.Sum("Qty"))
                .Add(Projections.GroupProperty("EffectiveDate"))
                .Add(Projections.GroupProperty("Party")));

            IList result = criteriaMgrE.FindAll(criteria);
            return this.ConvertList(result, dssOutboundControl);
        }
Beispiel #21
0
        protected override IList <DssExportHistory> ExtractOutboundData(DssOutboundControl dssOutboundControl)
        {
            IList <LocationTransaction> locTrans = this.GetLocationTransaction(dssOutboundControl.Mark);

            log.Debug("Get records: LocTrans:" + locTrans.Count);

            locTrans = locTrans.Where(l => l.OrderDetailId > 0).ToList();//保险代码

            #region 投料事务修正
            if (locTrans != null && locTrans.Count > 0)
            {
                foreach (var locTran in locTrans)
                {
                    if (StringHelper.Eq(locTran.TransactionType, BusinessConstants.CODE_MASTER_LOCATION_TRANSACTION_TYPE_VALUE_ISS_WO_BF))
                    {
                        locTran.TransactionType = BusinessConstants.CODE_MASTER_LOCATION_TRANSACTION_TYPE_VALUE_ISS_WO;
                        locTran.Location        = locTran.RefLocation;
                    }
                }
            }
            #endregion

            //按生效日期分类汇总
            var query = from l in locTrans
                        orderby l.EffectiveDate
                        group l by l.EffectiveDate into g
                        select new
            {
                EffectiveDate = g.Key,
                list          = g.ToList()
            };

            IList <DssExportHistory> result = new List <DssExportHistory>();
            foreach (var q in query)
            {
                log.Debug("Now processing EffectiveDate:" + q.EffectiveDate.ToString("yyyy-MM-dd"));
                IList <DssExportHistory> group = this.GroupData(q.list, dssOutboundControl, q.EffectiveDate);

                result = result.Concat(group).ToList();
            }
            log.Debug("Result count after processing:" + result.Count);

            return(result);
        }
        protected override IList<DssExportHistory> ExtractOutboundData(DssOutboundControl dssOutboundControl)
        {
            IList<LocationTransaction> locTrans = this.GetLocationTransaction(dssOutboundControl.Mark);
            log.Debug("Get records: LocTrans:" + locTrans.Count);

            locTrans = locTrans.Where(l => l.OrderDetailId > 0).ToList();//保险代码

            #region 投料事务修正
            if (locTrans != null && locTrans.Count > 0)
            {
                foreach (var locTran in locTrans)
                {
                    if (StringHelper.Eq(locTran.TransactionType, BusinessConstants.CODE_MASTER_LOCATION_TRANSACTION_TYPE_VALUE_ISS_WO_BF))
                    {
                        locTran.TransactionType = BusinessConstants.CODE_MASTER_LOCATION_TRANSACTION_TYPE_VALUE_ISS_WO;
                        locTran.Location = locTran.RefLocation;
                    }
                }
            }
            #endregion

            //按生效日期分类汇总
            var query = from l in locTrans
                        orderby l.EffectiveDate
                        group l by l.EffectiveDate into g
                        select new
                        {
                            EffectiveDate = g.Key,
                            list = g.ToList()
                        };

            IList<DssExportHistory> result = new List<DssExportHistory>();
            foreach (var q in query)
            {
                log.Debug("Now processing EffectiveDate:" + q.EffectiveDate.ToString("yyyy-MM-dd"));
                IList<DssExportHistory> group = this.GroupData(q.list, dssOutboundControl, q.EffectiveDate);

                result = result.Concat(group).ToList();
            }
            log.Debug("Result count after processing:" + result.Count);

            return result;
        }
        protected override IList <DssExportHistory> ExtractOutboundData(DssOutboundControl dssOutboundControl)
        {
            IList result = commonOutboundMgr.ExtractOutboundDataFromLocationTransaction(dssOutboundControl,
                                                                                        BusinessConstants.CODE_MASTER_LOCATION_TRANSACTION_TYPE_VALUE_ISS_UNP, MatchMode.Exact, true);

            //mod by djin 2012-09-15
            // IList<DssExportHistory> list = this.ConvertList(result, dssOutboundControl);
            IList <DssExportHistory> list = this.ConvertList(result, dssOutboundControl, true);//10-15

            //去除固定科目的Iss-unp
            string[]         delCCode    = { "0000" };
            DetachedCriteria subjectList = DetachedCriteria.For(typeof(SubjectList));

            subjectList.Add(Expression.In("CostCenterCode", delCCode));
            subjectList.Add(Expression.Eq("SubjectCode", "11111111"));
            IList            subjectListCode  = criteriaMgr.FindAll(subjectList);
            var              miscoOrder       = (from l in list select l.KeyCode).Distinct().ToList();
            DetachedCriteria misOrderCriteria = DetachedCriteria.For(typeof(MiscOrder));//需要删除的miscorder

            misOrderCriteria.Add(Expression.In("OrderNo", miscoOrder));
            misOrderCriteria.Add(Expression.In("SubjectList", subjectListCode));
            IList <MiscOrder>        miscOrderList = criteriaMgr.FindAll <MiscOrder>(misOrderCriteria);
            IList <DssExportHistory> delList       = (from l in list join n in miscOrderList on l.KeyCode equals n.OrderNo select l).ToList();

            foreach (DssExportHistory dss in list)
            {
                if (delList.Contains(dss))
                {
                    dss.Comments = "DEL";
                }
            }
            //mod end
            if (list != null && list.Count > 0)
            {
                foreach (var item in list)
                {
                    item.Qty = -item.Qty;//修正数量
                }
            }

            return(list);
        }
        //modified by [email protected]
        //2012/5
        //Filename default: Region + FilePrefix + TransNo + FileSuffix .REQ
        private string GetFileName(DssOutboundControl dssOutboundControl, string filePrefix, string transNo, string region)
        {
            string fileSuffix = string.Empty;

            if (dssOutboundControl.FileSuffix != null && dssOutboundControl.FileSuffix.Trim() != string.Empty)
            {
                fileSuffix = dssOutboundControl.FileSuffix;
            }
            else
            {
                fileSuffix = dssOutboundControl.ExternalObjectCode + ".REQ";
            }
            string fileName = filePrefix + "_" + transNo + "_" + fileSuffix;

            if (region != "")
            {
                fileName = region + filePrefix + "_" + transNo + "_" + fileSuffix;
            }
            return(fileName);
        }
        private IList <DssExportHistory> ConvertList(IList <BillDetail> list, DssOutboundControl dssOutboundControl)
        {
            IList <DssExportHistory> result = new List <DssExportHistory>();

            if (list != null && list.Count > 0)
            {
                foreach (BillDetail billDetail in list)
                {
                    DssExportHistory dssExportHistory = new DssExportHistory();

                    dssExportHistory.DssOutboundControl = dssOutboundControl;
                    dssExportHistory.EventCode          = BusinessConstants.DSS_EVENT_CODE_CREATE;
                    dssExportHistory.IsActive           = true;
                    dssExportHistory.CreateDate         = DateTime.Now;

                    dssExportHistory.OriginalId    = billDetail.Id;
                    dssExportHistory.OrderNo       = billDetail.ActingBill.OrderNo;
                    dssExportHistory.ReceiptNo     = billDetail.ActingBill.ReceiptNo;
                    dssExportHistory.Item          = billDetail.ActingBill.Item.Code;
                    dssExportHistory.Uom           = billDetail.ActingBill.Uom.Code;
                    dssExportHistory.Qty           = billDetail.BilledQty;
                    dssExportHistory.EffectiveDate = billDetail.ActingBill.EffectiveDate;
                    dssExportHistory.PartyFrom     = billDetail.Bill.BillAddress.Party.Code;         //供应商

                    dssExportHistory.DefinedString1 = billDetail.Bill.BillNo;                        //开票通知单号
                    dssExportHistory.DefinedString2 = billDetail.Currency.Code;                      //币种
                    dssExportHistory.DefinedString3 = billDetail.UnitPrice.ToString("0.########");   //发票单价
                    dssExportHistory.DefinedString4 = billDetail.UnitPrice.ToString("0.########");   //采购单价
                    dssExportHistory.DefinedString5 = billDetail.OrderAmount.ToString("0.########"); //金额

                    dssExportHistory.KeyCode = DssHelper.GetBillKeyCode(dssExportHistory, billDetail.Bill.BillNo);

                    this.GetLoctransInfo(dssExportHistory);
                    result.Add(dssExportHistory);
                }
            }

            return(result);
        }
        protected override IList <DssExportHistory> ExtractOutboundData(DssOutboundControl dssOutboundControl)
        {
            DetachedCriteria criteria = DetachedCriteria.For(typeof(BillTransaction))
                                        .Add(Expression.Gt("Id", dssOutboundControl.Mark))
                                        .Add(Expression.Eq("TransactionType", BusinessConstants.BILL_TRANS_TYPE_PO));

            criteria.SetProjection(Projections.ProjectionList()
                                   .Add(Projections.Max("Id"))
                                   .Add(Projections.GroupProperty("OrderNo"))
                                   .Add(Projections.GroupProperty("ReceiptNo"))
                                   .Add(Projections.GroupProperty("Item"))
                                   .Add(Projections.Sum("Qty"))
                                   .Add(Projections.GroupProperty("EffectiveDate"))
                                   .Add(Projections.GroupProperty("Party"))
                                   .Add(Projections.GroupProperty("PartyFrom"))
                                   .Add(Projections.GroupProperty("LocationFrom")))
            ;

            IList result = criteriaMgr.FindAll(criteria);

            return(this.ConvertList(result, dssOutboundControl));
        }
        protected override IList<DssExportHistory> ExtractOutboundData(DssOutboundControl dssOutboundControl)
        {
            IList result = commonOutboundMgr.ExtractOutboundDataFromLocationTransaction(dssOutboundControl,
                BusinessConstants.CODE_MASTER_LOCATION_TRANSACTION_TYPE_VALUE_ISS_UNP, MatchMode.Exact, true);

            //mod by djin 2012-09-15
            // IList<DssExportHistory> list = this.ConvertList(result, dssOutboundControl);
            IList<DssExportHistory> list = this.ConvertList(result, dssOutboundControl, true);//10-15

            //去除固定科目的Iss-unp
            string[] delCCode = { "0000" };
            DetachedCriteria subjectList = DetachedCriteria.For(typeof(SubjectList));
            subjectList.Add(Expression.In("CostCenterCode", delCCode));
            subjectList.Add(Expression.Eq("SubjectCode", "11111111"));
            IList subjectListCode = criteriaMgr.FindAll(subjectList);
            var miscoOrder = (from l in list select l.KeyCode).Distinct().ToList();
            DetachedCriteria misOrderCriteria = DetachedCriteria.For(typeof(MiscOrder));//需要删除的miscorder
            misOrderCriteria.Add(Expression.In("OrderNo", miscoOrder));
            misOrderCriteria.Add(Expression.In("SubjectList", subjectListCode));
            IList<MiscOrder> miscOrderList = criteriaMgr.FindAll<MiscOrder>(misOrderCriteria);
            IList<DssExportHistory> delList = (from l in list join n in miscOrderList on l.KeyCode equals n.OrderNo select l).ToList();
            foreach (DssExportHistory dss in list)
            {
                if (delList.Contains(dss))
                    dss.Comments = "DEL";
            }
            //mod end
            if (list != null && list.Count > 0)
            {
                foreach (var item in list)
                {
                    item.Qty = -item.Qty;//修正数量

                }
            }

            return list;
        }
        protected override IList<DssExportHistory> ExtractOutboundData(DssOutboundControl dssOutboundControl)
        {
            DetachedCriteria criteria = DetachedCriteria.For(typeof(BillDetail))
                .CreateAlias("Bill", "b")
                //  .Add(Expression.Gt("Id", dssOutboundControl.Mark))  不根据id了,根据是否导出,是否暂估和状态非创建
                .Add(Expression.Eq("b.HasProvEst", false))
                .Add(Expression.Eq("b.IsExport", false))
              //  .Add(Expression.Not(Expression.Eq("b.Status", BusinessConstants.CODE_MASTER_STATUS_VALUE_CREATE)))
                .Add(Expression.Eq("b.TransactionType", BusinessConstants.BILL_TRANS_TYPE_SO))
                .Add(Expression.In("b.Status", new string[] { BusinessConstants.CODE_MASTER_STATUS_VALUE_SUBMIT ,BusinessConstants.CODE_MASTER_STATUS_VALUE_CLOSE ,BusinessConstants.CODE_MASTER_STATUS_VALUE_VOID}));

            IList<BillDetail> result = criteriaMgr.FindAll<BillDetail>(criteria);
            IList<DssExportHistory> resultList = this.ConvertList(result, dssOutboundControl);

            IList<Bill> billList = result.Select(r => r.Bill).Distinct().ToList();
            foreach (Bill bill in billList)
            {
                bill.IsExport = true;
                this.billMgr.UpdateBill(bill);
            }

            return resultList;
        }
        private string GetFilePrefix(DssOutboundControl dssOutboundControl)
        {
            if (dssOutboundControl.FilePrefix != null && dssOutboundControl.FilePrefix.Trim() != string.Empty)
            {
                return(dssOutboundControl.FilePrefix);
            }

            string sysCode    = BusinessConstants.DSS_SYSTEM_CODE_SCONIT;
            string extSysCode = dssOutboundControl.ExternalSystem.Code;

            if (dssOutboundControl.SysAlias != null && dssOutboundControl.SysAlias.Trim() != string.Empty)
            {
                sysCode = dssOutboundControl.SysAlias;
            }
            if (dssOutboundControl.ExternalSystem.SysAlias != null && dssOutboundControl.ExternalSystem.SysAlias.Trim() != string.Empty)
            {
                extSysCode = dssOutboundControl.ExternalSystem.SysAlias;
            }

            string filePrefix = sysCode + "_" + extSysCode;

            return(filePrefix);
        }
        public IList ExtractOutboundDataFromLocationTransaction(DssOutboundControl dssOutboundControl, string transType, MatchMode matchMode, bool includeRefLoc)
        {
            DetachedCriteria criteria = DetachedCriteria.For(typeof(LocationTransaction));

            criteria.Add(Expression.Gt("Id", dssOutboundControl.Mark));
            criteria.Add(Expression.Like("TransactionType", transType, matchMode));
            if (includeRefLoc)
            {
                criteria.SetProjection(Projections.ProjectionList()
                                       .Add(Projections.Max("Id"))
                                       .Add(Projections.GroupProperty("OrderNo"))
                                       .Add(Projections.GroupProperty("ReceiptNo"))
                                       .Add(Projections.GroupProperty("Item"))
                                       .Add(Projections.GroupProperty("Location"))
                                       .Add(Projections.Sum("Qty"))
                                       .Add(Projections.GroupProperty("EffectiveDate"))
                                       .Add(Projections.GroupProperty("PartyFrom"))
                                       .Add(Projections.GroupProperty("PartyTo"))
                                       .Add(Projections.GroupProperty("RefLocation")));
            }
            else
            {
                criteria.SetProjection(Projections.ProjectionList()
                                       .Add(Projections.Max("Id"))
                                       .Add(Projections.GroupProperty("OrderNo"))
                                       .Add(Projections.GroupProperty("ReceiptNo"))
                                       .Add(Projections.GroupProperty("Item"))
                                       .Add(Projections.GroupProperty("Location"))
                                       .Add(Projections.Sum("Qty"))
                                       .Add(Projections.GroupProperty("EffectiveDate"))
                                       .Add(Projections.GroupProperty("PartyFrom"))
                                       .Add(Projections.GroupProperty("PartyTo")));
            }

            return(criteriaMgr.FindAll(criteria));
        }
        private IList <DssExportHistory> GroupData(IList <DssExportHistory> list, DssOutboundControl dssOutboundControl)
        {
            var query = from l in list
                        group l by new { l.Item, l.PartyFrom, l.ReferenceLocation, l.PartyTo, l.Location, l.EffectiveDate, l.Comments } into g
                select new DssExportHistory
            {
                Item              = g.Key.Item,
                PartyFrom         = g.Key.PartyFrom,
                ReferenceLocation = g.Key.ReferenceLocation,
                PartyTo           = g.Key.PartyTo,
                Location          = g.Key.Location,
                Qty                = g.Sum(d => d.Qty),
                EffectiveDate      = g.Key.EffectiveDate,
                OriginalId         = g.Max(d => d.OriginalId),
                KeyCode            = g.Max(d => d.OriginalId).ToString(),
                DssOutboundControl = dssOutboundControl,
                EventCode          = BusinessConstants.DSS_EVENT_CODE_CREATE,
                IsActive           = true,
                CreateDate         = DateTime.Now,
                Comments           = g.Key.Comments
            };

            return(query.Where(q => q.Qty != 0).ToList());
        }
        protected override IList <DssExportHistory> ExtractOutboundData(DssOutboundControl dssOutboundControl)
        {
            DetachedCriteria criteria = DetachedCriteria.For(typeof(BillDetail))
                                        .CreateAlias("Bill", "b")
                                        //  .Add(Expression.Gt("Id", dssOutboundControl.Mark))  不根据id了,根据是否导出,是否暂估和状态非创建
                                        .Add(Expression.Eq("b.HasProvEst", false))
                                        .Add(Expression.Eq("b.IsExport", false))
                                        //  .Add(Expression.Not(Expression.Eq("b.Status", BusinessConstants.CODE_MASTER_STATUS_VALUE_CREATE)))
                                        .Add(Expression.Eq("b.TransactionType", BusinessConstants.BILL_TRANS_TYPE_SO))
                                        .Add(Expression.In("b.Status", new string[] { BusinessConstants.CODE_MASTER_STATUS_VALUE_SUBMIT, BusinessConstants.CODE_MASTER_STATUS_VALUE_CLOSE, BusinessConstants.CODE_MASTER_STATUS_VALUE_VOID }));

            IList <BillDetail>       result     = criteriaMgr.FindAll <BillDetail>(criteria);
            IList <DssExportHistory> resultList = this.ConvertList(result, dssOutboundControl);

            IList <Bill> billList = result.Select(r => r.Bill).Distinct().ToList();

            foreach (Bill bill in billList)
            {
                bill.IsExport = true;
                this.billMgr.UpdateBill(bill);
            }

            return(resultList);
        }
 protected abstract IList <DssExportHistory> ExtractOutboundData(DssOutboundControl dssOutboundControl);
        public void CreateDssExportHistory(IList <DssExportHistory> dssExportHistoryList, DssOutboundControl dssOutboundControl)
        {
            if (dssExportHistoryList != null && dssExportHistoryList.Count > 0)
            {
                int newMark1 = 0;
                if (dssOutboundControl.Id != 3)
                {
                    newMark1 = dssExportHistoryList.Max(d => d.OriginalId);
                }
                else if (dssOutboundControl.Id == 3)//RCT-TR中取费零星销售的最大ID
                {
                    var dssList = (from dss in dssExportHistoryList where dss.Comments != "ISS-UNP2RCT-TR" select dss).ToList();
                    if (dssList != null && dssList.Count > 0)
                    {
                        newMark1 = dssList.Max(d => d.OriginalId);
                    }
                }
                int newMark2 = 0;
                // bool errFlag = false;
                //  int markID = 0;
                if (dssOutboundControl.Id == 9)
                {
                    Fileter(dssExportHistoryList);                            //ISS-UNP中删除零星销售
                }
                if (dssExportHistoryList != null && dssExportHistoryList.Count > 0)
                {
                    dssExportHistoryMgr.CreateDssExportHistory(dssExportHistoryList);
                    #region
                    //dssExportHistoryList = (from l in dssExportHistoryList orderby l.OriginalId select l).ToList();
                    //try
                    //{
                    //    foreach (DssExportHistory dss in dssExportHistoryList)
                    //    {

                    //        dssExportHistoryMgr.CreateDssExportHistory(dss);
                    //        if (dss.DssExportHistoryDetails != null && dss.DssExportHistoryDetails.Count > 0)
                    //        {
                    //            markID = dss.DssExportHistoryDetails.Max(d => d.OriginalId);
                    //        }
                    //        markID = Math.Max(markID, dss.OriginalId);
                    //    }
                    //}
                    //catch (Exception ex)
                    //{
                    //    errFlag = true;
                    //}
                    #endregion

                    #region New Mark
                    var query = from d in dssExportHistoryList
                                where d.DssExportHistoryDetails != null && d.DssExportHistoryDetails.Count > 0
                                from dd in d.DssExportHistoryDetails
                                select dd;
                    if (query != null && query.Count() > 0)
                    {
                        newMark2 = query.Max(d => d.OriginalId);
                    }
                }
                DssOutboundControl newDssOutboundControl = this.dssOutboundControlMgr.LoadDssOutboundControl(dssOutboundControl.Id);
                newMark1 = Math.Max(newMark1, newDssOutboundControl.Mark);
                //if (!errFlag)
                newDssOutboundControl.Mark = Math.Max(newMark1, newMark2);
                dssOutboundControl.Mark    = newDssOutboundControl.Mark;//修正logBug
                // else
                // newDssOutboundControl.Mark = markID;
                #endregion
                try
                {
                    dssOutboundControlMgr.UpdateDssOutboundControl(newDssOutboundControl);
                }
                catch (Exception ex)
                {
                    log.Error(ex.Message + " Markid" + newDssOutboundControl.Mark);
                    bool isupd = false;
                    int  i     = 0;
                    while (!isupd && i < 100)
                    {
                        dssOutboundControlMgr.UpdateDssOutboundControl(newDssOutboundControl);
                        DssOutboundControl errDSC = this.dssOutboundControlMgr.LoadDssOutboundControl(newDssOutboundControl.Id);
                        i++;
                        if (errDSC.Mark == newDssOutboundControl.Mark)
                        {
                            isupd = true;
                        }
                    }
                }
            }
        }
        public IList<DssExportHistory> GroupData(IList<DssExportHistory> list, DssOutboundControl dssOutboundControl)
        {
            var query = from l in list
                        group l by new { l.Item, l.PartyFrom, l.ReferenceLocation, l.PartyTo, l.Location, l.EffectiveDate } into g
                        select new DssExportHistory
                        {
                            Item = g.Key.Item,
                            PartyFrom = g.Key.PartyFrom,
                            ReferenceLocation = g.Key.ReferenceLocation,
                            PartyTo = g.Key.PartyTo,
                            Location = g.Key.Location,
                            Qty = g.Sum(d => d.Qty),
                            EffectiveDate = g.Key.EffectiveDate,
                            OriginalId = g.Max(d => d.OriginalId),
                            KeyCode = g.Max(d => d.OriginalId).ToString(),
                            DssOutboundControl = dssOutboundControl,
                            EventCode = BusinessConstants.DSS_EVENT_CODE_CREATE,
                            IsActive = true,
                            CreateDate = DateTime.Now
                        };

            return query.Where(q => q.Qty != 0).ToList();
        }
        public void CreateDssExportHistory(IList<DssExportHistory> dssExportHistoryList, DssOutboundControl dssOutboundControl)
        {
            if (dssExportHistoryList != null && dssExportHistoryList.Count > 0)
            {
                int newMark1 = 0;
                if (dssOutboundControl.Id != 3)
                    newMark1 = dssExportHistoryList.Max(d => d.OriginalId);
                else if (dssOutboundControl.Id == 3)//RCT-TR中取费零星销售的最大ID
                {
                    var dssList = (from dss in dssExportHistoryList where dss.Comments != "ISS-UNP2RCT-TR" select dss).ToList();
                    if (dssList != null && dssList.Count > 0)
                        newMark1 = dssList.Max(d => d.OriginalId);
                }
                int newMark2 = 0;
                // bool errFlag = false;
                //  int markID = 0;
                if (dssOutboundControl.Id == 9) Fileter(dssExportHistoryList);//ISS-UNP中删除零星销售
                if (dssExportHistoryList != null && dssExportHistoryList.Count > 0)
                {
                    dssExportHistoryMgr.CreateDssExportHistory(dssExportHistoryList);
                    #region
                    //dssExportHistoryList = (from l in dssExportHistoryList orderby l.OriginalId select l).ToList();
                    //try
                    //{
                    //    foreach (DssExportHistory dss in dssExportHistoryList)
                    //    {

                    //        dssExportHistoryMgr.CreateDssExportHistory(dss);
                    //        if (dss.DssExportHistoryDetails != null && dss.DssExportHistoryDetails.Count > 0)
                    //        {
                    //            markID = dss.DssExportHistoryDetails.Max(d => d.OriginalId);
                    //        }
                    //        markID = Math.Max(markID, dss.OriginalId);
                    //    }
                    //}
                    //catch (Exception ex)
                    //{
                    //    errFlag = true;
                    //}
                    #endregion

                    #region New Mark
                    var query = from d in dssExportHistoryList
                                where d.DssExportHistoryDetails != null && d.DssExportHistoryDetails.Count > 0
                                from dd in d.DssExportHistoryDetails
                                select dd;
                    if (query != null && query.Count() > 0)
                    {
                        newMark2 = query.Max(d => d.OriginalId);
                    }
                }
                DssOutboundControl newDssOutboundControl = this.dssOutboundControlMgr.LoadDssOutboundControl(dssOutboundControl.Id);
                newMark1 = Math.Max(newMark1, newDssOutboundControl.Mark);
                //if (!errFlag)
                newDssOutboundControl.Mark = Math.Max(newMark1, newMark2);
                dssOutboundControl.Mark = newDssOutboundControl.Mark;//修正logBug
                // else
                // newDssOutboundControl.Mark = markID;
                    #endregion
                try
                {
                    dssOutboundControlMgr.UpdateDssOutboundControl(newDssOutboundControl);
                }
                catch (Exception ex)
                {
                    log.Error(ex.Message + " Markid" + newDssOutboundControl.Mark);
                    bool isupd = false;
                    int i = 0;
                    while (!isupd && i < 100)
                    {
                        dssOutboundControlMgr.UpdateDssOutboundControl(newDssOutboundControl);
                        DssOutboundControl errDSC = this.dssOutboundControlMgr.LoadDssOutboundControl(newDssOutboundControl.Id);
                        i++;
                        if (errDSC.Mark == newDssOutboundControl.Mark)
                            isupd = true;
                    }
                }
            }
        }
        private IList<DssExportHistory> ConvertList(IList list, DssOutboundControl dssOutboundControl)
        {
            IList<DssExportHistory> result = new List<DssExportHistory>();
            if (list != null && list.Count > 0)
            {
                foreach (object obj in list)
                {
                    DssExportHistory dssExportHistory = new DssExportHistory();

                    dssExportHistory.DssOutboundControl = dssOutboundControl;
                    dssExportHistory.EventCode = BusinessConstants.DSS_EVENT_CODE_CREATE;
                    dssExportHistory.IsActive = true;
                    dssExportHistory.CreateDate = DateTime.Now;

                    dssExportHistory.OriginalId = (int)((object[])obj)[0];
                    dssExportHistory.OrderNo = (string)((object[])obj)[1];
                    dssExportHistory.ReceiptNo = (string)((object[])obj)[2];
                    dssExportHistory.Item = (string)((object[])obj)[3];
                    dssExportHistory.Qty = (decimal)((object[])obj)[4];
                    dssExportHistory.EffectiveDate = (DateTime)((object[])obj)[5];
                    dssExportHistory.PartyFrom = (string)((object[])obj)[6];

                    if ((string)((object[])obj)[8] == BusinessConstants.SYSTEM_LOCATION_REJECT)
                    {
                        dssExportHistory.PartyTo = (string)((object[])obj)[7];
                       // this.GetLoctransInfo(dssExportHistory);
                        this.GetLoctransInfo(dssExportHistory,true);//10-15上线

                        dssExportHistory.KeyCode = orderHeadMgr.LoadOrderHead(dssExportHistory.OrderNo).ExternalOrderNo;
                    }
                    else
                    {
                        dssExportHistory.PartyTo = (string)((object[])obj)[6];
                        this.GetLoctransInfo(dssExportHistory);

                        dssExportHistory.KeyCode = this.GetKeyCode(dssExportHistory, dssExportHistory.ReceiptNo);
                    }

                    result.Add(dssExportHistory);
                }
            }

            return result;
        }
        private void ProcessRctTr(IList<DssExportHistory> list, DssOutboundControl dssOutboundControl)
        {
            if (list != null && list.Count > 0)
            {
                List<int> orderDetIdList = list.Where(l => l.OrderDetailId > 0).Select(l => l.OrderDetailId).Distinct().ToList();
                IList<LocationTransaction> issList = this.GetIssTr(orderDetIdList);

                if (issList != null && issList.Count > 0)
                {
                    foreach (var dssExportHistory in list)
                    {
                        var issTrans = issList.Where(i => i.OrderDetailId == dssExportHistory.OrderDetailId).SingleOrDefault();

                        if (issTrans != null)
                        {
                            dssExportHistory.ReferenceLocation = issTrans.Location;
                            dssExportHistory.PartyFrom = issTrans.PartyFrom;
                        }
                    }
                }
            }
        }
        private IList<DssExportHistoryDetail> GroupSingleDssExportHistoryDetail(List<int> orderDetIdList, IList<LocationTransaction> rmLocTrans, DssOutboundControl dssOutboundControl, DateTime effectiveDate, Dictionary<string, IList<int>> orderdet, string fcol)
        {
            if (orderdet.ContainsKey(fcol))//包含同类
            {
                IList<int> orderdetid = (IList<int>)orderdet[fcol];
                foreach (int i in orderdetid)
                {
                    if (orderDetIdList.Contains(i))
                        orderDetIdList.Remove(i);
                }
                if (orderDetIdList != null && orderDetIdList.Count > 0)
                {
                    foreach (int i in orderDetIdList)
                    {
                        orderdetid.Add(i);
                    }
                    orderdet[fcol] = orderdetid;
                }
            }
            else
            {
                orderdet.Add(fcol, orderDetIdList);
            }

            var details = rmLocTrans.Where(r => orderDetIdList.Contains(r.OrderDetailId)).ToList();

            var query = from d in details
                        group d by new { d.PartyFrom, d.PartyTo, d.Location, d.Item  } into g
                        select new DssExportHistoryDetail
                        {
                            PartyFrom = g.Key.PartyFrom,
                            PartyTo = g.Key.PartyTo,
                            Location = this.GetMappingExternalCode(BusinessConstants.DSS_ENTITY_LOCATION, dssOutboundControl.ExternalSystem.Code, g.Key.Location, g.Key.Location),
                            Item = g.Key.Item,
                            Qty = -g.Sum(d => d.Qty),//生产消耗事务数为负   需要修改
                            EffDate = effectiveDate,
                            OriginalId = g.Max(d => d.Id),
                            KeyCode = g.Max(d => d.Id).ToString()

                        };

            return query.ToList();
        }
 public virtual void UpdateDssOutboundControl(DssOutboundControl entity)
 {
     entityDao.UpdateDssOutboundControl(entity);
 }
 //获取issunp djin
 private IList<DssExportHistory> GetIssUnpLocationTransaction(int mark, DssOutboundControl outCon)
 {
     DssOutboundControl dc = dssOutboundControlMgr.LoadDssOutboundControl(9);
     IList<DssExportHistory> result = GetRctTrLocationTransaction(dc.Mark, "ISS-UNP");
     string[] delCCode = { "0000" };
     DetachedCriteria subjectList = DetachedCriteria.For(typeof(SubjectList));
     subjectList.Add(Expression.In("CostCenterCode", delCCode));
     subjectList.Add(Expression.Eq("SubjectCode", "11111111"));
     IList subjectListCode = criteriaMgr.FindAll(subjectList);
     var miscoOrder = (from l in result select l.OrderNo).Distinct().ToList();
     DetachedCriteria misOrderCriteria = DetachedCriteria.For(typeof(MiscOrder));//需要删除的miscorder
     misOrderCriteria.Add(Expression.In("OrderNo", miscoOrder));
     misOrderCriteria.Add(Expression.In("SubjectList", subjectListCode));
     IList<MiscOrder> miscOrderList = criteriaMgr.FindAll<MiscOrder>(misOrderCriteria);
     IList<DssExportHistory> addList = (from l in result join n in miscOrderList on l.OrderNo equals n.OrderNo select l).ToList();
     foreach(DssExportHistory dssExp in addList)
     {
         dssExp.Qty = dssExp.Qty * -1;
         dssExp.Comments = "ISS-UNP2RCT-TR";
         dssExp.ReferenceLocation = dssExp.Location;
         dssExp.Location = "LXXS";
     }
     return addList;
 }
Beispiel #42
0
        private IList <DssExportHistoryDetail> GroupSingleDssExportHistoryDetail(List <int> orderDetIdList, IList <LocationTransaction> rmLocTrans, DssOutboundControl dssOutboundControl, DateTime effectiveDate, Dictionary <string, IList <int> > orderdet, string fcol)
        {
            if (orderdet.ContainsKey(fcol))//包含同类
            {
                IList <int> orderdetid = (IList <int>)orderdet[fcol];
                foreach (int i in orderdetid)
                {
                    if (orderDetIdList.Contains(i))
                    {
                        orderDetIdList.Remove(i);
                    }
                }
                if (orderDetIdList != null && orderDetIdList.Count > 0)
                {
                    foreach (int i in orderDetIdList)
                    {
                        orderdetid.Add(i);
                    }
                    orderdet[fcol] = orderdetid;
                }
            }
            else
            {
                orderdet.Add(fcol, orderDetIdList);
            }


            var details = rmLocTrans.Where(r => orderDetIdList.Contains(r.OrderDetailId)).ToList();



            var query = from d in details
                        group d by new { d.PartyFrom, d.PartyTo, d.Location, d.Item } into g
                select new DssExportHistoryDetail
            {
                PartyFrom  = g.Key.PartyFrom,
                PartyTo    = g.Key.PartyTo,
                Location   = this.GetMappingExternalCode(BusinessConstants.DSS_ENTITY_LOCATION, dssOutboundControl.ExternalSystem.Code, g.Key.Location, g.Key.Location),
                Item       = g.Key.Item,
                Qty        = -g.Sum(d => d.Qty),     //生产消耗事务数为负   需要修改
                EffDate    = effectiveDate,
                OriginalId = g.Max(d => d.Id),
                KeyCode    = g.Max(d => d.Id).ToString()
            };

            return(query.ToList());
        }
Beispiel #43
0
        private IList <DssExportHistory> GroupSingleDssExportHistory(IList <LocationTransaction> fgLocTrans, IList <LocationTransaction> rmLocTrans, DssOutboundControl dssOutboundControl, DateTime effectiveDate)
        {
            var refLoc = (from l in fgLocTrans where l.Location == "Reject" select l.RefLocation).Distinct().ToList();
            Dictionary <string, string> refDic = new Dictionary <string, string>();

            foreach (var i in refLoc)
            {
                if (i == null)
                {
                    continue;
                }
                Location loc = locMgr.LoadLocation(i);
                if (loc != null && !refDic.ContainsKey(i))
                {
                    refDic.Add(i, loc.Region.Code);
                }
            }
            Dictionary <string, IList <int> > orderdet = new Dictionary <string, IList <int> >();

            var x = (from xxxx in fgLocTrans where xxxx.Item == "" select xxxx).ToList();

            var query = from l in fgLocTrans
                        group l by new { l.PartyFrom, l.PartyTo, l.Location, l.Item, l.RefLocation } into g
                select new DssExportHistory
            {
                PartyFrom = g.Key.PartyFrom,
                PartyTo   = getPartTo(g.Key.Location, g.Key.PartyTo, g.Key.RefLocation, refDic),          //10-15
                Location  = g.Key.Location,
                Item      = g.Key.Item,
                // ReferenceLocation=g.Key.RefLocation,
                Qty                     = g.Sum(d => d.Qty),
                EffectiveDate           = effectiveDate,
                OriginalId              = g.Max(d => d.Id),
                DssOutboundControl      = dssOutboundControl,
                EventCode               = BusinessConstants.DSS_EVENT_CODE_CREATE,
                IsActive                = true,
                CreateDate              = DateTime.Now,
                DssExportHistoryDetails = this.GroupSingleDssExportHistoryDetail(g.Select(d => d.OrderDetailId).Distinct().ToList(), rmLocTrans, dssOutboundControl, effectiveDate, orderdet,
                                                                                 g.Key.PartyFrom + g.Key.PartyTo + g.Key.Location + g.Key.Item
                                                                                 ),
                UndefinedString1 = dssOutboundControl.ExternalSystem.UndefinedString1, //Site,备用
                UndefinedString2 = dssOutboundControl.UndefinedString1,                //雇员
                UndefinedString3 = dssOutboundControl.UndefinedString2,                //工序
                KeyCode          = g.Max(d => d.Id).ToString()                         //Max LocTransId
                ,
                Comments = g.Key.PartyFrom + g.Key.PartyTo + g.Key.Location + g.Key.Item
            };

            var list = query.ToList();

            //djin ISS-wo重复删除
            //var comments = (from i in list select i.Comments).Distinct().ToList();
            //foreach (var com in comments)
            //{
            //    var dsss = (from dss in list where dss.Comments == com select dss).ToList();

            //    bool flag = true;
            //    foreach (DssExportHistory dss in dsss)
            //    {
            //        if (!flag)
            //        {

            //            dss.DssExportHistoryDetails = null;
            //        }
            //        else
            //        {
            //            flag = false;

            //        }

            //    }
            //}

            return(list);
        }
Beispiel #44
0
        private IList <DssExportHistory> GroupData(IList <LocationTransaction> locTrans, DssOutboundControl dssOutboundControl, DateTime effectiveDate)
        {
            #region 补充0成品工单
            var fgOrderDetIdList = locTrans
                                   .Where(l => StringHelper.Eq(l.TransactionType, BusinessConstants.CODE_MASTER_LOCATION_TRANSACTION_TYPE_VALUE_RCT_WO))
                                   .Select(l => l.OrderDetailId).Distinct().ToList();
            var rmOrderDetIdList = locTrans
                                   .Where(l => StringHelper.Eq(l.TransactionType, BusinessConstants.CODE_MASTER_LOCATION_TRANSACTION_TYPE_VALUE_ISS_WO))
                                   .Select(l => l.OrderDetailId).Distinct().ToList();

            var addList = rmOrderDetIdList.Except(fgOrderDetIdList).Distinct().ToList();

            #region 添加虚拟RCT-WO
            if (addList.Count > 0)
            {
                IList <LocationTransaction> virtualWOList = this.GetVirRctWo(addList);//GetVirtualRCTWO 修改为 GetVirRctWo
                if (virtualWOList.Count > 0)
                {
                    foreach (var virtualWO in virtualWOList)
                    {
                        virtualWO.TransactionType = BusinessConstants.CODE_MASTER_LOCATION_TRANSACTION_TYPE_VALUE_RCT_WO;
                        virtualWO.EffectiveDate   = effectiveDate;
                        virtualWO.Qty             = 0;
                    }
                    locTrans = locTrans.Concat(virtualWOList).ToList();
                }
            }
            #endregion
            #endregion

            #region Transformer
            var fgQuery = locTrans.Where(l => StringHelper.Eq(l.TransactionType, BusinessConstants.CODE_MASTER_LOCATION_TRANSACTION_TYPE_VALUE_RCT_WO)).ToList();
            var rmQuery = locTrans.Where(l => StringHelper.Eq(l.TransactionType, BusinessConstants.CODE_MASTER_LOCATION_TRANSACTION_TYPE_VALUE_ISS_WO)).ToList();

            log.Debug("Begin to group single data, count:" + fgQuery.Count);
            IList <DssExportHistory> dssExportHistoryList = this.GroupSingleDssExportHistory(fgQuery, rmQuery, dssOutboundControl, effectiveDate);
            #endregion

            return(dssExportHistoryList);
        }
        public void ProcessOutbound(DssOutboundControl dssOutboundControl)
        {
            log.Info("Start process outbound.");
            this.Initital_DBCache();

            #region Initailize
            this._dssObjectMapping = this.dssObjectMappingMgr.GetAllDssObjectMapping();
            #endregion

            string outFolder = dssOutboundControl.OutFolder;
            //string serviceName = dssOutboundControl.ServiceName;
            string archiveFolder = dssOutboundControl.ArchiveFolder;
            string tempFolder    = dssOutboundControl.TempFolder;
            //string encoding = dssOutboundControl.FileEncoding;
            string encoding   = Encoding.Default.WebName;
            string filePrefix = this.GetFilePrefix(dssOutboundControl);

            #region 初始化本地目录
            outFolder = outFolder.Replace("\\", "/");
            if (!outFolder.EndsWith("/"))
            {
                outFolder += "/";
            }

            if (!Directory.Exists(outFolder))
            {
                Directory.CreateDirectory(outFolder);
            }

            archiveFolder = archiveFolder.Replace("\\", "/");
            if (!archiveFolder.EndsWith("/"))
            {
                archiveFolder += "/";
            }

            if (!Directory.Exists(archiveFolder))
            {
                Directory.CreateDirectory(archiveFolder);
            }

            tempFolder = tempFolder.Replace("\\", "/");
            if (!tempFolder.EndsWith("/"))
            {
                tempFolder += "/";
            }

            if (Directory.Exists(tempFolder))
            {
                Directory.Delete(tempFolder, true);
            }
            Directory.CreateDirectory(tempFolder);
            #endregion

            #region 抽取数据
            log.Info("Begin to extract data:extsyscode:" + dssOutboundControl.ExternalSystem.Code + ",extobjcode:" + dssOutboundControl.ExternalObjectCode + ",service:" + dssOutboundControl.ServiceName);
            IList <DssExportHistory> dataList = this.GetHisList(dssOutboundControl.Id);

            #region 缓存数据
            IList <DssExportHistory> dssExportHistoryList = ExtractOutboundData(dssOutboundControl);
            this.ObjectMapping(dssExportHistoryList);
            dssExportHistoryList = this.FilterList(dssExportHistoryList);
            if (dssExportHistoryList != null && dssExportHistoryList.Count > 0)
            {
                this.CreateDssExportHistory(dssExportHistoryList, dssOutboundControl);
                dataList = dataList.Concat(dssExportHistoryList).ToList();

                log.Info("DssExportHistory count:" + dataList.Count + ",update new mark:" + dssOutboundControl.Mark);
            }
            #endregion

            #endregion

            #region 循环处理抽取数据
            if (dataList != null && dataList.Count > 0)
            {
                //if (dssOutboundControl.Id != 7)
                //{
                #region 非iss-so
                foreach (DssExportHistory dssExportHistory in dataList)
                {
                    try
                    {
                        object obj = null;
                        try
                        {
                            obj = GetOutboundData(dssExportHistory);
                        }
                        catch (BusinessErrorException ex)
                        {
                            log.Warn("Get no outbound data:", ex);
                            continue;
                        }

                        if (obj == null)
                        {
                            continue;
                        }

                        #region 对象转换为数组
                        object     o       = Serialize(obj);
                        DateTime   effDate = (DateTime)((object[])o)[0];
                        string[][] data    = (string[][])((object[])o)[1];
                        #endregion

                        #region 抽取数据导入文件
                        string transNo = this.GetTransNumber(dssOutboundControl, filePrefix, effDate);
                        //modified by [email protected]
                        //2012/5
                        string location  = dssExportHistory.Location;
                        bool   partyfrom = dssExportHistory.PartyFrom == "1001" ? true : false;
                        bool   partyto   = dssExportHistory.PartyTo == "1001" ? true : false;
                        //string region = locationMgr.LoadLocation(location).Region.Code;
                        string bj_region = partyfrom || partyto == true ? "BJ" : "";
                        string fileName  = this.GetFileName(dssOutboundControl, filePrefix, transNo, bj_region);
                        //modified end
                        StreamWriter   streamWriter   = new StreamWriter(tempFolder + fileName, false, Encoding.GetEncoding(encoding));
                        FlatFileWriter flatFileWriter = new FlatFileWriter(streamWriter, Environment.NewLine, "|");
                        flatFileWriter.Write(data);
                        flatFileWriter.Dispose();
                        #endregion

                        #region 文件移至目录
                        try
                        {
                            File.Copy(tempFolder + fileName, archiveFolder + fileName);     //备份目录
                            File.Move(tempFolder + fileName, outFolder + fileName);         //导出目录

                            #region 更新导出标记
                            dssExportHistory.IsActive = false;
                            dssExportHistory.TransNo  = transNo;
                            dssExportHistoryMgr.UpdateDssExportHistory(dssExportHistory);
                            #endregion
                        }
                        catch (Exception ex)
                        {
                            log.Error("Create export file error.", ex);
                            if (File.Exists(archiveFolder + fileName))
                            {
                                File.Delete(archiveFolder + fileName);
                            }

                            if (File.Exists(outFolder + fileName))
                            {
                                File.Delete(outFolder + fileName);
                            }
                        }
                        #endregion
                    }
                    catch (Exception ex)
                    {
                        log.Error("Export data error.", ex);
                        break;    //2012-10-24 发生错误执行下一任务 djin
                    }
                }
                #endregion
                //}
                //else
                //{
                //    var dataListGroup = (from i in dataList select i.DefinedString1).Distinct().ToList();
                //    foreach (var i in dataListGroup)
                //    {
                //        IList<string[][]> outString = new List<string[][]>();
                //        var result = (from x in dataList where x.DefinedString1 == i select x).ToList();
                //        #region  iss-so

                //        if (result != null && result.Count > 0)
                //        {
                //            foreach (DssExportHistory dssExportHistory in result)
                //            {
                //                try
                //                {
                //                    object obj = null;
                //                    try
                //                    {
                //                        obj = GetOutboundData(dssExportHistory);
                //                    }
                //                    catch (BusinessErrorException ex)
                //                    {
                //                        log.Warn("Get no outbound data:", ex);
                //                        continue;
                //                    }

                //                    if (obj == null)
                //                        continue;

                //                    #region 对象转换为数组
                //                    object o = Serialize(obj);

                //                    string[][] data = (string[][])((object[])o)[1];

                //                    outString.Add(data);

                //                    #endregion
                //                }
                //                catch (Exception ex)
                //                {
                //                    log.Error("Export data error.", ex);
                //                    break;//2012-10-24 发生错误执行下一任务 djin
                //                }
                //            }

                //            #region 抽取数据导入文件
                //            try
                //            {
                //                DateTime effDate = (DateTime)((object[])Serialize(GetOutboundData(result[0])))[0];

                //                string transNo = this.GetTransNumber(dssOutboundControl, filePrefix, effDate);
                //                //modified by [email protected]
                //                //2012/5
                //                string location = result[0].Location;
                //                bool partyfrom = result[0].PartyFrom == "1001" ? true : false;
                //                bool partyto = result[0].PartyTo == "1001" ? true : false;
                //                //string region = locationMgr.LoadLocation(location).Region.Code;
                //                string bj_region = partyfrom || partyto == true ? "BJ" : "";
                //                string fileName = this.GetFileName(dssOutboundControl, filePrefix, transNo, bj_region);
                //                fileName = fileName.Split(new char[] { '.' })[0].TrimEnd(new char[] { '1' }) +"."+ fileName.Split(new char[] { '.' })[1];
                //                //modified end
                //                StreamWriter streamWriter = new StreamWriter(tempFolder + fileName, false, Encoding.GetEncoding(encoding));
                //                FlatFileWriter flatFileWriter = new FlatFileWriter(streamWriter, Environment.NewLine, "|");
                //                flatFileWriter.WriteWithNewLine(((string[][])(outString[0]))[0]);
                //                foreach (string[][] str in outString)
                //                {
                //                    flatFileWriter.WriteWithNewLine(str[1]);
                //                }
                //                flatFileWriter.Dispose();
                //            #endregion

                //                #region 文件移至目录
                //                try
                //                {
                //                    File.Copy(tempFolder + fileName, archiveFolder + fileName);  //备份目录
                //                    File.Move(tempFolder + fileName, outFolder + fileName);     //导出目录

                //                    #region 更新导出标记
                //                    foreach (DssExportHistory dssExportHistory in dataList)
                //                    {
                //                        dssExportHistory.IsActive = false;
                //                        dssExportHistory.TransNo = transNo;
                //                        dssExportHistoryMgr.UpdateDssExportHistory(dssExportHistory);
                //                    }
                //                    #endregion
                //                }
                //                catch (Exception ex)
                //                {
                //                    log.Error("Create export file error.", ex);
                //                    if (File.Exists(archiveFolder + fileName))
                //                    {
                //                        File.Delete(archiveFolder + fileName);
                //                    }

                //                    if (File.Exists(outFolder + fileName))
                //                    {
                //                        File.Delete(outFolder + fileName);
                //                    }
                //                }
                //                #endregion
                //            }
                //            catch (Exception ex)
                //            {
                //                continue;
                //            }
                //        #endregion
                //        }
                //    }
                //}
            }
            else
            {
                log.Info("No data export.");
            }
            #endregion

            this.Initital_DBCache();
            log.Info("Start process outbound successful.");
        }
        private IList<DssExportHistory> GroupSingleDssExportHistory(IList<LocationTransaction> fgLocTrans, IList<LocationTransaction> rmLocTrans, DssOutboundControl dssOutboundControl, DateTime effectiveDate)
        {
            var query = from l in fgLocTrans
                        group l by new { l.PartyFrom, l.PartyTo, l.Location, l.Item } into g
                        select new DssExportHistory
                        {
                            PartyFrom = g.Key.PartyFrom,
                            PartyTo = g.Key.PartyTo,
                            Location = g.Key.Location,
                            Item = g.Key.Item,
                            Qty = g.Sum(d => d.Qty),
                            EffectiveDate = effectiveDate,
                            OriginalId = g.Max(d => d.Id),
                            DssOutboundControl = dssOutboundControl,
                            EventCode = BusinessConstants.DSS_EVENT_CODE_CREATE,
                            IsActive = true,
                            CreateDate = DateTime.Now,
                            DssExportHistoryDetails = this.GroupSingleDssExportHistoryDetail(g.Select(d => d.OrderDetailId).Distinct().ToList(), rmLocTrans, dssOutboundControl, effectiveDate),
                            UndefinedString1 = dssOutboundControl.ExternalSystem.UndefinedString1,//Site,备用
                            UndefinedString2 = dssOutboundControl.UndefinedString1,//雇员
                            UndefinedString3 = dssOutboundControl.UndefinedString2,//工序
                            KeyCode = g.Max(d => d.Id).ToString()//Max LocTransId
                        };

            return query.ToList();
        }
        private IList<DssExportHistoryDetail> GroupSingleDssExportHistoryDetail(List<int> orderDetIdList, IList<LocationTransaction> rmLocTrans, DssOutboundControl dssOutboundControl, DateTime effectiveDate)
        {
            var details = rmLocTrans.Where(r => orderDetIdList.Contains(r.OrderDetailId)).ToList();

            var query = from d in details
                        group d by new { d.PartyFrom, d.PartyTo, d.Location, d.Item } into g
                        select new DssExportHistoryDetail
                        {
                            PartyFrom = g.Key.PartyFrom,
                            PartyTo = g.Key.PartyTo,
                            Location = this.GetMappingExternalCode(BusinessConstants.DSS_ENTITY_LOCATION, dssOutboundControl.ExternalSystem.Code, g.Key.Location, g.Key.Location),
                            Item = g.Key.Item,
                            Qty = -g.Sum(d => d.Qty),//生产消耗事务数为负
                            EffDate = effectiveDate,
                            OriginalId = g.Max(d => d.Id),
                            KeyCode = g.Max(d => d.Id).ToString()
                        };

            return query.ToList();
        }
        private string GetTransNumber(DssOutboundControl dssOutboundControl, string filePrefix, DateTime effDate)
        {
            string codePrefix = filePrefix + effDate.ToString("yyyyMMdd");
            if (dssOutboundControl.ExternalSystem.Flag != null && dssOutboundControl.ExternalSystem.Flag.Trim() != string.Empty)
                codePrefix += dssOutboundControl.ExternalSystem.Flag.Substring(0, 1);
            else
                codePrefix += "0";

            string transNo = this.numberControlMgr.GenerateNumber(codePrefix, 8);
            return transNo.Substring(transNo.Length - 17, 17);
        }
        public void ProcessOutbound(DssOutboundControl dssOutboundControl)
        {
            log.Info("Start process outbound.");
            this.Initital_DBCache();

            #region Initailize
            this._dssObjectMapping = this.dssObjectMappingMgr.GetAllDssObjectMapping();
            #endregion

            string outFolder = dssOutboundControl.OutFolder;
            //string serviceName = dssOutboundControl.ServiceName;
            string archiveFolder = dssOutboundControl.ArchiveFolder;
            string tempFolder = dssOutboundControl.TempFolder;
            //string encoding = dssOutboundControl.FileEncoding;
            string encoding = Encoding.Default.WebName;
            string filePrefix = this.GetFilePrefix(dssOutboundControl);

            #region 初始化本地目录
            outFolder = outFolder.Replace("\\", "/");
            if (!outFolder.EndsWith("/"))
            {
                outFolder += "/";
            }

            if (!Directory.Exists(outFolder))
            {
                Directory.CreateDirectory(outFolder);
            }

            archiveFolder = archiveFolder.Replace("\\", "/");
            if (!archiveFolder.EndsWith("/"))
            {
                archiveFolder += "/";
            }

            if (!Directory.Exists(archiveFolder))
            {
                Directory.CreateDirectory(archiveFolder);
            }

            tempFolder = tempFolder.Replace("\\", "/");
            if (!tempFolder.EndsWith("/"))
            {
                tempFolder += "/";
            }

            if (Directory.Exists(tempFolder))
            {
                Directory.Delete(tempFolder, true);
            }
            Directory.CreateDirectory(tempFolder);
            #endregion

            #region 抽取数据
            log.Info("Begin to extract data:extsyscode:" + dssOutboundControl.ExternalSystem.Code + ",extobjcode:" + dssOutboundControl.ExternalObjectCode + ",service:" + dssOutboundControl.ServiceName);
            IList<DssExportHistory> dataList = this.GetHisList(dssOutboundControl.Id);

            #region 缓存数据
            IList<DssExportHistory> dssExportHistoryList = ExtractOutboundData(dssOutboundControl);
            this.ObjectMapping(dssExportHistoryList);
            dssExportHistoryList = this.FilterList(dssExportHistoryList);
            if (dssExportHistoryList != null && dssExportHistoryList.Count > 0)
            {
                this.CreateDssExportHistory(dssExportHistoryList, dssOutboundControl);
                dataList = dataList.Concat(dssExportHistoryList).ToList();

                log.Info("DssExportHistory count:" + dataList.Count + ",update new mark:" + dssOutboundControl.Mark);
            }
            #endregion

            #endregion

            #region 循环处理抽取数据
            if (dataList != null && dataList.Count > 0)
            {
                //if (dssOutboundControl.Id != 7)
                //{
                    #region 非iss-so
                    foreach (DssExportHistory dssExportHistory in dataList)
                    {
                        try
                        {
                            object obj = null;
                            try
                            {
                                obj = GetOutboundData(dssExportHistory);
                            }
                            catch (BusinessErrorException ex)
                            {
                                log.Warn("Get no outbound data:", ex);
                                continue;
                            }

                            if (obj == null)
                                continue;

                            #region 对象转换为数组
                            object o = Serialize(obj);
                            DateTime effDate = (DateTime)((object[])o)[0];
                            string[][] data = (string[][])((object[])o)[1];
                            #endregion

                            #region 抽取数据导入文件
                            string transNo = this.GetTransNumber(dssOutboundControl, filePrefix, effDate);
                            //modified by [email protected]
                            //2012/5
                            string location = dssExportHistory.Location;
                            bool partyfrom = dssExportHistory.PartyFrom == "1001" ? true : false;
                            bool partyto = dssExportHistory.PartyTo == "1001" ? true : false;
                            //string region = locationMgr.LoadLocation(location).Region.Code;
                            string bj_region = partyfrom || partyto == true ? "BJ" : "";
                            string fileName = this.GetFileName(dssOutboundControl, filePrefix, transNo, bj_region);
                            //modified end
                            StreamWriter streamWriter = new StreamWriter(tempFolder + fileName, false, Encoding.GetEncoding(encoding));
                            FlatFileWriter flatFileWriter = new FlatFileWriter(streamWriter, Environment.NewLine, "|");
                            flatFileWriter.Write(data);
                            flatFileWriter.Dispose();
                            #endregion

                            #region 文件移至目录
                            try
                            {
                                File.Copy(tempFolder + fileName, archiveFolder + fileName);  //备份目录
                                File.Move(tempFolder + fileName, outFolder + fileName);     //导出目录

                                #region 更新导出标记
                                dssExportHistory.IsActive = false;
                                dssExportHistory.TransNo = transNo;
                                dssExportHistoryMgr.UpdateDssExportHistory(dssExportHistory);
                                #endregion
                            }
                            catch (Exception ex)
                            {
                                log.Error("Create export file error.", ex);
                                if (File.Exists(archiveFolder + fileName))
                                {
                                    File.Delete(archiveFolder + fileName);
                                }

                                if (File.Exists(outFolder + fileName))
                                {
                                    File.Delete(outFolder + fileName);
                                }
                            }
                            #endregion
                        }
                        catch (Exception ex)
                        {
                            log.Error("Export data error.", ex);
                            break;//2012-10-24 发生错误执行下一任务 djin
                        }
                    }
                    #endregion
                //}
                //else
                //{
                //    var dataListGroup = (from i in dataList select i.DefinedString1).Distinct().ToList();
                //    foreach (var i in dataListGroup)
                //    {
                //        IList<string[][]> outString = new List<string[][]>();
                //        var result = (from x in dataList where x.DefinedString1 == i select x).ToList();
                //        #region  iss-so

                //        if (result != null && result.Count > 0)
                //        {
                //            foreach (DssExportHistory dssExportHistory in result)
                //            {
                //                try
                //                {
                //                    object obj = null;
                //                    try
                //                    {
                //                        obj = GetOutboundData(dssExportHistory);
                //                    }
                //                    catch (BusinessErrorException ex)
                //                    {
                //                        log.Warn("Get no outbound data:", ex);
                //                        continue;
                //                    }

                //                    if (obj == null)
                //                        continue;

                //                    #region 对象转换为数组
                //                    object o = Serialize(obj);

                //                    string[][] data = (string[][])((object[])o)[1];

                //                    outString.Add(data);

                //                    #endregion
                //                }
                //                catch (Exception ex)
                //                {
                //                    log.Error("Export data error.", ex);
                //                    break;//2012-10-24 发生错误执行下一任务 djin
                //                }
                //            }

                //            #region 抽取数据导入文件
                //            try
                //            {
                //                DateTime effDate = (DateTime)((object[])Serialize(GetOutboundData(result[0])))[0];

                //                string transNo = this.GetTransNumber(dssOutboundControl, filePrefix, effDate);
                //                //modified by [email protected]
                //                //2012/5
                //                string location = result[0].Location;
                //                bool partyfrom = result[0].PartyFrom == "1001" ? true : false;
                //                bool partyto = result[0].PartyTo == "1001" ? true : false;
                //                //string region = locationMgr.LoadLocation(location).Region.Code;
                //                string bj_region = partyfrom || partyto == true ? "BJ" : "";
                //                string fileName = this.GetFileName(dssOutboundControl, filePrefix, transNo, bj_region);
                //                fileName = fileName.Split(new char[] { '.' })[0].TrimEnd(new char[] { '1' }) +"."+ fileName.Split(new char[] { '.' })[1];
                //                //modified end
                //                StreamWriter streamWriter = new StreamWriter(tempFolder + fileName, false, Encoding.GetEncoding(encoding));
                //                FlatFileWriter flatFileWriter = new FlatFileWriter(streamWriter, Environment.NewLine, "|");
                //                flatFileWriter.WriteWithNewLine(((string[][])(outString[0]))[0]);
                //                foreach (string[][] str in outString)
                //                {
                //                    flatFileWriter.WriteWithNewLine(str[1]);
                //                }
                //                flatFileWriter.Dispose();
                //            #endregion

                //                #region 文件移至目录
                //                try
                //                {
                //                    File.Copy(tempFolder + fileName, archiveFolder + fileName);  //备份目录
                //                    File.Move(tempFolder + fileName, outFolder + fileName);     //导出目录

                //                    #region 更新导出标记
                //                    foreach (DssExportHistory dssExportHistory in dataList)
                //                    {
                //                        dssExportHistory.IsActive = false;
                //                        dssExportHistory.TransNo = transNo;
                //                        dssExportHistoryMgr.UpdateDssExportHistory(dssExportHistory);
                //                    }
                //                    #endregion
                //                }
                //                catch (Exception ex)
                //                {
                //                    log.Error("Create export file error.", ex);
                //                    if (File.Exists(archiveFolder + fileName))
                //                    {
                //                        File.Delete(archiveFolder + fileName);
                //                    }

                //                    if (File.Exists(outFolder + fileName))
                //                    {
                //                        File.Delete(outFolder + fileName);
                //                    }
                //                }
                //                #endregion
                //            }
                //            catch (Exception ex)
                //            {
                //                continue;
                //            }
                //        #endregion
                //        }
                //    }
                //}
            }
            else
            {
                log.Info("No data export.");
            }
            #endregion

            this.Initital_DBCache();
            log.Info("Start process outbound successful.");
        }
Beispiel #50
0
 public virtual void UpdateDssOutboundControl(DssOutboundControl entity)
 {
     Update(entity);
 }
        private IList<DssExportHistory> ConvertList(IList<BillDetail> list, DssOutboundControl dssOutboundControl)
        {
            DetachedCriteria criteria = DetachedCriteria.For(typeof(DssObjectMapping))
              .Add(Expression.Eq("Entity", "BillTo")).Add(Expression.Eq("ExternalSystem", "QAD"))
              .Add(Expression.Eq("ExternalEntity", "ShipTo"));

            IList<DssObjectMapping> dom = criteriaMgr.FindAll<DssObjectMapping>(criteria);
            IList<DssExportHistory> result = new List<DssExportHistory>();
            if (list != null && list.Count > 0)
            {
                foreach (BillDetail billDetail in list)
                {
                    DssExportHistory dssExportHistory = new DssExportHistory();

                    dssExportHistory.DssOutboundControl = dssOutboundControl;
                    dssExportHistory.EventCode = BusinessConstants.DSS_EVENT_CODE_CREATE;
                    dssExportHistory.IsActive = true;
                    dssExportHistory.CreateDate = DateTime.Now;

                    dssExportHistory.OriginalId = billDetail.Id;
                    dssExportHistory.OrderNo = billDetail.ActingBill.OrderNo;
                    dssExportHistory.ReceiptNo = billDetail.ActingBill.ReceiptNo;
                    dssExportHistory.Item = billDetail.ActingBill.Item.Code;
                    dssExportHistory.Location = dssExportHistory.DssOutboundControl.UndefinedString1;//客户库位
                    dssExportHistory.Qty = billDetail.BilledQty;
                    //dssExportHistory.EffectiveDate = billDetail.Bill.CreateDate.Date;
                    dssExportHistory.EffectiveDate = DateTime.Now;
                    dssExportHistory.PartyTo = billDetail.Bill.BillAddress.Party.Code;//客户

                    dssExportHistory.DefinedString1 = billDetail.Bill.BillNo;//开票通知单号
                    dssExportHistory.DefinedString2 = billDetail.Bill.BillAddress.Code; //BillTo
                    if (dom != null && dom.Count > 0)
                    {
                        DssObjectMapping sd = dom.Where(d => d.Code == billDetail.Bill.BillAddress.Code).FirstOrDefault();
                        dssExportHistory.DefinedString3 = sd.ExternalCode;  //Map到shipto
                    }

                    dssExportHistory.KeyCode = DssHelper.GetBillKeyCode(dssExportHistory, billDetail.Bill.BillNo);

                    this.GetLoctransInfo(dssExportHistory);
                    result.Add(dssExportHistory);
                }
            }

            return result;
        }
 protected abstract IList<DssExportHistory> ExtractOutboundData(DssOutboundControl dssOutboundControl);
        private IList<DssExportHistory> GroupSingleDssExportHistory(IList<LocationTransaction> fgLocTrans, IList<LocationTransaction> rmLocTrans, DssOutboundControl dssOutboundControl, DateTime effectiveDate)
        {
            var refLoc = (from l in fgLocTrans where l.Location == "Reject" select l.RefLocation).Distinct().ToList();
            Dictionary<string, string> refDic = new Dictionary<string, string>();

            foreach (var i in refLoc)
            {
                if (i == null) continue;
                Location loc = locMgr.LoadLocation(i);
                if (loc != null && !refDic.ContainsKey(i))
                    refDic.Add(i, loc.Region.Code);

            }
            Dictionary<string, IList<int>> orderdet = new Dictionary<string, IList<int>>();

            var x = (from xxxx in fgLocTrans where xxxx.Item== "" select xxxx).ToList();

            var query = from l in fgLocTrans
                        group l by new { l.PartyFrom, l.PartyTo, l.Location, l.Item, l.RefLocation } into g
                        select new DssExportHistory
                        {
                            PartyFrom = g.Key.PartyFrom,
                            PartyTo = getPartTo(g.Key.Location, g.Key.PartyTo, g.Key.RefLocation, refDic),//10-15
                            Location = g.Key.Location,
                            Item = g.Key.Item,
                            // ReferenceLocation=g.Key.RefLocation,
                            Qty = g.Sum(d => d.Qty),
                            EffectiveDate = effectiveDate,
                            OriginalId = g.Max(d => d.Id),
                            DssOutboundControl = dssOutboundControl,
                            EventCode = BusinessConstants.DSS_EVENT_CODE_CREATE,
                            IsActive = true,
                            CreateDate = DateTime.Now,
                            DssExportHistoryDetails = this.GroupSingleDssExportHistoryDetail(g.Select(d => d.OrderDetailId).Distinct().ToList(), rmLocTrans, dssOutboundControl, effectiveDate, orderdet,
                            g.Key.PartyFrom + g.Key.PartyTo + g.Key.Location + g.Key.Item
                            ),
                            UndefinedString1 = dssOutboundControl.ExternalSystem.UndefinedString1,//Site,备用
                            UndefinedString2 = dssOutboundControl.UndefinedString1,//雇员
                            UndefinedString3 = dssOutboundControl.UndefinedString2,//工序
                            KeyCode = g.Max(d => d.Id).ToString()//Max LocTransId
                            ,
                            Comments = g.Key.PartyFrom + g.Key.PartyTo + g.Key.Location + g.Key.Item
                        };

            var list = query.ToList();
            //djin ISS-wo重复删除
            //var comments = (from i in list select i.Comments).Distinct().ToList();
            //foreach (var com in comments)
            //{
            //    var dsss = (from dss in list where dss.Comments == com select dss).ToList();

            //    bool flag = true;
            //    foreach (DssExportHistory dss in dsss)
            //    {
            //        if (!flag)
            //        {

            //            dss.DssExportHistoryDetails = null;
            //        }
            //        else
            //        {
            //            flag = false;

            //        }

            //    }
            //}

            return list;
        }
 //modified by [email protected]
 //2012/5
 //Filename default: Region + FilePrefix + TransNo + FileSuffix .REQ
 private string GetFileName(DssOutboundControl dssOutboundControl, string filePrefix, string transNo, string region)
 {
     string fileSuffix = string.Empty;
     if (dssOutboundControl.FileSuffix != null && dssOutboundControl.FileSuffix.Trim() != string.Empty)
         fileSuffix = dssOutboundControl.FileSuffix;
     else
         fileSuffix = dssOutboundControl.ExternalObjectCode + ".REQ";
     string fileName = filePrefix + "_" + transNo + "_" + fileSuffix;
     if (region != "")
     {
         fileName = region + filePrefix + "_" + transNo + "_" + fileSuffix;
     }
     return fileName;
 }
        private string GetFilePrefix(DssOutboundControl dssOutboundControl)
        {
            if (dssOutboundControl.FilePrefix != null && dssOutboundControl.FilePrefix.Trim() != string.Empty)
                return dssOutboundControl.FilePrefix;

            string sysCode = BusinessConstants.DSS_SYSTEM_CODE_SCONIT;
            string extSysCode = dssOutboundControl.ExternalSystem.Code;

            if (dssOutboundControl.SysAlias != null && dssOutboundControl.SysAlias.Trim() != string.Empty)
                sysCode = dssOutboundControl.SysAlias;
            if (dssOutboundControl.ExternalSystem.SysAlias != null && dssOutboundControl.ExternalSystem.SysAlias.Trim() != string.Empty)
                extSysCode = dssOutboundControl.ExternalSystem.SysAlias;

            string filePrefix = sysCode + "_" + extSysCode;
            return filePrefix;
        }
        private void ProcessRctTr(IList<DssExportHistory> list, DssOutboundControl dssOutboundControl)
        {
            if (list != null && list.Count > 0)
            {
                List<int> orderDetIdList = list.Where(l => l.OrderDetailId > 0).Select(l => l.OrderDetailId).Distinct().ToList();

                //orderdet超过2千个会有问题,先临时拆分一下
                IList<LocationTransaction> issList = new List<LocationTransaction>();
                if (orderDetIdList.Count < 2000)
                {
                    issList = this.GetIssTr(orderDetIdList);
                }
                else
                {
                    log.Debug("total count: " + orderDetIdList.Count);
                    int count = orderDetIdList.Count / 2000;
                    for (int i = 0; i <= count; i++)
                    {
                        int interval = i * 2000;
                        int maxCount = i == count ? orderDetIdList.Count - interval : 2000;
                        log.Debug("begin index: " + interval);
                        log.Debug("record count: " + maxCount);
                        List<int> tempOrderDetIdList = orderDetIdList.GetRange(interval, maxCount);
                        IList<LocationTransaction> tempIssList = this.GetIssTr(tempOrderDetIdList);
                        issList = issList.Concat(tempIssList).ToList();
                    }
                }
                if (issList != null && issList.Count > 0)
                {
                    foreach (var dssExportHistory in list)
                    {
                        var issTrans = issList.Where(i => i.OrderDetailId == dssExportHistory.OrderDetailId).SingleOrDefault();

                        if (issTrans != null)
                        {
                            dssExportHistory.ReferenceLocation = issTrans.Location;
                            //djin 20120903 mod
                            //orginal partyfrom=issTrans.PartyFrom
                            //if (issTrans.Location == "Reject")
                            //    dssExportHistory.PartyFrom = locationMgr.LoadLocation(issTrans.RefLocation).Region.Code;
                            //else
                            dssExportHistory.PartyFrom = issTrans.PartyFrom;
                        }
                    }
                }
            }
        }
Beispiel #57
0
 public virtual void CreateDssOutboundControl(DssOutboundControl entity)
 {
     Create(entity);
 }
 public IList ExtractOutboundDataFromLocationTransaction(DssOutboundControl dssOutboundControl, string transType, MatchMode matchMode)
 {
     return ExtractOutboundDataFromLocationTransaction(dssOutboundControl, transType, matchMode, false);
 }
Beispiel #59
0
 public virtual void DeleteDssOutboundControl(DssOutboundControl entity)
 {
     Delete(entity);
 }
        public IList ExtractOutboundDataFromLocationTransaction(DssOutboundControl dssOutboundControl, string transType, MatchMode matchMode, bool includeRefLoc)
        {
            DetachedCriteria criteria = DetachedCriteria.For(typeof(LocationTransaction));
            criteria.Add(Expression.Gt("Id", dssOutboundControl.Mark));
            criteria.Add(Expression.Like("TransactionType", transType, matchMode));
            if (includeRefLoc)
            {
                criteria.SetProjection(Projections.ProjectionList()
                    .Add(Projections.Max("Id"))
                    .Add(Projections.GroupProperty("OrderNo"))
                    .Add(Projections.GroupProperty("ReceiptNo"))
                    .Add(Projections.GroupProperty("Item"))
                    .Add(Projections.GroupProperty("Location"))
                    .Add(Projections.Sum("Qty"))
                    .Add(Projections.GroupProperty("EffectiveDate"))
                    .Add(Projections.GroupProperty("PartyFrom"))
                    .Add(Projections.GroupProperty("PartyTo"))
                    .Add(Projections.GroupProperty("RefLocation")));
            }
            else
            {
                criteria.SetProjection(Projections.ProjectionList()
                    .Add(Projections.Max("Id"))
                    .Add(Projections.GroupProperty("OrderNo"))
                    .Add(Projections.GroupProperty("ReceiptNo"))
                    .Add(Projections.GroupProperty("Item"))
                    .Add(Projections.GroupProperty("Location"))
                    .Add(Projections.Sum("Qty"))
                    .Add(Projections.GroupProperty("EffectiveDate"))
                    .Add(Projections.GroupProperty("PartyFrom"))
                    .Add(Projections.GroupProperty("PartyTo")));
            }

            return criteriaMgr.FindAll(criteria);
        }