Merge remote-tracking branch 'origin/dev_third_stage' into dev_third_stage

This commit is contained in:
wangzhijiang
2022-07-13 16:57:09 +08:00
9 changed files with 304 additions and 91 deletions
@@ -911,6 +911,10 @@ public class ParamsCollectManifestEOServiceImpl extends ServiceImpl<ParamsCollec
@Override
public List<Map<String, String>> getLoginUserTypes(ParamsCollectManifestVO paramsCollectManifestVO, String cut) {
if (StringUtils.isEmpty(paramsCollectManifestVO.getProjectId()) || StringUtils.isEmpty(paramsCollectManifestVO.getParamsManifestId())) {
throw new JeroBootException("参数不能为空!");
}
String projectId = paramsCollectManifestVO.getProjectId();
String paramsManifestId = paramsCollectManifestVO.getParamsManifestId();
@@ -1055,6 +1059,7 @@ public class ParamsCollectManifestEOServiceImpl extends ServiceImpl<ParamsCollec
LambdaQueryWrapper<ParamsCollectManifestEO> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ParamsCollectManifestEO::getParamsManifestId, paramsManifestId)
.notIn(ParamsCollectManifestEO::getControlType, ControlTypeEnum.Title.getValue())
.orderByDesc(ParamsCollectManifestEO::getUpdateTime); // 按修改时间降序
List<ParamsCollectManifestEO> list = list(queryWrapper);
int collectFinishNumber = (int) list.stream().filter(e->CollectManifestStateEnum.SYNC_REPORT.getValue().equals(e.getState())).count();
@@ -23,6 +23,7 @@ import com.jero.modules.cert.collect.vo.ParamsManifestHistoryVO;
import com.jero.modules.cert.report.service.IParamsReportEOService;
import com.jero.modules.cert.template.entity.ParamsInfoPublishEO;
import com.jero.modules.cert.template.entity.ParamsTemplateEO;
import com.jero.modules.cert.template.enums.ControlTypeEnum;
import com.jero.modules.cert.template.service.IParamsInfoPublishEOService;
import com.jero.modules.cert.template.service.IParamsTemplateEOService;
import com.jero.modules.project.entity.ProjectRelatedPersonnel;
@@ -126,14 +127,16 @@ public class ParamsManifestEOServiceImpl extends ServiceImpl<ParamsManifestEOMap
target.setChangeFlag(CollectManifestChangeFlagEnum.CHANGE_BEFORE.getValue()); // 设置变更标识
// 根据负责领域处理工程接口人(零个,一个,多个): 领域中仅有一个人时,添加该字段
ProjectRelatedPersonnel projectRelatedPersonnel = projectRelatedPersonnelService.queryByProjectIdAndDutyTerritory(paramsManifestEO.getProjectId(), source.getDutyTerritory());
if (ObjectUtil.isNotEmpty(projectRelatedPersonnel)) {
String sdtId = projectRelatedPersonnel.getEngineeringInterfacePerson();
if (StringUtils.isNotBlank(sdtId) && !sdtId.contains(",")) { // 领域中仅有一个人时,添加该字段
SysUser sysUser = sysUserService.getById(sdtId);
if (ObjectUtil.isNotEmpty(sysUser)) {
target.setSdt(sysUser.getUsername());
if (!ControlTypeEnum.Title.getValue().equals(source.getControlType())) {
// 根据负责领域处理工程接口人(零个,一个,多个): 领域中仅有一个人时,添加该字段
ProjectRelatedPersonnel projectRelatedPersonnel = projectRelatedPersonnelService.queryByProjectIdAndDutyTerritory(paramsManifestEO.getProjectId(), source.getDutyTerritory());
if (ObjectUtil.isNotEmpty(projectRelatedPersonnel)) {
String sdtId = projectRelatedPersonnel.getEngineeringInterfacePerson();
if (StringUtils.isNotBlank(sdtId) && !sdtId.contains(",")) { // 领域中仅有一个人时,添加该字段
SysUser sysUser = sysUserService.getById(sdtId);
if (ObjectUtil.isNotEmpty(sysUser)) {
target.setSdt(sysUser.getUsername());
}
}
}
}
@@ -411,6 +411,17 @@ public class ParamsReportDetailEOServiceImpl extends ServiceImpl<ParamsReportDet
}
paramsConfigDataVOList.add(fileConfigDataVO);
} else if (ControlTypeEnum.Title.getValue().equals(controlType)) {
ParamsConfigDataVO configDataVO = new ParamsConfigDataVO();
configDataVO.setType(ConfigDataTypeEnum.TEXT.getValue());
configDataVO.setIsMust(paramsCollectManifestEO.getIsMust());
configDataVO.setIsLock(paramsConfigEO.getIsLock());
if (StringUtils.isNotEmpty(paramsCollectManifestEO.getTitleDefaultValue())) {
configDataVO.setDataValue(paramsCollectManifestEO.getTitleDefaultValue());
}
paramsConfigDataVOList.add(configDataVO);
}
return paramsConfigDataVOList;
}
+4
View File
@@ -1127,4 +1127,8 @@ module.exports = {
fileExport:'File export',
feedbackTime:'Feedback time',
regulatoryTechnologyAssessmentProcess:'Regulatory technology assessment process',
feedbackEvaluation:'Feedback evaluation',
clauseEvaluation:'Clause evaluation',
standardDocuments:'Standard documents',
pleaseCompleteTheEvaluationMethodorEvaluator:'Please complete the evaluation method or evaluator in the list',
}
+4
View File
@@ -1131,4 +1131,8 @@ module.exports = {
fileExport:'文件导出',
feedbackTime:'反馈时间',
regulatoryTechnologyAssessmentProcess:'法规技术评估流程',
feedbackEvaluation:'反馈评估',
clauseEvaluation:'条款评估',
standardDocuments:'标准文件',
pleaseCompleteTheEvaluationMethodorEvaluator:'Please complete the evaluation method or evaluator in the list',
}
@@ -1,11 +1,30 @@
<template>
<div class="box" style="margin-bottom: 20px">
<div style="margin-bottom: 10px;text-align: right">
<div @click="handleModule" class="operator-text">
<a-icon type="download"/>
{{$t('templateDownload')}}
</div>
<div class="operator-text">
<ImportFile :url="url" :isTrue="true" :accept="'.xls'"
@getList="getPersonnelList"/>
</div>
</div>
<a-table
:columns="columns"
:scroll="{x: '100%'}"
:data-source="dataList"
:pagination="false"
:loading="loading">
<div slot="clauseContent" slot-scope="text,result">
<a-tooltip placement="topLeft">
<template slot="title">
<span v-html="text"></span>
</template>
<div class="clauseContent-text" v-html="text"></div>
</a-tooltip>
</div>
<span slot="evaluationMethod" slot-scope="text,result">
<a-tree-select
tree-node-filter-prop="title"
@@ -17,12 +36,12 @@
:tree-data="gatherResultList"
tree-checkable
:placeholder="$t('PleaseSelect')+$t('evaluationMethod')"
/>
/>
</span>
<span slot="Assessor" slot-scope="text,result">
<span slot="Assessor" slot-scope="text,result,index">
<PersonnelSelection class="box-input"
:personneQuery="result"
:query="{db_field_name:'evaluatorIds',db_field_txt:$t('Assessor')}"
:query="{db_field_name:'evaluatorIds',db_field_txt:$t('Assessor'),subscript:index}"
:isInput="true"
@change="PersonnelSelectionChange"
v-model="result.evaluatorIdsName"/>
@@ -36,32 +55,40 @@
<script>
import PersonnelSelection from '@/components/PersonnelSelection/index'
import ImportFile from '@/components/ImportFile/index'
import { getAction, postAction, deleteAction, downloadFile } from '@/api/manage'
export default {
name: 'TermInformation',
components:{
PersonnelSelection
components: {
PersonnelSelection,
ImportFile
},
props:['gatherResultList'],
props: ['gatherResultList'],
data() {
return {
url: {
importZipUrl: '/lawsTechnologyEvaluation/lawsTechnologyEvaluationEO/importItemExcel'
},
columns: [
{
title: this.$t('clauseNo'),
dataIndex: 'items_num',
dataIndex: 'itemNum',
align: 'center',
ellipsis: true
},
{
title: this.$t('clauseName'),
dataIndex: 'items_name',
dataIndex: 'itemName',
align: 'center',
ellipsis: true
},
{
title: this.$t('clauseContent'),
dataIndex: 'iterms_conditions',
dataIndex: 'itemContent',
align: 'center',
ellipsis: true
ellipsis: true,
scopedSlots: { customRender: 'clauseContent' }
},
{
title: this.$t('evaluationMethod'),
@@ -77,26 +104,69 @@
},
{
title: this.$t('operation'),
dataIndex: 'Assessor',
align: 'center',
width: 100,
scopedSlots: { customRender: 'operation' }
}
],
dataList: [{}],
dataList: [],
loading: false
}
},
mounted() {
},
methods: {
deleteData() {
deleteData(item) {
this.dataList = this.dataList.filter(res => {
return res.itemId != item.itemId
})
this.$emit('TermInformationRefForm', item)
},
PersonnelSelectionChange(value, id, index) {
this.dataList[index][value] = id
this.dataList = [...this.dataList]
},
getData(value) {
this.dataList = []
if (value && value.length > 0) {
value.forEach(res => {
this.dataList.push({
itemId: res.id,
itemNum: res.items_num,
itemName: res.items_name,
itemContent: res.iterms_conditions
})
})
}
this.dataList = [...this.dataList]
},
getPersonnelList() {
},
PersonnelSelectionChange(value, id) {
this.formInline[value] = id
this.formInline = { ...this.formInline }
getUUID() {
var str = []
var Chars = '0123456789abcdefghijklmnopqrstuvwxyz'
for (var i = 0; i < 36; i++) {
str[i] = Chars.substr(Math.floor(Math.random() * 16), 1)
}
str[0] = str[8] = str[13] = str[18] = str[23] = '-'
return str.join('')
},
submitData(callback) {
let dataList = JSON.parse(JSON.stringify(this.dataList))
for (let i = 0; i < dataList.length; i++) {
dataList[i].evaluationMethods = dataList[i].evaluationMethods.join(',')
dataList[i].lawsTechnologyEvaluationId = this.getUUID
if (!dataList[i].evaluationMethods || !dataList[i].evaluatorIds) {
this.$message.warning(this.$t('pleaseCompleteTheEvaluationMethodorEvaluator'))
return
}
}
callback && callback(dataList)
},
handleModule() {
downloadFile('/lawsTechnologyEvaluation/lawsTechnologyEvaluationEO/exportItemTemplate', this.$t('clauseEvaluation') + '.xls', {})
}
}
}
</script>
@@ -107,4 +177,17 @@
width: 70%;
height: 38px;
}
.clauseContent-text {
width: 100%;
overflow: hidden;
display: -webkit-box;
text-overflow: ellipsis;
/*! autoprefixer: off */
-webkit-box-orient: vertical;
-webkit-line-clamp: 1;
/*! autoprefixer: on;*/
text-justify: inter-ideograph;
word-break: break-all
}
</style>
@@ -127,6 +127,7 @@
tree-node-filter-prop="title"
v-model="formInline.evaluationMethods"
:maxTagCount="1"
@change="evaluationMethodsChange"
:getPopupContainer="triggerNode=> triggerNode.parentNode"
class="box-input"
style="width: 100%"
@@ -155,7 +156,13 @@
</a-col>
</a-row>
</a-form-model>
<TermInformation :gatherResultList="gatherResultList" v-if="isTrue"/>
<TermInformation
ref="TermInformationRef"
@TermInformationRefForm="TermInformationRefForm"
:gatherResultList="gatherResultList"
v-if="isTrue"/>
<footerProcess
@submit="submit"
:isSubmit="true"
@@ -211,6 +218,7 @@
pageSize: 10,
pageNo: 1,
formInline: {},
standardDecomposition: [],
gatherResultList: [],
rules: {
endTime: [
@@ -358,16 +366,20 @@
technologyTerritory: content[0].technology_territory_id
})
}
this.standardDecomposition = content
},
standardDecompositionDocumentClick() {
if (this.selectedRowKeysRecord && this.selectedRowKeysRecord.length > 0) {
this.$refs.standardDecompositionSheetRef.getData(JSON.parse(JSON.stringify(this.selectedRowKeysRecord[0])))
if (this.standardDecomposition && this.standardDecomposition.length > 0) {
this.$refs.standardDecompositionSheetRef.getData(JSON.parse(JSON.stringify(this.standardDecomposition[0])))
} else {
this.$message.warning(this.$t('pleaseSelectStandardFirst'))
}
},
standardDecompositionSheetForm(value) {
this.$refs.TermInformationRef.getData(JSON.parse(JSON.stringify(value)))
},
TermInformationRefForm(value) {
this.$refs.standardDecompositionSheetRef.getRowList(JSON.parse(JSON.stringify(value)))
},
clickButtonToUpload(item) {
this.$refs.uploadFile.perentHandleFunc()
@@ -397,6 +409,10 @@
this.formInline[value] = id
this.formInline = { ...this.formInline }
},
evaluationMethodsChange(key, name) {
this.formInline.evaluationMethods = []
this.formInline.evaluationMethods = name
},
dateChange(item) {
this.formInline[item] = this.formInline[item] ? moment(this.formInline[item]).format('YYYY-MM-DD') : ''
},
@@ -415,37 +431,56 @@
if (this.selectedRowKeysRecord && this.selectedRowKeysRecord.length == 0) {
this.$message.warning(this.$t('pleaseSelectStandard'))
} else {
this.JLoading = true
let value = Object.assign(this.formInline, this.selectedRowKeysRecord[0])
if (this.isTrue) {
value.evaluationType = 'Item evaluation'
if (this.$refs.TermInformationRef) {
this.$refs.TermInformationRef.submitData((dataList) => {
this.submitData(startTime, dataList)
})
} else {
value.evaluationType = 'Feedback evaluation'
this.submitData(startTime)
}
value.startTime = startTime
value.flowStatus = 'Underway'
value.taskAffirmDueDate = value.endTime
value.lawsTechnologyEvaluationId = this.getUUID()
value.regulationOwnerId = this.userInfo().id
Object.keys(value).forEach(res => {
if (value[res] && value[res] instanceof Array) {
value[res] = value[res].join(',')
}
if (value[res] && value[res] instanceof String) {
value[res] = value[res].replace(/\"/g, '“')
value[res] = value[res].replace(/\'/g, '')
}
})
this.startProcess(value)
}
}
})
},
startProcess(value) {
let query = {
type: 6,
...value,
msg: JSON.stringify(value.evaluators).replace(/\"/g, '\'')
submitData(startTime, dataList) {
this.JLoading = true
let value = Object.assign(this.formInline, this.selectedRowKeysRecord[0])
if (this.isTrue) {
value.evaluationType = 'Item evaluation'
} else {
value.evaluationType = 'Feedback evaluation'
}
value.startTime = startTime
value.flowStatus = 'Underway'
value.taskAffirmDueDate = value.endTime
value.lawsTechnologyEvaluationId = this.getUUID()
value.regulationOwnerId = this.userInfo().id
value.regulationOwnerName = this.userInfo().username
Object.keys(value).forEach(res => {
if (value[res] && value[res] instanceof Array) {
value[res] = value[res].join(',')
}
if (value[res] && value[res] instanceof String) {
value[res] = value[res].replace(/\"/g, '“')
value[res] = value[res].replace(/\'/g, '')
}
})
this.startProcess(value, dataList)
},
startProcess(value, dataList) {
let query = {}
if (this.isTrue) {
query = {
type: 6,
...value,
msg: JSON.stringify({ itemList: dataList }).replace(/\"/g, '\'')
}
} else {
query = {
type: 6,
...value,
msg: JSON.stringify({ evaluators: this.$refs.TermInformationRef.dataList }).replace(/\"/g, '\'')
}
}
postAction('/workFlow/startProcess', query).then((res) => {
if (res.success) {
@@ -2,7 +2,7 @@
<a-drawer
:title="$t('StandardBreakdown')"
:maskClosable="false"
:width="1000"
:width="1200"
placement="right"
:closable="true"
@close="handleCancel"
@@ -14,37 +14,55 @@
<a-row :gutter="24">
<a-col :md="12" :sm="8">
<div class="box-title-text">
<div class="title-text" :title="$t('standard')">
<span>{{$t('standard')}}</span>
<div class="title-text" :title="$t('standardDocuments')">
<span>{{$t('standardDocuments')}}</span>
</div>
<a-input class="box-input" :placeholder="$t('PleaseEnter')+$t('standard')"
v-model="queryParam.serial_number"></a-input>
<a-select :placeholder="$t('PleaseSelect')+$t('standardDocuments')"
class="box-input"
@change="standardDocumentsChange"
:getPopupContainer="triggerNode=> triggerNode.parentNode"
v-model="queryParam.info_id">
<a-select-option v-for="(item, key) in sarFileSplitInfoList"
:key="key"
:value="item.id">
<span style="display: inline-block;width: 100%" :title=" item.fileName ">
{{ item.fileName }}
</span>
</a-select-option>
</a-select>
</div>
</a-col>
<span style="float: right;overflow: hidden;margin-top: 4px" class="table-page-search-submitButtons">
<a-col :md="12" :sm="24">
<div @click="handleModule" class="operator-text">
<a-icon type="download"/>
{{$t('templateDownload')}}
</div>
<div class="operator-text">
<ImportFile :url="url" :projectId="$route.query.id" :isTrue="true" :accept="'.xls'"
@getList="getPersonnelList"/>
</div>
</a-col>
</span>
<!-- <span style="float: right;overflow: hidden;margin-top: 4px" class="table-page-search-submitButtons">-->
<!-- <a-col :md="12" :sm="24">-->
<!-- <div @click="handleModule" class="operator-text">-->
<!-- <a-icon type="download"/>-->
<!-- {{$t('templateDownload')}}-->
<!-- </div>-->
<!-- <div class="operator-text">-->
<!-- <ImportFile :url="url" :projectId="$route.query.id" :isTrue="true" :accept="'.xls'"-->
<!-- @getList="getPersonnelList"/>-->
<!-- </div>-->
<!-- </a-col>-->
<!-- </span>-->
</a-row>
</a-form>
</div>
<a-table
:columns="columns"
rowKey="id"
:scroll="{x: 1200}"
:scroll="{x: '100%'}"
:data-source="dataList"
:pagination="false"
:row-selection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"
:loading="loading">
<div slot="clauseContent" slot-scope="text,result">
<a-tooltip placement="topLeft">
<template slot="title">
<span v-html="text"></span>
</template>
<div class="clauseContent-text" v-html="text"></div>
</a-tooltip>
</div>
</a-table>
<div class="page" v-if="dataList.length > 0">
<a-pagination
@@ -82,6 +100,7 @@
queryParam: {},
confirmLoading: false,
selectedRowKeys: [],
sarFileSplitInfoList: [],
url: {
list: '/split/sarFileSplitItems/getSplitItemsByPage'
},
@@ -90,30 +109,35 @@
title: this.$t('clauseNo'),
dataIndex: 'items_num',
align: 'center',
width: 180,
ellipsis: true
},
{
title: this.$t('clauseName'),
dataIndex: 'items_name',
align: 'center',
width: 180,
ellipsis: true
},
{
title: this.$t('clauseContent'),
dataIndex: 'iterms_conditions',
align: 'center',
ellipsis: true
ellipsis: true,
scopedSlots: { customRender: 'clauseContent' }
},
{
title: this.$t('technicalField'),
dataIndex: 'technology_territory',
align: 'center',
width: 180,
ellipsis: true
},
{
title: this.$t('informationCategory'),
dataIndex: 'information_category',
align: 'center',
width: 180,
ellipsis: true
}
],
@@ -125,18 +149,40 @@
total: 0,
standData: {},
fieldList: [],
queryConditionVOList: []
queryConditionVOList: [],
info_id: '',
selectedRowKeysData: []
}
},
methods: {
handleModule() {
},
getData(row) {
this.standData = row
this.visible = true
standardDocumentsChange(value) {
this.replacePage()
},
getData(row) {
this.total = 0
this.dataList = []
this.standData = row
this.sarFileSplitInfoList = this.standData.sarFileSplitInfoList || []
this.sarFileSplitInfoList = [...this.sarFileSplitInfoList]
this.queryParam.info_id = this.sarFileSplitInfoList && this.sarFileSplitInfoList.length > 0 ? this.sarFileSplitInfoList[0].id : ''
this.visible = true
if (this.queryParam.info_id) {
this.replacePage()
}
},
getRowList(value) {
if (value && value.itemId) {
this.selectedRowKeys = this.selectedRowKeys.filter(res=>{
return value.itemId != res
})
this.selectedRowKeysData = this.selectedRowKeysData.filter(res=>{
return value.itemId != res.id
})
}
},
searchQuery() {
this.pageNo = 1
this.replacePage()
@@ -144,6 +190,7 @@
searchReset() {
this.pageNo = 1
this.queryParam = {}
this.queryParam.info_id = this.sarFileSplitInfoList && this.sarFileSplitInfoList.length > 0 ? this.sarFileSplitInfoList[0].id : ''
this.replacePage()
},
onChange(page, pageSize) {
@@ -160,12 +207,13 @@
this.replacePage()
},
replacePage() {
let pageNo = JSON.parse(JSON.stringify(this.pageNo))
let pageSize = JSON.parse(JSON.stringify(this.pageSize))
let query = {
pageNo: this.pageNo,
pageSize: this.pageSize,
info_id: this.standData.id,
menu_id:'',
...this.queryParam
pageNo: pageNo + '',
pageSize: pageSize + '',
info_id: this.queryParam.info_id,
menu_id: ''
}
this.loading = true
postAction(this.url.list, query).then((res) => {
@@ -184,10 +232,16 @@
this.visible = false
},
handleSubmit() {
if (this.selectedRowKeys && this.selectedRowKeys.length > 0) {
this.$emit('standardDecompositionSheetForm', this.selectedRowKeysData)
this.visible = false
} else {
this.$message.warning(this.$t('PleaseSelectData'))
}
},
onSelectChange() {
onSelectChange(value, record) {
this.selectedRowKeys = value
this.selectedRowKeysData = record
}
}
}
@@ -244,4 +298,17 @@
.box-button {
height: 38px;
}
.clauseContent-text {
width: 100%;
overflow: hidden;
display: -webkit-box;
text-overflow: ellipsis;
/*! autoprefixer: off */
-webkit-box-orient: vertical;
-webkit-line-clamp: 1;
/*! autoprefixer: on;*/
text-justify: inter-ideograph;
word-break: break-all
}
</style>
@@ -71,7 +71,7 @@
standardContentList: [
{
title: this.$t('standard'),
value: 'serial_number'
value: 'serialNumber'
},
{
title: this.$t('title'),
@@ -91,7 +91,7 @@
},
{
title: this.$t('RelevantMaterials'),
value: 'RelevantMaterials',
value: 'relatedDataFileId',
type: 2
},
{
@@ -106,10 +106,10 @@
}
},
mounted() {
this.isDisplay = true
// this.queryTaskDetailByTask(() => {
// this.lawsOpinionAssessmentResult()
// })
this.isDisplay = false
this.queryTaskDetailByTask(() => {
this.lawsOpinionAssessmentResult()
})
},
methods: {
...mapGetters(['userInfo']),
@@ -123,6 +123,7 @@
this.queryProject = res || {}
callback && callback()
}
this.queryProject.evaluationTypeName = this.queryProject.evaluationType == 'Feedback evaluation' ? this.$t('feedbackEvaluation') :this.$t('clauseEvaluation')
})
},
lawsOpinionAssessmentResult() {