diff --git a/src/main/java/cn/palmte/work/bean/FinalBean.java b/src/main/java/cn/palmte/work/bean/FinalBean.java index b3bc1a9..1f25154 100644 --- a/src/main/java/cn/palmte/work/bean/FinalBean.java +++ b/src/main/java/cn/palmte/work/bean/FinalBean.java @@ -21,26 +21,40 @@ public class FinalBean { */ private BigDecimal incomeServiceFinalTotal; + /** + * 获取所有收入决算总额 + * + * @return + */ + public BigDecimal getIncomeTotal() { + BigDecimal incomeDeviceFinalTotal = getIncomeDeviceFinalTotal(); + BigDecimal incomeEngineerFinalTotal = getIncomeEngineerFinalTotal(); + BigDecimal incomeServiceFinalTotal = getIncomeServiceFinalTotal(); + if (null == incomeDeviceFinalTotal || null == incomeEngineerFinalTotal || null == incomeServiceFinalTotal) { + return new BigDecimal(0); + } + return incomeDeviceFinalTotal.add(incomeEngineerFinalTotal).add(incomeServiceFinalTotal); + } //========================成本表================================ /** - *设备采购成本决算总额 + * 设备采购成本决算总额 */ private BigDecimal costPurchaseDeviceFinalTotal; /** - *施工采购成本决算总额 + * 施工采购成本决算总额 */ private BigDecimal costPurchaseBuildFinalTotal; /** - *服务采购成本决算总额 + * 服务采购成本决算总额 */ private BigDecimal costPurchaseServiceFinalTotal; /** - *其他采购成本决算总额 + * 其他采购成本决算总额 */ private BigDecimal costPurchaseOtherFinalTotal; @@ -54,6 +68,28 @@ public class FinalBean { */ private BigDecimal costOtherFinalTotal; + /** + * 获取所有成本决算总额 + * + * @return + */ + public BigDecimal getCostTotal() { + BigDecimal costPurchaseDeviceFinalTotal = getCostPurchaseDeviceFinalTotal(); + BigDecimal costPurchaseBuildFinalTotal = getCostPurchaseBuildFinalTotal(); + BigDecimal costPurchaseServiceFinalTotal = getCostPurchaseServiceFinalTotal(); + BigDecimal costPurchaseOtherFinalTotal = getCostPurchaseOtherFinalTotal(); + BigDecimal costProjectManageFinalTotal = getCostProjectManageFinalTotal(); + BigDecimal costOtherFinalTotal = getCostOtherFinalTotal(); + + if (null == costPurchaseDeviceFinalTotal || null == costPurchaseBuildFinalTotal || null == costPurchaseServiceFinalTotal + || null == costPurchaseOtherFinalTotal || null == costProjectManageFinalTotal || null == costOtherFinalTotal) { + return new BigDecimal(0); + } + + return costPurchaseDeviceFinalTotal.add(costPurchaseBuildFinalTotal).add(costPurchaseServiceFinalTotal) + .add(costPurchaseOtherFinalTotal).add(costProjectManageFinalTotal).add(costOtherFinalTotal); + } + //========================管理表================================ @@ -72,6 +108,23 @@ public class FinalBean { */ private BigDecimal costIncomeTaxFinalTotal; + /** + * 获取所有管理成本决算总额 + * + * @return + */ + public BigDecimal getCostManageTotal() { + BigDecimal costExpropriationFinalTotal = getCostExpropriationFinalTotal(); + BigDecimal costCompanyManageFinalTotal = getCostCompanyManageFinalTotal(); + BigDecimal costIncomeTaxFinalTotal = getCostIncomeTaxFinalTotal(); + + if (null == costExpropriationFinalTotal || null == costCompanyManageFinalTotal || null == costIncomeTaxFinalTotal) { + return new BigDecimal(0); + } + + return costExpropriationFinalTotal.add(costCompanyManageFinalTotal).add(costIncomeTaxFinalTotal); + } + //========================利润率计算表================================ @@ -109,11 +162,11 @@ public class FinalBean { /** * a销售商品、提供劳务收到的现金 - * */ + */ private BigDecimal saleIncomeCash; /** * b收到的税费返还 - * */ + */ private BigDecimal taxReturn; /** * c其他与经营活动有关的现金【保证金收入】 @@ -128,7 +181,7 @@ public class FinalBean { */ private BigDecimal taxCost; /** - *f支付其他与经营活动有关的现金 + * f支付其他与经营活动有关的现金 */ private BigDecimal earnestMoneyCost; /** @@ -157,7 +210,7 @@ public class FinalBean { */ private BigDecimal financingCapitalOutflow; /** - *m筹资活动产生的现金流量净额 + * m筹资活动产生的现金流量净额 * m=k-l */ private BigDecimal financingCapitalCashflow; @@ -167,6 +220,39 @@ public class FinalBean { */ private BigDecimal netIncreaseMonetaryFunds; + /** + * 获取所有现金流量决算总额 + * @return + */ + public BigDecimal getCashFluxTotal() { + BigDecimal saleIncomeCash = getSaleIncomeCash(); + BigDecimal taxReturn = getTaxReturn(); + BigDecimal earnestMoneyIncome = getEarnestMoneyIncome(); + BigDecimal purchaseCost = getPurchaseCost(); + BigDecimal taxCost = getTaxCost(); + BigDecimal earnestMoneyCost = getEarnestMoneyCost(); + BigDecimal netCashFlow = getNetCashFlow(); + BigDecimal cashInflowFromInvestingActivities = getCashInflowFromInvestingActivities(); + BigDecimal cashOutflowFromInvestingActivities = getCashOutflowFromInvestingActivities(); + BigDecimal netCashFromInvestingActivities = getNetCashFromInvestingActivities(); + BigDecimal financingCapitalInflow = getFinancingCapitalInflow(); + BigDecimal financingCapitalOutflow = getFinancingCapitalOutflow(); + BigDecimal financingCapitalCashflow = getFinancingCapitalCashflow(); + BigDecimal netIncreaseMonetaryFunds = getNetIncreaseMonetaryFunds(); + + if (null == saleIncomeCash || null == taxReturn || null == earnestMoneyIncome || null == purchaseCost || null == taxCost + || null == earnestMoneyCost || null == netCashFlow || null == cashInflowFromInvestingActivities || + null == cashOutflowFromInvestingActivities || null == netCashFromInvestingActivities || + null == financingCapitalInflow || null == financingCapitalOutflow || null == financingCapitalCashflow || null == netIncreaseMonetaryFunds) { + return new BigDecimal(0); + } + + return saleIncomeCash.add(taxReturn).add(earnestMoneyIncome).add(purchaseCost).add(taxCost).add(earnestMoneyCost) + .add(netCashFlow).add(cashInflowFromInvestingActivities).add(cashOutflowFromInvestingActivities).add(netCashFromInvestingActivities) + .add(financingCapitalInflow).add(financingCapitalOutflow).add(financingCapitalCashflow).add(netIncreaseMonetaryFunds); + } + + public BigDecimal getIncomeDeviceFinalTotal() { return incomeDeviceFinalTotal; } diff --git a/src/main/java/cn/palmte/work/controller/backend/ActProcInsController.java b/src/main/java/cn/palmte/work/controller/backend/ActProcInsController.java index c0bbd04..3cb6a07 100644 --- a/src/main/java/cn/palmte/work/controller/backend/ActProcInsController.java +++ b/src/main/java/cn/palmte/work/controller/backend/ActProcInsController.java @@ -94,7 +94,7 @@ public class ActProcInsController extends BaseController { variables.put(ActConstant.START_PROCESS_USERID, InterfaceUtil.getAdminId()); String procInsId = null; try { - procInsId = actProcInsService.startProcessInstance(procDefKey, variables); + procInsId = actProcInsService.startProcessInstance(procDefKey, "", variables); } catch (Exception e) { logger.error("", e); return ResponseMsg.buildFailedMsg("流程启动失败:" + e.getMessage()); 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 928ef85..9b4547d 100644 --- a/src/main/java/cn/palmte/work/controller/backend/ProjectController.java +++ b/src/main/java/cn/palmte/work/controller/backend/ProjectController.java @@ -4,7 +4,9 @@ import cn.palmte.work.bean.*; import cn.palmte.work.model.*; import cn.palmte.work.service.ProjectBudgetService; import cn.palmte.work.service.ProjectEstimateService; +import cn.palmte.work.service.ProjectFinalSevice; import cn.palmte.work.service.ProjectService; +import cn.palmte.work.service.*; import cn.palmte.work.utils.FreeMarkerUtil; import cn.palmte.work.utils.InterfaceUtil; import cn.palmte.work.utils.Utils; @@ -19,10 +21,7 @@ import org.springframework.format.datetime.DateFormatter; import org.springframework.stereotype.Controller; import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.*; -import top.jfunc.common.db.bean.Page; -import top.jfunc.common.utils.CollectionUtil; -import javax.persistence.criteria.CriteriaBuilder; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.ArrayList; @@ -48,6 +47,14 @@ public class ProjectController extends BaseController { private ProjectEstimateService projectEstimateService; @Autowired private ProjectBudgetService projectBudgetService; + @Autowired + private ProjectTaskRecordService projectTaskRecordService; + @Autowired + private ActProcInsService actProcInsService; + @Autowired + private ProjectInstanceRelationRepository projectInstanceRelationRepository; + @Autowired + private ProjectFinalSevice projectFinalSevice; /** * 项目列表 @@ -334,9 +341,11 @@ public class ProjectController extends BaseController { model.put("underwrittenPlanStatistic", projectBudgetService.getProjectUnderwrittenPlanStatisticBean(projectBudgetPlanDetails)); //现金表 model.put("cashFlowBean", projectBudgetService.getCashFlowBean(project, projectBudgetPlanDetails)); - model.put("finalBean", new FinalBean()); + 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_detail"; } @@ -370,12 +379,56 @@ public class ProjectController extends BaseController { model.put("underwrittenPlanStatistic", projectBudgetService.getProjectUnderwrittenPlanStatisticBean(projectBudgetPlanDetails)); //现金表 model.put("cashFlowBean", projectBudgetService.getCashFlowBean(project, projectBudgetPlanDetails)); - model.put("finalBean", new FinalBean()); + model.put("finalBean", projectFinalSevice.getFinal(project)); //freemarker可以利用的静态方法 model.put("Utils", FreeMarkerUtil.fromStaticPackage("cn.palmte.work.utils.Utils")); return "admin/project_approve"; } + /** + * 审批完成任务 + * @param projectId + * @param json + * @return + */ + @ResponseBody + @RequestMapping("/completeTask/{projectId}") + public ResponseMsg completeTask(@PathVariable int projectId, @RequestBody String json) { + return projectService.completeTask(projectId, json); + } + + + /** + * 查看审核流程 + * @param projectId + * @param model + * @return + */ + @RequestMapping("/taskRecords/{projectId}") + public String taskRecords(@PathVariable int projectId, Map model) { + model.put("projectId", projectId); + List list = projectTaskRecordService.list(projectId); + if (list != null && !list.isEmpty()) { + model.put("list", list); + } + return "admin/project_task_record_list"; + } + + /** + * 流程实列图片 + * + * @param response + * @param projectId + * @throws Exception + */ + @RequestMapping("/procInsPng/{projectId}") + public void png(HttpServletResponse response, @PathVariable("projectId") int projectId) throws Exception { + List relationList = projectInstanceRelationRepository.findByProjectIdOrderByCreateTimeDesc(projectId); + if (relationList == null || relationList.isEmpty()) { + return; + } + actProcInsService.createProcInsPng(response, relationList.get(0).getProcessInsId()); + } @InitBinder public void initBinder(WebDataBinder webDataBinder) { 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 a013930..48441d8 100644 --- a/src/main/java/cn/palmte/work/controller/backend/ProjectFinalController.java +++ b/src/main/java/cn/palmte/work/controller/backend/ProjectFinalController.java @@ -52,9 +52,9 @@ public class ProjectFinalController extends BaseController{ } @RequestMapping("/save") - public void estimateAddSave(Project project, FinalBean finalBean, Map model) { + public String estimateAddSave(Project project, FinalBean finalBean, Map model) { projectFinalSevice.save(project,finalBean); - + return "redirect:/project/list"; } } diff --git a/src/main/java/cn/palmte/work/model/ProjectFinalCashFluxRepository.java b/src/main/java/cn/palmte/work/model/ProjectFinalCashFluxRepository.java index 684891a..68055e7 100644 --- a/src/main/java/cn/palmte/work/model/ProjectFinalCashFluxRepository.java +++ b/src/main/java/cn/palmte/work/model/ProjectFinalCashFluxRepository.java @@ -2,6 +2,10 @@ package cn.palmte.work.model; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.List; + public interface ProjectFinalCashFluxRepository extends JpaRepository { + List findByProjectIdEquals(int id); + } diff --git a/src/main/java/cn/palmte/work/model/ProjectFinalCostManageRepository.java b/src/main/java/cn/palmte/work/model/ProjectFinalCostManageRepository.java index cee64f2..0f9d41e 100644 --- a/src/main/java/cn/palmte/work/model/ProjectFinalCostManageRepository.java +++ b/src/main/java/cn/palmte/work/model/ProjectFinalCostManageRepository.java @@ -2,6 +2,10 @@ package cn.palmte.work.model; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.List; + public interface ProjectFinalCostManageRepository extends JpaRepository { + List findByProjectIdEquals(int id); + } diff --git a/src/main/java/cn/palmte/work/model/ProjectFinalCostRepository.java b/src/main/java/cn/palmte/work/model/ProjectFinalCostRepository.java index 99da84c..3357106 100644 --- a/src/main/java/cn/palmte/work/model/ProjectFinalCostRepository.java +++ b/src/main/java/cn/palmte/work/model/ProjectFinalCostRepository.java @@ -2,6 +2,10 @@ package cn.palmte.work.model; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.List; + public interface ProjectFinalCostRepository extends JpaRepository { + List findByProjectIdEquals(int id); + } diff --git a/src/main/java/cn/palmte/work/model/ProjectFinalIncomeReposiry.java b/src/main/java/cn/palmte/work/model/ProjectFinalIncomeReposiry.java index 509ca31..55517d9 100644 --- a/src/main/java/cn/palmte/work/model/ProjectFinalIncomeReposiry.java +++ b/src/main/java/cn/palmte/work/model/ProjectFinalIncomeReposiry.java @@ -2,6 +2,8 @@ package cn.palmte.work.model; import org.springframework.data.jpa.repository.JpaRepository; -public interface ProjectFinalIncomeReposiry extends JpaRepository { +import java.util.List; +public interface ProjectFinalIncomeReposiry extends JpaRepository { + List findByProjectIdEquals(int id); } diff --git a/src/main/java/cn/palmte/work/model/ProjectInstanceRelationRepository.java b/src/main/java/cn/palmte/work/model/ProjectInstanceRelationRepository.java index a51082c..59128d4 100644 --- a/src/main/java/cn/palmte/work/model/ProjectInstanceRelationRepository.java +++ b/src/main/java/cn/palmte/work/model/ProjectInstanceRelationRepository.java @@ -9,4 +9,6 @@ public interface ProjectInstanceRelationRepository extends JpaRepository findAllByProjectIdEqualsAndProcessTypeEqualsOrderByCreateTimeDesc(int projectId, String processType); + + List findByProjectIdOrderByCreateTimeDesc(int projectId); } diff --git a/src/main/java/cn/palmte/work/service/ActCallbackScript.java b/src/main/java/cn/palmte/work/service/ActCallbackScript.java index ed6d7bc..8a75982 100644 --- a/src/main/java/cn/palmte/work/service/ActCallbackScript.java +++ b/src/main/java/cn/palmte/work/service/ActCallbackScript.java @@ -1,13 +1,8 @@ package cn.palmte.work.service; -import cn.palmte.work.bean.ApproveStatusEnum; -import cn.palmte.work.config.activiti.ActConstant; -import cn.palmte.work.utils.ActUtil; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.*; @@ -19,27 +14,15 @@ import java.util.*; @Service public class ActCallbackScript { private static final Logger logger = LoggerFactory.getLogger(ActCallbackScript.class); - @Autowired - private ActUtil actUtil; - @Autowired - private ProjectInstanceService projectInstanceService; + /** - * 更新流程审批通过 + * 示例 * * @param map */ - public void updateApproveStatus(Map map) { + public void demo(Map map) { logger.info("--- updateApproveStatus--- : {} ", map); - //String startUserId = (String) map.get(ActConstant.START_PROCESS_USERID); - String procInsId = (String) map.get(ActConstant.PROC_INS_ID); - String procDefKey = (String) map.get(ActConstant.PROC_DEF_KEY); - logger.info(" updateApproveStatus procInsId:{}, procDefKey:{}", procInsId, procDefKey); - - int projectId = actUtil.getProjectId(procInsId); - if (projectId > 0) { - projectInstanceService.updateApproveStatus(projectId, ApproveStatusEnum.APPROVAL_PASSED, procDefKey); - } } diff --git a/src/main/java/cn/palmte/work/service/ActListenerService.java b/src/main/java/cn/palmte/work/service/ActListenerService.java index 1b35b6c..3a44ddd 100644 --- a/src/main/java/cn/palmte/work/service/ActListenerService.java +++ b/src/main/java/cn/palmte/work/service/ActListenerService.java @@ -2,9 +2,13 @@ package cn.palmte.work.service; import cn.palmte.work.config.activiti.ActConstant; +import cn.palmte.work.utils.ActUtil; import com.alibaba.fastjson.JSONObject; +import org.activiti.engine.RuntimeService; import org.activiti.engine.delegate.DelegateExecution; import org.activiti.engine.delegate.DelegateTask; +import org.activiti.engine.runtime.ProcessInstance; +import org.activiti.engine.runtime.ProcessInstanceQuery; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -30,14 +34,20 @@ public class ActListenerService { @Autowired private ProjectInstanceService projectInstanceService; + @Autowired + private RuntimeService runtimeService; + + @Autowired + private ActUtil actUtil; + /** - * 节点创建监听 动态设置审批人 + * 任务节点创建后监听 动态设置审批人 * * @param delegateTask * @throws Exception */ public void create(DelegateTask delegateTask) throws Exception { - logger.info("--- {}", JSONObject.toJSONString(delegateTask)); + logger.info("--节点创建后监听-- name:{}, {}", delegateTask.getName(), JSONObject.toJSONString(delegateTask)); String procDefId = delegateTask.getProcessDefinitionId(); String procInsId = delegateTask.getProcessInstanceId(); @@ -45,41 +55,53 @@ public class ActListenerService { List candidateUsers = actTaskDefService.findCandidateUsers(procDefId, procInsId, taskDefKey); logger.info("addCandidateUsers : {}", candidateUsers); - - Object projectIdObj = delegateTask.getVariable(ActConstant.KEY_PROJECT_ID); - logger.info("projectIdObj : {}", projectIdObj); - - if (candidateUsers != null && !candidateUsers.isEmpty() && projectIdObj != null) { - try { - int adminId = Integer.parseInt(candidateUsers.get(0)); - projectInstanceService.updateApprover((Integer) projectIdObj, adminId); - } catch (Exception e) { - logger.error("", e); - } + ProcessInstanceQuery processInstanceQuery = runtimeService.createProcessInstanceQuery(); + List list = processInstanceQuery.list(); + System.out.println(list); + ProcessInstance processInstance = processInstanceQuery.processInstanceId(delegateTask.getProcessInstanceId()).singleResult(); + if (actUtil.isProjectProcessIns(processInstance)) { + updateProjectApprover(candidateUsers, processInstance); } delegateTask.addCandidateUsers(candidateUsers); } - /*public void multiTaskcreate(DelegateTask delegateTask) throws Exception { - logger.info("--- {}", JSONObject.toJSONString(delegateTask)); - - String procDefId = delegateTask.getProcessDefinitionId(); - String procInsId = delegateTask.getProcessInstanceId(); - String taskDefKey = delegateTask.getTaskDefinitionKey(); - Set candidateUsers = actTaskDefService.findCandidateUsers(procDefId, procInsId, taskDefKey); - logger.info("addCandidateUsers : {}", candidateUsers); - delegateTask.addCandidateUsers(candidateUsers); - }*/ - - - public List multipleInstanceTask(DelegateExecution delegateExecution) throws Exception { + /** + * 多实例任务查询办理人 + * + * @param delegateExecution + * @throws Exception + */ + public List getMultiCandidateUsers(DelegateExecution delegateExecution) throws Exception { + logger.info("--多实例任务查询办理人-- eventName:{}, {}", delegateExecution.getEventName(), delegateExecution); String procInsId = delegateExecution.getProcessInstanceId(); String procDefId = delegateExecution.getProcessDefinitionId(); String taskDefKey = delegateExecution.getCurrentActivityId(); - return actTaskDefService.findCandidateUsers(procDefId, procInsId, taskDefKey); + List candidateUsers = actTaskDefService.findCandidateUsers(procDefId, procInsId, taskDefKey); + logger.info("--getMultiCandidateUsers-- {}", candidateUsers); + return candidateUsers; } + + /** + * 更新项目审批人 四算业务需要 + * + * @param candidateUsers + * @param processInstance + */ + private void updateProjectApprover(List candidateUsers, ProcessInstance processInstance) { + String businessKey = processInstance.getBusinessKey(); + logger.info("businessKey : {}", businessKey); + + if (candidateUsers != null && !candidateUsers.isEmpty() && businessKey != null) { + try { + int adminId = Integer.parseInt(candidateUsers.get(0)); + projectInstanceService.updateApprover(Integer.parseInt(businessKey), adminId); + } catch (Exception e) { + logger.error("", e); + } + } + } } diff --git a/src/main/java/cn/palmte/work/service/ActModelService.java b/src/main/java/cn/palmte/work/service/ActModelService.java index e5aa4e4..ade2cb9 100644 --- a/src/main/java/cn/palmte/work/service/ActModelService.java +++ b/src/main/java/cn/palmte/work/service/ActModelService.java @@ -114,6 +114,7 @@ public class ActModelService { BpmnJsonConverter jsonConverter = new BpmnJsonConverter(); BpmnModel model = jsonConverter.convertToBpmnModel(modelNode); + //任务创建后监听器 ActivitiListener activitiListener = new ActivitiListener(); activitiListener.setEvent(TaskListener.EVENTNAME_CREATE); activitiListener.setImplementation("${actListenerService.create(task)}"); @@ -135,20 +136,25 @@ public class ActModelService { taskDef = new ActTaskDef(); taskDef.setTaskName(element.getName()); taskDef.setTaskKey(element.getId()); + MultiInstanceLoopCharacteristics loopCharacteristics = userTaskElement.getLoopCharacteristics(); - if (loopCharacteristics != null) { - taskDef.setTaskType(ActConstant.TASK_TYPE_SINGE); - loopCharacteristics.setInputDataItem("${actListenerService.multipleInstanceTask(execution)}"); + if (loopCharacteristics != null) { //多实列 + loopCharacteristics.setInputDataItem("${actListenerService.getMultiCandidateUsers(execution)}"); loopCharacteristics.setElementVariable("assignee"); userTaskElement.setAssignee("${assignee}"); + + taskDef.setTaskType(ActConstant.TASK_TYPE_MULTI); }else { userTaskElement.setTaskListeners(activitiListenerList); + + taskDef.setTaskType(ActConstant.TASK_TYPE_SINGE); } - if (i == 1) { + if (i == 1) {//画流程图时,要保证第一个用户任务一定要先画 taskDef.setTaskIndex(ActConstant.TASK_INDEX_FIRST_USER_TASK); first = taskDef; } + taskList.add(taskDef); } i ++; diff --git a/src/main/java/cn/palmte/work/service/ActProcInsService.java b/src/main/java/cn/palmte/work/service/ActProcInsService.java index 6ac7e85..891650b 100644 --- a/src/main/java/cn/palmte/work/service/ActProcInsService.java +++ b/src/main/java/cn/palmte/work/service/ActProcInsService.java @@ -2,6 +2,7 @@ package cn.palmte.work.service; import cn.palmte.work.bean.ApproveStatusEnum; +import cn.palmte.work.config.activiti.ActConstant; import cn.palmte.work.model.ActTaskDefRepository; import cn.palmte.work.pojo.ActProcIns; import cn.palmte.work.utils.ActUtil; @@ -71,7 +72,7 @@ public class ActProcInsService { * @param variables * @return */ - public String startProcessInstance(String procDefKey, Map variables) throws Exception { + public String startProcessInstance(String procDefKey, String businessKey, Map variables) throws Exception { List list = repositoryService.createProcessDefinitionQuery().processDefinitionKey(procDefKey).active().orderByProcessDefinitionVersion().desc().list(); if (list == null || list.isEmpty()) { throw new Exception("procDefKey(" + procDefKey + ")未定义"); @@ -80,8 +81,10 @@ public class ActProcInsService { //取最新版本的流程定义进行启动流程实列 ProcessDefinition processDefinition = list.get(0); + String adminId = InterfaceUtil.getAdminId() + ""; + variables.put(ActConstant.START_PROCESS_USERID, adminId); //启动流程 - ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefinition.getId(), variables); + ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefinition.getId(), businessKey, variables); String procInsId = processInstance.getProcessInstanceId(); Task task = taskService.createTaskQuery().processInstanceId(procInsId).singleResult(); @@ -90,18 +93,18 @@ public class ActProcInsService { } //设置发起人为办理人 然后完成任务 任务转入下一个审批节点 - String assignee = InterfaceUtil.getAdminId() + ""; - task.setAssignee(assignee); + task.setAssignee(adminId); String taskId = task.getId(); String comment = "提交" + processDefinition.getName(); - Authentication.setAuthenticatedUserId(assignee); + Authentication.setAuthenticatedUserId(adminId); taskService.addComment(taskId, procInsId, comment); taskService.complete(taskId); - actTaskDefRepository.updateHiTaskAssign(assignee, procInsId, taskId); - actTaskDefRepository.updateHiActAssign(assignee, procInsId, taskId); - projectTaskRecordService.saveTaskRecord(task, ApproveStatusEnum.APPROVAL_PENDING.getApproveStatus(), comment); + if (actUtil.isProjectProcessIns(processInstance)) { + projectTaskRecordService.saveTaskRecord(Integer.parseInt(processInstance.getBusinessKey()), + task, ApproveStatusEnum.APPROVAL_PENDING.getApproveStatus(), comment); + } return processInstance.getId(); } diff --git a/src/main/java/cn/palmte/work/service/ActTaskDefService.java b/src/main/java/cn/palmte/work/service/ActTaskDefService.java index d55c265..05abc07 100644 --- a/src/main/java/cn/palmte/work/service/ActTaskDefService.java +++ b/src/main/java/cn/palmte/work/service/ActTaskDefService.java @@ -11,6 +11,7 @@ import com.alibaba.fastjson.JSONObject; import org.activiti.engine.*; import org.activiti.engine.impl.identity.Authentication; import org.activiti.engine.impl.persistence.entity.TaskEntity; +import org.activiti.engine.runtime.ProcessInstance; import org.activiti.engine.task.Task; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; @@ -42,6 +43,8 @@ public class ActTaskDefService { private ActUtil actUtil; @Autowired private ProjectInstanceService projectInstanceService; + @Autowired + private RuntimeService runtimeService; /** @@ -63,22 +66,22 @@ public class ActTaskDefService { Authentication.setAuthenticatedUserId(userId); taskService.addComment(taskId, procInsId, message); - actTaskDefRepository.updateHiTaskAssign(userId, procInsId, taskId); - actTaskDefRepository.updateHiActAssign(userId, procInsId, taskId); - Task currentTask = taskService.createTaskQuery().taskId(taskId).singleResult(); ActTaskDef actTaskDef = findFirstByProcDefIdAndTaskKey(currentTask.getProcessDefinitionId(), currentTask.getTaskDefinitionKey()); + ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(procInsId).singleResult(); + taskService.setAssignee(taskId, userId); if (ActConstant.TASK_TYPE_SINGE == actTaskDef.getTaskType()) { - //或签处理 - handleSinge(taskId, procInsId, type, userId, actTaskDef); + handleSinge(processInstance, taskId, type, actTaskDef); } else if (ActConstant.TASK_TYPE_MULTI == actTaskDef.getTaskType()) { - //会签处理 - handleMulti(taskId, procInsId, type, userId, actTaskDef); + //多实列 会签处理 + handleMulti(processInstance, taskId, type, actTaskDef); } - //保存审批记录 - projectTaskRecordService.saveTaskRecord(currentTask, type, message); + if (actUtil.isProjectProcessIns(processInstance)) { + //保存审批记录 + projectTaskRecordService.saveTaskRecord(Integer.parseInt(processInstance.getBusinessKey()), currentTask, type, message); + } } @@ -95,9 +98,9 @@ public class ActTaskDefService { List assignUserList; for (Task task : taskList) { assignUserList = actUtil.getAssignUserList(task.getId()); - if (assignUserList.contains(String.valueOf(adminId))) { - completeTask(task.getId(), procInsId, comment, type); - } + //if (assignUserList.contains(String.valueOf(adminId))) { + completeTask(task.getId(), procInsId, comment, type); + //} } } @@ -105,27 +108,24 @@ public class ActTaskDefService { * 会签处理 * * @param taskId - * @param procInsId + * @param processInstance * @param type - * @param userId * @param actTaskDef */ - private void handleMulti(String taskId, String procInsId, int type, String userId, ActTaskDef actTaskDef) { - /* Double instanceCount = Double.parseDouble(ActUtil.filterNullToZero(taskService.getVariable(taskId, ActConstant.NUMBER_OF_INSTANCES))); //会签任务总数 - Double instanceActiveCount = Double.parseDouble(ActUtil.filterNullToZero(taskService.getVariable(taskId, ActConstant.NUMBER_OF_ACTIVE_INSTANCES))); //活动的会签任务数 - Double instanceCompleteCount = Double.parseDouble(ActUtil.filterNullToZero(taskService.getVariable(taskId, ActConstant.NUMBER_OF_COMPLETED_INSTANCES))); //完成会签任务数*/ - + private void handleMulti(ProcessInstance processInstance, String taskId, int type, ActTaskDef actTaskDef) { if (ApproveStatusEnum.APPROVAL_UNPASS.getApproveStatus() == type) { //一个人驳回 整个任务节点驳回 - List taskList = taskService.createTaskQuery().processInstanceId(procInsId).list(); + List taskList = taskService.createTaskQuery().processInstanceId(processInstance.getId()).list(); for (int i = 0; i < taskList.size(); i++) { TaskEntity taskEntity = (TaskEntity) taskList.get(i); if (!taskId.equals(taskEntity.getId())) { - taskEntity.setProcessInstanceId(null); + /* taskEntity.setProcessInstanceId(null); taskEntity.setExecutionId(null); - taskService.saveTask(taskEntity); - taskService.addComment(taskEntity.getId(), procInsId, "会签驳回,任务失效"); - taskService.deleteTask(taskEntity.getId(), false); // 不删除历史记录 + taskService.saveTask(taskEntity);*/ + + taskService.addComment(taskEntity.getId(), processInstance.getId(), "会签驳回,任务自动失效"); + taskService.complete(taskEntity.getId()); + //taskService.deleteTask(taskEntity.getId(), false); // 不删除历史记录 } } @@ -141,25 +141,28 @@ public class ActTaskDefService { * 或签处理 * * @param taskId - * @param procInsId + * @param processInstance * @param type - * @param userId * @param actTaskDef */ - private void handleSinge(String taskId, String procInsId, int type, String userId, ActTaskDef actTaskDef) { + private void handleSinge(ProcessInstance processInstance, String taskId, int type, ActTaskDef actTaskDef) { + String procDefKey = actTaskDef.getProcDefKey(); if (ApproveStatusEnum.APPROVAL_PASSED.getApproveStatus() == type) { //审批通过 - taskService.setAssignee(taskId, userId); taskService.complete(taskId); //执行配置的审批通过脚本 int endScript = actTaskDef.getEndScript(); if (endScript != 0) { - actUtil.invokeEventScript(endScript, procInsId, actTaskDef); + actUtil.invokeEventScript(endScript, processInstance.getId(), actTaskDef); } else { logger.info("未配置审批通过脚本 task:{}", actTaskDef.getTaskName()); } + if (actUtil.isProjectProcessIns(procDefKey)) { + updateProjectPassed(processInstance, actTaskDef, procDefKey); + } + } else if (ApproveStatusEnum.APPROVAL_UNPASS.getApproveStatus() == type) { //驳回 String rollbackTaskKey = actTaskDef.getRollbackTaskKey(); @@ -168,19 +171,31 @@ public class ActTaskDefService { //执行配置的驳回脚本 int rollbackScript = actTaskDef.getRollbackScript(); if (rollbackScript != 0) { - actUtil.invokeEventScript(rollbackScript, procInsId, actTaskDef); + actUtil.invokeEventScript(rollbackScript, processInstance.getId(), actTaskDef); } else { logger.info("未配置驳回脚本 task:{}", actTaskDef.getTaskName()); } - int projectId = actUtil.getProjectId(procInsId); - if (projectId > 0) { - projectInstanceService.updateApproveStatus(projectId, ApproveStatusEnum.APPROVAL_UNPASS, actTaskDef.getProcDefKey()); + if (actUtil.isProjectProcessIns(procDefKey)) { + projectInstanceService.updateApproveStatus(Integer.parseInt(processInstance.getBusinessKey()), ApproveStatusEnum.APPROVAL_UNPASS, procDefKey); } } } + private void updateProjectPassed(ProcessInstance processInstance, ActTaskDef actTaskDef, String procDefKey) { + if (ActConstant.PROCESS_DEFKEY_FINAL.equals(procDefKey)) { + if ("财务总监".equals(actTaskDef.getTaskName())) { + projectInstanceService.updateApproveStatus(Integer.parseInt(processInstance.getBusinessKey()), ApproveStatusEnum.APPROVAL_PASSED, procDefKey); + } + } else { + if ("执行董事".equals(actTaskDef.getTaskName())) { + projectInstanceService.updateApproveStatus(Integer.parseInt(processInstance.getBusinessKey()), ApproveStatusEnum.APPROVAL_PASSED, procDefKey); + } + } + + } + /** * 审批过程任务查询 * diff --git a/src/main/java/cn/palmte/work/service/ProjectFinalSevice.java b/src/main/java/cn/palmte/work/service/ProjectFinalSevice.java index 85980b6..ecb1aa4 100644 --- a/src/main/java/cn/palmte/work/service/ProjectFinalSevice.java +++ b/src/main/java/cn/palmte/work/service/ProjectFinalSevice.java @@ -7,6 +7,8 @@ import cn.palmte.work.bean.FinalBean; import cn.palmte.work.model.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import top.jfunc.common.utils.CollectionUtil; import java.math.BigDecimal; import java.util.ArrayList; @@ -33,6 +35,7 @@ public class ProjectFinalSevice { @Autowired private ProjectBudgetService projectBudgetService; + @Transactional public void save(Project project, FinalBean finalBean) { //预算表数据 EstimateBean estimate = projectEstimateService.getEstimate(project); @@ -185,7 +188,7 @@ public class ProjectFinalSevice { projectFinalCashFlux1.setBudgetTotalCashFlux(cashFlowBean.getSaleIncomeCash()); projectFinalCashFlux1.setFinalTotalCashFlux(new BigDecimal(0)); projectFinalCashFlux1.setFinalTotalCashFlux(finalBean.getSaleIncomeCash()); - list.add(projectFinalCashFlux1); + projectFinalCashFluxRepository.saveAndFlush(projectFinalCashFlux1); ProjectFinalCashFlux projectFinalCashFlux2 = new ProjectFinalCashFlux(); projectFinalCashFlux2.setProjectId(project.getId()); @@ -193,7 +196,7 @@ public class ProjectFinalSevice { projectFinalCashFlux2.setBudgetTotalCashFlux(cashFlowBean.getTaxReturn()); projectFinalCashFlux2.setFinalTotalCashFlux(new BigDecimal(0)); projectFinalCashFlux2.setFinalTotalCashFlux(finalBean.getTaxReturn()); - list.add(projectFinalCashFlux2); + projectFinalCashFluxRepository.saveAndFlush(projectFinalCashFlux2); ProjectFinalCashFlux projectFinalCashFlux3 = new ProjectFinalCashFlux(); projectFinalCashFlux3.setProjectId(project.getId()); @@ -201,7 +204,7 @@ public class ProjectFinalSevice { projectFinalCashFlux3.setBudgetTotalCashFlux(cashFlowBean.getEarnestMoneyIncome()); projectFinalCashFlux3.setFinalTotalCashFlux(new BigDecimal(0)); projectFinalCashFlux3.setFinalTotalCashFlux(finalBean.getEarnestMoneyIncome()); - list.add(projectFinalCashFlux3); + projectFinalCashFluxRepository.saveAndFlush(projectFinalCashFlux3); ProjectFinalCashFlux projectFinalCashFlux4 = new ProjectFinalCashFlux(); projectFinalCashFlux4.setProjectId(project.getId()); @@ -209,7 +212,7 @@ public class ProjectFinalSevice { projectFinalCashFlux4.setBudgetTotalCashFlux(cashFlowBean.getPurchaseCost()); projectFinalCashFlux4.setFinalTotalCashFlux(new BigDecimal(0)); projectFinalCashFlux4.setFinalTotalCashFlux(finalBean.getPurchaseCost()); - list.add(projectFinalCashFlux4); + projectFinalCashFluxRepository.saveAndFlush(projectFinalCashFlux4); ProjectFinalCashFlux projectFinalCashFlux5 = new ProjectFinalCashFlux(); projectFinalCashFlux5.setProjectId(project.getId()); @@ -217,7 +220,7 @@ public class ProjectFinalSevice { projectFinalCashFlux5.setBudgetTotalCashFlux(cashFlowBean.getTaxCost()); projectFinalCashFlux5.setFinalTotalCashFlux(new BigDecimal(0)); projectFinalCashFlux5.setFinalTotalCashFlux(finalBean.getTaxCost()); - list.add(projectFinalCashFlux5); + projectFinalCashFluxRepository.saveAndFlush(projectFinalCashFlux5); ProjectFinalCashFlux projectFinalCashFlux6 = new ProjectFinalCashFlux(); projectFinalCashFlux6.setProjectId(project.getId()); @@ -225,7 +228,7 @@ public class ProjectFinalSevice { projectFinalCashFlux6.setBudgetTotalCashFlux(cashFlowBean.getEarnestMoneyCost()); projectFinalCashFlux6.setFinalTotalCashFlux(new BigDecimal(0)); projectFinalCashFlux6.setFinalTotalCashFlux(finalBean.getEarnestMoneyCost()); - list.add(projectFinalCashFlux6); + projectFinalCashFluxRepository.saveAndFlush(projectFinalCashFlux6); ProjectFinalCashFlux projectFinalCashFlux7 = new ProjectFinalCashFlux(); projectFinalCashFlux7.setProjectId(project.getId()); @@ -233,7 +236,7 @@ public class ProjectFinalSevice { projectFinalCashFlux7.setBudgetTotalCashFlux(cashFlowBean.getNetCashFlow()); projectFinalCashFlux7.setFinalTotalCashFlux(new BigDecimal(0)); projectFinalCashFlux7.setFinalTotalCashFlux(finalBean.getNetCashFlow()); - list.add(projectFinalCashFlux7); + projectFinalCashFluxRepository.saveAndFlush(projectFinalCashFlux7); ProjectFinalCashFlux projectFinalCashFlux8 = new ProjectFinalCashFlux(); projectFinalCashFlux8.setProjectId(project.getId()); @@ -241,7 +244,7 @@ public class ProjectFinalSevice { projectFinalCashFlux8.setBudgetTotalCashFlux(cashFlowBean.getCashInflowFromInvestingActivities()); projectFinalCashFlux8.setFinalTotalCashFlux(new BigDecimal(0)); projectFinalCashFlux8.setFinalTotalCashFlux(finalBean.getCashInflowFromInvestingActivities()); - list.add(projectFinalCashFlux8); + projectFinalCashFluxRepository.saveAndFlush(projectFinalCashFlux8); ProjectFinalCashFlux projectFinalCashFlux9 = new ProjectFinalCashFlux(); projectFinalCashFlux9.setProjectId(project.getId()); @@ -249,7 +252,7 @@ public class ProjectFinalSevice { projectFinalCashFlux9.setBudgetTotalCashFlux(cashFlowBean.getCashOutflowFromInvestingActivities()); projectFinalCashFlux9.setFinalTotalCashFlux(new BigDecimal(0)); projectFinalCashFlux9.setFinalTotalCashFlux(finalBean.getCashOutflowFromInvestingActivities()); - list.add(projectFinalCashFlux9); + projectFinalCashFluxRepository.saveAndFlush(projectFinalCashFlux9); ProjectFinalCashFlux projectFinalCashFlux10 = new ProjectFinalCashFlux(); projectFinalCashFlux10.setProjectId(project.getId()); @@ -257,7 +260,7 @@ public class ProjectFinalSevice { projectFinalCashFlux10.setBudgetTotalCashFlux(cashFlowBean.getNetCashFromInvestingActivities()); projectFinalCashFlux10.setFinalTotalCashFlux(new BigDecimal(0)); projectFinalCashFlux10.setFinalTotalCashFlux(finalBean.getNetCashFromInvestingActivities()); - list.add(projectFinalCashFlux10); + projectFinalCashFluxRepository.saveAndFlush(projectFinalCashFlux10); ProjectFinalCashFlux projectFinalCashFlux11 = new ProjectFinalCashFlux(); projectFinalCashFlux11.setProjectId(project.getId()); @@ -265,7 +268,7 @@ public class ProjectFinalSevice { projectFinalCashFlux11.setBudgetTotalCashFlux(cashFlowBean.getFinancingCapitalInflow()); projectFinalCashFlux11.setFinalTotalCashFlux(new BigDecimal(0)); projectFinalCashFlux11.setFinalTotalCashFlux(finalBean.getFinancingCapitalInflow()); - list.add(projectFinalCashFlux11); + projectFinalCashFluxRepository.saveAndFlush(projectFinalCashFlux11); ProjectFinalCashFlux projectFinalCashFlux12 = new ProjectFinalCashFlux(); projectFinalCashFlux12.setProjectId(project.getId()); @@ -273,7 +276,7 @@ public class ProjectFinalSevice { projectFinalCashFlux12.setBudgetTotalCashFlux(cashFlowBean.getFinancingCapitalOutflow()); projectFinalCashFlux12.setFinalTotalCashFlux(new BigDecimal(0)); projectFinalCashFlux12.setFinalTotalCashFlux(finalBean.getFinancingCapitalOutflow()); - list.add(projectFinalCashFlux12); + projectFinalCashFluxRepository.saveAndFlush(projectFinalCashFlux12); ProjectFinalCashFlux projectFinalCashFlux13 = new ProjectFinalCashFlux(); projectFinalCashFlux13.setProjectId(project.getId()); @@ -281,7 +284,7 @@ public class ProjectFinalSevice { projectFinalCashFlux13.setBudgetTotalCashFlux(cashFlowBean.getFinancingCapitalCashflow()); projectFinalCashFlux13.setFinalTotalCashFlux(new BigDecimal(0)); projectFinalCashFlux13.setFinalTotalCashFlux(finalBean.getFinancingCapitalCashflow()); - list.add(projectFinalCashFlux13); + projectFinalCashFluxRepository.saveAndFlush(projectFinalCashFlux13); ProjectFinalCashFlux projectFinalCashFlux14 = new ProjectFinalCashFlux(); projectFinalCashFlux14.setProjectId(project.getId()); @@ -289,10 +292,108 @@ public class ProjectFinalSevice { projectFinalCashFlux14.setBudgetTotalCashFlux(cashFlowBean.getNetIncreaseMonetaryFunds()); projectFinalCashFlux14.setFinalTotalCashFlux(new BigDecimal(0)); projectFinalCashFlux14.setFinalTotalCashFlux(finalBean.getNetIncreaseMonetaryFunds()); - list.add(projectFinalCashFlux14); + projectFinalCashFluxRepository.saveAndFlush(projectFinalCashFlux14); - projectFinalCashFluxRepository.save(list); } + public FinalBean getFinal(Project project) { + FinalBean finalBean = new FinalBean(); + List projectFinalIncomes = projectFinalIncomeReposiry.findByProjectIdEquals(project.getId()); + + if(CollectionUtil.isNotEmpty(projectFinalIncomes)){ + for (ProjectFinalIncome projectFinalIncome : projectFinalIncomes) { + if(ProjectFinalIncome.TYPE_DEVICE == projectFinalIncome.getType()){ + finalBean.setIncomeDeviceFinalTotal(projectFinalIncome.getFinalTotalIncome()); + }else if(ProjectFinalIncome.TYPE_ENGINEER == projectFinalIncome.getType()){ + finalBean.setIncomeEngineerFinalTotal(projectFinalIncome.getFinalTotalIncome()); + }else if(ProjectFinalIncome.TYPE_SERVICE == projectFinalIncome.getType()){ + finalBean.setIncomeServiceFinalTotal(projectFinalIncome.getFinalTotalIncome()); + } + } + } + + List projectFinalCosts = projectFinalCostRepository.findByProjectIdEquals(project.getId()); + if(CollectionUtil.isNotEmpty(projectFinalCosts)){ + for (ProjectFinalCost projectFinalCost : projectFinalCosts) { + if(ProjectFinalCost.TYPE_DEVICE == projectFinalCost.getType()){ + finalBean.setCostPurchaseDeviceFinalTotal(projectFinalCost.getFinalTotalCost()); + }else if(ProjectFinalCost.TYPE_BUILDING == projectFinalCost.getType()){ + finalBean.setCostPurchaseBuildFinalTotal(projectFinalCost.getFinalTotalCost()); + }else if(ProjectFinalCost.TYPE_SERVICE == projectFinalCost.getType()){ + finalBean.setCostPurchaseServiceFinalTotal(projectFinalCost.getFinalTotalCost()); + }else if(ProjectFinalCost.TYPE_OTHER == projectFinalCost.getType()){ + finalBean.setCostPurchaseOtherFinalTotal(projectFinalCost.getFinalTotalCost()); + }else if(ProjectFinalCost.TYPE_PROJECT_MANAGE == projectFinalCost.getType()){ + finalBean.setCostProjectManageFinalTotal(projectFinalCost.getFinalTotalCost()); + }else if (ProjectFinalCost.TYPE_OTHER_OTHER == projectFinalCost.getType()){ + finalBean.setCostOtherFinalTotal(projectFinalCost.getFinalTotalCost()); + } + } + } + + List projectFinalCostManages = projectFinalCostManageRepository.findByProjectIdEquals(project.getId()); + + if(CollectionUtil.isNotEmpty(projectFinalCostManages)){ + for (ProjectFinalCostManage projectFinalCostManage : projectFinalCostManages) { + if(ProjectFinalCostManage.TYPE_EXPROPRIATION == projectFinalCostManage.getType()){ + finalBean.setCostExpropriationFinalTotal(projectFinalCostManage.getFinalTotalManageCost()); + }else if(ProjectFinalCostManage.TYPE_COMPANY_MANAGE == projectFinalCostManage.getType()){ + finalBean.setCostCompanyManageFinalTotal(projectFinalCostManage.getFinalTotalManageCost()); + }else if(ProjectFinalCostManage.TYPE_INCOME_TAX == projectFinalCostManage.getType()){ + finalBean.setCostIncomeTaxFinalTotal(projectFinalCostManage.getFinalTotalManageCost()); + } + } + } + + + List projectFinalCashFluxes = projectFinalCashFluxRepository.findByProjectIdEquals(project.getId()); + if(CollectionUtil.isNotEmpty(projectFinalCashFluxes)){ + for (ProjectFinalCashFlux projectFinalCashFlux : projectFinalCashFluxes) { + if(ProjectFinalCashFlux.TYPE1 == projectFinalCashFlux.getType()){ + finalBean.setSaleIncomeCash(projectFinalCashFlux.getFinalTotalCashFlux()); + } + if(ProjectFinalCashFlux.TYPE2 == projectFinalCashFlux.getType()){ + finalBean.setTaxReturn(projectFinalCashFlux.getFinalTotalCashFlux()); + } + if(ProjectFinalCashFlux.TYPE3 == projectFinalCashFlux.getType()){ + finalBean.setEarnestMoneyIncome(projectFinalCashFlux.getFinalTotalCashFlux()); + } + if(ProjectFinalCashFlux.TYPE4 == projectFinalCashFlux.getType()){ + finalBean.setPurchaseCost(projectFinalCashFlux.getFinalTotalCashFlux()); + } + if(ProjectFinalCashFlux.TYPE5 == projectFinalCashFlux.getType()){ + finalBean.setTaxCost(projectFinalCashFlux.getFinalTotalCashFlux()); + } + if(ProjectFinalCashFlux.TYPE6 == projectFinalCashFlux.getType()){ + finalBean.setEarnestMoneyCost(projectFinalCashFlux.getFinalTotalCashFlux()); + } + if(ProjectFinalCashFlux.TYPE7 == projectFinalCashFlux.getType()){ + finalBean.setNetCashFlow(projectFinalCashFlux.getFinalTotalCashFlux()); + } + if(ProjectFinalCashFlux.TYPE8 == projectFinalCashFlux.getType()){ + finalBean.setCashInflowFromInvestingActivities(projectFinalCashFlux.getFinalTotalCashFlux()); + } + if(ProjectFinalCashFlux.TYPE9 == projectFinalCashFlux.getType()){ + finalBean.setCashOutflowFromInvestingActivities(projectFinalCashFlux.getFinalTotalCashFlux()); + } + if(ProjectFinalCashFlux.TYPE10 == projectFinalCashFlux.getType()){ + finalBean.setNetCashFromInvestingActivities(projectFinalCashFlux.getFinalTotalCashFlux()); + } + if(ProjectFinalCashFlux.TYPE11 == projectFinalCashFlux.getType()){ + finalBean.setFinancingCapitalInflow(projectFinalCashFlux.getFinalTotalCashFlux()); + } + if(ProjectFinalCashFlux.TYPE12 == projectFinalCashFlux.getType()){ + finalBean.setFinancingCapitalOutflow(projectFinalCashFlux.getFinalTotalCashFlux()); + } + if(ProjectFinalCashFlux.TYPE13 == projectFinalCashFlux.getType()){ + finalBean.setFinancingCapitalCashflow(projectFinalCashFlux.getFinalTotalCashFlux()); + } + if(ProjectFinalCashFlux.TYPE14 == projectFinalCashFlux.getType()){ + finalBean.setNetIncreaseMonetaryFunds(projectFinalCashFlux.getFinalTotalCashFlux()); + } + } + } + return finalBean; + } } diff --git a/src/main/java/cn/palmte/work/service/ProjectInstanceService.java b/src/main/java/cn/palmte/work/service/ProjectInstanceService.java index e81ec79..ef361a4 100644 --- a/src/main/java/cn/palmte/work/service/ProjectInstanceService.java +++ b/src/main/java/cn/palmte/work/service/ProjectInstanceService.java @@ -89,11 +89,9 @@ public class ProjectInstanceService { private void startProcess(Project project, Admin admin, String processDefkey) throws Exception { HashMap variables = new HashMap<>(); - variables.put(ActConstant.START_PROCESS_USERID, admin.getId()); - variables.put(ActConstant.KEY_PROJECT_ID, project.getId()); variables.put(ActConstant.KEY_PROJECT_TYPE, project.getType()); - - String processInstanceId = actProcInsService.startProcessInstance(processDefkey, variables); + String businessKey = String.valueOf(project.getId()); + String processInstanceId = actProcInsService.startProcessInstance(processDefkey, businessKey, variables); //保存流程实例id与项目的关联关系 ProjectInstanceRelation relation = new ProjectInstanceRelation(); diff --git a/src/main/java/cn/palmte/work/service/ProjectService.java b/src/main/java/cn/palmte/work/service/ProjectService.java index f4d5abd..dc7aa4c 100644 --- a/src/main/java/cn/palmte/work/service/ProjectService.java +++ b/src/main/java/cn/palmte/work/service/ProjectService.java @@ -1,9 +1,9 @@ package cn.palmte.work.service; import cn.palmte.work.bean.*; -import cn.palmte.work.model.Admin; -import cn.palmte.work.model.Project; -import cn.palmte.work.model.ProjectRepository; +import cn.palmte.work.model.*; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -34,6 +34,8 @@ public class ProjectService { private ProjectInstanceService projectInstanceService; @Autowired private ActTaskDefService actTaskDefService; + @Autowired + private ProjectInstanceRelationRepository projectInstanceRelationRepository; private QueryHelper getQueryHelper(Map searchInfo, int pageNumber, int pageSize) { @@ -277,4 +279,17 @@ public class ProjectService { projectBudgetService.saveBudget(p, budgetBean); return p; } + + public ResponseMsg completeTask(int projectId, String json) { + List relationList = projectInstanceRelationRepository.findByProjectIdOrderByCreateTimeDesc(projectId); + if (relationList == null || relationList.isEmpty()) { + return ResponseMsg.buildFailedMsg("审核失败"); + } + ProjectInstanceRelation projectInstanceRelation = relationList.get(0); + JSONObject obj = JSON.parseObject(json); + actTaskDefService.completeTaskByProcInsId(projectInstanceRelation.getProcessInsId(), + obj.getIntValue("type"), obj.getString("message")); + + return ResponseMsg.buildSuccessMsg("审核成功"); + } } diff --git a/src/main/java/cn/palmte/work/service/ProjectTaskRecordService.java b/src/main/java/cn/palmte/work/service/ProjectTaskRecordService.java index 4b34640..377dbb1 100644 --- a/src/main/java/cn/palmte/work/service/ProjectTaskRecordService.java +++ b/src/main/java/cn/palmte/work/service/ProjectTaskRecordService.java @@ -36,11 +36,7 @@ public class ProjectTaskRecordService { * @param status * @param comment */ - public void saveTaskRecord(Task task, int status, String comment) { - int projectId = actUtil.getProjectId(task.getProcessInstanceId()); - if (projectId == 0) { - return; - } + public void saveTaskRecord(int projectId, Task task, int status, String comment) { task.getProcessDefinitionId(); ProjectTaskRecord record = new ProjectTaskRecord(); record.setProjectId(projectId); diff --git a/src/main/java/cn/palmte/work/utils/ActUtil.java b/src/main/java/cn/palmte/work/utils/ActUtil.java index 6e84c00..341aa57 100644 --- a/src/main/java/cn/palmte/work/utils/ActUtil.java +++ b/src/main/java/cn/palmte/work/utils/ActUtil.java @@ -13,6 +13,8 @@ import org.activiti.engine.ManagementService; import org.activiti.engine.ProcessEngine; import org.activiti.engine.RepositoryService; import org.activiti.engine.TaskService; +import org.activiti.engine.repository.ProcessDefinition; +import org.activiti.engine.runtime.ProcessInstance; import org.activiti.engine.task.IdentityLink; import org.activiti.engine.task.Task; import org.activiti.image.ProcessDiagramGenerator; @@ -75,14 +77,6 @@ public class ActUtil { return "0"; } - public int getProjectId(String procInsId) { - Record record = getVariable(ActConstant.KEY_PROJECT_ID, procInsId); - if (record != null) { - return Integer.valueOf(record.get("text")); - } - return 0; - } - /** * 获取流程实列里的所有变量 @@ -249,6 +243,22 @@ public class ActUtil { } + public boolean isProjectProcessIns(ProcessInstance processInstance) { + if (processInstance == null) { + return false; + } + ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(processInstance.getProcessDefinitionId()).singleResult(); + String procDefKey = processDefinition.getKey(); + return isProjectProcessIns(procDefKey); + } + + public boolean isProjectProcessIns(String procDefKey) { + return procDefKey.equals(ActConstant.PROCESS_DEFKEY_ESTIMATE) + || procDefKey.equals(ActConstant.PROCESS_DEFKEY_BUDGET) + || procDefKey.equals(ActConstant.PROCESS_DEFKEY_SETTLE) + || procDefKey.equals(ActConstant.PROCESS_DEFKEY_FINAL); + } + /** * 生成xml流 diff --git a/src/main/resources/static/assets/js/project_final.js b/src/main/resources/static/assets/js/project_final.js index 7499e5a..d297bca 100644 --- a/src/main/resources/static/assets/js/project_final.js +++ b/src/main/resources/static/assets/js/project_final.js @@ -120,7 +120,7 @@ function calCostFinalTotal() { if(costPurchaseDeviceFinalTotal && costPurchaseBuildFinalTotal && costPurchaseServiceFinalTotal && costPurchaseOtherFinalTotal && costProjectManageFinalTotal && costOtherFinalTotal){ - costFinalTotal.val(parseFloat(costPurchaseBuildFinalTotal)+parseFloat(costPurchaseBuildFinalTotal)+parseFloat(costPurchaseServiceFinalTotal)+ + costFinalTotal.val(parseFloat(costPurchaseDeviceFinalTotal)+parseFloat(costPurchaseBuildFinalTotal)+parseFloat(costPurchaseServiceFinalTotal)+ parseFloat(costPurchaseOtherFinalTotal)+parseFloat(costProjectManageFinalTotal)+parseFloat(costOtherFinalTotal)); }else { costFinalTotal.val(""); diff --git a/src/main/resources/templates/admin/act_task_def.ftl b/src/main/resources/templates/admin/act_task_def.ftl index 3520039..a599a94 100644 --- a/src/main/resources/templates/admin/act_task_def.ftl +++ b/src/main/resources/templates/admin/act_task_def.ftl @@ -20,10 +20,10 @@ 任务名称 <#--任务类型--> 回退任务 - 审批人 - 审批角色 - 审批通过脚本 - 审批驳回脚本 + 按人员设置审批人 + 按角色设置审批人 + 审批通过脚本 + 审批驳回脚本 操作 diff --git a/src/main/resources/templates/admin/project_approve.ftl b/src/main/resources/templates/admin/project_approve.ftl index 1db827c..e18fe13 100644 --- a/src/main/resources/templates/admin/project_approve.ftl +++ b/src/main/resources/templates/admin/project_approve.ftl @@ -1075,14 +1075,14 @@ 合计 - + @@ -1111,7 +1111,7 @@ readonly required title="购买设备预算总额"> - @@ -1127,7 +1127,7 @@ readonly required title="施工采购成本预算总额"> - @@ -1143,7 +1143,7 @@ readonly required title="服务采购成本预算总额"> - @@ -1159,7 +1159,7 @@ readonly required title="其他采购成本预算总额"> - @@ -1175,7 +1175,7 @@ readonly required title="项目管理成本预算总额"> - @@ -1206,7 +1206,7 @@ value="${Utils.format(budgetBean.getCostTotalTaxExclude(),'0')}" type="number" readonly required title="此列累计"> - + @@ -1232,7 +1232,7 @@ required readonly title="资金占用成本预算总额"> - @@ -1247,7 +1247,7 @@ required readonly title="公司管理费用预算总额"> - @@ -1258,7 +1258,7 @@ / - @@ -1271,7 +1271,7 @@ - + @@ -1300,7 +1300,7 @@ value="${Utils.format(finalBean.grossProfitSettleTotal,'0')}" readonly required title="项目毛利结算总额"> - @@ -1371,7 +1371,7 @@ - @@ -1382,7 +1382,7 @@ required title="预算总额"> - @@ -1393,7 +1393,7 @@ title="预算总额"> - @@ -1403,7 +1403,7 @@ - @@ -1414,7 +1414,7 @@ required title="预算总额"> - @@ -1425,7 +1425,7 @@ required title="预算总额"> - @@ -1434,7 +1434,7 @@ / - @@ -1444,7 +1444,7 @@ - @@ -1454,7 +1454,7 @@ - @@ -1466,7 +1466,7 @@ - @@ -1478,7 +1478,7 @@ - @@ -1490,7 +1490,7 @@ - @@ -1502,7 +1502,7 @@ - @@ -1512,7 +1512,7 @@ - + @@ -2004,10 +2004,10 @@
@@ -2031,7 +2031,7 @@ @@ -2077,6 +2077,32 @@ appendTrIncome(); }); }); + + + var completeTask = function (projectId) { + var message = $("#doc-vld-ta-2").val(); + var type = $("input[name='docVlGender']:checked").val(); + var params = { + type: type, + message: message + }; + $.ajax({ + url: '${base}/project/completeTask/' + projectId, + data: JSON.stringify(params), + dataType: "json", + contentType: "application/json", + type: 'post', + async: false, + success: function (data) { + if (data.status == 0) { + alert(data.msg); + window.location.href = '${base}/project/list'; + } else if (data.status == 1) { + alert(data.msg); + } + } + }); + } diff --git a/src/main/resources/templates/admin/project_detail.ftl b/src/main/resources/templates/admin/project_detail.ftl index 1958af0..a1ecc78 100644 --- a/src/main/resources/templates/admin/project_detail.ftl +++ b/src/main/resources/templates/admin/project_detail.ftl @@ -766,7 +766,7 @@ - + 收入 @@ -774,7 +774,7 @@ - + 收入 @@ -782,7 +782,7 @@ - + 合计 @@ -790,7 +790,7 @@ - + @@ -813,7 +813,7 @@ - + 成本 @@ -822,7 +822,7 @@ - + 成本 @@ -831,7 +831,7 @@ - + 成本 @@ -840,7 +840,7 @@ - + 成本 @@ -849,7 +849,7 @@ - + 成本 @@ -858,7 +858,7 @@ - + 合计 @@ -867,7 +867,7 @@ - + @@ -888,7 +888,7 @@ - + 公司管理费用 @@ -896,7 +896,7 @@ - + 所得税费用 @@ -904,7 +904,7 @@ / / - + 合计 @@ -912,7 +912,7 @@ - + @@ -933,7 +933,7 @@ - + @@ -941,7 +941,7 @@ - + @@ -949,7 +949,7 @@ - + @@ -968,91 +968,91 @@ 销售商品、提供劳务收到的现金 - + 收到的税费返还 / - + 收到其他与经营活动有关的现金 - + 购买商品、接受劳务支付的现金 - + 支付的各项税费 / - + 支付其他与经营活动有关的现金 - + 经营活动产生的现金流量净额 - + 投资活动现金流入 / - + 投资活动现金流出 / - + 投资活动产生的现金流量净额 / - + 融资资金流入 - + 还款资金流出 - + 筹资活动产生的现金流量净额 - + 货币资金净增加额 - + 合计 - + @@ -1060,10 +1060,6 @@ - - - - @@ -1338,13 +1334,14 @@
- *审核意见:
-
-
- ${project.name} -
+ 审核意见 +
+
+ <#list taskRecords as node> + ${node.assigneeName} : ${node.taskComment}    ${node.createTime} +
+
-
diff --git a/src/main/resources/templates/admin/project_final_edit.ftl b/src/main/resources/templates/admin/project_final_edit.ftl index b00e519..dfe1a40 100644 --- a/src/main/resources/templates/admin/project_final_edit.ftl +++ b/src/main/resources/templates/admin/project_final_edit.ftl @@ -72,9 +72,9 @@ 合计 - - - + + + @@ -95,35 +95,35 @@ 成本 采购成本 设备 - + - + 成本 采购成本 施工 - - - + + + 成本 采购成本 服务 - - - + + + 成本 采购成本 其他 - - + + @@ -131,8 +131,8 @@ 成本 项目管理成本 项目管理成本 - - + + @@ -140,8 +140,8 @@ 成本 其他 其他 - - + + @@ -149,8 +149,8 @@ 合计 - - + + @@ -170,17 +170,17 @@ 财务费用 资金占用成本 - - - + + + 公司管理费用 - - - + + + @@ -215,23 +215,23 @@ 项目毛利 - - + + 项目贡献利润 - - + + 项目净利润 - + / @@ -251,85 +251,85 @@ 销售商品、提供劳务收到的现金 - - + + 收到的税费返还 / - + 收到其他与经营活动有关的现金 - - + + 购买商品、接受劳务支付的现金 - - + + 支付的各项税费 / - + 支付其他与经营活动有关的现金 - - + + 经营活动产生的现金流量净额 - - + + 投资活动现金流入 / - + 投资活动现金流出 / - + 投资活动产生的现金流量净额 / - + 融资资金流入 - - + + 还款资金流出 - - + + 筹资活动产生的现金流量净额 - - + + 货币资金净增加额 - + diff --git a/src/main/resources/templates/admin/project_list.ftl b/src/main/resources/templates/admin/project_list.ftl index caf00c9..ca7e0c3 100644 --- a/src/main/resources/templates/admin/project_list.ftl +++ b/src/main/resources/templates/admin/project_list.ftl @@ -229,6 +229,13 @@ onclick="location.href='${base}/project/approve?id=${list.id}'">审核 + + + diff --git a/src/main/resources/templates/admin/project_task_record_list.ftl b/src/main/resources/templates/admin/project_task_record_list.ftl new file mode 100644 index 0000000..d5355b8 --- /dev/null +++ b/src/main/resources/templates/admin/project_task_record_list.ftl @@ -0,0 +1,82 @@ +<#assign base=request.contextPath /> +<#import "../common/defaultLayout.ftl" as defaultLayout> +<@defaultLayout.layout> + +
+
+ +
项目管理 / + 审核流程 +
+
+
+ + +
+
+
+
    + <#if list?exists > + + <#list list as node> +
  • +
    ${node.createTime} + +
    +
    ${node.roleName}-${node.assigneeName}: + <#if node.taskStatus==2>审批通过 + <#if node.taskStatus==3>审批不通过 +
    +
    + ${node.taskComment} +
    +
  • + + <#else> +
    +

    没有找到任何记录!

    +
    + +
+
+
+
+ +
+
+ +
+
+ +
+ + +
+ +
+
+ + + + + + + + + + + + + + + + + + + +