sangwenwei 1 year ago
parent
commit
b81387fffe
28 changed files with 754 additions and 124 deletions
  1. 5 0
      jeeplus-api/jeeplus-public-modules-api/src/main/java/com/jeeplus/sys/service/dto/WorkAttachmentInfoDTO.java
  2. 5 0
      jeeplus-api/jeeplus-system-api/src/main/java/com/jeeplus/flowable/factory/JyProjectApiFallbackFactory.java
  3. 7 0
      jeeplus-api/jeeplus-system-api/src/main/java/com/jeeplus/flowable/feign/IJyProjectApi.java
  4. 35 2
      jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/project/controller/JyProjectController.java
  5. 9 1
      jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/project/domain/JyProject.java
  6. 5 0
      jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/project/domain/JyProjectAudit.java
  7. 27 0
      jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/project/domain/JyProjectOutInstanceFile.java
  8. 45 0
      jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/project/domain/JyProjectOutinstance.java
  9. 1 1
      jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/project/mapper/JyProjectAuditMapper.java
  10. 9 0
      jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/project/mapper/JyProjectOutInstanceFileMapper.java
  11. 16 0
      jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/project/mapper/JyProjectOutinstanceMapper.java
  12. 6 3
      jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/project/mapper/xml/JyProjectAuditMapper.xml
  13. 7 0
      jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/project/mapper/xml/JyProjectOutInstanceFileMapper.xml
  14. 40 0
      jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/project/mapper/xml/JyProjectOutinstanceMapper.xml
  15. 13 2
      jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/project/mapper/xml/ProjectListMapper.xml
  16. 118 31
      jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/project/service/JyProjectService.java
  17. 49 0
      jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/project/service/dto/JyProjectOutinstanceDTO.java
  18. 14 0
      jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/project/service/mapstruct/JyProjectOutInstanceWrapper.java
  19. 15 0
      jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/useSeal/controller/SignetController.java
  20. 3 0
      jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/useSeal/mapper/SignetMapper.java
  21. 26 0
      jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/useSeal/mapper/xml/SignetMapper.xml
  22. 24 3
      jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/useSeal/service/SignetService.java
  23. 9 3
      jeeplus-modules/jeeplus-flowable/src/main/java/com/jeeplus/modules/flowable/listener/JyProjectExecutionListener.java
  24. 6 0
      jeeplus-modules/jeeplus-public-modules/src/main/java/com/jeeplus/pubmodules/oss/domain/WorkAttachment.java
  25. 5 0
      jeeplus-modules/jeeplus-xxl-job-executor-sample/src/main/java/com/jeeplus/domain/JyAudit.java
  26. 56 0
      jeeplus-modules/jeeplus-xxl-job-executor-sample/src/main/java/com/jeeplus/domain/JyUserSeal.java
  27. 9 0
      jeeplus-modules/jeeplus-xxl-job-executor-sample/src/main/java/com/xxl/job/executor/feign/JyProjectUserSealFeignApi.java
  28. 190 78
      jeeplus-modules/jeeplus-xxl-job-executor-sample/src/main/java/com/xxl/job/executor/service/jobhandler/SampleXxlJob.java

+ 5 - 0
jeeplus-api/jeeplus-public-modules-api/src/main/java/com/jeeplus/sys/service/dto/WorkAttachmentInfoDTO.java

@@ -78,5 +78,10 @@ public class WorkAttachmentInfoDTO extends BaseDTO {
     @TableField(exist = false)
     private String temporaryUrl;
 
+    /**
+     * 嘉溢外审附件类型
+     */
+    private String jyFileType;
+
 
 }

+ 5 - 0
jeeplus-api/jeeplus-system-api/src/main/java/com/jeeplus/flowable/factory/JyProjectApiFallbackFactory.java

@@ -22,6 +22,11 @@ public class JyProjectApiFallbackFactory implements FallbackFactory<IJyProjectAp
             public void updateStatus(String id) {
 
             }
+
+            @Override
+            public String findSeal() {
+                return null;
+            }
         };
     }
 }

+ 7 - 0
jeeplus-api/jeeplus-system-api/src/main/java/com/jeeplus/flowable/feign/IJyProjectApi.java

@@ -27,4 +27,11 @@ public interface IJyProjectApi {
     @GetMapping(value = "/jyProject/updateStatus")
     void updateStatus(@RequestParam(value = "id") String id);
 
+    /**
+     * 查询用印信息
+     * @return
+     */
+    @GetMapping("/useSeal/findSeal")
+    String findSeal();
+
 }

+ 35 - 2
jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/project/controller/JyProjectController.java

@@ -16,6 +16,7 @@ import com.jeeplus.business.project.service.JyProjectAuditService;
 import com.jeeplus.business.project.service.JyProjectService;
 import com.jeeplus.business.project.service.dto.JyProjectAuditDTO;
 import com.jeeplus.business.project.service.dto.JyProjectDTO;
+import com.jeeplus.business.project.service.dto.JyProjectOutinstanceDTO;
 import com.jeeplus.business.workContractInfo.domain.JyWorkContractInfo;
 import com.jeeplus.business.workContractInfo.service.dto.JyWorkContractInfoDto;
 import com.jeeplus.common.utils.ResponseUtil;
@@ -186,9 +187,9 @@ public class JyProjectController {
     }
 
     /**
-     * 查询项目一级校审中逾期未发起的项目
+     * 查询项目一级校审中未发起的项目
      */
-    @ApiOperation(value = "查询项目一级校审中逾期未发起的项目")
+    @ApiOperation(value = "查询项目一级校审中未发起的项目")
     @GetMapping(value = "/selectAudit")
     public String selectAudit() {
         List<JyProjectAudit> list = jyProjectService.selectAudit();
@@ -366,6 +367,38 @@ public class JyProjectController {
 
     }
 
+    /**
+     * 根据id查询外审信息
+     */
+    @ApiOperation(value = "根据id查询外审信息")
+    @GetMapping(value = "/findByIdOut")
+    public ResponseEntity<JyProjectOutinstanceDTO> findByIdOut(@RequestParam String id){
+        JyProjectOutinstanceDTO dto = jyProjectService.findByIdOut(id);
+        return ResponseEntity.ok(dto);
+    }
+
+    /**
+     * 新增/修改外审
+     */
+    @ApiOperation(value = "新增/修改外审")
+    @PostMapping(value = "/saveFormOut")
+    public ResponseEntity saveFormOut(@RequestBody JyProjectOutinstanceDTO jyProjectOutinstanceDTO) throws Exception{
+        String id = jyProjectService.saveFormOut(jyProjectOutinstanceDTO);
+        return ResponseUtil.newInstance().add("businessTable", "jy_project_outinstance").add("businessId", id).ok ("操作成功");
+    }
+
+    /**
+     * 根据id修改外审状态值status
+     * @param dto
+     * @return
+     */
+    @ApiOperation(value = "根据id修改外审状态值status")
+    @PostMapping(value = "/updateStatusByOutId")
+    public ResponseEntity<String> updateStatusByOutId(@RequestBody JyProjectOutinstanceDTO dto) {
+        String s = jyProjectService.updateStatusByOutId(dto);
+        return ResponseEntity.ok(s);
+    }
+
 
 
 

+ 9 - 1
jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/project/domain/JyProject.java

@@ -58,7 +58,7 @@ public class JyProject extends BaseEntity implements Serializable {
     /**
      * 外审
      */
-    private String outIssuance;
+    private String outInstance;
 
     /**
      * 报批签发
@@ -269,6 +269,14 @@ public class JyProject extends BaseEntity implements Serializable {
      */
     private String sealId;
 
+    /**
+     * 外审信息
+     */
+    private String outInstanceId;
+    private String procInsIdOut;
+    private String taskIdOut;
+
+
 
 
 

+ 5 - 0
jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/project/domain/JyProjectAudit.java

@@ -80,6 +80,11 @@ public class JyProjectAudit extends BaseEntity {
     @TableField(exist = false)
     private String taskId;
 
+    @TableField(exist = false)
+    private String projectProId;
+    @TableField(exist = false)
+    private String projectDeId;
+
     private static final long serialVersionUID = 1L;
 
 

+ 27 - 0
jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/project/domain/JyProjectOutInstanceFile.java

@@ -0,0 +1,27 @@
+package com.jeeplus.business.project.domain;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.jeeplus.core.domain.BaseEntity;
+import lombok.Data;
+
+/**
+ * 嘉溢-项目外审-附件
+ * @TableName cw_project_report_archive_file
+ */
+@Data
+@TableName("jy_project_out_instance_file")
+public class JyProjectOutInstanceFile extends BaseEntity {
+
+
+    /**
+     * 文件id
+     */
+    private String workAttachmentId;
+
+    /**
+     * 文件类型
+     */
+    private String fileType;
+
+    private static final long serialVersionUID = 1L;
+}

+ 45 - 0
jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/project/domain/JyProjectOutinstance.java

@@ -0,0 +1,45 @@
+package com.jeeplus.business.project.domain;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.jeeplus.core.domain.BaseEntity;
+import com.jeeplus.sys.domain.WorkAttachmentInfo;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+@TableName("jy_project_outinstance")
+public class JyProjectOutinstance extends BaseEntity {
+
+    /**
+     * 项目id
+     */
+    private String projectId;
+
+    /**
+     * 登记状态
+     */
+    private String status;
+
+    /*
+    流程id
+     */
+    private String procInsId;
+    private String processDefinitionId;
+
+    /**
+     * 备注
+     */
+    private String remarks;
+
+    /**
+     * 附件信息
+     */
+    @TableField(exist = false)
+    private List<WorkAttachmentInfo> fileList;
+
+    private static final long serialVersionUID = 1L;
+
+
+}

+ 1 - 1
jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/project/mapper/JyProjectAuditMapper.java

@@ -25,7 +25,7 @@ public interface JyProjectAuditMapper extends BaseMapper<JyProjectAudit> {
     @InterceptorIgnore(tenantLine = "true")
     void updateStatus2(String id);
     @InterceptorIgnore(tenantLine = "true")
-    List<JyProjectAudit> selectAudit(@Param("newDate")Date newDate);
+    List<JyProjectAudit> selectAudit();
 
     List<JyProjectAuditDTO> getByProjectId(@Param("projectId") String projectId);
 }

+ 9 - 0
jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/project/mapper/JyProjectOutInstanceFileMapper.java

@@ -0,0 +1,9 @@
+package com.jeeplus.business.project.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.jeeplus.business.project.domain.JyProjectOutInstanceFile;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface JyProjectOutInstanceFileMapper extends BaseMapper<JyProjectOutInstanceFile> {
+}

+ 16 - 0
jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/project/mapper/JyProjectOutinstanceMapper.java

@@ -0,0 +1,16 @@
+package com.jeeplus.business.project.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.jeeplus.business.project.domain.JyProjectOutinstance;
+import com.jeeplus.business.project.service.dto.JyProjectOutinstanceDTO;
+import com.jeeplus.sys.domain.WorkAttachmentInfo;
+import com.jeeplus.sys.service.dto.WorkAttachmentInfoDTO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface JyProjectOutinstanceMapper extends BaseMapper<JyProjectOutinstance> {
+    JyProjectOutinstanceDTO findById(@Param("id") String id);
+
+    List<WorkAttachmentInfoDTO> findDtos(@Param("id")String id);
+}

+ 6 - 3
jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/project/mapper/xml/JyProjectAuditMapper.xml

@@ -90,14 +90,17 @@
         select
         <include refid="Audit_Column_List"></include>,
         pr.name as projectName,
-        art.ID_ as task_id
+        art.ID_ as task_id,
+        pr.proc_ins_id as projectProId,
+        pr.process_definition_id as projectDeId
         from jy_project_audit pa
         left join jy_project_record pr on pa.project_id = pr.id
         LEFT JOIN act_ru_task art ON pa.proc_ins_id = art.PROC_INST_ID_
+        LEFT JOIN act_ru_task art1 ON pr.proc_ins_id = art1.PROC_INST_ID_
         where pa.del_flag = '0'
               and pa.audit_level = '1'
-              and (pa.status = '0' or pa.status = null)
-              and pa.project_agree_time &lt;= #{newDate}
+              and pr.status = '5'
+              and pa.status = '0'
     </select>
 
 

+ 7 - 0
jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/project/mapper/xml/JyProjectOutInstanceFileMapper.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.jeeplus.business.project.mapper.JyProjectOutInstanceFileMapper">
+
+</mapper>

+ 40 - 0
jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/project/mapper/xml/JyProjectOutinstanceMapper.xml

@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.jeeplus.business.project.mapper.JyProjectOutinstanceMapper">
+    <select id="findById" resultType="com.jeeplus.business.project.service.dto.JyProjectOutinstanceDTO">
+        select
+            id,
+            project_id,
+            status,
+            remarks,
+            proc_ins_id,
+            process_definition_id
+        from jy_project_outinstance
+        where id=#{id}
+    </select>
+
+    <select id="findDtos" resultType="com.jeeplus.sys.service.dto.WorkAttachmentInfoDTO">
+        select
+            wa.id,
+			wa.url,
+			wa.attachment_name AS `name`,
+			wa.create_by_id AS `by`,
+			wa.create_time,
+			jy_pof.file_type as jyFileType
+		from
+		    work_attachment wa
+		left join jy_project_out_instance_file jy_pof on wa.id = jy_pof.work_attachment_id
+		where
+		    wa.del_flag = 0
+			AND wa.attachment_id = #{id}
+    </select>
+
+
+
+
+
+
+
+
+
+</mapper>

+ 13 - 2
jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/project/mapper/xml/ProjectListMapper.xml

@@ -81,7 +81,6 @@
            a.client_name,
            a.status,
            a.report_issuance,
-           a.out_instance,
            a.reports_submit,
            a.review_status,
            a.contract_status,
@@ -108,7 +107,11 @@
            pa3.proc_ins_id as procInsId3,
            art1.ID_ as task_id_audit1,
            art2.ID_ as task_id_audit2,
-           art3.ID_ as task_id_audit3
+           art3.ID_ as task_id_audit3,
+           po.status as outInstance,
+           po.id as outInstanceId,
+           po.proc_ins_id as procInsIdOut,
+           art4.ID_ as task_id_out
         FROM
             jy_project_record a
             LEFT JOIN sys_user b ON a.create_by_id = b.id
@@ -122,6 +125,8 @@
             LEFT JOIN act_ru_task art1 ON pa1.proc_ins_id = art1.PROC_INST_ID_
             LEFT JOIN act_ru_task art2 ON pa2.proc_ins_id = art2.PROC_INST_ID_
             LEFT JOIN act_ru_task art3 ON pa3.proc_ins_id = art3.PROC_INST_ID_
+            left join jy_project_outinstance po on a.id=po.project_id
+            LEFT JOIN act_ru_task art4 ON po.proc_ins_id = art4.PROC_INST_ID_
             ${ew.customSqlSegment}
             ORDER BY a.create_time DESC
     </select>
@@ -184,6 +189,10 @@
            art1.ID_ as task_id_audit1,
            art2.ID_ as task_id_audit2,
            art3.ID_ as task_id_audit3,
+           po.status as outInstance,
+           po.id as outInstanceId,
+           po.proc_ins_id as procInsIdOut,
+           art4.ID_ as task_id_out,
            so.name as auditOffice
         FROM
             jy_project_record a
@@ -199,6 +208,8 @@
             LEFT JOIN act_ru_task art1 ON pa1.proc_ins_id = art1.PROC_INST_ID_
             LEFT JOIN act_ru_task art2 ON pa2.proc_ins_id = art2.PROC_INST_ID_
             LEFT JOIN act_ru_task art3 ON pa3.proc_ins_id = art3.PROC_INST_ID_
+            left join jy_project_outinstance po on a.id=po.project_id
+            LEFT JOIN act_ru_task art4 ON po.proc_ins_id = art4.PROC_INST_ID_
         where a.id = #{id}
     </select>
 

+ 118 - 31
jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/project/service/JyProjectService.java

@@ -9,20 +9,14 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.jeeplus.assess.program.configuration.projectList.domain.ProgramProjectListInfo;
-import com.jeeplus.assess.program.configuration.projectList.service.dto.ProgramAuditAssessPeopleDto;
-import com.jeeplus.assess.program.configuration.projectList.service.dto.ProgramAuditDto;
-import com.jeeplus.assess.program.configuration.projectList.service.dto.ProjectListDto;
 import com.jeeplus.assess.workContract.mapper.WorkContractInfoMapper;
-import com.jeeplus.business.project.domain.JyProject;
-import com.jeeplus.business.project.domain.JyProjectAudit;
-import com.jeeplus.business.project.domain.JyProjectMembers;
-import com.jeeplus.business.project.mapper.JyProjectAuditMapper;
-import com.jeeplus.business.project.mapper.JyProjectMapper;
-import com.jeeplus.business.project.mapper.JyProjectMemberMapper;
+import com.jeeplus.business.project.domain.*;
+import com.jeeplus.business.project.mapper.*;
 import com.jeeplus.business.project.service.dto.JyProjectAuditDTO;
 import com.jeeplus.business.project.service.dto.JyProjectDTO;
+import com.jeeplus.business.project.service.dto.JyProjectOutinstanceDTO;
 import com.jeeplus.business.project.service.mapstruct.JyProjectAuditWrapper;
+import com.jeeplus.business.project.service.mapstruct.JyProjectOutInstanceWrapper;
 import com.jeeplus.business.useSeal.domain.Signet;
 import com.jeeplus.business.useSeal.mapper.SignetMapper;
 import com.jeeplus.business.useSeal.service.SignetService;
@@ -42,6 +36,7 @@ import com.jeeplus.sys.feign.IUserApi;
 import com.jeeplus.sys.feign.IWorkAttachmentApi;
 import com.jeeplus.sys.mapper.DictValueMapper;
 import com.jeeplus.sys.service.dto.UserDTO;
+import com.jeeplus.sys.service.dto.WorkAttachmentInfoDTO;
 import org.apache.commons.compress.utils.Lists;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
@@ -54,6 +49,7 @@ import org.springframework.web.bind.annotation.RequestParam;
 import javax.annotation.Resource;
 import java.text.SimpleDateFormat;
 import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
 
 
 @Service
@@ -93,6 +89,12 @@ public class JyProjectService {
     @Autowired
     private SignetMapper signetMapper;
 
+    @Resource
+    private JyProjectOutinstanceMapper jyProjectOutinstanceMapper;
+
+    @Resource
+    private JyProjectOutInstanceFileMapper jyProjectOutInstanceFileMapper;
+
 
     /**
      * 项目登记列表
@@ -112,15 +114,15 @@ public class JyProjectService {
         }
         //一审状态
         if (StringUtils.isNotBlank(info.getFirstInstanceStatus())){
-            wrapper.eq("a.first_instance_status", info.getFirstInstanceStatus());
+            wrapper.eq("pa1.status", info.getFirstInstanceStatus());
         }
         //二审状态
         if (StringUtils.isNotBlank(info.getSecondInstanceStatus())){
-            wrapper.eq("a.second_instance_status", info.getSecondInstanceStatus());
+            wrapper.eq("pa2.status", info.getSecondInstanceStatus());
         }
         //三审状态
         if (StringUtils.isNotBlank(info.getThirdInstanceStatus())){
-            wrapper.eq("a.third_instance_status", info.getThirdInstanceStatus());
+            wrapper.eq("pa3.status", info.getThirdInstanceStatus());
         }
         //项目编号
         if (StringUtils.isNotBlank(info.getNo())){
@@ -151,8 +153,8 @@ public class JyProjectService {
             wrapper.eq("a.report_issuance", info.getReportIssuance());
         }
         //外审
-        if (StringUtils.isNotBlank(info.getOutIssuance())){
-            wrapper.eq("a.out_issuance", info.getOutIssuance());
+        if (StringUtils.isNotBlank(info.getOutInstance())){
+            wrapper.eq("po.status", info.getOutInstance());
         }
         //报批签发
         if (StringUtils.isNotBlank(info.getReportSubmit())){
@@ -325,6 +327,11 @@ public class JyProjectService {
         jyProjectAudit3.setAuditLevel("3");
         jyProjectAuditMapper.insert(jyProjectAudit3);
 
+        //外审添加
+        JyProjectOutinstance jyProjectOutinstance = new JyProjectOutinstance();
+        jyProjectOutinstance.setProjectId(jyProject.getId());
+        jyProjectOutinstance.setStatus("0");
+        jyProjectOutinstanceMapper.insert(jyProjectOutinstance);
 
 
         // 保存附件信息
@@ -683,22 +690,7 @@ public class JyProjectService {
      * @return
      */
     public List<JyProjectAudit> selectAudit() {
-        //获取一个月前的时间
-        //创建时间格式化对象
-        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-        //获取当前时间
-        Date currentDate = new Date();
-        //将当前时间转化为字符串
-        String format = simpleDateFormat.format(currentDate);
-        //创建calendar对象
-        Calendar instance = Calendar.getInstance();
-        //将日期设置为当前时间
-        instance.setTime(currentDate);
-        //将日期往前推一个月
-        instance.add(Calendar.MONTH,-1);
-        //获取推送后的日期
-        Date newDate = instance.getTime();
-        List<JyProjectAudit> list=jyProjectAuditMapper.selectAudit(newDate);
+        List<JyProjectAudit> list=jyProjectAuditMapper.selectAudit();
         return list;
     }
 
@@ -1023,7 +1015,102 @@ public class JyProjectService {
         return data;
     }
 
+    /**
+     * 根据id查询外审信息
+     * @param id
+     * @return
+     */
+    public JyProjectOutinstanceDTO findByIdOut(String id) {
+        //根据id获取外审信息
+        JyProjectOutinstanceDTO jyProjectOutinstanceDTO=jyProjectOutinstanceMapper.findById(id);
+
+        if (null != jyProjectOutinstanceDTO){
+            List<WorkAttachmentInfoDTO> fileList =Lists.newArrayList();
+            // 查询附件信息
+            List<WorkAttachmentInfoDTO> files = jyProjectOutinstanceMapper.findDtos(id);
+            if (CollectionUtils.isNotEmpty(files)) {
+                for (WorkAttachmentInfoDTO i : files) {
+                    i.setCreateBy(SpringUtil.getBean ( IUserApi.class ).getById(i.getBy()));
+                }
+            }
+            fileList.addAll(files);
+            jyProjectOutinstanceDTO.setFileList(fileList);
+            //获取项目信息
+            JyProjectDTO byId = findById(jyProjectOutinstanceDTO.getProjectId());
+            jyProjectOutinstanceDTO.setJyProjectList(byId);
+        }
+
 
+        return jyProjectOutinstanceDTO;
 
 
+    }
+
+    /**
+     * 新增或修改外审信息
+     * @param jyProjectOutinstanceDTO
+     * @return
+     */
+    public String saveFormOut(JyProjectOutinstanceDTO jyProjectOutinstanceDTO) {
+        UserDTO userDTO = SpringUtil.getBean ( IUserApi.class ).getByToken(TokenProvider.getCurrentToken());
+        //代码转化,将dto中的对象赋到实体类中
+        JyProjectOutinstance jyProjectOutinstance = JyProjectOutInstanceWrapper.INSTANCE.toEntity(jyProjectOutinstanceDTO);
+        //获取审核信息
+        JyProjectOutinstanceDTO byId = jyProjectOutinstanceMapper.findById(jyProjectOutinstance.getId());
+        if (ObjectUtil.isNotEmpty(byId)){
+            if (StringUtils.isNotBlank(jyProjectOutinstanceDTO.getRemarks())){
+                jyProjectOutinstance.setRemarks(jyProjectOutinstanceDTO.getRemarks());
+            }
+        }
+        if (StringUtils.isNotBlank(jyProjectOutinstance.getId())){
+            jyProjectOutinstanceMapper.updateById(jyProjectOutinstance);
+        }else{
+            jyProjectOutinstanceMapper.insert(jyProjectOutinstance);
+        }
+        //附件
+        if (ObjectUtil.isNotEmpty(jyProjectOutinstanceDTO)) {
+            SpringUtil.getBean ( IWorkAttachmentApi.class ).deleteByAttachmentId(jyProjectOutinstance.getId());
+            AtomicInteger sort = new AtomicInteger(1);
+            jyProjectOutinstanceDTO.getFileList().stream().forEach(item->{
+                //保存附件信息
+                WorkAttachmentInfo workAttachmentDto = new WorkAttachmentInfo();
+                workAttachmentDto.setName(item.getName());
+                workAttachmentDto.setSize(item.getSize());
+                workAttachmentDto.setUrl(item.getUrl());
+                Map<String,String> map = new HashMap<>();
+                String workAttachmentDtoInfo = JSON.toJSONString(workAttachmentDto);
+                String userDTOInfo = JSON.toJSONString(userDTO);
+                String attachmentId = jyProjectOutinstance.getId();
+                String attachmentFlag = "jyProjectOut";
+                String sortInfo = Integer.toString(sort.get());
+                map.put("workAttachmentDtoInfo",workAttachmentDtoInfo);
+                map.put("userDTOInfo",userDTOInfo);
+                map.put("attachmentId",attachmentId);
+                map.put("attachmentFlag",attachmentFlag);
+                map.put("sortInfo",sortInfo);
+                String fileId = SpringUtil.getBean ( IWorkAttachmentApi.class ).saveFile(map);
+                sort.getAndIncrement();
+
+                //保存附件类型
+                JyProjectOutInstanceFile jyProjectOutInstanceFile = new JyProjectOutInstanceFile();
+                jyProjectOutInstanceFile.setFileType(item.getJyFileType());
+                jyProjectOutInstanceFile.setWorkAttachmentId(fileId);
+                jyProjectOutInstanceFileMapper.insert(jyProjectOutInstanceFile);
+            });
+        }
+        return jyProjectOutinstance.getId();
+    }
+
+    /**
+     * 根据id修改外审状态值status
+     * @param dto
+     * @return
+     */
+    public String updateStatusByOutId(JyProjectOutinstanceDTO dto) {
+        JyProjectOutinstance jyProjectOutinstance = new JyProjectOutinstance();
+        jyProjectOutinstance.setId(dto.getId());
+        jyProjectOutinstance.setStatus(dto.getStatus());
+        jyProjectOutinstanceMapper.update(jyProjectOutinstance,new QueryWrapper<JyProjectOutinstance>().lambda().eq(JyProjectOutinstance::getId,jyProjectOutinstance.getId()) );
+        return "操作成功";
+    }
 }

+ 49 - 0
jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/project/service/dto/JyProjectOutinstanceDTO.java

@@ -0,0 +1,49 @@
+package com.jeeplus.business.project.service.dto;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.jeeplus.business.workContractInfo.service.dto.JyWorkContractInfoDto;
+import com.jeeplus.core.domain.BaseEntity;
+import com.jeeplus.core.service.dto.BaseDTO;
+import com.jeeplus.sys.domain.WorkAttachmentInfo;
+import com.jeeplus.sys.service.dto.WorkAttachmentInfoDTO;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class JyProjectOutinstanceDTO extends BaseDTO {
+
+    /**
+     * 项目id
+     */
+    private String projectId;
+
+    /**
+     * 登记状态
+     */
+    private String status;
+
+    /*
+    流程id
+     */
+    private String procInsId;
+    private String processDefinitionId;
+
+    /**
+     * 备注
+     */
+    private String remarks;
+
+    /**
+     * 附件信息
+     */
+    private List<WorkAttachmentInfoDTO> fileList;
+
+    private JyProjectDTO jyProjectList;
+
+    private JyWorkContractInfoDto jyWorkContractInfoList;
+
+    private static final long serialVersionUID = 1L;
+
+
+}

+ 14 - 0
jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/project/service/mapstruct/JyProjectOutInstanceWrapper.java

@@ -0,0 +1,14 @@
+package com.jeeplus.business.project.service.mapstruct;
+
+import com.jeeplus.business.project.domain.JyProjectOutinstance;
+import com.jeeplus.business.project.mapper.JyProjectOutinstanceMapper;
+import com.jeeplus.business.project.service.dto.JyProjectOutinstanceDTO;
+import com.jeeplus.core.mapstruct.EntityWrapper;
+import org.mapstruct.Mapper;
+import org.mapstruct.ReportingPolicy;
+import org.mapstruct.factory.Mappers;
+
+@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE, uses = {})
+public interface JyProjectOutInstanceWrapper extends EntityWrapper<JyProjectOutinstanceDTO, JyProjectOutinstance> {
+    JyProjectOutInstanceWrapper INSTANCE=Mappers.getMapper(JyProjectOutInstanceWrapper.class);
+}

+ 15 - 0
jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/useSeal/controller/SignetController.java

@@ -1,8 +1,10 @@
 package com.jeeplus.business.useSeal.controller;
 
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.jeeplus.business.project.service.dto.JyProjectDTO;
+import com.jeeplus.business.useSeal.domain.Signet;
 import com.jeeplus.common.utils.ResponseUtil;
 import com.jeeplus.business.useSeal.service.SignetService;
 import com.jeeplus.business.useSeal.service.dto.SignetDTO;
@@ -12,6 +14,7 @@ import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import java.util.List;
 
 @RestController
 @Api(tags ="用印")
@@ -67,6 +70,18 @@ public class SignetController {
     }
 
 
+    /**
+     * 查询用印信息
+     */
+    @ApiOperation(value = "查询用印信息")
+    @GetMapping("/findSeal")
+    public String findSeal(){
+        List<Signet> signetList=signetService.findSeal();
+        return JSON.toJSONString(signetList);
+    }
+
+
+
 
 
 }

+ 3 - 0
jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/useSeal/mapper/SignetMapper.java

@@ -26,4 +26,7 @@ public interface SignetMapper extends BaseMapper<Signet> {
     SignetDTO findById(String id);
 
     void updateStatusById(@Param("id")String id,@Param("status") String status);
+
+    @InterceptorIgnore(tenantLine = "true")
+    List<Signet> findSeal();
 }

+ 26 - 0
jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/useSeal/mapper/xml/SignetMapper.xml

@@ -73,4 +73,30 @@
         update jy_user_signet set status=#{status} where id=#{id}
     </update>
 
+    <select id="findSeal" resultType="com.jeeplus.business.useSeal.domain.Signet">
+        select
+            a.id,
+            a.create_by_id,
+            su.name as createByName,
+            a.create_time as createDate,
+            a.update_time,
+            a.project_id,
+            a.project_name,
+            a.no,
+            a.type,
+            a.first_type,
+            a.number,
+            a.status,
+            a.remarks,
+            a.proc_ins_id,
+            a.process_definition_id,
+            so.name as office,
+            so.id,
+            art.ID_ as task_id
+            from  jy_user_signet a
+            left join sys_user su on a.create_by_id = su.id
+            left join sys_office so on su.office_id=so.id
+            left join act_ru_task art ON a.proc_ins_id = art.PROC_INST_ID_
+    </select>
+
 </mapper>

+ 24 - 3
jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/useSeal/service/SignetService.java

@@ -37,13 +37,13 @@ import java.util.*;
 @Transactional
 public class SignetService {
 
-    @Resource
+    @Autowired
     private SignetMapper signetMapper;
 
-    @Resource
+    @Autowired
     private SerialnumTplService serialnumTplService;
 
-    @Resource
+    @Autowired
     private JyProjectMapper jyProjectMapper;
 
     @Autowired
@@ -144,6 +144,12 @@ public class SignetService {
         String projectName="";
         if (ObjectUtil.isNotEmpty(dto.getProjectList())){
             for (JyProject jyProject : dto.getProjectList()) {
+                //修改项目报告签发状态
+                JyProject project = new JyProject();
+                project.setReportIssuance(dto.getStatus());
+                project.setId(jyProject.getId());
+                jyProjectMapper.update(project,new QueryWrapper<JyProject>().lambda().eq(JyProject::getId,jyProject.getId()));
+
                 projectId+=jyProject.getProjectId()+",";
                 projectName+=jyProject.getName()+",";
             }
@@ -191,6 +197,12 @@ public class SignetService {
         String projectName="";
         if (ObjectUtil.isNotEmpty(dto.getProjectList())){
             for (JyProject jyProject : dto.getProjectList()) {
+                //修改项目报告签发状态
+                JyProject project = new JyProject();
+                project.setReportIssuance(dto.getStatus());
+                project.setId(jyProject.getId());
+                jyProjectMapper.update(project,new QueryWrapper<JyProject>().lambda().eq(JyProject::getId,jyProject.getId()));
+
                 projectId=jyProject.getId()+",";
                 projectName=jyProject.getName()+",";
             }
@@ -385,4 +397,13 @@ public class SignetService {
             }
         }
     }
+
+    /**
+     * 查询用印信息
+     * @return
+     */
+    public List<Signet> findSeal() {
+        List<Signet> seal = signetMapper.findSeal();
+        return seal;
+    }
 }

+ 9 - 3
jeeplus-modules/jeeplus-flowable/src/main/java/com/jeeplus/modules/flowable/listener/JyProjectExecutionListener.java

@@ -1,6 +1,8 @@
 package com.jeeplus.modules.flowable.listener;
 
 import cn.hutool.extra.spring.SpringUtil;
+import com.jeeplus.extension.domain.FlowCopy;
+import com.jeeplus.extension.service.FlowCopyService;
 import com.jeeplus.flowable.model.ActRuTaskInfo;
 import com.jeeplus.flowable.model.Flow;
 import com.jeeplus.flowable.service.FlowTaskService;
@@ -73,9 +75,13 @@ public class JyProjectExecutionListener implements ExecutionListener {
                 //如果是嘉溢发送的项目登记,则会给办公室进行抄送
                     //获取角色为“办公室”的角色对应人员信息
                     for (UserDTO dto : listByOfficeId) {
-                        SpringUtil.getBean(MyNoticeService.class).add(task.getProcInstId(),titleName,task.getProcDefId(),actName,
-                                flow.getAssigneeName(),format.format(flow.getHistIns().getEndTime()),
-                                dto.getName(),dto.getId(),userDTO.getId());
+                        FlowCopy flowCopy = new FlowCopy();
+                        flowCopy.setProcDefId(task.getProcDefId());
+                        flowCopy.setProcDefId(task.getProcDefId());
+                        flowCopy.setProcInsName(titleName);
+                        flowCopy.setProcInsId(task.getProcInstId());
+                        flowCopy.setUserId(dto.getId());
+                        SpringUtil.getBean(FlowCopyService.class).save(flowCopy);
                     }
 
 

+ 6 - 0
jeeplus-modules/jeeplus-public-modules/src/main/java/com/jeeplus/pubmodules/oss/domain/WorkAttachment.java

@@ -60,6 +60,12 @@ public class WorkAttachment extends BaseEntity {
      */
     private String description;
 
+
+    /**
+     * 嘉溢项目外审附件类型
+     */
+    private String jyFileType;
+
     /**
      * 附件临时地址
      *该属性不是实体字段

+ 5 - 0
jeeplus-modules/jeeplus-xxl-job-executor-sample/src/main/java/com/jeeplus/domain/JyAudit.java

@@ -73,6 +73,11 @@ public class JyAudit extends BaseEntity {
 
     private String projectName;
 
+
+    private String projectProId;
+
+    private String projectDeId;
+
     private static final long serialVersionUID = 1L;
 
 

+ 56 - 0
jeeplus-modules/jeeplus-xxl-job-executor-sample/src/main/java/com/jeeplus/domain/JyUserSeal.java

@@ -0,0 +1,56 @@
+package com.jeeplus.domain;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.jeeplus.core.domain.BaseEntity;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class JyUserSeal extends BaseEntity {
+    private String procInsId;
+
+    private String processDefinitionId;
+    /**
+     * 审核状态
+     */
+    private String status;
+
+    /**
+     * 用印编号
+     */
+    private String no;
+
+    /**
+     * 用印类型(大类)
+     */
+    private String firstType;
+
+    /**
+     * 用印类型(小类)
+     */
+    private String type;
+
+    /**
+     * 用印份数
+     */
+    private Integer number;
+
+    /**
+     * 关联项目
+     */
+    private String projectId;
+
+    /**
+     * 关联项目名称
+     */
+    private String projectName;
+
+    /*
+    说明
+     */
+    private String remarks;
+
+
+
+}

+ 9 - 0
jeeplus-modules/jeeplus-xxl-job-executor-sample/src/main/java/com/xxl/job/executor/feign/JyProjectUserSealFeignApi.java

@@ -0,0 +1,9 @@
+package com.xxl.job.executor.feign;
+
+import com.jeeplus.common.constant.AppNameConstants;
+import com.jeeplus.flowable.feign.IJyProjectApi;
+import org.springframework.cloud.openfeign.FeignClient;
+
+@FeignClient(contextId = "JyProjectUserSealFeignApi", name = AppNameConstants.APP_JYPROJECT_MODULES)
+public interface JyProjectUserSealFeignApi extends IJyProjectApi {
+}

+ 190 - 78
jeeplus-modules/jeeplus-xxl-job-executor-sample/src/main/java/com/xxl/job/executor/service/jobhandler/SampleXxlJob.java

@@ -1,9 +1,11 @@
 package com.xxl.job.executor.service.jobhandler;
 
+import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.extra.spring.SpringUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.TypeReference;
 import com.jeeplus.domain.JyAudit;
+import com.jeeplus.domain.JyUserSeal;
 import com.jeeplus.domain.MyNoticeList;
 import com.jeeplus.domain.ProgramProjectListInfo;
 import com.jeeplus.flowable.feign.IAssessApi;
@@ -11,10 +13,10 @@ import com.jeeplus.flowable.feign.IFlowableApi;
 import com.jeeplus.sys.feign.IUserApi;
 import com.jeeplus.sys.service.dto.UserDTO;
 import com.xxl.job.core.context.XxlJobHelper;
-import com.xxl.job.core.handler.IJobHandler;
 import com.xxl.job.core.handler.annotation.XxlJob;
 import com.xxl.job.executor.feign.AssessFeignApi;
 import com.xxl.job.executor.feign.JyProjectAuditFeignApi;
+import com.xxl.job.executor.feign.JyProjectUserSealFeignApi;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -172,98 +174,208 @@ public class SampleXxlJob {
         System.out.println("进来了---");
         String json = SpringUtil.getBean(JyProjectAuditFeignApi.class).selectAudit();
         List<JyAudit> projectList = JSON.parseObject(json, new TypeReference<List<JyAudit>>() {});
-        for (JyAudit jyProjectAudit : projectList) {
-            //对逾期状态及审核状态进行修改
-            SpringUtil.getBean(JyProjectAuditFeignApi.class).updateStatus(jyProjectAudit.getId());
-            //对数据进行发送通知
-            String taskName = null;
-            String titleStr = null;
-            //如果当前时间小于项目通过时间
-            if(jyProjectAudit.getProjectAgreeTime().after(new Date())){
-                taskName = "嘉溢-项目一级校审";
-                titleStr = "项目【"+ jyProjectAudit.getProjectName()+"】即将逾期,";
-            }
+        if (null != projectList){
+            for (JyAudit jyProjectAudit : projectList) {
+                //对逾期状态及审核状态进行修改
+                SpringUtil.getBean(JyProjectAuditFeignApi.class).updateStatus(jyProjectAudit.getId());
+                //对数据进行发送通知
+                String taskName = null;
+                String titleStr = null;
+                //如果当前时间小于项目通过时间
+                if(jyProjectAudit.getProjectAgreeTime().after(new Date())){
+                    taskName = "嘉溢-项目一级校审";
+                    titleStr = "项目【"+ jyProjectAudit.getProjectName()+"】即将逾期,";
+                }
 
-            //获取当前时间
-            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-            Date currentDate = new Date();
-            //将当前时间转化为字符串
-            String format = simpleDateFormat.format(currentDate);
-            //创建calendar对象
-            Calendar instance = Calendar.getInstance();
-            //将日期设置为项目通过时间
-            instance.setTime(jyProjectAudit.getProjectAgreeTime());
-            //往后推一个月
-            instance.add(Calendar.MONTH,1);
-            //获取推送后的日期
-            Date newDate = instance.getTime();
-            int interval1 = Integer.parseInt(this.getInterval(currentDate, newDate));
-            //计算天数之差
-            if(interval1 <= 5 && interval1 >=0){
-                titleStr = titleStr + "剩余:" + interval1 + "天。请尽快发起!";
-            }
+                //获取当前时间
+                SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+                Date currentDate = new Date();
+                //将当前时间转化为字符串
+                String format = simpleDateFormat.format(currentDate);
+                //创建calendar对象
+                Calendar instance = Calendar.getInstance();
+                //将日期设置为项目通过时间
+                instance.setTime(jyProjectAudit.getProjectAgreeTime());
+                //往后推一个月
+                instance.add(Calendar.MONTH,1);
+                //获取推送后的日期
+                Date newDate = instance.getTime();
+                int interval1 = Integer.parseInt(this.getInterval(currentDate, newDate));
+                //计算天数之差
+                if(interval1 <= 5 && interval1 >=0){
+                    titleStr = titleStr + "剩余:" + interval1 + "天。请尽快发起!";
+                }
 
-            Set<String> noticeUserSet = new HashSet<String>();
-            if(StringUtils.isNotBlank(jyProjectAudit.getCreateById())){
+                Set<String> noticeUserSet = new HashSet<String>();
+                if(StringUtils.isNotBlank(jyProjectAudit.getCreateById())){
 
-                String byIdForXXL = SpringUtil.getBean(IUserApi.class).getByIdForXXL(jyProjectAudit.getCreateById());
-                UserDTO createUser = JSON.parseObject(byIdForXXL, new TypeReference<UserDTO>() {});
-                if(null != createUser && StringUtils.isNotBlank(createUser.getId())){
-                    noticeUserSet.add(createUser.getId());
+                    String byIdForXXL = SpringUtil.getBean(IUserApi.class).getByIdForXXL(jyProjectAudit.getCreateById());
+                    UserDTO createUser = JSON.parseObject(byIdForXXL, new TypeReference<UserDTO>() {});
+                    if(null != createUser && StringUtils.isNotBlank(createUser.getId())){
+                        noticeUserSet.add(createUser.getId());
+                    }
+                }
+                List<String> noticeUserList = new ArrayList<String>(noticeUserSet);
+                if(noticeUserList.size()>0){
+                    MyNoticeList myNotice = new MyNoticeList();
+                    myNotice.setCreateById("1");
+                    myNotice.setCreateTime(new Date());
+                    myNotice.setUpdateById("1");
+                    myNotice.setUpdateTime(new Date());
+                    myNotice.setDelFlag(0);
+                    //根据procInsId获取taskId
+                    String currentTask = SpringUtil.getBean(IFlowableApi.class).getTaskIdByprocInstId(jyProjectAudit.getProjectProId());
+                    myNotice.setTaskId(currentTask);
+                    myNotice.setDefId(jyProjectAudit.getProjectDeId());
+                    myNotice.setTitle(titleStr);
+                    myNotice.setTaskName(taskName);
+                    myNotice.setLink("结束");
+                    myNotice.setType("0");
+                    myNotice.setCreateUser("管理员");
+                    myNotice.setCreateTime(new Date());
+
+                    for (String noticeUserId : noticeUserList) {
+                        myNotice.setNoticeId(noticeUserId);
+                        String byIdForXXL = SpringUtil.getBean(IUserApi.class).getByIdForXXL(jyProjectAudit.getCreateById());
+                        UserDTO createUser = JSON.parseObject(byIdForXXL, new TypeReference<UserDTO>() {});
+                        myNotice.setNoticeName(createUser.getName());
+                        //根据taskName和通知人 查询重复数量
+                        String myNoticeInfo = JSON.toJSONString(myNotice);
+                        Map<String,String> map = new HashMap();
+                        map.put("myNoticeInfo", myNoticeInfo);
+                        String jsonInfo = SpringUtil.getBean(IFlowableApi.class).getRepetitionCountBymyNoticeTitle(map);
+                        MyNoticeList repetitionCountBymyNotice = JSON.parseObject(jsonInfo, new TypeReference<MyNoticeList>() {});
+
+                        if(null == repetitionCountBymyNotice){
+                            // 生成id
+                            String id = UUID.randomUUID().toString().replace("-", "");
+                            myNotice.setId(id);
+                            myNotice.setRepetitionCount(0);
+
+                            myNoticeInfo = JSON.toJSONString(myNotice);
+                            map.put("myNoticeInfo", myNoticeInfo);
+                            SpringUtil.getBean ( IFlowableApi.class ).insertMyNotice(map);
+                        }else{
+                            myNotice.setId(repetitionCountBymyNotice.getId());
+                            myNotice.setRepetitionCount(repetitionCountBymyNotice.getRepetitionCount()+1);
+
+                            myNoticeInfo = JSON.toJSONString(myNotice);
+                            map.put("myNoticeInfo", myNoticeInfo);
+                            SpringUtil.getBean ( IFlowableApi.class ).updateMyNotice(map);
+                        }
+                    }
                 }
             }
-            List<String> noticeUserList = new ArrayList<String>(noticeUserSet);
-            if(noticeUserList.size()>0){
-                MyNoticeList myNotice = new MyNoticeList();
-                myNotice.setCreateById("1");
-                myNotice.setCreateTime(new Date());
-                myNotice.setUpdateById("1");
-                myNotice.setUpdateTime(new Date());
-                myNotice.setDelFlag(0);
-                //根据procInsId获取taskId
-                String currentTask = SpringUtil.getBean(IFlowableApi.class).getTaskIdByprocInstId(jyProjectAudit.getProcInsId());
-                myNotice.setTaskId(currentTask);
-                myNotice.setDefId(jyProjectAudit.getProcessDefinitionId());
-                myNotice.setTitle(titleStr);
-                myNotice.setTaskName(taskName);
-                myNotice.setLink("结束");
-                myNotice.setType("0");
-                myNotice.setCreateUser("管理员");
-                myNotice.setCreateTime(new Date());
+        }
 
-                for (String noticeUserId : noticeUserList) {
-                    myNotice.setNoticeId(noticeUserId);
-                    String byIdForXXL = SpringUtil.getBean(IUserApi.class).getByIdForXXL(jyProjectAudit.getCreateById());
-                    UserDTO createUser = JSON.parseObject(byIdForXXL, new TypeReference<UserDTO>() {});
-                    myNotice.setNoticeName(createUser.getName());
-                    //根据taskName和通知人 查询重复数量
-                    String myNoticeInfo = JSON.toJSONString(myNotice);
-                    Map<String,String> map = new HashMap();
-                    map.put("myNoticeInfo", myNoticeInfo);
-                    String jsonInfo = SpringUtil.getBean(IFlowableApi.class).getRepetitionCountBymyNoticeTitle(map);
-                    MyNoticeList repetitionCountBymyNotice = JSON.parseObject(jsonInfo, new TypeReference<MyNoticeList>() {});
 
-                    if(null == repetitionCountBymyNotice){
-                        // 生成id
-                        String id = UUID.randomUUID().toString().replace("-", "");
-                        myNotice.setId(id);
-                        myNotice.setRepetitionCount(0);
+    }
 
-                        myNoticeInfo = JSON.toJSONString(myNotice);
-                        map.put("myNoticeInfo", myNoticeInfo);
-                        SpringUtil.getBean ( IFlowableApi.class ).insertMyNotice(map);
-                    }else{
-                        myNotice.setId(repetitionCountBymyNotice.getId());
-                        myNotice.setRepetitionCount(repetitionCountBymyNotice.getRepetitionCount()+1);
 
-                        myNoticeInfo = JSON.toJSONString(myNotice);
+    /**
+     * 嘉溢项目外审发送通知
+     * @param
+     * @return
+     */
+    @XxlJob("projectOutInstanceTask")
+    public void projectOutInstanceTask(){
+        System.out.println("进来了---");
+        String json = SpringUtil.getBean(JyProjectUserSealFeignApi.class).findSeal();
+        List<JyUserSeal> projectList = JSON.parseObject(json, new TypeReference<List<JyUserSeal>>() {});
+        if (CollectionUtil.isNotEmpty(projectList)){
+            for (JyUserSeal jyUserSeal : projectList) {
+                //对数据进行发送通知
+                String taskName = null;
+                String titleStr = null;
+                //如果当前时间小于用印修改时间
+                if(jyUserSeal.getUpdateTime().after(new Date())){
+                    taskName = "嘉溢-项目用印申请";
+                    titleStr = "项目【"+ jyUserSeal.getProjectName().substring(0,jyUserSeal.getProjectName().lastIndexOf(","))+"】即将逾期,";
+                }
+
+                //获取当前时间
+                SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+                Date currentDate = new Date();
+                //将当前时间转化为字符串
+                String format = simpleDateFormat.format(currentDate);
+                //创建calendar对象
+                Calendar instance = Calendar.getInstance();
+                //将日期设置为用印修改时间
+                instance.setTime(jyUserSeal.getUpdateTime());
+                //往后推两周
+                instance.add(Calendar.DATE,14);
+                //获取推送后的日期
+                Date newDate = instance.getTime();
+                int interval1 = Integer.parseInt(this.getInterval(currentDate, newDate));
+                //计算天数之差
+                if(interval1 <= 3 && interval1 >=0){
+                    titleStr = titleStr + "剩余:" + interval1 + "天。请尽快发起!";
+                }
+
+                Set<String> noticeUserSet = new HashSet<String>();
+                if(StringUtils.isNotBlank(jyUserSeal.getCreateById())){
+
+                    String byIdForXXL = SpringUtil.getBean(IUserApi.class).getByIdForXXL(jyUserSeal.getCreateById());
+                    UserDTO createUser = JSON.parseObject(byIdForXXL, new TypeReference<UserDTO>() {});
+                    if(null != createUser && StringUtils.isNotBlank(createUser.getId())){
+                        noticeUserSet.add(createUser.getId());
+                    }
+                }
+                List<String> noticeUserList = new ArrayList<String>(noticeUserSet);
+                if(noticeUserList.size()>0){
+                    MyNoticeList myNotice = new MyNoticeList();
+                    myNotice.setCreateById("1");
+                    myNotice.setCreateTime(new Date());
+                    myNotice.setUpdateById("1");
+                    myNotice.setUpdateTime(new Date());
+                    myNotice.setDelFlag(0);
+                    //根据procInsId获取taskId
+                    String currentTask = SpringUtil.getBean(IFlowableApi.class).getTaskIdByprocInstId(jyUserSeal.getProcInsId());
+                    myNotice.setTaskId(currentTask);
+                    myNotice.setDefId(jyUserSeal.getProcessDefinitionId());
+                    myNotice.setTitle(titleStr);
+                    myNotice.setTaskName(taskName);
+                    myNotice.setLink("结束");
+                    myNotice.setType("0");
+                    myNotice.setCreateUser("管理员");
+                    myNotice.setCreateTime(new Date());
+
+                    for (String noticeUserId : noticeUserList) {
+                        myNotice.setNoticeId(noticeUserId);
+                        String byIdForXXL = SpringUtil.getBean(IUserApi.class).getByIdForXXL(jyUserSeal.getCreateById());
+                        UserDTO createUser = JSON.parseObject(byIdForXXL, new TypeReference<UserDTO>() {});
+                        myNotice.setNoticeName(createUser.getName());
+                        //根据taskName和通知人 查询重复数量
+                        String myNoticeInfo = JSON.toJSONString(myNotice);
+                        Map<String,String> map = new HashMap();
                         map.put("myNoticeInfo", myNoticeInfo);
-                        SpringUtil.getBean ( IFlowableApi.class ).updateMyNotice(map);
+                        String jsonInfo = SpringUtil.getBean(IFlowableApi.class).getRepetitionCountBymyNoticeTitle(map);
+                        MyNoticeList repetitionCountBymyNotice = JSON.parseObject(jsonInfo, new TypeReference<MyNoticeList>() {});
+
+                        if(null == repetitionCountBymyNotice){
+                            // 生成id
+                            String id = UUID.randomUUID().toString().replace("-", "");
+                            myNotice.setId(id);
+                            myNotice.setRepetitionCount(0);
+
+                            myNoticeInfo = JSON.toJSONString(myNotice);
+                            map.put("myNoticeInfo", myNoticeInfo);
+                            SpringUtil.getBean ( IFlowableApi.class ).insertMyNotice(map);
+                        }else{
+                            myNotice.setId(repetitionCountBymyNotice.getId());
+                            myNotice.setRepetitionCount(repetitionCountBymyNotice.getRepetitionCount()+1);
+
+                            myNoticeInfo = JSON.toJSONString(myNotice);
+                            map.put("myNoticeInfo", myNoticeInfo);
+                            SpringUtil.getBean ( IFlowableApi.class ).updateMyNotice(map);
+                        }
                     }
                 }
             }
         }
 
+
+
     }