Newspaper 1 Minggu lalu
induk
melakukan
6ac1ebf44e
26 mengubah file dengan 918 tambahan dan 156 penghapusan
  1. 14 14
      app-admin/src/main/java/com/ruoyi/web/controller/system/EventController.java
  2. 131 0
      app-admin/src/main/java/com/ruoyi/web/controller/system/EventTypeAssigneeController.java
  3. 1 1
      app-admin/src/main/java/com/ruoyi/web/domain/dto/event/EventAssignAddRequest.java
  4. 1 1
      app-admin/src/main/java/com/ruoyi/web/domain/dto/event/EventAssignEditRequest.java
  5. 1 1
      app-admin/src/main/java/com/ruoyi/web/domain/dto/event/EventAssignQueryRequest.java
  6. 3 0
      app-admin/src/main/java/com/ruoyi/web/domain/dto/event/EventQueryRequest.java
  7. 28 0
      app-admin/src/main/java/com/ruoyi/web/domain/dto/event/EventTypeAssigneeAddRequest.java
  8. 29 0
      app-admin/src/main/java/com/ruoyi/web/domain/dto/event/EventTypeAssigneeEditRequest.java
  9. 34 0
      app-admin/src/main/java/com/ruoyi/web/domain/dto/event/EventTypeAssigneeQueryRequest.java
  10. 1 1
      app-admin/src/main/java/com/ruoyi/web/domain/entity/EventAssign.java
  11. 48 0
      app-admin/src/main/java/com/ruoyi/web/domain/entity/EventTypeAssignee.java
  12. 6 0
      app-admin/src/main/java/com/ruoyi/web/domain/vo/PersonInfoVO.java
  13. 1 7
      app-admin/src/main/java/com/ruoyi/web/domain/vo/event/EventPersonInfoVO.java
  14. 44 0
      app-admin/src/main/java/com/ruoyi/web/domain/vo/event/EventTypeAssigneeVO.java
  15. 15 0
      app-admin/src/main/java/com/ruoyi/web/mapper/EventTypeAssigneeMapper.java
  16. 3 0
      app-admin/src/main/java/com/ruoyi/web/service/EventAssignService.java
  17. 7 9
      app-admin/src/main/java/com/ruoyi/web/service/EventService.java
  18. 73 0
      app-admin/src/main/java/com/ruoyi/web/service/EventTypeAssigneeService.java
  19. 26 0
      app-admin/src/main/java/com/ruoyi/web/service/impl/EventAssignServiceImpl.java
  20. 72 97
      app-admin/src/main/java/com/ruoyi/web/service/impl/EventServiceImpl.java
  21. 344 0
      app-admin/src/main/java/com/ruoyi/web/service/impl/EventTypeAssigneeServiceImpl.java
  22. 3 2
      app-admin/src/main/resources/mapper/web/EventAssignMapper.xml
  23. 19 0
      app-admin/src/main/resources/mapper/web/EventTypeAssigneeMapper.xml
  24. 0 8
      app-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
  25. 0 12
      app-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
  26. 14 3
      sql/sql.sql

+ 14 - 14
app-admin/src/main/java/com/ruoyi/web/controller/system/EventController.java

@@ -10,7 +10,6 @@ import com.ruoyi.web.domain.dto.event.EventHandleRequest;
 import com.ruoyi.web.domain.dto.event.EventQueryRequest;
 import com.ruoyi.web.domain.dto.event.EventReassignRequest;
 import com.ruoyi.web.domain.entity.Event;
-import com.ruoyi.web.domain.vo.PersonInfoVO;
 import com.ruoyi.web.domain.vo.event.EventVO;
 import com.ruoyi.web.service.EventService;
 import io.swagger.annotations.Api;
@@ -103,19 +102,19 @@ public class EventController extends BaseController {
         return AjaxResult.success(listEventVOByPage);
     }
 
-    /**
-     * 根据事件类型获取负责人列表(管理员)
-     */
-    @ApiOperation("根据事件类型获取负责人列表(管理员)")
-    @GetMapping("/list/user")
-    @PreAuthorize("@ss.hasPermi('system:role:admin')")
-    public AjaxResult listSysUserByType(@RequestParam Integer type) {
-        if (type == null) {
-            return error("请求参数为空");
-        }
-        List<PersonInfoVO> personInfoVOByEventType = eventService.getPersonInfoVOByEventType(type);
-        return AjaxResult.success(personInfoVOByEventType);
-    }
+//    /**
+//     * 根据事件类型获取负责人列表(管理员)
+//     */
+//    @ApiOperation("根据事件类型获取负责人列表(管理员)")
+//    @GetMapping("/list/user")
+//    @PreAuthorize("@ss.hasPermi('system:role:admin')")
+//    public AjaxResult listSysUserByType(@RequestParam Integer type) {
+//        if (type == null) {
+//            return error("请求参数为空");
+//        }
+//        List<PersonInfoVO> personInfoVOByEventType = eventService.getPersonInfoVOByEventType(type);
+//        return AjaxResult.success(personInfoVOByEventType);
+//    }
 
 
     /**
@@ -159,4 +158,5 @@ public class EventController extends BaseController {
             return error(e.getMessage());
         }
     }
+
 } 

+ 131 - 0
app-admin/src/main/java/com/ruoyi/web/controller/system/EventTypeAssigneeController.java

@@ -0,0 +1,131 @@
+package com.ruoyi.web.controller.system;
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.web.domain.dto.event.EventTypeAssigneeAddRequest;
+import com.ruoyi.web.domain.dto.event.EventTypeAssigneeEditRequest;
+import com.ruoyi.web.domain.dto.event.EventTypeAssigneeQueryRequest;
+import com.ruoyi.web.domain.vo.PersonInfoVO;
+import com.ruoyi.web.domain.vo.event.EventTypeAssigneeVO;
+import com.ruoyi.web.service.EventTypeAssigneeService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 事件负责人管理
+ */
+@Api(tags = "事件负责人分配管理")
+@RestController
+@RequestMapping("/system/event/type/assignee")
+public class EventTypeAssigneeController extends BaseController {
+
+    @Autowired
+    private EventTypeAssigneeService eventTypeAssigneeService;
+
+    /**
+     * 添加事件负责人
+     */
+    @ApiOperation("添加事件负责人")
+    @PostMapping("/add")
+    @PreAuthorize("@ss.hasPermi('system:role:admin')")
+    public AjaxResult addEventTypeAssignee(@RequestBody EventTypeAssigneeAddRequest eventTypeAssigneeAddRequest) {
+        if (eventTypeAssigneeAddRequest == null) {
+            return error("请求参数为空");
+        }
+        boolean b = eventTypeAssigneeService.addEventTypeAssignee(eventTypeAssigneeAddRequest);
+        if (b){
+            return success("添加成功");
+        }else{
+            return error("添加失败");
+        }
+    }
+
+    /**
+     * 删除事件负责人
+     */
+    @ApiOperation("删除事件负责人")
+    @PostMapping("/delete")
+    @PreAuthorize("@ss.hasPermi('system:role:admin')")
+    public AjaxResult deleteEventTypeAssignee(@RequestBody Map<String, String> paramsMap) {
+        String ids = paramsMap.get("ids");
+        if (StrUtil.isBlank(ids)) {
+            return error("请求参数为空");
+        }
+        boolean b = eventTypeAssigneeService.deleteEventTypeAssignee(ids);
+        if (b) {
+            return success("删除成功");
+        }
+        return error("删除失败");
+    }
+
+    /**
+     * 编辑事件负责人
+     */
+    @ApiOperation("编辑事件负责人(类型,不能为空,若要取消所有,调删除接口)")
+    @PostMapping("/edit")
+    @PreAuthorize("@ss.hasPermi('system:role:admin')")
+    public AjaxResult editEventTypeAssignee(@RequestBody EventTypeAssigneeEditRequest eventTypeAssigneeEditRequest) {
+        if (eventTypeAssigneeEditRequest == null) {
+            return error("请求参数为空");
+        }
+        eventTypeAssigneeService.editEventTypeAssignee(eventTypeAssigneeEditRequest);
+        return AjaxResult.success();
+    }
+
+    /**
+     * 根据 personId 获取负责人对应的类型列表
+     */
+    @ApiOperation("根据村民id获取负责人对应的类型列表")
+    @GetMapping("/get")
+    @PreAuthorize("@ss.hasPermi('system:role:admin')")
+    public AjaxResult getEventTypeAssigneeById(@RequestParam int id) {
+        if (ObjectUtil.isEmpty(id)) {
+            return error("请求参数为空");
+        }
+        EventTypeAssigneeVO eventTypeAssigneeVO = eventTypeAssigneeService.getEventTypeAssigneeById(id);
+        List<Integer> types = eventTypeAssigneeVO.getTypes();
+        Collections.sort(types);
+        return success(types);
+    }
+
+    /**
+     * 根据事件类型获取负责人列表(管理员)
+     */
+    @ApiOperation("根据事件类型获取负责人列表(管理员)")
+    @GetMapping("/list/user")
+    @PreAuthorize("@ss.hasPermi('system:role:admin')")
+    public AjaxResult getListEventPersonInfoVOByType(@RequestParam Integer type) {
+        if (type == null) {
+            return error("请求参数为空");
+        }
+        List<PersonInfoVO> personInfoVOByEventType = eventTypeAssigneeService.getListEventPersonInfoVO(type);
+        return AjaxResult.success(personInfoVOByEventType);
+    }
+
+    /**
+     * 分页查询对应事件类别的负责人列表
+     */
+    @ApiOperation("分页查询对应事件类别的负责人列表")
+    @PostMapping("/list/page")
+    @PreAuthorize("@ss.hasPermi('system:role:admin')")
+    public AjaxResult getListEventPersonInfoVOByPage(@RequestBody EventTypeAssigneeQueryRequest eventTypeAssigneeQueryRequest) {
+        if (eventTypeAssigneeQueryRequest == null) {
+            return error("请求参数为空");
+        }
+        Page<PersonInfoVO> listEventPersonInfoVOByPage = eventTypeAssigneeService.getListEventPersonInfoVOByPage(eventTypeAssigneeQueryRequest);
+        return AjaxResult.success(listEventPersonInfoVOByPage);
+    }
+
+
+
+} 

+ 1 - 1
app-admin/src/main/java/com/ruoyi/web/domain/dto/event/EventAssignAddRequest.java

@@ -22,7 +22,7 @@ public class EventAssignAddRequest implements Serializable {
     /**
      * 负责人ID
      */
-    private Integer personId;
+    private Integer userId;
 
     /**
      * 状态(0未完结 1本人已完结 2其他人已完结)

+ 1 - 1
app-admin/src/main/java/com/ruoyi/web/domain/dto/event/EventAssignEditRequest.java

@@ -26,7 +26,7 @@ public class EventAssignEditRequest implements Serializable {
     /**
      * 负责人ID
      */
-    private Integer personId;
+    private Integer userId;
 
     /**
      * 状态(0未完结 1本人已完结 2其他人已完结)

+ 1 - 1
app-admin/src/main/java/com/ruoyi/web/domain/dto/event/EventAssignQueryRequest.java

@@ -22,7 +22,7 @@ public class EventAssignQueryRequest extends PageRequest implements Serializable
     /**
      * 负责人ID
      */
-    private Integer personId;
+    private Integer userId;
 
     /**
      * 状态(0未完结 1本人已完结 2其他人已完结)

+ 3 - 0
app-admin/src/main/java/com/ruoyi/web/domain/dto/event/EventQueryRequest.java

@@ -1,5 +1,6 @@
 package com.ruoyi.web.domain.dto.event;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ruoyi.web.common.PageRequest;
 import io.swagger.annotations.ApiModel;
 import lombok.Data;
@@ -24,11 +25,13 @@ public class EventQueryRequest extends PageRequest implements Serializable {
     /**
      * 事发开始时间
      */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date startTime;
 
     /**
      * 事发结束时间
      */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date endTime;
 
     /**

+ 28 - 0
app-admin/src/main/java/com/ruoyi/web/domain/dto/event/EventTypeAssigneeAddRequest.java

@@ -0,0 +1,28 @@
+package com.ruoyi.web.domain.dto.event;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 事件类别负责人添加请求
+ *
+ * @TableName event
+ */
+@ApiModel(value = "EventTypeAssigneeAddRequest", description = "事件类别负责人添加请求参数")
+@Data
+public class EventTypeAssigneeAddRequest implements Serializable {
+    /**
+     * 事件类型列表 (0-5,表示对应类型的负责人)
+     */
+    private List<Integer> types;
+
+    /**
+     * 负责人ID(人口表)
+     */
+    private Integer personId;
+
+    private static final long serialVersionUID = 1L;
+}

+ 29 - 0
app-admin/src/main/java/com/ruoyi/web/domain/dto/event/EventTypeAssigneeEditRequest.java

@@ -0,0 +1,29 @@
+package com.ruoyi.web.domain.dto.event;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 事件类别负责人编辑请求
+ *
+ * @TableName event
+ */
+@ApiModel(value = "EventTypeAssigneeEditRequest", description = "事件类别负责人编辑请求参数")
+@Data
+public class EventTypeAssigneeEditRequest implements Serializable {
+
+    /**
+     * 事件类型列表 (0-5,表示对应类型的负责人)
+     */
+    private List<Integer> types;
+
+    /**
+     * 负责人ID(人口表)
+     */
+    private Integer personId;
+
+    private static final long serialVersionUID = 1L;
+}

+ 34 - 0
app-admin/src/main/java/com/ruoyi/web/domain/dto/event/EventTypeAssigneeQueryRequest.java

@@ -0,0 +1,34 @@
+package com.ruoyi.web.domain.dto.event;
+
+import com.ruoyi.web.common.PageRequest;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+/**
+ * 事件类别负责人查询请求
+ */
+@Data
+@ApiModel(value = "EventTypeAssignQueryRequest", description = "事件类别负责人查询请求参数")
+@EqualsAndHashCode(callSuper = true)
+public class EventTypeAssigneeQueryRequest extends PageRequest implements Serializable {
+
+    /**
+     * id
+     */
+    private Integer Id;
+
+    /**
+     * 事件(负责人)类型
+     */
+    private Integer type;
+
+//    /**
+//     * 负责人ID(人口表id)
+//     */
+//    private Integer personId;
+
+    private static final long serialVersionUID = 1L;
+}

+ 1 - 1
app-admin/src/main/java/com/ruoyi/web/domain/entity/EventAssign.java

@@ -31,7 +31,7 @@ public class EventAssign implements Serializable {
     /**
      * 负责人ID
      */
-    private Integer personId;
+    private Integer userId;
 
     /**
      * 状态(0未完结 1本人已完结 2其他人已完结)

+ 48 - 0
app-admin/src/main/java/com/ruoyi/web/domain/entity/EventTypeAssignee.java

@@ -0,0 +1,48 @@
+package com.ruoyi.web.domain.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 事件类型负责人配置表
+ *
+ * @TableName event_type_assignee
+ */
+@TableName(value = "event_type_assignee")
+@Data
+public class EventTypeAssignee implements Serializable {
+    /**
+     * ID
+     */
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 事件类型(0-5,表示对应类型的负责人)
+     */
+    private Integer type;
+
+    /**
+     * 负责人ID
+     */
+    private Integer userId;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * 修改时间
+     */
+    private Date updateTime;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+}

+ 6 - 0
app-admin/src/main/java/com/ruoyi/web/domain/vo/PersonInfoVO.java

@@ -23,6 +23,12 @@ public class PersonInfoVO implements Serializable {
     private Integer id;
 
     /**
+     * 用户ID(关联SysUser表)
+     */
+    @ApiModelProperty(value = "系统用户ID")
+    private Integer userId;
+
+    /**
      * 姓名
      */
     @ApiModelProperty(value = "姓名")

+ 1 - 7
app-admin/src/main/java/com/ruoyi/web/domain/vo/event/EventPersonInfoVO.java

@@ -11,7 +11,7 @@ import java.util.Date;
  * 事件负责人员信息视图
  */
 @Data
-@ApiModel(value = "PersonInfoVO", description = "事件负责人员信息视图")
+@ApiModel(value = "EventPersonInfoVO", description = "事件负责人员信息视图")
 public class EventPersonInfoVO implements Serializable {
 
     /**
@@ -21,12 +21,6 @@ public class EventPersonInfoVO implements Serializable {
     private Integer userId;
 
     /**
-     * 部门id
-     */
-    @ApiModelProperty(value = "部门id")
-    private Integer deptId;
-
-    /**
      * 姓名
      */
     @ApiModelProperty(value = "姓名")

+ 44 - 0
app-admin/src/main/java/com/ruoyi/web/domain/vo/event/EventTypeAssigneeVO.java

@@ -0,0 +1,44 @@
+package com.ruoyi.web.domain.vo.event;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 事件类型负责人配置表(返回 负责人拥有的事件类型列表 )
+ *
+ * @TableName event_type_assignee
+ */
+@Data
+@ApiModel(value = "EventTypeAssigneeVO", description = "事件负责人员信息视图")
+public class EventTypeAssigneeVO implements Serializable {
+    /**
+     * ID
+     */
+    private Integer id;
+
+    /**
+     * 事件负责人类型列表(0-5,表示对应类型的负责人,负责人类型,支持多个)
+     */
+    private List<Integer> types;
+
+    /**
+     * 负责人ID (人口表)
+     */
+    private Integer personId;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * 修改时间
+     */
+    private Date updateTime;
+
+    private static final long serialVersionUID = 1L;
+}

+ 15 - 0
app-admin/src/main/java/com/ruoyi/web/mapper/EventTypeAssigneeMapper.java

@@ -0,0 +1,15 @@
+package com.ruoyi.web.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.web.domain.entity.EventTypeAssignee;
+
+/**
+ * @Entity generator.domain.EventTypeAssignee
+ */
+public interface EventTypeAssigneeMapper extends BaseMapper<EventTypeAssignee> {
+
+}
+
+
+
+

+ 3 - 0
app-admin/src/main/java/com/ruoyi/web/service/EventAssignService.java

@@ -3,10 +3,13 @@ package com.ruoyi.web.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ruoyi.web.domain.entity.EventAssign;
 
+import java.util.List;
+
 
 /**
  *
  */
 public interface EventAssignService extends IService<EventAssign> {
 
+    boolean deleteEventAssign(List<Integer> eventId,Integer userId);
 }

+ 7 - 9
app-admin/src/main/java/com/ruoyi/web/service/EventService.java

@@ -4,10 +4,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ruoyi.web.domain.dto.event.EventAddRequest;
-import com.ruoyi.web.domain.dto.event.EventEditRequest;
 import com.ruoyi.web.domain.dto.event.EventQueryRequest;
 import com.ruoyi.web.domain.entity.Event;
-import com.ruoyi.web.domain.vo.PersonInfoVO;
 import com.ruoyi.web.domain.vo.event.EventVO;
 
 import java.util.Date;
@@ -22,7 +20,7 @@ public interface EventService extends IService<Event> {
 
     boolean deleteEvent(String ids);
 
-    void editEvent(EventEditRequest eventEditRequest);
+    //void editEvent(EventEditRequest eventEditRequest);
 
     EventVO getEventById(int id);
 
@@ -32,12 +30,12 @@ public interface EventService extends IService<Event> {
 
     QueryWrapper<Event> getQueryWrapper(EventQueryRequest eventQueryRequest, Integer userId);
 
-    /**
-     * 根据事件类型获取负责人列表
-     * @param eventType
-     * @return
-     */
-    List<PersonInfoVO> getPersonInfoVOByEventType(Integer eventType);
+//    /**
+//     * 根据事件类型获取负责人列表
+//     * @param eventType
+//     * @return
+//     */
+    //List<PersonInfoVO> getPersonInfoVOByEventType(Integer eventType);
 
     // 处理事件:返回是否成功抢占并完成(true 表示当前负责人成为处理人)
     boolean handleEvent(Integer eventId, String processResult, Date processTime);

+ 73 - 0
app-admin/src/main/java/com/ruoyi/web/service/EventTypeAssigneeService.java

@@ -0,0 +1,73 @@
+package com.ruoyi.web.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.web.domain.dto.event.EventTypeAssigneeQueryRequest;
+import com.ruoyi.web.domain.dto.event.EventTypeAssigneeAddRequest;
+import com.ruoyi.web.domain.dto.event.EventTypeAssigneeEditRequest;
+import com.ruoyi.web.domain.entity.EventTypeAssignee;
+import com.ruoyi.web.domain.vo.PersonInfoVO;
+import com.ruoyi.web.domain.vo.event.EventTypeAssigneeVO;
+
+import java.util.List;
+
+
+/**
+ *
+ */
+public interface EventTypeAssigneeService extends IService<EventTypeAssignee> {
+
+    /**
+     * 分配事件负责人
+     * @param eventTypeAssigneeAddRequest
+     * @return
+     */
+    boolean addEventTypeAssignee(EventTypeAssigneeAddRequest eventTypeAssigneeAddRequest);
+
+    /**
+     * 删除事件负责人
+     * @param personId
+     * @return
+     */
+    boolean deleteEventTypeAssignee(Integer personId);
+
+    /**
+     * 修改事件负责人
+     * @param eventTypeAssigneeEditRequest
+     */
+    void editEventTypeAssignee(EventTypeAssigneeEditRequest eventTypeAssigneeEditRequest);
+
+    /**
+     * 获取包装类
+     *
+     * @param eventTypeAssigneeList
+     * @return
+     */
+    EventTypeAssigneeVO getEventTypeAssigneeVO(List<EventTypeAssignee> eventTypeAssigneeList);
+
+    /**
+     * 根据人口id 获取事件负责人类型分配包装类
+     *
+     * @param personId
+     * @return
+     */
+    EventTypeAssigneeVO getEventTypeAssigneeById(int personId);
+
+    /**
+     * 根据事件类型获取 事件负责人列表
+     *
+     * @param type
+     * @return
+     */
+    List<PersonInfoVO> getListEventPersonInfoVO(Integer type);
+
+    /**
+     * 分页获取事件负责人类型分配列表  (根据事件类型获取 事件负责人分页列表)
+     *
+     * @param eventTypeAssignQueryRequest
+     * @return
+     */
+    Page<PersonInfoVO> getListEventPersonInfoVOByPage(EventTypeAssigneeQueryRequest eventTypeAssignQueryRequest);
+
+
+}

+ 26 - 0
app-admin/src/main/java/com/ruoyi/web/service/impl/EventAssignServiceImpl.java

@@ -1,10 +1,16 @@
 package com.ruoyi.web.service.impl;
 
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.web.domain.entity.EventAssign;
 import com.ruoyi.web.mapper.EventAssignMapper;
 import com.ruoyi.web.service.EventAssignService;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
 
 /**
  *
@@ -13,6 +19,26 @@ import org.springframework.stereotype.Service;
 public class EventAssignServiceImpl extends ServiceImpl<EventAssignMapper, EventAssign>
         implements EventAssignService {
 
+    /**
+     * 删除事件分配数据
+     * @param eventIds
+     * @param userId
+     * @return
+     */
+    @Override
+    @Transactional
+    public boolean deleteEventAssign(List<Integer> eventIds, Integer userId) {
+        if(CollectionUtil.isEmpty(eventIds) || ObjectUtil.isEmpty(userId)){
+            return false;
+        }
+        // 构建查询条件
+        QueryWrapper<EventAssign> queryWrapper = new QueryWrapper<>();
+        queryWrapper.in("event_id", eventIds)
+                .eq("user_id", userId);
+
+        // 执行删除操作
+        return remove(queryWrapper);
+    }
 }
 
 

+ 72 - 97
app-admin/src/main/java/com/ruoyi/web/service/impl/EventServiceImpl.java

@@ -11,10 +11,7 @@ import com.ruoyi.common.enums.BusinessType;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.bean.BeanUtils;
-import com.ruoyi.system.mapper.SysUserMapper;
-import com.ruoyi.system.service.ISysUserService;
 import com.ruoyi.web.domain.dto.event.EventAddRequest;
-import com.ruoyi.web.domain.dto.event.EventEditRequest;
 import com.ruoyi.web.domain.dto.event.EventQueryRequest;
 import com.ruoyi.web.domain.entity.Event;
 import com.ruoyi.web.domain.entity.EventAssign;
@@ -25,6 +22,7 @@ import com.ruoyi.web.mapper.EventAssignMapper;
 import com.ruoyi.web.mapper.EventMapper;
 import com.ruoyi.web.service.EventAssignService;
 import com.ruoyi.web.service.EventService;
+import com.ruoyi.web.service.EventTypeAssigneeService;
 import com.ruoyi.web.service.PersonInfoService;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
@@ -47,17 +45,14 @@ public class EventServiceImpl extends ServiceImpl<EventMapper, Event>
     private EventAssignMapper eventAssignMapper;
 
     @Resource
-    private ISysUserService sysUserService;
-
-    @Resource
-    private SysUserMapper sysUserMapper;
-
-    @Resource
     private PersonInfoService personInfoService;
 
     @Resource
     private EventAssignService eventAssignService;
 
+    @Resource
+    private EventTypeAssigneeService eventTypeAssigneeService;
+
     /**
      * 添加事件并分配给对应负责人
      *
@@ -85,7 +80,7 @@ public class EventServiceImpl extends ServiceImpl<EventMapper, Event>
                 PersonInfo personInfo = personInfoList.get(0);
                 event.setSubmitterId(personInfo.getId());
             } else {
-                event.setSubmitterId(null);
+                throw new ServiceException("找不到申报人");
             }
 
             //数据校验
@@ -109,17 +104,17 @@ public class EventServiceImpl extends ServiceImpl<EventMapper, Event>
      */
     private void assignEventToPersons(Integer eventId, Integer eventType) {
         // 根据事件类型查找对应的负责人 id 集合
-        List<Integer> personIds = getPersonIdsByEventType(eventType);
+        List<Integer> userIds = getPersonIdsByEventType(eventType);
 
-        if (personIds.isEmpty()) {
+        if (userIds.isEmpty()) {
             throw new ServiceException("未找到事件类型对应的负责人");
         }
 
         Date now = new Date();
-        for (Integer personId : personIds) {
+        for (Integer userId : userIds) {
             EventAssign eventAssign = new EventAssign();
             eventAssign.setEventId(eventId);
-            eventAssign.setPersonId(personId);
+            eventAssign.setUserId(userId);
             eventAssign.setStatus("0"); // 未完结
             eventAssign.setIsReassign("0"); // 非重新分配
             eventAssign.setCreateTime(now);
@@ -129,29 +124,17 @@ public class EventServiceImpl extends ServiceImpl<EventMapper, Event>
     }
 
 
-    /**
-     * 根据事件类型获取负责人列表
-     * @param eventType
-     * @return
-     */
-    @Override
-    public List<PersonInfoVO> getPersonInfoVOByEventType(Integer eventType) {
-        List<Integer> userIdsByEventType = getPersonIdsByEventType(eventType);
-        List<PersonInfoVO> personInfoVOListByUserIds = personInfoService.getPersonInfoVOListByUserIds(userIdsByEventType);
-        return personInfoVOListByUserIds;
-    }
-
-
 //    /**
-//     * 通过 id 获取负责人列表
-//     * @param personIds
+//     * 根据事件类型获取负责人列表
+//     * @param eventType
 //     * @return
 //     */
-//    //todo
-//    private List<SysUser> getSysUserByIdList(List<Integer> personIds) {
-//        return sysUserMapper.selectUserListForEvent(personIds);
+//    @Override
+//    public List<PersonInfoVO> getPersonInfoVOByEventType(Integer eventType) {
+//        return eventTypeAssigneeService.getListEventPersonInfoVO(eventType);
 //    }
 
+
     /**
      * 根据事件类型获取负责人系统用户ID列表
      *
@@ -159,24 +142,18 @@ public class EventServiceImpl extends ServiceImpl<EventMapper, Event>
      * @return 负责人ID列表
      */
     private List<Integer> getPersonIdsByEventType(Integer eventType) {
-        // 约定基于角色来选择负责人:通用命名:event_type_{n}
-        // 角色:event_type_0 -> 矛盾纠纷类 、 event_type_2 -> 消防隐患类
-        String key = "event_type_" + eventType;
-
-        // 使用专门的方法查询用户ID,避免数据权限问题
-        List<String> roleKeys = Arrays.asList(key);
-        List<Long> userIds = sysUserService.selectUserIdsByRoleKeysForEvent(roleKeys);
-
-        List<Integer> matchedUserIds = userIds.stream()
-                .map(Long::intValue)
-                .distinct()
-                .collect(Collectors.toList());
+        // 获取负责人列表
+        List<PersonInfoVO> listEventPersonInfoVO = eventTypeAssigneeService.getListEventPersonInfoVO(eventType);
+        List<Integer> userIds = listEventPersonInfoVO.stream().map(
+                personInfoVO -> {
+                    return personInfoVO.getUserId();
+                }).collect(Collectors.toList());
 
         // 同时包含超级管理员(user_id = 1)
-        if (!matchedUserIds.contains(1)) {
-            matchedUserIds.add(1);
+        if (!userIds.contains(1)) {
+            userIds.add(1);
         }
-        return matchedUserIds;
+        return userIds;
     }
 
 
@@ -206,36 +183,37 @@ public class EventServiceImpl extends ServiceImpl<EventMapper, Event>
         // 3. 构建删除条件
         QueryWrapper<Event> queryWrapper = new QueryWrapper<>();
         queryWrapper.in("id", idList);
+        // todo 同步删除 分配表 记录
 
         // 4. 执行删除(返回是否删除成功)
         return remove(queryWrapper);
     }
 
-    /**
-     * 编辑
-     *
-     * @param eventEditRequest
-     */
-    @Override
-    public void editEvent(EventEditRequest eventEditRequest) {
-        // 判断是否存在
-        Integer id = eventEditRequest.getId();
-        Event oldEvent = this.getById(id);
-        if (oldEvent == null) {
-            throw new ServiceException("没有找到事件");
-        }
-        Event event = new Event();
-        BeanUtil.copyProperties(eventEditRequest, event);
-        event.setUpdateTime(new Date());
-        // 数据校验
-        validEvent(event, BusinessType.UPDATE);
-
-        // 操作数据库
-        boolean result = this.updateById(event);
-        if (!result) {
-            throw new ServiceException("修改事件操作失败");
-        }
-    }
+//    /**
+//     * 编辑
+//     *
+//     * @param eventEditRequest
+//     */
+//    @Override
+//    public void editEvent(EventEditRequest eventEditRequest) {
+//        // 判断是否存在
+//        Integer id = eventEditRequest.getId();
+//        Event oldEvent = this.getById(id);
+//        if (oldEvent == null) {
+//            throw new ServiceException("没有找到事件");
+//        }
+//        Event event = new Event();
+//        BeanUtil.copyProperties(eventEditRequest, event);
+//        event.setUpdateTime(new Date());
+//        // 数据校验
+//        validEvent(event, BusinessType.UPDATE);
+//
+//        // 操作数据库
+//        boolean result = this.updateById(event);
+//        if (!result) {
+//            throw new ServiceException("修改事件操作失败");
+//        }
+//    }
 
     /**
      * 校验数据
@@ -280,7 +258,7 @@ public class EventServiceImpl extends ServiceImpl<EventMapper, Event>
     /**
      * 根据id查询
      *
-     * @param id
+     * @param id 事件id
      * @return
      */
     @Override
@@ -290,7 +268,7 @@ public class EventServiceImpl extends ServiceImpl<EventMapper, Event>
         }
         // 获取登录用户id
         Long userId = SecurityUtils.getUserId();
-        Event event = new Event();
+        Event event;
         // 若不是管理员 指定查询的 负责人id 为当前登录用户id (负责人只能查询自己的事件)
         if (SecurityUtils.isAdmin(userId)) {
             // 管理员查询
@@ -299,7 +277,7 @@ public class EventServiceImpl extends ServiceImpl<EventMapper, Event>
             // 负责人查询
             QueryWrapper<Event> wrapper = new QueryWrapper<>();
             wrapper.eq("id", id)
-                    .exists("SELECT 1 FROM event_assign ea WHERE ea.event_id = event.id AND ea.person_id = " + userId);
+                    .exists("SELECT 1 FROM event_assign ea WHERE ea.event_id = event.id AND ea.user_id = " + userId);
             event = this.getOne(wrapper);
         }
         return getEventVO(event);
@@ -326,10 +304,10 @@ public class EventServiceImpl extends ServiceImpl<EventMapper, Event>
         List<EventAssign> eventAssigns = eventAssignMapper.selectList(queryWrapper);
         // 3. 提取负责人 系统用户ID列表
         List<Integer> userIds = eventAssigns.stream()
-                .map(EventAssign::getPersonId)
+                .map(EventAssign::getUserId)
                 .collect(Collectors.toList());
 
-        // 4. 批量查询有效的负责人信息
+        // 4. 批量查询 有效的负责人信息
         List<PersonInfoVO> chargeUserList ;
         if (ObjectUtil.isNotEmpty(userIds)){
             chargeUserList = personInfoService.getPersonInfoVOListByUserIds(userIds);
@@ -340,37 +318,34 @@ public class EventServiceImpl extends ServiceImpl<EventMapper, Event>
 
         // 5. 通过填报人id 查询村民姓名
         Integer submitterId = event.getSubmitterId();
-
-
         PersonInfo personInfo = personInfoService.getById(submitterId);
         eventVO.setSubmitterName(personInfo.getRealname());
 
         // 6. 查询处理人
         QueryWrapper<EventAssign> wrapper = new QueryWrapper<>();
-        wrapper.select("person_id")
+        wrapper.select("user_id")
                 .eq("event_id", event.getId())
                 .eq("status", 1);
         EventAssign eventAssign = eventAssignService.getOne(wrapper);
         if (ObjectUtil.isNotEmpty(eventAssign)){
-            Integer personId = eventAssign.getPersonId();
-            if(personId == 1){
+            // 事件已经处理 有处理人
+            Integer userId = eventAssign.getUserId();
+            if (userId == 1) {
                 eventVO.setProcessUserName("超级管理员");
             }else{
                 QueryWrapper<PersonInfo> queryWrapper2 = new QueryWrapper<>();
                 queryWrapper2.select("id", "realname")
-                        .eq("user_id", personId);
-
-                List<PersonInfo> personInfoList = personInfoService.list(queryWrapper2);
+                        .eq("user_id", userId);
+                PersonInfo processPersonInfo = personInfoService.getOne(queryWrapper2);
 
-                if (!personInfoList.isEmpty()) {
-                    PersonInfo personInfo2 = personInfoList.get(0);
-                    eventVO.setProcessUserName(personInfo2.getRealname());
+                if (processPersonInfo != null) {
+                    eventVO.setProcessUserName(processPersonInfo.getRealname());
                 } else {
                     eventVO.setProcessUserName(null);
                 }
             }
-
         } else {
+            // 事件还未处理 没有处理人
             eventVO.setProcessUserName(null);
         }
         return eventVO;
@@ -470,8 +445,8 @@ public class EventServiceImpl extends ServiceImpl<EventMapper, Event>
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean handleEvent(Integer eventId, String processResult,Date processTime) {
-        Long personId = SecurityUtils.getUserId();
-        if (eventId == null || personId == null) {
+        Long userId = SecurityUtils.getUserId();
+        if (eventId == null || userId == null) {
             throw new ServiceException("参数不能为空");
         }
         // 1. 事件主表CAS:尝试抢占锁,只能修改状态为 0 的事件
@@ -491,7 +466,7 @@ public class EventServiceImpl extends ServiceImpl<EventMapper, Event>
             // 抢到锁:当前负责人状态 -> 1;其他事件负责人状态 -> 2
             UpdateWrapper<EventAssign> meDone = new UpdateWrapper<>();
             meDone.eq("event_id", eventId)
-                    .eq("person_id", personId)
+                    .eq("user_id", userId)
                     .eq("status", "0")
                     .set("status", "1")
                     .set("update_time", new Date());
@@ -499,7 +474,7 @@ public class EventServiceImpl extends ServiceImpl<EventMapper, Event>
 
             UpdateWrapper<EventAssign> othersDone = new UpdateWrapper<>();
             othersDone.eq("event_id", eventId)
-                    .ne("person_id", personId)
+                    .ne("user_id", userId)
                     .eq("status", "0")
                     .set("status", "2")
                     .set("update_time", new Date());
@@ -509,7 +484,7 @@ public class EventServiceImpl extends ServiceImpl<EventMapper, Event>
             // 抢锁失败:当前事件已经被其他负责人处理,将当前负责人状态 -> 2
             UpdateWrapper<EventAssign> meLose = new UpdateWrapper<>();
             meLose.eq("event_id", eventId)
-                    .eq("person_id", personId)
+                    .eq("user_id", userId)
                     .eq("status", "0")
                     .set("status", "2")
                     .set("update_time", new Date());
@@ -521,7 +496,7 @@ public class EventServiceImpl extends ServiceImpl<EventMapper, Event>
     /**
      * 再次派发:仅在事件未完结时允许;存在则重置为未完结并标记再派发,不存在则插入
      */
-    // todo 校验事件类型 与 负责人类型 是否匹配  personIds 为人口表  需要转换
+    // todo 校验事件类型 与 负责人类型 是否匹配
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void reassignEvent(Integer eventId, List<Integer> personIds) {
@@ -544,7 +519,7 @@ public class EventServiceImpl extends ServiceImpl<EventMapper, Event>
             // 先尝试更新存在的数据
             UpdateWrapper<EventAssign> reset = new UpdateWrapper<>();
             reset.eq("event_id", eventId)
-                    .eq("person_id", uid)
+                    .eq("user_id", uid)
                     .set("status", "0")
                     .set("is_reassign", "1")
                     .set("update_time", now);
@@ -554,7 +529,7 @@ public class EventServiceImpl extends ServiceImpl<EventMapper, Event>
                 // 插入新记录
                 EventAssign add = new EventAssign();
                 add.setEventId(eventId);
-                add.setPersonId(uid);
+                add.setUserId(uid);
                 add.setStatus("0");
                 add.setIsReassign("1");
                 add.setCreateTime(now);

+ 344 - 0
app-admin/src/main/java/com/ruoyi/web/service/impl/EventTypeAssigneeServiceImpl.java

@@ -0,0 +1,344 @@
+package com.ruoyi.web.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.web.domain.dto.event.EventTypeAssigneeAddRequest;
+import com.ruoyi.web.domain.dto.event.EventTypeAssigneeEditRequest;
+import com.ruoyi.web.domain.dto.event.EventTypeAssigneeQueryRequest;
+import com.ruoyi.web.domain.entity.Event;
+import com.ruoyi.web.domain.entity.EventAssign;
+import com.ruoyi.web.domain.entity.EventTypeAssignee;
+import com.ruoyi.web.domain.vo.PersonInfoVO;
+import com.ruoyi.web.domain.vo.event.EventTypeAssigneeVO;
+import com.ruoyi.web.mapper.EventTypeAssigneeMapper;
+import com.ruoyi.web.service.EventAssignService;
+import com.ruoyi.web.service.EventService;
+import com.ruoyi.web.service.EventTypeAssigneeService;
+import com.ruoyi.web.service.PersonInfoService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ *
+ */
+@Service
+public class EventTypeAssigneeServiceImpl extends ServiceImpl<EventTypeAssigneeMapper, EventTypeAssignee>
+        implements EventTypeAssigneeService {
+
+
+    @Resource
+    private EventTypeAssigneeService eventTypeAssigneeService;
+
+    @Resource
+    private PersonInfoService personInfoService;
+
+    @Resource
+    private EventAssignService eventAssignService;
+
+    @Resource
+    private EventService eventService;
+
+
+    /**
+     * 添加
+     *
+     * @param eventTypeAssigneeAddRequest
+     * @return
+     */
+    @Override
+    public boolean addEventTypeAssignee(EventTypeAssigneeAddRequest eventTypeAssigneeAddRequest) {
+        if (ObjectUtil.isEmpty(eventTypeAssigneeAddRequest)) {
+            throw new ServiceException("参数为空");
+        }
+        // 获取请求参数
+        List<Integer> types = eventTypeAssigneeAddRequest.getTypes();
+        Integer personId = eventTypeAssigneeAddRequest.getPersonId();
+
+        if (ObjectUtil.isEmpty(personId)) {
+            throw new ServiceException("人员ID不能为空");
+        }
+        if (CollectionUtil.isEmpty(types)) {
+            throw new ServiceException("事件类型列表不能为空");
+        }
+
+        // personId -> userId
+        Integer userId = getUserId(personId);
+        QueryWrapper<EventTypeAssignee> wrapper = new QueryWrapper<>();
+        wrapper.eq("user_id", userId);
+        int count = this.count(wrapper);
+        if (count > 0) {
+            throw new ServiceException("该用户已经是负责人,请勿重新添加");
+        }
+
+        // 构建批量插入数据
+        List<EventTypeAssignee> assignees = types.stream()
+                .map(type -> {
+                    EventTypeAssignee assignee = new EventTypeAssignee();
+                    assignee.setType(type);
+                    assignee.setUserId(userId);
+                    return assignee;
+                })
+                .collect(Collectors.toList());
+
+        // 执行批量插入
+        return eventTypeAssigneeService.saveBatch(assignees);
+    }
+
+    /**
+     * userId -> personId
+     * @param personId
+     * @return
+     */
+    private Integer getUserId(Integer personId) {
+        List<Integer> personIds = CollUtil.newArrayList(personId);
+        List<Integer> userIds = personInfoService.getUserIdListByPersonIds(personIds);
+        if (CollUtil.isEmpty(userIds)) {
+            throw new ServiceException("未找到用户");
+        }
+        return userIds.get(0);
+    }
+
+    /**
+     * 删除
+     *
+     * @param personId
+     * @return
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean deleteEventTypeAssignee(Integer personId) {
+        if (ObjectUtil.isEmpty(personId)) {
+            throw new ServiceException("id不能为空或id异常");
+        }
+        List<Integer> userIds = personInfoService.getUserIdListByPersonIds(new ArrayList<>(personId));
+        if (CollectionUtil.isEmpty(userIds)) {
+            throw new ServiceException("未找到用户");
+        }
+        Integer userId = userIds.get(0);
+
+        QueryWrapper<EventTypeAssignee> wrapper = new QueryWrapper<>();
+        wrapper.eq("user_id", userId);
+        boolean remove = this.remove(wrapper);
+
+        if (remove) {
+            // 5. 同步删除事件分配表记录(未完结的)
+            QueryWrapper<EventAssign> queryWrapper = new QueryWrapper<>();
+            queryWrapper.eq("user_id",userId)
+                    .eq("status",0);
+            return eventAssignService.remove(queryWrapper);
+        }
+        return false;
+    }
+
+    /**
+     * 修改(负责人类型 不能传空 必须有一个 若要取消 直接删除)  要么新增  要么删除类型
+     *
+     * @param eventTypeAssigneeEditRequest
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void editEventTypeAssignee(EventTypeAssigneeEditRequest eventTypeAssigneeEditRequest) {
+        // 1.判断是否存在
+//        Integer id = eventTypeAssigneeEditRequest.getId();
+//        EventTypeAssignee oldEventTypeAssignee = this.getById(id);
+//        if (oldEventTypeAssignee == null) {
+//            throw new ServiceException("数据不存在");
+//        }
+        // 2.获取请求参数
+        List<Integer> types = eventTypeAssigneeEditRequest.getTypes();
+        Integer personId = eventTypeAssigneeEditRequest.getPersonId();
+        if (ObjectUtil.isEmpty(personId)) {
+            throw new ServiceException("人员ID不能为空");
+        }
+        if (CollectionUtil.isEmpty(types)) {
+            throw new ServiceException("事件类型列表不能为空");
+        }
+
+        // 3.人口id ——> 系统用户id
+        Integer userId = getUserId(personId);
+
+        // 4. 删除该负责人原有的所有分配记录
+        LambdaQueryWrapper<EventTypeAssignee> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(EventTypeAssignee::getUserId, userId);
+        // 获取已经具有的 类型
+        List<EventTypeAssignee> oldEventTypeAssigneeList = this.list(wrapper);
+        List<Integer> oldTypes;
+        if (CollectionUtil.isNotEmpty(oldEventTypeAssigneeList)) {
+            oldTypes = oldEventTypeAssigneeList.stream().map(EventTypeAssignee::getType).collect(Collectors.toList());
+        } else {
+            oldTypes = Collections.emptyList();
+        }
+        this.remove(wrapper);
+
+        // 5. 批量插入新数据
+        List<EventTypeAssignee> assignees = types.stream()
+                .map(type -> {
+                    EventTypeAssignee assignee = new EventTypeAssignee();
+                    assignee.setType(type);
+                    assignee.setUserId(userId);
+                    assignee.setUpdateTime(new Date());
+                    return assignee;
+                })
+                .collect(Collectors.toList());
+
+        // 获取重复 类型
+        if (CollectionUtil.isNotEmpty(oldTypes)) {
+            // 拥有的旧类型  (修改的类型中不包含的类型,需要将事件分配的数据进行删除)
+            List<Integer> onlyInOldTypes = oldTypes.stream()
+                    .filter(e -> !types.contains(e))
+                    .collect(Collectors.toList());
+            // 删除对于的事件分配数据(该用户失去对应类型未完结的事件)
+            QueryWrapper<Event> eventQueryWrapper = new QueryWrapper<>();
+            eventQueryWrapper.select("id")
+                    .in("type",onlyInOldTypes)
+                    .eq("status", 0);
+
+            List<Event> list = eventService.list(eventQueryWrapper);
+            List<Integer> eventIds = list.stream().map(Event::getId).collect(Collectors.toList());
+
+            boolean b = eventAssignService.deleteEventAssign(eventIds, userId);
+            if (!b){
+                throw new ServiceException("同步事件分配失败,修改失败");
+            }
+        }
+
+        if (!this.saveBatch(assignees)) {
+            throw new ServiceException("修改失败");
+        }
+    }
+
+    /**
+     * 获取包装类 (返回 负责人拥有的事件类型列表 )
+     *
+     * @param eventTypeAssigneeList
+     * @return
+     */
+    @Override
+    public EventTypeAssigneeVO getEventTypeAssigneeVO(List<EventTypeAssignee> eventTypeAssigneeList) {
+        if (CollectionUtil.isEmpty(eventTypeAssigneeList)) {
+            throw new ServiceException("请求参数不存在");
+        }
+        // 检查第一条记录的非空字段
+        EventTypeAssignee first = eventTypeAssigneeList.get(0);
+        if (first.getId() == null || first.getUserId() == null) {
+            throw new ServiceException("数据字段不完整");
+        }
+
+        List<Integer> types= eventTypeAssigneeList.stream().map(
+                eventTypeAssignee ->{
+                    return eventTypeAssignee.getType();
+                }).collect(Collectors.toList());
+        EventTypeAssigneeVO eventTypeAssigneeVO = new EventTypeAssigneeVO();
+        eventTypeAssigneeVO.setId(first.getId());
+
+        // 将 用户id  转为 人口id 返回
+        eventTypeAssigneeVO.setPersonId(first.getUserId());
+        eventTypeAssigneeVO.setUpdateTime(first.getUpdateTime());
+        eventTypeAssigneeVO.setCreateTime(first.getCreateTime());
+        eventTypeAssigneeVO.setTypes(types);
+
+        return eventTypeAssigneeVO;
+    }
+
+
+    /**
+     * 根据人口id 获取事件负责人类型分配包装类
+     *
+     * @param personId
+     * @return
+     */
+    @Override
+    public EventTypeAssigneeVO getEventTypeAssigneeById(int personId) {
+        if (personId <= 0 || ObjectUtil.isEmpty(personId)) {
+            throw new ServiceException("Id不能为空或Id异常");
+        }
+        // 通过人口id 获取用户id
+        Integer userId = getUserId(personId);
+
+        QueryWrapper<EventTypeAssignee> wrapper = new QueryWrapper<>();
+        wrapper.eq("user_id",userId);
+        List<EventTypeAssignee> eventTypeAssigneeList = this.list(wrapper);
+        return getEventTypeAssigneeVO(eventTypeAssigneeList);
+    }
+
+
+    /**
+     * 根据事件类型获取 事件负责人列表(未包含管理员)
+     *
+     * @param type
+     * @return
+     */
+    @Override
+    public List<PersonInfoVO> getListEventPersonInfoVO(Integer type) {
+        if (type == null) {
+            throw new ServiceException("请求参数错误");
+        }
+        QueryWrapper<EventTypeAssignee> wrapper = new QueryWrapper<>();
+        wrapper.eq("type", type);
+        List<EventTypeAssignee> eventTypeAssigneeList = this.list(wrapper);
+        if (eventTypeAssigneeList.isEmpty()){
+            return new ArrayList<>();
+        }
+        // 从 eventTypeAssigneeList 中 获取 userId 列表
+        List<Integer> userIds = eventTypeAssigneeList.stream().map(eventTypeAssignee -> {
+            return eventTypeAssignee.getUserId();
+        }).collect(Collectors.toList());
+        return personInfoService.getPersonInfoVOListByUserIds(userIds);
+    }
+
+
+    /**
+     * 分页获取事件负责人分配列表
+     *
+     * @param eventTypeAssignQueryRequest
+     * @return 返回 对应类型下的负责人列表
+     */
+    @Override
+    public Page<PersonInfoVO> getListEventPersonInfoVOByPage(EventTypeAssigneeQueryRequest eventTypeAssignQueryRequest) {
+        long pageNum = eventTypeAssignQueryRequest.getPageNum();
+        long size = eventTypeAssignQueryRequest.getPageSize();
+        Integer id = eventTypeAssignQueryRequest.getId();
+        Integer type = eventTypeAssignQueryRequest.getType();
+        String sortField = eventTypeAssignQueryRequest.getSortField();
+        String sortOrder = eventTypeAssignQueryRequest.getSortOrder();
+
+        // 1. 分页查询
+        QueryWrapper<EventTypeAssignee> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq(ObjectUtil.isNotEmpty(id), "id", id);
+        queryWrapper.eq(ObjectUtil.isNotEmpty(type), "type", type);
+        queryWrapper.orderBy(StrUtil.isNotEmpty(sortField), "ascend".equals(sortOrder), sortField);
+        List<EventTypeAssignee> eventTypeAssigneeList = this.list(queryWrapper);
+
+        // 从 eventTypeAssigneeList 中 获取 userId 列表
+        List<Integer> userIds = eventTypeAssigneeList.stream().map(eventTypeAssignee -> {
+            return eventTypeAssignee.getUserId();
+        }).collect(Collectors.toList());
+        // 获取 负责人列表
+        List<PersonInfoVO> eventPersonInfoVOList = personInfoService.getPersonInfoVOListByUserIds(userIds);
+
+        // 构造分页 计算分页数据
+        List<PersonInfoVO> pageData = eventPersonInfoVOList.stream()
+                .skip((pageNum - 1) * size)
+                .limit(size)
+                .collect(Collectors.toList());
+        int total = eventPersonInfoVOList.size();
+        Page<PersonInfoVO> resultPage = new Page<>(pageNum, size, total);
+        resultPage.setRecords(pageData);
+        return resultPage;
+    }
+
+}

+ 3 - 2
app-admin/src/main/resources/mapper/web/EventAssignMapper.xml

@@ -7,7 +7,7 @@
     <resultMap id="BaseResultMap" type="com.ruoyi.web.domain.entity.EventAssign">
             <id property="id" column="id" jdbcType="INTEGER"/>
             <result property="eventId" column="event_id" jdbcType="INTEGER"/>
-            <result property="personId" column="person_id" jdbcType="INTEGER"/>
+        <result property="userId" column="user_id" jdbcType="INTEGER"/>
             <result property="status" column="status" jdbcType="CHAR"/>
             <result property="isReassign" column="is_reassign" jdbcType="CHAR"/>
             <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
@@ -15,7 +15,8 @@
     </resultMap>
 
     <sql id="Base_Column_List">
-        id,event_id,person_id,
+        id
+        ,event_id,user_id,
         status,is_reassign,create_time,
         update_time
     </sql>

+ 19 - 0
app-admin/src/main/resources/mapper/web/EventTypeAssigneeMapper.xml

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.web.mapper.EventTypeAssigneeMapper">
+
+    <resultMap id="BaseResultMap" type="com.ruoyi.web.domain.entity.EventTypeAssignee">
+            <id property="id" column="id" jdbcType="INTEGER"/>
+            <result property="type" column="type" jdbcType="INTEGER"/>
+            <result property="userId" column="user_id" jdbcType="INTEGER"/>
+            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+            <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,type,user_id,
+        create_time,update_time
+    </sql>
+</mapper>

+ 0 - 8
app-system/src/main/java/com/ruoyi/system/service/ISysUserService.java

@@ -213,12 +213,4 @@ public interface ISysUserService
      */
     List<Long> selectUserIdsByRoleKeysForEvent(List<String> roleKeys);
 
-    /**
-     * 根据人口id列表 获取 系统用户 id列表
-     *
-     * @param personIds
-     * @return
-     */
-    List<Integer> getUserIdListByPersonIds(List<Integer> personIds);
-
 }

+ 0 - 12
app-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java

@@ -520,17 +520,5 @@ public class SysUserServiceImpl implements ISysUserService
         return userMapper.selectUserIdsByRoleKeys(roleKeys);
     }
 
-    /**
-     * 根据人口id列表 获取 系统用户 id列表
-     *
-     * @param personIds
-     * @return
-     */
-    @Override
-    public List<Integer> getUserIdListByPersonIds(List<Integer> personIds) {
-
-        return Collections.emptyList();
-    }
-
 
 }

+ 14 - 3
sql/sql.sql

@@ -370,19 +370,30 @@ CREATE TABLE event (
 CREATE TABLE event_assign (
   id int PRIMARY KEY AUTO_INCREMENT COMMENT '分配ID',
   event_id int NOT NULL COMMENT '事件ID',
-  person_id int NOT NULL COMMENT '负责人ID',
+  user_id int NOT NULL COMMENT '负责人ID',
   status char(1) DEFAULT '0' COMMENT '状态(0未完结 1本人已完结 2其他人已完结)',
   is_reassign char(1) DEFAULT '0' COMMENT '是否重新分配(0否 1是)',
   create_time datetime default CURRENT_TIMESTAMP not null comment '创建时间',
   update_time datetime default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '修改时间',
-  UNIQUE KEY `uk_event_user` (`event_id`, `person_id`),  -- 联合唯一索引
+  UNIQUE KEY `uk_event_user` (`event_id`, `user_id`),  -- 联合唯一索引
   KEY `idx_event_status` (`event_id`, `status`),
-  KEY `idx_user_status` (`person_id`, `status`)
+  KEY `idx_user_status` (`user_id`, `status`)
 ) ENGINE=InnoDB COMMENT='事件负责人分配表';
 
 -- 某个事件的处理人 只需要在  查询时 查询 事件id 且 状态为1的即可 因为其他负责人的数据状态为2
 
 
+-- 事件类型负责人表
+CREATE TABLE event_type_assignee (
+  id int PRIMARY KEY AUTO_INCREMENT COMMENT 'ID',
+  type int NOT NULL COMMENT '事件类型(0-5,表示对应类型的负责人)',
+  user_id int NOT NULL COMMENT '负责人ID',
+  create_time datetime default CURRENT_TIMESTAMP not null comment '创建时间',
+  update_time datetime default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '修改时间',
+  UNIQUE KEY `uk_type_person` (`type`, `user_id`),
+  KEY `idx_type` (`type`),
+  KEY `idx_person` (`user_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='事件类型负责人配置表';