Commit bdfe36c4 authored by danfuman's avatar danfuman

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 49841d11 75819ccd
...@@ -186,16 +186,14 @@ tenant: ...@@ -186,16 +186,14 @@ tenant:
- d_customer_tax_certificate - d_customer_tax_certificate
- f_supplier_limited - f_supplier_limited
- f_ads_bsi_kpi_proj_two - f_ads_bsi_kpi_proj_two
- cb_account_summary - cb_summary
- cb_account_summary_actual - cb_summary_actual
- cb_cost_measure - cb_cost_measure
- cb_cost_measure_actual - cb_cost_measure_actual
- cb_direct_expense - cb_direct_expense
- cb_project_expense_summary - cb_project_expense_summary
- cb_project_file - cb_project_file
- cb_project_record - cb_project_record
- cb_project_summary
- cb_project_summary_actual
- cb_quantity_summary - cb_quantity_summary
- cb_quantity_summary_actual - cb_quantity_summary_actual
- cb_scene_expense_children - cb_scene_expense_children
......
package com.dsk.component;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.dsk.common.excel.ExcelUtils;
import com.dsk.common.exception.ServiceException;
import com.dsk.cscec.constant.CbProjectConstants;
import com.dsk.cscec.domain.CbProjectFile;
import com.dsk.cscec.domain.CbQuantitySummary;
import com.dsk.cscec.domain.bo.CbProjectBaseBo;
import com.dsk.cscec.service.CbProjectFileService;
import com.dsk.cscec.service.ICbQuantitySummaryService;
import com.dsk.oss.factory.OssFactory;
import com.dsk.system.domain.vo.SysOssVo;
import com.dsk.system.service.ISysOssService;
import org.apache.el.stream.Stream;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import org.springframework.transaction.support.TransactionTemplate;
import org.springframework.util.ObjectUtils;
import javax.annotation.Resource;
import java.io.InputStream;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* 数据解析组件
*
* @Author lcl
* @Data 2024/2/7 17:43
*/
@Component
public class DataAnalysisComponent {
@Autowired
private ICbQuantitySummaryService quantitySummaryService;
@Autowired
private CbProjectFileService projectFileService;
@Autowired
private ISysOssService ossService;
@Resource
private TransactionTemplate transactionTemplate;
/**
* 工料汇总数据解析
*/
@Async
public void quantitySummaryDataAnalysis(CbProjectBaseBo bo) throws Exception {
//查询工料汇总导入文件
List<CbProjectFile> fileList = projectFileService.list(Wrappers.<CbProjectFile>lambdaQuery()
.eq(CbProjectFile::getProjectId, bo.getProjectId())
.eq(CbProjectFile::getCbType, CbProjectConstants.CB_TYPE_QUANTITY_SUMMARY)
.eq(CbProjectFile::getCbStage, bo.getCbStage())
.in(CbProjectFile::getFileParseStatus, Arrays.asList(1, 3)));
if (ObjectUtils.isEmpty(fileList)) return;
//文件处理
for (CbProjectFile file : fileList) {
if (file.getDelFlag() == 0) {
//文件下载
InputStream inputStream = ossService.downFileIO(file.getFileOssId());
if (ObjectUtil.isNull(inputStream)) {
file.setFileParseStatus(3);
file.setFailRemark("文件数据不存在");
projectFileService.updateById(file);
break;
}
//解析数据
List<CbQuantitySummary> importList = new ExcelUtils<>(CbQuantitySummary.class).importExcelAllSheet(inputStream, 1);
if (importList.isEmpty()) {
file.setFileParseStatus(3);
file.setFailRemark("表格中不存在待导入数据!");
projectFileService.updateById(file);
break;
}
List<CbQuantitySummary> quantitySummaryList = importList.stream().parallel()
.filter(item -> !ObjectUtils.isEmpty(item.getCbName()))
.peek(item -> {
item.setProjectId(1L);
item.setCbStage(0);
item.setCbProjectFileId(1L);
}).collect(Collectors.toList());
if (quantitySummaryList.isEmpty()) {
throw new ServiceException("表格中不存在有效数据数据!");
}
transactionTemplate.execute(status -> {
try {
//分批次插入
if (quantitySummaryList.size() > 1000) {
int index = 0;
int sum = quantitySummaryList.size();
while (index < sum) {
List<CbQuantitySummary> divideList = quantitySummaryList.subList(index, Math.max((index + 1) * 1000, sum));
boolean b = quantitySummaryService.saveBatch(divideList);
if (!b) {
throw new ServiceException("数据插入失败!");
}
index += 1000;
}
} else {
boolean b = quantitySummaryService.saveBatch(quantitySummaryList);
if (!b) {
throw new ServiceException("数据插入失败!");
}
}
file.setFileParseStatus(2);
boolean b = projectFileService.updateById(file);
if (!b) {
throw new ServiceException("文件状态更新失败!");
}
} catch (Exception e) {
status.setRollbackOnly();
file.setFileParseStatus(3);
file.setFailRemark(e.getMessage());
projectFileService.updateById(file);
}
return Boolean.TRUE;
});
} else {
quantitySummaryService.remove(Wrappers.<CbQuantitySummary>lambdaQuery().eq(CbQuantitySummary::getCbProjectFileId, file.getId()));
projectFileService.removeById(file);
}
}
}
}
...@@ -21,25 +21,21 @@ public interface CbProjectConstants { ...@@ -21,25 +21,21 @@ public interface CbProjectConstants {
*/ */
Integer CB_STAGE_TO_SOLID = 2; Integer CB_STAGE_TO_SOLID = 2;
/** /**
* 项目文件状态:未上传 * 项目文件状态:准备中
*/ */
Integer PROJECT_FILE_STATUS_NOT_UPLOAD = 0; Integer PROJECT_FILE_STATUS_PREPARING = 0;
/**
* 项目文件状态:待解析
*/
Integer PROJECT_FILE_STATUS_NOT_PARSE = 1;
/** /**
* 项目文件状态:解析中 * 项目文件状态:解析中
*/ */
Integer PROJECT_FILE_STATUS_PARSING = 2; Integer PROJECT_FILE_STATUS_PARSING = 1;
/** /**
* 项目文件状态:解析成功 * 项目文件状态:解析成功
*/ */
Integer PROJECT_FILE_STATUS_PARSE_SUCCESS = 3; Integer PROJECT_FILE_STATUS_PARSE_SUCCESS = 2;
/** /**
* 项目文件状态:解析失败 * 项目文件状态:解析失败
*/ */
Integer PROJECT_FILE_STATUS_PARSE_FAIL = 4; Integer PROJECT_FILE_STATUS_PARSE_FAIL = 3;
/** /**
* 删除状态:未删除 * 删除状态:未删除
*/ */
...@@ -57,34 +53,36 @@ public interface CbProjectConstants { ...@@ -57,34 +53,36 @@ public interface CbProjectConstants {
*/ */
Integer NOT_GET_PROJECT_DETAIL = 1; Integer NOT_GET_PROJECT_DETAIL = 1;
//成本类型(0:直接费成本、1:工料汇总、2:措施项目、3:其他项目、4:现场经费、5:成本汇总、6:未确定 //成本类型(0:直接费成本、1:工料汇总、2:措施项目、3:其他项目、4:现场经费、5:成本汇总)
/** /**
* 成本类型:直接费成本 * 成本类型:直接费成本
*/ */
Integer CB_TYPE_DIRECT_EXPENSE = 0; Integer CB_TYPE_DIRECT_EXPENSE = 0;
String CB_TYPE_DIRECT_EXPENSE_NAME = "直接费成本";
/** /**
* 成本类型:工料汇总 * 成本类型:工料汇总
*/ */
Integer CB_TYPE_QUANTITY_SUMMARY = 1; Integer CB_TYPE_QUANTITY_SUMMARY = 1;
String CB_TYPE_QUANTITY_SUMMARY_NAME = "工料汇总";
/** /**
* 成本类型:措施项目 * 成本类型:措施项目
*/ */
Integer CB_TYPE_MEASURE_PROJECT = 2; Integer CB_TYPE_MEASURE_PROJECT = 2;
String CB_TYPE_MEASURE_PROJECT_NAME = "措施项目";
/** /**
* 成本类型:其他项目 * 成本类型:其他项目
*/ */
Integer CB_TYPE_OTHER_PROJECT = 3; Integer CB_TYPE_OTHER_PROJECT = 3;
String CB_TYPE_OTHER_PROJECT_NAME = "其他项目";
/** /**
* 成本类型:现场经费 * 成本类型:现场经费
*/ */
Integer CB_TYPE_SCENE_EXPENSE = 4; Integer CB_TYPE_SCENE_EXPENSE = 4;
String CB_TYPE_SCENE_EXPENSE_NAME = "现场经费";
/** /**
* 成本类型:成本汇总 * 成本类型:成本汇总
*/ */
Integer CB_TYPE_ACCOUNT_SUMMARY = 5; Integer CB_TYPE_SUMMARY = 5;
/** String CB_TYPE_SUMMARY_NAME = "成本汇总";
* 成本类型:未确定
*/
Integer CB_TYPE_NOT_CONFIRM = 6;
} }
package com.dsk.cscec.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaIgnore;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.excel.EasyExcel;
import com.dsk.common.annotation.Log;
import com.dsk.common.constant.GlobalConstants;
import com.dsk.common.core.domain.PageQuery;
import com.dsk.common.core.domain.R;
import com.dsk.common.core.domain.entity.SysDictData;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.common.enums.BusinessType;
import com.dsk.common.excel.ExcelResult;
import com.dsk.common.helper.LoginHelper;
import com.dsk.common.utils.poi.ExcelUtil;
import com.dsk.common.utils.redis.RedisUtils;
import com.dsk.cscec.domain.CbCostMeasure;
import com.dsk.cscec.domain.bo.CbCostMeasureActualBo;
import com.dsk.cscec.domain.bo.CbCostMeasureActualPushBo;
import com.dsk.cscec.domain.bo.CbCostMeasureActualSaveBo;
import com.dsk.cscec.domain.vo.CbCostMeasureActualVo;
import com.dsk.cscec.domain.vo.CbCostMeasuresImportVo;
import com.dsk.cscec.domain.vo.CbCostMeasuresItemVo;
import com.dsk.cscec.listener.ProjectCostMeasureImportListener;
import com.dsk.cscec.service.ICbCostMeasureService;
import com.dsk.system.domain.vo.SysUserImportVo;
import com.dsk.system.listener.SysUserImportListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* 措施费导入
*
* @author tanyang
* @create 2024-02-04 11:44
**/
@RequestMapping("/cb/cost/measures")
@RestController
public class CbCostMeasureController {
@Autowired
private ICbCostMeasureService cbCostMeasureService;
/**
* 措施费一级大类
* 根据项目查询措施费一级大类
*
* @param projectId 项目ID
* @return {@link R}<{@link List}<{@link Map}<{@link String}, {@link Object}>>>
*/
@SaIgnore
@GetMapping(value = "/type/{projectId}")
public R<List<Map<String, Object>>> dictType(@PathVariable Long projectId) {
List<Map<String, Object>> data = cbCostMeasureService.listByLevel(projectId,0);
if (ObjectUtil.isNull(data)) {
data = new ArrayList<>();
}
return R.ok(data);
}
/**
* 措施费列表
* 查询措施费列表
*
* @param cbCostMeasure CB成本衡量标准
* @return {@link R}<{@link List}<{@link CbCostMeasureActualVo}>>
*/
// @SaCheckPermission("cb:costmeasures:list")
@SaIgnore
@GetMapping("/list")
public R<List<CbCostMeasureActualVo>> list(CbCostMeasureActualBo cbCostMeasure) {
List<CbCostMeasureActualVo> data= cbCostMeasureService.selectDataList(cbCostMeasure);
if (ObjectUtil.isNull(data)) {
data = new ArrayList<>();
}
return R.ok(data);
}
/**
* 批量保存或修改每月措施费
*/
// @SaCheckPermission("cb:costmeasures:actual:saveBatch")
@SaIgnore
@PostMapping("/saveBatch")
public R saveBatch(@RequestBody List<CbCostMeasureActualSaveBo> boList) {
Assert.notEmpty(boList,"措施费填写信息不能为空!");
cbCostMeasureService.saveBatchCostMeasureActual(boList);
return R.ok();
}
/**
* 推送工程量
* 措施费-推送每月工程量
*
* @param pushBo 推送BO
* @return {@link R}<{@link List}<{@link CbCostMeasureActualVo}>>
*/
// @SaCheckPermission("cb:costmeasures:actual:push")
@SaIgnore
@PostMapping("/push/project/volume")
public R pushProjectVolume(@RequestBody CbCostMeasureActualPushBo pushBo) {
Assert.notNull(pushBo,"推送工程量信息不能为空!");
cbCostMeasureService.pushCostMeasureActual(pushBo);
return R.ok();
}
/**
* 获取批量措施费列表
*/
@Log(title = "措施费导出", businessType = BusinessType.EXPORT)
// @SaCheckPermission("system:user:export")
@PostMapping("/export")
public void exportProjectMeasures(HttpServletResponse response) {
String BATCH_IMPORT_FAIL_USERS = GlobalConstants.GLOBAL_REDIS_KEY + "batch_import_fail_users";
String key = BATCH_IMPORT_FAIL_USERS + LoginHelper.getUserId();
ExcelUtil.exportExcel(RedisUtils.getCacheList(key), "措施费", CbCostMeasuresImportVo.class, response);
RedisUtils.deleteObject(key);
}
/**
* 导入数据
*
* @param file 导入文件
* @param projectId 项目id
*/
// @SaIgnore
@Log(title = "措施费导入", businessType = BusinessType.IMPORT)
// @SaCheckPermission("system:user:import")
@PostMapping(value = "/importData", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public R<Void> importData(@RequestPart("file") MultipartFile file, Long projectId) throws Exception {
cbCostMeasureService.importExcelData(file,projectId);
return R.ok();
}
/**
* 导入数据
*
* @param file 导入文件
* @param projectId 项目id
*/
@SaIgnore
@Log(title = "措施费汇总导入", businessType = BusinessType.IMPORT)
// @SaCheckPermission("system:user:import")
@PostMapping(value = "/summary/importData", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public R<Void> importSummaryData(@RequestPart("file") MultipartFile file, Long projectId) throws Exception {
Integer dataType=2;
cbCostMeasureService.importExcelSummaryData(file,projectId,dataType);
return R.ok();
}
public static void main(String[] args) throws FileNotFoundException {
List list =new ArrayList<>();
File file=new File("E:\\dingding\\202401\\导入表格\\措施费\\大型机械费.xlsx");
FileInputStream inputStream=new FileInputStream(file);
ExcelResult<CbCostMeasuresImportVo> result = ExcelUtil.importExcel(inputStream, CbCostMeasuresImportVo.class, new ProjectCostMeasureImportListener(1L,1));
String analysis = result.getAnalysis();
List<CbCostMeasuresImportVo> list1 = result.getList();
System.out.println(">>>>>>>>>>"+analysis);
// System.out.println(JSONUtil.toJsonStr(list));
}
}
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.lang.Assert;
import com.dsk.common.annotation.Log;
import com.dsk.common.core.controller.BaseController;
import com.dsk.common.core.domain.R;
import com.dsk.common.enums.BusinessType;
import com.dsk.common.exception.ServiceException;
import com.dsk.cscec.domain.CbProjectFile;
import com.dsk.cscec.domain.bo.AddProjectFileUploadBo;
import com.dsk.cscec.domain.vo.QueryProjectFileUploadDetailVo;
import com.dsk.cscec.service.CbProjectFileService; import com.dsk.cscec.service.CbProjectFileService;
import org.springframework.web.bind.annotation.RequestMapping; import com.dsk.system.domain.vo.SysOssVo;
import org.springframework.web.bind.annotation.RestController; import com.dsk.system.service.ISysOssService;
import org.springframework.http.MediaType;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.validation.constraints.NotNull;
import java.io.UnsupportedEncodingException;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
/** /**
* 项目成本文件表(CbProjectFile)表控制层 * 项目成本文件表(CbProjectFile)表控制层
...@@ -14,13 +32,54 @@ import javax.annotation.Resource; ...@@ -14,13 +32,54 @@ import javax.annotation.Resource;
*/ */
@RestController @RestController
@RequestMapping("cbProjectFile") @RequestMapping("cbProjectFile")
public class CbProjectFileController { public class CbProjectFileController extends BaseController {
/** /**
* 服务对象 * 服务对象
*/ */
@Resource @Resource
private CbProjectFileService baseService; private CbProjectFileService baseService;
@Resource
private ISysOssService iSysOssService;
/**
* 上传项目台账文件
*/
@Log(title = "项目台账上传OSS对象存储", businessType = BusinessType.INSERT)
@PostMapping(value = "/uploadCbProjectFile", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public R<Map<String, String>> uploadCbProjectFile(@Validated @ModelAttribute AddProjectFileUploadBo fileUploadBo) throws UnsupportedEncodingException {
MultipartFile file = fileUploadBo.getFile();
Assert.notNull(file, "上传文件不能为空");
SysOssVo oss = iSysOssService.upload(file);
//添加项目上传文件记录
CbProjectFile cbProjectFile;
try {
cbProjectFile = baseService.addProjectFile(fileUploadBo, oss);
} catch (ServiceException e) {
//删除oss中的文件
iSysOssService.deleteWithValidByIds(Collections.singletonList(oss.getOssId()), true);
throw e;
}
Map<String, String> map = new HashMap<>(2);
map.put("fileId", cbProjectFile.getId().toString());
map.put("fileName", oss.getOriginalName());
map.put("fileOssId", oss.getOssId().toString());
map.put("fileOssUrl", oss.getUrl());
return R.ok(map);
}
} /**
* 删除项目台账文件
*/
@DeleteMapping("/deleteCbProjectFile/{fileId}")
public R<Void> deleteCbProjectFile(@NotNull(message = "文件ID不能为空") @PathVariable Long fileId) {
return toAjax(baseService.deleteProjectFile(fileId));
}
/**
* 获取项目文件上传详情
*/
@GetMapping("/getProjectFileUploadDetail/{projectId}")
public R<QueryProjectFileUploadDetailVo> getProjectFileUploadDetail(@NotNull(message = "项目ID不能为空") @PathVariable Long projectId) {
return R.ok(baseService.getProjectFileUploadDetail(projectId));
}
}
\ No newline at end of file
package com.dsk.cscec.controller; package com.dsk.cscec.controller;
import cn.hutool.core.lang.Assert;
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.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.service.CbProjectRecordService; import com.dsk.cscec.service.CbProjectRecordService;
import com.dsk.cscec.service.IDProjectService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
/** /**
* 项目台账表(CbProjectRecord)表控制层 * 项目台账表(CbProjectRecord)表控制层
...@@ -13,12 +29,92 @@ import javax.annotation.Resource; ...@@ -13,12 +29,92 @@ import javax.annotation.Resource;
*/ */
@RestController @RestController
@RequestMapping("cbProjectRecord") @RequestMapping("cbProjectRecord")
public class CbProjectRecordController { public class CbProjectRecordController extends BaseController {
/** /**
* 服务对象 * 服务对象
*/ */
@Resource @Resource
private CbProjectRecordService baseService; private CbProjectRecordService baseService;
@Resource
private IDProjectService dProjectService;
/**
* 校验项目编码是否存在
*/
@GetMapping("/checkProjectCodeExist/{projectCode}")
public R<Boolean> checkProjectCodeExist(@NotBlank(message = "项目编码不能为空") @PathVariable String projectCode) {
return R.ok(dProjectService.checkProjectCodeExist(projectCode));
}
/**
* 新增项目
*/
@PostMapping("/addProject")
public R<CbProjectRecord> addProject(@Validated @RequestBody AddCbProjectBo addCbProjectBo) {
CbProjectRecord projectRecord = baseService.addProject(addCbProjectBo);
Assert.notNull(projectRecord, "新增项目失败,请联系管理员");
return R.ok(projectRecord);
}
/**
* 根据项目文件导入数据
*/
@PostMapping("/importData/{projectId}")
public R<Void> importData(@NotNull(message = "项目ID不能为空") @PathVariable Long projectId) throws Exception {
baseService.importData(projectId);
return R.ok("已开始解析成本数据,过程需3~10分钟,稍后可到项目列表查看导入结果");
}
/**
* 获取项目台账列表
*/
@GetMapping("/getProjectList")
public TableDataInfo<ProjectRecordSearchVo> getProjectList(CbProjectSearchBo searchBo, PageQuery pageQuery) {
return baseService.getProjectList(searchBo, pageQuery);
}
/**
* 修改项目信息
*/
@PutMapping("/editProjectInfo")
public R<Void> editProjectInfo(@Validated @RequestBody EditProjectInfoBo editBo) {
return toAjax(baseService.editProjectInfo(editBo));
}
/**
* 获取新阶段项目可选成本阶段
*/
@GetMapping("/getProjectAvailableCbStage/{relatedId}")
public R<List<Integer>> getProjectAvailableCbStage(@NotNull(message = "关联ID不能为空") @PathVariable Long relatedId) {
return R.ok(baseService.getProjectAvailableCbStage(relatedId));
}
/**
* 新增新阶段项目
*/
@PostMapping("/addNewStageProject")
public R<CbProjectRecord> addNewStageProject(@Validated @RequestBody AddNewCbProjectBo newProjectBo) {
return R.ok(baseService.addNewStageProject(newProjectBo));
}
/**
* 获取草稿弹窗列表
*/
@GetMapping("/getDraftDialogList")
public R<List<CbProjectRecord>> getDraftDialogList() {
List<CbProjectRecord> draftList = baseService.getDraftDialogList();
if (draftList.isEmpty()) {
return R.ok("暂无草稿记录");
}
return R.ok(draftList);
}
/**
* 删除草稿
*/
@DeleteMapping("/deleteDraft/{projectId}")
public R<Void> deleteDraft(@NotNull(message = "项目ID不能为空") @PathVariable Long projectId) {
return toAjax(baseService.deleteDraft(projectId));
}
} }
package com.dsk.cscec.controller; package com.dsk.cscec.controller;
import com.dsk.common.annotation.RepeatSubmit;
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.excel.ExcelUtils; import com.dsk.cscec.domain.CbQuantitySummaryActual;
import com.dsk.common.exception.ServiceException;
import com.dsk.cscec.domain.CbQuantitySummary;
import com.dsk.cscec.domain.bo.CbProjectBaseBo; import com.dsk.cscec.domain.bo.CbProjectBaseBo;
import com.dsk.cscec.domain.bo.CbQuantitySummaryListBo;
import com.dsk.cscec.domain.vo.CbQuantitySummaryListVo;
import com.dsk.cscec.service.ICbQuantitySummaryService; import com.dsk.cscec.service.ICbQuantitySummaryService;
import com.dsk.system.domain.vo.SysUserImportVo;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import sun.reflect.generics.tree.Tree;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.TreeMap;
import java.util.stream.Collectors;
/** /**
* 成本-工料汇总基本表(CbQuantitySummary)表控制层 * 成本-工料汇总基本表(CbQuantitySummary)表控制层
...@@ -35,10 +30,11 @@ public class CbQuantitySummaryController extends BaseController { ...@@ -35,10 +30,11 @@ public class CbQuantitySummaryController extends BaseController {
/** /**
* 工料汇总科目树 * 工料汇总科目树
*
* @return * @return
*/ */
@GetMapping(value = "/subjectTree") @GetMapping(value = "/subjectTree")
public R<Map<String, Object>> subjectTree(@PathVariable CbProjectBaseBo bo){ public R<Map<String, Object>> subjectTree(CbProjectBaseBo bo) {
return R.ok(baseService.subjectTree(bo)); return R.ok(baseService.subjectTree(bo));
} }
...@@ -46,30 +42,36 @@ public class CbQuantitySummaryController extends BaseController { ...@@ -46,30 +42,36 @@ public class CbQuantitySummaryController extends BaseController {
* 已记录月份集合 * 已记录月份集合
*/ */
@GetMapping(value = "/monthList") @GetMapping(value = "/monthList")
public R<List<String>> monthList(@PathVariable CbProjectBaseBo bo){ public R<List<String>> monthList(CbQuantitySummaryListBo bo) {
return R.ok(baseService.monthList(bo)); return R.ok(baseService.monthList(bo));
} }
/** /**
* 数据导入 * 科目月份列表
*/ */
@PostMapping(value = "/importData") @GetMapping(value = "/subjectList")
public R<Void> importFile(@RequestPart("file") MultipartFile file) throws Exception { public R<List<CbQuantitySummaryListVo>> subjectList(CbQuantitySummaryListBo bo) {
//识别Excel内容 return R.ok(baseService.subjectList(bo));
List<CbQuantitySummary> importList = new ExcelUtils<>(CbQuantitySummary.class).importExcelAllSheet(file.getInputStream(), 1); }
if (importList.isEmpty()) {
throw new ServiceException("表格中不存在待导入数据!"); /**
} * 更新月成本信息
importList = importList.stream().parallel() */
.filter(item -> !ObjectUtils.isEmpty(item.getCbName())) @PutMapping(value = "/updateActual")
.peek(item -> { @RepeatSubmit
item.setProjectId(1L); public R<Void> updateActual(@RequestBody List<CbQuantitySummaryActual> list) {
item.setCbStage(0); baseService.updateActual(list);
}).collect(Collectors.toList()); return R.ok();
if (importList.isEmpty()) { }
throw new ServiceException("表格中不存在有效数据数据!");
} /**
return toAjax(baseService.saveBatch(importList)); * 数据推送
*/
@PutMapping(value = "/pushData")
@RepeatSubmit
public R<Void> pushData(@RequestBody CbQuantitySummaryActual bo) {
baseService.pushData(bo);
return R.ok();
} }
} }
......
package com.dsk.cscec.controller; package com.dsk.cscec.controller;
import cn.hutool.core.bean.BeanUtil;
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.utils.poi.ExcelUtil;
import com.dsk.cscec.domain.bo.CbSummaryActualBo;
import com.dsk.cscec.domain.bo.CbSummaryActualListBo;
import com.dsk.cscec.domain.bo.CbSummaryBo;
import com.dsk.cscec.domain.vo.CbSummaryActualListVo;
import com.dsk.cscec.domain.vo.CbSummaryCostAccountExportVo;
import com.dsk.cscec.domain.vo.CbSummaryProjectExportVo;
import com.dsk.cscec.service.CbSummaryService; import com.dsk.cscec.service.CbSummaryService;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
/** /**
* 成本汇总(CbSummary)表控制层 * 成本汇总(CbSummary)表控制层
...@@ -24,4 +36,71 @@ public class CbSummaryController extends BaseController { ...@@ -24,4 +36,71 @@ public class CbSummaryController extends BaseController {
private CbSummaryService cbSummaryService; private CbSummaryService cbSummaryService;
/**
* 成本汇总左侧一级数据列表
*
* @param bo
* @return
*/
@GetMapping("/cbNameList")
public R<List<Map<String, Object>>> getCbNameList(CbSummaryBo bo) {
return R.ok(cbSummaryService.getCbNameList(bo));
}
/**
* 成本汇总数据列表
* @param bo
* @return
*/
@GetMapping("/list")
public R<List<CbSummaryActualListVo>> getList(CbSummaryActualListBo bo) {
return R.ok(cbSummaryService.getActualList(bo));
}
/**
* 已添加成本月份
*
* @param bo
* @return
*/
@GetMapping("/expenseDateList")
public R<List<String>> getExpenseDateList(@Validated CbSummaryBo bo) {
return R.ok(cbSummaryService.getExpenseDateList(bo));
}
/**
* 编辑成本
*
* @param boList
* @return
*/
@PutMapping("/editActual")
public R editActual(@RequestBody List<CbSummaryActualBo> boList) {
return cbSummaryService.insertOrUpdateActual(boList) == true ? R.ok() : R.fail();
}
//锁定成本前提示未填项(按一级大类)
//锁定成本
/**
* 导出excel-按月导出所有
* @param bo
* @param response
*/
@PostMapping("/export")
public void export(CbSummaryActualListBo bo, HttpServletResponse response) {
List<CbSummaryActualListVo> actualListVoList = cbSummaryService.getAll(bo);
if(bo.getCbType()==1){
List<CbSummaryProjectExportVo> list = BeanUtil.copyToList(actualListVoList,CbSummaryProjectExportVo.class);
ExcelUtil.exportExcel(list, "成本汇总按项目汇总"+bo.getExpenseDate(), CbSummaryProjectExportVo.class, response);
}else {
List<CbSummaryCostAccountExportVo> list = BeanUtil.copyToList(actualListVoList,CbSummaryCostAccountExportVo.class);
ExcelUtil.exportExcel(list, "成本汇总按成本科目汇总"+bo.getExpenseDate(), CbSummaryCostAccountExportVo.class, response);
}
}
//导入
} }
package com.dsk.cscec.domain;
import java.math.BigDecimal;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
/**
* 项目每月实际措施费
*/
@Data
@TableName(value="cb_cost_measure")
public class CbCostMeasure {
/**
* 主键
*/
@TableId(type = IdType.AUTO)
private Long id;
/**
* 项目ID
*/
private Long projectId;
/**
* 成本阶段( 0:标前成本、1:标后成本、2:转固成本)
*/
private Integer cbStage;
/**
* 父项id
*/
private Long parentId;
/**
* 层级数
*/
private Integer level;
private String number;
private String no;
/**
* 清单内容
*/
private String itemContent;
/**
* 工作内容、做法/规格型号/施工现场配置说明
*/
private String workContent;
/**
* 单位
*/
private String unit;
/**
* 工程量
*/
private BigDecimal quantity;
/**
* 不含税单价
*/
private String unitPriceExcludingTax;
/**
* 使用时间
*/
private String usageTime;
/**
* 不含税合价
*/
private String amountExcludingTax;
/**
* 税率(%)
*/
private String taxRate;
/**
* 含税合价
*/
private String amountIncludingTax;
/**
* 摊销比例(%)
*/
private String amortizationRatio;
/**
* 摊销后不含税合价
*/
private String amountExcludeTaxAmortized;
/**
* 摊销后含税合价
*/
private String amountIncludeTaxAmortized;
/**
* 税金(元)
*/
private String taxAmount;
/**
* 备注
*/
private String remarks;
/**
* 成本科目
*/
private String costSubject;
/**
* 税金类型
*/
private String taxType;
/**
* 数据来源(0:导入,1:手动添加)
*/
private Integer dataSource;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
}
\ No newline at end of file
package com.dsk.cscec.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.math.BigDecimal;
import java.util.Date;
import lombok.Data;
@Data
@TableName(value = "cb_cost_measure_actual")
public class CbCostMeasureActual {
/**
* 主键
*/
@TableId(value = "id", type = IdType.INPUT)
private Long id;
/**
* 计划成本措施费id
*/
@TableField(value = "plan_measure_id")
private Long planMeasureId;
/**
* 本月发生成本比例
*/
@TableField(value = "month_cost_rate")
private BigDecimal monthCostRate;
/**
* 成本合价
*/
@TableField(value = "cost_effective")
private BigDecimal costEffective;
/**
* 截止本月工程量
*/
@TableField(value = "current_project_volume")
private BigDecimal currentProjectVolume;
/**
* 推送工程量
*/
@TableField(value = "submit_project_volume")
private BigDecimal submitProjectVolume;
/**
* 年月
*/
@TableField(value = "`month`")
private String month;
/**
* 推送时间
*/
@TableField(value = "push_time")
private Date pushTime;
/**
* 推送数据json
*/
@TableField(value = "push_data_json")
private String pushDataJson;
/**
* 是否删除
*/
@TableField(value = "del_flag")
private Integer delFlag;
/**
* 修改人
*/
@TableField(value = "update_user")
private String updateUser;
/**
* 修改人id
*/
@TableField(value = "update_id")
private Long updateId;
/**
* 创建时间
*/
@TableField(value = "create_time")
private Date createTime;
/**
* 更新时间
*/
@TableField(value = "update_time")
private Date updateTime;
public static final String COL_ID = "id";
public static final String COL_PLAN_MEASURE_ID = "plan_measure_id";
public static final String COL_MONTH_COST_RATE = "month_cost_rate";
public static final String COL_COST_EFFECTIVE = "cost_effective";
public static final String COL_CURRENT_PROJECT_VOLUME = "current_project_volume";
public static final String COL_SUBMIT_PROJECT_VOLUME = "submit_project_volume";
public static final String COL_MONTH = "month";
public static final String COL_PUSH_TIME = "push_time";
public static final String COL_PUSH_DATA_JSON = "push_data_json";
public static final String COL_DEL_FLAG = "del_flag";
public static final String COL_UPDATE_USER = "update_user";
public static final String COL_UPDATE_ID = "update_id";
public static final String COL_CREATE_TIME = "create_time";
public static final String COL_UPDATE_TIME = "update_time";
}
\ No newline at end of file
...@@ -16,7 +16,7 @@ public class CbProjectExpenseSummary { ...@@ -16,7 +16,7 @@ public class CbProjectExpenseSummary {
/** /**
* 主键ID * 主键ID
*/ */
@TableId(value = "id", type = IdType.INPUT) @TableId(value = "id", type = IdType.AUTO)
private Long id; private Long id;
/** /**
......
package com.dsk.cscec.domain; package com.dsk.cscec.domain;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.dsk.common.core.domain.BaseEntity; import com.dsk.common.core.domain.BaseEntity;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
...@@ -31,7 +32,7 @@ public class CbProjectFile extends BaseEntity implements Serializable { ...@@ -31,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;
/** /**
...@@ -41,13 +42,13 @@ public class CbProjectFile extends BaseEntity implements Serializable { ...@@ -41,13 +42,13 @@ public class CbProjectFile extends BaseEntity implements Serializable {
/** /**
* OSS文件ID * OSS文件ID
*/ */
private String fileOssId; private Long fileOssId;
/** /**
* OSS文件路径 * OSS文件路径
*/ */
private String fileOssUrl; private String fileOssUrl;
/** /**
* 文件解析状态(0:待解析、1:解析中、2:解析成功、3:解析失败) * 项目文件状态(0:待解析、1:解析中、2:解析成功、3:解析失败)
*/ */
private Integer fileParseStatus; private Integer fileParseStatus;
/** /**
...@@ -55,7 +56,8 @@ public class CbProjectFile extends BaseEntity implements Serializable { ...@@ -55,7 +56,8 @@ public class CbProjectFile extends BaseEntity implements Serializable {
*/ */
private String failRemark; private String failRemark;
/** /**
* 删除状态(0:否、2:是) * 删除状态(0:否、1:待删除、2:是)
*/ */
@TableLogic(value = "0", delval = "2")
private Integer delFlag; private Integer delFlag;
} }
package com.dsk.cscec.domain; package com.dsk.cscec.domain;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.dsk.common.core.domain.BaseEntity; import com.dsk.common.core.domain.BaseEntity;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
...@@ -23,21 +24,29 @@ public class CbProjectRecord extends BaseEntity implements Serializable { ...@@ -23,21 +24,29 @@ public class CbProjectRecord extends BaseEntity implements Serializable {
@TableId(value = "id") @TableId(value = "id")
private Long id; private Long id;
/** /**
* 成本阶段(0:标前成本、1:标后成本、2:转固成本) * 关联ID(关联多个阶段)
*/ */
private Integer cbStage; private Long relatedId;
/** /**
* 项目名称 * 项目名称
*/ */
private String projectName; private String projectName;
/** /**
* 项目文件状态(0:待解析、1:解析中、2:解析成功、3:解析失败) * 成本阶段(0:标前成本、1:标后成本、2:转固成本)
*/
private Integer cbStage;
/**
* 项目文件状态(0:准备中、1:解析中、2:解析成功、3:解析失败)
*/ */
private Integer projectFileStatus; private Integer projectFileStatus;
/** /**
* IPM项目编码 * IPM项目编码
*/ */
private String ipmProjectNo; private String ipmProjectNo;
/**
* 是否获取项目详情(0:是、1:否)
*/
private Integer isGetProjectDetail;
/** /**
* 文件名称 * 文件名称
*/ */
...@@ -45,5 +54,6 @@ public class CbProjectRecord extends BaseEntity implements Serializable { ...@@ -45,5 +54,6 @@ public class CbProjectRecord extends BaseEntity implements Serializable {
/** /**
* 删除状态(0:否、2:是) * 删除状态(0:否、2:是)
*/ */
@TableLogic(value = "0", delval = "2")
private Integer delFlag; private Integer delFlag;
} }
...@@ -3,6 +3,7 @@ package com.dsk.cscec.domain; ...@@ -3,6 +3,7 @@ package com.dsk.cscec.domain;
import java.util.Date; import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable; import java.io.Serializable;
...@@ -32,7 +33,7 @@ public class CbQuantitySummary implements Serializable { ...@@ -32,7 +33,7 @@ public class CbQuantitySummary implements Serializable {
* 序号 * 序号
*/ */
@Excel(name = "序号") @Excel(name = "序号")
private String number; private Integer number;
/** /**
* 成本阶段(0:标前成本 1:标后成本 2:转固成本) * 成本阶段(0:标前成本 1:标后成本 2:转固成本)
*/ */
...@@ -130,6 +131,15 @@ public class CbQuantitySummary implements Serializable { ...@@ -130,6 +131,15 @@ public class CbQuantitySummary implements Serializable {
* 创建时间 * 创建时间
*/ */
private Date createTime; private Date createTime;
/**
* 项目成本文件id
*/
private Long cbProjectFileId;
/**
* 删除状态(0:否、2:是)
*/
@TableLogic(value = "0", delval = "2")
private Integer delFalg;
} }
...@@ -2,6 +2,7 @@ package com.dsk.cscec.domain; ...@@ -2,6 +2,7 @@ package com.dsk.cscec.domain;
import java.util.Date; import java.util.Date;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
...@@ -21,8 +22,8 @@ public class CbQuantitySummaryActual implements Serializable { ...@@ -21,8 +22,8 @@ public class CbQuantitySummaryActual implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@TableId(value = "id") @TableId(value = "id", type = IdType.INPUT)
private Long id; private String id;
/** /**
* 成本汇总基本数据id * 成本汇总基本数据id
*/ */
...@@ -32,9 +33,9 @@ public class CbQuantitySummaryActual implements Serializable { ...@@ -32,9 +33,9 @@ public class CbQuantitySummaryActual implements Serializable {
*/ */
private Double quantities; private Double quantities;
/** /**
* 单位 * 本月用料单位
*/ */
private String unit; private String quantitiesUnit;
/** /**
* 换算后本月用料 * 换算后本月用料
*/ */
...@@ -47,6 +48,9 @@ public class CbQuantitySummaryActual implements Serializable { ...@@ -47,6 +48,9 @@ public class CbQuantitySummaryActual implements Serializable {
* 采购单价 * 采购单价
*/ */
private Double purchaseUnitPrice; private Double purchaseUnitPrice;
/**
* 创建时间
*/
private Date createTime; private Date createTime;
/** /**
* 推送时间 * 推送时间
...@@ -57,9 +61,21 @@ public class CbQuantitySummaryActual implements Serializable { ...@@ -57,9 +61,21 @@ public class CbQuantitySummaryActual implements Serializable {
*/ */
private String recordDate; private String recordDate;
/** /**
* 推送数据json * 推送工程量
*/
private Double pushQuantities;
/**
* IPM项目编码
*/
private String ipmProjectCode;
/**
* IPM合同编码
*/
private String ipmContractCode;
/**
* IPM作业编码
*/ */
private String pushDataJson; private String ipmBizCode;
} }
...@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableId; ...@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data; import lombok.Data;
import java.io.Serializable; import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
/** /**
...@@ -27,11 +28,11 @@ public class CbSummaryActual implements Serializable { ...@@ -27,11 +28,11 @@ public class CbSummaryActual implements Serializable {
/** /**
* 本月费用(含税) * 本月费用(含税)
*/ */
private Double taxInclusiveExpense; private BigDecimal taxInclusiveExpense;
/** /**
* 本月费用(不含税) * 本月费用(不含税)
*/ */
private Double taxExclusiveExpense; private BigDecimal taxExclusiveExpense;
/** /**
* 费用日期 * 费用日期
*/ */
......
package com.dsk.cscec.domain.bo;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
* @author sxk
* @date 2024.02.05
* @time 15:26
*/
@Data
public class AddCbProjectBo {
/**
* 项目名称
*/
private String projectName;
/**
* IPM项目编码
*/
private String ipmProjectNo;
/**
* 是否获取项目详情(0:否、1:是)
*/
@NotNull(message = "是否获取项目详情不能为空")
private Integer isGetProjectDetail;
/**
* 文件名称
*/
private String projectFileName;
/**
* 成本阶段(0:标前成本、1:标后成本、2:转固成本)
*/
@NotNull(message = "未选择成本阶段")
private Integer cbStage;
}
package com.dsk.cscec.domain.bo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotNull;
/**
* @author sxk
* @date 2024.02.19
* @time 14:22
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class AddNewCbProjectBo extends EditProjectInfoBo {
/**
* 关联ID(关联多个阶段)
*/
@NotNull(message = "关联ID不能为空")
private Long relatedId;
/**
* 成本阶段(0:标前成本、1:标后成本、2:转固成本)
*/
@NotNull(message = "成本阶段不能为空")
private Integer cbStage;
}
package com.dsk.cscec.domain.bo;
import lombok.Data;
import org.springframework.web.multipart.MultipartFile;
import javax.validation.constraints.NotNull;
/**
* @author sxk
* @date 2024.02.06
* @time 16:07
*/
@Data
public class AddProjectFileUploadBo {
/**
* 文件
*/
private MultipartFile file;
/**
* 项目ID
*/
@NotNull(message = "项目ID不能为空")
private Long projectId;
/**
* 成本类型
*/
@NotNull(message = "成本类型不能为空")
private Integer cbType;
}
package com.dsk.cscec.domain.bo;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
@Data
public class CbCostMeasureActualBo {
/**
* 措施费用项id
*/
private Long id;
/**
* 年月
*/
private String month;
/**
* 项目id
*/
private Long projectId;
/**
* 成本阶段( 0:标前成本、1:标后成本、2:转固成本)
*/
private Integer cbStage;
}
\ No newline at end of file
package com.dsk.cscec.domain.bo;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
@Data
public class CbCostMeasureActualPushBo {
/**
* 主键
*/
private Long id;
/**
* 截止本月工程量
*/
@TableField(value = "current_project_volume")
private BigDecimal currentProjectVolume;
/**
* 推送工程量
*/
@TableField(value = "submit_project_volume")
private BigDecimal submitProjectVolume;
/**
* 年月
*/
@TableField(value = "`month`")
private String month;
/**
* 推送时间
*/
@TableField(value = "push_time")
private Date pushTime;
/**
* 推送数据json
*/
@TableField(value = "push_data_json")
private String pushDataJson;
/**
* IPM项目编码
*/
private String ipmProjectCode;
/**
* IPM合同编码
*/
private String ipmContractCode;
/**
* IPM作业编码
*/
private String ipmBizCode;
}
\ No newline at end of file
package com.dsk.cscec.domain.bo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
@Data
public class CbCostMeasureActualSaveBo {
/**
* 主键
*/
private Long id;
/**
* 计划成本措施费id
*/
@TableField(value = "plan_measure_id")
private Long planMeasureId;
/**
* 本月发生成本比例
*/
@TableField(value = "month_cost_rate")
private BigDecimal monthCostRate;
/**
* 成本合价
*/
@TableField(value = "cost_effective")
private BigDecimal costEffective;
/**
* 截止本月工程量
*/
@TableField(value = "current_project_volume")
private BigDecimal currentProjectVolume;
/**
* 推送工程量
*/
@TableField(value = "submit_project_volume")
private BigDecimal submitProjectVolume;
/**
* 年月
*/
@TableField(value = "`month`")
private String month;
/**
* 推送时间
*/
@TableField(value = "push_time")
private Date pushTime;
/**
* 推送数据json
*/
@TableField(value = "push_data_json")
private String pushDataJson;
/**
* 修改人
*/
@TableField(value = "update_user")
private String updateUser;
/**
* 修改人id
*/
@TableField(value = "update_id")
private String updateId;
}
\ No newline at end of file
package com.dsk.cscec.domain.bo;
import lombok.Data;
/**
* @author sxk
* @date 2024.02.18
* @time 15:04
*/
@Data
public class CbProjectSearchBo {
/**
* 项目名称
*/
private String projectName;
/**
* IPM项目编码
*/
private String ipmProjectNo;
/**
* 成本阶段(0:标前成本、1:标后成本、2:转固成本)
*/
private Integer cbStage;
/**
* 项目文件状态(1:解析中、2:解析成功、3:解析失败)
*/
private Integer projectFileStatus;
}
package com.dsk.cscec.domain.bo;
import lombok.Data;
/**
* @Author lcl
* @Data 2024/2/6 13:37
*/
@Data
public class CbQuantitySummaryListBo extends CbProjectBaseBo {
/**
* 成本科目
*/
private String cbSubjectName;
/**
* 记录月份
*/
private String recordDate;
}
package com.dsk.cscec.domain.bo;
import com.dsk.common.core.domain.BaseEntity;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
/**
* 成本汇总-每月费用Bo
*
* @author cyf
* @since 2024-02-06
*/
@Data
public class CbSummaryActualBo extends BaseEntity {
/**
* 费用id
*/
private Long id;
/**
* 成本汇总id
*/
@NotNull(message = "成本汇总id不能为空")
private Long cbSummaryId;
/**
* 本月费用(含税)
*/
private BigDecimal taxInclusiveExpense;
/**
* 本月费用(不含税)
*/
private BigDecimal taxExclusiveExpense;
/**
* 费用日期
*/
@NotEmpty(message = "费用日期不能为空")
private String expenseDate;
}
package com.dsk.cscec.domain.bo;
import com.dsk.common.core.domain.BaseEntity;
import lombok.Data;
/**
* 成本汇总-列表查询Bo
*
* @author cyf
* @since 2024-02-06
*/
@Data
public class CbSummaryActualListBo extends BaseEntity {
/**
* 主键id
*/
private Long id;
/**
* 成本阶段( 0:标前成本、1:标后成本、2:转固成本)
*/
private Integer cbStage;
/**
* 成本类型(1项目汇总,2成本科目汇总)
*/
private Integer cbType;
/**
* 费用日期
*/
private String expenseDate;
}
package com.dsk.cscec.domain.bo;
import com.dsk.common.core.domain.BaseEntity;
import lombok.Data;
/**
* 成本汇总Bo
*
* @author cyf
* @since 2024-02-06
*/
@Data
public class CbSummaryBo extends BaseEntity {
/**
* 主键id
*/
private Long id;
/**
* 父级id
*/
private Long parentId;
/**
* 层级
*/
private Integer level;
/**
* 项目id
*/
private Long projectId;
/**
* 成本阶段( 0:标前成本、1:标后成本、2:转固成本)
*/
private Integer cbStage;
/**
* 项目成本文件id
*/
private Long cbProjectFileId;
/**
* 成本类型(1项目汇总,2成本科目汇总)
*/
private Integer cbType;
}
package com.dsk.cscec.domain.bo;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
* @author sxk
* @date 2024.02.08
* @time 16:07
*/
@Data
public class EditProjectInfoBo {
/**
* 项目ID
*/
@NotNull(message = "项目ID不能为空")
private Long projectId;
/**
* 项目名称
*/
private String projectName;
/**
* IPM项目编码
*/
private String ipmProjectNo;
/**
* 是否获取项目详情(0:否、1:是)
*/
@NotNull(message = "是否获取项目详情不能为空")
private Integer isGetProjectDetail;
/**
* 文件名称
*/
private String projectFileName;
}
package com.dsk.cscec.domain.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
@Data
public class CbCostMeasureActualVo {
/**
* 主键id
*/
private Long id;
/**
* 序号
*/
private String number;
/**
* 清单内容
*/
private String itemContent; // 清单内容
/**
* 工作内容
*/
private String workContent; // 工作内容、做法/规格型号/施工现场配置说明
/**
* 单位
*/
private String unit; // 单位
/**
* 工程量
*/
private BigDecimal quantity; // 工程量
/**
* 不含税单价
*/
private String unitPriceExcludingTax; // 不含税单价
/**
* 使用时间
*/
private String usageTime; // 使用时间
/**
* 不含税合价
*/
private String amountExcludingTax; //
/**
* 税率(%)
*/
private String taxRate; // 税率(%)
/**
* 含税合价
*/
private String amountIncludingTax; //
/**
* 摊销比例(%)
*/
private String amortizationRatio; //
/**
* 摊销后不含税合价
*/
private String amountExcludeTaxAmortized; //
/**
* 摊销后含税合价
*/
private String amountIncludeTaxAmortized; //
/**
* 税金(元)
*/
private String taxAmount; //
/**
* 备注
*/
private String remarks; //
/**
* 成本科目
*/
private String costSubject; // 成本科目
/**
* 税金类型
*/
private String taxType; //
/**
* 计划成本措施费id
*/
private Long planMeasureId;
/**
* 本月发生成本比例
*/
private BigDecimal monthCostRate;
/**
* 成本合价
*/
private BigDecimal costEffective;
/**
* 截止本月工程量
*/
private BigDecimal currentProjectVolume;
/**
* 推送工程量
*/
private BigDecimal submitProjectVolume;
/**
* 年月
*/
private String month;
/**
* 推送时间
*/
private Date pushTime;
/**
* 修改人
*/
@TableField(value = "update_user")
private String updateUser;
/**
* 修改人id
*/
@TableField(value = "update_id")
private String updateId;
/**
* 创建时间
*/
@TableField(value = "create_time")
private Date createTime;
/**
* 更新时间
*/
@TableField(value = "update_time")
private Date updateTime;
public static final String COL_ID = "id";
public static final String COL_PLAN_MEASURE_ID = "plan_measure_id";
public static final String COL_MONTH_COST_RATE = "month_cost_rate";
public static final String COL_COST_EFFECTIVE = "cost_effective";
public static final String COL_CURRENT_PROJECT_VOLUME = "current_project_volume";
public static final String COL_SUBMIT_PROJECT_VOLUME = "submit_project_volume";
public static final String COL_MONTH = "month";
public static final String COL_PUSH_TIME = "push_time";
public static final String COL_PUSH_DATA_JSON = "push_data_json";
public static final String COL_DEL_FLAG = "del_flag";
public static final String COL_UPDATE_USER = "update_user";
public static final String COL_UPDATE_ID = "update_id";
public static final String COL_CREATE_TIME = "create_time";
public static final String COL_UPDATE_TIME = "update_time";
}
\ No newline at end of file
package com.dsk.cscec.domain.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
* 措施费导入数据
*
* @author tanyang
* @create 2024-02-04 13:49
**/
@Data
public class CbCostMeasuresImportVo {
@ExcelProperty(value = "序号")
private String number; // 清单内容
@ExcelProperty(value = "清单内容")
private String itemContent; // 清单内容
@ExcelProperty(value = "工作内容")
private String workContent; // 工作内容、做法/规格型号/施工现场配置说明
@ExcelProperty(value = "单位")
private String unit; // 单位
@ExcelProperty(value = "工程量")
private BigDecimal quantity; // 工程量
@ExcelProperty(value = "不含税单价")
private String unitPriceExcludingTax; // 不含税单价
@ExcelProperty(value = "使用时间")
private String usageTime; // 使用时间
@ExcelProperty(value = "不含税合价")
private String amountExcludingTax; // 不含税合价
@ExcelProperty(value = "税率(%)")
private String taxRate; // 税率(%)
@ExcelProperty(value = "含税合价")
private String amountIncludingTax; // 含税合价
@ExcelProperty(value = "摊销比例(%)")
private String amortizationRatio; // 摊销比例(%)
@ExcelProperty(value = "摊销后不含税合价")
private String amountExcludeTaxAmortized; // 摊销后不含税合价
@ExcelProperty(value = "摊销后含税合价")
private String amountIncludeTaxAmortized; // 摊销后含税合价
@ExcelProperty(value = "税金(元)")
private String taxAmount; // 税金(元)
@ExcelProperty(value = "备注")
private String remarks; // 备注
@ExcelProperty(value = "成本科目")
private String costSubject; // 成本科目
@ExcelProperty(value = "税金类型")
private String taxType; // 税金类型
// @ExcelProperty(value = "主键")
private Long id; // 主键
// @ExcelProperty(value = "项目ID")
private Long cbProjectId; // 项目ID
private Long parentId; // 父项id
private Integer level; // 层级数
private String no; // 处理后内容
}
package com.dsk.cscec.domain.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
* 措施费导入数据
*
* @author tanyang
* @create 2024-02-04 13:49
**/
@Data
public class CbCostMeasuresItemVo {
private String itemContent; // 清单内容
private Long id; // 主键
}
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 com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
* 措施费导入数据
*
* @author tanyang
* @create 2024-02-04 13:49
**/
@Data
public class CbProjectExpenseSummaryImportVo {
@ExcelProperty(value = "名称")
private String expenseName; // 名称
@ExcelProperty(value = "数值")
private String expenseValue; // 数值
@ExcelProperty(value = "占比")
private String proportion; // 占比
// @ExcelProperty(value = "序号")
private String number; // 清单内容
private Long id; // 主键
private Long cbProjectId; // 项目ID
private Long parentId; // 父项id
private Integer dataType; // 数据类型(0:现场经费、1:其他费用、2:措施费)
private String no; // 处理后内容
}
package com.dsk.cscec.domain.vo;
import lombok.Data;
import java.util.Date;
/**
* @Author lcl
* @Data 2024/2/6 14:46
*/
@Data
public class CbQuantitySummaryListVo {
private Long id;
/**
* 成本科目名称(合约规划)
*/
private String cbSubjectName;
/**
* 公司编码
*/
private String companyNo;
/**
* 集团编码
*/
private String orgNo;
/**
* 成本名称
*/
private String cbName;
/**
* 工作内容
*/
private String jobContent;
/**
* 计算规则
*/
private String calculationRule;
/**
* 计量单位
*/
private String unit;
/**
* 材料说明
*/
private String materialDescription;
/**
* 指导价格
*/
private String guidePrice;
/**
* 投标选用单价(不含税)
*/
private Double bidUnitPrice;
/**
* 单价差额
*/
private Double unitPriceDifference;
/**
* 数量
*/
private Double quantity;
/**
* 合价(不含税)
*/
private Double combinedPrice;
/**
* 合价(含税)
*/
private Double combinedPriceTax;
/**
* 品牌名称
*/
private String brandName;
/**
* 投标选用来源
*/
private String bidSource;
/**
* 备注
*/
private String remark;
/**
* 工程量(本月用料)
*/
private Double quantities;
/**
* 单位
*/
private String quantitiesUnit;
/**
* 换算后本月用料
*/
private Double conversionQuantities;
/**
* 换算单位
*/
private String conversionUnit;
/**
* 采购单价
*/
private Double purchaseUnitPrice;
/**
* 创建时间
*/
private Date createTime;
/**
* 截至本月总量
*/
private Double totalQuantities;
/**
* 本月已填写成本Id
*/
private String actualId;
/**
* 推送工程量
*/
private Double pushQuantities;
/**
* IPM项目编码
*/
private String ipmProjectCode;
/**
* IPM合同编码
*/
private String ipmContractCode;
/**
* IPM作业编码
*/
private String ipmJobCode;
}
package com.dsk.cscec.domain.vo;
import com.dsk.common.core.domain.BaseEntity;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
/**
* 成本汇总Bo
*
* @author cyf
* @since 2024-02-06
*/
@Data
public class CbSummaryActualListVo extends BaseEntity {
/**
* 主键id
*/
private Long id;
/**
* 项目id
*/
private Long projectId;
/**
* 成本阶段( 0:标前成本、1:标后成本、2:转固成本)
*/
private Integer cbStage;
/**
* 序号
*/
private String number;
/**
* 名称/成本科目
*/
private String cbName;
/**
* 不含税成本合价
*/
private String taxExclusiveTotal;
/**
* 成本税金合价
*/
private String cbTaxesTotal;
/**
* 含税成本合价
*/
private String taxInclusiveTotal;
/**
* 成本占比
*/
private String cbProportion;
/**
* 含税成本平米指标
*/
private String taxInclusivePmTarget;
/**
* 备注
*/
private String remark;
/**
* 费用id
*/
private Long actualId;
/**
* 本月费用(含税)
*/
private BigDecimal taxInclusiveExpense;
/**
* 本月费用(不含税)
*/
private BigDecimal taxExclusiveExpense;
/**
* 截至本月费用(含税)
*/
private BigDecimal taxInclusiveExpenseTotal;
/**
* 截至本月费用(不含税)
*/
private BigDecimal taxExclusiveExpenseTotal;
/**
* 费用日期
*/
private String expenseDate;
/**
* 是否锁定(0否,1是)
*/
private Integer lockStatus;
private List<CbSummaryActualListVo> children;
}
package com.dsk.cscec.domain.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* 成本汇总(CbSummary)-成本科目汇总导出Vo
*
* @author cyf
* @since 2024-02-06
*/
@Data
@NoArgsConstructor
public class CbSummaryCostAccountExportVo implements Serializable {
private static final long serialVersionUID = -20126964599875841L;
/**
* 序号
*/
@ExcelProperty(value = "序号")
private String number;
/**
* 成本科目
*/
@ExcelProperty(value = "成本科目")
private String cbName;
/**
* 不含税成本合价
*/
@ExcelProperty(value = "不含税成本合价")
private String taxExclusiveTotal;
/**
* 成本税金合价
*/
@ExcelProperty(value = "成本税金合价")
private String cbTaxesTotal;
/**
* 含税成本合价
*/
@ExcelProperty(value = "含税成本合价")
private String taxInclusiveTotal;
/**
* 成本占比
*/
@ExcelProperty(value = "成本占比")
private String cbProportion;
/**
* 含税成本平米指标
*/
@ExcelProperty(value = "含税成本平米指标")
private String taxInclusivePmTarget;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 本月费用(含税)
*/
@ExcelProperty(value = "本月费用(含税)")
private BigDecimal taxInclusiveExpense;
/**
* 本月费用(不含税)
*/
@ExcelProperty(value = "本月费用(不含税)")
private BigDecimal taxExclusiveExpense;
/**
* 截至本月费用(含税)
*/
@ExcelProperty(value = "截至本月费用(含税)")
private BigDecimal taxInclusiveExpenseTotal;
/**
* 截至本月费用(不含税)
*/
@ExcelProperty(value = "截至本月费用(不含税)")
private BigDecimal taxExclusiveExpenseTotal;
}
package com.dsk.cscec.domain.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* 成本汇总(CbSummary)-项目汇总导出Vo
*
* @author cyf
* @since 2024-02-06
*/
@Data
@NoArgsConstructor
public class CbSummaryProjectExportVo implements Serializable {
private static final long serialVersionUID = -20126964599875841L;
/**
* 序号
*/
@ExcelProperty(value = "序号")
private String number;
/**
* 名称
*/
@ExcelProperty(value = "名称")
private String cbName;
/**
* 不含税成本合价
*/
@ExcelProperty(value = "不含税成本合价")
private String taxExclusiveTotal;
/**
* 成本税金合价
*/
@ExcelProperty(value = "成本税金合价")
private String cbTaxesTotal;
/**
* 含税成本合价
*/
@ExcelProperty(value = "含税成本合价")
private String taxInclusiveTotal;
/**
* 成本占比
*/
@ExcelProperty(value = "成本占比")
private String cbProportion;
/**
* 含税成本平米指标
*/
@ExcelProperty(value = "含税成本平米指标")
private String taxInclusivePmTarget;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 本月费用(含税)
*/
@ExcelProperty(value = "本月费用(含税)")
private BigDecimal taxInclusiveExpense;
/**
* 本月费用(不含税)
*/
@ExcelProperty(value = "本月费用(不含税)")
private BigDecimal taxExclusiveExpense;
/**
* 截至本月费用(含税)
*/
@ExcelProperty(value = "截至本月费用(含税)")
private BigDecimal taxInclusiveExpenseTotal;
/**
* 截至本月费用(不含税)
*/
@ExcelProperty(value = "截至本月费用(不含税)")
private BigDecimal taxExclusiveExpenseTotal;
}
package com.dsk.cscec.domain.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* 成本汇总(CbSummary)-项目汇总导入Vo
*
* @author cyf
* @since 2024-02-06
*/
@Data
@NoArgsConstructor
public class CbSummaryProjectImportVo implements Serializable {
private static final long serialVersionUID = -20126964599875841L;
/**
* 序号
*/
@ExcelProperty(value = "序号")
private String number;
/**
* 名称
*/
@ExcelProperty(value = "名称")
private String cbName;
/**
* 不含税成本合价
*/
@ExcelProperty(value = "不含税成本合价")
private String taxExclusiveTotal;
/**
* 成本税金合价
*/
@ExcelProperty(value = "成本税金合价")
private String cbTaxesTotal;
/**
* 含税成本合价
*/
@ExcelProperty(value = "含税成本合价")
private String taxInclusiveTotal;
/**
* 成本占比
*/
@ExcelProperty(value = "成本占比")
private String cbProportion;
/**
* 含税成本平米指标
*/
@ExcelProperty(value = "含税成本平米指标")
private String taxInclusivePmTarget;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
}
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.domain.vo;
import com.dsk.cscec.domain.CbProjectFile;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
/**
* @author sxk
* @date 2024.02.08
* @time 10:24
*/
@Data
public class QueryProjectFileUploadDetailVo {
/**
* 项目ID
*/
private Long projectId;
/**
* 直接费成本
*/
private List<CbProjectFile> directExpense = new ArrayList<>();
/**
* 工料汇总
*/
private List<CbProjectFile> quantitySummary = new ArrayList<>();
/**
* 措施项目
*/
private List<CbProjectFile> measureProject = new ArrayList<>();
/**
* 其他项目
*/
private List<CbProjectFile> otherProject = new ArrayList<>();
/**
* 现场经费
*/
private List<CbProjectFile> sceneExpense = new ArrayList<>();
/**
* 成本汇总
*/
private List<CbProjectFile> cbSummary = new ArrayList<>();
}
package com.dsk.cscec.listener;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.ReUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.dsk.common.excel.ExcelListener;
import com.dsk.common.excel.ExcelResult;
import com.dsk.common.exception.ServiceException;
import com.dsk.common.helper.LoginHelper;
import com.dsk.common.utils.spring.SpringUtils;
import com.dsk.cscec.domain.CbProjectExpenseSummary;
import com.dsk.cscec.domain.vo.CbCostMeasuresImportVo;
import com.dsk.cscec.domain.vo.CbProjectExpenseSummaryImportVo;
import com.dsk.cscec.service.CbProjectExpenseSummaryService;
import com.dsk.cscec.service.impl.CbCostMeasureServiceImpl;
import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
/**
* 系统用户自定义导入
*
* @author Lion Li
*/
@Slf4j
public class ProjectCostMeasureSummaryImportListener extends AnalysisEventListener<CbProjectExpenseSummaryImportVo> implements ExcelListener<CbProjectExpenseSummaryImportVo> {
private final CbProjectExpenseSummaryService cbProjectExpenseSummaryService;
//
// private final String password;
private final Long projectId;
private final Integer cbStage;
private final Integer dataType;
private List<CbProjectExpenseSummaryImportVo> dataList = new ArrayList<>();
// private final String operName;
private int successNum = 0;
private int failureNum = 0;
private final StringBuilder successMsg = new StringBuilder();
private final StringBuilder failureMsg = new StringBuilder();
public ProjectCostMeasureSummaryImportListener(Long projectId, Integer cbStage,Integer dataType) {
this.cbProjectExpenseSummaryService = SpringUtils.getBean(CbProjectExpenseSummaryService.class);
this.cbStage = cbStage;
this.projectId = projectId;
this.dataType=dataType;
}
@Override
public void invoke(CbProjectExpenseSummaryImportVo importVo, AnalysisContext context) {
CbProjectExpenseSummary cbProjectExpenseSummary=new CbProjectExpenseSummary();
BeanUtil.copyProperties(importVo,cbProjectExpenseSummary);
cbProjectExpenseSummary.setProjectId(projectId);
cbProjectExpenseSummary.setCbStage(cbStage);
cbProjectExpenseSummary.setDataType(dataType);
cbProjectExpenseSummary.setCreateBy(LoginHelper.getUsername());
cbProjectExpenseSummaryService.save(cbProjectExpenseSummary);
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
}
@Override
public ExcelResult<CbProjectExpenseSummaryImportVo> getExcelResult() {
return new ExcelResult<CbProjectExpenseSummaryImportVo>() {
@Override
public String getAnalysis() {
if (failureNum > 0) {
failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
throw new ServiceException(failureMsg.toString());
} else {
successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
}
return successMsg.toString();
}
@Override
public List<CbProjectExpenseSummaryImportVo> getList() {
return dataList;
}
@Override
public List<String> getErrorList() {
return null;
}
};
}
}
package com.dsk.cscec.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsk.cscec.domain.CbCostMeasureActual;
import com.dsk.cscec.domain.bo.CbCostMeasureActualBo;
import com.dsk.cscec.domain.vo.CbCostMeasureActualVo;
import java.util.List;
public interface CbCostMeasureActualMapper extends BaseMapper<CbCostMeasureActual> {
int insertSelective(CbCostMeasureActual record);
int updateByPrimaryKeySelective(CbCostMeasureActual record);
List<CbCostMeasureActualVo> selectDataList(CbCostMeasureActualBo costMeasureActualBo);
}
\ No newline at end of file
package com.dsk.cscec.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dsk.common.core.domain.entity.SysDictData;
import com.dsk.cscec.domain.CbCostMeasure;
import com.dsk.cscec.domain.CbQuantitySummary;
import com.dsk.cscec.domain.bo.CbCostMeasureActualBo;
import com.dsk.cscec.domain.vo.CbCostMeasureActualVo;
import java.util.List;
public interface CbCostMeasureMapper extends BaseMapper<CbCostMeasure> {
List<CbCostMeasureActualVo> selectListByProjectAndNo(CbCostMeasureActualBo cbCostMeasure);
}
\ No newline at end of file
...@@ -11,6 +11,5 @@ import com.dsk.cscec.domain.CbProjectFile; ...@@ -11,6 +11,5 @@ import com.dsk.cscec.domain.CbProjectFile;
*/ */
public interface CbProjectFileMapper extends BaseMapper<CbProjectFile> { public interface CbProjectFileMapper extends BaseMapper<CbProjectFile> {
} }
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);
} }
package com.dsk.cscec.mapper; package com.dsk.cscec.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsk.common.core.mapper.BaseMapperPlus;
import com.dsk.cscec.domain.CbQuantitySummary; import com.dsk.cscec.domain.CbQuantitySummary;
import com.dsk.cscec.domain.bo.CbProjectBaseBo; import com.dsk.cscec.domain.bo.CbProjectBaseBo;
import com.dsk.cscec.domain.bo.CbQuantitySummaryListBo;
import com.dsk.cscec.domain.vo.CbQuantitySummaryListVo;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
...@@ -15,12 +18,16 @@ import java.util.Map; ...@@ -15,12 +18,16 @@ import java.util.Map;
* @author lcl * @author lcl
* @since 2024-02-05 11:06:56 * @since 2024-02-05 11:06:56
*/ */
public interface CbQuantitySummaryMapper extends BaseMapper<CbQuantitySummary> { public interface CbQuantitySummaryMapper extends BaseMapperPlus<CbQuantitySummaryMapper,CbQuantitySummary,CbQuantitySummary> {
List<Map<String, Object>> selectSubject(CbProjectBaseBo bo); List<Map<String, Object>> selectSubject(CbProjectBaseBo bo);
int selectOtherSubjectCount(CbProjectBaseBo bo); int selectOtherSubjectCount(CbProjectBaseBo bo);
List<String> selectMonthList(CbQuantitySummaryListBo bo);
List<CbQuantitySummaryListVo> selectListBySubject(CbQuantitySummaryListBo bo);
} }
...@@ -2,6 +2,9 @@ package com.dsk.cscec.mapper; ...@@ -2,6 +2,9 @@ package com.dsk.cscec.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsk.cscec.domain.CbSummaryActual; import com.dsk.cscec.domain.CbSummaryActual;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/** /**
* 成本汇总-每月费用(CbSummaryActual)表数据库访问层 * 成本汇总-每月费用(CbSummaryActual)表数据库访问层
...@@ -10,5 +13,12 @@ import com.dsk.cscec.domain.CbSummaryActual; ...@@ -10,5 +13,12 @@ import com.dsk.cscec.domain.CbSummaryActual;
* @since 2024-02-06 * @since 2024-02-06
*/ */
public interface CbSummaryActualMapper extends BaseMapper<CbSummaryActual> { public interface CbSummaryActualMapper extends BaseMapper<CbSummaryActual> {
/**
* 批量新增或按主键更新数据(MyBatis原生foreach方法)
*
* @param entities List<CbSummaryActual> 实例对象列表
* @return 影响行数
*/
int insertOrUpdateBatch(@Param("entities") List<CbSummaryActual> entities);
} }
...@@ -2,6 +2,14 @@ package com.dsk.cscec.mapper; ...@@ -2,6 +2,14 @@ package com.dsk.cscec.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; 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.CbSummaryBo;
import com.dsk.cscec.domain.vo.CbGainLossAnalysisListVo;
import com.dsk.cscec.domain.vo.CbSummaryActualListVo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/** /**
* 成本汇总(CbSummary)表数据库访问层 * 成本汇总(CbSummary)表数据库访问层
...@@ -11,4 +19,46 @@ import com.dsk.cscec.domain.CbSummary; ...@@ -11,4 +19,46 @@ import com.dsk.cscec.domain.CbSummary;
*/ */
public interface CbSummaryMapper extends BaseMapper<CbSummary> { public interface CbSummaryMapper extends BaseMapper<CbSummary> {
List<CbSummaryActualListVo> getByParentId(@Param("parentId") Long parentId, @Param("expenseDate") String expenseDate);
CbSummaryActualListVo getById(@Param("id") Long id, @Param("expenseDate") String expenseDate);
/**
* 根据月份获取所有项目汇总数据
*
* @param bo
* @return
*/
List<CbSummaryActualListVo> getProjectAll(@Param("bo") CbSummaryActualListBo bo);
/**
* 根据月份获取所有成本科目汇总数据
*
* @param bo
* @return
*/
List<CbSummaryActualListVo> getCostAccountAll(@Param("bo") CbSummaryActualListBo bo);
/**
* 获取已添加成本月份
*
* @param bo
* @return
*/
List<String> getExpenseDateList(@Param("bo") CbSummaryBo bo);
/**
* 根据level获取名称/成本科目
*
* @param bo
* @return
*/
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);
} }
...@@ -2,6 +2,9 @@ package com.dsk.cscec.service; ...@@ -2,6 +2,9 @@ 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.vo.QueryProjectFileUploadDetailVo;
import com.dsk.system.domain.vo.SysOssVo;
/** /**
* 项目成本文件表(CbProjectFile)表服务接口 * 项目成本文件表(CbProjectFile)表服务接口
...@@ -10,5 +13,29 @@ import com.dsk.cscec.domain.CbProjectFile; ...@@ -10,5 +13,29 @@ import com.dsk.cscec.domain.CbProjectFile;
* @since 2024-02-05 14:01:06 * @since 2024-02-05 14:01:06
*/ */
public interface CbProjectFileService extends IService<CbProjectFile> { public interface CbProjectFileService extends IService<CbProjectFile> {
/**
* 添加项目上传文件记录
*
* @param fileUploadBo 上传信息
* @param oss oss信息
* @return 文件实体
*/
CbProjectFile addProjectFile(AddProjectFileUploadBo fileUploadBo, SysOssVo oss);
/**
* 逻辑删除项目上传文件记录
*
* @param fileId 文件ID
* @return 删除结果
*/
Integer deleteProjectFile(Long fileId);
/**
* 获取项目文件上传详情
*
* @param projectId 项目ID
* @return 文件列表
*/
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.AddNewCbProjectBo;
import com.dsk.cscec.domain.bo.CbProjectSearchBo;
import com.dsk.cscec.domain.bo.EditProjectInfoBo;
import com.dsk.cscec.domain.vo.ProjectRecordSearchVo;
import java.util.List;
/** /**
* 项目台账表(CbProjectRecord)表服务接口 * 项目台账表(CbProjectRecord)表服务接口
...@@ -10,6 +19,66 @@ import com.dsk.cscec.domain.CbProjectRecord; ...@@ -10,6 +19,66 @@ import com.dsk.cscec.domain.CbProjectRecord;
* @since 2024-02-05 11:37:53 * @since 2024-02-05 11:37:53
*/ */
public interface CbProjectRecordService extends IService<CbProjectRecord> { public interface CbProjectRecordService extends IService<CbProjectRecord> {
/**
* 新增项目
*
* @param addCbProjectBo 新增对象
* @return 新增结果
*/
CbProjectRecord addProject(AddCbProjectBo addCbProjectBo);
/**
* 根据项目文件导入数据
*
* @param projectId 项目ID
*/
void importData(Long projectId) throws Exception;
/**
* 获取项目台账列表
*
* @param searchBo 查询条件
* @param pageQuery 分页对象
* @return 分页数据
*/
TableDataInfo<ProjectRecordSearchVo> getProjectList(CbProjectSearchBo searchBo, PageQuery pageQuery);
/**
* 修改项目信息
*
* @param editBo 修改对象
* @return 修改结果
*/
Integer editProjectInfo(EditProjectInfoBo editBo);
/**
* 获取新阶段项目可选成本阶段
*
* @param relatedId 关联ID
* @return 可选成本阶段
*/
List<Integer> getProjectAvailableCbStage(Long relatedId);
/**
* 新增新阶段项目
*
* @param newProjectBo 新增对象
* @return 新增结果
*/
CbProjectRecord addNewStageProject(AddNewCbProjectBo newProjectBo);
/**
* 获取草稿弹窗列表
*
* @return 草稿弹窗列表
*/
List<CbProjectRecord> getDraftDialogList();
/**
* 删除草稿
*
* @param projectId 项目ID
* @return 删除结果
*/
Integer deleteDraft(Long projectId);
} }
...@@ -2,6 +2,13 @@ package com.dsk.cscec.service; ...@@ -2,6 +2,13 @@ package com.dsk.cscec.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.dsk.cscec.domain.CbSummary; import com.dsk.cscec.domain.CbSummary;
import com.dsk.cscec.domain.bo.CbSummaryActualBo;
import com.dsk.cscec.domain.bo.CbSummaryActualListBo;
import com.dsk.cscec.domain.bo.CbSummaryBo;
import com.dsk.cscec.domain.vo.CbSummaryActualListVo;
import java.util.List;
import java.util.Map;
/** /**
...@@ -12,4 +19,45 @@ import com.dsk.cscec.domain.CbSummary; ...@@ -12,4 +19,45 @@ import com.dsk.cscec.domain.CbSummary;
*/ */
public interface CbSummaryService extends IService<CbSummary> { public interface CbSummaryService extends IService<CbSummary> {
//项目汇总导入 todo
void importCbProject(Long projectId, Integer cbStage);
/**
* 获取一级名称/成本科目列表
*
* @param bo
* @return
*/
List<Map<String, Object>> getCbNameList(CbSummaryBo bo);
/**
* 根据父级id获取子级数据
*
* @param bo
* @return
*/
List<CbSummaryActualListVo> getActualList(CbSummaryActualListBo bo);
/**
* 获取已添加成本月份
*
* @param bo
* @return
*/
List<String> getExpenseDateList(CbSummaryBo bo);
/**
* 新增/更新每月费用
*
* @param boList
* @return
*/
boolean insertOrUpdateActual(List<CbSummaryActualBo> boList);
/**
* 导出列表获取
* @param bo
* @return
*/
List<CbSummaryActualListVo> getAll(CbSummaryActualListBo bo);
} }
package com.dsk.cscec.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dsk.cscec.domain.CbCostMeasure;
import com.dsk.cscec.domain.CbCostMeasureActual;
import com.dsk.cscec.domain.bo.CbCostMeasureActualBo;
import com.dsk.cscec.domain.bo.CbCostMeasureActualSaveBo;
import com.dsk.cscec.domain.vo.CbCostMeasureActualVo;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
import java.util.Map;
/**
* 成本-工料汇总基本表(CbQuantitySummary)表服务接口
*
* @author lcl
* @since 2024-02-05 11:06:56
*/
public interface ICbCostMeasureActualService extends IService<CbCostMeasureActual> {
}
package com.dsk.cscec.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dsk.common.core.domain.PageQuery;
import com.dsk.common.core.domain.entity.SysDictData;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.cscec.domain.CbCostMeasure;
import com.dsk.cscec.domain.bo.CbCostMeasureActualBo;
import com.dsk.cscec.domain.bo.CbCostMeasureActualPushBo;
import com.dsk.cscec.domain.bo.CbCostMeasureActualSaveBo;
import com.dsk.cscec.domain.vo.CbCostMeasureActualVo;
import com.dsk.cscec.domain.vo.CbCostMeasuresItemVo;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
import java.util.Map;
/**
* 成本-工料汇总基本表(CbQuantitySummary)表服务接口
*
* @author lcl
* @since 2024-02-05 11:06:56
*/
public interface ICbCostMeasureService extends IService<CbCostMeasure> {
void importExcelData(MultipartFile file, Long projectId);
List<Map<String, Object>> listByLevel(Long projectId, int i);
List<CbCostMeasureActualVo> selectDataList(CbCostMeasureActualBo cbCostMeasure);
void saveBatchCostMeasureActual(List<CbCostMeasureActualSaveBo> boList);
void pushCostMeasureActual(CbCostMeasureActualPushBo pushBo);
void importExcelSummaryData(MultipartFile file, Long projectId,Integer dataType);
}
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);
}
...@@ -2,7 +2,10 @@ package com.dsk.cscec.service; ...@@ -2,7 +2,10 @@ package com.dsk.cscec.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.dsk.cscec.domain.CbQuantitySummary; import com.dsk.cscec.domain.CbQuantitySummary;
import com.dsk.cscec.domain.CbQuantitySummaryActual;
import com.dsk.cscec.domain.bo.CbProjectBaseBo; import com.dsk.cscec.domain.bo.CbProjectBaseBo;
import com.dsk.cscec.domain.bo.CbQuantitySummaryListBo;
import com.dsk.cscec.domain.vo.CbQuantitySummaryListVo;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -17,7 +20,13 @@ public interface ICbQuantitySummaryService extends IService<CbQuantitySummary> { ...@@ -17,7 +20,13 @@ public interface ICbQuantitySummaryService extends IService<CbQuantitySummary> {
Map<String, Object> subjectTree(CbProjectBaseBo bo); Map<String, Object> subjectTree(CbProjectBaseBo bo);
List<String> monthList(CbProjectBaseBo bo); List<String> monthList(CbQuantitySummaryListBo bo);
List<CbQuantitySummaryListVo> subjectList(CbQuantitySummaryListBo bo);
void updateActual(List<CbQuantitySummaryActual> list);
void pushData(CbQuantitySummaryActual bo);
} }
...@@ -52,5 +52,13 @@ public interface IDProjectService extends IService<DProject> { ...@@ -52,5 +52,13 @@ public interface IDProjectService extends IService<DProject> {
* @return 项目详情 * @return 项目详情
*/ */
ProjectDetailVo queryProjectDetail(ProjectDetailBo projectDetailBo); ProjectDetailVo queryProjectDetail(ProjectDetailBo projectDetailBo);
/**
* 校验项目编码是否存在
*
* @param projectCode 项目编码
* @return 校验结果
*/
Boolean checkProjectCodeExist(String projectCode);
} }
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;
}
}
package com.dsk.cscec.service.impl;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsk.cscec.domain.CbProjectExpenseSummary;
import com.dsk.cscec.mapper.CbProjectExpenseSummaryMapper;
import com.dsk.cscec.service.CbProjectExpenseSummaryService;
@Service
public class CbProjectExpenseSummaryServiceImpl extends ServiceImpl<CbProjectExpenseSummaryMapper, CbProjectExpenseSummary> implements CbProjectExpenseSummaryService{
}
package com.dsk.cscec.service.impl; package com.dsk.cscec.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.lang.Assert;
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.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.bo.AddProjectFileUploadBo;
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.service.CbProjectFileService; import com.dsk.cscec.service.CbProjectFileService;
import com.dsk.system.domain.vo.SysOssVo;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.List;
import java.util.Objects;
/** /**
* 项目成本文件表(CbProjectFile)表服务实现类 * 项目成本文件表(CbProjectFile)表服务实现类
...@@ -18,5 +30,106 @@ import javax.annotation.Resource; ...@@ -18,5 +30,106 @@ import javax.annotation.Resource;
public class CbProjectFileServiceImpl extends ServiceImpl<CbProjectFileMapper, CbProjectFile> implements CbProjectFileService { public class CbProjectFileServiceImpl extends ServiceImpl<CbProjectFileMapper, CbProjectFile> implements CbProjectFileService {
@Resource @Resource
private CbProjectFileMapper baseMapper; private CbProjectFileMapper baseMapper;
@Resource
private CbProjectRecordMapper projectRecordMapper;
/**
* 添加项目上传文件记录
*
* @param fileUploadBo 上传信息
* @param oss oss信息
* @return
*/
@Override
@Transactional(rollbackFor = Exception.class)
public CbProjectFile addProjectFile(AddProjectFileUploadBo fileUploadBo, SysOssVo oss) {
//校验项目是否存在
CbProjectRecord projectRecord = this.checkProjectExist(fileUploadBo.getProjectId());
CbProjectFile projectFile = BeanUtil.toBean(fileUploadBo, CbProjectFile.class);
projectFile.setCbStage(projectRecord.getCbStage());
projectFile.setFileName(oss.getOriginalName());
projectFile.setFileOssId(oss.getOssId());
projectFile.setFileOssUrl(oss.getUrl());
//项目文件状态:准备中
projectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PREPARING);
baseMapper.insert(projectFile);
return projectFile;
}
/**
* 逻辑删除项目上传文件记录
*
* @param fileId 文件ID
* @return 删除结果
*/
@Override
public Integer deleteProjectFile(Long fileId) {
CbProjectFile projectFile = baseMapper.selectById(fileId);
Assert.notNull(projectFile, "该文件不存在");
return baseMapper.deleteById(projectFile);
}
/**
* 获取项目文件上传详情
*
* @param projectId 项目ID
* @return 文件列表
*/
@Override
public QueryProjectFileUploadDetailVo getProjectFileUploadDetail(Long projectId) {
//校验项目是否存在
this.checkProjectExist(projectId);
List<CbProjectFile> projectFileList = baseMapper.selectList(new LambdaQueryWrapper<CbProjectFile>()
.eq(CbProjectFile::getProjectId, projectId)
//成本阶段
//.eq(CbProjectFile::getCbStage, uploadDetailBo.getCbStage())
//删除状态:否
.eq(CbProjectFile::getDelFlag, CbProjectConstants.DELETE_FLAG_EXIST));
QueryProjectFileUploadDetailVo draftDetailVo = new QueryProjectFileUploadDetailVo();
draftDetailVo.setProjectId(projectId);
if (projectFileList.isEmpty()) {
return draftDetailVo;
}
//按照成本类型分类填充
projectFileList.forEach(fileList -> {
//TODO:此写法太丑陋,待优化
if (Objects.equals(fileList.getCbType(), CbProjectConstants.CB_TYPE_DIRECT_EXPENSE)) {
//直接费成本
draftDetailVo.getDirectExpense().add(fileList);
} else if (Objects.equals(fileList.getCbType(), CbProjectConstants.CB_TYPE_QUANTITY_SUMMARY)) {
//工料汇总
draftDetailVo.getQuantitySummary().add(fileList);
} else if (Objects.equals(fileList.getCbType(), CbProjectConstants.CB_TYPE_MEASURE_PROJECT)) {
//措施项目
draftDetailVo.getMeasureProject().add(fileList);
} else if (Objects.equals(fileList.getCbType(), CbProjectConstants.CB_TYPE_OTHER_PROJECT)) {
//其他项目
draftDetailVo.getOtherProject().add(fileList);
} else if (Objects.equals(fileList.getCbType(), CbProjectConstants.CB_TYPE_SCENE_EXPENSE)) {
//现场经费
draftDetailVo.getSceneExpense().add(fileList);
} else if (Objects.equals(fileList.getCbType(), CbProjectConstants.CB_TYPE_SUMMARY)) {
//成本汇总
draftDetailVo.getCbSummary().add(fileList);
}
});
return draftDetailVo;
}
/**
* 校验项目是否存在
*
* @param projectId 项目ID
* @return 项目实体
*/
private CbProjectRecord checkProjectExist(Long projectId) {
//校验项目是否存在
CbProjectRecord projectRecord = projectRecordMapper.selectById(projectId);
Assert.notNull(projectRecord, "该项目不存在");
return projectRecord;
}
} }
package com.dsk.cscec.service.impl; package com.dsk.cscec.service.impl;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.json.JSONUtil;
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.domain.CbQuantitySummary; import com.dsk.cscec.domain.CbQuantitySummary;
import com.dsk.cscec.domain.CbQuantitySummaryActual;
import com.dsk.cscec.domain.bo.CbProjectBaseBo; import com.dsk.cscec.domain.bo.CbProjectBaseBo;
import com.dsk.cscec.domain.bo.CbQuantitySummaryListBo;
import com.dsk.cscec.domain.vo.CbQuantitySummaryListVo;
import com.dsk.cscec.mapper.CbQuantitySummaryMapper; import com.dsk.cscec.mapper.CbQuantitySummaryMapper;
import com.dsk.cscec.service.ICbQuantitySummaryActualService;
import com.dsk.cscec.service.ICbQuantitySummaryService; import com.dsk.cscec.service.ICbQuantitySummaryService;
import jodd.bean.BeanException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
import java.util.HashMap; import java.util.HashMap;
...@@ -19,18 +30,23 @@ import java.util.stream.Collectors; ...@@ -19,18 +30,23 @@ import java.util.stream.Collectors;
* @author lcl * @author lcl
* @since 2024-02-05 11:06:56 * @since 2024-02-05 11:06:56
*/ */
@Slf4j
@Service @Service
public class CbQuantitySummaryServiceImpl extends ServiceImpl<CbQuantitySummaryMapper, CbQuantitySummary> implements ICbQuantitySummaryService { public class CbQuantitySummaryServiceImpl extends ServiceImpl<CbQuantitySummaryMapper, CbQuantitySummary> implements ICbQuantitySummaryService {
@Autowired
private ICbQuantitySummaryActualService baseActualService;
@Override @Override
public Map<String, Object> subjectTree(CbProjectBaseBo bo) { public Map<String, Object> subjectTree(CbProjectBaseBo bo) {
Map<String, Object> resultMap = new HashMap<>(); Map<String, Object> resultMap = new HashMap<>();
List<Map<String, Object>> list = baseMapper.selectSubject(bo); List<Map<String, Object>> list = baseMapper.selectSubject(bo);
if (!ObjectUtils.isEmpty(list)) { if (!ObjectUtils.isEmpty(list)) {
Map<String, Map<String, Map<String, List<Map<String, Object>>>>> map = list.stream().collect( Map<String, Map<String, Map<String, List<Map<String, Object>>>>> map = list.stream()
Collectors.groupingBy(item -> item.get("one").toString(), .collect(
Collectors.groupingBy(item -> item.get("two").toString(), Collectors.groupingBy(item -> item.get("one").toString(),
Collectors.groupingBy(item -> item.get("three").toString())))); Collectors.groupingBy(item -> item.get("two").toString(),
Collectors.groupingBy(item -> item.get("three").toString()))));
resultMap.put("房建类成本科目", map); resultMap.put("房建类成本科目", map);
} }
int otherSubjectCount = baseMapper.selectOtherSubjectCount(bo); int otherSubjectCount = baseMapper.selectOtherSubjectCount(bo);
...@@ -41,8 +57,48 @@ public class CbQuantitySummaryServiceImpl extends ServiceImpl<CbQuantitySummaryM ...@@ -41,8 +57,48 @@ public class CbQuantitySummaryServiceImpl extends ServiceImpl<CbQuantitySummaryM
} }
@Override @Override
public List<String> monthList(CbProjectBaseBo bo) { public List<String> monthList(CbQuantitySummaryListBo bo) {
return null; return baseMapper.selectMonthList(bo);
}
@Override
public List<CbQuantitySummaryListVo> subjectList(CbQuantitySummaryListBo bo) {
return baseMapper.selectListBySubject(bo);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateActual(List<CbQuantitySummaryActual> list) {
if (ObjectUtils.isEmpty(list)) throw new BeanException("数据不能为空");
for (CbQuantitySummaryActual actual : list) {
if (ObjectUtils.isEmpty(actual.getCbQuantitySummaryId())) throw new BeanException("基础数据id不能为空!");
if (ObjectUtils.isEmpty(actual.getQuantities())) throw new BeanException("工程量(本月用料)不能为空!");
if (ObjectUtils.isEmpty(actual.getRecordDate())) throw new BeanException("填写月份不能为空!");
actual.setId(ObjectUtils.isEmpty(actual.getId()) ? SecureUtil.md5(actual.getCbQuantitySummaryId() + actual.getRecordDate()) : actual.getId());
boolean b = baseActualService.saveOrUpdate(actual);
if (!b) {
log.error("CbQuantitySummaryServiceImpl.updateActual() data insert error! data:" + JSONUtil.toJsonStr(actual));
throw new ServiceException("数据添加错误!");
}
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public void pushData(CbQuantitySummaryActual bo) {
//数据记录
if (ObjectUtils.isEmpty(bo.getId())) throw new BeanException("id不能为空!");
if (ObjectUtils.isEmpty(bo.getPushQuantities())) throw new BeanException("推送工程量不能为空!");
if (ObjectUtils.isEmpty(bo.getIpmProjectCode())) throw new BeanException("IPM项目编码不能为空!");
if (ObjectUtils.isEmpty(bo.getIpmContractCode())) throw new BeanException("IPM合同编码不能为空!");
if (ObjectUtils.isEmpty(bo.getIpmBizCode())) throw new BeanException("IPM作业编码不能为空!");
boolean update = baseActualService.updateById(bo);
if (!update) {
log.error("CbQuantitySummaryServiceImpl.pushData() data update error! data:" + JSONUtil.toJsonStr(bo));
throw new ServiceException("数据添加错误!");
}
//TODO 推送数据
} }
} }
package com.dsk.cscec.service.impl; package com.dsk.cscec.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ObjectUtil;
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.cscec.mapper.CbSummaryMapper; import com.dsk.common.exception.ServiceException;
import com.dsk.cscec.constant.CbProjectConstants;
import com.dsk.cscec.domain.CbProjectFile;
import com.dsk.cscec.domain.CbProjectRecord;
import com.dsk.cscec.domain.CbSummary; import com.dsk.cscec.domain.CbSummary;
import com.dsk.cscec.domain.CbSummaryActual;
import com.dsk.cscec.domain.bo.CbSummaryActualBo;
import com.dsk.cscec.domain.bo.CbSummaryActualListBo;
import com.dsk.cscec.domain.bo.CbSummaryBo;
import com.dsk.cscec.domain.vo.CbSummaryActualListVo;
import com.dsk.cscec.mapper.CbProjectFileMapper;
import com.dsk.cscec.mapper.CbProjectRecordMapper;
import com.dsk.cscec.mapper.CbSummaryActualMapper;
import com.dsk.cscec.mapper.CbSummaryMapper;
import com.dsk.cscec.service.CbSummaryService; import com.dsk.cscec.service.CbSummaryService;
import jodd.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
/** /**
* 成本汇总(CbSummary)表服务实现类 * 成本汇总(CbSummary)表服务实现类
...@@ -14,5 +41,162 @@ import org.springframework.stereotype.Service; ...@@ -14,5 +41,162 @@ import org.springframework.stereotype.Service;
*/ */
@Service @Service
public class CbSummaryServiceImpl extends ServiceImpl<CbSummaryMapper, CbSummary> implements CbSummaryService { public class CbSummaryServiceImpl extends ServiceImpl<CbSummaryMapper, CbSummary> implements CbSummaryService {
@Autowired
private CbProjectFileMapper cbProjectFileMapper;
@Autowired
private CbSummaryActualMapper cbSummaryActualMapper;
@Autowired
private CbProjectRecordMapper cbProjectRecordMapper;
@Override
public void importCbProject(Long projectId, Integer cbStage) {
//获取文件信息
List<CbProjectFile> cbProjectFiles = cbProjectFileMapper.selectList(new LambdaQueryWrapper<CbProjectFile>()
.eq(CbProjectFile::getProjectId, projectId)
.eq(CbProjectFile::getCbStage, cbStage)
.eq(CbProjectFile::getCbType, CbProjectConstants.CB_TYPE_SUMMARY)
);
//解析数据
cbProjectFiles.forEach(cbProjectFile -> {
MultipartFile file = null;//todo
if (cbProjectFile.getFileName().contains("项目")) {
} else if (cbProjectFile.getFileName().contains("项目")) {
} else {
//修改文件状态
cbProjectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_FAIL);
cbProjectFile.setFailRemark("文件名错误!");
cbProjectFileMapper.updateById(cbProjectFile);
}
});
}
@Override
public List<Map<String, Object>> getCbNameList(CbSummaryBo bo) {
Assert.notNull(bo.getProjectId(), "项目id不能为空");
Assert.notNull(bo.getCbStage(), "成本阶段不能为空");
Assert.notNull(bo.getCbType(), "成本类型不能为空");
List<Map<String, Object>> resultList = new ArrayList<>();
bo.setLevel(0);
List<Map<String, Object>> cbNameTop = baseMapper.selectByLevel(bo);
bo.setLevel(1);
List<Map<String, Object>> cbNames = baseMapper.selectByLevel(bo);
resultList.addAll(cbNameTop);
resultList.addAll(cbNames);
return resultList;
}
@Override
public List<CbSummaryActualListVo> getActualList(CbSummaryActualListBo bo) {
Assert.notNull(bo.getId(),"id不能为空");
Assert.notNull(bo.getCbType(),"成本类型不能为空");
if (StringUtil.isBlank(bo.getExpenseDate())) {
//默认当前月
bo.setExpenseDate(DatePattern.SIMPLE_MONTH_FORMAT.format(new Date()));
}
CbSummary cbSummary = baseMapper.selectById(bo.getId());
if (ObjectUtil.isEmpty(cbSummary)) {
return null;
}
List<CbSummaryActualListVo> childrenList = baseMapper.getByParentId(bo.getId(), bo.getExpenseDate());
if (0 == cbSummary.getLevel() && 1 == bo.getCbType()) {
//项目汇总
return childrenList;
}else if(0 == cbSummary.getLevel() && 2 == bo.getCbType()) {
//成本科目汇总
CbSummaryActualListVo cbSummaryActualListVo = baseMapper.getById(bo.getId(), bo.getExpenseDate());
cbSummaryActualListVo.setChildren(childrenList);
List<CbSummaryActualListVo> list = new ArrayList<>();
list.add(cbSummaryActualListVo);
return list;
}else {
childrenList = getProjectSumList(bo);
CbSummaryActualListVo cbSummaryActualListVo = baseMapper.getById(bo.getId(),bo.getExpenseDate());
cbSummaryActualListVo.setChildren(childrenList);
List<CbSummaryActualListVo> list = new ArrayList<>();
list.add(cbSummaryActualListVo);
return list;
}
}
/**
* 成本汇总列表
*
* @param bo
* @return
*/
private List<CbSummaryActualListVo> getProjectSumList(CbSummaryActualListBo bo) {
List<CbSummaryActualListVo> childrenList = baseMapper.getByParentId(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;
}
@Override
public List<String> getExpenseDateList(CbSummaryBo bo) {
Assert.notNull(bo.getProjectId(),"项目id不能为空");
Assert.notNull(bo.getCbStage(),"成本阶段不能为空");
Assert.notNull(bo.getCbType(),"成本类型不能为空");
return baseMapper.getExpenseDateList(bo);
}
@Override
@Transactional(rollbackFor = Exception.class)
public boolean insertOrUpdateActual(List<CbSummaryActualBo> boList) {
if (CollectionUtil.isEmpty(boList)) {
return false;
}
boList.forEach(bo->{
Assert.notNull(bo.getCbSummaryId(),"成本汇总id不能为空");
Assert.notNull(bo.getExpenseDate(),"费用日期不能为空");
});
List<CbSummaryActual> actualList = BeanUtil.copyToList(boList, CbSummaryActual.class);
//todo
// throw new ServiceException("当前成本已锁定,不允许编辑!");
return cbSummaryActualMapper.insertOrUpdateBatch(actualList) > 0;
}
@Override
public List<CbSummaryActualListVo> getAll(CbSummaryActualListBo bo) {
Assert.notNull(bo.getId(), "项目id不能为空");
Assert.notNull(bo.getCbType(), "成本类型不能为空");
Assert.notNull(bo.getExpenseDate(), "费用日期不能为空");
//获取项目成本阶段
CbProjectRecord cbProjectRecord = cbProjectRecordMapper.selectById(bo.getId());
if (ObjectUtil.isNull(cbProjectRecord)) {
throw new ServiceException("当前项目不存在");
}
bo.setCbStage(cbProjectRecord.getCbStage());
if (bo.getCbType() == 1) {
return baseMapper.getProjectAll(bo);
} else {
return baseMapper.getCostAccountAll(bo);
}
//todo 截至本月费用汇总
}
} }
package com.dsk.cscec.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsk.cscec.domain.CbCostMeasure;
import com.dsk.cscec.domain.CbCostMeasureActual;
import com.dsk.cscec.mapper.CbCostMeasureActualMapper;
import com.dsk.cscec.mapper.CbCostMeasureMapper;
import com.dsk.cscec.service.ICbCostMeasureActualService;
import org.springframework.stereotype.Service;
/**
* @author tanyang
* @create 2024-02-07 9:38
**/
@Service
public class ICbCostMeasureActualServiceImpl extends ServiceImpl<CbCostMeasureActualMapper, CbCostMeasureActual> implements ICbCostMeasureActualService {
}
...@@ -11,7 +11,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; ...@@ -11,7 +11,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsk.common.core.domain.PageQuery; import com.dsk.common.core.domain.PageQuery;
import com.dsk.common.core.page.TableDataInfo; import com.dsk.common.core.page.TableDataInfo;
import com.dsk.common.exception.ServiceException;
import com.dsk.common.utils.StringUtils; import com.dsk.common.utils.StringUtils;
import com.dsk.cscec.constant.AdvisoryBodyManageQueryConstants; import com.dsk.cscec.constant.AdvisoryBodyManageQueryConstants;
import com.dsk.cscec.domain.AdvisoryBody; import com.dsk.cscec.domain.AdvisoryBody;
...@@ -20,7 +19,6 @@ import com.dsk.cscec.domain.DProject; ...@@ -20,7 +19,6 @@ import com.dsk.cscec.domain.DProject;
import com.dsk.cscec.domain.bo.CooperateProjectDetailSearchBo; import com.dsk.cscec.domain.bo.CooperateProjectDetailSearchBo;
import com.dsk.cscec.domain.bo.ProjectDetailBo; import com.dsk.cscec.domain.bo.ProjectDetailBo;
import com.dsk.cscec.domain.bo.ProjectSearchBo; import com.dsk.cscec.domain.bo.ProjectSearchBo;
import com.dsk.cscec.domain.vo.AdvisoryBodyExistVo;
import com.dsk.cscec.domain.vo.CooperateProjectDetailSearchVo; import com.dsk.cscec.domain.vo.CooperateProjectDetailSearchVo;
import com.dsk.cscec.domain.vo.ProjectDetailVo; import com.dsk.cscec.domain.vo.ProjectDetailVo;
import com.dsk.cscec.domain.vo.ProjectSearchVo; import com.dsk.cscec.domain.vo.ProjectSearchVo;
...@@ -248,5 +246,17 @@ public class IDProjectServiceImpl extends ServiceImpl<DProjectMapper, DProject> ...@@ -248,5 +246,17 @@ public class IDProjectServiceImpl extends ServiceImpl<DProjectMapper, DProject>
} }
return projectDetailVo; return projectDetailVo;
} }
/**
* 校验项目编码是否存在
*
* @param projectCode 项目编码
* @return 校验结果
*/
@Override
public Boolean checkProjectCodeExist(String projectCode) {
return baseMapper.exists(new LambdaQueryWrapper<DProject>()
.eq(DProject::getProjectCode, projectCode));
}
} }
<?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.CbCostMeasureActualMapper">
<resultMap id="BaseResultMap" type="com.dsk.cscec.domain.CbCostMeasureActual">
<!--@mbg.generated-->
<!--@Table cb_cost_measure_actual-->
<id column="id" jdbcType="BIGINT" property="id" />
<result column="plan_measure_id" jdbcType="BIGINT" property="planMeasureId" />
<result column="month_cost_rate" jdbcType="DECIMAL" property="monthCostRate" />
<result column="cost_effective" jdbcType="DECIMAL" property="costEffective" />
<result column="current_project_volume" jdbcType="DECIMAL" property="currentProjectVolume" />
<result column="submit_project_volume" jdbcType="DECIMAL" property="submitProjectVolume" />
<result column="month" jdbcType="VARCHAR" property="month" />
<result column="push_time" jdbcType="TIMESTAMP" property="pushTime" />
<result column="push_data_json" jdbcType="LONGVARCHAR" property="pushDataJson" />
<result column="del_flag" jdbcType="INTEGER" property="delFlag" />
<result column="update_user" jdbcType="VARCHAR" property="updateUser" />
<result column="update_id" jdbcType="VARCHAR" property="updateId" />
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
</resultMap>
<sql id="Base_Column_List">
<!--@mbg.generated-->
id, plan_measure_id, month_cost_rate, cost_effective, current_project_volume, submit_project_volume,
`month`, push_time, push_data_json, del_flag, update_user, update_id, create_time,
update_time
</sql>
<insert id="insertSelective" keyColumn="id" keyProperty="id" parameterType="com.dsk.cscec.domain.CbCostMeasureActual" useGeneratedKeys="true">
<!--@mbg.generated-->
insert into cb_cost_measure_actual
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="planMeasureId != null">
plan_measure_id,
</if>
<if test="monthCostRate != null">
month_cost_rate,
</if>
<if test="costEffective != null">
cost_effective,
</if>
<if test="currentProjectVolume != null">
current_project_volume,
</if>
<if test="submitProjectVolume != null">
submit_project_volume,
</if>
<if test="month != null">
`month`,
</if>
<if test="pushTime != null">
push_time,
</if>
<if test="pushDataJson != null">
push_data_json,
</if>
<if test="delFlag != null">
del_flag,
</if>
<if test="updateUser != null">
update_user,
</if>
<if test="updateId != null">
update_id,
</if>
<if test="createTime != null">
create_time,
</if>
<if test="updateTime != null">
update_time,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="planMeasureId != null">
#{planMeasureId,jdbcType=BIGINT},
</if>
<if test="monthCostRate != null">
#{monthCostRate,jdbcType=DECIMAL},
</if>
<if test="costEffective != null">
#{costEffective,jdbcType=DECIMAL},
</if>
<if test="currentProjectVolume != null">
#{currentProjectVolume,jdbcType=DECIMAL},
</if>
<if test="submitProjectVolume != null">
#{submitProjectVolume,jdbcType=DECIMAL},
</if>
<if test="month != null">
#{month,jdbcType=VARCHAR},
</if>
<if test="pushTime != null">
#{pushTime,jdbcType=TIMESTAMP},
</if>
<if test="pushDataJson != null">
#{pushDataJson,jdbcType=LONGVARCHAR},
</if>
<if test="delFlag != null">
#{delFlag,jdbcType=INTEGER},
</if>
<if test="updateUser != null">
#{updateUser,jdbcType=VARCHAR},
</if>
<if test="updateId != null">
#{updateId,jdbcType=VARCHAR},
</if>
<if test="createTime != null">
#{createTime,jdbcType=TIMESTAMP},
</if>
<if test="updateTime != null">
#{updateTime,jdbcType=TIMESTAMP},
</if>
</trim>
</insert>
<update id="updateByPrimaryKeySelective" parameterType="com.dsk.cscec.domain.CbCostMeasureActual">
<!--@mbg.generated-->
update cb_cost_measure_actual
<set>
<if test="planMeasureId != null">
plan_measure_id = #{planMeasureId,jdbcType=BIGINT},
</if>
<if test="monthCostRate != null">
month_cost_rate = #{monthCostRate,jdbcType=DECIMAL},
</if>
<if test="costEffective != null">
cost_effective = #{costEffective,jdbcType=DECIMAL},
</if>
<if test="currentProjectVolume != null">
current_project_volume = #{currentProjectVolume,jdbcType=DECIMAL},
</if>
<if test="submitProjectVolume != null">
submit_project_volume = #{submitProjectVolume,jdbcType=DECIMAL},
</if>
<if test="month != null">
`month` = #{month,jdbcType=VARCHAR},
</if>
<if test="pushTime != null">
push_time = #{pushTime,jdbcType=TIMESTAMP},
</if>
<if test="pushDataJson != null">
push_data_json = #{pushDataJson,jdbcType=LONGVARCHAR},
</if>
<if test="delFlag != null">
del_flag = #{delFlag,jdbcType=INTEGER},
</if>
<if test="updateUser != null">
update_user = #{updateUser,jdbcType=VARCHAR},
</if>
<if test="updateId != null">
update_id = #{updateId,jdbcType=VARCHAR},
</if>
<if test="createTime != null">
create_time = #{createTime,jdbcType=TIMESTAMP},
</if>
<if test="updateTime != null">
update_time = #{updateTime,jdbcType=TIMESTAMP},
</if>
</set>
where id = #{id,jdbcType=BIGINT}
</update>
<select id="selectDataList" resultType="com.dsk.cscec.domain.vo.CbCostMeasureActualVo">
SELECT t1.plan_measure_id,
t1.month_cost_rate,
t1.cost_effective,
t1.month_cost_rate,
t1.current_project_volume,
t1.submit_project_volume,
t1.`month`,
t1.push_time
FROM cb_cost_measure t
inner JOIN cb_cost_measure_actual t1 ON t1.plan_measure_id=t.id
WHERE
t.project_id=#{projectId}
AND t.cb_stage=#{cbStage}
AND t1.`month`=#{month}
</select>
</mapper>
\ No newline at end of file
...@@ -2,6 +2,5 @@ ...@@ -2,6 +2,5 @@
<!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.CbProjectFileMapper"> <mapper namespace="com.dsk.cscec.mapper.CbProjectFileMapper">
</mapper> </mapper>
<?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
...@@ -17,5 +17,15 @@ ...@@ -17,5 +17,15 @@
id, cb_summary_id, tax_inclusive_expense, tax_exclusive_expense, expense_date, lock_status, create_time, del_flag id, cb_summary_id, tax_inclusive_expense, tax_exclusive_expense, expense_date, lock_status, create_time, del_flag
</sql> </sql>
<insert id="insertOrUpdateBatch" keyProperty="id" useGeneratedKeys="true">
insert into cb_summary_actual(id,cb_summary_id, tax_inclusive_expense, tax_exclusive_expense,expense_date)
values
<foreach collection="entities" item="entity" separator=",">
(#{entity.id}, #{entity.cbSummaryId}, #{entity.taxInclusiveExpense}, #{entity.taxExclusiveExpense}, #{entity.expenseDate})
</foreach>
on duplicate key update
cb_summary_id = values(cb_summary_id) , tax_inclusive_expense = values(tax_inclusive_expense) ,
tax_exclusive_expense = values(tax_exclusive_expense) , expense_date = values(expense_date)
</insert>
</mapper> </mapper>
import request from '@/utils/request'
//校验项目编码是否存在
export function checkProjectCodeExist (data) {
return request({
url: '/cbProjectRecord/checkProjectCodeExist/'+data,
method: 'get',
})
}
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="12" height="12" viewBox="0 0 12 12"><g><g><path d="M2,6C2,3.79085,3.79085,2,6,2C8.209150000000001,2,10,3.79085,10,6C10,8.209150000000001,8.209150000000001,10,6,10C3.79085,10,2,8.209150000000001,2,6C2,6,2,6,2,6ZM6,1C3.23857,1,1,3.23857,1,6C1,8.76143,3.23857,11,6,11C8.76143,11,11,8.76143,11,6C11,3.23857,8.76143,1,6,1C6,1,6,1,6,1ZM5.15,4.99465C5.15,4.99465,5.15,4.8793500000000005,5.15,4.8793500000000005C5.1506,4.742179999999999,5.19968,4.59,5.30912,4.4756C5.41022,4.369949999999999,5.60728,4.25,5.99713,4.25C6.36322,4.25,6.61783,4.424799999999999,6.74765,4.6232500000000005C6.8863,4.8351500000000005,6.85897,5.01298,6.79318,5.10183C6.7111,5.21263,6.6092,5.31495,6.48607,5.4258C6.4486,5.45953,6.40242,5.49972,6.3529,5.5428C6.3529,5.5428,6.3529,5.54283,6.3529,5.54283C6.26435,5.61985,6.16515,5.70617,6.08605,5.78145C5.80517,6.0487,5.5001,6.4217,5.5001,7C5.5001,7,5.50173,7.2532,5.50173,7.2532C5.50173,7.2532,6.5017,7.2468,6.5017,7.2468C6.5017,7.2468,6.5001,6.99862,6.5001,6.99862C6.50047,6.82762,6.57058,6.70078,6.77537,6.5059C6.84422,6.4404,6.9061,6.38685,6.9769,6.3256C6.9769,6.3256,6.97692,6.32557,6.97692,6.32557C7.0293,6.28027,7.08655,6.23075,7.15513,6.16902C7.2977,6.04065,7.45638,5.88653,7.59675,5.69702C7.9758,5.1853,7.88715,4.5384,7.58448,4.07575C7.27297,3.59963,6.7062,3.25,5.99713,3.25C5.3835,3.25,4.90777,3.44858,4.58658,3.78428C4.27393,4.1110500000000005,4.1511499999999995,4.5227699999999995,4.15,4.87683C4.15,4.87683,4.15,4.99465,4.15,4.99465C4.15,4.99465,5.15,4.99465,5.15,4.99465C5.15,4.99465,5.15,4.99465,5.15,4.99465ZM5.5017,7.75C5.5017,7.75,5.5017,8.75195,5.5017,8.75195C5.5017,8.75195,6.5017,8.75195,6.5017,8.75195C6.5017,8.75195,6.5017,7.75,6.5017,7.75C6.5017,7.75,5.5017,7.75,5.5017,7.75C5.5017,7.75,5.5017,7.75,5.5017,7.75Z" fill-rule="evenodd" fill="#FFAB44" fill-opacity="1"/></g></g></svg>
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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