Browse Source

Merge remote-tracking branch 'origin/master'

sangwenwei 1 year ago
parent
commit
9550db0237
17 changed files with 994 additions and 50 deletions
  1. 82 0
      jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/common/CommonApi.java
  2. 200 0
      jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/common/CommonUtils.java
  3. 46 0
      jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/common/enterpriseSearch/EnterpriseJsonRespDTO.java
  4. 87 0
      jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/common/enterpriseSearch/EnterpriseSearchApi.java
  5. 53 0
      jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/common/enterpriseSearch/EnterpriseSearchDTO.java
  6. 279 0
      jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/common/enterpriseSearch/TicketQueryUtils.java
  7. 40 0
      jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/common/flowable/dto/CommitParamDTO.java
  8. 1 0
      jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/drive/mapper/xml/DriveMaintainMapper.xml
  9. 2 0
      jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/drive/service/dto/DriveMaintainDTO.java
  10. 13 1
      jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/humanResources/service/StaffUserInfoService.java
  11. 15 2
      jeeplus-modules/jeeplus-flowable/src/main/java/com/jeeplus/extension/controller/FlowCopyController.java
  12. 4 4
      jeeplus-modules/jeeplus-flowable/src/main/java/com/jeeplus/flowable/controller/FlowableProcessController.java
  13. 6 6
      jeeplus-modules/jeeplus-flowable/src/main/java/com/jeeplus/flowable/controller/FlowableTaskController.java
  14. 24 5
      jeeplus-modules/jeeplus-flowable/src/main/java/com/jeeplus/flowable/service/FlowProcessService.java
  15. 72 31
      jeeplus-modules/jeeplus-flowable/src/main/java/com/jeeplus/flowable/service/FlowTaskService.java
  16. 1 1
      jeeplus-modules/jeeplus-flowable/src/main/java/com/jeeplus/flowable/service/MyNoticeService.java
  17. 69 0
      jeeplus-modules/jeeplus-system/src/main/java/com/jeeplus/sys/controller/app/AppUserController.java

+ 82 - 0
jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/common/CommonApi.java

@@ -0,0 +1,82 @@
+package com.jeeplus.business.common;//package com.jeeplus.finance.common;
+//
+//import cn.hutool.core.util.ObjectUtil;
+//import cn.hutool.extra.spring.SpringUtil;
+//import io.swagger.annotations.Api;
+//import org.apache.commons.lang3.StringUtils;
+//import org.flowable.bpmn.model.BpmnModel;
+//import org.flowable.bpmn.model.FlowNode;
+//import org.flowable.engine.RepositoryService;
+//import org.flowable.engine.RuntimeService;
+//import org.flowable.engine.TaskService;
+//import org.flowable.task.api.Task;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.http.ResponseEntity;
+//import org.springframework.web.bind.annotation.GetMapping;
+//import org.springframework.web.bind.annotation.RequestMapping;
+//import org.springframework.web.bind.annotation.RequestParam;
+//import org.springframework.web.bind.annotation.RestController;
+//
+//import java.util.Objects;
+//
+//@RestController
+//@RequestMapping(value = "/commonApi")
+//public class CommonApi {
+//
+//    @Autowired
+//    private TaskService taskService;
+//    @Autowired
+//    private RuntimeService runtimeService;
+//
+//    /**
+//     * 根据procInsId获取当前流程节点名称
+//     * @param procInsId
+//     * @return
+//     */
+//    @GetMapping("/getTaskNameByProcInsId")
+//    public ResponseEntity<String> getTaskNameByProcInsId(@RequestParam("procInsId") String procInsId) {
+//        String res = getTaskName(procInsId);
+//        return ResponseEntity.ok(res);
+//    }
+//
+//    /**
+//     * 判断当前审核节点是否为最后一个节点
+//     * @param procInsId
+//     * @return
+//     */
+//    @GetMapping("/isLastTask")
+//    @Deprecated
+//    public ResponseEntity<Boolean> isLastTask(@RequestParam("procInsId") String procInsId) {
+//        Task task = taskService.createTaskQuery().processInstanceId(procInsId).active().singleResult();
+//        // task为null则审核节点为最后一个审核节点
+//        if (ObjectUtil.isEmpty(task)) {
+//            return ResponseEntity.ok(true);
+//        }
+//        return ResponseEntity.ok(false);
+//    }
+//
+//    /**
+//     * 根据procInsId获取当前流程节点名称
+//     * @param procInsId
+//     * @return
+//     */
+//    public String getTaskName(String procInsId) {
+//        if (StringUtils.isNotBlank(procInsId)) {
+//            Task task = taskService.createTaskQuery().processInstanceId(procInsId).active().singleResult();
+//            if (task!=null) {
+//                //获取流程发布Id信息
+//                String definitionId = runtimeService.createProcessInstanceQuery().processInstanceId(procInsId).singleResult().getProcessDefinitionId();
+//                //获取bpm对象
+//                BpmnModel bpmnModel = SpringUtil.getBean (RepositoryService.class).getBpmnModel(definitionId);
+//                //传节点定义key 获取当前节点
+//                FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(task.getTaskDefinitionKey());
+//                if (ObjectUtil.isNotEmpty(flowNode)) {
+//                    if (StringUtils.isNotBlank(flowNode.getName())) {
+//                        return flowNode.getName();
+//                    }
+//                }
+//            }
+//        }
+//        return "";
+//    }
+//}

+ 200 - 0
jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/common/CommonUtils.java

@@ -0,0 +1,200 @@
+package com.jeeplus.business.common;//package com.jeeplus.finance.common;
+//
+//import cn.hutool.core.collection.CollectionUtil;
+//import cn.hutool.extra.spring.SpringUtil;
+////import com.jeeplus.sys.service.DictTypeService;
+//import com.jeeplus.sys.service.OfficeService;
+//import com.jeeplus.sys.service.dto.OfficeDTO;
+//import com.jeeplus.sys.service.dto.RoleDTO;
+//import com.jeeplus.sys.service.dto.UserDTO;
+//import com.jeeplus.sys.utils.UserUtils;
+//
+//import java.util.ArrayList;
+//import java.util.Date;
+//import java.util.List;
+//import java.util.stream.Collectors;
+//
+//public class CommonUtils {
+//
+//    /**
+//     * 判断当前用户是否拥有 “ 财务部门主任 ” 的角色
+//     * @return
+//     */
+//    public static boolean haveRoleCwBmzr() {
+//        UserDTO userDTO = UserUtils.getCurrentUserDTO();
+//        List<RoleDTO> roles = new ArrayList<>(); // 当前用户拥有的角色
+//        if (CollectionUtil.isNotEmpty(userDTO.getRoleDTOList())) {
+//            roles = userDTO.getRoleDTOList().stream().filter(item -> {
+//                // 过滤当前用户是否拥有财务部门主任角色
+//                if ("cw_bmzr".equals(item.getEnName())) {
+//                    return true;
+//                }
+//                return false;
+//            }).collect(Collectors.toList());
+//        }
+//        if (CollectionUtil.isNotEmpty(roles)) {
+//            return true;
+//        }
+//        return false;
+//    }
+//    /**
+//     * 判断当前用户是否拥有 “ 财务员工 ” 的角色
+//     * @return
+//     */
+//    public static boolean haveRoleCwYg() {
+//        UserDTO userDTO = UserUtils.getCurrentUserDTO();
+//        List<RoleDTO> roles = new ArrayList<>(); // 当前用户拥有的角色
+//        if (CollectionUtil.isNotEmpty(userDTO.getRoleDTOList())) {
+//            roles = userDTO.getRoleDTOList().stream().filter(item -> {
+//                // 过滤当前用户是否拥有财务员工角色
+//                if ("cwyg".equals(item.getEnName())) {
+//                    return true;
+//                }
+//                return false;
+//            }).collect(Collectors.toList());
+//        }
+//        if (CollectionUtil.isNotEmpty(roles)) {
+//            return true;
+//        }
+//        return false;
+//    }
+//    /**
+//     * 判断当前用户是否拥有 “ 专家组成员 ” 的角色
+//     * @return
+//     */
+//    public static boolean haveRoleZjzcy() {
+//        UserDTO userDTO = UserUtils.getCurrentUserDTO();
+//        List<RoleDTO> roles = new ArrayList<>(); // 当前用户拥有的角色
+//        if (CollectionUtil.isNotEmpty(userDTO.getRoleDTOList())) {
+//            roles = userDTO.getRoleDTOList().stream().filter(item -> {
+//                // 过滤当前用户是否拥有专家组成员角色
+//                if ("zjzcy".equals(item.getEnName())) {
+//                    return true;
+//                }
+//                return false;
+//            }).collect(Collectors.toList());
+//        }
+//        if (CollectionUtil.isNotEmpty(roles)) {
+//            return true;
+//        }
+//        return false;
+//    }
+//    /**
+//     * 判断当前用户是否拥有 “ 项目员工 ” 的角色
+//     * @return
+//     */
+//    public static boolean haveRoleXmYg() {
+//        UserDTO userDTO = UserUtils.getCurrentUserDTO();
+//        List<RoleDTO> roles = new ArrayList<>(); // 当前用户拥有的角色
+//        if (CollectionUtil.isNotEmpty(userDTO.getRoleDTOList())) {
+//            roles = userDTO.getRoleDTOList().stream().filter(item -> {
+//                // 过滤当前用户是否拥有项目员工角色
+//                if ("xmyg".equals(item.getEnName())) {
+//                    return true;
+//                }
+//                return false;
+//            }).collect(Collectors.toList());
+//        }
+//        if (CollectionUtil.isNotEmpty(roles)) {
+//            return true;
+//        }
+//        return false;
+//    }
+//    /**
+//     * 判断当前用户是否拥有 “ 会计所长 ” 的角色
+//     * @return
+//     */
+//    public static boolean haveRoleKjsz() {
+//        UserDTO userDTO = UserUtils.getCurrentUserDTO();
+//        List<RoleDTO> roles = new ArrayList<>(); // 当前用户拥有的角色
+//        if (CollectionUtil.isNotEmpty(userDTO.getRoleDTOList())) {
+//            roles = userDTO.getRoleDTOList().stream().filter(item -> {
+//                // 过滤当前用户是否拥有会计所长角色
+//                if ("kjsz".equals(item.getEnName())) {
+//                    return true;
+//                }
+//                return false;
+//            }).collect(Collectors.toList());
+//        }
+//        if (CollectionUtil.isNotEmpty(roles)) {
+//            return true;
+//        }
+//        return false;
+//    }
+//    /**
+//     * 判断当前用户是否拥有 “ 质控部主任 ” 的角色
+//     * @return
+//     */
+//    public static boolean haveRoleZkbzr() {
+//        UserDTO userDTO = UserUtils.getCurrentUserDTO();
+//        List<RoleDTO> roles = new ArrayList<>(); // 当前用户拥有的角色
+//        if (CollectionUtil.isNotEmpty(userDTO.getRoleDTOList())) {
+//            roles = userDTO.getRoleDTOList().stream().filter(item -> {
+//                // 过滤当前用户是否拥有质控部主任角色
+//                if ("zkbzr".equals(item.getEnName())) {
+//                    return true;
+//                }
+//                return false;
+//            }).collect(Collectors.toList());
+//        }
+//        if (CollectionUtil.isNotEmpty(roles)) {
+//            return true;
+//        }
+//        return false;
+//    }
+//
+//    /**
+//     * 判断当前用户是否拥有 “ 质控部员工 ” 的角色
+//     * @return
+//     */
+//    public static boolean haveRoleZkbyg() {
+//        UserDTO userDTO = UserUtils.getCurrentUserDTO();
+//        List<RoleDTO> roles = new ArrayList<>(); // 当前用户拥有的角色
+//        if (CollectionUtil.isNotEmpty(userDTO.getRoleDTOList())) {
+//            roles = userDTO.getRoleDTOList().stream().filter(item -> {
+//                // 过滤当前用户是否拥有质控部员工角色
+//                if ("zkbyg".equals(item.getEnName())) {
+//                    return true;
+//                }
+//                return false;
+//            }).collect(Collectors.toList());
+//        }
+//        if (CollectionUtil.isNotEmpty(roles)) {
+//            return true;
+//        }
+//        return false;
+//    }
+//
+//    /**
+//     * 计算时间差
+//     * 注:参数小于或等于当前时间
+//     */
+//    public static String timeDef(Date time) {
+//        Long def = new Date().getTime() - time.getTime();
+//        // 计算天数
+//        long day = def / (1000 * 60 * 60 * 24);
+//        if (day != 0) {
+//            return day + "天前";
+//        }
+//        // 计算小时
+//        long house = def / (1000 * 60 * 60);
+//        if (house != 0) {
+//            return house + "小时前";
+//        }
+//        // 计算分钟
+//        long min = def / (1000 * 60);
+//        return min + "分钟前";
+//    }
+//
+//    /**
+//     * 获取所有公司中的第一个
+//     * @return
+//     */
+//    public static String getFirstCompanyId() {
+//        List<OfficeDTO> allCompany = SpringUtil.getBean(OfficeService.class).getAllCompany();
+//        if (CollectionUtil.isNotEmpty(allCompany)) {
+//            return allCompany.get(0).getId();
+//        }
+//        return "";
+//    }
+//}

+ 46 - 0
jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/common/enterpriseSearch/EnterpriseJsonRespDTO.java

@@ -0,0 +1,46 @@
+package com.jeeplus.business.common.enterpriseSearch;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+public class EnterpriseJsonRespDTO {
+
+    private Integer error_code;
+
+    private Boolean success;
+
+    private String message;
+
+    private D data;
+
+    @Data
+    class D {
+        private BigDecimal searchtime;
+
+        private Integer total;
+
+        private String num;
+
+        private Integer viewtotal;
+
+        private List<Items> items;
+    }
+
+    @Data
+    class Items {
+        private String entname;
+
+        private String legalname;
+
+        private String esdate;
+
+        private Integer id;
+
+        private String companyid;
+    }
+
+
+}

+ 87 - 0
jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/common/enterpriseSearch/EnterpriseSearchApi.java

@@ -0,0 +1,87 @@
+package com.jeeplus.business.common.enterpriseSearch;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jeeplus.logging.annotation.ApiLog;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Api("企业信息查询API")
+@RestController
+@RequestMapping(value = "/enterprise_search_api")
+public class EnterpriseSearchApi {
+
+    /**
+     * 根据关键字查询相关企业
+     * @param keyword
+     * @return
+     */
+    @ApiOperation(value = "根据关键字查询相关企业")
+    @PostMapping("enterpriseSearchByName")
+    public String enterpriseSearchByName(@RequestParam String keyword){
+        if(StringUtils.isBlank(keyword)){
+            return null;
+        }
+        return  TicketQueryUtils.enterpriseSearchByName(keyword);
+    }
+
+    /**
+     * 根据id查询企业税号
+     * @param id
+     * @return
+     */
+    @ApiOperation(value = "根据id查询企业税号")
+    @PostMapping("enterpriseTicketInfo")
+    public Object enterpriseTicketInfo(String id){
+        if(StringUtils.isBlank(id)){
+            return null;
+        }
+        return TicketQueryUtils.enterpriseTicketInfoQueryById(id);
+    }
+
+    /**
+     * 分页查询相关企业
+     * @param enterpriseSearchDTO
+     * @param page
+     * @return
+     * @throws Exception
+     */
+    @ApiLog("分页查询相关企业")
+    @GetMapping("list")
+    public ResponseEntity<IPage<EnterpriseSearchDTO>> data(EnterpriseSearchDTO enterpriseSearchDTO, Page<EnterpriseSearchDTO> page) throws Exception {
+        IPage<EnterpriseSearchDTO> result = new Page<EnterpriseSearchDTO>();
+        List<EnterpriseSearchDTO> list = new ArrayList<>();
+        if (ObjectUtil.isNotEmpty(enterpriseSearchDTO)){
+            if (StringUtils.isNotBlank(enterpriseSearchDTO.getENTNAME())){
+                String s = TicketQueryUtils.enterpriseSearchPage(enterpriseSearchDTO.getENTNAME(),String.valueOf(page.getSize()),String.valueOf(page.getCurrent()));
+                if (StringUtils.isNotBlank(s)){
+                    EnterpriseJsonRespDTO enterpriseJsonRespDTO = JSONObject.parseObject(s, EnterpriseJsonRespDTO.class); //json字符串直接转java对象
+                    if (ObjectUtil.isNotEmpty(enterpriseJsonRespDTO)){
+                        if(ObjectUtil.isNotEmpty(enterpriseJsonRespDTO.getData())){
+                            if(CollectionUtil.isNotEmpty(enterpriseJsonRespDTO.getData().getItems())){
+                                enterpriseJsonRespDTO.getData().getItems().stream().forEach(item->{
+                                    String s1 = TicketQueryUtils.enterpriseTicketInfoQueryById(item.getCompanyid());
+                                    EnterpriseSearchDTO dto = JSONObject.parseObject(s1, EnterpriseSearchDTO.class);
+                                    list.add(dto);
+                                });
+                                result.setRecords(list);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        return ResponseEntity.ok (result);
+    }
+
+}

+ 53 - 0
jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/common/enterpriseSearch/EnterpriseSearchDTO.java

@@ -0,0 +1,53 @@
+package com.jeeplus.business.common.enterpriseSearch;
+
+import lombok.Data;
+
+/**
+ * 企业查询DTO
+ *     "ENTNAME": "用友网络科技股份有限公司", //企业全称
+ *     "OPLOC": "北京市海淀区北清路68号", //注册地址
+ *     "UNCID": "91110000600001760P",  //统一信用代码
+ *     "GONGSH": "110000005119254", //工商注册号
+ *     "ORGCODE": "600001760", //组织机构代码
+ *     "HASUNIFY": true, //是否三证合一
+ *     "TAXNUMBER": "91110000600001760P", //税号(同统一信用代码)
+ */
+@Data
+public class EnterpriseSearchDTO  {
+
+    /**
+     * 企业全称
+     */
+    private String ENTNAME;
+
+    /**
+     * 注册地址
+     */
+    private String OPLOC;
+
+    /**
+     * 统一信用代码
+     */
+    private String UNCID;
+
+    /**
+     * 工商注册号
+     */
+    private String GONGSH;
+
+    /**
+     * 组织机构代码
+     */
+    private String ORGCODE;
+
+    /**
+     * 是否三证合一
+     */
+    private Boolean HASUNIFY;
+
+    /**
+     * 税号(同统一信用代码)
+     */
+    private String TAXNUMBER;
+
+}

+ 279 - 0
jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/common/enterpriseSearch/TicketQueryUtils.java

@@ -0,0 +1,279 @@
+package com.jeeplus.business.common.enterpriseSearch;
+
+import com.alibaba.fastjson.JSONObject;
+
+import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.HttpsURLConnection;
+import javax.net.ssl.SSLSession;
+import java.io.*;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.net.URLEncoder;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+名称:企业开票税号查询
+ * 功能:
+ * 1、根据关键字查询相关企业,或者根据企业信息的id查询企业的详细信息;
+ * 2、可以查到企业的名称、联系方式等基本信息;
+ * 3、可以查到公司纳税人识别号、注册地址等开发票需要的详细信息。
+ *
+ * 状态:
+ * 	    错误码	说明
+ *  	300001	请求header中没有设置apikey
+ *  	300002	api不存在或url无法解析
+ *  	300003	apikey不存在,请输入正确的apikey
+ *  	300004	服务剩余次数不足,请再次购买
+ *  	300005	未设置ip白名单
+ *  	300006	IP白名单中不包含您的IP
+ *  	300007	系统繁忙稍候再试
+ *  	300008	访问次数超载
+ *  	300009	未找到节流信息
+ *  	300010	header参数中缺少需签名的参数值
+ *  	300011	缺少需验证的参数列表
+ *  	300012	签名信息不匹配
+ *  	300013	header中缺少参数appkey
+ *  	300014	header中缺少参数appsecret
+ *  	300015	api已过期,请另行购买
+ *  	300017	要求必填参数为不能为空
+ *  	300018	api没有授权
+ */
+public class TicketQueryUtils {
+
+    private static String ApiCode = "35afe9ec3263424f9a18feb837177169";
+    private static String searchByNameUrl = "https://api.yonyoucloud.com/apis/dst/enterpriseTicketQuery/enterpriseSearchByName";
+    private static String ticketInfoQueryUrl = "https://api.yonyoucloud.com/apis/dst/enterpriseTicketQuery/enterpriseTicketInfo";
+
+    private static final String DEF_CHATSET = "UTF-8";
+    private static final int DEF_CONN_TIMEOUT = 30000;
+    private static final int DEF_READ_TIMEOUT = 30000;
+    private static String userAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36";
+
+
+    /**
+     * 根据关键字查询相关企业
+     * @param keyword
+     * @return
+     */
+    public static String enterpriseSearchByName(String keyword){
+        String result =null;
+        String method = "GET";
+        String paramFormat = "form";
+        Map<String, Object> params = new HashMap<String, Object>();//请求参数
+        params.put("keyword", keyword);
+
+        Map<String, Object> headerParams = new HashMap<String, Object>();//请求头参数
+        headerParams.put("apicode", ApiCode);//APICODE
+        try {
+            result = net(searchByNameUrl, params, headerParams, method, paramFormat);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return result;
+    }
+
+    /**
+     * 根据关键字以及分页信息查询相关企业
+     * @param keyword
+     * @return
+     */
+    public static String enterpriseSearchPage(String keyword,String size,String pageNum){
+        String result =null;
+        String method = "GET";
+        String paramFormat = "form";
+        Map<String, Object> params = new HashMap<String, Object>();//请求参数
+        params.put("keyword", keyword);
+        params.put("size", size);
+        params.put("pageNum", pageNum);
+
+        Map<String, Object> headerParams = new HashMap<String, Object>();//请求头参数
+        headerParams.put("apicode", ApiCode);//APICODE
+        try {
+            result = net(searchByNameUrl, params, headerParams, method, paramFormat);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return result;
+    }
+
+    /**
+     * 根据id查询企业税号
+     * @param id
+     * @return
+     */
+    public static String enterpriseTicketInfoQueryById(String id){
+        String result =null;
+        String method = "GET";
+        String paramFormat = "form";
+        Map<String, Object> params = new HashMap<String, Object>();//请求参数
+        params.put("id", id);
+
+        Map<String, Object> headerParams = new HashMap<String, Object>();//请求头参数
+        headerParams.put("apicode", ApiCode);//APICODE
+
+        try {
+            result = net(ticketInfoQueryUrl, params, headerParams, method, paramFormat);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return result;
+    }
+
+    private static final HostnameVerifier DO_NOT_VERIFY = new HostnameVerifier() {
+        public boolean verify(String hostname, SSLSession session) {
+            return true;
+        }
+    };
+
+    /**
+     *
+     * @param strUrl 请求地址
+     * @param params 请求参数
+     * @param method 请求方法
+     * @return  网络请求字符串
+     * @throws Exception
+     */
+    public static String net(String strUrl, Map<String,Object> params, Map<String,Object> headerParams, String method, String paramFormat) throws Exception {
+        HttpURLConnection conn = null;
+        BufferedReader reader = null;
+        String rs = null;
+        try {
+            String contentType = null;
+            if(headerParams.containsKey("Content-Type"))
+                contentType = headerParams.get("Content-Type").toString();
+
+            StringBuffer sb = new StringBuffer();
+            if(method==null || method.equals("GET")){
+                strUrl = strUrl+"?"+urlencode(params);
+            }
+
+            trustAllHttpsCertificates();
+            HttpsURLConnection.setDefaultHostnameVerifier(DO_NOT_VERIFY);
+
+            URL url = new URL(strUrl);
+            conn = (HttpURLConnection) url.openConnection();
+            if(method==null || method.equals("GET")){
+                conn.setRequestMethod("GET");
+            }else{
+                conn.setRequestMethod("POST");
+                conn.setDoOutput(true);
+            }
+            conn.setRequestProperty("User-agent", userAgent);
+            for (String i : headerParams.keySet()) {
+                conn.setRequestProperty(i, headerParams.get(i).toString());
+            }
+            if("form".equals(paramFormat) && !"application/x-www-form-urlencoded".equals(contentType) && !"application/xml".equals(contentType)) {
+                conn.setRequestProperty("Content-Type", "application/json;charset=utf-8");
+            }
+            conn.setUseCaches(false);
+            conn.setConnectTimeout(DEF_CONN_TIMEOUT);
+            conn.setReadTimeout(DEF_READ_TIMEOUT);
+            conn.setInstanceFollowRedirects(false);
+            conn.connect();
+            if (params!= null && method.equals("POST")) {
+                try {
+                    OutputStream out = conn.getOutputStream();
+                    if("form".equals(paramFormat)) {
+                        if("application/x-www-form-urlencoded".equals(contentType))
+                            out.write(urlencode(params).getBytes("utf-8"));
+                        else if("application/xml".equals(contentType))
+                            out.write(xmlencode(params).getBytes("utf-8"));
+                        else
+                            out.write(jsonencode(params).getBytes("utf-8"));
+                    } else
+                        out.write(params.toString().getBytes("utf-8"));
+
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+            InputStream is = conn.getInputStream();
+            reader = new BufferedReader(new InputStreamReader(is, DEF_CHATSET));
+            String strRead = null;
+            while ((strRead = reader.readLine()) != null) {
+                sb.append(strRead);
+            }
+            rs = sb.toString();
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            if (reader != null) {
+                reader.close();
+            }
+            if (conn != null) {
+                conn.disconnect();
+            }
+        }
+        return rs;
+    }
+
+    //将map型转为请求参数型
+    public static String urlencode(Map<String,Object>data) {
+        StringBuilder sb = new StringBuilder();
+        for (Map.Entry i : data.entrySet()) {
+            try {
+                if(("").equals(i.getKey())) {
+                    sb.append(URLEncoder.encode(i.getValue()+"","UTF-8"));
+                } else {
+                    sb.append(i.getKey()).append("=").append(URLEncoder.encode(i.getValue()+"","UTF-8")).append("&");
+                }
+            } catch (UnsupportedEncodingException e) {
+                e.printStackTrace();
+            }
+        }
+        return sb.toString();
+    }
+
+    //将map型转为请求参数型
+    public static String jsonencode(Map<String,Object>data) {
+        JSONObject jparam = new JSONObject();
+        for (Map.Entry i : data.entrySet())
+            jparam.put((String) i.getKey(), i.getValue());
+
+        return jparam.toString();
+    }
+
+    //将map型转为请求参数型
+    public static String xmlencode(Map<String,Object>data) {
+        StringBuffer xmlData = new StringBuffer();
+        xmlData.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
+        for (Map.Entry i : data.entrySet())
+            xmlData.append("<" + i.getKey() + ">" + i.getValue() + "</" + i.getKey() + ">");
+
+        return xmlData.toString();
+    }
+
+    static class miTM implements javax.net.ssl.TrustManager, javax.net.ssl.X509TrustManager {
+        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
+            return null;
+        }
+
+        public boolean isServerTrusted(java.security.cert.X509Certificate[] certs) {
+            return true;
+        }
+
+        public boolean isClientTrusted(java.security.cert.X509Certificate[] certs) {
+            return true;
+        }
+
+        public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType)
+                throws java.security.cert.CertificateException {
+            return;
+        }
+
+        public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType)
+                throws java.security.cert.CertificateException {
+            return;
+        }
+    }
+
+    private static void trustAllHttpsCertificates() throws Exception {
+        javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1];
+        javax.net.ssl.TrustManager tm = new miTM();
+        trustAllCerts[0] = tm;
+        javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext.getInstance("SSL");
+        sc.init(null, trustAllCerts, null);
+        HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
+    }
+}

+ 40 - 0
jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/common/flowable/dto/CommitParamDTO.java

@@ -0,0 +1,40 @@
+package com.jeeplus.business.common.flowable.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 流程审核通过时需要的参数
+ */
+@Data
+public class CommitParamDTO<T> implements Serializable {
+
+    private String taskId;
+    private String taskDefKey;
+    private String procInsId;
+    private String procDefId;
+    private String assignee;
+    private T vars;
+    private Cope cope; // 抄送的参数,按需使用
+
+    @Data
+    class Cope implements Serializable{
+        private List<String> userIds;
+        private String procDefId;
+        private String procInsId; // 后端自己给,前端没传
+        private String procDefName;
+        private String procInsName;
+        private String taskName;
+    }
+
+//    @Data
+//    class Comment {
+//        private String assignee;
+//        private String message;
+//        private String status;
+//        private String type;
+//        private List<String> userIds;
+//    }
+}

+ 1 - 0
jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/drive/mapper/xml/DriveMaintainMapper.xml

@@ -8,6 +8,7 @@
         select distinct
             a.id,
             a.create_by_id,
+            su.name as "createName",
             a.create_time,
             a.drive_info_id,
             a.drive_maintain_type,

+ 2 - 0
jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/drive/service/dto/DriveMaintainDTO.java

@@ -66,6 +66,8 @@ public class DriveMaintainDTO extends BaseDTO {
      */
     @Excel(name = "车牌号",width = 16)
     private String driveNumber;
+    @Excel(name = "申请人",width = 16)
+    private String createName;
     @Excel(name = "申请时间",width = 16,exportFormat = "yyyy-MM-dd")
     private Date createTime;
 

+ 13 - 1
jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/humanResources/service/StaffUserInfoService.java

@@ -225,7 +225,19 @@ public class StaffUserInfoService {
                 if (StringUtils.isNotBlank(staffUserInfoDTO1.getUserId())){
                     userId=staffUserInfoDTO1.getUserId();
                 }else {
-                    userId = UUID.randomUUID().toString().replace("-", "");
+
+                    //userId = UUID.randomUUID().toString().replace("-", "");
+                    // 获取UUID的字符串表示形式并移除所有非数字字符
+                    userId = UUID.randomUUID().toString().replaceAll("[^0-9]", "");
+
+                    while (userId.length() < 19) {
+                        userId = userId + UUID.randomUUID().toString().replaceAll("[^0-9]", "");
+                    }
+                    /*do{
+                        userId = userId + UUID.randomUUID().toString().replaceAll("[^0-9]", "");
+                    }while (userId.length() > 19);*/
+
+                    userId = userId.substring(0, 19);
                 }
                 UserDTO dto = new UserDTO();
                 dto.setId(userId);

+ 15 - 2
jeeplus-modules/jeeplus-flowable/src/main/java/com/jeeplus/extension/controller/FlowCopyController.java

@@ -16,6 +16,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.Iterator;
+
 /**
  * 流程抄送Controller
  *
@@ -37,12 +39,23 @@ public class FlowCopyController {
      * @return
      */
     @GetMapping("list")
-    public ResponseEntity list(FlowCopyDTO flowCopyDTO, Page <FlowCopyDTO> page) throws Exception {
+    public ResponseEntity list(FlowCopyDTO flowCopyDTO, Page <FlowCopyDTO> page, String type,String userName) throws Exception {
         QueryWrapper <FlowCopyDTO> queryWrapper = QueryWrapperGenerator.buildQueryCondition ( flowCopyDTO, FlowCopyDTO.class );
-        if (StringUtils.isNotBlank(flowCopyDTO.getCreateBy().getName())){
+        if (null != flowCopyDTO && null != flowCopyDTO.getCreateBy() && StringUtils.isNotBlank(flowCopyDTO.getCreateBy().getName())){
             queryWrapper.like("createBy.name",flowCopyDTO.getCreateBy().getName());
         }
+
         IPage <FlowCopyDTO> result = flowCopyService.findPage ( page, queryWrapper );
+        if ("ydd".equals(type)) {
+            Iterator<FlowCopyDTO> iterator = result.getRecords().iterator();
+            while (iterator.hasNext()) {
+                FlowCopyDTO record = iterator.next();
+                if (!record.getProcInsName().contains("嘉溢-请假申请")) {
+                    iterator.remove(); // 删除不满足条件的数据
+                }
+            }
+        }
+
         return ResponseEntity.ok ( result );
     }
 

+ 4 - 4
jeeplus-modules/jeeplus-flowable/src/main/java/com/jeeplus/flowable/controller/FlowableProcessController.java

@@ -46,11 +46,11 @@ public class FlowableProcessController {
      * 流程定义列表
      */
     @GetMapping("list")
-    public ResponseEntity processListData(Page <Map> page, String category) {
+    public ResponseEntity processListData(Page <Map> page, String category,String type) {
         /*
          * 保存两个对象,一个是ProcessDefinition(流程定义),一个是Deployment(流程部署)
          */
-        page = flowProcessService.processList ( page, category );
+        page = flowProcessService.processList ( page, category, type );
         return ResponseEntity.ok ( page );
     }
 
@@ -253,7 +253,7 @@ public class FlowableProcessController {
         /*
          * 保存两个对象,一个是ProcessDefinition(流程定义),一个是Deployment(流程部署)
          */
-        page = flowProcessService.processList(page, "");
+        page = flowProcessService.processList(page, "","");
         List<Map> records = page.getRecords();
         Map resultMap = new HashMap();
         for (Map map : records) {
@@ -272,7 +272,7 @@ public class FlowableProcessController {
         /*
          * 保存两个对象,一个是ProcessDefinition(流程定义),一个是Deployment(流程部署)
          */
-        page = flowProcessService.processList(page, "");
+        page = flowProcessService.processList(page, "","");
         List<Map> records = page.getRecords();
         Map resultMap = new HashMap();
         for (Map map : records) {

+ 6 - 6
jeeplus-modules/jeeplus-flowable/src/main/java/com/jeeplus/flowable/controller/FlowableTaskController.java

@@ -85,8 +85,8 @@ public class FlowableTaskController {
     private IMailApi mailApi;
 
     @GetMapping("todo")
-    public ResponseEntity todoListData(Page <ProcessVo> page, Flow flow) {
-        page = flowTaskService.todoList ( page, flow );
+    public ResponseEntity todoListData(Page <ProcessVo> page, Flow flow, String type) {
+        page = flowTaskService.todoList ( page, flow, type );
         return ResponseEntity.ok ( page );
     }
 
@@ -96,8 +96,8 @@ public class FlowableTaskController {
      * @return
      */
     @GetMapping("historic")
-    public ResponseEntity historicListData(Page <HisTaskVo> page, Flow flow) {
-        page = flowTaskService.historicList ( page, flow );
+    public ResponseEntity historicListData(Page <HisTaskVo> page, Flow flow, String type) {
+        page = flowTaskService.historicList ( page, flow, type );
         return ResponseEntity.ok ( page );
     }
 
@@ -107,8 +107,8 @@ public class FlowableTaskController {
      * @return
      */
     @GetMapping("myApplyed")
-    public ResponseEntity myApplyedListData(Page <ProcessVo> page, Flow flow) throws Exception {
-        page = flowTaskService.getMyStartedProcIns ( userApi.getByToken ( TokenProvider.getCurrentToken ( ) ), page, flow );
+    public ResponseEntity myApplyedListData(Page <ProcessVo> page, Flow flow, String type) throws Exception {
+        page = flowTaskService.getMyStartedProcIns ( userApi.getByToken ( TokenProvider.getCurrentToken ( ) ), page, flow, type );
         return ResponseEntity.ok ( page );
     }
 

+ 24 - 5
jeeplus-modules/jeeplus-flowable/src/main/java/com/jeeplus/flowable/service/FlowProcessService.java

@@ -14,6 +14,7 @@ import com.jeeplus.common.TokenProvider;
 import com.jeeplus.flowable.constant.FlowableConstant;
 import com.jeeplus.flowable.model.TaskComment;
 import com.jeeplus.flowable.service.converter.json.FlowModelService;
+import com.jeeplus.flowable.utils.StringUtils;
 import com.jeeplus.flowable.vo.ActionType;
 import com.jeeplus.flowable.vo.ProcessStatus;
 import com.jeeplus.flowable.vo.ProcessVo;
@@ -63,10 +64,7 @@ import javax.xml.stream.XMLInputFactory;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 import java.io.*;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 import java.util.zip.ZipInputStream;
 
@@ -136,7 +134,7 @@ public class FlowProcessService {
      * 流程定义列表
      */
     @InterceptorIgnore(tenantLine = "true")
-    public Page <Map> processList(Page <Map> page, String category) {
+    public Page <Map> processList(Page <Map> page, String category, String type) {
         ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery ( )/*.processDefinitionTenantId ( tenantApi.getCurrentTenantId ( ) )*/.active ( )
                 .latestVersion ( ).orderByProcessDefinitionKey ( ).asc ( );
         if ( StrUtil.isNotEmpty ( category ) ) {
@@ -144,6 +142,27 @@ public class FlowProcessService {
         }
 
         List <ProcessDefinition> processDefinitionList = processDefinitionQuery.list ( );
+
+        if (StringUtils.isNotBlank(type)) {
+            if (type.equals("ydd")) {
+                // 创建一个包含需要保留的流程定义名称的集合
+                List<String> requiredNames = Arrays.asList("物资管理-领用申请", "物资管理-采购申请", "嘉溢-请假申请");
+                /**
+                 * 移动端工作台数据处理
+                 */
+                // 使用流操作筛选出符合条件的流程定义
+                //它首先创建了一个包含需要保留的流程定义名称的集合 requiredNames,
+                // 然后使用 stream() 方法将流程定义列表转换为流,
+                // 接着使用 filter 方法筛选出名称在 requiredNames 中的流程定义,
+                // 最后使用 collect 方法将结果收集到一个新的列表中
+                List<ProcessDefinition> newList = processDefinitionList.stream()
+                        .filter(processDefinition -> requiredNames.contains(processDefinition.getName()))
+                        .collect(Collectors.toList());
+                processDefinitionList.clear();
+                processDefinitionList.addAll(newList);
+            }
+        }
+
         List records = Lists.newArrayList ( );
         for (ProcessDefinition processDefinition : processDefinitionList) {
             if ( this.isAuth ( userApi.getByToken ( TokenProvider.getCurrentToken ( ) ), processDefinition.getId ( ) ) ) {

+ 72 - 31
jeeplus-modules/jeeplus-flowable/src/main/java/com/jeeplus/flowable/service/FlowTaskService.java

@@ -351,7 +351,7 @@ public class FlowTaskService {
      *
      * @return
      */
-    public Page <ProcessVo> todoList(Page <ProcessVo> page, Flow flow) {
+    public Page <ProcessVo> todoList(Page <ProcessVo> page, Flow flow, String type) {
         List <HashMap <String, String>> result = new ArrayList <HashMap <String, String>> ( );
         String userId = userApi.getByToken ( TokenProvider.getCurrentToken ( ) ).getId ( );//ObjectUtils.toString(UserUtils.getUser().getId());
         // =============== 已经签收或者等待签收的任务  ===============
@@ -390,28 +390,45 @@ public class FlowTaskService {
         }
         List records = Lists.newArrayList ( );
         for (Task task : todoList) {
-            Process process = SpringUtil.getBean ( RepositoryService.class ).getBpmnModel ( task.getProcessDefinitionId ( ) ).getMainProcess ( );
-            ProcessVo processVo = new ProcessVo ( );
-            TaskVo taskVo = new TaskVo ( task );
-            taskVo.setProcessDefKey ( process.getId ( ) );
-            processVo.setTask ( taskVo );
-            processVo.setVars ( task.getProcessVariables ( ) );
-            processVo.setProcessDefinitionName ( ProcessDefCache.get ( task.getProcessDefinitionId ( ) ).getName ( ) );
-            processVo.setVersion ( ProcessDefCache.get ( task.getProcessDefinitionId ( ) ).getVersion ( ) );
-            processVo.setStatus ( "todo" );
-            records.add ( processVo );
+
+            String processDefinitionId = task.getProcessDefinitionId();
+            String processName = ProcessDefCache.get(processDefinitionId).getName();
+
+            // 如果类型为 "ydd" 并且流程名称满足条件,或者类型为空
+            if (("ydd".equals(type) && isRequiredProcess(processName)) || StringUtils.isBlank(type)) {
+                Process process = SpringUtil.getBean ( RepositoryService.class ).getBpmnModel ( task.getProcessDefinitionId ( ) ).getMainProcess ( );
+
+                ProcessVo processVo = new ProcessVo();
+                TaskVo taskVo = new TaskVo(task);
+
+                taskVo.setProcessDefKey ( process.getId ( ) );
+                processVo.setTask(taskVo);
+                processVo.setVars(task.getProcessVariables());
+                processVo.setProcessDefinitionName(processName);
+                processVo.setVersion(ProcessDefCache.get(processDefinitionId).getVersion());
+                processVo.setStatus("todo");
+
+                records.add(processVo);
+            }
         }
         page.setRecords ( records );
         return page;
     }
 
+    // 判断流程名称是否满足条件
+    private boolean isRequiredProcess(String processName) {
+        return processName.equals("物资管理-领用申请") ||
+                processName.equals("物资管理-采购申请") ||
+                processName.equals("嘉溢-请假申请");
+    }
+
     /**
      * 获取已办任务列表
      *
      * @param page
      * @return
      */
-    public Page <HisTaskVo> historicList(Page <HisTaskVo> page, Flow act) {
+    public Page <HisTaskVo> historicList(Page <HisTaskVo> page, Flow act, String type) {
         String userId = userApi.getByToken ( TokenProvider.getCurrentToken ( ) ).getId ( );
 
         HistoricTaskInstanceQuery histTaskQuery = historyService.createHistoricTaskInstanceQuery ( ).taskAssignee ( userId ).finished ( )
@@ -447,28 +464,31 @@ public class FlowTaskService {
 
         List records = Lists.newArrayList ( );
         for (HistoricTaskInstance histTask : histList) {
-            HisTaskVo hisTaskVo = new HisTaskVo ( histTask );
-            hisTaskVo.setProcessDefinitionName ( ProcessDefCache.get ( histTask.getProcessDefinitionId ( ) ).getName ( ) );
-            hisTaskVo.setBack ( isBack ( histTask ) );
-            List <Task> currentTaskList = taskService.createTaskQuery ( ).processInstanceId ( histTask.getProcessInstanceId ( ) ).list ( );
-            if ( ((List) currentTaskList).size ( ) > 0 ) {
-                TaskVo currentTaskVo = new TaskVo ( currentTaskList.get ( 0 ) );
-                hisTaskVo.setCurrentTask ( currentTaskVo );
-            }
 
+            String processDefinitionId = histTask.getProcessDefinitionId();
+            String processName = ProcessDefCache.get(processDefinitionId).getName();
+            if (("ydd".equals(type) && isRequiredProcess(processName)) || StringUtils.isBlank(type)){
+                HisTaskVo hisTaskVo = new HisTaskVo ( histTask );
+                hisTaskVo.setProcessDefinitionName ( ProcessDefCache.get ( histTask.getProcessDefinitionId ( ) ).getName ( ) );
+                hisTaskVo.setBack ( isBack ( histTask ) );
+                List <Task> currentTaskList = taskService.createTaskQuery ( ).processInstanceId ( histTask.getProcessInstanceId ( ) ).list ( );
+                if ( ((List) currentTaskList).size ( ) > 0 ) {
+                    TaskVo currentTaskVo = new TaskVo ( currentTaskList.get ( 0 ) );
+                    hisTaskVo.setCurrentTask ( currentTaskVo );
+                }
 
-            // 获取意见评论内容
-
-            List <TaskComment> commentList = this.getTaskComments ( histTask.getId ( ) );
-            if ( commentList.size ( ) > 0 ) {
-                TaskComment comment = commentList.get ( commentList.size ( ) - 1 );
-                hisTaskVo.setComment ( comment.getMessage ( ) );
-                hisTaskVo.setLevel ( comment.getLevel ( ) );
-                hisTaskVo.setType ( comment.getType ( ) );
-                hisTaskVo.setStatus ( comment.getStatus ( ) );
+                // 获取意见评论内容
+                List <TaskComment> commentList = this.getTaskComments ( histTask.getId ( ) );
+                if ( commentList.size ( ) > 0 ) {
+                    TaskComment comment = commentList.get ( commentList.size ( ) - 1 );
+                    hisTaskVo.setComment ( comment.getMessage ( ) );
+                    hisTaskVo.setLevel ( comment.getLevel ( ) );
+                    hisTaskVo.setType ( comment.getType ( ) );
+                    hisTaskVo.setStatus ( comment.getStatus ( ) );
 
+                }
+                records.add ( hisTaskVo );
             }
-            records.add ( hisTaskVo );
         }
         page.setRecords ( records );
         return page;
@@ -566,7 +586,7 @@ public class FlowTaskService {
      * @param user
      * @return
      */
-    public Page <ProcessVo> getMyStartedProcIns(UserDTO user, Page <ProcessVo> page, Flow flow) throws Exception {
+    public Page <ProcessVo> getMyStartedProcIns(UserDTO user, Page <ProcessVo> page, Flow flow, String type) throws Exception {
         HistoricProcessInstanceQuery query = historyService.createHistoricProcessInstanceQuery ( ).startedBy ( user.getId ( ) ).includeProcessVariables ( ).orderByProcessInstanceStartTime ( ).desc ( );
         if ( flow.getBeginDate ( ) != null ) {
             query.startedAfter ( flow.getBeginDate ( ) );
@@ -587,6 +607,27 @@ public class FlowTaskService {
             int size = (int) (page.getSize ( ));
             histList = query.involvedUser ( user.getId ( ) ).listPage ( start, size );
         }
+
+        if (StringUtils.isNotBlank(type)) {
+            if (type.equals("ydd")) {
+                // 创建一个包含需要保留的流程定义名称的集合
+                List<String> requiredNames = Arrays.asList("物资管理-领用申请", "物资管理-采购申请", "嘉溢-请假申请");
+                /**
+                 * 移动端工作台数据处理
+                 */
+                // 使用流操作筛选出符合条件的流程定义
+                //它首先创建了一个包含需要保留的流程定义名称的集合 requiredNames,
+                // 然后使用 stream() 方法将流程定义列表转换为流,
+                // 接着使用 filter 方法筛选出名称在 requiredNames 中的流程定义,
+                // 最后使用 collect 方法将结果收集到一个新的列表中
+                List<HistoricProcessInstance> newList = histList.stream()
+                        .filter(processDefinition -> requiredNames.contains(processDefinition.getProcessDefinitionName()))
+                        .collect(Collectors.toList());
+                histList.clear();
+                histList.addAll(newList);
+            }
+        }
+
         List records = Lists.newArrayList ( );
         for (HistoricProcessInstance historicProcessInstance : histList) {
             ProcessVo processVo = flowProcessService.queryProcessState ( historicProcessInstance.getProcessDefinitionId ( ), historicProcessInstance.getId ( ) );

+ 1 - 1
jeeplus-modules/jeeplus-flowable/src/main/java/com/jeeplus/flowable/service/MyNoticeService.java

@@ -123,7 +123,7 @@ public class MyNoticeService {
         if (StringUtils.isNotEmpty(taskName)) {
             notice.setTaskName(taskName);
         } else {
-            Page<Map> page = flowProcessService.processList(new Page<Map>(), "");
+            Page<Map> page = flowProcessService.processList(new Page<Map>(), "","");
             List<Map> records = page.getRecords();
             Map resultMap = new HashMap();
             for (Map<String, String> map : records) {

+ 69 - 0
jeeplus-modules/jeeplus-system/src/main/java/com/jeeplus/sys/controller/app/AppUserController.java

@@ -3,22 +3,28 @@
  */
 package com.jeeplus.sys.controller.app;
 
+import cn.hutool.extra.spring.SpringUtil;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
+import com.jeeplus.common.TokenProvider;
 import com.jeeplus.sys.controller.UserController;
 import com.jeeplus.sys.domain.Office;
 import com.jeeplus.sys.domain.User;
+import com.jeeplus.sys.feign.IUserApi;
 import com.jeeplus.sys.service.OfficeService;
 import com.jeeplus.sys.service.UserService;
+import com.jeeplus.sys.service.dto.UserDTO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * 用户Controller
@@ -36,6 +42,69 @@ public class AppUserController extends UserController {
     UserService userService;
 
     /**
+     * 移动端人员单选所需-获取机构JSON数据。
+     *
+     * @return
+     */
+    @GetMapping("treeDataRadio")
+    public ResponseEntity treeDataRadio(String type) {
+        UserDTO userDTO = SpringUtil.getBean(IUserApi.class).getByToken(TokenProvider.getCurrentToken());
+        List<Office> list = new ArrayList<>();
+        if (null != type && type.equals("ydd")) {
+            list = officeService.list().stream()
+                    .filter(office -> office.getTenantId().equals(userDTO.getTenantDTO().getId()))
+                    .collect(Collectors.toList());
+        } else {
+            list = officeService.list ( );
+        }
+
+        List rootTree = getRootTreeRadio ( list, type, userDTO );
+        return ResponseEntity.ok ( rootTree );
+    }
+
+    private List <Map> getRootTreeRadio(List <Office> list, String type, UserDTO userDTO) {
+        List <Map> offices = Lists.newArrayList ( );
+
+        List <Office> rootTrees = new ArrayList<>();
+        if (null != type && type.equals("ydd")){
+            rootTrees = officeService.treeData().stream()
+                    .filter(office -> office.getTenantId().equals(userDTO.getTenantDTO().getId()))
+                    .collect(Collectors.toList());
+        } else {
+            rootTrees = officeService.treeData ( );
+        }
+
+        for (Office root : rootTrees) {
+            offices.add ( getChildOfTreeRadio ( root, list ) );
+        }
+        return offices;
+    }
+
+    private Map getChildOfTreeRadio(Office officeItem, List <Office> officeList) {
+        Map oMap = new HashMap ( );
+        oMap.put ( "id", officeItem.getId ( ) );
+        oMap.put ( "type", "office" );
+        oMap.put ( "label", officeItem.getName ( ) );
+        List children = Lists.newArrayList ( );
+        oMap.put ( "children", children );
+        List <User> list = userService.lambdaQuery ( ).eq ( User::getOfficeId, officeItem.getId ( ) ).list ( );
+        for (int i = 0; i < list.size ( ); i++) {
+            User e = list.get ( i );
+            Map <String, Object> map = Maps.newHashMap ( );
+            map.put ( "id", e.getId ( ) );
+            map.put ( "type", "user" );
+            map.put ( "label", e.getName ( ) );
+            children.add ( map );
+        }
+        for (Office child : officeList) {
+            if ( child.getParentId ( ).equals ( officeItem.getId ( ) ) ) {
+                children.add ( getChildOfTreeRadio ( child, officeList ) );
+            }
+        }
+        return oMap;
+    }
+
+    /**
      * 获取机构JSON数据。
      *
      * @return