Browse Source

优化

master
DX 1 week ago
parent
commit
804779aa14
  1. 1
      yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/api/file/dto/InfraFileInfoDTO.java
  2. 25
      yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/FileController.java
  3. 1
      yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/file/FileServiceImpl.java
  4. 27
      yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/DictTypeConstants.java
  5. 5
      yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java
  6. 44
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/airqualitycollection/QualityCollectionController.java
  7. 5
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/airqualitycollection/vo/QualityCollectionExcelVO.java
  8. 9
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/airqualitycollection/vo/QualityCollectionPageReqVO.java
  9. 4
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/airqualitycollection/vo/QualityCollectionRespVO.java
  10. 5
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.java
  11. 24
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/bigviewdata/BigViewDataController.java
  12. 16
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/bigviewdata/vo/BigViewCenterDataVO.java
  13. 10
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/bigviewdata/vo/LeftFirstDataVO.java
  14. 11
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/bigviewdata/vo/LeftThirdDataVO.java
  15. 13
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/bigviewdata/vo/MonthTaskInspectionVO.java
  16. 21
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/bigviewdata/vo/ReginCountVO.java
  17. 9
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/bigviewdata/vo/RightThirdDataVO.java
  18. 9
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/bigviewdata/vo/TaskCountVO.java
  19. 92
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/enterprise/EnterpriseController.java
  20. 32
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/enterprise/vo/EnterpriseExportVO.java
  21. 4
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/enterprise/vo/EnterprisePageReqVO.java
  22. 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/enterprise/vo/EnterpriseSaveReqVO.java
  23. 13
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/enterpriseinspections/EnterpriseInspectionsController.java
  24. 16
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/enterpriseinspections/vo/InspectionByEnterpriseIdRespVO.java
  25. 15
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/enterpriseinspections/vo/InspectionByEnterpriseIdVO.java
  26. 9
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/fileInfo/FileInfoController.java
  27. 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/home/vo/HomeCountResVO.java
  28. 4
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/inspectionslog/InspectionsLogController.java
  29. 14
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/qualification/EnterpriseQualificationController.java
  30. 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/qualification/vo/EnterpriseQualificationPageReqVO.java
  31. 3
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/qualification/vo/EnterpriseQualificationRespVO.java
  32. 131
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/taskinfo/TaskInfoController.java
  33. 44
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/taskinfo/vo/TaskInfoRespExcelVO.java
  34. 10
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/taskinfo/vo/TaskInfoRespVO.java
  35. 3
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/taskinfo/vo/TaskInfoSaveReqVO.java
  36. 39
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserController.java
  37. 2
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserDeptVO.java
  38. 49
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserExportVO.java
  39. 2
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserPageReqVO.java
  40. 7
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserRespVO.java
  41. 11
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserSaveReqVO.java
  42. 37
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/convert/enterprise/EnterpriseConvert.java
  43. 34
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/convert/taskInfo/TaskInfoConvert.java
  44. 36
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/convert/user/UserConvert.java
  45. 2
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/airqualitycollection/QualityCollectionDO.java
  46. 3
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/enterprise/EnterpriseDO.java
  47. 4
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/taskinfo/TaskInfoDO.java
  48. 10
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/user/AdminUserDO.java
  49. 21
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/airqualitycollection/QualityCollectionMapper.java
  50. 19
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/bigviewdata/BigViewDataMapper.java
  51. 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/enterprise/EnterpriseMapper.java
  52. 7
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/enterpriseinspections/EnterpriseInspectionsMapper.java
  53. 2
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/UserRoleMapper.java
  54. 2
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/AdminUserMapper.java
  55. 4
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/job/InspectionsSendStartMessageJob.java
  56. 8
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/job/QualificationTimeOutSendStartMessageJob.java
  57. 6
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/job/TaskSendStartMessageJob.java
  58. 4
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/airqualitycollection/QualityCollectionService.java
  59. 131
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/airqualitycollection/QualityCollectionServiceImpl.java
  60. 34
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java
  61. 20
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/bigviewdata/BigViewDataService.java
  62. 336
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/bigviewdata/BigViewDataServiceImpl.java
  63. 10
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java
  64. 54
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/enterprise/EnterpriseServiceImpl.java
  65. 2
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/enterpriseinspections/EnterpriseInspectionsService.java
  66. 54
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/enterpriseinspections/EnterpriseInspectionsServiceImpl.java
  67. 3
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/fileInfo/FileInfoService.java
  68. 11
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/fileInfo/FileInfoServiceImpl.java
  69. 12
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/permission/PermissionService.java
  70. 14
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/permission/PermissionServiceImpl.java
  71. 15
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/permission/RoleServiceImpl.java
  72. 4
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/taskinfo/TaskInfoService.java
  73. 129
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/taskinfo/TaskInfoServiceImpl.java
  74. 5
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java
  75. 226
      yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/bigviewdata/BigViewDataMapper.xml
  76. 17
      yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/enterpriseinspections/EnterpriseInspections.xml
  77. 3
      yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/taskinfo/TaskInfoMapper.xml
  78. 4
      yudao-server/src/main/resources/application-local.yaml

1
yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/api/file/dto/InfraFileInfoDTO.java

@ -6,4 +6,5 @@ import lombok.Data;
public class InfraFileInfoDTO {
private String url;
private Long id;
private String name;
}

25
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/FileController.java

@ -26,6 +26,9 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@ -49,6 +52,28 @@ public class FileController {
return success(fileService.createFile(file.getOriginalFilename(), path, IoUtil.readBytes(file.getInputStream())));
}
@PostMapping("/uploads")
@Operation(summary = "多文件上传", description = "模式一:后端上传文件")
public CommonResult<List<InfraFileInfoDTO>> uploadFiles(@RequestPart("files") MultipartFile[] files,
@RequestParam(required = false) String path) throws Exception {
// 参数校验
if (files == null || files.length == 0) {
throw new IllegalArgumentException("至少需要上传一个文件");
}
List<InfraFileInfoDTO> result = new ArrayList<>();
for (MultipartFile file : files) {
if (!file.isEmpty()) {
result.add(fileService.createFile(
file.getOriginalFilename(),
path,
IoUtil.readBytes(file.getInputStream())
));
}
}
return success(result);
}
@GetMapping("/presigned-url")
@Operation(summary = "获取文件预签名地址", description = "模式二:前端上传文件:用于前端直接上传七牛、阿里云 OSS 等文件存储器")
public CommonResult<FilePresignedUrlRespVO> getFilePresignedUrl(@RequestParam("path") String path) throws Exception {

1
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/file/FileServiceImpl.java

@ -135,6 +135,7 @@ public class FileServiceImpl implements FileService {
InfraFileInfoDTO map = new InfraFileInfoDTO();
map.setId(fileDO.getId());
map.setUrl(fileDO.getUrl());
map.setName(fileDO.getName());
return map;
}).collect(Collectors.toList());
}

27
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/DictTypeConstants.java

@ -23,4 +23,31 @@ public interface DictTypeConstants {
String SMS_SEND_STATUS = "system_sms_send_status"; // 短信发送状态
String SMS_RECEIVE_STATUS = "system_sms_receive_status"; // 短信接收状态
String TASK_STATE = "task_state"; // 短信接收类型
String SYSTEM_USER_SEX = "system_user_sex";
String SYSTEM_MENU_TYPE = "system_menu_type";
String SYSTEM_ROLE_TYPE = "system_role_type";
String SYSTEM_DATA_SCOPE = "system_data_scope";
String SYSTEM_NOTICE_TYPE = "system_notice_type";
String SYSTEM_LOGIN_TYPE = "system_login_type";
String SYSTEM_LOGIN_RESULT = "system_login_result";
String SYSTEM_SMS_CHANNEL_CODE = "system_sms_channel_code";
String SYSTEM_SMS_TEMPLATE_TYPE = "system_sms_template_type";
String SYSTEM_SMS_SEND_STATUS = "system_sms_send_status";
String SYSTEM_SMS_RECEIVE_STATUS = "system_sms_receive_status";
String SYSTEM_OAUTH2_GRANT_TYPE = "system_oauth2_grant_type";
String SYSTEM_MAIL_SEND_STATUS = "system_mail_send_status";
String SYSTEM_NOTIFY_TEMPLATE_TYPE = "system_notify_template_type";
String SYSTEM_SOCIAL_TYPE = "system_social_type";
String USER_AUDIT_TYPE = "user_audit_type";
String WX_USER_TYPE = "wx_user_type";
String TAG_TYPE = "tag_type";
String TASK_TYPE_EXCEL = "task_type_excel";
String TASK_TYPE_PARENT = "task_type_parent";
String TASK_PRIORITY = "task_priority";
String TASK_EXEC_TIME = "task_exec_time";
String INSPECTIONS_STATUS = "Inspections_status";
String AIR_COLLECTION_TYPE = "air_collection_type";
String ENTERPRISE_AREA = "enterprises_area";
}

5
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java

@ -32,6 +32,7 @@ public interface ErrorCodeConstants {
ErrorCode ROLE_CAN_NOT_UPDATE_SYSTEM_TYPE_ROLE = new ErrorCode(1_002_002_003, "不能操作类型为系统内置的角色");
ErrorCode ROLE_IS_DISABLE = new ErrorCode(1_002_002_004, "名字为【{}】的角色已被禁用");
ErrorCode ROLE_ADMIN_CODE_ERROR = new ErrorCode(1_002_002_005, "标识【{}】不能使用");
ErrorCode ROLE_USER_CODE_ERROR = new ErrorCode(1_002_002_006, "先删除角色下用户");
// ========== 用户模块 1-002-003-000 ==========
ErrorCode USER_USERNAME_EXISTS = new ErrorCode(1_002_003_000, "用户账号已经存在");
@ -43,6 +44,8 @@ public interface ErrorCodeConstants {
ErrorCode USER_IS_DISABLE = new ErrorCode(1_002_003_006, "名字为【{}】的用户已被禁用");
ErrorCode USER_COUNT_MAX = new ErrorCode(1_002_003_008, "创建用户失败,原因:超过租户最大租户配额({})!");
ErrorCode USER_IMPORT_INIT_PASSWORD = new ErrorCode(1_002_003_009, "初始密码不能为空");
ErrorCode DEPT_USER_ERROR = new ErrorCode(1_002_004_008, "不能删除,部门下有用户");
ErrorCode USER_LOGIN_ERROR = new ErrorCode(1_002_004_009, "不是局内用户,或审核未通过");
// ========== 部门模块 1-002-004-000 ==========
ErrorCode DEPT_NAME_DUPLICATE = new ErrorCode(1_002_004_000, "已经存在该名字的部门");
@ -123,6 +126,8 @@ public interface ErrorCodeConstants {
ErrorCode SOCIAL_CLIENT_WEIXIN_MINI_APP_SUBSCRIBE_MESSAGE_ERROR = new ErrorCode(1_002_018_203, "发送小程序订阅消息失败");
ErrorCode SOCIAL_CLIENT_NOT_EXISTS = new ErrorCode(1_002_018_210, "社交客户端不存在");
ErrorCode SOCIAL_CLIENT_UNIQUE = new ErrorCode(1_002_018_211, "社交客户端已存在配置");
ErrorCode SOCIAL_CLIENT_CODE_EXISTS = new ErrorCode(1_002_018_212, "社交客户端CODE不存在");
// ========== OAuth2 客户端 1-002-020-000 =========

44
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/airqualitycollection/QualityCollectionController.java

@ -1,6 +1,7 @@
package cn.iocoder.yudao.module.system.controller.admin.airqualitycollection;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.exception.ExcelDataConvertException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
@ -16,6 +17,8 @@ import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.error;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
@ -33,6 +36,11 @@ import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
@Tag(name = "管理后台 - 空气质量采集")
@RestController
@RequestMapping("/system/quality-collection")
@Validated
@ -83,6 +91,13 @@ public class QualityCollectionController {
return success(BeanUtils.toBean(pageResult, QualityCollectionRespVO.class));
}
@GetMapping("/latest")
@Operation(summary = "最新一条数据")
public CommonResult<QualityCollectionRespVO> latest() {
QualityCollectionDO qualityCollectionDO = qualityCollectionService.latest();
return success(BeanUtils.toBean(qualityCollectionDO, QualityCollectionRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出空气质量采集 Excel")
@PreAuthorize("@ss.hasPermission('system:quality-collection:export')")
@ -99,15 +114,28 @@ public class QualityCollectionController {
@PostMapping("/upload-excel")
@Operation(summary = "导入空气质量采集 Excel")
// @PreAuthorize("@ss.hasPermission('system:quality-collection:upload')")
public void uploadExcel(@RequestParam("file") MultipartFile file, @RequestParam("type") Long type) throws IOException {
public CommonResult<String> uploadExcel(@RequestParam("file") MultipartFile file) throws IOException {
// 2. 使用 EasyExcel 读取(替换 ExcelUtils)
List<QualityCollectionExcelVO> list = EasyExcel.read(file.getInputStream())
.head(QualityCollectionExcelVO.class)
.sheet()
.doReadSync();
// 3. 打印读取结果
qualityCollectionService.saveList(list, type);
try {
List<QualityCollectionExcelVO> list = EasyExcel.read(file.getInputStream())
.head(QualityCollectionExcelVO.class)
.sheet()
.doReadSync();
// 3. 打印读取结果
qualityCollectionService.saveList(list);
} catch (ExcelDataConvertException e) {
System.err.println("数据转换失败:行" + (e.getRowIndex()+1) +
"列" + (e.getColumnIndex()+1) +
" - " + e.getCellData().getStringValue());
String message = "数据转换失败:行" + (e.getRowIndex()+1) +
"列" + (e.getColumnIndex()+1) +
" - " + e.getCellData().getStringValue();
return error(0, message);
}
return success("上传成功");
}
}

5
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/airqualitycollection/vo/QualityCollectionExcelVO.java

@ -1,6 +1,5 @@
package cn.iocoder.yudao.module.system.controller.admin.airqualitycollection.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import com.thoughtworks.xstream.converters.time.LocalDateTimeConverter;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.experimental.Accessors;
@ -21,7 +20,7 @@ public class QualityCollectionExcelVO {
private String siteName;
@ExcelProperty(value = "时间", index = 3)
private LocalDateTime time;
private String time;
@ExcelProperty(value = "PM2.s(ugim3)", index = 4)
private String pm25;
@ -39,7 +38,7 @@ public class QualityCollectionExcelVO {
private String no;
@ExcelProperty(value = "NOx(μg/m3)", index = 9)
private String nOx;
private String nox;
@ExcelProperty(value = "CO(mg/m3)", index = 10)
private String co;

9
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/airqualitycollection/vo/QualityCollectionPageReqVO.java

@ -21,8 +21,11 @@ public class QualityCollectionPageReqVO extends PageParam {
@Schema(description = "城市")
private String city;
@Schema(description = "时间")
private String[] times;
@Schema(description = "数据类型", example = "2")
private Long type;
private Integer type;
@Schema(description = "PM2.s(ugim3)")
private Double pm25;
@ -39,8 +42,8 @@ public class QualityCollectionPageReqVO extends PageParam {
@Schema(description = "NO(Hg/m3)")
private Double no;
@Schema(description = "NOx(Hg/m3)")
private Double nOx;
@Schema(description = "NOx(μg/m3)")
private Double nox;
@Schema(description = "CO(mg/m3)")
private Double co;

4
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/airqualitycollection/vo/QualityCollectionRespVO.java

@ -52,7 +52,7 @@ public class QualityCollectionRespVO {
@Schema(description = "NOx(μg/m3)")
@ExcelProperty("NOx(μg/m3)")
private Double nOx;
private Double nox;
@Schema(description = "CO(mg/m3)")
@ExcelProperty("CO(mg/m3)")
@ -64,7 +64,7 @@ public class QualityCollectionRespVO {
@Schema(description = "时间")
@ExcelProperty("时间")
private LocalDateTime time;
private String time;
@Schema(description = "备用1", example = "你猜")
private String remark;

5
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.java

@ -252,12 +252,17 @@ public class AuthController {
//判断是否为对象空
if(StrUtil.isNotEmpty(json)){
SocialUserDO socialUserDO = JsonUtils.parseObject(json, SocialUserDO.class);
AuthSocialLoginReqVO authSocialLoginReqVO=new AuthSocialLoginReqVO();
authSocialLoginReqVO.setCode(socialUserDO.getCode());
authSocialLoginReqVO.setType(socialUserDO.getType());
authSocialLoginReqVO.setState(socialUserDO.getState());
authSocialLoginReqVO.setOpenid(socialUserDO.getOpenid());
AuthLoginRespVO authLoginRespVO = authService.socialLogin(authSocialLoginReqVO);
//TODO 判断用户类型和审核状态 内部用户并且已经审核通过的用户才能登录
if(ObjUtil.isNotEmpty(authLoginRespVO)){
stringRedisTemplate.delete(reqVO.getCode());
return success(authLoginRespVO);

24
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/bigviewdata/BigViewDataController.java

@ -1,7 +1,8 @@
package cn.iocoder.yudao.module.system.controller.admin.bigviewdata;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.system.controller.admin.bigviewdata.vo.BigViewGroupCountCompareVO;
import cn.iocoder.yudao.module.system.controller.admin.bigviewdata.vo.*;
import cn.iocoder.yudao.module.system.controller.admin.enterprise.vo.LabelValueLongVO;
import cn.iocoder.yudao.module.system.controller.admin.home.vo.EnterpriseNumVO;
import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeCountResVO;
import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeSelectVO;
@ -19,9 +20,6 @@ import java.util.List;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import cn.iocoder.yudao.module.system.controller.admin.bigviewdata.vo.BigViewEnterpriseCountGroup;
import cn.iocoder.yudao.module.system.controller.admin.bigviewdata.vo.NameCountVO;
import cn.iocoder.yudao.module.system.controller.admin.bigviewdata.vo.StatusCountVO;
import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeGroupCountVO;
import cn.iocoder.yudao.module.system.service.bigviewdata.BigViewDataService;
@ -37,31 +35,37 @@ public class BigViewDataController {
@GetMapping("/getLeftFirst")
@Operation(summary = "大屏左一数据")
public CommonResult<List<NameCountVO>> leftFirst(HomeSelectVO homeSelectVO) {
public CommonResult<List<LeftFirstDataVO>> leftFirst(HomeSelectVO homeSelectVO) {
return success(bigViewDataService.getLeftFirst(homeSelectVO));
}
@GetMapping("/getLeftSecond")
@Operation(summary = "大屏左二数据")
public CommonResult<BigViewEnterpriseCountGroup> getLeftSecond(HomeSelectVO homeSelectVO) {
public CommonResult<List<LabelValueLongVO>> getLeftSecond(HomeSelectVO homeSelectVO) {
return success(bigViewDataService.getLeftSecond(homeSelectVO));
}
@GetMapping("/getLeftThird")
@Operation(summary = "大屏左三数据")
public CommonResult<List<HomeGroupCountVO>> getLeftThird(HomeSelectVO homeSelectVO) {
public CommonResult<List<LeftThirdDataVO>> getLeftThird(HomeSelectVO homeSelectVO) {
return success(bigViewDataService.getLeftThird(homeSelectVO));
}
@GetMapping("/getCenter")
@Operation(summary = "大屏中间总数统计")
public CommonResult<HomeCountResVO> getCenter(HomeSelectVO homeSelectVO) {
public CommonResult<BigViewCenterDataVO> getCenter(HomeSelectVO homeSelectVO) {
return success(bigViewDataService.getCenter(homeSelectVO));
}
@GetMapping("/getMapData")
@Operation(summary = "大屏中间总数统计")
public CommonResult<List<ReginCountVO>> getMapData(HomeSelectVO homeSelectVO) {
return success(bigViewDataService.getMapData(homeSelectVO));
}
@GetMapping("/getRightFirst")
@Operation(summary = "大屏右一数据")
public CommonResult<List<StatusCountVO>> getRightFist(HomeSelectVO homeSelectVO) {
public CommonResult<List<MonthTaskInspectionVO>> getRightFist(HomeSelectVO homeSelectVO) {
return success(bigViewDataService.getRightFist(homeSelectVO));
}
@ -73,7 +77,7 @@ public class BigViewDataController {
@GetMapping("/getRightThird")
@Operation(summary = "大屏右三数据")
public CommonResult<List<EnterpriseNumVO>> getRightThird(HomeSelectVO homeSelectVO) {
public CommonResult<List<RightThirdDataVO>> getRightThird(HomeSelectVO homeSelectVO) {
return success(bigViewDataService.getRightThird(homeSelectVO));
}

16
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/bigviewdata/vo/BigViewCenterDataVO.java

@ -0,0 +1,16 @@
package cn.iocoder.yudao.module.system.controller.admin.bigviewdata.vo;
import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeListVO;
import lombok.Data;
import java.util.List;
@Data
public class BigViewCenterDataVO {
private Long taskCount;
private Long inspectionsCount;
private Long enterpriseCount;
List<ReginCountVO> reginCountVOList;
}

10
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/bigviewdata/vo/LeftFirstDataVO.java

@ -0,0 +1,10 @@
package cn.iocoder.yudao.module.system.controller.admin.bigviewdata.vo;
import lombok.Data;
@Data
public class LeftFirstDataVO {
private String name;
private Long taskCount;
private Long enterpriseCount;
}

11
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/bigviewdata/vo/LeftThirdDataVO.java

@ -0,0 +1,11 @@
package cn.iocoder.yudao.module.system.controller.admin.bigviewdata.vo;
import lombok.Data;
@Data
public class LeftThirdDataVO {
private String name;
private double value;
private Long taskCount;
private Long enterpriseCount;
}

13
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/bigviewdata/vo/MonthTaskInspectionVO.java

@ -0,0 +1,13 @@
package cn.iocoder.yudao.module.system.controller.admin.bigviewdata.vo;
import lombok.Data;
@Data
public class MonthTaskInspectionVO {
//月份
private String name;
//任务数量
private Long taskCount;
//执法数量
private Long inspectionsCount;
}

21
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/bigviewdata/vo/ReginCountVO.java

@ -0,0 +1,21 @@
package cn.iocoder.yudao.module.system.controller.admin.bigviewdata.vo;
import lombok.Data;
@Data
public class ReginCountVO {
//区域名称
private String name;
//区域经纬度
private String location;
//企业数量占比
private Long enterpriseRate;
//任务数量占比
private Long taskRate;
//企业数量
private Long enterpriseCount;
//任务数量
private Long taskCount;
}

9
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/bigviewdata/vo/RightThirdDataVO.java

@ -0,0 +1,9 @@
package cn.iocoder.yudao.module.system.controller.admin.bigviewdata.vo;
import lombok.Data;
@Data
public class RightThirdDataVO {
private String name;
private String expiryDate;
}

9
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/bigviewdata/vo/TaskCountVO.java

@ -0,0 +1,9 @@
package cn.iocoder.yudao.module.system.controller.admin.bigviewdata.vo;
import lombok.Data;
@Data
public class TaskCountVO {
private Integer region;
private Long taskCount;
}

92
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/enterprise/EnterpriseController.java

@ -7,6 +7,7 @@ import cn.iocoder.yudao.module.infra.api.file.dto.InfraFileInfoDTO;
import cn.iocoder.yudao.module.system.controller.admin.qualification.vo.EnterpriseQualificationRespVO;
import cn.iocoder.yudao.module.system.controller.admin.taglibrary.vo.TagLibraryPageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.taglibrary.vo.TagLibraryRespVO;
import cn.iocoder.yudao.module.system.convert.enterprise.EnterpriseConvert;
import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
import cn.iocoder.yudao.module.system.dal.dataobject.enterpriseauditlog.EnterpriseAuditLogDO;
import cn.iocoder.yudao.module.system.dal.dataobject.enterprisetag.EnterpriseTagDO;
@ -78,8 +79,6 @@ public class EnterpriseController {
@Resource
private EnterpriseQualificationMapper enterpriseQualificationMapper;
@Resource
private EnterpriseAuditLogMapper enterpriseAuditLogMapper;
@Resource
private AdminUserService adminUserService;
@Resource
private TagLibraryService tagLibraryService;
@ -90,21 +89,18 @@ public class EnterpriseController {
@PostMapping("/create")
@Operation(summary = "创建企业")
// @PreAuthorize("@ss.hasPermission('system:enterprise:create')")
public CommonResult<Long> createEnterprise(@RequestBody EnterpriseSaveReqVO createReqVO) {
return success(enterpriseService.createEnterprise(createReqVO));
}
@PostMapping("/pccreate")
@Operation(summary = "PC端创建企业")
// @PreAuthorize("@ss.hasPermission('system:enterprise:create')")
public CommonResult<Long> pccreateEnterprise(@RequestBody EnterpriseSaveReqVO createReqVO) {
return success(enterpriseService.pccreateEnterprise(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新企业")
// @PreAuthorize("@ss.hasPermission('system:enterprise:update')")
public CommonResult<Boolean> updateEnterprise(@Valid @RequestBody EnterpriseSaveReqVO updateReqVO) {
enterpriseService.updateEnterprise(updateReqVO);
return success(true);
@ -112,7 +108,6 @@ public class EnterpriseController {
@PutMapping("/audit")
@Operation(summary = "企业审核")
// @PreAuthorize("@ss.hasPermission('system:enterprise:update')")
public CommonResult<Boolean> audit(@RequestParam("id") Long id) {
enterpriseService.auditEnterprise(id);
return success(true);
@ -127,10 +122,49 @@ public class EnterpriseController {
return success(true);
}
@GetMapping("/pcget")
@Operation(summary = "获得企业")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
public CommonResult<EnterpriseRespVO> getEnterpriseofPC(@RequestParam("id") Long id) {
EnterpriseDO bean = enterpriseService.getEnterprise(id);
EnterpriseRespVO enterprise= BeanUtils.toBean(bean, EnterpriseRespVO.class);
if (enterprise != null) {
LambdaQueryWrapper<FileInfoDO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(FileInfoDO::getDictType, EnterpriseServiceImpl.DEFAULT_DICT_TYPE);
wrapper.eq(FileInfoDO::getDictData, EnterpriseServiceImpl.DEFAULT_DICT_DATA_QY);
wrapper.eq(FileInfoDO::getUnitId, enterprise.getId());
final List<Long> collect = fileInfoMapper.selectList(wrapper).stream().map(res -> res.getInfraFileId()).collect(Collectors.toList());
if (!collect.isEmpty()) {
final List<InfraFileInfoDTO> list = fileApi.listFile(collect);
enterprise.setFiles(list);
}
// 获取标签
List<TagLibraryDO> tagLibraryDOS = tagLibraryService.listByEnterpriseId(enterprise.getId());
if (tagLibraryDOS != null) {
List<TagLibraryDO> tagLibraryDOS1 = tagLibraryService.listSetParentId(tagLibraryDOS);
enterprise.setTagObjList(tagLibraryDOS1);
} else {
// 处理 tagLibraryDOS 为 null 的情况,这里可以设置一个空列表
enterprise.setTagObjList(Collections.emptyList());
}
//通过userID获取专管人
if (enterprise.getUserId() != null) {
final AdminUserDO user = adminUserService.getUser(Long.valueOf(enterprise.getUserId()));
if (user != null) {
enterprise.setInviterName(user.getRealName());
}
}
}
return success(enterprise);
}
@GetMapping("/get")
@Operation(summary = "获得企业")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
// @PreAuthorize("@ss.hasPermission('system:enterprise:query')")
public CommonResult<EnterpriseRespVO> getEnterprise(@RequestParam("id") Long id) {
EnterpriseDO bean = enterpriseService.getEnterprise(id);
EnterpriseRespVO enterprise= BeanUtils.toBean(bean, EnterpriseRespVO.class);
@ -299,7 +333,6 @@ public class EnterpriseController {
labelValueVO.setLabel(tag.getTagName());
labelValueVO.setValue(tag.getParentId());
labelValueVOList.add(labelValueVO);
});
item.setTagListName(labelValueVOList);
@ -319,10 +352,47 @@ public class EnterpriseController {
public void exportEnterpriseExcel(@Valid EnterprisePageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<EnterpriseDO> list = enterpriseService.getEnterprisePage(pageReqVO).getList();
PageResult<EnterpriseDO> pageResult = enterpriseService.getEnterprisePage(pageReqVO);
pageResult.getList().forEach(item->{
final AdminUserDO user = adminUserService.getUser(Long.valueOf(item.getUserId()));
if (user != null) {
item.setInviterName(user.getRealName());
if (user.getDeptId() != null) {
final DeptDO dept = deptService.getDept(user.getDeptId());
if (dept!= null) {
item.setInviterNameDept(dept.getName());
}
}
}
final List<TagLibraryDO> tagLibraryDOS = tagLibraryService.listByEnterpriseId(item.getId());
if (tagLibraryDOS != null) {
List<LabelValueVO> labelValueVOList = new ArrayList<>();
tagLibraryDOS.forEach(tag->{
LabelValueVO labelValueVO = new LabelValueVO();
labelValueVO.setLabel(tag.getTagName());
labelValueVO.setValue(tag.getParentId());
labelValueVOList.add(labelValueVO);
});
item.setTagListName(labelValueVOList);
}
});
if (pageReqVO.getCreateDeptId() != null) {
//查出改部门下所有用户
List<Long> deptIds = new ArrayList<>();
deptIds.add(pageReqVO.getCreateDeptId());
final List<AdminUserDO> userList = adminUserService.getUserListByDeptIds(deptIds);
if (userList!= null && userList.size() > 0) {
List<Long> collect = userList.stream().map(item1 -> item1.getId()).collect(Collectors.toList());
final List<EnterpriseDO> collect1 = pageResult.getList().stream().filter(item -> collect.contains(item.getCreator())).collect(Collectors.toList());
}
}
// 导出 Excel
ExcelUtils.write(response, "企业.xls", "数据", EnterpriseRespVO.class,
BeanUtils.toBean(list, EnterpriseRespVO.class));
ExcelUtils.write(response, "企业.xls", "数据", EnterpriseExportVO.class,
EnterpriseConvert.INSTANCE.convertList(pageResult.getList()));
}
}

32
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/enterprise/vo/EnterpriseExportVO.java

@ -0,0 +1,32 @@
package cn.iocoder.yudao.module.system.controller.admin.enterprise.vo;
import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
import cn.iocoder.yudao.module.system.enums.DictTypeConstants;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
public class EnterpriseExportVO {
@Schema(description = "企业名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三")
@ExcelProperty("企业名称")
private String enterprisesName;
@Schema(description = "企业所属区域", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty(value = "企业所属区域", converter = DictConvert.class)
@DictFormat(DictTypeConstants.ENTERPRISE_AREA)
private String region;
@ExcelProperty(value = "行业类型")
private String type;
@Schema(description = "执法人员")
@ExcelProperty("执法人员")
private String inviterDeptAndName;
@Schema(description = "入驻时间")
@ExcelProperty("入驻时间")
private String time;
}

4
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/enterprise/vo/EnterprisePageReqVO.java

@ -27,8 +27,8 @@ public class EnterprisePageReqVO extends PageParam {
@Schema(description = "管辖人员ID", example = "30445")
private Long userId;
@Schema(description = "企业类型:1.大型、2.中型、3.小型、4.环保重点", example = "2")
private String type;
@Schema(description = "企业类型", example = "2")
private Long[] type;
@Schema(description = "是否已审核")
private Boolean isAudit;

1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/enterprise/vo/EnterpriseSaveReqVO.java

@ -43,7 +43,6 @@ public class EnterpriseSaveReqVO {
@Schema(description = "企业状态")
private Long enterprisesStatus;
@Schema(description = "环保负责人姓名", example = "张三")
private String contactName;

13
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/enterpriseinspections/EnterpriseInspectionsController.java

@ -81,7 +81,7 @@ public class EnterpriseInspectionsController {
@GetMapping("/get")
@Operation(summary = "获得企业检查记录表,用于记录与企业相关的环保检查信息。")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('system:enterprise-inspections:query')")
// @PreAuthorize("@ss.hasPermission('system:enterprise-inspections:query')")
public CommonResult<EnterpriseInspectionsRespVO> getEnterpriseInspections(@RequestParam("id") Long id) {
return success(enterpriseInspectionsService.getEnterpriseInspections(id));
}
@ -89,7 +89,7 @@ public class EnterpriseInspectionsController {
@GetMapping("/getEnterpriseInspectionsByTaskId")
@Operation(summary = "根据任务id查询自己偶发")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('system:enterprise-inspections:query')")
// @PreAuthorize("@ss.hasPermission('system:enterprise-inspections:query')")
public CommonResult<EnterpriseInspectionsRespVO> getEnterpriseInspectionsByTaskId(@RequestParam("id") Long id) {
return success(enterpriseInspectionsService.getEnterpriseInspections(id));
}
@ -102,6 +102,15 @@ public class EnterpriseInspectionsController {
return success(BeanUtils.toBean(pageResult, EnterpriseInspectionsRespVO.class));
}
@GetMapping("/inspectionsByEnterpriseId")
@Operation(summary = "获得企业检查记录表,用于记录与企业相关的环保检查信息。分页")
// @PreAuthorize("@ss.hasPermission('system:enterprise-inspections:query')")
public CommonResult<PageResult<InspectionByEnterpriseIdRespVO>> inspectionsByEnterpriseId(@Valid EnterpriseInspectionsPageReqVO pageReqVO) {
return success(enterpriseInspectionsService.inspectionsByEnterpriseId(pageReqVO));
}
//listByUserIdAndTaskName
@GetMapping("/getListByUserIdAndTaskName")
@Operation(summary = "PC端获得企业检查记录表,用于记录与企业相关的环保检查信息。分页")

16
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/enterpriseinspections/vo/InspectionByEnterpriseIdRespVO.java

@ -0,0 +1,16 @@
package cn.iocoder.yudao.module.system.controller.admin.enterpriseinspections.vo;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class InspectionByEnterpriseIdRespVO {
private Long taskId;
private String title;
private String inspectNames;
private Integer status;
private LocalDateTime time;
private Long inspectionsId;
}

15
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/enterpriseinspections/vo/InspectionByEnterpriseIdVO.java

@ -0,0 +1,15 @@
package cn.iocoder.yudao.module.system.controller.admin.enterpriseinspections.vo;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class InspectionByEnterpriseIdVO {
private Long taskId;
private String title;
private Long inspectionsId;
private Long logId;
private Integer status;
private LocalDateTime createTime;
}

9
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/fileInfo/FileInfoController.java

@ -62,6 +62,15 @@ public class FileInfoController {
return success(true);
}
@DeleteMapping("/deleteByInfraId")
@Operation(summary = "删除附件信息")
@Parameter(name = "id", description = "编号", required = true)
// @PreAuthorize("@ss.hasPermission('system:file-info:delete')")
public CommonResult<Boolean> deleteByInfraId(@RequestParam("id") Long id) throws Exception {
fileInfoService.deleteByInfraId(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得附件信息")
@Parameter(name = "id", description = "编号", required = true, example = "1024")

1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/home/vo/HomeCountResVO.java

@ -11,6 +11,7 @@ public class HomeCountResVO {
private Integer taskCount;
//执法总数
private Integer inspectionsCount;
//企业总数
private Integer enterpriseCount;
//总任务完成率

4
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/inspectionslog/InspectionsLogController.java

@ -101,7 +101,7 @@ public class InspectionsLogController {
@PostMapping("/inspectionsAudit")
@Operation(summary = "审核")
@PreAuthorize("@ss.hasPermission('system:enterpriseinspections:index')")
// @PreAuthorize("@ss.hasPermission('system:enterpriseinspections:index')")
public CommonResult<String> inspectionsAudit(@Valid @RequestBody InspectionsLogSaveReqVO createReqVO) {
log.info("createReqVO:{}", createReqVO);
inspectionsLogService.inspectionsAudit(createReqVO);
@ -125,7 +125,7 @@ public class InspectionsLogController {
@GetMapping("/list")
@Operation(summary = "pc端获得检查状态列表")
@PreAuthorize("@ss.hasPermission('system:inspections-log:query')")
// @PreAuthorize("@ss.hasPermission('system:inspections-log:query')")
public CommonResult<List<InspectionsLogRespVO>> getInspectionsLogList(@Valid InspectionsLogPageReqVO pageReqVO) {
List<InspectionsLogDO> list = inspectionsLogService.list(pageReqVO);

14
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/qualification/EnterpriseQualificationController.java

@ -84,6 +84,12 @@ public class EnterpriseQualificationController {
public CommonResult<EnterpriseQualificationRespVO> getEnterpriseQualification(@RequestParam("id") Long id) {
EnterpriseQualificationDO enterpriseQualification = enterpriseQualificationService.getEnterpriseQualification(id);
EnterpriseQualificationRespVO bean = BeanUtils.toBean(enterpriseQualification, EnterpriseQualificationRespVO.class);
if(enterpriseQualification.getEnterpriseId()!= null){
EnterpriseDO enterprise = enterpriseService.getEnterprise(Long.valueOf(enterpriseQualification.getEnterpriseId()));
if(enterprise!=null){
bean.setEnterpriseName(enterprise.getEnterprisesName());
}
}
List<InfraFileInfoDTO> fileList = fileInfoService.getFileList(EnterpriseServiceImpl.DEFAULT_DICT_TYPE, EnterpriseQualificationServiceImpl.DEFAULT_DICT_DATA_QYZZ, bean.getId().toString());
bean.setFiles(fileList);
return success(bean);
@ -94,16 +100,20 @@ public class EnterpriseQualificationController {
// @PreAuthorize("@ss.hasPermission('system:enterprise-qualification:query')")
public CommonResult<PageResult<EnterpriseQualificationRespVO>> getEnterpriseQualificationPage(EnterpriseQualificationPageReqVO pageReqVO) {
PageResult<EnterpriseQualificationDO> pageResult = enterpriseQualificationService.getEnterpriseQualificationPage(pageReqVO);
pageResult.getList().forEach(item->{
PageResult<EnterpriseQualificationRespVO> bean = BeanUtils.toBean(pageResult, EnterpriseQualificationRespVO.class);
bean.getList().forEach(item->{
if(item.getEnterpriseId()!= null){
EnterpriseDO enterprise = enterpriseService.getEnterprise(Long.valueOf(item.getEnterpriseId()));
if(enterprise!=null){
item.setEnterpriseName(enterprise.getEnterprisesName());
}
final List<InfraFileInfoDTO> fileList = fileInfoService.getFileList(644l, 3l, item.getId().toString());
item.setQualificationFiles(fileList);
}
});
PageResult<EnterpriseQualificationRespVO> bean = BeanUtils.toBean(pageResult, EnterpriseQualificationRespVO.class);
return success(bean);
}

1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/qualification/vo/EnterpriseQualificationPageReqVO.java

@ -25,7 +25,6 @@ public class EnterpriseQualificationPageReqVO extends PageParam {
@Schema(description = "企业名称", example = "28564")
private String enterpriseName;
@Schema(description = "资质名称,例如:排污许可证、环保合格证", example = "张三")
private String qualificationName;

3
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/qualification/vo/EnterpriseQualificationRespVO.java

@ -64,6 +64,9 @@ public class EnterpriseQualificationRespVO {
@Schema(description = "企业图片", example = "26433")
private List<InfraFileInfoDTO> files;
@Schema(description = "资质图片", example = "26433")
private List<InfraFileInfoDTO> qualificationFiles;
//资质状态
@TableField(exist = false)
private Integer status;

131
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/taskinfo/TaskInfoController.java

@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.system.controller.admin.taskinfo;
import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
import cn.iocoder.yudao.module.infra.api.file.dto.InfraFileInfoDTO;
import cn.iocoder.yudao.module.infra.api.job.JobApi;
import cn.iocoder.yudao.module.system.controller.admin.enterprise.vo.EnterprisePageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.enterprise.vo.LabelValueLongVO;
@ -10,6 +11,8 @@ import cn.iocoder.yudao.module.system.controller.admin.enterprise.vo.LabelValueV
import cn.iocoder.yudao.module.system.controller.admin.enterpriseinspections.vo.EnterpriseInspectionsPageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.enterpriseinspections.vo.EnterpriseInspectionsSaveReqVO;
import cn.iocoder.yudao.module.system.controller.admin.tasktag.vo.TaskTagPageReqVO;
import cn.iocoder.yudao.module.system.convert.taskInfo.TaskInfoConvert;
import cn.iocoder.yudao.module.system.convert.user.UserConvert;
import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
import cn.iocoder.yudao.module.system.dal.dataobject.enterprise.EnterpriseDO;
import cn.iocoder.yudao.module.system.dal.dataobject.enterpriseinspections.EnterpriseInspectionsDO;
@ -20,6 +23,7 @@ import cn.iocoder.yudao.module.system.dal.mysql.user.AdminUserMapper;
import cn.iocoder.yudao.module.system.service.dept.DeptService;
import cn.iocoder.yudao.module.system.service.enterprise.EnterpriseService;
import cn.iocoder.yudao.module.system.service.enterpriseinspections.EnterpriseInspectionsService;
import cn.iocoder.yudao.module.system.service.fileInfo.FileInfoService;
import cn.iocoder.yudao.module.system.service.taglibrary.TagLibraryService;
import cn.iocoder.yudao.module.system.service.tasktag.TaskTagService;
import cn.iocoder.yudao.module.system.service.user.AdminUserService;
@ -78,6 +82,13 @@ public class TaskInfoController {
private TagLibraryService tagLibraryService;
@Resource
private AdminUserMapper adminUserMapper;
@Resource
private FileInfoService fileInfoService;
//企业红头文件
public final static Long DEFAULT_DICT_DATA_QY = 4L;
public final static Long DEFAULT_DICT_TYPE = 644L;
@PostMapping("/create")
@Operation(summary = "创建任务表,用于存储所有的任务信息,任务可由不同用户创建并管理。")
@ -94,6 +105,14 @@ public class TaskInfoController {
return success("执行成功");
}
@PutMapping("/audit")
@Operation(summary = "审核任务")
@PreAuthorize("@ss.hasPermission('system:task-info:audit')")
public CommonResult<String> audit(@RequestParam("id") Long id) {
taskInfoService.audit(id);
return success("审核成功");
}
@PutMapping("/update")
@Operation(summary = "更新任务表,用于存储所有的任务信息,任务可由不同用户创建并管理。")
@PreAuthorize("@ss.hasPermission('system:task-info:update')")
@ -137,6 +156,24 @@ public class TaskInfoController {
@PreAuthorize("@ss.hasPermission('system:task-info:query')")
public CommonResult<TaskInfoRespVO> getTaskInfo(@RequestParam("id") Long id) {
TaskInfoDO taskInfo = taskInfoService.getTaskInfo(id);
//获取任务类型名称
if (taskInfo.getTaskType() != null) {
final TagLibraryDO tagLibrary = tagLibraryService.getTagLibrary(taskInfo.getTaskType());
if (tagLibrary != null) {
taskInfo.setTaskTypeName(tagLibrary.getTagName());
}
}
//发布部门
if (taskInfo.getCreator() != null) {
final Long userId = Long.valueOf(taskInfo.getCreator());
final DeptDO dept = deptService.getByUserId(userId);
if (dept != null) {
taskInfo.setDeptName(dept.getName());
}
}
//获取任务包含企业
EnterpriseInspectionsPageReqVO enterpriseInspectionsPageReqVO=new EnterpriseInspectionsPageReqVO();
enterpriseInspectionsPageReqVO.setTaskId(taskInfo.getId());
@ -146,6 +183,13 @@ public class TaskInfoController {
enterprisePageReqVO.setIds(longs);
List<EnterpriseDO> enterpriseIdes=enterpriseService.getEnterpriseList(enterprisePageReqVO);
TaskInfoRespVO bean = BeanUtils.toBean(taskInfo, TaskInfoRespVO.class);
//获取任务红头文件
final List<InfraFileInfoDTO> fileList = fileInfoService.getFileList(DEFAULT_DICT_TYPE, DEFAULT_DICT_DATA_QY, taskInfo.getId().toString());
if (!fileList.isEmpty()) {
bean.setFileList(fileList);
}
if (enterpriseIdes != null && enterpriseIdes.size() > 0) {
enterpriseIdes.forEach(item->{
// 企业标签
@ -159,25 +203,23 @@ public class TaskInfoController {
labelValueVO.setLabel(tag.getTagName());
labelValueVO.setValue(tag.getParentId());
labelValueVOList.add(labelValueVO);
});
//执法人员 执法人员所在部门
final Long userId = item.getUserId();
final AdminUserDO user = adminUserService.getUser(userId);
if (user != null) {
item.setInviterName(user.getRealName());
final Long deptId = user.getDeptId();
final DeptDO dept = deptService.getDept(deptId);
if (dept != null) {
item.setInviterNameDept(dept.getName());
}
}
item.setTagListName(labelValueVOList);
}
//执法人员 执法人员所在部门
final Long userId = item.getUserId();
final AdminUserDO user = adminUserService.getUser(userId);
if (user != null) {
item.setInviterName(user.getRealName());
final Long deptId = user.getDeptId();
final DeptDO dept = deptService.getDept(deptId);
if (dept != null) {
item.setInviterNameDept(dept.getName());
}
}
});
}
bean.setEnterpriseIdes(enterpriseIdes);
@ -188,9 +230,7 @@ public class TaskInfoController {
List<TaskTagDO> taskTagides=taskTagService.getTaskTagList(taskTagPageReqVO);
//企业标签
List<Long> taglongs = CollectionUtils.convertList(enterpriseInspectionsides, EnterpriseInspectionsDO::getEnterpriseId);
// List<Long> taglongs = CollectionUtils.convertList(enterpriseInspectionsides, EnterpriseInspectionsDO::getEnterpriseId);
bean.setTaskTagIdes(taskTagides);
@ -217,10 +257,17 @@ public class TaskInfoController {
final DeptDO dept = deptService.getDept(user.getDeptId());
taskInfo.setDeptName(dept.getName());
}
}
final TaskInfoRespVO bean = BeanUtils.toBean(taskInfo, TaskInfoRespVO.class);
//获取任务红头文件
final List<InfraFileInfoDTO> fileList = fileInfoService.getFileList(DEFAULT_DICT_TYPE, DEFAULT_DICT_DATA_QY, taskInfo.getId().toString());
if (!fileList.isEmpty()) {
bean.setFileList(fileList);
}
return success(BeanUtils.toBean(taskInfo, TaskInfoRespVO.class));
return success(bean);
}
@ -268,8 +315,6 @@ public class TaskInfoController {
}
}
return success(BeanUtils.toBean(pageResult, TaskInfoRespVO.class));
}
@ -298,19 +343,57 @@ public class TaskInfoController {
}
@GetMapping("/export-excel")
@Operation(summary = "导出任务表,用于存储所有的任务信息,任务可由不同用户创建并管理。 Excel")
@Operation(summary = "任务表. Excel")
@PreAuthorize("@ss.hasPermission('system:task-info:export')")
@ApiAccessLog(operateType = EXPORT)
public void exportTaskInfoExcel(@Valid TaskInfoPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<TaskInfoDO> list = taskInfoService.getTaskInfoPage(pageReqVO).getList();
EnterpriseInspectionsPageReqVO enterpriseInspectionsPageReqVO=new EnterpriseInspectionsPageReqVO();
list.forEach(item->{
final Long creator = Long.valueOf(item.getCreator());
AdminUserDO user = adminUserService.getUser(creator);
DeptDO dept= deptService.getDept(user.getDeptId());
if (dept != null) {
item.setDeptName(dept.getName());
}
final AdminUserDO user1 = adminUserService.getUser(Long.valueOf(item.getCreator()));
if (user1 != null) {
item.setCreateName(user1.getRealName());
}
enterpriseInspectionsPageReqVO.setTaskId(item.getId());
List<EnterpriseInspectionsDO> enterpriseInspectionsides=enterpriseInspectionsService.getEnterpriseInspectionsList(enterpriseInspectionsPageReqVO);
EnterprisePageReqVO enterprisePageReqVO=new EnterprisePageReqVO();
List<Long> longs = CollectionUtils.convertList(enterpriseInspectionsides, EnterpriseInspectionsDO::getEnterpriseId);
enterprisePageReqVO.setIds(longs);
List<EnterpriseDO> enterpriseIdes=enterpriseService.getEnterpriseList(enterprisePageReqVO);
item.setEnterpriseIdes(enterpriseIdes);
item.setTaskTypeName(tagLibraryService.getTagLibrary(Integer.valueOf(item.getTaskType())).getTagName());
});
//按发布部门查询
if (pageReqVO.getDeptId()!= null) {
List<Long> deptIds = new ArrayList<>();
deptIds.add(pageReqVO.getDeptId());
final List<AdminUserDO> userListByDeptIds = adminUserService.getUserListByDeptIds(deptIds);
if (!userListByDeptIds.isEmpty()) {
List<Long> longs = CollectionUtils.convertList(userListByDeptIds, AdminUserDO::getId);
list = list.stream().filter(item -> longs.contains(Long.valueOf(item.getCreator()))).collect(Collectors.toList());
}
}
final List<TaskInfoRespExcelVO> taskInfoRespExcelVOS = TaskInfoConvert.INSTANCE.convertList(list);
// 导出 Excel
ExcelUtils.write(response, "任务表,用于存储所有的任务信息,任务可由不同用户创建并管理。.xls", "数据", TaskInfoRespVO.class,
BeanUtils.toBean(list, TaskInfoRespVO.class));
ExcelUtils.write(response, "任务表.xls", "数据", TaskInfoRespExcelVO.class,
taskInfoRespExcelVOS);
}
// UserConvert.INSTANCE.convertList(list, deptMap)
@GetMapping("/testInsertUserArea")
@Operation(summary = "获得任务表,用于存储所有的任务信息,任务可由不同用户创建并管理。分页")

44
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/taskinfo/vo/TaskInfoRespExcelVO.java

@ -0,0 +1,44 @@
package cn.iocoder.yudao.module.system.controller.admin.taskinfo.vo;
import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
import cn.iocoder.yudao.module.system.enums.DictTypeConstants;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
public class TaskInfoRespExcelVO {
@Schema(description = "任务标题", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("任务标题")
private String title;
@Schema(description = "任务类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
@ExcelProperty(value = "任务类型", converter = DictConvert.class)
@DictFormat(DictTypeConstants.TASK_TYPE_EXCEL)
private Integer taskType;
@Schema(description = "发布部门")
@ExcelProperty("发布部门")
private String deptName;
// @Schema(description = "用户性别,参见 SexEnum 枚举类", example = "1")
// @ExcelProperty(value = "用户性别", converter = DictConvert.class)
// @DictFormat(DictTypeConstants.USER_SEX)
// private Integer sex;
@Schema(description = "任务状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
@ExcelProperty(value = "任务状态", converter = DictConvert.class)
@DictFormat(DictTypeConstants.TASK_STATE)
private String status;
@Schema(description = "执法对象", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
@ExcelProperty("执法对象")
private String inspectionsObject;
@Schema(description = "执行时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
@ExcelProperty("执行时间")
private String time;
}

10
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/taskinfo/vo/TaskInfoRespVO.java

@ -1,10 +1,11 @@
package cn.iocoder.yudao.module.system.controller.admin.taskinfo.vo;
import cn.iocoder.yudao.module.infra.api.file.dto.InfraFileInfoDTO;
import cn.iocoder.yudao.module.system.dal.dataobject.enterprise.EnterpriseDO;
import cn.iocoder.yudao.module.system.dal.dataobject.enterpriseinspections.EnterpriseInspectionsDO;
import cn.iocoder.yudao.module.system.dal.dataobject.taglibrary.TagLibraryDO;
import cn.iocoder.yudao.module.system.dal.dataobject.tasktag.TaskTagDO;
import com.baomidou.mybatisplus.annotation.TableField;
import cn.iocoder.yudao.module.system.enums.DictTypeConstants;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
@ -15,7 +16,6 @@ import lombok.*;
import java.time.LocalDate;
import java.util.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*;
import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
@ -27,14 +27,12 @@ import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
public class TaskInfoRespVO {
@Schema(description = "任务ID,主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "4541")
@ExcelProperty("任务ID,主键")
private Long id;
private Integer reverseStauts;
//任务编号
@Schema(description = "任务编号", example = "你猜")
@ExcelProperty("任务编号")
private String taskNumber;
@Schema(description = "任务标题", requiredMode = Schema.RequiredMode.REQUIRED)
@ -54,7 +52,6 @@ public class TaskInfoRespVO {
@DictFormat("task_type") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
private Integer taskType;
@Schema(description = "任务优先级", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("任务优先级")
private Integer priority;
@ -146,4 +143,7 @@ public class TaskInfoRespVO {
//任务类型名称
private String taskTypeName;
//文件列表
private List<InfraFileInfoDTO> fileList;
}

3
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/taskinfo/vo/TaskInfoSaveReqVO.java

@ -84,4 +84,7 @@ public class TaskInfoSaveReqVO {
@Schema(defaultValue = "企业集合")
private List<Long> enterpriseIds;
@Schema(description = "文件id", example = "26433")
private Long[] fileIds;
}

39
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserController.java

@ -13,9 +13,13 @@ import cn.iocoder.yudao.module.system.convert.user.UserConvert;
import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
import cn.iocoder.yudao.module.system.dal.dataobject.userAuditlog.UserAuditLogDO;
import cn.iocoder.yudao.module.system.dal.mysql.permission.UserRoleMapper;
import cn.iocoder.yudao.module.system.dal.mysql.userAuditlog.UserAuditLogMapper;
import cn.iocoder.yudao.module.system.enums.common.SexEnum;
import cn.iocoder.yudao.module.system.service.dept.DeptService;
import cn.iocoder.yudao.module.system.service.permission.PermissionService;
import cn.iocoder.yudao.module.system.service.permission.RoleService;
import cn.iocoder.yudao.module.system.service.taglibrary.TagLibraryService;
import cn.iocoder.yudao.module.system.service.user.AdminUserService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import io.swagger.v3.oas.annotations.Operation;
@ -34,6 +38,7 @@ import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Set;
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@ -49,8 +54,11 @@ public class UserController {
private AdminUserService userService;
@Resource
private DeptService deptService;
@Resource
private PermissionService permissionService;
@Resource
private UserAuditLogMapper userAuditLogMapper;
private TagLibraryService tagLibraryService;
@PostMapping("/create")
@Operation(summary = "新增用户")
@ -107,23 +115,19 @@ public class UserController {
@PreAuthorize("@ss.hasPermission('system:user:query')")
public CommonResult<PageResult<UserRespVO>> getUserPage(@Valid UserPageReqVO pageReqVO) {
// 获得用户分页列表
PageResult<AdminUserDO> pageResult = userService.getUserPage(pageReqVO);
if (CollUtil.isEmpty(pageResult.getList())) {
return success(new PageResult<>(pageResult.getTotal()));
}
pageResult.getList().forEach(item->{
if (item.getAudit() == 3) {
LambdaQueryWrapper<UserAuditLogDO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(UserAuditLogDO::getUserId, item.getId());
wrapper.orderByDesc(UserAuditLogDO::getCreateTime);
wrapper.last("limit 1");
UserAuditLogDO userAuditLogDO = userAuditLogMapper.selectOne(wrapper);
item.setContent(userAuditLogDO.getContent());
final List<String> roleListByUserId = permissionService.getRoleListByUserId(item.getId());
if (!roleListByUserId.isEmpty()) {
item.setRoleList(String.join(",", roleListByUserId));
}
});
// 拼接数据
Map<Long, DeptDO> deptMap = deptService.getDeptMap(
convertList(pageResult.getList(), AdminUserDO::getDeptId));
@ -180,7 +184,8 @@ public class UserController {
}
// 拼接数据
DeptDO dept = deptService.getDept(user.getDeptId());
return success(UserConvert.INSTANCE.convert(user, dept));
final List<Long> roleIdListByUserId = permissionService.getRoleIdListByUserId(user.getId());
return success(UserConvert.INSTANCE.convert(user, dept, roleIdListByUserId));
}
@GetMapping("/export")
@ -194,8 +199,16 @@ public class UserController {
// 输出 Excel
Map<Long, DeptDO> deptMap = deptService.getDeptMap(
convertList(list, AdminUserDO::getDeptId));
ExcelUtils.write(response, "用户数据.xls", "数据", UserRespVO.class,
UserConvert.INSTANCE.convertList(list, deptMap));
list.stream().forEach(item-> {
final List<String> roleListByUserId = permissionService.getRoleListByUserId(item.getId());
if (!roleListByUserId.isEmpty()) {
item.setRoleList(String.join(",", roleListByUserId));
}
});
ExcelUtils.write(response, "用户数据.xls", "数据", UserExportVO.class,
UserConvert.INSTANCE.convertList2(list, deptMap));
}
@GetMapping("/get-import-template")
@ -233,7 +246,7 @@ public class UserController {
return success(true);
}
@PutMapping("/enterprise_manager_list")
@GetMapping("/enterprise_manager_list")
@Operation(summary = "专管员列表,邀请过企业的都是专管员")
public CommonResult<List<UserDeptVO>> enterpriseManagerList() {
return success(userService.enterpriseManagerList());

2
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserDeptVO.java

@ -6,5 +6,5 @@ import lombok.Data;
public class UserDeptVO {
private Long userId;
private String realName;
private Long deptName;
private String deptName;
}

49
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserExportVO.java

@ -0,0 +1,49 @@
package cn.iocoder.yudao.module.system.controller.admin.user.vo.user;
import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
import cn.iocoder.yudao.module.system.enums.DictTypeConstants;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class UserExportVO {
@Schema(description = "真实姓名", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")
@ExcelProperty("真实姓名")
private String realName;
@Schema(description = "用户性别,参见 SexEnum 枚举类", example = "1")
@ExcelProperty(value = "用户性别", converter = DictConvert.class)
@DictFormat(DictTypeConstants.USER_SEX)
private Integer sex;
@Schema(description = "手机号码", example = "15601691300")
@ExcelProperty("手机号码")
private String mobile;
@Schema(description = "部门名称", example = "IT 部")
@ExcelProperty("部门名称")
private String deptName;
@Schema(description = "职位权限", example = "IT 部")
@ExcelProperty("职位权限")
private String roleList;
@Schema(description = "状态,参见 CommonStatusEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@ExcelProperty(value = "帐号状态", converter = DictConvert.class)
@DictFormat(DictTypeConstants.USER_AUDIT_TYPE)
private Integer audit;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "时间戳格式")
@ExcelProperty("创建时间")
private LocalDateTime createTime;
@Schema(description = "最后登录时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "时间戳格式")
@ExcelProperty("最后登录时间")
private LocalDateTime loginDate;
}

2
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserPageReqVO.java

@ -19,7 +19,7 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
@EqualsAndHashCode(callSuper = true)
public class UserPageReqVO extends PageParam {
@Schema(description = "用户账号,模糊匹配", example = "yudao")
@Schema(description = "真实姓名,模糊匹配", example = "yudao")
private String username;
@Schema(description = "真实姓名,模糊匹配", example = "张三")

7
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserRespVO.java

@ -9,6 +9,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Set;
@Schema(description = "管理后台 - 用户信息 Response VO")
@ -84,4 +85,10 @@ public class UserRespVO{
@Schema(description = "用户类型", example = "1")
private Integer userType;
@Schema(description = "职位", example = "1")
private String roleList;
@Schema(description = "职位id列表", example = "1")
private List<Long> roleIds;
}

11
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserSaveReqVO.java

@ -34,6 +34,11 @@ public class UserSaveReqVO {
@DiffLogField(name = "用户昵称")
private String nickname;
@Schema(description = "真实姓名", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")
@Size(max = 30, message = "用户昵称长度不能超过30个字符")
@DiffLogField(name = "真实姓名")
private String realName;
@Schema(description = "备注", example = "我是一个用户")
@DiffLogField(name = "备注")
private String remark;
@ -49,6 +54,12 @@ public class UserSaveReqVO {
@DiffLogField(name = "岗位", function = PostParseFunction.NAME)
private Set<Long> postIds;
@Schema(description = "职位id列表", example = "1")
private Set<Long> roleIds;
@Schema(description = "审核", example = "1")
private Integer audit;
@Schema(description = "用户邮箱", example = "yudao@iocoder.cn")
@Email(message = "邮箱格式不正确")
@Size(max = 50, message = "邮箱长度不能超过 50 个字符")

37
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/convert/enterprise/EnterpriseConvert.java

@ -0,0 +1,37 @@
package cn.iocoder.yudao.module.system.convert.enterprise;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.system.controller.admin.enterprise.vo.EnterpriseExportVO;
import cn.iocoder.yudao.module.system.dal.dataobject.enterprise.EnterpriseDO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
@Mapper
public interface EnterpriseConvert {
EnterpriseConvert INSTANCE = Mappers.getMapper(EnterpriseConvert.class);
default List<EnterpriseExportVO> convertList(List<EnterpriseDO> list) {
List<EnterpriseExportVO> enterpriseExportVOS = new ArrayList<>();
if (!list.isEmpty()) {
list.forEach(item-> {
EnterpriseExportVO enterpriseExportVO = new EnterpriseExportVO();
BeanUtils.copyProperties(item,enterpriseExportVO);
if (item.getTagListName() != null) {
final Set<String> collect = item.getTagListName().stream().map(tag -> tag.getLabel()).collect(Collectors.toSet());
enterpriseExportVO.setType(String.join("," , collect));
}
enterpriseExportVO.setInviterDeptAndName(item.getInviterName() +" | "+ item.getInviterNameDept());
enterpriseExportVO.setTime(item.getCreateTime().toString());
enterpriseExportVOS.add(enterpriseExportVO);
});
}
return enterpriseExportVOS;
}
}

34
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/convert/taskInfo/TaskInfoConvert.java

@ -0,0 +1,34 @@
package cn.iocoder.yudao.module.system.convert.taskInfo;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.system.controller.admin.taskinfo.vo.TaskInfoRespExcelVO;
import cn.iocoder.yudao.module.system.dal.dataobject.taskinfo.TaskInfoDO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import java.util.ArrayList;
import java.util.List;
@Mapper
public interface TaskInfoConvert {
TaskInfoConvert INSTANCE = Mappers.getMapper(TaskInfoConvert.class);
default List<TaskInfoRespExcelVO> convertList(List<TaskInfoDO> list) {
List<TaskInfoRespExcelVO> taskInfoRespExcelVOS = new ArrayList<>();
if (!list.isEmpty()) {
list.forEach(item->{
TaskInfoRespExcelVO taskInfoRespExcelVO = new TaskInfoRespExcelVO();
BeanUtils.copyProperties(item,taskInfoRespExcelVO);
final long count = item.getEnterpriseIdes().stream().map(enterpriseDO -> enterpriseDO.getType()).distinct().count();
taskInfoRespExcelVO.setInspectionsObject(count + " 个区域, " + item.getEnterpriseIdes().size() + " 家企业");
taskInfoRespExcelVO.setTime(item.getStartDate().toString() + item.getExecCycle());
taskInfoRespExcelVOS.add(taskInfoRespExcelVO);
});
}
return taskInfoRespExcelVOS;
}
}

36
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/convert/user/UserConvert.java

@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.system.convert.user;
import cn.hutool.core.bean.BeanUtil;
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
@ -7,6 +8,7 @@ import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptSimpleRe
import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostSimpleRespVO;
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleSimpleRespVO;
import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileRespVO;
import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserExportVO;
import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserRespVO;
import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserSimpleRespVO;
import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
@ -14,9 +16,12 @@ import cn.iocoder.yudao.module.system.dal.dataobject.dept.PostDO;
import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO;
import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialUserDO;
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
import cn.iocoder.yudao.module.system.service.permission.PermissionService;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@ -25,10 +30,27 @@ public interface UserConvert {
UserConvert INSTANCE = Mappers.getMapper(UserConvert.class);
default List<UserRespVO> convertList(List<AdminUserDO> list, Map<Long, DeptDO> deptMap) {
return CollectionUtils.convertList(list, user -> convert(user, deptMap.get(user.getDeptId())));
}
default List<UserExportVO> convertList2(List<AdminUserDO> list, Map<Long, DeptDO> deptMap) {
List<UserRespVO> userRespVOS = CollectionUtils.convertList(list, user -> {
DeptDO dept = deptMap.get(user.getDeptId());
return convert(user, dept); // 确保convert能处理dept为null的情况
});
List<UserExportVO> userExportVOs = new ArrayList<>();
for (UserRespVO respVO : userRespVOS) {
UserExportVO exportVO = new UserExportVO();
BeanUtil.copyProperties(respVO, exportVO);
userExportVOs.add(exportVO);
}
return userExportVOs;
}
default UserRespVO convert(AdminUserDO user, DeptDO dept) {
UserRespVO userVO = BeanUtils.toBean(user, UserRespVO.class);
if (dept != null) {
@ -37,6 +59,20 @@ public interface UserConvert {
return userVO;
}
default UserRespVO convert(AdminUserDO user, DeptDO dept, List<Long> roleIds) {
UserRespVO userVO = BeanUtils.toBean(user, UserRespVO.class);
if (dept != null) {
userVO.setDeptName(dept.getName());
}
if (roleIds != null) {
userVO.setRoleIds(roleIds);
}
return userVO;
}
default List<UserSimpleRespVO> convertSimpleList(List<AdminUserDO> list, Map<Long, DeptDO> deptMap) {
return CollectionUtils.convertList(list, user -> {
UserSimpleRespVO userVO = BeanUtils.toBean(user, UserSimpleRespVO.class);

2
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/airqualitycollection/QualityCollectionDO.java

@ -36,6 +36,8 @@ public class QualityCollectionDO extends BaseDO {
* 城市
*/
private String city;
private String time;
/**
* 数据类型
*

3
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/enterprise/EnterpriseDO.java

@ -110,4 +110,7 @@ public class EnterpriseDO extends BaseDO {
@TableField(exist = false)
private List<LabelValueVO> tagListName;
@TableField(exist = false)
private Long count;
}

4
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/taskinfo/TaskInfoDO.java

@ -58,7 +58,6 @@ public class TaskInfoDO extends BaseDO {
*/
private Integer taskType;
/**
* 任务优先级
*/
@ -126,4 +125,7 @@ public class TaskInfoDO extends BaseDO {
@TableField(exist = false)
private Long inspectionsId;
@TableField(exist = false)
private Long count;
}

10
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/user/AdminUserDO.java

@ -112,8 +112,14 @@ public class AdminUserDO extends TenantBaseDO {
//审核状态
private Integer audit;
//审核状态
//角色名称合集
@TableField(exist = false)
private String roleList;
//审核名称
@TableField(exist = false)
private String content;
private String auditName;
}

21
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/airqualitycollection/QualityCollectionMapper.java

@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.system.dal.mysql.airqualitycollection;
import java.text.SimpleDateFormat;
import java.util.*;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
@ -18,21 +19,37 @@ import cn.iocoder.yudao.module.system.controller.admin.airqualitycollection.vo.*
public interface QualityCollectionMapper extends BaseMapperX<QualityCollectionDO> {
default PageResult<QualityCollectionDO> selectPage(QualityCollectionPageReqVO reqVO) {
if (reqVO.getTimes() == null) {
String[] times = new String[2];
// 获取当前日期
Calendar calendar = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
times[1] = sdf.format(calendar.getTime());
calendar.set(Calendar.MONTH, Calendar.JANUARY);
calendar.set(Calendar.DAY_OF_MONTH, 1);
times[0] = sdf.format(calendar.getTime());
reqVO.setTimes(times);
}
return selectPage(reqVO, new LambdaQueryWrapperX<QualityCollectionDO>()
.likeIfPresent(QualityCollectionDO::getSiteName, reqVO.getSiteName())
.eqIfPresent(QualityCollectionDO::getCity, reqVO.getCity())
.eqIfPresent(QualityCollectionDO::getType, reqVO.getType())
.eqIfPresent(QualityCollectionDO::getPm25, reqVO.getPm25())
.eqIfPresent(QualityCollectionDO::getPm10, reqVO.getPm10())
.eqIfPresent(QualityCollectionDO::getSo2, reqVO.getSo2())
.eqIfPresent(QualityCollectionDO::getNo2, reqVO.getNo2())
.eqIfPresent(QualityCollectionDO::getNo, reqVO.getNo())
.eqIfPresent(QualityCollectionDO::getNox, reqVO.getNOx())
.eqIfPresent(QualityCollectionDO::getNox, reqVO.getNox())
.eqIfPresent(QualityCollectionDO::getCo, reqVO.getCo())
.eqIfPresent(QualityCollectionDO::getO3, reqVO.getO3())
.eqIfPresent(QualityCollectionDO::getRemark, reqVO.getRemark())
.eqIfPresent(QualityCollectionDO::getRemark2, reqVO.getRemark2())
.betweenIfPresent(QualityCollectionDO::getCreateTime, reqVO.getCreateTime())
.apply(reqVO.getType() == 2, "DATE_FORMAT(time, '%i') = '00'")
.apply(reqVO.getTimes() != null && reqVO.getTimes().length >= 2, "DATE_FORMAT(time, '%Y-%m-%d %H:%i:%s') >= {0}", reqVO.getTimes()[0])
.apply(reqVO.getTimes() != null && reqVO.getTimes().length >= 2,"DATE_FORMAT(time, '%Y-%m-%d %H:%i:%s') <= {0}", reqVO.getTimes()[1])
.orderByDesc(QualityCollectionDO::getId));
}

19
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/bigviewdata/BigViewDataMapper.java

@ -1,9 +1,7 @@
package cn.iocoder.yudao.module.system.dal.mysql.bigviewdata;
import cn.iocoder.yudao.module.system.controller.admin.bigviewdata.vo.BigViewGroupCountCompareVO;
import cn.iocoder.yudao.module.system.controller.admin.bigviewdata.vo.BigViewQOQVO;
import cn.iocoder.yudao.module.system.controller.admin.bigviewdata.vo.NameCountVO;
import cn.iocoder.yudao.module.system.controller.admin.bigviewdata.vo.StatusCountVO;
import cn.iocoder.yudao.module.system.controller.admin.bigviewdata.vo.*;
import cn.iocoder.yudao.module.system.controller.admin.home.vo.EnterpriseNumVO;
import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeSelectVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Options;
@ -25,16 +23,21 @@ public interface BigViewDataMapper {
/*
根据任务类型分组
*/
List<NameCountVO> selectTaskTypeGroupCount(HomeSelectVO homeSelectVO);
List<LeftFirstDataVO> selectTaskTypeGroupCount(HomeSelectVO homeSelectVO);
/*
执法和任务分组统计
执法和任务分组统计`
*/
List<StatusCountVO> getInspectionsTaskGroupCount(HomeSelectVO homeSelectVO);
List<MonthTaskInspectionVO> getInspectionsTaskGroupCount(HomeSelectVO homeSelectVO);
/*
执法和任务分组统计同比
*/
List<BigViewGroupCountCompareVO> getInspectionsTaskGroupCountCompare(BigViewQOQVO bigViewQOQVO);
List<BigViewGroupCountCompareVO> getInspectionsTaskGroupCountCompare();
//区域内任务统计
List<TaskCountVO> getTaskCount(HomeSelectVO homeSelectVO);
List<RightThirdDataVO> getRightThird(HomeSelectVO homeSelectVO);
}

1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/enterprise/EnterpriseMapper.java

@ -28,7 +28,6 @@ public interface EnterpriseMapper extends BaseMapperX<EnterpriseDO> {
return selectPage(reqVO, new LambdaQueryWrapperX<EnterpriseDO>()
.eqIfPresent(EnterpriseDO::getDepartmentId, reqVO.getDepartmentId())
.eqIfPresent(EnterpriseDO::getUserId, reqVO.getUserId())
.eqIfPresent(EnterpriseDO::getType, reqVO.getType())
.eqIfPresent(EnterpriseDO::getRegion, reqVO.getRegion())
.likeIfPresent(EnterpriseDO::getEnterprisesName, reqVO.getEnterprisesName())
.eqIfPresent(EnterpriseDO::getAddress, reqVO.getAddress())

7
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/enterpriseinspections/EnterpriseInspectionsMapper.java

@ -6,8 +6,13 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.system.dal.dataobject.enterpriseinspections.EnterpriseInspectionsDO;
import cn.iocoder.yudao.module.system.dal.dataobject.inspectionslog.InspectionsLogDO;
import cn.iocoder.yudao.module.system.dal.dataobject.taskinfo.TaskInfoDO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper;
import cn.iocoder.yudao.module.system.controller.admin.enterpriseinspections.vo.*;
import org.apache.ibatis.annotations.Param;
/**
* 企业检查记录表用于记录与企业相关的环保检查信息 Mapper
@ -52,5 +57,7 @@ public interface EnterpriseInspectionsMapper extends BaseMapperX<EnterpriseInspe
//整改数据
List<EnterpriseInspectionsCorrectionVO> inspectionsCorrectionList();
//整改数据
IPage<InspectionByEnterpriseIdVO> inspectionsByEnterpriseId(Page<InspectionsLogDO> page, @Param("params") EnterpriseInspectionsPageReqVO pageReqVO);
}

2
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/UserRoleMapper.java

@ -4,9 +4,11 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.system.dal.dataobject.permission.UserRoleDO;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.Collection;
import java.util.List;
import java.util.Set;
@Mapper
public interface UserRoleMapper extends BaseMapperX<UserRoleDO> {

2
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/AdminUserMapper.java

@ -39,6 +39,8 @@ public interface AdminUserMapper extends BaseMapperX<AdminUserDO> {
.inIfPresent(AdminUserDO::getId, userIds)
.inIfPresent(AdminUserDO::getAudit, reqVO.getAudit())
.inIfPresent(AdminUserDO::getUserType, reqVO.getUserType())
.isNotNull(AdminUserDO::getAudit)
.isNotNull(AdminUserDO::getRealName)
.orderByDesc(AdminUserDO::getId));
}

4
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/job/InspectionsSendStartMessageJob.java

@ -67,7 +67,7 @@ public class InspectionsSendStartMessageJob implements JobHandler {
Map<String, Object> templateParams = new HashMap<>();
templateParams.put("title", enterpriseService.getEnterprise(item.getEnterpriseId()).getEnterprisesName());
templateParams.put("endTime", DateUtil.format(inspectionsLogNew.getCorrectionTime(), DateUtils.FORMAT_YEAR_MONTH_DAY));
templateParams.put("url", "/sub/task/record?taskId="+item.getTaskId() +"&recordId=" + item.getEnterpriseId() +"&enterpriseId=" + item.getEnterpriseId());
templateParams.put("url", "sub/task/record?taskId="+item.getTaskId() +"&recordId=" + item.getEnterpriseId() +"&enterpriseId=" + item.getEnterpriseId());
notifyMessage.setTemplateParams(templateParams);
notifyMessageSendApi.sendSingleMessageToAdmin(notifyMessage);
@ -77,7 +77,7 @@ public class InspectionsSendStartMessageJob implements JobHandler {
SocialWxaSubscribeMessageSendReqDTO reqDTO = new SocialWxaSubscribeMessageSendReqDTO();
reqDTO.setUserType(1);
reqDTO.setTemplateTitle("问题整改通知");
reqDTO.setPage("sub/inspection/detail?id=" + item.getInspectionsId());
reqDTO.setPage("/sub/inspection/detail?id=" + item.getInspectionsId());
reqDTO.setUserId(Long.valueOf(item.getCreator()));
Map<String, String> message = new HashMap<>();
message.put("thing5", enterprise.getEnterprisesName());

8
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/job/QualificationTimeOutSendStartMessageJob.java

@ -53,18 +53,19 @@ public class QualificationTimeOutSendStartMessageJob implements JobHandler {
if (item.getEnterpriseName() != null && item.getExpiryDate() != null) {
SocialWxaSubscribeMessageSendReqDTO reqDTO = new SocialWxaSubscribeMessageSendReqDTO();
reqDTO.setUserType(1);
reqDTO.setTemplateTitle("证书到期通知");
reqDTO.setTemplateTitle("资质临期提醒");
reqDTO.setPage("sub/enterprise/detail?id="+item.getEnterpriseId());
reqDTO.setUserId(item.getUserId());
Map<String, String> message = new HashMap<>();
message.put("thing1", StringUtil.truncateString(enterpriseQua.getLabel(), 15));
message.put("thing2", StringUtil.truncateString(item.getEnterpriseName(), 15));
message.put("time4", DateUtil.format(item.getExpiryDate(), DateUtils.FORMAT_YEAR_MONTH_DAY));
message.put("phrase3", "到期");
message.put("time3", DateUtil.format(item.getExpiryDate(), DateUtils.FORMAT_YEAR_MONTH_DAY));
reqDTO.setMessages(message);
socialClientApi.sendWxaSubscribeMessage(reqDTO);
}
//TODO 给企业用户发送消息
}
catch (Exception e){
log.error("任务发送通知错误:",e.toString());
@ -82,7 +83,6 @@ public class QualificationTimeOutSendStartMessageJob implements JobHandler {
notifyMessageSendApi.sendSingleMessageToAdmin(notifyMessage);
});
}
return "发送整个信息成功";
}
}

6
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/job/TaskSendStartMessageJob.java

@ -59,9 +59,9 @@ public class TaskSendStartMessageJob implements JobHandler {
reqDTO.setUserId(x.getUserId());
Map<String, String> message = new HashMap<>();
message.put("thing2", StringUtil.truncateString(beforeTaskInfo.getTitle(), 15));
message.put("time3", DateUtil.format(beforeTaskInfo.getStartDate().atStartOfDay(), DateUtils.FORMAT_YEAR_MONTH_DAY));
message.put("time5", DateUtil.format(beforeTaskInfo.getStartDate().atStartOfDay(), DateUtils.FORMAT_YEAR_MONTH_DAY));
message.put("thing4", StringUtil.truncateString(beforeTaskInfo.getDescription(), 15));
message.put("time5", DateUtil.format(beforeTaskInfo.getEndDate().atStartOfDay(), DateUtils.FORMAT_YEAR_MONTH_DAY));
message.put("time3", DateUtil.format(beforeTaskInfo.getEndDate().atStartOfDay(), DateUtils.FORMAT_YEAR_MONTH_DAY));
reqDTO.setMessages(message);
socialClientApi.sendWxaSubscribeMessage(reqDTO);
}
@ -89,7 +89,7 @@ public class TaskSendStartMessageJob implements JobHandler {
templateParams.put("title", beforeTaskInfo.getTitle());
templateParams.put("startTime", DateUtil.format(beforeTaskInfo.getStartDate().atStartOfDay(), DateUtils.FORMAT_YEAR_MONTH_DAY));
templateParams.put("endTime", DateUtil.format(beforeTaskInfo.getEndDate().atStartOfDay(), DateUtils.FORMAT_YEAR_MONTH_DAY) );
templateParams.put("url", "sub/task/detail?id="+ enterpriseInspectionsDO.getTaskId());
templateParams.put("url", "/sub/task/detail?id="+ enterpriseInspectionsDO.getTaskId());
notifyMessage.setTemplateParams(templateParams);
notifyMessageSendApi.sendSingleMessageToAdmin(notifyMessage);

4
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/airqualitycollection/QualityCollectionService.java

@ -53,5 +53,7 @@ public interface QualityCollectionService {
*/
PageResult<QualityCollectionDO> getQualityCollectionPage(QualityCollectionPageReqVO pageReqVO);
void saveList(List<QualityCollectionExcelVO> list, Long type);
void saveList(List<QualityCollectionExcelVO> list);
QualityCollectionDO latest();
}

131
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/airqualitycollection/QualityCollectionServiceImpl.java

@ -1,10 +1,19 @@
package cn.iocoder.yudao.module.system.service.airqualitycollection;
import cn.iocoder.yudao.module.system.dal.dataobject.taskinfo.TaskInfoDO;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import cn.iocoder.yudao.module.system.controller.admin.airqualitycollection.vo.*;
import cn.iocoder.yudao.module.system.dal.dataobject.airqualitycollection.QualityCollectionDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
@ -69,22 +78,120 @@ public class QualityCollectionServiceImpl implements QualityCollectionService {
@Override
public PageResult<QualityCollectionDO> getQualityCollectionPage(QualityCollectionPageReqVO pageReqVO) {
return qualityCollectionMapper.selectPage(pageReqVO);
if (pageReqVO.getType() == 1 || pageReqVO.getType() == 2) {
return qualityCollectionMapper.selectPage(pageReqVO);
}
QueryWrapper<QualityCollectionDO> wrapper = new QueryWrapper<>();
wrapper.select(
getTimeExpression(pageReqVO.getType()) + " as time",
"ROUND(AVG(pm25), 1) as pm25",
"ROUND(AVG(pm10), 1) as pm10",
"ROUND(AVG(so2), 1) as so2",
"ROUND(AVG(no2), 1) as no2",
"ROUND(AVG(no), 1) as no",
"ROUND(AVG(nox), 1) as nox",
"ROUND(AVG(co), 1) as co",
"ROUND(AVG(03), 1) as o3",
"site_name as siteName"
);
wrapper.like(pageReqVO.getSiteName() != null,"site_name", pageReqVO.getSiteName());
wrapper.groupBy(getTimeExpression(pageReqVO.getType()), "site_name");
if (pageReqVO.getTimes() != null && pageReqVO.getTimes().length >= 2) {
wrapper.apply("DATE_FORMAT(time, '%Y-%m-%d %H:%i:%s') >= {0}", pageReqVO.getTimes()[0]);
wrapper.apply("DATE_FORMAT(time, '%Y-%m-%d %H:%i:%s') <= {0}", pageReqVO.getTimes()[1]);
}
wrapper.orderByAsc("time");
// 执行分页查询(关键变更点)
Page<QualityCollectionDO> page = new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize());
IPage<QualityCollectionDO> iPage = qualityCollectionMapper.selectPage(page, wrapper);
return new PageResult<>(iPage.getRecords(), iPage.getTotal());
}
private String getTimeExpression(Integer type) {
switch (type) {
case 3:
return "DATE(time)";
case 4:
return "DATE_SUB(\n" +
" STR_TO_DATE(CONCAT(YEARWEEK(time, 3), ' Monday'), '%X%V %W'), \n" +
" INTERVAL WEEKDAY(STR_TO_DATE(CONCAT(YEARWEEK(time, 3), ' Monday'), '%X%V %W')) DAY\n" +
" )";
case 5:
return "DATE_FORMAT(time, '%Y-%m')";
case 6:
return "CONCAT(YEAR(time), '-', QUARTER(time))";
case 7:
return "YEAR(time)";
default:
throw new IllegalArgumentException("无效的时间粒度");
}
}
@Override
@Transactional(rollbackFor = Exception.class) // 添加事务控制
public void saveList(List<QualityCollectionExcelVO> list) {
if (CollectionUtils.isEmpty(list)) return;
// 1. 提取所有待校验的 (siteName + time) 组合
Set<String> uniqueKeys = list.stream()
.map(vo -> vo.getSiteName() + "|" + vo.getTime())
.collect(Collectors.toSet());
// 2. 批量查询已存在的记录 (一次查询代替N次查询)
QueryWrapper<QualityCollectionDO> wrapper = new QueryWrapper<>();
wrapper.select("site_name", "time");
wrapper.in(
"CONCAT(site_name, '|', time)",
uniqueKeys.stream().collect(Collectors.toList())
);
List<QualityCollectionDO> existList = qualityCollectionMapper.selectList(wrapper);
// 3. 构建已存在的唯一键缓存
Set<String> existKeys = existList.stream().map(item -> item.getSiteName() + "|" + item.getTime()).collect(Collectors.toSet());
//数据清洗
final List<QualityCollectionExcelVO> collect = list.stream()
.filter(vo -> isValidNumber(vo.getPm25()) && isValidNumber(vo.getPm10()) && isValidNumber(vo.getSo2()) && isValidNumber(vo.getNo2()) && isValidNumber(vo.getNo()) && isValidNumber(vo.getNox()) && isValidNumber(vo.getCo()) && isValidNumber(vo.getO3()))
.collect(Collectors.toList());
// 4. 过滤出需要插入的新数据
List<QualityCollectionDO> newDataList = collect.stream()
.filter(vo -> !existKeys.contains(vo.getSiteName() + "|" + vo.getTime()) )
.map(vo -> {
QualityCollectionDO entity = new QualityCollectionDO();
BeanUtils.copyProperties(vo, entity);
return entity;
})
.collect(Collectors.toList());
// 5. 批量插入新数据
if (!CollectionUtils.isEmpty(newDataList)) {
qualityCollectionMapper.insertBatch(newDataList);
}
}
@Override
public void saveList(List<QualityCollectionExcelVO> list, Long type) {
List<QualityCollectionDO> collectionDOS = new ArrayList<>();
if (!list.isEmpty()) {
list.forEach(item->{
QualityCollectionDO collectionDO = new QualityCollectionDO();
collectionDO.setType(type);
BeanUtils.copyProperties(item, collectionDO);
collectionDOS.add(collectionDO);
});
qualityCollectionMapper.insertBatch(collectionDOS);
public QualityCollectionDO latest() {
LambdaQueryWrapper<QualityCollectionDO> wrapper = new LambdaQueryWrapper<>();
// 按时间降序排序后,限制只取第一条
wrapper.orderByDesc(QualityCollectionDO::getTime)
.last("LIMIT 1"); // 关键:强制只返回一条数据
return qualityCollectionMapper.selectOne(wrapper); // 使用 selectOne()
}
private final Pattern NUMBER_PATTERN =
Pattern.compile("^-?\\d+(\\.\\d+)?$");
public boolean isValidNumber(String str) {
if (str == null || str.trim().isEmpty()) {
return false;
}
return NUMBER_PATTERN.matcher(str).matches();
}
}

34
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java

@ -136,7 +136,7 @@ public class AdminAuthServiceImpl implements AdminAuthService {
// 如果 socialType 非空,说明需要绑定社交用户
if (reqVO.getSocialType() != null) {
socialUserService.bindSocialUser(new SocialUserBindReqDTO(user.getId(), getUserType().getValue(),
reqVO.getSocialType(), reqVO.getSocialCode(), reqVO.getSocialState()));
reqVO.getSocialType(), reqVO.getSocialCode(), reqVO.getSocialState()));
}
// 创建 Token 令牌,记录登录日志
return createTokenAfterLoginSuccess(user.getId(), reqVO.getUsername(), LoginLogTypeEnum.LOGIN_USERNAME);
@ -190,7 +190,7 @@ public class AdminAuthServiceImpl implements AdminAuthService {
public AuthLoginRespVO socialLogin(AuthSocialLoginReqVO reqVO) {
// 使用 code 授权码,进行登录。然后,获得到绑定的用户编号
SocialUserRespDTO socialUser = socialUserService.getSocialUserByCode(UserTypeEnum.MEMBER.getValue(), reqVO.getType(),
reqVO.getCode(), reqVO.getState());
reqVO.getCode(), reqVO.getState());
if (socialUser == null || socialUser.getUserId() == null) {
throw exception(AUTH_THIRD_LOGIN_NOT_BIND);
}
@ -201,6 +201,11 @@ public class AdminAuthServiceImpl implements AdminAuthService {
throw exception(USER_NOT_EXISTS);
}
if (user.getUserType() != 3 || user.getAudit() != 2) {
throw exception(USER_LOGIN_ERROR);
}
// 创建 Token 令牌,记录登录日志
return createTokenAfterLoginSuccess(user.getId(), user.getUsername(), LoginLogTypeEnum.LOGIN_SOCIAL);
}
@ -229,7 +234,7 @@ public class AdminAuthServiceImpl implements AdminAuthService {
createLoginLog(userId, username, logType, LoginResultEnum.SUCCESS);
// 创建访问令牌
OAuth2AccessTokenDO accessTokenDO = oauth2TokenService.createAccessToken(userId, getUserType().getValue(),
OAuth2ClientConstants.CLIENT_ID_DEFAULT, null);
OAuth2ClientConstants.CLIENT_ID_DEFAULT, null);
// 构建返回结果
return AuthConvert.INSTANCE.convert(accessTokenDO);
}
@ -325,15 +330,6 @@ public class AdminAuthServiceImpl implements AdminAuthService {
AdminUserDO user = null;
if (socialUserDO == null ) {
// String userInfoUrl = "https://api.weixin.qq.com/sns/userinfo" +
// "?access_token=" + authUser.getToken() +
// "&openid=" + authUser.getUuid() +
// "&lang=zh_CN";
// String userInfoResponse = HttpUtil.get(userInfoUrl);
// JSONObject userInfoJson = JSONUtil.parseObj(userInfoResponse);
// String nickname = userInfoJson.getStr("nickname");
// 未找到社交用户,插入记录
SocialUserDO socialUser = new SocialUserDO();
socialUser.setType(reqVO.getType());
@ -368,9 +364,7 @@ public class AdminAuthServiceImpl implements AdminAuthService {
if (user == null) {
throw exception(USER_NOT_EXISTS);
}
user.setIsBand(true);
}
return user;
@ -394,10 +388,10 @@ public class AdminAuthServiceImpl implements AdminAuthService {
AuthUser authUser = socialClientService.getAuthUser(
SocialTypeEnum.WECHAT_MINI_APP.getType(),
UserTypeEnum.MEMBER.getValue(), // 假设用户类型为会员
reqVO.getCode(),
reqVO.getState()
SocialTypeEnum.WECHAT_MINI_APP.getType(),
UserTypeEnum.MEMBER.getValue(), // 假设用户类型为会员
reqVO.getCode(),
reqVO.getState()
);
@ -422,8 +416,8 @@ public class AdminAuthServiceImpl implements AdminAuthService {
// 根据授权码获取 access_token 和 openid
//
String baseUrl = "https://api.weixin.qq.com/sns/oauth2/access_token";
String urlStr = baseUrl + "?appid=" + APPID + "&secret=" + APPSECRET + "&code=" + reqVO.getCode()+ "&grant_type=authorization_code";
String baseUrl = "https://api.weixin.qq.com/sns/oauth2/access_token";
String urlStr = baseUrl + "?appid=" + APPID + "&secret=" + APPSECRET + "&code=" + reqVO.getCode()+ "&grant_type=authorization_code";
System.out.println("-----------urlStr:"+urlStr);

20
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/bigviewdata/BigViewDataService.java

@ -1,9 +1,7 @@
package cn.iocoder.yudao.module.system.service.bigviewdata;
import cn.iocoder.yudao.module.system.controller.admin.bigviewdata.vo.BigViewEnterpriseCountGroup;
import cn.iocoder.yudao.module.system.controller.admin.bigviewdata.vo.BigViewGroupCountCompareVO;
import cn.iocoder.yudao.module.system.controller.admin.bigviewdata.vo.NameCountVO;
import cn.iocoder.yudao.module.system.controller.admin.bigviewdata.vo.StatusCountVO;
import cn.iocoder.yudao.module.system.controller.admin.bigviewdata.vo.*;
import cn.iocoder.yudao.module.system.controller.admin.enterprise.vo.LabelValueLongVO;
import cn.iocoder.yudao.module.system.controller.admin.home.vo.EnterpriseNumVO;
import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeCountResVO;
import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeGroupCountVO;
@ -13,19 +11,21 @@ import java.util.List;
public interface BigViewDataService {
BigViewEnterpriseCountGroup getLeftSecond(HomeSelectVO homeSelectVO);
List<LabelValueLongVO> getLeftSecond(HomeSelectVO homeSelectVO);
List<HomeGroupCountVO> getLeftThird(HomeSelectVO homeSelectVO);
List<LeftThirdDataVO> getLeftThird(HomeSelectVO homeSelectVO);
List<StatusCountVO> getRightFist(HomeSelectVO homeSelectVO);
List<MonthTaskInspectionVO> getRightFist(HomeSelectVO homeSelectVO);
List<NameCountVO> getRightSecond(HomeSelectVO homeSelectVO);
List<EnterpriseNumVO> getRightThird(HomeSelectVO homeSelectVO);
List<RightThirdDataVO> getRightThird(HomeSelectVO homeSelectVO);
List<NameCountVO> getLeftFirst(HomeSelectVO homeSelectVO);
List<LeftFirstDataVO> getLeftFirst(HomeSelectVO homeSelectVO);
List<BigViewGroupCountCompareVO> getRightFourth(HomeSelectVO homeSelectVO);
HomeCountResVO getCenter(HomeSelectVO homeSelectVO);
BigViewCenterDataVO getCenter(HomeSelectVO homeSelectVO);
List<ReginCountVO> getMapData(HomeSelectVO homeSelectVO);
}

336
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/bigviewdata/BigViewDataServiceImpl.java

@ -1,20 +1,44 @@
package cn.iocoder.yudao.module.system.service.bigviewdata;
import cn.iocoder.yudao.module.system.controller.admin.bigviewdata.vo.*;
import cn.iocoder.yudao.module.system.controller.admin.enterprise.vo.EnterprisePageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.enterprise.vo.LabelValueLongVO;
import cn.iocoder.yudao.module.system.controller.admin.home.vo.EnterpriseNumVO;
import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeCountResVO;
import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeGroupCountVO;
import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeSelectVO;
import cn.iocoder.yudao.module.system.controller.admin.taskinfo.vo.TaskInfoPageReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictDataDO;
import cn.iocoder.yudao.module.system.dal.dataobject.enterprise.EnterpriseDO;
import cn.iocoder.yudao.module.system.dal.dataobject.enterpriseinspections.EnterpriseInspectionsDO;
import cn.iocoder.yudao.module.system.dal.dataobject.qualification.EnterpriseQualificationDO;
import cn.iocoder.yudao.module.system.dal.dataobject.taglibrary.TagLibraryDO;
import cn.iocoder.yudao.module.system.dal.dataobject.taskinfo.TaskInfoDO;
import cn.iocoder.yudao.module.system.dal.mysql.bigviewdata.BigViewDataMapper;
import cn.iocoder.yudao.module.system.dal.mysql.enterprise.EnterpriseMapper;
import cn.iocoder.yudao.module.system.dal.mysql.enterpriseinspections.EnterpriseInspectionsMapper;
import cn.iocoder.yudao.module.system.dal.mysql.qualification.EnterpriseQualificationMapper;
import cn.iocoder.yudao.module.system.dal.mysql.taskinfo.TaskInfoMapper;
import cn.iocoder.yudao.module.system.service.dict.DictDataService;
import cn.iocoder.yudao.module.system.service.enterprise.EnterpriseService;
import cn.iocoder.yudao.module.system.service.enterpriseinspections.EnterpriseInspectionsService;
import cn.iocoder.yudao.module.system.service.home.HomeService;
import cn.iocoder.yudao.module.system.service.taglibrary.TagLibraryService;
import cn.iocoder.yudao.module.system.service.taskinfo.TaskInfoService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.time.LocalTime;
import java.time.temporal.TemporalAdjusters;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.stream.Collectors;
@Service
@Slf4j
@ -26,80 +50,281 @@ public class BigViewDataServiceImpl implements BigViewDataService {
private TaskInfoMapper taskInfoMapper;
@Resource
private HomeService homeService;
@Resource
private DictDataService dictDataService;
@Resource
private EnterpriseMapper enterpriseMapper;
@Resource
private EnterpriseInspectionsMapper enterpriseInspectionsMapper;
@Resource
private TagLibraryService tagLibraryService;
@Override
public List<NameCountVO> getLeftFirst(HomeSelectVO homeSelectVO) {
public List<LeftFirstDataVO> getLeftFirst(HomeSelectVO homeSelectVO) {
return bigViewDataMapper.selectTaskTypeGroupCount(homeSelectVO);
}
@Override
public List<BigViewGroupCountCompareVO> getRightFourth(HomeSelectVO homeSelectVO) {
//时间范围
// LocalDateTime startTime = LocalDateTime.now().minusMonths(1);
// LocalDateTime endTime = LocalDateTime.now();
// homeSelectVO.setStartTime(startTime);
// homeSelectVO.setEndTime(endTime);
//
BigViewQOQVO bigViewQOQVO = new BigViewQOQVO();
LocalDate today = LocalDate.now();
bigViewQOQVO.setCurrentStartTime(today.withDayOfMonth(1).toString());
bigViewQOQVO.setCurrentEndTime(today.toString());
bigViewQOQVO.setPreviousStartTime(today.withDayOfMonth(1).minusMonths(1).toString());
bigViewQOQVO.setPreviousEndTime(today.minusMonths(1).toString());
return bigViewDataMapper.getInspectionsTaskGroupCountCompare(bigViewQOQVO);
return bigViewDataMapper.getInspectionsTaskGroupCountCompare();
}
//企业数量
public Long getEnterpriseCount(HomeSelectVO homeSelectVO) {
QueryWrapper<EnterpriseDO> wrapper = new QueryWrapper<>();
wrapper.gt("status", 1);
if (homeSelectVO.getSelectWeek() != null) {
final LocalDateTime[] week = this.getWeek(homeSelectVO);
wrapper.between("create_time", week[0], week[1]);
}
return enterpriseMapper.selectCount();
}
//任务数量
public Long getTaskCount(HomeSelectVO homeSelectVO) {
QueryWrapper<TaskInfoDO> wrapper = new QueryWrapper<>();
wrapper.gt("status", 1);
if (homeSelectVO.getSelectWeek() != null) {
final LocalDateTime[] week = this.getWeek(homeSelectVO);
wrapper.between("start_date", week[0], week[1]);
}
return taskInfoMapper.selectCount(wrapper);
}
//执法数量
public Long getTaskInspection(HomeSelectVO homeSelectVO) {
QueryWrapper<EnterpriseInspectionsDO> wrapper = new QueryWrapper<>();
wrapper.gt("status", 1);
if (homeSelectVO.getSelectWeek() != null) {
final LocalDateTime[] week = this.getWeek(homeSelectVO);
wrapper.between("create_time", week[0], week[1]);
}
return enterpriseInspectionsMapper.selectCount();
}
@Override
public HomeCountResVO getCenter(HomeSelectVO homeSelectVO) {
return homeService.appCount1(homeSelectVO);
public BigViewCenterDataVO getCenter(HomeSelectVO homeSelectVO) {
BigViewCenterDataVO result = new BigViewCenterDataVO();
result.setEnterpriseCount(this.getEnterpriseCount(homeSelectVO));
result.setTaskCount(this.getTaskCount(homeSelectVO));
result.setInspectionsCount(this.getTaskInspection(homeSelectVO));
return result;
}
@Override
public BigViewEnterpriseCountGroup getLeftSecond(HomeSelectVO homeSelectVO) {
BigViewEnterpriseCountGroup enterpriseCountGroup = new BigViewEnterpriseCountGroup();
final List<NameCountVO> nameCountVOS = bigViewDataMapper.enterpriseCountGroup(homeSelectVO);
enterpriseCountGroup.setEnterpriseCountGroup(nameCountVOS);
List<Integer> countList = new ArrayList<>();
if (nameCountVOS != null) {
nameCountVOS.forEach(item->{
countList.add(item.getValue());
});
public List<ReginCountVO> getMapData(HomeSelectVO homeSelectVO) {
BigViewCenterDataVO result = new BigViewCenterDataVO();
// 1. 并行获取基础统计数据
final BigViewCenterDataVO center = this.getCenter(homeSelectVO);
// 2. 获取字典数据和区域统计
List<DictDataDO> regions = dictDataService.getDictDataListByDictType("enterprises_area");
// 3. 获取企业区域分布
QueryWrapper<EnterpriseDO> enterpriseDOQueryWrapper = new QueryWrapper<>();
enterpriseDOQueryWrapper.select("region", "count(id) as count");
enterpriseDOQueryWrapper.groupBy("region");
if (homeSelectVO.getSelectWeek() != null) {
final LocalDateTime[] week = this.getWeek(homeSelectVO);
homeSelectVO.setTime(week);
enterpriseDOQueryWrapper.between("create_time", week[0], week[1]);
}
final Integer count = countList.stream().reduce(Integer::sum).orElse(0);
enterpriseCountGroup.setEnterpriseCount(count);
return enterpriseCountGroup;
Map<String, Long> enterpriseRegionMap = enterpriseMapper.selectList(enterpriseDOQueryWrapper).stream().collect(Collectors.toMap(
EnterpriseDO::getRegion,
EnterpriseDO::getCount,
(v1, v2) -> v1
));
List<TaskCountVO> taskCounts = bigViewDataMapper.getTaskCount(homeSelectVO);
try {
// 4. 设置基础数据
Long enterpriseCount = center.getEnterpriseCount();
Long taskCount = center.getTaskCount();
Long inspectionsCount = center.getInspectionsCount();
result.setEnterpriseCount(enterpriseCount);
result.setTaskCount(taskCount);
result.setInspectionsCount(inspectionsCount);
// 5. 计算区域比率
List<ReginCountVO> regionStats = regions.stream().map(region -> {
ReginCountVO vo = new ReginCountVO();
vo.setName(region.getLabel());
vo.setLocation(region.getRemark());
vo.setEnterpriseRate(0l);
vo.setTaskRate(0l);
vo.setTaskCount(0l);
vo.setEnterpriseCount(0l);
// 计算任务比率
taskCounts.stream()
.filter(t -> region.getValue().equals(t.getRegion().toString()))
.findFirst()
.ifPresent(t -> {
if (t.getTaskCount() > 0 && taskCount > 0) {
// 计算原始比率(如 45.6)
double rawRate = (double) t.getTaskCount() / taskCount * 100;
// 四舍五入到整数
long roundedRate = Math.round(rawRate);
vo.setTaskRate(roundedRate);
vo.setTaskCount(t.getTaskCount());
} else {
// 处理无效值(根据业务需求设置默认值)
vo.setTaskRate(0l);
vo.setTaskCount(0l);
}
});
// 计算企业比率
Optional.ofNullable(enterpriseRegionMap.get(region.getValue()))
.ifPresent(count -> {
if (count > 0 && enterpriseCount > 0) {
// 计算原始比率(如 45.6)
double rawRate = (double) count / enterpriseCount * 100;
// 四舍五入到整数
long roundedRate = Math.round(rawRate);
vo.setEnterpriseRate(roundedRate);
vo.setEnterpriseCount(count);
} else {
// 处理无效值(根据业务需求设置默认值)
vo.setEnterpriseRate(0l);
vo.setEnterpriseCount(0L);
}
});
return vo;
}).collect(Collectors.toList());
result.setReginCountVOList(regionStats);
} catch (Exception e) {
Thread.currentThread().interrupt();
throw new RuntimeException("数据获取失败", e);
}
return result.getReginCountVOList();
}
// @Override
// public BigViewEnterpriseCountGroup getLeftSecond(HomeSelectVO homeSelectVO) {
// BigViewEnterpriseCountGroup enterpriseCountGroup = new BigViewEnterpriseCountGroup();
// final List<NameCountVO> nameCountVOS = bigViewDataMapper.enterpriseCountGroup(homeSelectVO);
// enterpriseCountGroup.setEnterpriseCountGroup(nameCountVOS);
// List<Integer> countList = new ArrayList<>();
// if (nameCountVOS != null) {
// nameCountVOS.forEach(item->{
// countList.add(item.getValue());
// });
// }
// final Integer count = countList.stream().reduce(Integer::sum).orElse(0);
// enterpriseCountGroup.setEnterpriseCount(count);
//
// return enterpriseCountGroup;
// }
@Override
public List<LabelValueLongVO> getLeftSecond(HomeSelectVO homeSelectVO) {
// 1. 获取标签库子项(父ID硬编码可改为动态参数)
List<TagLibraryDO> tagLibraries = tagLibraryService.childrenList(26L);
// 2. 查询任务统计结果并转换为Map: taskType -> count
Map<Integer, Long> taskTypeCountMap = taskInfoMapper.selectList(
new QueryWrapper<TaskInfoDO>()
.select("task_type AS taskType", "COUNT(*) AS count") // 优化COUNT(id)为COUNT(*)
.gt("status", 1)
.groupBy("task_type")
).stream()
.collect(Collectors.toMap(
TaskInfoDO::getTaskType,
task -> task.getCount() != null ? task.getCount() : 0L, // 处理空值
(oldVal, newVal) -> oldVal // 合并冲突策略(按需调整)
));
// 3. 合并标签与统计结果生成VO
List<LabelValueLongVO> resultList = new ArrayList<>();
for (TagLibraryDO tag : tagLibraries) {
LabelValueLongVO vo = new LabelValueLongVO();
vo.setLabel(tag.getTagName());
// 直接通过Map获取统计值,避免双重循环(O(1)查找)
vo.setValue(taskTypeCountMap.getOrDefault(tag.getId(), 0L));
resultList.add(vo);
}
return resultList;
}
@Override
public List<HomeGroupCountVO> getLeftThird(HomeSelectVO homeSelectVO) {
return taskInfoMapper.selectHomeGroupCount(homeSelectVO);
public List<LeftThirdDataVO> getLeftThird(HomeSelectVO homeSelectVO) {
List<LeftThirdDataVO> thirdDataVOS = new ArrayList<>();
final List<ReginCountVO> mapData = this.getMapData(homeSelectVO);
mapData.forEach(item->{
LeftThirdDataVO leftThirdDataVO = new LeftThirdDataVO();
leftThirdDataVO.setName(item.getName());
if (item.getTaskCount() == 0 || item.getEnterpriseCount() == 0 ) {
leftThirdDataVO.setValue(0.0);
} else {
final double value = (double)item.getTaskCount() / item.getEnterpriseCount() * 100;
leftThirdDataVO.setValue(Math.round(value * 10) / 10.0);
}
leftThirdDataVO.setEnterpriseCount(item.getEnterpriseCount());
leftThirdDataVO.setTaskCount(item.getTaskCount());
thirdDataVOS.add(leftThirdDataVO);
});
List<LeftThirdDataVO> top5 = thirdDataVOS.stream()
.sorted(Comparator.comparingDouble(LeftThirdDataVO::getTaskCount).reversed()) // 降序排序
.limit(5) // 取前五
.collect(Collectors.toList());
return top5;
}
@Override
public List<StatusCountVO> getRightFist(HomeSelectVO homeSelectVO) {
public List<MonthTaskInspectionVO> getRightFist(HomeSelectVO homeSelectVO) {
return bigViewDataMapper.getInspectionsTaskGroupCount(homeSelectVO);
}
public LocalDateTime[] getWeek(HomeSelectVO homeSelectVO) {
if (homeSelectVO.getSelectWeek() != null) {
LocalDateTime[] time = new LocalDateTime[2];
switch (homeSelectVO.getSelectWeek()) {
case 1:
time[0] = LocalDateTime.now().minusDays(7);
break;
case 2:
time[0] = LocalDateTime.now().minusMonths(1);
break;
case 3:
time[0] = LocalDateTime.now().minusYears(1);
break;
}
time[1] = LocalDateTime.now();
homeSelectVO.setTime(time);
}
if (homeSelectVO.getSelectWeek() != null) {
LocalDateTime[] range = new LocalDateTime[2];
LocalDateTime now = LocalDateTime.now();
switch (homeSelectVO.getSelectWeek()) {
case 3: // 本周
range[0] = now.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY))
.with(LocalTime.MIN); // 本周一 00:00
range[1] = now.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY))
.with(LocalTime.MAX); // 本周日 23:59:59.999999999
break;
case 2: // 本月
range[0] = now.withDayOfMonth(1)
.with(LocalTime.MIN); // 本月第一天 00:00
range[1] = now.with(TemporalAdjusters.lastDayOfMonth())
.with(LocalTime.MAX); // 本月最后一天 23:59:59.999999999
break;
case 1: // 本年
range[0] = now.withDayOfYear(1)
.with(LocalTime.MIN); // 本年第一天 00:00
range[1] = now.with(TemporalAdjusters.lastDayOfYear())
.with(LocalTime.MAX); // 本年最后一天 23:59:59.999999999
break;
default:
throw new IllegalArgumentException("无效的时间范围类型");
}
homeSelectVO.setTime(range);
}
return homeSelectVO.getTime();
}
@ -127,8 +352,13 @@ public class BigViewDataServiceImpl implements BigViewDataService {
}
@Override
public List<EnterpriseNumVO> getRightThird(HomeSelectVO homeSelectVO) {
homeSelectVO.setType(1);
return homeService.appCount2(homeSelectVO);
public List<RightThirdDataVO> getRightThird(HomeSelectVO homeSelectVO) {
if (homeSelectVO.getSelectWeek() != null) {
final LocalDateTime[] week = this.getWeek(homeSelectVO);
homeSelectVO.setTime(week);
}
return bigViewDataMapper.getRightThird(homeSelectVO);
}
}

10
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java

@ -13,6 +13,7 @@ import cn.iocoder.yudao.module.system.dal.mysql.dept.DeptMapper;
import cn.iocoder.yudao.module.system.dal.mysql.user.AdminUserMapper;
import cn.iocoder.yudao.module.system.dal.redis.RedisKeyConstants;
import cn.iocoder.yudao.module.system.service.user.AdminUserService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.google.common.annotations.VisibleForTesting;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cache.annotation.CacheEvict;
@ -102,6 +103,15 @@ public class DeptServiceImpl implements DeptService {
if (dept == null) {
throw exception(DEPT_NOT_FOUND);
}
//检查是否由用户在这个部门,有则不能删除
QueryWrapper<AdminUserDO> wrapper = new QueryWrapper<>();
wrapper.eq("dept_id", id);
final List<AdminUserDO> adminUserDOS = adminUserMapper.selectList(wrapper);
if (!adminUserDOS.isEmpty()) {
throw exception(DEPT_USER_ERROR);
}
}
@VisibleForTesting

54
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/enterprise/EnterpriseServiceImpl.java

@ -121,7 +121,6 @@ public class EnterpriseServiceImpl implements EnterpriseService {
//修改企业用户的审核状态为 审核中 新增企业审核表
EnterpriseAuditLogDO enterpriseAuditLogDO = new EnterpriseAuditLogDO();
enterpriseAuditLogDO.setEnterpriseId(enterprise.getId());
enterpriseAuditLogDO.setAudit(1);
enterpriseAuditLogMapper.insert(enterpriseAuditLogDO);
//用户表修改用户真实姓名和手机号
@ -203,6 +202,7 @@ public class EnterpriseServiceImpl implements EnterpriseService {
createReqVO.setDeptId(user.getDeptId());
EnterpriseDO enterprise = BeanUtils.toBean(createReqVO, EnterpriseDO.class);
enterprise.setDepartmentId(createReqVO.getDeptId());
enterprise.setIsAudit(true);
enterpriseMapper.insert(enterprise);
if (createReqVO.getFileIds() != null && createReqVO.getFileIds().length > 0) {
for (Long fileId : createReqVO.getFileIds()) {
@ -231,6 +231,7 @@ public class EnterpriseServiceImpl implements EnterpriseService {
wrapper.eq(FileInfoDO::getUnitId, updateReqVO.getId().toString());
fileInfoMapper.delete(wrapper);
}
if (updateReqVO.getFileIds() != null && updateReqVO.getFileIds().length > 0) {
for (Long fileId : updateReqVO.getFileIds()) {
FileInfoDO fileInfoDO = new FileInfoDO();
@ -241,33 +242,23 @@ public class EnterpriseServiceImpl implements EnterpriseService {
fileInfoMapper.insert(fileInfoDO);
}
}
//插入企业标签
if(!CollectionUtils.isAnyEmpty(updateReqVO.getTagIds())) {
//先删除原有数据
LambdaQueryWrapper<EnterpriseTagDO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(EnterpriseTagDO::getEnterpriseId, updateReqVO.getId());
enterpriseTagMapper.delete(wrapper);
// //如果专管员发生改变, 先删除关联表中的数据
// if (!enterpriseDO.getUserId().equals(updateReqVO.getUserId())) {
// LambdaQueryWrapper<EnterpriseDO> wrapper = new LambdaQueryWrapper<>();
// wrapper.eq(EnterpriseDO::getUserId, enterpriseDO.getUserId());
// wrapper.eq(EnterpriseDO::getRegion, enterpriseDO.getRegion());
// final List<EnterpriseDO> enterpriseDOS = enterpriseMapper.selectList(wrapper);
// if (enterpriseDOS != null && enterpriseDOS.size() == 1) {
// LambdaQueryWrapper<UserAreaDO> queryWrapper = new LambdaQueryWrapper<>();
// queryWrapper.eq(UserAreaDO::getUserId, enterpriseDO.getUserId());
// queryWrapper.eq(UserAreaDO::getArea, enterpriseDO.getRegion());
// userAreaMapper.delete(queryWrapper);
// }
//
// //给新专管人员 添加区域关联表
// LambdaQueryWrapper<UserAreaDO> wrapper1 = new LambdaQueryWrapper<>();
// wrapper1.eq(UserAreaDO::getUserId, updateReqVO.getUserId());
// wrapper1.eq(UserAreaDO::getArea, updateReqVO.getRegion());
// final List<UserAreaDO> userAreaDOS = userAreaMapper.selectList(wrapper1);
// if (userAreaDOS == null && updateReqVO.getRegion() != null) {
// Integer region = Integer.valueOf(updateReqVO.getRegion());
// UserAreaDO userAreaDO = new UserAreaDO();
// userAreaDO.setArea(region);
// userAreaDO.setUserId(updateReqVO.getUserId());
// userAreaMapper.insert(userAreaDO);
// }
// }
List<EnterpriseTagDO> enterpriseTagDOList = new ArrayList<>();
for (Long tagId : updateReqVO.getTagIds()) {
EnterpriseTagDO enterpriseTagDO = new EnterpriseTagDO();
enterpriseTagDO.setEnterpriseId(updateReqVO.getId());
enterpriseTagDO.setTagId(tagId);
enterpriseTagDOList.add(enterpriseTagDO);
}
enterpriseTagMapper.insertBatch(enterpriseTagDOList);
}
// 更新
EnterpriseDO updateObj = BeanUtils.toBean(updateReqVO, EnterpriseDO.class);
@ -311,6 +302,15 @@ public class EnterpriseServiceImpl implements EnterpriseService {
}
}
if (pageReqVO.getType() != null) {
QueryWrapper<EnterpriseTagDO> queryWrapper = new QueryWrapper<>();
queryWrapper.in("tag_id", pageReqVO.getType());
final List<EnterpriseTagDO> enterpriseTagDOS = enterpriseTagMapper.selectList(queryWrapper);
if (!CollectionUtils.isAnyEmpty(enterpriseTagDOS)) {
pageReqVO.setEnterpriseIds(CollectionUtils.convertList(enterpriseTagDOS, EnterpriseTagDO::getEnterpriseId));
}
}
final PageResult<EnterpriseDO> enterpriseDOPageResult = enterpriseMapper.selectPage(pageReqVO);
return enterpriseDOPageResult;
}

2
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/enterpriseinspections/EnterpriseInspectionsService.java

@ -65,4 +65,6 @@ public interface EnterpriseInspectionsService {
List<EnterpriseInspectionsDO> getEnterpriseInspectionsList(EnterpriseInspectionsPageReqVO pageReqVO);
List<SelectUserChangeVO> changeSelectUser(Long deptId);
PageResult<InspectionByEnterpriseIdRespVO> inspectionsByEnterpriseId(EnterpriseInspectionsPageReqVO pageReqVO);
}

54
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/enterpriseinspections/EnterpriseInspectionsServiceImpl.java

@ -1,6 +1,7 @@
package cn.iocoder.yudao.module.system.service.enterpriseinspections;
import cn.iocoder.yudao.module.system.controller.admin.auth.vo.RoleNameAndSelectTypeVO;
import cn.iocoder.yudao.module.system.convert.user.UserConvert;
import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictDataDO;
import cn.iocoder.yudao.module.system.dal.dataobject.enterprise.EnterpriseDO;
@ -31,6 +32,9 @@ import cn.iocoder.yudao.module.system.service.user.AdminUserService;
import cn.iocoder.yudao.module.system.util.EntityUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sun.xml.bind.v2.TODO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
@ -265,7 +269,7 @@ public class EnterpriseInspectionsServiceImpl implements EnterpriseInspectionsSe
}
}
//TODO 按状态查询不好用
final PageResult<EnterpriseInspectionsDO> enterpriseInspectionsDOPageResult = enterpriseInspectionsMapper.selectPage(pageReqVO);
if ( enterpriseInspectionsDOPageResult.getList() != null && enterpriseInspectionsDOPageResult.getList().size() > 0 ) {
enterpriseInspectionsDOPageResult.getList().forEach(item->{
@ -479,4 +483,52 @@ public class EnterpriseInspectionsServiceImpl implements EnterpriseInspectionsSe
return list;
}
@Override
public PageResult<InspectionByEnterpriseIdRespVO> inspectionsByEnterpriseId(EnterpriseInspectionsPageReqVO pageReqVO) {
// 分页查询主记录
Page<InspectionsLogDO> page = new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize());
IPage<InspectionByEnterpriseIdVO> inspectionByEnterpriseIdVOS = enterpriseInspectionsMapper.inspectionsByEnterpriseId(page, pageReqVO);
// 无数据时直接返回空分页结果
if (inspectionByEnterpriseIdVOS.getRecords().isEmpty()) {
return new PageResult<>(Collections.emptyList(), inspectionByEnterpriseIdVOS.getTotal());
}
// 批量获取所有关联的签到日志(一次性查询)
List<Long> logIds = inspectionByEnterpriseIdVOS.getRecords().stream()
.map(InspectionByEnterpriseIdVO::getLogId)
.collect(Collectors.toList());
LambdaQueryWrapper<SignInLogDO> wrapper = new LambdaQueryWrapper<>();
wrapper.in(SignInLogDO::getInsId, logIds);
List<SignInLogDO> allSignInLogs = signInLogMapper.selectList(wrapper);
// 按日志ID分组签到记录(内存快速匹配)
Map<Long, List<SignInLogDO>> signInLogMap = allSignInLogs.stream()
.collect(Collectors.groupingBy(SignInLogDO::getInsId));
// 构建响应列表
List<InspectionByEnterpriseIdRespVO> inspectionByEnterpriseIdList =
inspectionByEnterpriseIdVOS.getRecords().stream().map(item -> {
InspectionByEnterpriseIdRespVO respVO = new InspectionByEnterpriseIdRespVO();
respVO.setInspectionsId(item.getLogId());
respVO.setTaskId(item.getTaskId());
respVO.setTitle(item.getTitle());
respVO.setTime(item.getCreateTime());
respVO.setStatus(item.getStatus());
// 从预加载的Map中获取签到人员(避免单独查询)
List<SignInLogDO> signInLogs = signInLogMap.getOrDefault(item.getLogId(), Collections.emptyList());
String inspectNames = signInLogs.stream()
.map(SignInLogDO::getRealName)
.collect(Collectors.joining(", "));
respVO.setInspectNames(inspectNames);
return respVO;
}).collect(Collectors.toList());
// 使用主查询的总数(而非当前页数量)
return new PageResult<>(inspectionByEnterpriseIdList, inspectionByEnterpriseIdVOS.getTotal());
}
}

3
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/fileInfo/FileInfoService.java

@ -56,6 +56,7 @@ public interface FileInfoService {
PageResult<FileInfoDO> getFileInfoPage(FileInfoPageReqVO pageReqVO);
List<InfraFileInfoDTO> getFileList(Long dictType, Long dictData, String unitId);
Map<String,List<InfraFileInfoDTO>> getFileListMap(Long dictType, Long dictData, Collection<String> unitId);
/**
@ -71,4 +72,6 @@ public interface FileInfoService {
void deleteFilesByDictData(Long dictType, Long dictData, String unitId);
void deleteByInfraId(Long id) throws Exception;
}

11
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/fileInfo/FileInfoServiceImpl.java

@ -171,4 +171,15 @@ public class FileInfoServiceImpl implements FileInfoService {
fileInfoMapper.delete(list);
}
@Override
public void deleteByInfraId(Long id) throws Exception {
LambdaQueryWrapper<FileInfoDO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(FileInfoDO::getInfraFileId, id);
fileInfoMapper.delete(wrapper);
fileApi.deleteFile(id);
}
}

12
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/permission/PermissionService.java

@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.system.service.permission;
import cn.iocoder.yudao.module.system.api.permission.dto.DeptDataPermissionRespDTO;
import java.util.Collection;
import java.util.List;
import java.util.Set;
import static java.util.Collections.singleton;
@ -34,7 +35,6 @@ public interface PermissionService {
boolean hasAnyRoles(Long userId, String... roles);
// ========== 角色-菜单的相关方法 ==========
/**
* 设置角色菜单
*
@ -143,4 +143,14 @@ public interface PermissionService {
*/
DeptDataPermissionRespDTO getDeptDataPermission(Long userId);
/*
根据用户id获得角色名称列表
*/
List<String> getRoleListByUserId(Long userId);
/*
根据用户id获得角色ID列表
*/
List<Long> getRoleIdListByUserId(Long userId);
}

14
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/permission/PermissionServiceImpl.java

@ -329,6 +329,20 @@ public class PermissionServiceImpl implements PermissionService {
return result;
}
@Override
public List<String> getRoleListByUserId(Long userId) {
final Set<Long> userRoleIdListByUserId = this.getUserRoleIdListByUserId(userId);
final List<RoleDO> roleList = roleService.getRoleListFromCache(userRoleIdListByUserId);
return CollectionUtils.convertList(roleList, RoleDO::getName);
}
@Override
public List<Long> getRoleIdListByUserId(Long userId) {
final Set<Long> userRoleIdListByUserId = this.getUserRoleIdListByUserId(userId);
final List<RoleDO> roleList = roleService.getRoleListFromCache(userRoleIdListByUserId);
return CollectionUtils.convertList(roleList, RoleDO::getId);
}
/**
* 获得自身的代理对象解决 AOP 生效问题
*

15
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/permission/RoleServiceImpl.java

@ -12,11 +12,14 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RolePageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleSaveReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO;
import cn.iocoder.yudao.module.system.dal.dataobject.permission.UserRoleDO;
import cn.iocoder.yudao.module.system.dal.mysql.permission.RoleMapper;
import cn.iocoder.yudao.module.system.dal.mysql.permission.UserRoleMapper;
import cn.iocoder.yudao.module.system.dal.redis.RedisKeyConstants;
import cn.iocoder.yudao.module.system.enums.permission.DataScopeEnum;
import cn.iocoder.yudao.module.system.enums.permission.RoleCodeEnum;
import cn.iocoder.yudao.module.system.enums.permission.RoleTypeEnum;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.google.common.annotations.VisibleForTesting;
import com.mzt.logapi.context.LogRecordContext;
import com.mzt.logapi.service.impl.DiffParseFunction;
@ -51,6 +54,9 @@ public class RoleServiceImpl implements RoleService {
@Resource
private RoleMapper roleMapper;
@Resource
private UserRoleMapper userRoleMapper;
@Override
@Transactional(rollbackFor = Exception.class)
@LogRecord(type = SYSTEM_ROLE_TYPE, subType = SYSTEM_ROLE_CREATE_SUB_TYPE, bizNo = "{{#role.id}}",
@ -169,6 +175,15 @@ public class RoleServiceImpl implements RoleService {
if (RoleTypeEnum.SYSTEM.getType().equals(role.getType())) {
throw exception(ROLE_CAN_NOT_UPDATE_SYSTEM_TYPE_ROLE);
}
//角色下有用户,不允许删除
QueryWrapper<UserRoleDO> wrapper = new QueryWrapper<>();
wrapper.eq("role_id", id);
final List<UserRoleDO> userRoleDOS = userRoleMapper.selectList(wrapper);
if (! userRoleDOS.isEmpty()) {
throw exception(ROLE_USER_CODE_ERROR);
}
return role;
}

4
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/taskinfo/TaskInfoService.java

@ -75,4 +75,8 @@ public interface TaskInfoService {
void test();
List<LabelValueLongVO> appSelectCreateDept();
void audit(Long id);
void createTaskInfoBath(TaskInfoRespVO taskInfoDO);
}

129
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/taskinfo/TaskInfoServiceImpl.java

@ -18,12 +18,14 @@ import cn.iocoder.yudao.module.system.controller.admin.tasktag.vo.TaskTagPageReq
import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
import cn.iocoder.yudao.module.system.dal.dataobject.enterprise.EnterpriseDO;
import cn.iocoder.yudao.module.system.dal.dataobject.enterpriseinspections.EnterpriseInspectionsDO;
import cn.iocoder.yudao.module.system.dal.dataobject.fileInfo.FileInfoDO;
import cn.iocoder.yudao.module.system.dal.dataobject.taglibrary.TagLibraryDO;
import cn.iocoder.yudao.module.system.dal.dataobject.tasktag.TaskTagDO;
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
import cn.iocoder.yudao.module.system.dal.dataobject.userarea.UserAreaDO;
import cn.iocoder.yudao.module.system.dal.mysql.enterprise.EnterpriseMapper;
import cn.iocoder.yudao.module.system.dal.mysql.enterpriseinspections.EnterpriseInspectionsMapper;
import cn.iocoder.yudao.module.system.dal.mysql.fileInfo.FileInfoMapper;
import cn.iocoder.yudao.module.system.dal.mysql.taglibrary.TagLibraryMapper;
import cn.iocoder.yudao.module.system.dal.mysql.tasktag.TaskTagMapper;
import cn.iocoder.yudao.module.system.dal.mysql.user.AdminUserMapper;
@ -93,6 +95,13 @@ public class TaskInfoServiceImpl implements TaskInfoService {
NotifyMessageSendApi notifyMessageSendApi;
@Resource
private UserAreaMapper userAreaMapper;
@Resource
private FileInfoMapper fileInfoMapper;
//企业红头文件
public final static Long DEFAULT_DICT_DATA_QY = 4L;
public final static Long DEFAULT_DICT_TYPE = 644L;
@Override
@Transactional
@ -141,6 +150,20 @@ public class TaskInfoServiceImpl implements TaskInfoService {
list.add(inspection);
});
//添加红头文件
if (createReqVO.getFileIds() != null && createReqVO.getFileIds().length > 0) {
List<FileInfoDO> fileInfoDOS = new ArrayList<>();
for (Long fileId : createReqVO.getFileIds()) {
FileInfoDO fileInfoDO = new FileInfoDO();
fileInfoDO.setDictData(DEFAULT_DICT_DATA_QY);
fileInfoDO.setDictType(DEFAULT_DICT_TYPE);
fileInfoDO.setUnitId(taskInfo.getId().toString());
fileInfoDO.setInfraFileId(fileId);
fileInfoDOS.add(fileInfoDO);
}
fileInfoMapper.insertBatch(fileInfoDOS);
}
enterpriseInspectionsMapper.insertBatch(list);
}
// 返回
@ -149,11 +172,27 @@ public class TaskInfoServiceImpl implements TaskInfoService {
@Override
@Transactional
public void updateTaskInfo(TaskInfoSaveReqVO updateReqVO) {
// 校验存在
validateTaskInfoExists(updateReqVO.getId());
// 更新
TaskInfoDO updateObj = BeanUtils.toBean(updateReqVO, TaskInfoDO.class);
//添加红头文件
if (updateReqVO.getFileIds() != null && updateReqVO.getFileIds().length > 0) {
List<FileInfoDO> fileInfoDOS = new ArrayList<>();
for (Long fileId : updateReqVO.getFileIds()) {
FileInfoDO fileInfoDO = new FileInfoDO();
fileInfoDO.setDictData(DEFAULT_DICT_DATA_QY);
fileInfoDO.setDictType(DEFAULT_DICT_TYPE);
fileInfoDO.setUnitId(updateReqVO.getId().toString());
fileInfoDO.setInfraFileId(fileId);
fileInfoDOS.add(fileInfoDO);
}
fileInfoMapper.insertBatch(fileInfoDOS);
}
taskInfoMapper.updateById(updateObj);
}
@ -265,7 +304,6 @@ public class TaskInfoServiceImpl implements TaskInfoService {
}
Page<TaskInfoDO> page = new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize());
log.info("taskInfoDOIPage:{}", pageReqVO);
final IPage<TaskInfoDO> taskInfoDOIPage = taskInfoMapper.selectMyPage(page, pageReqVO);
final PageResult<TaskInfoDO> taskInfoDOPageResult = new PageResult<>(taskInfoDOIPage.getRecords(), taskInfoDOIPage.getTotal());
@ -426,4 +464,93 @@ public class TaskInfoServiceImpl implements TaskInfoService {
return taskInfoMapper.appSelectCreateDept(map);
}
@Override
public void audit(Long id) {
final TaskInfoDO taskInfoDO = validateTaskInfoExists(id);
// 当前日期
LocalDateTime currentDate = LocalDateTime.now();
//大于当前时间直接发布
// 比较逻辑
final LocalDateTime startDate = taskInfoDO.getStartDate();
final LocalDate localDate = startDate.toLocalDate();
final LocalDateTime startTime = localDate.atTime(taskInfoDO.getExecCycle(), 0);
if (currentDate.isBefore(startTime)) {
taskInfoDO.setStatus(1);
taskInfoMapper.updateById(taskInfoDO);
} else {
LambdaQueryWrapper<EnterpriseInspectionsDO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(EnterpriseInspectionsDO::getTaskId, taskInfoDO.getId());
final List<EnterpriseInspectionsDO> enterpriseInspectionsDOS = enterpriseInspectionsMapper.selectList(wrapper);
TaskInfoRespVO taskInfoRespVO = new TaskInfoRespVO();
BeanUtils.copyProperties(taskInfoDO, taskInfoRespVO);
taskInfoRespVO.setEnterpriseIdeTasks(enterpriseInspectionsDOS);
createTaskInfoBath(taskInfoRespVO);
}
}
/*
直接发布任务
*/
@Override
public void createTaskInfoBath(TaskInfoRespVO taskInfoDO) {
taskInfoDO.getEnterpriseIdeTasks().forEach(x ->{
if(x.getUserId()!= null){
try {
//发送消息);
SocialWxaSubscribeMessageSendReqDTO reqDTO = new SocialWxaSubscribeMessageSendReqDTO();
reqDTO.setUserType(1);
reqDTO.setTemplateTitle("环保任务通知");
reqDTO.setPage("sub/task/detail?id="+taskInfoDO.getId());
reqDTO.setUserId(x.getUserId());
Map<String, String> message = new HashMap<>();
message.put("thing2", StringUtil.truncateString(taskInfoDO.getTitle(), 15));
message.put("time5", DateUtil.format(taskInfoDO.getStartDate().atStartOfDay(), DateUtils.FORMAT_YEAR_MONTH_DAY));
message.put("thing4", StringUtil.truncateString(taskInfoDO.getDescription(), 15));
message.put("time3", DateUtil.format(taskInfoDO.getEndDate().atStartOfDay(), DateUtils.FORMAT_YEAR_MONTH_DAY));
reqDTO.setMessages(message);
socialClientApi.sendWxaSubscribeMessage(reqDTO);
}
catch (Exception e){
log.error("任务发送通知错误:",e.toString());
}
//修改任务状态
final TaskInfoDO updateTask = taskInfoMapper.selectById(taskInfoDO.getId());
updateTask.setStatus(2);
taskInfoMapper.updateById(updateTask);
//执法任务更改状态
LambdaQueryWrapper<EnterpriseInspectionsDO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(EnterpriseInspectionsDO::getTaskId, x.getTaskId());
List<EnterpriseInspectionsDO> enterpriseInspectionsDOList = enterpriseInspectionsMapper.selectList(wrapper);
if(enterpriseInspectionsDOList!=null && enterpriseInspectionsDOList.size() > 0) {
List<EnterpriseInspectionsDO> list = new ArrayList<>();
for (EnterpriseInspectionsDO enterpriseInspectionsDO : enterpriseInspectionsDOList) {
//站内信发送通知
NotifySendSingleToUserReqDTO notifyMessage = new NotifySendSingleToUserReqDTO();
notifyMessage.setUserId(Long.valueOf(enterpriseInspectionsDO.getUserId()));
notifyMessage.setTemplateCode("task_messages");
Map<String, Object> templateParams = new HashMap<>();
templateParams.put("title", taskInfoDO.getTitle());
templateParams.put("startTime", DateUtil.format(taskInfoDO.getStartDate().atStartOfDay(), DateUtils.FORMAT_YEAR_MONTH_DAY));
templateParams.put("endTime", DateUtil.format(taskInfoDO.getEndDate().atStartOfDay(), DateUtils.FORMAT_YEAR_MONTH_DAY) );
templateParams.put("url", "/sub/task/detail?id="+ enterpriseInspectionsDO.getTaskId());
notifyMessage.setTemplateParams(templateParams);
notifyMessageSendApi.sendSingleMessageToAdmin(notifyMessage);
enterpriseInspectionsDO.setStatus(2);
list.add(enterpriseInspectionsDO);
}
enterpriseInspectionsMapper.updateBatch(list);
}
}
});
}
}

5
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java

@ -185,6 +185,11 @@ public class AdminUserServiceImpl implements AdminUserService {
// 2.2 更新岗位
updateUserPost(updateReqVO, updateObj);
//更新职位
if (updateReqVO.getRoleIds() != null) {
permissionService.assignUserRole(updateReqVO.getId(), updateReqVO.getRoleIds());
}
//2.3 添加管理区域 todo
// 3. 记录操作日志上下文

226
yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/bigviewdata/BigViewDataMapper.xml

@ -54,94 +54,186 @@
GROUP BY status;
</select>
<select id="selectTaskTypeGroupCount"
resultType="cn.iocoder.yudao.module.system.controller.admin.bigviewdata.vo.NameCountVO">
resultType="cn.iocoder.yudao.module.system.controller.admin.bigviewdata.vo.LeftFirstDataVO">
select
tl.tag_name as name,
count(tl.id) as value
count(DISTINCT t.id) as taskCount,
count(e.id) as enterpriseCount,
sd.name as name
from
task_info t
left join tag_library tl on tl.id = t.task_type
left join enterprise_inspections ei on ei.task_id = t.id
left join enterprises e on e.id = ei.enterprise_id
left join system_dept sd on sd.id = e.department_id
where
t.deleted = 0
<if test="time != null and time != ''">
AND t.end_time between
<foreach collection="time" item="i" open=" " separator="and" close=" ">
#{i}
</foreach>
</if>
group by
tl.id
t.deleted = 0 and t.`status` > 1 and e.deleted = 0
GROUP BY e.department_id
</select>
<select id="getInspectionsTaskGroupCount"
resultType="cn.iocoder.yudao.module.system.controller.admin.bigviewdata.vo.StatusCountVO">
resultType="cn.iocoder.yudao.module.system.controller.admin.bigviewdata.vo.MonthTaskInspectionVO">
SELECT
sd.`name` as name,
COUNT(DISTINCT ei.id) AS value,
count(DISTINCT ei.task_id) as taskValue
FROM
task_info t
LEFT JOIN enterprise_inspections ei on t.id = ei.task_id
LEFT JOIN
enterprises e ON e.id = ei.enterprise_id
LEFT JOIN
inspections_log il ON ei.id = il.inspections_id
left Join system_users su on su.id = ei.user_id
left Join system_dept sd on sd.id = e.department_id
WHERE
ei.deleted = 0 AND e.deleted = 0 and ei.status = 2 and sd.parent_id = 116
<if test="time != null and time != ''">
AND t.end_time between
<foreach collection="time" item="i" open="" separator="and" close="">
#{i}
</foreach>
</if>
date_table.month_value as name,
COALESCE(COUNT(DISTINCT ei.id), 0) AS inspectionsCount,
COALESCE(COUNT(DISTINCT ei.task_id), 0) AS taskCount
FROM (
SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 5 MONTH), '%Y-%m') AS month_value
UNION SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 4 MONTH), '%Y-%m')
UNION SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 3 MONTH), '%Y-%m')
UNION SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 2 MONTH), '%Y-%m')
UNION SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 MONTH),'%Y-%m')
UNION SELECT DATE_FORMAT(CURDATE(), '%Y-%m')
) date_table
LEFT JOIN task_info t ON
DATE_FORMAT(t.start_date, '%Y-%m') = date_table.month_value
AND t.start_date >= DATE_SUB(CURDATE(), INTERVAL 6 MONTH)
LEFT JOIN enterprise_inspections ei ON
t.id = ei.task_id
AND ei.deleted = 0
AND ei.status = 2
LEFT JOIN enterprises e ON
e.id = ei.enterprise_id
AND e.deleted = 0
LEFT JOIN system_dept sd ON
sd.id = e.department_id
AND sd.parent_id = 116
GROUP BY
e.department_id
date_table.month_value
ORDER BY
date_table.month_value;
</select>
<!-- 定义时间范围变量 -->
<select id="getInspectionsTaskGroupCountCompare"
resultType="cn.iocoder.yudao.module.system.controller.admin.bigviewdata.vo.BigViewGroupCountCompareVO">
SELECT
sd.name AS name,
-- 当前月执法统计
COUNT(DISTINCT CASE WHEN t.create_time BETWEEN #{currentStartTime} AND #{currentEndTime} THEN ei.id ELSE 0 END) AS currentEnforcementCount,
-- 上个月执法统计
COUNT(DISTINCT CASE WHEN t.create_time BETWEEN #{previousStartTime} AND #{previousEndTime} THEN ei.id ELSE 0 END) AS previousEnforcementCount,
-- 执法环比增长率计算
m1.name,
m1.inspectionsCount,
m1.taskCount,
-- 计算执法环比增长率
IFNULL(
(COUNT(DISTINCT CASE WHEN t.create_time BETWEEN #{currentStartTime} AND #{currentEndTime} THEN ei.id END) -
COUNT(DISTINCT CASE WHEN t.create_time BETWEEN #{previousStartTime} AND #{previousEndTime} THEN ei.id END)) /
NULLIF(COUNT(DISTINCT CASE WHEN t.create_time BETWEEN #{previousStartTime} AND #{previousEndTime} THEN ei.id END), 0),
0
) * 100 AS enforcementGrowthRate,
-- 当前月任务统计
COUNT(DISTINCT CASE WHEN t.create_time BETWEEN '2025-02-01' AND '2025-02-25' THEN ei.task_id END) AS currentTaskCount,
-- 上个月任务统计
COUNT(DISTINCT CASE WHEN t.create_time BETWEEN '2025-01-01' AND '2025-01-25' THEN ei.task_id END) AS previousTaskCount,
-- 任务环比增长率计算
(m1.inspectionsCount - m2.inspectionsCount) / NULLIF(m2.inspectionsCount, 0) * 100,
0
) AS inspectionsGrowthRate,
-- 计算任务环比增长率
IFNULL(
(COUNT(DISTINCT CASE WHEN t.create_time BETWEEN #{currentStartTime} AND #{currentEndTime} THEN ei.task_id END) -
COUNT(DISTINCT CASE WHEN t.create_time BETWEEN #{previousStartTime} AND #{previousEndTime} THEN ei.task_id END)) /
NULLIF(COUNT(DISTINCT CASE WHEN t.create_time BETWEEN #{previousStartTime} AND #{previousEndTime} THEN ei.task_id END), 0),
0
) * 100 AS taskGrowthRate
(m1.taskCount - m2.taskCount) / NULLIF(m2.taskCount, 0) * 100,
0
) AS taskGrowthRate
FROM (
-- 基础数据统计(含近6个月数据)
SELECT
date_table.month_value AS name,
COALESCE(COUNT(DISTINCT ei.id), 0) AS inspectionsCount,
COALESCE(COUNT(DISTINCT ei.task_id), 0) AS taskCount
FROM (
SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 5 MONTH), '%Y-%m') AS month_value
UNION ALL
SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 4 MONTH), '%Y-%m')
UNION ALL
SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 3 MONTH), '%Y-%m')
UNION ALL
SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 2 MONTH), '%Y-%m')
UNION ALL
SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 MONTH), '%Y-%m')
UNION ALL
SELECT DATE_FORMAT(CURDATE(), '%Y-%m')
) date_table
LEFT JOIN task_info t
ON DATE_FORMAT(t.start_date, '%Y-%m') = date_table.month_value
AND t.start_date >= DATE_SUB(CURDATE(), INTERVAL 6 MONTH)
LEFT JOIN enterprise_inspections ei
ON t.id = ei.task_id
AND ei.deleted = 0
AND ei.status = 2
LEFT JOIN enterprises e
ON e.id = ei.enterprise_id
AND e.deleted = 0
LEFT JOIN system_dept sd
ON sd.id = e.department_id
AND sd.parent_id = 116
GROUP BY date_table.month_value
) m1
LEFT JOIN (
SELECT
date_table.month_value AS name,
COALESCE(COUNT(DISTINCT ei.id), 0) AS inspectionsCount,
COALESCE(COUNT(DISTINCT ei.task_id), 0) AS taskCount
FROM (
SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 5 MONTH), '%Y-%m') AS month_value
UNION ALL
SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 4 MONTH), '%Y-%m')
UNION ALL
SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 3 MONTH), '%Y-%m')
UNION ALL
SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 2 MONTH), '%Y-%m')
UNION ALL
SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 MONTH), '%Y-%m')
UNION ALL
SELECT DATE_FORMAT(CURDATE(), '%Y-%m')
) date_table
LEFT JOIN task_info t
ON DATE_FORMAT(t.start_date, '%Y-%m') = date_table.month_value
AND t.start_date >= DATE_SUB(CURDATE(), INTERVAL 6 MONTH)
LEFT JOIN enterprise_inspections ei
ON t.id = ei.task_id
AND ei.deleted = 0
AND ei.status = 2
LEFT JOIN enterprises e
ON e.id = ei.enterprise_id
AND e.deleted = 0
LEFT JOIN system_dept sd
ON sd.id = e.department_id
AND sd.parent_id = 116
GROUP BY date_table.month_value
) m2 ON m1.name = DATE_FORMAT(DATE_ADD(STR_TO_DATE(CONCAT(m2.name, '-01'), '%Y-%m-%d'), INTERVAL 1 MONTH), '%Y-%m')
ORDER BY m1.name;
</select>
<select id="getTaskCount"
resultType="cn.iocoder.yudao.module.system.controller.admin.bigviewdata.vo.TaskCountVO">
SELECT
e.`region` AS region,
COUNT(DISTINCT ei.task_id) AS taskCount -- 统计任务数量
FROM
task_info t
LEFT JOIN enterprise_inspections ei ON t.id = ei.task_id
LEFT JOIN enterprises e ON e.id = ei.enterprise_id
LEFT JOIN inspections_log il ON ei.id = il.inspections_id
LEFT JOIN system_dept sd ON sd.id = e.department_id
enterprise_inspections ei
LEFT JOIN
enterprises e ON e.id = ei.enterprise_id
LEFT JOIN
task_info t ON t.id = ei.task_id
WHERE
ei.deleted = 0
<if test="time != null and time != ''">
AND t.start_date between
<foreach collection="time" item="i" open=" " separator="and" close=" ">
#{i}
</foreach>
</if>
AND e.deleted = 0
AND ei.status = 2
AND sd.parent_id = 116
AND ei.`status` > 1
GROUP BY
sd.name;
e.region
</select>
<select id="getRightThird"
resultType="cn.iocoder.yudao.module.system.controller.admin.bigviewdata.vo.RightThirdDataVO">
select
eq.expiry_date as expiryDate,
DATEDIFF(eq.expiry_date, NOW()) AS count,
e.enterprises_name as name,
su.real_name as realName
from enterprise_qualification eq
LEFT JOIN
enterprises e ON eq.enterprise_id = e.id
LEFT JOIN
system_users su on su.id = e.user_id
WHERE
e.deleted = 0 and eq.deleted = 0 AND eq.expiry_date &lt; DATE_ADD(NOW(), INTERVAL 16 DAY)
<if test="time != null and time != ''">
and eq.expiry_date between
<foreach collection="time" item="i" open="" separator="and" close="">
#{i}
</foreach>
</if>
ORDER BY count ASC Limit 10
</select>
</mapper>

17
yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/enterpriseinspections/EnterpriseInspections.xml

@ -21,4 +21,21 @@
WHERE
ei.deleted = 0 and el.correction_time &lt; NOW()
</select>
<select id="inspectionsByEnterpriseId"
resultType="cn.iocoder.yudao.module.system.controller.admin.enterpriseinspections.vo.InspectionByEnterpriseIdVO">
SELECT
t.id as taskId,
t.title as title,
il.inspections_id as inspectionsId,
il.id as logId,
il.status as status,
il.create_time as createTime
FROM
enterprise_inspections ei
LEFT JOIN inspections_log il ON ei.id = il.inspections_id
LEFT JOIN task_info t on ei.task_id = t.id
WHERE
ei.enterprise_id = #{params.enterpriseId} and il.inspections_id is NOT NULL
</select>
</mapper>

3
yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/taskinfo/TaskInfoMapper.xml

@ -50,9 +50,6 @@
GROUP BY t.id ORDER BY t.create_time DESC
</select>
<select id="selectPageByEnterpriseId" resultType="cn.iocoder.yudao.module.system.dal.dataobject.taskinfo.TaskInfoDO">
SELECT
t.*

4
yudao-server/src/main/resources/application-local.yaml

@ -46,7 +46,7 @@ spring:
primary: master
datasource:
master:
url: jdbc:mysql://192.168.2.5:3306/hb-yudao?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例
url: jdbc:mysql://188.188.3.232:3306/huanbao?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例
# url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=true&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true # MySQL Connector/J 5.X 连接的示例
# url: jdbc:postgresql://127.0.0.1:5432/ruoyi-vue-pro # PostgreSQL 连接的示例
# url: jdbc:oracle:thin:@127.0.0.1:1521:xe # Oracle 连接的示例
@ -55,7 +55,7 @@ spring:
# url: jdbc:kingbase8://127.0.0.1:54321/test # 人大金仓 KingbaseES 连接的示例
# url: jdbc:postgresql://127.0.0.1:5432/postgres # OpenGauss 连接的示例
username: root
password: jingke@123
password: 123456
slave: # 模拟从库,可根据自己需要修改
lazy: true # 开启懒加载,保证启动速度
url: jdbc:mysql://192.168.2.5:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&rewriteBatchedStatements=true&nullCatalogMeansCurrent=true

Loading…
Cancel
Save