feat(workOrder): 优化资料附件管理功能

- 修改 InformationAttach 实体类,将 informationId 改为 parentId,增加 type 字段- 更新 InformationAttachController 中的 detail 方法,返回附件列表而不是单个附件
- 改进 InformationAttachServiceImpl 中的 add 和 edit 方法,增加重复文件名检查
- 更新 InformationController 中的 detail 方法,暂时注释掉附件查询逻辑
- 修改 InformationServiceImpl 中的 save 和 updateByIdAttach 方法,暂时注释掉附件关联逻辑
main
litao 1 year ago
parent 9d9d5889b4
commit f20b49f635
  1. 17
      src/main/java/org/springblade/modules/workOrder/controller/InformationAttachController.java
  2. 2
      src/main/java/org/springblade/modules/workOrder/controller/InformationController.java
  3. 18
      src/main/java/org/springblade/modules/workOrder/entity/InformationAttach.java
  4. 6
      src/main/java/org/springblade/modules/workOrder/service/IInformationAttachService.java
  5. 81
      src/main/java/org/springblade/modules/workOrder/service/impl/InformationAttachServiceImpl.java
  6. 6
      src/main/java/org/springblade/modules/workOrder/service/impl/InformationServiceImpl.java

@ -1,10 +1,13 @@
package org.springblade.modules.workOrder.controller;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import lombok.AllArgsConstructor;
import javax.validation.Valid;
import org.springblade.core.secure.BladeUser;
@ -24,6 +27,7 @@ import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.excel.util.ExcelUtil;
import org.springblade.core.tool.constant.BladeConstant;
import springfox.documentation.annotations.ApiIgnore;
import java.util.Map;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
@ -48,10 +52,11 @@ public class InformationAttachController extends BladeController {
@GetMapping("/detail")
@ApiOperationSupport(order = 1)
@ApiOperation(value = "详情", notes = "传入informationAttach")
public R<InformationAttach> detail(InformationAttach informationAttach) {
InformationAttach detail = informationAttachService.getOne(Condition.getQueryWrapper(informationAttach));
return R.data(detail);
public R<List<InformationAttach>> detail(InformationAttach informationAttach) {
List<InformationAttach> list = informationAttachService.list(Wrappers.lambdaQuery(InformationAttach.class).eq(InformationAttach::getParentId, informationAttach.getId()));
return R.data(list);
}
/**
* 资料附件表 分页
*/
@ -80,8 +85,8 @@ public class InformationAttachController extends BladeController {
@PostMapping("/save")
@ApiOperationSupport(order = 4)
@ApiOperation(value = "新增", notes = "传入informationAttach")
public R save(@Valid @RequestBody InformationAttach informationAttach) {
return R.status(informationAttachService.save(informationAttach));
public R save(@Valid @RequestBody List<InformationAttach> informationAttach) {
return informationAttachService.add(informationAttach);
}
/**
@ -91,7 +96,7 @@ public class InformationAttachController extends BladeController {
@ApiOperationSupport(order = 5)
@ApiOperation(value = "修改", notes = "传入informationAttach")
public R update(@Valid @RequestBody InformationAttach informationAttach) {
return R.status(informationAttachService.updateById(informationAttach));
return informationAttachService.edit(informationAttach);
}
/**

@ -61,7 +61,7 @@ public class InformationController extends BladeController {
Information detail = informationService.getById(information.getId());
InformationVO informationVO = BeanUtil.copy(detail, InformationVO.class);
assert informationVO != null;
informationVO.setAttaches(informationAttachService.list(Wrappers.lambdaQuery(InformationAttach.class).eq(informationVO.getId() != null, InformationAttach::getInformationId, informationVO.getId())));
// informationVO.setAttaches(informationAttachService.list(Wrappers.lambdaQuery(InformationAttach.class).eq(informationVO.getId() != null, InformationAttach::getInformationId, informationVO.getId())));
return R.data(informationVO);
}

@ -19,9 +19,9 @@ import org.springblade.core.mp.base.BaseEntity;
public class InformationAttach extends BaseEntity {
/**
* 工单id
* 上级id0图纸 1技术文件
*/
private Long informationId;
private Long parentId;
/**
* 附件地址
@ -34,17 +34,7 @@ public class InformationAttach extends BaseEntity {
private String name;
/**
* 附件原名
* 类型1文件夹 2文件
*/
private String originalName;
/**
* 附件拓展名
*/
private String extension;
/**
* 附件大小
*/
private Long attachSize;
private Integer type;
}

@ -2,11 +2,14 @@
package org.springblade.modules.workOrder.service;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import org.springblade.core.tool.api.R;
import org.springblade.modules.workOrder.entity.InformationAttach;
import org.springblade.modules.workOrder.vo.InformationAttachVO;
import org.springblade.modules.workOrder.excel.InformationAttachExcel;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseService;
import java.rmi.ServerException;
import java.util.List;
/**
@ -34,4 +37,7 @@ public interface IInformationAttachService extends BaseService<InformationAttach
*/
List<InformationAttachExcel> exportInformationAttach(Wrapper<InformationAttach> queryWrapper);
R add(List<InformationAttach> informationAttach);
R edit(InformationAttach informationAttach);
}

@ -1,16 +1,25 @@
package org.springblade.modules.workOrder.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.tool.api.R;
import org.springblade.modules.workOrder.entity.InformationAttach;
import org.springblade.modules.workOrder.vo.InformationAttachVO;
import org.springblade.modules.workOrder.excel.InformationAttachExcel;
import org.springblade.modules.workOrder.mapper.InformationAttachMapper;
import org.springblade.modules.workOrder.service.IInformationAttachService;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseServiceImpl;
import java.rmi.ServerException;
import java.util.List;
import java.util.stream.Collectors;
/**
* 资料附件表 服务实现类
@ -18,6 +27,7 @@ import java.util.List;
* @author BladeX
* @since 2024-10-14
*/
@Slf4j
@Service
public class InformationAttachServiceImpl extends BaseServiceImpl<InformationAttachMapper, InformationAttach> implements IInformationAttachService {
@ -36,4 +46,75 @@ public class InformationAttachServiceImpl extends BaseServiceImpl<InformationAtt
return informationAttachList;
}
@Override
public R add(List<InformationAttach> informationAttach) {
if (CollectionUtils.isEmpty(informationAttach)) {
log.error("信息附件对象为空");
return R.fail(400, "信息附件对象为空");
}
// 创建查询条件,检查是否存在相同父ID和名称的附件
LambdaQueryWrapper<InformationAttach> wrapper = Wrappers.lambdaQuery(InformationAttach.class)
.eq(InformationAttach::getParentId, informationAttach.get(0).getParentId())
.in(InformationAttach::getName, informationAttach.stream().map(InformationAttach::getName).collect(Collectors.toList()));
try {
// 执行查询,获取符合条件的记录数
long count = this.count(wrapper);
// 如果大于0,则说明已经存在
if (count > 0) {
return R.fail(200, "文件名称重复!");
}
// 执行保存操作,并返回操作结果
boolean saveResult = this.saveBatch(informationAttach);
log.info("保存信息附件结果: {}", saveResult);
return R.status(saveResult);
} catch (DataIntegrityViolationException e) {
log.error("保存信息附件时发生数据完整性错误", e);
return R.fail(500, "保存信息附件时发生数据完整性错误");
} catch (Exception e) {
log.error("保存信息附件时发生错误", e);
return R.fail(500, "保存信息附件时发生错误");
}
}
@Override
public R edit(InformationAttach informationAttach) {
try {
// 输入验证
if (informationAttach == null || informationAttach.getId() == null || informationAttach.getParentId() == null || informationAttach.getName() == null) {
return R.fail(400, "输入参数不合法");
}
// 创建一个Lambda查询包装器,用于构建查询条件
LambdaQueryWrapper<InformationAttach> wrapper = Wrappers.lambdaQuery(InformationAttach.class)
// 排除当前记录的ID
.ne(InformationAttach::getId, informationAttach.getId())
// 查询条件:父ID相等
.eq(InformationAttach::getParentId, informationAttach.getParentId())
// 查询条件:名称相等
.eq(InformationAttach::getName, informationAttach.getName());
// 使用上述条件查询记录数
long count = this.count(wrapper);
// 如果大于0,则说明已经存在
if (count > 0) {
// 返回失败响应,提示文件名称重复
return R.fail(200, "[" + informationAttach.getName() + "]该文件名称重复!");
}
// 更新数据库中的当前记录
return R.status(this.updateById(informationAttach));
} catch (Exception e) {
// 记录异常日志
log.error("编辑信息附件时发生异常", e);
// 返回失败响应
return R.fail(500, "系统内部错误");
}
}
}

@ -50,7 +50,7 @@ public class InformationServiceImpl extends BaseServiceImpl<InformationMapper, I
boolean save = this.save(information);
List<InformationAttach> attaches = information.getAttaches();
if (CollectionUtil.isNotEmpty(attaches)) {
attaches.forEach(attache -> attache.setInformationId(information.getId()));
// attaches.forEach(attache -> attache.setInformationId(information.getId()));
informationAttachService.saveBatch(attaches);
}
return save;
@ -59,10 +59,10 @@ public class InformationServiceImpl extends BaseServiceImpl<InformationMapper, I
@Override
public boolean updateByIdAttach(InformationDTO information) {
boolean update = this.updateById(information);
boolean remove = informationAttachService.remove(Wrappers.lambdaQuery(InformationAttach.class).eq(InformationAttach::getInformationId, information.getId()));
// boolean remove = informationAttachService.remove(Wrappers.lambdaQuery(InformationAttach.class).eq(InformationAttach::getInformationId, information.getId()));
List<InformationAttach> attaches = information.getAttaches();
if (CollectionUtil.isNotEmpty(attaches)) {
attaches.forEach(attache -> attache.setInformationId(information.getId()));
// attaches.forEach(attache -> attache.setInformationId(information.getId()));
return informationAttachService.saveBatch(attaches);
}
return update;

Loading…
Cancel
Save