Merge branch 'dyf-device' into 6170

This commit is contained in:
2025-09-03 15:57:21 +08:00
22 changed files with 699 additions and 61 deletions

View File

@ -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);
/**
* 新增设备维修记录

View File

@ -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("维修设备不能为空!!!");
}
}
/**