private static string _deviceNumberFromConstructPackage(IDatabase database, ConstructPlanPackage constructPlanPackage, MemberApplyItem memberApplyItem, string lastFourDeviceNumber) { return constructPlanPackage.PackageNumber.Trim().ToString() + lastFourDeviceNumber; }
/// <summary> /// 处理调整后明细,加入新条目。 /// </summary> /// <param name="stage"></param> /// <param name="beforeAdjustDetail"></param> /// <param name="afterString"></param> /// <param name="Database"></param> private void processAfterAdjustDetail(Ipms.Server.Business.Adjusts.Adjust adjust, int stage, BeforeAdjustDetail beforeAdjustDetail, string afterString, Server.DataAccess.Database Database) { var afterItems = afterString.Split(new string[] { "#" }, StringSplitOptions.RemoveEmptyEntries); foreach (var afterItem in afterItems) { var afterDetails = afterItem.Split(new string[] { "," }, StringSplitOptions.None); if (afterDetails.Count() != 2) throw new Exception("调整后条目参数不正确!"); else { //设备 var device = Database.ApplyDevices.SingleOrDefault(c => c.ID.ToString() == afterDetails[0].Trim()); //设备数目 var amount = Convert.ToInt32(afterDetails[1].Trim()); //新建调整后条目 var afterAdjustDetail = new AfterAdjustDetail(); afterAdjustDetail.Adjust = adjust; //新建申购条目 MemberApplyItem memberApplyItem = new MemberApplyItem(); memberApplyItem.IsAfterAdjust = true; memberApplyItem.IsBeforeAdjust = false; memberApplyItem.MemberApply = beforeAdjustDetail.ConstructPlanItem.MemberApplyItem.MemberApply; memberApplyItem.ApplyDevice = device; memberApplyItem.LogicDevice = beforeAdjustDetail.ConstructPlanItem.MemberApplyItem.LogicDevice; memberApplyItem.CurrentState = beforeAdjustDetail.ConstructPlanItem.MemberApplyItem.CurrentState; memberApplyItem.Quantity = amount; memberApplyItem.Rank = beforeAdjustDetail.ConstructPlanItem.MemberApplyItem.Rank; memberApplyItem.Applicant = beforeAdjustDetail.ConstructPlanItem.MemberApplyItem.Applicant; memberApplyItem.ApplicantName = beforeAdjustDetail.ConstructPlanItem.MemberApplyItem.ApplicantName; memberApplyItem.PhoneNumber = beforeAdjustDetail.ConstructPlanItem.MemberApplyItem.PhoneNumber; memberApplyItem.Email = beforeAdjustDetail.ConstructPlanItem.MemberApplyItem.Email; memberApplyItem.ModifyTime = System.DateTime.Now; // memberApplyItem.ModifyBy = User; memberApplyItem.Link_url = beforeAdjustDetail.ConstructPlanItem.MemberApplyItem.Link_url; memberApplyItem.IconCls = beforeAdjustDetail.ConstructPlanItem.MemberApplyItem.IconCls; MemberApplyItemStatic newstatic = new MemberApplyItemStatic(); newstatic.Save(Database); memberApplyItem.MemberApplyItemStatic = newstatic; memberApplyItem.Save(Database); //新建建设计划条目 ConstructPlanItem constructPlanItem = new ConstructPlanItem(); constructPlanItem.MemberApplyItem = memberApplyItem; var DeviceNumberString = "TZ" + beforeAdjustDetail.ConstructPlanItem.DeviceNumber + adjust.Count.ToString(); adjust.Count++; adjust.Save(Database); while (Database.ConstructPlanItems.SingleOrDefault(c => c.DeviceNumber == DeviceNumberString) != null) { DeviceNumberString = DeviceNumberString.Substring(0, DeviceNumberString.Length - 2) + (Convert.ToInt16(DeviceNumberString.Substring(DeviceNumberString.Length - 2, 2)) + 1).ToString("00"); } constructPlanItem.DeviceNumber = DeviceNumberString; constructPlanItem.ConstructPlanPackage = beforeAdjustDetail.ConstructPlanItem.ConstructPlanPackage; //预算金额默认为申购单价乘以数量,规则待定 constructPlanItem.BudgetAmount = beforeAdjustDetail.ConstructPlanItem.MemberApplyItem.ApplyDevice.UnitPrice * amount; constructPlanItem.IsBeforeAdjust = false; constructPlanItem.IsAfterAdjust = true; constructPlanItem.Save(Database); afterAdjustDetail.ConstructPlanItem = constructPlanItem; //建设任务之后的阶段时,新建建设任务 if (stage > 0) { ConstructTaskItem constructTaskItem = new ConstructTaskItem(); constructTaskItem.Quantity = amount; constructTaskItem.ConstructTask = beforeAdjustDetail.ConstructTaskItem.ConstructTask; constructTaskItem.ConstructTask.IsSend = false; constructTaskItem.ConstructPlanItem = constructPlanItem; constructTaskItem.IsPurchasePlanItem = false; constructTaskItem.IsBeforeAdjust = false; constructTaskItem.IsAfterAdjust = true; constructTaskItem.Save(Database); afterAdjustDetail.ConstructTaskItem = constructTaskItem; ////采购计划之后的阶段时,新建采购计划 //if (stage > 1) //{ // var purchasePlanItem = new PurchasePlanItem(); // purchasePlanItem.PurchasePlanPackage = beforeAdjustDetail.PurchasePlanItem.PurchasePlanPackage; // purchasePlanItem.ConstructTaskItem = constructTaskItem; // //成员是否确认,默认未确认。可修改 // purchasePlanItem.IsAffirm = false; // purchasePlanItem.IsBeforeAdjust = false; // purchasePlanItem.IsAfterAdjust = true; // purchasePlanItem.Save(Database); // afterAdjustDetail.PurchasePlanItem = purchasePlanItem; // //采购计划之后的阶段时,新建采购计划 // if (stage > 2) // { // //流标的条目下达采购指令 // var purchaseOrderItem = new PurchaseOrderItem(); // purchaseOrderItem.PurchasePlanItem = purchasePlanItem; // purchaseOrderItem.IsAfterAdjust = true; // purchaseOrderItem.PurchaseOrderPackage = Database.PurchaseOrderPackages.SingleOrDefault(c => c.PurchasePlanPackage == beforeAdjustDetail.PurchasePlanItem.PurchasePlanPackage); // purchaseOrderItem.Save(Database); // } //} } afterAdjustDetail.Save(Database); } } }
/// <summary> /// XML序列化成员申购对应的建设任务条目 /// </summary> /// <param name="memberApplyItem"></param> private void adjustQueryByMemberApplyItem(MemberApplyItem memberApplyItem) { var constructPlanItem = Database.ConstructPlanItems.SingleOrDefault(c => c.MemberApplyItem == memberApplyItem); if (constructPlanItem == null) return; else { var constructTaskItemList = Database.ConstructTaskItems.Where(c => c.ConstructPlanItem == constructPlanItem).ToList(); constructTaskItemList = getCanAdjust(constructTaskItemList, Database); if (constructPlanItem.GetAllocatedCount(Database) == memberApplyItem.Quantity) { foreach (var item in constructTaskItemList) item.ShowItemToAdjust(Response, Database); } else { foreach (var item in constructTaskItemList) item.ShowItemToAdjust(Response, Database); showConstructPlanitem(constructPlanItem, Database); } } }
/* 因考虑到审核,该方法不可逆,所以该方法已经不用,分裂成两个方法。 /// <summary> /// 处理调整前已存在记录(标记为已调整,处理受影响的建设计划条目),返回一条调整前记录 /// </summary> /// <param name="stage"></param> /// <param name="beforeAdjustDetailList"></param> /// <param name="Database"></param> /// <returns></returns> private void processBeforeAdjustDetail(int stage, List<BeforeAdjustDetail> beforeAdjustDetailList, Server.DataAccess.Database Database) { if (stage != 3) foreach (var item in beforeAdjustDetailList) { if (stage == 0) { //标记申购条目与建设计划条目为已调整 item.ConstructPlanItem.IsBeforeAdjust = true; item.ConstructPlanItem.Save(Database); item.ConstructPlanItem.MemberApplyItem.IsBeforeAdjust = true; item.ConstructPlanItem.MemberApplyItem.Save(Database); //对与建设计划阶段,如果建设计划条目已有下达的任务,为这部分任务单独生成一条建设计划条目与申购条目,使下达的任务指向它。 if (item.ConstructPlanItem.GetAllocatedCount(Database) > 0) { MemberApplyItem memberApplyItem = new MemberApplyItem(); memberApplyItem.IsAfterAdjust = true; memberApplyItem.IsBeforeAdjust = false; memberApplyItem.MemberApply = item.ConstructPlanItem.MemberApplyItem.MemberApply; memberApplyItem.ApplyDevice = item.ConstructPlanItem.MemberApplyItem.ApplyDevice; memberApplyItem.LogicDevice = item.ConstructPlanItem.MemberApplyItem.LogicDevice; memberApplyItem.CurrentState = item.ConstructPlanItem.MemberApplyItem.CurrentState; memberApplyItem.Quantity = item.ConstructPlanItem.GetAllocatedCount(Database); memberApplyItem.Rank = item.ConstructPlanItem.MemberApplyItem.Rank; memberApplyItem.Applicant = item.ConstructPlanItem.MemberApplyItem.Applicant; memberApplyItem.ApplicantName = item.ConstructPlanItem.MemberApplyItem.ApplicantName; memberApplyItem.PhoneNumber = item.ConstructPlanItem.MemberApplyItem.PhoneNumber; memberApplyItem.Email = item.ConstructPlanItem.MemberApplyItem.Email; memberApplyItem.ModifyTime = System.DateTime.Now; memberApplyItem.ModifyBy = User; memberApplyItem.Link_url = item.ConstructPlanItem.MemberApplyItem.Link_url; memberApplyItem.IconCls = item.ConstructPlanItem.MemberApplyItem.IconCls; memberApplyItem.Save(Database); ConstructPlanItem constructPlanItem = new ConstructPlanItem(); constructPlanItem.MemberApplyItem = memberApplyItem; constructPlanItem.DeviceNumber = item.ConstructPlanItem.DeviceNumber; constructPlanItem.ConstructPlanPackage = item.ConstructPlanItem.ConstructPlanPackage; constructPlanItem.BudgetAmount = item.ConstructPlanItem.BudgetAmount; constructPlanItem.IsBeforeAdjust = false; //这里需要注意,本条是调整时所影响的记录,不是直接调整的对象,也标记为是调整后条目。 constructPlanItem.IsAfterAdjust = true; constructPlanItem.Save(Database); var constructTaskItemList = Database.ConstructTaskItems.Where(c => c.ConstructPlanItem == item.ConstructPlanItem); foreach (var cti in constructTaskItemList) { cti.ConstructPlanItem = constructPlanItem; cti.Save(Database); } } } if (stage == 1 || stage == 2) { item.ConstructTaskItem.IsBeforeAdjust = true; item.ConstructTaskItem.IsAfterAdjust = false; item.ConstructTaskItem.Save(Database); item.ConstructTaskItem.ConstructPlanItem.IsBeforeAdjust = true; item.ConstructTaskItem.ConstructPlanItem.IsAfterAdjust = false; item.ConstructTaskItem.ConstructPlanItem.Save(Database); item.ConstructTaskItem.ConstructPlanItem.MemberApplyItem.IsBeforeAdjust = true; item.ConstructTaskItem.ConstructPlanItem.MemberApplyItem.IsAfterAdjust = false; item.ConstructTaskItem.ConstructPlanItem.MemberApplyItem.Save(Database); //对与建设任务与采购计划阶段,如果对应建设任务数目不等于申购总数,说明申购可能存在其他未下达的设备或者其他建设任务,需要新建一条申购。 //如果对应建设任务数目不等于申购已下达建设任务数目,说明存在其他建设任务,为这部分任务单独生成一条建设计划条目与申购条目,使下达的任务指向它。 if (item.ConstructTaskItem.ConstructPlanItem.MemberApplyItem.Quantity != item.ConstructTaskItem.Quantity) { MemberApplyItem memberApplyItem = new MemberApplyItem(); memberApplyItem.IsAfterAdjust = true; memberApplyItem.IsBeforeAdjust = false; memberApplyItem.MemberApply = item.ConstructPlanItem.MemberApplyItem.MemberApply; memberApplyItem.ApplyDevice = item.ConstructPlanItem.MemberApplyItem.ApplyDevice; memberApplyItem.LogicDevice = item.ConstructPlanItem.MemberApplyItem.LogicDevice; memberApplyItem.CurrentState = item.ConstructPlanItem.MemberApplyItem.CurrentState; memberApplyItem.Quantity = item.ConstructTaskItem.ConstructPlanItem.MemberApplyItem.Quantity - item.ConstructTaskItem.Quantity; memberApplyItem.Rank = item.ConstructPlanItem.MemberApplyItem.Rank; memberApplyItem.Applicant = item.ConstructPlanItem.MemberApplyItem.Applicant; memberApplyItem.ApplicantName = item.ConstructPlanItem.MemberApplyItem.ApplicantName; memberApplyItem.PhoneNumber = item.ConstructPlanItem.MemberApplyItem.PhoneNumber; memberApplyItem.Email = item.ConstructPlanItem.MemberApplyItem.Email; memberApplyItem.ModifyTime = System.DateTime.Now; memberApplyItem.ModifyBy = User; memberApplyItem.Link_url = item.ConstructPlanItem.MemberApplyItem.Link_url; memberApplyItem.IconCls = item.ConstructPlanItem.MemberApplyItem.IconCls; memberApplyItem.Save(Database); ConstructPlanItem constructPlanItem = new ConstructPlanItem(); constructPlanItem.MemberApplyItem = memberApplyItem; constructPlanItem.DeviceNumber = item.ConstructPlanItem.DeviceNumber; constructPlanItem.ConstructPlanPackage = item.ConstructPlanItem.ConstructPlanPackage; constructPlanItem.BudgetAmount = Convert.ToInt32(item.ConstructPlanItem.BudgetAmount * ((item.ConstructTaskItem.Quantity * 1.0) / item.ConstructPlanItem.MemberApplyItem.Quantity)); constructPlanItem.IsBeforeAdjust = false; //这里需要注意,本条是调整时所影响的记录,不是直接调整的对象,也标记为是调整后条目。 constructPlanItem.IsAfterAdjust = true; constructPlanItem.Save(Database); var constructTaskItemList = Database.ConstructTaskItems.Where(c => c.ConstructPlanItem == item.ConstructTaskItem.ConstructPlanItem && c != item.ConstructTaskItem); foreach (var cti in constructTaskItemList) { cti.ConstructPlanItem = constructPlanItem; cti.Save(Database); } } } if (stage == 2) { item.PurchasePlanItem.IsBeforeAdjust = true; item.PurchasePlanItem.IsAfterAdjust = false; item.PurchasePlanItem.Save(Database); } } //对于流标阶段,标记流标结果 if (stage == 3) foreach (var item in beforeAdjustDetailList) { item.BidFailedResultItem.IsBeforeAdjust = true; item.BidFailedResultItem.Save(Database); } } * */ /// <summary> /// 处理调整所影响的任务,为影响的任务新建申购与建设计划,让所影响的任务指向新生成的建设计划。 /// </summary> /// <param name="stage"></param> /// <param name="beforeAdjustDetailList"></param> /// <param name="Database"></param> /// <returns></returns> private void createAdjustInfluencedItemsAndRedirectTaskToNewPlan(int stage, List<BeforeAdjustDetail> beforeAdjustDetailList, Server.DataAccess.Database Database) { if (stage != 3) foreach (var item in beforeAdjustDetailList) { if (stage == 0) { //对与建设计划阶段,如果建设计划条目已有下达的任务,为这部分任务单独生成一条建设计划条目与申购条目,使下达的任务指向它。 if (item.ConstructPlanItem.GetAllocatedCount(Database) > 0) { MemberApplyItem memberApplyItem = new MemberApplyItem(); memberApplyItem.IsAfterAdjust = true; memberApplyItem.IsBeforeAdjust = false; memberApplyItem.MemberApply = item.ConstructPlanItem.MemberApplyItem.MemberApply; memberApplyItem.ApplyDevice = item.ConstructPlanItem.MemberApplyItem.ApplyDevice; memberApplyItem.LogicDevice = item.ConstructPlanItem.MemberApplyItem.LogicDevice; memberApplyItem.CurrentState = item.ConstructPlanItem.MemberApplyItem.CurrentState; memberApplyItem.Quantity = item.ConstructPlanItem.GetAllocatedCount(Database); memberApplyItem.Rank = item.ConstructPlanItem.MemberApplyItem.Rank; memberApplyItem.Applicant = item.ConstructPlanItem.MemberApplyItem.Applicant; memberApplyItem.ApplicantName = item.ConstructPlanItem.MemberApplyItem.ApplicantName; memberApplyItem.PhoneNumber = item.ConstructPlanItem.MemberApplyItem.PhoneNumber; memberApplyItem.Email = item.ConstructPlanItem.MemberApplyItem.Email; memberApplyItem.ModifyTime = System.DateTime.Now; memberApplyItem.ModifyBy = User; memberApplyItem.Link_url = item.ConstructPlanItem.MemberApplyItem.Link_url; memberApplyItem.IconCls = item.ConstructPlanItem.MemberApplyItem.IconCls; memberApplyItem.Save(Database); ConstructPlanItem constructPlanItem = new ConstructPlanItem(); constructPlanItem.MemberApplyItem = memberApplyItem; constructPlanItem.DeviceNumber = item.ConstructPlanItem.DeviceNumber; constructPlanItem.ConstructPlanPackage = item.ConstructPlanItem.ConstructPlanPackage; constructPlanItem.BudgetAmount = item.ConstructPlanItem.BudgetAmount; constructPlanItem.IsBeforeAdjust = false; //这里需要注意,本条是调整时所影响的记录,不是直接调整的对象,也标记为是调整后条目。 constructPlanItem.IsAfterAdjust = true; constructPlanItem.Save(Database); var constructTaskItemList = Database.ConstructTaskItems.Where(c => c.ConstructPlanItem == item.ConstructPlanItem); foreach (var cti in constructTaskItemList) { cti.ConstructPlanItem = constructPlanItem; cti.Save(Database); } } } if (stage == 1 || stage == 2) { item.ConstructTaskItem.IsBeforeAdjust = true; item.ConstructTaskItem.IsAfterAdjust = false; item.ConstructTaskItem.Save(Database); item.ConstructTaskItem.ConstructPlanItem.IsBeforeAdjust = true; item.ConstructTaskItem.ConstructPlanItem.IsAfterAdjust = false; item.ConstructTaskItem.ConstructPlanItem.Save(Database); item.ConstructTaskItem.ConstructPlanItem.MemberApplyItem.IsBeforeAdjust = true; item.ConstructTaskItem.ConstructPlanItem.MemberApplyItem.IsAfterAdjust = false; item.ConstructTaskItem.ConstructPlanItem.MemberApplyItem.Save(Database); //对与建设任务与采购计划阶段,如果对应建设任务数目不等于申购总数,说明申购可能存在其他未下达的设备或者其他建设任务,需要新建一条申购。 //如果对应建设任务数目不等于申购已下达建设任务数目,说明存在其他建设任务,为这部分任务单独生成一条建设计划条目与申购条目,使下达的任务指向它。 if (item.ConstructTaskItem.ConstructPlanItem.MemberApplyItem.Quantity != item.ConstructTaskItem.Quantity) { MemberApplyItem memberApplyItem = new MemberApplyItem(); memberApplyItem.IsAfterAdjust = true; memberApplyItem.IsBeforeAdjust = false; memberApplyItem.MemberApply = item.ConstructPlanItem.MemberApplyItem.MemberApply; memberApplyItem.ApplyDevice = item.ConstructPlanItem.MemberApplyItem.ApplyDevice; memberApplyItem.LogicDevice = item.ConstructPlanItem.MemberApplyItem.LogicDevice; memberApplyItem.CurrentState = item.ConstructPlanItem.MemberApplyItem.CurrentState; memberApplyItem.Quantity = item.ConstructTaskItem.ConstructPlanItem.MemberApplyItem.Quantity - item.ConstructTaskItem.Quantity; memberApplyItem.Rank = item.ConstructPlanItem.MemberApplyItem.Rank; memberApplyItem.Applicant = item.ConstructPlanItem.MemberApplyItem.Applicant; memberApplyItem.ApplicantName = item.ConstructPlanItem.MemberApplyItem.ApplicantName; memberApplyItem.PhoneNumber = item.ConstructPlanItem.MemberApplyItem.PhoneNumber; memberApplyItem.Email = item.ConstructPlanItem.MemberApplyItem.Email; memberApplyItem.ModifyTime = System.DateTime.Now; memberApplyItem.ModifyBy = User; memberApplyItem.Link_url = item.ConstructPlanItem.MemberApplyItem.Link_url; memberApplyItem.IconCls = item.ConstructPlanItem.MemberApplyItem.IconCls; memberApplyItem.Save(Database); ConstructPlanItem constructPlanItem = new ConstructPlanItem(); constructPlanItem.MemberApplyItem = memberApplyItem; constructPlanItem.DeviceNumber = item.ConstructPlanItem.DeviceNumber; constructPlanItem.ConstructPlanPackage = item.ConstructPlanItem.ConstructPlanPackage; constructPlanItem.BudgetAmount = Convert.ToInt32(item.ConstructPlanItem.BudgetAmount * ((item.ConstructTaskItem.Quantity * 1.0) / item.ConstructPlanItem.MemberApplyItem.Quantity)); constructPlanItem.IsBeforeAdjust = false; //这里需要注意,本条是调整时所影响的记录,不是直接调整的对象,也标记为是调整后条目。 constructPlanItem.IsAfterAdjust = true; constructPlanItem.Save(Database); var constructTaskItemList = Database.ConstructTaskItems.Where(c => c.ConstructPlanItem == item.ConstructTaskItem.ConstructPlanItem && c != item.ConstructTaskItem); foreach (var cti in constructTaskItemList) { cti.ConstructPlanItem = constructPlanItem; cti.Save(Database); } } } } }
private static MemberApplyItem getExpertApplyItem(this HttpRequest request, IDatabase database) { var id = request.GetInt("id"); if (id.HasValue) return database.MemberApplyItems.GetByID(id.Value); var expertApplyItem = new MemberApplyItem(); return expertApplyItem; }