阶段成本分解接口修改

This commit is contained in:
2025-12-11 22:13:34 +08:00
parent ce35086316
commit 89d60dc528
11 changed files with 464 additions and 25 deletions

View File

@ -47,9 +47,12 @@ import org.dromara.system.service.ISysOssService;
import org.dromara.tender.domain.BusBLimitListVersions; import org.dromara.tender.domain.BusBLimitListVersions;
import org.dromara.tender.domain.BusBillofquantitiesLimitList; import org.dromara.tender.domain.BusBillofquantitiesLimitList;
import org.dromara.tender.domain.vo.BusBLimitListVersionsVo; import org.dromara.tender.domain.vo.BusBLimitListVersionsVo;
import org.dromara.tender.enums.LimitListTypeEnum;
import org.dromara.tender.service.IBusBLimitListVersionsService; import org.dromara.tender.service.IBusBLimitListVersionsService;
import org.dromara.tender.service.IBusBillofquantitiesLimitListService; import org.dromara.tender.service.IBusBillofquantitiesLimitListService;
import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysJdcbfj;
import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysZjhcb; import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysZjhcb;
import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysJdcbfjService;
import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysZjhcbService; import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysZjhcbService;
import org.dromara.xzd.domain.XzdProject; import org.dromara.xzd.domain.XzdProject;
import org.dromara.xzd.service.IXzdProjectService; import org.dromara.xzd.service.IXzdProjectService;
@ -87,6 +90,7 @@ public class BusBillofquantitiesVersionsServiceImpl extends ServiceImpl<BusBillo
private final IBusBLimitListVersionsService busBLimitListVersionsService; private final IBusBLimitListVersionsService busBLimitListVersionsService;
private final IBusBiddingLimitVersionsService busBiddingLimitVersions; private final IBusBiddingLimitVersionsService busBiddingLimitVersions;
private final IXzdCbysZjhcbService xzdCbysZjhcbService; private final IXzdCbysZjhcbService xzdCbysZjhcbService;
private final IXzdCbysJdcbfjService xzdCbysJdcbfjService;
@Lazy @Lazy
@Resource @Resource
private IBusProjectService busProjectService; private IBusProjectService busProjectService;
@ -770,6 +774,34 @@ public class BusBillofquantitiesVersionsServiceImpl extends ServiceImpl<BusBillo
if (!b) { if (!b) {
log.info("新增失败"); log.info("新增失败");
} }
XzdCbysJdcbfj zjhcb = new XzdCbysJdcbfj();
BusProjectDept projectDept = projectDeptService.getBaseMapper().selectOne(new LambdaQueryWrapper<BusProjectDept>().eq(BusProjectDept::getProjectId, versions.getProjectId()));
if (projectDept != null){
zjhcb.setDeptId(projectDept.getDeptId());
}
zjhcb.setVesions(busBLimitListVersions.getVersions());
zjhcb.setSysProjectId(versions.getProjectId());
String banBen = BatchNumberGenerator.generateBatchNumber("LXCBJDCBFJZC-");
zjhcb.setDocCode(banBen);
XzdProject xzdProject = xzdProjectService.getBaseMapper().selectOne(new LambdaQueryWrapper<XzdProject>().eq(XzdProject::getSysProjectId, versions.getProjectId()));
if (xzdProject != null){
zjhcb.setProjectId(xzdProject.getId());
zjhcb.setProjectLeader(xzdProject.getManagerResponsible());
Long count = xzdCbysJdcbfjService.getBaseMapper().selectCount(new LambdaQueryWrapper<XzdCbysJdcbfj>()
.eq(XzdCbysJdcbfj::getSysProjectId, versions.getProjectId())
.eq(XzdCbysJdcbfj::getVesions, busBLimitListVersions.getVersions())
.eq(XzdCbysJdcbfj::getType, LimitListTypeEnum.SUB_COMPANY.getCode()));
zjhcb.setDocTitle(count == 0 ? xzdProject.getProjectName() :xzdProject.getProjectName()+count);
}else {
zjhcb.setDocTitle(banBen);
}
zjhcb.setDocDate(LocalDate.now());
zjhcb.setBudgetCategory("1");
zjhcb.setType(LimitListTypeEnum.SUB_COMPANY.getCode());
boolean save1 = xzdCbysJdcbfjService.save(zjhcb);
if (!save1) {
log.info("新增失败");
}
} }
} }
@ -845,6 +877,34 @@ public class BusBillofquantitiesVersionsServiceImpl extends ServiceImpl<BusBillo
if (!b) { if (!b) {
log.info("新增失败"); log.info("新增失败");
} }
XzdCbysJdcbfj zjhcb = new XzdCbysJdcbfj();
BusProjectDept projectDept = projectDeptService.getBaseMapper().selectOne(new LambdaQueryWrapper<BusProjectDept>().eq(BusProjectDept::getProjectId, versions.getProjectId()));
if (projectDept != null){
zjhcb.setDeptId(projectDept.getDeptId());
}
zjhcb.setVesions(busBLimitListVersions.getVersions());
zjhcb.setSysProjectId(versions.getProjectId());
String banBen = BatchNumberGenerator.generateBatchNumber("LXCBJDCBFJWZ-");
zjhcb.setDocCode(banBen);
XzdProject xzdProject = xzdProjectService.getBaseMapper().selectOne(new LambdaQueryWrapper<XzdProject>().eq(XzdProject::getSysProjectId, versions.getProjectId()));
if (xzdProject != null){
zjhcb.setProjectId(xzdProject.getId());
zjhcb.setProjectLeader(xzdProject.getManagerResponsible());
Long count = xzdCbysJdcbfjService.getBaseMapper().selectCount(new LambdaQueryWrapper<XzdCbysJdcbfj>()
.eq(XzdCbysJdcbfj::getSysProjectId, versions.getProjectId())
.eq(XzdCbysJdcbfj::getVesions, busBLimitListVersions.getVersions())
.eq(XzdCbysJdcbfj::getType, LimitListTypeEnum.SPECIAL.getCode()));
zjhcb.setDocTitle(count == 0 ? xzdProject.getProjectName() :xzdProject.getProjectName()+count);
}else {
zjhcb.setDocTitle(banBen);
}
zjhcb.setDocDate(LocalDate.now());
zjhcb.setBudgetCategory("1");
zjhcb.setType(LimitListTypeEnum.SPECIAL.getCode());
boolean save1 = xzdCbysJdcbfjService.save(zjhcb);
if (!save1) {
log.info("新增失败");
}
} }
} }

View File

@ -571,9 +571,9 @@ public class BusProjectServiceImpl extends ServiceImpl<BusProjectMapper, BusProj
//删除所有旧部门 //删除所有旧部门
boolean remove = projectDeptService.remove(Wrappers.lambdaQuery(BusProjectDept.class) boolean remove = projectDeptService.remove(Wrappers.lambdaQuery(BusProjectDept.class)
.eq(BusProjectDept::getProjectId, project.getId())); .eq(BusProjectDept::getProjectId, project.getId()));
if (!remove) { // if (!remove) {
throw new ServiceException("删除项目部门失败", HttpStatus.ERROR); // throw new ServiceException("删除项目部门失败", HttpStatus.ERROR);
} // }
if (req.getDeptIds() !=null) { if (req.getDeptIds() !=null) {
BusProjectDept projectDept = new BusProjectDept(); BusProjectDept projectDept = new BusProjectDept();
projectDept.setDeptId(req.getDeptIds()); projectDept.setDeptId(req.getDeptIds());

View File

@ -123,4 +123,6 @@ public interface IBusBillofquantitiesLimitListService extends IService<BusBillof
List<BusBillofquantitiesLimitListVo> getZjhcbTree(BusBillofquantitiesLimitListBo bo); List<BusBillofquantitiesLimitListVo> getZjhcbTree(BusBillofquantitiesLimitListBo bo);
List<BusBillofquantitiesLimitListVo> getVoByVersion(Long sysProjectId, String vesion); List<BusBillofquantitiesLimitListVo> getVoByVersion(Long sysProjectId, String vesion);
List<BusBillofquantitiesLimitListVo> getJdcbfjTree(BusBillofquantitiesLimitListBo bo);
} }

View File

@ -396,6 +396,26 @@ public class BusBillofquantitiesLimitListServiceImpl extends ServiceImpl<BusBill
.isNotNull(BusBillofquantitiesLimitList::getUnitPrice)); .isNotNull(BusBillofquantitiesLimitList::getUnitPrice));
} }
@Override
public List<BusBillofquantitiesLimitListVo> getJdcbfjTree(BusBillofquantitiesLimitListBo bo) {
//获取所有数据
List<BusBillofquantitiesLimitListVo> listVoList = baseMapper.selectVoList(new LambdaQueryWrapper<BusBillofquantitiesLimitList>()
.eq(bo.getProjectId() != null,BusBillofquantitiesLimitList::getProjectId, bo.getProjectId())
.eq(StringUtils.isNotBlank(bo.getType()),BusBillofquantitiesLimitList::getType, bo.getType())
.eq(StringUtils.isNotBlank(bo.getVersions()),BusBillofquantitiesLimitList::getVersions, bo.getVersions())
.eq(StringUtils.isNotBlank(bo.getSheet()),BusBillofquantitiesLimitList::getSheet, bo.getSheet()));
//构建父子映射
Map<String, List<BusBillofquantitiesLimitListVo>> parentMap = listVoList.stream()
.collect(Collectors.groupingBy(BusBillofquantitiesLimitListVo::getPid));
//递归组装树形结构
List<BusBillofquantitiesLimitListVo> treeList = buildTree("0", parentMap);
for (BusBillofquantitiesLimitListVo item : treeList) {
calculateTreePrice(item);
}
return treeList;
}
/** /**
* 递归构建树形结构 * 递归构建树形结构
* *

View File

@ -16,6 +16,9 @@ import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController; import org.dromara.common.web.core.BaseController;
import org.dromara.tender.domain.bo.BusBillofquantitiesLimitListBo;
import org.dromara.tender.domain.vo.BusBillofquantitiesLimitListVo;
import org.dromara.tender.enums.LimitListTypeEnum;
import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysJdcbfjBo; import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysJdcbfjBo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysZjhcbBo; import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysZjhcbBo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysJdcbfjVo; import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysJdcbfjVo;
@ -49,6 +52,26 @@ public class XzdCbysJdcbfjController extends BaseController {
@Lazy @Lazy
private final IXzdCbysZjhcbService xzdCbysZjhcbService; private final IXzdCbysZjhcbService xzdCbysZjhcbService;
/**
* 获取指定版本的sheet
*/
@SaCheckPermission(value = {"costBudget:cbysJdcbfj:list","costBudget:cbysJdcbfj:add","costBudget:cbysJdcbfj:edit"},mode = SaMode.OR)
@GetMapping("/sheetList")
public R<List<String>> sheetList(XzdCbysJdcbfjBo bo) {
bo.setType(LimitListTypeEnum.SUB_COMPANY.getCode());
return R.ok(xzdCbysJdcbfjService.sheetList(bo));
}
/**
* 查询限价一览列表
*/
@SaCheckPermission(value = {"costBudget:cbysJdcbfj:list","costBudget:cbysJdcbfj:add","costBudget:cbysJdcbfj:edit"},mode = SaMode.OR)
@GetMapping("/getTree")
public R<List<BusBillofquantitiesLimitListVo>> getTree(BusBillofquantitiesLimitListBo bo) {
bo.setType(LimitListTypeEnum.SUB_COMPANY.getCode());
return R.ok(xzdCbysJdcbfjService.getTree(bo));
}
/** /**
* 查询立项及成本-成本预算-总体计划成本列表 * 查询立项及成本-成本预算-总体计划成本列表
*/ */
@ -77,6 +100,7 @@ public class XzdCbysJdcbfjController extends BaseController {
@SaCheckPermission("costBudget:cbysJdcbfj:list") @SaCheckPermission("costBudget:cbysJdcbfj:list")
@GetMapping("/list") @GetMapping("/list")
public TableDataInfo<XzdCbysJdcbfjVo> list(XzdCbysJdcbfjBo bo, PageQuery pageQuery) { public TableDataInfo<XzdCbysJdcbfjVo> list(XzdCbysJdcbfjBo bo, PageQuery pageQuery) {
bo.setType(LimitListTypeEnum.SPECIAL.getCode());
return xzdCbysJdcbfjService.queryPageList(bo, pageQuery); return xzdCbysJdcbfjService.queryPageList(bo, pageQuery);
} }

View File

@ -0,0 +1,176 @@
package org.dromara.xzd.costProjectApproval.costBudget.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
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.excel.utils.ExcelUtil;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController;
import org.dromara.tender.domain.bo.BusBillofquantitiesLimitListBo;
import org.dromara.tender.domain.vo.BusBillofquantitiesLimitListVo;
import org.dromara.tender.enums.LimitListTypeEnum;
import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysJdcbfjBo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysZjhcbBo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysJdcbfjVo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysZjhcbVo;
import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysJdcbfjService;
import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysZjhcbService;
import org.dromara.xzd.domain.bo.XzdBusinessSealBo;
import org.dromara.xzd.domain.vo.XzdBusinessSealVo;
import org.dromara.xzd.service.IXzdBusinessSealService;
import org.springframework.context.annotation.Lazy;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 立项及成本-成本预算-阶段成本分解
*
* @author Lion Li
* @date 2025-10-17
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/xzd/costBudget/cbysJdcbfjwz")
public class XzdCbysJdcbfjWzController extends BaseController {
private final IXzdCbysJdcbfjService xzdCbysJdcbfjService;
private final IXzdBusinessSealService xzdBusinessSealService;
@Lazy
@Resource
private IXzdCbysZjhcbService xzdCbysZjhcbService;
/**
* 获取指定版本的sheet
*/
@SaCheckPermission(value = {"costBudget:cbysJdcbfjwz:list","costBudget:cbysJdcbfjwz:add","costBudget:cbysJdcbfjwz:edit"},mode = SaMode.OR)
@GetMapping("/sheetList")
public R<List<String>> sheetList(XzdCbysJdcbfjBo bo) {
bo.setType(LimitListTypeEnum.SPECIAL.getCode());
return R.ok(xzdCbysJdcbfjService.sheetList(bo));
}
/**
* 查询限价一览列表
*/
@SaCheckPermission(value = {"costBudget:cbysJdcbfjwz:list","costBudget:cbysJdcbfjwz:add","costBudget:cbysJdcbfjwz:edit"},mode = SaMode.OR)
@GetMapping("/getTree")
public R<List<BusBillofquantitiesLimitListVo>> getTree(BusBillofquantitiesLimitListBo bo) {
bo.setType(LimitListTypeEnum.SPECIAL.getCode());
return R.ok(xzdCbysJdcbfjService.getTree(bo));
}
/**
* 查询立项及成本-成本预算-总体计划成本列表
*/
@SaCheckPermission(value = {"costBudget:cbysJdcbfjwz:add","costBudget:cbysJdcbfjwz:edit","costBudget:cbysJdcbfjwz:list"}, mode = SaMode.OR)
@GetMapping("/getList")
public TableDataInfo<XzdCbysZjhcbVo> list(XzdCbysZjhcbBo bo, PageQuery pageQuery) {
return xzdCbysZjhcbService.queryPageList(bo, pageQuery);
}
/**
* 获取立项及成本-成本预算-总体计划成本详细信息
*
* @param id 主键
*/
@SaCheckPermission(value = {"costBudget:cbysJdcbfjwz:add","costBudget:cbysJdcbfjwz:edit","costBudget:cbysJdcbfjwz:list"},mode = SaMode.OR)
@GetMapping("/get/{id}")
public R<XzdCbysZjhcbVo> getCbysZjhcbInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(xzdCbysZjhcbService.queryById(id));
}
/**
* 查询立项及成本-成本预算-阶段成本分解列表
*/
@SaCheckPermission("costBudget:cbysJdcbfjwz:list")
@GetMapping("/list")
public TableDataInfo<XzdCbysJdcbfjVo> list(XzdCbysJdcbfjBo bo, PageQuery pageQuery) {
bo.setType(LimitListTypeEnum.SPECIAL.getCode());
return xzdCbysJdcbfjService.queryPageList(bo, pageQuery);
}
/**
* 导出立项及成本-成本预算-阶段成本分解列表
*/
@SaCheckPermission("costBudget:cbysJdcbfjwz:export")
@Log(title = "立项及成本-成本预算-阶段成本分解", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(XzdCbysJdcbfjBo bo, HttpServletResponse response) {
List<XzdCbysJdcbfjVo> list = xzdCbysJdcbfjService.queryList(bo);
ExcelUtil.exportExcel(list, "立项及成本-成本预算-阶段成本分解", XzdCbysJdcbfjVo.class, response);
}
/**
* 获取立项及成本-成本预算-阶段成本分解详细信息
*
* @param id 主键
*/
// @SaCheckPermission("costBudget:cbysJdcbfjwz:query")
@GetMapping("/{id}")
public R<XzdCbysJdcbfjVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(xzdCbysJdcbfjService.queryById(id));
}
/**
* 新增立项及成本-成本预算-阶段成本分解
*/
@SaCheckPermission("costBudget:cbysJdcbfjwz:add")
@Log(title = "立项及成本-成本预算-阶段成本分解", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody XzdCbysJdcbfjBo bo) {
return toAjax(xzdCbysJdcbfjService.insertByBo(bo));
}
/**
* 修改立项及成本-成本预算-阶段成本分解
*/
@SaCheckPermission("costBudget:cbysJdcbfjwz:edit")
@Log(title = "立项及成本-成本预算-阶段成本分解", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody XzdCbysJdcbfjBo bo) {
return toAjax(xzdCbysJdcbfjService.updateByBo(bo));
}
/**
* 删除立项及成本-成本预算-阶段成本分解
*
* @param ids 主键串
*/
@SaCheckPermission("costBudget:cbysJdcbfjwz:remove")
@Log(title = "立项及成本-成本预算-阶段成本分解", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(xzdCbysJdcbfjService.deleteWithValidByIds(List.of(ids), true));
}
/**
* 查询印章帮助列表
*/
@SaCheckPermission(value = {"costBudget:cbysJdcbfjwz:add","costBudget:cbysJdcbfjwz:edit","costBudget:cbysJdcbfjwz:list"}, mode = SaMode.OR)
@GetMapping("/businessSealList")
public TableDataInfo<XzdBusinessSealVo> list(XzdBusinessSealBo bo, PageQuery pageQuery) {
return xzdBusinessSealService.queryPageList(bo, pageQuery);
}
}

View File

@ -34,6 +34,14 @@ public class XzdCbysJdcbfj extends BaseEntity {
* 部门id * 部门id
*/ */
private Long deptId; private Long deptId;
/**
*限价一览版本id
*/
private String vesions;
/**
* 系统项目id
*/
private Long sysProjectId;
/** /**
* 单据编码(带*,必填) * 单据编码(带*,必填)
@ -117,4 +125,10 @@ public class XzdCbysJdcbfj extends BaseEntity {
private String auditStatus; private String auditStatus;
/**
* 2.招采 3.物资
*/
private String type;
} }

View File

@ -1,5 +1,6 @@
package org.dromara.xzd.costProjectApproval.costBudget.domain.bo; package org.dromara.xzd.costProjectApproval.costBudget.domain.bo;
import org.dromara.tender.domain.bo.BusBillofquantitiesLimitListBo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysJdcbfj; import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysJdcbfj;
import org.dromara.common.mybatis.core.domain.BaseEntity; import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.AddGroup;
@ -37,6 +38,19 @@ public class XzdCbysJdcbfjBo extends BaseEntity {
*/ */
private Long deptId; private Long deptId;
/**
*限价一览版本id
*/
private String vesions;
/**
* 系统项目id
*/
private Long sysProjectId;
/**
* 2.招采 3.物资
*/
private String type;
/** /**
* 单据编码(带*,必填) * 单据编码(带*,必填)
*/ */
@ -124,7 +138,13 @@ public class XzdCbysJdcbfjBo extends BaseEntity {
/** /**
* 副表数据 * 副表数据
*/ */
List<XzdCbysJdcbfjFubiao> xzdCbysJdcbfjFubiao; // List<XzdCbysJdcbfjFubiao> xzdCbysJdcbfjFubiao;
/**
* 限价一览
*/
List<BusBillofquantitiesLimitListBo> bos;
} }

View File

@ -4,6 +4,8 @@ import java.math.BigDecimal;
import org.dromara.common.translation.annotation.Translation; import org.dromara.common.translation.annotation.Translation;
import org.dromara.common.translation.constant.TransConstant; import org.dromara.common.translation.constant.TransConstant;
import org.dromara.tender.domain.bo.BusBillofquantitiesLimitListBo;
import org.dromara.tender.domain.vo.BusBillofquantitiesLimitListVo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysJdcbfj; import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysJdcbfj;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
@ -46,6 +48,15 @@ public class XzdCbysJdcbfjVo implements Serializable {
*/ */
private Long deptId; private Long deptId;
/**
*限价一览版本id
*/
private String vesions;
/**
* 系统项目id
*/
private Long sysProjectId;
/** /**
* 单据编码(带*,必填) * 单据编码(带*,必填)
*/ */
@ -152,10 +163,21 @@ public class XzdCbysJdcbfjVo implements Serializable {
*/ */
private String auditStatus; private String auditStatus;
// /**
// * 副表数据
// */
// List<XzdCbysJdcbfjFubiao> xzdCbysJdcbfjFubiao;
/** /**
* 副表数据 * 限价一览
*/ */
List<XzdCbysJdcbfjFubiao> xzdCbysJdcbfjFubiao; List<BusBillofquantitiesLimitListVo> bos;
/**
* 2.招采 3.物资
*/
private String type;
} }

View File

@ -1,5 +1,7 @@
package org.dromara.xzd.costProjectApproval.costBudget.service; package org.dromara.xzd.costProjectApproval.costBudget.service;
import org.dromara.tender.domain.bo.BusBillofquantitiesLimitListBo;
import org.dromara.tender.domain.vo.BusBillofquantitiesLimitListVo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysJdcbfjVo; import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysJdcbfjVo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysJdcbfjBo; import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysJdcbfjBo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysJdcbfj; import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysJdcbfj;
@ -67,4 +69,20 @@ public interface IXzdCbysJdcbfjService extends IService<XzdCbysJdcbfj>{
* @return 是否删除成功 * @return 是否删除成功
*/ */
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid); Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* 查询sheet列表
*
* @param bo 查询条件
* @return sheet列表
*/
List<String> sheetList(XzdCbysJdcbfjBo bo);
/**
* 获取树结构
*
* @param bo 查询条件
* @return 树结构
*/
List<BusBillofquantitiesLimitListVo> getTree(BusBillofquantitiesLimitListBo bo);
} }

View File

@ -1,6 +1,7 @@
package org.dromara.xzd.costProjectApproval.costBudget.service.impl; package org.dromara.xzd.costProjectApproval.costBudget.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.domain.event.ProcessDeleteEvent; import org.dromara.common.core.domain.event.ProcessDeleteEvent;
import org.dromara.common.core.domain.event.ProcessEvent; import org.dromara.common.core.domain.event.ProcessEvent;
@ -17,12 +18,18 @@ import lombok.RequiredArgsConstructor;
import org.dromara.common.utils.BatchNumberGenerator; import org.dromara.common.utils.BatchNumberGenerator;
import org.dromara.system.service.ISysUserService; import org.dromara.system.service.ISysUserService;
import org.dromara.system.service.impl.SysOssServiceImpl; import org.dromara.system.service.impl.SysOssServiceImpl;
import org.dromara.tender.domain.BusBillofquantitiesLimitList;
import org.dromara.tender.domain.bo.BusBillofquantitiesLimitListBo;
import org.dromara.tender.domain.vo.BusBillofquantitiesLimitListVo;
import org.dromara.tender.enums.LimitListTypeEnum;
import org.dromara.tender.service.IBusBillofquantitiesLimitListService;
import org.dromara.xzd.costProjectApproval.costBudget.domain.*; import org.dromara.xzd.costProjectApproval.costBudget.domain.*;
import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysZjhcbVo; import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysZjhcbVo;
import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysJdcbfjFubiaoService; import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysJdcbfjFubiaoService;
import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysZjhcbService; import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysZjhcbService;
import org.dromara.xzd.service.impl.XzdProjectServiceImpl; import org.dromara.xzd.service.impl.XzdProjectServiceImpl;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysJdcbfjBo; import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysJdcbfjBo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysJdcbfjVo; import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysJdcbfjVo;
@ -30,6 +37,7 @@ import org.dromara.xzd.costProjectApproval.costBudget.mapper.XzdCbysJdcbfjMapper
import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysJdcbfjService; import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysJdcbfjService;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
/** /**
* 立项及成本-成本预算-阶段成本分解Service业务层处理 * 立项及成本-成本预算-阶段成本分解Service业务层处理
@ -55,6 +63,10 @@ public class XzdCbysJdcbfjServiceImpl extends ServiceImpl<XzdCbysJdcbfjMapper, X
@Autowired @Autowired
private IXzdCbysZjhcbService xzdCbysZjhcbService; private IXzdCbysZjhcbService xzdCbysZjhcbService;
@Lazy
@Resource
private IBusBillofquantitiesLimitListService limitListService;
/** /**
* 查询立项及成本-成本预算-阶段成本分解 * 查询立项及成本-成本预算-阶段成本分解
* *
@ -115,6 +127,7 @@ public class XzdCbysJdcbfjServiceImpl extends ServiceImpl<XzdCbysJdcbfjMapper, X
lqw.eq(bo.getExchangeRate() != null, XzdCbysJdcbfj::getExchangeRate, bo.getExchangeRate()); lqw.eq(bo.getExchangeRate() != null, XzdCbysJdcbfj::getExchangeRate, bo.getExchangeRate());
lqw.eq(StringUtils.isNotBlank(bo.getDocumentReference()), XzdCbysJdcbfj::getDocumentReference, bo.getDocumentReference()); lqw.eq(StringUtils.isNotBlank(bo.getDocumentReference()), XzdCbysJdcbfj::getDocumentReference, bo.getDocumentReference());
lqw.eq(StringUtils.isNotBlank(bo.getFileId()), XzdCbysJdcbfj::getFileId, bo.getFileId()); lqw.eq(StringUtils.isNotBlank(bo.getFileId()), XzdCbysJdcbfj::getFileId, bo.getFileId());
lqw.eq(StringUtils.isNotBlank(bo.getType()), XzdCbysJdcbfj::getType, bo.getType());
return lqw; return lqw;
} }
@ -134,14 +147,14 @@ public class XzdCbysJdcbfjServiceImpl extends ServiceImpl<XzdCbysJdcbfjMapper, X
if (flag) { if (flag) {
bo.setId(add.getId()); bo.setId(add.getId());
} }
if (bo.getXzdCbysJdcbfjFubiao() != null && !bo.getXzdCbysJdcbfjFubiao().isEmpty()) { // if (bo.getXzdCbysJdcbfjFubiao() != null && !bo.getXzdCbysJdcbfjFubiao().isEmpty()) {
bo.getXzdCbysJdcbfjFubiao().forEach(item -> { // bo.getXzdCbysJdcbfjFubiao().forEach(item -> {
String code = BatchNumberGenerator.generateBatchNumber("LXCBYSBM-"); // String code = BatchNumberGenerator.generateBatchNumber("LXCBYSBM-");
item.setBudgetItemCode(code); // item.setBudgetItemCode(code);
item.setMainTableId(add.getId()); // item.setMainTableId(add.getId());
}); // });
xzdCbysJdcbfjFubiaoService.saveBatch(bo.getXzdCbysJdcbfjFubiao()); // xzdCbysJdcbfjFubiaoService.saveBatch(bo.getXzdCbysJdcbfjFubiao());
} // }
return flag; return flag;
} }
@ -155,15 +168,16 @@ public class XzdCbysJdcbfjServiceImpl extends ServiceImpl<XzdCbysJdcbfjMapper, X
public Boolean updateByBo(XzdCbysJdcbfjBo bo) { public Boolean updateByBo(XzdCbysJdcbfjBo bo) {
XzdCbysJdcbfj update = MapstructUtils.convert(bo, XzdCbysJdcbfj.class); XzdCbysJdcbfj update = MapstructUtils.convert(bo, XzdCbysJdcbfj.class);
validEntityBeforeSave(update); validEntityBeforeSave(update);
xzdCbysJdcbfjFubiaoService.remove(new LambdaQueryWrapper<XzdCbysJdcbfjFubiao>().eq(XzdCbysJdcbfjFubiao::getMainTableId, bo.getId())); // xzdCbysJdcbfjFubiaoService.remove(new LambdaQueryWrapper<XzdCbysJdcbfjFubiao>().eq(XzdCbysJdcbfjFubiao::getMainTableId, bo.getId()));
if (bo.getXzdCbysJdcbfjFubiao() != null && !bo.getXzdCbysJdcbfjFubiao().isEmpty()) { // if (bo.getXzdCbysJdcbfjFubiao() != null && !bo.getXzdCbysJdcbfjFubiao().isEmpty()) {
bo.getXzdCbysJdcbfjFubiao().forEach(item -> { // bo.getXzdCbysJdcbfjFubiao().forEach(item -> {
String code = BatchNumberGenerator.generateBatchNumber("LXCBYSBM-"); // String code = BatchNumberGenerator.generateBatchNumber("LXCBYSBM-");
item.setBudgetItemCode(code); // item.setBudgetItemCode(code);
item.setMainTableId(bo.getId()); // item.setMainTableId(bo.getId());
}); // });
xzdCbysJdcbfjFubiaoService.saveBatch(bo.getXzdCbysJdcbfjFubiao()); // xzdCbysJdcbfjFubiaoService.saveBatch(bo.getXzdCbysJdcbfjFubiao());
} // }
Boolean b = limitListService.updateByBo(bo.getBos());
return baseMapper.updateById(update) > 0; return baseMapper.updateById(update) > 0;
} }
@ -205,14 +219,40 @@ public class XzdCbysJdcbfjServiceImpl extends ServiceImpl<XzdCbysJdcbfjMapper, X
return baseMapper.deleteByIds(ids) > 0; return baseMapper.deleteByIds(ids) > 0;
} }
@Override
public List<String> sheetList(XzdCbysJdcbfjBo bo) {
XzdCbysJdcbfjVo xzdCbysZjhcbVo = baseMapper.selectVoOne(new LambdaQueryWrapper<XzdCbysJdcbfj>().eq(XzdCbysJdcbfj::getSysProjectId, bo.getSysProjectId()).eq(XzdCbysJdcbfj::getType,bo.getType()));
if (xzdCbysZjhcbVo != null){
List<BusBillofquantitiesLimitList> busBillofquantitiesLimitLists = limitListService.getBaseMapper().selectList(new LambdaQueryWrapper<BusBillofquantitiesLimitList>()
.select(BusBillofquantitiesLimitList::getSheet)
.eq(xzdCbysZjhcbVo.getSysProjectId() != null, BusBillofquantitiesLimitList::getProjectId, xzdCbysZjhcbVo.getSysProjectId())
.eq(StringUtils.isNotBlank(bo.getType()),BusBillofquantitiesLimitList::getType, bo.getType())
.eq(StringUtils.isNotBlank(xzdCbysZjhcbVo.getVesions()), BusBillofquantitiesLimitList::getVersions, xzdCbysZjhcbVo.getVesions())
.orderByAsc(BusBillofquantitiesLimitList::getSheet)
.groupBy(BusBillofquantitiesLimitList::getSheet));
return busBillofquantitiesLimitLists.stream()
.filter(Objects::nonNull)
.map(BusBillofquantitiesLimitList::getSheet)
.collect(Collectors.toList());
}
return List.of();
}
@Override
public List<BusBillofquantitiesLimitListVo> getTree(BusBillofquantitiesLimitListBo bo) {
return limitListService.getJdcbfjTree(bo);
}
/** /**
* 获取扣款与奖励项 * 获取扣款与奖励项
* @param vo * @param vo
*/ */
private void getHttk(XzdCbysJdcbfjVo vo) { private void getHttk(XzdCbysJdcbfjVo vo) {
List<XzdCbysJdcbfjFubiao> xzdCbysZtjhcbBgjls = xzdCbysJdcbfjFubiaoService.getBaseMapper().selectList(new LambdaQueryWrapper<XzdCbysJdcbfjFubiao>().eq(XzdCbysJdcbfjFubiao::getMainTableId, vo.getId())); // List<XzdCbysJdcbfjFubiao> xzdCbysZtjhcbBgjls = xzdCbysJdcbfjFubiaoService.getBaseMapper().selectList(new LambdaQueryWrapper<XzdCbysJdcbfjFubiao>().eq(XzdCbysJdcbfjFubiao::getMainTableId, vo.getId()));
vo.setXzdCbysJdcbfjFubiao(xzdCbysZtjhcbBgjls); // vo.setXzdCbysJdcbfjFubiao(xzdCbysZtjhcbBgjls);
List<BusBillofquantitiesLimitListVo> vos = limitListService.getVoByVersion(vo.getSysProjectId(), vo.getVesions());
vo.setBos(vos);
} }
@ -261,5 +301,48 @@ public class XzdCbysJdcbfjServiceImpl extends ServiceImpl<XzdCbysJdcbfjMapper, X
public void processDeletePlansHandlerEquipmentList(ProcessDeleteEvent processDeleteEvent) { public void processDeletePlansHandlerEquipmentList(ProcessDeleteEvent processDeleteEvent) {
log.info("立项及成本-成本预算-阶段成本分解计划删除流程事件,技术标准文件审核任务执行了{}", processDeleteEvent.toString()); log.info("立项及成本-成本预算-阶段成本分解计划删除流程事件,技术标准文件审核任务执行了{}", processDeleteEvent.toString());
} }
/**
* 总体流程监听(例如: 草稿,撤销,退回,作废,终止,已完成,单任务完成等)
* 正常使用只需#processEvent.flowCode=='leave1'
* 示例为了方便则使用startsWith匹配了全部示例key
*
* @param processEvent 参数
*/
@org.springframework.context.event.EventListener(condition = "#processEvent.flowCode.endsWith('xzdCbysJdcbfjwz')")
public void processPlansHandlErequipmentListWZ(ProcessEvent processEvent) {
log.info("立项及成本-成本预算-阶段成本分解审核任务执行了{}", processEvent.toString());
String id = processEvent.getBusinessId();
XzdCbysJdcbfj xzdCbysJdcbfj = baseMapper.selectById(Long.valueOf(id));
if (xzdCbysJdcbfj == null){return;}
xzdCbysJdcbfj.setAuditStatus(processEvent.getStatus());
baseMapper.updateById(xzdCbysJdcbfj);
}
/**
* 执行任务创建监听
* 示例:也可通过 @EventListener(condition = "#processTaskEvent.flowCode=='leave1'")进行判断
* 在方法中判断流程节点key
* if ("xxx".equals(processTaskEvent.getNodeCode())) {
* //执行业务逻辑
* }
*
* @param processTaskEvent 参数
*/
@org.springframework.context.event.EventListener(condition = "#processTaskEvent.flowCode.endsWith('xzdCbysJdcbfjwz')")
public void processTaskPlansHandlerEquipmentListWZ(ProcessTaskEvent processTaskEvent) {
log.info("立项及成本-成本预算-阶段成本分解审核任务创建了{}", processTaskEvent.toString());
}
/**
* 监听删除流程事件
* 正常使用只需#processDeleteEvent.flowCode=='leave1'
* 示例为了方便则使用startsWith匹配了全部示例key
*
* @param processDeleteEvent 参数
*/
@org.springframework.context.event.EventListener(condition = "#processDeleteEvent.flowCode.endsWith('xzdCbysJdcbfjwz')")
public void processDeletePlansHandlerEquipmentListWZ(ProcessDeleteEvent processDeleteEvent) {
log.info("立项及成本-成本预算-阶段成本分解计划删除流程事件,技术标准文件审核任务执行了{}", processDeleteEvent.toString());
}
} }