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());
@@ -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);
}); });
} }
@@ -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>
@@ -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 => {
loading.close() if (resp.code === 0) {
if (code === 0) { this.$message.success(resp.msg)
this.$message.success(msg)
this.doSearch() this.doSearch()
this.$refs.tableRef.clearSelection() this.$refs.tableRef.clearSelection()
} else {
this.$message.error(msg)
} }
}).finally(() => {
loading.close()
})
}) })
}, },
listUnion() { listUnion() {
@@ -51,26 +51,33 @@ 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-row :gutter="20">
<el-col :span="12">
<el-form-item label="姓名" prop="userName"> <el-form-item label="姓名" prop="userName">
<el-input v-model="formData.userName" readonly></el-input> <el-input v-model="formData.userName" readonly></el-input>
</el-form-item> </el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="工号" prop="loginName"> <el-form-item label="工号" prop="loginName">
<el-input v-model="formData.loginName" readonly></el-input> <el-input v-model="formData.loginName" readonly></el-input>
</el-form-item> </el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="性别" prop="sex"> <el-form-item label="性别" prop="sex">
<el-radio-group v-model="formData.sex" size="small"> <el-radio-group v-model="formData.sex" size="small">
<el-radio border label="男">男</el-radio> <el-radio border label="男">男</el-radio>
<el-radio border label="女">女</el-radio> <el-radio border label="女">女</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="出生年月" prop="birthday"> <el-form-item label="出生年月" prop="birthday">
<el-date-picker <el-date-picker
v-model="formData.birthday" v-model="formData.birthday"
@@ -80,24 +87,20 @@ const write = {
style="width: 100%" style="width: 100%"
></el-date-picker> ></el-date-picker>
</el-form-item> </el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="民族" prop="nation"> <el-form-item label="民族" prop="nation">
<dict-select v-model="formData.nation" style="width: 100%" placeholder="请选择民族" <dict-select v-model="formData.nation" style="width: 100%" placeholder="请选择民族"
code="USER_NATION"></dict-select> code="USER_NATION"></dict-select>
</el-form-item> </el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="政治面貌" prop="political"> <el-form-item label="政治面貌" prop="political">
<el-input maxlength="100" placeholder="政治面貌" <el-input maxlength="100" placeholder="政治面貌"
v-model="formData.political"></el-input> v-model="formData.political"></el-input>
</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>
<el-form-item label="学位" prop="academicDegree">
<dict-select v-model="formData.academicDegree" style="width: 100%"
placeholder="请选择学位"
code="USER_ACADEMIC_DEGREE"></dict-select>
</el-form-item>-->
<el-form-item label="所属工会"> <el-form-item label="所属工会">
<el-input <el-input
v-model="formData.unionName" v-model="formData.unionName"
@@ -106,7 +109,8 @@ const write = {
clearable clearable
></el-input> ></el-input>
</el-form-item> </el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="所属单位"> <el-form-item label="所属单位">
<el-input <el-input
v-model="formData.unitName" v-model="formData.unitName"
@@ -115,26 +119,15 @@ const write = {
clearable clearable
></el-input> ></el-input>
</el-form-item> </el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="职称" prop="professionalTitle"> <el-form-item label="职称" prop="professionalTitle">
<dict-select v-model="formData.professionalTitle" style="width: 100%" <dict-select v-model="formData.professionalTitle" style="width: 100%"
placeholder="请选择职称" placeholder="请选择职称"
code="technical_title_level"></dict-select> code="technical_title_level"></dict-select>
</el-form-item> </el-form-item>
</el-col>
<el-form-item label="职级" prop="professionalLevel"> <el-col :span="12">
<dict-select v-model="formData.professionalLevel" style="width: 100%"
placeholder="请选择职级"
code="JobTitle"></dict-select>
</el-form-item>
<!-- <el-form-item label="是否专任教师" prop="ordinaryTeacher">
<el-radio-group v-model="formData.ordinaryTeacher" 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="seniorTeacher"> <el-form-item label="是否高级职称" prop="seniorTeacher">
<el-radio-group v-model="formData.seniorTeacher" size="small"> <el-radio-group v-model="formData.seniorTeacher" size="small">
<el-radio border :label="true">是</el-radio> <el-radio border :label="true">是</el-radio>
@@ -142,40 +135,62 @@ const write = {
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="是否中级职称及以下" prop="intermediateBelow"> <el-form-item label="是否中级职称及以下" prop="intermediateBelow">
<el-radio-group v-model="formData.intermediateBelow" size="small"> <el-radio-group v-model="formData.intermediateBelow" 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-col>
<el-col :span="12">
<el-form-item label="是否干部" prop="cadre"> <el-form-item label="是否干部" prop="cadre">
<el-radio-group v-model="formData.cadre" size="small"> <el-radio-group v-model="formData.cadre" 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-col>
<el-col :span="12">
<el-form-item label="是否工人" prop="worker"> <el-form-item label="是否工人" prop="worker">
<el-radio-group v-model="formData.worker" size="small"> <el-radio-group v-model="formData.worker" 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-col>
<el-col :span="12">
<el-form-item label="校级领导" prop="schoolLeader"> <el-form-item label="校级领导" prop="schoolLeader">
<el-radio-group v-model="formData.schoolLeader" size="small"> <el-radio-group v-model="formData.schoolLeader" 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-col>
<el-col :span="12">
<el-form-item label="中层领导" prop="middleLevelLeader"> <el-form-item label="中层领导" prop="middleLevelLeader">
<el-radio-group v-model="formData.middleLevelLeader" size="small"> <el-radio-group v-model="formData.middleLevelLeader" 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-col>
</el-row>
</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>