Commit 03a4bb26 authored by huangjie's avatar huangjie

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

Merge branch 'V20231129-中建一局二公司' of http://192.168.60.201/root/dsk-operate-sys into V20231129-中建一局二公司
parents 6bba27e3 c2273ad1
......@@ -105,6 +105,7 @@ public class DataAnalysisComponent {
throw new ServiceException("数据插入失败!");
}
file.setFileParseStatus(2);
file.setFailRemark("");
boolean b = projectFileService.updateById(file);
if (!b) {
throw new ServiceException("文件状态更新失败!");
......
......@@ -2,6 +2,8 @@ package com.dsk.cscec.domain.vo;
import lombok.Data;
import java.util.Date;
/**
* @author sxk
* @date 2024.03.06
......@@ -25,7 +27,10 @@ public class CbProjectHeadInfoVo {
* 成本阶段(0:标前成本、1:标后成本、2:转固成本)
*/
private Integer cbStage;
/**
* 创建时间
*/
private Date createTime;
/**
* 客商名称(客户名称)
*/
......
......@@ -218,6 +218,8 @@ public class CbDirectExpenseServiceImpl extends ServiceImpl<CbDirectExpenseMappe
}
//更新文件状态
projectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_SUCCESS);
//场景:若第一次解析失败了,用户未删除失败的文件,又解析一次,这时解析成功了,因此将失败备注置空
projectFile.setFailRemark(null);
Assert.isTrue(projectFileMapper.updateById(projectFile) > 0, "解析成功后文件状态更新失败");
} catch (Exception e) {
status.setRollbackOnly();
......
......@@ -114,6 +114,8 @@ public class CbProjectExpenseSummaryServiceImpl extends ServiceImpl<CbProjectExp
Assert.isTrue(impl.saveBatch(summaryList), "数据插入失败");
//更新文件状态
projectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_SUCCESS);
//场景:若第一次解析失败了,用户未删除失败的文件,又解析一次,这时解析成功了,因此将失败备注置空
projectFile.setFailRemark(null);
Assert.isTrue(projectFileMapper.updateById(projectFile) > 0, "解析成功后文件状态更新失败");
} catch (Exception e) {
status.setRollbackOnly();
......
......@@ -473,12 +473,13 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe
}
}
//所有文件遍历完后,如果存在解析失败的文件,则项目的解析状态改为解析失败,否则改为解析成功
if (failNum > 0) {
//如果存在解析失败的文件,则项目的解析状态改为解析失败
log.info("项目台账列表:ID为" + projectRecord.getId() + "的项目解析失败");
projectRecord.setProjectFileStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_FAIL);
baseMapper.updateById(projectRecord);
} else {
//否则改为解析成功
log.info("项目台账列表:ID为" + projectRecord.getId() + "的项目解析成功");
projectRecord.setProjectFileStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_SUCCESS);
baseMapper.updateById(projectRecord);
......
......@@ -168,6 +168,8 @@ public class CbSceneExpenseChildrenServiceImpl extends ServiceImpl<CbSceneExpens
Assert.isTrue(impl.saveBatch(BeanUtil.copyToList(chidrenList, CbSceneExpenseChildren.class)), "数据插入失败");
//更新文件状态
projectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_SUCCESS);
//场景:若第一次解析失败了,用户未删除失败的文件,又解析一次,这时解析成功了,因此将失败备注置空
projectFile.setFailRemark(null);
Assert.isTrue(projectFileMapper.updateById(projectFile) > 0, "解析成功后文件状态更新失败");
} catch (Exception e) {
status.setRollbackOnly();
......
......@@ -76,6 +76,7 @@ public class CbSummaryServiceImpl extends ServiceImpl<CbSummaryMapper, CbSummary
//解析数据
cbProjectFiles.forEach(cbProjectFile -> {
cbProjectFile.setFailRemark(null);
// if (cbProjectFile.getDelFlag() == 1) {
// //根据fileId删除相关基础数据,并删除文件
// baseMapper.delete(new LambdaQueryWrapper<CbSummary>().eq(CbSummary::getCbProjectFileId, cbProjectFile.getId()));
......
......@@ -5,7 +5,7 @@ VUE_APP_TITLE = 重庆大司空信息科技有限公司
ENV = 'development'
# 数字化经营履约全生命链路管理系统/开发环境
VUE_APP_BASE_API = '/prod-api'
VUE_APP_BASE_API = 'http://localhost:9098'
# 路由懒加载
VUE_CLI_BABEL_TRANSPILE_MODULES = true
......
......@@ -5,7 +5,7 @@
"author": "若依",
"license": "MIT",
"scripts": {
"dev": "vue-cli-service serve",
"dev": "set NODE_OPTIONS=--openssl-legacy-provider & vue-cli-service serve",
"devmac": "export NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve",
"build:prod": "vue-cli-service build",
"build:test": "vue-cli-service build --mode test",
......
import Decimal from "decimal.js";
/**
* 加法
* @param {*} num1
* @param {*} num2
* @returns
*/
export const add = (num1, num2) => {
const flag = (!parseFloat(num1) && parseFloat(num1) != "0") || (!parseFloat(num2) && parseFloat(num2) != "0");
if (flag) throw new Error("传入参数错误,参数不为number");
const decimal1 = new Decimal(num1);
const decimal2 = new Decimal(num2);
return decimal1.plus(decimal2).toString();
};
/**
* 减法
* @param {*} num1
* @param {*} num2
* @returns
*/
export const subtract = (num1, num2) => {
const flag = (!parseFloat(num1) && parseFloat(num1) != "0") || (!parseFloat(num2) && parseFloat(num2) != "0");
const decimal1 = new Decimal(num1);
const decimal2 = new Decimal(num2);
return decimal1.minus(decimal2).toString();
};
/**
* 乘法
* @param {*} num1
* @param {*} num2
* @returns
*/
export const multiply = (num1, num2) => {
const flag = (!parseFloat(num1) && parseFloat(num1) != "0") || (!parseFloat(num2) && parseFloat(num2) != "0");
const decimal1 = new Decimal(num1);
const decimal2 = new Decimal(num2);
return decimal1.times(decimal2).toString();
};
/**
* 除法
* @param {*} num1
* @param {*} num2
* @returns
*/
export const divide = (num1, num2) => {
const flag = (!parseFloat(num1) && parseFloat(num1) != "0") || (!parseFloat(num2) && parseFloat(num2) != "0");
const decimal1 = new Decimal(num1);
const decimal2 = new Decimal(num2);
return decimal1.dividedBy(decimal2).toString();
};
<template>
<el-dialog title="填写实际成本" :visible="comDialogStatus" class="add-actual-cost-container">
</el-dialog>
</template>
<script>
export default {
name: "AddActualCost",
props: {
dialogStatus: {
type: Boolean,
default: false
}
},
model: {
prop: "dialogStatus",
event: "dialogStatusChange"
},
watch: {
dialogStatus(newValue) {
this.comDialogStatus = newValue;
}
},
data() {
return {
comDialogStatus: this.dialogStatus
};
},
//可访问data属性
created() {
},
//计算集
computed: {
},
//方法集
methods: {
},
}
</script>
<style lang="scss" scoped>
.add-actual-cost-container {
::v-deep .el-dialog {
margin-top: 0px !important;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
border-radius: 4px;
width: 480px;
.el-dialog__header {
height: 56px;
padding: 0px 20px;
display: flex;
align-items: center;
justify-content: space-between;
border-bottom: 1px solid #eeeeee;
.el-dialog__title {
font-size: 16px;
font-weight: bold;
color: #232323;
}
.el-dialog__headerbtn {
position: static;
width: 16px;
height: 16px;
.el-dialog__close {
font-size: 16px;
}
}
}
.el-dialog__body {
padding: 0px;
min-height: 120px;
padding: 24px 20px;
box-sizing: border-box;
}
}
}
</style>
......@@ -39,7 +39,7 @@
<table-list-com :tableData="tableDataList" :formColum="formColum" v-else-if="!tableLoading" :maxHeight="true" :tableDataTotal="total"
:paging="false">
<template slot="action-field-bar" slot-scope="scope">
<div class="project-action-field-bar" v-if="scope.row.id == '0'">
<div class="project-action-field-bar" v-if="scope.row.id != '0'">
<span class="push-project">推送工程量</span>
</div>
<span v-else>-</span>
......@@ -48,6 +48,10 @@
</div>
</div>
</div>
<!-- 填写实际成本触发 -->
<add-actual-cost v-model="showAddActualCost"></add-actual-cost>
</div>
</template>
<script>
......@@ -56,9 +60,25 @@ import { getFeedSummaryMenuTreeApi, getFeedSummaryMonthListApi, getFeedSummaryLi
import DskTableHeaderSetting from "@/components/DskTableHeaderSetting";
import DskSkeleton from "@/components/DskSkeleton";
import TableListCom from "@/components/TableListCom";
import AddActualCost from "./components/AddActualCost";
import { v4 } from 'uuid';
import dayjs from "dayjs";
import { cloneDeep } from "lodash-es";
import { add } from "@/utils/decimal";
// 需要统计的字段名
const statisticsPropNames = [
"guidePrice",
"bidUnitPrice",
"unitPriceDifference",
"quantity",
"combinedPrice",
"combinedPriceTax",
"quantities",
"totalQuantities",
"purchaseUnitPrice"
];
export default {
name: "feedSummary",
props: {
......@@ -92,7 +112,8 @@ export default {
ProjectSideMenu,
DskTableHeaderSetting,
TableListCom,
DskSkeleton
DskSkeleton,
AddActualCost
},
data() {
return {
......@@ -156,18 +177,8 @@ export default {
// 数据列表
tableDataList: [],
statisticsParentName: ["劳务分包工程", "专业分包工程"],
// 需要统计的字段名
statisticsPropNames: [
"guidePrice",
"bidUnitPrice",
"unitPriceDifference",
"quantity",
"combinedPrice",
"combinedPriceTax",
"quantities",
"totalQuantities",
"purchaseUnitPrice"
]
// 填写实际成本弹窗
showAddActualCost: false
};
},
//可访问data属性
......@@ -251,7 +262,8 @@ export default {
const _temp = list.data;
// 计算总和
if (this.hasTarget) {
const row = this.countRowParams(_temp, this.statisticsPropNames);
const row = this.countRowParams(_temp, statisticsPropNames);
_temp.unshift(row);
}
this.tableDataList = _temp;
this.total = _temp.length;
......@@ -262,7 +274,7 @@ export default {
this.tableLoading = false;
}
},
countRowParams(arraylist = [], statisticsPropNames) {
countRowParams(arraylist = [], _statisticsPropNames) {
if (arraylist.length) {
const _template = {};
const _temp = cloneDeep(arraylist[0]);
......@@ -272,17 +284,24 @@ export default {
if (key == "id") {
_template[key] = "0";
continue;
} else if (key == "cbSubjectName") {
_template[key] = "合计";
continue;
}
_template[key] = "";
}
console.log(_template);
// 循环统计 需要统计的列 总数
for (const prop of statisticsPropNames) {
for (const prop of _statisticsPropNames) {
const sum = arraylist.reduce((pre, current, index) => {
const before = Object.prototype.toString.call(pre) == "[object Object]" ? pre[prop] : parseFloat(pre) ? pre : 0;
const after = Object.prototype.toString.call(current) == "[object Object]" ? current[prop] : parseFloat(current) ? current : 0;
const before = Object.prototype.toString.call(pre) == "[object Object]" ? pre[prop] ? pre[prop] : 0 : parseFloat(pre) ? pre : 0;
const after = Object.prototype.toString.call(current) == "[object Object]" ? current[prop] ? current[prop] : 0 : parseFloat(current) ? current : 0;
return add(before, after);
}, 0);
// 对应key 赋值结果
_template[prop] = sum;
}
return _template;
}
},
async getFeedSummaryMenuTree(params) {
......@@ -374,7 +393,7 @@ export default {
},
// 填写或修改新的 成本月份
fillActualCost() {
this.showAddActualCost = true;
}
},
}
......
......@@ -193,8 +193,8 @@ export default {
const detail = await getProjectDetailApi(projectId);
if (detail.code == 200 && detail.data) {
if (detail.data.id) detail.data["projectId"] = detail.data.id;
detail.data["projectId"] = "1754425038355890177";
detail.data["cbStage"] = 0;
// detail.data["projectId"] = "1754425038355890177";
// detail.data["cbStage"] = 0;
this.detailInfo = detail.data;
}
} catch (error) {
......
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