Merge branch 'dev_1.0.0' of http://git.unissense.tech/mula/fourcal into Branch_dev_1.0.0
commit
0d6771b0d5
Binary file not shown.
|
@ -2,19 +2,25 @@ package cn.palmte.work.controller.backend;
|
||||||
|
|
||||||
|
|
||||||
import cn.palmte.work.bean.ResponseMsg;
|
import cn.palmte.work.bean.ResponseMsg;
|
||||||
|
import cn.palmte.work.config.activiti.ActApproveTypeEnum;
|
||||||
import cn.palmte.work.config.activiti.ActConstant;
|
import cn.palmte.work.config.activiti.ActConstant;
|
||||||
import cn.palmte.work.service.ActProcInsService;
|
import cn.palmte.work.service.ActProcInsService;
|
||||||
|
import cn.palmte.work.service.ActTaskDefService;
|
||||||
import cn.palmte.work.utils.InterfaceUtil;
|
import cn.palmte.work.utils.InterfaceUtil;
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import org.activiti.engine.TaskService;
|
||||||
|
import org.activiti.engine.task.Task;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Controller;
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.util.CollectionUtils;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
|
@ -29,6 +35,12 @@ public class ActProcInsController extends BaseController {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private ActProcInsService actProcInsService;
|
private ActProcInsService actProcInsService;
|
||||||
|
@Autowired
|
||||||
|
private ActTaskDefService actTaskDefService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private TaskService taskService;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 列表
|
* 列表
|
||||||
|
@ -88,7 +100,7 @@ public class ActProcInsController extends BaseController {
|
||||||
JSONObject json = JSON.parseObject(body);
|
JSONObject json = JSON.parseObject(body);
|
||||||
Map<String, Object> variables = new HashMap<>();
|
Map<String, Object> variables = new HashMap<>();
|
||||||
for (Object key : json.keySet()) {
|
for (Object key : json.keySet()) {
|
||||||
variables.put((String)key, json.get(key));
|
variables.put((String) key, json.get(key));
|
||||||
}
|
}
|
||||||
|
|
||||||
variables.put(ActConstant.START_PROCESS_USERID, InterfaceUtil.getAdminId());
|
variables.put(ActConstant.START_PROCESS_USERID, InterfaceUtil.getAdminId());
|
||||||
|
@ -103,4 +115,37 @@ public class ActProcInsController extends BaseController {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 流程测试使用
|
||||||
|
* http://localhost:8282/fourcal/actProcIns/test?procDefKey=final¶ms=typeVVV1FFFprojectTypeVVV1FFFcontractAmountVVV10000FFFcooperationTypeVVV1FFFisPrepaidVVVtrueFFFrepaidAmountVVV10000
|
||||||
|
*/
|
||||||
|
@ResponseBody
|
||||||
|
@GetMapping(value = "/test")
|
||||||
|
public ResponseMsg test(@RequestParam String procDefKey, @RequestParam String params) {
|
||||||
|
try {
|
||||||
|
HashMap<String, Object> variables = new HashMap<>();
|
||||||
|
for (String s : params.split("FFF")) {
|
||||||
|
String[] split = s.split("VVV");
|
||||||
|
variables.put(split[0], split[1]);
|
||||||
|
}
|
||||||
|
String procInsId = actProcInsService.startProcessInstance(procDefKey, "0", variables);
|
||||||
|
logger.info("==============> startProcessInstance procInsId:{}", procInsId);
|
||||||
|
|
||||||
|
List<Task> taskList = taskService.createTaskQuery().processInstanceId(procInsId).list();
|
||||||
|
int i = 1;
|
||||||
|
while (!CollectionUtils.isEmpty(taskList)) {
|
||||||
|
for (Task task : taskList) {
|
||||||
|
logger.info("==============> completeTaskByProcInsId procInsId:{}, taskName:{}, i:{}", procInsId, task.getName(), i++);
|
||||||
|
actTaskDefService.completeTask(task.getId(), procInsId, "sysTest", ActApproveTypeEnum.APPROVAL_PASSED, "");
|
||||||
|
}
|
||||||
|
|
||||||
|
taskList = taskService.createTaskQuery().processInstanceId(procInsId).list();
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.error("", e);
|
||||||
|
return ResponseMsg.buildFailedMsg(e.getMessage());
|
||||||
|
}
|
||||||
|
return ResponseMsg.buildSuccessMsg("ok");
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -138,7 +138,8 @@ public class AdminController extends BaseController {
|
||||||
request.getSession().setAttribute("message", "");
|
request.getSession().setAttribute("message", "");
|
||||||
}
|
}
|
||||||
|
|
||||||
message = login(userName, admin.getPassword(), false, false);
|
// message = login(userName, admin.getPassword(), false, false);
|
||||||
|
message = login(userName, newPassword, false, false);
|
||||||
if (!message.isEmpty()) {
|
if (!message.isEmpty()) {
|
||||||
attr.addAttribute("errorMessages", message);
|
attr.addAttribute("errorMessages", message);
|
||||||
|
|
||||||
|
|
|
@ -267,7 +267,7 @@ public class ProjectController extends BaseController {
|
||||||
exportExcelUtils.exportPlanDetailExcel(headers5, row5, project, budgetBean, projectBudgetPlanDetails, projectBudgetPlanDetailTotal, "yyyy-MM-dd", 0, "资金计划表", outputStream);
|
exportExcelUtils.exportPlanDetailExcel(headers5, row5, project, budgetBean, projectBudgetPlanDetails, projectBudgetPlanDetailTotal, "yyyy-MM-dd", 0, "资金计划表", outputStream);
|
||||||
|
|
||||||
CashFlowBean cashFlowBean = projectBudgetService.getCashFlowBean(project, projectBudgetPlanDetails);
|
CashFlowBean cashFlowBean = projectBudgetService.getCashFlowBean(project, projectBudgetPlanDetails);
|
||||||
exportExcelUtils.exportBudgetExcel(budgetBean, cashFlowBean, 0, "项目预算信息", outputStream, project.getOtherName(), incomeTaxRates, costTaxRates);
|
exportExcelUtils.exportBudgetExcel(budgetBean, null, 0, "项目预算信息", outputStream, project.getOtherName(), incomeTaxRates, costTaxRates);
|
||||||
|
|
||||||
List<String> timeList = projectSettleIncomeRepository.findAllByProjectIdAndGroupByTime(project.getId());
|
List<String> timeList = projectSettleIncomeRepository.findAllByProjectIdAndGroupByTime(project.getId());
|
||||||
for (String time : timeList) {
|
for (String time : timeList) {
|
||||||
|
@ -1412,8 +1412,8 @@ public class ProjectController extends BaseController {
|
||||||
}
|
}
|
||||||
List<ProjectBudgetPlanDetail> projectBudgetPlanDetails = projectBudgetService.getProjectBudgetPlanDetails(project);
|
List<ProjectBudgetPlanDetail> projectBudgetPlanDetails = projectBudgetService.getProjectBudgetPlanDetails(project);
|
||||||
BudgetBean budgetBean = projectBudgetService.getBudget(project);
|
BudgetBean budgetBean = projectBudgetService.getBudget(project);
|
||||||
CashFlowBean cashFlowBean = projectBudgetService.getCashFlowBean(project, projectBudgetPlanDetails);
|
// CashFlowBean cashFlowBean = projectBudgetService.getCashFlowBean(project, projectBudgetPlanDetails);
|
||||||
exportExcelUtils.exportBudgetExcel(budgetBean, cashFlowBean, 0, "项目预算信息", outputStream, project.getOtherName(), incomeTaxRates, costTaxRates);
|
exportExcelUtils.exportBudgetExcel(budgetBean, null, 0, "项目预算信息", outputStream, project.getOtherName(), incomeTaxRates, costTaxRates);
|
||||||
|
|
||||||
exportExcelUtils.end(outputStream);
|
exportExcelUtils.end(outputStream);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package cn.palmte.work.service;
|
package cn.palmte.work.service;
|
||||||
|
|
||||||
|
|
||||||
|
import cn.palmte.work.config.activiti.ActApproveTypeEnum;
|
||||||
import cn.palmte.work.config.activiti.ActTaskIndexEnum;
|
import cn.palmte.work.config.activiti.ActTaskIndexEnum;
|
||||||
import cn.palmte.work.model.ActTaskDef;
|
import cn.palmte.work.model.ActTaskDef;
|
||||||
import cn.palmte.work.model.Admin;
|
import cn.palmte.work.model.Admin;
|
||||||
|
@ -48,6 +49,7 @@ public class ActListenerService {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 任务节点创建后监听 动态设置审批人
|
* 任务节点创建后监听 动态设置审批人
|
||||||
|
* @see ActModelService#setTaskListener
|
||||||
*
|
*
|
||||||
* @param delegateTask
|
* @param delegateTask
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
|
@ -77,6 +79,8 @@ public class ActListenerService {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 流程结束监听 更新项目状态为审批通过
|
* 流程结束监听 更新项目状态为审批通过
|
||||||
|
* @see ActModelService#setExecutionListener
|
||||||
|
*
|
||||||
*
|
*
|
||||||
* @param delegateExecution
|
* @param delegateExecution
|
||||||
*/
|
*/
|
||||||
|
@ -84,11 +88,15 @@ public class ActListenerService {
|
||||||
String procInsId = delegateExecution.getProcessInstanceId();
|
String procInsId = delegateExecution.getProcessInstanceId();
|
||||||
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(procInsId).singleResult();
|
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(procInsId).singleResult();
|
||||||
int projectId = Integer.parseInt(processInstance.getBusinessKey());
|
int projectId = Integer.parseInt(processInstance.getBusinessKey());
|
||||||
|
|
||||||
String procDefId = processInstance.getProcessDefinitionId();
|
String procDefId = processInstance.getProcessDefinitionId();
|
||||||
|
String procDefKey = procDefId.split(":")[0];
|
||||||
|
logger.info("**** lcjsjt 流程结束监听 更新项目状态为审批通过 **** procInsId:{}, procDefId:{}, procDefKey:{}, projectId:{}", procInsId, procDefId, procDefKey, projectId);
|
||||||
if (actUtil.isNewProcess(procDefId)) {
|
if (actUtil.isNewProcess(procDefId)) {
|
||||||
logger.info("**** lcjsjt 流程结束监听 更新项目状态为审批通过 **** procInsId:{}, procDefId:{}, projectId:{}", procInsId, procDefId, projectId);
|
logger.info("newProcess passed");
|
||||||
projectProcessService.updateProcessStatus(projectId, ProcessStatus.audit_passed);
|
projectProcessService.updateProcessStatus(projectId, ProcessStatus.audit_passed);
|
||||||
|
}else if (actUtil.isFourcalProcess(procDefId)){
|
||||||
|
logger.info("fourcalProcess passed");
|
||||||
|
projectInstanceService.updateApproveStatus(projectId, procDefKey, ActApproveTypeEnum.APPROVAL_PASSED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -192,6 +192,11 @@ public class ActModelService {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置节点创建监听
|
||||||
|
*
|
||||||
|
* @param userTaskElement
|
||||||
|
*/
|
||||||
private void setTaskListener(UserTask userTaskElement) {
|
private void setTaskListener(UserTask userTaskElement) {
|
||||||
ActivitiListener taskListener = new ActivitiListener();
|
ActivitiListener taskListener = new ActivitiListener();
|
||||||
taskListener.setEvent(TaskListener.EVENTNAME_CREATE);
|
taskListener.setEvent(TaskListener.EVENTNAME_CREATE);
|
||||||
|
@ -202,6 +207,11 @@ public class ActModelService {
|
||||||
userTaskElement.setTaskListeners(taskListenerList);
|
userTaskElement.setTaskListeners(taskListenerList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置流程结束时监听
|
||||||
|
*
|
||||||
|
* @param process
|
||||||
|
*/
|
||||||
private void setExecutionListener(Process process) {
|
private void setExecutionListener(Process process) {
|
||||||
ActivitiListener executionListener = new ActivitiListener();
|
ActivitiListener executionListener = new ActivitiListener();
|
||||||
executionListener.setEvent(BaseExecutionListener.EVENTNAME_END);
|
executionListener.setEvent(BaseExecutionListener.EVENTNAME_END);
|
||||||
|
|
|
@ -7,6 +7,7 @@ import cn.palmte.work.model.*;
|
||||||
import cn.palmte.work.model.enums.ProcessStatus;
|
import cn.palmte.work.model.enums.ProcessStatus;
|
||||||
import cn.palmte.work.pojo.ActHisTask;
|
import cn.palmte.work.pojo.ActHisTask;
|
||||||
import cn.palmte.work.utils.ActUtil;
|
import cn.palmte.work.utils.ActUtil;
|
||||||
|
import cn.palmte.work.utils.DateKit;
|
||||||
import cn.palmte.work.utils.InterfaceUtil;
|
import cn.palmte.work.utils.InterfaceUtil;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import org.activiti.engine.*;
|
import org.activiti.engine.*;
|
||||||
|
@ -64,7 +65,7 @@ public class ActTaskDefService {
|
||||||
completeTask(taskId, procInsId, message, ActApproveTypeEnum.ofType(type), "");
|
completeTask(taskId, procInsId, message, ActApproveTypeEnum.ofType(type), "");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void completeTask(String taskId, String procInsId, String message, ActApproveTypeEnum approveEnum, String fileUrl) {
|
public void completeTask(String taskId, String procInsId, String message, ActApproveTypeEnum approveEnum, String fileUrl) {
|
||||||
String userId = InterfaceUtil.getAdminId() + "";
|
String userId = InterfaceUtil.getAdminId() + "";
|
||||||
Authentication.setAuthenticatedUserId(userId);
|
Authentication.setAuthenticatedUserId(userId);
|
||||||
taskService.addComment(taskId, procInsId, message);
|
taskService.addComment(taskId, procInsId, message);
|
||||||
|
@ -178,10 +179,16 @@ public class ActTaskDefService {
|
||||||
//审批通过
|
//审批通过
|
||||||
taskService.complete(taskId);
|
taskService.complete(taskId);
|
||||||
|
|
||||||
if (actUtil.isFourcalProcess(processInstance.getProcessDefinitionId())) {
|
//6月17前的流程没有设置流程结束监听(结束监听里更新项目状态为审批通过) 后面此逻辑可删除
|
||||||
|
Date date = DateKit.getDate("2024-06-18 00:00:00");
|
||||||
|
Date startTime = processInstance.getStartTime();
|
||||||
|
logger.info("procStartTime:{}", startTime);
|
||||||
|
if (startTime.getTime() < date.getTime()
|
||||||
|
&& actUtil.isFourcalProcess(processInstance.getProcessDefinitionId())) {
|
||||||
//四算项目 最后一个任务完成后 更新项目状态为审批通过 其他项目通过监听器更新
|
//四算项目 最后一个任务完成后 更新项目状态为审批通过 其他项目通过监听器更新
|
||||||
updateProjectPassed(processInstance, actTaskDef, procDefKey);
|
updateProjectPassed(processInstance, actTaskDef, procDefKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (ActApproveTypeEnum.APPROVAL_UN_PASS == approveEnum) {
|
} else if (ActApproveTypeEnum.APPROVAL_UN_PASS == approveEnum) {
|
||||||
//驳回
|
//驳回
|
||||||
String rollbackTaskKey = actTaskDef.getRollbackTaskKey();
|
String rollbackTaskKey = actTaskDef.getRollbackTaskKey();
|
||||||
|
@ -366,7 +373,7 @@ public class ActTaskDefService {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过类型查找审批人
|
* 通过类型查找审批人
|
||||||
*
|
*
|
||||||
* @param types
|
* @param types
|
||||||
* @param procInsId
|
* @param procInsId
|
||||||
* @return
|
* @return
|
||||||
|
@ -394,7 +401,7 @@ public class ActTaskDefService {
|
||||||
String deptLeaderId = record.getStr("text");
|
String deptLeaderId = record.getStr("text");
|
||||||
userIdList.add(deptLeaderId);
|
userIdList.add(deptLeaderId);
|
||||||
logger.info("queryCandidatesByType deptLeader:{}, procInsId:{} ", deptLeaderId, procInsId);
|
logger.info("queryCandidatesByType deptLeader:{}, procInsId:{} ", deptLeaderId, procInsId);
|
||||||
}else{
|
} else {
|
||||||
logger.error("queryCandidatesByType not find deptLeader procInsId:{} ", procInsId);
|
logger.error("queryCandidatesByType not find deptLeader procInsId:{} ", procInsId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -688,9 +688,15 @@ public class ProjectBudgetService {
|
||||||
engineerCost = engineerCost.add(budgetPlan.getEngineerCost());
|
engineerCost = engineerCost.add(budgetPlan.getEngineerCost());
|
||||||
}
|
}
|
||||||
|
|
||||||
projectCost = projectCost.add(budgetPlan.getProjectCost());
|
if (budgetPlan.getProjectCost()!=null) {
|
||||||
serviceCost = serviceCost.add(budgetPlan.getServiceCost());
|
projectCost = projectCost.add(budgetPlan.getProjectCost());
|
||||||
otherCost = otherCost.add(budgetPlan.getOtherCost());
|
}
|
||||||
|
if (budgetPlan.getServiceCost()!=null) {
|
||||||
|
serviceCost = serviceCost.add(budgetPlan.getServiceCost());
|
||||||
|
}
|
||||||
|
if (budgetPlan.getOtherCost()!=null) {
|
||||||
|
otherCost = otherCost.add(budgetPlan.getOtherCost());
|
||||||
|
}
|
||||||
totalCost = totalCost.add(budgetPlan.getTotalCost());
|
totalCost = totalCost.add(budgetPlan.getTotalCost());
|
||||||
saleIncome = saleIncome.add(budgetPlan.getSaleIncome());
|
saleIncome = saleIncome.add(budgetPlan.getSaleIncome());
|
||||||
earnestMoneyIncome = earnestMoneyIncome.add(budgetPlan.getEarnestMoneyIncome());
|
earnestMoneyIncome = earnestMoneyIncome.add(budgetPlan.getEarnestMoneyIncome());
|
||||||
|
|
|
@ -152,6 +152,10 @@ public class ProjectInstanceService {
|
||||||
*/
|
*/
|
||||||
public void updateApproveStatus(int projectId, String processKey, ActApproveTypeEnum approveTypeEnum){
|
public void updateApproveStatus(int projectId, String processKey, ActApproveTypeEnum approveTypeEnum){
|
||||||
Project project = projectRepository.findOne(projectId);
|
Project project = projectRepository.findOne(projectId);
|
||||||
|
if(project == null){
|
||||||
|
logger.error("updateApproveStatusError projectIsNull :{}", project);
|
||||||
|
return;
|
||||||
|
}
|
||||||
if(ActProcessKeyEnum.ESTIMATE.getKey().equals(processKey)){
|
if(ActProcessKeyEnum.ESTIMATE.getKey().equals(processKey)){
|
||||||
project.setApproveStatusEstimate(approveTypeEnum.getType());
|
project.setApproveStatusEstimate(approveTypeEnum.getType());
|
||||||
}else if(ActProcessKeyEnum.BUDGET.getKey().equals(processKey)){
|
}else if(ActProcessKeyEnum.BUDGET.getKey().equals(processKey)){
|
||||||
|
|
|
@ -81,6 +81,13 @@
|
||||||
流程图片
|
流程图片
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
|
<button type="button"
|
||||||
|
class="am-btn am-btn-default am-btn-xs am-text-secondary"
|
||||||
|
onclick="xmlView('${list.deploymentId!}')">
|
||||||
|
<span class="am-icon-pencil-square-o"></span>
|
||||||
|
流程xml
|
||||||
|
</button>
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<div class="switch-button">
|
<div class="switch-button">
|
||||||
|
|
Loading…
Reference in New Issue