Browse Source

工单处理功能提交

user5 8 months ago
parent
commit
2ca00d6a07
19 changed files with 758 additions and 18 deletions
  1. 106 5
      jeeplus-modules/jeeplus-test/src/main/java/com/jeeplus/test/garbageClearance/controller/LookOverController.java
  2. 15 0
      jeeplus-modules/jeeplus-test/src/main/java/com/jeeplus/test/garbageClearance/domain/LookOver.java
  3. 5 0
      jeeplus-modules/jeeplus-test/src/main/java/com/jeeplus/test/garbageClearance/mapper/LookOverMapper.java
  4. 31 1
      jeeplus-modules/jeeplus-test/src/main/java/com/jeeplus/test/garbageClearance/mapper/xml/LookOverMapper.xml
  5. 13 2
      jeeplus-modules/jeeplus-test/src/main/java/com/jeeplus/test/garbageClearance/service/LookOverService.java
  6. 7 0
      jeeplus-modules/jeeplus-test/src/main/java/com/jeeplus/test/oss/mapper/OssServiceMapper.java
  7. 14 1
      jeeplus-modules/jeeplus-test/src/main/java/com/jeeplus/test/oss/mapper/xml/OssServiceMapper.xml
  8. 56 4
      jeeplus-modules/jeeplus-test/src/main/java/com/jeeplus/test/oss/service/OssService.java
  9. 164 0
      jeeplus-modules/jeeplus-test/src/main/java/com/jeeplus/test/wdt/disposeRubbish/controller/DisposeRubbishController.java
  10. 86 0
      jeeplus-modules/jeeplus-test/src/main/java/com/jeeplus/test/wdt/disposeRubbish/domain/DisposeRubbish.java
  11. 13 0
      jeeplus-modules/jeeplus-test/src/main/java/com/jeeplus/test/wdt/disposeRubbish/domain/WorkOverNo.java
  12. 30 0
      jeeplus-modules/jeeplus-test/src/main/java/com/jeeplus/test/wdt/disposeRubbish/mapper/DisposeRubbishMapper.java
  13. 49 0
      jeeplus-modules/jeeplus-test/src/main/java/com/jeeplus/test/wdt/disposeRubbish/mapper/xml/DisposeRubbishMapper.xml
  14. 89 0
      jeeplus-modules/jeeplus-test/src/main/java/com/jeeplus/test/wdt/disposeRubbish/service/DisposeRubbishService.java
  15. 4 1
      jeeplus-plugins/jeeplus-flowable/src/main/java/com/jeeplus/flowable/common/handler/ExtUserTaskActivityBehavior.java
  16. 1 0
      jeeplus-plugins/jeeplus-flowable/src/main/java/com/jeeplus/flowable/constant/FlowableConstant.java
  17. 65 1
      jeeplus-plugins/jeeplus-flowable/src/main/java/com/jeeplus/flowable/controller/FlowableTaskController.java
  18. 2 0
      jeeplus-plugins/jeeplus-flowable/src/main/java/com/jeeplus/flowable/model/Flow.java
  19. 8 3
      jeeplus-plugins/jeeplus-flowable/src/main/java/com/jeeplus/flowable/service/FlowTaskService.java

+ 106 - 5
jeeplus-modules/jeeplus-test/src/main/java/com/jeeplus/test/garbageClearance/controller/LookOverController.java

@@ -15,19 +15,18 @@ import com.jeeplus.test.garbageClearance.domain.LookOver;
 import com.jeeplus.test.garbageClearance.service.DTO.LookOverDTO;
 import com.jeeplus.test.garbageClearance.service.LookOverService;
 import com.jeeplus.test.garbageClearance.utils.SnowFlake;
+import com.jeeplus.test.oss.domain.WorkAttachment;
 import com.jeeplus.test.oss.domain.WorkAttachmentInfo;
 import com.jeeplus.test.oss.service.OssService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
-import java.util.Date;
-import java.util.Iterator;
-import java.util.List;
-import java.util.UUID;
+import java.util.*;
 
 /**
  * 巡视相关controller
@@ -95,6 +94,7 @@ public class LookOverController {
                 attachment.setCreateTime(new Date());
                 attachment.setUpdateTime(new Date());
                 attachment.setDelFlag(0);
+                attachment.setAttachmentFlag("before");
                 ossService.insertWorkAttachmentInfo(attachment,userDTO);
             }
         }
@@ -112,12 +112,94 @@ public class LookOverController {
 
         notifyService.saveOrUpdate ( notifyDTO );
 
-
+        lookOver.setStatus("1");
         overService.saveOrUpdate (lookOver);
         return ResponseEntity.ok ( "保存成功" );
     }
 
     /**
+     * 保存巡视信息
+     */
+    @ApiLog("保存巡视信息处理中后的图片信息")
+    @ApiOperation(value = "保存巡视信息处理中后的图片信息")
+    @PostMapping("savePhoto")
+    public  ResponseEntity <String> savePhoto(@Valid @RequestBody LookOver lookOver) {
+        //新增或编辑表单保存
+        UserDTO userDTO = UserUtils.getCurrentUserDTO();
+        List<String> betweenUrlList = Lists.newArrayList();
+        if (null != lookOver.getFileList2() && lookOver.getFileList2().size() > 0 ) {
+            // 进行附件保存操作,保存到work_attachment 表中
+            for (WorkAttachmentInfo attachment : lookOver.getFileList2()) {
+                if(attachment.getUrl().contains("/attachment-file")){
+                    // 查找 "/attachment-file" 在字符串中的位置
+                    int startIndex = attachment.getUrl().indexOf("/attachment-file");
+                    // 查找 "?" 在字符串中的位置
+                    int endIndex = attachment.getUrl().indexOf("?");
+                    // 如果找到了 "/attachment-file" 和 "?"
+                    if (startIndex != -1 && endIndex != -1) {
+                        // 截取从 startIndex 到 endIndex 之间的字符串
+                        String result = attachment.getUrl().substring(startIndex+1, endIndex);
+                        betweenUrlList.add(result);
+                    }
+                }
+            }
+            //查询除betweenUrlList以外的数据进行删除
+            ossService.deleteByUrlListAndFlag(betweenUrlList,"between", lookOver.getId());
+            for (WorkAttachmentInfo attachment : lookOver.getFileList2()) {
+                if(StringUtils.isNotBlank(attachment.getAttachmentName())){
+                    // 生成id
+                    String detailId = SnowFlake.getId();
+                    attachment.setId(detailId);
+                    attachment.setAttachmentId(lookOver.getId());
+                    attachment.setCreateTime(new Date());
+                    attachment.setUpdateTime(new Date());
+                    attachment.setDelFlag(0);
+                    attachment.setAttachmentFlag("between");
+                    ossService.insertWorkAttachmentInfo(attachment,userDTO);
+                }
+            }
+        }
+
+
+        if (null != lookOver.getFileList3() && lookOver.getFileList3().size() > 0 ) {
+            List<String> afterUrlList = Lists.newArrayList();
+            // 进行附件保存操作,保存到work_attachment 表中
+            for (WorkAttachmentInfo attachment : lookOver.getFileList3()) {
+                if (attachment.getUrl().contains("/attachment-file")) {
+                    // 查找 "/attachment-file" 在字符串中的位置
+                    int startIndex = attachment.getUrl().indexOf("/attachment-file");
+                    // 查找 "?" 在字符串中的位置
+                    int endIndex = attachment.getUrl().indexOf("?");
+                    // 如果找到了 "/attachment-file" 和 "?"
+                    if (startIndex != -1 && endIndex != -1) {
+                        // 截取从 startIndex 到 endIndex 之间的字符串
+                        String result = attachment.getUrl().substring(startIndex + 1, endIndex);
+                        afterUrlList.add(result);
+                    }
+                }
+            }
+            //查询除afterUrlList以外的数据进行删除
+            ossService.deleteByUrlListAndFlag(afterUrlList, "after", lookOver.getId());
+
+            // 进行附件保存操作,保存到work_attachment 表中
+            for (WorkAttachmentInfo attachment : lookOver.getFileList3()) {
+                if(StringUtils.isNotBlank(attachment.getAttachmentName())) {
+                    // 生成id
+                    String detailId = SnowFlake.getId();
+                    attachment.setId(detailId);
+                    attachment.setAttachmentId(lookOver.getId());
+                    attachment.setCreateTime(new Date());
+                    attachment.setUpdateTime(new Date());
+                    attachment.setDelFlag(0);
+                    attachment.setAttachmentFlag("after");
+                    ossService.insertWorkAttachmentInfo(attachment, userDTO);
+                }
+            }
+        }
+        return ResponseEntity.ok ( "保存成功" );
+    }
+
+    /**
      * 查询最大的巡视工单
      */
     @ApiLog("查询最大的巡视工单")
@@ -176,4 +258,23 @@ public class LookOverController {
         return ResponseEntity.ok (result);
     }
 
+    /**
+     * 根据关联id和判定条件查询附件信息
+     * @param attachmentId
+     * @param attachmentFlag
+     * @return
+     */
+    @ApiLog("根据关联id和判定条件查询附件信息")
+    @GetMapping("getPhotoListByAttachmentAndFlag")
+    public List<WorkAttachment> getPhotoListByAttachmentAndFlag(String attachmentId,String attachmentFlag){
+        Set<String> set = new HashSet<>();
+        String[] attachmentIds = attachmentId.split(",");
+        for (String id : attachmentIds) {
+            set.add(id);
+        }
+        List<String> attachmentIdList = new ArrayList<>(set);
+        List<WorkAttachment> fileList = ossService.findFileList(attachmentIdList, attachmentFlag);
+        return fileList;
+    }
+
 }

+ 15 - 0
jeeplus-modules/jeeplus-test/src/main/java/com/jeeplus/test/garbageClearance/domain/LookOver.java

@@ -58,4 +58,19 @@ public class LookOver extends BaseEntity implements Serializable {
     //附件信息
     @TableField(exist = false)
     List<WorkAttachmentInfo> fileList1;
+    //附件信息
+    @TableField(exist = false)
+    List<WorkAttachmentInfo> fileList2;
+    //附件信息
+    @TableField(exist = false)
+    List<WorkAttachmentInfo> fileList3;
+    //附件信息
+    @TableField(exist = false)
+    List<WorkAttachment> beforeFileList;
+    //附件信息
+    @TableField(exist = false)
+    List<WorkAttachment> betweenFileList;
+    //附件信息
+    @TableField(exist = false)
+    List<WorkAttachment> afterFileList;
 }

+ 5 - 0
jeeplus-modules/jeeplus-test/src/main/java/com/jeeplus/test/garbageClearance/mapper/LookOverMapper.java

@@ -37,4 +37,9 @@ public interface LookOverMapper extends BaseMapper<LookOver> {
 
     //查出附件信息
     List<WorkAttachmentInfo> getByAttachmentId(String id);
+
+    //查出附件信息
+    List<WorkAttachmentInfo> getByAttachmentIdAndFlag(String id,String flag);
+
+    void updateStatus(LookOver lookOver);
 }

+ 31 - 1
jeeplus-modules/jeeplus-test/src/main/java/com/jeeplus/test/garbageClearance/mapper/xml/LookOverMapper.xml

@@ -28,7 +28,18 @@
         ORDER BY a.update_time DESC
     </select>
     <select id="selectByID" resultType="com.jeeplus.test.garbageClearance.domain.LookOver">
-        select a.no,a.processing_unit,a.remarks,
+        select
+        a.id,
+        a.create_by_id,
+        a.create_time,
+        a.update_by_id,
+        a.update_time,
+        a.del_flag,
+        a.remarks,
+        a.no,
+        a.processing_unit,
+        a.`urls`,
+        a.`status`,
         so.name as processingUnitName, su.name as clearUserName, su.mobile as clearUserMobile
         from garbage_clearance_look_over a
         left join sys_office so on a.processing_unit = so.id
@@ -47,4 +58,23 @@
 			del_flag = 0
 			AND attachment_id = #{id}
     </select>
+    <select id="getByAttachmentIdAndFlag" resultType="com.jeeplus.test.oss.domain.WorkAttachmentInfo">
+        SELECT
+            url,
+            type,
+            attachment_name as name,
+            file_size as size
+		FROM
+			work_attachment
+		WHERE
+			del_flag = 0
+			AND attachment_id = #{id}
+			AND attachment_flag = #{flag}
+    </select>
+
+    <update id="updateStatus">
+        update garbage_clearance_look_over set
+        status = #{status}
+        where id = #{id}
+    </update>
 </mapper>

+ 13 - 2
jeeplus-modules/jeeplus-test/src/main/java/com/jeeplus/test/garbageClearance/service/LookOverService.java

@@ -19,6 +19,7 @@ import com.jeeplus.sys.service.dto.UserDTO;
 import com.jeeplus.sys.utils.UserUtils;
 import com.jeeplus.test.garbageClearance.domain.LookOver;
 import com.jeeplus.test.garbageClearance.mapper.LookOverMapper;
+import com.jeeplus.test.oss.domain.WorkAttachment;
 import com.jeeplus.test.oss.domain.WorkAttachmentInfo;
 import com.jeeplus.test.oss.service.OssService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -69,8 +70,14 @@ public class LookOverService extends ServiceImpl<LookOverMapper, LookOver> {
      */
     public LookOver selectByID(String id) {
         LookOver lookOver = baseMapper.selectByID(id);
-        List<WorkAttachmentInfo> files = baseMapper.getByAttachmentId(id);
-
+        List<WorkAttachmentInfo> files = baseMapper.getByAttachmentIdAndFlag(id,"before");
+
+        List<WorkAttachment> fileList1 = ossService.findFileList(id, "before");
+        lookOver.setBeforeFileList(fileList1);
+        List<WorkAttachment> fileList2 = ossService.findFileList(id, "between");
+        lookOver.setBetweenFileList(fileList2);
+        List<WorkAttachment> fileList3 = ossService.findFileList(id, "after");
+        lookOver.setAfterFileList(fileList3);
         if (null != files && files.size()>0) {
             files.forEach(fi->{
                 String fileTemporaryLookUrl = ossService.getFileTemporaryLookUrl(fi.getUrl());
@@ -110,4 +117,8 @@ public class LookOverService extends ServiceImpl<LookOverMapper, LookOver> {
         }
         return pageList;
     }
+
+    public void updateStatus(LookOver lookOver){
+        baseMapper.updateStatus(lookOver);
+    }
 }

+ 7 - 0
jeeplus-modules/jeeplus-test/src/main/java/com/jeeplus/test/oss/mapper/OssServiceMapper.java

@@ -30,4 +30,11 @@ public interface OssServiceMapper extends BaseMapper<WorkAttachment> {
      * @return
      */
     List<WorkAttachment> getByAttachmentIdAndUrlAndAttachmentFlag(WorkAttachment workAttachment);
+
+    /**
+     * 根据条件删除附件信息
+     * @param urlList
+     * @param attachmentFlag
+     */
+    void deleteByUrlListAndFlag(@Param("urlList")List<String> urlList,@Param("attachmentFlag")String attachmentFlag, @Param("attachmentId")String attachmentId);
 }

+ 14 - 1
jeeplus-modules/jeeplus-test/src/main/java/com/jeeplus/test/oss/mapper/xml/OssServiceMapper.xml

@@ -34,7 +34,7 @@
     <select id="findList" resultType="com.jeeplus.test.oss.domain.WorkAttachment">
         SELECT a.id, a.url, a.type, a.attachment_id, a.attachment_name, a.attachment_flag,
         a.module_type, a.attachment_type, a.file_size, a.sort, a.description,
-        a.create_date, a.create_by_id as "create_by.id", su.name as "createBy.name" , a.update_time, a.update_by_id as "updateBy.id", a.del_flag
+        a.create_time, a.create_by_id as "create_by.id", su.name as "createBy.name" , a.update_time, a.update_by_id as "updateBy.id", a.del_flag
          FROM work_attachment a
          left join sys_user su on su.id = a.create_by_id
          ${ew.customSqlSegment}
@@ -126,4 +126,17 @@
              </if>
          </where>
     </select>
+
+    <update id="deleteByUrlListAndFlag">
+        update work_attachment
+        set del_flag = 1
+        <where>
+            url not in
+            <foreach collection="urlList" item="url" index="index" open="(" close=")" separator=",">
+                #{url}
+            </foreach>
+            and attachment_flag = #{attachmentFlag}
+            and attachment_id = #{attachmentId}
+        </where>
+    </update>
 </mapper>

+ 56 - 4
jeeplus-modules/jeeplus-test/src/main/java/com/jeeplus/test/oss/service/OssService.java

@@ -126,6 +126,17 @@ public class OssService extends ServiceImpl<OssServiceMapper,WorkAttachment> {
     }
 
     /**
+     * 根据文件路径删除文件
+     * @param urlList
+     * @param attachmentFlag
+     */
+    public void deleteByUrlListAndFlag(List<String> urlList, String attachmentFlag,String attachmentId) {
+        if(urlList.size()>0){
+            ossServiceMapper.deleteByUrlListAndFlag(urlList,attachmentFlag,attachmentId);
+        }
+    }
+
+    /**
      * 根据id删除数据
      * @param id
      */
@@ -151,6 +162,7 @@ public class OssService extends ServiceImpl<OssServiceMapper,WorkAttachment> {
 
         log.info("文件查询开始,入参:{}" , attachmentId);
         QueryWrapper<WorkAttachment> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("a.del_flag","0");
         queryWrapper.eq ("a.attachment_id", attachmentId );
         List<WorkAttachment> list = ossServiceMapper.findList(queryWrapper);
         //创建人和文件名称处理
@@ -162,6 +174,46 @@ public class OssService extends ServiceImpl<OssServiceMapper,WorkAttachment> {
     }
 
     /**
+     * 根据附件对应父节点id查询文件列表
+     * @param attachmentId
+     * @return
+     */
+    public List<WorkAttachment> findFileList(String attachmentId, String attachmentFlag) {
+
+        QueryWrapper<WorkAttachment> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("a.del_flag","0");
+        queryWrapper.eq("a.attachment_id",attachmentId);
+        queryWrapper.eq ("a.attachment_flag", attachmentFlag );
+        List<WorkAttachment> list = ossServiceMapper.findList(queryWrapper);
+        //创建人和文件名称处理
+        if (CollectionUtil.isNotEmpty(list)) {
+            temporaryUrl(list);
+        }
+        log.info("文件查询结束,查询结果:{}" , JSONObject.toJSONString(list));
+        return list;
+    }
+
+    /**
+     * 根据附件对应父节点id查询文件列表
+     * @param attachmentIdList
+     * @return
+     */
+    public List<WorkAttachment> findFileList(List<String> attachmentIdList, String attachmentFlag) {
+
+        QueryWrapper<WorkAttachment> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("a.del_flag","0");
+        queryWrapper.in("a.attachment_id",attachmentIdList);
+        queryWrapper.eq ("a.attachment_flag", attachmentFlag );
+        List<WorkAttachment> list = ossServiceMapper.findList(queryWrapper);
+        //创建人和文件名称处理
+        if (CollectionUtil.isNotEmpty(list)) {
+            temporaryUrl(list);
+        }
+        log.info("文件查询结束,查询结果:{}" , JSONObject.toJSONString(list));
+        return list;
+    }
+
+    /**
      * 生成临时文件
      * @param list
      * @return
@@ -170,7 +222,7 @@ public class OssService extends ServiceImpl<OssServiceMapper,WorkAttachment> {
         list.stream().forEach(work -> {
             String url = null;
             if (StringUtils.isNotEmpty(work.getUrl())) {
-                url = aliyunUrl + work.getUrl();
+                url = aliyunUrl + "/" + work.getUrl();
                 work.setTemporaryUrl(getFileTemporaryLookUrl(url));
             }
 
@@ -206,7 +258,7 @@ public class OssService extends ServiceImpl<OssServiceMapper,WorkAttachment> {
         list.stream().forEach(work -> {
             String url = null;
             if (StringUtils.isNotEmpty(work.getUrl())) {
-                url = aliyunUrl + work.getUrl();
+                url = aliyunUrl + "/" + work.getUrl();
                 work.setTemporaryUrl(getFileTemporaryLookUrl(url));
             }
 
@@ -241,8 +293,8 @@ public class OssService extends ServiceImpl<OssServiceMapper,WorkAttachment> {
      */
     public FileDetailDTO getFileSizeByUrl(String url){
         FileDetailDTO fileDetailDTO = new FileDetailDTO();
-        fileDetailDTO.setUrl(getFileTemporaryLookUrl(aliyunUrl + url));
-        Long fileSizeBytes = ossClientService.getSimplifiedObjectMeta(aliyunUrl + url);
+        fileDetailDTO.setUrl(getFileTemporaryLookUrl(aliyunUrl + "/" + url));
+        Long fileSizeBytes = ossClientService.getSimplifiedObjectMeta(aliyunUrl + "/" + url);
         if(null != fileSizeBytes){
             Double fileSize = (double)fileSizeBytes;
             fileDetailDTO.setSize(String.format("%.2f", fileSize));

+ 164 - 0
jeeplus-modules/jeeplus-test/src/main/java/com/jeeplus/test/wdt/disposeRubbish/controller/DisposeRubbishController.java

@@ -0,0 +1,164 @@
+package com.jeeplus.test.wdt.disposeRubbish.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jeeplus.aop.logging.annotation.ApiLog;
+import com.jeeplus.common.utils.ResponseUtil;
+import com.jeeplus.notify.service.NotifyService;
+import com.jeeplus.notify.service.dto.NotifyDTO;
+import com.jeeplus.sys.service.OfficeService;
+import com.jeeplus.sys.service.dto.OfficeDTO;
+import com.jeeplus.sys.service.dto.UserDTO;
+import com.jeeplus.sys.utils.StringUtils;
+import com.jeeplus.sys.utils.UserUtils;
+import com.jeeplus.test.garbageClearance.domain.LookOver;
+import com.jeeplus.test.garbageClearance.service.DTO.LookOverDTO;
+import com.jeeplus.test.garbageClearance.service.LookOverService;
+import com.jeeplus.test.garbageClearance.utils.SnowFlake;
+import com.jeeplus.test.oss.domain.WorkAttachmentInfo;
+import com.jeeplus.test.oss.service.OssService;
+import com.jeeplus.test.wdt.disposeRubbish.domain.DisposeRubbish;
+import com.jeeplus.test.wdt.disposeRubbish.service.DisposeRubbishService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * 清运处理
+ * @author: 徐滕
+ * @version: 2024-09-02 09:50
+ */
+@Api(tags ="清运处理")
+@RestController
+@RequestMapping(value = "/app/dispose/rubbish")
+public class DisposeRubbishController {
+    @Autowired
+    private DisposeRubbishService disposeRubbishService;
+    @Autowired
+    private LookOverService overService;
+
+    @Autowired
+    private OfficeService officeService;
+
+    @Autowired
+    private OssService ossService;
+
+    @Autowired
+    private NotifyService notifyService;
+
+    /**
+     * 查询巡视工单
+     *
+     * @param id
+     * @return
+     */
+    @GetMapping("queryById")
+    public ResponseEntity queryById(String id) {
+        // 还需要处理单位  清运专员  联系方式  及  附件信息
+        DisposeRubbish post = disposeRubbishService.selectById ( id );
+
+        return ResponseEntity.ok ( post );
+    }
+
+    /**
+     * 保存巡视信息
+     */
+    @ApiLog("保存巡视信息")
+    @ApiOperation(value = "保存巡视信息")
+    @PostMapping("save")
+    public  ResponseEntity <String> save(@Valid @RequestBody DisposeRubbish disposeRubbish) {
+        //新增或编辑表单保存
+        String lookOverId = SnowFlake.getId();
+        disposeRubbish.setId(lookOverId);
+
+        if (StringUtils.isNotBlank(disposeRubbish.getNo())) {
+            // 剔除掉XJ-J 只保留纯数字
+            // 使用正则表达式替换掉所有非数字字符
+            String pureNumber = disposeRubbish.getNo().replaceAll("\\D+", "");
+            disposeRubbish.setNo(pureNumber);
+        }
+        if(disposeRubbish.getProgramIds().size()>0){
+            String programIds = String.join(",", disposeRubbish.getProgramId());
+            disposeRubbish.setProgramId(programIds);
+        }
+        disposeRubbish.setStatus("2");
+
+        disposeRubbishService.saveOrUpdate (disposeRubbish);
+
+        for (String workOverId : disposeRubbish.getProgramIds()) {
+            LookOver lookOver = overService.getById(workOverId);
+            //处理巡查单的状态信息,将巡查单的status调整为处理中
+            if("2".equals(disposeRubbish.getStatus()) || "5".equals(disposeRubbish.getStatus())){
+                lookOver.setStatus(disposeRubbish.getStatus());
+            }else{
+                lookOver.setStatus("1");
+            }
+            overService.updateStatus(lookOver);
+        }
+        return ResponseUtil.newInstance ( ).add("businessTable", "dispose_rubbish").add("businessId", disposeRubbish.getId()).ok ("保存成功");
+    }
+
+    /**
+     * 查询最大的巡视工单
+     */
+    @ApiLog("查询最大的巡视工单")
+    @ApiOperation(value = "查询最大的巡视工单")
+    @GetMapping("getMaxNo")
+    public ResponseEntity<String> getMaxNo() {
+        String maxNo = disposeRubbishService.getMaxNo();
+        return ResponseEntity.ok( maxNo );
+    }
+
+    /**
+     * 查询最大的巡视工单
+     */
+    @ApiLog("查询垃圾站点")
+    @ApiOperation(value = "查询垃圾站点")
+    @GetMapping("getRubbishStation")
+    public ResponseEntity<String> getRubbishStation() {
+        //String maxNo = disposeRubbishService.getMaxNo();
+        String rubbishStation = "头灶镇垃圾处理点";
+        return ResponseEntity.ok( rubbishStation );
+    }
+
+    /**
+     * 查询处理单位
+     */
+    @ApiLog("查询处理单位")
+    @ApiOperation(value = "查询处理单位")
+    @GetMapping("getProcessingUnit")
+    public ResponseEntity<List<OfficeDTO>> getProcessingUnit() {
+        List <OfficeDTO> list = officeService.findList ( "" );
+        List <OfficeDTO> rootTree = officeService.getRootTree ( "", list, "", "", "1" );
+
+        rootTree.forEach(ro -> {
+            Iterator<OfficeDTO> iterator = ro.getChildren().iterator();
+            while (iterator.hasNext()) {
+                OfficeDTO ch = iterator.next();
+                if (!ch.getName().contains("村")) {
+                    iterator.remove();  // 使用迭代器删除子节点
+                }
+            }
+        });
+
+        return ResponseEntity.ok ( rootTree );
+    }
+
+    /**
+     * 根据组织ID获取角色为村负责人的用户信息
+     */
+    @ApiLog("根据组织ID获取角色为村负责人的用户信息")
+    @ApiOperation(value = "根据组织ID获取角色为村负责人的用户信息")
+    @GetMapping("getUserInfoByOffId")
+    public ResponseEntity<UserDTO> getUserInfo(String officeId ) {
+        UserDTO userDTO = disposeRubbishService.getUserInfoByOffId(officeId);
+        return ResponseEntity.ok( userDTO );
+    }
+}

+ 86 - 0
jeeplus-modules/jeeplus-test/src/main/java/com/jeeplus/test/wdt/disposeRubbish/domain/DisposeRubbish.java

@@ -0,0 +1,86 @@
+package com.jeeplus.test.wdt.disposeRubbish.domain;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.jeeplus.core.domain.BaseEntity;
+import com.jeeplus.test.oss.domain.WorkAttachment;
+import com.jeeplus.test.oss.domain.WorkAttachmentInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author: 徐滕
+ * @version: 2024-09-02 09:50
+ */
+@TableName("dispose_rubbish")
+@ApiModel(value = "DisposeRubbish对象", description = "垃圾清运工单")
+@Data
+public class DisposeRubbish extends BaseEntity implements Serializable {
+
+
+    private static final long serialVersionUID = 1L;
+    /**
+     * 流程实例ID
+     */
+    private String procInsId;
+
+    @ApiModelProperty("简介")
+    private String remarks;
+
+    @ApiModelProperty("清运编号")
+    private String no;
+
+    @ApiModelProperty("处理单位")
+    private String processingUnit;
+
+    @ApiModelProperty("处理状态")
+    private String status;
+
+    @ApiModelProperty("清运专员")
+    private String clearUserId;
+
+    @ApiModelProperty("清运专员名称")
+    @TableField(exist = false)
+    private String clearUserName;
+
+    @ApiModelProperty("联系方式")
+    @TableField(exist = false)
+    private String clearUserMobile;
+
+    @TableField(exist = false)
+    @ApiModelProperty("处理单位名称")
+    private String processingUnitName;
+
+    @ApiModelProperty("处理方式")
+    private String disposeType;
+
+    @ApiModelProperty("垃圾站点")
+    private String rubbishStation;
+
+    @TableField(exist = false)
+    @ApiModelProperty("关联的巡查id")
+    private List<String> programIds;
+
+    @ApiModelProperty("关联的巡查id")
+    private String programId;
+
+    //清理前照片
+    @TableField(exist = false)
+    List<WorkAttachment> fileList1;
+
+    //清理中照片
+    @TableField(exist = false)
+    List<WorkAttachment> fileList2;
+
+    //清理后照片
+    @TableField(exist = false)
+    List<WorkAttachment> fileList3;
+
+    //关联的巡查单据
+    @TableField(exist = false)
+    List<WorkOverNo> workOverNoList;
+}

+ 13 - 0
jeeplus-modules/jeeplus-test/src/main/java/com/jeeplus/test/wdt/disposeRubbish/domain/WorkOverNo.java

@@ -0,0 +1,13 @@
+package com.jeeplus.test.wdt.disposeRubbish.domain;
+
+import lombok.Data;
+
+/**
+ * @author: 徐滕
+ * @version: 2024-09-02 17:37
+ */
+@Data
+public class WorkOverNo {
+    private String id;
+    private String no;
+}

+ 30 - 0
jeeplus-modules/jeeplus-test/src/main/java/com/jeeplus/test/wdt/disposeRubbish/mapper/DisposeRubbishMapper.java

@@ -0,0 +1,30 @@
+package com.jeeplus.test.wdt.disposeRubbish.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jeeplus.sys.service.dto.UserDTO;
+import com.jeeplus.test.garbageClearance.domain.LookOver;
+import com.jeeplus.test.garbageClearance.service.DTO.LookOverDTO;
+import com.jeeplus.test.oss.domain.WorkAttachmentInfo;
+import com.jeeplus.test.wdt.disposeRubbish.domain.DisposeRubbish;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface DisposeRubbishMapper extends BaseMapper<DisposeRubbish> {
+
+    UserDTO getUserInfoByOffId(@Param("officeId") String officeId);
+
+    /**
+     * 根据id获取巡视工单信息
+     * @param id
+     * @return
+     */
+    DisposeRubbish selectById(@Param("id") String id);
+
+    //查出附件信息
+    List<WorkAttachmentInfo> getByAttachmentId(String id);
+}

+ 49 - 0
jeeplus-modules/jeeplus-test/src/main/java/com/jeeplus/test/wdt/disposeRubbish/mapper/xml/DisposeRubbishMapper.xml

@@ -0,0 +1,49 @@
+<?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.test.wdt.disposeRubbish.mapper.DisposeRubbishMapper">
+    <select id="getUserInfoByOffId" resultType="com.jeeplus.sys.service.dto.UserDTO">
+        select su.id, su.name, su.mobile from sys_user su
+        left join sys_office so on su.office_id = so.id
+        left join sys_user_role sur on su.id = sur.user_id
+        left join sys_role sr on sur.role_id = sr.id
+        where su.office_id = #{officeId} and sr.name = '村负责人'
+    </select>
+
+    <select id="selectById" resultType="com.jeeplus.test.wdt.disposeRubbish.domain.DisposeRubbish">
+        select
+        a.id,
+        a.create_by_id,
+        a.create_time,
+        a.update_by_id,
+        a.update_time,
+        a.del_flag,
+        a.remarks,
+        a.no,
+        a.processing_unit,
+        a.status,
+        a.clear_user_id,
+        a.dispose_type,
+        a.rubbish_station,
+        a.program_id,
+        a.proc_ins_id,
+        so.name as processingUnitName,
+        su.name as clearUserName,
+        su.mobile as clearUserMobile
+        from dispose_rubbish a
+        left join sys_office so on a.processing_unit = so.id
+        left join sys_user su on a.clear_user_id = su.id
+        where a.id = #{id} and a.del_flag = 0
+    </select>
+    <select id="getByAttachmentId" resultType="com.jeeplus.test.oss.domain.WorkAttachmentInfo">
+        SELECT
+            url,
+            type,
+            attachment_name as name,
+            file_size as size
+		FROM
+			work_attachment
+		WHERE
+			del_flag = 0
+			AND attachment_id = #{id}
+    </select>
+</mapper>

+ 89 - 0
jeeplus-modules/jeeplus-test/src/main/java/com/jeeplus/test/wdt/disposeRubbish/service/DisposeRubbishService.java

@@ -0,0 +1,89 @@
+package com.jeeplus.test.wdt.disposeRubbish.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.common.collect.Lists;
+import com.jeeplus.sys.service.dto.UserDTO;
+import com.jeeplus.test.garbageClearance.domain.LookOver;
+import com.jeeplus.test.garbageClearance.service.LookOverService;
+import com.jeeplus.test.oss.domain.WorkAttachment;
+import com.jeeplus.test.oss.domain.WorkAttachmentInfo;
+import com.jeeplus.test.oss.service.OssService;
+import com.jeeplus.test.wdt.disposeRubbish.domain.DisposeRubbish;
+import com.jeeplus.test.wdt.disposeRubbish.domain.WorkOverNo;
+import com.jeeplus.test.wdt.disposeRubbish.mapper.DisposeRubbishMapper;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * @author: 徐滕
+ * @version: 2024-09-02 09:51
+ */
+@Service
+@Transactional
+public class DisposeRubbishService extends ServiceImpl<DisposeRubbishMapper, DisposeRubbish> {
+
+    @Autowired
+    private OssService ossService;
+    @Autowired
+    private LookOverService lookOverService;
+
+    public String getMaxNo() {
+        // 创建查询条件构造器
+        QueryWrapper<DisposeRubbish> queryWrapper = new QueryWrapper<>();
+
+        // 按no字段降序排列
+        queryWrapper.select("MAX(no) as no");
+
+        // 只获取第一条记录
+        DisposeRubbish disposeRubbish = baseMapper.selectOne(queryWrapper);
+
+        // 返回最大的no值
+        return disposeRubbish != null ? disposeRubbish.getNo() : null;
+    }
+
+    public UserDTO getUserInfoByOffId(String officeId) {
+        return baseMapper.getUserInfoByOffId(officeId);
+    }
+
+    /**
+     * 根据id获取巡视工单信息
+     * @param id
+     * @return
+     */
+    public DisposeRubbish selectById(String id) {
+        DisposeRubbish disposeRubbish = baseMapper.selectById(id);
+        if(StringUtils.isNotBlank(disposeRubbish.getProgramId())){
+            // 使用 split() 方法将字符串分割为数组
+            String[] array = disposeRubbish.getProgramId().split(",");
+            // 将数组转换为 List
+            List<String> programIdList = Arrays.asList(array);
+            List<WorkAttachment> fileList1 = ossService.findFileList(programIdList, "before");
+            disposeRubbish.setFileList1(fileList1);
+            List<WorkAttachment> fileList2 = ossService.findFileList(programIdList, "between");
+            disposeRubbish.setFileList2(fileList2);
+            List<WorkAttachment> fileList3 = ossService.findFileList(programIdList, "after");
+            disposeRubbish.setFileList3(fileList3);
+
+            List<WorkOverNo> workOverNoList = Lists.newArrayList();
+            for (String workOverId : programIdList) {
+                LookOver overServiceById = lookOverService.getById(workOverId);
+                if(null != overServiceById && StringUtils.isNotBlank(overServiceById.getNo())){
+                    WorkOverNo workOverNo = new WorkOverNo();
+                    workOverNo.setId(overServiceById.getId());
+                    workOverNo.setNo("XS_J" + overServiceById.getNo());
+                    workOverNoList.add(workOverNo);
+                }
+            }
+            disposeRubbish.setWorkOverNoList(workOverNoList);
+        }
+        // 根据id 从work_attachment 表中获取图片信息
+        return disposeRubbish;
+    }
+
+}

+ 4 - 1
jeeplus-plugins/jeeplus-flowable/src/main/java/com/jeeplus/flowable/common/handler/ExtUserTaskActivityBehavior.java

@@ -121,12 +121,15 @@ public class ExtUserTaskActivityBehavior extends UserTaskActivityBehavior {
                             //用于查询当前登录人的部门主任人员信息
                             UserDTO currentUserDTO = UserUtils.getCurrentUserDTO();
                             String sql = flowAssignee.getValue ();
-                            if(sql.contains("@currentUser.id")){
+                            if(sql.contains("currentUserSql:")){
                                 //将标志进行去除
                                 sql = sql.replaceAll("currentUserSql:","");
+                            }
+                            if(sql.contains("@currentUser.id")){
                                 //将判断条件进行替换
                                 sql = sql.replaceAll("@currentUser.id","'" + currentUserDTO.getId() + "'");
                             }
+                            System.out.println(sql);
                             List<Map<String, Object>> maps = SpringUtil.getBean(JdbcTemplate.class).queryForList(sql);
                             for (Map<String, Object> map : maps) {
                                 candidateUserIds.add(map.get ("id").toString ());

+ 1 - 0
jeeplus-plugins/jeeplus-flowable/src/main/java/com/jeeplus/flowable/constant/FlowableConstant.java

@@ -20,5 +20,6 @@ public interface FlowableConstant {
     String PROCESS_STATUS_COMMENT = "_process_status_comment"; //流程状态描述
     String AFTER_ADDSIGN = "after";    //后加签
     String BEFORE_ADDSIGN = "before";    //前加签
+    String DISPOSE_TYPE = "disposeType";    //前加签
 
 }

+ 65 - 1
jeeplus-plugins/jeeplus-flowable/src/main/java/com/jeeplus/flowable/controller/FlowableTaskController.java

@@ -3,6 +3,8 @@
  */
 package com.jeeplus.flowable.controller;
 
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.extra.spring.SpringUtil;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
@@ -27,8 +29,11 @@ import com.jeeplus.sys.service.dto.UserDTO;
 import com.jeeplus.sys.utils.UserUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.ibatis.annotations.Param;
+import org.flowable.bpmn.model.BpmnModel;
+import org.flowable.bpmn.model.FlowNode;
 import org.flowable.common.engine.impl.identity.Authentication;
 import org.flowable.engine.HistoryService;
+import org.flowable.engine.RepositoryService;
 import org.flowable.engine.RuntimeService;
 import org.flowable.engine.TaskService;
 import org.flowable.engine.runtime.ProcessInstance;
@@ -84,6 +89,26 @@ public class FlowableTaskController {
     @GetMapping("todo")
     public ResponseEntity todoListData(Page <ProcessVo> page, Flow flow) {
         page = flowTaskService.todoList ( page, flow );
+        List<ProcessVo> records = page.getRecords();
+        for (ProcessVo record : records) {
+            Map vars = record.getVars();
+            String title = (String) vars.get("title");
+            // 查找 "发起了" 的位置
+            int startIndex = title.indexOf("在");
+            // 查找 "[垃圾处理流程]" 的位置
+            int endIndex = title.indexOf("发起了");
+
+            // 确保找到了两个子字符串
+            if (startIndex != -1 && endIndex != -1) {
+                // 截取两个子字符串之间的部分
+                String result = title.substring(startIndex+2, endIndex).trim();
+
+                vars.put("startDate",result);
+            } else {
+                System.out.println("无法找到指定的子字符串");
+            }
+
+        }
         return ResponseEntity.ok ( page );
     }
 
@@ -164,7 +189,7 @@ public class FlowableTaskController {
      */
     @PostMapping("start")
     public ResponseEntity start(@RequestBody Flow flow) {
-        String procInsId = flowTaskService.startProcess ( flow.getProcDefKey ( ), flow.getBusinessTable ( ), flow.getBusinessId ( ), flow.getTitle ( ) );
+        String procInsId = flowTaskService.startProcess ( flow.getProcDefKey ( ), flow.getBusinessTable ( ), flow.getBusinessId ( ), flow.getTitle ( ), flow.getDisposeType());
 
         //指定下一步处理人
         if ( StringUtils.isNotBlank ( flow.getAssignee ( ) ) ) {
@@ -391,4 +416,43 @@ public class FlowableTaskController {
         return ResponseEntity.ok ( page );
     }
 
+
+    /**
+     * 根据procInsId获取当前流程节点名称
+     *
+     * @param procInsId
+     * @return
+     */
+    @GetMapping("/getTaskNameByProcInsId")
+    public ResponseEntity<String> getTaskNameByProcInsId(@RequestParam("procInsId") String procInsId) {
+        String res = getTaskName(procInsId);
+        return ResponseEntity.ok(res);
+    }
+
+    /**
+     * 根据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 "";
+    }
+
 }

+ 2 - 0
jeeplus-plugins/jeeplus-flowable/src/main/java/com/jeeplus/flowable/model/Flow.java

@@ -27,6 +27,8 @@ public class Flow {
 
     private static final long serialVersionUID = 1L;
 
+    private String disposeType;
+
     private String taskId;        // 任务编号
     private String taskName;    // 任务名称
     private String taskDefKey;    // 任务定义Key(任务环节标识)

+ 8 - 3
jeeplus-plugins/jeeplus-flowable/src/main/java/com/jeeplus/flowable/service/FlowTaskService.java

@@ -348,9 +348,9 @@ public class FlowTaskService {
      * @param title         流程标题,显示在待办任务标题
      * @return 流程实例ID
      */
-    public String startProcess(String procDefKey, String businessTable, String businessId, String title) {
+    public String startProcess(String procDefKey, String businessTable, String businessId, String title, String disposeType) {
         Map <String, Object> vars = Maps.newHashMap ( );
-        return startProcess ( procDefKey, businessTable, businessId, title, vars );
+        return startProcess ( procDefKey, businessTable, businessId, title, vars, disposeType);
     }
 
     /**
@@ -364,7 +364,7 @@ public class FlowTaskService {
      * @return 流程实例ID
      */
     @SuppressWarnings("unused")
-    public String startProcess(String procDefKey, String businessTable, String businessId, String title, Map <String, Object> vars) {
+    public String startProcess(String procDefKey, String businessTable, String businessId, String title, Map <String, Object> vars, String disposeType) {
         //String userId = UserUtils.getUser().getLoginName();//ObjectUtils.toString(UserUtils.getUser().getId())
         // 设置流程变量
         if ( vars == null ) {
@@ -386,6 +386,11 @@ public class FlowTaskService {
             vars.put ( FlowableConstant.TITLE, title );
         }
 
+        //设置请假天数
+        if (StrUtil.isNotBlank(disposeType)){
+            vars.put(FlowableConstant.DISPOSE_TYPE,disposeType);
+        }
+
         // 启动流程
         ProcessInstance procIns = runtimeService.startProcessInstanceByKey ( procDefKey, businessTable + ":" + businessId, vars );