Commit 60662645 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 215d4087 cf194c3d
......@@ -188,6 +188,7 @@ tenant:
- f_ads_bsi_kpi_proj_two
- cb_summary
- cb_summary_actual
- cb_summary_actual_lock
- cb_cost_measure
- cb_cost_measure_actual
- cb_direct_expense
......
......@@ -7,6 +7,7 @@ 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.CbSummaryActualLockBo;
import com.dsk.cscec.domain.bo.CbSummaryBo;
import com.dsk.cscec.domain.vo.CbSummaryActualListVo;
import com.dsk.cscec.domain.vo.CbSummaryCostAccountExportVo;
......@@ -64,10 +65,20 @@ public class CbSummaryController extends BaseController {
* @return
*/
@GetMapping("/expenseDateList")
public R<List<String>> getExpenseDateList(@Validated CbSummaryBo bo) {
public R<List<Map<String,Object>>> getExpenseDateList(@Validated CbSummaryBo bo) {
return R.ok(cbSummaryService.getExpenseDateList(bo));
}
/**
* 已锁定月份
* @param bo
* @return
*/
@GetMapping("/expenseDateList/locked")
public R<List<String>> getLockedList(@Validated CbSummaryBo bo) {
return R.ok(cbSummaryService.getLockedList(bo));
}
/**
* 编辑成本
*
......@@ -79,9 +90,25 @@ public class CbSummaryController extends BaseController {
return cbSummaryService.insertOrUpdateActual(boList) == true ? R.ok() : R.fail();
}
//锁定成本前提示未填项(按一级大类)
/**
* 锁定成本前提示未填项(按一级大类)
* @param bo
* @return
*/
@GetMapping("/getUnfilled")
public R getUnfilled(CbSummaryActualLockBo bo){
return cbSummaryService.getUnfilled(bo);
}
//锁定成本
/**
* 按月份锁定成本
* @param bo
* @return
*/
@PostMapping("/lockActual")
public R lockActual(@RequestBody CbSummaryActualLockBo bo) {
return cbSummaryService.lockActual(bo) == true ? R.ok() : R.fail();
}
/**
* 导出excel-按月导出所有
......@@ -89,7 +116,7 @@ public class CbSummaryController extends BaseController {
* @param response
*/
@PostMapping("/export")
public void export(CbSummaryActualListBo bo, HttpServletResponse response) {
public void export(@RequestBody CbSummaryActualListBo bo, HttpServletResponse response) {
List<CbSummaryActualListVo> actualListVoList = cbSummaryService.getAll(bo);
if(bo.getCbType()==1){
List<CbSummaryProjectExportVo> list = BeanUtil.copyToList(actualListVoList,CbSummaryProjectExportVo.class);
......
package com.dsk.cscec.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import lombok.Data;
import java.io.Serializable;
......@@ -83,6 +84,7 @@ public class CbSummary implements Serializable {
/**
* 删除状态(0:否、2:是)
*/
@TableLogic
private Integer delFlag;
/**
* 成本类型(1项目汇总,2成本科目汇总)
......
......@@ -40,7 +40,7 @@ public class CbSummaryActual implements Serializable {
/**
* 是否锁定(0否,1是)
*/
private Integer lockStatus;
// private Integer lockStatus;
/**
* 创建时间
*/
......
package com.dsk.cscec.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import lombok.Data;
import java.util.Date;
import java.io.Serializable;
/**
* 成本汇总-每月成本锁定(CbSummaryActualLock)实体类
*
* @author makejava
* @since 2024-02-19
*/
@Data
public class CbSummaryActualLock implements Serializable {
private static final long serialVersionUID = 849892917534518164L;
/**
* 主键id
*/
@TableId(value = "id")
private Long id;
/**
* 项目id
*/
private Long projectId;
/**
* 费用日期
*/
private String expenseDate;
/**
* 成本类型(1项目汇总,2成本科目汇总)
*/
private Integer cbType;
/**
* 创建时间
*/
private Date createTime;
/**
* 删除状态(0:否、2:是)
*/
@TableLogic
private Integer delFlag;
}
......@@ -15,6 +15,10 @@ public class CbSummaryActualListBo extends BaseEntity {
* 主键id
*/
private Long id;
/**
* 项目id
*/
private Long projectId;
/**
* 成本阶段( 0:标前成本、1:标后成本、2:转固成本)
*/
......
package com.dsk.cscec.domain.bo;
import com.dsk.common.core.domain.BaseEntity;
import lombok.Data;
/**
* 成本汇总-每月成本锁定(CbSummaryActualLock)bo
*
* @author cyf
* @since 2024-02-19
*/
@Data
public class CbSummaryActualLockBo extends BaseEntity {
/**
* 项目id
*/
private Long projectId;
/**
* 费用日期
*/
private String expenseDate;
/**
* 成本类型(1项目汇总,2成本科目汇总)
*/
private Integer cbType;
}
......@@ -26,6 +26,10 @@ public class CbSummaryActualListVo extends BaseEntity {
* 成本阶段( 0:标前成本、1:标后成本、2:转固成本)
*/
private Integer cbStage;
/**
* 层级
*/
private Integer level;
/**
* 序号
*/
......@@ -82,10 +86,6 @@ public class CbSummaryActualListVo extends BaseEntity {
* 费用日期
*/
private String expenseDate;
/**
* 是否锁定(0否,1是)
*/
private Integer lockStatus;
private List<CbSummaryActualListVo> children;
}
package com.dsk.cscec.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsk.cscec.domain.CbSummaryActualLock;
import com.dsk.cscec.domain.bo.CbSummaryBo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 成本汇总-每月成本锁定(CbSummaryActualLock)表数据库访问层
*
* @author makejava
* @since 2024-02-19
*/
public interface CbSummaryActualLockMapper extends BaseMapper<CbSummaryActualLock> {
/**
* 获取已锁定成本月份
*
* @param bo
* @return
*/
List<String> getLockedList(@Param("bo") CbSummaryBo bo);
}
......@@ -4,7 +4,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsk.cscec.domain.CbSummaryActual;
import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
/**
* 成本汇总-每月费用(CbSummaryActual)表数据库访问层
......@@ -21,4 +23,11 @@ public interface CbSummaryActualMapper extends BaseMapper<CbSummaryActual> {
*/
int insertOrUpdateBatch(@Param("entities") List<CbSummaryActual> entities);
/**
* 截至本月费用
* @param cbSummaryId
* @param expenseDate
* @return
*/
Map<String, BigDecimal> getTotal(@Param("cbSummaryId") Long cbSummaryId, @Param("expenseDate") String expenseDate);
}
......@@ -23,6 +23,14 @@ public interface CbSummaryMapper extends BaseMapper<CbSummary> {
CbSummaryActualListVo getById(@Param("id") Long id, @Param("expenseDate") String expenseDate);
/**
* 根据ids获取实际成本
* @param entities
* @param expenseDate
* @return
*/
List<CbSummaryActualListVo> getByIds(@Param("entities") List<CbSummary> entities, @Param("expenseDate") String expenseDate);
/**
* 根据月份获取所有项目汇总数据
*
......@@ -45,7 +53,7 @@ public interface CbSummaryMapper extends BaseMapper<CbSummary> {
* @param bo
* @return
*/
List<String> getExpenseDateList(@Param("bo") CbSummaryBo bo);
List<Map<String,Object>> getExpenseDateList(@Param("bo") CbSummaryBo bo);
/**
* 根据level获取名称/成本科目
......
package com.dsk.cscec.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dsk.common.core.domain.R;
import com.dsk.cscec.domain.CbSummary;
import com.dsk.cscec.domain.bo.CbSummaryActualBo;
import com.dsk.cscec.domain.bo.CbSummaryActualListBo;
import com.dsk.cscec.domain.bo.CbSummaryActualLockBo;
import com.dsk.cscec.domain.bo.CbSummaryBo;
import com.dsk.cscec.domain.vo.CbSummaryActualListVo;
......@@ -44,7 +46,15 @@ public interface CbSummaryService extends IService<CbSummary> {
* @param bo
* @return
*/
List<String> getExpenseDateList(CbSummaryBo bo);
List<Map<String,Object>> getExpenseDateList(CbSummaryBo bo);
/**
* 获取已锁定成本月份
*
* @param bo
* @return
*/
List<String> getLockedList(CbSummaryBo bo);
/**
* 新增/更新每月费用
......@@ -54,6 +64,20 @@ public interface CbSummaryService extends IService<CbSummary> {
*/
boolean insertOrUpdateActual(List<CbSummaryActualBo> boList);
/**
* 获取未填写成本一级大类
* @param bo
* @return
*/
R getUnfilled(CbSummaryActualLockBo bo);
/**
* 锁定成本
* @param bo
* @return
*/
boolean lockActual(CbSummaryActualLockBo bo);
/**
* 导出列表获取
* @param bo
......
<?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.CbSummaryActualLockMapper">
<resultMap type="com.dsk.cscec.domain.CbSummaryActualLock" id="CbSummaryActualLockMap">
<result property="id" column="id" jdbcType="INTEGER"/>
<result property="projectId" column="project_id" jdbcType="INTEGER"/>
<result property="expenseDate" column="expense_date" jdbcType="VARCHAR"/>
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
<result property="delFlag" column="del_flag" jdbcType="INTEGER"/>
</resultMap>
<sql id="baseColumn">
id, project_id, expense_date, create_time, del_flag
</sql>
<select id="getLockedList" resultType="java.lang.String">
select csal.expense_date
from cb_summary_actual_lock csal
where
csal.project_id = #{bo.projectId}
and csal.cb_type = #{bo.cbType}
and csal.del_flag = 0
order by csal.expense_date desc
</select>
</mapper>
......@@ -8,13 +8,13 @@
<result property="taxInclusiveExpense" column="tax_inclusive_expense" jdbcType="NUMERIC"/>
<result property="taxExclusiveExpense" column="tax_exclusive_expense" jdbcType="NUMERIC"/>
<result property="expenseDate" column="expense_date" jdbcType="VARCHAR"/>
<result property="lockStatus" column="lock_status" jdbcType="INTEGER"/>
<!-- <result property="lockStatus" column="lock_status" jdbcType="INTEGER"/>-->
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
<result property="delFlag" column="del_flag" jdbcType="INTEGER"/>
</resultMap>
<sql id="baseColumn">
id, cb_summary_id, tax_inclusive_expense, tax_exclusive_expense, expense_date, lock_status, create_time, del_flag
id, cb_summary_id, tax_inclusive_expense, tax_exclusive_expense, expense_date, create_time, del_flag
</sql>
<insert id="insertOrUpdateBatch" keyProperty="id" useGeneratedKeys="true">
......@@ -27,5 +27,16 @@
cb_summary_id = values(cb_summary_id) , tax_inclusive_expense = values(tax_inclusive_expense) ,
tax_exclusive_expense = values(tax_exclusive_expense) , expense_date = values(expense_date)
</insert>
<select id="getTotal" resultType="map">
select ifnull(sum(csa.tax_inclusive_expense),0) taxInclusiveExpenseTotal,
ifnull(sum(csa.tax_exclusive_expense),0) taxExclusiveExpenseTotal
from cb_summary_actual csa
<where>
csa.cb_summary_id = #{cbSummaryId}
and csa.expense_date &lt;= #{expenseDate}
and csa.del_flag = 0
</where>
</select>
</mapper>
......@@ -50,15 +50,32 @@
</where>
</select>
<select id="getByIds" 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
<where>
csa.expense_date = #{expenseDate}
and csa.del_flag = 0
and csu.del_flag = 0
and csu.id in
<foreach collection="entities" item="entity" separator="," open="(" close=")">
#{entity.id}
</foreach>
</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
csa.id actualId,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
left join cb_summary_actual csa on csu.id = csa.cb_summary_id and csa.expense_date = #{bo.expenseDate} AND csa.del_flag = 0
<where>
csu.project_id = #{bo.id}
and csu.cb_stage = #{bo.cbStage}
csu.project_id = #{bo.projectId}
<if test="bo.cbStage != null">
and csu.cb_stage = #{bo.cbStage}
</if>
and csu.cb_type = #{bo.cbType}
and csu.del_flag = 0
and csu.level != 0
......@@ -69,30 +86,33 @@
<select id="getCostAccountAll" resultType="com.dsk.cscec.domain.vo.CbSummaryActualListVo">
select
<include refid="baseColumn"></include>,
csa.tax_inclusive_expense,csa.tax_exclusive_expense
csa.id actualId,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
left join cb_summary_actual csa on csu.id = csa.cb_summary_id and csa.expense_date = #{bo.expenseDate} AND csa.del_flag = 0
<where>
csu.project_id = #{bo.projectId}
and csu.cb_stage = #{bo.cbStage}
<if test="bo.cbStage != null">
and csu.cb_stage = #{bo.cbStage}
</if>
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
<select id="getExpenseDateList" resultType="map">
select csa.expense_date expenseDate,
if(csal.id is null,0,1) as isLock
from cb_summary_actual csa
left join cb_summary csu on csu.id = csa.cb_summary_id
left join cb_summary_actual_lock csal on csal.project_id = csu.project_id and csal.expense_date = csa.expense_date and csal.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
and csa.del_flag = 0
group by csa.expense_date
order by csa.expense_date asc
order by csa.expense_date desc
</select>
<select id="selectByLevel" resultType="map">
......
......@@ -7,3 +7,74 @@ export function checkProjectCodeExist (data) {
method: 'get',
})
}
//新增项目
export function addProject (data) {
return request({
url: '/cbProjectRecord/addProject',
method: 'post',
data:data,
})
}
//修改项目
export function editProjectInfo (data) {
return request({
url: '/cbProjectRecord/editProjectInfo',
method: 'PUT',
data:data,
})
}
//新增新阶段项目
export function addNewStageProject (data) {
return request({
url: '/cbProjectRecord/addNewStageProject',
method: 'POST',
data:data,
})
}
//获取当前项目文件上传
export function getProjectFileUploadDetail (projectId) {
return request({
url: '/cbProjectFile/getProjectFileUploadDetail/'+projectId,
method: 'get',
})
}
//获取草稿箱列表
export function getDraftDialogList (projectId) {
return request({
url: '/cbProjectRecord/getDraftDialogList',
method: 'get',
})
}
//上传文件
export function uploadCbProjectFile (data) {
return request({
url: '/cbProjectFile/uploadCbProjectFile',
method: 'post',
data
})
}
//删除文件
export function deleteCbProjectFile (fileId) {
return request({
url: '/cbProjectFile/deleteCbProjectFile/'+fileId,
method: 'Delete',
})
}
//删除草稿
export function deleteDraft (projectId) {
return request({
url: '/cbProjectRecord/deleteDraft/'+projectId,
method: 'Delete',
})
}
//查询当前项目可删除成本阶段
export function getProjectCbStageNotDraft (relatedId) {
return request({
url: '/cbProjectRecord/getProjectCbStageNotDraft/'+relatedId,
method: 'get',
})
}
......@@ -2,7 +2,7 @@
<div class="feed-summary-container">
<div class="feed-summary-inner">
<div class="left-side-menu">
<project-side-menu :menuTree="menuTreeList"></project-side-menu>
<project-side-menu :menuTree="menuTreeList" :unique-opened="false" :default-active="defaultActive"></project-side-menu>
</div>
</div>
</div>
......@@ -16,6 +16,7 @@ export default {
},
data() {
return {
defaultActive: "",
menuTreeList: [
{
nodeName: "房建类成本科目",
......@@ -81,7 +82,7 @@ export default {
},
//可访问data属性
created() {
},
//计算集
computed: {
......
<template>
<div class="project-menu-item-container">
<div class="project-menu-item-container">
<template>
<!-- 有下级菜单 -->
<template v-if="checkHasChidren">
<el-submenu :index="menuItem.nodeValue" ref="projectSubMenuItem" class="project-sub-menu-item">
<template slot="title">
<i class="el-icon-location"></i>
<span>111</span>
</template>
</el-submenu>
</template>
<template v-else>
</div>
</template>
</template>
</div>
</template>
<script>
export default {
name : "projectMenuItem",
data() {
return {
name: "projectMenuItem",
props: {
menuItem: {
type: Object,
required: true,
default: () => ({})
}
},
data() {
return {
}
},
//可访问data属性
created(){
};
},
//可访问data属性
created() {
},
//计算集
computed:{
},
//计算集
computed: {
checkHasChidren() {
return !!(this.menuItem && this.menuItem?.children && this.menuItem.children.length);
}
},
//方法集
methods: {
},
//方法集
methods:{
},
},
}
</script>
<style lang="scss" scoped>
.project-menu-item-container {
}
</style>
<template>
<div class="project-side-menu-container">
<el-menu mode="vertical" class="project-side-menu-instance">
<el-menu mode="vertical" class="project-side-menu-instance" :unique-opened="uniqueOpened" :default-active="defaultActive" @select="menuSelect"
@open="subMenuOpen" @close="subMenuClose">
<template v-for="(item,index) of tempMenuTree">
<project-menu-item :menuItem="item" :key="item.nodeValue"></project-menu-item>
</template>
......@@ -31,6 +32,16 @@ export default {
icon: "icon",
suffixIcon: "suffixIcon"
})
},
// 只保持打开一个菜单
uniqueOpened: {
type: Boolean,
default: false
},
// 默认打开的菜单
defaultActive: {
type: String,
default: ""
}
},
watch: {
......@@ -69,6 +80,16 @@ export default {
},
//方法集
methods: {
// 事件订阅
subMenuOpen(menuPath) {
this.$emit("open", menuPath);
},
subMenuClose(menuPath) {
this.$emit("close", menuPath);
},
menuSelect(menuPath) {
this.$emit("select", menuPath);
},
// 初始化树形结构
initMenuTree(array = []) {
if (array?.length) {
......@@ -162,19 +183,21 @@ export default {
overflow: auto;
/* 重置一级二级菜单 高度行高 */
/* .el-submenu__title {
height: 32px;
line-height: 32px;
.project-sub-menu-item {
& > .el-submenu__title {
height: 32px;
line-height: 32px;
&:hover {
background-color: unset;
background: linear-gradient(
91deg,
rgba(0, 129, 255, 0.1) 0%,
rgba(0, 129, 255, 0) 100%
);
&:hover {
background-color: unset;
background: linear-gradient(
91deg,
rgba(0, 129, 255, 0.1) 0%,
rgba(0, 129, 255, 0) 100%
);
}
}
} */
}
}
}
</style>
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