feat(equipment): 添加设备维修图片功能并优化维修记录相关接口- 新增 DeviceRepairImages 相关实体、Mapper 和 XML 文件- 重构 DeviceRepairRecords 相关接口和实现类,支持图片上传
- 新增 RepairImageType 枚举类 - 优化 DeviceRepairRecordsVo,增加图片列表和设备名称字段
This commit is contained in:
@ -1,5 +1,10 @@
|
||||
package com.fuyuanshen.equipment.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.fuyuanshen.equipment.domain.Device;
|
||||
import com.fuyuanshen.equipment.domain.DeviceRepairRecords;
|
||||
import com.fuyuanshen.equipment.domain.query.DeviceRepairRecordsQueryCriteria;
|
||||
import com.fuyuanshen.equipment.domain.vo.DeviceRepairRecordsVo;
|
||||
import com.fuyuanshen.equipment.domain.bo.DeviceRepairRecordsBo;
|
||||
import com.fuyuanshen.common.mybatis.core.page.TableDataInfo;
|
||||
@ -14,7 +19,7 @@ import java.util.List;
|
||||
* @author Lion Li
|
||||
* @date 2025-08-08
|
||||
*/
|
||||
public interface IDeviceRepairRecordsService {
|
||||
public interface IDeviceRepairRecordsService extends IService<DeviceRepairRecords> {
|
||||
|
||||
/**
|
||||
* 查询设备维修记录
|
||||
@ -31,7 +36,7 @@ public interface IDeviceRepairRecordsService {
|
||||
* @param pageQuery 分页参数
|
||||
* @return 设备维修记录分页列表
|
||||
*/
|
||||
TableDataInfo<DeviceRepairRecordsVo> queryPageList(DeviceRepairRecordsBo bo, PageQuery pageQuery);
|
||||
TableDataInfo<DeviceRepairRecordsVo> queryPageList(DeviceRepairRecordsQueryCriteria criteria, Page<DeviceRepairRecords> page);
|
||||
|
||||
/**
|
||||
* 查询符合条件的设备维修记录列表
|
||||
@ -39,7 +44,7 @@ public interface IDeviceRepairRecordsService {
|
||||
* @param bo 查询条件
|
||||
* @return 设备维修记录列表
|
||||
*/
|
||||
List<DeviceRepairRecordsVo> queryList(DeviceRepairRecordsBo bo);
|
||||
List<DeviceRepairRecordsVo> queryList(DeviceRepairRecordsQueryCriteria criteria);
|
||||
|
||||
/**
|
||||
* 新增设备维修记录
|
||||
|
||||
@ -1,11 +1,25 @@
|
||||
package com.fuyuanshen.equipment.service.impl;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.fuyuanshen.common.core.utils.MapstructUtils;
|
||||
import com.fuyuanshen.common.mybatis.core.page.TableDataInfo;
|
||||
import com.fuyuanshen.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 com.fuyuanshen.common.satoken.utils.LoginHelper;
|
||||
import com.fuyuanshen.equipment.domain.Device;
|
||||
import com.fuyuanshen.equipment.domain.DeviceRepairImages;
|
||||
import com.fuyuanshen.equipment.domain.DeviceType;
|
||||
import com.fuyuanshen.equipment.domain.query.DeviceRepairRecordsQueryCriteria;
|
||||
import com.fuyuanshen.equipment.domain.vo.DeviceRepairImagesVo;
|
||||
import com.fuyuanshen.equipment.enums.RepairImageType;
|
||||
import com.fuyuanshen.equipment.mapper.DeviceMapper;
|
||||
import com.fuyuanshen.equipment.mapper.DeviceRepairImagesMapper;
|
||||
import com.fuyuanshen.system.domain.vo.SysOssVo;
|
||||
import com.fuyuanshen.system.service.ISysOssService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
@ -15,10 +29,10 @@ import com.fuyuanshen.equipment.domain.vo.DeviceRepairRecordsVo;
|
||||
import com.fuyuanshen.equipment.domain.DeviceRepairRecords;
|
||||
import com.fuyuanshen.equipment.mapper.DeviceRepairRecordsMapper;
|
||||
import com.fuyuanshen.equipment.service.IDeviceRepairRecordsService;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Collection;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* 设备维修记录Service业务层处理
|
||||
@ -29,9 +43,11 @@ import java.util.Collection;
|
||||
@Slf4j
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
public class DeviceRepairRecordsServiceImpl implements IDeviceRepairRecordsService {
|
||||
public class DeviceRepairRecordsServiceImpl extends ServiceImpl<DeviceRepairRecordsMapper, DeviceRepairRecords> implements IDeviceRepairRecordsService {
|
||||
|
||||
private final DeviceRepairRecordsMapper baseMapper;
|
||||
private final DeviceRepairImagesMapper imagesMapper;
|
||||
private final ISysOssService ossService;
|
||||
|
||||
/**
|
||||
* 查询设备维修记录
|
||||
@ -41,33 +57,53 @@ public class DeviceRepairRecordsServiceImpl implements IDeviceRepairRecordsServi
|
||||
*/
|
||||
@Override
|
||||
public DeviceRepairRecordsVo queryById(Long recordId){
|
||||
return baseMapper.selectVoById(recordId);
|
||||
// 1. 主表
|
||||
DeviceRepairRecordsVo vo = baseMapper.selectVoById(recordId);
|
||||
if (vo == null) {
|
||||
throw new RuntimeException("维修记录不存在");
|
||||
}
|
||||
|
||||
// 2. 子表图片
|
||||
List<DeviceRepairImagesVo> images = imagesMapper.selectVoList(
|
||||
new LambdaQueryWrapper<DeviceRepairImages>()
|
||||
.eq(DeviceRepairImages::getRecordId, recordId)
|
||||
.orderByAsc(DeviceRepairImages::getImageType)); // 如有排序需求
|
||||
// 3. 组装到 VO
|
||||
vo.setImages(images); // 需要在 DeviceRepairRecordsVo 里加该字段
|
||||
return vo;
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页查询设备维修记录列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @param pageQuery 分页参数
|
||||
* @param criteria 查询条件
|
||||
* @param page 分页参数
|
||||
* @return 设备维修记录分页列表
|
||||
*/
|
||||
@Override
|
||||
public TableDataInfo<DeviceRepairRecordsVo> queryPageList(DeviceRepairRecordsBo bo, PageQuery pageQuery) {
|
||||
LambdaQueryWrapper<DeviceRepairRecords> lqw = buildQueryWrapper(bo);
|
||||
Page<DeviceRepairRecordsVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||
return TableDataInfo.build(result);
|
||||
public TableDataInfo<DeviceRepairRecordsVo> queryPageList(DeviceRepairRecordsQueryCriteria criteria, Page<DeviceRepairRecords> page) {
|
||||
// 管理员
|
||||
String username = LoginHelper.getUsername();
|
||||
if (!username.equals("admin")) {
|
||||
criteria.setCustomerId(LoginHelper.getUserId());
|
||||
}
|
||||
|
||||
if(criteria.getRepairEndTime() !=null ){
|
||||
criteria.setRepairEndTime(DateUtil.endOfDay(criteria.getRepairEndTime()));
|
||||
}
|
||||
IPage<DeviceRepairRecordsVo> deviceRepairRecordsIPage = baseMapper.findAll(criteria, page);
|
||||
return new TableDataInfo<DeviceRepairRecordsVo>(deviceRepairRecordsIPage.getRecords(), deviceRepairRecordsIPage.getTotal());
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询符合条件的设备维修记录列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @param criteria 查询条件
|
||||
* @return 设备维修记录列表
|
||||
*/
|
||||
@Override
|
||||
public List<DeviceRepairRecordsVo> queryList(DeviceRepairRecordsBo bo) {
|
||||
LambdaQueryWrapper<DeviceRepairRecords> lqw = buildQueryWrapper(bo);
|
||||
return baseMapper.selectVoList(lqw);
|
||||
public List<DeviceRepairRecordsVo> queryList(DeviceRepairRecordsQueryCriteria criteria) {
|
||||
return baseMapper.findAll(criteria);
|
||||
}
|
||||
|
||||
private LambdaQueryWrapper<DeviceRepairRecords> buildQueryWrapper(DeviceRepairRecordsBo bo) {
|
||||
@ -89,14 +125,30 @@ public class DeviceRepairRecordsServiceImpl implements IDeviceRepairRecordsServi
|
||||
* @return 是否新增成功
|
||||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean insertByBo(DeviceRepairRecordsBo bo) {
|
||||
DeviceRepairRecords add = MapstructUtils.convert(bo, DeviceRepairRecords.class);
|
||||
validEntityBeforeSave(add);
|
||||
boolean flag = baseMapper.insert(add) > 0;
|
||||
if (flag) {
|
||||
bo.setRecordId(add.getRecordId());
|
||||
// 1. 保存主表
|
||||
DeviceRepairRecords entity = MapstructUtils.convert(bo, DeviceRepairRecords.class);
|
||||
validEntityBeforeSave(entity);
|
||||
boolean ok = baseMapper.insert(entity) > 0;
|
||||
if (!ok) {
|
||||
return false;
|
||||
}
|
||||
return flag;
|
||||
|
||||
// 2. 回填主键
|
||||
Long recordId = entity.getRecordId();
|
||||
bo.setRecordId(recordId);
|
||||
|
||||
// 3. 组装图片实体
|
||||
List<DeviceRepairImages> images = new ArrayList<>(2);
|
||||
addImageIfPresent(images, recordId, bo.getBeforeFile(), RepairImageType.BEFORE);
|
||||
addImageIfPresent(images, recordId, bo.getAfterFile(), RepairImageType.AFTER);
|
||||
|
||||
// 4. 批量插入
|
||||
if (!images.isEmpty()) {
|
||||
imagesMapper.insertBatch(images);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -106,10 +158,56 @@ public class DeviceRepairRecordsServiceImpl implements IDeviceRepairRecordsServi
|
||||
* @return 是否修改成功
|
||||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean updateByBo(DeviceRepairRecordsBo bo) {
|
||||
DeviceRepairRecords update = MapstructUtils.convert(bo, DeviceRepairRecords.class);
|
||||
validEntityBeforeSave(update);
|
||||
return baseMapper.updateById(update) > 0;
|
||||
Long recordId = bo.getRecordId();
|
||||
|
||||
// 1. 校验记录是否存在
|
||||
DeviceRepairRecords dbRecord = baseMapper.selectById(recordId);
|
||||
if (dbRecord == null) {
|
||||
throw new RuntimeException("维修记录不存在");
|
||||
}
|
||||
|
||||
// 2. 更新主表
|
||||
DeviceRepairRecords entity = MapstructUtils.convert(bo, DeviceRepairRecords.class);
|
||||
validEntityBeforeSave(entity);
|
||||
if (!StringUtils.isNotEmpty(entity.getDeviceId())){
|
||||
throw new RuntimeException("维修记录不能为空!!!");
|
||||
}
|
||||
boolean updated = baseMapper.updateById(entity) > 0;
|
||||
if (!updated) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// 3. 收集需要保存的图片
|
||||
List<DeviceRepairImages> images = new ArrayList<>(2);
|
||||
addImageIfPresent(images, recordId, bo.getBeforeFile(), RepairImageType.BEFORE);
|
||||
addImageIfPresent(images, recordId, bo.getAfterFile(), RepairImageType.AFTER);
|
||||
|
||||
// 4. 批量插入
|
||||
if (!images.isEmpty()) {
|
||||
imagesMapper.insertBatch(images);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/* ---------- 工具方法 ---------- */
|
||||
|
||||
private void addImageIfPresent(List<DeviceRepairImages> list,
|
||||
Long recordId,
|
||||
MultipartFile file,
|
||||
RepairImageType imageType) {
|
||||
if (file == null || file.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
SysOssVo ossVo = ossService.upload(file);
|
||||
|
||||
DeviceRepairImages image = new DeviceRepairImages();
|
||||
image.setRecordId(recordId);
|
||||
image.setImageType(imageType);
|
||||
image.setImageUrl(ossVo.getUrl());
|
||||
|
||||
list.add(image);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -117,6 +215,9 @@ public class DeviceRepairRecordsServiceImpl implements IDeviceRepairRecordsServi
|
||||
*/
|
||||
private void validEntityBeforeSave(DeviceRepairRecords entity){
|
||||
//TODO 做一些数据校验,如唯一约束
|
||||
if (!StringUtils.isNotEmpty(entity.getDeviceId())){
|
||||
throw new RuntimeException("维修设备不能为空!!!");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user