This commit is contained in:
2025-10-19 20:00:35 +08:00
parent 4afee184cf
commit 7c14e477b1
8 changed files with 172 additions and 152 deletions
@@ -109,6 +109,8 @@ public interface FlowConst {
// 流程实例名称 // 流程实例名称
String PROCESS_INSTANCE_NAME = "instanceName"; String PROCESS_INSTANCE_NAME = "instanceName";
//============================================扩展==================================================
// 开启之后不会校验任务执行所属权
String EXT_ENABLE_OPERATOR = "";
} }
@@ -22,6 +22,9 @@ public class FlowCommonService {
public void executeTask(Dict args){ public void executeTask(Dict args){
Long processTaskId = args.getLong(FlowConst.PROCESS_TASK_ID_KEY); Long processTaskId = args.getLong(FlowConst.PROCESS_TASK_ID_KEY);
String operator = SecurityUtil.getUserId(); String operator = SecurityUtil.getUserId();
if (args.containsKey(FlowConst.EXT_ENABLE_OPERATOR)&&args.getBool(FlowConst.EXT_ENABLE_OPERATOR)){
operator = FlowConst.ADMIN_ID;
}
args.remove(FlowConst.PROCESS_TASK_ID_KEY); args.remove(FlowConst.PROCESS_TASK_ID_KEY);
Integer submitType = args.getInt(FlowConst.SUBMIT_TYPE); Integer submitType = args.getInt(FlowConst.SUBMIT_TYPE);
if (submitType == null) { if (submitType == null) {
@@ -289,35 +289,23 @@ public class TeacherCongressDelegatePushController {
Sql sql = Sqls.create(""" Sql sql = Sqls.create("""
SELECT SELECT
info.*, info.*,
ins.id AS instanceId,
ins.businessNo,
ins.state instanceState,
ins.variable instanceVariable,
ins.processDefineId instanceProcessDefineId,
t.id taskId,
t.taskName AS taskKey, t.taskName AS taskKey,
t.displayName taskName, t.displayName taskName
t.taskType,
t.performType taskPerformType,
t.taskState,
t.finishTime,
t.taskParentId,
t.variable taskVariable,
IF((SELECT taskName FROM wf_process_task tt WHERE tt.id = t.taskParentId) = 'startTask', 1, 0) canRevoke,
(select MAX(id) from wf_process_task where processInstanceId = ins.id and taskName = 'startTask') AS startTaskId
FROM FROM
teacher_congress_delegate_push info teacher_congress_delegate_push info
LEFT JOIN `wf_process_instance` ins ON ins.businessNo = info.id LEFT JOIN `wf_process_instance` ins ON ins.businessNo = info.id
LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id AND t.taskState = 10 LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id
$condition $condition
"""); """);
Cnd cnd = Cnd.NEW(); Cnd cnd = Cnd.NEW();
cnd.andEX("info.sessionId", "=", sessionId); cnd.andEX("info.sessionId", "=", sessionId);
cnd.andEX("info.unionId", "=", SecurityUtil.getUnionId()); cnd.andEX("info.unionId", "=", SecurityUtil.getUnionId());
cnd.andEX("t.taskName", "=", "53ff0c2a-ba93-45e9-a9fd-db51cdab3080"); cnd.andEX("t.taskName", "=", "0cacd1e7-7bb2-47dd-818b-6a73062e0c62");
cnd.groupBy("info.id");
sql.setCondition(cnd); sql.setCondition(cnd);
List<NutMap> writeList = baseService.listMap(sql); List<NutMap> writeList = baseService.listMap(sql);
// 已上报总人数 // 已上报总人数
int total = writeList.size(); int total = writeList.size();
// 已上报女代表人数 // 已上报女代表人数
@@ -340,21 +328,28 @@ public class TeacherCongressDelegatePushController {
if (total > allocation.getAllocationNum()) { if (total > allocation.getAllocationNum()) {
tips.append("上报总人数超出分配名额!"); tips.append("上报总人数超出分配名额!");
} }
/* if (female < allocation.getFemaleNum()) {
tips.append("女教师代表数不满足分配名额数!");
}
if (seniorTeacher < allocation.getSeniorTeaNum()) { if (seniorTeacher < allocation.getSeniorTeaNum()) {
tips.append("高级职称专任教师数不满足分配名额数!"); tips.append("高级职称专任教师数不满足分配名额数!");
} }
if (intermediateBelow < allocation.getIntermediateBelowNum()) {
tips.append("中级职称及以下代表数不满足分配名额数!");
}
if (ordinaryTeacher < allocation.getOrdinaryTeaNum()) { if (cadre < allocation.getCadreNum()) {
tips.append("专任教师数不满足分配名额数!"); tips.append("干部代表数不满足分配名额数!");
}
if (worker < allocation.getWorkerNum()) {
tips.append("工人代表数不满足分配名额数!");
}
if (female < allocation.getFemaleNum()) {
tips.append("女教师代表数不满足分配名额数!");
} }
if (under45 < allocation.getLess45Num()) { if (under45 < allocation.getLess45Num()) {
tips.append("45岁以下教师代表数不满足分配名额数!"); tips.append("45岁以下教师代表数不满足分配名额数!");
}*/ }
if (StrUtil.isNotBlank(tips)) { if (StrUtil.isNotBlank(tips)) {
return Result.error(tips.toString()); return Result.error(tips.toString());
@@ -368,7 +363,7 @@ public class TeacherCongressDelegatePushController {
@ApiOperation("本单位代表上报情况") @ApiOperation("本单位代表上报情况")
@SaCheckPermission("tc.delegate.push") @SaCheckPermission("tc.delegate.push")
public Result selfUnionPushMetric(String sessionId, String unionId) { public Result selfUnionPushMetric(String sessionId, String unionId) {
if (StrUtil.isBlank(unionId)){ if (StrUtil.isBlank(unionId)) {
unionId = SecurityUtil.getUnionId(); unionId = SecurityUtil.getUnionId();
} }
@@ -103,7 +103,7 @@ public class TeacherCongressDelegatePushWriteController {
@At @At
@ApiOperation("代表信息填写保存") @ApiOperation("代表信息填写保存")
@SaCheckPermission("tc.delegate.push.write") @SaCheckLogin
public Result save(TeacherCongressDelegatePush teacherCongressDelegatePush){ public Result save(TeacherCongressDelegatePush teacherCongressDelegatePush){
dao.updateIgnoreNull(teacherCongressDelegatePush); dao.updateIgnoreNull(teacherCongressDelegatePush);
return Result.success(); return Result.success();
@@ -111,13 +111,14 @@ public class TeacherCongressDelegatePushWriteController {
@At @At
@ApiOperation("代表信息填写提交") @ApiOperation("代表信息填写提交")
@SaCheckPermission("tc.delegate.push.write") @SaCheckLogin
public Result submit(TeacherCongressDelegatePush teacherCongressDelegatePush,String taskId){ public Result submit(TeacherCongressDelegatePush teacherCongressDelegatePush,String taskId){
dao.updateIgnoreNull(teacherCongressDelegatePush); dao.updateIgnoreNull(teacherCongressDelegatePush);
Dict dict = Dict.create(); Dict dict = Dict.create();
dict.set(FlowConst.PROCESS_TASK_ID_KEY, taskId); dict.set(FlowConst.PROCESS_TASK_ID_KEY, taskId);
dict.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.AGREE.getCode()); dict.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.AGREE.getCode());
dict.set(FlowConst.EXT_ENABLE_OPERATOR,true);
flowCommonService.executeTask(dict); flowCommonService.executeTask(dict);
return Result.success(); return Result.success();
} }
@@ -67,6 +67,7 @@ public class TeacherCongressDelegatePushServiceImpl extends BaseServiceImpl<Teac
Dict dict = Dict.create(); Dict dict = Dict.create();
dict.set(FlowConst.PROCESS_TASK_ID_KEY, push.getString("taskId")); dict.set(FlowConst.PROCESS_TASK_ID_KEY, push.getString("taskId"));
dict.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.AGREE.getCode()); dict.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.AGREE.getCode());
dict.set(FlowConst.EXT_ENABLE_OPERATOR,true);
flowCommonService.executeTask(dict); flowCommonService.executeTask(dict);
}); });
} }
@@ -22,7 +22,7 @@ layout("/layouts/platform.html"){
</el-card> </el-card>
<el-card shadow="never"> <el-card shadow="never">
<push-progress ref="pushProgressRef" ></push-progress> <push-progress ref="pushProgressRef"></push-progress>
</el-card> </el-card>
<el-card shadow="never"> <el-card shadow="never">
@@ -153,8 +153,8 @@ layout("/layouts/platform.html"){
</el-table-column> </el-table-column>
<el-table-column label="代表类型" prop="representativeType" show-overflow-tooltip <el-table-column label="代表类型" prop="representativeType" show-overflow-tooltip
width="100"></el-table-column> width="100"></el-table-column>
<el-table-column prop="taskName" label="当前节点" width="120"fixed="right"></el-table-column> <el-table-column prop="taskName" label="当前节点" width="120" fixed="right"></el-table-column>
<el-table-column prop="instanceState" label="流程状态"fixed="right"> <el-table-column prop="instanceState" label="流程状态" fixed="right">
<template slot-scope="{row}"> <template slot-scope="{row}">
<enum-tag :value="row.instanceState" name="ProcessInstanceStateEnum" label_key="message" <enum-tag :value="row.instanceState" name="ProcessInstanceStateEnum" label_key="message"
size="small"></enum-tag> size="small"></enum-tag>
@@ -174,7 +174,9 @@ layout("/layouts/platform.html"){
删除 删除
</el-button> </el-button>
<el-button <el-button
v-else-if="row.taskKey === 'startTask' || row.taskKey==='53ff0c2a-ba93-45e9-a9fd-db51cdab3080' || !row.instanceId" v-else-if="row.taskKey === 'startTask'
|| row.taskKey==='53ff0c2a-ba93-45e9-a9fd-db51cdab3080'
|| row.taskKey==='0cacd1e7-7bb2-47dd-818b-6a73062e0c62' || !row.instanceId"
@click="onDelete(row.id)" @click="onDelete(row.id)"
size="mini" type="danger">删除 size="mini" type="danger">删除
</el-button> </el-button>
@@ -238,7 +240,7 @@ layout("/layouts/platform.html"){
this.pageData() this.pageData()
const fullName = this.sessionOptions.find(v => v.id === this.pageForm.sessionId)?.fullName; const fullName = this.sessionOptions.find(v => v.id === this.pageForm.sessionId)?.fullName;
this.$refs.pushProgressRef.refreshData(this.pageForm.sessionId, fullName,this.pageForm.unionId) this.$refs.pushProgressRef.refreshData(this.pageForm.sessionId, fullName, this.pageForm.unionId)
}, },
onView(row) { onView(row) {
this.writeDialog = true this.writeDialog = true
@@ -278,18 +280,19 @@ layout("/layouts/platform.html"){
type: 'warning' type: 'warning'
}).then(async () => { }).then(async () => {
const loading = createLoading('正在提交中') const loading = createLoading('正在提交中')
const {code, msg} = await this.$axios.post('/platform/teacherCongress/delegate/push/batchSubmit', { this.$axios.post('/platform/teacherCongress/delegate/push/batchSubmit', {
ids: JSON.stringify(selection.map(v => v.id)), ids: JSON.stringify(selection.map(v => v.id)),
sessionId: this.pageForm.sessionId sessionId: this.pageForm.sessionId
}).then(resp => {
if (resp.code === 0) {
this.$message.success(resp.msg)
this.doSearch()
this.$refs.tableRef.clearSelection()
}
}).finally(() => {
loading.close()
}) })
loading.close()
if (code === 0) {
this.$message.success(msg)
this.doSearch()
this.$refs.tableRef.clearSelection()
} else {
this.$message.error(msg)
}
}) })
}, },
listUnion() { listUnion() {
@@ -51,131 +51,146 @@ const write = {
ref="formRef" ref="formRef"
:model="formData" :model="formData"
:rules="rules" :rules="rules"
label-width="100px" label-width="150px"
label-position="top"
:class="{ hidden: !isSelected }" :class="{ hidden: !isSelected }"
:disabled="(formData && formData.taskKey!=='53ff0c2a-ba93-45e9-a9fd-db51cdab3080') || is_read" :disabled="(formData && formData.taskKey!=='53ff0c2a-ba93-45e9-a9fd-db51cdab3080') || is_read"
> >
<div class="form-section"> <div class="form-section">
<h3 class="section-title">基本信息</h3> <h3 class="section-title">基本信息</h3>
<div class="form-grid"> <div class="form-grid">
<el-form-item label="姓名" prop="userName"> <el-row :gutter="20">
<el-input v-model="formData.userName" readonly></el-input> <el-col :span="12">
</el-form-item> <el-form-item label="姓名" prop="userName">
<el-form-item label="工号" prop="loginName"> <el-input v-model="formData.userName" readonly></el-input>
<el-input v-model="formData.loginName" readonly></el-input> </el-form-item>
</el-form-item> </el-col>
<el-form-item label="性别" prop="sex"> <el-col :span="12">
<el-radio-group v-model="formData.sex" size="small"> <el-form-item label="工号" prop="loginName">
<el-radio border label="男">男</el-radio> <el-input v-model="formData.loginName" readonly></el-input>
<el-radio border label="女">女</el-radio> </el-form-item>
</el-radio-group> </el-col>
</el-form-item> <el-col :span="12">
<el-form-item label="出生年月" prop="birthday"> <el-form-item label="性别" prop="sex">
<el-date-picker <el-radio-group v-model="formData.sex" size="small">
v-model="formData.birthday" <el-radio border label="男">男</el-radio>
type="date" <el-radio border label="女">女</el-radio>
placeholder="选择日期" </el-radio-group>
value-format="yyyy-MM-dd" </el-form-item>
style="width: 100%" </el-col>
></el-date-picker> <el-col :span="12">
</el-form-item> <el-form-item label="出生年月" prop="birthday">
<el-form-item label="民族" prop="nation"> <el-date-picker
<dict-select v-model="formData.nation" style="width: 100%" placeholder="请选择民族" v-model="formData.birthday"
code="USER_NATION"></dict-select> type="date"
</el-form-item> placeholder="选择日期"
<el-form-item label="政治面貌" prop="political"> value-format="yyyy-MM-dd"
<el-input maxlength="100" placeholder="政治面貌" style="width: 100%"
v-model="formData.political"></el-input> ></el-date-picker>
</el-form-item> </el-form-item>
<!-- <el-form-item label="学历" prop="education"> </el-col>
<dict-select v-model="formData.education" style="width: 100%" placeholder="请选择学历" <el-col :span="12">
code="USER_EDUCATION"></dict-select> <el-form-item label="民族" prop="nation">
</el-form-item> <dict-select v-model="formData.nation" style="width: 100%" placeholder="请选择民族"
<el-form-item label="学位" prop="academicDegree"> code="USER_NATION"></dict-select>
<dict-select v-model="formData.academicDegree" style="width: 100%" </el-form-item>
placeholder="请选择学位" </el-col>
code="USER_ACADEMIC_DEGREE"></dict-select> <el-col :span="12">
</el-form-item>--> <el-form-item label="政治面貌" prop="political">
<el-input maxlength="100" placeholder="政治面貌"
<el-form-item label="所属工会"> v-model="formData.political"></el-input>
<el-input </el-form-item>
v-model="formData.unionName" </el-col>
readonly <el-col :span="12">
placeholder="请输入所属工会" <el-form-item label="所属工会">
clearable <el-input
></el-input> v-model="formData.unionName"
</el-form-item> readonly
placeholder="请输入所属工会"
<el-form-item label="所属单位"> clearable
<el-input ></el-input>
v-model="formData.unitName" </el-form-item>
readonly </el-col>
placeholder="请输入所属单位" <el-col :span="12">
clearable <el-form-item label="所属单位">
></el-input> <el-input
</el-form-item> v-model="formData.unitName"
readonly
<el-form-item label="职称" prop="professionalTitle"> placeholder="请输入所属单位"
<dict-select v-model="formData.professionalTitle" style="width: 100%" clearable
placeholder="请选择职称" ></el-input>
code="technical_title_level"></dict-select> </el-form-item>
</el-form-item> </el-col>
<el-col :span="12">
<el-form-item label="职" prop="professionalLevel"> <el-form-item label="职" prop="professionalTitle">
<dict-select v-model="formData.professionalLevel" style="width: 100%" <dict-select v-model="formData.professionalTitle" style="width: 100%"
placeholder="请选择职" placeholder="请选择职"
code="JobTitle"></dict-select> code="technical_title_level"></dict-select>
</el-form-item> </el-form-item>
</el-col>
<!-- <el-form-item label="是否专任教师" prop="ordinaryTeacher"> <el-col :span="12">
<el-radio-group v-model="formData.ordinaryTeacher" size="small"> <el-form-item label="是否高级职称" prop="seniorTeacher">
<el-radio-group v-model="formData.seniorTeacher" size="small">
<el-radio border :label="true">是</el-radio> <el-radio border :label="true">是</el-radio>
<el-radio border :label="false">否</el-radio> <el-radio border :label="false">否</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item>--> </el-form-item>
<el-form-item label="是否高级职称" prop="seniorTeacher"> </el-col>
<el-radio-group v-model="formData.seniorTeacher" size="small"> <el-col :span="12">
<el-radio border :label="true">是</el-radio> <el-form-item label="是否中级职称及以下" prop="intermediateBelow">
<el-radio border :label="false">否</el-radio> <el-radio-group v-model="formData.intermediateBelow" size="small">
</el-radio-group> <el-radio border :label="true">是</el-radio>
</el-form-item> <el-radio border :label="false">否</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="是否干部" prop="cadre">
<el-radio-group v-model="formData.cadre" size="small">
<el-radio border :label="true">是</el-radio>
<el-radio border :label="false">否</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="是否工人" prop="worker">
<el-radio-group v-model="formData.worker" size="small">
<el-radio border :label="true">是</el-radio>
<el-radio border :label="false">否</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="校级领导" prop="schoolLeader">
<el-radio-group v-model="formData.schoolLeader" size="small">
<el-radio border :label="true">是</el-radio>
<el-radio border :label="false">否</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="中层领导" prop="middleLevelLeader">
<el-radio-group v-model="formData.middleLevelLeader" size="small">
<el-radio border :label="true">是</el-radio>
<el-radio border :label="false">否</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="是否中级职称及以下" prop="intermediateBelow">
<el-radio-group v-model="formData.intermediateBelow" size="small">
<el-radio border :label="true">是</el-radio>
<el-radio border :label="false">否</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="是否干部" prop="cadre">
<el-radio-group v-model="formData.cadre" size="small">
<el-radio border :label="true">是</el-radio>
<el-radio border :label="false">否</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="是否工人" prop="worker">
<el-radio-group v-model="formData.worker" size="small">
<el-radio border :label="true">是</el-radio>
<el-radio border :label="false">否</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="校级领导" prop="schoolLeader">
<el-radio-group v-model="formData.schoolLeader" size="small">
<el-radio border :label="true">是</el-radio>
<el-radio border :label="false">否</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="中层领导" prop="middleLevelLeader">
<el-radio-group v-model="formData.middleLevelLeader" size="small">
<el-radio border :label="true">是</el-radio>
<el-radio border :label="false">否</el-radio>
</el-radio-group>
</el-form-item>
</div> </div>
<div class="form-grid"> <div class="form-grid">
@@ -41,7 +41,7 @@ layout("/layouts/platform_h5.html"){
<i class="fa fa-undo"></i> <i class="fa fa-undo"></i>
<span>撤回</span> <span>撤回</span>
</div> </div>
<div class="action-btn delete" @click="onDelete(row)" <div class="action-btn delete" @click="onDelete(row.id)"
v-if="row.taskKey === 'startTask' || !row.instanceId"> v-if="row.taskKey === 'startTask' || !row.instanceId">
<i class="fa fa-trash"></i> <i class="fa fa-trash"></i>
<span>删除</span> <span>删除</span>