Commit 68a45a60 authored by chenyuefang's avatar chenyuefang

Merge remote-tracking branch 'origin/V20231129-中建一局二公司' into V20231129-中建一局二公司

parents 05b3a497 5d34affa
......@@ -49,7 +49,8 @@ spring:
driverClassName: com.mysql.cj.jdbc.Driver
# jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562
# rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题)
url: jdbc:mysql://111.204.34.146:63308/cscec_bms?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=Asia/Shanghai
# url: jdbc:mysql://111.204.34.146:63308/cscec_bms?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=Asia/Shanghai
url: jdbc:mysql://172.17.0.12:3306/cscec_bms?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=Asia/Shanghai
username: dev
password: DskSzh!456
# 从库数据源
......@@ -101,9 +102,10 @@ spring:
--- # redis 单机配置(单机与集群只能开启一个另一个需要注释掉)
spring:
redis:
host: 111.204.34.146
# host: 111.204.34.146
host: 172.17.0.12
# 端口,默认为6379
port: 63379
port: 6379
# 数据库索引
database: 13
# 密码
......
......@@ -40,6 +40,10 @@ public interface CbProjectConstants {
* 删除状态:未删除
*/
Integer DELETE_FLAG_EXIST = 0;
/**
* 删除状态:待删除
*/
Integer DELETE_FLAG_WAIT_DELETE = 1;
/**
* 删除状态:已删除
*/
......
......@@ -23,6 +23,7 @@ import java.io.UnsupportedEncodingException;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
/**
* 项目成本文件表(CbProjectFile)表控制层
......@@ -49,6 +50,12 @@ public class CbProjectFileController extends BaseController {
public R<Map<String, String>> uploadCbProjectFile(@Validated @ModelAttribute AddProjectFileUploadBo fileUploadBo) throws UnsupportedEncodingException {
MultipartFile file = fileUploadBo.getFile();
Assert.notNull(file, "上传文件不能为空");
//校验格式
String fileFormat = Objects.requireNonNull(fileUploadBo.getFile().getOriginalFilename()).substring(fileUploadBo.getFile().getOriginalFilename().lastIndexOf("."));
Assert.isTrue(".xlsx".equals(fileFormat) || ".xls".equals(fileFormat), "文件格式不正确");
//校验同一成本类型下是否存在相同文件
baseService.checkProjectFileExist(fileUploadBo);
SysOssVo oss = iSysOssService.upload(file);
//添加项目上传文件记录
CbProjectFile cbProjectFile;
......@@ -72,7 +79,7 @@ public class CbProjectFileController extends BaseController {
*/
@DeleteMapping("/deleteCbProjectFile/{fileId}")
public R<Void> deleteCbProjectFile(@NotNull(message = "文件ID不能为空") @PathVariable Long fileId) {
return toAjax(baseService.deleteProjectFile(fileId));
return toAjax(baseService.deleteProjectFile(new Long[]{fileId}));
}
/**
......
......@@ -6,11 +6,8 @@ import com.dsk.common.core.domain.PageQuery;
import com.dsk.common.core.domain.R;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.cscec.domain.CbProjectRecord;
import com.dsk.cscec.domain.bo.AddCbProjectBo;
import com.dsk.cscec.domain.bo.AddNewCbProjectBo;
import com.dsk.cscec.domain.bo.CbProjectSearchBo;
import com.dsk.cscec.domain.bo.EditProjectInfoBo;
import com.dsk.cscec.domain.vo.ProjectRecordSearchVo;
import com.dsk.cscec.domain.bo.*;
import com.dsk.cscec.domain.vo.CbProjectRecordSearchVo;
import com.dsk.cscec.service.CbProjectRecordService;
import com.dsk.cscec.service.IDProjectService;
import org.springframework.validation.annotation.Validated;
......@@ -19,6 +16,7 @@ import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.Arrays;
import java.util.List;
/**
......@@ -69,10 +67,18 @@ public class CbProjectRecordController extends BaseController {
* 获取项目台账列表
*/
@GetMapping("/getProjectList")
public TableDataInfo<ProjectRecordSearchVo> getProjectList(CbProjectSearchBo searchBo, PageQuery pageQuery) {
public TableDataInfo<CbProjectRecordSearchVo> getProjectList(@RequestBody CbProjectSearchBo searchBo, PageQuery pageQuery) {
return baseService.getProjectList(searchBo, pageQuery);
}
/**
* 获取项目历史阶段信息(懒加载)
*/
@GetMapping("/getProjectHistoryInfo")
public R<List<CbProjectRecord>> getProjectHistoryInfo(@RequestBody CbProjectHistorySearchBo searchBo) {
return R.ok(baseService.getProjectHistoryInfo(searchBo));
}
/**
* 修改项目信息
*/
......@@ -97,16 +103,29 @@ public class CbProjectRecordController extends BaseController {
return R.ok(baseService.addNewStageProject(newProjectBo));
}
/**
* 查询当前项目可删除成本阶段
* 即查询当前项目非草稿的成本阶段
*/
@GetMapping("/getProjectCbStageNotDraft/{relatedId}")
public R<List<Integer>> getProjectCbStageNotDraft(@PathVariable Long relatedId) {
return R.ok(baseService.getProjectCbStageNotDraft(relatedId));
}
/**
* 批量删除项目
*/
@DeleteMapping("/batchDeleteProject/{projectIds}")
public R<Void> batchDeleteProject(@NotNull(message = "项目ID不能为空") @PathVariable Long[] projectIds) {
return toAjax(baseService.batchDeleteProject(Arrays.asList(projectIds)));
}
/**
* 获取草稿弹窗列表
*/
@GetMapping("/getDraftDialogList")
public R<List<CbProjectRecord>> getDraftDialogList() {
List<CbProjectRecord> draftList = baseService.getDraftDialogList();
if (draftList.isEmpty()) {
return R.ok("暂无草稿记录");
}
return R.ok(draftList);
public TableDataInfo<CbProjectRecord> getDraftDialogList(PageQuery pageQuery) {
return baseService.getDraftDialogList(pageQuery);
}
/**
......
package com.dsk.cscec.controller;
import com.dsk.common.core.controller.BaseController;
import com.dsk.cscec.service.CbSceneExpenseChildrenService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* 现场经费-工资统筹、其他费用、现场管理费表(CbSceneExpenseChildren)表控制层
*
* @author sxk
* @since 2024-02-22 09:58:57
*/
@RestController
@RequestMapping("cbSceneExpenseChildren")
public class CbSceneExpenseChildrenController extends BaseController {
/**
* 服务对象
*/
@Resource
private CbSceneExpenseChildrenService baseService;
}
package com.dsk.cscec.controller;
import com.dsk.common.core.controller.BaseController;
import com.dsk.cscec.service.CbSceneExpenseMonthService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* 现场经费-每月费用表(CbSceneExpenseMonth)表控制层
*
* @author sxk
* @since 2024-02-22 09:59:28
*/
@RestController
@RequestMapping("cbSceneExpenseMonth")
public class CbSceneExpenseMonthController extends BaseController {
/**
* 服务对象
*/
@Resource
private CbSceneExpenseMonthService baseService;
}
package com.dsk.cscec.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.dsk.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
......@@ -34,6 +35,10 @@ public class CbDirectExpense extends BaseEntity implements Serializable {
* 父级ID
*/
private Long parentId;
/**
* 项目文件ID
*/
private Long projectFileId;
/**
* 序号
*/
......@@ -121,6 +126,7 @@ public class CbDirectExpense extends BaseEntity implements Serializable {
/**
* 删除状态(0:否、2:是)
*/
@TableLogic(value = "0", delval = "2")
private Integer delFlag;
/**
* 备注
......
......@@ -48,7 +48,7 @@ public class CbProjectFile extends BaseEntity implements Serializable {
*/
private String fileOssUrl;
/**
* 项目文件状态(0:待解析、1:解析中、2:解析成功、3:解析失败)
* 项目文件状态(0:准备中、1:解析中、2:解析成功、3:解析失败)
*/
private Integer fileParseStatus;
/**
......
package com.dsk.cscec.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.dsk.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
/**
* 现场经费-工资统筹、其他费用、现场管理费表(CbSceneExpenseChildren)实体类
*
* @author sxk
* @since 2024-02-22 09:59:00
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class CbSceneExpenseChildren extends BaseEntity implements Serializable {
private static final long serialVersionUID = 895279707061984760L;
/**
* 主键ID
*/
@TableId(value = "id")
private Long id;
/**
* 项目ID
*/
private Long projectId;
/**
* 成本阶段(0:标前成本、1:标后成本、2:转固成本)
*/
private Integer cbStage;
/**
* 父级ID
*/
private Long parentId;
/**
* 序号
*/
private String number;
/**
* 排序
*/
private Integer sort;
/**
* 数据类型(0:工资统筹、1:现场管理费、2:其他费用)
*/
private Integer dataType;
/**
* 名称
*/
private String expenseName;
/**
* 单位
*/
private String unit;
/**
* 成本数量-工资统筹表
*/
private Integer cbCount;
/**
* 使用时间-其他费用表
*/
private Integer useTime;
/**
* 工程量-现场管理费表
*/
private String engineeringVolume;
/**
* 公司单价/不含税单价
*/
private String unitPrice;
/**
* 目标成本合价(不含税)/不含税合价
*/
private String excludeTaxSumPrice;
/**
* 目标成本合价(含税)/含税合价
*/
private String includeTaxSumPrice;
/**
* 成本科目
*/
private String cbSubject;
/**
* 税金类型
*/
private String taxType;
/**
* 删除状态(0:否、2:是)
*/
@TableLogic(value = "0", delval = "2")
private Integer delFlag;
/**
* 备注
*/
private String remark;
}
package com.dsk.cscec.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.dsk.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
/**
* 现场经费-每月费用表(CbSceneExpenseMonth)实体类
*
* @author sxk
* @since 2024-02-22 09:59:28
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class CbSceneExpenseMonth extends BaseEntity implements Serializable {
private static final long serialVersionUID = -73353509267146384L;
/**
* 主键ID
*/
@TableId(value = "id")
private Long id;
/**
* 现场经费ID
*/
private Long sceneExpenseId;
/**
* 本月费用
*/
private Double currentMonthExpense;
/**
* 费用日期
*/
private String expenseDate;
/**
* 删除状态(0:否、2:是)
*/
@TableLogic(value = "0", delval = "2")
private Integer delFlag;
}
package com.dsk.cscec.domain.vo;
package com.dsk.cscec.domain.bo;
import lombok.Data;
import java.util.List;
/**
* @author sxk
* @date 2024.02.18
* @time 15:08
* @time 15:04
*/
@Data
public class ProjectRecordSearchVo {
public class CbProjectHistorySearchBo {
/**
* 项目ID
*/
private Long id;
private Long projectId;
/**
* 项目名称
*/
......@@ -24,11 +22,11 @@ public class ProjectRecordSearchVo {
*/
private String ipmProjectNo;
/**
* 文件名称
* 成本阶段(0:标前成本、1:标后成本、2:转固成本)
*/
private String projectFileName;
private Integer cbStage;
/**
* 项目数据
* 项目文件状态(1:解析中、2:解析成功、3:解析失败)
*/
private List<ProjectRecordDataVo> dataVoList;
private Integer projectFileStatus;
}
......@@ -10,7 +10,7 @@ import java.util.Date;
* @time 15:18
*/
@Data
public class ProjectRecordDataVo {
public class CbProjectRecordDataVo {
/**
* 项目文件状态(1:解析中、2:解析成功、3:解析失败)
*/
......
package com.dsk.cscec.domain.vo;
import com.dsk.cscec.domain.CbProjectRecord;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
/**
* @author sxk
* @date 2024.02.18
* @time 15:08
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class CbProjectRecordSearchVo extends CbProjectRecord {
/**
* 更新者
*/
private String updateBy;
/**
* 更新时间
*/
private Date updateTime;
/**
* 是否有子集
*/
private Boolean hasChildren;
}
......@@ -2,9 +2,13 @@ package com.dsk.cscec.mapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dsk.cscec.domain.CbProjectRecord;
import com.dsk.cscec.domain.vo.ProjectRecordSearchVo;
import com.dsk.cscec.domain.bo.CbProjectSearchBo;
import com.dsk.cscec.domain.vo.CbProjectRecordSearchVo;
import org.apache.ibatis.annotations.Param;
/**
* 项目台账表(CbProjectRecord)表数据库访问层
......@@ -16,7 +20,15 @@ public interface CbProjectRecordMapper extends BaseMapper<CbProjectRecord> {
/**
* 获取项目台账列表
*/
Page<ProjectRecordSearchVo> selectPageProjectRecordList(Page<ProjectRecordSearchVo> build, QueryWrapper<CbProjectRecord> wrapper);
Page<CbProjectRecordSearchVo> selectPageProjectRecordList(IPage<CbProjectSearchBo> build,
@Param("searchBo") CbProjectSearchBo searchBo,
@Param("deleteFlagExist") Integer deleteFlagExist,
@Param("projectFileStatusPreparing") Integer projectFileStatusPreparing);
/**
* 获取草稿弹窗列表
*/
Page<CbProjectRecord> selectPageDraftDialogList(@Param("page") Page<CbProjectRecord> page, @Param(Constants.WRAPPER) QueryWrapper<CbProjectRecord> wrapper);
}
package com.dsk.cscec.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsk.cscec.domain.CbSceneExpenseChildren;
/**
* 现场经费-工资统筹、其他费用、现场管理费表(CbSceneExpenseChildren)表数据库访问层
*
* @author sxk
* @since 2024-02-22 09:58:57
*/
public interface CbSceneExpenseChildrenMapper extends BaseMapper<CbSceneExpenseChildren> {
}
package com.dsk.cscec.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsk.cscec.domain.CbSceneExpenseMonth;
/**
* 现场经费-每月费用表(CbSceneExpenseMonth)表数据库访问层
*
* @author sxk
* @since 2024-02-22 09:59:28
*/
public interface CbSceneExpenseMonthMapper extends BaseMapper<CbSceneExpenseMonth> {
}
......@@ -13,6 +13,13 @@ import com.dsk.system.domain.vo.SysOssVo;
* @since 2024-02-05 14:01:06
*/
public interface CbProjectFileService extends IService<CbProjectFile> {
/**
* 校验同一成本类型下是否存在相同文件
*
* @param fileUploadBo 上传信息
*/
Boolean checkProjectFileExist(AddProjectFileUploadBo fileUploadBo);
/**
* 添加项目上传文件记录
*
......@@ -23,12 +30,12 @@ public interface CbProjectFileService extends IService<CbProjectFile> {
CbProjectFile addProjectFile(AddProjectFileUploadBo fileUploadBo, SysOssVo oss);
/**
* 逻辑删除项目上传文件记录
* 批量逻辑删除项目上传文件记录
*
* @param fileId 文件ID
* @param fileIds 文件ID
* @return 删除结果
*/
Integer deleteProjectFile(Long fileId);
Integer deleteProjectFile(Long[] fileIds);
/**
* 获取项目文件上传详情
......@@ -37,5 +44,4 @@ public interface CbProjectFileService extends IService<CbProjectFile> {
* @return 文件列表
*/
QueryProjectFileUploadDetailVo getProjectFileUploadDetail(Long projectId);
}
......@@ -4,11 +4,8 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.dsk.common.core.domain.PageQuery;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.cscec.domain.CbProjectRecord;
import com.dsk.cscec.domain.bo.AddCbProjectBo;
import com.dsk.cscec.domain.bo.AddNewCbProjectBo;
import com.dsk.cscec.domain.bo.CbProjectSearchBo;
import com.dsk.cscec.domain.bo.EditProjectInfoBo;
import com.dsk.cscec.domain.vo.ProjectRecordSearchVo;
import com.dsk.cscec.domain.bo.*;
import com.dsk.cscec.domain.vo.CbProjectRecordSearchVo;
import java.util.List;
......@@ -41,7 +38,15 @@ public interface CbProjectRecordService extends IService<CbProjectRecord> {
* @param pageQuery 分页对象
* @return 分页数据
*/
TableDataInfo<ProjectRecordSearchVo> getProjectList(CbProjectSearchBo searchBo, PageQuery pageQuery);
TableDataInfo<CbProjectRecordSearchVo> getProjectList(CbProjectSearchBo searchBo, PageQuery pageQuery);
/**
* 获取项目历史阶段信息(懒加载)
*
* @param searchBo 查询条件
* @return 历史阶段信息
*/
List<CbProjectRecord> getProjectHistoryInfo(CbProjectHistorySearchBo searchBo);
/**
* 修改项目信息
......@@ -67,12 +72,29 @@ public interface CbProjectRecordService extends IService<CbProjectRecord> {
*/
CbProjectRecord addNewStageProject(AddNewCbProjectBo newProjectBo);
/**
* 查询当前项目非草稿的成本阶段
*
* @param relatedId 关联ID
* @return 已有数据的成本阶段
*/
List<Integer> getProjectCbStageNotDraft(Long relatedId);
/**
* 批量删除项目
*
* @param projectIds 项目ID
* @return 删除结果
*/
Integer batchDeleteProject(List<Long> projectIds);
/**
* 获取草稿弹窗列表
*
* @return 草稿弹窗列表
* @param pageQuery 分页对象
* @return 分页数据
*/
List<CbProjectRecord> getDraftDialogList();
TableDataInfo<CbProjectRecord> getDraftDialogList(PageQuery pageQuery);
/**
* 删除草稿
......
package com.dsk.cscec.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dsk.cscec.domain.CbSceneExpenseChildren;
/**
* 现场经费-工资统筹、其他费用、现场管理费表(CbSceneExpenseChildren)表服务接口
*
* @author sxk
* @since 2024-02-22 09:59:01
*/
public interface CbSceneExpenseChildrenService extends IService<CbSceneExpenseChildren> {
}
package com.dsk.cscec.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dsk.cscec.domain.CbSceneExpenseMonth;
/**
* 现场经费-每月费用表(CbSceneExpenseMonth)表服务接口
*
* @author sxk
* @since 2024-02-22 09:59:28
*/
public interface CbSceneExpenseMonthService extends IService<CbSceneExpenseMonth> {
}
......@@ -2,7 +2,9 @@ package com.dsk.cscec.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsk.cscec.constant.CbProjectConstants;
import com.dsk.cscec.domain.CbProjectFile;
......@@ -17,6 +19,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
......@@ -32,13 +35,34 @@ public class CbProjectFileServiceImpl extends ServiceImpl<CbProjectFileMapper, C
private CbProjectFileMapper baseMapper;
@Resource
private CbProjectRecordMapper projectRecordMapper;
@Resource
private CbProjectFileMapper projectFileMapper;
/**
* 校验同一成本类型下是否存在相同文件
*
* @param fileUploadBo 上传信息
*/
@Override
public Boolean checkProjectFileExist(AddProjectFileUploadBo fileUploadBo) {
String filename = fileUploadBo.getFile().getOriginalFilename();
assert filename != null;
projectFileMapper.selectList(new LambdaQueryWrapper<CbProjectFile>()
.eq(CbProjectFile::getProjectId, fileUploadBo.getProjectId())
.eq(CbProjectFile::getCbType, fileUploadBo.getCbType())).forEach(projectFile -> {
//仅对比文件名,不考虑文件格式
Assert.isFalse(projectFile.getFileName().substring(0, projectFile.getFileName().lastIndexOf(".")).equals(filename.substring(0, filename.lastIndexOf(".")))
, "当前成本类型下存在同名文件,请重新上传");
});
return true;
}
/**
* 添加项目上传文件记录
*
* @param fileUploadBo 上传信息
* @param oss oss信息
* @return
* @return 文件记录
*/
@Override
@Transactional(rollbackFor = Exception.class)
......@@ -58,16 +82,34 @@ public class CbProjectFileServiceImpl extends ServiceImpl<CbProjectFileMapper, C
}
/**
* 逻辑删除项目上传文件记录
* 批量逻辑删除项目上传文件记录
*
* @param fileId 文件ID
* @param fileIds 文件ID
* @return 删除结果
*/
@Override
public Integer deleteProjectFile(Long fileId) {
CbProjectFile projectFile = baseMapper.selectById(fileId);
Assert.notNull(projectFile, "该文件不存在");
return baseMapper.deleteById(projectFile);
@Transactional(rollbackFor = Exception.class)
public Integer deleteProjectFile(Long[] fileIds) {
int flag = 0;
//查询待删除文件
List<CbProjectFile> fileList = baseMapper.selectList(new LambdaQueryWrapper<CbProjectFile>()
.in(ObjectUtil.isNotNull(fileIds), CbProjectFile::getId, Arrays.asList(fileIds)));
for (CbProjectFile file : fileList) {
//不允许删除解析中的文件
Integer fileParseStatus = file.getFileParseStatus();
Assert.isFalse(fileParseStatus.equals(CbProjectConstants.PROJECT_FILE_STATUS_PARSING),
"文件正在解析中,不允许删除");
//准备中、的文件设为已删除,否则设为待删除
//设为待删除是为了方便各个成本类型删除数据
if (fileParseStatus.equals(CbProjectConstants.PROJECT_FILE_STATUS_PREPARING)) {
flag = baseMapper.deleteById(file);
} else {
flag = baseMapper.update(null, new UpdateWrapper<CbProjectFile>()
.set("del_flag", CbProjectConstants.DELETE_FLAG_WAIT_DELETE)
.eq("id", file.getId()));
}
}
return flag;
}
/**
......@@ -91,7 +133,7 @@ public class CbProjectFileServiceImpl extends ServiceImpl<CbProjectFileMapper, C
QueryProjectFileUploadDetailVo draftDetailVo = new QueryProjectFileUploadDetailVo();
draftDetailVo.setProjectId(projectId);
if (projectFileList.isEmpty()) {
return draftDetailVo;
return null;
}
//按照成本类型分类填充
......
......@@ -3,6 +3,7 @@ package com.dsk.cscec.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
......@@ -16,7 +17,7 @@ import com.dsk.cscec.constant.CbProjectConstants;
import com.dsk.cscec.domain.CbProjectFile;
import com.dsk.cscec.domain.CbProjectRecord;
import com.dsk.cscec.domain.bo.*;
import com.dsk.cscec.domain.vo.ProjectRecordSearchVo;
import com.dsk.cscec.domain.vo.CbProjectRecordSearchVo;
import com.dsk.cscec.mapper.CbProjectFileMapper;
import com.dsk.cscec.mapper.CbProjectRecordMapper;
import com.dsk.cscec.service.CbProjectRecordService;
......@@ -139,24 +140,68 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe
* @return 分页数据
*/
@Override
public TableDataInfo<ProjectRecordSearchVo> getProjectList(CbProjectSearchBo searchBo, PageQuery pageQuery) {
QueryWrapper<CbProjectRecord> wrapper = Wrappers.query();
wrapper
.like(StringUtils.isNotBlank(searchBo.getProjectName()), "project_name", searchBo.getProjectName())
.like(StringUtils.isNotBlank(searchBo.getIpmProjectNo()), "ipm_project_no", searchBo.getIpmProjectNo());
public TableDataInfo<CbProjectRecordSearchVo> getProjectList(CbProjectSearchBo searchBo, PageQuery pageQuery) {
Page<CbProjectRecordSearchVo> page = baseMapper.selectPageProjectRecordList(pageQuery.build(), searchBo, CbProjectConstants.DELETE_FLAG_EXIST, CbProjectConstants.PROJECT_FILE_STATUS_PREPARING);
for (CbProjectRecordSearchVo searchVo : page.getRecords()) {
//判断是否有历史阶段
searchVo.setHasChildren(baseMapper.selectCount(new LambdaQueryWrapper<CbProjectRecord>()
.eq(CbProjectRecord::getRelatedId, searchVo.getRelatedId())) > 1);
//TODO:成本阶段、文件解析状态筛选
Integer cbStage = searchBo.getCbStage();
Integer projectFileStatus = searchBo.getProjectFileStatus();
//关键字标红
if (StringUtils.isNotBlank(searchBo.getProjectName())) {
searchVo.setProjectName(StringUtils.markInRed(searchVo.getProjectName(), searchBo.getProjectName()));
}
Page<ProjectRecordSearchVo> page = baseMapper.selectPageProjectRecordList(pageQuery.build(), wrapper);
for (ProjectRecordSearchVo searchVo : page.getRecords()) {
Long projectId = searchVo.getId();
//page.
//补充更新时间、更新人
CbProjectFile projectFile = projectFileMapper.selectOne(new LambdaQueryWrapper<CbProjectFile>()
.eq(CbProjectFile::getProjectId, searchVo.getId())
.orderByDesc(CbProjectFile::getUpdateTime)
.last("LIMIT 1"));
searchVo.setUpdateBy(projectFile.getUpdateBy());
searchVo.setUpdateTime(projectFile.getUpdateTime());
}
return TableDataInfo.build(page);
}
/**
* 获取项目历史阶段信息(懒加载)
*
* @param searchBo 查询条件
* @return 历史阶段信息
*/
@Override
public List<CbProjectRecord> getProjectHistoryInfo(CbProjectHistorySearchBo searchBo) {
//校验项目是否存在
CbProjectRecord projectRecord = this.checkProjectExist(searchBo.getProjectId());
//查询所有历史阶段项目(不含准备中的项目)
List<CbProjectRecord> projectRecordList = baseMapper.selectList(new LambdaQueryWrapper<CbProjectRecord>()
.eq(CbProjectRecord::getRelatedId, projectRecord.getRelatedId())
.ne(CbProjectRecord::getId, projectRecord.getId())
.ne(CbProjectRecord::getProjectFileStatus, CbProjectConstants.PROJECT_FILE_STATUS_PREPARING)
.like(StringUtils.isNotBlank(searchBo.getProjectName()), CbProjectRecord::getProjectName, searchBo.getProjectName())
.eq(StringUtils.isNotBlank(searchBo.getIpmProjectNo()), CbProjectRecord::getIpmProjectNo, searchBo.getIpmProjectNo())
.eq(ObjectUtil.isNotNull(searchBo.getCbStage()), CbProjectRecord::getCbStage, searchBo.getCbStage())
.eq(ObjectUtil.isNotNull(searchBo.getProjectFileStatus()), CbProjectRecord::getProjectFileStatus, searchBo.getProjectFileStatus()));
projectRecordList.forEach(record -> {
//关键字标红
if (StringUtils.isNotBlank(searchBo.getProjectName())) {
record.setProjectName(StringUtils.markInRed(record.getProjectFileName(), searchBo.getProjectName()));
}
//补充更新时间、更新人
CbProjectFile projectFile = projectFileMapper.selectOne(new LambdaQueryWrapper<CbProjectFile>()
.eq(CbProjectFile::getProjectId, record.getId())
.orderByDesc(CbProjectFile::getUpdateTime)
.last("LIMIT 1"));
record.setUpdateBy(projectFile.getUpdateBy());
record.setUpdateTime(projectFile.getUpdateTime());
});
return projectRecordList;
}
/**
* 修改项目信息
*
......@@ -233,13 +278,70 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe
return null;
}
/**
* 查询当前项目非草稿的成本阶段
*
* @param relatedId 关联ID
* @return 已有数据的成本阶段
*/
@Override
public List<Integer> getProjectCbStageNotDraft(Long relatedId) {
//通过关联ID校验项目是否存在
List<CbProjectRecord> projectRecordList = this.checkRelatedIdExist(relatedId);
ArrayList<Integer> cbStageList = new ArrayList<>();
projectRecordList.forEach(projectRecord -> {
//文件状态为解析成功or解析失败即为有数据
if (!projectRecord.getProjectFileStatus().equals(CbProjectConstants.PROJECT_FILE_STATUS_PREPARING)
&& !projectRecord.getProjectFileStatus().equals(CbProjectConstants.PROJECT_FILE_STATUS_PARSING)
&& projectFileMapper.exists(new LambdaQueryWrapper<CbProjectFile>()
.eq(CbProjectFile::getProjectId, projectRecord.getId())
.eq(CbProjectFile::getFileParseStatus, CbProjectConstants.PROJECT_FILE_STATUS_PARSE_SUCCESS)
.or()
.eq(CbProjectFile::getFileParseStatus, CbProjectConstants.PROJECT_FILE_STATUS_PARSE_FAIL))) {
cbStageList.add(projectRecord.getCbStage());
}
});
return cbStageList;
}
/**
* 批量删除项目
*
* @param projectIds 项目ID
* @return 删除结果
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Integer batchDeleteProject(List<Long> projectIds) {
int flag = 0;
for (Long projectId : projectIds) {
//校验项目是否存在
CbProjectRecord projectRecord = this.checkProjectExist(projectId);
//不允许删除正在解析中的项目
Assert.isFalse(projectRecord.getProjectFileStatus().equals(CbProjectConstants.PROJECT_FILE_STATUS_PARSING)
, "存在解析中的项目,删除失败");
//TODO:各个成本类型数据和对应每月成本数据暂不做删除,项目台账列表查不出来自然也无法查看数据
//删除项目文件记录
flag = projectFileMapper.delete(new LambdaQueryWrapper<CbProjectFile>()
.eq(CbProjectFile::getProjectId, projectId));
//删除项目记录
Assert.isTrue(flag > 0, "操作异常,请联系管理员");
flag = baseMapper.deleteById(projectId);
}
return flag;
}
/**
* 通过关联ID校验项目是否存在
*
* @return 该关联ID下的所有项目记录
*/
private List<CbProjectRecord> checkRelatedIdExist(Long relatedId) {
List<CbProjectRecord> projectRecordList = baseMapper.selectList(new LambdaQueryWrapper<CbProjectRecord>().eq(CbProjectRecord::getRelatedId, relatedId));
List<CbProjectRecord> projectRecordList = baseMapper.selectList(new LambdaQueryWrapper<CbProjectRecord>()
.eq(CbProjectRecord::getRelatedId, relatedId));
Assert.isFalse(projectRecordList.isEmpty(), "关联ID无效");
return projectRecordList;
}
......@@ -247,12 +349,17 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe
/**
* 获取草稿弹窗列表
*
* @return 草稿弹窗列表
* @param pageQuery 分页对象
* @return 分页数据
*/
@Override
public List<CbProjectRecord> getDraftDialogList() {
return baseMapper.selectList(new LambdaQueryWrapper<CbProjectRecord>()
.eq(CbProjectRecord::getProjectFileStatus, CbProjectConstants.PROJECT_FILE_STATUS_PREPARING));
public TableDataInfo<CbProjectRecord> getDraftDialogList(PageQuery pageQuery) {
QueryWrapper<CbProjectRecord> wrapper = Wrappers.query();
wrapper
.eq("project_file_status", CbProjectConstants.PROJECT_FILE_STATUS_PREPARING)
.eq("del_flag", CbProjectConstants.DELETE_FLAG_EXIST)
.orderByDesc("update_time");
return TableDataInfo.build(baseMapper.selectPageDraftDialogList(pageQuery.build(), wrapper));
}
/**
......
package com.dsk.cscec.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsk.cscec.domain.CbSceneExpenseChildren;
import com.dsk.cscec.mapper.CbSceneExpenseChildrenMapper;
import com.dsk.cscec.service.CbSceneExpenseChildrenService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/**
* 现场经费-工资统筹、其他费用、现场管理费表(CbSceneExpenseChildren)表服务实现类
*
* @author sxk
* @since 2024-02-22 09:59:01
*/
@Service("cbSceneExpenseChildrenService")
public class CbSceneExpenseChildrenServiceImpl extends ServiceImpl<CbSceneExpenseChildrenMapper, CbSceneExpenseChildren> implements CbSceneExpenseChildrenService {
@Resource
private CbSceneExpenseChildrenMapper baseMapper;
}
package com.dsk.cscec.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsk.cscec.domain.CbSceneExpenseMonth;
import com.dsk.cscec.mapper.CbSceneExpenseMonthMapper;
import com.dsk.cscec.service.CbSceneExpenseMonthService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/**
* 现场经费-每月费用表(CbSceneExpenseMonth)表服务实现类
*
* @author sxk
* @since 2024-02-22 09:59:28
*/
@Service("cbSceneExpenseMonthService")
public class CbSceneExpenseMonthServiceImpl extends ServiceImpl<CbSceneExpenseMonthMapper, CbSceneExpenseMonth> implements CbSceneExpenseMonthService {
@Resource
private CbSceneExpenseMonthMapper baseMapper;
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dsk.cscec.mapper.CbProjectFileMapper">
</mapper>
</mapper>
\ No newline at end of file
......@@ -2,11 +2,48 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dsk.cscec.mapper.CbProjectRecordMapper">
<!--获取项目台账列表-->
<select id="selectPageProjectRecordList" resultType="com.dsk.cscec.domain.vo.ProjectRecordSearchVo">
<select id="selectPageProjectRecordList" resultType="com.dsk.cscec.domain.vo.CbProjectRecordSearchVo">
select
cpr.id,
cpr.related_id,
cpr.project_name,
cpr.cb_stage,
cpr.project_file_status,
cpr.ipm_project_no,
cpr.is_get_project_detail,
cpr.project_file_name,
cpr.create_time
from cb_project_record cpr
left join cb_project_record cprr
on cpr.related_id = cprr.related_id
and cpr.cb_stage &lt; cprr.cb_stage
where
cprr.cb_stage is null
and
cpr.del_flag=#{deleteFlagExist}
<if test="searchBo.projectName != null and searchBo.projectName != ''">
and cpr.project_name like concat('%',#{searchBo.projectName},'%')
</if>
<if test="searchBo.ipmProjectNo != null and searchBo.ipmProjectNo != ''">
and cpr.ipm_project_no = #{searchBo.ipmProjectNo}
</if>
<if test="searchBo.cbStage != null">
and cpr.cb_stage = #{searchBo.cbStage}
</if>
<if test="searchBo.projectFileStatus != null">
and project_file_status = #{searchBo.projectFileStatus}
</if>
and
cpr.project_file_status != #{projectFileStatusPreparing}
order by cpr.create_time desc
</select>
<!--获取草稿弹窗列表-->
<select id="selectPageDraftDialogList" resultType="com.dsk.cscec.domain.CbProjectRecord">
select cpr.id,
cpr.project_name,
cpr.ipm_project_no,
cpr.project_file_name
cpr.cb_stage,
cpr.update_time
from cb_project_record cpr
${ew.getCustomSqlSegment};
</select>
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dsk.cscec.mapper.CbSceneExpenseChildrenMapper">
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dsk.cscec.mapper.CbSceneExpenseMonthMapper">
</mapper>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment