Merge branch 'dev' into updateMenu

This commit is contained in:
2025-12-08 10:39:50 +08:00
328 changed files with 22779 additions and 207 deletions

View File

@ -368,3 +368,14 @@ drone:
chat:
server:
port: 19099
# rabbitmq 配置
rabbitmq:
exchange-name: dev-normal-exchange
queue-name: dev-normal-queue
routing-key: dev.normal.routing.key
delay-exchange-name: dev-delay-queue
delay-queue-name: dev-delay-exchange
delay-routing-key: dev.delay.routing.key
dead-letter-exchange: dev-dlx-exchange
dead-letter-queue: dev-dlx-queue
dead-letter-routing-key: dev.dlx.routing.key

View File

@ -343,3 +343,14 @@ drone:
chat:
server:
port: 18088
# rabbitmq 配置
rabbitmq:
exchange-name: local-normal-exchange
queue-name: local-normal-queue
routing-key: local.normal.routing.key
delay-exchange-name: local-delay-queue
delay-queue-name: local-delay-exchange
delay-routing-key: local.delay.routing.key
dead-letter-exchange: local-dlx-exchange
dead-letter-queue: local-dlx-queue
dead-letter-routing-key: local.dlx.routing.key

View File

@ -358,3 +358,14 @@ drone:
chat:
server:
port: 19099
# rabbitmq 配置
rabbitmq:
exchange-name: prod-normal-exchange
queue-name: prod-normal-queue
routing-key: prod.normal.routing.key
delay-exchange-name: prod-delay-queue
delay-queue-name: prod-delay-exchange
delay-routing-key: prod.delay.routing.key
dead-letter-exchange: prod-dlx-exchange
dead-letter-queue: prod-dlx-queue
dead-letter-routing-key: prod.dlx.routing.key

View File

@ -95,7 +95,13 @@ spring:
deserialization:
# 允许对象忽略json中不存在的属性
fail_on_unknown_properties: false
rabbitmq:
host: 192.168.110.2
port: 5672
username: admin
password: yuanjiexny
publisher-returns: true
publisher-confirm-type: correlated
# Sa-Token配置
sa-token:
# token名称 (同时也是cookie名称)
@ -305,10 +311,12 @@ springdoc:
packages-to-scan: org.dromara.ai
- group: 31.投标管理模块
packages-to-scan: org.dromara.bidding
- group: 33.机械模块
packages-to-scan: org.dromara.mechanical.jxgl
- group: 32.设备模块
packages-to-scan: org.dromara.device
- group: 33.摄像头模块
packages-to-scan: org.dromara.other
- group: 34.机械模块
packages-to-scan: org.dromara.mechanical
# knife4j的增强配置不需要增强可以不配
knife4j:
enable: true

View File

@ -0,0 +1,146 @@
package org.dromara.common.core.utils;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
/**
* 时间戳转换工具类(包含时分秒提取)
*/
public class TimestampUtils {
// 默认时区(东八区)
private static final TimeZone DEFAULT_TIME_ZONE = TimeZone.getTimeZone("GMT+8");
// 完整日期格式
private static final String FULL_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
// 时分秒格式
private static final String TIME_FORMAT = "HH:mm:ss";
// 日期格式
private static final String DATE_FORMAT = "yyyy-MM-dd";
/**
* 将日期字符串转为秒级时间戳(优化版)
* 支持格式:"2025-12-03 23:59:59"、"2025-12-03"等
* @param dateStr 日期字符串
* @return 秒级时间戳
*/
public static Long parseDateToTimestamp(String dateStr) {
if (StrUtil.isBlank(dateStr)) {
return null;
}
// 使用Hutool的DateUtil进行智能解析推荐
try {
Date date = DateUtil.parse(dateStr);
return date.getTime() / 1000L; // 转为秒级时间戳
} catch (Exception e) {
throw new IllegalArgumentException(
String.format("日期格式错误:%s支持格式yyyy-MM-dd HH:mm:ss、yyyy-MM-dd等", dateStr)
);
}
}
/**
* 将时间戳转换为完整日期格式yyyy-MM-dd HH:mm:ss
*/
public static String formatTimestamp(Object timestamp) {
if (timestamp == null) {
return null;
}
String timestampStr = timestamp.toString().trim();
if (StrUtil.isBlank(timestampStr)) {
return null;
}
Long time = parseToMilliseconds(timestampStr);
SimpleDateFormat sdf = new SimpleDateFormat(FULL_DATE_FORMAT);
sdf.setTimeZone(DEFAULT_TIME_ZONE);
return sdf.format(new Date(time));
}
/**
* 提取时间戳中的时分秒部分HH:mm:ss
*/
public static String extractTime(Object timestamp) {
if (timestamp == null) {
return null;
}
String timestampStr = timestamp.toString().trim();
if (StrUtil.isBlank(timestampStr)) {
return null;
}
Long time = parseToMilliseconds(timestampStr);
SimpleDateFormat sdf = new SimpleDateFormat(TIME_FORMAT);
sdf.setTimeZone(DEFAULT_TIME_ZONE);
return sdf.format(new Date(time));
}
/**
* 提取时间戳中的日期部分yyyy-MM-dd
*/
public static String extractDate(Object timestamp) {
if (timestamp == null) {
return null;
}
String timestampStr = timestamp.toString().trim();
if (StrUtil.isBlank(timestampStr)) {
return null;
}
Long time = parseToMilliseconds(timestampStr);
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
sdf.setTimeZone(DEFAULT_TIME_ZONE);
return sdf.format(new Date(time));
}
/**
* 解析时间戳字符串为毫秒级时间戳
*/
private static Long parseToMilliseconds(String timestampStr) {
try {
Long time = Long.parseLong(timestampStr);
// 10位秒级时间戳转为13位毫秒级
if (timestampStr.length() == 10) {
time = time * 1000;
}
return time;
} catch (NumberFormatException e) {
throw new IllegalArgumentException("时间戳格式错误:" + timestampStr);
}
}
/**
* 获取时间戳对应的小时
*/
public static int getHour(Object timestamp) {
String timeStr = extractTime(timestamp);
return Integer.parseInt(timeStr.split(":")[0]);
}
/**
* 获取时间戳对应的分钟
*/
public static int getMinute(Object timestamp) {
String timeStr = extractTime(timestamp);
return Integer.parseInt(timeStr.split(":")[1]);
}
/**
* 获取时间戳对应的秒
*/
public static int getSecond(Object timestamp) {
String timeStr = extractTime(timestamp);
return Integer.parseInt(timeStr.split(":")[2]);
}
}

View File

@ -29,6 +29,10 @@
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<!-- TwelveMonkeys ImageIO 扩展 -->
<dependency>
<groupId>com.twelvemonkeys.imageio</groupId>

View File

@ -3,10 +3,14 @@ package org.dromara.complaintBox.controller;
import lombok.RequiredArgsConstructor;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.dromara.complaintBox.domain.bo.BusComplaintBoxDisposeLoggingBo;
import org.dromara.complaintBox.domain.bo.BusComplaintBoxMessageLoggingBo;
import org.dromara.complaintBox.domain.vo.BusComplaintBoxDisposeLoggingVo;
import org.dromara.complaintBox.domain.vo.ComplaintBoxCountVo;
import org.dromara.complaintBox.domain.vo.DetailsOfTheOpinionVo;
import org.dromara.complaintBox.service.IBusComplaintBoxDisposeLoggingService;
import org.dromara.complaintBox.service.IBusComplaintBoxMessageLoggingService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
@ -37,24 +41,35 @@ import java.util.List;
@RequestMapping("/complaintBox/complaintBox")
public class BusComplaintBoxController extends BaseController {
@Lazy
private final IBusComplaintBoxService busComplaintBoxService;
@Lazy
private final IBusComplaintBoxMessageLoggingService busComplaintBoxMessageLoggingService;
@Autowired
private IBusComplaintBoxMessageLoggingService busComplaintBoxMessageLoggingService;
@Lazy
@Autowired
private IBusComplaintBoxDisposeLoggingService disposeLoggingService;
/**
* 查询意见箱列表
*/
// @SaCheckPermission("complaintBox:complaintBox:list")
@SaCheckPermission("complaintBox:complaintBox:list")
@GetMapping("/list")
public TableDataInfo<BusComplaintBoxVo> list(BusComplaintBoxBo bo, PageQuery pageQuery) {
return busComplaintBoxService.queryPageList(bo, pageQuery);
}
/**
* 查询意见处理记录列表
*/
@SaCheckPermission("complaintBox:complaintBox:list")
@GetMapping("/getDisposeLogList")
public TableDataInfo<BusComplaintBoxDisposeLoggingVo> getDisposeLogList(BusComplaintBoxDisposeLoggingBo bo, PageQuery pageQuery) {
return disposeLoggingService.queryPageList(bo, pageQuery);
}
/**
* web获取各个处理状态数量
*/
// @SaCheckPermission("complaintBox:complaintBox:list")
@SaCheckPermission("complaintBox:complaintBox:list")
@GetMapping("/getCount")
public R<List<ComplaintBoxCountVo>> getCount(BusComplaintBoxBo bo) {
return R.ok(busComplaintBoxService.getCount(bo));
@ -75,7 +90,7 @@ public class BusComplaintBoxController extends BaseController {
/**
* 新增意见回复
*/
// @SaCheckPermission("complaintBox:complaintBox:add")
@SaCheckPermission("complaintBox:complaintBox:add")
@Log(title = "意见箱", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping("/postAReply")
@ -87,7 +102,7 @@ public class BusComplaintBoxController extends BaseController {
/**
* 修改意见阅读状态
*/
// @SaCheckPermission("complaintBox:complaintBox:edit")
@SaCheckPermission("complaintBox:complaintBox:edit")
@Log(title = "意见箱", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping("/editCheckStatus")
@ -98,7 +113,7 @@ public class BusComplaintBoxController extends BaseController {
/**
* 修改意见阅读状态
*/
// @SaCheckPermission("complaintBox:complaintBox:edit")
@SaCheckPermission("complaintBox:complaintBox:edit")
@Log(title = "意见箱", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping("/editStatus")

View File

@ -78,7 +78,7 @@ public class BusComplaintBox extends BaseEntity {
private String isCryptonym;
/**
* 处理状态0、待处理5、处理中9、已解决10、退回14、关闭
* 处理状态0、待处理5、处理中9、已解决10、退回14、不予解决()
*/
private String status;

View File

@ -86,5 +86,10 @@ public class BusComplaintBoxBo extends BaseEntity {
*/
private String status;
/**
* 退回原因
*/
private String cause;
}

View File

@ -1,5 +1,7 @@
package org.dromara.complaintBox.domain.vo;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import org.dromara.complaintBox.domain.BusComplaintBoxDisposeLogging;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
@ -71,5 +73,10 @@ public class BusComplaintBoxDisposeLoggingVo implements Serializable {
@ExcelProperty(value = "退回原因")
private String cause;
/**
* 创建时间
*/
private Date createTime;
}

View File

@ -72,13 +72,11 @@ public class BusComplaintBoxDisposeLoggingServiceImpl extends ServiceImpl<BusCom
private LambdaQueryWrapper<BusComplaintBoxDisposeLogging> buildQueryWrapper(BusComplaintBoxDisposeLoggingBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<BusComplaintBoxDisposeLogging> lqw = Wrappers.lambdaQuery();
lqw.orderByDesc(BusComplaintBoxDisposeLogging::getId);
lqw.orderByDesc(BusComplaintBoxDisposeLogging::getCreateTime);
lqw.eq(bo.getComplaintId() != null, BusComplaintBoxDisposeLogging::getComplaintId, bo.getComplaintId());
lqw.eq(bo.getUserId() != null, BusComplaintBoxDisposeLogging::getUserId, bo.getUserId());
lqw.like(StringUtils.isNotBlank(bo.getUserName()), BusComplaintBoxDisposeLogging::getUserName, bo.getUserName());
lqw.eq(bo.getAvatar() != null, BusComplaintBoxDisposeLogging::getAvatar, bo.getAvatar());
lqw.eq(StringUtils.isNotBlank(bo.getIsRefund()), BusComplaintBoxDisposeLogging::getIsRefund, bo.getIsRefund());
lqw.eq(StringUtils.isNotBlank(bo.getCause()), BusComplaintBoxDisposeLogging::getCause, bo.getCause());
return lqw;
}

View File

@ -109,7 +109,7 @@ public class BusComplaintBoxMessageLoggingServiceImpl extends ServiceImpl<BusCom
if (busComplaintBox == null) {
throw new ServiceException("意见信息找不到!!!");
}
if ("14".equals(busComplaintBox.getStatus())){
if ("14".equals(busComplaintBox.getStatus()) || "9".equals(busComplaintBox.getStatus())) {
throw new ServiceException("意见已关闭!!!");
}
SysUserVo sysUserVo = sysUserService.selectUserById(loginUser.getUserId());
@ -145,7 +145,13 @@ public class BusComplaintBoxMessageLoggingServiceImpl extends ServiceImpl<BusCom
if (busComplaintBox == null) {
throw new ServiceException("意见信息找不到!!!");
}
if ("14".equals(busComplaintBox.getStatus())){
if (busComplaintBox.getCurrentDisposeUserId()!= null && !loginUser.getUserId().equals(busComplaintBox.getCurrentDisposeUserId())) {
throw new ServiceException("处理人异常");
}
if ("0".equals(busComplaintBox.getStatus())){
throw new ServiceException("意见未处理,不能发布信息");
}
if ("14".equals(busComplaintBox.getStatus()) || "9".equals(busComplaintBox.getStatus())) {
throw new ServiceException("意见已关闭!!!");
}
SysUserVo sysUserVo = sysUserService.selectUserById(loginUser.getUserId());
@ -159,11 +165,11 @@ public class BusComplaintBoxMessageLoggingServiceImpl extends ServiceImpl<BusCom
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if ("0".equals(busComplaintBox.getStatus())){
busComplaintBox.setStatus("5");
busComplaintBox.setCurrentDisposeUserId(sysUserVo.getUserId());
busComplaintBoxMapper.updateById(busComplaintBox);
}
// if ("0".equals(busComplaintBox.getStatus())){
// busComplaintBox.setStatus("5");
// busComplaintBox.setCurrentDisposeUserId(sysUserVo.getUserId());
// busComplaintBoxMapper.updateById(busComplaintBox);
// }
if (flag) {
bo.setId(add.getId());
}

View File

@ -3,6 +3,8 @@ package org.dromara.complaintBox.service.impl;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import jakarta.annotation.Resource;
import org.dromara.common.core.domain.model.LoginUser;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
@ -12,12 +14,15 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.complaintBox.app.domain.vo.AppDetailsOfTheOpinionVo;
import org.dromara.complaintBox.domain.BusComplaintBoxDisposeLogging;
import org.dromara.complaintBox.domain.BusComplaintBoxMessageLogging;
import org.dromara.complaintBox.domain.vo.BusComplaintBoxMessageLoggingVo;
import org.dromara.complaintBox.domain.vo.ComplaintBoxCountVo;
import org.dromara.complaintBox.domain.vo.DetailsOfTheOpinionVo;
import org.dromara.complaintBox.mapper.BusComplaintBoxMessageLoggingMapper;
import org.dromara.complaintBox.service.IBusComplaintBoxDisposeLoggingService;
import org.dromara.complaintBox.service.IBusComplaintBoxMessageLoggingService;
import org.dromara.system.domain.vo.SysDeptVo;
import org.dromara.system.domain.vo.SysOssVo;
@ -32,6 +37,7 @@ import org.dromara.complaintBox.domain.vo.BusComplaintBoxVo;
import org.dromara.complaintBox.domain.BusComplaintBox;
import org.dromara.complaintBox.mapper.BusComplaintBoxMapper;
import org.dromara.complaintBox.service.IBusComplaintBoxService;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.stream.Collectors;
@ -50,11 +56,17 @@ public class BusComplaintBoxServiceImpl extends ServiceImpl<BusComplaintBoxMappe
// @Lazy
private final BusComplaintBoxMessageLoggingMapper messageLoggingMapper;
@Lazy
private final ISysUserService sysUserService;
@Resource
private ISysUserService sysUserService;
@Lazy
private final ISysDeptService sysDeptService;
@Resource
private ISysDeptService sysDeptService;
@Lazy
private final ISysOssService sysOssService;
@Resource
private ISysOssService sysOssService;
@Lazy
@Resource
private IBusComplaintBoxDisposeLoggingService disposeLoggingService;
/**
* 查询意见箱
@ -319,6 +331,7 @@ public class BusComplaintBoxServiceImpl extends ServiceImpl<BusComplaintBoxMappe
}
@Override
@Transactional(rollbackFor = Exception.class)
public int editStatus(BusComplaintBoxBo bo) {
BusComplaintBoxVo busComplaintBoxVo = baseMapper.selectVoById(bo.getId());
if (busComplaintBoxVo == null){
@ -327,7 +340,37 @@ public class BusComplaintBoxServiceImpl extends ServiceImpl<BusComplaintBoxMappe
if ("14".equals(busComplaintBoxVo.getStatus())){
throw new ServiceException("该意见已经关闭,不允许再修改状态");
}
return baseMapper.update(new LambdaUpdateWrapper<BusComplaintBox>().set(BusComplaintBox::getStatus,bo.getStatus()).eq(BusComplaintBox::getId, bo.getId()));
LambdaUpdateWrapper<BusComplaintBox> lqw = new LambdaUpdateWrapper<BusComplaintBox>();
lqw.set(BusComplaintBox::getStatus, bo.getStatus());
lqw.eq(BusComplaintBox::getId, bo.getId());
if ("5".equals(busComplaintBoxVo.getStatus())){
BusComplaintBoxDisposeLogging logging = new BusComplaintBoxDisposeLogging();
logging.setComplaintId(bo.getId());
LoginUser loginUser = LoginHelper.getLoginUser();
SysUserVo sysUserVo = sysUserService.selectUserById(loginUser.getUserId());
if (sysUserVo == null){
throw new ServiceException("找不到当前登录用户信息!");
}
logging.setUserId(loginUser.getUserId());
logging.setUserName(sysUserVo.getNickName());
logging.setAvatar(sysUserVo.getAvatar());
disposeLoggingService.save(logging);
}
if ("0".equals(bo.getStatus())){
lqw.set(BusComplaintBox::getCurrentDisposeUserId, null);
BusComplaintBoxDisposeLogging logging = disposeLoggingService.getBaseMapper()
.selectOne(new LambdaQueryWrapper<BusComplaintBoxDisposeLogging>()
.eq(BusComplaintBoxDisposeLogging::getComplaintId, bo.getId())
.eq(BusComplaintBoxDisposeLogging::getUserId, busComplaintBoxVo.getCurrentDisposeUserId())
.eq(BusComplaintBoxDisposeLogging::getIsRefund, "0"));
if (logging == null){
throw new ServiceException("找不到处理人记录");
}
logging.setIsRefund("1");
logging.setCause(bo.getCause());
disposeLoggingService.updateById(logging);
}
return baseMapper.update(lqw);
}
}

View File

@ -412,6 +412,7 @@ public class SubConstructionUserController extends BaseController {
vo.setUploadFile("部分上传");
}
dataList.add(vo);
order++;
}
// 写入当前Sheet的数据
excelWriter.write(dataList, writeSheet);
@ -456,7 +457,9 @@ public class SubConstructionUserController extends BaseController {
} else {
vo.setUploadFile("部分上传");
}
vo.setTeamName(null);
dataList.add(vo);
order++;
}
// 写入当前Sheet的数据
excelWriter.write(dataList, writeSheet);

View File

@ -271,7 +271,7 @@ public class SubConstructionUserFileServiceImpl extends ServiceImpl<SubConstruct
}
}
if (CollUtil.isEmpty(constructionUserFileList)) {
return true;
throw new ServiceException("未找到施工人员文件");
}
// 9. 判断是否已经存在
List<Long> userIdList = constructionUserFileList.stream().map(SubConstructionUserFile::getUserId).toList();

View File

@ -230,7 +230,7 @@ public class SubConstructionUserServiceImpl extends ServiceImpl<SubConstructionU
try {
decrypt = idCardEncryptorUtil.decrypt(decrypt);
} catch (Exception e) {
log.warn("身份证解密失败");
log.warn("身份证解密失败{}", vo.getUserName(), e);
}
subConstructionUserVo.setSfzNumber(decrypt);
return subConstructionUserVo;

View File

@ -26,6 +26,7 @@ import org.dromara.design.domain.dto.volumecatalog.DesVolumeCatalogCreateReq;
import org.dromara.design.domain.dto.volumecatalog.DesVolumeCatalogQueryReq;
import org.dromara.design.domain.dto.volumecatalog.DesVolumeCatalogUpdateReq;
import org.dromara.design.domain.vo.CopyUserVo;
import org.dromara.design.domain.vo.DelayContVo;
import org.dromara.design.domain.vo.DesUserVo;
import org.dromara.design.domain.vo.volumecatalog.DesVolumeCatalogVo;
import org.dromara.design.domain.vo.volumefile.DesVolumeFileVo;
@ -45,10 +46,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
/**
@ -131,6 +129,16 @@ public class DesVolumeCatalogController extends BaseController {
return toAjax(desVolumeCatalogService.viewerFile(id));
}
/**
* 计划过期统计
*/
@GetMapping("/delayCont/{projectId}")
public R<DelayContVo> delayCont(@PathVariable Long projectId) {
return R.ok(desVolumeCatalogService.delayCont(projectId));
}
/**
* 新增卷册目录
*/
@ -167,6 +175,9 @@ public class DesVolumeCatalogController extends BaseController {
}
/**
* 收资清单模板导出
*/

View File

@ -46,4 +46,9 @@ public class DesVolumeCatalogQueryReq implements Serializable {
*/
private String designSubitem;
/**
* 0-不延期1-延期
*/
private String delay;
}

View File

@ -0,0 +1,23 @@
package org.dromara.design.domain.vo;
import lombok.Data;
@Data
public class DelayContVo {
/**
* 总数
*/
private Integer total;
/**
* 延迟数
*/
private Integer delay;
/**
* 今日数
*/
private Integer today;
}

View File

@ -11,7 +11,9 @@ import org.dromara.design.domain.DesVolumeFile;
import org.dromara.design.domain.dto.volumecatalog.DesVolumeCatalogCreateReq;
import org.dromara.design.domain.dto.volumecatalog.DesVolumeCatalogQueryReq;
import org.dromara.design.domain.dto.volumecatalog.DesVolumeCatalogUpdateReq;
import org.dromara.design.domain.vo.DelayContVo;
import org.dromara.design.domain.vo.volumecatalog.DesVolumeCatalogVo;
import org.springframework.web.bind.annotation.PathVariable;
import java.util.Collection;
import java.util.List;
@ -130,4 +132,9 @@ public interface IDesVolumeCatalogService extends IService<DesVolumeCatalog> {
* @return 设计子项列表
*/
List<String> listDesignSubitem(Long projectId);
/**
* 统计
*/
DelayContVo delayCont(Long projectId);
}

View File

@ -100,4 +100,7 @@ public interface IDesVolumeFileService extends IService<DesVolumeFile> {
TableDataInfo<DesVolumeFileAppVo> queryAppPageList(DesVolumeFileAppPageDto dto, PageQuery pageQuery);
AuditFileVo auditFile(AuditFileDto dto);
}

View File

@ -28,6 +28,7 @@ import org.dromara.design.domain.bo.DesUserBo;
import org.dromara.design.domain.dto.volumecatalog.DesVolumeCatalogCreateReq;
import org.dromara.design.domain.dto.volumecatalog.DesVolumeCatalogQueryReq;
import org.dromara.design.domain.dto.volumecatalog.DesVolumeCatalogUpdateReq;
import org.dromara.design.domain.vo.DelayContVo;
import org.dromara.design.domain.vo.volumecatalog.DesVolumeCatalogVo;
import org.dromara.design.mapper.DesVolumeCatalogMapper;
import org.dromara.design.service.*;
@ -43,6 +44,8 @@ import org.springframework.transaction.annotation.Transactional;
import java.io.IOException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
@ -236,6 +239,17 @@ public class DesVolumeCatalogServiceImpl extends ServiceImpl<DesVolumeCatalogMap
return list.stream().map(DesVolumeCatalog::getDesignSubitem).toList();
}
@Override
public DelayContVo delayCont(Long projectId) {
List<DesVolumeCatalog> list = this.lambdaQuery()
.eq(DesVolumeCatalog::getProjectId, projectId).list();
DelayContVo delayContVo = new DelayContVo();
delayContVo.setTotal(list.size());
delayContVo.setDelay((int)list.stream().filter(item -> item.getPlannedCompletion().isBefore(LocalDate.now()) && item.getDesignState().equals("2")).count());
delayContVo.setToday((int)list.stream().filter(item -> item.getPlannedCompletion().isEqual(LocalDate.now())).count());
return delayContVo;
}
/**
* 修改卷册目录
*
@ -353,6 +367,7 @@ public class DesVolumeCatalogServiceImpl extends ServiceImpl<DesVolumeCatalogMap
String auditStatus = req.getAuditStatus();
String isUpload = req.getIsUpload();
String designSubitem = req.getDesignSubitem();
String delay = req.getDelay();
// lqw.orderByDesc(DesVolumeCatalog::getCreateTime);
lqw.orderByAsc(DesVolumeCatalog::getSerialNumber);
lqw.like(StringUtils.isNotBlank(documentName), DesVolumeCatalog::getDocumentName, documentName);
@ -363,6 +378,16 @@ public class DesVolumeCatalogServiceImpl extends ServiceImpl<DesVolumeCatalogMap
lqw.exists("1".equals(isUpload), "SELECT 1 FROM des_volume_file WHERE volume_catalog_id = des_volume_catalog.design");
lqw.notExists("0".equals(isUpload), "SELECT 1 FROM des_volume_file WHERE volume_catalog_id = des_volume_catalog.design");
if("1".equals(delay)){
lqw.lt(DesVolumeCatalog::getPlannedCompletion, LocalDateTime.now());
lqw.eq(DesVolumeCatalog::getDesignState, "2");
}
if("0".equals(delay)){
lqw.and(wrapper -> wrapper.gt(DesVolumeCatalog::getPlannedCompletion, LocalDateTime.now())
.or()
.eq(DesVolumeCatalog::getDesignState, "1")
);
}
return lqw;
}

View File

@ -11,6 +11,7 @@ import org.dromara.device.domain.bo.DeviceAccessRecordBo;
import org.dromara.device.domain.vo.DeviceAccessRecordVo;
import org.dromara.device.domain.vo.DeviceInfoCountVo;
import org.dromara.device.service.IDeviceAccessRecordService;
import org.redisson.api.RList;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
@ -137,4 +138,13 @@ public class DeviceInfoController extends BaseController {
@PathVariable Long[] ids) {
return toAjax(deviceInfoService.deleteWithValidByIds(List.of(ids), true));
}
/**
* 设备信息列表
*/
@GetMapping("/deviceList")
public R<List<DeviceInfoVo>> deviceList(DeviceInfoBo bo) {
List<DeviceInfoVo> list = deviceInfoService.queryList(bo);
return R.ok(list);
}
}

View File

@ -95,5 +95,10 @@ public class DeviceAccessRecordVo implements Serializable {
@ExcelProperty(value = "详细说明", converter = ExcelDictConvert.class)
private String details;
/**
* 创建时间
*/
private Date createTime;
}

View File

@ -16,6 +16,7 @@ import org.dromara.device.domain.DeviceAccessRecord;
import org.dromara.device.mapper.DeviceAccessRecordMapper;
import org.dromara.device.service.IDeviceAccessRecordService;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
import java.util.Collection;
@ -77,6 +78,16 @@ public class DeviceAccessRecordServiceImpl extends ServiceImpl<DeviceAccessRecor
lqw.eq(bo.getDeviceId() != null, DeviceAccessRecord::getDeviceId, bo.getDeviceId());
lqw.like(StringUtils.isNotBlank(bo.getDeviceName()), DeviceAccessRecord::getDeviceName, bo.getDeviceName());
lqw.eq(StringUtils.isNotBlank(bo.getStatus()), DeviceAccessRecord::getStatus, bo.getStatus());
if(bo.getOperateTime() != null){
LocalDateTime operateTime = bo.getOperateTime();
//一天的开始
LocalDateTime startTime = operateTime.withHour(0).withMinute(0).withSecond(0);
//一天的结束
LocalDateTime endTime = operateTime.withHour(23).withMinute(59).withSecond(59);
lqw.between(DeviceAccessRecord::getOperateTime,startTime,endTime);
}
lqw.eq(bo.getOperateTime() != null, DeviceAccessRecord::getOperateTime, bo.getOperateTime());
lqw.eq(StringUtils.isNotBlank(bo.getLocation()), DeviceAccessRecord::getLocation, bo.getLocation());
lqw.eq(bo.getOperatorId() != null, DeviceAccessRecord::getOperatorId, bo.getOperatorId());

View File

@ -55,7 +55,10 @@ public class DeviceInfoServiceImpl extends ServiceImpl<DeviceInfoMapper, DeviceI
*/
@Override
public DeviceInfoVo queryById(Long id){
return baseMapper.selectVoById(id);
DeviceInfoVo deviceInfoVo = baseMapper.selectVoById(id);
DeviceType byId = deviceTypeService.getById(deviceInfoVo.getTypeId());
deviceInfoVo.setTypeName(byId.getTypeName());
return deviceInfoVo;
}
/**

View File

@ -165,6 +165,7 @@ public class DeviceTypeServiceImpl extends ServiceImpl<DeviceTypeMapper, DeviceT
List<DeviceType> list = baseMapper.selectList(queryWrapper);
checkIds.addAll(list.stream().map(DeviceType::getId).toList());
}
checkIds.addAll(ids);
List<DeviceInfo> list = deviceInfoService.lambdaQuery().in(DeviceInfo::getTypeId, checkIds).list();
if(CollectionUtil.isNotEmpty(list)){
throw new ServiceException("当前类型或子级类型存在设备");

View File

@ -1,17 +1,15 @@
package org.dromara.gps.domain.bo;
import org.dromara.gps.domain.GpsEquipmentSon;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.gps.domain.GpsEquipmentSon;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;
/**
* GPS设备定位信息业务对象 gps_equipment_son
@ -137,4 +135,14 @@ public class GpsEquipmentSonBo extends BaseEntity {
*/
private Long tripId;
/**
* 用户名称
*/
private String userName;
/**
* 头像地址
*/
private String avatar;
}

View File

@ -11,7 +11,9 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import jakarta.annotation.Resource;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.domain.dto.OssDTO;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.service.OssService;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
@ -52,9 +54,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.Duration;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.*;
import java.util.*;
/**
@ -83,6 +83,8 @@ public class GpsEquipmentServiceImpl extends ServiceImpl<GpsEquipmentMapper, Gps
private IVehVehicleInfoService iVehVehicleInfoService;
@Autowired
private IVehVehicleTripService iVehVehicleTripService;
@Autowired
private OssService ossService;
@Resource
private IGpsSafetyUserRecordService safetyUserRecordService;
@ -605,6 +607,42 @@ public class GpsEquipmentServiceImpl extends ServiceImpl<GpsEquipmentMapper, Gps
WebSocketUtils.publishAll(pushContent);
}
}
//接收一次则将存入Redis中数据累加1
// 获取当天结束时间
LocalDate today = LocalDate.now();
LocalDateTime endOfDay = LocalDateTime.of(today, LocalTime.MAX); // 23:59:59.999999999
long expireAt = endOfDay.atZone(ZoneId.systemDefault()).toEpochSecond();
// 计算剩余秒数
long now = System.currentTimeMillis() / 1000;
long expireSeconds = expireAt - now;
//检查是否存在
boolean rydw = RedisUtils.isExistsObject("rydw_cs");
if (!rydw) {
RedisUtils.setCacheObject("rydw_cs",0,Duration.ofSeconds(expireSeconds));
}else {
Integer cacheObject = RedisUtils.getCacheObject("rydw_cs");
cacheObject = cacheObject + 1;
RedisUtils.setCacheObject("rydw_cs",cacheObject,true);
}
//将打卡用户存入Redis中 过期时间为当天23:59:59
SysUserVo sysUserVo = userService.queryById(gpsEquipment.getUserId());
if (sysUserVo != null){
if (sysUserVo.getNickName() != null) {
gpsEquipmentSonBo.setUserName(sysUserVo.getNickName());
}
if (sysUserVo.getAvatar() != null){
List<OssDTO> ossDTOS = ossService.selectByIds(sysUserVo.getAvatar().toString());
if (ossDTOS != null && !ossDTOS.isEmpty()) {
gpsEquipmentSonBo.setAvatar(ossDTOS.getFirst().getUrl());
}
}
}
gpsEquipmentSonBo.setCreateTime(new Date());
setPersonToRedis(gpsEquipmentSonBo,expireSeconds);
// 保存到Redis并设置过期监听
updateDeviceAliveStatus(gpsEquipment.getClientId());
}
@ -645,5 +683,18 @@ public class GpsEquipmentServiceImpl extends ServiceImpl<GpsEquipmentMapper, Gps
return gpsEquipmentSonService.getUserOrClientDate(bo);
}
/**
* 打卡人员存入redis
*/
private void setPersonToRedis(GpsEquipmentSonBo entity,long time) {
String key = "rydw_userId_:" + entity.getUserId();
// 先删除可能存在的旧数据
if (RedisUtils.isExistsObject(key)) {
RedisUtils.deleteObject(key);
}
RedisUtils.setCacheObject(key, entity, Duration.ofSeconds(time));
}
}

View File

@ -61,4 +61,14 @@ public interface Ys7Constant {
*/
String setDeviceVideoUrlByPost = "https://open.ys7.com/api/lapp/device/fullday/record/switch/set";
/**
* 摄像头查询设备本地录像 Get
*/
String getDeviceLocalVideoUrlByGet = "https://open.ys7.com/api/v3/device/local/video/unify/query";
/**
* 获取播放地址 POST
*/
String getDeviceLappVideoUrlByPost = "https://open.ys7.com/api/lapp/v2/live/address/get";
}

View File

@ -4,17 +4,20 @@ import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.constant.HttpStatus;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.manager.ys7manager.vo.Ys7NoDataResponseVo;
import org.dromara.manager.ys7manager.vo.Ys7PageResponseVo;
import org.dromara.manager.ys7manager.vo.Ys7QueryDeviceResponseVo;
import org.dromara.manager.ys7manager.vo.Ys7ResponseVo;
import org.dromara.common.core.utils.TimestampUtils;
import org.dromara.manager.ys7manager.dto.DeviceLocalVideoRequstDto;
import org.dromara.manager.ys7manager.dto.DevicePlayBackUrlRequstDto;
import org.dromara.manager.ys7manager.vo.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Objects;
/**
* @author lilemy
@ -290,4 +293,159 @@ public class Ys7RequestUtils {
}
}
/**
* 获取播放地址
* @param dto
* @return
*/
public static String getDevicePlayBackUrl(DevicePlayBackUrlRequstDto dto) {
if (StringUtils.isAnyBlank(dto.getAccessToken(), dto.getDeviceSerial())) {
throw new ServiceException("获取回放录像参数为空", HttpStatus.BAD_REQUEST);
}
HashMap<String, Object> paramMap = new HashMap<>();
paramMap.put("accessToken", dto.getAccessToken());
paramMap.put("deviceSerial", dto.getDeviceSerial());
if (dto.getChannelNo() != null) {
paramMap.put("channelNo", dto.getChannelNo());
}
if (dto.getQuality() != null) {
paramMap.put("quality", dto.getQuality());
}
if (dto.getProtocol() != null) {
paramMap.put("protocol", dto.getProtocol());
}
if (dto.getStartTime() != null) {
paramMap.put("startTime", dto.getStartTime());
}
if (dto.getEndTime() != null) {
paramMap.put("stopTime", dto.getEndTime());
}
if (dto.getType() != null) {
paramMap.put("type", dto.getType());
}
if (dto.getExpireTime() != null) {
paramMap.put("expireTime", dto.getExpireTime());
}
if (dto.getRecType() != null) {
paramMap.put("recType", dto.getRecType());
}
if (dto.getCode() != null) {
paramMap.put("code", dto.getCode());
}
if (dto.getSupportH265() != null) {
paramMap.put("supportH265", dto.getSupportH265());
}
if (dto.getPlaybackSpeed() != null) {
paramMap.put("playbackSpeed", dto.getPlaybackSpeed());
}
if (dto.getGbchannel() != null) {
paramMap.put("gbchannel", dto.getGbchannel());
}
String errorMsg = "获取回放录像请求失败";
try (HttpResponse response = HttpRequest.post(Ys7Constant.getDeviceLappVideoUrlByPost)
.form(paramMap)
.execute()) {
if (!response.isOk()) {
log.error("{}{}", errorMsg, response.getStatus());
throw new ServiceException(errorMsg + response.getStatus());
}
String body = response.body();
log.info("本地录像body{}",body);
Ys7ResponseVo responseVo = JSONUtil.toBean(body, Ys7ResponseVo.class);
if (!responseVo.getCode().equals("200")) {
log.error("{},状态码:{}{}", errorMsg, responseVo.getCode(), responseVo.getMsg());
throw new ServiceException(errorMsg + responseVo.getMsg());
}
String data = responseVo.getData();
String picUrl = JSONUtil.parseObj(data).getStr("url");
log.info("获取回放录像请求成功,设备[{}]回放成功,通道:{}url{}", dto.getDeviceSerial(), dto.getChannelNo(), picUrl);
return picUrl;
}
}
/**
* 查询设备某天的本地录像
* @param dto
* @return
*/
public static List<DeviceLocalVideoRecordsVo> getDeviceLocalVideo(DeviceLocalVideoRequstDto dto) {
if (StringUtils.isAnyBlank(dto.getAccessToken(), dto.getDeviceSerial(),dto.getStartTime(), dto.getEndTime())) {
throw new ServiceException("查询设备本地录像参数为空", HttpStatus.BAD_REQUEST);
}
dto.setStartTime(Objects.requireNonNull(TimestampUtils.parseDateToTimestamp(dto.getStartTime())).toString());
dto.setEndTime(Objects.requireNonNull(TimestampUtils.parseDateToTimestamp(dto.getEndTime())).toString());
List<DeviceLocalVideoRecordsVo> vos = new ArrayList<>();
getRexords(dto, vos);
return vos;
}
private static void getRexords(DeviceLocalVideoRequstDto dto, List<DeviceLocalVideoRecordsVo> vos) {
String errorMsg = "查询设备本地录像请求失败";
String body = getDevicceLocalVideoBody(dto);
log.info("本地录像body{}",body);
JSONObject jsonObject = JSONUtil.parseObj(body);
DeviceLocalVideoMetaVo meta = JSONUtil.toBean(jsonObject.getJSONObject("meta"), DeviceLocalVideoMetaVo.class);
if (!meta.getCode().equals("200")) {
log.error("{},状态码:{}{}", errorMsg, meta.getCode(), meta.getMessage());
throw new ServiceException(errorMsg + meta.getMessage());
}
DeviceLocalVideoDataVo data = JSONUtil.toBean(jsonObject.getJSONObject("data"), DeviceLocalVideoDataVo.class);
if (data != null) {
List<DeviceLocalVideoRecordsVo> list = JSONUtil.toList(data.getRecords(), DeviceLocalVideoRecordsVo.class);
if (list != null && !list.isEmpty()) {
list.forEach(vo -> {
vo.setStartTime(TimestampUtils.extractTime(vo.getStartTime()));
vo.setEndTime(TimestampUtils.extractTime(vo.getEndTime()));
});
vos.addAll(list);
}
if (data.getHasMore()){
dto.setStartTime(data.getNextFileTime());
if (Long.parseLong(dto.getStartTime()) > Long.parseLong(dto.getEndTime())){
return;
}
getRexords(dto, vos);
}
}
}
private static String getDevicceLocalVideoBody(DeviceLocalVideoRequstDto dto) {
// 2. 构建Header参数接口文档的Header部分
HttpRequest request = HttpRequest.get(Ys7Constant.getDeviceLocalVideoUrlByGet)
.header("accessToken", dto.getAccessToken()) // Header参数accessToken
.header("deviceSerial", dto.getDeviceSerial());// Header参数deviceSerial
// 可选HeaderlocalIndex对应dto的channelNo
if (dto.getChannelNo() != null) {
request.header("channelNo", dto.getChannelNo().toString());
}
// 3. 构建Query参数接口文档的query部分
request.form("startTime", dto.getStartTime()) // Query必传startTime
.form("endTime", dto.getEndTime()); // Query必传endTime
// 可选Query参数
if (dto.getRecordType() != null) {
request.form("recordType", dto.getRecordType().toString());
}
if (dto.getIsQueryByNvr() != null) {
request.form("isQueryByNvr", dto.getIsQueryByNvr().toString());
}
if (dto.getLocation() != null) {
request.form("location", dto.getLocation().toString());
}
if (dto.getPageSize() != null) {
request.form("pageSize", dto.getPageSize().toString());
}
String errorMsg = "查询设备本地录像请求失败";
try (HttpResponse response = request.execute()) {
if (!response.isOk()) {
log.error("{}{}", errorMsg, response.getStatus());
throw new ServiceException(errorMsg + response.getStatus());
}
return response.body();
}
}
}

View File

@ -0,0 +1,18 @@
package org.dromara.manager.ys7manager.dto;
import lombok.Data;
import java.io.Serializable;
@Data
public class DeviceLocalVideoRequstDto implements Serializable {
private String accessToken; //toke
private String deviceSerial; //设备序列号
private Integer channelNo; // 通道号默认1
private Integer recordType; // 1:定时录像 2:事件录像 3:智能-车 4:智能-人形 5:自动浓缩录像,不填默认查询所有类型
private String startTime; // 回放开始时间格式yyyy-MM-dd HH:mm:ss
private String endTime; // 回放结束时间格式yyyy-MM-dd HH:mm:ss
private Integer isQueryByNvr; // 是否反查NVR录像0-不反查(默认)1-反查NVR
private Integer location; // 录像检索位置1-本地录像检索(默认)2-CVR中心录像检索
private Integer pageSize; // 分页的页面大小默认50最大200
}

View File

@ -0,0 +1,23 @@
package org.dromara.manager.ys7manager.dto;
import lombok.Data;
import java.io.Serializable;
@Data
public class DevicePlayBackUrlRequstDto implements Serializable {
private String accessToken; //toke
private String deviceSerial; //设备序列号
private Integer channelNo; // 通道号默认1
private Integer protocol; // 流协议1-ezopen、2-hls、3-rtmp、4-flv默认1
private String code; // 视频加密密码
private Integer expireTime; // 过期时长30秒-720天
private String type; // 地址类型1-预览2-本地录像回放3-云存储录像回放默认1
private Integer quality; // 清晰度1-高清2-流畅
private String startTime; // 回放开始时间格式yyyy-MM-dd HH:mm:ss
private String endTime; // 回放结束时间格式yyyy-MM-dd HH:mm:ss
private Integer supportH265; // 是否需要H265编码1-是0-否
private Integer recType; // 回放源0-系统自动选择1-云存储2-本地录像。非必选默认为0
private String playbackSpeed; // 回放倍速:-1、0.5、1、2、4、8、16仅支持flv协议+回放类型)
private String gbchannel; // 国标设备通道编号
}

View File

@ -0,0 +1,29 @@
package org.dromara.manager.ys7manager.vo;
import lombok.Data;
/**
* @author lilemy
* @date 2025/6/12 17:14
*/
@Data
public class DeviceLocalVideoDataVo {
/**
* 响应内容
*/
private String records;
//该录像文件是否来自关联的nvr
private String fromNvr;
// fromNvr为true则返回关联NVR设备序列号否则返回入参填的设备序列号。
private String deviceSerial;
// fromNvr为true则返回关联NVR设备通道号否则返回入参填的设备通道号
private String localIndex;
//是否存在更多录像文件
private Boolean hasMore;
// hasMore为true时该参数值为下一个录像文件的开始时间。如需分页查询该参数值可作为下一页录像文件查询的开始时间。
private String nextFileTime;
}

View File

@ -0,0 +1,27 @@
package org.dromara.manager.ys7manager.vo;
import lombok.Data;
/**
* @author lilemy
* @date 2025/6/12 17:14
*/
@Data
public class DeviceLocalVideoMetaVo {
/**
* 响应码
*/
private String code;
/**
* 响应信息
*/
private String message;
/**
* 响应信息
*/
private String moreInfo;
}

View File

@ -0,0 +1,27 @@
package org.dromara.manager.ys7manager.vo;
import lombok.Data;
/**
* @author lilemy
* @date 2025/6/12 17:14
*/
@Data
public class DeviceLocalVideoRecordsVo {
/**
* 开始时间
*/
private String startTime;
/**
* 结束时间
*/
private String endTime;
//录像类型
private String type;
//录像文件大小,单位:字节
private String size;
}

View File

@ -0,0 +1,149 @@
package org.dromara.mechanical.jxaqgl.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.dromara.device.domain.bo.DeviceInfoBo;
import org.dromara.device.domain.vo.DeviceInfoVo;
import org.dromara.device.service.IDeviceInfoService;
import org.dromara.mechanical.jxaqgl.domain.vo.JxAnqjcgHeadVo;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.mechanical.jxaqgl.domain.vo.JxAqjcglVo;
import org.dromara.mechanical.jxaqgl.domain.bo.JxAqjcglBo;
import org.dromara.mechanical.jxaqgl.service.IJxAqjcglService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
* 机械安全检查记录
*
* @author Lion Li
* @date 2025-12-03
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/jxaqgl/aqjcgl")
public class JxAqjcglController extends BaseController {
private final IJxAqjcglService jxAqjcglService;
private final IDeviceInfoService deviceInfoService;
/**
* 查询设备信息列表
*/
@SaCheckPermission("jxaqgl:aqjcgl:list")
@GetMapping("/getlist")
public TableDataInfo<DeviceInfoVo> list(DeviceInfoBo bo, PageQuery pageQuery) {
return deviceInfoService.queryPageList(bo, pageQuery);
}
/**
* 查询近30天机械安全检查记录头部数据
*/
@SaCheckPermission("jxaqgl:aqjcgl:list")
@GetMapping("/listHead")
public R<JxAnqjcgHeadVo> listHead(JxAqjcglBo bo, PageQuery pageQuery) {
return R.ok(jxAqjcglService.listHead(bo, pageQuery));
}
/**
* 查询近6月机械安全检查结果趋势
*/
@SaCheckPermission("jxaqgl:aqjcgl:list")
@GetMapping("/listHeadJgqs")
public List<JxAnqjcgHeadVo> listHeadJgqs(JxAqjcglBo bo, PageQuery pageQuery) {
return jxAqjcglService.listHeadJgqs(bo, pageQuery);
}
/**
* 查询机械安全检查记录列表
*/
@SaCheckPermission("jxaqgl:aqjcgl:list")
@GetMapping("/list")
public TableDataInfo<JxAqjcglVo> list(JxAqjcglBo bo, PageQuery pageQuery) {
return jxAqjcglService.queryPageList(bo, pageQuery);
}
/**
* 导出机械安全检查记录列表
*/
@SaCheckPermission("jxaqgl:aqjcgl:export")
@Log(title = "机械安全检查记录", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(JxAqjcglBo bo, HttpServletResponse response) {
List<JxAqjcglVo> list = jxAqjcglService.queryList(bo);
ExcelUtil.exportExcel(list, "机械安全检查记录", JxAqjcglVo.class, response);
}
/**
* 获取机械安全检查记录详细信息
*
* @param id 主键
*/
@SaCheckPermission("jxaqgl:aqjcgl:query")
@GetMapping("/{id}")
public R<JxAqjcglVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(jxAqjcglService.queryById(id));
}
/**
* 新增机械安全检查记录
*/
@SaCheckPermission("jxaqgl:aqjcgl:add")
@Log(title = "机械安全检查记录", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody JxAqjcglBo bo) {
return toAjax(jxAqjcglService.insertByBo(bo));
}
/**
* 修改机械安全检查记录
*/
@SaCheckPermission("jxaqgl:aqjcgl:edit")
@Log(title = "机械安全检查记录", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody JxAqjcglBo bo) {
return toAjax(jxAqjcglService.updateByBo(bo));
}
/**
* 删除机械安全检查记录
*
* @param ids 主键串
*/
@SaCheckPermission("jxaqgl:aqjcgl:remove")
@Log(title = "机械安全检查记录", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(jxAqjcglService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@ -0,0 +1,141 @@
package org.dromara.mechanical.jxaqgl.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
import java.time.LocalDate;
/**
* 机械安全检查记录对象 jx_aqjcgl
*
* @author Lion Li
* @date 2025-12-03
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("jx_aqjcgl")
public class JxAqjcgl extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "id")
private Long id;
/**
* 检查单编号
*/
private String inspectionOrderNo;
/**
* 检查日期
*/
private LocalDate inspectionDate;
/**
* 检查类型
*/
private String inspectionType;
/**
* 检查人
*/
private Long inspector;
/**
* 参与人(多个用逗号分隔)
*/
private String participants;
/**
* 所属项目(如田东)
*/
private Long projectStation;
/**
* 所属项目名称(如田东)
*/
private String projectName;
/**
* 机械设备id
*/
private String equipmentId;
/**
* 机械设备名称
*/
private String equipmentName;
/**
* 不通过原因
*/
private String notPassCause;
/**
* 机械设备编号
*/
private String equipmentCode;
/**
* 设备类型(下拉选择项)
*/
private String equipmentType;
/**
* 检查结果
*/
private String inspectionResult;
/**
* 风险等级
*/
private String riskGrade;
/**
* 整改状态
*/
private String abarbeitungState;
/**
* 整改责任人
*/
private Long abarbeitung;
/**
* 选择分包还是班组
*/
private String rectificationUnit;
/**
* 整改单位
*/
private Long rectificationId;
/**
* 整改日期
*/
private LocalDate abarbeitungDate;
/**
* 审核状态
*/
private String auditStatus;
/**
* 文件id (多个文件逗号分隔)
*/
private String fileId;
/**
* 文件id (多个文件逗号分隔)
*/
private String pdfId;
}

View File

@ -0,0 +1,46 @@
package org.dromara.mechanical.jxaqgl.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* 机械安全检查记录——检查内容对象 jx_aqjcgl_jcnr
*
* @author Lion Li
* @date 2025-12-03
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("jx_aqjcgl_jcnr")
public class JxAqjcglJcnr extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "id")
private Long id;
/**
* 主表ID
*/
private Long masterId;
/**
* 检查内容value
*/
private String examineValue;
/**
* 检查内容数据
*/
private String examineContent;
}

View File

@ -0,0 +1,41 @@
package org.dromara.mechanical.jxaqgl.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* 机械安全检查记录——问题详情对象 jx_aqjcgl_wtxq
*
* @author Lion Li
* @date 2025-12-03
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("jx_aqjcgl_wtxq")
public class JxAqjcglWtxq extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "id")
private Long id;
/**
* 主表ID
*/
private Long masterId;
/**
* 问题详情
*/
private String issueParticulars;
}

View File

@ -0,0 +1,24 @@
package org.dromara.mechanical.jxaqgl.domain;
import lombok.Data;
import java.time.LocalDate;
@Data
public class MonthDateRange {
private LocalDate startDate; // 当月1号
private LocalDate endDate; // 当月最后一天
private String yearMonth; // 年月标识
// 构造方法
public MonthDateRange(LocalDate startDate, LocalDate endDate, String yearMonth) {
this.startDate = startDate;
this.endDate = endDate;
this.yearMonth = yearMonth;
}
}

View File

@ -0,0 +1,164 @@
package org.dromara.mechanical.jxaqgl.domain.bo;
import org.dromara.mechanical.jxaqgl.domain.JxAqjcgl;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.time.LocalDate;
import java.util.List;
/**
* 机械安全检查记录业务对象 jx_aqjcgl
*
* @author Lion Li
* @date 2025-12-03
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = JxAqjcgl.class, reverseConvertGenerate = false)
public class JxAqjcglBo extends BaseEntity {
/**
* 主键ID
*/
@NotNull(message = "主键ID不能为空", groups = { EditGroup.class })
private Long id;
/**
* 检查单编号
*/
private String inspectionOrderNo;
/**
* 检查日期
*/
@NotNull(message = "检查日期不能为空", groups = { AddGroup.class, EditGroup.class })
private LocalDate inspectionDate;
/**
* 检查类型
*/
@NotBlank(message = "检查类型不能为空", groups = { AddGroup.class, EditGroup.class })
private String inspectionType;
/**
* 检查人
*/
@NotNull(message = "检查人不能为空", groups = { AddGroup.class, EditGroup.class })
private Long inspector;
/**
* 参与人(多个用逗号分隔)
*/
private String participants;
/**
* 整改状态
*/
private String abarbeitungState;
/**
* 选择分包还是班组
*/
private String rectificationUnit;
/**
* 整改单位
*/
private Long rectificationId;
/**
* 所属项目(如田东)
*/
@NotNull(message = "所属项目(如田东)不能为空", groups = { AddGroup.class, EditGroup.class })
private Long projectStation;
/**
* 所属项目名称(如田东)
*/
@NotNull(message = "所属项目名称(如田东)不能为空", groups = { AddGroup.class, EditGroup.class })
private String projectName;
/**
* 机械设备id
*/
@NotBlank(message = "机械设备id不能为空", groups = { AddGroup.class, EditGroup.class })
private String equipmentId;
/**
* 机械设备名称
*/
@NotBlank(message = "机械设备名称不能为空", groups = { AddGroup.class, EditGroup.class })
private String equipmentName;
/**
* 机械设备编号
*/
// @NotBlank(message = "机械设备编号不能为空", groups = { AddGroup.class, EditGroup.class })
private String equipmentCode;
/**
* 设备类型(下拉选择项)
*/
@NotBlank(message = "设备类型(下拉选择项)不能为空", groups = { AddGroup.class, EditGroup.class })
private String equipmentType;
/**
* 检查结果
*/
@NotBlank(message = "检查结果不能为空", groups = { AddGroup.class, EditGroup.class })
private String inspectionResult;
/**
* 不通过原因
*/
private String notPassCause;
/**
* 风险等级
*/
private String riskGrade;
/**
* 整改责任人
*/
private Long abarbeitung;
/**
* 整改日期
*/
private LocalDate abarbeitungDate;
/**
* 审核状态
*/
private String auditStatus;
/**
* 文件id (多个文件逗号分隔)
*/
private String fileId;
/**
* 文件id (多个文件逗号分隔)
*/
private String pdfId;
/**
* 检查内容
*/
private List<JxAqjcglJcnrBo> jcnrList;
/**
* 问题详情
*/
private List<JxAqjcglWtxqBo> wtxqBoList;
}

View File

@ -0,0 +1,47 @@
package org.dromara.mechanical.jxaqgl.domain.bo;
import org.dromara.mechanical.jxaqgl.domain.JxAqjcglJcnr;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
/**
* 机械安全检查记录——检查内容业务对象 jx_aqjcgl_jcnr
*
* @author Lion Li
* @date 2025-12-03
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = JxAqjcglJcnr.class, reverseConvertGenerate = false)
public class JxAqjcglJcnrBo extends BaseEntity {
/**
* 主键ID
*/
@NotNull(message = "主键ID不能为空", groups = { EditGroup.class })
private Long id;
/**
* 主表ID
*/
@NotNull(message = "主表ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long masterId;
/**
* 检查内容key
*/
@NotBlank(message = "检查内容value不能为空", groups = { AddGroup.class, EditGroup.class })
private String examineValue;
/**
* 检查内容数据
*/
@NotBlank(message = "检查内容数据不能为空", groups = { AddGroup.class, EditGroup.class })
private String examineContent;
}

View File

@ -0,0 +1,42 @@
package org.dromara.mechanical.jxaqgl.domain.bo;
import org.dromara.mechanical.jxaqgl.domain.JxAqjcglWtxq;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
/**
* 机械安全检查记录——问题详情业务对象 jx_aqjcgl_wtxq
*
* @author Lion Li
* @date 2025-12-03
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = JxAqjcglWtxq.class, reverseConvertGenerate = false)
public class JxAqjcglWtxqBo extends BaseEntity {
/**
* 主键ID
*/
@NotNull(message = "主键ID不能为空", groups = { EditGroup.class })
private Long id;
/**
* 主表ID
*/
@NotNull(message = "主表ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long masterId;
/**
* 问题详情
*/
@NotBlank(message = "问题详情不能为空", groups = { AddGroup.class, EditGroup.class })
private String issueParticulars;
}

View File

@ -0,0 +1,69 @@
package org.dromara.mechanical.jxaqgl.domain.vo;
import lombok.Data;
import java.io.Serializable;
@Data
public class JxAnqjcgHeadVo implements Serializable {
/**
* 月份
*/
private String month = "";
/**
* 总数
*/
private Long zs = 0L;
/**
* 未通过
*/
private Long wtg = 0L;
/**
* 通过
*/
private Long tg = 0L;
/**
* 待检测
*/
private Long djc = 0L;
/**
* 整改完成率
*/
// private String wcl = "0%";
/**
* 日常巡检
*/
private Long rcxj = 0L;
/**
* 周检
*/
private Long zj = 0L;
/**
* 月检
*/
private Long yj = 0L;
/**
* 专项检查
*/
private Long zxjc = 0L;
/**
* 复检
*/
private Long fj = 0L;
}

View File

@ -0,0 +1,55 @@
package org.dromara.mechanical.jxaqgl.domain.vo;
import org.dromara.mechanical.jxaqgl.domain.JxAqjcglJcnr;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 机械安全检查记录——检查内容视图对象 jx_aqjcgl_jcnr
*
* @author Lion Li
* @date 2025-12-03
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = JxAqjcglJcnr.class)
public class JxAqjcglJcnrVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@ExcelProperty(value = "主键ID")
private Long id;
/**
* 主表ID
*/
@ExcelProperty(value = "主表ID")
private Long masterId;
/**
* 检查内容key
*/
@ExcelProperty(value = "检查内容value")
private String examineValue;
/**
* 检查内容数据
*/
@ExcelProperty(value = "检查内容数据")
private String examineContent;
}

View File

@ -0,0 +1,222 @@
package org.dromara.mechanical.jxaqgl.domain.vo;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import jakarta.validation.constraints.NotBlank;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.translation.annotation.Translation;
import org.dromara.common.translation.constant.TransConstant;
import org.dromara.mechanical.jxaqgl.domain.JxAqjcgl;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.mechanical.jxaqgl.domain.JxAqjcglJcnr;
import org.dromara.mechanical.jxaqgl.domain.JxAqjcglWtxq;
import org.dromara.mechanical.jxaqgl.domain.bo.JxAqjcglJcnrBo;
import org.dromara.mechanical.jxaqgl.domain.bo.JxAqjcglWtxqBo;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDate;
import java.util.Date;
import java.util.List;
/**
* 机械安全检查记录视图对象 jx_aqjcgl
*
* @author Lion Li
* @date 2025-12-03
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = JxAqjcgl.class)
public class JxAqjcglVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@ExcelProperty(value = "主键ID")
private Long id;
/**
* 检查单编号
*/
@ExcelProperty(value = "检查单编号")
private String inspectionOrderNo;
/**
* 检查日期
*/
@ExcelProperty(value = "检查日期")
private LocalDate inspectionDate;
/**
* 检查类型
*/
@ExcelProperty(value = "检查类型")
private String inspectionType;
/**
* 检查人
*/
@ExcelProperty(value = "检查人")
private Long inspector;
/**
* 整改状态
*/
private String abarbeitungState;
/**
* 选择分包还是班组
*/
private String rectificationUnit;
/**
* 整改单位
*/
private Long rectificationId;
/**
* 整改单位
*/
private String rectificationName;
/**
* 检查人
*/
@ExcelProperty(value = "检查人")
@Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "inspector")
private String inspectorName;
/**
* 参与人(多个用逗号分隔)
*/
@ExcelProperty(value = "参与人")
private String participants;
/**
* 所属项目(如田东)
*/
@ExcelProperty(value = "所属项目(如田东)")
private Long projectStation;
/**
* 所属项目名称(如田东)
*/
@ExcelProperty(value = "所属项目名称(如田东)")
private String projectName;
/**
* 机械设备id
*/
@ExcelProperty(value = "机械设备id")
private String equipmentId;
/**
* 机械设备名称
*/
@ExcelProperty(value = "机械设备名称")
private String equipmentName;
/**
* 机械设备编号
*/
@ExcelProperty(value = "机械设备编号")
private String equipmentCode;
/**
* 设备类型
*/
@ExcelProperty(value = "设备类型")
private String equipmentType;
/**
* 检查结果
*/
@ExcelProperty(value = "检查结果")
private String inspectionResult;
/**
* 风险等级
*/
@ExcelProperty(value = "风险等级")
private String riskGrade;
/**
* 整改责任人
*/
@ExcelProperty(value = "整改责任人")
private Long abarbeitung;
/**
* 整改责任人
*/
@ExcelProperty(value = "整改责任人")
@Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "abarbeitung")
private String abarbeitungName;
/**
* 整改日期
*/
@ExcelProperty(value = "整改日期")
private LocalDate abarbeitungDate;
/**
* 审核状态
*/
@ExcelProperty(value = "审核状态")
private String auditStatus;
/**
* 文件id (多个文件逗号分隔)
*/
@ExcelProperty(value = "文件id ", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "多=个文件逗号分隔")
private String fileId;
/**
* 文件id (多个文件逗号分隔)
*/
private String pdfId;
/**
* 不通过原因
*/
private String notPassCause;
/**
* 创建者
*/
@TableField(fill = FieldFill.INSERT)
private Long createBy;
/**
* 创建者
*/
@Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "createBy")
@TableField(fill = FieldFill.INSERT)
private Long createByname;
/**
* 检查内容
*/
private List<JxAqjcglJcnr> jcnrList;
/**
* 问题详情
*/
private List<JxAqjcglWtxq> wtxqBoList;
}

View File

@ -0,0 +1,50 @@
package org.dromara.mechanical.jxaqgl.domain.vo;
import org.dromara.mechanical.jxaqgl.domain.JxAqjcglWtxq;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 机械安全检查记录——问题详情视图对象 jx_aqjcgl_wtxq
*
* @author Lion Li
* @date 2025-12-03
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = JxAqjcglWtxq.class)
public class JxAqjcglWtxqVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@ExcelProperty(value = "主键ID")
private Long id;
/**
* 主表ID
*/
@ExcelProperty(value = "主表ID")
private Long masterId;
/**
* 问题详情
*/
@ExcelProperty(value = "问题详情")
private String issueParticulars;
}

View File

@ -0,0 +1,15 @@
package org.dromara.mechanical.jxaqgl.mapper;
import org.dromara.mechanical.jxaqgl.domain.JxAqjcglJcnr;
import org.dromara.mechanical.jxaqgl.domain.vo.JxAqjcglJcnrVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 机械安全检查记录——检查内容Mapper接口
*
* @author Lion Li
* @date 2025-12-03
*/
public interface JxAqjcglJcnrMapper extends BaseMapperPlus<JxAqjcglJcnr, JxAqjcglJcnrVo> {
}

View File

@ -0,0 +1,15 @@
package org.dromara.mechanical.jxaqgl.mapper;
import org.dromara.mechanical.jxaqgl.domain.JxAqjcgl;
import org.dromara.mechanical.jxaqgl.domain.vo.JxAqjcglVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 机械安全检查记录Mapper接口
*
* @author Lion Li
* @date 2025-12-03
*/
public interface JxAqjcglMapper extends BaseMapperPlus<JxAqjcgl, JxAqjcglVo> {
}

View File

@ -0,0 +1,15 @@
package org.dromara.mechanical.jxaqgl.mapper;
import org.dromara.mechanical.jxaqgl.domain.JxAqjcglWtxq;
import org.dromara.mechanical.jxaqgl.domain.vo.JxAqjcglWtxqVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 机械安全检查记录——问题详情Mapper接口
*
* @author Lion Li
* @date 2025-12-03
*/
public interface JxAqjcglWtxqMapper extends BaseMapperPlus<JxAqjcglWtxq, JxAqjcglWtxqVo> {
}

View File

@ -0,0 +1,70 @@
package org.dromara.mechanical.jxaqgl.service;
import org.dromara.mechanical.jxaqgl.domain.vo.JxAqjcglJcnrVo;
import org.dromara.mechanical.jxaqgl.domain.bo.JxAqjcglJcnrBo;
import org.dromara.mechanical.jxaqgl.domain.JxAqjcglJcnr;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.Collection;
import java.util.List;
/**
* 机械安全检查记录——检查内容Service接口
*
* @author Lion Li
* @date 2025-12-03
*/
public interface IJxAqjcglJcnrService extends IService<JxAqjcglJcnr>{
/**
* 查询机械安全检查记录——检查内容
*
* @param id 主键
* @return 机械安全检查记录——检查内容
*/
JxAqjcglJcnrVo queryById(Long id);
/**
* 分页查询机械安全检查记录——检查内容列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 机械安全检查记录——检查内容分页列表
*/
TableDataInfo<JxAqjcglJcnrVo> queryPageList(JxAqjcglJcnrBo bo, PageQuery pageQuery);
/**
* 查询符合条件的机械安全检查记录——检查内容列表
*
* @param bo 查询条件
* @return 机械安全检查记录——检查内容列表
*/
List<JxAqjcglJcnrVo> queryList(JxAqjcglJcnrBo bo);
/**
* 新增机械安全检查记录——检查内容
*
* @param bo 机械安全检查记录——检查内容
* @return 是否新增成功
*/
Boolean insertByBo(JxAqjcglJcnrBo bo);
/**
* 修改机械安全检查记录——检查内容
*
* @param bo 机械安全检查记录——检查内容
* @return 是否修改成功
*/
Boolean updateByBo(JxAqjcglJcnrBo bo);
/**
* 校验并批量删除机械安全检查记录——检查内容信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@ -0,0 +1,76 @@
package org.dromara.mechanical.jxaqgl.service;
import org.dromara.common.core.domain.R;
import org.dromara.mechanical.jxaqgl.domain.vo.JxAnqjcgHeadVo;
import org.dromara.mechanical.jxaqgl.domain.vo.JxAqjcglVo;
import org.dromara.mechanical.jxaqgl.domain.bo.JxAqjcglBo;
import org.dromara.mechanical.jxaqgl.domain.JxAqjcgl;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.Collection;
import java.util.List;
/**
* 机械安全检查记录Service接口
*
* @author Lion Li
* @date 2025-12-03
*/
public interface IJxAqjcglService extends IService<JxAqjcgl>{
/**
* 查询机械安全检查记录
*
* @param id 主键
* @return 机械安全检查记录
*/
JxAqjcglVo queryById(Long id);
/**
* 分页查询机械安全检查记录列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 机械安全检查记录分页列表
*/
TableDataInfo<JxAqjcglVo> queryPageList(JxAqjcglBo bo, PageQuery pageQuery);
/**
* 查询符合条件的机械安全检查记录列表
*
* @param bo 查询条件
* @return 机械安全检查记录列表
*/
List<JxAqjcglVo> queryList(JxAqjcglBo bo);
/**
* 新增机械安全检查记录
*
* @param bo 机械安全检查记录
* @return 是否新增成功
*/
Boolean insertByBo(JxAqjcglBo bo);
/**
* 修改机械安全检查记录
*
* @param bo 机械安全检查记录
* @return 是否修改成功
*/
Boolean updateByBo(JxAqjcglBo bo);
/**
* 校验并批量删除机械安全检查记录信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
JxAnqjcgHeadVo listHead(JxAqjcglBo bo, PageQuery pageQuery);
List<JxAnqjcgHeadVo> listHeadJgqs(JxAqjcglBo bo, PageQuery pageQuery);
}

View File

@ -0,0 +1,70 @@
package org.dromara.mechanical.jxaqgl.service;
import org.dromara.mechanical.jxaqgl.domain.vo.JxAqjcglWtxqVo;
import org.dromara.mechanical.jxaqgl.domain.bo.JxAqjcglWtxqBo;
import org.dromara.mechanical.jxaqgl.domain.JxAqjcglWtxq;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.Collection;
import java.util.List;
/**
* 机械安全检查记录——问题详情Service接口
*
* @author Lion Li
* @date 2025-12-03
*/
public interface IJxAqjcglWtxqService extends IService<JxAqjcglWtxq>{
/**
* 查询机械安全检查记录——问题详情
*
* @param id 主键
* @return 机械安全检查记录——问题详情
*/
JxAqjcglWtxqVo queryById(Long id);
/**
* 分页查询机械安全检查记录——问题详情列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 机械安全检查记录——问题详情分页列表
*/
TableDataInfo<JxAqjcglWtxqVo> queryPageList(JxAqjcglWtxqBo bo, PageQuery pageQuery);
/**
* 查询符合条件的机械安全检查记录——问题详情列表
*
* @param bo 查询条件
* @return 机械安全检查记录——问题详情列表
*/
List<JxAqjcglWtxqVo> queryList(JxAqjcglWtxqBo bo);
/**
* 新增机械安全检查记录——问题详情
*
* @param bo 机械安全检查记录——问题详情
* @return 是否新增成功
*/
Boolean insertByBo(JxAqjcglWtxqBo bo);
/**
* 修改机械安全检查记录——问题详情
*
* @param bo 机械安全检查记录——问题详情
* @return 是否修改成功
*/
Boolean updateByBo(JxAqjcglWtxqBo bo);
/**
* 校验并批量删除机械安全检查记录——问题详情信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@ -0,0 +1,132 @@
package org.dromara.mechanical.jxaqgl.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.dromara.mechanical.jxaqgl.domain.bo.JxAqjcglJcnrBo;
import org.dromara.mechanical.jxaqgl.domain.vo.JxAqjcglJcnrVo;
import org.dromara.mechanical.jxaqgl.domain.JxAqjcglJcnr;
import org.dromara.mechanical.jxaqgl.mapper.JxAqjcglJcnrMapper;
import org.dromara.mechanical.jxaqgl.service.IJxAqjcglJcnrService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 机械安全检查记录——检查内容Service业务层处理
*
* @author Lion Li
* @date 2025-12-03
*/
@RequiredArgsConstructor
@Service
public class JxAqjcglJcnrServiceImpl extends ServiceImpl<JxAqjcglJcnrMapper, JxAqjcglJcnr> implements IJxAqjcglJcnrService {
private final JxAqjcglJcnrMapper baseMapper;
/**
* 查询机械安全检查记录——检查内容
*
* @param id 主键
* @return 机械安全检查记录——检查内容
*/
@Override
public JxAqjcglJcnrVo queryById(Long id){
return baseMapper.selectVoById(id);
}
/**
* 分页查询机械安全检查记录——检查内容列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 机械安全检查记录——检查内容分页列表
*/
@Override
public TableDataInfo<JxAqjcglJcnrVo> queryPageList(JxAqjcglJcnrBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<JxAqjcglJcnr> lqw = buildQueryWrapper(bo);
Page<JxAqjcglJcnrVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询符合条件的机械安全检查记录——检查内容列表
*
* @param bo 查询条件
* @return 机械安全检查记录——检查内容列表
*/
@Override
public List<JxAqjcglJcnrVo> queryList(JxAqjcglJcnrBo bo) {
LambdaQueryWrapper<JxAqjcglJcnr> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<JxAqjcglJcnr> buildQueryWrapper(JxAqjcglJcnrBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<JxAqjcglJcnr> lqw = Wrappers.lambdaQuery();
lqw.orderByDesc(JxAqjcglJcnr::getId);
lqw.eq(bo.getMasterId() != null, JxAqjcglJcnr::getMasterId, bo.getMasterId());
lqw.eq(StringUtils.isNotBlank(bo.getExamineContent()), JxAqjcglJcnr::getExamineContent, bo.getExamineContent());
return lqw;
}
/**
* 新增机械安全检查记录——检查内容
*
* @param bo 机械安全检查记录——检查内容
* @return 是否新增成功
*/
@Override
public Boolean insertByBo(JxAqjcglJcnrBo bo) {
JxAqjcglJcnr add = MapstructUtils.convert(bo, JxAqjcglJcnr.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}
/**
* 修改机械安全检查记录——检查内容
*
* @param bo 机械安全检查记录——检查内容
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(JxAqjcglJcnrBo bo) {
JxAqjcglJcnr update = MapstructUtils.convert(bo, JxAqjcglJcnr.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(JxAqjcglJcnr entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 校验并批量删除机械安全检查记录——检查内容信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
}

View File

@ -0,0 +1,363 @@
package org.dromara.mechanical.jxaqgl.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import jakarta.annotation.Resource;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.enums.InspectionRectificationUnitType;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.dromara.common.utils.BatchNumberGenerator;
import org.dromara.contractor.domain.SubContractor;
import org.dromara.contractor.service.ISubContractorService;
import org.dromara.mechanical.jxaqgl.domain.JxAqjcglJcnr;
import org.dromara.mechanical.jxaqgl.domain.JxAqjcglWtxq;
import org.dromara.mechanical.jxaqgl.domain.MonthDateRange;
import org.dromara.mechanical.jxaqgl.domain.bo.JxAqjcglJcnrBo;
import org.dromara.mechanical.jxaqgl.domain.bo.JxAqjcglWtxqBo;
import org.dromara.mechanical.jxaqgl.domain.vo.JxAnqjcgHeadVo;
import org.dromara.mechanical.jxaqgl.service.IJxAqjcglJcnrService;
import org.dromara.mechanical.jxaqgl.service.IJxAqjcglWtxqService;
import org.dromara.mechanical.jxgl.domain.vo.JxGzwxVo;
import org.dromara.mechanical.jxzgbh.domain.JxYhzgbh;
import org.dromara.mechanical.jxzgbh.domain.bo.JxYhzgbhBo;
import org.dromara.mechanical.jxzgbh.domain.bo.JxZgxxBo;
import org.dromara.mechanical.jxzgbh.service.IJxYhzgbhService;
import org.dromara.mechanical.jxzgbh.service.IJxZgxxService;
import org.dromara.project.domain.BusProjectTeam;
import org.dromara.project.service.IBusProjectService;
import org.dromara.project.service.IBusProjectTeamService;
import org.dromara.system.service.impl.SysOssServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.dromara.mechanical.jxaqgl.domain.bo.JxAqjcglBo;
import org.dromara.mechanical.jxaqgl.domain.vo.JxAqjcglVo;
import org.dromara.mechanical.jxaqgl.domain.JxAqjcgl;
import org.dromara.mechanical.jxaqgl.mapper.JxAqjcglMapper;
import org.dromara.mechanical.jxaqgl.service.IJxAqjcglService;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDate;
import java.util.*;
/**
* 机械安全检查记录Service业务层处理
*
* @author Lion Li
* @date 2025-12-03
*/
@RequiredArgsConstructor
@Service
public class JxAqjcglServiceImpl extends ServiceImpl<JxAqjcglMapper, JxAqjcgl> implements IJxAqjcglService {
private final JxAqjcglMapper baseMapper;
private final IJxAqjcglJcnrService jxAqjcglJcnrService;
private final IJxAqjcglWtxqService jxAqjcglWtxqService;
private final SysOssServiceImpl sysOssService;
@Resource
private ISubContractorService contractorService;
@Resource
private IBusProjectTeamService projectTeamService;
@Lazy
@Autowired
private IJxYhzgbhService jxYhzgbhService;
/**
* 查询机械安全检查记录
*
* @param id 主键
* @return 机械安全检查记录
*/
@Override
public JxAqjcglVo queryById(Long id){
JxAqjcglVo jxAqjcglVo = baseMapper.selectVoById(id);
saveValue(jxAqjcglVo);
return jxAqjcglVo;
}
private void saveValue(JxAqjcglVo jxAqjcglVo) {
if (jxAqjcglVo != null) {
List<JxAqjcglWtxq> jxAqjcglWtxqs = jxAqjcglWtxqService.getBaseMapper().selectList(new LambdaQueryWrapper<JxAqjcglWtxq>().eq(JxAqjcglWtxq::getMasterId, jxAqjcglVo.getId()));
List<JxAqjcglJcnr> jxAqjcglJcnrs = jxAqjcglJcnrService.getBaseMapper().selectList(new LambdaQueryWrapper<JxAqjcglJcnr>().eq(JxAqjcglJcnr::getMasterId, jxAqjcglVo.getId()));
jxAqjcglVo.setWtxqBoList(jxAqjcglWtxqs);
jxAqjcglVo.setJcnrList(jxAqjcglJcnrs);
// 关联整改单位信息
Long rectificationId = jxAqjcglVo.getRectificationId();
String rectificationUnit = jxAqjcglVo.getRectificationUnit();
if (rectificationId != null && rectificationUnit != null) {
if (rectificationUnit.equals(InspectionRectificationUnitType.CONTRACTOR.getValue())) {
SubContractor contractor = contractorService.getById(rectificationId);
jxAqjcglVo.setRectificationName(contractor.getName());
} else if (rectificationUnit.equals(InspectionRectificationUnitType.TEAM.getValue())) {
BusProjectTeam team = projectTeamService.getById(rectificationId);
if (team != null) {
jxAqjcglVo.setRectificationName(team.getTeamName());
}
}
}
}
}
/**
* 分页查询机械安全检查记录列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 机械安全检查记录分页列表
*/
@Override
public TableDataInfo<JxAqjcglVo> queryPageList(JxAqjcglBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<JxAqjcgl> lqw = buildQueryWrapper(bo);
Page<JxAqjcglVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询符合条件的机械安全检查记录列表
*
* @param bo 查询条件
* @return 机械安全检查记录列表
*/
@Override
public List<JxAqjcglVo> queryList(JxAqjcglBo bo) {
LambdaQueryWrapper<JxAqjcgl> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<JxAqjcgl> buildQueryWrapper(JxAqjcglBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<JxAqjcgl> lqw = Wrappers.lambdaQuery();
lqw.orderByDesc(JxAqjcgl::getId);
lqw.eq(StringUtils.isNotBlank(bo.getInspectionOrderNo()), JxAqjcgl::getInspectionOrderNo, bo.getInspectionOrderNo());
lqw.eq(bo.getInspectionDate() != null, JxAqjcgl::getInspectionDate, bo.getInspectionDate());
lqw.eq(StringUtils.isNotBlank(bo.getInspectionType()), JxAqjcgl::getInspectionType, bo.getInspectionType());
lqw.eq(bo.getInspector() != null, JxAqjcgl::getInspector, bo.getInspector());
lqw.eq(StringUtils.isNotBlank(bo.getParticipants()), JxAqjcgl::getParticipants, bo.getParticipants());
lqw.eq(bo.getProjectStation() != null, JxAqjcgl::getProjectStation, bo.getProjectStation());
lqw.like(bo.getProjectName() != null, JxAqjcgl::getProjectName, bo.getProjectName());
lqw.eq(StringUtils.isNotBlank(bo.getEquipmentId()), JxAqjcgl::getEquipmentId, bo.getEquipmentId());
lqw.like(StringUtils.isNotBlank(bo.getEquipmentName()), JxAqjcgl::getEquipmentName, bo.getEquipmentName());
lqw.eq(StringUtils.isNotBlank(bo.getEquipmentCode()), JxAqjcgl::getEquipmentCode, bo.getEquipmentCode());
lqw.eq(StringUtils.isNotBlank(bo.getEquipmentType()), JxAqjcgl::getEquipmentType, bo.getEquipmentType());
lqw.eq(StringUtils.isNotBlank(bo.getInspectionResult()), JxAqjcgl::getInspectionResult, bo.getInspectionResult());
lqw.eq(StringUtils.isNotBlank(bo.getRiskGrade()), JxAqjcgl::getRiskGrade, bo.getRiskGrade());
lqw.eq(bo.getAbarbeitung() != null, JxAqjcgl::getAbarbeitung, bo.getAbarbeitung());
lqw.eq(bo.getAbarbeitungDate() != null, JxAqjcgl::getAbarbeitungDate, bo.getAbarbeitungDate());
lqw.eq(StringUtils.isNotBlank(bo.getAuditStatus()), JxAqjcgl::getAuditStatus, bo.getAuditStatus());
lqw.eq(StringUtils.isNotBlank(bo.getFileId()), JxAqjcgl::getFileId, bo.getFileId());
return lqw;
}
/**
* 新增机械安全检查记录
*
* @param bo 机械安全检查记录
* @return 是否新增成功
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean insertByBo(JxAqjcglBo bo) {
JxAqjcgl add = MapstructUtils.convert(bo, JxAqjcgl.class);
validEntityBeforeSave(add);
String banBen = BatchNumberGenerator.generateBatchNumber("JXAQJCJL-");
add.setInspectionOrderNo(banBen);
boolean flag = baseMapper.insert(add) > 0;
// 问题情况添加
List<JxAqjcglWtxqBo> wtxqBoList = bo.getWtxqBoList();
if (wtxqBoList != null && wtxqBoList.size() > 0) {
wtxqBoList.stream().forEach(wtxqBo -> wtxqBo.setMasterId(add.getId()));
jxAqjcglWtxqService.saveBatch(MapstructUtils.convert(wtxqBoList, JxAqjcglWtxq.class));
}
// 检查内容添加
List<JxAqjcglJcnrBo> jcnrList = bo.getJcnrList();
if (jcnrList != null && jcnrList.size() > 0) {
jcnrList.stream().forEach(wtxqBo -> wtxqBo.setMasterId(add.getId()));
jxAqjcglJcnrService.saveBatch(MapstructUtils.convert(jcnrList, JxAqjcglJcnr.class));
}
return flag;
}
/**
* 修改机械安全检查记录
*
* @param bo 机械安全检查记录
* @return 是否修改成功
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean updateByBo(JxAqjcglBo bo) {
JxAqjcgl update = MapstructUtils.convert(bo, JxAqjcgl.class);
validEntityBeforeSave(update);
if ("2".equals(bo.getInspectionResult())){
update.setAbarbeitungState("1");
JxYhzgbh jxYhzgbh = jxYhzgbhService.getBaseMapper().selectOne(new LambdaQueryWrapper<JxYhzgbh>().eq(JxYhzgbh::getMasterId, update.getId()));
if (jxYhzgbh != null) throw new ServiceException("该数据已存在整改数据");
// 不通过转为整改数据
JxYhzgbhBo jxYhzgbhBo = new JxYhzgbhBo();
String banBen = BatchNumberGenerator.generateBatchNumber("JXZGBH-");
jxYhzgbhBo.setInspectionOrderNo(banBen);
jxYhzgbhBo.setMasterId(bo.getId());
jxYhzgbhBo.setInspectionJcdNo(bo.getInspectionOrderNo());
jxYhzgbhBo.setInspector(bo.getInspector());
jxYhzgbhBo.setRiskGrade(bo.getRiskGrade());
jxYhzgbhBo.setAbarbeitung(bo.getAbarbeitung());
jxYhzgbhBo.setYhly("1");
jxYhzgbhBo.setReviewState("2");
jxYhzgbhBo.setAbarbeitungState("1");
jxYhzgbhBo.setEquipmentName(bo.getEquipmentName());
jxYhzgbhBo.setDiscoverDate(bo.getInspectionDate());
jxYhzgbhBo.setDiscoverId(bo.getCreateBy());
jxYhzgbhService.insertByBo(jxYhzgbhBo);
}
// 问题情况添加
List<JxAqjcglWtxqBo> wtxqBoList = bo.getWtxqBoList();
jxAqjcglWtxqService.getBaseMapper().delete(new LambdaQueryWrapper<JxAqjcglWtxq>().eq(JxAqjcglWtxq::getMasterId, update.getId()));
if (wtxqBoList != null && wtxqBoList.size() > 0) {
wtxqBoList.stream().forEach(wtxqBo -> wtxqBo.setMasterId(update.getId()));
jxAqjcglWtxqService.saveBatch(MapstructUtils.convert(wtxqBoList, JxAqjcglWtxq.class));
}
// 检查内容添加
List<JxAqjcglJcnrBo> jcnrList = bo.getJcnrList();
jxAqjcglJcnrService.getBaseMapper().delete(new LambdaQueryWrapper<JxAqjcglJcnr>().eq(JxAqjcglJcnr::getMasterId, update.getId()));
if (jcnrList != null && jcnrList.size() > 0) {
jcnrList.stream().forEach(wtxqBo -> wtxqBo.setMasterId(update.getId()));
jxAqjcglJcnrService.saveBatch(MapstructUtils.convert(jcnrList, JxAqjcglJcnr.class));
}
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(JxAqjcgl entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 校验并批量删除机械安全检查记录信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
List<Long> deleteIds = new ArrayList<>();
for (Long id : ids) {
JxYhzgbh jxYhzgbh = jxYhzgbhService.getBaseMapper().selectOne(new LambdaQueryWrapper<JxYhzgbh>().eq(JxYhzgbh::getMasterId, id));
if (jxYhzgbh != null) throw new ServiceException("隐患整改编号为"+jxYhzgbh.getInspectionOrderNo()+"已存在整改数据,无法删除");
JxAqjcglVo vo = baseMapper.selectVoById(id);
if (vo != null){
//删除附件
if (vo.getFileId()!= null && !vo.getFileId().isEmpty()){
List<Long> list = Arrays.stream(vo.getFileId().split(",")).map(Long::valueOf).toList();
deleteIds.addAll(list);
}
if (vo.getPdfId()!= null && !vo.getPdfId().isEmpty()){
List<Long> list = Arrays.stream(vo.getPdfId().split(",")).map(Long::valueOf).toList();
deleteIds.addAll(list);
}
}
}
if (!deleteIds.isEmpty()) {
sysOssService.deleteWithValidByIds(deleteIds, false);
}
jxAqjcglWtxqService.getBaseMapper().delete(new LambdaQueryWrapper<JxAqjcglWtxq>().in(JxAqjcglWtxq::getMasterId, ids));
jxAqjcglJcnrService.getBaseMapper().delete(new LambdaQueryWrapper<JxAqjcglJcnr>().in(JxAqjcglJcnr::getMasterId, ids));
return baseMapper.deleteByIds(ids) > 0;
}
@Override
public JxAnqjcgHeadVo listHead(JxAqjcglBo bo, PageQuery pageQuery) {
JxAnqjcgHeadVo jxAnqjcgHeadVo = new JxAnqjcgHeadVo();
List<JxAqjcgl> jxAqjcgls = this.getBaseMapper().selectList(new LambdaQueryWrapper<JxAqjcgl>().le(JxAqjcgl::getCreateTime, LocalDate.now().plusDays(1)).ge(JxAqjcgl::getCreateTime, LocalDate.now().minusDays(29)));
if (jxAqjcgls != null && jxAqjcgls.size() > 0) {
jxAnqjcgHeadVo.setZs(Long.valueOf(jxAqjcgls.size()));
jxAnqjcgHeadVo.setTg(jxAqjcgls.stream().filter(jxAqjcgl -> jxAqjcgl.getInspectionResult().equals("1")).count());
jxAnqjcgHeadVo.setWtg(jxAqjcgls.stream().filter(jxAqjcgl -> jxAqjcgl.getInspectionResult().equals("2")).count());
jxAnqjcgHeadVo.setDjc(jxAqjcgls.stream().filter(jxAqjcgl -> jxAqjcgl.getInspectionResult().equals("3")).count());
jxAnqjcgHeadVo.setRcxj(jxAqjcgls.stream().filter(jxAqjcgl -> jxAqjcgl.getInspectionType().equals("1")).count());
jxAnqjcgHeadVo.setZj(jxAqjcgls.stream().filter(jxAqjcgl -> jxAqjcgl.getInspectionType().equals("2")).count());
jxAnqjcgHeadVo.setYj(jxAqjcgls.stream().filter(jxAqjcgl -> jxAqjcgl.getInspectionType().equals("3")).count());
jxAnqjcgHeadVo.setZxjc(jxAqjcgls.stream().filter(jxAqjcgl -> jxAqjcgl.getInspectionType().equals("4")).count());
jxAnqjcgHeadVo.setFj(jxAqjcgls.stream().filter(jxAqjcgl -> jxAqjcgl.getInspectionType().equals("5")).count());
}
return jxAnqjcgHeadVo;
}
@Override
public List<JxAnqjcgHeadVo> listHeadJgqs(JxAqjcglBo bo, PageQuery pageQuery) {
List<MonthDateRange> monthRanges = getLast6MonthsRange();
ArrayList<JxAnqjcgHeadVo> jxAnqjcgHeadVos = new ArrayList<>();
for (MonthDateRange range : monthRanges) {
JxAnqjcgHeadVo jxAnqjcgHeadVo = new JxAnqjcgHeadVo();
List<JxAqjcgl> jxAqjcgls = this.getBaseMapper().selectList(new LambdaQueryWrapper<JxAqjcgl>().le(JxAqjcgl::getCreateTime, range.getEndDate()).ge(JxAqjcgl::getCreateTime, range.getStartDate()));
jxAnqjcgHeadVo.setMonth(range.getYearMonth());
if (jxAqjcgls != null && jxAqjcgls.size() > 0) {
jxAnqjcgHeadVo.setZs(Long.valueOf(jxAqjcgls.size()));
jxAnqjcgHeadVo.setWtg(jxAqjcgls.stream().filter(jxAqjcgl -> jxAqjcgl.getInspectionResult().equals("2")).count());
}
jxAnqjcgHeadVos.add(jxAnqjcgHeadVo);
}
return jxAnqjcgHeadVos;
}
/**
* 获取近6个月的每月完整日期范围
* @return 包含6个 MonthDateRange 对象的列表(按「当前月→最早月」排序)
*/
public static List<MonthDateRange> getLast6MonthsRange() {
List<MonthDateRange> monthRangeList = new ArrayList<>();
LocalDate today = LocalDate.now();
// 循环6次当前月i=0、前1月i=1...前5月i=5
for (int i = 0; i < 6; i++) {
// 1. 获取目标月的1号核心先减月份再设为当月1号避免日期异常
LocalDate monthFirstDay = today.minusMonths(i).withDayOfMonth(1);
// 2. 获取目标月的最后一天下个月1号 - 1天
LocalDate monthLastDay = monthFirstDay.plusMonths(1).minusDays(1);
// 3. 生成年月标识(如 "2024-05"
String yearMonth = monthFirstDay.toString().substring(0, 7); // 截取 yyyy-MM 部分
// 4. 封装到对象并添加到列表
monthRangeList.add(new MonthDateRange(monthFirstDay, monthLastDay, yearMonth));
}
return monthRangeList;
}
}

View File

@ -0,0 +1,132 @@
package org.dromara.mechanical.jxaqgl.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.dromara.mechanical.jxaqgl.domain.bo.JxAqjcglWtxqBo;
import org.dromara.mechanical.jxaqgl.domain.vo.JxAqjcglWtxqVo;
import org.dromara.mechanical.jxaqgl.domain.JxAqjcglWtxq;
import org.dromara.mechanical.jxaqgl.mapper.JxAqjcglWtxqMapper;
import org.dromara.mechanical.jxaqgl.service.IJxAqjcglWtxqService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 机械安全检查记录——问题详情Service业务层处理
*
* @author Lion Li
* @date 2025-12-03
*/
@RequiredArgsConstructor
@Service
public class JxAqjcglWtxqServiceImpl extends ServiceImpl<JxAqjcglWtxqMapper, JxAqjcglWtxq> implements IJxAqjcglWtxqService {
private final JxAqjcglWtxqMapper baseMapper;
/**
* 查询机械安全检查记录——问题详情
*
* @param id 主键
* @return 机械安全检查记录——问题详情
*/
@Override
public JxAqjcglWtxqVo queryById(Long id){
return baseMapper.selectVoById(id);
}
/**
* 分页查询机械安全检查记录——问题详情列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 机械安全检查记录——问题详情分页列表
*/
@Override
public TableDataInfo<JxAqjcglWtxqVo> queryPageList(JxAqjcglWtxqBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<JxAqjcglWtxq> lqw = buildQueryWrapper(bo);
Page<JxAqjcglWtxqVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询符合条件的机械安全检查记录——问题详情列表
*
* @param bo 查询条件
* @return 机械安全检查记录——问题详情列表
*/
@Override
public List<JxAqjcglWtxqVo> queryList(JxAqjcglWtxqBo bo) {
LambdaQueryWrapper<JxAqjcglWtxq> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<JxAqjcglWtxq> buildQueryWrapper(JxAqjcglWtxqBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<JxAqjcglWtxq> lqw = Wrappers.lambdaQuery();
lqw.orderByDesc(JxAqjcglWtxq::getId);
lqw.eq(bo.getMasterId() != null, JxAqjcglWtxq::getMasterId, bo.getMasterId());
lqw.eq(StringUtils.isNotBlank(bo.getIssueParticulars()), JxAqjcglWtxq::getIssueParticulars, bo.getIssueParticulars());
return lqw;
}
/**
* 新增机械安全检查记录——问题详情
*
* @param bo 机械安全检查记录——问题详情
* @return 是否新增成功
*/
@Override
public Boolean insertByBo(JxAqjcglWtxqBo bo) {
JxAqjcglWtxq add = MapstructUtils.convert(bo, JxAqjcglWtxq.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}
/**
* 修改机械安全检查记录——问题详情
*
* @param bo 机械安全检查记录——问题详情
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(JxAqjcglWtxqBo bo) {
JxAqjcglWtxq update = MapstructUtils.convert(bo, JxAqjcglWtxq.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(JxAqjcglWtxq entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 校验并批量删除机械安全检查记录——问题详情信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
}

View File

@ -10,6 +10,7 @@ import org.dromara.device.domain.bo.DeviceInfoBo;
import org.dromara.device.domain.vo.DeviceInfoVo;
import org.dromara.device.service.IDeviceInfoService;
import org.dromara.mechanical.jxgl.domain.vo.JxGzwxHeadVo;
import org.dromara.mechanical.jxgl.domain.vo.JxGzwxJlVo;
import org.dromara.mechanical.jxgl.domain.vo.JxWhjlHeadVo;
import org.dromara.system.service.impl.SysOssServiceImpl;
import org.springframework.web.bind.annotation.*;
@ -68,6 +69,16 @@ public class JxGzwxController extends BaseController {
return jxGzwxService.queryPageList(bo, pageQuery);
}
/**
* 根据故障id查询机械故障维修记录列表
*/
@SaCheckPermission("jxgl:gzwx:list")
@GetMapping("/getlistById/{id}")
public List<JxGzwxJlVo> getlistById(@PathVariable("id") Long id) {
return jxGzwxService.getlistById(id);
}
/**
* 导出机械故障维修列表
*/

View File

@ -6,7 +6,10 @@ import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.dromara.mechanical.jxgl.domain.bo.JxGzwxBo;
import org.dromara.mechanical.jxgl.domain.vo.JxGzwxHeadVo;
import org.dromara.mechanical.jxgl.domain.vo.JxGzwxVo;
import org.dromara.mechanical.jxgl.service.IJxGzwxService;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
@ -37,6 +40,20 @@ public class JxGzwxJlController extends BaseController {
private final IJxGzwxJlService jxGzwxJlService;
private final IJxGzwxService jxGzwxService;
/**
* 查询机械故障维修列表
*/
@SaCheckPermission("jxgl:gzwxJl:list")
@GetMapping("/getlist")
public TableDataInfo<JxGzwxVo> list(JxGzwxBo bo, PageQuery pageQuery) {
return jxGzwxService.queryPageList(bo, pageQuery);
}
/**
* 查询机械故障维修记录列表
*/

View File

@ -9,7 +9,10 @@ import cn.dev33.satoken.annotation.SaCheckPermission;
import org.dromara.device.domain.bo.DeviceInfoBo;
import org.dromara.device.domain.vo.DeviceInfoVo;
import org.dromara.device.service.IDeviceInfoService;
import org.dromara.mechanical.jxgl.domain.JxWhjl;
import org.dromara.mechanical.jxgl.domain.vo.JxWhjhHeadVo;
import org.dromara.mechanical.jxgl.domain.vo.JxWhjlVo;
import org.dromara.mechanical.jxgl.service.IJxWhjlService;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
@ -40,6 +43,8 @@ public class JxWhjhController extends BaseController {
private final IJxWhjhService jxWhjhService;
private final IDeviceInfoService deviceInfoService;
@ -56,6 +61,16 @@ public class JxWhjhController extends BaseController {
}
/**
* 根据计划id查询记录信息列表
*/
@SaCheckPermission("jxgl:whjh:list")
@GetMapping("/getlistById/{id}")
public List<JxWhjlVo> getlistById(@PathVariable("id") Long id) {
return jxWhjhService.getlistById(id);
}
/**
* 查询机械维护计划列表
*/

View File

@ -45,11 +45,6 @@ public class JxWhjlController extends BaseController {
private final IJxWhjhService jxWhjhService;
/**
* 查询机械维护计划列表
*/

View File

@ -32,6 +32,12 @@ public class JxGzwx extends BaseEntity {
@TableId(value = "fault_id")
private Long faultId;
/**
* 故障名称
*/
private String faultName;
/**
* 台账ID
*/

View File

@ -38,6 +38,16 @@ public class JxGzwxJl extends BaseEntity {
*/
private Long faultId;
/**
* 故障名称
*/
private String faultName;
/**
* 故障记录名称
*/
private String faultjlName;
/**
* 台账ID

View File

@ -39,6 +39,11 @@ public class JxWhjh extends BaseEntity {
*/
private String equipmentName;
/**
* 维修计划名称
*/
private String wxjhName;
/**
* 计划类型 字典
*/

View File

@ -82,6 +82,16 @@ public class JxWhjl extends BaseEntity {
*/
private String maintenanceResult;
/**
* 维修计划名称
*/
private String wxjhName;
/**
* 维修记录名称
*/
private String wxjlName;
/**
* 备注
*/

View File

@ -91,5 +91,16 @@ public class JxGzwxBo extends BaseEntity {
*/
private String fileId;
/**
* 故障名称
*/
private String faultName;
private LocalDate startTime;
private LocalDate endTime;
}

View File

@ -9,6 +9,7 @@ import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
@ -33,6 +34,17 @@ public class JxGzwxJlBo extends BaseEntity {
@NotNull(message = "故障ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long faultId;
/**
* 故障名称
*/
private String faultName;
/**
* 故障记录名称
*/
private String faultjlName;
/**
* 台账ID
*/
@ -108,4 +120,9 @@ public class JxGzwxJlBo extends BaseEntity {
private String fileId;
private LocalDate startTime;
private LocalDate endTime;
}

View File

@ -56,6 +56,12 @@ public class JxWhjhBo extends BaseEntity {
*/
private String maintenanceItems;
/**
* 维修计划名称
*/
private String wxjhName;
/**
* 周期类型 字典
*/

View File

@ -32,6 +32,16 @@ public class JxWhjlBo extends BaseEntity {
*/
private Long whjhId;
/**
* 维修计划名称
*/
private String wxjhName;
/**
* 维修记录名称
*/
private String wxjlName;
/**
* 台账ID
*/

View File

@ -2,10 +2,14 @@ package org.dromara.mechanical.jxgl.domain.vo;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.translation.annotation.Translation;
import org.dromara.common.translation.constant.TransConstant;
import org.dromara.mechanical.jxgl.domain.JxGzwxJl;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
@ -52,6 +56,16 @@ public class JxGzwxJlVo implements Serializable {
*/
private String equipmentName;
/**
* 故障名称
*/
private String faultName;
/**
* 故障记录名称
*/
private String faultjlName;
/**
* 故障ID
*/
@ -76,6 +90,14 @@ public class JxGzwxJlVo implements Serializable {
@ExcelProperty(value = "维修人员")
private Long repairPerson;
/**
* 维修人员
*/
@ExcelProperty(value = "维修人员")
@Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "repairPerson")
private String repairPersonName;
/**
* 维修内容
*/
@ -91,8 +113,8 @@ public class JxGzwxJlVo implements Serializable {
/**
* 维修费用(材料费 + 工时费)
*/
@ExcelProperty(value = "维修费用", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "材=料费,+=,工=时费")
@ExcelProperty(value = "维修费用")
// @ExcelDictFormat(readConverterExp = "材料费和工时费")
private BigDecimal repairCost;
/**
@ -110,8 +132,8 @@ public class JxGzwxJlVo implements Serializable {
/**
* 状态 维修中 已恢复 关闭
*/
@ExcelProperty(value = "状态 维修中 已恢复 关闭", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "jx_gzwxzt")
@ExcelProperty(value = "状态 维修中 已恢复 关闭")
// @ExcelDictFormat(dictType = "jx_gzwxzt")
private String status;
/**
@ -133,5 +155,26 @@ public class JxGzwxJlVo implements Serializable {
@ExcelDictFormat(readConverterExp = "多=个文件逗号分隔")
private String fileId;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private Date createTime;
/**
* 创建者
*/
@TableField(fill = FieldFill.INSERT)
private Long createBy;
/**
* 创建者
*/
@Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "createBy")
@TableField(fill = FieldFill.INSERT)
private Long createByname;
}

View File

@ -1,8 +1,12 @@
package org.dromara.mechanical.jxgl.domain.vo;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import jakarta.validation.constraints.NotBlank;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.translation.annotation.Translation;
import org.dromara.common.translation.constant.TransConstant;
import org.dromara.mechanical.jxgl.domain.JxGzwx;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
@ -39,6 +43,11 @@ public class JxGzwxVo implements Serializable {
@ExcelProperty(value = "故障ID")
private Long faultId;
/**
* 故障名称
*/
private String faultName;
/**
* 台账ID
*/
@ -109,4 +118,19 @@ public class JxGzwxVo implements Serializable {
private String fileId;
/**
* 创建者
*/
@TableField(fill = FieldFill.INSERT)
private Long createBy;
/**
* 创建者
*/
@Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "createBy")
@TableField(fill = FieldFill.INSERT)
private Long createByname;
}

View File

@ -1,6 +1,11 @@
package org.dromara.mechanical.jxgl.domain.vo;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import org.dromara.common.translation.annotation.Translation;
import org.dromara.common.translation.constant.TransConstant;
import org.dromara.mechanical.jxgl.domain.JxWhjh;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
@ -102,6 +107,19 @@ public class JxWhjhVo implements Serializable {
@ExcelProperty(value = "负责人员")
private Long responsiblePerson;
/**
* 负责人员
*/
@ExcelProperty(value = "负责人员")
@Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "responsiblePerson")
private String responsiblePersonname;
/**
* 维修计划名称
*/
private String wxjhName;
/**
* 状态 (未开始/进行中/已完成/逾期)
*/
@ -129,4 +147,19 @@ public class JxWhjhVo implements Serializable {
private String fileId;
/**
* 创建者
*/
@TableField(fill = FieldFill.INSERT)
private Long createBy;
/**
* 创建者
*/
@Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "createBy")
@TableField(fill = FieldFill.INSERT)
private Long createByname;
}

View File

@ -2,9 +2,13 @@ package org.dromara.mechanical.jxgl.domain.vo;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import jakarta.validation.constraints.NotBlank;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.translation.annotation.Translation;
import org.dromara.common.translation.constant.TransConstant;
import org.dromara.mechanical.jxgl.domain.JxWhjl;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
@ -98,6 +102,13 @@ public class JxWhjlVo implements Serializable {
@ExcelProperty(value = "执行人")
private Long maintainer;
/**
* 执行人
*/
@ExcelProperty(value = "执行人")
@Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "maintainer")
private String maintainername;
/**
* 保养结果(正常/异常/需复检)
*/
@ -118,5 +129,33 @@ public class JxWhjlVo implements Serializable {
@ExcelDictFormat(readConverterExp = "多=个文件逗号分隔")
private String fileId;
/**
* 维修计划名称
*/
private String wxjhName;
/**
* 维修记录名称
*/
private String wxjlName;
/**
* 创建者
*/
@TableField(fill = FieldFill.INSERT)
private Long createBy;
/**
* 创建者
*/
@Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "createBy")
@TableField(fill = FieldFill.INSERT)
private Long createByname;
}

View File

@ -1,6 +1,7 @@
package org.dromara.mechanical.jxgl.service;
import org.dromara.mechanical.jxgl.domain.vo.JxGzwxHeadVo;
import org.dromara.mechanical.jxgl.domain.vo.JxGzwxJlVo;
import org.dromara.mechanical.jxgl.domain.vo.JxGzwxVo;
import org.dromara.mechanical.jxgl.domain.bo.JxGzwxBo;
import org.dromara.mechanical.jxgl.domain.JxGzwx;
@ -70,4 +71,6 @@ public interface IJxGzwxService extends IService<JxGzwx>{
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
JxGzwxHeadVo jxgzwx();
List<JxGzwxJlVo> getlistById(Long id);
}

View File

@ -1,5 +1,6 @@
package org.dromara.mechanical.jxgl.service;
import org.dromara.mechanical.jxgl.domain.JxWhjl;
import org.dromara.mechanical.jxgl.domain.vo.JxWhjhHeadVo;
import org.dromara.mechanical.jxgl.domain.vo.JxWhjhVo;
import org.dromara.mechanical.jxgl.domain.bo.JxWhjhBo;
@ -8,6 +9,8 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.service.IService;
import org.dromara.mechanical.jxgl.domain.vo.JxWhjlVo;
import java.util.Collection;
import java.util.List;
@ -70,4 +73,6 @@ public interface IJxWhjhService extends IService<JxWhjh>{
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
JxWhjhHeadVo jxwhHead();
List<JxWhjlVo> getlistById(Long id);
}

View File

@ -2,6 +2,7 @@ package org.dromara.mechanical.jxgl.service.impl;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
@ -11,8 +12,11 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.dromara.mechanical.jxgl.domain.JxGzwx;
import org.dromara.mechanical.jxgl.domain.JxWhjl;
import org.dromara.mechanical.jxgl.domain.vo.JxGzwxHeadVo;
import org.dromara.mechanical.jxgl.domain.vo.JxWhjhVo;
import org.dromara.mechanical.jxgl.service.IJxGzwxService;
import org.dromara.system.service.ISysOssService;
import org.springframework.stereotype.Service;
import org.dromara.mechanical.jxgl.domain.bo.JxGzwxJlBo;
import org.dromara.mechanical.jxgl.domain.vo.JxGzwxJlVo;
@ -22,9 +26,7 @@ import org.dromara.mechanical.jxgl.service.IJxGzwxJlService;
import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;
import java.util.List;
import java.util.Map;
import java.util.Collection;
import java.util.*;
/**
* 机械故障维修记录Service业务层处理
@ -39,6 +41,7 @@ public class JxGzwxJlServiceImpl extends ServiceImpl<JxGzwxJlMapper, JxGzwxJl> i
private final JxGzwxJlMapper baseMapper;
private final IJxGzwxService jxGzwxService;
private final ISysOssService sysOssService;
/**
* 查询机械故障维修记录
@ -82,11 +85,14 @@ public class JxGzwxJlServiceImpl extends ServiceImpl<JxGzwxJlMapper, JxGzwxJl> i
LambdaQueryWrapper<JxGzwxJl> lqw = Wrappers.lambdaQuery();
lqw.orderByDesc(JxGzwxJl::getId);
lqw.eq(bo.getFaultId() != null, JxGzwxJl::getFaultId, bo.getFaultId());
lqw.ge(bo.getStartTime() != null, JxGzwxJl::getCreateTime, bo.getStartTime());
lqw.le(bo.getEndTime() != null, JxGzwxJl::getCreateTime, bo.getEndTime());
lqw.eq(bo.getRepairStartTime() != null, JxGzwxJl::getRepairStartTime, bo.getRepairStartTime());
lqw.eq(bo.getRepairEndTime() != null, JxGzwxJl::getRepairEndTime, bo.getRepairEndTime());
lqw.eq(bo.getRepairPerson() != null, JxGzwxJl::getRepairPerson, bo.getRepairPerson());
lqw.eq(StringUtils.isNotBlank(bo.getRepairContent()), JxGzwxJl::getRepairContent, bo.getRepairContent());
lqw.eq(StringUtils.isNotBlank(bo.getPartsUsed()), JxGzwxJl::getPartsUsed, bo.getPartsUsed());
lqw.like(StringUtils.isNotBlank(bo.getFaultjlName()), JxGzwxJl::getFaultjlName, bo.getFaultjlName());
lqw.eq(bo.getRepairCost() != null, JxGzwxJl::getRepairCost, bo.getRepairCost());
lqw.eq(StringUtils.isNotBlank(bo.getFaultCause()), JxGzwxJl::getFaultCause, bo.getFaultCause());
lqw.eq(StringUtils.isNotBlank(bo.getPreventiveActions()), JxGzwxJl::getPreventiveActions, bo.getPreventiveActions());
@ -151,13 +157,28 @@ public class JxGzwxJlServiceImpl extends ServiceImpl<JxGzwxJlMapper, JxGzwxJl> i
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
List<Long> deleteIds = new ArrayList<>();
for (Long id : ids) {
JxGzwxJlVo vo = baseMapper.selectVoById(id);
if (vo != null){
//删除附件
if (vo.getFileId()!= null && !vo.getFileId().isEmpty()){
List<Long> list = Arrays.stream(vo.getFileId().split(",")).map(Long::valueOf).toList();
deleteIds.addAll(list);
}
}
}
if (!deleteIds.isEmpty()) {
sysOssService.deleteWithValidByIds(deleteIds, false);
}
return baseMapper.deleteByIds(ids) > 0;
}
@Override
public JxGzwxHeadVo jxgzwx() {
JxGzwxHeadVo jxGzwxHeadVo = new JxGzwxHeadVo();
List<JxGzwxJl> jxGzwxes = this.baseMapper.selectList(new LambdaQueryWrapper<JxGzwxJl>().ge(JxGzwxJl::getCreateTime, LocalDate.now().with(TemporalAdjusters.firstDayOfMonth())));
List<JxGzwxJl> jxGzwxes = this.baseMapper.selectList(new LambdaQueryWrapper<JxGzwxJl>().le(JxGzwxJl::getCreateTime, LocalDate.now().plusDays(1)).ge(JxGzwxJl::getCreateTime, LocalDate.now().minusDays(29)));
if (jxGzwxes != null && jxGzwxes.size() > 0) {
long wxz = jxGzwxes.stream().filter(jxGzwx -> "1".equals(jxGzwx.getStatus())).count();
long hf = jxGzwxes.stream().filter(jxGzwx -> "2".equals(jxGzwx.getStatus())).count();

View File

@ -9,10 +9,15 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.dromara.mechanical.jxgl.domain.JxGzwxJl;
import org.dromara.mechanical.jxgl.domain.JxWhjh;
import org.dromara.mechanical.jxgl.domain.vo.JxGzwxHeadVo;
import org.dromara.mechanical.jxgl.domain.vo.JxGzwxJlVo;
import org.dromara.mechanical.jxgl.domain.vo.JxWhjlVo;
import org.dromara.mechanical.jxgl.service.IJxGzwxJlService;
import org.dromara.system.service.impl.SysOssServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.dromara.mechanical.jxgl.domain.bo.JxGzwxBo;
import org.dromara.mechanical.jxgl.domain.vo.JxGzwxVo;
@ -36,6 +41,10 @@ public class JxGzwxServiceImpl extends ServiceImpl<JxGzwxMapper, JxGzwx> impleme
private final JxGzwxMapper baseMapper;
@Lazy
@Autowired
private IJxGzwxJlService jxGzwxJlService;
private final SysOssServiceImpl sysOssService;
/**
@ -48,7 +57,6 @@ public class JxGzwxServiceImpl extends ServiceImpl<JxGzwxMapper, JxGzwx> impleme
public JxGzwxVo queryById(Long faultId){
return baseMapper.selectVoById(faultId);
}
/**
* 分页查询机械故障维修列表
*
@ -81,6 +89,8 @@ public class JxGzwxServiceImpl extends ServiceImpl<JxGzwxMapper, JxGzwx> impleme
lqw.orderByDesc(JxGzwx::getFaultId);
lqw.eq(bo.getEquipmentId() != null, JxGzwx::getEquipmentId, bo.getEquipmentId());
lqw.eq(bo.getFaultTime() != null, JxGzwx::getFaultTime, bo.getFaultTime());
lqw.gt(bo.getStartTime() != null, JxGzwx::getFaultTime, bo.getStartTime());
lqw.le(bo.getEndTime() != null, JxGzwx::getFaultTime, bo.getEndTime());
lqw.eq(StringUtils.isNotBlank(bo.getFaultType()), JxGzwx::getFaultType, bo.getFaultType());
lqw.eq(StringUtils.isNotBlank(bo.getFaultDescription()), JxGzwx::getFaultDescription, bo.getFaultDescription());
lqw.eq(StringUtils.isNotBlank(bo.getSeverity()), JxGzwx::getSeverity, bo.getSeverity());
@ -162,7 +172,7 @@ public class JxGzwxServiceImpl extends ServiceImpl<JxGzwxMapper, JxGzwx> impleme
public JxGzwxHeadVo jxgzwx() {
JxGzwxHeadVo jxGzwxHeadVo = new JxGzwxHeadVo();
List<JxGzwx> jxGzwxes = this.baseMapper.selectList(new LambdaQueryWrapper<JxGzwx>().ge(JxGzwx::getCreateTime, LocalDate.now().with(TemporalAdjusters.firstDayOfMonth())));
List<JxGzwx> jxGzwxes = this.baseMapper.selectList(new LambdaQueryWrapper<JxGzwx>().le(JxGzwx::getCreateTime, LocalDate.now().plusDays(1)).ge(JxGzwx::getCreateTime, LocalDate.now().minusDays(29)));
if (jxGzwxes != null && jxGzwxes.size() > 0) {
long wxz = jxGzwxes.stream().filter(jxGzwx -> "1".equals(jxGzwx.getStatus())).count();
long hf = jxGzwxes.stream().filter(jxGzwx -> "2".equals(jxGzwx.getStatus())).count();
@ -175,4 +185,10 @@ public class JxGzwxServiceImpl extends ServiceImpl<JxGzwxMapper, JxGzwx> impleme
return jxGzwxHeadVo;
}
@Override
public List<JxGzwxJlVo> getlistById(Long id) {
List<JxGzwxJl> jxGzwxJls = jxGzwxJlService.getBaseMapper().selectList(new LambdaQueryWrapper<JxGzwxJl>().eq(JxGzwxJl::getFaultId, id));
return MapstructUtils.convert(jxGzwxJls, JxGzwxJlVo.class);
}
}

View File

@ -1,6 +1,8 @@
package org.dromara.mechanical.jxgl.service.impl;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
@ -9,15 +11,24 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.dromara.device.domain.DeviceInfo;
import org.dromara.device.domain.vo.DeviceInfoVo;
import org.dromara.device.service.IDeviceInfoService;
import org.dromara.mechanical.jxgl.domain.JxWhjl;
import org.dromara.mechanical.jxgl.domain.vo.JxWhjhHeadVo;
import org.dromara.mechanical.jxgl.domain.vo.JxWhjlVo;
import org.dromara.mechanical.jxgl.service.IJxWhjlService;
import org.dromara.system.service.impl.SysOssServiceImpl;
import org.dromara.xzd.settlement.domain.vo.XzdJsSjJungonVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.dromara.mechanical.jxgl.domain.bo.JxWhjhBo;
import org.dromara.mechanical.jxgl.domain.vo.JxWhjhVo;
import org.dromara.mechanical.jxgl.domain.JxWhjh;
import org.dromara.mechanical.jxgl.mapper.JxWhjhMapper;
import org.dromara.mechanical.jxgl.service.IJxWhjhService;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;
@ -34,6 +45,16 @@ import java.util.*;
public class JxWhjhServiceImpl extends ServiceImpl<JxWhjhMapper, JxWhjh> implements IJxWhjhService {
private final JxWhjhMapper baseMapper;
@Lazy
@Autowired
private IJxWhjlService jxWhjlService;
private final IDeviceInfoService deviceInfoService;
private final SysOssServiceImpl sysOssService;
/**
@ -100,9 +121,17 @@ public class JxWhjhServiceImpl extends ServiceImpl<JxWhjhMapper, JxWhjh> impleme
* @return 是否新增成功
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean insertByBo(JxWhjhBo bo) {
JxWhjh add = MapstructUtils.convert(bo, JxWhjh.class);
validEntityBeforeSave(add);
//反查数据判断是都被添加过
JxWhjhVo jxWhjhVo = baseMapper.selectVoOne(new LambdaQueryWrapper<JxWhjh>().eq(JxWhjh::getEquipmentId, bo.getEquipmentId()));
if (jxWhjhVo != null) throw new ServiceException("该设备已添加到维护计划");
// 修改设备状态
deviceInfoService.getBaseMapper().update(new LambdaUpdateWrapper<DeviceInfo>().set(DeviceInfo::getStatus,"2").eq(DeviceInfo::getId,bo.getEquipmentId()));
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
@ -120,6 +149,16 @@ public class JxWhjhServiceImpl extends ServiceImpl<JxWhjhMapper, JxWhjh> impleme
public Boolean updateByBo(JxWhjhBo bo) {
JxWhjh update = MapstructUtils.convert(bo, JxWhjh.class);
validEntityBeforeSave(update);
Long l = jxWhjlService.getBaseMapper().selectCount(new LambdaQueryWrapper<JxWhjl>().eq(JxWhjl::getWhjhId, bo.getId()));
if (l > 0) throw new ServiceException("该计划已添加保养记录,无法修改");
// //反查数据判断是都被添加过
// JxWhjhVo jxWhjhVo = baseMapper.selectVoOne(new LambdaQueryWrapper<JxWhjh>().eq(JxWhjh::getEquipmentId, bo.getEquipmentId()));
// if (jxWhjhVo != null) throw new ServiceException("该设备已添加到维护计划");
//
// // 修改设备状态
// deviceInfoService.getBaseMapper().update(new LambdaUpdateWrapper<DeviceInfo>().set(DeviceInfo::getStatus,"2").eq(DeviceInfo::getId,bo.getEquipmentId()));
//
return baseMapper.updateById(update) > 0;
}
@ -145,6 +184,9 @@ public class JxWhjhServiceImpl extends ServiceImpl<JxWhjhMapper, JxWhjh> impleme
List<Long> deleteIds = new ArrayList<>();
for (Long id : ids) {
JxWhjhVo vo = baseMapper.selectVoById(id);
// 判断计划是否被引用
Long l = jxWhjlService.getBaseMapper().selectCount(new LambdaQueryWrapper<JxWhjl>().eq(JxWhjl::getWhjhId, id));
if (l > 0) throw new ServiceException("该计划被引用,请先删除计划下的记录");
if (vo != null){
//删除附件
if (vo.getFileId()!= null && !vo.getFileId().isEmpty()){
@ -162,7 +204,7 @@ public class JxWhjhServiceImpl extends ServiceImpl<JxWhjhMapper, JxWhjh> impleme
@Override
public JxWhjhHeadVo jxwhHead() {
JxWhjhHeadVo jxWhjhHeadVo = new JxWhjhHeadVo();
List<JxWhjh> jxWhjhs = this.baseMapper.selectList(new LambdaQueryWrapper<JxWhjh>().ge(JxWhjh::getCreateTime, LocalDate.now().with(TemporalAdjusters.firstDayOfMonth())));
List<JxWhjh> jxWhjhs = this.baseMapper.selectList(new LambdaQueryWrapper<JxWhjh>().le(JxWhjh::getCreateTime, LocalDate.now().plusDays(1)).ge(JxWhjh::getCreateTime, LocalDate.now().minusDays(29)));
if (jxWhjhs != null && jxWhjhs.size() > 0) {
long countwwc = jxWhjhs.stream().filter(jxwhjh -> "1".equals(jxwhjh.getStatus()) || "2".equals(jxwhjh.getStatus())).count();
long countywc = jxWhjhs.stream().filter(jxwhjh -> "3".equals(jxwhjh.getStatus())).count();
@ -174,4 +216,11 @@ public class JxWhjhServiceImpl extends ServiceImpl<JxWhjhMapper, JxWhjh> impleme
}
return jxWhjhHeadVo;
}
@Override
public List<JxWhjlVo> getlistById(Long id) {
List<JxWhjl> jxWhjls = jxWhjlService.getBaseMapper().selectList(new LambdaQueryWrapper<JxWhjl>().eq(JxWhjl::getWhjhId, id));
return MapstructUtils.convert(jxWhjls, JxWhjlVo.class);
}
}

View File

@ -1,5 +1,6 @@
package org.dromara.mechanical.jxgl.service.impl;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.dromara.common.core.utils.MapstructUtils;
@ -10,6 +11,9 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.dromara.device.domain.DeviceInfo;
import org.dromara.device.service.IDeviceInfoService;
import org.dromara.mechanical.jxaqgl.domain.JxAqjcgl;
import org.dromara.mechanical.jxgl.domain.JxWhjh;
import org.dromara.mechanical.jxgl.domain.vo.JxWhjhVo;
import org.dromara.mechanical.jxgl.domain.vo.JxWhjlHeadVo;
@ -43,6 +47,8 @@ public class JxWhjlServiceImpl extends ServiceImpl<JxWhjlMapper, JxWhjl> impleme
private final SysOssServiceImpl sysOssService;
private final IDeviceInfoService deviceInfoService;
/**
* 查询机械维护记录
@ -112,11 +118,16 @@ public class JxWhjlServiceImpl extends ServiceImpl<JxWhjlMapper, JxWhjl> impleme
boolean flag = baseMapper.insert(add) > 0;
if (bo != null){
if ("1".equals(bo.getMaintenanceResult())){
// 修改设备状态
deviceInfoService.getBaseMapper().update(new LambdaUpdateWrapper<DeviceInfo>().set(DeviceInfo::getStatus,"1").eq(DeviceInfo::getId,bo.getEquipmentId()));
jxWhjhService.getBaseMapper().update(new UpdateWrapper<JxWhjh>().eq("id",bo.getWhjhId()).set("status","3"));
}else {
jxWhjhService.getBaseMapper().update(new UpdateWrapper<JxWhjh>().eq("id",bo.getWhjhId()).set("status","2"));
}
}
if (flag) {
bo.setId(add.getId());
@ -185,7 +196,7 @@ public class JxWhjlServiceImpl extends ServiceImpl<JxWhjlMapper, JxWhjl> impleme
public JxWhjlHeadVo jxwhHead() {
JxWhjlHeadVo jxWhjlHeadVo = new JxWhjlHeadVo();
List<JxWhjl> jxWhjls = this.baseMapper.selectList(new LambdaQueryWrapper<JxWhjl>().ge(JxWhjl::getCreateTime, LocalDate.now().with(TemporalAdjusters.firstDayOfMonth())));
List<JxWhjl> jxWhjls = this.baseMapper.selectList(new LambdaQueryWrapper<JxWhjl>().le(JxWhjl::getCreateTime, LocalDate.now().plusDays(1)).ge(JxWhjl::getCreateTime, LocalDate.now().minusDays(29)));
if (jxWhjls != null && jxWhjls.size() > 0) {
long zc = jxWhjls.stream().filter(jxwhjl -> "1".equals(jxwhjl.getMaintenanceResult())).count();
long yc = jxWhjls.stream().filter(jxwhjl -> "2".equals(jxwhjl.getMaintenanceResult())).count();

View File

@ -0,0 +1,137 @@
package org.dromara.mechanical.jxsgjl.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.dromara.device.domain.bo.DeviceInfoBo;
import org.dromara.device.domain.vo.DeviceInfoVo;
import org.dromara.device.service.IDeviceInfoService;
import org.dromara.mechanical.jxsgjl.domain.vo.JxSgxxHead;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.mechanical.jxsgjl.domain.vo.JxSgxxjlbVo;
import org.dromara.mechanical.jxsgjl.domain.bo.JxSgxxjlbBo;
import org.dromara.mechanical.jxsgjl.service.IJxSgxxjlbService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
* 机械事故信息记录
*
* @author Lion Li
* @date 2025-12-04
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/jxsgjl/sgxxjlb")
public class JxSgxxjlbController extends BaseController {
private final IJxSgxxjlbService jxSgxxjlbService;
private final IDeviceInfoService deviceInfoService;
/**
* 查询设备信息列表
*/
@SaCheckPermission("jxsgjl:sgxxjlb:list")
@GetMapping("/getlist")
public TableDataInfo<DeviceInfoVo> list(DeviceInfoBo bo, PageQuery pageQuery) {
return deviceInfoService.queryPageList(bo, pageQuery);
}
/**
* 查询机械事故信息记录列表
*/
@SaCheckPermission("jxsgjl:sgxxjlb:list")
@GetMapping("/list")
public TableDataInfo<JxSgxxjlbVo> list(JxSgxxjlbBo bo, PageQuery pageQuery) {
return jxSgxxjlbService.queryPageList(bo, pageQuery);
}
/**
* 查询机械事故记录头部数据
*/
@SaCheckPermission("jxsgjl:sgxxjlb:list")
@GetMapping("/getHeadData")
public R<JxSgxxHead> getHeadData() {
return R.ok(jxSgxxjlbService.getHeadData());
}
/**
* 导出机械事故信息记录列表
*/
@SaCheckPermission("jxsgjl:sgxxjlb:export")
@Log(title = "机械事故信息记录", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(JxSgxxjlbBo bo, HttpServletResponse response) {
List<JxSgxxjlbVo> list = jxSgxxjlbService.queryList(bo);
ExcelUtil.exportExcel(list, "机械事故信息记录", JxSgxxjlbVo.class, response);
}
/**
* 获取机械事故信息记录详细信息
*
* @param id 主键
*/
@SaCheckPermission("jxsgjl:sgxxjlb:query")
@GetMapping("/{id}")
public R<JxSgxxjlbVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(jxSgxxjlbService.queryById(id));
}
/**
* 新增机械事故信息记录
*/
@SaCheckPermission("jxsgjl:sgxxjlb:add")
@Log(title = "机械事故信息记录", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody JxSgxxjlbBo bo) {
return toAjax(jxSgxxjlbService.insertByBo(bo));
}
/**
* 修改机械事故信息记录
*/
@SaCheckPermission("jxsgjl:sgxxjlb:edit")
@Log(title = "机械事故信息记录", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody JxSgxxjlbBo bo) {
return toAjax(jxSgxxjlbService.updateByBo(bo));
}
/**
* 删除机械事故信息记录
*
* @param ids 主键串
*/
@SaCheckPermission("jxsgjl:sgxxjlb:remove")
@Log(title = "机械事故信息记录", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(jxSgxxjlbService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@ -0,0 +1,139 @@
package org.dromara.mechanical.jxsgjl.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.io.Serial;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* 机械事故信息记录对象 jx_sgxxjlb
*
* @author Lion Li
* @date 2025-12-04
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("jx_sgxxjlb")
public class JxSgxxjlb extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* id
*/
@TableId(value = "id")
private Long id;
/**
* 事故编号如SGJL-20230620-001
*/
private String accidentCode;
/**
* 事故等级(下拉选择)
*/
private String accidentLevel;
/**
* 事故类型(下拉选择)
*/
private String accidentType;
/**
* 设备名称(下拉选择)
*/
private String equipmentName;
/**
* 设备台账id
*/
private Long equipmentId;
/**
* 发生时间
*/
private LocalDateTime occurrenceTime;
/**
* 发生地点
*/
private String occurrencePlace;
/**
* 事故描述(详细经过)
*/
private String accidentDescription;
/**
* 直接损失金额(元)
*/
private BigDecimal directLoss;
/**
* 间接损失金额(元)
*/
private BigDecimal indirectLoss;
/**
* 事故原因分析
*/
private String accidentCause;
/**
* 人员伤亡情况(如有)
*/
private String casualtySituation;
/**
* 应急处理措施
*/
private String emergencyMeasures;
/**
* 整改预防措施
*/
private String rectificationMeasures;
/**
* 责任人
*/
private Long responsiblePerson;
/**
* 处理结果
*/
private String handleResult;
/**
* 记录人
*/
private Long recorder;
/**
* 记录日期
*/
private LocalDate recordDate;
/**
* 审核状态
*/
private String auditStatus;
/**
* 照片文件id (多个文件逗号分隔)
*/
private String fileId;
/**
* pdf文件id (多个文件逗号分隔)
*/
private String pdfId;
}

View File

@ -0,0 +1,150 @@
package org.dromara.mechanical.jxsgjl.domain.bo;
import org.dromara.mechanical.jxsgjl.domain.JxSgxxjlb;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* 机械事故信息记录业务对象 jx_sgxxjlb
*
* @author Lion Li
* @date 2025-12-04
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = JxSgxxjlb.class, reverseConvertGenerate = false)
public class JxSgxxjlbBo extends BaseEntity {
/**
* id
*/
@NotNull(message = "id不能为空", groups = { EditGroup.class })
private Long id;
/**
* 事故编号如SGJL-20230620-001
*/
private String accidentCode;
/**
* 事故等级(下拉选择)
*/
@NotBlank(message = "事故等级(下拉选择)不能为空", groups = { AddGroup.class, EditGroup.class })
private String accidentLevel;
/**
* 事故类型(下拉选择)
*/
@NotBlank(message = "事故类型(下拉选择)不能为空", groups = { AddGroup.class, EditGroup.class })
private String accidentType;
/**
* 设备名称(下拉选择)
*/
@NotBlank(message = "设备名称(下拉选择)不能为空", groups = { AddGroup.class, EditGroup.class })
private String equipmentName;
/**
* 设备台账id
*/
private Long equipmentId;
/**
* 发生时间
*/
@NotNull(message = "发生时间不能为空", groups = { AddGroup.class, EditGroup.class })
private LocalDateTime occurrenceTime;
/**
* 发生地点
*/
@NotBlank(message = "发生地点不能为空", groups = { AddGroup.class, EditGroup.class })
private String occurrencePlace;
/**
* 事故描述(详细经过)
*/
@NotBlank(message = "事故描述(详细经过)不能为空", groups = { AddGroup.class, EditGroup.class })
private String accidentDescription;
/**
* 直接损失金额(元)
*/
@NotNull(message = "直接损失金额(元)不能为空", groups = { AddGroup.class, EditGroup.class })
private BigDecimal directLoss;
/**
* 间接损失金额(元)
*/
private BigDecimal indirectLoss;
/**
* 事故原因分析
*/
@NotBlank(message = "事故原因分析不能为空", groups = { AddGroup.class, EditGroup.class })
private String accidentCause;
/**
* 人员伤亡情况(如有)
*/
private String casualtySituation;
/**
* 应急处理措施
*/
@NotBlank(message = "应急处理措施不能为空", groups = { AddGroup.class, EditGroup.class })
private String emergencyMeasures;
/**
* 整改预防措施
*/
@NotBlank(message = "整改预防措施不能为空", groups = { AddGroup.class, EditGroup.class })
private String rectificationMeasures;
/**
* 责任人
*/
private Long responsiblePerson;
/**
* 处理结果
*/
private String handleResult;
/**
* 记录人
*/
@NotNull(message = "记录人不能为空", groups = { AddGroup.class, EditGroup.class })
private Long recorder;
/**
* 记录日期
*/
@NotNull(message = "记录日期不能为空", groups = { AddGroup.class, EditGroup.class })
private LocalDate recordDate;
/**
* 审核状态
*/
private String auditStatus;
/**
* 照片文件id (多个文件逗号分隔)
*/
private String fileId;
/**
* pdf文件id (多个文件逗号分隔)
*/
private String pdfId;
}

View File

@ -0,0 +1,25 @@
package org.dromara.mechanical.jxsgjl.domain.vo;
import lombok.Data;
@Data
public class JxSgxxHead {
/**
* 总数
*/
private Long zs = 0L;
/**
* 一般事故
*/
private Long ybsg = 0L;
/**
* 重大事故
*/
private Long zdsg = 0L;
/**
* 严重事故
*/
private Long yzsg = 0L;
}

View File

@ -0,0 +1,169 @@
package org.dromara.mechanical.jxsgjl.domain.vo;
import java.math.BigDecimal;
import org.dromara.mechanical.jxsgjl.domain.JxSgxxjlb;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;
/**
* 机械事故信息记录视图对象 jx_sgxxjlb
*
* @author Lion Li
* @date 2025-12-04
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = JxSgxxjlb.class)
public class JxSgxxjlbVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* id
*/
@ExcelProperty(value = "id")
private Long id;
/**
* 事故编号如SGJL-20230620-001
*/
@ExcelProperty(value = "事故编号")
private String accidentCode;
/**
* 事故等级(下拉选择)
*/
@ExcelProperty(value = "事故等级")
private String accidentLevel;
/**
* 事故类型(下拉选择)
*/
@ExcelProperty(value = "事故类型")
private String accidentType;
/**
* 设备名称(下拉选择)
*/
@ExcelProperty(value = "设备名称")
private String equipmentName;
/**
* 设备台账id
*/
@ExcelProperty(value = "设备台账id")
private Long equipmentId;
/**
* 发生时间
*/
@ExcelProperty(value = "发生时间")
private LocalDateTime occurrenceTime;
/**
* 发生地点
*/
@ExcelProperty(value = "发生地点")
private String occurrencePlace;
/**
* 事故描述(详细经过)
*/
@ExcelProperty(value = "事故描述")
private String accidentDescription;
/**
* 直接损失金额(元)
*/
@ExcelProperty(value = "直接损失金额")
private BigDecimal directLoss;
/**
* 间接损失金额(元)
*/
@ExcelProperty(value = "间接损失金额")
private BigDecimal indirectLoss;
/**
* 事故原因分析
*/
@ExcelProperty(value = "事故原因分析")
private String accidentCause;
/**
* 人员伤亡情况(如有)
*/
@ExcelProperty(value = "人员伤亡情况")
private String casualtySituation;
/**
* 应急处理措施
*/
@ExcelProperty(value = "应急处理措施")
private String emergencyMeasures;
/**
* 整改预防措施
*/
@ExcelProperty(value = "整改预防措施")
private String rectificationMeasures;
/**
* 责任人
*/
@ExcelProperty(value = "责任人")
private Long responsiblePerson;
/**
* 处理结果
*/
@ExcelProperty(value = "处理结果")
private String handleResult;
/**
* 记录人
*/
@ExcelProperty(value = "记录人")
private Long recorder;
/**
* 记录日期
*/
@ExcelProperty(value = "记录日期")
private LocalDate recordDate;
/**
* 审核状态
*/
@ExcelProperty(value = "审核状态")
private String auditStatus;
/**
* 照片文件id (多个文件逗号分隔)
*/
@ExcelProperty(value = "照片文件id ", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "多=个文件逗号分隔")
private String fileId;
/**
* pdf文件id (多个文件逗号分隔)
*/
@ExcelProperty(value = "pdf文件id ", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "多=个文件逗号分隔")
private String pdfId;
}

View File

@ -0,0 +1,15 @@
package org.dromara.mechanical.jxsgjl.mapper;
import org.dromara.mechanical.jxsgjl.domain.JxSgxxjlb;
import org.dromara.mechanical.jxsgjl.domain.vo.JxSgxxjlbVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 机械事故信息记录Mapper接口
*
* @author Lion Li
* @date 2025-12-04
*/
public interface JxSgxxjlbMapper extends BaseMapperPlus<JxSgxxjlb, JxSgxxjlbVo> {
}

View File

@ -0,0 +1,73 @@
package org.dromara.mechanical.jxsgjl.service;
import org.dromara.mechanical.jxsgjl.domain.vo.JxSgxxHead;
import org.dromara.mechanical.jxsgjl.domain.vo.JxSgxxjlbVo;
import org.dromara.mechanical.jxsgjl.domain.bo.JxSgxxjlbBo;
import org.dromara.mechanical.jxsgjl.domain.JxSgxxjlb;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.Collection;
import java.util.List;
/**
* 机械事故信息记录Service接口
*
* @author Lion Li
* @date 2025-12-04
*/
public interface IJxSgxxjlbService extends IService<JxSgxxjlb>{
/**
* 查询机械事故信息记录
*
* @param id 主键
* @return 机械事故信息记录
*/
JxSgxxjlbVo queryById(Long id);
/**
* 分页查询机械事故信息记录列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 机械事故信息记录分页列表
*/
TableDataInfo<JxSgxxjlbVo> queryPageList(JxSgxxjlbBo bo, PageQuery pageQuery);
/**
* 查询符合条件的机械事故信息记录列表
*
* @param bo 查询条件
* @return 机械事故信息记录列表
*/
List<JxSgxxjlbVo> queryList(JxSgxxjlbBo bo);
/**
* 新增机械事故信息记录
*
* @param bo 机械事故信息记录
* @return 是否新增成功
*/
Boolean insertByBo(JxSgxxjlbBo bo);
/**
* 修改机械事故信息记录
*
* @param bo 机械事故信息记录
* @return 是否修改成功
*/
Boolean updateByBo(JxSgxxjlbBo bo);
/**
* 校验并批量删除机械事故信息记录信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
JxSgxxHead getHeadData();
}

View File

@ -0,0 +1,192 @@
package org.dromara.mechanical.jxsgjl.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.dromara.common.utils.BatchNumberGenerator;
import org.dromara.mechanical.jxaqgl.domain.JxAqjcgl;
import org.dromara.mechanical.jxgl.domain.vo.JxGzwxJlVo;
import org.dromara.mechanical.jxsgjl.domain.vo.JxSgxxHead;
import org.dromara.system.service.ISysOssService;
import org.springframework.stereotype.Service;
import org.dromara.mechanical.jxsgjl.domain.bo.JxSgxxjlbBo;
import org.dromara.mechanical.jxsgjl.domain.vo.JxSgxxjlbVo;
import org.dromara.mechanical.jxsgjl.domain.JxSgxxjlb;
import org.dromara.mechanical.jxsgjl.mapper.JxSgxxjlbMapper;
import org.dromara.mechanical.jxsgjl.service.IJxSgxxjlbService;
import java.time.LocalDate;
import java.util.*;
/**
* 机械事故信息记录Service业务层处理
*
* @author Lion Li
* @date 2025-12-04
*/
@RequiredArgsConstructor
@Service
public class JxSgxxjlbServiceImpl extends ServiceImpl<JxSgxxjlbMapper, JxSgxxjlb> implements IJxSgxxjlbService {
private final JxSgxxjlbMapper baseMapper;
private final ISysOssService sysOssService;
/**
* 查询机械事故信息记录
*
* @param id 主键
* @return 机械事故信息记录
*/
@Override
public JxSgxxjlbVo queryById(Long id){
return baseMapper.selectVoById(id);
}
/**
* 分页查询机械事故信息记录列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 机械事故信息记录分页列表
*/
@Override
public TableDataInfo<JxSgxxjlbVo> queryPageList(JxSgxxjlbBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<JxSgxxjlb> lqw = buildQueryWrapper(bo);
Page<JxSgxxjlbVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询符合条件的机械事故信息记录列表
*
* @param bo 查询条件
* @return 机械事故信息记录列表
*/
@Override
public List<JxSgxxjlbVo> queryList(JxSgxxjlbBo bo) {
LambdaQueryWrapper<JxSgxxjlb> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<JxSgxxjlb> buildQueryWrapper(JxSgxxjlbBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<JxSgxxjlb> lqw = Wrappers.lambdaQuery();
lqw.orderByDesc(JxSgxxjlb::getId);
lqw.eq(StringUtils.isNotBlank(bo.getAccidentCode()), JxSgxxjlb::getAccidentCode, bo.getAccidentCode());
lqw.eq(StringUtils.isNotBlank(bo.getAccidentLevel()), JxSgxxjlb::getAccidentLevel, bo.getAccidentLevel());
lqw.eq(StringUtils.isNotBlank(bo.getAccidentType()), JxSgxxjlb::getAccidentType, bo.getAccidentType());
lqw.like(StringUtils.isNotBlank(bo.getEquipmentName()), JxSgxxjlb::getEquipmentName, bo.getEquipmentName());
lqw.eq(bo.getOccurrenceTime() != null, JxSgxxjlb::getOccurrenceTime, bo.getOccurrenceTime());
lqw.eq(StringUtils.isNotBlank(bo.getOccurrencePlace()), JxSgxxjlb::getOccurrencePlace, bo.getOccurrencePlace());
lqw.eq(StringUtils.isNotBlank(bo.getAccidentDescription()), JxSgxxjlb::getAccidentDescription, bo.getAccidentDescription());
lqw.eq(bo.getDirectLoss() != null, JxSgxxjlb::getDirectLoss, bo.getDirectLoss());
lqw.eq(bo.getIndirectLoss() != null, JxSgxxjlb::getIndirectLoss, bo.getIndirectLoss());
lqw.eq(StringUtils.isNotBlank(bo.getAccidentCause()), JxSgxxjlb::getAccidentCause, bo.getAccidentCause());
lqw.eq(StringUtils.isNotBlank(bo.getCasualtySituation()), JxSgxxjlb::getCasualtySituation, bo.getCasualtySituation());
lqw.eq(StringUtils.isNotBlank(bo.getEmergencyMeasures()), JxSgxxjlb::getEmergencyMeasures, bo.getEmergencyMeasures());
lqw.eq(StringUtils.isNotBlank(bo.getRectificationMeasures()), JxSgxxjlb::getRectificationMeasures, bo.getRectificationMeasures());
lqw.eq(bo.getResponsiblePerson() != null, JxSgxxjlb::getResponsiblePerson, bo.getResponsiblePerson());
lqw.eq(StringUtils.isNotBlank(bo.getHandleResult()), JxSgxxjlb::getHandleResult, bo.getHandleResult());
lqw.eq(bo.getRecorder() != null, JxSgxxjlb::getRecorder, bo.getRecorder());
lqw.eq(bo.getRecordDate() != null, JxSgxxjlb::getRecordDate, bo.getRecordDate());
lqw.eq(StringUtils.isNotBlank(bo.getAuditStatus()), JxSgxxjlb::getAuditStatus, bo.getAuditStatus());
lqw.eq(StringUtils.isNotBlank(bo.getFileId()), JxSgxxjlb::getFileId, bo.getFileId());
lqw.eq(StringUtils.isNotBlank(bo.getPdfId()), JxSgxxjlb::getPdfId, bo.getPdfId());
return lqw;
}
/**
* 新增机械事故信息记录
*
* @param bo 机械事故信息记录
* @return 是否新增成功
*/
@Override
public Boolean insertByBo(JxSgxxjlbBo bo) {
JxSgxxjlb add = MapstructUtils.convert(bo, JxSgxxjlb.class);
validEntityBeforeSave(add);
String banBen = BatchNumberGenerator.generateBatchNumber("JXAQSGJL-");
add.setAccidentCode(banBen);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}
/**
* 修改机械事故信息记录
*
* @param bo 机械事故信息记录
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(JxSgxxjlbBo bo) {
JxSgxxjlb update = MapstructUtils.convert(bo, JxSgxxjlb.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(JxSgxxjlb entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 校验并批量删除机械事故信息记录信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
List<Long> deleteIds = new ArrayList<>();
for (Long id : ids) {
JxSgxxjlbVo vo = baseMapper.selectVoById(id);
if (vo != null){
//删除附件
if (vo.getFileId()!= null && !vo.getFileId().isEmpty()){
List<Long> list = Arrays.stream(vo.getFileId().split(",")).map(Long::valueOf).toList();
deleteIds.addAll(list);
}
}
}
if (!deleteIds.isEmpty()) {
sysOssService.deleteWithValidByIds(deleteIds, false);
}
return baseMapper.deleteByIds(ids) > 0;
}
@Override
public JxSgxxHead getHeadData() {
JxSgxxHead jxSgxxHead = new JxSgxxHead();
List<JxSgxxjlb> jxSgxxjlbs = this.getBaseMapper().selectList(new LambdaQueryWrapper<JxSgxxjlb>().le(JxSgxxjlb::getCreateTime, LocalDate.now().plusDays(1)).ge(JxSgxxjlb::getCreateTime, LocalDate.now().minusDays(29)));
if (jxSgxxjlbs != null && jxSgxxjlbs.size() > 0) {
long ybsg = jxSgxxjlbs.stream().filter(jxSgxxjlb -> jxSgxxjlb.getAccidentLevel().equals("1")).count();
long yzsg = jxSgxxjlbs.stream().filter(jxSgxxjlb -> jxSgxxjlb.getAccidentLevel().equals("2")).count();
long zdsg = jxSgxxjlbs.stream().filter(jxSgxxjlb -> jxSgxxjlb.getAccidentLevel().equals("3")).count();
jxSgxxHead.setZs(Long.valueOf(jxSgxxjlbs.size()));
jxSgxxHead.setYbsg(ybsg);
jxSgxxHead.setYzsg(yzsg);
jxSgxxHead.setZdsg(zdsg);
}
return jxSgxxHead;
}
}

View File

@ -0,0 +1,153 @@
package org.dromara.mechanical.jxzgbh.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.dromara.mechanical.jxzgbh.domain.JxFcxx;
import org.dromara.mechanical.jxzgbh.domain.bo.JxFcxxBo;
import org.dromara.mechanical.jxzgbh.domain.bo.JxZgxxBo;
import org.dromara.mechanical.jxzgbh.domain.vo.JxZgxxHeadVo;
import org.dromara.mechanical.jxzgbh.domain.vo.JxZgxxOrFcxxVo;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.mechanical.jxzgbh.domain.vo.JxYhzgbhVo;
import org.dromara.mechanical.jxzgbh.domain.bo.JxYhzgbhBo;
import org.dromara.mechanical.jxzgbh.service.IJxYhzgbhService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
* 机械隐患整改与闭环
*
* @author Lion Li
* @date 2025-12-03
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/jxzgbh/yhzgbh")
public class JxYhzgbhController extends BaseController {
private final IJxYhzgbhService jxYhzgbhService;
/**
* 头部数据返回
*/
@SaCheckPermission("jxzgbh:yhzgbh:list")
@GetMapping("/getListHead")
public R<JxZgxxHeadVo> getListHead(JxYhzgbhBo bo, PageQuery pageQuery) {
return R.ok(jxYhzgbhService.getListHead(bo, pageQuery));
}
/**
* 整改接口
*/
@SaCheckPermission("jxzgbh:yhzgbh:edit")
@PutMapping("/zgPutBo")
public R<Void> zgPutBo(@RequestBody JxZgxxBo bo) {
return toAjax(jxYhzgbhService.zgPutBo(bo));
}
/**
* 复查,整改接口详情查询 1整改 2 复查
*/
@SaCheckPermission("jxzgbh:yhzgbh:edit")
@GetMapping("/zgxxorfcxx/{type}/{id}")
public R<JxZgxxOrFcxxVo> zgxxorfcxx(@PathVariable String type, @PathVariable Long id) {
return R.ok(jxYhzgbhService.zgxxorfcxx(type,id));
}
/**
*复查
*/
@SaCheckPermission("jxzgbh:yhzgbh:edit")
@PutMapping("/fcPutBo")
public R<Void> fcPutBo(@RequestBody JxFcxxBo bo) {
return toAjax(jxYhzgbhService.fcPutBo(bo));
}
/**
* 查询机械隐患整改与闭环列表
*/
@SaCheckPermission("jxzgbh:yhzgbh:list")
@GetMapping("/list")
public TableDataInfo<JxYhzgbhVo> list(JxYhzgbhBo bo, PageQuery pageQuery) {
return jxYhzgbhService.queryPageList(bo, pageQuery);
}
/**
* 导出机械隐患整改与闭环列表
*/
@SaCheckPermission("jxzgbh:yhzgbh:export")
@Log(title = "机械隐患整改与闭环", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(JxYhzgbhBo bo, HttpServletResponse response) {
List<JxYhzgbhVo> list = jxYhzgbhService.queryList(bo);
ExcelUtil.exportExcel(list, "机械隐患整改与闭环", JxYhzgbhVo.class, response);
}
/**
* 获取机械隐患整改与闭环详细信息
*
* @param id 主键
*/
@SaCheckPermission("jxzgbh:yhzgbh:query")
@GetMapping("/{id}")
public R<JxYhzgbhVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(jxYhzgbhService.queryById(id));
}
/**
* 新增机械隐患整改与闭环
*/
@SaCheckPermission("jxzgbh:yhzgbh:add")
@Log(title = "机械隐患整改与闭环", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody JxYhzgbhBo bo) {
return toAjax(jxYhzgbhService.insertByBo(bo));
}
/**
* 修改机械隐患整改与闭环
*/
@SaCheckPermission("jxzgbh:yhzgbh:edit")
@Log(title = "机械隐患整改与闭环", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody JxYhzgbhBo bo) {
return toAjax(jxYhzgbhService.updateByBo(bo));
}
/**
* 删除机械隐患整改与闭环
*
* @param ids 主键串
*/
@SaCheckPermission("jxzgbh:yhzgbh:remove")
@Log(title = "机械隐患整改与闭环", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(jxYhzgbhService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@ -0,0 +1,79 @@
package org.dromara.mechanical.jxzgbh.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
import java.time.LocalDate;
/**
* 机械隐患复查信息对象 jx_fcxx
*
* @author Lion Li
* @date 2025-12-03
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("jx_fcxx")
public class JxFcxx extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "id")
private Long id;
/**
* 机械隐患ID
*/
private Long masterId;
/**
* 复查人
*/
private Long review;
/**
* 复查日期
*/
private LocalDate reviewDate;
/**
* 复查状态
*/
private String reviewOpinion;
/**
* 最终闭环状态
*/
private String reviewState;
/**
* 不通过原因
*/
private String notPassCause;
/**
* 复查意见详情
*/
private String reviewOpinionParticulars;
/**
* 文件id (多个文件逗号分隔)
*/
private String fileId;
/**
* pdf文件id (多个文件逗号分隔)
*/
private String pdfId;
private Integer sort;
}

View File

@ -0,0 +1,110 @@
package org.dromara.mechanical.jxzgbh.domain;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
import java.time.LocalDate;
/**
* 机械隐患整改与闭环对象 jx_yhzgbh
*
* @author Lion Li
* @date 2025-12-03
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("jx_yhzgbh")
public class JxYhzgbh extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "id")
private Long id;
/**
* 隐患编号
*/
private String inspectionOrderNo;
/**
* 检查单编号
*/
private String inspectionJcdNo;
/**
* 检查人
*/
private Long inspector;
/**
* 最终闭环状态
*/
private String reviewState;
/**
* 整改状态
*/
private String abarbeitungState;
/**
* 机械安全检查记录表ID
*/
private Long masterId;
/**
* 隐患等级
*/
private String riskGrade;
/**
* 隐患来源
*/
private String yhly;
/**
* 对应设备
*/
private String equipmentName;
/**
* 发现时间
*/
private LocalDate discoverDate;
/**
* 发现人
*/
private Long discoverId;
/**
* 整改人
*/
private Long abarbeitung;
/**
* 审核状态
*/
private String auditStatus;
/**
* 复查状态
*/
private String reviewOpinion;
/**
* 文件id (多个文件逗号分隔)
*/
private String fileId;
}

View File

@ -0,0 +1,82 @@
package org.dromara.mechanical.jxzgbh.domain;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
import java.time.LocalDate;
/**
* 机械隐患整改信息对象 jx_zgxx
*
* @author Lion Li
* @date 2025-12-03
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("jx_zgxx")
public class JxZgxx extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "id")
private Long id;
/**
* 机械隐患ID
*/
private Long masterId;
/**
* 整改责任人
*/
private Long abarbeitung;
/**
* 整改开始日期
*/
private LocalDate abarbeitungKsdate;
/**
* 整改结束日期
*/
private LocalDate abarbeitungJsdate;
// /**
// * 整改期限
// */
// private LocalDate abarbeitungDeadline;
/**
* 整改措施
*/
private String abarbeitungMeasure;
/**
* 整改完成情况
*/
private String abarbeitungAccomplish;
/**
* 文件id (多个文件逗号分隔)
*/
private String fileId;
/**
* pdf文件id (多个文件逗号分隔)
*/
private String pdfId;
private Integer sort;
}

View File

@ -0,0 +1,85 @@
package org.dromara.mechanical.jxzgbh.domain.bo;
import org.dromara.mechanical.jxzgbh.domain.JxFcxx;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.time.LocalDate;
/**
* 机械隐患复查信息业务对象 jx_fcxx
*
* @author Lion Li
* @date 2025-12-03
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = JxFcxx.class, reverseConvertGenerate = false)
public class JxFcxxBo extends BaseEntity {
/**
* 主键ID
*/
@NotNull(message = "主键ID不能为空", groups = { EditGroup.class })
private Long id;
/**
* 机械隐患ID
*/
@NotNull(message = "机械隐患ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long masterId;
/**
* 复查人
*/
@NotNull(message = "复查人不能为空", groups = { AddGroup.class, EditGroup.class })
private Long review;
/**
* 复查日期
*/
@NotNull(message = "复查日期不能为空", groups = { AddGroup.class, EditGroup.class })
private LocalDate reviewDate;
/**
* 复查意见
*/
@NotBlank(message = "复查状态不能为空", groups = { AddGroup.class, EditGroup.class })
private String reviewOpinion;
/**
* 最终闭环状态
*/
@NotBlank(message = "最终闭环状态不能为空", groups = { AddGroup.class, EditGroup.class })
private String reviewState;
/**
* 不通过原因
*/
private String notPassCause;
/**
* 复查意见详情
*/
@NotBlank(message = "复查意见详情不能为空", groups = { AddGroup.class, EditGroup.class })
private String reviewOpinionParticulars;
/**
* 文件id (多个文件逗号分隔)
*/
private String fileId;
/**
* pdf文件id (多个文件逗号分隔)
*/
private String pdfId;
private Integer sort;
}

View File

@ -0,0 +1,113 @@
package org.dromara.mechanical.jxzgbh.domain.bo;
import org.dromara.mechanical.jxzgbh.domain.JxYhzgbh;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.time.LocalDate;
/**
* 机械隐患整改与闭环业务对象 jx_yhzgbh
*
* @author Lion Li
* @date 2025-12-03
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = JxYhzgbh.class, reverseConvertGenerate = false)
public class JxYhzgbhBo extends BaseEntity {
/**
* 主键ID
*/
@NotNull(message = "主键ID不能为空", groups = { EditGroup.class })
private Long id;
/**
* 隐患编号
*/
private String inspectionOrderNo;
/**
* 检查单编号
*/
private String inspectionJcdNo;
/**
* 检查人
*/
private Long inspector;
/**
* 复查状态
*/
private String reviewOpinion;
/**
* 整改人
*/
private Long abarbeitung;
/**
* 机械安全检查记录表ID
*/
@NotNull(message = "机械安全检查记录表ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long masterId;
/**
* 隐患等级
*/
@NotBlank(message = "隐患等级不能为空", groups = { AddGroup.class, EditGroup.class })
private String riskGrade;
/**
* 最终闭环状态
*/
private String reviewState;
/**
* 整改状态
*/
private String abarbeitungState;
/**
* 隐患来源
*/
@NotBlank(message = "隐患来源不能为空", groups = { AddGroup.class, EditGroup.class })
private String yhly;
/**
* 对应设备
*/
@NotBlank(message = "对应设备不能为空", groups = { AddGroup.class, EditGroup.class })
private String equipmentName;
/**
* 发现时间
*/
@NotNull(message = "发现时间不能为空", groups = { AddGroup.class, EditGroup.class })
private LocalDate discoverDate;
/**
* 发现人
*/
@NotNull(message = "发现人不能为空", groups = { AddGroup.class, EditGroup.class })
private Long discoverId;
/**
* 审核状态
*/
private String auditStatus;
/**
* 文件id (多个文件逗号分隔)
*/
private String fileId;
}

View File

@ -0,0 +1,86 @@
package org.dromara.mechanical.jxzgbh.domain.bo;
import org.dromara.mechanical.jxzgbh.domain.JxZgxx;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.time.LocalDate;
/**
* 机械隐患整改信息业务对象 jx_zgxx
*
* @author Lion Li
* @date 2025-12-03
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = JxZgxx.class, reverseConvertGenerate = false)
public class JxZgxxBo extends BaseEntity {
/**
* 主键ID
*/
@NotNull(message = "主键ID不能为空", groups = { EditGroup.class })
private Long id;
/**
* 机械隐患ID
*/
@NotNull(message = "机械隐患ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long masterId;
/**
* 整改责任人
*/
@NotNull(message = "整改责任人不能为空", groups = { AddGroup.class, EditGroup.class })
private Long abarbeitung;
/**
* 整改开始日期
*/
@NotNull(message = "整改开始日期不能为空", groups = { AddGroup.class, EditGroup.class })
private LocalDate abarbeitungKsdate;
/**
* 整改结束日期
*/
@NotNull(message = "整改结束日期不能为空", groups = { AddGroup.class, EditGroup.class })
private LocalDate abarbeitungJsdate;
// /**
// * 整改期限
// */
// @NotNull(message = "整改期限不能为空", groups = { AddGroup.class, EditGroup.class })
// private LocalDate abarbeitungDeadline;
/**
* 整改措施
*/
@NotBlank(message = "整改措施不能为空", groups = { AddGroup.class, EditGroup.class })
private String abarbeitungMeasure;
/**
* 整改完成情况
*/
@NotBlank(message = "整改完成情况不能为空", groups = { AddGroup.class, EditGroup.class })
private String abarbeitungAccomplish;
/**
* 文件id (多个文件逗号分隔)
*/
private String fileId;
/**
* pdf文件id (多个文件逗号分隔)
*/
private String pdfId;
private Integer sort;
}

View File

@ -0,0 +1,119 @@
package org.dromara.mechanical.jxzgbh.domain.vo;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import org.dromara.common.translation.annotation.Translation;
import org.dromara.common.translation.constant.TransConstant;
import org.dromara.mechanical.jxzgbh.domain.JxFcxx;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDate;
import java.util.Date;
/**
* 机械隐患复查信息视图对象 jx_fcxx
*
* @author Lion Li
* @date 2025-12-03
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = JxFcxx.class)
public class JxFcxxVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@ExcelProperty(value = "主键ID")
private Long id;
/**
* 机械隐患ID
*/
@ExcelProperty(value = "机械隐患ID")
private Long masterId;
/**
* 复查人
*/
@ExcelProperty(value = "复查人")
private Long review;
/**
* 复查人
*/
@ExcelProperty(value = "复查人")
@Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "review")
private String reviewName;
/**
* 复查日期
*/
@ExcelProperty(value = "复查日期")
private LocalDate reviewDate;
/**
* 复查意见
*/
@ExcelProperty(value = "复查意见")
private String reviewOpinion;
/**
* 最终闭环状态
*/
@ExcelProperty(value = "最终闭环状态")
private String reviewState;
/**
* 不通过原因
*/
@ExcelProperty(value = "不通过原因")
private String notPassCause;
/**
* 复查意见详情
*/
@ExcelProperty(value = "复查意见详情")
private String reviewOpinionParticulars;
/**
* 文件id (多个文件逗号分隔)
*/
@ExcelProperty(value = "文件id ", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "多=个文件逗号分隔")
private String fileId;
/**
* pdf文件id (多个文件逗号分隔)
*/
@ExcelProperty(value = "pdf文件id ", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "多=个文件逗号分隔")
private String pdfId;
private Integer sort;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private Date createTime;
}

View File

@ -0,0 +1,168 @@
package org.dromara.mechanical.jxzgbh.domain.vo;
import org.dromara.common.translation.annotation.Translation;
import org.dromara.common.translation.constant.TransConstant;
import org.dromara.mechanical.jxaqgl.domain.JxAqjcglWtxq;
import org.dromara.mechanical.jxzgbh.domain.JxFcxx;
import org.dromara.mechanical.jxzgbh.domain.JxYhzgbh;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.mechanical.jxzgbh.domain.JxZgxx;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDate;
import java.util.Date;
import java.util.List;
/**
* 机械隐患整改与闭环视图对象 jx_yhzgbh
*
* @author Lion Li
* @date 2025-12-03
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = JxYhzgbh.class)
public class JxYhzgbhVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@ExcelProperty(value = "主键ID")
private Long id;
/**
* 隐患编号
*/
@ExcelProperty(value = "隐患编号")
private String inspectionOrderNo;
/**
* 检查单编号
*/
@ExcelProperty(value = "检查单编号")
private String inspectionJcdNo;
/**
* 检查人
*/
@ExcelProperty(value = "检查人")
private Long inspector;
/**
* 复查状态
*/
private String reviewOpinion;
/**
* 检查人
*/
@ExcelProperty(value = "检查人")
@Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "inspector")
private String inspectorName;
/**
* 机械安全检查记录表ID
*/
@ExcelProperty(value = "机械安全检查记录表ID")
private Long masterId;
/**
* 隐患等级
*/
@ExcelProperty(value = "隐患等级")
private String riskGrade;
/**
* 隐患来源
*/
@ExcelProperty(value = "隐患来源")
private String yhly;
/**
* 对应设备
*/
@ExcelProperty(value = "对应设备")
private String equipmentName;
/**
* 最终闭环状态
*/
private String reviewState;
/**
* 整改状态
*/
private String abarbeitungState;
/**
* 发现时间
*/
@ExcelProperty(value = "发现时间")
private LocalDate discoverDate;
/**
* 发现人
*/
@ExcelProperty(value = "发现人")
private Long discoverId;
/**
* 发现人
*/
@ExcelProperty(value = "发现人")
@Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "discoverId")
private String discoverName;
/**
* 整改人
*/
private Long abarbeitung;
/**
* 整改人
*/
@Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "discoverId")
private String abarbeitungName;
/**
* 审核状态
*/
@ExcelProperty(value = "审核状态")
private String auditStatus;
/**
* 文件id (多个文件逗号分隔)
*/
@ExcelProperty(value = "文件id ", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "多=个文件逗号分隔")
private String fileId;
/**
* 整改信息
*/
private List<JxZgxxVo> zgxxList;
/**
* 复查信息
*/
private List<JxFcxxVo> fcxxList;
/**
* 问题详情
*/
private List<JxAqjcglWtxq> wtxqList;
}

View File

@ -0,0 +1,30 @@
package org.dromara.mechanical.jxzgbh.domain.vo;
import lombok.Data;
@Data
public class JxZgxxHeadVo {
/**
* 总数
*/
private Long zs = 0L;
/**
* 已整改
*/
private Long yzg = 0L;
/**
* 未整改
*/
private Long wzg = 0L;
/**
* 已闭环
*/
private Long ybh = 0L;
}

View File

@ -0,0 +1,38 @@
package org.dromara.mechanical.jxzgbh.domain.vo;
import lombok.Data;
import org.dromara.mechanical.jxaqgl.domain.JxAqjcglWtxq;
import org.dromara.mechanical.jxzgbh.domain.JxFcxx;
import org.dromara.mechanical.jxzgbh.domain.JxZgxx;
import java.util.List;
@Data
public class JxZgxxOrFcxxVo {
/**
* 隐患整改与闭环
*/
private JxYhzgbhVo yhzgbhVo;
/**
* 复查数据
*/
private JxFcxx fcxxVo;
/**
* 整改数据
*/
private JxZgxx zgxxVo;
/**
* 问题详情
*/
private List<JxAqjcglWtxq> wtxqList;
}

View File

@ -0,0 +1,108 @@
package org.dromara.mechanical.jxzgbh.domain.vo;
import org.dromara.common.translation.annotation.Translation;
import org.dromara.common.translation.constant.TransConstant;
import org.dromara.mechanical.jxzgbh.domain.JxZgxx;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDate;
import java.util.Date;
/**
* 机械隐患整改信息视图对象 jx_zgxx
*
* @author Lion Li
* @date 2025-12-03
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = JxZgxx.class)
public class JxZgxxVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@ExcelProperty(value = "主键ID")
private Long id;
/**
* 机械隐患ID
*/
@ExcelProperty(value = "机械隐患ID")
private Long masterId;
/**
* 整改责任人
*/
@ExcelProperty(value = "整改责任人")
private Long abarbeitung;
/**
* 整改责任人
*/
@ExcelProperty(value = "整改责任人")
@Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "abarbeitung")
private String abarbeitungName;
/**
* 整改开始日期
*/
@ExcelProperty(value = "整改开始日期")
private LocalDate abarbeitungKsdate;
/**
* 整改结束日期
*/
@ExcelProperty(value = "整改结束日期")
private LocalDate abarbeitungJsdate;
// /**
// * 整改期限
// */
// @ExcelProperty(value = "整改期限")
// private LocalDate abarbeitungDeadline;
/**
* 整改措施
*/
@ExcelProperty(value = "整改措施")
private String abarbeitungMeasure;
/**
* 整改完成情况
*/
@ExcelProperty(value = "整改完成情况")
private String abarbeitungAccomplish;
/**
* 文件id (多个文件逗号分隔)
*/
@ExcelProperty(value = "文件id ", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "多=个文件逗号分隔")
private String fileId;
/**
* pdf文件id (多个文件逗号分隔)
*/
@ExcelProperty(value = "pdf文件id ", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "多=个文件逗号分隔")
private String pdfId;
private Integer sort;
}

View File

@ -0,0 +1,15 @@
package org.dromara.mechanical.jxzgbh.mapper;
import org.dromara.mechanical.jxzgbh.domain.JxFcxx;
import org.dromara.mechanical.jxzgbh.domain.vo.JxFcxxVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 机械隐患复查信息Mapper接口
*
* @author Lion Li
* @date 2025-12-03
*/
public interface JxFcxxMapper extends BaseMapperPlus<JxFcxx, JxFcxxVo> {
}

Some files were not shown because too many files have changed in this diff Show More