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

This commit is contained in:
2025-12-19 15:54:53 +08:00
parent c2c6cd16cc
commit 541d674072
9 changed files with 114 additions and 28 deletions

View File

@ -12,8 +12,7 @@ import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.core.validate.*;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
@ -23,6 +22,7 @@ import org.dromara.common.web.core.BaseController;
import org.dromara.design.domain.bo.*;
import org.dromara.design.domain.vo.*;
import org.dromara.design.exportUtil.bill.*;
import org.dromara.design.service.IBusBillofquantitiesService;
import org.dromara.design.service.IBusBillofquantitiesVersionsService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@ -45,6 +45,7 @@ import java.util.*;
public class BusBillofquantitiesVersionsController extends BaseController {
private final IBusBillofquantitiesVersionsService busBillofquantitiesVersionsService;
private final IBusBillofquantitiesService busBillofquantitiesService;
/**
* 导入excel
@ -60,7 +61,7 @@ public class BusBillofquantitiesVersionsController extends BaseController {
/**
* 获取所有版本号
*/
@SaCheckPermission("design:billofquantitiesVersions:obtainAllVersionNumbers")
@SaCheckPermission("design:billofquantitiesVersions:list")
@GetMapping("/obtainAllVersionNumbers")
public TableDataInfo<BusBillofquantitiesVersionsVo> obtainAllVersionNumbers(ObtainAllVersionNumbersReq bo, PageQuery pageQuery) {
return busBillofquantitiesVersionsService.obtainAllVersionNumbers(bo, pageQuery);
@ -79,7 +80,7 @@ public class BusBillofquantitiesVersionsController extends BaseController {
/**
* 获取指定版本的sheet
*/
@SaCheckPermission("design:billofquantitiesVersions:sheetList")
@SaCheckPermission("design:billofquantitiesVersions:list")
@GetMapping("/sheetList")
public R<List<String>> sheetList(SheetListReq bo) {
return R.ok(busBillofquantitiesVersionsService.sheetList(bo));
@ -88,7 +89,7 @@ public class BusBillofquantitiesVersionsController extends BaseController {
/**
* 获取工程量清单列表
*/
@SaCheckPermission("design:billofquantitiesVersions:obtainTheList")
@SaCheckPermission("design:billofquantitiesVersions:list")
@GetMapping("/obtainTheList")
public R<List<ObtainTheListRes>> obtainTheList(CoryObtainTheListReq bo, PageQuery pageQuery) {
return R.ok(busBillofquantitiesVersionsService.obtainTheList(bo));
@ -117,6 +118,7 @@ public class BusBillofquantitiesVersionsController extends BaseController {
* 导出工程量清单版本列表
*/
@Log(title = "工程量清单版本", businessType = BusinessType.EXPORT)
@SaCheckPermission("design:billofquantitiesVersions:export")
@PostMapping("/export")
public void export(String versions,Long projectId, HttpServletResponse response) throws IOException {
Map<String, List<BillOfQuantitiesExport>> sheetDataMap = busBillofquantitiesVersionsService.export(versions,projectId);
@ -233,8 +235,8 @@ public class BusBillofquantitiesVersionsController extends BaseController {
@Log(title = "工程量清单版本", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody BusBillofquantitiesVersionsBo bo) {
return toAjax(busBillofquantitiesVersionsService.insertByBo(bo));
public R<Void> add(@Validated(AddGroup.class) @RequestBody BusBillofquantitiesBo bo) {
return toAjax(busBillofquantitiesService.insertByBo(bo));
}
/**
@ -244,8 +246,8 @@ public class BusBillofquantitiesVersionsController extends BaseController {
@Log(title = "工程量清单版本", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody BusBillofquantitiesVersionsBo bo) {
return toAjax(busBillofquantitiesVersionsService.updateByBo(bo));
public R<Void> edit(@Validated(EditGroup.class) @RequestBody BusBillofquantitiesBo bo) {
return toAjax(busBillofquantitiesService.updateByBo(bo));
}
/**
@ -258,6 +260,6 @@ public class BusBillofquantitiesVersionsController extends BaseController {
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(busBillofquantitiesVersionsService.deleteWithValidByIds(List.of(ids), true));
return toAjax(busBillofquantitiesService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@ -63,7 +63,7 @@ public class DesSchemeController extends BaseController {
*
* @param id 主键
*/
@SaCheckPermission("design:scheme:query")
// @SaCheckPermission("design:scheme:query")
@GetMapping("/{id}")
public R<DesSchemeVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
@ -109,18 +109,18 @@ public class DesSchemeController extends BaseController {
/**
* 新增设计方案文件
*/
@SaCheckPermission("design:scheme:upload")
@SaCheckPermission("design:scheme:add")
@Log(title = "设计方案", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping("/upload")
public R<Long> addFile(MultipartFile file, Long projectId) {
return R.ok(desSchemeService.addFile(file, projectId));
public R<Long> addFile(MultipartFile file, Long projectId,String type) {
return R.ok(desSchemeService.addFile(file, projectId, type));
}
/**
* 修改设计方案文件
*/
@SaCheckPermission("design:scheme:update")
@SaCheckPermission("design:scheme:edit")
@Log(title = "设计方案", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PostMapping("/update/{id}")
@ -129,6 +129,7 @@ public class DesSchemeController extends BaseController {
}
@SaCheckPermission("design:scheme:export")
@PostMapping("/exportZipWithStatus")
public void exportZipWithStatus(ExportDto dto, HttpServletResponse response) throws Exception {
desSchemeService.exportAsZipWithStatusPrefix(dto, response);

View File

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

View File

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

View File

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

View File

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

View File

@ -1,8 +1,6 @@
package org.dromara.design.service;
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.vo.DesSchemeVo;
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 com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.multipart.MultipartFile;
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;
import cn.hutool.core.convert.NumberChineseFormatter;
import cn.hutool.core.util.NumberUtil;
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.StringUtils;
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.toolkit.Wrappers;
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.dromara.design.domain.bo.BusBillofquantitiesBo;
import org.dromara.design.domain.vo.BusBillofquantitiesVo;
import org.dromara.design.domain.BusBillofquantities;
import org.dromara.design.mapper.BusBillofquantitiesMapper;
import org.dromara.design.service.IBusBillofquantitiesService;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Map;
@ -31,6 +41,9 @@ import java.util.Collection;
public class BusBillofquantitiesServiceImpl extends ServiceImpl<BusBillofquantitiesMapper, BusBillofquantities> implements IBusBillofquantitiesService {
private final BusBillofquantitiesMapper baseMapper;
@Lazy
@Resource
private IBusBillofquantitiesVersionsService busBillofquantitiesVersionsService;
/**
* 查询工程量清单
@ -94,6 +107,31 @@ public class BusBillofquantitiesServiceImpl extends ServiceImpl<BusBillofquantit
public Boolean insertByBo(BusBillofquantitiesBo bo) {
BusBillofquantities add = MapstructUtils.convert(bo, BusBillofquantities.class);
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;
if (flag) {
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 做一些数据校验,如唯一约束
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) {
if(isValid){
//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;
}

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.toolkit.Wrappers;
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.system.domain.vo.SysOssUploadVo;
import org.dromara.system.domain.vo.SysOssVo;
import org.dromara.system.service.ISysOssService;
import org.springframework.context.event.EventListener;
@ -46,7 +41,6 @@ import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
import java.time.Duration;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Collection;
@ -173,7 +167,7 @@ public class DesSchemeServiceImpl extends ServiceImpl<DesSchemeMapper, DesScheme
}
@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));
DesScheme scheme = new DesScheme();
scheme.setProjectId(projectId);
@ -181,7 +175,7 @@ public class DesSchemeServiceImpl extends ServiceImpl<DesSchemeMapper, DesScheme
scheme.setOssId(upload.getOssId());
scheme.setFileName(upload.getOriginalName());
scheme.setFileUrl(upload.getUrl());
scheme.setSchemeType(type);
baseMapper.insert(scheme);
return scheme.getId();
}