设计工程量清单添加新增修改删除,设计的设计方案增加附件的时候需要给类型

This commit is contained in:
2025-12-13 17:45:19 +08:00
parent 3b580788f1
commit 0ffbba57e2
9 changed files with 136 additions and 49 deletions

View File

@ -7,10 +7,12 @@ import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.metadata.style.WriteCellStyle; import com.alibaba.excel.write.metadata.style.WriteCellStyle;
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy; import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.usermodel.IndexedColors;
import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.*;
import org.dromara.common.idempotent.annotation.RepeatSubmit; import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log; import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType; import org.dromara.common.log.enums.BusinessType;
@ -20,6 +22,7 @@ import org.dromara.common.web.core.BaseController;
import org.dromara.design.domain.bo.*; import org.dromara.design.domain.bo.*;
import org.dromara.design.domain.vo.*; import org.dromara.design.domain.vo.*;
import org.dromara.design.exportUtil.bill.*; import org.dromara.design.exportUtil.bill.*;
import org.dromara.design.service.IBusBillofquantitiesService;
import org.dromara.design.service.IBusBillofquantitiesVersionsService; import org.dromara.design.service.IBusBillofquantitiesVersionsService;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -42,6 +45,7 @@ import java.util.*;
public class BusBillofquantitiesVersionsController extends BaseController { public class BusBillofquantitiesVersionsController extends BaseController {
private final IBusBillofquantitiesVersionsService busBillofquantitiesVersionsService; private final IBusBillofquantitiesVersionsService busBillofquantitiesVersionsService;
private final IBusBillofquantitiesService busBillofquantitiesService;
/** /**
* 导入excel * 导入excel
@ -224,38 +228,38 @@ public class BusBillofquantitiesVersionsController extends BaseController {
// return R.ok(busBillofquantitiesVersionsService.queryById(id)); // return R.ok(busBillofquantitiesVersionsService.queryById(id));
// } // }
// //
// /** /**
// * 新增工程量清单版本 * 新增工程量清单版本
// */ */
// @SaCheckPermission("design:billofquantitiesVersions:add") @SaCheckPermission("design:billofquantitiesVersions:add")
// @Log(title = "工程量清单版本", businessType = BusinessType.INSERT) @Log(title = "工程量清单版本", businessType = BusinessType.INSERT)
// @RepeatSubmit() @RepeatSubmit()
// @PostMapping() @PostMapping()
// public R<Void> add(@Validated(AddGroup.class) @RequestBody BusBillofquantitiesVersionsBo bo) { public R<Void> add(@Validated(AddGroup.class) @RequestBody BusBillofquantitiesBo bo) {
// return toAjax(busBillofquantitiesVersionsService.insertByBo(bo)); return toAjax(busBillofquantitiesService.insertByBo(bo));
// } }
//
// /** /**
// * 修改工程量清单版本 * 修改工程量清单版本
// */ */
// @SaCheckPermission("design:billofquantitiesVersions:edit") @SaCheckPermission("design:billofquantitiesVersions:edit")
// @Log(title = "工程量清单版本", businessType = BusinessType.UPDATE) @Log(title = "工程量清单版本", businessType = BusinessType.UPDATE)
// @RepeatSubmit() @RepeatSubmit()
// @PutMapping() @PutMapping()
// public R<Void> edit(@Validated(EditGroup.class) @RequestBody BusBillofquantitiesVersionsBo bo) { public R<Void> edit(@Validated(EditGroup.class) @RequestBody BusBillofquantitiesBo bo) {
// return toAjax(busBillofquantitiesVersionsService.updateByBo(bo)); return toAjax(busBillofquantitiesService.updateByBo(bo));
// } }
//
// /** /**
// * 删除工程量清单版本 * 删除工程量清单版本
// * *
// * @param ids 主键串 * @param ids 主键串
// */ */
// @SaCheckPermission("design:billofquantitiesVersions:remove") @SaCheckPermission("design:billofquantitiesVersions:remove")
// @Log(title = "工程量清单版本", businessType = BusinessType.DELETE) @Log(title = "工程量清单版本", businessType = BusinessType.DELETE)
// @DeleteMapping("/{ids}") @DeleteMapping("/{ids}")
// public R<Void> remove(@NotEmpty(message = "主键不能为空") public R<Void> remove(@NotEmpty(message = "主键不能为空")
// @PathVariable Long[] ids) { @PathVariable Long[] ids) {
// return toAjax(busBillofquantitiesVersionsService.deleteWithValidByIds(List.of(ids), true)); return toAjax(busBillofquantitiesService.deleteWithValidByIds(List.of(ids), true));
// } }
} }

View File

@ -113,8 +113,8 @@ public class DesSchemeController extends BaseController {
@Log(title = "设计方案", businessType = BusinessType.INSERT) @Log(title = "设计方案", businessType = BusinessType.INSERT)
@RepeatSubmit() @RepeatSubmit()
@PostMapping("/upload") @PostMapping("/upload")
public R<Long> addFile(MultipartFile file, Long projectId) { public R<Long> addFile(MultipartFile file, Long projectId,String type) {
return R.ok(desSchemeService.addFile(file, projectId)); return R.ok(desSchemeService.addFile(file, projectId, type));
} }
/** /**

View File

@ -51,6 +51,10 @@ public class DesScheme extends BaseEntity {
* 审核状态 * 审核状态
*/ */
private String status; private String status;
/**
* 设计方案类型(1、可研2、施工3、初设)
*/
private String schemeType;
/** /**
* 排序字段 * 排序字段

View File

@ -79,5 +79,10 @@ public class BusBillofquantitiesBo extends BaseEntity {
*/ */
private String remark; private String remark;
/**
* 项目ID
*/
private Long projectId;
} }

View File

@ -52,5 +52,10 @@ public class DesSchemeBo extends BaseEntity {
*/ */
private String status; private String status;
/**
* 设计方案类型(1、可研2、施工3、初设)
*/
private String schemeType;
} }

View File

@ -64,5 +64,10 @@ public class DesSchemeVo implements Serializable {
@ExcelProperty(value = "审核状态") @ExcelProperty(value = "审核状态")
private String status; private String status;
/**
* 设计方案类型(1、可研2、施工3、初设)
*/
private String schemeType;
} }

View File

@ -1,8 +1,6 @@
package org.dromara.design.service; package org.dromara.design.service;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotNull;
import org.dromara.common.core.domain.R;
import org.dromara.design.domain.dto.ExportDto; import org.dromara.design.domain.dto.ExportDto;
import org.dromara.design.domain.vo.DesSchemeVo; import org.dromara.design.domain.vo.DesSchemeVo;
import org.dromara.design.domain.bo.DesSchemeBo; import org.dromara.design.domain.bo.DesSchemeBo;
@ -11,7 +9,6 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.util.Collection; import java.util.Collection;
@ -78,7 +75,7 @@ public interface IDesSchemeService extends IService<DesScheme>{
/** /**
* 添加文件 * 添加文件
*/ */
Long addFile(MultipartFile file, Long projectId); Long addFile(MultipartFile file, Long projectId, String type);
/** /**
* 修改文件 * 修改文件

View File

@ -1,6 +1,11 @@
package org.dromara.design.service.impl; package org.dromara.design.service.impl;
import cn.hutool.core.convert.NumberChineseFormatter;
import cn.hutool.core.util.NumberUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import jakarta.annotation.Resource;
import org.dromara.common.core.enums.BusinessStatusEnum;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
@ -9,12 +14,17 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.dromara.common.utils.BatchNumberGenerator;
import org.dromara.design.domain.BusBillofquantitiesVersions;
import org.dromara.design.service.IBusBillofquantitiesVersionsService;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.dromara.design.domain.bo.BusBillofquantitiesBo; import org.dromara.design.domain.bo.BusBillofquantitiesBo;
import org.dromara.design.domain.vo.BusBillofquantitiesVo; import org.dromara.design.domain.vo.BusBillofquantitiesVo;
import org.dromara.design.domain.BusBillofquantities; import org.dromara.design.domain.BusBillofquantities;
import org.dromara.design.mapper.BusBillofquantitiesMapper; import org.dromara.design.mapper.BusBillofquantitiesMapper;
import org.dromara.design.service.IBusBillofquantitiesService; import org.dromara.design.service.IBusBillofquantitiesService;
import org.springframework.transaction.annotation.Transactional;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -31,6 +41,9 @@ import java.util.Collection;
public class BusBillofquantitiesServiceImpl extends ServiceImpl<BusBillofquantitiesMapper, BusBillofquantities> implements IBusBillofquantitiesService { public class BusBillofquantitiesServiceImpl extends ServiceImpl<BusBillofquantitiesMapper, BusBillofquantities> implements IBusBillofquantitiesService {
private final BusBillofquantitiesMapper baseMapper; private final BusBillofquantitiesMapper baseMapper;
@Lazy
@Resource
private IBusBillofquantitiesVersionsService busBillofquantitiesVersionsService;
/** /**
* 查询工程量清单 * 查询工程量清单
@ -94,6 +107,31 @@ public class BusBillofquantitiesServiceImpl extends ServiceImpl<BusBillofquantit
public Boolean insertByBo(BusBillofquantitiesBo bo) { public Boolean insertByBo(BusBillofquantitiesBo bo) {
BusBillofquantities add = MapstructUtils.convert(bo, BusBillofquantities.class); BusBillofquantities add = MapstructUtils.convert(bo, BusBillofquantities.class);
validEntityBeforeSave(add); validEntityBeforeSave(add);
// 生成当前节点的sid
String sid = BatchNumberGenerator.generateBatchNumber("GCLQD-");
add.setSid(sid);
//获取当前父节点下有多少子节点
Long count = baseMapper.selectCount(new LambdaQueryWrapper<BusBillofquantities>().eq(BusBillofquantities::getPid, bo.getPid())) +1;
if ("0".equals(bo.getPid())){
//当父节点为0时生成中文编号作为顶层
String s = NumberChineseFormatter.numberCharToChinese((char) count.longValue(), false);
add.setNum(s);
}else {
//当父节点不为0时生成数字编号作为子节点编号
BusBillofquantities busBillofquantities = baseMapper.selectOne(new LambdaQueryWrapper<BusBillofquantities>().eq(BusBillofquantities::getSid, bo.getPid()));
if (busBillofquantities == null){
throw new ServiceException("父节点不存在");
}
if ("0".equals(busBillofquantities.getPid())){
add.setNum(count.toString());
}else {
if (busBillofquantities.getNum() != null){
//当父节点有编号时,生成数字编号作为子节点编号 无编号时,不生成编号
String s = busBillofquantities.getNum() + "." + count;
add.setNum(s);
}
}
}
boolean flag = baseMapper.insert(add) > 0; boolean flag = baseMapper.insert(add) > 0;
if (flag) { if (flag) {
bo.setId(add.getId()); bo.setId(add.getId());
@ -117,8 +155,24 @@ public class BusBillofquantitiesServiceImpl extends ServiceImpl<BusBillofquantit
/** /**
* 保存前的数据校验 * 保存前的数据校验
*/ */
private void validEntityBeforeSave(BusBillofquantities entity){ private void validEntityBeforeSave(BusBillofquantities entity) {
//TODO 做一些数据校验,如唯一约束 //TODO 做一些数据校验,如唯一约束
BusBillofquantitiesVersions versions = busBillofquantitiesVersionsService
.getBaseMapper()
.selectOne(new LambdaQueryWrapper<BusBillofquantitiesVersions>()
.eq(BusBillofquantitiesVersions::getVersions, entity.getVersions()));
if (versions == null) {
throw new ServiceException("版本不存在");
}
if (!BusinessStatusEnum.DRAFT.getStatus().equals(versions.getStatus())
&& !BusinessStatusEnum.BACK.getStatus().equals(versions.getStatus())
&& !BusinessStatusEnum.CANCEL.getStatus().equals(versions.getStatus())){
if (entity.getId() != null){
throw new ServiceException("版本处于审核中,不能修改");
}else {
throw new ServiceException("版本处于审核中,不能新增");
}
}
} }
/** /**
@ -132,6 +186,25 @@ public class BusBillofquantitiesServiceImpl extends ServiceImpl<BusBillofquantit
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){ if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验 //TODO 做一些业务上的校验,判断是否需要校验
for (Long id : ids) {
BusBillofquantities busBillofquantities = baseMapper.selectById(id);
if (busBillofquantities == null) {
throw new ServiceException("数据不存在");
}
BusBillofquantitiesVersions versions = busBillofquantitiesVersionsService
.getBaseMapper()
.selectOne(new LambdaQueryWrapper<BusBillofquantitiesVersions>()
.eq(BusBillofquantitiesVersions::getVersions, busBillofquantities.getVersions()));
if (versions == null) {
throw new ServiceException("版本不存在");
}
if (!BusinessStatusEnum.DRAFT.getStatus().equals(versions.getStatus())
&& !BusinessStatusEnum.BACK.getStatus().equals(versions.getStatus())
&& !BusinessStatusEnum.CANCEL.getStatus().equals(versions.getStatus())){
throw new ServiceException("版本处于审核中,不能删除");
}
}
} }
return baseMapper.deleteByIds(ids) > 0; return baseMapper.deleteByIds(ids) > 0;
} }

View File

@ -18,12 +18,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.dromara.common.oss.core.OssClient;
import org.dromara.common.oss.factory.OssFactory;
import org.dromara.design.domain.DesCollectFile;
import org.dromara.design.domain.DesPrelimScheme;
import org.dromara.design.domain.dto.ExportDto; import org.dromara.design.domain.dto.ExportDto;
import org.dromara.system.domain.vo.SysOssUploadVo;
import org.dromara.system.domain.vo.SysOssVo; import org.dromara.system.domain.vo.SysOssVo;
import org.dromara.system.service.ISysOssService; import org.dromara.system.service.ISysOssService;
import org.springframework.context.event.EventListener; import org.springframework.context.event.EventListener;
@ -46,7 +41,6 @@ import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.nio.file.Path; import java.nio.file.Path;
import java.time.Duration; import java.time.Duration;
import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Collection; import java.util.Collection;
@ -173,7 +167,7 @@ public class DesSchemeServiceImpl extends ServiceImpl<DesSchemeMapper, DesScheme
} }
@Override @Override
public Long addFile(MultipartFile file, Long projectId) { public Long addFile(MultipartFile file, Long projectId, String type) {
SysOssVo upload = ossService.upload(file, ossService.minioFileName(ContactNoticeTemplate, file)); SysOssVo upload = ossService.upload(file, ossService.minioFileName(ContactNoticeTemplate, file));
DesScheme scheme = new DesScheme(); DesScheme scheme = new DesScheme();
scheme.setProjectId(projectId); scheme.setProjectId(projectId);
@ -181,7 +175,7 @@ public class DesSchemeServiceImpl extends ServiceImpl<DesSchemeMapper, DesScheme
scheme.setOssId(upload.getOssId()); scheme.setOssId(upload.getOssId());
scheme.setFileName(upload.getOriginalName()); scheme.setFileName(upload.getOriginalName());
scheme.setFileUrl(upload.getUrl()); scheme.setFileUrl(upload.getUrl());
scheme.setSchemeType(type);
baseMapper.insert(scheme); baseMapper.insert(scheme);
return scheme.getId(); return scheme.getId();
} }