update code

dev_xds
haha 2023-08-30 00:45:08 +08:00
parent e70d2f8744
commit 2cef960a30
12 changed files with 393 additions and 126 deletions

View File

@ -32,6 +32,6 @@ public class RuoYiApplication
" | | \\ `' /| `-' / \n" +
" | | \\ / \\ / \n" +
" ''-' `'-' `-..-' ");
//FileUploadUtils.minPath("/data/uploadPath/upload/2023/08/16");
//FileUploadUtils.minPath("/data/uploadPath/upload/");
}
}

View File

@ -134,6 +134,8 @@ public class FileUploadUtils
ImgUtil.scale(FileUtil.file(absPath),
FileUtil.file(absPath), (float) (2000.0 / w));
}
ImgUtil.scale(FileUtil.file(absPath),
FileUtil.file(absPath + ".1000.jpg"), (float) (1000.0 / w));
ImgUtil.scale(FileUtil.file(absPath),
FileUtil.file(absPath + ".min.jpg"), (float) (300.0 / w));
}
@ -146,6 +148,10 @@ public class FileUploadUtils
public static void minPath(String path){
List<File> list= FileUtil.loopFiles(path);
for(File f :list){
String p=f.getAbsolutePath().toLowerCase();
if(p.endsWith(".min.jpg")||p.endsWith(".1000.jpg")){
continue;
}
System.out.println(f.getAbsolutePath());
makeMiniImage(f.getAbsolutePath());
}

View File

@ -42,3 +42,27 @@ export function delCostOutput(id) {
method: 'delete'
})
}
export function listByProjectId(projectId){
return request({
url: '/project/costOutput/listByProjectId?projectId=' + projectId,
method: 'get'
})
}
export function addYearInvestment(data){
return request({
url: '/project/costOutput/addYearInvestment',
method: 'post',
data:data
})
}
export function addMonthInvestment(data){
return request({
url: '/project/costOutput/addMonthInvestment',
method: 'post',
data:data
})
}

View File

@ -139,3 +139,4 @@ input, textarea{
.el-upload__tip{
line-height: 1.2;
}

View File

@ -0,0 +1,49 @@
<template>
<div class="cost-month" style="border:solid 1px #409eff;margin: 12px 0px;padding: 6px 12px 0px;position: relative;">
<el-button size="small" type="primary" style="position: absolute;top:10px;right:12px;">增加年份</el-button>
<el-tabs v-model="activeName">
<el-tab-pane v-for="(it,idx) in monthInv" :label="''+it.year" :name="''+it.year" :key="idx">
<el-col v-for="(item,idxx) in it.value" :key="idxx" :span="12">
<el-form-item :label="names[item.month]" class="w200" >
<el-input-number :precision="4" v-model="item.money" placeholder="年度投资">
</el-input-number>
<span class="sp-unit">万元</span>
</el-form-item>
</el-col>
</el-tab-pane>
</el-tabs>
</div>
</template>
<script>
export default {
name: 'RuoyiUiCostMonth',
data() {
return {
names:['','一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月'],
activeName:'',
monthInv:[]
};
},
mounted() {
},
methods: {
init(d){
this.monthInv=d;
if(d.filter(it=>it.year==new Date().getFullYear()).length>0){
this.activeName=""+new Date().getFullYear()
}else{
this.activeName=""+d.year;
}
}
},
};
</script>
<style lang="scss" scoped>
</style>

View File

@ -1,152 +1,151 @@
<template>
<div class="project-cost-outpu-drawer" v-if="isOpen">
<el-drawer v-if="isOpen" :visible.sync="isOpen" direction="rtl" size="60%" style="padding-left: 20px">
<el-drawer v-if="isOpen" :visible.sync="isOpen" direction="rtl" size="50%" style="padding-left: 20px">
<template slot="title">
<div>{{ title + " 【计划节点】" }}</div>
<right-toolbar @queryTable="loadData" :search="false">
<template slot="left">
<el-button type="primary" @click="doExport"
v-hasPermi="['project:build_node_data:export']">导出</el-button>
<el-popover placement="top-start" title="提示" trigger="hover" content="请选择导出的模板修改后的文件。">
<el-button type="success" slot="reference" @click="doImport"
v-hasPermi="['project:build_node_data:import']" style="margin: 0px 12px">导入</el-button>
</el-popover>
</template>
<div>{{ (title) + " 【项目成本产值管理】" }}</div>
<right-toolbar @queryTable="loadData" :search="false">
</right-toolbar>
</template>
<el-tabs v-model="activeName">
<el-tab-pane :label="'' + it.nodeText" :name="'' + it.id" :key="idx" v-for="(it, idx) in nodes">
<node-item :item="it" :showLabel="false" style="border-bottom: solid 1px #ccc"></node-item>
<div v-for="(it2, idx) in it.children" :key="idx" class="lvl-2">
<node-item :item="it2"></node-item>
<div v-for="(it3, idx) in it2.children" :key="idx" v-if="it2.children.length > 0"
style="padding-left: 40px" class="lvl-3">
<node-item :item="it3"></node-item>
</div>
</div>
</el-tab-pane>
</el-tabs>
</el-drawer>
<!-- 用户导入对话框 -->
<el-dialog :title="upload.title" :visible.sync="upload.open" width="600px" :close-on-click-modal="false"
:close-on-press-escape="false" append-to-body
:custom-class="'build-node-import-dlg file-' + upload.files.length">
<el-upload ref="upload" :limit="1" accept=".xlsx, .xls" :headers="upload.headers" :multiple="false"
:on-change="uploadChange" :action="upload.url + '?updateSupport=' + upload.updateSupport"
:disabled="upload.isUploading" :on-remove="uploadChange" :on-progress="handleFileUploadProgress"
:on-success="handleFileSuccess" :auto-upload="false" drag>
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处<em>点击上传</em></div>
<div class="el-upload__tip text-center" slot="tip">
<span>仅允许导入xlsxlsx格式文件</span>
<el-link type="primary" :underline="false" style="font-size: 12px; vertical-align: baseline"
@click="doExport">下载模板</el-link>
</div>
</el-upload>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitFileForm"> </el-button>
<el-button @click="upload.open = false"> </el-button>
<div style="margin-top:12px;">
<el-form ref="form" label-width="160px">
<el-form-item label="总投资" class="w400">
<el-input-number :precision="4" v-model="form.totalInv" placeholder="请输入总投资">
</el-input-number>
<span class="sp-unit">万元</span>
</el-form-item>
<div class="div-title fblue" style="color: #409eff;">年度投资</div>
<costYear ref="costYear">
</costYear>
<div class="div-title fblue" style="color: #409eff;border-bottom: solid 1px #409eff;line-height: 40px;">合同金额</div>
<el-row style="margin-top:12px;">
<el-col :span="8">
<el-form-item label="合同金额" class="w200">
<el-input-number :precision="4" v-model="form.contract1" placeholder="请输入合同金额">
</el-input-number>
<span class="sp-unit">万元</span>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="合同支付金额" class="w200">
<el-input-number :precision="4" v-model="form.contract2" placeholder="请输入合同支付金额">
</el-input-number>
<span class="sp-unit">万元</span>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="合同挂账金额" class="w200">
<el-input-number :precision="4" v-model="form.contract3" placeholder="请输入合同挂账金额">
</el-input-number>
<span class="sp-unit">万元</span>
</el-form-item>
</el-col>
</el-row>
<div class="div-title fblue" style="color: #409eff;border-bottom: solid 1px #409eff;line-height: 40px;">安措金额</div>
<el-row style="margin-top:12px;">
<el-col :span="8">
<el-form-item label="安措金额" class="w200">
<el-input-number :precision="4" v-model="form.safety1" placeholder="请输入安措金额">
</el-input-number>
<span class="sp-unit">万元</span>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="安措支付金额" class="w200">
<el-input-number :precision="4" v-model="form.safety2" placeholder="请输入安措支付金额">
</el-input-number>
<span class="sp-unit">万元</span>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="安措挂账金额" class="w200">
<el-input-number :precision="4" v-model="form.safety3" placeholder="请输入安措挂账金额">
</el-input-number>
<span class="sp-unit">万元</span>
</el-form-item>
</el-col>
</el-row>
<div class="div-title fblue" style="color: #409eff;">月度投资</div>
<costMonth ref="costMonth"></costMonth>
</el-form>
<div style="text-align: center;margin-top: 24px;">
<el-button type="success">保存</el-button>
</div>
</el-dialog>
</div>
</el-drawer>
</div>
</template>
<script>
import { listByProject } from "@/api/project/build_node_data.js";
import { getToken } from "@/utils/auth";
import { listByProjectId,addYearInvestment,addMonthInvestment } from "@/api/project/costOutput.js";
import costYear from './costYear.vue'
import costMonth from './costMonth.vue'
export default {
name: "RuoyiUiBuildNodeDrawer",
components: {
costYear,costMonth
},
data() {
return {
title:'',
isOpen: false,
prj: null,
nodes: [],
activeName: "",
//
upload: {
files: [],
//
open: false,
//
title: "",
//
isUploading: false,
//
updateSupport: 0,
//
headers: { Authorization: "Bearer " + getToken() },
//
url: process.env.VUE_APP_BASE_API + "/project/build_node_data/importData",
form:{
totalInv:null,//
contract1:null,//
contract2:null,//
contract3:null,//
safety1:null,//
safety2:null,//
safety3:null,//
},
yearInv:[],//
monthInv:[],//
};
},
mounted() { },
methods: {
uploadChange(a, b, c) {
this.upload.files = b;
},
//
handleFileUploadProgress(event, file, fileList) {
this.upload.isUploading = true;
},
//
handleFileSuccess(response, file, fileList) {
this.upload.open = false;
this.upload.isUploading = false;
this.$refs.upload.clearFiles();
this.$alert(
"<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
response.msg +
"</div>",
"导入结果",
{ dangerouslyUseHTMLString: true }
);
this.loadData();
},
submitFileForm() {
this.$refs.upload.submit();
},
doImport() {
this.upload.title = `${this.prj.projectName}_项目计划节点导入`;
this.upload.open = true;
},
doExport() {
this.download(
"project/build_node_data/export",
{
projectId: this.prj.id,
},
`${this.prj.projectName}_项目计划节点.xlsx`
);
},
loadData(init) {
listByProject(this.prj.id).then((d) => {
let tmps = (d.data || []).map((it) => {
it.lvl = it.baseBuildNode.nodeLvl;
it.parentLvl = it.lvl.substring(0, it.lvl.length - 2);
it.nodeText = it.baseBuildNode.nodeText;
it.file = this.$tryToJson(it.files, []);
return it;
listByProjectId(this.prj.id).then((d) => {
let tmps=d.data||[];
this.form.totalInv=this.getValue(tmps,1).money||0;
this.yearInv=tmps.filter(it=>it.costType==2);
this.form.contract1=this.getValue(tmps,3).money||0;
this.form.contract2=this.getValue(tmps,4).money||0;
this.form.contract3=this.getValue(tmps,5).money||0;
this.form.safety1=this.getValue(tmps,6).money||0;
this.form.safety2=this.getValue(tmps,7).money||0;
this.form.safety3=this.getValue(tmps,8).money||0;
let objs=tmps.filter(it=>it.costType==9);
let obj={};
objs.forEach(it=>{
if(!obj[it.year]){
obj[it.year]=[];
}
obj[it.year].push(it);
});
let objs = tmps.filter((d) => d.parentLvl.length == 0);
objs.forEach((it) => {
it.children = tmps.filter((item) => item.parentLvl == it.lvl);
it.children.forEach((item) => {
item.children = tmps.filter((item3) => item3.parentLvl == item.lvl);
});
});
this.nodes = objs;
if (init) {
this.activeName = objs.length > 0 ? objs[0].id + "" : "";
for(let k in obj){
this.monthInv.push({
year:k,
value:obj[k]
})
}
this.$refs.costYear.init(this.yearInv);
this.$refs.costMonth.init(this.monthInv);
});
},
getValue(tmps,type){
let objs=tmps.filter(d=>d.costType==type);
return objs.length>0?objs[0]:{};
},
show(prj) {
this.prj = prj;
this.title = prj.projectName;
@ -160,7 +159,7 @@ export default {
<style lang="scss" scoped>
.project-cost-outpu-drawer {
::v-deep .el-drawer {
min-width: 1600px;
min-width: 1400px;
}
::v-deep .el-drawer__header {
@ -174,7 +173,30 @@ export default {
overflow: hidden;
.el-form-item {
margin-bottom: 15px !important;
margin-bottom: 8px !important;
&.w400{
.el-input-number{
width:400px;
}
}
.el-input-number{
.el-input-number__decrease{
display: none;
}
.el-input-number__increase{
display: none;
}
.el-input__inner{
padding: 0px 12px;
text-align: right;
}
}
.sp-unit{
margin-left:12px;
}
}
.div-title{
}
}

View File

@ -0,0 +1,46 @@
<template>
<div class="cost-year" style="border:solid 1px #409eff;margin: 12px 0px;padding: 12px 12px 0px;position: relative;">
<el-button size="small" type="primary" style="position: absolute;top:10px;right:12px;">增加年份</el-button>
<el-tabs v-model="activeName">
<el-tab-pane v-for="(it,idx) in yearInv" :label="''+it.year" :name="''+it.year" :key="idx">
<el-form-item label="年度投资" class="w400">
<el-input-number :precision="4" v-model="it.money" placeholder="年度投资">
</el-input-number>
<span class="sp-unit">万元</span>
</el-form-item>
</el-tab-pane>
</el-tabs>
</div>
</template>
<script>
export default {
name: 'RuoyiUiCostYear',
data() {
return {
activeName:'',
yearInv:[]
};
},
mounted() {
},
methods: {
init(d){
this.yearInv=d;
if(d.filter(it=>it.year==new Date().getFullYear()).length>0){
this.activeName=""+new Date().getFullYear()
}else{
this.activeName=""+d.year;
}
}
},
};
</script>
<style lang="scss" scoped>
</style>

View File

@ -239,7 +239,7 @@ export default {
loadData() {
let queryParams = {
pageNum: 1,
pageSize: 40,
pageSize:500,
};
listSurProject(queryParams).then((d) => {
this.prjs = d.rows || [];

View File

@ -41,8 +41,8 @@ module.exports = {
}
},
'/jhapi':{
target: `http://62.234.3.186/jhapi/`,
//target: `http://127.0.0.1:8090/jhapi/`,
//target: `http://62.234.3.186/jhapi/`,
target: `http://127.0.0.1:8090/jhapi/`,
changeOrigin: true,
pathRewrite: {
'^/jhapi':'/'

View File

@ -102,4 +102,51 @@ public class SurProjectCostOutputController extends BaseController
{
return toAjax(surProjectCostOutputService.deleteSurProjectCostOutputByIds(ids));
}
/**
* ID
* @param projectId
* @return
*/
@GetMapping("/listByProjectId")
public AjaxResult listByProjectId(long projectId){
SurProjectCostOutput where =new SurProjectCostOutput();
where.setProjectId(projectId);
List<SurProjectCostOutput> list=surProjectCostOutputService.selectSurProjectCostOutputList(where);
if(list.size()==0){
surProjectCostOutputService.initProject(projectId);
}
list=surProjectCostOutputService.selectSurProjectCostOutputList(where);
return AjaxResult.success(list);
}
/**
*
* @param projectId
* @param year
* @return
*/
@PostMapping("/addYearInvestment")
public AjaxResult addYearInvestment(@RequestBody SurProjectCostOutput where){
List<SurProjectCostOutput> list=surProjectCostOutputService.selectSurProjectCostOutputList(where);
if(list.size()==0){
surProjectCostOutputService.addYearInvestment(where);
return AjaxResult.success("增加年度投资成功!");
}else{
return AjaxResult.error("此年度投资已存在!");
}
}
@PostMapping("/addMonthInvestment")
public AjaxResult addMonthInvestment(@RequestBody SurProjectCostOutput where) {
List<SurProjectCostOutput> list=surProjectCostOutputService.selectSurProjectCostOutputList(where);
if(list.size()==0){
surProjectCostOutputService.addMonthInvestment(where);
return AjaxResult.success("增加月度投资成功!");
}else{
return AjaxResult.error("此月度投资已存在!");
}
}
}

View File

@ -59,4 +59,14 @@ public interface ISurProjectCostOutputService
* @return
*/
public int deleteSurProjectCostOutputById(Long id);
/**
*
* @param projectId
*/
public void initProject(long projectId);
public void addYearInvestment(SurProjectCostOutput where);
public void addMonthInvestment(SurProjectCostOutput where);
}

View File

@ -1,6 +1,10 @@
package com.yanzhu.jh.project.service.impl;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import com.ruoyi.common.utils.DateUtils;
import com.yanzhu.jh.project.domain.SurProjectCostOutput;
import com.yanzhu.jh.project.mapper.SurProjectCostOutputMapper;
@ -95,4 +99,62 @@ public class SurProjectCostOutputServiceImpl implements ISurProjectCostOutputSer
{
return surProjectCostOutputMapper.deleteSurProjectCostOutputById(id);
}
@Override
public void initProject(long projectId) {
Calendar calendar=Calendar.getInstance();
int year=calendar.get(Calendar.YEAR);
SurProjectCostOutput it=new SurProjectCostOutput();
it.setProjectId(projectId);
it.setMoney(0l);
it.setRemark("");
it.setIsDel(0l);
it.setCostType(1l);//总投资
insertSurProjectCostOutput(it);
it.setCostType(2l);//年度投资
it.setYear(year*1l);
insertSurProjectCostOutput(it);
it.setYear(null);
it.setCostType(3l);//合同金额
insertSurProjectCostOutput(it);
it.setCostType(4l);//合同支付金额
insertSurProjectCostOutput(it);
it.setCostType(5l);//合同挂账金额
insertSurProjectCostOutput(it);
it.setCostType(6l);//安措金额
insertSurProjectCostOutput(it);
it.setCostType(7l);//安措支付金额
insertSurProjectCostOutput(it);
it.setCostType(8l);//安措挂账金额
insertSurProjectCostOutput(it);
it.setCostType(9l);//月度投资
it.setYear(year*1l);
for(int i=1;i<=12;i++){
it.setMonth(i*1l);
insertSurProjectCostOutput(it);
}
}
@Override
public void addYearInvestment(SurProjectCostOutput it) {
it.setMoney(0l);
it.setRemark("");
it.setIsDel(0l);
it.setCostType(2l);//年度投资
insertSurProjectCostOutput(it);
}
@Override
public void addMonthInvestment(SurProjectCostOutput it) {
it.setMoney(0l);
it.setRemark("");
it.setIsDel(0l);
it.setCostType(9l);//月度投资
for(int i=1;i<=12;i++){
it.setMonth(i*1l);
insertSurProjectCostOutput(it);
}
}
}