Browse Source

工单处理功能提交

user5 7 months ago
parent
commit
cffe981aeb
17 changed files with 516 additions and 87 deletions
  1. 176 53
      jeeplus-modules/jeeplus-test/src/main/java/com/jeeplus/test/garbageClearance/controller/LookOverController.java
  2. 15 1
      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. 46 1
      jeeplus-modules/jeeplus-test/src/main/java/com/jeeplus/test/garbageClearance/mapper/xml/LookOverMapper.xml
  5. 3 0
      jeeplus-modules/jeeplus-test/src/main/java/com/jeeplus/test/garbageClearance/service/DTO/LookOverDTO.java
  6. 81 7
      jeeplus-modules/jeeplus-test/src/main/java/com/jeeplus/test/garbageClearance/service/LookOverService.java
  7. 2 0
      jeeplus-modules/jeeplus-test/src/main/java/com/jeeplus/test/oss/mapper/OssServiceMapper.java
  8. 10 0
      jeeplus-modules/jeeplus-test/src/main/java/com/jeeplus/test/oss/mapper/xml/OssServiceMapper.xml
  9. 20 0
      jeeplus-modules/jeeplus-test/src/main/java/com/jeeplus/test/oss/service/OssService.java
  10. 21 3
      jeeplus-modules/jeeplus-test/src/main/java/com/jeeplus/test/wdt/disposeRubbish/controller/DisposeRubbishController.java
  11. 13 1
      jeeplus-modules/jeeplus-test/src/main/java/com/jeeplus/test/wdt/disposeRubbish/service/DisposeRubbishService.java
  12. 14 0
      jeeplus-platform/jeeplus-admin/src/main/java/com/jeeplus/security/jwt/TokenProvider.java
  13. 3 3
      jeeplus-platform/jeeplus-admin/src/main/java/com/jeeplus/sys/controller/LoginController.java
  14. 10 1
      jeeplus-platform/jeeplus-admin/src/main/java/com/jeeplus/sys/controller/UserController.java
  15. 71 7
      jeeplus-platform/jeeplus-admin/src/main/java/com/jeeplus/sys/utils/ALiYunSmsUtil.java
  16. 10 7
      jeeplus-plugins/jeeplus-flowable/src/main/java/com/jeeplus/flowable/common/handler/ExtUserTaskActivityBehavior.java
  17. 16 3
      jeeplus-web/src/main/resources/application-production.yml

+ 176 - 53
jeeplus-modules/jeeplus-test/src/main/java/com/jeeplus/test/garbageClearance/controller/LookOverController.java

@@ -4,10 +4,13 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.google.common.collect.Lists;
 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.domain.Office;
 import com.jeeplus.sys.service.OfficeService;
 import com.jeeplus.sys.service.dto.OfficeDTO;
+import com.jeeplus.sys.service.dto.RoleDTO;
 import com.jeeplus.sys.service.dto.UserDTO;
 import com.jeeplus.sys.utils.ALiYunSmsUtil;
 import com.jeeplus.sys.utils.StringUtils;
@@ -79,72 +82,132 @@ public class LookOverController {
         synchronized (SYN_BYTE) {
             //新增或编辑表单保存
             UserDTO userDTO = UserUtils.getCurrentUserDTO();
+            List<RoleDTO> roleDTOList = userDTO.getRoleDTOList();
 
-            if (StringUtils.isBlank(lookOver.getId())) {
-                LookOver noLookOver = overService.selectOne();
-                if (null != noLookOver) {
-                    lookOver.setYear(noLookOver.getYear());
-                    Integer number = noLookOver.getNumber() + 1;
-                    lookOver.setNumber(number);
-                    // 将年份和流水号拼接成 4 位数字的格式,不足 4 位补 0
-                    String formattedNo = number < 10000 ? String.format("%d%04d", noLookOver.getYear(), number) : String.format("%d%d", noLookOver.getYear(), number);
+            Boolean xzFlag = false;
+            for (RoleDTO roleDTO : roleDTOList) {
+                if("乡镇巡查员".equals(roleDTO.getName())){
+                    xzFlag = true;
+                    break;
+                }
+            }
+            String formattedNo = "";
+            LookOver noLookOver = overService.selectOne();
+            Office office = officeService.getById(userDTO.getOfficeDTO().getId());
+            if(StringUtils.isBlank(lookOver.getId())){
+                lookOver.setOfficeCode(office.getCode());
+            }
+            if(xzFlag){
+                if (StringUtils.isBlank(lookOver.getId())) {
+                    if (null != noLookOver) {
+                        lookOver.setYear(noLookOver.getYear());
+                        Integer number = noLookOver.getNumber() + 1;
+                        lookOver.setNumber(number);
+                        // 将年份和流水号拼接成 4 位数字的格式,不足 4 位补 0
+                        formattedNo = number < 10000 ? String.format("%d%04d", noLookOver.getYear(), number) : String.format("%d%d", noLookOver.getYear(), number);
+
+                    } else {
+                        Calendar calendar = Calendar.getInstance();
+                        int year = calendar.get(Calendar.YEAR);
+                        lookOver.setYear(year);
+                        Integer number = 1;
+                        lookOver.setNumber(number);
+                        // 将年份和流水号拼接成 4 位数字的格式,不足 4 位补 0
+                        formattedNo = String.format("%d%04d", year, number);
+                    }
+                    formattedNo = "Z-" + formattedNo;
                     lookOver.setNo(formattedNo);
-                }else{
-                    Calendar calendar = Calendar.getInstance();
-                    int year = calendar.get(Calendar.YEAR);
-                    lookOver.setYear(year);
-                    Integer number = 1;
-                    lookOver.setNumber(number);
-                    // 将年份和流水号拼接成 4 位数字的格式,不足 4 位补 0
-                    String formattedNo = String.format("%d%04d", year, number);
+                }
+            }else {
+                if (StringUtils.isBlank(lookOver.getId())) {
+                    if (null != noLookOver) {
+                        lookOver.setYear(noLookOver.getYear());
+                        Integer number = noLookOver.getNumber() + 1;
+                        lookOver.setNumber(number);
+                        // 将年份和流水号拼接成 4 位数字的格式,不足 4 位补 0
+                        formattedNo = number < 10000 ? String.format("%s%d%04d", office.getCode(), noLookOver.getYear(), number) : String.format("%s%d%d", office.getCode(), noLookOver.getYear(), number);
+                    } else {
+                        Calendar calendar = Calendar.getInstance();
+                        int year = calendar.get(Calendar.YEAR);
+                        lookOver.setYear(year);
+                        Integer number = 1;
+                        lookOver.setNumber(number);
+                        // 将年份和流水号拼接成 4 位数字的格式,不足 4 位补 0
+                        formattedNo = String.format("%s%d%04d", office.getCode(), year, number);
+                    }
+                    formattedNo = "XS-" + formattedNo;
                     lookOver.setNo(formattedNo);
                 }
             }
-
-            lookOver.setStatus("1");
+            if("5".equals(lookOver.getStatus())){
+                lookOver.setDisposeStatus("1");
+            }
             overService.saveOrUpdate(lookOver);
 
             if (null != lookOver.getFileList1() && lookOver.getFileList1().size() > 0) {
+                List<String> betweenUrlList = Lists.newArrayList();
                 // 进行附件保存操作,保存到work_attachment 表中
                 for (WorkAttachmentInfo attachment : lookOver.getFileList1()) {
-                    // 生成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("before");
-                    ossService.insertWorkAttachmentInfo(attachment, userDTO);
+                    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.getFileList1()) {
+                    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("before");
+                        ossService.insertWorkAttachmentInfo(attachment,userDTO);
+                    }
                 }
             }
 
-            // 发送通知给 当前用户人所在 村庄的 村庄负责人(村支书)
-            UserDTO user = UserUtils.get(lookOver.getClearUserId());
-            UserDTO dto = overService.getUserInfoByOffId(user.getOfficeDTO().getId());
-
-            NotifyDTO notifyDTO = new NotifyDTO();
-            notifyDTO.setContent(lookOver.getRemarks());
-            notifyDTO.setNotifyRecordIds(dto.getId());
-            notifyDTO.setStatus("1");
-            notifyDTO.setType("2");
-            notifyDTO.setTitle("垃圾清运通知");
-            notifyDTO.setLookOverId(lookOver.getId());
-
-            notifyService.saveOrUpdate(notifyDTO);
-
-            //处理完给村负责人发送短信通知
-            try {
-                //获取下一步处理人的手机号
-                String mobile = user.getMobile();
-                //根据手机号进行发送短信
-                //发送短信通知
-                ALiYunSmsUtil.tourInformSendSms(mobile,"XS-J" + lookOver.getNo());
-            } catch (Exception e) {
-                e.printStackTrace();
+            //如果发起巡查流程,则给村支书发送短信通知
+            if("2".equals(lookOver.getStatus())){
+                // 发送通知给 当前用户人所在 村庄的 村庄负责人(村支书)
+                UserDTO user = UserUtils.get(lookOver.getClearUserId());
+                UserDTO dto = overService.getUserInfoByOffId(user.getOfficeDTO().getId());
+
+                NotifyDTO notifyDTO = new NotifyDTO();
+                notifyDTO.setContent(lookOver.getRemarks());
+                notifyDTO.setNotifyRecordIds(dto.getId());
+                notifyDTO.setStatus("1");
+                notifyDTO.setType("2");
+                notifyDTO.setTitle("垃圾清运通知");
+                notifyDTO.setLookOverId(lookOver.getId());
+
+                notifyService.saveOrUpdate(notifyDTO);
+
+                //处理完给村负责人发送短信通知
+                try {
+                    //获取下一步处理人的手机号
+                    String mobile = user.getMobile();
+                    //根据手机号进行发送短信
+                    //发送短信通知
+                    ALiYunSmsUtil.tourInformSendSms(mobile,lookOver.getNo());
+                    //ALiYunSmsUtil.tourInformSendSms(mobile,"XS-J" + lookOver.getNo());
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
             }
-            return ResponseEntity.ok("保存成功");
         }
+        return ResponseUtil.newInstance ( ).add("businessTable", "garbage_clearance_look_over").add("businessId", lookOver.getId()).ok ("保存成功");
     }
 
     /**
@@ -236,8 +299,48 @@ public class LookOverController {
     @ApiOperation(value = "查询最大的巡视工单")
     @GetMapping("getMaxNo")
     public ResponseEntity<String> getMaxNo() {
-        String maxNo = overService.getMaxNo();
-        return ResponseEntity.ok( maxNo );
+        //获取当前人所属部门信息
+        UserDTO currentUserDTO = UserUtils.getCurrentUserDTO();
+        List<RoleDTO> roleDTOList = currentUserDTO.getRoleDTOList();
+        Boolean xzFlag = false;
+        for (RoleDTO roleDTO : roleDTOList) {
+            if("乡镇巡查员".equals(roleDTO.getName())){
+                xzFlag = true;
+                break;
+            }
+        }
+        String formattedNo = "";
+        LookOver noLookOver = overService.selectOne();
+        if(xzFlag){
+            if (null != noLookOver) {
+                Integer number = noLookOver.getNumber() + 1;
+                // 将年份和流水号拼接成 4 位数字的格式,不足 4 位补 0
+                formattedNo = number < 10000 ? String.format("%d%04d", noLookOver.getYear(), number) : String.format("%d%d", noLookOver.getYear(), number);
+            }else{
+                Calendar calendar = Calendar.getInstance();
+                int year = calendar.get(Calendar.YEAR);
+                Integer number = 1;
+                // 将年份和流水号拼接成 4 位数字的格式,不足 4 位补 0
+                formattedNo = String.format("%d%04d", year, number);
+            }
+            formattedNo = "Z-" + formattedNo;
+        }else{
+            Office office = officeService.getById(currentUserDTO.getOfficeDTO().getId());
+            if (null != noLookOver) {
+                Integer number = noLookOver.getNumber() + 1;
+                // 将年份和流水号拼接成 4 位数字的格式,不足 4 位补 0
+                formattedNo = number < 10000 ? String.format("%s%d%04d", office.getCode(), noLookOver.getYear(), number) : String.format("%s%d%d", office.getCode(), noLookOver.getYear(), number);
+            }else{
+                Calendar calendar = Calendar.getInstance();
+                int year = calendar.get(Calendar.YEAR);
+                Integer number = 1;
+                // 将年份和流水号拼接成 4 位数字的格式,不足 4 位补 0
+                formattedNo = String.format("%s%d%04d", office.getCode(), year, number);
+            }
+            formattedNo = "XS-" + formattedNo;
+        }
+
+        return ResponseEntity.ok( formattedNo );
     }
 
     /**
@@ -318,4 +421,24 @@ public class LookOverController {
         return fileList;
     }
 
+    /**
+     * 根据关联id和判定条件查询附件信息
+     * @param ids
+     * @param attachmentFlag
+     * @return
+     */
+    @ApiLog("根据关联id和判定条件查询附件信息")
+    @GetMapping("getPhotoListByIdAndAttachmentFlag")
+    public List<LookOver> getPhotoListByIdAndAttachmentFlag(String ids,String attachmentFlag){
+        Set<String> set = new HashSet<>();
+        String[] attachmentIds = ids.split(",");
+        for (String id : attachmentIds) {
+            set.add(id);
+        }
+        List<String> attachmentIdList = new ArrayList<>(set);
+        List<LookOver> fileList = overService.getFileListByIdList(attachmentIdList, attachmentFlag);
+
+        return fileList;
+    }
+
 }

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

@@ -28,6 +28,10 @@ public class LookOver extends BaseEntity implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
+    /**
+     * 流程实例ID
+     */
+    private String procInsId;
     @ApiModelProperty("简介")
     private String remarks;
 
@@ -37,9 +41,12 @@ public class LookOver extends BaseEntity implements Serializable {
     @ApiModelProperty("处理单位")
     private String processingUnit;
 
-    @ApiModelProperty("处理状态")
+    @ApiModelProperty("流程状态")
     private String status;
 
+    @ApiModelProperty("处理状态")
+    private String disposeStatus;
+
     @ApiModelProperty("清运专员")
     private String clearUserId;
 
@@ -61,6 +68,13 @@ public class LookOver extends BaseEntity implements Serializable {
     @ApiModelProperty("处理编号")
     private Integer number;
 
+    @ApiModelProperty("部门编号")
+    private String officeCode;
+
+    @TableField(exist = false)
+    @ApiModelProperty("展示用创建时间")
+    private String showCreateTime;
+
     //附件信息
     @TableField(exist = false)
     List<WorkAttachmentInfo> fileList1;

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

@@ -44,4 +44,9 @@ public interface LookOverMapper extends BaseMapper<LookOver> {
     List<WorkAttachmentInfo> getByAttachmentIdAndFlag(String id,String flag);
 
     void updateStatus(LookOver lookOver);
+
+    void updateDisposeStatus(LookOver lookOver);
+
+
+    List<LookOver> getListByIdList(@Param("idList") List<String> idList);
 }

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

@@ -21,6 +21,7 @@
         a.id,
         a.create_by_id,
         a.create_time,
+        DATE_FORMAT(create_time, '%m-%d') AS showCreateTime,
         a.update_by_id,
         a.update_time,
         a.del_flag,
@@ -30,7 +31,10 @@
         a.`urls`,
         a.`status`,
         a.`year`,
-        a.`number`
+        a.`number`,
+        a.office_code,
+        a.proc_ins_id,
+        a.dispose_status
         FROM
         garbage_clearance_look_over a
         ${ew.customSqlSegment}
@@ -44,6 +48,7 @@
         a.update_by_id,
         a.update_time,
         a.del_flag,
+        a.clear_user_id,
         a.remarks,
         a.no,
         a.processing_unit,
@@ -51,6 +56,9 @@
         a.`status`,
         a.`year`,
         a.`number`,
+        a.office_code,
+        a.proc_ins_id,
+        a.dispose_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
@@ -88,4 +96,41 @@
         status = #{status}
         where id = #{id}
     </update>
+
+    <update id="updateDisposeStatus">
+        update garbage_clearance_look_over set
+        dispose_status = #{disposeStatus}
+        where id = #{id}
+    </update>
+
+    <select id="getListByIdList" resultType="com.jeeplus.test.garbageClearance.domain.LookOver">
+        select
+        a.id,
+        a.create_by_id,
+        a.create_time,
+        a.update_by_id,
+        a.update_time,
+        a.del_flag,
+        a.clear_user_id,
+        a.remarks,
+        a.no,
+        a.processing_unit,
+        a.`urls`,
+        a.`status`,
+        a.`year`,
+        a.`number`,
+        a.office_code,
+        a.proc_ins_id,
+        a.dispose_status
+        from garbage_clearance_look_over a
+        <where>
+            <if test="idList != null">
+                a.id in
+                <foreach collection="idList" item="id" index="index" open="(" close=")" separator=",">
+                    #{id}
+                </foreach>
+            </if>
+            and a.del_flag = 0
+        </where>
+    </select>
 </mapper>

+ 3 - 0
jeeplus-modules/jeeplus-test/src/main/java/com/jeeplus/test/garbageClearance/service/DTO/LookOverDTO.java

@@ -26,4 +26,7 @@ public class LookOverDTO extends BaseDTO {
 
     //处理状态
     private String status;
+
+    //处理状态
+    private String disposeStatus;
 }

+ 81 - 7
jeeplus-modules/jeeplus-test/src/main/java/com/jeeplus/test/garbageClearance/service/LookOverService.java

@@ -7,14 +7,16 @@ import cn.hutool.extra.spring.SpringUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 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.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.jeeplus.common.redis.RedisUtils;
 import com.jeeplus.core.query.QueryWrapperGenerator;
 import com.jeeplus.security.jwt.TokenProvider;
 import com.jeeplus.sys.constant.CacheNames;
+import com.jeeplus.sys.domain.Office;
 import com.jeeplus.sys.domain.User;
+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.UserUtils;
 import com.jeeplus.test.garbageClearance.domain.LookOver;
@@ -22,14 +24,15 @@ 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.apache.commons.collections4.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import com.jeeplus.test.garbageClearance.service.DTO.LookOverDTO;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.Calendar;
-import java.util.List;
+import javax.validation.constraints.NotNull;
+import java.util.*;
 
 import java.util.List;
 import java.util.stream.Collectors;
@@ -45,6 +48,8 @@ public class LookOverService extends ServiceImpl<LookOverMapper, LookOver> {
 
     @Autowired
     private OssService ossService;
+    @Autowired
+    private OfficeService officeService;
 
     public String getMaxNo() {
         // 创建查询条件构造器
@@ -64,18 +69,22 @@ public class LookOverService extends ServiceImpl<LookOverMapper, LookOver> {
     }
 
     public LookOver selectOne() {
+        //获取当前人所属部门信息
+        UserDTO currentUserDTO = UserUtils.getCurrentUserDTO();
+        Office office = officeService.getById(currentUserDTO.getOfficeDTO().getId());
+
         // 创建查询条件构造器
         QueryWrapper<LookOver> queryWrapper = new QueryWrapper<>();
         Calendar calendar = Calendar.getInstance();
         int year = calendar.get(Calendar.YEAR);
         queryWrapper.in("year",year);
+        queryWrapper.eq("office_code",office.getCode());
         // 按no字段降序排列
         queryWrapper.orderByDesc("number");
         queryWrapper.last("limit 1");
 
         // 只获取第一条记录
         LookOver lookOver = baseMapper.selectOne(queryWrapper);
-
         // 返回最大的no值
         return lookOver;
     }
@@ -130,20 +139,85 @@ public class LookOverService extends ServiceImpl<LookOverMapper, LookOver> {
         QueryWrapper<LookOverDTO> queryWrapper = QueryWrapperGenerator.buildQueryCondition ( lookOver, LookOverDTO.class );
         queryWrapper.eq("a.del_flag","0");
         queryWrapper.eq("a.processing_unit",userDTO.getOfficeDTO().getId());
-        if(StringUtils.isNotBlank(lookOver.getStatus())){
-            queryWrapper.eq("a.status",lookOver.getStatus());
+        queryWrapper.eq("a.status","5");
+        if(StringUtils.isNotBlank(lookOver.getDisposeStatus())){
+            queryWrapper.eq("a.dispose_status",lookOver.getDisposeStatus());
         }
         IPage<LookOver> pageList = baseMapper.findPage(page, queryWrapper);
         for (LookOver record : pageList.getRecords()) {
             if(StringUtils.isNotBlank(record.getNo())){
-                String no = "XS-J" + record.getNo();
+                String no = record.getNo();
+                //String no = "XS-J" + record.getNo();
                 record.setNo(no);
             }
         }
         return pageList;
     }
 
+
+    /**
+     * 查询无报告项目及老项目列表信息
+     * @param idList
+     * @param attachmentFlag
+     * @return
+     * @throws Exception
+     */
+    public List<LookOver> getFileListByIdList(List<String> idList, String attachmentFlag){
+
+        List<LookOver> list = baseMapper.getListByIdList(idList);
+        List<WorkAttachmentInfo> fileList = ossService.findFileInfoList(idList, attachmentFlag);
+        for (WorkAttachmentInfo workAttachmentInfo : fileList) {
+            workAttachmentInfo.setUrl(workAttachmentInfo.getTemporaryUrl());
+        }
+
+        //对数据进行分组
+        Map<String, List<WorkAttachmentInfo>> temporaryListMap = dataMessageDispose(fileList);
+
+        for (LookOver record : list) {
+            for (String key : temporaryListMap.keySet()) {
+
+                if(StringUtils.isNotBlank(record.getId()) && record.getId().equals(key)){
+                    List<WorkAttachmentInfo> mapList = temporaryListMap.get(key);
+                    record.setFileList1(mapList);
+                }
+            }
+
+        }
+        return list;
+    }
+
+
+    /**
+     * 分组
+     * @param list
+     * @return
+     */
+    private Map<String, List<WorkAttachmentInfo>> dataMessageDispose(List<WorkAttachmentInfo> list) {
+        Map<String, List<WorkAttachmentInfo>> infoMap = new HashMap<>();
+        if (CollectionUtils.isNotEmpty(list)) {
+            // 分组
+            for (WorkAttachmentInfo vo : list) {
+                List<WorkAttachmentInfo> tempList = infoMap.get(vo.getAttachmentId());
+                /*如果取不到数据,那么直接new一个空的ArrayList**/
+                if (tempList == null) {
+                    tempList = new ArrayList<>();
+                    tempList.add(vo);
+                    infoMap.put(vo.getAttachmentId(), tempList);
+                }
+                else {
+                    /*某个vo之前已经存放过了,则直接追加数据到原来的List里**/
+                    tempList.add(vo);
+                }
+            }
+        }
+        return infoMap;
+    }
+
     public void updateStatus(LookOver lookOver){
         baseMapper.updateStatus(lookOver);
     }
+
+    public void updateDisposeStatus(LookOver lookOver){
+        baseMapper.updateDisposeStatus(lookOver);
+    }
 }

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

@@ -20,6 +20,8 @@ public interface OssServiceMapper extends BaseMapper<WorkAttachment> {
 
     List<WorkAttachment> findList(@Param(Constants.WRAPPER) QueryWrapper queryWrapper);
 
+    List<WorkAttachmentInfo> findInfoList(@Param(Constants.WRAPPER) QueryWrapper queryWrapper);
+
     void insertWorkAttachment (@Param("workAttachment") WorkAttachment workAttachment, @Param("userDto") UserDTO userDto);
 
     void insertWorkAttachmentInfo (@Param("workAttachment") WorkAttachmentInfo workAttachment, @Param("userDto") UserDTO userDto);

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

@@ -41,6 +41,16 @@
          ORDER BY a.sort ASC;
     </select>
 
+    <select id="findInfoList" resultType="com.jeeplus.test.oss.domain.WorkAttachmentInfo">
+        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_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}
+         ORDER BY a.sort ASC;
+    </select>
+
     <insert id="insertWorkAttachment">
         INSERT INTO work_attachment (
             id,

+ 20 - 0
jeeplus-modules/jeeplus-test/src/main/java/com/jeeplus/test/oss/service/OssService.java

@@ -218,6 +218,26 @@ public class OssService extends ServiceImpl<OssServiceMapper,WorkAttachment> {
     }
 
     /**
+     * 根据附件对应父节点id查询文件列表
+     * @param attachmentIdList
+     * @return
+     */
+    public List<WorkAttachmentInfo> findFileInfoList(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<WorkAttachmentInfo> list = ossServiceMapper.findInfoList(queryWrapper);
+        //创建人和文件名称处理
+        if (CollectionUtil.isNotEmpty(list)) {
+            temporaryUrlForLO(list);
+        }
+        log.info("文件查询结束,查询结果:{}" , JSONObject.toJSONString(list));
+        return list;
+    }
+
+    /**
      * 生成临时文件
      * @param list
      * @return

+ 21 - 3
jeeplus-modules/jeeplus-test/src/main/java/com/jeeplus/test/wdt/disposeRubbish/controller/DisposeRubbishController.java

@@ -138,11 +138,11 @@ public class DisposeRubbishController {
                 LookOver lookOver = overService.getById(workOverId);
                 //处理巡查单的状态信息,将巡查单的status调整为处理中
                 if("2".equals(disposeRubbish.getStatus()) || "5".equals(disposeRubbish.getStatus())){
-                    lookOver.setStatus(disposeRubbish.getStatus());
+                    lookOver.setDisposeStatus(disposeRubbish.getStatus());
                 }else{
-                    lookOver.setStatus("1");
+                    lookOver.setDisposeStatus("1");
                 }
-                overService.updateStatus(lookOver);
+                overService.updateDisposeStatus(lookOver);
             }
 
             if("5".equals(disposeRubbish.getStatus())){
@@ -215,4 +215,22 @@ public class DisposeRubbishController {
         UserDTO userDTO = disposeRubbishService.getUserInfoByOffId(officeId);
         return ResponseEntity.ok( userDTO );
     }
+
+
+    /**
+     * 查询巡视工单
+     *
+     * @param programIds
+     * @return
+     */
+    @GetMapping("getByWorkOverId")
+    public ResponseEntity getByWorkOverId(String programIds) {
+        // 转换为数组
+        String[] array = programIds.split(",");
+        // 再转换为集合(ArrayList)
+        List<String> programIdList = Arrays.asList(array);
+        // 还需要处理单位  清运专员  联系方式  及  附件信息
+        List<WorkAttachment> workAttachmentList = disposeRubbishService.getByWorkOverId ( programIdList );
+        return ResponseEntity.ok ( workAttachmentList );
+    }
 }

+ 13 - 1
jeeplus-modules/jeeplus-test/src/main/java/com/jeeplus/test/wdt/disposeRubbish/service/DisposeRubbishService.java

@@ -99,7 +99,8 @@ public class DisposeRubbishService extends ServiceImpl<DisposeRubbishMapper, Dis
                 if(null != overServiceById && StringUtils.isNotBlank(overServiceById.getNo())){
                     WorkOverNo workOverNo = new WorkOverNo();
                     workOverNo.setId(overServiceById.getId());
-                    workOverNo.setNo("XS-J" + overServiceById.getNo());
+                    workOverNo.setNo(overServiceById.getNo());
+                    //workOverNo.setNo("XS-J" + overServiceById.getNo());
                     workOverNoList.add(workOverNo);
                 }
             }
@@ -117,4 +118,15 @@ public class DisposeRubbishService extends ServiceImpl<DisposeRubbishMapper, Dis
         return baseMapper.getByProcInsId(procInsIdList);
     }
 
+    /**
+     * 根据id获取巡视工单信息
+     * @param programIdList
+     * @return
+     */
+    public List<WorkAttachment> getByWorkOverId(List<String> programIdList) {
+        // 根据id 从work_attachment 表中获取图片信息
+        List<WorkAttachment> fileList1 = ossService.findFileList(programIdList, "before");
+        return fileList1;
+    }
+
 }

+ 14 - 0
jeeplus-platform/jeeplus-admin/src/main/java/com/jeeplus/security/jwt/TokenProvider.java

@@ -11,6 +11,7 @@ import com.jeeplus.common.redis.RedisUtils;
 import com.jeeplus.config.properties.JeePlusProperties;
 import com.jeeplus.core.errors.ErrorConstants;
 import com.jeeplus.sys.constant.CacheNames;
+import com.jeeplus.sys.utils.StringUtils;
 import com.jeeplus.sys.utils.UserUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
@@ -38,7 +39,20 @@ public class TokenProvider {
      * @return 是否正确
      */
     public static boolean validateToken(String token, String accessToken) {
+        if(StringUtils.isBlank(token) || StringUtils.isBlank(accessToken)){
+            // token失效,执行刷新操作
+            RedisUtils.getInstance ( ).expire ( CacheNames.USER_CACHE_TOKEN, token, JeePlusProperties.newInstance ( ).getEXPIRE_TIME ( ) );
+            return true;
+        }
         String userName = TokenProvider.getLoginName ( accessToken );
+        if(StringUtils.isBlank(userName)){
+
+            if(StringUtils.isBlank(token) || StringUtils.isBlank(accessToken)){
+                // token失效,执行刷新操作
+                RedisUtils.getInstance ( ).expire ( CacheNames.USER_CACHE_TOKEN, token, JeePlusProperties.newInstance ( ).getEXPIRE_TIME ( ) );
+                return true;
+            }
+        }
         String password = UserUtils.getByLoginName ( userName ).getPassword ( );
         try {
 

+ 3 - 3
jeeplus-platform/jeeplus-admin/src/main/java/com/jeeplus/sys/controller/LoginController.java

@@ -95,10 +95,10 @@ public class LoginController {
             password = "jsxgpassword";
         }
 
-        /*String code = loginForm.getCode ( );
-        if ( !code.equals ( RedisUtils.getInstance ( ).get ( CacheNames.SYS_CACHE_CODE, loginForm.getUuid ( ) ) ) ) {
+        String code = loginForm.getCode ( );
+        if ( StringUtils.isNotBlank(code) && !code.equals ( RedisUtils.getInstance ( ).get ( CacheNames.SYS_CACHE_CODE, loginForm.getUuid ( ) ) ) ) {
             return ResponseEntity.badRequest ( ).body ( ErrorConstants.LOGIN_ERROR_ERROR_VALIDATE_CODE );
-        }*/
+        }
 
         //根据登录名查询登录信息
         List<UserDTO> loginUserList = userService.getUserIdByLoginOrMobile(username);

+ 10 - 1
jeeplus-platform/jeeplus-admin/src/main/java/com/jeeplus/sys/controller/UserController.java

@@ -309,6 +309,7 @@ public class UserController {
             redisUtils.setEx(mobile+ "loginPassword", randomCode, 300, TimeUnit.SECONDS);
             HashMap<String,Object> result = null;
             j.put("success",true);
+            j.put("randomCode",randomCode);
             j.put("message","短信发送成功!");
             /*try{
                 //调用工具类返回结果
@@ -340,11 +341,19 @@ public class UserController {
                 Integer statusCode = (Integer) result.get("statusCode");
                 if (200 == statusCode) {
                     j.put("success",true);
+                    j.put("randomCode",randomCode);
                     j.put("message","短信发送成功!");
                     //存放验证码
                     //以手机号+为key 五分钟为时效 将验证码进行短期存储
                     redisUtils.setEx(mobile+ "loginPassword", randomCode, 300, TimeUnit.SECONDS);
-                }else if(400 == statusCode){
+                }else if(10001 == statusCode){
+                    j.put("success",false);
+                    String message = (String) result.get("message");
+                    j.put("message",message);
+                }else if(10002 == statusCode){
+                    j.put("success",false);
+                    j.put("message","账户短信量余额不足,请联系管理员进行充值!");
+                }else if(10003 == statusCode){
                     j.put("success",false);
                     j.put("message","手机号获取验证码次数已达每日上限!");
                 }else{

+ 71 - 7
jeeplus-platform/jeeplus-admin/src/main/java/com/jeeplus/sys/utils/ALiYunSmsUtil.java

@@ -5,6 +5,7 @@ import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
 import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
 import com.aliyun.tea.TeaException;
 import com.aliyun.teaopenapi.models.Config;
+import oracle.net.aso.j;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -15,12 +16,25 @@ import java.util.Random;
  * @version: 2024-09-06 11:20
  */
 public class ALiYunSmsUtil {
-    private static final String ACCESS_KEY_ID = "LTAI5tMtykpNyYhfHjdneobt";//AccessKey自己账号的
+    /*private static final String ACCESS_KEY_ID = "LTAI5tMtykpNyYhfHjdneobt";//AccessKey自己账号的
     private static final String ACCESS_KEY_SECRET = "AHE0Mdv5y5zW1h9xwHvJwzkXoKKrAd";
     private static final String ENDPOINT = "dysmsapi.aliyuncs.com";//固定死
-    private static final String SIGNNAME = "大屏展示";//签名名称
+    private static final String SIGNNAME = "大屏展示";//签名名称*/
+    private static final String ACCESS_KEY_ID = "LTAI5t5hyVGuA6A6fDexPZQb";//AccessKey自己账号的
+    private static final String ACCESS_KEY_SECRET = "zY2oraMB4GAqPI0oFqXKndREV6uO52";
+    private static final String ENDPOINT = "dysmsapi.aliyuncs.com";//固定死
+    private static final String SIGNNAME = "东台市头灶镇人民政府";//签名名称
     private static final String TCODE = "";//模版的编号
 
+
+
+    /**
+     * 登录验证码
+     * @param phoneNumbers
+     * @param randomCode
+     * @return
+     * @throws Exception
+     */
     public static HashMap<String,Object> loginSendSms(String phoneNumbers, String randomCode) throws Exception {
         HashMap<String,Object> map = new HashMap<>();
         Config config = new Config()
@@ -32,14 +46,33 @@ public class ALiYunSmsUtil {
         SendSmsRequest sendSmsRequest = new SendSmsRequest()
                 .setPhoneNumbers(phoneNumbers)
                 .setSignName(SIGNNAME)
-                .setTemplateCode("SMS_472770050")
+                /*.setTemplateCode("SMS_472770050")*/
+                .setTemplateCode("SMS_473055008")
                 //此处是设计模版的时候预留的变量${code}就验证码,用下面的随机生成4位数字传入
                 .setTemplateParam(String.format("{\"code\":\"%s\"}", randomCode));
 
         try {
             SendSmsResponse sendSmsResponse = client.sendSms(sendSmsRequest);
             System.out.println(sendSmsResponse);
-            map.put("statusCode",sendSmsResponse.getStatusCode());
+            if(sendSmsResponse.body.code.equals("isv.BUSINESS_LIMIT_CONTROL")){
+                if(sendSmsResponse.body.message.contains("触发分钟级流控")){
+                    map.put("message","手机号获取验证码次数已触发每分钟可发送数量上限,请稍后进行重试!");
+                }else if(sendSmsResponse.body.message.contains("触发小时级流控")){
+                    map.put("message","手机号获取验证码次数已触发每小时可发送数量上限,请稍后进行重试!");
+                }else{
+                    map.put("message","手机号获取验证码次数已触发每小时可发送数量上限,请稍后进行重试!");
+                }
+                //触发云通信流控限制 每小时限量
+                map.put("statusCode",10001);
+            }else if(sendSmsResponse.body.code.contains("isv.AMOUNT_NOT_ENOUGH")){
+                //触发账户余额不足
+                map.put("statusCode",10002);
+            }else if(sendSmsResponse.body.code.contains("isv.DAY_LIMIT_CONTROL")){
+                //触发触发日发送限额
+                map.put("statusCode",10003);
+            }else if(sendSmsResponse.body.code.contains("OK")){
+                map.put("statusCode",sendSmsResponse.getStatusCode());
+            }
             return map;
         } catch (TeaException error) {
             return map;
@@ -64,7 +97,7 @@ public class ALiYunSmsUtil {
         SendSmsRequest sendSmsRequest = new SendSmsRequest()
                 .setPhoneNumbers(phoneNumbers)
                 .setSignName(SIGNNAME)
-                .setTemplateCode("SMS_472680059")
+                .setTemplateCode("SMS_473020006")
                 //此处是设计模版的时候预留的变量${code}就验证码,用下面的随机生成4位数字传入
                 .setTemplateParam(String.format("{\"no\":\"%s\"}", no));
 
@@ -79,7 +112,7 @@ public class ALiYunSmsUtil {
     }
 
     /**
-     * 发送通知(转运通知)
+     * 发送通知(转运完成通知)
      * @param phoneNumbers
      * @param no
      * @return
@@ -96,7 +129,7 @@ public class ALiYunSmsUtil {
         SendSmsRequest sendSmsRequest = new SendSmsRequest()
                 .setPhoneNumbers(phoneNumbers)
                 .setSignName(SIGNNAME)
-                .setTemplateCode("SMS_472775053")
+                .setTemplateCode("SMS_473155005")
                 //此处是设计模版的时候预留的变量${code}就验证码,用下面的随机生成4位数字传入
                 .setTemplateParam(String.format("{\"no\":\"%s\"}", no));
 
@@ -109,4 +142,35 @@ public class ALiYunSmsUtil {
             return map;
         }
     }
+
+    /**
+     * 发送通知(转运处理通知)
+     * @param phoneNumbers
+     * @return
+     * @throws Exception
+     */
+    public static HashMap<String,Object> disposeInformSendSms(String phoneNumbers) throws Exception {
+        HashMap<String,Object> map = new HashMap<>();
+        Config config = new Config()
+                .setAccessKeyId(ACCESS_KEY_ID)
+                .setAccessKeySecret(ACCESS_KEY_SECRET)
+                .setEndpoint(ENDPOINT);
+
+        Client client = new Client(config);
+        SendSmsRequest sendSmsRequest = new SendSmsRequest()
+                .setPhoneNumbers(phoneNumbers)
+                .setSignName(SIGNNAME)
+                .setTemplateCode("SMS_473160026")
+                //此处是设计模版的时候预留的变量${code}就验证码,用下面的随机生成4位数字传入
+                /*.setTemplateParam(String.format("{\"no\":\"%s\"}", no))*/;
+
+        try {
+            SendSmsResponse sendSmsResponse = client.sendSms(sendSmsRequest);
+            System.out.println(sendSmsResponse);
+            map.put("statusCode",sendSmsResponse.getStatusCode());
+            return map;
+        } catch (TeaException error) {
+            return map;
+        }
+    }
 }

+ 10 - 7
jeeplus-plugins/jeeplus-flowable/src/main/java/com/jeeplus/flowable/common/handler/ExtUserTaskActivityBehavior.java

@@ -11,6 +11,7 @@ import com.jeeplus.flowable.utils.FlowableUtils;
 import com.jeeplus.sys.domain.User;
 import com.jeeplus.sys.service.UserService;
 import com.jeeplus.sys.service.dto.UserDTO;
+import com.jeeplus.sys.utils.ALiYunSmsUtil;
 import com.jeeplus.sys.utils.UserUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.flowable.bpmn.model.FlowElement;
@@ -136,17 +137,19 @@ public class ExtUserTaskActivityBehavior extends UserTaskActivityBehavior {
                             System.out.println(sql);
                             List<Map<String, Object>> maps = SpringUtil.getBean(JdbcTemplate.class).queryForList(sql);
                             for (Map<String, Object> map : maps) {
-                                /*try {
+                                try {
                                     //获取下一步处理人的手机号
                                     String mobile = map.get("mobile").toString();
-                                    //根据手机号进行发送短信
-                                    //生成四位随机验证码
-                                    String randomCode = String.valueOf((int) (Math.random() * 9000 + 1000));
-                                    //发送短信通知
-                                    UserUtils.sendRandomCodes(mobile,randomCode);
+                                    if(!"13400077466".equals(mobile)){
+                                        //根据手机号进行发送短信
+                                        //发送短信通知
+                                        ALiYunSmsUtil.disposeInformSendSms(mobile);
+                                    }
                                 }catch (IOException e){
                                     e.getMessage();
-                                }*/
+                                } catch (Exception e) {
+                                    e.printStackTrace();
+                                }
                                 //将下一节点审核人进行存储在集合里
                                 candidateUserIds.add(map.get ("id").toString ());
                             }

+ 16 - 3
jeeplus-web/src/main/resources/application-production.yml

@@ -49,8 +49,8 @@ spring:
       datasource:
         master:
           username: root
-          password: root
-          url: jdbc:mysql://192.168.2.131:3306/wdt_erp_process?useUnicode=true&characterEncoding=utf-8&useSSL=false&nullCatalogMeansCurrent=true&serverTimezone=GMT%2B8
+          password: Xg20240911!
+          url: jdbc:mysql://127.0.0.1:3306/wdt_erp_process?useUnicode=true&characterEncoding=utf-8&useSSL=false&nullCatalogMeansCurrent=true&serverTimezone=GMT%2B8
           driver-class-name: com.mysql.cj.jdbc.Driver
 
           #oracle database settings
@@ -220,8 +220,21 @@ devtool:
 productId: Y20221228521
 license: 4DAE2B0CD929C8E0810F0657F251EA5DAB4DA3EF88E77EA7488BEA554B62D265A0BC223603AE2DB82C07DB7566A2E66BAF4F5DE866EDB9C98A87D2DBA971207F4AC5B169FB3A76DA14D99BA809B089A0C30393FE1290B852F1D96BD2EC256F1DB5FE05D730B4C59069343113FEE6C26DCD20D71DA2909E26AA7B6E422527205D
 
-merchantFilePath: http://192.168.2.133
+merchantFilePath: http://dttz.xgccpm.cn
 
 
+# 公共密码
+publicPassword: jsxgpassword
+#阿里云文件夹路径
+aliyun_directory: attachment-file/assess
+#签章阿里云文件bucketName
+qzBucketName: xg-qz
 
 
+#容联云相关参数
+rong_userid: 8a216da86715511501673e331c24171e
+rong_token: 3d7dc58c6a334ad6887317efbf847e41
+app_id: 8a216da86715511501673e331c741725
+template_id: 435329
+code_type: 1
+