Преглед на файлове

Merge remote-tracking branch 'origin/master'

hym преди 4 години
родител
ревизия
1117b92bde
променени са 63 файла, в които са добавени 1521 реда и са изтрити 122 реда
  1. 7 2
      operation_manager/src/main/java/com/huaxu/client/UserCenterClient.java
  2. 4 1
      operation_manager/src/main/java/com/huaxu/common/MimeType.java
  3. 1 0
      operation_manager/src/main/java/com/huaxu/config/ResourceServerConfig.java
  4. 180 9
      operation_manager/src/main/java/com/huaxu/order/controller/WorkOrderManageController.java
  5. 11 0
      operation_manager/src/main/java/com/huaxu/order/dao/WorkOrderManageMapper.java
  6. 42 0
      operation_manager/src/main/java/com/huaxu/order/dto/WorkOrderManageByAlarmDto.java
  7. 45 0
      operation_manager/src/main/java/com/huaxu/order/dto/WorkOrderManageDto.java
  8. 19 0
      operation_manager/src/main/java/com/huaxu/order/entity/WorkOrderInfo.java
  9. 2 2
      operation_manager/src/main/java/com/huaxu/order/service/WorkFlowLogService.java
  10. 23 0
      operation_manager/src/main/java/com/huaxu/order/service/WorkOrderManageService.java
  11. 26 1
      operation_manager/src/main/java/com/huaxu/order/service/impl/WorkOrderManageServiceImpl.java
  12. 36 31
      operation_manager/src/main/java/com/huaxu/task/controller/PlanManageController.java
  13. 2 1
      operation_manager/src/main/java/com/huaxu/task/dao/PlanManageMapper.java
  14. 6 5
      operation_manager/src/main/java/com/huaxu/task/dto/PlanManageDto.java
  15. 2 0
      operation_manager/src/main/java/com/huaxu/task/entity/UserEntity.java
  16. 2 1
      operation_manager/src/main/java/com/huaxu/task/service/PlanManageService.java
  17. 2 1
      operation_manager/src/main/java/com/huaxu/task/service/impl/PlanManageServiceImpl.java
  18. 64 0
      operation_manager/src/main/java/com/huaxu/track/controller/GpsDataController.java
  19. 92 0
      operation_manager/src/main/java/com/huaxu/track/controller/TaskTrackController.java
  20. 10 0
      operation_manager/src/main/java/com/huaxu/track/dao/GpsDataHisMapper.java
  21. 10 0
      operation_manager/src/main/java/com/huaxu/track/dao/GpsDataMapper.java
  22. 10 0
      operation_manager/src/main/java/com/huaxu/track/dao/TaskTrackMapper.java
  23. 37 0
      operation_manager/src/main/java/com/huaxu/track/entity/GpsData.java
  24. 3 4
      operation_manager/src/main/java/com/huaxu/track/entity/TaskTrack.java
  25. 44 0
      operation_manager/src/main/java/com/huaxu/track/service/GpsDataHisService.java
  26. 51 0
      operation_manager/src/main/java/com/huaxu/track/service/GpsDataService.java
  27. 50 0
      operation_manager/src/main/java/com/huaxu/track/service/TaskTrackService.java
  28. 138 1
      operation_manager/src/main/resources/mapper/order/WorkOrderManageMapper.xml
  29. 2 2
      operation_manager/src/main/resources/mapper/task/PlanManageMapper.xml
  30. 18 6
      sms_water/src/main/java/com/huaxu/async/CheckDeviceStateAsync.java
  31. 27 0
      sms_water/src/main/java/com/huaxu/client/OperationManagerClient.java
  32. 3 0
      sms_water/src/main/java/com/huaxu/client/UserCenterClient.java
  33. 6 2
      sms_water/src/main/java/com/huaxu/config/FeignConfig.java
  34. 4 4
      sms_water/src/main/java/com/huaxu/dao/AlarmDetailMapper.java
  35. 2 0
      sms_water/src/main/java/com/huaxu/dao/DeviceParmMapper.java
  36. 58 0
      sms_water/src/main/java/com/huaxu/dto/DeviceAlarmInfoForOrder.java
  37. 1 0
      sms_water/src/main/java/com/huaxu/dto/DeviceCheckAlarmDto.java
  38. 1 0
      sms_water/src/main/java/com/huaxu/dto/ParmTypeCountDto.java
  39. 42 0
      sms_water/src/main/java/com/huaxu/dto/WorkOrderManageByAlarmDto.java
  40. 33 0
      sms_water/src/main/java/com/huaxu/rabbitmq/ReceiveData.java
  41. 5 0
      sms_water/src/main/java/com/huaxu/service/AlarmDetailsService.java
  42. 2 0
      sms_water/src/main/java/com/huaxu/service/DeviceParmService.java
  43. 11 11
      sms_water/src/main/java/com/huaxu/service/SecSupplyService.java
  44. 109 7
      sms_water/src/main/java/com/huaxu/service/impl/AlarmDetailsServiceImpl.java
  45. 6 0
      sms_water/src/main/java/com/huaxu/service/impl/DeviceParmServiceImpl.java
  46. 3 1
      sms_water/src/main/java/com/huaxu/service/impl/MonitorDataReportServiceImpl.java
  47. 2 2
      sms_water/src/main/java/com/huaxu/service/impl/OnlineMonitorImpl.java
  48. 19 4
      sms_water/src/main/resources/application-dev.properties
  49. 36 1
      sms_water/src/main/resources/mapper/AlarmDetailMapper.xml
  50. 20 5
      sms_water/src/main/resources/mapper/DeviceParmMapper.xml
  51. 3 3
      sms_water/src/main/resources/mapper/MonitorDataReportMapper.xml
  52. 1 1
      sms_water/src/main/resources/mapper/MonitorInfoMapper.xml
  53. 12 0
      sms_water/src/main/resources/mapper/MonthReportMapper.xml
  54. 10 7
      sms_water/src/main/resources/mapper/OnlineMonitorMapper.xml
  55. 11 0
      sms_water/src/main/resources/mapper/YearReportMapper.xml
  56. 1 0
      user_center/src/main/java/com/huaxu/config/ResourceServerConfig.java
  57. 21 6
      user_center/src/main/java/com/huaxu/controller/UserController.java
  58. 2 0
      user_center/src/main/java/com/huaxu/dao/OrgMapper.java
  59. 5 1
      user_center/src/main/java/com/huaxu/dao/UserMapper.java
  60. 2 0
      user_center/src/main/java/com/huaxu/entity/UserEntity.java
  61. 60 0
      user_center/src/main/java/com/huaxu/service/UserService.java
  62. 10 0
      user_center/src/main/resources/mapper/OrgMapper.xml
  63. 54 0
      user_center/src/main/resources/mapper/UserMapper.xml

+ 7 - 2
operation_manager/src/main/java/com/huaxu/client/UserCenterClient.java

@@ -17,9 +17,14 @@ public interface UserCenterClient {
     List<Integer> getUserIdsByOrgId(@RequestParam("ids") String ids);
 
     @GetMapping("/dict/selectListByPCodes")
-    Map<String,String> selectListByPCodes(@RequestParam String parentDictCodes);
+    Map<String, String> selectListByPCodes(@RequestParam String parentDictCodes);
 
 
     @PostMapping("/user/findUserIdsByUserIds")
-    List<UserEntity> findUserIdsByUserIds(Long[] ids);
+    List<UserEntity> findUserIdsByUserIds(@RequestParam("ids") Long[] ids);
+
+    @GetMapping("/user/findUserIdsForOrg")
+    List<Long> findUserIdsForOrg();
+
+
 }

+ 4 - 1
operation_manager/src/main/java/com/huaxu/common/MimeType.java

@@ -21,7 +21,10 @@ public class MimeType {
             //许可证书
             "lic",
             // pdf
-            "pdf"};
+            "pdf",
+            //视频
+            "mp4","avi","rm","mov","qt"
+    };
 
     public static String getExtension(String urlPrefix) {
         switch (urlPrefix) {

+ 1 - 0
operation_manager/src/main/java/com/huaxu/config/ResourceServerConfig.java

@@ -18,6 +18,7 @@ public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
                 .authorizeRequests()
                 .antMatchers("/swagger-ui.html","/webjars/**", "/webjars/**", "/swagger-resources/**",
                        "/webSocket/**","/message/sendToOne","/messageTemplate/**","/messageType/**",
+                        "/order/workOrderManage/saveByAlarms",
                         "/v2/**")
                 .permitAll() //配置不需要身份认证的请求路径
                // .anyRequest().authenticated() //其他所有访问路径都需要身份认证

+ 180 - 9
operation_manager/src/main/java/com/huaxu/order/controller/WorkOrderManageController.java

@@ -1,30 +1,39 @@
 package com.huaxu.order.controller;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.huaxu.client.UserCenterClient;
 import com.huaxu.common.FileUploadUtil;
+import com.huaxu.entity.Message;
 import com.huaxu.model.AjaxMessage;
 import com.huaxu.model.LoginUser;
+import com.huaxu.model.Pagination;
 import com.huaxu.model.ResultStatus;
+import com.huaxu.order.dto.WorkOrderManageByAlarmDto;
 import com.huaxu.order.dto.WorkOrderManageDto;
 import com.huaxu.order.entity.WorkFlowDetail;
 import com.huaxu.order.entity.WorkFlowLog;
+import com.huaxu.order.entity.WorkOrderInfo;
 import com.huaxu.order.entity.WorkOrderManage;
 import com.huaxu.order.service.WorkFlowDetailService;
 import com.huaxu.order.service.WorkFlowLogService;
 import com.huaxu.order.service.WorkOrderManageService;
 import com.huaxu.process.dto.TaskPorcessResult;
+import com.huaxu.process.entity.ProcessDefinition;
 import com.huaxu.process.service.WorkFlowService;
 import com.huaxu.process.utils.Action;
 import com.huaxu.task.entity.PlanManage;
 import com.huaxu.task.service.PlanManageService;
 import com.huaxu.util.DatesUtil;
+import com.huaxu.util.MessageSendUtil;
 import com.huaxu.util.UserUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
-import org.apache.commons.lang3.StringUtils;
+import org.activiti.engine.task.Task;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -54,6 +63,9 @@ public class WorkOrderManageController {
     @Autowired
     UserCenterClient userCenterClient;
 
+    @Autowired
+    private MessageSendUtil messageSendUtil;
+
     @Value("${UMIS.sys_config_path}")
     private String baseDir;
 
@@ -71,12 +83,36 @@ public class WorkOrderManageController {
     public AjaxMessage<Integer> insertSelective(@ApiParam(value = "工单信息", required = true) @RequestBody WorkOrderManage workOrderManage) {
         LoginUser currentUser = UserUtil.getCurrentUser();
         workOrderManage.setTenantId(currentUser.getTenantId());
-        workOrderManage.setCreateBy(currentUser.getUsername());
-        workOrderManage.setDateCreate(new Date());
+        workOrderManage.setCreateBy(currentUser.getId().toString());
+        workOrderManage.setDateCreate(workOrderManage.getDateCreate()==null?new Date():workOrderManage.getDateCreate());
         workOrderManage.setOrderStatus(0);
         workOrderManage.setTaskNo(DatesUtil.formatDate(new Date(),"yyyyMMddHHmmss")+String.valueOf((int) (Math.random()*(9999-1000)+1000)));
         workOrderManageService.insertSelective(workOrderManage);
         int result =workOrderManage.getId();//返回新增数据的id
+        if(workOrderManage.getEventType()==1) {
+            //发消息
+            try {
+                Message message=new Message();
+                message.setStatus(1);
+                message.setCreateBy(currentUser.getId().toString());
+                message.setTenantId(currentUser.getTenantId());
+                message.setMessageContent(workOrderManage.getTaskDesc());
+                message.setMessageId(UUID.randomUUID().toString());
+                message.setMessageType(3);
+                message.setMessageTemplateId(3);
+                message.setChannel(0);
+                message.setUrl(String.valueOf(result));
+                //获取需要发消息的用户
+                List<Long> users=userCenterClient.findUserIdsForOrg();
+                for(Long user : users){
+                    message.setUserId(user.intValue());
+                    messageSendUtil.send(message);
+                }
+            }catch(Exception e){
+                e.printStackTrace();
+            }
+        }
+
         return new AjaxMessage<>(ResultStatus.OK, result);
     }
     /**
@@ -128,7 +164,7 @@ public class WorkOrderManageController {
         workFlowLog.setFlowId(flowId);
         workFlowLog.setFlowType(flowType);
         workFlowLog.setFlowResult(flowResult);
-        workFlowLog.setCreateBy(currentUser.getUsername());
+        workFlowLog.setCreateBy(currentUser.getId().toString());
         workFlowLog.setDateCreate(new Date());
         workFlowLog.setHandleUserId(currentUser.getId()!=null?currentUser.getId().toString():null);
         workFlowLog.setHandleUserName(currentUser.getUsername());
@@ -155,7 +191,7 @@ public class WorkOrderManageController {
                 plan.setCurrentTaskId(handleResult.size()>0?handleResult.get(0).getCurrentTaskId():null);
                 plan.setCurrentUsers(handleResult.size()>0?handleResult.get(0).getCurrentTaskUsers():null);
                 plan.setCurrentTaskName(handleResult.size()>0?handleResult.get(0).getCurrentTaskName():null);
-                plan.setUpdateBy(currentUser.getUsername());
+                plan.setUpdateBy(currentUser.getId().toString());
                 plan.setDateUpdate(new Date());
                 if(handleResult.size()==0||handleResult==null) {
                     plan.setPlanStatus(2);
@@ -171,7 +207,7 @@ public class WorkOrderManageController {
             if(actionId==4||actionId==5){
                 WorkOrderManage workOrderManage=new WorkOrderManage();
                 workOrderManage.setTenantId(currentUser.getTenantId());
-                workOrderManage.setCreateBy(currentUser.getUsername());
+                workOrderManage.setCreateBy(currentUser.getId().toString());
                 workOrderManage.setDateCreate(new Date());
                 workOrderManage.setOrderStatus(0);
                 workOrderManage.setTaskNo(DatesUtil.formatDate(new Date(),"yyyyMMddHHmmss")+String.valueOf((int) (Math.random()*(9999-1000)+1000)));
@@ -202,7 +238,7 @@ public class WorkOrderManageController {
                 order.setCurrentTaskId(handleResult.size()>0?handleResult.get(0).getCurrentTaskId():null);
                 order.setCurrentUsers(handleResult.size()>0?handleResult.get(0).getCurrentTaskUsers():null);
                 order.setCurrentTaskName(handleResult.size()>0?handleResult.get(0).getCurrentTaskName():null);
-                order.setUpdateBy(currentUser.getUsername());
+                order.setUpdateBy(currentUser.getId().toString());
                 order.setDateUpdate(new Date());
                 if(handleResult.size()==0||handleResult==null) {
                     order.setOrderStatus(2);
@@ -247,11 +283,11 @@ public class WorkOrderManageController {
 
         //插入或更新详情
         if(detailId==null) {
-            workFlowDetail.setCreateBy(currentUser.getUsername());
+            workFlowDetail.setCreateBy(currentUser.getId().toString());
             workFlowDetail.setDateCreate(new Date());
             workFlowDetailService.insertSelective(workFlowDetail);
         }else{
-            workFlowDetail.setUpdateBy(currentUser.getUsername());
+            workFlowDetail.setUpdateBy(currentUser.getId().toString());
             workFlowDetail.setDateUpdate(new Date());
             workFlowDetail.setId(detailId);
             workFlowDetailService.updateByPrimaryKeySelective(workFlowDetail);
@@ -287,4 +323,139 @@ public class WorkOrderManageController {
         }
         return new AjaxMessage<>(ResultStatus.OK, avatar);
     }
+
+    @GetMapping("/event/select")
+    @ApiOperation(value = "查询事件隐患/所有工单")
+    public AjaxMessage<Pagination<WorkOrderInfo>> selectEvent(
+            @ApiParam(value = "页数", required = true)@RequestParam Integer pageNum,
+            @ApiParam(value = "条数", required = true)@RequestParam Integer pageSize,
+            @ApiParam(value = "状态(0:事件隐患;null:所有工单;1:执行中;2:完成)", required = false) @RequestParam(required = false) Integer orderStatus,
+            @ApiParam(value = "事件类型(1:运维上报,2:用户上报,3:设备告警)", required = false) @RequestParam(required = false) Integer eventType,
+            @ApiParam(value = "事件隐患ID", required = false) @RequestParam(required = false) String taskNo,
+            @ApiParam(value = "计划起始日期(yyyy-MM-dd)", required = false) @RequestParam(required = false) String startDate,
+            @ApiParam(value = "计划截至日期(yyyy-MM-dd)", required = false) @RequestParam(required = false) String endDate){
+        WorkOrderManageDto workOrderManageDto = new WorkOrderManageDto();
+        //根据用户编号,获取用户的权限
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        workOrderManageDto.setTaskNo(taskNo);
+        if(!org.springframework.util.StringUtils.isEmpty(startDate)&& !StringUtils.isEmpty(endDate)) {
+            workOrderManageDto.setStartDate(startDate);
+            workOrderManageDto.setEndDate(endDate);
+        }
+        workOrderManageDto.setOrderStatus(orderStatus);
+        workOrderManageDto.setEventType(eventType);
+        workOrderManageDto.setTenantId(loginUser.getTenantId());
+        workOrderManageDto.setProgramItems(loginUser.getProgramItemList());
+        workOrderManageDto.setUserType(loginUser.getType());
+        //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
+        workOrderManageDto.setPermissonType(loginUser.getPermissonType());
+        IPage<WorkOrderInfo> iPage = new Page<>(pageNum, pageSize);
+        iPage = workOrderManageService.selectPage(iPage, workOrderManageDto);
+        Pagination<WorkOrderInfo> pages = new Pagination<>(iPage);
+        //setUserName(pages);
+        return new AjaxMessage<>(ResultStatus.OK, pages);
+    }
+
+    @GetMapping("/pending")
+    @ApiOperation(value = "查询待处理工单")
+    public AjaxMessage<Pagination<WorkOrderInfo>> selectPendingOrder(
+            @ApiParam(value = "页数", required = true)@RequestParam Integer pageNum,
+            @ApiParam(value = "条数", required = true)@RequestParam Integer pageSize,
+            @ApiParam(value = "工单类型(1表务、2停通水、3抢修、4漏点定位、5测漏、6违章跑水)", required = false) @RequestParam(required = false) Integer orderTypeId,
+            @ApiParam(value = "工单ID", required = false) @RequestParam(required = false) String taskNo,
+            @ApiParam(value = "计划起始日期(yyyy-MM-dd)", required = false) @RequestParam(required = false) String startDate,
+            @ApiParam(value = "计划截至日期(yyyy-MM-dd)", required = false) @RequestParam(required = false) String endDate){
+        WorkOrderManageDto workOrderManageDto = new WorkOrderManageDto();
+        //根据用户编号,获取用户的权限
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        if(!StringUtils.isEmpty(startDate)&& !StringUtils.isEmpty(endDate)) {
+            workOrderManageDto.setStartDate(startDate);
+            workOrderManageDto.setEndDate(endDate);
+        }
+        workOrderManageDto.setOrderTypeId(orderTypeId);
+        if(loginUser.getId() != null) {
+            workOrderManageDto.setCurrentUsers(String.format("%s,", loginUser.getId()));
+        }
+        IPage<WorkOrderInfo> iPage = new Page<>(pageNum, pageSize);
+        iPage = workOrderManageService.selectPage(iPage, workOrderManageDto);
+        Pagination<WorkOrderInfo> pages = new Pagination<>(iPage);
+        //setUserName(pages);
+        return new AjaxMessage<>(ResultStatus.OK, pages);
+    }
+
+    @GetMapping("/submit")
+    @ApiOperation(value = "工单派单")
+    public AjaxMessage submitPlan(
+            @ApiParam(value = "工单ID", required = true) @RequestParam(required = false) Integer id,
+            @ApiParam(value = "工单类型编号", required = true) @RequestParam(required = false) Integer orderTypeId,
+            @ApiParam(value = "工单类型名称", required = true) @RequestParam(required = true) String orderType,
+            @ApiParam(value = "紧急程度", required = true) @RequestParam(required = true) String urgency,
+            @ApiParam(value = "接单人编号", required = true) @RequestParam(required = true) String orderUserId){
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        WorkOrderManage workOrderManage = workOrderManageService.selectByPrimaryKey(id);
+//        ProcessDefinition processDefinition = workFlowService.findProcessDefinition(
+//                loginUser.getTenantId(),
+//                loginUser.getCompanyId(),
+//                planManage.getTaskType());
+        //流程查询, 测试参数:(test1 1 1)
+        ProcessDefinition processDefinition = workFlowService.findProcessDefinition(
+                "test1",
+                1,
+                1);
+        if(processDefinition == null){
+            new AjaxMessage(ResultStatus.ERROR,"没有创建流程,不能提交!");
+        }
+        Map<String,Object> vars = new HashMap<>();
+        vars.put("assineeFormUserId",loginUser.getId().toString());
+        //巡检发送系统消息所需参数
+        vars.put("任务类型",orderType);
+        vars.put("任务编号",workOrderManage.getId());
+        vars.put("templateId",7);
+        vars.put("msgType",7);
+        String startProcess = workFlowService.startProcess(processDefinition,vars);
+        Task task = workFlowService.getProcessRuntimeTask(startProcess).get(0);
+        Set<String> taskParticipator = workFlowService.getTaskParticipator(task.getId(),false,null);
+        String currentUsers = "";
+        for (String str : taskParticipator) {
+            currentUsers += String.format("%s,",str);
+        }
+        //更新计划表的流程相关字段值。
+        workOrderManage.setOrderStatus(1);//已执行
+        workOrderManage.setOrderTypeId(orderTypeId);//工单类型ID
+        workOrderManage.setUrgency(urgency);//紧急程度
+        workOrderManage.setOrderUserId(orderUserId);//接单人ID
+        if(loginUser.getId() != null) {
+            workOrderManage.setUpdateBy(String.valueOf(loginUser.getId()));
+            workOrderManage.setSendBy(String.valueOf(loginUser.getId()));//派单人
+        }
+        workOrderManage.setSendTime(new Date());// 派单时间
+        workOrderManage.setDateUpdate(new Date());// 更新时间
+        workOrderManage.setProcessInstanceId(task.getProcessInstanceId());
+        workOrderManage.setProcessDefId(task.getProcessDefinitionId());
+        workOrderManage.setCurrentTaskId(task.getId());
+        workOrderManage.setCurrentUsers(currentUsers);
+        workOrderManage.setCurrentTaskName(task.getName());
+        int rows = workOrderManageService.updateByPrimaryKeySelective(workOrderManage);
+        if(rows > 0) {
+            return new AjaxMessage<>(ResultStatus.OK);
+        }
+        return new AjaxMessage<>(ResultStatus.ERROR);
+    }
+
+    @RequestMapping(value="batchDelete" , method = RequestMethod.DELETE)
+    @ApiOperation(value = "批量删除")
+    public AjaxMessage<Integer> batchDelete( @ApiParam(value = "工单Ids") @RequestParam List<Integer> ids){
+        return new AjaxMessage<>(ResultStatus.OK, workOrderManageService.batchDelete(ids));
+    }
+
+    /**
+     * 批量插入工单信息(报警生成的)
+     */
+    @RequestMapping(value = "saveByAlarms", method = RequestMethod.POST)
+    @ApiOperation(value = "批量插入工单信息(报警生成的)")
+    public Integer saveByAlarms(
+            @ApiParam(value = "工单信息", required = true) @RequestBody List<WorkOrderManageByAlarmDto> workOrderManages){
+
+        return workOrderManageService.batchInsertByAlarms(workOrderManages);
+    }
 }

+ 11 - 0
operation_manager/src/main/java/com/huaxu/order/dao/WorkOrderManageMapper.java

@@ -1,7 +1,12 @@
 package com.huaxu.order.dao;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.huaxu.order.dto.WorkOrderManageByAlarmDto;
 import com.huaxu.order.dto.WorkOrderManageDto;
+import com.huaxu.order.entity.WorkOrderInfo;
 import com.huaxu.order.entity.WorkOrderManage;
+import com.huaxu.task.dto.PlanManageDto;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -21,9 +26,15 @@ public interface WorkOrderManageMapper {
 
     int updateByPrimaryKey(WorkOrderManage record);
 
+    Integer batchDelete(@Param("ids") List<Integer> ids);
+
     List<WorkOrderManageDto> selectAppTodo( @Param("userId")Integer userId,@Param("tenantId")String tenantId);
 
     List<WorkOrderManageDto> selectAppAll( @Param("userId")Integer userId,@Param("tenantId")String tenantId);
 
     List<WorkOrderManageDto> selectOrderDetail(Integer id);
+
+    int batchInsertByAlarms(@Param("workOrderManages")List<WorkOrderManageByAlarmDto> workOrderManages);
+
+    Page<WorkOrderInfo> findPage(IPage<WorkOrderInfo> page, @Param("order") WorkOrderManageDto workOrderManageDto);
 }

+ 42 - 0
operation_manager/src/main/java/com/huaxu/order/dto/WorkOrderManageByAlarmDto.java

@@ -0,0 +1,42 @@
+package com.huaxu.order.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@ApiModel(value = "报警信息生成的工单信息")
+@Data
+public class WorkOrderManageByAlarmDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "报警信息id")
+    private Long id;
+
+    @ApiModelProperty(value = "租户id")
+    private String tenantId;
+
+    @ApiModelProperty(value = "工单描述")
+    private String taskDesc;
+
+    @ApiModelProperty(value = "工单编号")
+    private String taskNo;
+
+    @ApiModelProperty(value = "地址")
+    private String address;
+
+    @ApiModelProperty(value = "报警时间")
+    private String orderTime;
+
+    @ApiModelProperty(value = "公司机构id")
+    private String companyOrgId;
+
+    @ApiModelProperty(value = "部门机构id")
+    private String departmentOrgId;
+
+    @ApiModelProperty(value = "经纬度")
+    private String geo;
+
+}

+ 45 - 0
operation_manager/src/main/java/com/huaxu/order/dto/WorkOrderManageDto.java

@@ -2,6 +2,8 @@ package com.huaxu.order.dto;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.huaxu.model.ProgramItem;
+import com.huaxu.order.entity.WorkFlowDetail;
 import com.huaxu.order.entity.WorkOrderManage;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -9,6 +11,7 @@ import lombok.Data;
 
 import java.io.Serializable;
 import java.util.Date;
+import java.util.List;
 
 @ApiModel(value = "工单管理表")
 @Data
@@ -19,4 +22,46 @@ public class WorkOrderManageDto extends WorkOrderManage {
 
     @ApiModelProperty(value = "任务工单类型")
     private String typeName;
+
+    /**
+     * 所属公司名称
+     */
+    @ApiModelProperty(value = "所属公司名称")
+    private String companyOrgName;
+    /**
+     * 所属部门名称
+     */
+    @ApiModelProperty(value = "所属部门名称")
+    private String deptOrgName;
+    /**
+     * 权限
+     */
+    @ApiModelProperty(value ="权限",hidden = true)
+    @JsonIgnore
+    private List<ProgramItem> programItems;
+    /**
+     * 属性名称
+     */
+    @ApiModelProperty(value="用户权限类型",hidden = true)
+    @JsonIgnore
+    private Integer permissonType;
+
+    /**
+     * 用户类型
+     */
+    @ApiModelProperty(value = "用户类型(-9999 超管 -999普通用户 2普通用户)",hidden = true)
+    @JsonIgnore
+    private String userType;
+
+    /**
+     * 查询起始日期
+     */
+    @ApiModelProperty(value="起始日期")
+    private String startDate;
+
+    /**
+     * 查询截至日期
+     */
+    @ApiModelProperty(value="截至日期")
+    private String endDate;
 }

+ 19 - 0
operation_manager/src/main/java/com/huaxu/order/entity/WorkOrderInfo.java

@@ -0,0 +1,19 @@
+package com.huaxu.order.entity;
+
+import com.huaxu.order.dto.WorkOrderManageDto;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+@ApiModel(value = "工单详情信息")
+@Data
+public class WorkOrderInfo extends WorkOrderManageDto implements Serializable {
+
+    @ApiModelProperty(value = "工作流详情")
+    WorkFlowDetail workFlowDetail;
+
+    @ApiModelProperty(value = "工作流日志集合")
+    List<WorkFlowDetail> workFlowLogList;
+}

+ 2 - 2
operation_manager/src/main/java/com/huaxu/order/service/WorkFlowLogService.java

@@ -9,10 +9,10 @@ import javax.annotation.Resource;
 
 
 /**
- * 报警设置服务接口
+ * 工作流日志服务接口
  *
  * @author yjy
- * @since 2020-11-17
+ * @since 2021-1-16
  */
 @Service
 public class WorkFlowLogService extends ServiceImpl<WorkFlowLogMapper, WorkFlowLog> {

+ 23 - 0
operation_manager/src/main/java/com/huaxu/order/service/WorkOrderManageService.java

@@ -1,9 +1,14 @@
 package com.huaxu.order.service;
 
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.huaxu.order.dto.WorkOrderManageByAlarmDto;
 import com.huaxu.order.dto.WorkOrderManageDto;
+import com.huaxu.order.entity.WorkOrderInfo;
 import com.huaxu.order.entity.WorkOrderManage;
 import com.huaxu.task.entity.PlanManage;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -37,4 +42,22 @@ public interface WorkOrderManageService {
      */
     List<WorkOrderManageDto> selectOrderDetail(Integer id);
 
+    /**
+     * 批量插入工单信息(报警生成的)
+     */
+    Integer batchInsertByAlarms(List<WorkOrderManageByAlarmDto> workOrderManages);
+
+
+    int updateByPrimaryKeySelective(WorkOrderManage record);
+
+
+    /**
+     * 批量删除
+     */
+    Integer batchDelete(@Param("ids") List<Integer> ids);
+
+    /**
+     * 分页查询
+     */
+    Page<WorkOrderInfo> selectPage(IPage<WorkOrderInfo> page, @Param("order") WorkOrderManageDto workOrderManageDto);
 }

+ 26 - 1
operation_manager/src/main/java/com/huaxu/order/service/impl/WorkOrderManageServiceImpl.java

@@ -1,11 +1,14 @@
 package com.huaxu.order.service.impl;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.huaxu.model.LoginUser;
 import com.huaxu.order.dao.WorkOrderManageMapper;
+import com.huaxu.order.dto.WorkOrderManageByAlarmDto;
 import com.huaxu.order.dto.WorkOrderManageDto;
+import com.huaxu.order.entity.WorkOrderInfo;
 import com.huaxu.order.entity.WorkOrderManage;
 import com.huaxu.order.service.WorkOrderManageService;
-import com.huaxu.task.entity.PlanManage;
 import com.huaxu.util.UserUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -74,4 +77,26 @@ public class WorkOrderManageServiceImpl implements WorkOrderManageService {
     public List<WorkOrderManageDto> selectOrderDetail(Integer id) {
         return workOrderManageMapper.selectOrderDetail(id);
     }
+    /**
+     * 批量插入工单信息(报警生成的)
+     */
+    @Override
+    public Integer batchInsertByAlarms(List<WorkOrderManageByAlarmDto> workOrderManages) {
+        return workOrderManageMapper.batchInsertByAlarms(workOrderManages);
+    }
+
+    @Override
+    public Page<WorkOrderInfo> selectPage(IPage<WorkOrderInfo> page, WorkOrderManageDto workOrderManageDto) {
+        return workOrderManageMapper.findPage(page,workOrderManageDto);
+    }
+
+    @Override
+    public int updateByPrimaryKeySelective(WorkOrderManage record) {
+        return workOrderManageMapper.updateByPrimaryKeySelective(record);
+    }
+
+    @Override
+    public Integer batchDelete(List<Integer> ids) {
+        return workOrderManageMapper.batchDelete(ids);
+    }
 }

+ 36 - 31
operation_manager/src/main/java/com/huaxu/task/controller/PlanManageController.java

@@ -13,6 +13,7 @@ import com.huaxu.process.entity.ProcessDefinition;
 import com.huaxu.process.service.WorkFlowService;
 import com.huaxu.task.dto.PlanManageDto;
 import com.huaxu.task.entity.PlanManage;
+import com.huaxu.task.entity.TaskManage;
 import com.huaxu.task.entity.UserEntity;
 import com.huaxu.task.service.PlanManageService;
 import com.huaxu.util.DatesUtil;
@@ -29,7 +30,7 @@ import java.util.*;
 
 @RestController
 @RequestMapping("/workflow/task/")
-@Api(tags = "计划管理")
+@Api(tags = "任务管理")
 public class PlanManageController {
 
     @Autowired
@@ -98,7 +99,7 @@ public class PlanManageController {
 
     @GetMapping("/plan/select")
     @ApiOperation(value = "查询巡检计划")
-    public AjaxMessage<Pagination<PlanManageDto>> selectPlan(
+    public AjaxMessage<Pagination<TaskManage>> selectPlan(
             @ApiParam(value = "页数", required = true)@RequestParam Integer pageNum,
             @ApiParam(value = "条数", required = true)@RequestParam Integer pageSize,
             @ApiParam(value = "任务类型(巡检:7,侧漏:8,养护:9)", required = false) @RequestParam(required = false) Integer taskType,
@@ -121,16 +122,16 @@ public class PlanManageController {
         planManageDto.setUserType(loginUser.getType());
         //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
         planManageDto.setPermissonType(loginUser.getPermissonType());
-        IPage<PlanManageDto> iPage = new Page<>(pageNum, pageSize);
+        IPage<TaskManage> iPage = new Page<>(pageNum, pageSize);
         iPage = planManageService.selectPage(iPage, planManageDto);
-        Pagination<PlanManageDto> pages = new Pagination<>(iPage);
-        //setUserName(pages);
+        Pagination<TaskManage> pages = new Pagination<>(iPage);
+        setUserName(pages);
         return new AjaxMessage<>(ResultStatus.OK, pages);
     }
 
     @GetMapping("/plan/pending")
     @ApiOperation(value = "查询待处理任务")
-    public AjaxMessage<Pagination<PlanManageDto>> selectPendingTask(
+    public AjaxMessage<Pagination<TaskManage>> selectPendingTask(
             @ApiParam(value = "页数", required = true)@RequestParam Integer pageNum,
             @ApiParam(value = "条数", required = true)@RequestParam Integer pageSize,
             @ApiParam(value = "任务类型(巡检:7,侧漏:8,养护:9)", required = false) @RequestParam(required = false) Integer taskType,
@@ -149,10 +150,10 @@ public class PlanManageController {
         if(loginUser.getId() != null) {
             planManageDto.setCurrentUsers(String.format("%s,", loginUser.getId()));
         }
-        IPage<PlanManageDto> iPage = new Page<>(pageNum, pageSize);
+        IPage<TaskManage> iPage = new Page<>(pageNum, pageSize);
         iPage = planManageService.selectPage(iPage, planManageDto);
-        Pagination<PlanManageDto> pages = new Pagination<>(iPage);
-        //setUserName(pages);
+        Pagination<TaskManage> pages = new Pagination<>(iPage);
+        setUserName(pages);
         return new AjaxMessage<>(ResultStatus.OK, pages);
     }
 
@@ -185,10 +186,13 @@ public class PlanManageController {
             @ApiParam(value = "任务id", required = true) @RequestParam Integer flowId) {
         return new AjaxMessage<>(ResultStatus.OK,  planManageService.selectPlanDetail(flowId));
     }
+
+
     @GetMapping("/plan/submit")
     @ApiOperation(value = "提交巡检计划")
     public AjaxMessage submitPlan(
-            @ApiParam(value = "计划ID", required = true) @RequestParam(required = false) Integer id){
+            @ApiParam(value = "任务ID", required = true) @RequestParam(required = false) Integer id,
+            @ApiParam(value = "任务类型", required = true) @RequestParam(required = true) String taskType){
         LoginUser loginUser = UserUtil.getCurrentUser();
         PlanManage planManage = planManageService.selectByPrimaryKey(id);
 //        ProcessDefinition processDefinition = workFlowService.findProcessDefinition(
@@ -204,10 +208,10 @@ public class PlanManageController {
             new AjaxMessage(ResultStatus.ERROR,"没有创建流程,不能提交!");
         }
         Map<String,Object> vars = new HashMap<>();
-        vars.put("assineeFormUserId",loginUser.getId());
+        vars.put("assineeFormUserId",loginUser.getId().toString());
         //巡检发送系统消息所需参数
-        vars.put("任务类型",planManage.getTaskType());
-        vars.put("任务编号",planManage.getId() );
+        vars.put("任务类型",taskType);
+        vars.put("任务编号",planManage.getId());
         vars.put("templateId",4);
         vars.put("msgType",4);
         String startProcess = workFlowService.startProcess(processDefinition,vars);
@@ -219,7 +223,7 @@ public class PlanManageController {
         }
         //更新计划表的流程相关字段值。
         planManage.setPlanStatus(1);//已执行
-        if(planManage.getId() != null) {
+        if(loginUser.getId() != null) {
             planManage.setUpdateBy(String.valueOf(loginUser.getId()));
         }
         planManage.setPlanDate(new Date());// 提交时间
@@ -271,14 +275,14 @@ public class PlanManageController {
     @GetMapping("/plan/delProcInst")
     @ApiOperation(value = "终止流程")
     public AjaxMessage deleteProcessInstance(
-            @ApiParam(value = "任务ID", required = true) @RequestBody Integer id,
-            @ApiParam(value = "流程ID", required = true) @RequestBody String processInstanceId,
-                                             @ApiParam(value = "流程备注", required = true) @RequestBody String remark) {
+            @ApiParam(value = "任务ID", required = true) @RequestParam(required = true) Integer id,
+            @ApiParam(value = "流程ID", required = true) @RequestParam(required = true) String processInstanceId,
+            @ApiParam(value = "流程备注", required = false) @RequestParam(required = false) String remark) {
         Boolean delFlow = workFlowService.deleteProcessInstance(processInstanceId,remark);
         if(delFlow ==true) {
             PlanManage planManage = new PlanManage();
             planManage.setId(id);
-            planManage.setPlanStatus(2);//结束状态
+            planManage.setPlanStatus(3);//任务终止状态
             planManage.setCurrentUsers("");
             planManageService.updateByPrimaryKeySelective(planManage);
             LoginUser currentUser = UserUtil.getCurrentUser();
@@ -301,7 +305,7 @@ public class PlanManageController {
      * 获取并设置用户名称
      * @param pages
      */
-    private void setUserName(Pagination<PlanManageDto> pages){
+    private void setUserName(Pagination<TaskManage> pages){
         if(pages.getTotal()>0) {
             int total = (int) pages.getTotal();
             List<Long> idList = new ArrayList<Long>();
@@ -323,30 +327,31 @@ public class PlanManageController {
             for( int i =0 ;i<idList.size(); i++){
                 ids[i] = idList.get(i);
             }
-            List<UserEntity> userMap = userCenterClient.findUserIdsByUserIds(ids);
+
+            List<UserEntity> userList = userCenterClient.findUserIdsByUserIds(ids);
             for (PlanManage plan : pages.getList()) {
-               /* for (Map.Entry<Long, String> entry : userMap.entrySet()) {
+                for(UserEntity userEntity : userList){
                     if(plan.getUserId() != null) {
-                        if(entry.getKey()== Long.parseLong(plan.getUserId())){
-                            plan.setUserName(entry.getValue());
+                        if(userEntity.getId()== Long.parseLong(plan.getUserId())){
+                            plan.setUserName(userEntity.getUsername());
                         }
                     }
                     if(plan.getPlanUserId() != null){
-                        if(entry.getKey()== Long.parseLong(plan.getPlanUserId())){
-                            plan.setPlanUserName(entry.getValue());
+                        if(userEntity.getId()== Long.parseLong(plan.getPlanUserId())){
+                            plan.setPlanUserName(userEntity.getUsername());
                         }
                     }
                     if(plan.getCreateBy() != null){
-                        if(entry.getKey()== Long.parseLong(plan.getCreateBy())){
-                            plan.setCreateByName(entry.getValue());
+                        if(userEntity.getId()== Long.parseLong(plan.getCreateBy())){
+                            plan.setCreateByName(userEntity.getUsername());
                         }
                     }
                     if(plan.getUpdateBy() != null) {
-                        if(entry.getKey()== Long.parseLong(plan.getUpdateBy())){
-                            plan.setUpdateByName(entry.getValue());
+                        if(userEntity.getId()== Long.parseLong(plan.getUpdateBy())){
+                            plan.setUpdateByName(userEntity.getUsername());
                         }
-                    }*/
-               // }
+                    }
+                }
             }
         }
     }

+ 2 - 1
operation_manager/src/main/java/com/huaxu/task/dao/PlanManageMapper.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.huaxu.task.dto.PlanManageDto;
 import com.huaxu.task.entity.PlanManage;
+import com.huaxu.task.entity.TaskManage;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -27,7 +28,7 @@ public interface PlanManageMapper {
 
     Integer batchDelete(@Param("ids") List<Integer> ids);
 
-    Page<PlanManageDto> findPage(IPage<PlanManageDto> page, @Param("plan") PlanManageDto planManageDto);
+    Page<TaskManage> findPage(IPage<TaskManage> page, @Param("plan") PlanManageDto planManageDto);
 
     PlanManageDto selectPlanDetail(Integer id);
 

+ 6 - 5
operation_manager/src/main/java/com/huaxu/task/dto/PlanManageDto.java

@@ -1,6 +1,5 @@
 package com.huaxu.task.dto;
 
-import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.huaxu.model.ProgramItem;
 import com.huaxu.task.entity.PlanManage;
@@ -8,12 +7,17 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
-import java.util.Date;
 import java.util.List;
 
 @Data
 @ApiModel("计划管理")
 public class PlanManageDto extends PlanManage {
+
+    @ApiModelProperty(value = "json格式存储对应任务详情")
+    private String flowDetail;
+
+    @ApiModelProperty(value = "任务工单类型")
+    private String typeName;
     /**
      * 所属公司名称
      */
@@ -59,7 +63,4 @@ public class PlanManageDto extends PlanManage {
     @ApiModelProperty(value = "用户类型(-9999 超管 -999普通用户 2普通用户)",hidden = true)
     @JsonIgnore
     private String userType;
-
-    @ApiModelProperty(value = "json格式存储对应任务详情")
-    private String flowDetail;
 }

+ 2 - 0
operation_manager/src/main/java/com/huaxu/task/entity/UserEntity.java

@@ -5,6 +5,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
 import com.huaxu.model.ProgramItem;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
 import javax.validation.constraints.NotNull;
 import java.io.Serializable;
@@ -17,6 +18,7 @@ import java.util.List;
  * @date 2020-10-22 17:35
  */
 @Data
+@NoArgsConstructor
 public class UserEntity implements Serializable {
 
     private static final long serialVersionUID = 1L;

+ 2 - 1
operation_manager/src/main/java/com/huaxu/task/service/PlanManageService.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.huaxu.order.dto.WorkOrderManageDto;
 import com.huaxu.task.dto.PlanManageDto;
 import com.huaxu.task.entity.PlanManage;
+import com.huaxu.task.entity.TaskManage;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -23,7 +24,7 @@ public interface PlanManageService {
     /**
      *分页查询巡检计划单
      */
-    IPage<PlanManageDto> selectPage(IPage<PlanManageDto> page, PlanManageDto planManageDto);
+    IPage<TaskManage> selectPage(IPage<TaskManage> page, PlanManageDto planManageDto);
 
 
     /**

+ 2 - 1
operation_manager/src/main/java/com/huaxu/task/service/impl/PlanManageServiceImpl.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.huaxu.task.dao.PlanManageMapper;
 import com.huaxu.task.dto.PlanManageDto;
 import com.huaxu.task.entity.PlanManage;
+import com.huaxu.task.entity.TaskManage;
 import com.huaxu.task.service.PlanManageService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -28,7 +29,7 @@ public class PlanManageServiceImpl implements PlanManageService {
     }
 
     @Override
-    public IPage<PlanManageDto> selectPage(IPage<PlanManageDto> page, PlanManageDto planManageDto){
+    public IPage<TaskManage> selectPage(IPage<TaskManage> page, PlanManageDto planManageDto){
         return planManageMapper.findPage(page,planManageDto);
     }
 

+ 64 - 0
operation_manager/src/main/java/com/huaxu/track/controller/GpsDataController.java

@@ -0,0 +1,64 @@
+package com.huaxu.track.controller;
+
+import com.huaxu.entity.Message;
+import com.huaxu.model.AjaxMessage;
+import com.huaxu.model.LoginUser;
+import com.huaxu.model.ResultStatus;
+import com.huaxu.track.entity.GpsData;
+import com.huaxu.track.entity.GpsDataHis;
+import com.huaxu.track.service.GpsDataHisService;
+import com.huaxu.track.service.GpsDataService;
+import com.huaxu.util.DatesUtil;
+import com.huaxu.util.UserUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@RestController
+@RequestMapping("/track/GpsData")
+@Api(tags = "GPS数据")
+public class GpsDataController {
+
+    @Autowired
+    GpsDataService gpsDataService;
+    @Autowired
+    GpsDataHisService gpsDataHisService;
+    
+    /**
+     * 新增一条数据
+     *
+     * @param GpsData 实体类
+     * @return Response对象
+     */
+    @RequestMapping(value = "insert", method = RequestMethod.POST)
+    @ApiOperation(value = "插入")
+    public AjaxMessage<Boolean> insert(@ApiParam(value = "GPS数据", required = true) @RequestBody GpsData GpsData) {
+        LoginUser currentUser = UserUtil.getCurrentUser();
+        GpsData.setUserId(currentUser.getId());
+        GpsData.setUploadDate(new Date());
+        List<GpsData> gpsDataList=gpsDataService.selectByUserId(currentUser.getId());
+        //插入历史表
+        List<GpsDataHis> gpsDataHisList=new ArrayList<>();
+        for(GpsData gpsData:gpsDataList){
+            GpsDataHis gpsDataHis=new GpsDataHis();
+            gpsDataHis.setUserId(gpsData.getUserId());
+            gpsDataHis.setUploadDate(gpsData.getUploadDate());
+            gpsDataHis.setLongtitude(gpsData.getLongtitude());
+            gpsDataHis.setLatitude(gpsData.getLatitude());
+            gpsDataHisList.add(gpsDataHis);
+        }
+        gpsDataHisService.insert(gpsDataHisList);
+        //删除原来的实时数据
+        gpsDataService.delete(currentUser.getId());
+        return new AjaxMessage<>(ResultStatus.OK, gpsDataService.insert(GpsData));
+    }
+}

+ 92 - 0
operation_manager/src/main/java/com/huaxu/track/controller/TaskTrackController.java

@@ -0,0 +1,92 @@
+package com.huaxu.track.controller;
+
+import com.huaxu.entity.Message;
+import com.huaxu.model.AjaxMessage;
+import com.huaxu.model.LoginUser;
+import com.huaxu.model.ResultStatus;
+import com.huaxu.track.entity.GpsDataHis;
+import com.huaxu.track.entity.TaskTrack;
+import com.huaxu.track.service.GpsDataHisService;
+import com.huaxu.track.service.TaskTrackService;
+import com.huaxu.util.UserUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Date;
+import java.util.List;
+
+
+@RestController
+@RequestMapping("/track/TaskTrack")
+@Api(tags = "任务轨迹")
+public class TaskTrackController {
+
+    @Autowired
+    TaskTrackService taskTrackService;
+    @Autowired
+    GpsDataHisService gpsDataHisService;
+
+    /**
+     * 新增一条数据
+     *
+     * @param
+     * @return Response对象
+     */
+    @RequestMapping(value = "startTrack", method = RequestMethod.POST)
+    @ApiOperation(value = "开始轨迹")
+    public AjaxMessage<Integer> startTrack(@ApiParam(value = "任务id", required = true) @RequestParam Integer taskId) {
+        TaskTrack taskTrack=new TaskTrack();
+        LoginUser currentUser = UserUtil.getCurrentUser();
+        taskTrack.setUserId(currentUser.getId());
+        taskTrack.setTaskId(taskId);
+        taskTrack.setTaskStartDate(new Date());
+        TaskTrack track=taskTrackService.selectTaskTrack(taskId,currentUser.getId());
+        if(track == null) {
+            taskTrackService.insert(taskTrack);
+        }else{
+            taskTrack.setId(track.getId());
+            taskTrack.setTaskEndDate(null);
+            taskTrackService.updateTrack(taskTrack);
+        }
+        return new AjaxMessage<>(ResultStatus.OK,taskTrack.getId());
+    }
+    /**
+     * 修改一条数据
+     *
+     * @param
+     * @return Response对象
+     */
+    @RequestMapping(value = "endTrack", method = RequestMethod.POST)
+    @ApiOperation(value = "结束轨迹")
+    public AjaxMessage<Boolean> endTrack( @ApiParam(value = "任务id", required = true) @RequestParam Integer taskId) {
+        TaskTrack taskTrack=new TaskTrack();
+        LoginUser currentUser = UserUtil.getCurrentUser();
+        taskTrack.setTaskEndDate(new Date());
+        TaskTrack track=taskTrackService.selectTaskTrack(taskId,currentUser.getId());
+        if(track != null) {
+            taskTrack.setId(track.getId());
+            taskTrackService.updateTrack(taskTrack);
+        }
+        return new AjaxMessage<>(ResultStatus.OK);
+    }
+    /**
+     * 查询任务轨迹
+     *
+     * @param
+     * @return Response对象
+     */
+    @RequestMapping(value = "selectTaskTrack", method = RequestMethod.POST)
+    @ApiOperation(value = "查询任务轨迹")
+    public AjaxMessage<List<GpsDataHis>> selectTaskTrack(
+            @ApiParam(value = "任务id", required = true) @RequestParam Integer taskId,
+            @ApiParam(value = "用户id", required = false) @RequestParam(required = false) Integer userId) {
+        LoginUser currentUser = UserUtil.getCurrentUser();
+        userId=userId==null?currentUser.getId():userId;
+        TaskTrack track=taskTrackService.selectTaskTrack(taskId,userId);
+        List<GpsDataHis> result=gpsDataHisService.selectGpsDataHis(track);
+        return new AjaxMessage<>(ResultStatus.OK, result);
+    }
+}

+ 10 - 0
operation_manager/src/main/java/com/huaxu/track/dao/GpsDataHisMapper.java

@@ -0,0 +1,10 @@
+package com.huaxu.track.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.huaxu.track.entity.GpsDataHis;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface GpsDataHisMapper  extends BaseMapper<GpsDataHis> {
+
+}

+ 10 - 0
operation_manager/src/main/java/com/huaxu/track/dao/GpsDataMapper.java

@@ -0,0 +1,10 @@
+package com.huaxu.track.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.huaxu.track.entity.GpsData;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface GpsDataMapper  extends BaseMapper<GpsData> {
+
+}

+ 10 - 0
operation_manager/src/main/java/com/huaxu/track/dao/TaskTrackMapper.java

@@ -0,0 +1,10 @@
+package com.huaxu.track.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.huaxu.track.entity.TaskTrack;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface TaskTrackMapper  extends BaseMapper<TaskTrack> {
+
+}

+ 37 - 0
operation_manager/src/main/java/com/huaxu/track/entity/GpsData.java

@@ -0,0 +1,37 @@
+package com.huaxu.track.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+@ApiModel(value = "用户GPS数据")
+@TableName("sc_gps_data")
+public class GpsData implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "主键")
+    @TableId(type= IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "用户id")
+    private Integer userId;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss" , timezone = "GMT+8")
+    @ApiModelProperty(value = "上传时间")
+    private Date uploadDate;
+
+    @ApiModelProperty(value = "经度")
+    private BigDecimal longtitude;
+
+    @ApiModelProperty(value = "纬度")
+    private BigDecimal latitude;
+}

+ 3 - 4
operation_manager/src/main/java/com/huaxu/track/entity/TaskTrack.java

@@ -1,8 +1,6 @@
 package com.huaxu.track.entity;
 
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.*;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -25,7 +23,7 @@ public class TaskTrack implements Serializable {
     private Integer userId;
 
     @ApiModelProperty(value = "任务id")
-    private String taskId;
+    private Integer taskId;
 
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss" , timezone = "GMT+8")
     @ApiModelProperty(value = "开始时间")
@@ -33,5 +31,6 @@ public class TaskTrack implements Serializable {
 
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss" , timezone = "GMT+8")
     @ApiModelProperty(value = "结束时间")
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
     private Date taskEndDate;
 }

+ 44 - 0
operation_manager/src/main/java/com/huaxu/track/service/GpsDataHisService.java

@@ -0,0 +1,44 @@
+package com.huaxu.track.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.huaxu.track.dao.GpsDataHisMapper;
+import com.huaxu.track.entity.GpsDataHis;
+import com.huaxu.track.entity.TaskTrack;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+
+/**
+ * 用户历史GPS数据服务接口
+ *
+ * @author yjy
+ * @since 2021-1-16
+ */
+@Service
+public class GpsDataHisService extends ServiceImpl<GpsDataHisMapper, GpsDataHis> {
+    @Resource
+    private GpsDataHisMapper gpsDataHisMapper;
+    /**
+     * 批量增加数据
+     *
+     * @param
+     * @return
+     */
+    public boolean insert(List<GpsDataHis> GpsDataHis) {
+        return this.saveBatch(GpsDataHis);
+    }
+    /**
+     *  查询数据
+     *
+     * @param
+     * @return
+     */
+    public List<GpsDataHis> selectGpsDataHis(TaskTrack taskTrack) {
+        return this.list(new QueryWrapper<GpsDataHis>().eq("USER_ID",taskTrack.getUserId())
+                .gt("UPLOAD_DATE",taskTrack.getTaskStartDate())
+                .lt("UPLOAD_DATE",taskTrack.getTaskEndDate()));
+    }
+}

+ 51 - 0
operation_manager/src/main/java/com/huaxu/track/service/GpsDataService.java

@@ -0,0 +1,51 @@
+package com.huaxu.track.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.huaxu.track.dao.GpsDataMapper;
+import com.huaxu.track.entity.GpsData;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.stream.Collectors;
+
+
+/**
+ * 用户GPS数据服务接口
+ *
+ * @author yjy
+ * @since 2021-1-16
+ */
+@Service
+public class GpsDataService extends ServiceImpl<GpsDataMapper, GpsData> {
+    @Resource
+    private GpsDataMapper gpsDataMapper;
+    /**
+     * 批量增加数据
+     *
+     * @param
+     * @return
+     */
+    public boolean insert(GpsData GpsData) {
+        return this.save(GpsData);
+    }
+    /**
+     * 根据用户id查询数据
+     *
+     * @param userId 用户id
+     * @return 单条数据
+     */
+    public List<GpsData> selectByUserId(Integer userId){
+        return this.list(new QueryWrapper<GpsData>().eq("USER_ID",userId));
+    }
+    /**
+     * 根据用户id删除数据
+     *
+     * @param userId 用户id
+     * @return 单条数据
+     */
+    public boolean delete(Integer userId){
+       return this.remove(new QueryWrapper<GpsData>().eq("USER_ID",userId));
+    }
+}

+ 50 - 0
operation_manager/src/main/java/com/huaxu/track/service/TaskTrackService.java

@@ -0,0 +1,50 @@
+package com.huaxu.track.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.huaxu.track.dao.TaskTrackMapper;
+import com.huaxu.track.entity.TaskTrack;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+
+/**
+ * 任务轨迹服务接口
+ *
+ * @author yjy
+ * @since 2021-1-16
+ */
+@Service
+public class TaskTrackService extends ServiceImpl<TaskTrackMapper, TaskTrack> {
+    @Resource
+    private TaskTrackMapper taskTrackMapper;
+    /**
+     * 增加数据
+     *
+     * @param
+     * @return
+     */
+    public boolean insert(TaskTrack taskTrack) {
+        return this.save(taskTrack);
+    }
+    /**
+     * 修改数据
+     *
+     * @param
+     * @return
+     */
+    public boolean updateTrack(TaskTrack taskTrack) {
+        return  this.updateById(taskTrack);
+    }
+    /**
+     * 查询数据
+     *
+     * @param
+     * @return 单条数据
+     */
+    public TaskTrack selectTaskTrack(Integer taskId,Integer userId){
+        return this.getOne(new QueryWrapper<TaskTrack>().eq("USER_ID",userId)
+                .eq("TASK_ID",taskId));
+    }
+}

+ 138 - 1
operation_manager/src/main/resources/mapper/order/WorkOrderManageMapper.xml

@@ -37,6 +37,50 @@
     <result column="pictures" property="pictures" jdbcType="VARCHAR" />
     <result column="flow_detail" property="flowDetail" jdbcType="VARCHAR" />
   </resultMap>
+
+  <resultMap id="workFlowLogResultMap" type="com.huaxu.order.entity.WorkFlowLog">
+    <id column="id" property="id" jdbcType="INTEGER" />
+    <result column="flow_id" property="flowId" jdbcType="INTEGER" />
+    <result column="log_process_instance_id" property="processInstanceId" jdbcType="VARCHAR" />
+    <result column="task_id" property="taskId" jdbcType="VARCHAR" />
+    <result column="handle_user_id" property="handleUserId" jdbcType="VARCHAR" />
+    <result column="handle_user_name" property="handleUserName" jdbcType="VARCHAR" />
+    <result column="flow_type" property="flowType" jdbcType="INTEGER" />
+    <result column="flow_result" property="flowResult" jdbcType="VARCHAR" />
+    <result column="log_create_by" property="createBy" jdbcType="VARCHAR" />
+    <result column="log_date_create" property="dateCreate" jdbcType="TIMESTAMP" />
+    <result column="log_update_by" property="updateBy" jdbcType="VARCHAR" />
+    <result column="log_date_update" property="dateUpdate" jdbcType="TIMESTAMP" />
+  </resultMap>
+
+  <resultMap id="OrderResultMap" type="com.huaxu.order.entity.WorkOrderInfo" extends="BaseResultMap">
+    <association property="workFlowDetail" javaType="com.huaxu.order.entity.WorkFlowDetail">
+      <id column="id" property="id" jdbcType="INTEGER" />
+      <result column="flow_id" property="flowId" jdbcType="INTEGER" />
+      <result column="flow_type" property="flowType" jdbcType="INTEGER" />
+      <result column="flow_detail" property="flowDetail" jdbcType="VARCHAR" />
+      <result column="detail_create_by" property="createBy" jdbcType="VARCHAR" />
+      <result column="detail_date_create" property="dateCreate" jdbcType="TIMESTAMP" />
+      <result column="detail_update_by" property="updateBy" jdbcType="VARCHAR" />
+      <result column="detail_date_update" property="dateUpdate" jdbcType="TIMESTAMP" />
+    </association>
+    <collection property="workFlowLogList" ofType="com.huaxu.order.entity.WorkFlowLog" javaType="java.util.List" select="getWorkFlowLog" column="{flowId=id}">
+      <id column="id" property="id" jdbcType="INTEGER" />
+      <result column="flow_id" property="flowId" jdbcType="INTEGER" />
+      <result column="log_process_instance_id" property="processInstanceId" jdbcType="VARCHAR" />
+      <result column="task_id" property="taskId" jdbcType="VARCHAR" />
+      <result column="handle_user_id" property="handleUserId" jdbcType="VARCHAR" />
+      <result column="handle_user_name" property="handleUserName" jdbcType="VARCHAR" />
+      <result column="flow_type" property="flowType" jdbcType="INTEGER" />
+      <result column="flow_result" property="flowResult" jdbcType="VARCHAR" />
+      <result column="log_create_by" property="createBy" jdbcType="VARCHAR" />
+      <result column="log_date_create" property="dateCreate" jdbcType="TIMESTAMP" />
+      <result column="log_update_by" property="updateBy" jdbcType="VARCHAR" />
+      <result column="log_date_update" property="dateUpdate" jdbcType="TIMESTAMP" />
+    </collection>
+  </resultMap>
+
+
   <sql id="Base_Column_List" >
     id, task_no, task_desc, order_user_id, send_time, send_by, plan_finish_date, finish_date, 
     date_limit, urgency, address, contact_user, contact_phone, order_time, company_org_id, 
@@ -50,6 +94,13 @@
     from sc_work_order_manage
     where id = #{id,jdbcType=INTEGER}
   </select>
+
+  <select id="getWorkFlowLog" resultMap="workFlowLogResultMap" parameterType="map">
+        select t3.process_instance_id log_process_instance_id,t3.task_id,t3.handle_user_id,t3.handle_user_name,t3.flow_result,t3.create_by log_create_by,
+        t3.date_create log_date_create,t3.update_by log_update_by,t3.date_update log_date_update
+        from sc_work_flow_log t3
+        where t3.flow_id= #{flowId,jdbcType=INTEGER} and t3.flow_type=2
+  </select>
   <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >
     delete from sc_work_order_manage
     where id = #{id,jdbcType=INTEGER}
@@ -432,7 +483,6 @@
     where find_in_set(#{userId},current_users) and tenant_id = #{tenantId}
     order by send_time
   </select>
-
   <select id="selectAppAll" resultMap="BaseResultMap">
     select id,task_no,send_time,address,order_type_id,current_task_name
     from sc_work_order_manage
@@ -454,4 +504,91 @@
     where t1.id = #{id,jdbcType=INTEGER} or t1.order_pid = #{orderPid,jdbcType=INTEGER}
     order by t1.order_pid
   </select>
+
+  <insert id="batchInsertByAlarms" parameterType="com.huaxu.order.dto.WorkOrderManageByAlarmDto" keyProperty="id" useGeneratedKeys="true">
+  insert into sc_work_order_manage( task_no, task_desc, address, order_time, company_org_id, department_org_id, order_status, event_type, order_pid, tenant_id, current_task_name, create_by,  date_create, update_by, date_update, geo)
+ values
+  <foreach collection="workOrderManages" item="item" index="index" separator=",">
+    (#{item.taskNo} , #{item.taskDesc}, #{item.address}, #{item.orderTime}, #{item.companyOrgId}, #{item.departmentOrgId}, 0, 3, 0, #{item.tenantId}, '设备报警工单', 'system',  now(), 'system', now(), #{item.geo})
+  </foreach>
+  </insert>
+
+
+
+  <!--分页查询-->
+  <select id="findPage" resultMap="OrderResultMap">
+    select
+    t1.id, t1.task_no, t1.task_desc, t1.order_user_id, t1.send_time, t1.send_by, t1.plan_finish_date, t1.finish_date,
+    t1.date_limit, t1.urgency, t1.address, t1.contact_user, t1.contact_phone, t1.order_time, t1.company_org_id,
+    t1.department_org_id, t1.order_status, t1.event_type, t1.order_type_id, t1.order_pid, t1.tenant_id,
+    t1.process_instance_id, t1.process_def_id, t1.current_task_id, t1.current_users, t1.current_task_name,
+    t1.create_by, t1.date_create, t1.update_by, t1.date_update, t1.geo,t1.videos,t1.pictures,
+    t2.flow_detail,t2.create_by detail_create_by,t2.date_create detail_date_create,t2.update_by detail_update_by,t2.date_update detail_date_update
+    from sc_work_order_manage t1 left  join sc_work_flow_detail t2
+    on t1.id = t2.flow_id and t2.flow_type=2
+    <where>
+      <if test="order.tenantId != null and order.tenantId != ''">
+        and t1.tenant_id = #{order.tenantId}
+      </if>
+      <if test="order.taskNo != null and order.taskNo != ''">
+        and t1.task_no like CONCAT('%',#{order.taskNo},'%')
+      </if>
+      <if test="order.userType!=null and order.userType!=-999 and order.userType!=-9999 and  order.programItems != null and order.programItems.size() > 0">
+        <if test="order.permissonType == 5 or order.permissonType == 2">
+          and ( t1.DEPT_ORG_ID in
+          <foreach collection="order.programItems" item="item" open="(" close=")" separator=",">
+            #{item.orgId}
+          </foreach>
+          or
+          t1.COMPANY_ORG_ID in
+          <foreach collection="order.programItems" item="item" open="(" close=")" separator=",">
+            #{item.orgId}
+          </foreach>
+          )
+        </if>
+        <if test="order.permissonType == 4 or order.permissonType == 3">
+          and t1.DEPT_ORG_ID in
+          <foreach collection="order.programItems" item="item" open="(" close=")" separator=",">
+            #{item.orgId}
+          </foreach>
+        </if>
+        <if test="plan.permissonType == 1">
+          and t1.COMPANY_ORG_ID in
+          <foreach collection="plan.programItems" item="item" open="(" close=")" separator=",">
+            #{item.orgId}
+          </foreach>
+          and (t1.DEPT_ORG_ID is null or t1.DEPT_ORG_ID =0)
+        </if>
+      </if>
+      <if test="order.orderStatus != null">
+        and t1.order_status =  #{order.orderStatus,jdbcType=INTEGER}
+      </if>
+      <if test="order.orderStatus == null">
+        and t1.order_status != 0
+      </if>
+      <if test="order.orderTypeId != null">
+        and t1.order_type_id = #{plan.orderTypeId,jdbcType=INTEGER}
+      </if>
+      <if test="order.eventType != null">
+        and t1.event_type = #{order.eventType,jdbcType=INTEGER}
+      </if>
+      <if test="order.currentUsers != null">
+        and  INSTR(t1.current_users,#{plan.currentUsers})
+      </if>
+      <if test="order.startDate != null and order.endDate != null">
+        and t1.date_create &gt;= date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%c-%d')
+        and t1.date_create &lt;= DATE_ADD(date_format(#{order.endDate,jdbcType=VARCHAR},'%Y-%c-%d'),INTERVAL 1 DAY)
+      </if>
+    </where>
+    order by t1.date_create
+  </select>
+  <!--删除-->
+  <delete id="batchDelete">
+    delete from  sc_work_order_manage
+    where order_status = 0
+    and id in
+    <foreach collection="ids" item="item" open="(" close=")" separator=",">
+      #{item}
+    </foreach>
+  </delete>
 </mapper>

+ 2 - 2
operation_manager/src/main/resources/mapper/task/PlanManageMapper.xml

@@ -87,7 +87,7 @@
         t3.date_create log_date_create,t3.update_by log_update_by,t3.date_update log_date_update
         from sc_work_flow_log t3
         where t3.flow_id= #{flowId,jdbcType=INTEGER} and t3.flow_type=1
-    </select>
+  </select>
 
   <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
     select 
@@ -402,7 +402,7 @@
         and (t1.plan_id like CONCAT('%',#{plan.key},'%') or t1.plan_name like CONCAT('%',#{plan.key},'%'))
       </if>
       <if test="plan.userType!=null and plan.userType!=-999 and plan.userType!=-9999 and  plan.programItems != null and plan.programItems.size() > 0">
-        <if test="plan.permissonType == 5 or alarm.plan == 2">
+        <if test="plan.permissonType == 5 or plan.permissonType == 2">
           and ( t1.DEPT_ORG_ID in
           <foreach collection="plan.programItems" item="item" open="(" close=")" separator=",">
             #{item.orgId}

+ 18 - 6
sms_water/src/main/java/com/huaxu/async/CheckDeviceStateAsync.java

@@ -1,16 +1,12 @@
 package com.huaxu.async;
 
-import com.alibaba.fastjson.JSONArray;
-import com.huaxu.dao.AlarmDetailMapper;
-import com.huaxu.dto.AlarmDetailsDto;
+import com.huaxu.client.OperationManagerClient;
 import com.huaxu.service.AlarmDetailsService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.InitializingBean;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import javax.annotation.Resource;
-
 /**
  * @description 在初始化完成后启动一个线程
  * @auto wangli
@@ -23,7 +19,6 @@ public class CheckDeviceStateAsync implements InitializingBean {
     @Autowired
     private AlarmDetailsService alarmDetailsService;
 
-
     @Override
     public void afterPropertiesSet() {
         new Thread(() -> {
@@ -42,5 +37,22 @@ public class CheckDeviceStateAsync implements InitializingBean {
                 }
             }
         }).start();
+        //报警信息生产工单信息
+        new Thread(() -> {
+            while (true) {
+                try {
+                    alarmDetailsService.saveWorkOrderManageInfo();
+                } catch (Exception e){
+                    e.printStackTrace();
+                    log.error("报警生成工单信息异常:{}",e.getMessage());
+                }
+                try {
+                    Thread.sleep(60000);
+                } catch (InterruptedException e) {
+                    e.printStackTrace();
+                    log.error(e.getMessage());
+                }
+            }
+        }).start();
     }
 }

+ 27 - 0
sms_water/src/main/java/com/huaxu/client/OperationManagerClient.java

@@ -0,0 +1,27 @@
+package com.huaxu.client;
+
+import com.huaxu.config.FeignConfig;
+import com.huaxu.dto.WorkOrderManageByAlarmDto;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+
+import java.util.List;
+
+/**
+ * @description 服务调用(运维管理)
+ * @auto wangli
+ * @data 2021/1/15 10:57
+ */
+@FeignClient(value = "operation-manager",configuration={FeignConfig.class})
+public interface OperationManagerClient {
+
+    /**
+     * 报警信息生产工单信息
+     * @param workOrderManages
+     * @return
+     */
+    @PostMapping("/order/workOrderManage/saveByAlarms")
+    Integer saveByAlarms(List<WorkOrderManageByAlarmDto> workOrderManages);
+
+
+}

+ 3 - 0
sms_water/src/main/java/com/huaxu/client/UserCenterClient.java

@@ -6,6 +6,7 @@ import com.huaxu.entity.Org;
 import com.huaxu.model.AjaxMessage;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 
 import java.util.List;
 
@@ -27,4 +28,6 @@ public interface UserCenterClient {
     @PostMapping("/org/getAllByTenantId")
     List<Org> getAllByTenantId();
 
+    @PostMapping("/user/findUserIdsByPermissonOrg")
+    List<Integer> findUserIdsByPermissonOrg(@RequestParam("tenantId")String tenantId, @RequestParam("companyOrgId")Integer companyOrgId, @RequestParam("deptOrgId")Integer deptOrgId);
 }

+ 6 - 2
sms_water/src/main/java/com/huaxu/config/FeignConfig.java

@@ -19,7 +19,11 @@ public class FeignConfig implements RequestInterceptor {
     @Override
     public void apply(RequestTemplate requestTemplate) {
         ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
-        HttpServletRequest request = attributes.getRequest();
-        requestTemplate.header(HttpHeaders.AUTHORIZATION, request.getHeader(HttpHeaders.AUTHORIZATION));
+        if(attributes != null){
+            HttpServletRequest request = attributes.getRequest();
+            if(request != null){
+                requestTemplate.header(HttpHeaders.AUTHORIZATION, request.getHeader(HttpHeaders.AUTHORIZATION));
+            }
+        }
     }
 }

+ 4 - 4
sms_water/src/main/java/com/huaxu/dao/AlarmDetailMapper.java

@@ -1,10 +1,7 @@
 package com.huaxu.dao;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.huaxu.dto.AlarmDetailsDto;
-import com.huaxu.dto.AlarmDetailsHistoryDto;
-import com.huaxu.dto.AlarmDetailsRealTimeDto;
-import com.huaxu.dto.DeviceCheckAlarmDto;
+import com.huaxu.dto.*;
 import com.huaxu.entity.AlarmDetailsEntity;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -131,4 +128,7 @@ public interface AlarmDetailMapper {
 
     Integer udpateLastUpdateTime(@Param("deviceId") Integer deviceId, @Param("lastUpdateTime") Date lastUpdateTime);
 
+    List<DeviceAlarmInfoForOrder> getAlarmInfoForWorkOrderManage();
+
+    Integer updateAlarmSendMessageState(List<DeviceAlarmInfoForOrder> list);
 }

+ 2 - 0
sms_water/src/main/java/com/huaxu/dao/DeviceParmMapper.java

@@ -81,4 +81,6 @@ public interface DeviceParmMapper  {
     List<DeviceParmEntity> selectDeviceBySceneIdAndType(@Param("info") DeviceParmEntity deviceParmEntity);
 
     List<ParmTypeCountDto> findAlarmCount(@Param("info") DeviceParmEntity deviceParmEntity);
+
+    List<ParmTypeCountDto> findAlarmTotalCount(@Param("info") DeviceParmEntity deviceParmEntity);
 }

+ 58 - 0
sms_water/src/main/java/com/huaxu/dto/DeviceAlarmInfoForOrder.java

@@ -0,0 +1,58 @@
+package com.huaxu.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@ApiModel(value = "报警信息")
+@Data
+public class DeviceAlarmInfoForOrder implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "报警id")
+    private Long alarmId;
+
+    @ApiModelProperty(value = "场景名称")
+    private String sceneName;
+
+    @ApiModelProperty(value = "报警类型:状态报警,参数报警")
+    private String alarmType;
+
+    @ApiModelProperty(value = "设备名称")
+    private String deviceName;
+
+    @ApiModelProperty(value = "属性名称")
+    private String attributeName;
+
+    @ApiModelProperty(value = "单位")
+    private String unit;
+
+    @ApiModelProperty(value = "设备id")
+    private Long deviceId;
+
+
+    @ApiModelProperty(value = "租户id")
+    private String tenantId;
+
+    @ApiModelProperty(value = "公司机构id")
+    private String companyOrgId;
+
+    @ApiModelProperty(value = "部门机构id")
+    private String departmentOrgId;
+
+    @ApiModelProperty(value = "地址")
+    private String address;
+
+    @ApiModelProperty(value = "报警时间")
+    private String orderTime;
+
+    @ApiModelProperty(value = "工单描述")
+    private String taskDesc;
+
+    @ApiModelProperty(value = "经纬度")
+    private String geo;
+
+}

+ 1 - 0
sms_water/src/main/java/com/huaxu/dto/DeviceCheckAlarmDto.java

@@ -31,6 +31,7 @@ public class DeviceCheckAlarmDto {
     private String deviceName;//设备名称
     private Integer companyOrgId;//公司id
     private Integer deptOrgId;//部门id
+    private String address;//地址
     private String alarmType;//报警类型
     private Integer attributeId;//设备属性
     private Date lastUpdateTime;//上次上报时间

+ 1 - 0
sms_water/src/main/java/com/huaxu/dto/ParmTypeCountDto.java

@@ -5,6 +5,7 @@ import lombok.Data;
 @Data
 public class ParmTypeCountDto {
     private Integer parmType;
+    private Long deviceId;
     private Integer totalCount;
     private Integer nbnormalCount;
 }

+ 42 - 0
sms_water/src/main/java/com/huaxu/dto/WorkOrderManageByAlarmDto.java

@@ -0,0 +1,42 @@
+package com.huaxu.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@ApiModel(value = "报警信息生成的工单信息")
+@Data
+public class WorkOrderManageByAlarmDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "报警信息id")
+    private Long id;
+
+    @ApiModelProperty(value = "租户id")
+    private String tenantId;
+
+    @ApiModelProperty(value = "工单描述")
+    private String taskDesc;
+
+    @ApiModelProperty(value = "工单编号")
+    private String taskNo;
+
+    @ApiModelProperty(value = "地址")
+    private String address;
+
+    @ApiModelProperty(value = "报警时间")
+    private String orderTime;
+
+    @ApiModelProperty(value = "公司机构id")
+    private String companyOrgId;
+
+    @ApiModelProperty(value = "部门机构id")
+    private String departmentOrgId;
+
+    @ApiModelProperty(value = "经纬度")
+    private String geo;
+
+}

+ 33 - 0
sms_water/src/main/java/com/huaxu/rabbitmq/ReceiveData.java

@@ -7,15 +7,18 @@ package com.huaxu.rabbitmq;
  */
 
 import com.alibaba.fastjson.JSONObject;
+import com.huaxu.client.UserCenterClient;
 import com.huaxu.common.CalcUtil;
 import com.huaxu.common.StringUtils;
 import com.huaxu.dao.AlarmDetailMapper;
 import com.huaxu.dto.AlarmDetailsDto;
 import com.huaxu.dto.DeviceCheckAlarmDto;
 import com.huaxu.entity.AlarmDetailsEntity;
+import com.huaxu.entity.Message;
 import com.huaxu.entity.MonitorDataEntity;
 import com.huaxu.entity.MonitorDataValueEntity;
 import com.huaxu.service.MonitorDataService;
+import com.huaxu.util.MessageSendUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.exception.ExceptionUtils;
 import org.springframework.amqp.core.AmqpTemplate;
@@ -43,6 +46,11 @@ public class ReceiveData {
     @Resource
     private AlarmDetailMapper alarmDetailMapper;
 
+    @Autowired
+    private UserCenterClient userCenterClient;
+    @Autowired
+    private MessageSendUtil messageSendUtil;
+
     @Value("${spring.rabbitmq.listener.queue}")
     private   String rabbitmqQueue;
 
@@ -180,6 +188,31 @@ public class ReceiveData {
                            alarmDetailsEntity.setDateUpdate(new Date());
                            alarmDetailsEntity.setCreateBy("system");
                            alarmDetailsEntity.setUpdateBy("system");
+
+                           Message message=new Message();
+                           message.setStatus(1);
+                           message.setCreateBy("system");
+                           message.setTenantId(deviceCheckAlarmDto.getTenantId());
+                           message.setMessageId(UUID.randomUUID().toString());
+                           JSONObject jsonContent = new JSONObject();
+                           //${场景名称}${设备名称}【${报警字段}】异常报警
+                           jsonContent.put("场景名称",deviceCheckAlarmDto.getSceneName());
+                           jsonContent.put("设备名称",deviceCheckAlarmDto.getDeviceName());
+                           jsonContent.put("报警字段",deviceCheckAlarmDto.getAttributeName());
+                           message.setMessageContent(jsonObject.toJSONString());  //消息内容,如果需要动态使用,配合模板使用{key:value}
+                           message.setMessageType(1); //消息类型
+                           message.setMessageTemplateId(1);   //模板id
+                           message.setChannel(0);   //渠道
+                           Integer companyOrgId = deviceCheckAlarmDto.getCompanyOrgId();
+                           Integer departmentOrgId = deviceCheckAlarmDto.getDeptOrgId();
+                           List<Integer> taskUsers = userCenterClient.findUserIdsByPermissonOrg(deviceCheckAlarmDto.getTenantId(),companyOrgId,departmentOrgId);
+                           if(taskUsers!=null){
+                               taskUsers.forEach(id->{
+                                   message.setUserId(id);
+                                   messageSendUtil.send(message);
+                               });
+                           }
+
                            insert.add(alarmDetailsEntity);
                        }
                    }

+ 5 - 0
sms_water/src/main/java/com/huaxu/service/AlarmDetailsService.java

@@ -110,4 +110,9 @@ public interface AlarmDetailsService {
      * 验证设备离线状态
      */
     void checkStateAlarm();
+
+    /**
+     * 报警信息生成工单信息
+     */
+    void saveWorkOrderManageInfo();
 }

+ 2 - 0
sms_water/src/main/java/com/huaxu/service/DeviceParmService.java

@@ -89,4 +89,6 @@ public interface DeviceParmService {
     List<DeviceParmEntity> selectDeviceBySceneIdAndType(DeviceParmEntity deviceParmEntity);
 
     List<ParmTypeCountDto> findAlarmCount(DeviceParmEntity deviceParmEntity);
+
+    List<ParmTypeCountDto> findAlarmTotalCount(DeviceParmEntity deviceParmEntity);
 }

+ 11 - 11
sms_water/src/main/java/com/huaxu/service/SecSupplyService.java

@@ -111,9 +111,8 @@ public class SecSupplyService {
         //本日供水量
         deviceParmEntity.setParmType(3);//查询供水量
         List<DeviceParmEntity> deviceParms = deviceParmService.selectDeviceBySceneIdAndType(deviceParmEntity);
-        //瞬时流量
         double dayAmount = 0d;
-        for (DeviceParmEntity item : deviceParmEntities) {
+        for (DeviceParmEntity item : deviceParms) {
             //取缓存里的数据
             byte[] bytes = redisUtil.get(("sms_water_" + item.getDeviceCode()).getBytes());
             if (bytes != null && bytes.length > 0) {
@@ -125,6 +124,7 @@ public class SecSupplyService {
                     map.put(dateValue.getAttributeId(), dateValue);
                 }
                 if (map.containsKey(item.getAttributeId().longValue())) {
+
                     DayReportEntity dayReportEntity = new DayReportEntity();
                     dayReportEntity.setYear(begin.get(Calendar.YEAR));
                     dayReportEntity.setMonth(begin.get(Calendar.MONTH) + 1);
@@ -134,6 +134,7 @@ public class SecSupplyService {
                     List<DayReportEntity> dayReportEntities = dayReportService.findDeviceLastDayValue(dayReportEntity);
                     if (dayReportEntities.size() > 0) {
                         dayAmount += map.get(item.getAttributeId().longValue()).getDataValue();
+                        System.out.println("item.getAttributeId()"+item.getAttributeId()+"--"+map.get(item.getAttributeId().longValue()));
                         dayAmount = dayAmount - dayReportEntities.get(0).getLatestValue();
                     }
                 }
@@ -190,12 +191,12 @@ public class SecSupplyService {
         DeviceParmEntity deviceParmEntity = new DeviceParmEntity();
         deviceParmEntity.setSceneEntities(sceneEntities);
         List<ParmTypeCountDto> list = deviceParmService.findAlarmCount(deviceParmEntity);
-        //余氯11 浊度9  PH7  cod 15
+        //余氯11 浊度9  PH8  cod 15   15,8,9,11,18,19
         for(ParmTypeCountDto item : list)
         {
             switch(item.getParmType())
             {
-                case 7:
+                case 8:
                     WaterPieStateDto waterPieStateDto1 = new WaterPieStateDto();
                     waterPieStateDto1.setNormalCount(item.getTotalCount()- item.getNbnormalCount());
                     waterPieStateDto1.setNbnormalCount(item.getNbnormalCount());
@@ -218,15 +219,14 @@ public class SecSupplyService {
                     waterPieStateDto3.setPercentage((double) (Math.round((Double.valueOf(item.getTotalCount()- item.getNbnormalCount())/Double.valueOf(item.getTotalCount()))*100)));
                     waterPieDto.setResidualChlorine(waterPieStateDto3);
                     break;
-                case 15:
-                    WaterPieStateDto waterPieStateDto4 = new WaterPieStateDto();
-                    waterPieStateDto4.setNormalCount(item.getTotalCount()- item.getNbnormalCount());
-                    waterPieStateDto4.setNbnormalCount(item.getNbnormalCount());
-                    waterPieStateDto4.setPercentage((double) (Math.round((Double.valueOf(item.getTotalCount()- item.getNbnormalCount())/Double.valueOf(item.getTotalCount()))*100)));
-                    waterPieDto.setWaterQuality(waterPieStateDto4);
-                    break;
             }
         }
+        List<ParmTypeCountDto> listTotal = deviceParmService.findAlarmTotalCount(deviceParmEntity);
+        WaterPieStateDto waterPieStateDto4 = new WaterPieStateDto();
+        waterPieStateDto4.setNormalCount(listTotal.get(0).getTotalCount()- listTotal.get(0).getNbnormalCount());
+        waterPieStateDto4.setNbnormalCount(listTotal.get(0).getNbnormalCount());
+        waterPieStateDto4.setPercentage((double) (Math.round((Double.valueOf(listTotal.get(0).getTotalCount()- listTotal.get(0).getNbnormalCount())/Double.valueOf(listTotal.get(0).getTotalCount()))*100)));
+        waterPieDto.setWaterQuality(waterPieStateDto4);
         return waterPieDto;
     }
 }

+ 109 - 7
sms_water/src/main/java/com/huaxu/service/impl/AlarmDetailsServiceImpl.java

@@ -1,21 +1,24 @@
 package com.huaxu.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.huaxu.client.OperationManagerClient;
+import com.huaxu.client.UserCenterClient;
 import com.huaxu.dao.AlarmDetailMapper;
-import com.huaxu.dto.AlarmDetailsDto;
-import com.huaxu.dto.AlarmDetailsHistoryDto;
-import com.huaxu.dto.AlarmDetailsRealTimeDto;
-import com.huaxu.dto.DeviceCheckAlarmDto;
+import com.huaxu.dto.*;
 import com.huaxu.entity.AlarmDetailsEntity;
+import com.huaxu.entity.Message;
 import com.huaxu.model.LoginUser;
 import com.huaxu.service.AlarmDetailsService;
+import com.huaxu.util.DatesUtil;
+import com.huaxu.util.MessageSendUtil;
 import com.huaxu.util.UserUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -28,6 +31,12 @@ public class AlarmDetailsServiceImpl implements AlarmDetailsService {
 
     @Resource
     private AlarmDetailMapper alarmDetailMapper;
+    @Autowired
+    private OperationManagerClient operationManagerClient;
+    @Autowired
+    private UserCenterClient userCenterClient;
+    @Autowired
+    private MessageSendUtil messageSendUtil;
 
     @Override
     public AlarmDetailsDto selectById(Integer id) {
@@ -179,6 +188,32 @@ public class AlarmDetailsServiceImpl implements AlarmDetailsService {
                     alarmDetailsEntity.setDeviceId(d.getDeviceId());
                     alarmDetailsEntity.setTenantId(d.getTenantId());
                     alarmDetailsEntity.setAlarmSettingId(d.getAlarmSettingId());
+
+                    Message message=new Message();
+                    message.setStatus(1);
+                    message.setCreateBy("system");
+                    message.setTenantId(d.getTenantId());
+                    message.setMessageId(UUID.randomUUID().toString());
+                    JSONObject jsonObject = new JSONObject();
+                    //${场景名称}${设备名称}${状态}${报警规则}【${数值单位}】
+                    jsonObject.put("场景名称",d.getSceneName());
+                    jsonObject.put("设备名称",d.getDeviceName());
+                    jsonObject.put("状态","离线");
+                    jsonObject.put("报警规则",d.getAlarmCondition() +d.getAlarmValue());
+                    jsonObject.put("数值单位","分钟");
+                    message.setMessageContent(jsonObject.toJSONString());  //消息内容,如果需要动态使用,配合模板使用{key:value}
+                    message.setMessageType(2); //消息类型
+                    message.setMessageTemplateId(2);   //模板id
+                    message.setChannel(0);   //渠道
+                    Integer companyOrgId = d.getCompanyOrgId();
+                    Integer departmentOrgId = d.getDeptOrgId();
+                    List<Integer> taskUsers = userCenterClient.findUserIdsByPermissonOrg(d.getTenantId(),companyOrgId,departmentOrgId);
+                    if(taskUsers!=null){
+                        taskUsers.forEach(id->{
+                            message.setUserId(id);
+                            messageSendUtil.send(message);
+                        });
+                    }
                     return alarmDetailsEntity;
                 })
                 .collect(Collectors.toList());
@@ -213,4 +248,71 @@ public class AlarmDetailsServiceImpl implements AlarmDetailsService {
         }
     }
 
+   public void saveWorkOrderManageInfo(){
+       List<DeviceAlarmInfoForOrder> deviceAlarmInfoForOrders = alarmDetailMapper.getAlarmInfoForWorkOrderManage();
+       if(deviceAlarmInfoForOrders.size()>0){
+           List<WorkOrderManageByAlarmDto> workOrderManageByAlarms = new ArrayList<>();
+           List<DeviceAlarmInfoForOrder> errData= new ArrayList<>();
+
+           //组合工单,并发送消息
+           for(DeviceAlarmInfoForOrder deviceAlarmInfoForOrder : deviceAlarmInfoForOrders){
+               WorkOrderManageByAlarmDto workOrderManageByAlarm = new WorkOrderManageByAlarmDto();
+               workOrderManageByAlarm.setTaskNo(DatesUtil.formatDate(new Date(),"yyyyMMddHHmmssSSS")+((int) (Math.random()*(9999-1000)+1000)));
+               workOrderManageByAlarm.setTenantId(deviceAlarmInfoForOrder.getTenantId());
+               workOrderManageByAlarm.setCompanyOrgId(deviceAlarmInfoForOrder.getCompanyOrgId());
+               workOrderManageByAlarm.setDepartmentOrgId(deviceAlarmInfoForOrder.getDepartmentOrgId());
+               workOrderManageByAlarm.setAddress(deviceAlarmInfoForOrder.getAddress());
+               workOrderManageByAlarm.setGeo(deviceAlarmInfoForOrder.getGeo());
+               workOrderManageByAlarm.setOrderTime(deviceAlarmInfoForOrder.getOrderTime());
+               workOrderManageByAlarm.setTaskDesc(deviceAlarmInfoForOrder.getTaskDesc());
+
+
+               Message message=new Message();
+               message.setStatus(1);
+               message.setCreateBy("system");
+               message.setTenantId(deviceAlarmInfoForOrder.getTenantId());
+               message.setMessageId(UUID.randomUUID().toString());
+               JSONObject jsonObject = new JSONObject();
+               jsonObject.put("工单类型","");
+               jsonObject.put("工单编号",workOrderManageByAlarm.getTaskNo());
+               message.setMessageContent(jsonObject.toJSONString());  //消息内容,如果需要动态使用,配合模板使用{key:value}
+               message.setMessageType(7); //消息类型
+               message.setMessageTemplateId(7);   //模板id
+               message.setChannel(0);   //渠道
+               Integer companyOrgId = null;
+               Integer departmentOrgId = null;
+               if(StringUtils.isNotBlank(workOrderManageByAlarm.getCompanyOrgId())){
+                   companyOrgId=Integer.valueOf(workOrderManageByAlarm.getCompanyOrgId());
+               }
+               if(StringUtils.isNotBlank(workOrderManageByAlarm.getDepartmentOrgId())){
+                   departmentOrgId=Integer.valueOf(workOrderManageByAlarm.getDepartmentOrgId());
+               }
+               try{
+                   List<Integer> taskUsers = userCenterClient.findUserIdsByPermissonOrg(workOrderManageByAlarm.getTenantId(),companyOrgId,departmentOrgId);
+                   if(taskUsers!=null){
+                       taskUsers.forEach(id->{
+                           message.setUserId(id);
+                           messageSendUtil.send(message);
+                       });
+                   }
+                   workOrderManageByAlarms.add(workOrderManageByAlarm);
+               }catch (Exception e){
+                   e.printStackTrace();
+                   errData.add(deviceAlarmInfoForOrder);
+               }
+           }
+           //去掉推送失败的数据
+           if(errData.size()>0){
+               deviceAlarmInfoForOrders.removeAll(errData);
+           }
+           //保存工单
+           Integer resut = operationManagerClient.saveByAlarms(workOrderManageByAlarms);
+
+           if(resut > 0) {
+               alarmDetailMapper.updateAlarmSendMessageState(deviceAlarmInfoForOrders);
+           }
+       }
+   }
+
+
 }

+ 6 - 0
sms_water/src/main/java/com/huaxu/service/impl/DeviceParmServiceImpl.java

@@ -14,6 +14,7 @@ import com.huaxu.service.DeviceParmService;
 import com.huaxu.service.DeviceSceneService;
 import com.huaxu.service.SceneService;
 import com.huaxu.util.UserUtil;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -225,4 +226,9 @@ public class DeviceParmServiceImpl  implements DeviceParmService {
     public List<ParmTypeCountDto> findAlarmCount(DeviceParmEntity deviceParmEntity) {
         return deviceParmMapper.findAlarmCount(deviceParmEntity);
     }
+    public List<ParmTypeCountDto> findAlarmTotalCount(DeviceParmEntity deviceParmEntity)
+    {
+        return deviceParmMapper.findAlarmTotalCount(deviceParmEntity);
+    }
+
 }

+ 3 - 1
sms_water/src/main/java/com/huaxu/service/impl/MonitorDataReportServiceImpl.java

@@ -19,6 +19,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import javax.sound.midi.Receiver;
 import java.math.BigDecimal;
 import java.time.Duration;
 import java.time.LocalDate;
@@ -579,6 +580,7 @@ public class MonitorDataReportServiceImpl implements MonitorDataReportService {
                 deviceWaterSupplies.get(i).setDate(newLocalDate);
             }
         }
+        deviceWaterSupplies.sort(Comparator.comparing(DeviceWaterSupply::getOrderNo).reversed());
         return deviceWaterSupplies;
     }
 
@@ -901,7 +903,7 @@ public class MonitorDataReportServiceImpl implements MonitorDataReportService {
                 waterSupplyCharts.add(i,new WaterSupplyChart(i+1));
             }
         }
-
+        waterSupplyCharts.sort(Comparator.comparing(WaterSupplyChart::getSort).reversed());
         return waterSupplyCharts;
     }
 

+ 2 - 2
sms_water/src/main/java/com/huaxu/service/impl/OnlineMonitorImpl.java

@@ -427,11 +427,11 @@ public class OnlineMonitorImpl implements OnlineMonitorService {
         onlineDataDto.setSceneIds(monitorDataCollectDto.getSceneIds());
         List<DeviceCountStatsDto> pres=statsDeviceQualified(onlineDataDto);
         result.setPresQualifiedRate(pres.size()>0&&pres.get(0).getTotalCount()!=0&&pres.get(0).getParmQualified().size()>0?
-                (double)pres.get(0).getParmQualified().get(0).getNormalCount()/pres.get(0).getTotalCount()*100:null);
+                (double)pres.get(0).getParmQualified().get(0).getNormalCount()/pres.get(0).getTotalCount()*100:100);
 
         onlineDataDto.setSceneTypeName("水质");
         List<DeviceCountStatsDto> water=statsDeviceQualified(onlineDataDto);
-        result.setWaterQualifiedRate(water.size()>0&&water.get(0).getTotalCount()!=0?(double)water.get(0).getNormalCount()/water.get(0).getTotalCount()*100:null);
+        result.setWaterQualifiedRate(water.size()>0&&water.get(0).getTotalCount()!=0?(double)water.get(0).getNormalCount()/water.get(0).getTotalCount()*100:100);
 
         return result;
     }

+ 19 - 4
sms_water/src/main/resources/application-dev.properties

@@ -73,16 +73,31 @@ spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
 SMS.sys_config_path=/UMIS_SMS_IMAGES/
 SMS.sys_excel_path=/UMIS_SMS_EXCEL/
 
+#请求处理的超时时间
+ribbon.ReadTimeout: 30000
+#请求连接的超时时间
+ribbon.ConnectTimeout: 30000
+
 ##rabbitmq
-#spring.rabbitmq.host=114.135.61.188
-#spring.rabbitmq.port=55672
-spring.rabbitmq.host=47.112.217.10
-spring.rabbitmq.port=5672
+spring.rabbitmq.host=114.135.61.188
+spring.rabbitmq.port=55672
+#spring.rabbitmq.host=47.112.217.10
+#spring.rabbitmq.port=5672
 spring.rabbitmq.username=huaxu
 spring.rabbitmq.password=huaxu123
 spring.rabbitmq.virtual-host=/
 spring.rabbitmq.listener.queue=new_hx_queue
 spring.rabbitmq.listener.simple.acknowledge-mode = NONE
+
+#spring.rabbitmq.host=127.0.0.1
+#spring.rabbitmq.port=5672
+#spring.rabbitmq.username=guest
+#spring.rabbitmq.password=guest
+#spring.rabbitmq.virtual-host=/
+#spring.rabbitmq.listener.queue=new_test_queues
+#spring.rabbitmq.listener.simple.acknowledge-mode = NONE
+
+
 #http
 http_pool.max_total=200
 http_pool.default_max_per_route=100

+ 36 - 1
sms_water/src/main/resources/mapper/AlarmDetailMapper.xml

@@ -603,7 +603,7 @@
             ,d.DEVICE_NAME as "deviceName"
             ,d.COMPANY_ORG_ID as "companyOrgId"
             ,d.DEPT_ORG_ID as "deptOrgId"
-
+            ,d.address as "address"
             ,a.PARENT_SCENE_ID as "parentSceneId"
             ,a.PARENT_SCENE_NAME as "parentSceneName"
             ,a.SCENE_ID as "sceneId"
@@ -673,4 +673,39 @@
         where a.`STATUS` = 1
         and a.DEVICE_ID=#{deviceId} and a.state=1
     </select>
+
+    <select id="getAlarmInfoForWorkOrderManage" resultType="com.huaxu.dto.DeviceAlarmInfoForOrder">
+        select
+            ad.id as "alarmId"
+
+            ,ad.SCENE_NAME as "sceneName"
+            ,ad.ALARM_TYPE as "alarmType"
+            ,d.DEVICE_NAME as "deviceName"
+            ,da.NAME as "attributeName"
+            ,CONCAT(ast.ALARM_CONDITION,ast.ALARM_VALUE) as "alarmContent"
+            ,da.UNIT as "unit"
+
+            ,d.id as "deviceId"
+            ,d.TENANT_ID as "tenantId"
+            ,d.COMPANY_ORG_ID as "companyOrgId"
+            ,d.DEPT_ORG_ID as "departmentOrgId"
+            ,d.ADDRESS as "address"
+            ,DATE_FORMAT(ad.ALARM_START_TIME, '%Y-%m-%d %H:%i:%s') as "orderTime"
+            ,ad.ALARM_CONTENT as "taskDesc"
+            ,CONCAT(d.POINT_X,',',d.POINT_Y) as "geo"
+        from sms_alarm_details ad
+        left join sms_device d on ad.DEVICE_ID =d.ID
+        left join sms_device_attribute da on ad.ATTRIBUTE_ID =da.id
+        left join sms_alarm_setting ast on ast.id=ad.ALARM_SETTING_ID
+        where  ad.OP_STATE=1 and ad.STATE=1 and ad.is_send_message = 0 and d.status = 1 and d.ENABLE_STATE = 1
+        and timestampdiff(MINUTE,ad.ALARM_START_TIME,now())>10
+    </select>
+
+    <update id="updateAlarmSendMessageState" >
+        update sms_alarm_details set is_send_message =1
+        where id in
+        <foreach collection="list" item="item" open="(" close=")" separator=",">
+            #{item.alarmId}
+        </foreach>
+    </update>
 </mapper>

+ 20 - 5
sms_water/src/main/resources/mapper/DeviceParmMapper.xml

@@ -158,9 +158,7 @@
             <if test="isArtwork != null ">
                 IS_ARTWORK = #{isArtwork},
             </if>
-            <if test="remark != null and remark != '' ">
-                REMARK = #{remark},
-            </if>
+            REMARK = #{remark},
             parm_type = #{parmType},
             <if test="seq != null and seq != '' ">
                 SEQ = #{seq},
@@ -245,7 +243,7 @@
         select  a.DEVICE_ID as "deviceId",b.DEVICE_CODE as "deviceCode",a.ATTRIBUTE_ID  as "attributeId"
         from sms_device_parm a
         inner join sms_device b on a.DEVICE_ID=b.id
-        where a.PARM_TYPE=#{info.parmType}
+        where a.PARM_TYPE=#{info.parmType} and b.`STATUS`=1 and a.`STATUS`=1
         and a.PARENT_SCENE_ID in
         <foreach collection="info.sceneEntities" item="dramaId" open="(" close=")" separator=",">
             #{dramaId.id}
@@ -255,7 +253,7 @@
         select b.PARM_TYPE as "parmType",count(a.DEVICE_ID) as "totalCount",count(c.id) as "nbnormalCount"
         from sms_device_scene a
         INNER JOIN sms_device_parm b on a.DEVICE_ID=b.DEVICE_ID
-               and a.PARENT_SCENE_ID=b.PARENT_SCENE_ID and b.PARM_TYPE in (7,9,11,15)
+               and a.PARENT_SCENE_ID=b.PARENT_SCENE_ID and b.PARM_TYPE in (15,8,9,11,18,19) and b.`STATUS`=1
         LEFT JOIN  sms_alarm_details c on c.PARENT_SCENE_ID=b.PARENT_SCENE_ID
                and c.ATTRIBUTE_ID=b.ATTRIBUTE_ID and c.STATE=1
         where a.PARENT_SCENE_ID in
@@ -266,4 +264,21 @@
         a.`STATUS`=1
         group by b.PARM_TYPE
     </select>
+    <select id="findAlarmTotalCount" resultType="com.huaxu.dto.ParmTypeCountDto">
+        select count(1) as "totalCount" ,sum(tab.nbnormalCount) as "nbnormalCount" from(
+        select a.PARENT_SCENE_ID,a.DEVICE_ID as "deviceId",case when count(c.id)>0 then 1 else 0 end  as "nbnormalCount"
+        from sms_device_scene a
+        INNER JOIN sms_device_parm b on a.DEVICE_ID=b.DEVICE_ID
+        and a.PARENT_SCENE_ID=b.PARENT_SCENE_ID and b.PARM_TYPE in (15,8,9,11,18,19) and b.`STATUS`=1
+        LEFT JOIN  sms_alarm_details c on c.PARENT_SCENE_ID=b.PARENT_SCENE_ID
+        and c.ATTRIBUTE_ID=b.ATTRIBUTE_ID and c.STATE=1
+        where a.PARENT_SCENE_ID in
+        <foreach collection="info.sceneEntities" item="dramaId" open="(" close=")" separator=",">
+            #{dramaId.id}
+        </foreach>
+        and
+        a.`STATUS`=1
+        group by a.PARENT_SCENE_ID,a.DEVICE_ID
+        ) as tab
+    </select>
 </mapper>

+ 3 - 3
sms_water/src/main/resources/mapper/MonitorDataReportMapper.xml

@@ -632,7 +632,7 @@
     left join sms_scene s on s.SCENE_TYPE_ID =st.id
     left join sms_device_scene ds on ds.SCENE_ID=s.ID
     left join sms_device d on d.id=ds.DEVICE_ID
-    where st.SCENE_TYPE_NAME=#{sceneTypeName} and d.`STATUS`= 1 and  d.ENABLE_STATE = 1
+    where st.SCENE_TYPE_NAME=#{sceneTypeName} and d.`STATUS`= 1 and  d.ENABLE_STATE = 1 and  ds.status=1
     <if test="tenantId != null and tenantId != '' ">
         and d.tenant_id = #{tenantId}
     </if>
@@ -881,7 +881,7 @@
 
     <!-- 概览页 -->
     <select id="selectDeviceCode" resultType="java.lang.String">
-        select DEVICE_CODE from sms_device
+        select DEVICE_CODE from sms_device d
         where STATUS =1 and ENABLE_STATE =1  and TENANT_ID=#{tenantId}
         <if test="userType!=null and userType!=-999 and userType!=-9999 and  programItems != null and programItems.size() > 0">
             <if test="permissonType == 5 or permissonType == 2">
@@ -1171,7 +1171,7 @@
 
             where s.`STATUS`=1 and st.SCENE_TYPE_NAME = '水厂' and s.TENANT_ID =#{tenantId}
             <if test="parmType != null and  parmType == -1">
-                and dp.PARM_TYPE in (15,7,9,11,18,19)
+                and dp.PARM_TYPE in (15,8,9,11,18,19)
             </if>
             <if test="parmType != null and  parmType != -1">
                 and dp.PARM_TYPE = #{parmType}

+ 1 - 1
sms_water/src/main/resources/mapper/MonitorInfoMapper.xml

@@ -49,7 +49,7 @@
      </sql>
     <sql id="leftJoins">
           LEFT JOIN sms_device b on a.DEVICE_ID=b.ID
-          left join sms_device_parm d on d.DEVICE_ID=a.DEVICE_ID and d.ATTRIBUTE_ID = a.ATTRIBUTE_ID and  d.`STATUS`=1
+          left join sms_device_parm d on a.SCENE_ID=d.SCENE_ID and d.DEVICE_ID=a.DEVICE_ID and d.ATTRIBUTE_ID = a.ATTRIBUTE_ID and  d.`STATUS`=1
     </sql>
     <!--  根据主键获取实体   -->
     <select id="findMonitorInfoById" resultType="com.huaxu.entity.MonitorInfoEntity">

+ 12 - 0
sms_water/src/main/resources/mapper/MonthReportMapper.xml

@@ -270,6 +270,18 @@
         select sum(a.LATEST_VALUE) as "latestValue"
         from sms_month_report a
         inner join sms_device_parm b on a.DEVICE_ID=b.DEVICE_ID and b.ATTRIBUTE_ID=a.ATTRIBUTE_ID and b.`STATUS`=1
+        inner join (
+        select max(a.`DAY`) as day,a.DEVICE_ID
+        from sms_month_report a
+        inner join sms_device_parm b on a.DEVICE_ID=b.DEVICE_ID and b.ATTRIBUTE_ID=a.ATTRIBUTE_ID and b.`STATUS`=1
+        where  b.PARM_TYPE=3 and b.PARENT_SCENE_ID in
+        <foreach collection="monthReport.parentSceneLists" item="dramaId" open="(" close=")" separator=",">
+            #{dramaId.id}
+        </foreach>
+        <if test="monthReport.year != null ">and a.year = #{monthReport.year}</if>
+        <if test="monthReport.month != null ">and a.month = #{monthReport.month}</if>
+        GROUP BY a.DEVICE_ID
+        )as tab on tab.DEVICE_ID=a.DEVICE_ID and a.`DAY`=tab.`day`
         where  b.PARM_TYPE=3 and b.PARENT_SCENE_ID in
         <foreach collection="monthReport.parentSceneLists" item="dramaId" open="(" close=")" separator=",">
             #{dramaId.id}

+ 10 - 7
sms_water/src/main/resources/mapper/OnlineMonitorMapper.xml

@@ -307,10 +307,13 @@
     </select>
     <!--按管网名称分类查询设备数量-->
     <select id="selectDeviceCount" resultType="java.util.Map">
-        select  t1.id sceneId,t1.scene_name sceneName,sum(if(t5.id is null,0,1)) deviceCount
+        select  t1.id sceneId,t1.scene_name sceneName,sum(if(t5.id is null,0,1)) deviceCount,sum(if(t7.device_id is null,0,1)) alarmCount
         from sms_scene t1
-        <include refid="deviceLeftJoins"/>
-        where t1.parent_scene_id = 0 and t1. status = 1 and t1. enable_state = 1 and t3.scene_type_name = '管网'
+        <include refid="deviceInnerJoins"/>
+        left join(
+            select a1.scene_id, a1.device_id from sms_alarm_details a1 where a1.`status` = 1 and a1.state = 1 group by a1.scene_id, a1.device_id
+        )t7 on t7.scene_id=t2.scene_id and t7.device_id=t2.device_id
+        where t1.parent_scene_id = 0 and t1. status = 1 and t1. enable_state = 1 and t3.scene_type_name = '管网' and t5.scene_type_name = #{sceneTypeName}
         <if test="sceneIds != null and sceneIds.size() > 0">
             and t1.id  in
             <foreach collection="sceneIds" item="item" open="(" close=")" separator=",">
@@ -336,7 +339,7 @@
         left join sms_device_parm t2 on t2.device_id=t1.id and t2.is_map=1 and t2.status=1
         left join sms_device_attribute t3 on t2.attribute_id=t3.id and t3.status=1
         left join (
-        select a1.device_id,count(1) alarm_count from sms_alarm_details a1 where a1.device_id= #{deviceId} and a1.`status` = 1 and a1.state = 1
+            select a1.device_id,count(1) alarm_count from sms_alarm_details a1 where a1.device_id= #{deviceId} and a1.`status` = 1 and a1.state = 1
         )t4 on t4.device_id=t1.id
         left join sms_alarm_details t6 on t6.device_id=t1.id and t6.attribute_id=t2.attribute_id and t6.status = 1 and t6.state=1
         where t1. status = 1 and t1. enable_state = 1 and t1.id= #{deviceId}
@@ -348,7 +351,7 @@
         from sms_scene t1
         <include refid="deviceInnerJoins"/>
         left join(
-         select a1.scene_id, a1.device_id from sms_alarm_details a1 where a1.`status` = 1 and a1.state = 1 group by a1.scene_id, a1.device_id
+            select a1.scene_id, a1.device_id from sms_alarm_details a1 where a1.`status` = 1 and a1.state = 1 group by a1.scene_id, a1.device_id
         )t7 on t7.scene_id=t2.scene_id and t7.device_id=t2.device_id
         where t1.parent_scene_id = 0 and t1. status = 1 and t1. enable_state = 1 and t3.scene_type_name = '管网'
         <choose>
@@ -470,7 +473,7 @@
         from sms_scene t1
         <include refid="deviceInnerJoins"/>
         left join(
-        select a1.scene_id, a1.device_id ,count(1) alarm_count from sms_alarm_details a1 where a1.`status` = 1 and a1.state = 1 group by a1.scene_id, a1.device_id
+            select a1.scene_id, a1.device_id ,count(1) alarm_count from sms_alarm_details a1 where a1.`status` = 1 and a1.state = 1 group by a1.scene_id, a1.device_id
         )t7 on t7.scene_id=t2.scene_id and t7.device_id=t2.device_id
         where t1.parent_scene_id = 0 and t1. status = 1 and t1. enable_state = 1 and t3.scene_type_name = '管网' and t5.scene_type_name = #{onlineDataDto.sceneTypeName}
         <if test="onlineDataDto.sceneIds != null and onlineDataDto.sceneIds.size() > 0">
@@ -524,7 +527,7 @@
         from sms_scene t1
         <include refid="sceneDeviceJoins"/>
         inner join sms_month_report t8 on t8.device_id=t2.device_id and t8.attribute_id =t5.attribute_id
-        and t8.year = year(now() + interval-1 day) and t8.month = month(now() + interval-1 day) and t8.day = day(now() + interval-1 day)
+            and t8.year = year(now() + interval-1 day) and t8.month = month(now() + interval-1 day) and t8.day = day(now() + interval-1 day)
         where t1.parent_scene_id = 0 and t1. status = 1 and t5.parm_type in(3) and t3.scene_type_name = '水厂'
         <if test="sceneIds != null and sceneIds.size() > 0">
             and t1.id  in

+ 11 - 0
sms_water/src/main/resources/mapper/YearReportMapper.xml

@@ -254,6 +254,17 @@
         select sum(a.LATEST_VALUE) as "latestValue"
         from sms_year_report a
         inner join sms_device_parm b on a.DEVICE_ID=b.DEVICE_ID and b.ATTRIBUTE_ID=a.ATTRIBUTE_ID and b.`STATUS`=1
+        inner join (
+        select max(a.`month`) as month,a.DEVICE_ID
+        from sms_year_report a
+        inner join sms_device_parm b on a.DEVICE_ID=b.DEVICE_ID and b.ATTRIBUTE_ID=a.ATTRIBUTE_ID and b.`STATUS`=1
+        where  b.PARM_TYPE=3 and b.PARENT_SCENE_ID in
+        <foreach collection="yearReport.parentSceneLists" item="dramaId" open="(" close=")" separator=",">
+            #{dramaId.id}
+        </foreach>
+        <if test="yearReport.year != null ">and a.year = #{yearReport.year}</if>
+        group by  a.DEVICE_ID
+        ) as tab on tab.DEVICE_ID=a.DEVICE_ID and a.`month`=tab.`month`
         where  b.PARM_TYPE=3 and b.PARENT_SCENE_ID in
         <foreach collection="yearReport.parentSceneLists" item="dramaId" open="(" close=")" separator=",">
             #{dramaId.id}

+ 1 - 0
user_center/src/main/java/com/huaxu/config/ResourceServerConfig.java

@@ -17,6 +17,7 @@ public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
                 .and()
                 .authorizeRequests()
                 .antMatchers("/swagger-ui.html","/webjars/**", "/webjars/**", "/swagger-resources/**",
+                       "/user/findUserIdsByPermissonOrg",
                        "/v2/**")
                 .permitAll() //配置不需要身份认证的请求路径
                 .anyRequest().authenticated() //其他所有访问路径都需要身份认证

+ 21 - 6
user_center/src/main/java/com/huaxu/controller/UserController.java

@@ -280,14 +280,29 @@ public class UserController {
     }
     @RequestMapping(value = "/findUserIdsByUserIds", method = RequestMethod.POST)
     @ResponseBody
-    public Map<Long,String> findUserIdsByUserIds(Long[] ids) {
+    public List<UserEntity> findUserIdsByUserIds(Long[] ids) {
         List list = Arrays.asList(ids.clone());
         List<UserEntity> result = userService.findUserIdsByUserIds(list);
-        Map<Long,String> userInfos = new HashMap<>();
-        for(UserEntity item : result)
-        {
-            userInfos.put(item.getId(),item.getUsername());
+        return  result;
+    }
+    @ApiOperation(value = "获取登录用户所属机构及其上级机构用户信息")
+    @RequestMapping(value = "/findUserIdsForOrg", method = RequestMethod.GET)
+    @ResponseBody
+    public List<Long> findUserIdsForOrg() {
+        List<Long> ids = new ArrayList<>();
+        List<UserEntity> result = userService.findUserIdsForOrg();
+        for (UserEntity item : result) {
+            ids.add(item.getId());
         }
-        return  userInfos;
+        return ids;
+    }
+
+    @ApiOperation(value = "查询拥有此机构权限的用户")
+    @RequestMapping(value = "/findUserIdsByPermissonOrg", method = RequestMethod.POST)
+    @ResponseBody
+    public List<Integer> findUserIdsByPermissonOrg(
+            String tenantId,Integer companyOrgId,Integer deptOrgId){
+        return userService.findUserIdsByPermissonOrg(tenantId,companyOrgId,deptOrgId);
     }
+
 }

+ 2 - 0
user_center/src/main/java/com/huaxu/dao/OrgMapper.java

@@ -86,4 +86,6 @@ public interface OrgMapper {
 
     List<OrgTree> selectTrees(Org org);
 
+    List<Org> findOrgByTenant(String tenantId);
+
 }

+ 5 - 1
user_center/src/main/java/com/huaxu/dao/UserMapper.java

@@ -38,5 +38,9 @@ public interface UserMapper extends BaseMapper<UserEntity> {
 
     List<UserEntity> findUserList(@Param("user")UserEntity userEntity);
 
-    /**删除相关方法  使用mybatis-plus集成的 **/
+    List<UserEntity> findUserIdsForOrg(@Param("compayId")Integer compayId, @Param("deptId")Integer deptId);
+
+
+
+    List<Integer> findUserIdsByPermissonOrg(@Param("tenantId")String tenantId, @Param("companyOrgId")Integer companyOrgId, @Param("deptOrgId")Integer deptOrgId ,@Param("companyOrgIds")List<Integer> companyOrgIds,@Param("deptOrgIds")List<Integer> deptOrgIds);
 }

+ 2 - 0
user_center/src/main/java/com/huaxu/entity/UserEntity.java

@@ -8,6 +8,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
 import com.huaxu.model.ProgramItem;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
 import java.beans.Transient;
 import java.io.Serializable;
@@ -21,6 +22,7 @@ import java.util.List;
  */
 @Data
 @TableName("uims_user")
+@NoArgsConstructor
 public class UserEntity implements Serializable {
 
     private static final long serialVersionUID = 1L;

+ 60 - 0
user_center/src/main/java/com/huaxu/service/UserService.java

@@ -3,8 +3,10 @@ package com.huaxu.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.huaxu.common.ToolUtil;
+import com.huaxu.dao.OrgMapper;
 import com.huaxu.dao.UserMapper;
 import com.huaxu.dto.UserListDto;
+import com.huaxu.entity.Org;
 import com.huaxu.entity.UserEntity;
 import com.huaxu.entity.UserRoleEntity;
 import com.huaxu.entity.UserTagEntity;
@@ -39,6 +41,8 @@ public class UserService extends ServiceImpl<UserMapper,UserEntity> {
 	private UserTagService userTagService;
 	@Resource
 	private UserRoleService userRoleService;
+	@Resource
+	private OrgMapper orgMapper;
 	@Autowired
 	private RedisUtil redisUtil;
 
@@ -337,4 +341,60 @@ public class UserService extends ServiceImpl<UserMapper,UserEntity> {
 		}
 		return userEntities;
 	}
+
+    public List<UserEntity> findUserIdsForOrg() {
+		LoginUser currentUser = UserUtil.getCurrentUser();
+		Integer compayId = currentUser.getCompanyId();
+		Integer deptId = currentUser.getDepartmentId();
+		List<UserEntity> list = userMapper.findUserIdsForOrg(compayId,deptId);
+		return list;
+	}
+	public List<Integer> findUserIdsByPermissonOrg(String tenantId,Integer companyOrgId,Integer deptOrgId){
+
+		List<Integer> userIds = new ArrayList<>();
+
+		//1是公司,2是公司及以下,3部门,4部门及以下,5自定义
+		if(companyOrgId == null){
+			return userIds;
+		}
+		//查询租户下所有公司部门
+		List<Org> orgs = orgMapper.findOrgByTenant(tenantId);
+		Map<Integer ,Org> orgMap = orgs.stream().collect(Collectors.toMap(Org::getId, a -> a, (k1, k2) -> k1));
+
+		List<Integer> companyOrgIds = new ArrayList<>();
+		List<Integer> deptOrgIds = new ArrayList<>();
+		Integer deptOrgParentId =deptOrgId;
+		if(deptOrgId != null){
+			//权限类型为4部门及以下
+			while(true){
+				Org org = orgMap.get(deptOrgParentId);
+				if(org == null ){
+					break;
+				}
+				if(org.getOrgType().equals("company") ){
+					break;
+				}
+				deptOrgIds.add(deptOrgParentId);
+				deptOrgParentId = org.getParentOrgId();
+			}
+		}
+		//权限类型为2是公司及以下
+		Integer companyOrgParentId = companyOrgId ;
+		while(true){
+			Org org = orgMap.get(companyOrgParentId);
+			if(org == null ){
+				break;
+			}
+			companyOrgIds.add(companyOrgParentId);
+			companyOrgParentId = org.getParentOrgId();
+			if(org.getParentOrgId() == 0){
+				break;
+			}
+		}
+		//查询客户id
+		if(companyOrgId != null && companyOrgIds.size() > 0){
+			userIds = userMapper.findUserIdsByPermissonOrg(tenantId,companyOrgId,deptOrgId,companyOrgIds,deptOrgIds);
+		}
+		return userIds;
+	}
 }

+ 10 - 0
user_center/src/main/resources/mapper/OrgMapper.xml

@@ -282,4 +282,14 @@
                          LEFT JOIN uims_org c ON (a.id=c.PARENT_ORG_ID and c.status=1)
         where a.id=#{id}  limit 1
     </select>
+
+    <select id="findOrgByTenant" resultType="com.huaxu.entity.Org">
+
+        select
+            id as "id",
+            PARENT_ORG_ID as "parentOrgId",
+            ORG_TYPE as "orgType"
+        from uims_org
+        where `STATUS` = 1 and TENANT_ID= #{tenantId}
+    </select>
 </mapper>

+ 54 - 0
user_center/src/main/resources/mapper/UserMapper.xml

@@ -213,4 +213,58 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             #{item}
         </foreach>
     </select>
+    <select id="findUserIdsForOrg"  resultType="com.huaxu.entity.UserEntity">
+        SELECT
+        <include refid="userColumns"/>
+        FROM uims_user a
+        <include refid="sysAreaJoins"/>
+        where a.status=1
+        <if test="compayId != null and compayId != ''">
+            and (
+               a.COMPANY_ORG_ID = #{compayId}
+                <if test="deptId != null and deptId != ''">
+                   or a.DEPT_ORG_ID = #{deptId}
+                </if>
+            )
+        </if>
+    </select>
+
+    <select id="findUserIdsByPermissonOrg" resultType="java.lang.Integer">
+        select
+        distinct
+        u.id
+        from uims_user u
+        left join uims_user_role ur on u.id=ur.USER_ID
+        left join uims_role r on ur.ROLE_ID=r.id
+        left join uims_role_org ro on ro.ROLE_ID = r.ID
+        where u.TENANT_ID =#{tenantId}
+        and (
+        u.USER_TYPE='-999'
+        <if test="deptOrgId != null ">
+            or (r.PERMISSION_TYPE = 5 and ro.ORG_ID in (#{companyOrgId},#{deptOrgId}))
+            or (r.PERMISSION_TYPE = 3 and u.DEPT_ORG_ID = #{deptOrgId})
+            <if test="deptOrgIds != null and deptOrgIds.size()>0">
+                or (r.PERMISSION_TYPE = 4 and u.DEPT_ORG_ID in
+                <foreach collection="deptOrgIds" item="item" open="(" close=")" separator=",">
+                    #{item}
+                </foreach>
+                )
+            </if>
+        </if>
+        <if test="deptOrgId == null ">
+            or (r.PERMISSION_TYPE = 5 and ro.ORG_ID = #{companyOrgId})
+            or (r.PERMISSION_TYPE = 1 and u.COMPANY_ORG_ID = #{companyOrgId})
+        </if>
+
+        <if test="companyOrgIds != null and companyOrgIds.size()>0">
+            or (r.PERMISSION_TYPE = 2 and u.COMPANY_ORG_ID in
+            <foreach collection="companyOrgIds" item="item" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+            )
+        </if>
+
+        )
+
+    </select>
 </mapper>