소스 검색

优化采购â

曾成 6 년 전
부모
커밋
63c997ec42

+ 12 - 0
Api/src/main/java/com/java110/api/listener/purchaseApply/SavePurchaseApplyListener.java

@@ -6,15 +6,19 @@ import com.java110.api.bmo.purchaseApply.IPurchaseApplyBMO;
 import com.java110.api.listener.AbstractServiceApiListener;
 import com.java110.core.annotation.Java110Listener;
 import com.java110.core.context.DataFlowContext;
+import com.java110.core.smo.purchaseApplyUser.IPurchaseApplyUserInnerServiceSMO;
+import com.java110.dto.purchaseApply.PurchaseApplyDto;
 import com.java110.entity.center.AppService;
 import com.java110.event.service.api.ServiceDataFlowEvent;
 import com.java110.utils.constant.BusinessTypeConstant;
 import com.java110.utils.constant.CommonConstant;
 import com.java110.utils.constant.ServiceCodePurchaseApplyConstant;
 import com.java110.utils.util.Assert;
+import com.java110.utils.util.BeanConvertUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.HttpMethod;
+import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 
 /**
@@ -26,6 +30,8 @@ public class SavePurchaseApplyListener extends AbstractServiceApiListener {
 
     @Autowired
     private IPurchaseApplyBMO purchaseApplyBMOImpl;
+    @Autowired
+    private IPurchaseApplyUserInnerServiceSMO iPurchaseApplyUserInnerServiceSMO;
     @Override
     protected void validate(ServiceDataFlowEvent event, JSONObject reqJson) {
         Assert.hasKeyAndValue(reqJson, "resourceStores", "必填,请填写申请采购的物资");
@@ -49,6 +55,12 @@ public class SavePurchaseApplyListener extends AbstractServiceApiListener {
 
         ResponseEntity<String> responseEntity = purchaseApplyBMOImpl.callService(context, service.getServiceCode(), businesses);
 
+        //开始流程
+//        if(HttpStatus.OK == responseEntity.getStatusCode()){
+//            PurchaseApplyDto purchaseApplyDto = BeanConvertUtil.covertBean(reqJson, PurchaseApplyDto.class);
+//            purchaseApplyDto.setCurrentUserId(reqJson.getString("userId"));
+//            iPurchaseApplyUserInnerServiceSMO.startProcess(purchaseApplyDto);
+//        }
         context.setResponseEntity(responseEntity);
     }
 

+ 306 - 0
CommonService/src/main/java/com/java110/common/smo/impl/PurchaseApplyUserInnerServiceSMOImpl.java

@@ -0,0 +1,306 @@
+package com.java110.common.smo.impl;
+
+
+import com.java110.core.base.smo.BaseServiceSMO;
+import com.java110.core.smo.complaint.IComplaintInnerServiceSMO;
+import com.java110.core.smo.purchaseApplyUser.IPurchaseApplyUserInnerServiceSMO;
+import com.java110.dto.PageDto;
+import com.java110.dto.auditMessage.AuditMessageDto;
+import com.java110.dto.purchaseApply.PurchaseApplyDto;
+import com.java110.entity.audit.AuditUser;
+import com.java110.utils.util.Assert;
+import com.java110.utils.util.StringUtil;
+import org.activiti.engine.HistoryService;
+import org.activiti.engine.ProcessEngine;
+import org.activiti.engine.RuntimeService;
+import org.activiti.engine.TaskService;
+import org.activiti.engine.history.HistoricProcessInstance;
+import org.activiti.engine.history.HistoricTaskInstance;
+import org.activiti.engine.history.HistoricTaskInstanceQuery;
+import org.activiti.engine.impl.identity.Authentication;
+import org.activiti.engine.query.Query;
+import org.activiti.engine.runtime.ProcessInstance;
+import org.activiti.engine.task.Comment;
+import org.activiti.engine.task.Task;
+import org.activiti.engine.task.TaskQuery;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+
+@RestController
+public class PurchaseApplyUserInnerServiceSMOImpl extends BaseServiceSMO implements IPurchaseApplyUserInnerServiceSMO {
+
+    @Autowired
+    private ProcessEngine processEngine;
+
+    @Autowired
+    private RuntimeService runtimeService;
+
+    @Autowired
+    private TaskService taskService;
+
+    @Autowired
+    private IComplaintInnerServiceSMO complaintInnerServiceSMOImpl;
+
+
+    /**
+     * 启动流程
+     *
+     * @return
+     */
+    public PurchaseApplyDto startProcess(@RequestBody PurchaseApplyDto purchaseApplyDto) {
+        //将信息加入map,以便传入流程中
+        Map<String, Object> variables = new HashMap<String, Object>();
+        variables.put("purchaseApplyDto", purchaseApplyDto);
+        variables.put("userId", purchaseApplyDto.getCurrentUserId());
+        //开启流程
+        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("resourceEntry", purchaseApplyDto.getApplyOrderId(), variables);
+        //将得到的实例流程id值赋给之前设置的变量
+        String processInstanceId = processInstance.getId();
+        // System.out.println("流程开启成功.......实例流程id:" + processInstanceId);
+
+        purchaseApplyDto.setProcessInstanceId(processInstanceId);
+        //第一个节点自动提交
+        autoFinishFirstTask(purchaseApplyDto);
+        return purchaseApplyDto;
+    }
+
+    /**
+     * 自动提交第一步
+     */
+    private void autoFinishFirstTask(PurchaseApplyDto purchaseApplyDto) {
+        Task task = null;
+        TaskQuery query = taskService.createTaskQuery().taskCandidateOrAssigned(purchaseApplyDto.getCurrentUserId()).active();
+        List<Task> todoList = query.list();//获取申请人的待办任务列表
+        for (Task tmp : todoList) {
+            if (tmp.getProcessInstanceId().equals(purchaseApplyDto.getProcessInstanceId())) {
+                task = tmp;//获取当前流程实例,当前申请人的待办任务
+                break;
+            }
+        }
+        Assert.notNull(task, "未找到当前用户任务userId = " + purchaseApplyDto.getCurrentUserId());
+        purchaseApplyDto.setTaskId(task.getId());
+        purchaseApplyDto.setAuditCode("10000");
+        purchaseApplyDto.setAuditMessage("提交");
+        completeTask(purchaseApplyDto);
+
+    }
+
+    /**
+     * 查询用户任务数
+     *
+     * @param user
+     * @return
+     */
+    public long getUserTaskCount(@RequestBody AuditUser user) {
+        TaskService taskService = processEngine.getTaskService();
+        TaskQuery query = taskService.createTaskQuery().processDefinitionKey("resourceEnter");
+        query.taskAssignee(user.getUserId());
+        return query.count();
+    }
+
+    /**
+     * 获取用户任务
+     *
+     * @param user 用户信息
+     */
+    public List<PurchaseApplyDto> getUserTasks(@RequestBody AuditUser user) {
+        TaskService taskService = processEngine.getTaskService();
+        TaskQuery query = taskService.createTaskQuery().processDefinitionKey("resourceEnter");
+        ;
+        query.taskAssignee(user.getUserId());
+        query.orderByTaskCreateTime().desc();
+        List<Task> list = null;
+        if (user.getPage() != PageDto.DEFAULT_PAGE) {
+            list = query.listPage((user.getPage() - 1) * user.getRow(), user.getRow());
+        } else {
+            list = query.list();
+        }
+
+        List<String> complaintIds = new ArrayList<>();
+        Map<String, String> taskBusinessKeyMap = new HashMap<>();
+        for (Task task : list) {
+            String processInstanceId = task.getProcessInstanceId();
+            //3.使用流程实例,查询
+            ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
+            //4.使用流程实例对象获取BusinessKey
+            String business_key = pi.getBusinessKey();
+            complaintIds.add(business_key);
+            taskBusinessKeyMap.put(business_key, task.getId());
+        }
+
+        if (complaintIds == null || complaintIds.size() == 0) {
+            return new ArrayList<>();
+        }
+
+        //查询 投诉信息
+        PurchaseApplyDto purchaseApplyDto = new PurchaseApplyDto();
+        List<PurchaseApplyDto> purchaseApplyDtos = new ArrayList<>();
+
+//        ComplaintDto complaintDto = new ComplaintDto();
+//        complaintDto.setStoreId(user.getStoreId());
+//        complaintDto.setCommunityId(user.getCommunityId());
+//        complaintDto.setComplaintIds(complaintIds.toArray(new String[complaintIds.size()]));
+//        List<ComplaintDto> tmpComplaintDtos = complaintInnerServiceSMOImpl.queryComplaints(complaintDto);
+//
+//        for (ComplaintDto tmpComplaintDto : tmpComplaintDtos) {
+//            tmpComplaintDto.setTaskId(taskBusinessKeyMap.get(tmpComplaintDto.getComplaintId()));
+//        }
+        return purchaseApplyDtos;
+    }
+
+
+    /**
+     * 查询用户任务数
+     *
+     * @param user
+     * @return
+     */
+    public long getUserHistoryTaskCount(@RequestBody AuditUser user) {
+        HistoryService historyService = processEngine.getHistoryService();
+//        Query query = historyService.createHistoricTaskInstanceQuery()
+//                .processDefinitionKey("complaint")
+//                .taskAssignee(user.getUserId());
+
+        HistoricTaskInstanceQuery historicTaskInstanceQuery = historyService.createHistoricTaskInstanceQuery()
+                .processDefinitionKey("resourceEnter")
+                .taskAssignee(user.getUserId());
+        if(!StringUtil.isEmpty(user.getAuditLink()) && "START".equals(user.getAuditLink())){
+            historicTaskInstanceQuery.taskName("resourceEnter");
+        }else if(!StringUtil.isEmpty(user.getAuditLink()) && "AUDIT".equals(user.getAuditLink())){
+            historicTaskInstanceQuery.taskName("resourceEnterDealUser");
+        }
+
+        Query query = historicTaskInstanceQuery;
+        return query.count();
+    }
+
+    /**
+     * 获取用户审批的任务
+     *
+     * @param user 用户信息
+     */
+    public List<PurchaseApplyDto> getUserHistoryTasks(@RequestBody AuditUser user) {
+        HistoryService historyService = processEngine.getHistoryService();
+
+        HistoricTaskInstanceQuery historicTaskInstanceQuery = historyService.createHistoricTaskInstanceQuery()
+                .processDefinitionKey("resourceEnter")
+                .taskAssignee(user.getUserId()) ;
+        if(!StringUtil.isEmpty(user.getAuditLink()) && "START".equals(user.getAuditLink())){
+            historicTaskInstanceQuery.taskName("resourceEnter");
+        }else if(!StringUtil.isEmpty(user.getAuditLink()) && "AUDIT".equals(user.getAuditLink())){
+            historicTaskInstanceQuery.taskName("resourceEnterDealUser");
+        }
+
+        Query query = historicTaskInstanceQuery.orderByHistoricTaskInstanceStartTime().desc();
+
+        List<HistoricTaskInstance> list = null;
+        if (user.getPage() != PageDto.DEFAULT_PAGE) {
+            list = query.listPage((user.getPage() - 1) * user.getRow(), user.getRow());
+        } else {
+            list = query.list();
+        }
+
+        List<String> complaintIds = new ArrayList<>();
+        for (HistoricTaskInstance task : list) {
+            String processInstanceId = task.getProcessInstanceId();
+            //3.使用流程实例,查询
+            HistoricProcessInstance pi = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
+            //4.使用流程实例对象获取BusinessKey
+            String business_key = pi.getBusinessKey();
+            complaintIds.add(business_key);
+        }
+
+        //查询 投诉信息
+//        ComplaintDto complaintDto = new ComplaintDto();
+//        complaintDto.setStoreId(user.getStoreId());
+//        complaintDto.setCommunityId(user.getCommunityId());
+//        complaintDto.setComplaintIds(complaintIds.toArray(new String[complaintIds.size()]));
+//        List<ComplaintDto> tmpComplaintDtos = complaintInnerServiceSMOImpl.queryComplaints(complaintDto);
+        return null;
+    }
+
+
+    public boolean completeTask(@RequestBody PurchaseApplyDto purchaseApplyDto) {
+        TaskService taskService = processEngine.getTaskService();
+        Task task = taskService.createTaskQuery().taskId(purchaseApplyDto.getTaskId()).singleResult();
+        String processInstanceId = task.getProcessInstanceId();
+        Authentication.setAuthenticatedUserId(purchaseApplyDto.getCurrentUserId());
+        taskService.addComment(purchaseApplyDto.getTaskId(), processInstanceId, purchaseApplyDto.getAuditMessage());
+        Map<String, Object> variables = new HashMap<String, Object>();
+        variables.put("auditCode", purchaseApplyDto.getAuditCode());
+        variables.put("currentUserId", purchaseApplyDto.getCurrentUserId());
+        //taskService.setAssignee(complaintDto.getTaskId(),complaintDto.getCurrentUserId());
+        //taskService.addCandidateUser(complaintDto.getTaskId(), complaintDto.getCurrentUserId());
+        //taskService.claim(complaintDto.getTaskId(), complaintDto.getCurrentUserId());
+        taskService.complete(purchaseApplyDto.getTaskId(), variables);
+
+        ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
+        if (pi == null) {
+            return true;
+        }
+        return false;
+    }
+
+    public List<AuditMessageDto> getAuditMessage(@RequestBody PurchaseApplyDto purchaseApplyDto) {
+
+        TaskService taskService = processEngine.getTaskService();
+        Task task = taskService.createTaskQuery().taskId(purchaseApplyDto.getTaskId()).singleResult();
+        String processInstanceId = task.getProcessInstanceId();
+        List<Comment> comments = taskService.getProcessInstanceComments(processInstanceId);
+        List<AuditMessageDto> auditMessageDtos = new ArrayList<>();
+        if (comments == null || comments.size() < 1) {
+            return auditMessageDtos;
+        }
+        AuditMessageDto messageDto = null;
+        for (Comment comment : comments) {
+            messageDto = new AuditMessageDto();
+            messageDto.setCreateTime(comment.getTime());
+            messageDto.setUserId(comment.getUserId());
+            messageDto.setMessage(comment.getFullMessage());
+        }
+
+        return auditMessageDtos;
+    }
+
+
+
+
+    public ProcessEngine getProcessEngine() {
+        return processEngine;
+    }
+
+    public void setProcessEngine(ProcessEngine processEngine) {
+        this.processEngine = processEngine;
+    }
+
+    public RuntimeService getRuntimeService() {
+        return runtimeService;
+    }
+
+    public void setRuntimeService(RuntimeService runtimeService) {
+        this.runtimeService = runtimeService;
+    }
+
+    public TaskService getTaskService() {
+        return taskService;
+    }
+
+    public void setTaskService(TaskService taskService) {
+        this.taskService = taskService;
+    }
+
+    public IComplaintInnerServiceSMO getComplaintInnerServiceSMOImpl() {
+        return complaintInnerServiceSMOImpl;
+    }
+
+    public void setComplaintInnerServiceSMOImpl(IComplaintInnerServiceSMO complaintInnerServiceSMOImpl) {
+        this.complaintInnerServiceSMOImpl = complaintInnerServiceSMOImpl;
+    }
+}

+ 46 - 0
java110-bean/src/main/java/com/java110/dto/purchaseApply/PurchaseApplyDto.java

@@ -29,6 +29,12 @@ public class PurchaseApplyDto extends PageDto implements Serializable {
 
     private String statusCd = "0";
 
+    private String currentUserId;
+    private String processInstanceId;
+    private String taskId;
+    private String auditCode;
+    private String auditMessage;
+
 
 
     public String getResOrderType() {
@@ -111,4 +117,44 @@ public class PurchaseApplyDto extends PageDto implements Serializable {
     public void setStateName(String stateName) {
         this.stateName = stateName;
     }
+
+    public String getCurrentUserId() {
+        return currentUserId;
+    }
+
+    public void setCurrentUserId(String currentUserId) {
+        this.currentUserId = currentUserId;
+    }
+
+    public String getProcessInstanceId() {
+        return processInstanceId;
+    }
+
+    public void setProcessInstanceId(String processInstanceId) {
+        this.processInstanceId = processInstanceId;
+    }
+
+    public String getTaskId() {
+        return taskId;
+    }
+
+    public void setTaskId(String taskId) {
+        this.taskId = taskId;
+    }
+
+    public String getAuditCode() {
+        return auditCode;
+    }
+
+    public void setAuditCode(String auditCode) {
+        this.auditCode = auditCode;
+    }
+
+    public String getAuditMessage() {
+        return auditMessage;
+    }
+
+    public void setAuditMessage(String auditMessage) {
+        this.auditMessage = auditMessage;
+    }
 }

+ 74 - 0
java110-core/src/main/java/com/java110/core/smo/purchaseApplyUser/IPurchaseApplyUserInnerServiceSMO.java

@@ -0,0 +1,74 @@
+package com.java110.core.smo.purchaseApplyUser;
+
+import com.java110.core.feign.FeignConfiguration;
+import com.java110.dto.auditMessage.AuditMessageDto;
+import com.java110.dto.purchaseApply.PurchaseApplyDto;
+import com.java110.entity.audit.AuditUser;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+
+import java.util.List;
+
+@FeignClient(name = "common-service", configuration = {FeignConfiguration.class})
+@RequestMapping("/purchaseApplyUserApi")
+public interface IPurchaseApplyUserInnerServiceSMO {
+
+    /**
+     * 启动流程
+     *
+     * @return
+     */
+    @RequestMapping(value = "/startProcess", method = RequestMethod.POST)
+    public PurchaseApplyDto startProcess(@RequestBody PurchaseApplyDto purchaseApplyDto);
+
+    /**
+     * 查询用户任务数
+     *
+     * @param user
+     * @return
+     */
+    @RequestMapping(value = "/getUserTaskCount", method = RequestMethod.POST)
+    public long getUserTaskCount(@RequestBody AuditUser user);
+
+    /**
+     * 获取用户任务
+     *
+     * @param user 用户信息
+     */
+    @RequestMapping(value = "/getUserTasks", method = RequestMethod.POST)
+    public List<PurchaseApplyDto> getUserTasks(@RequestBody AuditUser user);
+
+    /**
+     * 查询用户处理任务数
+     *
+     * @param user
+     * @return
+     */
+    @RequestMapping(value = "/getUserHistoryTaskCount", method = RequestMethod.POST)
+    public long getUserHistoryTaskCount(@RequestBody AuditUser user);
+    /**
+     * 获取用户处理审批的任务
+     *
+     * @param user 用户信息
+     */
+    @RequestMapping(value = "/getUserHistoryTasks", method = RequestMethod.POST)
+    public List<PurchaseApplyDto> getUserHistoryTasks(@RequestBody AuditUser user);
+
+
+    /**
+     * 处理任务
+     * @return true 为流程结束 false 为流程没有结束
+     */
+    @RequestMapping(value = "/completeTask", method = RequestMethod.POST)
+    public boolean completeTask(@RequestBody PurchaseApplyDto purchaseApplyDto);
+
+    /**
+     * 查询批注信息
+     * @return
+     */
+    @RequestMapping(value = "/getAuditMessage", method = RequestMethod.POST)
+    public List<AuditMessageDto> getAuditMessage(@RequestBody PurchaseApplyDto purchaseApplyDto);
+
+}