通知、报修、投诉与建议功能修改
main
zxf 3 months ago
parent 81ca3ebd2c
commit 6ae7f187c5

@ -96,17 +96,17 @@ export function pmcanteendemandBatchSaveApi(list) {
})
}
/**
* pmcanteendemand批量编辑
* @param list
*/
export function pmcanteendemandBatchUpdateApi(list) {
return request({
url: `autogencode/pmcanteendemand/batchUpdate`,
method: 'POST',
data: list
})
}
// /**
// * pmcanteendemand批量编辑
// * @param list
// */
// export function pmcanteendemandBatchUpdateApi(list) {
// return request({
// url: `autogencode/pmcanteendemand/batchUpdate`,
// method: 'POST',
// data: list
// })
// }
/**

@ -48,6 +48,18 @@ export function pmdailymenuDeleteApi(ids) {
})
}
/**
* pmdailymenu批量创建
* @param menus
*/
export function pmdailymenuBatchCreateApi(menus) {
return request({
url: `autogencode/pmdailymenu/batchSave`,
method: 'POST',
data: menus
})
}
/**
* pmdailymenu列表

@ -63,7 +63,7 @@
prop="ownerName"
header-align="center"
align="center"
label="业主/租户">
label="名称">
</el-table-column>
<el-table-column
prop="houseName"
@ -137,15 +137,15 @@
align="center"
label="联系方式">
</el-table-column>
<el-table-column
prop="houseOwnerId"
header-align="center"
align="center"
label="房屋业主名称">
<template slot-scope="scope">
{{ getOwnerName(scope.row.houseOwnerId) }}
</template>
</el-table-column>
<!-- <el-table-column-->
<!-- prop="houseOwnerId"-->
<!-- header-align="center"-->
<!-- align="center"-->
<!-- label="房屋所有人名称">-->
<!-- <template slot-scope="scope">-->
<!-- {{ getOwnerName(scope.row.houseOwnerId) }}-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column
prop="complainedHouseName"
header-align="center"
@ -156,7 +156,7 @@
prop="ownerDeptName"
header-align="center"
align="center"
label="业主所属部门">
label="所属部门">
</el-table-column>
<el-table-column
@ -167,6 +167,7 @@
label="操作">
<template slot-scope="scope">
<el-button type="text" size="small" @click="addOrUpdateHandle(scope.row.id)">{{ '' }}</el-button>
<el-button v-if="scope.row.status !== '3'" type="text" size="small" @click="handleComplaint(scope.row.id)">{{ '' }}</el-button>
<el-button v-hasPermi="['autogencode:pmcomplaintsuggestion:delete']" type="text" size="small" @click="deleteHandle(scope.row.id)" style="color: #f56c6c;"></el-button>
</template>
</el-table-column>
@ -364,6 +365,25 @@
})
})
},
// /3
handleComplaint (id) {
this.$confirm('确定要将该投诉/建议标记为已处理吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
// API
api.pmcomplaintsuggestionUpdateApi({
id: id,
status: '3'
}).then(res => {
this.$message.success('处理成功')
this.getDataList()
}).catch(() => {
this.$message.error('处理失败')
})
}).catch(() => {})
},
}
}
</script>

@ -7,7 +7,7 @@
width="80%">
<!-- 新增和修改表单 -->
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataSubmit()" label-width="100px">
<!-- 第一行业主类型业主/租户名称房屋名称 -->
<!-- 第一行业主类型名称名称房屋名称 -->
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="业主类型" prop="ownerType">
@ -23,7 +23,7 @@
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item :label="dataForm.ownerType === '1' ? '业主/租户' : '业主/租户'" prop="ownerId">
<el-form-item :label="dataForm.ownerType === '1' ? '名称' : '名称'" prop="ownerId">
<el-select v-if="dataForm.ownerType === '1'" v-model="dataForm.ownerId" placeholder="请选择业主" clearable
style="width: 100%" @change="handleOwnerChange" filterable>
<el-option
@ -60,7 +60,7 @@
</el-col>
</el-row>
<!-- 第二行被投诉房屋类型业主所属部门 -->
<!-- 第二行被投诉房屋类型所属部门 -->
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="被投诉房屋" prop="complainedHouseId">
@ -87,8 +87,8 @@
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="业主所属部门" prop="ownerCompany">
<el-input v-model="dataForm.ownerCompanyName" placeholder="业主所属部门" readonly></el-input>
<el-form-item label="所属部门" prop="ownerCompany">
<el-input v-model="dataForm.ownerCompanyName" placeholder="所属部门" readonly></el-input>
</el-form-item>
</el-col>
</el-row>
@ -175,13 +175,26 @@
<el-input v-model="dataForm.houseOwnerId" placeholder="房屋业主id" readonly></el-input>
</el-form-item>
<!-- 附件 -->
<!-- 问题凭证 -->
<el-row :gutter="20">
<el-col :span="24">
<el-form-item label="附件" prop="files">
<el-form-item label="问题凭证" prop="beforeProcessFiles" :disabled="!canUploadBeforeProcess">
<FileUploadVO
:value="complaintFiles"
@input="updateComplaintFiles"
:value="beforeProcessFiles"
@input="updateBeforeProcessFiles"
:disabled="!canUploadBeforeProcess"
></FileUploadVO>
</el-form-item>
</el-col>
</el-row>
<!-- 处理凭证 -->
<el-row :gutter="20">
<el-col :span="24">
<el-form-item label="处理凭证" prop="afterProcessFiles" :disabled="!canUploadAfterProcess" v-if="showAfterProcess">
<FileUploadVO
:value="afterProcessFiles"
@input="updateAfterProcessFiles"
:disabled="!canUploadAfterProcess"
></FileUploadVO>
</el-form-item>
</el-col>
@ -218,12 +231,16 @@
tenantList: [],
houseList: [],
adminList: [], //
ownerHouseList: [], // /
complaintFiles: [], //
ownerHouseList: [], //
beforeProcessFiles: [], //
afterProcessFiles: [], //
canUploadBeforeProcess: true, //
canUploadAfterProcess: false, //
showAfterProcess: false, //
dataForm: {
id: 0,
csType: '' ,
status: '0' ,
status: '1' ,
csContent: '' ,
submitChannel: '' ,
submitTime: '' ,
@ -238,7 +255,8 @@
complainedHouseId: '',
ownerCompany: '',
ownerCompanyName: '',
files: []
beforeProcessFiles: [], //
afterProcessFiles: [] //
},
dataRule: {
csType: [
@ -300,7 +318,7 @@
//
handleOwnerTypeChange(ownerType) {
// /IDID
// IDID
this.dataForm.ownerId = ''
this.dataForm.houseId = ''
this.dataForm.houseOwnerId = ''
@ -322,7 +340,7 @@
//
this.dataForm.houseId = ''
this.dataForm.houseOwnerId = ''
//
//
const owner = this.ownerList.find(item => item.id === ownerId)
if (owner && owner.deptId) {
this.dataForm.ownerCompany = owner.deptId
@ -416,13 +434,59 @@
this.dataForm.houseOwnerId = ''
}
},
//
updateComplaintFiles(files) {
this.complaintFiles = files
// dataForm.files
//
updateBeforeProcessFiles(files) {
this.beforeProcessFiles = files
// dataForm.beforeProcessFiles
if (files && files.length > 0) {
// FileUploadVOSystemAttachment
this.dataForm.beforeProcessFiles = files.map(file => {
//
let attDir = file.attDir || file.attachFileUrl || ''
// /file/public/
if (attDir.startsWith('/file/public/')) {
attDir = attDir.replace('/file/public/', '')
} else if (attDir.startsWith('/file/')) {
attDir = attDir.replace('/file/', '')
}
return {
// SystemAttachment
attId: file.id || file.attId || '', //
name: file.name || file.oldName || '', //
attDir: attDir, //
attSize: file.attSize || '', //
attType: 'before_process', //
//
fileName: file.name || file.oldName || '',
filePath: attDir,
url: attDir,
createTime: null,
createdBy: null,
createTimeStr: null,
delFlag: '0',
updateBy: null,
updateTime: null,
i18nCode: '',
i18nLanguage: '',
originalFileName: file.name || file.oldName || '',
position: 0,
remark: file.remark || '',
sort: 0,
status: ''
}
})
} else {
this.dataForm.beforeProcessFiles = []
}
},
//
updateAfterProcessFiles(files) {
this.afterProcessFiles = files
// dataForm.afterProcessFiles
if (files && files.length > 0) {
// FileUploadVOSystemAttachment
this.dataForm.files = files.map(file => {
this.dataForm.afterProcessFiles = files.map(file => {
//
let attDir = file.attDir || file.attachFileUrl || ''
// /file/public/
@ -438,7 +502,7 @@
name: file.name || file.oldName || '', //
attDir: attDir, //
attSize: file.attSize || '', //
attType: file.attType || '', //
attType: 'after_process', //
//
fileName: file.name || file.oldName || '',
filePath: attDir,
@ -459,13 +523,14 @@
}
})
} else {
this.dataForm.files = []
this.dataForm.afterProcessFiles = []
}
},
init (id) { //
this.dataForm.id = id || 0
this.visible = true
this.complaintFiles = [] //
this.beforeProcessFiles = [] //
this.afterProcessFiles = [] //
this.$nextTick(function() {
this.$refs['dataForm'].resetFields()
if (this.dataForm.id) {
@ -479,9 +544,11 @@
data.handlerDate = new Date(data.handlerDate)
}
this.dataForm = data;
//
if (data.files && data.files.length > 0) {
this.complaintFiles = data.files.map(file => {
//
this.setFileUploadPermissions(data.status);
//
if (data.beforeProcessFiles && data.beforeProcessFiles.length > 0) {
this.beforeProcessFiles = data.beforeProcessFiles.map(file => {
return {
id: file.attId,
attId: file.attId,
@ -494,7 +561,24 @@
}
})
} else {
this.complaintFiles = []
this.beforeProcessFiles = []
}
//
if (data.afterProcessFiles && data.afterProcessFiles.length > 0) {
this.afterProcessFiles = data.afterProcessFiles.map(file => {
return {
id: file.attId,
attId: file.attId,
name: file.name || file.fileName || file.originalFileName,
oldName: file.name || file.fileName || file.originalFileName,
attDir: file.attDir || file.filePath || file.url,
attachFileUrl: file.attDir || file.filePath || file.url,
attSize: file.attSize,
attType: file.attType
}
})
} else {
this.afterProcessFiles = []
}
// ID
const houseId = data.houseId;
@ -508,9 +592,36 @@
});
});
}.bind(this))
} else {
//
this.setFileUploadPermissions('1'); //
}
}.bind(this))
},
//
setFileUploadPermissions(status) {
switch (status) {
case '1': //
this.canUploadBeforeProcess = true;
this.canUploadAfterProcess = false;
this.showAfterProcess = false;
break;
case '2': //
this.canUploadBeforeProcess = false;
this.canUploadAfterProcess = true;
this.showAfterProcess = true;
break;
case '3': //
this.canUploadBeforeProcess = false;
this.canUploadAfterProcess = true;
this.showAfterProcess = true;
break;
default:
this.canUploadBeforeProcess = true;
this.canUploadAfterProcess = false;
this.showAfterProcess = false;
}
},
//
dataSubmit () {
this.$refs['dataForm'].validate((valid) => {

@ -1,40 +1,40 @@
<template>
<!-- 基于 Element UI 新增和修改弹窗 -->
<el-dialog
:title="!dataForm.id ? '添加' : '修改'"
:close-on-click-modal="false"
:visible.sync="visible">
:title="!dataForm.id ? '添加' : '修改'"
:close-on-click-modal="false"
:visible.sync="visible">
<!-- 新增和修改表单 -->
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataSubmit()" label-width="80px">
<el-form-item label="日期" prop="menuDate">
<el-date-picker v-model="dataForm.menuDate" type="date" value-format="yyyy-MM-dd" placeholder="请选择日期" style="width: 100%"></el-date-picker>
</el-form-item>
<el-form-item label="食堂名称" prop="canteenName">
<el-input v-model="dataForm.canteenName" placeholder="食堂名称"></el-input>
</el-form-item>
<el-form-item label="餐别" prop="mealType">
<el-select v-model="dataForm.mealType" placeholder="请选择餐别" style="width: 100%">
<el-option
v-for="dict in dict.type.meal_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select v-model="dataForm.status" placeholder="请选择状态" style="width: 100%">
<el-option
v-for="dict in dict.type.menu_status"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="dataForm.remark" type="textarea" placeholder="备注" rows="4"></el-input>
</el-form-item>
<el-form-item label="日期" prop="menuDate">
<el-date-picker v-model="dataForm.menuDate" type="date" value-format="yyyy-MM-dd" placeholder="请选择日期" style="width: 100%"></el-date-picker>
</el-form-item>
<el-form-item label="食堂名称" prop="canteenName">
<el-input v-model="dataForm.canteenName" placeholder="食堂名称"></el-input>
</el-form-item>
<el-form-item label="餐别" prop="mealType">
<el-select v-model="dataForm.mealType" placeholder="请选择餐别" style="width: 100%">
<el-option
v-for="dict in dict.type.meal_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select v-model="dataForm.status" placeholder="请选择状态" style="width: 100%">
<el-option
v-for="dict in dict.type.menu_status"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="dataForm.remark" type="textarea" placeholder="备注" rows="4"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="visible = false">取消</el-button>
@ -44,73 +44,73 @@
</template>
<script>
import * as api from '@/api/pmdailymenu.js'
export default {
dicts: ['meal_type', 'menu_status'],
data () {
return {
visible: false,
dataForm: {
id: 0,
menuDate: '' ,
canteenName: '' ,
mealType: '' ,
status: '' ,
remark: '' ,
},
dataRule: {
menuDate: [
{ required: true, message: '日期 为必填项', trigger: 'blur' }
],
canteenName: [
{ required: true, message: '食堂名称 为必填项', trigger: 'blur' }
],
mealType: [
{ required: true, message: '餐别 为必填项', trigger: 'blur' }
],
status: [
{ required: true, message: '状态 为必填项', trigger: 'blur' }
],
import * as api from '@/api/pmdailymenu.js'
export default {
dicts: ['meal_type', 'menu_status'],
data () {
return {
visible: false,
dataForm: {
id: 0,
menuDate: '' ,
canteenName: '' ,
mealType: '' ,
status: '' ,
remark: '' ,
},
dataRule: {
menuDate: [
{ required: true, message: '日期 为必填项', trigger: 'blur' }
],
canteenName: [
{ required: true, message: '食堂名称 为必填项', trigger: 'blur' }
],
mealType: [
{ required: true, message: '餐别 为必填项', trigger: 'blur' }
],
status: [
{ required: true, message: '状态 为必填项', trigger: 'blur' }
],
}
}
}
},
methods: {
init (id) { //
this.dataForm.id = id || 0
this.visible = true
this.$nextTick(function() {
this.$refs['dataForm'].resetFields()
if (this.dataForm.id) {
api.pmdailymenuDetailApi(id).then(function(res) {
this.dataForm = res;
}.bind(this))
} else {
// 0
this.dataForm.status = '0'
}
}.bind(this))
},
methods: {
init (id) { //
this.dataForm.id = id || 0
this.visible = true
this.$nextTick(function() {
this.$refs['dataForm'].resetFields()
//
dataSubmit () {
this.$refs['dataForm'].validate((valid) => {
if (valid) {
if (this.dataForm.id) {
api.pmdailymenuDetailApi(id).then(function(res) {
this.dataForm = res;
}.bind(this))
api.pmdailymenuUpdateApi(this.dataForm).then(function(res) {
this.$message.success('保存成功')
this.visible = false
this.$emit('refreshDataList')
}.bind(this));
} else {
// 0
this.dataForm.status = '0'
api.pmdailymenuCreateApi(this.dataForm).then(function(res) {
this.$message.success('新增成功')
this.visible = false
this.$emit('refreshDataList')
}.bind(this));
}
}.bind(this))
},
//
dataSubmit () {
this.$refs['dataForm'].validate((valid) => {
if (valid) {
if (this.dataForm.id) {
api.pmdailymenuUpdateApi(this.dataForm).then(function(res) {
this.$message.success('保存成功')
this.visible = false
this.$emit('refreshDataList')
}.bind(this));
} else {
api.pmdailymenuCreateApi(this.dataForm).then(function(res) {
this.$message.success('新增成功')
this.visible = false
this.$emit('refreshDataList')
}.bind(this));
}
}
})
}
}
})
}
}
}
</script>

@ -4,30 +4,26 @@
:title="!dataForm.id ? '添加' : '修改'"
:close-on-click-modal="false"
:append-to-body="true"
:visible.sync="visible" width="800px">
:visible.sync="visible" width="1000px">
<!-- 新增和修改表单 -->
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataSubmit()" label-width="120px">
<!-- 第一行派单人执行人 -->
<!-- 第一行派单人执行人执行部门 -->
<el-row :gutter="20">
<el-col :span="12">
<el-col :span="8">
<el-form-item label="派单人" prop="assignerId">
<el-select v-model="dataForm.assignerId" placeholder="请选择派单人" style="width: 100%" :disabled="dataForm.id === 0">
<el-option v-for="item in adminList" :key="item.id" :label="item.realName" :value="item.id"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-col :span="8">
<el-form-item label="执行人" prop="executorId">
<el-select v-model="dataForm.executorId" placeholder="请选择执行人" style="width: 100%">
<el-select v-model="dataForm.executorId" placeholder="请选择执行人" style="width: 100%" @change="handleExecutorChange">
<el-option v-for="item in adminList" :key="item.id" :label="item.realName" :value="item.id"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<!-- 第二行执行部门联系方式 -->
<el-row :gutter="20">
<el-col :span="12">
<el-col :span="8">
<el-form-item label="执行部门" prop="executorDept">
<treeselect
v-model="dataForm.executorDept"
@ -39,69 +35,65 @@
/>
</el-form-item>
</el-col>
<el-col :span="12">
</el-row>
<!-- 第二行联系方式派单时间预计完成时间 -->
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="联系方式" prop="phone">
<el-input v-model="dataForm.phone" placeholder="联系方式"></el-input>
</el-form-item>
</el-col>
</el-row>
<!-- 第三行派单时间预计完成时间 -->
<el-row :gutter="20">
<el-col :span="12">
<el-col :span="8">
<el-form-item label="派单时间" prop="assignTime">
<el-date-picker v-model="dataForm.assignTime" type="datetime" placeholder="选择派单时间" style="width: 100%"></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-col :span="8">
<el-form-item label="预计完成时间" prop="expectedCompleteTime">
<el-date-picker v-model="dataForm.expectedCompleteTime" type="datetime" placeholder="选择预计完成时间" style="width: 100%"></el-date-picker>
</el-form-item>
</el-col>
</el-row>
<!-- 实际完成时间耗材使-->
<!-- 实际完成时间耗材使维修费-->
<el-row :gutter="20">
<el-col :span="12">
<el-col :span="8">
<el-form-item label="实际完成时间" prop="completeTime">
<el-date-picker v-model="dataForm.completeTime" type="datetime" placeholder="选择实际完成时间" style="width: 100%"></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-col :span="8">
<el-form-item label="耗材使用" prop="consumables">
<el-input v-model="dataForm.consumables" placeholder="耗材使用"></el-input>
</el-form-item>
</el-col>
</el-row>
<!-- 第五行维修费用业主确认 -->
<el-row :gutter="20">
<el-col :span="12">
<el-col :span="8">
<el-form-item label="维修费用" prop="costAmount">
<el-input v-model="dataForm.costAmount" placeholder="维修费用"></el-input>
<el-input-number v-model.number="dataForm.costAmount" type="number" placeholder="维修费用" step="0.01"></el-input-number>
</el-form-item>
</el-col>
<el-col :span="12">
</el-row>
<!-- 第四行业主确认状态 -->
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="业主确认" prop="ownerConfirm">
<el-select v-model="dataForm.ownerConfirm" placeholder="请选择业主确认" style="width: 100%">
<el-select v-model="dataForm.ownerConfirm" placeholder="请选择业主确认" style="width: 100%" disabled>
<el-option label="是" value="是"></el-option>
<el-option label="否" value="否"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<!-- 第六行状态 -->
<el-row :gutter="20">
<el-col :span="12">
<el-col :span="8">
<el-form-item label="状态" prop="status">
<el-select v-model="dataForm.status" placeholder="状态" style="width: 100%">
<el-select v-model="dataForm.status" placeholder="状态" style="width: 100%" disabled>
<el-option v-for="(item, index) in dict.type.dispatch_status" :key="index" :label="item.label" :value="item.value"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<!-- 第七行派单工作内容 -->
<el-row :gutter="20">
<el-col :span="24">
@ -110,7 +102,7 @@
</el-form-item>
</el-col>
</el-row>
<!-- 第八行处理内容 -->
<el-row :gutter="20">
<el-col :span="24">
@ -119,7 +111,7 @@
</el-form-item>
</el-col>
</el-row>
<!-- 第九行完成照片 -->
<el-row :gutter="20">
<el-col :span="24">
@ -131,7 +123,7 @@
</el-form-item>
</el-col>
</el-row>
<!-- 第十行派单备注 -->
<el-row :gutter="20">
<el-col :span="24">
@ -140,15 +132,8 @@
</el-form-item>
</el-col>
</el-row>
<!-- 第十一行备注 -->
<el-row :gutter="20">
<el-col :span="24">
<el-form-item label="备注" prop="remark">
<el-input v-model="dataForm.remark" placeholder="备注" type="textarea"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="visible = false">取消</el-button>
@ -200,9 +185,8 @@ export default {
consumables: '' ,
costAmount: '' ,
completePhoto: '' ,
ownerConfirm: '' ,
status: '' ,
remark: '' ,
ownerConfirm: '否' ,
status: '0' ,
files: []
},
@ -408,6 +392,18 @@ export default {
// ID
this.loadAdminList(deptId)
},
//
handleExecutorChange(executorId) {
//
const executor = this.adminList.find(item => item.id === executorId)
if (executor) {
//
this.dataForm.phone = executor.phone || ''
} else {
//
this.dataForm.phone = ''
}
},
//
loadAdminList(deptId = null) {

@ -24,7 +24,7 @@
<el-table-column prop="costAmount" header-align="center" align="center" label="维修费用"></el-table-column>
<el-table-column header-align="center" align="center" label="业主确认">
<template slot-scope="scope">
{{ scope.row.ownerConfirm === 1 ? '是' : '否' }}
{{ scope.row.ownerConfirm === '是' ? '是' : '否' }}
</template>
</el-table-column>
<el-table-column header-align="center" align="center" label="状态">
@ -33,9 +33,11 @@
</template>
</el-table-column>
<el-table-column prop="remark" header-align="center" align="center" label="备注" show-overflow-tooltip></el-table-column>
<el-table-column header-align="center" fixed="right" align="center" width="150" label="操作">
<el-table-column header-align="center" fixed="right" align="center" width="250" label="操作">
<template slot-scope="dispatchScope">
<el-button type="text" size="small" @click="editDispatch(dispatchScope.row.id)">{{ '' }}</el-button>
<el-button v-if="dispatchScope.row.ownerConfirm !== '是'" type="text" size="small" @click="ownerConfirm(dispatchScope.row.id)">{{ '' }}</el-button>
<el-button v-if="dispatchScope.row.status !== '2'" type="text" size="small" @click="setToProcessed(dispatchScope.row.id)">{{ '' }}</el-button>
<el-button type="text" size="small" @click="deleteDispatch(dispatchScope.row.id, dispatchScope.$index)" style="color: #f56c6c;">删除</el-button>
</template>
</el-table-column>
@ -190,6 +192,42 @@ export default {
currentChangeHandle(val) {
this.pageIndex = val
this.getDataList()
},
//
ownerConfirm(id) {
this.$confirm('确定要进行业主确认吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
dispatchApi.pmmaintenancedispatchUpdateApi({
id: id,
ownerConfirm: '是'
}).then(() => {
this.$message.success('业主确认成功')
this.getDataList()
}).catch(() => {
this.$message.error('业主确认失败')
})
}).catch(() => {})
},
//
setToProcessed(id) {
this.$confirm('确定要将状态改为已处理吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
dispatchApi.pmmaintenancedispatchUpdateApi({
id: id,
status: '2'
}).then(() => {
this.$message.success('状态修改成功')
this.getDataList()
}).catch(() => {
this.$message.error('状态修改失败')
})
}).catch(() => {})
}
}
}

@ -77,7 +77,7 @@
prop="ownerName"
header-align="center"
align="center"
label="业主/租户">
label="名称">
</el-table-column>
<el-table-column
prop="houseName"
@ -149,6 +149,7 @@
<template slot-scope="scope">
<el-button type="text" size="small" @click="addOrUpdateHandle(scope.row.id)">{{ '' }}</el-button>
<el-button v-if="scope.row.status !== '99'" type="text" size="small" @click="completeOrder(scope.row.id)">{{ '' }}</el-button>
<el-button v-if="scope.row.status === '99'" type="text" size="small" @click="revokeOrder(scope.row.id)">{{ '' }}</el-button>
<el-button v-hasPermi="['autogencode:pmmaintenanceorder:delete']" type="text" size="small" @click="deleteHandle(scope.row.id)" style="color: #f56c6c;"></el-button>
</template>
</el-table-column>
@ -375,6 +376,28 @@ import DictTag from '@/components/DictTag'
this.$message.info('已取消办结')
})
},
//
revokeOrder (id) {
this.$confirm('确定要撤销该订单吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
// API
api.pmmaintenanceorderUpdateStatusAndRemarkApi({
id: id,
status: '0', // 0
remark: ''
}).then(res => {
this.$message.success('撤销成功')
this.getDataList()
}).catch(() => {
this.$message.error('撤销失败')
})
}).catch(() => {
this.$message.info('已取消撤销')
})
},
}
}
</script>

@ -21,7 +21,7 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item :label="dataForm.ownerType === '1' ? '业主/租户' : '业主/租户'" prop="ownerId">
<el-form-item :label="dataForm.ownerType === '1' ? '名称' : '名称'" prop="ownerId">
<el-select v-if="dataForm.ownerType === '1'" v-model="dataForm.ownerId" placeholder="请选择业主" clearable
style="width: 100%" @change="handleOwnerChange" filterable>
<el-option
@ -104,7 +104,7 @@
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="状态" prop="status">
<el-select v-model="dataForm.status" placeholder="选择状态" clearable style="width: 100%" filterable>
<el-select v-model="dataForm.status" placeholder="选择状态" clearable style="width: 100%" filterable disabled>
<el-option
v-for="dict in dict.type.fault_status"
:key="dict.value"
@ -119,13 +119,26 @@
<el-form-item label="房屋业主id" prop="houseOwnerId" v-show="false">
<el-input v-model="dataForm.houseOwnerId" placeholder="房屋业主id" readonly></el-input>
</el-form-item>
<!-- 故障照片单独一行 -->
<!-- 处理前文件故障照片 -->
<el-row :gutter="20">
<el-col :span="24">
<el-form-item label="故障照片" prop="faultPhoto">
<el-form-item label="故障照片" prop="faultPhoto" :disabled="!canUploadFaultPhoto">
<FileUploadVO
:value="faultPhotoFiles"
@input="updateFaultPhotoFiles"
:disabled="!canUploadFaultPhoto"
></FileUploadVO>
</el-form-item>
</el-col>
</el-row>
<!-- 处理后文件修复凭证 -->
<el-row :gutter="20" v-if="showAfterProcess">
<el-col :span="24">
<el-form-item label="修复凭证" prop="afterProcessFiles" :disabled="!canUploadAfterProcess">
<FileUploadVO
:value="afterProcessFiles"
@input="updateAfterProcessFiles"
:disabled="!canUploadAfterProcess"
></FileUploadVO>
</el-form-item>
</el-col>
@ -224,9 +237,13 @@ export default {
ownerList: [],
tenantList: [],
houseList: [],
ownerHouseList: [], // /
ownerHouseList: [], //
faultPhotoFiles: [], //
afterProcessFiles: [], //
dispatchRecords: [], //
canUploadFaultPhoto: true, //
canUploadAfterProcess: false, //
showAfterProcess: false, //
dataForm: {
ownerType: '',
ownerId: '',
@ -239,9 +256,10 @@ export default {
reportChannel: '',
reportTime: '',
urgencyLevel: '',
status: '',
status: '0',
remark: '',
files: []
files: [], //
afterProcessFiles: [] //
},
dataRule: {
ownerType: [
@ -289,7 +307,7 @@ export default {
//
handleOwnerTypeChange(ownerType) {
// /IDID
// IDID
this.dataForm.ownerId = ''
this.dataForm.houseId = ''
this.dataForm.houseOwnerId = ''
@ -384,6 +402,26 @@ export default {
this.dataForm.houseOwnerId = ''
}
},
//
setFileUploadPermissions(status) {
switch (status) {
case '0': //
case '1': //
this.canUploadFaultPhoto = true;
this.canUploadAfterProcess = false;
this.showAfterProcess = false;
break;
case '99': //
this.canUploadFaultPhoto = false;
this.canUploadAfterProcess = true;
this.showAfterProcess = true;
break;
default:
this.canUploadFaultPhoto = true;
this.canUploadAfterProcess = false;
this.showAfterProcess = false;
}
},
//
updateFaultPhotoFiles(files) {
this.faultPhotoFiles = files
@ -406,7 +444,7 @@ export default {
name: file.name || file.oldName || '', //
attDir: attDir, //
attSize: file.attSize || '', //
attType: file.attType || '', //
attType: 'fault_photo', //
//
fileName: file.name || file.oldName || '',
filePath: attDir,
@ -430,6 +468,52 @@ export default {
this.dataForm.files = []
}
},
//
updateAfterProcessFiles(files) {
this.afterProcessFiles = files
// dataForm.afterProcessFiles
if (files && files.length > 0) {
// FileUploadVOSystemAttachment
this.dataForm.afterProcessFiles = files.map(file => {
//
let attDir = file.attDir || file.attachFileUrl || ''
// /file/public/
if (attDir.startsWith('/file/public/')) {
attDir = attDir.replace('/file/public/', '')
} else if (attDir.startsWith('/file/')) {
attDir = attDir.replace('/file/', '')
}
return {
// SystemAttachment
attId: file.id || file.attId || '', //
name: file.name || file.oldName || '', //
attDir: attDir, //
attSize: file.attSize || '', //
attType: 'repair_photo', //
//
fileName: file.name || file.oldName || '',
filePath: attDir,
url: attDir,
createTime: null,
createdBy: null,
createTimeStr: null,
delFlag: '0',
updateBy: null,
updateTime: null,
i18nCode: '',
i18nLanguage: '',
originalFileName: file.name || file.oldName || '',
position: 0,
remark: file.remark || '',
sort: 0,
status: ''
}
})
} else {
this.dataForm.afterProcessFiles = []
}
},
init(id) { //
this.dataForm.id = id || 0
this.visible = true
@ -488,40 +572,57 @@ export default {
// ID
this.$nextTick(() => {
// 使
this.dataForm = {
...this.dataForm,
id: orderDetail.id,
ownerType: orderDetail.ownerType || '',
ownerId: orderDetail.ownerId || '',
houseId: houseId,
houseOwnerId: orderDetail.houseOwnerId || '',
orderNo: orderDetail.orderNo || '',
faultType: orderDetail.faultType || '',
faultDesc: orderDetail.faultDesc || '',
faultPhoto: orderDetail.faultPhoto || null,
reportChannel: orderDetail.reportChannel || '',
reportTime: orderDetail.reportTime || '',
urgencyLevel: orderDetail.urgencyLevel || '',
status: orderDetail.status || '',
remark: orderDetail.remark || '',
files: orderDetail.files || []
};
// ID
this.handleHouseChange(houseId);
//
if (orderDetail.files && orderDetail.files.length > 0) {
// filesFileUploadVO
this.faultPhotoFiles = orderDetail.files.map((file, index) => ({
attachFileUrl: file.attDir || file.filePath || file.url || '',
attDir: file.attDir || file.filePath || file.url || '',
name: file.name || file.fileName || '',
oldName: file.name || file.fileName || '',
attId: file.attId || '',
uid: file.id || file.fileId || index + new Date().getTime()
}))
} else {
this.faultPhotoFiles = []
}
this.dataForm = {
...this.dataForm,
id: orderDetail.id,
ownerType: orderDetail.ownerType || '',
ownerId: orderDetail.ownerId || '',
houseId: houseId,
houseOwnerId: orderDetail.houseOwnerId || '',
orderNo: orderDetail.orderNo || '',
faultType: orderDetail.faultType || '',
faultDesc: orderDetail.faultDesc || '',
faultPhoto: orderDetail.faultPhoto || null,
reportChannel: orderDetail.reportChannel || '',
reportTime: orderDetail.reportTime || '',
urgencyLevel: orderDetail.urgencyLevel || '',
status: orderDetail.status || '',
remark: orderDetail.remark || '',
files: orderDetail.files || [],
afterProcessFiles: orderDetail.afterProcessFiles || []
};
// ID
this.handleHouseChange(houseId);
//
this.setFileUploadPermissions(orderDetail.status || '0');
//
if (orderDetail.files && orderDetail.files.length > 0) {
// filesFileUploadVO
this.faultPhotoFiles = orderDetail.files.map((file, index) => ({
attachFileUrl: file.attDir || file.filePath || file.url || '',
attDir: file.attDir || file.filePath || file.url || '',
name: file.name || file.fileName || '',
oldName: file.name || file.fileName || '',
attId: file.attId || '',
uid: file.id || file.fileId || index + new Date().getTime()
}))
} else {
this.faultPhotoFiles = []
}
//
if (orderDetail.afterProcessFiles && orderDetail.afterProcessFiles.length > 0) {
// afterProcessFilesFileUploadVO
this.afterProcessFiles = orderDetail.afterProcessFiles.map((file, index) => ({
attachFileUrl: file.attDir || file.filePath || file.url || '',
attDir: file.attDir || file.filePath || file.url || '',
name: file.name || file.fileName || '',
oldName: file.name || file.fileName || '',
attId: file.attId || '',
uid: file.id || file.fileId || index + new Date().getTime()
}))
} else {
this.afterProcessFiles = []
}
//
this.getDispatchRecords()
});
@ -530,9 +631,13 @@ export default {
});
}.bind(this))
} else {
//
//
this.setFileUploadPermissions('0'); //
//
this.faultPhotoFiles = []
this.afterProcessFiles = []
this.dataForm.files = []
this.dataForm.afterProcessFiles = []
//
this.dispatchRecords = []
//

@ -317,6 +317,9 @@ public class PmComplaintSuggestionController {
item.setOwnerDeptName(dept.getDeptName());
}
}
// 设置文件列表
setFile(item);
}
CommonPage<PmComplaintSuggestion> page = CommonPage.restPage(list);
@ -564,7 +567,7 @@ public class PmComplaintSuggestionController {
if (pmComplaintSuggestionService.save(pmComplaintSuggestion)) {
// 处理文件
if (pmComplaintSuggestion.getFiles() != null) {
if (pmComplaintSuggestion.getBeforeProcessFiles() != null || pmComplaintSuggestion.getAfterProcessFiles() != null) {
updateFile(pmComplaintSuggestion);
}
return CommonResult.success();
@ -579,7 +582,7 @@ public class PmComplaintSuggestionController {
public CommonResult<String> update(@RequestBody PmComplaintSuggestion pmComplaintSuggestion){
if (pmComplaintSuggestionService.updateById(pmComplaintSuggestion)) {
// 处理文件
if (pmComplaintSuggestion.getFiles() != null) {
if (pmComplaintSuggestion.getBeforeProcessFiles() != null || pmComplaintSuggestion.getAfterProcessFiles() != null) {
updateFile(pmComplaintSuggestion);
}
return CommonResult.success();
@ -600,24 +603,56 @@ public class PmComplaintSuggestionController {
}
private void updateFile(PmComplaintSuggestion pmComplaintSuggestion) {
Long newId = System.currentTimeMillis() + new Random().nextInt(1000);
List<SystemAttachment> files = pmComplaintSuggestion.getFiles();
if (files != null) {
for (SystemAttachment attachment : files) {
attachment.setFileId(String.valueOf(newId));
// 生成统一的文件ID
Long fileId = pmComplaintSuggestion.getFileId();
if (fileId == null) {
fileId = System.currentTimeMillis() + new Random().nextInt(1000);
pmComplaintSuggestion.setFileId(fileId);
}
// 处理问题凭证文件
if (pmComplaintSuggestion.getBeforeProcessFiles() != null && !pmComplaintSuggestion.getBeforeProcessFiles().isEmpty()) {
for (SystemAttachment attachment : pmComplaintSuggestion.getBeforeProcessFiles()) {
attachment.setFileId(String.valueOf(fileId));
attachment.setAttType("before_process"); // 问题凭证类型
}
systemAttachmentService.saveOrUpdateBatch(pmComplaintSuggestion.getBeforeProcessFiles());
}
// 处理处理凭证文件
if (pmComplaintSuggestion.getAfterProcessFiles() != null && !pmComplaintSuggestion.getAfterProcessFiles().isEmpty()) {
for (SystemAttachment attachment : pmComplaintSuggestion.getAfterProcessFiles()) {
attachment.setFileId(String.valueOf(fileId));
attachment.setAttType("after_process"); // 处理凭证类型
}
systemAttachmentService.updateBatchById(files);
pmComplaintSuggestion.setFileId(newId);
systemAttachmentService.saveOrUpdateBatch(pmComplaintSuggestion.getAfterProcessFiles());
}
// 更新文件ID
if (pmComplaintSuggestion.getId() != null) {
pmComplaintSuggestionService.updateById(pmComplaintSuggestion);
}
}
private void setFile(PmComplaintSuggestion pmComplaintSuggestion) {
// 初始化文件列表
pmComplaintSuggestion.setBeforeProcessFiles(new java.util.ArrayList<>());
pmComplaintSuggestion.setAfterProcessFiles(new java.util.ArrayList<>());
// 根据投诉建议ID查询所有相关文件
Long fileId = pmComplaintSuggestion.getFileId();
if (fileId != null) {
List<SystemAttachment> list = systemAttachmentService.list(new LambdaQueryWrapper<SystemAttachment>()
List<SystemAttachment> allFiles = systemAttachmentService.list(new LambdaQueryWrapper<SystemAttachment>()
.eq(SystemAttachment::getFileId, fileId));
pmComplaintSuggestion.setFiles(list);
// 根据attType区分问题凭证和处理凭证
for (SystemAttachment attachment : allFiles) {
if ("before_process".equals(attachment.getAttType())) {
pmComplaintSuggestion.getBeforeProcessFiles().add(attachment);
} else if ("after_process".equals(attachment.getAttType())) {
pmComplaintSuggestion.getAfterProcessFiles().add(attachment);
}
}
}
}

@ -206,4 +206,29 @@ public class PmDailyMenuController {
return CommonResult.failed();
}
}
/**
*
*/
@RequestMapping(value = "/batchSave", method = RequestMethod.POST)
public CommonResult<String> batchSave(@RequestBody List<PmDailyMenu> menus){
try {
for (PmDailyMenu menu : menus) {
// 保存菜单
pmDailyMenuService.save(menu);
// 保存菜单明细
if (menu.getPmDailyMenuDtls() != null && !menu.getPmDailyMenuDtls().isEmpty()) {
for (PmDailyMenuDtl dtl : menu.getPmDailyMenuDtls()) {
dtl.setMenuId(menu.getId());
pmDailyMenuDtlService.save(dtl);
}
}
}
return CommonResult.success();
} catch (Exception e) {
e.printStackTrace();
return CommonResult.failed("批量创建失败");
}
}
}

@ -9,9 +9,17 @@ import java.util.HashMap;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.zbkj.common.model.system.SysDept;
import com.zbkj.common.request.PageParamRequest;
import com.zbkj.common.response.CommonResult;
import com.zbkj.common.page.CommonPage;
import com.zbkj.common.utils.SecurityUtil;
import com.zbkj.common.vo.LoginUserVo;
import com.zbkj.service.service.SysDeptService;
import com.zbkj.service.service.SystemAdminService;
import com.zbkj.service.service.UserService;
import com.zbkj.common.model.user.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@ -34,6 +42,12 @@ import com.zbkj.modules.autogencode.entity.PmHouse;
import com.zbkj.modules.autogencode.service.PmHouseService;
import com.zbkj.modules.autogencode.entity.PmTenant;
import com.zbkj.modules.autogencode.service.PmTenantService;
import com.zbkj.modules.autogencode.entity.PmOwnerHouseRel;
import com.zbkj.modules.autogencode.service.PmOwnerHouseRelService;
import com.zbkj.modules.autogencode.entity.PmTenantHouse;
import com.zbkj.modules.autogencode.service.PmTenantHouseService;
import com.zbkj.modules.autogencode.entity.PmTenantHouseRel;
import com.zbkj.modules.autogencode.service.PmTenantHouseRelService;
@ -61,7 +75,16 @@ public class PmMaintenanceOrderController {
@Autowired
private PmTenantService pmTenantService;
@Autowired
private UserService userService;
@Autowired
private PmOwnerHouseRelService pmOwnerHouseRelService;
@Autowired
private PmTenantHouseService pmTenantHouseService;
@Autowired
private PmTenantHouseRelService pmTenantHouseRelService;
@Autowired
private SysDeptService sysDeptService;
/**
@ -338,11 +361,24 @@ public class PmMaintenanceOrderController {
}
private void setFile(PmMaintenanceOrder pmMaintenanceOrder) {
// 初始化文件列表
pmMaintenanceOrder.setFiles(new ArrayList<>());
pmMaintenanceOrder.setAfterProcessFiles(new ArrayList<>());
// 根据维修单ID查询所有相关文件
Long faultPhoto = pmMaintenanceOrder.getFaultPhoto();
if (faultPhoto != null) {
List<SystemAttachment> list = systemAttachmentService.list(new LambdaQueryWrapper<SystemAttachment>()
List<SystemAttachment> allFiles = systemAttachmentService.list(new LambdaQueryWrapper<SystemAttachment>()
.eq(SystemAttachment::getFileId, faultPhoto));
pmMaintenanceOrder.setFiles(list);
// 根据attType区分故障照片和修复凭证
for (SystemAttachment attachment : allFiles) {
if ("fault_photo".equals(attachment.getAttType())) {
pmMaintenanceOrder.getFiles().add(attachment);
} else if ("repair_photo".equals(attachment.getAttType())) {
pmMaintenanceOrder.getAfterProcessFiles().add(attachment);
}
}
}
}
@ -360,9 +396,95 @@ public class PmMaintenanceOrderController {
*/
@RequestMapping(value = "/save", method = RequestMethod.POST)
public CommonResult<String> save(@RequestBody PmMaintenanceOrder pmMaintenanceOrder){
// 获取当前用户信息(如果没有通过 uid 设置 create_by
Long currentUserId = null;
if (pmMaintenanceOrder.getCreateBy() == null) {
LoginUserVo loginUserVo = SecurityUtil.getLoginUserVo();
if (loginUserVo != null && loginUserVo.getUser() != null) {
// 自动填写create_by
currentUserId = Long.valueOf(loginUserVo.getUser().getId());
pmMaintenanceOrder.setCreateBy(currentUserId);
}
} else {
currentUserId = pmMaintenanceOrder.getCreateBy();
}
// 如果有传uid根据eb_user中的字段查询对应的业主、租户、部门
if (pmMaintenanceOrder.getUid() != null) {
User user = userService.getOne(Wrappers.<User>lambdaQuery()
.eq(User::getUid, pmMaintenanceOrder.getUid()));
if (user != null) {
// 根据dept_id设置所属公司
if (pmMaintenanceOrder.getCreateDept() == null && user.getDeptId() != null) {
pmMaintenanceOrder.setCreateDept(user.getDeptId());
}
// 根据owner_tenant_id设置业主/租户ID和类型
if (pmMaintenanceOrder.getOwnerId() == null && user.getOwnerTenantId() != null) {
// 根据staff_type区分业主和租户
if ("1".equals(user.getStaffType())) {
// 业主类型
pmMaintenanceOrder.setOwnerId(user.getOwnerTenantId());
pmMaintenanceOrder.setOwnerType("1"); // 业主类型
} else if ("2".equals(user.getStaffType())) {
// 租户类型
pmMaintenanceOrder.setOwnerId(user.getOwnerTenantId());
pmMaintenanceOrder.setOwnerType("2"); // 租户类型
} else {
// 如果staff_type未设置回退到原来的查询方式
// 查询是否为业主
PmOwner owner = pmOwnerService.getById(user.getOwnerTenantId());
if (owner != null) {
pmMaintenanceOrder.setOwnerId(owner.getId());
pmMaintenanceOrder.setOwnerType("1"); // 业主类型
} else {
// 查询是否为租户
PmTenant tenant = pmTenantService.getById(user.getOwnerTenantId());
if (tenant != null) {
pmMaintenanceOrder.setOwnerId(tenant.getId());
pmMaintenanceOrder.setOwnerType("2"); // 租户类型
}
}
}
}
// 根据业主/租户ID查询房屋
if (pmMaintenanceOrder.getHouseId() == null && pmMaintenanceOrder.getOwnerId() != null) {
if ("1".equals(pmMaintenanceOrder.getOwnerType())) {
// 查询业主的房屋
List<PmOwnerHouseRel> ownerHouseRels = pmOwnerHouseRelService.list(Wrappers.<PmOwnerHouseRel>lambdaQuery()
.eq(PmOwnerHouseRel::getOwnerId, pmMaintenanceOrder.getOwnerId()));
if (ownerHouseRels != null && !ownerHouseRels.isEmpty()) {
pmMaintenanceOrder.setHouseId(ownerHouseRels.get(0).getHouseId());
}
} else if ("2".equals(pmMaintenanceOrder.getOwnerType())) {
// 查询租户的房屋
List<PmTenantHouse> tenantHouses = pmTenantHouseService.list(Wrappers.<PmTenantHouse>lambdaQuery()
.eq(PmTenantHouse::getRentId, pmMaintenanceOrder.getOwnerId()));
if (tenantHouses != null && !tenantHouses.isEmpty()) {
List<PmTenantHouseRel> tenantHouseRels = pmTenantHouseRelService.list(Wrappers.<PmTenantHouseRel>lambdaQuery()
.eq(PmTenantHouseRel::getTenantHouseId, tenantHouses.get(0).getId()));
if (tenantHouseRels != null && !tenantHouseRels.isEmpty()) {
pmMaintenanceOrder.setHouseId(tenantHouseRels.get(0).getHouseId());
}
}
}
}
}
}
// 处理文件保存
if (pmMaintenanceOrder.getFiles() != null) {
updateFile(pmMaintenanceOrder);
if (pmMaintenanceOrder.getFiles() != null || pmMaintenanceOrder.getAfterProcessFiles() != null) {
updateFiles(pmMaintenanceOrder);
}
// 办结时检查处理后文件
if ("99".equals(pmMaintenanceOrder.getStatus()) && (pmMaintenanceOrder.getAfterProcessFiles() == null || pmMaintenanceOrder.getAfterProcessFiles().isEmpty())) {
return CommonResult.failed("办结时必须上传修复凭证");
}
if (pmMaintenanceOrderService.save(pmMaintenanceOrder)) {
@ -385,8 +507,13 @@ public class PmMaintenanceOrderController {
@RequestMapping(value = "/update", method = RequestMethod.POST)
public CommonResult<String> update(@RequestBody PmMaintenanceOrder pmMaintenanceOrder){
// 处理文件更新
if (pmMaintenanceOrder.getFiles() != null) {
updateFile(pmMaintenanceOrder);
if (pmMaintenanceOrder.getFiles() != null || pmMaintenanceOrder.getAfterProcessFiles() != null) {
updateFiles(pmMaintenanceOrder);
}
// 办结时检查处理后文件
if ("99".equals(pmMaintenanceOrder.getStatus()) && (pmMaintenanceOrder.getAfterProcessFiles() == null || pmMaintenanceOrder.getAfterProcessFiles().isEmpty())) {
return CommonResult.failed("办结时必须上传修复凭证");
}
if (pmMaintenanceOrderService.updateById(pmMaintenanceOrder)) {
@ -403,15 +530,30 @@ public class PmMaintenanceOrderController {
return CommonResult.failed();
}
private void updateFile(PmMaintenanceOrder pmMaintenanceOrder) {
Long newId = System.currentTimeMillis() + new Random().nextInt(1000);
List<SystemAttachment> files = pmMaintenanceOrder.getFiles();
if (files != null) {
for (SystemAttachment attachment : files) {
attachment.setFileId(String.valueOf(newId));
private void updateFiles(PmMaintenanceOrder pmMaintenanceOrder) {
// 生成统一的文件ID
Long fileId = pmMaintenanceOrder.getFaultPhoto();
if (fileId == null) {
fileId = System.currentTimeMillis() + new Random().nextInt(1000);
pmMaintenanceOrder.setFaultPhoto(fileId);
}
// 处理故障照片文件
if (pmMaintenanceOrder.getFiles() != null && !pmMaintenanceOrder.getFiles().isEmpty()) {
for (SystemAttachment attachment : pmMaintenanceOrder.getFiles()) {
attachment.setFileId(String.valueOf(fileId));
attachment.setAttType("fault_photo"); // 设置为故障照片类型
}
systemAttachmentService.updateBatchById(files);
pmMaintenanceOrder.setFaultPhoto(newId);
systemAttachmentService.saveOrUpdateBatch(pmMaintenanceOrder.getFiles());
}
// 处理修复凭证文件
if (pmMaintenanceOrder.getAfterProcessFiles() != null && !pmMaintenanceOrder.getAfterProcessFiles().isEmpty()) {
for (SystemAttachment attachment : pmMaintenanceOrder.getAfterProcessFiles()) {
attachment.setFileId(String.valueOf(fileId));
attachment.setAttType("repair_photo"); // 设置为修复凭证类型
}
systemAttachmentService.saveOrUpdateBatch(pmMaintenanceOrder.getAfterProcessFiles());
}
}
@ -484,6 +626,16 @@ public class PmMaintenanceOrderController {
return CommonResult.failed("订单不存在");
}
// 办结时检查修复照片
if ("99".equals(status)) {
// 这里需要从前端传递修复照片,或者在前端进行检查
// 由于此接口主要用于状态和备注的快速修改,建议在前端进行修复照片的检查
// 如果前端没有传递修复照片,则返回错误
if (params.get("afterProcessFiles") == null) {
return CommonResult.failed("办结时必须上传修复凭证");
}
}
// 只修改状态和备注
pmMaintenanceOrder.setStatus(status);
pmMaintenanceOrder.setRemark(remark);
@ -499,6 +651,16 @@ public class PmMaintenanceOrderController {
*/
@RequestMapping(value = "/delete", method = RequestMethod.POST)
public CommonResult<String> delete(@RequestBody Long[] ids){
// 检查每个订单是否有报修派单记录
for (Long id : ids) {
LambdaQueryWrapper<PmMaintenanceDispatch> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(PmMaintenanceDispatch::getOrderId, id);
long count = pmMaintenanceDispatchService.count(queryWrapper);
if (count > 0) {
return CommonResult.failed("报修单下存在报修派单记录,无法删除");
}
}
if (pmMaintenanceOrderService.removeByIds(Arrays.asList(ids))) {
return CommonResult.success();
}

@ -191,10 +191,16 @@ public class PmComplaintSuggestion implements Serializable {
private Long fileId;
/**
*
*
*/
@TableField(exist = false)
private List<SystemAttachment> files;
private List<SystemAttachment> beforeProcessFiles;
/**
*
*/
@TableField(exist = false)
private List<SystemAttachment> afterProcessFiles;
}

@ -129,17 +129,30 @@ public class PmMaintenanceOrder implements Serializable {
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
/**
* ID
* ID
*/
@ApiModelProperty(value = "租户ID")
private String tenantId;
/**
* ID
*/
@ApiModelProperty(value = "用户ID")
@TableField(exist = false)
private Long uid;
/**
*
*
*/
@TableField(exist = false)
private List<SystemAttachment> files;
/**
*
*/
@TableField(exist = false)
private List<SystemAttachment> afterProcessFiles;
/**
*
*/

Loading…
Cancel
Save