This commit is contained in:
@jyuhsin
2025-12-30 18:24:09 +08:00
parent 088418ec4d
commit 79666b55d1
14 changed files with 77 additions and 29 deletions
@@ -14,6 +14,7 @@ import com.budwk.app.sys.services.SysRoleService;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.lang.Lang;
import java.util.List;
@@ -27,11 +28,11 @@ public class FlowFghzxAssignmentHandler implements AssignmentHandler {
SysRoleService sysRoleService = ServiceContext.find(SysRoleService.class);
Sys_role sysRole = sysRoleService.getByCode(RoleConstant.BRANCH_UNION_CHAIRMAN);
String unionId = StrUtil.blankToDefault(execution.getArgs().getStr(FlowConst.INITIATOR_UNIT_UNION_ID), SecurityUtil.getUnionId());
Sys_user_role user_role = dao.fetch(Sys_user_role.class, Cnd.where(Sys_user_role::getRoleId, "=", sysRole.getId()).and(Sys_user_role::getUnionId, "=", unionId));
if (user_role == null) {
List<Sys_user_role> user_roles = dao.query(Sys_user_role.class, Cnd.where(Sys_user_role::getRoleId, "=", sysRole.getId()).and(Sys_user_role::getUnionId, "=", unionId));
if (Lang.isNotEmpty(user_roles)) {
throw new BaseException("分工会主席没有设置,请联系校工会!", sysRole.getCode());
}
return List.of(user_role.getUserId());
return user_roles.stream().map(Sys_user_role::getUserId).distinct().toList();
}
@Override
@@ -92,7 +92,7 @@ public class ActivityBasicScopeController {
* @return {@link Result}
*/
@At
@SaCheckPermission("activity.basic.scope")
@SaCheckPermission("activity.basic")
public Result pageData(@Param("data") ActivityUserScopePageParam pageForm) {
Sql sql = Sqls.create("""
SELECT
@@ -236,7 +236,7 @@ public class TrainSignUpActivityStatisticsController {
for (TrainSignUpCourse c : courseList) {
String k = c.getCourseName();
List<NutMap> v = userList.stream().filter(x -> x.getString("courseName").equals(k)).collect(Collectors.toList());
List<NutMap> v = userList.stream().filter(x -> StrUtil.isNotBlank(x.getString("courseName")) && x.getString("courseName").equals(k)).collect(Collectors.toList());
ExportParams userExportParams = new ExportParams();
userExportParams.setSheetName(k);
userExportParams.setType(ExcelType.HSSF);
@@ -91,6 +91,24 @@ public class TrainSignUpActivityServiceImpl extends BaseServiceImpl<TrainSignUpA
if (Lang.isEmpty(courseList)) {
return;
}
Set<String> newIds = courseList.stream()
.map(TrainSignUpCourse::getId)
.filter(StrUtil::isNotBlank)
.collect(Collectors.toSet());
List<TrainSignUpCourse> oldCourses = dao().query(TrainSignUpCourse.class, Cnd.where("activityId", "=", activity.getId()));
Set<String> oldIds = oldCourses.stream()
.map(TrainSignUpCourse::getId)
.filter(StrUtil::isNotBlank)
.collect(Collectors.toSet());
Set<String> deletedIds = Sets.difference(oldIds, newIds).immutableCopy();
if(Lang.isNotEmpty(deletedIds)) {
dao().clear(TrainSignUpCourse.class, Cnd.where("id", "in", deletedIds));
}
for (TrainSignUpCourse course : courseList) {
course.setActivityId(activity.getId());
dao().insertOrUpdate(course);
@@ -8,11 +8,13 @@ import com.budwk.app.base.utils.CommonDownloadUtil;
import com.budwk.app.base.utils.SysOfficeTemplateUtil;
import com.budwk.app.bpm.enums.BpmProcessInstanceStatusEnum;
import com.budwk.app.flow.enums.ProcessInstanceStateEnum;
import com.budwk.app.sys.models.Sys_user;
import com.budwk.app.sys.models.Sys_user_role;
import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.web.commons.base.Globals;
import com.budwk.app.web.controllers.open.commons.service.CommonService;
import com.budwk.app.zhgh.club.model.ClubUser;
import com.budwk.app.zhgh.club.param.ClubUserPageForm;
import com.budwk.app.zhgh.club.service.SysClubInfoManageService;
import com.budwk.app.zhgh.club.service.SysClubService;
@@ -26,6 +28,7 @@ import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.SqlExpressionGroup;
import org.nutz.dao.util.cri.Static;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
@@ -95,6 +98,18 @@ public class SysClubInfoManageServiceImpl extends BaseServiceImpl<ClubCommonPage
cnd.and("c.clubName", "LIKE", "%" + pageForm.getClubName() + "%");
}
if(StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
Cnd c = Cnd.NEW();
SqlExpressionGroup group = new SqlExpressionGroup();
group.orLike("userName", pageForm.getSearchKeyword());
group.orLike("loginName", pageForm.getSearchKeyword());
c.and(group);
c.limit(50);
List<Sys_user> userList = dao().query(Sys_user.class, c);
List<ClubUser> list = dao().query(ClubUser.class, Cnd.where("userId", "in", userList.stream().map(Sys_user::getId).toList()));
cnd.and("c.id", "in", list.stream().map(ClubUser::getClubId).toList());
}
cnd.andEX("year(c.createTime)", "=", pageForm.getYear());
cnd.and("c.dismiss", "=", false);
cnd.and("ins.state", "=", ProcessInstanceStateEnum.FINISHED.getCode());
@@ -18,6 +18,7 @@ import com.budwk.app.sys.models.Sys_user_role;
import com.budwk.app.sys.services.SysRoleService;
import com.budwk.app.sys.services.SysUserService;
import com.budwk.app.zhgh.democratic.teachercongress.delegation.models.Teacher_congress_delegation;
import com.budwk.app.zhgh.democratic.teachercongress.delegation.models.Teacher_congress_delegation_union;
import com.budwk.app.zhgh.democratic.teachercongress.delegation.models.Teacher_congress_delegation_unit;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -147,6 +148,8 @@ public class TeacherCongressDelegationController {
@SaCheckPermission("tc.delegation")
public Result delete(@Valid String id) {
dao.delete(Teacher_congress_delegation.class, id);
dao.clear(Teacher_congress_delegation_union.class, Cnd.where(Teacher_congress_delegation_union::getDelegationId, "=", id));
dao.clear(Teacher_congress_delegation_unit.class, Cnd.where(Teacher_congress_delegation_unit::getDelegationId, "=", id));
return Result.success();
}
@@ -100,7 +100,7 @@ public class SingleTeacherServiceImpl extends BaseServiceImpl<SingleTeacher> imp
cnd.andEX("u.personType", "=", pageForm.getPersonType());
cnd.andEX("u.userState", "=", pageForm.getUserState());
cnd.andEX("st.education", "=", pageForm.getEducation());
cnd.andEX("u.marriage", "=", pageForm.getMarriage());
cnd.andEX("st.maritalStatus", "=", pageForm.getMarriage());
if (StrUtil.isAllNotBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy()));
@@ -194,7 +194,7 @@ public class ThirtyTeachController {
break;
}
List<Sys_user> matchUsers = users.stream().filter(u -> u.getLoginname().equals(temp.getLoginName())).map(u -> {
List<Sys_user> matchUsers = users.stream().filter(u -> StrUtil.isNotBlank(u.getLoginname()) && u.getLoginname().equals(temp.getLoginName())).map(u -> {
Sys_user user = new Sys_user();
user.setId(u.getId());
user.setLoginname(temp.getLoginName());
@@ -26,7 +26,7 @@ layout("/layouts/platform.html"){
</el-descriptions-item>
<el-descriptions-item label="报销模式">
<el-form-item prop="activityReimbursementMode"
<el-form-item prop="activityReimbursementMode" label="报销模式"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<el-radio-group v-model="formData.activityReimbursementMode"
@change="getActivityReimbursementByUser">
@@ -57,7 +57,7 @@ layout("/layouts/platform.html"){
<el-descriptions-item label="项目名称" v-if="formData.activityReimbursementMode==='activity'">
<el-row :gutter="10">
<el-col :span="18">
<el-form-item prop="declareId"
<el-form-item prop="declareId" label="项目名称"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<el-select v-model="formData.declareId"
style="width: 100%;"
@@ -82,7 +82,7 @@ layout("/layouts/platform.html"){
</el-descriptions-item>
<el-descriptions-item label="项目名称" v-else>
<el-form-item prop="activityName"
<el-form-item prop="activityName" label="项目名称"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<el-input v-model="formData.activityName" maxlength="50"
placeholder="请输入项目名称"></el-input>
@@ -91,7 +91,7 @@ layout("/layouts/platform.html"){
</template>
<el-descriptions-item label="扣款预算">
<el-form-item prop="deductionBudgetId"
<el-form-item prop="deductionBudgetId" label="扣款预算"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<el-select v-model="formData.deductionBudgetId"
style="width: 100%;"
@@ -113,7 +113,7 @@ layout("/layouts/platform.html"){
<template v-if="formData.activityReimbursementMode==='activity'">
<el-descriptions-item label="实际活动时间">
<el-form-item prop="activityTime"
<el-form-item prop="activityTime" label="实际活动时间"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<el-date-picker
start-placeholder="开始日期"
@@ -129,7 +129,7 @@ layout("/layouts/platform.html"){
<el-descriptions-item label="活动计划时间">
<el-form-item prop="planDate"
<el-form-item prop="planDate" label="活动计划时间"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<el-date-picker
readonly
@@ -150,12 +150,12 @@ layout("/layouts/platform.html"){
</template>
<el-descriptions-item label="费用" :span="2">
<el-form-item prop="budgets">
<el-form-item prop="budgets" label="费用">
<el-table :data="formData.budgets" border max-height="500" size="mini" style="width: 100%">
<el-table-column label="序号" sortable fixed type="index" width="60"></el-table-column>
<el-table-column label="费用项目名称" fixed prop="name" width="200">
<template scope="{row,$index}">
<el-form-item label-width="0"
<el-form-item label-width="0" label="费用项目名称"
:prop="'budgets.'+$index+'.name'"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<el-input v-model="row.name" style="width: 100%" maxlength="50"
@@ -166,7 +166,7 @@ layout("/layouts/platform.html"){
<el-table-column label="预算费用" prop="budgetPrice" width="250"
v-if="formData.activityReimbursementMode==='activity'">
<template scope="{row,$index}">
<el-form-item label-width="0"
<el-form-item label-width="0" label="预算费用"
:prop="'budgets.'+$index+'.budgetPrice'"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<el-input-number placeholder="预算费用" v-model="row.budgetPrice"
@@ -177,7 +177,7 @@ layout("/layouts/platform.html"){
</el-table-column>
<el-table-column label="实际费用" prop="actualPrice" width="250">
<template scope="{row,$index}">
<el-form-item label-width="0"
<el-form-item label-width="0" label="实际费用"
:prop="'budgets.'+$index+'.actualPrice'"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<el-input-number placeholder="请填写实际费用" v-model="row.actualPrice"
@@ -188,7 +188,7 @@ layout("/layouts/platform.html"){
</el-table-column>
<el-table-column label="收款人" prop="username" width="200">
<template scope="{row,$index}">
<el-form-item label-width="0"
<el-form-item label-width="0" label="收款人"
:prop="'budgets.'+$index+'.username'"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<el-input v-model="row.username" maxlength="50"
@@ -199,7 +199,7 @@ layout("/layouts/platform.html"){
</el-table-column>
<el-table-column label="支行名称" prop="bankName" width="300">
<template scope="{row,$index}">
<el-form-item label-width="0"
<el-form-item label-width="0" label="支行名称"
:prop="'budgets.'+$index+'.bankName'"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<el-input v-model="row.bankName" maxlength="80"
@@ -209,7 +209,7 @@ layout("/layouts/platform.html"){
</el-table-column>
<el-table-column label="报销卡号" prop="bankCardNum" width="250">
<template scope="{row,$index}">
<el-form-item label-width="0"
<el-form-item label-width="0" label="报销卡号"
:prop="'budgets.'+$index+'.bankCardNum'"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<el-input type="number" v-model="row.bankCardNum"
@@ -220,7 +220,7 @@ layout("/layouts/platform.html"){
</el-table-column>
<el-table-column label="备注" prop="remark" width="400">
<template scope="{row,$index}">
<el-form-item label-width="0"
<el-form-item label-width="0" label="备注"
:prop="'budgets.'+$index+'.remark'">
<el-input v-model="row.remark" maxlength="200"
placeholder="请输入备注"></el-input>
@@ -245,7 +245,7 @@ layout("/layouts/platform.html"){
</el-descriptions-item>
<el-descriptions-item label="发票" :span="2">
<el-form-item prop="billFiles">
<el-form-item prop="billFiles" label="发票">
<file-upload :value.sync="formData.billFiles"
upload_mode="drag"
:upload_number="10" upload_result_category="array"
@@ -255,7 +255,7 @@ layout("/layouts/platform.html"){
</el-descriptions-item>
<template v-if="formData.activityReimbursementMode==='activity'">
<el-descriptions-item label="活动报道照片/总结/链接" :span="2">
<el-form-item prop="photoFiles">
<el-form-item prop="photoFiles" label="活动报道照片/总结/链接">
<file-upload :value.sync="formData.photoFiles"
upload_mode="drag"
:upload_number="10" upload_result_category="array"
@@ -265,7 +265,7 @@ layout("/layouts/platform.html"){
</el-descriptions-item>
<el-descriptions-item label="奖品/纪念品/服装/道具等活动人员名单" :span="2">
<el-form-item prop="otherFiles">
<el-form-item prop="otherFiles" label="奖品/纪念品/服装/道具等活动人员名单">
<file-upload :value.sync="formData.otherFiles"
upload_mode="drag"
:upload_number="10" upload_result_category="array"
@@ -276,7 +276,7 @@ layout("/layouts/platform.html"){
</template>
<el-descriptions-item label="签字" :span="2">
<el-form-item prop="sign">
<el-form-item prop="sign" label="签字">
<pc-signature v-model="formData.sign"></pc-signature>
</el-form-item>
</el-descriptions-item>
@@ -350,6 +350,9 @@ layout("/layouts/platform.html"){
outlayManageSourceChange(val) {
this.$set(this.formData, 'clubId', null)
this.$set(this.formData, 'deductionBudgetId', null)
this.$set(this.formData, 'declareId', null)
this.$set(this.formData, 'budgets', [])
this.$set(this.formData, 'activityTime', [])
if (val === "ACTIVITY_BUDGET_TYPE_ONE") {
this.$set(this.formData, "declareUnitName", "校工会")
} else if (val === "ACTIVITY_BUDGET_TYPE_TWO") {
@@ -13,6 +13,10 @@ const SCHOOL_CLUB_MANAGE_TEMPLATE = {
v-model="pageForm.clubName"
></el-input>
</search-item>
<search-item label="姓名/工号">
<el-input v-model="pageForm.searchKeyword" placeholder="请输入姓名或工号"
clearable></el-input>
</search-item>
</search>
</el-card>
<el-card shadow="never" class="mt10">
@@ -58,6 +58,8 @@ const CLUB_MANAGER_TEMPLATE = {
</template>
<template slot-scope="scope">
<el-button
:disabled="scope.row.roleCode === 'CLUB_PRESIDENT'
|| scope.row.roleCode === 'CLUB_SECRETARY'""
@click="deleteRow(scope.row, scope.$index)"
size="mini" type="danger">删除
</el-button>
@@ -76,7 +76,7 @@ layout("/layouts/platform.html"){
<el-row type="flex" justify="end">
<el-button @click="$refs.guava.index()" size="small">取消</el-button>
<el-button @click="handleTaskAction(6)" size="small" type="info">退回到发起人</el-button>
<el-button @click="handleTaskAction(20)" size="small" type="danger">不同意</el-button>
<el-button @click="handleTaskAction(2)" size="small" type="danger">不同意</el-button>
<el-button @click="handleTaskAction(1)" size="small" type="primary">同意</el-button>
</el-row>
</div>
@@ -163,7 +163,9 @@ layout("/layouts/platform.html"){
this.importDialog = true
},
successImport() {
this.importDialog = false
if(this.$refs.viewImport.$data.errorInfoData.errorCount === 0) {
this.importDialog = false
}
this.pageData()
},
exportMember() {
@@ -18,7 +18,7 @@ layout("/layouts/platform.html"){
placeholder="请选择年度"
></el-date-picker>
</search-item>
<template v-if="pageForm.queryType == 'union'">
<template v-if="pageForm.queryType == 'fgh'">
<search-item label="工会">
<el-select placeholder="分工会" v-model="pageForm.queryId" style="width: 100%" @change="doSearch" clearable filterable>
<el-option v-for="item in unions" :label="item.name" :value="item.id"></el-option>
@@ -45,7 +45,7 @@ layout("/layouts/platform.html"){
<table-tool label="会员分析"></table-tool>
<el-table :data="tableData" show-summary>
<el-table-column align="center" header-align="center" type="index" label="序号" width="80px"></el-table-column>
<el-table-column v-if="pageForm.queryType=='union'" align="center" header-align="center" label="分工会" width="220px">
<el-table-column v-if="pageForm.queryType=='fgh'" align="center" header-align="center" label="分工会" width="220px">
<template scope="{row}">{{row.unionCode ? ''+row.unionCode+'' : null }}{{row.unionName}}</template>
</el-table-column>
<el-table-column v-if="pageForm.queryType=='unit'" align="center" header-align="center" label="单位" width="220px">