Commit fd469e9c authored by huangjie's avatar huangjie

Merge branch 'V20231129-中建一局二公司' of http://192.168.60.201/root/dsk-operate-sys...

Merge branch 'V20231129-中建一局二公司' of http://192.168.60.201/root/dsk-operate-sys into V20231129-中建一局二公司
parents be8415a0 75819ccd
package com.dsk.cscec.controller;
import com.dsk.common.core.controller.BaseController;
import com.dsk.common.core.domain.R;
import com.dsk.cscec.domain.bo.CbSummaryActualListBo;
import com.dsk.cscec.domain.vo.CbGainLossAnalysisListVo;
import com.dsk.cscec.service.ICbGainLossAnalysisService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* 成本-盈亏分析对比
*
* @Author lcl
* @Data 2024/2/18 14:01
*/
@RestController
@RequiredArgsConstructor
@RequestMapping("/cb/gain/loss/analysis")
public class CbGainLossAnalysisController extends BaseController {
private final ICbGainLossAnalysisService baseService;
/**
* 数据列表
*/
@GetMapping("/list")
public R<List<CbGainLossAnalysisListVo>> getList(CbSummaryActualListBo bo) {
return R.ok(baseService.getList(bo));
}
}
package com.dsk.cscec.controller; package com.dsk.cscec.controller;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.lang.Assert;
import com.dsk.common.annotation.Log; import com.dsk.common.annotation.Log;
import com.dsk.common.core.controller.BaseController; import com.dsk.common.core.controller.BaseController;
import com.dsk.common.core.domain.R; import com.dsk.common.core.domain.R;
import com.dsk.common.enums.BusinessType; import com.dsk.common.enums.BusinessType;
import com.dsk.common.exception.ServiceException; import com.dsk.common.exception.ServiceException;
import com.dsk.cscec.domain.CbProjectFile;
import com.dsk.cscec.domain.bo.AddProjectFileUploadBo; import com.dsk.cscec.domain.bo.AddProjectFileUploadBo;
import com.dsk.cscec.domain.bo.QueryProjectFileUploadDetailBo;
import com.dsk.cscec.domain.vo.QueryProjectFileUploadDetailVo; import com.dsk.cscec.domain.vo.QueryProjectFileUploadDetailVo;
import com.dsk.cscec.service.CbProjectFileService; import com.dsk.cscec.service.CbProjectFileService;
import com.dsk.system.domain.vo.SysOssVo; import com.dsk.system.domain.vo.SysOssVo;
...@@ -48,19 +48,19 @@ public class CbProjectFileController extends BaseController { ...@@ -48,19 +48,19 @@ public class CbProjectFileController extends BaseController {
@PostMapping(value = "/uploadCbProjectFile", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) @PostMapping(value = "/uploadCbProjectFile", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public R<Map<String, String>> uploadCbProjectFile(@Validated @ModelAttribute AddProjectFileUploadBo fileUploadBo) throws UnsupportedEncodingException { public R<Map<String, String>> uploadCbProjectFile(@Validated @ModelAttribute AddProjectFileUploadBo fileUploadBo) throws UnsupportedEncodingException {
MultipartFile file = fileUploadBo.getFile(); MultipartFile file = fileUploadBo.getFile();
if (ObjectUtil.isNull(file)) { Assert.notNull(file, "上传文件不能为空");
return R.fail("上传文件不能为空");
}
SysOssVo oss = iSysOssService.upload(file); SysOssVo oss = iSysOssService.upload(file);
//添加项目上传文件记录 //添加项目上传文件记录
CbProjectFile cbProjectFile;
try { try {
baseService.addProjectFile(fileUploadBo, oss); cbProjectFile = baseService.addProjectFile(fileUploadBo, oss);
} catch (ServiceException e) { } catch (ServiceException e) {
//删除oss中的文件 //删除oss中的文件
iSysOssService.deleteWithValidByIds(Collections.singletonList(oss.getOssId()), true); iSysOssService.deleteWithValidByIds(Collections.singletonList(oss.getOssId()), true);
throw e; throw e;
} }
Map<String, String> map = new HashMap<>(2); Map<String, String> map = new HashMap<>(2);
map.put("fileId", cbProjectFile.getId().toString());
map.put("fileName", oss.getOriginalName()); map.put("fileName", oss.getOriginalName());
map.put("fileOssId", oss.getOssId().toString()); map.put("fileOssId", oss.getOssId().toString());
map.put("fileOssUrl", oss.getUrl()); map.put("fileOssUrl", oss.getUrl());
...@@ -78,8 +78,8 @@ public class CbProjectFileController extends BaseController { ...@@ -78,8 +78,8 @@ public class CbProjectFileController extends BaseController {
/** /**
* 获取项目文件上传详情 * 获取项目文件上传详情
*/ */
@GetMapping("/getProjectFileUploadDetail") @GetMapping("/getProjectFileUploadDetail/{projectId}")
public R<QueryProjectFileUploadDetailVo> getProjectFileUploadDetail(@Validated @RequestBody QueryProjectFileUploadDetailBo uploadDetailBo) { public R<QueryProjectFileUploadDetailVo> getProjectFileUploadDetail(@NotNull(message = "项目ID不能为空") @PathVariable Long projectId) {
return R.ok(baseService.getProjectFileUploadDetail(uploadDetailBo)); return R.ok(baseService.getProjectFileUploadDetail(projectId));
} }
} }
\ No newline at end of file
...@@ -2,11 +2,15 @@ package com.dsk.cscec.controller; ...@@ -2,11 +2,15 @@ package com.dsk.cscec.controller;
import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Assert;
import com.dsk.common.core.controller.BaseController; import com.dsk.common.core.controller.BaseController;
import com.dsk.common.core.domain.PageQuery;
import com.dsk.common.core.domain.R; 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.CbProjectRecord;
import com.dsk.cscec.domain.bo.AddCbProjectBo; 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.bo.EditProjectInfoBo;
import com.dsk.cscec.domain.bo.ImportCbProjectDataBo; import com.dsk.cscec.domain.vo.ProjectRecordSearchVo;
import com.dsk.cscec.service.CbProjectRecordService; import com.dsk.cscec.service.CbProjectRecordService;
import com.dsk.cscec.service.IDProjectService; import com.dsk.cscec.service.IDProjectService;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
...@@ -14,6 +18,7 @@ import org.springframework.web.bind.annotation.*; ...@@ -14,6 +18,7 @@ import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List; import java.util.List;
/** /**
...@@ -54,12 +59,20 @@ public class CbProjectRecordController extends BaseController { ...@@ -54,12 +59,20 @@ public class CbProjectRecordController extends BaseController {
/** /**
* 根据项目文件导入数据 * 根据项目文件导入数据
*/ */
@PostMapping("/importData") @PostMapping("/importData/{projectId}")
public R<Void> importData(@Validated @RequestBody ImportCbProjectDataBo importDataBo) { public R<Void> importData(@NotNull(message = "项目ID不能为空") @PathVariable Long projectId) throws Exception {
baseService.importData(importDataBo); baseService.importData(projectId);
return R.ok("已开始解析成本数据,过程需3~10分钟,稍后可到项目列表查看导入结果"); return R.ok("已开始解析成本数据,过程需3~10分钟,稍后可到项目列表查看导入结果");
} }
/**
* 获取项目台账列表
*/
@GetMapping("/getProjectList")
public TableDataInfo<ProjectRecordSearchVo> getProjectList(CbProjectSearchBo searchBo, PageQuery pageQuery) {
return baseService.getProjectList(searchBo, pageQuery);
}
/** /**
* 修改项目信息 * 修改项目信息
*/ */
...@@ -68,14 +81,21 @@ public class CbProjectRecordController extends BaseController { ...@@ -68,14 +81,21 @@ public class CbProjectRecordController extends BaseController {
return toAjax(baseService.editProjectInfo(editBo)); return toAjax(baseService.editProjectInfo(editBo));
} }
///** /**
// * 获取项目台账列表 * 获取新阶段项目可选成本阶段
// */ */
//@GetMapping("/getProjectList") @GetMapping("/getProjectAvailableCbStage/{relatedId}")
//public R<List<CbProjectRecord>> getProjectList() { public R<List<Integer>> getProjectAvailableCbStage(@NotNull(message = "关联ID不能为空") @PathVariable Long relatedId) {
// List<CbProjectRecord> projectList = baseService.getProjectList(); return R.ok(baseService.getProjectAvailableCbStage(relatedId));
// return R.ok(projectList); }
//}
/**
* 新增新阶段项目
*/
@PostMapping("/addNewStageProject")
public R<CbProjectRecord> addNewStageProject(@Validated @RequestBody AddNewCbProjectBo newProjectBo) {
return R.ok(baseService.addNewStageProject(newProjectBo));
}
/** /**
* 获取草稿弹窗列表 * 获取草稿弹窗列表
...@@ -89,5 +109,12 @@ public class CbProjectRecordController extends BaseController { ...@@ -89,5 +109,12 @@ public class CbProjectRecordController extends BaseController {
return R.ok(draftList); return R.ok(draftList);
} }
/**
* 删除草稿
*/
@DeleteMapping("/deleteDraft/{projectId}")
public R<Void> deleteDraft(@NotNull(message = "项目ID不能为空") @PathVariable Long projectId) {
return toAjax(baseService.deleteDraft(projectId));
}
} }
...@@ -32,7 +32,7 @@ public class CbProjectFile extends BaseEntity implements Serializable { ...@@ -32,7 +32,7 @@ public class CbProjectFile extends BaseEntity implements Serializable {
*/ */
private Integer cbStage; private Integer cbStage;
/** /**
* 成本类型(0:直接费成本、1:工料汇总、2:措施项目、3:其他项目、4:现场经费、5:成本汇总) * 成本类型(0:直接费成本、1:工料汇总、2:措施项目、3:其他项目、4:现场经费、5:成本汇总)
*/ */
private Integer cbType; private Integer cbType;
/** /**
...@@ -56,7 +56,7 @@ public class CbProjectFile extends BaseEntity implements Serializable { ...@@ -56,7 +56,7 @@ public class CbProjectFile extends BaseEntity implements Serializable {
*/ */
private String failRemark; private String failRemark;
/** /**
* 删除状态(0:否、2:是) * 删除状态(0:否、1:待删除、2:是)
*/ */
@TableLogic(value = "0", delval = "2") @TableLogic(value = "0", delval = "2")
private Integer delFlag; private Integer delFlag;
......
package com.dsk.cscec.domain.bo; package com.dsk.cscec.domain.bo;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
/** /**
* @author sxk * @author sxk
* @date 2024.02.07 * @date 2024.02.19
* @time 11:28 * @time 14:22
*/ */
@EqualsAndHashCode(callSuper = true)
@Data @Data
public class ImportCbProjectDataBo { public class AddNewCbProjectBo extends EditProjectInfoBo {
/** /**
* 项目ID * 关联ID(关联多个阶段)
*/ */
@NotNull(message = "项目ID不能为空") @NotNull(message = "关联ID不能为空")
private Long projectId; private Long relatedId;
/** /**
* 成本阶段(0:标前成本、1:标后成本、2:转固成本) * 成本阶段(0:标前成本、1:标后成本、2:转固成本)
*/ */
......
...@@ -12,11 +12,18 @@ import javax.validation.constraints.NotNull; ...@@ -12,11 +12,18 @@ import javax.validation.constraints.NotNull;
*/ */
@Data @Data
public class AddProjectFileUploadBo { public class AddProjectFileUploadBo {
/**
* 文件
*/
private MultipartFile file; private MultipartFile file;
/**
* 项目ID
*/
@NotNull(message = "项目ID不能为空") @NotNull(message = "项目ID不能为空")
private Long projectId; private Long projectId;
@NotNull(message = "成本阶段不能为空") /**
private Integer cbStage; * 成本类型
*/
@NotNull(message = "成本类型不能为空") @NotNull(message = "成本类型不能为空")
private Integer cbType; private Integer cbType;
} }
...@@ -2,23 +2,27 @@ package com.dsk.cscec.domain.bo; ...@@ -2,23 +2,27 @@ package com.dsk.cscec.domain.bo;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotNull;
/** /**
* @author sxk * @author sxk
* @date 2024.02.06 * @date 2024.02.18
* @time 14:17 * @time 15:04
*/ */
@Data @Data
public class QueryProjectFileUploadDetailBo { public class CbProjectSearchBo {
/**
* 项目名称
*/
private String projectName;
/** /**
* 项目ID * IPM项目编码
*/ */
@NotNull(message = "项目ID不能为空") private String ipmProjectNo;
private Long projectId;
/** /**
* 成本阶段(0:标前成本、1:标后成本、2:转固成本) * 成本阶段(0:标前成本、1:标后成本、2:转固成本)
*/ */
@NotNull(message = "成本阶段不能为空")
private Integer cbStage; private Integer cbStage;
/**
* 项目文件状态(1:解析中、2:解析成功、3:解析失败)
*/
private Integer projectFileStatus;
} }
...@@ -33,8 +33,4 @@ public class EditProjectInfoBo { ...@@ -33,8 +33,4 @@ public class EditProjectInfoBo {
* 文件名称 * 文件名称
*/ */
private String projectFileName; private String projectFileName;
/**
* 成本阶段(0:标前成本、1:标后成本、2:转固成本)
*/
private Integer cbStage;
} }
package com.dsk.cscec.domain.vo;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* @Author lcl
* @Data 2024/2/19 9:42
*/
@Data
public class CbGainLossAnalysisListVo implements Serializable {
private Long id;
/**
* 名称
*/
private String cbName;
/**
* 招标控制价(招标控制价合价)
*/
private String tenderSumPrice;
/**
* 招标控制价(不含税招标合价)
*/
private String taxExcludeTenderSumPrice;
/**
* 招标控制价(含税招标合价)
*/
private String taxIncludeTenderSumPrice;
/**
* 投标报价(投标报价合价)
*/
private String bidSumPrice;
/**
* 投标报价(不含税投标合价)
*/
private String taxExcludeBidSumPrice;
/**
* 投标报价(含税投标合价)
*/
private String taxIncludebBidSumPrice;
/**
* 成本汇总(不含税成本合价)
*/
private String taxExclusiveTotal;
/**
* 成本汇总(成本税金合价)
*/
private String cbTaxesTotal;
/**
* 成本汇总(含税成本合价)
*/
private String taxInclusiveTotal;
/**
* 造价指标(招标控制价)
*/
private String costTender;
/**
* 造价指标(投标报价)
*/
private String costBid;
/**
* 造价指标(成本)
*/
private String costExpense;
/**
* 含税成本占比
*/
private String taxInclusiveExpenseProportion;
/**
* 招标控制价(含税合价偏差)
*/
private String tenderSumPriceDeviation;
/**
* 招标控制价(含税盈亏率)
*/
private String tenderProfitLossRatio;
/**
* 投标报价(含税合价偏差)
*/
private String bidSumPriceDeviation;
/**
* 投标报价(含税盈亏率)
*/
private String bidProfitLossRatio;
/**
* 实际成本费用(本月费用(含税))
*/
private String taxInclusiveExpense;
/**
* 实际成本费用(本月费用(不含税))
*/
private String taxExclusiveExpense;
/**
* 实际成本费用(截至本月费用(含税))
*/
private String sumTaxInclusiveExpense;
/**
* 实际成本费用(截至本月费用(不含税))
*/
private String sumTaxExclusiveExpense;
private List<CbGainLossAnalysisListVo> children;
}
package com.dsk.cscec.domain.vo;
import lombok.Data;
import java.util.Date;
/**
* @author sxk
* @date 2024.02.18
* @time 15:18
*/
@Data
public class ProjectRecordDataVo {
/**
* 项目文件状态(1:解析中、2:解析成功、3:解析失败)
*/
private Integer projectFileStatus;
/**
* 成本阶段(0:标前成本、1:标后成本、2:转固成本)
*/
private Integer cbStage;
/**
* 更新者
*/
private String updateBy;
/**
* 更新时间
*/
private Date updateTime;
}
package com.dsk.cscec.domain.vo;
import lombok.Data;
import java.util.List;
/**
* @author sxk
* @date 2024.02.18
* @time 15:08
*/
@Data
public class ProjectRecordSearchVo {
/**
* 项目ID
*/
private Long id;
/**
* 项目名称
*/
private String projectName;
/**
* IPM项目编码
*/
private String ipmProjectNo;
/**
* 文件名称
*/
private String projectFileName;
/**
* 项目数据
*/
private List<ProjectRecordDataVo> dataVoList;
}
package com.dsk.cscec.mapper; 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.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dsk.cscec.domain.CbProjectRecord; import com.dsk.cscec.domain.CbProjectRecord;
import com.dsk.cscec.domain.vo.ProjectRecordSearchVo;
/** /**
* 项目台账表(CbProjectRecord)表数据库访问层 * 项目台账表(CbProjectRecord)表数据库访问层
...@@ -10,6 +13,10 @@ import com.dsk.cscec.domain.CbProjectRecord; ...@@ -10,6 +13,10 @@ import com.dsk.cscec.domain.CbProjectRecord;
* @since 2024-02-05 11:37:49 * @since 2024-02-05 11:37:49
*/ */
public interface CbProjectRecordMapper extends BaseMapper<CbProjectRecord> { public interface CbProjectRecordMapper extends BaseMapper<CbProjectRecord> {
/**
* 获取项目台账列表
*/
Page<ProjectRecordSearchVo> selectPageProjectRecordList(Page<ProjectRecordSearchVo> build, QueryWrapper<CbProjectRecord> wrapper);
} }
...@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; ...@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsk.cscec.domain.CbSummary; import com.dsk.cscec.domain.CbSummary;
import com.dsk.cscec.domain.bo.CbSummaryActualListBo; import com.dsk.cscec.domain.bo.CbSummaryActualListBo;
import com.dsk.cscec.domain.bo.CbSummaryBo; import com.dsk.cscec.domain.bo.CbSummaryBo;
import com.dsk.cscec.domain.vo.CbGainLossAnalysisListVo;
import com.dsk.cscec.domain.vo.CbSummaryActualListVo; import com.dsk.cscec.domain.vo.CbSummaryActualListVo;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
...@@ -53,4 +54,11 @@ public interface CbSummaryMapper extends BaseMapper<CbSummary> { ...@@ -53,4 +54,11 @@ public interface CbSummaryMapper extends BaseMapper<CbSummary> {
* @return * @return
*/ */
List<Map<String, Object>> selectByLevel(@Param("bo") CbSummaryBo bo); List<Map<String, Object>> selectByLevel(@Param("bo") CbSummaryBo bo);
CbGainLossAnalysisListVo getGainLossAnalysisById(@Param("id") Long id, @Param("expenseDate") String expenseDate);
List<CbGainLossAnalysisListVo> getGainLossAnalysisByParentId(@Param("id") Long parentId, @Param("expenseDate") String expenseDate);
} }
...@@ -3,7 +3,6 @@ package com.dsk.cscec.service; ...@@ -3,7 +3,6 @@ package com.dsk.cscec.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.dsk.cscec.domain.CbProjectFile; import com.dsk.cscec.domain.CbProjectFile;
import com.dsk.cscec.domain.bo.AddProjectFileUploadBo; import com.dsk.cscec.domain.bo.AddProjectFileUploadBo;
import com.dsk.cscec.domain.bo.QueryProjectFileUploadDetailBo;
import com.dsk.cscec.domain.vo.QueryProjectFileUploadDetailVo; import com.dsk.cscec.domain.vo.QueryProjectFileUploadDetailVo;
import com.dsk.system.domain.vo.SysOssVo; import com.dsk.system.domain.vo.SysOssVo;
...@@ -19,8 +18,9 @@ public interface CbProjectFileService extends IService<CbProjectFile> { ...@@ -19,8 +18,9 @@ public interface CbProjectFileService extends IService<CbProjectFile> {
* *
* @param fileUploadBo 上传信息 * @param fileUploadBo 上传信息
* @param oss oss信息 * @param oss oss信息
* @return 文件实体
*/ */
void addProjectFile(AddProjectFileUploadBo fileUploadBo, SysOssVo oss); CbProjectFile addProjectFile(AddProjectFileUploadBo fileUploadBo, SysOssVo oss);
/** /**
* 逻辑删除项目上传文件记录 * 逻辑删除项目上传文件记录
...@@ -33,9 +33,9 @@ public interface CbProjectFileService extends IService<CbProjectFile> { ...@@ -33,9 +33,9 @@ public interface CbProjectFileService extends IService<CbProjectFile> {
/** /**
* 获取项目文件上传详情 * 获取项目文件上传详情
* *
* @param uploadDetailBo 查询信息 * @param projectId 项目ID
* @return 文件列表 * @return 文件列表
*/ */
QueryProjectFileUploadDetailVo getProjectFileUploadDetail(QueryProjectFileUploadDetailBo uploadDetailBo); QueryProjectFileUploadDetailVo getProjectFileUploadDetail(Long projectId);
} }
package com.dsk.cscec.service; package com.dsk.cscec.service;
import com.baomidou.mybatisplus.extension.service.IService; 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.CbProjectRecord;
import com.dsk.cscec.domain.bo.AddCbProjectBo; 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.bo.EditProjectInfoBo;
import com.dsk.cscec.domain.bo.ImportCbProjectDataBo; import com.dsk.cscec.domain.vo.ProjectRecordSearchVo;
import java.util.List; import java.util.List;
...@@ -26,9 +30,18 @@ public interface CbProjectRecordService extends IService<CbProjectRecord> { ...@@ -26,9 +30,18 @@ public interface CbProjectRecordService extends IService<CbProjectRecord> {
/** /**
* 根据项目文件导入数据 * 根据项目文件导入数据
* *
* @param importDataBo 导入对象 * @param projectId 项目ID
*/ */
void importData(ImportCbProjectDataBo importDataBo); void importData(Long projectId) throws Exception;
/**
* 获取项目台账列表
*
* @param searchBo 查询条件
* @param pageQuery 分页对象
* @return 分页数据
*/
TableDataInfo<ProjectRecordSearchVo> getProjectList(CbProjectSearchBo searchBo, PageQuery pageQuery);
/** /**
* 修改项目信息 * 修改项目信息
...@@ -38,10 +51,34 @@ public interface CbProjectRecordService extends IService<CbProjectRecord> { ...@@ -38,10 +51,34 @@ public interface CbProjectRecordService extends IService<CbProjectRecord> {
*/ */
Integer editProjectInfo(EditProjectInfoBo editBo); Integer editProjectInfo(EditProjectInfoBo editBo);
/**
* 获取新阶段项目可选成本阶段
*
* @param relatedId 关联ID
* @return 可选成本阶段
*/
List<Integer> getProjectAvailableCbStage(Long relatedId);
/**
* 新增新阶段项目
*
* @param newProjectBo 新增对象
* @return 新增结果
*/
CbProjectRecord addNewStageProject(AddNewCbProjectBo newProjectBo);
/** /**
* 获取草稿弹窗列表 * 获取草稿弹窗列表
* *
* @return 草稿弹窗列表 * @return 草稿弹窗列表
*/ */
List<CbProjectRecord> getDraftDialogList(); List<CbProjectRecord> getDraftDialogList();
/**
* 删除草稿
*
* @param projectId 项目ID
* @return 删除结果
*/
Integer deleteDraft(Long projectId);
} }
package com.dsk.cscec.service;
import com.dsk.cscec.domain.bo.CbSummaryActualListBo;
import com.dsk.cscec.domain.vo.CbGainLossAnalysisListVo;
import java.util.List;
public interface ICbGainLossAnalysisService {
List<CbGainLossAnalysisListVo> getList(CbSummaryActualListBo bo);
}
package com.dsk.cscec.service.impl;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ObjectUtil;
import com.dsk.cscec.domain.CbSummary;
import com.dsk.cscec.domain.bo.CbSummaryActualListBo;
import com.dsk.cscec.domain.vo.CbGainLossAnalysisListVo;
import com.dsk.cscec.mapper.CbSummaryMapper;
import com.dsk.cscec.service.ICbGainLossAnalysisService;
import jodd.util.StringUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* @Author lcl
* @Data 2024/2/18 14:03
*/
@Slf4j
@Service
public class CbGainLossAnalysisServiceImpl implements ICbGainLossAnalysisService {
@Resource
private CbSummaryMapper cbSummaryMapper;
@Override
public List<CbGainLossAnalysisListVo> getList(CbSummaryActualListBo bo) {
Assert.notNull(bo.getId(),"id不能为空");
List<CbGainLossAnalysisListVo> resultList = new ArrayList<>();
if (StringUtil.isBlank(bo.getExpenseDate())) {
//默认当前月
bo.setExpenseDate(DatePattern.SIMPLE_MONTH_FORMAT.format(new Date()));
}
CbSummary cbSummary = cbSummaryMapper.selectById(bo.getId());
if (ObjectUtil.isEmpty(cbSummary)) {
return resultList;
}
List<CbGainLossAnalysisListVo> childrenList = cbSummaryMapper.getGainLossAnalysisByParentId(bo.getId(), bo.getExpenseDate());
if (0 == cbSummary.getLevel()) {
resultList = childrenList;
}else {
childrenList = getProjectSumList(bo);
CbGainLossAnalysisListVo cbGainLossAnalysisListVo = cbSummaryMapper.getGainLossAnalysisById(bo.getId(),bo.getExpenseDate());
cbGainLossAnalysisListVo.setChildren(childrenList);
resultList.add(cbGainLossAnalysisListVo);
}
return resultList;
}
/**
* 盈亏对比分析列表
*
*/
private List<CbGainLossAnalysisListVo> getProjectSumList(CbSummaryActualListBo bo) {
List<CbGainLossAnalysisListVo> childrenList = cbSummaryMapper.getGainLossAnalysisByParentId(bo.getId(), bo.getExpenseDate());
childrenList.forEach(children -> {
CbSummaryActualListBo childBo = new CbSummaryActualListBo();
childBo.setId(children.getId());
childBo.setExpenseDate(bo.getExpenseDate());
children.setChildren(getProjectSumList(childBo));
});
return childrenList;
}
}
...@@ -4,12 +4,10 @@ import cn.hutool.core.bean.BeanUtil; ...@@ -4,12 +4,10 @@ import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Assert;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsk.common.exception.ServiceException;
import com.dsk.cscec.constant.CbProjectConstants; import com.dsk.cscec.constant.CbProjectConstants;
import com.dsk.cscec.domain.CbProjectFile; import com.dsk.cscec.domain.CbProjectFile;
import com.dsk.cscec.domain.CbProjectRecord; import com.dsk.cscec.domain.CbProjectRecord;
import com.dsk.cscec.domain.bo.AddProjectFileUploadBo; import com.dsk.cscec.domain.bo.AddProjectFileUploadBo;
import com.dsk.cscec.domain.bo.QueryProjectFileUploadDetailBo;
import com.dsk.cscec.domain.vo.QueryProjectFileUploadDetailVo; import com.dsk.cscec.domain.vo.QueryProjectFileUploadDetailVo;
import com.dsk.cscec.mapper.CbProjectFileMapper; import com.dsk.cscec.mapper.CbProjectFileMapper;
import com.dsk.cscec.mapper.CbProjectRecordMapper; import com.dsk.cscec.mapper.CbProjectRecordMapper;
...@@ -40,22 +38,23 @@ public class CbProjectFileServiceImpl extends ServiceImpl<CbProjectFileMapper, C ...@@ -40,22 +38,23 @@ public class CbProjectFileServiceImpl extends ServiceImpl<CbProjectFileMapper, C
* *
* @param fileUploadBo 上传信息 * @param fileUploadBo 上传信息
* @param oss oss信息 * @param oss oss信息
* @return
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void addProjectFile(AddProjectFileUploadBo fileUploadBo, SysOssVo oss) { public CbProjectFile addProjectFile(AddProjectFileUploadBo fileUploadBo, SysOssVo oss) {
//校验项目是否存在 //校验项目是否存在
this.checkProjectExist(fileUploadBo.getProjectId()); CbProjectRecord projectRecord = this.checkProjectExist(fileUploadBo.getProjectId());
CbProjectFile projectFile = BeanUtil.toBean(fileUploadBo, CbProjectFile.class); CbProjectFile projectFile = BeanUtil.toBean(fileUploadBo, CbProjectFile.class);
projectFile.setCbStage(projectRecord.getCbStage());
projectFile.setFileName(oss.getOriginalName()); projectFile.setFileName(oss.getOriginalName());
projectFile.setFileOssId(oss.getOssId()); projectFile.setFileOssId(oss.getOssId());
projectFile.setFileOssUrl(oss.getUrl()); projectFile.setFileOssUrl(oss.getUrl());
//项目文件状态:准备中 //项目文件状态:准备中
projectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PREPARING); projectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PREPARING);
//删除状态:未删除
projectFile.setDelFlag(CbProjectConstants.DELETE_FLAG_EXIST);
baseMapper.insert(projectFile); baseMapper.insert(projectFile);
return projectFile;
} }
/** /**
...@@ -68,26 +67,24 @@ public class CbProjectFileServiceImpl extends ServiceImpl<CbProjectFileMapper, C ...@@ -68,26 +67,24 @@ public class CbProjectFileServiceImpl extends ServiceImpl<CbProjectFileMapper, C
public Integer deleteProjectFile(Long fileId) { public Integer deleteProjectFile(Long fileId) {
CbProjectFile projectFile = baseMapper.selectById(fileId); CbProjectFile projectFile = baseMapper.selectById(fileId);
Assert.notNull(projectFile, "该文件不存在"); Assert.notNull(projectFile, "该文件不存在");
projectFile.setDelFlag(CbProjectConstants.DELETE_FLAG_NOT_EXIST); return baseMapper.deleteById(projectFile);
return baseMapper.updateById(projectFile);
} }
/** /**
* 获取项目文件上传详情 * 获取项目文件上传详情
* *
* @param uploadDetailBo 查询信息 * @param projectId 项目ID
* @return 文件列表 * @return 文件列表
*/ */
@Override @Override
public QueryProjectFileUploadDetailVo getProjectFileUploadDetail(QueryProjectFileUploadDetailBo uploadDetailBo) { public QueryProjectFileUploadDetailVo getProjectFileUploadDetail(Long projectId) {
Long projectId = uploadDetailBo.getProjectId();
//校验项目是否存在 //校验项目是否存在
this.checkProjectExist(projectId); this.checkProjectExist(projectId);
List<CbProjectFile> projectFileList = baseMapper.selectList(new LambdaQueryWrapper<CbProjectFile>() List<CbProjectFile> projectFileList = baseMapper.selectList(new LambdaQueryWrapper<CbProjectFile>()
.eq(CbProjectFile::getProjectId, projectId) .eq(CbProjectFile::getProjectId, projectId)
//成本阶段 //成本阶段
.eq(CbProjectFile::getCbStage, uploadDetailBo.getCbStage()) //.eq(CbProjectFile::getCbStage, uploadDetailBo.getCbStage())
//删除状态:否 //删除状态:否
.eq(CbProjectFile::getDelFlag, CbProjectConstants.DELETE_FLAG_EXIST)); .eq(CbProjectFile::getDelFlag, CbProjectConstants.DELETE_FLAG_EXIST));
...@@ -127,13 +124,12 @@ public class CbProjectFileServiceImpl extends ServiceImpl<CbProjectFileMapper, C ...@@ -127,13 +124,12 @@ public class CbProjectFileServiceImpl extends ServiceImpl<CbProjectFileMapper, C
* 校验项目是否存在 * 校验项目是否存在
* *
* @param projectId 项目ID * @param projectId 项目ID
* @return 项目实体
*/ */
private void checkProjectExist(Long projectId) { private CbProjectRecord checkProjectExist(Long projectId) {
//校验项目是否存在 //校验项目是否存在
if (!projectRecordMapper.exists(new LambdaQueryWrapper<CbProjectRecord>() CbProjectRecord projectRecord = projectRecordMapper.selectById(projectId);
.eq(CbProjectRecord::getId, projectId) Assert.notNull(projectRecord, "该项目不存在");
.eq(CbProjectRecord::getDelFlag, CbProjectConstants.DELETE_FLAG_EXIST))) { return projectRecord;
throw new ServiceException("该项目不存在");
}
} }
} }
<?xml version="1.0" encoding="UTF-8"?> <?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"> <!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"> <mapper namespace="com.dsk.cscec.mapper.CbProjectRecordMapper">
<!--获取项目台账列表-->
<select id="selectPageProjectRecordList" resultType="com.dsk.cscec.domain.vo.ProjectRecordSearchVo">
select cpr.id,
cpr.project_name,
cpr.ipm_project_no,
cpr.project_file_name
from cb_project_record cpr
${ew.getCustomSqlSegment};
</select>
</mapper> </mapper>
\ No newline at end of file
...@@ -107,5 +107,31 @@ ...@@ -107,5 +107,31 @@
order by csu.sort order by csu.sort
</select> </select>
<select id="getGainLossAnalysisById" resultType="com.dsk.cscec.domain.vo.CbGainLossAnalysisListVo">
select csu.id, csu.cb_name, csu.tax_exclusive_total, csu.cb_taxes_total, csu.tax_inclusive_total, csa.tax_inclusive_expense, csa.tax_exclusive_expense,
sum(cde.tender_control_sum_price) tenderSumPrice, sum(cde.exclude_tax_cb_sum_price) taxExcludeTenderSumPrice, sum(cde.include_tax_cb_sum_price) taxIncludeTenderSumPrice,
sum(csa1.tax_inclusive_expense) sumTaxInclusiveExpense, sum(csa1.tax_exclusive_expense) sumTaxExclusiveExpense
from cb_summary csu
left join cb_summary_actual csa on (csu.id = csa.cb_summary_id and csa.expense_date = #{expenseDate} AND csa.del_flag = 0)
left join cb_summary_actual csa1 on (csu.id = csa1.cb_summary_id and csa1.expense_date &lt;= #{expenseDate} AND csa1.del_flag = 0)
left join cb_direct_expense cde on (csu.project_id = cde.project_id and csu.cb_stage = cde.cb_stage and cde.del_flag = 0)
where csu.id = #{id} and csu.del_flag = 0
group by csu.id
order by csu.sort
</select>
<select id="getGainLossAnalysisByParentId" resultType="com.dsk.cscec.domain.vo.CbGainLossAnalysisListVo">
select csu.id, csu.cb_name, csu.tax_exclusive_total, csu.cb_taxes_total, csu.tax_inclusive_total, csa.tax_inclusive_expense, csa.tax_exclusive_expense,
sum(cde.tender_control_sum_price) tenderSumPrice, sum(cde.exclude_tax_cb_sum_price) taxExcludeTenderSumPrice, sum(cde.include_tax_cb_sum_price) taxIncludeTenderSumPrice,
sum(csa1.tax_inclusive_expense) sumTaxInclusiveExpense, sum(csa1.tax_exclusive_expense) sumTaxExclusiveExpense
from cb_summary csu
left join cb_summary_actual csa on (csu.id = csa.cb_summary_id and csa.expense_date = #{expenseDate} AND csa.del_flag = 0)
left join cb_summary_actual csa1 on (csu.id = csa1.cb_summary_id and csa1.expense_date &lt;= #{expenseDate} AND csa1.del_flag = 0)
left join cb_direct_expense cde on (csu.project_id = cde.project_id and csu.cb_stage = cde.cb_stage and cde.del_flag = 0)
where csu.parent_id = #{parentId} and csu.del_flag = 0
group by csu.id
order by csu.sort
</select>
</mapper> </mapper>
...@@ -128,6 +128,7 @@ public class SysOssServiceImpl implements ISysOssService, OssService { ...@@ -128,6 +128,7 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
public SysOssVo upload(MultipartFile file) throws UnsupportedEncodingException { public SysOssVo upload(MultipartFile file) throws UnsupportedEncodingException {
String originalfileName = file.getOriginalFilename(); String originalfileName = file.getOriginalFilename();
//文件名解码防止上传中文名文件导致的文件名乱码 //文件名解码防止上传中文名文件导致的文件名乱码
assert originalfileName != null;
originalfileName = URLDecoder.decode(originalfileName,"UTF-8"); originalfileName = URLDecoder.decode(originalfileName,"UTF-8");
String suffix = StringUtils.substring(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length()); String suffix = StringUtils.substring(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length());
OssClient storage = OssFactory.instance(); OssClient storage = OssFactory.instance();
......
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