/// <summary> /// 发货单上的数量 /// </summary> /// <param name="taskId"></param> /// <param name="pumpDate"></param> /// <returns></returns> public decimal?getShipSum(string taskId, DateTime?pumpDate) { ShippingDocumentService sdserv = new ShippingDocumentService(this.m_UnitOfWork); return(sdserv.Query() .Where(s => s.TaskID == taskId && s.IsEffective == true) .Where(s => s.ProduceDate > Convert.ToDateTime(pumpDate) && s.ProduceDate < Convert.ToDateTime(pumpDate).AddDays(1)) .Select(s => s.ParCube) .Cast <decimal?>() .Sum()); }
/// <summary> /// 查询合同指定时间段内的价格项 /// </summary> /// <param name="contractId"></param> /// <param name="beginDate"></param> /// <param name="endDate"></param> /// <param name="priceType"></param> /// <param name="rate"></param> /// <returns></returns> public dynamic FindValueItems(string contractId, string beginDate, string endDate, string priceType, decimal?rate) { if (IsSettlementExists(contractId, beginDate, endDate)) { throw new ApplicationException(Lang.Settlement_Error_DateRangeDuplicate); } DateTime dtBegin = Convert.ToDateTime(beginDate); DateTime dtEnd = Convert.ToDateTime(endDate); ContractService conSvr = new ContractService(this.m_UnitOfWork); ShippingDocumentService shipSvr = new ShippingDocumentService(this.m_UnitOfWork); ProduceTaskService pt = new ProduceTaskService(this.m_UnitOfWork); var contract = conSvr.Get(contractId); if (contract != null) { //查询指定范围生产过的合同明细id /* var conStrengthList = shipSvr.Query() * .Where(p => p.IsEffective == true) * .Where(p => p.ContractID == contractId * && p.ProduceDate >= dtBegin * && p.ProduceDate <= dtEnd) * .Where(p => p.ProduceTask.ContractItem != null) * .Select(p => p.ProduceTask.ContractItem) * .Distinct() * .ToList(); */ //提升发货单页面效率相应修改,发货单对象没有ProduceTask关联对象,此处采用替代方法 //modify by: Sky //date: 2012-12-10 var produceTaskIds = shipSvr.Query() .Where(p => p.IsEffective == true) .Where(p => p.ContractID == contractId && p.ProduceDate >= dtBegin && p.ProduceDate <= dtEnd) .Select(p => p.TaskID).ToList(); var conStrengthList = pt.Query() .Where(p => produceTaskIds.Contains(p.ID) && p.ContractItem != null) .Select(p => p.ContractItem) .Distinct() .ToList(); //信息价 if (priceType == ContractValuationType.InformationValue) { var informationPrice = this.m_UnitOfWork.GetRepositoryBase <ConPrice>().Query(); var query = from ci in conStrengthList join ip in informationPrice on ci.ConStrength equals ip.ConStrengthCode select new SettlementItem { ContractItemsID = ci.ID ?? 0, //强度 TypeCode = ci.ConStrength, UnitPrice = ip.InfoPrice, PumpPrice = ip.PumpPrice, //特性 PriceType = "", SlurryPrice = ip.SlurryPrice, IdentityPrice = 0 }; // .Join(conStrengthList,ip=>ip.ConStrengthCode, ci=>ci.ConStrength, (ip,ci)=>ip.ConStrengthCode==ci.ConStrength) // .Select(p => new { ConStrength = p., ConcretePrice = p.InfoPrice, PumpPrice = p.PumpPrice, SlurryPrice = p.SlurryPrice, IdentityPrice = 0 }) //.Where(p => conStrengthList.Select(i => i.ConStrength).Contains(p.ConStrength)) //.OrderBy(p => p.ConStrength) //.ToList(); return(new { OtherPrice = contract.OtherPrice.Select(o => new SettlementItem { //typecode ContractItemsID = o.ID, //加价项目 PriceType = o.PriceType, //计算方式 TypeCode = o.CalcType, UnitPrice = o.UnitPrice ?? 0 }), PumpPrice = contract.ContractPumps.Select(o => new SettlementItem { ContractItemsID = 0, //泵车类型 PriceType = o.PumpType, //泵车类型 TypeCode = o.PumpType, UnitPrice = o.PumpPrice ?? 0 }), ItemPrice = query.ToList() }); } else { return(new { OtherPrice = contract.OtherPrice.Select(o => new SettlementItem { //typecode ContractItemsID = o.ID, //加价项目 PriceType = o.PriceType, //计算方式 TypeCode = o.CalcType, UnitPrice = o.UnitPrice ?? 0 }), PumpPrice = contract.ContractPumps.Select(o => new SettlementItem { ContractItemsID = 0, //泵车类型 PriceType = o.PumpType, //泵车类型 TypeCode = o.PumpType, UnitPrice = o.PumpPrice ?? 0 }), ItemPrice = contract.ContractItems .Where(p => conStrengthList.Select(i => i.ConStrength).Contains(p.ConStrength)) .Select(p => new SettlementItem { ContractItemsID = p.ID ?? 0, //强度 TypeCode = p.ConStrength, UnitPrice = p.UnPumpPrice ?? 0, PumpPrice = p.PumpCost ?? 0, //特性 PriceType = string.Join(",", p.IdentitySettings.Select(t => t.IdentityName).ToArray()), SlurryPrice = p.SlurryPrice ?? 0, IdentityPrice = p.IdentitySettings.Sum(i => i.IdentityPrice) }) .ToList() }); } } return(null); }
/// <summary> /// 整车转发 /// </summary> /// <param name="sourceShipDocID">源运输单ID</param> /// <param name="targetTaskId">转至任务单</param> /// <param name="isOriginComplete">原任务单已完成(不需要转料后补)</param> /// <param name="isTrashOrigin">原任务单作废</param> /// <param name="returnReason">转发原因</param> /// <returns></returns> public ShippingDocument Forward(string sourceShipDocID, string targetTaskId, bool isOriginComplete, bool isTrashOrigin, string returnReason, out string message, string[] _carids) { var shipDocRepo = this.m_UnitOfWork.GetRepositoryBase <ShippingDocument>(); ShippingDocument oldDoc = shipDocRepo.Get(sourceShipDocID); ProduceTask task = this.m_UnitOfWork.GetRepositoryBase <ProduceTask>().Get(targetTaskId); message = Lang.Msg_Operate_Success; if (oldDoc != null && task != null) { //UNDONE: 转发方量和生产方量是否要处理 ShippingDocument newDoc = new ShippingDocument();// oldDoc.Clone() as ShippingDocument;\ //如果有_carids说明不光转发还要换车 if (_carids == null || _carids.Length == 0 || string.IsNullOrEmpty(_carids[0])) { newDoc.CarID = oldDoc.CarID; } else { newDoc.CarID = _carids[0]; } newDoc.IsEffective = true; newDoc.ContractID = task.ContractID; newDoc.ContractName = task.Contract.ContractName; newDoc.CustName = task.Contract.CustName; newDoc.CustomerID = task.Contract.CustomerID; newDoc.CustMixpropID = task.CustMixpropID; newDoc.ProductLineName = oldDoc.ProductLineName; newDoc.ProductLineID = oldDoc.ProductLineID; newDoc.DeliveryTime = DateTime.Now; //newDoc.ProduceDate = oldDoc.ProduceDate; newDoc.ProduceDate = DateTime.Now; newDoc.ConsMixpropID = oldDoc.ConsMixpropID; newDoc.SlurryConsMixpropID = oldDoc.SlurryConsMixpropID; newDoc.FormulaName = oldDoc.FormulaName; newDoc.ProjectName = task.ProjectName; newDoc.ProjectAddr = task.ProjectAddr; newDoc.ProjectID = task.ProjectID; newDoc.ShipDocType = "0"; newDoc.ConStrength = task.ConStrength; newDoc.CastMode = task.CastMode; newDoc.ConsPos = task.ConsPos; newDoc.ImpGrade = task.ImpGrade; newDoc.ImyGrade = task.ImyGrade; newDoc.ImdGrade = task.ImdGrade; newDoc.CarpRadii = task.CarpRadii; newDoc.CementBreed = task.CementBreed; newDoc.Distance = oldDoc.Distance; newDoc.RealSlump = task.Slump;//oldDoc.RealSlump;此处换成目标工地的坍落度,保持与票面一致 newDoc.BetonCount = oldDoc.BetonCount; newDoc.SlurryCount = oldDoc.SlurryCount; newDoc.OtherCube = oldDoc.OtherCube; newDoc.XuCube = oldDoc.XuCube; newDoc.RemainCube = oldDoc.RemainCube; newDoc.ShippingCube = oldDoc.ShippingCube; newDoc.PlanCube = task.PlanCube; //调度方量 = 混凝土 + 砂浆 newDoc.SendCube = newDoc.BetonCount + newDoc.SlurryCount; //出票方量 = 调度方量 + 其它方量 + 剩余方量 decimal?parCube = newDoc.SendCube + newDoc.OtherCube + (newDoc.RemainCube ?? 0); newDoc.ParCube = parCube ?? 0; newDoc.SignInCube = newDoc.ParCube; newDoc.ScrapCube = 0; newDoc.TransferCube = 0; newDoc.Surveyor = oldDoc.Surveyor; newDoc.Operator = oldDoc.Operator; newDoc.RegionID = task.RegionID; newDoc.ForkLift = task.ForkLift; newDoc.PlanClass = task.PlanClass; //newDoc.ProduceDate = DateTime.Now; newDoc.SupplyUnit = task.SupplyUnit; newDoc.ConstructUnit = task.ConstructUnit; newDoc.Signer = AuthorizationService.CurrentUserID; newDoc.LinkMan = task.LinkMan; newDoc.Tel = task.Tel; //是否代外生产. newDoc.EntrustUnit = task.IsCommission ? task.SupplyUnit : ""; newDoc.Remark = string.Format("CODEADD由运输单:{0}整车转发生成", sourceShipDocID); newDoc.IsProduce = oldDoc.IsProduce; newDoc.ID = null; newDoc.TaskID = targetTaskId; //从最后一个发货单取得累计方量和车数 ShippingDocumentService sdService = new ShippingDocumentService(this.m_UnitOfWork); ShippingDocument doc = sdService.Query() .Where(p => p.TaskID == targetTaskId && p.IsEffective == true && p.ShipDocType == "0") .OrderByDescending(p => p.BuildTime) .FirstOrDefault(); if (doc != null) { newDoc.ProvidedTimes = doc.ProvidedTimes + 1; newDoc.ProvidedCube = doc.ProvidedCube + newDoc.ParCube; newDoc.PumpName = doc.PumpName; } else { newDoc.ProvidedTimes = 1; newDoc.ProvidedCube = newDoc.ParCube; } //newDoc.ProjectName = task.ProjectName; //newDoc.ConStrength = task.ConStrength; //newDoc.CastMode = task.CastMode; //newDoc.ConsPos = task.ConsPos; //newDoc.ImpGrade = task.ImpGrade; //newDoc.ImyGrade = task.ImyGrade; //newDoc.ImdGrade = task.ImdGrade; //newDoc.CarpRadii = task.CarpRadii; //newDoc.CementBreed = task.CementBreed; //newDoc.ForkLift = task.ForkLift; //newDoc.PlanClass = task.PlanClass; //newDoc.ProduceDate = DateTime.Now; //newDoc.SupplyUnit = task.SupplyUnit; //newDoc.ConstructUnit = task.ConstructUnit; ////是否托外生产. //newDoc.EntrustUnit = task.IsCommission ? task.SupplyUnit : ""; //newDoc.IsEffective = true; //生产登记关系转移到新发货单 newDoc.DispatchLists = new List <DispatchList>(); //newDoc.DispatchLists.Clear(); //newDoc.DispatchLists = null; newDoc.TZRalations = null; foreach (var d in oldDoc.DispatchLists) { newDoc.DispatchLists.Add(d); } //原调度关系清空 oldDoc.DispatchLists.Clear(); //原运输单是否作废 oldDoc.IsEffective = !isTrashOrigin; //记录作废原因 if (oldDoc.IsEffective) { oldDoc.Remark = (string.IsNullOrEmpty(oldDoc.Remark) ? "" : oldDoc.Remark + " ") + "CODEADD整车转发"; } else { oldDoc.Remark = (string.IsNullOrEmpty(oldDoc.Remark) ? "" : oldDoc.Remark + " ") + "CODEADD整车转发作废"; } //退转料记录 TZRalation tzRelation = new TZRalation { SourceShipDocID = oldDoc.ID, SourceCube = oldDoc.ParCube, CarID = oldDoc.CarID, Driver = oldDoc.Driver, Cube = oldDoc.ParCube, ReturnType = ZLERP.Model.Enums.ReturnType.Forward, ActionType = ZLERP.Model.Enums.ActionType.Transfer, IsCompleted = true, ReturnReason = returnReason }; //UNDONE:目标任务单是否要更新已供和累计方量 using (IGenericTransaction tx = this.m_UnitOfWork.BeginTransaction()) { try { oldDoc.IsProduce = false; shipDocRepo.Update(oldDoc, null); //this.m_UnitOfWork.Flush(); shipDocRepo.Add(newDoc); // this.m_UnitOfWork.Flush(); tzRelation.TargetShipDocID = newDoc.ID; //整车转发时,生产记录自动转 List <ProductRecord> prList = this.m_UnitOfWork.GetRepositoryBase <ProductRecord>().Query() .Where(m => m.ShipDocID == oldDoc.ID) .ToList(); foreach (ProductRecord pr in prList) { pr.ShipDocID = newDoc.ID; this.m_UnitOfWork.GetRepositoryBase <ProductRecord>().Update(pr, null); } DateTime ts = DateTime.Now; tzRelation.ActionTime = ts; tzRelation.ActionCube = tzRelation.Cube; //整车转发状态设置为3 tzRelation.IsLock = "3"; //转退料单号 tzRelation.TzRalationFlag = getZtlDh() + "ZC"; base.Add(tzRelation); tx.Commit(); return(newDoc); } catch (Exception ex) { message = ex.Message; tx.Rollback(); logger.Error(ex.Message, ex); } } } return(null); }