protected override void OnFlowEnd(T_EXE_TaskWorkSettlement entity, Workflow.Logic.Domain.S_WF_InsTaskExec taskExec, Workflow.Logic.Domain.S_WF_InsDefRouting routing) { var enumService = FormulaHelper.GetService <IEnumService>(); //base.OnFlowEnd(entity, taskExec, routing); var detaillist = entity.T_EXE_TaskWorkSettlement_TaskWorkList.ToList(); var budgetids = detaillist.Select(a => a.BudgetID).ToList(); var budgetList = this.BusinessEntities.Set <S_C_CBS_Budget>().Where(a => budgetids.Contains(a.ID)).ToList(); var taskList = this.BusinessEntities.Set <S_W_TaskWork>().Where(a => budgetids.Contains(a.ID)).ToList(); var nodeType = CBSNodeType.Root.ToString(); var rootCBS = this.BusinessEntities.Set <S_C_CBS>().FirstOrDefault(a => a.ProjectInfoID == entity.ProjectInfo && a.NodeType == nodeType); foreach (var detail in detaillist) { var budget = budgetList.FirstOrDefault(a => a.ID == detail.BudgetID); var task = taskList.FirstOrDefault(a => a.ID == budget.ID); var taskRoleRateList = task.S_W_TaskWork_RoleRate.ToList(); //校验预算不能超过 var settlement = Convert.ToDecimal(detail.Settlement); decimal remain = Convert.ToDecimal(budget.Quantity) - Convert.ToDecimal(budget.SummaryCostQuantity); if (settlement > remain) { throw new Formula.Exceptions.BusinessException("卷册【" + budget.Name + "】的本次结算工时不能大于可结算工时"); } //分配人员工时 var n = 0; var sumQuantity = 0m; var roleBudgets = budget.Children.Where(a => a.Quantity.HasValue && a.Quantity.Value != 0).ToList(); foreach (var roleBudget in roleBudgets) { n++; var cost = new S_C_CBS_Cost(); cost.Code = roleBudget.Code; cost.Name = roleBudget.Name; //获取角色人员 var rbs = task.S_W_WBS.GetUser(roleBudget.Code); if (rbs != null) { cost.CostUser = rbs.UserID; cost.CostUserName = rbs.UserName; var userinfo = FormulaHelper.GetUserInfoByID(cost.CostUser); if (userinfo != null) { cost.UserDept = userinfo.UserOrgID; cost.UserDeptName = userinfo.UserOrgName; } } //获取角色比例,计算人员结算工时 if (n == roleBudgets.Count) { cost.Quantity = Convert.ToDecimal(detail.Settlement) - sumQuantity; } else { var rate = 0m; var roleRate = taskRoleRateList.FirstOrDefault(a => a.Role == roleBudget.Code); if (roleRate != null && roleRate.Rate.HasValue) { rate = roleRate.Rate.Value; } cost.Quantity = Math.Round(Convert.ToDecimal(detail.Settlement) * rate / 100, 2); sumQuantity += cost.Quantity.Value; } cost.BelongDept = entity.BelongDept; cost.BelongDeptName = entity.BelongDeptName; var costDate = DateTime.Now; if (entity.BelongDate.HasValue) { costDate = entity.BelongDate.Value; } cost.BelongYear = costDate.Year; cost.BelongQuarter = (costDate.Month - 1) / 3 + 1; cost.BelongMonth = costDate.Month; cost.CostDate = costDate; cost.MajorCode = detail.Major; cost.MajorName = enumService.GetEnumText("Project.Major", detail.Major); cost.TaskWorkCode = budget.Code; cost.TaskWorkName = budget.Name; cost.RoleCode = roleBudget.Code; cost.RoleName = roleBudget.Name; cost.FormID = entity.ID; if (cost.Quantity.HasValue && cost.UnitPrice.HasValue) { cost.TotalValue = cost.Quantity.Value * cost.UnitPrice.Value; } roleBudget.AddCost(cost); } //同步卷册分配数据 budget.SummaryCost(); task.WorkloadFinish = budget.SummaryCostQuantity; //卷册完成 if (task.WorkloadFinish >= task.Workload) { task.Finish(); } } this.BusinessEntities.SaveChanges(); rootCBS.Ansestors.FirstOrDefault(a => a.NodeType == CBSNodeType.Root.ToString()).SummaryCost(); this.BusinessEntities.SaveChanges(); }
protected override void OnFlowEnd(T_EXE_ManageWorkloadSettlement entity, Workflow.Logic.Domain.S_WF_InsTaskExec taskExec, Workflow.Logic.Domain.S_WF_InsDefRouting routing) { var detaillist = entity.T_EXE_ManageWorkloadSettlement_ManageWorkloadList.ToList(); var cbsids = detaillist.Select(a => a.CBSID).ToList(); var cbsList = this.BusinessEntities.Set <S_C_CBS>().Where(a => cbsids.Contains(a.ID)).ToList(); var nodeType = CBSNodeType.Root.ToString(); var rootCBS = this.BusinessEntities.Set <S_C_CBS>().FirstOrDefault(a => a.ProjectInfoID == entity.ProjectInfo && a.NodeType == nodeType); var codes = detaillist.Select(a => a.Code).ToList(); var obsList = this.BusinessEntities.Set <S_W_OBSUser>().Where(a => codes.Contains(a.RoleCode)).Select(a => new { a.RoleCode, a.RoleName, a.UserID }).Distinct().ToList(); foreach (var detail in detaillist) { var cbs = cbsList.FirstOrDefault(a => a.ID == detail.CBSID); //结算人员的管理工时 if (string.IsNullOrEmpty(detail.DetailJson)) { continue; } if (Convert.ToDecimal(detail.Settlement) == 0) { continue; } var userList = JsonHelper.ToObject <List <Dictionary <string, string> > >(detail.DetailJson); foreach (var userItem in userList) { var settlement = 0m; if (!string.IsNullOrEmpty(userItem.GetValue("UserWorkload"))) { settlement = Convert.ToDecimal(userItem.GetValue("UserWorkload")); } if (settlement == 0) { continue; } var cost = new S_C_CBS_Cost(); cost.Code = detail.Code; cost.Name = detail.Name; cost.Quantity = settlement; cost.CostUser = userItem.GetValue("UserID"); cost.CostUserName = userItem.GetValue("UserName"); var userinfo = FormulaHelper.GetUserInfoByID(cost.CostUser); if (userinfo != null) { cost.UserDept = userinfo.UserOrgID; cost.UserDeptName = userinfo.UserOrgName; } cost.BelongDept = entity.BelongDept; cost.BelongDeptName = entity.BelongDeptName; var costDate = DateTime.Now; if (entity.BelongDate.HasValue) { costDate = entity.BelongDate.Value; } cost.BelongYear = costDate.Year; cost.BelongQuarter = (costDate.Month - 1) / 3 + 1; cost.BelongMonth = costDate.Month; cost.CostDate = costDate; var obs = obsList.FirstOrDefault(a => a.UserID == cost.CostUser && a.RoleCode == cost.Code); if (obs != null) { cost.RoleCode = obs.RoleCode; cost.RoleName = obs.RoleName; } cost.FormID = entity.ID; cbs.AddCost(cost); if (cost.Quantity.HasValue && cost.UnitPrice.HasValue) { cost.TotalValue = cost.Quantity.Value * cost.UnitPrice.Value; } } } this.BusinessEntities.SaveChanges(); rootCBS.Ansestors.FirstOrDefault(a => a.NodeType == CBSNodeType.Root.ToString()).SummaryCost(); this.BusinessEntities.SaveChanges(); }