feat(project): 重构 POC测试信息功能

- 修改 POC 测试信息相关页面和接口- 新增 POC 测试进展详情功能
- 优化 POC 测试信息展示和搜索
- 重构 POC 测试信息相关数据结构
master
chenhao 2025-06-12 11:26:43 +08:00
parent da0bde24e6
commit 1021938cb1
14 changed files with 694 additions and 147 deletions

View File

@ -70,7 +70,7 @@
}
.shortTd {
width: 112px;
width: 130px;
}
.inputTd{
width: 27vw;
@ -223,7 +223,7 @@
></td>
<td>POC测试</td>
<td>
<select name="countryProduct" class="form-control">
<select name="countryProduct" class="form-control" value="0">
<option value="">请选择</option>
<option value="1"></option>
<option value="0"></option>

View File

@ -1,7 +1,10 @@
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>配置信息表格组件</title>
<head>
<th:block th:include="include :: header('修改poc测试信息')"/>
<th:block th:include="include :: datetimepicker-css"/>
</head>
</head>
<style>
.add-btn-div {
@ -29,13 +32,185 @@
<body>
<div id="config-info-component" th:fragment="pocLog()">
<div class="layui-tab">
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
<input name="projectPocInfo.id" type="hidden">
<table>
<tr>
<td class="shortTd" style=" text-align: right;">服务器配置<span class="is-required">*</span></td>
<td colspan="5"><input type="text"
name="projectPocInfo.serverConfig"
placeholder="服务器配置"
class="form-control"></td>
</tr>
<tr>
<td class="shortTd" style=" text-align: right;">云桌面版本<span class="is-required">*</span></td>
<td class="inputTd"><input type="text"
name="projectPocInfo.vdiVersion"
placeholder="云桌面版本"
class="form-control"></td>
<td class="shortTd" style=" text-align: right;">配置终端<span class="is-required">*</span></td>
<td class="inputTd"><input type="text"
name="projectPocInfo.terminalConfig"
placeholder="配置终端"
class="form-control"></td>
<td class="shortTd" style=" text-align: right;">操作系统<span class="is-required">*</span></td>
<td class="inputTd"><input type="text"
name="projectPocInfo.operateSystem"
placeholder="操作系统"
class="form-control"></td>
</tr>
<tr>
<td class="shortTd" style=" text-align: right;">H3C接口人<span class="is-required">*</span></td>
<td colspan="2"><input type="text"
name="projectPocInfo.h3cPerson"
placeholder="H3C接口人"
class="form-control"></td>
<td class="shortTd" style=" text-align: right;">H3C TEL<span class="is-required">*</span></td>
<td colspan="2"><input type="text" name="projectPocInfo.h3cPhone"
placeholder="H3C TEL"
class="form-control"></td>
</tr>
<tr>
<td class="shortTd" style=" text-align: right;">汇智接口人<span class="is-required">*</span></td>
<td colspan="2"><input type="text"
name="projectPocInfo.hzInterfacePerson"
placeholder="汇智接口人"
class="form-control"></td>
<td class="shortTd" style=" text-align: right;">汇智 TEL<span class="is-required">*</span></td>
<td colspan="2"><input type="text"
name="projectPocInfo.hzInterfacePhone"
placeholder="汇智 TEL"
class="form-control"></td>
</tr>
<tr>
<td class="shortTd" style=" text-align: right;">研发接口人<span class="is-required">*</span></td>
<td colspan="2"><input name="projectPocInfo.processPerson" placeholder="研发接口人"
class="form-control" type="text">
<td class="shortTd" style=" text-align: right;">研发 TEL<span class="is-required">*</span></td>
<td colspan="2"><input name="projectPocInfo.processPhone" placeholder="研发 TEL"
class="form-control" type="text"></td>
</tr>
<tr>
<td class="shortTd" style=" text-align: right;">现场接口人<span class="is-required">*</span></td>
<td colspan="2"><input name="projectPocInfo.handlePerson" placeholder="现场接口人"
class="form-control" type="text">
<td class="shortTd" style=" text-align: right;">现场 TEL<span class="is-required">*</span></td>
<td colspan="2"><input name="projectPocInfo.handlePhone" placeholder="现场 TEL"
class="form-control" type="text"></td>
</tr>
<tr>
<td class="shortTd" style=" text-align: right;">启动时间<span class="is-required">*</span></td>
<td><input name="projectPocInfo.startDate"
autocomplete="off"
class="form-control" placeholder="yyyy-MM-dd" type="text">
</td>
<td class="shortTd" style=" text-align: right;">预计完成时间<span class="is-required">*</span></td>
<td><input name="projectPocInfo.planFinishTime"
autocomplete="off"
class="form-control" placeholder="yyyy-MM-dd" type="text">
</td>
<td class="shortTd" style=" text-align: right;">实际完成时间<span class="is-required">*</span></td>
<td><input name="projectPocInfo.realFinishTime"
autocomplete="off"
class="form-control" placeholder="yyyy-MM-dd" type="text">
</td>
</tr>
</table>
<div class="layui-tab-item layui-show">
<div class="add-btn-div">
<h3>测试进展</h3>
<button type="button" class="add-btn" onclick="addPocLogDetail({})">添加</button>
</div>
<table id="pocLogDetail">
<thead>
<tr>
<th style="width: 50px">序号</th>
<th>测试进展</th>
<th style="width: 100px">更新人员</th>
<th style="width: 120px">更新时间</th>
</tr>
</thead>
<tbody></tbody>
<!-- 可动态添加行 -->
</table>
</div>
</div>
<th:block th:include="include :: footer"/>
<th:block th:include="include :: datetimepicker-js"/>
<!-- JS 函数引用或内联 -->
<script th:inline="javascript"> /*<![CDATA[*/
function addPocLogDetail(data) {
let length = $('#pocLogDetail tbody').find('tr').length
let tr = $(`
<tr>
<td style="text-align: center;">${length + 1}</td>
<td><input type="hidden" value="${data.id || ''}" name="projectPocInfo.projectPocInfoDetailList[${length}].id">
<input type="text" onclick="showDetailValue(this)" name="projectPocInfo.projectPocInfoDetailList[${length}].testProgress" class="form-control" required value="${data.testProgress || ''}"></input></td>
<td><input type="text" class="form-control" placeholder="保存后自动填入" value="${data.createByName || ''}" readonly></td>
<td><input type="text" class="form-control" placeholder="保存后自动填入" value="${data.createTime||''}" readonly></td>
</tr>`)
$('#pocLogDetail tbody').append(tr)
}
$("input[name='projectPocInfo.startDate']").datetimepicker({
format: "yyyy-mm-dd",
minView: "month",
autoclose: true,
pickerPosition: "top-right"
});
$("input[name='projectPocInfo.planFinishTime']").datetimepicker({
format: "yyyy-mm-dd",
minView: "month",
autoclose: true,
pickerPosition: "top-right"
});
$("input[name='projectPocInfo.realFinishTime']").datetimepicker({
format: "yyyy-mm-dd",
minView: "month",
autoclose: true,
pickerPosition: "top-right"
});
$(function () {
let projectInfo = [[${projectInfo}]];
if (projectInfo) {
let projectPocInfo = projectInfo.projectPocInfo;
if (projectPocInfo) {
$("input[name = 'projectPocInfo.id']").val(projectPocInfo.id);
$("input[name = 'projectPocInfo.serverConfig']").val(projectPocInfo.serverConfig);
$("input[name = 'projectPocInfo.terminalConfig']").val(projectPocInfo.terminalConfig);
$("input[name = 'projectPocInfo.operateSystem']").val(projectPocInfo.operateSystem);
$("input[name = 'projectPocInfo.vdiVersion']").val(projectPocInfo.vdiVersion);
$("input[name = 'projectPocInfo.processPerson']").val(projectPocInfo.processPerson);
$("input[name = 'projectPocInfo.processPhone']").val(projectPocInfo.processPhone);
$("input[name = 'projectPocInfo.handlePerson']").val(projectPocInfo.handlePerson);
$("input[name = 'projectPocInfo.handlePhone']").val(projectPocInfo.handlePhone);
$("input[name = 'projectPocInfo.hzInterfacePerson']").val(projectPocInfo.hzInterfacePerson);
$("input[name = 'projectPocInfo.hzInterfacePhone']").val(projectPocInfo.hzInterfacePhone);
$("input[name = 'projectPocInfo.startDate']").val(projectPocInfo.startDate);
$("input[name = 'projectPocInfo.h3cPerson']").val(projectPocInfo.h3cPerson);
$("input[name = 'projectPocInfo.h3cPhone']").val(projectPocInfo.h3cPhone);
$("input[name = 'projectPocInfo.planFinishTime']").val(projectPocInfo.planFinishTime);
$("input[name = 'projectPocInfo.realFinishTime']").val(projectPocInfo.realFinishTime);
if (projectPocInfo.projectPocInfoDetailList) {
projectPocInfo.projectPocInfoDetailList.forEach(item => {
addPocLogDetail(item)
})
}
}
}
});
/*]]>*/

View File

@ -74,7 +74,7 @@
}
.shortTd {
width: 112px;
width: 130px;
}
.inputTd {
@ -552,11 +552,7 @@
`)
$('#sysLog tbody').append(tr)
})
let pocLog = [[${projectInfo.projectPocInfo}]];
if (pocLog) {
addPocLog(pocLog)
document.getElementById('addPocLog').setAttribute("style", "display:none")
}
changeBg()
$('[name="industryType"]').val([[${projectInfo.industryType}]])
}
@ -576,42 +572,7 @@
}
function addPocLog(data) {
let length = $('#workLog tbody').find('tr').length
let tr = $(`
<tr>
<td><input type="hidden" value="${data.id || ''}" name="projectPocInfo.id"/>
<input type="text" onclick="showDetailValue(this,true)" name="projectPocInfo.testEnvironment" class="form-control" required value="${data.testEnvironment || ''}"></input></td>
<td><input type="text" onclick="showDetailValue(this,true)" name="projectPocInfo.testProgress" class="form-control" required value="${data.testProgress || ''}"></input></td>
<td><input type="text" onclick="showDetailValue(this,true)" name="projectPocInfo.projectUserInfo" class="form-control" required value="${data.projectUserInfo || ''}"></input></td>
<td><input name="projectPocInfo.startDate" autocomplete="off" class="form-control" placeholder="yyyy-MM-dd"
value="${data.startDate||''}"></td>
<td><input name="projectPocInfo.planFinishTime" value="${data.planFinishTime||''}" autocomplete="off" class="form-control" placeholder="yyyy-MM-dd"></td>
<td><input name="projectPocInfo.realFinishTime" value="${data.realFinishTime||''}" autocomplete="off" class="form-control" placeholder="yyyy-MM-dd"></td>
</tr>`)
$('#pocLog tbody').append(tr)
$("input[name='projectPocInfo.startDate']").datetimepicker({
format: "yyyy-mm-dd",
minView: "month",
autoclose: true,
pickerPosition:"top-right"
});
$("input[name='projectPocInfo.planFinishTime']").datetimepicker({
format: "yyyy-mm-dd",
minView: "month",
autoclose: true,
pickerPosition:"top-right"
});
$("input[name='projectPocInfo.realFinishTime']").datetimepicker({
format: "yyyy-mm-dd",
minView: "month",
autoclose: true,
pickerPosition:"top-right"
});
}
function addLog(data) {
let length = $('#workLog tbody').find('tr').length
let tr = $(`

View File

@ -248,7 +248,7 @@
title: '汇智负责人'
},
{
field: 'poc',
field: 'POC',
title: 'poc'
},

View File

@ -7,6 +7,32 @@
.select-list li p, .select-list li label:not(.radio-box){
width: 80px;
}
.sortBox {
display: flex;
float: right;
flex-direction: column;
gap: 0;
height: 20px;
justify-content: center;
margin-right: 30px;
}
.sortBox div {
font-size: 10px;
transform: scale(1.2, 1);
cursor: pointer;
color: #bbb;
}
.sortBox .timeAction {
color: #000;
}
.timeSearch {
display: flex;
gap: 20px;
align-items: center;
}
</style>
<body class="gray-bg">
<div class="container-div">
@ -55,13 +81,34 @@
<input type="text" name="partnerName" placeholder="进货商" />
</li>
<li class="timeSearch" style="width: 80%">
<div>
<label>时间选择:</label>
<select name="timeType" onchange="changeTimeType()" value="0">
<option value="0">到货时间</option>
<option value="1">下单时间</option>
<option value="2">执行单截止时间</option>
</select>
</div>
<div class="timeSearch">
<input name="deliveryTimeStart" type="text" class="input-sm form-control"
id="laydate-startTime"
placeholder="yyyy-MM-dd"/>
<span></span>
<input name="deliveryTimeEnd" type="text" class="input-sm form-control"
id="laydate-endTime"
placeholder="yyyy-MM-dd"/>
</div>
</li>
<li>
<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
<a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i class="fa fa-refresh"></i>&nbsp;重置</a>
</li>
</ul>
<input type="hidden" name="orderByColumn"/>
<input type="hidden" name="isAsc"/>
</div>
</form>
</div>
@ -90,7 +137,46 @@
var editFlag = [[${@permission.hasPermi('product:order:edit')}]];
var removeFlag = [[${@permission.hasPermi('product:order:remove')}]];
var prefix = ctx + "project/order";
function initSrot() {
let sort3 = $(`<div class="sortBox"><div class="sortBtn" sort="asc"></div><div class="sortBtn" sort="desc"></div></div>`)
$('thead .time3 .th-inner').append(sort3)
let sort4 = $(`<div class="sortBox"><div class="sortBtn" sort="asc"></div><div class="sortBtn" sort="desc"></div></div>`)
$('thead .time4 .th-inner').append(sort4)
let sort5 = $(`<div class="sortBox"><div class="sortBtn" sort="asc"></div><div class="sortBtn" sort="desc"></div></div>`)
$('thead .time5 .th-inner').append(sort5)
bindSort([ sort3, sort4, sort5])
}
function changeTimeType() {
let timeType = $("[name='timeType']").val()
if (timeType == 0) {
$('#laydate-startTime').attr('name', 'deliveryTimeStart')
$('#laydate-endTime').attr('name', 'deliveryTimeEnd')
}else if(timeType==1){
$('#laydate-startTime').attr('name', 'estimatedOrderTimeStart')
$('#laydate-endTime').attr('name', 'estimatedOrderTimeEnd')
}else if(timeType==2){
$('#laydate-startTime').attr('name', 'orderEndTimeStart')
$('#laydate-endTime').attr('name', 'orderEndTimeEnd')
}
}
function bindSort(list) {
list.forEach((ele, index) => {
$(ele).find('.sortBtn').on('click', function () {
changeSort(this, index)
})
})
}
function changeSort(ele, index) {
let arr = ['deliveryTime','t2.estimatedOrderTime','orderEndTime']
$('.sortBox').find('.timeAction').removeClass('timeAction')
$(ele).addClass('timeAction')
$('input[name="orderByColumn"]').val(arr[index])
$('input[name="isAsc"]').val($(ele).attr('sort'))
$.table.search()
}
$(function() {
// $('#content').load(ctx + 'project/order/add');
var urlChina = '/cnarea/select';
@ -139,10 +225,6 @@
return value?formatAmountNumber(value):'';
}
},
{
field: 'createTime',
title: '下单时间'
},
{
field: 'orderStatus',
title: '订单状态',
@ -166,6 +248,21 @@
field: 'partnerName',
title: '进货商'
},
{
field: 'deliveryTime',
title: '到货时间',
class: 'time3'
},
{
field: 'estimatedOrderTime',
title: '下单时间',
class: 'time4'
},
{
field: 'orderEndTime',
title: '执行单截止时间',
class: 'time5'
},
{
title: '操作',
align: 'center',
@ -178,6 +275,47 @@
}]
};
$.table.init(options);
initSrot()
layui.use('laydate', function () {
var laydate = layui.laydate;
var startDate = laydate.render({
elem: '#laydate-startTime',
max: $('#laydate-endTime').val(),
theme: 'molv',
trigger: 'click',
done: function (value, date) {
// 结束时间大于开始时间
if (value !== '') {
endDate.config.min.year = date.year;
endDate.config.min.month = date.month - 1;
endDate.config.min.date = date.date;
} else {
endDate.config.min.year = '';
endDate.config.min.month = '';
endDate.config.min.date = '';
}
}
});
var endDate = laydate.render({
elem: '#laydate-endTime',
min: $('#laydate-startTime').val(),
theme: 'molv',
trigger: 'click',
done: function (value, date) {
// 开始时间小于结束时间
if (value !== '') {
startDate.config.max.year = date.year;
startDate.config.max.month = date.month - 1;
startDate.config.max.date = date.date;
} else {
startDate.config.max.year = '';
startDate.config.max.month = '';
startDate.config.max.date = '';
}
}
});
})
});
</script>
</body>

View File

@ -58,8 +58,9 @@ public class ProjectOrderInfo extends BaseEntity {
@Excel(name = "金额")
private BigDecimal shipmentAmount;
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@Excel(name="下单时间", width = 30, dateFormat = "yyyy-MM-dd")
// @Excel(name="下单时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date createTime;
/**
*
*/
@ -129,17 +130,26 @@ public class ProjectOrderInfo extends BaseEntity {
/**
*
*/
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
// @Excel(name = "执行单有效截止时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date orderEndTime;
/**
*
*/
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
// @Excel(name = "要求到货时间", width = 30, dateFormat = "yyyy-MM-dd")
@Excel(name="到货时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date deliveryTime;
private Date deliveryTimeStart;
private Date deliveryTimeEnd;
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@Excel(name = "下单时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date estimatedOrderTime;
private Date estimatedOrderTimeStart;
private Date estimatedOrderTimeEnd;
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@Excel(name = "执行单有效截止时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date orderEndTime;
private Date orderEndTimeStart;
private Date orderEndTimeEnd;
/**
*
*/

View File

@ -1,9 +1,9 @@
package com.ruoyi.sip.domain;
import java.util.List;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.ToString;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
@ -13,10 +13,9 @@ import com.ruoyi.common.core.domain.BaseEntity;
* poc project_poc_info
*
* @author ruoyi
* @date 2025-06-09
* @date 2025-06-12
*/
@Data
@ToString
public class ProjectPocInfo extends BaseEntity
{
private static final long serialVersionUID = 1L;
@ -28,23 +27,59 @@ public class ProjectPocInfo extends BaseEntity
@Excel(name = "项目id")
private Long projectId;
/** 测试环境 */
@Excel(name = "测试环境")
private String testEnvironment;
/** 服务器配置 */
@Excel(name = "服务器配置")
private String serverConfig;
/** 测试进展 */
@Excel(name = "测试进展")
private String testProgress;
/** 终端配置 */
@Excel(name = "终端配置")
private String terminalConfig;
/** 项目成员信息 */
@Excel(name = "项目成员信息")
private String projectUserInfo;
/** 操作系统 */
@Excel(name = "操作系统")
private String operateSystem;
/** 启动日期 */
/** 云桌面版本 */
@Excel(name = "云桌面版本")
private String vdiVersion;
/** 研发人员 */
@Excel(name = "研发人员")
private String processPerson;
/** 研发联系电话 */
@Excel(name = "研发联系电话")
private String processPhone;
/** 现场处理人员 */
@Excel(name = "现场处理人员")
private String handlePerson;
/** 现场联系电话 */
@Excel(name = "现场联系电话")
private String handlePhone;
/** 汇智接口人 */
@Excel(name = "汇智接口人")
private String hzInterfacePerson;
/** 汇智联系电话 */
@Excel(name = "汇智联系电话")
private String hzInterfacePhone;
/** 启动时间 */
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@Excel(name = "启动日期", width = 30, dateFormat = "yyyy-MM-dd")
@Excel(name = "启动时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date startDate;
/** H3C销售/SE */
@Excel(name = "H3C销售/SE")
private String h3cPerson;
/** 联系电话 */
@Excel(name = "联系电话")
private String h3cPhone;
/** 预计完成时间 */
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@Excel(name = "预计完成时间", width = 30, dateFormat = "yyyy-MM-dd")
@ -55,4 +90,7 @@ public class ProjectPocInfo extends BaseEntity
@Excel(name = "实际完成时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date realFinishTime;
/** $table.subTable.functionName信息 */
private List<ProjectPocInfoDetail> projectPocInfoDetailList;
}

View File

@ -0,0 +1,37 @@
package com.ruoyi.sip.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import java.util.Date;
/**
* ${subTable.functionName} project_poc_info_detail
*
* @author ruoyi
* @date 2025-06-12
*/
@Data
public class ProjectPocInfoDetail extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** $column.columnComment */
private Long id;
/** poc_log表Id */
@Excel(name = "poc_log表Id")
private Long pocId;
/** 测试进展 */
@Excel(name = "测试进展")
private String testProgress;
private String createByName;
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date createTime;
}

View File

@ -2,12 +2,13 @@ package com.ruoyi.sip.mapper;
import java.util.List;
import com.ruoyi.sip.domain.ProjectPocInfo;
import com.ruoyi.sip.domain.ProjectPocInfoDetail;
/**
* pocMapper
*
* @author ruoyi
* @date 2025-06-09
* @date 2025-06-12
*/
public interface ProjectPocInfoMapper
{
@ -59,8 +60,32 @@ public interface ProjectPocInfoMapper
*/
public int deleteProjectPocInfoByIds(String[] ids);
List<ProjectPocInfo> listByProjectId(List<Long> projectId);
/**
* ${subTable.functionName}
*
* @param ids
* @return
*/
public int deleteProjectPocInfoDetailByPocIds(String[] ids);
/**
* ${subTable.functionName}
*
* @param projectPocInfoDetailList ${subTable.functionName}
* @return
*/
public int batchProjectPocInfoDetail(List<ProjectPocInfoDetail> projectPocInfoDetailList);
void insertBatch(List<ProjectPocInfo> addList);
void updateBatch(List<ProjectPocInfo> addList);
/**
* poc${subTable.functionName}
*
* @param id pocID
* @return
*/
public int deleteProjectPocInfoDetailByPocId(Long id);
List<ProjectPocInfo> listByProjectId(List<Long> longs);
void updateBatchProjectPocInfoDetail(List<ProjectPocInfoDetail> updateList);
}

View File

@ -7,7 +7,7 @@ import com.ruoyi.sip.domain.ProjectPocInfo;
* pocService
*
* @author ruoyi
* @date 2025-06-09
* @date 2025-06-12
*/
public interface IProjectPocInfoService
{
@ -41,7 +41,7 @@ public interface IProjectPocInfoService
* @param projectPocInfo poc
* @return
*/
public int updateProjectPocInfo(ProjectPocInfo projectPocInfo);
public int saveProjectPocInfo(ProjectPocInfo projectPocInfo);
/**
* poc
@ -59,9 +59,6 @@ public interface IProjectPocInfoService
*/
public int deleteProjectPocInfoById(Long id);
List<ProjectPocInfo> listByProjectId(List<Long> projectId);
List<ProjectPocInfo> listByProjectId(List<Long> longs);
void saveBatch(List<ProjectPocInfo> projectPocInfos);
}

View File

@ -141,6 +141,9 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
if (CollUtil.isNotEmpty(projectInfo.getCompetitorList())) {
projectInfo.setCompetitor(projectInfo.getCompetitorList().stream().filter(StringUtils::isNotEmpty).collect(Collectors.joining(",")));
}
if (projectInfo.getProjectPocInfo()!=null && CollUtil.isNotEmpty(projectInfo.getProjectPocInfo().getProjectPocInfoDetailList())){
projectInfo.setPoc("1");
}
int i = projectInfoMapper.insertProjectInfo(projectInfo);
saveOtherInfo(projectInfo);
return i;
@ -185,7 +188,7 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
ProjectPocInfo projectPocInfo = projectInfo1.getProjectPocInfo();
if (projectPocInfo != null) {
projectPocInfo.setProjectId(projectInfo1.getId());
pocInfoService.saveBatch(Collections.singletonList(projectPocInfo));
pocInfoService.saveProjectPocInfo(projectPocInfo);
}
}
@ -223,6 +226,9 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
if (changeWork) {
projectInfo.setUpdateTime(DateUtils.getNowDate());
}
if (projectInfo.getProjectPocInfo()!=null && CollUtil.isNotEmpty(projectInfo.getProjectPocInfo().getProjectPocInfoDetailList())){
projectInfo.setPoc("1");
}
int result = projectInfoMapper.updateProjectInfo(projectInfo);
//变更其它信息
saveOtherInfo(projectInfo);
@ -340,12 +346,21 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
return ++index;
}
if (oldInfo != null) {
index=compareField(logContent, index, "POC记录测试环境", oldInfo.getTestEnvironment(), info.getTestEnvironment());
index=compareField(logContent, index, "POC记录测试进展", oldInfo.getTestProgress(), info.getTestProgress());
index=compareField(logContent, index, "POC记录项目成员信息", oldInfo.getProjectUserInfo(), info.getProjectUserInfo());
index=compareField(logContent, index, "POC记录启动日期", formatterDate(oldInfo.getStartDate()), formatterDate(info.getStartDate()));
index=compareField(logContent, index, "POC记录预计完成日期", formatterDate(oldInfo.getPlanFinishTime()), formatterDate(info.getPlanFinishTime()));
index=compareField(logContent, index, "POC记录实际完成日期", formatterDate(oldInfo.getRealFinishTime()), formatterDate(info.getRealFinishTime()));
index=compareField(logContent, index, "POC服务器配置", oldInfo.getServerConfig(), info.getServerConfig());
index=compareField(logContent, index, "POC云桌面版本", oldInfo.getVdiVersion(), info.getVdiVersion());
index=compareField(logContent, index, "POC配置终端", oldInfo.getTerminalConfig(), info.getTerminalConfig());
index=compareField(logContent, index, "POC操作系统", oldInfo.getOperateSystem(), info.getOperateSystem());
index=compareField(logContent, index, "POC H3C接口人", oldInfo.getH3cPerson(), info.getH3cPerson());
index=compareField(logContent, index, "POC H3C TEL", oldInfo.getH3cPhone(), info.getH3cPhone());
index=compareField(logContent, index, "POC汇智接口人", oldInfo.getHzInterfacePerson(), info.getHzInterfacePerson());
index=compareField(logContent, index, "POC汇智 TEL", oldInfo.getHzInterfacePhone(), info.getHzInterfacePhone());
index=compareField(logContent, index, "POC研发接口人", oldInfo.getProcessPerson(), info.getProcessPerson());
index=compareField(logContent, index, "POC研发 TEL", oldInfo.getProcessPhone(), info.getProcessPhone());
index=compareField(logContent, index, "POC现场接口人", oldInfo.getHandlePerson(), info.getHandlePerson());
index=compareField(logContent, index, "POC现场 TEL", oldInfo.getHandlePhone(), info.getHandlePhone());
index=compareField(logContent, index, "POC启动时间", formatterDate(oldInfo.getStartDate()), formatterDate(info.getStartDate()));
index=compareField(logContent, index, "POC预计完成时间", formatterDate(oldInfo.getPlanFinishTime()), formatterDate(info.getPlanFinishTime()));
index=compareField(logContent, index, "POC实际完成时间", formatterDate(oldInfo.getRealFinishTime()), formatterDate(info.getRealFinishTime()));
}
return index;
}

View File

@ -2,12 +2,19 @@ package com.ruoyi.sip.service.impl;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.ShiroUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import com.ruoyi.common.utils.StringUtils;
import org.springframework.transaction.annotation.Transactional;
import com.ruoyi.sip.domain.ProjectPocInfoDetail;
import com.ruoyi.sip.mapper.ProjectPocInfoMapper;
import com.ruoyi.sip.domain.ProjectPocInfo;
import com.ruoyi.sip.service.IProjectPocInfoService;
@ -17,7 +24,7 @@ import com.ruoyi.common.core.text.Convert;
* pocService
*
* @author ruoyi
* @date 2025-06-09
* @date 2025-06-12
*/
@Service
public class ProjectPocInfoServiceImpl implements IProjectPocInfoService
@ -55,11 +62,14 @@ public class ProjectPocInfoServiceImpl implements IProjectPocInfoService
* @param projectPocInfo poc
* @return
*/
@Transactional
@Override
public int insertProjectPocInfo(ProjectPocInfo projectPocInfo)
{
projectPocInfo.setCreateTime(DateUtils.getNowDate());
return projectPocInfoMapper.insertProjectPocInfo(projectPocInfo);
int rows = projectPocInfoMapper.insertProjectPocInfo(projectPocInfo);
insertProjectPocInfoDetail(projectPocInfo);
return rows;
}
/**
@ -68,9 +78,17 @@ public class ProjectPocInfoServiceImpl implements IProjectPocInfoService
* @param projectPocInfo poc
* @return
*/
@Transactional
@Override
public int updateProjectPocInfo(ProjectPocInfo projectPocInfo)
public int saveProjectPocInfo(ProjectPocInfo projectPocInfo)
{
// projectPocInfoMapper.deleteProjectPocInfoDetailByPocId(projectPocInfo.getId());
insertProjectPocInfoDetail(projectPocInfo);
if (projectPocInfo.getId() == null) {
int i = projectPocInfoMapper.insertProjectPocInfo(projectPocInfo);
insertProjectPocInfoDetail(projectPocInfo);
return i;
}
return projectPocInfoMapper.updateProjectPocInfo(projectPocInfo);
}
@ -80,9 +98,11 @@ public class ProjectPocInfoServiceImpl implements IProjectPocInfoService
* @param ids poc
* @return
*/
@Transactional
@Override
public int deleteProjectPocInfoByIds(String ids)
{
projectPocInfoMapper.deleteProjectPocInfoDetailByPocIds(Convert.toStrArray(ids));
return projectPocInfoMapper.deleteProjectPocInfoByIds(Convert.toStrArray(ids));
}
@ -92,29 +112,49 @@ public class ProjectPocInfoServiceImpl implements IProjectPocInfoService
* @param id poc
* @return
*/
@Transactional
@Override
public int deleteProjectPocInfoById(Long id)
{
projectPocInfoMapper.deleteProjectPocInfoDetailByPocId(id);
return projectPocInfoMapper.deleteProjectPocInfoById(id);
}
@Override
public List<ProjectPocInfo> listByProjectId(List<Long> projectId) {
return projectPocInfoMapper.listByProjectId(projectId);
public List<ProjectPocInfo> listByProjectId(List<Long> longs) {
return projectPocInfoMapper.listByProjectId(longs);
}
@Override
public void saveBatch(List<ProjectPocInfo> projectPocInfos) {
if (CollUtil.isEmpty(projectPocInfos)){
return;
}
List<ProjectPocInfo> addList = projectPocInfos.stream().filter(projectPocInfo -> projectPocInfo.getId() == null).collect(Collectors.toList());
List<ProjectPocInfo> updateList = projectPocInfos.stream().filter(projectPocInfo -> projectPocInfo.getId() != null).collect(Collectors.toList());
if (CollUtil.isNotEmpty(addList)){
projectPocInfoMapper.insertBatch(addList);
}
if (CollUtil.isNotEmpty(updateList)){
projectPocInfoMapper.updateBatch(updateList);
/**
* ${subTable.functionName}
*
* @param projectPocInfo poc
*/
public void insertProjectPocInfoDetail(ProjectPocInfo projectPocInfo) {
List<ProjectPocInfoDetail> projectPocInfoDetailList = projectPocInfo.getProjectPocInfoDetailList();
Long id = projectPocInfo.getId();
if (CollUtil.isNotEmpty(projectPocInfoDetailList)) {
List<ProjectPocInfoDetail> addList = new ArrayList<>();
List<ProjectPocInfoDetail> updateList = new ArrayList<>();
projectPocInfoDetailList.forEach(projectPocInfoDetail -> {
projectPocInfoDetail.setPocId(id);
if (projectPocInfoDetail.getId() != null) {
updateList.add(projectPocInfoDetail);
} else {
projectPocInfoDetail.setCreateBy(ShiroUtils.getUserId().toString());
projectPocInfoDetail.setCreateTime(DateUtils.getNowDate());
addList.add(projectPocInfoDetail);
}
});
if (CollUtil.isNotEmpty(updateList)) {
// projectPocInfoMapper.updateBatchProjectPocInfoDetail(updateList);
}
if (CollUtil.isNotEmpty(addList)) {
projectPocInfoMapper.batchProjectPocInfoDetail(addList);
}
}
}
}

View File

@ -46,7 +46,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
t1.shipment_amount, t1.actual_purchase_amount, t1.order_end_time, t1.delivery_time, t1.company_delivery, t1.notifier,
t1.notifier_email, t1.notifier_phone, t1.duty, t1.duty_email, t1.duty_phone, t1.order_channel, t1.partner_code, t1.supplier,
t1.remark, t1.order_status, t1.create_by, t1.create_time, t1.update_by, t1.update_time,t1.partner_user_name,t1.partner_email,t1.partner_phone
,t2.project_code,t2.project_name,t2.province,t2.customer_name,t2.customer_code,t2.industry_type,t2.bg_property,t2.agent_code
,t2.project_code,t2.project_name,t2.province,t2.customer_name,t2.customer_code,t2.industry_type,t2.bg_property,t2.agent_code,t2.estimated_order_time
,t3.partner_name,t3.level
,t4.agent_name
,t5.user_name as duty_name
@ -90,6 +90,48 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="supplier != null and supplier != ''"> and t1.supplier = #{supplier}</if>
<if test="supplier != null and supplier != ''"> and t1.supplier = #{supplier}</if>
<if test="orderStatus != null and orderStatus != ''"> and t1.order_status = #{orderStatus}</if>
<if test="deliveryTimeStart != null or deliveryTimeEnd != null">
<choose>
<when test="deliveryTimeStart != null and deliveryTimeEnd != null">
and t1.delivery_time between date_format(#{deliveryTimeStart}, '%Y-%m-%d 00:00:00') and date_format(#{deliveryTimeEnd}, '%Y-%m-%d 23:59:59')
</when>
<when test="deliveryTimeStart != null">
and t1.delivery_time <![CDATA[ >= ]]> date_format(#{deliveryTimeStart}, '%Y-%m-%d 00:00:00')
</when>
<when test="deliveryTimeEnd != null">
and t1.delivery_time <![CDATA[ <= ]]> date_format(#{deliveryTimeEnd}, '%Y-%m-%d 23:59:59')
</when>
</choose>
</if>
<if test="estimatedOrderTimeStart != null or estimatedOrderTimeEnd != null">
<choose>
<when test="estimatedOrderTimeStart != null and estimatedOrderTimeEnd != null">
and t2.estimated_order_time between date_format(#{estimatedOrderTimeStart}, '%Y-%m-%d 00:00:00') and date_format(#{estimatedOrderTimeEnd}, '%Y-%m-%d 23:59:59')
</when>
<when test="estimatedOrderTimeStart != null">
and t2.estimated_order_time <![CDATA[ >= ]]> date_format(#{estimatedOrderTimeStart}, '%Y-%m-%d 00:00:00')
</when>
<when test="estimatedOrderTimeEnd != null">
and t2.estimated_order_time <![CDATA[ <= ]]> date_format(#{estimatedOrderTimeEnd}, '%Y-%m-%d 23:59:59')
</when>
</choose>
</if>
<if test="orderEndTimeStart != null or orderEndTimeEnd != null">
<choose>
<when test="orderEndTimeStart != null and orderEndTimeEnd != null">
and t1.order_end_time between date_format(#{orderEndTimeStart}, '%Y-%m-%d 00:00:00') and date_format(#{orderEndTimeEnd}, '%Y-%m-%d 23:59:59')
</when>
<when test="orderEndTimeStart != null">
and t1.order_end_time <![CDATA[ >= ]]> date_format(#{orderEndTimeStart}, '%Y-%m-%d 00:00:00')
</when>
<when test="orderEndTimeEnd != null">
and t1.order_end_time <![CDATA[ <= ]]> date_format(#{orderEndTimeEnd}, '%Y-%m-%d 23:59:59')
</when>
</choose>
</if>
</where>
</select>

View File

@ -7,54 +7,100 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<resultMap type="ProjectPocInfo" id="ProjectPocInfoResult">
<result property="id" column="id" />
<result property="projectId" column="project_id" />
<result property="testEnvironment" column="test_environment" />
<result property="testProgress" column="test_progress" />
<result property="projectUserInfo" column="project_user_info" />
<result property="serverConfig" column="server_config" />
<result property="terminalConfig" column="terminal_config" />
<result property="operateSystem" column="operate_system" />
<result property="vdiVersion" column="vdi_version" />
<result property="processPerson" column="process_person" />
<result property="processPhone" column="process_phone" />
<result property="handlePerson" column="handle_person" />
<result property="handlePhone" column="handle_phone" />
<result property="hzInterfacePerson" column="hz_interface_person" />
<result property="hzInterfacePhone" column="hz_interface_phone" />
<result property="startDate" column="start_date" />
<result property="h3cPerson" column="h3c_person" />
<result property="h3cPhone" column="h3c_phone" />
<result property="planFinishTime" column="plan_finish_time" />
<result property="realFinishTime" column="real_finish_time" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
</resultMap>
<resultMap id="ProjectPocInfoProjectPocInfoDetailResult" type="ProjectPocInfo" extends="ProjectPocInfoResult">
<collection property="projectPocInfoDetailList" ofType="ProjectPocInfoDetail" column="id" select="selectProjectPocInfoDetailList" />
</resultMap>
<resultMap type="ProjectPocInfoDetail" id="ProjectPocInfoDetailResult">
<result property="id" column="id" />
<result property="pocId" column="poc_id" />
<result property="testProgress" column="test_progress" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
</resultMap>
<sql id="selectProjectPocInfoVo">
select id, project_id, test_environment, test_progress, project_user_info, start_date, plan_finish_time, real_finish_time, create_by, create_time from project_poc_info
select id, project_id, server_config, terminal_config, operate_system, vdi_version, process_person, process_phone, handle_person, handle_phone, hz_interface_person, hz_interface_phone, start_date, h3c_person, h3c_phone, plan_finish_time, real_finish_time, create_by, create_time from project_poc_info
</sql>
<select id="selectProjectPocInfoList" parameterType="ProjectPocInfo" resultMap="ProjectPocInfoResult">
<include refid="selectProjectPocInfoVo"/>
<where>
<if test="projectId != null "> and project_id = #{projectId}</if>
<if test="testEnvironment != null and testEnvironment != ''"> and test_environment = #{testEnvironment}</if>
<if test="testProgress != null and testProgress != ''"> and test_progress = #{testProgress}</if>
<if test="projectUserInfo != null and projectUserInfo != ''"> and project_user_info = #{projectUserInfo}</if>
<if test="serverConfig != null and serverConfig != ''"> and server_config = #{serverConfig}</if>
<if test="terminalConfig != null and terminalConfig != ''"> and terminal_config = #{terminalConfig}</if>
<if test="operateSystem != null and operateSystem != ''"> and operate_system = #{operateSystem}</if>
<if test="vdiVersion != null and vdiVersion != ''"> and vdi_version = #{vdiVersion}</if>
<if test="processPerson != null and processPerson != ''"> and process_person = #{processPerson}</if>
<if test="processPhone != null and processPhone != ''"> and process_phone = #{processPhone}</if>
<if test="handlePerson != null and handlePerson != ''"> and handle_person = #{handlePerson}</if>
<if test="handlePhone != null and handlePhone != ''"> and handle_phone = #{handlePhone}</if>
<if test="hzInterfacePerson != null and hzInterfacePerson != ''"> and hz_interface_person = #{hzInterfacePerson}</if>
<if test="hzInterfacePhone != null and hzInterfacePhone != ''"> and hz_interface_phone = #{hzInterfacePhone}</if>
<if test="startDate != null "> and start_date = #{startDate}</if>
<if test="h3cPerson != null and h3cPerson != ''"> and h3c_person = #{h3cPerson}</if>
<if test="h3cPhone != null and h3cPhone != ''"> and h3c_phone = #{h3cPhone}</if>
<if test="planFinishTime != null "> and plan_finish_time = #{planFinishTime}</if>
<if test="realFinishTime != null "> and real_finish_time = #{realFinishTime}</if>
</where>
</select>
<select id="selectProjectPocInfoById" parameterType="Long" resultMap="ProjectPocInfoResult">
<include refid="selectProjectPocInfoVo"/>
<select id="selectProjectPocInfoById" parameterType="Long" resultMap="ProjectPocInfoProjectPocInfoDetailResult">
select id, project_id, server_config, terminal_config, operate_system, vdi_version, process_person, process_phone, handle_person, handle_phone, hz_interface_person, hz_interface_phone, start_date, h3c_person, h3c_phone, plan_finish_time, real_finish_time, create_by, create_time
from project_poc_info
where id = #{id}
</select>
<select id="listByProjectId" resultType="com.ruoyi.sip.domain.ProjectPocInfo">
<select id="selectProjectPocInfoDetailList" resultMap="ProjectPocInfoDetailResult">
select t1.id, t1.poc_id, t1.test_progress, t1.create_by, t1.create_time,t2.user_name as create_by_name
from project_poc_info_detail t1
left join sys_user t2 on t1.create_by = t2.user_id
where t1.poc_id = #{poc_id}
</select>
<select id="listByProjectId" resultMap="ProjectPocInfoProjectPocInfoDetailResult">
<include refid="selectProjectPocInfoVo"/>
where project_id in (
<foreach item="projectId" collection="list" separator=",">
#{projectId}
where project_id in
<foreach collection="list" item="item" separator="," open="(" close=")">
#{item}
</foreach>
)
</select>
<insert id="insertProjectPocInfo" parameterType="ProjectPocInfo" useGeneratedKeys="true" keyProperty="id">
insert into project_poc_info
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="projectId != null">project_id,</if>
<if test="testEnvironment != null">test_environment,</if>
<if test="testProgress != null">test_progress,</if>
<if test="projectUserInfo != null">project_user_info,</if>
<if test="serverConfig != null">server_config,</if>
<if test="terminalConfig != null">terminal_config,</if>
<if test="operateSystem != null">operate_system,</if>
<if test="vdiVersion != null">vdi_version,</if>
<if test="processPerson != null">process_person,</if>
<if test="processPhone != null">process_phone,</if>
<if test="handlePerson != null">handle_person,</if>
<if test="handlePhone != null">handle_phone,</if>
<if test="hzInterfacePerson != null">hz_interface_person,</if>
<if test="hzInterfacePhone != null">hz_interface_phone,</if>
<if test="startDate != null">start_date,</if>
<if test="h3cPerson != null">h3c_person,</if>
<if test="h3cPhone != null">h3c_phone,</if>
<if test="planFinishTime != null">plan_finish_time,</if>
<if test="realFinishTime != null">real_finish_time,</if>
<if test="createBy != null">create_by,</if>
@ -62,31 +108,43 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="projectId != null">#{projectId},</if>
<if test="testEnvironment != null">#{testEnvironment},</if>
<if test="testProgress != null">#{testProgress},</if>
<if test="projectUserInfo != null">#{projectUserInfo},</if>
<if test="serverConfig != null">#{serverConfig},</if>
<if test="terminalConfig != null">#{terminalConfig},</if>
<if test="operateSystem != null">#{operateSystem},</if>
<if test="vdiVersion != null">#{vdiVersion},</if>
<if test="processPerson != null">#{processPerson},</if>
<if test="processPhone != null">#{processPhone},</if>
<if test="handlePerson != null">#{handlePerson},</if>
<if test="handlePhone != null">#{handlePhone},</if>
<if test="hzInterfacePerson != null">#{hzInterfacePerson},</if>
<if test="hzInterfacePhone != null">#{hzInterfacePhone},</if>
<if test="startDate != null">#{startDate},</if>
<if test="h3cPerson != null">#{h3cPerson},</if>
<if test="h3cPhone != null">#{h3cPhone},</if>
<if test="planFinishTime != null">#{planFinishTime},</if>
<if test="realFinishTime != null">#{realFinishTime},</if>
<if test="createBy != null">#{createBy},</if>
<if test="createTime != null">#{createTime},</if>
</trim>
</insert>
<insert id="insertBatch">
insert into project_poc_info (project_id, test_environment, test_progress, project_user_info, start_date, plan_finish_time, real_finish_time, create_by, create_time) values
<foreach item="item" index="index" collection="list" separator=",">
(#{item.projectId}, #{item.testEnvironment}, #{item.testProgress}, #{item.projectUserInfo}, #{item.startDate}, #{item.planFinishTime}, #{item.realFinishTime}, #{item.createBy},now())
</foreach>
</insert>
<update id="updateProjectPocInfo" parameterType="ProjectPocInfo">
update project_poc_info
<trim prefix="SET" suffixOverrides=",">
<if test="projectId != null">project_id = #{projectId},</if>
<if test="testEnvironment != null">test_environment = #{testEnvironment},</if>
<if test="testProgress != null">test_progress = #{testProgress},</if>
<if test="projectUserInfo != null">project_user_info = #{projectUserInfo},</if>
<if test="serverConfig != null">server_config = #{serverConfig},</if>
<if test="terminalConfig != null">terminal_config = #{terminalConfig},</if>
<if test="operateSystem != null">operate_system = #{operateSystem},</if>
<if test="vdiVersion != null">vdi_version = #{vdiVersion},</if>
<if test="processPerson != null">process_person = #{processPerson},</if>
<if test="processPhone != null">process_phone = #{processPhone},</if>
<if test="handlePerson != null">handle_person = #{handlePerson},</if>
<if test="handlePhone != null">handle_phone = #{handlePhone},</if>
<if test="hzInterfacePerson != null">hz_interface_person = #{hzInterfacePerson},</if>
<if test="hzInterfacePhone != null">hz_interface_phone = #{hzInterfacePhone},</if>
<if test="startDate != null">start_date = #{startDate},</if>
<if test="h3cPerson != null">h3c_person = #{h3cPerson},</if>
<if test="h3cPhone != null">h3c_phone = #{h3cPhone},</if>
<if test="planFinishTime != null">plan_finish_time = #{planFinishTime},</if>
<if test="realFinishTime != null">real_finish_time = #{realFinishTime},</if>
<if test="createBy != null">create_by = #{createBy},</if>
@ -94,17 +152,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</trim>
where id = #{id}
</update>
<update id="updateBatch">
<foreach collection="list" item="item" index="index" separator=";">
update project_poc_info
<trim prefix="SET" suffixOverrides=",">
<if test="item.testEnvironment != null">test_environment = #{item.testEnvironment},</if>
<if test="item.testProgress != null">test_progress = #{item.testProgress},</if>
<if test="item.projectUserInfo != null">project_user_info = #{item.projectUserInfo},</if>
<if test="item.startDate != null">start_date = #{item.startDate},</if>
<if test="item.planFinishTime != null">plan_finish_time = #{item.planFinishTime},</if>
<if test="item.realFinishTime != null">real_finish_time = #{item.realFinishTime},</if>
</trim>
<update id="updateBatchProjectPocInfoDetail">
<foreach collection="list" item="item" close=";">
update project_poc_info_detail
set test_progress = #{item.testProgress}
where id = #{item.id}
</foreach>
</update>
@ -119,5 +170,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{id}
</foreach>
</delete>
<delete id="deleteProjectPocInfoDetailByPocIds" parameterType="String">
delete from project_poc_info_detail where poc_id in
<foreach item="pocId" collection="array" open="(" separator="," close=")">
#{pocId}
</foreach>
</delete>
<delete id="deleteProjectPocInfoDetailByPocId" parameterType="Long">
delete from project_poc_info_detail where poc_id = #{pocId}
</delete>
<insert id="batchProjectPocInfoDetail">
insert into project_poc_info_detail( id, poc_id, test_progress, create_by, create_time) values
<foreach item="item" index="index" collection="list" separator=",">
( #{item.id}, #{item.pocId}, #{item.testProgress}, #{item.createBy}, #{item.createTime})
</foreach>
</insert>
</mapper>