Commit 71890932 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 24ec91f8 c8ae06e9
...@@ -200,6 +200,7 @@ tenant: ...@@ -200,6 +200,7 @@ tenant:
- cb_scene_expense_children - cb_scene_expense_children
- cb_scene_expense_month - cb_scene_expense_month
- cb_subject - cb_subject
- cb_project_other
# MyBatisPlus配置 # MyBatisPlus配置
# https://baomidou.com/config/ # https://baomidou.com/config/
......
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.CbProjectOther;
import com.dsk.cscec.domain.bo.CbProjectBaseBo;
import com.dsk.cscec.service.CbProjectFileService;
import com.dsk.cscec.service.CbProjectOtherService;
import com.dsk.system.service.ISysOssService;
import lombok.extern.slf4j.Slf4j;
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
*/
@Slf4j
@Component
public class CbProjectOtherAnalysisComponent {
@Resource
private CbProjectOtherService projectOtherService;
@Resource
private CbProjectFileService projectFileService;
@Resource
private ISysOssService ossService;
@Resource
private TransactionTemplate transactionTemplate;
/**
* 其他费用数据解析
*/
@Async
public void projectOtherDataAnalysis(CbProjectBaseBo bo) throws Exception {
//查询其他费用导入文件
List<CbProjectFile> fileList = projectFileService.list(Wrappers.<CbProjectFile>lambdaQuery()
.eq(CbProjectFile::getProjectId, bo.getProjectId())
.eq(CbProjectFile::getCbType, CbProjectConstants.CB_TYPE_OTHER_PROJECT)
.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<CbProjectOther> importList = new ExcelUtils<>(CbProjectOther.class).importExcelAllSheet(inputStream, 1);
if (importList.isEmpty()) {
file.setFileParseStatus(3);
file.setFailRemark("表格中不存在待导入数据!");
projectFileService.updateById(file);
break;
}
List<CbProjectOther> projectOtherList = importList.stream().parallel()
.peek(item -> {
item.setProjectId(bo.getProjectId());
item.setCbStage(bo.getCbStage());
item.setCbProjectFileId(file.getId());
}).collect(Collectors.toList());
if (projectOtherList.isEmpty()) {
throw new ServiceException("表格中不存在有效数据数据!");
}
transactionTemplate.execute(status -> {
try {
//分批次插入
if (projectOtherList.size() > 1000) {
int index = 0;
int sum = projectOtherList.size();
while (index < sum) {
List<CbProjectOther> divideList = projectOtherList.subList(index, Math.max((index + 1) * 1000, sum));
boolean b = projectOtherService.saveBatch(divideList);
if (!b) {
throw new ServiceException("数据插入失败!");
}
index += 1000;
}
} else {
boolean b = projectOtherService.saveBatch(projectOtherList);
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 {
projectOtherService.remove(Wrappers.<CbProjectOther>lambdaQuery().eq(CbProjectOther::getCbProjectFileId, file.getId()));
projectFileService.removeById(file);
}
}
}
}
package com.dsk.cscec.constant;
/**
* 二期项目常量信息
*
* @author sxk
* @date 2024.02.05
* @time 15:29
*/
public interface CbSceneExpenseConstants {
/**
* 菜单来源:文件表
*/
Integer MENU_SOURCE_FILE_TABLE = 0;
/**
* 菜单来源:财务一体化系统
*/
Integer MENU_SOURCE_FINANCE_SYSTEM = 1;
/**
* 菜单层级一级(顶级)
*/
Integer MENU_LEVEL1 = 1;
/**
* 菜单层级二级
*/
Integer MENU_LEVEL2 = 2;
}
...@@ -17,6 +17,7 @@ import com.dsk.common.helper.LoginHelper; ...@@ -17,6 +17,7 @@ import com.dsk.common.helper.LoginHelper;
import com.dsk.common.utils.poi.ExcelUtil; import com.dsk.common.utils.poi.ExcelUtil;
import com.dsk.common.utils.redis.RedisUtils; import com.dsk.common.utils.redis.RedisUtils;
import com.dsk.cscec.domain.CbCostMeasure; import com.dsk.cscec.domain.CbCostMeasure;
import com.dsk.cscec.domain.CbProjectExpenseSummary;
import com.dsk.cscec.domain.bo.CbCostMeasureActualBo; import com.dsk.cscec.domain.bo.CbCostMeasureActualBo;
import com.dsk.cscec.domain.bo.CbCostMeasureActualPushBo; import com.dsk.cscec.domain.bo.CbCostMeasureActualPushBo;
import com.dsk.cscec.domain.bo.CbCostMeasureActualSaveBo; import com.dsk.cscec.domain.bo.CbCostMeasureActualSaveBo;
...@@ -24,6 +25,7 @@ import com.dsk.cscec.domain.vo.CbCostMeasureActualVo; ...@@ -24,6 +25,7 @@ import com.dsk.cscec.domain.vo.CbCostMeasureActualVo;
import com.dsk.cscec.domain.vo.CbCostMeasuresImportVo; import com.dsk.cscec.domain.vo.CbCostMeasuresImportVo;
import com.dsk.cscec.domain.vo.CbCostMeasuresItemVo; import com.dsk.cscec.domain.vo.CbCostMeasuresItemVo;
import com.dsk.cscec.listener.ProjectCostMeasureImportListener; import com.dsk.cscec.listener.ProjectCostMeasureImportListener;
import com.dsk.cscec.service.CbProjectExpenseSummaryService;
import com.dsk.cscec.service.ICbCostMeasureService; import com.dsk.cscec.service.ICbCostMeasureService;
import com.dsk.system.domain.vo.SysUserImportVo; import com.dsk.system.domain.vo.SysUserImportVo;
import com.dsk.system.listener.SysUserImportListener; import com.dsk.system.listener.SysUserImportListener;
...@@ -38,8 +40,10 @@ import java.io.File; ...@@ -38,8 +40,10 @@ import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors;
/** /**
* 措施费导入 * 措施费导入
...@@ -55,6 +59,10 @@ public class CbCostMeasureController { ...@@ -55,6 +59,10 @@ public class CbCostMeasureController {
private ICbCostMeasureService cbCostMeasureService; private ICbCostMeasureService cbCostMeasureService;
@Autowired
private CbProjectExpenseSummaryService cbProjectExpenseSummaryService;
/** /**
* 措施费一级大类 * 措施费一级大类
* 根据项目查询措施费一级大类 * 根据项目查询措施费一级大类
...@@ -150,7 +158,22 @@ public class CbCostMeasureController { ...@@ -150,7 +158,22 @@ public class CbCostMeasureController {
// @SaCheckPermission("system:user:import") // @SaCheckPermission("system:user:import")
@PostMapping(value = "/importData", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) @PostMapping(value = "/importData", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public R<Void> importData(@RequestPart("file") MultipartFile file, Long projectId) throws Exception { public R<Void> importData(@RequestPart("file") MultipartFile file, Long projectId) throws Exception {
cbCostMeasureService.importExcelData(file,projectId); String name = file.getOriginalFilename();
cbCostMeasureService.importExcelData(file.getInputStream(),name,null,projectId);
return R.ok();
}
/**
* 措施费导入数据
*
* @param projectId 项目id
*/
@SaIgnore
@Log(title = "措施费导入", businessType = BusinessType.IMPORT)
@PostMapping(value = "/parseCbCostMeasureFile")
public R<Void> parseCbCostMeasureFile(Long projectId) throws Exception {
cbCostMeasureService.parseCbCostMeasureFile(projectId);
return R.ok(); return R.ok();
} }
...@@ -168,11 +191,23 @@ public class CbCostMeasureController { ...@@ -168,11 +191,23 @@ public class CbCostMeasureController {
@PostMapping(value = "/summary/importData", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) @PostMapping(value = "/summary/importData", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public R<Void> importSummaryData(@RequestPart("file") MultipartFile file, Long projectId) throws Exception { public R<Void> importSummaryData(@RequestPart("file") MultipartFile file, Long projectId) throws Exception {
Integer dataType=2; Integer dataType=2;
cbCostMeasureService.importExcelSummaryData(file,projectId,dataType); cbCostMeasureService.importExcelSummaryData(file.getInputStream(),projectId,null,dataType);
return R.ok(); return R.ok();
} }
@SaIgnore
@Log(title = "措施费汇总获取")
// @SaCheckPermission("system:user:import")
@PostMapping(value = "/summary/data")
public R<List<CbProjectExpenseSummary>> summaryData(Long projectId) throws Exception {
Integer dataType=2;
List<CbProjectExpenseSummary> cbProjectExpenseSummaries = cbProjectExpenseSummaryService.queryCbSceneExpenseSummaryDataByType(projectId, dataType);
return R.ok(cbProjectExpenseSummaries);
}
public static void main(String[] args) throws FileNotFoundException { public static void main(String[] args) throws FileNotFoundException {
List list =new ArrayList<>(); List list =new ArrayList<>();
...@@ -180,7 +215,7 @@ public class CbCostMeasureController { ...@@ -180,7 +215,7 @@ public class CbCostMeasureController {
FileInputStream inputStream=new FileInputStream(file); FileInputStream inputStream=new FileInputStream(file);
ExcelResult<CbCostMeasuresImportVo> result = ExcelUtil.importExcel(inputStream, CbCostMeasuresImportVo.class, new ProjectCostMeasureImportListener(1L,1)); ExcelResult<CbCostMeasuresImportVo> result = ExcelUtil.importExcel(inputStream, CbCostMeasuresImportVo.class, new ProjectCostMeasureImportListener(1L));
String analysis = result.getAnalysis(); String analysis = result.getAnalysis();
List<CbCostMeasuresImportVo> list1 = result.getList(); List<CbCostMeasuresImportVo> list1 = result.getList();
......
package com.dsk.cscec.controller;
import com.dsk.common.core.controller.BaseController;
import com.dsk.common.core.domain.R;
import com.dsk.common.helper.LoginHelper;
import com.dsk.cscec.domain.CbProjectExpenseSummary;
import com.dsk.cscec.service.CbProjectExpenseSummaryService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.validation.constraints.NotNull;
import java.util.List;
import java.util.Objects;
/**
* 项目费用汇总表(CbProjectExpenseSummary)表控制层
*
* @author sxk
* @since 2024-02-22 09:59:28
*/
@RestController
@RequestMapping("CbProjectExpenseSummary")
public class CbProjectExpenseSummaryController extends BaseController {
/**
* 服务对象
*/
@Resource
private CbProjectExpenseSummaryService baseService;
/**
* 现场经费汇总数据解析
*/
@GetMapping("/parseCbSceneExpenseData/{projectId}")
public R<Void> parseCbSceneExpenseData(@PathVariable Long projectId) throws Exception {
String username = Objects.requireNonNull(LoginHelper.getLoginUser()).getUsername();
baseService.parseSceneExpenseSummaryData(projectId, 1, username);
return R.ok();
}
/**
* 获取现场经费汇总数据
*/
@GetMapping("/getCbSceneExpenseSummaryData/{projectId}")
public R<List<CbProjectExpenseSummary>> getCbSceneExpenseSummaryData(@NotNull(message = "项目ID不能为空") @PathVariable Long projectId) {
return R.ok(baseService.getCbSceneExpenseSummaryData(projectId));
}
}
...@@ -7,7 +7,6 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; ...@@ -7,7 +7,6 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.dsk.common.annotation.Log; import com.dsk.common.annotation.Log;
import com.dsk.common.core.domain.R; import com.dsk.common.core.domain.R;
import com.dsk.common.enums.BusinessType; import com.dsk.common.enums.BusinessType;
import com.dsk.component.CbProjectOtherAnalysisComponent;
import com.dsk.cscec.domain.CbProjectExpenseSummary; import com.dsk.cscec.domain.CbProjectExpenseSummary;
import com.dsk.cscec.domain.bo.CbProjectBaseBo; import com.dsk.cscec.domain.bo.CbProjectBaseBo;
import com.dsk.cscec.domain.bo.CbProjectOtherBo; import com.dsk.cscec.domain.bo.CbProjectOtherBo;
...@@ -41,12 +40,9 @@ public class CbProjectOtherController { ...@@ -41,12 +40,9 @@ public class CbProjectOtherController {
@Resource @Resource
private CbProjectExpenseSummaryService cbProjectExpenseSummaryService; private CbProjectExpenseSummaryService cbProjectExpenseSummaryService;
@Resource
private CbProjectOtherAnalysisComponent otherAnalysisComponent;
@GetMapping(value = "/projectOther/dataAnalysis") @GetMapping(value = "/projectOther/dataAnalysis")
public R<List<CbProjectExpenseSummary>> projectOtherDataAnalysis(CbProjectBaseBo baseBo) throws Exception{ public R<List<CbProjectExpenseSummary>> projectOtherDataAnalysis(CbProjectBaseBo baseBo) throws Exception{
otherAnalysisComponent.projectOtherDataAnalysis(baseBo); projectOtherService.projectOtherDataAnalysis(baseBo);
return R.ok(); return R.ok();
} }
...@@ -62,9 +58,9 @@ public class CbProjectOtherController { ...@@ -62,9 +58,9 @@ public class CbProjectOtherController {
public R<List<CbProjectExpenseSummary>> statistics(@PathVariable Long projectId) { public R<List<CbProjectExpenseSummary>> statistics(@PathVariable Long projectId) {
CbProjectExpenseSummary expenseSummary = new CbProjectExpenseSummary(); CbProjectExpenseSummary expenseSummary = new CbProjectExpenseSummary();
expenseSummary.setProjectId(projectId); expenseSummary.setProjectId(projectId);
expenseSummary.setDataType(2); expenseSummary.setDataType(3);
QueryWrapper<CbProjectExpenseSummary> queryWrapper = Wrappers.query(expenseSummary); QueryWrapper<CbProjectExpenseSummary> queryWrapper = Wrappers.query(expenseSummary);
queryWrapper.select("id","expense_name as expenseName","expense_value as expenseValue"); queryWrapper.select("id","expense_name as expenseName","expense_value as expenseValue","proportion");
queryWrapper.orderByAsc("id"); queryWrapper.orderByAsc("id");
List<CbProjectExpenseSummary> expenseSummaryList = this.cbProjectExpenseSummaryService.list(queryWrapper); List<CbProjectExpenseSummary> expenseSummaryList = this.cbProjectExpenseSummaryService.list(queryWrapper);
if (ObjectUtil.isEmpty(expenseSummaryList)) { if (ObjectUtil.isEmpty(expenseSummaryList)) {
......
...@@ -7,6 +7,7 @@ import com.dsk.common.core.domain.R; ...@@ -7,6 +7,7 @@ import com.dsk.common.core.domain.R;
import com.dsk.common.core.page.TableDataInfo; 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.*; import com.dsk.cscec.domain.bo.*;
import com.dsk.cscec.domain.vo.CbProjectCbStageNotDraftVo;
import com.dsk.cscec.domain.vo.CbProjectRecordSearchVo; import com.dsk.cscec.domain.vo.CbProjectRecordSearchVo;
import com.dsk.cscec.service.CbProjectRecordService; import com.dsk.cscec.service.CbProjectRecordService;
import com.dsk.cscec.service.IDProjectService; import com.dsk.cscec.service.IDProjectService;
...@@ -108,7 +109,7 @@ public class CbProjectRecordController extends BaseController { ...@@ -108,7 +109,7 @@ public class CbProjectRecordController extends BaseController {
* 即查询当前项目非草稿的成本阶段 * 即查询当前项目非草稿的成本阶段
*/ */
@GetMapping("/getProjectCbStageNotDraft/{relatedId}") @GetMapping("/getProjectCbStageNotDraft/{relatedId}")
public R<List<Integer>> getProjectCbStageNotDraft(@PathVariable Long relatedId) { public R<List<CbProjectCbStageNotDraftVo>> getProjectCbStageNotDraft(@PathVariable Long relatedId) {
return R.ok(baseService.getProjectCbStageNotDraft(relatedId)); return R.ok(baseService.getProjectCbStageNotDraft(relatedId));
} }
......
package com.dsk.cscec.controller; package com.dsk.cscec.controller;
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.helper.LoginHelper;
import com.dsk.cscec.domain.CbSceneExpenseChildren;
import com.dsk.cscec.domain.bo.CbSceneExpenseChildrenDataBo;
import com.dsk.cscec.domain.vo.CbSceneExpenseMenuVo;
import com.dsk.cscec.service.CbSceneExpenseChildrenService; import com.dsk.cscec.service.CbSceneExpenseChildrenService;
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.validation.constraints.NotNull;
import java.util.List;
import java.util.Objects;
/** /**
* 现场经费-工资统筹、其他费用、现场管理费表(CbSceneExpenseChildren)表控制层 * 现场经费-工资统筹、其他费用、现场管理费表(CbSceneExpenseChildren)表控制层
...@@ -22,6 +30,29 @@ public class CbSceneExpenseChildrenController extends BaseController { ...@@ -22,6 +30,29 @@ public class CbSceneExpenseChildrenController extends BaseController {
@Resource @Resource
private CbSceneExpenseChildrenService baseService; private CbSceneExpenseChildrenService baseService;
/**
* 获取现场经费菜单
*/
@GetMapping("/getMenuList/{projectId}")
public R<List<CbSceneExpenseMenuVo>> getMenuList(@NotNull(message = "项目ID不能为空") @PathVariable Long projectId) {
return R.ok(baseService.getMenuList(projectId));
}
} /**
* 现场经费二级分类数据解析
*/
@GetMapping("/parseChildrenData/{projectId}")
public R<Void> parseSceneExpenseChildrenData(@PathVariable Long projectId) throws Exception {
String username = Objects.requireNonNull(LoginHelper.getLoginUser()).getUsername();
baseService.parseSceneExpenseChildrenData(projectId, 1, username);
return R.ok();
}
/**
* 获取现场经费二级分类数据
*/
@GetMapping("/getChildrenData")
public R<List<CbSceneExpenseChildren>> getChildrenData(@Validated @RequestBody CbSceneExpenseChildrenDataBo childrenDataBo) {
return R.ok(baseService.getChildrenData(childrenDataBo));
}
}
\ No newline at end of file
...@@ -28,7 +28,7 @@ public class CbCostMeasure { ...@@ -28,7 +28,7 @@ public class CbCostMeasure {
/** /**
* 成本阶段( 0:标前成本、1:标后成本、2:转固成本) * 成本阶段( 0:标前成本、1:标后成本、2:转固成本)
*/ */
private Integer cbStage; private Long projectFileId;
/** /**
* 父项id * 父项id
......
package com.dsk.cscec.domain; package com.dsk.cscec.domain;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.annotation.TableField; import com.dsk.common.annotation.Excel;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.util.Date;
import lombok.Data; import lombok.Data;
import java.util.Date;
/** /**
* 项目费用汇总表 * 项目费用汇总表
*/ */
@Data @Data
@TableName(value = "cb_project_expense_summary") @TableName(value = "cb_project_expense_summary")
public class CbProjectExpenseSummary { public class CbProjectExpenseSummary {
...@@ -25,6 +24,11 @@ public class CbProjectExpenseSummary { ...@@ -25,6 +24,11 @@ public class CbProjectExpenseSummary {
@TableField(value = "project_id") @TableField(value = "project_id")
private Long projectId; private Long projectId;
/**
* 项目文件ID
*/
private Long projectFileId;
/** /**
* 成本阶段(0:标前成本、1:标后成本、2:转固成本) * 成本阶段(0:标前成本、1:标后成本、2:转固成本)
*/ */
...@@ -34,11 +38,11 @@ public class CbProjectExpenseSummary { ...@@ -34,11 +38,11 @@ public class CbProjectExpenseSummary {
/** /**
* 序号 * 序号
*/ */
@TableField(value = "`number`") @TableField(value = "number")
private String number; private String number;
/** /**
* 数据类型(0:现场经费、1:其他费用) * 数据类型(2:措施项目、3:其他项目、4:现场经费)
*/ */
@TableField(value = "data_type") @TableField(value = "data_type")
private Integer dataType; private Integer dataType;
...@@ -47,24 +51,28 @@ public class CbProjectExpenseSummary { ...@@ -47,24 +51,28 @@ public class CbProjectExpenseSummary {
* 名称 * 名称
*/ */
@TableField(value = "expense_name") @TableField(value = "expense_name")
@Excel(name = "名称")
private String expenseName; private String expenseName;
/** /**
* 数值 * 数值
*/ */
@TableField(value = "expense_value") @TableField(value = "expense_value")
@Excel(name = "数值")
private String expenseValue; private String expenseValue;
/** /**
* 占比 * 占比
*/ */
@TableField(value = "proportion") @TableField(value = "proportion")
@Excel(name = "占比")
private String proportion; private String proportion;
/** /**
* 删除状态(0:否、2:是) * 删除状态(0:否、2:是)
*/ */
@TableField(value = "del_flag") @TableField(value = "del_flag")
@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.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic; 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;
import org.apache.ibatis.type.JdbcType;
import java.io.Serializable; import java.io.Serializable;
...@@ -54,6 +57,7 @@ public class CbProjectFile extends BaseEntity implements Serializable { ...@@ -54,6 +57,7 @@ public class CbProjectFile extends BaseEntity implements Serializable {
/** /**
* 失败备注 * 失败备注
*/ */
@TableField(value = "fail_remark", updateStrategy = FieldStrategy.IGNORED, jdbcType = JdbcType.VARCHAR)
private String failRemark; private String failRemark;
/** /**
* 删除状态(0:否、1:待删除、2:是) * 删除状态(0:否、1:待删除、2:是)
......
package com.dsk.cscec.domain; package com.dsk.cscec.domain;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableLogic;
import com.dsk.common.core.domain.BaseEntity; import com.dsk.common.annotation.Excel;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date;
/** /**
* 现场经费-工资统筹、其他费用、现场管理费表(CbSceneExpenseChildren)实体类 * 现场经费-工资统筹、其他费用、现场管理费表(CbSceneExpenseChildren)实体类
...@@ -14,9 +16,8 @@ import java.io.Serializable; ...@@ -14,9 +16,8 @@ import java.io.Serializable;
* @author sxk * @author sxk
* @since 2024-02-22 09:59:00 * @since 2024-02-22 09:59:00
*/ */
@EqualsAndHashCode(callSuper = true)
@Data @Data
public class CbSceneExpenseChildren extends BaseEntity implements Serializable { public class CbSceneExpenseChildren implements Serializable {
private static final long serialVersionUID = 895279707061984760L; private static final long serialVersionUID = 895279707061984760L;
/** /**
* 主键ID * 主键ID
...@@ -28,64 +29,73 @@ public class CbSceneExpenseChildren extends BaseEntity implements Serializable { ...@@ -28,64 +29,73 @@ public class CbSceneExpenseChildren extends BaseEntity implements Serializable {
*/ */
private Long projectId; private Long projectId;
/** /**
* 成本阶段(0:标前成本、1:标后成本、2:转固成本) * 项目文件ID
*/ */
private Integer cbStage; private Long projectFileId;
/**
* 父级ID
*/
private Long parentId;
/** /**
* 序号 * 序号
*/ */
@Excel(name = "序号")
private String number; private String number;
/**
* 排序
*/
private Integer sort;
/**
* 数据类型(0:工资统筹、1:现场管理费、2:其他费用)
*/
private Integer dataType;
/** /**
* 名称 * 名称
*/ */
@Excel(name = "名称")
private String expenseName; private String expenseName;
/** /**
* 单位 * 单位
*/ */
@Excel(name = "单位")
private String unit; private String unit;
/** /**
* 成本数量-工资统筹表 * 成本数量-工资统筹表
*/ */
private Integer cbCount; @Excel(name = "成本数量")
private String cbCount;
/** /**
* 使用时间-其他费用表 * 使用时间-其他费用表
*/ */
private Integer useTime; @Excel(name = "使用时间")
private String useTime;
/** /**
* 工程量-现场管理费表 * 工程量-现场管理费表
*/ */
@Excel(name = "工程量")
private String engineeringVolume; private String engineeringVolume;
/**
* 增值税税率-现场管理费表
*/
@Excel(name = "增值税税率")
private String addedTaxRate;
/** /**
* 公司单价/不含税单价 * 公司单价/不含税单价
*/ */
@Excel(name = "公司单价")
private String unitPrice; private String unitPrice;
/** /**
* 目标成本合价(不含税)/不含税合价 * 目标成本合价(不含税)/不含税合价
*/ */
private String excludeTaxSumPrice; @Excel(name = "目标成本合价(不含税)")
private String targetCbSumPriceExcludeTax;
/** /**
* 目标成本合价(含税)/含税合价 * 目标成本合价(含税)/含税合价
*/ */
private String includeTaxSumPrice; @Excel(name = "目标成本合价(含税)")
private String targetCbSumPriceIncludeTax;
/**
* 备注
*/
@Excel(name = "备注")
private String remark;
/** /**
* 成本科目 * 成本科目
*/ */
@Excel(name = "成本科目")
private String cbSubject; private String cbSubject;
/** /**
* 税金类型 * 税金类型
*/ */
@Excel(name = "税金类型")
private String taxType; private String taxType;
/** /**
* 删除状态(0:否、2:是) * 删除状态(0:否、2:是)
...@@ -93,7 +103,13 @@ public class CbSceneExpenseChildren extends BaseEntity implements Serializable { ...@@ -93,7 +103,13 @@ public class CbSceneExpenseChildren extends BaseEntity implements Serializable {
@TableLogic(value = "0", delval = "2") @TableLogic(value = "0", delval = "2")
private Integer delFlag; private Integer delFlag;
/** /**
* 备注 * 创建者
*/ */
private String remark; @TableField(fill = FieldFill.INSERT)
private String createBy;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private Date createTime;
} }
package com.dsk.cscec.domain.bo;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
* @author sxk
* @date 2024.02.22
* @time 15:22
*/
@Data
public class CbSceneExpenseChildrenDataBo {
/**
* 项目ID
*/
@NotNull(message = "项目ID不能为空")
private Long projectId;
/**
* 项目文件ID
*/
@NotNull(message = "文件ID不能为空")
private Long fileId;
}
package com.dsk.cscec.domain.bo;
import com.dsk.common.annotation.Excel;
import com.dsk.cscec.domain.CbSceneExpenseChildren;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* @author sxk
* @date 2024.02.26
* @time 16:38
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class CbSceneExpenseChildrenImportBo extends CbSceneExpenseChildren {
/**
* 公司单价/不含税单价
*/
@Excel(name = "不含税单价(元)")
private String excludeTaxUnitPrice;
/**
* 目标成本合价(不含税)/不含税合价
*/
@Excel(name = "不含税合价(元)")
private String excludeTaxSumPrice;
/**
* 目标成本合价(含税)/含税合价
*/
@Excel(name = "含税合价(元)")
private String includeTaxSumPrice;
}
package com.dsk.cscec.domain.vo;
import lombok.Data;
/**
* @author sxk
* @date 2024.02.26
* @time 15:27
*/
@Data
public class CbProjectCbStageNotDraftVo {
/**
* 项目ID
*/
private Long id;
/**
* 成本阶段(0:标前成本、1:标后成本、2:转固成本)
*/
private Integer cbStage;
}
...@@ -113,4 +113,9 @@ public class CbProjectOtherImportVo { ...@@ -113,4 +113,9 @@ public class CbProjectOtherImportVo {
* 处理后序号 * 处理后序号
*/ */
private String dealWithNumber; private String dealWithNumber;
/**
* 项目成本文件id
*/
private Long cbProjectFileId;
} }
package com.dsk.cscec.domain.vo;
import lombok.Data;
/**
* @author sxk
* @date 2024.02.22
* @time 11:06
*/
@Data
public class CbSceneExpenseMenuVo {
/**
* 项目文件ID
*/
private Long fileId;
/**
* 菜单名称
*/
private String menuName;
/**
* 菜单层级
*/
private Integer menuLevel;
/**
* 菜单来源
*/
private Integer menuSource;
}
...@@ -36,15 +36,16 @@ public class CbProjectExpenseSummaryImportListener extends AnalysisEventListener ...@@ -36,15 +36,16 @@ public class CbProjectExpenseSummaryImportListener extends AnalysisEventListener
@Override @Override
public void invoke(CbProjectExpenseSummaryImportVo importVo, AnalysisContext context) { public void invoke(CbProjectExpenseSummaryImportVo importVo, AnalysisContext context) {
Integer rowIndex = context.readRowHolder().getRowIndex(); Integer rowIndex = context.readRowHolder().getRowIndex();
if (StrUtil.isEmpty(importVo.getExpenseName())) { // if (StrUtil.isEmpty(importVo.getExpenseName())) {
failureNum++; // failureNum++;
failureMsg.append("<br/>" + rowIndex + "行 解析失败:清单内容不能为空"); // failureMsg.append("<br/>" + rowIndex + "行 解析失败:清单内容不能为空");
} // }
String number = importVo.getNumber(); // String number = importVo.getNumber();
if (StrUtil.isEmpty(number)) { // if (StrUtil.isEmpty(number)) {
failureNum++; // failureNum++;
failureMsg.append("<br/>" + rowIndex + "行 解析失败:序号不能为空"); // failureMsg.append("<br/>" + rowIndex + "行 解析失败:序号不能为空");
} // }
dataList.add(importVo);
} }
@Override @Override
......
...@@ -24,31 +24,32 @@ import java.util.regex.Pattern; ...@@ -24,31 +24,32 @@ import java.util.regex.Pattern;
public class CbProjectOtherImportListener extends AnalysisEventListener<CbProjectOtherImportVo> implements ExcelListener<CbProjectOtherImportVo> { public class CbProjectOtherImportListener extends AnalysisEventListener<CbProjectOtherImportVo> implements ExcelListener<CbProjectOtherImportVo> {
private final Long projectId; private final Long projectId;
private final Integer cbStage; private final Long fileId;
private List<CbProjectOtherImportVo> dataList = new ArrayList<>(); private List<CbProjectOtherImportVo> dataList = new ArrayList<>();
private int successNum = 0; private int successNum = 0;
private int failureNum = 0; private int failureNum = 0;
private final StringBuilder successMsg = new StringBuilder(); private final StringBuilder successMsg = new StringBuilder();
private final StringBuilder failureMsg = new StringBuilder(); private final StringBuilder failureMsg = new StringBuilder();
public CbProjectOtherImportListener(Long projectId, Integer cbStage) { public CbProjectOtherImportListener(Long projectId, Long fileId) {
this.cbStage = cbStage; this.fileId = fileId;
this.projectId = projectId; this.projectId = projectId;
} }
@Override @Override
public void invoke(CbProjectOtherImportVo importVo, AnalysisContext context) { public void invoke(CbProjectOtherImportVo importVo, AnalysisContext context) {
Integer rowIndex = context.readRowHolder().getRowIndex(); Integer rowIndex = context.readRowHolder().getRowIndex();
if (StrUtil.isEmpty(importVo.getItemContent())) { // if (StrUtil.isEmpty(importVo.getItemContent())) {
failureNum++; // failureNum++;
failureMsg.append("<br/>" + rowIndex + "行 解析失败:清单内容不能为空"); // failureMsg.append("<br/>" + rowIndex + "行 解析失败:清单内容不能为空");
} // }
String number = importVo.getNumber(); String number = importVo.getNumber();
if (StrUtil.isEmpty(number)) { if (StrUtil.isEmpty(number)) {
failureNum++; failureNum++;
failureMsg.append("<br/>" + rowIndex + "行 解析失败:序号不能为空"); failureMsg.append("<br/>" + rowIndex + "行 解析失败:序号不能为空");
} }
importVo.setCbProjectFileId(fileId);
Boolean numberMatch = false; Boolean numberMatch = false;
String regex = "[\\((]*[一|二|三|四|五|六|七|八|九|十]+[\\))]*"; String regex = "[\\((]*[一|二|三|四|五|六|七|八|九|十]+[\\))]*";
Pattern pattern = Pattern.compile("^\\d+(\\.\\d+)*$"); Pattern pattern = Pattern.compile("^\\d+(\\.\\d+)*$");
......
...@@ -32,14 +32,12 @@ import java.util.regex.Pattern; ...@@ -32,14 +32,12 @@ import java.util.regex.Pattern;
public class ProjectCostMeasureImportListener extends AnalysisEventListener<CbCostMeasuresImportVo> implements ExcelListener<CbCostMeasuresImportVo> { public class ProjectCostMeasureImportListener extends AnalysisEventListener<CbCostMeasuresImportVo> implements ExcelListener<CbCostMeasuresImportVo> {
private final CbCostMeasureServiceImpl cbCostMeasureService; private final CbCostMeasureServiceImpl cbCostMeasureService;
//
// private final String password;
private final Long projectId; private final Long projectId;
private final Integer cbStage;
private List<CbCostMeasuresImportVo> dataList = new ArrayList<>(); private List<CbCostMeasuresImportVo> dataList = new ArrayList<>();
private List<String> errList = new ArrayList<>();
// private final String operName; // private final String operName;
private int successNum = 0; private int successNum = 0;
...@@ -47,10 +45,8 @@ public class ProjectCostMeasureImportListener extends AnalysisEventListener<CbCo ...@@ -47,10 +45,8 @@ public class ProjectCostMeasureImportListener extends AnalysisEventListener<CbCo
private final StringBuilder successMsg = new StringBuilder(); private final StringBuilder successMsg = new StringBuilder();
private final StringBuilder failureMsg = new StringBuilder(); private final StringBuilder failureMsg = new StringBuilder();
public ProjectCostMeasureImportListener(Long projectId, Integer cbStage) { public ProjectCostMeasureImportListener(Long projectId) {
// String initPassword = SpringUtils.getBean(ISysConfigService.class).selectConfigByKey("sys.user.initPassword");
this.cbCostMeasureService = SpringUtils.getBean(CbCostMeasureServiceImpl.class); this.cbCostMeasureService = SpringUtils.getBean(CbCostMeasureServiceImpl.class);
this.cbStage = cbStage;
this.projectId = projectId; this.projectId = projectId;
// this.operName = LoginHelper.getUsername(); // this.operName = LoginHelper.getUsername();
} }
...@@ -62,11 +58,14 @@ public class ProjectCostMeasureImportListener extends AnalysisEventListener<CbCo ...@@ -62,11 +58,14 @@ public class ProjectCostMeasureImportListener extends AnalysisEventListener<CbCo
if (StrUtil.isEmpty(importVo.getItemContent())) { if (StrUtil.isEmpty(importVo.getItemContent())) {
failureNum++; failureNum++;
failureMsg.append("<br/>" + rowIndex + "行 解析失败:清单内容不能为空"); failureMsg.append("<br/>" + rowIndex + "行 解析失败:清单内容不能为空");
errList.add(failureMsg.toString());
return;
} }
String number = importVo.getNumber(); String number = importVo.getNumber();
if (StrUtil.isEmpty(number)) { if (StrUtil.isEmpty(number)) {
failureNum++; failureNum++;
failureMsg.append("<br/>" + rowIndex + "行 解析失败:序号不能为空"); failureMsg.append("<br/>" + rowIndex + "行 解析失败:序号不能为空");
errList.add(failureMsg.toString());
} }
Boolean numberMatch = false; Boolean numberMatch = false;
...@@ -79,6 +78,7 @@ public class ProjectCostMeasureImportListener extends AnalysisEventListener<CbCo ...@@ -79,6 +78,7 @@ public class ProjectCostMeasureImportListener extends AnalysisEventListener<CbCo
} else { } else {
failureNum++; failureNum++;
failureMsg.append("<br/>" + rowIndex + "行 解析失败:序号格式错误"); failureMsg.append("<br/>" + rowIndex + "行 解析失败:序号格式错误");
errList.add(failureMsg.toString());
} }
...@@ -186,7 +186,7 @@ public class ProjectCostMeasureImportListener extends AnalysisEventListener<CbCo ...@@ -186,7 +186,7 @@ public class ProjectCostMeasureImportListener extends AnalysisEventListener<CbCo
public String getAnalysis() { public String getAnalysis() {
if (failureNum > 0) { if (failureNum > 0) {
failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:"); failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
throw new ServiceException(failureMsg.toString()); // throw new ServiceException(failureMsg.toString());
} else { } else {
successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:"); successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
} }
...@@ -200,7 +200,7 @@ public class ProjectCostMeasureImportListener extends AnalysisEventListener<CbCo ...@@ -200,7 +200,7 @@ public class ProjectCostMeasureImportListener extends AnalysisEventListener<CbCo
@Override @Override
public List<String> getErrorList() { public List<String> getErrorList() {
return null; return errList;
} }
}; };
} }
......
...@@ -35,10 +35,11 @@ public class ProjectCostMeasureSummaryImportListener extends AnalysisEventListen ...@@ -35,10 +35,11 @@ public class ProjectCostMeasureSummaryImportListener extends AnalysisEventListen
// private final String password; // private final String password;
private final Long projectId; private final Long projectId;
private final Integer cbStage; private final Long fileId;
private final Integer dataType; private final Integer dataType;
private List<CbProjectExpenseSummaryImportVo> dataList = new ArrayList<>(); private List<CbProjectExpenseSummaryImportVo> dataList = new ArrayList<>();
private List<String> errorList = new ArrayList<>();
// private final String operName; // private final String operName;
...@@ -47,9 +48,9 @@ public class ProjectCostMeasureSummaryImportListener extends AnalysisEventListen ...@@ -47,9 +48,9 @@ public class ProjectCostMeasureSummaryImportListener extends AnalysisEventListen
private final StringBuilder successMsg = new StringBuilder(); private final StringBuilder successMsg = new StringBuilder();
private final StringBuilder failureMsg = new StringBuilder(); private final StringBuilder failureMsg = new StringBuilder();
public ProjectCostMeasureSummaryImportListener(Long projectId, Integer cbStage,Integer dataType) { public ProjectCostMeasureSummaryImportListener(Long projectId, Long fileId,Integer dataType) {
this.cbProjectExpenseSummaryService = SpringUtils.getBean(CbProjectExpenseSummaryService.class); this.cbProjectExpenseSummaryService = SpringUtils.getBean(CbProjectExpenseSummaryService.class);
this.cbStage = cbStage; this.fileId = fileId;
this.projectId = projectId; this.projectId = projectId;
this.dataType=dataType; this.dataType=dataType;
} }
...@@ -60,10 +61,17 @@ public class ProjectCostMeasureSummaryImportListener extends AnalysisEventListen ...@@ -60,10 +61,17 @@ public class ProjectCostMeasureSummaryImportListener extends AnalysisEventListen
CbProjectExpenseSummary cbProjectExpenseSummary=new CbProjectExpenseSummary(); CbProjectExpenseSummary cbProjectExpenseSummary=new CbProjectExpenseSummary();
BeanUtil.copyProperties(importVo,cbProjectExpenseSummary); BeanUtil.copyProperties(importVo,cbProjectExpenseSummary);
cbProjectExpenseSummary.setProjectId(projectId); cbProjectExpenseSummary.setProjectId(projectId);
cbProjectExpenseSummary.setCbStage(cbStage); cbProjectExpenseSummary.setProjectFileId(fileId);
cbProjectExpenseSummary.setDataType(dataType); cbProjectExpenseSummary.setDataType(dataType);
cbProjectExpenseSummary.setCreateBy(LoginHelper.getUsername()); // cbProjectExpenseSummary.setCreateBy(LoginHelper.getUsername());
cbProjectExpenseSummaryService.save(cbProjectExpenseSummary); boolean save = cbProjectExpenseSummaryService.save(cbProjectExpenseSummary);
if(!save){
String errmsg = context.readRowHolder().getRowIndex() + " error";
log.debug("ProjectCostMeasureSummaryImportListener.invoke() "+errmsg);
errorList.add(errmsg);
}
successNum+=1;
dataList.add(importVo);
} }
...@@ -94,7 +102,7 @@ public class ProjectCostMeasureSummaryImportListener extends AnalysisEventListen ...@@ -94,7 +102,7 @@ public class ProjectCostMeasureSummaryImportListener extends AnalysisEventListen
@Override @Override
public List<String> getErrorList() { public List<String> getErrorList() {
return null; return errorList;
} }
}; };
} }
......
...@@ -2,6 +2,7 @@ package com.dsk.cscec.mapper; ...@@ -2,6 +2,7 @@ package com.dsk.cscec.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsk.cscec.domain.CbProjectFile; import com.dsk.cscec.domain.CbProjectFile;
import com.dsk.cscec.domain.vo.CbSceneExpenseMenuVo;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.List; import java.util.List;
...@@ -13,8 +14,18 @@ import java.util.List; ...@@ -13,8 +14,18 @@ import java.util.List;
* @since 2024-02-05 14:01:03 * @since 2024-02-05 14:01:03
*/ */
public interface CbProjectFileMapper extends BaseMapper<CbProjectFile> { public interface CbProjectFileMapper extends BaseMapper<CbProjectFile> {
/**
* 获取现场经费菜单
*
* @param projectId 项目ID
* @return 该项目在项目文件表中所有解析完成的现场经费文件名
*/
List<CbSceneExpenseMenuVo> getSceneExpenseMenuFromFile(@Param("projectId") Long projectId,
@Param("deleteFlagExist") Integer deleteFlagExist,
@Param("cbTypeSceneExpense") Integer cbTypeSceneExpense,
@Param("projectFileStatusParseSuccess") Integer projectFileStatusParseSuccess);
List<CbProjectFile> selectAnalysisList(@Param("projectId") Long projectId,@Param("cbType") Integer cbType,@Param("cbStage") Integer cbStage); List<CbProjectFile> selectAnalysisList(@Param("projectId") Long projectId, @Param("cbType") Integer cbType, @Param("cbStage") Integer cbStage);
int removeById(@Param("id") Long id); int removeById(@Param("id") Long id);
} }
......
...@@ -65,7 +65,7 @@ public interface CbSummaryMapper extends BaseMapper<CbSummary> { ...@@ -65,7 +65,7 @@ public interface CbSummaryMapper extends BaseMapper<CbSummary> {
CbGainLossAnalysisListVo getGainLossAnalysisById(@Param("id") Long id, @Param("expenseDate") String expenseDate); CbGainLossAnalysisListVo getGainLossAnalysisById(@Param("id") Long id, @Param("expenseDate") String expenseDate);
List<CbGainLossAnalysisListVo> getGainLossAnalysisByParentId(@Param("id") Long parentId, @Param("expenseDate") String expenseDate); List<CbGainLossAnalysisListVo> getGainLossAnalysisByParentId(@Param("parentId") Long parentId, @Param("expenseDate") String expenseDate);
......
package com.dsk.cscec.service; package com.dsk.cscec.service;
import com.dsk.cscec.domain.CbProjectExpenseSummary;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
public interface CbProjectExpenseSummaryService extends IService<CbProjectExpenseSummary>{ import com.dsk.cscec.domain.CbProjectExpenseSummary;
import java.util.List;
public interface CbProjectExpenseSummaryService extends IService<CbProjectExpenseSummary> {
/**
* 现场经费汇总数据解析
*
* @param projectId 项目ID
* @param cbStage 成本阶段
* @param username 用户名
*/
void parseSceneExpenseSummaryData(Long projectId, Integer cbStage,String username) throws Exception;
/**
* 获取现场经费汇总数据
*
* @param projectId 项目ID
* @return 现场经费汇总数据
*/
List<CbProjectExpenseSummary> getCbSceneExpenseSummaryData(Long projectId);
List<CbProjectExpenseSummary> queryCbSceneExpenseSummaryDataByType(Long projectId,Integer dataType);
} }
...@@ -56,4 +56,15 @@ public interface CbProjectFileService extends IService<CbProjectFile> { ...@@ -56,4 +56,15 @@ public interface CbProjectFileService extends IService<CbProjectFile> {
*/ */
List<CbProjectFile> selectAnalysisList(Long projectId, Integer cbType, Integer cbStage); List<CbProjectFile> selectAnalysisList(Long projectId, Integer cbType, Integer cbStage);
/**
* 更新项目文件状态
*
* @param projectId 项目ID
* @param cbType CB型
* @param fileId 文件ID文件ID
* @param errmsg RMSG
* @return boolean
*/
boolean UpdateProjectFileStatus(Long fileId,String errmsg,Integer status);
} }
...@@ -2,6 +2,7 @@ package com.dsk.cscec.service; ...@@ -2,6 +2,7 @@ package com.dsk.cscec.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.dsk.cscec.domain.CbProjectOther; import com.dsk.cscec.domain.CbProjectOther;
import com.dsk.cscec.domain.bo.CbProjectBaseBo;
import com.dsk.cscec.domain.bo.CbProjectOtherBo; import com.dsk.cscec.domain.bo.CbProjectOtherBo;
import com.dsk.cscec.domain.vo.CbProjectOtherVo; import com.dsk.cscec.domain.vo.CbProjectOtherVo;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
...@@ -22,5 +23,7 @@ public interface CbProjectOtherService extends IService<CbProjectOther> { ...@@ -22,5 +23,7 @@ public interface CbProjectOtherService extends IService<CbProjectOther> {
List<Map<String, Object>> listByLevel(Long projectId, int i); List<Map<String, Object>> listByLevel(Long projectId, int i);
List<CbProjectOtherVo> selectDataList(CbProjectOtherBo projectOtherBo); List<CbProjectOtherVo> selectDataList(CbProjectOtherBo projectOtherBo);
void projectOtherDataAnalysis(CbProjectBaseBo baseBo) throws Exception;
} }
...@@ -5,6 +5,7 @@ import com.dsk.common.core.domain.PageQuery; ...@@ -5,6 +5,7 @@ import com.dsk.common.core.domain.PageQuery;
import com.dsk.common.core.page.TableDataInfo; 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.*; import com.dsk.cscec.domain.bo.*;
import com.dsk.cscec.domain.vo.CbProjectCbStageNotDraftVo;
import com.dsk.cscec.domain.vo.CbProjectRecordSearchVo; import com.dsk.cscec.domain.vo.CbProjectRecordSearchVo;
import java.util.List; import java.util.List;
...@@ -78,7 +79,7 @@ public interface CbProjectRecordService extends IService<CbProjectRecord> { ...@@ -78,7 +79,7 @@ public interface CbProjectRecordService extends IService<CbProjectRecord> {
* @param relatedId 关联ID * @param relatedId 关联ID
* @return 已有数据的成本阶段 * @return 已有数据的成本阶段
*/ */
List<Integer> getProjectCbStageNotDraft(Long relatedId); List<CbProjectCbStageNotDraftVo> getProjectCbStageNotDraft(Long relatedId);
/** /**
* 批量删除项目 * 批量删除项目
......
...@@ -2,6 +2,10 @@ package com.dsk.cscec.service; ...@@ -2,6 +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.CbSceneExpenseChildren; import com.dsk.cscec.domain.CbSceneExpenseChildren;
import com.dsk.cscec.domain.bo.CbSceneExpenseChildrenDataBo;
import com.dsk.cscec.domain.vo.CbSceneExpenseMenuVo;
import java.util.List;
/** /**
* 现场经费-工资统筹、其他费用、现场管理费表(CbSceneExpenseChildren)表服务接口 * 现场经费-工资统筹、其他费用、现场管理费表(CbSceneExpenseChildren)表服务接口
...@@ -10,5 +14,28 @@ import com.dsk.cscec.domain.CbSceneExpenseChildren; ...@@ -10,5 +14,28 @@ import com.dsk.cscec.domain.CbSceneExpenseChildren;
* @since 2024-02-22 09:59:01 * @since 2024-02-22 09:59:01
*/ */
public interface CbSceneExpenseChildrenService extends IService<CbSceneExpenseChildren> { public interface CbSceneExpenseChildrenService extends IService<CbSceneExpenseChildren> {
/**
* 获取现场经费菜单
*
* @param projectId 项目ID
* @return 菜单
*/
List<CbSceneExpenseMenuVo> getMenuList(Long projectId);
/**
* 现场经费二级分类数据解析
*
* @param projectId 项目ID
* @param cbStage 成本阶段
* @param username 用户名
*/
void parseSceneExpenseChildrenData(Long projectId, Integer cbStage, String username) throws Exception;
/**
* 获取现场经费二级分类数据
*
* @param childrenDataBo 查询体
* @return 现场经费二级分类数据
*/
List<CbSceneExpenseChildren> getChildrenData(CbSceneExpenseChildrenDataBo childrenDataBo);
} }
package com.dsk.cscec.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dsk.cscec.domain.CbSummaryActualLock;
/**
* 成本汇总-每月成本锁定(CbSummaryActualLock)表服务接口
*
* @author makejava
* @since 2024-02-27 16:16:09
*/
public interface CbSummaryActualLockService extends IService<CbSummaryActualLock> {
}
...@@ -5,6 +5,7 @@ import com.dsk.common.core.domain.PageQuery; ...@@ -5,6 +5,7 @@ import com.dsk.common.core.domain.PageQuery;
import com.dsk.common.core.domain.entity.SysDictData; import com.dsk.common.core.domain.entity.SysDictData;
import com.dsk.common.core.page.TableDataInfo; import com.dsk.common.core.page.TableDataInfo;
import com.dsk.cscec.domain.CbCostMeasure; import com.dsk.cscec.domain.CbCostMeasure;
import com.dsk.cscec.domain.CbProjectExpenseSummary;
import com.dsk.cscec.domain.bo.CbCostMeasureActualBo; import com.dsk.cscec.domain.bo.CbCostMeasureActualBo;
import com.dsk.cscec.domain.bo.CbCostMeasureActualPushBo; import com.dsk.cscec.domain.bo.CbCostMeasureActualPushBo;
import com.dsk.cscec.domain.bo.CbCostMeasureActualSaveBo; import com.dsk.cscec.domain.bo.CbCostMeasureActualSaveBo;
...@@ -12,6 +13,7 @@ import com.dsk.cscec.domain.vo.CbCostMeasureActualVo; ...@@ -12,6 +13,7 @@ import com.dsk.cscec.domain.vo.CbCostMeasureActualVo;
import com.dsk.cscec.domain.vo.CbCostMeasuresItemVo; import com.dsk.cscec.domain.vo.CbCostMeasuresItemVo;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.io.InputStream;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -23,7 +25,7 @@ import java.util.Map; ...@@ -23,7 +25,7 @@ import java.util.Map;
*/ */
public interface ICbCostMeasureService extends IService<CbCostMeasure> { public interface ICbCostMeasureService extends IService<CbCostMeasure> {
void importExcelData(MultipartFile file, Long projectId); void importExcelData(InputStream inputStream, String fileName,Long fileId, Long projectId);
List<Map<String, Object>> listByLevel(Long projectId, int i); List<Map<String, Object>> listByLevel(Long projectId, int i);
...@@ -33,6 +35,10 @@ public interface ICbCostMeasureService extends IService<CbCostMeasure> { ...@@ -33,6 +35,10 @@ public interface ICbCostMeasureService extends IService<CbCostMeasure> {
void pushCostMeasureActual(CbCostMeasureActualPushBo pushBo); void pushCostMeasureActual(CbCostMeasureActualPushBo pushBo);
void importExcelSummaryData(MultipartFile file, Long projectId,Integer dataType); List<String> importExcelSummaryData(InputStream inputStream, Long projectId,Long fileId, Integer dataType);
void parseCbCostMeasureFile(Long projectId);
boolean reparseCbCostMeasureFile(Long projectId,Long projectFileId);
} }
package com.dsk.cscec.service.impl; package com.dsk.cscec.service.impl;
import org.springframework.stereotype.Service; import cn.hutool.core.lang.Assert;
import javax.annotation.Resource; import cn.hutool.core.util.ObjectUtil;
import java.util.List; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsk.common.excel.ExcelUtils;
import com.dsk.common.utils.StringUtils;
import com.dsk.cscec.constant.CbProjectConstants;
import com.dsk.cscec.domain.CbProjectExpenseSummary; import com.dsk.cscec.domain.CbProjectExpenseSummary;
import com.dsk.cscec.domain.CbProjectFile;
import com.dsk.cscec.domain.CbProjectRecord;
import com.dsk.cscec.mapper.CbProjectExpenseSummaryMapper; import com.dsk.cscec.mapper.CbProjectExpenseSummaryMapper;
import com.dsk.cscec.mapper.CbProjectFileMapper;
import com.dsk.cscec.mapper.CbProjectRecordMapper;
import com.dsk.cscec.service.CbProjectExpenseSummaryService; import com.dsk.cscec.service.CbProjectExpenseSummaryService;
import com.dsk.system.service.ISysOssService;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.transaction.support.TransactionTemplate;
import javax.annotation.Resource;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
@Service @Service
public class CbProjectExpenseSummaryServiceImpl extends ServiceImpl<CbProjectExpenseSummaryMapper, CbProjectExpenseSummary> implements CbProjectExpenseSummaryService{ public class CbProjectExpenseSummaryServiceImpl extends ServiceImpl<CbProjectExpenseSummaryMapper, CbProjectExpenseSummary> implements CbProjectExpenseSummaryService {
@Resource
private CbProjectExpenseSummaryMapper baseMapper;
@Resource
private CbProjectRecordMapper projectRecordMapper;
@Resource
private CbProjectFileMapper projectFileMapper;
@Resource
private ISysOssService ossService;
@Resource
private TransactionTemplate transactionTemplate;
/**
* 现场经费汇总数据解析
*
* @param projectId 项目ID
* @param cbStage 成本阶段
* @param username 用户名
*/
@Override
@Async
public void parseSceneExpenseSummaryData(Long projectId, Integer cbStage, String username) throws Exception {
//查找该项目下所有相关文件
List<CbProjectFile> projectFileList = projectFileMapper.selectAnalysisList(projectId, CbProjectConstants.CB_TYPE_SCENE_EXPENSE, cbStage);
//待解析文件
List<CbProjectFile> waitParseList = new ArrayList<>();
//提取现场经费汇总文件,原则上该文件仅有1个
projectFileList.forEach(projectFile -> {
if (CbProjectConstants.CB_TYPE_SCENE_EXPENSE_NAME.equals(projectFile.getFileName().substring(0, projectFile.getFileName().lastIndexOf(".")))) {
//待解析文件
waitParseList.add(projectFile);
}
});
//处理待解析文件
for (CbProjectFile projectFile : waitParseList) {
if (ObjectUtil.isNull(projectFile)) {
continue;
}
//文件下载
InputStream inputStream = ossService.downFileIO(projectFile.getFileOssId());
if (ObjectUtil.isNull(inputStream)) {
projectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_FAIL);
projectFile.setFailRemark("文件数据不存在");
projectFileMapper.updateById(projectFile);
continue;
}
//解析数据
List<CbProjectExpenseSummary> importList = new ExcelUtils<>(CbProjectExpenseSummary.class).importExcelAllSheet(inputStream, 0);
if (importList.isEmpty()) {
projectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_FAIL);
projectFile.setFailRemark("表格中不存在待导入数据!");
projectFileMapper.updateById(projectFile);
continue;
}
//筛选有效数据
List<CbProjectExpenseSummary> summaryList = importList.stream().parallel()
//筛选名称列不为空数据
.filter(item -> StringUtils.isNotBlank(item.getExpenseName()))
.peek(item -> {
item.setProjectId(projectId);
item.setProjectFileId(projectFile.getId());
item.setCbStage(projectFile.getCbStage());
item.setDataType(CbProjectConstants.CB_TYPE_SCENE_EXPENSE);
item.setCreateBy(username);
item.setCreateTime(new Date());
})
.collect(Collectors.toList());
if (summaryList.size() != importList.size()) {
projectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_FAIL);
projectFile.setFailRemark("表格中存在\"名称\"列为空数据!");
projectFileMapper.updateById(projectFile);
continue;
}
transactionTemplate.execute(status -> {
try {
//批量插入数据
CbProjectExpenseSummaryServiceImpl impl = new CbProjectExpenseSummaryServiceImpl();
Assert.isTrue(impl.saveBatch(summaryList), "数据插入失败");
//更新文件状态
projectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_SUCCESS);
Assert.isTrue(projectFileMapper.updateById(projectFile) > 0, "解析成功后文件状态更新失败");
} catch (Exception e) {
status.setRollbackOnly();
projectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_FAIL);
projectFile.setFailRemark(e.getMessage());
projectFileMapper.updateById(projectFile);
}
return Boolean.TRUE;
});
}
}
/**
* 获取现场经费汇总数据
*
* @param projectId 项目ID
* @return 现场经费汇总数据
*/
@Override
public List<CbProjectExpenseSummary> getCbSceneExpenseSummaryData(Long projectId) {
//校验项目是否存在
this.checkProjectExist(projectId);
return baseMapper.selectList(new LambdaQueryWrapper<CbProjectExpenseSummary>()
.eq(CbProjectExpenseSummary::getProjectId, projectId)
.eq(CbProjectExpenseSummary::getDataType, CbProjectConstants.CB_TYPE_SCENE_EXPENSE));
}
@Override
public List<CbProjectExpenseSummary> queryCbSceneExpenseSummaryDataByType(Long projectId, Integer dataType) {
//校验项目是否存在
this.checkProjectExist(projectId);
return baseMapper.selectList(new LambdaQueryWrapper<CbProjectExpenseSummary>()
.eq(CbProjectExpenseSummary::getProjectId, projectId)
.eq(CbProjectExpenseSummary::getDataType, dataType));
}
/**
* 校验项目是否存在
*
* @param projectId 项目ID
* @return 项目实体
*/
private CbProjectRecord checkProjectExist(Long projectId) {
CbProjectRecord projectRecord = projectRecordMapper.selectById(projectId);
Assert.notNull(projectRecord, "该项目不存在");
return projectRecord;
}
} }
...@@ -167,6 +167,16 @@ public class CbProjectFileServiceImpl extends ServiceImpl<CbProjectFileMapper, C ...@@ -167,6 +167,16 @@ public class CbProjectFileServiceImpl extends ServiceImpl<CbProjectFileMapper, C
return baseMapper.selectAnalysisList(projectId, cbType, cbStage); return baseMapper.selectAnalysisList(projectId, cbType, cbStage);
} }
@Override
public boolean UpdateProjectFileStatus(Long fileId, String errmsg,Integer status) {
CbProjectFile cbProjectFile=new CbProjectFile();
cbProjectFile.setId(fileId);
cbProjectFile.setFailRemark(errmsg);
cbProjectFile.setFileParseStatus(status);
boolean b = this.updateById(cbProjectFile);
return b;
}
/** /**
* 校验项目是否存在 * 校验项目是否存在
* *
......
...@@ -12,7 +12,6 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; ...@@ -12,7 +12,6 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsk.common.excel.ExcelResult; import com.dsk.common.excel.ExcelResult;
import com.dsk.common.excel.ExcelUtils;
import com.dsk.common.utils.poi.ExcelUtil; import com.dsk.common.utils.poi.ExcelUtil;
import com.dsk.cscec.constant.CbProjectConstants; import com.dsk.cscec.constant.CbProjectConstants;
import com.dsk.cscec.domain.*; import com.dsk.cscec.domain.*;
...@@ -65,7 +64,7 @@ public class CbProjectOtherServiceImpl extends ServiceImpl<CbProjectOtherMapper, ...@@ -65,7 +64,7 @@ public class CbProjectOtherServiceImpl extends ServiceImpl<CbProjectOtherMapper,
CbProjectRecord byId = cbProjectRecordService.getById(projectId); CbProjectRecord byId = cbProjectRecordService.getById(projectId);
Assert.notNull(byId, "项目信息不能为空"); Assert.notNull(byId, "项目信息不能为空");
Integer cbStage = byId.getCbStage(); Integer cbStage = byId.getCbStage();
CbProjectOtherImportListener importListener = new CbProjectOtherImportListener(projectId, cbStage); CbProjectOtherImportListener importListener = new CbProjectOtherImportListener(projectId, 0L);
EasyExcel.read(file.getInputStream(), CbProjectOtherImportVo.class, importListener).sheet().doRead(); EasyExcel.read(file.getInputStream(), CbProjectOtherImportVo.class, importListener).sheet().doRead();
ExcelResult<CbProjectOtherImportVo> result = importListener.getExcelResult(); ExcelResult<CbProjectOtherImportVo> result = importListener.getExcelResult();
String analysis = result.getAnalysis(); String analysis = result.getAnalysis();
...@@ -83,6 +82,7 @@ public class CbProjectOtherServiceImpl extends ServiceImpl<CbProjectOtherMapper, ...@@ -83,6 +82,7 @@ public class CbProjectOtherServiceImpl extends ServiceImpl<CbProjectOtherMapper,
rootProjectOther.setParentId(0L); rootProjectOther.setParentId(0L);
rootProjectOther.setProjectId(projectId); rootProjectOther.setProjectId(projectId);
rootProjectOther.setCbStage(cbStage); rootProjectOther.setCbStage(cbStage);
rootProjectOther.setCbProjectFileId(0L);
LambdaQueryWrapper<CbProjectOther> tWrapper = Wrappers.lambdaQuery(rootProjectOther); LambdaQueryWrapper<CbProjectOther> tWrapper = Wrappers.lambdaQuery(rootProjectOther);
CbProjectOther rootOther = this.getOne(tWrapper); CbProjectOther rootOther = this.getOne(tWrapper);
...@@ -156,6 +156,7 @@ public class CbProjectOtherServiceImpl extends ServiceImpl<CbProjectOtherMapper, ...@@ -156,6 +156,7 @@ public class CbProjectOtherServiceImpl extends ServiceImpl<CbProjectOtherMapper,
*@date: 2024/2/23 18:03 *@date: 2024/2/23 18:03
*/ */
@Async @Async
@Override
public void projectOtherDataAnalysis(CbProjectBaseBo baseBo) throws Exception { public void projectOtherDataAnalysis(CbProjectBaseBo baseBo) throws Exception {
// 项目Id // 项目Id
Long projectId = baseBo.getProjectId(); Long projectId = baseBo.getProjectId();
...@@ -165,9 +166,9 @@ public class CbProjectOtherServiceImpl extends ServiceImpl<CbProjectOtherMapper, ...@@ -165,9 +166,9 @@ public class CbProjectOtherServiceImpl extends ServiceImpl<CbProjectOtherMapper,
// 查询其他费用导入文件 // 查询其他费用导入文件
List<CbProjectFile> projectFileList = projectFileService.list(Wrappers.<CbProjectFile>lambdaQuery() List<CbProjectFile> projectFileList = projectFileService.list(Wrappers.<CbProjectFile>lambdaQuery()
.eq(CbProjectFile::getProjectId, baseBo.getProjectId()) .eq(CbProjectFile::getProjectId, baseBo.getProjectId())
.eq(CbProjectFile::getCbType, CbProjectConstants.CB_TYPE_OTHER_PROJECT) .eq(CbProjectFile::getCbType, CbProjectConstants.CB_TYPE_SCENE_EXPENSE)
.eq(CbProjectFile::getCbStage, baseBo.getCbStage()) .eq(CbProjectFile::getCbStage, baseBo.getCbStage())
.in(CbProjectFile::getFileParseStatus, Arrays.asList(1, 3))); .in(CbProjectFile::getFileParseStatus, Arrays.asList(0)));
if (ObjectUtils.isEmpty(projectFileList)) { if (ObjectUtils.isEmpty(projectFileList)) {
return; return;
} }
...@@ -183,24 +184,18 @@ public class CbProjectOtherServiceImpl extends ServiceImpl<CbProjectOtherMapper, ...@@ -183,24 +184,18 @@ public class CbProjectOtherServiceImpl extends ServiceImpl<CbProjectOtherMapper,
break; break;
} }
//解析数据
List<CbProjectOther> importList = new ExcelUtils<>(CbProjectOther.class).importExcelAllSheet(inputStream, 1);
if (importList.isEmpty()) {
file.setFileParseStatus(3);
file.setFailRemark("表格中不存在待导入数据!");
projectFileService.updateById(file);
break;
}
// 文件名称 // 文件名称
String name = file.getFileName(); String name = file.getFileName();
name = FileNameUtil.getPrefix(name);
// 文件Id
Long fileId = file.getId();
if ("其他费".equals(name)) { if ("其他费".equals(name)) {
totalDataAnalysis(inputStream, name, file, projectId, cbStage); totalDataAnalysis(inputStream, name, file, projectId, cbStage);
break;
} }
name = FileNameUtil.getPrefix(name);
//解析数据 //解析数据
ExcelResult<CbProjectOtherImportVo> importVoExcelResult = ExcelResult<CbProjectOtherImportVo> importVoExcelResult =
ExcelUtil.importExcel(inputStream, CbProjectOtherImportVo.class,new CbProjectOtherImportListener(projectId, cbStage)); ExcelUtil.importExcel(inputStream, CbProjectOtherImportVo.class,new CbProjectOtherImportListener(projectId, fileId));
log.info(importVoExcelResult.getAnalysis()); log.info(importVoExcelResult.getAnalysis());
List<CbProjectOtherImportVo> importVoList = importVoExcelResult.getList(); List<CbProjectOtherImportVo> importVoList = importVoExcelResult.getList();
if (CollectionUtil.isEmpty(importVoList)) { if (CollectionUtil.isEmpty(importVoList)) {
...@@ -217,6 +212,7 @@ public class CbProjectOtherServiceImpl extends ServiceImpl<CbProjectOtherMapper, ...@@ -217,6 +212,7 @@ public class CbProjectOtherServiceImpl extends ServiceImpl<CbProjectOtherMapper,
rootProjectOther.setParentId(0L); rootProjectOther.setParentId(0L);
rootProjectOther.setProjectId(projectId); rootProjectOther.setProjectId(projectId);
rootProjectOther.setCbStage(cbStage); rootProjectOther.setCbStage(cbStage);
rootProjectOther.setCbProjectFileId(0L);
LambdaQueryWrapper<CbProjectOther> tWrapper = Wrappers.lambdaQuery(rootProjectOther); LambdaQueryWrapper<CbProjectOther> tWrapper = Wrappers.lambdaQuery(rootProjectOther);
CbProjectOther rootOther = this.getOne(tWrapper); CbProjectOther rootOther = this.getOne(tWrapper);
...@@ -282,6 +278,7 @@ public class CbProjectOtherServiceImpl extends ServiceImpl<CbProjectOtherMapper, ...@@ -282,6 +278,7 @@ public class CbProjectOtherServiceImpl extends ServiceImpl<CbProjectOtherMapper,
BeanUtil.copyProperties(importVo, projectExpenseSummary); BeanUtil.copyProperties(importVo, projectExpenseSummary);
projectExpenseSummary.setProjectId(projectId); projectExpenseSummary.setProjectId(projectId);
projectExpenseSummary.setCbStage(cbStage); projectExpenseSummary.setCbStage(cbStage);
projectExpenseSummary.setDataType(1);
projectExpenseSummaryService.save(projectExpenseSummary); projectExpenseSummaryService.save(projectExpenseSummary);
} }
} }
......
...@@ -18,12 +18,11 @@ import com.dsk.cscec.constant.CbProjectConstants; ...@@ -18,12 +18,11 @@ import com.dsk.cscec.constant.CbProjectConstants;
import com.dsk.cscec.domain.CbProjectFile; import com.dsk.cscec.domain.CbProjectFile;
import com.dsk.cscec.domain.CbProjectRecord; import com.dsk.cscec.domain.CbProjectRecord;
import com.dsk.cscec.domain.bo.*; import com.dsk.cscec.domain.bo.*;
import com.dsk.cscec.domain.vo.CbProjectCbStageNotDraftVo;
import com.dsk.cscec.domain.vo.CbProjectRecordSearchVo; import com.dsk.cscec.domain.vo.CbProjectRecordSearchVo;
import com.dsk.cscec.mapper.CbProjectFileMapper; import com.dsk.cscec.mapper.CbProjectFileMapper;
import com.dsk.cscec.mapper.CbProjectRecordMapper; import com.dsk.cscec.mapper.CbProjectRecordMapper;
import com.dsk.cscec.service.CbProjectExpenseSummaryService; import com.dsk.cscec.service.*;
import com.dsk.cscec.service.CbProjectRecordService;
import com.dsk.cscec.service.CbSummaryService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
...@@ -51,6 +50,12 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe ...@@ -51,6 +50,12 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe
private CbSummaryService cbSummaryService; private CbSummaryService cbSummaryService;
@Resource @Resource
private CbProjectExpenseSummaryService projectExpenseSummaryService; private CbProjectExpenseSummaryService projectExpenseSummaryService;
@Resource
private CbSceneExpenseChildrenService sceneExpenseChildrenService;
@Resource
private CbProjectOtherService projectOtherService;
@Resource
private ICbCostMeasureService costMeasureService;
/** /**
* 新增项目 * 新增项目
...@@ -114,7 +119,10 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe ...@@ -114,7 +119,10 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe
baseMapper.updateById(projectRecord); baseMapper.updateById(projectRecord);
//修改所有该项目的项目文件状态:解析中 //修改所有该项目的项目文件状态:解析中
CbProjectFileServiceImpl projectFileService = new CbProjectFileServiceImpl(); CbProjectFileServiceImpl projectFileService = new CbProjectFileServiceImpl();
projectFileService.updateBatchById(projectFileList.stream().peek(projectFile -> projectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSING)).collect(Collectors.toList())); projectFileService.updateBatchById(projectFileList.stream().peek(projectFile -> {
projectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSING);
projectFile.setFailRemark(null);
}).collect(Collectors.toList()));
//TODO:调各个成本类型的解析文件方法 //TODO:调各个成本类型的解析文件方法
Integer cbStage = projectRecord.getCbStage(); Integer cbStage = projectRecord.getCbStage();
...@@ -123,13 +131,15 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe ...@@ -123,13 +131,15 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe
//工料汇总 //工料汇总
CbProjectBaseBo projectBaseBo = new CbProjectBaseBo(); CbProjectBaseBo projectBaseBo = new CbProjectBaseBo();
projectBaseBo.setProjectId(projectId); projectBaseBo.setProjectId(projectId);
projectBaseBo.setCbStage(cbStage); projectBaseBo.setCbStage(cbStage);
dataAnalysisComponent.quantitySummaryDataAnalysis(projectBaseBo); dataAnalysisComponent.quantitySummaryDataAnalysis(projectBaseBo);
//措施项目 //措施项目
costMeasureService.parseCbCostMeasureFile(projectId);
//其他项目 //其他项目
projectOtherService.projectOtherDataAnalysis(projectBaseBo);
//现场经费 //现场经费
projectExpenseSummaryService.parseSceneExpenseData(projectId,cbStage,username); projectExpenseSummaryService.parseSceneExpenseSummaryData(projectId, cbStage, username);
sceneExpenseChildrenService.parseSceneExpenseChildrenData(projectId, cbStage, username);
//成本汇总 //成本汇总
cbSummaryService.importCbSummary(projectId); cbSummaryService.importCbSummary(projectId);
} }
...@@ -145,8 +155,10 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe ...@@ -145,8 +155,10 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe
List<CbProjectFile> projectFileList = projectFileMapper.selectList(new LambdaQueryWrapper<CbProjectFile>() List<CbProjectFile> projectFileList = projectFileMapper.selectList(new LambdaQueryWrapper<CbProjectFile>()
.eq(CbProjectFile::getProjectId, projectId) .eq(CbProjectFile::getProjectId, projectId)
.eq(CbProjectFile::getCbType, cbType) .eq(CbProjectFile::getCbType, cbType)
//项目文件状态:准备中 //项目文件状态:准备中or解析失败
.eq(CbProjectFile::getFileParseStatus, CbProjectConstants.PROJECT_FILE_STATUS_PREPARING)); .eq(CbProjectFile::getFileParseStatus, CbProjectConstants.PROJECT_FILE_STATUS_PREPARING)
.or()
.eq(CbProjectFile::getFileParseStatus, CbProjectConstants.PROJECT_FILE_STATUS_PARSE_FAIL));
Assert.isFalse(projectFileList.isEmpty(), cbTypeName + "至少需要上传1个文件"); Assert.isFalse(projectFileList.isEmpty(), cbTypeName + "至少需要上传1个文件");
return projectFileList; return projectFileList;
} }
...@@ -304,11 +316,11 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe ...@@ -304,11 +316,11 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe
* @return 已有数据的成本阶段 * @return 已有数据的成本阶段
*/ */
@Override @Override
public List<Integer> getProjectCbStageNotDraft(Long relatedId) { public List<CbProjectCbStageNotDraftVo> getProjectCbStageNotDraft(Long relatedId) {
//通过关联ID校验项目是否存在 //通过关联ID校验项目是否存在
List<CbProjectRecord> projectRecordList = this.checkRelatedIdExist(relatedId); List<CbProjectRecord> projectRecordList = this.checkRelatedIdExist(relatedId);
ArrayList<Integer> cbStageList = new ArrayList<>(); ArrayList<CbProjectCbStageNotDraftVo> cbStageList = new ArrayList<>();
projectRecordList.forEach(projectRecord -> { projectRecordList.forEach(projectRecord -> {
//文件状态为解析成功or解析失败即为有数据 //文件状态为解析成功or解析失败即为有数据
...@@ -319,7 +331,7 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe ...@@ -319,7 +331,7 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe
.eq(CbProjectFile::getFileParseStatus, CbProjectConstants.PROJECT_FILE_STATUS_PARSE_SUCCESS) .eq(CbProjectFile::getFileParseStatus, CbProjectConstants.PROJECT_FILE_STATUS_PARSE_SUCCESS)
.or() .or()
.eq(CbProjectFile::getFileParseStatus, CbProjectConstants.PROJECT_FILE_STATUS_PARSE_FAIL))) { .eq(CbProjectFile::getFileParseStatus, CbProjectConstants.PROJECT_FILE_STATUS_PARSE_FAIL))) {
cbStageList.add(projectRecord.getCbStage()); cbStageList.add(BeanUtil.toBean(projectRecord, CbProjectCbStageNotDraftVo.class));
} }
}); });
return cbStageList; return cbStageList;
...@@ -341,7 +353,8 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe ...@@ -341,7 +353,8 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe
//不允许删除正在解析中的项目 //不允许删除正在解析中的项目
Assert.isFalse(projectRecord.getProjectFileStatus().equals(CbProjectConstants.PROJECT_FILE_STATUS_PARSING) Assert.isFalse(projectRecord.getProjectFileStatus().equals(CbProjectConstants.PROJECT_FILE_STATUS_PARSING)
, "存在解析中的项目,删除失败"); , "存在解析中的项目,删除失败");
//TODO:各个成本类型数据和对应每月成本数据暂不做删除,项目台账列表查不出来自然也无法查看数据
//各个成本类型数据和对应每月成本数据暂不做删除,项目台账列表查不出来自然也无法查看数据
//删除项目文件记录 //删除项目文件记录
flag = projectFileMapper.delete(new LambdaQueryWrapper<CbProjectFile>() flag = projectFileMapper.delete(new LambdaQueryWrapper<CbProjectFile>()
......
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 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.common.excel.ExcelUtils;
import com.dsk.common.utils.StringUtils;
import com.dsk.cscec.constant.CbProjectConstants;
import com.dsk.cscec.constant.CbSceneExpenseConstants;
import com.dsk.cscec.domain.CbProjectFile;
import com.dsk.cscec.domain.CbProjectRecord;
import com.dsk.cscec.domain.CbSceneExpenseChildren; import com.dsk.cscec.domain.CbSceneExpenseChildren;
import com.dsk.cscec.domain.bo.CbSceneExpenseChildrenDataBo;
import com.dsk.cscec.domain.bo.CbSceneExpenseChildrenImportBo;
import com.dsk.cscec.domain.vo.CbSceneExpenseMenuVo;
import com.dsk.cscec.mapper.CbProjectFileMapper;
import com.dsk.cscec.mapper.CbProjectRecordMapper;
import com.dsk.cscec.mapper.CbSceneExpenseChildrenMapper; import com.dsk.cscec.mapper.CbSceneExpenseChildrenMapper;
import com.dsk.cscec.service.CbSceneExpenseChildrenService; import com.dsk.cscec.service.CbSceneExpenseChildrenService;
import com.dsk.system.service.ISysOssService;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.support.TransactionTemplate;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/** /**
* 现场经费-工资统筹、其他费用、现场管理费表(CbSceneExpenseChildren)表服务实现类 * 现场经费-工资统筹、其他费用、现场管理费表(CbSceneExpenseChildren)表服务实现类
...@@ -18,5 +41,167 @@ import javax.annotation.Resource; ...@@ -18,5 +41,167 @@ import javax.annotation.Resource;
public class CbSceneExpenseChildrenServiceImpl extends ServiceImpl<CbSceneExpenseChildrenMapper, CbSceneExpenseChildren> implements CbSceneExpenseChildrenService { public class CbSceneExpenseChildrenServiceImpl extends ServiceImpl<CbSceneExpenseChildrenMapper, CbSceneExpenseChildren> implements CbSceneExpenseChildrenService {
@Resource @Resource
private CbSceneExpenseChildrenMapper baseMapper; private CbSceneExpenseChildrenMapper baseMapper;
@Resource
private CbProjectRecordMapper projectRecordMapper;
@Resource
private CbProjectFileMapper projectFileMapper;
@Resource
private ISysOssService ossService;
@Resource
private TransactionTemplate transactionTemplate;
/**
* 获取现场经费菜单
*
* @param projectId 项目ID
* @return 菜单
*/
@Override
public List<CbSceneExpenseMenuVo> getMenuList(Long projectId) {
//校验项目是否存在
this.checkProjectExist(projectId);
//TODO:菜单来源分为两部分,1、导入的文件,2、财务一体化系统
//从导入文件获取菜单
List<CbSceneExpenseMenuVo> menuList = projectFileMapper.getSceneExpenseMenuFromFile(projectId, CbProjectConstants.DELETE_FLAG_EXIST, CbProjectConstants.CB_TYPE_SCENE_EXPENSE, CbProjectConstants.PROJECT_FILE_STATUS_PARSE_SUCCESS);
menuList.forEach(menu -> {
//菜单名称去除文件格式尾缀
menu.setMenuName(menu.getMenuName().substring(0, menu.getMenuName().lastIndexOf(".")));
//若是现场经费汇总,则是一级,否则均为二级
if (CbProjectConstants.CB_TYPE_SCENE_EXPENSE_NAME.equals(menu.getMenuName())) {
menu.setMenuLevel(CbSceneExpenseConstants.MENU_LEVEL1);
} else {
menu.setMenuLevel(CbSceneExpenseConstants.MENU_LEVEL2);
}
//菜单来源
menu.setMenuSource(CbSceneExpenseConstants.MENU_SOURCE_FILE_TABLE);
});
//TODO:从财务一体化系统获取菜单
return menuList;
}
/**
* 现场经费二级分类数据解析
*
* @param projectId 项目ID
* @param cbStage 成本阶段
* @param username 用户名
*/
@Override
@Async
public void parseSceneExpenseChildrenData(Long projectId, Integer cbStage, String username) throws Exception {
//查找该项目下所有相关文件
List<CbProjectFile> projectFileList = projectFileMapper.selectAnalysisList(projectId, CbProjectConstants.CB_TYPE_SCENE_EXPENSE, cbStage);
//待解析文件
List<CbProjectFile> waitParseList = new ArrayList<>();
//提取非现场经费汇总文件
projectFileList.forEach(projectFile -> {
if (!CbProjectConstants.CB_TYPE_SCENE_EXPENSE_NAME.equals(projectFile.getFileName().substring(0, projectFile.getFileName().lastIndexOf(".")))) {
//待解析文件
waitParseList.add(projectFile);
}
});
//处理待解析文件
for (CbProjectFile projectFile : waitParseList) {
if (ObjectUtil.isNull(projectFile)) {
continue;
}
//文件下载
InputStream inputStream = ossService.downFileIO(projectFile.getFileOssId());
if (ObjectUtil.isNull(inputStream)) {
projectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_FAIL);
projectFile.setFailRemark("文件数据不存在");
projectFileMapper.updateById(projectFile);
continue;
}
//解析数据
List<CbSceneExpenseChildrenImportBo> importList = new ExcelUtils<>(CbSceneExpenseChildrenImportBo.class).importExcelAllSheet(inputStream, 0);
if (importList.isEmpty()) {
projectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_FAIL);
projectFile.setFailRemark("表格中不存在待导入数据");
projectFileMapper.updateById(projectFile);
continue;
}
//筛选有效数据
List<CbSceneExpenseChildrenImportBo> summaryList = importList.stream().parallel()
//筛选名称列不为空数据
.filter(item -> StringUtils.isNotBlank(item.getExpenseName()))
.peek(item -> {
item.setProjectId(projectId);
item.setProjectFileId(projectFile.getId());
//因为现场管理费Excel表中字段名称不一样,所以做以下单独映射
//公司单价/不含税单价
if (StringUtils.isNotBlank(item.getExcludeTaxUnitPrice())) {
item.setUnitPrice(item.getExcludeTaxUnitPrice());
}
//目标成本合价(不含税)/不含税合价
if (StringUtils.isNotBlank(item.getExcludeTaxSumPrice())) {
item.setTargetCbSumPriceExcludeTax(item.getExcludeTaxSumPrice());
}
//目标成本合价(含税)/含税合价
if (StringUtils.isNotBlank(item.getIncludeTaxSumPrice())) {
item.setTargetCbSumPriceIncludeTax(item.getIncludeTaxSumPrice());
}
item.setCreateBy(username);
item.setCreateTime(new Date());
})
.collect(Collectors.toList());
if (summaryList.size() != importList.size()) {
projectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_FAIL);
projectFile.setFailRemark("表格中存在\"名称\"列为空数据!");
projectFileMapper.updateById(projectFile);
continue;
}
transactionTemplate.execute(status -> {
try {
//批量插入数据
CbSceneExpenseChildrenServiceImpl impl = new CbSceneExpenseChildrenServiceImpl();
Assert.isTrue(impl.saveBatch(BeanUtil.copyToList(summaryList, CbSceneExpenseChildren.class)), "数据插入失败");
//更新文件状态
projectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_SUCCESS);
Assert.isTrue(projectFileMapper.updateById(projectFile) > 0, "解析成功后文件状态更新失败");
} catch (Exception e) {
status.setRollbackOnly();
projectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_FAIL);
projectFile.setFailRemark(e.getMessage());
projectFileMapper.updateById(projectFile);
}
return Boolean.TRUE;
});
}
}
/**
* 获取现场经费二级分类数据
*
* @param childrenDataBo 查询体
* @return 现场经费二级分类数据
*/
@Override
public List<CbSceneExpenseChildren> getChildrenData(CbSceneExpenseChildrenDataBo childrenDataBo) {
//校验项目是否存在
this.checkProjectExist(childrenDataBo.getProjectId());
return baseMapper.selectList(new LambdaQueryWrapper<CbSceneExpenseChildren>()
.eq(CbSceneExpenseChildren::getProjectId, childrenDataBo.getProjectId())
.eq(CbSceneExpenseChildren::getProjectFileId, childrenDataBo.getFileId()));
}
/**
* 校验项目是否存在
*
* @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;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsk.cscec.domain.CbSummaryActualLock;
import com.dsk.cscec.mapper.CbSummaryActualLockMapper;
import com.dsk.cscec.service.CbSummaryActualLockService;
import org.springframework.stereotype.Service;
/**
* 成本汇总-每月成本锁定(CbSummaryActualLock)表服务实现类
*
* @author makejava
* @since 2024-02-27 16:16:09
*/
@Service
public class CbSummaryActualLockServiceImpl extends ServiceImpl<CbSummaryActualLockMapper, CbSummaryActualLock> implements CbSummaryActualLockService {
}
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
<!--@Table cb_cost_measure--> <!--@Table cb_cost_measure-->
<id column="id" jdbcType="BIGINT" property="id" /> <id column="id" jdbcType="BIGINT" property="id" />
<result column="project_id" jdbcType="BIGINT" property="projectId" /> <result column="project_id" jdbcType="BIGINT" property="projectId" />
<result column="cb_stage" jdbcType="INTEGER" property="cbStage" /> <result column="cb_stage" jdbcType="INTEGER" property="projectFileId" />
<result column="parent_id" jdbcType="BIGINT" property="parentId" /> <result column="parent_id" jdbcType="BIGINT" property="parentId" />
<result column="level" jdbcType="INTEGER" property="level" /> <result column="level" jdbcType="INTEGER" property="level" />
<result column="number" jdbcType="VARCHAR" property="number" /> <result column="number" jdbcType="VARCHAR" property="number" />
...@@ -47,11 +47,9 @@ ...@@ -47,11 +47,9 @@
inner JOIN cb_cost_measure_actual t1 ON t1.plan_measure_id=t.id inner JOIN cb_cost_measure_actual t1 ON t1.plan_measure_id=t.id
WHERE WHERE
t.project_id=#{projectId} t.project_id=#{projectId}
AND t.cb_stage=#{cbStage}
AND t1.`month`=#{month}) t1 ON t1.plan_measure_id=t.id AND t1.`month`=#{month}) t1 ON t1.plan_measure_id=t.id
WHERE WHERE
t.project_id=#{projectId} t.project_id=#{projectId}
AND t.cb_stage=#{cbStage}
AND t.`level`!=0 AND t.`level`!=0
AND t.`no` like concat(#{id},'.%') AND t.`no` like concat(#{id},'.%')
ORDER BY id ASC ORDER BY id ASC
......
<?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.CbProjectFileMapper"> <mapper namespace="com.dsk.cscec.mapper.CbProjectFileMapper">
<!--获取现场经费菜单-->
<select id="getSceneExpenseMenuFromFile" resultType="com.dsk.cscec.domain.vo.CbSceneExpenseMenuVo">
select cpf.id as fileId,
cpf.file_name as menuName
from cb_project_file cpf
where cpf.project_id = #{projectId}
and cpf.del_flag = #{deleteFlagExist}
and cpf.cb_type = #{cbTypeSceneExpense}
and cpf.file_parse_status = #{projectFileStatusParseSuccess};
</select>
<select id="selectAnalysisList" resultType="com.dsk.cscec.domain.CbProjectFile"> <select id="selectAnalysisList" resultType="com.dsk.cscec.domain.CbProjectFile">
SELECT SELECT
id, project_id, cb_stage, cb_type, file_name, file_oss_id, file_oss_url, file_parse_status, fail_remark, id, project_id, cb_stage, cb_type, file_name, file_oss_id, file_oss_url, file_parse_status, fail_remark,
del_flag, create_by, create_time, update_by, update_time del_flag, create_by, create_time, update_by, update_time
FROM cb_project_file FROM cb_project_file
WHERE (del_flag = 0 and file_parse_status in (1,3) WHERE (del_flag = 0 and file_parse_status = 1
and project_id=#{projectId} and project_id=#{projectId}
<if test="cbStage != null"> <if test="cbStage != null">
and cb_stage =#{cbStage} and cb_stage =#{cbStage}
</if> </if>
and cb_type = #{cbType} and cb_type = #{cbType})
</select> </select>
<update id="removeById"> <update id="removeById">
......
...@@ -3,8 +3,42 @@ ...@@ -3,8 +3,42 @@
<mapper namespace="com.dsk.cscec.mapper.CbProjectRecordMapper"> <mapper namespace="com.dsk.cscec.mapper.CbProjectRecordMapper">
<!--获取项目台账列表--> <!--获取项目台账列表-->
<select id="selectPageProjectRecordList" resultType="com.dsk.cscec.domain.vo.CbProjectRecordSearchVo"> <select id="selectPageProjectRecordList" resultType="com.dsk.cscec.domain.vo.CbProjectRecordSearchVo">
select <!-- select-->
cpr.id, <!-- cpr.id,-->
<!-- cpr.related_id,-->
<!-- cpr.project_name,-->
<!-- cpr.cb_stage,-->
<!-- cpr.project_file_status,-->
<!-- cpr.ipm_project_no,-->
<!-- cpr.is_get_project_detail,-->
<!-- cpr.project_file_name,-->
<!-- cpr.create_time-->
<!-- from cb_project_record cpr-->
<!-- left join cb_project_record cprr-->
<!-- on cpr.related_id = cprr.related_id-->
<!-- and cpr.cb_stage &lt; cprr.cb_stage-->
<!-- where-->
<!-- cprr.cb_stage is null-->
<!-- and-->
<!-- cpr.del_flag=#{deleteFlagExist}-->
<!-- <if test="searchBo.projectName != null and searchBo.projectName != ''">-->
<!-- and cpr.project_name like concat('%',#{searchBo.projectName},'%')-->
<!-- </if>-->
<!-- <if test="searchBo.ipmProjectNo != null and searchBo.ipmProjectNo != ''">-->
<!-- and cpr.ipm_project_no = #{searchBo.ipmProjectNo}-->
<!-- </if>-->
<!-- <if test="searchBo.cbStage != null">-->
<!-- and cpr.cb_stage = #{searchBo.cbStage}-->
<!-- </if>-->
<!-- <if test="searchBo.projectFileStatus != null">-->
<!-- and project_file_status = #{searchBo.projectFileStatus}-->
<!-- </if>-->
<!-- and-->
<!-- cpr.project_file_status != #{projectFileStatusPreparing}-->
<!-- order by cpr.create_time desc-->
select a.*
from (
select DISTINCT cpr.id,
cpr.related_id, cpr.related_id,
cpr.project_name, cpr.project_name,
cpr.cb_stage, cpr.cb_stage,
...@@ -14,13 +48,7 @@ ...@@ -14,13 +48,7 @@
cpr.project_file_name, cpr.project_file_name,
cpr.create_time cpr.create_time
from cb_project_record cpr from cb_project_record cpr
left join cb_project_record cprr where cpr.del_flag=#{deleteFlagExist}
on cpr.related_id = cprr.related_id
and cpr.cb_stage &lt; cprr.cb_stage
where
cprr.cb_stage is null
and
cpr.del_flag=#{deleteFlagExist}
<if test="searchBo.projectName != null and searchBo.projectName != ''"> <if test="searchBo.projectName != null and searchBo.projectName != ''">
and cpr.project_name like concat('%',#{searchBo.projectName},'%') and cpr.project_name like concat('%',#{searchBo.projectName},'%')
</if> </if>
...@@ -35,7 +63,9 @@ ...@@ -35,7 +63,9 @@
</if> </if>
and and
cpr.project_file_status != #{projectFileStatusPreparing} cpr.project_file_status != #{projectFileStatusPreparing}
order by cpr.create_time desc order by cpr.cb_stage desc) a
group by a.related_id
order by a.create_time desc
</select> </select>
<!--获取草稿弹窗列表--> <!--获取草稿弹窗列表-->
......
...@@ -106,12 +106,53 @@ export function getProjectList(data) { ...@@ -106,12 +106,53 @@ export function getProjectList(data) {
}); });
} }
//查询当前项目可删除成本阶段
export function getProjectHistoryInfo(data) {
return request({
url: '/cbProjectRecord/getProjectHistoryInfo',
method: 'get',
params:data
});
}
//盈亏分析对比 左侧菜单 //盈亏分析对比 左侧菜单
export const getProfitLossMenuTreeApi = (params = {}) => request({ export const getProfitLossMenuTreeApi = (params = {}) => request({
url: "/cbSummary/cbNameList", url: "/cbSummary/cbNameList",
method: "get", method: "get",
params params
}) })
//盈亏分析对比 数据列表
export function getAnalysislist(data) {
return request({
url: '/cb/gain/loss/analysis/list',
method: 'get',
params:data
});
}
// 措施项目 左侧菜单
export function getMeasureslist(projectId) {
return request({
url: '/cb/cost/measures/type/'+projectId,
method: 'get',
});
}
//措施费列表
export function getCostMeasureslist(data) {
return request({
url: '/cb/cost/measures/list',
method: 'get',
params:data
});
}
//措施费汇总
export function getSummarydata(data) {
return request({
url: '/cb/cost/measures/summary/data',
method: 'post',
data:data
});
}
// 工料汇总 // 工料汇总
......
...@@ -61,7 +61,7 @@ export default { ...@@ -61,7 +61,7 @@ export default {
// 文件类型, 例如['png', 'jpg', 'jpeg'] // 文件类型, 例如['png', 'jpg', 'jpeg']
fileType: { fileType: {
type: Array, type: Array,
default: () => ["doc", "xls", "ppt", "txt", "pdf"], default: () => ["xlsx","docx","doc", "xls", "ppt", "txt", "pdf"],
}, },
// 是否显示提示 // 是否显示提示
isShowTip: { isShowTip: {
......
...@@ -1082,9 +1082,9 @@ export function addTreeLevel(tree, startLevel = 1, removeEmptyChildren = true) { ...@@ -1082,9 +1082,9 @@ export function addTreeLevel(tree, startLevel = 1, removeEmptyChildren = true) {
export function addNodeParent(tree, parent = null) { export function addNodeParent(tree, parent = null) {
if (tree instanceof Array && tree?.length) { if (tree instanceof Array && tree?.length) {
tree.forEach(node => { tree.forEach(node => {
node["parent"] = parent ? parent : JSON.parse(JSON.stringify(parent)); node["parent"] = parent;
if (node.children instanceof Array && node.children.length) { if (node.children instanceof Array && node.children.length) {
addNodeParent(node.children, node); addNodeParent(node.children, JSON.parse(JSON.stringify(node)));
} }
}); });
} }
......
...@@ -62,67 +62,7 @@ export default { ...@@ -62,67 +62,7 @@ export default {
comProjectDetailInfo: {}, comProjectDetailInfo: {},
comProjectId: "", comProjectId: "",
defaultActive: "", defaultActive: "",
menuTreeList: [ menuTreeList: []
// {
// nodeName: "房建类成本科目",
// id: "1",
// children: [
// {
// nodeName: "劳务分包工程",
// id: "1-1",
// children: [
// {
// nodeName: "主体工程-结构劳务",
// id: "1-1-1",
// children: [
// {
// nodeName: "结构劳务分包",
// id: "1-1-1-1",
// }
// ]
// },
// {
// nodeName: "二次结构及粗装修劳务",
// id: "1-2-1",
// children: [
// {
// nodeName: "二次机构及粗装修劳务",
// id: "1-2-1",
// }
// ]
// },
// {
// nodeName: "拆除、修缮、清理、改造劳...",
// id: "1-3-1",
// children: [
// {
// nodeName: "拆除、修缮、清理、改造劳...",
// id: "1-3-1",
// }
// ]
// }
// ]
// },
// {
// nodeName: "专业分包工程",
// id: "2-1",
// },
// {
// nodeName: "实体工程材料(土建)",
// id: "3-1",
// },
// {
// nodeName: "其他直接费成本",
// id: "4-1",
// },
// ]
// },
// {
// nodeName: "未归类项目",
// id: "2",
// children: []
// }
]
}; };
}, },
//可访问data属性 //可访问data属性
......
<template>
<div class="feed-summary-container">
<div class="feed-summary-inner">
<div class="left-side-menu">
<project-side-menu ref="profitloss" :menuTree="menuTreeList" :menuOptions="menuOptions" :unique-opened="false" :default-active="defaultActive" @select="select">
<template slot="措施费-1">
<img src="@/assets/images/projectCostLedger/icon_cost_detail_4.svg" alt="">
<div class="project-sub-menu-title-text">措施费</div>
</template>
</project-side-menu>
</div>
<div class="profitloss">
<div class="search">
<el-date-picker size="small" style="width: 140px"
v-model="expenseDate"
type="month"
placeholder="选择月" @change="changetime"
:picker-options="pickerOptions">
</el-date-picker>
</div>
<div class="table-item">
<el-table
element-loading-text="Loading"
:data="tableData"
:row-class-name="tableRowClassName"
row-key="id"
v-horizontal-scroll="'hover'"
default-expand-all
:tree-props="{children: 'children', hasChildren: 'hasChildren'}"
border
highlight-current-row
>
<el-table-column label="序号" width="60" align="left" prop="index" fixed="left"></el-table-column>
<el-table-column label="清单内容" width="130" prop="itemContent" fixed="left">
<template slot-scope="scope">{{scope.row.itemContent || '--'}}</template>
</el-table-column>
<el-table-column label="工作内容、做法/规格型号/施工现场配置说明" width="300" prop="workContent">
<template slot-scope="scope">{{scope.row.workContent || '--'}}</template>
</el-table-column>
<el-table-column label="单位" width="130" prop="unit">
<template slot-scope="scope">{{scope.row.unit || '--'}}</template>
</el-table-column>
<el-table-column label="工程量" width="130" prop="quantity">
<template slot-scope="scope">{{scope.row.quantity || '--'}}</template>
</el-table-column>
<el-table-column label="不含税单价" width="130" prop="unitPriceExcludingTax">
<template slot-scope="scope">{{scope.row.unitPriceExcludingTax || '--'}}</template>
</el-table-column>
<el-table-column label="使用时间" width="130" prop="usageTime">
<template slot-scope="scope">{{scope.row.usageTime || '--'}}</template>
</el-table-column>
</el-table>
</div>
</div>
</div>
</div>
</template>
<script>
import ProjectSideMenu from "@/views/projectCostLedger/detail/components/ProjectSideMenu";
import { getMeasureslist,getCostMeasureslist ,getSummarydata} from "@/api/projectCostLedger";
export default {
name: "MeasureItems",
props: {
// 项目ID
projectId: {
type: String,
required: true,
default: ""
},
// 详情信息
projectDetailInfo: {
type: Object,
default: () => ({})
}
},
watch: {
projectDetailInfo: {
handler(newValue) {
this.comProjectDetailInfo = newValue ? newValue : {};
this.init(this.projectId);
},
deep: true,
immediate: true
},
projectId: {
handler(newValue) {
this.comProjectId = newValue;
},
immediate: true
}
},
components: {
ProjectSideMenu
},
data() {
return {
pickerOptions: {
disabledDate(time) {
let istrue = true
let month = new Date().getMonth()+1
let year = new Date().getFullYear()
let times = (year+5)+'-'+ month + '-01 ' + '00:00:00'
istrue = new Date().getTime() < time.getTime() && time.getTime() < new Date(times).getTime()
return !istrue
},
},
menuOptions: {
nodeName: "itemContent",
nodeValue: "id",
},
comProjectDetailInfo: {},
comProjectId: "",
defaultActive: "",
menuTreeList: [
],
id: 0,
expenseDate:'',
tableData:[],
};
},
//可访问data属性
created() {
let month = new Date().getMonth() +1
let year = new Date().getFullYear()
this.expenseDate = year + '-' + (month>= 9? month:'0'+ month)
},
//计算集
computed: {
},
//方法集
methods: {
select(menuPath){
this.id = menuPath
let month = this.expenseDate.replace(/-/ig, "");
let param = {
projectId:this.projectId,
id:this.id,
month:month
}
getCostMeasureslist(param).then(res=>{
this.tableData = res.data
})
},
async init(detail = '') {
try {
const projectId = detail;
if (!projectId) return;
await this.getFeedSummaryMenuTree(projectId);
} catch (error) {
}
},
async getFeedSummaryMenuTree(params) {
try {
const result = await getMeasureslist(params);
if (result.code == 200) {
let arr = {}
arr.itemContent = '措施费'
arr.id = 0
arr.children = result.data
const _tempArray = [arr];
this.menuTreeList = _tempArray;
await this.$nextTick()
this.$refs['profitloss'].$refs['customElMenu'].open(_tempArray[0].id)
this.defaultActive = result.data[0].id
this.select(result.data[0].id)
}
} catch (error) {
console.log(error)
}
},
changetime(){
this.select(this.id)
},
},
}
</script>
<style lang="scss" scoped>
.feed-summary-container {
width: 100%;
height: 100%;
.feed-summary-inner {
width: 100%;
height: 100%;
display: flex;
align-items: center;
.left-side-menu {
width: 220px;
min-width: 220px;
height: 100%;
}
.profitloss{
width: calc(100% - 220px);
height: 100%;
background: #fff;
padding: 16px;
.table-item{
margin-top: 16px;
}
}
}
}
</style>
<template> <template>
<div class="project-side-menu-container"> <div class="project-side-menu-container">
<el-menu mode="vertical" class="project-side-menu-instance" :unique-opened="uniqueOpened" :default-active="defaultActive" @select="menuSelect" <el-menu mode="vertical" class="project-side-menu-instance" :unique-opened="uniqueOpened" :default-active="comDefaultActive" @select="menuSelect"
@open="subMenuOpen" @close="subMenuClose"> @open="subMenuOpen" @close="subMenuClose" ref="customElMenu">
<template v-for="(item,index) of tempMenuTree"> <template v-for="(item,index) of tempMenuTree">
<project-menu-item :menuItem="item" :key="item.nodeValue"> <project-menu-item :menuItem="item" :key="item.nodeValue">
<template :slot="`${item.nodeName}-${item.level}`" slot-scope="scope"> <template :slot="`${item.nodeName}-${item.level}`" slot-scope="scope">
...@@ -56,6 +56,11 @@ export default { ...@@ -56,6 +56,11 @@ export default {
}, },
deep: true, deep: true,
immediate: true immediate: true
},
defaultActive: {
handler(newValue) {
this.comDefaultActive = newValue;
}
} }
}, },
data() { data() {
...@@ -69,7 +74,8 @@ export default { ...@@ -69,7 +74,8 @@ export default {
}, },
tempMenuOptions: {}, tempMenuOptions: {},
tempMenuTree: [], tempMenuTree: [],
comMenuTree: this.menuTree comMenuTree: this.menuTree,
comDefaultActive: this.defaultActive
}; };
}, },
//可访问data属性 //可访问data属性
...@@ -260,6 +266,7 @@ export default { ...@@ -260,6 +266,7 @@ export default {
} }
} }
} }
/* 无下级菜单 */ /* 无下级菜单 */
.project-only-menu-item { .project-only-menu-item {
height: unset; height: unset;
...@@ -271,6 +278,12 @@ export default { ...@@ -271,6 +278,12 @@ export default {
position: unset; position: unset;
white-space: unset; white-space: unset;
&.is-active,
&:hover {
/* 重置li默认样式 */
background-color: unset;
}
/* 选中 */ /* 选中 */
&.is-active { &.is-active {
.project-only-menu-title-container { .project-only-menu-title-container {
...@@ -285,6 +298,7 @@ export default { ...@@ -285,6 +298,7 @@ export default {
} }
} }
} }
.project-only-menu-title-container { .project-only-menu-title-container {
height: 32px; height: 32px;
line-height: unset; line-height: unset;
......
...@@ -17,11 +17,14 @@ ...@@ -17,11 +17,14 @@
<!-- 工料汇总 --> <!-- 工料汇总 -->
<feed-summary v-if="current == 'feedSummary'" :project-id="projectID" :project-detail-info="detailInfo"></feed-summary> <feed-summary v-if="current == 'feedSummary'" :project-id="projectID" :project-detail-info="detailInfo"></feed-summary>
<!--措施项目-->
<measure-items v-if="current == 'measureItem'" :project-id="projectID" :project-detail-info="detailInfo"></measure-items>
<!-- 其他项目 --> <!-- 其他项目 -->
<other-projects v-if="current == 'otherItems'"></other-projects> <other-projects v-if="current == 'otherItems'"></other-projects>
<!-- 盈亏分析对比 --> <!-- 盈亏分析对比 -->
<profit-Loss v-if="current == 'profitAndLoss'" :project-id="projectID"></profit-Loss> <profit-Loss v-if="current == 'profitAndLoss'" :project-id="projectID" :project-detail-info="detailInfo"></profit-Loss>
</div> </div>
</div> </div>
...@@ -36,6 +39,8 @@ import EngineeringInformation from "@/views/projectCostLedger/detail/components/ ...@@ -36,6 +39,8 @@ import EngineeringInformation from "@/views/projectCostLedger/detail/components/
import DirectCost from "@/views/projectCostLedger/detail/components/DirectCost"; import DirectCost from "@/views/projectCostLedger/detail/components/DirectCost";
// 工料汇总 // 工料汇总
import FeedSummary from "@/views/projectCostLedger/detail/components/FeedSummary"; import FeedSummary from "@/views/projectCostLedger/detail/components/FeedSummary";
// 措施费用
import MeasureItems from "@/views/projectCostLedger/detail/components/MeasureItems";
// 其他项目 // 其他项目
import OtherProjects from "@/views/projectCostLedger/detail/components/OtherProjects"; import OtherProjects from "@/views/projectCostLedger/detail/components/OtherProjects";
// 盈亏分析对比 // 盈亏分析对比
...@@ -52,7 +57,8 @@ export default { ...@@ -52,7 +57,8 @@ export default {
EngineeringInformation, EngineeringInformation,
DirectCost, DirectCost,
OtherProjects, OtherProjects,
ProfitLoss ProfitLoss,
MeasureItems
}, },
data() { data() {
return { return {
...@@ -61,7 +67,8 @@ export default { ...@@ -61,7 +67,8 @@ export default {
// 详情信息变量 // 详情信息变量
detailInfo: { detailInfo: {
projectId: "1754425038355890177", projectId: "1754425038355890177",
cbStage: 0 cbStage: 0,
cbType:1
}, },
toggleTabs: [ toggleTabs: [
{ {
......
...@@ -53,9 +53,13 @@ ...@@ -53,9 +53,13 @@
<el-table :data="tableData" :header-cell-style="{ background:'#f0f3fa',color: 'rgba(35,35,35,0.8)'}" <el-table :data="tableData" :header-cell-style="{ background:'#f0f3fa',color: 'rgba(35,35,35,0.8)'}"
v-sticky-header.always="{offsetTop : '-16px',offsetBottom : '10px'}" class="table-item1 fixed-table" border highlight-current-row v-sticky-header.always="{offsetTop : '-16px',offsetBottom : '10px'}" class="table-item1 fixed-table" border highlight-current-row
:header-row-class-name="setHeaderRow" :cell-class-name="setCellClass" :row-class-name="setRowClass" :header-cell-class-name="setCellClass" :header-row-class-name="setHeaderRow" :cell-class-name="setCellClass" :row-class-name="setRowClass" :header-cell-class-name="setCellClass"
ref="theOwnerListTable" :row-key="'customerKey'"> ref="theOwnerListTable" :row-key="'customerKey'"
lazy
row-key="id"
:load="load"
:tree-props="{children: 'children', hasChildren: 'hasChildren'}">
<el-table-column type="index" label="序号" width="60" :resizable="false"> <el-table-column type="index" label="序号" width="60">
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{(formdata.pageNum - 1) *formdata.pageSize + scope.$index + 1}}</span> <span>{{(formdata.pageNum - 1) *formdata.pageSize + scope.$index + 1}}</span>
</template> </template>
...@@ -246,7 +250,7 @@ ...@@ -246,7 +250,7 @@
checkProjectCodeExist, checkProjectCodeExist,
deleteDraft, deleteDraft,
editProjectInfo, editProjectInfo,
getDraftDialogList,getProjectCbStageNotDraft,getProjectList,batchDeleteProject getDraftDialogList,getProjectCbStageNotDraft,getProjectList,batchDeleteProject,getProjectHistoryInfo
} from '@/api/projectCostLedger/index' } from '@/api/projectCostLedger/index'
import { getDicts } from '@/api/system/dict/data' import { getDicts } from '@/api/system/dict/data'
import proupload from '@/views/projectCostLedger/upload/index' import proupload from '@/views/projectCostLedger/upload/index'
...@@ -302,7 +306,6 @@ ...@@ -302,7 +306,6 @@
}, },
//可访问data属性 //可访问data属性
created() { created() {
// this.isupload = true
//成本阶段 //成本阶段
getDicts('pro_cbstage').then(res=>{ getDicts('pro_cbstage').then(res=>{
this.cbStagelist = res.data this.cbStagelist = res.data
...@@ -322,6 +325,16 @@ ...@@ -322,6 +325,16 @@
}, },
//方法集 //方法集
methods: { methods: {
//树形懒加载
load(tree, treeNode, resolve) {
let param = JSON.parse(JSON.stringify(this.formdata))
param.projectId = tree.id
setTimeout(() => {
getProjectHistoryInfo(param).then(res => {
resolve(res.data)
})
}, 1000)
},
//获取台账列表 //获取台账列表
getlist(){ getlist(){
getProjectList(this.formdata).then(res=>{ getProjectList(this.formdata).then(res=>{
...@@ -524,27 +537,27 @@ ...@@ -524,27 +537,27 @@
}) })
}, },
deletecg(id){ deletecg(id){
this.$confirm('是否确定删除此项目,删除后无法找回。', '提示', { this.$confirm('是否确定删除此项目,删除后无法找回。', '提示', {
confirmButtonText: '确定删除', confirmButtonText: '确定删除',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning' type: 'warning'
}).then(() => { }).then(() => {
deleteDraft(id).then(res=>{ deleteDraft(id).then(res=>{
if(res.code == 200){ if(res.code == 200){
this.$message({ this.$message({
type: 'success', type: 'success',
message: '删除成功!' message: '删除成功!'
}); });
this.getCGXlist(1) this.getCGXlist(1)
} }
}) })
}).catch(() => { }).catch(() => {
this.$message({ this.$message({
type: 'info', type: 'info',
message: '已取消删除' message: '已取消删除'
});
}); });
}); },
},
}, },
} }
</script> </script>
...@@ -555,6 +568,9 @@ ...@@ -555,6 +568,9 @@
box-sizing: border-box; box-sizing: border-box;
padding: 16px 24px; padding: 16px 24px;
overflow: auto; overflow: auto;
::v-deep .table-item .el-table td .cell{
display: flex;
}
.project-cost-ledger-inner { .project-cost-ledger-inner {
width: 100%; width: 100%;
/*height: 100%;*/ /*height: 100%;*/
......
...@@ -27,31 +27,31 @@ ...@@ -27,31 +27,31 @@
<span>{{(pageNum - 1) *pageSize + scope.$index + 1}}</span> <span>{{(pageNum - 1) *pageSize + scope.$index + 1}}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="年度" width="120" :resizable="false"> <el-table-column label="年度" width="120" prop="name1" :resizable="false">
</el-table-column> </el-table-column>
<el-table-column label="使用公司" :resizable="false"> <el-table-column label="使用公司" :resizable="false" width="250">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.legalPerson||"--"}} {{scope.row.name2||"--"}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="使用项目" :resizable="false"> <el-table-column label="使用项目" width="250" :resizable="false">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.legalPerson||"--"}} {{scope.row.name3||"--"}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="项目考评" min-width="120" :resizable="false"> <el-table-column label="项目考评" min-width="120" :resizable="false">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.legalPerson||"--"}} {{scope.row.name4||"--"}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="公司考评分" min-width="120" :resizable="false"> <el-table-column label="公司考评分" min-width="120" :resizable="false">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.legalPerson||"--"}} {{scope.row.name5||"--"}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="汇总分" min-width="120" :resizable="false"> <el-table-column label="汇总分" min-width="120" :resizable="false">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.legalPerson||"--"}} {{scope.row.name6||"--"}}
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
...@@ -78,10 +78,11 @@ ...@@ -78,10 +78,11 @@
return{ return{
encodeStr, encodeStr,
tableData:[ tableData:[
{name:'测试',legalPerson:'AAAA'} {name1:'2021年度',name2:'中建一局集团第二建筑有限公司',name3:'剧场及配套办公等2项(北京市文化中心)',name4:'-',name5:'-',name6:'-'},
{name1:'2021年度',name2:'中建一局集团第二建筑有限公司',name3:'剧场及配套办公等2项(北京市文化中心)',name4:'-',name5:'-',name6:'-'},
], ],
isSkeleton:false, isSkeleton:false,
total:100, total:2,
pageSize:50, pageSize:50,
pageNum:1, pageNum:1,
} }
......
...@@ -27,56 +27,56 @@ ...@@ -27,56 +27,56 @@
<span>{{(pageNum - 1) *pageSize + scope.$index + 1}}</span> <span>{{(pageNum - 1) *pageSize + scope.$index + 1}}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="使用项目" width="320" :fixed="tableColumnFixed" :resizable="false"> <el-table-column label="使用项目" width="350" :fixed="tableColumnFixed" prop="name1" :resizable="false">
</el-table-column> </el-table-column>
<el-table-column label="使用单位" :min-width="200" :resizable="false"> <el-table-column label="使用单位" :min-width="260" :resizable="false">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.legalPerson||"--"}} {{scope.row.name2||"--"}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="公司名称" :min-width="200" :resizable="false"> <el-table-column label="公司名称" :min-width="300" :resizable="false">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.legalPerson||"--"}} {{scope.row.name3||"--"}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="处置时间" :min-width="180" :resizable="false"> <el-table-column label="处置时间" :min-width="180" :resizable="false">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.legalPerson||"--"}} {{scope.row.name4||"--"}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="年度" min-width="120" :resizable="false"> <el-table-column label="年度" min-width="120" :resizable="false">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.legalPerson||"--"}} {{scope.row.name5||"--"}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="处置前状态" :min-width="200" :resizable="false"> <el-table-column label="处置前状态" :min-width="200" :resizable="false">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.legalPerson||"--"}} {{scope.row.name6||"--"}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="处置后状态" :min-width="200" :resizable="false"> <el-table-column label="处置后状态" :min-width="200" :resizable="false">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.legalPerson||"--"}} {{scope.row.name7||"--"}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="处置前等级" :min-width="200" :resizable="false"> <el-table-column label="处置前等级" :min-width="200" :resizable="false">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.legalPerson||"--"}} {{scope.row.name8||"--"}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="处置后等级" :min-width="200" :resizable="false"> <el-table-column label="处置后等级" :min-width="200" :resizable="false">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.legalPerson||"--"}} {{scope.row.name9||"--"}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="预警原因" :min-width="200" :resizable="false"> <el-table-column label="预警原因" :min-width="200" :resizable="false">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.legalPerson||"--"}} {{scope.row.name10||"--"}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="不合格原因" :min-width="200" :resizable="false"> <el-table-column label="不合格原因" :min-width="200" :resizable="false">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.legalPerson||"--"}} {{scope.row.name11||"--"}}
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
...@@ -103,10 +103,11 @@ ...@@ -103,10 +103,11 @@
return{ return{
encodeStr, encodeStr,
tableData:[ tableData:[
{name:'测试',legalPerson:'AAAA'} {name1:'河南水投分布式光伏项目(一期)工程EPC总承包',name2:'中建一局集团第二建筑有限公司',name3:'剧场及配套办公等2项(北京市文化中心)',name4:'2023年11月25日',name5:'2023',name6:'-',name7:'涉诉禁用',name8:'A',name9:'B',name10:'-',name11:'-'},
{name1:'河南水投分布式光伏项目(一期)工程EPC总承包',name2:'中建一局集团第二建筑有限公司',name3:'剧场及配套办公等2项(北京市文化中心)',name4:'-',name5:'-',name6:'-',name7:'-',name8:'-',name9:'-',name10:'-',name11:'-'}
], ],
isSkeleton:false, isSkeleton:false,
total:100, total:2,
pageSize:50, pageSize:50,
pageNum:1, pageNum:1,
// table列是否悬浮 // table列是否悬浮
......
...@@ -54,9 +54,9 @@ ...@@ -54,9 +54,9 @@
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
<el-form-item label="涉诉状态"> <el-form-item label="涉诉状态">
<!--<el-select multiple placeholder="请选择" :collapse-tags="true" clearable>--> <el-select multiple placeholder="请选择" :collapse-tags="true" clearable>
<!--<el-option v-for="(item,index) in litigationstatus" :label="item.dictLabel" :value="item.dictValue" :key="index"></el-option>--> <el-option v-for="(item,index) in litigationstatus" :label="item.dictLabel" :value="item.dictValue" :key="index"></el-option>
<!--</el-select>--> </el-select>
</el-form-item> </el-form-item>
</el-row> </el-row>
<el-divider></el-divider> <el-divider></el-divider>
......
...@@ -42,7 +42,7 @@ module.exports = { ...@@ -42,7 +42,7 @@ module.exports = {
// target: `http://122.9.160.122:9011`, //线上 // target: `http://122.9.160.122:9011`, //线上
// target: `http://192.168.0.165:9098`,//施-无线 // target: `http://192.168.0.165:9098`,//施-无线
// target: `http://192.168.60.46:9098`,//施-有线 // target: `http://192.168.60.46:9098`,//施-有线
// target: `http://192.168.60.6:9098`,//谭 // target: `http://192.168.60.90:9098`,//谭
changeOrigin: true, changeOrigin: true,
pathRewrite: { pathRewrite: {
['^' + process.env.VUE_APP_BASE_API]: '' ['^' + process.env.VUE_APP_BASE_API]: ''
......
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