diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/controller/DeviceRepairRecordsController.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/controller/DeviceRepairRecordsController.java index 1304daa6..03219d60 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/controller/DeviceRepairRecordsController.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/controller/DeviceRepairRecordsController.java @@ -2,6 +2,11 @@ package com.fuyuanshen.equipment.controller; import java.util.List; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.fuyuanshen.equipment.domain.DeviceRepairRecords; +import com.fuyuanshen.equipment.domain.DeviceType; +import com.fuyuanshen.equipment.domain.query.DeviceRepairRecordsQueryCriteria; +import io.swagger.v3.oas.annotations.Operation; import lombok.RequiredArgsConstructor; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.*; @@ -41,8 +46,10 @@ public class DeviceRepairRecordsController extends BaseController { */ @SaCheckPermission("equipment:repairRecords:list") @GetMapping("/list") - public TableDataInfo list(DeviceRepairRecordsBo bo, PageQuery pageQuery) { - return deviceRepairRecordsService.queryPageList(bo, pageQuery); + @Operation(summary = "分页查询维修记录列表") + public TableDataInfo list(DeviceRepairRecordsQueryCriteria criteria) { + Page page = new Page<>(criteria.getPageNum(), criteria.getPageSize()); + return deviceRepairRecordsService.queryPageList(criteria, page); } /** @@ -51,7 +58,7 @@ public class DeviceRepairRecordsController extends BaseController { @SaCheckPermission("equipment:repairRecords:export") @Log(title = "设备维修记录", businessType = BusinessType.EXPORT) @PostMapping("/export") - public void export(DeviceRepairRecordsBo bo, HttpServletResponse response) { + public void export(DeviceRepairRecordsQueryCriteria bo, HttpServletResponse response) { List list = deviceRepairRecordsService.queryList(bo); ExcelUtil.exportExcel(list, "设备维修记录", DeviceRepairRecordsVo.class, response); } @@ -74,8 +81,8 @@ public class DeviceRepairRecordsController extends BaseController { @SaCheckPermission("equipment:repairRecords:add") @Log(title = "设备维修记录", businessType = BusinessType.INSERT) @RepeatSubmit() - @PostMapping() - public R add(@Validated(AddGroup.class) @RequestBody DeviceRepairRecordsBo bo) { + @PostMapping(consumes = "multipart/form-data") + public R add(@Validated(AddGroup.class) DeviceRepairRecordsBo bo) { return toAjax(deviceRepairRecordsService.insertByBo(bo)); } @@ -85,8 +92,8 @@ public class DeviceRepairRecordsController extends BaseController { @SaCheckPermission("equipment:repairRecords:edit") @Log(title = "设备维修记录", businessType = BusinessType.UPDATE) @RepeatSubmit() - @PutMapping() - public R edit(@Validated(EditGroup.class) @RequestBody DeviceRepairRecordsBo bo) { + @PutMapping(consumes = "multipart/form-data") + public R edit(@Validated(EditGroup.class) DeviceRepairRecordsBo bo) { return toAjax(deviceRepairRecordsService.updateByBo(bo)); } diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/DeviceRepairImages.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/DeviceRepairImages.java new file mode 100644 index 00000000..d26082de --- /dev/null +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/DeviceRepairImages.java @@ -0,0 +1,41 @@ +package com.fuyuanshen.equipment.domain; + +import com.baomidou.mybatisplus.annotation.*; +import com.fuyuanshen.common.tenant.core.TenantEntity; +import com.fuyuanshen.equipment.enums.RepairImageType; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 设备维修图片对象 device_repair_images + * + * + * @date 2025-09-02 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("device_repair_images") +public class DeviceRepairImages extends TenantEntity { + /** + * 维修图片ID + */ + @TableId(value = "image_id", type = IdType.AUTO) + @TableField(insertStrategy = FieldStrategy.NEVER) + private Long imageId; + /** + * 维修记录ID + */ + @Schema(title = "维修记录ID") + private Long recordId; + /** + * 图片类型(维修前/维修后) + */ + @Schema(title = "图片类型(维修前/维修后)") + private RepairImageType imageType; + /** + * 图片存储路径 + */ + @Schema(title = "图片存储路径") + private String imageUrl; +} diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/DeviceRepairRecords.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/DeviceRepairRecords.java index 3fca3c4a..c962a3b5 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/DeviceRepairRecords.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/DeviceRepairRecords.java @@ -26,7 +26,8 @@ public class DeviceRepairRecords extends TenantEntity { /** * 维修记录ID */ - @TableId(value = "record_id") + @TableId(value = "record_id", type = IdType.AUTO) + @TableField(insertStrategy = FieldStrategy.NEVER) private Long recordId; /** diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/bo/DeviceRepairRecordsBo.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/bo/DeviceRepairRecordsBo.java index b40b9750..e134543a 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/bo/DeviceRepairRecordsBo.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/bo/DeviceRepairRecordsBo.java @@ -1,15 +1,19 @@ package com.fuyuanshen.equipment.domain.bo; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.fuyuanshen.common.core.validate.AddGroup; import com.fuyuanshen.common.core.validate.EditGroup; import com.fuyuanshen.equipment.domain.DeviceRepairRecords; import com.fuyuanshen.common.mybatis.core.domain.BaseEntity; import io.github.linpeilie.annotations.AutoMapper; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; import jakarta.validation.constraints.*; import java.util.Date; import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; +import org.springframework.web.multipart.MultipartFile; /** * 设备维修记录业务对象 device_repair_records @@ -37,6 +41,7 @@ public class DeviceRepairRecordsBo extends BaseEntity { /** * 维修时间 */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @NotNull(message = "维修时间不能为空", groups = { AddGroup.class, EditGroup.class }) private Date repairTime; @@ -58,5 +63,11 @@ public class DeviceRepairRecordsBo extends BaseEntity { @NotBlank(message = "维修人员不能为空", groups = { AddGroup.class, EditGroup.class }) private String repairPerson; + @Schema(title = "维修前图片") + @JsonIgnore + private MultipartFile beforeFile; + @Schema(title = "维修后图片") + @JsonIgnore + private MultipartFile afterFile; } diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/query/DeviceRepairRecordsQueryCriteria.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/query/DeviceRepairRecordsQueryCriteria.java new file mode 100644 index 00000000..4df5ec6d --- /dev/null +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/query/DeviceRepairRecordsQueryCriteria.java @@ -0,0 +1,72 @@ +package com.fuyuanshen.equipment.domain.query; + +import com.fuyuanshen.common.core.validate.AddGroup; +import com.fuyuanshen.common.core.validate.EditGroup; +import com.fuyuanshen.common.mybatis.core.domain.BaseEntity; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import org.springframework.web.multipart.MultipartFile; + +import java.util.Date; + +/** + * 设备维修记录查询 + * + * @Description: + * @Author: WY + * @Date: 2025/5/16 + **/ +@Data +public class DeviceRepairRecordsQueryCriteria extends BaseEntity { + /** + * 维修记录ID + */ + private Long recordId; + + /** + * 设备ID + */ + private String deviceId; + + /** + * 维修时间 + */ + private Date repairTime; + + /** + * 维修部位 + */ + private String repairPart; + + /** + * 维修原因 + */ + private String repairReason; + + /** + * 维修人员 + */ + private String repairPerson; + + @Schema(title = "维修开始时间") + private Date repairBeginTime; + @Schema(title = "维修结束时间") + private Date repairEndTime; + + @Schema(title = "所属客户") + private Long customerId; + + @Schema(title = "com.fuyuanshen") + private Long tenantId; + /** + * 页码 + */ + private Integer pageNum = 1; + + /** + * 每页数据量 + */ + private Integer pageSize = 10; +} diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/vo/DeviceRepairImagesVo.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/vo/DeviceRepairImagesVo.java new file mode 100644 index 00000000..7bc1a641 --- /dev/null +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/vo/DeviceRepairImagesVo.java @@ -0,0 +1,48 @@ +package com.fuyuanshen.equipment.domain.vo; + +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import com.fuyuanshen.equipment.domain.DeviceRepairImages; +import com.fuyuanshen.equipment.domain.DeviceRepairRecords; +import com.fuyuanshen.equipment.enums.RepairImageType; +import io.github.linpeilie.annotations.AutoMapper; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * 设备维修图片视图对象 device_repair_records + * + * @author Lion Li + * @date 2025-09-01 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = DeviceRepairImages.class) +public class DeviceRepairImagesVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 维修图片ID + */ + @Schema(title = "维修图片ID") + private Long imageId; + /** + * 维修记录ID + */ + @Schema(title = "维修记录ID") + private Long recordId; + /** + * 图片类型(维修前/维修后) + */ + @Schema(title = "图片类型(维修前/维修后)") + private RepairImageType imageType; + /** + * 图片存储路径 + */ + @Schema(title = "图片存储路径") + private String imageUrl; +} diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/vo/DeviceRepairRecordsVo.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/vo/DeviceRepairRecordsVo.java index f66bb67f..0e970313 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/vo/DeviceRepairRecordsVo.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/vo/DeviceRepairRecordsVo.java @@ -2,6 +2,7 @@ package com.fuyuanshen.equipment.domain.vo; import java.util.Date; import com.fasterxml.jackson.annotation.JsonFormat; +import com.fuyuanshen.common.tenant.core.TenantEntity; import com.fuyuanshen.equipment.domain.DeviceRepairRecords; import cn.idev.excel.annotation.ExcelIgnoreUnannotated; import cn.idev.excel.annotation.ExcelProperty; @@ -13,7 +14,7 @@ import lombok.Data; import java.io.Serial; import java.io.Serializable; import java.util.Date; - +import java.util.List; /** @@ -25,7 +26,7 @@ import java.util.Date; @Data @ExcelIgnoreUnannotated @AutoMapper(target = DeviceRepairRecords.class) -public class DeviceRepairRecordsVo implements Serializable { +public class DeviceRepairRecordsVo extends TenantEntity implements Serializable { @Serial private static final long serialVersionUID = 1L; @@ -65,6 +66,12 @@ public class DeviceRepairRecordsVo implements Serializable { */ @ExcelProperty(value = "维修人员") private String repairPerson; + /** + * 维修人员 + */ + @ExcelProperty(value = "设备名称") + private String deviceName; + private List images; } diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/enums/RepairImageType.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/enums/RepairImageType.java new file mode 100644 index 00000000..c226d9bb --- /dev/null +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/enums/RepairImageType.java @@ -0,0 +1,23 @@ +package com.fuyuanshen.equipment.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; + +@Getter +@AllArgsConstructor +public enum RepairImageType { + BEFORE(1, "维修前"), + AFTER(2, "维修后"); + + private final int code; + private final String desc; + + public static RepairImageType of(Integer code) { + return Arrays.stream(values()) + .filter(e -> e.getCode() == code) + .findFirst() + .orElse(null); + } +} diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/mapper/DeviceRepairImagesMapper.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/mapper/DeviceRepairImagesMapper.java new file mode 100644 index 00000000..02390e6a --- /dev/null +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/mapper/DeviceRepairImagesMapper.java @@ -0,0 +1,8 @@ +package com.fuyuanshen.equipment.mapper; + +import com.fuyuanshen.common.mybatis.core.mapper.BaseMapperPlus; +import com.fuyuanshen.equipment.domain.DeviceRepairImages; +import com.fuyuanshen.equipment.domain.vo.DeviceRepairImagesVo; + +public interface DeviceRepairImagesMapper extends BaseMapperPlus { +} diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/mapper/DeviceRepairRecordsMapper.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/mapper/DeviceRepairRecordsMapper.java index eb3cec2d..80233244 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/mapper/DeviceRepairRecordsMapper.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/mapper/DeviceRepairRecordsMapper.java @@ -1,8 +1,16 @@ package com.fuyuanshen.equipment.mapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.fuyuanshen.equipment.domain.DeviceRepairRecords; +import com.fuyuanshen.equipment.domain.DeviceType; +import com.fuyuanshen.equipment.domain.query.DeviceRepairRecordsQueryCriteria; +import com.fuyuanshen.equipment.domain.query.DeviceTypeQueryCriteria; import com.fuyuanshen.equipment.domain.vo.DeviceRepairRecordsVo; import com.fuyuanshen.common.mybatis.core.mapper.BaseMapperPlus; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * 设备维修记录Mapper接口 @@ -11,5 +19,19 @@ import com.fuyuanshen.common.mybatis.core.mapper.BaseMapperPlus; * @date 2025-08-08 */ public interface DeviceRepairRecordsMapper extends BaseMapperPlus { - + /** + * 分页查询维修记录 + * + * @param criteria + * @param page + * @return + */ + IPage findAll(@Param("criteria") DeviceRepairRecordsQueryCriteria criteria, Page page); + /** + * 查询所有维修记录 + * + * @param criteria + * @return + */ + List findAll(@Param("criteria") DeviceRepairRecordsQueryCriteria criteria); } diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/IDeviceRepairRecordsService.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/IDeviceRepairRecordsService.java index 8fb838c2..cd8b88fc 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/IDeviceRepairRecordsService.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/IDeviceRepairRecordsService.java @@ -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 { /** * 查询设备维修记录 @@ -31,7 +36,7 @@ public interface IDeviceRepairRecordsService { * @param pageQuery 分页参数 * @return 设备维修记录分页列表 */ - TableDataInfo queryPageList(DeviceRepairRecordsBo bo, PageQuery pageQuery); + TableDataInfo queryPageList(DeviceRepairRecordsQueryCriteria criteria, Page page); /** * 查询符合条件的设备维修记录列表 @@ -39,7 +44,7 @@ public interface IDeviceRepairRecordsService { * @param bo 查询条件 * @return 设备维修记录列表 */ - List queryList(DeviceRepairRecordsBo bo); + List queryList(DeviceRepairRecordsQueryCriteria criteria); /** * 新增设备维修记录 diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceRepairRecordsServiceImpl.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceRepairRecordsServiceImpl.java index 5eb4f89f..3b838d88 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceRepairRecordsServiceImpl.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceRepairRecordsServiceImpl.java @@ -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 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 images = imagesMapper.selectVoList( + new LambdaQueryWrapper() + .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 queryPageList(DeviceRepairRecordsBo bo, PageQuery pageQuery) { - LambdaQueryWrapper lqw = buildQueryWrapper(bo); - Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); - return TableDataInfo.build(result); + public TableDataInfo queryPageList(DeviceRepairRecordsQueryCriteria criteria, Page page) { + // 管理员 + String username = LoginHelper.getUsername(); + if (!username.equals("admin")) { + criteria.setCustomerId(LoginHelper.getUserId()); + } + + if(criteria.getRepairEndTime() !=null ){ + criteria.setRepairEndTime(DateUtil.endOfDay(criteria.getRepairEndTime())); + } + IPage deviceRepairRecordsIPage = baseMapper.findAll(criteria, page); + return new TableDataInfo(deviceRepairRecordsIPage.getRecords(), deviceRepairRecordsIPage.getTotal()); } /** * 查询符合条件的设备维修记录列表 * - * @param bo 查询条件 + * @param criteria 查询条件 * @return 设备维修记录列表 */ @Override - public List queryList(DeviceRepairRecordsBo bo) { - LambdaQueryWrapper lqw = buildQueryWrapper(bo); - return baseMapper.selectVoList(lqw); + public List queryList(DeviceRepairRecordsQueryCriteria criteria) { + return baseMapper.findAll(criteria); } private LambdaQueryWrapper 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 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 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 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("维修设备不能为空!!!"); + } } /** diff --git a/fys-modules/fys-equipment/src/main/resources/mapper/equipment/DeviceRepairImagesMapper.xml b/fys-modules/fys-equipment/src/main/resources/mapper/equipment/DeviceRepairImagesMapper.xml new file mode 100644 index 00000000..f933f7e5 --- /dev/null +++ b/fys-modules/fys-equipment/src/main/resources/mapper/equipment/DeviceRepairImagesMapper.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/fys-modules/fys-equipment/src/main/resources/mapper/equipment/DeviceRepairRecordsMapper.xml b/fys-modules/fys-equipment/src/main/resources/mapper/equipment/DeviceRepairRecordsMapper.xml index 46af59f4..7e83e5c7 100644 --- a/fys-modules/fys-equipment/src/main/resources/mapper/equipment/DeviceRepairRecordsMapper.xml +++ b/fys-modules/fys-equipment/src/main/resources/mapper/equipment/DeviceRepairRecordsMapper.xml @@ -3,5 +3,41 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + + + + + + + + + + + + + + +