diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java new file mode 100644 index 0000000..1ca5eb1 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java @@ -0,0 +1,63 @@ +package com.casic.missiles.modular.device.enums; + +/** + * wvp设备类型转换 + * + * @author lwh + * @Date 2017年1月10日 下午9:54:13 + */ +public enum AvDeptEnum { + + DEPT0("0066", "801",0L), + DEPT1("0059", "699厂",1L), + DEPT2("0055", "283厂",1L), + DEPT3("0022", "201所",1L), + DEPT4("0027", "206所",1L), + DEPT5("0013", "23所",1L); + + String code; + String message; + Long deptId; + AvDeptEnum(String code, String message, Long deptId) { + this.code = code; + this.message = message; + this.deptId = deptId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public static AvDeptEnum valueOfCode(String value) { + if (value == null) { + return null; + } else { + for (AvDeptEnum ms : AvDeptEnum.values()) { + if (ms.getCode().equals(value)) { + return ms; + } + } + return null; + } + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java new file mode 100644 index 0000000..1ca5eb1 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java @@ -0,0 +1,63 @@ +package com.casic.missiles.modular.device.enums; + +/** + * wvp设备类型转换 + * + * @author lwh + * @Date 2017年1月10日 下午9:54:13 + */ +public enum AvDeptEnum { + + DEPT0("0066", "801",0L), + DEPT1("0059", "699厂",1L), + DEPT2("0055", "283厂",1L), + DEPT3("0022", "201所",1L), + DEPT4("0027", "206所",1L), + DEPT5("0013", "23所",1L); + + String code; + String message; + Long deptId; + AvDeptEnum(String code, String message, Long deptId) { + this.code = code; + this.message = message; + this.deptId = deptId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public static AvDeptEnum valueOfCode(String value) { + if (value == null) { + return null; + } else { + for (AvDeptEnum ms : AvDeptEnum.values()) { + if (ms.getCode().equals(value)) { + return ms; + } + } + return null; + } + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java new file mode 100644 index 0000000..573d0e2 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.task; + +import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; + +public class Test { + public static void main(String[] args) { + System.out.println(AvStatusTypeEnum.valueOfType(new Integer(1)).getMessage()); + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java new file mode 100644 index 0000000..1ca5eb1 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java @@ -0,0 +1,63 @@ +package com.casic.missiles.modular.device.enums; + +/** + * wvp设备类型转换 + * + * @author lwh + * @Date 2017年1月10日 下午9:54:13 + */ +public enum AvDeptEnum { + + DEPT0("0066", "801",0L), + DEPT1("0059", "699厂",1L), + DEPT2("0055", "283厂",1L), + DEPT3("0022", "201所",1L), + DEPT4("0027", "206所",1L), + DEPT5("0013", "23所",1L); + + String code; + String message; + Long deptId; + AvDeptEnum(String code, String message, Long deptId) { + this.code = code; + this.message = message; + this.deptId = deptId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public static AvDeptEnum valueOfCode(String value) { + if (value == null) { + return null; + } else { + for (AvDeptEnum ms : AvDeptEnum.values()) { + if (ms.getCode().equals(value)) { + return ms; + } + } + return null; + } + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java new file mode 100644 index 0000000..573d0e2 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.task; + +import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; + +public class Test { + public static void main(String[] args) { + System.out.println(AvStatusTypeEnum.valueOfType(new Integer(1)).getMessage()); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java new file mode 100644 index 0000000..7c06c67 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java @@ -0,0 +1,77 @@ +package com.casic.missiles.modular.device.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpSession; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class RiskSyncController extends BaseController { + @Resource + private IClientAuthService clientAuthService; + @Resource + private AbstractDeptService deptService; + @Resource + private AbstractUserService userService; + @PostMapping("/client/login") + @ResponseBody + public ResponseData login(@RequestBody RiskLoginForm deviceLoginForm, HttpSession session) { + return clientAuthService.login(deviceLoginForm, session); + } + + /** + * 全量组织信息读取 + * + * @return + */ + @PostMapping("/dept/list") + @ResponseBody + public ResponseDataDTO> dept() { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = deptService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量用户信息读取 + * + * @return + */ + @PostMapping("/user/list") + @ResponseBody + public ResponseDataDTO> user() { + //todo 此处租户拦截需移除 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量设备信息读取 + * + * @return + */ + @PostMapping("/device/list") + @ResponseBody + public ResponseDataDTO> device() { + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java new file mode 100644 index 0000000..1ca5eb1 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java @@ -0,0 +1,63 @@ +package com.casic.missiles.modular.device.enums; + +/** + * wvp设备类型转换 + * + * @author lwh + * @Date 2017年1月10日 下午9:54:13 + */ +public enum AvDeptEnum { + + DEPT0("0066", "801",0L), + DEPT1("0059", "699厂",1L), + DEPT2("0055", "283厂",1L), + DEPT3("0022", "201所",1L), + DEPT4("0027", "206所",1L), + DEPT5("0013", "23所",1L); + + String code; + String message; + Long deptId; + AvDeptEnum(String code, String message, Long deptId) { + this.code = code; + this.message = message; + this.deptId = deptId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public static AvDeptEnum valueOfCode(String value) { + if (value == null) { + return null; + } else { + for (AvDeptEnum ms : AvDeptEnum.values()) { + if (ms.getCode().equals(value)) { + return ms; + } + } + return null; + } + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java new file mode 100644 index 0000000..573d0e2 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.task; + +import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; + +public class Test { + public static void main(String[] args) { + System.out.println(AvStatusTypeEnum.valueOfType(new Integer(1)).getMessage()); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java new file mode 100644 index 0000000..7c06c67 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java @@ -0,0 +1,77 @@ +package com.casic.missiles.modular.device.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpSession; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class RiskSyncController extends BaseController { + @Resource + private IClientAuthService clientAuthService; + @Resource + private AbstractDeptService deptService; + @Resource + private AbstractUserService userService; + @PostMapping("/client/login") + @ResponseBody + public ResponseData login(@RequestBody RiskLoginForm deviceLoginForm, HttpSession session) { + return clientAuthService.login(deviceLoginForm, session); + } + + /** + * 全量组织信息读取 + * + * @return + */ + @PostMapping("/dept/list") + @ResponseBody + public ResponseDataDTO> dept() { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = deptService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量用户信息读取 + * + * @return + */ + @PostMapping("/user/list") + @ResponseBody + public ResponseDataDTO> user() { + //todo 此处租户拦截需移除 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量设备信息读取 + * + * @return + */ + @PostMapping("/device/list") + @ResponseBody + public ResponseDataDTO> device() { + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java new file mode 100644 index 0000000..5e5b890 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class UserSyncController extends BaseController { + + @Resource + private IBusDeviceInfoService busDeviceInfoService; + + /** + * 登录用户授权设备权限查看 + * @return + */ + @GetMapping("/device/permissions") + @ResponseBody + public ResponseDataDTO> devicePermissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } + + /** + * 登录用户风险点授权查询 + * @return + */ + @GetMapping("/permissions") + @ResponseBody + public ResponseDataDTO> permissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java new file mode 100644 index 0000000..1ca5eb1 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java @@ -0,0 +1,63 @@ +package com.casic.missiles.modular.device.enums; + +/** + * wvp设备类型转换 + * + * @author lwh + * @Date 2017年1月10日 下午9:54:13 + */ +public enum AvDeptEnum { + + DEPT0("0066", "801",0L), + DEPT1("0059", "699厂",1L), + DEPT2("0055", "283厂",1L), + DEPT3("0022", "201所",1L), + DEPT4("0027", "206所",1L), + DEPT5("0013", "23所",1L); + + String code; + String message; + Long deptId; + AvDeptEnum(String code, String message, Long deptId) { + this.code = code; + this.message = message; + this.deptId = deptId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public static AvDeptEnum valueOfCode(String value) { + if (value == null) { + return null; + } else { + for (AvDeptEnum ms : AvDeptEnum.values()) { + if (ms.getCode().equals(value)) { + return ms; + } + } + return null; + } + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java new file mode 100644 index 0000000..573d0e2 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.task; + +import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; + +public class Test { + public static void main(String[] args) { + System.out.println(AvStatusTypeEnum.valueOfType(new Integer(1)).getMessage()); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java new file mode 100644 index 0000000..7c06c67 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java @@ -0,0 +1,77 @@ +package com.casic.missiles.modular.device.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpSession; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class RiskSyncController extends BaseController { + @Resource + private IClientAuthService clientAuthService; + @Resource + private AbstractDeptService deptService; + @Resource + private AbstractUserService userService; + @PostMapping("/client/login") + @ResponseBody + public ResponseData login(@RequestBody RiskLoginForm deviceLoginForm, HttpSession session) { + return clientAuthService.login(deviceLoginForm, session); + } + + /** + * 全量组织信息读取 + * + * @return + */ + @PostMapping("/dept/list") + @ResponseBody + public ResponseDataDTO> dept() { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = deptService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量用户信息读取 + * + * @return + */ + @PostMapping("/user/list") + @ResponseBody + public ResponseDataDTO> user() { + //todo 此处租户拦截需移除 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量设备信息读取 + * + * @return + */ + @PostMapping("/device/list") + @ResponseBody + public ResponseDataDTO> device() { + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java new file mode 100644 index 0000000..5e5b890 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class UserSyncController extends BaseController { + + @Resource + private IBusDeviceInfoService busDeviceInfoService; + + /** + * 登录用户授权设备权限查看 + * @return + */ + @GetMapping("/device/permissions") + @ResponseBody + public ResponseDataDTO> devicePermissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } + + /** + * 登录用户风险点授权查询 + * @return + */ + @GetMapping("/permissions") + @ResponseBody + public ResponseDataDTO> permissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java new file mode 100644 index 0000000..07b8df8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +/** + * 设备登录接口 + */ +@Data +public class RiskLoginForm { + /** + * 设备编码 + */ + private String clientId; + + /** + * 时间戳 + */ + private Long time; + + /** + * 加密后数据 加密格式sn+时间戳 时效性为6小时 + */ + private String secret; + + /** + * 设备登录注册IP + */ + private String ip; + + /** + * 设备登录注册port + */ + private String port; +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java new file mode 100644 index 0000000..1ca5eb1 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java @@ -0,0 +1,63 @@ +package com.casic.missiles.modular.device.enums; + +/** + * wvp设备类型转换 + * + * @author lwh + * @Date 2017年1月10日 下午9:54:13 + */ +public enum AvDeptEnum { + + DEPT0("0066", "801",0L), + DEPT1("0059", "699厂",1L), + DEPT2("0055", "283厂",1L), + DEPT3("0022", "201所",1L), + DEPT4("0027", "206所",1L), + DEPT5("0013", "23所",1L); + + String code; + String message; + Long deptId; + AvDeptEnum(String code, String message, Long deptId) { + this.code = code; + this.message = message; + this.deptId = deptId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public static AvDeptEnum valueOfCode(String value) { + if (value == null) { + return null; + } else { + for (AvDeptEnum ms : AvDeptEnum.values()) { + if (ms.getCode().equals(value)) { + return ms; + } + } + return null; + } + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java new file mode 100644 index 0000000..573d0e2 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.task; + +import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; + +public class Test { + public static void main(String[] args) { + System.out.println(AvStatusTypeEnum.valueOfType(new Integer(1)).getMessage()); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java new file mode 100644 index 0000000..7c06c67 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java @@ -0,0 +1,77 @@ +package com.casic.missiles.modular.device.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpSession; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class RiskSyncController extends BaseController { + @Resource + private IClientAuthService clientAuthService; + @Resource + private AbstractDeptService deptService; + @Resource + private AbstractUserService userService; + @PostMapping("/client/login") + @ResponseBody + public ResponseData login(@RequestBody RiskLoginForm deviceLoginForm, HttpSession session) { + return clientAuthService.login(deviceLoginForm, session); + } + + /** + * 全量组织信息读取 + * + * @return + */ + @PostMapping("/dept/list") + @ResponseBody + public ResponseDataDTO> dept() { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = deptService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量用户信息读取 + * + * @return + */ + @PostMapping("/user/list") + @ResponseBody + public ResponseDataDTO> user() { + //todo 此处租户拦截需移除 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量设备信息读取 + * + * @return + */ + @PostMapping("/device/list") + @ResponseBody + public ResponseDataDTO> device() { + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java new file mode 100644 index 0000000..5e5b890 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class UserSyncController extends BaseController { + + @Resource + private IBusDeviceInfoService busDeviceInfoService; + + /** + * 登录用户授权设备权限查看 + * @return + */ + @GetMapping("/device/permissions") + @ResponseBody + public ResponseDataDTO> devicePermissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } + + /** + * 登录用户风险点授权查询 + * @return + */ + @GetMapping("/permissions") + @ResponseBody + public ResponseDataDTO> permissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java new file mode 100644 index 0000000..07b8df8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +/** + * 设备登录接口 + */ +@Data +public class RiskLoginForm { + /** + * 设备编码 + */ + private String clientId; + + /** + * 时间戳 + */ + private Long time; + + /** + * 加密后数据 加密格式sn+时间戳 时效性为6小时 + */ + private String secret; + + /** + * 设备登录注册IP + */ + private String ip; + + /** + * 设备登录注册port + */ + private String port; +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java new file mode 100644 index 0000000..40fdb4b --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.device.service; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; + +import javax.servlet.http.HttpSession; + +public interface IClientAuthService { + /** + * @param deviceLoginForm + * @param session + * @return + */ + ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session); +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java new file mode 100644 index 0000000..1ca5eb1 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java @@ -0,0 +1,63 @@ +package com.casic.missiles.modular.device.enums; + +/** + * wvp设备类型转换 + * + * @author lwh + * @Date 2017年1月10日 下午9:54:13 + */ +public enum AvDeptEnum { + + DEPT0("0066", "801",0L), + DEPT1("0059", "699厂",1L), + DEPT2("0055", "283厂",1L), + DEPT3("0022", "201所",1L), + DEPT4("0027", "206所",1L), + DEPT5("0013", "23所",1L); + + String code; + String message; + Long deptId; + AvDeptEnum(String code, String message, Long deptId) { + this.code = code; + this.message = message; + this.deptId = deptId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public static AvDeptEnum valueOfCode(String value) { + if (value == null) { + return null; + } else { + for (AvDeptEnum ms : AvDeptEnum.values()) { + if (ms.getCode().equals(value)) { + return ms; + } + } + return null; + } + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java new file mode 100644 index 0000000..573d0e2 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.task; + +import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; + +public class Test { + public static void main(String[] args) { + System.out.println(AvStatusTypeEnum.valueOfType(new Integer(1)).getMessage()); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java new file mode 100644 index 0000000..7c06c67 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java @@ -0,0 +1,77 @@ +package com.casic.missiles.modular.device.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpSession; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class RiskSyncController extends BaseController { + @Resource + private IClientAuthService clientAuthService; + @Resource + private AbstractDeptService deptService; + @Resource + private AbstractUserService userService; + @PostMapping("/client/login") + @ResponseBody + public ResponseData login(@RequestBody RiskLoginForm deviceLoginForm, HttpSession session) { + return clientAuthService.login(deviceLoginForm, session); + } + + /** + * 全量组织信息读取 + * + * @return + */ + @PostMapping("/dept/list") + @ResponseBody + public ResponseDataDTO> dept() { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = deptService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量用户信息读取 + * + * @return + */ + @PostMapping("/user/list") + @ResponseBody + public ResponseDataDTO> user() { + //todo 此处租户拦截需移除 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量设备信息读取 + * + * @return + */ + @PostMapping("/device/list") + @ResponseBody + public ResponseDataDTO> device() { + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java new file mode 100644 index 0000000..5e5b890 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class UserSyncController extends BaseController { + + @Resource + private IBusDeviceInfoService busDeviceInfoService; + + /** + * 登录用户授权设备权限查看 + * @return + */ + @GetMapping("/device/permissions") + @ResponseBody + public ResponseDataDTO> devicePermissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } + + /** + * 登录用户风险点授权查询 + * @return + */ + @GetMapping("/permissions") + @ResponseBody + public ResponseDataDTO> permissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java new file mode 100644 index 0000000..07b8df8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +/** + * 设备登录接口 + */ +@Data +public class RiskLoginForm { + /** + * 设备编码 + */ + private String clientId; + + /** + * 时间戳 + */ + private Long time; + + /** + * 加密后数据 加密格式sn+时间戳 时效性为6小时 + */ + private String secret; + + /** + * 设备登录注册IP + */ + private String ip; + + /** + * 设备登录注册port + */ + private String port; +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java new file mode 100644 index 0000000..40fdb4b --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.device.service; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; + +import javax.servlet.http.HttpSession; + +public interface IClientAuthService { + /** + * @param deviceLoginForm + * @param session + * @return + */ + ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session); +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java new file mode 100644 index 0000000..576e857 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.device.service.impl; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import cn.hutool.jwt.JWT; +import cn.hutool.jwt.JWTUtil; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.util.IRiskCacheUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpSession; +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Service +public class ClientAuthServiceImpl implements IClientAuthService { + @Value("${casic.client.privateKey:MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALKcwHHOg0F6Zkq7GOVnOnTgvH9vSPXFFTOcEqOVBIBPBz7UNrEGkp1PhZ+oC4WVJAsDuot2e1fDZy9QS9HF92MmnYp9kuQRhGZjHctPnVZ0Kai5BES0ytHqPeauLyNXxOOS0YKYEUwpft4Z5Azw7bj3JWNvLrnTZvNld6FDvTslAgMBAAECgYAqN/kZLYpC+O6i7XSmDO95XwHPUXu6dDpdt5+EQR4OQh/hTwIaeAZB3uEj6vHGQomBfQEkI/5lsU97lIxHanbd+Hro7JyIhsGD5LR5XnZHVKzFiZW62OIU6FI9dlQNN8miiblnmyDwiMA3okaHl0O7qQjZ+IvY2csgmJc7AXpPpQJBAOhrhcfWFcgffj2O6HYNlBLFfbboc/ZzrEADDXKnxRSHlo5o8W+6gylG/L2NGtbag5S68B9VYzdkSQ1++5C+Ws8CQQDEu7h311PLEiKgqzGHpjzadQETmt/jMadaKQmT0TZwNVi6X8lR17U5hF8dAqZzUzr9kUC0HRIZhg4Uv1v3W3fLAkB4YPhxgJjXhjhEefg87Nt8vX1Xdx5Yz6CvpuUYNX0GHRQFvqUOUXQNtQ7CvorgLV1pc0lbcUZqMi8EJnj1hyJRAkEAjHXWm8GiMt+M15fCsi3vTq2xChVOekBuUsHv85iwvGZqJg7ThtpyqlEnM2g7/STUfkvhnXcQACclEI0blTy6BwJAPmFyhU+d0ejVpbc53TdrL2HqYYUHi/tTy/dtUa7lbypzdwwJ2M1Tv5PE8sQxr9tgMbebfxVb/RFKdiCCtzC4ng==}") + private String privateKey; + + @Override + public ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session) { + //固定秘钥解析 + try { + String str = RSAUtils.decrypt(deviceLoginForm.getSecret(), privateKey); + Long time = Long.valueOf(StrUtil.split(str, "_").get(1)); + //边缘盒子时差与服务时差不可超过24小时 + if (time == null || System.currentTimeMillis() - time > 3600 * 24 * 1000) { + return ResponseData.error("请求时间超时"); + } + deviceLoginForm.setTime(time); + } catch (Exception e) { + e.printStackTrace(); + return ResponseData.error("设备解析异常!"); + } + + try { + String token = this.createJwtToken(deviceLoginForm); + IRiskCacheUtil.put(token, token); + return ResponseData.success(token); + } catch (Exception e) { + log.error("设备登录异常:{}", e.getMessage()); + return ResponseData.error("登录异常,请联系管理员"); + } +} + /** + * token创建 + * + * @param loginForm 登录信息 + * @param device 设备信息 + * @return + * @throws Exception + */ + public String createJwtToken(RiskLoginForm loginForm) throws Exception { + Map payload = new HashMap<>(); + payload.put("clientId", loginForm.getClientId()); // 设备编号 + payload.put("time", loginForm.getTime()); // 请求时间 + + //RSA 解密 + String str = RSAUtils.decrypt(loginForm.getSecret(), privateKey); + String key = loginForm.getClientId()+"_" + loginForm.getTime() ; + if (!key.equals(str)) { + //秘钥验证失败 + throw new ServiceException(500,"秘钥验证失败"); + } + +// long exp = new Date().getTime() + 2 * 3600000; // 2小时后的时间戳 +// payload.put("exp", exp); + + // 创建JWT + String jwt = JWTUtil.createToken(payload, "token-203-202405".getBytes()); + + return jwt; + } + + /** + * token解析 + * + * @param jwtStr token + * @return + * @throws Exception + */ + public static RiskLoginForm parseToken(String jwtStr){ + JWT jwtObj = new JWTUtil().parseToken(jwtStr); + RiskLoginForm deviceLoginForm = new RiskLoginForm(); + deviceLoginForm.setClientId(Convert.toStr(jwtObj.getPayload("clientId"))); + return deviceLoginForm; + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java new file mode 100644 index 0000000..1ca5eb1 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java @@ -0,0 +1,63 @@ +package com.casic.missiles.modular.device.enums; + +/** + * wvp设备类型转换 + * + * @author lwh + * @Date 2017年1月10日 下午9:54:13 + */ +public enum AvDeptEnum { + + DEPT0("0066", "801",0L), + DEPT1("0059", "699厂",1L), + DEPT2("0055", "283厂",1L), + DEPT3("0022", "201所",1L), + DEPT4("0027", "206所",1L), + DEPT5("0013", "23所",1L); + + String code; + String message; + Long deptId; + AvDeptEnum(String code, String message, Long deptId) { + this.code = code; + this.message = message; + this.deptId = deptId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public static AvDeptEnum valueOfCode(String value) { + if (value == null) { + return null; + } else { + for (AvDeptEnum ms : AvDeptEnum.values()) { + if (ms.getCode().equals(value)) { + return ms; + } + } + return null; + } + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java new file mode 100644 index 0000000..573d0e2 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.task; + +import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; + +public class Test { + public static void main(String[] args) { + System.out.println(AvStatusTypeEnum.valueOfType(new Integer(1)).getMessage()); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java new file mode 100644 index 0000000..7c06c67 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java @@ -0,0 +1,77 @@ +package com.casic.missiles.modular.device.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpSession; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class RiskSyncController extends BaseController { + @Resource + private IClientAuthService clientAuthService; + @Resource + private AbstractDeptService deptService; + @Resource + private AbstractUserService userService; + @PostMapping("/client/login") + @ResponseBody + public ResponseData login(@RequestBody RiskLoginForm deviceLoginForm, HttpSession session) { + return clientAuthService.login(deviceLoginForm, session); + } + + /** + * 全量组织信息读取 + * + * @return + */ + @PostMapping("/dept/list") + @ResponseBody + public ResponseDataDTO> dept() { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = deptService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量用户信息读取 + * + * @return + */ + @PostMapping("/user/list") + @ResponseBody + public ResponseDataDTO> user() { + //todo 此处租户拦截需移除 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量设备信息读取 + * + * @return + */ + @PostMapping("/device/list") + @ResponseBody + public ResponseDataDTO> device() { + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java new file mode 100644 index 0000000..5e5b890 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class UserSyncController extends BaseController { + + @Resource + private IBusDeviceInfoService busDeviceInfoService; + + /** + * 登录用户授权设备权限查看 + * @return + */ + @GetMapping("/device/permissions") + @ResponseBody + public ResponseDataDTO> devicePermissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } + + /** + * 登录用户风险点授权查询 + * @return + */ + @GetMapping("/permissions") + @ResponseBody + public ResponseDataDTO> permissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java new file mode 100644 index 0000000..07b8df8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +/** + * 设备登录接口 + */ +@Data +public class RiskLoginForm { + /** + * 设备编码 + */ + private String clientId; + + /** + * 时间戳 + */ + private Long time; + + /** + * 加密后数据 加密格式sn+时间戳 时效性为6小时 + */ + private String secret; + + /** + * 设备登录注册IP + */ + private String ip; + + /** + * 设备登录注册port + */ + private String port; +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java new file mode 100644 index 0000000..40fdb4b --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.device.service; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; + +import javax.servlet.http.HttpSession; + +public interface IClientAuthService { + /** + * @param deviceLoginForm + * @param session + * @return + */ + ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session); +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java new file mode 100644 index 0000000..576e857 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.device.service.impl; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import cn.hutool.jwt.JWT; +import cn.hutool.jwt.JWTUtil; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.util.IRiskCacheUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpSession; +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Service +public class ClientAuthServiceImpl implements IClientAuthService { + @Value("${casic.client.privateKey:MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALKcwHHOg0F6Zkq7GOVnOnTgvH9vSPXFFTOcEqOVBIBPBz7UNrEGkp1PhZ+oC4WVJAsDuot2e1fDZy9QS9HF92MmnYp9kuQRhGZjHctPnVZ0Kai5BES0ytHqPeauLyNXxOOS0YKYEUwpft4Z5Azw7bj3JWNvLrnTZvNld6FDvTslAgMBAAECgYAqN/kZLYpC+O6i7XSmDO95XwHPUXu6dDpdt5+EQR4OQh/hTwIaeAZB3uEj6vHGQomBfQEkI/5lsU97lIxHanbd+Hro7JyIhsGD5LR5XnZHVKzFiZW62OIU6FI9dlQNN8miiblnmyDwiMA3okaHl0O7qQjZ+IvY2csgmJc7AXpPpQJBAOhrhcfWFcgffj2O6HYNlBLFfbboc/ZzrEADDXKnxRSHlo5o8W+6gylG/L2NGtbag5S68B9VYzdkSQ1++5C+Ws8CQQDEu7h311PLEiKgqzGHpjzadQETmt/jMadaKQmT0TZwNVi6X8lR17U5hF8dAqZzUzr9kUC0HRIZhg4Uv1v3W3fLAkB4YPhxgJjXhjhEefg87Nt8vX1Xdx5Yz6CvpuUYNX0GHRQFvqUOUXQNtQ7CvorgLV1pc0lbcUZqMi8EJnj1hyJRAkEAjHXWm8GiMt+M15fCsi3vTq2xChVOekBuUsHv85iwvGZqJg7ThtpyqlEnM2g7/STUfkvhnXcQACclEI0blTy6BwJAPmFyhU+d0ejVpbc53TdrL2HqYYUHi/tTy/dtUa7lbypzdwwJ2M1Tv5PE8sQxr9tgMbebfxVb/RFKdiCCtzC4ng==}") + private String privateKey; + + @Override + public ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session) { + //固定秘钥解析 + try { + String str = RSAUtils.decrypt(deviceLoginForm.getSecret(), privateKey); + Long time = Long.valueOf(StrUtil.split(str, "_").get(1)); + //边缘盒子时差与服务时差不可超过24小时 + if (time == null || System.currentTimeMillis() - time > 3600 * 24 * 1000) { + return ResponseData.error("请求时间超时"); + } + deviceLoginForm.setTime(time); + } catch (Exception e) { + e.printStackTrace(); + return ResponseData.error("设备解析异常!"); + } + + try { + String token = this.createJwtToken(deviceLoginForm); + IRiskCacheUtil.put(token, token); + return ResponseData.success(token); + } catch (Exception e) { + log.error("设备登录异常:{}", e.getMessage()); + return ResponseData.error("登录异常,请联系管理员"); + } +} + /** + * token创建 + * + * @param loginForm 登录信息 + * @param device 设备信息 + * @return + * @throws Exception + */ + public String createJwtToken(RiskLoginForm loginForm) throws Exception { + Map payload = new HashMap<>(); + payload.put("clientId", loginForm.getClientId()); // 设备编号 + payload.put("time", loginForm.getTime()); // 请求时间 + + //RSA 解密 + String str = RSAUtils.decrypt(loginForm.getSecret(), privateKey); + String key = loginForm.getClientId()+"_" + loginForm.getTime() ; + if (!key.equals(str)) { + //秘钥验证失败 + throw new ServiceException(500,"秘钥验证失败"); + } + +// long exp = new Date().getTime() + 2 * 3600000; // 2小时后的时间戳 +// payload.put("exp", exp); + + // 创建JWT + String jwt = JWTUtil.createToken(payload, "token-203-202405".getBytes()); + + return jwt; + } + + /** + * token解析 + * + * @param jwtStr token + * @return + * @throws Exception + */ + public static RiskLoginForm parseToken(String jwtStr){ + JWT jwtObj = new JWTUtil().parseToken(jwtStr); + RiskLoginForm deviceLoginForm = new RiskLoginForm(); + deviceLoginForm.setClientId(Convert.toStr(jwtObj.getPayload("clientId"))); + return deviceLoginForm; + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java new file mode 100644 index 0000000..0e91ac8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.util; +import cn.hutool.cache.Cache; +import cn.hutool.cache.CacheUtil; +/** + * token有效 + */ +public class IRiskCacheUtil { + /** + * 1小时内不活跃 会踢掉 + */ + private static Cache fifoCache = CacheUtil.newFIFOCache(1000, 1000 * 60 * 60); + + public static void put(String key, String value) { + fifoCache.put(key, value); + } + + public static String get(String key) { + return fifoCache.get(key); + } + + public static void remove(String key) { + fifoCache.remove(key); + } +} \ No newline at end of file diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java new file mode 100644 index 0000000..1ca5eb1 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java @@ -0,0 +1,63 @@ +package com.casic.missiles.modular.device.enums; + +/** + * wvp设备类型转换 + * + * @author lwh + * @Date 2017年1月10日 下午9:54:13 + */ +public enum AvDeptEnum { + + DEPT0("0066", "801",0L), + DEPT1("0059", "699厂",1L), + DEPT2("0055", "283厂",1L), + DEPT3("0022", "201所",1L), + DEPT4("0027", "206所",1L), + DEPT5("0013", "23所",1L); + + String code; + String message; + Long deptId; + AvDeptEnum(String code, String message, Long deptId) { + this.code = code; + this.message = message; + this.deptId = deptId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public static AvDeptEnum valueOfCode(String value) { + if (value == null) { + return null; + } else { + for (AvDeptEnum ms : AvDeptEnum.values()) { + if (ms.getCode().equals(value)) { + return ms; + } + } + return null; + } + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java new file mode 100644 index 0000000..573d0e2 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.task; + +import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; + +public class Test { + public static void main(String[] args) { + System.out.println(AvStatusTypeEnum.valueOfType(new Integer(1)).getMessage()); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java new file mode 100644 index 0000000..7c06c67 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java @@ -0,0 +1,77 @@ +package com.casic.missiles.modular.device.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpSession; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class RiskSyncController extends BaseController { + @Resource + private IClientAuthService clientAuthService; + @Resource + private AbstractDeptService deptService; + @Resource + private AbstractUserService userService; + @PostMapping("/client/login") + @ResponseBody + public ResponseData login(@RequestBody RiskLoginForm deviceLoginForm, HttpSession session) { + return clientAuthService.login(deviceLoginForm, session); + } + + /** + * 全量组织信息读取 + * + * @return + */ + @PostMapping("/dept/list") + @ResponseBody + public ResponseDataDTO> dept() { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = deptService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量用户信息读取 + * + * @return + */ + @PostMapping("/user/list") + @ResponseBody + public ResponseDataDTO> user() { + //todo 此处租户拦截需移除 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量设备信息读取 + * + * @return + */ + @PostMapping("/device/list") + @ResponseBody + public ResponseDataDTO> device() { + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java new file mode 100644 index 0000000..5e5b890 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class UserSyncController extends BaseController { + + @Resource + private IBusDeviceInfoService busDeviceInfoService; + + /** + * 登录用户授权设备权限查看 + * @return + */ + @GetMapping("/device/permissions") + @ResponseBody + public ResponseDataDTO> devicePermissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } + + /** + * 登录用户风险点授权查询 + * @return + */ + @GetMapping("/permissions") + @ResponseBody + public ResponseDataDTO> permissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java new file mode 100644 index 0000000..07b8df8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +/** + * 设备登录接口 + */ +@Data +public class RiskLoginForm { + /** + * 设备编码 + */ + private String clientId; + + /** + * 时间戳 + */ + private Long time; + + /** + * 加密后数据 加密格式sn+时间戳 时效性为6小时 + */ + private String secret; + + /** + * 设备登录注册IP + */ + private String ip; + + /** + * 设备登录注册port + */ + private String port; +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java new file mode 100644 index 0000000..40fdb4b --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.device.service; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; + +import javax.servlet.http.HttpSession; + +public interface IClientAuthService { + /** + * @param deviceLoginForm + * @param session + * @return + */ + ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session); +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java new file mode 100644 index 0000000..576e857 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.device.service.impl; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import cn.hutool.jwt.JWT; +import cn.hutool.jwt.JWTUtil; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.util.IRiskCacheUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpSession; +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Service +public class ClientAuthServiceImpl implements IClientAuthService { + @Value("${casic.client.privateKey:MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALKcwHHOg0F6Zkq7GOVnOnTgvH9vSPXFFTOcEqOVBIBPBz7UNrEGkp1PhZ+oC4WVJAsDuot2e1fDZy9QS9HF92MmnYp9kuQRhGZjHctPnVZ0Kai5BES0ytHqPeauLyNXxOOS0YKYEUwpft4Z5Azw7bj3JWNvLrnTZvNld6FDvTslAgMBAAECgYAqN/kZLYpC+O6i7XSmDO95XwHPUXu6dDpdt5+EQR4OQh/hTwIaeAZB3uEj6vHGQomBfQEkI/5lsU97lIxHanbd+Hro7JyIhsGD5LR5XnZHVKzFiZW62OIU6FI9dlQNN8miiblnmyDwiMA3okaHl0O7qQjZ+IvY2csgmJc7AXpPpQJBAOhrhcfWFcgffj2O6HYNlBLFfbboc/ZzrEADDXKnxRSHlo5o8W+6gylG/L2NGtbag5S68B9VYzdkSQ1++5C+Ws8CQQDEu7h311PLEiKgqzGHpjzadQETmt/jMadaKQmT0TZwNVi6X8lR17U5hF8dAqZzUzr9kUC0HRIZhg4Uv1v3W3fLAkB4YPhxgJjXhjhEefg87Nt8vX1Xdx5Yz6CvpuUYNX0GHRQFvqUOUXQNtQ7CvorgLV1pc0lbcUZqMi8EJnj1hyJRAkEAjHXWm8GiMt+M15fCsi3vTq2xChVOekBuUsHv85iwvGZqJg7ThtpyqlEnM2g7/STUfkvhnXcQACclEI0blTy6BwJAPmFyhU+d0ejVpbc53TdrL2HqYYUHi/tTy/dtUa7lbypzdwwJ2M1Tv5PE8sQxr9tgMbebfxVb/RFKdiCCtzC4ng==}") + private String privateKey; + + @Override + public ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session) { + //固定秘钥解析 + try { + String str = RSAUtils.decrypt(deviceLoginForm.getSecret(), privateKey); + Long time = Long.valueOf(StrUtil.split(str, "_").get(1)); + //边缘盒子时差与服务时差不可超过24小时 + if (time == null || System.currentTimeMillis() - time > 3600 * 24 * 1000) { + return ResponseData.error("请求时间超时"); + } + deviceLoginForm.setTime(time); + } catch (Exception e) { + e.printStackTrace(); + return ResponseData.error("设备解析异常!"); + } + + try { + String token = this.createJwtToken(deviceLoginForm); + IRiskCacheUtil.put(token, token); + return ResponseData.success(token); + } catch (Exception e) { + log.error("设备登录异常:{}", e.getMessage()); + return ResponseData.error("登录异常,请联系管理员"); + } +} + /** + * token创建 + * + * @param loginForm 登录信息 + * @param device 设备信息 + * @return + * @throws Exception + */ + public String createJwtToken(RiskLoginForm loginForm) throws Exception { + Map payload = new HashMap<>(); + payload.put("clientId", loginForm.getClientId()); // 设备编号 + payload.put("time", loginForm.getTime()); // 请求时间 + + //RSA 解密 + String str = RSAUtils.decrypt(loginForm.getSecret(), privateKey); + String key = loginForm.getClientId()+"_" + loginForm.getTime() ; + if (!key.equals(str)) { + //秘钥验证失败 + throw new ServiceException(500,"秘钥验证失败"); + } + +// long exp = new Date().getTime() + 2 * 3600000; // 2小时后的时间戳 +// payload.put("exp", exp); + + // 创建JWT + String jwt = JWTUtil.createToken(payload, "token-203-202405".getBytes()); + + return jwt; + } + + /** + * token解析 + * + * @param jwtStr token + * @return + * @throws Exception + */ + public static RiskLoginForm parseToken(String jwtStr){ + JWT jwtObj = new JWTUtil().parseToken(jwtStr); + RiskLoginForm deviceLoginForm = new RiskLoginForm(); + deviceLoginForm.setClientId(Convert.toStr(jwtObj.getPayload("clientId"))); + return deviceLoginForm; + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java new file mode 100644 index 0000000..0e91ac8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.util; +import cn.hutool.cache.Cache; +import cn.hutool.cache.CacheUtil; +/** + * token有效 + */ +public class IRiskCacheUtil { + /** + * 1小时内不活跃 会踢掉 + */ + private static Cache fifoCache = CacheUtil.newFIFOCache(1000, 1000 * 60 * 60); + + public static void put(String key, String value) { + fifoCache.put(key, value); + } + + public static String get(String key) { + return fifoCache.get(key); + } + + public static void remove(String key) { + fifoCache.remove(key); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java new file mode 100644 index 0000000..805c32a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceGroupDict extends AbstractDictMap { + + @Override + public void init() { + //检索条件 + put("groupName", "分组名称"); + put("startTime", "起始时间"); + put("endTime", "结束时间"); + //新增修改属性 + put("cameraIds", "设备国标号"); + put("personIds", "人员主键集合"); + put("description","备注"); + put("id","主键"); + put("ids","主键集合"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java new file mode 100644 index 0000000..1ca5eb1 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java @@ -0,0 +1,63 @@ +package com.casic.missiles.modular.device.enums; + +/** + * wvp设备类型转换 + * + * @author lwh + * @Date 2017年1月10日 下午9:54:13 + */ +public enum AvDeptEnum { + + DEPT0("0066", "801",0L), + DEPT1("0059", "699厂",1L), + DEPT2("0055", "283厂",1L), + DEPT3("0022", "201所",1L), + DEPT4("0027", "206所",1L), + DEPT5("0013", "23所",1L); + + String code; + String message; + Long deptId; + AvDeptEnum(String code, String message, Long deptId) { + this.code = code; + this.message = message; + this.deptId = deptId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public static AvDeptEnum valueOfCode(String value) { + if (value == null) { + return null; + } else { + for (AvDeptEnum ms : AvDeptEnum.values()) { + if (ms.getCode().equals(value)) { + return ms; + } + } + return null; + } + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java new file mode 100644 index 0000000..573d0e2 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.task; + +import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; + +public class Test { + public static void main(String[] args) { + System.out.println(AvStatusTypeEnum.valueOfType(new Integer(1)).getMessage()); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java new file mode 100644 index 0000000..7c06c67 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java @@ -0,0 +1,77 @@ +package com.casic.missiles.modular.device.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpSession; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class RiskSyncController extends BaseController { + @Resource + private IClientAuthService clientAuthService; + @Resource + private AbstractDeptService deptService; + @Resource + private AbstractUserService userService; + @PostMapping("/client/login") + @ResponseBody + public ResponseData login(@RequestBody RiskLoginForm deviceLoginForm, HttpSession session) { + return clientAuthService.login(deviceLoginForm, session); + } + + /** + * 全量组织信息读取 + * + * @return + */ + @PostMapping("/dept/list") + @ResponseBody + public ResponseDataDTO> dept() { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = deptService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量用户信息读取 + * + * @return + */ + @PostMapping("/user/list") + @ResponseBody + public ResponseDataDTO> user() { + //todo 此处租户拦截需移除 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量设备信息读取 + * + * @return + */ + @PostMapping("/device/list") + @ResponseBody + public ResponseDataDTO> device() { + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java new file mode 100644 index 0000000..5e5b890 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class UserSyncController extends BaseController { + + @Resource + private IBusDeviceInfoService busDeviceInfoService; + + /** + * 登录用户授权设备权限查看 + * @return + */ + @GetMapping("/device/permissions") + @ResponseBody + public ResponseDataDTO> devicePermissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } + + /** + * 登录用户风险点授权查询 + * @return + */ + @GetMapping("/permissions") + @ResponseBody + public ResponseDataDTO> permissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java new file mode 100644 index 0000000..07b8df8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +/** + * 设备登录接口 + */ +@Data +public class RiskLoginForm { + /** + * 设备编码 + */ + private String clientId; + + /** + * 时间戳 + */ + private Long time; + + /** + * 加密后数据 加密格式sn+时间戳 时效性为6小时 + */ + private String secret; + + /** + * 设备登录注册IP + */ + private String ip; + + /** + * 设备登录注册port + */ + private String port; +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java new file mode 100644 index 0000000..40fdb4b --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.device.service; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; + +import javax.servlet.http.HttpSession; + +public interface IClientAuthService { + /** + * @param deviceLoginForm + * @param session + * @return + */ + ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session); +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java new file mode 100644 index 0000000..576e857 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.device.service.impl; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import cn.hutool.jwt.JWT; +import cn.hutool.jwt.JWTUtil; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.util.IRiskCacheUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpSession; +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Service +public class ClientAuthServiceImpl implements IClientAuthService { + @Value("${casic.client.privateKey:MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALKcwHHOg0F6Zkq7GOVnOnTgvH9vSPXFFTOcEqOVBIBPBz7UNrEGkp1PhZ+oC4WVJAsDuot2e1fDZy9QS9HF92MmnYp9kuQRhGZjHctPnVZ0Kai5BES0ytHqPeauLyNXxOOS0YKYEUwpft4Z5Azw7bj3JWNvLrnTZvNld6FDvTslAgMBAAECgYAqN/kZLYpC+O6i7XSmDO95XwHPUXu6dDpdt5+EQR4OQh/hTwIaeAZB3uEj6vHGQomBfQEkI/5lsU97lIxHanbd+Hro7JyIhsGD5LR5XnZHVKzFiZW62OIU6FI9dlQNN8miiblnmyDwiMA3okaHl0O7qQjZ+IvY2csgmJc7AXpPpQJBAOhrhcfWFcgffj2O6HYNlBLFfbboc/ZzrEADDXKnxRSHlo5o8W+6gylG/L2NGtbag5S68B9VYzdkSQ1++5C+Ws8CQQDEu7h311PLEiKgqzGHpjzadQETmt/jMadaKQmT0TZwNVi6X8lR17U5hF8dAqZzUzr9kUC0HRIZhg4Uv1v3W3fLAkB4YPhxgJjXhjhEefg87Nt8vX1Xdx5Yz6CvpuUYNX0GHRQFvqUOUXQNtQ7CvorgLV1pc0lbcUZqMi8EJnj1hyJRAkEAjHXWm8GiMt+M15fCsi3vTq2xChVOekBuUsHv85iwvGZqJg7ThtpyqlEnM2g7/STUfkvhnXcQACclEI0blTy6BwJAPmFyhU+d0ejVpbc53TdrL2HqYYUHi/tTy/dtUa7lbypzdwwJ2M1Tv5PE8sQxr9tgMbebfxVb/RFKdiCCtzC4ng==}") + private String privateKey; + + @Override + public ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session) { + //固定秘钥解析 + try { + String str = RSAUtils.decrypt(deviceLoginForm.getSecret(), privateKey); + Long time = Long.valueOf(StrUtil.split(str, "_").get(1)); + //边缘盒子时差与服务时差不可超过24小时 + if (time == null || System.currentTimeMillis() - time > 3600 * 24 * 1000) { + return ResponseData.error("请求时间超时"); + } + deviceLoginForm.setTime(time); + } catch (Exception e) { + e.printStackTrace(); + return ResponseData.error("设备解析异常!"); + } + + try { + String token = this.createJwtToken(deviceLoginForm); + IRiskCacheUtil.put(token, token); + return ResponseData.success(token); + } catch (Exception e) { + log.error("设备登录异常:{}", e.getMessage()); + return ResponseData.error("登录异常,请联系管理员"); + } +} + /** + * token创建 + * + * @param loginForm 登录信息 + * @param device 设备信息 + * @return + * @throws Exception + */ + public String createJwtToken(RiskLoginForm loginForm) throws Exception { + Map payload = new HashMap<>(); + payload.put("clientId", loginForm.getClientId()); // 设备编号 + payload.put("time", loginForm.getTime()); // 请求时间 + + //RSA 解密 + String str = RSAUtils.decrypt(loginForm.getSecret(), privateKey); + String key = loginForm.getClientId()+"_" + loginForm.getTime() ; + if (!key.equals(str)) { + //秘钥验证失败 + throw new ServiceException(500,"秘钥验证失败"); + } + +// long exp = new Date().getTime() + 2 * 3600000; // 2小时后的时间戳 +// payload.put("exp", exp); + + // 创建JWT + String jwt = JWTUtil.createToken(payload, "token-203-202405".getBytes()); + + return jwt; + } + + /** + * token解析 + * + * @param jwtStr token + * @return + * @throws Exception + */ + public static RiskLoginForm parseToken(String jwtStr){ + JWT jwtObj = new JWTUtil().parseToken(jwtStr); + RiskLoginForm deviceLoginForm = new RiskLoginForm(); + deviceLoginForm.setClientId(Convert.toStr(jwtObj.getPayload("clientId"))); + return deviceLoginForm; + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java new file mode 100644 index 0000000..0e91ac8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.util; +import cn.hutool.cache.Cache; +import cn.hutool.cache.CacheUtil; +/** + * token有效 + */ +public class IRiskCacheUtil { + /** + * 1小时内不活跃 会踢掉 + */ + private static Cache fifoCache = CacheUtil.newFIFOCache(1000, 1000 * 60 * 60); + + public static void put(String key, String value) { + fifoCache.put(key, value); + } + + public static String get(String key) { + return fifoCache.get(key); + } + + public static void remove(String key) { + fifoCache.remove(key); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java new file mode 100644 index 0000000..805c32a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceGroupDict extends AbstractDictMap { + + @Override + public void init() { + //检索条件 + put("groupName", "分组名称"); + put("startTime", "起始时间"); + put("endTime", "结束时间"); + //新增修改属性 + put("cameraIds", "设备国标号"); + put("personIds", "人员主键集合"); + put("description","备注"); + put("id","主键"); + put("ids","主键集合"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java new file mode 100644 index 0000000..895fbd9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceQueryDict extends AbstractDictMap { + + @Override + public void init() { + put("devType", "类型查询"); + put("keyword", "设备名称"); + put("deptName", "所属单位"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java new file mode 100644 index 0000000..1ca5eb1 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java @@ -0,0 +1,63 @@ +package com.casic.missiles.modular.device.enums; + +/** + * wvp设备类型转换 + * + * @author lwh + * @Date 2017年1月10日 下午9:54:13 + */ +public enum AvDeptEnum { + + DEPT0("0066", "801",0L), + DEPT1("0059", "699厂",1L), + DEPT2("0055", "283厂",1L), + DEPT3("0022", "201所",1L), + DEPT4("0027", "206所",1L), + DEPT5("0013", "23所",1L); + + String code; + String message; + Long deptId; + AvDeptEnum(String code, String message, Long deptId) { + this.code = code; + this.message = message; + this.deptId = deptId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public static AvDeptEnum valueOfCode(String value) { + if (value == null) { + return null; + } else { + for (AvDeptEnum ms : AvDeptEnum.values()) { + if (ms.getCode().equals(value)) { + return ms; + } + } + return null; + } + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java new file mode 100644 index 0000000..573d0e2 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.task; + +import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; + +public class Test { + public static void main(String[] args) { + System.out.println(AvStatusTypeEnum.valueOfType(new Integer(1)).getMessage()); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java new file mode 100644 index 0000000..7c06c67 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java @@ -0,0 +1,77 @@ +package com.casic.missiles.modular.device.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpSession; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class RiskSyncController extends BaseController { + @Resource + private IClientAuthService clientAuthService; + @Resource + private AbstractDeptService deptService; + @Resource + private AbstractUserService userService; + @PostMapping("/client/login") + @ResponseBody + public ResponseData login(@RequestBody RiskLoginForm deviceLoginForm, HttpSession session) { + return clientAuthService.login(deviceLoginForm, session); + } + + /** + * 全量组织信息读取 + * + * @return + */ + @PostMapping("/dept/list") + @ResponseBody + public ResponseDataDTO> dept() { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = deptService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量用户信息读取 + * + * @return + */ + @PostMapping("/user/list") + @ResponseBody + public ResponseDataDTO> user() { + //todo 此处租户拦截需移除 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量设备信息读取 + * + * @return + */ + @PostMapping("/device/list") + @ResponseBody + public ResponseDataDTO> device() { + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java new file mode 100644 index 0000000..5e5b890 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class UserSyncController extends BaseController { + + @Resource + private IBusDeviceInfoService busDeviceInfoService; + + /** + * 登录用户授权设备权限查看 + * @return + */ + @GetMapping("/device/permissions") + @ResponseBody + public ResponseDataDTO> devicePermissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } + + /** + * 登录用户风险点授权查询 + * @return + */ + @GetMapping("/permissions") + @ResponseBody + public ResponseDataDTO> permissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java new file mode 100644 index 0000000..07b8df8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +/** + * 设备登录接口 + */ +@Data +public class RiskLoginForm { + /** + * 设备编码 + */ + private String clientId; + + /** + * 时间戳 + */ + private Long time; + + /** + * 加密后数据 加密格式sn+时间戳 时效性为6小时 + */ + private String secret; + + /** + * 设备登录注册IP + */ + private String ip; + + /** + * 设备登录注册port + */ + private String port; +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java new file mode 100644 index 0000000..40fdb4b --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.device.service; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; + +import javax.servlet.http.HttpSession; + +public interface IClientAuthService { + /** + * @param deviceLoginForm + * @param session + * @return + */ + ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session); +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java new file mode 100644 index 0000000..576e857 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.device.service.impl; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import cn.hutool.jwt.JWT; +import cn.hutool.jwt.JWTUtil; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.util.IRiskCacheUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpSession; +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Service +public class ClientAuthServiceImpl implements IClientAuthService { + @Value("${casic.client.privateKey:MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALKcwHHOg0F6Zkq7GOVnOnTgvH9vSPXFFTOcEqOVBIBPBz7UNrEGkp1PhZ+oC4WVJAsDuot2e1fDZy9QS9HF92MmnYp9kuQRhGZjHctPnVZ0Kai5BES0ytHqPeauLyNXxOOS0YKYEUwpft4Z5Azw7bj3JWNvLrnTZvNld6FDvTslAgMBAAECgYAqN/kZLYpC+O6i7XSmDO95XwHPUXu6dDpdt5+EQR4OQh/hTwIaeAZB3uEj6vHGQomBfQEkI/5lsU97lIxHanbd+Hro7JyIhsGD5LR5XnZHVKzFiZW62OIU6FI9dlQNN8miiblnmyDwiMA3okaHl0O7qQjZ+IvY2csgmJc7AXpPpQJBAOhrhcfWFcgffj2O6HYNlBLFfbboc/ZzrEADDXKnxRSHlo5o8W+6gylG/L2NGtbag5S68B9VYzdkSQ1++5C+Ws8CQQDEu7h311PLEiKgqzGHpjzadQETmt/jMadaKQmT0TZwNVi6X8lR17U5hF8dAqZzUzr9kUC0HRIZhg4Uv1v3W3fLAkB4YPhxgJjXhjhEefg87Nt8vX1Xdx5Yz6CvpuUYNX0GHRQFvqUOUXQNtQ7CvorgLV1pc0lbcUZqMi8EJnj1hyJRAkEAjHXWm8GiMt+M15fCsi3vTq2xChVOekBuUsHv85iwvGZqJg7ThtpyqlEnM2g7/STUfkvhnXcQACclEI0blTy6BwJAPmFyhU+d0ejVpbc53TdrL2HqYYUHi/tTy/dtUa7lbypzdwwJ2M1Tv5PE8sQxr9tgMbebfxVb/RFKdiCCtzC4ng==}") + private String privateKey; + + @Override + public ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session) { + //固定秘钥解析 + try { + String str = RSAUtils.decrypt(deviceLoginForm.getSecret(), privateKey); + Long time = Long.valueOf(StrUtil.split(str, "_").get(1)); + //边缘盒子时差与服务时差不可超过24小时 + if (time == null || System.currentTimeMillis() - time > 3600 * 24 * 1000) { + return ResponseData.error("请求时间超时"); + } + deviceLoginForm.setTime(time); + } catch (Exception e) { + e.printStackTrace(); + return ResponseData.error("设备解析异常!"); + } + + try { + String token = this.createJwtToken(deviceLoginForm); + IRiskCacheUtil.put(token, token); + return ResponseData.success(token); + } catch (Exception e) { + log.error("设备登录异常:{}", e.getMessage()); + return ResponseData.error("登录异常,请联系管理员"); + } +} + /** + * token创建 + * + * @param loginForm 登录信息 + * @param device 设备信息 + * @return + * @throws Exception + */ + public String createJwtToken(RiskLoginForm loginForm) throws Exception { + Map payload = new HashMap<>(); + payload.put("clientId", loginForm.getClientId()); // 设备编号 + payload.put("time", loginForm.getTime()); // 请求时间 + + //RSA 解密 + String str = RSAUtils.decrypt(loginForm.getSecret(), privateKey); + String key = loginForm.getClientId()+"_" + loginForm.getTime() ; + if (!key.equals(str)) { + //秘钥验证失败 + throw new ServiceException(500,"秘钥验证失败"); + } + +// long exp = new Date().getTime() + 2 * 3600000; // 2小时后的时间戳 +// payload.put("exp", exp); + + // 创建JWT + String jwt = JWTUtil.createToken(payload, "token-203-202405".getBytes()); + + return jwt; + } + + /** + * token解析 + * + * @param jwtStr token + * @return + * @throws Exception + */ + public static RiskLoginForm parseToken(String jwtStr){ + JWT jwtObj = new JWTUtil().parseToken(jwtStr); + RiskLoginForm deviceLoginForm = new RiskLoginForm(); + deviceLoginForm.setClientId(Convert.toStr(jwtObj.getPayload("clientId"))); + return deviceLoginForm; + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java new file mode 100644 index 0000000..0e91ac8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.util; +import cn.hutool.cache.Cache; +import cn.hutool.cache.CacheUtil; +/** + * token有效 + */ +public class IRiskCacheUtil { + /** + * 1小时内不活跃 会踢掉 + */ + private static Cache fifoCache = CacheUtil.newFIFOCache(1000, 1000 * 60 * 60); + + public static void put(String key, String value) { + fifoCache.put(key, value); + } + + public static String get(String key) { + return fifoCache.get(key); + } + + public static void remove(String key) { + fifoCache.remove(key); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java new file mode 100644 index 0000000..805c32a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceGroupDict extends AbstractDictMap { + + @Override + public void init() { + //检索条件 + put("groupName", "分组名称"); + put("startTime", "起始时间"); + put("endTime", "结束时间"); + //新增修改属性 + put("cameraIds", "设备国标号"); + put("personIds", "人员主键集合"); + put("description","备注"); + put("id","主键"); + put("ids","主键集合"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java new file mode 100644 index 0000000..895fbd9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceQueryDict extends AbstractDictMap { + + @Override + public void init() { + put("devType", "类型查询"); + put("keyword", "设备名称"); + put("deptName", "所属单位"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java new file mode 100644 index 0000000..88da6df --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.device.util; + +public class DeviceScopeUtil { +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java new file mode 100644 index 0000000..1ca5eb1 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java @@ -0,0 +1,63 @@ +package com.casic.missiles.modular.device.enums; + +/** + * wvp设备类型转换 + * + * @author lwh + * @Date 2017年1月10日 下午9:54:13 + */ +public enum AvDeptEnum { + + DEPT0("0066", "801",0L), + DEPT1("0059", "699厂",1L), + DEPT2("0055", "283厂",1L), + DEPT3("0022", "201所",1L), + DEPT4("0027", "206所",1L), + DEPT5("0013", "23所",1L); + + String code; + String message; + Long deptId; + AvDeptEnum(String code, String message, Long deptId) { + this.code = code; + this.message = message; + this.deptId = deptId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public static AvDeptEnum valueOfCode(String value) { + if (value == null) { + return null; + } else { + for (AvDeptEnum ms : AvDeptEnum.values()) { + if (ms.getCode().equals(value)) { + return ms; + } + } + return null; + } + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java new file mode 100644 index 0000000..573d0e2 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.task; + +import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; + +public class Test { + public static void main(String[] args) { + System.out.println(AvStatusTypeEnum.valueOfType(new Integer(1)).getMessage()); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java new file mode 100644 index 0000000..7c06c67 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java @@ -0,0 +1,77 @@ +package com.casic.missiles.modular.device.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpSession; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class RiskSyncController extends BaseController { + @Resource + private IClientAuthService clientAuthService; + @Resource + private AbstractDeptService deptService; + @Resource + private AbstractUserService userService; + @PostMapping("/client/login") + @ResponseBody + public ResponseData login(@RequestBody RiskLoginForm deviceLoginForm, HttpSession session) { + return clientAuthService.login(deviceLoginForm, session); + } + + /** + * 全量组织信息读取 + * + * @return + */ + @PostMapping("/dept/list") + @ResponseBody + public ResponseDataDTO> dept() { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = deptService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量用户信息读取 + * + * @return + */ + @PostMapping("/user/list") + @ResponseBody + public ResponseDataDTO> user() { + //todo 此处租户拦截需移除 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量设备信息读取 + * + * @return + */ + @PostMapping("/device/list") + @ResponseBody + public ResponseDataDTO> device() { + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java new file mode 100644 index 0000000..5e5b890 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class UserSyncController extends BaseController { + + @Resource + private IBusDeviceInfoService busDeviceInfoService; + + /** + * 登录用户授权设备权限查看 + * @return + */ + @GetMapping("/device/permissions") + @ResponseBody + public ResponseDataDTO> devicePermissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } + + /** + * 登录用户风险点授权查询 + * @return + */ + @GetMapping("/permissions") + @ResponseBody + public ResponseDataDTO> permissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java new file mode 100644 index 0000000..07b8df8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +/** + * 设备登录接口 + */ +@Data +public class RiskLoginForm { + /** + * 设备编码 + */ + private String clientId; + + /** + * 时间戳 + */ + private Long time; + + /** + * 加密后数据 加密格式sn+时间戳 时效性为6小时 + */ + private String secret; + + /** + * 设备登录注册IP + */ + private String ip; + + /** + * 设备登录注册port + */ + private String port; +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java new file mode 100644 index 0000000..40fdb4b --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.device.service; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; + +import javax.servlet.http.HttpSession; + +public interface IClientAuthService { + /** + * @param deviceLoginForm + * @param session + * @return + */ + ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session); +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java new file mode 100644 index 0000000..576e857 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.device.service.impl; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import cn.hutool.jwt.JWT; +import cn.hutool.jwt.JWTUtil; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.util.IRiskCacheUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpSession; +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Service +public class ClientAuthServiceImpl implements IClientAuthService { + @Value("${casic.client.privateKey:MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALKcwHHOg0F6Zkq7GOVnOnTgvH9vSPXFFTOcEqOVBIBPBz7UNrEGkp1PhZ+oC4WVJAsDuot2e1fDZy9QS9HF92MmnYp9kuQRhGZjHctPnVZ0Kai5BES0ytHqPeauLyNXxOOS0YKYEUwpft4Z5Azw7bj3JWNvLrnTZvNld6FDvTslAgMBAAECgYAqN/kZLYpC+O6i7XSmDO95XwHPUXu6dDpdt5+EQR4OQh/hTwIaeAZB3uEj6vHGQomBfQEkI/5lsU97lIxHanbd+Hro7JyIhsGD5LR5XnZHVKzFiZW62OIU6FI9dlQNN8miiblnmyDwiMA3okaHl0O7qQjZ+IvY2csgmJc7AXpPpQJBAOhrhcfWFcgffj2O6HYNlBLFfbboc/ZzrEADDXKnxRSHlo5o8W+6gylG/L2NGtbag5S68B9VYzdkSQ1++5C+Ws8CQQDEu7h311PLEiKgqzGHpjzadQETmt/jMadaKQmT0TZwNVi6X8lR17U5hF8dAqZzUzr9kUC0HRIZhg4Uv1v3W3fLAkB4YPhxgJjXhjhEefg87Nt8vX1Xdx5Yz6CvpuUYNX0GHRQFvqUOUXQNtQ7CvorgLV1pc0lbcUZqMi8EJnj1hyJRAkEAjHXWm8GiMt+M15fCsi3vTq2xChVOekBuUsHv85iwvGZqJg7ThtpyqlEnM2g7/STUfkvhnXcQACclEI0blTy6BwJAPmFyhU+d0ejVpbc53TdrL2HqYYUHi/tTy/dtUa7lbypzdwwJ2M1Tv5PE8sQxr9tgMbebfxVb/RFKdiCCtzC4ng==}") + private String privateKey; + + @Override + public ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session) { + //固定秘钥解析 + try { + String str = RSAUtils.decrypt(deviceLoginForm.getSecret(), privateKey); + Long time = Long.valueOf(StrUtil.split(str, "_").get(1)); + //边缘盒子时差与服务时差不可超过24小时 + if (time == null || System.currentTimeMillis() - time > 3600 * 24 * 1000) { + return ResponseData.error("请求时间超时"); + } + deviceLoginForm.setTime(time); + } catch (Exception e) { + e.printStackTrace(); + return ResponseData.error("设备解析异常!"); + } + + try { + String token = this.createJwtToken(deviceLoginForm); + IRiskCacheUtil.put(token, token); + return ResponseData.success(token); + } catch (Exception e) { + log.error("设备登录异常:{}", e.getMessage()); + return ResponseData.error("登录异常,请联系管理员"); + } +} + /** + * token创建 + * + * @param loginForm 登录信息 + * @param device 设备信息 + * @return + * @throws Exception + */ + public String createJwtToken(RiskLoginForm loginForm) throws Exception { + Map payload = new HashMap<>(); + payload.put("clientId", loginForm.getClientId()); // 设备编号 + payload.put("time", loginForm.getTime()); // 请求时间 + + //RSA 解密 + String str = RSAUtils.decrypt(loginForm.getSecret(), privateKey); + String key = loginForm.getClientId()+"_" + loginForm.getTime() ; + if (!key.equals(str)) { + //秘钥验证失败 + throw new ServiceException(500,"秘钥验证失败"); + } + +// long exp = new Date().getTime() + 2 * 3600000; // 2小时后的时间戳 +// payload.put("exp", exp); + + // 创建JWT + String jwt = JWTUtil.createToken(payload, "token-203-202405".getBytes()); + + return jwt; + } + + /** + * token解析 + * + * @param jwtStr token + * @return + * @throws Exception + */ + public static RiskLoginForm parseToken(String jwtStr){ + JWT jwtObj = new JWTUtil().parseToken(jwtStr); + RiskLoginForm deviceLoginForm = new RiskLoginForm(); + deviceLoginForm.setClientId(Convert.toStr(jwtObj.getPayload("clientId"))); + return deviceLoginForm; + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java new file mode 100644 index 0000000..0e91ac8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.util; +import cn.hutool.cache.Cache; +import cn.hutool.cache.CacheUtil; +/** + * token有效 + */ +public class IRiskCacheUtil { + /** + * 1小时内不活跃 会踢掉 + */ + private static Cache fifoCache = CacheUtil.newFIFOCache(1000, 1000 * 60 * 60); + + public static void put(String key, String value) { + fifoCache.put(key, value); + } + + public static String get(String key) { + return fifoCache.get(key); + } + + public static void remove(String key) { + fifoCache.remove(key); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java new file mode 100644 index 0000000..805c32a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceGroupDict extends AbstractDictMap { + + @Override + public void init() { + //检索条件 + put("groupName", "分组名称"); + put("startTime", "起始时间"); + put("endTime", "结束时间"); + //新增修改属性 + put("cameraIds", "设备国标号"); + put("personIds", "人员主键集合"); + put("description","备注"); + put("id","主键"); + put("ids","主键集合"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java new file mode 100644 index 0000000..895fbd9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceQueryDict extends AbstractDictMap { + + @Override + public void init() { + put("devType", "类型查询"); + put("keyword", "设备名称"); + put("deptName", "所属单位"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java new file mode 100644 index 0000000..88da6df --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.device.util; + +public class DeviceScopeUtil { +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java new file mode 100644 index 0000000..2e3e478 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.device.controller; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.auth.dto.DeviceLoginForm; +import com.casic.missiles.modular.auth.util.ICacheUtil; +import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; +import com.casic.missiles.modular.device.service.IAlarmRecordService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +@Api(tags = "告警记录") +@RestController +@RequestMapping("/record") +public class AlarmUploadController extends BaseController { + + private final IAlarmRecordService alarmRecordService; + private final IDeviceAuthService deviceAuthService; + public AlarmUploadController(IAlarmRecordService alarmRecordService, IDeviceAuthService deviceAuthService) { + this.alarmRecordService = alarmRecordService; + this.deviceAuthService = deviceAuthService; + } + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } + @BussinessLog(value = "告警记录上报接口") + @ApiOperation(value = "告警记录上报接口") + @PostMapping(value = "/upload") + public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return createAuthError(); + } + alarmRecordService.upload(alarmRecord); + return ResponseDataDTO.success(); + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java new file mode 100644 index 0000000..1ca5eb1 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java @@ -0,0 +1,63 @@ +package com.casic.missiles.modular.device.enums; + +/** + * wvp设备类型转换 + * + * @author lwh + * @Date 2017年1月10日 下午9:54:13 + */ +public enum AvDeptEnum { + + DEPT0("0066", "801",0L), + DEPT1("0059", "699厂",1L), + DEPT2("0055", "283厂",1L), + DEPT3("0022", "201所",1L), + DEPT4("0027", "206所",1L), + DEPT5("0013", "23所",1L); + + String code; + String message; + Long deptId; + AvDeptEnum(String code, String message, Long deptId) { + this.code = code; + this.message = message; + this.deptId = deptId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public static AvDeptEnum valueOfCode(String value) { + if (value == null) { + return null; + } else { + for (AvDeptEnum ms : AvDeptEnum.values()) { + if (ms.getCode().equals(value)) { + return ms; + } + } + return null; + } + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java new file mode 100644 index 0000000..573d0e2 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.task; + +import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; + +public class Test { + public static void main(String[] args) { + System.out.println(AvStatusTypeEnum.valueOfType(new Integer(1)).getMessage()); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java new file mode 100644 index 0000000..7c06c67 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java @@ -0,0 +1,77 @@ +package com.casic.missiles.modular.device.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpSession; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class RiskSyncController extends BaseController { + @Resource + private IClientAuthService clientAuthService; + @Resource + private AbstractDeptService deptService; + @Resource + private AbstractUserService userService; + @PostMapping("/client/login") + @ResponseBody + public ResponseData login(@RequestBody RiskLoginForm deviceLoginForm, HttpSession session) { + return clientAuthService.login(deviceLoginForm, session); + } + + /** + * 全量组织信息读取 + * + * @return + */ + @PostMapping("/dept/list") + @ResponseBody + public ResponseDataDTO> dept() { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = deptService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量用户信息读取 + * + * @return + */ + @PostMapping("/user/list") + @ResponseBody + public ResponseDataDTO> user() { + //todo 此处租户拦截需移除 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量设备信息读取 + * + * @return + */ + @PostMapping("/device/list") + @ResponseBody + public ResponseDataDTO> device() { + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java new file mode 100644 index 0000000..5e5b890 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class UserSyncController extends BaseController { + + @Resource + private IBusDeviceInfoService busDeviceInfoService; + + /** + * 登录用户授权设备权限查看 + * @return + */ + @GetMapping("/device/permissions") + @ResponseBody + public ResponseDataDTO> devicePermissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } + + /** + * 登录用户风险点授权查询 + * @return + */ + @GetMapping("/permissions") + @ResponseBody + public ResponseDataDTO> permissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java new file mode 100644 index 0000000..07b8df8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +/** + * 设备登录接口 + */ +@Data +public class RiskLoginForm { + /** + * 设备编码 + */ + private String clientId; + + /** + * 时间戳 + */ + private Long time; + + /** + * 加密后数据 加密格式sn+时间戳 时效性为6小时 + */ + private String secret; + + /** + * 设备登录注册IP + */ + private String ip; + + /** + * 设备登录注册port + */ + private String port; +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java new file mode 100644 index 0000000..40fdb4b --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.device.service; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; + +import javax.servlet.http.HttpSession; + +public interface IClientAuthService { + /** + * @param deviceLoginForm + * @param session + * @return + */ + ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session); +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java new file mode 100644 index 0000000..576e857 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.device.service.impl; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import cn.hutool.jwt.JWT; +import cn.hutool.jwt.JWTUtil; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.util.IRiskCacheUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpSession; +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Service +public class ClientAuthServiceImpl implements IClientAuthService { + @Value("${casic.client.privateKey:MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALKcwHHOg0F6Zkq7GOVnOnTgvH9vSPXFFTOcEqOVBIBPBz7UNrEGkp1PhZ+oC4WVJAsDuot2e1fDZy9QS9HF92MmnYp9kuQRhGZjHctPnVZ0Kai5BES0ytHqPeauLyNXxOOS0YKYEUwpft4Z5Azw7bj3JWNvLrnTZvNld6FDvTslAgMBAAECgYAqN/kZLYpC+O6i7XSmDO95XwHPUXu6dDpdt5+EQR4OQh/hTwIaeAZB3uEj6vHGQomBfQEkI/5lsU97lIxHanbd+Hro7JyIhsGD5LR5XnZHVKzFiZW62OIU6FI9dlQNN8miiblnmyDwiMA3okaHl0O7qQjZ+IvY2csgmJc7AXpPpQJBAOhrhcfWFcgffj2O6HYNlBLFfbboc/ZzrEADDXKnxRSHlo5o8W+6gylG/L2NGtbag5S68B9VYzdkSQ1++5C+Ws8CQQDEu7h311PLEiKgqzGHpjzadQETmt/jMadaKQmT0TZwNVi6X8lR17U5hF8dAqZzUzr9kUC0HRIZhg4Uv1v3W3fLAkB4YPhxgJjXhjhEefg87Nt8vX1Xdx5Yz6CvpuUYNX0GHRQFvqUOUXQNtQ7CvorgLV1pc0lbcUZqMi8EJnj1hyJRAkEAjHXWm8GiMt+M15fCsi3vTq2xChVOekBuUsHv85iwvGZqJg7ThtpyqlEnM2g7/STUfkvhnXcQACclEI0blTy6BwJAPmFyhU+d0ejVpbc53TdrL2HqYYUHi/tTy/dtUa7lbypzdwwJ2M1Tv5PE8sQxr9tgMbebfxVb/RFKdiCCtzC4ng==}") + private String privateKey; + + @Override + public ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session) { + //固定秘钥解析 + try { + String str = RSAUtils.decrypt(deviceLoginForm.getSecret(), privateKey); + Long time = Long.valueOf(StrUtil.split(str, "_").get(1)); + //边缘盒子时差与服务时差不可超过24小时 + if (time == null || System.currentTimeMillis() - time > 3600 * 24 * 1000) { + return ResponseData.error("请求时间超时"); + } + deviceLoginForm.setTime(time); + } catch (Exception e) { + e.printStackTrace(); + return ResponseData.error("设备解析异常!"); + } + + try { + String token = this.createJwtToken(deviceLoginForm); + IRiskCacheUtil.put(token, token); + return ResponseData.success(token); + } catch (Exception e) { + log.error("设备登录异常:{}", e.getMessage()); + return ResponseData.error("登录异常,请联系管理员"); + } +} + /** + * token创建 + * + * @param loginForm 登录信息 + * @param device 设备信息 + * @return + * @throws Exception + */ + public String createJwtToken(RiskLoginForm loginForm) throws Exception { + Map payload = new HashMap<>(); + payload.put("clientId", loginForm.getClientId()); // 设备编号 + payload.put("time", loginForm.getTime()); // 请求时间 + + //RSA 解密 + String str = RSAUtils.decrypt(loginForm.getSecret(), privateKey); + String key = loginForm.getClientId()+"_" + loginForm.getTime() ; + if (!key.equals(str)) { + //秘钥验证失败 + throw new ServiceException(500,"秘钥验证失败"); + } + +// long exp = new Date().getTime() + 2 * 3600000; // 2小时后的时间戳 +// payload.put("exp", exp); + + // 创建JWT + String jwt = JWTUtil.createToken(payload, "token-203-202405".getBytes()); + + return jwt; + } + + /** + * token解析 + * + * @param jwtStr token + * @return + * @throws Exception + */ + public static RiskLoginForm parseToken(String jwtStr){ + JWT jwtObj = new JWTUtil().parseToken(jwtStr); + RiskLoginForm deviceLoginForm = new RiskLoginForm(); + deviceLoginForm.setClientId(Convert.toStr(jwtObj.getPayload("clientId"))); + return deviceLoginForm; + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java new file mode 100644 index 0000000..0e91ac8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.util; +import cn.hutool.cache.Cache; +import cn.hutool.cache.CacheUtil; +/** + * token有效 + */ +public class IRiskCacheUtil { + /** + * 1小时内不活跃 会踢掉 + */ + private static Cache fifoCache = CacheUtil.newFIFOCache(1000, 1000 * 60 * 60); + + public static void put(String key, String value) { + fifoCache.put(key, value); + } + + public static String get(String key) { + return fifoCache.get(key); + } + + public static void remove(String key) { + fifoCache.remove(key); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java new file mode 100644 index 0000000..805c32a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceGroupDict extends AbstractDictMap { + + @Override + public void init() { + //检索条件 + put("groupName", "分组名称"); + put("startTime", "起始时间"); + put("endTime", "结束时间"); + //新增修改属性 + put("cameraIds", "设备国标号"); + put("personIds", "人员主键集合"); + put("description","备注"); + put("id","主键"); + put("ids","主键集合"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java new file mode 100644 index 0000000..895fbd9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceQueryDict extends AbstractDictMap { + + @Override + public void init() { + put("devType", "类型查询"); + put("keyword", "设备名称"); + put("deptName", "所属单位"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java new file mode 100644 index 0000000..88da6df --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.device.util; + +public class DeviceScopeUtil { +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java new file mode 100644 index 0000000..2e3e478 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.device.controller; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.auth.dto.DeviceLoginForm; +import com.casic.missiles.modular.auth.util.ICacheUtil; +import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; +import com.casic.missiles.modular.device.service.IAlarmRecordService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +@Api(tags = "告警记录") +@RestController +@RequestMapping("/record") +public class AlarmUploadController extends BaseController { + + private final IAlarmRecordService alarmRecordService; + private final IDeviceAuthService deviceAuthService; + public AlarmUploadController(IAlarmRecordService alarmRecordService, IDeviceAuthService deviceAuthService) { + this.alarmRecordService = alarmRecordService; + this.deviceAuthService = deviceAuthService; + } + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } + @BussinessLog(value = "告警记录上报接口") + @ApiOperation(value = "告警记录上报接口") + @PostMapping(value = "/upload") + public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return createAuthError(); + } + alarmRecordService.upload(alarmRecord); + return ResponseDataDTO.success(); + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java new file mode 100644 index 0000000..3f1c189 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class RecognitionStreamDTO { + private Long id; + private String recognitionStreamFlag; +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java new file mode 100644 index 0000000..1ca5eb1 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java @@ -0,0 +1,63 @@ +package com.casic.missiles.modular.device.enums; + +/** + * wvp设备类型转换 + * + * @author lwh + * @Date 2017年1月10日 下午9:54:13 + */ +public enum AvDeptEnum { + + DEPT0("0066", "801",0L), + DEPT1("0059", "699厂",1L), + DEPT2("0055", "283厂",1L), + DEPT3("0022", "201所",1L), + DEPT4("0027", "206所",1L), + DEPT5("0013", "23所",1L); + + String code; + String message; + Long deptId; + AvDeptEnum(String code, String message, Long deptId) { + this.code = code; + this.message = message; + this.deptId = deptId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public static AvDeptEnum valueOfCode(String value) { + if (value == null) { + return null; + } else { + for (AvDeptEnum ms : AvDeptEnum.values()) { + if (ms.getCode().equals(value)) { + return ms; + } + } + return null; + } + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java new file mode 100644 index 0000000..573d0e2 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.task; + +import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; + +public class Test { + public static void main(String[] args) { + System.out.println(AvStatusTypeEnum.valueOfType(new Integer(1)).getMessage()); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java new file mode 100644 index 0000000..7c06c67 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java @@ -0,0 +1,77 @@ +package com.casic.missiles.modular.device.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpSession; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class RiskSyncController extends BaseController { + @Resource + private IClientAuthService clientAuthService; + @Resource + private AbstractDeptService deptService; + @Resource + private AbstractUserService userService; + @PostMapping("/client/login") + @ResponseBody + public ResponseData login(@RequestBody RiskLoginForm deviceLoginForm, HttpSession session) { + return clientAuthService.login(deviceLoginForm, session); + } + + /** + * 全量组织信息读取 + * + * @return + */ + @PostMapping("/dept/list") + @ResponseBody + public ResponseDataDTO> dept() { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = deptService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量用户信息读取 + * + * @return + */ + @PostMapping("/user/list") + @ResponseBody + public ResponseDataDTO> user() { + //todo 此处租户拦截需移除 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量设备信息读取 + * + * @return + */ + @PostMapping("/device/list") + @ResponseBody + public ResponseDataDTO> device() { + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java new file mode 100644 index 0000000..5e5b890 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class UserSyncController extends BaseController { + + @Resource + private IBusDeviceInfoService busDeviceInfoService; + + /** + * 登录用户授权设备权限查看 + * @return + */ + @GetMapping("/device/permissions") + @ResponseBody + public ResponseDataDTO> devicePermissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } + + /** + * 登录用户风险点授权查询 + * @return + */ + @GetMapping("/permissions") + @ResponseBody + public ResponseDataDTO> permissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java new file mode 100644 index 0000000..07b8df8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +/** + * 设备登录接口 + */ +@Data +public class RiskLoginForm { + /** + * 设备编码 + */ + private String clientId; + + /** + * 时间戳 + */ + private Long time; + + /** + * 加密后数据 加密格式sn+时间戳 时效性为6小时 + */ + private String secret; + + /** + * 设备登录注册IP + */ + private String ip; + + /** + * 设备登录注册port + */ + private String port; +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java new file mode 100644 index 0000000..40fdb4b --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.device.service; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; + +import javax.servlet.http.HttpSession; + +public interface IClientAuthService { + /** + * @param deviceLoginForm + * @param session + * @return + */ + ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session); +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java new file mode 100644 index 0000000..576e857 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.device.service.impl; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import cn.hutool.jwt.JWT; +import cn.hutool.jwt.JWTUtil; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.util.IRiskCacheUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpSession; +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Service +public class ClientAuthServiceImpl implements IClientAuthService { + @Value("${casic.client.privateKey:MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALKcwHHOg0F6Zkq7GOVnOnTgvH9vSPXFFTOcEqOVBIBPBz7UNrEGkp1PhZ+oC4WVJAsDuot2e1fDZy9QS9HF92MmnYp9kuQRhGZjHctPnVZ0Kai5BES0ytHqPeauLyNXxOOS0YKYEUwpft4Z5Azw7bj3JWNvLrnTZvNld6FDvTslAgMBAAECgYAqN/kZLYpC+O6i7XSmDO95XwHPUXu6dDpdt5+EQR4OQh/hTwIaeAZB3uEj6vHGQomBfQEkI/5lsU97lIxHanbd+Hro7JyIhsGD5LR5XnZHVKzFiZW62OIU6FI9dlQNN8miiblnmyDwiMA3okaHl0O7qQjZ+IvY2csgmJc7AXpPpQJBAOhrhcfWFcgffj2O6HYNlBLFfbboc/ZzrEADDXKnxRSHlo5o8W+6gylG/L2NGtbag5S68B9VYzdkSQ1++5C+Ws8CQQDEu7h311PLEiKgqzGHpjzadQETmt/jMadaKQmT0TZwNVi6X8lR17U5hF8dAqZzUzr9kUC0HRIZhg4Uv1v3W3fLAkB4YPhxgJjXhjhEefg87Nt8vX1Xdx5Yz6CvpuUYNX0GHRQFvqUOUXQNtQ7CvorgLV1pc0lbcUZqMi8EJnj1hyJRAkEAjHXWm8GiMt+M15fCsi3vTq2xChVOekBuUsHv85iwvGZqJg7ThtpyqlEnM2g7/STUfkvhnXcQACclEI0blTy6BwJAPmFyhU+d0ejVpbc53TdrL2HqYYUHi/tTy/dtUa7lbypzdwwJ2M1Tv5PE8sQxr9tgMbebfxVb/RFKdiCCtzC4ng==}") + private String privateKey; + + @Override + public ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session) { + //固定秘钥解析 + try { + String str = RSAUtils.decrypt(deviceLoginForm.getSecret(), privateKey); + Long time = Long.valueOf(StrUtil.split(str, "_").get(1)); + //边缘盒子时差与服务时差不可超过24小时 + if (time == null || System.currentTimeMillis() - time > 3600 * 24 * 1000) { + return ResponseData.error("请求时间超时"); + } + deviceLoginForm.setTime(time); + } catch (Exception e) { + e.printStackTrace(); + return ResponseData.error("设备解析异常!"); + } + + try { + String token = this.createJwtToken(deviceLoginForm); + IRiskCacheUtil.put(token, token); + return ResponseData.success(token); + } catch (Exception e) { + log.error("设备登录异常:{}", e.getMessage()); + return ResponseData.error("登录异常,请联系管理员"); + } +} + /** + * token创建 + * + * @param loginForm 登录信息 + * @param device 设备信息 + * @return + * @throws Exception + */ + public String createJwtToken(RiskLoginForm loginForm) throws Exception { + Map payload = new HashMap<>(); + payload.put("clientId", loginForm.getClientId()); // 设备编号 + payload.put("time", loginForm.getTime()); // 请求时间 + + //RSA 解密 + String str = RSAUtils.decrypt(loginForm.getSecret(), privateKey); + String key = loginForm.getClientId()+"_" + loginForm.getTime() ; + if (!key.equals(str)) { + //秘钥验证失败 + throw new ServiceException(500,"秘钥验证失败"); + } + +// long exp = new Date().getTime() + 2 * 3600000; // 2小时后的时间戳 +// payload.put("exp", exp); + + // 创建JWT + String jwt = JWTUtil.createToken(payload, "token-203-202405".getBytes()); + + return jwt; + } + + /** + * token解析 + * + * @param jwtStr token + * @return + * @throws Exception + */ + public static RiskLoginForm parseToken(String jwtStr){ + JWT jwtObj = new JWTUtil().parseToken(jwtStr); + RiskLoginForm deviceLoginForm = new RiskLoginForm(); + deviceLoginForm.setClientId(Convert.toStr(jwtObj.getPayload("clientId"))); + return deviceLoginForm; + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java new file mode 100644 index 0000000..0e91ac8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.util; +import cn.hutool.cache.Cache; +import cn.hutool.cache.CacheUtil; +/** + * token有效 + */ +public class IRiskCacheUtil { + /** + * 1小时内不活跃 会踢掉 + */ + private static Cache fifoCache = CacheUtil.newFIFOCache(1000, 1000 * 60 * 60); + + public static void put(String key, String value) { + fifoCache.put(key, value); + } + + public static String get(String key) { + return fifoCache.get(key); + } + + public static void remove(String key) { + fifoCache.remove(key); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java new file mode 100644 index 0000000..805c32a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceGroupDict extends AbstractDictMap { + + @Override + public void init() { + //检索条件 + put("groupName", "分组名称"); + put("startTime", "起始时间"); + put("endTime", "结束时间"); + //新增修改属性 + put("cameraIds", "设备国标号"); + put("personIds", "人员主键集合"); + put("description","备注"); + put("id","主键"); + put("ids","主键集合"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java new file mode 100644 index 0000000..895fbd9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceQueryDict extends AbstractDictMap { + + @Override + public void init() { + put("devType", "类型查询"); + put("keyword", "设备名称"); + put("deptName", "所属单位"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java new file mode 100644 index 0000000..88da6df --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.device.util; + +public class DeviceScopeUtil { +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java new file mode 100644 index 0000000..2e3e478 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.device.controller; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.auth.dto.DeviceLoginForm; +import com.casic.missiles.modular.auth.util.ICacheUtil; +import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; +import com.casic.missiles.modular.device.service.IAlarmRecordService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +@Api(tags = "告警记录") +@RestController +@RequestMapping("/record") +public class AlarmUploadController extends BaseController { + + private final IAlarmRecordService alarmRecordService; + private final IDeviceAuthService deviceAuthService; + public AlarmUploadController(IAlarmRecordService alarmRecordService, IDeviceAuthService deviceAuthService) { + this.alarmRecordService = alarmRecordService; + this.deviceAuthService = deviceAuthService; + } + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } + @BussinessLog(value = "告警记录上报接口") + @ApiOperation(value = "告警记录上报接口") + @PostMapping(value = "/upload") + public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return createAuthError(); + } + alarmRecordService.upload(alarmRecord); + return ResponseDataDTO.success(); + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java new file mode 100644 index 0000000..3f1c189 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class RecognitionStreamDTO { + private Long id; + private String recognitionStreamFlag; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java new file mode 100644 index 0000000..fa5ae4a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java @@ -0,0 +1,167 @@ +package com.casic.missiles.modular.group.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IRiskPointInfoService; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.group.vo.SysRiskGroupPointVO; +import com.casic.missiles.modular.group.vo.SysRiskGroupRelUserVO; +import com.casic.missiles.modular.group.vo.SysRiskUserGroupVO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import com.casic.missiles.modular.system.vo.SysGroupRelUserVO; +import com.casic.missiles.modular.system.vo.SysUserGroupVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.ibatis.annotations.Param; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; + +/** + * 风险点组信息Controller + * + * @author lwh + * @date 2024-07-11 + */ +@Api(tags = "风险点组信息") +@RestController +@RequestMapping("/sys/risk/group") +public class SysUserRiskGroupController extends BaseController { + private final IRiskPointInfoService riskPointInfoService; + private final ISysUserRiskGroupService sysUserGroupService; + private final AbstractPermissionContext permissionContext; + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysUserRiskGroupController(IRiskPointInfoService riskPointInfoService, ISysUserRiskGroupService sysUserGroupService, AbstractPermissionContext permissionContext, ISysRiskGroupRelUserService sysGroupRelUserService) { + this.riskPointInfoService = riskPointInfoService; + this.sysUserGroupService = sysUserGroupService; + this.permissionContext = permissionContext; + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @BussinessLog(value = "风险点分组查询") + @ApiOperation(value = "风险点分组查询", hidden = true) + @GetMapping(value = "/list") + public ResponseDataDTO> list(SysRiskUserGroupVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysUserGroupService.list(query)); + } + + @BussinessLog(value = "分组人员列表查询") + @ApiOperation(value = "分组人员列表查询") + @GetMapping(value = "/groupUserList") + public ResponseDataDTO> groupUserList(SysRiskGroupRelUserVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysGroupRelUserService.list(query)); + } + + @BussinessLog(value = "风险点分组人员查询") + @ApiOperation(value = "风险点分组人员分页查询") + @GetMapping(value = "/groupUserPage") + public ResponseDataDTO> listPage(SysRiskGroupRelUserVO sysGroupRelUserVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysGroupRelUserVO.genQuery(); + List relUsers = sysGroupRelUserService.selectSysGroupRelUserPage(page, query); + page.setRecords(relUsers); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "用户分组批量新增") + @ApiOperation(value = "批量新增接口") + @PostMapping(value = "/batch-add") + public ResponseDataDTO batchAdd(@RequestBody GroupUserRelDTO relDTO) { + sysGroupRelUserService.batchAdd(relDTO); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组人员删除") + @ApiOperation(value = "用户组人员删除接口") + @GetMapping(value = "/user/delete") + public ResponseDataDTO userDel(@Param("用户组人员关联主键") String id) { + sysGroupRelUserService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "风险点分组分页查询") + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(SysRiskUserGroupVO sysUserGroupVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysUserGroupVO.genQuery(); + + List sysUserGroups = sysUserGroupService.selectSysUserGroupPage(page, query); + page.setRecords(sysUserGroups); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "风险点分组新增") + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.save(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组修改") + @ApiOperation(value = "修改接口") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.updateById(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组删除") + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + sysUserGroupService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "批量删除") + @ApiOperation(value = "批量删除", hidden = true) + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + sysUserGroupService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "详情查询") + @ApiOperation(value = "详情查询", hidden = true) + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(sysUserGroupService.getById(id)); + } + + @BussinessLog(value = "用户树") + @ApiOperation(value = "用户树查询") + @GetMapping(value = "/person/tree") + public ResponseDataDTO> personTree() { + return ResponseDataDTO.success(sysUserGroupService.personTree()); + } + + @BussinessLog(value = "风险点树查询") + @ApiOperation(value = "风险点树查询") + @GetMapping(value = "/tree") + public ResponseDataDTO> tree(String riskType) { + return ResponseDataDTO.success(riskPointInfoService.tree(riskType)); + } +} \ No newline at end of file diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java new file mode 100644 index 0000000..1ca5eb1 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java @@ -0,0 +1,63 @@ +package com.casic.missiles.modular.device.enums; + +/** + * wvp设备类型转换 + * + * @author lwh + * @Date 2017年1月10日 下午9:54:13 + */ +public enum AvDeptEnum { + + DEPT0("0066", "801",0L), + DEPT1("0059", "699厂",1L), + DEPT2("0055", "283厂",1L), + DEPT3("0022", "201所",1L), + DEPT4("0027", "206所",1L), + DEPT5("0013", "23所",1L); + + String code; + String message; + Long deptId; + AvDeptEnum(String code, String message, Long deptId) { + this.code = code; + this.message = message; + this.deptId = deptId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public static AvDeptEnum valueOfCode(String value) { + if (value == null) { + return null; + } else { + for (AvDeptEnum ms : AvDeptEnum.values()) { + if (ms.getCode().equals(value)) { + return ms; + } + } + return null; + } + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java new file mode 100644 index 0000000..573d0e2 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.task; + +import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; + +public class Test { + public static void main(String[] args) { + System.out.println(AvStatusTypeEnum.valueOfType(new Integer(1)).getMessage()); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java new file mode 100644 index 0000000..7c06c67 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java @@ -0,0 +1,77 @@ +package com.casic.missiles.modular.device.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpSession; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class RiskSyncController extends BaseController { + @Resource + private IClientAuthService clientAuthService; + @Resource + private AbstractDeptService deptService; + @Resource + private AbstractUserService userService; + @PostMapping("/client/login") + @ResponseBody + public ResponseData login(@RequestBody RiskLoginForm deviceLoginForm, HttpSession session) { + return clientAuthService.login(deviceLoginForm, session); + } + + /** + * 全量组织信息读取 + * + * @return + */ + @PostMapping("/dept/list") + @ResponseBody + public ResponseDataDTO> dept() { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = deptService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量用户信息读取 + * + * @return + */ + @PostMapping("/user/list") + @ResponseBody + public ResponseDataDTO> user() { + //todo 此处租户拦截需移除 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量设备信息读取 + * + * @return + */ + @PostMapping("/device/list") + @ResponseBody + public ResponseDataDTO> device() { + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java new file mode 100644 index 0000000..5e5b890 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class UserSyncController extends BaseController { + + @Resource + private IBusDeviceInfoService busDeviceInfoService; + + /** + * 登录用户授权设备权限查看 + * @return + */ + @GetMapping("/device/permissions") + @ResponseBody + public ResponseDataDTO> devicePermissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } + + /** + * 登录用户风险点授权查询 + * @return + */ + @GetMapping("/permissions") + @ResponseBody + public ResponseDataDTO> permissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java new file mode 100644 index 0000000..07b8df8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +/** + * 设备登录接口 + */ +@Data +public class RiskLoginForm { + /** + * 设备编码 + */ + private String clientId; + + /** + * 时间戳 + */ + private Long time; + + /** + * 加密后数据 加密格式sn+时间戳 时效性为6小时 + */ + private String secret; + + /** + * 设备登录注册IP + */ + private String ip; + + /** + * 设备登录注册port + */ + private String port; +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java new file mode 100644 index 0000000..40fdb4b --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.device.service; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; + +import javax.servlet.http.HttpSession; + +public interface IClientAuthService { + /** + * @param deviceLoginForm + * @param session + * @return + */ + ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session); +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java new file mode 100644 index 0000000..576e857 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.device.service.impl; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import cn.hutool.jwt.JWT; +import cn.hutool.jwt.JWTUtil; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.util.IRiskCacheUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpSession; +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Service +public class ClientAuthServiceImpl implements IClientAuthService { + @Value("${casic.client.privateKey:MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALKcwHHOg0F6Zkq7GOVnOnTgvH9vSPXFFTOcEqOVBIBPBz7UNrEGkp1PhZ+oC4WVJAsDuot2e1fDZy9QS9HF92MmnYp9kuQRhGZjHctPnVZ0Kai5BES0ytHqPeauLyNXxOOS0YKYEUwpft4Z5Azw7bj3JWNvLrnTZvNld6FDvTslAgMBAAECgYAqN/kZLYpC+O6i7XSmDO95XwHPUXu6dDpdt5+EQR4OQh/hTwIaeAZB3uEj6vHGQomBfQEkI/5lsU97lIxHanbd+Hro7JyIhsGD5LR5XnZHVKzFiZW62OIU6FI9dlQNN8miiblnmyDwiMA3okaHl0O7qQjZ+IvY2csgmJc7AXpPpQJBAOhrhcfWFcgffj2O6HYNlBLFfbboc/ZzrEADDXKnxRSHlo5o8W+6gylG/L2NGtbag5S68B9VYzdkSQ1++5C+Ws8CQQDEu7h311PLEiKgqzGHpjzadQETmt/jMadaKQmT0TZwNVi6X8lR17U5hF8dAqZzUzr9kUC0HRIZhg4Uv1v3W3fLAkB4YPhxgJjXhjhEefg87Nt8vX1Xdx5Yz6CvpuUYNX0GHRQFvqUOUXQNtQ7CvorgLV1pc0lbcUZqMi8EJnj1hyJRAkEAjHXWm8GiMt+M15fCsi3vTq2xChVOekBuUsHv85iwvGZqJg7ThtpyqlEnM2g7/STUfkvhnXcQACclEI0blTy6BwJAPmFyhU+d0ejVpbc53TdrL2HqYYUHi/tTy/dtUa7lbypzdwwJ2M1Tv5PE8sQxr9tgMbebfxVb/RFKdiCCtzC4ng==}") + private String privateKey; + + @Override + public ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session) { + //固定秘钥解析 + try { + String str = RSAUtils.decrypt(deviceLoginForm.getSecret(), privateKey); + Long time = Long.valueOf(StrUtil.split(str, "_").get(1)); + //边缘盒子时差与服务时差不可超过24小时 + if (time == null || System.currentTimeMillis() - time > 3600 * 24 * 1000) { + return ResponseData.error("请求时间超时"); + } + deviceLoginForm.setTime(time); + } catch (Exception e) { + e.printStackTrace(); + return ResponseData.error("设备解析异常!"); + } + + try { + String token = this.createJwtToken(deviceLoginForm); + IRiskCacheUtil.put(token, token); + return ResponseData.success(token); + } catch (Exception e) { + log.error("设备登录异常:{}", e.getMessage()); + return ResponseData.error("登录异常,请联系管理员"); + } +} + /** + * token创建 + * + * @param loginForm 登录信息 + * @param device 设备信息 + * @return + * @throws Exception + */ + public String createJwtToken(RiskLoginForm loginForm) throws Exception { + Map payload = new HashMap<>(); + payload.put("clientId", loginForm.getClientId()); // 设备编号 + payload.put("time", loginForm.getTime()); // 请求时间 + + //RSA 解密 + String str = RSAUtils.decrypt(loginForm.getSecret(), privateKey); + String key = loginForm.getClientId()+"_" + loginForm.getTime() ; + if (!key.equals(str)) { + //秘钥验证失败 + throw new ServiceException(500,"秘钥验证失败"); + } + +// long exp = new Date().getTime() + 2 * 3600000; // 2小时后的时间戳 +// payload.put("exp", exp); + + // 创建JWT + String jwt = JWTUtil.createToken(payload, "token-203-202405".getBytes()); + + return jwt; + } + + /** + * token解析 + * + * @param jwtStr token + * @return + * @throws Exception + */ + public static RiskLoginForm parseToken(String jwtStr){ + JWT jwtObj = new JWTUtil().parseToken(jwtStr); + RiskLoginForm deviceLoginForm = new RiskLoginForm(); + deviceLoginForm.setClientId(Convert.toStr(jwtObj.getPayload("clientId"))); + return deviceLoginForm; + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java new file mode 100644 index 0000000..0e91ac8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.util; +import cn.hutool.cache.Cache; +import cn.hutool.cache.CacheUtil; +/** + * token有效 + */ +public class IRiskCacheUtil { + /** + * 1小时内不活跃 会踢掉 + */ + private static Cache fifoCache = CacheUtil.newFIFOCache(1000, 1000 * 60 * 60); + + public static void put(String key, String value) { + fifoCache.put(key, value); + } + + public static String get(String key) { + return fifoCache.get(key); + } + + public static void remove(String key) { + fifoCache.remove(key); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java new file mode 100644 index 0000000..805c32a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceGroupDict extends AbstractDictMap { + + @Override + public void init() { + //检索条件 + put("groupName", "分组名称"); + put("startTime", "起始时间"); + put("endTime", "结束时间"); + //新增修改属性 + put("cameraIds", "设备国标号"); + put("personIds", "人员主键集合"); + put("description","备注"); + put("id","主键"); + put("ids","主键集合"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java new file mode 100644 index 0000000..895fbd9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceQueryDict extends AbstractDictMap { + + @Override + public void init() { + put("devType", "类型查询"); + put("keyword", "设备名称"); + put("deptName", "所属单位"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java new file mode 100644 index 0000000..88da6df --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.device.util; + +public class DeviceScopeUtil { +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java new file mode 100644 index 0000000..2e3e478 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.device.controller; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.auth.dto.DeviceLoginForm; +import com.casic.missiles.modular.auth.util.ICacheUtil; +import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; +import com.casic.missiles.modular.device.service.IAlarmRecordService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +@Api(tags = "告警记录") +@RestController +@RequestMapping("/record") +public class AlarmUploadController extends BaseController { + + private final IAlarmRecordService alarmRecordService; + private final IDeviceAuthService deviceAuthService; + public AlarmUploadController(IAlarmRecordService alarmRecordService, IDeviceAuthService deviceAuthService) { + this.alarmRecordService = alarmRecordService; + this.deviceAuthService = deviceAuthService; + } + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } + @BussinessLog(value = "告警记录上报接口") + @ApiOperation(value = "告警记录上报接口") + @PostMapping(value = "/upload") + public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return createAuthError(); + } + alarmRecordService.upload(alarmRecord); + return ResponseDataDTO.success(); + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java new file mode 100644 index 0000000..3f1c189 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class RecognitionStreamDTO { + private Long id; + private String recognitionStreamFlag; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java new file mode 100644 index 0000000..fa5ae4a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java @@ -0,0 +1,167 @@ +package com.casic.missiles.modular.group.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IRiskPointInfoService; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.group.vo.SysRiskGroupPointVO; +import com.casic.missiles.modular.group.vo.SysRiskGroupRelUserVO; +import com.casic.missiles.modular.group.vo.SysRiskUserGroupVO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import com.casic.missiles.modular.system.vo.SysGroupRelUserVO; +import com.casic.missiles.modular.system.vo.SysUserGroupVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.ibatis.annotations.Param; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; + +/** + * 风险点组信息Controller + * + * @author lwh + * @date 2024-07-11 + */ +@Api(tags = "风险点组信息") +@RestController +@RequestMapping("/sys/risk/group") +public class SysUserRiskGroupController extends BaseController { + private final IRiskPointInfoService riskPointInfoService; + private final ISysUserRiskGroupService sysUserGroupService; + private final AbstractPermissionContext permissionContext; + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysUserRiskGroupController(IRiskPointInfoService riskPointInfoService, ISysUserRiskGroupService sysUserGroupService, AbstractPermissionContext permissionContext, ISysRiskGroupRelUserService sysGroupRelUserService) { + this.riskPointInfoService = riskPointInfoService; + this.sysUserGroupService = sysUserGroupService; + this.permissionContext = permissionContext; + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @BussinessLog(value = "风险点分组查询") + @ApiOperation(value = "风险点分组查询", hidden = true) + @GetMapping(value = "/list") + public ResponseDataDTO> list(SysRiskUserGroupVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysUserGroupService.list(query)); + } + + @BussinessLog(value = "分组人员列表查询") + @ApiOperation(value = "分组人员列表查询") + @GetMapping(value = "/groupUserList") + public ResponseDataDTO> groupUserList(SysRiskGroupRelUserVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysGroupRelUserService.list(query)); + } + + @BussinessLog(value = "风险点分组人员查询") + @ApiOperation(value = "风险点分组人员分页查询") + @GetMapping(value = "/groupUserPage") + public ResponseDataDTO> listPage(SysRiskGroupRelUserVO sysGroupRelUserVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysGroupRelUserVO.genQuery(); + List relUsers = sysGroupRelUserService.selectSysGroupRelUserPage(page, query); + page.setRecords(relUsers); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "用户分组批量新增") + @ApiOperation(value = "批量新增接口") + @PostMapping(value = "/batch-add") + public ResponseDataDTO batchAdd(@RequestBody GroupUserRelDTO relDTO) { + sysGroupRelUserService.batchAdd(relDTO); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组人员删除") + @ApiOperation(value = "用户组人员删除接口") + @GetMapping(value = "/user/delete") + public ResponseDataDTO userDel(@Param("用户组人员关联主键") String id) { + sysGroupRelUserService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "风险点分组分页查询") + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(SysRiskUserGroupVO sysUserGroupVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysUserGroupVO.genQuery(); + + List sysUserGroups = sysUserGroupService.selectSysUserGroupPage(page, query); + page.setRecords(sysUserGroups); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "风险点分组新增") + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.save(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组修改") + @ApiOperation(value = "修改接口") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.updateById(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组删除") + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + sysUserGroupService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "批量删除") + @ApiOperation(value = "批量删除", hidden = true) + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + sysUserGroupService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "详情查询") + @ApiOperation(value = "详情查询", hidden = true) + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(sysUserGroupService.getById(id)); + } + + @BussinessLog(value = "用户树") + @ApiOperation(value = "用户树查询") + @GetMapping(value = "/person/tree") + public ResponseDataDTO> personTree() { + return ResponseDataDTO.success(sysUserGroupService.personTree()); + } + + @BussinessLog(value = "风险点树查询") + @ApiOperation(value = "风险点树查询") + @GetMapping(value = "/tree") + public ResponseDataDTO> tree(String riskType) { + return ResponseDataDTO.success(riskPointInfoService.tree(riskType)); + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java new file mode 100644 index 0000000..419eb27 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备所属人员组 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupPointMapper extends BaseMapper { +/** +* 设备所属人员组 分页检索 +*/ +List selectSysGroupDevicePage(@Param("page") Page page, @Param("ew" ) QueryWrapper query); +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java new file mode 100644 index 0000000..1ca5eb1 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java @@ -0,0 +1,63 @@ +package com.casic.missiles.modular.device.enums; + +/** + * wvp设备类型转换 + * + * @author lwh + * @Date 2017年1月10日 下午9:54:13 + */ +public enum AvDeptEnum { + + DEPT0("0066", "801",0L), + DEPT1("0059", "699厂",1L), + DEPT2("0055", "283厂",1L), + DEPT3("0022", "201所",1L), + DEPT4("0027", "206所",1L), + DEPT5("0013", "23所",1L); + + String code; + String message; + Long deptId; + AvDeptEnum(String code, String message, Long deptId) { + this.code = code; + this.message = message; + this.deptId = deptId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public static AvDeptEnum valueOfCode(String value) { + if (value == null) { + return null; + } else { + for (AvDeptEnum ms : AvDeptEnum.values()) { + if (ms.getCode().equals(value)) { + return ms; + } + } + return null; + } + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java new file mode 100644 index 0000000..573d0e2 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.task; + +import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; + +public class Test { + public static void main(String[] args) { + System.out.println(AvStatusTypeEnum.valueOfType(new Integer(1)).getMessage()); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java new file mode 100644 index 0000000..7c06c67 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java @@ -0,0 +1,77 @@ +package com.casic.missiles.modular.device.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpSession; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class RiskSyncController extends BaseController { + @Resource + private IClientAuthService clientAuthService; + @Resource + private AbstractDeptService deptService; + @Resource + private AbstractUserService userService; + @PostMapping("/client/login") + @ResponseBody + public ResponseData login(@RequestBody RiskLoginForm deviceLoginForm, HttpSession session) { + return clientAuthService.login(deviceLoginForm, session); + } + + /** + * 全量组织信息读取 + * + * @return + */ + @PostMapping("/dept/list") + @ResponseBody + public ResponseDataDTO> dept() { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = deptService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量用户信息读取 + * + * @return + */ + @PostMapping("/user/list") + @ResponseBody + public ResponseDataDTO> user() { + //todo 此处租户拦截需移除 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量设备信息读取 + * + * @return + */ + @PostMapping("/device/list") + @ResponseBody + public ResponseDataDTO> device() { + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java new file mode 100644 index 0000000..5e5b890 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class UserSyncController extends BaseController { + + @Resource + private IBusDeviceInfoService busDeviceInfoService; + + /** + * 登录用户授权设备权限查看 + * @return + */ + @GetMapping("/device/permissions") + @ResponseBody + public ResponseDataDTO> devicePermissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } + + /** + * 登录用户风险点授权查询 + * @return + */ + @GetMapping("/permissions") + @ResponseBody + public ResponseDataDTO> permissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java new file mode 100644 index 0000000..07b8df8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +/** + * 设备登录接口 + */ +@Data +public class RiskLoginForm { + /** + * 设备编码 + */ + private String clientId; + + /** + * 时间戳 + */ + private Long time; + + /** + * 加密后数据 加密格式sn+时间戳 时效性为6小时 + */ + private String secret; + + /** + * 设备登录注册IP + */ + private String ip; + + /** + * 设备登录注册port + */ + private String port; +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java new file mode 100644 index 0000000..40fdb4b --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.device.service; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; + +import javax.servlet.http.HttpSession; + +public interface IClientAuthService { + /** + * @param deviceLoginForm + * @param session + * @return + */ + ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session); +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java new file mode 100644 index 0000000..576e857 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.device.service.impl; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import cn.hutool.jwt.JWT; +import cn.hutool.jwt.JWTUtil; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.util.IRiskCacheUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpSession; +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Service +public class ClientAuthServiceImpl implements IClientAuthService { + @Value("${casic.client.privateKey:MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALKcwHHOg0F6Zkq7GOVnOnTgvH9vSPXFFTOcEqOVBIBPBz7UNrEGkp1PhZ+oC4WVJAsDuot2e1fDZy9QS9HF92MmnYp9kuQRhGZjHctPnVZ0Kai5BES0ytHqPeauLyNXxOOS0YKYEUwpft4Z5Azw7bj3JWNvLrnTZvNld6FDvTslAgMBAAECgYAqN/kZLYpC+O6i7XSmDO95XwHPUXu6dDpdt5+EQR4OQh/hTwIaeAZB3uEj6vHGQomBfQEkI/5lsU97lIxHanbd+Hro7JyIhsGD5LR5XnZHVKzFiZW62OIU6FI9dlQNN8miiblnmyDwiMA3okaHl0O7qQjZ+IvY2csgmJc7AXpPpQJBAOhrhcfWFcgffj2O6HYNlBLFfbboc/ZzrEADDXKnxRSHlo5o8W+6gylG/L2NGtbag5S68B9VYzdkSQ1++5C+Ws8CQQDEu7h311PLEiKgqzGHpjzadQETmt/jMadaKQmT0TZwNVi6X8lR17U5hF8dAqZzUzr9kUC0HRIZhg4Uv1v3W3fLAkB4YPhxgJjXhjhEefg87Nt8vX1Xdx5Yz6CvpuUYNX0GHRQFvqUOUXQNtQ7CvorgLV1pc0lbcUZqMi8EJnj1hyJRAkEAjHXWm8GiMt+M15fCsi3vTq2xChVOekBuUsHv85iwvGZqJg7ThtpyqlEnM2g7/STUfkvhnXcQACclEI0blTy6BwJAPmFyhU+d0ejVpbc53TdrL2HqYYUHi/tTy/dtUa7lbypzdwwJ2M1Tv5PE8sQxr9tgMbebfxVb/RFKdiCCtzC4ng==}") + private String privateKey; + + @Override + public ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session) { + //固定秘钥解析 + try { + String str = RSAUtils.decrypt(deviceLoginForm.getSecret(), privateKey); + Long time = Long.valueOf(StrUtil.split(str, "_").get(1)); + //边缘盒子时差与服务时差不可超过24小时 + if (time == null || System.currentTimeMillis() - time > 3600 * 24 * 1000) { + return ResponseData.error("请求时间超时"); + } + deviceLoginForm.setTime(time); + } catch (Exception e) { + e.printStackTrace(); + return ResponseData.error("设备解析异常!"); + } + + try { + String token = this.createJwtToken(deviceLoginForm); + IRiskCacheUtil.put(token, token); + return ResponseData.success(token); + } catch (Exception e) { + log.error("设备登录异常:{}", e.getMessage()); + return ResponseData.error("登录异常,请联系管理员"); + } +} + /** + * token创建 + * + * @param loginForm 登录信息 + * @param device 设备信息 + * @return + * @throws Exception + */ + public String createJwtToken(RiskLoginForm loginForm) throws Exception { + Map payload = new HashMap<>(); + payload.put("clientId", loginForm.getClientId()); // 设备编号 + payload.put("time", loginForm.getTime()); // 请求时间 + + //RSA 解密 + String str = RSAUtils.decrypt(loginForm.getSecret(), privateKey); + String key = loginForm.getClientId()+"_" + loginForm.getTime() ; + if (!key.equals(str)) { + //秘钥验证失败 + throw new ServiceException(500,"秘钥验证失败"); + } + +// long exp = new Date().getTime() + 2 * 3600000; // 2小时后的时间戳 +// payload.put("exp", exp); + + // 创建JWT + String jwt = JWTUtil.createToken(payload, "token-203-202405".getBytes()); + + return jwt; + } + + /** + * token解析 + * + * @param jwtStr token + * @return + * @throws Exception + */ + public static RiskLoginForm parseToken(String jwtStr){ + JWT jwtObj = new JWTUtil().parseToken(jwtStr); + RiskLoginForm deviceLoginForm = new RiskLoginForm(); + deviceLoginForm.setClientId(Convert.toStr(jwtObj.getPayload("clientId"))); + return deviceLoginForm; + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java new file mode 100644 index 0000000..0e91ac8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.util; +import cn.hutool.cache.Cache; +import cn.hutool.cache.CacheUtil; +/** + * token有效 + */ +public class IRiskCacheUtil { + /** + * 1小时内不活跃 会踢掉 + */ + private static Cache fifoCache = CacheUtil.newFIFOCache(1000, 1000 * 60 * 60); + + public static void put(String key, String value) { + fifoCache.put(key, value); + } + + public static String get(String key) { + return fifoCache.get(key); + } + + public static void remove(String key) { + fifoCache.remove(key); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java new file mode 100644 index 0000000..805c32a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceGroupDict extends AbstractDictMap { + + @Override + public void init() { + //检索条件 + put("groupName", "分组名称"); + put("startTime", "起始时间"); + put("endTime", "结束时间"); + //新增修改属性 + put("cameraIds", "设备国标号"); + put("personIds", "人员主键集合"); + put("description","备注"); + put("id","主键"); + put("ids","主键集合"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java new file mode 100644 index 0000000..895fbd9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceQueryDict extends AbstractDictMap { + + @Override + public void init() { + put("devType", "类型查询"); + put("keyword", "设备名称"); + put("deptName", "所属单位"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java new file mode 100644 index 0000000..88da6df --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.device.util; + +public class DeviceScopeUtil { +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java new file mode 100644 index 0000000..2e3e478 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.device.controller; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.auth.dto.DeviceLoginForm; +import com.casic.missiles.modular.auth.util.ICacheUtil; +import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; +import com.casic.missiles.modular.device.service.IAlarmRecordService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +@Api(tags = "告警记录") +@RestController +@RequestMapping("/record") +public class AlarmUploadController extends BaseController { + + private final IAlarmRecordService alarmRecordService; + private final IDeviceAuthService deviceAuthService; + public AlarmUploadController(IAlarmRecordService alarmRecordService, IDeviceAuthService deviceAuthService) { + this.alarmRecordService = alarmRecordService; + this.deviceAuthService = deviceAuthService; + } + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } + @BussinessLog(value = "告警记录上报接口") + @ApiOperation(value = "告警记录上报接口") + @PostMapping(value = "/upload") + public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return createAuthError(); + } + alarmRecordService.upload(alarmRecord); + return ResponseDataDTO.success(); + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java new file mode 100644 index 0000000..3f1c189 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class RecognitionStreamDTO { + private Long id; + private String recognitionStreamFlag; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java new file mode 100644 index 0000000..fa5ae4a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java @@ -0,0 +1,167 @@ +package com.casic.missiles.modular.group.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IRiskPointInfoService; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.group.vo.SysRiskGroupPointVO; +import com.casic.missiles.modular.group.vo.SysRiskGroupRelUserVO; +import com.casic.missiles.modular.group.vo.SysRiskUserGroupVO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import com.casic.missiles.modular.system.vo.SysGroupRelUserVO; +import com.casic.missiles.modular.system.vo.SysUserGroupVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.ibatis.annotations.Param; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; + +/** + * 风险点组信息Controller + * + * @author lwh + * @date 2024-07-11 + */ +@Api(tags = "风险点组信息") +@RestController +@RequestMapping("/sys/risk/group") +public class SysUserRiskGroupController extends BaseController { + private final IRiskPointInfoService riskPointInfoService; + private final ISysUserRiskGroupService sysUserGroupService; + private final AbstractPermissionContext permissionContext; + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysUserRiskGroupController(IRiskPointInfoService riskPointInfoService, ISysUserRiskGroupService sysUserGroupService, AbstractPermissionContext permissionContext, ISysRiskGroupRelUserService sysGroupRelUserService) { + this.riskPointInfoService = riskPointInfoService; + this.sysUserGroupService = sysUserGroupService; + this.permissionContext = permissionContext; + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @BussinessLog(value = "风险点分组查询") + @ApiOperation(value = "风险点分组查询", hidden = true) + @GetMapping(value = "/list") + public ResponseDataDTO> list(SysRiskUserGroupVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysUserGroupService.list(query)); + } + + @BussinessLog(value = "分组人员列表查询") + @ApiOperation(value = "分组人员列表查询") + @GetMapping(value = "/groupUserList") + public ResponseDataDTO> groupUserList(SysRiskGroupRelUserVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysGroupRelUserService.list(query)); + } + + @BussinessLog(value = "风险点分组人员查询") + @ApiOperation(value = "风险点分组人员分页查询") + @GetMapping(value = "/groupUserPage") + public ResponseDataDTO> listPage(SysRiskGroupRelUserVO sysGroupRelUserVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysGroupRelUserVO.genQuery(); + List relUsers = sysGroupRelUserService.selectSysGroupRelUserPage(page, query); + page.setRecords(relUsers); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "用户分组批量新增") + @ApiOperation(value = "批量新增接口") + @PostMapping(value = "/batch-add") + public ResponseDataDTO batchAdd(@RequestBody GroupUserRelDTO relDTO) { + sysGroupRelUserService.batchAdd(relDTO); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组人员删除") + @ApiOperation(value = "用户组人员删除接口") + @GetMapping(value = "/user/delete") + public ResponseDataDTO userDel(@Param("用户组人员关联主键") String id) { + sysGroupRelUserService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "风险点分组分页查询") + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(SysRiskUserGroupVO sysUserGroupVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysUserGroupVO.genQuery(); + + List sysUserGroups = sysUserGroupService.selectSysUserGroupPage(page, query); + page.setRecords(sysUserGroups); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "风险点分组新增") + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.save(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组修改") + @ApiOperation(value = "修改接口") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.updateById(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组删除") + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + sysUserGroupService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "批量删除") + @ApiOperation(value = "批量删除", hidden = true) + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + sysUserGroupService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "详情查询") + @ApiOperation(value = "详情查询", hidden = true) + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(sysUserGroupService.getById(id)); + } + + @BussinessLog(value = "用户树") + @ApiOperation(value = "用户树查询") + @GetMapping(value = "/person/tree") + public ResponseDataDTO> personTree() { + return ResponseDataDTO.success(sysUserGroupService.personTree()); + } + + @BussinessLog(value = "风险点树查询") + @ApiOperation(value = "风险点树查询") + @GetMapping(value = "/tree") + public ResponseDataDTO> tree(String riskType) { + return ResponseDataDTO.success(riskPointInfoService.tree(riskType)); + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java new file mode 100644 index 0000000..419eb27 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备所属人员组 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupPointMapper extends BaseMapper { +/** +* 设备所属人员组 分页检索 +*/ +List selectSysGroupDevicePage(@Param("page") Page page, @Param("ew" ) QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java new file mode 100644 index 0000000..eb41227 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 组人员管理 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupRelUserMapper extends BaseMapper { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java new file mode 100644 index 0000000..1ca5eb1 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java @@ -0,0 +1,63 @@ +package com.casic.missiles.modular.device.enums; + +/** + * wvp设备类型转换 + * + * @author lwh + * @Date 2017年1月10日 下午9:54:13 + */ +public enum AvDeptEnum { + + DEPT0("0066", "801",0L), + DEPT1("0059", "699厂",1L), + DEPT2("0055", "283厂",1L), + DEPT3("0022", "201所",1L), + DEPT4("0027", "206所",1L), + DEPT5("0013", "23所",1L); + + String code; + String message; + Long deptId; + AvDeptEnum(String code, String message, Long deptId) { + this.code = code; + this.message = message; + this.deptId = deptId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public static AvDeptEnum valueOfCode(String value) { + if (value == null) { + return null; + } else { + for (AvDeptEnum ms : AvDeptEnum.values()) { + if (ms.getCode().equals(value)) { + return ms; + } + } + return null; + } + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java new file mode 100644 index 0000000..573d0e2 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.task; + +import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; + +public class Test { + public static void main(String[] args) { + System.out.println(AvStatusTypeEnum.valueOfType(new Integer(1)).getMessage()); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java new file mode 100644 index 0000000..7c06c67 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java @@ -0,0 +1,77 @@ +package com.casic.missiles.modular.device.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpSession; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class RiskSyncController extends BaseController { + @Resource + private IClientAuthService clientAuthService; + @Resource + private AbstractDeptService deptService; + @Resource + private AbstractUserService userService; + @PostMapping("/client/login") + @ResponseBody + public ResponseData login(@RequestBody RiskLoginForm deviceLoginForm, HttpSession session) { + return clientAuthService.login(deviceLoginForm, session); + } + + /** + * 全量组织信息读取 + * + * @return + */ + @PostMapping("/dept/list") + @ResponseBody + public ResponseDataDTO> dept() { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = deptService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量用户信息读取 + * + * @return + */ + @PostMapping("/user/list") + @ResponseBody + public ResponseDataDTO> user() { + //todo 此处租户拦截需移除 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量设备信息读取 + * + * @return + */ + @PostMapping("/device/list") + @ResponseBody + public ResponseDataDTO> device() { + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java new file mode 100644 index 0000000..5e5b890 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class UserSyncController extends BaseController { + + @Resource + private IBusDeviceInfoService busDeviceInfoService; + + /** + * 登录用户授权设备权限查看 + * @return + */ + @GetMapping("/device/permissions") + @ResponseBody + public ResponseDataDTO> devicePermissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } + + /** + * 登录用户风险点授权查询 + * @return + */ + @GetMapping("/permissions") + @ResponseBody + public ResponseDataDTO> permissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java new file mode 100644 index 0000000..07b8df8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +/** + * 设备登录接口 + */ +@Data +public class RiskLoginForm { + /** + * 设备编码 + */ + private String clientId; + + /** + * 时间戳 + */ + private Long time; + + /** + * 加密后数据 加密格式sn+时间戳 时效性为6小时 + */ + private String secret; + + /** + * 设备登录注册IP + */ + private String ip; + + /** + * 设备登录注册port + */ + private String port; +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java new file mode 100644 index 0000000..40fdb4b --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.device.service; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; + +import javax.servlet.http.HttpSession; + +public interface IClientAuthService { + /** + * @param deviceLoginForm + * @param session + * @return + */ + ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session); +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java new file mode 100644 index 0000000..576e857 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.device.service.impl; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import cn.hutool.jwt.JWT; +import cn.hutool.jwt.JWTUtil; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.util.IRiskCacheUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpSession; +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Service +public class ClientAuthServiceImpl implements IClientAuthService { + @Value("${casic.client.privateKey:MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALKcwHHOg0F6Zkq7GOVnOnTgvH9vSPXFFTOcEqOVBIBPBz7UNrEGkp1PhZ+oC4WVJAsDuot2e1fDZy9QS9HF92MmnYp9kuQRhGZjHctPnVZ0Kai5BES0ytHqPeauLyNXxOOS0YKYEUwpft4Z5Azw7bj3JWNvLrnTZvNld6FDvTslAgMBAAECgYAqN/kZLYpC+O6i7XSmDO95XwHPUXu6dDpdt5+EQR4OQh/hTwIaeAZB3uEj6vHGQomBfQEkI/5lsU97lIxHanbd+Hro7JyIhsGD5LR5XnZHVKzFiZW62OIU6FI9dlQNN8miiblnmyDwiMA3okaHl0O7qQjZ+IvY2csgmJc7AXpPpQJBAOhrhcfWFcgffj2O6HYNlBLFfbboc/ZzrEADDXKnxRSHlo5o8W+6gylG/L2NGtbag5S68B9VYzdkSQ1++5C+Ws8CQQDEu7h311PLEiKgqzGHpjzadQETmt/jMadaKQmT0TZwNVi6X8lR17U5hF8dAqZzUzr9kUC0HRIZhg4Uv1v3W3fLAkB4YPhxgJjXhjhEefg87Nt8vX1Xdx5Yz6CvpuUYNX0GHRQFvqUOUXQNtQ7CvorgLV1pc0lbcUZqMi8EJnj1hyJRAkEAjHXWm8GiMt+M15fCsi3vTq2xChVOekBuUsHv85iwvGZqJg7ThtpyqlEnM2g7/STUfkvhnXcQACclEI0blTy6BwJAPmFyhU+d0ejVpbc53TdrL2HqYYUHi/tTy/dtUa7lbypzdwwJ2M1Tv5PE8sQxr9tgMbebfxVb/RFKdiCCtzC4ng==}") + private String privateKey; + + @Override + public ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session) { + //固定秘钥解析 + try { + String str = RSAUtils.decrypt(deviceLoginForm.getSecret(), privateKey); + Long time = Long.valueOf(StrUtil.split(str, "_").get(1)); + //边缘盒子时差与服务时差不可超过24小时 + if (time == null || System.currentTimeMillis() - time > 3600 * 24 * 1000) { + return ResponseData.error("请求时间超时"); + } + deviceLoginForm.setTime(time); + } catch (Exception e) { + e.printStackTrace(); + return ResponseData.error("设备解析异常!"); + } + + try { + String token = this.createJwtToken(deviceLoginForm); + IRiskCacheUtil.put(token, token); + return ResponseData.success(token); + } catch (Exception e) { + log.error("设备登录异常:{}", e.getMessage()); + return ResponseData.error("登录异常,请联系管理员"); + } +} + /** + * token创建 + * + * @param loginForm 登录信息 + * @param device 设备信息 + * @return + * @throws Exception + */ + public String createJwtToken(RiskLoginForm loginForm) throws Exception { + Map payload = new HashMap<>(); + payload.put("clientId", loginForm.getClientId()); // 设备编号 + payload.put("time", loginForm.getTime()); // 请求时间 + + //RSA 解密 + String str = RSAUtils.decrypt(loginForm.getSecret(), privateKey); + String key = loginForm.getClientId()+"_" + loginForm.getTime() ; + if (!key.equals(str)) { + //秘钥验证失败 + throw new ServiceException(500,"秘钥验证失败"); + } + +// long exp = new Date().getTime() + 2 * 3600000; // 2小时后的时间戳 +// payload.put("exp", exp); + + // 创建JWT + String jwt = JWTUtil.createToken(payload, "token-203-202405".getBytes()); + + return jwt; + } + + /** + * token解析 + * + * @param jwtStr token + * @return + * @throws Exception + */ + public static RiskLoginForm parseToken(String jwtStr){ + JWT jwtObj = new JWTUtil().parseToken(jwtStr); + RiskLoginForm deviceLoginForm = new RiskLoginForm(); + deviceLoginForm.setClientId(Convert.toStr(jwtObj.getPayload("clientId"))); + return deviceLoginForm; + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java new file mode 100644 index 0000000..0e91ac8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.util; +import cn.hutool.cache.Cache; +import cn.hutool.cache.CacheUtil; +/** + * token有效 + */ +public class IRiskCacheUtil { + /** + * 1小时内不活跃 会踢掉 + */ + private static Cache fifoCache = CacheUtil.newFIFOCache(1000, 1000 * 60 * 60); + + public static void put(String key, String value) { + fifoCache.put(key, value); + } + + public static String get(String key) { + return fifoCache.get(key); + } + + public static void remove(String key) { + fifoCache.remove(key); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java new file mode 100644 index 0000000..805c32a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceGroupDict extends AbstractDictMap { + + @Override + public void init() { + //检索条件 + put("groupName", "分组名称"); + put("startTime", "起始时间"); + put("endTime", "结束时间"); + //新增修改属性 + put("cameraIds", "设备国标号"); + put("personIds", "人员主键集合"); + put("description","备注"); + put("id","主键"); + put("ids","主键集合"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java new file mode 100644 index 0000000..895fbd9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceQueryDict extends AbstractDictMap { + + @Override + public void init() { + put("devType", "类型查询"); + put("keyword", "设备名称"); + put("deptName", "所属单位"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java new file mode 100644 index 0000000..88da6df --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.device.util; + +public class DeviceScopeUtil { +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java new file mode 100644 index 0000000..2e3e478 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.device.controller; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.auth.dto.DeviceLoginForm; +import com.casic.missiles.modular.auth.util.ICacheUtil; +import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; +import com.casic.missiles.modular.device.service.IAlarmRecordService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +@Api(tags = "告警记录") +@RestController +@RequestMapping("/record") +public class AlarmUploadController extends BaseController { + + private final IAlarmRecordService alarmRecordService; + private final IDeviceAuthService deviceAuthService; + public AlarmUploadController(IAlarmRecordService alarmRecordService, IDeviceAuthService deviceAuthService) { + this.alarmRecordService = alarmRecordService; + this.deviceAuthService = deviceAuthService; + } + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } + @BussinessLog(value = "告警记录上报接口") + @ApiOperation(value = "告警记录上报接口") + @PostMapping(value = "/upload") + public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return createAuthError(); + } + alarmRecordService.upload(alarmRecord); + return ResponseDataDTO.success(); + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java new file mode 100644 index 0000000..3f1c189 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class RecognitionStreamDTO { + private Long id; + private String recognitionStreamFlag; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java new file mode 100644 index 0000000..fa5ae4a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java @@ -0,0 +1,167 @@ +package com.casic.missiles.modular.group.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IRiskPointInfoService; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.group.vo.SysRiskGroupPointVO; +import com.casic.missiles.modular.group.vo.SysRiskGroupRelUserVO; +import com.casic.missiles.modular.group.vo.SysRiskUserGroupVO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import com.casic.missiles.modular.system.vo.SysGroupRelUserVO; +import com.casic.missiles.modular.system.vo.SysUserGroupVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.ibatis.annotations.Param; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; + +/** + * 风险点组信息Controller + * + * @author lwh + * @date 2024-07-11 + */ +@Api(tags = "风险点组信息") +@RestController +@RequestMapping("/sys/risk/group") +public class SysUserRiskGroupController extends BaseController { + private final IRiskPointInfoService riskPointInfoService; + private final ISysUserRiskGroupService sysUserGroupService; + private final AbstractPermissionContext permissionContext; + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysUserRiskGroupController(IRiskPointInfoService riskPointInfoService, ISysUserRiskGroupService sysUserGroupService, AbstractPermissionContext permissionContext, ISysRiskGroupRelUserService sysGroupRelUserService) { + this.riskPointInfoService = riskPointInfoService; + this.sysUserGroupService = sysUserGroupService; + this.permissionContext = permissionContext; + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @BussinessLog(value = "风险点分组查询") + @ApiOperation(value = "风险点分组查询", hidden = true) + @GetMapping(value = "/list") + public ResponseDataDTO> list(SysRiskUserGroupVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysUserGroupService.list(query)); + } + + @BussinessLog(value = "分组人员列表查询") + @ApiOperation(value = "分组人员列表查询") + @GetMapping(value = "/groupUserList") + public ResponseDataDTO> groupUserList(SysRiskGroupRelUserVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysGroupRelUserService.list(query)); + } + + @BussinessLog(value = "风险点分组人员查询") + @ApiOperation(value = "风险点分组人员分页查询") + @GetMapping(value = "/groupUserPage") + public ResponseDataDTO> listPage(SysRiskGroupRelUserVO sysGroupRelUserVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysGroupRelUserVO.genQuery(); + List relUsers = sysGroupRelUserService.selectSysGroupRelUserPage(page, query); + page.setRecords(relUsers); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "用户分组批量新增") + @ApiOperation(value = "批量新增接口") + @PostMapping(value = "/batch-add") + public ResponseDataDTO batchAdd(@RequestBody GroupUserRelDTO relDTO) { + sysGroupRelUserService.batchAdd(relDTO); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组人员删除") + @ApiOperation(value = "用户组人员删除接口") + @GetMapping(value = "/user/delete") + public ResponseDataDTO userDel(@Param("用户组人员关联主键") String id) { + sysGroupRelUserService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "风险点分组分页查询") + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(SysRiskUserGroupVO sysUserGroupVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysUserGroupVO.genQuery(); + + List sysUserGroups = sysUserGroupService.selectSysUserGroupPage(page, query); + page.setRecords(sysUserGroups); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "风险点分组新增") + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.save(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组修改") + @ApiOperation(value = "修改接口") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.updateById(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组删除") + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + sysUserGroupService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "批量删除") + @ApiOperation(value = "批量删除", hidden = true) + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + sysUserGroupService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "详情查询") + @ApiOperation(value = "详情查询", hidden = true) + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(sysUserGroupService.getById(id)); + } + + @BussinessLog(value = "用户树") + @ApiOperation(value = "用户树查询") + @GetMapping(value = "/person/tree") + public ResponseDataDTO> personTree() { + return ResponseDataDTO.success(sysUserGroupService.personTree()); + } + + @BussinessLog(value = "风险点树查询") + @ApiOperation(value = "风险点树查询") + @GetMapping(value = "/tree") + public ResponseDataDTO> tree(String riskType) { + return ResponseDataDTO.success(riskPointInfoService.tree(riskType)); + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java new file mode 100644 index 0000000..419eb27 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备所属人员组 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupPointMapper extends BaseMapper { +/** +* 设备所属人员组 分页检索 +*/ +List selectSysGroupDevicePage(@Param("page") Page page, @Param("ew" ) QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java new file mode 100644 index 0000000..eb41227 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 组人员管理 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupRelUserMapper extends BaseMapper { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java new file mode 100644 index 0000000..e8352df --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.system.model.SysUserGroup; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 用户组信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysUserRiskGroupMapper extends BaseMapper { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java new file mode 100644 index 0000000..1ca5eb1 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java @@ -0,0 +1,63 @@ +package com.casic.missiles.modular.device.enums; + +/** + * wvp设备类型转换 + * + * @author lwh + * @Date 2017年1月10日 下午9:54:13 + */ +public enum AvDeptEnum { + + DEPT0("0066", "801",0L), + DEPT1("0059", "699厂",1L), + DEPT2("0055", "283厂",1L), + DEPT3("0022", "201所",1L), + DEPT4("0027", "206所",1L), + DEPT5("0013", "23所",1L); + + String code; + String message; + Long deptId; + AvDeptEnum(String code, String message, Long deptId) { + this.code = code; + this.message = message; + this.deptId = deptId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public static AvDeptEnum valueOfCode(String value) { + if (value == null) { + return null; + } else { + for (AvDeptEnum ms : AvDeptEnum.values()) { + if (ms.getCode().equals(value)) { + return ms; + } + } + return null; + } + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java new file mode 100644 index 0000000..573d0e2 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.task; + +import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; + +public class Test { + public static void main(String[] args) { + System.out.println(AvStatusTypeEnum.valueOfType(new Integer(1)).getMessage()); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java new file mode 100644 index 0000000..7c06c67 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java @@ -0,0 +1,77 @@ +package com.casic.missiles.modular.device.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpSession; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class RiskSyncController extends BaseController { + @Resource + private IClientAuthService clientAuthService; + @Resource + private AbstractDeptService deptService; + @Resource + private AbstractUserService userService; + @PostMapping("/client/login") + @ResponseBody + public ResponseData login(@RequestBody RiskLoginForm deviceLoginForm, HttpSession session) { + return clientAuthService.login(deviceLoginForm, session); + } + + /** + * 全量组织信息读取 + * + * @return + */ + @PostMapping("/dept/list") + @ResponseBody + public ResponseDataDTO> dept() { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = deptService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量用户信息读取 + * + * @return + */ + @PostMapping("/user/list") + @ResponseBody + public ResponseDataDTO> user() { + //todo 此处租户拦截需移除 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量设备信息读取 + * + * @return + */ + @PostMapping("/device/list") + @ResponseBody + public ResponseDataDTO> device() { + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java new file mode 100644 index 0000000..5e5b890 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class UserSyncController extends BaseController { + + @Resource + private IBusDeviceInfoService busDeviceInfoService; + + /** + * 登录用户授权设备权限查看 + * @return + */ + @GetMapping("/device/permissions") + @ResponseBody + public ResponseDataDTO> devicePermissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } + + /** + * 登录用户风险点授权查询 + * @return + */ + @GetMapping("/permissions") + @ResponseBody + public ResponseDataDTO> permissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java new file mode 100644 index 0000000..07b8df8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +/** + * 设备登录接口 + */ +@Data +public class RiskLoginForm { + /** + * 设备编码 + */ + private String clientId; + + /** + * 时间戳 + */ + private Long time; + + /** + * 加密后数据 加密格式sn+时间戳 时效性为6小时 + */ + private String secret; + + /** + * 设备登录注册IP + */ + private String ip; + + /** + * 设备登录注册port + */ + private String port; +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java new file mode 100644 index 0000000..40fdb4b --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.device.service; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; + +import javax.servlet.http.HttpSession; + +public interface IClientAuthService { + /** + * @param deviceLoginForm + * @param session + * @return + */ + ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session); +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java new file mode 100644 index 0000000..576e857 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.device.service.impl; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import cn.hutool.jwt.JWT; +import cn.hutool.jwt.JWTUtil; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.util.IRiskCacheUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpSession; +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Service +public class ClientAuthServiceImpl implements IClientAuthService { + @Value("${casic.client.privateKey:MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALKcwHHOg0F6Zkq7GOVnOnTgvH9vSPXFFTOcEqOVBIBPBz7UNrEGkp1PhZ+oC4WVJAsDuot2e1fDZy9QS9HF92MmnYp9kuQRhGZjHctPnVZ0Kai5BES0ytHqPeauLyNXxOOS0YKYEUwpft4Z5Azw7bj3JWNvLrnTZvNld6FDvTslAgMBAAECgYAqN/kZLYpC+O6i7XSmDO95XwHPUXu6dDpdt5+EQR4OQh/hTwIaeAZB3uEj6vHGQomBfQEkI/5lsU97lIxHanbd+Hro7JyIhsGD5LR5XnZHVKzFiZW62OIU6FI9dlQNN8miiblnmyDwiMA3okaHl0O7qQjZ+IvY2csgmJc7AXpPpQJBAOhrhcfWFcgffj2O6HYNlBLFfbboc/ZzrEADDXKnxRSHlo5o8W+6gylG/L2NGtbag5S68B9VYzdkSQ1++5C+Ws8CQQDEu7h311PLEiKgqzGHpjzadQETmt/jMadaKQmT0TZwNVi6X8lR17U5hF8dAqZzUzr9kUC0HRIZhg4Uv1v3W3fLAkB4YPhxgJjXhjhEefg87Nt8vX1Xdx5Yz6CvpuUYNX0GHRQFvqUOUXQNtQ7CvorgLV1pc0lbcUZqMi8EJnj1hyJRAkEAjHXWm8GiMt+M15fCsi3vTq2xChVOekBuUsHv85iwvGZqJg7ThtpyqlEnM2g7/STUfkvhnXcQACclEI0blTy6BwJAPmFyhU+d0ejVpbc53TdrL2HqYYUHi/tTy/dtUa7lbypzdwwJ2M1Tv5PE8sQxr9tgMbebfxVb/RFKdiCCtzC4ng==}") + private String privateKey; + + @Override + public ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session) { + //固定秘钥解析 + try { + String str = RSAUtils.decrypt(deviceLoginForm.getSecret(), privateKey); + Long time = Long.valueOf(StrUtil.split(str, "_").get(1)); + //边缘盒子时差与服务时差不可超过24小时 + if (time == null || System.currentTimeMillis() - time > 3600 * 24 * 1000) { + return ResponseData.error("请求时间超时"); + } + deviceLoginForm.setTime(time); + } catch (Exception e) { + e.printStackTrace(); + return ResponseData.error("设备解析异常!"); + } + + try { + String token = this.createJwtToken(deviceLoginForm); + IRiskCacheUtil.put(token, token); + return ResponseData.success(token); + } catch (Exception e) { + log.error("设备登录异常:{}", e.getMessage()); + return ResponseData.error("登录异常,请联系管理员"); + } +} + /** + * token创建 + * + * @param loginForm 登录信息 + * @param device 设备信息 + * @return + * @throws Exception + */ + public String createJwtToken(RiskLoginForm loginForm) throws Exception { + Map payload = new HashMap<>(); + payload.put("clientId", loginForm.getClientId()); // 设备编号 + payload.put("time", loginForm.getTime()); // 请求时间 + + //RSA 解密 + String str = RSAUtils.decrypt(loginForm.getSecret(), privateKey); + String key = loginForm.getClientId()+"_" + loginForm.getTime() ; + if (!key.equals(str)) { + //秘钥验证失败 + throw new ServiceException(500,"秘钥验证失败"); + } + +// long exp = new Date().getTime() + 2 * 3600000; // 2小时后的时间戳 +// payload.put("exp", exp); + + // 创建JWT + String jwt = JWTUtil.createToken(payload, "token-203-202405".getBytes()); + + return jwt; + } + + /** + * token解析 + * + * @param jwtStr token + * @return + * @throws Exception + */ + public static RiskLoginForm parseToken(String jwtStr){ + JWT jwtObj = new JWTUtil().parseToken(jwtStr); + RiskLoginForm deviceLoginForm = new RiskLoginForm(); + deviceLoginForm.setClientId(Convert.toStr(jwtObj.getPayload("clientId"))); + return deviceLoginForm; + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java new file mode 100644 index 0000000..0e91ac8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.util; +import cn.hutool.cache.Cache; +import cn.hutool.cache.CacheUtil; +/** + * token有效 + */ +public class IRiskCacheUtil { + /** + * 1小时内不活跃 会踢掉 + */ + private static Cache fifoCache = CacheUtil.newFIFOCache(1000, 1000 * 60 * 60); + + public static void put(String key, String value) { + fifoCache.put(key, value); + } + + public static String get(String key) { + return fifoCache.get(key); + } + + public static void remove(String key) { + fifoCache.remove(key); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java new file mode 100644 index 0000000..805c32a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceGroupDict extends AbstractDictMap { + + @Override + public void init() { + //检索条件 + put("groupName", "分组名称"); + put("startTime", "起始时间"); + put("endTime", "结束时间"); + //新增修改属性 + put("cameraIds", "设备国标号"); + put("personIds", "人员主键集合"); + put("description","备注"); + put("id","主键"); + put("ids","主键集合"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java new file mode 100644 index 0000000..895fbd9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceQueryDict extends AbstractDictMap { + + @Override + public void init() { + put("devType", "类型查询"); + put("keyword", "设备名称"); + put("deptName", "所属单位"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java new file mode 100644 index 0000000..88da6df --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.device.util; + +public class DeviceScopeUtil { +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java new file mode 100644 index 0000000..2e3e478 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.device.controller; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.auth.dto.DeviceLoginForm; +import com.casic.missiles.modular.auth.util.ICacheUtil; +import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; +import com.casic.missiles.modular.device.service.IAlarmRecordService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +@Api(tags = "告警记录") +@RestController +@RequestMapping("/record") +public class AlarmUploadController extends BaseController { + + private final IAlarmRecordService alarmRecordService; + private final IDeviceAuthService deviceAuthService; + public AlarmUploadController(IAlarmRecordService alarmRecordService, IDeviceAuthService deviceAuthService) { + this.alarmRecordService = alarmRecordService; + this.deviceAuthService = deviceAuthService; + } + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } + @BussinessLog(value = "告警记录上报接口") + @ApiOperation(value = "告警记录上报接口") + @PostMapping(value = "/upload") + public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return createAuthError(); + } + alarmRecordService.upload(alarmRecord); + return ResponseDataDTO.success(); + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java new file mode 100644 index 0000000..3f1c189 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class RecognitionStreamDTO { + private Long id; + private String recognitionStreamFlag; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java new file mode 100644 index 0000000..fa5ae4a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java @@ -0,0 +1,167 @@ +package com.casic.missiles.modular.group.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IRiskPointInfoService; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.group.vo.SysRiskGroupPointVO; +import com.casic.missiles.modular.group.vo.SysRiskGroupRelUserVO; +import com.casic.missiles.modular.group.vo.SysRiskUserGroupVO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import com.casic.missiles.modular.system.vo.SysGroupRelUserVO; +import com.casic.missiles.modular.system.vo.SysUserGroupVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.ibatis.annotations.Param; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; + +/** + * 风险点组信息Controller + * + * @author lwh + * @date 2024-07-11 + */ +@Api(tags = "风险点组信息") +@RestController +@RequestMapping("/sys/risk/group") +public class SysUserRiskGroupController extends BaseController { + private final IRiskPointInfoService riskPointInfoService; + private final ISysUserRiskGroupService sysUserGroupService; + private final AbstractPermissionContext permissionContext; + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysUserRiskGroupController(IRiskPointInfoService riskPointInfoService, ISysUserRiskGroupService sysUserGroupService, AbstractPermissionContext permissionContext, ISysRiskGroupRelUserService sysGroupRelUserService) { + this.riskPointInfoService = riskPointInfoService; + this.sysUserGroupService = sysUserGroupService; + this.permissionContext = permissionContext; + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @BussinessLog(value = "风险点分组查询") + @ApiOperation(value = "风险点分组查询", hidden = true) + @GetMapping(value = "/list") + public ResponseDataDTO> list(SysRiskUserGroupVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysUserGroupService.list(query)); + } + + @BussinessLog(value = "分组人员列表查询") + @ApiOperation(value = "分组人员列表查询") + @GetMapping(value = "/groupUserList") + public ResponseDataDTO> groupUserList(SysRiskGroupRelUserVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysGroupRelUserService.list(query)); + } + + @BussinessLog(value = "风险点分组人员查询") + @ApiOperation(value = "风险点分组人员分页查询") + @GetMapping(value = "/groupUserPage") + public ResponseDataDTO> listPage(SysRiskGroupRelUserVO sysGroupRelUserVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysGroupRelUserVO.genQuery(); + List relUsers = sysGroupRelUserService.selectSysGroupRelUserPage(page, query); + page.setRecords(relUsers); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "用户分组批量新增") + @ApiOperation(value = "批量新增接口") + @PostMapping(value = "/batch-add") + public ResponseDataDTO batchAdd(@RequestBody GroupUserRelDTO relDTO) { + sysGroupRelUserService.batchAdd(relDTO); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组人员删除") + @ApiOperation(value = "用户组人员删除接口") + @GetMapping(value = "/user/delete") + public ResponseDataDTO userDel(@Param("用户组人员关联主键") String id) { + sysGroupRelUserService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "风险点分组分页查询") + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(SysRiskUserGroupVO sysUserGroupVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysUserGroupVO.genQuery(); + + List sysUserGroups = sysUserGroupService.selectSysUserGroupPage(page, query); + page.setRecords(sysUserGroups); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "风险点分组新增") + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.save(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组修改") + @ApiOperation(value = "修改接口") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.updateById(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组删除") + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + sysUserGroupService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "批量删除") + @ApiOperation(value = "批量删除", hidden = true) + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + sysUserGroupService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "详情查询") + @ApiOperation(value = "详情查询", hidden = true) + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(sysUserGroupService.getById(id)); + } + + @BussinessLog(value = "用户树") + @ApiOperation(value = "用户树查询") + @GetMapping(value = "/person/tree") + public ResponseDataDTO> personTree() { + return ResponseDataDTO.success(sysUserGroupService.personTree()); + } + + @BussinessLog(value = "风险点树查询") + @ApiOperation(value = "风险点树查询") + @GetMapping(value = "/tree") + public ResponseDataDTO> tree(String riskType) { + return ResponseDataDTO.success(riskPointInfoService.tree(riskType)); + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java new file mode 100644 index 0000000..419eb27 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备所属人员组 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupPointMapper extends BaseMapper { +/** +* 设备所属人员组 分页检索 +*/ +List selectSysGroupDevicePage(@Param("page") Page page, @Param("ew" ) QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java new file mode 100644 index 0000000..eb41227 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 组人员管理 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupRelUserMapper extends BaseMapper { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java new file mode 100644 index 0000000..e8352df --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.system.model.SysUserGroup; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 用户组信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysUserRiskGroupMapper extends BaseMapper { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml new file mode 100644 index 0000000..6fa6a4d --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + id , + group_id as groupId , + create_time as createTime , + target_Id as targetId + + + a.id , + a.group_id + as groupId , + a.create_time + as createTime , + a.target_Id + as targetId + + + + + + and group_id = #{request.groupId} + + + and device_id = #{request.deviceId} + + + \ No newline at end of file diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java new file mode 100644 index 0000000..1ca5eb1 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java @@ -0,0 +1,63 @@ +package com.casic.missiles.modular.device.enums; + +/** + * wvp设备类型转换 + * + * @author lwh + * @Date 2017年1月10日 下午9:54:13 + */ +public enum AvDeptEnum { + + DEPT0("0066", "801",0L), + DEPT1("0059", "699厂",1L), + DEPT2("0055", "283厂",1L), + DEPT3("0022", "201所",1L), + DEPT4("0027", "206所",1L), + DEPT5("0013", "23所",1L); + + String code; + String message; + Long deptId; + AvDeptEnum(String code, String message, Long deptId) { + this.code = code; + this.message = message; + this.deptId = deptId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public static AvDeptEnum valueOfCode(String value) { + if (value == null) { + return null; + } else { + for (AvDeptEnum ms : AvDeptEnum.values()) { + if (ms.getCode().equals(value)) { + return ms; + } + } + return null; + } + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java new file mode 100644 index 0000000..573d0e2 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.task; + +import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; + +public class Test { + public static void main(String[] args) { + System.out.println(AvStatusTypeEnum.valueOfType(new Integer(1)).getMessage()); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java new file mode 100644 index 0000000..7c06c67 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java @@ -0,0 +1,77 @@ +package com.casic.missiles.modular.device.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpSession; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class RiskSyncController extends BaseController { + @Resource + private IClientAuthService clientAuthService; + @Resource + private AbstractDeptService deptService; + @Resource + private AbstractUserService userService; + @PostMapping("/client/login") + @ResponseBody + public ResponseData login(@RequestBody RiskLoginForm deviceLoginForm, HttpSession session) { + return clientAuthService.login(deviceLoginForm, session); + } + + /** + * 全量组织信息读取 + * + * @return + */ + @PostMapping("/dept/list") + @ResponseBody + public ResponseDataDTO> dept() { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = deptService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量用户信息读取 + * + * @return + */ + @PostMapping("/user/list") + @ResponseBody + public ResponseDataDTO> user() { + //todo 此处租户拦截需移除 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量设备信息读取 + * + * @return + */ + @PostMapping("/device/list") + @ResponseBody + public ResponseDataDTO> device() { + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java new file mode 100644 index 0000000..5e5b890 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class UserSyncController extends BaseController { + + @Resource + private IBusDeviceInfoService busDeviceInfoService; + + /** + * 登录用户授权设备权限查看 + * @return + */ + @GetMapping("/device/permissions") + @ResponseBody + public ResponseDataDTO> devicePermissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } + + /** + * 登录用户风险点授权查询 + * @return + */ + @GetMapping("/permissions") + @ResponseBody + public ResponseDataDTO> permissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java new file mode 100644 index 0000000..07b8df8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +/** + * 设备登录接口 + */ +@Data +public class RiskLoginForm { + /** + * 设备编码 + */ + private String clientId; + + /** + * 时间戳 + */ + private Long time; + + /** + * 加密后数据 加密格式sn+时间戳 时效性为6小时 + */ + private String secret; + + /** + * 设备登录注册IP + */ + private String ip; + + /** + * 设备登录注册port + */ + private String port; +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java new file mode 100644 index 0000000..40fdb4b --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.device.service; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; + +import javax.servlet.http.HttpSession; + +public interface IClientAuthService { + /** + * @param deviceLoginForm + * @param session + * @return + */ + ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session); +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java new file mode 100644 index 0000000..576e857 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.device.service.impl; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import cn.hutool.jwt.JWT; +import cn.hutool.jwt.JWTUtil; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.util.IRiskCacheUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpSession; +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Service +public class ClientAuthServiceImpl implements IClientAuthService { + @Value("${casic.client.privateKey:MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALKcwHHOg0F6Zkq7GOVnOnTgvH9vSPXFFTOcEqOVBIBPBz7UNrEGkp1PhZ+oC4WVJAsDuot2e1fDZy9QS9HF92MmnYp9kuQRhGZjHctPnVZ0Kai5BES0ytHqPeauLyNXxOOS0YKYEUwpft4Z5Azw7bj3JWNvLrnTZvNld6FDvTslAgMBAAECgYAqN/kZLYpC+O6i7XSmDO95XwHPUXu6dDpdt5+EQR4OQh/hTwIaeAZB3uEj6vHGQomBfQEkI/5lsU97lIxHanbd+Hro7JyIhsGD5LR5XnZHVKzFiZW62OIU6FI9dlQNN8miiblnmyDwiMA3okaHl0O7qQjZ+IvY2csgmJc7AXpPpQJBAOhrhcfWFcgffj2O6HYNlBLFfbboc/ZzrEADDXKnxRSHlo5o8W+6gylG/L2NGtbag5S68B9VYzdkSQ1++5C+Ws8CQQDEu7h311PLEiKgqzGHpjzadQETmt/jMadaKQmT0TZwNVi6X8lR17U5hF8dAqZzUzr9kUC0HRIZhg4Uv1v3W3fLAkB4YPhxgJjXhjhEefg87Nt8vX1Xdx5Yz6CvpuUYNX0GHRQFvqUOUXQNtQ7CvorgLV1pc0lbcUZqMi8EJnj1hyJRAkEAjHXWm8GiMt+M15fCsi3vTq2xChVOekBuUsHv85iwvGZqJg7ThtpyqlEnM2g7/STUfkvhnXcQACclEI0blTy6BwJAPmFyhU+d0ejVpbc53TdrL2HqYYUHi/tTy/dtUa7lbypzdwwJ2M1Tv5PE8sQxr9tgMbebfxVb/RFKdiCCtzC4ng==}") + private String privateKey; + + @Override + public ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session) { + //固定秘钥解析 + try { + String str = RSAUtils.decrypt(deviceLoginForm.getSecret(), privateKey); + Long time = Long.valueOf(StrUtil.split(str, "_").get(1)); + //边缘盒子时差与服务时差不可超过24小时 + if (time == null || System.currentTimeMillis() - time > 3600 * 24 * 1000) { + return ResponseData.error("请求时间超时"); + } + deviceLoginForm.setTime(time); + } catch (Exception e) { + e.printStackTrace(); + return ResponseData.error("设备解析异常!"); + } + + try { + String token = this.createJwtToken(deviceLoginForm); + IRiskCacheUtil.put(token, token); + return ResponseData.success(token); + } catch (Exception e) { + log.error("设备登录异常:{}", e.getMessage()); + return ResponseData.error("登录异常,请联系管理员"); + } +} + /** + * token创建 + * + * @param loginForm 登录信息 + * @param device 设备信息 + * @return + * @throws Exception + */ + public String createJwtToken(RiskLoginForm loginForm) throws Exception { + Map payload = new HashMap<>(); + payload.put("clientId", loginForm.getClientId()); // 设备编号 + payload.put("time", loginForm.getTime()); // 请求时间 + + //RSA 解密 + String str = RSAUtils.decrypt(loginForm.getSecret(), privateKey); + String key = loginForm.getClientId()+"_" + loginForm.getTime() ; + if (!key.equals(str)) { + //秘钥验证失败 + throw new ServiceException(500,"秘钥验证失败"); + } + +// long exp = new Date().getTime() + 2 * 3600000; // 2小时后的时间戳 +// payload.put("exp", exp); + + // 创建JWT + String jwt = JWTUtil.createToken(payload, "token-203-202405".getBytes()); + + return jwt; + } + + /** + * token解析 + * + * @param jwtStr token + * @return + * @throws Exception + */ + public static RiskLoginForm parseToken(String jwtStr){ + JWT jwtObj = new JWTUtil().parseToken(jwtStr); + RiskLoginForm deviceLoginForm = new RiskLoginForm(); + deviceLoginForm.setClientId(Convert.toStr(jwtObj.getPayload("clientId"))); + return deviceLoginForm; + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java new file mode 100644 index 0000000..0e91ac8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.util; +import cn.hutool.cache.Cache; +import cn.hutool.cache.CacheUtil; +/** + * token有效 + */ +public class IRiskCacheUtil { + /** + * 1小时内不活跃 会踢掉 + */ + private static Cache fifoCache = CacheUtil.newFIFOCache(1000, 1000 * 60 * 60); + + public static void put(String key, String value) { + fifoCache.put(key, value); + } + + public static String get(String key) { + return fifoCache.get(key); + } + + public static void remove(String key) { + fifoCache.remove(key); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java new file mode 100644 index 0000000..805c32a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceGroupDict extends AbstractDictMap { + + @Override + public void init() { + //检索条件 + put("groupName", "分组名称"); + put("startTime", "起始时间"); + put("endTime", "结束时间"); + //新增修改属性 + put("cameraIds", "设备国标号"); + put("personIds", "人员主键集合"); + put("description","备注"); + put("id","主键"); + put("ids","主键集合"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java new file mode 100644 index 0000000..895fbd9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceQueryDict extends AbstractDictMap { + + @Override + public void init() { + put("devType", "类型查询"); + put("keyword", "设备名称"); + put("deptName", "所属单位"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java new file mode 100644 index 0000000..88da6df --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.device.util; + +public class DeviceScopeUtil { +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java new file mode 100644 index 0000000..2e3e478 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.device.controller; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.auth.dto.DeviceLoginForm; +import com.casic.missiles.modular.auth.util.ICacheUtil; +import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; +import com.casic.missiles.modular.device.service.IAlarmRecordService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +@Api(tags = "告警记录") +@RestController +@RequestMapping("/record") +public class AlarmUploadController extends BaseController { + + private final IAlarmRecordService alarmRecordService; + private final IDeviceAuthService deviceAuthService; + public AlarmUploadController(IAlarmRecordService alarmRecordService, IDeviceAuthService deviceAuthService) { + this.alarmRecordService = alarmRecordService; + this.deviceAuthService = deviceAuthService; + } + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } + @BussinessLog(value = "告警记录上报接口") + @ApiOperation(value = "告警记录上报接口") + @PostMapping(value = "/upload") + public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return createAuthError(); + } + alarmRecordService.upload(alarmRecord); + return ResponseDataDTO.success(); + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java new file mode 100644 index 0000000..3f1c189 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class RecognitionStreamDTO { + private Long id; + private String recognitionStreamFlag; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java new file mode 100644 index 0000000..fa5ae4a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java @@ -0,0 +1,167 @@ +package com.casic.missiles.modular.group.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IRiskPointInfoService; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.group.vo.SysRiskGroupPointVO; +import com.casic.missiles.modular.group.vo.SysRiskGroupRelUserVO; +import com.casic.missiles.modular.group.vo.SysRiskUserGroupVO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import com.casic.missiles.modular.system.vo.SysGroupRelUserVO; +import com.casic.missiles.modular.system.vo.SysUserGroupVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.ibatis.annotations.Param; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; + +/** + * 风险点组信息Controller + * + * @author lwh + * @date 2024-07-11 + */ +@Api(tags = "风险点组信息") +@RestController +@RequestMapping("/sys/risk/group") +public class SysUserRiskGroupController extends BaseController { + private final IRiskPointInfoService riskPointInfoService; + private final ISysUserRiskGroupService sysUserGroupService; + private final AbstractPermissionContext permissionContext; + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysUserRiskGroupController(IRiskPointInfoService riskPointInfoService, ISysUserRiskGroupService sysUserGroupService, AbstractPermissionContext permissionContext, ISysRiskGroupRelUserService sysGroupRelUserService) { + this.riskPointInfoService = riskPointInfoService; + this.sysUserGroupService = sysUserGroupService; + this.permissionContext = permissionContext; + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @BussinessLog(value = "风险点分组查询") + @ApiOperation(value = "风险点分组查询", hidden = true) + @GetMapping(value = "/list") + public ResponseDataDTO> list(SysRiskUserGroupVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysUserGroupService.list(query)); + } + + @BussinessLog(value = "分组人员列表查询") + @ApiOperation(value = "分组人员列表查询") + @GetMapping(value = "/groupUserList") + public ResponseDataDTO> groupUserList(SysRiskGroupRelUserVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysGroupRelUserService.list(query)); + } + + @BussinessLog(value = "风险点分组人员查询") + @ApiOperation(value = "风险点分组人员分页查询") + @GetMapping(value = "/groupUserPage") + public ResponseDataDTO> listPage(SysRiskGroupRelUserVO sysGroupRelUserVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysGroupRelUserVO.genQuery(); + List relUsers = sysGroupRelUserService.selectSysGroupRelUserPage(page, query); + page.setRecords(relUsers); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "用户分组批量新增") + @ApiOperation(value = "批量新增接口") + @PostMapping(value = "/batch-add") + public ResponseDataDTO batchAdd(@RequestBody GroupUserRelDTO relDTO) { + sysGroupRelUserService.batchAdd(relDTO); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组人员删除") + @ApiOperation(value = "用户组人员删除接口") + @GetMapping(value = "/user/delete") + public ResponseDataDTO userDel(@Param("用户组人员关联主键") String id) { + sysGroupRelUserService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "风险点分组分页查询") + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(SysRiskUserGroupVO sysUserGroupVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysUserGroupVO.genQuery(); + + List sysUserGroups = sysUserGroupService.selectSysUserGroupPage(page, query); + page.setRecords(sysUserGroups); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "风险点分组新增") + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.save(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组修改") + @ApiOperation(value = "修改接口") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.updateById(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组删除") + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + sysUserGroupService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "批量删除") + @ApiOperation(value = "批量删除", hidden = true) + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + sysUserGroupService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "详情查询") + @ApiOperation(value = "详情查询", hidden = true) + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(sysUserGroupService.getById(id)); + } + + @BussinessLog(value = "用户树") + @ApiOperation(value = "用户树查询") + @GetMapping(value = "/person/tree") + public ResponseDataDTO> personTree() { + return ResponseDataDTO.success(sysUserGroupService.personTree()); + } + + @BussinessLog(value = "风险点树查询") + @ApiOperation(value = "风险点树查询") + @GetMapping(value = "/tree") + public ResponseDataDTO> tree(String riskType) { + return ResponseDataDTO.success(riskPointInfoService.tree(riskType)); + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java new file mode 100644 index 0000000..419eb27 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备所属人员组 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupPointMapper extends BaseMapper { +/** +* 设备所属人员组 分页检索 +*/ +List selectSysGroupDevicePage(@Param("page") Page page, @Param("ew" ) QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java new file mode 100644 index 0000000..eb41227 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 组人员管理 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupRelUserMapper extends BaseMapper { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java new file mode 100644 index 0000000..e8352df --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.system.model.SysUserGroup; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 用户组信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysUserRiskGroupMapper extends BaseMapper { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml new file mode 100644 index 0000000..6fa6a4d --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + id , + group_id as groupId , + create_time as createTime , + target_Id as targetId + + + a.id , + a.group_id + as groupId , + a.create_time + as createTime , + a.target_Id + as targetId + + + + + + and group_id = #{request.groupId} + + + and device_id = #{request.deviceId} + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml new file mode 100644 index 0000000..a627546 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + id , + group_id as groupId , + user_id as userId , + create_time as createTime + + + a.id, + a.group_id + as groupId , + a.user_id + as userId , + a.create_time + as createTime + + + + + + and group_id = #{request.groupId} + + + and user_id = #{request.userId} + + + + \ No newline at end of file diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java new file mode 100644 index 0000000..1ca5eb1 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java @@ -0,0 +1,63 @@ +package com.casic.missiles.modular.device.enums; + +/** + * wvp设备类型转换 + * + * @author lwh + * @Date 2017年1月10日 下午9:54:13 + */ +public enum AvDeptEnum { + + DEPT0("0066", "801",0L), + DEPT1("0059", "699厂",1L), + DEPT2("0055", "283厂",1L), + DEPT3("0022", "201所",1L), + DEPT4("0027", "206所",1L), + DEPT5("0013", "23所",1L); + + String code; + String message; + Long deptId; + AvDeptEnum(String code, String message, Long deptId) { + this.code = code; + this.message = message; + this.deptId = deptId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public static AvDeptEnum valueOfCode(String value) { + if (value == null) { + return null; + } else { + for (AvDeptEnum ms : AvDeptEnum.values()) { + if (ms.getCode().equals(value)) { + return ms; + } + } + return null; + } + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java new file mode 100644 index 0000000..573d0e2 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.task; + +import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; + +public class Test { + public static void main(String[] args) { + System.out.println(AvStatusTypeEnum.valueOfType(new Integer(1)).getMessage()); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java new file mode 100644 index 0000000..7c06c67 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java @@ -0,0 +1,77 @@ +package com.casic.missiles.modular.device.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpSession; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class RiskSyncController extends BaseController { + @Resource + private IClientAuthService clientAuthService; + @Resource + private AbstractDeptService deptService; + @Resource + private AbstractUserService userService; + @PostMapping("/client/login") + @ResponseBody + public ResponseData login(@RequestBody RiskLoginForm deviceLoginForm, HttpSession session) { + return clientAuthService.login(deviceLoginForm, session); + } + + /** + * 全量组织信息读取 + * + * @return + */ + @PostMapping("/dept/list") + @ResponseBody + public ResponseDataDTO> dept() { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = deptService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量用户信息读取 + * + * @return + */ + @PostMapping("/user/list") + @ResponseBody + public ResponseDataDTO> user() { + //todo 此处租户拦截需移除 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量设备信息读取 + * + * @return + */ + @PostMapping("/device/list") + @ResponseBody + public ResponseDataDTO> device() { + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java new file mode 100644 index 0000000..5e5b890 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class UserSyncController extends BaseController { + + @Resource + private IBusDeviceInfoService busDeviceInfoService; + + /** + * 登录用户授权设备权限查看 + * @return + */ + @GetMapping("/device/permissions") + @ResponseBody + public ResponseDataDTO> devicePermissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } + + /** + * 登录用户风险点授权查询 + * @return + */ + @GetMapping("/permissions") + @ResponseBody + public ResponseDataDTO> permissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java new file mode 100644 index 0000000..07b8df8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +/** + * 设备登录接口 + */ +@Data +public class RiskLoginForm { + /** + * 设备编码 + */ + private String clientId; + + /** + * 时间戳 + */ + private Long time; + + /** + * 加密后数据 加密格式sn+时间戳 时效性为6小时 + */ + private String secret; + + /** + * 设备登录注册IP + */ + private String ip; + + /** + * 设备登录注册port + */ + private String port; +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java new file mode 100644 index 0000000..40fdb4b --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.device.service; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; + +import javax.servlet.http.HttpSession; + +public interface IClientAuthService { + /** + * @param deviceLoginForm + * @param session + * @return + */ + ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session); +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java new file mode 100644 index 0000000..576e857 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.device.service.impl; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import cn.hutool.jwt.JWT; +import cn.hutool.jwt.JWTUtil; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.util.IRiskCacheUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpSession; +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Service +public class ClientAuthServiceImpl implements IClientAuthService { + @Value("${casic.client.privateKey:MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALKcwHHOg0F6Zkq7GOVnOnTgvH9vSPXFFTOcEqOVBIBPBz7UNrEGkp1PhZ+oC4WVJAsDuot2e1fDZy9QS9HF92MmnYp9kuQRhGZjHctPnVZ0Kai5BES0ytHqPeauLyNXxOOS0YKYEUwpft4Z5Azw7bj3JWNvLrnTZvNld6FDvTslAgMBAAECgYAqN/kZLYpC+O6i7XSmDO95XwHPUXu6dDpdt5+EQR4OQh/hTwIaeAZB3uEj6vHGQomBfQEkI/5lsU97lIxHanbd+Hro7JyIhsGD5LR5XnZHVKzFiZW62OIU6FI9dlQNN8miiblnmyDwiMA3okaHl0O7qQjZ+IvY2csgmJc7AXpPpQJBAOhrhcfWFcgffj2O6HYNlBLFfbboc/ZzrEADDXKnxRSHlo5o8W+6gylG/L2NGtbag5S68B9VYzdkSQ1++5C+Ws8CQQDEu7h311PLEiKgqzGHpjzadQETmt/jMadaKQmT0TZwNVi6X8lR17U5hF8dAqZzUzr9kUC0HRIZhg4Uv1v3W3fLAkB4YPhxgJjXhjhEefg87Nt8vX1Xdx5Yz6CvpuUYNX0GHRQFvqUOUXQNtQ7CvorgLV1pc0lbcUZqMi8EJnj1hyJRAkEAjHXWm8GiMt+M15fCsi3vTq2xChVOekBuUsHv85iwvGZqJg7ThtpyqlEnM2g7/STUfkvhnXcQACclEI0blTy6BwJAPmFyhU+d0ejVpbc53TdrL2HqYYUHi/tTy/dtUa7lbypzdwwJ2M1Tv5PE8sQxr9tgMbebfxVb/RFKdiCCtzC4ng==}") + private String privateKey; + + @Override + public ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session) { + //固定秘钥解析 + try { + String str = RSAUtils.decrypt(deviceLoginForm.getSecret(), privateKey); + Long time = Long.valueOf(StrUtil.split(str, "_").get(1)); + //边缘盒子时差与服务时差不可超过24小时 + if (time == null || System.currentTimeMillis() - time > 3600 * 24 * 1000) { + return ResponseData.error("请求时间超时"); + } + deviceLoginForm.setTime(time); + } catch (Exception e) { + e.printStackTrace(); + return ResponseData.error("设备解析异常!"); + } + + try { + String token = this.createJwtToken(deviceLoginForm); + IRiskCacheUtil.put(token, token); + return ResponseData.success(token); + } catch (Exception e) { + log.error("设备登录异常:{}", e.getMessage()); + return ResponseData.error("登录异常,请联系管理员"); + } +} + /** + * token创建 + * + * @param loginForm 登录信息 + * @param device 设备信息 + * @return + * @throws Exception + */ + public String createJwtToken(RiskLoginForm loginForm) throws Exception { + Map payload = new HashMap<>(); + payload.put("clientId", loginForm.getClientId()); // 设备编号 + payload.put("time", loginForm.getTime()); // 请求时间 + + //RSA 解密 + String str = RSAUtils.decrypt(loginForm.getSecret(), privateKey); + String key = loginForm.getClientId()+"_" + loginForm.getTime() ; + if (!key.equals(str)) { + //秘钥验证失败 + throw new ServiceException(500,"秘钥验证失败"); + } + +// long exp = new Date().getTime() + 2 * 3600000; // 2小时后的时间戳 +// payload.put("exp", exp); + + // 创建JWT + String jwt = JWTUtil.createToken(payload, "token-203-202405".getBytes()); + + return jwt; + } + + /** + * token解析 + * + * @param jwtStr token + * @return + * @throws Exception + */ + public static RiskLoginForm parseToken(String jwtStr){ + JWT jwtObj = new JWTUtil().parseToken(jwtStr); + RiskLoginForm deviceLoginForm = new RiskLoginForm(); + deviceLoginForm.setClientId(Convert.toStr(jwtObj.getPayload("clientId"))); + return deviceLoginForm; + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java new file mode 100644 index 0000000..0e91ac8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.util; +import cn.hutool.cache.Cache; +import cn.hutool.cache.CacheUtil; +/** + * token有效 + */ +public class IRiskCacheUtil { + /** + * 1小时内不活跃 会踢掉 + */ + private static Cache fifoCache = CacheUtil.newFIFOCache(1000, 1000 * 60 * 60); + + public static void put(String key, String value) { + fifoCache.put(key, value); + } + + public static String get(String key) { + return fifoCache.get(key); + } + + public static void remove(String key) { + fifoCache.remove(key); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java new file mode 100644 index 0000000..805c32a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceGroupDict extends AbstractDictMap { + + @Override + public void init() { + //检索条件 + put("groupName", "分组名称"); + put("startTime", "起始时间"); + put("endTime", "结束时间"); + //新增修改属性 + put("cameraIds", "设备国标号"); + put("personIds", "人员主键集合"); + put("description","备注"); + put("id","主键"); + put("ids","主键集合"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java new file mode 100644 index 0000000..895fbd9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceQueryDict extends AbstractDictMap { + + @Override + public void init() { + put("devType", "类型查询"); + put("keyword", "设备名称"); + put("deptName", "所属单位"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java new file mode 100644 index 0000000..88da6df --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.device.util; + +public class DeviceScopeUtil { +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java new file mode 100644 index 0000000..2e3e478 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.device.controller; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.auth.dto.DeviceLoginForm; +import com.casic.missiles.modular.auth.util.ICacheUtil; +import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; +import com.casic.missiles.modular.device.service.IAlarmRecordService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +@Api(tags = "告警记录") +@RestController +@RequestMapping("/record") +public class AlarmUploadController extends BaseController { + + private final IAlarmRecordService alarmRecordService; + private final IDeviceAuthService deviceAuthService; + public AlarmUploadController(IAlarmRecordService alarmRecordService, IDeviceAuthService deviceAuthService) { + this.alarmRecordService = alarmRecordService; + this.deviceAuthService = deviceAuthService; + } + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } + @BussinessLog(value = "告警记录上报接口") + @ApiOperation(value = "告警记录上报接口") + @PostMapping(value = "/upload") + public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return createAuthError(); + } + alarmRecordService.upload(alarmRecord); + return ResponseDataDTO.success(); + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java new file mode 100644 index 0000000..3f1c189 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class RecognitionStreamDTO { + private Long id; + private String recognitionStreamFlag; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java new file mode 100644 index 0000000..fa5ae4a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java @@ -0,0 +1,167 @@ +package com.casic.missiles.modular.group.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IRiskPointInfoService; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.group.vo.SysRiskGroupPointVO; +import com.casic.missiles.modular.group.vo.SysRiskGroupRelUserVO; +import com.casic.missiles.modular.group.vo.SysRiskUserGroupVO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import com.casic.missiles.modular.system.vo.SysGroupRelUserVO; +import com.casic.missiles.modular.system.vo.SysUserGroupVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.ibatis.annotations.Param; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; + +/** + * 风险点组信息Controller + * + * @author lwh + * @date 2024-07-11 + */ +@Api(tags = "风险点组信息") +@RestController +@RequestMapping("/sys/risk/group") +public class SysUserRiskGroupController extends BaseController { + private final IRiskPointInfoService riskPointInfoService; + private final ISysUserRiskGroupService sysUserGroupService; + private final AbstractPermissionContext permissionContext; + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysUserRiskGroupController(IRiskPointInfoService riskPointInfoService, ISysUserRiskGroupService sysUserGroupService, AbstractPermissionContext permissionContext, ISysRiskGroupRelUserService sysGroupRelUserService) { + this.riskPointInfoService = riskPointInfoService; + this.sysUserGroupService = sysUserGroupService; + this.permissionContext = permissionContext; + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @BussinessLog(value = "风险点分组查询") + @ApiOperation(value = "风险点分组查询", hidden = true) + @GetMapping(value = "/list") + public ResponseDataDTO> list(SysRiskUserGroupVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysUserGroupService.list(query)); + } + + @BussinessLog(value = "分组人员列表查询") + @ApiOperation(value = "分组人员列表查询") + @GetMapping(value = "/groupUserList") + public ResponseDataDTO> groupUserList(SysRiskGroupRelUserVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysGroupRelUserService.list(query)); + } + + @BussinessLog(value = "风险点分组人员查询") + @ApiOperation(value = "风险点分组人员分页查询") + @GetMapping(value = "/groupUserPage") + public ResponseDataDTO> listPage(SysRiskGroupRelUserVO sysGroupRelUserVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysGroupRelUserVO.genQuery(); + List relUsers = sysGroupRelUserService.selectSysGroupRelUserPage(page, query); + page.setRecords(relUsers); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "用户分组批量新增") + @ApiOperation(value = "批量新增接口") + @PostMapping(value = "/batch-add") + public ResponseDataDTO batchAdd(@RequestBody GroupUserRelDTO relDTO) { + sysGroupRelUserService.batchAdd(relDTO); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组人员删除") + @ApiOperation(value = "用户组人员删除接口") + @GetMapping(value = "/user/delete") + public ResponseDataDTO userDel(@Param("用户组人员关联主键") String id) { + sysGroupRelUserService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "风险点分组分页查询") + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(SysRiskUserGroupVO sysUserGroupVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysUserGroupVO.genQuery(); + + List sysUserGroups = sysUserGroupService.selectSysUserGroupPage(page, query); + page.setRecords(sysUserGroups); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "风险点分组新增") + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.save(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组修改") + @ApiOperation(value = "修改接口") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.updateById(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组删除") + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + sysUserGroupService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "批量删除") + @ApiOperation(value = "批量删除", hidden = true) + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + sysUserGroupService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "详情查询") + @ApiOperation(value = "详情查询", hidden = true) + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(sysUserGroupService.getById(id)); + } + + @BussinessLog(value = "用户树") + @ApiOperation(value = "用户树查询") + @GetMapping(value = "/person/tree") + public ResponseDataDTO> personTree() { + return ResponseDataDTO.success(sysUserGroupService.personTree()); + } + + @BussinessLog(value = "风险点树查询") + @ApiOperation(value = "风险点树查询") + @GetMapping(value = "/tree") + public ResponseDataDTO> tree(String riskType) { + return ResponseDataDTO.success(riskPointInfoService.tree(riskType)); + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java new file mode 100644 index 0000000..419eb27 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备所属人员组 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupPointMapper extends BaseMapper { +/** +* 设备所属人员组 分页检索 +*/ +List selectSysGroupDevicePage(@Param("page") Page page, @Param("ew" ) QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java new file mode 100644 index 0000000..eb41227 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 组人员管理 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupRelUserMapper extends BaseMapper { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java new file mode 100644 index 0000000..e8352df --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.system.model.SysUserGroup; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 用户组信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysUserRiskGroupMapper extends BaseMapper { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml new file mode 100644 index 0000000..6fa6a4d --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + id , + group_id as groupId , + create_time as createTime , + target_Id as targetId + + + a.id , + a.group_id + as groupId , + a.create_time + as createTime , + a.target_Id + as targetId + + + + + + and group_id = #{request.groupId} + + + and device_id = #{request.deviceId} + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml new file mode 100644 index 0000000..a627546 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + id , + group_id as groupId , + user_id as userId , + create_time as createTime + + + a.id, + a.group_id + as groupId , + a.user_id + as userId , + a.create_time + as createTime + + + + + + and group_id = #{request.groupId} + + + and user_id = #{request.userId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml new file mode 100644 index 0000000..3245136 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + id, + group_name as groupName , + create_time as createTime , + dept_id as deptId , + create_id as createId + + + a.id,a.group_name as groupName , + a.create_time + as createTime , + a.dept_id + as deptId , + a.create_id + as createId,a.description + + + + + + and group_name like concat('%',#{request.groupName},'%') + + + and dept_id = #{request.deptId} + + + and create_id = #{request.createId} + + + + \ No newline at end of file diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java new file mode 100644 index 0000000..1ca5eb1 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java @@ -0,0 +1,63 @@ +package com.casic.missiles.modular.device.enums; + +/** + * wvp设备类型转换 + * + * @author lwh + * @Date 2017年1月10日 下午9:54:13 + */ +public enum AvDeptEnum { + + DEPT0("0066", "801",0L), + DEPT1("0059", "699厂",1L), + DEPT2("0055", "283厂",1L), + DEPT3("0022", "201所",1L), + DEPT4("0027", "206所",1L), + DEPT5("0013", "23所",1L); + + String code; + String message; + Long deptId; + AvDeptEnum(String code, String message, Long deptId) { + this.code = code; + this.message = message; + this.deptId = deptId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public static AvDeptEnum valueOfCode(String value) { + if (value == null) { + return null; + } else { + for (AvDeptEnum ms : AvDeptEnum.values()) { + if (ms.getCode().equals(value)) { + return ms; + } + } + return null; + } + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java new file mode 100644 index 0000000..573d0e2 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.task; + +import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; + +public class Test { + public static void main(String[] args) { + System.out.println(AvStatusTypeEnum.valueOfType(new Integer(1)).getMessage()); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java new file mode 100644 index 0000000..7c06c67 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java @@ -0,0 +1,77 @@ +package com.casic.missiles.modular.device.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpSession; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class RiskSyncController extends BaseController { + @Resource + private IClientAuthService clientAuthService; + @Resource + private AbstractDeptService deptService; + @Resource + private AbstractUserService userService; + @PostMapping("/client/login") + @ResponseBody + public ResponseData login(@RequestBody RiskLoginForm deviceLoginForm, HttpSession session) { + return clientAuthService.login(deviceLoginForm, session); + } + + /** + * 全量组织信息读取 + * + * @return + */ + @PostMapping("/dept/list") + @ResponseBody + public ResponseDataDTO> dept() { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = deptService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量用户信息读取 + * + * @return + */ + @PostMapping("/user/list") + @ResponseBody + public ResponseDataDTO> user() { + //todo 此处租户拦截需移除 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量设备信息读取 + * + * @return + */ + @PostMapping("/device/list") + @ResponseBody + public ResponseDataDTO> device() { + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java new file mode 100644 index 0000000..5e5b890 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class UserSyncController extends BaseController { + + @Resource + private IBusDeviceInfoService busDeviceInfoService; + + /** + * 登录用户授权设备权限查看 + * @return + */ + @GetMapping("/device/permissions") + @ResponseBody + public ResponseDataDTO> devicePermissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } + + /** + * 登录用户风险点授权查询 + * @return + */ + @GetMapping("/permissions") + @ResponseBody + public ResponseDataDTO> permissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java new file mode 100644 index 0000000..07b8df8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +/** + * 设备登录接口 + */ +@Data +public class RiskLoginForm { + /** + * 设备编码 + */ + private String clientId; + + /** + * 时间戳 + */ + private Long time; + + /** + * 加密后数据 加密格式sn+时间戳 时效性为6小时 + */ + private String secret; + + /** + * 设备登录注册IP + */ + private String ip; + + /** + * 设备登录注册port + */ + private String port; +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java new file mode 100644 index 0000000..40fdb4b --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.device.service; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; + +import javax.servlet.http.HttpSession; + +public interface IClientAuthService { + /** + * @param deviceLoginForm + * @param session + * @return + */ + ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session); +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java new file mode 100644 index 0000000..576e857 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.device.service.impl; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import cn.hutool.jwt.JWT; +import cn.hutool.jwt.JWTUtil; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.util.IRiskCacheUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpSession; +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Service +public class ClientAuthServiceImpl implements IClientAuthService { + @Value("${casic.client.privateKey:MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALKcwHHOg0F6Zkq7GOVnOnTgvH9vSPXFFTOcEqOVBIBPBz7UNrEGkp1PhZ+oC4WVJAsDuot2e1fDZy9QS9HF92MmnYp9kuQRhGZjHctPnVZ0Kai5BES0ytHqPeauLyNXxOOS0YKYEUwpft4Z5Azw7bj3JWNvLrnTZvNld6FDvTslAgMBAAECgYAqN/kZLYpC+O6i7XSmDO95XwHPUXu6dDpdt5+EQR4OQh/hTwIaeAZB3uEj6vHGQomBfQEkI/5lsU97lIxHanbd+Hro7JyIhsGD5LR5XnZHVKzFiZW62OIU6FI9dlQNN8miiblnmyDwiMA3okaHl0O7qQjZ+IvY2csgmJc7AXpPpQJBAOhrhcfWFcgffj2O6HYNlBLFfbboc/ZzrEADDXKnxRSHlo5o8W+6gylG/L2NGtbag5S68B9VYzdkSQ1++5C+Ws8CQQDEu7h311PLEiKgqzGHpjzadQETmt/jMadaKQmT0TZwNVi6X8lR17U5hF8dAqZzUzr9kUC0HRIZhg4Uv1v3W3fLAkB4YPhxgJjXhjhEefg87Nt8vX1Xdx5Yz6CvpuUYNX0GHRQFvqUOUXQNtQ7CvorgLV1pc0lbcUZqMi8EJnj1hyJRAkEAjHXWm8GiMt+M15fCsi3vTq2xChVOekBuUsHv85iwvGZqJg7ThtpyqlEnM2g7/STUfkvhnXcQACclEI0blTy6BwJAPmFyhU+d0ejVpbc53TdrL2HqYYUHi/tTy/dtUa7lbypzdwwJ2M1Tv5PE8sQxr9tgMbebfxVb/RFKdiCCtzC4ng==}") + private String privateKey; + + @Override + public ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session) { + //固定秘钥解析 + try { + String str = RSAUtils.decrypt(deviceLoginForm.getSecret(), privateKey); + Long time = Long.valueOf(StrUtil.split(str, "_").get(1)); + //边缘盒子时差与服务时差不可超过24小时 + if (time == null || System.currentTimeMillis() - time > 3600 * 24 * 1000) { + return ResponseData.error("请求时间超时"); + } + deviceLoginForm.setTime(time); + } catch (Exception e) { + e.printStackTrace(); + return ResponseData.error("设备解析异常!"); + } + + try { + String token = this.createJwtToken(deviceLoginForm); + IRiskCacheUtil.put(token, token); + return ResponseData.success(token); + } catch (Exception e) { + log.error("设备登录异常:{}", e.getMessage()); + return ResponseData.error("登录异常,请联系管理员"); + } +} + /** + * token创建 + * + * @param loginForm 登录信息 + * @param device 设备信息 + * @return + * @throws Exception + */ + public String createJwtToken(RiskLoginForm loginForm) throws Exception { + Map payload = new HashMap<>(); + payload.put("clientId", loginForm.getClientId()); // 设备编号 + payload.put("time", loginForm.getTime()); // 请求时间 + + //RSA 解密 + String str = RSAUtils.decrypt(loginForm.getSecret(), privateKey); + String key = loginForm.getClientId()+"_" + loginForm.getTime() ; + if (!key.equals(str)) { + //秘钥验证失败 + throw new ServiceException(500,"秘钥验证失败"); + } + +// long exp = new Date().getTime() + 2 * 3600000; // 2小时后的时间戳 +// payload.put("exp", exp); + + // 创建JWT + String jwt = JWTUtil.createToken(payload, "token-203-202405".getBytes()); + + return jwt; + } + + /** + * token解析 + * + * @param jwtStr token + * @return + * @throws Exception + */ + public static RiskLoginForm parseToken(String jwtStr){ + JWT jwtObj = new JWTUtil().parseToken(jwtStr); + RiskLoginForm deviceLoginForm = new RiskLoginForm(); + deviceLoginForm.setClientId(Convert.toStr(jwtObj.getPayload("clientId"))); + return deviceLoginForm; + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java new file mode 100644 index 0000000..0e91ac8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.util; +import cn.hutool.cache.Cache; +import cn.hutool.cache.CacheUtil; +/** + * token有效 + */ +public class IRiskCacheUtil { + /** + * 1小时内不活跃 会踢掉 + */ + private static Cache fifoCache = CacheUtil.newFIFOCache(1000, 1000 * 60 * 60); + + public static void put(String key, String value) { + fifoCache.put(key, value); + } + + public static String get(String key) { + return fifoCache.get(key); + } + + public static void remove(String key) { + fifoCache.remove(key); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java new file mode 100644 index 0000000..805c32a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceGroupDict extends AbstractDictMap { + + @Override + public void init() { + //检索条件 + put("groupName", "分组名称"); + put("startTime", "起始时间"); + put("endTime", "结束时间"); + //新增修改属性 + put("cameraIds", "设备国标号"); + put("personIds", "人员主键集合"); + put("description","备注"); + put("id","主键"); + put("ids","主键集合"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java new file mode 100644 index 0000000..895fbd9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceQueryDict extends AbstractDictMap { + + @Override + public void init() { + put("devType", "类型查询"); + put("keyword", "设备名称"); + put("deptName", "所属单位"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java new file mode 100644 index 0000000..88da6df --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.device.util; + +public class DeviceScopeUtil { +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java new file mode 100644 index 0000000..2e3e478 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.device.controller; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.auth.dto.DeviceLoginForm; +import com.casic.missiles.modular.auth.util.ICacheUtil; +import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; +import com.casic.missiles.modular.device.service.IAlarmRecordService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +@Api(tags = "告警记录") +@RestController +@RequestMapping("/record") +public class AlarmUploadController extends BaseController { + + private final IAlarmRecordService alarmRecordService; + private final IDeviceAuthService deviceAuthService; + public AlarmUploadController(IAlarmRecordService alarmRecordService, IDeviceAuthService deviceAuthService) { + this.alarmRecordService = alarmRecordService; + this.deviceAuthService = deviceAuthService; + } + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } + @BussinessLog(value = "告警记录上报接口") + @ApiOperation(value = "告警记录上报接口") + @PostMapping(value = "/upload") + public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return createAuthError(); + } + alarmRecordService.upload(alarmRecord); + return ResponseDataDTO.success(); + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java new file mode 100644 index 0000000..3f1c189 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class RecognitionStreamDTO { + private Long id; + private String recognitionStreamFlag; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java new file mode 100644 index 0000000..fa5ae4a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java @@ -0,0 +1,167 @@ +package com.casic.missiles.modular.group.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IRiskPointInfoService; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.group.vo.SysRiskGroupPointVO; +import com.casic.missiles.modular.group.vo.SysRiskGroupRelUserVO; +import com.casic.missiles.modular.group.vo.SysRiskUserGroupVO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import com.casic.missiles.modular.system.vo.SysGroupRelUserVO; +import com.casic.missiles.modular.system.vo.SysUserGroupVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.ibatis.annotations.Param; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; + +/** + * 风险点组信息Controller + * + * @author lwh + * @date 2024-07-11 + */ +@Api(tags = "风险点组信息") +@RestController +@RequestMapping("/sys/risk/group") +public class SysUserRiskGroupController extends BaseController { + private final IRiskPointInfoService riskPointInfoService; + private final ISysUserRiskGroupService sysUserGroupService; + private final AbstractPermissionContext permissionContext; + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysUserRiskGroupController(IRiskPointInfoService riskPointInfoService, ISysUserRiskGroupService sysUserGroupService, AbstractPermissionContext permissionContext, ISysRiskGroupRelUserService sysGroupRelUserService) { + this.riskPointInfoService = riskPointInfoService; + this.sysUserGroupService = sysUserGroupService; + this.permissionContext = permissionContext; + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @BussinessLog(value = "风险点分组查询") + @ApiOperation(value = "风险点分组查询", hidden = true) + @GetMapping(value = "/list") + public ResponseDataDTO> list(SysRiskUserGroupVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysUserGroupService.list(query)); + } + + @BussinessLog(value = "分组人员列表查询") + @ApiOperation(value = "分组人员列表查询") + @GetMapping(value = "/groupUserList") + public ResponseDataDTO> groupUserList(SysRiskGroupRelUserVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysGroupRelUserService.list(query)); + } + + @BussinessLog(value = "风险点分组人员查询") + @ApiOperation(value = "风险点分组人员分页查询") + @GetMapping(value = "/groupUserPage") + public ResponseDataDTO> listPage(SysRiskGroupRelUserVO sysGroupRelUserVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysGroupRelUserVO.genQuery(); + List relUsers = sysGroupRelUserService.selectSysGroupRelUserPage(page, query); + page.setRecords(relUsers); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "用户分组批量新增") + @ApiOperation(value = "批量新增接口") + @PostMapping(value = "/batch-add") + public ResponseDataDTO batchAdd(@RequestBody GroupUserRelDTO relDTO) { + sysGroupRelUserService.batchAdd(relDTO); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组人员删除") + @ApiOperation(value = "用户组人员删除接口") + @GetMapping(value = "/user/delete") + public ResponseDataDTO userDel(@Param("用户组人员关联主键") String id) { + sysGroupRelUserService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "风险点分组分页查询") + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(SysRiskUserGroupVO sysUserGroupVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysUserGroupVO.genQuery(); + + List sysUserGroups = sysUserGroupService.selectSysUserGroupPage(page, query); + page.setRecords(sysUserGroups); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "风险点分组新增") + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.save(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组修改") + @ApiOperation(value = "修改接口") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.updateById(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组删除") + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + sysUserGroupService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "批量删除") + @ApiOperation(value = "批量删除", hidden = true) + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + sysUserGroupService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "详情查询") + @ApiOperation(value = "详情查询", hidden = true) + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(sysUserGroupService.getById(id)); + } + + @BussinessLog(value = "用户树") + @ApiOperation(value = "用户树查询") + @GetMapping(value = "/person/tree") + public ResponseDataDTO> personTree() { + return ResponseDataDTO.success(sysUserGroupService.personTree()); + } + + @BussinessLog(value = "风险点树查询") + @ApiOperation(value = "风险点树查询") + @GetMapping(value = "/tree") + public ResponseDataDTO> tree(String riskType) { + return ResponseDataDTO.success(riskPointInfoService.tree(riskType)); + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java new file mode 100644 index 0000000..419eb27 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备所属人员组 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupPointMapper extends BaseMapper { +/** +* 设备所属人员组 分页检索 +*/ +List selectSysGroupDevicePage(@Param("page") Page page, @Param("ew" ) QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java new file mode 100644 index 0000000..eb41227 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 组人员管理 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupRelUserMapper extends BaseMapper { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java new file mode 100644 index 0000000..e8352df --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.system.model.SysUserGroup; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 用户组信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysUserRiskGroupMapper extends BaseMapper { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml new file mode 100644 index 0000000..6fa6a4d --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + id , + group_id as groupId , + create_time as createTime , + target_Id as targetId + + + a.id , + a.group_id + as groupId , + a.create_time + as createTime , + a.target_Id + as targetId + + + + + + and group_id = #{request.groupId} + + + and device_id = #{request.deviceId} + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml new file mode 100644 index 0000000..a627546 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + id , + group_id as groupId , + user_id as userId , + create_time as createTime + + + a.id, + a.group_id + as groupId , + a.user_id + as userId , + a.create_time + as createTime + + + + + + and group_id = #{request.groupId} + + + and user_id = #{request.userId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml new file mode 100644 index 0000000..3245136 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + id, + group_name as groupName , + create_time as createTime , + dept_id as deptId , + create_id as createId + + + a.id,a.group_name as groupName , + a.create_time + as createTime , + a.dept_id + as deptId , + a.create_id + as createId,a.description + + + + + + and group_name like concat('%',#{request.groupName},'%') + + + and dept_id = #{request.deptId} + + + and create_id = #{request.createId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java new file mode 100644 index 0000000..e44328f --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class GroupRiskRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("风险点集合") + private List targetIds; + @ApiModelProperty("用户ID集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java new file mode 100644 index 0000000..1ca5eb1 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java @@ -0,0 +1,63 @@ +package com.casic.missiles.modular.device.enums; + +/** + * wvp设备类型转换 + * + * @author lwh + * @Date 2017年1月10日 下午9:54:13 + */ +public enum AvDeptEnum { + + DEPT0("0066", "801",0L), + DEPT1("0059", "699厂",1L), + DEPT2("0055", "283厂",1L), + DEPT3("0022", "201所",1L), + DEPT4("0027", "206所",1L), + DEPT5("0013", "23所",1L); + + String code; + String message; + Long deptId; + AvDeptEnum(String code, String message, Long deptId) { + this.code = code; + this.message = message; + this.deptId = deptId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public static AvDeptEnum valueOfCode(String value) { + if (value == null) { + return null; + } else { + for (AvDeptEnum ms : AvDeptEnum.values()) { + if (ms.getCode().equals(value)) { + return ms; + } + } + return null; + } + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java new file mode 100644 index 0000000..573d0e2 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.task; + +import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; + +public class Test { + public static void main(String[] args) { + System.out.println(AvStatusTypeEnum.valueOfType(new Integer(1)).getMessage()); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java new file mode 100644 index 0000000..7c06c67 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java @@ -0,0 +1,77 @@ +package com.casic.missiles.modular.device.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpSession; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class RiskSyncController extends BaseController { + @Resource + private IClientAuthService clientAuthService; + @Resource + private AbstractDeptService deptService; + @Resource + private AbstractUserService userService; + @PostMapping("/client/login") + @ResponseBody + public ResponseData login(@RequestBody RiskLoginForm deviceLoginForm, HttpSession session) { + return clientAuthService.login(deviceLoginForm, session); + } + + /** + * 全量组织信息读取 + * + * @return + */ + @PostMapping("/dept/list") + @ResponseBody + public ResponseDataDTO> dept() { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = deptService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量用户信息读取 + * + * @return + */ + @PostMapping("/user/list") + @ResponseBody + public ResponseDataDTO> user() { + //todo 此处租户拦截需移除 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量设备信息读取 + * + * @return + */ + @PostMapping("/device/list") + @ResponseBody + public ResponseDataDTO> device() { + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java new file mode 100644 index 0000000..5e5b890 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class UserSyncController extends BaseController { + + @Resource + private IBusDeviceInfoService busDeviceInfoService; + + /** + * 登录用户授权设备权限查看 + * @return + */ + @GetMapping("/device/permissions") + @ResponseBody + public ResponseDataDTO> devicePermissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } + + /** + * 登录用户风险点授权查询 + * @return + */ + @GetMapping("/permissions") + @ResponseBody + public ResponseDataDTO> permissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java new file mode 100644 index 0000000..07b8df8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +/** + * 设备登录接口 + */ +@Data +public class RiskLoginForm { + /** + * 设备编码 + */ + private String clientId; + + /** + * 时间戳 + */ + private Long time; + + /** + * 加密后数据 加密格式sn+时间戳 时效性为6小时 + */ + private String secret; + + /** + * 设备登录注册IP + */ + private String ip; + + /** + * 设备登录注册port + */ + private String port; +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java new file mode 100644 index 0000000..40fdb4b --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.device.service; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; + +import javax.servlet.http.HttpSession; + +public interface IClientAuthService { + /** + * @param deviceLoginForm + * @param session + * @return + */ + ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session); +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java new file mode 100644 index 0000000..576e857 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.device.service.impl; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import cn.hutool.jwt.JWT; +import cn.hutool.jwt.JWTUtil; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.util.IRiskCacheUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpSession; +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Service +public class ClientAuthServiceImpl implements IClientAuthService { + @Value("${casic.client.privateKey:MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALKcwHHOg0F6Zkq7GOVnOnTgvH9vSPXFFTOcEqOVBIBPBz7UNrEGkp1PhZ+oC4WVJAsDuot2e1fDZy9QS9HF92MmnYp9kuQRhGZjHctPnVZ0Kai5BES0ytHqPeauLyNXxOOS0YKYEUwpft4Z5Azw7bj3JWNvLrnTZvNld6FDvTslAgMBAAECgYAqN/kZLYpC+O6i7XSmDO95XwHPUXu6dDpdt5+EQR4OQh/hTwIaeAZB3uEj6vHGQomBfQEkI/5lsU97lIxHanbd+Hro7JyIhsGD5LR5XnZHVKzFiZW62OIU6FI9dlQNN8miiblnmyDwiMA3okaHl0O7qQjZ+IvY2csgmJc7AXpPpQJBAOhrhcfWFcgffj2O6HYNlBLFfbboc/ZzrEADDXKnxRSHlo5o8W+6gylG/L2NGtbag5S68B9VYzdkSQ1++5C+Ws8CQQDEu7h311PLEiKgqzGHpjzadQETmt/jMadaKQmT0TZwNVi6X8lR17U5hF8dAqZzUzr9kUC0HRIZhg4Uv1v3W3fLAkB4YPhxgJjXhjhEefg87Nt8vX1Xdx5Yz6CvpuUYNX0GHRQFvqUOUXQNtQ7CvorgLV1pc0lbcUZqMi8EJnj1hyJRAkEAjHXWm8GiMt+M15fCsi3vTq2xChVOekBuUsHv85iwvGZqJg7ThtpyqlEnM2g7/STUfkvhnXcQACclEI0blTy6BwJAPmFyhU+d0ejVpbc53TdrL2HqYYUHi/tTy/dtUa7lbypzdwwJ2M1Tv5PE8sQxr9tgMbebfxVb/RFKdiCCtzC4ng==}") + private String privateKey; + + @Override + public ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session) { + //固定秘钥解析 + try { + String str = RSAUtils.decrypt(deviceLoginForm.getSecret(), privateKey); + Long time = Long.valueOf(StrUtil.split(str, "_").get(1)); + //边缘盒子时差与服务时差不可超过24小时 + if (time == null || System.currentTimeMillis() - time > 3600 * 24 * 1000) { + return ResponseData.error("请求时间超时"); + } + deviceLoginForm.setTime(time); + } catch (Exception e) { + e.printStackTrace(); + return ResponseData.error("设备解析异常!"); + } + + try { + String token = this.createJwtToken(deviceLoginForm); + IRiskCacheUtil.put(token, token); + return ResponseData.success(token); + } catch (Exception e) { + log.error("设备登录异常:{}", e.getMessage()); + return ResponseData.error("登录异常,请联系管理员"); + } +} + /** + * token创建 + * + * @param loginForm 登录信息 + * @param device 设备信息 + * @return + * @throws Exception + */ + public String createJwtToken(RiskLoginForm loginForm) throws Exception { + Map payload = new HashMap<>(); + payload.put("clientId", loginForm.getClientId()); // 设备编号 + payload.put("time", loginForm.getTime()); // 请求时间 + + //RSA 解密 + String str = RSAUtils.decrypt(loginForm.getSecret(), privateKey); + String key = loginForm.getClientId()+"_" + loginForm.getTime() ; + if (!key.equals(str)) { + //秘钥验证失败 + throw new ServiceException(500,"秘钥验证失败"); + } + +// long exp = new Date().getTime() + 2 * 3600000; // 2小时后的时间戳 +// payload.put("exp", exp); + + // 创建JWT + String jwt = JWTUtil.createToken(payload, "token-203-202405".getBytes()); + + return jwt; + } + + /** + * token解析 + * + * @param jwtStr token + * @return + * @throws Exception + */ + public static RiskLoginForm parseToken(String jwtStr){ + JWT jwtObj = new JWTUtil().parseToken(jwtStr); + RiskLoginForm deviceLoginForm = new RiskLoginForm(); + deviceLoginForm.setClientId(Convert.toStr(jwtObj.getPayload("clientId"))); + return deviceLoginForm; + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java new file mode 100644 index 0000000..0e91ac8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.util; +import cn.hutool.cache.Cache; +import cn.hutool.cache.CacheUtil; +/** + * token有效 + */ +public class IRiskCacheUtil { + /** + * 1小时内不活跃 会踢掉 + */ + private static Cache fifoCache = CacheUtil.newFIFOCache(1000, 1000 * 60 * 60); + + public static void put(String key, String value) { + fifoCache.put(key, value); + } + + public static String get(String key) { + return fifoCache.get(key); + } + + public static void remove(String key) { + fifoCache.remove(key); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java new file mode 100644 index 0000000..805c32a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceGroupDict extends AbstractDictMap { + + @Override + public void init() { + //检索条件 + put("groupName", "分组名称"); + put("startTime", "起始时间"); + put("endTime", "结束时间"); + //新增修改属性 + put("cameraIds", "设备国标号"); + put("personIds", "人员主键集合"); + put("description","备注"); + put("id","主键"); + put("ids","主键集合"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java new file mode 100644 index 0000000..895fbd9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceQueryDict extends AbstractDictMap { + + @Override + public void init() { + put("devType", "类型查询"); + put("keyword", "设备名称"); + put("deptName", "所属单位"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java new file mode 100644 index 0000000..88da6df --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.device.util; + +public class DeviceScopeUtil { +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java new file mode 100644 index 0000000..2e3e478 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.device.controller; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.auth.dto.DeviceLoginForm; +import com.casic.missiles.modular.auth.util.ICacheUtil; +import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; +import com.casic.missiles.modular.device.service.IAlarmRecordService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +@Api(tags = "告警记录") +@RestController +@RequestMapping("/record") +public class AlarmUploadController extends BaseController { + + private final IAlarmRecordService alarmRecordService; + private final IDeviceAuthService deviceAuthService; + public AlarmUploadController(IAlarmRecordService alarmRecordService, IDeviceAuthService deviceAuthService) { + this.alarmRecordService = alarmRecordService; + this.deviceAuthService = deviceAuthService; + } + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } + @BussinessLog(value = "告警记录上报接口") + @ApiOperation(value = "告警记录上报接口") + @PostMapping(value = "/upload") + public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return createAuthError(); + } + alarmRecordService.upload(alarmRecord); + return ResponseDataDTO.success(); + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java new file mode 100644 index 0000000..3f1c189 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class RecognitionStreamDTO { + private Long id; + private String recognitionStreamFlag; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java new file mode 100644 index 0000000..fa5ae4a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java @@ -0,0 +1,167 @@ +package com.casic.missiles.modular.group.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IRiskPointInfoService; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.group.vo.SysRiskGroupPointVO; +import com.casic.missiles.modular.group.vo.SysRiskGroupRelUserVO; +import com.casic.missiles.modular.group.vo.SysRiskUserGroupVO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import com.casic.missiles.modular.system.vo.SysGroupRelUserVO; +import com.casic.missiles.modular.system.vo.SysUserGroupVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.ibatis.annotations.Param; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; + +/** + * 风险点组信息Controller + * + * @author lwh + * @date 2024-07-11 + */ +@Api(tags = "风险点组信息") +@RestController +@RequestMapping("/sys/risk/group") +public class SysUserRiskGroupController extends BaseController { + private final IRiskPointInfoService riskPointInfoService; + private final ISysUserRiskGroupService sysUserGroupService; + private final AbstractPermissionContext permissionContext; + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysUserRiskGroupController(IRiskPointInfoService riskPointInfoService, ISysUserRiskGroupService sysUserGroupService, AbstractPermissionContext permissionContext, ISysRiskGroupRelUserService sysGroupRelUserService) { + this.riskPointInfoService = riskPointInfoService; + this.sysUserGroupService = sysUserGroupService; + this.permissionContext = permissionContext; + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @BussinessLog(value = "风险点分组查询") + @ApiOperation(value = "风险点分组查询", hidden = true) + @GetMapping(value = "/list") + public ResponseDataDTO> list(SysRiskUserGroupVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysUserGroupService.list(query)); + } + + @BussinessLog(value = "分组人员列表查询") + @ApiOperation(value = "分组人员列表查询") + @GetMapping(value = "/groupUserList") + public ResponseDataDTO> groupUserList(SysRiskGroupRelUserVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysGroupRelUserService.list(query)); + } + + @BussinessLog(value = "风险点分组人员查询") + @ApiOperation(value = "风险点分组人员分页查询") + @GetMapping(value = "/groupUserPage") + public ResponseDataDTO> listPage(SysRiskGroupRelUserVO sysGroupRelUserVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysGroupRelUserVO.genQuery(); + List relUsers = sysGroupRelUserService.selectSysGroupRelUserPage(page, query); + page.setRecords(relUsers); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "用户分组批量新增") + @ApiOperation(value = "批量新增接口") + @PostMapping(value = "/batch-add") + public ResponseDataDTO batchAdd(@RequestBody GroupUserRelDTO relDTO) { + sysGroupRelUserService.batchAdd(relDTO); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组人员删除") + @ApiOperation(value = "用户组人员删除接口") + @GetMapping(value = "/user/delete") + public ResponseDataDTO userDel(@Param("用户组人员关联主键") String id) { + sysGroupRelUserService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "风险点分组分页查询") + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(SysRiskUserGroupVO sysUserGroupVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysUserGroupVO.genQuery(); + + List sysUserGroups = sysUserGroupService.selectSysUserGroupPage(page, query); + page.setRecords(sysUserGroups); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "风险点分组新增") + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.save(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组修改") + @ApiOperation(value = "修改接口") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.updateById(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组删除") + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + sysUserGroupService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "批量删除") + @ApiOperation(value = "批量删除", hidden = true) + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + sysUserGroupService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "详情查询") + @ApiOperation(value = "详情查询", hidden = true) + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(sysUserGroupService.getById(id)); + } + + @BussinessLog(value = "用户树") + @ApiOperation(value = "用户树查询") + @GetMapping(value = "/person/tree") + public ResponseDataDTO> personTree() { + return ResponseDataDTO.success(sysUserGroupService.personTree()); + } + + @BussinessLog(value = "风险点树查询") + @ApiOperation(value = "风险点树查询") + @GetMapping(value = "/tree") + public ResponseDataDTO> tree(String riskType) { + return ResponseDataDTO.success(riskPointInfoService.tree(riskType)); + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java new file mode 100644 index 0000000..419eb27 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备所属人员组 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupPointMapper extends BaseMapper { +/** +* 设备所属人员组 分页检索 +*/ +List selectSysGroupDevicePage(@Param("page") Page page, @Param("ew" ) QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java new file mode 100644 index 0000000..eb41227 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 组人员管理 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupRelUserMapper extends BaseMapper { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java new file mode 100644 index 0000000..e8352df --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.system.model.SysUserGroup; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 用户组信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysUserRiskGroupMapper extends BaseMapper { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml new file mode 100644 index 0000000..6fa6a4d --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + id , + group_id as groupId , + create_time as createTime , + target_Id as targetId + + + a.id , + a.group_id + as groupId , + a.create_time + as createTime , + a.target_Id + as targetId + + + + + + and group_id = #{request.groupId} + + + and device_id = #{request.deviceId} + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml new file mode 100644 index 0000000..a627546 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + id , + group_id as groupId , + user_id as userId , + create_time as createTime + + + a.id, + a.group_id + as groupId , + a.user_id + as userId , + a.create_time + as createTime + + + + + + and group_id = #{request.groupId} + + + and user_id = #{request.userId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml new file mode 100644 index 0000000..3245136 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + id, + group_name as groupName , + create_time as createTime , + dept_id as deptId , + create_id as createId + + + a.id,a.group_name as groupName , + a.create_time + as createTime , + a.dept_id + as deptId , + a.create_id + as createId,a.description + + + + + + and group_name like concat('%',#{request.groupName},'%') + + + and dept_id = #{request.deptId} + + + and create_id = #{request.createId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java new file mode 100644 index 0000000..e44328f --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class GroupRiskRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("风险点集合") + private List targetIds; + @ApiModelProperty("用户ID集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java new file mode 100644 index 0000000..f8758bf --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class RiskGroupUserRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("设备集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java new file mode 100644 index 0000000..1ca5eb1 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java @@ -0,0 +1,63 @@ +package com.casic.missiles.modular.device.enums; + +/** + * wvp设备类型转换 + * + * @author lwh + * @Date 2017年1月10日 下午9:54:13 + */ +public enum AvDeptEnum { + + DEPT0("0066", "801",0L), + DEPT1("0059", "699厂",1L), + DEPT2("0055", "283厂",1L), + DEPT3("0022", "201所",1L), + DEPT4("0027", "206所",1L), + DEPT5("0013", "23所",1L); + + String code; + String message; + Long deptId; + AvDeptEnum(String code, String message, Long deptId) { + this.code = code; + this.message = message; + this.deptId = deptId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public static AvDeptEnum valueOfCode(String value) { + if (value == null) { + return null; + } else { + for (AvDeptEnum ms : AvDeptEnum.values()) { + if (ms.getCode().equals(value)) { + return ms; + } + } + return null; + } + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java new file mode 100644 index 0000000..573d0e2 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.task; + +import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; + +public class Test { + public static void main(String[] args) { + System.out.println(AvStatusTypeEnum.valueOfType(new Integer(1)).getMessage()); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java new file mode 100644 index 0000000..7c06c67 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java @@ -0,0 +1,77 @@ +package com.casic.missiles.modular.device.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpSession; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class RiskSyncController extends BaseController { + @Resource + private IClientAuthService clientAuthService; + @Resource + private AbstractDeptService deptService; + @Resource + private AbstractUserService userService; + @PostMapping("/client/login") + @ResponseBody + public ResponseData login(@RequestBody RiskLoginForm deviceLoginForm, HttpSession session) { + return clientAuthService.login(deviceLoginForm, session); + } + + /** + * 全量组织信息读取 + * + * @return + */ + @PostMapping("/dept/list") + @ResponseBody + public ResponseDataDTO> dept() { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = deptService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量用户信息读取 + * + * @return + */ + @PostMapping("/user/list") + @ResponseBody + public ResponseDataDTO> user() { + //todo 此处租户拦截需移除 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量设备信息读取 + * + * @return + */ + @PostMapping("/device/list") + @ResponseBody + public ResponseDataDTO> device() { + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java new file mode 100644 index 0000000..5e5b890 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class UserSyncController extends BaseController { + + @Resource + private IBusDeviceInfoService busDeviceInfoService; + + /** + * 登录用户授权设备权限查看 + * @return + */ + @GetMapping("/device/permissions") + @ResponseBody + public ResponseDataDTO> devicePermissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } + + /** + * 登录用户风险点授权查询 + * @return + */ + @GetMapping("/permissions") + @ResponseBody + public ResponseDataDTO> permissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java new file mode 100644 index 0000000..07b8df8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +/** + * 设备登录接口 + */ +@Data +public class RiskLoginForm { + /** + * 设备编码 + */ + private String clientId; + + /** + * 时间戳 + */ + private Long time; + + /** + * 加密后数据 加密格式sn+时间戳 时效性为6小时 + */ + private String secret; + + /** + * 设备登录注册IP + */ + private String ip; + + /** + * 设备登录注册port + */ + private String port; +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java new file mode 100644 index 0000000..40fdb4b --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.device.service; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; + +import javax.servlet.http.HttpSession; + +public interface IClientAuthService { + /** + * @param deviceLoginForm + * @param session + * @return + */ + ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session); +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java new file mode 100644 index 0000000..576e857 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.device.service.impl; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import cn.hutool.jwt.JWT; +import cn.hutool.jwt.JWTUtil; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.util.IRiskCacheUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpSession; +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Service +public class ClientAuthServiceImpl implements IClientAuthService { + @Value("${casic.client.privateKey:MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALKcwHHOg0F6Zkq7GOVnOnTgvH9vSPXFFTOcEqOVBIBPBz7UNrEGkp1PhZ+oC4WVJAsDuot2e1fDZy9QS9HF92MmnYp9kuQRhGZjHctPnVZ0Kai5BES0ytHqPeauLyNXxOOS0YKYEUwpft4Z5Azw7bj3JWNvLrnTZvNld6FDvTslAgMBAAECgYAqN/kZLYpC+O6i7XSmDO95XwHPUXu6dDpdt5+EQR4OQh/hTwIaeAZB3uEj6vHGQomBfQEkI/5lsU97lIxHanbd+Hro7JyIhsGD5LR5XnZHVKzFiZW62OIU6FI9dlQNN8miiblnmyDwiMA3okaHl0O7qQjZ+IvY2csgmJc7AXpPpQJBAOhrhcfWFcgffj2O6HYNlBLFfbboc/ZzrEADDXKnxRSHlo5o8W+6gylG/L2NGtbag5S68B9VYzdkSQ1++5C+Ws8CQQDEu7h311PLEiKgqzGHpjzadQETmt/jMadaKQmT0TZwNVi6X8lR17U5hF8dAqZzUzr9kUC0HRIZhg4Uv1v3W3fLAkB4YPhxgJjXhjhEefg87Nt8vX1Xdx5Yz6CvpuUYNX0GHRQFvqUOUXQNtQ7CvorgLV1pc0lbcUZqMi8EJnj1hyJRAkEAjHXWm8GiMt+M15fCsi3vTq2xChVOekBuUsHv85iwvGZqJg7ThtpyqlEnM2g7/STUfkvhnXcQACclEI0blTy6BwJAPmFyhU+d0ejVpbc53TdrL2HqYYUHi/tTy/dtUa7lbypzdwwJ2M1Tv5PE8sQxr9tgMbebfxVb/RFKdiCCtzC4ng==}") + private String privateKey; + + @Override + public ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session) { + //固定秘钥解析 + try { + String str = RSAUtils.decrypt(deviceLoginForm.getSecret(), privateKey); + Long time = Long.valueOf(StrUtil.split(str, "_").get(1)); + //边缘盒子时差与服务时差不可超过24小时 + if (time == null || System.currentTimeMillis() - time > 3600 * 24 * 1000) { + return ResponseData.error("请求时间超时"); + } + deviceLoginForm.setTime(time); + } catch (Exception e) { + e.printStackTrace(); + return ResponseData.error("设备解析异常!"); + } + + try { + String token = this.createJwtToken(deviceLoginForm); + IRiskCacheUtil.put(token, token); + return ResponseData.success(token); + } catch (Exception e) { + log.error("设备登录异常:{}", e.getMessage()); + return ResponseData.error("登录异常,请联系管理员"); + } +} + /** + * token创建 + * + * @param loginForm 登录信息 + * @param device 设备信息 + * @return + * @throws Exception + */ + public String createJwtToken(RiskLoginForm loginForm) throws Exception { + Map payload = new HashMap<>(); + payload.put("clientId", loginForm.getClientId()); // 设备编号 + payload.put("time", loginForm.getTime()); // 请求时间 + + //RSA 解密 + String str = RSAUtils.decrypt(loginForm.getSecret(), privateKey); + String key = loginForm.getClientId()+"_" + loginForm.getTime() ; + if (!key.equals(str)) { + //秘钥验证失败 + throw new ServiceException(500,"秘钥验证失败"); + } + +// long exp = new Date().getTime() + 2 * 3600000; // 2小时后的时间戳 +// payload.put("exp", exp); + + // 创建JWT + String jwt = JWTUtil.createToken(payload, "token-203-202405".getBytes()); + + return jwt; + } + + /** + * token解析 + * + * @param jwtStr token + * @return + * @throws Exception + */ + public static RiskLoginForm parseToken(String jwtStr){ + JWT jwtObj = new JWTUtil().parseToken(jwtStr); + RiskLoginForm deviceLoginForm = new RiskLoginForm(); + deviceLoginForm.setClientId(Convert.toStr(jwtObj.getPayload("clientId"))); + return deviceLoginForm; + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java new file mode 100644 index 0000000..0e91ac8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.util; +import cn.hutool.cache.Cache; +import cn.hutool.cache.CacheUtil; +/** + * token有效 + */ +public class IRiskCacheUtil { + /** + * 1小时内不活跃 会踢掉 + */ + private static Cache fifoCache = CacheUtil.newFIFOCache(1000, 1000 * 60 * 60); + + public static void put(String key, String value) { + fifoCache.put(key, value); + } + + public static String get(String key) { + return fifoCache.get(key); + } + + public static void remove(String key) { + fifoCache.remove(key); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java new file mode 100644 index 0000000..805c32a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceGroupDict extends AbstractDictMap { + + @Override + public void init() { + //检索条件 + put("groupName", "分组名称"); + put("startTime", "起始时间"); + put("endTime", "结束时间"); + //新增修改属性 + put("cameraIds", "设备国标号"); + put("personIds", "人员主键集合"); + put("description","备注"); + put("id","主键"); + put("ids","主键集合"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java new file mode 100644 index 0000000..895fbd9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceQueryDict extends AbstractDictMap { + + @Override + public void init() { + put("devType", "类型查询"); + put("keyword", "设备名称"); + put("deptName", "所属单位"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java new file mode 100644 index 0000000..88da6df --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.device.util; + +public class DeviceScopeUtil { +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java new file mode 100644 index 0000000..2e3e478 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.device.controller; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.auth.dto.DeviceLoginForm; +import com.casic.missiles.modular.auth.util.ICacheUtil; +import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; +import com.casic.missiles.modular.device.service.IAlarmRecordService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +@Api(tags = "告警记录") +@RestController +@RequestMapping("/record") +public class AlarmUploadController extends BaseController { + + private final IAlarmRecordService alarmRecordService; + private final IDeviceAuthService deviceAuthService; + public AlarmUploadController(IAlarmRecordService alarmRecordService, IDeviceAuthService deviceAuthService) { + this.alarmRecordService = alarmRecordService; + this.deviceAuthService = deviceAuthService; + } + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } + @BussinessLog(value = "告警记录上报接口") + @ApiOperation(value = "告警记录上报接口") + @PostMapping(value = "/upload") + public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return createAuthError(); + } + alarmRecordService.upload(alarmRecord); + return ResponseDataDTO.success(); + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java new file mode 100644 index 0000000..3f1c189 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class RecognitionStreamDTO { + private Long id; + private String recognitionStreamFlag; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java new file mode 100644 index 0000000..fa5ae4a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java @@ -0,0 +1,167 @@ +package com.casic.missiles.modular.group.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IRiskPointInfoService; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.group.vo.SysRiskGroupPointVO; +import com.casic.missiles.modular.group.vo.SysRiskGroupRelUserVO; +import com.casic.missiles.modular.group.vo.SysRiskUserGroupVO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import com.casic.missiles.modular.system.vo.SysGroupRelUserVO; +import com.casic.missiles.modular.system.vo.SysUserGroupVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.ibatis.annotations.Param; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; + +/** + * 风险点组信息Controller + * + * @author lwh + * @date 2024-07-11 + */ +@Api(tags = "风险点组信息") +@RestController +@RequestMapping("/sys/risk/group") +public class SysUserRiskGroupController extends BaseController { + private final IRiskPointInfoService riskPointInfoService; + private final ISysUserRiskGroupService sysUserGroupService; + private final AbstractPermissionContext permissionContext; + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysUserRiskGroupController(IRiskPointInfoService riskPointInfoService, ISysUserRiskGroupService sysUserGroupService, AbstractPermissionContext permissionContext, ISysRiskGroupRelUserService sysGroupRelUserService) { + this.riskPointInfoService = riskPointInfoService; + this.sysUserGroupService = sysUserGroupService; + this.permissionContext = permissionContext; + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @BussinessLog(value = "风险点分组查询") + @ApiOperation(value = "风险点分组查询", hidden = true) + @GetMapping(value = "/list") + public ResponseDataDTO> list(SysRiskUserGroupVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysUserGroupService.list(query)); + } + + @BussinessLog(value = "分组人员列表查询") + @ApiOperation(value = "分组人员列表查询") + @GetMapping(value = "/groupUserList") + public ResponseDataDTO> groupUserList(SysRiskGroupRelUserVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysGroupRelUserService.list(query)); + } + + @BussinessLog(value = "风险点分组人员查询") + @ApiOperation(value = "风险点分组人员分页查询") + @GetMapping(value = "/groupUserPage") + public ResponseDataDTO> listPage(SysRiskGroupRelUserVO sysGroupRelUserVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysGroupRelUserVO.genQuery(); + List relUsers = sysGroupRelUserService.selectSysGroupRelUserPage(page, query); + page.setRecords(relUsers); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "用户分组批量新增") + @ApiOperation(value = "批量新增接口") + @PostMapping(value = "/batch-add") + public ResponseDataDTO batchAdd(@RequestBody GroupUserRelDTO relDTO) { + sysGroupRelUserService.batchAdd(relDTO); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组人员删除") + @ApiOperation(value = "用户组人员删除接口") + @GetMapping(value = "/user/delete") + public ResponseDataDTO userDel(@Param("用户组人员关联主键") String id) { + sysGroupRelUserService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "风险点分组分页查询") + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(SysRiskUserGroupVO sysUserGroupVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysUserGroupVO.genQuery(); + + List sysUserGroups = sysUserGroupService.selectSysUserGroupPage(page, query); + page.setRecords(sysUserGroups); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "风险点分组新增") + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.save(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组修改") + @ApiOperation(value = "修改接口") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.updateById(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组删除") + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + sysUserGroupService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "批量删除") + @ApiOperation(value = "批量删除", hidden = true) + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + sysUserGroupService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "详情查询") + @ApiOperation(value = "详情查询", hidden = true) + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(sysUserGroupService.getById(id)); + } + + @BussinessLog(value = "用户树") + @ApiOperation(value = "用户树查询") + @GetMapping(value = "/person/tree") + public ResponseDataDTO> personTree() { + return ResponseDataDTO.success(sysUserGroupService.personTree()); + } + + @BussinessLog(value = "风险点树查询") + @ApiOperation(value = "风险点树查询") + @GetMapping(value = "/tree") + public ResponseDataDTO> tree(String riskType) { + return ResponseDataDTO.success(riskPointInfoService.tree(riskType)); + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java new file mode 100644 index 0000000..419eb27 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备所属人员组 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupPointMapper extends BaseMapper { +/** +* 设备所属人员组 分页检索 +*/ +List selectSysGroupDevicePage(@Param("page") Page page, @Param("ew" ) QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java new file mode 100644 index 0000000..eb41227 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 组人员管理 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupRelUserMapper extends BaseMapper { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java new file mode 100644 index 0000000..e8352df --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.system.model.SysUserGroup; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 用户组信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysUserRiskGroupMapper extends BaseMapper { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml new file mode 100644 index 0000000..6fa6a4d --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + id , + group_id as groupId , + create_time as createTime , + target_Id as targetId + + + a.id , + a.group_id + as groupId , + a.create_time + as createTime , + a.target_Id + as targetId + + + + + + and group_id = #{request.groupId} + + + and device_id = #{request.deviceId} + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml new file mode 100644 index 0000000..a627546 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + id , + group_id as groupId , + user_id as userId , + create_time as createTime + + + a.id, + a.group_id + as groupId , + a.user_id + as userId , + a.create_time + as createTime + + + + + + and group_id = #{request.groupId} + + + and user_id = #{request.userId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml new file mode 100644 index 0000000..3245136 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + id, + group_name as groupName , + create_time as createTime , + dept_id as deptId , + create_id as createId + + + a.id,a.group_name as groupName , + a.create_time + as createTime , + a.dept_id + as deptId , + a.create_id + as createId,a.description + + + + + + and group_name like concat('%',#{request.groupName},'%') + + + and dept_id = #{request.deptId} + + + and create_id = #{request.createId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java new file mode 100644 index 0000000..e44328f --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class GroupRiskRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("风险点集合") + private List targetIds; + @ApiModelProperty("用户ID集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java new file mode 100644 index 0000000..f8758bf --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class RiskGroupUserRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("设备集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java new file mode 100644 index 0000000..b386d5b --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java @@ -0,0 +1,53 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 风险点所属组 sys_risk_group_point + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_risk_group_point") +public class SysRiskGroupPoint extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableId("id") + private Long id; + + @ApiModelProperty(value = "用户组ID", dataType = "Long") + @TableField("group_id") + private Long groupId; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty(value = "风险点ID", dataType = "Long") + @TableField("target_id") + private Long targetId; + + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; + + @Override + public String toString() { + return "SysGroupDevice{" + + "id=" + id + + "groupId=" + groupId + + "createTime=" + createTime + + "targetId=" + targetId + + "}"; + } +} \ No newline at end of file diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java new file mode 100644 index 0000000..1ca5eb1 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java @@ -0,0 +1,63 @@ +package com.casic.missiles.modular.device.enums; + +/** + * wvp设备类型转换 + * + * @author lwh + * @Date 2017年1月10日 下午9:54:13 + */ +public enum AvDeptEnum { + + DEPT0("0066", "801",0L), + DEPT1("0059", "699厂",1L), + DEPT2("0055", "283厂",1L), + DEPT3("0022", "201所",1L), + DEPT4("0027", "206所",1L), + DEPT5("0013", "23所",1L); + + String code; + String message; + Long deptId; + AvDeptEnum(String code, String message, Long deptId) { + this.code = code; + this.message = message; + this.deptId = deptId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public static AvDeptEnum valueOfCode(String value) { + if (value == null) { + return null; + } else { + for (AvDeptEnum ms : AvDeptEnum.values()) { + if (ms.getCode().equals(value)) { + return ms; + } + } + return null; + } + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java new file mode 100644 index 0000000..573d0e2 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.task; + +import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; + +public class Test { + public static void main(String[] args) { + System.out.println(AvStatusTypeEnum.valueOfType(new Integer(1)).getMessage()); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java new file mode 100644 index 0000000..7c06c67 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java @@ -0,0 +1,77 @@ +package com.casic.missiles.modular.device.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpSession; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class RiskSyncController extends BaseController { + @Resource + private IClientAuthService clientAuthService; + @Resource + private AbstractDeptService deptService; + @Resource + private AbstractUserService userService; + @PostMapping("/client/login") + @ResponseBody + public ResponseData login(@RequestBody RiskLoginForm deviceLoginForm, HttpSession session) { + return clientAuthService.login(deviceLoginForm, session); + } + + /** + * 全量组织信息读取 + * + * @return + */ + @PostMapping("/dept/list") + @ResponseBody + public ResponseDataDTO> dept() { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = deptService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量用户信息读取 + * + * @return + */ + @PostMapping("/user/list") + @ResponseBody + public ResponseDataDTO> user() { + //todo 此处租户拦截需移除 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量设备信息读取 + * + * @return + */ + @PostMapping("/device/list") + @ResponseBody + public ResponseDataDTO> device() { + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java new file mode 100644 index 0000000..5e5b890 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class UserSyncController extends BaseController { + + @Resource + private IBusDeviceInfoService busDeviceInfoService; + + /** + * 登录用户授权设备权限查看 + * @return + */ + @GetMapping("/device/permissions") + @ResponseBody + public ResponseDataDTO> devicePermissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } + + /** + * 登录用户风险点授权查询 + * @return + */ + @GetMapping("/permissions") + @ResponseBody + public ResponseDataDTO> permissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java new file mode 100644 index 0000000..07b8df8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +/** + * 设备登录接口 + */ +@Data +public class RiskLoginForm { + /** + * 设备编码 + */ + private String clientId; + + /** + * 时间戳 + */ + private Long time; + + /** + * 加密后数据 加密格式sn+时间戳 时效性为6小时 + */ + private String secret; + + /** + * 设备登录注册IP + */ + private String ip; + + /** + * 设备登录注册port + */ + private String port; +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java new file mode 100644 index 0000000..40fdb4b --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.device.service; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; + +import javax.servlet.http.HttpSession; + +public interface IClientAuthService { + /** + * @param deviceLoginForm + * @param session + * @return + */ + ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session); +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java new file mode 100644 index 0000000..576e857 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.device.service.impl; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import cn.hutool.jwt.JWT; +import cn.hutool.jwt.JWTUtil; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.util.IRiskCacheUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpSession; +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Service +public class ClientAuthServiceImpl implements IClientAuthService { + @Value("${casic.client.privateKey:MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALKcwHHOg0F6Zkq7GOVnOnTgvH9vSPXFFTOcEqOVBIBPBz7UNrEGkp1PhZ+oC4WVJAsDuot2e1fDZy9QS9HF92MmnYp9kuQRhGZjHctPnVZ0Kai5BES0ytHqPeauLyNXxOOS0YKYEUwpft4Z5Azw7bj3JWNvLrnTZvNld6FDvTslAgMBAAECgYAqN/kZLYpC+O6i7XSmDO95XwHPUXu6dDpdt5+EQR4OQh/hTwIaeAZB3uEj6vHGQomBfQEkI/5lsU97lIxHanbd+Hro7JyIhsGD5LR5XnZHVKzFiZW62OIU6FI9dlQNN8miiblnmyDwiMA3okaHl0O7qQjZ+IvY2csgmJc7AXpPpQJBAOhrhcfWFcgffj2O6HYNlBLFfbboc/ZzrEADDXKnxRSHlo5o8W+6gylG/L2NGtbag5S68B9VYzdkSQ1++5C+Ws8CQQDEu7h311PLEiKgqzGHpjzadQETmt/jMadaKQmT0TZwNVi6X8lR17U5hF8dAqZzUzr9kUC0HRIZhg4Uv1v3W3fLAkB4YPhxgJjXhjhEefg87Nt8vX1Xdx5Yz6CvpuUYNX0GHRQFvqUOUXQNtQ7CvorgLV1pc0lbcUZqMi8EJnj1hyJRAkEAjHXWm8GiMt+M15fCsi3vTq2xChVOekBuUsHv85iwvGZqJg7ThtpyqlEnM2g7/STUfkvhnXcQACclEI0blTy6BwJAPmFyhU+d0ejVpbc53TdrL2HqYYUHi/tTy/dtUa7lbypzdwwJ2M1Tv5PE8sQxr9tgMbebfxVb/RFKdiCCtzC4ng==}") + private String privateKey; + + @Override + public ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session) { + //固定秘钥解析 + try { + String str = RSAUtils.decrypt(deviceLoginForm.getSecret(), privateKey); + Long time = Long.valueOf(StrUtil.split(str, "_").get(1)); + //边缘盒子时差与服务时差不可超过24小时 + if (time == null || System.currentTimeMillis() - time > 3600 * 24 * 1000) { + return ResponseData.error("请求时间超时"); + } + deviceLoginForm.setTime(time); + } catch (Exception e) { + e.printStackTrace(); + return ResponseData.error("设备解析异常!"); + } + + try { + String token = this.createJwtToken(deviceLoginForm); + IRiskCacheUtil.put(token, token); + return ResponseData.success(token); + } catch (Exception e) { + log.error("设备登录异常:{}", e.getMessage()); + return ResponseData.error("登录异常,请联系管理员"); + } +} + /** + * token创建 + * + * @param loginForm 登录信息 + * @param device 设备信息 + * @return + * @throws Exception + */ + public String createJwtToken(RiskLoginForm loginForm) throws Exception { + Map payload = new HashMap<>(); + payload.put("clientId", loginForm.getClientId()); // 设备编号 + payload.put("time", loginForm.getTime()); // 请求时间 + + //RSA 解密 + String str = RSAUtils.decrypt(loginForm.getSecret(), privateKey); + String key = loginForm.getClientId()+"_" + loginForm.getTime() ; + if (!key.equals(str)) { + //秘钥验证失败 + throw new ServiceException(500,"秘钥验证失败"); + } + +// long exp = new Date().getTime() + 2 * 3600000; // 2小时后的时间戳 +// payload.put("exp", exp); + + // 创建JWT + String jwt = JWTUtil.createToken(payload, "token-203-202405".getBytes()); + + return jwt; + } + + /** + * token解析 + * + * @param jwtStr token + * @return + * @throws Exception + */ + public static RiskLoginForm parseToken(String jwtStr){ + JWT jwtObj = new JWTUtil().parseToken(jwtStr); + RiskLoginForm deviceLoginForm = new RiskLoginForm(); + deviceLoginForm.setClientId(Convert.toStr(jwtObj.getPayload("clientId"))); + return deviceLoginForm; + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java new file mode 100644 index 0000000..0e91ac8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.util; +import cn.hutool.cache.Cache; +import cn.hutool.cache.CacheUtil; +/** + * token有效 + */ +public class IRiskCacheUtil { + /** + * 1小时内不活跃 会踢掉 + */ + private static Cache fifoCache = CacheUtil.newFIFOCache(1000, 1000 * 60 * 60); + + public static void put(String key, String value) { + fifoCache.put(key, value); + } + + public static String get(String key) { + return fifoCache.get(key); + } + + public static void remove(String key) { + fifoCache.remove(key); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java new file mode 100644 index 0000000..805c32a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceGroupDict extends AbstractDictMap { + + @Override + public void init() { + //检索条件 + put("groupName", "分组名称"); + put("startTime", "起始时间"); + put("endTime", "结束时间"); + //新增修改属性 + put("cameraIds", "设备国标号"); + put("personIds", "人员主键集合"); + put("description","备注"); + put("id","主键"); + put("ids","主键集合"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java new file mode 100644 index 0000000..895fbd9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceQueryDict extends AbstractDictMap { + + @Override + public void init() { + put("devType", "类型查询"); + put("keyword", "设备名称"); + put("deptName", "所属单位"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java new file mode 100644 index 0000000..88da6df --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.device.util; + +public class DeviceScopeUtil { +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java new file mode 100644 index 0000000..2e3e478 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.device.controller; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.auth.dto.DeviceLoginForm; +import com.casic.missiles.modular.auth.util.ICacheUtil; +import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; +import com.casic.missiles.modular.device.service.IAlarmRecordService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +@Api(tags = "告警记录") +@RestController +@RequestMapping("/record") +public class AlarmUploadController extends BaseController { + + private final IAlarmRecordService alarmRecordService; + private final IDeviceAuthService deviceAuthService; + public AlarmUploadController(IAlarmRecordService alarmRecordService, IDeviceAuthService deviceAuthService) { + this.alarmRecordService = alarmRecordService; + this.deviceAuthService = deviceAuthService; + } + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } + @BussinessLog(value = "告警记录上报接口") + @ApiOperation(value = "告警记录上报接口") + @PostMapping(value = "/upload") + public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return createAuthError(); + } + alarmRecordService.upload(alarmRecord); + return ResponseDataDTO.success(); + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java new file mode 100644 index 0000000..3f1c189 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class RecognitionStreamDTO { + private Long id; + private String recognitionStreamFlag; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java new file mode 100644 index 0000000..fa5ae4a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java @@ -0,0 +1,167 @@ +package com.casic.missiles.modular.group.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IRiskPointInfoService; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.group.vo.SysRiskGroupPointVO; +import com.casic.missiles.modular.group.vo.SysRiskGroupRelUserVO; +import com.casic.missiles.modular.group.vo.SysRiskUserGroupVO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import com.casic.missiles.modular.system.vo.SysGroupRelUserVO; +import com.casic.missiles.modular.system.vo.SysUserGroupVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.ibatis.annotations.Param; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; + +/** + * 风险点组信息Controller + * + * @author lwh + * @date 2024-07-11 + */ +@Api(tags = "风险点组信息") +@RestController +@RequestMapping("/sys/risk/group") +public class SysUserRiskGroupController extends BaseController { + private final IRiskPointInfoService riskPointInfoService; + private final ISysUserRiskGroupService sysUserGroupService; + private final AbstractPermissionContext permissionContext; + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysUserRiskGroupController(IRiskPointInfoService riskPointInfoService, ISysUserRiskGroupService sysUserGroupService, AbstractPermissionContext permissionContext, ISysRiskGroupRelUserService sysGroupRelUserService) { + this.riskPointInfoService = riskPointInfoService; + this.sysUserGroupService = sysUserGroupService; + this.permissionContext = permissionContext; + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @BussinessLog(value = "风险点分组查询") + @ApiOperation(value = "风险点分组查询", hidden = true) + @GetMapping(value = "/list") + public ResponseDataDTO> list(SysRiskUserGroupVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysUserGroupService.list(query)); + } + + @BussinessLog(value = "分组人员列表查询") + @ApiOperation(value = "分组人员列表查询") + @GetMapping(value = "/groupUserList") + public ResponseDataDTO> groupUserList(SysRiskGroupRelUserVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysGroupRelUserService.list(query)); + } + + @BussinessLog(value = "风险点分组人员查询") + @ApiOperation(value = "风险点分组人员分页查询") + @GetMapping(value = "/groupUserPage") + public ResponseDataDTO> listPage(SysRiskGroupRelUserVO sysGroupRelUserVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysGroupRelUserVO.genQuery(); + List relUsers = sysGroupRelUserService.selectSysGroupRelUserPage(page, query); + page.setRecords(relUsers); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "用户分组批量新增") + @ApiOperation(value = "批量新增接口") + @PostMapping(value = "/batch-add") + public ResponseDataDTO batchAdd(@RequestBody GroupUserRelDTO relDTO) { + sysGroupRelUserService.batchAdd(relDTO); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组人员删除") + @ApiOperation(value = "用户组人员删除接口") + @GetMapping(value = "/user/delete") + public ResponseDataDTO userDel(@Param("用户组人员关联主键") String id) { + sysGroupRelUserService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "风险点分组分页查询") + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(SysRiskUserGroupVO sysUserGroupVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysUserGroupVO.genQuery(); + + List sysUserGroups = sysUserGroupService.selectSysUserGroupPage(page, query); + page.setRecords(sysUserGroups); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "风险点分组新增") + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.save(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组修改") + @ApiOperation(value = "修改接口") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.updateById(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组删除") + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + sysUserGroupService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "批量删除") + @ApiOperation(value = "批量删除", hidden = true) + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + sysUserGroupService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "详情查询") + @ApiOperation(value = "详情查询", hidden = true) + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(sysUserGroupService.getById(id)); + } + + @BussinessLog(value = "用户树") + @ApiOperation(value = "用户树查询") + @GetMapping(value = "/person/tree") + public ResponseDataDTO> personTree() { + return ResponseDataDTO.success(sysUserGroupService.personTree()); + } + + @BussinessLog(value = "风险点树查询") + @ApiOperation(value = "风险点树查询") + @GetMapping(value = "/tree") + public ResponseDataDTO> tree(String riskType) { + return ResponseDataDTO.success(riskPointInfoService.tree(riskType)); + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java new file mode 100644 index 0000000..419eb27 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备所属人员组 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupPointMapper extends BaseMapper { +/** +* 设备所属人员组 分页检索 +*/ +List selectSysGroupDevicePage(@Param("page") Page page, @Param("ew" ) QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java new file mode 100644 index 0000000..eb41227 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 组人员管理 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupRelUserMapper extends BaseMapper { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java new file mode 100644 index 0000000..e8352df --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.system.model.SysUserGroup; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 用户组信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysUserRiskGroupMapper extends BaseMapper { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml new file mode 100644 index 0000000..6fa6a4d --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + id , + group_id as groupId , + create_time as createTime , + target_Id as targetId + + + a.id , + a.group_id + as groupId , + a.create_time + as createTime , + a.target_Id + as targetId + + + + + + and group_id = #{request.groupId} + + + and device_id = #{request.deviceId} + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml new file mode 100644 index 0000000..a627546 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + id , + group_id as groupId , + user_id as userId , + create_time as createTime + + + a.id, + a.group_id + as groupId , + a.user_id + as userId , + a.create_time + as createTime + + + + + + and group_id = #{request.groupId} + + + and user_id = #{request.userId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml new file mode 100644 index 0000000..3245136 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + id, + group_name as groupName , + create_time as createTime , + dept_id as deptId , + create_id as createId + + + a.id,a.group_name as groupName , + a.create_time + as createTime , + a.dept_id + as deptId , + a.create_id + as createId,a.description + + + + + + and group_name like concat('%',#{request.groupName},'%') + + + and dept_id = #{request.deptId} + + + and create_id = #{request.createId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java new file mode 100644 index 0000000..e44328f --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class GroupRiskRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("风险点集合") + private List targetIds; + @ApiModelProperty("用户ID集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java new file mode 100644 index 0000000..f8758bf --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class RiskGroupUserRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("设备集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java new file mode 100644 index 0000000..b386d5b --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java @@ -0,0 +1,53 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 风险点所属组 sys_risk_group_point + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_risk_group_point") +public class SysRiskGroupPoint extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableId("id") + private Long id; + + @ApiModelProperty(value = "用户组ID", dataType = "Long") + @TableField("group_id") + private Long groupId; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty(value = "风险点ID", dataType = "Long") + @TableField("target_id") + private Long targetId; + + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; + + @Override + public String toString() { + return "SysGroupDevice{" + + "id=" + id + + "groupId=" + groupId + + "createTime=" + createTime + + "targetId=" + targetId + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java new file mode 100644 index 0000000..949caa3 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java @@ -0,0 +1,55 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 组人员管理对象 sys_group_rel_user + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_risk_group_rel_user") +public class SysRiskGroupRelUser extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + + @ApiModelProperty(value = "组ID", dataType = "Long") + @TableField("group_id") + private Long groupId; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + @TableField("user_id") + private Long userId; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + @ApiModelProperty(value = "用户姓名", dataType = "String") + @TableField(exist = false) + private String realName; + + @ApiModelProperty(value = "用户名", dataType = "String") + @TableField(exist = false) + private String account; + + @Override + public String toString() { + return "SysGroupRelUser{" + + "id=" + id + + "groupId=" + groupId + + "userId=" + userId + + "createTime=" + createTime + + "}"; + } +} \ No newline at end of file diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java new file mode 100644 index 0000000..1ca5eb1 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java @@ -0,0 +1,63 @@ +package com.casic.missiles.modular.device.enums; + +/** + * wvp设备类型转换 + * + * @author lwh + * @Date 2017年1月10日 下午9:54:13 + */ +public enum AvDeptEnum { + + DEPT0("0066", "801",0L), + DEPT1("0059", "699厂",1L), + DEPT2("0055", "283厂",1L), + DEPT3("0022", "201所",1L), + DEPT4("0027", "206所",1L), + DEPT5("0013", "23所",1L); + + String code; + String message; + Long deptId; + AvDeptEnum(String code, String message, Long deptId) { + this.code = code; + this.message = message; + this.deptId = deptId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public static AvDeptEnum valueOfCode(String value) { + if (value == null) { + return null; + } else { + for (AvDeptEnum ms : AvDeptEnum.values()) { + if (ms.getCode().equals(value)) { + return ms; + } + } + return null; + } + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java new file mode 100644 index 0000000..573d0e2 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.task; + +import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; + +public class Test { + public static void main(String[] args) { + System.out.println(AvStatusTypeEnum.valueOfType(new Integer(1)).getMessage()); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java new file mode 100644 index 0000000..7c06c67 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java @@ -0,0 +1,77 @@ +package com.casic.missiles.modular.device.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpSession; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class RiskSyncController extends BaseController { + @Resource + private IClientAuthService clientAuthService; + @Resource + private AbstractDeptService deptService; + @Resource + private AbstractUserService userService; + @PostMapping("/client/login") + @ResponseBody + public ResponseData login(@RequestBody RiskLoginForm deviceLoginForm, HttpSession session) { + return clientAuthService.login(deviceLoginForm, session); + } + + /** + * 全量组织信息读取 + * + * @return + */ + @PostMapping("/dept/list") + @ResponseBody + public ResponseDataDTO> dept() { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = deptService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量用户信息读取 + * + * @return + */ + @PostMapping("/user/list") + @ResponseBody + public ResponseDataDTO> user() { + //todo 此处租户拦截需移除 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量设备信息读取 + * + * @return + */ + @PostMapping("/device/list") + @ResponseBody + public ResponseDataDTO> device() { + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java new file mode 100644 index 0000000..5e5b890 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class UserSyncController extends BaseController { + + @Resource + private IBusDeviceInfoService busDeviceInfoService; + + /** + * 登录用户授权设备权限查看 + * @return + */ + @GetMapping("/device/permissions") + @ResponseBody + public ResponseDataDTO> devicePermissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } + + /** + * 登录用户风险点授权查询 + * @return + */ + @GetMapping("/permissions") + @ResponseBody + public ResponseDataDTO> permissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java new file mode 100644 index 0000000..07b8df8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +/** + * 设备登录接口 + */ +@Data +public class RiskLoginForm { + /** + * 设备编码 + */ + private String clientId; + + /** + * 时间戳 + */ + private Long time; + + /** + * 加密后数据 加密格式sn+时间戳 时效性为6小时 + */ + private String secret; + + /** + * 设备登录注册IP + */ + private String ip; + + /** + * 设备登录注册port + */ + private String port; +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java new file mode 100644 index 0000000..40fdb4b --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.device.service; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; + +import javax.servlet.http.HttpSession; + +public interface IClientAuthService { + /** + * @param deviceLoginForm + * @param session + * @return + */ + ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session); +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java new file mode 100644 index 0000000..576e857 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.device.service.impl; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import cn.hutool.jwt.JWT; +import cn.hutool.jwt.JWTUtil; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.util.IRiskCacheUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpSession; +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Service +public class ClientAuthServiceImpl implements IClientAuthService { + @Value("${casic.client.privateKey:MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALKcwHHOg0F6Zkq7GOVnOnTgvH9vSPXFFTOcEqOVBIBPBz7UNrEGkp1PhZ+oC4WVJAsDuot2e1fDZy9QS9HF92MmnYp9kuQRhGZjHctPnVZ0Kai5BES0ytHqPeauLyNXxOOS0YKYEUwpft4Z5Azw7bj3JWNvLrnTZvNld6FDvTslAgMBAAECgYAqN/kZLYpC+O6i7XSmDO95XwHPUXu6dDpdt5+EQR4OQh/hTwIaeAZB3uEj6vHGQomBfQEkI/5lsU97lIxHanbd+Hro7JyIhsGD5LR5XnZHVKzFiZW62OIU6FI9dlQNN8miiblnmyDwiMA3okaHl0O7qQjZ+IvY2csgmJc7AXpPpQJBAOhrhcfWFcgffj2O6HYNlBLFfbboc/ZzrEADDXKnxRSHlo5o8W+6gylG/L2NGtbag5S68B9VYzdkSQ1++5C+Ws8CQQDEu7h311PLEiKgqzGHpjzadQETmt/jMadaKQmT0TZwNVi6X8lR17U5hF8dAqZzUzr9kUC0HRIZhg4Uv1v3W3fLAkB4YPhxgJjXhjhEefg87Nt8vX1Xdx5Yz6CvpuUYNX0GHRQFvqUOUXQNtQ7CvorgLV1pc0lbcUZqMi8EJnj1hyJRAkEAjHXWm8GiMt+M15fCsi3vTq2xChVOekBuUsHv85iwvGZqJg7ThtpyqlEnM2g7/STUfkvhnXcQACclEI0blTy6BwJAPmFyhU+d0ejVpbc53TdrL2HqYYUHi/tTy/dtUa7lbypzdwwJ2M1Tv5PE8sQxr9tgMbebfxVb/RFKdiCCtzC4ng==}") + private String privateKey; + + @Override + public ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session) { + //固定秘钥解析 + try { + String str = RSAUtils.decrypt(deviceLoginForm.getSecret(), privateKey); + Long time = Long.valueOf(StrUtil.split(str, "_").get(1)); + //边缘盒子时差与服务时差不可超过24小时 + if (time == null || System.currentTimeMillis() - time > 3600 * 24 * 1000) { + return ResponseData.error("请求时间超时"); + } + deviceLoginForm.setTime(time); + } catch (Exception e) { + e.printStackTrace(); + return ResponseData.error("设备解析异常!"); + } + + try { + String token = this.createJwtToken(deviceLoginForm); + IRiskCacheUtil.put(token, token); + return ResponseData.success(token); + } catch (Exception e) { + log.error("设备登录异常:{}", e.getMessage()); + return ResponseData.error("登录异常,请联系管理员"); + } +} + /** + * token创建 + * + * @param loginForm 登录信息 + * @param device 设备信息 + * @return + * @throws Exception + */ + public String createJwtToken(RiskLoginForm loginForm) throws Exception { + Map payload = new HashMap<>(); + payload.put("clientId", loginForm.getClientId()); // 设备编号 + payload.put("time", loginForm.getTime()); // 请求时间 + + //RSA 解密 + String str = RSAUtils.decrypt(loginForm.getSecret(), privateKey); + String key = loginForm.getClientId()+"_" + loginForm.getTime() ; + if (!key.equals(str)) { + //秘钥验证失败 + throw new ServiceException(500,"秘钥验证失败"); + } + +// long exp = new Date().getTime() + 2 * 3600000; // 2小时后的时间戳 +// payload.put("exp", exp); + + // 创建JWT + String jwt = JWTUtil.createToken(payload, "token-203-202405".getBytes()); + + return jwt; + } + + /** + * token解析 + * + * @param jwtStr token + * @return + * @throws Exception + */ + public static RiskLoginForm parseToken(String jwtStr){ + JWT jwtObj = new JWTUtil().parseToken(jwtStr); + RiskLoginForm deviceLoginForm = new RiskLoginForm(); + deviceLoginForm.setClientId(Convert.toStr(jwtObj.getPayload("clientId"))); + return deviceLoginForm; + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java new file mode 100644 index 0000000..0e91ac8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.util; +import cn.hutool.cache.Cache; +import cn.hutool.cache.CacheUtil; +/** + * token有效 + */ +public class IRiskCacheUtil { + /** + * 1小时内不活跃 会踢掉 + */ + private static Cache fifoCache = CacheUtil.newFIFOCache(1000, 1000 * 60 * 60); + + public static void put(String key, String value) { + fifoCache.put(key, value); + } + + public static String get(String key) { + return fifoCache.get(key); + } + + public static void remove(String key) { + fifoCache.remove(key); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java new file mode 100644 index 0000000..805c32a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceGroupDict extends AbstractDictMap { + + @Override + public void init() { + //检索条件 + put("groupName", "分组名称"); + put("startTime", "起始时间"); + put("endTime", "结束时间"); + //新增修改属性 + put("cameraIds", "设备国标号"); + put("personIds", "人员主键集合"); + put("description","备注"); + put("id","主键"); + put("ids","主键集合"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java new file mode 100644 index 0000000..895fbd9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceQueryDict extends AbstractDictMap { + + @Override + public void init() { + put("devType", "类型查询"); + put("keyword", "设备名称"); + put("deptName", "所属单位"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java new file mode 100644 index 0000000..88da6df --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.device.util; + +public class DeviceScopeUtil { +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java new file mode 100644 index 0000000..2e3e478 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.device.controller; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.auth.dto.DeviceLoginForm; +import com.casic.missiles.modular.auth.util.ICacheUtil; +import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; +import com.casic.missiles.modular.device.service.IAlarmRecordService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +@Api(tags = "告警记录") +@RestController +@RequestMapping("/record") +public class AlarmUploadController extends BaseController { + + private final IAlarmRecordService alarmRecordService; + private final IDeviceAuthService deviceAuthService; + public AlarmUploadController(IAlarmRecordService alarmRecordService, IDeviceAuthService deviceAuthService) { + this.alarmRecordService = alarmRecordService; + this.deviceAuthService = deviceAuthService; + } + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } + @BussinessLog(value = "告警记录上报接口") + @ApiOperation(value = "告警记录上报接口") + @PostMapping(value = "/upload") + public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return createAuthError(); + } + alarmRecordService.upload(alarmRecord); + return ResponseDataDTO.success(); + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java new file mode 100644 index 0000000..3f1c189 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class RecognitionStreamDTO { + private Long id; + private String recognitionStreamFlag; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java new file mode 100644 index 0000000..fa5ae4a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java @@ -0,0 +1,167 @@ +package com.casic.missiles.modular.group.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IRiskPointInfoService; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.group.vo.SysRiskGroupPointVO; +import com.casic.missiles.modular.group.vo.SysRiskGroupRelUserVO; +import com.casic.missiles.modular.group.vo.SysRiskUserGroupVO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import com.casic.missiles.modular.system.vo.SysGroupRelUserVO; +import com.casic.missiles.modular.system.vo.SysUserGroupVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.ibatis.annotations.Param; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; + +/** + * 风险点组信息Controller + * + * @author lwh + * @date 2024-07-11 + */ +@Api(tags = "风险点组信息") +@RestController +@RequestMapping("/sys/risk/group") +public class SysUserRiskGroupController extends BaseController { + private final IRiskPointInfoService riskPointInfoService; + private final ISysUserRiskGroupService sysUserGroupService; + private final AbstractPermissionContext permissionContext; + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysUserRiskGroupController(IRiskPointInfoService riskPointInfoService, ISysUserRiskGroupService sysUserGroupService, AbstractPermissionContext permissionContext, ISysRiskGroupRelUserService sysGroupRelUserService) { + this.riskPointInfoService = riskPointInfoService; + this.sysUserGroupService = sysUserGroupService; + this.permissionContext = permissionContext; + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @BussinessLog(value = "风险点分组查询") + @ApiOperation(value = "风险点分组查询", hidden = true) + @GetMapping(value = "/list") + public ResponseDataDTO> list(SysRiskUserGroupVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysUserGroupService.list(query)); + } + + @BussinessLog(value = "分组人员列表查询") + @ApiOperation(value = "分组人员列表查询") + @GetMapping(value = "/groupUserList") + public ResponseDataDTO> groupUserList(SysRiskGroupRelUserVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysGroupRelUserService.list(query)); + } + + @BussinessLog(value = "风险点分组人员查询") + @ApiOperation(value = "风险点分组人员分页查询") + @GetMapping(value = "/groupUserPage") + public ResponseDataDTO> listPage(SysRiskGroupRelUserVO sysGroupRelUserVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysGroupRelUserVO.genQuery(); + List relUsers = sysGroupRelUserService.selectSysGroupRelUserPage(page, query); + page.setRecords(relUsers); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "用户分组批量新增") + @ApiOperation(value = "批量新增接口") + @PostMapping(value = "/batch-add") + public ResponseDataDTO batchAdd(@RequestBody GroupUserRelDTO relDTO) { + sysGroupRelUserService.batchAdd(relDTO); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组人员删除") + @ApiOperation(value = "用户组人员删除接口") + @GetMapping(value = "/user/delete") + public ResponseDataDTO userDel(@Param("用户组人员关联主键") String id) { + sysGroupRelUserService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "风险点分组分页查询") + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(SysRiskUserGroupVO sysUserGroupVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysUserGroupVO.genQuery(); + + List sysUserGroups = sysUserGroupService.selectSysUserGroupPage(page, query); + page.setRecords(sysUserGroups); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "风险点分组新增") + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.save(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组修改") + @ApiOperation(value = "修改接口") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.updateById(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组删除") + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + sysUserGroupService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "批量删除") + @ApiOperation(value = "批量删除", hidden = true) + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + sysUserGroupService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "详情查询") + @ApiOperation(value = "详情查询", hidden = true) + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(sysUserGroupService.getById(id)); + } + + @BussinessLog(value = "用户树") + @ApiOperation(value = "用户树查询") + @GetMapping(value = "/person/tree") + public ResponseDataDTO> personTree() { + return ResponseDataDTO.success(sysUserGroupService.personTree()); + } + + @BussinessLog(value = "风险点树查询") + @ApiOperation(value = "风险点树查询") + @GetMapping(value = "/tree") + public ResponseDataDTO> tree(String riskType) { + return ResponseDataDTO.success(riskPointInfoService.tree(riskType)); + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java new file mode 100644 index 0000000..419eb27 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备所属人员组 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupPointMapper extends BaseMapper { +/** +* 设备所属人员组 分页检索 +*/ +List selectSysGroupDevicePage(@Param("page") Page page, @Param("ew" ) QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java new file mode 100644 index 0000000..eb41227 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 组人员管理 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupRelUserMapper extends BaseMapper { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java new file mode 100644 index 0000000..e8352df --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.system.model.SysUserGroup; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 用户组信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysUserRiskGroupMapper extends BaseMapper { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml new file mode 100644 index 0000000..6fa6a4d --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + id , + group_id as groupId , + create_time as createTime , + target_Id as targetId + + + a.id , + a.group_id + as groupId , + a.create_time + as createTime , + a.target_Id + as targetId + + + + + + and group_id = #{request.groupId} + + + and device_id = #{request.deviceId} + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml new file mode 100644 index 0000000..a627546 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + id , + group_id as groupId , + user_id as userId , + create_time as createTime + + + a.id, + a.group_id + as groupId , + a.user_id + as userId , + a.create_time + as createTime + + + + + + and group_id = #{request.groupId} + + + and user_id = #{request.userId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml new file mode 100644 index 0000000..3245136 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + id, + group_name as groupName , + create_time as createTime , + dept_id as deptId , + create_id as createId + + + a.id,a.group_name as groupName , + a.create_time + as createTime , + a.dept_id + as deptId , + a.create_id + as createId,a.description + + + + + + and group_name like concat('%',#{request.groupName},'%') + + + and dept_id = #{request.deptId} + + + and create_id = #{request.createId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java new file mode 100644 index 0000000..e44328f --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class GroupRiskRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("风险点集合") + private List targetIds; + @ApiModelProperty("用户ID集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java new file mode 100644 index 0000000..f8758bf --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class RiskGroupUserRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("设备集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java new file mode 100644 index 0000000..b386d5b --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java @@ -0,0 +1,53 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 风险点所属组 sys_risk_group_point + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_risk_group_point") +public class SysRiskGroupPoint extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableId("id") + private Long id; + + @ApiModelProperty(value = "用户组ID", dataType = "Long") + @TableField("group_id") + private Long groupId; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty(value = "风险点ID", dataType = "Long") + @TableField("target_id") + private Long targetId; + + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; + + @Override + public String toString() { + return "SysGroupDevice{" + + "id=" + id + + "groupId=" + groupId + + "createTime=" + createTime + + "targetId=" + targetId + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java new file mode 100644 index 0000000..949caa3 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java @@ -0,0 +1,55 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 组人员管理对象 sys_group_rel_user + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_risk_group_rel_user") +public class SysRiskGroupRelUser extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + + @ApiModelProperty(value = "组ID", dataType = "Long") + @TableField("group_id") + private Long groupId; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + @TableField("user_id") + private Long userId; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + @ApiModelProperty(value = "用户姓名", dataType = "String") + @TableField(exist = false) + private String realName; + + @ApiModelProperty(value = "用户名", dataType = "String") + @TableField(exist = false) + private String account; + + @Override + public String toString() { + return "SysGroupRelUser{" + + "id=" + id + + "groupId=" + groupId + + "userId=" + userId + + "createTime=" + createTime + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java new file mode 100644 index 0000000..1b73dc0 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java @@ -0,0 +1,97 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 危险点分组组信息对象 sys_user_risk_group + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_user_risk_group") +public class SysUserRiskGroup extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableId("id") + private Long id; + + @ApiModelProperty(value = "组名称", dataType = "String", required = true) + @TableField("group_name") + private String groupName; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty(value = "所属组织(保留字段)", dataType = "Long") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty(value = "描述信息", dataType = "String") + @TableField("description") + private String description; + + @ApiModelProperty(value = "密级字典", dataType = "String") + @TableField("safe") + private int safe; + + @ApiModelProperty(value = "创建者ID", dataType = "Long") + @TableField("create_id") + private Long createId; + + + @ApiModelProperty(value = "类型(1 危险点 2 重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "Long") + @TableField("group_type") + private String groupType; + @TableField(exist = false) + private String groupTypeName; + /** + * 风险点集合 + */ + @ApiModelProperty(value = "风险点集合(逗号拼接)", dataType = "String") + @TableField(exist = false) + private String pointIds; + + @ApiModelProperty(value = "数量", dataType = "Long") + @TableField(exist = false) + private Integer targetNum; + /** + * 用户集合 + */ + @ApiModelProperty(value = "用户集合(逗号拼接)", dataType = "String") + @TableField(exist = false) + private String personIds; + + @ApiModelProperty(value = "用户名称", dataType = "String") + @TableField(exist = false) + private String realName; + + @ApiModelProperty(value = "用户名", dataType = "String") + @TableField(exist = false) + private String account; + + @ApiModelProperty(value = "密级字典名称", dataType = "String") + @TableField(exist = false) + private String safeName; + + @Override + public String toString() { + return "SysUserGroup{" + + "id=" + id + + "groupName=" + groupName + + "createTime=" + createTime + + "deptId=" + deptId + + "createId=" + createId + + "}"; + } +} \ No newline at end of file diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java new file mode 100644 index 0000000..1ca5eb1 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java @@ -0,0 +1,63 @@ +package com.casic.missiles.modular.device.enums; + +/** + * wvp设备类型转换 + * + * @author lwh + * @Date 2017年1月10日 下午9:54:13 + */ +public enum AvDeptEnum { + + DEPT0("0066", "801",0L), + DEPT1("0059", "699厂",1L), + DEPT2("0055", "283厂",1L), + DEPT3("0022", "201所",1L), + DEPT4("0027", "206所",1L), + DEPT5("0013", "23所",1L); + + String code; + String message; + Long deptId; + AvDeptEnum(String code, String message, Long deptId) { + this.code = code; + this.message = message; + this.deptId = deptId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public static AvDeptEnum valueOfCode(String value) { + if (value == null) { + return null; + } else { + for (AvDeptEnum ms : AvDeptEnum.values()) { + if (ms.getCode().equals(value)) { + return ms; + } + } + return null; + } + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java new file mode 100644 index 0000000..573d0e2 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.task; + +import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; + +public class Test { + public static void main(String[] args) { + System.out.println(AvStatusTypeEnum.valueOfType(new Integer(1)).getMessage()); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java new file mode 100644 index 0000000..7c06c67 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java @@ -0,0 +1,77 @@ +package com.casic.missiles.modular.device.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpSession; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class RiskSyncController extends BaseController { + @Resource + private IClientAuthService clientAuthService; + @Resource + private AbstractDeptService deptService; + @Resource + private AbstractUserService userService; + @PostMapping("/client/login") + @ResponseBody + public ResponseData login(@RequestBody RiskLoginForm deviceLoginForm, HttpSession session) { + return clientAuthService.login(deviceLoginForm, session); + } + + /** + * 全量组织信息读取 + * + * @return + */ + @PostMapping("/dept/list") + @ResponseBody + public ResponseDataDTO> dept() { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = deptService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量用户信息读取 + * + * @return + */ + @PostMapping("/user/list") + @ResponseBody + public ResponseDataDTO> user() { + //todo 此处租户拦截需移除 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量设备信息读取 + * + * @return + */ + @PostMapping("/device/list") + @ResponseBody + public ResponseDataDTO> device() { + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java new file mode 100644 index 0000000..5e5b890 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class UserSyncController extends BaseController { + + @Resource + private IBusDeviceInfoService busDeviceInfoService; + + /** + * 登录用户授权设备权限查看 + * @return + */ + @GetMapping("/device/permissions") + @ResponseBody + public ResponseDataDTO> devicePermissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } + + /** + * 登录用户风险点授权查询 + * @return + */ + @GetMapping("/permissions") + @ResponseBody + public ResponseDataDTO> permissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java new file mode 100644 index 0000000..07b8df8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +/** + * 设备登录接口 + */ +@Data +public class RiskLoginForm { + /** + * 设备编码 + */ + private String clientId; + + /** + * 时间戳 + */ + private Long time; + + /** + * 加密后数据 加密格式sn+时间戳 时效性为6小时 + */ + private String secret; + + /** + * 设备登录注册IP + */ + private String ip; + + /** + * 设备登录注册port + */ + private String port; +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java new file mode 100644 index 0000000..40fdb4b --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.device.service; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; + +import javax.servlet.http.HttpSession; + +public interface IClientAuthService { + /** + * @param deviceLoginForm + * @param session + * @return + */ + ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session); +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java new file mode 100644 index 0000000..576e857 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.device.service.impl; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import cn.hutool.jwt.JWT; +import cn.hutool.jwt.JWTUtil; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.util.IRiskCacheUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpSession; +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Service +public class ClientAuthServiceImpl implements IClientAuthService { + @Value("${casic.client.privateKey:MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALKcwHHOg0F6Zkq7GOVnOnTgvH9vSPXFFTOcEqOVBIBPBz7UNrEGkp1PhZ+oC4WVJAsDuot2e1fDZy9QS9HF92MmnYp9kuQRhGZjHctPnVZ0Kai5BES0ytHqPeauLyNXxOOS0YKYEUwpft4Z5Azw7bj3JWNvLrnTZvNld6FDvTslAgMBAAECgYAqN/kZLYpC+O6i7XSmDO95XwHPUXu6dDpdt5+EQR4OQh/hTwIaeAZB3uEj6vHGQomBfQEkI/5lsU97lIxHanbd+Hro7JyIhsGD5LR5XnZHVKzFiZW62OIU6FI9dlQNN8miiblnmyDwiMA3okaHl0O7qQjZ+IvY2csgmJc7AXpPpQJBAOhrhcfWFcgffj2O6HYNlBLFfbboc/ZzrEADDXKnxRSHlo5o8W+6gylG/L2NGtbag5S68B9VYzdkSQ1++5C+Ws8CQQDEu7h311PLEiKgqzGHpjzadQETmt/jMadaKQmT0TZwNVi6X8lR17U5hF8dAqZzUzr9kUC0HRIZhg4Uv1v3W3fLAkB4YPhxgJjXhjhEefg87Nt8vX1Xdx5Yz6CvpuUYNX0GHRQFvqUOUXQNtQ7CvorgLV1pc0lbcUZqMi8EJnj1hyJRAkEAjHXWm8GiMt+M15fCsi3vTq2xChVOekBuUsHv85iwvGZqJg7ThtpyqlEnM2g7/STUfkvhnXcQACclEI0blTy6BwJAPmFyhU+d0ejVpbc53TdrL2HqYYUHi/tTy/dtUa7lbypzdwwJ2M1Tv5PE8sQxr9tgMbebfxVb/RFKdiCCtzC4ng==}") + private String privateKey; + + @Override + public ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session) { + //固定秘钥解析 + try { + String str = RSAUtils.decrypt(deviceLoginForm.getSecret(), privateKey); + Long time = Long.valueOf(StrUtil.split(str, "_").get(1)); + //边缘盒子时差与服务时差不可超过24小时 + if (time == null || System.currentTimeMillis() - time > 3600 * 24 * 1000) { + return ResponseData.error("请求时间超时"); + } + deviceLoginForm.setTime(time); + } catch (Exception e) { + e.printStackTrace(); + return ResponseData.error("设备解析异常!"); + } + + try { + String token = this.createJwtToken(deviceLoginForm); + IRiskCacheUtil.put(token, token); + return ResponseData.success(token); + } catch (Exception e) { + log.error("设备登录异常:{}", e.getMessage()); + return ResponseData.error("登录异常,请联系管理员"); + } +} + /** + * token创建 + * + * @param loginForm 登录信息 + * @param device 设备信息 + * @return + * @throws Exception + */ + public String createJwtToken(RiskLoginForm loginForm) throws Exception { + Map payload = new HashMap<>(); + payload.put("clientId", loginForm.getClientId()); // 设备编号 + payload.put("time", loginForm.getTime()); // 请求时间 + + //RSA 解密 + String str = RSAUtils.decrypt(loginForm.getSecret(), privateKey); + String key = loginForm.getClientId()+"_" + loginForm.getTime() ; + if (!key.equals(str)) { + //秘钥验证失败 + throw new ServiceException(500,"秘钥验证失败"); + } + +// long exp = new Date().getTime() + 2 * 3600000; // 2小时后的时间戳 +// payload.put("exp", exp); + + // 创建JWT + String jwt = JWTUtil.createToken(payload, "token-203-202405".getBytes()); + + return jwt; + } + + /** + * token解析 + * + * @param jwtStr token + * @return + * @throws Exception + */ + public static RiskLoginForm parseToken(String jwtStr){ + JWT jwtObj = new JWTUtil().parseToken(jwtStr); + RiskLoginForm deviceLoginForm = new RiskLoginForm(); + deviceLoginForm.setClientId(Convert.toStr(jwtObj.getPayload("clientId"))); + return deviceLoginForm; + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java new file mode 100644 index 0000000..0e91ac8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.util; +import cn.hutool.cache.Cache; +import cn.hutool.cache.CacheUtil; +/** + * token有效 + */ +public class IRiskCacheUtil { + /** + * 1小时内不活跃 会踢掉 + */ + private static Cache fifoCache = CacheUtil.newFIFOCache(1000, 1000 * 60 * 60); + + public static void put(String key, String value) { + fifoCache.put(key, value); + } + + public static String get(String key) { + return fifoCache.get(key); + } + + public static void remove(String key) { + fifoCache.remove(key); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java new file mode 100644 index 0000000..805c32a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceGroupDict extends AbstractDictMap { + + @Override + public void init() { + //检索条件 + put("groupName", "分组名称"); + put("startTime", "起始时间"); + put("endTime", "结束时间"); + //新增修改属性 + put("cameraIds", "设备国标号"); + put("personIds", "人员主键集合"); + put("description","备注"); + put("id","主键"); + put("ids","主键集合"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java new file mode 100644 index 0000000..895fbd9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceQueryDict extends AbstractDictMap { + + @Override + public void init() { + put("devType", "类型查询"); + put("keyword", "设备名称"); + put("deptName", "所属单位"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java new file mode 100644 index 0000000..88da6df --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.device.util; + +public class DeviceScopeUtil { +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java new file mode 100644 index 0000000..2e3e478 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.device.controller; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.auth.dto.DeviceLoginForm; +import com.casic.missiles.modular.auth.util.ICacheUtil; +import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; +import com.casic.missiles.modular.device.service.IAlarmRecordService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +@Api(tags = "告警记录") +@RestController +@RequestMapping("/record") +public class AlarmUploadController extends BaseController { + + private final IAlarmRecordService alarmRecordService; + private final IDeviceAuthService deviceAuthService; + public AlarmUploadController(IAlarmRecordService alarmRecordService, IDeviceAuthService deviceAuthService) { + this.alarmRecordService = alarmRecordService; + this.deviceAuthService = deviceAuthService; + } + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } + @BussinessLog(value = "告警记录上报接口") + @ApiOperation(value = "告警记录上报接口") + @PostMapping(value = "/upload") + public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return createAuthError(); + } + alarmRecordService.upload(alarmRecord); + return ResponseDataDTO.success(); + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java new file mode 100644 index 0000000..3f1c189 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class RecognitionStreamDTO { + private Long id; + private String recognitionStreamFlag; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java new file mode 100644 index 0000000..fa5ae4a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java @@ -0,0 +1,167 @@ +package com.casic.missiles.modular.group.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IRiskPointInfoService; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.group.vo.SysRiskGroupPointVO; +import com.casic.missiles.modular.group.vo.SysRiskGroupRelUserVO; +import com.casic.missiles.modular.group.vo.SysRiskUserGroupVO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import com.casic.missiles.modular.system.vo.SysGroupRelUserVO; +import com.casic.missiles.modular.system.vo.SysUserGroupVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.ibatis.annotations.Param; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; + +/** + * 风险点组信息Controller + * + * @author lwh + * @date 2024-07-11 + */ +@Api(tags = "风险点组信息") +@RestController +@RequestMapping("/sys/risk/group") +public class SysUserRiskGroupController extends BaseController { + private final IRiskPointInfoService riskPointInfoService; + private final ISysUserRiskGroupService sysUserGroupService; + private final AbstractPermissionContext permissionContext; + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysUserRiskGroupController(IRiskPointInfoService riskPointInfoService, ISysUserRiskGroupService sysUserGroupService, AbstractPermissionContext permissionContext, ISysRiskGroupRelUserService sysGroupRelUserService) { + this.riskPointInfoService = riskPointInfoService; + this.sysUserGroupService = sysUserGroupService; + this.permissionContext = permissionContext; + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @BussinessLog(value = "风险点分组查询") + @ApiOperation(value = "风险点分组查询", hidden = true) + @GetMapping(value = "/list") + public ResponseDataDTO> list(SysRiskUserGroupVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysUserGroupService.list(query)); + } + + @BussinessLog(value = "分组人员列表查询") + @ApiOperation(value = "分组人员列表查询") + @GetMapping(value = "/groupUserList") + public ResponseDataDTO> groupUserList(SysRiskGroupRelUserVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysGroupRelUserService.list(query)); + } + + @BussinessLog(value = "风险点分组人员查询") + @ApiOperation(value = "风险点分组人员分页查询") + @GetMapping(value = "/groupUserPage") + public ResponseDataDTO> listPage(SysRiskGroupRelUserVO sysGroupRelUserVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysGroupRelUserVO.genQuery(); + List relUsers = sysGroupRelUserService.selectSysGroupRelUserPage(page, query); + page.setRecords(relUsers); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "用户分组批量新增") + @ApiOperation(value = "批量新增接口") + @PostMapping(value = "/batch-add") + public ResponseDataDTO batchAdd(@RequestBody GroupUserRelDTO relDTO) { + sysGroupRelUserService.batchAdd(relDTO); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组人员删除") + @ApiOperation(value = "用户组人员删除接口") + @GetMapping(value = "/user/delete") + public ResponseDataDTO userDel(@Param("用户组人员关联主键") String id) { + sysGroupRelUserService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "风险点分组分页查询") + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(SysRiskUserGroupVO sysUserGroupVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysUserGroupVO.genQuery(); + + List sysUserGroups = sysUserGroupService.selectSysUserGroupPage(page, query); + page.setRecords(sysUserGroups); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "风险点分组新增") + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.save(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组修改") + @ApiOperation(value = "修改接口") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.updateById(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组删除") + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + sysUserGroupService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "批量删除") + @ApiOperation(value = "批量删除", hidden = true) + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + sysUserGroupService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "详情查询") + @ApiOperation(value = "详情查询", hidden = true) + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(sysUserGroupService.getById(id)); + } + + @BussinessLog(value = "用户树") + @ApiOperation(value = "用户树查询") + @GetMapping(value = "/person/tree") + public ResponseDataDTO> personTree() { + return ResponseDataDTO.success(sysUserGroupService.personTree()); + } + + @BussinessLog(value = "风险点树查询") + @ApiOperation(value = "风险点树查询") + @GetMapping(value = "/tree") + public ResponseDataDTO> tree(String riskType) { + return ResponseDataDTO.success(riskPointInfoService.tree(riskType)); + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java new file mode 100644 index 0000000..419eb27 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备所属人员组 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupPointMapper extends BaseMapper { +/** +* 设备所属人员组 分页检索 +*/ +List selectSysGroupDevicePage(@Param("page") Page page, @Param("ew" ) QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java new file mode 100644 index 0000000..eb41227 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 组人员管理 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupRelUserMapper extends BaseMapper { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java new file mode 100644 index 0000000..e8352df --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.system.model.SysUserGroup; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 用户组信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysUserRiskGroupMapper extends BaseMapper { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml new file mode 100644 index 0000000..6fa6a4d --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + id , + group_id as groupId , + create_time as createTime , + target_Id as targetId + + + a.id , + a.group_id + as groupId , + a.create_time + as createTime , + a.target_Id + as targetId + + + + + + and group_id = #{request.groupId} + + + and device_id = #{request.deviceId} + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml new file mode 100644 index 0000000..a627546 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + id , + group_id as groupId , + user_id as userId , + create_time as createTime + + + a.id, + a.group_id + as groupId , + a.user_id + as userId , + a.create_time + as createTime + + + + + + and group_id = #{request.groupId} + + + and user_id = #{request.userId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml new file mode 100644 index 0000000..3245136 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + id, + group_name as groupName , + create_time as createTime , + dept_id as deptId , + create_id as createId + + + a.id,a.group_name as groupName , + a.create_time + as createTime , + a.dept_id + as deptId , + a.create_id + as createId,a.description + + + + + + and group_name like concat('%',#{request.groupName},'%') + + + and dept_id = #{request.deptId} + + + and create_id = #{request.createId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java new file mode 100644 index 0000000..e44328f --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class GroupRiskRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("风险点集合") + private List targetIds; + @ApiModelProperty("用户ID集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java new file mode 100644 index 0000000..f8758bf --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class RiskGroupUserRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("设备集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java new file mode 100644 index 0000000..b386d5b --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java @@ -0,0 +1,53 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 风险点所属组 sys_risk_group_point + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_risk_group_point") +public class SysRiskGroupPoint extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableId("id") + private Long id; + + @ApiModelProperty(value = "用户组ID", dataType = "Long") + @TableField("group_id") + private Long groupId; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty(value = "风险点ID", dataType = "Long") + @TableField("target_id") + private Long targetId; + + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; + + @Override + public String toString() { + return "SysGroupDevice{" + + "id=" + id + + "groupId=" + groupId + + "createTime=" + createTime + + "targetId=" + targetId + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java new file mode 100644 index 0000000..949caa3 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java @@ -0,0 +1,55 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 组人员管理对象 sys_group_rel_user + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_risk_group_rel_user") +public class SysRiskGroupRelUser extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + + @ApiModelProperty(value = "组ID", dataType = "Long") + @TableField("group_id") + private Long groupId; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + @TableField("user_id") + private Long userId; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + @ApiModelProperty(value = "用户姓名", dataType = "String") + @TableField(exist = false) + private String realName; + + @ApiModelProperty(value = "用户名", dataType = "String") + @TableField(exist = false) + private String account; + + @Override + public String toString() { + return "SysGroupRelUser{" + + "id=" + id + + "groupId=" + groupId + + "userId=" + userId + + "createTime=" + createTime + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java new file mode 100644 index 0000000..1b73dc0 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java @@ -0,0 +1,97 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 危险点分组组信息对象 sys_user_risk_group + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_user_risk_group") +public class SysUserRiskGroup extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableId("id") + private Long id; + + @ApiModelProperty(value = "组名称", dataType = "String", required = true) + @TableField("group_name") + private String groupName; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty(value = "所属组织(保留字段)", dataType = "Long") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty(value = "描述信息", dataType = "String") + @TableField("description") + private String description; + + @ApiModelProperty(value = "密级字典", dataType = "String") + @TableField("safe") + private int safe; + + @ApiModelProperty(value = "创建者ID", dataType = "Long") + @TableField("create_id") + private Long createId; + + + @ApiModelProperty(value = "类型(1 危险点 2 重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "Long") + @TableField("group_type") + private String groupType; + @TableField(exist = false) + private String groupTypeName; + /** + * 风险点集合 + */ + @ApiModelProperty(value = "风险点集合(逗号拼接)", dataType = "String") + @TableField(exist = false) + private String pointIds; + + @ApiModelProperty(value = "数量", dataType = "Long") + @TableField(exist = false) + private Integer targetNum; + /** + * 用户集合 + */ + @ApiModelProperty(value = "用户集合(逗号拼接)", dataType = "String") + @TableField(exist = false) + private String personIds; + + @ApiModelProperty(value = "用户名称", dataType = "String") + @TableField(exist = false) + private String realName; + + @ApiModelProperty(value = "用户名", dataType = "String") + @TableField(exist = false) + private String account; + + @ApiModelProperty(value = "密级字典名称", dataType = "String") + @TableField(exist = false) + private String safeName; + + @Override + public String toString() { + return "SysUserGroup{" + + "id=" + id + + "groupName=" + groupName + + "createTime=" + createTime + + "deptId=" + deptId + + "createId=" + createId + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java new file mode 100644 index 0000000..4657ce4 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.device.dto.GroupRelDTO; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; + +import java.util.List; + + +/** + *

+ * 设备所属人员组 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysRiskGroupPointService extends IService { + /** + * 设备所属人员组 分页检索 + */ + List selectSysGroupDevicePage(Page page, QueryWrapper query); + + /** + * 设备组批量新增 + * + * @param relDTO + */ + void batchAdd(GroupRiskRelDTO relDTO); + + + /** + * 增量更新 + * @param groupId + * @param deviceIds + */ + void batchIncremental(Long groupId, List deviceIds); +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java new file mode 100644 index 0000000..1ca5eb1 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java @@ -0,0 +1,63 @@ +package com.casic.missiles.modular.device.enums; + +/** + * wvp设备类型转换 + * + * @author lwh + * @Date 2017年1月10日 下午9:54:13 + */ +public enum AvDeptEnum { + + DEPT0("0066", "801",0L), + DEPT1("0059", "699厂",1L), + DEPT2("0055", "283厂",1L), + DEPT3("0022", "201所",1L), + DEPT4("0027", "206所",1L), + DEPT5("0013", "23所",1L); + + String code; + String message; + Long deptId; + AvDeptEnum(String code, String message, Long deptId) { + this.code = code; + this.message = message; + this.deptId = deptId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public static AvDeptEnum valueOfCode(String value) { + if (value == null) { + return null; + } else { + for (AvDeptEnum ms : AvDeptEnum.values()) { + if (ms.getCode().equals(value)) { + return ms; + } + } + return null; + } + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java new file mode 100644 index 0000000..573d0e2 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.task; + +import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; + +public class Test { + public static void main(String[] args) { + System.out.println(AvStatusTypeEnum.valueOfType(new Integer(1)).getMessage()); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java new file mode 100644 index 0000000..7c06c67 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java @@ -0,0 +1,77 @@ +package com.casic.missiles.modular.device.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpSession; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class RiskSyncController extends BaseController { + @Resource + private IClientAuthService clientAuthService; + @Resource + private AbstractDeptService deptService; + @Resource + private AbstractUserService userService; + @PostMapping("/client/login") + @ResponseBody + public ResponseData login(@RequestBody RiskLoginForm deviceLoginForm, HttpSession session) { + return clientAuthService.login(deviceLoginForm, session); + } + + /** + * 全量组织信息读取 + * + * @return + */ + @PostMapping("/dept/list") + @ResponseBody + public ResponseDataDTO> dept() { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = deptService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量用户信息读取 + * + * @return + */ + @PostMapping("/user/list") + @ResponseBody + public ResponseDataDTO> user() { + //todo 此处租户拦截需移除 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量设备信息读取 + * + * @return + */ + @PostMapping("/device/list") + @ResponseBody + public ResponseDataDTO> device() { + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java new file mode 100644 index 0000000..5e5b890 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class UserSyncController extends BaseController { + + @Resource + private IBusDeviceInfoService busDeviceInfoService; + + /** + * 登录用户授权设备权限查看 + * @return + */ + @GetMapping("/device/permissions") + @ResponseBody + public ResponseDataDTO> devicePermissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } + + /** + * 登录用户风险点授权查询 + * @return + */ + @GetMapping("/permissions") + @ResponseBody + public ResponseDataDTO> permissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java new file mode 100644 index 0000000..07b8df8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +/** + * 设备登录接口 + */ +@Data +public class RiskLoginForm { + /** + * 设备编码 + */ + private String clientId; + + /** + * 时间戳 + */ + private Long time; + + /** + * 加密后数据 加密格式sn+时间戳 时效性为6小时 + */ + private String secret; + + /** + * 设备登录注册IP + */ + private String ip; + + /** + * 设备登录注册port + */ + private String port; +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java new file mode 100644 index 0000000..40fdb4b --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.device.service; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; + +import javax.servlet.http.HttpSession; + +public interface IClientAuthService { + /** + * @param deviceLoginForm + * @param session + * @return + */ + ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session); +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java new file mode 100644 index 0000000..576e857 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.device.service.impl; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import cn.hutool.jwt.JWT; +import cn.hutool.jwt.JWTUtil; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.util.IRiskCacheUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpSession; +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Service +public class ClientAuthServiceImpl implements IClientAuthService { + @Value("${casic.client.privateKey:MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALKcwHHOg0F6Zkq7GOVnOnTgvH9vSPXFFTOcEqOVBIBPBz7UNrEGkp1PhZ+oC4WVJAsDuot2e1fDZy9QS9HF92MmnYp9kuQRhGZjHctPnVZ0Kai5BES0ytHqPeauLyNXxOOS0YKYEUwpft4Z5Azw7bj3JWNvLrnTZvNld6FDvTslAgMBAAECgYAqN/kZLYpC+O6i7XSmDO95XwHPUXu6dDpdt5+EQR4OQh/hTwIaeAZB3uEj6vHGQomBfQEkI/5lsU97lIxHanbd+Hro7JyIhsGD5LR5XnZHVKzFiZW62OIU6FI9dlQNN8miiblnmyDwiMA3okaHl0O7qQjZ+IvY2csgmJc7AXpPpQJBAOhrhcfWFcgffj2O6HYNlBLFfbboc/ZzrEADDXKnxRSHlo5o8W+6gylG/L2NGtbag5S68B9VYzdkSQ1++5C+Ws8CQQDEu7h311PLEiKgqzGHpjzadQETmt/jMadaKQmT0TZwNVi6X8lR17U5hF8dAqZzUzr9kUC0HRIZhg4Uv1v3W3fLAkB4YPhxgJjXhjhEefg87Nt8vX1Xdx5Yz6CvpuUYNX0GHRQFvqUOUXQNtQ7CvorgLV1pc0lbcUZqMi8EJnj1hyJRAkEAjHXWm8GiMt+M15fCsi3vTq2xChVOekBuUsHv85iwvGZqJg7ThtpyqlEnM2g7/STUfkvhnXcQACclEI0blTy6BwJAPmFyhU+d0ejVpbc53TdrL2HqYYUHi/tTy/dtUa7lbypzdwwJ2M1Tv5PE8sQxr9tgMbebfxVb/RFKdiCCtzC4ng==}") + private String privateKey; + + @Override + public ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session) { + //固定秘钥解析 + try { + String str = RSAUtils.decrypt(deviceLoginForm.getSecret(), privateKey); + Long time = Long.valueOf(StrUtil.split(str, "_").get(1)); + //边缘盒子时差与服务时差不可超过24小时 + if (time == null || System.currentTimeMillis() - time > 3600 * 24 * 1000) { + return ResponseData.error("请求时间超时"); + } + deviceLoginForm.setTime(time); + } catch (Exception e) { + e.printStackTrace(); + return ResponseData.error("设备解析异常!"); + } + + try { + String token = this.createJwtToken(deviceLoginForm); + IRiskCacheUtil.put(token, token); + return ResponseData.success(token); + } catch (Exception e) { + log.error("设备登录异常:{}", e.getMessage()); + return ResponseData.error("登录异常,请联系管理员"); + } +} + /** + * token创建 + * + * @param loginForm 登录信息 + * @param device 设备信息 + * @return + * @throws Exception + */ + public String createJwtToken(RiskLoginForm loginForm) throws Exception { + Map payload = new HashMap<>(); + payload.put("clientId", loginForm.getClientId()); // 设备编号 + payload.put("time", loginForm.getTime()); // 请求时间 + + //RSA 解密 + String str = RSAUtils.decrypt(loginForm.getSecret(), privateKey); + String key = loginForm.getClientId()+"_" + loginForm.getTime() ; + if (!key.equals(str)) { + //秘钥验证失败 + throw new ServiceException(500,"秘钥验证失败"); + } + +// long exp = new Date().getTime() + 2 * 3600000; // 2小时后的时间戳 +// payload.put("exp", exp); + + // 创建JWT + String jwt = JWTUtil.createToken(payload, "token-203-202405".getBytes()); + + return jwt; + } + + /** + * token解析 + * + * @param jwtStr token + * @return + * @throws Exception + */ + public static RiskLoginForm parseToken(String jwtStr){ + JWT jwtObj = new JWTUtil().parseToken(jwtStr); + RiskLoginForm deviceLoginForm = new RiskLoginForm(); + deviceLoginForm.setClientId(Convert.toStr(jwtObj.getPayload("clientId"))); + return deviceLoginForm; + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java new file mode 100644 index 0000000..0e91ac8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.util; +import cn.hutool.cache.Cache; +import cn.hutool.cache.CacheUtil; +/** + * token有效 + */ +public class IRiskCacheUtil { + /** + * 1小时内不活跃 会踢掉 + */ + private static Cache fifoCache = CacheUtil.newFIFOCache(1000, 1000 * 60 * 60); + + public static void put(String key, String value) { + fifoCache.put(key, value); + } + + public static String get(String key) { + return fifoCache.get(key); + } + + public static void remove(String key) { + fifoCache.remove(key); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java new file mode 100644 index 0000000..805c32a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceGroupDict extends AbstractDictMap { + + @Override + public void init() { + //检索条件 + put("groupName", "分组名称"); + put("startTime", "起始时间"); + put("endTime", "结束时间"); + //新增修改属性 + put("cameraIds", "设备国标号"); + put("personIds", "人员主键集合"); + put("description","备注"); + put("id","主键"); + put("ids","主键集合"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java new file mode 100644 index 0000000..895fbd9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceQueryDict extends AbstractDictMap { + + @Override + public void init() { + put("devType", "类型查询"); + put("keyword", "设备名称"); + put("deptName", "所属单位"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java new file mode 100644 index 0000000..88da6df --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.device.util; + +public class DeviceScopeUtil { +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java new file mode 100644 index 0000000..2e3e478 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.device.controller; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.auth.dto.DeviceLoginForm; +import com.casic.missiles.modular.auth.util.ICacheUtil; +import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; +import com.casic.missiles.modular.device.service.IAlarmRecordService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +@Api(tags = "告警记录") +@RestController +@RequestMapping("/record") +public class AlarmUploadController extends BaseController { + + private final IAlarmRecordService alarmRecordService; + private final IDeviceAuthService deviceAuthService; + public AlarmUploadController(IAlarmRecordService alarmRecordService, IDeviceAuthService deviceAuthService) { + this.alarmRecordService = alarmRecordService; + this.deviceAuthService = deviceAuthService; + } + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } + @BussinessLog(value = "告警记录上报接口") + @ApiOperation(value = "告警记录上报接口") + @PostMapping(value = "/upload") + public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return createAuthError(); + } + alarmRecordService.upload(alarmRecord); + return ResponseDataDTO.success(); + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java new file mode 100644 index 0000000..3f1c189 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class RecognitionStreamDTO { + private Long id; + private String recognitionStreamFlag; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java new file mode 100644 index 0000000..fa5ae4a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java @@ -0,0 +1,167 @@ +package com.casic.missiles.modular.group.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IRiskPointInfoService; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.group.vo.SysRiskGroupPointVO; +import com.casic.missiles.modular.group.vo.SysRiskGroupRelUserVO; +import com.casic.missiles.modular.group.vo.SysRiskUserGroupVO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import com.casic.missiles.modular.system.vo.SysGroupRelUserVO; +import com.casic.missiles.modular.system.vo.SysUserGroupVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.ibatis.annotations.Param; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; + +/** + * 风险点组信息Controller + * + * @author lwh + * @date 2024-07-11 + */ +@Api(tags = "风险点组信息") +@RestController +@RequestMapping("/sys/risk/group") +public class SysUserRiskGroupController extends BaseController { + private final IRiskPointInfoService riskPointInfoService; + private final ISysUserRiskGroupService sysUserGroupService; + private final AbstractPermissionContext permissionContext; + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysUserRiskGroupController(IRiskPointInfoService riskPointInfoService, ISysUserRiskGroupService sysUserGroupService, AbstractPermissionContext permissionContext, ISysRiskGroupRelUserService sysGroupRelUserService) { + this.riskPointInfoService = riskPointInfoService; + this.sysUserGroupService = sysUserGroupService; + this.permissionContext = permissionContext; + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @BussinessLog(value = "风险点分组查询") + @ApiOperation(value = "风险点分组查询", hidden = true) + @GetMapping(value = "/list") + public ResponseDataDTO> list(SysRiskUserGroupVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysUserGroupService.list(query)); + } + + @BussinessLog(value = "分组人员列表查询") + @ApiOperation(value = "分组人员列表查询") + @GetMapping(value = "/groupUserList") + public ResponseDataDTO> groupUserList(SysRiskGroupRelUserVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysGroupRelUserService.list(query)); + } + + @BussinessLog(value = "风险点分组人员查询") + @ApiOperation(value = "风险点分组人员分页查询") + @GetMapping(value = "/groupUserPage") + public ResponseDataDTO> listPage(SysRiskGroupRelUserVO sysGroupRelUserVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysGroupRelUserVO.genQuery(); + List relUsers = sysGroupRelUserService.selectSysGroupRelUserPage(page, query); + page.setRecords(relUsers); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "用户分组批量新增") + @ApiOperation(value = "批量新增接口") + @PostMapping(value = "/batch-add") + public ResponseDataDTO batchAdd(@RequestBody GroupUserRelDTO relDTO) { + sysGroupRelUserService.batchAdd(relDTO); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组人员删除") + @ApiOperation(value = "用户组人员删除接口") + @GetMapping(value = "/user/delete") + public ResponseDataDTO userDel(@Param("用户组人员关联主键") String id) { + sysGroupRelUserService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "风险点分组分页查询") + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(SysRiskUserGroupVO sysUserGroupVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysUserGroupVO.genQuery(); + + List sysUserGroups = sysUserGroupService.selectSysUserGroupPage(page, query); + page.setRecords(sysUserGroups); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "风险点分组新增") + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.save(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组修改") + @ApiOperation(value = "修改接口") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.updateById(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组删除") + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + sysUserGroupService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "批量删除") + @ApiOperation(value = "批量删除", hidden = true) + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + sysUserGroupService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "详情查询") + @ApiOperation(value = "详情查询", hidden = true) + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(sysUserGroupService.getById(id)); + } + + @BussinessLog(value = "用户树") + @ApiOperation(value = "用户树查询") + @GetMapping(value = "/person/tree") + public ResponseDataDTO> personTree() { + return ResponseDataDTO.success(sysUserGroupService.personTree()); + } + + @BussinessLog(value = "风险点树查询") + @ApiOperation(value = "风险点树查询") + @GetMapping(value = "/tree") + public ResponseDataDTO> tree(String riskType) { + return ResponseDataDTO.success(riskPointInfoService.tree(riskType)); + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java new file mode 100644 index 0000000..419eb27 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备所属人员组 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupPointMapper extends BaseMapper { +/** +* 设备所属人员组 分页检索 +*/ +List selectSysGroupDevicePage(@Param("page") Page page, @Param("ew" ) QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java new file mode 100644 index 0000000..eb41227 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 组人员管理 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupRelUserMapper extends BaseMapper { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java new file mode 100644 index 0000000..e8352df --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.system.model.SysUserGroup; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 用户组信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysUserRiskGroupMapper extends BaseMapper { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml new file mode 100644 index 0000000..6fa6a4d --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + id , + group_id as groupId , + create_time as createTime , + target_Id as targetId + + + a.id , + a.group_id + as groupId , + a.create_time + as createTime , + a.target_Id + as targetId + + + + + + and group_id = #{request.groupId} + + + and device_id = #{request.deviceId} + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml new file mode 100644 index 0000000..a627546 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + id , + group_id as groupId , + user_id as userId , + create_time as createTime + + + a.id, + a.group_id + as groupId , + a.user_id + as userId , + a.create_time + as createTime + + + + + + and group_id = #{request.groupId} + + + and user_id = #{request.userId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml new file mode 100644 index 0000000..3245136 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + id, + group_name as groupName , + create_time as createTime , + dept_id as deptId , + create_id as createId + + + a.id,a.group_name as groupName , + a.create_time + as createTime , + a.dept_id + as deptId , + a.create_id + as createId,a.description + + + + + + and group_name like concat('%',#{request.groupName},'%') + + + and dept_id = #{request.deptId} + + + and create_id = #{request.createId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java new file mode 100644 index 0000000..e44328f --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class GroupRiskRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("风险点集合") + private List targetIds; + @ApiModelProperty("用户ID集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java new file mode 100644 index 0000000..f8758bf --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class RiskGroupUserRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("设备集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java new file mode 100644 index 0000000..b386d5b --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java @@ -0,0 +1,53 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 风险点所属组 sys_risk_group_point + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_risk_group_point") +public class SysRiskGroupPoint extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableId("id") + private Long id; + + @ApiModelProperty(value = "用户组ID", dataType = "Long") + @TableField("group_id") + private Long groupId; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty(value = "风险点ID", dataType = "Long") + @TableField("target_id") + private Long targetId; + + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; + + @Override + public String toString() { + return "SysGroupDevice{" + + "id=" + id + + "groupId=" + groupId + + "createTime=" + createTime + + "targetId=" + targetId + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java new file mode 100644 index 0000000..949caa3 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java @@ -0,0 +1,55 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 组人员管理对象 sys_group_rel_user + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_risk_group_rel_user") +public class SysRiskGroupRelUser extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + + @ApiModelProperty(value = "组ID", dataType = "Long") + @TableField("group_id") + private Long groupId; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + @TableField("user_id") + private Long userId; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + @ApiModelProperty(value = "用户姓名", dataType = "String") + @TableField(exist = false) + private String realName; + + @ApiModelProperty(value = "用户名", dataType = "String") + @TableField(exist = false) + private String account; + + @Override + public String toString() { + return "SysGroupRelUser{" + + "id=" + id + + "groupId=" + groupId + + "userId=" + userId + + "createTime=" + createTime + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java new file mode 100644 index 0000000..1b73dc0 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java @@ -0,0 +1,97 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 危险点分组组信息对象 sys_user_risk_group + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_user_risk_group") +public class SysUserRiskGroup extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableId("id") + private Long id; + + @ApiModelProperty(value = "组名称", dataType = "String", required = true) + @TableField("group_name") + private String groupName; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty(value = "所属组织(保留字段)", dataType = "Long") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty(value = "描述信息", dataType = "String") + @TableField("description") + private String description; + + @ApiModelProperty(value = "密级字典", dataType = "String") + @TableField("safe") + private int safe; + + @ApiModelProperty(value = "创建者ID", dataType = "Long") + @TableField("create_id") + private Long createId; + + + @ApiModelProperty(value = "类型(1 危险点 2 重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "Long") + @TableField("group_type") + private String groupType; + @TableField(exist = false) + private String groupTypeName; + /** + * 风险点集合 + */ + @ApiModelProperty(value = "风险点集合(逗号拼接)", dataType = "String") + @TableField(exist = false) + private String pointIds; + + @ApiModelProperty(value = "数量", dataType = "Long") + @TableField(exist = false) + private Integer targetNum; + /** + * 用户集合 + */ + @ApiModelProperty(value = "用户集合(逗号拼接)", dataType = "String") + @TableField(exist = false) + private String personIds; + + @ApiModelProperty(value = "用户名称", dataType = "String") + @TableField(exist = false) + private String realName; + + @ApiModelProperty(value = "用户名", dataType = "String") + @TableField(exist = false) + private String account; + + @ApiModelProperty(value = "密级字典名称", dataType = "String") + @TableField(exist = false) + private String safeName; + + @Override + public String toString() { + return "SysUserGroup{" + + "id=" + id + + "groupName=" + groupName + + "createTime=" + createTime + + "deptId=" + deptId + + "createId=" + createId + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java new file mode 100644 index 0000000..4657ce4 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.device.dto.GroupRelDTO; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; + +import java.util.List; + + +/** + *

+ * 设备所属人员组 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysRiskGroupPointService extends IService { + /** + * 设备所属人员组 分页检索 + */ + List selectSysGroupDevicePage(Page page, QueryWrapper query); + + /** + * 设备组批量新增 + * + * @param relDTO + */ + void batchAdd(GroupRiskRelDTO relDTO); + + + /** + * 增量更新 + * @param groupId + * @param deviceIds + */ + void batchIncremental(Long groupId, List deviceIds); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java new file mode 100644 index 0000000..591eef2 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; + +import java.util.List; + + +/** + *

+ * 组人员管理 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysRiskGroupRelUserService extends IService { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(Page page, QueryWrapper query); + + void batchAdd(GroupUserRelDTO relDTO); +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java new file mode 100644 index 0000000..1ca5eb1 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java @@ -0,0 +1,63 @@ +package com.casic.missiles.modular.device.enums; + +/** + * wvp设备类型转换 + * + * @author lwh + * @Date 2017年1月10日 下午9:54:13 + */ +public enum AvDeptEnum { + + DEPT0("0066", "801",0L), + DEPT1("0059", "699厂",1L), + DEPT2("0055", "283厂",1L), + DEPT3("0022", "201所",1L), + DEPT4("0027", "206所",1L), + DEPT5("0013", "23所",1L); + + String code; + String message; + Long deptId; + AvDeptEnum(String code, String message, Long deptId) { + this.code = code; + this.message = message; + this.deptId = deptId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public static AvDeptEnum valueOfCode(String value) { + if (value == null) { + return null; + } else { + for (AvDeptEnum ms : AvDeptEnum.values()) { + if (ms.getCode().equals(value)) { + return ms; + } + } + return null; + } + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java new file mode 100644 index 0000000..573d0e2 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.task; + +import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; + +public class Test { + public static void main(String[] args) { + System.out.println(AvStatusTypeEnum.valueOfType(new Integer(1)).getMessage()); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java new file mode 100644 index 0000000..7c06c67 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java @@ -0,0 +1,77 @@ +package com.casic.missiles.modular.device.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpSession; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class RiskSyncController extends BaseController { + @Resource + private IClientAuthService clientAuthService; + @Resource + private AbstractDeptService deptService; + @Resource + private AbstractUserService userService; + @PostMapping("/client/login") + @ResponseBody + public ResponseData login(@RequestBody RiskLoginForm deviceLoginForm, HttpSession session) { + return clientAuthService.login(deviceLoginForm, session); + } + + /** + * 全量组织信息读取 + * + * @return + */ + @PostMapping("/dept/list") + @ResponseBody + public ResponseDataDTO> dept() { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = deptService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量用户信息读取 + * + * @return + */ + @PostMapping("/user/list") + @ResponseBody + public ResponseDataDTO> user() { + //todo 此处租户拦截需移除 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量设备信息读取 + * + * @return + */ + @PostMapping("/device/list") + @ResponseBody + public ResponseDataDTO> device() { + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java new file mode 100644 index 0000000..5e5b890 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class UserSyncController extends BaseController { + + @Resource + private IBusDeviceInfoService busDeviceInfoService; + + /** + * 登录用户授权设备权限查看 + * @return + */ + @GetMapping("/device/permissions") + @ResponseBody + public ResponseDataDTO> devicePermissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } + + /** + * 登录用户风险点授权查询 + * @return + */ + @GetMapping("/permissions") + @ResponseBody + public ResponseDataDTO> permissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java new file mode 100644 index 0000000..07b8df8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +/** + * 设备登录接口 + */ +@Data +public class RiskLoginForm { + /** + * 设备编码 + */ + private String clientId; + + /** + * 时间戳 + */ + private Long time; + + /** + * 加密后数据 加密格式sn+时间戳 时效性为6小时 + */ + private String secret; + + /** + * 设备登录注册IP + */ + private String ip; + + /** + * 设备登录注册port + */ + private String port; +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java new file mode 100644 index 0000000..40fdb4b --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.device.service; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; + +import javax.servlet.http.HttpSession; + +public interface IClientAuthService { + /** + * @param deviceLoginForm + * @param session + * @return + */ + ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session); +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java new file mode 100644 index 0000000..576e857 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.device.service.impl; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import cn.hutool.jwt.JWT; +import cn.hutool.jwt.JWTUtil; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.util.IRiskCacheUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpSession; +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Service +public class ClientAuthServiceImpl implements IClientAuthService { + @Value("${casic.client.privateKey:MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALKcwHHOg0F6Zkq7GOVnOnTgvH9vSPXFFTOcEqOVBIBPBz7UNrEGkp1PhZ+oC4WVJAsDuot2e1fDZy9QS9HF92MmnYp9kuQRhGZjHctPnVZ0Kai5BES0ytHqPeauLyNXxOOS0YKYEUwpft4Z5Azw7bj3JWNvLrnTZvNld6FDvTslAgMBAAECgYAqN/kZLYpC+O6i7XSmDO95XwHPUXu6dDpdt5+EQR4OQh/hTwIaeAZB3uEj6vHGQomBfQEkI/5lsU97lIxHanbd+Hro7JyIhsGD5LR5XnZHVKzFiZW62OIU6FI9dlQNN8miiblnmyDwiMA3okaHl0O7qQjZ+IvY2csgmJc7AXpPpQJBAOhrhcfWFcgffj2O6HYNlBLFfbboc/ZzrEADDXKnxRSHlo5o8W+6gylG/L2NGtbag5S68B9VYzdkSQ1++5C+Ws8CQQDEu7h311PLEiKgqzGHpjzadQETmt/jMadaKQmT0TZwNVi6X8lR17U5hF8dAqZzUzr9kUC0HRIZhg4Uv1v3W3fLAkB4YPhxgJjXhjhEefg87Nt8vX1Xdx5Yz6CvpuUYNX0GHRQFvqUOUXQNtQ7CvorgLV1pc0lbcUZqMi8EJnj1hyJRAkEAjHXWm8GiMt+M15fCsi3vTq2xChVOekBuUsHv85iwvGZqJg7ThtpyqlEnM2g7/STUfkvhnXcQACclEI0blTy6BwJAPmFyhU+d0ejVpbc53TdrL2HqYYUHi/tTy/dtUa7lbypzdwwJ2M1Tv5PE8sQxr9tgMbebfxVb/RFKdiCCtzC4ng==}") + private String privateKey; + + @Override + public ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session) { + //固定秘钥解析 + try { + String str = RSAUtils.decrypt(deviceLoginForm.getSecret(), privateKey); + Long time = Long.valueOf(StrUtil.split(str, "_").get(1)); + //边缘盒子时差与服务时差不可超过24小时 + if (time == null || System.currentTimeMillis() - time > 3600 * 24 * 1000) { + return ResponseData.error("请求时间超时"); + } + deviceLoginForm.setTime(time); + } catch (Exception e) { + e.printStackTrace(); + return ResponseData.error("设备解析异常!"); + } + + try { + String token = this.createJwtToken(deviceLoginForm); + IRiskCacheUtil.put(token, token); + return ResponseData.success(token); + } catch (Exception e) { + log.error("设备登录异常:{}", e.getMessage()); + return ResponseData.error("登录异常,请联系管理员"); + } +} + /** + * token创建 + * + * @param loginForm 登录信息 + * @param device 设备信息 + * @return + * @throws Exception + */ + public String createJwtToken(RiskLoginForm loginForm) throws Exception { + Map payload = new HashMap<>(); + payload.put("clientId", loginForm.getClientId()); // 设备编号 + payload.put("time", loginForm.getTime()); // 请求时间 + + //RSA 解密 + String str = RSAUtils.decrypt(loginForm.getSecret(), privateKey); + String key = loginForm.getClientId()+"_" + loginForm.getTime() ; + if (!key.equals(str)) { + //秘钥验证失败 + throw new ServiceException(500,"秘钥验证失败"); + } + +// long exp = new Date().getTime() + 2 * 3600000; // 2小时后的时间戳 +// payload.put("exp", exp); + + // 创建JWT + String jwt = JWTUtil.createToken(payload, "token-203-202405".getBytes()); + + return jwt; + } + + /** + * token解析 + * + * @param jwtStr token + * @return + * @throws Exception + */ + public static RiskLoginForm parseToken(String jwtStr){ + JWT jwtObj = new JWTUtil().parseToken(jwtStr); + RiskLoginForm deviceLoginForm = new RiskLoginForm(); + deviceLoginForm.setClientId(Convert.toStr(jwtObj.getPayload("clientId"))); + return deviceLoginForm; + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java new file mode 100644 index 0000000..0e91ac8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.util; +import cn.hutool.cache.Cache; +import cn.hutool.cache.CacheUtil; +/** + * token有效 + */ +public class IRiskCacheUtil { + /** + * 1小时内不活跃 会踢掉 + */ + private static Cache fifoCache = CacheUtil.newFIFOCache(1000, 1000 * 60 * 60); + + public static void put(String key, String value) { + fifoCache.put(key, value); + } + + public static String get(String key) { + return fifoCache.get(key); + } + + public static void remove(String key) { + fifoCache.remove(key); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java new file mode 100644 index 0000000..805c32a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceGroupDict extends AbstractDictMap { + + @Override + public void init() { + //检索条件 + put("groupName", "分组名称"); + put("startTime", "起始时间"); + put("endTime", "结束时间"); + //新增修改属性 + put("cameraIds", "设备国标号"); + put("personIds", "人员主键集合"); + put("description","备注"); + put("id","主键"); + put("ids","主键集合"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java new file mode 100644 index 0000000..895fbd9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceQueryDict extends AbstractDictMap { + + @Override + public void init() { + put("devType", "类型查询"); + put("keyword", "设备名称"); + put("deptName", "所属单位"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java new file mode 100644 index 0000000..88da6df --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.device.util; + +public class DeviceScopeUtil { +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java new file mode 100644 index 0000000..2e3e478 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.device.controller; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.auth.dto.DeviceLoginForm; +import com.casic.missiles.modular.auth.util.ICacheUtil; +import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; +import com.casic.missiles.modular.device.service.IAlarmRecordService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +@Api(tags = "告警记录") +@RestController +@RequestMapping("/record") +public class AlarmUploadController extends BaseController { + + private final IAlarmRecordService alarmRecordService; + private final IDeviceAuthService deviceAuthService; + public AlarmUploadController(IAlarmRecordService alarmRecordService, IDeviceAuthService deviceAuthService) { + this.alarmRecordService = alarmRecordService; + this.deviceAuthService = deviceAuthService; + } + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } + @BussinessLog(value = "告警记录上报接口") + @ApiOperation(value = "告警记录上报接口") + @PostMapping(value = "/upload") + public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return createAuthError(); + } + alarmRecordService.upload(alarmRecord); + return ResponseDataDTO.success(); + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java new file mode 100644 index 0000000..3f1c189 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class RecognitionStreamDTO { + private Long id; + private String recognitionStreamFlag; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java new file mode 100644 index 0000000..fa5ae4a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java @@ -0,0 +1,167 @@ +package com.casic.missiles.modular.group.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IRiskPointInfoService; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.group.vo.SysRiskGroupPointVO; +import com.casic.missiles.modular.group.vo.SysRiskGroupRelUserVO; +import com.casic.missiles.modular.group.vo.SysRiskUserGroupVO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import com.casic.missiles.modular.system.vo.SysGroupRelUserVO; +import com.casic.missiles.modular.system.vo.SysUserGroupVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.ibatis.annotations.Param; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; + +/** + * 风险点组信息Controller + * + * @author lwh + * @date 2024-07-11 + */ +@Api(tags = "风险点组信息") +@RestController +@RequestMapping("/sys/risk/group") +public class SysUserRiskGroupController extends BaseController { + private final IRiskPointInfoService riskPointInfoService; + private final ISysUserRiskGroupService sysUserGroupService; + private final AbstractPermissionContext permissionContext; + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysUserRiskGroupController(IRiskPointInfoService riskPointInfoService, ISysUserRiskGroupService sysUserGroupService, AbstractPermissionContext permissionContext, ISysRiskGroupRelUserService sysGroupRelUserService) { + this.riskPointInfoService = riskPointInfoService; + this.sysUserGroupService = sysUserGroupService; + this.permissionContext = permissionContext; + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @BussinessLog(value = "风险点分组查询") + @ApiOperation(value = "风险点分组查询", hidden = true) + @GetMapping(value = "/list") + public ResponseDataDTO> list(SysRiskUserGroupVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysUserGroupService.list(query)); + } + + @BussinessLog(value = "分组人员列表查询") + @ApiOperation(value = "分组人员列表查询") + @GetMapping(value = "/groupUserList") + public ResponseDataDTO> groupUserList(SysRiskGroupRelUserVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysGroupRelUserService.list(query)); + } + + @BussinessLog(value = "风险点分组人员查询") + @ApiOperation(value = "风险点分组人员分页查询") + @GetMapping(value = "/groupUserPage") + public ResponseDataDTO> listPage(SysRiskGroupRelUserVO sysGroupRelUserVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysGroupRelUserVO.genQuery(); + List relUsers = sysGroupRelUserService.selectSysGroupRelUserPage(page, query); + page.setRecords(relUsers); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "用户分组批量新增") + @ApiOperation(value = "批量新增接口") + @PostMapping(value = "/batch-add") + public ResponseDataDTO batchAdd(@RequestBody GroupUserRelDTO relDTO) { + sysGroupRelUserService.batchAdd(relDTO); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组人员删除") + @ApiOperation(value = "用户组人员删除接口") + @GetMapping(value = "/user/delete") + public ResponseDataDTO userDel(@Param("用户组人员关联主键") String id) { + sysGroupRelUserService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "风险点分组分页查询") + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(SysRiskUserGroupVO sysUserGroupVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysUserGroupVO.genQuery(); + + List sysUserGroups = sysUserGroupService.selectSysUserGroupPage(page, query); + page.setRecords(sysUserGroups); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "风险点分组新增") + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.save(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组修改") + @ApiOperation(value = "修改接口") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.updateById(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组删除") + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + sysUserGroupService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "批量删除") + @ApiOperation(value = "批量删除", hidden = true) + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + sysUserGroupService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "详情查询") + @ApiOperation(value = "详情查询", hidden = true) + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(sysUserGroupService.getById(id)); + } + + @BussinessLog(value = "用户树") + @ApiOperation(value = "用户树查询") + @GetMapping(value = "/person/tree") + public ResponseDataDTO> personTree() { + return ResponseDataDTO.success(sysUserGroupService.personTree()); + } + + @BussinessLog(value = "风险点树查询") + @ApiOperation(value = "风险点树查询") + @GetMapping(value = "/tree") + public ResponseDataDTO> tree(String riskType) { + return ResponseDataDTO.success(riskPointInfoService.tree(riskType)); + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java new file mode 100644 index 0000000..419eb27 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备所属人员组 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupPointMapper extends BaseMapper { +/** +* 设备所属人员组 分页检索 +*/ +List selectSysGroupDevicePage(@Param("page") Page page, @Param("ew" ) QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java new file mode 100644 index 0000000..eb41227 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 组人员管理 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupRelUserMapper extends BaseMapper { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java new file mode 100644 index 0000000..e8352df --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.system.model.SysUserGroup; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 用户组信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysUserRiskGroupMapper extends BaseMapper { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml new file mode 100644 index 0000000..6fa6a4d --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + id , + group_id as groupId , + create_time as createTime , + target_Id as targetId + + + a.id , + a.group_id + as groupId , + a.create_time + as createTime , + a.target_Id + as targetId + + + + + + and group_id = #{request.groupId} + + + and device_id = #{request.deviceId} + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml new file mode 100644 index 0000000..a627546 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + id , + group_id as groupId , + user_id as userId , + create_time as createTime + + + a.id, + a.group_id + as groupId , + a.user_id + as userId , + a.create_time + as createTime + + + + + + and group_id = #{request.groupId} + + + and user_id = #{request.userId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml new file mode 100644 index 0000000..3245136 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + id, + group_name as groupName , + create_time as createTime , + dept_id as deptId , + create_id as createId + + + a.id,a.group_name as groupName , + a.create_time + as createTime , + a.dept_id + as deptId , + a.create_id + as createId,a.description + + + + + + and group_name like concat('%',#{request.groupName},'%') + + + and dept_id = #{request.deptId} + + + and create_id = #{request.createId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java new file mode 100644 index 0000000..e44328f --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class GroupRiskRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("风险点集合") + private List targetIds; + @ApiModelProperty("用户ID集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java new file mode 100644 index 0000000..f8758bf --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class RiskGroupUserRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("设备集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java new file mode 100644 index 0000000..b386d5b --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java @@ -0,0 +1,53 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 风险点所属组 sys_risk_group_point + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_risk_group_point") +public class SysRiskGroupPoint extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableId("id") + private Long id; + + @ApiModelProperty(value = "用户组ID", dataType = "Long") + @TableField("group_id") + private Long groupId; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty(value = "风险点ID", dataType = "Long") + @TableField("target_id") + private Long targetId; + + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; + + @Override + public String toString() { + return "SysGroupDevice{" + + "id=" + id + + "groupId=" + groupId + + "createTime=" + createTime + + "targetId=" + targetId + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java new file mode 100644 index 0000000..949caa3 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java @@ -0,0 +1,55 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 组人员管理对象 sys_group_rel_user + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_risk_group_rel_user") +public class SysRiskGroupRelUser extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + + @ApiModelProperty(value = "组ID", dataType = "Long") + @TableField("group_id") + private Long groupId; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + @TableField("user_id") + private Long userId; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + @ApiModelProperty(value = "用户姓名", dataType = "String") + @TableField(exist = false) + private String realName; + + @ApiModelProperty(value = "用户名", dataType = "String") + @TableField(exist = false) + private String account; + + @Override + public String toString() { + return "SysGroupRelUser{" + + "id=" + id + + "groupId=" + groupId + + "userId=" + userId + + "createTime=" + createTime + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java new file mode 100644 index 0000000..1b73dc0 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java @@ -0,0 +1,97 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 危险点分组组信息对象 sys_user_risk_group + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_user_risk_group") +public class SysUserRiskGroup extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableId("id") + private Long id; + + @ApiModelProperty(value = "组名称", dataType = "String", required = true) + @TableField("group_name") + private String groupName; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty(value = "所属组织(保留字段)", dataType = "Long") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty(value = "描述信息", dataType = "String") + @TableField("description") + private String description; + + @ApiModelProperty(value = "密级字典", dataType = "String") + @TableField("safe") + private int safe; + + @ApiModelProperty(value = "创建者ID", dataType = "Long") + @TableField("create_id") + private Long createId; + + + @ApiModelProperty(value = "类型(1 危险点 2 重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "Long") + @TableField("group_type") + private String groupType; + @TableField(exist = false) + private String groupTypeName; + /** + * 风险点集合 + */ + @ApiModelProperty(value = "风险点集合(逗号拼接)", dataType = "String") + @TableField(exist = false) + private String pointIds; + + @ApiModelProperty(value = "数量", dataType = "Long") + @TableField(exist = false) + private Integer targetNum; + /** + * 用户集合 + */ + @ApiModelProperty(value = "用户集合(逗号拼接)", dataType = "String") + @TableField(exist = false) + private String personIds; + + @ApiModelProperty(value = "用户名称", dataType = "String") + @TableField(exist = false) + private String realName; + + @ApiModelProperty(value = "用户名", dataType = "String") + @TableField(exist = false) + private String account; + + @ApiModelProperty(value = "密级字典名称", dataType = "String") + @TableField(exist = false) + private String safeName; + + @Override + public String toString() { + return "SysUserGroup{" + + "id=" + id + + "groupName=" + groupName + + "createTime=" + createTime + + "deptId=" + deptId + + "createId=" + createId + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java new file mode 100644 index 0000000..4657ce4 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.device.dto.GroupRelDTO; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; + +import java.util.List; + + +/** + *

+ * 设备所属人员组 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysRiskGroupPointService extends IService { + /** + * 设备所属人员组 分页检索 + */ + List selectSysGroupDevicePage(Page page, QueryWrapper query); + + /** + * 设备组批量新增 + * + * @param relDTO + */ + void batchAdd(GroupRiskRelDTO relDTO); + + + /** + * 增量更新 + * @param groupId + * @param deviceIds + */ + void batchIncremental(Long groupId, List deviceIds); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java new file mode 100644 index 0000000..591eef2 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; + +import java.util.List; + + +/** + *

+ * 组人员管理 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysRiskGroupRelUserService extends IService { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(Page page, QueryWrapper query); + + void batchAdd(GroupUserRelDTO relDTO); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java new file mode 100644 index 0000000..1e0889c --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; + +import java.util.List; + + +/** + *

+ * 用户组信息 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysUserRiskGroupService extends IService { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(Page page, QueryWrapper query); + + List personTree(); + + /** + * 创建用户组 + * + * @param sysUserGroup 用户组信息 + * @param userIds 用户信息 + */ + void createSysUserGroup(SysUserRiskGroup sysUserGroup, List userIds); +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java new file mode 100644 index 0000000..1ca5eb1 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java @@ -0,0 +1,63 @@ +package com.casic.missiles.modular.device.enums; + +/** + * wvp设备类型转换 + * + * @author lwh + * @Date 2017年1月10日 下午9:54:13 + */ +public enum AvDeptEnum { + + DEPT0("0066", "801",0L), + DEPT1("0059", "699厂",1L), + DEPT2("0055", "283厂",1L), + DEPT3("0022", "201所",1L), + DEPT4("0027", "206所",1L), + DEPT5("0013", "23所",1L); + + String code; + String message; + Long deptId; + AvDeptEnum(String code, String message, Long deptId) { + this.code = code; + this.message = message; + this.deptId = deptId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public static AvDeptEnum valueOfCode(String value) { + if (value == null) { + return null; + } else { + for (AvDeptEnum ms : AvDeptEnum.values()) { + if (ms.getCode().equals(value)) { + return ms; + } + } + return null; + } + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java new file mode 100644 index 0000000..573d0e2 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.task; + +import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; + +public class Test { + public static void main(String[] args) { + System.out.println(AvStatusTypeEnum.valueOfType(new Integer(1)).getMessage()); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java new file mode 100644 index 0000000..7c06c67 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java @@ -0,0 +1,77 @@ +package com.casic.missiles.modular.device.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpSession; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class RiskSyncController extends BaseController { + @Resource + private IClientAuthService clientAuthService; + @Resource + private AbstractDeptService deptService; + @Resource + private AbstractUserService userService; + @PostMapping("/client/login") + @ResponseBody + public ResponseData login(@RequestBody RiskLoginForm deviceLoginForm, HttpSession session) { + return clientAuthService.login(deviceLoginForm, session); + } + + /** + * 全量组织信息读取 + * + * @return + */ + @PostMapping("/dept/list") + @ResponseBody + public ResponseDataDTO> dept() { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = deptService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量用户信息读取 + * + * @return + */ + @PostMapping("/user/list") + @ResponseBody + public ResponseDataDTO> user() { + //todo 此处租户拦截需移除 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量设备信息读取 + * + * @return + */ + @PostMapping("/device/list") + @ResponseBody + public ResponseDataDTO> device() { + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java new file mode 100644 index 0000000..5e5b890 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class UserSyncController extends BaseController { + + @Resource + private IBusDeviceInfoService busDeviceInfoService; + + /** + * 登录用户授权设备权限查看 + * @return + */ + @GetMapping("/device/permissions") + @ResponseBody + public ResponseDataDTO> devicePermissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } + + /** + * 登录用户风险点授权查询 + * @return + */ + @GetMapping("/permissions") + @ResponseBody + public ResponseDataDTO> permissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java new file mode 100644 index 0000000..07b8df8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +/** + * 设备登录接口 + */ +@Data +public class RiskLoginForm { + /** + * 设备编码 + */ + private String clientId; + + /** + * 时间戳 + */ + private Long time; + + /** + * 加密后数据 加密格式sn+时间戳 时效性为6小时 + */ + private String secret; + + /** + * 设备登录注册IP + */ + private String ip; + + /** + * 设备登录注册port + */ + private String port; +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java new file mode 100644 index 0000000..40fdb4b --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.device.service; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; + +import javax.servlet.http.HttpSession; + +public interface IClientAuthService { + /** + * @param deviceLoginForm + * @param session + * @return + */ + ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session); +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java new file mode 100644 index 0000000..576e857 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.device.service.impl; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import cn.hutool.jwt.JWT; +import cn.hutool.jwt.JWTUtil; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.util.IRiskCacheUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpSession; +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Service +public class ClientAuthServiceImpl implements IClientAuthService { + @Value("${casic.client.privateKey:MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALKcwHHOg0F6Zkq7GOVnOnTgvH9vSPXFFTOcEqOVBIBPBz7UNrEGkp1PhZ+oC4WVJAsDuot2e1fDZy9QS9HF92MmnYp9kuQRhGZjHctPnVZ0Kai5BES0ytHqPeauLyNXxOOS0YKYEUwpft4Z5Azw7bj3JWNvLrnTZvNld6FDvTslAgMBAAECgYAqN/kZLYpC+O6i7XSmDO95XwHPUXu6dDpdt5+EQR4OQh/hTwIaeAZB3uEj6vHGQomBfQEkI/5lsU97lIxHanbd+Hro7JyIhsGD5LR5XnZHVKzFiZW62OIU6FI9dlQNN8miiblnmyDwiMA3okaHl0O7qQjZ+IvY2csgmJc7AXpPpQJBAOhrhcfWFcgffj2O6HYNlBLFfbboc/ZzrEADDXKnxRSHlo5o8W+6gylG/L2NGtbag5S68B9VYzdkSQ1++5C+Ws8CQQDEu7h311PLEiKgqzGHpjzadQETmt/jMadaKQmT0TZwNVi6X8lR17U5hF8dAqZzUzr9kUC0HRIZhg4Uv1v3W3fLAkB4YPhxgJjXhjhEefg87Nt8vX1Xdx5Yz6CvpuUYNX0GHRQFvqUOUXQNtQ7CvorgLV1pc0lbcUZqMi8EJnj1hyJRAkEAjHXWm8GiMt+M15fCsi3vTq2xChVOekBuUsHv85iwvGZqJg7ThtpyqlEnM2g7/STUfkvhnXcQACclEI0blTy6BwJAPmFyhU+d0ejVpbc53TdrL2HqYYUHi/tTy/dtUa7lbypzdwwJ2M1Tv5PE8sQxr9tgMbebfxVb/RFKdiCCtzC4ng==}") + private String privateKey; + + @Override + public ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session) { + //固定秘钥解析 + try { + String str = RSAUtils.decrypt(deviceLoginForm.getSecret(), privateKey); + Long time = Long.valueOf(StrUtil.split(str, "_").get(1)); + //边缘盒子时差与服务时差不可超过24小时 + if (time == null || System.currentTimeMillis() - time > 3600 * 24 * 1000) { + return ResponseData.error("请求时间超时"); + } + deviceLoginForm.setTime(time); + } catch (Exception e) { + e.printStackTrace(); + return ResponseData.error("设备解析异常!"); + } + + try { + String token = this.createJwtToken(deviceLoginForm); + IRiskCacheUtil.put(token, token); + return ResponseData.success(token); + } catch (Exception e) { + log.error("设备登录异常:{}", e.getMessage()); + return ResponseData.error("登录异常,请联系管理员"); + } +} + /** + * token创建 + * + * @param loginForm 登录信息 + * @param device 设备信息 + * @return + * @throws Exception + */ + public String createJwtToken(RiskLoginForm loginForm) throws Exception { + Map payload = new HashMap<>(); + payload.put("clientId", loginForm.getClientId()); // 设备编号 + payload.put("time", loginForm.getTime()); // 请求时间 + + //RSA 解密 + String str = RSAUtils.decrypt(loginForm.getSecret(), privateKey); + String key = loginForm.getClientId()+"_" + loginForm.getTime() ; + if (!key.equals(str)) { + //秘钥验证失败 + throw new ServiceException(500,"秘钥验证失败"); + } + +// long exp = new Date().getTime() + 2 * 3600000; // 2小时后的时间戳 +// payload.put("exp", exp); + + // 创建JWT + String jwt = JWTUtil.createToken(payload, "token-203-202405".getBytes()); + + return jwt; + } + + /** + * token解析 + * + * @param jwtStr token + * @return + * @throws Exception + */ + public static RiskLoginForm parseToken(String jwtStr){ + JWT jwtObj = new JWTUtil().parseToken(jwtStr); + RiskLoginForm deviceLoginForm = new RiskLoginForm(); + deviceLoginForm.setClientId(Convert.toStr(jwtObj.getPayload("clientId"))); + return deviceLoginForm; + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java new file mode 100644 index 0000000..0e91ac8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.util; +import cn.hutool.cache.Cache; +import cn.hutool.cache.CacheUtil; +/** + * token有效 + */ +public class IRiskCacheUtil { + /** + * 1小时内不活跃 会踢掉 + */ + private static Cache fifoCache = CacheUtil.newFIFOCache(1000, 1000 * 60 * 60); + + public static void put(String key, String value) { + fifoCache.put(key, value); + } + + public static String get(String key) { + return fifoCache.get(key); + } + + public static void remove(String key) { + fifoCache.remove(key); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java new file mode 100644 index 0000000..805c32a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceGroupDict extends AbstractDictMap { + + @Override + public void init() { + //检索条件 + put("groupName", "分组名称"); + put("startTime", "起始时间"); + put("endTime", "结束时间"); + //新增修改属性 + put("cameraIds", "设备国标号"); + put("personIds", "人员主键集合"); + put("description","备注"); + put("id","主键"); + put("ids","主键集合"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java new file mode 100644 index 0000000..895fbd9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceQueryDict extends AbstractDictMap { + + @Override + public void init() { + put("devType", "类型查询"); + put("keyword", "设备名称"); + put("deptName", "所属单位"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java new file mode 100644 index 0000000..88da6df --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.device.util; + +public class DeviceScopeUtil { +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java new file mode 100644 index 0000000..2e3e478 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.device.controller; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.auth.dto.DeviceLoginForm; +import com.casic.missiles.modular.auth.util.ICacheUtil; +import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; +import com.casic.missiles.modular.device.service.IAlarmRecordService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +@Api(tags = "告警记录") +@RestController +@RequestMapping("/record") +public class AlarmUploadController extends BaseController { + + private final IAlarmRecordService alarmRecordService; + private final IDeviceAuthService deviceAuthService; + public AlarmUploadController(IAlarmRecordService alarmRecordService, IDeviceAuthService deviceAuthService) { + this.alarmRecordService = alarmRecordService; + this.deviceAuthService = deviceAuthService; + } + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } + @BussinessLog(value = "告警记录上报接口") + @ApiOperation(value = "告警记录上报接口") + @PostMapping(value = "/upload") + public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return createAuthError(); + } + alarmRecordService.upload(alarmRecord); + return ResponseDataDTO.success(); + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java new file mode 100644 index 0000000..3f1c189 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class RecognitionStreamDTO { + private Long id; + private String recognitionStreamFlag; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java new file mode 100644 index 0000000..fa5ae4a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java @@ -0,0 +1,167 @@ +package com.casic.missiles.modular.group.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IRiskPointInfoService; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.group.vo.SysRiskGroupPointVO; +import com.casic.missiles.modular.group.vo.SysRiskGroupRelUserVO; +import com.casic.missiles.modular.group.vo.SysRiskUserGroupVO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import com.casic.missiles.modular.system.vo.SysGroupRelUserVO; +import com.casic.missiles.modular.system.vo.SysUserGroupVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.ibatis.annotations.Param; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; + +/** + * 风险点组信息Controller + * + * @author lwh + * @date 2024-07-11 + */ +@Api(tags = "风险点组信息") +@RestController +@RequestMapping("/sys/risk/group") +public class SysUserRiskGroupController extends BaseController { + private final IRiskPointInfoService riskPointInfoService; + private final ISysUserRiskGroupService sysUserGroupService; + private final AbstractPermissionContext permissionContext; + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysUserRiskGroupController(IRiskPointInfoService riskPointInfoService, ISysUserRiskGroupService sysUserGroupService, AbstractPermissionContext permissionContext, ISysRiskGroupRelUserService sysGroupRelUserService) { + this.riskPointInfoService = riskPointInfoService; + this.sysUserGroupService = sysUserGroupService; + this.permissionContext = permissionContext; + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @BussinessLog(value = "风险点分组查询") + @ApiOperation(value = "风险点分组查询", hidden = true) + @GetMapping(value = "/list") + public ResponseDataDTO> list(SysRiskUserGroupVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysUserGroupService.list(query)); + } + + @BussinessLog(value = "分组人员列表查询") + @ApiOperation(value = "分组人员列表查询") + @GetMapping(value = "/groupUserList") + public ResponseDataDTO> groupUserList(SysRiskGroupRelUserVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysGroupRelUserService.list(query)); + } + + @BussinessLog(value = "风险点分组人员查询") + @ApiOperation(value = "风险点分组人员分页查询") + @GetMapping(value = "/groupUserPage") + public ResponseDataDTO> listPage(SysRiskGroupRelUserVO sysGroupRelUserVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysGroupRelUserVO.genQuery(); + List relUsers = sysGroupRelUserService.selectSysGroupRelUserPage(page, query); + page.setRecords(relUsers); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "用户分组批量新增") + @ApiOperation(value = "批量新增接口") + @PostMapping(value = "/batch-add") + public ResponseDataDTO batchAdd(@RequestBody GroupUserRelDTO relDTO) { + sysGroupRelUserService.batchAdd(relDTO); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组人员删除") + @ApiOperation(value = "用户组人员删除接口") + @GetMapping(value = "/user/delete") + public ResponseDataDTO userDel(@Param("用户组人员关联主键") String id) { + sysGroupRelUserService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "风险点分组分页查询") + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(SysRiskUserGroupVO sysUserGroupVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysUserGroupVO.genQuery(); + + List sysUserGroups = sysUserGroupService.selectSysUserGroupPage(page, query); + page.setRecords(sysUserGroups); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "风险点分组新增") + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.save(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组修改") + @ApiOperation(value = "修改接口") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.updateById(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组删除") + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + sysUserGroupService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "批量删除") + @ApiOperation(value = "批量删除", hidden = true) + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + sysUserGroupService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "详情查询") + @ApiOperation(value = "详情查询", hidden = true) + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(sysUserGroupService.getById(id)); + } + + @BussinessLog(value = "用户树") + @ApiOperation(value = "用户树查询") + @GetMapping(value = "/person/tree") + public ResponseDataDTO> personTree() { + return ResponseDataDTO.success(sysUserGroupService.personTree()); + } + + @BussinessLog(value = "风险点树查询") + @ApiOperation(value = "风险点树查询") + @GetMapping(value = "/tree") + public ResponseDataDTO> tree(String riskType) { + return ResponseDataDTO.success(riskPointInfoService.tree(riskType)); + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java new file mode 100644 index 0000000..419eb27 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备所属人员组 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupPointMapper extends BaseMapper { +/** +* 设备所属人员组 分页检索 +*/ +List selectSysGroupDevicePage(@Param("page") Page page, @Param("ew" ) QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java new file mode 100644 index 0000000..eb41227 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 组人员管理 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupRelUserMapper extends BaseMapper { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java new file mode 100644 index 0000000..e8352df --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.system.model.SysUserGroup; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 用户组信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysUserRiskGroupMapper extends BaseMapper { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml new file mode 100644 index 0000000..6fa6a4d --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + id , + group_id as groupId , + create_time as createTime , + target_Id as targetId + + + a.id , + a.group_id + as groupId , + a.create_time + as createTime , + a.target_Id + as targetId + + + + + + and group_id = #{request.groupId} + + + and device_id = #{request.deviceId} + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml new file mode 100644 index 0000000..a627546 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + id , + group_id as groupId , + user_id as userId , + create_time as createTime + + + a.id, + a.group_id + as groupId , + a.user_id + as userId , + a.create_time + as createTime + + + + + + and group_id = #{request.groupId} + + + and user_id = #{request.userId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml new file mode 100644 index 0000000..3245136 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + id, + group_name as groupName , + create_time as createTime , + dept_id as deptId , + create_id as createId + + + a.id,a.group_name as groupName , + a.create_time + as createTime , + a.dept_id + as deptId , + a.create_id + as createId,a.description + + + + + + and group_name like concat('%',#{request.groupName},'%') + + + and dept_id = #{request.deptId} + + + and create_id = #{request.createId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java new file mode 100644 index 0000000..e44328f --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class GroupRiskRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("风险点集合") + private List targetIds; + @ApiModelProperty("用户ID集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java new file mode 100644 index 0000000..f8758bf --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class RiskGroupUserRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("设备集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java new file mode 100644 index 0000000..b386d5b --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java @@ -0,0 +1,53 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 风险点所属组 sys_risk_group_point + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_risk_group_point") +public class SysRiskGroupPoint extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableId("id") + private Long id; + + @ApiModelProperty(value = "用户组ID", dataType = "Long") + @TableField("group_id") + private Long groupId; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty(value = "风险点ID", dataType = "Long") + @TableField("target_id") + private Long targetId; + + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; + + @Override + public String toString() { + return "SysGroupDevice{" + + "id=" + id + + "groupId=" + groupId + + "createTime=" + createTime + + "targetId=" + targetId + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java new file mode 100644 index 0000000..949caa3 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java @@ -0,0 +1,55 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 组人员管理对象 sys_group_rel_user + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_risk_group_rel_user") +public class SysRiskGroupRelUser extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + + @ApiModelProperty(value = "组ID", dataType = "Long") + @TableField("group_id") + private Long groupId; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + @TableField("user_id") + private Long userId; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + @ApiModelProperty(value = "用户姓名", dataType = "String") + @TableField(exist = false) + private String realName; + + @ApiModelProperty(value = "用户名", dataType = "String") + @TableField(exist = false) + private String account; + + @Override + public String toString() { + return "SysGroupRelUser{" + + "id=" + id + + "groupId=" + groupId + + "userId=" + userId + + "createTime=" + createTime + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java new file mode 100644 index 0000000..1b73dc0 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java @@ -0,0 +1,97 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 危险点分组组信息对象 sys_user_risk_group + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_user_risk_group") +public class SysUserRiskGroup extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableId("id") + private Long id; + + @ApiModelProperty(value = "组名称", dataType = "String", required = true) + @TableField("group_name") + private String groupName; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty(value = "所属组织(保留字段)", dataType = "Long") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty(value = "描述信息", dataType = "String") + @TableField("description") + private String description; + + @ApiModelProperty(value = "密级字典", dataType = "String") + @TableField("safe") + private int safe; + + @ApiModelProperty(value = "创建者ID", dataType = "Long") + @TableField("create_id") + private Long createId; + + + @ApiModelProperty(value = "类型(1 危险点 2 重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "Long") + @TableField("group_type") + private String groupType; + @TableField(exist = false) + private String groupTypeName; + /** + * 风险点集合 + */ + @ApiModelProperty(value = "风险点集合(逗号拼接)", dataType = "String") + @TableField(exist = false) + private String pointIds; + + @ApiModelProperty(value = "数量", dataType = "Long") + @TableField(exist = false) + private Integer targetNum; + /** + * 用户集合 + */ + @ApiModelProperty(value = "用户集合(逗号拼接)", dataType = "String") + @TableField(exist = false) + private String personIds; + + @ApiModelProperty(value = "用户名称", dataType = "String") + @TableField(exist = false) + private String realName; + + @ApiModelProperty(value = "用户名", dataType = "String") + @TableField(exist = false) + private String account; + + @ApiModelProperty(value = "密级字典名称", dataType = "String") + @TableField(exist = false) + private String safeName; + + @Override + public String toString() { + return "SysUserGroup{" + + "id=" + id + + "groupName=" + groupName + + "createTime=" + createTime + + "deptId=" + deptId + + "createId=" + createId + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java new file mode 100644 index 0000000..4657ce4 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.device.dto.GroupRelDTO; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; + +import java.util.List; + + +/** + *

+ * 设备所属人员组 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysRiskGroupPointService extends IService { + /** + * 设备所属人员组 分页检索 + */ + List selectSysGroupDevicePage(Page page, QueryWrapper query); + + /** + * 设备组批量新增 + * + * @param relDTO + */ + void batchAdd(GroupRiskRelDTO relDTO); + + + /** + * 增量更新 + * @param groupId + * @param deviceIds + */ + void batchIncremental(Long groupId, List deviceIds); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java new file mode 100644 index 0000000..591eef2 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; + +import java.util.List; + + +/** + *

+ * 组人员管理 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysRiskGroupRelUserService extends IService { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(Page page, QueryWrapper query); + + void batchAdd(GroupUserRelDTO relDTO); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java new file mode 100644 index 0000000..1e0889c --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; + +import java.util.List; + + +/** + *

+ * 用户组信息 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysUserRiskGroupService extends IService { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(Page page, QueryWrapper query); + + List personTree(); + + /** + * 创建用户组 + * + * @param sysUserGroup 用户组信息 + * @param userIds 用户信息 + */ + void createSysUserGroup(SysUserRiskGroup sysUserGroup, List userIds); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java new file mode 100644 index 0000000..6839887 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java @@ -0,0 +1,118 @@ +package com.casic.missiles.modular.group.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +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.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.group.dao.SysRiskGroupPointMapper; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import com.casic.missiles.modular.group.service.ISysRiskGroupPointService; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + + +/** + *

+ * 设备所属人员组 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysRiskGroupPointServiceImpl extends ServiceImpl implements ISysRiskGroupPointService { + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysRiskGroupPointServiceImpl(ISysRiskGroupRelUserService sysGroupRelUserService) { + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @Override + public List selectSysGroupDevicePage(Page page, QueryWrapper query) { + return this.baseMapper.selectSysGroupDevicePage(page, query); + } + + @Transactional + @Override + public void batchAdd(GroupRiskRelDTO relDTO) { + + if (CollectionUtil.isEmpty(relDTO.getTargetIds())) { + ServiceException serviceException = new ServiceException(500, "添加不能为空!"); + throw serviceException; + } + + //删除 + QueryWrapper query = new QueryWrapper<>(); + query.eq("group_id", relDTO.getGroupId()); + this.remove(query); + + //保存分组与危险点对应关系 + List groupDevices = new ArrayList<>(); + for (Long deviceId : relDTO.getTargetIds()) { + SysRiskGroupPoint sysGroupDevice = new SysRiskGroupPoint(); + sysGroupDevice.setTargetId(deviceId); + sysGroupDevice.setGroupId(relDTO.getGroupId()); + sysGroupDevice.setCreateTime(new Date()); + groupDevices.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(groupDevices); + + //批量保存风险点与用户关系 + GroupUserRelDTO groupUserRelDTO = new GroupUserRelDTO(); + groupUserRelDTO.setGroupId(relDTO.getGroupId()); + groupUserRelDTO.setUserIds(relDTO.getUserIds()); + sysGroupRelUserService.batchAdd(groupUserRelDTO); + + } + + @Override + public void batchIncremental(Long groupId, List deviceIds) { + List groupDevices = this.list(new LambdaQueryWrapper().eq(SysRiskGroupPoint::getGroupId, groupId)); + if (CollectionUtil.isEmpty(groupDevices)) { + saveDevices(groupId, deviceIds); + } else { + List oldDevices = groupDevices.stream().map(SysRiskGroupPoint::getTargetId).collect(Collectors.toList()); + List delIds = CollectionUtil.subtractToList(oldDevices, deviceIds); + List saveDevices = CollectionUtil.subtractToList(deviceIds, oldDevices); + + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.eq(SysRiskGroupPoint::getGroupId, groupId); + delQuery.in(SysRiskGroupPoint::getTargetId, delIds); + if (CollectionUtil.isNotEmpty(delIds)) { + this.remove(delQuery); + } + saveDevices(groupId, saveDevices); + } + } + + private void saveDevices(Long groupId, List saveDevices) { + List saves = new ArrayList<>(); + for (Long deviceId : saveDevices) { + SysRiskGroupPoint sysGroupDevice = new SysRiskGroupPoint(); + sysGroupDevice.setTargetId(deviceId); + sysGroupDevice.setGroupId(groupId); + sysGroupDevice.setCreateTime(new Date()); + saves.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(saves); + } + + private void saveOrUpdateBatchList(List groupDevices) { + for (SysRiskGroupPoint groupDevice : groupDevices) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysRiskGroupPoint::getGroupId, groupDevice.getGroupId()); + query.eq(SysRiskGroupPoint::getTargetId, groupDevice.getTargetId()); + this.saveOrUpdate(groupDevice, query); + } + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java new file mode 100644 index 0000000..1ca5eb1 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java @@ -0,0 +1,63 @@ +package com.casic.missiles.modular.device.enums; + +/** + * wvp设备类型转换 + * + * @author lwh + * @Date 2017年1月10日 下午9:54:13 + */ +public enum AvDeptEnum { + + DEPT0("0066", "801",0L), + DEPT1("0059", "699厂",1L), + DEPT2("0055", "283厂",1L), + DEPT3("0022", "201所",1L), + DEPT4("0027", "206所",1L), + DEPT5("0013", "23所",1L); + + String code; + String message; + Long deptId; + AvDeptEnum(String code, String message, Long deptId) { + this.code = code; + this.message = message; + this.deptId = deptId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public static AvDeptEnum valueOfCode(String value) { + if (value == null) { + return null; + } else { + for (AvDeptEnum ms : AvDeptEnum.values()) { + if (ms.getCode().equals(value)) { + return ms; + } + } + return null; + } + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java new file mode 100644 index 0000000..573d0e2 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.task; + +import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; + +public class Test { + public static void main(String[] args) { + System.out.println(AvStatusTypeEnum.valueOfType(new Integer(1)).getMessage()); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java new file mode 100644 index 0000000..7c06c67 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java @@ -0,0 +1,77 @@ +package com.casic.missiles.modular.device.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpSession; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class RiskSyncController extends BaseController { + @Resource + private IClientAuthService clientAuthService; + @Resource + private AbstractDeptService deptService; + @Resource + private AbstractUserService userService; + @PostMapping("/client/login") + @ResponseBody + public ResponseData login(@RequestBody RiskLoginForm deviceLoginForm, HttpSession session) { + return clientAuthService.login(deviceLoginForm, session); + } + + /** + * 全量组织信息读取 + * + * @return + */ + @PostMapping("/dept/list") + @ResponseBody + public ResponseDataDTO> dept() { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = deptService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量用户信息读取 + * + * @return + */ + @PostMapping("/user/list") + @ResponseBody + public ResponseDataDTO> user() { + //todo 此处租户拦截需移除 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量设备信息读取 + * + * @return + */ + @PostMapping("/device/list") + @ResponseBody + public ResponseDataDTO> device() { + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java new file mode 100644 index 0000000..5e5b890 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class UserSyncController extends BaseController { + + @Resource + private IBusDeviceInfoService busDeviceInfoService; + + /** + * 登录用户授权设备权限查看 + * @return + */ + @GetMapping("/device/permissions") + @ResponseBody + public ResponseDataDTO> devicePermissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } + + /** + * 登录用户风险点授权查询 + * @return + */ + @GetMapping("/permissions") + @ResponseBody + public ResponseDataDTO> permissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java new file mode 100644 index 0000000..07b8df8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +/** + * 设备登录接口 + */ +@Data +public class RiskLoginForm { + /** + * 设备编码 + */ + private String clientId; + + /** + * 时间戳 + */ + private Long time; + + /** + * 加密后数据 加密格式sn+时间戳 时效性为6小时 + */ + private String secret; + + /** + * 设备登录注册IP + */ + private String ip; + + /** + * 设备登录注册port + */ + private String port; +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java new file mode 100644 index 0000000..40fdb4b --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.device.service; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; + +import javax.servlet.http.HttpSession; + +public interface IClientAuthService { + /** + * @param deviceLoginForm + * @param session + * @return + */ + ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session); +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java new file mode 100644 index 0000000..576e857 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.device.service.impl; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import cn.hutool.jwt.JWT; +import cn.hutool.jwt.JWTUtil; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.util.IRiskCacheUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpSession; +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Service +public class ClientAuthServiceImpl implements IClientAuthService { + @Value("${casic.client.privateKey:MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALKcwHHOg0F6Zkq7GOVnOnTgvH9vSPXFFTOcEqOVBIBPBz7UNrEGkp1PhZ+oC4WVJAsDuot2e1fDZy9QS9HF92MmnYp9kuQRhGZjHctPnVZ0Kai5BES0ytHqPeauLyNXxOOS0YKYEUwpft4Z5Azw7bj3JWNvLrnTZvNld6FDvTslAgMBAAECgYAqN/kZLYpC+O6i7XSmDO95XwHPUXu6dDpdt5+EQR4OQh/hTwIaeAZB3uEj6vHGQomBfQEkI/5lsU97lIxHanbd+Hro7JyIhsGD5LR5XnZHVKzFiZW62OIU6FI9dlQNN8miiblnmyDwiMA3okaHl0O7qQjZ+IvY2csgmJc7AXpPpQJBAOhrhcfWFcgffj2O6HYNlBLFfbboc/ZzrEADDXKnxRSHlo5o8W+6gylG/L2NGtbag5S68B9VYzdkSQ1++5C+Ws8CQQDEu7h311PLEiKgqzGHpjzadQETmt/jMadaKQmT0TZwNVi6X8lR17U5hF8dAqZzUzr9kUC0HRIZhg4Uv1v3W3fLAkB4YPhxgJjXhjhEefg87Nt8vX1Xdx5Yz6CvpuUYNX0GHRQFvqUOUXQNtQ7CvorgLV1pc0lbcUZqMi8EJnj1hyJRAkEAjHXWm8GiMt+M15fCsi3vTq2xChVOekBuUsHv85iwvGZqJg7ThtpyqlEnM2g7/STUfkvhnXcQACclEI0blTy6BwJAPmFyhU+d0ejVpbc53TdrL2HqYYUHi/tTy/dtUa7lbypzdwwJ2M1Tv5PE8sQxr9tgMbebfxVb/RFKdiCCtzC4ng==}") + private String privateKey; + + @Override + public ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session) { + //固定秘钥解析 + try { + String str = RSAUtils.decrypt(deviceLoginForm.getSecret(), privateKey); + Long time = Long.valueOf(StrUtil.split(str, "_").get(1)); + //边缘盒子时差与服务时差不可超过24小时 + if (time == null || System.currentTimeMillis() - time > 3600 * 24 * 1000) { + return ResponseData.error("请求时间超时"); + } + deviceLoginForm.setTime(time); + } catch (Exception e) { + e.printStackTrace(); + return ResponseData.error("设备解析异常!"); + } + + try { + String token = this.createJwtToken(deviceLoginForm); + IRiskCacheUtil.put(token, token); + return ResponseData.success(token); + } catch (Exception e) { + log.error("设备登录异常:{}", e.getMessage()); + return ResponseData.error("登录异常,请联系管理员"); + } +} + /** + * token创建 + * + * @param loginForm 登录信息 + * @param device 设备信息 + * @return + * @throws Exception + */ + public String createJwtToken(RiskLoginForm loginForm) throws Exception { + Map payload = new HashMap<>(); + payload.put("clientId", loginForm.getClientId()); // 设备编号 + payload.put("time", loginForm.getTime()); // 请求时间 + + //RSA 解密 + String str = RSAUtils.decrypt(loginForm.getSecret(), privateKey); + String key = loginForm.getClientId()+"_" + loginForm.getTime() ; + if (!key.equals(str)) { + //秘钥验证失败 + throw new ServiceException(500,"秘钥验证失败"); + } + +// long exp = new Date().getTime() + 2 * 3600000; // 2小时后的时间戳 +// payload.put("exp", exp); + + // 创建JWT + String jwt = JWTUtil.createToken(payload, "token-203-202405".getBytes()); + + return jwt; + } + + /** + * token解析 + * + * @param jwtStr token + * @return + * @throws Exception + */ + public static RiskLoginForm parseToken(String jwtStr){ + JWT jwtObj = new JWTUtil().parseToken(jwtStr); + RiskLoginForm deviceLoginForm = new RiskLoginForm(); + deviceLoginForm.setClientId(Convert.toStr(jwtObj.getPayload("clientId"))); + return deviceLoginForm; + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java new file mode 100644 index 0000000..0e91ac8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.util; +import cn.hutool.cache.Cache; +import cn.hutool.cache.CacheUtil; +/** + * token有效 + */ +public class IRiskCacheUtil { + /** + * 1小时内不活跃 会踢掉 + */ + private static Cache fifoCache = CacheUtil.newFIFOCache(1000, 1000 * 60 * 60); + + public static void put(String key, String value) { + fifoCache.put(key, value); + } + + public static String get(String key) { + return fifoCache.get(key); + } + + public static void remove(String key) { + fifoCache.remove(key); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java new file mode 100644 index 0000000..805c32a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceGroupDict extends AbstractDictMap { + + @Override + public void init() { + //检索条件 + put("groupName", "分组名称"); + put("startTime", "起始时间"); + put("endTime", "结束时间"); + //新增修改属性 + put("cameraIds", "设备国标号"); + put("personIds", "人员主键集合"); + put("description","备注"); + put("id","主键"); + put("ids","主键集合"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java new file mode 100644 index 0000000..895fbd9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceQueryDict extends AbstractDictMap { + + @Override + public void init() { + put("devType", "类型查询"); + put("keyword", "设备名称"); + put("deptName", "所属单位"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java new file mode 100644 index 0000000..88da6df --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.device.util; + +public class DeviceScopeUtil { +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java new file mode 100644 index 0000000..2e3e478 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.device.controller; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.auth.dto.DeviceLoginForm; +import com.casic.missiles.modular.auth.util.ICacheUtil; +import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; +import com.casic.missiles.modular.device.service.IAlarmRecordService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +@Api(tags = "告警记录") +@RestController +@RequestMapping("/record") +public class AlarmUploadController extends BaseController { + + private final IAlarmRecordService alarmRecordService; + private final IDeviceAuthService deviceAuthService; + public AlarmUploadController(IAlarmRecordService alarmRecordService, IDeviceAuthService deviceAuthService) { + this.alarmRecordService = alarmRecordService; + this.deviceAuthService = deviceAuthService; + } + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } + @BussinessLog(value = "告警记录上报接口") + @ApiOperation(value = "告警记录上报接口") + @PostMapping(value = "/upload") + public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return createAuthError(); + } + alarmRecordService.upload(alarmRecord); + return ResponseDataDTO.success(); + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java new file mode 100644 index 0000000..3f1c189 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class RecognitionStreamDTO { + private Long id; + private String recognitionStreamFlag; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java new file mode 100644 index 0000000..fa5ae4a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java @@ -0,0 +1,167 @@ +package com.casic.missiles.modular.group.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IRiskPointInfoService; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.group.vo.SysRiskGroupPointVO; +import com.casic.missiles.modular.group.vo.SysRiskGroupRelUserVO; +import com.casic.missiles.modular.group.vo.SysRiskUserGroupVO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import com.casic.missiles.modular.system.vo.SysGroupRelUserVO; +import com.casic.missiles.modular.system.vo.SysUserGroupVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.ibatis.annotations.Param; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; + +/** + * 风险点组信息Controller + * + * @author lwh + * @date 2024-07-11 + */ +@Api(tags = "风险点组信息") +@RestController +@RequestMapping("/sys/risk/group") +public class SysUserRiskGroupController extends BaseController { + private final IRiskPointInfoService riskPointInfoService; + private final ISysUserRiskGroupService sysUserGroupService; + private final AbstractPermissionContext permissionContext; + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysUserRiskGroupController(IRiskPointInfoService riskPointInfoService, ISysUserRiskGroupService sysUserGroupService, AbstractPermissionContext permissionContext, ISysRiskGroupRelUserService sysGroupRelUserService) { + this.riskPointInfoService = riskPointInfoService; + this.sysUserGroupService = sysUserGroupService; + this.permissionContext = permissionContext; + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @BussinessLog(value = "风险点分组查询") + @ApiOperation(value = "风险点分组查询", hidden = true) + @GetMapping(value = "/list") + public ResponseDataDTO> list(SysRiskUserGroupVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysUserGroupService.list(query)); + } + + @BussinessLog(value = "分组人员列表查询") + @ApiOperation(value = "分组人员列表查询") + @GetMapping(value = "/groupUserList") + public ResponseDataDTO> groupUserList(SysRiskGroupRelUserVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysGroupRelUserService.list(query)); + } + + @BussinessLog(value = "风险点分组人员查询") + @ApiOperation(value = "风险点分组人员分页查询") + @GetMapping(value = "/groupUserPage") + public ResponseDataDTO> listPage(SysRiskGroupRelUserVO sysGroupRelUserVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysGroupRelUserVO.genQuery(); + List relUsers = sysGroupRelUserService.selectSysGroupRelUserPage(page, query); + page.setRecords(relUsers); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "用户分组批量新增") + @ApiOperation(value = "批量新增接口") + @PostMapping(value = "/batch-add") + public ResponseDataDTO batchAdd(@RequestBody GroupUserRelDTO relDTO) { + sysGroupRelUserService.batchAdd(relDTO); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组人员删除") + @ApiOperation(value = "用户组人员删除接口") + @GetMapping(value = "/user/delete") + public ResponseDataDTO userDel(@Param("用户组人员关联主键") String id) { + sysGroupRelUserService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "风险点分组分页查询") + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(SysRiskUserGroupVO sysUserGroupVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysUserGroupVO.genQuery(); + + List sysUserGroups = sysUserGroupService.selectSysUserGroupPage(page, query); + page.setRecords(sysUserGroups); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "风险点分组新增") + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.save(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组修改") + @ApiOperation(value = "修改接口") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.updateById(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组删除") + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + sysUserGroupService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "批量删除") + @ApiOperation(value = "批量删除", hidden = true) + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + sysUserGroupService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "详情查询") + @ApiOperation(value = "详情查询", hidden = true) + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(sysUserGroupService.getById(id)); + } + + @BussinessLog(value = "用户树") + @ApiOperation(value = "用户树查询") + @GetMapping(value = "/person/tree") + public ResponseDataDTO> personTree() { + return ResponseDataDTO.success(sysUserGroupService.personTree()); + } + + @BussinessLog(value = "风险点树查询") + @ApiOperation(value = "风险点树查询") + @GetMapping(value = "/tree") + public ResponseDataDTO> tree(String riskType) { + return ResponseDataDTO.success(riskPointInfoService.tree(riskType)); + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java new file mode 100644 index 0000000..419eb27 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备所属人员组 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupPointMapper extends BaseMapper { +/** +* 设备所属人员组 分页检索 +*/ +List selectSysGroupDevicePage(@Param("page") Page page, @Param("ew" ) QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java new file mode 100644 index 0000000..eb41227 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 组人员管理 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupRelUserMapper extends BaseMapper { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java new file mode 100644 index 0000000..e8352df --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.system.model.SysUserGroup; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 用户组信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysUserRiskGroupMapper extends BaseMapper { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml new file mode 100644 index 0000000..6fa6a4d --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + id , + group_id as groupId , + create_time as createTime , + target_Id as targetId + + + a.id , + a.group_id + as groupId , + a.create_time + as createTime , + a.target_Id + as targetId + + + + + + and group_id = #{request.groupId} + + + and device_id = #{request.deviceId} + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml new file mode 100644 index 0000000..a627546 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + id , + group_id as groupId , + user_id as userId , + create_time as createTime + + + a.id, + a.group_id + as groupId , + a.user_id + as userId , + a.create_time + as createTime + + + + + + and group_id = #{request.groupId} + + + and user_id = #{request.userId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml new file mode 100644 index 0000000..3245136 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + id, + group_name as groupName , + create_time as createTime , + dept_id as deptId , + create_id as createId + + + a.id,a.group_name as groupName , + a.create_time + as createTime , + a.dept_id + as deptId , + a.create_id + as createId,a.description + + + + + + and group_name like concat('%',#{request.groupName},'%') + + + and dept_id = #{request.deptId} + + + and create_id = #{request.createId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java new file mode 100644 index 0000000..e44328f --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class GroupRiskRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("风险点集合") + private List targetIds; + @ApiModelProperty("用户ID集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java new file mode 100644 index 0000000..f8758bf --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class RiskGroupUserRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("设备集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java new file mode 100644 index 0000000..b386d5b --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java @@ -0,0 +1,53 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 风险点所属组 sys_risk_group_point + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_risk_group_point") +public class SysRiskGroupPoint extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableId("id") + private Long id; + + @ApiModelProperty(value = "用户组ID", dataType = "Long") + @TableField("group_id") + private Long groupId; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty(value = "风险点ID", dataType = "Long") + @TableField("target_id") + private Long targetId; + + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; + + @Override + public String toString() { + return "SysGroupDevice{" + + "id=" + id + + "groupId=" + groupId + + "createTime=" + createTime + + "targetId=" + targetId + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java new file mode 100644 index 0000000..949caa3 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java @@ -0,0 +1,55 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 组人员管理对象 sys_group_rel_user + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_risk_group_rel_user") +public class SysRiskGroupRelUser extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + + @ApiModelProperty(value = "组ID", dataType = "Long") + @TableField("group_id") + private Long groupId; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + @TableField("user_id") + private Long userId; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + @ApiModelProperty(value = "用户姓名", dataType = "String") + @TableField(exist = false) + private String realName; + + @ApiModelProperty(value = "用户名", dataType = "String") + @TableField(exist = false) + private String account; + + @Override + public String toString() { + return "SysGroupRelUser{" + + "id=" + id + + "groupId=" + groupId + + "userId=" + userId + + "createTime=" + createTime + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java new file mode 100644 index 0000000..1b73dc0 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java @@ -0,0 +1,97 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 危险点分组组信息对象 sys_user_risk_group + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_user_risk_group") +public class SysUserRiskGroup extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableId("id") + private Long id; + + @ApiModelProperty(value = "组名称", dataType = "String", required = true) + @TableField("group_name") + private String groupName; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty(value = "所属组织(保留字段)", dataType = "Long") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty(value = "描述信息", dataType = "String") + @TableField("description") + private String description; + + @ApiModelProperty(value = "密级字典", dataType = "String") + @TableField("safe") + private int safe; + + @ApiModelProperty(value = "创建者ID", dataType = "Long") + @TableField("create_id") + private Long createId; + + + @ApiModelProperty(value = "类型(1 危险点 2 重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "Long") + @TableField("group_type") + private String groupType; + @TableField(exist = false) + private String groupTypeName; + /** + * 风险点集合 + */ + @ApiModelProperty(value = "风险点集合(逗号拼接)", dataType = "String") + @TableField(exist = false) + private String pointIds; + + @ApiModelProperty(value = "数量", dataType = "Long") + @TableField(exist = false) + private Integer targetNum; + /** + * 用户集合 + */ + @ApiModelProperty(value = "用户集合(逗号拼接)", dataType = "String") + @TableField(exist = false) + private String personIds; + + @ApiModelProperty(value = "用户名称", dataType = "String") + @TableField(exist = false) + private String realName; + + @ApiModelProperty(value = "用户名", dataType = "String") + @TableField(exist = false) + private String account; + + @ApiModelProperty(value = "密级字典名称", dataType = "String") + @TableField(exist = false) + private String safeName; + + @Override + public String toString() { + return "SysUserGroup{" + + "id=" + id + + "groupName=" + groupName + + "createTime=" + createTime + + "deptId=" + deptId + + "createId=" + createId + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java new file mode 100644 index 0000000..4657ce4 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.device.dto.GroupRelDTO; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; + +import java.util.List; + + +/** + *

+ * 设备所属人员组 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysRiskGroupPointService extends IService { + /** + * 设备所属人员组 分页检索 + */ + List selectSysGroupDevicePage(Page page, QueryWrapper query); + + /** + * 设备组批量新增 + * + * @param relDTO + */ + void batchAdd(GroupRiskRelDTO relDTO); + + + /** + * 增量更新 + * @param groupId + * @param deviceIds + */ + void batchIncremental(Long groupId, List deviceIds); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java new file mode 100644 index 0000000..591eef2 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; + +import java.util.List; + + +/** + *

+ * 组人员管理 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysRiskGroupRelUserService extends IService { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(Page page, QueryWrapper query); + + void batchAdd(GroupUserRelDTO relDTO); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java new file mode 100644 index 0000000..1e0889c --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; + +import java.util.List; + + +/** + *

+ * 用户组信息 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysUserRiskGroupService extends IService { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(Page page, QueryWrapper query); + + List personTree(); + + /** + * 创建用户组 + * + * @param sysUserGroup 用户组信息 + * @param userIds 用户信息 + */ + void createSysUserGroup(SysUserRiskGroup sysUserGroup, List userIds); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java new file mode 100644 index 0000000..6839887 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java @@ -0,0 +1,118 @@ +package com.casic.missiles.modular.group.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +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.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.group.dao.SysRiskGroupPointMapper; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import com.casic.missiles.modular.group.service.ISysRiskGroupPointService; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + + +/** + *

+ * 设备所属人员组 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysRiskGroupPointServiceImpl extends ServiceImpl implements ISysRiskGroupPointService { + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysRiskGroupPointServiceImpl(ISysRiskGroupRelUserService sysGroupRelUserService) { + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @Override + public List selectSysGroupDevicePage(Page page, QueryWrapper query) { + return this.baseMapper.selectSysGroupDevicePage(page, query); + } + + @Transactional + @Override + public void batchAdd(GroupRiskRelDTO relDTO) { + + if (CollectionUtil.isEmpty(relDTO.getTargetIds())) { + ServiceException serviceException = new ServiceException(500, "添加不能为空!"); + throw serviceException; + } + + //删除 + QueryWrapper query = new QueryWrapper<>(); + query.eq("group_id", relDTO.getGroupId()); + this.remove(query); + + //保存分组与危险点对应关系 + List groupDevices = new ArrayList<>(); + for (Long deviceId : relDTO.getTargetIds()) { + SysRiskGroupPoint sysGroupDevice = new SysRiskGroupPoint(); + sysGroupDevice.setTargetId(deviceId); + sysGroupDevice.setGroupId(relDTO.getGroupId()); + sysGroupDevice.setCreateTime(new Date()); + groupDevices.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(groupDevices); + + //批量保存风险点与用户关系 + GroupUserRelDTO groupUserRelDTO = new GroupUserRelDTO(); + groupUserRelDTO.setGroupId(relDTO.getGroupId()); + groupUserRelDTO.setUserIds(relDTO.getUserIds()); + sysGroupRelUserService.batchAdd(groupUserRelDTO); + + } + + @Override + public void batchIncremental(Long groupId, List deviceIds) { + List groupDevices = this.list(new LambdaQueryWrapper().eq(SysRiskGroupPoint::getGroupId, groupId)); + if (CollectionUtil.isEmpty(groupDevices)) { + saveDevices(groupId, deviceIds); + } else { + List oldDevices = groupDevices.stream().map(SysRiskGroupPoint::getTargetId).collect(Collectors.toList()); + List delIds = CollectionUtil.subtractToList(oldDevices, deviceIds); + List saveDevices = CollectionUtil.subtractToList(deviceIds, oldDevices); + + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.eq(SysRiskGroupPoint::getGroupId, groupId); + delQuery.in(SysRiskGroupPoint::getTargetId, delIds); + if (CollectionUtil.isNotEmpty(delIds)) { + this.remove(delQuery); + } + saveDevices(groupId, saveDevices); + } + } + + private void saveDevices(Long groupId, List saveDevices) { + List saves = new ArrayList<>(); + for (Long deviceId : saveDevices) { + SysRiskGroupPoint sysGroupDevice = new SysRiskGroupPoint(); + sysGroupDevice.setTargetId(deviceId); + sysGroupDevice.setGroupId(groupId); + sysGroupDevice.setCreateTime(new Date()); + saves.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(saves); + } + + private void saveOrUpdateBatchList(List groupDevices) { + for (SysRiskGroupPoint groupDevice : groupDevices) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysRiskGroupPoint::getGroupId, groupDevice.getGroupId()); + query.eq(SysRiskGroupPoint::getTargetId, groupDevice.getTargetId()); + this.saveOrUpdate(groupDevice, query); + } + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java new file mode 100644 index 0000000..83cd76a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.group.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +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.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.group.dao.SysRiskGroupPointMapper; +import com.casic.missiles.modular.group.dao.SysRiskGroupRelUserMapper; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.system.dao.SysGroupRelUserMapper; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + + +/** + *

+ * 组人员管理 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysRiskGroupRelUserServiceImpl extends ServiceImpl implements ISysRiskGroupRelUserService { + @Override + public List selectSysGroupRelUserPage(Page page, QueryWrapper query) { + return this.baseMapper.selectSysGroupRelUserPage(page, query); + } + + @Transactional + @Override + public void batchAdd(GroupUserRelDTO relDTO) { + if (CollectionUtil.isEmpty(relDTO.getUserIds())) { + ServiceException serviceException = new ServiceException(500, "添加不能为空!"); + throw serviceException; + } + //删除 + QueryWrapper query = new QueryWrapper<>(); + query.eq("group_id",relDTO.getGroupId()); + this.remove(query); + //添加设备信息 + List groupDevices = new ArrayList<>(); + for (Long deviceId : relDTO.getUserIds()) { + SysRiskGroupRelUser sysGroupDevice = new SysRiskGroupRelUser(); + sysGroupDevice.setUserId(deviceId); + sysGroupDevice.setGroupId(relDTO.getGroupId()); + sysGroupDevice.setCreateTime(new Date()); + groupDevices.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(groupDevices); + } + + private void saveOrUpdateBatchList(List groupDevices) { + for (SysRiskGroupRelUser groupDevice : groupDevices) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysRiskGroupRelUser::getGroupId, groupDevice.getGroupId()); + query.eq(SysRiskGroupRelUser::getUserId, groupDevice.getUserId()); + this.saveOrUpdate(groupDevice, query); + } + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java new file mode 100644 index 0000000..1ca5eb1 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java @@ -0,0 +1,63 @@ +package com.casic.missiles.modular.device.enums; + +/** + * wvp设备类型转换 + * + * @author lwh + * @Date 2017年1月10日 下午9:54:13 + */ +public enum AvDeptEnum { + + DEPT0("0066", "801",0L), + DEPT1("0059", "699厂",1L), + DEPT2("0055", "283厂",1L), + DEPT3("0022", "201所",1L), + DEPT4("0027", "206所",1L), + DEPT5("0013", "23所",1L); + + String code; + String message; + Long deptId; + AvDeptEnum(String code, String message, Long deptId) { + this.code = code; + this.message = message; + this.deptId = deptId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public static AvDeptEnum valueOfCode(String value) { + if (value == null) { + return null; + } else { + for (AvDeptEnum ms : AvDeptEnum.values()) { + if (ms.getCode().equals(value)) { + return ms; + } + } + return null; + } + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java new file mode 100644 index 0000000..573d0e2 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.task; + +import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; + +public class Test { + public static void main(String[] args) { + System.out.println(AvStatusTypeEnum.valueOfType(new Integer(1)).getMessage()); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java new file mode 100644 index 0000000..7c06c67 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java @@ -0,0 +1,77 @@ +package com.casic.missiles.modular.device.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpSession; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class RiskSyncController extends BaseController { + @Resource + private IClientAuthService clientAuthService; + @Resource + private AbstractDeptService deptService; + @Resource + private AbstractUserService userService; + @PostMapping("/client/login") + @ResponseBody + public ResponseData login(@RequestBody RiskLoginForm deviceLoginForm, HttpSession session) { + return clientAuthService.login(deviceLoginForm, session); + } + + /** + * 全量组织信息读取 + * + * @return + */ + @PostMapping("/dept/list") + @ResponseBody + public ResponseDataDTO> dept() { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = deptService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量用户信息读取 + * + * @return + */ + @PostMapping("/user/list") + @ResponseBody + public ResponseDataDTO> user() { + //todo 此处租户拦截需移除 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量设备信息读取 + * + * @return + */ + @PostMapping("/device/list") + @ResponseBody + public ResponseDataDTO> device() { + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java new file mode 100644 index 0000000..5e5b890 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class UserSyncController extends BaseController { + + @Resource + private IBusDeviceInfoService busDeviceInfoService; + + /** + * 登录用户授权设备权限查看 + * @return + */ + @GetMapping("/device/permissions") + @ResponseBody + public ResponseDataDTO> devicePermissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } + + /** + * 登录用户风险点授权查询 + * @return + */ + @GetMapping("/permissions") + @ResponseBody + public ResponseDataDTO> permissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java new file mode 100644 index 0000000..07b8df8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +/** + * 设备登录接口 + */ +@Data +public class RiskLoginForm { + /** + * 设备编码 + */ + private String clientId; + + /** + * 时间戳 + */ + private Long time; + + /** + * 加密后数据 加密格式sn+时间戳 时效性为6小时 + */ + private String secret; + + /** + * 设备登录注册IP + */ + private String ip; + + /** + * 设备登录注册port + */ + private String port; +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java new file mode 100644 index 0000000..40fdb4b --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.device.service; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; + +import javax.servlet.http.HttpSession; + +public interface IClientAuthService { + /** + * @param deviceLoginForm + * @param session + * @return + */ + ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session); +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java new file mode 100644 index 0000000..576e857 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.device.service.impl; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import cn.hutool.jwt.JWT; +import cn.hutool.jwt.JWTUtil; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.util.IRiskCacheUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpSession; +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Service +public class ClientAuthServiceImpl implements IClientAuthService { + @Value("${casic.client.privateKey:MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALKcwHHOg0F6Zkq7GOVnOnTgvH9vSPXFFTOcEqOVBIBPBz7UNrEGkp1PhZ+oC4WVJAsDuot2e1fDZy9QS9HF92MmnYp9kuQRhGZjHctPnVZ0Kai5BES0ytHqPeauLyNXxOOS0YKYEUwpft4Z5Azw7bj3JWNvLrnTZvNld6FDvTslAgMBAAECgYAqN/kZLYpC+O6i7XSmDO95XwHPUXu6dDpdt5+EQR4OQh/hTwIaeAZB3uEj6vHGQomBfQEkI/5lsU97lIxHanbd+Hro7JyIhsGD5LR5XnZHVKzFiZW62OIU6FI9dlQNN8miiblnmyDwiMA3okaHl0O7qQjZ+IvY2csgmJc7AXpPpQJBAOhrhcfWFcgffj2O6HYNlBLFfbboc/ZzrEADDXKnxRSHlo5o8W+6gylG/L2NGtbag5S68B9VYzdkSQ1++5C+Ws8CQQDEu7h311PLEiKgqzGHpjzadQETmt/jMadaKQmT0TZwNVi6X8lR17U5hF8dAqZzUzr9kUC0HRIZhg4Uv1v3W3fLAkB4YPhxgJjXhjhEefg87Nt8vX1Xdx5Yz6CvpuUYNX0GHRQFvqUOUXQNtQ7CvorgLV1pc0lbcUZqMi8EJnj1hyJRAkEAjHXWm8GiMt+M15fCsi3vTq2xChVOekBuUsHv85iwvGZqJg7ThtpyqlEnM2g7/STUfkvhnXcQACclEI0blTy6BwJAPmFyhU+d0ejVpbc53TdrL2HqYYUHi/tTy/dtUa7lbypzdwwJ2M1Tv5PE8sQxr9tgMbebfxVb/RFKdiCCtzC4ng==}") + private String privateKey; + + @Override + public ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session) { + //固定秘钥解析 + try { + String str = RSAUtils.decrypt(deviceLoginForm.getSecret(), privateKey); + Long time = Long.valueOf(StrUtil.split(str, "_").get(1)); + //边缘盒子时差与服务时差不可超过24小时 + if (time == null || System.currentTimeMillis() - time > 3600 * 24 * 1000) { + return ResponseData.error("请求时间超时"); + } + deviceLoginForm.setTime(time); + } catch (Exception e) { + e.printStackTrace(); + return ResponseData.error("设备解析异常!"); + } + + try { + String token = this.createJwtToken(deviceLoginForm); + IRiskCacheUtil.put(token, token); + return ResponseData.success(token); + } catch (Exception e) { + log.error("设备登录异常:{}", e.getMessage()); + return ResponseData.error("登录异常,请联系管理员"); + } +} + /** + * token创建 + * + * @param loginForm 登录信息 + * @param device 设备信息 + * @return + * @throws Exception + */ + public String createJwtToken(RiskLoginForm loginForm) throws Exception { + Map payload = new HashMap<>(); + payload.put("clientId", loginForm.getClientId()); // 设备编号 + payload.put("time", loginForm.getTime()); // 请求时间 + + //RSA 解密 + String str = RSAUtils.decrypt(loginForm.getSecret(), privateKey); + String key = loginForm.getClientId()+"_" + loginForm.getTime() ; + if (!key.equals(str)) { + //秘钥验证失败 + throw new ServiceException(500,"秘钥验证失败"); + } + +// long exp = new Date().getTime() + 2 * 3600000; // 2小时后的时间戳 +// payload.put("exp", exp); + + // 创建JWT + String jwt = JWTUtil.createToken(payload, "token-203-202405".getBytes()); + + return jwt; + } + + /** + * token解析 + * + * @param jwtStr token + * @return + * @throws Exception + */ + public static RiskLoginForm parseToken(String jwtStr){ + JWT jwtObj = new JWTUtil().parseToken(jwtStr); + RiskLoginForm deviceLoginForm = new RiskLoginForm(); + deviceLoginForm.setClientId(Convert.toStr(jwtObj.getPayload("clientId"))); + return deviceLoginForm; + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java new file mode 100644 index 0000000..0e91ac8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.util; +import cn.hutool.cache.Cache; +import cn.hutool.cache.CacheUtil; +/** + * token有效 + */ +public class IRiskCacheUtil { + /** + * 1小时内不活跃 会踢掉 + */ + private static Cache fifoCache = CacheUtil.newFIFOCache(1000, 1000 * 60 * 60); + + public static void put(String key, String value) { + fifoCache.put(key, value); + } + + public static String get(String key) { + return fifoCache.get(key); + } + + public static void remove(String key) { + fifoCache.remove(key); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java new file mode 100644 index 0000000..805c32a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceGroupDict extends AbstractDictMap { + + @Override + public void init() { + //检索条件 + put("groupName", "分组名称"); + put("startTime", "起始时间"); + put("endTime", "结束时间"); + //新增修改属性 + put("cameraIds", "设备国标号"); + put("personIds", "人员主键集合"); + put("description","备注"); + put("id","主键"); + put("ids","主键集合"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java new file mode 100644 index 0000000..895fbd9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceQueryDict extends AbstractDictMap { + + @Override + public void init() { + put("devType", "类型查询"); + put("keyword", "设备名称"); + put("deptName", "所属单位"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java new file mode 100644 index 0000000..88da6df --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.device.util; + +public class DeviceScopeUtil { +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java new file mode 100644 index 0000000..2e3e478 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.device.controller; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.auth.dto.DeviceLoginForm; +import com.casic.missiles.modular.auth.util.ICacheUtil; +import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; +import com.casic.missiles.modular.device.service.IAlarmRecordService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +@Api(tags = "告警记录") +@RestController +@RequestMapping("/record") +public class AlarmUploadController extends BaseController { + + private final IAlarmRecordService alarmRecordService; + private final IDeviceAuthService deviceAuthService; + public AlarmUploadController(IAlarmRecordService alarmRecordService, IDeviceAuthService deviceAuthService) { + this.alarmRecordService = alarmRecordService; + this.deviceAuthService = deviceAuthService; + } + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } + @BussinessLog(value = "告警记录上报接口") + @ApiOperation(value = "告警记录上报接口") + @PostMapping(value = "/upload") + public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return createAuthError(); + } + alarmRecordService.upload(alarmRecord); + return ResponseDataDTO.success(); + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java new file mode 100644 index 0000000..3f1c189 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class RecognitionStreamDTO { + private Long id; + private String recognitionStreamFlag; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java new file mode 100644 index 0000000..fa5ae4a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java @@ -0,0 +1,167 @@ +package com.casic.missiles.modular.group.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IRiskPointInfoService; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.group.vo.SysRiskGroupPointVO; +import com.casic.missiles.modular.group.vo.SysRiskGroupRelUserVO; +import com.casic.missiles.modular.group.vo.SysRiskUserGroupVO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import com.casic.missiles.modular.system.vo.SysGroupRelUserVO; +import com.casic.missiles.modular.system.vo.SysUserGroupVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.ibatis.annotations.Param; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; + +/** + * 风险点组信息Controller + * + * @author lwh + * @date 2024-07-11 + */ +@Api(tags = "风险点组信息") +@RestController +@RequestMapping("/sys/risk/group") +public class SysUserRiskGroupController extends BaseController { + private final IRiskPointInfoService riskPointInfoService; + private final ISysUserRiskGroupService sysUserGroupService; + private final AbstractPermissionContext permissionContext; + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysUserRiskGroupController(IRiskPointInfoService riskPointInfoService, ISysUserRiskGroupService sysUserGroupService, AbstractPermissionContext permissionContext, ISysRiskGroupRelUserService sysGroupRelUserService) { + this.riskPointInfoService = riskPointInfoService; + this.sysUserGroupService = sysUserGroupService; + this.permissionContext = permissionContext; + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @BussinessLog(value = "风险点分组查询") + @ApiOperation(value = "风险点分组查询", hidden = true) + @GetMapping(value = "/list") + public ResponseDataDTO> list(SysRiskUserGroupVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysUserGroupService.list(query)); + } + + @BussinessLog(value = "分组人员列表查询") + @ApiOperation(value = "分组人员列表查询") + @GetMapping(value = "/groupUserList") + public ResponseDataDTO> groupUserList(SysRiskGroupRelUserVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysGroupRelUserService.list(query)); + } + + @BussinessLog(value = "风险点分组人员查询") + @ApiOperation(value = "风险点分组人员分页查询") + @GetMapping(value = "/groupUserPage") + public ResponseDataDTO> listPage(SysRiskGroupRelUserVO sysGroupRelUserVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysGroupRelUserVO.genQuery(); + List relUsers = sysGroupRelUserService.selectSysGroupRelUserPage(page, query); + page.setRecords(relUsers); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "用户分组批量新增") + @ApiOperation(value = "批量新增接口") + @PostMapping(value = "/batch-add") + public ResponseDataDTO batchAdd(@RequestBody GroupUserRelDTO relDTO) { + sysGroupRelUserService.batchAdd(relDTO); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组人员删除") + @ApiOperation(value = "用户组人员删除接口") + @GetMapping(value = "/user/delete") + public ResponseDataDTO userDel(@Param("用户组人员关联主键") String id) { + sysGroupRelUserService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "风险点分组分页查询") + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(SysRiskUserGroupVO sysUserGroupVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysUserGroupVO.genQuery(); + + List sysUserGroups = sysUserGroupService.selectSysUserGroupPage(page, query); + page.setRecords(sysUserGroups); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "风险点分组新增") + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.save(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组修改") + @ApiOperation(value = "修改接口") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.updateById(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组删除") + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + sysUserGroupService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "批量删除") + @ApiOperation(value = "批量删除", hidden = true) + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + sysUserGroupService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "详情查询") + @ApiOperation(value = "详情查询", hidden = true) + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(sysUserGroupService.getById(id)); + } + + @BussinessLog(value = "用户树") + @ApiOperation(value = "用户树查询") + @GetMapping(value = "/person/tree") + public ResponseDataDTO> personTree() { + return ResponseDataDTO.success(sysUserGroupService.personTree()); + } + + @BussinessLog(value = "风险点树查询") + @ApiOperation(value = "风险点树查询") + @GetMapping(value = "/tree") + public ResponseDataDTO> tree(String riskType) { + return ResponseDataDTO.success(riskPointInfoService.tree(riskType)); + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java new file mode 100644 index 0000000..419eb27 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备所属人员组 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupPointMapper extends BaseMapper { +/** +* 设备所属人员组 分页检索 +*/ +List selectSysGroupDevicePage(@Param("page") Page page, @Param("ew" ) QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java new file mode 100644 index 0000000..eb41227 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 组人员管理 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupRelUserMapper extends BaseMapper { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java new file mode 100644 index 0000000..e8352df --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.system.model.SysUserGroup; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 用户组信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysUserRiskGroupMapper extends BaseMapper { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml new file mode 100644 index 0000000..6fa6a4d --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + id , + group_id as groupId , + create_time as createTime , + target_Id as targetId + + + a.id , + a.group_id + as groupId , + a.create_time + as createTime , + a.target_Id + as targetId + + + + + + and group_id = #{request.groupId} + + + and device_id = #{request.deviceId} + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml new file mode 100644 index 0000000..a627546 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + id , + group_id as groupId , + user_id as userId , + create_time as createTime + + + a.id, + a.group_id + as groupId , + a.user_id + as userId , + a.create_time + as createTime + + + + + + and group_id = #{request.groupId} + + + and user_id = #{request.userId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml new file mode 100644 index 0000000..3245136 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + id, + group_name as groupName , + create_time as createTime , + dept_id as deptId , + create_id as createId + + + a.id,a.group_name as groupName , + a.create_time + as createTime , + a.dept_id + as deptId , + a.create_id + as createId,a.description + + + + + + and group_name like concat('%',#{request.groupName},'%') + + + and dept_id = #{request.deptId} + + + and create_id = #{request.createId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java new file mode 100644 index 0000000..e44328f --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class GroupRiskRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("风险点集合") + private List targetIds; + @ApiModelProperty("用户ID集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java new file mode 100644 index 0000000..f8758bf --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class RiskGroupUserRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("设备集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java new file mode 100644 index 0000000..b386d5b --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java @@ -0,0 +1,53 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 风险点所属组 sys_risk_group_point + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_risk_group_point") +public class SysRiskGroupPoint extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableId("id") + private Long id; + + @ApiModelProperty(value = "用户组ID", dataType = "Long") + @TableField("group_id") + private Long groupId; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty(value = "风险点ID", dataType = "Long") + @TableField("target_id") + private Long targetId; + + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; + + @Override + public String toString() { + return "SysGroupDevice{" + + "id=" + id + + "groupId=" + groupId + + "createTime=" + createTime + + "targetId=" + targetId + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java new file mode 100644 index 0000000..949caa3 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java @@ -0,0 +1,55 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 组人员管理对象 sys_group_rel_user + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_risk_group_rel_user") +public class SysRiskGroupRelUser extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + + @ApiModelProperty(value = "组ID", dataType = "Long") + @TableField("group_id") + private Long groupId; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + @TableField("user_id") + private Long userId; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + @ApiModelProperty(value = "用户姓名", dataType = "String") + @TableField(exist = false) + private String realName; + + @ApiModelProperty(value = "用户名", dataType = "String") + @TableField(exist = false) + private String account; + + @Override + public String toString() { + return "SysGroupRelUser{" + + "id=" + id + + "groupId=" + groupId + + "userId=" + userId + + "createTime=" + createTime + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java new file mode 100644 index 0000000..1b73dc0 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java @@ -0,0 +1,97 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 危险点分组组信息对象 sys_user_risk_group + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_user_risk_group") +public class SysUserRiskGroup extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableId("id") + private Long id; + + @ApiModelProperty(value = "组名称", dataType = "String", required = true) + @TableField("group_name") + private String groupName; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty(value = "所属组织(保留字段)", dataType = "Long") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty(value = "描述信息", dataType = "String") + @TableField("description") + private String description; + + @ApiModelProperty(value = "密级字典", dataType = "String") + @TableField("safe") + private int safe; + + @ApiModelProperty(value = "创建者ID", dataType = "Long") + @TableField("create_id") + private Long createId; + + + @ApiModelProperty(value = "类型(1 危险点 2 重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "Long") + @TableField("group_type") + private String groupType; + @TableField(exist = false) + private String groupTypeName; + /** + * 风险点集合 + */ + @ApiModelProperty(value = "风险点集合(逗号拼接)", dataType = "String") + @TableField(exist = false) + private String pointIds; + + @ApiModelProperty(value = "数量", dataType = "Long") + @TableField(exist = false) + private Integer targetNum; + /** + * 用户集合 + */ + @ApiModelProperty(value = "用户集合(逗号拼接)", dataType = "String") + @TableField(exist = false) + private String personIds; + + @ApiModelProperty(value = "用户名称", dataType = "String") + @TableField(exist = false) + private String realName; + + @ApiModelProperty(value = "用户名", dataType = "String") + @TableField(exist = false) + private String account; + + @ApiModelProperty(value = "密级字典名称", dataType = "String") + @TableField(exist = false) + private String safeName; + + @Override + public String toString() { + return "SysUserGroup{" + + "id=" + id + + "groupName=" + groupName + + "createTime=" + createTime + + "deptId=" + deptId + + "createId=" + createId + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java new file mode 100644 index 0000000..4657ce4 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.device.dto.GroupRelDTO; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; + +import java.util.List; + + +/** + *

+ * 设备所属人员组 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysRiskGroupPointService extends IService { + /** + * 设备所属人员组 分页检索 + */ + List selectSysGroupDevicePage(Page page, QueryWrapper query); + + /** + * 设备组批量新增 + * + * @param relDTO + */ + void batchAdd(GroupRiskRelDTO relDTO); + + + /** + * 增量更新 + * @param groupId + * @param deviceIds + */ + void batchIncremental(Long groupId, List deviceIds); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java new file mode 100644 index 0000000..591eef2 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; + +import java.util.List; + + +/** + *

+ * 组人员管理 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysRiskGroupRelUserService extends IService { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(Page page, QueryWrapper query); + + void batchAdd(GroupUserRelDTO relDTO); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java new file mode 100644 index 0000000..1e0889c --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; + +import java.util.List; + + +/** + *

+ * 用户组信息 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysUserRiskGroupService extends IService { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(Page page, QueryWrapper query); + + List personTree(); + + /** + * 创建用户组 + * + * @param sysUserGroup 用户组信息 + * @param userIds 用户信息 + */ + void createSysUserGroup(SysUserRiskGroup sysUserGroup, List userIds); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java new file mode 100644 index 0000000..6839887 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java @@ -0,0 +1,118 @@ +package com.casic.missiles.modular.group.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +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.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.group.dao.SysRiskGroupPointMapper; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import com.casic.missiles.modular.group.service.ISysRiskGroupPointService; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + + +/** + *

+ * 设备所属人员组 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysRiskGroupPointServiceImpl extends ServiceImpl implements ISysRiskGroupPointService { + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysRiskGroupPointServiceImpl(ISysRiskGroupRelUserService sysGroupRelUserService) { + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @Override + public List selectSysGroupDevicePage(Page page, QueryWrapper query) { + return this.baseMapper.selectSysGroupDevicePage(page, query); + } + + @Transactional + @Override + public void batchAdd(GroupRiskRelDTO relDTO) { + + if (CollectionUtil.isEmpty(relDTO.getTargetIds())) { + ServiceException serviceException = new ServiceException(500, "添加不能为空!"); + throw serviceException; + } + + //删除 + QueryWrapper query = new QueryWrapper<>(); + query.eq("group_id", relDTO.getGroupId()); + this.remove(query); + + //保存分组与危险点对应关系 + List groupDevices = new ArrayList<>(); + for (Long deviceId : relDTO.getTargetIds()) { + SysRiskGroupPoint sysGroupDevice = new SysRiskGroupPoint(); + sysGroupDevice.setTargetId(deviceId); + sysGroupDevice.setGroupId(relDTO.getGroupId()); + sysGroupDevice.setCreateTime(new Date()); + groupDevices.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(groupDevices); + + //批量保存风险点与用户关系 + GroupUserRelDTO groupUserRelDTO = new GroupUserRelDTO(); + groupUserRelDTO.setGroupId(relDTO.getGroupId()); + groupUserRelDTO.setUserIds(relDTO.getUserIds()); + sysGroupRelUserService.batchAdd(groupUserRelDTO); + + } + + @Override + public void batchIncremental(Long groupId, List deviceIds) { + List groupDevices = this.list(new LambdaQueryWrapper().eq(SysRiskGroupPoint::getGroupId, groupId)); + if (CollectionUtil.isEmpty(groupDevices)) { + saveDevices(groupId, deviceIds); + } else { + List oldDevices = groupDevices.stream().map(SysRiskGroupPoint::getTargetId).collect(Collectors.toList()); + List delIds = CollectionUtil.subtractToList(oldDevices, deviceIds); + List saveDevices = CollectionUtil.subtractToList(deviceIds, oldDevices); + + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.eq(SysRiskGroupPoint::getGroupId, groupId); + delQuery.in(SysRiskGroupPoint::getTargetId, delIds); + if (CollectionUtil.isNotEmpty(delIds)) { + this.remove(delQuery); + } + saveDevices(groupId, saveDevices); + } + } + + private void saveDevices(Long groupId, List saveDevices) { + List saves = new ArrayList<>(); + for (Long deviceId : saveDevices) { + SysRiskGroupPoint sysGroupDevice = new SysRiskGroupPoint(); + sysGroupDevice.setTargetId(deviceId); + sysGroupDevice.setGroupId(groupId); + sysGroupDevice.setCreateTime(new Date()); + saves.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(saves); + } + + private void saveOrUpdateBatchList(List groupDevices) { + for (SysRiskGroupPoint groupDevice : groupDevices) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysRiskGroupPoint::getGroupId, groupDevice.getGroupId()); + query.eq(SysRiskGroupPoint::getTargetId, groupDevice.getTargetId()); + this.saveOrUpdate(groupDevice, query); + } + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java new file mode 100644 index 0000000..83cd76a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.group.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +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.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.group.dao.SysRiskGroupPointMapper; +import com.casic.missiles.modular.group.dao.SysRiskGroupRelUserMapper; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.system.dao.SysGroupRelUserMapper; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + + +/** + *

+ * 组人员管理 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysRiskGroupRelUserServiceImpl extends ServiceImpl implements ISysRiskGroupRelUserService { + @Override + public List selectSysGroupRelUserPage(Page page, QueryWrapper query) { + return this.baseMapper.selectSysGroupRelUserPage(page, query); + } + + @Transactional + @Override + public void batchAdd(GroupUserRelDTO relDTO) { + if (CollectionUtil.isEmpty(relDTO.getUserIds())) { + ServiceException serviceException = new ServiceException(500, "添加不能为空!"); + throw serviceException; + } + //删除 + QueryWrapper query = new QueryWrapper<>(); + query.eq("group_id",relDTO.getGroupId()); + this.remove(query); + //添加设备信息 + List groupDevices = new ArrayList<>(); + for (Long deviceId : relDTO.getUserIds()) { + SysRiskGroupRelUser sysGroupDevice = new SysRiskGroupRelUser(); + sysGroupDevice.setUserId(deviceId); + sysGroupDevice.setGroupId(relDTO.getGroupId()); + sysGroupDevice.setCreateTime(new Date()); + groupDevices.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(groupDevices); + } + + private void saveOrUpdateBatchList(List groupDevices) { + for (SysRiskGroupRelUser groupDevice : groupDevices) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysRiskGroupRelUser::getGroupId, groupDevice.getGroupId()); + query.eq(SysRiskGroupRelUser::getUserId, groupDevice.getUserId()); + this.saveOrUpdate(groupDevice, query); + } + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java new file mode 100644 index 0000000..b3bb9a8 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java @@ -0,0 +1,246 @@ +package com.casic.missiles.modular.group.service.impl; + +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.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.modular.data.constants.DataConstants; +import com.casic.missiles.modular.group.dao.SysUserRiskGroupMapper; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupPointService; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.tree.RiskGroupDefaultTreeBuildFactory; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + + +/** + *

+ * 用户组信息 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysUserRiskGroupServiceImpl extends ServiceImpl implements ISysUserRiskGroupService { + @Lazy + @Resource + private ISysRiskGroupPointService sysRiskGroupPointService; + private final AbstractPermissionContext abstractPermissionContext; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_USER = "2"; + private final AbstractDictService dictService; + @Lazy + @Resource + private ISysRiskGroupRelUserService relUserService; + + public SysUserRiskGroupServiceImpl(AbstractPermissionContext abstractPermissionContext, AbstractDictService dictService) { + this.abstractPermissionContext = abstractPermissionContext; + this.dictService = dictService; + } + + @Override + public List selectSysUserGroupPage(Page page, QueryWrapper query) { + //分组过滤当前权限 + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + query.in("a.dept_id", dataScope.getDeptIds()); + } + List riskGroups = this.baseMapper.selectSysUserGroupPage(page, query); + for (SysUserRiskGroup riskGroup : riskGroups) { + wrapperInfo(riskGroup); + } + return riskGroups; + } + + private void wrapperInfo(SysUserRiskGroup riskGroup) { + riskGroup.setSafeName(dictService.getDictNameByCode(DataConstants.DICT_SECRET_LEVEL_TYPE, riskGroup.getSafe() + "")); + //查询关联设备 + LambdaQueryWrapper deviceQuery = new LambdaQueryWrapper<>(); + deviceQuery.eq(SysRiskGroupPoint::getGroupId, riskGroup.getId()); + List devices = sysRiskGroupPointService.list(deviceQuery); + if (devices != null) { + List deviceList = devices.stream().map(SysRiskGroupPoint::getTargetId).collect(Collectors.toList()); + riskGroup.setPointIds(StrUtil.join(",", deviceList)); + riskGroup.setTargetNum(deviceList.size()); + } + + riskGroup.setGroupTypeName(dictService.getDictNameByCode(DataConstants.dangerAssessmentType, riskGroup.getGroupType())); + //查询关联人员 + LambdaQueryWrapper personQuery = new LambdaQueryWrapper<>(); + personQuery.eq(SysRiskGroupRelUser::getGroupId, riskGroup.getId()); + List persons = relUserService.list(personQuery); + if (persons != null) { + List personIds = persons.stream().map(SysRiskGroupRelUser::getUserId).collect(Collectors.toList()); + riskGroup.setPersonIds(StrUtil.join(",", personIds)); + } + } + + private void setGroupInfo(SysUserRiskGroup entity) { + if (StrUtil.isNotEmpty(entity.getPointIds())) { + entity.setTargetNum(StrUtil.split(entity.getPointIds(), ",").size()); + } else { + entity.setTargetNum(0); + } + } + + @Override + public boolean save(SysUserRiskGroup entity) { + AuthUser authUser = abstractPermissionContext.getAuthService().getLoginUser(); + entity.setCreateTime(new Date()); + entity.setCreateId(authUser.getId()); + if (entity.getDeptId() == null) { + entity.setDeptId(authUser.getDeptId()); + } + setGroupInfo(entity); + super.save(entity); + batchSave(entity, entity.getId()); + return true; + } + + @Override + public boolean updateById(SysUserRiskGroup entity) { + AuthUser authUser = abstractPermissionContext.getAuthService().getLoginUser(); + entity.setCreateTime(new Date()); + entity.setCreateId(authUser.getId()); + if (entity.getDeptId() == null) { + entity.setDeptId(authUser.getDeptId()); + } + setGroupInfo(entity); + super.updateById(entity); + batchSave(entity, entity.getId()); + return true; + } + + /** + * 数据转换 + * + * @param entity + * @param groupId + */ + private void batchSave(SysUserRiskGroup entity, Long groupId) { + GroupRiskRelDTO groupRelDTO = new GroupRiskRelDTO(); + groupRelDTO.setGroupId(groupId); + if (StrUtil.isNotEmpty(entity.getPointIds())) { + long[] longs = StrUtil.splitToLong(entity.getPointIds(), ","); + List devices = new ArrayList<>(); + for (long aLong : longs) { + devices.add(aLong); + } + groupRelDTO.setTargetIds(devices); + } + if (StrUtil.isNotEmpty(entity.getPersonIds())) { + List persons = new ArrayList<>(); + long[] longs = StrUtil.splitToLong(entity.getPersonIds(), ","); + + for (long aLong : longs) { + persons.add(aLong); + } + groupRelDTO.setUserIds(persons); + } + sysRiskGroupPointService.batchAdd(groupRelDTO); + } + + @Override + public List personTree() { + + //查询可见组织 + DataScope scope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + + LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { + deptQuery.in(Dept::getId, scope.getDeptIds()); + } + deptQuery.orderByAsc(Dept::getNum); + + List deptList = abstractPermissionContext.getDeptService().list(deptQuery); + List deptDTOS = new ArrayList<>(); + List rootIds = new ArrayList<>(); + Set normalIds = new HashSet<>(); + for (Dept dept : deptList) { + RiskGroupDeptDTO deptDTO = new RiskGroupDeptDTO(); + deptDTO.setPid(dept.getPid()); + deptDTO.setId(dept.getId()); + deptDTO.setFullName(dept.getFullName()); + deptDTO.setName(dept.getSimpleName()); + deptDTOS.add(deptDTO); + deptDTO.setType(NODE_TYPE_DEPT); + normalIds.add(dept.getId()); + + //挂载设备信息 + LambdaQueryWrapper deviceQuery = new LambdaQueryWrapper<>(); + deviceQuery.eq(User::getDeptId, deptDTO.getId()); + deviceQuery.eq(User::getStatus, "1"); + List deviceInfos = abstractPermissionContext.getUserService().list(deviceQuery); + + deptDTO.setChildrenNodes(deviceInfos.stream().map(this::createDeptDTO).collect(Collectors.toList())); + } + + for (RiskGroupDeptDTO deptDTO : deptDTOS) { + if (!normalIds.contains(deptDTO.getPid())) { + rootIds.add(deptDTO.getPid()); + } + } + + //过滤根节点,支持多根展示 + RiskGroupDefaultTreeBuildFactory abstractTreeBuildFactory = new RiskGroupDefaultTreeBuildFactory(); + List newTree = new ArrayList<>(); + rootIds = rootIds.stream().distinct().collect(Collectors.toList()); + for (Long rootId : rootIds) { + abstractTreeBuildFactory.setRootId(rootId + ""); + newTree.addAll(abstractTreeBuildFactory.doTreeBuild(deptDTOS)); + } + + return newTree; + } + + @Transactional + @Override + public void createSysUserGroup(SysUserRiskGroup sysUserGroup, List userIds) { + this.baseMapper.insert(sysUserGroup); + GroupUserRelDTO relDTO = new GroupUserRelDTO(); + relDTO.setGroupId(sysUserGroup.getId()); + relDTO.setUserIds(userIds); + relUserService.batchAdd(relDTO); + } + + + /** + * 创建节点 + * + * @param userInfo 用户信息 + * @return + */ + private GroupDeptDTO createDeptDTO(User userInfo) { + GroupDeptDTO deptDTO = new GroupDeptDTO(); + deptDTO.setType(NODE_TYPE_USER); + deptDTO.setId(userInfo.getId()); + deptDTO.setPid(userInfo.getDeptId()); + deptDTO.setUserDTO(userInfo); + deptDTO.setName(userInfo.getName()); + deptDTO.setFullName(userInfo.getName()); + deptDTO.setUserId(userInfo.getId() + ""); + return deptDTO; + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java new file mode 100644 index 0000000..1ca5eb1 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java @@ -0,0 +1,63 @@ +package com.casic.missiles.modular.device.enums; + +/** + * wvp设备类型转换 + * + * @author lwh + * @Date 2017年1月10日 下午9:54:13 + */ +public enum AvDeptEnum { + + DEPT0("0066", "801",0L), + DEPT1("0059", "699厂",1L), + DEPT2("0055", "283厂",1L), + DEPT3("0022", "201所",1L), + DEPT4("0027", "206所",1L), + DEPT5("0013", "23所",1L); + + String code; + String message; + Long deptId; + AvDeptEnum(String code, String message, Long deptId) { + this.code = code; + this.message = message; + this.deptId = deptId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public static AvDeptEnum valueOfCode(String value) { + if (value == null) { + return null; + } else { + for (AvDeptEnum ms : AvDeptEnum.values()) { + if (ms.getCode().equals(value)) { + return ms; + } + } + return null; + } + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java new file mode 100644 index 0000000..573d0e2 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.task; + +import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; + +public class Test { + public static void main(String[] args) { + System.out.println(AvStatusTypeEnum.valueOfType(new Integer(1)).getMessage()); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java new file mode 100644 index 0000000..7c06c67 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java @@ -0,0 +1,77 @@ +package com.casic.missiles.modular.device.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpSession; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class RiskSyncController extends BaseController { + @Resource + private IClientAuthService clientAuthService; + @Resource + private AbstractDeptService deptService; + @Resource + private AbstractUserService userService; + @PostMapping("/client/login") + @ResponseBody + public ResponseData login(@RequestBody RiskLoginForm deviceLoginForm, HttpSession session) { + return clientAuthService.login(deviceLoginForm, session); + } + + /** + * 全量组织信息读取 + * + * @return + */ + @PostMapping("/dept/list") + @ResponseBody + public ResponseDataDTO> dept() { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = deptService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量用户信息读取 + * + * @return + */ + @PostMapping("/user/list") + @ResponseBody + public ResponseDataDTO> user() { + //todo 此处租户拦截需移除 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量设备信息读取 + * + * @return + */ + @PostMapping("/device/list") + @ResponseBody + public ResponseDataDTO> device() { + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java new file mode 100644 index 0000000..5e5b890 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class UserSyncController extends BaseController { + + @Resource + private IBusDeviceInfoService busDeviceInfoService; + + /** + * 登录用户授权设备权限查看 + * @return + */ + @GetMapping("/device/permissions") + @ResponseBody + public ResponseDataDTO> devicePermissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } + + /** + * 登录用户风险点授权查询 + * @return + */ + @GetMapping("/permissions") + @ResponseBody + public ResponseDataDTO> permissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java new file mode 100644 index 0000000..07b8df8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +/** + * 设备登录接口 + */ +@Data +public class RiskLoginForm { + /** + * 设备编码 + */ + private String clientId; + + /** + * 时间戳 + */ + private Long time; + + /** + * 加密后数据 加密格式sn+时间戳 时效性为6小时 + */ + private String secret; + + /** + * 设备登录注册IP + */ + private String ip; + + /** + * 设备登录注册port + */ + private String port; +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java new file mode 100644 index 0000000..40fdb4b --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.device.service; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; + +import javax.servlet.http.HttpSession; + +public interface IClientAuthService { + /** + * @param deviceLoginForm + * @param session + * @return + */ + ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session); +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java new file mode 100644 index 0000000..576e857 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.device.service.impl; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import cn.hutool.jwt.JWT; +import cn.hutool.jwt.JWTUtil; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.util.IRiskCacheUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpSession; +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Service +public class ClientAuthServiceImpl implements IClientAuthService { + @Value("${casic.client.privateKey:MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALKcwHHOg0F6Zkq7GOVnOnTgvH9vSPXFFTOcEqOVBIBPBz7UNrEGkp1PhZ+oC4WVJAsDuot2e1fDZy9QS9HF92MmnYp9kuQRhGZjHctPnVZ0Kai5BES0ytHqPeauLyNXxOOS0YKYEUwpft4Z5Azw7bj3JWNvLrnTZvNld6FDvTslAgMBAAECgYAqN/kZLYpC+O6i7XSmDO95XwHPUXu6dDpdt5+EQR4OQh/hTwIaeAZB3uEj6vHGQomBfQEkI/5lsU97lIxHanbd+Hro7JyIhsGD5LR5XnZHVKzFiZW62OIU6FI9dlQNN8miiblnmyDwiMA3okaHl0O7qQjZ+IvY2csgmJc7AXpPpQJBAOhrhcfWFcgffj2O6HYNlBLFfbboc/ZzrEADDXKnxRSHlo5o8W+6gylG/L2NGtbag5S68B9VYzdkSQ1++5C+Ws8CQQDEu7h311PLEiKgqzGHpjzadQETmt/jMadaKQmT0TZwNVi6X8lR17U5hF8dAqZzUzr9kUC0HRIZhg4Uv1v3W3fLAkB4YPhxgJjXhjhEefg87Nt8vX1Xdx5Yz6CvpuUYNX0GHRQFvqUOUXQNtQ7CvorgLV1pc0lbcUZqMi8EJnj1hyJRAkEAjHXWm8GiMt+M15fCsi3vTq2xChVOekBuUsHv85iwvGZqJg7ThtpyqlEnM2g7/STUfkvhnXcQACclEI0blTy6BwJAPmFyhU+d0ejVpbc53TdrL2HqYYUHi/tTy/dtUa7lbypzdwwJ2M1Tv5PE8sQxr9tgMbebfxVb/RFKdiCCtzC4ng==}") + private String privateKey; + + @Override + public ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session) { + //固定秘钥解析 + try { + String str = RSAUtils.decrypt(deviceLoginForm.getSecret(), privateKey); + Long time = Long.valueOf(StrUtil.split(str, "_").get(1)); + //边缘盒子时差与服务时差不可超过24小时 + if (time == null || System.currentTimeMillis() - time > 3600 * 24 * 1000) { + return ResponseData.error("请求时间超时"); + } + deviceLoginForm.setTime(time); + } catch (Exception e) { + e.printStackTrace(); + return ResponseData.error("设备解析异常!"); + } + + try { + String token = this.createJwtToken(deviceLoginForm); + IRiskCacheUtil.put(token, token); + return ResponseData.success(token); + } catch (Exception e) { + log.error("设备登录异常:{}", e.getMessage()); + return ResponseData.error("登录异常,请联系管理员"); + } +} + /** + * token创建 + * + * @param loginForm 登录信息 + * @param device 设备信息 + * @return + * @throws Exception + */ + public String createJwtToken(RiskLoginForm loginForm) throws Exception { + Map payload = new HashMap<>(); + payload.put("clientId", loginForm.getClientId()); // 设备编号 + payload.put("time", loginForm.getTime()); // 请求时间 + + //RSA 解密 + String str = RSAUtils.decrypt(loginForm.getSecret(), privateKey); + String key = loginForm.getClientId()+"_" + loginForm.getTime() ; + if (!key.equals(str)) { + //秘钥验证失败 + throw new ServiceException(500,"秘钥验证失败"); + } + +// long exp = new Date().getTime() + 2 * 3600000; // 2小时后的时间戳 +// payload.put("exp", exp); + + // 创建JWT + String jwt = JWTUtil.createToken(payload, "token-203-202405".getBytes()); + + return jwt; + } + + /** + * token解析 + * + * @param jwtStr token + * @return + * @throws Exception + */ + public static RiskLoginForm parseToken(String jwtStr){ + JWT jwtObj = new JWTUtil().parseToken(jwtStr); + RiskLoginForm deviceLoginForm = new RiskLoginForm(); + deviceLoginForm.setClientId(Convert.toStr(jwtObj.getPayload("clientId"))); + return deviceLoginForm; + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java new file mode 100644 index 0000000..0e91ac8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.util; +import cn.hutool.cache.Cache; +import cn.hutool.cache.CacheUtil; +/** + * token有效 + */ +public class IRiskCacheUtil { + /** + * 1小时内不活跃 会踢掉 + */ + private static Cache fifoCache = CacheUtil.newFIFOCache(1000, 1000 * 60 * 60); + + public static void put(String key, String value) { + fifoCache.put(key, value); + } + + public static String get(String key) { + return fifoCache.get(key); + } + + public static void remove(String key) { + fifoCache.remove(key); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java new file mode 100644 index 0000000..805c32a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceGroupDict extends AbstractDictMap { + + @Override + public void init() { + //检索条件 + put("groupName", "分组名称"); + put("startTime", "起始时间"); + put("endTime", "结束时间"); + //新增修改属性 + put("cameraIds", "设备国标号"); + put("personIds", "人员主键集合"); + put("description","备注"); + put("id","主键"); + put("ids","主键集合"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java new file mode 100644 index 0000000..895fbd9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceQueryDict extends AbstractDictMap { + + @Override + public void init() { + put("devType", "类型查询"); + put("keyword", "设备名称"); + put("deptName", "所属单位"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java new file mode 100644 index 0000000..88da6df --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.device.util; + +public class DeviceScopeUtil { +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java new file mode 100644 index 0000000..2e3e478 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.device.controller; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.auth.dto.DeviceLoginForm; +import com.casic.missiles.modular.auth.util.ICacheUtil; +import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; +import com.casic.missiles.modular.device.service.IAlarmRecordService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +@Api(tags = "告警记录") +@RestController +@RequestMapping("/record") +public class AlarmUploadController extends BaseController { + + private final IAlarmRecordService alarmRecordService; + private final IDeviceAuthService deviceAuthService; + public AlarmUploadController(IAlarmRecordService alarmRecordService, IDeviceAuthService deviceAuthService) { + this.alarmRecordService = alarmRecordService; + this.deviceAuthService = deviceAuthService; + } + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } + @BussinessLog(value = "告警记录上报接口") + @ApiOperation(value = "告警记录上报接口") + @PostMapping(value = "/upload") + public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return createAuthError(); + } + alarmRecordService.upload(alarmRecord); + return ResponseDataDTO.success(); + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java new file mode 100644 index 0000000..3f1c189 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class RecognitionStreamDTO { + private Long id; + private String recognitionStreamFlag; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java new file mode 100644 index 0000000..fa5ae4a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java @@ -0,0 +1,167 @@ +package com.casic.missiles.modular.group.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IRiskPointInfoService; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.group.vo.SysRiskGroupPointVO; +import com.casic.missiles.modular.group.vo.SysRiskGroupRelUserVO; +import com.casic.missiles.modular.group.vo.SysRiskUserGroupVO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import com.casic.missiles.modular.system.vo.SysGroupRelUserVO; +import com.casic.missiles.modular.system.vo.SysUserGroupVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.ibatis.annotations.Param; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; + +/** + * 风险点组信息Controller + * + * @author lwh + * @date 2024-07-11 + */ +@Api(tags = "风险点组信息") +@RestController +@RequestMapping("/sys/risk/group") +public class SysUserRiskGroupController extends BaseController { + private final IRiskPointInfoService riskPointInfoService; + private final ISysUserRiskGroupService sysUserGroupService; + private final AbstractPermissionContext permissionContext; + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysUserRiskGroupController(IRiskPointInfoService riskPointInfoService, ISysUserRiskGroupService sysUserGroupService, AbstractPermissionContext permissionContext, ISysRiskGroupRelUserService sysGroupRelUserService) { + this.riskPointInfoService = riskPointInfoService; + this.sysUserGroupService = sysUserGroupService; + this.permissionContext = permissionContext; + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @BussinessLog(value = "风险点分组查询") + @ApiOperation(value = "风险点分组查询", hidden = true) + @GetMapping(value = "/list") + public ResponseDataDTO> list(SysRiskUserGroupVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysUserGroupService.list(query)); + } + + @BussinessLog(value = "分组人员列表查询") + @ApiOperation(value = "分组人员列表查询") + @GetMapping(value = "/groupUserList") + public ResponseDataDTO> groupUserList(SysRiskGroupRelUserVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysGroupRelUserService.list(query)); + } + + @BussinessLog(value = "风险点分组人员查询") + @ApiOperation(value = "风险点分组人员分页查询") + @GetMapping(value = "/groupUserPage") + public ResponseDataDTO> listPage(SysRiskGroupRelUserVO sysGroupRelUserVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysGroupRelUserVO.genQuery(); + List relUsers = sysGroupRelUserService.selectSysGroupRelUserPage(page, query); + page.setRecords(relUsers); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "用户分组批量新增") + @ApiOperation(value = "批量新增接口") + @PostMapping(value = "/batch-add") + public ResponseDataDTO batchAdd(@RequestBody GroupUserRelDTO relDTO) { + sysGroupRelUserService.batchAdd(relDTO); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组人员删除") + @ApiOperation(value = "用户组人员删除接口") + @GetMapping(value = "/user/delete") + public ResponseDataDTO userDel(@Param("用户组人员关联主键") String id) { + sysGroupRelUserService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "风险点分组分页查询") + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(SysRiskUserGroupVO sysUserGroupVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysUserGroupVO.genQuery(); + + List sysUserGroups = sysUserGroupService.selectSysUserGroupPage(page, query); + page.setRecords(sysUserGroups); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "风险点分组新增") + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.save(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组修改") + @ApiOperation(value = "修改接口") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.updateById(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组删除") + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + sysUserGroupService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "批量删除") + @ApiOperation(value = "批量删除", hidden = true) + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + sysUserGroupService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "详情查询") + @ApiOperation(value = "详情查询", hidden = true) + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(sysUserGroupService.getById(id)); + } + + @BussinessLog(value = "用户树") + @ApiOperation(value = "用户树查询") + @GetMapping(value = "/person/tree") + public ResponseDataDTO> personTree() { + return ResponseDataDTO.success(sysUserGroupService.personTree()); + } + + @BussinessLog(value = "风险点树查询") + @ApiOperation(value = "风险点树查询") + @GetMapping(value = "/tree") + public ResponseDataDTO> tree(String riskType) { + return ResponseDataDTO.success(riskPointInfoService.tree(riskType)); + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java new file mode 100644 index 0000000..419eb27 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备所属人员组 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupPointMapper extends BaseMapper { +/** +* 设备所属人员组 分页检索 +*/ +List selectSysGroupDevicePage(@Param("page") Page page, @Param("ew" ) QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java new file mode 100644 index 0000000..eb41227 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 组人员管理 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupRelUserMapper extends BaseMapper { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java new file mode 100644 index 0000000..e8352df --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.system.model.SysUserGroup; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 用户组信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysUserRiskGroupMapper extends BaseMapper { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml new file mode 100644 index 0000000..6fa6a4d --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + id , + group_id as groupId , + create_time as createTime , + target_Id as targetId + + + a.id , + a.group_id + as groupId , + a.create_time + as createTime , + a.target_Id + as targetId + + + + + + and group_id = #{request.groupId} + + + and device_id = #{request.deviceId} + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml new file mode 100644 index 0000000..a627546 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + id , + group_id as groupId , + user_id as userId , + create_time as createTime + + + a.id, + a.group_id + as groupId , + a.user_id + as userId , + a.create_time + as createTime + + + + + + and group_id = #{request.groupId} + + + and user_id = #{request.userId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml new file mode 100644 index 0000000..3245136 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + id, + group_name as groupName , + create_time as createTime , + dept_id as deptId , + create_id as createId + + + a.id,a.group_name as groupName , + a.create_time + as createTime , + a.dept_id + as deptId , + a.create_id + as createId,a.description + + + + + + and group_name like concat('%',#{request.groupName},'%') + + + and dept_id = #{request.deptId} + + + and create_id = #{request.createId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java new file mode 100644 index 0000000..e44328f --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class GroupRiskRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("风险点集合") + private List targetIds; + @ApiModelProperty("用户ID集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java new file mode 100644 index 0000000..f8758bf --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class RiskGroupUserRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("设备集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java new file mode 100644 index 0000000..b386d5b --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java @@ -0,0 +1,53 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 风险点所属组 sys_risk_group_point + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_risk_group_point") +public class SysRiskGroupPoint extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableId("id") + private Long id; + + @ApiModelProperty(value = "用户组ID", dataType = "Long") + @TableField("group_id") + private Long groupId; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty(value = "风险点ID", dataType = "Long") + @TableField("target_id") + private Long targetId; + + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; + + @Override + public String toString() { + return "SysGroupDevice{" + + "id=" + id + + "groupId=" + groupId + + "createTime=" + createTime + + "targetId=" + targetId + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java new file mode 100644 index 0000000..949caa3 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java @@ -0,0 +1,55 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 组人员管理对象 sys_group_rel_user + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_risk_group_rel_user") +public class SysRiskGroupRelUser extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + + @ApiModelProperty(value = "组ID", dataType = "Long") + @TableField("group_id") + private Long groupId; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + @TableField("user_id") + private Long userId; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + @ApiModelProperty(value = "用户姓名", dataType = "String") + @TableField(exist = false) + private String realName; + + @ApiModelProperty(value = "用户名", dataType = "String") + @TableField(exist = false) + private String account; + + @Override + public String toString() { + return "SysGroupRelUser{" + + "id=" + id + + "groupId=" + groupId + + "userId=" + userId + + "createTime=" + createTime + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java new file mode 100644 index 0000000..1b73dc0 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java @@ -0,0 +1,97 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 危险点分组组信息对象 sys_user_risk_group + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_user_risk_group") +public class SysUserRiskGroup extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableId("id") + private Long id; + + @ApiModelProperty(value = "组名称", dataType = "String", required = true) + @TableField("group_name") + private String groupName; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty(value = "所属组织(保留字段)", dataType = "Long") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty(value = "描述信息", dataType = "String") + @TableField("description") + private String description; + + @ApiModelProperty(value = "密级字典", dataType = "String") + @TableField("safe") + private int safe; + + @ApiModelProperty(value = "创建者ID", dataType = "Long") + @TableField("create_id") + private Long createId; + + + @ApiModelProperty(value = "类型(1 危险点 2 重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "Long") + @TableField("group_type") + private String groupType; + @TableField(exist = false) + private String groupTypeName; + /** + * 风险点集合 + */ + @ApiModelProperty(value = "风险点集合(逗号拼接)", dataType = "String") + @TableField(exist = false) + private String pointIds; + + @ApiModelProperty(value = "数量", dataType = "Long") + @TableField(exist = false) + private Integer targetNum; + /** + * 用户集合 + */ + @ApiModelProperty(value = "用户集合(逗号拼接)", dataType = "String") + @TableField(exist = false) + private String personIds; + + @ApiModelProperty(value = "用户名称", dataType = "String") + @TableField(exist = false) + private String realName; + + @ApiModelProperty(value = "用户名", dataType = "String") + @TableField(exist = false) + private String account; + + @ApiModelProperty(value = "密级字典名称", dataType = "String") + @TableField(exist = false) + private String safeName; + + @Override + public String toString() { + return "SysUserGroup{" + + "id=" + id + + "groupName=" + groupName + + "createTime=" + createTime + + "deptId=" + deptId + + "createId=" + createId + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java new file mode 100644 index 0000000..4657ce4 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.device.dto.GroupRelDTO; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; + +import java.util.List; + + +/** + *

+ * 设备所属人员组 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysRiskGroupPointService extends IService { + /** + * 设备所属人员组 分页检索 + */ + List selectSysGroupDevicePage(Page page, QueryWrapper query); + + /** + * 设备组批量新增 + * + * @param relDTO + */ + void batchAdd(GroupRiskRelDTO relDTO); + + + /** + * 增量更新 + * @param groupId + * @param deviceIds + */ + void batchIncremental(Long groupId, List deviceIds); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java new file mode 100644 index 0000000..591eef2 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; + +import java.util.List; + + +/** + *

+ * 组人员管理 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysRiskGroupRelUserService extends IService { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(Page page, QueryWrapper query); + + void batchAdd(GroupUserRelDTO relDTO); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java new file mode 100644 index 0000000..1e0889c --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; + +import java.util.List; + + +/** + *

+ * 用户组信息 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysUserRiskGroupService extends IService { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(Page page, QueryWrapper query); + + List personTree(); + + /** + * 创建用户组 + * + * @param sysUserGroup 用户组信息 + * @param userIds 用户信息 + */ + void createSysUserGroup(SysUserRiskGroup sysUserGroup, List userIds); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java new file mode 100644 index 0000000..6839887 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java @@ -0,0 +1,118 @@ +package com.casic.missiles.modular.group.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +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.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.group.dao.SysRiskGroupPointMapper; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import com.casic.missiles.modular.group.service.ISysRiskGroupPointService; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + + +/** + *

+ * 设备所属人员组 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysRiskGroupPointServiceImpl extends ServiceImpl implements ISysRiskGroupPointService { + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysRiskGroupPointServiceImpl(ISysRiskGroupRelUserService sysGroupRelUserService) { + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @Override + public List selectSysGroupDevicePage(Page page, QueryWrapper query) { + return this.baseMapper.selectSysGroupDevicePage(page, query); + } + + @Transactional + @Override + public void batchAdd(GroupRiskRelDTO relDTO) { + + if (CollectionUtil.isEmpty(relDTO.getTargetIds())) { + ServiceException serviceException = new ServiceException(500, "添加不能为空!"); + throw serviceException; + } + + //删除 + QueryWrapper query = new QueryWrapper<>(); + query.eq("group_id", relDTO.getGroupId()); + this.remove(query); + + //保存分组与危险点对应关系 + List groupDevices = new ArrayList<>(); + for (Long deviceId : relDTO.getTargetIds()) { + SysRiskGroupPoint sysGroupDevice = new SysRiskGroupPoint(); + sysGroupDevice.setTargetId(deviceId); + sysGroupDevice.setGroupId(relDTO.getGroupId()); + sysGroupDevice.setCreateTime(new Date()); + groupDevices.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(groupDevices); + + //批量保存风险点与用户关系 + GroupUserRelDTO groupUserRelDTO = new GroupUserRelDTO(); + groupUserRelDTO.setGroupId(relDTO.getGroupId()); + groupUserRelDTO.setUserIds(relDTO.getUserIds()); + sysGroupRelUserService.batchAdd(groupUserRelDTO); + + } + + @Override + public void batchIncremental(Long groupId, List deviceIds) { + List groupDevices = this.list(new LambdaQueryWrapper().eq(SysRiskGroupPoint::getGroupId, groupId)); + if (CollectionUtil.isEmpty(groupDevices)) { + saveDevices(groupId, deviceIds); + } else { + List oldDevices = groupDevices.stream().map(SysRiskGroupPoint::getTargetId).collect(Collectors.toList()); + List delIds = CollectionUtil.subtractToList(oldDevices, deviceIds); + List saveDevices = CollectionUtil.subtractToList(deviceIds, oldDevices); + + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.eq(SysRiskGroupPoint::getGroupId, groupId); + delQuery.in(SysRiskGroupPoint::getTargetId, delIds); + if (CollectionUtil.isNotEmpty(delIds)) { + this.remove(delQuery); + } + saveDevices(groupId, saveDevices); + } + } + + private void saveDevices(Long groupId, List saveDevices) { + List saves = new ArrayList<>(); + for (Long deviceId : saveDevices) { + SysRiskGroupPoint sysGroupDevice = new SysRiskGroupPoint(); + sysGroupDevice.setTargetId(deviceId); + sysGroupDevice.setGroupId(groupId); + sysGroupDevice.setCreateTime(new Date()); + saves.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(saves); + } + + private void saveOrUpdateBatchList(List groupDevices) { + for (SysRiskGroupPoint groupDevice : groupDevices) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysRiskGroupPoint::getGroupId, groupDevice.getGroupId()); + query.eq(SysRiskGroupPoint::getTargetId, groupDevice.getTargetId()); + this.saveOrUpdate(groupDevice, query); + } + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java new file mode 100644 index 0000000..83cd76a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.group.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +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.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.group.dao.SysRiskGroupPointMapper; +import com.casic.missiles.modular.group.dao.SysRiskGroupRelUserMapper; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.system.dao.SysGroupRelUserMapper; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + + +/** + *

+ * 组人员管理 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysRiskGroupRelUserServiceImpl extends ServiceImpl implements ISysRiskGroupRelUserService { + @Override + public List selectSysGroupRelUserPage(Page page, QueryWrapper query) { + return this.baseMapper.selectSysGroupRelUserPage(page, query); + } + + @Transactional + @Override + public void batchAdd(GroupUserRelDTO relDTO) { + if (CollectionUtil.isEmpty(relDTO.getUserIds())) { + ServiceException serviceException = new ServiceException(500, "添加不能为空!"); + throw serviceException; + } + //删除 + QueryWrapper query = new QueryWrapper<>(); + query.eq("group_id",relDTO.getGroupId()); + this.remove(query); + //添加设备信息 + List groupDevices = new ArrayList<>(); + for (Long deviceId : relDTO.getUserIds()) { + SysRiskGroupRelUser sysGroupDevice = new SysRiskGroupRelUser(); + sysGroupDevice.setUserId(deviceId); + sysGroupDevice.setGroupId(relDTO.getGroupId()); + sysGroupDevice.setCreateTime(new Date()); + groupDevices.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(groupDevices); + } + + private void saveOrUpdateBatchList(List groupDevices) { + for (SysRiskGroupRelUser groupDevice : groupDevices) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysRiskGroupRelUser::getGroupId, groupDevice.getGroupId()); + query.eq(SysRiskGroupRelUser::getUserId, groupDevice.getUserId()); + this.saveOrUpdate(groupDevice, query); + } + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java new file mode 100644 index 0000000..b3bb9a8 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java @@ -0,0 +1,246 @@ +package com.casic.missiles.modular.group.service.impl; + +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.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.modular.data.constants.DataConstants; +import com.casic.missiles.modular.group.dao.SysUserRiskGroupMapper; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupPointService; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.tree.RiskGroupDefaultTreeBuildFactory; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + + +/** + *

+ * 用户组信息 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysUserRiskGroupServiceImpl extends ServiceImpl implements ISysUserRiskGroupService { + @Lazy + @Resource + private ISysRiskGroupPointService sysRiskGroupPointService; + private final AbstractPermissionContext abstractPermissionContext; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_USER = "2"; + private final AbstractDictService dictService; + @Lazy + @Resource + private ISysRiskGroupRelUserService relUserService; + + public SysUserRiskGroupServiceImpl(AbstractPermissionContext abstractPermissionContext, AbstractDictService dictService) { + this.abstractPermissionContext = abstractPermissionContext; + this.dictService = dictService; + } + + @Override + public List selectSysUserGroupPage(Page page, QueryWrapper query) { + //分组过滤当前权限 + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + query.in("a.dept_id", dataScope.getDeptIds()); + } + List riskGroups = this.baseMapper.selectSysUserGroupPage(page, query); + for (SysUserRiskGroup riskGroup : riskGroups) { + wrapperInfo(riskGroup); + } + return riskGroups; + } + + private void wrapperInfo(SysUserRiskGroup riskGroup) { + riskGroup.setSafeName(dictService.getDictNameByCode(DataConstants.DICT_SECRET_LEVEL_TYPE, riskGroup.getSafe() + "")); + //查询关联设备 + LambdaQueryWrapper deviceQuery = new LambdaQueryWrapper<>(); + deviceQuery.eq(SysRiskGroupPoint::getGroupId, riskGroup.getId()); + List devices = sysRiskGroupPointService.list(deviceQuery); + if (devices != null) { + List deviceList = devices.stream().map(SysRiskGroupPoint::getTargetId).collect(Collectors.toList()); + riskGroup.setPointIds(StrUtil.join(",", deviceList)); + riskGroup.setTargetNum(deviceList.size()); + } + + riskGroup.setGroupTypeName(dictService.getDictNameByCode(DataConstants.dangerAssessmentType, riskGroup.getGroupType())); + //查询关联人员 + LambdaQueryWrapper personQuery = new LambdaQueryWrapper<>(); + personQuery.eq(SysRiskGroupRelUser::getGroupId, riskGroup.getId()); + List persons = relUserService.list(personQuery); + if (persons != null) { + List personIds = persons.stream().map(SysRiskGroupRelUser::getUserId).collect(Collectors.toList()); + riskGroup.setPersonIds(StrUtil.join(",", personIds)); + } + } + + private void setGroupInfo(SysUserRiskGroup entity) { + if (StrUtil.isNotEmpty(entity.getPointIds())) { + entity.setTargetNum(StrUtil.split(entity.getPointIds(), ",").size()); + } else { + entity.setTargetNum(0); + } + } + + @Override + public boolean save(SysUserRiskGroup entity) { + AuthUser authUser = abstractPermissionContext.getAuthService().getLoginUser(); + entity.setCreateTime(new Date()); + entity.setCreateId(authUser.getId()); + if (entity.getDeptId() == null) { + entity.setDeptId(authUser.getDeptId()); + } + setGroupInfo(entity); + super.save(entity); + batchSave(entity, entity.getId()); + return true; + } + + @Override + public boolean updateById(SysUserRiskGroup entity) { + AuthUser authUser = abstractPermissionContext.getAuthService().getLoginUser(); + entity.setCreateTime(new Date()); + entity.setCreateId(authUser.getId()); + if (entity.getDeptId() == null) { + entity.setDeptId(authUser.getDeptId()); + } + setGroupInfo(entity); + super.updateById(entity); + batchSave(entity, entity.getId()); + return true; + } + + /** + * 数据转换 + * + * @param entity + * @param groupId + */ + private void batchSave(SysUserRiskGroup entity, Long groupId) { + GroupRiskRelDTO groupRelDTO = new GroupRiskRelDTO(); + groupRelDTO.setGroupId(groupId); + if (StrUtil.isNotEmpty(entity.getPointIds())) { + long[] longs = StrUtil.splitToLong(entity.getPointIds(), ","); + List devices = new ArrayList<>(); + for (long aLong : longs) { + devices.add(aLong); + } + groupRelDTO.setTargetIds(devices); + } + if (StrUtil.isNotEmpty(entity.getPersonIds())) { + List persons = new ArrayList<>(); + long[] longs = StrUtil.splitToLong(entity.getPersonIds(), ","); + + for (long aLong : longs) { + persons.add(aLong); + } + groupRelDTO.setUserIds(persons); + } + sysRiskGroupPointService.batchAdd(groupRelDTO); + } + + @Override + public List personTree() { + + //查询可见组织 + DataScope scope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + + LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { + deptQuery.in(Dept::getId, scope.getDeptIds()); + } + deptQuery.orderByAsc(Dept::getNum); + + List deptList = abstractPermissionContext.getDeptService().list(deptQuery); + List deptDTOS = new ArrayList<>(); + List rootIds = new ArrayList<>(); + Set normalIds = new HashSet<>(); + for (Dept dept : deptList) { + RiskGroupDeptDTO deptDTO = new RiskGroupDeptDTO(); + deptDTO.setPid(dept.getPid()); + deptDTO.setId(dept.getId()); + deptDTO.setFullName(dept.getFullName()); + deptDTO.setName(dept.getSimpleName()); + deptDTOS.add(deptDTO); + deptDTO.setType(NODE_TYPE_DEPT); + normalIds.add(dept.getId()); + + //挂载设备信息 + LambdaQueryWrapper deviceQuery = new LambdaQueryWrapper<>(); + deviceQuery.eq(User::getDeptId, deptDTO.getId()); + deviceQuery.eq(User::getStatus, "1"); + List deviceInfos = abstractPermissionContext.getUserService().list(deviceQuery); + + deptDTO.setChildrenNodes(deviceInfos.stream().map(this::createDeptDTO).collect(Collectors.toList())); + } + + for (RiskGroupDeptDTO deptDTO : deptDTOS) { + if (!normalIds.contains(deptDTO.getPid())) { + rootIds.add(deptDTO.getPid()); + } + } + + //过滤根节点,支持多根展示 + RiskGroupDefaultTreeBuildFactory abstractTreeBuildFactory = new RiskGroupDefaultTreeBuildFactory(); + List newTree = new ArrayList<>(); + rootIds = rootIds.stream().distinct().collect(Collectors.toList()); + for (Long rootId : rootIds) { + abstractTreeBuildFactory.setRootId(rootId + ""); + newTree.addAll(abstractTreeBuildFactory.doTreeBuild(deptDTOS)); + } + + return newTree; + } + + @Transactional + @Override + public void createSysUserGroup(SysUserRiskGroup sysUserGroup, List userIds) { + this.baseMapper.insert(sysUserGroup); + GroupUserRelDTO relDTO = new GroupUserRelDTO(); + relDTO.setGroupId(sysUserGroup.getId()); + relDTO.setUserIds(userIds); + relUserService.batchAdd(relDTO); + } + + + /** + * 创建节点 + * + * @param userInfo 用户信息 + * @return + */ + private GroupDeptDTO createDeptDTO(User userInfo) { + GroupDeptDTO deptDTO = new GroupDeptDTO(); + deptDTO.setType(NODE_TYPE_USER); + deptDTO.setId(userInfo.getId()); + deptDTO.setPid(userInfo.getDeptId()); + deptDTO.setUserDTO(userInfo); + deptDTO.setName(userInfo.getName()); + deptDTO.setFullName(userInfo.getName()); + deptDTO.setUserId(userInfo.getId() + ""); + return deptDTO; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/tree/RiskGroupDefaultTreeBuildFactory.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/tree/RiskGroupDefaultTreeBuildFactory.java new file mode 100644 index 0000000..69c18ad --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/tree/RiskGroupDefaultTreeBuildFactory.java @@ -0,0 +1,30 @@ +package com.casic.missiles.modular.group.tree; + +import com.casic.missiles.core.treebuild.DefaultTreeBuildFactory; +import com.casic.missiles.model.tree.Tree; + +import java.util.ArrayList; +import java.util.List; + +public class RiskGroupDefaultTreeBuildFactory extends DefaultTreeBuildFactory { + private String rootId; + @Override + protected List afterBuild(List nodes) { + //去掉所有的二级节点 + ArrayList results = new ArrayList<>(); + for (T node : nodes) { + if (node.getNodeParentId().equals(rootId)) { + results.add(node); + } + } + return results; + } + + public String getRootId() { + return rootId; + } + + public void setRootId(String rootId) { + this.rootId = rootId; + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java new file mode 100644 index 0000000..1ca5eb1 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java @@ -0,0 +1,63 @@ +package com.casic.missiles.modular.device.enums; + +/** + * wvp设备类型转换 + * + * @author lwh + * @Date 2017年1月10日 下午9:54:13 + */ +public enum AvDeptEnum { + + DEPT0("0066", "801",0L), + DEPT1("0059", "699厂",1L), + DEPT2("0055", "283厂",1L), + DEPT3("0022", "201所",1L), + DEPT4("0027", "206所",1L), + DEPT5("0013", "23所",1L); + + String code; + String message; + Long deptId; + AvDeptEnum(String code, String message, Long deptId) { + this.code = code; + this.message = message; + this.deptId = deptId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public static AvDeptEnum valueOfCode(String value) { + if (value == null) { + return null; + } else { + for (AvDeptEnum ms : AvDeptEnum.values()) { + if (ms.getCode().equals(value)) { + return ms; + } + } + return null; + } + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java new file mode 100644 index 0000000..573d0e2 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.task; + +import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; + +public class Test { + public static void main(String[] args) { + System.out.println(AvStatusTypeEnum.valueOfType(new Integer(1)).getMessage()); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java new file mode 100644 index 0000000..7c06c67 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java @@ -0,0 +1,77 @@ +package com.casic.missiles.modular.device.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpSession; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class RiskSyncController extends BaseController { + @Resource + private IClientAuthService clientAuthService; + @Resource + private AbstractDeptService deptService; + @Resource + private AbstractUserService userService; + @PostMapping("/client/login") + @ResponseBody + public ResponseData login(@RequestBody RiskLoginForm deviceLoginForm, HttpSession session) { + return clientAuthService.login(deviceLoginForm, session); + } + + /** + * 全量组织信息读取 + * + * @return + */ + @PostMapping("/dept/list") + @ResponseBody + public ResponseDataDTO> dept() { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = deptService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量用户信息读取 + * + * @return + */ + @PostMapping("/user/list") + @ResponseBody + public ResponseDataDTO> user() { + //todo 此处租户拦截需移除 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量设备信息读取 + * + * @return + */ + @PostMapping("/device/list") + @ResponseBody + public ResponseDataDTO> device() { + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java new file mode 100644 index 0000000..5e5b890 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class UserSyncController extends BaseController { + + @Resource + private IBusDeviceInfoService busDeviceInfoService; + + /** + * 登录用户授权设备权限查看 + * @return + */ + @GetMapping("/device/permissions") + @ResponseBody + public ResponseDataDTO> devicePermissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } + + /** + * 登录用户风险点授权查询 + * @return + */ + @GetMapping("/permissions") + @ResponseBody + public ResponseDataDTO> permissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java new file mode 100644 index 0000000..07b8df8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +/** + * 设备登录接口 + */ +@Data +public class RiskLoginForm { + /** + * 设备编码 + */ + private String clientId; + + /** + * 时间戳 + */ + private Long time; + + /** + * 加密后数据 加密格式sn+时间戳 时效性为6小时 + */ + private String secret; + + /** + * 设备登录注册IP + */ + private String ip; + + /** + * 设备登录注册port + */ + private String port; +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java new file mode 100644 index 0000000..40fdb4b --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.device.service; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; + +import javax.servlet.http.HttpSession; + +public interface IClientAuthService { + /** + * @param deviceLoginForm + * @param session + * @return + */ + ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session); +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java new file mode 100644 index 0000000..576e857 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.device.service.impl; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import cn.hutool.jwt.JWT; +import cn.hutool.jwt.JWTUtil; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.util.IRiskCacheUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpSession; +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Service +public class ClientAuthServiceImpl implements IClientAuthService { + @Value("${casic.client.privateKey:MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALKcwHHOg0F6Zkq7GOVnOnTgvH9vSPXFFTOcEqOVBIBPBz7UNrEGkp1PhZ+oC4WVJAsDuot2e1fDZy9QS9HF92MmnYp9kuQRhGZjHctPnVZ0Kai5BES0ytHqPeauLyNXxOOS0YKYEUwpft4Z5Azw7bj3JWNvLrnTZvNld6FDvTslAgMBAAECgYAqN/kZLYpC+O6i7XSmDO95XwHPUXu6dDpdt5+EQR4OQh/hTwIaeAZB3uEj6vHGQomBfQEkI/5lsU97lIxHanbd+Hro7JyIhsGD5LR5XnZHVKzFiZW62OIU6FI9dlQNN8miiblnmyDwiMA3okaHl0O7qQjZ+IvY2csgmJc7AXpPpQJBAOhrhcfWFcgffj2O6HYNlBLFfbboc/ZzrEADDXKnxRSHlo5o8W+6gylG/L2NGtbag5S68B9VYzdkSQ1++5C+Ws8CQQDEu7h311PLEiKgqzGHpjzadQETmt/jMadaKQmT0TZwNVi6X8lR17U5hF8dAqZzUzr9kUC0HRIZhg4Uv1v3W3fLAkB4YPhxgJjXhjhEefg87Nt8vX1Xdx5Yz6CvpuUYNX0GHRQFvqUOUXQNtQ7CvorgLV1pc0lbcUZqMi8EJnj1hyJRAkEAjHXWm8GiMt+M15fCsi3vTq2xChVOekBuUsHv85iwvGZqJg7ThtpyqlEnM2g7/STUfkvhnXcQACclEI0blTy6BwJAPmFyhU+d0ejVpbc53TdrL2HqYYUHi/tTy/dtUa7lbypzdwwJ2M1Tv5PE8sQxr9tgMbebfxVb/RFKdiCCtzC4ng==}") + private String privateKey; + + @Override + public ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session) { + //固定秘钥解析 + try { + String str = RSAUtils.decrypt(deviceLoginForm.getSecret(), privateKey); + Long time = Long.valueOf(StrUtil.split(str, "_").get(1)); + //边缘盒子时差与服务时差不可超过24小时 + if (time == null || System.currentTimeMillis() - time > 3600 * 24 * 1000) { + return ResponseData.error("请求时间超时"); + } + deviceLoginForm.setTime(time); + } catch (Exception e) { + e.printStackTrace(); + return ResponseData.error("设备解析异常!"); + } + + try { + String token = this.createJwtToken(deviceLoginForm); + IRiskCacheUtil.put(token, token); + return ResponseData.success(token); + } catch (Exception e) { + log.error("设备登录异常:{}", e.getMessage()); + return ResponseData.error("登录异常,请联系管理员"); + } +} + /** + * token创建 + * + * @param loginForm 登录信息 + * @param device 设备信息 + * @return + * @throws Exception + */ + public String createJwtToken(RiskLoginForm loginForm) throws Exception { + Map payload = new HashMap<>(); + payload.put("clientId", loginForm.getClientId()); // 设备编号 + payload.put("time", loginForm.getTime()); // 请求时间 + + //RSA 解密 + String str = RSAUtils.decrypt(loginForm.getSecret(), privateKey); + String key = loginForm.getClientId()+"_" + loginForm.getTime() ; + if (!key.equals(str)) { + //秘钥验证失败 + throw new ServiceException(500,"秘钥验证失败"); + } + +// long exp = new Date().getTime() + 2 * 3600000; // 2小时后的时间戳 +// payload.put("exp", exp); + + // 创建JWT + String jwt = JWTUtil.createToken(payload, "token-203-202405".getBytes()); + + return jwt; + } + + /** + * token解析 + * + * @param jwtStr token + * @return + * @throws Exception + */ + public static RiskLoginForm parseToken(String jwtStr){ + JWT jwtObj = new JWTUtil().parseToken(jwtStr); + RiskLoginForm deviceLoginForm = new RiskLoginForm(); + deviceLoginForm.setClientId(Convert.toStr(jwtObj.getPayload("clientId"))); + return deviceLoginForm; + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java new file mode 100644 index 0000000..0e91ac8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.util; +import cn.hutool.cache.Cache; +import cn.hutool.cache.CacheUtil; +/** + * token有效 + */ +public class IRiskCacheUtil { + /** + * 1小时内不活跃 会踢掉 + */ + private static Cache fifoCache = CacheUtil.newFIFOCache(1000, 1000 * 60 * 60); + + public static void put(String key, String value) { + fifoCache.put(key, value); + } + + public static String get(String key) { + return fifoCache.get(key); + } + + public static void remove(String key) { + fifoCache.remove(key); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java new file mode 100644 index 0000000..805c32a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceGroupDict extends AbstractDictMap { + + @Override + public void init() { + //检索条件 + put("groupName", "分组名称"); + put("startTime", "起始时间"); + put("endTime", "结束时间"); + //新增修改属性 + put("cameraIds", "设备国标号"); + put("personIds", "人员主键集合"); + put("description","备注"); + put("id","主键"); + put("ids","主键集合"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java new file mode 100644 index 0000000..895fbd9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceQueryDict extends AbstractDictMap { + + @Override + public void init() { + put("devType", "类型查询"); + put("keyword", "设备名称"); + put("deptName", "所属单位"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java new file mode 100644 index 0000000..88da6df --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.device.util; + +public class DeviceScopeUtil { +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java new file mode 100644 index 0000000..2e3e478 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.device.controller; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.auth.dto.DeviceLoginForm; +import com.casic.missiles.modular.auth.util.ICacheUtil; +import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; +import com.casic.missiles.modular.device.service.IAlarmRecordService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +@Api(tags = "告警记录") +@RestController +@RequestMapping("/record") +public class AlarmUploadController extends BaseController { + + private final IAlarmRecordService alarmRecordService; + private final IDeviceAuthService deviceAuthService; + public AlarmUploadController(IAlarmRecordService alarmRecordService, IDeviceAuthService deviceAuthService) { + this.alarmRecordService = alarmRecordService; + this.deviceAuthService = deviceAuthService; + } + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } + @BussinessLog(value = "告警记录上报接口") + @ApiOperation(value = "告警记录上报接口") + @PostMapping(value = "/upload") + public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return createAuthError(); + } + alarmRecordService.upload(alarmRecord); + return ResponseDataDTO.success(); + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java new file mode 100644 index 0000000..3f1c189 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class RecognitionStreamDTO { + private Long id; + private String recognitionStreamFlag; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java new file mode 100644 index 0000000..fa5ae4a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java @@ -0,0 +1,167 @@ +package com.casic.missiles.modular.group.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IRiskPointInfoService; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.group.vo.SysRiskGroupPointVO; +import com.casic.missiles.modular.group.vo.SysRiskGroupRelUserVO; +import com.casic.missiles.modular.group.vo.SysRiskUserGroupVO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import com.casic.missiles.modular.system.vo.SysGroupRelUserVO; +import com.casic.missiles.modular.system.vo.SysUserGroupVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.ibatis.annotations.Param; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; + +/** + * 风险点组信息Controller + * + * @author lwh + * @date 2024-07-11 + */ +@Api(tags = "风险点组信息") +@RestController +@RequestMapping("/sys/risk/group") +public class SysUserRiskGroupController extends BaseController { + private final IRiskPointInfoService riskPointInfoService; + private final ISysUserRiskGroupService sysUserGroupService; + private final AbstractPermissionContext permissionContext; + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysUserRiskGroupController(IRiskPointInfoService riskPointInfoService, ISysUserRiskGroupService sysUserGroupService, AbstractPermissionContext permissionContext, ISysRiskGroupRelUserService sysGroupRelUserService) { + this.riskPointInfoService = riskPointInfoService; + this.sysUserGroupService = sysUserGroupService; + this.permissionContext = permissionContext; + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @BussinessLog(value = "风险点分组查询") + @ApiOperation(value = "风险点分组查询", hidden = true) + @GetMapping(value = "/list") + public ResponseDataDTO> list(SysRiskUserGroupVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysUserGroupService.list(query)); + } + + @BussinessLog(value = "分组人员列表查询") + @ApiOperation(value = "分组人员列表查询") + @GetMapping(value = "/groupUserList") + public ResponseDataDTO> groupUserList(SysRiskGroupRelUserVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysGroupRelUserService.list(query)); + } + + @BussinessLog(value = "风险点分组人员查询") + @ApiOperation(value = "风险点分组人员分页查询") + @GetMapping(value = "/groupUserPage") + public ResponseDataDTO> listPage(SysRiskGroupRelUserVO sysGroupRelUserVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysGroupRelUserVO.genQuery(); + List relUsers = sysGroupRelUserService.selectSysGroupRelUserPage(page, query); + page.setRecords(relUsers); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "用户分组批量新增") + @ApiOperation(value = "批量新增接口") + @PostMapping(value = "/batch-add") + public ResponseDataDTO batchAdd(@RequestBody GroupUserRelDTO relDTO) { + sysGroupRelUserService.batchAdd(relDTO); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组人员删除") + @ApiOperation(value = "用户组人员删除接口") + @GetMapping(value = "/user/delete") + public ResponseDataDTO userDel(@Param("用户组人员关联主键") String id) { + sysGroupRelUserService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "风险点分组分页查询") + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(SysRiskUserGroupVO sysUserGroupVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysUserGroupVO.genQuery(); + + List sysUserGroups = sysUserGroupService.selectSysUserGroupPage(page, query); + page.setRecords(sysUserGroups); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "风险点分组新增") + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.save(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组修改") + @ApiOperation(value = "修改接口") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.updateById(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组删除") + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + sysUserGroupService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "批量删除") + @ApiOperation(value = "批量删除", hidden = true) + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + sysUserGroupService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "详情查询") + @ApiOperation(value = "详情查询", hidden = true) + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(sysUserGroupService.getById(id)); + } + + @BussinessLog(value = "用户树") + @ApiOperation(value = "用户树查询") + @GetMapping(value = "/person/tree") + public ResponseDataDTO> personTree() { + return ResponseDataDTO.success(sysUserGroupService.personTree()); + } + + @BussinessLog(value = "风险点树查询") + @ApiOperation(value = "风险点树查询") + @GetMapping(value = "/tree") + public ResponseDataDTO> tree(String riskType) { + return ResponseDataDTO.success(riskPointInfoService.tree(riskType)); + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java new file mode 100644 index 0000000..419eb27 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备所属人员组 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupPointMapper extends BaseMapper { +/** +* 设备所属人员组 分页检索 +*/ +List selectSysGroupDevicePage(@Param("page") Page page, @Param("ew" ) QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java new file mode 100644 index 0000000..eb41227 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 组人员管理 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupRelUserMapper extends BaseMapper { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java new file mode 100644 index 0000000..e8352df --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.system.model.SysUserGroup; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 用户组信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysUserRiskGroupMapper extends BaseMapper { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml new file mode 100644 index 0000000..6fa6a4d --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + id , + group_id as groupId , + create_time as createTime , + target_Id as targetId + + + a.id , + a.group_id + as groupId , + a.create_time + as createTime , + a.target_Id + as targetId + + + + + + and group_id = #{request.groupId} + + + and device_id = #{request.deviceId} + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml new file mode 100644 index 0000000..a627546 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + id , + group_id as groupId , + user_id as userId , + create_time as createTime + + + a.id, + a.group_id + as groupId , + a.user_id + as userId , + a.create_time + as createTime + + + + + + and group_id = #{request.groupId} + + + and user_id = #{request.userId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml new file mode 100644 index 0000000..3245136 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + id, + group_name as groupName , + create_time as createTime , + dept_id as deptId , + create_id as createId + + + a.id,a.group_name as groupName , + a.create_time + as createTime , + a.dept_id + as deptId , + a.create_id + as createId,a.description + + + + + + and group_name like concat('%',#{request.groupName},'%') + + + and dept_id = #{request.deptId} + + + and create_id = #{request.createId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java new file mode 100644 index 0000000..e44328f --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class GroupRiskRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("风险点集合") + private List targetIds; + @ApiModelProperty("用户ID集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java new file mode 100644 index 0000000..f8758bf --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class RiskGroupUserRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("设备集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java new file mode 100644 index 0000000..b386d5b --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java @@ -0,0 +1,53 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 风险点所属组 sys_risk_group_point + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_risk_group_point") +public class SysRiskGroupPoint extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableId("id") + private Long id; + + @ApiModelProperty(value = "用户组ID", dataType = "Long") + @TableField("group_id") + private Long groupId; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty(value = "风险点ID", dataType = "Long") + @TableField("target_id") + private Long targetId; + + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; + + @Override + public String toString() { + return "SysGroupDevice{" + + "id=" + id + + "groupId=" + groupId + + "createTime=" + createTime + + "targetId=" + targetId + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java new file mode 100644 index 0000000..949caa3 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java @@ -0,0 +1,55 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 组人员管理对象 sys_group_rel_user + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_risk_group_rel_user") +public class SysRiskGroupRelUser extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + + @ApiModelProperty(value = "组ID", dataType = "Long") + @TableField("group_id") + private Long groupId; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + @TableField("user_id") + private Long userId; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + @ApiModelProperty(value = "用户姓名", dataType = "String") + @TableField(exist = false) + private String realName; + + @ApiModelProperty(value = "用户名", dataType = "String") + @TableField(exist = false) + private String account; + + @Override + public String toString() { + return "SysGroupRelUser{" + + "id=" + id + + "groupId=" + groupId + + "userId=" + userId + + "createTime=" + createTime + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java new file mode 100644 index 0000000..1b73dc0 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java @@ -0,0 +1,97 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 危险点分组组信息对象 sys_user_risk_group + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_user_risk_group") +public class SysUserRiskGroup extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableId("id") + private Long id; + + @ApiModelProperty(value = "组名称", dataType = "String", required = true) + @TableField("group_name") + private String groupName; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty(value = "所属组织(保留字段)", dataType = "Long") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty(value = "描述信息", dataType = "String") + @TableField("description") + private String description; + + @ApiModelProperty(value = "密级字典", dataType = "String") + @TableField("safe") + private int safe; + + @ApiModelProperty(value = "创建者ID", dataType = "Long") + @TableField("create_id") + private Long createId; + + + @ApiModelProperty(value = "类型(1 危险点 2 重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "Long") + @TableField("group_type") + private String groupType; + @TableField(exist = false) + private String groupTypeName; + /** + * 风险点集合 + */ + @ApiModelProperty(value = "风险点集合(逗号拼接)", dataType = "String") + @TableField(exist = false) + private String pointIds; + + @ApiModelProperty(value = "数量", dataType = "Long") + @TableField(exist = false) + private Integer targetNum; + /** + * 用户集合 + */ + @ApiModelProperty(value = "用户集合(逗号拼接)", dataType = "String") + @TableField(exist = false) + private String personIds; + + @ApiModelProperty(value = "用户名称", dataType = "String") + @TableField(exist = false) + private String realName; + + @ApiModelProperty(value = "用户名", dataType = "String") + @TableField(exist = false) + private String account; + + @ApiModelProperty(value = "密级字典名称", dataType = "String") + @TableField(exist = false) + private String safeName; + + @Override + public String toString() { + return "SysUserGroup{" + + "id=" + id + + "groupName=" + groupName + + "createTime=" + createTime + + "deptId=" + deptId + + "createId=" + createId + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java new file mode 100644 index 0000000..4657ce4 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.device.dto.GroupRelDTO; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; + +import java.util.List; + + +/** + *

+ * 设备所属人员组 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysRiskGroupPointService extends IService { + /** + * 设备所属人员组 分页检索 + */ + List selectSysGroupDevicePage(Page page, QueryWrapper query); + + /** + * 设备组批量新增 + * + * @param relDTO + */ + void batchAdd(GroupRiskRelDTO relDTO); + + + /** + * 增量更新 + * @param groupId + * @param deviceIds + */ + void batchIncremental(Long groupId, List deviceIds); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java new file mode 100644 index 0000000..591eef2 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; + +import java.util.List; + + +/** + *

+ * 组人员管理 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysRiskGroupRelUserService extends IService { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(Page page, QueryWrapper query); + + void batchAdd(GroupUserRelDTO relDTO); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java new file mode 100644 index 0000000..1e0889c --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; + +import java.util.List; + + +/** + *

+ * 用户组信息 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysUserRiskGroupService extends IService { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(Page page, QueryWrapper query); + + List personTree(); + + /** + * 创建用户组 + * + * @param sysUserGroup 用户组信息 + * @param userIds 用户信息 + */ + void createSysUserGroup(SysUserRiskGroup sysUserGroup, List userIds); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java new file mode 100644 index 0000000..6839887 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java @@ -0,0 +1,118 @@ +package com.casic.missiles.modular.group.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +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.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.group.dao.SysRiskGroupPointMapper; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import com.casic.missiles.modular.group.service.ISysRiskGroupPointService; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + + +/** + *

+ * 设备所属人员组 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysRiskGroupPointServiceImpl extends ServiceImpl implements ISysRiskGroupPointService { + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysRiskGroupPointServiceImpl(ISysRiskGroupRelUserService sysGroupRelUserService) { + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @Override + public List selectSysGroupDevicePage(Page page, QueryWrapper query) { + return this.baseMapper.selectSysGroupDevicePage(page, query); + } + + @Transactional + @Override + public void batchAdd(GroupRiskRelDTO relDTO) { + + if (CollectionUtil.isEmpty(relDTO.getTargetIds())) { + ServiceException serviceException = new ServiceException(500, "添加不能为空!"); + throw serviceException; + } + + //删除 + QueryWrapper query = new QueryWrapper<>(); + query.eq("group_id", relDTO.getGroupId()); + this.remove(query); + + //保存分组与危险点对应关系 + List groupDevices = new ArrayList<>(); + for (Long deviceId : relDTO.getTargetIds()) { + SysRiskGroupPoint sysGroupDevice = new SysRiskGroupPoint(); + sysGroupDevice.setTargetId(deviceId); + sysGroupDevice.setGroupId(relDTO.getGroupId()); + sysGroupDevice.setCreateTime(new Date()); + groupDevices.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(groupDevices); + + //批量保存风险点与用户关系 + GroupUserRelDTO groupUserRelDTO = new GroupUserRelDTO(); + groupUserRelDTO.setGroupId(relDTO.getGroupId()); + groupUserRelDTO.setUserIds(relDTO.getUserIds()); + sysGroupRelUserService.batchAdd(groupUserRelDTO); + + } + + @Override + public void batchIncremental(Long groupId, List deviceIds) { + List groupDevices = this.list(new LambdaQueryWrapper().eq(SysRiskGroupPoint::getGroupId, groupId)); + if (CollectionUtil.isEmpty(groupDevices)) { + saveDevices(groupId, deviceIds); + } else { + List oldDevices = groupDevices.stream().map(SysRiskGroupPoint::getTargetId).collect(Collectors.toList()); + List delIds = CollectionUtil.subtractToList(oldDevices, deviceIds); + List saveDevices = CollectionUtil.subtractToList(deviceIds, oldDevices); + + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.eq(SysRiskGroupPoint::getGroupId, groupId); + delQuery.in(SysRiskGroupPoint::getTargetId, delIds); + if (CollectionUtil.isNotEmpty(delIds)) { + this.remove(delQuery); + } + saveDevices(groupId, saveDevices); + } + } + + private void saveDevices(Long groupId, List saveDevices) { + List saves = new ArrayList<>(); + for (Long deviceId : saveDevices) { + SysRiskGroupPoint sysGroupDevice = new SysRiskGroupPoint(); + sysGroupDevice.setTargetId(deviceId); + sysGroupDevice.setGroupId(groupId); + sysGroupDevice.setCreateTime(new Date()); + saves.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(saves); + } + + private void saveOrUpdateBatchList(List groupDevices) { + for (SysRiskGroupPoint groupDevice : groupDevices) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysRiskGroupPoint::getGroupId, groupDevice.getGroupId()); + query.eq(SysRiskGroupPoint::getTargetId, groupDevice.getTargetId()); + this.saveOrUpdate(groupDevice, query); + } + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java new file mode 100644 index 0000000..83cd76a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.group.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +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.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.group.dao.SysRiskGroupPointMapper; +import com.casic.missiles.modular.group.dao.SysRiskGroupRelUserMapper; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.system.dao.SysGroupRelUserMapper; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + + +/** + *

+ * 组人员管理 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysRiskGroupRelUserServiceImpl extends ServiceImpl implements ISysRiskGroupRelUserService { + @Override + public List selectSysGroupRelUserPage(Page page, QueryWrapper query) { + return this.baseMapper.selectSysGroupRelUserPage(page, query); + } + + @Transactional + @Override + public void batchAdd(GroupUserRelDTO relDTO) { + if (CollectionUtil.isEmpty(relDTO.getUserIds())) { + ServiceException serviceException = new ServiceException(500, "添加不能为空!"); + throw serviceException; + } + //删除 + QueryWrapper query = new QueryWrapper<>(); + query.eq("group_id",relDTO.getGroupId()); + this.remove(query); + //添加设备信息 + List groupDevices = new ArrayList<>(); + for (Long deviceId : relDTO.getUserIds()) { + SysRiskGroupRelUser sysGroupDevice = new SysRiskGroupRelUser(); + sysGroupDevice.setUserId(deviceId); + sysGroupDevice.setGroupId(relDTO.getGroupId()); + sysGroupDevice.setCreateTime(new Date()); + groupDevices.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(groupDevices); + } + + private void saveOrUpdateBatchList(List groupDevices) { + for (SysRiskGroupRelUser groupDevice : groupDevices) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysRiskGroupRelUser::getGroupId, groupDevice.getGroupId()); + query.eq(SysRiskGroupRelUser::getUserId, groupDevice.getUserId()); + this.saveOrUpdate(groupDevice, query); + } + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java new file mode 100644 index 0000000..b3bb9a8 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java @@ -0,0 +1,246 @@ +package com.casic.missiles.modular.group.service.impl; + +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.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.modular.data.constants.DataConstants; +import com.casic.missiles.modular.group.dao.SysUserRiskGroupMapper; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupPointService; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.tree.RiskGroupDefaultTreeBuildFactory; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + + +/** + *

+ * 用户组信息 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysUserRiskGroupServiceImpl extends ServiceImpl implements ISysUserRiskGroupService { + @Lazy + @Resource + private ISysRiskGroupPointService sysRiskGroupPointService; + private final AbstractPermissionContext abstractPermissionContext; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_USER = "2"; + private final AbstractDictService dictService; + @Lazy + @Resource + private ISysRiskGroupRelUserService relUserService; + + public SysUserRiskGroupServiceImpl(AbstractPermissionContext abstractPermissionContext, AbstractDictService dictService) { + this.abstractPermissionContext = abstractPermissionContext; + this.dictService = dictService; + } + + @Override + public List selectSysUserGroupPage(Page page, QueryWrapper query) { + //分组过滤当前权限 + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + query.in("a.dept_id", dataScope.getDeptIds()); + } + List riskGroups = this.baseMapper.selectSysUserGroupPage(page, query); + for (SysUserRiskGroup riskGroup : riskGroups) { + wrapperInfo(riskGroup); + } + return riskGroups; + } + + private void wrapperInfo(SysUserRiskGroup riskGroup) { + riskGroup.setSafeName(dictService.getDictNameByCode(DataConstants.DICT_SECRET_LEVEL_TYPE, riskGroup.getSafe() + "")); + //查询关联设备 + LambdaQueryWrapper deviceQuery = new LambdaQueryWrapper<>(); + deviceQuery.eq(SysRiskGroupPoint::getGroupId, riskGroup.getId()); + List devices = sysRiskGroupPointService.list(deviceQuery); + if (devices != null) { + List deviceList = devices.stream().map(SysRiskGroupPoint::getTargetId).collect(Collectors.toList()); + riskGroup.setPointIds(StrUtil.join(",", deviceList)); + riskGroup.setTargetNum(deviceList.size()); + } + + riskGroup.setGroupTypeName(dictService.getDictNameByCode(DataConstants.dangerAssessmentType, riskGroup.getGroupType())); + //查询关联人员 + LambdaQueryWrapper personQuery = new LambdaQueryWrapper<>(); + personQuery.eq(SysRiskGroupRelUser::getGroupId, riskGroup.getId()); + List persons = relUserService.list(personQuery); + if (persons != null) { + List personIds = persons.stream().map(SysRiskGroupRelUser::getUserId).collect(Collectors.toList()); + riskGroup.setPersonIds(StrUtil.join(",", personIds)); + } + } + + private void setGroupInfo(SysUserRiskGroup entity) { + if (StrUtil.isNotEmpty(entity.getPointIds())) { + entity.setTargetNum(StrUtil.split(entity.getPointIds(), ",").size()); + } else { + entity.setTargetNum(0); + } + } + + @Override + public boolean save(SysUserRiskGroup entity) { + AuthUser authUser = abstractPermissionContext.getAuthService().getLoginUser(); + entity.setCreateTime(new Date()); + entity.setCreateId(authUser.getId()); + if (entity.getDeptId() == null) { + entity.setDeptId(authUser.getDeptId()); + } + setGroupInfo(entity); + super.save(entity); + batchSave(entity, entity.getId()); + return true; + } + + @Override + public boolean updateById(SysUserRiskGroup entity) { + AuthUser authUser = abstractPermissionContext.getAuthService().getLoginUser(); + entity.setCreateTime(new Date()); + entity.setCreateId(authUser.getId()); + if (entity.getDeptId() == null) { + entity.setDeptId(authUser.getDeptId()); + } + setGroupInfo(entity); + super.updateById(entity); + batchSave(entity, entity.getId()); + return true; + } + + /** + * 数据转换 + * + * @param entity + * @param groupId + */ + private void batchSave(SysUserRiskGroup entity, Long groupId) { + GroupRiskRelDTO groupRelDTO = new GroupRiskRelDTO(); + groupRelDTO.setGroupId(groupId); + if (StrUtil.isNotEmpty(entity.getPointIds())) { + long[] longs = StrUtil.splitToLong(entity.getPointIds(), ","); + List devices = new ArrayList<>(); + for (long aLong : longs) { + devices.add(aLong); + } + groupRelDTO.setTargetIds(devices); + } + if (StrUtil.isNotEmpty(entity.getPersonIds())) { + List persons = new ArrayList<>(); + long[] longs = StrUtil.splitToLong(entity.getPersonIds(), ","); + + for (long aLong : longs) { + persons.add(aLong); + } + groupRelDTO.setUserIds(persons); + } + sysRiskGroupPointService.batchAdd(groupRelDTO); + } + + @Override + public List personTree() { + + //查询可见组织 + DataScope scope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + + LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { + deptQuery.in(Dept::getId, scope.getDeptIds()); + } + deptQuery.orderByAsc(Dept::getNum); + + List deptList = abstractPermissionContext.getDeptService().list(deptQuery); + List deptDTOS = new ArrayList<>(); + List rootIds = new ArrayList<>(); + Set normalIds = new HashSet<>(); + for (Dept dept : deptList) { + RiskGroupDeptDTO deptDTO = new RiskGroupDeptDTO(); + deptDTO.setPid(dept.getPid()); + deptDTO.setId(dept.getId()); + deptDTO.setFullName(dept.getFullName()); + deptDTO.setName(dept.getSimpleName()); + deptDTOS.add(deptDTO); + deptDTO.setType(NODE_TYPE_DEPT); + normalIds.add(dept.getId()); + + //挂载设备信息 + LambdaQueryWrapper deviceQuery = new LambdaQueryWrapper<>(); + deviceQuery.eq(User::getDeptId, deptDTO.getId()); + deviceQuery.eq(User::getStatus, "1"); + List deviceInfos = abstractPermissionContext.getUserService().list(deviceQuery); + + deptDTO.setChildrenNodes(deviceInfos.stream().map(this::createDeptDTO).collect(Collectors.toList())); + } + + for (RiskGroupDeptDTO deptDTO : deptDTOS) { + if (!normalIds.contains(deptDTO.getPid())) { + rootIds.add(deptDTO.getPid()); + } + } + + //过滤根节点,支持多根展示 + RiskGroupDefaultTreeBuildFactory abstractTreeBuildFactory = new RiskGroupDefaultTreeBuildFactory(); + List newTree = new ArrayList<>(); + rootIds = rootIds.stream().distinct().collect(Collectors.toList()); + for (Long rootId : rootIds) { + abstractTreeBuildFactory.setRootId(rootId + ""); + newTree.addAll(abstractTreeBuildFactory.doTreeBuild(deptDTOS)); + } + + return newTree; + } + + @Transactional + @Override + public void createSysUserGroup(SysUserRiskGroup sysUserGroup, List userIds) { + this.baseMapper.insert(sysUserGroup); + GroupUserRelDTO relDTO = new GroupUserRelDTO(); + relDTO.setGroupId(sysUserGroup.getId()); + relDTO.setUserIds(userIds); + relUserService.batchAdd(relDTO); + } + + + /** + * 创建节点 + * + * @param userInfo 用户信息 + * @return + */ + private GroupDeptDTO createDeptDTO(User userInfo) { + GroupDeptDTO deptDTO = new GroupDeptDTO(); + deptDTO.setType(NODE_TYPE_USER); + deptDTO.setId(userInfo.getId()); + deptDTO.setPid(userInfo.getDeptId()); + deptDTO.setUserDTO(userInfo); + deptDTO.setName(userInfo.getName()); + deptDTO.setFullName(userInfo.getName()); + deptDTO.setUserId(userInfo.getId() + ""); + return deptDTO; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/tree/RiskGroupDefaultTreeBuildFactory.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/tree/RiskGroupDefaultTreeBuildFactory.java new file mode 100644 index 0000000..69c18ad --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/tree/RiskGroupDefaultTreeBuildFactory.java @@ -0,0 +1,30 @@ +package com.casic.missiles.modular.group.tree; + +import com.casic.missiles.core.treebuild.DefaultTreeBuildFactory; +import com.casic.missiles.model.tree.Tree; + +import java.util.ArrayList; +import java.util.List; + +public class RiskGroupDefaultTreeBuildFactory extends DefaultTreeBuildFactory { + private String rootId; + @Override + protected List afterBuild(List nodes) { + //去掉所有的二级节点 + ArrayList results = new ArrayList<>(); + for (T node : nodes) { + if (node.getNodeParentId().equals(rootId)) { + results.add(node); + } + } + return results; + } + + public String getRootId() { + return rootId; + } + + public void setRootId(String rootId) { + this.rootId = rootId; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/RiskGroupDeptDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/RiskGroupDeptDTO.java new file mode 100644 index 0000000..7f6c157 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/RiskGroupDeptDTO.java @@ -0,0 +1,61 @@ +package com.casic.missiles.modular.group.vo; + +import com.casic.missiles.model.tree.Tree; +import com.casic.missiles.modular.device.model.RiskPointInfo; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +@Data +public class RiskGroupDeptDTO implements Tree { + @ApiModelProperty("组织主键") + private Long id; + + @ApiModelProperty("父部门ID") + private Long pid; + + @ApiModelProperty("组织简称") + private String name; + + @ApiModelProperty("组织全称") + private String fullName; + + @ApiModelProperty("子节点") + private List children = new ArrayList<>(); + + @ApiModelProperty("节点类型(1 组织 2 人员)") + private String type; + + @ApiModelProperty("用户信息") + private User userDTO; + private String userId; + private RiskPointInfo riskPointInfo; + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + @Override + public String getNodeId() { + return id + ""; + } + + @Override + public String getNodeParentId() { + return pid + ""; + } + + @Override + public void setChildrenNodes(List childrenNodes) { + children.addAll(childrenNodes); + children = children.stream().distinct().collect(Collectors.toList()); + } +} \ No newline at end of file diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java new file mode 100644 index 0000000..1ca5eb1 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java @@ -0,0 +1,63 @@ +package com.casic.missiles.modular.device.enums; + +/** + * wvp设备类型转换 + * + * @author lwh + * @Date 2017年1月10日 下午9:54:13 + */ +public enum AvDeptEnum { + + DEPT0("0066", "801",0L), + DEPT1("0059", "699厂",1L), + DEPT2("0055", "283厂",1L), + DEPT3("0022", "201所",1L), + DEPT4("0027", "206所",1L), + DEPT5("0013", "23所",1L); + + String code; + String message; + Long deptId; + AvDeptEnum(String code, String message, Long deptId) { + this.code = code; + this.message = message; + this.deptId = deptId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public static AvDeptEnum valueOfCode(String value) { + if (value == null) { + return null; + } else { + for (AvDeptEnum ms : AvDeptEnum.values()) { + if (ms.getCode().equals(value)) { + return ms; + } + } + return null; + } + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java new file mode 100644 index 0000000..573d0e2 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.task; + +import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; + +public class Test { + public static void main(String[] args) { + System.out.println(AvStatusTypeEnum.valueOfType(new Integer(1)).getMessage()); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java new file mode 100644 index 0000000..7c06c67 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java @@ -0,0 +1,77 @@ +package com.casic.missiles.modular.device.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpSession; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class RiskSyncController extends BaseController { + @Resource + private IClientAuthService clientAuthService; + @Resource + private AbstractDeptService deptService; + @Resource + private AbstractUserService userService; + @PostMapping("/client/login") + @ResponseBody + public ResponseData login(@RequestBody RiskLoginForm deviceLoginForm, HttpSession session) { + return clientAuthService.login(deviceLoginForm, session); + } + + /** + * 全量组织信息读取 + * + * @return + */ + @PostMapping("/dept/list") + @ResponseBody + public ResponseDataDTO> dept() { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = deptService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量用户信息读取 + * + * @return + */ + @PostMapping("/user/list") + @ResponseBody + public ResponseDataDTO> user() { + //todo 此处租户拦截需移除 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量设备信息读取 + * + * @return + */ + @PostMapping("/device/list") + @ResponseBody + public ResponseDataDTO> device() { + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java new file mode 100644 index 0000000..5e5b890 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class UserSyncController extends BaseController { + + @Resource + private IBusDeviceInfoService busDeviceInfoService; + + /** + * 登录用户授权设备权限查看 + * @return + */ + @GetMapping("/device/permissions") + @ResponseBody + public ResponseDataDTO> devicePermissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } + + /** + * 登录用户风险点授权查询 + * @return + */ + @GetMapping("/permissions") + @ResponseBody + public ResponseDataDTO> permissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java new file mode 100644 index 0000000..07b8df8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +/** + * 设备登录接口 + */ +@Data +public class RiskLoginForm { + /** + * 设备编码 + */ + private String clientId; + + /** + * 时间戳 + */ + private Long time; + + /** + * 加密后数据 加密格式sn+时间戳 时效性为6小时 + */ + private String secret; + + /** + * 设备登录注册IP + */ + private String ip; + + /** + * 设备登录注册port + */ + private String port; +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java new file mode 100644 index 0000000..40fdb4b --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.device.service; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; + +import javax.servlet.http.HttpSession; + +public interface IClientAuthService { + /** + * @param deviceLoginForm + * @param session + * @return + */ + ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session); +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java new file mode 100644 index 0000000..576e857 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.device.service.impl; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import cn.hutool.jwt.JWT; +import cn.hutool.jwt.JWTUtil; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.util.IRiskCacheUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpSession; +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Service +public class ClientAuthServiceImpl implements IClientAuthService { + @Value("${casic.client.privateKey:MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALKcwHHOg0F6Zkq7GOVnOnTgvH9vSPXFFTOcEqOVBIBPBz7UNrEGkp1PhZ+oC4WVJAsDuot2e1fDZy9QS9HF92MmnYp9kuQRhGZjHctPnVZ0Kai5BES0ytHqPeauLyNXxOOS0YKYEUwpft4Z5Azw7bj3JWNvLrnTZvNld6FDvTslAgMBAAECgYAqN/kZLYpC+O6i7XSmDO95XwHPUXu6dDpdt5+EQR4OQh/hTwIaeAZB3uEj6vHGQomBfQEkI/5lsU97lIxHanbd+Hro7JyIhsGD5LR5XnZHVKzFiZW62OIU6FI9dlQNN8miiblnmyDwiMA3okaHl0O7qQjZ+IvY2csgmJc7AXpPpQJBAOhrhcfWFcgffj2O6HYNlBLFfbboc/ZzrEADDXKnxRSHlo5o8W+6gylG/L2NGtbag5S68B9VYzdkSQ1++5C+Ws8CQQDEu7h311PLEiKgqzGHpjzadQETmt/jMadaKQmT0TZwNVi6X8lR17U5hF8dAqZzUzr9kUC0HRIZhg4Uv1v3W3fLAkB4YPhxgJjXhjhEefg87Nt8vX1Xdx5Yz6CvpuUYNX0GHRQFvqUOUXQNtQ7CvorgLV1pc0lbcUZqMi8EJnj1hyJRAkEAjHXWm8GiMt+M15fCsi3vTq2xChVOekBuUsHv85iwvGZqJg7ThtpyqlEnM2g7/STUfkvhnXcQACclEI0blTy6BwJAPmFyhU+d0ejVpbc53TdrL2HqYYUHi/tTy/dtUa7lbypzdwwJ2M1Tv5PE8sQxr9tgMbebfxVb/RFKdiCCtzC4ng==}") + private String privateKey; + + @Override + public ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session) { + //固定秘钥解析 + try { + String str = RSAUtils.decrypt(deviceLoginForm.getSecret(), privateKey); + Long time = Long.valueOf(StrUtil.split(str, "_").get(1)); + //边缘盒子时差与服务时差不可超过24小时 + if (time == null || System.currentTimeMillis() - time > 3600 * 24 * 1000) { + return ResponseData.error("请求时间超时"); + } + deviceLoginForm.setTime(time); + } catch (Exception e) { + e.printStackTrace(); + return ResponseData.error("设备解析异常!"); + } + + try { + String token = this.createJwtToken(deviceLoginForm); + IRiskCacheUtil.put(token, token); + return ResponseData.success(token); + } catch (Exception e) { + log.error("设备登录异常:{}", e.getMessage()); + return ResponseData.error("登录异常,请联系管理员"); + } +} + /** + * token创建 + * + * @param loginForm 登录信息 + * @param device 设备信息 + * @return + * @throws Exception + */ + public String createJwtToken(RiskLoginForm loginForm) throws Exception { + Map payload = new HashMap<>(); + payload.put("clientId", loginForm.getClientId()); // 设备编号 + payload.put("time", loginForm.getTime()); // 请求时间 + + //RSA 解密 + String str = RSAUtils.decrypt(loginForm.getSecret(), privateKey); + String key = loginForm.getClientId()+"_" + loginForm.getTime() ; + if (!key.equals(str)) { + //秘钥验证失败 + throw new ServiceException(500,"秘钥验证失败"); + } + +// long exp = new Date().getTime() + 2 * 3600000; // 2小时后的时间戳 +// payload.put("exp", exp); + + // 创建JWT + String jwt = JWTUtil.createToken(payload, "token-203-202405".getBytes()); + + return jwt; + } + + /** + * token解析 + * + * @param jwtStr token + * @return + * @throws Exception + */ + public static RiskLoginForm parseToken(String jwtStr){ + JWT jwtObj = new JWTUtil().parseToken(jwtStr); + RiskLoginForm deviceLoginForm = new RiskLoginForm(); + deviceLoginForm.setClientId(Convert.toStr(jwtObj.getPayload("clientId"))); + return deviceLoginForm; + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java new file mode 100644 index 0000000..0e91ac8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.util; +import cn.hutool.cache.Cache; +import cn.hutool.cache.CacheUtil; +/** + * token有效 + */ +public class IRiskCacheUtil { + /** + * 1小时内不活跃 会踢掉 + */ + private static Cache fifoCache = CacheUtil.newFIFOCache(1000, 1000 * 60 * 60); + + public static void put(String key, String value) { + fifoCache.put(key, value); + } + + public static String get(String key) { + return fifoCache.get(key); + } + + public static void remove(String key) { + fifoCache.remove(key); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java new file mode 100644 index 0000000..805c32a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceGroupDict extends AbstractDictMap { + + @Override + public void init() { + //检索条件 + put("groupName", "分组名称"); + put("startTime", "起始时间"); + put("endTime", "结束时间"); + //新增修改属性 + put("cameraIds", "设备国标号"); + put("personIds", "人员主键集合"); + put("description","备注"); + put("id","主键"); + put("ids","主键集合"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java new file mode 100644 index 0000000..895fbd9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceQueryDict extends AbstractDictMap { + + @Override + public void init() { + put("devType", "类型查询"); + put("keyword", "设备名称"); + put("deptName", "所属单位"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java new file mode 100644 index 0000000..88da6df --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.device.util; + +public class DeviceScopeUtil { +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java new file mode 100644 index 0000000..2e3e478 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.device.controller; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.auth.dto.DeviceLoginForm; +import com.casic.missiles.modular.auth.util.ICacheUtil; +import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; +import com.casic.missiles.modular.device.service.IAlarmRecordService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +@Api(tags = "告警记录") +@RestController +@RequestMapping("/record") +public class AlarmUploadController extends BaseController { + + private final IAlarmRecordService alarmRecordService; + private final IDeviceAuthService deviceAuthService; + public AlarmUploadController(IAlarmRecordService alarmRecordService, IDeviceAuthService deviceAuthService) { + this.alarmRecordService = alarmRecordService; + this.deviceAuthService = deviceAuthService; + } + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } + @BussinessLog(value = "告警记录上报接口") + @ApiOperation(value = "告警记录上报接口") + @PostMapping(value = "/upload") + public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return createAuthError(); + } + alarmRecordService.upload(alarmRecord); + return ResponseDataDTO.success(); + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java new file mode 100644 index 0000000..3f1c189 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class RecognitionStreamDTO { + private Long id; + private String recognitionStreamFlag; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java new file mode 100644 index 0000000..fa5ae4a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java @@ -0,0 +1,167 @@ +package com.casic.missiles.modular.group.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IRiskPointInfoService; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.group.vo.SysRiskGroupPointVO; +import com.casic.missiles.modular.group.vo.SysRiskGroupRelUserVO; +import com.casic.missiles.modular.group.vo.SysRiskUserGroupVO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import com.casic.missiles.modular.system.vo.SysGroupRelUserVO; +import com.casic.missiles.modular.system.vo.SysUserGroupVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.ibatis.annotations.Param; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; + +/** + * 风险点组信息Controller + * + * @author lwh + * @date 2024-07-11 + */ +@Api(tags = "风险点组信息") +@RestController +@RequestMapping("/sys/risk/group") +public class SysUserRiskGroupController extends BaseController { + private final IRiskPointInfoService riskPointInfoService; + private final ISysUserRiskGroupService sysUserGroupService; + private final AbstractPermissionContext permissionContext; + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysUserRiskGroupController(IRiskPointInfoService riskPointInfoService, ISysUserRiskGroupService sysUserGroupService, AbstractPermissionContext permissionContext, ISysRiskGroupRelUserService sysGroupRelUserService) { + this.riskPointInfoService = riskPointInfoService; + this.sysUserGroupService = sysUserGroupService; + this.permissionContext = permissionContext; + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @BussinessLog(value = "风险点分组查询") + @ApiOperation(value = "风险点分组查询", hidden = true) + @GetMapping(value = "/list") + public ResponseDataDTO> list(SysRiskUserGroupVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysUserGroupService.list(query)); + } + + @BussinessLog(value = "分组人员列表查询") + @ApiOperation(value = "分组人员列表查询") + @GetMapping(value = "/groupUserList") + public ResponseDataDTO> groupUserList(SysRiskGroupRelUserVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysGroupRelUserService.list(query)); + } + + @BussinessLog(value = "风险点分组人员查询") + @ApiOperation(value = "风险点分组人员分页查询") + @GetMapping(value = "/groupUserPage") + public ResponseDataDTO> listPage(SysRiskGroupRelUserVO sysGroupRelUserVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysGroupRelUserVO.genQuery(); + List relUsers = sysGroupRelUserService.selectSysGroupRelUserPage(page, query); + page.setRecords(relUsers); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "用户分组批量新增") + @ApiOperation(value = "批量新增接口") + @PostMapping(value = "/batch-add") + public ResponseDataDTO batchAdd(@RequestBody GroupUserRelDTO relDTO) { + sysGroupRelUserService.batchAdd(relDTO); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组人员删除") + @ApiOperation(value = "用户组人员删除接口") + @GetMapping(value = "/user/delete") + public ResponseDataDTO userDel(@Param("用户组人员关联主键") String id) { + sysGroupRelUserService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "风险点分组分页查询") + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(SysRiskUserGroupVO sysUserGroupVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysUserGroupVO.genQuery(); + + List sysUserGroups = sysUserGroupService.selectSysUserGroupPage(page, query); + page.setRecords(sysUserGroups); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "风险点分组新增") + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.save(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组修改") + @ApiOperation(value = "修改接口") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.updateById(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组删除") + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + sysUserGroupService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "批量删除") + @ApiOperation(value = "批量删除", hidden = true) + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + sysUserGroupService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "详情查询") + @ApiOperation(value = "详情查询", hidden = true) + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(sysUserGroupService.getById(id)); + } + + @BussinessLog(value = "用户树") + @ApiOperation(value = "用户树查询") + @GetMapping(value = "/person/tree") + public ResponseDataDTO> personTree() { + return ResponseDataDTO.success(sysUserGroupService.personTree()); + } + + @BussinessLog(value = "风险点树查询") + @ApiOperation(value = "风险点树查询") + @GetMapping(value = "/tree") + public ResponseDataDTO> tree(String riskType) { + return ResponseDataDTO.success(riskPointInfoService.tree(riskType)); + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java new file mode 100644 index 0000000..419eb27 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备所属人员组 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupPointMapper extends BaseMapper { +/** +* 设备所属人员组 分页检索 +*/ +List selectSysGroupDevicePage(@Param("page") Page page, @Param("ew" ) QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java new file mode 100644 index 0000000..eb41227 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 组人员管理 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupRelUserMapper extends BaseMapper { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java new file mode 100644 index 0000000..e8352df --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.system.model.SysUserGroup; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 用户组信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysUserRiskGroupMapper extends BaseMapper { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml new file mode 100644 index 0000000..6fa6a4d --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + id , + group_id as groupId , + create_time as createTime , + target_Id as targetId + + + a.id , + a.group_id + as groupId , + a.create_time + as createTime , + a.target_Id + as targetId + + + + + + and group_id = #{request.groupId} + + + and device_id = #{request.deviceId} + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml new file mode 100644 index 0000000..a627546 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + id , + group_id as groupId , + user_id as userId , + create_time as createTime + + + a.id, + a.group_id + as groupId , + a.user_id + as userId , + a.create_time + as createTime + + + + + + and group_id = #{request.groupId} + + + and user_id = #{request.userId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml new file mode 100644 index 0000000..3245136 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + id, + group_name as groupName , + create_time as createTime , + dept_id as deptId , + create_id as createId + + + a.id,a.group_name as groupName , + a.create_time + as createTime , + a.dept_id + as deptId , + a.create_id + as createId,a.description + + + + + + and group_name like concat('%',#{request.groupName},'%') + + + and dept_id = #{request.deptId} + + + and create_id = #{request.createId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java new file mode 100644 index 0000000..e44328f --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class GroupRiskRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("风险点集合") + private List targetIds; + @ApiModelProperty("用户ID集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java new file mode 100644 index 0000000..f8758bf --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class RiskGroupUserRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("设备集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java new file mode 100644 index 0000000..b386d5b --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java @@ -0,0 +1,53 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 风险点所属组 sys_risk_group_point + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_risk_group_point") +public class SysRiskGroupPoint extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableId("id") + private Long id; + + @ApiModelProperty(value = "用户组ID", dataType = "Long") + @TableField("group_id") + private Long groupId; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty(value = "风险点ID", dataType = "Long") + @TableField("target_id") + private Long targetId; + + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; + + @Override + public String toString() { + return "SysGroupDevice{" + + "id=" + id + + "groupId=" + groupId + + "createTime=" + createTime + + "targetId=" + targetId + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java new file mode 100644 index 0000000..949caa3 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java @@ -0,0 +1,55 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 组人员管理对象 sys_group_rel_user + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_risk_group_rel_user") +public class SysRiskGroupRelUser extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + + @ApiModelProperty(value = "组ID", dataType = "Long") + @TableField("group_id") + private Long groupId; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + @TableField("user_id") + private Long userId; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + @ApiModelProperty(value = "用户姓名", dataType = "String") + @TableField(exist = false) + private String realName; + + @ApiModelProperty(value = "用户名", dataType = "String") + @TableField(exist = false) + private String account; + + @Override + public String toString() { + return "SysGroupRelUser{" + + "id=" + id + + "groupId=" + groupId + + "userId=" + userId + + "createTime=" + createTime + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java new file mode 100644 index 0000000..1b73dc0 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java @@ -0,0 +1,97 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 危险点分组组信息对象 sys_user_risk_group + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_user_risk_group") +public class SysUserRiskGroup extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableId("id") + private Long id; + + @ApiModelProperty(value = "组名称", dataType = "String", required = true) + @TableField("group_name") + private String groupName; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty(value = "所属组织(保留字段)", dataType = "Long") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty(value = "描述信息", dataType = "String") + @TableField("description") + private String description; + + @ApiModelProperty(value = "密级字典", dataType = "String") + @TableField("safe") + private int safe; + + @ApiModelProperty(value = "创建者ID", dataType = "Long") + @TableField("create_id") + private Long createId; + + + @ApiModelProperty(value = "类型(1 危险点 2 重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "Long") + @TableField("group_type") + private String groupType; + @TableField(exist = false) + private String groupTypeName; + /** + * 风险点集合 + */ + @ApiModelProperty(value = "风险点集合(逗号拼接)", dataType = "String") + @TableField(exist = false) + private String pointIds; + + @ApiModelProperty(value = "数量", dataType = "Long") + @TableField(exist = false) + private Integer targetNum; + /** + * 用户集合 + */ + @ApiModelProperty(value = "用户集合(逗号拼接)", dataType = "String") + @TableField(exist = false) + private String personIds; + + @ApiModelProperty(value = "用户名称", dataType = "String") + @TableField(exist = false) + private String realName; + + @ApiModelProperty(value = "用户名", dataType = "String") + @TableField(exist = false) + private String account; + + @ApiModelProperty(value = "密级字典名称", dataType = "String") + @TableField(exist = false) + private String safeName; + + @Override + public String toString() { + return "SysUserGroup{" + + "id=" + id + + "groupName=" + groupName + + "createTime=" + createTime + + "deptId=" + deptId + + "createId=" + createId + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java new file mode 100644 index 0000000..4657ce4 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.device.dto.GroupRelDTO; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; + +import java.util.List; + + +/** + *

+ * 设备所属人员组 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysRiskGroupPointService extends IService { + /** + * 设备所属人员组 分页检索 + */ + List selectSysGroupDevicePage(Page page, QueryWrapper query); + + /** + * 设备组批量新增 + * + * @param relDTO + */ + void batchAdd(GroupRiskRelDTO relDTO); + + + /** + * 增量更新 + * @param groupId + * @param deviceIds + */ + void batchIncremental(Long groupId, List deviceIds); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java new file mode 100644 index 0000000..591eef2 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; + +import java.util.List; + + +/** + *

+ * 组人员管理 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysRiskGroupRelUserService extends IService { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(Page page, QueryWrapper query); + + void batchAdd(GroupUserRelDTO relDTO); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java new file mode 100644 index 0000000..1e0889c --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; + +import java.util.List; + + +/** + *

+ * 用户组信息 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysUserRiskGroupService extends IService { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(Page page, QueryWrapper query); + + List personTree(); + + /** + * 创建用户组 + * + * @param sysUserGroup 用户组信息 + * @param userIds 用户信息 + */ + void createSysUserGroup(SysUserRiskGroup sysUserGroup, List userIds); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java new file mode 100644 index 0000000..6839887 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java @@ -0,0 +1,118 @@ +package com.casic.missiles.modular.group.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +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.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.group.dao.SysRiskGroupPointMapper; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import com.casic.missiles.modular.group.service.ISysRiskGroupPointService; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + + +/** + *

+ * 设备所属人员组 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysRiskGroupPointServiceImpl extends ServiceImpl implements ISysRiskGroupPointService { + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysRiskGroupPointServiceImpl(ISysRiskGroupRelUserService sysGroupRelUserService) { + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @Override + public List selectSysGroupDevicePage(Page page, QueryWrapper query) { + return this.baseMapper.selectSysGroupDevicePage(page, query); + } + + @Transactional + @Override + public void batchAdd(GroupRiskRelDTO relDTO) { + + if (CollectionUtil.isEmpty(relDTO.getTargetIds())) { + ServiceException serviceException = new ServiceException(500, "添加不能为空!"); + throw serviceException; + } + + //删除 + QueryWrapper query = new QueryWrapper<>(); + query.eq("group_id", relDTO.getGroupId()); + this.remove(query); + + //保存分组与危险点对应关系 + List groupDevices = new ArrayList<>(); + for (Long deviceId : relDTO.getTargetIds()) { + SysRiskGroupPoint sysGroupDevice = new SysRiskGroupPoint(); + sysGroupDevice.setTargetId(deviceId); + sysGroupDevice.setGroupId(relDTO.getGroupId()); + sysGroupDevice.setCreateTime(new Date()); + groupDevices.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(groupDevices); + + //批量保存风险点与用户关系 + GroupUserRelDTO groupUserRelDTO = new GroupUserRelDTO(); + groupUserRelDTO.setGroupId(relDTO.getGroupId()); + groupUserRelDTO.setUserIds(relDTO.getUserIds()); + sysGroupRelUserService.batchAdd(groupUserRelDTO); + + } + + @Override + public void batchIncremental(Long groupId, List deviceIds) { + List groupDevices = this.list(new LambdaQueryWrapper().eq(SysRiskGroupPoint::getGroupId, groupId)); + if (CollectionUtil.isEmpty(groupDevices)) { + saveDevices(groupId, deviceIds); + } else { + List oldDevices = groupDevices.stream().map(SysRiskGroupPoint::getTargetId).collect(Collectors.toList()); + List delIds = CollectionUtil.subtractToList(oldDevices, deviceIds); + List saveDevices = CollectionUtil.subtractToList(deviceIds, oldDevices); + + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.eq(SysRiskGroupPoint::getGroupId, groupId); + delQuery.in(SysRiskGroupPoint::getTargetId, delIds); + if (CollectionUtil.isNotEmpty(delIds)) { + this.remove(delQuery); + } + saveDevices(groupId, saveDevices); + } + } + + private void saveDevices(Long groupId, List saveDevices) { + List saves = new ArrayList<>(); + for (Long deviceId : saveDevices) { + SysRiskGroupPoint sysGroupDevice = new SysRiskGroupPoint(); + sysGroupDevice.setTargetId(deviceId); + sysGroupDevice.setGroupId(groupId); + sysGroupDevice.setCreateTime(new Date()); + saves.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(saves); + } + + private void saveOrUpdateBatchList(List groupDevices) { + for (SysRiskGroupPoint groupDevice : groupDevices) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysRiskGroupPoint::getGroupId, groupDevice.getGroupId()); + query.eq(SysRiskGroupPoint::getTargetId, groupDevice.getTargetId()); + this.saveOrUpdate(groupDevice, query); + } + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java new file mode 100644 index 0000000..83cd76a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.group.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +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.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.group.dao.SysRiskGroupPointMapper; +import com.casic.missiles.modular.group.dao.SysRiskGroupRelUserMapper; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.system.dao.SysGroupRelUserMapper; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + + +/** + *

+ * 组人员管理 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysRiskGroupRelUserServiceImpl extends ServiceImpl implements ISysRiskGroupRelUserService { + @Override + public List selectSysGroupRelUserPage(Page page, QueryWrapper query) { + return this.baseMapper.selectSysGroupRelUserPage(page, query); + } + + @Transactional + @Override + public void batchAdd(GroupUserRelDTO relDTO) { + if (CollectionUtil.isEmpty(relDTO.getUserIds())) { + ServiceException serviceException = new ServiceException(500, "添加不能为空!"); + throw serviceException; + } + //删除 + QueryWrapper query = new QueryWrapper<>(); + query.eq("group_id",relDTO.getGroupId()); + this.remove(query); + //添加设备信息 + List groupDevices = new ArrayList<>(); + for (Long deviceId : relDTO.getUserIds()) { + SysRiskGroupRelUser sysGroupDevice = new SysRiskGroupRelUser(); + sysGroupDevice.setUserId(deviceId); + sysGroupDevice.setGroupId(relDTO.getGroupId()); + sysGroupDevice.setCreateTime(new Date()); + groupDevices.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(groupDevices); + } + + private void saveOrUpdateBatchList(List groupDevices) { + for (SysRiskGroupRelUser groupDevice : groupDevices) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysRiskGroupRelUser::getGroupId, groupDevice.getGroupId()); + query.eq(SysRiskGroupRelUser::getUserId, groupDevice.getUserId()); + this.saveOrUpdate(groupDevice, query); + } + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java new file mode 100644 index 0000000..b3bb9a8 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java @@ -0,0 +1,246 @@ +package com.casic.missiles.modular.group.service.impl; + +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.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.modular.data.constants.DataConstants; +import com.casic.missiles.modular.group.dao.SysUserRiskGroupMapper; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupPointService; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.tree.RiskGroupDefaultTreeBuildFactory; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + + +/** + *

+ * 用户组信息 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysUserRiskGroupServiceImpl extends ServiceImpl implements ISysUserRiskGroupService { + @Lazy + @Resource + private ISysRiskGroupPointService sysRiskGroupPointService; + private final AbstractPermissionContext abstractPermissionContext; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_USER = "2"; + private final AbstractDictService dictService; + @Lazy + @Resource + private ISysRiskGroupRelUserService relUserService; + + public SysUserRiskGroupServiceImpl(AbstractPermissionContext abstractPermissionContext, AbstractDictService dictService) { + this.abstractPermissionContext = abstractPermissionContext; + this.dictService = dictService; + } + + @Override + public List selectSysUserGroupPage(Page page, QueryWrapper query) { + //分组过滤当前权限 + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + query.in("a.dept_id", dataScope.getDeptIds()); + } + List riskGroups = this.baseMapper.selectSysUserGroupPage(page, query); + for (SysUserRiskGroup riskGroup : riskGroups) { + wrapperInfo(riskGroup); + } + return riskGroups; + } + + private void wrapperInfo(SysUserRiskGroup riskGroup) { + riskGroup.setSafeName(dictService.getDictNameByCode(DataConstants.DICT_SECRET_LEVEL_TYPE, riskGroup.getSafe() + "")); + //查询关联设备 + LambdaQueryWrapper deviceQuery = new LambdaQueryWrapper<>(); + deviceQuery.eq(SysRiskGroupPoint::getGroupId, riskGroup.getId()); + List devices = sysRiskGroupPointService.list(deviceQuery); + if (devices != null) { + List deviceList = devices.stream().map(SysRiskGroupPoint::getTargetId).collect(Collectors.toList()); + riskGroup.setPointIds(StrUtil.join(",", deviceList)); + riskGroup.setTargetNum(deviceList.size()); + } + + riskGroup.setGroupTypeName(dictService.getDictNameByCode(DataConstants.dangerAssessmentType, riskGroup.getGroupType())); + //查询关联人员 + LambdaQueryWrapper personQuery = new LambdaQueryWrapper<>(); + personQuery.eq(SysRiskGroupRelUser::getGroupId, riskGroup.getId()); + List persons = relUserService.list(personQuery); + if (persons != null) { + List personIds = persons.stream().map(SysRiskGroupRelUser::getUserId).collect(Collectors.toList()); + riskGroup.setPersonIds(StrUtil.join(",", personIds)); + } + } + + private void setGroupInfo(SysUserRiskGroup entity) { + if (StrUtil.isNotEmpty(entity.getPointIds())) { + entity.setTargetNum(StrUtil.split(entity.getPointIds(), ",").size()); + } else { + entity.setTargetNum(0); + } + } + + @Override + public boolean save(SysUserRiskGroup entity) { + AuthUser authUser = abstractPermissionContext.getAuthService().getLoginUser(); + entity.setCreateTime(new Date()); + entity.setCreateId(authUser.getId()); + if (entity.getDeptId() == null) { + entity.setDeptId(authUser.getDeptId()); + } + setGroupInfo(entity); + super.save(entity); + batchSave(entity, entity.getId()); + return true; + } + + @Override + public boolean updateById(SysUserRiskGroup entity) { + AuthUser authUser = abstractPermissionContext.getAuthService().getLoginUser(); + entity.setCreateTime(new Date()); + entity.setCreateId(authUser.getId()); + if (entity.getDeptId() == null) { + entity.setDeptId(authUser.getDeptId()); + } + setGroupInfo(entity); + super.updateById(entity); + batchSave(entity, entity.getId()); + return true; + } + + /** + * 数据转换 + * + * @param entity + * @param groupId + */ + private void batchSave(SysUserRiskGroup entity, Long groupId) { + GroupRiskRelDTO groupRelDTO = new GroupRiskRelDTO(); + groupRelDTO.setGroupId(groupId); + if (StrUtil.isNotEmpty(entity.getPointIds())) { + long[] longs = StrUtil.splitToLong(entity.getPointIds(), ","); + List devices = new ArrayList<>(); + for (long aLong : longs) { + devices.add(aLong); + } + groupRelDTO.setTargetIds(devices); + } + if (StrUtil.isNotEmpty(entity.getPersonIds())) { + List persons = new ArrayList<>(); + long[] longs = StrUtil.splitToLong(entity.getPersonIds(), ","); + + for (long aLong : longs) { + persons.add(aLong); + } + groupRelDTO.setUserIds(persons); + } + sysRiskGroupPointService.batchAdd(groupRelDTO); + } + + @Override + public List personTree() { + + //查询可见组织 + DataScope scope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + + LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { + deptQuery.in(Dept::getId, scope.getDeptIds()); + } + deptQuery.orderByAsc(Dept::getNum); + + List deptList = abstractPermissionContext.getDeptService().list(deptQuery); + List deptDTOS = new ArrayList<>(); + List rootIds = new ArrayList<>(); + Set normalIds = new HashSet<>(); + for (Dept dept : deptList) { + RiskGroupDeptDTO deptDTO = new RiskGroupDeptDTO(); + deptDTO.setPid(dept.getPid()); + deptDTO.setId(dept.getId()); + deptDTO.setFullName(dept.getFullName()); + deptDTO.setName(dept.getSimpleName()); + deptDTOS.add(deptDTO); + deptDTO.setType(NODE_TYPE_DEPT); + normalIds.add(dept.getId()); + + //挂载设备信息 + LambdaQueryWrapper deviceQuery = new LambdaQueryWrapper<>(); + deviceQuery.eq(User::getDeptId, deptDTO.getId()); + deviceQuery.eq(User::getStatus, "1"); + List deviceInfos = abstractPermissionContext.getUserService().list(deviceQuery); + + deptDTO.setChildrenNodes(deviceInfos.stream().map(this::createDeptDTO).collect(Collectors.toList())); + } + + for (RiskGroupDeptDTO deptDTO : deptDTOS) { + if (!normalIds.contains(deptDTO.getPid())) { + rootIds.add(deptDTO.getPid()); + } + } + + //过滤根节点,支持多根展示 + RiskGroupDefaultTreeBuildFactory abstractTreeBuildFactory = new RiskGroupDefaultTreeBuildFactory(); + List newTree = new ArrayList<>(); + rootIds = rootIds.stream().distinct().collect(Collectors.toList()); + for (Long rootId : rootIds) { + abstractTreeBuildFactory.setRootId(rootId + ""); + newTree.addAll(abstractTreeBuildFactory.doTreeBuild(deptDTOS)); + } + + return newTree; + } + + @Transactional + @Override + public void createSysUserGroup(SysUserRiskGroup sysUserGroup, List userIds) { + this.baseMapper.insert(sysUserGroup); + GroupUserRelDTO relDTO = new GroupUserRelDTO(); + relDTO.setGroupId(sysUserGroup.getId()); + relDTO.setUserIds(userIds); + relUserService.batchAdd(relDTO); + } + + + /** + * 创建节点 + * + * @param userInfo 用户信息 + * @return + */ + private GroupDeptDTO createDeptDTO(User userInfo) { + GroupDeptDTO deptDTO = new GroupDeptDTO(); + deptDTO.setType(NODE_TYPE_USER); + deptDTO.setId(userInfo.getId()); + deptDTO.setPid(userInfo.getDeptId()); + deptDTO.setUserDTO(userInfo); + deptDTO.setName(userInfo.getName()); + deptDTO.setFullName(userInfo.getName()); + deptDTO.setUserId(userInfo.getId() + ""); + return deptDTO; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/tree/RiskGroupDefaultTreeBuildFactory.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/tree/RiskGroupDefaultTreeBuildFactory.java new file mode 100644 index 0000000..69c18ad --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/tree/RiskGroupDefaultTreeBuildFactory.java @@ -0,0 +1,30 @@ +package com.casic.missiles.modular.group.tree; + +import com.casic.missiles.core.treebuild.DefaultTreeBuildFactory; +import com.casic.missiles.model.tree.Tree; + +import java.util.ArrayList; +import java.util.List; + +public class RiskGroupDefaultTreeBuildFactory extends DefaultTreeBuildFactory { + private String rootId; + @Override + protected List afterBuild(List nodes) { + //去掉所有的二级节点 + ArrayList results = new ArrayList<>(); + for (T node : nodes) { + if (node.getNodeParentId().equals(rootId)) { + results.add(node); + } + } + return results; + } + + public String getRootId() { + return rootId; + } + + public void setRootId(String rootId) { + this.rootId = rootId; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/RiskGroupDeptDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/RiskGroupDeptDTO.java new file mode 100644 index 0000000..7f6c157 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/RiskGroupDeptDTO.java @@ -0,0 +1,61 @@ +package com.casic.missiles.modular.group.vo; + +import com.casic.missiles.model.tree.Tree; +import com.casic.missiles.modular.device.model.RiskPointInfo; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +@Data +public class RiskGroupDeptDTO implements Tree { + @ApiModelProperty("组织主键") + private Long id; + + @ApiModelProperty("父部门ID") + private Long pid; + + @ApiModelProperty("组织简称") + private String name; + + @ApiModelProperty("组织全称") + private String fullName; + + @ApiModelProperty("子节点") + private List children = new ArrayList<>(); + + @ApiModelProperty("节点类型(1 组织 2 人员)") + private String type; + + @ApiModelProperty("用户信息") + private User userDTO; + private String userId; + private RiskPointInfo riskPointInfo; + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + @Override + public String getNodeId() { + return id + ""; + } + + @Override + public String getNodeParentId() { + return pid + ""; + } + + @Override + public void setChildrenNodes(List childrenNodes) { + children.addAll(childrenNodes); + children = children.stream().distinct().collect(Collectors.toList()); + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupPointVO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupPointVO.java new file mode 100644 index 0000000..3f6ca41 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupPointVO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.group.vo; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 风险点所属人员组对象VO + * + * @author lwh + * @date 2024-07-11 + */ +@Data +public class SysRiskGroupPointVO { + private static final long serialVersionUID = 1L; + + + @ApiModelProperty(value = "用户组ID", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备ID", dataType = "Long") + private Long targetId; + + public QueryWrapper genQuery() { + QueryWrapper query = new QueryWrapper<>(); + if (groupId != null) { + query.eq("group_id", groupId); + } + if (targetId != null) { + query.eq("target_id", targetId); + } + return query; + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java new file mode 100644 index 0000000..1ca5eb1 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java @@ -0,0 +1,63 @@ +package com.casic.missiles.modular.device.enums; + +/** + * wvp设备类型转换 + * + * @author lwh + * @Date 2017年1月10日 下午9:54:13 + */ +public enum AvDeptEnum { + + DEPT0("0066", "801",0L), + DEPT1("0059", "699厂",1L), + DEPT2("0055", "283厂",1L), + DEPT3("0022", "201所",1L), + DEPT4("0027", "206所",1L), + DEPT5("0013", "23所",1L); + + String code; + String message; + Long deptId; + AvDeptEnum(String code, String message, Long deptId) { + this.code = code; + this.message = message; + this.deptId = deptId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public static AvDeptEnum valueOfCode(String value) { + if (value == null) { + return null; + } else { + for (AvDeptEnum ms : AvDeptEnum.values()) { + if (ms.getCode().equals(value)) { + return ms; + } + } + return null; + } + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java new file mode 100644 index 0000000..573d0e2 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.task; + +import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; + +public class Test { + public static void main(String[] args) { + System.out.println(AvStatusTypeEnum.valueOfType(new Integer(1)).getMessage()); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java new file mode 100644 index 0000000..7c06c67 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java @@ -0,0 +1,77 @@ +package com.casic.missiles.modular.device.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpSession; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class RiskSyncController extends BaseController { + @Resource + private IClientAuthService clientAuthService; + @Resource + private AbstractDeptService deptService; + @Resource + private AbstractUserService userService; + @PostMapping("/client/login") + @ResponseBody + public ResponseData login(@RequestBody RiskLoginForm deviceLoginForm, HttpSession session) { + return clientAuthService.login(deviceLoginForm, session); + } + + /** + * 全量组织信息读取 + * + * @return + */ + @PostMapping("/dept/list") + @ResponseBody + public ResponseDataDTO> dept() { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = deptService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量用户信息读取 + * + * @return + */ + @PostMapping("/user/list") + @ResponseBody + public ResponseDataDTO> user() { + //todo 此处租户拦截需移除 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量设备信息读取 + * + * @return + */ + @PostMapping("/device/list") + @ResponseBody + public ResponseDataDTO> device() { + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java new file mode 100644 index 0000000..5e5b890 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class UserSyncController extends BaseController { + + @Resource + private IBusDeviceInfoService busDeviceInfoService; + + /** + * 登录用户授权设备权限查看 + * @return + */ + @GetMapping("/device/permissions") + @ResponseBody + public ResponseDataDTO> devicePermissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } + + /** + * 登录用户风险点授权查询 + * @return + */ + @GetMapping("/permissions") + @ResponseBody + public ResponseDataDTO> permissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java new file mode 100644 index 0000000..07b8df8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +/** + * 设备登录接口 + */ +@Data +public class RiskLoginForm { + /** + * 设备编码 + */ + private String clientId; + + /** + * 时间戳 + */ + private Long time; + + /** + * 加密后数据 加密格式sn+时间戳 时效性为6小时 + */ + private String secret; + + /** + * 设备登录注册IP + */ + private String ip; + + /** + * 设备登录注册port + */ + private String port; +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java new file mode 100644 index 0000000..40fdb4b --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.device.service; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; + +import javax.servlet.http.HttpSession; + +public interface IClientAuthService { + /** + * @param deviceLoginForm + * @param session + * @return + */ + ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session); +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java new file mode 100644 index 0000000..576e857 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.device.service.impl; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import cn.hutool.jwt.JWT; +import cn.hutool.jwt.JWTUtil; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.util.IRiskCacheUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpSession; +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Service +public class ClientAuthServiceImpl implements IClientAuthService { + @Value("${casic.client.privateKey:MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALKcwHHOg0F6Zkq7GOVnOnTgvH9vSPXFFTOcEqOVBIBPBz7UNrEGkp1PhZ+oC4WVJAsDuot2e1fDZy9QS9HF92MmnYp9kuQRhGZjHctPnVZ0Kai5BES0ytHqPeauLyNXxOOS0YKYEUwpft4Z5Azw7bj3JWNvLrnTZvNld6FDvTslAgMBAAECgYAqN/kZLYpC+O6i7XSmDO95XwHPUXu6dDpdt5+EQR4OQh/hTwIaeAZB3uEj6vHGQomBfQEkI/5lsU97lIxHanbd+Hro7JyIhsGD5LR5XnZHVKzFiZW62OIU6FI9dlQNN8miiblnmyDwiMA3okaHl0O7qQjZ+IvY2csgmJc7AXpPpQJBAOhrhcfWFcgffj2O6HYNlBLFfbboc/ZzrEADDXKnxRSHlo5o8W+6gylG/L2NGtbag5S68B9VYzdkSQ1++5C+Ws8CQQDEu7h311PLEiKgqzGHpjzadQETmt/jMadaKQmT0TZwNVi6X8lR17U5hF8dAqZzUzr9kUC0HRIZhg4Uv1v3W3fLAkB4YPhxgJjXhjhEefg87Nt8vX1Xdx5Yz6CvpuUYNX0GHRQFvqUOUXQNtQ7CvorgLV1pc0lbcUZqMi8EJnj1hyJRAkEAjHXWm8GiMt+M15fCsi3vTq2xChVOekBuUsHv85iwvGZqJg7ThtpyqlEnM2g7/STUfkvhnXcQACclEI0blTy6BwJAPmFyhU+d0ejVpbc53TdrL2HqYYUHi/tTy/dtUa7lbypzdwwJ2M1Tv5PE8sQxr9tgMbebfxVb/RFKdiCCtzC4ng==}") + private String privateKey; + + @Override + public ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session) { + //固定秘钥解析 + try { + String str = RSAUtils.decrypt(deviceLoginForm.getSecret(), privateKey); + Long time = Long.valueOf(StrUtil.split(str, "_").get(1)); + //边缘盒子时差与服务时差不可超过24小时 + if (time == null || System.currentTimeMillis() - time > 3600 * 24 * 1000) { + return ResponseData.error("请求时间超时"); + } + deviceLoginForm.setTime(time); + } catch (Exception e) { + e.printStackTrace(); + return ResponseData.error("设备解析异常!"); + } + + try { + String token = this.createJwtToken(deviceLoginForm); + IRiskCacheUtil.put(token, token); + return ResponseData.success(token); + } catch (Exception e) { + log.error("设备登录异常:{}", e.getMessage()); + return ResponseData.error("登录异常,请联系管理员"); + } +} + /** + * token创建 + * + * @param loginForm 登录信息 + * @param device 设备信息 + * @return + * @throws Exception + */ + public String createJwtToken(RiskLoginForm loginForm) throws Exception { + Map payload = new HashMap<>(); + payload.put("clientId", loginForm.getClientId()); // 设备编号 + payload.put("time", loginForm.getTime()); // 请求时间 + + //RSA 解密 + String str = RSAUtils.decrypt(loginForm.getSecret(), privateKey); + String key = loginForm.getClientId()+"_" + loginForm.getTime() ; + if (!key.equals(str)) { + //秘钥验证失败 + throw new ServiceException(500,"秘钥验证失败"); + } + +// long exp = new Date().getTime() + 2 * 3600000; // 2小时后的时间戳 +// payload.put("exp", exp); + + // 创建JWT + String jwt = JWTUtil.createToken(payload, "token-203-202405".getBytes()); + + return jwt; + } + + /** + * token解析 + * + * @param jwtStr token + * @return + * @throws Exception + */ + public static RiskLoginForm parseToken(String jwtStr){ + JWT jwtObj = new JWTUtil().parseToken(jwtStr); + RiskLoginForm deviceLoginForm = new RiskLoginForm(); + deviceLoginForm.setClientId(Convert.toStr(jwtObj.getPayload("clientId"))); + return deviceLoginForm; + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java new file mode 100644 index 0000000..0e91ac8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.util; +import cn.hutool.cache.Cache; +import cn.hutool.cache.CacheUtil; +/** + * token有效 + */ +public class IRiskCacheUtil { + /** + * 1小时内不活跃 会踢掉 + */ + private static Cache fifoCache = CacheUtil.newFIFOCache(1000, 1000 * 60 * 60); + + public static void put(String key, String value) { + fifoCache.put(key, value); + } + + public static String get(String key) { + return fifoCache.get(key); + } + + public static void remove(String key) { + fifoCache.remove(key); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java new file mode 100644 index 0000000..805c32a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceGroupDict extends AbstractDictMap { + + @Override + public void init() { + //检索条件 + put("groupName", "分组名称"); + put("startTime", "起始时间"); + put("endTime", "结束时间"); + //新增修改属性 + put("cameraIds", "设备国标号"); + put("personIds", "人员主键集合"); + put("description","备注"); + put("id","主键"); + put("ids","主键集合"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java new file mode 100644 index 0000000..895fbd9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceQueryDict extends AbstractDictMap { + + @Override + public void init() { + put("devType", "类型查询"); + put("keyword", "设备名称"); + put("deptName", "所属单位"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java new file mode 100644 index 0000000..88da6df --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.device.util; + +public class DeviceScopeUtil { +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java new file mode 100644 index 0000000..2e3e478 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.device.controller; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.auth.dto.DeviceLoginForm; +import com.casic.missiles.modular.auth.util.ICacheUtil; +import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; +import com.casic.missiles.modular.device.service.IAlarmRecordService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +@Api(tags = "告警记录") +@RestController +@RequestMapping("/record") +public class AlarmUploadController extends BaseController { + + private final IAlarmRecordService alarmRecordService; + private final IDeviceAuthService deviceAuthService; + public AlarmUploadController(IAlarmRecordService alarmRecordService, IDeviceAuthService deviceAuthService) { + this.alarmRecordService = alarmRecordService; + this.deviceAuthService = deviceAuthService; + } + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } + @BussinessLog(value = "告警记录上报接口") + @ApiOperation(value = "告警记录上报接口") + @PostMapping(value = "/upload") + public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return createAuthError(); + } + alarmRecordService.upload(alarmRecord); + return ResponseDataDTO.success(); + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java new file mode 100644 index 0000000..3f1c189 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class RecognitionStreamDTO { + private Long id; + private String recognitionStreamFlag; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java new file mode 100644 index 0000000..fa5ae4a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java @@ -0,0 +1,167 @@ +package com.casic.missiles.modular.group.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IRiskPointInfoService; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.group.vo.SysRiskGroupPointVO; +import com.casic.missiles.modular.group.vo.SysRiskGroupRelUserVO; +import com.casic.missiles.modular.group.vo.SysRiskUserGroupVO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import com.casic.missiles.modular.system.vo.SysGroupRelUserVO; +import com.casic.missiles.modular.system.vo.SysUserGroupVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.ibatis.annotations.Param; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; + +/** + * 风险点组信息Controller + * + * @author lwh + * @date 2024-07-11 + */ +@Api(tags = "风险点组信息") +@RestController +@RequestMapping("/sys/risk/group") +public class SysUserRiskGroupController extends BaseController { + private final IRiskPointInfoService riskPointInfoService; + private final ISysUserRiskGroupService sysUserGroupService; + private final AbstractPermissionContext permissionContext; + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysUserRiskGroupController(IRiskPointInfoService riskPointInfoService, ISysUserRiskGroupService sysUserGroupService, AbstractPermissionContext permissionContext, ISysRiskGroupRelUserService sysGroupRelUserService) { + this.riskPointInfoService = riskPointInfoService; + this.sysUserGroupService = sysUserGroupService; + this.permissionContext = permissionContext; + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @BussinessLog(value = "风险点分组查询") + @ApiOperation(value = "风险点分组查询", hidden = true) + @GetMapping(value = "/list") + public ResponseDataDTO> list(SysRiskUserGroupVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysUserGroupService.list(query)); + } + + @BussinessLog(value = "分组人员列表查询") + @ApiOperation(value = "分组人员列表查询") + @GetMapping(value = "/groupUserList") + public ResponseDataDTO> groupUserList(SysRiskGroupRelUserVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysGroupRelUserService.list(query)); + } + + @BussinessLog(value = "风险点分组人员查询") + @ApiOperation(value = "风险点分组人员分页查询") + @GetMapping(value = "/groupUserPage") + public ResponseDataDTO> listPage(SysRiskGroupRelUserVO sysGroupRelUserVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysGroupRelUserVO.genQuery(); + List relUsers = sysGroupRelUserService.selectSysGroupRelUserPage(page, query); + page.setRecords(relUsers); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "用户分组批量新增") + @ApiOperation(value = "批量新增接口") + @PostMapping(value = "/batch-add") + public ResponseDataDTO batchAdd(@RequestBody GroupUserRelDTO relDTO) { + sysGroupRelUserService.batchAdd(relDTO); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组人员删除") + @ApiOperation(value = "用户组人员删除接口") + @GetMapping(value = "/user/delete") + public ResponseDataDTO userDel(@Param("用户组人员关联主键") String id) { + sysGroupRelUserService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "风险点分组分页查询") + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(SysRiskUserGroupVO sysUserGroupVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysUserGroupVO.genQuery(); + + List sysUserGroups = sysUserGroupService.selectSysUserGroupPage(page, query); + page.setRecords(sysUserGroups); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "风险点分组新增") + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.save(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组修改") + @ApiOperation(value = "修改接口") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.updateById(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组删除") + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + sysUserGroupService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "批量删除") + @ApiOperation(value = "批量删除", hidden = true) + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + sysUserGroupService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "详情查询") + @ApiOperation(value = "详情查询", hidden = true) + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(sysUserGroupService.getById(id)); + } + + @BussinessLog(value = "用户树") + @ApiOperation(value = "用户树查询") + @GetMapping(value = "/person/tree") + public ResponseDataDTO> personTree() { + return ResponseDataDTO.success(sysUserGroupService.personTree()); + } + + @BussinessLog(value = "风险点树查询") + @ApiOperation(value = "风险点树查询") + @GetMapping(value = "/tree") + public ResponseDataDTO> tree(String riskType) { + return ResponseDataDTO.success(riskPointInfoService.tree(riskType)); + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java new file mode 100644 index 0000000..419eb27 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备所属人员组 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupPointMapper extends BaseMapper { +/** +* 设备所属人员组 分页检索 +*/ +List selectSysGroupDevicePage(@Param("page") Page page, @Param("ew" ) QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java new file mode 100644 index 0000000..eb41227 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 组人员管理 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupRelUserMapper extends BaseMapper { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java new file mode 100644 index 0000000..e8352df --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.system.model.SysUserGroup; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 用户组信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysUserRiskGroupMapper extends BaseMapper { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml new file mode 100644 index 0000000..6fa6a4d --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + id , + group_id as groupId , + create_time as createTime , + target_Id as targetId + + + a.id , + a.group_id + as groupId , + a.create_time + as createTime , + a.target_Id + as targetId + + + + + + and group_id = #{request.groupId} + + + and device_id = #{request.deviceId} + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml new file mode 100644 index 0000000..a627546 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + id , + group_id as groupId , + user_id as userId , + create_time as createTime + + + a.id, + a.group_id + as groupId , + a.user_id + as userId , + a.create_time + as createTime + + + + + + and group_id = #{request.groupId} + + + and user_id = #{request.userId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml new file mode 100644 index 0000000..3245136 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + id, + group_name as groupName , + create_time as createTime , + dept_id as deptId , + create_id as createId + + + a.id,a.group_name as groupName , + a.create_time + as createTime , + a.dept_id + as deptId , + a.create_id + as createId,a.description + + + + + + and group_name like concat('%',#{request.groupName},'%') + + + and dept_id = #{request.deptId} + + + and create_id = #{request.createId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java new file mode 100644 index 0000000..e44328f --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class GroupRiskRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("风险点集合") + private List targetIds; + @ApiModelProperty("用户ID集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java new file mode 100644 index 0000000..f8758bf --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class RiskGroupUserRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("设备集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java new file mode 100644 index 0000000..b386d5b --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java @@ -0,0 +1,53 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 风险点所属组 sys_risk_group_point + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_risk_group_point") +public class SysRiskGroupPoint extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableId("id") + private Long id; + + @ApiModelProperty(value = "用户组ID", dataType = "Long") + @TableField("group_id") + private Long groupId; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty(value = "风险点ID", dataType = "Long") + @TableField("target_id") + private Long targetId; + + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; + + @Override + public String toString() { + return "SysGroupDevice{" + + "id=" + id + + "groupId=" + groupId + + "createTime=" + createTime + + "targetId=" + targetId + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java new file mode 100644 index 0000000..949caa3 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java @@ -0,0 +1,55 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 组人员管理对象 sys_group_rel_user + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_risk_group_rel_user") +public class SysRiskGroupRelUser extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + + @ApiModelProperty(value = "组ID", dataType = "Long") + @TableField("group_id") + private Long groupId; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + @TableField("user_id") + private Long userId; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + @ApiModelProperty(value = "用户姓名", dataType = "String") + @TableField(exist = false) + private String realName; + + @ApiModelProperty(value = "用户名", dataType = "String") + @TableField(exist = false) + private String account; + + @Override + public String toString() { + return "SysGroupRelUser{" + + "id=" + id + + "groupId=" + groupId + + "userId=" + userId + + "createTime=" + createTime + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java new file mode 100644 index 0000000..1b73dc0 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java @@ -0,0 +1,97 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 危险点分组组信息对象 sys_user_risk_group + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_user_risk_group") +public class SysUserRiskGroup extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableId("id") + private Long id; + + @ApiModelProperty(value = "组名称", dataType = "String", required = true) + @TableField("group_name") + private String groupName; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty(value = "所属组织(保留字段)", dataType = "Long") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty(value = "描述信息", dataType = "String") + @TableField("description") + private String description; + + @ApiModelProperty(value = "密级字典", dataType = "String") + @TableField("safe") + private int safe; + + @ApiModelProperty(value = "创建者ID", dataType = "Long") + @TableField("create_id") + private Long createId; + + + @ApiModelProperty(value = "类型(1 危险点 2 重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "Long") + @TableField("group_type") + private String groupType; + @TableField(exist = false) + private String groupTypeName; + /** + * 风险点集合 + */ + @ApiModelProperty(value = "风险点集合(逗号拼接)", dataType = "String") + @TableField(exist = false) + private String pointIds; + + @ApiModelProperty(value = "数量", dataType = "Long") + @TableField(exist = false) + private Integer targetNum; + /** + * 用户集合 + */ + @ApiModelProperty(value = "用户集合(逗号拼接)", dataType = "String") + @TableField(exist = false) + private String personIds; + + @ApiModelProperty(value = "用户名称", dataType = "String") + @TableField(exist = false) + private String realName; + + @ApiModelProperty(value = "用户名", dataType = "String") + @TableField(exist = false) + private String account; + + @ApiModelProperty(value = "密级字典名称", dataType = "String") + @TableField(exist = false) + private String safeName; + + @Override + public String toString() { + return "SysUserGroup{" + + "id=" + id + + "groupName=" + groupName + + "createTime=" + createTime + + "deptId=" + deptId + + "createId=" + createId + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java new file mode 100644 index 0000000..4657ce4 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.device.dto.GroupRelDTO; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; + +import java.util.List; + + +/** + *

+ * 设备所属人员组 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysRiskGroupPointService extends IService { + /** + * 设备所属人员组 分页检索 + */ + List selectSysGroupDevicePage(Page page, QueryWrapper query); + + /** + * 设备组批量新增 + * + * @param relDTO + */ + void batchAdd(GroupRiskRelDTO relDTO); + + + /** + * 增量更新 + * @param groupId + * @param deviceIds + */ + void batchIncremental(Long groupId, List deviceIds); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java new file mode 100644 index 0000000..591eef2 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; + +import java.util.List; + + +/** + *

+ * 组人员管理 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysRiskGroupRelUserService extends IService { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(Page page, QueryWrapper query); + + void batchAdd(GroupUserRelDTO relDTO); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java new file mode 100644 index 0000000..1e0889c --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; + +import java.util.List; + + +/** + *

+ * 用户组信息 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysUserRiskGroupService extends IService { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(Page page, QueryWrapper query); + + List personTree(); + + /** + * 创建用户组 + * + * @param sysUserGroup 用户组信息 + * @param userIds 用户信息 + */ + void createSysUserGroup(SysUserRiskGroup sysUserGroup, List userIds); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java new file mode 100644 index 0000000..6839887 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java @@ -0,0 +1,118 @@ +package com.casic.missiles.modular.group.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +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.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.group.dao.SysRiskGroupPointMapper; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import com.casic.missiles.modular.group.service.ISysRiskGroupPointService; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + + +/** + *

+ * 设备所属人员组 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysRiskGroupPointServiceImpl extends ServiceImpl implements ISysRiskGroupPointService { + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysRiskGroupPointServiceImpl(ISysRiskGroupRelUserService sysGroupRelUserService) { + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @Override + public List selectSysGroupDevicePage(Page page, QueryWrapper query) { + return this.baseMapper.selectSysGroupDevicePage(page, query); + } + + @Transactional + @Override + public void batchAdd(GroupRiskRelDTO relDTO) { + + if (CollectionUtil.isEmpty(relDTO.getTargetIds())) { + ServiceException serviceException = new ServiceException(500, "添加不能为空!"); + throw serviceException; + } + + //删除 + QueryWrapper query = new QueryWrapper<>(); + query.eq("group_id", relDTO.getGroupId()); + this.remove(query); + + //保存分组与危险点对应关系 + List groupDevices = new ArrayList<>(); + for (Long deviceId : relDTO.getTargetIds()) { + SysRiskGroupPoint sysGroupDevice = new SysRiskGroupPoint(); + sysGroupDevice.setTargetId(deviceId); + sysGroupDevice.setGroupId(relDTO.getGroupId()); + sysGroupDevice.setCreateTime(new Date()); + groupDevices.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(groupDevices); + + //批量保存风险点与用户关系 + GroupUserRelDTO groupUserRelDTO = new GroupUserRelDTO(); + groupUserRelDTO.setGroupId(relDTO.getGroupId()); + groupUserRelDTO.setUserIds(relDTO.getUserIds()); + sysGroupRelUserService.batchAdd(groupUserRelDTO); + + } + + @Override + public void batchIncremental(Long groupId, List deviceIds) { + List groupDevices = this.list(new LambdaQueryWrapper().eq(SysRiskGroupPoint::getGroupId, groupId)); + if (CollectionUtil.isEmpty(groupDevices)) { + saveDevices(groupId, deviceIds); + } else { + List oldDevices = groupDevices.stream().map(SysRiskGroupPoint::getTargetId).collect(Collectors.toList()); + List delIds = CollectionUtil.subtractToList(oldDevices, deviceIds); + List saveDevices = CollectionUtil.subtractToList(deviceIds, oldDevices); + + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.eq(SysRiskGroupPoint::getGroupId, groupId); + delQuery.in(SysRiskGroupPoint::getTargetId, delIds); + if (CollectionUtil.isNotEmpty(delIds)) { + this.remove(delQuery); + } + saveDevices(groupId, saveDevices); + } + } + + private void saveDevices(Long groupId, List saveDevices) { + List saves = new ArrayList<>(); + for (Long deviceId : saveDevices) { + SysRiskGroupPoint sysGroupDevice = new SysRiskGroupPoint(); + sysGroupDevice.setTargetId(deviceId); + sysGroupDevice.setGroupId(groupId); + sysGroupDevice.setCreateTime(new Date()); + saves.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(saves); + } + + private void saveOrUpdateBatchList(List groupDevices) { + for (SysRiskGroupPoint groupDevice : groupDevices) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysRiskGroupPoint::getGroupId, groupDevice.getGroupId()); + query.eq(SysRiskGroupPoint::getTargetId, groupDevice.getTargetId()); + this.saveOrUpdate(groupDevice, query); + } + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java new file mode 100644 index 0000000..83cd76a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.group.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +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.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.group.dao.SysRiskGroupPointMapper; +import com.casic.missiles.modular.group.dao.SysRiskGroupRelUserMapper; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.system.dao.SysGroupRelUserMapper; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + + +/** + *

+ * 组人员管理 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysRiskGroupRelUserServiceImpl extends ServiceImpl implements ISysRiskGroupRelUserService { + @Override + public List selectSysGroupRelUserPage(Page page, QueryWrapper query) { + return this.baseMapper.selectSysGroupRelUserPage(page, query); + } + + @Transactional + @Override + public void batchAdd(GroupUserRelDTO relDTO) { + if (CollectionUtil.isEmpty(relDTO.getUserIds())) { + ServiceException serviceException = new ServiceException(500, "添加不能为空!"); + throw serviceException; + } + //删除 + QueryWrapper query = new QueryWrapper<>(); + query.eq("group_id",relDTO.getGroupId()); + this.remove(query); + //添加设备信息 + List groupDevices = new ArrayList<>(); + for (Long deviceId : relDTO.getUserIds()) { + SysRiskGroupRelUser sysGroupDevice = new SysRiskGroupRelUser(); + sysGroupDevice.setUserId(deviceId); + sysGroupDevice.setGroupId(relDTO.getGroupId()); + sysGroupDevice.setCreateTime(new Date()); + groupDevices.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(groupDevices); + } + + private void saveOrUpdateBatchList(List groupDevices) { + for (SysRiskGroupRelUser groupDevice : groupDevices) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysRiskGroupRelUser::getGroupId, groupDevice.getGroupId()); + query.eq(SysRiskGroupRelUser::getUserId, groupDevice.getUserId()); + this.saveOrUpdate(groupDevice, query); + } + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java new file mode 100644 index 0000000..b3bb9a8 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java @@ -0,0 +1,246 @@ +package com.casic.missiles.modular.group.service.impl; + +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.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.modular.data.constants.DataConstants; +import com.casic.missiles.modular.group.dao.SysUserRiskGroupMapper; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupPointService; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.tree.RiskGroupDefaultTreeBuildFactory; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + + +/** + *

+ * 用户组信息 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysUserRiskGroupServiceImpl extends ServiceImpl implements ISysUserRiskGroupService { + @Lazy + @Resource + private ISysRiskGroupPointService sysRiskGroupPointService; + private final AbstractPermissionContext abstractPermissionContext; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_USER = "2"; + private final AbstractDictService dictService; + @Lazy + @Resource + private ISysRiskGroupRelUserService relUserService; + + public SysUserRiskGroupServiceImpl(AbstractPermissionContext abstractPermissionContext, AbstractDictService dictService) { + this.abstractPermissionContext = abstractPermissionContext; + this.dictService = dictService; + } + + @Override + public List selectSysUserGroupPage(Page page, QueryWrapper query) { + //分组过滤当前权限 + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + query.in("a.dept_id", dataScope.getDeptIds()); + } + List riskGroups = this.baseMapper.selectSysUserGroupPage(page, query); + for (SysUserRiskGroup riskGroup : riskGroups) { + wrapperInfo(riskGroup); + } + return riskGroups; + } + + private void wrapperInfo(SysUserRiskGroup riskGroup) { + riskGroup.setSafeName(dictService.getDictNameByCode(DataConstants.DICT_SECRET_LEVEL_TYPE, riskGroup.getSafe() + "")); + //查询关联设备 + LambdaQueryWrapper deviceQuery = new LambdaQueryWrapper<>(); + deviceQuery.eq(SysRiskGroupPoint::getGroupId, riskGroup.getId()); + List devices = sysRiskGroupPointService.list(deviceQuery); + if (devices != null) { + List deviceList = devices.stream().map(SysRiskGroupPoint::getTargetId).collect(Collectors.toList()); + riskGroup.setPointIds(StrUtil.join(",", deviceList)); + riskGroup.setTargetNum(deviceList.size()); + } + + riskGroup.setGroupTypeName(dictService.getDictNameByCode(DataConstants.dangerAssessmentType, riskGroup.getGroupType())); + //查询关联人员 + LambdaQueryWrapper personQuery = new LambdaQueryWrapper<>(); + personQuery.eq(SysRiskGroupRelUser::getGroupId, riskGroup.getId()); + List persons = relUserService.list(personQuery); + if (persons != null) { + List personIds = persons.stream().map(SysRiskGroupRelUser::getUserId).collect(Collectors.toList()); + riskGroup.setPersonIds(StrUtil.join(",", personIds)); + } + } + + private void setGroupInfo(SysUserRiskGroup entity) { + if (StrUtil.isNotEmpty(entity.getPointIds())) { + entity.setTargetNum(StrUtil.split(entity.getPointIds(), ",").size()); + } else { + entity.setTargetNum(0); + } + } + + @Override + public boolean save(SysUserRiskGroup entity) { + AuthUser authUser = abstractPermissionContext.getAuthService().getLoginUser(); + entity.setCreateTime(new Date()); + entity.setCreateId(authUser.getId()); + if (entity.getDeptId() == null) { + entity.setDeptId(authUser.getDeptId()); + } + setGroupInfo(entity); + super.save(entity); + batchSave(entity, entity.getId()); + return true; + } + + @Override + public boolean updateById(SysUserRiskGroup entity) { + AuthUser authUser = abstractPermissionContext.getAuthService().getLoginUser(); + entity.setCreateTime(new Date()); + entity.setCreateId(authUser.getId()); + if (entity.getDeptId() == null) { + entity.setDeptId(authUser.getDeptId()); + } + setGroupInfo(entity); + super.updateById(entity); + batchSave(entity, entity.getId()); + return true; + } + + /** + * 数据转换 + * + * @param entity + * @param groupId + */ + private void batchSave(SysUserRiskGroup entity, Long groupId) { + GroupRiskRelDTO groupRelDTO = new GroupRiskRelDTO(); + groupRelDTO.setGroupId(groupId); + if (StrUtil.isNotEmpty(entity.getPointIds())) { + long[] longs = StrUtil.splitToLong(entity.getPointIds(), ","); + List devices = new ArrayList<>(); + for (long aLong : longs) { + devices.add(aLong); + } + groupRelDTO.setTargetIds(devices); + } + if (StrUtil.isNotEmpty(entity.getPersonIds())) { + List persons = new ArrayList<>(); + long[] longs = StrUtil.splitToLong(entity.getPersonIds(), ","); + + for (long aLong : longs) { + persons.add(aLong); + } + groupRelDTO.setUserIds(persons); + } + sysRiskGroupPointService.batchAdd(groupRelDTO); + } + + @Override + public List personTree() { + + //查询可见组织 + DataScope scope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + + LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { + deptQuery.in(Dept::getId, scope.getDeptIds()); + } + deptQuery.orderByAsc(Dept::getNum); + + List deptList = abstractPermissionContext.getDeptService().list(deptQuery); + List deptDTOS = new ArrayList<>(); + List rootIds = new ArrayList<>(); + Set normalIds = new HashSet<>(); + for (Dept dept : deptList) { + RiskGroupDeptDTO deptDTO = new RiskGroupDeptDTO(); + deptDTO.setPid(dept.getPid()); + deptDTO.setId(dept.getId()); + deptDTO.setFullName(dept.getFullName()); + deptDTO.setName(dept.getSimpleName()); + deptDTOS.add(deptDTO); + deptDTO.setType(NODE_TYPE_DEPT); + normalIds.add(dept.getId()); + + //挂载设备信息 + LambdaQueryWrapper deviceQuery = new LambdaQueryWrapper<>(); + deviceQuery.eq(User::getDeptId, deptDTO.getId()); + deviceQuery.eq(User::getStatus, "1"); + List deviceInfos = abstractPermissionContext.getUserService().list(deviceQuery); + + deptDTO.setChildrenNodes(deviceInfos.stream().map(this::createDeptDTO).collect(Collectors.toList())); + } + + for (RiskGroupDeptDTO deptDTO : deptDTOS) { + if (!normalIds.contains(deptDTO.getPid())) { + rootIds.add(deptDTO.getPid()); + } + } + + //过滤根节点,支持多根展示 + RiskGroupDefaultTreeBuildFactory abstractTreeBuildFactory = new RiskGroupDefaultTreeBuildFactory(); + List newTree = new ArrayList<>(); + rootIds = rootIds.stream().distinct().collect(Collectors.toList()); + for (Long rootId : rootIds) { + abstractTreeBuildFactory.setRootId(rootId + ""); + newTree.addAll(abstractTreeBuildFactory.doTreeBuild(deptDTOS)); + } + + return newTree; + } + + @Transactional + @Override + public void createSysUserGroup(SysUserRiskGroup sysUserGroup, List userIds) { + this.baseMapper.insert(sysUserGroup); + GroupUserRelDTO relDTO = new GroupUserRelDTO(); + relDTO.setGroupId(sysUserGroup.getId()); + relDTO.setUserIds(userIds); + relUserService.batchAdd(relDTO); + } + + + /** + * 创建节点 + * + * @param userInfo 用户信息 + * @return + */ + private GroupDeptDTO createDeptDTO(User userInfo) { + GroupDeptDTO deptDTO = new GroupDeptDTO(); + deptDTO.setType(NODE_TYPE_USER); + deptDTO.setId(userInfo.getId()); + deptDTO.setPid(userInfo.getDeptId()); + deptDTO.setUserDTO(userInfo); + deptDTO.setName(userInfo.getName()); + deptDTO.setFullName(userInfo.getName()); + deptDTO.setUserId(userInfo.getId() + ""); + return deptDTO; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/tree/RiskGroupDefaultTreeBuildFactory.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/tree/RiskGroupDefaultTreeBuildFactory.java new file mode 100644 index 0000000..69c18ad --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/tree/RiskGroupDefaultTreeBuildFactory.java @@ -0,0 +1,30 @@ +package com.casic.missiles.modular.group.tree; + +import com.casic.missiles.core.treebuild.DefaultTreeBuildFactory; +import com.casic.missiles.model.tree.Tree; + +import java.util.ArrayList; +import java.util.List; + +public class RiskGroupDefaultTreeBuildFactory extends DefaultTreeBuildFactory { + private String rootId; + @Override + protected List afterBuild(List nodes) { + //去掉所有的二级节点 + ArrayList results = new ArrayList<>(); + for (T node : nodes) { + if (node.getNodeParentId().equals(rootId)) { + results.add(node); + } + } + return results; + } + + public String getRootId() { + return rootId; + } + + public void setRootId(String rootId) { + this.rootId = rootId; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/RiskGroupDeptDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/RiskGroupDeptDTO.java new file mode 100644 index 0000000..7f6c157 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/RiskGroupDeptDTO.java @@ -0,0 +1,61 @@ +package com.casic.missiles.modular.group.vo; + +import com.casic.missiles.model.tree.Tree; +import com.casic.missiles.modular.device.model.RiskPointInfo; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +@Data +public class RiskGroupDeptDTO implements Tree { + @ApiModelProperty("组织主键") + private Long id; + + @ApiModelProperty("父部门ID") + private Long pid; + + @ApiModelProperty("组织简称") + private String name; + + @ApiModelProperty("组织全称") + private String fullName; + + @ApiModelProperty("子节点") + private List children = new ArrayList<>(); + + @ApiModelProperty("节点类型(1 组织 2 人员)") + private String type; + + @ApiModelProperty("用户信息") + private User userDTO; + private String userId; + private RiskPointInfo riskPointInfo; + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + @Override + public String getNodeId() { + return id + ""; + } + + @Override + public String getNodeParentId() { + return pid + ""; + } + + @Override + public void setChildrenNodes(List childrenNodes) { + children.addAll(childrenNodes); + children = children.stream().distinct().collect(Collectors.toList()); + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupPointVO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupPointVO.java new file mode 100644 index 0000000..3f6ca41 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupPointVO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.group.vo; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 风险点所属人员组对象VO + * + * @author lwh + * @date 2024-07-11 + */ +@Data +public class SysRiskGroupPointVO { + private static final long serialVersionUID = 1L; + + + @ApiModelProperty(value = "用户组ID", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备ID", dataType = "Long") + private Long targetId; + + public QueryWrapper genQuery() { + QueryWrapper query = new QueryWrapper<>(); + if (groupId != null) { + query.eq("group_id", groupId); + } + if (targetId != null) { + query.eq("target_id", targetId); + } + return query; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupRelUserVO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupRelUserVO.java new file mode 100644 index 0000000..5a95d82 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupRelUserVO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.group.vo; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 组人员管理对象VO + * + * @author lwh + * @date 2024-07-11 + */ +@Data +public class SysRiskGroupRelUserVO { + private static final long serialVersionUID = 1L; + + + @ApiModelProperty(value = "组ID", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + private Long userId; + + public QueryWrapper genQuery() { + QueryWrapper query = new QueryWrapper<>(); + if (groupId != null) { + query.eq("group_id", groupId); + } + if (userId != null) { + query.eq("user_id", userId); + } + return query; + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java new file mode 100644 index 0000000..1ca5eb1 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java @@ -0,0 +1,63 @@ +package com.casic.missiles.modular.device.enums; + +/** + * wvp设备类型转换 + * + * @author lwh + * @Date 2017年1月10日 下午9:54:13 + */ +public enum AvDeptEnum { + + DEPT0("0066", "801",0L), + DEPT1("0059", "699厂",1L), + DEPT2("0055", "283厂",1L), + DEPT3("0022", "201所",1L), + DEPT4("0027", "206所",1L), + DEPT5("0013", "23所",1L); + + String code; + String message; + Long deptId; + AvDeptEnum(String code, String message, Long deptId) { + this.code = code; + this.message = message; + this.deptId = deptId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public static AvDeptEnum valueOfCode(String value) { + if (value == null) { + return null; + } else { + for (AvDeptEnum ms : AvDeptEnum.values()) { + if (ms.getCode().equals(value)) { + return ms; + } + } + return null; + } + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java new file mode 100644 index 0000000..573d0e2 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.task; + +import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; + +public class Test { + public static void main(String[] args) { + System.out.println(AvStatusTypeEnum.valueOfType(new Integer(1)).getMessage()); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java new file mode 100644 index 0000000..7c06c67 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java @@ -0,0 +1,77 @@ +package com.casic.missiles.modular.device.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpSession; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class RiskSyncController extends BaseController { + @Resource + private IClientAuthService clientAuthService; + @Resource + private AbstractDeptService deptService; + @Resource + private AbstractUserService userService; + @PostMapping("/client/login") + @ResponseBody + public ResponseData login(@RequestBody RiskLoginForm deviceLoginForm, HttpSession session) { + return clientAuthService.login(deviceLoginForm, session); + } + + /** + * 全量组织信息读取 + * + * @return + */ + @PostMapping("/dept/list") + @ResponseBody + public ResponseDataDTO> dept() { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = deptService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量用户信息读取 + * + * @return + */ + @PostMapping("/user/list") + @ResponseBody + public ResponseDataDTO> user() { + //todo 此处租户拦截需移除 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量设备信息读取 + * + * @return + */ + @PostMapping("/device/list") + @ResponseBody + public ResponseDataDTO> device() { + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java new file mode 100644 index 0000000..5e5b890 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class UserSyncController extends BaseController { + + @Resource + private IBusDeviceInfoService busDeviceInfoService; + + /** + * 登录用户授权设备权限查看 + * @return + */ + @GetMapping("/device/permissions") + @ResponseBody + public ResponseDataDTO> devicePermissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } + + /** + * 登录用户风险点授权查询 + * @return + */ + @GetMapping("/permissions") + @ResponseBody + public ResponseDataDTO> permissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java new file mode 100644 index 0000000..07b8df8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +/** + * 设备登录接口 + */ +@Data +public class RiskLoginForm { + /** + * 设备编码 + */ + private String clientId; + + /** + * 时间戳 + */ + private Long time; + + /** + * 加密后数据 加密格式sn+时间戳 时效性为6小时 + */ + private String secret; + + /** + * 设备登录注册IP + */ + private String ip; + + /** + * 设备登录注册port + */ + private String port; +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java new file mode 100644 index 0000000..40fdb4b --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.device.service; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; + +import javax.servlet.http.HttpSession; + +public interface IClientAuthService { + /** + * @param deviceLoginForm + * @param session + * @return + */ + ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session); +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java new file mode 100644 index 0000000..576e857 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.device.service.impl; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import cn.hutool.jwt.JWT; +import cn.hutool.jwt.JWTUtil; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.util.IRiskCacheUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpSession; +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Service +public class ClientAuthServiceImpl implements IClientAuthService { + @Value("${casic.client.privateKey:MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALKcwHHOg0F6Zkq7GOVnOnTgvH9vSPXFFTOcEqOVBIBPBz7UNrEGkp1PhZ+oC4WVJAsDuot2e1fDZy9QS9HF92MmnYp9kuQRhGZjHctPnVZ0Kai5BES0ytHqPeauLyNXxOOS0YKYEUwpft4Z5Azw7bj3JWNvLrnTZvNld6FDvTslAgMBAAECgYAqN/kZLYpC+O6i7XSmDO95XwHPUXu6dDpdt5+EQR4OQh/hTwIaeAZB3uEj6vHGQomBfQEkI/5lsU97lIxHanbd+Hro7JyIhsGD5LR5XnZHVKzFiZW62OIU6FI9dlQNN8miiblnmyDwiMA3okaHl0O7qQjZ+IvY2csgmJc7AXpPpQJBAOhrhcfWFcgffj2O6HYNlBLFfbboc/ZzrEADDXKnxRSHlo5o8W+6gylG/L2NGtbag5S68B9VYzdkSQ1++5C+Ws8CQQDEu7h311PLEiKgqzGHpjzadQETmt/jMadaKQmT0TZwNVi6X8lR17U5hF8dAqZzUzr9kUC0HRIZhg4Uv1v3W3fLAkB4YPhxgJjXhjhEefg87Nt8vX1Xdx5Yz6CvpuUYNX0GHRQFvqUOUXQNtQ7CvorgLV1pc0lbcUZqMi8EJnj1hyJRAkEAjHXWm8GiMt+M15fCsi3vTq2xChVOekBuUsHv85iwvGZqJg7ThtpyqlEnM2g7/STUfkvhnXcQACclEI0blTy6BwJAPmFyhU+d0ejVpbc53TdrL2HqYYUHi/tTy/dtUa7lbypzdwwJ2M1Tv5PE8sQxr9tgMbebfxVb/RFKdiCCtzC4ng==}") + private String privateKey; + + @Override + public ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session) { + //固定秘钥解析 + try { + String str = RSAUtils.decrypt(deviceLoginForm.getSecret(), privateKey); + Long time = Long.valueOf(StrUtil.split(str, "_").get(1)); + //边缘盒子时差与服务时差不可超过24小时 + if (time == null || System.currentTimeMillis() - time > 3600 * 24 * 1000) { + return ResponseData.error("请求时间超时"); + } + deviceLoginForm.setTime(time); + } catch (Exception e) { + e.printStackTrace(); + return ResponseData.error("设备解析异常!"); + } + + try { + String token = this.createJwtToken(deviceLoginForm); + IRiskCacheUtil.put(token, token); + return ResponseData.success(token); + } catch (Exception e) { + log.error("设备登录异常:{}", e.getMessage()); + return ResponseData.error("登录异常,请联系管理员"); + } +} + /** + * token创建 + * + * @param loginForm 登录信息 + * @param device 设备信息 + * @return + * @throws Exception + */ + public String createJwtToken(RiskLoginForm loginForm) throws Exception { + Map payload = new HashMap<>(); + payload.put("clientId", loginForm.getClientId()); // 设备编号 + payload.put("time", loginForm.getTime()); // 请求时间 + + //RSA 解密 + String str = RSAUtils.decrypt(loginForm.getSecret(), privateKey); + String key = loginForm.getClientId()+"_" + loginForm.getTime() ; + if (!key.equals(str)) { + //秘钥验证失败 + throw new ServiceException(500,"秘钥验证失败"); + } + +// long exp = new Date().getTime() + 2 * 3600000; // 2小时后的时间戳 +// payload.put("exp", exp); + + // 创建JWT + String jwt = JWTUtil.createToken(payload, "token-203-202405".getBytes()); + + return jwt; + } + + /** + * token解析 + * + * @param jwtStr token + * @return + * @throws Exception + */ + public static RiskLoginForm parseToken(String jwtStr){ + JWT jwtObj = new JWTUtil().parseToken(jwtStr); + RiskLoginForm deviceLoginForm = new RiskLoginForm(); + deviceLoginForm.setClientId(Convert.toStr(jwtObj.getPayload("clientId"))); + return deviceLoginForm; + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java new file mode 100644 index 0000000..0e91ac8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.util; +import cn.hutool.cache.Cache; +import cn.hutool.cache.CacheUtil; +/** + * token有效 + */ +public class IRiskCacheUtil { + /** + * 1小时内不活跃 会踢掉 + */ + private static Cache fifoCache = CacheUtil.newFIFOCache(1000, 1000 * 60 * 60); + + public static void put(String key, String value) { + fifoCache.put(key, value); + } + + public static String get(String key) { + return fifoCache.get(key); + } + + public static void remove(String key) { + fifoCache.remove(key); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java new file mode 100644 index 0000000..805c32a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceGroupDict extends AbstractDictMap { + + @Override + public void init() { + //检索条件 + put("groupName", "分组名称"); + put("startTime", "起始时间"); + put("endTime", "结束时间"); + //新增修改属性 + put("cameraIds", "设备国标号"); + put("personIds", "人员主键集合"); + put("description","备注"); + put("id","主键"); + put("ids","主键集合"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java new file mode 100644 index 0000000..895fbd9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceQueryDict extends AbstractDictMap { + + @Override + public void init() { + put("devType", "类型查询"); + put("keyword", "设备名称"); + put("deptName", "所属单位"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java new file mode 100644 index 0000000..88da6df --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.device.util; + +public class DeviceScopeUtil { +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java new file mode 100644 index 0000000..2e3e478 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.device.controller; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.auth.dto.DeviceLoginForm; +import com.casic.missiles.modular.auth.util.ICacheUtil; +import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; +import com.casic.missiles.modular.device.service.IAlarmRecordService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +@Api(tags = "告警记录") +@RestController +@RequestMapping("/record") +public class AlarmUploadController extends BaseController { + + private final IAlarmRecordService alarmRecordService; + private final IDeviceAuthService deviceAuthService; + public AlarmUploadController(IAlarmRecordService alarmRecordService, IDeviceAuthService deviceAuthService) { + this.alarmRecordService = alarmRecordService; + this.deviceAuthService = deviceAuthService; + } + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } + @BussinessLog(value = "告警记录上报接口") + @ApiOperation(value = "告警记录上报接口") + @PostMapping(value = "/upload") + public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return createAuthError(); + } + alarmRecordService.upload(alarmRecord); + return ResponseDataDTO.success(); + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java new file mode 100644 index 0000000..3f1c189 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class RecognitionStreamDTO { + private Long id; + private String recognitionStreamFlag; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java new file mode 100644 index 0000000..fa5ae4a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java @@ -0,0 +1,167 @@ +package com.casic.missiles.modular.group.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IRiskPointInfoService; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.group.vo.SysRiskGroupPointVO; +import com.casic.missiles.modular.group.vo.SysRiskGroupRelUserVO; +import com.casic.missiles.modular.group.vo.SysRiskUserGroupVO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import com.casic.missiles.modular.system.vo.SysGroupRelUserVO; +import com.casic.missiles.modular.system.vo.SysUserGroupVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.ibatis.annotations.Param; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; + +/** + * 风险点组信息Controller + * + * @author lwh + * @date 2024-07-11 + */ +@Api(tags = "风险点组信息") +@RestController +@RequestMapping("/sys/risk/group") +public class SysUserRiskGroupController extends BaseController { + private final IRiskPointInfoService riskPointInfoService; + private final ISysUserRiskGroupService sysUserGroupService; + private final AbstractPermissionContext permissionContext; + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysUserRiskGroupController(IRiskPointInfoService riskPointInfoService, ISysUserRiskGroupService sysUserGroupService, AbstractPermissionContext permissionContext, ISysRiskGroupRelUserService sysGroupRelUserService) { + this.riskPointInfoService = riskPointInfoService; + this.sysUserGroupService = sysUserGroupService; + this.permissionContext = permissionContext; + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @BussinessLog(value = "风险点分组查询") + @ApiOperation(value = "风险点分组查询", hidden = true) + @GetMapping(value = "/list") + public ResponseDataDTO> list(SysRiskUserGroupVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysUserGroupService.list(query)); + } + + @BussinessLog(value = "分组人员列表查询") + @ApiOperation(value = "分组人员列表查询") + @GetMapping(value = "/groupUserList") + public ResponseDataDTO> groupUserList(SysRiskGroupRelUserVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysGroupRelUserService.list(query)); + } + + @BussinessLog(value = "风险点分组人员查询") + @ApiOperation(value = "风险点分组人员分页查询") + @GetMapping(value = "/groupUserPage") + public ResponseDataDTO> listPage(SysRiskGroupRelUserVO sysGroupRelUserVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysGroupRelUserVO.genQuery(); + List relUsers = sysGroupRelUserService.selectSysGroupRelUserPage(page, query); + page.setRecords(relUsers); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "用户分组批量新增") + @ApiOperation(value = "批量新增接口") + @PostMapping(value = "/batch-add") + public ResponseDataDTO batchAdd(@RequestBody GroupUserRelDTO relDTO) { + sysGroupRelUserService.batchAdd(relDTO); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组人员删除") + @ApiOperation(value = "用户组人员删除接口") + @GetMapping(value = "/user/delete") + public ResponseDataDTO userDel(@Param("用户组人员关联主键") String id) { + sysGroupRelUserService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "风险点分组分页查询") + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(SysRiskUserGroupVO sysUserGroupVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysUserGroupVO.genQuery(); + + List sysUserGroups = sysUserGroupService.selectSysUserGroupPage(page, query); + page.setRecords(sysUserGroups); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "风险点分组新增") + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.save(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组修改") + @ApiOperation(value = "修改接口") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.updateById(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组删除") + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + sysUserGroupService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "批量删除") + @ApiOperation(value = "批量删除", hidden = true) + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + sysUserGroupService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "详情查询") + @ApiOperation(value = "详情查询", hidden = true) + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(sysUserGroupService.getById(id)); + } + + @BussinessLog(value = "用户树") + @ApiOperation(value = "用户树查询") + @GetMapping(value = "/person/tree") + public ResponseDataDTO> personTree() { + return ResponseDataDTO.success(sysUserGroupService.personTree()); + } + + @BussinessLog(value = "风险点树查询") + @ApiOperation(value = "风险点树查询") + @GetMapping(value = "/tree") + public ResponseDataDTO> tree(String riskType) { + return ResponseDataDTO.success(riskPointInfoService.tree(riskType)); + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java new file mode 100644 index 0000000..419eb27 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备所属人员组 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupPointMapper extends BaseMapper { +/** +* 设备所属人员组 分页检索 +*/ +List selectSysGroupDevicePage(@Param("page") Page page, @Param("ew" ) QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java new file mode 100644 index 0000000..eb41227 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 组人员管理 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupRelUserMapper extends BaseMapper { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java new file mode 100644 index 0000000..e8352df --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.system.model.SysUserGroup; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 用户组信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysUserRiskGroupMapper extends BaseMapper { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml new file mode 100644 index 0000000..6fa6a4d --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + id , + group_id as groupId , + create_time as createTime , + target_Id as targetId + + + a.id , + a.group_id + as groupId , + a.create_time + as createTime , + a.target_Id + as targetId + + + + + + and group_id = #{request.groupId} + + + and device_id = #{request.deviceId} + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml new file mode 100644 index 0000000..a627546 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + id , + group_id as groupId , + user_id as userId , + create_time as createTime + + + a.id, + a.group_id + as groupId , + a.user_id + as userId , + a.create_time + as createTime + + + + + + and group_id = #{request.groupId} + + + and user_id = #{request.userId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml new file mode 100644 index 0000000..3245136 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + id, + group_name as groupName , + create_time as createTime , + dept_id as deptId , + create_id as createId + + + a.id,a.group_name as groupName , + a.create_time + as createTime , + a.dept_id + as deptId , + a.create_id + as createId,a.description + + + + + + and group_name like concat('%',#{request.groupName},'%') + + + and dept_id = #{request.deptId} + + + and create_id = #{request.createId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java new file mode 100644 index 0000000..e44328f --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class GroupRiskRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("风险点集合") + private List targetIds; + @ApiModelProperty("用户ID集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java new file mode 100644 index 0000000..f8758bf --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class RiskGroupUserRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("设备集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java new file mode 100644 index 0000000..b386d5b --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java @@ -0,0 +1,53 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 风险点所属组 sys_risk_group_point + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_risk_group_point") +public class SysRiskGroupPoint extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableId("id") + private Long id; + + @ApiModelProperty(value = "用户组ID", dataType = "Long") + @TableField("group_id") + private Long groupId; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty(value = "风险点ID", dataType = "Long") + @TableField("target_id") + private Long targetId; + + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; + + @Override + public String toString() { + return "SysGroupDevice{" + + "id=" + id + + "groupId=" + groupId + + "createTime=" + createTime + + "targetId=" + targetId + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java new file mode 100644 index 0000000..949caa3 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java @@ -0,0 +1,55 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 组人员管理对象 sys_group_rel_user + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_risk_group_rel_user") +public class SysRiskGroupRelUser extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + + @ApiModelProperty(value = "组ID", dataType = "Long") + @TableField("group_id") + private Long groupId; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + @TableField("user_id") + private Long userId; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + @ApiModelProperty(value = "用户姓名", dataType = "String") + @TableField(exist = false) + private String realName; + + @ApiModelProperty(value = "用户名", dataType = "String") + @TableField(exist = false) + private String account; + + @Override + public String toString() { + return "SysGroupRelUser{" + + "id=" + id + + "groupId=" + groupId + + "userId=" + userId + + "createTime=" + createTime + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java new file mode 100644 index 0000000..1b73dc0 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java @@ -0,0 +1,97 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 危险点分组组信息对象 sys_user_risk_group + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_user_risk_group") +public class SysUserRiskGroup extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableId("id") + private Long id; + + @ApiModelProperty(value = "组名称", dataType = "String", required = true) + @TableField("group_name") + private String groupName; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty(value = "所属组织(保留字段)", dataType = "Long") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty(value = "描述信息", dataType = "String") + @TableField("description") + private String description; + + @ApiModelProperty(value = "密级字典", dataType = "String") + @TableField("safe") + private int safe; + + @ApiModelProperty(value = "创建者ID", dataType = "Long") + @TableField("create_id") + private Long createId; + + + @ApiModelProperty(value = "类型(1 危险点 2 重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "Long") + @TableField("group_type") + private String groupType; + @TableField(exist = false) + private String groupTypeName; + /** + * 风险点集合 + */ + @ApiModelProperty(value = "风险点集合(逗号拼接)", dataType = "String") + @TableField(exist = false) + private String pointIds; + + @ApiModelProperty(value = "数量", dataType = "Long") + @TableField(exist = false) + private Integer targetNum; + /** + * 用户集合 + */ + @ApiModelProperty(value = "用户集合(逗号拼接)", dataType = "String") + @TableField(exist = false) + private String personIds; + + @ApiModelProperty(value = "用户名称", dataType = "String") + @TableField(exist = false) + private String realName; + + @ApiModelProperty(value = "用户名", dataType = "String") + @TableField(exist = false) + private String account; + + @ApiModelProperty(value = "密级字典名称", dataType = "String") + @TableField(exist = false) + private String safeName; + + @Override + public String toString() { + return "SysUserGroup{" + + "id=" + id + + "groupName=" + groupName + + "createTime=" + createTime + + "deptId=" + deptId + + "createId=" + createId + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java new file mode 100644 index 0000000..4657ce4 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.device.dto.GroupRelDTO; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; + +import java.util.List; + + +/** + *

+ * 设备所属人员组 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysRiskGroupPointService extends IService { + /** + * 设备所属人员组 分页检索 + */ + List selectSysGroupDevicePage(Page page, QueryWrapper query); + + /** + * 设备组批量新增 + * + * @param relDTO + */ + void batchAdd(GroupRiskRelDTO relDTO); + + + /** + * 增量更新 + * @param groupId + * @param deviceIds + */ + void batchIncremental(Long groupId, List deviceIds); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java new file mode 100644 index 0000000..591eef2 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; + +import java.util.List; + + +/** + *

+ * 组人员管理 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysRiskGroupRelUserService extends IService { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(Page page, QueryWrapper query); + + void batchAdd(GroupUserRelDTO relDTO); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java new file mode 100644 index 0000000..1e0889c --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; + +import java.util.List; + + +/** + *

+ * 用户组信息 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysUserRiskGroupService extends IService { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(Page page, QueryWrapper query); + + List personTree(); + + /** + * 创建用户组 + * + * @param sysUserGroup 用户组信息 + * @param userIds 用户信息 + */ + void createSysUserGroup(SysUserRiskGroup sysUserGroup, List userIds); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java new file mode 100644 index 0000000..6839887 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java @@ -0,0 +1,118 @@ +package com.casic.missiles.modular.group.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +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.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.group.dao.SysRiskGroupPointMapper; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import com.casic.missiles.modular.group.service.ISysRiskGroupPointService; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + + +/** + *

+ * 设备所属人员组 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysRiskGroupPointServiceImpl extends ServiceImpl implements ISysRiskGroupPointService { + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysRiskGroupPointServiceImpl(ISysRiskGroupRelUserService sysGroupRelUserService) { + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @Override + public List selectSysGroupDevicePage(Page page, QueryWrapper query) { + return this.baseMapper.selectSysGroupDevicePage(page, query); + } + + @Transactional + @Override + public void batchAdd(GroupRiskRelDTO relDTO) { + + if (CollectionUtil.isEmpty(relDTO.getTargetIds())) { + ServiceException serviceException = new ServiceException(500, "添加不能为空!"); + throw serviceException; + } + + //删除 + QueryWrapper query = new QueryWrapper<>(); + query.eq("group_id", relDTO.getGroupId()); + this.remove(query); + + //保存分组与危险点对应关系 + List groupDevices = new ArrayList<>(); + for (Long deviceId : relDTO.getTargetIds()) { + SysRiskGroupPoint sysGroupDevice = new SysRiskGroupPoint(); + sysGroupDevice.setTargetId(deviceId); + sysGroupDevice.setGroupId(relDTO.getGroupId()); + sysGroupDevice.setCreateTime(new Date()); + groupDevices.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(groupDevices); + + //批量保存风险点与用户关系 + GroupUserRelDTO groupUserRelDTO = new GroupUserRelDTO(); + groupUserRelDTO.setGroupId(relDTO.getGroupId()); + groupUserRelDTO.setUserIds(relDTO.getUserIds()); + sysGroupRelUserService.batchAdd(groupUserRelDTO); + + } + + @Override + public void batchIncremental(Long groupId, List deviceIds) { + List groupDevices = this.list(new LambdaQueryWrapper().eq(SysRiskGroupPoint::getGroupId, groupId)); + if (CollectionUtil.isEmpty(groupDevices)) { + saveDevices(groupId, deviceIds); + } else { + List oldDevices = groupDevices.stream().map(SysRiskGroupPoint::getTargetId).collect(Collectors.toList()); + List delIds = CollectionUtil.subtractToList(oldDevices, deviceIds); + List saveDevices = CollectionUtil.subtractToList(deviceIds, oldDevices); + + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.eq(SysRiskGroupPoint::getGroupId, groupId); + delQuery.in(SysRiskGroupPoint::getTargetId, delIds); + if (CollectionUtil.isNotEmpty(delIds)) { + this.remove(delQuery); + } + saveDevices(groupId, saveDevices); + } + } + + private void saveDevices(Long groupId, List saveDevices) { + List saves = new ArrayList<>(); + for (Long deviceId : saveDevices) { + SysRiskGroupPoint sysGroupDevice = new SysRiskGroupPoint(); + sysGroupDevice.setTargetId(deviceId); + sysGroupDevice.setGroupId(groupId); + sysGroupDevice.setCreateTime(new Date()); + saves.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(saves); + } + + private void saveOrUpdateBatchList(List groupDevices) { + for (SysRiskGroupPoint groupDevice : groupDevices) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysRiskGroupPoint::getGroupId, groupDevice.getGroupId()); + query.eq(SysRiskGroupPoint::getTargetId, groupDevice.getTargetId()); + this.saveOrUpdate(groupDevice, query); + } + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java new file mode 100644 index 0000000..83cd76a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.group.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +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.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.group.dao.SysRiskGroupPointMapper; +import com.casic.missiles.modular.group.dao.SysRiskGroupRelUserMapper; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.system.dao.SysGroupRelUserMapper; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + + +/** + *

+ * 组人员管理 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysRiskGroupRelUserServiceImpl extends ServiceImpl implements ISysRiskGroupRelUserService { + @Override + public List selectSysGroupRelUserPage(Page page, QueryWrapper query) { + return this.baseMapper.selectSysGroupRelUserPage(page, query); + } + + @Transactional + @Override + public void batchAdd(GroupUserRelDTO relDTO) { + if (CollectionUtil.isEmpty(relDTO.getUserIds())) { + ServiceException serviceException = new ServiceException(500, "添加不能为空!"); + throw serviceException; + } + //删除 + QueryWrapper query = new QueryWrapper<>(); + query.eq("group_id",relDTO.getGroupId()); + this.remove(query); + //添加设备信息 + List groupDevices = new ArrayList<>(); + for (Long deviceId : relDTO.getUserIds()) { + SysRiskGroupRelUser sysGroupDevice = new SysRiskGroupRelUser(); + sysGroupDevice.setUserId(deviceId); + sysGroupDevice.setGroupId(relDTO.getGroupId()); + sysGroupDevice.setCreateTime(new Date()); + groupDevices.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(groupDevices); + } + + private void saveOrUpdateBatchList(List groupDevices) { + for (SysRiskGroupRelUser groupDevice : groupDevices) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysRiskGroupRelUser::getGroupId, groupDevice.getGroupId()); + query.eq(SysRiskGroupRelUser::getUserId, groupDevice.getUserId()); + this.saveOrUpdate(groupDevice, query); + } + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java new file mode 100644 index 0000000..b3bb9a8 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java @@ -0,0 +1,246 @@ +package com.casic.missiles.modular.group.service.impl; + +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.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.modular.data.constants.DataConstants; +import com.casic.missiles.modular.group.dao.SysUserRiskGroupMapper; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupPointService; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.tree.RiskGroupDefaultTreeBuildFactory; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + + +/** + *

+ * 用户组信息 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysUserRiskGroupServiceImpl extends ServiceImpl implements ISysUserRiskGroupService { + @Lazy + @Resource + private ISysRiskGroupPointService sysRiskGroupPointService; + private final AbstractPermissionContext abstractPermissionContext; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_USER = "2"; + private final AbstractDictService dictService; + @Lazy + @Resource + private ISysRiskGroupRelUserService relUserService; + + public SysUserRiskGroupServiceImpl(AbstractPermissionContext abstractPermissionContext, AbstractDictService dictService) { + this.abstractPermissionContext = abstractPermissionContext; + this.dictService = dictService; + } + + @Override + public List selectSysUserGroupPage(Page page, QueryWrapper query) { + //分组过滤当前权限 + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + query.in("a.dept_id", dataScope.getDeptIds()); + } + List riskGroups = this.baseMapper.selectSysUserGroupPage(page, query); + for (SysUserRiskGroup riskGroup : riskGroups) { + wrapperInfo(riskGroup); + } + return riskGroups; + } + + private void wrapperInfo(SysUserRiskGroup riskGroup) { + riskGroup.setSafeName(dictService.getDictNameByCode(DataConstants.DICT_SECRET_LEVEL_TYPE, riskGroup.getSafe() + "")); + //查询关联设备 + LambdaQueryWrapper deviceQuery = new LambdaQueryWrapper<>(); + deviceQuery.eq(SysRiskGroupPoint::getGroupId, riskGroup.getId()); + List devices = sysRiskGroupPointService.list(deviceQuery); + if (devices != null) { + List deviceList = devices.stream().map(SysRiskGroupPoint::getTargetId).collect(Collectors.toList()); + riskGroup.setPointIds(StrUtil.join(",", deviceList)); + riskGroup.setTargetNum(deviceList.size()); + } + + riskGroup.setGroupTypeName(dictService.getDictNameByCode(DataConstants.dangerAssessmentType, riskGroup.getGroupType())); + //查询关联人员 + LambdaQueryWrapper personQuery = new LambdaQueryWrapper<>(); + personQuery.eq(SysRiskGroupRelUser::getGroupId, riskGroup.getId()); + List persons = relUserService.list(personQuery); + if (persons != null) { + List personIds = persons.stream().map(SysRiskGroupRelUser::getUserId).collect(Collectors.toList()); + riskGroup.setPersonIds(StrUtil.join(",", personIds)); + } + } + + private void setGroupInfo(SysUserRiskGroup entity) { + if (StrUtil.isNotEmpty(entity.getPointIds())) { + entity.setTargetNum(StrUtil.split(entity.getPointIds(), ",").size()); + } else { + entity.setTargetNum(0); + } + } + + @Override + public boolean save(SysUserRiskGroup entity) { + AuthUser authUser = abstractPermissionContext.getAuthService().getLoginUser(); + entity.setCreateTime(new Date()); + entity.setCreateId(authUser.getId()); + if (entity.getDeptId() == null) { + entity.setDeptId(authUser.getDeptId()); + } + setGroupInfo(entity); + super.save(entity); + batchSave(entity, entity.getId()); + return true; + } + + @Override + public boolean updateById(SysUserRiskGroup entity) { + AuthUser authUser = abstractPermissionContext.getAuthService().getLoginUser(); + entity.setCreateTime(new Date()); + entity.setCreateId(authUser.getId()); + if (entity.getDeptId() == null) { + entity.setDeptId(authUser.getDeptId()); + } + setGroupInfo(entity); + super.updateById(entity); + batchSave(entity, entity.getId()); + return true; + } + + /** + * 数据转换 + * + * @param entity + * @param groupId + */ + private void batchSave(SysUserRiskGroup entity, Long groupId) { + GroupRiskRelDTO groupRelDTO = new GroupRiskRelDTO(); + groupRelDTO.setGroupId(groupId); + if (StrUtil.isNotEmpty(entity.getPointIds())) { + long[] longs = StrUtil.splitToLong(entity.getPointIds(), ","); + List devices = new ArrayList<>(); + for (long aLong : longs) { + devices.add(aLong); + } + groupRelDTO.setTargetIds(devices); + } + if (StrUtil.isNotEmpty(entity.getPersonIds())) { + List persons = new ArrayList<>(); + long[] longs = StrUtil.splitToLong(entity.getPersonIds(), ","); + + for (long aLong : longs) { + persons.add(aLong); + } + groupRelDTO.setUserIds(persons); + } + sysRiskGroupPointService.batchAdd(groupRelDTO); + } + + @Override + public List personTree() { + + //查询可见组织 + DataScope scope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + + LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { + deptQuery.in(Dept::getId, scope.getDeptIds()); + } + deptQuery.orderByAsc(Dept::getNum); + + List deptList = abstractPermissionContext.getDeptService().list(deptQuery); + List deptDTOS = new ArrayList<>(); + List rootIds = new ArrayList<>(); + Set normalIds = new HashSet<>(); + for (Dept dept : deptList) { + RiskGroupDeptDTO deptDTO = new RiskGroupDeptDTO(); + deptDTO.setPid(dept.getPid()); + deptDTO.setId(dept.getId()); + deptDTO.setFullName(dept.getFullName()); + deptDTO.setName(dept.getSimpleName()); + deptDTOS.add(deptDTO); + deptDTO.setType(NODE_TYPE_DEPT); + normalIds.add(dept.getId()); + + //挂载设备信息 + LambdaQueryWrapper deviceQuery = new LambdaQueryWrapper<>(); + deviceQuery.eq(User::getDeptId, deptDTO.getId()); + deviceQuery.eq(User::getStatus, "1"); + List deviceInfos = abstractPermissionContext.getUserService().list(deviceQuery); + + deptDTO.setChildrenNodes(deviceInfos.stream().map(this::createDeptDTO).collect(Collectors.toList())); + } + + for (RiskGroupDeptDTO deptDTO : deptDTOS) { + if (!normalIds.contains(deptDTO.getPid())) { + rootIds.add(deptDTO.getPid()); + } + } + + //过滤根节点,支持多根展示 + RiskGroupDefaultTreeBuildFactory abstractTreeBuildFactory = new RiskGroupDefaultTreeBuildFactory(); + List newTree = new ArrayList<>(); + rootIds = rootIds.stream().distinct().collect(Collectors.toList()); + for (Long rootId : rootIds) { + abstractTreeBuildFactory.setRootId(rootId + ""); + newTree.addAll(abstractTreeBuildFactory.doTreeBuild(deptDTOS)); + } + + return newTree; + } + + @Transactional + @Override + public void createSysUserGroup(SysUserRiskGroup sysUserGroup, List userIds) { + this.baseMapper.insert(sysUserGroup); + GroupUserRelDTO relDTO = new GroupUserRelDTO(); + relDTO.setGroupId(sysUserGroup.getId()); + relDTO.setUserIds(userIds); + relUserService.batchAdd(relDTO); + } + + + /** + * 创建节点 + * + * @param userInfo 用户信息 + * @return + */ + private GroupDeptDTO createDeptDTO(User userInfo) { + GroupDeptDTO deptDTO = new GroupDeptDTO(); + deptDTO.setType(NODE_TYPE_USER); + deptDTO.setId(userInfo.getId()); + deptDTO.setPid(userInfo.getDeptId()); + deptDTO.setUserDTO(userInfo); + deptDTO.setName(userInfo.getName()); + deptDTO.setFullName(userInfo.getName()); + deptDTO.setUserId(userInfo.getId() + ""); + return deptDTO; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/tree/RiskGroupDefaultTreeBuildFactory.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/tree/RiskGroupDefaultTreeBuildFactory.java new file mode 100644 index 0000000..69c18ad --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/tree/RiskGroupDefaultTreeBuildFactory.java @@ -0,0 +1,30 @@ +package com.casic.missiles.modular.group.tree; + +import com.casic.missiles.core.treebuild.DefaultTreeBuildFactory; +import com.casic.missiles.model.tree.Tree; + +import java.util.ArrayList; +import java.util.List; + +public class RiskGroupDefaultTreeBuildFactory extends DefaultTreeBuildFactory { + private String rootId; + @Override + protected List afterBuild(List nodes) { + //去掉所有的二级节点 + ArrayList results = new ArrayList<>(); + for (T node : nodes) { + if (node.getNodeParentId().equals(rootId)) { + results.add(node); + } + } + return results; + } + + public String getRootId() { + return rootId; + } + + public void setRootId(String rootId) { + this.rootId = rootId; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/RiskGroupDeptDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/RiskGroupDeptDTO.java new file mode 100644 index 0000000..7f6c157 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/RiskGroupDeptDTO.java @@ -0,0 +1,61 @@ +package com.casic.missiles.modular.group.vo; + +import com.casic.missiles.model.tree.Tree; +import com.casic.missiles.modular.device.model.RiskPointInfo; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +@Data +public class RiskGroupDeptDTO implements Tree { + @ApiModelProperty("组织主键") + private Long id; + + @ApiModelProperty("父部门ID") + private Long pid; + + @ApiModelProperty("组织简称") + private String name; + + @ApiModelProperty("组织全称") + private String fullName; + + @ApiModelProperty("子节点") + private List children = new ArrayList<>(); + + @ApiModelProperty("节点类型(1 组织 2 人员)") + private String type; + + @ApiModelProperty("用户信息") + private User userDTO; + private String userId; + private RiskPointInfo riskPointInfo; + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + @Override + public String getNodeId() { + return id + ""; + } + + @Override + public String getNodeParentId() { + return pid + ""; + } + + @Override + public void setChildrenNodes(List childrenNodes) { + children.addAll(childrenNodes); + children = children.stream().distinct().collect(Collectors.toList()); + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupPointVO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupPointVO.java new file mode 100644 index 0000000..3f6ca41 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupPointVO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.group.vo; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 风险点所属人员组对象VO + * + * @author lwh + * @date 2024-07-11 + */ +@Data +public class SysRiskGroupPointVO { + private static final long serialVersionUID = 1L; + + + @ApiModelProperty(value = "用户组ID", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备ID", dataType = "Long") + private Long targetId; + + public QueryWrapper genQuery() { + QueryWrapper query = new QueryWrapper<>(); + if (groupId != null) { + query.eq("group_id", groupId); + } + if (targetId != null) { + query.eq("target_id", targetId); + } + return query; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupRelUserVO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupRelUserVO.java new file mode 100644 index 0000000..5a95d82 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupRelUserVO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.group.vo; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 组人员管理对象VO + * + * @author lwh + * @date 2024-07-11 + */ +@Data +public class SysRiskGroupRelUserVO { + private static final long serialVersionUID = 1L; + + + @ApiModelProperty(value = "组ID", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + private Long userId; + + public QueryWrapper genQuery() { + QueryWrapper query = new QueryWrapper<>(); + if (groupId != null) { + query.eq("group_id", groupId); + } + if (userId != null) { + query.eq("user_id", userId); + } + return query; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskUserGroupVO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskUserGroupVO.java new file mode 100644 index 0000000..6363c3b --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskUserGroupVO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.group.vo; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.system.model.SysUserGroup; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 用户组信息对象VO + * + * @author lwh + * @date 2024-07-11 + */ +@Data +public class SysRiskUserGroupVO { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "用户组名称", dataType = "String") + private String groupName; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + private Long deptId; + @ApiModelProperty(value = "创建时间起始", dataType = "String") + private String startTime; + @ApiModelProperty(value = "创建时间结束", dataType = "String") + private String endTime; + @ApiModelProperty(value = "创建者ID", dataType = "Long") + private Long createId; + + public QueryWrapper genQuery() { + QueryWrapper query = new QueryWrapper<>(); + if (StrUtil.isNotEmpty(groupName)) { + query.like("a.group_name", groupName); + } + if (StrUtil.isNotEmpty(startTime)) { + query.ge("a.create_time", startTime); + } + if (StrUtil.isNotEmpty(endTime)) { + query.le("a.create_time", endTime); + } + if (deptId != null) { + query.eq("a.dept_id", deptId); + } + if (createId != null) { + query.eq("a.create_id", createId); + } + return query; + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java new file mode 100644 index 0000000..1ca5eb1 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java @@ -0,0 +1,63 @@ +package com.casic.missiles.modular.device.enums; + +/** + * wvp设备类型转换 + * + * @author lwh + * @Date 2017年1月10日 下午9:54:13 + */ +public enum AvDeptEnum { + + DEPT0("0066", "801",0L), + DEPT1("0059", "699厂",1L), + DEPT2("0055", "283厂",1L), + DEPT3("0022", "201所",1L), + DEPT4("0027", "206所",1L), + DEPT5("0013", "23所",1L); + + String code; + String message; + Long deptId; + AvDeptEnum(String code, String message, Long deptId) { + this.code = code; + this.message = message; + this.deptId = deptId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public static AvDeptEnum valueOfCode(String value) { + if (value == null) { + return null; + } else { + for (AvDeptEnum ms : AvDeptEnum.values()) { + if (ms.getCode().equals(value)) { + return ms; + } + } + return null; + } + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java new file mode 100644 index 0000000..573d0e2 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.task; + +import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; + +public class Test { + public static void main(String[] args) { + System.out.println(AvStatusTypeEnum.valueOfType(new Integer(1)).getMessage()); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java new file mode 100644 index 0000000..7c06c67 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java @@ -0,0 +1,77 @@ +package com.casic.missiles.modular.device.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpSession; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class RiskSyncController extends BaseController { + @Resource + private IClientAuthService clientAuthService; + @Resource + private AbstractDeptService deptService; + @Resource + private AbstractUserService userService; + @PostMapping("/client/login") + @ResponseBody + public ResponseData login(@RequestBody RiskLoginForm deviceLoginForm, HttpSession session) { + return clientAuthService.login(deviceLoginForm, session); + } + + /** + * 全量组织信息读取 + * + * @return + */ + @PostMapping("/dept/list") + @ResponseBody + public ResponseDataDTO> dept() { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = deptService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量用户信息读取 + * + * @return + */ + @PostMapping("/user/list") + @ResponseBody + public ResponseDataDTO> user() { + //todo 此处租户拦截需移除 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量设备信息读取 + * + * @return + */ + @PostMapping("/device/list") + @ResponseBody + public ResponseDataDTO> device() { + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java new file mode 100644 index 0000000..5e5b890 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class UserSyncController extends BaseController { + + @Resource + private IBusDeviceInfoService busDeviceInfoService; + + /** + * 登录用户授权设备权限查看 + * @return + */ + @GetMapping("/device/permissions") + @ResponseBody + public ResponseDataDTO> devicePermissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } + + /** + * 登录用户风险点授权查询 + * @return + */ + @GetMapping("/permissions") + @ResponseBody + public ResponseDataDTO> permissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java new file mode 100644 index 0000000..07b8df8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +/** + * 设备登录接口 + */ +@Data +public class RiskLoginForm { + /** + * 设备编码 + */ + private String clientId; + + /** + * 时间戳 + */ + private Long time; + + /** + * 加密后数据 加密格式sn+时间戳 时效性为6小时 + */ + private String secret; + + /** + * 设备登录注册IP + */ + private String ip; + + /** + * 设备登录注册port + */ + private String port; +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java new file mode 100644 index 0000000..40fdb4b --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.device.service; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; + +import javax.servlet.http.HttpSession; + +public interface IClientAuthService { + /** + * @param deviceLoginForm + * @param session + * @return + */ + ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session); +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java new file mode 100644 index 0000000..576e857 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.device.service.impl; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import cn.hutool.jwt.JWT; +import cn.hutool.jwt.JWTUtil; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.util.IRiskCacheUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpSession; +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Service +public class ClientAuthServiceImpl implements IClientAuthService { + @Value("${casic.client.privateKey:MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALKcwHHOg0F6Zkq7GOVnOnTgvH9vSPXFFTOcEqOVBIBPBz7UNrEGkp1PhZ+oC4WVJAsDuot2e1fDZy9QS9HF92MmnYp9kuQRhGZjHctPnVZ0Kai5BES0ytHqPeauLyNXxOOS0YKYEUwpft4Z5Azw7bj3JWNvLrnTZvNld6FDvTslAgMBAAECgYAqN/kZLYpC+O6i7XSmDO95XwHPUXu6dDpdt5+EQR4OQh/hTwIaeAZB3uEj6vHGQomBfQEkI/5lsU97lIxHanbd+Hro7JyIhsGD5LR5XnZHVKzFiZW62OIU6FI9dlQNN8miiblnmyDwiMA3okaHl0O7qQjZ+IvY2csgmJc7AXpPpQJBAOhrhcfWFcgffj2O6HYNlBLFfbboc/ZzrEADDXKnxRSHlo5o8W+6gylG/L2NGtbag5S68B9VYzdkSQ1++5C+Ws8CQQDEu7h311PLEiKgqzGHpjzadQETmt/jMadaKQmT0TZwNVi6X8lR17U5hF8dAqZzUzr9kUC0HRIZhg4Uv1v3W3fLAkB4YPhxgJjXhjhEefg87Nt8vX1Xdx5Yz6CvpuUYNX0GHRQFvqUOUXQNtQ7CvorgLV1pc0lbcUZqMi8EJnj1hyJRAkEAjHXWm8GiMt+M15fCsi3vTq2xChVOekBuUsHv85iwvGZqJg7ThtpyqlEnM2g7/STUfkvhnXcQACclEI0blTy6BwJAPmFyhU+d0ejVpbc53TdrL2HqYYUHi/tTy/dtUa7lbypzdwwJ2M1Tv5PE8sQxr9tgMbebfxVb/RFKdiCCtzC4ng==}") + private String privateKey; + + @Override + public ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session) { + //固定秘钥解析 + try { + String str = RSAUtils.decrypt(deviceLoginForm.getSecret(), privateKey); + Long time = Long.valueOf(StrUtil.split(str, "_").get(1)); + //边缘盒子时差与服务时差不可超过24小时 + if (time == null || System.currentTimeMillis() - time > 3600 * 24 * 1000) { + return ResponseData.error("请求时间超时"); + } + deviceLoginForm.setTime(time); + } catch (Exception e) { + e.printStackTrace(); + return ResponseData.error("设备解析异常!"); + } + + try { + String token = this.createJwtToken(deviceLoginForm); + IRiskCacheUtil.put(token, token); + return ResponseData.success(token); + } catch (Exception e) { + log.error("设备登录异常:{}", e.getMessage()); + return ResponseData.error("登录异常,请联系管理员"); + } +} + /** + * token创建 + * + * @param loginForm 登录信息 + * @param device 设备信息 + * @return + * @throws Exception + */ + public String createJwtToken(RiskLoginForm loginForm) throws Exception { + Map payload = new HashMap<>(); + payload.put("clientId", loginForm.getClientId()); // 设备编号 + payload.put("time", loginForm.getTime()); // 请求时间 + + //RSA 解密 + String str = RSAUtils.decrypt(loginForm.getSecret(), privateKey); + String key = loginForm.getClientId()+"_" + loginForm.getTime() ; + if (!key.equals(str)) { + //秘钥验证失败 + throw new ServiceException(500,"秘钥验证失败"); + } + +// long exp = new Date().getTime() + 2 * 3600000; // 2小时后的时间戳 +// payload.put("exp", exp); + + // 创建JWT + String jwt = JWTUtil.createToken(payload, "token-203-202405".getBytes()); + + return jwt; + } + + /** + * token解析 + * + * @param jwtStr token + * @return + * @throws Exception + */ + public static RiskLoginForm parseToken(String jwtStr){ + JWT jwtObj = new JWTUtil().parseToken(jwtStr); + RiskLoginForm deviceLoginForm = new RiskLoginForm(); + deviceLoginForm.setClientId(Convert.toStr(jwtObj.getPayload("clientId"))); + return deviceLoginForm; + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java new file mode 100644 index 0000000..0e91ac8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.util; +import cn.hutool.cache.Cache; +import cn.hutool.cache.CacheUtil; +/** + * token有效 + */ +public class IRiskCacheUtil { + /** + * 1小时内不活跃 会踢掉 + */ + private static Cache fifoCache = CacheUtil.newFIFOCache(1000, 1000 * 60 * 60); + + public static void put(String key, String value) { + fifoCache.put(key, value); + } + + public static String get(String key) { + return fifoCache.get(key); + } + + public static void remove(String key) { + fifoCache.remove(key); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java new file mode 100644 index 0000000..805c32a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceGroupDict extends AbstractDictMap { + + @Override + public void init() { + //检索条件 + put("groupName", "分组名称"); + put("startTime", "起始时间"); + put("endTime", "结束时间"); + //新增修改属性 + put("cameraIds", "设备国标号"); + put("personIds", "人员主键集合"); + put("description","备注"); + put("id","主键"); + put("ids","主键集合"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java new file mode 100644 index 0000000..895fbd9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceQueryDict extends AbstractDictMap { + + @Override + public void init() { + put("devType", "类型查询"); + put("keyword", "设备名称"); + put("deptName", "所属单位"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java new file mode 100644 index 0000000..88da6df --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.device.util; + +public class DeviceScopeUtil { +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java new file mode 100644 index 0000000..2e3e478 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.device.controller; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.auth.dto.DeviceLoginForm; +import com.casic.missiles.modular.auth.util.ICacheUtil; +import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; +import com.casic.missiles.modular.device.service.IAlarmRecordService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +@Api(tags = "告警记录") +@RestController +@RequestMapping("/record") +public class AlarmUploadController extends BaseController { + + private final IAlarmRecordService alarmRecordService; + private final IDeviceAuthService deviceAuthService; + public AlarmUploadController(IAlarmRecordService alarmRecordService, IDeviceAuthService deviceAuthService) { + this.alarmRecordService = alarmRecordService; + this.deviceAuthService = deviceAuthService; + } + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } + @BussinessLog(value = "告警记录上报接口") + @ApiOperation(value = "告警记录上报接口") + @PostMapping(value = "/upload") + public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return createAuthError(); + } + alarmRecordService.upload(alarmRecord); + return ResponseDataDTO.success(); + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java new file mode 100644 index 0000000..3f1c189 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class RecognitionStreamDTO { + private Long id; + private String recognitionStreamFlag; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java new file mode 100644 index 0000000..fa5ae4a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java @@ -0,0 +1,167 @@ +package com.casic.missiles.modular.group.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IRiskPointInfoService; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.group.vo.SysRiskGroupPointVO; +import com.casic.missiles.modular.group.vo.SysRiskGroupRelUserVO; +import com.casic.missiles.modular.group.vo.SysRiskUserGroupVO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import com.casic.missiles.modular.system.vo.SysGroupRelUserVO; +import com.casic.missiles.modular.system.vo.SysUserGroupVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.ibatis.annotations.Param; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; + +/** + * 风险点组信息Controller + * + * @author lwh + * @date 2024-07-11 + */ +@Api(tags = "风险点组信息") +@RestController +@RequestMapping("/sys/risk/group") +public class SysUserRiskGroupController extends BaseController { + private final IRiskPointInfoService riskPointInfoService; + private final ISysUserRiskGroupService sysUserGroupService; + private final AbstractPermissionContext permissionContext; + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysUserRiskGroupController(IRiskPointInfoService riskPointInfoService, ISysUserRiskGroupService sysUserGroupService, AbstractPermissionContext permissionContext, ISysRiskGroupRelUserService sysGroupRelUserService) { + this.riskPointInfoService = riskPointInfoService; + this.sysUserGroupService = sysUserGroupService; + this.permissionContext = permissionContext; + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @BussinessLog(value = "风险点分组查询") + @ApiOperation(value = "风险点分组查询", hidden = true) + @GetMapping(value = "/list") + public ResponseDataDTO> list(SysRiskUserGroupVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysUserGroupService.list(query)); + } + + @BussinessLog(value = "分组人员列表查询") + @ApiOperation(value = "分组人员列表查询") + @GetMapping(value = "/groupUserList") + public ResponseDataDTO> groupUserList(SysRiskGroupRelUserVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysGroupRelUserService.list(query)); + } + + @BussinessLog(value = "风险点分组人员查询") + @ApiOperation(value = "风险点分组人员分页查询") + @GetMapping(value = "/groupUserPage") + public ResponseDataDTO> listPage(SysRiskGroupRelUserVO sysGroupRelUserVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysGroupRelUserVO.genQuery(); + List relUsers = sysGroupRelUserService.selectSysGroupRelUserPage(page, query); + page.setRecords(relUsers); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "用户分组批量新增") + @ApiOperation(value = "批量新增接口") + @PostMapping(value = "/batch-add") + public ResponseDataDTO batchAdd(@RequestBody GroupUserRelDTO relDTO) { + sysGroupRelUserService.batchAdd(relDTO); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组人员删除") + @ApiOperation(value = "用户组人员删除接口") + @GetMapping(value = "/user/delete") + public ResponseDataDTO userDel(@Param("用户组人员关联主键") String id) { + sysGroupRelUserService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "风险点分组分页查询") + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(SysRiskUserGroupVO sysUserGroupVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysUserGroupVO.genQuery(); + + List sysUserGroups = sysUserGroupService.selectSysUserGroupPage(page, query); + page.setRecords(sysUserGroups); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "风险点分组新增") + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.save(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组修改") + @ApiOperation(value = "修改接口") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.updateById(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组删除") + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + sysUserGroupService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "批量删除") + @ApiOperation(value = "批量删除", hidden = true) + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + sysUserGroupService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "详情查询") + @ApiOperation(value = "详情查询", hidden = true) + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(sysUserGroupService.getById(id)); + } + + @BussinessLog(value = "用户树") + @ApiOperation(value = "用户树查询") + @GetMapping(value = "/person/tree") + public ResponseDataDTO> personTree() { + return ResponseDataDTO.success(sysUserGroupService.personTree()); + } + + @BussinessLog(value = "风险点树查询") + @ApiOperation(value = "风险点树查询") + @GetMapping(value = "/tree") + public ResponseDataDTO> tree(String riskType) { + return ResponseDataDTO.success(riskPointInfoService.tree(riskType)); + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java new file mode 100644 index 0000000..419eb27 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备所属人员组 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupPointMapper extends BaseMapper { +/** +* 设备所属人员组 分页检索 +*/ +List selectSysGroupDevicePage(@Param("page") Page page, @Param("ew" ) QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java new file mode 100644 index 0000000..eb41227 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 组人员管理 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupRelUserMapper extends BaseMapper { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java new file mode 100644 index 0000000..e8352df --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.system.model.SysUserGroup; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 用户组信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysUserRiskGroupMapper extends BaseMapper { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml new file mode 100644 index 0000000..6fa6a4d --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + id , + group_id as groupId , + create_time as createTime , + target_Id as targetId + + + a.id , + a.group_id + as groupId , + a.create_time + as createTime , + a.target_Id + as targetId + + + + + + and group_id = #{request.groupId} + + + and device_id = #{request.deviceId} + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml new file mode 100644 index 0000000..a627546 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + id , + group_id as groupId , + user_id as userId , + create_time as createTime + + + a.id, + a.group_id + as groupId , + a.user_id + as userId , + a.create_time + as createTime + + + + + + and group_id = #{request.groupId} + + + and user_id = #{request.userId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml new file mode 100644 index 0000000..3245136 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + id, + group_name as groupName , + create_time as createTime , + dept_id as deptId , + create_id as createId + + + a.id,a.group_name as groupName , + a.create_time + as createTime , + a.dept_id + as deptId , + a.create_id + as createId,a.description + + + + + + and group_name like concat('%',#{request.groupName},'%') + + + and dept_id = #{request.deptId} + + + and create_id = #{request.createId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java new file mode 100644 index 0000000..e44328f --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class GroupRiskRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("风险点集合") + private List targetIds; + @ApiModelProperty("用户ID集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java new file mode 100644 index 0000000..f8758bf --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class RiskGroupUserRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("设备集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java new file mode 100644 index 0000000..b386d5b --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java @@ -0,0 +1,53 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 风险点所属组 sys_risk_group_point + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_risk_group_point") +public class SysRiskGroupPoint extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableId("id") + private Long id; + + @ApiModelProperty(value = "用户组ID", dataType = "Long") + @TableField("group_id") + private Long groupId; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty(value = "风险点ID", dataType = "Long") + @TableField("target_id") + private Long targetId; + + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; + + @Override + public String toString() { + return "SysGroupDevice{" + + "id=" + id + + "groupId=" + groupId + + "createTime=" + createTime + + "targetId=" + targetId + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java new file mode 100644 index 0000000..949caa3 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java @@ -0,0 +1,55 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 组人员管理对象 sys_group_rel_user + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_risk_group_rel_user") +public class SysRiskGroupRelUser extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + + @ApiModelProperty(value = "组ID", dataType = "Long") + @TableField("group_id") + private Long groupId; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + @TableField("user_id") + private Long userId; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + @ApiModelProperty(value = "用户姓名", dataType = "String") + @TableField(exist = false) + private String realName; + + @ApiModelProperty(value = "用户名", dataType = "String") + @TableField(exist = false) + private String account; + + @Override + public String toString() { + return "SysGroupRelUser{" + + "id=" + id + + "groupId=" + groupId + + "userId=" + userId + + "createTime=" + createTime + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java new file mode 100644 index 0000000..1b73dc0 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java @@ -0,0 +1,97 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 危险点分组组信息对象 sys_user_risk_group + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_user_risk_group") +public class SysUserRiskGroup extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableId("id") + private Long id; + + @ApiModelProperty(value = "组名称", dataType = "String", required = true) + @TableField("group_name") + private String groupName; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty(value = "所属组织(保留字段)", dataType = "Long") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty(value = "描述信息", dataType = "String") + @TableField("description") + private String description; + + @ApiModelProperty(value = "密级字典", dataType = "String") + @TableField("safe") + private int safe; + + @ApiModelProperty(value = "创建者ID", dataType = "Long") + @TableField("create_id") + private Long createId; + + + @ApiModelProperty(value = "类型(1 危险点 2 重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "Long") + @TableField("group_type") + private String groupType; + @TableField(exist = false) + private String groupTypeName; + /** + * 风险点集合 + */ + @ApiModelProperty(value = "风险点集合(逗号拼接)", dataType = "String") + @TableField(exist = false) + private String pointIds; + + @ApiModelProperty(value = "数量", dataType = "Long") + @TableField(exist = false) + private Integer targetNum; + /** + * 用户集合 + */ + @ApiModelProperty(value = "用户集合(逗号拼接)", dataType = "String") + @TableField(exist = false) + private String personIds; + + @ApiModelProperty(value = "用户名称", dataType = "String") + @TableField(exist = false) + private String realName; + + @ApiModelProperty(value = "用户名", dataType = "String") + @TableField(exist = false) + private String account; + + @ApiModelProperty(value = "密级字典名称", dataType = "String") + @TableField(exist = false) + private String safeName; + + @Override + public String toString() { + return "SysUserGroup{" + + "id=" + id + + "groupName=" + groupName + + "createTime=" + createTime + + "deptId=" + deptId + + "createId=" + createId + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java new file mode 100644 index 0000000..4657ce4 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.device.dto.GroupRelDTO; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; + +import java.util.List; + + +/** + *

+ * 设备所属人员组 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysRiskGroupPointService extends IService { + /** + * 设备所属人员组 分页检索 + */ + List selectSysGroupDevicePage(Page page, QueryWrapper query); + + /** + * 设备组批量新增 + * + * @param relDTO + */ + void batchAdd(GroupRiskRelDTO relDTO); + + + /** + * 增量更新 + * @param groupId + * @param deviceIds + */ + void batchIncremental(Long groupId, List deviceIds); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java new file mode 100644 index 0000000..591eef2 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; + +import java.util.List; + + +/** + *

+ * 组人员管理 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysRiskGroupRelUserService extends IService { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(Page page, QueryWrapper query); + + void batchAdd(GroupUserRelDTO relDTO); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java new file mode 100644 index 0000000..1e0889c --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; + +import java.util.List; + + +/** + *

+ * 用户组信息 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysUserRiskGroupService extends IService { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(Page page, QueryWrapper query); + + List personTree(); + + /** + * 创建用户组 + * + * @param sysUserGroup 用户组信息 + * @param userIds 用户信息 + */ + void createSysUserGroup(SysUserRiskGroup sysUserGroup, List userIds); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java new file mode 100644 index 0000000..6839887 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java @@ -0,0 +1,118 @@ +package com.casic.missiles.modular.group.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +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.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.group.dao.SysRiskGroupPointMapper; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import com.casic.missiles.modular.group.service.ISysRiskGroupPointService; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + + +/** + *

+ * 设备所属人员组 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysRiskGroupPointServiceImpl extends ServiceImpl implements ISysRiskGroupPointService { + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysRiskGroupPointServiceImpl(ISysRiskGroupRelUserService sysGroupRelUserService) { + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @Override + public List selectSysGroupDevicePage(Page page, QueryWrapper query) { + return this.baseMapper.selectSysGroupDevicePage(page, query); + } + + @Transactional + @Override + public void batchAdd(GroupRiskRelDTO relDTO) { + + if (CollectionUtil.isEmpty(relDTO.getTargetIds())) { + ServiceException serviceException = new ServiceException(500, "添加不能为空!"); + throw serviceException; + } + + //删除 + QueryWrapper query = new QueryWrapper<>(); + query.eq("group_id", relDTO.getGroupId()); + this.remove(query); + + //保存分组与危险点对应关系 + List groupDevices = new ArrayList<>(); + for (Long deviceId : relDTO.getTargetIds()) { + SysRiskGroupPoint sysGroupDevice = new SysRiskGroupPoint(); + sysGroupDevice.setTargetId(deviceId); + sysGroupDevice.setGroupId(relDTO.getGroupId()); + sysGroupDevice.setCreateTime(new Date()); + groupDevices.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(groupDevices); + + //批量保存风险点与用户关系 + GroupUserRelDTO groupUserRelDTO = new GroupUserRelDTO(); + groupUserRelDTO.setGroupId(relDTO.getGroupId()); + groupUserRelDTO.setUserIds(relDTO.getUserIds()); + sysGroupRelUserService.batchAdd(groupUserRelDTO); + + } + + @Override + public void batchIncremental(Long groupId, List deviceIds) { + List groupDevices = this.list(new LambdaQueryWrapper().eq(SysRiskGroupPoint::getGroupId, groupId)); + if (CollectionUtil.isEmpty(groupDevices)) { + saveDevices(groupId, deviceIds); + } else { + List oldDevices = groupDevices.stream().map(SysRiskGroupPoint::getTargetId).collect(Collectors.toList()); + List delIds = CollectionUtil.subtractToList(oldDevices, deviceIds); + List saveDevices = CollectionUtil.subtractToList(deviceIds, oldDevices); + + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.eq(SysRiskGroupPoint::getGroupId, groupId); + delQuery.in(SysRiskGroupPoint::getTargetId, delIds); + if (CollectionUtil.isNotEmpty(delIds)) { + this.remove(delQuery); + } + saveDevices(groupId, saveDevices); + } + } + + private void saveDevices(Long groupId, List saveDevices) { + List saves = new ArrayList<>(); + for (Long deviceId : saveDevices) { + SysRiskGroupPoint sysGroupDevice = new SysRiskGroupPoint(); + sysGroupDevice.setTargetId(deviceId); + sysGroupDevice.setGroupId(groupId); + sysGroupDevice.setCreateTime(new Date()); + saves.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(saves); + } + + private void saveOrUpdateBatchList(List groupDevices) { + for (SysRiskGroupPoint groupDevice : groupDevices) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysRiskGroupPoint::getGroupId, groupDevice.getGroupId()); + query.eq(SysRiskGroupPoint::getTargetId, groupDevice.getTargetId()); + this.saveOrUpdate(groupDevice, query); + } + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java new file mode 100644 index 0000000..83cd76a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.group.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +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.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.group.dao.SysRiskGroupPointMapper; +import com.casic.missiles.modular.group.dao.SysRiskGroupRelUserMapper; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.system.dao.SysGroupRelUserMapper; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + + +/** + *

+ * 组人员管理 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysRiskGroupRelUserServiceImpl extends ServiceImpl implements ISysRiskGroupRelUserService { + @Override + public List selectSysGroupRelUserPage(Page page, QueryWrapper query) { + return this.baseMapper.selectSysGroupRelUserPage(page, query); + } + + @Transactional + @Override + public void batchAdd(GroupUserRelDTO relDTO) { + if (CollectionUtil.isEmpty(relDTO.getUserIds())) { + ServiceException serviceException = new ServiceException(500, "添加不能为空!"); + throw serviceException; + } + //删除 + QueryWrapper query = new QueryWrapper<>(); + query.eq("group_id",relDTO.getGroupId()); + this.remove(query); + //添加设备信息 + List groupDevices = new ArrayList<>(); + for (Long deviceId : relDTO.getUserIds()) { + SysRiskGroupRelUser sysGroupDevice = new SysRiskGroupRelUser(); + sysGroupDevice.setUserId(deviceId); + sysGroupDevice.setGroupId(relDTO.getGroupId()); + sysGroupDevice.setCreateTime(new Date()); + groupDevices.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(groupDevices); + } + + private void saveOrUpdateBatchList(List groupDevices) { + for (SysRiskGroupRelUser groupDevice : groupDevices) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysRiskGroupRelUser::getGroupId, groupDevice.getGroupId()); + query.eq(SysRiskGroupRelUser::getUserId, groupDevice.getUserId()); + this.saveOrUpdate(groupDevice, query); + } + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java new file mode 100644 index 0000000..b3bb9a8 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java @@ -0,0 +1,246 @@ +package com.casic.missiles.modular.group.service.impl; + +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.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.modular.data.constants.DataConstants; +import com.casic.missiles.modular.group.dao.SysUserRiskGroupMapper; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupPointService; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.tree.RiskGroupDefaultTreeBuildFactory; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + + +/** + *

+ * 用户组信息 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysUserRiskGroupServiceImpl extends ServiceImpl implements ISysUserRiskGroupService { + @Lazy + @Resource + private ISysRiskGroupPointService sysRiskGroupPointService; + private final AbstractPermissionContext abstractPermissionContext; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_USER = "2"; + private final AbstractDictService dictService; + @Lazy + @Resource + private ISysRiskGroupRelUserService relUserService; + + public SysUserRiskGroupServiceImpl(AbstractPermissionContext abstractPermissionContext, AbstractDictService dictService) { + this.abstractPermissionContext = abstractPermissionContext; + this.dictService = dictService; + } + + @Override + public List selectSysUserGroupPage(Page page, QueryWrapper query) { + //分组过滤当前权限 + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + query.in("a.dept_id", dataScope.getDeptIds()); + } + List riskGroups = this.baseMapper.selectSysUserGroupPage(page, query); + for (SysUserRiskGroup riskGroup : riskGroups) { + wrapperInfo(riskGroup); + } + return riskGroups; + } + + private void wrapperInfo(SysUserRiskGroup riskGroup) { + riskGroup.setSafeName(dictService.getDictNameByCode(DataConstants.DICT_SECRET_LEVEL_TYPE, riskGroup.getSafe() + "")); + //查询关联设备 + LambdaQueryWrapper deviceQuery = new LambdaQueryWrapper<>(); + deviceQuery.eq(SysRiskGroupPoint::getGroupId, riskGroup.getId()); + List devices = sysRiskGroupPointService.list(deviceQuery); + if (devices != null) { + List deviceList = devices.stream().map(SysRiskGroupPoint::getTargetId).collect(Collectors.toList()); + riskGroup.setPointIds(StrUtil.join(",", deviceList)); + riskGroup.setTargetNum(deviceList.size()); + } + + riskGroup.setGroupTypeName(dictService.getDictNameByCode(DataConstants.dangerAssessmentType, riskGroup.getGroupType())); + //查询关联人员 + LambdaQueryWrapper personQuery = new LambdaQueryWrapper<>(); + personQuery.eq(SysRiskGroupRelUser::getGroupId, riskGroup.getId()); + List persons = relUserService.list(personQuery); + if (persons != null) { + List personIds = persons.stream().map(SysRiskGroupRelUser::getUserId).collect(Collectors.toList()); + riskGroup.setPersonIds(StrUtil.join(",", personIds)); + } + } + + private void setGroupInfo(SysUserRiskGroup entity) { + if (StrUtil.isNotEmpty(entity.getPointIds())) { + entity.setTargetNum(StrUtil.split(entity.getPointIds(), ",").size()); + } else { + entity.setTargetNum(0); + } + } + + @Override + public boolean save(SysUserRiskGroup entity) { + AuthUser authUser = abstractPermissionContext.getAuthService().getLoginUser(); + entity.setCreateTime(new Date()); + entity.setCreateId(authUser.getId()); + if (entity.getDeptId() == null) { + entity.setDeptId(authUser.getDeptId()); + } + setGroupInfo(entity); + super.save(entity); + batchSave(entity, entity.getId()); + return true; + } + + @Override + public boolean updateById(SysUserRiskGroup entity) { + AuthUser authUser = abstractPermissionContext.getAuthService().getLoginUser(); + entity.setCreateTime(new Date()); + entity.setCreateId(authUser.getId()); + if (entity.getDeptId() == null) { + entity.setDeptId(authUser.getDeptId()); + } + setGroupInfo(entity); + super.updateById(entity); + batchSave(entity, entity.getId()); + return true; + } + + /** + * 数据转换 + * + * @param entity + * @param groupId + */ + private void batchSave(SysUserRiskGroup entity, Long groupId) { + GroupRiskRelDTO groupRelDTO = new GroupRiskRelDTO(); + groupRelDTO.setGroupId(groupId); + if (StrUtil.isNotEmpty(entity.getPointIds())) { + long[] longs = StrUtil.splitToLong(entity.getPointIds(), ","); + List devices = new ArrayList<>(); + for (long aLong : longs) { + devices.add(aLong); + } + groupRelDTO.setTargetIds(devices); + } + if (StrUtil.isNotEmpty(entity.getPersonIds())) { + List persons = new ArrayList<>(); + long[] longs = StrUtil.splitToLong(entity.getPersonIds(), ","); + + for (long aLong : longs) { + persons.add(aLong); + } + groupRelDTO.setUserIds(persons); + } + sysRiskGroupPointService.batchAdd(groupRelDTO); + } + + @Override + public List personTree() { + + //查询可见组织 + DataScope scope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + + LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { + deptQuery.in(Dept::getId, scope.getDeptIds()); + } + deptQuery.orderByAsc(Dept::getNum); + + List deptList = abstractPermissionContext.getDeptService().list(deptQuery); + List deptDTOS = new ArrayList<>(); + List rootIds = new ArrayList<>(); + Set normalIds = new HashSet<>(); + for (Dept dept : deptList) { + RiskGroupDeptDTO deptDTO = new RiskGroupDeptDTO(); + deptDTO.setPid(dept.getPid()); + deptDTO.setId(dept.getId()); + deptDTO.setFullName(dept.getFullName()); + deptDTO.setName(dept.getSimpleName()); + deptDTOS.add(deptDTO); + deptDTO.setType(NODE_TYPE_DEPT); + normalIds.add(dept.getId()); + + //挂载设备信息 + LambdaQueryWrapper deviceQuery = new LambdaQueryWrapper<>(); + deviceQuery.eq(User::getDeptId, deptDTO.getId()); + deviceQuery.eq(User::getStatus, "1"); + List deviceInfos = abstractPermissionContext.getUserService().list(deviceQuery); + + deptDTO.setChildrenNodes(deviceInfos.stream().map(this::createDeptDTO).collect(Collectors.toList())); + } + + for (RiskGroupDeptDTO deptDTO : deptDTOS) { + if (!normalIds.contains(deptDTO.getPid())) { + rootIds.add(deptDTO.getPid()); + } + } + + //过滤根节点,支持多根展示 + RiskGroupDefaultTreeBuildFactory abstractTreeBuildFactory = new RiskGroupDefaultTreeBuildFactory(); + List newTree = new ArrayList<>(); + rootIds = rootIds.stream().distinct().collect(Collectors.toList()); + for (Long rootId : rootIds) { + abstractTreeBuildFactory.setRootId(rootId + ""); + newTree.addAll(abstractTreeBuildFactory.doTreeBuild(deptDTOS)); + } + + return newTree; + } + + @Transactional + @Override + public void createSysUserGroup(SysUserRiskGroup sysUserGroup, List userIds) { + this.baseMapper.insert(sysUserGroup); + GroupUserRelDTO relDTO = new GroupUserRelDTO(); + relDTO.setGroupId(sysUserGroup.getId()); + relDTO.setUserIds(userIds); + relUserService.batchAdd(relDTO); + } + + + /** + * 创建节点 + * + * @param userInfo 用户信息 + * @return + */ + private GroupDeptDTO createDeptDTO(User userInfo) { + GroupDeptDTO deptDTO = new GroupDeptDTO(); + deptDTO.setType(NODE_TYPE_USER); + deptDTO.setId(userInfo.getId()); + deptDTO.setPid(userInfo.getDeptId()); + deptDTO.setUserDTO(userInfo); + deptDTO.setName(userInfo.getName()); + deptDTO.setFullName(userInfo.getName()); + deptDTO.setUserId(userInfo.getId() + ""); + return deptDTO; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/tree/RiskGroupDefaultTreeBuildFactory.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/tree/RiskGroupDefaultTreeBuildFactory.java new file mode 100644 index 0000000..69c18ad --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/tree/RiskGroupDefaultTreeBuildFactory.java @@ -0,0 +1,30 @@ +package com.casic.missiles.modular.group.tree; + +import com.casic.missiles.core.treebuild.DefaultTreeBuildFactory; +import com.casic.missiles.model.tree.Tree; + +import java.util.ArrayList; +import java.util.List; + +public class RiskGroupDefaultTreeBuildFactory extends DefaultTreeBuildFactory { + private String rootId; + @Override + protected List afterBuild(List nodes) { + //去掉所有的二级节点 + ArrayList results = new ArrayList<>(); + for (T node : nodes) { + if (node.getNodeParentId().equals(rootId)) { + results.add(node); + } + } + return results; + } + + public String getRootId() { + return rootId; + } + + public void setRootId(String rootId) { + this.rootId = rootId; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/RiskGroupDeptDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/RiskGroupDeptDTO.java new file mode 100644 index 0000000..7f6c157 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/RiskGroupDeptDTO.java @@ -0,0 +1,61 @@ +package com.casic.missiles.modular.group.vo; + +import com.casic.missiles.model.tree.Tree; +import com.casic.missiles.modular.device.model.RiskPointInfo; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +@Data +public class RiskGroupDeptDTO implements Tree { + @ApiModelProperty("组织主键") + private Long id; + + @ApiModelProperty("父部门ID") + private Long pid; + + @ApiModelProperty("组织简称") + private String name; + + @ApiModelProperty("组织全称") + private String fullName; + + @ApiModelProperty("子节点") + private List children = new ArrayList<>(); + + @ApiModelProperty("节点类型(1 组织 2 人员)") + private String type; + + @ApiModelProperty("用户信息") + private User userDTO; + private String userId; + private RiskPointInfo riskPointInfo; + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + @Override + public String getNodeId() { + return id + ""; + } + + @Override + public String getNodeParentId() { + return pid + ""; + } + + @Override + public void setChildrenNodes(List childrenNodes) { + children.addAll(childrenNodes); + children = children.stream().distinct().collect(Collectors.toList()); + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupPointVO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupPointVO.java new file mode 100644 index 0000000..3f6ca41 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupPointVO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.group.vo; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 风险点所属人员组对象VO + * + * @author lwh + * @date 2024-07-11 + */ +@Data +public class SysRiskGroupPointVO { + private static final long serialVersionUID = 1L; + + + @ApiModelProperty(value = "用户组ID", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备ID", dataType = "Long") + private Long targetId; + + public QueryWrapper genQuery() { + QueryWrapper query = new QueryWrapper<>(); + if (groupId != null) { + query.eq("group_id", groupId); + } + if (targetId != null) { + query.eq("target_id", targetId); + } + return query; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupRelUserVO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupRelUserVO.java new file mode 100644 index 0000000..5a95d82 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupRelUserVO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.group.vo; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 组人员管理对象VO + * + * @author lwh + * @date 2024-07-11 + */ +@Data +public class SysRiskGroupRelUserVO { + private static final long serialVersionUID = 1L; + + + @ApiModelProperty(value = "组ID", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + private Long userId; + + public QueryWrapper genQuery() { + QueryWrapper query = new QueryWrapper<>(); + if (groupId != null) { + query.eq("group_id", groupId); + } + if (userId != null) { + query.eq("user_id", userId); + } + return query; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskUserGroupVO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskUserGroupVO.java new file mode 100644 index 0000000..6363c3b --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskUserGroupVO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.group.vo; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.system.model.SysUserGroup; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 用户组信息对象VO + * + * @author lwh + * @date 2024-07-11 + */ +@Data +public class SysRiskUserGroupVO { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "用户组名称", dataType = "String") + private String groupName; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + private Long deptId; + @ApiModelProperty(value = "创建时间起始", dataType = "String") + private String startTime; + @ApiModelProperty(value = "创建时间结束", dataType = "String") + private String endTime; + @ApiModelProperty(value = "创建者ID", dataType = "Long") + private Long createId; + + public QueryWrapper genQuery() { + QueryWrapper query = new QueryWrapper<>(); + if (StrUtil.isNotEmpty(groupName)) { + query.like("a.group_name", groupName); + } + if (StrUtil.isNotEmpty(startTime)) { + query.ge("a.create_time", startTime); + } + if (StrUtil.isNotEmpty(endTime)) { + query.le("a.create_time", endTime); + } + if (deptId != null) { + query.eq("a.dept_id", deptId); + } + if (createId != null) { + query.eq("a.create_id", createId); + } + return query; + } +} diff --git a/casic-web/src/main/resources/doc/20250227.txt b/casic-web/src/main/resources/doc/20250227.txt new file mode 100644 index 0000000..daf4d4c --- /dev/null +++ b/casic-web/src/main/resources/doc/20250227.txt @@ -0,0 +1,68 @@ +1.权限配置检查 + 对应属性需配置为 security_admin + casic: + video: + admin: + role: security_admin +1.租户设定更新 + 创建租户设定角色 角色别名必须是tenantAdministrator + + 分配给管理员 需手动入库授权, sys_user表 role_id字段添加租户设定字段, + sys_ru_relation 添加用户绑定关系 + + INSERT INTO sys_tenant(ID, TENANT_NAME, TENANT_CODE, LINK_PERSON, TEL, CLEARDAY, FLAG, TS) VALUES (1, '航天二院', '001', NULL, NULL, NULL, '0', '2025-02-21 14:41:20'); + + ALTER TABLE sys_user_group ADD COLUMN tenant_id VARCHAR(64); + ALTER TABLE sys_group_device ADD COLUMN tenant_id VARCHAR(64); + ALTER TABLE sys_group_rel_user ADD COLUMN tenant_id VARCHAR(64); + ALTER TABLE device_group_info ADD COLUMN tenant_id VARCHAR(64); + update device_group_info set tenant_id = 1; + update sys_user set tenant_id = 1; + update sys_role set tenant_id = 1; + update sys_rm_relation set tenant_id = 1; + update sys_ru_relation set tenant_id = 1; + update sys_dept set tenant_id = 1; + update sys_user_group set tenant_id = 1; + update sys_group_device set tenant_id = 1; + update sys_group_rel_user set tenant_id = 1; + 添加租户ID 0 + +2.表risk_point_info 字段 secret_level值密级默认 0 设定 + +3.新增表 sys_user_risk_group sys_risk_group_rel_user sys_risk_group_point + +CREATE TABLE sys_user_risk_group +( + id numeric(20,0) NOT NULL, + group_name VARCHAR(256), + create_time date, + dept_id numeric(20,0), + create_id numeric(20,0), + description VARCHAR(256), + safe SMALLINT, + group_type SMALLINT, + tenant_id VARCHAR(64), + PRIMARY KEY (id) +); + +CREATE TABLE sys_risk_group_rel_user +( + id numeric(20,0) NOT NULL, + group_id numeric(20,0), + user_id numeric(20,0), + create_time date, + tenant_id VARCHAR(64) +); + +CREATE TABLE sys_risk_group_point +( + id numeric(20,0) NOT NULL, + group_id numeric(20,0), + create_time date, + target_id numeric(20,0), + tenant_id VARCHAR(64) +); + + + + diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java new file mode 100644 index 0000000..1ca5eb1 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java @@ -0,0 +1,63 @@ +package com.casic.missiles.modular.device.enums; + +/** + * wvp设备类型转换 + * + * @author lwh + * @Date 2017年1月10日 下午9:54:13 + */ +public enum AvDeptEnum { + + DEPT0("0066", "801",0L), + DEPT1("0059", "699厂",1L), + DEPT2("0055", "283厂",1L), + DEPT3("0022", "201所",1L), + DEPT4("0027", "206所",1L), + DEPT5("0013", "23所",1L); + + String code; + String message; + Long deptId; + AvDeptEnum(String code, String message, Long deptId) { + this.code = code; + this.message = message; + this.deptId = deptId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public static AvDeptEnum valueOfCode(String value) { + if (value == null) { + return null; + } else { + for (AvDeptEnum ms : AvDeptEnum.values()) { + if (ms.getCode().equals(value)) { + return ms; + } + } + return null; + } + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java new file mode 100644 index 0000000..573d0e2 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.task; + +import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; + +public class Test { + public static void main(String[] args) { + System.out.println(AvStatusTypeEnum.valueOfType(new Integer(1)).getMessage()); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java new file mode 100644 index 0000000..7c06c67 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java @@ -0,0 +1,77 @@ +package com.casic.missiles.modular.device.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpSession; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class RiskSyncController extends BaseController { + @Resource + private IClientAuthService clientAuthService; + @Resource + private AbstractDeptService deptService; + @Resource + private AbstractUserService userService; + @PostMapping("/client/login") + @ResponseBody + public ResponseData login(@RequestBody RiskLoginForm deviceLoginForm, HttpSession session) { + return clientAuthService.login(deviceLoginForm, session); + } + + /** + * 全量组织信息读取 + * + * @return + */ + @PostMapping("/dept/list") + @ResponseBody + public ResponseDataDTO> dept() { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = deptService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量用户信息读取 + * + * @return + */ + @PostMapping("/user/list") + @ResponseBody + public ResponseDataDTO> user() { + //todo 此处租户拦截需移除 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量设备信息读取 + * + * @return + */ + @PostMapping("/device/list") + @ResponseBody + public ResponseDataDTO> device() { + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java new file mode 100644 index 0000000..5e5b890 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class UserSyncController extends BaseController { + + @Resource + private IBusDeviceInfoService busDeviceInfoService; + + /** + * 登录用户授权设备权限查看 + * @return + */ + @GetMapping("/device/permissions") + @ResponseBody + public ResponseDataDTO> devicePermissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } + + /** + * 登录用户风险点授权查询 + * @return + */ + @GetMapping("/permissions") + @ResponseBody + public ResponseDataDTO> permissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java new file mode 100644 index 0000000..07b8df8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +/** + * 设备登录接口 + */ +@Data +public class RiskLoginForm { + /** + * 设备编码 + */ + private String clientId; + + /** + * 时间戳 + */ + private Long time; + + /** + * 加密后数据 加密格式sn+时间戳 时效性为6小时 + */ + private String secret; + + /** + * 设备登录注册IP + */ + private String ip; + + /** + * 设备登录注册port + */ + private String port; +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java new file mode 100644 index 0000000..40fdb4b --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.device.service; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; + +import javax.servlet.http.HttpSession; + +public interface IClientAuthService { + /** + * @param deviceLoginForm + * @param session + * @return + */ + ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session); +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java new file mode 100644 index 0000000..576e857 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.device.service.impl; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import cn.hutool.jwt.JWT; +import cn.hutool.jwt.JWTUtil; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.util.IRiskCacheUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpSession; +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Service +public class ClientAuthServiceImpl implements IClientAuthService { + @Value("${casic.client.privateKey:MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALKcwHHOg0F6Zkq7GOVnOnTgvH9vSPXFFTOcEqOVBIBPBz7UNrEGkp1PhZ+oC4WVJAsDuot2e1fDZy9QS9HF92MmnYp9kuQRhGZjHctPnVZ0Kai5BES0ytHqPeauLyNXxOOS0YKYEUwpft4Z5Azw7bj3JWNvLrnTZvNld6FDvTslAgMBAAECgYAqN/kZLYpC+O6i7XSmDO95XwHPUXu6dDpdt5+EQR4OQh/hTwIaeAZB3uEj6vHGQomBfQEkI/5lsU97lIxHanbd+Hro7JyIhsGD5LR5XnZHVKzFiZW62OIU6FI9dlQNN8miiblnmyDwiMA3okaHl0O7qQjZ+IvY2csgmJc7AXpPpQJBAOhrhcfWFcgffj2O6HYNlBLFfbboc/ZzrEADDXKnxRSHlo5o8W+6gylG/L2NGtbag5S68B9VYzdkSQ1++5C+Ws8CQQDEu7h311PLEiKgqzGHpjzadQETmt/jMadaKQmT0TZwNVi6X8lR17U5hF8dAqZzUzr9kUC0HRIZhg4Uv1v3W3fLAkB4YPhxgJjXhjhEefg87Nt8vX1Xdx5Yz6CvpuUYNX0GHRQFvqUOUXQNtQ7CvorgLV1pc0lbcUZqMi8EJnj1hyJRAkEAjHXWm8GiMt+M15fCsi3vTq2xChVOekBuUsHv85iwvGZqJg7ThtpyqlEnM2g7/STUfkvhnXcQACclEI0blTy6BwJAPmFyhU+d0ejVpbc53TdrL2HqYYUHi/tTy/dtUa7lbypzdwwJ2M1Tv5PE8sQxr9tgMbebfxVb/RFKdiCCtzC4ng==}") + private String privateKey; + + @Override + public ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session) { + //固定秘钥解析 + try { + String str = RSAUtils.decrypt(deviceLoginForm.getSecret(), privateKey); + Long time = Long.valueOf(StrUtil.split(str, "_").get(1)); + //边缘盒子时差与服务时差不可超过24小时 + if (time == null || System.currentTimeMillis() - time > 3600 * 24 * 1000) { + return ResponseData.error("请求时间超时"); + } + deviceLoginForm.setTime(time); + } catch (Exception e) { + e.printStackTrace(); + return ResponseData.error("设备解析异常!"); + } + + try { + String token = this.createJwtToken(deviceLoginForm); + IRiskCacheUtil.put(token, token); + return ResponseData.success(token); + } catch (Exception e) { + log.error("设备登录异常:{}", e.getMessage()); + return ResponseData.error("登录异常,请联系管理员"); + } +} + /** + * token创建 + * + * @param loginForm 登录信息 + * @param device 设备信息 + * @return + * @throws Exception + */ + public String createJwtToken(RiskLoginForm loginForm) throws Exception { + Map payload = new HashMap<>(); + payload.put("clientId", loginForm.getClientId()); // 设备编号 + payload.put("time", loginForm.getTime()); // 请求时间 + + //RSA 解密 + String str = RSAUtils.decrypt(loginForm.getSecret(), privateKey); + String key = loginForm.getClientId()+"_" + loginForm.getTime() ; + if (!key.equals(str)) { + //秘钥验证失败 + throw new ServiceException(500,"秘钥验证失败"); + } + +// long exp = new Date().getTime() + 2 * 3600000; // 2小时后的时间戳 +// payload.put("exp", exp); + + // 创建JWT + String jwt = JWTUtil.createToken(payload, "token-203-202405".getBytes()); + + return jwt; + } + + /** + * token解析 + * + * @param jwtStr token + * @return + * @throws Exception + */ + public static RiskLoginForm parseToken(String jwtStr){ + JWT jwtObj = new JWTUtil().parseToken(jwtStr); + RiskLoginForm deviceLoginForm = new RiskLoginForm(); + deviceLoginForm.setClientId(Convert.toStr(jwtObj.getPayload("clientId"))); + return deviceLoginForm; + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java new file mode 100644 index 0000000..0e91ac8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.util; +import cn.hutool.cache.Cache; +import cn.hutool.cache.CacheUtil; +/** + * token有效 + */ +public class IRiskCacheUtil { + /** + * 1小时内不活跃 会踢掉 + */ + private static Cache fifoCache = CacheUtil.newFIFOCache(1000, 1000 * 60 * 60); + + public static void put(String key, String value) { + fifoCache.put(key, value); + } + + public static String get(String key) { + return fifoCache.get(key); + } + + public static void remove(String key) { + fifoCache.remove(key); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java new file mode 100644 index 0000000..805c32a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceGroupDict extends AbstractDictMap { + + @Override + public void init() { + //检索条件 + put("groupName", "分组名称"); + put("startTime", "起始时间"); + put("endTime", "结束时间"); + //新增修改属性 + put("cameraIds", "设备国标号"); + put("personIds", "人员主键集合"); + put("description","备注"); + put("id","主键"); + put("ids","主键集合"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java new file mode 100644 index 0000000..895fbd9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceQueryDict extends AbstractDictMap { + + @Override + public void init() { + put("devType", "类型查询"); + put("keyword", "设备名称"); + put("deptName", "所属单位"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java new file mode 100644 index 0000000..88da6df --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.device.util; + +public class DeviceScopeUtil { +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java new file mode 100644 index 0000000..2e3e478 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.device.controller; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.auth.dto.DeviceLoginForm; +import com.casic.missiles.modular.auth.util.ICacheUtil; +import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; +import com.casic.missiles.modular.device.service.IAlarmRecordService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +@Api(tags = "告警记录") +@RestController +@RequestMapping("/record") +public class AlarmUploadController extends BaseController { + + private final IAlarmRecordService alarmRecordService; + private final IDeviceAuthService deviceAuthService; + public AlarmUploadController(IAlarmRecordService alarmRecordService, IDeviceAuthService deviceAuthService) { + this.alarmRecordService = alarmRecordService; + this.deviceAuthService = deviceAuthService; + } + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } + @BussinessLog(value = "告警记录上报接口") + @ApiOperation(value = "告警记录上报接口") + @PostMapping(value = "/upload") + public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return createAuthError(); + } + alarmRecordService.upload(alarmRecord); + return ResponseDataDTO.success(); + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java new file mode 100644 index 0000000..3f1c189 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class RecognitionStreamDTO { + private Long id; + private String recognitionStreamFlag; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java new file mode 100644 index 0000000..fa5ae4a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java @@ -0,0 +1,167 @@ +package com.casic.missiles.modular.group.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IRiskPointInfoService; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.group.vo.SysRiskGroupPointVO; +import com.casic.missiles.modular.group.vo.SysRiskGroupRelUserVO; +import com.casic.missiles.modular.group.vo.SysRiskUserGroupVO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import com.casic.missiles.modular.system.vo.SysGroupRelUserVO; +import com.casic.missiles.modular.system.vo.SysUserGroupVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.ibatis.annotations.Param; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; + +/** + * 风险点组信息Controller + * + * @author lwh + * @date 2024-07-11 + */ +@Api(tags = "风险点组信息") +@RestController +@RequestMapping("/sys/risk/group") +public class SysUserRiskGroupController extends BaseController { + private final IRiskPointInfoService riskPointInfoService; + private final ISysUserRiskGroupService sysUserGroupService; + private final AbstractPermissionContext permissionContext; + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysUserRiskGroupController(IRiskPointInfoService riskPointInfoService, ISysUserRiskGroupService sysUserGroupService, AbstractPermissionContext permissionContext, ISysRiskGroupRelUserService sysGroupRelUserService) { + this.riskPointInfoService = riskPointInfoService; + this.sysUserGroupService = sysUserGroupService; + this.permissionContext = permissionContext; + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @BussinessLog(value = "风险点分组查询") + @ApiOperation(value = "风险点分组查询", hidden = true) + @GetMapping(value = "/list") + public ResponseDataDTO> list(SysRiskUserGroupVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysUserGroupService.list(query)); + } + + @BussinessLog(value = "分组人员列表查询") + @ApiOperation(value = "分组人员列表查询") + @GetMapping(value = "/groupUserList") + public ResponseDataDTO> groupUserList(SysRiskGroupRelUserVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysGroupRelUserService.list(query)); + } + + @BussinessLog(value = "风险点分组人员查询") + @ApiOperation(value = "风险点分组人员分页查询") + @GetMapping(value = "/groupUserPage") + public ResponseDataDTO> listPage(SysRiskGroupRelUserVO sysGroupRelUserVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysGroupRelUserVO.genQuery(); + List relUsers = sysGroupRelUserService.selectSysGroupRelUserPage(page, query); + page.setRecords(relUsers); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "用户分组批量新增") + @ApiOperation(value = "批量新增接口") + @PostMapping(value = "/batch-add") + public ResponseDataDTO batchAdd(@RequestBody GroupUserRelDTO relDTO) { + sysGroupRelUserService.batchAdd(relDTO); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组人员删除") + @ApiOperation(value = "用户组人员删除接口") + @GetMapping(value = "/user/delete") + public ResponseDataDTO userDel(@Param("用户组人员关联主键") String id) { + sysGroupRelUserService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "风险点分组分页查询") + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(SysRiskUserGroupVO sysUserGroupVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysUserGroupVO.genQuery(); + + List sysUserGroups = sysUserGroupService.selectSysUserGroupPage(page, query); + page.setRecords(sysUserGroups); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "风险点分组新增") + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.save(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组修改") + @ApiOperation(value = "修改接口") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.updateById(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组删除") + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + sysUserGroupService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "批量删除") + @ApiOperation(value = "批量删除", hidden = true) + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + sysUserGroupService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "详情查询") + @ApiOperation(value = "详情查询", hidden = true) + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(sysUserGroupService.getById(id)); + } + + @BussinessLog(value = "用户树") + @ApiOperation(value = "用户树查询") + @GetMapping(value = "/person/tree") + public ResponseDataDTO> personTree() { + return ResponseDataDTO.success(sysUserGroupService.personTree()); + } + + @BussinessLog(value = "风险点树查询") + @ApiOperation(value = "风险点树查询") + @GetMapping(value = "/tree") + public ResponseDataDTO> tree(String riskType) { + return ResponseDataDTO.success(riskPointInfoService.tree(riskType)); + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java new file mode 100644 index 0000000..419eb27 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备所属人员组 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupPointMapper extends BaseMapper { +/** +* 设备所属人员组 分页检索 +*/ +List selectSysGroupDevicePage(@Param("page") Page page, @Param("ew" ) QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java new file mode 100644 index 0000000..eb41227 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 组人员管理 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupRelUserMapper extends BaseMapper { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java new file mode 100644 index 0000000..e8352df --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.system.model.SysUserGroup; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 用户组信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysUserRiskGroupMapper extends BaseMapper { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml new file mode 100644 index 0000000..6fa6a4d --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + id , + group_id as groupId , + create_time as createTime , + target_Id as targetId + + + a.id , + a.group_id + as groupId , + a.create_time + as createTime , + a.target_Id + as targetId + + + + + + and group_id = #{request.groupId} + + + and device_id = #{request.deviceId} + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml new file mode 100644 index 0000000..a627546 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + id , + group_id as groupId , + user_id as userId , + create_time as createTime + + + a.id, + a.group_id + as groupId , + a.user_id + as userId , + a.create_time + as createTime + + + + + + and group_id = #{request.groupId} + + + and user_id = #{request.userId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml new file mode 100644 index 0000000..3245136 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + id, + group_name as groupName , + create_time as createTime , + dept_id as deptId , + create_id as createId + + + a.id,a.group_name as groupName , + a.create_time + as createTime , + a.dept_id + as deptId , + a.create_id + as createId,a.description + + + + + + and group_name like concat('%',#{request.groupName},'%') + + + and dept_id = #{request.deptId} + + + and create_id = #{request.createId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java new file mode 100644 index 0000000..e44328f --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class GroupRiskRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("风险点集合") + private List targetIds; + @ApiModelProperty("用户ID集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java new file mode 100644 index 0000000..f8758bf --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class RiskGroupUserRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("设备集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java new file mode 100644 index 0000000..b386d5b --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java @@ -0,0 +1,53 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 风险点所属组 sys_risk_group_point + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_risk_group_point") +public class SysRiskGroupPoint extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableId("id") + private Long id; + + @ApiModelProperty(value = "用户组ID", dataType = "Long") + @TableField("group_id") + private Long groupId; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty(value = "风险点ID", dataType = "Long") + @TableField("target_id") + private Long targetId; + + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; + + @Override + public String toString() { + return "SysGroupDevice{" + + "id=" + id + + "groupId=" + groupId + + "createTime=" + createTime + + "targetId=" + targetId + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java new file mode 100644 index 0000000..949caa3 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java @@ -0,0 +1,55 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 组人员管理对象 sys_group_rel_user + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_risk_group_rel_user") +public class SysRiskGroupRelUser extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + + @ApiModelProperty(value = "组ID", dataType = "Long") + @TableField("group_id") + private Long groupId; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + @TableField("user_id") + private Long userId; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + @ApiModelProperty(value = "用户姓名", dataType = "String") + @TableField(exist = false) + private String realName; + + @ApiModelProperty(value = "用户名", dataType = "String") + @TableField(exist = false) + private String account; + + @Override + public String toString() { + return "SysGroupRelUser{" + + "id=" + id + + "groupId=" + groupId + + "userId=" + userId + + "createTime=" + createTime + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java new file mode 100644 index 0000000..1b73dc0 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java @@ -0,0 +1,97 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 危险点分组组信息对象 sys_user_risk_group + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_user_risk_group") +public class SysUserRiskGroup extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableId("id") + private Long id; + + @ApiModelProperty(value = "组名称", dataType = "String", required = true) + @TableField("group_name") + private String groupName; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty(value = "所属组织(保留字段)", dataType = "Long") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty(value = "描述信息", dataType = "String") + @TableField("description") + private String description; + + @ApiModelProperty(value = "密级字典", dataType = "String") + @TableField("safe") + private int safe; + + @ApiModelProperty(value = "创建者ID", dataType = "Long") + @TableField("create_id") + private Long createId; + + + @ApiModelProperty(value = "类型(1 危险点 2 重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "Long") + @TableField("group_type") + private String groupType; + @TableField(exist = false) + private String groupTypeName; + /** + * 风险点集合 + */ + @ApiModelProperty(value = "风险点集合(逗号拼接)", dataType = "String") + @TableField(exist = false) + private String pointIds; + + @ApiModelProperty(value = "数量", dataType = "Long") + @TableField(exist = false) + private Integer targetNum; + /** + * 用户集合 + */ + @ApiModelProperty(value = "用户集合(逗号拼接)", dataType = "String") + @TableField(exist = false) + private String personIds; + + @ApiModelProperty(value = "用户名称", dataType = "String") + @TableField(exist = false) + private String realName; + + @ApiModelProperty(value = "用户名", dataType = "String") + @TableField(exist = false) + private String account; + + @ApiModelProperty(value = "密级字典名称", dataType = "String") + @TableField(exist = false) + private String safeName; + + @Override + public String toString() { + return "SysUserGroup{" + + "id=" + id + + "groupName=" + groupName + + "createTime=" + createTime + + "deptId=" + deptId + + "createId=" + createId + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java new file mode 100644 index 0000000..4657ce4 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.device.dto.GroupRelDTO; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; + +import java.util.List; + + +/** + *

+ * 设备所属人员组 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysRiskGroupPointService extends IService { + /** + * 设备所属人员组 分页检索 + */ + List selectSysGroupDevicePage(Page page, QueryWrapper query); + + /** + * 设备组批量新增 + * + * @param relDTO + */ + void batchAdd(GroupRiskRelDTO relDTO); + + + /** + * 增量更新 + * @param groupId + * @param deviceIds + */ + void batchIncremental(Long groupId, List deviceIds); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java new file mode 100644 index 0000000..591eef2 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; + +import java.util.List; + + +/** + *

+ * 组人员管理 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysRiskGroupRelUserService extends IService { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(Page page, QueryWrapper query); + + void batchAdd(GroupUserRelDTO relDTO); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java new file mode 100644 index 0000000..1e0889c --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; + +import java.util.List; + + +/** + *

+ * 用户组信息 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysUserRiskGroupService extends IService { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(Page page, QueryWrapper query); + + List personTree(); + + /** + * 创建用户组 + * + * @param sysUserGroup 用户组信息 + * @param userIds 用户信息 + */ + void createSysUserGroup(SysUserRiskGroup sysUserGroup, List userIds); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java new file mode 100644 index 0000000..6839887 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java @@ -0,0 +1,118 @@ +package com.casic.missiles.modular.group.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +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.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.group.dao.SysRiskGroupPointMapper; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import com.casic.missiles.modular.group.service.ISysRiskGroupPointService; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + + +/** + *

+ * 设备所属人员组 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysRiskGroupPointServiceImpl extends ServiceImpl implements ISysRiskGroupPointService { + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysRiskGroupPointServiceImpl(ISysRiskGroupRelUserService sysGroupRelUserService) { + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @Override + public List selectSysGroupDevicePage(Page page, QueryWrapper query) { + return this.baseMapper.selectSysGroupDevicePage(page, query); + } + + @Transactional + @Override + public void batchAdd(GroupRiskRelDTO relDTO) { + + if (CollectionUtil.isEmpty(relDTO.getTargetIds())) { + ServiceException serviceException = new ServiceException(500, "添加不能为空!"); + throw serviceException; + } + + //删除 + QueryWrapper query = new QueryWrapper<>(); + query.eq("group_id", relDTO.getGroupId()); + this.remove(query); + + //保存分组与危险点对应关系 + List groupDevices = new ArrayList<>(); + for (Long deviceId : relDTO.getTargetIds()) { + SysRiskGroupPoint sysGroupDevice = new SysRiskGroupPoint(); + sysGroupDevice.setTargetId(deviceId); + sysGroupDevice.setGroupId(relDTO.getGroupId()); + sysGroupDevice.setCreateTime(new Date()); + groupDevices.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(groupDevices); + + //批量保存风险点与用户关系 + GroupUserRelDTO groupUserRelDTO = new GroupUserRelDTO(); + groupUserRelDTO.setGroupId(relDTO.getGroupId()); + groupUserRelDTO.setUserIds(relDTO.getUserIds()); + sysGroupRelUserService.batchAdd(groupUserRelDTO); + + } + + @Override + public void batchIncremental(Long groupId, List deviceIds) { + List groupDevices = this.list(new LambdaQueryWrapper().eq(SysRiskGroupPoint::getGroupId, groupId)); + if (CollectionUtil.isEmpty(groupDevices)) { + saveDevices(groupId, deviceIds); + } else { + List oldDevices = groupDevices.stream().map(SysRiskGroupPoint::getTargetId).collect(Collectors.toList()); + List delIds = CollectionUtil.subtractToList(oldDevices, deviceIds); + List saveDevices = CollectionUtil.subtractToList(deviceIds, oldDevices); + + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.eq(SysRiskGroupPoint::getGroupId, groupId); + delQuery.in(SysRiskGroupPoint::getTargetId, delIds); + if (CollectionUtil.isNotEmpty(delIds)) { + this.remove(delQuery); + } + saveDevices(groupId, saveDevices); + } + } + + private void saveDevices(Long groupId, List saveDevices) { + List saves = new ArrayList<>(); + for (Long deviceId : saveDevices) { + SysRiskGroupPoint sysGroupDevice = new SysRiskGroupPoint(); + sysGroupDevice.setTargetId(deviceId); + sysGroupDevice.setGroupId(groupId); + sysGroupDevice.setCreateTime(new Date()); + saves.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(saves); + } + + private void saveOrUpdateBatchList(List groupDevices) { + for (SysRiskGroupPoint groupDevice : groupDevices) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysRiskGroupPoint::getGroupId, groupDevice.getGroupId()); + query.eq(SysRiskGroupPoint::getTargetId, groupDevice.getTargetId()); + this.saveOrUpdate(groupDevice, query); + } + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java new file mode 100644 index 0000000..83cd76a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.group.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +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.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.group.dao.SysRiskGroupPointMapper; +import com.casic.missiles.modular.group.dao.SysRiskGroupRelUserMapper; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.system.dao.SysGroupRelUserMapper; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + + +/** + *

+ * 组人员管理 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysRiskGroupRelUserServiceImpl extends ServiceImpl implements ISysRiskGroupRelUserService { + @Override + public List selectSysGroupRelUserPage(Page page, QueryWrapper query) { + return this.baseMapper.selectSysGroupRelUserPage(page, query); + } + + @Transactional + @Override + public void batchAdd(GroupUserRelDTO relDTO) { + if (CollectionUtil.isEmpty(relDTO.getUserIds())) { + ServiceException serviceException = new ServiceException(500, "添加不能为空!"); + throw serviceException; + } + //删除 + QueryWrapper query = new QueryWrapper<>(); + query.eq("group_id",relDTO.getGroupId()); + this.remove(query); + //添加设备信息 + List groupDevices = new ArrayList<>(); + for (Long deviceId : relDTO.getUserIds()) { + SysRiskGroupRelUser sysGroupDevice = new SysRiskGroupRelUser(); + sysGroupDevice.setUserId(deviceId); + sysGroupDevice.setGroupId(relDTO.getGroupId()); + sysGroupDevice.setCreateTime(new Date()); + groupDevices.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(groupDevices); + } + + private void saveOrUpdateBatchList(List groupDevices) { + for (SysRiskGroupRelUser groupDevice : groupDevices) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysRiskGroupRelUser::getGroupId, groupDevice.getGroupId()); + query.eq(SysRiskGroupRelUser::getUserId, groupDevice.getUserId()); + this.saveOrUpdate(groupDevice, query); + } + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java new file mode 100644 index 0000000..b3bb9a8 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java @@ -0,0 +1,246 @@ +package com.casic.missiles.modular.group.service.impl; + +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.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.modular.data.constants.DataConstants; +import com.casic.missiles.modular.group.dao.SysUserRiskGroupMapper; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupPointService; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.tree.RiskGroupDefaultTreeBuildFactory; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + + +/** + *

+ * 用户组信息 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysUserRiskGroupServiceImpl extends ServiceImpl implements ISysUserRiskGroupService { + @Lazy + @Resource + private ISysRiskGroupPointService sysRiskGroupPointService; + private final AbstractPermissionContext abstractPermissionContext; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_USER = "2"; + private final AbstractDictService dictService; + @Lazy + @Resource + private ISysRiskGroupRelUserService relUserService; + + public SysUserRiskGroupServiceImpl(AbstractPermissionContext abstractPermissionContext, AbstractDictService dictService) { + this.abstractPermissionContext = abstractPermissionContext; + this.dictService = dictService; + } + + @Override + public List selectSysUserGroupPage(Page page, QueryWrapper query) { + //分组过滤当前权限 + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + query.in("a.dept_id", dataScope.getDeptIds()); + } + List riskGroups = this.baseMapper.selectSysUserGroupPage(page, query); + for (SysUserRiskGroup riskGroup : riskGroups) { + wrapperInfo(riskGroup); + } + return riskGroups; + } + + private void wrapperInfo(SysUserRiskGroup riskGroup) { + riskGroup.setSafeName(dictService.getDictNameByCode(DataConstants.DICT_SECRET_LEVEL_TYPE, riskGroup.getSafe() + "")); + //查询关联设备 + LambdaQueryWrapper deviceQuery = new LambdaQueryWrapper<>(); + deviceQuery.eq(SysRiskGroupPoint::getGroupId, riskGroup.getId()); + List devices = sysRiskGroupPointService.list(deviceQuery); + if (devices != null) { + List deviceList = devices.stream().map(SysRiskGroupPoint::getTargetId).collect(Collectors.toList()); + riskGroup.setPointIds(StrUtil.join(",", deviceList)); + riskGroup.setTargetNum(deviceList.size()); + } + + riskGroup.setGroupTypeName(dictService.getDictNameByCode(DataConstants.dangerAssessmentType, riskGroup.getGroupType())); + //查询关联人员 + LambdaQueryWrapper personQuery = new LambdaQueryWrapper<>(); + personQuery.eq(SysRiskGroupRelUser::getGroupId, riskGroup.getId()); + List persons = relUserService.list(personQuery); + if (persons != null) { + List personIds = persons.stream().map(SysRiskGroupRelUser::getUserId).collect(Collectors.toList()); + riskGroup.setPersonIds(StrUtil.join(",", personIds)); + } + } + + private void setGroupInfo(SysUserRiskGroup entity) { + if (StrUtil.isNotEmpty(entity.getPointIds())) { + entity.setTargetNum(StrUtil.split(entity.getPointIds(), ",").size()); + } else { + entity.setTargetNum(0); + } + } + + @Override + public boolean save(SysUserRiskGroup entity) { + AuthUser authUser = abstractPermissionContext.getAuthService().getLoginUser(); + entity.setCreateTime(new Date()); + entity.setCreateId(authUser.getId()); + if (entity.getDeptId() == null) { + entity.setDeptId(authUser.getDeptId()); + } + setGroupInfo(entity); + super.save(entity); + batchSave(entity, entity.getId()); + return true; + } + + @Override + public boolean updateById(SysUserRiskGroup entity) { + AuthUser authUser = abstractPermissionContext.getAuthService().getLoginUser(); + entity.setCreateTime(new Date()); + entity.setCreateId(authUser.getId()); + if (entity.getDeptId() == null) { + entity.setDeptId(authUser.getDeptId()); + } + setGroupInfo(entity); + super.updateById(entity); + batchSave(entity, entity.getId()); + return true; + } + + /** + * 数据转换 + * + * @param entity + * @param groupId + */ + private void batchSave(SysUserRiskGroup entity, Long groupId) { + GroupRiskRelDTO groupRelDTO = new GroupRiskRelDTO(); + groupRelDTO.setGroupId(groupId); + if (StrUtil.isNotEmpty(entity.getPointIds())) { + long[] longs = StrUtil.splitToLong(entity.getPointIds(), ","); + List devices = new ArrayList<>(); + for (long aLong : longs) { + devices.add(aLong); + } + groupRelDTO.setTargetIds(devices); + } + if (StrUtil.isNotEmpty(entity.getPersonIds())) { + List persons = new ArrayList<>(); + long[] longs = StrUtil.splitToLong(entity.getPersonIds(), ","); + + for (long aLong : longs) { + persons.add(aLong); + } + groupRelDTO.setUserIds(persons); + } + sysRiskGroupPointService.batchAdd(groupRelDTO); + } + + @Override + public List personTree() { + + //查询可见组织 + DataScope scope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + + LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { + deptQuery.in(Dept::getId, scope.getDeptIds()); + } + deptQuery.orderByAsc(Dept::getNum); + + List deptList = abstractPermissionContext.getDeptService().list(deptQuery); + List deptDTOS = new ArrayList<>(); + List rootIds = new ArrayList<>(); + Set normalIds = new HashSet<>(); + for (Dept dept : deptList) { + RiskGroupDeptDTO deptDTO = new RiskGroupDeptDTO(); + deptDTO.setPid(dept.getPid()); + deptDTO.setId(dept.getId()); + deptDTO.setFullName(dept.getFullName()); + deptDTO.setName(dept.getSimpleName()); + deptDTOS.add(deptDTO); + deptDTO.setType(NODE_TYPE_DEPT); + normalIds.add(dept.getId()); + + //挂载设备信息 + LambdaQueryWrapper deviceQuery = new LambdaQueryWrapper<>(); + deviceQuery.eq(User::getDeptId, deptDTO.getId()); + deviceQuery.eq(User::getStatus, "1"); + List deviceInfos = abstractPermissionContext.getUserService().list(deviceQuery); + + deptDTO.setChildrenNodes(deviceInfos.stream().map(this::createDeptDTO).collect(Collectors.toList())); + } + + for (RiskGroupDeptDTO deptDTO : deptDTOS) { + if (!normalIds.contains(deptDTO.getPid())) { + rootIds.add(deptDTO.getPid()); + } + } + + //过滤根节点,支持多根展示 + RiskGroupDefaultTreeBuildFactory abstractTreeBuildFactory = new RiskGroupDefaultTreeBuildFactory(); + List newTree = new ArrayList<>(); + rootIds = rootIds.stream().distinct().collect(Collectors.toList()); + for (Long rootId : rootIds) { + abstractTreeBuildFactory.setRootId(rootId + ""); + newTree.addAll(abstractTreeBuildFactory.doTreeBuild(deptDTOS)); + } + + return newTree; + } + + @Transactional + @Override + public void createSysUserGroup(SysUserRiskGroup sysUserGroup, List userIds) { + this.baseMapper.insert(sysUserGroup); + GroupUserRelDTO relDTO = new GroupUserRelDTO(); + relDTO.setGroupId(sysUserGroup.getId()); + relDTO.setUserIds(userIds); + relUserService.batchAdd(relDTO); + } + + + /** + * 创建节点 + * + * @param userInfo 用户信息 + * @return + */ + private GroupDeptDTO createDeptDTO(User userInfo) { + GroupDeptDTO deptDTO = new GroupDeptDTO(); + deptDTO.setType(NODE_TYPE_USER); + deptDTO.setId(userInfo.getId()); + deptDTO.setPid(userInfo.getDeptId()); + deptDTO.setUserDTO(userInfo); + deptDTO.setName(userInfo.getName()); + deptDTO.setFullName(userInfo.getName()); + deptDTO.setUserId(userInfo.getId() + ""); + return deptDTO; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/tree/RiskGroupDefaultTreeBuildFactory.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/tree/RiskGroupDefaultTreeBuildFactory.java new file mode 100644 index 0000000..69c18ad --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/tree/RiskGroupDefaultTreeBuildFactory.java @@ -0,0 +1,30 @@ +package com.casic.missiles.modular.group.tree; + +import com.casic.missiles.core.treebuild.DefaultTreeBuildFactory; +import com.casic.missiles.model.tree.Tree; + +import java.util.ArrayList; +import java.util.List; + +public class RiskGroupDefaultTreeBuildFactory extends DefaultTreeBuildFactory { + private String rootId; + @Override + protected List afterBuild(List nodes) { + //去掉所有的二级节点 + ArrayList results = new ArrayList<>(); + for (T node : nodes) { + if (node.getNodeParentId().equals(rootId)) { + results.add(node); + } + } + return results; + } + + public String getRootId() { + return rootId; + } + + public void setRootId(String rootId) { + this.rootId = rootId; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/RiskGroupDeptDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/RiskGroupDeptDTO.java new file mode 100644 index 0000000..7f6c157 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/RiskGroupDeptDTO.java @@ -0,0 +1,61 @@ +package com.casic.missiles.modular.group.vo; + +import com.casic.missiles.model.tree.Tree; +import com.casic.missiles.modular.device.model.RiskPointInfo; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +@Data +public class RiskGroupDeptDTO implements Tree { + @ApiModelProperty("组织主键") + private Long id; + + @ApiModelProperty("父部门ID") + private Long pid; + + @ApiModelProperty("组织简称") + private String name; + + @ApiModelProperty("组织全称") + private String fullName; + + @ApiModelProperty("子节点") + private List children = new ArrayList<>(); + + @ApiModelProperty("节点类型(1 组织 2 人员)") + private String type; + + @ApiModelProperty("用户信息") + private User userDTO; + private String userId; + private RiskPointInfo riskPointInfo; + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + @Override + public String getNodeId() { + return id + ""; + } + + @Override + public String getNodeParentId() { + return pid + ""; + } + + @Override + public void setChildrenNodes(List childrenNodes) { + children.addAll(childrenNodes); + children = children.stream().distinct().collect(Collectors.toList()); + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupPointVO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupPointVO.java new file mode 100644 index 0000000..3f6ca41 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupPointVO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.group.vo; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 风险点所属人员组对象VO + * + * @author lwh + * @date 2024-07-11 + */ +@Data +public class SysRiskGroupPointVO { + private static final long serialVersionUID = 1L; + + + @ApiModelProperty(value = "用户组ID", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备ID", dataType = "Long") + private Long targetId; + + public QueryWrapper genQuery() { + QueryWrapper query = new QueryWrapper<>(); + if (groupId != null) { + query.eq("group_id", groupId); + } + if (targetId != null) { + query.eq("target_id", targetId); + } + return query; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupRelUserVO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupRelUserVO.java new file mode 100644 index 0000000..5a95d82 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupRelUserVO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.group.vo; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 组人员管理对象VO + * + * @author lwh + * @date 2024-07-11 + */ +@Data +public class SysRiskGroupRelUserVO { + private static final long serialVersionUID = 1L; + + + @ApiModelProperty(value = "组ID", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + private Long userId; + + public QueryWrapper genQuery() { + QueryWrapper query = new QueryWrapper<>(); + if (groupId != null) { + query.eq("group_id", groupId); + } + if (userId != null) { + query.eq("user_id", userId); + } + return query; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskUserGroupVO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskUserGroupVO.java new file mode 100644 index 0000000..6363c3b --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskUserGroupVO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.group.vo; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.system.model.SysUserGroup; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 用户组信息对象VO + * + * @author lwh + * @date 2024-07-11 + */ +@Data +public class SysRiskUserGroupVO { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "用户组名称", dataType = "String") + private String groupName; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + private Long deptId; + @ApiModelProperty(value = "创建时间起始", dataType = "String") + private String startTime; + @ApiModelProperty(value = "创建时间结束", dataType = "String") + private String endTime; + @ApiModelProperty(value = "创建者ID", dataType = "Long") + private Long createId; + + public QueryWrapper genQuery() { + QueryWrapper query = new QueryWrapper<>(); + if (StrUtil.isNotEmpty(groupName)) { + query.like("a.group_name", groupName); + } + if (StrUtil.isNotEmpty(startTime)) { + query.ge("a.create_time", startTime); + } + if (StrUtil.isNotEmpty(endTime)) { + query.le("a.create_time", endTime); + } + if (deptId != null) { + query.eq("a.dept_id", deptId); + } + if (createId != null) { + query.eq("a.create_id", createId); + } + return query; + } +} diff --git a/casic-web/src/main/resources/doc/20250227.txt b/casic-web/src/main/resources/doc/20250227.txt new file mode 100644 index 0000000..daf4d4c --- /dev/null +++ b/casic-web/src/main/resources/doc/20250227.txt @@ -0,0 +1,68 @@ +1.权限配置检查 + 对应属性需配置为 security_admin + casic: + video: + admin: + role: security_admin +1.租户设定更新 + 创建租户设定角色 角色别名必须是tenantAdministrator + + 分配给管理员 需手动入库授权, sys_user表 role_id字段添加租户设定字段, + sys_ru_relation 添加用户绑定关系 + + INSERT INTO sys_tenant(ID, TENANT_NAME, TENANT_CODE, LINK_PERSON, TEL, CLEARDAY, FLAG, TS) VALUES (1, '航天二院', '001', NULL, NULL, NULL, '0', '2025-02-21 14:41:20'); + + ALTER TABLE sys_user_group ADD COLUMN tenant_id VARCHAR(64); + ALTER TABLE sys_group_device ADD COLUMN tenant_id VARCHAR(64); + ALTER TABLE sys_group_rel_user ADD COLUMN tenant_id VARCHAR(64); + ALTER TABLE device_group_info ADD COLUMN tenant_id VARCHAR(64); + update device_group_info set tenant_id = 1; + update sys_user set tenant_id = 1; + update sys_role set tenant_id = 1; + update sys_rm_relation set tenant_id = 1; + update sys_ru_relation set tenant_id = 1; + update sys_dept set tenant_id = 1; + update sys_user_group set tenant_id = 1; + update sys_group_device set tenant_id = 1; + update sys_group_rel_user set tenant_id = 1; + 添加租户ID 0 + +2.表risk_point_info 字段 secret_level值密级默认 0 设定 + +3.新增表 sys_user_risk_group sys_risk_group_rel_user sys_risk_group_point + +CREATE TABLE sys_user_risk_group +( + id numeric(20,0) NOT NULL, + group_name VARCHAR(256), + create_time date, + dept_id numeric(20,0), + create_id numeric(20,0), + description VARCHAR(256), + safe SMALLINT, + group_type SMALLINT, + tenant_id VARCHAR(64), + PRIMARY KEY (id) +); + +CREATE TABLE sys_risk_group_rel_user +( + id numeric(20,0) NOT NULL, + group_id numeric(20,0), + user_id numeric(20,0), + create_time date, + tenant_id VARCHAR(64) +); + +CREATE TABLE sys_risk_group_point +( + id numeric(20,0) NOT NULL, + group_id numeric(20,0), + create_time date, + target_id numeric(20,0), + tenant_id VARCHAR(64) +); + + + + diff --git a/casic-web/src/main/resources/doc/20250416.txt b/casic-web/src/main/resources/doc/20250416.txt new file mode 100644 index 0000000..14610e9 --- /dev/null +++ b/casic-web/src/main/resources/doc/20250416.txt @@ -0,0 +1,18 @@ +1.增加识别流开关 流媒体id 识别流国标号 + ALTER TABLE box_device_relation ADD COLUMN media_server_id VARCHAR(255); + ALTER TABLE box_device_relation ADD COLUMN recognition_gb VARCHAR(255); + ALTER TABLE box_device_relation ADD COLUMN recognition_stream_flag int; + + + + ALTER TABLE upload_log ADD COLUMN tenant_id VARCHAR(64); +2.增加字典值 mediaServerId + 对应值参考zlm中的mediaServerId 配置项 +3.更新box_device表以下字段类型为text + server_public_key + server_private_key + client_public_key + client_private_key + +4.casic.no-login-urls + 增加 /record/upload \ No newline at end of file diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java new file mode 100644 index 0000000..1ca5eb1 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java @@ -0,0 +1,63 @@ +package com.casic.missiles.modular.device.enums; + +/** + * wvp设备类型转换 + * + * @author lwh + * @Date 2017年1月10日 下午9:54:13 + */ +public enum AvDeptEnum { + + DEPT0("0066", "801",0L), + DEPT1("0059", "699厂",1L), + DEPT2("0055", "283厂",1L), + DEPT3("0022", "201所",1L), + DEPT4("0027", "206所",1L), + DEPT5("0013", "23所",1L); + + String code; + String message; + Long deptId; + AvDeptEnum(String code, String message, Long deptId) { + this.code = code; + this.message = message; + this.deptId = deptId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public static AvDeptEnum valueOfCode(String value) { + if (value == null) { + return null; + } else { + for (AvDeptEnum ms : AvDeptEnum.values()) { + if (ms.getCode().equals(value)) { + return ms; + } + } + return null; + } + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java new file mode 100644 index 0000000..573d0e2 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.task; + +import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; + +public class Test { + public static void main(String[] args) { + System.out.println(AvStatusTypeEnum.valueOfType(new Integer(1)).getMessage()); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java new file mode 100644 index 0000000..7c06c67 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java @@ -0,0 +1,77 @@ +package com.casic.missiles.modular.device.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpSession; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class RiskSyncController extends BaseController { + @Resource + private IClientAuthService clientAuthService; + @Resource + private AbstractDeptService deptService; + @Resource + private AbstractUserService userService; + @PostMapping("/client/login") + @ResponseBody + public ResponseData login(@RequestBody RiskLoginForm deviceLoginForm, HttpSession session) { + return clientAuthService.login(deviceLoginForm, session); + } + + /** + * 全量组织信息读取 + * + * @return + */ + @PostMapping("/dept/list") + @ResponseBody + public ResponseDataDTO> dept() { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = deptService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量用户信息读取 + * + * @return + */ + @PostMapping("/user/list") + @ResponseBody + public ResponseDataDTO> user() { + //todo 此处租户拦截需移除 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量设备信息读取 + * + * @return + */ + @PostMapping("/device/list") + @ResponseBody + public ResponseDataDTO> device() { + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java new file mode 100644 index 0000000..5e5b890 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class UserSyncController extends BaseController { + + @Resource + private IBusDeviceInfoService busDeviceInfoService; + + /** + * 登录用户授权设备权限查看 + * @return + */ + @GetMapping("/device/permissions") + @ResponseBody + public ResponseDataDTO> devicePermissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } + + /** + * 登录用户风险点授权查询 + * @return + */ + @GetMapping("/permissions") + @ResponseBody + public ResponseDataDTO> permissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java new file mode 100644 index 0000000..07b8df8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +/** + * 设备登录接口 + */ +@Data +public class RiskLoginForm { + /** + * 设备编码 + */ + private String clientId; + + /** + * 时间戳 + */ + private Long time; + + /** + * 加密后数据 加密格式sn+时间戳 时效性为6小时 + */ + private String secret; + + /** + * 设备登录注册IP + */ + private String ip; + + /** + * 设备登录注册port + */ + private String port; +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java new file mode 100644 index 0000000..40fdb4b --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.device.service; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; + +import javax.servlet.http.HttpSession; + +public interface IClientAuthService { + /** + * @param deviceLoginForm + * @param session + * @return + */ + ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session); +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java new file mode 100644 index 0000000..576e857 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.device.service.impl; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import cn.hutool.jwt.JWT; +import cn.hutool.jwt.JWTUtil; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.util.IRiskCacheUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpSession; +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Service +public class ClientAuthServiceImpl implements IClientAuthService { + @Value("${casic.client.privateKey:MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALKcwHHOg0F6Zkq7GOVnOnTgvH9vSPXFFTOcEqOVBIBPBz7UNrEGkp1PhZ+oC4WVJAsDuot2e1fDZy9QS9HF92MmnYp9kuQRhGZjHctPnVZ0Kai5BES0ytHqPeauLyNXxOOS0YKYEUwpft4Z5Azw7bj3JWNvLrnTZvNld6FDvTslAgMBAAECgYAqN/kZLYpC+O6i7XSmDO95XwHPUXu6dDpdt5+EQR4OQh/hTwIaeAZB3uEj6vHGQomBfQEkI/5lsU97lIxHanbd+Hro7JyIhsGD5LR5XnZHVKzFiZW62OIU6FI9dlQNN8miiblnmyDwiMA3okaHl0O7qQjZ+IvY2csgmJc7AXpPpQJBAOhrhcfWFcgffj2O6HYNlBLFfbboc/ZzrEADDXKnxRSHlo5o8W+6gylG/L2NGtbag5S68B9VYzdkSQ1++5C+Ws8CQQDEu7h311PLEiKgqzGHpjzadQETmt/jMadaKQmT0TZwNVi6X8lR17U5hF8dAqZzUzr9kUC0HRIZhg4Uv1v3W3fLAkB4YPhxgJjXhjhEefg87Nt8vX1Xdx5Yz6CvpuUYNX0GHRQFvqUOUXQNtQ7CvorgLV1pc0lbcUZqMi8EJnj1hyJRAkEAjHXWm8GiMt+M15fCsi3vTq2xChVOekBuUsHv85iwvGZqJg7ThtpyqlEnM2g7/STUfkvhnXcQACclEI0blTy6BwJAPmFyhU+d0ejVpbc53TdrL2HqYYUHi/tTy/dtUa7lbypzdwwJ2M1Tv5PE8sQxr9tgMbebfxVb/RFKdiCCtzC4ng==}") + private String privateKey; + + @Override + public ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session) { + //固定秘钥解析 + try { + String str = RSAUtils.decrypt(deviceLoginForm.getSecret(), privateKey); + Long time = Long.valueOf(StrUtil.split(str, "_").get(1)); + //边缘盒子时差与服务时差不可超过24小时 + if (time == null || System.currentTimeMillis() - time > 3600 * 24 * 1000) { + return ResponseData.error("请求时间超时"); + } + deviceLoginForm.setTime(time); + } catch (Exception e) { + e.printStackTrace(); + return ResponseData.error("设备解析异常!"); + } + + try { + String token = this.createJwtToken(deviceLoginForm); + IRiskCacheUtil.put(token, token); + return ResponseData.success(token); + } catch (Exception e) { + log.error("设备登录异常:{}", e.getMessage()); + return ResponseData.error("登录异常,请联系管理员"); + } +} + /** + * token创建 + * + * @param loginForm 登录信息 + * @param device 设备信息 + * @return + * @throws Exception + */ + public String createJwtToken(RiskLoginForm loginForm) throws Exception { + Map payload = new HashMap<>(); + payload.put("clientId", loginForm.getClientId()); // 设备编号 + payload.put("time", loginForm.getTime()); // 请求时间 + + //RSA 解密 + String str = RSAUtils.decrypt(loginForm.getSecret(), privateKey); + String key = loginForm.getClientId()+"_" + loginForm.getTime() ; + if (!key.equals(str)) { + //秘钥验证失败 + throw new ServiceException(500,"秘钥验证失败"); + } + +// long exp = new Date().getTime() + 2 * 3600000; // 2小时后的时间戳 +// payload.put("exp", exp); + + // 创建JWT + String jwt = JWTUtil.createToken(payload, "token-203-202405".getBytes()); + + return jwt; + } + + /** + * token解析 + * + * @param jwtStr token + * @return + * @throws Exception + */ + public static RiskLoginForm parseToken(String jwtStr){ + JWT jwtObj = new JWTUtil().parseToken(jwtStr); + RiskLoginForm deviceLoginForm = new RiskLoginForm(); + deviceLoginForm.setClientId(Convert.toStr(jwtObj.getPayload("clientId"))); + return deviceLoginForm; + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java new file mode 100644 index 0000000..0e91ac8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.util; +import cn.hutool.cache.Cache; +import cn.hutool.cache.CacheUtil; +/** + * token有效 + */ +public class IRiskCacheUtil { + /** + * 1小时内不活跃 会踢掉 + */ + private static Cache fifoCache = CacheUtil.newFIFOCache(1000, 1000 * 60 * 60); + + public static void put(String key, String value) { + fifoCache.put(key, value); + } + + public static String get(String key) { + return fifoCache.get(key); + } + + public static void remove(String key) { + fifoCache.remove(key); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java new file mode 100644 index 0000000..805c32a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceGroupDict extends AbstractDictMap { + + @Override + public void init() { + //检索条件 + put("groupName", "分组名称"); + put("startTime", "起始时间"); + put("endTime", "结束时间"); + //新增修改属性 + put("cameraIds", "设备国标号"); + put("personIds", "人员主键集合"); + put("description","备注"); + put("id","主键"); + put("ids","主键集合"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java new file mode 100644 index 0000000..895fbd9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceQueryDict extends AbstractDictMap { + + @Override + public void init() { + put("devType", "类型查询"); + put("keyword", "设备名称"); + put("deptName", "所属单位"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java new file mode 100644 index 0000000..88da6df --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.device.util; + +public class DeviceScopeUtil { +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java new file mode 100644 index 0000000..2e3e478 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.device.controller; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.auth.dto.DeviceLoginForm; +import com.casic.missiles.modular.auth.util.ICacheUtil; +import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; +import com.casic.missiles.modular.device.service.IAlarmRecordService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +@Api(tags = "告警记录") +@RestController +@RequestMapping("/record") +public class AlarmUploadController extends BaseController { + + private final IAlarmRecordService alarmRecordService; + private final IDeviceAuthService deviceAuthService; + public AlarmUploadController(IAlarmRecordService alarmRecordService, IDeviceAuthService deviceAuthService) { + this.alarmRecordService = alarmRecordService; + this.deviceAuthService = deviceAuthService; + } + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } + @BussinessLog(value = "告警记录上报接口") + @ApiOperation(value = "告警记录上报接口") + @PostMapping(value = "/upload") + public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return createAuthError(); + } + alarmRecordService.upload(alarmRecord); + return ResponseDataDTO.success(); + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java new file mode 100644 index 0000000..3f1c189 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class RecognitionStreamDTO { + private Long id; + private String recognitionStreamFlag; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java new file mode 100644 index 0000000..fa5ae4a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java @@ -0,0 +1,167 @@ +package com.casic.missiles.modular.group.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IRiskPointInfoService; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.group.vo.SysRiskGroupPointVO; +import com.casic.missiles.modular.group.vo.SysRiskGroupRelUserVO; +import com.casic.missiles.modular.group.vo.SysRiskUserGroupVO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import com.casic.missiles.modular.system.vo.SysGroupRelUserVO; +import com.casic.missiles.modular.system.vo.SysUserGroupVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.ibatis.annotations.Param; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; + +/** + * 风险点组信息Controller + * + * @author lwh + * @date 2024-07-11 + */ +@Api(tags = "风险点组信息") +@RestController +@RequestMapping("/sys/risk/group") +public class SysUserRiskGroupController extends BaseController { + private final IRiskPointInfoService riskPointInfoService; + private final ISysUserRiskGroupService sysUserGroupService; + private final AbstractPermissionContext permissionContext; + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysUserRiskGroupController(IRiskPointInfoService riskPointInfoService, ISysUserRiskGroupService sysUserGroupService, AbstractPermissionContext permissionContext, ISysRiskGroupRelUserService sysGroupRelUserService) { + this.riskPointInfoService = riskPointInfoService; + this.sysUserGroupService = sysUserGroupService; + this.permissionContext = permissionContext; + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @BussinessLog(value = "风险点分组查询") + @ApiOperation(value = "风险点分组查询", hidden = true) + @GetMapping(value = "/list") + public ResponseDataDTO> list(SysRiskUserGroupVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysUserGroupService.list(query)); + } + + @BussinessLog(value = "分组人员列表查询") + @ApiOperation(value = "分组人员列表查询") + @GetMapping(value = "/groupUserList") + public ResponseDataDTO> groupUserList(SysRiskGroupRelUserVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysGroupRelUserService.list(query)); + } + + @BussinessLog(value = "风险点分组人员查询") + @ApiOperation(value = "风险点分组人员分页查询") + @GetMapping(value = "/groupUserPage") + public ResponseDataDTO> listPage(SysRiskGroupRelUserVO sysGroupRelUserVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysGroupRelUserVO.genQuery(); + List relUsers = sysGroupRelUserService.selectSysGroupRelUserPage(page, query); + page.setRecords(relUsers); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "用户分组批量新增") + @ApiOperation(value = "批量新增接口") + @PostMapping(value = "/batch-add") + public ResponseDataDTO batchAdd(@RequestBody GroupUserRelDTO relDTO) { + sysGroupRelUserService.batchAdd(relDTO); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组人员删除") + @ApiOperation(value = "用户组人员删除接口") + @GetMapping(value = "/user/delete") + public ResponseDataDTO userDel(@Param("用户组人员关联主键") String id) { + sysGroupRelUserService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "风险点分组分页查询") + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(SysRiskUserGroupVO sysUserGroupVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysUserGroupVO.genQuery(); + + List sysUserGroups = sysUserGroupService.selectSysUserGroupPage(page, query); + page.setRecords(sysUserGroups); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "风险点分组新增") + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.save(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组修改") + @ApiOperation(value = "修改接口") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.updateById(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组删除") + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + sysUserGroupService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "批量删除") + @ApiOperation(value = "批量删除", hidden = true) + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + sysUserGroupService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "详情查询") + @ApiOperation(value = "详情查询", hidden = true) + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(sysUserGroupService.getById(id)); + } + + @BussinessLog(value = "用户树") + @ApiOperation(value = "用户树查询") + @GetMapping(value = "/person/tree") + public ResponseDataDTO> personTree() { + return ResponseDataDTO.success(sysUserGroupService.personTree()); + } + + @BussinessLog(value = "风险点树查询") + @ApiOperation(value = "风险点树查询") + @GetMapping(value = "/tree") + public ResponseDataDTO> tree(String riskType) { + return ResponseDataDTO.success(riskPointInfoService.tree(riskType)); + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java new file mode 100644 index 0000000..419eb27 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备所属人员组 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupPointMapper extends BaseMapper { +/** +* 设备所属人员组 分页检索 +*/ +List selectSysGroupDevicePage(@Param("page") Page page, @Param("ew" ) QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java new file mode 100644 index 0000000..eb41227 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 组人员管理 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupRelUserMapper extends BaseMapper { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java new file mode 100644 index 0000000..e8352df --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.system.model.SysUserGroup; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 用户组信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysUserRiskGroupMapper extends BaseMapper { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml new file mode 100644 index 0000000..6fa6a4d --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + id , + group_id as groupId , + create_time as createTime , + target_Id as targetId + + + a.id , + a.group_id + as groupId , + a.create_time + as createTime , + a.target_Id + as targetId + + + + + + and group_id = #{request.groupId} + + + and device_id = #{request.deviceId} + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml new file mode 100644 index 0000000..a627546 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + id , + group_id as groupId , + user_id as userId , + create_time as createTime + + + a.id, + a.group_id + as groupId , + a.user_id + as userId , + a.create_time + as createTime + + + + + + and group_id = #{request.groupId} + + + and user_id = #{request.userId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml new file mode 100644 index 0000000..3245136 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + id, + group_name as groupName , + create_time as createTime , + dept_id as deptId , + create_id as createId + + + a.id,a.group_name as groupName , + a.create_time + as createTime , + a.dept_id + as deptId , + a.create_id + as createId,a.description + + + + + + and group_name like concat('%',#{request.groupName},'%') + + + and dept_id = #{request.deptId} + + + and create_id = #{request.createId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java new file mode 100644 index 0000000..e44328f --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class GroupRiskRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("风险点集合") + private List targetIds; + @ApiModelProperty("用户ID集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java new file mode 100644 index 0000000..f8758bf --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class RiskGroupUserRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("设备集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java new file mode 100644 index 0000000..b386d5b --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java @@ -0,0 +1,53 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 风险点所属组 sys_risk_group_point + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_risk_group_point") +public class SysRiskGroupPoint extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableId("id") + private Long id; + + @ApiModelProperty(value = "用户组ID", dataType = "Long") + @TableField("group_id") + private Long groupId; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty(value = "风险点ID", dataType = "Long") + @TableField("target_id") + private Long targetId; + + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; + + @Override + public String toString() { + return "SysGroupDevice{" + + "id=" + id + + "groupId=" + groupId + + "createTime=" + createTime + + "targetId=" + targetId + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java new file mode 100644 index 0000000..949caa3 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java @@ -0,0 +1,55 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 组人员管理对象 sys_group_rel_user + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_risk_group_rel_user") +public class SysRiskGroupRelUser extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + + @ApiModelProperty(value = "组ID", dataType = "Long") + @TableField("group_id") + private Long groupId; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + @TableField("user_id") + private Long userId; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + @ApiModelProperty(value = "用户姓名", dataType = "String") + @TableField(exist = false) + private String realName; + + @ApiModelProperty(value = "用户名", dataType = "String") + @TableField(exist = false) + private String account; + + @Override + public String toString() { + return "SysGroupRelUser{" + + "id=" + id + + "groupId=" + groupId + + "userId=" + userId + + "createTime=" + createTime + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java new file mode 100644 index 0000000..1b73dc0 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java @@ -0,0 +1,97 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 危险点分组组信息对象 sys_user_risk_group + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_user_risk_group") +public class SysUserRiskGroup extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableId("id") + private Long id; + + @ApiModelProperty(value = "组名称", dataType = "String", required = true) + @TableField("group_name") + private String groupName; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty(value = "所属组织(保留字段)", dataType = "Long") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty(value = "描述信息", dataType = "String") + @TableField("description") + private String description; + + @ApiModelProperty(value = "密级字典", dataType = "String") + @TableField("safe") + private int safe; + + @ApiModelProperty(value = "创建者ID", dataType = "Long") + @TableField("create_id") + private Long createId; + + + @ApiModelProperty(value = "类型(1 危险点 2 重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "Long") + @TableField("group_type") + private String groupType; + @TableField(exist = false) + private String groupTypeName; + /** + * 风险点集合 + */ + @ApiModelProperty(value = "风险点集合(逗号拼接)", dataType = "String") + @TableField(exist = false) + private String pointIds; + + @ApiModelProperty(value = "数量", dataType = "Long") + @TableField(exist = false) + private Integer targetNum; + /** + * 用户集合 + */ + @ApiModelProperty(value = "用户集合(逗号拼接)", dataType = "String") + @TableField(exist = false) + private String personIds; + + @ApiModelProperty(value = "用户名称", dataType = "String") + @TableField(exist = false) + private String realName; + + @ApiModelProperty(value = "用户名", dataType = "String") + @TableField(exist = false) + private String account; + + @ApiModelProperty(value = "密级字典名称", dataType = "String") + @TableField(exist = false) + private String safeName; + + @Override + public String toString() { + return "SysUserGroup{" + + "id=" + id + + "groupName=" + groupName + + "createTime=" + createTime + + "deptId=" + deptId + + "createId=" + createId + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java new file mode 100644 index 0000000..4657ce4 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.device.dto.GroupRelDTO; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; + +import java.util.List; + + +/** + *

+ * 设备所属人员组 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysRiskGroupPointService extends IService { + /** + * 设备所属人员组 分页检索 + */ + List selectSysGroupDevicePage(Page page, QueryWrapper query); + + /** + * 设备组批量新增 + * + * @param relDTO + */ + void batchAdd(GroupRiskRelDTO relDTO); + + + /** + * 增量更新 + * @param groupId + * @param deviceIds + */ + void batchIncremental(Long groupId, List deviceIds); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java new file mode 100644 index 0000000..591eef2 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; + +import java.util.List; + + +/** + *

+ * 组人员管理 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysRiskGroupRelUserService extends IService { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(Page page, QueryWrapper query); + + void batchAdd(GroupUserRelDTO relDTO); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java new file mode 100644 index 0000000..1e0889c --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; + +import java.util.List; + + +/** + *

+ * 用户组信息 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysUserRiskGroupService extends IService { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(Page page, QueryWrapper query); + + List personTree(); + + /** + * 创建用户组 + * + * @param sysUserGroup 用户组信息 + * @param userIds 用户信息 + */ + void createSysUserGroup(SysUserRiskGroup sysUserGroup, List userIds); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java new file mode 100644 index 0000000..6839887 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java @@ -0,0 +1,118 @@ +package com.casic.missiles.modular.group.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +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.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.group.dao.SysRiskGroupPointMapper; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import com.casic.missiles.modular.group.service.ISysRiskGroupPointService; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + + +/** + *

+ * 设备所属人员组 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysRiskGroupPointServiceImpl extends ServiceImpl implements ISysRiskGroupPointService { + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysRiskGroupPointServiceImpl(ISysRiskGroupRelUserService sysGroupRelUserService) { + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @Override + public List selectSysGroupDevicePage(Page page, QueryWrapper query) { + return this.baseMapper.selectSysGroupDevicePage(page, query); + } + + @Transactional + @Override + public void batchAdd(GroupRiskRelDTO relDTO) { + + if (CollectionUtil.isEmpty(relDTO.getTargetIds())) { + ServiceException serviceException = new ServiceException(500, "添加不能为空!"); + throw serviceException; + } + + //删除 + QueryWrapper query = new QueryWrapper<>(); + query.eq("group_id", relDTO.getGroupId()); + this.remove(query); + + //保存分组与危险点对应关系 + List groupDevices = new ArrayList<>(); + for (Long deviceId : relDTO.getTargetIds()) { + SysRiskGroupPoint sysGroupDevice = new SysRiskGroupPoint(); + sysGroupDevice.setTargetId(deviceId); + sysGroupDevice.setGroupId(relDTO.getGroupId()); + sysGroupDevice.setCreateTime(new Date()); + groupDevices.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(groupDevices); + + //批量保存风险点与用户关系 + GroupUserRelDTO groupUserRelDTO = new GroupUserRelDTO(); + groupUserRelDTO.setGroupId(relDTO.getGroupId()); + groupUserRelDTO.setUserIds(relDTO.getUserIds()); + sysGroupRelUserService.batchAdd(groupUserRelDTO); + + } + + @Override + public void batchIncremental(Long groupId, List deviceIds) { + List groupDevices = this.list(new LambdaQueryWrapper().eq(SysRiskGroupPoint::getGroupId, groupId)); + if (CollectionUtil.isEmpty(groupDevices)) { + saveDevices(groupId, deviceIds); + } else { + List oldDevices = groupDevices.stream().map(SysRiskGroupPoint::getTargetId).collect(Collectors.toList()); + List delIds = CollectionUtil.subtractToList(oldDevices, deviceIds); + List saveDevices = CollectionUtil.subtractToList(deviceIds, oldDevices); + + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.eq(SysRiskGroupPoint::getGroupId, groupId); + delQuery.in(SysRiskGroupPoint::getTargetId, delIds); + if (CollectionUtil.isNotEmpty(delIds)) { + this.remove(delQuery); + } + saveDevices(groupId, saveDevices); + } + } + + private void saveDevices(Long groupId, List saveDevices) { + List saves = new ArrayList<>(); + for (Long deviceId : saveDevices) { + SysRiskGroupPoint sysGroupDevice = new SysRiskGroupPoint(); + sysGroupDevice.setTargetId(deviceId); + sysGroupDevice.setGroupId(groupId); + sysGroupDevice.setCreateTime(new Date()); + saves.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(saves); + } + + private void saveOrUpdateBatchList(List groupDevices) { + for (SysRiskGroupPoint groupDevice : groupDevices) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysRiskGroupPoint::getGroupId, groupDevice.getGroupId()); + query.eq(SysRiskGroupPoint::getTargetId, groupDevice.getTargetId()); + this.saveOrUpdate(groupDevice, query); + } + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java new file mode 100644 index 0000000..83cd76a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.group.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +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.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.group.dao.SysRiskGroupPointMapper; +import com.casic.missiles.modular.group.dao.SysRiskGroupRelUserMapper; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.system.dao.SysGroupRelUserMapper; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + + +/** + *

+ * 组人员管理 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysRiskGroupRelUserServiceImpl extends ServiceImpl implements ISysRiskGroupRelUserService { + @Override + public List selectSysGroupRelUserPage(Page page, QueryWrapper query) { + return this.baseMapper.selectSysGroupRelUserPage(page, query); + } + + @Transactional + @Override + public void batchAdd(GroupUserRelDTO relDTO) { + if (CollectionUtil.isEmpty(relDTO.getUserIds())) { + ServiceException serviceException = new ServiceException(500, "添加不能为空!"); + throw serviceException; + } + //删除 + QueryWrapper query = new QueryWrapper<>(); + query.eq("group_id",relDTO.getGroupId()); + this.remove(query); + //添加设备信息 + List groupDevices = new ArrayList<>(); + for (Long deviceId : relDTO.getUserIds()) { + SysRiskGroupRelUser sysGroupDevice = new SysRiskGroupRelUser(); + sysGroupDevice.setUserId(deviceId); + sysGroupDevice.setGroupId(relDTO.getGroupId()); + sysGroupDevice.setCreateTime(new Date()); + groupDevices.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(groupDevices); + } + + private void saveOrUpdateBatchList(List groupDevices) { + for (SysRiskGroupRelUser groupDevice : groupDevices) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysRiskGroupRelUser::getGroupId, groupDevice.getGroupId()); + query.eq(SysRiskGroupRelUser::getUserId, groupDevice.getUserId()); + this.saveOrUpdate(groupDevice, query); + } + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java new file mode 100644 index 0000000..b3bb9a8 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java @@ -0,0 +1,246 @@ +package com.casic.missiles.modular.group.service.impl; + +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.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.modular.data.constants.DataConstants; +import com.casic.missiles.modular.group.dao.SysUserRiskGroupMapper; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupPointService; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.tree.RiskGroupDefaultTreeBuildFactory; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + + +/** + *

+ * 用户组信息 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysUserRiskGroupServiceImpl extends ServiceImpl implements ISysUserRiskGroupService { + @Lazy + @Resource + private ISysRiskGroupPointService sysRiskGroupPointService; + private final AbstractPermissionContext abstractPermissionContext; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_USER = "2"; + private final AbstractDictService dictService; + @Lazy + @Resource + private ISysRiskGroupRelUserService relUserService; + + public SysUserRiskGroupServiceImpl(AbstractPermissionContext abstractPermissionContext, AbstractDictService dictService) { + this.abstractPermissionContext = abstractPermissionContext; + this.dictService = dictService; + } + + @Override + public List selectSysUserGroupPage(Page page, QueryWrapper query) { + //分组过滤当前权限 + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + query.in("a.dept_id", dataScope.getDeptIds()); + } + List riskGroups = this.baseMapper.selectSysUserGroupPage(page, query); + for (SysUserRiskGroup riskGroup : riskGroups) { + wrapperInfo(riskGroup); + } + return riskGroups; + } + + private void wrapperInfo(SysUserRiskGroup riskGroup) { + riskGroup.setSafeName(dictService.getDictNameByCode(DataConstants.DICT_SECRET_LEVEL_TYPE, riskGroup.getSafe() + "")); + //查询关联设备 + LambdaQueryWrapper deviceQuery = new LambdaQueryWrapper<>(); + deviceQuery.eq(SysRiskGroupPoint::getGroupId, riskGroup.getId()); + List devices = sysRiskGroupPointService.list(deviceQuery); + if (devices != null) { + List deviceList = devices.stream().map(SysRiskGroupPoint::getTargetId).collect(Collectors.toList()); + riskGroup.setPointIds(StrUtil.join(",", deviceList)); + riskGroup.setTargetNum(deviceList.size()); + } + + riskGroup.setGroupTypeName(dictService.getDictNameByCode(DataConstants.dangerAssessmentType, riskGroup.getGroupType())); + //查询关联人员 + LambdaQueryWrapper personQuery = new LambdaQueryWrapper<>(); + personQuery.eq(SysRiskGroupRelUser::getGroupId, riskGroup.getId()); + List persons = relUserService.list(personQuery); + if (persons != null) { + List personIds = persons.stream().map(SysRiskGroupRelUser::getUserId).collect(Collectors.toList()); + riskGroup.setPersonIds(StrUtil.join(",", personIds)); + } + } + + private void setGroupInfo(SysUserRiskGroup entity) { + if (StrUtil.isNotEmpty(entity.getPointIds())) { + entity.setTargetNum(StrUtil.split(entity.getPointIds(), ",").size()); + } else { + entity.setTargetNum(0); + } + } + + @Override + public boolean save(SysUserRiskGroup entity) { + AuthUser authUser = abstractPermissionContext.getAuthService().getLoginUser(); + entity.setCreateTime(new Date()); + entity.setCreateId(authUser.getId()); + if (entity.getDeptId() == null) { + entity.setDeptId(authUser.getDeptId()); + } + setGroupInfo(entity); + super.save(entity); + batchSave(entity, entity.getId()); + return true; + } + + @Override + public boolean updateById(SysUserRiskGroup entity) { + AuthUser authUser = abstractPermissionContext.getAuthService().getLoginUser(); + entity.setCreateTime(new Date()); + entity.setCreateId(authUser.getId()); + if (entity.getDeptId() == null) { + entity.setDeptId(authUser.getDeptId()); + } + setGroupInfo(entity); + super.updateById(entity); + batchSave(entity, entity.getId()); + return true; + } + + /** + * 数据转换 + * + * @param entity + * @param groupId + */ + private void batchSave(SysUserRiskGroup entity, Long groupId) { + GroupRiskRelDTO groupRelDTO = new GroupRiskRelDTO(); + groupRelDTO.setGroupId(groupId); + if (StrUtil.isNotEmpty(entity.getPointIds())) { + long[] longs = StrUtil.splitToLong(entity.getPointIds(), ","); + List devices = new ArrayList<>(); + for (long aLong : longs) { + devices.add(aLong); + } + groupRelDTO.setTargetIds(devices); + } + if (StrUtil.isNotEmpty(entity.getPersonIds())) { + List persons = new ArrayList<>(); + long[] longs = StrUtil.splitToLong(entity.getPersonIds(), ","); + + for (long aLong : longs) { + persons.add(aLong); + } + groupRelDTO.setUserIds(persons); + } + sysRiskGroupPointService.batchAdd(groupRelDTO); + } + + @Override + public List personTree() { + + //查询可见组织 + DataScope scope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + + LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { + deptQuery.in(Dept::getId, scope.getDeptIds()); + } + deptQuery.orderByAsc(Dept::getNum); + + List deptList = abstractPermissionContext.getDeptService().list(deptQuery); + List deptDTOS = new ArrayList<>(); + List rootIds = new ArrayList<>(); + Set normalIds = new HashSet<>(); + for (Dept dept : deptList) { + RiskGroupDeptDTO deptDTO = new RiskGroupDeptDTO(); + deptDTO.setPid(dept.getPid()); + deptDTO.setId(dept.getId()); + deptDTO.setFullName(dept.getFullName()); + deptDTO.setName(dept.getSimpleName()); + deptDTOS.add(deptDTO); + deptDTO.setType(NODE_TYPE_DEPT); + normalIds.add(dept.getId()); + + //挂载设备信息 + LambdaQueryWrapper deviceQuery = new LambdaQueryWrapper<>(); + deviceQuery.eq(User::getDeptId, deptDTO.getId()); + deviceQuery.eq(User::getStatus, "1"); + List deviceInfos = abstractPermissionContext.getUserService().list(deviceQuery); + + deptDTO.setChildrenNodes(deviceInfos.stream().map(this::createDeptDTO).collect(Collectors.toList())); + } + + for (RiskGroupDeptDTO deptDTO : deptDTOS) { + if (!normalIds.contains(deptDTO.getPid())) { + rootIds.add(deptDTO.getPid()); + } + } + + //过滤根节点,支持多根展示 + RiskGroupDefaultTreeBuildFactory abstractTreeBuildFactory = new RiskGroupDefaultTreeBuildFactory(); + List newTree = new ArrayList<>(); + rootIds = rootIds.stream().distinct().collect(Collectors.toList()); + for (Long rootId : rootIds) { + abstractTreeBuildFactory.setRootId(rootId + ""); + newTree.addAll(abstractTreeBuildFactory.doTreeBuild(deptDTOS)); + } + + return newTree; + } + + @Transactional + @Override + public void createSysUserGroup(SysUserRiskGroup sysUserGroup, List userIds) { + this.baseMapper.insert(sysUserGroup); + GroupUserRelDTO relDTO = new GroupUserRelDTO(); + relDTO.setGroupId(sysUserGroup.getId()); + relDTO.setUserIds(userIds); + relUserService.batchAdd(relDTO); + } + + + /** + * 创建节点 + * + * @param userInfo 用户信息 + * @return + */ + private GroupDeptDTO createDeptDTO(User userInfo) { + GroupDeptDTO deptDTO = new GroupDeptDTO(); + deptDTO.setType(NODE_TYPE_USER); + deptDTO.setId(userInfo.getId()); + deptDTO.setPid(userInfo.getDeptId()); + deptDTO.setUserDTO(userInfo); + deptDTO.setName(userInfo.getName()); + deptDTO.setFullName(userInfo.getName()); + deptDTO.setUserId(userInfo.getId() + ""); + return deptDTO; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/tree/RiskGroupDefaultTreeBuildFactory.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/tree/RiskGroupDefaultTreeBuildFactory.java new file mode 100644 index 0000000..69c18ad --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/tree/RiskGroupDefaultTreeBuildFactory.java @@ -0,0 +1,30 @@ +package com.casic.missiles.modular.group.tree; + +import com.casic.missiles.core.treebuild.DefaultTreeBuildFactory; +import com.casic.missiles.model.tree.Tree; + +import java.util.ArrayList; +import java.util.List; + +public class RiskGroupDefaultTreeBuildFactory extends DefaultTreeBuildFactory { + private String rootId; + @Override + protected List afterBuild(List nodes) { + //去掉所有的二级节点 + ArrayList results = new ArrayList<>(); + for (T node : nodes) { + if (node.getNodeParentId().equals(rootId)) { + results.add(node); + } + } + return results; + } + + public String getRootId() { + return rootId; + } + + public void setRootId(String rootId) { + this.rootId = rootId; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/RiskGroupDeptDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/RiskGroupDeptDTO.java new file mode 100644 index 0000000..7f6c157 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/RiskGroupDeptDTO.java @@ -0,0 +1,61 @@ +package com.casic.missiles.modular.group.vo; + +import com.casic.missiles.model.tree.Tree; +import com.casic.missiles.modular.device.model.RiskPointInfo; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +@Data +public class RiskGroupDeptDTO implements Tree { + @ApiModelProperty("组织主键") + private Long id; + + @ApiModelProperty("父部门ID") + private Long pid; + + @ApiModelProperty("组织简称") + private String name; + + @ApiModelProperty("组织全称") + private String fullName; + + @ApiModelProperty("子节点") + private List children = new ArrayList<>(); + + @ApiModelProperty("节点类型(1 组织 2 人员)") + private String type; + + @ApiModelProperty("用户信息") + private User userDTO; + private String userId; + private RiskPointInfo riskPointInfo; + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + @Override + public String getNodeId() { + return id + ""; + } + + @Override + public String getNodeParentId() { + return pid + ""; + } + + @Override + public void setChildrenNodes(List childrenNodes) { + children.addAll(childrenNodes); + children = children.stream().distinct().collect(Collectors.toList()); + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupPointVO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupPointVO.java new file mode 100644 index 0000000..3f6ca41 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupPointVO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.group.vo; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 风险点所属人员组对象VO + * + * @author lwh + * @date 2024-07-11 + */ +@Data +public class SysRiskGroupPointVO { + private static final long serialVersionUID = 1L; + + + @ApiModelProperty(value = "用户组ID", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备ID", dataType = "Long") + private Long targetId; + + public QueryWrapper genQuery() { + QueryWrapper query = new QueryWrapper<>(); + if (groupId != null) { + query.eq("group_id", groupId); + } + if (targetId != null) { + query.eq("target_id", targetId); + } + return query; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupRelUserVO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupRelUserVO.java new file mode 100644 index 0000000..5a95d82 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupRelUserVO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.group.vo; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 组人员管理对象VO + * + * @author lwh + * @date 2024-07-11 + */ +@Data +public class SysRiskGroupRelUserVO { + private static final long serialVersionUID = 1L; + + + @ApiModelProperty(value = "组ID", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + private Long userId; + + public QueryWrapper genQuery() { + QueryWrapper query = new QueryWrapper<>(); + if (groupId != null) { + query.eq("group_id", groupId); + } + if (userId != null) { + query.eq("user_id", userId); + } + return query; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskUserGroupVO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskUserGroupVO.java new file mode 100644 index 0000000..6363c3b --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskUserGroupVO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.group.vo; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.system.model.SysUserGroup; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 用户组信息对象VO + * + * @author lwh + * @date 2024-07-11 + */ +@Data +public class SysRiskUserGroupVO { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "用户组名称", dataType = "String") + private String groupName; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + private Long deptId; + @ApiModelProperty(value = "创建时间起始", dataType = "String") + private String startTime; + @ApiModelProperty(value = "创建时间结束", dataType = "String") + private String endTime; + @ApiModelProperty(value = "创建者ID", dataType = "Long") + private Long createId; + + public QueryWrapper genQuery() { + QueryWrapper query = new QueryWrapper<>(); + if (StrUtil.isNotEmpty(groupName)) { + query.like("a.group_name", groupName); + } + if (StrUtil.isNotEmpty(startTime)) { + query.ge("a.create_time", startTime); + } + if (StrUtil.isNotEmpty(endTime)) { + query.le("a.create_time", endTime); + } + if (deptId != null) { + query.eq("a.dept_id", deptId); + } + if (createId != null) { + query.eq("a.create_id", createId); + } + return query; + } +} diff --git a/casic-web/src/main/resources/doc/20250227.txt b/casic-web/src/main/resources/doc/20250227.txt new file mode 100644 index 0000000..daf4d4c --- /dev/null +++ b/casic-web/src/main/resources/doc/20250227.txt @@ -0,0 +1,68 @@ +1.权限配置检查 + 对应属性需配置为 security_admin + casic: + video: + admin: + role: security_admin +1.租户设定更新 + 创建租户设定角色 角色别名必须是tenantAdministrator + + 分配给管理员 需手动入库授权, sys_user表 role_id字段添加租户设定字段, + sys_ru_relation 添加用户绑定关系 + + INSERT INTO sys_tenant(ID, TENANT_NAME, TENANT_CODE, LINK_PERSON, TEL, CLEARDAY, FLAG, TS) VALUES (1, '航天二院', '001', NULL, NULL, NULL, '0', '2025-02-21 14:41:20'); + + ALTER TABLE sys_user_group ADD COLUMN tenant_id VARCHAR(64); + ALTER TABLE sys_group_device ADD COLUMN tenant_id VARCHAR(64); + ALTER TABLE sys_group_rel_user ADD COLUMN tenant_id VARCHAR(64); + ALTER TABLE device_group_info ADD COLUMN tenant_id VARCHAR(64); + update device_group_info set tenant_id = 1; + update sys_user set tenant_id = 1; + update sys_role set tenant_id = 1; + update sys_rm_relation set tenant_id = 1; + update sys_ru_relation set tenant_id = 1; + update sys_dept set tenant_id = 1; + update sys_user_group set tenant_id = 1; + update sys_group_device set tenant_id = 1; + update sys_group_rel_user set tenant_id = 1; + 添加租户ID 0 + +2.表risk_point_info 字段 secret_level值密级默认 0 设定 + +3.新增表 sys_user_risk_group sys_risk_group_rel_user sys_risk_group_point + +CREATE TABLE sys_user_risk_group +( + id numeric(20,0) NOT NULL, + group_name VARCHAR(256), + create_time date, + dept_id numeric(20,0), + create_id numeric(20,0), + description VARCHAR(256), + safe SMALLINT, + group_type SMALLINT, + tenant_id VARCHAR(64), + PRIMARY KEY (id) +); + +CREATE TABLE sys_risk_group_rel_user +( + id numeric(20,0) NOT NULL, + group_id numeric(20,0), + user_id numeric(20,0), + create_time date, + tenant_id VARCHAR(64) +); + +CREATE TABLE sys_risk_group_point +( + id numeric(20,0) NOT NULL, + group_id numeric(20,0), + create_time date, + target_id numeric(20,0), + tenant_id VARCHAR(64) +); + + + + diff --git a/casic-web/src/main/resources/doc/20250416.txt b/casic-web/src/main/resources/doc/20250416.txt new file mode 100644 index 0000000..14610e9 --- /dev/null +++ b/casic-web/src/main/resources/doc/20250416.txt @@ -0,0 +1,18 @@ +1.增加识别流开关 流媒体id 识别流国标号 + ALTER TABLE box_device_relation ADD COLUMN media_server_id VARCHAR(255); + ALTER TABLE box_device_relation ADD COLUMN recognition_gb VARCHAR(255); + ALTER TABLE box_device_relation ADD COLUMN recognition_stream_flag int; + + + + ALTER TABLE upload_log ADD COLUMN tenant_id VARCHAR(64); +2.增加字典值 mediaServerId + 对应值参考zlm中的mediaServerId 配置项 +3.更新box_device表以下字段类型为text + server_public_key + server_private_key + client_public_key + client_private_key + +4.casic.no-login-urls + 增加 /record/upload \ No newline at end of file diff --git a/casic-web/src/main/resources/doc/20250519.txt b/casic-web/src/main/resources/doc/20250519.txt new file mode 100644 index 0000000..6d70728 --- /dev/null +++ b/casic-web/src/main/resources/doc/20250519.txt @@ -0,0 +1,3 @@ +1.固定秘钥解析 + 配置项增加 + casic.client.privateKey \ No newline at end of file diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java new file mode 100644 index 0000000..1ca5eb1 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java @@ -0,0 +1,63 @@ +package com.casic.missiles.modular.device.enums; + +/** + * wvp设备类型转换 + * + * @author lwh + * @Date 2017年1月10日 下午9:54:13 + */ +public enum AvDeptEnum { + + DEPT0("0066", "801",0L), + DEPT1("0059", "699厂",1L), + DEPT2("0055", "283厂",1L), + DEPT3("0022", "201所",1L), + DEPT4("0027", "206所",1L), + DEPT5("0013", "23所",1L); + + String code; + String message; + Long deptId; + AvDeptEnum(String code, String message, Long deptId) { + this.code = code; + this.message = message; + this.deptId = deptId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public static AvDeptEnum valueOfCode(String value) { + if (value == null) { + return null; + } else { + for (AvDeptEnum ms : AvDeptEnum.values()) { + if (ms.getCode().equals(value)) { + return ms; + } + } + return null; + } + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java new file mode 100644 index 0000000..573d0e2 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.task; + +import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; + +public class Test { + public static void main(String[] args) { + System.out.println(AvStatusTypeEnum.valueOfType(new Integer(1)).getMessage()); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java new file mode 100644 index 0000000..7c06c67 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java @@ -0,0 +1,77 @@ +package com.casic.missiles.modular.device.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpSession; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class RiskSyncController extends BaseController { + @Resource + private IClientAuthService clientAuthService; + @Resource + private AbstractDeptService deptService; + @Resource + private AbstractUserService userService; + @PostMapping("/client/login") + @ResponseBody + public ResponseData login(@RequestBody RiskLoginForm deviceLoginForm, HttpSession session) { + return clientAuthService.login(deviceLoginForm, session); + } + + /** + * 全量组织信息读取 + * + * @return + */ + @PostMapping("/dept/list") + @ResponseBody + public ResponseDataDTO> dept() { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = deptService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量用户信息读取 + * + * @return + */ + @PostMapping("/user/list") + @ResponseBody + public ResponseDataDTO> user() { + //todo 此处租户拦截需移除 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量设备信息读取 + * + * @return + */ + @PostMapping("/device/list") + @ResponseBody + public ResponseDataDTO> device() { + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java new file mode 100644 index 0000000..5e5b890 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class UserSyncController extends BaseController { + + @Resource + private IBusDeviceInfoService busDeviceInfoService; + + /** + * 登录用户授权设备权限查看 + * @return + */ + @GetMapping("/device/permissions") + @ResponseBody + public ResponseDataDTO> devicePermissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } + + /** + * 登录用户风险点授权查询 + * @return + */ + @GetMapping("/permissions") + @ResponseBody + public ResponseDataDTO> permissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java new file mode 100644 index 0000000..07b8df8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +/** + * 设备登录接口 + */ +@Data +public class RiskLoginForm { + /** + * 设备编码 + */ + private String clientId; + + /** + * 时间戳 + */ + private Long time; + + /** + * 加密后数据 加密格式sn+时间戳 时效性为6小时 + */ + private String secret; + + /** + * 设备登录注册IP + */ + private String ip; + + /** + * 设备登录注册port + */ + private String port; +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java new file mode 100644 index 0000000..40fdb4b --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.device.service; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; + +import javax.servlet.http.HttpSession; + +public interface IClientAuthService { + /** + * @param deviceLoginForm + * @param session + * @return + */ + ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session); +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java new file mode 100644 index 0000000..576e857 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.device.service.impl; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import cn.hutool.jwt.JWT; +import cn.hutool.jwt.JWTUtil; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.util.IRiskCacheUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpSession; +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Service +public class ClientAuthServiceImpl implements IClientAuthService { + @Value("${casic.client.privateKey:MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALKcwHHOg0F6Zkq7GOVnOnTgvH9vSPXFFTOcEqOVBIBPBz7UNrEGkp1PhZ+oC4WVJAsDuot2e1fDZy9QS9HF92MmnYp9kuQRhGZjHctPnVZ0Kai5BES0ytHqPeauLyNXxOOS0YKYEUwpft4Z5Azw7bj3JWNvLrnTZvNld6FDvTslAgMBAAECgYAqN/kZLYpC+O6i7XSmDO95XwHPUXu6dDpdt5+EQR4OQh/hTwIaeAZB3uEj6vHGQomBfQEkI/5lsU97lIxHanbd+Hro7JyIhsGD5LR5XnZHVKzFiZW62OIU6FI9dlQNN8miiblnmyDwiMA3okaHl0O7qQjZ+IvY2csgmJc7AXpPpQJBAOhrhcfWFcgffj2O6HYNlBLFfbboc/ZzrEADDXKnxRSHlo5o8W+6gylG/L2NGtbag5S68B9VYzdkSQ1++5C+Ws8CQQDEu7h311PLEiKgqzGHpjzadQETmt/jMadaKQmT0TZwNVi6X8lR17U5hF8dAqZzUzr9kUC0HRIZhg4Uv1v3W3fLAkB4YPhxgJjXhjhEefg87Nt8vX1Xdx5Yz6CvpuUYNX0GHRQFvqUOUXQNtQ7CvorgLV1pc0lbcUZqMi8EJnj1hyJRAkEAjHXWm8GiMt+M15fCsi3vTq2xChVOekBuUsHv85iwvGZqJg7ThtpyqlEnM2g7/STUfkvhnXcQACclEI0blTy6BwJAPmFyhU+d0ejVpbc53TdrL2HqYYUHi/tTy/dtUa7lbypzdwwJ2M1Tv5PE8sQxr9tgMbebfxVb/RFKdiCCtzC4ng==}") + private String privateKey; + + @Override + public ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session) { + //固定秘钥解析 + try { + String str = RSAUtils.decrypt(deviceLoginForm.getSecret(), privateKey); + Long time = Long.valueOf(StrUtil.split(str, "_").get(1)); + //边缘盒子时差与服务时差不可超过24小时 + if (time == null || System.currentTimeMillis() - time > 3600 * 24 * 1000) { + return ResponseData.error("请求时间超时"); + } + deviceLoginForm.setTime(time); + } catch (Exception e) { + e.printStackTrace(); + return ResponseData.error("设备解析异常!"); + } + + try { + String token = this.createJwtToken(deviceLoginForm); + IRiskCacheUtil.put(token, token); + return ResponseData.success(token); + } catch (Exception e) { + log.error("设备登录异常:{}", e.getMessage()); + return ResponseData.error("登录异常,请联系管理员"); + } +} + /** + * token创建 + * + * @param loginForm 登录信息 + * @param device 设备信息 + * @return + * @throws Exception + */ + public String createJwtToken(RiskLoginForm loginForm) throws Exception { + Map payload = new HashMap<>(); + payload.put("clientId", loginForm.getClientId()); // 设备编号 + payload.put("time", loginForm.getTime()); // 请求时间 + + //RSA 解密 + String str = RSAUtils.decrypt(loginForm.getSecret(), privateKey); + String key = loginForm.getClientId()+"_" + loginForm.getTime() ; + if (!key.equals(str)) { + //秘钥验证失败 + throw new ServiceException(500,"秘钥验证失败"); + } + +// long exp = new Date().getTime() + 2 * 3600000; // 2小时后的时间戳 +// payload.put("exp", exp); + + // 创建JWT + String jwt = JWTUtil.createToken(payload, "token-203-202405".getBytes()); + + return jwt; + } + + /** + * token解析 + * + * @param jwtStr token + * @return + * @throws Exception + */ + public static RiskLoginForm parseToken(String jwtStr){ + JWT jwtObj = new JWTUtil().parseToken(jwtStr); + RiskLoginForm deviceLoginForm = new RiskLoginForm(); + deviceLoginForm.setClientId(Convert.toStr(jwtObj.getPayload("clientId"))); + return deviceLoginForm; + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java new file mode 100644 index 0000000..0e91ac8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.util; +import cn.hutool.cache.Cache; +import cn.hutool.cache.CacheUtil; +/** + * token有效 + */ +public class IRiskCacheUtil { + /** + * 1小时内不活跃 会踢掉 + */ + private static Cache fifoCache = CacheUtil.newFIFOCache(1000, 1000 * 60 * 60); + + public static void put(String key, String value) { + fifoCache.put(key, value); + } + + public static String get(String key) { + return fifoCache.get(key); + } + + public static void remove(String key) { + fifoCache.remove(key); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java new file mode 100644 index 0000000..805c32a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceGroupDict extends AbstractDictMap { + + @Override + public void init() { + //检索条件 + put("groupName", "分组名称"); + put("startTime", "起始时间"); + put("endTime", "结束时间"); + //新增修改属性 + put("cameraIds", "设备国标号"); + put("personIds", "人员主键集合"); + put("description","备注"); + put("id","主键"); + put("ids","主键集合"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java new file mode 100644 index 0000000..895fbd9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceQueryDict extends AbstractDictMap { + + @Override + public void init() { + put("devType", "类型查询"); + put("keyword", "设备名称"); + put("deptName", "所属单位"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java new file mode 100644 index 0000000..88da6df --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.device.util; + +public class DeviceScopeUtil { +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java new file mode 100644 index 0000000..2e3e478 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.device.controller; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.auth.dto.DeviceLoginForm; +import com.casic.missiles.modular.auth.util.ICacheUtil; +import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; +import com.casic.missiles.modular.device.service.IAlarmRecordService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +@Api(tags = "告警记录") +@RestController +@RequestMapping("/record") +public class AlarmUploadController extends BaseController { + + private final IAlarmRecordService alarmRecordService; + private final IDeviceAuthService deviceAuthService; + public AlarmUploadController(IAlarmRecordService alarmRecordService, IDeviceAuthService deviceAuthService) { + this.alarmRecordService = alarmRecordService; + this.deviceAuthService = deviceAuthService; + } + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } + @BussinessLog(value = "告警记录上报接口") + @ApiOperation(value = "告警记录上报接口") + @PostMapping(value = "/upload") + public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return createAuthError(); + } + alarmRecordService.upload(alarmRecord); + return ResponseDataDTO.success(); + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java new file mode 100644 index 0000000..3f1c189 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class RecognitionStreamDTO { + private Long id; + private String recognitionStreamFlag; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java new file mode 100644 index 0000000..fa5ae4a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java @@ -0,0 +1,167 @@ +package com.casic.missiles.modular.group.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IRiskPointInfoService; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.group.vo.SysRiskGroupPointVO; +import com.casic.missiles.modular.group.vo.SysRiskGroupRelUserVO; +import com.casic.missiles.modular.group.vo.SysRiskUserGroupVO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import com.casic.missiles.modular.system.vo.SysGroupRelUserVO; +import com.casic.missiles.modular.system.vo.SysUserGroupVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.ibatis.annotations.Param; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; + +/** + * 风险点组信息Controller + * + * @author lwh + * @date 2024-07-11 + */ +@Api(tags = "风险点组信息") +@RestController +@RequestMapping("/sys/risk/group") +public class SysUserRiskGroupController extends BaseController { + private final IRiskPointInfoService riskPointInfoService; + private final ISysUserRiskGroupService sysUserGroupService; + private final AbstractPermissionContext permissionContext; + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysUserRiskGroupController(IRiskPointInfoService riskPointInfoService, ISysUserRiskGroupService sysUserGroupService, AbstractPermissionContext permissionContext, ISysRiskGroupRelUserService sysGroupRelUserService) { + this.riskPointInfoService = riskPointInfoService; + this.sysUserGroupService = sysUserGroupService; + this.permissionContext = permissionContext; + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @BussinessLog(value = "风险点分组查询") + @ApiOperation(value = "风险点分组查询", hidden = true) + @GetMapping(value = "/list") + public ResponseDataDTO> list(SysRiskUserGroupVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysUserGroupService.list(query)); + } + + @BussinessLog(value = "分组人员列表查询") + @ApiOperation(value = "分组人员列表查询") + @GetMapping(value = "/groupUserList") + public ResponseDataDTO> groupUserList(SysRiskGroupRelUserVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysGroupRelUserService.list(query)); + } + + @BussinessLog(value = "风险点分组人员查询") + @ApiOperation(value = "风险点分组人员分页查询") + @GetMapping(value = "/groupUserPage") + public ResponseDataDTO> listPage(SysRiskGroupRelUserVO sysGroupRelUserVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysGroupRelUserVO.genQuery(); + List relUsers = sysGroupRelUserService.selectSysGroupRelUserPage(page, query); + page.setRecords(relUsers); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "用户分组批量新增") + @ApiOperation(value = "批量新增接口") + @PostMapping(value = "/batch-add") + public ResponseDataDTO batchAdd(@RequestBody GroupUserRelDTO relDTO) { + sysGroupRelUserService.batchAdd(relDTO); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组人员删除") + @ApiOperation(value = "用户组人员删除接口") + @GetMapping(value = "/user/delete") + public ResponseDataDTO userDel(@Param("用户组人员关联主键") String id) { + sysGroupRelUserService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "风险点分组分页查询") + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(SysRiskUserGroupVO sysUserGroupVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysUserGroupVO.genQuery(); + + List sysUserGroups = sysUserGroupService.selectSysUserGroupPage(page, query); + page.setRecords(sysUserGroups); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "风险点分组新增") + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.save(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组修改") + @ApiOperation(value = "修改接口") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.updateById(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组删除") + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + sysUserGroupService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "批量删除") + @ApiOperation(value = "批量删除", hidden = true) + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + sysUserGroupService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "详情查询") + @ApiOperation(value = "详情查询", hidden = true) + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(sysUserGroupService.getById(id)); + } + + @BussinessLog(value = "用户树") + @ApiOperation(value = "用户树查询") + @GetMapping(value = "/person/tree") + public ResponseDataDTO> personTree() { + return ResponseDataDTO.success(sysUserGroupService.personTree()); + } + + @BussinessLog(value = "风险点树查询") + @ApiOperation(value = "风险点树查询") + @GetMapping(value = "/tree") + public ResponseDataDTO> tree(String riskType) { + return ResponseDataDTO.success(riskPointInfoService.tree(riskType)); + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java new file mode 100644 index 0000000..419eb27 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备所属人员组 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupPointMapper extends BaseMapper { +/** +* 设备所属人员组 分页检索 +*/ +List selectSysGroupDevicePage(@Param("page") Page page, @Param("ew" ) QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java new file mode 100644 index 0000000..eb41227 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 组人员管理 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupRelUserMapper extends BaseMapper { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java new file mode 100644 index 0000000..e8352df --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.system.model.SysUserGroup; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 用户组信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysUserRiskGroupMapper extends BaseMapper { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml new file mode 100644 index 0000000..6fa6a4d --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + id , + group_id as groupId , + create_time as createTime , + target_Id as targetId + + + a.id , + a.group_id + as groupId , + a.create_time + as createTime , + a.target_Id + as targetId + + + + + + and group_id = #{request.groupId} + + + and device_id = #{request.deviceId} + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml new file mode 100644 index 0000000..a627546 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + id , + group_id as groupId , + user_id as userId , + create_time as createTime + + + a.id, + a.group_id + as groupId , + a.user_id + as userId , + a.create_time + as createTime + + + + + + and group_id = #{request.groupId} + + + and user_id = #{request.userId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml new file mode 100644 index 0000000..3245136 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + id, + group_name as groupName , + create_time as createTime , + dept_id as deptId , + create_id as createId + + + a.id,a.group_name as groupName , + a.create_time + as createTime , + a.dept_id + as deptId , + a.create_id + as createId,a.description + + + + + + and group_name like concat('%',#{request.groupName},'%') + + + and dept_id = #{request.deptId} + + + and create_id = #{request.createId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java new file mode 100644 index 0000000..e44328f --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class GroupRiskRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("风险点集合") + private List targetIds; + @ApiModelProperty("用户ID集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java new file mode 100644 index 0000000..f8758bf --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class RiskGroupUserRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("设备集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java new file mode 100644 index 0000000..b386d5b --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java @@ -0,0 +1,53 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 风险点所属组 sys_risk_group_point + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_risk_group_point") +public class SysRiskGroupPoint extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableId("id") + private Long id; + + @ApiModelProperty(value = "用户组ID", dataType = "Long") + @TableField("group_id") + private Long groupId; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty(value = "风险点ID", dataType = "Long") + @TableField("target_id") + private Long targetId; + + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; + + @Override + public String toString() { + return "SysGroupDevice{" + + "id=" + id + + "groupId=" + groupId + + "createTime=" + createTime + + "targetId=" + targetId + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java new file mode 100644 index 0000000..949caa3 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java @@ -0,0 +1,55 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 组人员管理对象 sys_group_rel_user + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_risk_group_rel_user") +public class SysRiskGroupRelUser extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + + @ApiModelProperty(value = "组ID", dataType = "Long") + @TableField("group_id") + private Long groupId; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + @TableField("user_id") + private Long userId; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + @ApiModelProperty(value = "用户姓名", dataType = "String") + @TableField(exist = false) + private String realName; + + @ApiModelProperty(value = "用户名", dataType = "String") + @TableField(exist = false) + private String account; + + @Override + public String toString() { + return "SysGroupRelUser{" + + "id=" + id + + "groupId=" + groupId + + "userId=" + userId + + "createTime=" + createTime + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java new file mode 100644 index 0000000..1b73dc0 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java @@ -0,0 +1,97 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 危险点分组组信息对象 sys_user_risk_group + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_user_risk_group") +public class SysUserRiskGroup extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableId("id") + private Long id; + + @ApiModelProperty(value = "组名称", dataType = "String", required = true) + @TableField("group_name") + private String groupName; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty(value = "所属组织(保留字段)", dataType = "Long") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty(value = "描述信息", dataType = "String") + @TableField("description") + private String description; + + @ApiModelProperty(value = "密级字典", dataType = "String") + @TableField("safe") + private int safe; + + @ApiModelProperty(value = "创建者ID", dataType = "Long") + @TableField("create_id") + private Long createId; + + + @ApiModelProperty(value = "类型(1 危险点 2 重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "Long") + @TableField("group_type") + private String groupType; + @TableField(exist = false) + private String groupTypeName; + /** + * 风险点集合 + */ + @ApiModelProperty(value = "风险点集合(逗号拼接)", dataType = "String") + @TableField(exist = false) + private String pointIds; + + @ApiModelProperty(value = "数量", dataType = "Long") + @TableField(exist = false) + private Integer targetNum; + /** + * 用户集合 + */ + @ApiModelProperty(value = "用户集合(逗号拼接)", dataType = "String") + @TableField(exist = false) + private String personIds; + + @ApiModelProperty(value = "用户名称", dataType = "String") + @TableField(exist = false) + private String realName; + + @ApiModelProperty(value = "用户名", dataType = "String") + @TableField(exist = false) + private String account; + + @ApiModelProperty(value = "密级字典名称", dataType = "String") + @TableField(exist = false) + private String safeName; + + @Override + public String toString() { + return "SysUserGroup{" + + "id=" + id + + "groupName=" + groupName + + "createTime=" + createTime + + "deptId=" + deptId + + "createId=" + createId + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java new file mode 100644 index 0000000..4657ce4 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.device.dto.GroupRelDTO; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; + +import java.util.List; + + +/** + *

+ * 设备所属人员组 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysRiskGroupPointService extends IService { + /** + * 设备所属人员组 分页检索 + */ + List selectSysGroupDevicePage(Page page, QueryWrapper query); + + /** + * 设备组批量新增 + * + * @param relDTO + */ + void batchAdd(GroupRiskRelDTO relDTO); + + + /** + * 增量更新 + * @param groupId + * @param deviceIds + */ + void batchIncremental(Long groupId, List deviceIds); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java new file mode 100644 index 0000000..591eef2 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; + +import java.util.List; + + +/** + *

+ * 组人员管理 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysRiskGroupRelUserService extends IService { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(Page page, QueryWrapper query); + + void batchAdd(GroupUserRelDTO relDTO); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java new file mode 100644 index 0000000..1e0889c --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; + +import java.util.List; + + +/** + *

+ * 用户组信息 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysUserRiskGroupService extends IService { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(Page page, QueryWrapper query); + + List personTree(); + + /** + * 创建用户组 + * + * @param sysUserGroup 用户组信息 + * @param userIds 用户信息 + */ + void createSysUserGroup(SysUserRiskGroup sysUserGroup, List userIds); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java new file mode 100644 index 0000000..6839887 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java @@ -0,0 +1,118 @@ +package com.casic.missiles.modular.group.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +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.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.group.dao.SysRiskGroupPointMapper; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import com.casic.missiles.modular.group.service.ISysRiskGroupPointService; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + + +/** + *

+ * 设备所属人员组 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysRiskGroupPointServiceImpl extends ServiceImpl implements ISysRiskGroupPointService { + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysRiskGroupPointServiceImpl(ISysRiskGroupRelUserService sysGroupRelUserService) { + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @Override + public List selectSysGroupDevicePage(Page page, QueryWrapper query) { + return this.baseMapper.selectSysGroupDevicePage(page, query); + } + + @Transactional + @Override + public void batchAdd(GroupRiskRelDTO relDTO) { + + if (CollectionUtil.isEmpty(relDTO.getTargetIds())) { + ServiceException serviceException = new ServiceException(500, "添加不能为空!"); + throw serviceException; + } + + //删除 + QueryWrapper query = new QueryWrapper<>(); + query.eq("group_id", relDTO.getGroupId()); + this.remove(query); + + //保存分组与危险点对应关系 + List groupDevices = new ArrayList<>(); + for (Long deviceId : relDTO.getTargetIds()) { + SysRiskGroupPoint sysGroupDevice = new SysRiskGroupPoint(); + sysGroupDevice.setTargetId(deviceId); + sysGroupDevice.setGroupId(relDTO.getGroupId()); + sysGroupDevice.setCreateTime(new Date()); + groupDevices.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(groupDevices); + + //批量保存风险点与用户关系 + GroupUserRelDTO groupUserRelDTO = new GroupUserRelDTO(); + groupUserRelDTO.setGroupId(relDTO.getGroupId()); + groupUserRelDTO.setUserIds(relDTO.getUserIds()); + sysGroupRelUserService.batchAdd(groupUserRelDTO); + + } + + @Override + public void batchIncremental(Long groupId, List deviceIds) { + List groupDevices = this.list(new LambdaQueryWrapper().eq(SysRiskGroupPoint::getGroupId, groupId)); + if (CollectionUtil.isEmpty(groupDevices)) { + saveDevices(groupId, deviceIds); + } else { + List oldDevices = groupDevices.stream().map(SysRiskGroupPoint::getTargetId).collect(Collectors.toList()); + List delIds = CollectionUtil.subtractToList(oldDevices, deviceIds); + List saveDevices = CollectionUtil.subtractToList(deviceIds, oldDevices); + + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.eq(SysRiskGroupPoint::getGroupId, groupId); + delQuery.in(SysRiskGroupPoint::getTargetId, delIds); + if (CollectionUtil.isNotEmpty(delIds)) { + this.remove(delQuery); + } + saveDevices(groupId, saveDevices); + } + } + + private void saveDevices(Long groupId, List saveDevices) { + List saves = new ArrayList<>(); + for (Long deviceId : saveDevices) { + SysRiskGroupPoint sysGroupDevice = new SysRiskGroupPoint(); + sysGroupDevice.setTargetId(deviceId); + sysGroupDevice.setGroupId(groupId); + sysGroupDevice.setCreateTime(new Date()); + saves.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(saves); + } + + private void saveOrUpdateBatchList(List groupDevices) { + for (SysRiskGroupPoint groupDevice : groupDevices) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysRiskGroupPoint::getGroupId, groupDevice.getGroupId()); + query.eq(SysRiskGroupPoint::getTargetId, groupDevice.getTargetId()); + this.saveOrUpdate(groupDevice, query); + } + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java new file mode 100644 index 0000000..83cd76a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.group.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +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.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.group.dao.SysRiskGroupPointMapper; +import com.casic.missiles.modular.group.dao.SysRiskGroupRelUserMapper; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.system.dao.SysGroupRelUserMapper; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + + +/** + *

+ * 组人员管理 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysRiskGroupRelUserServiceImpl extends ServiceImpl implements ISysRiskGroupRelUserService { + @Override + public List selectSysGroupRelUserPage(Page page, QueryWrapper query) { + return this.baseMapper.selectSysGroupRelUserPage(page, query); + } + + @Transactional + @Override + public void batchAdd(GroupUserRelDTO relDTO) { + if (CollectionUtil.isEmpty(relDTO.getUserIds())) { + ServiceException serviceException = new ServiceException(500, "添加不能为空!"); + throw serviceException; + } + //删除 + QueryWrapper query = new QueryWrapper<>(); + query.eq("group_id",relDTO.getGroupId()); + this.remove(query); + //添加设备信息 + List groupDevices = new ArrayList<>(); + for (Long deviceId : relDTO.getUserIds()) { + SysRiskGroupRelUser sysGroupDevice = new SysRiskGroupRelUser(); + sysGroupDevice.setUserId(deviceId); + sysGroupDevice.setGroupId(relDTO.getGroupId()); + sysGroupDevice.setCreateTime(new Date()); + groupDevices.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(groupDevices); + } + + private void saveOrUpdateBatchList(List groupDevices) { + for (SysRiskGroupRelUser groupDevice : groupDevices) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysRiskGroupRelUser::getGroupId, groupDevice.getGroupId()); + query.eq(SysRiskGroupRelUser::getUserId, groupDevice.getUserId()); + this.saveOrUpdate(groupDevice, query); + } + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java new file mode 100644 index 0000000..b3bb9a8 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java @@ -0,0 +1,246 @@ +package com.casic.missiles.modular.group.service.impl; + +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.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.modular.data.constants.DataConstants; +import com.casic.missiles.modular.group.dao.SysUserRiskGroupMapper; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupPointService; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.tree.RiskGroupDefaultTreeBuildFactory; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + + +/** + *

+ * 用户组信息 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysUserRiskGroupServiceImpl extends ServiceImpl implements ISysUserRiskGroupService { + @Lazy + @Resource + private ISysRiskGroupPointService sysRiskGroupPointService; + private final AbstractPermissionContext abstractPermissionContext; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_USER = "2"; + private final AbstractDictService dictService; + @Lazy + @Resource + private ISysRiskGroupRelUserService relUserService; + + public SysUserRiskGroupServiceImpl(AbstractPermissionContext abstractPermissionContext, AbstractDictService dictService) { + this.abstractPermissionContext = abstractPermissionContext; + this.dictService = dictService; + } + + @Override + public List selectSysUserGroupPage(Page page, QueryWrapper query) { + //分组过滤当前权限 + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + query.in("a.dept_id", dataScope.getDeptIds()); + } + List riskGroups = this.baseMapper.selectSysUserGroupPage(page, query); + for (SysUserRiskGroup riskGroup : riskGroups) { + wrapperInfo(riskGroup); + } + return riskGroups; + } + + private void wrapperInfo(SysUserRiskGroup riskGroup) { + riskGroup.setSafeName(dictService.getDictNameByCode(DataConstants.DICT_SECRET_LEVEL_TYPE, riskGroup.getSafe() + "")); + //查询关联设备 + LambdaQueryWrapper deviceQuery = new LambdaQueryWrapper<>(); + deviceQuery.eq(SysRiskGroupPoint::getGroupId, riskGroup.getId()); + List devices = sysRiskGroupPointService.list(deviceQuery); + if (devices != null) { + List deviceList = devices.stream().map(SysRiskGroupPoint::getTargetId).collect(Collectors.toList()); + riskGroup.setPointIds(StrUtil.join(",", deviceList)); + riskGroup.setTargetNum(deviceList.size()); + } + + riskGroup.setGroupTypeName(dictService.getDictNameByCode(DataConstants.dangerAssessmentType, riskGroup.getGroupType())); + //查询关联人员 + LambdaQueryWrapper personQuery = new LambdaQueryWrapper<>(); + personQuery.eq(SysRiskGroupRelUser::getGroupId, riskGroup.getId()); + List persons = relUserService.list(personQuery); + if (persons != null) { + List personIds = persons.stream().map(SysRiskGroupRelUser::getUserId).collect(Collectors.toList()); + riskGroup.setPersonIds(StrUtil.join(",", personIds)); + } + } + + private void setGroupInfo(SysUserRiskGroup entity) { + if (StrUtil.isNotEmpty(entity.getPointIds())) { + entity.setTargetNum(StrUtil.split(entity.getPointIds(), ",").size()); + } else { + entity.setTargetNum(0); + } + } + + @Override + public boolean save(SysUserRiskGroup entity) { + AuthUser authUser = abstractPermissionContext.getAuthService().getLoginUser(); + entity.setCreateTime(new Date()); + entity.setCreateId(authUser.getId()); + if (entity.getDeptId() == null) { + entity.setDeptId(authUser.getDeptId()); + } + setGroupInfo(entity); + super.save(entity); + batchSave(entity, entity.getId()); + return true; + } + + @Override + public boolean updateById(SysUserRiskGroup entity) { + AuthUser authUser = abstractPermissionContext.getAuthService().getLoginUser(); + entity.setCreateTime(new Date()); + entity.setCreateId(authUser.getId()); + if (entity.getDeptId() == null) { + entity.setDeptId(authUser.getDeptId()); + } + setGroupInfo(entity); + super.updateById(entity); + batchSave(entity, entity.getId()); + return true; + } + + /** + * 数据转换 + * + * @param entity + * @param groupId + */ + private void batchSave(SysUserRiskGroup entity, Long groupId) { + GroupRiskRelDTO groupRelDTO = new GroupRiskRelDTO(); + groupRelDTO.setGroupId(groupId); + if (StrUtil.isNotEmpty(entity.getPointIds())) { + long[] longs = StrUtil.splitToLong(entity.getPointIds(), ","); + List devices = new ArrayList<>(); + for (long aLong : longs) { + devices.add(aLong); + } + groupRelDTO.setTargetIds(devices); + } + if (StrUtil.isNotEmpty(entity.getPersonIds())) { + List persons = new ArrayList<>(); + long[] longs = StrUtil.splitToLong(entity.getPersonIds(), ","); + + for (long aLong : longs) { + persons.add(aLong); + } + groupRelDTO.setUserIds(persons); + } + sysRiskGroupPointService.batchAdd(groupRelDTO); + } + + @Override + public List personTree() { + + //查询可见组织 + DataScope scope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + + LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { + deptQuery.in(Dept::getId, scope.getDeptIds()); + } + deptQuery.orderByAsc(Dept::getNum); + + List deptList = abstractPermissionContext.getDeptService().list(deptQuery); + List deptDTOS = new ArrayList<>(); + List rootIds = new ArrayList<>(); + Set normalIds = new HashSet<>(); + for (Dept dept : deptList) { + RiskGroupDeptDTO deptDTO = new RiskGroupDeptDTO(); + deptDTO.setPid(dept.getPid()); + deptDTO.setId(dept.getId()); + deptDTO.setFullName(dept.getFullName()); + deptDTO.setName(dept.getSimpleName()); + deptDTOS.add(deptDTO); + deptDTO.setType(NODE_TYPE_DEPT); + normalIds.add(dept.getId()); + + //挂载设备信息 + LambdaQueryWrapper deviceQuery = new LambdaQueryWrapper<>(); + deviceQuery.eq(User::getDeptId, deptDTO.getId()); + deviceQuery.eq(User::getStatus, "1"); + List deviceInfos = abstractPermissionContext.getUserService().list(deviceQuery); + + deptDTO.setChildrenNodes(deviceInfos.stream().map(this::createDeptDTO).collect(Collectors.toList())); + } + + for (RiskGroupDeptDTO deptDTO : deptDTOS) { + if (!normalIds.contains(deptDTO.getPid())) { + rootIds.add(deptDTO.getPid()); + } + } + + //过滤根节点,支持多根展示 + RiskGroupDefaultTreeBuildFactory abstractTreeBuildFactory = new RiskGroupDefaultTreeBuildFactory(); + List newTree = new ArrayList<>(); + rootIds = rootIds.stream().distinct().collect(Collectors.toList()); + for (Long rootId : rootIds) { + abstractTreeBuildFactory.setRootId(rootId + ""); + newTree.addAll(abstractTreeBuildFactory.doTreeBuild(deptDTOS)); + } + + return newTree; + } + + @Transactional + @Override + public void createSysUserGroup(SysUserRiskGroup sysUserGroup, List userIds) { + this.baseMapper.insert(sysUserGroup); + GroupUserRelDTO relDTO = new GroupUserRelDTO(); + relDTO.setGroupId(sysUserGroup.getId()); + relDTO.setUserIds(userIds); + relUserService.batchAdd(relDTO); + } + + + /** + * 创建节点 + * + * @param userInfo 用户信息 + * @return + */ + private GroupDeptDTO createDeptDTO(User userInfo) { + GroupDeptDTO deptDTO = new GroupDeptDTO(); + deptDTO.setType(NODE_TYPE_USER); + deptDTO.setId(userInfo.getId()); + deptDTO.setPid(userInfo.getDeptId()); + deptDTO.setUserDTO(userInfo); + deptDTO.setName(userInfo.getName()); + deptDTO.setFullName(userInfo.getName()); + deptDTO.setUserId(userInfo.getId() + ""); + return deptDTO; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/tree/RiskGroupDefaultTreeBuildFactory.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/tree/RiskGroupDefaultTreeBuildFactory.java new file mode 100644 index 0000000..69c18ad --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/tree/RiskGroupDefaultTreeBuildFactory.java @@ -0,0 +1,30 @@ +package com.casic.missiles.modular.group.tree; + +import com.casic.missiles.core.treebuild.DefaultTreeBuildFactory; +import com.casic.missiles.model.tree.Tree; + +import java.util.ArrayList; +import java.util.List; + +public class RiskGroupDefaultTreeBuildFactory extends DefaultTreeBuildFactory { + private String rootId; + @Override + protected List afterBuild(List nodes) { + //去掉所有的二级节点 + ArrayList results = new ArrayList<>(); + for (T node : nodes) { + if (node.getNodeParentId().equals(rootId)) { + results.add(node); + } + } + return results; + } + + public String getRootId() { + return rootId; + } + + public void setRootId(String rootId) { + this.rootId = rootId; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/RiskGroupDeptDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/RiskGroupDeptDTO.java new file mode 100644 index 0000000..7f6c157 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/RiskGroupDeptDTO.java @@ -0,0 +1,61 @@ +package com.casic.missiles.modular.group.vo; + +import com.casic.missiles.model.tree.Tree; +import com.casic.missiles.modular.device.model.RiskPointInfo; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +@Data +public class RiskGroupDeptDTO implements Tree { + @ApiModelProperty("组织主键") + private Long id; + + @ApiModelProperty("父部门ID") + private Long pid; + + @ApiModelProperty("组织简称") + private String name; + + @ApiModelProperty("组织全称") + private String fullName; + + @ApiModelProperty("子节点") + private List children = new ArrayList<>(); + + @ApiModelProperty("节点类型(1 组织 2 人员)") + private String type; + + @ApiModelProperty("用户信息") + private User userDTO; + private String userId; + private RiskPointInfo riskPointInfo; + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + @Override + public String getNodeId() { + return id + ""; + } + + @Override + public String getNodeParentId() { + return pid + ""; + } + + @Override + public void setChildrenNodes(List childrenNodes) { + children.addAll(childrenNodes); + children = children.stream().distinct().collect(Collectors.toList()); + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupPointVO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupPointVO.java new file mode 100644 index 0000000..3f6ca41 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupPointVO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.group.vo; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 风险点所属人员组对象VO + * + * @author lwh + * @date 2024-07-11 + */ +@Data +public class SysRiskGroupPointVO { + private static final long serialVersionUID = 1L; + + + @ApiModelProperty(value = "用户组ID", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备ID", dataType = "Long") + private Long targetId; + + public QueryWrapper genQuery() { + QueryWrapper query = new QueryWrapper<>(); + if (groupId != null) { + query.eq("group_id", groupId); + } + if (targetId != null) { + query.eq("target_id", targetId); + } + return query; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupRelUserVO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupRelUserVO.java new file mode 100644 index 0000000..5a95d82 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupRelUserVO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.group.vo; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 组人员管理对象VO + * + * @author lwh + * @date 2024-07-11 + */ +@Data +public class SysRiskGroupRelUserVO { + private static final long serialVersionUID = 1L; + + + @ApiModelProperty(value = "组ID", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + private Long userId; + + public QueryWrapper genQuery() { + QueryWrapper query = new QueryWrapper<>(); + if (groupId != null) { + query.eq("group_id", groupId); + } + if (userId != null) { + query.eq("user_id", userId); + } + return query; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskUserGroupVO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskUserGroupVO.java new file mode 100644 index 0000000..6363c3b --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskUserGroupVO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.group.vo; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.system.model.SysUserGroup; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 用户组信息对象VO + * + * @author lwh + * @date 2024-07-11 + */ +@Data +public class SysRiskUserGroupVO { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "用户组名称", dataType = "String") + private String groupName; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + private Long deptId; + @ApiModelProperty(value = "创建时间起始", dataType = "String") + private String startTime; + @ApiModelProperty(value = "创建时间结束", dataType = "String") + private String endTime; + @ApiModelProperty(value = "创建者ID", dataType = "Long") + private Long createId; + + public QueryWrapper genQuery() { + QueryWrapper query = new QueryWrapper<>(); + if (StrUtil.isNotEmpty(groupName)) { + query.like("a.group_name", groupName); + } + if (StrUtil.isNotEmpty(startTime)) { + query.ge("a.create_time", startTime); + } + if (StrUtil.isNotEmpty(endTime)) { + query.le("a.create_time", endTime); + } + if (deptId != null) { + query.eq("a.dept_id", deptId); + } + if (createId != null) { + query.eq("a.create_id", createId); + } + return query; + } +} diff --git a/casic-web/src/main/resources/doc/20250227.txt b/casic-web/src/main/resources/doc/20250227.txt new file mode 100644 index 0000000..daf4d4c --- /dev/null +++ b/casic-web/src/main/resources/doc/20250227.txt @@ -0,0 +1,68 @@ +1.权限配置检查 + 对应属性需配置为 security_admin + casic: + video: + admin: + role: security_admin +1.租户设定更新 + 创建租户设定角色 角色别名必须是tenantAdministrator + + 分配给管理员 需手动入库授权, sys_user表 role_id字段添加租户设定字段, + sys_ru_relation 添加用户绑定关系 + + INSERT INTO sys_tenant(ID, TENANT_NAME, TENANT_CODE, LINK_PERSON, TEL, CLEARDAY, FLAG, TS) VALUES (1, '航天二院', '001', NULL, NULL, NULL, '0', '2025-02-21 14:41:20'); + + ALTER TABLE sys_user_group ADD COLUMN tenant_id VARCHAR(64); + ALTER TABLE sys_group_device ADD COLUMN tenant_id VARCHAR(64); + ALTER TABLE sys_group_rel_user ADD COLUMN tenant_id VARCHAR(64); + ALTER TABLE device_group_info ADD COLUMN tenant_id VARCHAR(64); + update device_group_info set tenant_id = 1; + update sys_user set tenant_id = 1; + update sys_role set tenant_id = 1; + update sys_rm_relation set tenant_id = 1; + update sys_ru_relation set tenant_id = 1; + update sys_dept set tenant_id = 1; + update sys_user_group set tenant_id = 1; + update sys_group_device set tenant_id = 1; + update sys_group_rel_user set tenant_id = 1; + 添加租户ID 0 + +2.表risk_point_info 字段 secret_level值密级默认 0 设定 + +3.新增表 sys_user_risk_group sys_risk_group_rel_user sys_risk_group_point + +CREATE TABLE sys_user_risk_group +( + id numeric(20,0) NOT NULL, + group_name VARCHAR(256), + create_time date, + dept_id numeric(20,0), + create_id numeric(20,0), + description VARCHAR(256), + safe SMALLINT, + group_type SMALLINT, + tenant_id VARCHAR(64), + PRIMARY KEY (id) +); + +CREATE TABLE sys_risk_group_rel_user +( + id numeric(20,0) NOT NULL, + group_id numeric(20,0), + user_id numeric(20,0), + create_time date, + tenant_id VARCHAR(64) +); + +CREATE TABLE sys_risk_group_point +( + id numeric(20,0) NOT NULL, + group_id numeric(20,0), + create_time date, + target_id numeric(20,0), + tenant_id VARCHAR(64) +); + + + + diff --git a/casic-web/src/main/resources/doc/20250416.txt b/casic-web/src/main/resources/doc/20250416.txt new file mode 100644 index 0000000..14610e9 --- /dev/null +++ b/casic-web/src/main/resources/doc/20250416.txt @@ -0,0 +1,18 @@ +1.增加识别流开关 流媒体id 识别流国标号 + ALTER TABLE box_device_relation ADD COLUMN media_server_id VARCHAR(255); + ALTER TABLE box_device_relation ADD COLUMN recognition_gb VARCHAR(255); + ALTER TABLE box_device_relation ADD COLUMN recognition_stream_flag int; + + + + ALTER TABLE upload_log ADD COLUMN tenant_id VARCHAR(64); +2.增加字典值 mediaServerId + 对应值参考zlm中的mediaServerId 配置项 +3.更新box_device表以下字段类型为text + server_public_key + server_private_key + client_public_key + client_private_key + +4.casic.no-login-urls + 增加 /record/upload \ No newline at end of file diff --git a/casic-web/src/main/resources/doc/20250519.txt b/casic-web/src/main/resources/doc/20250519.txt new file mode 100644 index 0000000..6d70728 --- /dev/null +++ b/casic-web/src/main/resources/doc/20250519.txt @@ -0,0 +1,3 @@ +1.固定秘钥解析 + 配置项增加 + casic.client.privateKey \ No newline at end of file diff --git a/casic-web/src/main/resources/doc/20250522.md b/casic-web/src/main/resources/doc/20250522.md new file mode 100644 index 0000000..636b4df --- /dev/null +++ b/casic-web/src/main/resources/doc/20250522.md @@ -0,0 +1,80 @@ +## 一、数据库更新 + +1. 操作日志增加IP字段 + +``` +ALTER TABLE sys_operation_log ADD COLUMN IP VARCHAR(255); +``` + +2. 角色添加业务类型 + +``` +ALTER TABLE sys_role ADD COLUMN BIZ_TYPE VARCHAR(32) default 'normal' COMMENT '业务类型标识字段,用于区分不同业务模块的资源,比如三员 安全生产'; +``` + +3. 资源添加业务类型及相关字典值 + +``` +ALTER TABLE sys_resource ADD COLUMN BIZ_TYPE VARCHAR(32) default 'normal' COMMENT '业务类型标识字段,用于区分不同业务模块的资源,比如三员 安全生产'; + +INSERT INTO `sys_dict` (`ID`, `NUM`, `PID`, `NAME`, `TIPS`, `CODE`, `TENANT_ID`) VALUES (1925798590442455041, '0', 0, '业务分类', '业务分类', 'bizType', NULL); +INSERT INTO `sys_dict` (`ID`, `NUM`, `PID`, `NAME`, `TIPS`, `CODE`, `TENANT_ID`) VALUES (1925798590442455042, '0', 1925798590442455041, '普通业务', NULL, 'normal', NULL); +INSERT INTO `sys_dict` (`ID`, `NUM`, `PID`, `NAME`, `TIPS`, `CODE`, `TENANT_ID`) VALUES (1925798590505369602, '1', 1925798590442455041, '三员权限', NULL, 'audit', NULL); + +``` +系统三员角色从数据库初始化 bizType为audit 其他角色为normal +系统菜单资源数据修改,系统管理下所有菜单及按钮设置bizType为audit,其他业务功能设置为normal + +4. 增加操作审批表结构 + +CREATE TABLE sys_operation_application +( +id numeric(20,0) NOT NULL, +create_time datetime , +update_time datetime , +title varchar(255) , +json_context text , +status char(1), +operation_type varchar(64) , +operation_remark varchar(255) , +audit_remark varchar(255) , +tenant_id varchar(64) , +create_id numeric(20,0) , +audit_id numeric(20,0) , +PRIMARY KEY (id) +) + +业务操作类关系如下 +增加operationType字典 +user_add 用户新增 +user_update 用户修改 +user_delete 用户删除 +user_reset 密码重置 +user_freeze 用户冻结 +user_unfreeze 用户解冻 +user_roleAssign 用户角色分配 + +role_add 角色新增 +role_update 角色修改 +role_delete 角色删除 +role_funcAuthor 角色功能权限配置 +role_dataAuthor 角色数据权限配置 + +resource_add 资源新增 +resource_update 资源修改 +resource_delete 资源删除 + +dept_add 组织新增 +dept_update 组织修改 +dept_delete 组织删除 + +casic.tenant.excludes 配置项增加 ,sys_operation_application + +对应角色只能授权对应角色资源 +## 二、设备同步自动提取所属组织机构 +1.增加开启配置项 +casic.video.av.autoDept: true #默认开启 + + + + diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java new file mode 100644 index 0000000..1ca5eb1 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java @@ -0,0 +1,63 @@ +package com.casic.missiles.modular.device.enums; + +/** + * wvp设备类型转换 + * + * @author lwh + * @Date 2017年1月10日 下午9:54:13 + */ +public enum AvDeptEnum { + + DEPT0("0066", "801",0L), + DEPT1("0059", "699厂",1L), + DEPT2("0055", "283厂",1L), + DEPT3("0022", "201所",1L), + DEPT4("0027", "206所",1L), + DEPT5("0013", "23所",1L); + + String code; + String message; + Long deptId; + AvDeptEnum(String code, String message, Long deptId) { + this.code = code; + this.message = message; + this.deptId = deptId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public static AvDeptEnum valueOfCode(String value) { + if (value == null) { + return null; + } else { + for (AvDeptEnum ms : AvDeptEnum.values()) { + if (ms.getCode().equals(value)) { + return ms; + } + } + return null; + } + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java new file mode 100644 index 0000000..573d0e2 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.task; + +import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; + +public class Test { + public static void main(String[] args) { + System.out.println(AvStatusTypeEnum.valueOfType(new Integer(1)).getMessage()); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java new file mode 100644 index 0000000..7c06c67 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java @@ -0,0 +1,77 @@ +package com.casic.missiles.modular.device.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpSession; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class RiskSyncController extends BaseController { + @Resource + private IClientAuthService clientAuthService; + @Resource + private AbstractDeptService deptService; + @Resource + private AbstractUserService userService; + @PostMapping("/client/login") + @ResponseBody + public ResponseData login(@RequestBody RiskLoginForm deviceLoginForm, HttpSession session) { + return clientAuthService.login(deviceLoginForm, session); + } + + /** + * 全量组织信息读取 + * + * @return + */ + @PostMapping("/dept/list") + @ResponseBody + public ResponseDataDTO> dept() { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = deptService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量用户信息读取 + * + * @return + */ + @PostMapping("/user/list") + @ResponseBody + public ResponseDataDTO> user() { + //todo 此处租户拦截需移除 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量设备信息读取 + * + * @return + */ + @PostMapping("/device/list") + @ResponseBody + public ResponseDataDTO> device() { + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java new file mode 100644 index 0000000..5e5b890 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class UserSyncController extends BaseController { + + @Resource + private IBusDeviceInfoService busDeviceInfoService; + + /** + * 登录用户授权设备权限查看 + * @return + */ + @GetMapping("/device/permissions") + @ResponseBody + public ResponseDataDTO> devicePermissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } + + /** + * 登录用户风险点授权查询 + * @return + */ + @GetMapping("/permissions") + @ResponseBody + public ResponseDataDTO> permissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java new file mode 100644 index 0000000..07b8df8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +/** + * 设备登录接口 + */ +@Data +public class RiskLoginForm { + /** + * 设备编码 + */ + private String clientId; + + /** + * 时间戳 + */ + private Long time; + + /** + * 加密后数据 加密格式sn+时间戳 时效性为6小时 + */ + private String secret; + + /** + * 设备登录注册IP + */ + private String ip; + + /** + * 设备登录注册port + */ + private String port; +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java new file mode 100644 index 0000000..40fdb4b --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.device.service; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; + +import javax.servlet.http.HttpSession; + +public interface IClientAuthService { + /** + * @param deviceLoginForm + * @param session + * @return + */ + ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session); +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java new file mode 100644 index 0000000..576e857 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.device.service.impl; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import cn.hutool.jwt.JWT; +import cn.hutool.jwt.JWTUtil; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.util.IRiskCacheUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpSession; +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Service +public class ClientAuthServiceImpl implements IClientAuthService { + @Value("${casic.client.privateKey:MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALKcwHHOg0F6Zkq7GOVnOnTgvH9vSPXFFTOcEqOVBIBPBz7UNrEGkp1PhZ+oC4WVJAsDuot2e1fDZy9QS9HF92MmnYp9kuQRhGZjHctPnVZ0Kai5BES0ytHqPeauLyNXxOOS0YKYEUwpft4Z5Azw7bj3JWNvLrnTZvNld6FDvTslAgMBAAECgYAqN/kZLYpC+O6i7XSmDO95XwHPUXu6dDpdt5+EQR4OQh/hTwIaeAZB3uEj6vHGQomBfQEkI/5lsU97lIxHanbd+Hro7JyIhsGD5LR5XnZHVKzFiZW62OIU6FI9dlQNN8miiblnmyDwiMA3okaHl0O7qQjZ+IvY2csgmJc7AXpPpQJBAOhrhcfWFcgffj2O6HYNlBLFfbboc/ZzrEADDXKnxRSHlo5o8W+6gylG/L2NGtbag5S68B9VYzdkSQ1++5C+Ws8CQQDEu7h311PLEiKgqzGHpjzadQETmt/jMadaKQmT0TZwNVi6X8lR17U5hF8dAqZzUzr9kUC0HRIZhg4Uv1v3W3fLAkB4YPhxgJjXhjhEefg87Nt8vX1Xdx5Yz6CvpuUYNX0GHRQFvqUOUXQNtQ7CvorgLV1pc0lbcUZqMi8EJnj1hyJRAkEAjHXWm8GiMt+M15fCsi3vTq2xChVOekBuUsHv85iwvGZqJg7ThtpyqlEnM2g7/STUfkvhnXcQACclEI0blTy6BwJAPmFyhU+d0ejVpbc53TdrL2HqYYUHi/tTy/dtUa7lbypzdwwJ2M1Tv5PE8sQxr9tgMbebfxVb/RFKdiCCtzC4ng==}") + private String privateKey; + + @Override + public ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session) { + //固定秘钥解析 + try { + String str = RSAUtils.decrypt(deviceLoginForm.getSecret(), privateKey); + Long time = Long.valueOf(StrUtil.split(str, "_").get(1)); + //边缘盒子时差与服务时差不可超过24小时 + if (time == null || System.currentTimeMillis() - time > 3600 * 24 * 1000) { + return ResponseData.error("请求时间超时"); + } + deviceLoginForm.setTime(time); + } catch (Exception e) { + e.printStackTrace(); + return ResponseData.error("设备解析异常!"); + } + + try { + String token = this.createJwtToken(deviceLoginForm); + IRiskCacheUtil.put(token, token); + return ResponseData.success(token); + } catch (Exception e) { + log.error("设备登录异常:{}", e.getMessage()); + return ResponseData.error("登录异常,请联系管理员"); + } +} + /** + * token创建 + * + * @param loginForm 登录信息 + * @param device 设备信息 + * @return + * @throws Exception + */ + public String createJwtToken(RiskLoginForm loginForm) throws Exception { + Map payload = new HashMap<>(); + payload.put("clientId", loginForm.getClientId()); // 设备编号 + payload.put("time", loginForm.getTime()); // 请求时间 + + //RSA 解密 + String str = RSAUtils.decrypt(loginForm.getSecret(), privateKey); + String key = loginForm.getClientId()+"_" + loginForm.getTime() ; + if (!key.equals(str)) { + //秘钥验证失败 + throw new ServiceException(500,"秘钥验证失败"); + } + +// long exp = new Date().getTime() + 2 * 3600000; // 2小时后的时间戳 +// payload.put("exp", exp); + + // 创建JWT + String jwt = JWTUtil.createToken(payload, "token-203-202405".getBytes()); + + return jwt; + } + + /** + * token解析 + * + * @param jwtStr token + * @return + * @throws Exception + */ + public static RiskLoginForm parseToken(String jwtStr){ + JWT jwtObj = new JWTUtil().parseToken(jwtStr); + RiskLoginForm deviceLoginForm = new RiskLoginForm(); + deviceLoginForm.setClientId(Convert.toStr(jwtObj.getPayload("clientId"))); + return deviceLoginForm; + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java new file mode 100644 index 0000000..0e91ac8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.util; +import cn.hutool.cache.Cache; +import cn.hutool.cache.CacheUtil; +/** + * token有效 + */ +public class IRiskCacheUtil { + /** + * 1小时内不活跃 会踢掉 + */ + private static Cache fifoCache = CacheUtil.newFIFOCache(1000, 1000 * 60 * 60); + + public static void put(String key, String value) { + fifoCache.put(key, value); + } + + public static String get(String key) { + return fifoCache.get(key); + } + + public static void remove(String key) { + fifoCache.remove(key); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java new file mode 100644 index 0000000..805c32a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceGroupDict extends AbstractDictMap { + + @Override + public void init() { + //检索条件 + put("groupName", "分组名称"); + put("startTime", "起始时间"); + put("endTime", "结束时间"); + //新增修改属性 + put("cameraIds", "设备国标号"); + put("personIds", "人员主键集合"); + put("description","备注"); + put("id","主键"); + put("ids","主键集合"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java new file mode 100644 index 0000000..895fbd9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceQueryDict extends AbstractDictMap { + + @Override + public void init() { + put("devType", "类型查询"); + put("keyword", "设备名称"); + put("deptName", "所属单位"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java new file mode 100644 index 0000000..88da6df --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.device.util; + +public class DeviceScopeUtil { +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java new file mode 100644 index 0000000..2e3e478 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.device.controller; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.auth.dto.DeviceLoginForm; +import com.casic.missiles.modular.auth.util.ICacheUtil; +import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; +import com.casic.missiles.modular.device.service.IAlarmRecordService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +@Api(tags = "告警记录") +@RestController +@RequestMapping("/record") +public class AlarmUploadController extends BaseController { + + private final IAlarmRecordService alarmRecordService; + private final IDeviceAuthService deviceAuthService; + public AlarmUploadController(IAlarmRecordService alarmRecordService, IDeviceAuthService deviceAuthService) { + this.alarmRecordService = alarmRecordService; + this.deviceAuthService = deviceAuthService; + } + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } + @BussinessLog(value = "告警记录上报接口") + @ApiOperation(value = "告警记录上报接口") + @PostMapping(value = "/upload") + public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return createAuthError(); + } + alarmRecordService.upload(alarmRecord); + return ResponseDataDTO.success(); + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java new file mode 100644 index 0000000..3f1c189 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class RecognitionStreamDTO { + private Long id; + private String recognitionStreamFlag; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java new file mode 100644 index 0000000..fa5ae4a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java @@ -0,0 +1,167 @@ +package com.casic.missiles.modular.group.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IRiskPointInfoService; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.group.vo.SysRiskGroupPointVO; +import com.casic.missiles.modular.group.vo.SysRiskGroupRelUserVO; +import com.casic.missiles.modular.group.vo.SysRiskUserGroupVO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import com.casic.missiles.modular.system.vo.SysGroupRelUserVO; +import com.casic.missiles.modular.system.vo.SysUserGroupVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.ibatis.annotations.Param; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; + +/** + * 风险点组信息Controller + * + * @author lwh + * @date 2024-07-11 + */ +@Api(tags = "风险点组信息") +@RestController +@RequestMapping("/sys/risk/group") +public class SysUserRiskGroupController extends BaseController { + private final IRiskPointInfoService riskPointInfoService; + private final ISysUserRiskGroupService sysUserGroupService; + private final AbstractPermissionContext permissionContext; + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysUserRiskGroupController(IRiskPointInfoService riskPointInfoService, ISysUserRiskGroupService sysUserGroupService, AbstractPermissionContext permissionContext, ISysRiskGroupRelUserService sysGroupRelUserService) { + this.riskPointInfoService = riskPointInfoService; + this.sysUserGroupService = sysUserGroupService; + this.permissionContext = permissionContext; + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @BussinessLog(value = "风险点分组查询") + @ApiOperation(value = "风险点分组查询", hidden = true) + @GetMapping(value = "/list") + public ResponseDataDTO> list(SysRiskUserGroupVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysUserGroupService.list(query)); + } + + @BussinessLog(value = "分组人员列表查询") + @ApiOperation(value = "分组人员列表查询") + @GetMapping(value = "/groupUserList") + public ResponseDataDTO> groupUserList(SysRiskGroupRelUserVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysGroupRelUserService.list(query)); + } + + @BussinessLog(value = "风险点分组人员查询") + @ApiOperation(value = "风险点分组人员分页查询") + @GetMapping(value = "/groupUserPage") + public ResponseDataDTO> listPage(SysRiskGroupRelUserVO sysGroupRelUserVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysGroupRelUserVO.genQuery(); + List relUsers = sysGroupRelUserService.selectSysGroupRelUserPage(page, query); + page.setRecords(relUsers); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "用户分组批量新增") + @ApiOperation(value = "批量新增接口") + @PostMapping(value = "/batch-add") + public ResponseDataDTO batchAdd(@RequestBody GroupUserRelDTO relDTO) { + sysGroupRelUserService.batchAdd(relDTO); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组人员删除") + @ApiOperation(value = "用户组人员删除接口") + @GetMapping(value = "/user/delete") + public ResponseDataDTO userDel(@Param("用户组人员关联主键") String id) { + sysGroupRelUserService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "风险点分组分页查询") + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(SysRiskUserGroupVO sysUserGroupVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysUserGroupVO.genQuery(); + + List sysUserGroups = sysUserGroupService.selectSysUserGroupPage(page, query); + page.setRecords(sysUserGroups); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "风险点分组新增") + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.save(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组修改") + @ApiOperation(value = "修改接口") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.updateById(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组删除") + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + sysUserGroupService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "批量删除") + @ApiOperation(value = "批量删除", hidden = true) + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + sysUserGroupService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "详情查询") + @ApiOperation(value = "详情查询", hidden = true) + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(sysUserGroupService.getById(id)); + } + + @BussinessLog(value = "用户树") + @ApiOperation(value = "用户树查询") + @GetMapping(value = "/person/tree") + public ResponseDataDTO> personTree() { + return ResponseDataDTO.success(sysUserGroupService.personTree()); + } + + @BussinessLog(value = "风险点树查询") + @ApiOperation(value = "风险点树查询") + @GetMapping(value = "/tree") + public ResponseDataDTO> tree(String riskType) { + return ResponseDataDTO.success(riskPointInfoService.tree(riskType)); + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java new file mode 100644 index 0000000..419eb27 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备所属人员组 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupPointMapper extends BaseMapper { +/** +* 设备所属人员组 分页检索 +*/ +List selectSysGroupDevicePage(@Param("page") Page page, @Param("ew" ) QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java new file mode 100644 index 0000000..eb41227 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 组人员管理 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupRelUserMapper extends BaseMapper { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java new file mode 100644 index 0000000..e8352df --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.system.model.SysUserGroup; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 用户组信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysUserRiskGroupMapper extends BaseMapper { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml new file mode 100644 index 0000000..6fa6a4d --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + id , + group_id as groupId , + create_time as createTime , + target_Id as targetId + + + a.id , + a.group_id + as groupId , + a.create_time + as createTime , + a.target_Id + as targetId + + + + + + and group_id = #{request.groupId} + + + and device_id = #{request.deviceId} + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml new file mode 100644 index 0000000..a627546 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + id , + group_id as groupId , + user_id as userId , + create_time as createTime + + + a.id, + a.group_id + as groupId , + a.user_id + as userId , + a.create_time + as createTime + + + + + + and group_id = #{request.groupId} + + + and user_id = #{request.userId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml new file mode 100644 index 0000000..3245136 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + id, + group_name as groupName , + create_time as createTime , + dept_id as deptId , + create_id as createId + + + a.id,a.group_name as groupName , + a.create_time + as createTime , + a.dept_id + as deptId , + a.create_id + as createId,a.description + + + + + + and group_name like concat('%',#{request.groupName},'%') + + + and dept_id = #{request.deptId} + + + and create_id = #{request.createId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java new file mode 100644 index 0000000..e44328f --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class GroupRiskRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("风险点集合") + private List targetIds; + @ApiModelProperty("用户ID集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java new file mode 100644 index 0000000..f8758bf --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class RiskGroupUserRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("设备集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java new file mode 100644 index 0000000..b386d5b --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java @@ -0,0 +1,53 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 风险点所属组 sys_risk_group_point + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_risk_group_point") +public class SysRiskGroupPoint extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableId("id") + private Long id; + + @ApiModelProperty(value = "用户组ID", dataType = "Long") + @TableField("group_id") + private Long groupId; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty(value = "风险点ID", dataType = "Long") + @TableField("target_id") + private Long targetId; + + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; + + @Override + public String toString() { + return "SysGroupDevice{" + + "id=" + id + + "groupId=" + groupId + + "createTime=" + createTime + + "targetId=" + targetId + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java new file mode 100644 index 0000000..949caa3 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java @@ -0,0 +1,55 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 组人员管理对象 sys_group_rel_user + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_risk_group_rel_user") +public class SysRiskGroupRelUser extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + + @ApiModelProperty(value = "组ID", dataType = "Long") + @TableField("group_id") + private Long groupId; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + @TableField("user_id") + private Long userId; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + @ApiModelProperty(value = "用户姓名", dataType = "String") + @TableField(exist = false) + private String realName; + + @ApiModelProperty(value = "用户名", dataType = "String") + @TableField(exist = false) + private String account; + + @Override + public String toString() { + return "SysGroupRelUser{" + + "id=" + id + + "groupId=" + groupId + + "userId=" + userId + + "createTime=" + createTime + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java new file mode 100644 index 0000000..1b73dc0 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java @@ -0,0 +1,97 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 危险点分组组信息对象 sys_user_risk_group + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_user_risk_group") +public class SysUserRiskGroup extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableId("id") + private Long id; + + @ApiModelProperty(value = "组名称", dataType = "String", required = true) + @TableField("group_name") + private String groupName; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty(value = "所属组织(保留字段)", dataType = "Long") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty(value = "描述信息", dataType = "String") + @TableField("description") + private String description; + + @ApiModelProperty(value = "密级字典", dataType = "String") + @TableField("safe") + private int safe; + + @ApiModelProperty(value = "创建者ID", dataType = "Long") + @TableField("create_id") + private Long createId; + + + @ApiModelProperty(value = "类型(1 危险点 2 重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "Long") + @TableField("group_type") + private String groupType; + @TableField(exist = false) + private String groupTypeName; + /** + * 风险点集合 + */ + @ApiModelProperty(value = "风险点集合(逗号拼接)", dataType = "String") + @TableField(exist = false) + private String pointIds; + + @ApiModelProperty(value = "数量", dataType = "Long") + @TableField(exist = false) + private Integer targetNum; + /** + * 用户集合 + */ + @ApiModelProperty(value = "用户集合(逗号拼接)", dataType = "String") + @TableField(exist = false) + private String personIds; + + @ApiModelProperty(value = "用户名称", dataType = "String") + @TableField(exist = false) + private String realName; + + @ApiModelProperty(value = "用户名", dataType = "String") + @TableField(exist = false) + private String account; + + @ApiModelProperty(value = "密级字典名称", dataType = "String") + @TableField(exist = false) + private String safeName; + + @Override + public String toString() { + return "SysUserGroup{" + + "id=" + id + + "groupName=" + groupName + + "createTime=" + createTime + + "deptId=" + deptId + + "createId=" + createId + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java new file mode 100644 index 0000000..4657ce4 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.device.dto.GroupRelDTO; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; + +import java.util.List; + + +/** + *

+ * 设备所属人员组 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysRiskGroupPointService extends IService { + /** + * 设备所属人员组 分页检索 + */ + List selectSysGroupDevicePage(Page page, QueryWrapper query); + + /** + * 设备组批量新增 + * + * @param relDTO + */ + void batchAdd(GroupRiskRelDTO relDTO); + + + /** + * 增量更新 + * @param groupId + * @param deviceIds + */ + void batchIncremental(Long groupId, List deviceIds); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java new file mode 100644 index 0000000..591eef2 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; + +import java.util.List; + + +/** + *

+ * 组人员管理 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysRiskGroupRelUserService extends IService { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(Page page, QueryWrapper query); + + void batchAdd(GroupUserRelDTO relDTO); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java new file mode 100644 index 0000000..1e0889c --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; + +import java.util.List; + + +/** + *

+ * 用户组信息 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysUserRiskGroupService extends IService { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(Page page, QueryWrapper query); + + List personTree(); + + /** + * 创建用户组 + * + * @param sysUserGroup 用户组信息 + * @param userIds 用户信息 + */ + void createSysUserGroup(SysUserRiskGroup sysUserGroup, List userIds); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java new file mode 100644 index 0000000..6839887 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java @@ -0,0 +1,118 @@ +package com.casic.missiles.modular.group.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +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.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.group.dao.SysRiskGroupPointMapper; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import com.casic.missiles.modular.group.service.ISysRiskGroupPointService; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + + +/** + *

+ * 设备所属人员组 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysRiskGroupPointServiceImpl extends ServiceImpl implements ISysRiskGroupPointService { + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysRiskGroupPointServiceImpl(ISysRiskGroupRelUserService sysGroupRelUserService) { + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @Override + public List selectSysGroupDevicePage(Page page, QueryWrapper query) { + return this.baseMapper.selectSysGroupDevicePage(page, query); + } + + @Transactional + @Override + public void batchAdd(GroupRiskRelDTO relDTO) { + + if (CollectionUtil.isEmpty(relDTO.getTargetIds())) { + ServiceException serviceException = new ServiceException(500, "添加不能为空!"); + throw serviceException; + } + + //删除 + QueryWrapper query = new QueryWrapper<>(); + query.eq("group_id", relDTO.getGroupId()); + this.remove(query); + + //保存分组与危险点对应关系 + List groupDevices = new ArrayList<>(); + for (Long deviceId : relDTO.getTargetIds()) { + SysRiskGroupPoint sysGroupDevice = new SysRiskGroupPoint(); + sysGroupDevice.setTargetId(deviceId); + sysGroupDevice.setGroupId(relDTO.getGroupId()); + sysGroupDevice.setCreateTime(new Date()); + groupDevices.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(groupDevices); + + //批量保存风险点与用户关系 + GroupUserRelDTO groupUserRelDTO = new GroupUserRelDTO(); + groupUserRelDTO.setGroupId(relDTO.getGroupId()); + groupUserRelDTO.setUserIds(relDTO.getUserIds()); + sysGroupRelUserService.batchAdd(groupUserRelDTO); + + } + + @Override + public void batchIncremental(Long groupId, List deviceIds) { + List groupDevices = this.list(new LambdaQueryWrapper().eq(SysRiskGroupPoint::getGroupId, groupId)); + if (CollectionUtil.isEmpty(groupDevices)) { + saveDevices(groupId, deviceIds); + } else { + List oldDevices = groupDevices.stream().map(SysRiskGroupPoint::getTargetId).collect(Collectors.toList()); + List delIds = CollectionUtil.subtractToList(oldDevices, deviceIds); + List saveDevices = CollectionUtil.subtractToList(deviceIds, oldDevices); + + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.eq(SysRiskGroupPoint::getGroupId, groupId); + delQuery.in(SysRiskGroupPoint::getTargetId, delIds); + if (CollectionUtil.isNotEmpty(delIds)) { + this.remove(delQuery); + } + saveDevices(groupId, saveDevices); + } + } + + private void saveDevices(Long groupId, List saveDevices) { + List saves = new ArrayList<>(); + for (Long deviceId : saveDevices) { + SysRiskGroupPoint sysGroupDevice = new SysRiskGroupPoint(); + sysGroupDevice.setTargetId(deviceId); + sysGroupDevice.setGroupId(groupId); + sysGroupDevice.setCreateTime(new Date()); + saves.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(saves); + } + + private void saveOrUpdateBatchList(List groupDevices) { + for (SysRiskGroupPoint groupDevice : groupDevices) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysRiskGroupPoint::getGroupId, groupDevice.getGroupId()); + query.eq(SysRiskGroupPoint::getTargetId, groupDevice.getTargetId()); + this.saveOrUpdate(groupDevice, query); + } + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java new file mode 100644 index 0000000..83cd76a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.group.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +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.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.group.dao.SysRiskGroupPointMapper; +import com.casic.missiles.modular.group.dao.SysRiskGroupRelUserMapper; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.system.dao.SysGroupRelUserMapper; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + + +/** + *

+ * 组人员管理 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysRiskGroupRelUserServiceImpl extends ServiceImpl implements ISysRiskGroupRelUserService { + @Override + public List selectSysGroupRelUserPage(Page page, QueryWrapper query) { + return this.baseMapper.selectSysGroupRelUserPage(page, query); + } + + @Transactional + @Override + public void batchAdd(GroupUserRelDTO relDTO) { + if (CollectionUtil.isEmpty(relDTO.getUserIds())) { + ServiceException serviceException = new ServiceException(500, "添加不能为空!"); + throw serviceException; + } + //删除 + QueryWrapper query = new QueryWrapper<>(); + query.eq("group_id",relDTO.getGroupId()); + this.remove(query); + //添加设备信息 + List groupDevices = new ArrayList<>(); + for (Long deviceId : relDTO.getUserIds()) { + SysRiskGroupRelUser sysGroupDevice = new SysRiskGroupRelUser(); + sysGroupDevice.setUserId(deviceId); + sysGroupDevice.setGroupId(relDTO.getGroupId()); + sysGroupDevice.setCreateTime(new Date()); + groupDevices.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(groupDevices); + } + + private void saveOrUpdateBatchList(List groupDevices) { + for (SysRiskGroupRelUser groupDevice : groupDevices) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysRiskGroupRelUser::getGroupId, groupDevice.getGroupId()); + query.eq(SysRiskGroupRelUser::getUserId, groupDevice.getUserId()); + this.saveOrUpdate(groupDevice, query); + } + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java new file mode 100644 index 0000000..b3bb9a8 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java @@ -0,0 +1,246 @@ +package com.casic.missiles.modular.group.service.impl; + +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.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.modular.data.constants.DataConstants; +import com.casic.missiles.modular.group.dao.SysUserRiskGroupMapper; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupPointService; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.tree.RiskGroupDefaultTreeBuildFactory; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + + +/** + *

+ * 用户组信息 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysUserRiskGroupServiceImpl extends ServiceImpl implements ISysUserRiskGroupService { + @Lazy + @Resource + private ISysRiskGroupPointService sysRiskGroupPointService; + private final AbstractPermissionContext abstractPermissionContext; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_USER = "2"; + private final AbstractDictService dictService; + @Lazy + @Resource + private ISysRiskGroupRelUserService relUserService; + + public SysUserRiskGroupServiceImpl(AbstractPermissionContext abstractPermissionContext, AbstractDictService dictService) { + this.abstractPermissionContext = abstractPermissionContext; + this.dictService = dictService; + } + + @Override + public List selectSysUserGroupPage(Page page, QueryWrapper query) { + //分组过滤当前权限 + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + query.in("a.dept_id", dataScope.getDeptIds()); + } + List riskGroups = this.baseMapper.selectSysUserGroupPage(page, query); + for (SysUserRiskGroup riskGroup : riskGroups) { + wrapperInfo(riskGroup); + } + return riskGroups; + } + + private void wrapperInfo(SysUserRiskGroup riskGroup) { + riskGroup.setSafeName(dictService.getDictNameByCode(DataConstants.DICT_SECRET_LEVEL_TYPE, riskGroup.getSafe() + "")); + //查询关联设备 + LambdaQueryWrapper deviceQuery = new LambdaQueryWrapper<>(); + deviceQuery.eq(SysRiskGroupPoint::getGroupId, riskGroup.getId()); + List devices = sysRiskGroupPointService.list(deviceQuery); + if (devices != null) { + List deviceList = devices.stream().map(SysRiskGroupPoint::getTargetId).collect(Collectors.toList()); + riskGroup.setPointIds(StrUtil.join(",", deviceList)); + riskGroup.setTargetNum(deviceList.size()); + } + + riskGroup.setGroupTypeName(dictService.getDictNameByCode(DataConstants.dangerAssessmentType, riskGroup.getGroupType())); + //查询关联人员 + LambdaQueryWrapper personQuery = new LambdaQueryWrapper<>(); + personQuery.eq(SysRiskGroupRelUser::getGroupId, riskGroup.getId()); + List persons = relUserService.list(personQuery); + if (persons != null) { + List personIds = persons.stream().map(SysRiskGroupRelUser::getUserId).collect(Collectors.toList()); + riskGroup.setPersonIds(StrUtil.join(",", personIds)); + } + } + + private void setGroupInfo(SysUserRiskGroup entity) { + if (StrUtil.isNotEmpty(entity.getPointIds())) { + entity.setTargetNum(StrUtil.split(entity.getPointIds(), ",").size()); + } else { + entity.setTargetNum(0); + } + } + + @Override + public boolean save(SysUserRiskGroup entity) { + AuthUser authUser = abstractPermissionContext.getAuthService().getLoginUser(); + entity.setCreateTime(new Date()); + entity.setCreateId(authUser.getId()); + if (entity.getDeptId() == null) { + entity.setDeptId(authUser.getDeptId()); + } + setGroupInfo(entity); + super.save(entity); + batchSave(entity, entity.getId()); + return true; + } + + @Override + public boolean updateById(SysUserRiskGroup entity) { + AuthUser authUser = abstractPermissionContext.getAuthService().getLoginUser(); + entity.setCreateTime(new Date()); + entity.setCreateId(authUser.getId()); + if (entity.getDeptId() == null) { + entity.setDeptId(authUser.getDeptId()); + } + setGroupInfo(entity); + super.updateById(entity); + batchSave(entity, entity.getId()); + return true; + } + + /** + * 数据转换 + * + * @param entity + * @param groupId + */ + private void batchSave(SysUserRiskGroup entity, Long groupId) { + GroupRiskRelDTO groupRelDTO = new GroupRiskRelDTO(); + groupRelDTO.setGroupId(groupId); + if (StrUtil.isNotEmpty(entity.getPointIds())) { + long[] longs = StrUtil.splitToLong(entity.getPointIds(), ","); + List devices = new ArrayList<>(); + for (long aLong : longs) { + devices.add(aLong); + } + groupRelDTO.setTargetIds(devices); + } + if (StrUtil.isNotEmpty(entity.getPersonIds())) { + List persons = new ArrayList<>(); + long[] longs = StrUtil.splitToLong(entity.getPersonIds(), ","); + + for (long aLong : longs) { + persons.add(aLong); + } + groupRelDTO.setUserIds(persons); + } + sysRiskGroupPointService.batchAdd(groupRelDTO); + } + + @Override + public List personTree() { + + //查询可见组织 + DataScope scope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + + LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { + deptQuery.in(Dept::getId, scope.getDeptIds()); + } + deptQuery.orderByAsc(Dept::getNum); + + List deptList = abstractPermissionContext.getDeptService().list(deptQuery); + List deptDTOS = new ArrayList<>(); + List rootIds = new ArrayList<>(); + Set normalIds = new HashSet<>(); + for (Dept dept : deptList) { + RiskGroupDeptDTO deptDTO = new RiskGroupDeptDTO(); + deptDTO.setPid(dept.getPid()); + deptDTO.setId(dept.getId()); + deptDTO.setFullName(dept.getFullName()); + deptDTO.setName(dept.getSimpleName()); + deptDTOS.add(deptDTO); + deptDTO.setType(NODE_TYPE_DEPT); + normalIds.add(dept.getId()); + + //挂载设备信息 + LambdaQueryWrapper deviceQuery = new LambdaQueryWrapper<>(); + deviceQuery.eq(User::getDeptId, deptDTO.getId()); + deviceQuery.eq(User::getStatus, "1"); + List deviceInfos = abstractPermissionContext.getUserService().list(deviceQuery); + + deptDTO.setChildrenNodes(deviceInfos.stream().map(this::createDeptDTO).collect(Collectors.toList())); + } + + for (RiskGroupDeptDTO deptDTO : deptDTOS) { + if (!normalIds.contains(deptDTO.getPid())) { + rootIds.add(deptDTO.getPid()); + } + } + + //过滤根节点,支持多根展示 + RiskGroupDefaultTreeBuildFactory abstractTreeBuildFactory = new RiskGroupDefaultTreeBuildFactory(); + List newTree = new ArrayList<>(); + rootIds = rootIds.stream().distinct().collect(Collectors.toList()); + for (Long rootId : rootIds) { + abstractTreeBuildFactory.setRootId(rootId + ""); + newTree.addAll(abstractTreeBuildFactory.doTreeBuild(deptDTOS)); + } + + return newTree; + } + + @Transactional + @Override + public void createSysUserGroup(SysUserRiskGroup sysUserGroup, List userIds) { + this.baseMapper.insert(sysUserGroup); + GroupUserRelDTO relDTO = new GroupUserRelDTO(); + relDTO.setGroupId(sysUserGroup.getId()); + relDTO.setUserIds(userIds); + relUserService.batchAdd(relDTO); + } + + + /** + * 创建节点 + * + * @param userInfo 用户信息 + * @return + */ + private GroupDeptDTO createDeptDTO(User userInfo) { + GroupDeptDTO deptDTO = new GroupDeptDTO(); + deptDTO.setType(NODE_TYPE_USER); + deptDTO.setId(userInfo.getId()); + deptDTO.setPid(userInfo.getDeptId()); + deptDTO.setUserDTO(userInfo); + deptDTO.setName(userInfo.getName()); + deptDTO.setFullName(userInfo.getName()); + deptDTO.setUserId(userInfo.getId() + ""); + return deptDTO; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/tree/RiskGroupDefaultTreeBuildFactory.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/tree/RiskGroupDefaultTreeBuildFactory.java new file mode 100644 index 0000000..69c18ad --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/tree/RiskGroupDefaultTreeBuildFactory.java @@ -0,0 +1,30 @@ +package com.casic.missiles.modular.group.tree; + +import com.casic.missiles.core.treebuild.DefaultTreeBuildFactory; +import com.casic.missiles.model.tree.Tree; + +import java.util.ArrayList; +import java.util.List; + +public class RiskGroupDefaultTreeBuildFactory extends DefaultTreeBuildFactory { + private String rootId; + @Override + protected List afterBuild(List nodes) { + //去掉所有的二级节点 + ArrayList results = new ArrayList<>(); + for (T node : nodes) { + if (node.getNodeParentId().equals(rootId)) { + results.add(node); + } + } + return results; + } + + public String getRootId() { + return rootId; + } + + public void setRootId(String rootId) { + this.rootId = rootId; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/RiskGroupDeptDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/RiskGroupDeptDTO.java new file mode 100644 index 0000000..7f6c157 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/RiskGroupDeptDTO.java @@ -0,0 +1,61 @@ +package com.casic.missiles.modular.group.vo; + +import com.casic.missiles.model.tree.Tree; +import com.casic.missiles.modular.device.model.RiskPointInfo; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +@Data +public class RiskGroupDeptDTO implements Tree { + @ApiModelProperty("组织主键") + private Long id; + + @ApiModelProperty("父部门ID") + private Long pid; + + @ApiModelProperty("组织简称") + private String name; + + @ApiModelProperty("组织全称") + private String fullName; + + @ApiModelProperty("子节点") + private List children = new ArrayList<>(); + + @ApiModelProperty("节点类型(1 组织 2 人员)") + private String type; + + @ApiModelProperty("用户信息") + private User userDTO; + private String userId; + private RiskPointInfo riskPointInfo; + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + @Override + public String getNodeId() { + return id + ""; + } + + @Override + public String getNodeParentId() { + return pid + ""; + } + + @Override + public void setChildrenNodes(List childrenNodes) { + children.addAll(childrenNodes); + children = children.stream().distinct().collect(Collectors.toList()); + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupPointVO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupPointVO.java new file mode 100644 index 0000000..3f6ca41 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupPointVO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.group.vo; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 风险点所属人员组对象VO + * + * @author lwh + * @date 2024-07-11 + */ +@Data +public class SysRiskGroupPointVO { + private static final long serialVersionUID = 1L; + + + @ApiModelProperty(value = "用户组ID", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备ID", dataType = "Long") + private Long targetId; + + public QueryWrapper genQuery() { + QueryWrapper query = new QueryWrapper<>(); + if (groupId != null) { + query.eq("group_id", groupId); + } + if (targetId != null) { + query.eq("target_id", targetId); + } + return query; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupRelUserVO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupRelUserVO.java new file mode 100644 index 0000000..5a95d82 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupRelUserVO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.group.vo; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 组人员管理对象VO + * + * @author lwh + * @date 2024-07-11 + */ +@Data +public class SysRiskGroupRelUserVO { + private static final long serialVersionUID = 1L; + + + @ApiModelProperty(value = "组ID", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + private Long userId; + + public QueryWrapper genQuery() { + QueryWrapper query = new QueryWrapper<>(); + if (groupId != null) { + query.eq("group_id", groupId); + } + if (userId != null) { + query.eq("user_id", userId); + } + return query; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskUserGroupVO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskUserGroupVO.java new file mode 100644 index 0000000..6363c3b --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskUserGroupVO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.group.vo; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.system.model.SysUserGroup; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 用户组信息对象VO + * + * @author lwh + * @date 2024-07-11 + */ +@Data +public class SysRiskUserGroupVO { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "用户组名称", dataType = "String") + private String groupName; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + private Long deptId; + @ApiModelProperty(value = "创建时间起始", dataType = "String") + private String startTime; + @ApiModelProperty(value = "创建时间结束", dataType = "String") + private String endTime; + @ApiModelProperty(value = "创建者ID", dataType = "Long") + private Long createId; + + public QueryWrapper genQuery() { + QueryWrapper query = new QueryWrapper<>(); + if (StrUtil.isNotEmpty(groupName)) { + query.like("a.group_name", groupName); + } + if (StrUtil.isNotEmpty(startTime)) { + query.ge("a.create_time", startTime); + } + if (StrUtil.isNotEmpty(endTime)) { + query.le("a.create_time", endTime); + } + if (deptId != null) { + query.eq("a.dept_id", deptId); + } + if (createId != null) { + query.eq("a.create_id", createId); + } + return query; + } +} diff --git a/casic-web/src/main/resources/doc/20250227.txt b/casic-web/src/main/resources/doc/20250227.txt new file mode 100644 index 0000000..daf4d4c --- /dev/null +++ b/casic-web/src/main/resources/doc/20250227.txt @@ -0,0 +1,68 @@ +1.权限配置检查 + 对应属性需配置为 security_admin + casic: + video: + admin: + role: security_admin +1.租户设定更新 + 创建租户设定角色 角色别名必须是tenantAdministrator + + 分配给管理员 需手动入库授权, sys_user表 role_id字段添加租户设定字段, + sys_ru_relation 添加用户绑定关系 + + INSERT INTO sys_tenant(ID, TENANT_NAME, TENANT_CODE, LINK_PERSON, TEL, CLEARDAY, FLAG, TS) VALUES (1, '航天二院', '001', NULL, NULL, NULL, '0', '2025-02-21 14:41:20'); + + ALTER TABLE sys_user_group ADD COLUMN tenant_id VARCHAR(64); + ALTER TABLE sys_group_device ADD COLUMN tenant_id VARCHAR(64); + ALTER TABLE sys_group_rel_user ADD COLUMN tenant_id VARCHAR(64); + ALTER TABLE device_group_info ADD COLUMN tenant_id VARCHAR(64); + update device_group_info set tenant_id = 1; + update sys_user set tenant_id = 1; + update sys_role set tenant_id = 1; + update sys_rm_relation set tenant_id = 1; + update sys_ru_relation set tenant_id = 1; + update sys_dept set tenant_id = 1; + update sys_user_group set tenant_id = 1; + update sys_group_device set tenant_id = 1; + update sys_group_rel_user set tenant_id = 1; + 添加租户ID 0 + +2.表risk_point_info 字段 secret_level值密级默认 0 设定 + +3.新增表 sys_user_risk_group sys_risk_group_rel_user sys_risk_group_point + +CREATE TABLE sys_user_risk_group +( + id numeric(20,0) NOT NULL, + group_name VARCHAR(256), + create_time date, + dept_id numeric(20,0), + create_id numeric(20,0), + description VARCHAR(256), + safe SMALLINT, + group_type SMALLINT, + tenant_id VARCHAR(64), + PRIMARY KEY (id) +); + +CREATE TABLE sys_risk_group_rel_user +( + id numeric(20,0) NOT NULL, + group_id numeric(20,0), + user_id numeric(20,0), + create_time date, + tenant_id VARCHAR(64) +); + +CREATE TABLE sys_risk_group_point +( + id numeric(20,0) NOT NULL, + group_id numeric(20,0), + create_time date, + target_id numeric(20,0), + tenant_id VARCHAR(64) +); + + + + diff --git a/casic-web/src/main/resources/doc/20250416.txt b/casic-web/src/main/resources/doc/20250416.txt new file mode 100644 index 0000000..14610e9 --- /dev/null +++ b/casic-web/src/main/resources/doc/20250416.txt @@ -0,0 +1,18 @@ +1.增加识别流开关 流媒体id 识别流国标号 + ALTER TABLE box_device_relation ADD COLUMN media_server_id VARCHAR(255); + ALTER TABLE box_device_relation ADD COLUMN recognition_gb VARCHAR(255); + ALTER TABLE box_device_relation ADD COLUMN recognition_stream_flag int; + + + + ALTER TABLE upload_log ADD COLUMN tenant_id VARCHAR(64); +2.增加字典值 mediaServerId + 对应值参考zlm中的mediaServerId 配置项 +3.更新box_device表以下字段类型为text + server_public_key + server_private_key + client_public_key + client_private_key + +4.casic.no-login-urls + 增加 /record/upload \ No newline at end of file diff --git a/casic-web/src/main/resources/doc/20250519.txt b/casic-web/src/main/resources/doc/20250519.txt new file mode 100644 index 0000000..6d70728 --- /dev/null +++ b/casic-web/src/main/resources/doc/20250519.txt @@ -0,0 +1,3 @@ +1.固定秘钥解析 + 配置项增加 + casic.client.privateKey \ No newline at end of file diff --git a/casic-web/src/main/resources/doc/20250522.md b/casic-web/src/main/resources/doc/20250522.md new file mode 100644 index 0000000..636b4df --- /dev/null +++ b/casic-web/src/main/resources/doc/20250522.md @@ -0,0 +1,80 @@ +## 一、数据库更新 + +1. 操作日志增加IP字段 + +``` +ALTER TABLE sys_operation_log ADD COLUMN IP VARCHAR(255); +``` + +2. 角色添加业务类型 + +``` +ALTER TABLE sys_role ADD COLUMN BIZ_TYPE VARCHAR(32) default 'normal' COMMENT '业务类型标识字段,用于区分不同业务模块的资源,比如三员 安全生产'; +``` + +3. 资源添加业务类型及相关字典值 + +``` +ALTER TABLE sys_resource ADD COLUMN BIZ_TYPE VARCHAR(32) default 'normal' COMMENT '业务类型标识字段,用于区分不同业务模块的资源,比如三员 安全生产'; + +INSERT INTO `sys_dict` (`ID`, `NUM`, `PID`, `NAME`, `TIPS`, `CODE`, `TENANT_ID`) VALUES (1925798590442455041, '0', 0, '业务分类', '业务分类', 'bizType', NULL); +INSERT INTO `sys_dict` (`ID`, `NUM`, `PID`, `NAME`, `TIPS`, `CODE`, `TENANT_ID`) VALUES (1925798590442455042, '0', 1925798590442455041, '普通业务', NULL, 'normal', NULL); +INSERT INTO `sys_dict` (`ID`, `NUM`, `PID`, `NAME`, `TIPS`, `CODE`, `TENANT_ID`) VALUES (1925798590505369602, '1', 1925798590442455041, '三员权限', NULL, 'audit', NULL); + +``` +系统三员角色从数据库初始化 bizType为audit 其他角色为normal +系统菜单资源数据修改,系统管理下所有菜单及按钮设置bizType为audit,其他业务功能设置为normal + +4. 增加操作审批表结构 + +CREATE TABLE sys_operation_application +( +id numeric(20,0) NOT NULL, +create_time datetime , +update_time datetime , +title varchar(255) , +json_context text , +status char(1), +operation_type varchar(64) , +operation_remark varchar(255) , +audit_remark varchar(255) , +tenant_id varchar(64) , +create_id numeric(20,0) , +audit_id numeric(20,0) , +PRIMARY KEY (id) +) + +业务操作类关系如下 +增加operationType字典 +user_add 用户新增 +user_update 用户修改 +user_delete 用户删除 +user_reset 密码重置 +user_freeze 用户冻结 +user_unfreeze 用户解冻 +user_roleAssign 用户角色分配 + +role_add 角色新增 +role_update 角色修改 +role_delete 角色删除 +role_funcAuthor 角色功能权限配置 +role_dataAuthor 角色数据权限配置 + +resource_add 资源新增 +resource_update 资源修改 +resource_delete 资源删除 + +dept_add 组织新增 +dept_update 组织修改 +dept_delete 组织删除 + +casic.tenant.excludes 配置项增加 ,sys_operation_application + +对应角色只能授权对应角色资源 +## 二、设备同步自动提取所属组织机构 +1.增加开启配置项 +casic.video.av.autoDept: true #默认开启 + + + + diff --git "a/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250113\346\225\260\346\215\256\345\272\223.txt" "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250113\346\225\260\346\215\256\345\272\223.txt" new file mode 100644 index 0000000..9b3fde9 --- /dev/null +++ "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250113\346\225\260\346\215\256\345\272\223.txt" @@ -0,0 +1,12 @@ +ALTER TABLE box_device +MODIFY COLUMN server_public_key VARCHAR(512), +MODIFY COLUMN server_private_key VARCHAR(1024), +MODIFY COLUMN client_public_key VARCHAR(512), +MODIFY COLUMN client_private_key VARCHAR(1024); + +ALTER TABLE sys_config MODIFY COLUMN VALUE TEXT; + + + +INSERT INTO sys_resource(ID, PID, CODE, P_CODE, P_CODES, NAME, ICON, URL, NUM, LEVELS, IS_MENU, TIPS, IS_OPEN, RESOURCE_TYPE, CREATE_USER, UPDATE_USER, CREATE_TIME, UPDATE_TIME, DEL_FLAG, TENANT_ID, STATUS) VALUES (1872184789440688129, 0, 'bigScreen', '0', '[0],', '安全生产智慧监管平台', '', '/bigScreen', 0, 1, '1', NULL, '0', '03', 1832137050074128386, NULL, '2024-12-26 07:36:52', NULL, '0', NULL, '0'); +INSERT INTO sys_resource(ID, PID, CODE, P_CODE, P_CODES, NAME, ICON, URL, NUM, LEVELS, IS_MENU, TIPS, IS_OPEN, RESOURCE_TYPE, CREATE_USER, UPDATE_USER, CREATE_TIME, UPDATE_TIME, DEL_FLAG, TENANT_ID, STATUS) VALUES (1879080561335627777, 105, 'sys_bsConfig', 'system', '[0],[system],', '大屏配置', 'icon-bs', '/sys/bsConfig', 0, 2, '1', NULL, '0', '03', 1832137050074128386, 1832137050074128386, '2025-01-14 08:18:12', '2025-01-14 08:25:05', '0', NULL, '0'); diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java new file mode 100644 index 0000000..1ca5eb1 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java @@ -0,0 +1,63 @@ +package com.casic.missiles.modular.device.enums; + +/** + * wvp设备类型转换 + * + * @author lwh + * @Date 2017年1月10日 下午9:54:13 + */ +public enum AvDeptEnum { + + DEPT0("0066", "801",0L), + DEPT1("0059", "699厂",1L), + DEPT2("0055", "283厂",1L), + DEPT3("0022", "201所",1L), + DEPT4("0027", "206所",1L), + DEPT5("0013", "23所",1L); + + String code; + String message; + Long deptId; + AvDeptEnum(String code, String message, Long deptId) { + this.code = code; + this.message = message; + this.deptId = deptId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public static AvDeptEnum valueOfCode(String value) { + if (value == null) { + return null; + } else { + for (AvDeptEnum ms : AvDeptEnum.values()) { + if (ms.getCode().equals(value)) { + return ms; + } + } + return null; + } + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java new file mode 100644 index 0000000..573d0e2 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.task; + +import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; + +public class Test { + public static void main(String[] args) { + System.out.println(AvStatusTypeEnum.valueOfType(new Integer(1)).getMessage()); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java new file mode 100644 index 0000000..7c06c67 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java @@ -0,0 +1,77 @@ +package com.casic.missiles.modular.device.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpSession; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class RiskSyncController extends BaseController { + @Resource + private IClientAuthService clientAuthService; + @Resource + private AbstractDeptService deptService; + @Resource + private AbstractUserService userService; + @PostMapping("/client/login") + @ResponseBody + public ResponseData login(@RequestBody RiskLoginForm deviceLoginForm, HttpSession session) { + return clientAuthService.login(deviceLoginForm, session); + } + + /** + * 全量组织信息读取 + * + * @return + */ + @PostMapping("/dept/list") + @ResponseBody + public ResponseDataDTO> dept() { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = deptService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量用户信息读取 + * + * @return + */ + @PostMapping("/user/list") + @ResponseBody + public ResponseDataDTO> user() { + //todo 此处租户拦截需移除 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量设备信息读取 + * + * @return + */ + @PostMapping("/device/list") + @ResponseBody + public ResponseDataDTO> device() { + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java new file mode 100644 index 0000000..5e5b890 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class UserSyncController extends BaseController { + + @Resource + private IBusDeviceInfoService busDeviceInfoService; + + /** + * 登录用户授权设备权限查看 + * @return + */ + @GetMapping("/device/permissions") + @ResponseBody + public ResponseDataDTO> devicePermissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } + + /** + * 登录用户风险点授权查询 + * @return + */ + @GetMapping("/permissions") + @ResponseBody + public ResponseDataDTO> permissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java new file mode 100644 index 0000000..07b8df8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +/** + * 设备登录接口 + */ +@Data +public class RiskLoginForm { + /** + * 设备编码 + */ + private String clientId; + + /** + * 时间戳 + */ + private Long time; + + /** + * 加密后数据 加密格式sn+时间戳 时效性为6小时 + */ + private String secret; + + /** + * 设备登录注册IP + */ + private String ip; + + /** + * 设备登录注册port + */ + private String port; +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java new file mode 100644 index 0000000..40fdb4b --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.device.service; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; + +import javax.servlet.http.HttpSession; + +public interface IClientAuthService { + /** + * @param deviceLoginForm + * @param session + * @return + */ + ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session); +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java new file mode 100644 index 0000000..576e857 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.device.service.impl; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import cn.hutool.jwt.JWT; +import cn.hutool.jwt.JWTUtil; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.util.IRiskCacheUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpSession; +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Service +public class ClientAuthServiceImpl implements IClientAuthService { + @Value("${casic.client.privateKey:MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALKcwHHOg0F6Zkq7GOVnOnTgvH9vSPXFFTOcEqOVBIBPBz7UNrEGkp1PhZ+oC4WVJAsDuot2e1fDZy9QS9HF92MmnYp9kuQRhGZjHctPnVZ0Kai5BES0ytHqPeauLyNXxOOS0YKYEUwpft4Z5Azw7bj3JWNvLrnTZvNld6FDvTslAgMBAAECgYAqN/kZLYpC+O6i7XSmDO95XwHPUXu6dDpdt5+EQR4OQh/hTwIaeAZB3uEj6vHGQomBfQEkI/5lsU97lIxHanbd+Hro7JyIhsGD5LR5XnZHVKzFiZW62OIU6FI9dlQNN8miiblnmyDwiMA3okaHl0O7qQjZ+IvY2csgmJc7AXpPpQJBAOhrhcfWFcgffj2O6HYNlBLFfbboc/ZzrEADDXKnxRSHlo5o8W+6gylG/L2NGtbag5S68B9VYzdkSQ1++5C+Ws8CQQDEu7h311PLEiKgqzGHpjzadQETmt/jMadaKQmT0TZwNVi6X8lR17U5hF8dAqZzUzr9kUC0HRIZhg4Uv1v3W3fLAkB4YPhxgJjXhjhEefg87Nt8vX1Xdx5Yz6CvpuUYNX0GHRQFvqUOUXQNtQ7CvorgLV1pc0lbcUZqMi8EJnj1hyJRAkEAjHXWm8GiMt+M15fCsi3vTq2xChVOekBuUsHv85iwvGZqJg7ThtpyqlEnM2g7/STUfkvhnXcQACclEI0blTy6BwJAPmFyhU+d0ejVpbc53TdrL2HqYYUHi/tTy/dtUa7lbypzdwwJ2M1Tv5PE8sQxr9tgMbebfxVb/RFKdiCCtzC4ng==}") + private String privateKey; + + @Override + public ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session) { + //固定秘钥解析 + try { + String str = RSAUtils.decrypt(deviceLoginForm.getSecret(), privateKey); + Long time = Long.valueOf(StrUtil.split(str, "_").get(1)); + //边缘盒子时差与服务时差不可超过24小时 + if (time == null || System.currentTimeMillis() - time > 3600 * 24 * 1000) { + return ResponseData.error("请求时间超时"); + } + deviceLoginForm.setTime(time); + } catch (Exception e) { + e.printStackTrace(); + return ResponseData.error("设备解析异常!"); + } + + try { + String token = this.createJwtToken(deviceLoginForm); + IRiskCacheUtil.put(token, token); + return ResponseData.success(token); + } catch (Exception e) { + log.error("设备登录异常:{}", e.getMessage()); + return ResponseData.error("登录异常,请联系管理员"); + } +} + /** + * token创建 + * + * @param loginForm 登录信息 + * @param device 设备信息 + * @return + * @throws Exception + */ + public String createJwtToken(RiskLoginForm loginForm) throws Exception { + Map payload = new HashMap<>(); + payload.put("clientId", loginForm.getClientId()); // 设备编号 + payload.put("time", loginForm.getTime()); // 请求时间 + + //RSA 解密 + String str = RSAUtils.decrypt(loginForm.getSecret(), privateKey); + String key = loginForm.getClientId()+"_" + loginForm.getTime() ; + if (!key.equals(str)) { + //秘钥验证失败 + throw new ServiceException(500,"秘钥验证失败"); + } + +// long exp = new Date().getTime() + 2 * 3600000; // 2小时后的时间戳 +// payload.put("exp", exp); + + // 创建JWT + String jwt = JWTUtil.createToken(payload, "token-203-202405".getBytes()); + + return jwt; + } + + /** + * token解析 + * + * @param jwtStr token + * @return + * @throws Exception + */ + public static RiskLoginForm parseToken(String jwtStr){ + JWT jwtObj = new JWTUtil().parseToken(jwtStr); + RiskLoginForm deviceLoginForm = new RiskLoginForm(); + deviceLoginForm.setClientId(Convert.toStr(jwtObj.getPayload("clientId"))); + return deviceLoginForm; + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java new file mode 100644 index 0000000..0e91ac8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.util; +import cn.hutool.cache.Cache; +import cn.hutool.cache.CacheUtil; +/** + * token有效 + */ +public class IRiskCacheUtil { + /** + * 1小时内不活跃 会踢掉 + */ + private static Cache fifoCache = CacheUtil.newFIFOCache(1000, 1000 * 60 * 60); + + public static void put(String key, String value) { + fifoCache.put(key, value); + } + + public static String get(String key) { + return fifoCache.get(key); + } + + public static void remove(String key) { + fifoCache.remove(key); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java new file mode 100644 index 0000000..805c32a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceGroupDict extends AbstractDictMap { + + @Override + public void init() { + //检索条件 + put("groupName", "分组名称"); + put("startTime", "起始时间"); + put("endTime", "结束时间"); + //新增修改属性 + put("cameraIds", "设备国标号"); + put("personIds", "人员主键集合"); + put("description","备注"); + put("id","主键"); + put("ids","主键集合"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java new file mode 100644 index 0000000..895fbd9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceQueryDict extends AbstractDictMap { + + @Override + public void init() { + put("devType", "类型查询"); + put("keyword", "设备名称"); + put("deptName", "所属单位"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java new file mode 100644 index 0000000..88da6df --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.device.util; + +public class DeviceScopeUtil { +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java new file mode 100644 index 0000000..2e3e478 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.device.controller; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.auth.dto.DeviceLoginForm; +import com.casic.missiles.modular.auth.util.ICacheUtil; +import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; +import com.casic.missiles.modular.device.service.IAlarmRecordService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +@Api(tags = "告警记录") +@RestController +@RequestMapping("/record") +public class AlarmUploadController extends BaseController { + + private final IAlarmRecordService alarmRecordService; + private final IDeviceAuthService deviceAuthService; + public AlarmUploadController(IAlarmRecordService alarmRecordService, IDeviceAuthService deviceAuthService) { + this.alarmRecordService = alarmRecordService; + this.deviceAuthService = deviceAuthService; + } + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } + @BussinessLog(value = "告警记录上报接口") + @ApiOperation(value = "告警记录上报接口") + @PostMapping(value = "/upload") + public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return createAuthError(); + } + alarmRecordService.upload(alarmRecord); + return ResponseDataDTO.success(); + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java new file mode 100644 index 0000000..3f1c189 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class RecognitionStreamDTO { + private Long id; + private String recognitionStreamFlag; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java new file mode 100644 index 0000000..fa5ae4a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java @@ -0,0 +1,167 @@ +package com.casic.missiles.modular.group.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IRiskPointInfoService; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.group.vo.SysRiskGroupPointVO; +import com.casic.missiles.modular.group.vo.SysRiskGroupRelUserVO; +import com.casic.missiles.modular.group.vo.SysRiskUserGroupVO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import com.casic.missiles.modular.system.vo.SysGroupRelUserVO; +import com.casic.missiles.modular.system.vo.SysUserGroupVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.ibatis.annotations.Param; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; + +/** + * 风险点组信息Controller + * + * @author lwh + * @date 2024-07-11 + */ +@Api(tags = "风险点组信息") +@RestController +@RequestMapping("/sys/risk/group") +public class SysUserRiskGroupController extends BaseController { + private final IRiskPointInfoService riskPointInfoService; + private final ISysUserRiskGroupService sysUserGroupService; + private final AbstractPermissionContext permissionContext; + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysUserRiskGroupController(IRiskPointInfoService riskPointInfoService, ISysUserRiskGroupService sysUserGroupService, AbstractPermissionContext permissionContext, ISysRiskGroupRelUserService sysGroupRelUserService) { + this.riskPointInfoService = riskPointInfoService; + this.sysUserGroupService = sysUserGroupService; + this.permissionContext = permissionContext; + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @BussinessLog(value = "风险点分组查询") + @ApiOperation(value = "风险点分组查询", hidden = true) + @GetMapping(value = "/list") + public ResponseDataDTO> list(SysRiskUserGroupVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysUserGroupService.list(query)); + } + + @BussinessLog(value = "分组人员列表查询") + @ApiOperation(value = "分组人员列表查询") + @GetMapping(value = "/groupUserList") + public ResponseDataDTO> groupUserList(SysRiskGroupRelUserVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysGroupRelUserService.list(query)); + } + + @BussinessLog(value = "风险点分组人员查询") + @ApiOperation(value = "风险点分组人员分页查询") + @GetMapping(value = "/groupUserPage") + public ResponseDataDTO> listPage(SysRiskGroupRelUserVO sysGroupRelUserVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysGroupRelUserVO.genQuery(); + List relUsers = sysGroupRelUserService.selectSysGroupRelUserPage(page, query); + page.setRecords(relUsers); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "用户分组批量新增") + @ApiOperation(value = "批量新增接口") + @PostMapping(value = "/batch-add") + public ResponseDataDTO batchAdd(@RequestBody GroupUserRelDTO relDTO) { + sysGroupRelUserService.batchAdd(relDTO); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组人员删除") + @ApiOperation(value = "用户组人员删除接口") + @GetMapping(value = "/user/delete") + public ResponseDataDTO userDel(@Param("用户组人员关联主键") String id) { + sysGroupRelUserService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "风险点分组分页查询") + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(SysRiskUserGroupVO sysUserGroupVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysUserGroupVO.genQuery(); + + List sysUserGroups = sysUserGroupService.selectSysUserGroupPage(page, query); + page.setRecords(sysUserGroups); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "风险点分组新增") + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.save(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组修改") + @ApiOperation(value = "修改接口") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.updateById(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组删除") + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + sysUserGroupService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "批量删除") + @ApiOperation(value = "批量删除", hidden = true) + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + sysUserGroupService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "详情查询") + @ApiOperation(value = "详情查询", hidden = true) + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(sysUserGroupService.getById(id)); + } + + @BussinessLog(value = "用户树") + @ApiOperation(value = "用户树查询") + @GetMapping(value = "/person/tree") + public ResponseDataDTO> personTree() { + return ResponseDataDTO.success(sysUserGroupService.personTree()); + } + + @BussinessLog(value = "风险点树查询") + @ApiOperation(value = "风险点树查询") + @GetMapping(value = "/tree") + public ResponseDataDTO> tree(String riskType) { + return ResponseDataDTO.success(riskPointInfoService.tree(riskType)); + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java new file mode 100644 index 0000000..419eb27 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备所属人员组 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupPointMapper extends BaseMapper { +/** +* 设备所属人员组 分页检索 +*/ +List selectSysGroupDevicePage(@Param("page") Page page, @Param("ew" ) QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java new file mode 100644 index 0000000..eb41227 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 组人员管理 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupRelUserMapper extends BaseMapper { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java new file mode 100644 index 0000000..e8352df --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.system.model.SysUserGroup; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 用户组信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysUserRiskGroupMapper extends BaseMapper { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml new file mode 100644 index 0000000..6fa6a4d --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + id , + group_id as groupId , + create_time as createTime , + target_Id as targetId + + + a.id , + a.group_id + as groupId , + a.create_time + as createTime , + a.target_Id + as targetId + + + + + + and group_id = #{request.groupId} + + + and device_id = #{request.deviceId} + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml new file mode 100644 index 0000000..a627546 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + id , + group_id as groupId , + user_id as userId , + create_time as createTime + + + a.id, + a.group_id + as groupId , + a.user_id + as userId , + a.create_time + as createTime + + + + + + and group_id = #{request.groupId} + + + and user_id = #{request.userId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml new file mode 100644 index 0000000..3245136 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + id, + group_name as groupName , + create_time as createTime , + dept_id as deptId , + create_id as createId + + + a.id,a.group_name as groupName , + a.create_time + as createTime , + a.dept_id + as deptId , + a.create_id + as createId,a.description + + + + + + and group_name like concat('%',#{request.groupName},'%') + + + and dept_id = #{request.deptId} + + + and create_id = #{request.createId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java new file mode 100644 index 0000000..e44328f --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class GroupRiskRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("风险点集合") + private List targetIds; + @ApiModelProperty("用户ID集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java new file mode 100644 index 0000000..f8758bf --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class RiskGroupUserRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("设备集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java new file mode 100644 index 0000000..b386d5b --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java @@ -0,0 +1,53 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 风险点所属组 sys_risk_group_point + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_risk_group_point") +public class SysRiskGroupPoint extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableId("id") + private Long id; + + @ApiModelProperty(value = "用户组ID", dataType = "Long") + @TableField("group_id") + private Long groupId; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty(value = "风险点ID", dataType = "Long") + @TableField("target_id") + private Long targetId; + + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; + + @Override + public String toString() { + return "SysGroupDevice{" + + "id=" + id + + "groupId=" + groupId + + "createTime=" + createTime + + "targetId=" + targetId + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java new file mode 100644 index 0000000..949caa3 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java @@ -0,0 +1,55 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 组人员管理对象 sys_group_rel_user + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_risk_group_rel_user") +public class SysRiskGroupRelUser extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + + @ApiModelProperty(value = "组ID", dataType = "Long") + @TableField("group_id") + private Long groupId; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + @TableField("user_id") + private Long userId; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + @ApiModelProperty(value = "用户姓名", dataType = "String") + @TableField(exist = false) + private String realName; + + @ApiModelProperty(value = "用户名", dataType = "String") + @TableField(exist = false) + private String account; + + @Override + public String toString() { + return "SysGroupRelUser{" + + "id=" + id + + "groupId=" + groupId + + "userId=" + userId + + "createTime=" + createTime + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java new file mode 100644 index 0000000..1b73dc0 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java @@ -0,0 +1,97 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 危险点分组组信息对象 sys_user_risk_group + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_user_risk_group") +public class SysUserRiskGroup extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableId("id") + private Long id; + + @ApiModelProperty(value = "组名称", dataType = "String", required = true) + @TableField("group_name") + private String groupName; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty(value = "所属组织(保留字段)", dataType = "Long") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty(value = "描述信息", dataType = "String") + @TableField("description") + private String description; + + @ApiModelProperty(value = "密级字典", dataType = "String") + @TableField("safe") + private int safe; + + @ApiModelProperty(value = "创建者ID", dataType = "Long") + @TableField("create_id") + private Long createId; + + + @ApiModelProperty(value = "类型(1 危险点 2 重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "Long") + @TableField("group_type") + private String groupType; + @TableField(exist = false) + private String groupTypeName; + /** + * 风险点集合 + */ + @ApiModelProperty(value = "风险点集合(逗号拼接)", dataType = "String") + @TableField(exist = false) + private String pointIds; + + @ApiModelProperty(value = "数量", dataType = "Long") + @TableField(exist = false) + private Integer targetNum; + /** + * 用户集合 + */ + @ApiModelProperty(value = "用户集合(逗号拼接)", dataType = "String") + @TableField(exist = false) + private String personIds; + + @ApiModelProperty(value = "用户名称", dataType = "String") + @TableField(exist = false) + private String realName; + + @ApiModelProperty(value = "用户名", dataType = "String") + @TableField(exist = false) + private String account; + + @ApiModelProperty(value = "密级字典名称", dataType = "String") + @TableField(exist = false) + private String safeName; + + @Override + public String toString() { + return "SysUserGroup{" + + "id=" + id + + "groupName=" + groupName + + "createTime=" + createTime + + "deptId=" + deptId + + "createId=" + createId + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java new file mode 100644 index 0000000..4657ce4 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.device.dto.GroupRelDTO; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; + +import java.util.List; + + +/** + *

+ * 设备所属人员组 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysRiskGroupPointService extends IService { + /** + * 设备所属人员组 分页检索 + */ + List selectSysGroupDevicePage(Page page, QueryWrapper query); + + /** + * 设备组批量新增 + * + * @param relDTO + */ + void batchAdd(GroupRiskRelDTO relDTO); + + + /** + * 增量更新 + * @param groupId + * @param deviceIds + */ + void batchIncremental(Long groupId, List deviceIds); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java new file mode 100644 index 0000000..591eef2 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; + +import java.util.List; + + +/** + *

+ * 组人员管理 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysRiskGroupRelUserService extends IService { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(Page page, QueryWrapper query); + + void batchAdd(GroupUserRelDTO relDTO); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java new file mode 100644 index 0000000..1e0889c --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; + +import java.util.List; + + +/** + *

+ * 用户组信息 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysUserRiskGroupService extends IService { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(Page page, QueryWrapper query); + + List personTree(); + + /** + * 创建用户组 + * + * @param sysUserGroup 用户组信息 + * @param userIds 用户信息 + */ + void createSysUserGroup(SysUserRiskGroup sysUserGroup, List userIds); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java new file mode 100644 index 0000000..6839887 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java @@ -0,0 +1,118 @@ +package com.casic.missiles.modular.group.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +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.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.group.dao.SysRiskGroupPointMapper; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import com.casic.missiles.modular.group.service.ISysRiskGroupPointService; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + + +/** + *

+ * 设备所属人员组 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysRiskGroupPointServiceImpl extends ServiceImpl implements ISysRiskGroupPointService { + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysRiskGroupPointServiceImpl(ISysRiskGroupRelUserService sysGroupRelUserService) { + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @Override + public List selectSysGroupDevicePage(Page page, QueryWrapper query) { + return this.baseMapper.selectSysGroupDevicePage(page, query); + } + + @Transactional + @Override + public void batchAdd(GroupRiskRelDTO relDTO) { + + if (CollectionUtil.isEmpty(relDTO.getTargetIds())) { + ServiceException serviceException = new ServiceException(500, "添加不能为空!"); + throw serviceException; + } + + //删除 + QueryWrapper query = new QueryWrapper<>(); + query.eq("group_id", relDTO.getGroupId()); + this.remove(query); + + //保存分组与危险点对应关系 + List groupDevices = new ArrayList<>(); + for (Long deviceId : relDTO.getTargetIds()) { + SysRiskGroupPoint sysGroupDevice = new SysRiskGroupPoint(); + sysGroupDevice.setTargetId(deviceId); + sysGroupDevice.setGroupId(relDTO.getGroupId()); + sysGroupDevice.setCreateTime(new Date()); + groupDevices.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(groupDevices); + + //批量保存风险点与用户关系 + GroupUserRelDTO groupUserRelDTO = new GroupUserRelDTO(); + groupUserRelDTO.setGroupId(relDTO.getGroupId()); + groupUserRelDTO.setUserIds(relDTO.getUserIds()); + sysGroupRelUserService.batchAdd(groupUserRelDTO); + + } + + @Override + public void batchIncremental(Long groupId, List deviceIds) { + List groupDevices = this.list(new LambdaQueryWrapper().eq(SysRiskGroupPoint::getGroupId, groupId)); + if (CollectionUtil.isEmpty(groupDevices)) { + saveDevices(groupId, deviceIds); + } else { + List oldDevices = groupDevices.stream().map(SysRiskGroupPoint::getTargetId).collect(Collectors.toList()); + List delIds = CollectionUtil.subtractToList(oldDevices, deviceIds); + List saveDevices = CollectionUtil.subtractToList(deviceIds, oldDevices); + + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.eq(SysRiskGroupPoint::getGroupId, groupId); + delQuery.in(SysRiskGroupPoint::getTargetId, delIds); + if (CollectionUtil.isNotEmpty(delIds)) { + this.remove(delQuery); + } + saveDevices(groupId, saveDevices); + } + } + + private void saveDevices(Long groupId, List saveDevices) { + List saves = new ArrayList<>(); + for (Long deviceId : saveDevices) { + SysRiskGroupPoint sysGroupDevice = new SysRiskGroupPoint(); + sysGroupDevice.setTargetId(deviceId); + sysGroupDevice.setGroupId(groupId); + sysGroupDevice.setCreateTime(new Date()); + saves.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(saves); + } + + private void saveOrUpdateBatchList(List groupDevices) { + for (SysRiskGroupPoint groupDevice : groupDevices) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysRiskGroupPoint::getGroupId, groupDevice.getGroupId()); + query.eq(SysRiskGroupPoint::getTargetId, groupDevice.getTargetId()); + this.saveOrUpdate(groupDevice, query); + } + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java new file mode 100644 index 0000000..83cd76a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.group.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +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.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.group.dao.SysRiskGroupPointMapper; +import com.casic.missiles.modular.group.dao.SysRiskGroupRelUserMapper; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.system.dao.SysGroupRelUserMapper; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + + +/** + *

+ * 组人员管理 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysRiskGroupRelUserServiceImpl extends ServiceImpl implements ISysRiskGroupRelUserService { + @Override + public List selectSysGroupRelUserPage(Page page, QueryWrapper query) { + return this.baseMapper.selectSysGroupRelUserPage(page, query); + } + + @Transactional + @Override + public void batchAdd(GroupUserRelDTO relDTO) { + if (CollectionUtil.isEmpty(relDTO.getUserIds())) { + ServiceException serviceException = new ServiceException(500, "添加不能为空!"); + throw serviceException; + } + //删除 + QueryWrapper query = new QueryWrapper<>(); + query.eq("group_id",relDTO.getGroupId()); + this.remove(query); + //添加设备信息 + List groupDevices = new ArrayList<>(); + for (Long deviceId : relDTO.getUserIds()) { + SysRiskGroupRelUser sysGroupDevice = new SysRiskGroupRelUser(); + sysGroupDevice.setUserId(deviceId); + sysGroupDevice.setGroupId(relDTO.getGroupId()); + sysGroupDevice.setCreateTime(new Date()); + groupDevices.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(groupDevices); + } + + private void saveOrUpdateBatchList(List groupDevices) { + for (SysRiskGroupRelUser groupDevice : groupDevices) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysRiskGroupRelUser::getGroupId, groupDevice.getGroupId()); + query.eq(SysRiskGroupRelUser::getUserId, groupDevice.getUserId()); + this.saveOrUpdate(groupDevice, query); + } + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java new file mode 100644 index 0000000..b3bb9a8 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java @@ -0,0 +1,246 @@ +package com.casic.missiles.modular.group.service.impl; + +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.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.modular.data.constants.DataConstants; +import com.casic.missiles.modular.group.dao.SysUserRiskGroupMapper; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupPointService; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.tree.RiskGroupDefaultTreeBuildFactory; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + + +/** + *

+ * 用户组信息 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysUserRiskGroupServiceImpl extends ServiceImpl implements ISysUserRiskGroupService { + @Lazy + @Resource + private ISysRiskGroupPointService sysRiskGroupPointService; + private final AbstractPermissionContext abstractPermissionContext; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_USER = "2"; + private final AbstractDictService dictService; + @Lazy + @Resource + private ISysRiskGroupRelUserService relUserService; + + public SysUserRiskGroupServiceImpl(AbstractPermissionContext abstractPermissionContext, AbstractDictService dictService) { + this.abstractPermissionContext = abstractPermissionContext; + this.dictService = dictService; + } + + @Override + public List selectSysUserGroupPage(Page page, QueryWrapper query) { + //分组过滤当前权限 + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + query.in("a.dept_id", dataScope.getDeptIds()); + } + List riskGroups = this.baseMapper.selectSysUserGroupPage(page, query); + for (SysUserRiskGroup riskGroup : riskGroups) { + wrapperInfo(riskGroup); + } + return riskGroups; + } + + private void wrapperInfo(SysUserRiskGroup riskGroup) { + riskGroup.setSafeName(dictService.getDictNameByCode(DataConstants.DICT_SECRET_LEVEL_TYPE, riskGroup.getSafe() + "")); + //查询关联设备 + LambdaQueryWrapper deviceQuery = new LambdaQueryWrapper<>(); + deviceQuery.eq(SysRiskGroupPoint::getGroupId, riskGroup.getId()); + List devices = sysRiskGroupPointService.list(deviceQuery); + if (devices != null) { + List deviceList = devices.stream().map(SysRiskGroupPoint::getTargetId).collect(Collectors.toList()); + riskGroup.setPointIds(StrUtil.join(",", deviceList)); + riskGroup.setTargetNum(deviceList.size()); + } + + riskGroup.setGroupTypeName(dictService.getDictNameByCode(DataConstants.dangerAssessmentType, riskGroup.getGroupType())); + //查询关联人员 + LambdaQueryWrapper personQuery = new LambdaQueryWrapper<>(); + personQuery.eq(SysRiskGroupRelUser::getGroupId, riskGroup.getId()); + List persons = relUserService.list(personQuery); + if (persons != null) { + List personIds = persons.stream().map(SysRiskGroupRelUser::getUserId).collect(Collectors.toList()); + riskGroup.setPersonIds(StrUtil.join(",", personIds)); + } + } + + private void setGroupInfo(SysUserRiskGroup entity) { + if (StrUtil.isNotEmpty(entity.getPointIds())) { + entity.setTargetNum(StrUtil.split(entity.getPointIds(), ",").size()); + } else { + entity.setTargetNum(0); + } + } + + @Override + public boolean save(SysUserRiskGroup entity) { + AuthUser authUser = abstractPermissionContext.getAuthService().getLoginUser(); + entity.setCreateTime(new Date()); + entity.setCreateId(authUser.getId()); + if (entity.getDeptId() == null) { + entity.setDeptId(authUser.getDeptId()); + } + setGroupInfo(entity); + super.save(entity); + batchSave(entity, entity.getId()); + return true; + } + + @Override + public boolean updateById(SysUserRiskGroup entity) { + AuthUser authUser = abstractPermissionContext.getAuthService().getLoginUser(); + entity.setCreateTime(new Date()); + entity.setCreateId(authUser.getId()); + if (entity.getDeptId() == null) { + entity.setDeptId(authUser.getDeptId()); + } + setGroupInfo(entity); + super.updateById(entity); + batchSave(entity, entity.getId()); + return true; + } + + /** + * 数据转换 + * + * @param entity + * @param groupId + */ + private void batchSave(SysUserRiskGroup entity, Long groupId) { + GroupRiskRelDTO groupRelDTO = new GroupRiskRelDTO(); + groupRelDTO.setGroupId(groupId); + if (StrUtil.isNotEmpty(entity.getPointIds())) { + long[] longs = StrUtil.splitToLong(entity.getPointIds(), ","); + List devices = new ArrayList<>(); + for (long aLong : longs) { + devices.add(aLong); + } + groupRelDTO.setTargetIds(devices); + } + if (StrUtil.isNotEmpty(entity.getPersonIds())) { + List persons = new ArrayList<>(); + long[] longs = StrUtil.splitToLong(entity.getPersonIds(), ","); + + for (long aLong : longs) { + persons.add(aLong); + } + groupRelDTO.setUserIds(persons); + } + sysRiskGroupPointService.batchAdd(groupRelDTO); + } + + @Override + public List personTree() { + + //查询可见组织 + DataScope scope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + + LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { + deptQuery.in(Dept::getId, scope.getDeptIds()); + } + deptQuery.orderByAsc(Dept::getNum); + + List deptList = abstractPermissionContext.getDeptService().list(deptQuery); + List deptDTOS = new ArrayList<>(); + List rootIds = new ArrayList<>(); + Set normalIds = new HashSet<>(); + for (Dept dept : deptList) { + RiskGroupDeptDTO deptDTO = new RiskGroupDeptDTO(); + deptDTO.setPid(dept.getPid()); + deptDTO.setId(dept.getId()); + deptDTO.setFullName(dept.getFullName()); + deptDTO.setName(dept.getSimpleName()); + deptDTOS.add(deptDTO); + deptDTO.setType(NODE_TYPE_DEPT); + normalIds.add(dept.getId()); + + //挂载设备信息 + LambdaQueryWrapper deviceQuery = new LambdaQueryWrapper<>(); + deviceQuery.eq(User::getDeptId, deptDTO.getId()); + deviceQuery.eq(User::getStatus, "1"); + List deviceInfos = abstractPermissionContext.getUserService().list(deviceQuery); + + deptDTO.setChildrenNodes(deviceInfos.stream().map(this::createDeptDTO).collect(Collectors.toList())); + } + + for (RiskGroupDeptDTO deptDTO : deptDTOS) { + if (!normalIds.contains(deptDTO.getPid())) { + rootIds.add(deptDTO.getPid()); + } + } + + //过滤根节点,支持多根展示 + RiskGroupDefaultTreeBuildFactory abstractTreeBuildFactory = new RiskGroupDefaultTreeBuildFactory(); + List newTree = new ArrayList<>(); + rootIds = rootIds.stream().distinct().collect(Collectors.toList()); + for (Long rootId : rootIds) { + abstractTreeBuildFactory.setRootId(rootId + ""); + newTree.addAll(abstractTreeBuildFactory.doTreeBuild(deptDTOS)); + } + + return newTree; + } + + @Transactional + @Override + public void createSysUserGroup(SysUserRiskGroup sysUserGroup, List userIds) { + this.baseMapper.insert(sysUserGroup); + GroupUserRelDTO relDTO = new GroupUserRelDTO(); + relDTO.setGroupId(sysUserGroup.getId()); + relDTO.setUserIds(userIds); + relUserService.batchAdd(relDTO); + } + + + /** + * 创建节点 + * + * @param userInfo 用户信息 + * @return + */ + private GroupDeptDTO createDeptDTO(User userInfo) { + GroupDeptDTO deptDTO = new GroupDeptDTO(); + deptDTO.setType(NODE_TYPE_USER); + deptDTO.setId(userInfo.getId()); + deptDTO.setPid(userInfo.getDeptId()); + deptDTO.setUserDTO(userInfo); + deptDTO.setName(userInfo.getName()); + deptDTO.setFullName(userInfo.getName()); + deptDTO.setUserId(userInfo.getId() + ""); + return deptDTO; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/tree/RiskGroupDefaultTreeBuildFactory.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/tree/RiskGroupDefaultTreeBuildFactory.java new file mode 100644 index 0000000..69c18ad --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/tree/RiskGroupDefaultTreeBuildFactory.java @@ -0,0 +1,30 @@ +package com.casic.missiles.modular.group.tree; + +import com.casic.missiles.core.treebuild.DefaultTreeBuildFactory; +import com.casic.missiles.model.tree.Tree; + +import java.util.ArrayList; +import java.util.List; + +public class RiskGroupDefaultTreeBuildFactory extends DefaultTreeBuildFactory { + private String rootId; + @Override + protected List afterBuild(List nodes) { + //去掉所有的二级节点 + ArrayList results = new ArrayList<>(); + for (T node : nodes) { + if (node.getNodeParentId().equals(rootId)) { + results.add(node); + } + } + return results; + } + + public String getRootId() { + return rootId; + } + + public void setRootId(String rootId) { + this.rootId = rootId; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/RiskGroupDeptDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/RiskGroupDeptDTO.java new file mode 100644 index 0000000..7f6c157 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/RiskGroupDeptDTO.java @@ -0,0 +1,61 @@ +package com.casic.missiles.modular.group.vo; + +import com.casic.missiles.model.tree.Tree; +import com.casic.missiles.modular.device.model.RiskPointInfo; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +@Data +public class RiskGroupDeptDTO implements Tree { + @ApiModelProperty("组织主键") + private Long id; + + @ApiModelProperty("父部门ID") + private Long pid; + + @ApiModelProperty("组织简称") + private String name; + + @ApiModelProperty("组织全称") + private String fullName; + + @ApiModelProperty("子节点") + private List children = new ArrayList<>(); + + @ApiModelProperty("节点类型(1 组织 2 人员)") + private String type; + + @ApiModelProperty("用户信息") + private User userDTO; + private String userId; + private RiskPointInfo riskPointInfo; + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + @Override + public String getNodeId() { + return id + ""; + } + + @Override + public String getNodeParentId() { + return pid + ""; + } + + @Override + public void setChildrenNodes(List childrenNodes) { + children.addAll(childrenNodes); + children = children.stream().distinct().collect(Collectors.toList()); + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupPointVO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupPointVO.java new file mode 100644 index 0000000..3f6ca41 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupPointVO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.group.vo; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 风险点所属人员组对象VO + * + * @author lwh + * @date 2024-07-11 + */ +@Data +public class SysRiskGroupPointVO { + private static final long serialVersionUID = 1L; + + + @ApiModelProperty(value = "用户组ID", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备ID", dataType = "Long") + private Long targetId; + + public QueryWrapper genQuery() { + QueryWrapper query = new QueryWrapper<>(); + if (groupId != null) { + query.eq("group_id", groupId); + } + if (targetId != null) { + query.eq("target_id", targetId); + } + return query; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupRelUserVO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupRelUserVO.java new file mode 100644 index 0000000..5a95d82 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupRelUserVO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.group.vo; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 组人员管理对象VO + * + * @author lwh + * @date 2024-07-11 + */ +@Data +public class SysRiskGroupRelUserVO { + private static final long serialVersionUID = 1L; + + + @ApiModelProperty(value = "组ID", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + private Long userId; + + public QueryWrapper genQuery() { + QueryWrapper query = new QueryWrapper<>(); + if (groupId != null) { + query.eq("group_id", groupId); + } + if (userId != null) { + query.eq("user_id", userId); + } + return query; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskUserGroupVO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskUserGroupVO.java new file mode 100644 index 0000000..6363c3b --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskUserGroupVO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.group.vo; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.system.model.SysUserGroup; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 用户组信息对象VO + * + * @author lwh + * @date 2024-07-11 + */ +@Data +public class SysRiskUserGroupVO { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "用户组名称", dataType = "String") + private String groupName; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + private Long deptId; + @ApiModelProperty(value = "创建时间起始", dataType = "String") + private String startTime; + @ApiModelProperty(value = "创建时间结束", dataType = "String") + private String endTime; + @ApiModelProperty(value = "创建者ID", dataType = "Long") + private Long createId; + + public QueryWrapper genQuery() { + QueryWrapper query = new QueryWrapper<>(); + if (StrUtil.isNotEmpty(groupName)) { + query.like("a.group_name", groupName); + } + if (StrUtil.isNotEmpty(startTime)) { + query.ge("a.create_time", startTime); + } + if (StrUtil.isNotEmpty(endTime)) { + query.le("a.create_time", endTime); + } + if (deptId != null) { + query.eq("a.dept_id", deptId); + } + if (createId != null) { + query.eq("a.create_id", createId); + } + return query; + } +} diff --git a/casic-web/src/main/resources/doc/20250227.txt b/casic-web/src/main/resources/doc/20250227.txt new file mode 100644 index 0000000..daf4d4c --- /dev/null +++ b/casic-web/src/main/resources/doc/20250227.txt @@ -0,0 +1,68 @@ +1.权限配置检查 + 对应属性需配置为 security_admin + casic: + video: + admin: + role: security_admin +1.租户设定更新 + 创建租户设定角色 角色别名必须是tenantAdministrator + + 分配给管理员 需手动入库授权, sys_user表 role_id字段添加租户设定字段, + sys_ru_relation 添加用户绑定关系 + + INSERT INTO sys_tenant(ID, TENANT_NAME, TENANT_CODE, LINK_PERSON, TEL, CLEARDAY, FLAG, TS) VALUES (1, '航天二院', '001', NULL, NULL, NULL, '0', '2025-02-21 14:41:20'); + + ALTER TABLE sys_user_group ADD COLUMN tenant_id VARCHAR(64); + ALTER TABLE sys_group_device ADD COLUMN tenant_id VARCHAR(64); + ALTER TABLE sys_group_rel_user ADD COLUMN tenant_id VARCHAR(64); + ALTER TABLE device_group_info ADD COLUMN tenant_id VARCHAR(64); + update device_group_info set tenant_id = 1; + update sys_user set tenant_id = 1; + update sys_role set tenant_id = 1; + update sys_rm_relation set tenant_id = 1; + update sys_ru_relation set tenant_id = 1; + update sys_dept set tenant_id = 1; + update sys_user_group set tenant_id = 1; + update sys_group_device set tenant_id = 1; + update sys_group_rel_user set tenant_id = 1; + 添加租户ID 0 + +2.表risk_point_info 字段 secret_level值密级默认 0 设定 + +3.新增表 sys_user_risk_group sys_risk_group_rel_user sys_risk_group_point + +CREATE TABLE sys_user_risk_group +( + id numeric(20,0) NOT NULL, + group_name VARCHAR(256), + create_time date, + dept_id numeric(20,0), + create_id numeric(20,0), + description VARCHAR(256), + safe SMALLINT, + group_type SMALLINT, + tenant_id VARCHAR(64), + PRIMARY KEY (id) +); + +CREATE TABLE sys_risk_group_rel_user +( + id numeric(20,0) NOT NULL, + group_id numeric(20,0), + user_id numeric(20,0), + create_time date, + tenant_id VARCHAR(64) +); + +CREATE TABLE sys_risk_group_point +( + id numeric(20,0) NOT NULL, + group_id numeric(20,0), + create_time date, + target_id numeric(20,0), + tenant_id VARCHAR(64) +); + + + + diff --git a/casic-web/src/main/resources/doc/20250416.txt b/casic-web/src/main/resources/doc/20250416.txt new file mode 100644 index 0000000..14610e9 --- /dev/null +++ b/casic-web/src/main/resources/doc/20250416.txt @@ -0,0 +1,18 @@ +1.增加识别流开关 流媒体id 识别流国标号 + ALTER TABLE box_device_relation ADD COLUMN media_server_id VARCHAR(255); + ALTER TABLE box_device_relation ADD COLUMN recognition_gb VARCHAR(255); + ALTER TABLE box_device_relation ADD COLUMN recognition_stream_flag int; + + + + ALTER TABLE upload_log ADD COLUMN tenant_id VARCHAR(64); +2.增加字典值 mediaServerId + 对应值参考zlm中的mediaServerId 配置项 +3.更新box_device表以下字段类型为text + server_public_key + server_private_key + client_public_key + client_private_key + +4.casic.no-login-urls + 增加 /record/upload \ No newline at end of file diff --git a/casic-web/src/main/resources/doc/20250519.txt b/casic-web/src/main/resources/doc/20250519.txt new file mode 100644 index 0000000..6d70728 --- /dev/null +++ b/casic-web/src/main/resources/doc/20250519.txt @@ -0,0 +1,3 @@ +1.固定秘钥解析 + 配置项增加 + casic.client.privateKey \ No newline at end of file diff --git a/casic-web/src/main/resources/doc/20250522.md b/casic-web/src/main/resources/doc/20250522.md new file mode 100644 index 0000000..636b4df --- /dev/null +++ b/casic-web/src/main/resources/doc/20250522.md @@ -0,0 +1,80 @@ +## 一、数据库更新 + +1. 操作日志增加IP字段 + +``` +ALTER TABLE sys_operation_log ADD COLUMN IP VARCHAR(255); +``` + +2. 角色添加业务类型 + +``` +ALTER TABLE sys_role ADD COLUMN BIZ_TYPE VARCHAR(32) default 'normal' COMMENT '业务类型标识字段,用于区分不同业务模块的资源,比如三员 安全生产'; +``` + +3. 资源添加业务类型及相关字典值 + +``` +ALTER TABLE sys_resource ADD COLUMN BIZ_TYPE VARCHAR(32) default 'normal' COMMENT '业务类型标识字段,用于区分不同业务模块的资源,比如三员 安全生产'; + +INSERT INTO `sys_dict` (`ID`, `NUM`, `PID`, `NAME`, `TIPS`, `CODE`, `TENANT_ID`) VALUES (1925798590442455041, '0', 0, '业务分类', '业务分类', 'bizType', NULL); +INSERT INTO `sys_dict` (`ID`, `NUM`, `PID`, `NAME`, `TIPS`, `CODE`, `TENANT_ID`) VALUES (1925798590442455042, '0', 1925798590442455041, '普通业务', NULL, 'normal', NULL); +INSERT INTO `sys_dict` (`ID`, `NUM`, `PID`, `NAME`, `TIPS`, `CODE`, `TENANT_ID`) VALUES (1925798590505369602, '1', 1925798590442455041, '三员权限', NULL, 'audit', NULL); + +``` +系统三员角色从数据库初始化 bizType为audit 其他角色为normal +系统菜单资源数据修改,系统管理下所有菜单及按钮设置bizType为audit,其他业务功能设置为normal + +4. 增加操作审批表结构 + +CREATE TABLE sys_operation_application +( +id numeric(20,0) NOT NULL, +create_time datetime , +update_time datetime , +title varchar(255) , +json_context text , +status char(1), +operation_type varchar(64) , +operation_remark varchar(255) , +audit_remark varchar(255) , +tenant_id varchar(64) , +create_id numeric(20,0) , +audit_id numeric(20,0) , +PRIMARY KEY (id) +) + +业务操作类关系如下 +增加operationType字典 +user_add 用户新增 +user_update 用户修改 +user_delete 用户删除 +user_reset 密码重置 +user_freeze 用户冻结 +user_unfreeze 用户解冻 +user_roleAssign 用户角色分配 + +role_add 角色新增 +role_update 角色修改 +role_delete 角色删除 +role_funcAuthor 角色功能权限配置 +role_dataAuthor 角色数据权限配置 + +resource_add 资源新增 +resource_update 资源修改 +resource_delete 资源删除 + +dept_add 组织新增 +dept_update 组织修改 +dept_delete 组织删除 + +casic.tenant.excludes 配置项增加 ,sys_operation_application + +对应角色只能授权对应角色资源 +## 二、设备同步自动提取所属组织机构 +1.增加开启配置项 +casic.video.av.autoDept: true #默认开启 + + + + diff --git "a/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250113\346\225\260\346\215\256\345\272\223.txt" "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250113\346\225\260\346\215\256\345\272\223.txt" new file mode 100644 index 0000000..9b3fde9 --- /dev/null +++ "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250113\346\225\260\346\215\256\345\272\223.txt" @@ -0,0 +1,12 @@ +ALTER TABLE box_device +MODIFY COLUMN server_public_key VARCHAR(512), +MODIFY COLUMN server_private_key VARCHAR(1024), +MODIFY COLUMN client_public_key VARCHAR(512), +MODIFY COLUMN client_private_key VARCHAR(1024); + +ALTER TABLE sys_config MODIFY COLUMN VALUE TEXT; + + + +INSERT INTO sys_resource(ID, PID, CODE, P_CODE, P_CODES, NAME, ICON, URL, NUM, LEVELS, IS_MENU, TIPS, IS_OPEN, RESOURCE_TYPE, CREATE_USER, UPDATE_USER, CREATE_TIME, UPDATE_TIME, DEL_FLAG, TENANT_ID, STATUS) VALUES (1872184789440688129, 0, 'bigScreen', '0', '[0],', '安全生产智慧监管平台', '', '/bigScreen', 0, 1, '1', NULL, '0', '03', 1832137050074128386, NULL, '2024-12-26 07:36:52', NULL, '0', NULL, '0'); +INSERT INTO sys_resource(ID, PID, CODE, P_CODE, P_CODES, NAME, ICON, URL, NUM, LEVELS, IS_MENU, TIPS, IS_OPEN, RESOURCE_TYPE, CREATE_USER, UPDATE_USER, CREATE_TIME, UPDATE_TIME, DEL_FLAG, TENANT_ID, STATUS) VALUES (1879080561335627777, 105, 'sys_bsConfig', 'system', '[0],[system],', '大屏配置', 'icon-bs', '/sys/bsConfig', 0, 2, '1', NULL, '0', '03', 1832137050074128386, 1832137050074128386, '2025-01-14 08:18:12', '2025-01-14 08:25:05', '0', NULL, '0'); diff --git "a/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250120\351\205\215\347\275\256.txt" "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250120\351\205\215\347\275\256.txt" new file mode 100644 index 0000000..4d3700f --- /dev/null +++ "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250120\351\205\215\347\275\256.txt" @@ -0,0 +1,13 @@ +1.配置最大上传文件 max-file-size 更改为150 + spring: + servlet: + multipart: + max-file-size: 150MB + max-request-size: 80MB + nginx也需设置 +2.登录不拦截配置项 + casic: + no-login-urls: + 增加 ,/sync/device/** + + INSERT INTO `casic-production-safety`.`sys_config`(`ID`, `VALUE`, `TARGET_NAME`, `CLASS_NAME`, `DESCRIPTION`, `TENANT_ID`) VALUES (1879417287790792706, '[{\"monitorName\":\"casic01\",\"deviceTypeName\":\"枪机\",\"deptName\":\"203\",\"areaName\":\"成都A区\",\"longitude\":\"116.258555\",\"latitude\":\"39.908447\",\"secretLevelName\":\"内部\",\"deviceStatusName\":\"在线\",\"cameraIndexCode\":\"34020000001320000003\",\"nvrIndexCode\":\"34020000001110000002\",\"picture\":\"http://192.168.83.42:6909/safe-server//picture/download/undefined?token=2c1e8cb8-e3f0-4fb5-af4f-7f3e3ce75add\"},{\"monitorName\":\"casic04\",\"deviceTypeName\":\"枪机\",\"deptName\":\"203\",\"areaName\":\"永定路A区域\",\"longitude\":\"116.258555\",\"latitude\":\"39.908447\",\"secretLevelName\":\"公开\",\"deviceStatusName\":\"在线\",\"cameraIndexCode\":\"34020000001320000008\",\"nvrIndexCode\":\"34020000001110000002\",\"picture\":\"http://192.168.83.42:6909/safe-server//picture/download/undefined?token=2c1e8cb8-e3f0-4fb5-af4f-7f3e3ce75add\"},{\"monitorName\":\"casic01\",\"deviceTypeName\":\"枪机\",\"deptName\":\"203\",\"areaName\":\"成都A区\",\"longitude\":\"116.258555\",\"latitude\":\"39.908447\",\"secretLevelName\":\"内部\",\"deviceStatusName\":\"在线\",\"cameraIndexCode\":\"34020000001320000003\",\"nvrIndexCode\":\"34020000001110000002\",\"picture\":\"http://192.168.83.42:6909/safe-server//picture/download/undefined?token=2c1e8cb8-e3f0-4fb5-af4f-7f3e3ce75add\"},{\"monitorName\":\"casic04\",\"deviceTypeName\":\"枪机\",\"deptName\":\"203\",\"areaName\":\"永定路A区域\",\"longitude\":\"116.258555\",\"latitude\":\"39.908447\",\"secretLevelName\":\"公开\",\"deviceStatusName\":\"在线\",\"cameraIndexCode\":\"34020000001320000008\",\"nvrIndexCode\":\"34020000001110000002\",\"picture\":\"http://192.168.83.42:6909/safe-server//picture/download/undefined?token=2c1e8cb8-e3f0-4fb5-af4f-7f3e3ce75add\"},{\"monitorName\":\"casic01\",\"deviceTypeName\":\"枪机\",\"deptName\":\"203\",\"areaName\":\"成都A区\",\"longitude\":\"116.258555\",\"latitude\":\"39.908447\",\"secretLevelName\":\"内部\",\"deviceStatusName\":\"在线\",\"cameraIndexCode\":\"34020000001320000003\",\"nvrIndexCode\":\"34020000001110000002\"},{\"monitorName\":\"casic04\",\"deviceTypeName\":\"枪机\",\"deptName\":\"203\",\"areaName\":\"永定路A区域\",\"longitude\":\"116.258555\",\"latitude\":\"39.908447\",\"secretLevelName\":\"公开\",\"deviceStatusName\":\"在线\",\"cameraIndexCode\":\"34020000001320000008\",\"nvrIndexCode\":\"34020000001110000002\"}]', 'casic.bg.config', NULL, NULL, NULL); diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java new file mode 100644 index 0000000..1ca5eb1 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java @@ -0,0 +1,63 @@ +package com.casic.missiles.modular.device.enums; + +/** + * wvp设备类型转换 + * + * @author lwh + * @Date 2017年1月10日 下午9:54:13 + */ +public enum AvDeptEnum { + + DEPT0("0066", "801",0L), + DEPT1("0059", "699厂",1L), + DEPT2("0055", "283厂",1L), + DEPT3("0022", "201所",1L), + DEPT4("0027", "206所",1L), + DEPT5("0013", "23所",1L); + + String code; + String message; + Long deptId; + AvDeptEnum(String code, String message, Long deptId) { + this.code = code; + this.message = message; + this.deptId = deptId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public static AvDeptEnum valueOfCode(String value) { + if (value == null) { + return null; + } else { + for (AvDeptEnum ms : AvDeptEnum.values()) { + if (ms.getCode().equals(value)) { + return ms; + } + } + return null; + } + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java new file mode 100644 index 0000000..573d0e2 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.task; + +import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; + +public class Test { + public static void main(String[] args) { + System.out.println(AvStatusTypeEnum.valueOfType(new Integer(1)).getMessage()); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java new file mode 100644 index 0000000..7c06c67 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java @@ -0,0 +1,77 @@ +package com.casic.missiles.modular.device.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpSession; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class RiskSyncController extends BaseController { + @Resource + private IClientAuthService clientAuthService; + @Resource + private AbstractDeptService deptService; + @Resource + private AbstractUserService userService; + @PostMapping("/client/login") + @ResponseBody + public ResponseData login(@RequestBody RiskLoginForm deviceLoginForm, HttpSession session) { + return clientAuthService.login(deviceLoginForm, session); + } + + /** + * 全量组织信息读取 + * + * @return + */ + @PostMapping("/dept/list") + @ResponseBody + public ResponseDataDTO> dept() { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = deptService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量用户信息读取 + * + * @return + */ + @PostMapping("/user/list") + @ResponseBody + public ResponseDataDTO> user() { + //todo 此处租户拦截需移除 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量设备信息读取 + * + * @return + */ + @PostMapping("/device/list") + @ResponseBody + public ResponseDataDTO> device() { + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java new file mode 100644 index 0000000..5e5b890 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class UserSyncController extends BaseController { + + @Resource + private IBusDeviceInfoService busDeviceInfoService; + + /** + * 登录用户授权设备权限查看 + * @return + */ + @GetMapping("/device/permissions") + @ResponseBody + public ResponseDataDTO> devicePermissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } + + /** + * 登录用户风险点授权查询 + * @return + */ + @GetMapping("/permissions") + @ResponseBody + public ResponseDataDTO> permissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java new file mode 100644 index 0000000..07b8df8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +/** + * 设备登录接口 + */ +@Data +public class RiskLoginForm { + /** + * 设备编码 + */ + private String clientId; + + /** + * 时间戳 + */ + private Long time; + + /** + * 加密后数据 加密格式sn+时间戳 时效性为6小时 + */ + private String secret; + + /** + * 设备登录注册IP + */ + private String ip; + + /** + * 设备登录注册port + */ + private String port; +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java new file mode 100644 index 0000000..40fdb4b --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.device.service; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; + +import javax.servlet.http.HttpSession; + +public interface IClientAuthService { + /** + * @param deviceLoginForm + * @param session + * @return + */ + ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session); +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java new file mode 100644 index 0000000..576e857 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.device.service.impl; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import cn.hutool.jwt.JWT; +import cn.hutool.jwt.JWTUtil; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.util.IRiskCacheUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpSession; +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Service +public class ClientAuthServiceImpl implements IClientAuthService { + @Value("${casic.client.privateKey:MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALKcwHHOg0F6Zkq7GOVnOnTgvH9vSPXFFTOcEqOVBIBPBz7UNrEGkp1PhZ+oC4WVJAsDuot2e1fDZy9QS9HF92MmnYp9kuQRhGZjHctPnVZ0Kai5BES0ytHqPeauLyNXxOOS0YKYEUwpft4Z5Azw7bj3JWNvLrnTZvNld6FDvTslAgMBAAECgYAqN/kZLYpC+O6i7XSmDO95XwHPUXu6dDpdt5+EQR4OQh/hTwIaeAZB3uEj6vHGQomBfQEkI/5lsU97lIxHanbd+Hro7JyIhsGD5LR5XnZHVKzFiZW62OIU6FI9dlQNN8miiblnmyDwiMA3okaHl0O7qQjZ+IvY2csgmJc7AXpPpQJBAOhrhcfWFcgffj2O6HYNlBLFfbboc/ZzrEADDXKnxRSHlo5o8W+6gylG/L2NGtbag5S68B9VYzdkSQ1++5C+Ws8CQQDEu7h311PLEiKgqzGHpjzadQETmt/jMadaKQmT0TZwNVi6X8lR17U5hF8dAqZzUzr9kUC0HRIZhg4Uv1v3W3fLAkB4YPhxgJjXhjhEefg87Nt8vX1Xdx5Yz6CvpuUYNX0GHRQFvqUOUXQNtQ7CvorgLV1pc0lbcUZqMi8EJnj1hyJRAkEAjHXWm8GiMt+M15fCsi3vTq2xChVOekBuUsHv85iwvGZqJg7ThtpyqlEnM2g7/STUfkvhnXcQACclEI0blTy6BwJAPmFyhU+d0ejVpbc53TdrL2HqYYUHi/tTy/dtUa7lbypzdwwJ2M1Tv5PE8sQxr9tgMbebfxVb/RFKdiCCtzC4ng==}") + private String privateKey; + + @Override + public ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session) { + //固定秘钥解析 + try { + String str = RSAUtils.decrypt(deviceLoginForm.getSecret(), privateKey); + Long time = Long.valueOf(StrUtil.split(str, "_").get(1)); + //边缘盒子时差与服务时差不可超过24小时 + if (time == null || System.currentTimeMillis() - time > 3600 * 24 * 1000) { + return ResponseData.error("请求时间超时"); + } + deviceLoginForm.setTime(time); + } catch (Exception e) { + e.printStackTrace(); + return ResponseData.error("设备解析异常!"); + } + + try { + String token = this.createJwtToken(deviceLoginForm); + IRiskCacheUtil.put(token, token); + return ResponseData.success(token); + } catch (Exception e) { + log.error("设备登录异常:{}", e.getMessage()); + return ResponseData.error("登录异常,请联系管理员"); + } +} + /** + * token创建 + * + * @param loginForm 登录信息 + * @param device 设备信息 + * @return + * @throws Exception + */ + public String createJwtToken(RiskLoginForm loginForm) throws Exception { + Map payload = new HashMap<>(); + payload.put("clientId", loginForm.getClientId()); // 设备编号 + payload.put("time", loginForm.getTime()); // 请求时间 + + //RSA 解密 + String str = RSAUtils.decrypt(loginForm.getSecret(), privateKey); + String key = loginForm.getClientId()+"_" + loginForm.getTime() ; + if (!key.equals(str)) { + //秘钥验证失败 + throw new ServiceException(500,"秘钥验证失败"); + } + +// long exp = new Date().getTime() + 2 * 3600000; // 2小时后的时间戳 +// payload.put("exp", exp); + + // 创建JWT + String jwt = JWTUtil.createToken(payload, "token-203-202405".getBytes()); + + return jwt; + } + + /** + * token解析 + * + * @param jwtStr token + * @return + * @throws Exception + */ + public static RiskLoginForm parseToken(String jwtStr){ + JWT jwtObj = new JWTUtil().parseToken(jwtStr); + RiskLoginForm deviceLoginForm = new RiskLoginForm(); + deviceLoginForm.setClientId(Convert.toStr(jwtObj.getPayload("clientId"))); + return deviceLoginForm; + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java new file mode 100644 index 0000000..0e91ac8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.util; +import cn.hutool.cache.Cache; +import cn.hutool.cache.CacheUtil; +/** + * token有效 + */ +public class IRiskCacheUtil { + /** + * 1小时内不活跃 会踢掉 + */ + private static Cache fifoCache = CacheUtil.newFIFOCache(1000, 1000 * 60 * 60); + + public static void put(String key, String value) { + fifoCache.put(key, value); + } + + public static String get(String key) { + return fifoCache.get(key); + } + + public static void remove(String key) { + fifoCache.remove(key); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java new file mode 100644 index 0000000..805c32a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceGroupDict extends AbstractDictMap { + + @Override + public void init() { + //检索条件 + put("groupName", "分组名称"); + put("startTime", "起始时间"); + put("endTime", "结束时间"); + //新增修改属性 + put("cameraIds", "设备国标号"); + put("personIds", "人员主键集合"); + put("description","备注"); + put("id","主键"); + put("ids","主键集合"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java new file mode 100644 index 0000000..895fbd9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceQueryDict extends AbstractDictMap { + + @Override + public void init() { + put("devType", "类型查询"); + put("keyword", "设备名称"); + put("deptName", "所属单位"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java new file mode 100644 index 0000000..88da6df --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.device.util; + +public class DeviceScopeUtil { +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java new file mode 100644 index 0000000..2e3e478 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.device.controller; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.auth.dto.DeviceLoginForm; +import com.casic.missiles.modular.auth.util.ICacheUtil; +import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; +import com.casic.missiles.modular.device.service.IAlarmRecordService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +@Api(tags = "告警记录") +@RestController +@RequestMapping("/record") +public class AlarmUploadController extends BaseController { + + private final IAlarmRecordService alarmRecordService; + private final IDeviceAuthService deviceAuthService; + public AlarmUploadController(IAlarmRecordService alarmRecordService, IDeviceAuthService deviceAuthService) { + this.alarmRecordService = alarmRecordService; + this.deviceAuthService = deviceAuthService; + } + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } + @BussinessLog(value = "告警记录上报接口") + @ApiOperation(value = "告警记录上报接口") + @PostMapping(value = "/upload") + public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return createAuthError(); + } + alarmRecordService.upload(alarmRecord); + return ResponseDataDTO.success(); + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java new file mode 100644 index 0000000..3f1c189 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class RecognitionStreamDTO { + private Long id; + private String recognitionStreamFlag; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java new file mode 100644 index 0000000..fa5ae4a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java @@ -0,0 +1,167 @@ +package com.casic.missiles.modular.group.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IRiskPointInfoService; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.group.vo.SysRiskGroupPointVO; +import com.casic.missiles.modular.group.vo.SysRiskGroupRelUserVO; +import com.casic.missiles.modular.group.vo.SysRiskUserGroupVO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import com.casic.missiles.modular.system.vo.SysGroupRelUserVO; +import com.casic.missiles.modular.system.vo.SysUserGroupVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.ibatis.annotations.Param; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; + +/** + * 风险点组信息Controller + * + * @author lwh + * @date 2024-07-11 + */ +@Api(tags = "风险点组信息") +@RestController +@RequestMapping("/sys/risk/group") +public class SysUserRiskGroupController extends BaseController { + private final IRiskPointInfoService riskPointInfoService; + private final ISysUserRiskGroupService sysUserGroupService; + private final AbstractPermissionContext permissionContext; + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysUserRiskGroupController(IRiskPointInfoService riskPointInfoService, ISysUserRiskGroupService sysUserGroupService, AbstractPermissionContext permissionContext, ISysRiskGroupRelUserService sysGroupRelUserService) { + this.riskPointInfoService = riskPointInfoService; + this.sysUserGroupService = sysUserGroupService; + this.permissionContext = permissionContext; + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @BussinessLog(value = "风险点分组查询") + @ApiOperation(value = "风险点分组查询", hidden = true) + @GetMapping(value = "/list") + public ResponseDataDTO> list(SysRiskUserGroupVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysUserGroupService.list(query)); + } + + @BussinessLog(value = "分组人员列表查询") + @ApiOperation(value = "分组人员列表查询") + @GetMapping(value = "/groupUserList") + public ResponseDataDTO> groupUserList(SysRiskGroupRelUserVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysGroupRelUserService.list(query)); + } + + @BussinessLog(value = "风险点分组人员查询") + @ApiOperation(value = "风险点分组人员分页查询") + @GetMapping(value = "/groupUserPage") + public ResponseDataDTO> listPage(SysRiskGroupRelUserVO sysGroupRelUserVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysGroupRelUserVO.genQuery(); + List relUsers = sysGroupRelUserService.selectSysGroupRelUserPage(page, query); + page.setRecords(relUsers); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "用户分组批量新增") + @ApiOperation(value = "批量新增接口") + @PostMapping(value = "/batch-add") + public ResponseDataDTO batchAdd(@RequestBody GroupUserRelDTO relDTO) { + sysGroupRelUserService.batchAdd(relDTO); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组人员删除") + @ApiOperation(value = "用户组人员删除接口") + @GetMapping(value = "/user/delete") + public ResponseDataDTO userDel(@Param("用户组人员关联主键") String id) { + sysGroupRelUserService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "风险点分组分页查询") + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(SysRiskUserGroupVO sysUserGroupVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysUserGroupVO.genQuery(); + + List sysUserGroups = sysUserGroupService.selectSysUserGroupPage(page, query); + page.setRecords(sysUserGroups); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "风险点分组新增") + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.save(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组修改") + @ApiOperation(value = "修改接口") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.updateById(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组删除") + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + sysUserGroupService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "批量删除") + @ApiOperation(value = "批量删除", hidden = true) + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + sysUserGroupService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "详情查询") + @ApiOperation(value = "详情查询", hidden = true) + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(sysUserGroupService.getById(id)); + } + + @BussinessLog(value = "用户树") + @ApiOperation(value = "用户树查询") + @GetMapping(value = "/person/tree") + public ResponseDataDTO> personTree() { + return ResponseDataDTO.success(sysUserGroupService.personTree()); + } + + @BussinessLog(value = "风险点树查询") + @ApiOperation(value = "风险点树查询") + @GetMapping(value = "/tree") + public ResponseDataDTO> tree(String riskType) { + return ResponseDataDTO.success(riskPointInfoService.tree(riskType)); + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java new file mode 100644 index 0000000..419eb27 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备所属人员组 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupPointMapper extends BaseMapper { +/** +* 设备所属人员组 分页检索 +*/ +List selectSysGroupDevicePage(@Param("page") Page page, @Param("ew" ) QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java new file mode 100644 index 0000000..eb41227 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 组人员管理 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupRelUserMapper extends BaseMapper { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java new file mode 100644 index 0000000..e8352df --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.system.model.SysUserGroup; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 用户组信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysUserRiskGroupMapper extends BaseMapper { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml new file mode 100644 index 0000000..6fa6a4d --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + id , + group_id as groupId , + create_time as createTime , + target_Id as targetId + + + a.id , + a.group_id + as groupId , + a.create_time + as createTime , + a.target_Id + as targetId + + + + + + and group_id = #{request.groupId} + + + and device_id = #{request.deviceId} + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml new file mode 100644 index 0000000..a627546 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + id , + group_id as groupId , + user_id as userId , + create_time as createTime + + + a.id, + a.group_id + as groupId , + a.user_id + as userId , + a.create_time + as createTime + + + + + + and group_id = #{request.groupId} + + + and user_id = #{request.userId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml new file mode 100644 index 0000000..3245136 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + id, + group_name as groupName , + create_time as createTime , + dept_id as deptId , + create_id as createId + + + a.id,a.group_name as groupName , + a.create_time + as createTime , + a.dept_id + as deptId , + a.create_id + as createId,a.description + + + + + + and group_name like concat('%',#{request.groupName},'%') + + + and dept_id = #{request.deptId} + + + and create_id = #{request.createId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java new file mode 100644 index 0000000..e44328f --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class GroupRiskRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("风险点集合") + private List targetIds; + @ApiModelProperty("用户ID集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java new file mode 100644 index 0000000..f8758bf --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class RiskGroupUserRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("设备集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java new file mode 100644 index 0000000..b386d5b --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java @@ -0,0 +1,53 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 风险点所属组 sys_risk_group_point + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_risk_group_point") +public class SysRiskGroupPoint extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableId("id") + private Long id; + + @ApiModelProperty(value = "用户组ID", dataType = "Long") + @TableField("group_id") + private Long groupId; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty(value = "风险点ID", dataType = "Long") + @TableField("target_id") + private Long targetId; + + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; + + @Override + public String toString() { + return "SysGroupDevice{" + + "id=" + id + + "groupId=" + groupId + + "createTime=" + createTime + + "targetId=" + targetId + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java new file mode 100644 index 0000000..949caa3 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java @@ -0,0 +1,55 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 组人员管理对象 sys_group_rel_user + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_risk_group_rel_user") +public class SysRiskGroupRelUser extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + + @ApiModelProperty(value = "组ID", dataType = "Long") + @TableField("group_id") + private Long groupId; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + @TableField("user_id") + private Long userId; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + @ApiModelProperty(value = "用户姓名", dataType = "String") + @TableField(exist = false) + private String realName; + + @ApiModelProperty(value = "用户名", dataType = "String") + @TableField(exist = false) + private String account; + + @Override + public String toString() { + return "SysGroupRelUser{" + + "id=" + id + + "groupId=" + groupId + + "userId=" + userId + + "createTime=" + createTime + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java new file mode 100644 index 0000000..1b73dc0 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java @@ -0,0 +1,97 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 危险点分组组信息对象 sys_user_risk_group + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_user_risk_group") +public class SysUserRiskGroup extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableId("id") + private Long id; + + @ApiModelProperty(value = "组名称", dataType = "String", required = true) + @TableField("group_name") + private String groupName; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty(value = "所属组织(保留字段)", dataType = "Long") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty(value = "描述信息", dataType = "String") + @TableField("description") + private String description; + + @ApiModelProperty(value = "密级字典", dataType = "String") + @TableField("safe") + private int safe; + + @ApiModelProperty(value = "创建者ID", dataType = "Long") + @TableField("create_id") + private Long createId; + + + @ApiModelProperty(value = "类型(1 危险点 2 重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "Long") + @TableField("group_type") + private String groupType; + @TableField(exist = false) + private String groupTypeName; + /** + * 风险点集合 + */ + @ApiModelProperty(value = "风险点集合(逗号拼接)", dataType = "String") + @TableField(exist = false) + private String pointIds; + + @ApiModelProperty(value = "数量", dataType = "Long") + @TableField(exist = false) + private Integer targetNum; + /** + * 用户集合 + */ + @ApiModelProperty(value = "用户集合(逗号拼接)", dataType = "String") + @TableField(exist = false) + private String personIds; + + @ApiModelProperty(value = "用户名称", dataType = "String") + @TableField(exist = false) + private String realName; + + @ApiModelProperty(value = "用户名", dataType = "String") + @TableField(exist = false) + private String account; + + @ApiModelProperty(value = "密级字典名称", dataType = "String") + @TableField(exist = false) + private String safeName; + + @Override + public String toString() { + return "SysUserGroup{" + + "id=" + id + + "groupName=" + groupName + + "createTime=" + createTime + + "deptId=" + deptId + + "createId=" + createId + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java new file mode 100644 index 0000000..4657ce4 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.device.dto.GroupRelDTO; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; + +import java.util.List; + + +/** + *

+ * 设备所属人员组 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysRiskGroupPointService extends IService { + /** + * 设备所属人员组 分页检索 + */ + List selectSysGroupDevicePage(Page page, QueryWrapper query); + + /** + * 设备组批量新增 + * + * @param relDTO + */ + void batchAdd(GroupRiskRelDTO relDTO); + + + /** + * 增量更新 + * @param groupId + * @param deviceIds + */ + void batchIncremental(Long groupId, List deviceIds); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java new file mode 100644 index 0000000..591eef2 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; + +import java.util.List; + + +/** + *

+ * 组人员管理 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysRiskGroupRelUserService extends IService { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(Page page, QueryWrapper query); + + void batchAdd(GroupUserRelDTO relDTO); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java new file mode 100644 index 0000000..1e0889c --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; + +import java.util.List; + + +/** + *

+ * 用户组信息 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysUserRiskGroupService extends IService { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(Page page, QueryWrapper query); + + List personTree(); + + /** + * 创建用户组 + * + * @param sysUserGroup 用户组信息 + * @param userIds 用户信息 + */ + void createSysUserGroup(SysUserRiskGroup sysUserGroup, List userIds); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java new file mode 100644 index 0000000..6839887 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java @@ -0,0 +1,118 @@ +package com.casic.missiles.modular.group.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +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.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.group.dao.SysRiskGroupPointMapper; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import com.casic.missiles.modular.group.service.ISysRiskGroupPointService; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + + +/** + *

+ * 设备所属人员组 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysRiskGroupPointServiceImpl extends ServiceImpl implements ISysRiskGroupPointService { + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysRiskGroupPointServiceImpl(ISysRiskGroupRelUserService sysGroupRelUserService) { + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @Override + public List selectSysGroupDevicePage(Page page, QueryWrapper query) { + return this.baseMapper.selectSysGroupDevicePage(page, query); + } + + @Transactional + @Override + public void batchAdd(GroupRiskRelDTO relDTO) { + + if (CollectionUtil.isEmpty(relDTO.getTargetIds())) { + ServiceException serviceException = new ServiceException(500, "添加不能为空!"); + throw serviceException; + } + + //删除 + QueryWrapper query = new QueryWrapper<>(); + query.eq("group_id", relDTO.getGroupId()); + this.remove(query); + + //保存分组与危险点对应关系 + List groupDevices = new ArrayList<>(); + for (Long deviceId : relDTO.getTargetIds()) { + SysRiskGroupPoint sysGroupDevice = new SysRiskGroupPoint(); + sysGroupDevice.setTargetId(deviceId); + sysGroupDevice.setGroupId(relDTO.getGroupId()); + sysGroupDevice.setCreateTime(new Date()); + groupDevices.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(groupDevices); + + //批量保存风险点与用户关系 + GroupUserRelDTO groupUserRelDTO = new GroupUserRelDTO(); + groupUserRelDTO.setGroupId(relDTO.getGroupId()); + groupUserRelDTO.setUserIds(relDTO.getUserIds()); + sysGroupRelUserService.batchAdd(groupUserRelDTO); + + } + + @Override + public void batchIncremental(Long groupId, List deviceIds) { + List groupDevices = this.list(new LambdaQueryWrapper().eq(SysRiskGroupPoint::getGroupId, groupId)); + if (CollectionUtil.isEmpty(groupDevices)) { + saveDevices(groupId, deviceIds); + } else { + List oldDevices = groupDevices.stream().map(SysRiskGroupPoint::getTargetId).collect(Collectors.toList()); + List delIds = CollectionUtil.subtractToList(oldDevices, deviceIds); + List saveDevices = CollectionUtil.subtractToList(deviceIds, oldDevices); + + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.eq(SysRiskGroupPoint::getGroupId, groupId); + delQuery.in(SysRiskGroupPoint::getTargetId, delIds); + if (CollectionUtil.isNotEmpty(delIds)) { + this.remove(delQuery); + } + saveDevices(groupId, saveDevices); + } + } + + private void saveDevices(Long groupId, List saveDevices) { + List saves = new ArrayList<>(); + for (Long deviceId : saveDevices) { + SysRiskGroupPoint sysGroupDevice = new SysRiskGroupPoint(); + sysGroupDevice.setTargetId(deviceId); + sysGroupDevice.setGroupId(groupId); + sysGroupDevice.setCreateTime(new Date()); + saves.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(saves); + } + + private void saveOrUpdateBatchList(List groupDevices) { + for (SysRiskGroupPoint groupDevice : groupDevices) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysRiskGroupPoint::getGroupId, groupDevice.getGroupId()); + query.eq(SysRiskGroupPoint::getTargetId, groupDevice.getTargetId()); + this.saveOrUpdate(groupDevice, query); + } + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java new file mode 100644 index 0000000..83cd76a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.group.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +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.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.group.dao.SysRiskGroupPointMapper; +import com.casic.missiles.modular.group.dao.SysRiskGroupRelUserMapper; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.system.dao.SysGroupRelUserMapper; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + + +/** + *

+ * 组人员管理 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysRiskGroupRelUserServiceImpl extends ServiceImpl implements ISysRiskGroupRelUserService { + @Override + public List selectSysGroupRelUserPage(Page page, QueryWrapper query) { + return this.baseMapper.selectSysGroupRelUserPage(page, query); + } + + @Transactional + @Override + public void batchAdd(GroupUserRelDTO relDTO) { + if (CollectionUtil.isEmpty(relDTO.getUserIds())) { + ServiceException serviceException = new ServiceException(500, "添加不能为空!"); + throw serviceException; + } + //删除 + QueryWrapper query = new QueryWrapper<>(); + query.eq("group_id",relDTO.getGroupId()); + this.remove(query); + //添加设备信息 + List groupDevices = new ArrayList<>(); + for (Long deviceId : relDTO.getUserIds()) { + SysRiskGroupRelUser sysGroupDevice = new SysRiskGroupRelUser(); + sysGroupDevice.setUserId(deviceId); + sysGroupDevice.setGroupId(relDTO.getGroupId()); + sysGroupDevice.setCreateTime(new Date()); + groupDevices.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(groupDevices); + } + + private void saveOrUpdateBatchList(List groupDevices) { + for (SysRiskGroupRelUser groupDevice : groupDevices) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysRiskGroupRelUser::getGroupId, groupDevice.getGroupId()); + query.eq(SysRiskGroupRelUser::getUserId, groupDevice.getUserId()); + this.saveOrUpdate(groupDevice, query); + } + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java new file mode 100644 index 0000000..b3bb9a8 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java @@ -0,0 +1,246 @@ +package com.casic.missiles.modular.group.service.impl; + +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.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.modular.data.constants.DataConstants; +import com.casic.missiles.modular.group.dao.SysUserRiskGroupMapper; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupPointService; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.tree.RiskGroupDefaultTreeBuildFactory; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + + +/** + *

+ * 用户组信息 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysUserRiskGroupServiceImpl extends ServiceImpl implements ISysUserRiskGroupService { + @Lazy + @Resource + private ISysRiskGroupPointService sysRiskGroupPointService; + private final AbstractPermissionContext abstractPermissionContext; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_USER = "2"; + private final AbstractDictService dictService; + @Lazy + @Resource + private ISysRiskGroupRelUserService relUserService; + + public SysUserRiskGroupServiceImpl(AbstractPermissionContext abstractPermissionContext, AbstractDictService dictService) { + this.abstractPermissionContext = abstractPermissionContext; + this.dictService = dictService; + } + + @Override + public List selectSysUserGroupPage(Page page, QueryWrapper query) { + //分组过滤当前权限 + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + query.in("a.dept_id", dataScope.getDeptIds()); + } + List riskGroups = this.baseMapper.selectSysUserGroupPage(page, query); + for (SysUserRiskGroup riskGroup : riskGroups) { + wrapperInfo(riskGroup); + } + return riskGroups; + } + + private void wrapperInfo(SysUserRiskGroup riskGroup) { + riskGroup.setSafeName(dictService.getDictNameByCode(DataConstants.DICT_SECRET_LEVEL_TYPE, riskGroup.getSafe() + "")); + //查询关联设备 + LambdaQueryWrapper deviceQuery = new LambdaQueryWrapper<>(); + deviceQuery.eq(SysRiskGroupPoint::getGroupId, riskGroup.getId()); + List devices = sysRiskGroupPointService.list(deviceQuery); + if (devices != null) { + List deviceList = devices.stream().map(SysRiskGroupPoint::getTargetId).collect(Collectors.toList()); + riskGroup.setPointIds(StrUtil.join(",", deviceList)); + riskGroup.setTargetNum(deviceList.size()); + } + + riskGroup.setGroupTypeName(dictService.getDictNameByCode(DataConstants.dangerAssessmentType, riskGroup.getGroupType())); + //查询关联人员 + LambdaQueryWrapper personQuery = new LambdaQueryWrapper<>(); + personQuery.eq(SysRiskGroupRelUser::getGroupId, riskGroup.getId()); + List persons = relUserService.list(personQuery); + if (persons != null) { + List personIds = persons.stream().map(SysRiskGroupRelUser::getUserId).collect(Collectors.toList()); + riskGroup.setPersonIds(StrUtil.join(",", personIds)); + } + } + + private void setGroupInfo(SysUserRiskGroup entity) { + if (StrUtil.isNotEmpty(entity.getPointIds())) { + entity.setTargetNum(StrUtil.split(entity.getPointIds(), ",").size()); + } else { + entity.setTargetNum(0); + } + } + + @Override + public boolean save(SysUserRiskGroup entity) { + AuthUser authUser = abstractPermissionContext.getAuthService().getLoginUser(); + entity.setCreateTime(new Date()); + entity.setCreateId(authUser.getId()); + if (entity.getDeptId() == null) { + entity.setDeptId(authUser.getDeptId()); + } + setGroupInfo(entity); + super.save(entity); + batchSave(entity, entity.getId()); + return true; + } + + @Override + public boolean updateById(SysUserRiskGroup entity) { + AuthUser authUser = abstractPermissionContext.getAuthService().getLoginUser(); + entity.setCreateTime(new Date()); + entity.setCreateId(authUser.getId()); + if (entity.getDeptId() == null) { + entity.setDeptId(authUser.getDeptId()); + } + setGroupInfo(entity); + super.updateById(entity); + batchSave(entity, entity.getId()); + return true; + } + + /** + * 数据转换 + * + * @param entity + * @param groupId + */ + private void batchSave(SysUserRiskGroup entity, Long groupId) { + GroupRiskRelDTO groupRelDTO = new GroupRiskRelDTO(); + groupRelDTO.setGroupId(groupId); + if (StrUtil.isNotEmpty(entity.getPointIds())) { + long[] longs = StrUtil.splitToLong(entity.getPointIds(), ","); + List devices = new ArrayList<>(); + for (long aLong : longs) { + devices.add(aLong); + } + groupRelDTO.setTargetIds(devices); + } + if (StrUtil.isNotEmpty(entity.getPersonIds())) { + List persons = new ArrayList<>(); + long[] longs = StrUtil.splitToLong(entity.getPersonIds(), ","); + + for (long aLong : longs) { + persons.add(aLong); + } + groupRelDTO.setUserIds(persons); + } + sysRiskGroupPointService.batchAdd(groupRelDTO); + } + + @Override + public List personTree() { + + //查询可见组织 + DataScope scope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + + LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { + deptQuery.in(Dept::getId, scope.getDeptIds()); + } + deptQuery.orderByAsc(Dept::getNum); + + List deptList = abstractPermissionContext.getDeptService().list(deptQuery); + List deptDTOS = new ArrayList<>(); + List rootIds = new ArrayList<>(); + Set normalIds = new HashSet<>(); + for (Dept dept : deptList) { + RiskGroupDeptDTO deptDTO = new RiskGroupDeptDTO(); + deptDTO.setPid(dept.getPid()); + deptDTO.setId(dept.getId()); + deptDTO.setFullName(dept.getFullName()); + deptDTO.setName(dept.getSimpleName()); + deptDTOS.add(deptDTO); + deptDTO.setType(NODE_TYPE_DEPT); + normalIds.add(dept.getId()); + + //挂载设备信息 + LambdaQueryWrapper deviceQuery = new LambdaQueryWrapper<>(); + deviceQuery.eq(User::getDeptId, deptDTO.getId()); + deviceQuery.eq(User::getStatus, "1"); + List deviceInfos = abstractPermissionContext.getUserService().list(deviceQuery); + + deptDTO.setChildrenNodes(deviceInfos.stream().map(this::createDeptDTO).collect(Collectors.toList())); + } + + for (RiskGroupDeptDTO deptDTO : deptDTOS) { + if (!normalIds.contains(deptDTO.getPid())) { + rootIds.add(deptDTO.getPid()); + } + } + + //过滤根节点,支持多根展示 + RiskGroupDefaultTreeBuildFactory abstractTreeBuildFactory = new RiskGroupDefaultTreeBuildFactory(); + List newTree = new ArrayList<>(); + rootIds = rootIds.stream().distinct().collect(Collectors.toList()); + for (Long rootId : rootIds) { + abstractTreeBuildFactory.setRootId(rootId + ""); + newTree.addAll(abstractTreeBuildFactory.doTreeBuild(deptDTOS)); + } + + return newTree; + } + + @Transactional + @Override + public void createSysUserGroup(SysUserRiskGroup sysUserGroup, List userIds) { + this.baseMapper.insert(sysUserGroup); + GroupUserRelDTO relDTO = new GroupUserRelDTO(); + relDTO.setGroupId(sysUserGroup.getId()); + relDTO.setUserIds(userIds); + relUserService.batchAdd(relDTO); + } + + + /** + * 创建节点 + * + * @param userInfo 用户信息 + * @return + */ + private GroupDeptDTO createDeptDTO(User userInfo) { + GroupDeptDTO deptDTO = new GroupDeptDTO(); + deptDTO.setType(NODE_TYPE_USER); + deptDTO.setId(userInfo.getId()); + deptDTO.setPid(userInfo.getDeptId()); + deptDTO.setUserDTO(userInfo); + deptDTO.setName(userInfo.getName()); + deptDTO.setFullName(userInfo.getName()); + deptDTO.setUserId(userInfo.getId() + ""); + return deptDTO; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/tree/RiskGroupDefaultTreeBuildFactory.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/tree/RiskGroupDefaultTreeBuildFactory.java new file mode 100644 index 0000000..69c18ad --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/tree/RiskGroupDefaultTreeBuildFactory.java @@ -0,0 +1,30 @@ +package com.casic.missiles.modular.group.tree; + +import com.casic.missiles.core.treebuild.DefaultTreeBuildFactory; +import com.casic.missiles.model.tree.Tree; + +import java.util.ArrayList; +import java.util.List; + +public class RiskGroupDefaultTreeBuildFactory extends DefaultTreeBuildFactory { + private String rootId; + @Override + protected List afterBuild(List nodes) { + //去掉所有的二级节点 + ArrayList results = new ArrayList<>(); + for (T node : nodes) { + if (node.getNodeParentId().equals(rootId)) { + results.add(node); + } + } + return results; + } + + public String getRootId() { + return rootId; + } + + public void setRootId(String rootId) { + this.rootId = rootId; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/RiskGroupDeptDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/RiskGroupDeptDTO.java new file mode 100644 index 0000000..7f6c157 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/RiskGroupDeptDTO.java @@ -0,0 +1,61 @@ +package com.casic.missiles.modular.group.vo; + +import com.casic.missiles.model.tree.Tree; +import com.casic.missiles.modular.device.model.RiskPointInfo; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +@Data +public class RiskGroupDeptDTO implements Tree { + @ApiModelProperty("组织主键") + private Long id; + + @ApiModelProperty("父部门ID") + private Long pid; + + @ApiModelProperty("组织简称") + private String name; + + @ApiModelProperty("组织全称") + private String fullName; + + @ApiModelProperty("子节点") + private List children = new ArrayList<>(); + + @ApiModelProperty("节点类型(1 组织 2 人员)") + private String type; + + @ApiModelProperty("用户信息") + private User userDTO; + private String userId; + private RiskPointInfo riskPointInfo; + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + @Override + public String getNodeId() { + return id + ""; + } + + @Override + public String getNodeParentId() { + return pid + ""; + } + + @Override + public void setChildrenNodes(List childrenNodes) { + children.addAll(childrenNodes); + children = children.stream().distinct().collect(Collectors.toList()); + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupPointVO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupPointVO.java new file mode 100644 index 0000000..3f6ca41 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupPointVO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.group.vo; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 风险点所属人员组对象VO + * + * @author lwh + * @date 2024-07-11 + */ +@Data +public class SysRiskGroupPointVO { + private static final long serialVersionUID = 1L; + + + @ApiModelProperty(value = "用户组ID", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备ID", dataType = "Long") + private Long targetId; + + public QueryWrapper genQuery() { + QueryWrapper query = new QueryWrapper<>(); + if (groupId != null) { + query.eq("group_id", groupId); + } + if (targetId != null) { + query.eq("target_id", targetId); + } + return query; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupRelUserVO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupRelUserVO.java new file mode 100644 index 0000000..5a95d82 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupRelUserVO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.group.vo; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 组人员管理对象VO + * + * @author lwh + * @date 2024-07-11 + */ +@Data +public class SysRiskGroupRelUserVO { + private static final long serialVersionUID = 1L; + + + @ApiModelProperty(value = "组ID", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + private Long userId; + + public QueryWrapper genQuery() { + QueryWrapper query = new QueryWrapper<>(); + if (groupId != null) { + query.eq("group_id", groupId); + } + if (userId != null) { + query.eq("user_id", userId); + } + return query; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskUserGroupVO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskUserGroupVO.java new file mode 100644 index 0000000..6363c3b --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskUserGroupVO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.group.vo; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.system.model.SysUserGroup; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 用户组信息对象VO + * + * @author lwh + * @date 2024-07-11 + */ +@Data +public class SysRiskUserGroupVO { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "用户组名称", dataType = "String") + private String groupName; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + private Long deptId; + @ApiModelProperty(value = "创建时间起始", dataType = "String") + private String startTime; + @ApiModelProperty(value = "创建时间结束", dataType = "String") + private String endTime; + @ApiModelProperty(value = "创建者ID", dataType = "Long") + private Long createId; + + public QueryWrapper genQuery() { + QueryWrapper query = new QueryWrapper<>(); + if (StrUtil.isNotEmpty(groupName)) { + query.like("a.group_name", groupName); + } + if (StrUtil.isNotEmpty(startTime)) { + query.ge("a.create_time", startTime); + } + if (StrUtil.isNotEmpty(endTime)) { + query.le("a.create_time", endTime); + } + if (deptId != null) { + query.eq("a.dept_id", deptId); + } + if (createId != null) { + query.eq("a.create_id", createId); + } + return query; + } +} diff --git a/casic-web/src/main/resources/doc/20250227.txt b/casic-web/src/main/resources/doc/20250227.txt new file mode 100644 index 0000000..daf4d4c --- /dev/null +++ b/casic-web/src/main/resources/doc/20250227.txt @@ -0,0 +1,68 @@ +1.权限配置检查 + 对应属性需配置为 security_admin + casic: + video: + admin: + role: security_admin +1.租户设定更新 + 创建租户设定角色 角色别名必须是tenantAdministrator + + 分配给管理员 需手动入库授权, sys_user表 role_id字段添加租户设定字段, + sys_ru_relation 添加用户绑定关系 + + INSERT INTO sys_tenant(ID, TENANT_NAME, TENANT_CODE, LINK_PERSON, TEL, CLEARDAY, FLAG, TS) VALUES (1, '航天二院', '001', NULL, NULL, NULL, '0', '2025-02-21 14:41:20'); + + ALTER TABLE sys_user_group ADD COLUMN tenant_id VARCHAR(64); + ALTER TABLE sys_group_device ADD COLUMN tenant_id VARCHAR(64); + ALTER TABLE sys_group_rel_user ADD COLUMN tenant_id VARCHAR(64); + ALTER TABLE device_group_info ADD COLUMN tenant_id VARCHAR(64); + update device_group_info set tenant_id = 1; + update sys_user set tenant_id = 1; + update sys_role set tenant_id = 1; + update sys_rm_relation set tenant_id = 1; + update sys_ru_relation set tenant_id = 1; + update sys_dept set tenant_id = 1; + update sys_user_group set tenant_id = 1; + update sys_group_device set tenant_id = 1; + update sys_group_rel_user set tenant_id = 1; + 添加租户ID 0 + +2.表risk_point_info 字段 secret_level值密级默认 0 设定 + +3.新增表 sys_user_risk_group sys_risk_group_rel_user sys_risk_group_point + +CREATE TABLE sys_user_risk_group +( + id numeric(20,0) NOT NULL, + group_name VARCHAR(256), + create_time date, + dept_id numeric(20,0), + create_id numeric(20,0), + description VARCHAR(256), + safe SMALLINT, + group_type SMALLINT, + tenant_id VARCHAR(64), + PRIMARY KEY (id) +); + +CREATE TABLE sys_risk_group_rel_user +( + id numeric(20,0) NOT NULL, + group_id numeric(20,0), + user_id numeric(20,0), + create_time date, + tenant_id VARCHAR(64) +); + +CREATE TABLE sys_risk_group_point +( + id numeric(20,0) NOT NULL, + group_id numeric(20,0), + create_time date, + target_id numeric(20,0), + tenant_id VARCHAR(64) +); + + + + diff --git a/casic-web/src/main/resources/doc/20250416.txt b/casic-web/src/main/resources/doc/20250416.txt new file mode 100644 index 0000000..14610e9 --- /dev/null +++ b/casic-web/src/main/resources/doc/20250416.txt @@ -0,0 +1,18 @@ +1.增加识别流开关 流媒体id 识别流国标号 + ALTER TABLE box_device_relation ADD COLUMN media_server_id VARCHAR(255); + ALTER TABLE box_device_relation ADD COLUMN recognition_gb VARCHAR(255); + ALTER TABLE box_device_relation ADD COLUMN recognition_stream_flag int; + + + + ALTER TABLE upload_log ADD COLUMN tenant_id VARCHAR(64); +2.增加字典值 mediaServerId + 对应值参考zlm中的mediaServerId 配置项 +3.更新box_device表以下字段类型为text + server_public_key + server_private_key + client_public_key + client_private_key + +4.casic.no-login-urls + 增加 /record/upload \ No newline at end of file diff --git a/casic-web/src/main/resources/doc/20250519.txt b/casic-web/src/main/resources/doc/20250519.txt new file mode 100644 index 0000000..6d70728 --- /dev/null +++ b/casic-web/src/main/resources/doc/20250519.txt @@ -0,0 +1,3 @@ +1.固定秘钥解析 + 配置项增加 + casic.client.privateKey \ No newline at end of file diff --git a/casic-web/src/main/resources/doc/20250522.md b/casic-web/src/main/resources/doc/20250522.md new file mode 100644 index 0000000..636b4df --- /dev/null +++ b/casic-web/src/main/resources/doc/20250522.md @@ -0,0 +1,80 @@ +## 一、数据库更新 + +1. 操作日志增加IP字段 + +``` +ALTER TABLE sys_operation_log ADD COLUMN IP VARCHAR(255); +``` + +2. 角色添加业务类型 + +``` +ALTER TABLE sys_role ADD COLUMN BIZ_TYPE VARCHAR(32) default 'normal' COMMENT '业务类型标识字段,用于区分不同业务模块的资源,比如三员 安全生产'; +``` + +3. 资源添加业务类型及相关字典值 + +``` +ALTER TABLE sys_resource ADD COLUMN BIZ_TYPE VARCHAR(32) default 'normal' COMMENT '业务类型标识字段,用于区分不同业务模块的资源,比如三员 安全生产'; + +INSERT INTO `sys_dict` (`ID`, `NUM`, `PID`, `NAME`, `TIPS`, `CODE`, `TENANT_ID`) VALUES (1925798590442455041, '0', 0, '业务分类', '业务分类', 'bizType', NULL); +INSERT INTO `sys_dict` (`ID`, `NUM`, `PID`, `NAME`, `TIPS`, `CODE`, `TENANT_ID`) VALUES (1925798590442455042, '0', 1925798590442455041, '普通业务', NULL, 'normal', NULL); +INSERT INTO `sys_dict` (`ID`, `NUM`, `PID`, `NAME`, `TIPS`, `CODE`, `TENANT_ID`) VALUES (1925798590505369602, '1', 1925798590442455041, '三员权限', NULL, 'audit', NULL); + +``` +系统三员角色从数据库初始化 bizType为audit 其他角色为normal +系统菜单资源数据修改,系统管理下所有菜单及按钮设置bizType为audit,其他业务功能设置为normal + +4. 增加操作审批表结构 + +CREATE TABLE sys_operation_application +( +id numeric(20,0) NOT NULL, +create_time datetime , +update_time datetime , +title varchar(255) , +json_context text , +status char(1), +operation_type varchar(64) , +operation_remark varchar(255) , +audit_remark varchar(255) , +tenant_id varchar(64) , +create_id numeric(20,0) , +audit_id numeric(20,0) , +PRIMARY KEY (id) +) + +业务操作类关系如下 +增加operationType字典 +user_add 用户新增 +user_update 用户修改 +user_delete 用户删除 +user_reset 密码重置 +user_freeze 用户冻结 +user_unfreeze 用户解冻 +user_roleAssign 用户角色分配 + +role_add 角色新增 +role_update 角色修改 +role_delete 角色删除 +role_funcAuthor 角色功能权限配置 +role_dataAuthor 角色数据权限配置 + +resource_add 资源新增 +resource_update 资源修改 +resource_delete 资源删除 + +dept_add 组织新增 +dept_update 组织修改 +dept_delete 组织删除 + +casic.tenant.excludes 配置项增加 ,sys_operation_application + +对应角色只能授权对应角色资源 +## 二、设备同步自动提取所属组织机构 +1.增加开启配置项 +casic.video.av.autoDept: true #默认开启 + + + + diff --git "a/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250113\346\225\260\346\215\256\345\272\223.txt" "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250113\346\225\260\346\215\256\345\272\223.txt" new file mode 100644 index 0000000..9b3fde9 --- /dev/null +++ "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250113\346\225\260\346\215\256\345\272\223.txt" @@ -0,0 +1,12 @@ +ALTER TABLE box_device +MODIFY COLUMN server_public_key VARCHAR(512), +MODIFY COLUMN server_private_key VARCHAR(1024), +MODIFY COLUMN client_public_key VARCHAR(512), +MODIFY COLUMN client_private_key VARCHAR(1024); + +ALTER TABLE sys_config MODIFY COLUMN VALUE TEXT; + + + +INSERT INTO sys_resource(ID, PID, CODE, P_CODE, P_CODES, NAME, ICON, URL, NUM, LEVELS, IS_MENU, TIPS, IS_OPEN, RESOURCE_TYPE, CREATE_USER, UPDATE_USER, CREATE_TIME, UPDATE_TIME, DEL_FLAG, TENANT_ID, STATUS) VALUES (1872184789440688129, 0, 'bigScreen', '0', '[0],', '安全生产智慧监管平台', '', '/bigScreen', 0, 1, '1', NULL, '0', '03', 1832137050074128386, NULL, '2024-12-26 07:36:52', NULL, '0', NULL, '0'); +INSERT INTO sys_resource(ID, PID, CODE, P_CODE, P_CODES, NAME, ICON, URL, NUM, LEVELS, IS_MENU, TIPS, IS_OPEN, RESOURCE_TYPE, CREATE_USER, UPDATE_USER, CREATE_TIME, UPDATE_TIME, DEL_FLAG, TENANT_ID, STATUS) VALUES (1879080561335627777, 105, 'sys_bsConfig', 'system', '[0],[system],', '大屏配置', 'icon-bs', '/sys/bsConfig', 0, 2, '1', NULL, '0', '03', 1832137050074128386, 1832137050074128386, '2025-01-14 08:18:12', '2025-01-14 08:25:05', '0', NULL, '0'); diff --git "a/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250120\351\205\215\347\275\256.txt" "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250120\351\205\215\347\275\256.txt" new file mode 100644 index 0000000..4d3700f --- /dev/null +++ "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250120\351\205\215\347\275\256.txt" @@ -0,0 +1,13 @@ +1.配置最大上传文件 max-file-size 更改为150 + spring: + servlet: + multipart: + max-file-size: 150MB + max-request-size: 80MB + nginx也需设置 +2.登录不拦截配置项 + casic: + no-login-urls: + 增加 ,/sync/device/** + + INSERT INTO `casic-production-safety`.`sys_config`(`ID`, `VALUE`, `TARGET_NAME`, `CLASS_NAME`, `DESCRIPTION`, `TENANT_ID`) VALUES (1879417287790792706, '[{\"monitorName\":\"casic01\",\"deviceTypeName\":\"枪机\",\"deptName\":\"203\",\"areaName\":\"成都A区\",\"longitude\":\"116.258555\",\"latitude\":\"39.908447\",\"secretLevelName\":\"内部\",\"deviceStatusName\":\"在线\",\"cameraIndexCode\":\"34020000001320000003\",\"nvrIndexCode\":\"34020000001110000002\",\"picture\":\"http://192.168.83.42:6909/safe-server//picture/download/undefined?token=2c1e8cb8-e3f0-4fb5-af4f-7f3e3ce75add\"},{\"monitorName\":\"casic04\",\"deviceTypeName\":\"枪机\",\"deptName\":\"203\",\"areaName\":\"永定路A区域\",\"longitude\":\"116.258555\",\"latitude\":\"39.908447\",\"secretLevelName\":\"公开\",\"deviceStatusName\":\"在线\",\"cameraIndexCode\":\"34020000001320000008\",\"nvrIndexCode\":\"34020000001110000002\",\"picture\":\"http://192.168.83.42:6909/safe-server//picture/download/undefined?token=2c1e8cb8-e3f0-4fb5-af4f-7f3e3ce75add\"},{\"monitorName\":\"casic01\",\"deviceTypeName\":\"枪机\",\"deptName\":\"203\",\"areaName\":\"成都A区\",\"longitude\":\"116.258555\",\"latitude\":\"39.908447\",\"secretLevelName\":\"内部\",\"deviceStatusName\":\"在线\",\"cameraIndexCode\":\"34020000001320000003\",\"nvrIndexCode\":\"34020000001110000002\",\"picture\":\"http://192.168.83.42:6909/safe-server//picture/download/undefined?token=2c1e8cb8-e3f0-4fb5-af4f-7f3e3ce75add\"},{\"monitorName\":\"casic04\",\"deviceTypeName\":\"枪机\",\"deptName\":\"203\",\"areaName\":\"永定路A区域\",\"longitude\":\"116.258555\",\"latitude\":\"39.908447\",\"secretLevelName\":\"公开\",\"deviceStatusName\":\"在线\",\"cameraIndexCode\":\"34020000001320000008\",\"nvrIndexCode\":\"34020000001110000002\",\"picture\":\"http://192.168.83.42:6909/safe-server//picture/download/undefined?token=2c1e8cb8-e3f0-4fb5-af4f-7f3e3ce75add\"},{\"monitorName\":\"casic01\",\"deviceTypeName\":\"枪机\",\"deptName\":\"203\",\"areaName\":\"成都A区\",\"longitude\":\"116.258555\",\"latitude\":\"39.908447\",\"secretLevelName\":\"内部\",\"deviceStatusName\":\"在线\",\"cameraIndexCode\":\"34020000001320000003\",\"nvrIndexCode\":\"34020000001110000002\"},{\"monitorName\":\"casic04\",\"deviceTypeName\":\"枪机\",\"deptName\":\"203\",\"areaName\":\"永定路A区域\",\"longitude\":\"116.258555\",\"latitude\":\"39.908447\",\"secretLevelName\":\"公开\",\"deviceStatusName\":\"在线\",\"cameraIndexCode\":\"34020000001320000008\",\"nvrIndexCode\":\"34020000001110000002\"}]', 'casic.bg.config', NULL, NULL, NULL); diff --git "a/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250121.txt" "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250121.txt" new file mode 100644 index 0000000..f5df373 --- /dev/null +++ "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250121.txt" @@ -0,0 +1,2 @@ +ALTER TABLE box_device ADD COLUMN path VARCHAR(512); +ALTER TABLE box_device ADD COLUMN version VARCHAR(512); \ No newline at end of file diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java new file mode 100644 index 0000000..1ca5eb1 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java @@ -0,0 +1,63 @@ +package com.casic.missiles.modular.device.enums; + +/** + * wvp设备类型转换 + * + * @author lwh + * @Date 2017年1月10日 下午9:54:13 + */ +public enum AvDeptEnum { + + DEPT0("0066", "801",0L), + DEPT1("0059", "699厂",1L), + DEPT2("0055", "283厂",1L), + DEPT3("0022", "201所",1L), + DEPT4("0027", "206所",1L), + DEPT5("0013", "23所",1L); + + String code; + String message; + Long deptId; + AvDeptEnum(String code, String message, Long deptId) { + this.code = code; + this.message = message; + this.deptId = deptId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public static AvDeptEnum valueOfCode(String value) { + if (value == null) { + return null; + } else { + for (AvDeptEnum ms : AvDeptEnum.values()) { + if (ms.getCode().equals(value)) { + return ms; + } + } + return null; + } + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java new file mode 100644 index 0000000..573d0e2 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.task; + +import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; + +public class Test { + public static void main(String[] args) { + System.out.println(AvStatusTypeEnum.valueOfType(new Integer(1)).getMessage()); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java new file mode 100644 index 0000000..7c06c67 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java @@ -0,0 +1,77 @@ +package com.casic.missiles.modular.device.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpSession; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class RiskSyncController extends BaseController { + @Resource + private IClientAuthService clientAuthService; + @Resource + private AbstractDeptService deptService; + @Resource + private AbstractUserService userService; + @PostMapping("/client/login") + @ResponseBody + public ResponseData login(@RequestBody RiskLoginForm deviceLoginForm, HttpSession session) { + return clientAuthService.login(deviceLoginForm, session); + } + + /** + * 全量组织信息读取 + * + * @return + */ + @PostMapping("/dept/list") + @ResponseBody + public ResponseDataDTO> dept() { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = deptService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量用户信息读取 + * + * @return + */ + @PostMapping("/user/list") + @ResponseBody + public ResponseDataDTO> user() { + //todo 此处租户拦截需移除 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量设备信息读取 + * + * @return + */ + @PostMapping("/device/list") + @ResponseBody + public ResponseDataDTO> device() { + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java new file mode 100644 index 0000000..5e5b890 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class UserSyncController extends BaseController { + + @Resource + private IBusDeviceInfoService busDeviceInfoService; + + /** + * 登录用户授权设备权限查看 + * @return + */ + @GetMapping("/device/permissions") + @ResponseBody + public ResponseDataDTO> devicePermissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } + + /** + * 登录用户风险点授权查询 + * @return + */ + @GetMapping("/permissions") + @ResponseBody + public ResponseDataDTO> permissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java new file mode 100644 index 0000000..07b8df8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +/** + * 设备登录接口 + */ +@Data +public class RiskLoginForm { + /** + * 设备编码 + */ + private String clientId; + + /** + * 时间戳 + */ + private Long time; + + /** + * 加密后数据 加密格式sn+时间戳 时效性为6小时 + */ + private String secret; + + /** + * 设备登录注册IP + */ + private String ip; + + /** + * 设备登录注册port + */ + private String port; +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java new file mode 100644 index 0000000..40fdb4b --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.device.service; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; + +import javax.servlet.http.HttpSession; + +public interface IClientAuthService { + /** + * @param deviceLoginForm + * @param session + * @return + */ + ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session); +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java new file mode 100644 index 0000000..576e857 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.device.service.impl; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import cn.hutool.jwt.JWT; +import cn.hutool.jwt.JWTUtil; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.util.IRiskCacheUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpSession; +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Service +public class ClientAuthServiceImpl implements IClientAuthService { + @Value("${casic.client.privateKey:MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALKcwHHOg0F6Zkq7GOVnOnTgvH9vSPXFFTOcEqOVBIBPBz7UNrEGkp1PhZ+oC4WVJAsDuot2e1fDZy9QS9HF92MmnYp9kuQRhGZjHctPnVZ0Kai5BES0ytHqPeauLyNXxOOS0YKYEUwpft4Z5Azw7bj3JWNvLrnTZvNld6FDvTslAgMBAAECgYAqN/kZLYpC+O6i7XSmDO95XwHPUXu6dDpdt5+EQR4OQh/hTwIaeAZB3uEj6vHGQomBfQEkI/5lsU97lIxHanbd+Hro7JyIhsGD5LR5XnZHVKzFiZW62OIU6FI9dlQNN8miiblnmyDwiMA3okaHl0O7qQjZ+IvY2csgmJc7AXpPpQJBAOhrhcfWFcgffj2O6HYNlBLFfbboc/ZzrEADDXKnxRSHlo5o8W+6gylG/L2NGtbag5S68B9VYzdkSQ1++5C+Ws8CQQDEu7h311PLEiKgqzGHpjzadQETmt/jMadaKQmT0TZwNVi6X8lR17U5hF8dAqZzUzr9kUC0HRIZhg4Uv1v3W3fLAkB4YPhxgJjXhjhEefg87Nt8vX1Xdx5Yz6CvpuUYNX0GHRQFvqUOUXQNtQ7CvorgLV1pc0lbcUZqMi8EJnj1hyJRAkEAjHXWm8GiMt+M15fCsi3vTq2xChVOekBuUsHv85iwvGZqJg7ThtpyqlEnM2g7/STUfkvhnXcQACclEI0blTy6BwJAPmFyhU+d0ejVpbc53TdrL2HqYYUHi/tTy/dtUa7lbypzdwwJ2M1Tv5PE8sQxr9tgMbebfxVb/RFKdiCCtzC4ng==}") + private String privateKey; + + @Override + public ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session) { + //固定秘钥解析 + try { + String str = RSAUtils.decrypt(deviceLoginForm.getSecret(), privateKey); + Long time = Long.valueOf(StrUtil.split(str, "_").get(1)); + //边缘盒子时差与服务时差不可超过24小时 + if (time == null || System.currentTimeMillis() - time > 3600 * 24 * 1000) { + return ResponseData.error("请求时间超时"); + } + deviceLoginForm.setTime(time); + } catch (Exception e) { + e.printStackTrace(); + return ResponseData.error("设备解析异常!"); + } + + try { + String token = this.createJwtToken(deviceLoginForm); + IRiskCacheUtil.put(token, token); + return ResponseData.success(token); + } catch (Exception e) { + log.error("设备登录异常:{}", e.getMessage()); + return ResponseData.error("登录异常,请联系管理员"); + } +} + /** + * token创建 + * + * @param loginForm 登录信息 + * @param device 设备信息 + * @return + * @throws Exception + */ + public String createJwtToken(RiskLoginForm loginForm) throws Exception { + Map payload = new HashMap<>(); + payload.put("clientId", loginForm.getClientId()); // 设备编号 + payload.put("time", loginForm.getTime()); // 请求时间 + + //RSA 解密 + String str = RSAUtils.decrypt(loginForm.getSecret(), privateKey); + String key = loginForm.getClientId()+"_" + loginForm.getTime() ; + if (!key.equals(str)) { + //秘钥验证失败 + throw new ServiceException(500,"秘钥验证失败"); + } + +// long exp = new Date().getTime() + 2 * 3600000; // 2小时后的时间戳 +// payload.put("exp", exp); + + // 创建JWT + String jwt = JWTUtil.createToken(payload, "token-203-202405".getBytes()); + + return jwt; + } + + /** + * token解析 + * + * @param jwtStr token + * @return + * @throws Exception + */ + public static RiskLoginForm parseToken(String jwtStr){ + JWT jwtObj = new JWTUtil().parseToken(jwtStr); + RiskLoginForm deviceLoginForm = new RiskLoginForm(); + deviceLoginForm.setClientId(Convert.toStr(jwtObj.getPayload("clientId"))); + return deviceLoginForm; + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java new file mode 100644 index 0000000..0e91ac8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.util; +import cn.hutool.cache.Cache; +import cn.hutool.cache.CacheUtil; +/** + * token有效 + */ +public class IRiskCacheUtil { + /** + * 1小时内不活跃 会踢掉 + */ + private static Cache fifoCache = CacheUtil.newFIFOCache(1000, 1000 * 60 * 60); + + public static void put(String key, String value) { + fifoCache.put(key, value); + } + + public static String get(String key) { + return fifoCache.get(key); + } + + public static void remove(String key) { + fifoCache.remove(key); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java new file mode 100644 index 0000000..805c32a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceGroupDict extends AbstractDictMap { + + @Override + public void init() { + //检索条件 + put("groupName", "分组名称"); + put("startTime", "起始时间"); + put("endTime", "结束时间"); + //新增修改属性 + put("cameraIds", "设备国标号"); + put("personIds", "人员主键集合"); + put("description","备注"); + put("id","主键"); + put("ids","主键集合"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java new file mode 100644 index 0000000..895fbd9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceQueryDict extends AbstractDictMap { + + @Override + public void init() { + put("devType", "类型查询"); + put("keyword", "设备名称"); + put("deptName", "所属单位"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java new file mode 100644 index 0000000..88da6df --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.device.util; + +public class DeviceScopeUtil { +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java new file mode 100644 index 0000000..2e3e478 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.device.controller; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.auth.dto.DeviceLoginForm; +import com.casic.missiles.modular.auth.util.ICacheUtil; +import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; +import com.casic.missiles.modular.device.service.IAlarmRecordService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +@Api(tags = "告警记录") +@RestController +@RequestMapping("/record") +public class AlarmUploadController extends BaseController { + + private final IAlarmRecordService alarmRecordService; + private final IDeviceAuthService deviceAuthService; + public AlarmUploadController(IAlarmRecordService alarmRecordService, IDeviceAuthService deviceAuthService) { + this.alarmRecordService = alarmRecordService; + this.deviceAuthService = deviceAuthService; + } + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } + @BussinessLog(value = "告警记录上报接口") + @ApiOperation(value = "告警记录上报接口") + @PostMapping(value = "/upload") + public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return createAuthError(); + } + alarmRecordService.upload(alarmRecord); + return ResponseDataDTO.success(); + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java new file mode 100644 index 0000000..3f1c189 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class RecognitionStreamDTO { + private Long id; + private String recognitionStreamFlag; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java new file mode 100644 index 0000000..fa5ae4a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java @@ -0,0 +1,167 @@ +package com.casic.missiles.modular.group.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IRiskPointInfoService; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.group.vo.SysRiskGroupPointVO; +import com.casic.missiles.modular.group.vo.SysRiskGroupRelUserVO; +import com.casic.missiles.modular.group.vo.SysRiskUserGroupVO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import com.casic.missiles.modular.system.vo.SysGroupRelUserVO; +import com.casic.missiles.modular.system.vo.SysUserGroupVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.ibatis.annotations.Param; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; + +/** + * 风险点组信息Controller + * + * @author lwh + * @date 2024-07-11 + */ +@Api(tags = "风险点组信息") +@RestController +@RequestMapping("/sys/risk/group") +public class SysUserRiskGroupController extends BaseController { + private final IRiskPointInfoService riskPointInfoService; + private final ISysUserRiskGroupService sysUserGroupService; + private final AbstractPermissionContext permissionContext; + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysUserRiskGroupController(IRiskPointInfoService riskPointInfoService, ISysUserRiskGroupService sysUserGroupService, AbstractPermissionContext permissionContext, ISysRiskGroupRelUserService sysGroupRelUserService) { + this.riskPointInfoService = riskPointInfoService; + this.sysUserGroupService = sysUserGroupService; + this.permissionContext = permissionContext; + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @BussinessLog(value = "风险点分组查询") + @ApiOperation(value = "风险点分组查询", hidden = true) + @GetMapping(value = "/list") + public ResponseDataDTO> list(SysRiskUserGroupVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysUserGroupService.list(query)); + } + + @BussinessLog(value = "分组人员列表查询") + @ApiOperation(value = "分组人员列表查询") + @GetMapping(value = "/groupUserList") + public ResponseDataDTO> groupUserList(SysRiskGroupRelUserVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysGroupRelUserService.list(query)); + } + + @BussinessLog(value = "风险点分组人员查询") + @ApiOperation(value = "风险点分组人员分页查询") + @GetMapping(value = "/groupUserPage") + public ResponseDataDTO> listPage(SysRiskGroupRelUserVO sysGroupRelUserVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysGroupRelUserVO.genQuery(); + List relUsers = sysGroupRelUserService.selectSysGroupRelUserPage(page, query); + page.setRecords(relUsers); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "用户分组批量新增") + @ApiOperation(value = "批量新增接口") + @PostMapping(value = "/batch-add") + public ResponseDataDTO batchAdd(@RequestBody GroupUserRelDTO relDTO) { + sysGroupRelUserService.batchAdd(relDTO); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组人员删除") + @ApiOperation(value = "用户组人员删除接口") + @GetMapping(value = "/user/delete") + public ResponseDataDTO userDel(@Param("用户组人员关联主键") String id) { + sysGroupRelUserService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "风险点分组分页查询") + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(SysRiskUserGroupVO sysUserGroupVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysUserGroupVO.genQuery(); + + List sysUserGroups = sysUserGroupService.selectSysUserGroupPage(page, query); + page.setRecords(sysUserGroups); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "风险点分组新增") + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.save(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组修改") + @ApiOperation(value = "修改接口") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.updateById(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组删除") + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + sysUserGroupService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "批量删除") + @ApiOperation(value = "批量删除", hidden = true) + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + sysUserGroupService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "详情查询") + @ApiOperation(value = "详情查询", hidden = true) + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(sysUserGroupService.getById(id)); + } + + @BussinessLog(value = "用户树") + @ApiOperation(value = "用户树查询") + @GetMapping(value = "/person/tree") + public ResponseDataDTO> personTree() { + return ResponseDataDTO.success(sysUserGroupService.personTree()); + } + + @BussinessLog(value = "风险点树查询") + @ApiOperation(value = "风险点树查询") + @GetMapping(value = "/tree") + public ResponseDataDTO> tree(String riskType) { + return ResponseDataDTO.success(riskPointInfoService.tree(riskType)); + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java new file mode 100644 index 0000000..419eb27 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备所属人员组 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupPointMapper extends BaseMapper { +/** +* 设备所属人员组 分页检索 +*/ +List selectSysGroupDevicePage(@Param("page") Page page, @Param("ew" ) QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java new file mode 100644 index 0000000..eb41227 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 组人员管理 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupRelUserMapper extends BaseMapper { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java new file mode 100644 index 0000000..e8352df --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.system.model.SysUserGroup; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 用户组信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysUserRiskGroupMapper extends BaseMapper { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml new file mode 100644 index 0000000..6fa6a4d --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + id , + group_id as groupId , + create_time as createTime , + target_Id as targetId + + + a.id , + a.group_id + as groupId , + a.create_time + as createTime , + a.target_Id + as targetId + + + + + + and group_id = #{request.groupId} + + + and device_id = #{request.deviceId} + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml new file mode 100644 index 0000000..a627546 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + id , + group_id as groupId , + user_id as userId , + create_time as createTime + + + a.id, + a.group_id + as groupId , + a.user_id + as userId , + a.create_time + as createTime + + + + + + and group_id = #{request.groupId} + + + and user_id = #{request.userId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml new file mode 100644 index 0000000..3245136 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + id, + group_name as groupName , + create_time as createTime , + dept_id as deptId , + create_id as createId + + + a.id,a.group_name as groupName , + a.create_time + as createTime , + a.dept_id + as deptId , + a.create_id + as createId,a.description + + + + + + and group_name like concat('%',#{request.groupName},'%') + + + and dept_id = #{request.deptId} + + + and create_id = #{request.createId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java new file mode 100644 index 0000000..e44328f --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class GroupRiskRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("风险点集合") + private List targetIds; + @ApiModelProperty("用户ID集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java new file mode 100644 index 0000000..f8758bf --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class RiskGroupUserRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("设备集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java new file mode 100644 index 0000000..b386d5b --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java @@ -0,0 +1,53 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 风险点所属组 sys_risk_group_point + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_risk_group_point") +public class SysRiskGroupPoint extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableId("id") + private Long id; + + @ApiModelProperty(value = "用户组ID", dataType = "Long") + @TableField("group_id") + private Long groupId; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty(value = "风险点ID", dataType = "Long") + @TableField("target_id") + private Long targetId; + + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; + + @Override + public String toString() { + return "SysGroupDevice{" + + "id=" + id + + "groupId=" + groupId + + "createTime=" + createTime + + "targetId=" + targetId + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java new file mode 100644 index 0000000..949caa3 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java @@ -0,0 +1,55 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 组人员管理对象 sys_group_rel_user + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_risk_group_rel_user") +public class SysRiskGroupRelUser extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + + @ApiModelProperty(value = "组ID", dataType = "Long") + @TableField("group_id") + private Long groupId; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + @TableField("user_id") + private Long userId; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + @ApiModelProperty(value = "用户姓名", dataType = "String") + @TableField(exist = false) + private String realName; + + @ApiModelProperty(value = "用户名", dataType = "String") + @TableField(exist = false) + private String account; + + @Override + public String toString() { + return "SysGroupRelUser{" + + "id=" + id + + "groupId=" + groupId + + "userId=" + userId + + "createTime=" + createTime + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java new file mode 100644 index 0000000..1b73dc0 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java @@ -0,0 +1,97 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 危险点分组组信息对象 sys_user_risk_group + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_user_risk_group") +public class SysUserRiskGroup extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableId("id") + private Long id; + + @ApiModelProperty(value = "组名称", dataType = "String", required = true) + @TableField("group_name") + private String groupName; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty(value = "所属组织(保留字段)", dataType = "Long") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty(value = "描述信息", dataType = "String") + @TableField("description") + private String description; + + @ApiModelProperty(value = "密级字典", dataType = "String") + @TableField("safe") + private int safe; + + @ApiModelProperty(value = "创建者ID", dataType = "Long") + @TableField("create_id") + private Long createId; + + + @ApiModelProperty(value = "类型(1 危险点 2 重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "Long") + @TableField("group_type") + private String groupType; + @TableField(exist = false) + private String groupTypeName; + /** + * 风险点集合 + */ + @ApiModelProperty(value = "风险点集合(逗号拼接)", dataType = "String") + @TableField(exist = false) + private String pointIds; + + @ApiModelProperty(value = "数量", dataType = "Long") + @TableField(exist = false) + private Integer targetNum; + /** + * 用户集合 + */ + @ApiModelProperty(value = "用户集合(逗号拼接)", dataType = "String") + @TableField(exist = false) + private String personIds; + + @ApiModelProperty(value = "用户名称", dataType = "String") + @TableField(exist = false) + private String realName; + + @ApiModelProperty(value = "用户名", dataType = "String") + @TableField(exist = false) + private String account; + + @ApiModelProperty(value = "密级字典名称", dataType = "String") + @TableField(exist = false) + private String safeName; + + @Override + public String toString() { + return "SysUserGroup{" + + "id=" + id + + "groupName=" + groupName + + "createTime=" + createTime + + "deptId=" + deptId + + "createId=" + createId + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java new file mode 100644 index 0000000..4657ce4 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.device.dto.GroupRelDTO; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; + +import java.util.List; + + +/** + *

+ * 设备所属人员组 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysRiskGroupPointService extends IService { + /** + * 设备所属人员组 分页检索 + */ + List selectSysGroupDevicePage(Page page, QueryWrapper query); + + /** + * 设备组批量新增 + * + * @param relDTO + */ + void batchAdd(GroupRiskRelDTO relDTO); + + + /** + * 增量更新 + * @param groupId + * @param deviceIds + */ + void batchIncremental(Long groupId, List deviceIds); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java new file mode 100644 index 0000000..591eef2 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; + +import java.util.List; + + +/** + *

+ * 组人员管理 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysRiskGroupRelUserService extends IService { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(Page page, QueryWrapper query); + + void batchAdd(GroupUserRelDTO relDTO); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java new file mode 100644 index 0000000..1e0889c --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; + +import java.util.List; + + +/** + *

+ * 用户组信息 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysUserRiskGroupService extends IService { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(Page page, QueryWrapper query); + + List personTree(); + + /** + * 创建用户组 + * + * @param sysUserGroup 用户组信息 + * @param userIds 用户信息 + */ + void createSysUserGroup(SysUserRiskGroup sysUserGroup, List userIds); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java new file mode 100644 index 0000000..6839887 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java @@ -0,0 +1,118 @@ +package com.casic.missiles.modular.group.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +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.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.group.dao.SysRiskGroupPointMapper; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import com.casic.missiles.modular.group.service.ISysRiskGroupPointService; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + + +/** + *

+ * 设备所属人员组 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysRiskGroupPointServiceImpl extends ServiceImpl implements ISysRiskGroupPointService { + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysRiskGroupPointServiceImpl(ISysRiskGroupRelUserService sysGroupRelUserService) { + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @Override + public List selectSysGroupDevicePage(Page page, QueryWrapper query) { + return this.baseMapper.selectSysGroupDevicePage(page, query); + } + + @Transactional + @Override + public void batchAdd(GroupRiskRelDTO relDTO) { + + if (CollectionUtil.isEmpty(relDTO.getTargetIds())) { + ServiceException serviceException = new ServiceException(500, "添加不能为空!"); + throw serviceException; + } + + //删除 + QueryWrapper query = new QueryWrapper<>(); + query.eq("group_id", relDTO.getGroupId()); + this.remove(query); + + //保存分组与危险点对应关系 + List groupDevices = new ArrayList<>(); + for (Long deviceId : relDTO.getTargetIds()) { + SysRiskGroupPoint sysGroupDevice = new SysRiskGroupPoint(); + sysGroupDevice.setTargetId(deviceId); + sysGroupDevice.setGroupId(relDTO.getGroupId()); + sysGroupDevice.setCreateTime(new Date()); + groupDevices.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(groupDevices); + + //批量保存风险点与用户关系 + GroupUserRelDTO groupUserRelDTO = new GroupUserRelDTO(); + groupUserRelDTO.setGroupId(relDTO.getGroupId()); + groupUserRelDTO.setUserIds(relDTO.getUserIds()); + sysGroupRelUserService.batchAdd(groupUserRelDTO); + + } + + @Override + public void batchIncremental(Long groupId, List deviceIds) { + List groupDevices = this.list(new LambdaQueryWrapper().eq(SysRiskGroupPoint::getGroupId, groupId)); + if (CollectionUtil.isEmpty(groupDevices)) { + saveDevices(groupId, deviceIds); + } else { + List oldDevices = groupDevices.stream().map(SysRiskGroupPoint::getTargetId).collect(Collectors.toList()); + List delIds = CollectionUtil.subtractToList(oldDevices, deviceIds); + List saveDevices = CollectionUtil.subtractToList(deviceIds, oldDevices); + + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.eq(SysRiskGroupPoint::getGroupId, groupId); + delQuery.in(SysRiskGroupPoint::getTargetId, delIds); + if (CollectionUtil.isNotEmpty(delIds)) { + this.remove(delQuery); + } + saveDevices(groupId, saveDevices); + } + } + + private void saveDevices(Long groupId, List saveDevices) { + List saves = new ArrayList<>(); + for (Long deviceId : saveDevices) { + SysRiskGroupPoint sysGroupDevice = new SysRiskGroupPoint(); + sysGroupDevice.setTargetId(deviceId); + sysGroupDevice.setGroupId(groupId); + sysGroupDevice.setCreateTime(new Date()); + saves.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(saves); + } + + private void saveOrUpdateBatchList(List groupDevices) { + for (SysRiskGroupPoint groupDevice : groupDevices) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysRiskGroupPoint::getGroupId, groupDevice.getGroupId()); + query.eq(SysRiskGroupPoint::getTargetId, groupDevice.getTargetId()); + this.saveOrUpdate(groupDevice, query); + } + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java new file mode 100644 index 0000000..83cd76a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.group.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +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.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.group.dao.SysRiskGroupPointMapper; +import com.casic.missiles.modular.group.dao.SysRiskGroupRelUserMapper; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.system.dao.SysGroupRelUserMapper; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + + +/** + *

+ * 组人员管理 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysRiskGroupRelUserServiceImpl extends ServiceImpl implements ISysRiskGroupRelUserService { + @Override + public List selectSysGroupRelUserPage(Page page, QueryWrapper query) { + return this.baseMapper.selectSysGroupRelUserPage(page, query); + } + + @Transactional + @Override + public void batchAdd(GroupUserRelDTO relDTO) { + if (CollectionUtil.isEmpty(relDTO.getUserIds())) { + ServiceException serviceException = new ServiceException(500, "添加不能为空!"); + throw serviceException; + } + //删除 + QueryWrapper query = new QueryWrapper<>(); + query.eq("group_id",relDTO.getGroupId()); + this.remove(query); + //添加设备信息 + List groupDevices = new ArrayList<>(); + for (Long deviceId : relDTO.getUserIds()) { + SysRiskGroupRelUser sysGroupDevice = new SysRiskGroupRelUser(); + sysGroupDevice.setUserId(deviceId); + sysGroupDevice.setGroupId(relDTO.getGroupId()); + sysGroupDevice.setCreateTime(new Date()); + groupDevices.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(groupDevices); + } + + private void saveOrUpdateBatchList(List groupDevices) { + for (SysRiskGroupRelUser groupDevice : groupDevices) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysRiskGroupRelUser::getGroupId, groupDevice.getGroupId()); + query.eq(SysRiskGroupRelUser::getUserId, groupDevice.getUserId()); + this.saveOrUpdate(groupDevice, query); + } + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java new file mode 100644 index 0000000..b3bb9a8 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java @@ -0,0 +1,246 @@ +package com.casic.missiles.modular.group.service.impl; + +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.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.modular.data.constants.DataConstants; +import com.casic.missiles.modular.group.dao.SysUserRiskGroupMapper; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupPointService; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.tree.RiskGroupDefaultTreeBuildFactory; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + + +/** + *

+ * 用户组信息 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysUserRiskGroupServiceImpl extends ServiceImpl implements ISysUserRiskGroupService { + @Lazy + @Resource + private ISysRiskGroupPointService sysRiskGroupPointService; + private final AbstractPermissionContext abstractPermissionContext; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_USER = "2"; + private final AbstractDictService dictService; + @Lazy + @Resource + private ISysRiskGroupRelUserService relUserService; + + public SysUserRiskGroupServiceImpl(AbstractPermissionContext abstractPermissionContext, AbstractDictService dictService) { + this.abstractPermissionContext = abstractPermissionContext; + this.dictService = dictService; + } + + @Override + public List selectSysUserGroupPage(Page page, QueryWrapper query) { + //分组过滤当前权限 + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + query.in("a.dept_id", dataScope.getDeptIds()); + } + List riskGroups = this.baseMapper.selectSysUserGroupPage(page, query); + for (SysUserRiskGroup riskGroup : riskGroups) { + wrapperInfo(riskGroup); + } + return riskGroups; + } + + private void wrapperInfo(SysUserRiskGroup riskGroup) { + riskGroup.setSafeName(dictService.getDictNameByCode(DataConstants.DICT_SECRET_LEVEL_TYPE, riskGroup.getSafe() + "")); + //查询关联设备 + LambdaQueryWrapper deviceQuery = new LambdaQueryWrapper<>(); + deviceQuery.eq(SysRiskGroupPoint::getGroupId, riskGroup.getId()); + List devices = sysRiskGroupPointService.list(deviceQuery); + if (devices != null) { + List deviceList = devices.stream().map(SysRiskGroupPoint::getTargetId).collect(Collectors.toList()); + riskGroup.setPointIds(StrUtil.join(",", deviceList)); + riskGroup.setTargetNum(deviceList.size()); + } + + riskGroup.setGroupTypeName(dictService.getDictNameByCode(DataConstants.dangerAssessmentType, riskGroup.getGroupType())); + //查询关联人员 + LambdaQueryWrapper personQuery = new LambdaQueryWrapper<>(); + personQuery.eq(SysRiskGroupRelUser::getGroupId, riskGroup.getId()); + List persons = relUserService.list(personQuery); + if (persons != null) { + List personIds = persons.stream().map(SysRiskGroupRelUser::getUserId).collect(Collectors.toList()); + riskGroup.setPersonIds(StrUtil.join(",", personIds)); + } + } + + private void setGroupInfo(SysUserRiskGroup entity) { + if (StrUtil.isNotEmpty(entity.getPointIds())) { + entity.setTargetNum(StrUtil.split(entity.getPointIds(), ",").size()); + } else { + entity.setTargetNum(0); + } + } + + @Override + public boolean save(SysUserRiskGroup entity) { + AuthUser authUser = abstractPermissionContext.getAuthService().getLoginUser(); + entity.setCreateTime(new Date()); + entity.setCreateId(authUser.getId()); + if (entity.getDeptId() == null) { + entity.setDeptId(authUser.getDeptId()); + } + setGroupInfo(entity); + super.save(entity); + batchSave(entity, entity.getId()); + return true; + } + + @Override + public boolean updateById(SysUserRiskGroup entity) { + AuthUser authUser = abstractPermissionContext.getAuthService().getLoginUser(); + entity.setCreateTime(new Date()); + entity.setCreateId(authUser.getId()); + if (entity.getDeptId() == null) { + entity.setDeptId(authUser.getDeptId()); + } + setGroupInfo(entity); + super.updateById(entity); + batchSave(entity, entity.getId()); + return true; + } + + /** + * 数据转换 + * + * @param entity + * @param groupId + */ + private void batchSave(SysUserRiskGroup entity, Long groupId) { + GroupRiskRelDTO groupRelDTO = new GroupRiskRelDTO(); + groupRelDTO.setGroupId(groupId); + if (StrUtil.isNotEmpty(entity.getPointIds())) { + long[] longs = StrUtil.splitToLong(entity.getPointIds(), ","); + List devices = new ArrayList<>(); + for (long aLong : longs) { + devices.add(aLong); + } + groupRelDTO.setTargetIds(devices); + } + if (StrUtil.isNotEmpty(entity.getPersonIds())) { + List persons = new ArrayList<>(); + long[] longs = StrUtil.splitToLong(entity.getPersonIds(), ","); + + for (long aLong : longs) { + persons.add(aLong); + } + groupRelDTO.setUserIds(persons); + } + sysRiskGroupPointService.batchAdd(groupRelDTO); + } + + @Override + public List personTree() { + + //查询可见组织 + DataScope scope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + + LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { + deptQuery.in(Dept::getId, scope.getDeptIds()); + } + deptQuery.orderByAsc(Dept::getNum); + + List deptList = abstractPermissionContext.getDeptService().list(deptQuery); + List deptDTOS = new ArrayList<>(); + List rootIds = new ArrayList<>(); + Set normalIds = new HashSet<>(); + for (Dept dept : deptList) { + RiskGroupDeptDTO deptDTO = new RiskGroupDeptDTO(); + deptDTO.setPid(dept.getPid()); + deptDTO.setId(dept.getId()); + deptDTO.setFullName(dept.getFullName()); + deptDTO.setName(dept.getSimpleName()); + deptDTOS.add(deptDTO); + deptDTO.setType(NODE_TYPE_DEPT); + normalIds.add(dept.getId()); + + //挂载设备信息 + LambdaQueryWrapper deviceQuery = new LambdaQueryWrapper<>(); + deviceQuery.eq(User::getDeptId, deptDTO.getId()); + deviceQuery.eq(User::getStatus, "1"); + List deviceInfos = abstractPermissionContext.getUserService().list(deviceQuery); + + deptDTO.setChildrenNodes(deviceInfos.stream().map(this::createDeptDTO).collect(Collectors.toList())); + } + + for (RiskGroupDeptDTO deptDTO : deptDTOS) { + if (!normalIds.contains(deptDTO.getPid())) { + rootIds.add(deptDTO.getPid()); + } + } + + //过滤根节点,支持多根展示 + RiskGroupDefaultTreeBuildFactory abstractTreeBuildFactory = new RiskGroupDefaultTreeBuildFactory(); + List newTree = new ArrayList<>(); + rootIds = rootIds.stream().distinct().collect(Collectors.toList()); + for (Long rootId : rootIds) { + abstractTreeBuildFactory.setRootId(rootId + ""); + newTree.addAll(abstractTreeBuildFactory.doTreeBuild(deptDTOS)); + } + + return newTree; + } + + @Transactional + @Override + public void createSysUserGroup(SysUserRiskGroup sysUserGroup, List userIds) { + this.baseMapper.insert(sysUserGroup); + GroupUserRelDTO relDTO = new GroupUserRelDTO(); + relDTO.setGroupId(sysUserGroup.getId()); + relDTO.setUserIds(userIds); + relUserService.batchAdd(relDTO); + } + + + /** + * 创建节点 + * + * @param userInfo 用户信息 + * @return + */ + private GroupDeptDTO createDeptDTO(User userInfo) { + GroupDeptDTO deptDTO = new GroupDeptDTO(); + deptDTO.setType(NODE_TYPE_USER); + deptDTO.setId(userInfo.getId()); + deptDTO.setPid(userInfo.getDeptId()); + deptDTO.setUserDTO(userInfo); + deptDTO.setName(userInfo.getName()); + deptDTO.setFullName(userInfo.getName()); + deptDTO.setUserId(userInfo.getId() + ""); + return deptDTO; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/tree/RiskGroupDefaultTreeBuildFactory.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/tree/RiskGroupDefaultTreeBuildFactory.java new file mode 100644 index 0000000..69c18ad --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/tree/RiskGroupDefaultTreeBuildFactory.java @@ -0,0 +1,30 @@ +package com.casic.missiles.modular.group.tree; + +import com.casic.missiles.core.treebuild.DefaultTreeBuildFactory; +import com.casic.missiles.model.tree.Tree; + +import java.util.ArrayList; +import java.util.List; + +public class RiskGroupDefaultTreeBuildFactory extends DefaultTreeBuildFactory { + private String rootId; + @Override + protected List afterBuild(List nodes) { + //去掉所有的二级节点 + ArrayList results = new ArrayList<>(); + for (T node : nodes) { + if (node.getNodeParentId().equals(rootId)) { + results.add(node); + } + } + return results; + } + + public String getRootId() { + return rootId; + } + + public void setRootId(String rootId) { + this.rootId = rootId; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/RiskGroupDeptDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/RiskGroupDeptDTO.java new file mode 100644 index 0000000..7f6c157 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/RiskGroupDeptDTO.java @@ -0,0 +1,61 @@ +package com.casic.missiles.modular.group.vo; + +import com.casic.missiles.model.tree.Tree; +import com.casic.missiles.modular.device.model.RiskPointInfo; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +@Data +public class RiskGroupDeptDTO implements Tree { + @ApiModelProperty("组织主键") + private Long id; + + @ApiModelProperty("父部门ID") + private Long pid; + + @ApiModelProperty("组织简称") + private String name; + + @ApiModelProperty("组织全称") + private String fullName; + + @ApiModelProperty("子节点") + private List children = new ArrayList<>(); + + @ApiModelProperty("节点类型(1 组织 2 人员)") + private String type; + + @ApiModelProperty("用户信息") + private User userDTO; + private String userId; + private RiskPointInfo riskPointInfo; + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + @Override + public String getNodeId() { + return id + ""; + } + + @Override + public String getNodeParentId() { + return pid + ""; + } + + @Override + public void setChildrenNodes(List childrenNodes) { + children.addAll(childrenNodes); + children = children.stream().distinct().collect(Collectors.toList()); + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupPointVO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupPointVO.java new file mode 100644 index 0000000..3f6ca41 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupPointVO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.group.vo; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 风险点所属人员组对象VO + * + * @author lwh + * @date 2024-07-11 + */ +@Data +public class SysRiskGroupPointVO { + private static final long serialVersionUID = 1L; + + + @ApiModelProperty(value = "用户组ID", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备ID", dataType = "Long") + private Long targetId; + + public QueryWrapper genQuery() { + QueryWrapper query = new QueryWrapper<>(); + if (groupId != null) { + query.eq("group_id", groupId); + } + if (targetId != null) { + query.eq("target_id", targetId); + } + return query; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupRelUserVO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupRelUserVO.java new file mode 100644 index 0000000..5a95d82 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupRelUserVO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.group.vo; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 组人员管理对象VO + * + * @author lwh + * @date 2024-07-11 + */ +@Data +public class SysRiskGroupRelUserVO { + private static final long serialVersionUID = 1L; + + + @ApiModelProperty(value = "组ID", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + private Long userId; + + public QueryWrapper genQuery() { + QueryWrapper query = new QueryWrapper<>(); + if (groupId != null) { + query.eq("group_id", groupId); + } + if (userId != null) { + query.eq("user_id", userId); + } + return query; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskUserGroupVO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskUserGroupVO.java new file mode 100644 index 0000000..6363c3b --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskUserGroupVO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.group.vo; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.system.model.SysUserGroup; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 用户组信息对象VO + * + * @author lwh + * @date 2024-07-11 + */ +@Data +public class SysRiskUserGroupVO { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "用户组名称", dataType = "String") + private String groupName; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + private Long deptId; + @ApiModelProperty(value = "创建时间起始", dataType = "String") + private String startTime; + @ApiModelProperty(value = "创建时间结束", dataType = "String") + private String endTime; + @ApiModelProperty(value = "创建者ID", dataType = "Long") + private Long createId; + + public QueryWrapper genQuery() { + QueryWrapper query = new QueryWrapper<>(); + if (StrUtil.isNotEmpty(groupName)) { + query.like("a.group_name", groupName); + } + if (StrUtil.isNotEmpty(startTime)) { + query.ge("a.create_time", startTime); + } + if (StrUtil.isNotEmpty(endTime)) { + query.le("a.create_time", endTime); + } + if (deptId != null) { + query.eq("a.dept_id", deptId); + } + if (createId != null) { + query.eq("a.create_id", createId); + } + return query; + } +} diff --git a/casic-web/src/main/resources/doc/20250227.txt b/casic-web/src/main/resources/doc/20250227.txt new file mode 100644 index 0000000..daf4d4c --- /dev/null +++ b/casic-web/src/main/resources/doc/20250227.txt @@ -0,0 +1,68 @@ +1.权限配置检查 + 对应属性需配置为 security_admin + casic: + video: + admin: + role: security_admin +1.租户设定更新 + 创建租户设定角色 角色别名必须是tenantAdministrator + + 分配给管理员 需手动入库授权, sys_user表 role_id字段添加租户设定字段, + sys_ru_relation 添加用户绑定关系 + + INSERT INTO sys_tenant(ID, TENANT_NAME, TENANT_CODE, LINK_PERSON, TEL, CLEARDAY, FLAG, TS) VALUES (1, '航天二院', '001', NULL, NULL, NULL, '0', '2025-02-21 14:41:20'); + + ALTER TABLE sys_user_group ADD COLUMN tenant_id VARCHAR(64); + ALTER TABLE sys_group_device ADD COLUMN tenant_id VARCHAR(64); + ALTER TABLE sys_group_rel_user ADD COLUMN tenant_id VARCHAR(64); + ALTER TABLE device_group_info ADD COLUMN tenant_id VARCHAR(64); + update device_group_info set tenant_id = 1; + update sys_user set tenant_id = 1; + update sys_role set tenant_id = 1; + update sys_rm_relation set tenant_id = 1; + update sys_ru_relation set tenant_id = 1; + update sys_dept set tenant_id = 1; + update sys_user_group set tenant_id = 1; + update sys_group_device set tenant_id = 1; + update sys_group_rel_user set tenant_id = 1; + 添加租户ID 0 + +2.表risk_point_info 字段 secret_level值密级默认 0 设定 + +3.新增表 sys_user_risk_group sys_risk_group_rel_user sys_risk_group_point + +CREATE TABLE sys_user_risk_group +( + id numeric(20,0) NOT NULL, + group_name VARCHAR(256), + create_time date, + dept_id numeric(20,0), + create_id numeric(20,0), + description VARCHAR(256), + safe SMALLINT, + group_type SMALLINT, + tenant_id VARCHAR(64), + PRIMARY KEY (id) +); + +CREATE TABLE sys_risk_group_rel_user +( + id numeric(20,0) NOT NULL, + group_id numeric(20,0), + user_id numeric(20,0), + create_time date, + tenant_id VARCHAR(64) +); + +CREATE TABLE sys_risk_group_point +( + id numeric(20,0) NOT NULL, + group_id numeric(20,0), + create_time date, + target_id numeric(20,0), + tenant_id VARCHAR(64) +); + + + + diff --git a/casic-web/src/main/resources/doc/20250416.txt b/casic-web/src/main/resources/doc/20250416.txt new file mode 100644 index 0000000..14610e9 --- /dev/null +++ b/casic-web/src/main/resources/doc/20250416.txt @@ -0,0 +1,18 @@ +1.增加识别流开关 流媒体id 识别流国标号 + ALTER TABLE box_device_relation ADD COLUMN media_server_id VARCHAR(255); + ALTER TABLE box_device_relation ADD COLUMN recognition_gb VARCHAR(255); + ALTER TABLE box_device_relation ADD COLUMN recognition_stream_flag int; + + + + ALTER TABLE upload_log ADD COLUMN tenant_id VARCHAR(64); +2.增加字典值 mediaServerId + 对应值参考zlm中的mediaServerId 配置项 +3.更新box_device表以下字段类型为text + server_public_key + server_private_key + client_public_key + client_private_key + +4.casic.no-login-urls + 增加 /record/upload \ No newline at end of file diff --git a/casic-web/src/main/resources/doc/20250519.txt b/casic-web/src/main/resources/doc/20250519.txt new file mode 100644 index 0000000..6d70728 --- /dev/null +++ b/casic-web/src/main/resources/doc/20250519.txt @@ -0,0 +1,3 @@ +1.固定秘钥解析 + 配置项增加 + casic.client.privateKey \ No newline at end of file diff --git a/casic-web/src/main/resources/doc/20250522.md b/casic-web/src/main/resources/doc/20250522.md new file mode 100644 index 0000000..636b4df --- /dev/null +++ b/casic-web/src/main/resources/doc/20250522.md @@ -0,0 +1,80 @@ +## 一、数据库更新 + +1. 操作日志增加IP字段 + +``` +ALTER TABLE sys_operation_log ADD COLUMN IP VARCHAR(255); +``` + +2. 角色添加业务类型 + +``` +ALTER TABLE sys_role ADD COLUMN BIZ_TYPE VARCHAR(32) default 'normal' COMMENT '业务类型标识字段,用于区分不同业务模块的资源,比如三员 安全生产'; +``` + +3. 资源添加业务类型及相关字典值 + +``` +ALTER TABLE sys_resource ADD COLUMN BIZ_TYPE VARCHAR(32) default 'normal' COMMENT '业务类型标识字段,用于区分不同业务模块的资源,比如三员 安全生产'; + +INSERT INTO `sys_dict` (`ID`, `NUM`, `PID`, `NAME`, `TIPS`, `CODE`, `TENANT_ID`) VALUES (1925798590442455041, '0', 0, '业务分类', '业务分类', 'bizType', NULL); +INSERT INTO `sys_dict` (`ID`, `NUM`, `PID`, `NAME`, `TIPS`, `CODE`, `TENANT_ID`) VALUES (1925798590442455042, '0', 1925798590442455041, '普通业务', NULL, 'normal', NULL); +INSERT INTO `sys_dict` (`ID`, `NUM`, `PID`, `NAME`, `TIPS`, `CODE`, `TENANT_ID`) VALUES (1925798590505369602, '1', 1925798590442455041, '三员权限', NULL, 'audit', NULL); + +``` +系统三员角色从数据库初始化 bizType为audit 其他角色为normal +系统菜单资源数据修改,系统管理下所有菜单及按钮设置bizType为audit,其他业务功能设置为normal + +4. 增加操作审批表结构 + +CREATE TABLE sys_operation_application +( +id numeric(20,0) NOT NULL, +create_time datetime , +update_time datetime , +title varchar(255) , +json_context text , +status char(1), +operation_type varchar(64) , +operation_remark varchar(255) , +audit_remark varchar(255) , +tenant_id varchar(64) , +create_id numeric(20,0) , +audit_id numeric(20,0) , +PRIMARY KEY (id) +) + +业务操作类关系如下 +增加operationType字典 +user_add 用户新增 +user_update 用户修改 +user_delete 用户删除 +user_reset 密码重置 +user_freeze 用户冻结 +user_unfreeze 用户解冻 +user_roleAssign 用户角色分配 + +role_add 角色新增 +role_update 角色修改 +role_delete 角色删除 +role_funcAuthor 角色功能权限配置 +role_dataAuthor 角色数据权限配置 + +resource_add 资源新增 +resource_update 资源修改 +resource_delete 资源删除 + +dept_add 组织新增 +dept_update 组织修改 +dept_delete 组织删除 + +casic.tenant.excludes 配置项增加 ,sys_operation_application + +对应角色只能授权对应角色资源 +## 二、设备同步自动提取所属组织机构 +1.增加开启配置项 +casic.video.av.autoDept: true #默认开启 + + + + diff --git "a/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250113\346\225\260\346\215\256\345\272\223.txt" "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250113\346\225\260\346\215\256\345\272\223.txt" new file mode 100644 index 0000000..9b3fde9 --- /dev/null +++ "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250113\346\225\260\346\215\256\345\272\223.txt" @@ -0,0 +1,12 @@ +ALTER TABLE box_device +MODIFY COLUMN server_public_key VARCHAR(512), +MODIFY COLUMN server_private_key VARCHAR(1024), +MODIFY COLUMN client_public_key VARCHAR(512), +MODIFY COLUMN client_private_key VARCHAR(1024); + +ALTER TABLE sys_config MODIFY COLUMN VALUE TEXT; + + + +INSERT INTO sys_resource(ID, PID, CODE, P_CODE, P_CODES, NAME, ICON, URL, NUM, LEVELS, IS_MENU, TIPS, IS_OPEN, RESOURCE_TYPE, CREATE_USER, UPDATE_USER, CREATE_TIME, UPDATE_TIME, DEL_FLAG, TENANT_ID, STATUS) VALUES (1872184789440688129, 0, 'bigScreen', '0', '[0],', '安全生产智慧监管平台', '', '/bigScreen', 0, 1, '1', NULL, '0', '03', 1832137050074128386, NULL, '2024-12-26 07:36:52', NULL, '0', NULL, '0'); +INSERT INTO sys_resource(ID, PID, CODE, P_CODE, P_CODES, NAME, ICON, URL, NUM, LEVELS, IS_MENU, TIPS, IS_OPEN, RESOURCE_TYPE, CREATE_USER, UPDATE_USER, CREATE_TIME, UPDATE_TIME, DEL_FLAG, TENANT_ID, STATUS) VALUES (1879080561335627777, 105, 'sys_bsConfig', 'system', '[0],[system],', '大屏配置', 'icon-bs', '/sys/bsConfig', 0, 2, '1', NULL, '0', '03', 1832137050074128386, 1832137050074128386, '2025-01-14 08:18:12', '2025-01-14 08:25:05', '0', NULL, '0'); diff --git "a/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250120\351\205\215\347\275\256.txt" "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250120\351\205\215\347\275\256.txt" new file mode 100644 index 0000000..4d3700f --- /dev/null +++ "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250120\351\205\215\347\275\256.txt" @@ -0,0 +1,13 @@ +1.配置最大上传文件 max-file-size 更改为150 + spring: + servlet: + multipart: + max-file-size: 150MB + max-request-size: 80MB + nginx也需设置 +2.登录不拦截配置项 + casic: + no-login-urls: + 增加 ,/sync/device/** + + INSERT INTO `casic-production-safety`.`sys_config`(`ID`, `VALUE`, `TARGET_NAME`, `CLASS_NAME`, `DESCRIPTION`, `TENANT_ID`) VALUES (1879417287790792706, '[{\"monitorName\":\"casic01\",\"deviceTypeName\":\"枪机\",\"deptName\":\"203\",\"areaName\":\"成都A区\",\"longitude\":\"116.258555\",\"latitude\":\"39.908447\",\"secretLevelName\":\"内部\",\"deviceStatusName\":\"在线\",\"cameraIndexCode\":\"34020000001320000003\",\"nvrIndexCode\":\"34020000001110000002\",\"picture\":\"http://192.168.83.42:6909/safe-server//picture/download/undefined?token=2c1e8cb8-e3f0-4fb5-af4f-7f3e3ce75add\"},{\"monitorName\":\"casic04\",\"deviceTypeName\":\"枪机\",\"deptName\":\"203\",\"areaName\":\"永定路A区域\",\"longitude\":\"116.258555\",\"latitude\":\"39.908447\",\"secretLevelName\":\"公开\",\"deviceStatusName\":\"在线\",\"cameraIndexCode\":\"34020000001320000008\",\"nvrIndexCode\":\"34020000001110000002\",\"picture\":\"http://192.168.83.42:6909/safe-server//picture/download/undefined?token=2c1e8cb8-e3f0-4fb5-af4f-7f3e3ce75add\"},{\"monitorName\":\"casic01\",\"deviceTypeName\":\"枪机\",\"deptName\":\"203\",\"areaName\":\"成都A区\",\"longitude\":\"116.258555\",\"latitude\":\"39.908447\",\"secretLevelName\":\"内部\",\"deviceStatusName\":\"在线\",\"cameraIndexCode\":\"34020000001320000003\",\"nvrIndexCode\":\"34020000001110000002\",\"picture\":\"http://192.168.83.42:6909/safe-server//picture/download/undefined?token=2c1e8cb8-e3f0-4fb5-af4f-7f3e3ce75add\"},{\"monitorName\":\"casic04\",\"deviceTypeName\":\"枪机\",\"deptName\":\"203\",\"areaName\":\"永定路A区域\",\"longitude\":\"116.258555\",\"latitude\":\"39.908447\",\"secretLevelName\":\"公开\",\"deviceStatusName\":\"在线\",\"cameraIndexCode\":\"34020000001320000008\",\"nvrIndexCode\":\"34020000001110000002\",\"picture\":\"http://192.168.83.42:6909/safe-server//picture/download/undefined?token=2c1e8cb8-e3f0-4fb5-af4f-7f3e3ce75add\"},{\"monitorName\":\"casic01\",\"deviceTypeName\":\"枪机\",\"deptName\":\"203\",\"areaName\":\"成都A区\",\"longitude\":\"116.258555\",\"latitude\":\"39.908447\",\"secretLevelName\":\"内部\",\"deviceStatusName\":\"在线\",\"cameraIndexCode\":\"34020000001320000003\",\"nvrIndexCode\":\"34020000001110000002\"},{\"monitorName\":\"casic04\",\"deviceTypeName\":\"枪机\",\"deptName\":\"203\",\"areaName\":\"永定路A区域\",\"longitude\":\"116.258555\",\"latitude\":\"39.908447\",\"secretLevelName\":\"公开\",\"deviceStatusName\":\"在线\",\"cameraIndexCode\":\"34020000001320000008\",\"nvrIndexCode\":\"34020000001110000002\"}]', 'casic.bg.config', NULL, NULL, NULL); diff --git "a/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250121.txt" "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250121.txt" new file mode 100644 index 0000000..f5df373 --- /dev/null +++ "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250121.txt" @@ -0,0 +1,2 @@ +ALTER TABLE box_device ADD COLUMN path VARCHAR(512); +ALTER TABLE box_device ADD COLUMN version VARCHAR(512); \ No newline at end of file diff --git "a/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250217.txt" "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250217.txt" new file mode 100644 index 0000000..2488c3b --- /dev/null +++ "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250217.txt" @@ -0,0 +1 @@ +ALTER TABLE risk_point_info MODIFY COLUMN substances_quantities VARCHAR(1024); \ No newline at end of file diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java new file mode 100644 index 0000000..1ca5eb1 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java @@ -0,0 +1,63 @@ +package com.casic.missiles.modular.device.enums; + +/** + * wvp设备类型转换 + * + * @author lwh + * @Date 2017年1月10日 下午9:54:13 + */ +public enum AvDeptEnum { + + DEPT0("0066", "801",0L), + DEPT1("0059", "699厂",1L), + DEPT2("0055", "283厂",1L), + DEPT3("0022", "201所",1L), + DEPT4("0027", "206所",1L), + DEPT5("0013", "23所",1L); + + String code; + String message; + Long deptId; + AvDeptEnum(String code, String message, Long deptId) { + this.code = code; + this.message = message; + this.deptId = deptId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public static AvDeptEnum valueOfCode(String value) { + if (value == null) { + return null; + } else { + for (AvDeptEnum ms : AvDeptEnum.values()) { + if (ms.getCode().equals(value)) { + return ms; + } + } + return null; + } + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java new file mode 100644 index 0000000..573d0e2 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.task; + +import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; + +public class Test { + public static void main(String[] args) { + System.out.println(AvStatusTypeEnum.valueOfType(new Integer(1)).getMessage()); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java new file mode 100644 index 0000000..7c06c67 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java @@ -0,0 +1,77 @@ +package com.casic.missiles.modular.device.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpSession; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class RiskSyncController extends BaseController { + @Resource + private IClientAuthService clientAuthService; + @Resource + private AbstractDeptService deptService; + @Resource + private AbstractUserService userService; + @PostMapping("/client/login") + @ResponseBody + public ResponseData login(@RequestBody RiskLoginForm deviceLoginForm, HttpSession session) { + return clientAuthService.login(deviceLoginForm, session); + } + + /** + * 全量组织信息读取 + * + * @return + */ + @PostMapping("/dept/list") + @ResponseBody + public ResponseDataDTO> dept() { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = deptService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量用户信息读取 + * + * @return + */ + @PostMapping("/user/list") + @ResponseBody + public ResponseDataDTO> user() { + //todo 此处租户拦截需移除 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量设备信息读取 + * + * @return + */ + @PostMapping("/device/list") + @ResponseBody + public ResponseDataDTO> device() { + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java new file mode 100644 index 0000000..5e5b890 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class UserSyncController extends BaseController { + + @Resource + private IBusDeviceInfoService busDeviceInfoService; + + /** + * 登录用户授权设备权限查看 + * @return + */ + @GetMapping("/device/permissions") + @ResponseBody + public ResponseDataDTO> devicePermissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } + + /** + * 登录用户风险点授权查询 + * @return + */ + @GetMapping("/permissions") + @ResponseBody + public ResponseDataDTO> permissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java new file mode 100644 index 0000000..07b8df8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +/** + * 设备登录接口 + */ +@Data +public class RiskLoginForm { + /** + * 设备编码 + */ + private String clientId; + + /** + * 时间戳 + */ + private Long time; + + /** + * 加密后数据 加密格式sn+时间戳 时效性为6小时 + */ + private String secret; + + /** + * 设备登录注册IP + */ + private String ip; + + /** + * 设备登录注册port + */ + private String port; +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java new file mode 100644 index 0000000..40fdb4b --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.device.service; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; + +import javax.servlet.http.HttpSession; + +public interface IClientAuthService { + /** + * @param deviceLoginForm + * @param session + * @return + */ + ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session); +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java new file mode 100644 index 0000000..576e857 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.device.service.impl; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import cn.hutool.jwt.JWT; +import cn.hutool.jwt.JWTUtil; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.util.IRiskCacheUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpSession; +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Service +public class ClientAuthServiceImpl implements IClientAuthService { + @Value("${casic.client.privateKey:MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALKcwHHOg0F6Zkq7GOVnOnTgvH9vSPXFFTOcEqOVBIBPBz7UNrEGkp1PhZ+oC4WVJAsDuot2e1fDZy9QS9HF92MmnYp9kuQRhGZjHctPnVZ0Kai5BES0ytHqPeauLyNXxOOS0YKYEUwpft4Z5Azw7bj3JWNvLrnTZvNld6FDvTslAgMBAAECgYAqN/kZLYpC+O6i7XSmDO95XwHPUXu6dDpdt5+EQR4OQh/hTwIaeAZB3uEj6vHGQomBfQEkI/5lsU97lIxHanbd+Hro7JyIhsGD5LR5XnZHVKzFiZW62OIU6FI9dlQNN8miiblnmyDwiMA3okaHl0O7qQjZ+IvY2csgmJc7AXpPpQJBAOhrhcfWFcgffj2O6HYNlBLFfbboc/ZzrEADDXKnxRSHlo5o8W+6gylG/L2NGtbag5S68B9VYzdkSQ1++5C+Ws8CQQDEu7h311PLEiKgqzGHpjzadQETmt/jMadaKQmT0TZwNVi6X8lR17U5hF8dAqZzUzr9kUC0HRIZhg4Uv1v3W3fLAkB4YPhxgJjXhjhEefg87Nt8vX1Xdx5Yz6CvpuUYNX0GHRQFvqUOUXQNtQ7CvorgLV1pc0lbcUZqMi8EJnj1hyJRAkEAjHXWm8GiMt+M15fCsi3vTq2xChVOekBuUsHv85iwvGZqJg7ThtpyqlEnM2g7/STUfkvhnXcQACclEI0blTy6BwJAPmFyhU+d0ejVpbc53TdrL2HqYYUHi/tTy/dtUa7lbypzdwwJ2M1Tv5PE8sQxr9tgMbebfxVb/RFKdiCCtzC4ng==}") + private String privateKey; + + @Override + public ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session) { + //固定秘钥解析 + try { + String str = RSAUtils.decrypt(deviceLoginForm.getSecret(), privateKey); + Long time = Long.valueOf(StrUtil.split(str, "_").get(1)); + //边缘盒子时差与服务时差不可超过24小时 + if (time == null || System.currentTimeMillis() - time > 3600 * 24 * 1000) { + return ResponseData.error("请求时间超时"); + } + deviceLoginForm.setTime(time); + } catch (Exception e) { + e.printStackTrace(); + return ResponseData.error("设备解析异常!"); + } + + try { + String token = this.createJwtToken(deviceLoginForm); + IRiskCacheUtil.put(token, token); + return ResponseData.success(token); + } catch (Exception e) { + log.error("设备登录异常:{}", e.getMessage()); + return ResponseData.error("登录异常,请联系管理员"); + } +} + /** + * token创建 + * + * @param loginForm 登录信息 + * @param device 设备信息 + * @return + * @throws Exception + */ + public String createJwtToken(RiskLoginForm loginForm) throws Exception { + Map payload = new HashMap<>(); + payload.put("clientId", loginForm.getClientId()); // 设备编号 + payload.put("time", loginForm.getTime()); // 请求时间 + + //RSA 解密 + String str = RSAUtils.decrypt(loginForm.getSecret(), privateKey); + String key = loginForm.getClientId()+"_" + loginForm.getTime() ; + if (!key.equals(str)) { + //秘钥验证失败 + throw new ServiceException(500,"秘钥验证失败"); + } + +// long exp = new Date().getTime() + 2 * 3600000; // 2小时后的时间戳 +// payload.put("exp", exp); + + // 创建JWT + String jwt = JWTUtil.createToken(payload, "token-203-202405".getBytes()); + + return jwt; + } + + /** + * token解析 + * + * @param jwtStr token + * @return + * @throws Exception + */ + public static RiskLoginForm parseToken(String jwtStr){ + JWT jwtObj = new JWTUtil().parseToken(jwtStr); + RiskLoginForm deviceLoginForm = new RiskLoginForm(); + deviceLoginForm.setClientId(Convert.toStr(jwtObj.getPayload("clientId"))); + return deviceLoginForm; + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java new file mode 100644 index 0000000..0e91ac8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.util; +import cn.hutool.cache.Cache; +import cn.hutool.cache.CacheUtil; +/** + * token有效 + */ +public class IRiskCacheUtil { + /** + * 1小时内不活跃 会踢掉 + */ + private static Cache fifoCache = CacheUtil.newFIFOCache(1000, 1000 * 60 * 60); + + public static void put(String key, String value) { + fifoCache.put(key, value); + } + + public static String get(String key) { + return fifoCache.get(key); + } + + public static void remove(String key) { + fifoCache.remove(key); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java new file mode 100644 index 0000000..805c32a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceGroupDict extends AbstractDictMap { + + @Override + public void init() { + //检索条件 + put("groupName", "分组名称"); + put("startTime", "起始时间"); + put("endTime", "结束时间"); + //新增修改属性 + put("cameraIds", "设备国标号"); + put("personIds", "人员主键集合"); + put("description","备注"); + put("id","主键"); + put("ids","主键集合"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java new file mode 100644 index 0000000..895fbd9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceQueryDict extends AbstractDictMap { + + @Override + public void init() { + put("devType", "类型查询"); + put("keyword", "设备名称"); + put("deptName", "所属单位"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java new file mode 100644 index 0000000..88da6df --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.device.util; + +public class DeviceScopeUtil { +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java new file mode 100644 index 0000000..2e3e478 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.device.controller; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.auth.dto.DeviceLoginForm; +import com.casic.missiles.modular.auth.util.ICacheUtil; +import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; +import com.casic.missiles.modular.device.service.IAlarmRecordService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +@Api(tags = "告警记录") +@RestController +@RequestMapping("/record") +public class AlarmUploadController extends BaseController { + + private final IAlarmRecordService alarmRecordService; + private final IDeviceAuthService deviceAuthService; + public AlarmUploadController(IAlarmRecordService alarmRecordService, IDeviceAuthService deviceAuthService) { + this.alarmRecordService = alarmRecordService; + this.deviceAuthService = deviceAuthService; + } + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } + @BussinessLog(value = "告警记录上报接口") + @ApiOperation(value = "告警记录上报接口") + @PostMapping(value = "/upload") + public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return createAuthError(); + } + alarmRecordService.upload(alarmRecord); + return ResponseDataDTO.success(); + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java new file mode 100644 index 0000000..3f1c189 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class RecognitionStreamDTO { + private Long id; + private String recognitionStreamFlag; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java new file mode 100644 index 0000000..fa5ae4a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java @@ -0,0 +1,167 @@ +package com.casic.missiles.modular.group.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IRiskPointInfoService; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.group.vo.SysRiskGroupPointVO; +import com.casic.missiles.modular.group.vo.SysRiskGroupRelUserVO; +import com.casic.missiles.modular.group.vo.SysRiskUserGroupVO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import com.casic.missiles.modular.system.vo.SysGroupRelUserVO; +import com.casic.missiles.modular.system.vo.SysUserGroupVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.ibatis.annotations.Param; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; + +/** + * 风险点组信息Controller + * + * @author lwh + * @date 2024-07-11 + */ +@Api(tags = "风险点组信息") +@RestController +@RequestMapping("/sys/risk/group") +public class SysUserRiskGroupController extends BaseController { + private final IRiskPointInfoService riskPointInfoService; + private final ISysUserRiskGroupService sysUserGroupService; + private final AbstractPermissionContext permissionContext; + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysUserRiskGroupController(IRiskPointInfoService riskPointInfoService, ISysUserRiskGroupService sysUserGroupService, AbstractPermissionContext permissionContext, ISysRiskGroupRelUserService sysGroupRelUserService) { + this.riskPointInfoService = riskPointInfoService; + this.sysUserGroupService = sysUserGroupService; + this.permissionContext = permissionContext; + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @BussinessLog(value = "风险点分组查询") + @ApiOperation(value = "风险点分组查询", hidden = true) + @GetMapping(value = "/list") + public ResponseDataDTO> list(SysRiskUserGroupVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysUserGroupService.list(query)); + } + + @BussinessLog(value = "分组人员列表查询") + @ApiOperation(value = "分组人员列表查询") + @GetMapping(value = "/groupUserList") + public ResponseDataDTO> groupUserList(SysRiskGroupRelUserVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysGroupRelUserService.list(query)); + } + + @BussinessLog(value = "风险点分组人员查询") + @ApiOperation(value = "风险点分组人员分页查询") + @GetMapping(value = "/groupUserPage") + public ResponseDataDTO> listPage(SysRiskGroupRelUserVO sysGroupRelUserVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysGroupRelUserVO.genQuery(); + List relUsers = sysGroupRelUserService.selectSysGroupRelUserPage(page, query); + page.setRecords(relUsers); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "用户分组批量新增") + @ApiOperation(value = "批量新增接口") + @PostMapping(value = "/batch-add") + public ResponseDataDTO batchAdd(@RequestBody GroupUserRelDTO relDTO) { + sysGroupRelUserService.batchAdd(relDTO); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组人员删除") + @ApiOperation(value = "用户组人员删除接口") + @GetMapping(value = "/user/delete") + public ResponseDataDTO userDel(@Param("用户组人员关联主键") String id) { + sysGroupRelUserService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "风险点分组分页查询") + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(SysRiskUserGroupVO sysUserGroupVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysUserGroupVO.genQuery(); + + List sysUserGroups = sysUserGroupService.selectSysUserGroupPage(page, query); + page.setRecords(sysUserGroups); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "风险点分组新增") + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.save(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组修改") + @ApiOperation(value = "修改接口") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.updateById(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组删除") + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + sysUserGroupService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "批量删除") + @ApiOperation(value = "批量删除", hidden = true) + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + sysUserGroupService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "详情查询") + @ApiOperation(value = "详情查询", hidden = true) + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(sysUserGroupService.getById(id)); + } + + @BussinessLog(value = "用户树") + @ApiOperation(value = "用户树查询") + @GetMapping(value = "/person/tree") + public ResponseDataDTO> personTree() { + return ResponseDataDTO.success(sysUserGroupService.personTree()); + } + + @BussinessLog(value = "风险点树查询") + @ApiOperation(value = "风险点树查询") + @GetMapping(value = "/tree") + public ResponseDataDTO> tree(String riskType) { + return ResponseDataDTO.success(riskPointInfoService.tree(riskType)); + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java new file mode 100644 index 0000000..419eb27 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备所属人员组 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupPointMapper extends BaseMapper { +/** +* 设备所属人员组 分页检索 +*/ +List selectSysGroupDevicePage(@Param("page") Page page, @Param("ew" ) QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java new file mode 100644 index 0000000..eb41227 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 组人员管理 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupRelUserMapper extends BaseMapper { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java new file mode 100644 index 0000000..e8352df --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.system.model.SysUserGroup; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 用户组信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysUserRiskGroupMapper extends BaseMapper { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml new file mode 100644 index 0000000..6fa6a4d --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + id , + group_id as groupId , + create_time as createTime , + target_Id as targetId + + + a.id , + a.group_id + as groupId , + a.create_time + as createTime , + a.target_Id + as targetId + + + + + + and group_id = #{request.groupId} + + + and device_id = #{request.deviceId} + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml new file mode 100644 index 0000000..a627546 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + id , + group_id as groupId , + user_id as userId , + create_time as createTime + + + a.id, + a.group_id + as groupId , + a.user_id + as userId , + a.create_time + as createTime + + + + + + and group_id = #{request.groupId} + + + and user_id = #{request.userId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml new file mode 100644 index 0000000..3245136 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + id, + group_name as groupName , + create_time as createTime , + dept_id as deptId , + create_id as createId + + + a.id,a.group_name as groupName , + a.create_time + as createTime , + a.dept_id + as deptId , + a.create_id + as createId,a.description + + + + + + and group_name like concat('%',#{request.groupName},'%') + + + and dept_id = #{request.deptId} + + + and create_id = #{request.createId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java new file mode 100644 index 0000000..e44328f --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class GroupRiskRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("风险点集合") + private List targetIds; + @ApiModelProperty("用户ID集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java new file mode 100644 index 0000000..f8758bf --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class RiskGroupUserRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("设备集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java new file mode 100644 index 0000000..b386d5b --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java @@ -0,0 +1,53 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 风险点所属组 sys_risk_group_point + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_risk_group_point") +public class SysRiskGroupPoint extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableId("id") + private Long id; + + @ApiModelProperty(value = "用户组ID", dataType = "Long") + @TableField("group_id") + private Long groupId; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty(value = "风险点ID", dataType = "Long") + @TableField("target_id") + private Long targetId; + + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; + + @Override + public String toString() { + return "SysGroupDevice{" + + "id=" + id + + "groupId=" + groupId + + "createTime=" + createTime + + "targetId=" + targetId + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java new file mode 100644 index 0000000..949caa3 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java @@ -0,0 +1,55 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 组人员管理对象 sys_group_rel_user + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_risk_group_rel_user") +public class SysRiskGroupRelUser extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + + @ApiModelProperty(value = "组ID", dataType = "Long") + @TableField("group_id") + private Long groupId; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + @TableField("user_id") + private Long userId; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + @ApiModelProperty(value = "用户姓名", dataType = "String") + @TableField(exist = false) + private String realName; + + @ApiModelProperty(value = "用户名", dataType = "String") + @TableField(exist = false) + private String account; + + @Override + public String toString() { + return "SysGroupRelUser{" + + "id=" + id + + "groupId=" + groupId + + "userId=" + userId + + "createTime=" + createTime + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java new file mode 100644 index 0000000..1b73dc0 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java @@ -0,0 +1,97 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 危险点分组组信息对象 sys_user_risk_group + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_user_risk_group") +public class SysUserRiskGroup extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableId("id") + private Long id; + + @ApiModelProperty(value = "组名称", dataType = "String", required = true) + @TableField("group_name") + private String groupName; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty(value = "所属组织(保留字段)", dataType = "Long") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty(value = "描述信息", dataType = "String") + @TableField("description") + private String description; + + @ApiModelProperty(value = "密级字典", dataType = "String") + @TableField("safe") + private int safe; + + @ApiModelProperty(value = "创建者ID", dataType = "Long") + @TableField("create_id") + private Long createId; + + + @ApiModelProperty(value = "类型(1 危险点 2 重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "Long") + @TableField("group_type") + private String groupType; + @TableField(exist = false) + private String groupTypeName; + /** + * 风险点集合 + */ + @ApiModelProperty(value = "风险点集合(逗号拼接)", dataType = "String") + @TableField(exist = false) + private String pointIds; + + @ApiModelProperty(value = "数量", dataType = "Long") + @TableField(exist = false) + private Integer targetNum; + /** + * 用户集合 + */ + @ApiModelProperty(value = "用户集合(逗号拼接)", dataType = "String") + @TableField(exist = false) + private String personIds; + + @ApiModelProperty(value = "用户名称", dataType = "String") + @TableField(exist = false) + private String realName; + + @ApiModelProperty(value = "用户名", dataType = "String") + @TableField(exist = false) + private String account; + + @ApiModelProperty(value = "密级字典名称", dataType = "String") + @TableField(exist = false) + private String safeName; + + @Override + public String toString() { + return "SysUserGroup{" + + "id=" + id + + "groupName=" + groupName + + "createTime=" + createTime + + "deptId=" + deptId + + "createId=" + createId + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java new file mode 100644 index 0000000..4657ce4 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.device.dto.GroupRelDTO; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; + +import java.util.List; + + +/** + *

+ * 设备所属人员组 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysRiskGroupPointService extends IService { + /** + * 设备所属人员组 分页检索 + */ + List selectSysGroupDevicePage(Page page, QueryWrapper query); + + /** + * 设备组批量新增 + * + * @param relDTO + */ + void batchAdd(GroupRiskRelDTO relDTO); + + + /** + * 增量更新 + * @param groupId + * @param deviceIds + */ + void batchIncremental(Long groupId, List deviceIds); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java new file mode 100644 index 0000000..591eef2 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; + +import java.util.List; + + +/** + *

+ * 组人员管理 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysRiskGroupRelUserService extends IService { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(Page page, QueryWrapper query); + + void batchAdd(GroupUserRelDTO relDTO); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java new file mode 100644 index 0000000..1e0889c --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; + +import java.util.List; + + +/** + *

+ * 用户组信息 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysUserRiskGroupService extends IService { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(Page page, QueryWrapper query); + + List personTree(); + + /** + * 创建用户组 + * + * @param sysUserGroup 用户组信息 + * @param userIds 用户信息 + */ + void createSysUserGroup(SysUserRiskGroup sysUserGroup, List userIds); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java new file mode 100644 index 0000000..6839887 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java @@ -0,0 +1,118 @@ +package com.casic.missiles.modular.group.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +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.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.group.dao.SysRiskGroupPointMapper; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import com.casic.missiles.modular.group.service.ISysRiskGroupPointService; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + + +/** + *

+ * 设备所属人员组 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysRiskGroupPointServiceImpl extends ServiceImpl implements ISysRiskGroupPointService { + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysRiskGroupPointServiceImpl(ISysRiskGroupRelUserService sysGroupRelUserService) { + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @Override + public List selectSysGroupDevicePage(Page page, QueryWrapper query) { + return this.baseMapper.selectSysGroupDevicePage(page, query); + } + + @Transactional + @Override + public void batchAdd(GroupRiskRelDTO relDTO) { + + if (CollectionUtil.isEmpty(relDTO.getTargetIds())) { + ServiceException serviceException = new ServiceException(500, "添加不能为空!"); + throw serviceException; + } + + //删除 + QueryWrapper query = new QueryWrapper<>(); + query.eq("group_id", relDTO.getGroupId()); + this.remove(query); + + //保存分组与危险点对应关系 + List groupDevices = new ArrayList<>(); + for (Long deviceId : relDTO.getTargetIds()) { + SysRiskGroupPoint sysGroupDevice = new SysRiskGroupPoint(); + sysGroupDevice.setTargetId(deviceId); + sysGroupDevice.setGroupId(relDTO.getGroupId()); + sysGroupDevice.setCreateTime(new Date()); + groupDevices.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(groupDevices); + + //批量保存风险点与用户关系 + GroupUserRelDTO groupUserRelDTO = new GroupUserRelDTO(); + groupUserRelDTO.setGroupId(relDTO.getGroupId()); + groupUserRelDTO.setUserIds(relDTO.getUserIds()); + sysGroupRelUserService.batchAdd(groupUserRelDTO); + + } + + @Override + public void batchIncremental(Long groupId, List deviceIds) { + List groupDevices = this.list(new LambdaQueryWrapper().eq(SysRiskGroupPoint::getGroupId, groupId)); + if (CollectionUtil.isEmpty(groupDevices)) { + saveDevices(groupId, deviceIds); + } else { + List oldDevices = groupDevices.stream().map(SysRiskGroupPoint::getTargetId).collect(Collectors.toList()); + List delIds = CollectionUtil.subtractToList(oldDevices, deviceIds); + List saveDevices = CollectionUtil.subtractToList(deviceIds, oldDevices); + + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.eq(SysRiskGroupPoint::getGroupId, groupId); + delQuery.in(SysRiskGroupPoint::getTargetId, delIds); + if (CollectionUtil.isNotEmpty(delIds)) { + this.remove(delQuery); + } + saveDevices(groupId, saveDevices); + } + } + + private void saveDevices(Long groupId, List saveDevices) { + List saves = new ArrayList<>(); + for (Long deviceId : saveDevices) { + SysRiskGroupPoint sysGroupDevice = new SysRiskGroupPoint(); + sysGroupDevice.setTargetId(deviceId); + sysGroupDevice.setGroupId(groupId); + sysGroupDevice.setCreateTime(new Date()); + saves.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(saves); + } + + private void saveOrUpdateBatchList(List groupDevices) { + for (SysRiskGroupPoint groupDevice : groupDevices) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysRiskGroupPoint::getGroupId, groupDevice.getGroupId()); + query.eq(SysRiskGroupPoint::getTargetId, groupDevice.getTargetId()); + this.saveOrUpdate(groupDevice, query); + } + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java new file mode 100644 index 0000000..83cd76a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.group.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +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.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.group.dao.SysRiskGroupPointMapper; +import com.casic.missiles.modular.group.dao.SysRiskGroupRelUserMapper; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.system.dao.SysGroupRelUserMapper; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + + +/** + *

+ * 组人员管理 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysRiskGroupRelUserServiceImpl extends ServiceImpl implements ISysRiskGroupRelUserService { + @Override + public List selectSysGroupRelUserPage(Page page, QueryWrapper query) { + return this.baseMapper.selectSysGroupRelUserPage(page, query); + } + + @Transactional + @Override + public void batchAdd(GroupUserRelDTO relDTO) { + if (CollectionUtil.isEmpty(relDTO.getUserIds())) { + ServiceException serviceException = new ServiceException(500, "添加不能为空!"); + throw serviceException; + } + //删除 + QueryWrapper query = new QueryWrapper<>(); + query.eq("group_id",relDTO.getGroupId()); + this.remove(query); + //添加设备信息 + List groupDevices = new ArrayList<>(); + for (Long deviceId : relDTO.getUserIds()) { + SysRiskGroupRelUser sysGroupDevice = new SysRiskGroupRelUser(); + sysGroupDevice.setUserId(deviceId); + sysGroupDevice.setGroupId(relDTO.getGroupId()); + sysGroupDevice.setCreateTime(new Date()); + groupDevices.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(groupDevices); + } + + private void saveOrUpdateBatchList(List groupDevices) { + for (SysRiskGroupRelUser groupDevice : groupDevices) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysRiskGroupRelUser::getGroupId, groupDevice.getGroupId()); + query.eq(SysRiskGroupRelUser::getUserId, groupDevice.getUserId()); + this.saveOrUpdate(groupDevice, query); + } + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java new file mode 100644 index 0000000..b3bb9a8 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java @@ -0,0 +1,246 @@ +package com.casic.missiles.modular.group.service.impl; + +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.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.modular.data.constants.DataConstants; +import com.casic.missiles.modular.group.dao.SysUserRiskGroupMapper; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupPointService; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.tree.RiskGroupDefaultTreeBuildFactory; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + + +/** + *

+ * 用户组信息 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysUserRiskGroupServiceImpl extends ServiceImpl implements ISysUserRiskGroupService { + @Lazy + @Resource + private ISysRiskGroupPointService sysRiskGroupPointService; + private final AbstractPermissionContext abstractPermissionContext; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_USER = "2"; + private final AbstractDictService dictService; + @Lazy + @Resource + private ISysRiskGroupRelUserService relUserService; + + public SysUserRiskGroupServiceImpl(AbstractPermissionContext abstractPermissionContext, AbstractDictService dictService) { + this.abstractPermissionContext = abstractPermissionContext; + this.dictService = dictService; + } + + @Override + public List selectSysUserGroupPage(Page page, QueryWrapper query) { + //分组过滤当前权限 + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + query.in("a.dept_id", dataScope.getDeptIds()); + } + List riskGroups = this.baseMapper.selectSysUserGroupPage(page, query); + for (SysUserRiskGroup riskGroup : riskGroups) { + wrapperInfo(riskGroup); + } + return riskGroups; + } + + private void wrapperInfo(SysUserRiskGroup riskGroup) { + riskGroup.setSafeName(dictService.getDictNameByCode(DataConstants.DICT_SECRET_LEVEL_TYPE, riskGroup.getSafe() + "")); + //查询关联设备 + LambdaQueryWrapper deviceQuery = new LambdaQueryWrapper<>(); + deviceQuery.eq(SysRiskGroupPoint::getGroupId, riskGroup.getId()); + List devices = sysRiskGroupPointService.list(deviceQuery); + if (devices != null) { + List deviceList = devices.stream().map(SysRiskGroupPoint::getTargetId).collect(Collectors.toList()); + riskGroup.setPointIds(StrUtil.join(",", deviceList)); + riskGroup.setTargetNum(deviceList.size()); + } + + riskGroup.setGroupTypeName(dictService.getDictNameByCode(DataConstants.dangerAssessmentType, riskGroup.getGroupType())); + //查询关联人员 + LambdaQueryWrapper personQuery = new LambdaQueryWrapper<>(); + personQuery.eq(SysRiskGroupRelUser::getGroupId, riskGroup.getId()); + List persons = relUserService.list(personQuery); + if (persons != null) { + List personIds = persons.stream().map(SysRiskGroupRelUser::getUserId).collect(Collectors.toList()); + riskGroup.setPersonIds(StrUtil.join(",", personIds)); + } + } + + private void setGroupInfo(SysUserRiskGroup entity) { + if (StrUtil.isNotEmpty(entity.getPointIds())) { + entity.setTargetNum(StrUtil.split(entity.getPointIds(), ",").size()); + } else { + entity.setTargetNum(0); + } + } + + @Override + public boolean save(SysUserRiskGroup entity) { + AuthUser authUser = abstractPermissionContext.getAuthService().getLoginUser(); + entity.setCreateTime(new Date()); + entity.setCreateId(authUser.getId()); + if (entity.getDeptId() == null) { + entity.setDeptId(authUser.getDeptId()); + } + setGroupInfo(entity); + super.save(entity); + batchSave(entity, entity.getId()); + return true; + } + + @Override + public boolean updateById(SysUserRiskGroup entity) { + AuthUser authUser = abstractPermissionContext.getAuthService().getLoginUser(); + entity.setCreateTime(new Date()); + entity.setCreateId(authUser.getId()); + if (entity.getDeptId() == null) { + entity.setDeptId(authUser.getDeptId()); + } + setGroupInfo(entity); + super.updateById(entity); + batchSave(entity, entity.getId()); + return true; + } + + /** + * 数据转换 + * + * @param entity + * @param groupId + */ + private void batchSave(SysUserRiskGroup entity, Long groupId) { + GroupRiskRelDTO groupRelDTO = new GroupRiskRelDTO(); + groupRelDTO.setGroupId(groupId); + if (StrUtil.isNotEmpty(entity.getPointIds())) { + long[] longs = StrUtil.splitToLong(entity.getPointIds(), ","); + List devices = new ArrayList<>(); + for (long aLong : longs) { + devices.add(aLong); + } + groupRelDTO.setTargetIds(devices); + } + if (StrUtil.isNotEmpty(entity.getPersonIds())) { + List persons = new ArrayList<>(); + long[] longs = StrUtil.splitToLong(entity.getPersonIds(), ","); + + for (long aLong : longs) { + persons.add(aLong); + } + groupRelDTO.setUserIds(persons); + } + sysRiskGroupPointService.batchAdd(groupRelDTO); + } + + @Override + public List personTree() { + + //查询可见组织 + DataScope scope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + + LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { + deptQuery.in(Dept::getId, scope.getDeptIds()); + } + deptQuery.orderByAsc(Dept::getNum); + + List deptList = abstractPermissionContext.getDeptService().list(deptQuery); + List deptDTOS = new ArrayList<>(); + List rootIds = new ArrayList<>(); + Set normalIds = new HashSet<>(); + for (Dept dept : deptList) { + RiskGroupDeptDTO deptDTO = new RiskGroupDeptDTO(); + deptDTO.setPid(dept.getPid()); + deptDTO.setId(dept.getId()); + deptDTO.setFullName(dept.getFullName()); + deptDTO.setName(dept.getSimpleName()); + deptDTOS.add(deptDTO); + deptDTO.setType(NODE_TYPE_DEPT); + normalIds.add(dept.getId()); + + //挂载设备信息 + LambdaQueryWrapper deviceQuery = new LambdaQueryWrapper<>(); + deviceQuery.eq(User::getDeptId, deptDTO.getId()); + deviceQuery.eq(User::getStatus, "1"); + List deviceInfos = abstractPermissionContext.getUserService().list(deviceQuery); + + deptDTO.setChildrenNodes(deviceInfos.stream().map(this::createDeptDTO).collect(Collectors.toList())); + } + + for (RiskGroupDeptDTO deptDTO : deptDTOS) { + if (!normalIds.contains(deptDTO.getPid())) { + rootIds.add(deptDTO.getPid()); + } + } + + //过滤根节点,支持多根展示 + RiskGroupDefaultTreeBuildFactory abstractTreeBuildFactory = new RiskGroupDefaultTreeBuildFactory(); + List newTree = new ArrayList<>(); + rootIds = rootIds.stream().distinct().collect(Collectors.toList()); + for (Long rootId : rootIds) { + abstractTreeBuildFactory.setRootId(rootId + ""); + newTree.addAll(abstractTreeBuildFactory.doTreeBuild(deptDTOS)); + } + + return newTree; + } + + @Transactional + @Override + public void createSysUserGroup(SysUserRiskGroup sysUserGroup, List userIds) { + this.baseMapper.insert(sysUserGroup); + GroupUserRelDTO relDTO = new GroupUserRelDTO(); + relDTO.setGroupId(sysUserGroup.getId()); + relDTO.setUserIds(userIds); + relUserService.batchAdd(relDTO); + } + + + /** + * 创建节点 + * + * @param userInfo 用户信息 + * @return + */ + private GroupDeptDTO createDeptDTO(User userInfo) { + GroupDeptDTO deptDTO = new GroupDeptDTO(); + deptDTO.setType(NODE_TYPE_USER); + deptDTO.setId(userInfo.getId()); + deptDTO.setPid(userInfo.getDeptId()); + deptDTO.setUserDTO(userInfo); + deptDTO.setName(userInfo.getName()); + deptDTO.setFullName(userInfo.getName()); + deptDTO.setUserId(userInfo.getId() + ""); + return deptDTO; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/tree/RiskGroupDefaultTreeBuildFactory.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/tree/RiskGroupDefaultTreeBuildFactory.java new file mode 100644 index 0000000..69c18ad --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/tree/RiskGroupDefaultTreeBuildFactory.java @@ -0,0 +1,30 @@ +package com.casic.missiles.modular.group.tree; + +import com.casic.missiles.core.treebuild.DefaultTreeBuildFactory; +import com.casic.missiles.model.tree.Tree; + +import java.util.ArrayList; +import java.util.List; + +public class RiskGroupDefaultTreeBuildFactory extends DefaultTreeBuildFactory { + private String rootId; + @Override + protected List afterBuild(List nodes) { + //去掉所有的二级节点 + ArrayList results = new ArrayList<>(); + for (T node : nodes) { + if (node.getNodeParentId().equals(rootId)) { + results.add(node); + } + } + return results; + } + + public String getRootId() { + return rootId; + } + + public void setRootId(String rootId) { + this.rootId = rootId; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/RiskGroupDeptDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/RiskGroupDeptDTO.java new file mode 100644 index 0000000..7f6c157 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/RiskGroupDeptDTO.java @@ -0,0 +1,61 @@ +package com.casic.missiles.modular.group.vo; + +import com.casic.missiles.model.tree.Tree; +import com.casic.missiles.modular.device.model.RiskPointInfo; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +@Data +public class RiskGroupDeptDTO implements Tree { + @ApiModelProperty("组织主键") + private Long id; + + @ApiModelProperty("父部门ID") + private Long pid; + + @ApiModelProperty("组织简称") + private String name; + + @ApiModelProperty("组织全称") + private String fullName; + + @ApiModelProperty("子节点") + private List children = new ArrayList<>(); + + @ApiModelProperty("节点类型(1 组织 2 人员)") + private String type; + + @ApiModelProperty("用户信息") + private User userDTO; + private String userId; + private RiskPointInfo riskPointInfo; + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + @Override + public String getNodeId() { + return id + ""; + } + + @Override + public String getNodeParentId() { + return pid + ""; + } + + @Override + public void setChildrenNodes(List childrenNodes) { + children.addAll(childrenNodes); + children = children.stream().distinct().collect(Collectors.toList()); + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupPointVO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupPointVO.java new file mode 100644 index 0000000..3f6ca41 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupPointVO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.group.vo; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 风险点所属人员组对象VO + * + * @author lwh + * @date 2024-07-11 + */ +@Data +public class SysRiskGroupPointVO { + private static final long serialVersionUID = 1L; + + + @ApiModelProperty(value = "用户组ID", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备ID", dataType = "Long") + private Long targetId; + + public QueryWrapper genQuery() { + QueryWrapper query = new QueryWrapper<>(); + if (groupId != null) { + query.eq("group_id", groupId); + } + if (targetId != null) { + query.eq("target_id", targetId); + } + return query; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupRelUserVO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupRelUserVO.java new file mode 100644 index 0000000..5a95d82 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupRelUserVO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.group.vo; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 组人员管理对象VO + * + * @author lwh + * @date 2024-07-11 + */ +@Data +public class SysRiskGroupRelUserVO { + private static final long serialVersionUID = 1L; + + + @ApiModelProperty(value = "组ID", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + private Long userId; + + public QueryWrapper genQuery() { + QueryWrapper query = new QueryWrapper<>(); + if (groupId != null) { + query.eq("group_id", groupId); + } + if (userId != null) { + query.eq("user_id", userId); + } + return query; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskUserGroupVO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskUserGroupVO.java new file mode 100644 index 0000000..6363c3b --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskUserGroupVO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.group.vo; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.system.model.SysUserGroup; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 用户组信息对象VO + * + * @author lwh + * @date 2024-07-11 + */ +@Data +public class SysRiskUserGroupVO { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "用户组名称", dataType = "String") + private String groupName; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + private Long deptId; + @ApiModelProperty(value = "创建时间起始", dataType = "String") + private String startTime; + @ApiModelProperty(value = "创建时间结束", dataType = "String") + private String endTime; + @ApiModelProperty(value = "创建者ID", dataType = "Long") + private Long createId; + + public QueryWrapper genQuery() { + QueryWrapper query = new QueryWrapper<>(); + if (StrUtil.isNotEmpty(groupName)) { + query.like("a.group_name", groupName); + } + if (StrUtil.isNotEmpty(startTime)) { + query.ge("a.create_time", startTime); + } + if (StrUtil.isNotEmpty(endTime)) { + query.le("a.create_time", endTime); + } + if (deptId != null) { + query.eq("a.dept_id", deptId); + } + if (createId != null) { + query.eq("a.create_id", createId); + } + return query; + } +} diff --git a/casic-web/src/main/resources/doc/20250227.txt b/casic-web/src/main/resources/doc/20250227.txt new file mode 100644 index 0000000..daf4d4c --- /dev/null +++ b/casic-web/src/main/resources/doc/20250227.txt @@ -0,0 +1,68 @@ +1.权限配置检查 + 对应属性需配置为 security_admin + casic: + video: + admin: + role: security_admin +1.租户设定更新 + 创建租户设定角色 角色别名必须是tenantAdministrator + + 分配给管理员 需手动入库授权, sys_user表 role_id字段添加租户设定字段, + sys_ru_relation 添加用户绑定关系 + + INSERT INTO sys_tenant(ID, TENANT_NAME, TENANT_CODE, LINK_PERSON, TEL, CLEARDAY, FLAG, TS) VALUES (1, '航天二院', '001', NULL, NULL, NULL, '0', '2025-02-21 14:41:20'); + + ALTER TABLE sys_user_group ADD COLUMN tenant_id VARCHAR(64); + ALTER TABLE sys_group_device ADD COLUMN tenant_id VARCHAR(64); + ALTER TABLE sys_group_rel_user ADD COLUMN tenant_id VARCHAR(64); + ALTER TABLE device_group_info ADD COLUMN tenant_id VARCHAR(64); + update device_group_info set tenant_id = 1; + update sys_user set tenant_id = 1; + update sys_role set tenant_id = 1; + update sys_rm_relation set tenant_id = 1; + update sys_ru_relation set tenant_id = 1; + update sys_dept set tenant_id = 1; + update sys_user_group set tenant_id = 1; + update sys_group_device set tenant_id = 1; + update sys_group_rel_user set tenant_id = 1; + 添加租户ID 0 + +2.表risk_point_info 字段 secret_level值密级默认 0 设定 + +3.新增表 sys_user_risk_group sys_risk_group_rel_user sys_risk_group_point + +CREATE TABLE sys_user_risk_group +( + id numeric(20,0) NOT NULL, + group_name VARCHAR(256), + create_time date, + dept_id numeric(20,0), + create_id numeric(20,0), + description VARCHAR(256), + safe SMALLINT, + group_type SMALLINT, + tenant_id VARCHAR(64), + PRIMARY KEY (id) +); + +CREATE TABLE sys_risk_group_rel_user +( + id numeric(20,0) NOT NULL, + group_id numeric(20,0), + user_id numeric(20,0), + create_time date, + tenant_id VARCHAR(64) +); + +CREATE TABLE sys_risk_group_point +( + id numeric(20,0) NOT NULL, + group_id numeric(20,0), + create_time date, + target_id numeric(20,0), + tenant_id VARCHAR(64) +); + + + + diff --git a/casic-web/src/main/resources/doc/20250416.txt b/casic-web/src/main/resources/doc/20250416.txt new file mode 100644 index 0000000..14610e9 --- /dev/null +++ b/casic-web/src/main/resources/doc/20250416.txt @@ -0,0 +1,18 @@ +1.增加识别流开关 流媒体id 识别流国标号 + ALTER TABLE box_device_relation ADD COLUMN media_server_id VARCHAR(255); + ALTER TABLE box_device_relation ADD COLUMN recognition_gb VARCHAR(255); + ALTER TABLE box_device_relation ADD COLUMN recognition_stream_flag int; + + + + ALTER TABLE upload_log ADD COLUMN tenant_id VARCHAR(64); +2.增加字典值 mediaServerId + 对应值参考zlm中的mediaServerId 配置项 +3.更新box_device表以下字段类型为text + server_public_key + server_private_key + client_public_key + client_private_key + +4.casic.no-login-urls + 增加 /record/upload \ No newline at end of file diff --git a/casic-web/src/main/resources/doc/20250519.txt b/casic-web/src/main/resources/doc/20250519.txt new file mode 100644 index 0000000..6d70728 --- /dev/null +++ b/casic-web/src/main/resources/doc/20250519.txt @@ -0,0 +1,3 @@ +1.固定秘钥解析 + 配置项增加 + casic.client.privateKey \ No newline at end of file diff --git a/casic-web/src/main/resources/doc/20250522.md b/casic-web/src/main/resources/doc/20250522.md new file mode 100644 index 0000000..636b4df --- /dev/null +++ b/casic-web/src/main/resources/doc/20250522.md @@ -0,0 +1,80 @@ +## 一、数据库更新 + +1. 操作日志增加IP字段 + +``` +ALTER TABLE sys_operation_log ADD COLUMN IP VARCHAR(255); +``` + +2. 角色添加业务类型 + +``` +ALTER TABLE sys_role ADD COLUMN BIZ_TYPE VARCHAR(32) default 'normal' COMMENT '业务类型标识字段,用于区分不同业务模块的资源,比如三员 安全生产'; +``` + +3. 资源添加业务类型及相关字典值 + +``` +ALTER TABLE sys_resource ADD COLUMN BIZ_TYPE VARCHAR(32) default 'normal' COMMENT '业务类型标识字段,用于区分不同业务模块的资源,比如三员 安全生产'; + +INSERT INTO `sys_dict` (`ID`, `NUM`, `PID`, `NAME`, `TIPS`, `CODE`, `TENANT_ID`) VALUES (1925798590442455041, '0', 0, '业务分类', '业务分类', 'bizType', NULL); +INSERT INTO `sys_dict` (`ID`, `NUM`, `PID`, `NAME`, `TIPS`, `CODE`, `TENANT_ID`) VALUES (1925798590442455042, '0', 1925798590442455041, '普通业务', NULL, 'normal', NULL); +INSERT INTO `sys_dict` (`ID`, `NUM`, `PID`, `NAME`, `TIPS`, `CODE`, `TENANT_ID`) VALUES (1925798590505369602, '1', 1925798590442455041, '三员权限', NULL, 'audit', NULL); + +``` +系统三员角色从数据库初始化 bizType为audit 其他角色为normal +系统菜单资源数据修改,系统管理下所有菜单及按钮设置bizType为audit,其他业务功能设置为normal + +4. 增加操作审批表结构 + +CREATE TABLE sys_operation_application +( +id numeric(20,0) NOT NULL, +create_time datetime , +update_time datetime , +title varchar(255) , +json_context text , +status char(1), +operation_type varchar(64) , +operation_remark varchar(255) , +audit_remark varchar(255) , +tenant_id varchar(64) , +create_id numeric(20,0) , +audit_id numeric(20,0) , +PRIMARY KEY (id) +) + +业务操作类关系如下 +增加operationType字典 +user_add 用户新增 +user_update 用户修改 +user_delete 用户删除 +user_reset 密码重置 +user_freeze 用户冻结 +user_unfreeze 用户解冻 +user_roleAssign 用户角色分配 + +role_add 角色新增 +role_update 角色修改 +role_delete 角色删除 +role_funcAuthor 角色功能权限配置 +role_dataAuthor 角色数据权限配置 + +resource_add 资源新增 +resource_update 资源修改 +resource_delete 资源删除 + +dept_add 组织新增 +dept_update 组织修改 +dept_delete 组织删除 + +casic.tenant.excludes 配置项增加 ,sys_operation_application + +对应角色只能授权对应角色资源 +## 二、设备同步自动提取所属组织机构 +1.增加开启配置项 +casic.video.av.autoDept: true #默认开启 + + + + diff --git "a/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250113\346\225\260\346\215\256\345\272\223.txt" "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250113\346\225\260\346\215\256\345\272\223.txt" new file mode 100644 index 0000000..9b3fde9 --- /dev/null +++ "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250113\346\225\260\346\215\256\345\272\223.txt" @@ -0,0 +1,12 @@ +ALTER TABLE box_device +MODIFY COLUMN server_public_key VARCHAR(512), +MODIFY COLUMN server_private_key VARCHAR(1024), +MODIFY COLUMN client_public_key VARCHAR(512), +MODIFY COLUMN client_private_key VARCHAR(1024); + +ALTER TABLE sys_config MODIFY COLUMN VALUE TEXT; + + + +INSERT INTO sys_resource(ID, PID, CODE, P_CODE, P_CODES, NAME, ICON, URL, NUM, LEVELS, IS_MENU, TIPS, IS_OPEN, RESOURCE_TYPE, CREATE_USER, UPDATE_USER, CREATE_TIME, UPDATE_TIME, DEL_FLAG, TENANT_ID, STATUS) VALUES (1872184789440688129, 0, 'bigScreen', '0', '[0],', '安全生产智慧监管平台', '', '/bigScreen', 0, 1, '1', NULL, '0', '03', 1832137050074128386, NULL, '2024-12-26 07:36:52', NULL, '0', NULL, '0'); +INSERT INTO sys_resource(ID, PID, CODE, P_CODE, P_CODES, NAME, ICON, URL, NUM, LEVELS, IS_MENU, TIPS, IS_OPEN, RESOURCE_TYPE, CREATE_USER, UPDATE_USER, CREATE_TIME, UPDATE_TIME, DEL_FLAG, TENANT_ID, STATUS) VALUES (1879080561335627777, 105, 'sys_bsConfig', 'system', '[0],[system],', '大屏配置', 'icon-bs', '/sys/bsConfig', 0, 2, '1', NULL, '0', '03', 1832137050074128386, 1832137050074128386, '2025-01-14 08:18:12', '2025-01-14 08:25:05', '0', NULL, '0'); diff --git "a/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250120\351\205\215\347\275\256.txt" "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250120\351\205\215\347\275\256.txt" new file mode 100644 index 0000000..4d3700f --- /dev/null +++ "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250120\351\205\215\347\275\256.txt" @@ -0,0 +1,13 @@ +1.配置最大上传文件 max-file-size 更改为150 + spring: + servlet: + multipart: + max-file-size: 150MB + max-request-size: 80MB + nginx也需设置 +2.登录不拦截配置项 + casic: + no-login-urls: + 增加 ,/sync/device/** + + INSERT INTO `casic-production-safety`.`sys_config`(`ID`, `VALUE`, `TARGET_NAME`, `CLASS_NAME`, `DESCRIPTION`, `TENANT_ID`) VALUES (1879417287790792706, '[{\"monitorName\":\"casic01\",\"deviceTypeName\":\"枪机\",\"deptName\":\"203\",\"areaName\":\"成都A区\",\"longitude\":\"116.258555\",\"latitude\":\"39.908447\",\"secretLevelName\":\"内部\",\"deviceStatusName\":\"在线\",\"cameraIndexCode\":\"34020000001320000003\",\"nvrIndexCode\":\"34020000001110000002\",\"picture\":\"http://192.168.83.42:6909/safe-server//picture/download/undefined?token=2c1e8cb8-e3f0-4fb5-af4f-7f3e3ce75add\"},{\"monitorName\":\"casic04\",\"deviceTypeName\":\"枪机\",\"deptName\":\"203\",\"areaName\":\"永定路A区域\",\"longitude\":\"116.258555\",\"latitude\":\"39.908447\",\"secretLevelName\":\"公开\",\"deviceStatusName\":\"在线\",\"cameraIndexCode\":\"34020000001320000008\",\"nvrIndexCode\":\"34020000001110000002\",\"picture\":\"http://192.168.83.42:6909/safe-server//picture/download/undefined?token=2c1e8cb8-e3f0-4fb5-af4f-7f3e3ce75add\"},{\"monitorName\":\"casic01\",\"deviceTypeName\":\"枪机\",\"deptName\":\"203\",\"areaName\":\"成都A区\",\"longitude\":\"116.258555\",\"latitude\":\"39.908447\",\"secretLevelName\":\"内部\",\"deviceStatusName\":\"在线\",\"cameraIndexCode\":\"34020000001320000003\",\"nvrIndexCode\":\"34020000001110000002\",\"picture\":\"http://192.168.83.42:6909/safe-server//picture/download/undefined?token=2c1e8cb8-e3f0-4fb5-af4f-7f3e3ce75add\"},{\"monitorName\":\"casic04\",\"deviceTypeName\":\"枪机\",\"deptName\":\"203\",\"areaName\":\"永定路A区域\",\"longitude\":\"116.258555\",\"latitude\":\"39.908447\",\"secretLevelName\":\"公开\",\"deviceStatusName\":\"在线\",\"cameraIndexCode\":\"34020000001320000008\",\"nvrIndexCode\":\"34020000001110000002\",\"picture\":\"http://192.168.83.42:6909/safe-server//picture/download/undefined?token=2c1e8cb8-e3f0-4fb5-af4f-7f3e3ce75add\"},{\"monitorName\":\"casic01\",\"deviceTypeName\":\"枪机\",\"deptName\":\"203\",\"areaName\":\"成都A区\",\"longitude\":\"116.258555\",\"latitude\":\"39.908447\",\"secretLevelName\":\"内部\",\"deviceStatusName\":\"在线\",\"cameraIndexCode\":\"34020000001320000003\",\"nvrIndexCode\":\"34020000001110000002\"},{\"monitorName\":\"casic04\",\"deviceTypeName\":\"枪机\",\"deptName\":\"203\",\"areaName\":\"永定路A区域\",\"longitude\":\"116.258555\",\"latitude\":\"39.908447\",\"secretLevelName\":\"公开\",\"deviceStatusName\":\"在线\",\"cameraIndexCode\":\"34020000001320000008\",\"nvrIndexCode\":\"34020000001110000002\"}]', 'casic.bg.config', NULL, NULL, NULL); diff --git "a/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250121.txt" "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250121.txt" new file mode 100644 index 0000000..f5df373 --- /dev/null +++ "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250121.txt" @@ -0,0 +1,2 @@ +ALTER TABLE box_device ADD COLUMN path VARCHAR(512); +ALTER TABLE box_device ADD COLUMN version VARCHAR(512); \ No newline at end of file diff --git "a/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250217.txt" "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250217.txt" new file mode 100644 index 0000000..2488c3b --- /dev/null +++ "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250217.txt" @@ -0,0 +1 @@ +ALTER TABLE risk_point_info MODIFY COLUMN substances_quantities VARCHAR(1024); \ No newline at end of file diff --git "a/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250225.txt" "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250225.txt" new file mode 100644 index 0000000..dbb2424 --- /dev/null +++ "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250225.txt" @@ -0,0 +1,7 @@ +1.nginx版本号 关闭 +2.后台配置 casic.no-login-urls 中 ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin, 先暂时移除,做好备份 +3.nginx 代理路径下其他文件先移除,或者修改nginx代理路径到新路径(保障只有前端包) +4.后台配置 casic.no-login-urls 中移除 /v2/api-docs,/v2/api-docs-ext,/doc.html,/v2/api-docs/swagger-ui.html,/swagger-resources + + + diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java new file mode 100644 index 0000000..1ca5eb1 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java @@ -0,0 +1,63 @@ +package com.casic.missiles.modular.device.enums; + +/** + * wvp设备类型转换 + * + * @author lwh + * @Date 2017年1月10日 下午9:54:13 + */ +public enum AvDeptEnum { + + DEPT0("0066", "801",0L), + DEPT1("0059", "699厂",1L), + DEPT2("0055", "283厂",1L), + DEPT3("0022", "201所",1L), + DEPT4("0027", "206所",1L), + DEPT5("0013", "23所",1L); + + String code; + String message; + Long deptId; + AvDeptEnum(String code, String message, Long deptId) { + this.code = code; + this.message = message; + this.deptId = deptId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public static AvDeptEnum valueOfCode(String value) { + if (value == null) { + return null; + } else { + for (AvDeptEnum ms : AvDeptEnum.values()) { + if (ms.getCode().equals(value)) { + return ms; + } + } + return null; + } + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java new file mode 100644 index 0000000..573d0e2 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.task; + +import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; + +public class Test { + public static void main(String[] args) { + System.out.println(AvStatusTypeEnum.valueOfType(new Integer(1)).getMessage()); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java new file mode 100644 index 0000000..7c06c67 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java @@ -0,0 +1,77 @@ +package com.casic.missiles.modular.device.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpSession; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class RiskSyncController extends BaseController { + @Resource + private IClientAuthService clientAuthService; + @Resource + private AbstractDeptService deptService; + @Resource + private AbstractUserService userService; + @PostMapping("/client/login") + @ResponseBody + public ResponseData login(@RequestBody RiskLoginForm deviceLoginForm, HttpSession session) { + return clientAuthService.login(deviceLoginForm, session); + } + + /** + * 全量组织信息读取 + * + * @return + */ + @PostMapping("/dept/list") + @ResponseBody + public ResponseDataDTO> dept() { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = deptService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量用户信息读取 + * + * @return + */ + @PostMapping("/user/list") + @ResponseBody + public ResponseDataDTO> user() { + //todo 此处租户拦截需移除 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量设备信息读取 + * + * @return + */ + @PostMapping("/device/list") + @ResponseBody + public ResponseDataDTO> device() { + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java new file mode 100644 index 0000000..5e5b890 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class UserSyncController extends BaseController { + + @Resource + private IBusDeviceInfoService busDeviceInfoService; + + /** + * 登录用户授权设备权限查看 + * @return + */ + @GetMapping("/device/permissions") + @ResponseBody + public ResponseDataDTO> devicePermissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } + + /** + * 登录用户风险点授权查询 + * @return + */ + @GetMapping("/permissions") + @ResponseBody + public ResponseDataDTO> permissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java new file mode 100644 index 0000000..07b8df8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +/** + * 设备登录接口 + */ +@Data +public class RiskLoginForm { + /** + * 设备编码 + */ + private String clientId; + + /** + * 时间戳 + */ + private Long time; + + /** + * 加密后数据 加密格式sn+时间戳 时效性为6小时 + */ + private String secret; + + /** + * 设备登录注册IP + */ + private String ip; + + /** + * 设备登录注册port + */ + private String port; +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java new file mode 100644 index 0000000..40fdb4b --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.device.service; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; + +import javax.servlet.http.HttpSession; + +public interface IClientAuthService { + /** + * @param deviceLoginForm + * @param session + * @return + */ + ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session); +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java new file mode 100644 index 0000000..576e857 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.device.service.impl; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import cn.hutool.jwt.JWT; +import cn.hutool.jwt.JWTUtil; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.util.IRiskCacheUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpSession; +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Service +public class ClientAuthServiceImpl implements IClientAuthService { + @Value("${casic.client.privateKey:MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALKcwHHOg0F6Zkq7GOVnOnTgvH9vSPXFFTOcEqOVBIBPBz7UNrEGkp1PhZ+oC4WVJAsDuot2e1fDZy9QS9HF92MmnYp9kuQRhGZjHctPnVZ0Kai5BES0ytHqPeauLyNXxOOS0YKYEUwpft4Z5Azw7bj3JWNvLrnTZvNld6FDvTslAgMBAAECgYAqN/kZLYpC+O6i7XSmDO95XwHPUXu6dDpdt5+EQR4OQh/hTwIaeAZB3uEj6vHGQomBfQEkI/5lsU97lIxHanbd+Hro7JyIhsGD5LR5XnZHVKzFiZW62OIU6FI9dlQNN8miiblnmyDwiMA3okaHl0O7qQjZ+IvY2csgmJc7AXpPpQJBAOhrhcfWFcgffj2O6HYNlBLFfbboc/ZzrEADDXKnxRSHlo5o8W+6gylG/L2NGtbag5S68B9VYzdkSQ1++5C+Ws8CQQDEu7h311PLEiKgqzGHpjzadQETmt/jMadaKQmT0TZwNVi6X8lR17U5hF8dAqZzUzr9kUC0HRIZhg4Uv1v3W3fLAkB4YPhxgJjXhjhEefg87Nt8vX1Xdx5Yz6CvpuUYNX0GHRQFvqUOUXQNtQ7CvorgLV1pc0lbcUZqMi8EJnj1hyJRAkEAjHXWm8GiMt+M15fCsi3vTq2xChVOekBuUsHv85iwvGZqJg7ThtpyqlEnM2g7/STUfkvhnXcQACclEI0blTy6BwJAPmFyhU+d0ejVpbc53TdrL2HqYYUHi/tTy/dtUa7lbypzdwwJ2M1Tv5PE8sQxr9tgMbebfxVb/RFKdiCCtzC4ng==}") + private String privateKey; + + @Override + public ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session) { + //固定秘钥解析 + try { + String str = RSAUtils.decrypt(deviceLoginForm.getSecret(), privateKey); + Long time = Long.valueOf(StrUtil.split(str, "_").get(1)); + //边缘盒子时差与服务时差不可超过24小时 + if (time == null || System.currentTimeMillis() - time > 3600 * 24 * 1000) { + return ResponseData.error("请求时间超时"); + } + deviceLoginForm.setTime(time); + } catch (Exception e) { + e.printStackTrace(); + return ResponseData.error("设备解析异常!"); + } + + try { + String token = this.createJwtToken(deviceLoginForm); + IRiskCacheUtil.put(token, token); + return ResponseData.success(token); + } catch (Exception e) { + log.error("设备登录异常:{}", e.getMessage()); + return ResponseData.error("登录异常,请联系管理员"); + } +} + /** + * token创建 + * + * @param loginForm 登录信息 + * @param device 设备信息 + * @return + * @throws Exception + */ + public String createJwtToken(RiskLoginForm loginForm) throws Exception { + Map payload = new HashMap<>(); + payload.put("clientId", loginForm.getClientId()); // 设备编号 + payload.put("time", loginForm.getTime()); // 请求时间 + + //RSA 解密 + String str = RSAUtils.decrypt(loginForm.getSecret(), privateKey); + String key = loginForm.getClientId()+"_" + loginForm.getTime() ; + if (!key.equals(str)) { + //秘钥验证失败 + throw new ServiceException(500,"秘钥验证失败"); + } + +// long exp = new Date().getTime() + 2 * 3600000; // 2小时后的时间戳 +// payload.put("exp", exp); + + // 创建JWT + String jwt = JWTUtil.createToken(payload, "token-203-202405".getBytes()); + + return jwt; + } + + /** + * token解析 + * + * @param jwtStr token + * @return + * @throws Exception + */ + public static RiskLoginForm parseToken(String jwtStr){ + JWT jwtObj = new JWTUtil().parseToken(jwtStr); + RiskLoginForm deviceLoginForm = new RiskLoginForm(); + deviceLoginForm.setClientId(Convert.toStr(jwtObj.getPayload("clientId"))); + return deviceLoginForm; + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java new file mode 100644 index 0000000..0e91ac8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.util; +import cn.hutool.cache.Cache; +import cn.hutool.cache.CacheUtil; +/** + * token有效 + */ +public class IRiskCacheUtil { + /** + * 1小时内不活跃 会踢掉 + */ + private static Cache fifoCache = CacheUtil.newFIFOCache(1000, 1000 * 60 * 60); + + public static void put(String key, String value) { + fifoCache.put(key, value); + } + + public static String get(String key) { + return fifoCache.get(key); + } + + public static void remove(String key) { + fifoCache.remove(key); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java new file mode 100644 index 0000000..805c32a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceGroupDict extends AbstractDictMap { + + @Override + public void init() { + //检索条件 + put("groupName", "分组名称"); + put("startTime", "起始时间"); + put("endTime", "结束时间"); + //新增修改属性 + put("cameraIds", "设备国标号"); + put("personIds", "人员主键集合"); + put("description","备注"); + put("id","主键"); + put("ids","主键集合"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java new file mode 100644 index 0000000..895fbd9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceQueryDict extends AbstractDictMap { + + @Override + public void init() { + put("devType", "类型查询"); + put("keyword", "设备名称"); + put("deptName", "所属单位"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java new file mode 100644 index 0000000..88da6df --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.device.util; + +public class DeviceScopeUtil { +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java new file mode 100644 index 0000000..2e3e478 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.device.controller; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.auth.dto.DeviceLoginForm; +import com.casic.missiles.modular.auth.util.ICacheUtil; +import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; +import com.casic.missiles.modular.device.service.IAlarmRecordService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +@Api(tags = "告警记录") +@RestController +@RequestMapping("/record") +public class AlarmUploadController extends BaseController { + + private final IAlarmRecordService alarmRecordService; + private final IDeviceAuthService deviceAuthService; + public AlarmUploadController(IAlarmRecordService alarmRecordService, IDeviceAuthService deviceAuthService) { + this.alarmRecordService = alarmRecordService; + this.deviceAuthService = deviceAuthService; + } + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } + @BussinessLog(value = "告警记录上报接口") + @ApiOperation(value = "告警记录上报接口") + @PostMapping(value = "/upload") + public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return createAuthError(); + } + alarmRecordService.upload(alarmRecord); + return ResponseDataDTO.success(); + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java new file mode 100644 index 0000000..3f1c189 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class RecognitionStreamDTO { + private Long id; + private String recognitionStreamFlag; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java new file mode 100644 index 0000000..fa5ae4a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java @@ -0,0 +1,167 @@ +package com.casic.missiles.modular.group.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IRiskPointInfoService; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.group.vo.SysRiskGroupPointVO; +import com.casic.missiles.modular.group.vo.SysRiskGroupRelUserVO; +import com.casic.missiles.modular.group.vo.SysRiskUserGroupVO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import com.casic.missiles.modular.system.vo.SysGroupRelUserVO; +import com.casic.missiles.modular.system.vo.SysUserGroupVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.ibatis.annotations.Param; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; + +/** + * 风险点组信息Controller + * + * @author lwh + * @date 2024-07-11 + */ +@Api(tags = "风险点组信息") +@RestController +@RequestMapping("/sys/risk/group") +public class SysUserRiskGroupController extends BaseController { + private final IRiskPointInfoService riskPointInfoService; + private final ISysUserRiskGroupService sysUserGroupService; + private final AbstractPermissionContext permissionContext; + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysUserRiskGroupController(IRiskPointInfoService riskPointInfoService, ISysUserRiskGroupService sysUserGroupService, AbstractPermissionContext permissionContext, ISysRiskGroupRelUserService sysGroupRelUserService) { + this.riskPointInfoService = riskPointInfoService; + this.sysUserGroupService = sysUserGroupService; + this.permissionContext = permissionContext; + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @BussinessLog(value = "风险点分组查询") + @ApiOperation(value = "风险点分组查询", hidden = true) + @GetMapping(value = "/list") + public ResponseDataDTO> list(SysRiskUserGroupVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysUserGroupService.list(query)); + } + + @BussinessLog(value = "分组人员列表查询") + @ApiOperation(value = "分组人员列表查询") + @GetMapping(value = "/groupUserList") + public ResponseDataDTO> groupUserList(SysRiskGroupRelUserVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysGroupRelUserService.list(query)); + } + + @BussinessLog(value = "风险点分组人员查询") + @ApiOperation(value = "风险点分组人员分页查询") + @GetMapping(value = "/groupUserPage") + public ResponseDataDTO> listPage(SysRiskGroupRelUserVO sysGroupRelUserVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysGroupRelUserVO.genQuery(); + List relUsers = sysGroupRelUserService.selectSysGroupRelUserPage(page, query); + page.setRecords(relUsers); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "用户分组批量新增") + @ApiOperation(value = "批量新增接口") + @PostMapping(value = "/batch-add") + public ResponseDataDTO batchAdd(@RequestBody GroupUserRelDTO relDTO) { + sysGroupRelUserService.batchAdd(relDTO); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组人员删除") + @ApiOperation(value = "用户组人员删除接口") + @GetMapping(value = "/user/delete") + public ResponseDataDTO userDel(@Param("用户组人员关联主键") String id) { + sysGroupRelUserService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "风险点分组分页查询") + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(SysRiskUserGroupVO sysUserGroupVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysUserGroupVO.genQuery(); + + List sysUserGroups = sysUserGroupService.selectSysUserGroupPage(page, query); + page.setRecords(sysUserGroups); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "风险点分组新增") + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.save(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组修改") + @ApiOperation(value = "修改接口") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.updateById(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组删除") + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + sysUserGroupService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "批量删除") + @ApiOperation(value = "批量删除", hidden = true) + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + sysUserGroupService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "详情查询") + @ApiOperation(value = "详情查询", hidden = true) + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(sysUserGroupService.getById(id)); + } + + @BussinessLog(value = "用户树") + @ApiOperation(value = "用户树查询") + @GetMapping(value = "/person/tree") + public ResponseDataDTO> personTree() { + return ResponseDataDTO.success(sysUserGroupService.personTree()); + } + + @BussinessLog(value = "风险点树查询") + @ApiOperation(value = "风险点树查询") + @GetMapping(value = "/tree") + public ResponseDataDTO> tree(String riskType) { + return ResponseDataDTO.success(riskPointInfoService.tree(riskType)); + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java new file mode 100644 index 0000000..419eb27 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备所属人员组 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupPointMapper extends BaseMapper { +/** +* 设备所属人员组 分页检索 +*/ +List selectSysGroupDevicePage(@Param("page") Page page, @Param("ew" ) QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java new file mode 100644 index 0000000..eb41227 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 组人员管理 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupRelUserMapper extends BaseMapper { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java new file mode 100644 index 0000000..e8352df --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.system.model.SysUserGroup; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 用户组信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysUserRiskGroupMapper extends BaseMapper { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml new file mode 100644 index 0000000..6fa6a4d --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + id , + group_id as groupId , + create_time as createTime , + target_Id as targetId + + + a.id , + a.group_id + as groupId , + a.create_time + as createTime , + a.target_Id + as targetId + + + + + + and group_id = #{request.groupId} + + + and device_id = #{request.deviceId} + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml new file mode 100644 index 0000000..a627546 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + id , + group_id as groupId , + user_id as userId , + create_time as createTime + + + a.id, + a.group_id + as groupId , + a.user_id + as userId , + a.create_time + as createTime + + + + + + and group_id = #{request.groupId} + + + and user_id = #{request.userId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml new file mode 100644 index 0000000..3245136 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + id, + group_name as groupName , + create_time as createTime , + dept_id as deptId , + create_id as createId + + + a.id,a.group_name as groupName , + a.create_time + as createTime , + a.dept_id + as deptId , + a.create_id + as createId,a.description + + + + + + and group_name like concat('%',#{request.groupName},'%') + + + and dept_id = #{request.deptId} + + + and create_id = #{request.createId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java new file mode 100644 index 0000000..e44328f --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class GroupRiskRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("风险点集合") + private List targetIds; + @ApiModelProperty("用户ID集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java new file mode 100644 index 0000000..f8758bf --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class RiskGroupUserRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("设备集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java new file mode 100644 index 0000000..b386d5b --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java @@ -0,0 +1,53 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 风险点所属组 sys_risk_group_point + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_risk_group_point") +public class SysRiskGroupPoint extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableId("id") + private Long id; + + @ApiModelProperty(value = "用户组ID", dataType = "Long") + @TableField("group_id") + private Long groupId; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty(value = "风险点ID", dataType = "Long") + @TableField("target_id") + private Long targetId; + + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; + + @Override + public String toString() { + return "SysGroupDevice{" + + "id=" + id + + "groupId=" + groupId + + "createTime=" + createTime + + "targetId=" + targetId + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java new file mode 100644 index 0000000..949caa3 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java @@ -0,0 +1,55 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 组人员管理对象 sys_group_rel_user + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_risk_group_rel_user") +public class SysRiskGroupRelUser extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + + @ApiModelProperty(value = "组ID", dataType = "Long") + @TableField("group_id") + private Long groupId; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + @TableField("user_id") + private Long userId; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + @ApiModelProperty(value = "用户姓名", dataType = "String") + @TableField(exist = false) + private String realName; + + @ApiModelProperty(value = "用户名", dataType = "String") + @TableField(exist = false) + private String account; + + @Override + public String toString() { + return "SysGroupRelUser{" + + "id=" + id + + "groupId=" + groupId + + "userId=" + userId + + "createTime=" + createTime + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java new file mode 100644 index 0000000..1b73dc0 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java @@ -0,0 +1,97 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 危险点分组组信息对象 sys_user_risk_group + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_user_risk_group") +public class SysUserRiskGroup extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableId("id") + private Long id; + + @ApiModelProperty(value = "组名称", dataType = "String", required = true) + @TableField("group_name") + private String groupName; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty(value = "所属组织(保留字段)", dataType = "Long") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty(value = "描述信息", dataType = "String") + @TableField("description") + private String description; + + @ApiModelProperty(value = "密级字典", dataType = "String") + @TableField("safe") + private int safe; + + @ApiModelProperty(value = "创建者ID", dataType = "Long") + @TableField("create_id") + private Long createId; + + + @ApiModelProperty(value = "类型(1 危险点 2 重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "Long") + @TableField("group_type") + private String groupType; + @TableField(exist = false) + private String groupTypeName; + /** + * 风险点集合 + */ + @ApiModelProperty(value = "风险点集合(逗号拼接)", dataType = "String") + @TableField(exist = false) + private String pointIds; + + @ApiModelProperty(value = "数量", dataType = "Long") + @TableField(exist = false) + private Integer targetNum; + /** + * 用户集合 + */ + @ApiModelProperty(value = "用户集合(逗号拼接)", dataType = "String") + @TableField(exist = false) + private String personIds; + + @ApiModelProperty(value = "用户名称", dataType = "String") + @TableField(exist = false) + private String realName; + + @ApiModelProperty(value = "用户名", dataType = "String") + @TableField(exist = false) + private String account; + + @ApiModelProperty(value = "密级字典名称", dataType = "String") + @TableField(exist = false) + private String safeName; + + @Override + public String toString() { + return "SysUserGroup{" + + "id=" + id + + "groupName=" + groupName + + "createTime=" + createTime + + "deptId=" + deptId + + "createId=" + createId + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java new file mode 100644 index 0000000..4657ce4 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.device.dto.GroupRelDTO; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; + +import java.util.List; + + +/** + *

+ * 设备所属人员组 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysRiskGroupPointService extends IService { + /** + * 设备所属人员组 分页检索 + */ + List selectSysGroupDevicePage(Page page, QueryWrapper query); + + /** + * 设备组批量新增 + * + * @param relDTO + */ + void batchAdd(GroupRiskRelDTO relDTO); + + + /** + * 增量更新 + * @param groupId + * @param deviceIds + */ + void batchIncremental(Long groupId, List deviceIds); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java new file mode 100644 index 0000000..591eef2 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; + +import java.util.List; + + +/** + *

+ * 组人员管理 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysRiskGroupRelUserService extends IService { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(Page page, QueryWrapper query); + + void batchAdd(GroupUserRelDTO relDTO); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java new file mode 100644 index 0000000..1e0889c --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; + +import java.util.List; + + +/** + *

+ * 用户组信息 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysUserRiskGroupService extends IService { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(Page page, QueryWrapper query); + + List personTree(); + + /** + * 创建用户组 + * + * @param sysUserGroup 用户组信息 + * @param userIds 用户信息 + */ + void createSysUserGroup(SysUserRiskGroup sysUserGroup, List userIds); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java new file mode 100644 index 0000000..6839887 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java @@ -0,0 +1,118 @@ +package com.casic.missiles.modular.group.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +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.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.group.dao.SysRiskGroupPointMapper; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import com.casic.missiles.modular.group.service.ISysRiskGroupPointService; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + + +/** + *

+ * 设备所属人员组 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysRiskGroupPointServiceImpl extends ServiceImpl implements ISysRiskGroupPointService { + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysRiskGroupPointServiceImpl(ISysRiskGroupRelUserService sysGroupRelUserService) { + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @Override + public List selectSysGroupDevicePage(Page page, QueryWrapper query) { + return this.baseMapper.selectSysGroupDevicePage(page, query); + } + + @Transactional + @Override + public void batchAdd(GroupRiskRelDTO relDTO) { + + if (CollectionUtil.isEmpty(relDTO.getTargetIds())) { + ServiceException serviceException = new ServiceException(500, "添加不能为空!"); + throw serviceException; + } + + //删除 + QueryWrapper query = new QueryWrapper<>(); + query.eq("group_id", relDTO.getGroupId()); + this.remove(query); + + //保存分组与危险点对应关系 + List groupDevices = new ArrayList<>(); + for (Long deviceId : relDTO.getTargetIds()) { + SysRiskGroupPoint sysGroupDevice = new SysRiskGroupPoint(); + sysGroupDevice.setTargetId(deviceId); + sysGroupDevice.setGroupId(relDTO.getGroupId()); + sysGroupDevice.setCreateTime(new Date()); + groupDevices.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(groupDevices); + + //批量保存风险点与用户关系 + GroupUserRelDTO groupUserRelDTO = new GroupUserRelDTO(); + groupUserRelDTO.setGroupId(relDTO.getGroupId()); + groupUserRelDTO.setUserIds(relDTO.getUserIds()); + sysGroupRelUserService.batchAdd(groupUserRelDTO); + + } + + @Override + public void batchIncremental(Long groupId, List deviceIds) { + List groupDevices = this.list(new LambdaQueryWrapper().eq(SysRiskGroupPoint::getGroupId, groupId)); + if (CollectionUtil.isEmpty(groupDevices)) { + saveDevices(groupId, deviceIds); + } else { + List oldDevices = groupDevices.stream().map(SysRiskGroupPoint::getTargetId).collect(Collectors.toList()); + List delIds = CollectionUtil.subtractToList(oldDevices, deviceIds); + List saveDevices = CollectionUtil.subtractToList(deviceIds, oldDevices); + + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.eq(SysRiskGroupPoint::getGroupId, groupId); + delQuery.in(SysRiskGroupPoint::getTargetId, delIds); + if (CollectionUtil.isNotEmpty(delIds)) { + this.remove(delQuery); + } + saveDevices(groupId, saveDevices); + } + } + + private void saveDevices(Long groupId, List saveDevices) { + List saves = new ArrayList<>(); + for (Long deviceId : saveDevices) { + SysRiskGroupPoint sysGroupDevice = new SysRiskGroupPoint(); + sysGroupDevice.setTargetId(deviceId); + sysGroupDevice.setGroupId(groupId); + sysGroupDevice.setCreateTime(new Date()); + saves.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(saves); + } + + private void saveOrUpdateBatchList(List groupDevices) { + for (SysRiskGroupPoint groupDevice : groupDevices) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysRiskGroupPoint::getGroupId, groupDevice.getGroupId()); + query.eq(SysRiskGroupPoint::getTargetId, groupDevice.getTargetId()); + this.saveOrUpdate(groupDevice, query); + } + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java new file mode 100644 index 0000000..83cd76a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.group.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +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.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.group.dao.SysRiskGroupPointMapper; +import com.casic.missiles.modular.group.dao.SysRiskGroupRelUserMapper; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.system.dao.SysGroupRelUserMapper; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + + +/** + *

+ * 组人员管理 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysRiskGroupRelUserServiceImpl extends ServiceImpl implements ISysRiskGroupRelUserService { + @Override + public List selectSysGroupRelUserPage(Page page, QueryWrapper query) { + return this.baseMapper.selectSysGroupRelUserPage(page, query); + } + + @Transactional + @Override + public void batchAdd(GroupUserRelDTO relDTO) { + if (CollectionUtil.isEmpty(relDTO.getUserIds())) { + ServiceException serviceException = new ServiceException(500, "添加不能为空!"); + throw serviceException; + } + //删除 + QueryWrapper query = new QueryWrapper<>(); + query.eq("group_id",relDTO.getGroupId()); + this.remove(query); + //添加设备信息 + List groupDevices = new ArrayList<>(); + for (Long deviceId : relDTO.getUserIds()) { + SysRiskGroupRelUser sysGroupDevice = new SysRiskGroupRelUser(); + sysGroupDevice.setUserId(deviceId); + sysGroupDevice.setGroupId(relDTO.getGroupId()); + sysGroupDevice.setCreateTime(new Date()); + groupDevices.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(groupDevices); + } + + private void saveOrUpdateBatchList(List groupDevices) { + for (SysRiskGroupRelUser groupDevice : groupDevices) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysRiskGroupRelUser::getGroupId, groupDevice.getGroupId()); + query.eq(SysRiskGroupRelUser::getUserId, groupDevice.getUserId()); + this.saveOrUpdate(groupDevice, query); + } + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java new file mode 100644 index 0000000..b3bb9a8 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java @@ -0,0 +1,246 @@ +package com.casic.missiles.modular.group.service.impl; + +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.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.modular.data.constants.DataConstants; +import com.casic.missiles.modular.group.dao.SysUserRiskGroupMapper; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupPointService; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.tree.RiskGroupDefaultTreeBuildFactory; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + + +/** + *

+ * 用户组信息 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysUserRiskGroupServiceImpl extends ServiceImpl implements ISysUserRiskGroupService { + @Lazy + @Resource + private ISysRiskGroupPointService sysRiskGroupPointService; + private final AbstractPermissionContext abstractPermissionContext; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_USER = "2"; + private final AbstractDictService dictService; + @Lazy + @Resource + private ISysRiskGroupRelUserService relUserService; + + public SysUserRiskGroupServiceImpl(AbstractPermissionContext abstractPermissionContext, AbstractDictService dictService) { + this.abstractPermissionContext = abstractPermissionContext; + this.dictService = dictService; + } + + @Override + public List selectSysUserGroupPage(Page page, QueryWrapper query) { + //分组过滤当前权限 + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + query.in("a.dept_id", dataScope.getDeptIds()); + } + List riskGroups = this.baseMapper.selectSysUserGroupPage(page, query); + for (SysUserRiskGroup riskGroup : riskGroups) { + wrapperInfo(riskGroup); + } + return riskGroups; + } + + private void wrapperInfo(SysUserRiskGroup riskGroup) { + riskGroup.setSafeName(dictService.getDictNameByCode(DataConstants.DICT_SECRET_LEVEL_TYPE, riskGroup.getSafe() + "")); + //查询关联设备 + LambdaQueryWrapper deviceQuery = new LambdaQueryWrapper<>(); + deviceQuery.eq(SysRiskGroupPoint::getGroupId, riskGroup.getId()); + List devices = sysRiskGroupPointService.list(deviceQuery); + if (devices != null) { + List deviceList = devices.stream().map(SysRiskGroupPoint::getTargetId).collect(Collectors.toList()); + riskGroup.setPointIds(StrUtil.join(",", deviceList)); + riskGroup.setTargetNum(deviceList.size()); + } + + riskGroup.setGroupTypeName(dictService.getDictNameByCode(DataConstants.dangerAssessmentType, riskGroup.getGroupType())); + //查询关联人员 + LambdaQueryWrapper personQuery = new LambdaQueryWrapper<>(); + personQuery.eq(SysRiskGroupRelUser::getGroupId, riskGroup.getId()); + List persons = relUserService.list(personQuery); + if (persons != null) { + List personIds = persons.stream().map(SysRiskGroupRelUser::getUserId).collect(Collectors.toList()); + riskGroup.setPersonIds(StrUtil.join(",", personIds)); + } + } + + private void setGroupInfo(SysUserRiskGroup entity) { + if (StrUtil.isNotEmpty(entity.getPointIds())) { + entity.setTargetNum(StrUtil.split(entity.getPointIds(), ",").size()); + } else { + entity.setTargetNum(0); + } + } + + @Override + public boolean save(SysUserRiskGroup entity) { + AuthUser authUser = abstractPermissionContext.getAuthService().getLoginUser(); + entity.setCreateTime(new Date()); + entity.setCreateId(authUser.getId()); + if (entity.getDeptId() == null) { + entity.setDeptId(authUser.getDeptId()); + } + setGroupInfo(entity); + super.save(entity); + batchSave(entity, entity.getId()); + return true; + } + + @Override + public boolean updateById(SysUserRiskGroup entity) { + AuthUser authUser = abstractPermissionContext.getAuthService().getLoginUser(); + entity.setCreateTime(new Date()); + entity.setCreateId(authUser.getId()); + if (entity.getDeptId() == null) { + entity.setDeptId(authUser.getDeptId()); + } + setGroupInfo(entity); + super.updateById(entity); + batchSave(entity, entity.getId()); + return true; + } + + /** + * 数据转换 + * + * @param entity + * @param groupId + */ + private void batchSave(SysUserRiskGroup entity, Long groupId) { + GroupRiskRelDTO groupRelDTO = new GroupRiskRelDTO(); + groupRelDTO.setGroupId(groupId); + if (StrUtil.isNotEmpty(entity.getPointIds())) { + long[] longs = StrUtil.splitToLong(entity.getPointIds(), ","); + List devices = new ArrayList<>(); + for (long aLong : longs) { + devices.add(aLong); + } + groupRelDTO.setTargetIds(devices); + } + if (StrUtil.isNotEmpty(entity.getPersonIds())) { + List persons = new ArrayList<>(); + long[] longs = StrUtil.splitToLong(entity.getPersonIds(), ","); + + for (long aLong : longs) { + persons.add(aLong); + } + groupRelDTO.setUserIds(persons); + } + sysRiskGroupPointService.batchAdd(groupRelDTO); + } + + @Override + public List personTree() { + + //查询可见组织 + DataScope scope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + + LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { + deptQuery.in(Dept::getId, scope.getDeptIds()); + } + deptQuery.orderByAsc(Dept::getNum); + + List deptList = abstractPermissionContext.getDeptService().list(deptQuery); + List deptDTOS = new ArrayList<>(); + List rootIds = new ArrayList<>(); + Set normalIds = new HashSet<>(); + for (Dept dept : deptList) { + RiskGroupDeptDTO deptDTO = new RiskGroupDeptDTO(); + deptDTO.setPid(dept.getPid()); + deptDTO.setId(dept.getId()); + deptDTO.setFullName(dept.getFullName()); + deptDTO.setName(dept.getSimpleName()); + deptDTOS.add(deptDTO); + deptDTO.setType(NODE_TYPE_DEPT); + normalIds.add(dept.getId()); + + //挂载设备信息 + LambdaQueryWrapper deviceQuery = new LambdaQueryWrapper<>(); + deviceQuery.eq(User::getDeptId, deptDTO.getId()); + deviceQuery.eq(User::getStatus, "1"); + List deviceInfos = abstractPermissionContext.getUserService().list(deviceQuery); + + deptDTO.setChildrenNodes(deviceInfos.stream().map(this::createDeptDTO).collect(Collectors.toList())); + } + + for (RiskGroupDeptDTO deptDTO : deptDTOS) { + if (!normalIds.contains(deptDTO.getPid())) { + rootIds.add(deptDTO.getPid()); + } + } + + //过滤根节点,支持多根展示 + RiskGroupDefaultTreeBuildFactory abstractTreeBuildFactory = new RiskGroupDefaultTreeBuildFactory(); + List newTree = new ArrayList<>(); + rootIds = rootIds.stream().distinct().collect(Collectors.toList()); + for (Long rootId : rootIds) { + abstractTreeBuildFactory.setRootId(rootId + ""); + newTree.addAll(abstractTreeBuildFactory.doTreeBuild(deptDTOS)); + } + + return newTree; + } + + @Transactional + @Override + public void createSysUserGroup(SysUserRiskGroup sysUserGroup, List userIds) { + this.baseMapper.insert(sysUserGroup); + GroupUserRelDTO relDTO = new GroupUserRelDTO(); + relDTO.setGroupId(sysUserGroup.getId()); + relDTO.setUserIds(userIds); + relUserService.batchAdd(relDTO); + } + + + /** + * 创建节点 + * + * @param userInfo 用户信息 + * @return + */ + private GroupDeptDTO createDeptDTO(User userInfo) { + GroupDeptDTO deptDTO = new GroupDeptDTO(); + deptDTO.setType(NODE_TYPE_USER); + deptDTO.setId(userInfo.getId()); + deptDTO.setPid(userInfo.getDeptId()); + deptDTO.setUserDTO(userInfo); + deptDTO.setName(userInfo.getName()); + deptDTO.setFullName(userInfo.getName()); + deptDTO.setUserId(userInfo.getId() + ""); + return deptDTO; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/tree/RiskGroupDefaultTreeBuildFactory.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/tree/RiskGroupDefaultTreeBuildFactory.java new file mode 100644 index 0000000..69c18ad --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/tree/RiskGroupDefaultTreeBuildFactory.java @@ -0,0 +1,30 @@ +package com.casic.missiles.modular.group.tree; + +import com.casic.missiles.core.treebuild.DefaultTreeBuildFactory; +import com.casic.missiles.model.tree.Tree; + +import java.util.ArrayList; +import java.util.List; + +public class RiskGroupDefaultTreeBuildFactory extends DefaultTreeBuildFactory { + private String rootId; + @Override + protected List afterBuild(List nodes) { + //去掉所有的二级节点 + ArrayList results = new ArrayList<>(); + for (T node : nodes) { + if (node.getNodeParentId().equals(rootId)) { + results.add(node); + } + } + return results; + } + + public String getRootId() { + return rootId; + } + + public void setRootId(String rootId) { + this.rootId = rootId; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/RiskGroupDeptDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/RiskGroupDeptDTO.java new file mode 100644 index 0000000..7f6c157 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/RiskGroupDeptDTO.java @@ -0,0 +1,61 @@ +package com.casic.missiles.modular.group.vo; + +import com.casic.missiles.model.tree.Tree; +import com.casic.missiles.modular.device.model.RiskPointInfo; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +@Data +public class RiskGroupDeptDTO implements Tree { + @ApiModelProperty("组织主键") + private Long id; + + @ApiModelProperty("父部门ID") + private Long pid; + + @ApiModelProperty("组织简称") + private String name; + + @ApiModelProperty("组织全称") + private String fullName; + + @ApiModelProperty("子节点") + private List children = new ArrayList<>(); + + @ApiModelProperty("节点类型(1 组织 2 人员)") + private String type; + + @ApiModelProperty("用户信息") + private User userDTO; + private String userId; + private RiskPointInfo riskPointInfo; + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + @Override + public String getNodeId() { + return id + ""; + } + + @Override + public String getNodeParentId() { + return pid + ""; + } + + @Override + public void setChildrenNodes(List childrenNodes) { + children.addAll(childrenNodes); + children = children.stream().distinct().collect(Collectors.toList()); + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupPointVO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupPointVO.java new file mode 100644 index 0000000..3f6ca41 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupPointVO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.group.vo; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 风险点所属人员组对象VO + * + * @author lwh + * @date 2024-07-11 + */ +@Data +public class SysRiskGroupPointVO { + private static final long serialVersionUID = 1L; + + + @ApiModelProperty(value = "用户组ID", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备ID", dataType = "Long") + private Long targetId; + + public QueryWrapper genQuery() { + QueryWrapper query = new QueryWrapper<>(); + if (groupId != null) { + query.eq("group_id", groupId); + } + if (targetId != null) { + query.eq("target_id", targetId); + } + return query; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupRelUserVO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupRelUserVO.java new file mode 100644 index 0000000..5a95d82 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupRelUserVO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.group.vo; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 组人员管理对象VO + * + * @author lwh + * @date 2024-07-11 + */ +@Data +public class SysRiskGroupRelUserVO { + private static final long serialVersionUID = 1L; + + + @ApiModelProperty(value = "组ID", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + private Long userId; + + public QueryWrapper genQuery() { + QueryWrapper query = new QueryWrapper<>(); + if (groupId != null) { + query.eq("group_id", groupId); + } + if (userId != null) { + query.eq("user_id", userId); + } + return query; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskUserGroupVO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskUserGroupVO.java new file mode 100644 index 0000000..6363c3b --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskUserGroupVO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.group.vo; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.system.model.SysUserGroup; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 用户组信息对象VO + * + * @author lwh + * @date 2024-07-11 + */ +@Data +public class SysRiskUserGroupVO { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "用户组名称", dataType = "String") + private String groupName; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + private Long deptId; + @ApiModelProperty(value = "创建时间起始", dataType = "String") + private String startTime; + @ApiModelProperty(value = "创建时间结束", dataType = "String") + private String endTime; + @ApiModelProperty(value = "创建者ID", dataType = "Long") + private Long createId; + + public QueryWrapper genQuery() { + QueryWrapper query = new QueryWrapper<>(); + if (StrUtil.isNotEmpty(groupName)) { + query.like("a.group_name", groupName); + } + if (StrUtil.isNotEmpty(startTime)) { + query.ge("a.create_time", startTime); + } + if (StrUtil.isNotEmpty(endTime)) { + query.le("a.create_time", endTime); + } + if (deptId != null) { + query.eq("a.dept_id", deptId); + } + if (createId != null) { + query.eq("a.create_id", createId); + } + return query; + } +} diff --git a/casic-web/src/main/resources/doc/20250227.txt b/casic-web/src/main/resources/doc/20250227.txt new file mode 100644 index 0000000..daf4d4c --- /dev/null +++ b/casic-web/src/main/resources/doc/20250227.txt @@ -0,0 +1,68 @@ +1.权限配置检查 + 对应属性需配置为 security_admin + casic: + video: + admin: + role: security_admin +1.租户设定更新 + 创建租户设定角色 角色别名必须是tenantAdministrator + + 分配给管理员 需手动入库授权, sys_user表 role_id字段添加租户设定字段, + sys_ru_relation 添加用户绑定关系 + + INSERT INTO sys_tenant(ID, TENANT_NAME, TENANT_CODE, LINK_PERSON, TEL, CLEARDAY, FLAG, TS) VALUES (1, '航天二院', '001', NULL, NULL, NULL, '0', '2025-02-21 14:41:20'); + + ALTER TABLE sys_user_group ADD COLUMN tenant_id VARCHAR(64); + ALTER TABLE sys_group_device ADD COLUMN tenant_id VARCHAR(64); + ALTER TABLE sys_group_rel_user ADD COLUMN tenant_id VARCHAR(64); + ALTER TABLE device_group_info ADD COLUMN tenant_id VARCHAR(64); + update device_group_info set tenant_id = 1; + update sys_user set tenant_id = 1; + update sys_role set tenant_id = 1; + update sys_rm_relation set tenant_id = 1; + update sys_ru_relation set tenant_id = 1; + update sys_dept set tenant_id = 1; + update sys_user_group set tenant_id = 1; + update sys_group_device set tenant_id = 1; + update sys_group_rel_user set tenant_id = 1; + 添加租户ID 0 + +2.表risk_point_info 字段 secret_level值密级默认 0 设定 + +3.新增表 sys_user_risk_group sys_risk_group_rel_user sys_risk_group_point + +CREATE TABLE sys_user_risk_group +( + id numeric(20,0) NOT NULL, + group_name VARCHAR(256), + create_time date, + dept_id numeric(20,0), + create_id numeric(20,0), + description VARCHAR(256), + safe SMALLINT, + group_type SMALLINT, + tenant_id VARCHAR(64), + PRIMARY KEY (id) +); + +CREATE TABLE sys_risk_group_rel_user +( + id numeric(20,0) NOT NULL, + group_id numeric(20,0), + user_id numeric(20,0), + create_time date, + tenant_id VARCHAR(64) +); + +CREATE TABLE sys_risk_group_point +( + id numeric(20,0) NOT NULL, + group_id numeric(20,0), + create_time date, + target_id numeric(20,0), + tenant_id VARCHAR(64) +); + + + + diff --git a/casic-web/src/main/resources/doc/20250416.txt b/casic-web/src/main/resources/doc/20250416.txt new file mode 100644 index 0000000..14610e9 --- /dev/null +++ b/casic-web/src/main/resources/doc/20250416.txt @@ -0,0 +1,18 @@ +1.增加识别流开关 流媒体id 识别流国标号 + ALTER TABLE box_device_relation ADD COLUMN media_server_id VARCHAR(255); + ALTER TABLE box_device_relation ADD COLUMN recognition_gb VARCHAR(255); + ALTER TABLE box_device_relation ADD COLUMN recognition_stream_flag int; + + + + ALTER TABLE upload_log ADD COLUMN tenant_id VARCHAR(64); +2.增加字典值 mediaServerId + 对应值参考zlm中的mediaServerId 配置项 +3.更新box_device表以下字段类型为text + server_public_key + server_private_key + client_public_key + client_private_key + +4.casic.no-login-urls + 增加 /record/upload \ No newline at end of file diff --git a/casic-web/src/main/resources/doc/20250519.txt b/casic-web/src/main/resources/doc/20250519.txt new file mode 100644 index 0000000..6d70728 --- /dev/null +++ b/casic-web/src/main/resources/doc/20250519.txt @@ -0,0 +1,3 @@ +1.固定秘钥解析 + 配置项增加 + casic.client.privateKey \ No newline at end of file diff --git a/casic-web/src/main/resources/doc/20250522.md b/casic-web/src/main/resources/doc/20250522.md new file mode 100644 index 0000000..636b4df --- /dev/null +++ b/casic-web/src/main/resources/doc/20250522.md @@ -0,0 +1,80 @@ +## 一、数据库更新 + +1. 操作日志增加IP字段 + +``` +ALTER TABLE sys_operation_log ADD COLUMN IP VARCHAR(255); +``` + +2. 角色添加业务类型 + +``` +ALTER TABLE sys_role ADD COLUMN BIZ_TYPE VARCHAR(32) default 'normal' COMMENT '业务类型标识字段,用于区分不同业务模块的资源,比如三员 安全生产'; +``` + +3. 资源添加业务类型及相关字典值 + +``` +ALTER TABLE sys_resource ADD COLUMN BIZ_TYPE VARCHAR(32) default 'normal' COMMENT '业务类型标识字段,用于区分不同业务模块的资源,比如三员 安全生产'; + +INSERT INTO `sys_dict` (`ID`, `NUM`, `PID`, `NAME`, `TIPS`, `CODE`, `TENANT_ID`) VALUES (1925798590442455041, '0', 0, '业务分类', '业务分类', 'bizType', NULL); +INSERT INTO `sys_dict` (`ID`, `NUM`, `PID`, `NAME`, `TIPS`, `CODE`, `TENANT_ID`) VALUES (1925798590442455042, '0', 1925798590442455041, '普通业务', NULL, 'normal', NULL); +INSERT INTO `sys_dict` (`ID`, `NUM`, `PID`, `NAME`, `TIPS`, `CODE`, `TENANT_ID`) VALUES (1925798590505369602, '1', 1925798590442455041, '三员权限', NULL, 'audit', NULL); + +``` +系统三员角色从数据库初始化 bizType为audit 其他角色为normal +系统菜单资源数据修改,系统管理下所有菜单及按钮设置bizType为audit,其他业务功能设置为normal + +4. 增加操作审批表结构 + +CREATE TABLE sys_operation_application +( +id numeric(20,0) NOT NULL, +create_time datetime , +update_time datetime , +title varchar(255) , +json_context text , +status char(1), +operation_type varchar(64) , +operation_remark varchar(255) , +audit_remark varchar(255) , +tenant_id varchar(64) , +create_id numeric(20,0) , +audit_id numeric(20,0) , +PRIMARY KEY (id) +) + +业务操作类关系如下 +增加operationType字典 +user_add 用户新增 +user_update 用户修改 +user_delete 用户删除 +user_reset 密码重置 +user_freeze 用户冻结 +user_unfreeze 用户解冻 +user_roleAssign 用户角色分配 + +role_add 角色新增 +role_update 角色修改 +role_delete 角色删除 +role_funcAuthor 角色功能权限配置 +role_dataAuthor 角色数据权限配置 + +resource_add 资源新增 +resource_update 资源修改 +resource_delete 资源删除 + +dept_add 组织新增 +dept_update 组织修改 +dept_delete 组织删除 + +casic.tenant.excludes 配置项增加 ,sys_operation_application + +对应角色只能授权对应角色资源 +## 二、设备同步自动提取所属组织机构 +1.增加开启配置项 +casic.video.av.autoDept: true #默认开启 + + + + diff --git "a/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250113\346\225\260\346\215\256\345\272\223.txt" "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250113\346\225\260\346\215\256\345\272\223.txt" new file mode 100644 index 0000000..9b3fde9 --- /dev/null +++ "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250113\346\225\260\346\215\256\345\272\223.txt" @@ -0,0 +1,12 @@ +ALTER TABLE box_device +MODIFY COLUMN server_public_key VARCHAR(512), +MODIFY COLUMN server_private_key VARCHAR(1024), +MODIFY COLUMN client_public_key VARCHAR(512), +MODIFY COLUMN client_private_key VARCHAR(1024); + +ALTER TABLE sys_config MODIFY COLUMN VALUE TEXT; + + + +INSERT INTO sys_resource(ID, PID, CODE, P_CODE, P_CODES, NAME, ICON, URL, NUM, LEVELS, IS_MENU, TIPS, IS_OPEN, RESOURCE_TYPE, CREATE_USER, UPDATE_USER, CREATE_TIME, UPDATE_TIME, DEL_FLAG, TENANT_ID, STATUS) VALUES (1872184789440688129, 0, 'bigScreen', '0', '[0],', '安全生产智慧监管平台', '', '/bigScreen', 0, 1, '1', NULL, '0', '03', 1832137050074128386, NULL, '2024-12-26 07:36:52', NULL, '0', NULL, '0'); +INSERT INTO sys_resource(ID, PID, CODE, P_CODE, P_CODES, NAME, ICON, URL, NUM, LEVELS, IS_MENU, TIPS, IS_OPEN, RESOURCE_TYPE, CREATE_USER, UPDATE_USER, CREATE_TIME, UPDATE_TIME, DEL_FLAG, TENANT_ID, STATUS) VALUES (1879080561335627777, 105, 'sys_bsConfig', 'system', '[0],[system],', '大屏配置', 'icon-bs', '/sys/bsConfig', 0, 2, '1', NULL, '0', '03', 1832137050074128386, 1832137050074128386, '2025-01-14 08:18:12', '2025-01-14 08:25:05', '0', NULL, '0'); diff --git "a/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250120\351\205\215\347\275\256.txt" "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250120\351\205\215\347\275\256.txt" new file mode 100644 index 0000000..4d3700f --- /dev/null +++ "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250120\351\205\215\347\275\256.txt" @@ -0,0 +1,13 @@ +1.配置最大上传文件 max-file-size 更改为150 + spring: + servlet: + multipart: + max-file-size: 150MB + max-request-size: 80MB + nginx也需设置 +2.登录不拦截配置项 + casic: + no-login-urls: + 增加 ,/sync/device/** + + INSERT INTO `casic-production-safety`.`sys_config`(`ID`, `VALUE`, `TARGET_NAME`, `CLASS_NAME`, `DESCRIPTION`, `TENANT_ID`) VALUES (1879417287790792706, '[{\"monitorName\":\"casic01\",\"deviceTypeName\":\"枪机\",\"deptName\":\"203\",\"areaName\":\"成都A区\",\"longitude\":\"116.258555\",\"latitude\":\"39.908447\",\"secretLevelName\":\"内部\",\"deviceStatusName\":\"在线\",\"cameraIndexCode\":\"34020000001320000003\",\"nvrIndexCode\":\"34020000001110000002\",\"picture\":\"http://192.168.83.42:6909/safe-server//picture/download/undefined?token=2c1e8cb8-e3f0-4fb5-af4f-7f3e3ce75add\"},{\"monitorName\":\"casic04\",\"deviceTypeName\":\"枪机\",\"deptName\":\"203\",\"areaName\":\"永定路A区域\",\"longitude\":\"116.258555\",\"latitude\":\"39.908447\",\"secretLevelName\":\"公开\",\"deviceStatusName\":\"在线\",\"cameraIndexCode\":\"34020000001320000008\",\"nvrIndexCode\":\"34020000001110000002\",\"picture\":\"http://192.168.83.42:6909/safe-server//picture/download/undefined?token=2c1e8cb8-e3f0-4fb5-af4f-7f3e3ce75add\"},{\"monitorName\":\"casic01\",\"deviceTypeName\":\"枪机\",\"deptName\":\"203\",\"areaName\":\"成都A区\",\"longitude\":\"116.258555\",\"latitude\":\"39.908447\",\"secretLevelName\":\"内部\",\"deviceStatusName\":\"在线\",\"cameraIndexCode\":\"34020000001320000003\",\"nvrIndexCode\":\"34020000001110000002\",\"picture\":\"http://192.168.83.42:6909/safe-server//picture/download/undefined?token=2c1e8cb8-e3f0-4fb5-af4f-7f3e3ce75add\"},{\"monitorName\":\"casic04\",\"deviceTypeName\":\"枪机\",\"deptName\":\"203\",\"areaName\":\"永定路A区域\",\"longitude\":\"116.258555\",\"latitude\":\"39.908447\",\"secretLevelName\":\"公开\",\"deviceStatusName\":\"在线\",\"cameraIndexCode\":\"34020000001320000008\",\"nvrIndexCode\":\"34020000001110000002\",\"picture\":\"http://192.168.83.42:6909/safe-server//picture/download/undefined?token=2c1e8cb8-e3f0-4fb5-af4f-7f3e3ce75add\"},{\"monitorName\":\"casic01\",\"deviceTypeName\":\"枪机\",\"deptName\":\"203\",\"areaName\":\"成都A区\",\"longitude\":\"116.258555\",\"latitude\":\"39.908447\",\"secretLevelName\":\"内部\",\"deviceStatusName\":\"在线\",\"cameraIndexCode\":\"34020000001320000003\",\"nvrIndexCode\":\"34020000001110000002\"},{\"monitorName\":\"casic04\",\"deviceTypeName\":\"枪机\",\"deptName\":\"203\",\"areaName\":\"永定路A区域\",\"longitude\":\"116.258555\",\"latitude\":\"39.908447\",\"secretLevelName\":\"公开\",\"deviceStatusName\":\"在线\",\"cameraIndexCode\":\"34020000001320000008\",\"nvrIndexCode\":\"34020000001110000002\"}]', 'casic.bg.config', NULL, NULL, NULL); diff --git "a/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250121.txt" "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250121.txt" new file mode 100644 index 0000000..f5df373 --- /dev/null +++ "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250121.txt" @@ -0,0 +1,2 @@ +ALTER TABLE box_device ADD COLUMN path VARCHAR(512); +ALTER TABLE box_device ADD COLUMN version VARCHAR(512); \ No newline at end of file diff --git "a/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250217.txt" "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250217.txt" new file mode 100644 index 0000000..2488c3b --- /dev/null +++ "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250217.txt" @@ -0,0 +1 @@ +ALTER TABLE risk_point_info MODIFY COLUMN substances_quantities VARCHAR(1024); \ No newline at end of file diff --git "a/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250225.txt" "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250225.txt" new file mode 100644 index 0000000..dbb2424 --- /dev/null +++ "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250225.txt" @@ -0,0 +1,7 @@ +1.nginx版本号 关闭 +2.后台配置 casic.no-login-urls 中 ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin, 先暂时移除,做好备份 +3.nginx 代理路径下其他文件先移除,或者修改nginx代理路径到新路径(保障只有前端包) +4.后台配置 casic.no-login-urls 中移除 /v2/api-docs,/v2/api-docs-ext,/doc.html,/v2/api-docs/swagger-ui.html,/swagger-resources + + + diff --git a/sql/test.html b/sql/test.html new file mode 100644 index 0000000..a8f64b0 --- /dev/null +++ b/sql/test.html @@ -0,0 +1,24 @@ + + + + + + + +
+
+
+ + + diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java new file mode 100644 index 0000000..1ca5eb1 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java @@ -0,0 +1,63 @@ +package com.casic.missiles.modular.device.enums; + +/** + * wvp设备类型转换 + * + * @author lwh + * @Date 2017年1月10日 下午9:54:13 + */ +public enum AvDeptEnum { + + DEPT0("0066", "801",0L), + DEPT1("0059", "699厂",1L), + DEPT2("0055", "283厂",1L), + DEPT3("0022", "201所",1L), + DEPT4("0027", "206所",1L), + DEPT5("0013", "23所",1L); + + String code; + String message; + Long deptId; + AvDeptEnum(String code, String message, Long deptId) { + this.code = code; + this.message = message; + this.deptId = deptId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public static AvDeptEnum valueOfCode(String value) { + if (value == null) { + return null; + } else { + for (AvDeptEnum ms : AvDeptEnum.values()) { + if (ms.getCode().equals(value)) { + return ms; + } + } + return null; + } + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java new file mode 100644 index 0000000..573d0e2 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.task; + +import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; + +public class Test { + public static void main(String[] args) { + System.out.println(AvStatusTypeEnum.valueOfType(new Integer(1)).getMessage()); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java new file mode 100644 index 0000000..7c06c67 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java @@ -0,0 +1,77 @@ +package com.casic.missiles.modular.device.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpSession; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class RiskSyncController extends BaseController { + @Resource + private IClientAuthService clientAuthService; + @Resource + private AbstractDeptService deptService; + @Resource + private AbstractUserService userService; + @PostMapping("/client/login") + @ResponseBody + public ResponseData login(@RequestBody RiskLoginForm deviceLoginForm, HttpSession session) { + return clientAuthService.login(deviceLoginForm, session); + } + + /** + * 全量组织信息读取 + * + * @return + */ + @PostMapping("/dept/list") + @ResponseBody + public ResponseDataDTO> dept() { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = deptService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量用户信息读取 + * + * @return + */ + @PostMapping("/user/list") + @ResponseBody + public ResponseDataDTO> user() { + //todo 此处租户拦截需移除 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量设备信息读取 + * + * @return + */ + @PostMapping("/device/list") + @ResponseBody + public ResponseDataDTO> device() { + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java new file mode 100644 index 0000000..5e5b890 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class UserSyncController extends BaseController { + + @Resource + private IBusDeviceInfoService busDeviceInfoService; + + /** + * 登录用户授权设备权限查看 + * @return + */ + @GetMapping("/device/permissions") + @ResponseBody + public ResponseDataDTO> devicePermissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } + + /** + * 登录用户风险点授权查询 + * @return + */ + @GetMapping("/permissions") + @ResponseBody + public ResponseDataDTO> permissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java new file mode 100644 index 0000000..07b8df8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +/** + * 设备登录接口 + */ +@Data +public class RiskLoginForm { + /** + * 设备编码 + */ + private String clientId; + + /** + * 时间戳 + */ + private Long time; + + /** + * 加密后数据 加密格式sn+时间戳 时效性为6小时 + */ + private String secret; + + /** + * 设备登录注册IP + */ + private String ip; + + /** + * 设备登录注册port + */ + private String port; +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java new file mode 100644 index 0000000..40fdb4b --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.device.service; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; + +import javax.servlet.http.HttpSession; + +public interface IClientAuthService { + /** + * @param deviceLoginForm + * @param session + * @return + */ + ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session); +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java new file mode 100644 index 0000000..576e857 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.device.service.impl; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import cn.hutool.jwt.JWT; +import cn.hutool.jwt.JWTUtil; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.util.IRiskCacheUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpSession; +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Service +public class ClientAuthServiceImpl implements IClientAuthService { + @Value("${casic.client.privateKey:MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALKcwHHOg0F6Zkq7GOVnOnTgvH9vSPXFFTOcEqOVBIBPBz7UNrEGkp1PhZ+oC4WVJAsDuot2e1fDZy9QS9HF92MmnYp9kuQRhGZjHctPnVZ0Kai5BES0ytHqPeauLyNXxOOS0YKYEUwpft4Z5Azw7bj3JWNvLrnTZvNld6FDvTslAgMBAAECgYAqN/kZLYpC+O6i7XSmDO95XwHPUXu6dDpdt5+EQR4OQh/hTwIaeAZB3uEj6vHGQomBfQEkI/5lsU97lIxHanbd+Hro7JyIhsGD5LR5XnZHVKzFiZW62OIU6FI9dlQNN8miiblnmyDwiMA3okaHl0O7qQjZ+IvY2csgmJc7AXpPpQJBAOhrhcfWFcgffj2O6HYNlBLFfbboc/ZzrEADDXKnxRSHlo5o8W+6gylG/L2NGtbag5S68B9VYzdkSQ1++5C+Ws8CQQDEu7h311PLEiKgqzGHpjzadQETmt/jMadaKQmT0TZwNVi6X8lR17U5hF8dAqZzUzr9kUC0HRIZhg4Uv1v3W3fLAkB4YPhxgJjXhjhEefg87Nt8vX1Xdx5Yz6CvpuUYNX0GHRQFvqUOUXQNtQ7CvorgLV1pc0lbcUZqMi8EJnj1hyJRAkEAjHXWm8GiMt+M15fCsi3vTq2xChVOekBuUsHv85iwvGZqJg7ThtpyqlEnM2g7/STUfkvhnXcQACclEI0blTy6BwJAPmFyhU+d0ejVpbc53TdrL2HqYYUHi/tTy/dtUa7lbypzdwwJ2M1Tv5PE8sQxr9tgMbebfxVb/RFKdiCCtzC4ng==}") + private String privateKey; + + @Override + public ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session) { + //固定秘钥解析 + try { + String str = RSAUtils.decrypt(deviceLoginForm.getSecret(), privateKey); + Long time = Long.valueOf(StrUtil.split(str, "_").get(1)); + //边缘盒子时差与服务时差不可超过24小时 + if (time == null || System.currentTimeMillis() - time > 3600 * 24 * 1000) { + return ResponseData.error("请求时间超时"); + } + deviceLoginForm.setTime(time); + } catch (Exception e) { + e.printStackTrace(); + return ResponseData.error("设备解析异常!"); + } + + try { + String token = this.createJwtToken(deviceLoginForm); + IRiskCacheUtil.put(token, token); + return ResponseData.success(token); + } catch (Exception e) { + log.error("设备登录异常:{}", e.getMessage()); + return ResponseData.error("登录异常,请联系管理员"); + } +} + /** + * token创建 + * + * @param loginForm 登录信息 + * @param device 设备信息 + * @return + * @throws Exception + */ + public String createJwtToken(RiskLoginForm loginForm) throws Exception { + Map payload = new HashMap<>(); + payload.put("clientId", loginForm.getClientId()); // 设备编号 + payload.put("time", loginForm.getTime()); // 请求时间 + + //RSA 解密 + String str = RSAUtils.decrypt(loginForm.getSecret(), privateKey); + String key = loginForm.getClientId()+"_" + loginForm.getTime() ; + if (!key.equals(str)) { + //秘钥验证失败 + throw new ServiceException(500,"秘钥验证失败"); + } + +// long exp = new Date().getTime() + 2 * 3600000; // 2小时后的时间戳 +// payload.put("exp", exp); + + // 创建JWT + String jwt = JWTUtil.createToken(payload, "token-203-202405".getBytes()); + + return jwt; + } + + /** + * token解析 + * + * @param jwtStr token + * @return + * @throws Exception + */ + public static RiskLoginForm parseToken(String jwtStr){ + JWT jwtObj = new JWTUtil().parseToken(jwtStr); + RiskLoginForm deviceLoginForm = new RiskLoginForm(); + deviceLoginForm.setClientId(Convert.toStr(jwtObj.getPayload("clientId"))); + return deviceLoginForm; + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java new file mode 100644 index 0000000..0e91ac8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.util; +import cn.hutool.cache.Cache; +import cn.hutool.cache.CacheUtil; +/** + * token有效 + */ +public class IRiskCacheUtil { + /** + * 1小时内不活跃 会踢掉 + */ + private static Cache fifoCache = CacheUtil.newFIFOCache(1000, 1000 * 60 * 60); + + public static void put(String key, String value) { + fifoCache.put(key, value); + } + + public static String get(String key) { + return fifoCache.get(key); + } + + public static void remove(String key) { + fifoCache.remove(key); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java new file mode 100644 index 0000000..805c32a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceGroupDict extends AbstractDictMap { + + @Override + public void init() { + //检索条件 + put("groupName", "分组名称"); + put("startTime", "起始时间"); + put("endTime", "结束时间"); + //新增修改属性 + put("cameraIds", "设备国标号"); + put("personIds", "人员主键集合"); + put("description","备注"); + put("id","主键"); + put("ids","主键集合"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java new file mode 100644 index 0000000..895fbd9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceQueryDict extends AbstractDictMap { + + @Override + public void init() { + put("devType", "类型查询"); + put("keyword", "设备名称"); + put("deptName", "所属单位"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java new file mode 100644 index 0000000..88da6df --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.device.util; + +public class DeviceScopeUtil { +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java new file mode 100644 index 0000000..2e3e478 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.device.controller; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.auth.dto.DeviceLoginForm; +import com.casic.missiles.modular.auth.util.ICacheUtil; +import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; +import com.casic.missiles.modular.device.service.IAlarmRecordService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +@Api(tags = "告警记录") +@RestController +@RequestMapping("/record") +public class AlarmUploadController extends BaseController { + + private final IAlarmRecordService alarmRecordService; + private final IDeviceAuthService deviceAuthService; + public AlarmUploadController(IAlarmRecordService alarmRecordService, IDeviceAuthService deviceAuthService) { + this.alarmRecordService = alarmRecordService; + this.deviceAuthService = deviceAuthService; + } + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } + @BussinessLog(value = "告警记录上报接口") + @ApiOperation(value = "告警记录上报接口") + @PostMapping(value = "/upload") + public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return createAuthError(); + } + alarmRecordService.upload(alarmRecord); + return ResponseDataDTO.success(); + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java new file mode 100644 index 0000000..3f1c189 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class RecognitionStreamDTO { + private Long id; + private String recognitionStreamFlag; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java new file mode 100644 index 0000000..fa5ae4a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java @@ -0,0 +1,167 @@ +package com.casic.missiles.modular.group.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IRiskPointInfoService; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.group.vo.SysRiskGroupPointVO; +import com.casic.missiles.modular.group.vo.SysRiskGroupRelUserVO; +import com.casic.missiles.modular.group.vo.SysRiskUserGroupVO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import com.casic.missiles.modular.system.vo.SysGroupRelUserVO; +import com.casic.missiles.modular.system.vo.SysUserGroupVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.ibatis.annotations.Param; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; + +/** + * 风险点组信息Controller + * + * @author lwh + * @date 2024-07-11 + */ +@Api(tags = "风险点组信息") +@RestController +@RequestMapping("/sys/risk/group") +public class SysUserRiskGroupController extends BaseController { + private final IRiskPointInfoService riskPointInfoService; + private final ISysUserRiskGroupService sysUserGroupService; + private final AbstractPermissionContext permissionContext; + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysUserRiskGroupController(IRiskPointInfoService riskPointInfoService, ISysUserRiskGroupService sysUserGroupService, AbstractPermissionContext permissionContext, ISysRiskGroupRelUserService sysGroupRelUserService) { + this.riskPointInfoService = riskPointInfoService; + this.sysUserGroupService = sysUserGroupService; + this.permissionContext = permissionContext; + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @BussinessLog(value = "风险点分组查询") + @ApiOperation(value = "风险点分组查询", hidden = true) + @GetMapping(value = "/list") + public ResponseDataDTO> list(SysRiskUserGroupVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysUserGroupService.list(query)); + } + + @BussinessLog(value = "分组人员列表查询") + @ApiOperation(value = "分组人员列表查询") + @GetMapping(value = "/groupUserList") + public ResponseDataDTO> groupUserList(SysRiskGroupRelUserVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysGroupRelUserService.list(query)); + } + + @BussinessLog(value = "风险点分组人员查询") + @ApiOperation(value = "风险点分组人员分页查询") + @GetMapping(value = "/groupUserPage") + public ResponseDataDTO> listPage(SysRiskGroupRelUserVO sysGroupRelUserVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysGroupRelUserVO.genQuery(); + List relUsers = sysGroupRelUserService.selectSysGroupRelUserPage(page, query); + page.setRecords(relUsers); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "用户分组批量新增") + @ApiOperation(value = "批量新增接口") + @PostMapping(value = "/batch-add") + public ResponseDataDTO batchAdd(@RequestBody GroupUserRelDTO relDTO) { + sysGroupRelUserService.batchAdd(relDTO); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组人员删除") + @ApiOperation(value = "用户组人员删除接口") + @GetMapping(value = "/user/delete") + public ResponseDataDTO userDel(@Param("用户组人员关联主键") String id) { + sysGroupRelUserService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "风险点分组分页查询") + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(SysRiskUserGroupVO sysUserGroupVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysUserGroupVO.genQuery(); + + List sysUserGroups = sysUserGroupService.selectSysUserGroupPage(page, query); + page.setRecords(sysUserGroups); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "风险点分组新增") + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.save(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组修改") + @ApiOperation(value = "修改接口") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.updateById(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组删除") + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + sysUserGroupService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "批量删除") + @ApiOperation(value = "批量删除", hidden = true) + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + sysUserGroupService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "详情查询") + @ApiOperation(value = "详情查询", hidden = true) + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(sysUserGroupService.getById(id)); + } + + @BussinessLog(value = "用户树") + @ApiOperation(value = "用户树查询") + @GetMapping(value = "/person/tree") + public ResponseDataDTO> personTree() { + return ResponseDataDTO.success(sysUserGroupService.personTree()); + } + + @BussinessLog(value = "风险点树查询") + @ApiOperation(value = "风险点树查询") + @GetMapping(value = "/tree") + public ResponseDataDTO> tree(String riskType) { + return ResponseDataDTO.success(riskPointInfoService.tree(riskType)); + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java new file mode 100644 index 0000000..419eb27 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备所属人员组 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupPointMapper extends BaseMapper { +/** +* 设备所属人员组 分页检索 +*/ +List selectSysGroupDevicePage(@Param("page") Page page, @Param("ew" ) QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java new file mode 100644 index 0000000..eb41227 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 组人员管理 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupRelUserMapper extends BaseMapper { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java new file mode 100644 index 0000000..e8352df --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.system.model.SysUserGroup; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 用户组信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysUserRiskGroupMapper extends BaseMapper { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml new file mode 100644 index 0000000..6fa6a4d --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + id , + group_id as groupId , + create_time as createTime , + target_Id as targetId + + + a.id , + a.group_id + as groupId , + a.create_time + as createTime , + a.target_Id + as targetId + + + + + + and group_id = #{request.groupId} + + + and device_id = #{request.deviceId} + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml new file mode 100644 index 0000000..a627546 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + id , + group_id as groupId , + user_id as userId , + create_time as createTime + + + a.id, + a.group_id + as groupId , + a.user_id + as userId , + a.create_time + as createTime + + + + + + and group_id = #{request.groupId} + + + and user_id = #{request.userId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml new file mode 100644 index 0000000..3245136 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + id, + group_name as groupName , + create_time as createTime , + dept_id as deptId , + create_id as createId + + + a.id,a.group_name as groupName , + a.create_time + as createTime , + a.dept_id + as deptId , + a.create_id + as createId,a.description + + + + + + and group_name like concat('%',#{request.groupName},'%') + + + and dept_id = #{request.deptId} + + + and create_id = #{request.createId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java new file mode 100644 index 0000000..e44328f --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class GroupRiskRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("风险点集合") + private List targetIds; + @ApiModelProperty("用户ID集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java new file mode 100644 index 0000000..f8758bf --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class RiskGroupUserRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("设备集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java new file mode 100644 index 0000000..b386d5b --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java @@ -0,0 +1,53 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 风险点所属组 sys_risk_group_point + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_risk_group_point") +public class SysRiskGroupPoint extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableId("id") + private Long id; + + @ApiModelProperty(value = "用户组ID", dataType = "Long") + @TableField("group_id") + private Long groupId; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty(value = "风险点ID", dataType = "Long") + @TableField("target_id") + private Long targetId; + + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; + + @Override + public String toString() { + return "SysGroupDevice{" + + "id=" + id + + "groupId=" + groupId + + "createTime=" + createTime + + "targetId=" + targetId + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java new file mode 100644 index 0000000..949caa3 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java @@ -0,0 +1,55 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 组人员管理对象 sys_group_rel_user + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_risk_group_rel_user") +public class SysRiskGroupRelUser extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + + @ApiModelProperty(value = "组ID", dataType = "Long") + @TableField("group_id") + private Long groupId; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + @TableField("user_id") + private Long userId; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + @ApiModelProperty(value = "用户姓名", dataType = "String") + @TableField(exist = false) + private String realName; + + @ApiModelProperty(value = "用户名", dataType = "String") + @TableField(exist = false) + private String account; + + @Override + public String toString() { + return "SysGroupRelUser{" + + "id=" + id + + "groupId=" + groupId + + "userId=" + userId + + "createTime=" + createTime + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java new file mode 100644 index 0000000..1b73dc0 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java @@ -0,0 +1,97 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 危险点分组组信息对象 sys_user_risk_group + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_user_risk_group") +public class SysUserRiskGroup extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableId("id") + private Long id; + + @ApiModelProperty(value = "组名称", dataType = "String", required = true) + @TableField("group_name") + private String groupName; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty(value = "所属组织(保留字段)", dataType = "Long") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty(value = "描述信息", dataType = "String") + @TableField("description") + private String description; + + @ApiModelProperty(value = "密级字典", dataType = "String") + @TableField("safe") + private int safe; + + @ApiModelProperty(value = "创建者ID", dataType = "Long") + @TableField("create_id") + private Long createId; + + + @ApiModelProperty(value = "类型(1 危险点 2 重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "Long") + @TableField("group_type") + private String groupType; + @TableField(exist = false) + private String groupTypeName; + /** + * 风险点集合 + */ + @ApiModelProperty(value = "风险点集合(逗号拼接)", dataType = "String") + @TableField(exist = false) + private String pointIds; + + @ApiModelProperty(value = "数量", dataType = "Long") + @TableField(exist = false) + private Integer targetNum; + /** + * 用户集合 + */ + @ApiModelProperty(value = "用户集合(逗号拼接)", dataType = "String") + @TableField(exist = false) + private String personIds; + + @ApiModelProperty(value = "用户名称", dataType = "String") + @TableField(exist = false) + private String realName; + + @ApiModelProperty(value = "用户名", dataType = "String") + @TableField(exist = false) + private String account; + + @ApiModelProperty(value = "密级字典名称", dataType = "String") + @TableField(exist = false) + private String safeName; + + @Override + public String toString() { + return "SysUserGroup{" + + "id=" + id + + "groupName=" + groupName + + "createTime=" + createTime + + "deptId=" + deptId + + "createId=" + createId + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java new file mode 100644 index 0000000..4657ce4 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.device.dto.GroupRelDTO; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; + +import java.util.List; + + +/** + *

+ * 设备所属人员组 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysRiskGroupPointService extends IService { + /** + * 设备所属人员组 分页检索 + */ + List selectSysGroupDevicePage(Page page, QueryWrapper query); + + /** + * 设备组批量新增 + * + * @param relDTO + */ + void batchAdd(GroupRiskRelDTO relDTO); + + + /** + * 增量更新 + * @param groupId + * @param deviceIds + */ + void batchIncremental(Long groupId, List deviceIds); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java new file mode 100644 index 0000000..591eef2 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; + +import java.util.List; + + +/** + *

+ * 组人员管理 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysRiskGroupRelUserService extends IService { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(Page page, QueryWrapper query); + + void batchAdd(GroupUserRelDTO relDTO); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java new file mode 100644 index 0000000..1e0889c --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; + +import java.util.List; + + +/** + *

+ * 用户组信息 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysUserRiskGroupService extends IService { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(Page page, QueryWrapper query); + + List personTree(); + + /** + * 创建用户组 + * + * @param sysUserGroup 用户组信息 + * @param userIds 用户信息 + */ + void createSysUserGroup(SysUserRiskGroup sysUserGroup, List userIds); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java new file mode 100644 index 0000000..6839887 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java @@ -0,0 +1,118 @@ +package com.casic.missiles.modular.group.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +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.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.group.dao.SysRiskGroupPointMapper; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import com.casic.missiles.modular.group.service.ISysRiskGroupPointService; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + + +/** + *

+ * 设备所属人员组 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysRiskGroupPointServiceImpl extends ServiceImpl implements ISysRiskGroupPointService { + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysRiskGroupPointServiceImpl(ISysRiskGroupRelUserService sysGroupRelUserService) { + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @Override + public List selectSysGroupDevicePage(Page page, QueryWrapper query) { + return this.baseMapper.selectSysGroupDevicePage(page, query); + } + + @Transactional + @Override + public void batchAdd(GroupRiskRelDTO relDTO) { + + if (CollectionUtil.isEmpty(relDTO.getTargetIds())) { + ServiceException serviceException = new ServiceException(500, "添加不能为空!"); + throw serviceException; + } + + //删除 + QueryWrapper query = new QueryWrapper<>(); + query.eq("group_id", relDTO.getGroupId()); + this.remove(query); + + //保存分组与危险点对应关系 + List groupDevices = new ArrayList<>(); + for (Long deviceId : relDTO.getTargetIds()) { + SysRiskGroupPoint sysGroupDevice = new SysRiskGroupPoint(); + sysGroupDevice.setTargetId(deviceId); + sysGroupDevice.setGroupId(relDTO.getGroupId()); + sysGroupDevice.setCreateTime(new Date()); + groupDevices.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(groupDevices); + + //批量保存风险点与用户关系 + GroupUserRelDTO groupUserRelDTO = new GroupUserRelDTO(); + groupUserRelDTO.setGroupId(relDTO.getGroupId()); + groupUserRelDTO.setUserIds(relDTO.getUserIds()); + sysGroupRelUserService.batchAdd(groupUserRelDTO); + + } + + @Override + public void batchIncremental(Long groupId, List deviceIds) { + List groupDevices = this.list(new LambdaQueryWrapper().eq(SysRiskGroupPoint::getGroupId, groupId)); + if (CollectionUtil.isEmpty(groupDevices)) { + saveDevices(groupId, deviceIds); + } else { + List oldDevices = groupDevices.stream().map(SysRiskGroupPoint::getTargetId).collect(Collectors.toList()); + List delIds = CollectionUtil.subtractToList(oldDevices, deviceIds); + List saveDevices = CollectionUtil.subtractToList(deviceIds, oldDevices); + + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.eq(SysRiskGroupPoint::getGroupId, groupId); + delQuery.in(SysRiskGroupPoint::getTargetId, delIds); + if (CollectionUtil.isNotEmpty(delIds)) { + this.remove(delQuery); + } + saveDevices(groupId, saveDevices); + } + } + + private void saveDevices(Long groupId, List saveDevices) { + List saves = new ArrayList<>(); + for (Long deviceId : saveDevices) { + SysRiskGroupPoint sysGroupDevice = new SysRiskGroupPoint(); + sysGroupDevice.setTargetId(deviceId); + sysGroupDevice.setGroupId(groupId); + sysGroupDevice.setCreateTime(new Date()); + saves.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(saves); + } + + private void saveOrUpdateBatchList(List groupDevices) { + for (SysRiskGroupPoint groupDevice : groupDevices) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysRiskGroupPoint::getGroupId, groupDevice.getGroupId()); + query.eq(SysRiskGroupPoint::getTargetId, groupDevice.getTargetId()); + this.saveOrUpdate(groupDevice, query); + } + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java new file mode 100644 index 0000000..83cd76a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.group.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +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.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.group.dao.SysRiskGroupPointMapper; +import com.casic.missiles.modular.group.dao.SysRiskGroupRelUserMapper; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.system.dao.SysGroupRelUserMapper; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + + +/** + *

+ * 组人员管理 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysRiskGroupRelUserServiceImpl extends ServiceImpl implements ISysRiskGroupRelUserService { + @Override + public List selectSysGroupRelUserPage(Page page, QueryWrapper query) { + return this.baseMapper.selectSysGroupRelUserPage(page, query); + } + + @Transactional + @Override + public void batchAdd(GroupUserRelDTO relDTO) { + if (CollectionUtil.isEmpty(relDTO.getUserIds())) { + ServiceException serviceException = new ServiceException(500, "添加不能为空!"); + throw serviceException; + } + //删除 + QueryWrapper query = new QueryWrapper<>(); + query.eq("group_id",relDTO.getGroupId()); + this.remove(query); + //添加设备信息 + List groupDevices = new ArrayList<>(); + for (Long deviceId : relDTO.getUserIds()) { + SysRiskGroupRelUser sysGroupDevice = new SysRiskGroupRelUser(); + sysGroupDevice.setUserId(deviceId); + sysGroupDevice.setGroupId(relDTO.getGroupId()); + sysGroupDevice.setCreateTime(new Date()); + groupDevices.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(groupDevices); + } + + private void saveOrUpdateBatchList(List groupDevices) { + for (SysRiskGroupRelUser groupDevice : groupDevices) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysRiskGroupRelUser::getGroupId, groupDevice.getGroupId()); + query.eq(SysRiskGroupRelUser::getUserId, groupDevice.getUserId()); + this.saveOrUpdate(groupDevice, query); + } + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java new file mode 100644 index 0000000..b3bb9a8 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java @@ -0,0 +1,246 @@ +package com.casic.missiles.modular.group.service.impl; + +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.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.modular.data.constants.DataConstants; +import com.casic.missiles.modular.group.dao.SysUserRiskGroupMapper; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupPointService; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.tree.RiskGroupDefaultTreeBuildFactory; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + + +/** + *

+ * 用户组信息 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysUserRiskGroupServiceImpl extends ServiceImpl implements ISysUserRiskGroupService { + @Lazy + @Resource + private ISysRiskGroupPointService sysRiskGroupPointService; + private final AbstractPermissionContext abstractPermissionContext; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_USER = "2"; + private final AbstractDictService dictService; + @Lazy + @Resource + private ISysRiskGroupRelUserService relUserService; + + public SysUserRiskGroupServiceImpl(AbstractPermissionContext abstractPermissionContext, AbstractDictService dictService) { + this.abstractPermissionContext = abstractPermissionContext; + this.dictService = dictService; + } + + @Override + public List selectSysUserGroupPage(Page page, QueryWrapper query) { + //分组过滤当前权限 + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + query.in("a.dept_id", dataScope.getDeptIds()); + } + List riskGroups = this.baseMapper.selectSysUserGroupPage(page, query); + for (SysUserRiskGroup riskGroup : riskGroups) { + wrapperInfo(riskGroup); + } + return riskGroups; + } + + private void wrapperInfo(SysUserRiskGroup riskGroup) { + riskGroup.setSafeName(dictService.getDictNameByCode(DataConstants.DICT_SECRET_LEVEL_TYPE, riskGroup.getSafe() + "")); + //查询关联设备 + LambdaQueryWrapper deviceQuery = new LambdaQueryWrapper<>(); + deviceQuery.eq(SysRiskGroupPoint::getGroupId, riskGroup.getId()); + List devices = sysRiskGroupPointService.list(deviceQuery); + if (devices != null) { + List deviceList = devices.stream().map(SysRiskGroupPoint::getTargetId).collect(Collectors.toList()); + riskGroup.setPointIds(StrUtil.join(",", deviceList)); + riskGroup.setTargetNum(deviceList.size()); + } + + riskGroup.setGroupTypeName(dictService.getDictNameByCode(DataConstants.dangerAssessmentType, riskGroup.getGroupType())); + //查询关联人员 + LambdaQueryWrapper personQuery = new LambdaQueryWrapper<>(); + personQuery.eq(SysRiskGroupRelUser::getGroupId, riskGroup.getId()); + List persons = relUserService.list(personQuery); + if (persons != null) { + List personIds = persons.stream().map(SysRiskGroupRelUser::getUserId).collect(Collectors.toList()); + riskGroup.setPersonIds(StrUtil.join(",", personIds)); + } + } + + private void setGroupInfo(SysUserRiskGroup entity) { + if (StrUtil.isNotEmpty(entity.getPointIds())) { + entity.setTargetNum(StrUtil.split(entity.getPointIds(), ",").size()); + } else { + entity.setTargetNum(0); + } + } + + @Override + public boolean save(SysUserRiskGroup entity) { + AuthUser authUser = abstractPermissionContext.getAuthService().getLoginUser(); + entity.setCreateTime(new Date()); + entity.setCreateId(authUser.getId()); + if (entity.getDeptId() == null) { + entity.setDeptId(authUser.getDeptId()); + } + setGroupInfo(entity); + super.save(entity); + batchSave(entity, entity.getId()); + return true; + } + + @Override + public boolean updateById(SysUserRiskGroup entity) { + AuthUser authUser = abstractPermissionContext.getAuthService().getLoginUser(); + entity.setCreateTime(new Date()); + entity.setCreateId(authUser.getId()); + if (entity.getDeptId() == null) { + entity.setDeptId(authUser.getDeptId()); + } + setGroupInfo(entity); + super.updateById(entity); + batchSave(entity, entity.getId()); + return true; + } + + /** + * 数据转换 + * + * @param entity + * @param groupId + */ + private void batchSave(SysUserRiskGroup entity, Long groupId) { + GroupRiskRelDTO groupRelDTO = new GroupRiskRelDTO(); + groupRelDTO.setGroupId(groupId); + if (StrUtil.isNotEmpty(entity.getPointIds())) { + long[] longs = StrUtil.splitToLong(entity.getPointIds(), ","); + List devices = new ArrayList<>(); + for (long aLong : longs) { + devices.add(aLong); + } + groupRelDTO.setTargetIds(devices); + } + if (StrUtil.isNotEmpty(entity.getPersonIds())) { + List persons = new ArrayList<>(); + long[] longs = StrUtil.splitToLong(entity.getPersonIds(), ","); + + for (long aLong : longs) { + persons.add(aLong); + } + groupRelDTO.setUserIds(persons); + } + sysRiskGroupPointService.batchAdd(groupRelDTO); + } + + @Override + public List personTree() { + + //查询可见组织 + DataScope scope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + + LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { + deptQuery.in(Dept::getId, scope.getDeptIds()); + } + deptQuery.orderByAsc(Dept::getNum); + + List deptList = abstractPermissionContext.getDeptService().list(deptQuery); + List deptDTOS = new ArrayList<>(); + List rootIds = new ArrayList<>(); + Set normalIds = new HashSet<>(); + for (Dept dept : deptList) { + RiskGroupDeptDTO deptDTO = new RiskGroupDeptDTO(); + deptDTO.setPid(dept.getPid()); + deptDTO.setId(dept.getId()); + deptDTO.setFullName(dept.getFullName()); + deptDTO.setName(dept.getSimpleName()); + deptDTOS.add(deptDTO); + deptDTO.setType(NODE_TYPE_DEPT); + normalIds.add(dept.getId()); + + //挂载设备信息 + LambdaQueryWrapper deviceQuery = new LambdaQueryWrapper<>(); + deviceQuery.eq(User::getDeptId, deptDTO.getId()); + deviceQuery.eq(User::getStatus, "1"); + List deviceInfos = abstractPermissionContext.getUserService().list(deviceQuery); + + deptDTO.setChildrenNodes(deviceInfos.stream().map(this::createDeptDTO).collect(Collectors.toList())); + } + + for (RiskGroupDeptDTO deptDTO : deptDTOS) { + if (!normalIds.contains(deptDTO.getPid())) { + rootIds.add(deptDTO.getPid()); + } + } + + //过滤根节点,支持多根展示 + RiskGroupDefaultTreeBuildFactory abstractTreeBuildFactory = new RiskGroupDefaultTreeBuildFactory(); + List newTree = new ArrayList<>(); + rootIds = rootIds.stream().distinct().collect(Collectors.toList()); + for (Long rootId : rootIds) { + abstractTreeBuildFactory.setRootId(rootId + ""); + newTree.addAll(abstractTreeBuildFactory.doTreeBuild(deptDTOS)); + } + + return newTree; + } + + @Transactional + @Override + public void createSysUserGroup(SysUserRiskGroup sysUserGroup, List userIds) { + this.baseMapper.insert(sysUserGroup); + GroupUserRelDTO relDTO = new GroupUserRelDTO(); + relDTO.setGroupId(sysUserGroup.getId()); + relDTO.setUserIds(userIds); + relUserService.batchAdd(relDTO); + } + + + /** + * 创建节点 + * + * @param userInfo 用户信息 + * @return + */ + private GroupDeptDTO createDeptDTO(User userInfo) { + GroupDeptDTO deptDTO = new GroupDeptDTO(); + deptDTO.setType(NODE_TYPE_USER); + deptDTO.setId(userInfo.getId()); + deptDTO.setPid(userInfo.getDeptId()); + deptDTO.setUserDTO(userInfo); + deptDTO.setName(userInfo.getName()); + deptDTO.setFullName(userInfo.getName()); + deptDTO.setUserId(userInfo.getId() + ""); + return deptDTO; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/tree/RiskGroupDefaultTreeBuildFactory.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/tree/RiskGroupDefaultTreeBuildFactory.java new file mode 100644 index 0000000..69c18ad --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/tree/RiskGroupDefaultTreeBuildFactory.java @@ -0,0 +1,30 @@ +package com.casic.missiles.modular.group.tree; + +import com.casic.missiles.core.treebuild.DefaultTreeBuildFactory; +import com.casic.missiles.model.tree.Tree; + +import java.util.ArrayList; +import java.util.List; + +public class RiskGroupDefaultTreeBuildFactory extends DefaultTreeBuildFactory { + private String rootId; + @Override + protected List afterBuild(List nodes) { + //去掉所有的二级节点 + ArrayList results = new ArrayList<>(); + for (T node : nodes) { + if (node.getNodeParentId().equals(rootId)) { + results.add(node); + } + } + return results; + } + + public String getRootId() { + return rootId; + } + + public void setRootId(String rootId) { + this.rootId = rootId; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/RiskGroupDeptDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/RiskGroupDeptDTO.java new file mode 100644 index 0000000..7f6c157 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/RiskGroupDeptDTO.java @@ -0,0 +1,61 @@ +package com.casic.missiles.modular.group.vo; + +import com.casic.missiles.model.tree.Tree; +import com.casic.missiles.modular.device.model.RiskPointInfo; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +@Data +public class RiskGroupDeptDTO implements Tree { + @ApiModelProperty("组织主键") + private Long id; + + @ApiModelProperty("父部门ID") + private Long pid; + + @ApiModelProperty("组织简称") + private String name; + + @ApiModelProperty("组织全称") + private String fullName; + + @ApiModelProperty("子节点") + private List children = new ArrayList<>(); + + @ApiModelProperty("节点类型(1 组织 2 人员)") + private String type; + + @ApiModelProperty("用户信息") + private User userDTO; + private String userId; + private RiskPointInfo riskPointInfo; + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + @Override + public String getNodeId() { + return id + ""; + } + + @Override + public String getNodeParentId() { + return pid + ""; + } + + @Override + public void setChildrenNodes(List childrenNodes) { + children.addAll(childrenNodes); + children = children.stream().distinct().collect(Collectors.toList()); + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupPointVO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupPointVO.java new file mode 100644 index 0000000..3f6ca41 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupPointVO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.group.vo; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 风险点所属人员组对象VO + * + * @author lwh + * @date 2024-07-11 + */ +@Data +public class SysRiskGroupPointVO { + private static final long serialVersionUID = 1L; + + + @ApiModelProperty(value = "用户组ID", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备ID", dataType = "Long") + private Long targetId; + + public QueryWrapper genQuery() { + QueryWrapper query = new QueryWrapper<>(); + if (groupId != null) { + query.eq("group_id", groupId); + } + if (targetId != null) { + query.eq("target_id", targetId); + } + return query; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupRelUserVO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupRelUserVO.java new file mode 100644 index 0000000..5a95d82 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupRelUserVO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.group.vo; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 组人员管理对象VO + * + * @author lwh + * @date 2024-07-11 + */ +@Data +public class SysRiskGroupRelUserVO { + private static final long serialVersionUID = 1L; + + + @ApiModelProperty(value = "组ID", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + private Long userId; + + public QueryWrapper genQuery() { + QueryWrapper query = new QueryWrapper<>(); + if (groupId != null) { + query.eq("group_id", groupId); + } + if (userId != null) { + query.eq("user_id", userId); + } + return query; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskUserGroupVO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskUserGroupVO.java new file mode 100644 index 0000000..6363c3b --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskUserGroupVO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.group.vo; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.system.model.SysUserGroup; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 用户组信息对象VO + * + * @author lwh + * @date 2024-07-11 + */ +@Data +public class SysRiskUserGroupVO { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "用户组名称", dataType = "String") + private String groupName; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + private Long deptId; + @ApiModelProperty(value = "创建时间起始", dataType = "String") + private String startTime; + @ApiModelProperty(value = "创建时间结束", dataType = "String") + private String endTime; + @ApiModelProperty(value = "创建者ID", dataType = "Long") + private Long createId; + + public QueryWrapper genQuery() { + QueryWrapper query = new QueryWrapper<>(); + if (StrUtil.isNotEmpty(groupName)) { + query.like("a.group_name", groupName); + } + if (StrUtil.isNotEmpty(startTime)) { + query.ge("a.create_time", startTime); + } + if (StrUtil.isNotEmpty(endTime)) { + query.le("a.create_time", endTime); + } + if (deptId != null) { + query.eq("a.dept_id", deptId); + } + if (createId != null) { + query.eq("a.create_id", createId); + } + return query; + } +} diff --git a/casic-web/src/main/resources/doc/20250227.txt b/casic-web/src/main/resources/doc/20250227.txt new file mode 100644 index 0000000..daf4d4c --- /dev/null +++ b/casic-web/src/main/resources/doc/20250227.txt @@ -0,0 +1,68 @@ +1.权限配置检查 + 对应属性需配置为 security_admin + casic: + video: + admin: + role: security_admin +1.租户设定更新 + 创建租户设定角色 角色别名必须是tenantAdministrator + + 分配给管理员 需手动入库授权, sys_user表 role_id字段添加租户设定字段, + sys_ru_relation 添加用户绑定关系 + + INSERT INTO sys_tenant(ID, TENANT_NAME, TENANT_CODE, LINK_PERSON, TEL, CLEARDAY, FLAG, TS) VALUES (1, '航天二院', '001', NULL, NULL, NULL, '0', '2025-02-21 14:41:20'); + + ALTER TABLE sys_user_group ADD COLUMN tenant_id VARCHAR(64); + ALTER TABLE sys_group_device ADD COLUMN tenant_id VARCHAR(64); + ALTER TABLE sys_group_rel_user ADD COLUMN tenant_id VARCHAR(64); + ALTER TABLE device_group_info ADD COLUMN tenant_id VARCHAR(64); + update device_group_info set tenant_id = 1; + update sys_user set tenant_id = 1; + update sys_role set tenant_id = 1; + update sys_rm_relation set tenant_id = 1; + update sys_ru_relation set tenant_id = 1; + update sys_dept set tenant_id = 1; + update sys_user_group set tenant_id = 1; + update sys_group_device set tenant_id = 1; + update sys_group_rel_user set tenant_id = 1; + 添加租户ID 0 + +2.表risk_point_info 字段 secret_level值密级默认 0 设定 + +3.新增表 sys_user_risk_group sys_risk_group_rel_user sys_risk_group_point + +CREATE TABLE sys_user_risk_group +( + id numeric(20,0) NOT NULL, + group_name VARCHAR(256), + create_time date, + dept_id numeric(20,0), + create_id numeric(20,0), + description VARCHAR(256), + safe SMALLINT, + group_type SMALLINT, + tenant_id VARCHAR(64), + PRIMARY KEY (id) +); + +CREATE TABLE sys_risk_group_rel_user +( + id numeric(20,0) NOT NULL, + group_id numeric(20,0), + user_id numeric(20,0), + create_time date, + tenant_id VARCHAR(64) +); + +CREATE TABLE sys_risk_group_point +( + id numeric(20,0) NOT NULL, + group_id numeric(20,0), + create_time date, + target_id numeric(20,0), + tenant_id VARCHAR(64) +); + + + + diff --git a/casic-web/src/main/resources/doc/20250416.txt b/casic-web/src/main/resources/doc/20250416.txt new file mode 100644 index 0000000..14610e9 --- /dev/null +++ b/casic-web/src/main/resources/doc/20250416.txt @@ -0,0 +1,18 @@ +1.增加识别流开关 流媒体id 识别流国标号 + ALTER TABLE box_device_relation ADD COLUMN media_server_id VARCHAR(255); + ALTER TABLE box_device_relation ADD COLUMN recognition_gb VARCHAR(255); + ALTER TABLE box_device_relation ADD COLUMN recognition_stream_flag int; + + + + ALTER TABLE upload_log ADD COLUMN tenant_id VARCHAR(64); +2.增加字典值 mediaServerId + 对应值参考zlm中的mediaServerId 配置项 +3.更新box_device表以下字段类型为text + server_public_key + server_private_key + client_public_key + client_private_key + +4.casic.no-login-urls + 增加 /record/upload \ No newline at end of file diff --git a/casic-web/src/main/resources/doc/20250519.txt b/casic-web/src/main/resources/doc/20250519.txt new file mode 100644 index 0000000..6d70728 --- /dev/null +++ b/casic-web/src/main/resources/doc/20250519.txt @@ -0,0 +1,3 @@ +1.固定秘钥解析 + 配置项增加 + casic.client.privateKey \ No newline at end of file diff --git a/casic-web/src/main/resources/doc/20250522.md b/casic-web/src/main/resources/doc/20250522.md new file mode 100644 index 0000000..636b4df --- /dev/null +++ b/casic-web/src/main/resources/doc/20250522.md @@ -0,0 +1,80 @@ +## 一、数据库更新 + +1. 操作日志增加IP字段 + +``` +ALTER TABLE sys_operation_log ADD COLUMN IP VARCHAR(255); +``` + +2. 角色添加业务类型 + +``` +ALTER TABLE sys_role ADD COLUMN BIZ_TYPE VARCHAR(32) default 'normal' COMMENT '业务类型标识字段,用于区分不同业务模块的资源,比如三员 安全生产'; +``` + +3. 资源添加业务类型及相关字典值 + +``` +ALTER TABLE sys_resource ADD COLUMN BIZ_TYPE VARCHAR(32) default 'normal' COMMENT '业务类型标识字段,用于区分不同业务模块的资源,比如三员 安全生产'; + +INSERT INTO `sys_dict` (`ID`, `NUM`, `PID`, `NAME`, `TIPS`, `CODE`, `TENANT_ID`) VALUES (1925798590442455041, '0', 0, '业务分类', '业务分类', 'bizType', NULL); +INSERT INTO `sys_dict` (`ID`, `NUM`, `PID`, `NAME`, `TIPS`, `CODE`, `TENANT_ID`) VALUES (1925798590442455042, '0', 1925798590442455041, '普通业务', NULL, 'normal', NULL); +INSERT INTO `sys_dict` (`ID`, `NUM`, `PID`, `NAME`, `TIPS`, `CODE`, `TENANT_ID`) VALUES (1925798590505369602, '1', 1925798590442455041, '三员权限', NULL, 'audit', NULL); + +``` +系统三员角色从数据库初始化 bizType为audit 其他角色为normal +系统菜单资源数据修改,系统管理下所有菜单及按钮设置bizType为audit,其他业务功能设置为normal + +4. 增加操作审批表结构 + +CREATE TABLE sys_operation_application +( +id numeric(20,0) NOT NULL, +create_time datetime , +update_time datetime , +title varchar(255) , +json_context text , +status char(1), +operation_type varchar(64) , +operation_remark varchar(255) , +audit_remark varchar(255) , +tenant_id varchar(64) , +create_id numeric(20,0) , +audit_id numeric(20,0) , +PRIMARY KEY (id) +) + +业务操作类关系如下 +增加operationType字典 +user_add 用户新增 +user_update 用户修改 +user_delete 用户删除 +user_reset 密码重置 +user_freeze 用户冻结 +user_unfreeze 用户解冻 +user_roleAssign 用户角色分配 + +role_add 角色新增 +role_update 角色修改 +role_delete 角色删除 +role_funcAuthor 角色功能权限配置 +role_dataAuthor 角色数据权限配置 + +resource_add 资源新增 +resource_update 资源修改 +resource_delete 资源删除 + +dept_add 组织新增 +dept_update 组织修改 +dept_delete 组织删除 + +casic.tenant.excludes 配置项增加 ,sys_operation_application + +对应角色只能授权对应角色资源 +## 二、设备同步自动提取所属组织机构 +1.增加开启配置项 +casic.video.av.autoDept: true #默认开启 + + + + diff --git "a/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250113\346\225\260\346\215\256\345\272\223.txt" "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250113\346\225\260\346\215\256\345\272\223.txt" new file mode 100644 index 0000000..9b3fde9 --- /dev/null +++ "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250113\346\225\260\346\215\256\345\272\223.txt" @@ -0,0 +1,12 @@ +ALTER TABLE box_device +MODIFY COLUMN server_public_key VARCHAR(512), +MODIFY COLUMN server_private_key VARCHAR(1024), +MODIFY COLUMN client_public_key VARCHAR(512), +MODIFY COLUMN client_private_key VARCHAR(1024); + +ALTER TABLE sys_config MODIFY COLUMN VALUE TEXT; + + + +INSERT INTO sys_resource(ID, PID, CODE, P_CODE, P_CODES, NAME, ICON, URL, NUM, LEVELS, IS_MENU, TIPS, IS_OPEN, RESOURCE_TYPE, CREATE_USER, UPDATE_USER, CREATE_TIME, UPDATE_TIME, DEL_FLAG, TENANT_ID, STATUS) VALUES (1872184789440688129, 0, 'bigScreen', '0', '[0],', '安全生产智慧监管平台', '', '/bigScreen', 0, 1, '1', NULL, '0', '03', 1832137050074128386, NULL, '2024-12-26 07:36:52', NULL, '0', NULL, '0'); +INSERT INTO sys_resource(ID, PID, CODE, P_CODE, P_CODES, NAME, ICON, URL, NUM, LEVELS, IS_MENU, TIPS, IS_OPEN, RESOURCE_TYPE, CREATE_USER, UPDATE_USER, CREATE_TIME, UPDATE_TIME, DEL_FLAG, TENANT_ID, STATUS) VALUES (1879080561335627777, 105, 'sys_bsConfig', 'system', '[0],[system],', '大屏配置', 'icon-bs', '/sys/bsConfig', 0, 2, '1', NULL, '0', '03', 1832137050074128386, 1832137050074128386, '2025-01-14 08:18:12', '2025-01-14 08:25:05', '0', NULL, '0'); diff --git "a/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250120\351\205\215\347\275\256.txt" "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250120\351\205\215\347\275\256.txt" new file mode 100644 index 0000000..4d3700f --- /dev/null +++ "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250120\351\205\215\347\275\256.txt" @@ -0,0 +1,13 @@ +1.配置最大上传文件 max-file-size 更改为150 + spring: + servlet: + multipart: + max-file-size: 150MB + max-request-size: 80MB + nginx也需设置 +2.登录不拦截配置项 + casic: + no-login-urls: + 增加 ,/sync/device/** + + INSERT INTO `casic-production-safety`.`sys_config`(`ID`, `VALUE`, `TARGET_NAME`, `CLASS_NAME`, `DESCRIPTION`, `TENANT_ID`) VALUES (1879417287790792706, '[{\"monitorName\":\"casic01\",\"deviceTypeName\":\"枪机\",\"deptName\":\"203\",\"areaName\":\"成都A区\",\"longitude\":\"116.258555\",\"latitude\":\"39.908447\",\"secretLevelName\":\"内部\",\"deviceStatusName\":\"在线\",\"cameraIndexCode\":\"34020000001320000003\",\"nvrIndexCode\":\"34020000001110000002\",\"picture\":\"http://192.168.83.42:6909/safe-server//picture/download/undefined?token=2c1e8cb8-e3f0-4fb5-af4f-7f3e3ce75add\"},{\"monitorName\":\"casic04\",\"deviceTypeName\":\"枪机\",\"deptName\":\"203\",\"areaName\":\"永定路A区域\",\"longitude\":\"116.258555\",\"latitude\":\"39.908447\",\"secretLevelName\":\"公开\",\"deviceStatusName\":\"在线\",\"cameraIndexCode\":\"34020000001320000008\",\"nvrIndexCode\":\"34020000001110000002\",\"picture\":\"http://192.168.83.42:6909/safe-server//picture/download/undefined?token=2c1e8cb8-e3f0-4fb5-af4f-7f3e3ce75add\"},{\"monitorName\":\"casic01\",\"deviceTypeName\":\"枪机\",\"deptName\":\"203\",\"areaName\":\"成都A区\",\"longitude\":\"116.258555\",\"latitude\":\"39.908447\",\"secretLevelName\":\"内部\",\"deviceStatusName\":\"在线\",\"cameraIndexCode\":\"34020000001320000003\",\"nvrIndexCode\":\"34020000001110000002\",\"picture\":\"http://192.168.83.42:6909/safe-server//picture/download/undefined?token=2c1e8cb8-e3f0-4fb5-af4f-7f3e3ce75add\"},{\"monitorName\":\"casic04\",\"deviceTypeName\":\"枪机\",\"deptName\":\"203\",\"areaName\":\"永定路A区域\",\"longitude\":\"116.258555\",\"latitude\":\"39.908447\",\"secretLevelName\":\"公开\",\"deviceStatusName\":\"在线\",\"cameraIndexCode\":\"34020000001320000008\",\"nvrIndexCode\":\"34020000001110000002\",\"picture\":\"http://192.168.83.42:6909/safe-server//picture/download/undefined?token=2c1e8cb8-e3f0-4fb5-af4f-7f3e3ce75add\"},{\"monitorName\":\"casic01\",\"deviceTypeName\":\"枪机\",\"deptName\":\"203\",\"areaName\":\"成都A区\",\"longitude\":\"116.258555\",\"latitude\":\"39.908447\",\"secretLevelName\":\"内部\",\"deviceStatusName\":\"在线\",\"cameraIndexCode\":\"34020000001320000003\",\"nvrIndexCode\":\"34020000001110000002\"},{\"monitorName\":\"casic04\",\"deviceTypeName\":\"枪机\",\"deptName\":\"203\",\"areaName\":\"永定路A区域\",\"longitude\":\"116.258555\",\"latitude\":\"39.908447\",\"secretLevelName\":\"公开\",\"deviceStatusName\":\"在线\",\"cameraIndexCode\":\"34020000001320000008\",\"nvrIndexCode\":\"34020000001110000002\"}]', 'casic.bg.config', NULL, NULL, NULL); diff --git "a/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250121.txt" "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250121.txt" new file mode 100644 index 0000000..f5df373 --- /dev/null +++ "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250121.txt" @@ -0,0 +1,2 @@ +ALTER TABLE box_device ADD COLUMN path VARCHAR(512); +ALTER TABLE box_device ADD COLUMN version VARCHAR(512); \ No newline at end of file diff --git "a/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250217.txt" "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250217.txt" new file mode 100644 index 0000000..2488c3b --- /dev/null +++ "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250217.txt" @@ -0,0 +1 @@ +ALTER TABLE risk_point_info MODIFY COLUMN substances_quantities VARCHAR(1024); \ No newline at end of file diff --git "a/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250225.txt" "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250225.txt" new file mode 100644 index 0000000..dbb2424 --- /dev/null +++ "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250225.txt" @@ -0,0 +1,7 @@ +1.nginx版本号 关闭 +2.后台配置 casic.no-login-urls 中 ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin, 先暂时移除,做好备份 +3.nginx 代理路径下其他文件先移除,或者修改nginx代理路径到新路径(保障只有前端包) +4.后台配置 casic.no-login-urls 中移除 /v2/api-docs,/v2/api-docs-ext,/doc.html,/v2/api-docs/swagger-ui.html,/swagger-resources + + + diff --git a/sql/test.html b/sql/test.html new file mode 100644 index 0000000..a8f64b0 --- /dev/null +++ b/sql/test.html @@ -0,0 +1,24 @@ + + + + + + + +
+
+
+ + + diff --git a/sql/test1.html b/sql/test1.html new file mode 100644 index 0000000..6e7debb --- /dev/null +++ b/sql/test1.html @@ -0,0 +1,98 @@ + + + + 字帖生成器 + + + +
+ + + + + +
+
+ + + + diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java new file mode 100644 index 0000000..1ca5eb1 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDeptEnum.java @@ -0,0 +1,63 @@ +package com.casic.missiles.modular.device.enums; + +/** + * wvp设备类型转换 + * + * @author lwh + * @Date 2017年1月10日 下午9:54:13 + */ +public enum AvDeptEnum { + + DEPT0("0066", "801",0L), + DEPT1("0059", "699厂",1L), + DEPT2("0055", "283厂",1L), + DEPT3("0022", "201所",1L), + DEPT4("0027", "206所",1L), + DEPT5("0013", "23所",1L); + + String code; + String message; + Long deptId; + AvDeptEnum(String code, String message, Long deptId) { + this.code = code; + this.message = message; + this.deptId = deptId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public static AvDeptEnum valueOfCode(String value) { + if (value == null) { + return null; + } else { + for (AvDeptEnum ms : AvDeptEnum.values()) { + if (ms.getCode().equals(value)) { + return ms; + } + } + return null; + } + } +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java new file mode 100644 index 0000000..573d0e2 --- /dev/null +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/task/Test.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.task; + +import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; + +public class Test { + public static void main(String[] args) { + System.out.println(AvStatusTypeEnum.valueOfType(new Integer(1)).getMessage()); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java new file mode 100644 index 0000000..7c06c67 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/RiskSyncController.java @@ -0,0 +1,77 @@ +package com.casic.missiles.modular.device.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpSession; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class RiskSyncController extends BaseController { + @Resource + private IClientAuthService clientAuthService; + @Resource + private AbstractDeptService deptService; + @Resource + private AbstractUserService userService; + @PostMapping("/client/login") + @ResponseBody + public ResponseData login(@RequestBody RiskLoginForm deviceLoginForm, HttpSession session) { + return clientAuthService.login(deviceLoginForm, session); + } + + /** + * 全量组织信息读取 + * + * @return + */ + @PostMapping("/dept/list") + @ResponseBody + public ResponseDataDTO> dept() { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = deptService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量用户信息读取 + * + * @return + */ + @PostMapping("/user/list") + @ResponseBody + public ResponseDataDTO> user() { + //todo 此处租户拦截需移除 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } + + /** + * 全量设备信息读取 + * + * @return + */ + @PostMapping("/device/list") + @ResponseBody + public ResponseDataDTO> device() { + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List deptList = userService.list(query); + return ResponseDataDTO.success(deptList); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java new file mode 100644 index 0000000..5e5b890 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/UserSyncController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@Api(tags = "风险点数据同步") +@RestController +@RequestMapping("/sync/risk") +public class UserSyncController extends BaseController { + + @Resource + private IBusDeviceInfoService busDeviceInfoService; + + /** + * 登录用户授权设备权限查看 + * @return + */ + @GetMapping("/device/permissions") + @ResponseBody + public ResponseDataDTO> devicePermissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } + + /** + * 登录用户风险点授权查询 + * @return + */ + @GetMapping("/permissions") + @ResponseBody + public ResponseDataDTO> permissions() { + //用户可见设备集合ID + List deviceIds = busDeviceInfoService.selectDeviceIds(); + return ResponseDataDTO.success(deviceIds); + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java new file mode 100644 index 0000000..07b8df8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/dto/RiskLoginForm.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +/** + * 设备登录接口 + */ +@Data +public class RiskLoginForm { + /** + * 设备编码 + */ + private String clientId; + + /** + * 时间戳 + */ + private Long time; + + /** + * 加密后数据 加密格式sn+时间戳 时效性为6小时 + */ + private String secret; + + /** + * 设备登录注册IP + */ + private String ip; + + /** + * 设备登录注册port + */ + private String port; +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java new file mode 100644 index 0000000..40fdb4b --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/IClientAuthService.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.device.service; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; + +import javax.servlet.http.HttpSession; + +public interface IClientAuthService { + /** + * @param deviceLoginForm + * @param session + * @return + */ + ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session); +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java new file mode 100644 index 0000000..576e857 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/service/impl/ClientAuthServiceImpl.java @@ -0,0 +1,95 @@ +package com.casic.missiles.modular.device.service.impl; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import cn.hutool.jwt.JWT; +import cn.hutool.jwt.JWTUtil; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.device.dto.RiskLoginForm; +import com.casic.missiles.modular.device.service.IClientAuthService; +import com.casic.missiles.modular.util.IRiskCacheUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpSession; +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Service +public class ClientAuthServiceImpl implements IClientAuthService { + @Value("${casic.client.privateKey:MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALKcwHHOg0F6Zkq7GOVnOnTgvH9vSPXFFTOcEqOVBIBPBz7UNrEGkp1PhZ+oC4WVJAsDuot2e1fDZy9QS9HF92MmnYp9kuQRhGZjHctPnVZ0Kai5BES0ytHqPeauLyNXxOOS0YKYEUwpft4Z5Azw7bj3JWNvLrnTZvNld6FDvTslAgMBAAECgYAqN/kZLYpC+O6i7XSmDO95XwHPUXu6dDpdt5+EQR4OQh/hTwIaeAZB3uEj6vHGQomBfQEkI/5lsU97lIxHanbd+Hro7JyIhsGD5LR5XnZHVKzFiZW62OIU6FI9dlQNN8miiblnmyDwiMA3okaHl0O7qQjZ+IvY2csgmJc7AXpPpQJBAOhrhcfWFcgffj2O6HYNlBLFfbboc/ZzrEADDXKnxRSHlo5o8W+6gylG/L2NGtbag5S68B9VYzdkSQ1++5C+Ws8CQQDEu7h311PLEiKgqzGHpjzadQETmt/jMadaKQmT0TZwNVi6X8lR17U5hF8dAqZzUzr9kUC0HRIZhg4Uv1v3W3fLAkB4YPhxgJjXhjhEefg87Nt8vX1Xdx5Yz6CvpuUYNX0GHRQFvqUOUXQNtQ7CvorgLV1pc0lbcUZqMi8EJnj1hyJRAkEAjHXWm8GiMt+M15fCsi3vTq2xChVOekBuUsHv85iwvGZqJg7ThtpyqlEnM2g7/STUfkvhnXcQACclEI0blTy6BwJAPmFyhU+d0ejVpbc53TdrL2HqYYUHi/tTy/dtUa7lbypzdwwJ2M1Tv5PE8sQxr9tgMbebfxVb/RFKdiCCtzC4ng==}") + private String privateKey; + + @Override + public ResponseData login(RiskLoginForm deviceLoginForm, HttpSession session) { + //固定秘钥解析 + try { + String str = RSAUtils.decrypt(deviceLoginForm.getSecret(), privateKey); + Long time = Long.valueOf(StrUtil.split(str, "_").get(1)); + //边缘盒子时差与服务时差不可超过24小时 + if (time == null || System.currentTimeMillis() - time > 3600 * 24 * 1000) { + return ResponseData.error("请求时间超时"); + } + deviceLoginForm.setTime(time); + } catch (Exception e) { + e.printStackTrace(); + return ResponseData.error("设备解析异常!"); + } + + try { + String token = this.createJwtToken(deviceLoginForm); + IRiskCacheUtil.put(token, token); + return ResponseData.success(token); + } catch (Exception e) { + log.error("设备登录异常:{}", e.getMessage()); + return ResponseData.error("登录异常,请联系管理员"); + } +} + /** + * token创建 + * + * @param loginForm 登录信息 + * @param device 设备信息 + * @return + * @throws Exception + */ + public String createJwtToken(RiskLoginForm loginForm) throws Exception { + Map payload = new HashMap<>(); + payload.put("clientId", loginForm.getClientId()); // 设备编号 + payload.put("time", loginForm.getTime()); // 请求时间 + + //RSA 解密 + String str = RSAUtils.decrypt(loginForm.getSecret(), privateKey); + String key = loginForm.getClientId()+"_" + loginForm.getTime() ; + if (!key.equals(str)) { + //秘钥验证失败 + throw new ServiceException(500,"秘钥验证失败"); + } + +// long exp = new Date().getTime() + 2 * 3600000; // 2小时后的时间戳 +// payload.put("exp", exp); + + // 创建JWT + String jwt = JWTUtil.createToken(payload, "token-203-202405".getBytes()); + + return jwt; + } + + /** + * token解析 + * + * @param jwtStr token + * @return + * @throws Exception + */ + public static RiskLoginForm parseToken(String jwtStr){ + JWT jwtObj = new JWTUtil().parseToken(jwtStr); + RiskLoginForm deviceLoginForm = new RiskLoginForm(); + deviceLoginForm.setClientId(Convert.toStr(jwtObj.getPayload("clientId"))); + return deviceLoginForm; + } +} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java new file mode 100644 index 0000000..0e91ac8 --- /dev/null +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/util/IRiskCacheUtil.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.util; +import cn.hutool.cache.Cache; +import cn.hutool.cache.CacheUtil; +/** + * token有效 + */ +public class IRiskCacheUtil { + /** + * 1小时内不活跃 会踢掉 + */ + private static Cache fifoCache = CacheUtil.newFIFOCache(1000, 1000 * 60 * 60); + + public static void put(String key, String value) { + fifoCache.put(key, value); + } + + public static String get(String key) { + return fifoCache.get(key); + } + + public static void remove(String key) { + fifoCache.remove(key); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java new file mode 100644 index 0000000..805c32a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceGroupDict.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceGroupDict extends AbstractDictMap { + + @Override + public void init() { + //检索条件 + put("groupName", "分组名称"); + put("startTime", "起始时间"); + put("endTime", "结束时间"); + //新增修改属性 + put("cameraIds", "设备国标号"); + put("personIds", "人员主键集合"); + put("description","备注"); + put("id","主键"); + put("ids","主键集合"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java new file mode 100644 index 0000000..895fbd9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceQueryDict.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.device.dictmap; + +import com.casic.missiles.core.common.constant.dictmap.base.AbstractDictMap; + +public class DeviceQueryDict extends AbstractDictMap { + + @Override + public void init() { + put("devType", "类型查询"); + put("keyword", "设备名称"); + put("deptName", "所属单位"); + } + + @Override + protected void initBeWrapped() { + + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java new file mode 100644 index 0000000..88da6df --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/DeviceScopeUtil.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.device.util; + +public class DeviceScopeUtil { +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java new file mode 100644 index 0000000..2e3e478 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmUploadController.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.device.controller; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.auth.dto.DeviceLoginForm; +import com.casic.missiles.modular.auth.util.ICacheUtil; +import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; +import com.casic.missiles.modular.device.service.IAlarmRecordService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +@Api(tags = "告警记录") +@RestController +@RequestMapping("/record") +public class AlarmUploadController extends BaseController { + + private final IAlarmRecordService alarmRecordService; + private final IDeviceAuthService deviceAuthService; + public AlarmUploadController(IAlarmRecordService alarmRecordService, IDeviceAuthService deviceAuthService) { + this.alarmRecordService = alarmRecordService; + this.deviceAuthService = deviceAuthService; + } + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } + @BussinessLog(value = "告警记录上报接口") + @ApiOperation(value = "告警记录上报接口") + @PostMapping(value = "/upload") + public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return createAuthError(); + } + alarmRecordService.upload(alarmRecord); + return ResponseDataDTO.success(); + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java new file mode 100644 index 0000000..3f1c189 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/RecognitionStreamDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class RecognitionStreamDTO { + private Long id; + private String recognitionStreamFlag; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java new file mode 100644 index 0000000..fa5ae4a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/controller/SysUserRiskGroupController.java @@ -0,0 +1,167 @@ +package com.casic.missiles.modular.group.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.service.IRiskPointInfoService; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.group.vo.SysRiskGroupPointVO; +import com.casic.missiles.modular.group.vo.SysRiskGroupRelUserVO; +import com.casic.missiles.modular.group.vo.SysRiskUserGroupVO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import com.casic.missiles.modular.system.vo.SysGroupRelUserVO; +import com.casic.missiles.modular.system.vo.SysUserGroupVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.ibatis.annotations.Param; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; + +/** + * 风险点组信息Controller + * + * @author lwh + * @date 2024-07-11 + */ +@Api(tags = "风险点组信息") +@RestController +@RequestMapping("/sys/risk/group") +public class SysUserRiskGroupController extends BaseController { + private final IRiskPointInfoService riskPointInfoService; + private final ISysUserRiskGroupService sysUserGroupService; + private final AbstractPermissionContext permissionContext; + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysUserRiskGroupController(IRiskPointInfoService riskPointInfoService, ISysUserRiskGroupService sysUserGroupService, AbstractPermissionContext permissionContext, ISysRiskGroupRelUserService sysGroupRelUserService) { + this.riskPointInfoService = riskPointInfoService; + this.sysUserGroupService = sysUserGroupService; + this.permissionContext = permissionContext; + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @BussinessLog(value = "风险点分组查询") + @ApiOperation(value = "风险点分组查询", hidden = true) + @GetMapping(value = "/list") + public ResponseDataDTO> list(SysRiskUserGroupVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysUserGroupService.list(query)); + } + + @BussinessLog(value = "分组人员列表查询") + @ApiOperation(value = "分组人员列表查询") + @GetMapping(value = "/groupUserList") + public ResponseDataDTO> groupUserList(SysRiskGroupRelUserVO sysUserGroupVO) { + QueryWrapper query = sysUserGroupVO.genQuery(); + return ResponseDataDTO.success(sysGroupRelUserService.list(query)); + } + + @BussinessLog(value = "风险点分组人员查询") + @ApiOperation(value = "风险点分组人员分页查询") + @GetMapping(value = "/groupUserPage") + public ResponseDataDTO> listPage(SysRiskGroupRelUserVO sysGroupRelUserVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysGroupRelUserVO.genQuery(); + List relUsers = sysGroupRelUserService.selectSysGroupRelUserPage(page, query); + page.setRecords(relUsers); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "用户分组批量新增") + @ApiOperation(value = "批量新增接口") + @PostMapping(value = "/batch-add") + public ResponseDataDTO batchAdd(@RequestBody GroupUserRelDTO relDTO) { + sysGroupRelUserService.batchAdd(relDTO); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组人员删除") + @ApiOperation(value = "用户组人员删除接口") + @GetMapping(value = "/user/delete") + public ResponseDataDTO userDel(@Param("用户组人员关联主键") String id) { + sysGroupRelUserService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "风险点分组分页查询") + @ApiOperation(value = "分页查询") + @GetMapping(value = "/listPage") + public ResponseDataDTO> listPage(SysRiskUserGroupVO sysUserGroupVO) { + Page page = PageFactory.defaultPage(); + QueryWrapper query = sysUserGroupVO.genQuery(); + + List sysUserGroups = sysUserGroupService.selectSysUserGroupPage(page, query); + page.setRecords(sysUserGroups); + return ResponseDataDTO.success(super.packForBT(page)); + } + + @BussinessLog(value = "风险点分组新增") + @ApiOperation(value = "新增接口") + @PostMapping(value = "/add") + public ResponseDataDTO add(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.save(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组修改") + @ApiOperation(value = "修改接口") + @PostMapping(value = "/update") + public ResponseDataDTO update(@RequestBody SysUserRiskGroup sysUserGroup) { + sysUserGroupService.updateById(sysUserGroup); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "用户组删除") + @ApiOperation(value = "删除接口") + @GetMapping(value = "/delete") + public ResponseDataDTO delete(String id) { + sysUserGroupService.removeById(id); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "批量删除") + @ApiOperation(value = "批量删除", hidden = true) + @PostMapping("/batchDelete") + public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { + sysUserGroupService.removeByIds(ids.getIds()); + return ResponseDataDTO.success(); + } + + @BussinessLog(value = "详情查询") + @ApiOperation(value = "详情查询", hidden = true) + @GetMapping(value = "/detail") + public ResponseDataDTO detail(String id) { + return ResponseDataDTO.success(sysUserGroupService.getById(id)); + } + + @BussinessLog(value = "用户树") + @ApiOperation(value = "用户树查询") + @GetMapping(value = "/person/tree") + public ResponseDataDTO> personTree() { + return ResponseDataDTO.success(sysUserGroupService.personTree()); + } + + @BussinessLog(value = "风险点树查询") + @ApiOperation(value = "风险点树查询") + @GetMapping(value = "/tree") + public ResponseDataDTO> tree(String riskType) { + return ResponseDataDTO.success(riskPointInfoService.tree(riskType)); + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java new file mode 100644 index 0000000..419eb27 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupPointMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备所属人员组 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupPointMapper extends BaseMapper { +/** +* 设备所属人员组 分页检索 +*/ +List selectSysGroupDevicePage(@Param("page") Page page, @Param("ew" ) QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java new file mode 100644 index 0000000..eb41227 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysRiskGroupRelUserMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 组人员管理 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysRiskGroupRelUserMapper extends BaseMapper { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java new file mode 100644 index 0000000..e8352df --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/SysUserRiskGroupMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.group.dao; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.system.model.SysUserGroup; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 用户组信息 Mapper 接口 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface SysUserRiskGroupMapper extends BaseMapper { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(@Param("page") Page page, @Param("ew") QueryWrapper query); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml new file mode 100644 index 0000000..6fa6a4d --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupPointMapper.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + id , + group_id as groupId , + create_time as createTime , + target_Id as targetId + + + a.id , + a.group_id + as groupId , + a.create_time + as createTime , + a.target_Id + as targetId + + + + + + and group_id = #{request.groupId} + + + and device_id = #{request.deviceId} + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml new file mode 100644 index 0000000..a627546 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskGroupRelUserMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + id , + group_id as groupId , + user_id as userId , + create_time as createTime + + + a.id, + a.group_id + as groupId , + a.user_id + as userId , + a.create_time + as createTime + + + + + + and group_id = #{request.groupId} + + + and user_id = #{request.userId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml new file mode 100644 index 0000000..3245136 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dao/mapping/SysRiskUserGroupMapper.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + id, + group_name as groupName , + create_time as createTime , + dept_id as deptId , + create_id as createId + + + a.id,a.group_name as groupName , + a.create_time + as createTime , + a.dept_id + as deptId , + a.create_id + as createId,a.description + + + + + + and group_name like concat('%',#{request.groupName},'%') + + + and dept_id = #{request.deptId} + + + and create_id = #{request.createId} + + + + \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java new file mode 100644 index 0000000..e44328f --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/GroupRiskRelDTO.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class GroupRiskRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("风险点集合") + private List targetIds; + @ApiModelProperty("用户ID集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java new file mode 100644 index 0000000..f8758bf --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/dto/RiskGroupUserRelDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.group.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class RiskGroupUserRelDTO { + @ApiModelProperty("组ID") + private Long groupId; + @ApiModelProperty("设备集合") + private List userIds; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java new file mode 100644 index 0000000..b386d5b --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupPoint.java @@ -0,0 +1,53 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 风险点所属组 sys_risk_group_point + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_risk_group_point") +public class SysRiskGroupPoint extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableId("id") + private Long id; + + @ApiModelProperty(value = "用户组ID", dataType = "Long") + @TableField("group_id") + private Long groupId; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty(value = "风险点ID", dataType = "Long") + @TableField("target_id") + private Long targetId; + + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; + + @Override + public String toString() { + return "SysGroupDevice{" + + "id=" + id + + "groupId=" + groupId + + "createTime=" + createTime + + "targetId=" + targetId + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java new file mode 100644 index 0000000..949caa3 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysRiskGroupRelUser.java @@ -0,0 +1,55 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 组人员管理对象 sys_group_rel_user + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_risk_group_rel_user") +public class SysRiskGroupRelUser extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableField("id") + private Long id; + + @ApiModelProperty(value = "组ID", dataType = "Long") + @TableField("group_id") + private Long groupId; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + @TableField("user_id") + private Long userId; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + @ApiModelProperty(value = "用户姓名", dataType = "String") + @TableField(exist = false) + private String realName; + + @ApiModelProperty(value = "用户名", dataType = "String") + @TableField(exist = false) + private String account; + + @Override + public String toString() { + return "SysGroupRelUser{" + + "id=" + id + + "groupId=" + groupId + + "userId=" + userId + + "createTime=" + createTime + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java new file mode 100644 index 0000000..1b73dc0 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/model/SysUserRiskGroup.java @@ -0,0 +1,97 @@ +package com.casic.missiles.modular.group.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * 危险点分组组信息对象 sys_user_risk_group + * + * @author lwh + * @date 2024-07-11 + */ +@Data +@TableName("sys_user_risk_group") +public class SysUserRiskGroup extends Model { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键", dataType = "Long") + @TableId("id") + private Long id; + + @ApiModelProperty(value = "组名称", dataType = "String", required = true) + @TableField("group_name") + private String groupName; + + @ApiModelProperty(value = "创建时间", dataType = "Date") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty(value = "所属组织(保留字段)", dataType = "Long") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty(value = "描述信息", dataType = "String") + @TableField("description") + private String description; + + @ApiModelProperty(value = "密级字典", dataType = "String") + @TableField("safe") + private int safe; + + @ApiModelProperty(value = "创建者ID", dataType = "Long") + @TableField("create_id") + private Long createId; + + + @ApiModelProperty(value = "类型(1 危险点 2 重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "Long") + @TableField("group_type") + private String groupType; + @TableField(exist = false) + private String groupTypeName; + /** + * 风险点集合 + */ + @ApiModelProperty(value = "风险点集合(逗号拼接)", dataType = "String") + @TableField(exist = false) + private String pointIds; + + @ApiModelProperty(value = "数量", dataType = "Long") + @TableField(exist = false) + private Integer targetNum; + /** + * 用户集合 + */ + @ApiModelProperty(value = "用户集合(逗号拼接)", dataType = "String") + @TableField(exist = false) + private String personIds; + + @ApiModelProperty(value = "用户名称", dataType = "String") + @TableField(exist = false) + private String realName; + + @ApiModelProperty(value = "用户名", dataType = "String") + @TableField(exist = false) + private String account; + + @ApiModelProperty(value = "密级字典名称", dataType = "String") + @TableField(exist = false) + private String safeName; + + @Override + public String toString() { + return "SysUserGroup{" + + "id=" + id + + "groupName=" + groupName + + "createTime=" + createTime + + "deptId=" + deptId + + "createId=" + createId + + "}"; + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java new file mode 100644 index 0000000..4657ce4 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupPointService.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.device.dto.GroupRelDTO; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; + +import java.util.List; + + +/** + *

+ * 设备所属人员组 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysRiskGroupPointService extends IService { + /** + * 设备所属人员组 分页检索 + */ + List selectSysGroupDevicePage(Page page, QueryWrapper query); + + /** + * 设备组批量新增 + * + * @param relDTO + */ + void batchAdd(GroupRiskRelDTO relDTO); + + + /** + * 增量更新 + * @param groupId + * @param deviceIds + */ + void batchIncremental(Long groupId, List deviceIds); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java new file mode 100644 index 0000000..591eef2 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysRiskGroupRelUserService.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; + +import java.util.List; + + +/** + *

+ * 组人员管理 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysRiskGroupRelUserService extends IService { + /** + * 组人员管理 分页检索 + */ + List selectSysGroupRelUserPage(Page page, QueryWrapper query); + + void batchAdd(GroupUserRelDTO relDTO); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java new file mode 100644 index 0000000..1e0889c --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/ISysUserRiskGroupService.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.group.service; + +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.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.system.model.SysUserGroup; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; + +import java.util.List; + + +/** + *

+ * 用户组信息 服务类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +public interface ISysUserRiskGroupService extends IService { + /** + * 用户组信息 分页检索 + */ + List selectSysUserGroupPage(Page page, QueryWrapper query); + + List personTree(); + + /** + * 创建用户组 + * + * @param sysUserGroup 用户组信息 + * @param userIds 用户信息 + */ + void createSysUserGroup(SysUserRiskGroup sysUserGroup, List userIds); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java new file mode 100644 index 0000000..6839887 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupPointServiceImpl.java @@ -0,0 +1,118 @@ +package com.casic.missiles.modular.group.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +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.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.group.dao.SysRiskGroupPointMapper; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import com.casic.missiles.modular.group.service.ISysRiskGroupPointService; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + + +/** + *

+ * 设备所属人员组 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysRiskGroupPointServiceImpl extends ServiceImpl implements ISysRiskGroupPointService { + private final ISysRiskGroupRelUserService sysGroupRelUserService; + + public SysRiskGroupPointServiceImpl(ISysRiskGroupRelUserService sysGroupRelUserService) { + this.sysGroupRelUserService = sysGroupRelUserService; + } + + @Override + public List selectSysGroupDevicePage(Page page, QueryWrapper query) { + return this.baseMapper.selectSysGroupDevicePage(page, query); + } + + @Transactional + @Override + public void batchAdd(GroupRiskRelDTO relDTO) { + + if (CollectionUtil.isEmpty(relDTO.getTargetIds())) { + ServiceException serviceException = new ServiceException(500, "添加不能为空!"); + throw serviceException; + } + + //删除 + QueryWrapper query = new QueryWrapper<>(); + query.eq("group_id", relDTO.getGroupId()); + this.remove(query); + + //保存分组与危险点对应关系 + List groupDevices = new ArrayList<>(); + for (Long deviceId : relDTO.getTargetIds()) { + SysRiskGroupPoint sysGroupDevice = new SysRiskGroupPoint(); + sysGroupDevice.setTargetId(deviceId); + sysGroupDevice.setGroupId(relDTO.getGroupId()); + sysGroupDevice.setCreateTime(new Date()); + groupDevices.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(groupDevices); + + //批量保存风险点与用户关系 + GroupUserRelDTO groupUserRelDTO = new GroupUserRelDTO(); + groupUserRelDTO.setGroupId(relDTO.getGroupId()); + groupUserRelDTO.setUserIds(relDTO.getUserIds()); + sysGroupRelUserService.batchAdd(groupUserRelDTO); + + } + + @Override + public void batchIncremental(Long groupId, List deviceIds) { + List groupDevices = this.list(new LambdaQueryWrapper().eq(SysRiskGroupPoint::getGroupId, groupId)); + if (CollectionUtil.isEmpty(groupDevices)) { + saveDevices(groupId, deviceIds); + } else { + List oldDevices = groupDevices.stream().map(SysRiskGroupPoint::getTargetId).collect(Collectors.toList()); + List delIds = CollectionUtil.subtractToList(oldDevices, deviceIds); + List saveDevices = CollectionUtil.subtractToList(deviceIds, oldDevices); + + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.eq(SysRiskGroupPoint::getGroupId, groupId); + delQuery.in(SysRiskGroupPoint::getTargetId, delIds); + if (CollectionUtil.isNotEmpty(delIds)) { + this.remove(delQuery); + } + saveDevices(groupId, saveDevices); + } + } + + private void saveDevices(Long groupId, List saveDevices) { + List saves = new ArrayList<>(); + for (Long deviceId : saveDevices) { + SysRiskGroupPoint sysGroupDevice = new SysRiskGroupPoint(); + sysGroupDevice.setTargetId(deviceId); + sysGroupDevice.setGroupId(groupId); + sysGroupDevice.setCreateTime(new Date()); + saves.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(saves); + } + + private void saveOrUpdateBatchList(List groupDevices) { + for (SysRiskGroupPoint groupDevice : groupDevices) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysRiskGroupPoint::getGroupId, groupDevice.getGroupId()); + query.eq(SysRiskGroupPoint::getTargetId, groupDevice.getTargetId()); + this.saveOrUpdate(groupDevice, query); + } + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java new file mode 100644 index 0000000..83cd76a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysRiskGroupRelUserServiceImpl.java @@ -0,0 +1,71 @@ +package com.casic.missiles.modular.group.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +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.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.modular.group.dao.SysRiskGroupPointMapper; +import com.casic.missiles.modular.group.dao.SysRiskGroupRelUserMapper; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.system.dao.SysGroupRelUserMapper; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import com.casic.missiles.modular.system.service.ISysGroupRelUserService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + + +/** + *

+ * 组人员管理 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysRiskGroupRelUserServiceImpl extends ServiceImpl implements ISysRiskGroupRelUserService { + @Override + public List selectSysGroupRelUserPage(Page page, QueryWrapper query) { + return this.baseMapper.selectSysGroupRelUserPage(page, query); + } + + @Transactional + @Override + public void batchAdd(GroupUserRelDTO relDTO) { + if (CollectionUtil.isEmpty(relDTO.getUserIds())) { + ServiceException serviceException = new ServiceException(500, "添加不能为空!"); + throw serviceException; + } + //删除 + QueryWrapper query = new QueryWrapper<>(); + query.eq("group_id",relDTO.getGroupId()); + this.remove(query); + //添加设备信息 + List groupDevices = new ArrayList<>(); + for (Long deviceId : relDTO.getUserIds()) { + SysRiskGroupRelUser sysGroupDevice = new SysRiskGroupRelUser(); + sysGroupDevice.setUserId(deviceId); + sysGroupDevice.setGroupId(relDTO.getGroupId()); + sysGroupDevice.setCreateTime(new Date()); + groupDevices.add(sysGroupDevice); + } + this.saveOrUpdateBatchList(groupDevices); + } + + private void saveOrUpdateBatchList(List groupDevices) { + for (SysRiskGroupRelUser groupDevice : groupDevices) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysRiskGroupRelUser::getGroupId, groupDevice.getGroupId()); + query.eq(SysRiskGroupRelUser::getUserId, groupDevice.getUserId()); + this.saveOrUpdate(groupDevice, query); + } + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java new file mode 100644 index 0000000..b3bb9a8 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/service/impl/SysUserRiskGroupServiceImpl.java @@ -0,0 +1,246 @@ +package com.casic.missiles.modular.group.service.impl; + +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.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.modular.data.constants.DataConstants; +import com.casic.missiles.modular.group.dao.SysUserRiskGroupMapper; +import com.casic.missiles.modular.group.dto.GroupRiskRelDTO; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.group.service.ISysRiskGroupPointService; +import com.casic.missiles.modular.group.service.ISysRiskGroupRelUserService; +import com.casic.missiles.modular.group.service.ISysUserRiskGroupService; +import com.casic.missiles.modular.group.tree.RiskGroupDefaultTreeBuildFactory; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; +import com.casic.missiles.modular.system.dto.GroupUserRelDTO; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.modular.system.vo.GroupDeptDTO; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + + +/** + *

+ * 用户组信息 服务实现类 + *

+ * + * @author lwh + * @date 2024-07-11 + */ +@Service +public class SysUserRiskGroupServiceImpl extends ServiceImpl implements ISysUserRiskGroupService { + @Lazy + @Resource + private ISysRiskGroupPointService sysRiskGroupPointService; + private final AbstractPermissionContext abstractPermissionContext; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_USER = "2"; + private final AbstractDictService dictService; + @Lazy + @Resource + private ISysRiskGroupRelUserService relUserService; + + public SysUserRiskGroupServiceImpl(AbstractPermissionContext abstractPermissionContext, AbstractDictService dictService) { + this.abstractPermissionContext = abstractPermissionContext; + this.dictService = dictService; + } + + @Override + public List selectSysUserGroupPage(Page page, QueryWrapper query) { + //分组过滤当前权限 + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + query.in("a.dept_id", dataScope.getDeptIds()); + } + List riskGroups = this.baseMapper.selectSysUserGroupPage(page, query); + for (SysUserRiskGroup riskGroup : riskGroups) { + wrapperInfo(riskGroup); + } + return riskGroups; + } + + private void wrapperInfo(SysUserRiskGroup riskGroup) { + riskGroup.setSafeName(dictService.getDictNameByCode(DataConstants.DICT_SECRET_LEVEL_TYPE, riskGroup.getSafe() + "")); + //查询关联设备 + LambdaQueryWrapper deviceQuery = new LambdaQueryWrapper<>(); + deviceQuery.eq(SysRiskGroupPoint::getGroupId, riskGroup.getId()); + List devices = sysRiskGroupPointService.list(deviceQuery); + if (devices != null) { + List deviceList = devices.stream().map(SysRiskGroupPoint::getTargetId).collect(Collectors.toList()); + riskGroup.setPointIds(StrUtil.join(",", deviceList)); + riskGroup.setTargetNum(deviceList.size()); + } + + riskGroup.setGroupTypeName(dictService.getDictNameByCode(DataConstants.dangerAssessmentType, riskGroup.getGroupType())); + //查询关联人员 + LambdaQueryWrapper personQuery = new LambdaQueryWrapper<>(); + personQuery.eq(SysRiskGroupRelUser::getGroupId, riskGroup.getId()); + List persons = relUserService.list(personQuery); + if (persons != null) { + List personIds = persons.stream().map(SysRiskGroupRelUser::getUserId).collect(Collectors.toList()); + riskGroup.setPersonIds(StrUtil.join(",", personIds)); + } + } + + private void setGroupInfo(SysUserRiskGroup entity) { + if (StrUtil.isNotEmpty(entity.getPointIds())) { + entity.setTargetNum(StrUtil.split(entity.getPointIds(), ",").size()); + } else { + entity.setTargetNum(0); + } + } + + @Override + public boolean save(SysUserRiskGroup entity) { + AuthUser authUser = abstractPermissionContext.getAuthService().getLoginUser(); + entity.setCreateTime(new Date()); + entity.setCreateId(authUser.getId()); + if (entity.getDeptId() == null) { + entity.setDeptId(authUser.getDeptId()); + } + setGroupInfo(entity); + super.save(entity); + batchSave(entity, entity.getId()); + return true; + } + + @Override + public boolean updateById(SysUserRiskGroup entity) { + AuthUser authUser = abstractPermissionContext.getAuthService().getLoginUser(); + entity.setCreateTime(new Date()); + entity.setCreateId(authUser.getId()); + if (entity.getDeptId() == null) { + entity.setDeptId(authUser.getDeptId()); + } + setGroupInfo(entity); + super.updateById(entity); + batchSave(entity, entity.getId()); + return true; + } + + /** + * 数据转换 + * + * @param entity + * @param groupId + */ + private void batchSave(SysUserRiskGroup entity, Long groupId) { + GroupRiskRelDTO groupRelDTO = new GroupRiskRelDTO(); + groupRelDTO.setGroupId(groupId); + if (StrUtil.isNotEmpty(entity.getPointIds())) { + long[] longs = StrUtil.splitToLong(entity.getPointIds(), ","); + List devices = new ArrayList<>(); + for (long aLong : longs) { + devices.add(aLong); + } + groupRelDTO.setTargetIds(devices); + } + if (StrUtil.isNotEmpty(entity.getPersonIds())) { + List persons = new ArrayList<>(); + long[] longs = StrUtil.splitToLong(entity.getPersonIds(), ","); + + for (long aLong : longs) { + persons.add(aLong); + } + groupRelDTO.setUserIds(persons); + } + sysRiskGroupPointService.batchAdd(groupRelDTO); + } + + @Override + public List personTree() { + + //查询可见组织 + DataScope scope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + + LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { + deptQuery.in(Dept::getId, scope.getDeptIds()); + } + deptQuery.orderByAsc(Dept::getNum); + + List deptList = abstractPermissionContext.getDeptService().list(deptQuery); + List deptDTOS = new ArrayList<>(); + List rootIds = new ArrayList<>(); + Set normalIds = new HashSet<>(); + for (Dept dept : deptList) { + RiskGroupDeptDTO deptDTO = new RiskGroupDeptDTO(); + deptDTO.setPid(dept.getPid()); + deptDTO.setId(dept.getId()); + deptDTO.setFullName(dept.getFullName()); + deptDTO.setName(dept.getSimpleName()); + deptDTOS.add(deptDTO); + deptDTO.setType(NODE_TYPE_DEPT); + normalIds.add(dept.getId()); + + //挂载设备信息 + LambdaQueryWrapper deviceQuery = new LambdaQueryWrapper<>(); + deviceQuery.eq(User::getDeptId, deptDTO.getId()); + deviceQuery.eq(User::getStatus, "1"); + List deviceInfos = abstractPermissionContext.getUserService().list(deviceQuery); + + deptDTO.setChildrenNodes(deviceInfos.stream().map(this::createDeptDTO).collect(Collectors.toList())); + } + + for (RiskGroupDeptDTO deptDTO : deptDTOS) { + if (!normalIds.contains(deptDTO.getPid())) { + rootIds.add(deptDTO.getPid()); + } + } + + //过滤根节点,支持多根展示 + RiskGroupDefaultTreeBuildFactory abstractTreeBuildFactory = new RiskGroupDefaultTreeBuildFactory(); + List newTree = new ArrayList<>(); + rootIds = rootIds.stream().distinct().collect(Collectors.toList()); + for (Long rootId : rootIds) { + abstractTreeBuildFactory.setRootId(rootId + ""); + newTree.addAll(abstractTreeBuildFactory.doTreeBuild(deptDTOS)); + } + + return newTree; + } + + @Transactional + @Override + public void createSysUserGroup(SysUserRiskGroup sysUserGroup, List userIds) { + this.baseMapper.insert(sysUserGroup); + GroupUserRelDTO relDTO = new GroupUserRelDTO(); + relDTO.setGroupId(sysUserGroup.getId()); + relDTO.setUserIds(userIds); + relUserService.batchAdd(relDTO); + } + + + /** + * 创建节点 + * + * @param userInfo 用户信息 + * @return + */ + private GroupDeptDTO createDeptDTO(User userInfo) { + GroupDeptDTO deptDTO = new GroupDeptDTO(); + deptDTO.setType(NODE_TYPE_USER); + deptDTO.setId(userInfo.getId()); + deptDTO.setPid(userInfo.getDeptId()); + deptDTO.setUserDTO(userInfo); + deptDTO.setName(userInfo.getName()); + deptDTO.setFullName(userInfo.getName()); + deptDTO.setUserId(userInfo.getId() + ""); + return deptDTO; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/tree/RiskGroupDefaultTreeBuildFactory.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/tree/RiskGroupDefaultTreeBuildFactory.java new file mode 100644 index 0000000..69c18ad --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/tree/RiskGroupDefaultTreeBuildFactory.java @@ -0,0 +1,30 @@ +package com.casic.missiles.modular.group.tree; + +import com.casic.missiles.core.treebuild.DefaultTreeBuildFactory; +import com.casic.missiles.model.tree.Tree; + +import java.util.ArrayList; +import java.util.List; + +public class RiskGroupDefaultTreeBuildFactory extends DefaultTreeBuildFactory { + private String rootId; + @Override + protected List afterBuild(List nodes) { + //去掉所有的二级节点 + ArrayList results = new ArrayList<>(); + for (T node : nodes) { + if (node.getNodeParentId().equals(rootId)) { + results.add(node); + } + } + return results; + } + + public String getRootId() { + return rootId; + } + + public void setRootId(String rootId) { + this.rootId = rootId; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/RiskGroupDeptDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/RiskGroupDeptDTO.java new file mode 100644 index 0000000..7f6c157 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/RiskGroupDeptDTO.java @@ -0,0 +1,61 @@ +package com.casic.missiles.modular.group.vo; + +import com.casic.missiles.model.tree.Tree; +import com.casic.missiles.modular.device.model.RiskPointInfo; +import com.casic.missiles.modular.system.model.User; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +@Data +public class RiskGroupDeptDTO implements Tree { + @ApiModelProperty("组织主键") + private Long id; + + @ApiModelProperty("父部门ID") + private Long pid; + + @ApiModelProperty("组织简称") + private String name; + + @ApiModelProperty("组织全称") + private String fullName; + + @ApiModelProperty("子节点") + private List children = new ArrayList<>(); + + @ApiModelProperty("节点类型(1 组织 2 人员)") + private String type; + + @ApiModelProperty("用户信息") + private User userDTO; + private String userId; + private RiskPointInfo riskPointInfo; + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + @Override + public String getNodeId() { + return id + ""; + } + + @Override + public String getNodeParentId() { + return pid + ""; + } + + @Override + public void setChildrenNodes(List childrenNodes) { + children.addAll(childrenNodes); + children = children.stream().distinct().collect(Collectors.toList()); + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupPointVO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupPointVO.java new file mode 100644 index 0000000..3f6ca41 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupPointVO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.group.vo; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.modular.device.model.SysGroupDevice; +import com.casic.missiles.modular.group.model.SysRiskGroupPoint; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 风险点所属人员组对象VO + * + * @author lwh + * @date 2024-07-11 + */ +@Data +public class SysRiskGroupPointVO { + private static final long serialVersionUID = 1L; + + + @ApiModelProperty(value = "用户组ID", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "设备ID", dataType = "Long") + private Long targetId; + + public QueryWrapper genQuery() { + QueryWrapper query = new QueryWrapper<>(); + if (groupId != null) { + query.eq("group_id", groupId); + } + if (targetId != null) { + query.eq("target_id", targetId); + } + return query; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupRelUserVO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupRelUserVO.java new file mode 100644 index 0000000..5a95d82 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskGroupRelUserVO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.group.vo; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.modular.group.model.SysRiskGroupRelUser; +import com.casic.missiles.modular.system.model.SysGroupRelUser; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 组人员管理对象VO + * + * @author lwh + * @date 2024-07-11 + */ +@Data +public class SysRiskGroupRelUserVO { + private static final long serialVersionUID = 1L; + + + @ApiModelProperty(value = "组ID", dataType = "Long") + private Long groupId; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + private Long userId; + + public QueryWrapper genQuery() { + QueryWrapper query = new QueryWrapper<>(); + if (groupId != null) { + query.eq("group_id", groupId); + } + if (userId != null) { + query.eq("user_id", userId); + } + return query; + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskUserGroupVO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskUserGroupVO.java new file mode 100644 index 0000000..6363c3b --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/group/vo/SysRiskUserGroupVO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.group.vo; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.modular.group.model.SysUserRiskGroup; +import com.casic.missiles.modular.system.model.SysUserGroup; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 用户组信息对象VO + * + * @author lwh + * @date 2024-07-11 + */ +@Data +public class SysRiskUserGroupVO { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "用户组名称", dataType = "String") + private String groupName; + + @ApiModelProperty(value = "所属组织", dataType = "Long") + private Long deptId; + @ApiModelProperty(value = "创建时间起始", dataType = "String") + private String startTime; + @ApiModelProperty(value = "创建时间结束", dataType = "String") + private String endTime; + @ApiModelProperty(value = "创建者ID", dataType = "Long") + private Long createId; + + public QueryWrapper genQuery() { + QueryWrapper query = new QueryWrapper<>(); + if (StrUtil.isNotEmpty(groupName)) { + query.like("a.group_name", groupName); + } + if (StrUtil.isNotEmpty(startTime)) { + query.ge("a.create_time", startTime); + } + if (StrUtil.isNotEmpty(endTime)) { + query.le("a.create_time", endTime); + } + if (deptId != null) { + query.eq("a.dept_id", deptId); + } + if (createId != null) { + query.eq("a.create_id", createId); + } + return query; + } +} diff --git a/casic-web/src/main/resources/doc/20250227.txt b/casic-web/src/main/resources/doc/20250227.txt new file mode 100644 index 0000000..daf4d4c --- /dev/null +++ b/casic-web/src/main/resources/doc/20250227.txt @@ -0,0 +1,68 @@ +1.权限配置检查 + 对应属性需配置为 security_admin + casic: + video: + admin: + role: security_admin +1.租户设定更新 + 创建租户设定角色 角色别名必须是tenantAdministrator + + 分配给管理员 需手动入库授权, sys_user表 role_id字段添加租户设定字段, + sys_ru_relation 添加用户绑定关系 + + INSERT INTO sys_tenant(ID, TENANT_NAME, TENANT_CODE, LINK_PERSON, TEL, CLEARDAY, FLAG, TS) VALUES (1, '航天二院', '001', NULL, NULL, NULL, '0', '2025-02-21 14:41:20'); + + ALTER TABLE sys_user_group ADD COLUMN tenant_id VARCHAR(64); + ALTER TABLE sys_group_device ADD COLUMN tenant_id VARCHAR(64); + ALTER TABLE sys_group_rel_user ADD COLUMN tenant_id VARCHAR(64); + ALTER TABLE device_group_info ADD COLUMN tenant_id VARCHAR(64); + update device_group_info set tenant_id = 1; + update sys_user set tenant_id = 1; + update sys_role set tenant_id = 1; + update sys_rm_relation set tenant_id = 1; + update sys_ru_relation set tenant_id = 1; + update sys_dept set tenant_id = 1; + update sys_user_group set tenant_id = 1; + update sys_group_device set tenant_id = 1; + update sys_group_rel_user set tenant_id = 1; + 添加租户ID 0 + +2.表risk_point_info 字段 secret_level值密级默认 0 设定 + +3.新增表 sys_user_risk_group sys_risk_group_rel_user sys_risk_group_point + +CREATE TABLE sys_user_risk_group +( + id numeric(20,0) NOT NULL, + group_name VARCHAR(256), + create_time date, + dept_id numeric(20,0), + create_id numeric(20,0), + description VARCHAR(256), + safe SMALLINT, + group_type SMALLINT, + tenant_id VARCHAR(64), + PRIMARY KEY (id) +); + +CREATE TABLE sys_risk_group_rel_user +( + id numeric(20,0) NOT NULL, + group_id numeric(20,0), + user_id numeric(20,0), + create_time date, + tenant_id VARCHAR(64) +); + +CREATE TABLE sys_risk_group_point +( + id numeric(20,0) NOT NULL, + group_id numeric(20,0), + create_time date, + target_id numeric(20,0), + tenant_id VARCHAR(64) +); + + + + diff --git a/casic-web/src/main/resources/doc/20250416.txt b/casic-web/src/main/resources/doc/20250416.txt new file mode 100644 index 0000000..14610e9 --- /dev/null +++ b/casic-web/src/main/resources/doc/20250416.txt @@ -0,0 +1,18 @@ +1.增加识别流开关 流媒体id 识别流国标号 + ALTER TABLE box_device_relation ADD COLUMN media_server_id VARCHAR(255); + ALTER TABLE box_device_relation ADD COLUMN recognition_gb VARCHAR(255); + ALTER TABLE box_device_relation ADD COLUMN recognition_stream_flag int; + + + + ALTER TABLE upload_log ADD COLUMN tenant_id VARCHAR(64); +2.增加字典值 mediaServerId + 对应值参考zlm中的mediaServerId 配置项 +3.更新box_device表以下字段类型为text + server_public_key + server_private_key + client_public_key + client_private_key + +4.casic.no-login-urls + 增加 /record/upload \ No newline at end of file diff --git a/casic-web/src/main/resources/doc/20250519.txt b/casic-web/src/main/resources/doc/20250519.txt new file mode 100644 index 0000000..6d70728 --- /dev/null +++ b/casic-web/src/main/resources/doc/20250519.txt @@ -0,0 +1,3 @@ +1.固定秘钥解析 + 配置项增加 + casic.client.privateKey \ No newline at end of file diff --git a/casic-web/src/main/resources/doc/20250522.md b/casic-web/src/main/resources/doc/20250522.md new file mode 100644 index 0000000..636b4df --- /dev/null +++ b/casic-web/src/main/resources/doc/20250522.md @@ -0,0 +1,80 @@ +## 一、数据库更新 + +1. 操作日志增加IP字段 + +``` +ALTER TABLE sys_operation_log ADD COLUMN IP VARCHAR(255); +``` + +2. 角色添加业务类型 + +``` +ALTER TABLE sys_role ADD COLUMN BIZ_TYPE VARCHAR(32) default 'normal' COMMENT '业务类型标识字段,用于区分不同业务模块的资源,比如三员 安全生产'; +``` + +3. 资源添加业务类型及相关字典值 + +``` +ALTER TABLE sys_resource ADD COLUMN BIZ_TYPE VARCHAR(32) default 'normal' COMMENT '业务类型标识字段,用于区分不同业务模块的资源,比如三员 安全生产'; + +INSERT INTO `sys_dict` (`ID`, `NUM`, `PID`, `NAME`, `TIPS`, `CODE`, `TENANT_ID`) VALUES (1925798590442455041, '0', 0, '业务分类', '业务分类', 'bizType', NULL); +INSERT INTO `sys_dict` (`ID`, `NUM`, `PID`, `NAME`, `TIPS`, `CODE`, `TENANT_ID`) VALUES (1925798590442455042, '0', 1925798590442455041, '普通业务', NULL, 'normal', NULL); +INSERT INTO `sys_dict` (`ID`, `NUM`, `PID`, `NAME`, `TIPS`, `CODE`, `TENANT_ID`) VALUES (1925798590505369602, '1', 1925798590442455041, '三员权限', NULL, 'audit', NULL); + +``` +系统三员角色从数据库初始化 bizType为audit 其他角色为normal +系统菜单资源数据修改,系统管理下所有菜单及按钮设置bizType为audit,其他业务功能设置为normal + +4. 增加操作审批表结构 + +CREATE TABLE sys_operation_application +( +id numeric(20,0) NOT NULL, +create_time datetime , +update_time datetime , +title varchar(255) , +json_context text , +status char(1), +operation_type varchar(64) , +operation_remark varchar(255) , +audit_remark varchar(255) , +tenant_id varchar(64) , +create_id numeric(20,0) , +audit_id numeric(20,0) , +PRIMARY KEY (id) +) + +业务操作类关系如下 +增加operationType字典 +user_add 用户新增 +user_update 用户修改 +user_delete 用户删除 +user_reset 密码重置 +user_freeze 用户冻结 +user_unfreeze 用户解冻 +user_roleAssign 用户角色分配 + +role_add 角色新增 +role_update 角色修改 +role_delete 角色删除 +role_funcAuthor 角色功能权限配置 +role_dataAuthor 角色数据权限配置 + +resource_add 资源新增 +resource_update 资源修改 +resource_delete 资源删除 + +dept_add 组织新增 +dept_update 组织修改 +dept_delete 组织删除 + +casic.tenant.excludes 配置项增加 ,sys_operation_application + +对应角色只能授权对应角色资源 +## 二、设备同步自动提取所属组织机构 +1.增加开启配置项 +casic.video.av.autoDept: true #默认开启 + + + + diff --git "a/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250113\346\225\260\346\215\256\345\272\223.txt" "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250113\346\225\260\346\215\256\345\272\223.txt" new file mode 100644 index 0000000..9b3fde9 --- /dev/null +++ "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250113\346\225\260\346\215\256\345\272\223.txt" @@ -0,0 +1,12 @@ +ALTER TABLE box_device +MODIFY COLUMN server_public_key VARCHAR(512), +MODIFY COLUMN server_private_key VARCHAR(1024), +MODIFY COLUMN client_public_key VARCHAR(512), +MODIFY COLUMN client_private_key VARCHAR(1024); + +ALTER TABLE sys_config MODIFY COLUMN VALUE TEXT; + + + +INSERT INTO sys_resource(ID, PID, CODE, P_CODE, P_CODES, NAME, ICON, URL, NUM, LEVELS, IS_MENU, TIPS, IS_OPEN, RESOURCE_TYPE, CREATE_USER, UPDATE_USER, CREATE_TIME, UPDATE_TIME, DEL_FLAG, TENANT_ID, STATUS) VALUES (1872184789440688129, 0, 'bigScreen', '0', '[0],', '安全生产智慧监管平台', '', '/bigScreen', 0, 1, '1', NULL, '0', '03', 1832137050074128386, NULL, '2024-12-26 07:36:52', NULL, '0', NULL, '0'); +INSERT INTO sys_resource(ID, PID, CODE, P_CODE, P_CODES, NAME, ICON, URL, NUM, LEVELS, IS_MENU, TIPS, IS_OPEN, RESOURCE_TYPE, CREATE_USER, UPDATE_USER, CREATE_TIME, UPDATE_TIME, DEL_FLAG, TENANT_ID, STATUS) VALUES (1879080561335627777, 105, 'sys_bsConfig', 'system', '[0],[system],', '大屏配置', 'icon-bs', '/sys/bsConfig', 0, 2, '1', NULL, '0', '03', 1832137050074128386, 1832137050074128386, '2025-01-14 08:18:12', '2025-01-14 08:25:05', '0', NULL, '0'); diff --git "a/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250120\351\205\215\347\275\256.txt" "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250120\351\205\215\347\275\256.txt" new file mode 100644 index 0000000..4d3700f --- /dev/null +++ "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250120\351\205\215\347\275\256.txt" @@ -0,0 +1,13 @@ +1.配置最大上传文件 max-file-size 更改为150 + spring: + servlet: + multipart: + max-file-size: 150MB + max-request-size: 80MB + nginx也需设置 +2.登录不拦截配置项 + casic: + no-login-urls: + 增加 ,/sync/device/** + + INSERT INTO `casic-production-safety`.`sys_config`(`ID`, `VALUE`, `TARGET_NAME`, `CLASS_NAME`, `DESCRIPTION`, `TENANT_ID`) VALUES (1879417287790792706, '[{\"monitorName\":\"casic01\",\"deviceTypeName\":\"枪机\",\"deptName\":\"203\",\"areaName\":\"成都A区\",\"longitude\":\"116.258555\",\"latitude\":\"39.908447\",\"secretLevelName\":\"内部\",\"deviceStatusName\":\"在线\",\"cameraIndexCode\":\"34020000001320000003\",\"nvrIndexCode\":\"34020000001110000002\",\"picture\":\"http://192.168.83.42:6909/safe-server//picture/download/undefined?token=2c1e8cb8-e3f0-4fb5-af4f-7f3e3ce75add\"},{\"monitorName\":\"casic04\",\"deviceTypeName\":\"枪机\",\"deptName\":\"203\",\"areaName\":\"永定路A区域\",\"longitude\":\"116.258555\",\"latitude\":\"39.908447\",\"secretLevelName\":\"公开\",\"deviceStatusName\":\"在线\",\"cameraIndexCode\":\"34020000001320000008\",\"nvrIndexCode\":\"34020000001110000002\",\"picture\":\"http://192.168.83.42:6909/safe-server//picture/download/undefined?token=2c1e8cb8-e3f0-4fb5-af4f-7f3e3ce75add\"},{\"monitorName\":\"casic01\",\"deviceTypeName\":\"枪机\",\"deptName\":\"203\",\"areaName\":\"成都A区\",\"longitude\":\"116.258555\",\"latitude\":\"39.908447\",\"secretLevelName\":\"内部\",\"deviceStatusName\":\"在线\",\"cameraIndexCode\":\"34020000001320000003\",\"nvrIndexCode\":\"34020000001110000002\",\"picture\":\"http://192.168.83.42:6909/safe-server//picture/download/undefined?token=2c1e8cb8-e3f0-4fb5-af4f-7f3e3ce75add\"},{\"monitorName\":\"casic04\",\"deviceTypeName\":\"枪机\",\"deptName\":\"203\",\"areaName\":\"永定路A区域\",\"longitude\":\"116.258555\",\"latitude\":\"39.908447\",\"secretLevelName\":\"公开\",\"deviceStatusName\":\"在线\",\"cameraIndexCode\":\"34020000001320000008\",\"nvrIndexCode\":\"34020000001110000002\",\"picture\":\"http://192.168.83.42:6909/safe-server//picture/download/undefined?token=2c1e8cb8-e3f0-4fb5-af4f-7f3e3ce75add\"},{\"monitorName\":\"casic01\",\"deviceTypeName\":\"枪机\",\"deptName\":\"203\",\"areaName\":\"成都A区\",\"longitude\":\"116.258555\",\"latitude\":\"39.908447\",\"secretLevelName\":\"内部\",\"deviceStatusName\":\"在线\",\"cameraIndexCode\":\"34020000001320000003\",\"nvrIndexCode\":\"34020000001110000002\"},{\"monitorName\":\"casic04\",\"deviceTypeName\":\"枪机\",\"deptName\":\"203\",\"areaName\":\"永定路A区域\",\"longitude\":\"116.258555\",\"latitude\":\"39.908447\",\"secretLevelName\":\"公开\",\"deviceStatusName\":\"在线\",\"cameraIndexCode\":\"34020000001320000008\",\"nvrIndexCode\":\"34020000001110000002\"}]', 'casic.bg.config', NULL, NULL, NULL); diff --git "a/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250121.txt" "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250121.txt" new file mode 100644 index 0000000..f5df373 --- /dev/null +++ "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250121.txt" @@ -0,0 +1,2 @@ +ALTER TABLE box_device ADD COLUMN path VARCHAR(512); +ALTER TABLE box_device ADD COLUMN version VARCHAR(512); \ No newline at end of file diff --git "a/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250217.txt" "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250217.txt" new file mode 100644 index 0000000..2488c3b --- /dev/null +++ "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250217.txt" @@ -0,0 +1 @@ +ALTER TABLE risk_point_info MODIFY COLUMN substances_quantities VARCHAR(1024); \ No newline at end of file diff --git "a/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250225.txt" "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250225.txt" new file mode 100644 index 0000000..dbb2424 --- /dev/null +++ "b/casic-web/src/main/resources/doc/\345\216\206\345\217\262\346\233\264\346\226\260/20250225.txt" @@ -0,0 +1,7 @@ +1.nginx版本号 关闭 +2.后台配置 casic.no-login-urls 中 ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin, 先暂时移除,做好备份 +3.nginx 代理路径下其他文件先移除,或者修改nginx代理路径到新路径(保障只有前端包) +4.后台配置 casic.no-login-urls 中移除 /v2/api-docs,/v2/api-docs-ext,/doc.html,/v2/api-docs/swagger-ui.html,/swagger-resources + + + diff --git a/sql/test.html b/sql/test.html new file mode 100644 index 0000000..a8f64b0 --- /dev/null +++ b/sql/test.html @@ -0,0 +1,24 @@ + + + + + + + +
+
+
+ + + diff --git a/sql/test1.html b/sql/test1.html new file mode 100644 index 0000000..6e7debb --- /dev/null +++ b/sql/test1.html @@ -0,0 +1,98 @@ + + + + 字帖生成器 + + + +
+ + + + + +
+
+ + + + diff --git a/sql/test3.html b/sql/test3.html new file mode 100644 index 0000000..ebecb24 --- /dev/null +++ b/sql/test3.html @@ -0,0 +1,261 @@ + + + + + + + + + + + + +
+
+
+ +
+ +
+
+ + + \ No newline at end of file