Commit 5ca4821e authored by tianhongyang's avatar tianhongyang

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 de398331 6ab1356e
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;
......@@ -8,16 +9,20 @@ import com.dsk.cscec.domain.CbProjectFile;
import com.dsk.cscec.domain.CbQuantitySummary;
import com.dsk.cscec.domain.bo.CbProjectBaseBo;
import com.dsk.cscec.service.CbProjectFileService;
import com.dsk.cscec.service.ICbQuantitySummaryActualService;
import com.dsk.cscec.service.ICbQuantitySummaryService;
import com.dsk.oss.factory.OssFactory;
import com.dsk.system.domain.vo.SysOssVo;
import com.dsk.system.service.ISysOssService;
import org.apache.el.stream.Stream;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.support.TransactionTemplate;
import org.springframework.util.ObjectUtils;
import java.io.FileInputStream;
import javax.annotation.Resource;
import java.io.InputStream;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
......@@ -32,6 +37,12 @@ public class DataAnalysisComponent {
@Autowired
private ICbQuantitySummaryService quantitySummaryService;
@Autowired
private CbProjectFileService projectFileService;
@Autowired
private ISysOssService ossService;
@Resource
private TransactionTemplate transactionTemplate;
/**
* 工料汇总数据解析
......@@ -42,52 +53,76 @@ public class DataAnalysisComponent {
List<CbProjectFile> fileList = projectFileService.list(Wrappers.<CbProjectFile>lambdaQuery()
.eq(CbProjectFile::getProjectId, bo.getProjectId())
.eq(CbProjectFile::getCbType, CbProjectConstants.CB_TYPE_QUANTITY_SUMMARY)
.eq(CbProjectFile::getCbStage, bo.getCbStage()));
.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) {
if (file.getFileParseStatus() == 3) break;
//文件下载
InputStream inputStream = ossService.downFileIO(file.getFileOssId());
if (ObjectUtil.isNull(inputStream)) {
file.setFileParseStatus(3);
file.setFailRemark("文件数据不存在");
projectFileService.updateById(file);
break;
}
//解析数据
List<CbQuantitySummary> importList = new ExcelUtils<>(CbQuantitySummary.class).importExcelAllSheet(new FileInputStream(""), 1);
List<CbQuantitySummary> importList = new ExcelUtils<>(CbQuantitySummary.class).importExcelAllSheet(inputStream, 1);
if (importList.isEmpty()) {
throw new ServiceException("表格中不存在待导入数据!");
file.setFileParseStatus(3);
file.setFailRemark("表格中不存在待导入数据!");
projectFileService.updateById(file);
break;
}
importList = importList.stream().parallel()
List<CbQuantitySummary> quantitySummaryList = importList.stream().parallel()
.filter(item -> !ObjectUtils.isEmpty(item.getCbName()))
.peek(item -> {
item.setProjectId(1L);
item.setCbStage(0);
item.setCbProjectFileId(1L);
}).collect(Collectors.toList());
if (importList.isEmpty()) {
if (quantitySummaryList.isEmpty()) {
throw new ServiceException("表格中不存在有效数据数据!");
}
//分批次插入
if (importList.size() > 1000) {
int index = 0;
int sum = importList.size();
while (index < sum) {
List<CbQuantitySummary> divideList = importList.subList(index, Math.max((index + 1) * 1000, sum));
boolean b = quantitySummaryService.saveBatch(divideList);
transactionTemplate.execute(status -> {
try {
//分批次插入
if (quantitySummaryList.size() > 1000) {
int index = 0;
int sum = quantitySummaryList.size();
while (index < sum) {
List<CbQuantitySummary> divideList = quantitySummaryList.subList(index, Math.max((index + 1) * 1000, sum));
boolean b = quantitySummaryService.saveBatch(divideList);
if (!b) {
throw new ServiceException("数据插入失败!");
}
index += 1000;
}
} else {
boolean b = quantitySummaryService.saveBatch(quantitySummaryList);
if (!b) {
throw new ServiceException("数据插入失败!");
}
}
file.setFileParseStatus(2);
boolean b = projectFileService.updateById(file);
if (!b) {
throw new ServiceException("数据插入失败!");
throw new ServiceException("文件状态更新失败!");
}
index += 1000;
}
} else {
boolean b = quantitySummaryService.saveBatch(importList);
if (!b) {
throw new ServiceException("数据插入失败!");
} catch (Exception e) {
status.setRollbackOnly();
file.setFileParseStatus(3);
file.setFailRemark(e.getMessage());
projectFileService.updateById(file);
}
}
return Boolean.TRUE;
});
} else {
quantitySummaryService.remove(Wrappers.<CbQuantitySummary>lambdaQuery().eq(CbQuantitySummary::getCbProjectFileId, file.getId()));
projectFileService.removeById(file);
}
}
}
@Autowired
private CbProjectFileService projectFileService;
}
......@@ -21,9 +21,9 @@ public interface CbProjectConstants {
*/
Integer CB_STAGE_TO_SOLID = 2;
/**
* 项目文件状态:待解析
* 项目文件状态:准备中
*/
Integer PROJECT_FILE_STATUS_WAIT_PARSE = 0;
Integer PROJECT_FILE_STATUS_PREPARING = 0;
/**
* 项目文件状态:解析中
*/
......@@ -58,25 +58,31 @@ public interface CbProjectConstants {
* 成本类型:直接费成本
*/
Integer CB_TYPE_DIRECT_EXPENSE = 0;
String CB_TYPE_DIRECT_EXPENSE_NAME = "直接费成本";
/**
* 成本类型:工料汇总
*/
Integer CB_TYPE_QUANTITY_SUMMARY = 1;
String CB_TYPE_QUANTITY_SUMMARY_NAME = "工料汇总";
/**
* 成本类型:措施项目
*/
Integer CB_TYPE_MEASURE_PROJECT = 2;
String CB_TYPE_MEASURE_PROJECT_NAME = "措施项目";
/**
* 成本类型:其他项目
*/
Integer CB_TYPE_OTHER_PROJECT = 3;
String CB_TYPE_OTHER_PROJECT_NAME = "其他项目";
/**
* 成本类型:现场经费
*/
Integer CB_TYPE_SCENE_EXPENSE = 4;
String CB_TYPE_SCENE_EXPENSE_NAME = "现场经费";
/**
* 成本类型:成本汇总
*/
Integer CB_TYPE_SUMMARY = 5;
String CB_TYPE_SUMMARY_NAME = "成本汇总";
}
......@@ -8,7 +8,6 @@ import com.dsk.common.enums.BusinessType;
import com.dsk.common.exception.ServiceException;
import com.dsk.cscec.domain.bo.AddProjectFileUploadBo;
import com.dsk.cscec.domain.bo.QueryProjectFileUploadDetailBo;
import com.dsk.cscec.domain.vo.DraftDialogListVo;
import com.dsk.cscec.domain.vo.QueryProjectFileUploadDetailVo;
import com.dsk.cscec.service.CbProjectFileService;
import com.dsk.system.domain.vo.SysOssVo;
......@@ -23,7 +22,6 @@ import javax.validation.constraints.NotNull;
import java.io.UnsupportedEncodingException;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
......@@ -77,18 +75,6 @@ public class CbProjectFileController extends BaseController {
return toAjax(baseService.deleteProjectFile(fileId));
}
/**
* 获取草稿弹窗列表
*/
@GetMapping("/getDraftDialogList")
public R<List<DraftDialogListVo>> getDraftDialogList() {
List<DraftDialogListVo> draftList = baseService.getDraftDialogList();
if (draftList.isEmpty()) {
return R.ok("暂无草稿记录");
}
return R.ok(draftList);
}
/**
* 获取项目文件上传详情
*/
......
......@@ -5,6 +5,7 @@ import com.dsk.common.core.controller.BaseController;
import com.dsk.common.core.domain.R;
import com.dsk.cscec.domain.CbProjectRecord;
import com.dsk.cscec.domain.bo.AddCbProjectBo;
import com.dsk.cscec.domain.bo.EditProjectInfoBo;
import com.dsk.cscec.domain.bo.ImportCbProjectDataBo;
import com.dsk.cscec.service.CbProjectRecordService;
import com.dsk.cscec.service.IDProjectService;
......@@ -13,6 +14,7 @@ import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.validation.constraints.NotBlank;
import java.util.List;
/**
* 项目台账表(CbProjectRecord)表控制层
......@@ -53,9 +55,38 @@ public class CbProjectRecordController extends BaseController {
* 根据项目文件导入数据
*/
@PostMapping("/importData")
public R<Void> importData(@Validated @RequestBody ImportCbProjectDataBo importDataBo){
public R<Void> importData(@Validated @RequestBody ImportCbProjectDataBo importDataBo) {
baseService.importData(importDataBo);
return R.ok("解析成本数据过程需3~10分钟,稍后可到项目列表查看导入结果");
return R.ok("已开始解析成本数据,过程需3~10分钟,稍后可到项目列表查看导入结果");
}
/**
* 修改项目信息
*/
@PutMapping("/editProjectInfo")
public R<Void> editProjectInfo(@Validated @RequestBody EditProjectInfoBo editBo) {
return toAjax(baseService.editProjectInfo(editBo));
}
///**
// * 获取项目台账列表
// */
//@GetMapping("/getProjectList")
//public R<List<CbProjectRecord>> getProjectList() {
// List<CbProjectRecord> projectList = baseService.getProjectList();
// return R.ok(projectList);
//}
/**
* 获取草稿弹窗列表
*/
@GetMapping("/getDraftDialogList")
public R<List<CbProjectRecord>> getDraftDialogList() {
List<CbProjectRecord> draftList = baseService.getDraftDialogList();
if (draftList.isEmpty()) {
return R.ok("暂无草稿记录");
}
return R.ok(draftList);
}
}
......
......@@ -11,7 +11,6 @@ import com.dsk.cscec.domain.vo.CbQuantitySummaryListVo;
import com.dsk.cscec.service.ICbQuantitySummaryService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
import java.util.Map;
......
package com.dsk.cscec.controller;
import cn.hutool.core.bean.BeanUtil;
import com.dsk.common.core.controller.BaseController;
import com.dsk.common.core.domain.R;
import com.dsk.common.utils.poi.ExcelUtil;
import com.dsk.cscec.domain.bo.CbSummaryActualBo;
import com.dsk.cscec.domain.bo.CbSummaryActualListBo;
import com.dsk.cscec.domain.bo.CbSummaryBo;
import com.dsk.cscec.domain.vo.CbSummaryActualListVo;
import com.dsk.cscec.domain.vo.CbSummaryCostAccountExportVo;
import com.dsk.cscec.domain.vo.CbSummaryProjectExportVo;
import com.dsk.cscec.service.CbSummaryService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
......@@ -31,7 +37,7 @@ public class CbSummaryController extends BaseController {
/**
* 成本汇总左侧列表
* 成本汇总左侧一级数据列表
*
* @param bo
* @return
......@@ -41,9 +47,13 @@ public class CbSummaryController extends BaseController {
return R.ok(cbSummaryService.getCbNameList(bo));
}
//成本汇总数据列表
/**
* 成本汇总数据列表
* @param bo
* @return
*/
@GetMapping("/list")
public R getList(CbSummaryActualListBo bo) {
public R<List<CbSummaryActualListVo>> getList(CbSummaryActualListBo bo) {
return R.ok(cbSummaryService.getActualList(bo));
}
......@@ -69,7 +79,28 @@ public class CbSummaryController extends BaseController {
return cbSummaryService.insertOrUpdateActual(boList) == true ? R.ok() : R.fail();
}
//锁定成本-至少有一条实际数据?
//锁定成本前提示未填项(按一级大类)
//锁定成本
/**
* 导出excel-按月导出所有
* @param bo
* @param response
*/
@PostMapping("/export")
public void export(CbSummaryActualListBo bo, HttpServletResponse response) {
List<CbSummaryActualListVo> actualListVoList = cbSummaryService.getAll(bo);
if(bo.getCbType()==1){
List<CbSummaryProjectExportVo> list = BeanUtil.copyToList(actualListVoList,CbSummaryProjectExportVo.class);
ExcelUtil.exportExcel(list, "成本汇总按项目汇总"+bo.getExpenseDate(), CbSummaryProjectExportVo.class, response);
}else {
List<CbSummaryCostAccountExportVo> list = BeanUtil.copyToList(actualListVoList,CbSummaryCostAccountExportVo.class);
ExcelUtil.exportExcel(list, "成本汇总按成本科目汇总"+bo.getExpenseDate(), CbSummaryCostAccountExportVo.class, response);
}
}
//导入
//导出excel-缺模板
}
package com.dsk.cscec.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.dsk.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
......@@ -41,7 +42,7 @@ public class CbProjectFile extends BaseEntity implements Serializable {
/**
* OSS文件ID
*/
private String fileOssId;
private Long fileOssId;
/**
* OSS文件路径
*/
......@@ -57,5 +58,6 @@ public class CbProjectFile extends BaseEntity implements Serializable {
/**
* 删除状态(0:否、2:是)
*/
@TableLogic(value = "0", delval = "2")
private Integer delFlag;
}
package com.dsk.cscec.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.dsk.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
......@@ -23,15 +24,19 @@ public class CbProjectRecord extends BaseEntity implements Serializable {
@TableId(value = "id")
private Long id;
/**
* 成本阶段(0:标前成本、1:标后成本、2:转固成本)
* 关联ID(关联多个阶段)
*/
private Integer cbStage;
private Long relatedId;
/**
* 项目名称
*/
private String projectName;
/**
* 项目文件状态(0:待解析、1:解析中、2:解析成功、3:解析失败)
* 成本阶段(0:标前成本、1:标后成本、2:转固成本)
*/
private Integer cbStage;
/**
* 项目文件状态(0:准备中、1:解析中、2:解析成功、3:解析失败)
*/
private Integer projectFileStatus;
/**
......@@ -49,5 +54,6 @@ public class CbProjectRecord extends BaseEntity implements Serializable {
/**
* 删除状态(0:否、2:是)
*/
@TableLogic(value = "0", delval = "2")
private Integer delFlag;
}
......@@ -16,7 +16,7 @@ import java.math.BigDecimal;
@Data
public class CbSummaryActualBo extends BaseEntity {
/**
* 主键id
* 费用id
*/
private Long id;
/**
......
......@@ -15,6 +15,10 @@ public class CbSummaryActualListBo extends BaseEntity {
* 主键id
*/
private Long id;
/**
* 成本阶段( 0:标前成本、1:标后成本、2:转固成本)
*/
private Integer cbStage;
/**
* 成本类型(1项目汇总,2成本科目汇总)
*/
......
package com.dsk.cscec.domain.vo;
package com.dsk.cscec.domain.bo;
import lombok.Data;
import java.util.Date;
import javax.validation.constraints.NotNull;
/**
* @author sxk
* @date 2024.02.07
* @time 16:28
* @date 2024.02.08
* @time 16:07
*/
@Data
public class DraftDialogListVo {
public class EditProjectInfoBo {
/**
* 项目ID
*/
@NotNull(message = "项目ID不能为空")
private Long projectId;
/**
* 项目名称
*/
private String projectName;
/**
* 成本阶段(0:标前成本、1:标后成本、2:转固成本)
* IPM项目编码
*/
private Integer cbStage;
private String ipmProjectNo;
/**
* 是否获取项目详情(0:否、1:是)
*/
@NotNull(message = "是否获取项目详情不能为空")
private Integer isGetProjectDetail;
/**
* 更新时间
* 文件名称
*/
private Date updateTime;
}
\ No newline at end of file
private String projectFileName;
/**
* 成本阶段(0:标前成本、1:标后成本、2:转固成本)
*/
private Integer cbStage;
}
......@@ -70,6 +70,14 @@ public class CbSummaryActualListVo extends BaseEntity {
* 本月费用(不含税)
*/
private BigDecimal taxExclusiveExpense;
/**
* 截至本月费用(含税)
*/
private BigDecimal taxInclusiveExpenseTotal;
/**
* 截至本月费用(不含税)
*/
private BigDecimal taxExclusiveExpenseTotal;
/**
* 费用日期
*/
......
package com.dsk.cscec.domain.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* 成本汇总(CbSummary)-成本科目汇总导出Vo
*
* @author cyf
* @since 2024-02-06
*/
@Data
@NoArgsConstructor
public class CbSummaryCostAccountExportVo implements Serializable {
private static final long serialVersionUID = -20126964599875841L;
/**
* 序号
*/
@ExcelProperty(value = "序号")
private String number;
/**
* 成本科目
*/
@ExcelProperty(value = "成本科目")
private String cbName;
/**
* 不含税成本合价
*/
@ExcelProperty(value = "不含税成本合价")
private String taxExclusiveTotal;
/**
* 成本税金合价
*/
@ExcelProperty(value = "成本税金合价")
private String cbTaxesTotal;
/**
* 含税成本合价
*/
@ExcelProperty(value = "含税成本合价")
private String taxInclusiveTotal;
/**
* 成本占比
*/
@ExcelProperty(value = "成本占比")
private String cbProportion;
/**
* 含税成本平米指标
*/
@ExcelProperty(value = "含税成本平米指标")
private String taxInclusivePmTarget;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 本月费用(含税)
*/
@ExcelProperty(value = "本月费用(含税)")
private BigDecimal taxInclusiveExpense;
/**
* 本月费用(不含税)
*/
@ExcelProperty(value = "本月费用(不含税)")
private BigDecimal taxExclusiveExpense;
/**
* 截至本月费用(含税)
*/
@ExcelProperty(value = "截至本月费用(含税)")
private BigDecimal taxInclusiveExpenseTotal;
/**
* 截至本月费用(不含税)
*/
@ExcelProperty(value = "截至本月费用(不含税)")
private BigDecimal taxExclusiveExpenseTotal;
}
package com.dsk.cscec.domain.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* 成本汇总(CbSummary)-项目汇总导出Vo
*
* @author cyf
* @since 2024-02-06
*/
@Data
@NoArgsConstructor
public class CbSummaryProjectExportVo implements Serializable {
private static final long serialVersionUID = -20126964599875841L;
/**
* 序号
*/
@ExcelProperty(value = "序号")
private String number;
/**
* 名称
*/
@ExcelProperty(value = "名称")
private String cbName;
/**
* 不含税成本合价
*/
@ExcelProperty(value = "不含税成本合价")
private String taxExclusiveTotal;
/**
* 成本税金合价
*/
@ExcelProperty(value = "成本税金合价")
private String cbTaxesTotal;
/**
* 含税成本合价
*/
@ExcelProperty(value = "含税成本合价")
private String taxInclusiveTotal;
/**
* 成本占比
*/
@ExcelProperty(value = "成本占比")
private String cbProportion;
/**
* 含税成本平米指标
*/
@ExcelProperty(value = "含税成本平米指标")
private String taxInclusivePmTarget;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 本月费用(含税)
*/
@ExcelProperty(value = "本月费用(含税)")
private BigDecimal taxInclusiveExpense;
/**
* 本月费用(不含税)
*/
@ExcelProperty(value = "本月费用(不含税)")
private BigDecimal taxExclusiveExpense;
/**
* 截至本月费用(含税)
*/
@ExcelProperty(value = "截至本月费用(含税)")
private BigDecimal taxInclusiveExpenseTotal;
/**
* 截至本月费用(不含税)
*/
@ExcelProperty(value = "截至本月费用(不含税)")
private BigDecimal taxExclusiveExpenseTotal;
}
......@@ -2,10 +2,6 @@ package com.dsk.cscec.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsk.cscec.domain.CbProjectFile;
import com.dsk.cscec.domain.vo.DraftDialogListVo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 项目成本文件表(CbProjectFile)表数据库访问层
......@@ -14,11 +10,6 @@ import java.util.List;
* @since 2024-02-05 14:01:03
*/
public interface CbProjectFileMapper extends BaseMapper<CbProjectFile> {
/**
* 获取草稿弹窗列表
*
* @return 草稿弹窗列表
*/
List<DraftDialogListVo> getDraftDialogList(@Param("projectFileStatusWaitParse") Integer projectFileStatusWaitParse,@Param("deleteFlagExist")Integer deleteFlagExist);
}
......@@ -2,6 +2,7 @@ package com.dsk.cscec.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsk.cscec.domain.CbSummary;
import com.dsk.cscec.domain.bo.CbSummaryActualListBo;
import com.dsk.cscec.domain.bo.CbSummaryBo;
import com.dsk.cscec.domain.vo.CbSummaryActualListVo;
import org.apache.ibatis.annotations.Param;
......@@ -19,6 +20,24 @@ public interface CbSummaryMapper extends BaseMapper<CbSummary> {
List<CbSummaryActualListVo> getByParentId(@Param("parentId") Long parentId, @Param("expenseDate") String expenseDate);
CbSummaryActualListVo getById(@Param("id") Long id, @Param("expenseDate") String expenseDate);
/**
* 根据月份获取所有项目汇总数据
*
* @param bo
* @return
*/
List<CbSummaryActualListVo> getProjectAll(@Param("bo") CbSummaryActualListBo bo);
/**
* 根据月份获取所有成本科目汇总数据
*
* @param bo
* @return
*/
List<CbSummaryActualListVo> getCostAccountAll(@Param("bo") CbSummaryActualListBo bo);
/**
* 获取已添加成本月份
*
......
......@@ -4,12 +4,9 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.dsk.cscec.domain.CbProjectFile;
import com.dsk.cscec.domain.bo.AddProjectFileUploadBo;
import com.dsk.cscec.domain.bo.QueryProjectFileUploadDetailBo;
import com.dsk.cscec.domain.vo.DraftDialogListVo;
import com.dsk.cscec.domain.vo.QueryProjectFileUploadDetailVo;
import com.dsk.system.domain.vo.SysOssVo;
import java.util.List;
/**
* 项目成本文件表(CbProjectFile)表服务接口
*
......@@ -33,13 +30,6 @@ public interface CbProjectFileService extends IService<CbProjectFile> {
*/
Integer deleteProjectFile(Long fileId);
/**
* 获取草稿弹窗列表
*
* @return 草稿弹窗列表
*/
List<DraftDialogListVo> getDraftDialogList();
/**
* 获取项目文件上传详情
*
......
......@@ -3,8 +3,11 @@ package com.dsk.cscec.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dsk.cscec.domain.CbProjectRecord;
import com.dsk.cscec.domain.bo.AddCbProjectBo;
import com.dsk.cscec.domain.bo.EditProjectInfoBo;
import com.dsk.cscec.domain.bo.ImportCbProjectDataBo;
import java.util.List;
/**
* 项目台账表(CbProjectRecord)表服务接口
*
......@@ -26,4 +29,19 @@ public interface CbProjectRecordService extends IService<CbProjectRecord> {
* @param importDataBo 导入对象
*/
void importData(ImportCbProjectDataBo importDataBo);
/**
* 修改项目信息
*
* @param editBo 修改对象
* @return 修改结果
*/
Integer editProjectInfo(EditProjectInfoBo editBo);
/**
* 获取草稿弹窗列表
*
* @return 草稿弹窗列表
*/
List<CbProjectRecord> getDraftDialogList();
}
......@@ -53,4 +53,11 @@ public interface CbSummaryService extends IService<CbSummary> {
* @return
*/
boolean insertOrUpdateActual(List<CbSummaryActualBo> boList);
/**
* 导出列表获取
* @param bo
* @return
*/
List<CbSummaryActualListVo> getAll(CbSummaryActualListBo bo);
}
......@@ -10,7 +10,6 @@ import com.dsk.cscec.domain.CbProjectFile;
import com.dsk.cscec.domain.CbProjectRecord;
import com.dsk.cscec.domain.bo.AddProjectFileUploadBo;
import com.dsk.cscec.domain.bo.QueryProjectFileUploadDetailBo;
import com.dsk.cscec.domain.vo.DraftDialogListVo;
import com.dsk.cscec.domain.vo.QueryProjectFileUploadDetailVo;
import com.dsk.cscec.mapper.CbProjectFileMapper;
import com.dsk.cscec.mapper.CbProjectRecordMapper;
......@@ -50,10 +49,10 @@ public class CbProjectFileServiceImpl extends ServiceImpl<CbProjectFileMapper, C
CbProjectFile projectFile = BeanUtil.toBean(fileUploadBo, CbProjectFile.class);
projectFile.setFileName(oss.getOriginalName());
projectFile.setFileOssId(oss.getOssId().toString());
projectFile.setFileOssId(oss.getOssId());
projectFile.setFileOssUrl(oss.getUrl());
//项目文件状态:解析
projectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_WAIT_PARSE);
//项目文件状态:准备
projectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PREPARING);
//删除状态:未删除
projectFile.setDelFlag(CbProjectConstants.DELETE_FLAG_EXIST);
baseMapper.insert(projectFile);
......@@ -73,16 +72,6 @@ public class CbProjectFileServiceImpl extends ServiceImpl<CbProjectFileMapper, C
return baseMapper.updateById(projectFile);
}
/**
* 获取草稿弹窗列表
*
* @return 草稿弹窗列表
*/
@Override
public List<DraftDialogListVo> getDraftDialogList() {
return baseMapper.getDraftDialogList(CbProjectConstants.PROJECT_FILE_STATUS_WAIT_PARSE, CbProjectConstants.DELETE_FLAG_EXIST);
}
/**
* 获取项目文件上传详情
*
......
......@@ -5,8 +5,10 @@ import cn.hutool.core.lang.Assert;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsk.cscec.constant.CbProjectConstants;
import com.dsk.cscec.domain.CbProjectFile;
import com.dsk.cscec.domain.CbProjectRecord;
import com.dsk.cscec.domain.bo.AddCbProjectBo;
import com.dsk.cscec.domain.bo.EditProjectInfoBo;
import com.dsk.cscec.domain.bo.ImportCbProjectDataBo;
import com.dsk.cscec.mapper.CbProjectFileMapper;
import com.dsk.cscec.mapper.CbProjectRecordMapper;
......@@ -15,6 +17,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
/**
* 项目台账表(CbProjectRecord)表服务实现类
......@@ -39,8 +42,8 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe
@Transactional(rollbackFor = Exception.class)
public CbProjectRecord addProject(AddCbProjectBo addCbProjectBo) {
CbProjectRecord projectRecord = BeanUtil.toBean(addCbProjectBo, CbProjectRecord.class);
//项目文件状态:待解析
projectRecord.setProjectFileStatus(CbProjectConstants.PROJECT_FILE_STATUS_WAIT_PARSE);
//项目文件状态:准备中
projectRecord.setProjectFileStatus(CbProjectConstants.PROJECT_FILE_STATUS_PREPARING);
//删除状态:否
projectRecord.setDelFlag(CbProjectConstants.DELETE_FLAG_EXIST);
if (baseMapper.insert(projectRecord) > 0) {
......@@ -59,11 +62,22 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe
Long projectId = importDataBo.getProjectId();
Integer cbStage = importDataBo.getCbStage();
//校验项目是否存在
Assert.isTrue(baseMapper.exists(new LambdaQueryWrapper<CbProjectRecord>()
.eq(CbProjectRecord::getId, projectId)
.eq(CbProjectRecord::getCbStage, cbStage)
.eq(CbProjectRecord::getDelFlag, CbProjectConstants.DELETE_FLAG_EXIST)), "该项目不存在");
//TODO:校验各个成本类型是否至少有1个文件
this.checkProjectExist(projectId);
//校验各个成本类型是否至少有1个文件
//直接费成本
this.checkCbTypeExistFile(importDataBo, CbProjectConstants.CB_TYPE_DIRECT_EXPENSE, CbProjectConstants.CB_TYPE_DIRECT_EXPENSE_NAME);
//工料汇总
this.checkCbTypeExistFile(importDataBo, CbProjectConstants.CB_TYPE_QUANTITY_SUMMARY, CbProjectConstants.CB_TYPE_QUANTITY_SUMMARY_NAME);
//措施项目
this.checkCbTypeExistFile(importDataBo, CbProjectConstants.CB_TYPE_MEASURE_PROJECT, CbProjectConstants.CB_TYPE_MEASURE_PROJECT_NAME);
//其他项目
this.checkCbTypeExistFile(importDataBo, CbProjectConstants.CB_TYPE_OTHER_PROJECT, CbProjectConstants.CB_TYPE_OTHER_PROJECT_NAME);
//现场经费
this.checkCbTypeExistFile(importDataBo, CbProjectConstants.CB_TYPE_SCENE_EXPENSE, CbProjectConstants.CB_TYPE_SCENE_EXPENSE_NAME);
//成本汇总
this.checkCbTypeExistFile(importDataBo, CbProjectConstants.CB_TYPE_SUMMARY, CbProjectConstants.CB_TYPE_SUMMARY_NAME);
//TODO:调各个成本类型的解析文件方法
//直接费成本
//工料汇总
......@@ -73,4 +87,65 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe
//成本汇总
}
/**
* 校验各个成本类型是否至少有1个文件
*
* @param importDataBo 导入对象
* @param cbType 成本类型字典(0:直接费成本、1:工料汇总、2:措施项目、3:其他项目、4:现场经费、5:成本汇总)
* @param cbTypeName 成本类型名称
*/
private void checkCbTypeExistFile(ImportCbProjectDataBo importDataBo, Integer cbType, String cbTypeName) {
boolean isExist = projectFileMapper.exists(new LambdaQueryWrapper<CbProjectFile>()
.eq(CbProjectFile::getProjectId, importDataBo.getProjectId())
.eq(CbProjectFile::getCbStage, importDataBo.getCbStage())
.eq(CbProjectFile::getCbType, cbType)
//项目文件状态:准备中
.eq(CbProjectFile::getFileParseStatus, CbProjectConstants.PROJECT_FILE_STATUS_PREPARING)
//删除状态:否
.eq(CbProjectFile::getDelFlag, CbProjectConstants.DELETE_FLAG_EXIST));
Assert.isTrue(isExist, cbTypeName + "至少需要上传1个文件");
}
/**
* 修改项目信息
*
* @param editBo 修改对象
* @return 修改结果
*/
@Override
public Integer editProjectInfo(EditProjectInfoBo editBo) {
//校验项目是否存在
this.checkProjectExist(editBo.getProjectId());
CbProjectRecord projectRecord = baseMapper.selectById(editBo.getProjectId());
projectRecord.setProjectName(editBo.getProjectName());
projectRecord.setIpmProjectNo(editBo.getIpmProjectNo());
projectRecord.setIsGetProjectDetail(editBo.getIsGetProjectDetail());
projectRecord.setProjectFileName(editBo.getProjectFileName());
return baseMapper.updateById(projectRecord);
}
/**
* 校验项目是否存在
*
* @param projectId 项目ID
*/
private void checkProjectExist(Long projectId) {
CbProjectRecord projectRecord = baseMapper.selectOne(new LambdaQueryWrapper<CbProjectRecord>()
.eq(CbProjectRecord::getId, projectId)
.eq(CbProjectRecord::getDelFlag, CbProjectConstants.DELETE_FLAG_EXIST));
Assert.notNull(projectRecord, "该项目不存在");
}
/**
* 获取草稿弹窗列表
*
* @return 草稿弹窗列表
*/
@Override
public List<CbProjectRecord> getDraftDialogList() {
return baseMapper.selectList(new LambdaQueryWrapper<CbProjectRecord>()
.eq(CbProjectRecord::getProjectFileStatus,CbProjectConstants.PROJECT_FILE_STATUS_PREPARING));
}
}
......@@ -2,31 +2,23 @@ package com.dsk.cscec.service.impl;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsk.common.excel.ExcelUtils;
import com.dsk.common.exception.ServiceException;
import com.dsk.cscec.constant.CbProjectConstants;
import com.dsk.cscec.domain.CbProjectFile;
import com.dsk.cscec.domain.CbQuantitySummary;
import com.dsk.cscec.domain.CbQuantitySummaryActual;
import com.dsk.cscec.domain.bo.CbProjectBaseBo;
import com.dsk.cscec.domain.bo.CbQuantitySummaryListBo;
import com.dsk.cscec.domain.vo.CbQuantitySummaryListVo;
import com.dsk.cscec.mapper.CbQuantitySummaryMapper;
import com.dsk.cscec.service.CbProjectFileService;
import com.dsk.cscec.service.ICbQuantitySummaryActualService;
import com.dsk.cscec.service.ICbQuantitySummaryService;
import jodd.bean.BeanException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
......
......@@ -3,12 +3,14 @@ package com.dsk.cscec.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsk.common.exception.ServiceException;
import com.dsk.cscec.constant.CbProjectConstants;
import com.dsk.cscec.domain.CbProjectFile;
import com.dsk.cscec.domain.CbProjectRecord;
import com.dsk.cscec.domain.CbSummary;
import com.dsk.cscec.domain.CbSummaryActual;
import com.dsk.cscec.domain.bo.CbSummaryActualBo;
......@@ -16,6 +18,7 @@ import com.dsk.cscec.domain.bo.CbSummaryActualListBo;
import com.dsk.cscec.domain.bo.CbSummaryBo;
import com.dsk.cscec.domain.vo.CbSummaryActualListVo;
import com.dsk.cscec.mapper.CbProjectFileMapper;
import com.dsk.cscec.mapper.CbProjectRecordMapper;
import com.dsk.cscec.mapper.CbSummaryActualMapper;
import com.dsk.cscec.mapper.CbSummaryMapper;
import com.dsk.cscec.service.CbSummaryService;
......@@ -25,7 +28,10 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import java.util.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* 成本汇总(CbSummary)表服务实现类
......@@ -41,6 +47,9 @@ public class CbSummaryServiceImpl extends ServiceImpl<CbSummaryMapper, CbSummary
@Autowired
private CbSummaryActualMapper cbSummaryActualMapper;
@Autowired
private CbProjectRecordMapper cbProjectRecordMapper;
@Override
public void importCbProject(Long projectId, Integer cbStage) {
//获取文件信息
......@@ -68,84 +77,87 @@ public class CbSummaryServiceImpl extends ServiceImpl<CbSummaryMapper, CbSummary
@Override
public List<Map<String, Object>> getCbNameList(CbSummaryBo bo) {
Assert.notNull(bo.getProjectId(), "项目id不能为空");
Assert.notNull(bo.getCbStage(), "成本阶段不能为空");
Assert.notNull(bo.getCbType(), "成本类型不能为空");
List<Map<String, Object>> resultList = new ArrayList<>();
//项目汇总
if (1 == bo.getCbType()) {
//获取一级数据
bo.setLevel(1);
List<Map<String, Object>> cbNames = baseMapper.selectByLevel(bo);
bo.setLevel(0);
List<Map<String, Object>> cbNameTop = baseMapper.selectByLevel(bo);
if (CollectionUtil.isEmpty(cbNames)) {
return null;
}
Map<String, Object> xmhz = new HashMap<>();
xmhz.put("id", 0l);
xmhz.put("cbName", "成本汇总");
resultList.add(xmhz);
resultList.addAll(cbNames);
}
//成本科目汇总
if (2 == bo.getCbType()) {
bo.setLevel(0);
List<Map<String, Object>> cbNameTop = baseMapper.selectByLevel(bo);
bo.setLevel(1);
List<Map<String, Object>> cbNames = baseMapper.selectByLevel(bo);
resultList.addAll(cbNameTop);//todo
resultList.addAll(cbNames);
}
bo.setLevel(1);
List<Map<String, Object>> cbNames = baseMapper.selectByLevel(bo);
resultList.addAll(cbNameTop);
resultList.addAll(cbNames);
return resultList;
}
@Override
public List<CbSummaryActualListVo> getActualList(CbSummaryActualListBo bo) {
Assert.notNull(bo.getId(),"id不能为空");
Assert.notNull(bo.getCbType(),"成本类型不能为空");
if (StringUtil.isBlank(bo.getExpenseDate())) {
//默认当前月
bo.setExpenseDate(DatePattern.SIMPLE_MONTH_FORMAT.format(new Date()));
}
//项目汇总
if (1 == bo.getCbType()) {
return getProjectSumList(bo);
CbSummary cbSummary = baseMapper.selectById(bo.getId());
if (ObjectUtil.isEmpty(cbSummary)) {
return null;
}
//成本科目汇总
if (2 == bo.getCbType()) {
//todo
List<CbSummaryActualListVo> childrenList = baseMapper.getByParentId(bo.getId(), bo.getExpenseDate());
if (0 == cbSummary.getLevel() && 1 == bo.getCbType()) {
//项目汇总
return childrenList;
}else if(0 == cbSummary.getLevel() && 2 == bo.getCbType()) {
//成本科目汇总
CbSummaryActualListVo cbSummaryActualListVo = baseMapper.getById(bo.getId(), bo.getExpenseDate());
cbSummaryActualListVo.setChildren(childrenList);
List<CbSummaryActualListVo> list = new ArrayList<>();
list.add(cbSummaryActualListVo);
return list;
}else {
childrenList = getProjectSumList(bo);
CbSummaryActualListVo cbSummaryActualListVo = baseMapper.getById(bo.getId(),bo.getExpenseDate());
cbSummaryActualListVo.setChildren(childrenList);
List<CbSummaryActualListVo> list = new ArrayList<>();
list.add(cbSummaryActualListVo);
return list;
}
return null;
}
/**
* 项目汇总列表
* 成本汇总列表
*
* @param bo
* @return
*/
private List<CbSummaryActualListVo> getProjectSumList(CbSummaryActualListBo bo) {
CbSummary cbSummary = baseMapper.selectById(bo.getId());
if (ObjectUtil.isEmpty(cbSummary)) {
return null;
}
if (StringUtil.isBlank(bo.getExpenseDate())) {
//默认当前月
bo.setExpenseDate(DatePattern.SIMPLE_MONTH_FORMAT.format(new Date()));
}
List<CbSummaryActualListVo> childrenList = baseMapper.getByParentId(bo.getId(), bo.getExpenseDate());
if (0 == cbSummary.getLevel()) {
return childrenList;
} else {
childrenList.forEach(children -> {
CbSummaryActualListBo childBo = new CbSummaryActualListBo();
childBo.setId(children.getId());
childBo.setExpenseDate(bo.getExpenseDate());
children.setChildren(getProjectSumList(childBo));
});
childrenList.forEach(children -> {
CbSummaryActualListBo childBo = new CbSummaryActualListBo();
childBo.setId(children.getId());
childBo.setExpenseDate(bo.getExpenseDate());
children.setChildren(getProjectSumList(childBo));
});
return childrenList;
}
return childrenList;
}
@Override
public List<String> getExpenseDateList(CbSummaryBo bo) {
Assert.notNull(bo.getProjectId(),"项目id不能为空");
Assert.notNull(bo.getCbStage(),"成本阶段不能为空");
Assert.notNull(bo.getCbType(),"成本类型不能为空");
return baseMapper.getExpenseDateList(bo);
}
......@@ -155,18 +167,36 @@ public class CbSummaryServiceImpl extends ServiceImpl<CbSummaryMapper, CbSummary
if (CollectionUtil.isEmpty(boList)) {
return false;
}
boList.forEach(bo->{
Assert.notNull(bo.getCbSummaryId(),"成本汇总id不能为空");
Assert.notNull(bo.getExpenseDate(),"费用日期不能为空");
});
List<CbSummaryActual> actualList = BeanUtil.copyToList(boList, CbSummaryActual.class);
CbSummaryActual actualUpdate = actualList.get(0);
CbSummaryActual actual = cbSummaryActualMapper.selectOne(new LambdaQueryWrapper<CbSummaryActual>()
.eq(CbSummaryActual::getCbSummaryId, actualUpdate.getCbSummaryId())
.eq(CbSummaryActual::getExpenseDate, actualUpdate.getExpenseDate())
.eq(CbSummaryActual::getDelFlag, 0)
);
if (ObjectUtil.isNotNull(actual) && 1 == actual.getLockStatus()) {
throw new ServiceException("当前成本已锁定,不允许编辑!");
}
//todo
// throw new ServiceException("当前成本已锁定,不允许编辑!");
return cbSummaryActualMapper.insertOrUpdateBatch(actualList) > 0;
}
@Override
public List<CbSummaryActualListVo> getAll(CbSummaryActualListBo bo) {
Assert.notNull(bo.getId(), "项目id不能为空");
Assert.notNull(bo.getCbType(), "成本类型不能为空");
Assert.notNull(bo.getExpenseDate(), "费用日期不能为空");
//获取项目成本阶段
CbProjectRecord cbProjectRecord = cbProjectRecordMapper.selectById(bo.getId());
if (ObjectUtil.isNull(cbProjectRecord)) {
throw new ServiceException("当前项目不存在");
}
bo.setCbStage(cbProjectRecord.getCbStage());
if (bo.getCbType() == 1) {
return baseMapper.getProjectAll(bo);
} else {
return baseMapper.getCostAccountAll(bo);
}
//todo 截至本月费用汇总
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dsk.cscec.mapper.CbProjectFileMapper">
<!--获取草稿弹窗列表-->
<select id="getDraftDialogList" resultType="com.dsk.cscec.domain.vo.DraftDialogListVo">
SELECT cpf.project_id,
cpr.project_name,
cpf.cb_stage,
max(cpf.update_time) as update_time
FROM cb_project_file cpf
left join cb_project_record cpr
on cpf.project_id = cpr.id
WHERE (file_parse_status = #{projectFileStatusWaitParse} AND cpf.del_flag = #{deleteFlagExist})
group by cpf.project_id, cpf.cb_stage
</select>
</mapper>
......@@ -18,10 +18,10 @@
</sql>
<insert id="insertOrUpdateBatch" keyProperty="id" useGeneratedKeys="true">
insert into cb_summary_actual(cb_summary_id, tax_inclusive_expense, tax_exclusive_expense,expense_date)
insert into cb_summary_actual(id,cb_summary_id, tax_inclusive_expense, tax_exclusive_expense,expense_date)
values
<foreach collection="entities" item="entity" separator=",">
(#{entity.cbSummaryId}, #{entity.taxInclusiveExpense}, #{entity.taxExclusiveExpense}, #{entity.expenseDate})
(#{entity.id}, #{entity.cbSummaryId}, #{entity.taxInclusiveExpense}, #{entity.taxExclusiveExpense}, #{entity.expenseDate})
</foreach>
on duplicate key update
cb_summary_id = values(cb_summary_id) , tax_inclusive_expense = values(tax_inclusive_expense) ,
......
......@@ -24,13 +24,13 @@
</resultMap>
<sql id="baseColumn">
id, parent_id, level, sort, project_id, cb_stage, cb_project_file_id, number, cb_name, tax_exclusive_total,
cb_taxes_total, tax_inclusive_total, cb_proportion, tax_inclusive_pm_target, remark, create_time, del_flag,
cb_type
csu.id, csu.parent_id, csu.level, csu.sort, csu.project_id, csu.cb_stage, csu.cb_project_file_id, csu.number, csu.cb_name, csu.tax_exclusive_total,
csu.cb_taxes_total, csu.tax_inclusive_total, csu.cb_proportion, csu.tax_inclusive_pm_target, csu.remark, csu.create_time, csu.del_flag,
csu.cb_type
</sql>
<select id="getByParentId" resultType="com.dsk.cscec.domain.vo.CbSummaryActualListVo">
select csu.*,csa.id actualId,csa.tax_inclusive_expense,csa.tax_exclusive_expense,csa.expense_date,csa.lock_status
select csu.*,csa.id actualId,csa.tax_inclusive_expense,csa.tax_exclusive_expense,csa.expense_date
from cb_summary csu
left join cb_summary_actual csa on csu.id = csa.cb_summary_id and csa.expense_date = #{expenseDate} AND csa.del_flag = 0
<where>
......@@ -40,6 +40,47 @@
order by csu.sort
</select>
<select id="getById" resultType="com.dsk.cscec.domain.vo.CbSummaryActualListVo">
select csu.*,csa.id actualId,csa.tax_inclusive_expense,csa.tax_exclusive_expense,csa.expense_date
from cb_summary csu
left join cb_summary_actual csa on csu.id = csa.cb_summary_id and csa.expense_date = #{expenseDate} AND csa.del_flag = 0
<where>
csu.id = #{id}
and csu.del_flag = 0
</where>
</select>
<select id="getProjectAll" resultType="com.dsk.cscec.domain.vo.CbSummaryActualListVo">
select
<include refid="baseColumn"></include>,
csa.tax_inclusive_expense,csa.tax_exclusive_expense
from cb_summary csu
left join cb_summary_actual csa on csu.id = csa.cb_summary_id and csa.expense_date = #{expenseDate} AND csa.del_flag = 0
<where>
csu.project_id = #{bo.id}
and csu.cb_stage = #{bo.cbStage}
and csu.cb_type = #{bo.cbType}
and csu.del_flag = 0
and csu.level != 0
</where>
order by csu.sort
</select>
<select id="getCostAccountAll" resultType="com.dsk.cscec.domain.vo.CbSummaryActualListVo">
select
<include refid="baseColumn"></include>,
csa.tax_inclusive_expense,csa.tax_exclusive_expense
from cb_summary csu
left join cb_summary_actual csa on csu.id = csa.cb_summary_id and csa.expense_date = #{expenseDate} AND csa.del_flag = 0
<where>
csu.project_id = #{bo.projectId}
and csu.cb_stage = #{bo.cbStage}
and csu.cb_type = #{bo.cbType}
and csu.del_flag = 0
</where>
order by csu.sort
</select>
<select id="getExpenseDateList" resultType="string">
select csa.expense_date
from cb_summary_actual csa
......
......@@ -10,6 +10,7 @@ import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.Collection;
import java.util.List;
......@@ -37,4 +38,6 @@ public interface ISysOssService {
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
InputStream downFileIO(Long ossId);
}
......@@ -177,6 +177,16 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
return baseMapper.deleteBatchIds(ids) > 0;
}
@Override
public InputStream downFileIO(Long ossId) {
//文件下载
SysOss sysOss = baseMapper.selectById(ossId);
if (ObjectUtil.isNull(sysOss)) {
throw new ServiceException("文件数据不存在!");
}
return OssFactory.instance(sysOss.getService()).getObjectContent(sysOss.getUrl());
}
/**
* 匹配Url
*
......
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