diff --git a/src/main/java/cn/palmte/work/bean/FinalBean.java b/src/main/java/cn/palmte/work/bean/FinalBean.java index 1f25154..7107297 100644 --- a/src/main/java/cn/palmte/work/bean/FinalBean.java +++ b/src/main/java/cn/palmte/work/bean/FinalBean.java @@ -133,31 +133,86 @@ public class FinalBean { */ private BigDecimal grossProfitFinalTotal; + public BigDecimal getGrossProfitFinalTotal() { + BigDecimal incomeTotal = getIncomeTotal(); + BigDecimal costTotal = getCostTotal(); + BigDecimal costExpropriationFinalTotal = getCostExpropriationFinalTotal(); + return incomeTotal.subtract(costTotal).subtract(costExpropriationFinalTotal); + } + + public void setGrossProfitFinalTotal(BigDecimal grossProfitFinalTotal) { + this.grossProfitFinalTotal = grossProfitFinalTotal; + } + /** * 项目毛利利润率 */ private BigDecimal grossProfitProfitMargin; + public BigDecimal getGrossProfitProfitMargin() { + return grossProfitProfitMargin; + } + + public void setGrossProfitProfitMargin(BigDecimal grossProfitProfitMargin) { + this.grossProfitProfitMargin = grossProfitProfitMargin; + } + /** * 项目贡献利润决算总额 */ private BigDecimal contributionMarginFinalTotal; + public BigDecimal getContributionMarginFinalTotal() { + BigDecimal grossProfitFinalTotal = getGrossProfitFinalTotal(); + BigDecimal costCompanyManageFinalTotal = getCostCompanyManageFinalTotal(); + return grossProfitFinalTotal.subtract(costCompanyManageFinalTotal); + } + + public void setContributionMarginFinalTotal(BigDecimal contributionMarginFinalTotal) { + this.contributionMarginFinalTotal = contributionMarginFinalTotal; + } + /** * 项目贡献利润利润率 */ private BigDecimal contributionMarginProfitMargin; + public BigDecimal getContributionMarginProfitMargin() { + return contributionMarginProfitMargin; + } + + public void setContributionMarginProfitMargin(BigDecimal contributionMarginProfitMargin) { + this.contributionMarginProfitMargin = contributionMarginProfitMargin; + } + /** * 项目净利润决算总额 */ private BigDecimal netMarginFinalTotal; + public BigDecimal getNetMarginFinalTotal() { + BigDecimal contributionMarginFinalTotal = getContributionMarginFinalTotal(); + BigDecimal costIncomeTaxFinalTotal = getCostIncomeTaxFinalTotal(); + return contributionMarginFinalTotal.subtract(costIncomeTaxFinalTotal); + } + + public void setNetMarginFinalTotal(BigDecimal netMarginFinalTotal) { + this.netMarginFinalTotal = netMarginFinalTotal; + } + /** * 项目净利润利润率 */ private BigDecimal netMarginProfitMargin; + public BigDecimal getNetMarginProfitMargin() { + return netMarginProfitMargin; + } + + public void setNetMarginProfitMargin(BigDecimal netMarginProfitMargin) { + this.netMarginProfitMargin = netMarginProfitMargin; + } + //========================结算现金流量表================================ /** @@ -189,6 +244,28 @@ public class FinalBean { * g=a+c+b-d-f-e */ private BigDecimal netCashFlow; + + public BigDecimal getNetCashFlow() { + + BigDecimal saleIncomeCash = getSaleIncomeCash(); + BigDecimal taxReturn = getTaxReturn(); + BigDecimal earnestMoneyIncome = getEarnestMoneyIncome(); + BigDecimal purchaseCost = getPurchaseCost(); + BigDecimal taxCost = getTaxCost(); + BigDecimal earnestMoneyCost = getEarnestMoneyCost(); + + return saleIncomeCash + .add(taxReturn) + .add(earnestMoneyIncome) + .subtract(purchaseCost) + .subtract(taxCost) + .subtract(earnestMoneyCost); + } + + public void setNetCashFlow(BigDecimal netCashFlow) { + this.netCashFlow = netCashFlow; + } + /** * h投资活动现金流入 */ @@ -214,12 +291,36 @@ public class FinalBean { * m=k-l */ private BigDecimal financingCapitalCashflow; + + public BigDecimal getFinancingCapitalCashflow() { + BigDecimal financingCapitalInflow = getFinancingCapitalInflow(); + BigDecimal financingCapitalOutflow = getFinancingCapitalOutflow(); + return financingCapitalInflow.subtract(financingCapitalOutflow); + } + + public void setFinancingCapitalCashflow(BigDecimal financingCapitalCashflow) { + this.financingCapitalCashflow = financingCapitalCashflow; + } + /** * n货币资金净增加额 * n=g+j+m */ private BigDecimal netIncreaseMonetaryFunds; + public BigDecimal getNetIncreaseMonetaryFunds() { + BigDecimal netCashFlow = getNetCashFlow(); + BigDecimal netCashFromInvestingActivities = getNetCashFromInvestingActivities(); + BigDecimal financingCapitalCashflow = getFinancingCapitalCashflow(); + return netCashFlow + .add(netCashFromInvestingActivities) + .add(financingCapitalCashflow); + } + + public void setNetIncreaseMonetaryFunds(BigDecimal netIncreaseMonetaryFunds) { + this.netIncreaseMonetaryFunds = netIncreaseMonetaryFunds; + } + /** * 获取所有现金流量决算总额 * @return @@ -349,54 +450,6 @@ public class FinalBean { this.costIncomeTaxFinalTotal = costIncomeTaxFinalTotal; } - public BigDecimal getGrossProfitFinalTotal() { - return grossProfitFinalTotal; - } - - public void setGrossProfitFinalTotal(BigDecimal grossProfitFinalTotal) { - this.grossProfitFinalTotal = grossProfitFinalTotal; - } - - public BigDecimal getGrossProfitProfitMargin() { - return grossProfitProfitMargin; - } - - public void setGrossProfitProfitMargin(BigDecimal grossProfitProfitMargin) { - this.grossProfitProfitMargin = grossProfitProfitMargin; - } - - public BigDecimal getContributionMarginFinalTotal() { - return contributionMarginFinalTotal; - } - - public void setContributionMarginFinalTotal(BigDecimal contributionMarginFinalTotal) { - this.contributionMarginFinalTotal = contributionMarginFinalTotal; - } - - public BigDecimal getContributionMarginProfitMargin() { - return contributionMarginProfitMargin; - } - - public void setContributionMarginProfitMargin(BigDecimal contributionMarginProfitMargin) { - this.contributionMarginProfitMargin = contributionMarginProfitMargin; - } - - public BigDecimal getNetMarginFinalTotal() { - return netMarginFinalTotal; - } - - public void setNetMarginFinalTotal(BigDecimal netMarginFinalTotal) { - this.netMarginFinalTotal = netMarginFinalTotal; - } - - public BigDecimal getNetMarginProfitMargin() { - return netMarginProfitMargin; - } - - public void setNetMarginProfitMargin(BigDecimal netMarginProfitMargin) { - this.netMarginProfitMargin = netMarginProfitMargin; - } - public BigDecimal getSaleIncomeCash() { return saleIncomeCash; } @@ -485,27 +538,5 @@ public class FinalBean { this.financingCapitalOutflow = financingCapitalOutflow; } - public BigDecimal getFinancingCapitalCashflow() { - return financingCapitalCashflow; - } - public void setFinancingCapitalCashflow(BigDecimal financingCapitalCashflow) { - this.financingCapitalCashflow = financingCapitalCashflow; - } - - public BigDecimal getNetIncreaseMonetaryFunds() { - return netIncreaseMonetaryFunds; - } - - public void setNetIncreaseMonetaryFunds(BigDecimal netIncreaseMonetaryFunds) { - this.netIncreaseMonetaryFunds = netIncreaseMonetaryFunds; - } - - public BigDecimal getNetCashFlow() { - return netCashFlow; - } - - public void setNetCashFlow(BigDecimal netCashFlow) { - this.netCashFlow = netCashFlow; - } } diff --git a/src/main/java/cn/palmte/work/controller/backend/HumanCostController.java b/src/main/java/cn/palmte/work/controller/backend/HumanCostController.java index c53a5c0..138c9da 100644 --- a/src/main/java/cn/palmte/work/controller/backend/HumanCostController.java +++ b/src/main/java/cn/palmte/work/controller/backend/HumanCostController.java @@ -58,14 +58,14 @@ public class HumanCostController extends BaseController{ Map model) { //当前登录人的角色类型 Admin admin = getAdmin(); - int roleId = admin.getRoleId(); + int roleLevel = admin.getRoleLevel(); List selfProjects = projectRepository.findByCreator(admin.getId(), new Date()); - if (roleId <= 18) { + if (roleLevel <= 2 || roleLevel == 4) { model.put("deptVary", 1); model.put("deptList", deptRepository.findAll()); model.put("projectList", projectRepository.findAll()); model.put("showSalary", 1); - } else if (roleId <= 20) { + } else if (roleLevel == 3) { model.put("deptVary", -1); model.put("deptList", new ArrayList<>()); model.put("projectList", projectRepository.findByDeptId(admin.getDeptId())); @@ -140,14 +140,12 @@ public class HumanCostController extends BaseController{ */ @RequestMapping("/template") public void importTemplate(HttpServletResponse response) throws IOException { - String[] headers = new String[]{"项目名称", "人员1", "人员2"}; String[] columns = new String[]{""}; downloadHeader(response , Utils.generateExcelName("人力成本导入模板")); - ExportUtils exportUtils = new ExportUtils(headers); List data = new ArrayList<>(); data.add("成本"); - data.add("项目1"); - data.add("项目2"); + String[] headers = humanCostService.template(data); + ExportUtils exportUtils = new ExportUtils(headers); exportUtils.exportTemplate(columns , data, "yyyy-MM-dd HH:mm:ss" , 1); exportUtils.write(response.getOutputStream()); } diff --git a/src/main/java/cn/palmte/work/controller/backend/ProjectController.java b/src/main/java/cn/palmte/work/controller/backend/ProjectController.java index bb88a54..2f73c9f 100644 --- a/src/main/java/cn/palmte/work/controller/backend/ProjectController.java +++ b/src/main/java/cn/palmte/work/controller/backend/ProjectController.java @@ -376,6 +376,7 @@ public class ProjectController extends BaseController { Project project = projectService.getProject(id); EstimateBean estimateBean = projectEstimateService.getEstimate(project); model.put("estimateBean", estimateBean); + model.put("adminId", InterfaceUtil.getAdminId()); model.put("project", project); model.put("formerBean", projectSettleService.getFormerSettle(project, time)); model.put("monthBean", projectSettleService.getMonthSettle(project, time)); @@ -403,6 +404,8 @@ public class ProjectController extends BaseController { model.put("finalBean", projectFinalSevice.getFinal(project)); //freemarker可以利用的静态方法 model.put("Utils", FreeMarkerUtil.fromStaticPackage("cn.palmte.work.utils.Utils")); + List list = projectTaskRecordService.list(id); + model.put("taskRecords", list); return "admin/project_approve"; } diff --git a/src/main/java/cn/palmte/work/controller/backend/ProjectFinalController.java b/src/main/java/cn/palmte/work/controller/backend/ProjectFinalController.java index 5ca80ab..85fdcbb 100644 --- a/src/main/java/cn/palmte/work/controller/backend/ProjectFinalController.java +++ b/src/main/java/cn/palmte/work/controller/backend/ProjectFinalController.java @@ -42,7 +42,11 @@ public class ProjectFinalController extends BaseController{ public String add(@RequestParam("id") int id, Map model) { Project project = projectService.getProject(id); ProjectSettleIncome projectSettleIncome = projectSettleIncomeRepository.findNewByProjectId(id); - String time = projectSettleIncome.getTime(); + String time = ""; + if(null != projectSettleIncome){ + time = projectSettleIncome.getTime(); + } + List projectBudgetPlanDetails = projectBudgetService.getProjectBudgetPlanDetails(project); model.put("project", project); model.put("estimateBean", projectEstimateService.getEstimate(project)); diff --git a/src/main/java/cn/palmte/work/controller/backend/ProjectSettleController.java b/src/main/java/cn/palmte/work/controller/backend/ProjectSettleController.java index 30ffea0..53b6646 100644 --- a/src/main/java/cn/palmte/work/controller/backend/ProjectSettleController.java +++ b/src/main/java/cn/palmte/work/controller/backend/ProjectSettleController.java @@ -4,10 +4,7 @@ import cn.palmte.work.bean.BudgetSettleBean; import cn.palmte.work.bean.EstimateSettleBean; import cn.palmte.work.bean.FormerBean; import cn.palmte.work.bean.SettleBean; -import cn.palmte.work.model.Project; -import cn.palmte.work.model.ProjectBudgetPlanDetail; -import cn.palmte.work.model.ProjectSettleIncome; -import cn.palmte.work.model.ProjectSettleIncomeRepository; +import cn.palmte.work.model.*; import cn.palmte.work.service.ProjectBudgetService; import cn.palmte.work.service.ProjectEstimateService; import cn.palmte.work.service.ProjectService; @@ -18,7 +15,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; +import top.jfunc.common.utils.CollectionUtil; +import java.math.BigDecimal; import java.util.Calendar; import java.util.Date; import java.util.List; @@ -48,8 +47,12 @@ public class ProjectSettleController extends BaseController{ @Autowired private ProjectSettleIncomeRepository projectSettleIncomeRepository; + @Autowired + private ProjectUserTimeRepository projectUserTimeRepository; + @RequestMapping("/add") public String add(@RequestParam("id") int id, Map model) { + String time = null; Project project = projectService.getProject(id); List projectBudgetPlanDetails = projectBudgetService.getProjectBudgetPlanDetails(project); ProjectSettleIncome projectSettleIncome = projectSettleIncomeRepository.findNewByProjectId(id); @@ -60,11 +63,11 @@ public class ProjectSettleController extends BaseController{ instance.setTime(date); instance.set(Calendar.MONTH, instance.get(Calendar.MONTH) + 1); Date current = instance.getTime(); - String time = DateKit.toStr(current, DateKit.DATE_FORMAT_YEAR_MONTH2); + time = DateKit.toStr(current, DateKit.DATE_FORMAT_YEAR_MONTH2); model.put("time", time); model.put("formerBean", projectSettleService.getFormerSettle(project, time)); } else { - String time = DateKit.toStr(project.getStartDate(), DateKit.DATE_FORMAT_YEAR_MONTH2); + time = DateKit.toStr(project.getStartDate(), DateKit.DATE_FORMAT_YEAR_MONTH2); model.put("time", time); model.put("formerBean", new FormerBean()); @@ -73,7 +76,13 @@ public class ProjectSettleController extends BaseController{ model.put("project", project); model.put("estimateBean", projectEstimateService.getEstimate(project)); model.put("budgetBean", projectBudgetService.getBudget(project)); - + List projectUserTimes = projectUserTimeRepository.findByProjectIdAndTime(project.getId(), time); + if(CollectionUtil.isNotEmpty(projectUserTimes)){ + BigDecimal result = projectUserTimes.stream().map((ProjectUserTime t) -> t.getUserCost().multiply(t.getUserSalary())).reduce(BigDecimal.ZERO, BigDecimal::add); + model.put("salary", result); + } else { + model.put("salary", new BigDecimal(0)); + } //现金表 model.put("cashFlowBean", projectBudgetService.getCashFlowBean(project, projectBudgetPlanDetails)); //freemarker可以利用的静态方法 @@ -94,6 +103,13 @@ public class ProjectSettleController extends BaseController{ model.put("formerBean", projectSettleService.getFormerSettle(project, time)); model.put("monthBean", projectSettleService.getMonthSettle(project, time)); model.put("currentBean", projectSettleService.getCurrentSettle(project, time)); + List projectUserTimes = projectUserTimeRepository.findByProjectIdAndTime(project.getId(), time); + if(CollectionUtil.isNotEmpty(projectUserTimes)){ + BigDecimal result = projectUserTimes.stream().map((ProjectUserTime t) -> t.getUserCost().multiply(t.getUserSalary())).reduce(BigDecimal.ZERO, BigDecimal::add); + model.put("salary", result); + } else { + model.put("salary", new BigDecimal(0)); + } //现金表 model.put("cashFlowBean", projectBudgetService.getCashFlowBean(project, projectBudgetPlanDetails)); //freemarker可以利用的静态方法 diff --git a/src/main/java/cn/palmte/work/controller/backend/ProjectSummaryController.java b/src/main/java/cn/palmte/work/controller/backend/ProjectSummaryController.java index 95667a1..07de543 100644 --- a/src/main/java/cn/palmte/work/controller/backend/ProjectSummaryController.java +++ b/src/main/java/cn/palmte/work/controller/backend/ProjectSummaryController.java @@ -53,8 +53,7 @@ public class ProjectSummaryController extends BaseController { } else { time = searchInfo.get("time"); } - - List list = projectSummaryService.getList(searchInfo, time); + List list = projectSummaryService.getList(searchInfo, time, admin); model.put("pager", list); return "admin/project_statistics"; diff --git a/src/main/java/cn/palmte/work/model/ProjectUserTimeRepository.java b/src/main/java/cn/palmte/work/model/ProjectUserTimeRepository.java index d809216..4c642d3 100644 --- a/src/main/java/cn/palmte/work/model/ProjectUserTimeRepository.java +++ b/src/main/java/cn/palmte/work/model/ProjectUserTimeRepository.java @@ -5,6 +5,7 @@ import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.transaction.annotation.Transactional; +import java.math.BigDecimal; import java.util.List; /** @@ -20,6 +21,9 @@ public interface ProjectUserTimeRepository extends JpaRepository findAllByTime(String time); + @Query(value = "select * from project_user_time where project_id = ?1 and time = ?2", nativeQuery = true) + List findByProjectIdAndTime(int projectId, String time); + @Modifying @Query(value = "delete from project_user_time where time = ?1", nativeQuery = true) int deleteByTime(String date); diff --git a/src/main/java/cn/palmte/work/service/ActProcInsService.java b/src/main/java/cn/palmte/work/service/ActProcInsService.java index 78cd47d..944d33b 100644 --- a/src/main/java/cn/palmte/work/service/ActProcInsService.java +++ b/src/main/java/cn/palmte/work/service/ActProcInsService.java @@ -163,39 +163,49 @@ public class ActProcInsService { public void createProcInsPng(HttpServletResponse response, String procInsId) throws IOException { try { - //获取历史流程实例 - HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(procInsId).singleResult(); + HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(procInsId).singleResult(); //获取历史流程实例 //获取流程中已经执行的节点,按照执行先后顺序排序 List hai = historyService.createHistoricActivityInstanceQuery().processInstanceId(procInsId).orderByHistoricActivityInstanceStartTime().asc().list(); - //开始和结束事件 - List startEndEventList = new ArrayList<>(); - List activityInstanceList = new ArrayList<>(); - - if (hai != null && !hai.isEmpty()) { - for (HistoricActivityInstance historicActivityInstance : hai) { + // 历史流程节点中 + List newHisActInstanceList = new ArrayList(); + List newHisTaskInstanceList = new ArrayList(); + if (hai != null && hai.size() > 0) { + for (int i = 0; i < hai.size(); i++) { + HistoricActivityInstance historicActivityInstance = hai.get(i); String activityType = historicActivityInstance.getActivityType(); - if (activityType.equals("startEvent") || activityType.equals("endEvent")) { - startEndEventList.add(historicActivityInstance); + newHisActInstanceList.add(historicActivityInstance); } else if (activityType.equals("serviceTask") || activityType.equals("userTask") || activityType.equals("exclusiveGateway") || activityType.equals("parallelGateway")) { - List collect = activityInstanceList.stream().map(HistoricActivityInstance::getActivityId).collect(Collectors.toList()); - if (collect.contains(historicActivityInstance.getActivityId())) { - //情况已经执行任务 处理驳回的情况 - activityInstanceList.clear(); + if (newHisTaskInstanceList.size() > 0) { + for (int j = 0; j < newHisTaskInstanceList.size(); j++) { + HistoricActivityInstance historicTaskInstance = newHisTaskInstanceList.get(j); + if (historicTaskInstance.getActivityId().equals(historicActivityInstance.getActivityId())) { //如果列表中已包括 + newHisTaskInstanceList.clear(); + newHisTaskInstanceList.add(historicActivityInstance); + break; + } else { + newHisTaskInstanceList.add(historicActivityInstance); + break; + } + } + } else { + newHisTaskInstanceList.add(historicActivityInstance); } - - activityInstanceList.add(historicActivityInstance); } } } + for (int i = 0; i < newHisActInstanceList.size(); i++) { + HistoricActivityInstance historicActivityInstance = newHisActInstanceList.get(i); + newHisTaskInstanceList.add(historicActivityInstance); + } - activityInstanceList.addAll(startEndEventList); - + List executedActivityIdList = new ArrayList(); // 构造已执行的节点ID集合 + for (HistoricActivityInstance activityInstance : newHisTaskInstanceList) { + executedActivityIdList.add(activityInstance.getActivityId()); + } BpmnModel bpmnModel = repositoryService.getBpmnModel(historicProcessInstance.getProcessDefinitionId()); // 获取bpmnModel - List flowIds = this.getExecutedFlows(bpmnModel, activityInstanceList); // 获取流程已发生流转的线ID集合 - - List idList = activityInstanceList.stream().map(HistoricActivityInstance::getActivityId).collect(Collectors.toList()); - actUtil.responsePng(response, bpmnModel, idList, flowIds); + List flowIds = this.getExecutedFlows(bpmnModel, newHisTaskInstanceList); // 获取流程已发生流转的线ID集合 + actUtil.responsePng(response, bpmnModel, executedActivityIdList, flowIds); } catch (Exception e) { logger.error("an exception happens in try catch statement", e); } @@ -203,31 +213,35 @@ public class ActProcInsService { } public List getExecutedFlows(BpmnModel bpmnModel, List historicActivityInstances) { - List flowIdList = new ArrayList(); //流转线ID集合 + List flowIdList = new ArrayList(); //流转线ID集合 List historicFlowNodeList = new LinkedList(); //全部活动实例 List finishedActivityInstanceList = new LinkedList(); //已完成的历史活动节点 List list = new ArrayList(); - Process mainProcess = bpmnModel.getMainProcess(); for (HistoricActivityInstance historicActivityInstance : historicActivityInstances) { - FlowNode flowElement = (FlowNode) mainProcess.getFlowElement(historicActivityInstance.getActivityId(), true); - historicFlowNodeList.add(flowElement); - + historicFlowNodeList.add((FlowNode) bpmnModel.getMainProcess().getFlowElement(historicActivityInstance.getActivityId(), true)); if (historicActivityInstance.getEndTime() != null) { finishedActivityInstanceList.add(historicActivityInstance); } + } + for (int x = 0; x < historicActivityInstances.size(); x++) { + HistoricActivityInstance historicActivityInstance = historicActivityInstances.get(x); + String activityType = historicActivityInstance.getActivityType(); String activityId = historicActivityInstance.getActivityId(); - if (!list.contains(activityId)) { + if (!list.contains(activityId) && ("userTask".equals(activityType) + || "serviceTask".equals(activityType) + || "endEvent".equals(activityType) + || "exclusiveGateway".equals(activityType) + || "parallelGateway".equals(activityType))) { list.add(activityId); } } - /**遍历已完成的活动实例,从每个实例的outgoingFlows中找到已执行的*/ FlowNode currentFlowNode = null; for (HistoricActivityInstance currentActivityInstance : finishedActivityInstanceList) { /**获得当前活动对应的节点信息及outgoingFlows信息*/ - currentFlowNode = (FlowNode) mainProcess.getFlowElement(currentActivityInstance.getActivityId(), true); + currentFlowNode = (FlowNode) bpmnModel.getMainProcess().getFlowElement(currentActivityInstance.getActivityId(), true); List sequenceFlowList = currentFlowNode.getOutgoingFlows(); /** * 遍历outgoingFlows并找到已流转的 @@ -236,15 +250,17 @@ public class ActProcInsService { * 2.当前节点是以上两种类型之外的,通过outgoingFlows查找到的时间最近的流转节点视为有效流转 */ FlowNode targetFlowNode = null; - if ("parallelGateway".equals(currentActivityInstance.getActivityType()) || "inclusiveGateway".equals(currentActivityInstance.getActivityType())) { + if ("parallelGateway".equals(currentActivityInstance.getActivityType()) + || "inclusiveGateway".equals(currentActivityInstance.getActivityType())) { for (SequenceFlow sequenceFlow : sequenceFlowList) { //遍历历史活动节点,找到匹配Flow目标节点的 - targetFlowNode = (FlowNode) mainProcess.getFlowElement(sequenceFlow.getTargetRef(), true); + targetFlowNode = (FlowNode) bpmnModel.getMainProcess().getFlowElement(sequenceFlow.getTargetRef(), true); if (historicFlowNodeList.contains(targetFlowNode)) { flowIdList.add(sequenceFlow.getId()); } } } else { List> tempMapList = new LinkedList>(); +// for(SequenceFlow sequenceFlow : sequenceFlowList) { //遍历历史活动节点,找到匹配Flow目标节点的 for (int i = 0; i < sequenceFlowList.size(); i++) { //遍历历史活动节点,找到匹配Flow目标节点的 SequenceFlow sequenceFlow = sequenceFlowList.get(i); int taskSeq = list.indexOf(sequenceFlow.getSourceRef()); // 获取当前flow目标节点key在审批顺序 @@ -271,9 +287,9 @@ public class ActProcInsService { flowId = map.get("flowId"); flowIdList.add(flowId); } + } } - return flowIdList; } } diff --git a/src/main/java/cn/palmte/work/service/ActTaskDefService.java b/src/main/java/cn/palmte/work/service/ActTaskDefService.java index 78c58a2..375153b 100644 --- a/src/main/java/cn/palmte/work/service/ActTaskDefService.java +++ b/src/main/java/cn/palmte/work/service/ActTaskDefService.java @@ -245,7 +245,7 @@ public class ActTaskDefService { } if (StringUtils.isNotBlank(actHisTask.getDeleteReason())) { - actHisTask.setComments("【驳回】" + actHisTask.getComments()); + actHisTask.setComments("【审核不通过】" + actHisTask.getComments()); } } diff --git a/src/main/java/cn/palmte/work/service/HumanCostService.java b/src/main/java/cn/palmte/work/service/HumanCostService.java index ccd7247..66b5859 100644 --- a/src/main/java/cn/palmte/work/service/HumanCostService.java +++ b/src/main/java/cn/palmte/work/service/HumanCostService.java @@ -10,6 +10,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import top.jfunc.common.db.bean.Page; +import top.jfunc.common.db.utils.Pagination; import top.jfunc.common.utils.CollectionUtil; import java.math.BigDecimal; @@ -36,6 +37,9 @@ public class HumanCostService { @Autowired private AdminRepository adminRepository; + @Autowired + private Pagination pagination; + public Page project(ConcurrentHashMap searchInfo, Admin admin, int pageNumber, int pageSize) { Page list = projectUserTimeRepositoryImpl.project(searchInfo, admin, pageNumber, pageSize); return list; @@ -214,4 +218,31 @@ public class HumanCostService { } return new BigDecimal(0); } + + public String[] template(List data) { + List admins = adminRepository.getAllEnable(); + String[] headers = new String[admins.size() + 1]; + headers[0] = "项目名称"; + for (int i = 1; i < admins.size(); i++) { + headers[i] = admins.get(i - 1).getRealName(); + } + Admin admin = InterfaceUtil.getAdmin(); + List projectList = null; + if (admin.getRoleLevel() <= 2 || admin.getRoleLevel() == 4) { + String sql = "select proj.id, proj.name from project proj where proj.status = ? order by proj.id asc"; + projectList = pagination.find(sql, Project.class, Project.STATUS_SETTLE); + } else { + String sql = "select proj.id, proj.name from project proj where proj.status = ? and " + + " (proj.creator_id=? OR proj.id in (SELECT pv1.project_id FROM project_visible pv1 WHERE pv1.type=1 AND pv1.tid=? UNION SELECT pv2.project_id FROM project_visible pv2 WHERE pv2.type=2 AND pv2.tid=?)) order by proj.id asc"; + //项目可见性,根据角色和人员id + int roleId = admin.getRoleId(); + Integer adminId = admin.getId(); + //自己创建的肯定能看见 + projectList = pagination.find(sql, Project.class, Project.STATUS_SETTLE, adminId, roleId, adminId); + } + for (Project project : projectList) { + data.add(project.getName()); + } + return headers; + } } diff --git a/src/main/java/cn/palmte/work/service/ProjectFinalSevice.java b/src/main/java/cn/palmte/work/service/ProjectFinalSevice.java index d6b97ba..efa84c5 100644 --- a/src/main/java/cn/palmte/work/service/ProjectFinalSevice.java +++ b/src/main/java/cn/palmte/work/service/ProjectFinalSevice.java @@ -9,6 +9,7 @@ import org.springframework.transaction.annotation.Transactional; import top.jfunc.common.utils.CollectionUtil; import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.ArrayList; import java.util.List; @@ -441,6 +442,10 @@ public class ProjectFinalSevice { } } } + + finalBean.setGrossProfitProfitMargin(finalBean.getGrossProfitFinalTotal().divide(finalBean.getIncomeTotal(),4, RoundingMode.HALF_UP).multiply(new BigDecimal(100))); + finalBean.setContributionMarginProfitMargin(finalBean.getContributionMarginFinalTotal().divide(finalBean.getIncomeTotal(),4, RoundingMode.HALF_UP).multiply(new BigDecimal(100))); + finalBean.setNetMarginProfitMargin(finalBean.getNetMarginFinalTotal().divide(finalBean.getIncomeTotal(),4, RoundingMode.HALF_UP).multiply(new BigDecimal(100))); return finalBean; } diff --git a/src/main/java/cn/palmte/work/service/ProjectSettleService.java b/src/main/java/cn/palmte/work/service/ProjectSettleService.java index bae636c..5217ce9 100644 --- a/src/main/java/cn/palmte/work/service/ProjectSettleService.java +++ b/src/main/java/cn/palmte/work/service/ProjectSettleService.java @@ -44,31 +44,13 @@ public class ProjectSettleService { public void save(Project project, SettleBean settleBean, BudgetSettleBean budgetBean, EstimateSettleBean estimateBean, String time) { - //收入记录 - income(project, settleBean, budgetBean, estimateBean, time); - //成本记录 - cost(project, settleBean, budgetBean, estimateBean, time); - //管理记录 - costManage(project, settleBean, budgetBean, estimateBean, time); - //利润记录 - profit(project, settleBean, budgetBean, estimateBean, time); - //资金流量记录 - cashFlow(project, settleBean, budgetBean, time); + step(project, settleBean, budgetBean, estimateBean, time); projectService.updateStatusAndApproveStatus(project.getId(), StatusEnum.SETTLE_ACCOUNTS, ApproveStatusEnum.APPROVAL_UNCOMMIT); } public void saveAndApprove(Project project, SettleBean settleBean, BudgetSettleBean budgetBean, EstimateSettleBean estimateBean, String time) throws Exception{ - //收入记录 - income(project, settleBean, budgetBean, estimateBean, time); - //成本记录 - cost(project, settleBean, budgetBean, estimateBean, time); - //管理记录 - costManage(project, settleBean, budgetBean, estimateBean, time); - //利润记录 - profit(project, settleBean, budgetBean, estimateBean, time); - //资金流量记录 - cashFlow(project, settleBean, budgetBean, time); + step(project, settleBean, budgetBean, estimateBean, time); projectService.updateStatusAndApproveStatus(project.getId(), StatusEnum.SETTLE_ACCOUNTS, ApproveStatusEnum.APPROVAL_PENDING); @@ -77,8 +59,23 @@ public class ProjectSettleService { } + private void step(Project project, SettleBean settleBean, BudgetSettleBean budgetBean, EstimateSettleBean estimateBean, String time) { + //清除旧纪录 + clearSettle(project, time); + //收入记录 + income(project, settleBean, budgetBean, estimateBean, time); + //成本记录 + cost(project, settleBean, budgetBean, estimateBean, time); + //管理记录 + costManage(project, settleBean, budgetBean, estimateBean, time); + //利润记录 + profit(project, settleBean, budgetBean, estimateBean, time); + //资金流量记录 + cashFlow(project, settleBean, budgetBean, time); + } - public void clearSettle(Project project, String time){ + + private void clearSettle(Project project, String time){ List incomes = projectSettleIncomeRepository.findAllByProjectIdAndTime(project.getId(), time); if(CollectionUtil.isNotEmpty(incomes)){ projectSettleIncomeRepository.deleteInBatch(incomes); diff --git a/src/main/java/cn/palmte/work/service/ProjectSummaryService.java b/src/main/java/cn/palmte/work/service/ProjectSummaryService.java index 8e3879c..72103ca 100644 --- a/src/main/java/cn/palmte/work/service/ProjectSummaryService.java +++ b/src/main/java/cn/palmte/work/service/ProjectSummaryService.java @@ -11,9 +11,7 @@ import top.jfunc.common.utils.CollectionUtil; import java.math.BigDecimal; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** @@ -45,15 +43,24 @@ public class ProjectSummaryService { @Autowired private Pagination pagination; - public List getList(ConcurrentHashMap searchInfo, String time) { - //预算金额 - Map budget = new HashMap<>(40); - String sql = "select proj.id, proj.name, proj.approve_status_budget from project_settle_cost psc left join project proj on psc.project_id = proj.id where psc.time = ? group by proj.id order by proj.id asc"; - List projectList = pagination.find(sql, Project.class, time); + public List getList(ConcurrentHashMap searchInfo, String time, Admin admin) { + List projectList = null; + if (admin.getRoleLevel() <= 2 || admin.getRoleLevel() == 4) { + String sql = "select proj.id, proj.name, proj.approve_status_settle from project_settle_cost psc left join project proj on psc.project_id = proj.id where psc.time = ? group by proj.id order by proj.id asc"; + projectList = pagination.find(sql, Project.class, time); + } else { + String sql = "select proj.id, proj.name, proj.approve_status_settle from project_settle_cost psc left join project proj on psc.project_id = proj.id where psc.time = ? and " + + " (proj.creator_id=? OR proj.id in (SELECT pv1.project_id FROM project_visible pv1 WHERE pv1.type=1 AND pv1.tid=? UNION SELECT pv2.project_id FROM project_visible pv2 WHERE pv2.type=2 AND pv2.tid=?)) group by proj.id order by proj.id asc"; + //项目可见性,根据角色和人员id + int roleId = admin.getRoleId(); + Integer adminId = admin.getId(); + //自己创建的肯定能看见 + projectList = pagination.find(sql, Project.class, time, adminId, roleId, adminId); + } List projects = new ArrayList<>(); List projectInt = new ArrayList<>(); for (Project project : projectList) { - if (project.getApproveStatusBudget() == 2) { + if (project.getApproveStatusSettle() == 2) { projects.add(project); projectInt.add(project.getId()); continue; @@ -107,12 +114,12 @@ public class ProjectSummaryService { BigDecimal costProjectManage = costs.stream().filter(d -> d.getType() == ProjectBudgetCost.TYPE_PROJECT_MANAGE).map(ProjectBudgetCost::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add); budgetBean.setCostProjectManage(costProjectManage ); - BigDecimal costProjectManageInclude = costs.stream().filter(d -> d.getType() == ProjectBudgetCost.TYPE_PROJECT_MANAGE).map(ProjectBudgetCost::getCostTaxInclude).reduce(BigDecimal.ZERO, BigDecimal::add); +// BigDecimal costProjectManageInclude = costs.stream().filter(d -> d.getType() == ProjectBudgetCost.TYPE_PROJECT_MANAGE).map(ProjectBudgetCost::getCostTaxInclude).reduce(BigDecimal.ZERO, BigDecimal::add); BigDecimal costOtherOther = costs.stream().filter(d -> d.getType() == ProjectBudgetCost.TYPE_OTHER_OTHER).map(ProjectBudgetCost::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add); budgetBean.setCostOther(costOtherOther); BigDecimal costOtherOtherInclude = costs.stream().filter(d -> d.getType() == ProjectBudgetCost.TYPE_OTHER_OTHER).map(ProjectBudgetCost::getCostTaxInclude).reduce(BigDecimal.ZERO, BigDecimal::add); - taxTotal = taxTotal.add(budgetBean.getCostTotal()).subtract(costDeviceInclude).subtract(costBuildInclude).subtract(costServiceInclude).subtract(costOtherInclude).subtract(costProjectManageInclude).subtract(costOtherOtherInclude); + taxTotal = taxTotal.add(budgetBean.getCostTotal()).subtract(costDeviceInclude).subtract(costBuildInclude).subtract(costServiceInclude).subtract(costOtherInclude).subtract(costProjectManage).subtract(costOtherOtherInclude); } List manages = projectBudgetCostManageRepository.findAllByProjectIds(projectInt); @@ -177,11 +184,12 @@ public class ProjectSummaryService { private void setProfitMargin(SettleBean monthSettle) { BigDecimal divide2 = monthSettle.getIncomeTotal(); - if (divide2.equals(new BigDecimal(0))) { + BigDecimal min = new BigDecimal(0.01); + if (divide2.compareTo(min) < 0) { divide2 = new BigDecimal(1); } - monthSettle.setGrossProfitProfitMargin(monthSettle.getGrossProfit().multiply(new BigDecimal(100).divide(divide2, BigDecimal.ROUND_HALF_UP))); - monthSettle.setContributionProfitProfitMargin(monthSettle.getContributionProfit().multiply(new BigDecimal(100).divide(divide2, BigDecimal.ROUND_HALF_UP))); - monthSettle.setNetProfitProfitMargin(monthSettle.getNetProfit().multiply(new BigDecimal(100).divide(divide2, BigDecimal.ROUND_HALF_UP))); + monthSettle.setGrossProfitProfitMargin(monthSettle.getGrossProfit().multiply(new BigDecimal(100).divide(divide2, 4, BigDecimal.ROUND_HALF_UP))); + monthSettle.setContributionProfitProfitMargin(monthSettle.getContributionProfit().multiply(new BigDecimal(100).divide(divide2, 4, BigDecimal.ROUND_HALF_UP))); + monthSettle.setNetProfitProfitMargin(monthSettle.getNetProfit().multiply(new BigDecimal(100).divide(divide2, 4, BigDecimal.ROUND_HALF_UP))); } } diff --git a/src/main/java/cn/palmte/work/service/StatisticsService.java b/src/main/java/cn/palmte/work/service/StatisticsService.java index 589980e..3c74285 100644 --- a/src/main/java/cn/palmte/work/service/StatisticsService.java +++ b/src/main/java/cn/palmte/work/service/StatisticsService.java @@ -1,10 +1,8 @@ package cn.palmte.work.service; -import cn.palmte.work.bean.CashFlowBean; import cn.palmte.work.bean.CashFlowStatisticsBean; import cn.palmte.work.bean.PrimaryIndicatorBean; import cn.palmte.work.model.*; -import lombok.Data; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import top.jfunc.common.utils.CollectionUtil; diff --git a/src/main/java/cn/palmte/work/service/SysRoleService.java b/src/main/java/cn/palmte/work/service/SysRoleService.java index aeeae28..06f7158 100644 --- a/src/main/java/cn/palmte/work/service/SysRoleService.java +++ b/src/main/java/cn/palmte/work/service/SysRoleService.java @@ -134,7 +134,7 @@ public class SysRoleService { SysRole role=new SysRole(); role.setName(reqMap.get("roleName")!=null?reqMap.get("roleName").toString():null); - //role.setLevel(reqMap.containsKey("roleLevel")?Integer.parseInt(reqMap.get("roleLevel").toString()):1);//第一个版本 默认都是省级 + role.setLevel(Integer.parseInt(reqMap.get("level").toString())); role.setIsEnable(Integer.parseInt(reqMap.get("isActive").toString())); //role.setType(Integer.parseInt(reqMap.get("roleType").toString())); role.setCreatedBy(InterfaceUtil.getAdminId());//当前登录人 @@ -249,7 +249,7 @@ public class SysRoleService { SysRole role =sysRoleRepository.findSysRoleById(roleId); role.setName(reqMap.get("roleName").toString()); - //role.setLevel(Integer.parseInt(reqMap.get("roleLevel").toString())); + role.setLevel(Integer.parseInt(reqMap.get("level").toString())); //role.setType(Integer.parseInt(reqMap.get("roleType").toString())); role.setIsEnable(Integer.parseInt(reqMap.get("isActive").toString())); role.setLastUpdatedBy(InterfaceUtil.getAdminId()); diff --git a/src/main/java/cn/palmte/work/utils/excel/ExportUtils.java b/src/main/java/cn/palmte/work/utils/excel/ExportUtils.java index 691b60e..51d2ee5 100644 --- a/src/main/java/cn/palmte/work/utils/excel/ExportUtils.java +++ b/src/main/java/cn/palmte/work/utils/excel/ExportUtils.java @@ -243,7 +243,7 @@ public class ExportUtils { * * @throws IOException */ - public void exportTemplate(String[] columns, List dataset, String pattern, int rowIndex) throws IOException{ + public void exportTemplate(String[] columns, List dataset, String pattern, int rowIndex) throws IOException{ // 遍历集合数据,产生数据行 int index = rowIndex; Font font3 = workbook.createFont(); diff --git a/src/main/resources/static/assets/js/project_final.js b/src/main/resources/static/assets/js/project_final.js index d297bca..4efd6d3 100644 --- a/src/main/resources/static/assets/js/project_final.js +++ b/src/main/resources/static/assets/js/project_final.js @@ -33,51 +33,76 @@ function calculateFinal() { $("input[name='costExpropriationFinalTotal']").change(function () { calManageFinalTotal(); + calGrossProfitFinalTotal(); + calGrossProfitProfitMargin(); }); $("input[name='costCompanyManageFinalTotal']").change(function () { calManageFinalTotal(); + calContributionMarginFinalTotal(); + calContributionMarginProfitMargin(); }); $("input[name='costIncomeTaxFinalTotal']").change(function () { calManageFinalTotal(); + calNetMarginFinalTotal(); + calNetMarginProfitMargin(); }); - $("input[name='saleIncomeCash']").change(function () { calCashFluxFinalTotal(); + calNetCashFlow(); + calNetIncreaseMonetaryFunds(); }); $("input[name='taxReturn']").change(function () { calCashFluxFinalTotal(); + calNetCashFlow(); + calNetIncreaseMonetaryFunds(); }); $("input[name='earnestMoneyIncome']").change(function () { calCashFluxFinalTotal(); + calNetCashFlow(); + calNetIncreaseMonetaryFunds(); }); $("input[name='purchaseCost']").change(function () { calCashFluxFinalTotal(); + calNetCashFlow(); + calNetIncreaseMonetaryFunds(); }); $("input[name='taxCost']").change(function () { calCashFluxFinalTotal(); + calNetCashFlow(); + calNetIncreaseMonetaryFunds(); }); $("input[name='earnestMoneyCost']").change(function () { calCashFluxFinalTotal(); + calNetCashFlow(); + calNetIncreaseMonetaryFunds(); }); $("input[name='netCashFlow']").change(function () { calCashFluxFinalTotal(); }); $("input[name='cashInflowFromInvestingActivities']").change(function () { calCashFluxFinalTotal(); - }); + calNetCashFromInvestingActivities(); + calNetIncreaseMonetaryFunds(); + }) $("input[name='cashOutflowFromInvestingActivities']").change(function () { calCashFluxFinalTotal(); + calNetCashFromInvestingActivities(); + calNetIncreaseMonetaryFunds(); }); $("input[name='netCashFromInvestingActivities']").change(function () { calCashFluxFinalTotal(); }); $("input[name='financingCapitalInflow']").change(function () { calCashFluxFinalTotal(); + calFinancingCapitalCashflow(); + calNetIncreaseMonetaryFunds(); }); $("input[name='financingCapitalOutflow']").change(function () { calCashFluxFinalTotal(); + calFinancingCapitalCashflow(); + calNetIncreaseMonetaryFunds(); }); $("input[name='financingCapitalCashflow']").change(function () { calCashFluxFinalTotal(); @@ -86,6 +111,76 @@ function calculateFinal() { calCashFluxFinalTotal(); }); + +} + +/** + * 经营活动产生的现金流量净额 + */ +function calNetCashFlow() { + + var saleIncomeCash = $("input[name='saleIncomeCash']").val(); + var taxReturn = $("input[name='taxReturn']").val(); + var earnestMoneyIncome = $("input[name='earnestMoneyIncome']").val(); + var purchaseCost = $("input[name='purchaseCost']").val(); + var taxCost = $("input[name='taxCost']").val(); + var earnestMoneyCost = $("input[name='earnestMoneyCost']").val(); + + var netCashFlow = $("input[name='netCashFlow']"); + + if(saleIncomeCash && taxReturn && earnestMoneyIncome + && purchaseCost && taxCost && earnestMoneyCost){ + netCashFlow.val(parseFloat(saleIncomeCash)+parseFloat(taxReturn)+parseFloat(earnestMoneyIncome) + -parseFloat(purchaseCost)-parseFloat(taxCost)-parseFloat(earnestMoneyCost)); + }else { + netCashFlow.val(""); + } +} + +/** + * 投资活动产生的现金流量净额 + */ +function calNetCashFromInvestingActivities() { + var cashInflowFromInvestingActivities = $("input[name='cashInflowFromInvestingActivities']").val(); + var cashOutflowFromInvestingActivities = $("input[name='cashOutflowFromInvestingActivities']").val(); + + var netCashFromInvestingActivities = $("input[name='netCashFromInvestingActivities']"); + + if(cashInflowFromInvestingActivities && cashOutflowFromInvestingActivities ){ + netCashFromInvestingActivities.val(parseFloat(cashInflowFromInvestingActivities)-parseFloat(cashOutflowFromInvestingActivities)); + }else { + netCashFromInvestingActivities.val(""); + } +} + +/** + * 筹资活动产生的现金流量净额 + */ +function calFinancingCapitalCashflow() { + var financingCapitalInflow = $("input[name='financingCapitalInflow']").val(); + var financingCapitalOutflow = $("input[name='financingCapitalOutflow']").val(); + + var financingCapitalCashflow = $("input[name='financingCapitalCashflow']"); + + if(financingCapitalInflow && financingCapitalOutflow ){ + financingCapitalCashflow.val(parseFloat(financingCapitalInflow)-parseFloat(financingCapitalOutflow)); + }else { + financingCapitalCashflow.val(""); + } +} + +function calNetIncreaseMonetaryFunds() { + var netCashFlow = $("input[name='netCashFlow']").val(); + var netCashFromInvestingActivities = $("input[name='netCashFromInvestingActivities']").val(); + var financingCapitalCashflow = $("input[name='financingCapitalCashflow']").val(); + + var netIncreaseMonetaryFunds = $("input[name='netIncreaseMonetaryFunds']"); + + if(netCashFlow && netCashFromInvestingActivities && financingCapitalCashflow){ + netIncreaseMonetaryFunds.val(parseFloat(netCashFlow)+parseFloat(netCashFromInvestingActivities)+parseFloat(financingCapitalCashflow)); + }else { + netIncreaseMonetaryFunds.val(""); + } } /** @@ -181,6 +276,105 @@ function calCashFluxFinalTotal() { } } +/** + * 项目毛利决算总额 + */ +function calGrossProfitFinalTotal() { + var incomeFinalTotal = $("input[name='incomeFinalTotal']").val(); + var costFinalTotal = $("input[name='costFinalTotal']").val(); + var costExpropriationFinalTotal = $("input[name='costExpropriationFinalTotal']").val(); + + var grossProfitFinalTotal = $("input[name='grossProfitFinalTotal']"); + + if(incomeFinalTotal && costFinalTotal && costExpropriationFinalTotal){ + grossProfitFinalTotal.val(parseFloat(incomeFinalTotal)-parseFloat(costFinalTotal)-parseFloat(costExpropriationFinalTotal)); + }else { + grossProfitFinalTotal.val(""); + } +} + +/** + * 项目毛利利润率 + */ +function calGrossProfitProfitMargin() { + var grossProfitFinalTotal = $("input[name='grossProfitFinalTotal']").val(); + var incomeFinalTotal = $("input[name='incomeFinalTotal']").val(); + + var grossProfitProfitMargin = $("input[name='grossProfitProfitMargin']"); + if(grossProfitFinalTotal && incomeFinalTotal){ + grossProfitProfitMargin.val(f2(grossProfitFinalTotal) / f2(incomeFinalTotal)); + }else { + grossProfitProfitMargin.val(""); + } +} + + +/** + * 项目贡献利润决算总额 + */ +function calContributionMarginFinalTotal() { + var grossProfitFinalTotal = $("input[name='grossProfitFinalTotal']").val(); + var costCompanyManageFinalTotal = $("input[name='costCompanyManageFinalTotal']").val(); + + var contributionMarginFinalTotal = $("input[name='contributionMarginFinalTotal']"); + + if(grossProfitFinalTotal && costCompanyManageFinalTotal ){ + contributionMarginFinalTotal.val(parseFloat(grossProfitFinalTotal)-parseFloat(costCompanyManageFinalTotal)); + }else { + contributionMarginFinalTotal.val(""); + } +} + +/** + * 项目贡献利润利润率 + */ +function calContributionMarginProfitMargin() { + var contributionMarginFinalTotal = $("input[name='contributionMarginFinalTotal']").val(); + var incomeFinalTotal = $("input[name='incomeFinalTotal']").val(); + + var contributionMarginProfitMargin = $("input[name='contributionMarginProfitMargin']"); + if(contributionMarginFinalTotal && incomeFinalTotal){ + contributionMarginProfitMargin.val(f2(contributionMarginFinalTotal) / f2(incomeFinalTotal)); + }else { + contributionMarginProfitMargin.val(""); + } +} + +/** + * 项目净利润决算总额 + */ +function calNetMarginFinalTotal() { + var contributionMarginFinalTotal = $("input[name='contributionMarginFinalTotal']").val(); + var costIncomeTaxFinalTotal = $("input[name='costIncomeTaxFinalTotal']").val(); + + + var netMarginFinalTotal = $("input[name='netMarginFinalTotal']"); + + if(contributionMarginFinalTotal && costIncomeTaxFinalTotal ){ + netMarginFinalTotal.val(parseFloat(contributionMarginFinalTotal)-parseFloat(costIncomeTaxFinalTotal)); + }else { + netMarginFinalTotal.val(""); + } +} + +/** + * 项目净利润利润率 + */ +function calNetMarginProfitMargin() { + var netMarginFinalTotal = $("input[name='netMarginFinalTotal']").val(); + var incomeFinalTotal = $("input[name='incomeFinalTotal']").val(); + + var netMarginProfitMargin = $("input[name='netMarginProfitMargin']"); + if(netMarginFinalTotal && incomeFinalTotal){ + netMarginProfitMargin.val(f2(netMarginFinalTotal) / f2(incomeFinalTotal)); + }else { + netMarginProfitMargin.val(""); + } +} + + + + diff --git a/src/main/resources/static/assets/js/project_settle.js b/src/main/resources/static/assets/js/project_settle.js index 93fbe3a..8c8bc49 100644 --- a/src/main/resources/static/assets/js/project_settle.js +++ b/src/main/resources/static/assets/js/project_settle.js @@ -4,16 +4,19 @@ function calculateSettle() { calIncomeDeviceSettleTotal(); calIncomeTotal(); calIncomeSettleTotal(); + calProfit(); }); $("input[name='incomeEngineer']").change(function () { calIncomeEngineerSettleTotal(); calIncomeTotal(); calIncomeSettleTotal(); + calProfit(); }); $("input[name='incomeService']").change(function () { calIncomeServiceSettleTotal(); calIncomeTotal(); calIncomeSettleTotal(); + calProfit(); }); @@ -21,31 +24,37 @@ function calculateSettle() { calCostPurchaseDeviceSettleTotal(); calCostTotal(); calCostSettleTotal(); + calProfit(); }); $("input[name='costPurchaseBuild']").change(function () { calCostPurchaseBuildSettleTotal(); calCostTotal(); calCostSettleTotal(); + calProfit(); }); $("input[name='costPurchaseService']").change(function () { calCostPurchaseServiceSettleTotal(); calCostTotal(); calCostSettleTotal(); + calProfit(); }); $("input[name='costPurchaseOther']").change(function () { calCostPurchaseOtherSettleTotal(); calCostTotal(); calCostSettleTotal(); + calProfit(); }); $("input[name='costProjectManage']").change(function () { calCostProjectManageSettleTotal(); calCostTotal(); calCostSettleTotal(); + calProfit(); }); $("input[name='costOther']").change(function () { calCostOtherSettleTotal(); calCostTotal(); calCostSettleTotal(); + calProfit(); }); @@ -53,106 +62,176 @@ function calculateSettle() { calCostExpropriationSettleTotal(); calCostManageTotal(); calCostManageSettleTotal(); + calProfit(); }); $("input[name='costCompanyManage']").change(function () { calCostCompanyManageSettleTotal(); calCostManageTotal(); calCostManageSettleTotal(); + + calContributionProfit(); + calContributionProfitSettleTotal(); + calContributionProfitProfitMargin(); + calNetProfit(); + calNetProfitSettleTotal(); + calNetProfitProfitMargin(); }); $("input[name='costIncomeTax']").change(function () { calCostIncomeTaxSettleTotal(); calCostManageTotal(); calCostManageSettleTotal(); - }); - - $("input[name='grossProfit']").change(function () { - calGrossProfitSettleTotal(); - calGrossProfitProfitMargin(); - }); - $("input[name='contributionProfit']").change(function () { - calContributionProfitSettleTotal(); - calContributionProfitProfitMargin(); - }); - $("input[name='netProfit']").change(function () { + calNetProfit(); calNetProfitSettleTotal(); calNetProfitProfitMargin(); }); + // $("input[name='grossProfit']").change(function () { + // calGrossProfitSettleTotal(); + // calGrossProfitProfitMargin(); + // }); + // $("input[name='contributionProfit']").change(function () { + // calContributionProfitSettleTotal(); + // calContributionProfitProfitMargin(); + // }); + // $("input[name='netProfit']").change(function () { + // calNetProfitSettleTotal(); + // calNetProfitProfitMargin(); + // }); + + $("input[name='saleIncomeCash']").change(function () { calSaleIncomeCashSettle(); + calNetCashFlow(); + calNetCashFlowSettle(); + calNetIncreaseMonetaryFunds(); + calNetIncreaseMonetaryFundsSettle(); calCashFlowTotal(); calCashFlowSettleTotal(); }); $("input[name='taxReturn']").change(function () { calTaxReturnSettle(); + calNetCashFlow(); + calNetCashFlowSettle(); + calNetIncreaseMonetaryFunds(); + calNetIncreaseMonetaryFundsSettle(); calCashFlowTotal(); calCashFlowSettleTotal(); }); $("input[name='earnestMoneyIncome']").change(function () { calEarnestMoneyIncomeSettle(); + calNetCashFlow(); + calNetCashFlowSettle(); + calNetIncreaseMonetaryFunds(); + calNetIncreaseMonetaryFundsSettle(); calCashFlowTotal(); calCashFlowSettleTotal(); }); $("input[name='purchaseCost']").change(function () { calPurchaseCostSettle(); + calNetCashFlow(); + calNetCashFlowSettle(); + calNetIncreaseMonetaryFunds(); + calNetIncreaseMonetaryFundsSettle(); calCashFlowTotal(); calCashFlowSettleTotal(); }); $("input[name='taxCost']").change(function () { calTaxCostSettle(); + calNetCashFlow(); + calNetCashFlowSettle(); + calNetIncreaseMonetaryFunds(); + calNetIncreaseMonetaryFundsSettle(); calCashFlowTotal(); calCashFlowSettleTotal(); }); $("input[name='earnestMoneyCost']").change(function () { calEarnestMoneyCostSettle(); - calCashFlowTotal(); - calCashFlowSettleTotal(); - }); - $("input[name='netCashFlow']").change(function () { + calNetCashFlow(); calNetCashFlowSettle(); + calNetIncreaseMonetaryFunds(); + calNetIncreaseMonetaryFundsSettle(); calCashFlowTotal(); calCashFlowSettleTotal(); }); + // $("input[name='netCashFlow']").change(function () { + // calNetCashFlowSettle(); + // calNetIncreaseMonetaryFunds(); + // calCashFlowTotal(); + // calCashFlowSettleTotal(); + // }); $("input[name='cashInflowFromInvestingActivities']").change(function () { calCashInflowFromInvestingActivitiesSettle(); + calNetCashFromInvestingActivities(); + calNetCashFromInvestingActivitiesSettle(); + calNetIncreaseMonetaryFunds(); + calNetIncreaseMonetaryFundsSettle(); calCashFlowTotal(); calCashFlowSettleTotal(); }); $("input[name='cashOutflowFromInvestingActivities']").change(function () { calCashOutflowFromInvestingActivitiesSettle(); - calCashFlowTotal(); - calCashFlowSettleTotal(); - }); - $("input[name='netCashFromInvestingActivities']").change(function () { + calNetCashFromInvestingActivities(); calNetCashFromInvestingActivitiesSettle(); + calNetIncreaseMonetaryFunds(); + calNetIncreaseMonetaryFundsSettle(); calCashFlowTotal(); calCashFlowSettleTotal(); }); + // $("input[name='netCashFromInvestingActivities']").change(function () { + // calNetCashFromInvestingActivitiesSettle(); + // calNetIncreaseMonetaryFunds(); + // calCashFlowTotal(); + // calCashFlowSettleTotal(); + // }); $("input[name='financingCapitalInflow']").change(function () { calFinancingCapitalInflowSettle(); + calFinancingCapitalCashflow(); + calFinancingCapitalCashflowSettle(); + calNetIncreaseMonetaryFunds(); + calNetIncreaseMonetaryFundsSettle(); calCashFlowTotal(); calCashFlowSettleTotal(); }); $("input[name='financingCapitalOutflow']").change(function () { calFinancingCapitalOutflowSettle(); - calCashFlowTotal(); - calCashFlowSettleTotal(); - }); - $("input[name='financingCapitalCashflow']").change(function () { + calFinancingCapitalCashflow(); calFinancingCapitalCashflowSettle(); - calCashFlowTotal(); - calCashFlowSettleTotal(); - }); - $("input[name='netIncreaseMonetaryFunds']").change(function () { + calNetIncreaseMonetaryFunds(); calNetIncreaseMonetaryFundsSettle(); calCashFlowTotal(); calCashFlowSettleTotal(); }); + // $("input[name='financingCapitalCashflow']").change(function () { + // calFinancingCapitalCashflowSettle(); + // calNetIncreaseMonetaryFunds(); + // calCashFlowTotal(); + // calCashFlowSettleTotal(); + // }); + // $("input[name='netIncreaseMonetaryFunds']").change(function () { + // calNetIncreaseMonetaryFundsSettle(); + // calCashFlowTotal(); + // calCashFlowSettleTotal(); + // }); } +/** + * 收入和支出均需调用的利润方法 + */ +function calProfit() { + calGrossProfit(); + calGrossProfitSettleTotal(); + calGrossProfitProfitMargin(); + calContributionProfit(); + calContributionProfitSettleTotal(); + calContributionProfitProfitMargin(); + calNetProfit(); + calNetProfitSettleTotal(); + calNetProfitProfitMargin(); +} + /** * 收入设备类结算总额(不含税),有一项没填就置空 */ @@ -455,6 +534,23 @@ function calCostManageSettleTotal() { } } +/** + * 本月项目毛利结算总额,有一项没填就置空 + */ +function calGrossProfit() { + var incomeTotal = $("input[name='incomeTotal']").val(); + var costTotal = $("input[name='costTotal']").val(); + var costExpropriation = $("input[name='costExpropriation']").val(); + + var grossProfit = $("input[name='grossProfit']"); + + if(incomeTotal && costTotal && costExpropriation){ + grossProfit.val(parseFloat(incomeTotal)-parseFloat(costTotal)-parseFloat(costExpropriation)); + }else { + grossProfit.val(""); + } +} + /** * 项目毛利结算总额,有一项没填就置空 */ @@ -487,6 +583,22 @@ function calGrossProfitProfitMargin() { } } +/** + * 本月项目贡献利润,有一项没填就置空 + */ +function calContributionProfit() { + var grossProfit = $("input[name='grossProfit']").val(); + var costCompanyManage = $("input[name='costCompanyManage']").val(); + + var contributionProfit = $("input[name='contributionProfit']"); + + if(grossProfit && costCompanyManage){ + contributionProfit.val(parseFloat(grossProfit)-parseFloat(costCompanyManage)); + }else { + contributionProfit.val(""); + } +} + /** * 项目贡献利润,有一项没填就置空 */ @@ -519,6 +631,22 @@ function calContributionProfitProfitMargin() { } } +/** + * 本月项目净利润,有一项没填就置空 + */ +function calNetProfit() { + var contributionProfit = $("input[name='contributionProfit']").val(); + var costIncomeTax = $("input[name='costIncomeTax']").val(); + + var netProfit = $("input[name='netProfit']"); + + if(contributionProfit && costIncomeTax){ + netProfit.val(parseFloat(contributionProfit)-parseFloat(costIncomeTax)); + }else { + netProfit.val(""); + } +} + /** * 项目净利润,有一项没填就置空 */ @@ -543,7 +671,7 @@ function calNetProfitProfitMargin() { var incomeSettleTotal = $("input[name='incomeSettleTotal']").val(); var netProfitProfitMargin = $("input[name='netProfitProfitMargin']"); - console.log("calNetProfitProfitMargin " + netProfitSettleTotal + " " + incomeSettleTotal); + if(netProfitSettleTotal && incomeSettleTotal){ netProfitProfitMargin.val(100*(parseFloat(netProfitSettleTotal)/parseFloat(incomeSettleTotal))); }else { @@ -776,6 +904,77 @@ function calNetIncreaseMonetaryFundsSettle() { } } +/** + * 本月经营活动产生的现金流量净额,有一项没填就置空 + */ +function calNetCashFlow() { + var saleIncomeCash = $("input[name='saleIncomeCash']").val(); + var taxReturn = $("input[name='taxReturn']").val(); + var earnestMoneyIncome = $("input[name='earnestMoneyIncome']").val(); + var purchaseCost = $("input[name='purchaseCost']").val(); + var taxCost = $("input[name='taxCost']").val(); + var earnestMoneyCost = $("input[name='earnestMoneyCost']").val(); + + var netCashFlow = $("input[name='netCashFlow']"); + + if(saleIncomeCash && taxReturn && earnestMoneyIncome && + purchaseCost && taxCost && earnestMoneyCost) { + netCashFlow.val(parseFloat(saleIncomeCash)+parseFloat(taxReturn)+parseFloat(earnestMoneyIncome)- + parseFloat(purchaseCost)-parseFloat(taxCost)-parseFloat(earnestMoneyCost)); + }else { + netCashFlow.val(""); + } +} + +/** + * 本月投资活动产生的现金流量净额,有一项没填就置空 + */ +function calNetCashFromInvestingActivities() { + var cashInflowFromInvestingActivities = $("input[name='cashInflowFromInvestingActivities']").val(); + var cashOutflowFromInvestingActivities = $("input[name='cashOutflowFromInvestingActivities']").val(); + + var netCashFromInvestingActivities = $("input[name='netCashFromInvestingActivities']"); + + if(cashInflowFromInvestingActivities && cashOutflowFromInvestingActivities){ + netCashFromInvestingActivities.val(parseFloat(cashInflowFromInvestingActivities)-parseFloat(cashOutflowFromInvestingActivities)); + }else { + netCashFromInvestingActivities.val(""); + } +} + +/** + * 本月筹资活动产生的现金流量净额,有一项没填就置空 + */ +function calFinancingCapitalCashflow() { + var financingCapitalInflow = $("input[name='financingCapitalInflow']").val(); + var financingCapitalOutflow = $("input[name='financingCapitalOutflow']").val(); + + var financingCapitalCashflow = $("input[name='financingCapitalCashflow']"); + + if(financingCapitalInflow && financingCapitalOutflow){ + financingCapitalCashflow.val(parseFloat(financingCapitalInflow)-parseFloat(financingCapitalOutflow)); + }else { + financingCapitalCashflow.val(""); + } +} + +/** + * 本月货币资金净增加额,有一项没填就置空 + */ +function calNetIncreaseMonetaryFunds() { + var netCashFlow = $("input[name='netCashFlow']").val(); + var netCashFromInvestingActivities = $("input[name='netCashFromInvestingActivities']").val(); + var financingCapitalCashflow = $("input[name='financingCapitalCashflow']").val(); + + var netIncreaseMonetaryFunds = $("input[name='netIncreaseMonetaryFunds']"); + + if(netCashFlow && netCashFromInvestingActivities && financingCapitalCashflow){ + netIncreaseMonetaryFunds.val(parseFloat(netCashFlow)+parseFloat(netCashFromInvestingActivities)+parseFloat(financingCapitalCashflow)); + }else { + netIncreaseMonetaryFunds.val(""); + } +} + /** * 本月现金流量表总额(不含税),有一项没填就置空 */ diff --git a/src/main/resources/static/assets/js/project_settle_valid.js b/src/main/resources/static/assets/js/project_settle_valid.js new file mode 100644 index 0000000..25d4154 --- /dev/null +++ b/src/main/resources/static/assets/js/project_settle_valid.js @@ -0,0 +1,454 @@ +var valid = function() { + return incomeDeviceValid() && incomeEngineerValid() && incomeServiceValid() && costPurchaseDeviceValid() && costPurchaseBuildValid() && costPurchaseServiceValid() && costPurchaseOtherValid() && costProjectManageValid() && costOtherValid() && costExpropriationValid() && costCompanyManageValid() + && grossProfitValid() && contributionProfitValid() && netProfitValid() && saleIncomeCashValid() && earnestMoneyIncomeValid() && purchaseCostValid() && earnestMoneyCostValid() && financingCapitalInflowValid() && financingCapitalOutflowValid() && financingCapitalCashflowValid(); +}; + +var incomeDeviceValid = function() { + var settle = $("input[name='incomeDeviceSettleTotal']").val(); + var month = $("input[name='incomeDevice']").val(); + var budget = $("input[name='incomeDeviceBudgetTotal']").val(); + if (month == "") { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("请填入本月收入设备类数据"); + }); + return false; + } + if (parseFloat(settle) > parseFloat(budget)) { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("收入设备类结算总额不能高于预算总额"); + }); + return false; + } + return true; +}; + +var incomeEngineerValid = function() { + var settle = $("input[name='incomeEngineerSettleTotal']").val(); + var month = $("input[name='incomeEngineer']").val(); + var budget = $("input[name='incomeEngineerBudgetTotal']").val(); + if (month == "") { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("请填入本月收入工程类数据"); + }); + return false; + } + if (parseFloat(settle) > parseFloat(budget)) { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("收入工程类结算总额不能高于预算总额"); + }); + return false; + } + return true; +}; + +var incomeServiceValid = function() { + var settle = $("input[name='incomeServiceSettleTotal']").val(); + var month = $("input[name='incomeService']").val(); + var budget = $("input[name='incomeServiceBudgetTotal']").val(); + if (month == "") { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("请填入本月收入服务类数据"); + }); + return false; + } + if (parseFloat(settle) > parseFloat(budget)) { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("收入服务类结算总额不能高于预算总额"); + }); + return false; + } + return true; +}; + +var costPurchaseDeviceValid = function() { + var settle = $("input[name='costPurchaseDeviceSettleTotal']").val(); + var month = $("input[name='costPurchaseDevice']").val(); + var budget = $("input[name='costPurchaseDeviceBudgetTotal']").val(); + if (month == "") { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("请填入本月采购成本设备类数据"); + }); + return false; + } + if (parseFloat(settle) > parseFloat(budget)) { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("采购成本设备类结算总额不能高于预算总额"); + }); + return false; + } + return true; +}; + +var costPurchaseBuildValid = function() { + var settle = $("input[name='costPurchaseBuildSettleTotal']").val(); + var month = $("input[name='costPurchaseBuild']").val(); + var budget = $("input[name='costPurchaseBuildBudgetTotal']").val(); + if (month == "") { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("请填入本月采购成本施工类数据"); + }); + return false; + } + if (parseFloat(settle) > parseFloat(budget)) { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("采购成本施工类结算总额不能高于预算总额"); + }); + return false; + } + return true; +}; + +var costPurchaseServiceValid = function() { + var settle = $("input[name='costPurchaseServiceSettleTotal']").val(); + var month = $("input[name='costPurchaseService']").val(); + var budget = $("input[name='costPurchaseServiceBudgetTotal']").val(); + if (month == "") { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("请填入本月采购成本服务类数据"); + }); + return false; + } + if (parseFloat(settle) > parseFloat(budget)) { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("采购成本服务类结算总额不能高于预算总额"); + }); + return false; + } + return true; +}; + +var costPurchaseOtherValid = function() { + var settle = $("input[name='costPurchaseOtherSettleTotal']").val(); + var month = $("input[name='costPurchaseOther']").val(); + var budget = $("input[name='costPurchaseOtherBudgetTotal']").val(); + if (month == "") { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("请填入本月采购成本其他类数据"); + }); + return false; + } + if (parseFloat(settle) > parseFloat(budget)) { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("采购成本其他类结算总额不能高于预算总额"); + }); + return false; + } + return true; +}; + +var costProjectManageValid = function() { + var settle = $("input[name='costProjectManageSettleTotal']").val(); + var month = $("input[name='costProjectManage']").val(); + var salary = $("input[name='salary']").val(); + var budget = $("input[name='costProjectManageBudgetTotal']").val(); + if (month == "") { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("请填入本月项目管理成本数据"); + }); + return false; + } + if (parseFloat(salary) > parseFloat(month)) { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("本月项目管理成本不能低于人力成本"); + }); + return false; + } + if (parseFloat(settle) > parseFloat(budget)) { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("项目管理成本结算总额不能高于预算总额"); + }); + return false; + } + return true; +}; + +var costOtherValid = function() { + var settle = $("input[name='costOtherSettleTotal']").val(); + var month = $("input[name='costOther']").val(); + var budget = $("input[name='costOtherBudgetTotal']").val(); + if (month == "") { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("请填入本月其他成本数据"); + }); + return false; + } + if (parseFloat(settle) > parseFloat(budget)) { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("其他成本结算总额不能高于预算总额"); + }); + return false; + } + return true; +}; + +var costExpropriationValid = function() { + var settle = $("input[name='costExpropriationSettleTotal']").val(); + var month = $("input[name='costExpropriation']").val(); + var budget = $("input[name='costExpropriationBudgetTotal']").val(); + if (month == "") { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("请填入本月财务费用数据"); + }); + return false; + } + if (parseFloat(settle) > parseFloat(budget)) { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("财务费用结算总额不能高于预算总额"); + }); + return false; + } + return true; +}; + +var costCompanyManageValid = function() { + var settle = $("input[name='costCompanyManageSettleTotal']").val(); + var month = $("input[name='costCompanyManage']").val(); + var budget = $("input[name='costCompanyManageBudgetTotal']").val(); + if (month == "") { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("请填入本月公司管理费用数据"); + }); + return false; + } + if (parseFloat(settle) > parseFloat(budget)) { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("公司管理费用结算总额不能高于预算总额"); + }); + return false; + } + return true; +}; + +var grossProfitValid = function() { + var settle = $("input[name='grossProfitSettleTotal']").val(); + var month = $("input[name='grossProfit']").val(); + var budget = $("input[name='grossProfitBudgetTotal']").val(); + if (month == "") { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("请填入本月项目毛利数据"); + }); + return false; + } + if (parseFloat(settle) > parseFloat(budget)) { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("项目毛利结算总额不能高于预算总额"); + }); + return false; + } + return true; +}; + +var contributionProfitValid = function() { + var settle = $("input[name='contributionProfitSettleTotal']").val(); + var month = $("input[name='contributionProfit']").val(); + var budget = $("input[name='contributionProfitBudgetTotal']").val(); + if (month == "") { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("请填入本月项目贡献利润数据"); + }); + return false; + } + if (parseFloat(settle) > parseFloat(budget)) { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("项目贡献利润结算总额不能高于预算总额"); + }); + return false; + } + return true; +}; + +var netProfitValid = function() { + var settle = $("input[name='netProfitSettleTotal']").val(); + var month = $("input[name='netProfit']").val(); + var budget = $("input[name='netProfitBudgetTotal']").val(); + if (month == "") { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("请填入本月项目净利润数据"); + }); + return false; + } + if (parseFloat(settle) > parseFloat(budget)) { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("项目净利润结算总额不能高于预算总额"); + }); + return false; + } + return true; +}; + +var saleIncomeCashValid = function() { + var settle = $("input[name='saleIncomeCashSettleTotal']").val(); + var month = $("input[name='saleIncomeCash']").val(); + var budget = $("input[name='saleIncomeCashBudgetTotal']").val(); + if (month == "") { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("请填入本月销售商品、提供劳务收到的现金数据"); + }); + return false; + } + if (parseFloat(settle) > parseFloat(budget)) { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("销售商品、提供劳务收到的现金结算总额不能高于预算总额"); + }); + return false; + } + return true; +}; + +var earnestMoneyIncomeValid = function() { + var settle = $("input[name='earnestMoneyIncomeSettleTotal']").val(); + var month = $("input[name='earnestMoneyIncome']").val(); + var budget = $("input[name='earnestMoneyIncomeBudgetTotal']").val(); + if (month == "") { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("请填入本月收到其他与经营活动有关的现金数据"); + }); + return false; + } + if (parseFloat(settle) > parseFloat(budget)) { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("收到其他与经营活动有关的现金结算总额不能高于预算总额"); + }); + return false; + } + return true; +}; + +var purchaseCostValid = function() { + var settle = $("input[name='purchaseCostSettleTotal']").val(); + var month = $("input[name='purchaseCost']").val(); + var budget = $("input[name='purchaseCostBudgetTotal']").val(); + if (month == "") { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("请填入本月购买商品、接受劳务支付的现金数据"); + }); + return false; + } + if (parseFloat(settle) > parseFloat(budget)) { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("购买商品、接受劳务支付的现金结算总额不能高于预算总额"); + }); + return false; + } + return true; +}; + +var earnestMoneyCostValid = function() { + var settle = $("input[name='earnestMoneyCostSettleTotal']").val(); + var month = $("input[name='earnestMoneyCost']").val(); + var budget = $("input[name='earnestMoneyCostBudgetTotal']").val(); + if (month == "") { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("请填入本月支付其他与经营活动有关的现金数据"); + }); + return false; + } + if (parseFloat(settle) > parseFloat(budget)) { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("支付其他与经营活动有关的现金结算总额不能高于预算总额"); + }); + return false; + } + return true; +}; + +var financingCapitalInflowValid = function() { + var settle = $("input[name='financingCapitalInflowSettleTotal']").val(); + var month = $("input[name='financingCapitalInflow']").val(); + var budget = $("input[name='financingCapitalInflowBudgetTotal']").val(); + if (month == "") { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("请填入本月融资资金流入数据"); + }); + return false; + } + if (parseFloat(settle) > parseFloat(budget)) { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("融资资金流入结算总额不能高于预算总额"); + }); + return false; + } + return true; +}; + +var financingCapitalOutflowValid = function() { + var settle = $("input[name='financingCapitalOutflowSettleTotal']").val(); + var month = $("input[name='financingCapitalOutflow']").val(); + var budget = $("input[name='financingCapitalOutflowBudgetTotal']").val(); + if (month == "") { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("请填入本月还款资金流出数据"); + }); + return false; + } + if (parseFloat(settle) > parseFloat(budget)) { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("还款资金流出结算总额不能高于预算总额"); + }); + return false; + } + return true; +}; + +var financingCapitalCashflowValid = function() { + var settle = $("input[name='financingCapitalCashflowSettleTotal']").val(); + var month = $("input[name='financingCapitalCashflow']").val(); + var budget = $("input[name='financingCapitalCashflowBudgetTotal']").val(); + if (month == "") { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("请填入本月筹资活动产生的现金流量净额数据"); + }); + return false; + } + if (parseFloat(settle) > parseFloat(budget)) { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("筹资活动产生的现金流量净额结算总额不能高于预算总额"); + }); + return false; + } + return true; +}; + diff --git a/src/main/resources/templates/admin/project_approve.ftl b/src/main/resources/templates/admin/project_approve.ftl index 45a1fd4..9222619 100644 --- a/src/main/resources/templates/admin/project_approve.ftl +++ b/src/main/resources/templates/admin/project_approve.ftl @@ -1725,12 +1725,32 @@ +
+
+
+
+
+ 审核意见 +
+
+ <#list taskRecords as node> + ${node.assigneeName} : ${node.taskComment}    ${node.createTime} +
+ +
+
+
+
+
+
+ <#if project.creatorId!=project.approveId && adminId==project.approveId> +
@@ -1739,12 +1759,12 @@ - + <#-- - + --> - +<#-- - +--> diff --git a/src/main/resources/templates/admin/project_final_add.ftl b/src/main/resources/templates/admin/project_final_add.ftl index dec8984..5bceb38 100644 --- a/src/main/resources/templates/admin/project_final_add.ftl +++ b/src/main/resources/templates/admin/project_final_add.ftl @@ -218,7 +218,7 @@ - + @@ -226,7 +226,7 @@ - + @@ -234,8 +234,8 @@ / - - + + @@ -289,7 +289,7 @@ 经营活动产生的现金流量净额 - + 投资活动现金流入 @@ -307,7 +307,7 @@ 投资活动产生的现金流量净额 / - + 融资资金流入 @@ -325,13 +325,13 @@ 筹资活动产生的现金流量净额 - + 货币资金净增加额 - + 合计 @@ -360,7 +360,7 @@ var base = "${base}"; - + -<#-- --> + - + diff --git a/src/main/resources/templates/admin/project_settle_edit.ftl b/src/main/resources/templates/admin/project_settle_edit.ftl index 514ca01..3cf080f 100644 --- a/src/main/resources/templates/admin/project_settle_edit.ftl +++ b/src/main/resources/templates/admin/project_settle_edit.ftl @@ -25,7 +25,7 @@
项目结算表 / ${project.name}
-
+
    @@ -34,6 +34,7 @@
    +
    @@ -62,7 +63,7 @@ - + 收入 @@ -153,7 +154,8 @@ - + + 人力成本:${Utils.format(salary,'0')} 元 @@ -246,7 +248,7 @@ - + @@ -255,7 +257,7 @@ - + @@ -264,7 +266,7 @@ / - + @@ -327,7 +329,7 @@ 经营活动产生的现金流量净额 - + @@ -348,7 +350,7 @@ 投资活动产生的现金流量净额 / - + @@ -369,14 +371,14 @@ 筹资活动产生的现金流量净额 - + 货币资金净增加额 - + @@ -407,10 +409,11 @@ -<#-- --> + - + \ No newline at end of file diff --git a/src/main/resources/templates/admin/project_task_record_list.ftl b/src/main/resources/templates/admin/project_task_record_list.ftl index 00413ad..15b1ca2 100644 --- a/src/main/resources/templates/admin/project_task_record_list.ftl +++ b/src/main/resources/templates/admin/project_task_record_list.ftl @@ -28,8 +28,8 @@
    ${node.roleName}-${node.assigneeName}: - <#if node.taskIndex!=2 && node.taskStatus==2>审批通过 - <#if node.taskIndex!=2 && node.taskStatus==3>审批不通过 + <#if node.taskIndex!=2 && node.taskStatus==2>审核通过 + <#if node.taskIndex!=2 && node.taskStatus==3>审核不通过
    ${node.taskComment} diff --git a/src/main/resources/templates/admin/role_input.ftl b/src/main/resources/templates/admin/role_input.ftl index 8ca2322..040dbd4 100644 --- a/src/main/resources/templates/admin/role_input.ftl +++ b/src/main/resources/templates/admin/role_input.ftl @@ -34,6 +34,21 @@
    +
    +
    + *角色等级
    +
    + +
    +
    +
    +
    diff --git a/src/main/resources/templates/admin/role_list.ftl b/src/main/resources/templates/admin/role_list.ftl index 81fffcf..7bed83b 100644 --- a/src/main/resources/templates/admin/role_list.ftl +++ b/src/main/resources/templates/admin/role_list.ftl @@ -51,6 +51,7 @@ 角色名称 + 角色等级 是否启用 创建日期 最后更新日期 @@ -65,6 +66,19 @@ ${list.name!} + + <#if list.level ==1 > + 一级 + <#elseif list.level ==2> + 二级 + <#elseif list.level ==3> + 三级 + <#elseif list.level ==4> + 四级 + <#elseif list.level ==5> + 五级 + + <#if list.isEnable ==1 > 是 diff --git a/src/main/resources/templates/admin/windows.ftl b/src/main/resources/templates/admin/windows.ftl new file mode 100644 index 0000000..856fe32 --- /dev/null +++ b/src/main/resources/templates/admin/windows.ftl @@ -0,0 +1,44 @@ +<#assign base=request.contextPath /> +
    +
    +
    + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + +