工程进度更新页面搭建,接口联调

This commit is contained in:
cwchen 2025-04-23 15:45:53 +08:00
parent 0c00fa931e
commit 5e4c4a63c8
12 changed files with 396 additions and 52 deletions

View File

@ -113,4 +113,13 @@ public interface ProProgressDao {
* @date 2025/4/22 15:03
*/
void updateProProgress(ProProgressVo.UpdateRecordVo vo);
/**
* 更新杆塔进度
* @param vo
* @return void
* @author cwchen
* @date 2025/4/23 14:46
*/
void updateTower(ProProgressVo.UpdateRecordVo vo);
}

View File

@ -121,13 +121,18 @@ public class ProProgressServiceImpl implements ProProgressService {
@Override
public ServerResponse getGxData(QueryParamDto dto) {
Map<String, Object> map = new HashMap<>(2);
List<ProProgressVo.TowerDetailVo> list = null;
ProProgressVo.ProDetailVo vo = null;
try {
list = Optional.ofNullable(dao.getGxData(dto)).orElseGet(ArrayList::new);
vo = Optional.ofNullable(dao.getTowerProgress(dto)).orElseGet(ProProgressVo.ProDetailVo::new);
} catch (Exception e) {
log.error(e.toString(), e);
}
return ServerResponse.createSuccess(list);
map.put("list", list);
map.put("vo", vo);
return ServerResponse.createSuccess(map);
}
@Override
@ -151,11 +156,12 @@ public class ProProgressServiceImpl implements ProProgressService {
// 计算更新后的进度
double progress = handleProgress(finishTowerNum, towerNum, vo.getTowerIds().size());
vo.setFinishProgress(progress);
// 更新杆塔进度杆塔进度关系表更新工程整体进度
// 添加杆塔进度杆塔进度关系表更新工程整体进度更新杆塔进度
dao.addProgress(vo);
dao.addTowerProgress(vo);
dao.updateProProgress(vo);
return ServerResponse.createSuccess("操作成功");
dao.updateTower(vo);
return ServerResponse.createBySuccessMsg("操作成功");
} catch (Exception e) {
log.error(e.toString(), e);
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

View File

@ -33,6 +33,15 @@
UPDATE tb_project SET pro_progress = #{finishProgress},update_user_id = #{updateUserId}
WHERE id = #{id}
</update>
<!--更新杆塔进度-->
<update id="updateTower">
<foreach collection="towerIds" item="item" index="index" separator=";">
UPDATE tb_tower
SET
tower_progress = #{progressType}
WHERE id = #{item}
</foreach>
</update>
<!--工程进度更新-查询列表-->
<select id="getList" resultType="com.bonus.digitalSignage.backstage.entity.vo.ProProgressVo">
@ -82,7 +91,7 @@
LEFT JOIN (
SELECT pro_id,COUNT(*) AS num
FROM tb_tower
WHERE pro_id = #{id}
WHERE pro_id = #{id} AND is_actvice = '1'
GROUP BY pro_id
) C ON tp.id = C.pro_id
LEFT JOIN (
@ -111,7 +120,7 @@
SELECT tower_name AS towerName,
tower_progress AS towerProgress
FROM tb_tower
WHERE pro_id = #{id}
WHERE pro_id = #{id} AND is_actvice = '1'
</select>
<!--查询工程杆塔进度-->
<select id="getTowerProgress"
@ -122,8 +131,9 @@
COUNT(IF(tower_progress &gt;= 4, 1, NULL)) AS num4,
COUNT(IF(tower_progress &gt;= 5, 1, NULL)) AS num5,
COUNT(IF(tower_progress &gt;= 6, 1, NULL)) AS num6,
COUNT(IF(tower_progress &gt;= 7, 1, NULL)) AS num7
FROM tb_tower WHERE pro_id = #{id}
COUNT(IF(tower_progress &gt;= 7, 1, NULL)) AS num7,
COUNT(*) AS towerNum
FROM tb_tower WHERE pro_id = #{id} AND is_actvice = '1'
</select>
<!--工程进度更新-更新进度-更新记录-->
<select id="getUpdateRecord"
@ -141,15 +151,19 @@
<!--工程进度更新-更新进度-查询更新项目工序数据-->
<select id="getGxData"
resultType="com.bonus.digitalSignage.backstage.entity.vo.ProProgressVo$TowerDetailVo">
SELECT id,
tower_name AS towerName,
1 AS chooseStatus
FROM tb_tower WHERE pro_id = #{id} AND tower_progress = #{type} - 1
UNION ALL
SELECT id,
tower_name AS towerName,
0 AS chooseStatus
FROM tb_tower WHERE pro_id = #{id} AND tower_progress &gt;= #{type}
SELECT * FROM (
SELECT id,
tower_name AS towerName,
1 AS chooseStatus,
sort
FROM tb_tower WHERE pro_id = #{id} AND tower_progress = #{type} - 1 AND is_actvice = '1'
UNION ALL
SELECT id,
tower_name AS towerName,
0 AS chooseStatus,
sort
FROM tb_tower WHERE pro_id = #{id} AND tower_progress &gt;= #{type} AND is_actvice = '1'
) A ORDER BY sort
</select>
<!--查询杆塔进度是否被重复更新-->
<select id="getIsRepeatUpdate" resultType="java.lang.Integer">

View File

@ -148,6 +148,58 @@ body {
width: 99%;
padding: 0 0.5%;
height: calc(100% - 240px);
}
.update-form {
width: 100%;
height: 100px;
}
.btn-box {
width: 100%;
height: 60px;
margin-top: 10px;
box-sizing: border-box;
display: flex;
justify-content: center;
align-items: center;
}
.save {
background-color: #00377A;
}
.tower-box {
width: 100%;
max-height: calc(100% - 200px);
background-color: #F2F2F2FF;
margin-bottom: 10px;
align-items: start;
justify-content: start;
flex-wrap: wrap;
overflow-y: auto;
}
.tower-info {
width: 70px;
height: 40px;
margin: 10px;
border-radius: 6px;
border:1px solid #E4E4E4FF;
background-color: #fff;
cursor: pointer;
}
.biddenChoose{
background-color: #ffff00;
}
.choose{
color: #409eff;
font-weight: bold;
border:1px solid #409eff;
background-color:rgb(160, 207, 255,0.2);
}
.layui-tab-brief > .layui-tab-more li.layui-this:after,
@ -171,6 +223,6 @@ a:focus {
text-decoration: underline;
}
.layui-tab-item{
.layui-tab-item {
height: 100%;
}

View File

@ -41,7 +41,7 @@ function openIframe2(id, title, content, width, height, params) {
});
}
function openIframeByParamObj(id, title, content, width, height, paramsObj) {
function openIframeByParamObj(id, title, content, width, height, paramsObj,isRefresh) {
let layerIndex = layer.open({
id: id,
type: 2,
@ -58,6 +58,10 @@ function openIframeByParamObj(id, title, content, width, height, paramsObj) {
iframeWin.setParams(JSON.stringify(paramsObj));
}
},
end: function () { }
end: function () {
if(isRefresh === 'updatePro'){
reloadData();
}
}
});
}

View File

@ -180,8 +180,10 @@ function schedule(d) {
}
//设置页面进度条
return (
'<div class="layui-progress layui-progress-big" lay-showpercent="true" id="' + d.filter + '" lay-filter="proProgress' + d.filter + '">' +
'<div style="display: flex;">' +
'<div style="width: 230px;" class="layui-progress layui-progress-big" id="' + d.filter + '" lay-filter="proProgress' + d.filter + '">' +
'<div class="layui-progress-bar ' + color + '" lay-percent="' + d.proProgress + '%">' +
"</div></div>"
"</div></div><span style='margin-left: 10px;'>"+d.proProgress+"%</span>" +
'</div>'
);
}

View File

@ -1,6 +1,6 @@
let form, layer, element, table, tableIns;
let pageNum = 1, pageSize = 30;
let objParams = {};
let objParams = {},checkType = '1';
function setParams(obj) {
objParams = JSON.parse(obj);
@ -11,6 +11,7 @@ function setParams(obj) {
element = layui.element;
element.on('tab(demo-filter-tab)', function (data) {
let value = $(this).attr('value');
checkType = value;
if (value === '1') {
$('#layui-tab-title li').eq(0).addClass('layui-this');
$('#layui-tab-content>div').eq(0).addClass('layui-show');
@ -190,3 +191,17 @@ function setTowerProgress(value,type){
}
return html;
}
// 更新项目
function updatePro(){
openIframeByParamObj("updatePro", "更新项目", "./updateProForm.html", "92%", "95%", objParams,'updatePro');
}
function reloadData(){
if(checkType === '1'){
initSetProData();
query();
}else{
setUpdateRecord();
}
}

View File

@ -105,3 +105,113 @@ function setUpdateRecord(){
$('.layui-timeline').empty().append(html);
}
}
/**更新项目数据赋值*/
function setUpdateProData(value) {
let url = dataUrl + "/backstage/proProgress/getGxData"
let obj = {
id: objParams.id,
type:value
}
let params = {
encryptedData: encryptCBC(JSON.stringify(obj))
}
let loadingMsg = layer.msg("数据加载中,请稍候...", {icon: 16, scrollbar: false, time: 0,});
ajaxRequest(url, "POST", params, true, function () {
}, function (result) {
layer.close(loadingMsg);
if (result.status === 200) {
setData(result.data);
} else {
layer.msg(result.msg, {icon: 2})
}
}, function (xhr) {
layer.close(loadingMsg);
error(xhr)
});
function setData(data) {
let obj = data.vo;
let list = data.list;
$('#towerNum2').html(obj.towerNum);
for (let i = 1; i <= 7 ; i++) {
$('#num' + i).html(obj['num' + i]);
}
let html = '';
$.each(list,function (index,item) {
if(item.chooseStatus === 1){
html += '<div class="tower-info layout" dataId="'+item.id+'" onclick="chooseData(this)"><p>'+item.towerName+'</p></div>';
}else if(item.chooseStatus === 0){
html += '<div class="tower-info layout biddenChoose" dataId="'+item.id+'"><p>'+item.towerName+'</p></div>';
}
})
$('.tower-box').empty().append(html);
}
}
function chooseData(that){
let towerName = $(that).find('p').eq(0).html();
if($(that).hasClass('choose')){
$(that).removeClass('choose');
let oldData = $('#updateDesc').val();
let dataArr = oldData.split(';');
const filteredArray = dataArr.filter(item => !item.includes(towerName));
$('#updateDesc').val(filteredArray.join(';'));
}else{
$(that).addClass('choose');
let oldData = $('#updateDesc').val();
let value = getTypeName(towerName);
$('#updateDesc').val(oldData + value);
}
function getTypeName(towerName){
if(checkType === 1){
return towerName + '-' + '基础开挖;';
}else if(checkType === 2){
return towerName + '-' + '基础开挖完成;';
}else if(checkType === 3){
return towerName + '-' + '基础浇筑完成;';
}else if(checkType === 4){
return towerName + '-' + '铁塔组立;';
}else if(checkType === 5){
return towerName + '-' + '铁塔组立完成;';
}else if(checkType === 6){
return towerName + '-' + '架线施工完成;';
}else if(checkType === 7){
return towerName + '-' + '附件安装完成;';
}
}
}
// 更新项目保存数据
function saveData(data,towers) {
let url = dataUrl + "/backstage/proProgress/updateProgressData";
let paramsObj = data.field;
paramsObj.towerIds = towers;
paramsObj.id = objParams.id;
paramsObj.progressType = checkType;
let params = {
encryptedData: encryptCBC(JSON.stringify(paramsObj))
}
let loadingMsg = layer.msg('数据上传中,请稍候...', {icon: 16, scrollbar: false, time: 0});
ajaxRequest(url, "POST", params, true, function () {
$('.save').addClass("layui-btn-disabled").attr("disabled", true);
$('.cancel').addClass("layui-btn-disabled").attr("disabled", true);
}, function (result) {
layer.close(loadingMsg); // 关闭提示层
$('.save').removeClass("layui-btn-disabled").attr("disabled", false);
$('.cancel').removeClass("layui-btn-disabled").attr("disabled", false);
if (result.code === 200) {
parent.layer.msg(result.msg, {icon: 1});
setUpdateProData(checkType);
$('#updateDesc').val('');
} else {
layer.msg(result.msg, {icon: 2})
}
}, function (xhr) {
layer.close(loadingMsg); // 关闭提示层
$('.save').removeClass("layui-btn-disabled").attr("disabled", false);
$('.cancel').removeClass("layui-btn-disabled").attr("disabled", false);
error(xhr)
});
}

View File

@ -0,0 +1,45 @@
let form, layer, element, table, tableIns;
let objParams = {},checkType = 1;
function setParams(obj) {
objParams = JSON.parse(obj);
layui.use(['form', 'layer', 'element', 'table'], function () {
form = layui.form;
layer = layui.layer;
table = layui.table;
element = layui.element;
element.on('tab(demo-filter-tab)', function (data) {
let value = $(this).attr('value');
checkType = parseInt(value);
setUpdateProData(value);
$('#updateDesc').val('');
});
setUpdateProData(1);
element.render();
form.on('submit(formData)', function (data) {
let towers = getChooseData();
if(!towers.length){
return layer.msg("请选择杆塔", {icon: 7})
}
saveData(data,towers);
});
});
}
function getChooseData(){
let towers = [];
$('.tower-info.choose').each(function(){
towers.push($(this).attr('dataId'));
});
return towers;
}
function saveData2() {
$('#formSubmit').trigger('click')
}
// 关闭页面
function closePage() {
let index = parent.layer.getFrameIndex(window.name); //先得到当前 iframe层的索引
parent.layer.close(index); //再执行关闭
}

View File

@ -53,6 +53,13 @@
display: block;
margin: 0;
}
/*.layui-table-cell .layui-progress-bar span {
position: absolute;
left: -130px;
top: -7px;
color: #666;
font-size: 12px;
}*/
</style>
<script src="../../js/synthesisQuery/proProgressUpdate.js" charset="UTF-8" type="text/javascript"></script>
</html>

View File

@ -26,7 +26,7 @@
</div>
</div>
<div>
<button type="button" class="layui-btn layui-bg-blue no-print" onclick="print()"><i
<button type="button" class="layui-btn layui-bg-blue no-print" onclick="updatePro()"><i
class="layui-icon layui-icon-edit"></i>更新项目
</button>
</div>
@ -115,41 +115,13 @@
</div>
<div class="layui-tab-item">
<div class="layui-timeline">
<!--<div class="layui-timeline-item">
<i class="layui-icon layui-timeline-axis"></i>
<div class="layui-timeline-content layui-text">
<h3 class="layui-timeline-title">8月18日</h3>
<div class="layui-panel">
<div class="oper-info layout">
<div class="layout">
<img src="../../img/synthesisQuery/user_head_icon.png">
</div>
<div class="user-oper layout">
<div style="width: 100%;">
<span>王天峰</span><span>13787220576</span><span>项目管理中心</span>
</div>
<div style="width: 100%">
<span>完结-审核确认通过共耗时21小时16分钟 原因备注:无</span>
</div>
<div style="width: 100%">
<img src="../../img/synthesisQuery/time_icon.png">
<span style="margin: 0 5px 0 5px;">2020-12-23 22:31</span>
</div>
</div>
<div class="layout">
<span
style="margin: 0 5px 0 5px;">2020-12-23 22:31</span>
</div>
</div>
</div>
</div>-->
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
<script src="../../js/synthesisQuery/proProgressUpdateDetailAjax.js" charset="UTF-8" type="text/javascript"></script>
<script src="../../js/synthesisQuery/proProgressUpdateDetail.js" charset="UTF-8" type="text/javascript"></script>

View File

@ -0,0 +1,108 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="../../js/layui-v2.9.14/layui/css/layui.css">
<link rel="stylesheet" href="../../css/font.css">
<link rel="stylesheet" href="../../css/synthesisQuery/proProgressUpdateDetail.css">
<script src="../../js/libs/jquery-3.7.0.min.js" charset="UTF-8" type="text/javascript"></script>
<script src="../../js/layui-v2.9.14/layui/layui.js" charset="UTF-8" type="text/javascript"></script>
<script src="../../js/publicJs.js"></script>
<script src="../../js/commonUtils.js"></script>
<script src="../../js/openIframe.js"></script>
<script src="../../js/my/aes.js"></script>
<script src="../../js/ajaxRequest.js"></script>
<title>更新项目</title>
</head>
<style>
#data-box {
height: 100%;
}
#data-box-content {
height: 100%;
}
</style>
<body>
<div id="main-box">
<div id="data-box">
<div class="layui-tab layui-tab-brief" style="height: 98%;" lay-filter="demo-filter-tab">
<ul class="layui-tab-title" id="layui-tab-title">
<li class="layui-this" value="1">基础开挖</li>
<li value="2">基础开挖完成</li>
<li value="3">基础浇筑完成</li>
<li value="4">铁塔组立</li>
<li value="5">铁塔组立完成</li>
<li value="6">架线施工完成</li>
<li value="7">附件安装完成</li>
</ul>
<div class="layui-tab-content" style="height: calc(100% - 60px);" id="layui-tab-content">
<div class="layui-tab-item layui-show">
<div class="data-box-content" id="data-box-content">
<div id="gx-num-box" class="layout">
<div class="layout num-box">
<p>杆塔数</p>
<p id="towerNum2"></p>
</div>
<div class="layout num-box">
<p>基础开挖</p>
<p id="num1">0</p>
</div>
<div class="layout num-box">
<p>基础开挖完成</p>
<p id="num2">0</p>
</div>
<div class="layout num-box">
<p>基础浇筑完成</p>
<p id="num3">0</p>
</div>
<div class="layout num-box">
<p>铁塔组立</p>
<p id="num4">0</p>
</div>
<div class="layout num-box">
<p>铁塔组立完成</p>
<p id="num5">0</p>
</div>
<div class="layout num-box">
<p>架线施工完成</p>
<p id="num6">0</p>
</div>
<div class="layout num-box">
<p>附件安装完成</p>
<p id="num7">0</p>
</div>
</div>
<div class="tower-box layout">
</div>
<div class="update-form">
<form class="layui-form" onsubmit="return false;">
<div class="layui-form-item">
<label class="layui-form-label"><i style="padding: 0 5px;color: red;">*</i>更新说明</label>
<div class="layui-input-block">
<textarea class="layui-textarea" id="updateDesc" name="updateDesc" autocomplete="off"
lay-verify="required" maxlength="1000"></textarea>
</div>
</div>
<button type="submit" id="formSubmit" class="layui-btn" lay-submit=""
lay-filter="formData"
style="display: none;"></button>
</form>
</div>
<div class="btn-box">
<button class="layui-btn layui-btn-norma save" onclick="saveData2()">确定</button>
<button class="layui-btn layui-btn-primary cancel" onclick="closePage()">取消</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
<script src="../../js/synthesisQuery/proProgressUpdateDetailAjax.js" charset="UTF-8" type="text/javascript"></script>
<script src="../../js/synthesisQuery/updateProForm.js" charset="UTF-8" type="text/javascript"></script>
</html>