This commit is contained in:
2025-11-19 08:57:49 +08:00
parent 63b7814e71
commit e6a1721f77
10 changed files with 83 additions and 61 deletions
@@ -264,7 +264,7 @@ public class SysHomeController {
// @CacheResult(cacheKey = "news", ignoreNull = true, cacheLiveTime = 60 * 60 * 24) // @CacheResult(cacheKey = "news", ignoreNull = true, cacheLiveTime = 60 * 60 * 24)
public Result getNews() { public Result getNews() {
// 定义要爬取的URL // 定义要爬取的URL
String domain = "https://gh.hgu.edu.cn/index.htm"; String domain = "https://gh.hgu.edu.cn";
try { try {
// 使用Jsoup连接到URL并获取页面内容 // 使用Jsoup连接到URL并获取页面内容
Document doc = Jsoup.connect(domain).get(); Document doc = Jsoup.connect(domain).get();
@@ -133,6 +133,7 @@ public class ActivityCultureApplyActivityController {
} }
tissue.setUserId(SecurityUtil.getUserId()); tissue.setUserId(SecurityUtil.getUserId());
tissue.setApplyTime(DateUtil.now()); tissue.setApplyTime(DateUtil.now());
tissue.setIsUnseal(false);
activityCultureService.insertOrUpdate(tissue); activityCultureService.insertOrUpdate(tissue);
if (List.of(40002, 40003).contains(tissue.getActivity_type()) && tissue.getIsEnrollSystem()) { if (List.of(40002, 40003).contains(tissue.getActivity_type()) && tissue.getIsEnrollSystem()) {
@@ -149,7 +150,7 @@ public class ActivityCultureApplyActivityController {
} }
return Result.success(); return Result.success();
} }
if (tissue.getIsUnseal() && tissue.getIsEnrollSystem()) { if (tissue.getIsEnrollSystem()) {
Sys_home_activity sysHomeActivity = tissue.covertToSysHomeActivity(); Sys_home_activity sysHomeActivity = tissue.covertToSysHomeActivity();
activityCultureService.insertOrUpdate(sysHomeActivity); activityCultureService.insertOrUpdate(sysHomeActivity);
} }
@@ -59,12 +59,12 @@ public class ExecutiveCommitteeConfigController {
sun.id as unionId, sun.id as unionId,
sun.name as unionName, sun.name as unionName,
sun.unionCode , sun.unionCode ,
(SELECT count( 1 ) FROM vw_user where sun.id = unionId) as memberCount, (SELECT count( 1 ) FROM teacher_congress_delegate where unionId =sun.id and sessionId=@sessionId) as dbCount,
0 as quotaCount 0 as quotaCount
FROM FROM
sys_union sun sys_union sun
ORDER BY unionCode ASC ORDER BY unionCode ASC
"""); """).setParam("sessionId",sessionId);
List<NutMap> listMap = committeeConfigService.listMap(sql); List<NutMap> listMap = committeeConfigService.listMap(sql);
config.setUnionQuotaList(listMap); config.setUnionQuotaList(listMap);
} }
@@ -15,6 +15,7 @@ import com.budwk.app.flow.constant.FlowConst;
import com.budwk.app.flow.engine.FlowEngine; import com.budwk.app.flow.engine.FlowEngine;
import com.budwk.app.flow.entity.ProcessInstance; import com.budwk.app.flow.entity.ProcessInstance;
import com.budwk.app.flow.entity.ProcessTask; import com.budwk.app.flow.entity.ProcessTask;
import com.budwk.app.flow.enums.ProcessInstanceStateEnum;
import com.budwk.app.flow.enums.ProcessSubmitTypeEnum; import com.budwk.app.flow.enums.ProcessSubmitTypeEnum;
import com.budwk.app.flow.enums.ProcessTaskStateEnum; import com.budwk.app.flow.enums.ProcessTaskStateEnum;
import com.budwk.app.sys.views.View_user; import com.budwk.app.sys.views.View_user;
@@ -123,8 +124,13 @@ public class TeacherCongressDelegatePushController {
cnd.and(group); cnd.and(group);
} }
cnd.desc("info.createdAt"); cnd.desc("info.createdAt");
if (!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())) { if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name())) {
cnd.and("info.createdBy", "=", SecurityUtil.getUserId()); if (AuthUtil.hasRole(RoleConstant.UNIT_PARTY_SECRETARY.name())) {
cnd.andEX("info.unionId", "=", SecurityUtil.getUnionId());
} else {
cnd.and("info.createdBy", "=", SecurityUtil.getUserId());
}
} }
sql.setCondition(cnd); sql.setCondition(cnd);
Pagination<NutMap> pagination = baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); Pagination<NutMap> pagination = baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
@@ -289,18 +295,36 @@ 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
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 LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id
AND t.taskState = 10
LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.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", "=", "0cacd1e7-7bb2-47dd-818b-6a73062e0c62"); SqlExpressionGroup group = new SqlExpressionGroup();
group.or("t.taskName", "!=", "53ff0c2a-ba93-45e9-a9fd-db51cdab3080");
group.or("t.taskName", "is", null);
cnd.and(group);
cnd.and("ins.state", "!=", ProcessInstanceStateEnum.REJECT.getCode());
cnd.groupBy("info.id"); cnd.groupBy("info.id");
sql.setCondition(cnd); sql.setCondition(cnd);
List<NutMap> writeList = baseService.listMap(sql); List<NutMap> writeList = baseService.listMap(sql);
@@ -328,6 +352,9 @@ public class TeacherCongressDelegatePushController {
if (total > allocation.getAllocationNum()) { if (total > allocation.getAllocationNum()) {
tips.append("上报总人数超出分配名额!"); tips.append("上报总人数超出分配名额!");
} }
if (total < allocation.getAllocationNum()) {
tips.append("上报总人数不满足分配名额!");
}
if (seniorTeacher < allocation.getSeniorTeaNum()) { if (seniorTeacher < allocation.getSeniorTeaNum()) {
tips.append("高级职称专任教师数不满足分配名额数!"); tips.append("高级职称专任教师数不满足分配名额数!");
@@ -376,23 +403,7 @@ 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 instanceVariale,
ins.processDefineId instanceProcessDefineId,
t.id taskId,
t.taskName AS taskKey,
t.displayName taskName,
t.taskType,
t.performType taskPerformType,
t.taskState,
t.finishTime,
t.taskParentId,
t.variable taskVariale,
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' AND taskState IN (10, 20)) 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
@@ -401,10 +412,14 @@ public class TeacherCongressDelegatePushController {
$condition $condition
"""); """);
Cnd cnd = Cnd.NEW(); Cnd cnd = Cnd.NEW();
SqlExpressionGroup group = new SqlExpressionGroup();
group.or("t.taskName", "=", "900217e4-4332-4a21-90dd-363b8be17801");
group.or("t.taskName", "is", null);
cnd.and(group);
cnd.and("ins.state", "!=", ProcessInstanceStateEnum.REJECT.getCode());
cnd.andEX("info.sessionId", "=", sessionId); cnd.andEX("info.sessionId", "=", sessionId);
cnd.andEX("info.unionId", "=", unionId); cnd.andEX("info.unionId", "=", unionId);
cnd.andEX("info.representativeType", "=", "正式代表"); cnd.andEX("info.representativeType", "=", "正式代表");
cnd.and("ins.state", "=", ProcessTaskStateEnum.FINISHED.getCode());
sql.setCondition(cnd); sql.setCondition(cnd);
List<NutMap> writeList = baseService.listMap(sql); List<NutMap> writeList = baseService.listMap(sql);
Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

@@ -86,7 +86,7 @@ layout("/layouts/v4/baseLayout.html"){
</div> </div>
<jcdt :list="websiteNews.grassroots"></jcdt> <!-- <jcdt :list="websiteNews.grassroots"></jcdt>-->
</div> </div>
</div> </div>
@@ -4,21 +4,23 @@ const jcdt = {
<div class="jcdt-container"> <div class="jcdt-container">
<div class="jcdt-title"> <div class="jcdt-title">
<span>基层动态</span> <span>基层动态</span>
</div> </div>
<div class="jcdt-content"> <div class="jcdt-content">
<div class="jcdt-list"> <div class="jcdt-list">
<div class="jcdt-item" v-for="item in list" :key="item.title" @click="onLink(item)"> <div class="jcdt-item" v-for="item in list" :key="item.title" @click="onLink(item)">
<div class="date" v-if="item.date">{{item.date}}</div> <div class="date" v-if="item.date">{{item.date}}</div>
<div style="display: flex; align-items: center"> <div style="display: flex; align-items: center">
<div style="font-size: 28px">🆕</div> <div >
<el-image style="width: 30px" src="/assets/platform/img/v4/xw.png" alt="流程中心"></el-image>
</div>
<div class="title">{{item.title}}</div> <div class="title">{{item.title}}</div>
</div> </div>
<!--<div class="image"> <!--<div class="image">
<img v-if="item.image" :src="item.image" alt=""> <img v-if="item.image" :src="item.image" alt="">
<img v-else src="/assets/platform/img/v4/not-image.png" alt=""> <img v-else src="/assets/platform/img/v4/not-image.png" alt="">
</div>--> </div>-->
<!-- <div class="summary">{{item.summary}}</div>--> <!-- <div class="summary">{{item.summary}}</div>-->
</div> </div>
</div> </div>
</div> </div>
@@ -120,7 +122,7 @@ const jcdt = {
.jcdt-item .date { .jcdt-item .date {
font-size: 20px; font-size: 20px;
font-weight: bold; /*font-weight: bold;*/
white-space: nowrap; white-space: nowrap;
text-align: left; text-align: left;
margin-bottom: 8px; margin-bottom: 8px;
@@ -114,7 +114,7 @@ layout("/layouts/platform.html"){
}, },
tableColumns: [ tableColumns: [
{prop: 'unionName', label: '分工会名称', sortable: true}, {prop: 'unionName', label: '分工会名称', sortable: true},
{prop: 'memberCount', label: '代表人数', sortable: true}, {prop: 'dbCount', label: '代表人数', sortable: true},
{prop: 'quotaCount', label: '分配人数', sortable: true} {prop: 'quotaCount', label: '分配人数', sortable: true}
], ],
formData: {}, formData: {},
@@ -27,25 +27,28 @@ layout("/layouts/platform.html"){
<el-card shadow="never"> <el-card shadow="never">
<table-tool> <table-tool>
<el-button <template v-if="$auth.hasRoleOr(['SYSADMIN','SCHOOL_UNION_ADMIN','BRANCH_UNION_CHAIRMAN'])">
icon="el-icon-plus" <el-button
size="small" icon="el-icon-plus"
type="primary" size="small"
@click="$refs.pushFormalRef.onOpen(pageForm.sessionId,pageForm.unionId)" type="primary"
>正式代表预选 @click="$refs.pushFormalRef.onOpen(pageForm.sessionId,pageForm.unionId)"
</el-button> >正式代表预选
<el-button </el-button>
icon="el-icon-plus" <el-button
size="small" icon="el-icon-plus"
type="primary" size="small"
@click="$refs.pushAttendanceRef.onOpen(pageForm.sessionId,pageForm.unionId)" type="primary"
>列席代表预选 @click="$refs.pushAttendanceRef.onOpen(pageForm.sessionId,pageForm.unionId)"
</el-button> >列席代表预选
<!-- <el-button icon="el-icon-download" size="small" type="primary" @click="doExport">导出</el-button>--> </el-button>
</template>
<el-button icon="el-icon-check" size="small" type="primary" @click="onBatchSubmit">正式代表提交上报
</el-button>
<template v-if="$auth.hasRoleOr(['SYSADMIN','SCHOOL_UNION_ADMIN','UNIT_PARTY_SECRETARY'])">
<el-button icon="el-icon-check" size="small" type="primary" @click="onBatchSubmit">正式代表提交上报
</el-button>
</template>
<el-button icon="el-icon-download" size="small" type="primary" @click="doExport">导出</el-button>
<el-radio-group v-model="pageForm.isFormalOrAttendance" size="small" class="ml10" <el-radio-group v-model="pageForm.isFormalOrAttendance" size="small" class="ml10"
@change="doSearch"> @change="doSearch">
<el-radio-button label="全部"></el-radio-button> <el-radio-button label="全部"></el-radio-button>
@@ -163,11 +166,12 @@ layout("/layouts/platform.html"){
<el-table-column label="操作" fixed="right" width="300"> <el-table-column label="操作" fixed="right" width="300">
<template slot-scope="{row}"> <template slot-scope="{row}">
<el-button @click="onView(row)" size="mini" type="primary">查看</el-button> <el-button @click="onView(row)" size="mini" type="primary">查看</el-button>
<el-button <el-button
v-if="row.taskKey === 'startTask' || row.taskKey==='53ff0c2a-ba93-45e9-a9fd-db51cdab3080' || !row.instanceId" v-if="(row.taskKey === 'startTask' || row.taskKey==='53ff0c2a-ba93-45e9-a9fd-db51cdab3080' || !row.instanceId)
@click="onEdit(row)" size="mini" && $auth.hasRoleOr(['SYSADMIN'])"
type="primary">编辑 @click="onEdit(row)" size="mini"
</el-button> type="primary">编辑
</el-button>
<template> <template>
<el-button v-if="$auth.hasRoleOr('SYSADMIN, SCHOOL_UNION_ADMIN')" @click="onDelete(row.id)" <el-button v-if="$auth.hasRoleOr('SYSADMIN, SCHOOL_UNION_ADMIN')" @click="onDelete(row.id)"
size="mini" type="danger"> size="mini" type="danger">
@@ -46,8 +46,8 @@ const apps = {
@touchmove="onTouchMove"> @touchmove="onTouchMove">
<!-- 图标 --> <!-- 图标 -->
<div class="app-grid-icon"> <div class="app-grid-icon">
<van-icon v-if="app.picIcon" :name="app.picIcon" size="64" <van-icon v-if="app.picIcon" :name="app.picIcon" size="45"
style="border-radius: 12px; width: 64px; height: 64px;"></van-icon> style="border-radius: 12px; width: 45px; height: 45px;"></van-icon>
<van-icon v-else-if="app.icon" :name="app.icon" size="28"></van-icon> <van-icon v-else-if="app.icon" :name="app.icon" size="28"></van-icon>
<van-icon v-else name="apps-o" size="28"></van-icon> <van-icon v-else name="apps-o" size="28"></van-icon>
</div> </div>
@@ -443,10 +443,10 @@ const apps = {
} }
.app-grid-icon { .app-grid-icon {
width: 64px; width: 45px;
height: 64px; height: 45px;
max-width: 64px; max-width: 64px;
max-height: 64px; max-height: 60px;
border-radius: 12px; border-radius: 12px;
background: #f2f3f5; background: #f2f3f5;
display: flex; display: flex;