diff --git a/src/main/java/com/budwk/app/zhgh/democratic/executiveCommittee/controller/ExecutiveCommitteeConfigController.java b/src/main/java/com/budwk/app/zhgh/democratic/executiveCommittee/controller/ExecutiveCommitteeConfigController.java new file mode 100644 index 00000000..28d9ae75 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/democratic/executiveCommittee/controller/ExecutiveCommitteeConfigController.java @@ -0,0 +1,83 @@ +package com.budwk.app.zhgh.democratic.executiveCommittee.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import com.budwk.app.base.annotation.SLog; +import com.budwk.app.base.result.Result; +import com.budwk.app.zhgh.democratic.executiveCommittee.models.ExecutiveCommitteeConfig; +import com.budwk.app.zhgh.democratic.executiveCommittee.service.ExecutiveCommitteeConfigService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.lang.util.NutMap; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; + +import java.util.List; + +/** + * @ClassName ExecutiveCommitteeConfigController + * @Author JyuHsin + * @Date 2025/6/20 15:30 + * @Version 1.0 + * @Description TODO + */ + +@IocBean +@At("/platform/executiveCommittee/executiveCommitteeConfig") +@Ok("json:full") +@Slf4j +@Api(tags = "执委会成员推选配置") +public class ExecutiveCommitteeConfigController { + + @Inject + private Dao dao; + @Inject + private ExecutiveCommitteeConfigService committeeConfigService; + + + @At("/index") + @SaCheckPermission("executiveCommittee.executiveCommitteeConfig") + @Ok("beetl:/platform/zhgh/democratic/executiveCommittee/executiveCommitteeConfig/index.html") + public void index() { + } + + @At + @ApiOperation("分页查询") + @SaCheckPermission("executiveCommittee.executiveCommitteeConfig") + public Result fetchConfig(String sessionId) { + ExecutiveCommitteeConfig config = committeeConfigService.fetch(Cnd.where("teacherMeetId", "=", sessionId)); + if(config == null) { + config = new ExecutiveCommitteeConfig(); + Sql sql = Sqls.create(""" + SELECT + dbt.id as delegationId, + dbt.name as delegationName, + dbt.code as delegationCode, + (SELECT count( 1 ) FROM vw_user where unitId IN ( SELECT unitId FROM teacher_congress_delegation_unit unit WHERE unit.delegationId = dbt.id ) and member = 1) as memberCount, + 0 as quotaCount + FROM + teacher_congress_delegation dbt + WHERE dbt.sessionId = @sessionId + ORDER BY CODE ASC + """).setParam("sessionId", sessionId); + List listMap = committeeConfigService.listMap(sql); + config.setDelegationQuotaList(listMap); + } + return Result.success(config); + } + + @At + @ApiOperation("新增、修改预选名额分配") + @SaCheckPermission("executiveCommittee.executiveCommitteeConfig") + @SLog(type = "executiveCommitteeConfig", tag = "执委会推选-预选名额分配", msg ="新增、修改预选名额分配" ) + public Result onHandle(ExecutiveCommitteeConfig config) { + committeeConfigService.insertOrUpdate(config); + return Result.success(); + } +} diff --git a/src/main/java/com/budwk/app/zhgh/democratic/executiveCommittee/controller/ExecutiveCommitteeDelegationOnePushController.java b/src/main/java/com/budwk/app/zhgh/democratic/executiveCommittee/controller/ExecutiveCommitteeDelegationOnePushController.java new file mode 100644 index 00000000..d9ffaa5b --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/democratic/executiveCommittee/controller/ExecutiveCommitteeDelegationOnePushController.java @@ -0,0 +1,258 @@ +package com.budwk.app.zhgh.democratic.executiveCommittee.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.lang.Validator; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.extra.pinyin.PinyinUtil; +import com.budwk.app.base.annotation.SLog; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.result.Result; +import com.budwk.app.base.service.BaseService; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.democratic.executiveCommittee.models.ExecutiveCommitteeConfig; +import com.budwk.app.zhgh.democratic.executiveCommittee.models.ExecutiveCommitteeOnePush; +import com.budwk.app.zhgh.democratic.teachercongress.delegate.models.Teacher_congress_delegate; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.lang.Strings; +import org.nutz.lang.util.NutMap; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; +import org.nutz.mvc.annotation.Param; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @author zhf + * @date 2025/8/25 15:18 + * @description 团长一次推选 + */ +@IocBean +@At("/platform/executiveCommittee/delegationOnePush") +@Ok("json:full") +@Slf4j +@Api(tags = "执委会推选-团长一次推选") +public class ExecutiveCommitteeDelegationOnePushController { + + @Inject + private Dao dao; + @Inject + private BaseService baseService; + + @At("/index") + @SaCheckPermission("executiveCommittee.delegationOnePush") + @Ok("beetl:/platform/zhgh/democratic/executiveCommittee/delegationOnePush/index.html") + public void index() { + } + + @At + @ApiOperation("查询某个代表团的团长一次推选的委员") + @SaCheckPermission("executiveCommittee.delegationOnePush") + public Result pageData(PageForm pageForm, + String teacherMeetId, + String unionId) { + Teacher_congress_delegate db = dao.fetch(Teacher_congress_delegate.class, + Cnd.where(Teacher_congress_delegate::getSessionId, "=", teacherMeetId) + .and(Teacher_congress_delegate::getUserId, "=", SecurityUtil.getUserId())); + if (ObjectUtil.isEmpty(db)) { + return Result.error("没有权限,只有代表团团长才能推选"); + } + Sql sql = Sqls.create(""" + SELECT + t1.*, + t2.name AS unitName, + t3.name unionName, + t4.sex, + TIMESTAMPDIFF( + YEAR, + t4.birthday, + CURDATE()) AS age + FROM + `executive_committee_one_push` t1 + LEFT JOIN sys_unit t2 ON t1.unitId = t2.id + LEFT JOIN `sys_union` t3 ON t3.id = t2.unionid + LEFT JOIN `vw_user` t4 ON t4.id = t1.userId + $condition + """); + Cnd cnd = Cnd.NEW(); + cnd.andEX("t1.teacherMeetId", "=", teacherMeetId); + cnd.andEX("t1.delegationId", "=", db.getDelegationId()); + cnd.andEX("t3.id", "=", unionId); + cnd.andEX("t1.addType", "=", 1); + if (Strings.isNotBlank(pageForm.getSearchName()) && Strings.isNotBlank(pageForm.getSearchKeyword())) { + cnd.and(pageForm.getSearchName(), "LIKE", "%" + pageForm.getSearchKeyword() + "%"); + } + cnd.asc("t1.firstLetter"); + sql.setCondition(cnd); + return Result.success(baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql)); + } + + + @At + @ApiOperation("查询可以推选委员和已经推选的人员") + @SaCheckPermission("executiveCommittee.delegationOnePush") + public Result getDelegationUser(String teacherMeetId) { + Teacher_congress_delegate db = dao.fetch(Teacher_congress_delegate.class, + Cnd.where(Teacher_congress_delegate::getSessionId, "=", teacherMeetId) + .and(Teacher_congress_delegate::getUserId, "=", SecurityUtil.getUserId())); + if (ObjectUtil.isEmpty(db)) { + return Result.error("没有权限,只有代表团团长才能推选"); + } + ExecutiveCommitteeConfig config = dao.fetch(ExecutiveCommitteeConfig.class, + Cnd.where(ExecutiveCommitteeConfig::getTeacherMeetId, "=", teacherMeetId)); + if (ObjectUtil.isEmpty(config)) { + return Result.error("请先配置基础信息"); + } + if (config.getFirstStartTime().getTime() > System.currentTimeMillis()) { + return Result.error("请等待一次预选开始时间"); + } + if (config.getFirstEndTime().getTime() < System.currentTimeMillis()) { + return Result.error("一次预选已结束"); + } + List userValue = dao.query(ExecutiveCommitteeOnePush.class, + Cnd.where("teacherMeetId", "=", teacherMeetId) + .and("addType", "=", 1)); + List onePushList = dao.query(ExecutiveCommitteeOnePush.class, Cnd.NEW()); + List userIds = onePushList.stream().map(v -> v.getUserId()).collect(Collectors.toList()); + + Cnd cnd = Cnd.NEW(); + cnd.andEX("db.sessionId", "=", teacherMeetId); + cnd.andEX("db.userId", "not in", userIds); + cnd.andEX("db.userId", "!=", SecurityUtil.getUserId()); + cnd.and("db.delegationId", "=", db.getDelegationId()); + Sql sql = Sqls.create(""" + SELECT + db.*, + TIMESTAMPDIFF(YEAR, u.birthday, CURDATE()) AS age + FROM + teacher_congress_delegate db + LEFT JOIN `vw_user` u ON db.userId = u.id + $condition + """); + sql.setCondition(cnd); + List userData = baseService.listMap(sql); + return Result.success(Map.of("userData", userData, "userValue", userValue)); + } + + @At + @SaCheckPermission("executiveCommittee.delegationOnePush") + @SLog(tag = "执委会推选-团长推选委员", msg = "推选委员") + public Result addOnePush(@Param("userValue") String[] userValue, + String teacherMeetId) { + try { + Teacher_congress_delegate db = dao.fetch(Teacher_congress_delegate.class, + Cnd.where(Teacher_congress_delegate::getSessionId, "=", teacherMeetId) + .and(Teacher_congress_delegate::getUserId, "=", SecurityUtil.getUserId())); + if (ObjectUtil.isEmpty(db)) { + return Result.error("没有权限,只有代表团团长才能推选"); + } + + ExecutiveCommitteeConfig config = dao.fetch(ExecutiveCommitteeConfig.class, + Cnd.where("teacherMeetId", "=", teacherMeetId)); + if (ObjectUtil.isEmpty(config)) { + return Result.error("请先配置基础信息"); + } + if (config.getFirstStartTime().getTime() > System.currentTimeMillis()) { + return Result.error("请等待一次预选开始时间"); + } + if (config.getFirstEndTime().getTime() < System.currentTimeMillis()) { + return Result.error("一次预选已结束"); + } + List delegationQuotaList = config.getDelegationQuotaList(); + + NutMap delegationQuota = delegationQuotaList.stream().filter(v -> v.getString("delegationId").equals(db.getDelegationId())).findFirst().orElse(null); + if (ObjectUtil.isEmpty(delegationQuota)) { + return Result.error("请先配置代表团人数"); + } + + int dbCount = dao.count(ExecutiveCommitteeOnePush.class, + Cnd.where("delegationId", "=", db.getDelegationId()) + .and("teacherMeetId", "=", teacherMeetId) + .and("addType", "=", 1)); + if (dbCount + userValue.length > delegationQuota.getInt("quotaCount")) { + return Result.error("代表团人数限报" + delegationQuota.getInt("quotaCount") + "人"); + } + Sql sql = Sqls.create(""" + SELECT + t1.* + FROM + teacher_congress_delegate t1 + $condition + """); + Cnd cnd = Cnd.NEW(); + cnd.and("t1.sessionId", "=", teacherMeetId); + cnd.andEX("t1.userId", "in", userValue); + sql.setCondition(cnd); + List dbList = baseService.listMap(sql); + + + List list = new ArrayList<>(); + for (String id : userValue) { + NutMap jdhDb = dbList.stream().filter(v -> v.getString("userId").equals(id)).findFirst().orElse(null); + if (ObjectUtil.isEmpty(jdhDb)) { + return Result.error("请选择正确的代表!"); + } + ExecutiveCommitteeOnePush onePush = new ExecutiveCommitteeOnePush(); + onePush.setPushDate(DateUtil.date()); + onePush.setUserId(jdhDb.getString("userId")); + onePush.setUserName(jdhDb.getString("userName")); + onePush.setLoginName(jdhDb.getString("loginName")); + onePush.setDelegationId(jdhDb.getString("delegationId")); + onePush.setUnitId(jdhDb.getString("unitId")); + onePush.setTeacherMeetId(teacherMeetId); + String firstLetter = String.valueOf(getFirstLetter(jdhDb.getString("userName"))); + onePush.setFirstLetter(firstLetter); + onePush.setAddType(1); + list.add(onePush); + } + dao.insert(list); + return Result.success("添加成功!"); + } catch (Exception e) { + e.printStackTrace(); + return Result.error("添加失败!"); + } + } + + @At + @SaCheckPermission("executiveCommittee.delegationOnePush") + @SLog( tag = "执委会推选-团长推选委员", msg = "删除推选的人") + public Result doDelete(String id) { + ExecutiveCommitteeConfig config = dao.fetch(ExecutiveCommitteeConfig.class, Cnd.NEW()); + if (ObjectUtil.isEmpty(config)) { + return Result.error("请先配置基础信息"); + } + if (config.getFirstEndTime().getTime() < System.currentTimeMillis()) { + return Result.error("一次预选已结束不能删除!"); + } + int num = dao.clear(ExecutiveCommitteeOnePush.class, Cnd.where("id", "=", id)); + return num >= 0 ? Result.success() : Result.error(); + } + + + public static char getFirstLetter(String str) { + if (str == null || str.isEmpty()) { + throw new IllegalArgumentException("字符串不能为空"); + } + char firstChar = str.charAt(0); + if (Validator.isChinese(String.valueOf(firstChar))) { + return Character.toUpperCase(PinyinUtil.getPinyin(firstChar).charAt(0)); + } else if (Character.isLetter(firstChar)) { + return Character.toUpperCase(firstChar); + } else { + return firstChar; + } + } + + +} diff --git a/src/main/java/com/budwk/app/zhgh/democratic/executiveCommittee/controller/ExecutiveCommitteeDelegationTwoPushController.java b/src/main/java/com/budwk/app/zhgh/democratic/executiveCommittee/controller/ExecutiveCommitteeDelegationTwoPushController.java new file mode 100644 index 00000000..61dc95ce --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/democratic/executiveCommittee/controller/ExecutiveCommitteeDelegationTwoPushController.java @@ -0,0 +1,222 @@ +package com.budwk.app.zhgh.democratic.executiveCommittee.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import com.budwk.app.base.annotation.SLog; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.result.Result; +import com.budwk.app.base.service.BaseService; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.democratic.executiveCommittee.models.ExecutiveCommitteeConfig; +import com.budwk.app.zhgh.democratic.executiveCommittee.models.ExecutiveCommitteeTwoPush; +import com.budwk.app.zhgh.democratic.teachercongress.delegate.models.Teacher_congress_delegate; +import io.swagger.annotations.ApiOperation; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.ioc.aop.Aop; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.lang.Strings; +import org.nutz.lang.util.NutMap; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; +import org.nutz.mvc.annotation.Param; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @author zhf + * @date 2025/6/23 15:25 + * @description 团长二次推选 + */ +@At("/platform/executiveCommittee/delegationTwoPush") +@Ok("json:full") +@IocBean +public class ExecutiveCommitteeDelegationTwoPushController { + + + @Inject + private Dao dao; + + @Inject + private BaseService baseService; + + @At("/index") + @SaCheckPermission("executiveCommittee.delegationOnePush") + @Ok("beetl:/platform/zhgh/democratic/executiveCommittee/delegationTwoPush/index.html") + public void index() { + } + + @At + @ApiOperation("分页查询") + @SaCheckPermission("executiveCommittee.delegationTwoPush") + public Result pageData(PageForm pageForm, + String teacherMeetId, + String delegationId, + String unionId) { + Sql sql = Sqls.create(""" + SELECT + t1.*, + t2.loginName, + t2.userName, + t3.name AS unitName, + t4.name unionName, + t5.sex, + TIMESTAMPDIFF( + YEAR, + t5.birthday, + CURDATE()) AS age, + t6.name AS delegationName + FROM + `executive_committee_two_push` t1 + LEFT JOIN executive_committee_one_push t2 on t2.userId=t1.userId and t2.teacherMeetId=t1.teacherMeetId + LEFT JOIN sys_unit t3 ON t2.unitId = t3.id + LEFT JOIN `sys_union` t4 ON t4.id = t3.unionid + LEFT JOIN `vw_user` t5 ON t5.id = t1.userId + LEFT JOIN teacher_congress_delegation t6 ON t6.id = t2.delegationId + $condition + """); + Cnd cnd = Cnd.NEW(); + cnd.andEX("t1.pushUserId", "=", SecurityUtil.getUserId()); + cnd.andEX("t1.teacherMeetId", "=", teacherMeetId); + cnd.andEX("t2.delegationId", "=", delegationId); + cnd.andEX("t4.id", "=", unionId); + if (Strings.isNotBlank(pageForm.getSearchName()) && Strings.isNotBlank(pageForm.getSearchKeyword())) { + cnd.and(pageForm.getSearchName(), "LIKE", "%" + pageForm.getSearchKeyword() + "%"); + } + cnd.asc("t6.code").asc("t2.firstLetter"); + sql.setCondition(cnd); + return Result.success(baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql)); + } + + @At + @SaCheckPermission("executiveCommittee.delegationTwoPush") + @SLog(type = "执委会推选-团长二次推选", tag = "查询可以二次推选的名单", param = true, result = true) + public Result getDelegationUser(String teacherMeetId) { + Teacher_congress_delegate db = dao.fetch(Teacher_congress_delegate.class, + Cnd.where(Teacher_congress_delegate::getSessionId, "=", teacherMeetId) + .and(Teacher_congress_delegate::getUserId, "=", SecurityUtil.getUserId())); + if (ObjectUtil.isEmpty(db)) { + return Result.error("没有权限,只有代表团团长才能推选"); + } + ExecutiveCommitteeConfig config = dao.fetch(ExecutiveCommitteeConfig.class, + Cnd.where("teacherMeetId", "=", teacherMeetId)); + if (ObjectUtil.isEmpty(config)) { + return Result.error("请先配置基础信息"); + } + if (config.getSecondStartTime().getTime() > System.currentTimeMillis()) { + return Result.error("请等待二次预选开始时间"); + } + if (config.getSecondEndTime().getTime() < System.currentTimeMillis()) { + return Result.error("二次预选已结束"); + } + List userValue = dao.query(ExecutiveCommitteeTwoPush.class, + Cnd.where("teacherMeetId", "=", teacherMeetId) + .and("pushUserId", "=", SecurityUtil.getUserId())); + List userIds = userValue.stream().map(v -> v.getUserId()).collect(Collectors.toList()); + + Cnd cnd = Cnd.NEW(); + cnd.andEX("t1.teacherMeetId", "=", teacherMeetId); + cnd.andEX("t1.userId", "not in", userIds); + cnd.andEX("t1.userId", "!=", SecurityUtil.getUserId()); + Sql sql = Sqls.create(""" + SELECT + t1.*, + t2.sex, + TIMESTAMPDIFF( + YEAR, + t2.birthday, + CURDATE()) age + FROM + executive_committee_one_push t1 + LEFT JOIN `vw_user` t2 ON t1.userId = t2.id + $condition + """); + sql.setCondition(cnd); + List userData = baseService.listMap(sql); + return Result.success(Map.of("userData", userData, "userValue", userValue)); + } + + @At + @SaCheckPermission("executiveCommittee.delegationTwoPush") + @ApiOperation("推选委员") + @SLog(type = "executiveCommitteePreparatoryGroupPush", tag = "执委会推选-团长二次推选", msg = "推选委员") + public Result addOnePush(@Param("userValue") String[] userValue, + String teacherMeetId) { + try { + Teacher_congress_delegate db = dao.fetch(Teacher_congress_delegate.class, + Cnd.where(Teacher_congress_delegate::getSessionId, "=", teacherMeetId) + .and(Teacher_congress_delegate::getUserId, "=", SecurityUtil.getUserId())); + if (ObjectUtil.isEmpty(db)) { + return Result.error("没有权限,只有代表团团长才能推选"); + } + + ExecutiveCommitteeConfig config = dao.fetch(ExecutiveCommitteeConfig.class, + Cnd.where("teacherMeetId", "=", teacherMeetId)); + if (ObjectUtil.isEmpty(config)) { + return Result.error("请先配置基础信息"); + } + if (config.getSecondStartTime().getTime() > System.currentTimeMillis()) { + return Result.error("请等待二次预选开始时间"); + } + if (config.getSecondEndTime().getTime() < System.currentTimeMillis()) { + return Result.error("二次预选已结束"); + } + int dbCount = dao.count(ExecutiveCommitteeTwoPush.class, + Cnd.where("pushUserId", "=", SecurityUtil.getUserId()) + .and("teacherMeetId", "=", teacherMeetId)); + if (dbCount + userValue.length > config.getCommitteeQuotaCount()) { + return Result.error("人数限报" + config.getCommitteeQuotaCount() + "人"); + } + + List dbList = dao.query(Teacher_congress_delegate.class, + Cnd.where(Teacher_congress_delegate::getSessionId, "=", teacherMeetId) + .andEX(Teacher_congress_delegate::getUserId, "in", userValue)); + List list = new ArrayList<>(); + for (String id : userValue) { + Teacher_congress_delegate jdhDb = dbList.stream().filter(v -> v.getUserId().equals(id)).findFirst().orElse(null); + if (ObjectUtil.isEmpty(jdhDb)) { + return Result.error("请选择正确的代表!"); + } + ExecutiveCommitteeTwoPush twoPush = new ExecutiveCommitteeTwoPush(); + twoPush.setPushDate(DateUtil.date()); + twoPush.setUserId(id); + twoPush.setPushDelegationId(db.getDelegationId()); + twoPush.setPushUserId(SecurityUtil.getUserId()); + twoPush.setPushUserName(SecurityUtil.getUserUsername()); + twoPush.setPushLoginName(SecurityUtil.getUserLoginname()); + twoPush.setTeacherMeetId(teacherMeetId); + list.add(twoPush); + } + dao.insert(list); + return Result.success("添加成功!"); + } catch (Exception e) { + e.printStackTrace(); + return Result.error("添加失败!"); + } + } + + @At + @ApiOperation("删除推选人员") + @SaCheckPermission("executiveCommittee.delegationTwoPush") + @SLog(type = "executiveCommitteePreparatoryGroupPush", tag = "执委会推选-团长二次推选", msg = "删除推选人员") + public Result doDelete( String id) { + ExecutiveCommitteeConfig config = dao.fetch(ExecutiveCommitteeConfig.class, Cnd.NEW()); + if (ObjectUtil.isEmpty(config)) { + return Result.error("请先配置基础信息"); + } + if (config.getSecondEndTime().getTime() < System.currentTimeMillis()) { + return Result.error("二次预选已结束不能删除!"); + } + int num = dao.clear(ExecutiveCommitteeTwoPush.class, Cnd.where("id", "=", id)); + return num >= 0 ? Result.success() : Result.error(); + } + + +} diff --git a/src/main/java/com/budwk/app/zhgh/democratic/executiveCommittee/controller/ExecutiveCommitteeMemberController.java b/src/main/java/com/budwk/app/zhgh/democratic/executiveCommittee/controller/ExecutiveCommitteeMemberController.java new file mode 100644 index 00000000..e7ffb50a --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/democratic/executiveCommittee/controller/ExecutiveCommitteeMemberController.java @@ -0,0 +1,133 @@ +package com.budwk.app.zhgh.democratic.executiveCommittee.controller; + +import cn.afterturn.easypoi.excel.ExcelExportUtil; +import cn.afterturn.easypoi.excel.entity.ExportParams; +import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; +import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; +import cn.dev33.satoken.annotation.SaCheckPermission; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.result.Result; +import com.budwk.app.zhgh.democratic.executiveCommittee.param.ExecutiveCommitteePageForm; +import com.budwk.app.zhgh.democratic.executiveCommittee.service.ExecutiveCommitteeConfigService; +import com.budwk.app.zhgh.democratic.executiveCommittee.service.ExecutiveCommitteeMemberService; +import com.budwk.app.zhgh.enrollmentRegistration.vo.EnrollmentRegistrationPageForm; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.poi.ss.usermodel.Workbook; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.lang.util.NutMap; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; +import org.nutz.mvc.annotation.Param; + +import javax.servlet.http.HttpServletResponse; +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.List; + +/** + * @author zhf + * @date 2025/8/26 08:40 + * @description 委员会名单 + */ +@IocBean +@At("/platform/executiveCommittee/executiveCommitteeMember") +@Ok("json:full") +@Slf4j +@Api(tags = "两委会推选-委员会名单") +public class ExecutiveCommitteeMemberController { + + @Inject + private Dao dao; + @Inject + private ExecutiveCommitteeMemberService committeeMemberService; + + + @At("/index") + @SaCheckPermission("executiveCommittee.executiveCommitteeMember") + @Ok("beetl:/platform/zhgh/democratic/executiveCommittee/executiveCommitteeMember/index.html") + public void index() { + } + + + @At + @ApiOperation("分页查询") + @SaCheckPermission("executiveCommittee.executiveCommitteeMember") + public Result pageData(ExecutiveCommitteePageForm pageForm) { + Sql sql = committeeMemberService.getSql(pageForm); + Pagination pagination = committeeMemberService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + return Result.success(pagination); + } + + + @At + @ApiOperation("查询每个人的推选人") + @SaCheckPermission("executiveCommittee.executiveCommitteeMember") + public Result onView(String teacherMeetId, + String userId) { + Sql sql = Sqls.create(""" + select + tp.*, + u.unitName, + u.unionName, + u.sex, + u.mobile, + dbt.name as delegationName + from + executive_committee_two_push tp + left join vw_user u on u.id = tp.pushUserId + left join teacher_congress_delegation dbt on dbt.id = tp.pushDelegationId + $condition + """); + Cnd cnd = Cnd.NEW(); + cnd.and("tp.teacherMeetId", "=", teacherMeetId); + cnd.and("tp.userId", "=", userId); + cnd.desc("tp.pushDate"); + sql.setCondition(cnd); + List listMap = committeeMemberService.listMap(sql); + return Result.success(listMap); + } + + @At + @Ok("void") + @SaCheckPermission("executiveCommittee.executiveCommitteeMember") + public void doExportExcel(@Param("data") ExecutiveCommitteePageForm pageForm, HttpServletResponse response) { + + Sql sql = committeeMemberService.getSql(pageForm); + + List map = committeeMemberService.listMap(sql); + + try { + List entityList = new ArrayList<>(); + ExcelExportEntity no = new ExcelExportEntity("序号", "no", 10); + no.setFormat("isAddIndex"); + entityList.add(no); + + entityList.add(new ExcelExportEntity("姓名", "userName", 10)); + entityList.add(new ExcelExportEntity("工号", "loginName", 10)); + entityList.add(new ExcelExportEntity("性别", "sex", 10)); + entityList.add(new ExcelExportEntity("联系方式", "mobile", 20)); + entityList.add(new ExcelExportEntity("所属单位", "unitName", 20)); + entityList.add(new ExcelExportEntity("所属代表团", "delegationName", 20)); + entityList.add(new ExcelExportEntity("票数", "pushCount", 20)); + + response.setContentType("application/octet-stream"); + response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("委员会预选名单.xlsx", "UTF-8")); + ExportParams exportParams = new ExportParams(); + exportParams.setType(ExcelType.XSSF); + Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entityList, map); + workbook.write(response.getOutputStream()); + }catch (Exception e){ + e.printStackTrace(); + } + + } + +} diff --git a/src/main/java/com/budwk/app/zhgh/democratic/executiveCommittee/controller/ExecutiveCommitteePushController.java b/src/main/java/com/budwk/app/zhgh/democratic/executiveCommittee/controller/ExecutiveCommitteePushController.java new file mode 100644 index 00000000..f337d290 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/democratic/executiveCommittee/controller/ExecutiveCommitteePushController.java @@ -0,0 +1,221 @@ +package com.budwk.app.zhgh.democratic.executiveCommittee.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.lang.Validator; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.extra.pinyin.PinyinUtil; +import com.budwk.app.base.annotation.SLog; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.result.Result; +import com.budwk.app.base.service.BaseService; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.democratic.executiveCommittee.models.ExecutiveCommitteeConfig; +import com.budwk.app.zhgh.democratic.executiveCommittee.models.ExecutiveCommitteeOnePush; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.lang.Strings; +import org.nutz.lang.util.NutMap; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; +import org.nutz.mvc.annotation.Param; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @author zhf + * @date 2025/8/25 16:49 + * @description + */ +@IocBean +@At("/platform/executiveCommittee/preparatoryGroupPush") +@Ok("json:full") +@Slf4j +@Api(tags = "执委会推选-筹备组推选") +public class ExecutiveCommitteePushController { + + @Inject + private Dao dao; + @Inject + private BaseService baseService; + + @At("/index") + @SaCheckPermission("executiveCommittee.preparatoryGroupPush") + @Ok("beetl:/platform/zhgh/democratic/executiveCommittee/preparatoryGroupPush/index.html") + public void index() { + } + + @At + @ApiOperation("分页查询") + @SaCheckPermission("executiveCommittee.preparatoryGroupPush") + public Result pageData(PageForm pageForm, + String teacherMeetId, + String delegationId, + String unionId) { + Sql sql = Sqls.create(""" + SELECT + t1.*, + t2.name AS unitName, + t3.name unionName, + t4.sex, + TIMESTAMPDIFF( + YEAR, + t4.birthday, + CURDATE()) AS age, + t5.name AS delegationName + FROM + `executive_committee_one_push` t1 + LEFT JOIN sys_unit t2 ON t1.unitId = t2.id + LEFT JOIN `sys_union` t3 ON t3.id = t2.unionid + LEFT JOIN `vw_user` t4 ON t4.id = t1.userId + LEFT JOIN teacher_congress_delegation t5 ON t5.id = t1.delegationId + $condition + """); + Cnd cnd = Cnd.NEW(); + cnd.andEX("t1.teacherMeetId", "=", teacherMeetId); + cnd.andEX("t1.delegationId", "=", delegationId); + cnd.andEX("t3.id", "=", unionId); + cnd.andEX("t1.addType", "=", 2); + if (Strings.isNotBlank(pageForm.getSearchName()) && Strings.isNotBlank(pageForm.getSearchKeyword())) { + cnd.and(pageForm.getSearchName(), "LIKE", "%" + pageForm.getSearchKeyword() + "%"); + } + cnd.asc("t5.code").asc("t1.firstLetter"); + sql.setCondition(cnd); + return Result.success(baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql)); + } + + + @At + @SaCheckPermission("executiveCommittee.preparatoryGroupPush") + @ApiOperation("查询可以推选委员和已经推选的人员") + public Result getDelegationUser(String teacherMeetId) { + List userValue = dao.query(ExecutiveCommitteeOnePush.class, + Cnd.where("teacherMeetId", "=", teacherMeetId) + .and("addType", "=", 2)); + List onePushList = dao.query(ExecutiveCommitteeOnePush.class, Cnd.NEW()); + List userIds = onePushList.stream().map(ExecutiveCommitteeOnePush::getUserId).collect(Collectors.toList()); + + Cnd cnd = Cnd.NEW(); + cnd.andEX("db.sessionId", "=", teacherMeetId); + cnd.andEX("db.userId", "not in", userIds); + cnd.andEX("db.userId", "!=", SecurityUtil.getUserId()); + Sql sql = Sqls.create(""" + SELECT + db.*, + TIMESTAMPDIFF(YEAR, u.birthday, CURDATE()) AS age + FROM + teacher_congress_delegate db + LEFT JOIN `vw_user` u ON db.userId = u.id + $condition + """); + sql.setCondition(cnd); + List userData = baseService.listMap(sql); + return Result.success(Map.of("userData", userData, "userValue", userValue)); + } + + @At + @SaCheckPermission("executiveCommittee.preparatoryGroupPush") + @SLog(type = "executiveCommitteePreparatoryGroupPush", tag = "执委会推选-筹备组推选", msg = "推选委员") + public Result addOnePush(@Param("userValue") String[] userValue, + String teacherMeetId) { + try { + + ExecutiveCommitteeConfig config = dao.fetch(ExecutiveCommitteeConfig.class, + Cnd.where("teacherMeetId", "=", teacherMeetId)); + if (ObjectUtil.isEmpty(config)) { + return Result.error("请先配置基础信息"); + } + if (config.getFirstStartTime().getTime() > System.currentTimeMillis()) { + return Result.error("请等待一次预选开始时间"); + } + if (config.getFirstEndTime().getTime() < System.currentTimeMillis()) { + return Result.error("一次预选已结束"); + } + + int dbCount = dao.count(ExecutiveCommitteeOnePush.class, + Cnd.where("teacherMeetId", "=", teacherMeetId) + .and("addType", "=", 2)); + if (dbCount + userValue.length > config.getPrepareGroupQuotaCount()) { + return Result.error("人数限报" + config.getPrepareGroupQuotaCount() + "人"); + } + + Sql sql = Sqls.create(""" + SELECT + t1.* + FROM + teacher_congress_delegate t1 + $condition + """); + Cnd cnd = Cnd.NEW(); + cnd.and("t1.sessionId", "=", teacherMeetId); + cnd.andEX("t1.userId", "in", userValue); + sql.setCondition(cnd); + List dbList = baseService.listMap(sql); + + List list = new ArrayList<>(); + for (String id : userValue) { + NutMap jdhDb = dbList.stream().filter(v -> v.getString("userId").equals(id)).findFirst().orElse(null); + if (ObjectUtil.isEmpty(jdhDb)) { + return Result.error("请选择正确的代表!"); + } + ExecutiveCommitteeOnePush onePush = new ExecutiveCommitteeOnePush(); + onePush.setPushDate(DateUtil.date()); + onePush.setUserId(jdhDb.getString("userId")); + onePush.setUserName(jdhDb.getString("userName")); + onePush.setLoginName(jdhDb.getString("loginName")); + onePush.setDelegationId(jdhDb.getString("delegationId")); + onePush.setUnitId(jdhDb.getString("unitId")); + onePush.setTeacherMeetId(teacherMeetId); + String firstLetter = String.valueOf(getFirstLetter(jdhDb.getString("userName"))); + onePush.setFirstLetter(firstLetter); + onePush.setAddType(2); + list.add(onePush); + } + dao.insert(list); + return Result.success("添加成功!"); + } catch (Exception e) { + e.printStackTrace(); + return Result.error("添加失败!"); + } + } + + @At + @SaCheckPermission("executiveCommittee.preparatoryGroupPush") + @SLog(type = "executiveCommitteePreparatoryGroupPush", tag = "执委会推选-筹备组推选", msg = "删除推选的人") + public Result doDelete(String id) { + ExecutiveCommitteeConfig config = dao.fetch(ExecutiveCommitteeConfig.class, Cnd.NEW()); + if (ObjectUtil.isEmpty(config)) { + return Result.error("请先配置基础信息"); + } + int num = dao.clear(ExecutiveCommitteeOnePush.class, Cnd.where("id", "=", id)); + return num >= 0 ? Result.success() : Result.error(); + } + + + public static char getFirstLetter(String str) { + if (str == null || str.isEmpty()) { + throw new IllegalArgumentException("字符串不能为空"); + } + char firstChar = str.charAt(0); + if (Validator.isChinese(String.valueOf(firstChar))) { + return Character.toUpperCase(PinyinUtil.getPinyin(firstChar).charAt(0)); + } else if (Character.isLetter(firstChar)) { + return Character.toUpperCase(firstChar); + } else { + return firstChar; + } + } + + + +} diff --git a/src/main/java/com/budwk/app/zhgh/democratic/executiveCommittee/models/ExecutiveCommitteeConfig.java b/src/main/java/com/budwk/app/zhgh/democratic/executiveCommittee/models/ExecutiveCommitteeConfig.java new file mode 100644 index 00000000..0f599436 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/democratic/executiveCommittee/models/ExecutiveCommitteeConfig.java @@ -0,0 +1,79 @@ +package com.budwk.app.zhgh.democratic.executiveCommittee.models; + +import cn.hutool.core.date.DateTime; +import com.budwk.app.base.model.BaseModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.nutz.dao.entity.annotation.*; +import org.nutz.dao.interceptor.annotation.PrevInsert; +import org.nutz.lang.util.NutMap; + +import java.io.Serializable; +import java.util.List; + +/** + * @ClassName ExecutiveCommitteeConfig + * @Author JyuHsin + * @Date 2025/6/20 15:30 + * @Version 1.0 + * @Description TODO + */ +@Data +@EqualsAndHashCode(callSuper = true) +@Table("executive_committee_config") +@TableMeta("{'mysql-charset':'utf8mb4'}") +@Comment("执委会成员推选配置表") +public class ExecutiveCommitteeConfig extends BaseModel implements Serializable { + + @Name + @Comment("ID") + @ColDefine(type = ColType.VARCHAR, width = 32) + @PrevInsert(uu32 = true) + private String id; + + @Column + @Comment("所属教代会ID") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String teacherMeetId; + + @Column + @Comment("筹备组推荐名额数") + @ColDefine(type = ColType.INT) + private Integer prepareGroupQuotaCount; + + @Column + @Comment("委员会预选人数") + @ColDefine(type = ColType.INT) + private Integer committeeQuotaCount; + + @Column + @Comment("代表团推荐名额总数") + @ColDefine(type = ColType.INT) + private Integer delegationQuotaCount; + + @Column + @Comment("一次预选开始时间") + @ColDefine(type = ColType.DATETIME) + private DateTime firstStartTime; + + @Column + @Comment("一次预选结束时间") + @ColDefine(type = ColType.DATETIME) + private DateTime firstEndTime; + + @Column + @Comment("二次预选开始时间") + @ColDefine(type = ColType.DATETIME) + private DateTime secondStartTime; + + @Column + @Comment("二次预选结束时间") + @ColDefine(type = ColType.DATETIME) + private DateTime secondEndTime; + + @Column + @Comment("各代表团名额数") + @ColDefine(type = ColType.MYSQL_JSON) + private List delegationQuotaList; + +} diff --git a/src/main/java/com/budwk/app/zhgh/democratic/executiveCommittee/models/ExecutiveCommitteeOnePush.java b/src/main/java/com/budwk/app/zhgh/democratic/executiveCommittee/models/ExecutiveCommitteeOnePush.java new file mode 100644 index 00000000..9c9961ad --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/democratic/executiveCommittee/models/ExecutiveCommitteeOnePush.java @@ -0,0 +1,85 @@ +package com.budwk.app.zhgh.democratic.executiveCommittee.models; + +import cn.hutool.core.date.DateTime; +import com.budwk.app.base.model.BaseModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.nutz.dao.entity.annotation.*; +import org.nutz.dao.interceptor.annotation.PrevInsert; + +import java.io.Serializable; + +/** + * @author zhf + * @date 2025/6/20 16:16 + * @description 执委会成员推选表 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@Table("executive_committee_one_push") +@TableMeta("{'mysql-charset':'utf8mb4'}") +@Comment("执委会成员推选表") +public class ExecutiveCommitteeOnePush extends BaseModel implements Serializable { + + @Name + @Comment("ID") + @ColDefine(type = ColType.VARCHAR, width = 32) + @PrevInsert(uu32 = true) + private String id; + + @Column + @Comment("代表用户ID") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String userId; + + @Column + @Comment("所属教代会ID") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String teacherMeetId; + + @Column + @Comment("所属代表团") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String delegationId; + + @Column + @Comment("姓名") + @ColDefine(type = ColType.VARCHAR, width = 20) + private String userName; + + @Column + @Comment("工号") + @ColDefine(type = ColType.VARCHAR, width = 20) + private String loginName; + + @Column + @Comment("职称") + @ColDefine(type = ColType.VARCHAR, width = 100) + private String jobTitle; + + @Column + @Comment("职称级别") + @ColDefine(type = ColType.VARCHAR, width = 100) + private String jobTitleLevel; + + @Column + @Comment("单位ID") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String unitId; + + @Column + @Comment("推选时间") + @ColDefine(type = ColType.DATETIME) + private DateTime pushDate; + + @Column + @Comment("姓氏排序") + @ColDefine(type = ColType.VARCHAR, width = 20) + private String firstLetter; + + @Column + @Comment("设置类型(1.团长2.筹备组加的)") + @ColDefine(type = ColType.INT) + private Integer addType; + +} diff --git a/src/main/java/com/budwk/app/zhgh/democratic/executiveCommittee/models/ExecutiveCommitteeTwoPush.java b/src/main/java/com/budwk/app/zhgh/democratic/executiveCommittee/models/ExecutiveCommitteeTwoPush.java new file mode 100644 index 00000000..5a92fcf3 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/democratic/executiveCommittee/models/ExecutiveCommitteeTwoPush.java @@ -0,0 +1,64 @@ +package com.budwk.app.zhgh.democratic.executiveCommittee.models; + +import cn.hutool.core.date.DateTime; +import com.budwk.app.base.model.BaseModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.nutz.dao.entity.annotation.*; +import org.nutz.dao.interceptor.annotation.PrevInsert; + +import java.io.Serializable; + +/** + * @author zhf + * @date 2025/6/20 17:10 + * @description 二次推选 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@Table("executive_committee_two_push") +@TableMeta("{'mysql-charset':'utf8mb4'}") +@Comment("执委会成员推选表") +public class ExecutiveCommitteeTwoPush extends BaseModel implements Serializable { + + @Name + @Comment("ID") + @ColDefine(type = ColType.VARCHAR, width = 32) + @PrevInsert(uu32 = true) + private String id; + + @Column + @Comment("代表用户ID") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String userId; + + @Column + @Comment("所属教代会ID") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String teacherMeetId; + + @Column + @Comment("推选的代表团") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String pushDelegationId; + + @Column + @Comment("推选人") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String pushUserId; + + @Column + @Comment("姓名") + @ColDefine(type = ColType.VARCHAR, width = 20) + private String pushUserName; + + @Column + @Comment("工号") + @ColDefine(type = ColType.VARCHAR, width = 20) + private String pushLoginName; + + @Column + @Comment("推选时间") + @ColDefine(type = ColType.DATETIME) + private DateTime pushDate; +} diff --git a/src/main/java/com/budwk/app/zhgh/democratic/executiveCommittee/param/ExecutiveCommitteePageForm.java b/src/main/java/com/budwk/app/zhgh/democratic/executiveCommittee/param/ExecutiveCommitteePageForm.java new file mode 100644 index 00000000..aa7e3d7c --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/democratic/executiveCommittee/param/ExecutiveCommitteePageForm.java @@ -0,0 +1,18 @@ +package com.budwk.app.zhgh.democratic.executiveCommittee.param; + +import com.budwk.app.base.param.PageForm; +import lombok.Data; + +/** + * @author zhf + * @date 2025/8/26 09:27 + * @description + */ +@Data +public class ExecutiveCommitteePageForm extends PageForm { + + private String teacherMeetId; + private String delegationId; + private String unionId; + private String unitId; +} diff --git a/src/main/java/com/budwk/app/zhgh/democratic/executiveCommittee/service/ExecutiveCommitteeConfigService.java b/src/main/java/com/budwk/app/zhgh/democratic/executiveCommittee/service/ExecutiveCommitteeConfigService.java new file mode 100644 index 00000000..c808ccb7 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/democratic/executiveCommittee/service/ExecutiveCommitteeConfigService.java @@ -0,0 +1,15 @@ +package com.budwk.app.zhgh.democratic.executiveCommittee.service; + + +import com.budwk.app.base.service.BaseService; +import com.budwk.app.zhgh.democratic.executiveCommittee.models.ExecutiveCommitteeConfig; + +/** + * @ClassName ExecutiveCommitteeConfigService + * @Author JyuHsin + * @Date 2025/6/20 15:31 + * @Version 1.0 + * @Description TODO + */ +public interface ExecutiveCommitteeConfigService extends BaseService { +} diff --git a/src/main/java/com/budwk/app/zhgh/democratic/executiveCommittee/service/ExecutiveCommitteeMemberService.java b/src/main/java/com/budwk/app/zhgh/democratic/executiveCommittee/service/ExecutiveCommitteeMemberService.java new file mode 100644 index 00000000..73bad827 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/democratic/executiveCommittee/service/ExecutiveCommitteeMemberService.java @@ -0,0 +1,12 @@ +package com.budwk.app.zhgh.democratic.executiveCommittee.service; + +import com.budwk.app.base.service.BaseService; +import com.budwk.app.zhgh.democratic.executiveCommittee.param.ExecutiveCommitteePageForm; +import org.nutz.dao.sql.Sql; + +public interface ExecutiveCommitteeMemberService extends BaseService { + + + + Sql getSql(ExecutiveCommitteePageForm pageForm); +} diff --git a/src/main/java/com/budwk/app/zhgh/democratic/executiveCommittee/service/impl/ExecutiveCommitteeConfigServiceImpl.java b/src/main/java/com/budwk/app/zhgh/democratic/executiveCommittee/service/impl/ExecutiveCommitteeConfigServiceImpl.java new file mode 100644 index 00000000..d81de32d --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/democratic/executiveCommittee/service/impl/ExecutiveCommitteeConfigServiceImpl.java @@ -0,0 +1,22 @@ +package com.budwk.app.zhgh.democratic.executiveCommittee.service.impl; + +import com.budwk.app.base.service.impl.BaseServiceImpl; +import com.budwk.app.zhgh.democratic.executiveCommittee.models.ExecutiveCommitteeConfig; +import com.budwk.app.zhgh.democratic.executiveCommittee.service.ExecutiveCommitteeConfigService; +import org.nutz.dao.Dao; +import org.nutz.ioc.loader.annotation.IocBean; + +/** + * @ClassName ExecutiveCommitteeConfigServiceImpl + * @Author JyuHsin + * @Date 2025/6/20 15:31 + * @Version 1.0 + * @Description TODO + */ +@IocBean(args = {"refer:dao"}) +public class ExecutiveCommitteeConfigServiceImpl extends BaseServiceImpl implements ExecutiveCommitteeConfigService { + + public ExecutiveCommitteeConfigServiceImpl(Dao dao) { + super(dao); + } +} diff --git a/src/main/java/com/budwk/app/zhgh/democratic/executiveCommittee/service/impl/ExecutiveCommitteeMemberServiceImpl.java b/src/main/java/com/budwk/app/zhgh/democratic/executiveCommittee/service/impl/ExecutiveCommitteeMemberServiceImpl.java new file mode 100644 index 00000000..2a506c5f --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/democratic/executiveCommittee/service/impl/ExecutiveCommitteeMemberServiceImpl.java @@ -0,0 +1,61 @@ +package com.budwk.app.zhgh.democratic.executiveCommittee.service.impl; + +import com.budwk.app.base.service.impl.BaseServiceImpl; +import com.budwk.app.zhgh.democratic.executiveCommittee.param.ExecutiveCommitteePageForm; +import com.budwk.app.zhgh.democratic.executiveCommittee.service.ExecutiveCommitteeMemberService; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.lang.Strings; + +/** + * @author zhf + * @date 2025/8/26 09:22 + * @description + */ +@IocBean(args = {"refer:dao"}) +public class ExecutiveCommitteeMemberServiceImpl extends BaseServiceImpl implements ExecutiveCommitteeMemberService { + public ExecutiveCommitteeMemberServiceImpl(Dao dao) { + super(dao); + } + + @Override + public Sql getSql(ExecutiveCommitteePageForm pageForm) { + + Sql sql = Sqls.create(""" + SELECT + op.*, + u.sex, + it.name unitName, + un.name unionName, + u.mobile, + dbt.name as delegationName, + TIMESTAMPDIFF( + YEAR, + u.birthday, + CURDATE()) AS age, + ( SELECT count( 1 ) FROM executive_committee_two_push tp WHERE tp.userId = op.userId ) as pushCount + FROM + executive_committee_one_push op + LEFT JOIN sys_unit it ON op.unitId = it.id + LEFT JOIN `sys_union` un ON it.unionid = un.id + left join vw_user u on op.userId = u.id + left join teacher_congress_delegation dbt on dbt.id = op.delegationId + $condition + """); + Cnd cnd = Cnd.NEW(); + cnd.and("op.teacherMeetId", "=", pageForm.getTeacherMeetId()); + cnd.andEX("op.unitId", "=", pageForm.getUnitId()); + cnd.andEX("it.unionid", "=", pageForm.getUnionId()); + cnd.andEX("op.delegationId", "=", pageForm.getDelegationId()); + if (Strings.isNotBlank(pageForm.getSearchName()) && Strings.isNotBlank(pageForm.getSearchKeyword())) { + cnd.and(pageForm.getSearchName(), "LIKE", "%" + pageForm.getSearchKeyword() + "%"); + } + cnd.desc("pushCount"); + cnd.asc("op.firstLetter"); + sql.setCondition(cnd); + return sql; + } +} diff --git a/src/main/java/com/budwk/app/zhgh/democratic/teachercongress/prepare/controller/TeacherCongressQuotaAllocationController.java b/src/main/java/com/budwk/app/zhgh/democratic/teachercongress/prepare/controller/TeacherCongressQuotaAllocationController.java new file mode 100644 index 00000000..f9cef59f --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/democratic/teachercongress/prepare/controller/TeacherCongressQuotaAllocationController.java @@ -0,0 +1,130 @@ +package com.budwk.app.zhgh.democratic.teachercongress.prepare.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.result.Result; +import com.budwk.app.base.service.BaseService; +import com.budwk.app.zhgh.democratic.teachercongress.prepare.models.Teacher_congress_quota_allocation; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.nutz.aop.interceptor.ioc.TransAop; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.ioc.aop.Aop; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.lang.util.NutMap; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; +import org.nutz.mvc.annotation.Param; + +import java.util.List; + +/** + * @author zhf + * @date 2025/8/26 14:11 + * @description 代表名额分配 + */ +@IocBean +@At("/platform/teacherCongress/prepare/quotaAllocation") +@Ok("json:full") +@Api(tags = "教代会届次管理") +public class TeacherCongressQuotaAllocationController { + + + @Inject + private BaseService baseService; + + @Inject + private Dao dao; + + @At("/index") + @Ok("beetl:/platform/zhgh/democratic/teachercongress/prepare/quotaAllocation/index.html") + @SaCheckPermission("tc.prepare.quotaAllocation") + public void index() { + } + + + @At + @SaCheckPermission("tc.prepare.quotaAllocation") + @ApiOperation(value = "分工会列表") + public Result pageData(String unionId, String sessionId) { + + Sql sql = Sqls.create(""" + SELECT + un.NAME AS unionName, + tcqa.allocationNum, + tcqa.ratio, + tcqa.seniorTeaNum, + tcqa.ordinaryTeaNum, + tcqa.femaleNum, + tcqa.less45Num, + COALESCE(u_count, 0) AS memberCount, + COALESCE(db_count, 0) AS dbCount + FROM + sys_union un + LEFT JOIN teacher_congress_quota_allocation tcqa ON tcqa.sessionId = @sessionId + AND tcqa.unionId = un.id + LEFT JOIN (SELECT unionId, COUNT(id) AS u_count FROM vw_user WHERE member = 1 GROUP BY unionId) u ON u.unionId = un.id + LEFT JOIN (SELECT unionId, COUNT(id) AS db_count FROM teacher_congress_delegate WHERE sessionId = @sessionId GROUP BY unionId) db ON db.unionId = un.id + $condition + """).setParam("sessionId", sessionId); + Cnd cnd = Cnd.NEW(); + cnd.andEX("un.id", "=", unionId); + cnd.groupBy("un.id"); + cnd.asc("un.unionCode"); + sql.setCondition(cnd); + List list = baseService.listMap(sql); + return Result.success(list); + } + + + @At + @SaCheckPermission("tc.prepare.quotaAllocation") + @ApiOperation(value = "分工会列表") + public Result getUnionLimit(String sessionId) { + Sql sql = Sqls.create(""" + SELECT + un.id AS unionId, + un.`name` AS unionName, + un.unionCode, + COALESCE(u_count, 0) AS memberCount, + t2.sessionId, + t2.allocationNum, + t2.ratio, + t2.seniorTeaNum, + t2.ordinaryTeaNum, + t2.femaleNum, + t2.less45Num + FROM + `sys_union` un + LEFT JOIN (SELECT unionId, COUNT(id) AS u_count FROM vw_user WHERE member = 1 GROUP BY unionId) u ON u.unionId = un.id + LEFT JOIN teacher_congress_quota_allocation t2 ON t2.unionId = un.id + AND t2.sessionId = @sessionId + ORDER BY + un.unionCode + """); + sql.setParam("sessionId", sessionId); + List nutMaps = baseService.listMap(sql); + return Result.success(nutMaps); + } + + + @At + @SaCheckPermission("tc.prepare.quotaAllocation") + @ApiOperation("添加分配") + @Aop(TransAop.READ_COMMITTED) + public Result doQuotaAllocation(@Param("list")Teacher_congress_quota_allocation[] list,String sessionId){ + + dao.clear(Teacher_congress_quota_allocation.class, + Cnd.where(Teacher_congress_quota_allocation::getSessionId, "=", sessionId)); + for (Teacher_congress_quota_allocation quotaAllocation : list) { + quotaAllocation.setSessionId(sessionId); + } + dao.insert(list); + return Result.success(); + } + +} diff --git a/src/main/java/com/budwk/app/zhgh/democratic/teachercongress/prepare/models/Teacher_congress_quota_allocation.java b/src/main/java/com/budwk/app/zhgh/democratic/teachercongress/prepare/models/Teacher_congress_quota_allocation.java new file mode 100644 index 00000000..195dc814 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/democratic/teachercongress/prepare/models/Teacher_congress_quota_allocation.java @@ -0,0 +1,76 @@ +package com.budwk.app.zhgh.democratic.teachercongress.prepare.models; + +import com.budwk.app.base.model.BaseModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.nutz.dao.entity.annotation.*; +import org.nutz.dao.interceptor.annotation.PrevInsert; + +/** + * @author zhf + * @date 2025/8/26 14:35 + * @description 名额分配 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@Table("teacher_congress_quota_allocation") +@TableMeta("{'mysql-charset':'utf8mb4'}") +@Comment("名额分配") +public class Teacher_congress_quota_allocation extends BaseModel { + + + @Name + @Comment("ID") + @ColDefine(type = ColType.VARCHAR, width = 32) + @PrevInsert(uu32 = true) + private String id; + + @Column + @Comment("教代会ID") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String sessionId; + + @Column + @Comment("分工会ID") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String unionId; + + @Column + @Comment("名额分配数") + @ColDefine(type = ColType.INT, width = 4) + @Default("0") + private Integer allocationNum; + + @Column + @Comment("名额分配比例") + @ColDefine(type = ColType.DOUBLE, width = 4) + @Default("0") + private Double ratio; + + @Column + @Comment("高级职称专任教师代表数") + @ColDefine(type = ColType.INT, width = 4) + @Default("0") + private Integer seniorTeaNum; + + @Column + @Comment("专任教师代表数") + @ColDefine(type = ColType.INT, width = 4) + @Default("0") + private Integer ordinaryTeaNum; + + @Column + @Comment("女代表数") + @ColDefine(type = ColType.INT, width = 4) + @Default("0") + private Integer femaleNum; + + @Column + @Comment("45岁以下代表数") + @ColDefine(type = ColType.INT, width = 4) + @Default("0") + private Integer less45Num; + + + +} diff --git a/src/main/java/com/budwk/app/zhgh/enrollmentRegistration/controller/EnrollmentRegistrationApplyController.java b/src/main/java/com/budwk/app/zhgh/enrollmentRegistration/controller/EnrollmentRegistrationApplyController.java new file mode 100644 index 00000000..fb13863e --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/enrollmentRegistration/controller/EnrollmentRegistrationApplyController.java @@ -0,0 +1,152 @@ +package com.budwk.app.zhgh.enrollmentRegistration.controller; + +import cn.dev33.satoken.annotation.SaCheckLogin; +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.lang.Dict; +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.annotation.SLog; +import com.budwk.app.base.result.Result; +import com.budwk.app.base.service.BaseService; +import com.budwk.app.flow.constant.FlowConst; +import com.budwk.app.flow.engine.FlowEngine; +import com.budwk.app.flow.entity.ProcessInstance; +import com.budwk.app.flow.entity.ProcessTask; +import com.budwk.app.flow.enums.ProcessSubmitTypeEnum; +import com.budwk.app.sys.models.Sys_user; +import com.budwk.app.sys.views.View_user; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.enrollmentRegistration.model.EnrollmentRegistration; +import com.budwk.app.zhgh.outlay.activityBudget.models.ActivityBudget; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nutz.dao.Cnd; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.lang.util.NutMap; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; +import org.nutz.mvc.annotation.Param; + +import java.util.List; + +/** + * @author zhf + * @date 2025/8/21 16:16 + * @description 子女入学登记 + */ +@IocBean +@At("/platform/enrollmentRegistration/apply") +@Ok("json:full") +@Slf4j +@Api(tags = "子女入学登记填写") +public class EnrollmentRegistrationApplyController { + + + @Inject + private BaseService baseService; + + @Inject + private FlowEngine flowEngine; + + @At("/index") + @Ok("beetl:/platform/zhgh/enrollmentRegistration/apply/index.html") + @SaCheckPermission("enrollmentRegistration.apply") + public void index() { + } + + + @At + @ApiOperation("查询可以登记的计划") + @SaCheckPermission("enrollmentRegistration.apply") + public Result getEnrollmentRegistrationPlan() { + Sql sql = Sqls.create(""" + SELECT + plan.*, + dict.`name` registrationTypeName + FROM + `enrollment_registration_plan` plan + LEFT JOIN sys_dict dict ON dict.`code` = plan.registrationType + WHERE + NOW() BETWEEN plan.startTime + AND plan.endTime + """); + List map = baseService.listMap(sql); + return Result.success(map); + } + + @At + @SaCheckPermission("enrollmentRegistration.apply") + @ApiOperation("保存申请") + @SLog(type = "enrollmentRegistrationApply", tag = "子女入学管理-子女入学登记", msg = "保存子女入学登记") + public Result save(@Param("data") EnrollmentRegistration enrollmentRegistration) { + View_user user = baseService.dao().fetch(View_user.class, Cnd.where("id", "=", SecurityUtil.getUserId())); + enrollmentRegistration.setUserId(SecurityUtil.getUserId()); + enrollmentRegistration.setLoginName(SecurityUtil.getUserLoginname()); + enrollmentRegistration.setUserName(SecurityUtil.getUserUsername()); + enrollmentRegistration.setUnitId(SecurityUtil.getUnitId()); + enrollmentRegistration.setUnitName(user.getUnitName()); + enrollmentRegistration.setUnionId(SecurityUtil.getUnionId()); + enrollmentRegistration.setUnionName(user.getUnionName()); + enrollmentRegistration.setApplyTime(DateUtil.now()); + baseService.insertOrUpdate(enrollmentRegistration); + return Result.success(); + } + + @At + @SaCheckPermission("enrollmentRegistration.apply") + @ApiOperation("提交申请") + @SLog(type = "enrollmentRegistrationApply", tag = "子女入学管理-子女入学登记", msg = "提交子女入学登记") + public Result submit(@Param("data") EnrollmentRegistration enrollmentRegistration) { + if (StrUtil.isBlank(enrollmentRegistration.getId())) { + View_user user = baseService.dao().fetch(View_user.class, Cnd.where("id", "=", SecurityUtil.getUserId())); + enrollmentRegistration.setUserId(SecurityUtil.getUserId()); + enrollmentRegistration.setLoginName(SecurityUtil.getUserLoginname()); + enrollmentRegistration.setUserName(SecurityUtil.getUserUsername()); + enrollmentRegistration.setUnitId(SecurityUtil.getUnitId()); + enrollmentRegistration.setUnitName(user.getUnitName()); + enrollmentRegistration.setUnionId(SecurityUtil.getUnionId()); + enrollmentRegistration.setUnionName(user.getUnionName()); + enrollmentRegistration.setApplyTime(DateUtil.now()); + } + baseService.insertOrUpdate(enrollmentRegistration); + // 开启流程实例 + Dict args = Dict.create(); + args.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.APPLY.getCode()); + args.set(FlowConst.FORM_DATA, enrollmentRegistration); + ProcessInstance instance = flowEngine.startProcessInstanceByKey("ZNRXDJ", enrollmentRegistration.getId(), SecurityUtil.getUserId(), args); + + // 自动完成第一个申请任务 + List doingTaskList = flowEngine.processTaskService().getDoingTaskList(instance.getId(), null); + for (ProcessTask task : doingTaskList) { + flowEngine.executeProcessTask(task.getId(), SecurityUtil.getUserId(), args); + } + return Result.success(); + } + + + @At + @SaCheckLogin + @ApiOperation("查询身份证是否重复") + public Result getIsRepeatByIdCard(String idCard, String id) { + int count = baseService.dao().count(EnrollmentRegistration.class, + Cnd.where(EnrollmentRegistration::getChildrenIdCard, "=", idCard) + .and("YEAR(applyTime)", "=", DateUtil.thisYear()) + .andEX(EnrollmentRegistration::getId, "!=", id)); + + + return Result.success(count); + } + + + @At + @SaCheckLogin + public Result findOne(String id) { + return Result.success(baseService.dao().fetch(EnrollmentRegistration.class, id)); + } + + +} diff --git a/src/main/java/com/budwk/app/zhgh/enrollmentRegistration/controller/EnrollmentRegistrationApplyListController.java b/src/main/java/com/budwk/app/zhgh/enrollmentRegistration/controller/EnrollmentRegistrationApplyListController.java new file mode 100644 index 00000000..417d00f8 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/enrollmentRegistration/controller/EnrollmentRegistrationApplyListController.java @@ -0,0 +1,86 @@ +package com.budwk.app.zhgh.enrollmentRegistration.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.result.Result; +import com.budwk.app.base.service.BaseService; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nutz.dao.Cnd; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; + +/** + * @author zhf + * @date 2025/8/22 15:13 + * @description 子女入学我的登记 + */ +@IocBean +@At("/platform/enrollmentRegistration/applyList") +@Ok("json:full") +@Slf4j +@Api(tags = "子女入学我的登记") +public class EnrollmentRegistrationApplyListController { + + @Inject + private BaseService baseService; + + + + @At("/index") + @Ok("beetl:/platform/zhgh/enrollmentRegistration/applyList/index.html") + @SaCheckPermission("enrollmentRegistration.applyList") + public void index() { + } + + @At + @ApiOperation("分页查询") + @SaCheckPermission("enrollmentRegistration.applyList") + public Result pageData(PageForm pageForm, Integer year) { + + + Sql sql = Sqls.create(""" + SELECT + 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 + enrollment_registration info + 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_actor ta ON ta.processTaskId = t.id + $condition + """); + Cnd cnd = Cnd.NEW(); + cnd.andEX("YEAR(info.applyTime)", "=", year); + cnd.and("info.userId", "=", SecurityUtil.getUserId()); + sql.setCondition(cnd); + Pagination pagination = baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + return Result.success(pagination); + } + + + +} diff --git a/src/main/java/com/budwk/app/zhgh/enrollmentRegistration/controller/EnrollmentRegistrationPlanController.java b/src/main/java/com/budwk/app/zhgh/enrollmentRegistration/controller/EnrollmentRegistrationPlanController.java new file mode 100644 index 00000000..cc2a1667 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/enrollmentRegistration/controller/EnrollmentRegistrationPlanController.java @@ -0,0 +1,75 @@ +package com.budwk.app.zhgh.enrollmentRegistration.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import com.budwk.app.base.annotation.SLog; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.result.Result; +import com.budwk.app.base.service.BaseService; +import com.budwk.app.zhgh.enrollmentRegistration.model.EnrollmentRegistrationPlan; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nutz.aop.interceptor.ioc.TransAop; +import org.nutz.dao.Cnd; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.ioc.aop.Aop; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; +import org.nutz.mvc.annotation.Param; + +/** + * @author zhf + * @date 2025/8/21 10:38 + * @description 子女入学登记计划 + */ +@IocBean +@At("/platform/enrollmentRegistration/plan") +@Ok("json:full") +@Slf4j +@Api(tags = "子女入学登记计划") +public class EnrollmentRegistrationPlanController { + + + @Inject + private BaseService baseService; + + @At("/index") + @Ok("beetl:/platform/zhgh/enrollmentRegistration/plan/index.html") + @SaCheckPermission("enrollmentRegistration.plan") + public void index() { + } + + @At + @ApiOperation("分页查询") + @SaCheckPermission("enrollmentRegistration.plan") + public Result pageData(PageForm pageForm, String year) { + + Sql sql = Sqls.create(""" + SELECT * FROM `enrollment_registration_plan` $condition + """); + Cnd cnd = Cnd.NEW(); + cnd.and(EnrollmentRegistrationPlan::getYear, "=", year); + sql.setCondition(cnd); + Pagination pagination = baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + return Result.success(pagination); + } + + + @At + @ApiOperation("提交登记计划") + @SaCheckPermission("enrollmentRegistration.plan") + @Aop(TransAop.READ_COMMITTED) + @SLog(type = "outlayReimburseApply", tag = "子女入学管理-登记计划", msg = "提交登记计划") + public Result onSubmit(@Param("data") EnrollmentRegistrationPlan enrollmentRegistrationPlan) { + baseService.insertOrUpdate(enrollmentRegistrationPlan); + + return Result.success(); + + } + + +} diff --git a/src/main/java/com/budwk/app/zhgh/enrollmentRegistration/controller/EnrollmentRegistrationSchoolAuditController.java b/src/main/java/com/budwk/app/zhgh/enrollmentRegistration/controller/EnrollmentRegistrationSchoolAuditController.java new file mode 100644 index 00000000..ab44ec8c --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/enrollmentRegistration/controller/EnrollmentRegistrationSchoolAuditController.java @@ -0,0 +1,115 @@ +package com.budwk.app.zhgh.enrollmentRegistration.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.result.Result; +import com.budwk.app.base.service.BaseService; +import com.budwk.app.base.utils.PageUtil; +import com.budwk.app.flow.enums.ProcessTaskStateEnum; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nutz.dao.Cnd; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.lang.util.NutMap; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; + +import java.util.List; + +/** + * @author zhf + * @date 2025/8/22 16:27 + * @description 校工会审核 + */ +@IocBean +@Ok("json:full") +@Slf4j +@Api(tags = "子女入学管理-校工会审核") +@At("/platform/enrollmentRegistration/schoolAudit") +public class EnrollmentRegistrationSchoolAuditController { + + @Inject + private BaseService baseService; + + @At("/index") + @Ok("beetl:/platform/zhgh/enrollmentRegistration/schoolAudit/index.html") + @SaCheckPermission("enrollmentRegistration.schoolAudit") + public void index() { + + } + + + @At + @ApiOperation("分页查询") + @SaCheckPermission("enrollmentRegistration.schoolAudit") + public Result pageData(PageForm pageForm, + Integer year, + String unionId, + String unitId, + String registrationType, + Boolean approval) { + Sql sql = Sqls.create(""" + SELECT + info.*, + YEAR(info.applyTime) year, + 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 taskVariable, + IFNULL(GROUP_CONCAT(DISTINCT nt.displayName),'结束') curTaskName, + IF(rt.id IS NOT NULL, 1, 0) AS canRevoke + FROM + wf_process_task t + LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId + LEFT JOIN enrollment_registration info ON info.id = ins.businessNo + LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id + LEFT JOIN wf_process_task nt ON nt.processInstanceId = ins.id AND nt.taskState = 10 + LEFT JOIN wf_process_task rt ON rt.processInstanceId = ins.id AND rt.taskParentId = t.id AND rt.taskState = 10 + $condition + """); + Cnd cnd = Cnd.NEW(); + cnd.and("t.taskName", "=", "fcdea609-e3e9-41bc-94c0-61d09ab03dcc"); + cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); + cnd.andEX("info.unionId","=",unionId); + cnd.andEX("info.unitId","=",unitId); + cnd.andEX("info.registrationType","=",registrationType); + + if (approval) { + cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); + } else { + cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode()); + } + if (StrUtil.isAllNotEmpty(pageForm.getSearchName(), pageForm.getSearchKeyword())) { + cnd.where().andLike(pageForm.getSearchName(), pageForm.getSearchKeyword()); + } + cnd.andEX("YEAR(info.applyTime)", "=", year); + cnd.groupBy("t.id"); + if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) { + cnd.desc("t.createdAt"); + } else { + cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy())); + } + + sql.setCondition(cnd); + Pagination pageVO = baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + return Result.success(pageVO); + } + +} diff --git a/src/main/java/com/budwk/app/zhgh/enrollmentRegistration/controller/EnrollmentRegistrationSummaryController.java b/src/main/java/com/budwk/app/zhgh/enrollmentRegistration/controller/EnrollmentRegistrationSummaryController.java new file mode 100644 index 00000000..49c33a13 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/enrollmentRegistration/controller/EnrollmentRegistrationSummaryController.java @@ -0,0 +1,210 @@ +package com.budwk.app.zhgh.enrollmentRegistration.controller; + +import cn.afterturn.easypoi.excel.ExcelExportUtil; +import cn.afterturn.easypoi.excel.entity.ExportParams; +import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; +import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.core.util.URLUtil; +import cn.hutool.json.JSONObject; +import com.budwk.app.base.annotation.SLog; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.result.Result; +import com.budwk.app.base.service.BaseService; +import com.budwk.app.bpm.service.BpmService; +import com.budwk.app.flow.engine.FlowEngine; +import com.budwk.app.flow.enums.ProcessTaskStateEnum; +import com.budwk.app.sys.models.Sys_dict; +import com.budwk.app.sys.services.SysDictService; +import com.budwk.app.sys.services.SysFileService; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.enrollmentRegistration.model.EnrollmentRegistration; +import com.budwk.app.zhgh.enrollmentRegistration.service.EnrollmentRegistrationSummaryService; +import com.budwk.app.zhgh.enrollmentRegistration.vo.EnrollmentRegistrationPageForm; +import com.budwk.app.zhgh.outlay.outlayReimburse.vo.OutlayReimbursePageForm; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.IOUtils; +import org.apache.poi.ss.usermodel.Workbook; +import org.nutz.aop.interceptor.ioc.TransAop; +import org.nutz.dao.Cnd; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.ioc.aop.Aop; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.json.Json; +import org.nutz.lang.util.ByteInputStream; +import org.nutz.lang.util.NutMap; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; +import org.nutz.mvc.annotation.Param; + +import javax.servlet.http.HttpServletResponse; +import java.io.BufferedOutputStream; +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; + +/** + * @author zhf + * @date 2025/8/22 15:13 + * @description 子女入学我的登记 + */ +@IocBean +@At("/platform/enrollmentRegistration/summary") +@Ok("json:full") +@Slf4j +@Api(tags = "子女入学查询统计") +public class EnrollmentRegistrationSummaryController { + + @Inject + private EnrollmentRegistrationSummaryService enrollmentRegistrationSummaryService; + @Inject + private SysDictService sysDictService; + @Inject + private SysFileService sysFileService; + @Inject + private FlowEngine flowEngine; + + + + + @At("/index") + @Ok("beetl:/platform/zhgh/enrollmentRegistration/summary/index.html") + @SaCheckPermission("enrollmentRegistration.summary") + public void index() { + } + + @At + @ApiOperation("分页查询") + @SaCheckPermission("enrollmentRegistration.summary") + public Result pageData(EnrollmentRegistrationPageForm pageForm) { + Sql sql = enrollmentRegistrationSummaryService.getSql(pageForm); + Pagination pagination = enrollmentRegistrationSummaryService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + return Result.success(pagination); + } + + + @At + @ApiOperation("删除子女入学信息") + @Aop(TransAop.READ_COMMITTED) + @SaCheckPermission("enrollmentRegistration.summary") + @SLog(tag = "子女入学-查询统计", type = "enrollmentRegistration", msg = "删除id: ${args[0]}") + public Result doDelete(String id){ + enrollmentRegistrationSummaryService.dao().delete(EnrollmentRegistration.class,id); + flowEngine.processInstanceService().deleteProcessInstanceByBusinessKey(id); + return Result.success(); + } + + + @At + @Ok("void") + @SaCheckPermission("enrollmentRegistration.summary") + public void doExportExcel(@Param("data") EnrollmentRegistrationPageForm pageForm, HttpServletResponse response) { + try { + Sql sql = enrollmentRegistrationSummaryService.getSql(pageForm); + List map = enrollmentRegistrationSummaryService.listMap(sql); + + List dictList = sysDictService.getSubListByCode("ENROLLMENT_REGISTRATION_TYPE"); + + map.forEach(item -> { + Sys_dict dict = dictList.stream().filter(sys_dict -> sys_dict.getCode().equals(item.getString("registrationType"))).findFirst().orElse(null); + item.put("registrationTypeName", dict.getName()); + }); + + List entityList = new ArrayList<>(); + ExcelExportEntity no = new ExcelExportEntity("序号", "no", 10); + no.setFormat("isAddIndex"); + entityList.add(no); + + entityList.add(new ExcelExportEntity("子女姓名", "childrenName", 20)); + entityList.add(new ExcelExportEntity("教职工姓名", "userName", 20)); + entityList.add(new ExcelExportEntity("工号", "loginName", 20)); + entityList.add(new ExcelExportEntity("所属工会", "unionName", 20)); + entityList.add(new ExcelExportEntity("所属单位", "unitName", 20)); + entityList.add(new ExcelExportEntity("手机号码", "mobile", 20)); + entityList.add(new ExcelExportEntity("登记类型", "registrationTypeName", 20)); + entityList.add(new ExcelExportEntity("填报时间", "applyTime", 20)); + + response.setContentType("application/octet-stream"); + response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("子女信息登记汇总.xlsx", "UTF-8")); + ExportParams exportParams = new ExportParams(); + exportParams.setType(ExcelType.XSSF); + Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entityList, map); + workbook.write(response.getOutputStream()); + + } catch (Exception e) { + e.printStackTrace(); + } + } + + + @At + @Ok("void") + @SaCheckPermission("enrollmentRegistration.summary") + public void doExportZip(@Param("data") EnrollmentRegistrationPageForm pageForm, HttpServletResponse response) { + + + try { + response.setContentType("application/octet-stream"); + response.setHeader("Content-Disposition", "attachment;filename=" + URLUtil.encode("子女入学.zip")); + Sql sql = enrollmentRegistrationSummaryService.getSql(pageForm); + List map = enrollmentRegistrationSummaryService.listMap(sql); + List dictList = sysDictService.getSubListByCode("ENROLLMENT_REGISTRATION_TYPE"); + + ZipOutputStream zipOutputStream = new ZipOutputStream(new BufferedOutputStream(response.getOutputStream())); + + map.forEach(item -> { + try { + String childrenName = item.getString("childrenName"); + String userName = item.getString("userName"); + Sys_dict dict = dictList.stream().filter(sys_dict -> sys_dict.getCode().equals(item.getString("registrationType"))).findFirst().orElse(null); + + List huKouFiles = Json.fromJsonAsList(JSONObject.class, item.getString("huKouFiles")); + List birthCertificateFiles = item.getList("birthCertificateFiles", JSONObject.class); + List mergedList = new ArrayList<>(); + mergedList.addAll(huKouFiles); + mergedList.addAll(birthCertificateFiles); + for (JSONObject file : mergedList) { + + String fileName = file.getStr("name"); + + JSONObject entries = file.getJSONObject("response"); + String filepath = entries.getStr("data"); + + if (StrUtil.isNotBlank(filepath)) { + int indexOf = filepath.lastIndexOf("?"); + String fileId = filepath.substring(indexOf + 4); + zipOutputStream.putNextEntry(new ZipEntry(dict.getName() + userName + "【" + childrenName + "】" + item.getString("createdAt") + "/" + fileName)); + byte[] bytes = sysFileService.download(fileId); + ByteInputStream byteIs = new ByteInputStream(bytes); + IOUtils.copy(byteIs, zipOutputStream); + byteIs.close(); + } + } + zipOutputStream.closeEntry(); + } catch (Exception e) { + e.printStackTrace(); + } + + }); + zipOutputStream.flush(); + zipOutputStream.close(); + + } catch (Exception e) { + e.printStackTrace(); + } + + + } + + +} diff --git a/src/main/java/com/budwk/app/zhgh/enrollmentRegistration/controller/EnrollmentRegistrationUnionAuditController.java b/src/main/java/com/budwk/app/zhgh/enrollmentRegistration/controller/EnrollmentRegistrationUnionAuditController.java new file mode 100644 index 00000000..11e9d64d --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/enrollmentRegistration/controller/EnrollmentRegistrationUnionAuditController.java @@ -0,0 +1,111 @@ +package com.budwk.app.zhgh.enrollmentRegistration.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.result.Result; +import com.budwk.app.base.service.BaseService; +import com.budwk.app.base.utils.PageUtil; +import com.budwk.app.flow.enums.ProcessTaskStateEnum; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nutz.dao.Cnd; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.lang.util.NutMap; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; + +import java.util.List; + +/** + * @author zhf + * @date 2025/8/22 16:27 + * @description 分工会审核 + */ +@IocBean +@Ok("json:full") +@Slf4j +@Api(tags = "子女入学管理-分工会审核") +@At("/platform/enrollmentRegistration/unionAudit") +public class EnrollmentRegistrationUnionAuditController { + + @Inject + private BaseService baseService; + + @At("/index") + @Ok("beetl:/platform/zhgh/enrollmentRegistration/unionAudit/index.html") + @SaCheckPermission("enrollmentRegistration.unionAudit") + public void index() { + + } + + + @At + @ApiOperation("分页查询") + @SaCheckPermission("enrollmentRegistration.unionAudit") + public Result pageData(PageForm pageForm, + Integer year, + String registrationType, + Boolean approval) { + Sql sql = Sqls.create(""" + SELECT + info.*, + YEAR(info.applyTime) year, + 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 taskVariable, + IFNULL(GROUP_CONCAT(DISTINCT nt.displayName),'结束') curTaskName, + IF(rt.id IS NOT NULL, 1, 0) AS canRevoke + FROM + wf_process_task t + LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId + LEFT JOIN enrollment_registration info ON info.id = ins.businessNo + LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id + LEFT JOIN wf_process_task nt ON nt.processInstanceId = ins.id AND nt.taskState = 10 + LEFT JOIN wf_process_task rt ON rt.processInstanceId = ins.id AND rt.taskParentId = t.id AND rt.taskState = 10 + $condition + """); + Cnd cnd = Cnd.NEW(); + cnd.and("t.taskName", "=", "4a824460-80cf-4596-9b4b-1cf667296bb1"); + cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); + cnd.andEX("info.registrationType","=",registrationType); + + if (approval) { + cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); + } else { + cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode()); + } + if (StrUtil.isAllNotEmpty(pageForm.getSearchName(), pageForm.getSearchKeyword())) { + cnd.where().andLike(pageForm.getSearchName(), pageForm.getSearchKeyword()); + } + cnd.andEX("YEAR(info.applyTime)", "=", year); + cnd.groupBy("t.id"); + if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) { + cnd.desc("t.createdAt"); + } else { + cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy())); + } + + sql.setCondition(cnd); + Pagination pageVO = baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + return Result.success(pageVO); + } + +} diff --git a/src/main/java/com/budwk/app/zhgh/enrollmentRegistration/model/EnrollmentRegistration.java b/src/main/java/com/budwk/app/zhgh/enrollmentRegistration/model/EnrollmentRegistration.java index 3512d6c4..8c44beeb 100644 --- a/src/main/java/com/budwk/app/zhgh/enrollmentRegistration/model/EnrollmentRegistration.java +++ b/src/main/java/com/budwk/app/zhgh/enrollmentRegistration/model/EnrollmentRegistration.java @@ -1,13 +1,13 @@ package com.budwk.app.zhgh.enrollmentRegistration.model; +import cn.hutool.json.JSONObject; import com.budwk.app.base.model.BaseModel; import lombok.Data; import lombok.EqualsAndHashCode; -import org.nutz.dao.entity.annotation.Comment; -import org.nutz.dao.entity.annotation.Table; -import org.nutz.dao.entity.annotation.TableMeta; +import org.nutz.dao.entity.annotation.*; import java.io.Serializable; +import java.util.List; /** * @author zhf @@ -20,4 +20,115 @@ import java.io.Serializable; @TableMeta("{'mysql-charset':'utf8mb4'}") @Comment("入学登记表") public class EnrollmentRegistration extends BaseModel implements Serializable { + + + @Column + @Name + @Comment("id") + @ColDefine(type = ColType.VARCHAR, width = 32) + @Prev(els = {@EL("uuid()")}) + private String id; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 30) + @Comment("登记类型(字典)") + private String registrationType; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 30) + @Comment("监护人(教工)姓名") + private String userName; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 30) + @Comment("工号") + private String loginName; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 32) + @Comment("userId") + private String userId; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 30) + @Comment("手机号码") + private String mobile; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 50) + @Comment("所在单位") + private String unitName; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 32) + @Comment("所在单位Id") + private String unitId; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 50) + @Comment("所在工会") + private String unionName; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 32) + @Comment("所在工会Id") + private String unionId; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 50) + @Comment("监护人与学生关系") + private String childRelationship; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 30) + @Comment("子女姓名") + private String childrenName; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 30) + @Comment("性别") + private String sex; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 30) + @Comment("身份证号") + private String childrenIdCard; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 50) + @Comment("现就读学校") + private String childrenCurrentSchool; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 50) + @Comment("拟报就读学校") + private String childrenPlanSchool; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 50) + @Comment("子女户口所在地") + private String childrenHuKouAddress; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 50) + @Comment("备注") + private String note; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 50) + @Comment("填写时间") + private String applyTime; + + @Column + @ColDefine(type = ColType.MYSQL_JSON) + @Comment("户口簿照片") + private List huKouFiles; + + @Column + @ColDefine(type = ColType.MYSQL_JSON) + @Comment("子女出生证照片") + private List birthCertificateFiles; + + + } diff --git a/src/main/java/com/budwk/app/zhgh/enrollmentRegistration/model/EnrollmentRegistrationPlan.java b/src/main/java/com/budwk/app/zhgh/enrollmentRegistration/model/EnrollmentRegistrationPlan.java new file mode 100644 index 00000000..cba552c3 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/enrollmentRegistration/model/EnrollmentRegistrationPlan.java @@ -0,0 +1,59 @@ +package com.budwk.app.zhgh.enrollmentRegistration.model; + +import com.budwk.app.base.model.BaseModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.nutz.dao.entity.annotation.*; + +import java.io.Serializable; + +/** + * @author zhf + * @date 2025/8/21 10:29 + * @description 子女入学登记计划 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@Table("enrollment_registration_plan") +@TableMeta("{'mysql-charset':'utf8mb4'}") +@Comment("入学登记表") +public class EnrollmentRegistrationPlan extends BaseModel implements Serializable { + + @Column + @Name + @Comment("id") + @ColDefine(type = ColType.VARCHAR, width = 32) + @Prev(els = {@EL("uuid()")}) + private String id; + + + @Column + @ColDefine(type = ColType.VARCHAR,width = 4) + @Comment("年份") + private String year; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 30) + @Comment("登记类型(字典)") + private String registrationType; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 20) + @Comment("开始时间") + private String startTime; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 20) + @Comment("结束时间") + private String endTime; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 20) + @Comment("大于某个出生日期能选") + private String greaterThanBirthday; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 20) + @Comment("小于某个出生日期能选") + private String lessThanBirthday; +} diff --git a/src/main/java/com/budwk/app/zhgh/enrollmentRegistration/service/EnrollmentRegistrationSummaryService.java b/src/main/java/com/budwk/app/zhgh/enrollmentRegistration/service/EnrollmentRegistrationSummaryService.java new file mode 100644 index 00000000..89749a3e --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/enrollmentRegistration/service/EnrollmentRegistrationSummaryService.java @@ -0,0 +1,13 @@ +package com.budwk.app.zhgh.enrollmentRegistration.service; + +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.service.BaseService; +import com.budwk.app.zhgh.enrollmentRegistration.vo.EnrollmentRegistrationPageForm; +import org.nutz.dao.sql.Sql; + +public interface EnrollmentRegistrationSummaryService extends BaseService { + + + + Sql getSql(EnrollmentRegistrationPageForm pageForm); +} diff --git a/src/main/java/com/budwk/app/zhgh/enrollmentRegistration/service/impl/EnrollmentRegistrationSummaryServiceImpl.java b/src/main/java/com/budwk/app/zhgh/enrollmentRegistration/service/impl/EnrollmentRegistrationSummaryServiceImpl.java new file mode 100644 index 00000000..c3ceb875 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/enrollmentRegistration/service/impl/EnrollmentRegistrationSummaryServiceImpl.java @@ -0,0 +1,62 @@ +package com.budwk.app.zhgh.enrollmentRegistration.service.impl; + +import com.budwk.app.base.service.impl.BaseServiceImpl; +import com.budwk.app.flow.enums.ProcessTaskStateEnum; +import com.budwk.app.zhgh.enrollmentRegistration.service.EnrollmentRegistrationSummaryService; +import com.budwk.app.zhgh.enrollmentRegistration.vo.EnrollmentRegistrationPageForm; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.ioc.loader.annotation.IocBean; + +/** + * @author zhf + * @date 2025/8/22 17:30 + * @description + */ +@IocBean(args = {"refer:dao"}) +public class EnrollmentRegistrationSummaryServiceImpl extends BaseServiceImpl implements EnrollmentRegistrationSummaryService { + public EnrollmentRegistrationSummaryServiceImpl(Dao dao) { + super(dao); + } + + @Override + public Sql getSql(EnrollmentRegistrationPageForm pageForm) { + Sql sql = Sqls.create(""" + SELECT + 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 + enrollment_registration info + 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_actor ta ON ta.processTaskId = t.id + $condition + """); + Cnd cnd = Cnd.NEW(); + cnd.andEX("YEAR(info.applyTime)", "=", pageForm.getYear()); + cnd.and("ins.state", "=", ProcessTaskStateEnum.FINISHED.getCode()); + cnd.andEX("info.unionId","=",pageForm.getUnionId()); + cnd.andEX("info.unitId","=",pageForm.getUnitId()); + cnd.andEX("info.registrationType","=",pageForm.getRegistrationType()); + sql.setCondition(cnd); + return sql; + } +} diff --git a/src/main/java/com/budwk/app/zhgh/enrollmentRegistration/vo/EnrollmentRegistrationPageForm.java b/src/main/java/com/budwk/app/zhgh/enrollmentRegistration/vo/EnrollmentRegistrationPageForm.java new file mode 100644 index 00000000..3b38114a --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/enrollmentRegistration/vo/EnrollmentRegistrationPageForm.java @@ -0,0 +1,19 @@ +package com.budwk.app.zhgh.enrollmentRegistration.vo; + +import com.budwk.app.base.param.PageForm; +import lombok.Data; + +/** + * @author zhf + * @date 2025/8/25 08:40 + * @description + */ +@Data +public class EnrollmentRegistrationPageForm extends PageForm { + + + private Integer year; + private String unionId; + private String unitId; + private String registrationType; +} diff --git a/src/main/java/com/budwk/app/zhgh/integral/controller/IntegralManageController.java b/src/main/java/com/budwk/app/zhgh/integral/controller/IntegralManageController.java index 08df15d5..d0eab178 100644 --- a/src/main/java/com/budwk/app/zhgh/integral/controller/IntegralManageController.java +++ b/src/main/java/com/budwk/app/zhgh/integral/controller/IntegralManageController.java @@ -275,7 +275,7 @@ public class IntegralManageController { List entities = new ArrayList<>(); entities.add(new ExcelExportEntity("工号", "loginName", 20)); entities.add(new ExcelExportEntity("姓名", "userName", 20)); - entities.add(new ExcelExportEntity("增加积分", "integral", 20)); + entities.add(new ExcelExportEntity("积分", "integral", 20)); ExportParams exportParams = new ExportParams(); Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entities, Collections.emptyList()); CommonDownloadUtil.download("积分增加导入模板.xlsx", workbook, response); diff --git a/src/main/java/com/budwk/app/zhgh/integral/service/impl/IntegralManageServiceImpl.java b/src/main/java/com/budwk/app/zhgh/integral/service/impl/IntegralManageServiceImpl.java index f3cd5233..2f62ff51 100644 --- a/src/main/java/com/budwk/app/zhgh/integral/service/impl/IntegralManageServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/integral/service/impl/IntegralManageServiceImpl.java @@ -196,8 +196,9 @@ public class IntegralManageServiceImpl extends BaseServiceImpl i cnd.and("u.unionId", "=", SecurityUtil.getUnionId()); } } + cnd.andEX("ind.year", "=", year); cnd.andEX("u.unionId", "=", unionId); - cnd.andEX("u.unionId", "=", unitId); + cnd.andEX("u.unitId", "=", unitId); cnd.andEX("u.personType", "=", personType); cnd.andEX("u.userState", "=", userState); cnd.andEX("DATE(ind.integralTime)", "=", integralTime); diff --git a/src/main/java/com/budwk/app/zhgh/outlay/activityBudget/conteoller/ActivityBudgetApplyController.java b/src/main/java/com/budwk/app/zhgh/outlay/activityBudget/conteoller/ActivityBudgetApplyController.java index 7cd55b09..28966d52 100644 --- a/src/main/java/com/budwk/app/zhgh/outlay/activityBudget/conteoller/ActivityBudgetApplyController.java +++ b/src/main/java/com/budwk/app/zhgh/outlay/activityBudget/conteoller/ActivityBudgetApplyController.java @@ -5,9 +5,16 @@ import cn.dev33.satoken.annotation.SaCheckPermission; import cn.hutool.core.date.DateUtil; import com.alibaba.excel.EasyExcel; import com.budwk.app.base.annotation.SLog; +import com.budwk.app.base.constant.RoleConstant; import com.budwk.app.base.result.Result; import com.budwk.app.base.utils.CommonDownloadUtil; +import com.budwk.app.sys.models.Sys_role; +import com.budwk.app.sys.models.Sys_user_role; +import com.budwk.app.sys.services.SysRoleService; +import com.budwk.app.web.commons.auth.utils.AuthUtil; import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.club.model.SysClub; +import com.budwk.app.zhgh.club.service.SysClubService; import com.budwk.app.zhgh.democratic.suggestionBox.models.SuggestionBox; import com.budwk.app.zhgh.integral.controller.IntegralManageController; import com.budwk.app.zhgh.outlay.activityBudget.models.ActivityBudget; @@ -52,6 +59,11 @@ public class ActivityBudgetApplyController { @Inject private ActivityBudgetService activityBudgetService; + @Inject + private SysClubService sysClubService; + @Inject + private SysRoleService sysRoleService; + @At("") @Ok("beetl:/platform/zhgh/outlay/activityBudget/apply/index.html") @@ -59,11 +71,6 @@ public class ActivityBudgetApplyController { public void index() { } - @At("/form") - @Ok("beetl:/platform/zhgh/outlay/activityBudget/apply/form.html") - @SaCheckPermission("activity.budget.apply") - public void form() { - } @At @@ -72,6 +79,7 @@ public class ActivityBudgetApplyController { @Aop(TransAop.READ_COMMITTED) @SLog(type = "activityBudgetApply", tag = "年度预算申报-预算申报", msg = "提交年度预算申报") public Result submit(@Param("data") ActivityBudget activityBudget) { + activityBudget.setApplyDate(DateUtil.now()); return activityBudgetService.submit(activityBudget); } @@ -84,6 +92,7 @@ public class ActivityBudgetApplyController { activityBudget.setUserId(SecurityUtil.getUserId()); activityBudget.setLoginName(SecurityUtil.getUserLoginname()); activityBudget.setUserName(SecurityUtil.getUserUsername()); + activityBudget.setApplyDate(DateUtil.now()); activityBudgetService.insertOrUpdate(activityBudget); return Result.success(); } @@ -125,6 +134,22 @@ public class ActivityBudgetApplyController { } + @At + @ApiOperation("查询协会,超级管理员查全部的") + @SaCheckLogin + public Result listClub(){ + Cnd cnd = Cnd.NEW(); + if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) { + Sys_role sysRole = sysRoleService.getByCode(RoleConstant.CLUB_PRESIDENT); + List userRoles = sysClubService.dao().query(Sys_user_role.class, Cnd.where("userId", "=", SecurityUtil.getUserId()).and("roleId", "=", sysRole.getId())); + List myClubId = userRoles.stream().map(Sys_user_role::getClubId).toList(); + cnd.and("id", "in", myClubId); + } + List list = sysClubService.query(cnd); + return Result.success(list); + } + + } diff --git a/src/main/java/com/budwk/app/zhgh/outlay/activityBudget/conteoller/ActivityBudgetApplyListController.java b/src/main/java/com/budwk/app/zhgh/outlay/activityBudget/conteoller/ActivityBudgetApplyListController.java index a77a760a..1e0657a7 100644 --- a/src/main/java/com/budwk/app/zhgh/outlay/activityBudget/conteoller/ActivityBudgetApplyListController.java +++ b/src/main/java/com/budwk/app/zhgh/outlay/activityBudget/conteoller/ActivityBudgetApplyListController.java @@ -1,5 +1,6 @@ package com.budwk.app.zhgh.outlay.activityBudget.conteoller; +import cn.dev33.satoken.annotation.SaCheckLogin; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; @@ -133,7 +134,7 @@ public class ActivityBudgetApplyListController { @At @ApiOperation("查询单个预算详细信息") - @SaCheckPermission("activity.budget.applyList") + @SaCheckLogin public Result findOne(String id) { return Result.success(activityBudgetService.findOne(id)); } diff --git a/src/main/java/com/budwk/app/zhgh/outlay/activityBudget/conteoller/ActivityBudgetSchoolAuditController.java b/src/main/java/com/budwk/app/zhgh/outlay/activityBudget/conteoller/ActivityBudgetSchoolAuditController.java index 98cea854..572ecf5b 100644 --- a/src/main/java/com/budwk/app/zhgh/outlay/activityBudget/conteoller/ActivityBudgetSchoolAuditController.java +++ b/src/main/java/com/budwk/app/zhgh/outlay/activityBudget/conteoller/ActivityBudgetSchoolAuditController.java @@ -15,6 +15,7 @@ import lombok.extern.slf4j.Slf4j; import org.nutz.dao.Cnd; import org.nutz.dao.Sqls; import org.nutz.dao.sql.Sql; +import org.nutz.dao.util.cri.SqlExpressionGroup; import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.lang.util.NutMap; @@ -97,6 +98,13 @@ public class ActivityBudgetSchoolAuditController { cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode()); } + if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) { + SqlExpressionGroup group = new SqlExpressionGroup(); + group.orLike("info.loginName", pageForm.getSearchKeyword()); + group.orLike("info.userName", pageForm.getSearchKeyword()); + cnd.and(group); + } + cnd.andEX("YEAR(info.applyDate)", "=", year); cnd.and(Cnd.likeEX("info.activityMatter", activityMatter)); diff --git a/src/main/java/com/budwk/app/zhgh/outlay/activityBudget/interceptor/OutlayActBudgetApplyPostInterceptor.java b/src/main/java/com/budwk/app/zhgh/outlay/activityBudget/interceptor/OutlayActBudgetApplyPostInterceptor.java deleted file mode 100644 index 1d38c4b2..00000000 --- a/src/main/java/com/budwk/app/zhgh/outlay/activityBudget/interceptor/OutlayActBudgetApplyPostInterceptor.java +++ /dev/null @@ -1,130 +0,0 @@ -package com.budwk.app.zhgh.outlay.activityBudget.interceptor; - -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; -import com.budwk.app.base.result.Result; -import com.budwk.app.flow.constant.FlowConst; -import com.budwk.app.flow.engine.FlowInterceptor; -import com.budwk.app.flow.engine.core.Execution; -import com.budwk.app.flow.engine.core.ServiceContext; -import com.budwk.app.flow.entity.ProcessInstance; -import com.budwk.app.web.commons.auth.utils.SecurityUtil; -import com.budwk.app.zhgh.outlay.activityBudget.models.ActivityBudget; -import com.budwk.app.zhgh.outlay.activityBudget.models.ActivityBudgetDetails; -import com.budwk.app.zhgh.outlay.activityBudget.service.ActivityBudgetService; -import com.budwk.app.zhgh.outlay.outlayManage.school.model.OutlayManageSchool; -import com.budwk.app.zhgh.outlay.outlayManage.union.model.OutlayManageUnion; -import org.nutz.dao.Chain; -import org.nutz.dao.Cnd; -import org.nutz.dao.Dao; -import org.nutz.ioc.loader.annotation.Inject; -import org.nutz.json.Json; - -import java.util.List; - -/** - * @author zhf - * @date 2025/7/28 17:01 - * @description 活动预算申报提交后置拦截器 - */ -public class OutlayActBudgetApplyPostInterceptor implements FlowInterceptor { - - - @Override - public void intercept(Execution execution) { - String formDataStr = execution.getArgs().getStr(FlowConst.FORM_DATA); - ActivityBudget activityBudget = Json.fromJson(ActivityBudget.class, formDataStr); - - Dao dao = ServiceContext.find(Dao.class); - - if (StrUtil.isEmpty(activityBudget.getId())) { - activityBudget.setUserId(SecurityUtil.getUserId()); - activityBudget.setLoginName(SecurityUtil.getUserLoginname()); - activityBudget.setUserName(SecurityUtil.getUserUsername()); - //查询分工会这个项目有没有申报过 -// if (List.of("ACTIVITY_BUDGET_TYPE_TWO").contains(activityBudget.getBudgetTypeCode())) { -// int activityMatterCount = dao.count(ActivityBudget.class, Cnd.where("activityMatter", "=", -// activityBudget.getActivityMatter()).and("unionId", "=", SecurityUtil.getUnionId())); -// if (activityMatterCount > 0) { -// return Result.error(activityBudget.getActivityMatter() + "已填写申请!"); -// } -// } - } - //删除预算详情表 - if (StrUtil.isNotBlank(activityBudget.getId())) { - dao.clear(ActivityBudgetDetails.class, Cnd.where("budgetId", "=", activityBudget.getId())); - } - - if (List.of("superadmin").contains(SecurityUtil.getUserLoginname())) { - //如果是超级管理员就可以直接提交不用审核 - activityBudget.setTotalBudgetMoney(activityBudget.getDeclareTotalBudgetMoney()); - ActivityBudget budget = null; - if (StrUtil.isNotBlank(activityBudget.getId())) { - budget = dao.fetch(ActivityBudget.class, activityBudget.getId()); - } - //如果申报的是校工会预算 - if (activityBudget.getOutlayManageSource().equals("ACTIVITY_BUDGET_TYPE_ONE")) { - OutlayManageSchool outlayManageSchool = dao.fetch(OutlayManageSchool.class, Cnd.where("year", "=", DateUtil.thisYear())); - if (ObjectUtil.isNotEmpty(outlayManageSchool)) { - if (StrUtil.isNotBlank(activityBudget.getId())) { - //如果传过来有预算Id,代表是修改的,那么就减去原来的金额 - outlayManageSchool.setTotalQuota(outlayManageSchool.getTotalQuota().subtract(budget.getTotalBudgetMoney())); - } - //直接修改为现在传过来的金额 - outlayManageSchool.setTotalQuota(outlayManageSchool.getTotalQuota().add(activityBudget.getTotalBudgetMoney())); - dao.updateIgnoreNull(outlayManageSchool); - } - } else if (activityBudget.getOutlayManageSource().equals("ACTIVITY_BUDGET_TYPE_TWO")) { - //如果申报的是分工会预算 - OutlayManageUnion outlayManageUnion = dao.fetch(OutlayManageUnion.class, - Cnd.where("year", "=", DateUtil.thisYear()) - .and("unionId", "=", activityBudget.getUnionId())); - if (ObjectUtil.isNotEmpty(outlayManageUnion)) { - if (StrUtil.isNotBlank(activityBudget.getId())) { - outlayManageUnion.setTotalQuota(outlayManageUnion.getTotalQuota().subtract(budget.getTotalBudgetMoney())); - } - outlayManageUnion.setTotalQuota(outlayManageUnion.getTotalQuota().add(activityBudget.getTotalBudgetMoney())); - dao.updateIgnoreNull(outlayManageUnion); - } - } else if (activityBudget.getOutlayManageSource().equals("ACTIVITY_BUDGET_TYPE_THREE")) { - //如果不等于校工会预算才往表里面加预算 - //代表协会可能用的是校工会的预算 -// if (!activityBudget.getIsSchoolBudget()) { -// jf_club jfClub = dao.fetch(jf_club.class, Cnd.where("year", "=", DateUtil.getYear()) -// .and("club_id", "=", activityBudget.getClubId())); -// if (ObjectUtil.isNotEmpty(jfClub)) { -// if (StrUtil.isNotBlank(activityBudget.getId())) { -// jfClub.setTotalQuota(jfClub.getTotalQuota().subtract(budget.getTotalBudgetMoney())); -// } -// jfClub.setTotalQuota(jfClub.getTotalQuota().add(activityBudget.getTotalBudgetMoney())); -// dao.updateIgnoreNull(jfClub); -// } -// } - } else if (activityBudget.getOutlayManageSource().equals("ACTIVITY_BUDGET_TYPE_FOUR")) { - // 更新其他经费表 -// JfOther jfOther = dao.fetch(JfOther.class, Cnd.where("year", "=", DateUtil.getYear())); -// if (ObjectUtil.isNotEmpty(jfOther)) { -// if (StrUtil.isNotBlank(activityBudget.getId())) { -// jfOther.setTotalQuota(jfOther.getTotalQuota().subtract(budget.getTotalBudgetMoney())); -// } -// jfOther.setTotalQuota(jfOther.getTotalQuota().add(activityBudget.getTotalBudgetMoney())); -// dao.updateIgnoreNull(jfOther); -// } - } - } - - - dao.insertOrUpdate(activityBudget); -// for (ActivityBudgetDetails details : activityBudget.getBudgetDetails()) { -// details.setBudgetId(activityBudget.getId()); -// } -// //添加预算详情表 -// dao.insert(activityBudget.getBudgetDetails()); - - execution.getArgs().set(FlowConst.FORM_DATA,Json.toJson(activityBudget)); - - int instanceId = execution.getArgs().getInt(FlowConst.PROCESS_INSTANCE_ID_KEY); - dao.update(ProcessInstance.class, Chain.make("businessNo", activityBudget.getId()), Cnd.where(ProcessInstance::getId, "=", instanceId)); - } -} diff --git a/src/main/java/com/budwk/app/zhgh/outlay/activityBudget/service/ActivityBudgetService.java b/src/main/java/com/budwk/app/zhgh/outlay/activityBudget/service/ActivityBudgetService.java index 98729a9b..14769cce 100644 --- a/src/main/java/com/budwk/app/zhgh/outlay/activityBudget/service/ActivityBudgetService.java +++ b/src/main/java/com/budwk/app/zhgh/outlay/activityBudget/service/ActivityBudgetService.java @@ -6,6 +6,7 @@ import com.budwk.app.base.service.BaseService; import com.budwk.app.zhgh.outlay.activityBudget.models.ActivityBudget; import org.nutz.dao.Cnd; import org.nutz.dao.sql.Sql; +import org.nutz.lang.util.NutMap; import javax.servlet.http.HttpServletResponse; @@ -20,7 +21,7 @@ public interface ActivityBudgetService extends BaseService { */ Result submit(ActivityBudget activityBudget); - ActivityBudget findOne(String id); + NutMap findOne(String id); void doExport(Integer year, String activityMatter, HttpServletResponse response); diff --git a/src/main/java/com/budwk/app/zhgh/outlay/activityBudget/service/impl/ActivityBudgetApplyStatisticsServiceImpl.java b/src/main/java/com/budwk/app/zhgh/outlay/activityBudget/service/impl/ActivityBudgetApplyStatisticsServiceImpl.java index 0ceb9d56..0f0eb742 100644 --- a/src/main/java/com/budwk/app/zhgh/outlay/activityBudget/service/impl/ActivityBudgetApplyStatisticsServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/outlay/activityBudget/service/impl/ActivityBudgetApplyStatisticsServiceImpl.java @@ -4,6 +4,7 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.budwk.app.base.service.impl.BaseServiceImpl; +import com.budwk.app.flow.engine.FlowEngine; import com.budwk.app.flow.entity.ProcessInstance; import com.budwk.app.flow.entity.ProcessTask; import com.budwk.app.flow.entity.ProcessTaskActor; @@ -15,6 +16,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.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; import java.util.List; @@ -31,6 +33,11 @@ public class ActivityBudgetApplyStatisticsServiceImpl extends BaseServiceImpl im super(dao); } + + @Inject + private FlowEngine flowEngine; + + @Override public Sql getsql(Integer year, String unionId, String clubId, String outlayManageSource, String activityMatter) { Sql sql = Sqls.create(""" @@ -38,9 +45,11 @@ public class ActivityBudgetApplyStatisticsServiceImpl extends BaseServiceImpl im YEAR(ab.applyDate) year, ab.*, ins.id AS instanceId, - ins.businessNo + ins.businessNo, + abb.activityMatter activityMatterTwo FROM activity_budget ab + LEFT JOIN activity_budget abb ON abb.id = ab.schoolBudgetId LEFT JOIN wf_process_instance ins ON ins.businessNo = ab.id $condition """); @@ -82,17 +91,9 @@ public class ActivityBudgetApplyStatisticsServiceImpl extends BaseServiceImpl im //查出流程实例 ProcessInstance instance = dao().fetch(ProcessInstance.class, Cnd.where("businessNo", "=", id)); if (ObjectUtil.isNotEmpty(instance)) { - //查询流程任务 - List taskList = dao().query(ProcessTask.class, Cnd.where(ProcessTask::getProcessInstanceId, "=", instance.getId())); - List taskIds = taskList.stream().map(ProcessTask::getId).toList(); - //删除流程任务下面所有的人员 - dao().clear(ProcessTask.class, Cnd.where(ProcessTaskActor::getProcessTaskId, "in", taskIds)); - //删除流程任务 - dao().clear(ProcessTask.class, Cnd.where(ProcessTask::getProcessInstanceId, "=", instance.getId())); - //删除流程实例 - dao().delete(ProcessInstance.class, instance.getId()); //删除预算 dao().delete(ActivityBudget.class, id); + flowEngine.processInstanceService().deleteProcessInstanceByBusinessKey(id); } } diff --git a/src/main/java/com/budwk/app/zhgh/outlay/activityBudget/service/impl/ActivityBudgetQueryStatisticsServiceImpl.java b/src/main/java/com/budwk/app/zhgh/outlay/activityBudget/service/impl/ActivityBudgetQueryStatisticsServiceImpl.java index dbaba73e..0c087bd3 100644 --- a/src/main/java/com/budwk/app/zhgh/outlay/activityBudget/service/impl/ActivityBudgetQueryStatisticsServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/outlay/activityBudget/service/impl/ActivityBudgetQueryStatisticsServiceImpl.java @@ -64,26 +64,30 @@ public class ActivityBudgetQueryStatisticsServiceImpl extends BaseServiceImpl im return listMap(sql); } else if (outlayManageSource.equals("ACTIVITY_BUDGET_TYPE_THREE")) { - /* Sql sql = Sqls.create(""" + Sql sql = Sqls.create(""" SELECT - @year `year`, - sc.`code` AS clubCode, - sc.`name` AS clubName, - COALESCE ( SUM( ab.totalBudgetMoney ), 0 ) AS totalBudgetMoney + @YEAR `year`, + sc.clubCode, + sc.clubName, + ab.clubId, + COALESCE(SUM(ab.totalBudgetMoney), 0) AS totalBudgetMoney FROM - sys_club sc - LEFT JOIN activity_budget ab ON ab.clubId = sc.id - AND ab.outlayManageSource = 'ACTIVITY_BUDGET_TYPE_THREE' - AND ab.auditState = 4 - AND YEAR(ab.applyDate)=@year + activity_budget ab + LEFT JOIN sys_club sc ON ab.clubId = sc.id + LEFT JOIN wf_process_instance wpi ON wpi.businessNo = ab.id $condition """).setParam("year", year); Cnd cnd = Cnd.NEW(); - cnd.andEX("sc.id", "=", clubId); - cnd.groupBy("sc.id"); - cnd.asc("sc.`code`"); + cnd.andEX("ab.clubId", "=", clubId); + cnd.andEX("ab.isSchoolBudget", "=", 0); + cnd.andEX("ab.outlayManageSource", "=", "ACTIVITY_BUDGET_TYPE_THREE"); + cnd.andEX("wpi.state", "=", 20); + cnd.andEX("YEAR(ab.applyDate)", "=", year); + cnd.groupBy("ab.clubId"); + cnd.asc("sc.clubCode"); sql.setCondition(cnd); - return listMap(sql);*/ + sql.setCondition(cnd); + return listMap(sql); } return new ArrayList<>(); } diff --git a/src/main/java/com/budwk/app/zhgh/outlay/activityBudget/service/impl/ActivityBudgetServiceImpl.java b/src/main/java/com/budwk/app/zhgh/outlay/activityBudget/service/impl/ActivityBudgetServiceImpl.java index aeb8309d..6bb7cd31 100644 --- a/src/main/java/com/budwk/app/zhgh/outlay/activityBudget/service/impl/ActivityBudgetServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/outlay/activityBudget/service/impl/ActivityBudgetServiceImpl.java @@ -88,7 +88,6 @@ public class ActivityBudgetServiceImpl extends BaseServiceImpl i 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_actor ta ON ta.processTaskId = t.id $condition """); if (StrUtil.isNotBlank(activityMatter)) { @@ -136,7 +135,7 @@ public class ActivityBudgetServiceImpl extends BaseServiceImpl i int activityMatterCount = count(Cnd.where("activityMatter", "=", activityBudget.getActivityMatter()).and("unionId", "=", SecurityUtil.getUnionId())); if (activityMatterCount > 0) { - return Result.error(activityBudget.getActivityMatter() + "已填写申请!"); +// return Result.error(activityBudget.getActivityMatter() + "已填写申请!"); } } } @@ -228,9 +227,21 @@ public class ActivityBudgetServiceImpl extends BaseServiceImpl i } @Override - public ActivityBudget findOne(String id) { - ActivityBudget activityBudget = fetchLinks(fetch(id), "budgetDetails", Cnd.NEW().asc("detailsOrder")); -// activityBudget.setAllocationEditAuditList(dao().query(Audit.class, Cnd.where("parentId", "=", activityBudget.getId()))); + public NutMap findOne(String id) { + Sql sql = Sqls.create(""" + SELECT + ab.*, + abb.activityMatter activityMatterTwo + FROM + activity_budget ab + LEFT JOIN activity_budget abb ON abb.id = ab.schoolBudgetId + WHERE + ab.id = @id + """).setParam("id",id); + sql.setCallback(Sqls.callback.map()); + execute(sql); + NutMap activityBudget = (NutMap) sql.getResult(); + activityBudget.put("budgetDetails", dao().query(ActivityBudgetDetails.class, Cnd.where("budgetId", "=", id))); return activityBudget; } diff --git a/src/main/java/com/budwk/app/zhgh/outlay/outlayManage/model/OutlayUseDetail.java b/src/main/java/com/budwk/app/zhgh/outlay/outlayManage/model/OutlayUseDetail.java index 0d6b50f5..f98a088f 100644 --- a/src/main/java/com/budwk/app/zhgh/outlay/outlayManage/model/OutlayUseDetail.java +++ b/src/main/java/com/budwk/app/zhgh/outlay/outlayManage/model/OutlayUseDetail.java @@ -69,6 +69,11 @@ public class OutlayUseDetail extends BaseModel implements Serializable { @ColDefine(type = ColType.VARCHAR, width = 32) private String activityNumber; + @Column + @Comment("业务Id") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String outlayReimburseId; + @Column @Comment("活动时间") @ColDefine(type = ColType.VARCHAR) diff --git a/src/main/java/com/budwk/app/zhgh/outlay/outlayManage/union/controller/OutlayManageUnionController.java b/src/main/java/com/budwk/app/zhgh/outlay/outlayManage/union/controller/OutlayManageUnionController.java index 9cce8ed6..bdee95bd 100644 --- a/src/main/java/com/budwk/app/zhgh/outlay/outlayManage/union/controller/OutlayManageUnionController.java +++ b/src/main/java/com/budwk/app/zhgh/outlay/outlayManage/union/controller/OutlayManageUnionController.java @@ -115,6 +115,7 @@ public class OutlayManageUnionController { WHERE YEAR(ab.applyDate) = @year AND ab.outlayManageSource = 'ACTIVITY_BUDGET_TYPE_TWO' + AND ab.isSchoolBudget =0 AND wpi.state = 20 """).setParam("year", DateUtil.thisYear()); List budgetList = baseService.listMap(sql); diff --git a/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/controller/OutlayReimburseApplyController.java b/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/controller/OutlayReimburseApplyController.java index ba688796..8003abd6 100644 --- a/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/controller/OutlayReimburseApplyController.java +++ b/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/controller/OutlayReimburseApplyController.java @@ -1,5 +1,6 @@ package com.budwk.app.zhgh.outlay.outlayReimburse.controller; +import cn.dev33.satoken.annotation.SaCheckLogin; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Dict; @@ -71,7 +72,7 @@ public class OutlayReimburseApplyController { @ApiOperation("查询这个预算已经报销了的金额") @SaCheckPermission("outlay.reimburse.apply") public Result getBxMoneyByBudgetId(String budgetId) { - return Result.success(outlayReimburseApplyService.getBxMoneyByActivityId(budgetId)); + return Result.success(outlayReimburseApplyService.getBxMoneyByActivityId(budgetId,null)); } @@ -136,8 +137,7 @@ public class OutlayReimburseApplyController { } @At - @SaCheckPermission("outlay.reimburse.apply") - @ApiOperation("保存申请") + @SaCheckLogin public Result findOne(String id){ return Result.success(outlayReimburseApplyService.fetch(id)); } diff --git a/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/controller/OutlayReimburseApplyListController.java b/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/controller/OutlayReimburseApplyListController.java index ef1a7c17..0e7e0132 100644 --- a/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/controller/OutlayReimburseApplyListController.java +++ b/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/controller/OutlayReimburseApplyListController.java @@ -70,10 +70,12 @@ public class OutlayReimburseApplyListController { 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 """); Cnd cnd = Cnd.NEW(); + cnd.andEX("YEAR(info.applyTime)", "=", year); cnd.and("info.userId", "=", SecurityUtil.getUserId()); - + sql.setCondition(cnd); Pagination pagination = baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); return Result.success(pagination); } diff --git a/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/controller/OutlayReimburseSchoolCnAuditController.java b/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/controller/OutlayReimburseSchoolCnAuditController.java index ca16b9c9..67c1dae7 100644 --- a/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/controller/OutlayReimburseSchoolCnAuditController.java +++ b/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/controller/OutlayReimburseSchoolCnAuditController.java @@ -9,6 +9,7 @@ import com.budwk.app.base.service.BaseService; import com.budwk.app.base.utils.PageUtil; import com.budwk.app.flow.enums.ProcessTaskStateEnum; import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.outlay.outlayReimburse.vo.OutlayReimbursePageForm; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; @@ -49,13 +50,7 @@ public class OutlayReimburseSchoolCnAuditController { @At @ApiOperation("分页查询") @SaCheckPermission("outlay.reimburse.schoolCnAudit") - public Result pageData(PageForm pageForm, - Integer year, - String unionId, - String clubId, - Boolean approval, - String outlayManageSource, - String activityMatter) { + public Result pageData(OutlayReimbursePageForm pageForm) { Sql sql = Sqls.create(""" SELECT info.*, @@ -88,16 +83,19 @@ public class OutlayReimburseSchoolCnAuditController { Cnd cnd = Cnd.NEW(); cnd.and("t.taskName", "=", "714574d6-29c3-4a2c-bc63-ecef38a0d6d0"); cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); - cnd.andEX("info.unionId", "=", unionId); - cnd.andEX("info.outlayManageSource", "=", outlayManageSource); - - if (approval) { + cnd.andEX("info.unionId", "=", pageForm.getUnionId()); + cnd.andEX("info.outlayManageSource", "=", pageForm.getOutlayManageSource()); + cnd.andEX("YEAR(info.applyTime)", "=", pageForm.getYear()); + if (pageForm.getApproval()) { cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); } else { cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode()); } - cnd.andEX("YEAR(info.applyTime)", "=", year); + if (StrUtil.isAllNotEmpty(pageForm.getSearchName(), pageForm.getSearchKeyword())) { + cnd.where().andLike(pageForm.getSearchName(), pageForm.getSearchKeyword()); + } + cnd.groupBy("t.id"); if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) { cnd.desc("t.createdAt").desc("info.applyTime"); diff --git a/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/controller/OutlayReimburseSchoolKjAuditController.java b/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/controller/OutlayReimburseSchoolKjAuditController.java index da02435c..f49bb626 100644 --- a/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/controller/OutlayReimburseSchoolKjAuditController.java +++ b/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/controller/OutlayReimburseSchoolKjAuditController.java @@ -13,6 +13,7 @@ import com.budwk.app.flow.enums.ProcessTaskStateEnum; import com.budwk.app.sys.models.Sys_dict; import com.budwk.app.sys.services.SysDictService; import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.outlay.outlayReimburse.vo.OutlayReimbursePageForm; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; @@ -56,13 +57,7 @@ public class OutlayReimburseSchoolKjAuditController { @At @ApiOperation("分页查询") @SaCheckPermission("outlay.reimburse.schoolKjAudit") - public Result pageData(PageForm pageForm, - Integer year, - String unionId, - String clubId, - Boolean approval, - String outlayManageSource, - String activityMatter) { + public Result pageData(OutlayReimbursePageForm pageForm) { Sql sql = Sqls.create(""" SELECT info.*, @@ -95,16 +90,22 @@ public class OutlayReimburseSchoolKjAuditController { Cnd cnd = Cnd.NEW(); cnd.and("t.taskName", "=", "930aed03-677b-41d7-8920-7d9b45a7abc9"); cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); - cnd.andEX("info.unionId", "=", unionId); - cnd.andEX("info.outlayManageSource", "=", outlayManageSource); + cnd.andEX("info.unionId", "=", pageForm.getUnionId()); + cnd.andEX("info.outlayManageSource", "=", pageForm.getOutlayManageSource()); + cnd.andEX("info.detailsTypeId", "=", pageForm.getDetailsTypeId()); + cnd.andEX("YEAR(info.applyTime)", "=", pageForm.getYear()); - if (approval) { + if (pageForm.getApproval()) { cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); } else { cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode()); } - cnd.andEX("YEAR(info.applyTime)", "=", year); + if (StrUtil.isAllNotEmpty(pageForm.getSearchName(), pageForm.getSearchKeyword())) { + cnd.where().andLike(pageForm.getSearchName(), pageForm.getSearchKeyword()); + } + + cnd.groupBy("t.id"); if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) { cnd.desc("t.createdAt").desc("info.applyTime"); diff --git a/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/controller/OutlayReimburseSchoolZxAuditController.java b/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/controller/OutlayReimburseSchoolZxAuditController.java index 06b3671d..a3bb69bc 100644 --- a/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/controller/OutlayReimburseSchoolZxAuditController.java +++ b/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/controller/OutlayReimburseSchoolZxAuditController.java @@ -13,6 +13,7 @@ import com.budwk.app.flow.enums.ProcessTaskStateEnum; import com.budwk.app.sys.models.Sys_dict; import com.budwk.app.sys.services.SysDictService; import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.outlay.outlayReimburse.vo.OutlayReimbursePageForm; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; @@ -56,13 +57,7 @@ public class OutlayReimburseSchoolZxAuditController { @At @ApiOperation("分页查询") @SaCheckPermission("outlay.reimburse.schoolZxAudit") - public Result pageData(PageForm pageForm, - Integer year, - String unionId, - String clubId, - Boolean approval, - String outlayManageSource, - String activityMatter) { + public Result pageData(OutlayReimbursePageForm pageForm) { Sql sql = Sqls.create(""" SELECT info.*, @@ -95,16 +90,22 @@ public class OutlayReimburseSchoolZxAuditController { Cnd cnd = Cnd.NEW(); cnd.and("t.taskName", "=", "c433d966-05f4-45b4-b845-755b600d852a"); cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); - cnd.andEX("info.unionId", "=", unionId); - cnd.andEX("info.outlayManageSource", "=", outlayManageSource); + cnd.andEX("info.unionId", "=", pageForm.getUnionId()); + cnd.andEX("info.outlayManageSource", "=", pageForm.getOutlayManageSource()); + cnd.andEX("YEAR(info.applyTime)", "=", pageForm.getYear()); + cnd.andEX("info.detailsTypeId", "=", pageForm.getDetailsTypeId()); - if (approval) { + if (pageForm.getApproval()) { cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); } else { cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode()); } - cnd.andEX("YEAR(info.applyTime)", "=", year); + if (StrUtil.isAllNotEmpty(pageForm.getSearchName(), pageForm.getSearchKeyword())) { + cnd.where().andLike(pageForm.getSearchName(), pageForm.getSearchKeyword()); + } + + cnd.groupBy("t.id"); if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) { cnd.desc("t.createdAt").desc("info.applyTime"); diff --git a/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/controller/OutlayReimburseSummaryController.java b/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/controller/OutlayReimburseSummaryController.java new file mode 100644 index 00000000..e1153fa9 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/controller/OutlayReimburseSummaryController.java @@ -0,0 +1,123 @@ +package com.budwk.app.zhgh.outlay.outlayReimburse.controller; + +import cn.afterturn.easypoi.excel.ExcelExportUtil; +import cn.afterturn.easypoi.excel.entity.ExportParams; +import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; +import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.result.Result; +import com.budwk.app.base.service.BaseService; +import com.budwk.app.base.utils.PageUtil; +import com.budwk.app.flow.enums.ProcessTaskStateEnum; +import com.budwk.app.sys.models.Sys_dict; +import com.budwk.app.sys.services.SysDictService; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.outlay.outlayReimburse.service.OutlayReimburseSummaryService; +import com.budwk.app.zhgh.outlay.outlayReimburse.vo.OutlayReimbursePageForm; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.poi.ss.usermodel.Workbook; +import org.nutz.dao.Cnd; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.lang.util.NutMap; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; +import org.nutz.mvc.annotation.Param; + +import javax.servlet.http.HttpServletResponse; +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.List; + +/** + * @author zhf + * @date 2025/8/20 17:43 + * @description 报销汇总 + */ +@IocBean +@At("/platform/outlay/reimburse/summary") +@Ok("json:full") +@Api("我的报销") +public class OutlayReimburseSummaryController { + + @Inject + private OutlayReimburseSummaryService outlayReimburseSummaryService; + + @Inject + private SysDictService sysDictService; + + + @At("/index") + @Ok("beetl:/platform/zhgh/outlay/outlayReimburse/summary/index.html") + @SaCheckPermission("outlay.reimburse.summary") + public void index() { + + } + + @At + @ApiOperation("分页查询") + @SaCheckPermission("outlay.reimburse.summary") + public Result pageData(OutlayReimbursePageForm pageForm) { + Sql sql = outlayReimburseSummaryService.getSql(pageForm); + Pagination pagination = outlayReimburseSummaryService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + return Result.success(pagination); + } + + + @At + @Ok("void") + @SaCheckPermission("outlay.reimburse.summary") + public void doExportUserExcel(@Param("data") OutlayReimbursePageForm pageForm, HttpServletResponse response) { + try { + Sql sql = outlayReimburseSummaryService.getSql(pageForm); + List map = outlayReimburseSummaryService.listMap(sql); + + List dictList = sysDictService.getSubListByCode("ACTIVITY_BUDGET_TYPE"); + List dictList2 = sysDictService.getSubListByCode("ACTIVITY_BUDGET_DETAILS_TYPE"); + + map.forEach(item -> { + Sys_dict dict = dictList.stream().filter(sys_dict -> sys_dict.getCode().equals(item.getString("outlayManageSource"))).findFirst().orElse(null); + item.put("outlayManageSourceName", dict.getName()); + Sys_dict dict2 = dictList2.stream().filter(sys_dict -> sys_dict.getCode().equals(item.getString("detailsTypeId"))).findFirst().orElse(null); + item.put("detailsTypeName", dict2.getName()); + + if (List.of("ACTIVITY_BUDGET_TYPE_ONE", "ACTIVITY_BUDGET_TYPE_FOUR").contains(item.getString("outlayManageSource"))) { + item.put("helpUnitName", dict.getName()); + }else if (item.getString("outlayManageSource").equals("ACTIVITY_BUDGET_TYPE_TWO")){ + item.put("helpUnitName", item.getString("unionName")); + }else if (item.getString("outlayManageSource").equals("ACTIVITY_BUDGET_TYPE_THREE")){ + item.put("helpUnitName", item.getString("clubName")); + } + }); + + + List entityList = new ArrayList<>(); + ExcelExportEntity no = new ExcelExportEntity("序号", "no", 10); + no.setFormat("isAddIndex"); + entityList.add(no); + + entityList.add(new ExcelExportEntity("经办人工号", "loginName", 20)); + entityList.add(new ExcelExportEntity("姓名", "userName", 20)); + entityList.add(new ExcelExportEntity("活动类型", "outlayManageSourceName", 20)); + entityList.add(new ExcelExportEntity("申报单位", "helpUnitName", 20)); + entityList.add(new ExcelExportEntity("金额", "money", 20)); + entityList.add(new ExcelExportEntity("明细类", "detailsTypeName", 50)); + entityList.add(new ExcelExportEntity("申报时间", "applyTime", 20)); + + response.setContentType("application/octet-stream"); + response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("报销汇总名单.xlsx", "UTF-8")); + ExportParams exportParams = new ExportParams(); + exportParams.setType(ExcelType.XSSF); + Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entityList, map); + workbook.write(response.getOutputStream()); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/controller/OutlayReimburseUnionAuditController.java b/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/controller/OutlayReimburseUnionAuditController.java new file mode 100644 index 00000000..8efcdd8f --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/controller/OutlayReimburseUnionAuditController.java @@ -0,0 +1,119 @@ +package com.budwk.app.zhgh.outlay.outlayReimburse.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.result.Result; +import com.budwk.app.base.service.BaseService; +import com.budwk.app.base.utils.PageUtil; +import com.budwk.app.flow.enums.ProcessTaskStateEnum; +import com.budwk.app.sys.services.SysDictService; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nutz.dao.Cnd; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.lang.util.NutMap; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; + +import java.util.List; + +/** + * @author zhf + * @date 2025/8/19 16:50 + * @description 分工会主席审核 + */ +@IocBean +@Ok("json:full") +@Slf4j +@Api(tags = "费用报销管理-分工会主席审核") +@At("/platform/outlay/reimburse/unionAudit") +public class OutlayReimburseUnionAuditController { + + @Inject + private BaseService baseService; + @Inject + private SysDictService sysDictService; + + @At("/index") + @Ok("beetl:/platform/zhgh/outlay/outlayReimburse/unionAudit/index.html") + @SaCheckPermission("outlay.reimburse.unionAudit") + public void index() { + + } + + + @At + @ApiOperation("分页查询") + @SaCheckPermission("outlay.reimburse.unionAudit") + public Result pageData(PageForm pageForm, + Integer year, + String clubId, + Boolean approval, + String outlayManageSource) { + Sql sql = Sqls.create(""" + SELECT + info.*, + YEAR(info.applyTime) year, + 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 taskVariable, + IFNULL(GROUP_CONCAT(DISTINCT nt.displayName),'结束') curTaskName, + IF(rt.id IS NOT NULL, 1, 0) AS canRevoke + FROM + wf_process_task t + LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId + LEFT JOIN outlay_reimburse info ON info.id = ins.businessNo + LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id + LEFT JOIN wf_process_task nt ON nt.processInstanceId = ins.id AND nt.taskState = 10 + LEFT JOIN wf_process_task rt ON rt.processInstanceId = ins.id AND rt.taskParentId = t.id AND rt.taskState = 10 + $condition + """); + Cnd cnd = Cnd.NEW(); + cnd.and("t.taskName", "=", "d818a045-14c9-4668-993c-e18a1f4fc0c7"); + cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); + cnd.andEX("info.outlayManageSource", "=", outlayManageSource); + + if (approval) { + cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); + } else { + cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode()); + } + if (StrUtil.isAllNotEmpty(pageForm.getSearchName(), pageForm.getSearchKeyword())) { + cnd.where().andLike(pageForm.getSearchName(), pageForm.getSearchKeyword()); + } + cnd.andEX("YEAR(info.applyTime)", "=", year); + cnd.groupBy("t.id"); + if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) { + cnd.desc("t.createdAt").desc("info.applyTime"); + } else { + cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy())); + } + + sql.setCondition(cnd); + Pagination pageVO = baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + return Result.success(pageVO); + } + + + + + +} diff --git a/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/interceptor/OutlayReimburseApplyPostInterceptor.java b/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/interceptor/OutlayReimburseApplyPostInterceptor.java deleted file mode 100644 index 8d975441..00000000 --- a/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/interceptor/OutlayReimburseApplyPostInterceptor.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.budwk.app.zhgh.outlay.outlayReimburse.interceptor; - -import com.budwk.app.flow.constant.FlowConst; -import com.budwk.app.flow.engine.FlowInterceptor; -import com.budwk.app.flow.engine.core.Execution; -import com.budwk.app.flow.engine.core.ServiceContext; -import com.budwk.app.flow.entity.ProcessInstance; -import com.budwk.app.zhgh.democratic.suggestionBox.models.SuggestionBox; -import com.budwk.app.zhgh.outlay.outlayReimburse.model.OutlayReimburse; -import org.nutz.dao.Chain; -import org.nutz.dao.Cnd; -import org.nutz.dao.Dao; -import org.nutz.json.Json; - -/** - * @author zhf - * @date 2025/7/30 15:58 - * @description - */ -public class OutlayReimburseApplyPostInterceptor implements FlowInterceptor { - @Override - public void intercept(Execution execution) { - String formDataStr = execution.getArgs().getStr(FlowConst.FORM_DATA); - OutlayReimburse outlayReimburse = Json.fromJson(OutlayReimburse.class, formDataStr); - - Dao dao = ServiceContext.find(Dao.class); - dao.insertOrUpdate(outlayReimburse); - execution.getArgs().set("outlayManageSource", outlayReimburse.getOutlayManageSource()); - execution.getArgs().set(FlowConst.FORM_DATA, Json.toJson(outlayReimburse)); - - int instanceId = execution.getArgs().getInt(FlowConst.PROCESS_INSTANCE_ID_KEY); - dao.update(ProcessInstance.class, Chain.make("businessNo", outlayReimburse.getId()), Cnd.where(ProcessInstance::getId, "=", instanceId)); - } -} diff --git a/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/interceptor/OutlayReimburseSchoolZxAuditPostInterceptor.java b/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/interceptor/OutlayReimburseSchoolZxAuditPostInterceptor.java index cb621f26..629ccce1 100644 --- a/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/interceptor/OutlayReimburseSchoolZxAuditPostInterceptor.java +++ b/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/interceptor/OutlayReimburseSchoolZxAuditPostInterceptor.java @@ -1,7 +1,25 @@ package com.budwk.app.zhgh.outlay.outlayReimburse.interceptor; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import com.budwk.app.base.exception.BaseException; +import com.budwk.app.base.result.Result; +import com.budwk.app.flow.constant.FlowConst; import com.budwk.app.flow.engine.FlowInterceptor; import com.budwk.app.flow.engine.core.Execution; +import com.budwk.app.flow.engine.core.ServiceContext; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.outlay.activityBudget.models.ActivityBudget; +import com.budwk.app.zhgh.outlay.outlayManage.model.OutlayUseDetail; +import com.budwk.app.zhgh.outlay.outlayManage.school.model.OutlayManageSchool; +import com.budwk.app.zhgh.outlay.outlayManage.union.model.OutlayManageUnion; +import com.budwk.app.zhgh.outlay.outlayReimburse.model.OutlayReimburse; +import lombok.SneakyThrows; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.json.Json; + +import java.io.IOException; /** * @author zhf @@ -11,6 +29,66 @@ import com.budwk.app.flow.engine.core.Execution; public class OutlayReimburseSchoolZxAuditPostInterceptor implements FlowInterceptor { @Override public void intercept(Execution execution) { + String formDataStr = execution.getArgs().getStr(FlowConst.FORM_DATA); + OutlayReimburse outlayReimburse = Json.fromJson(OutlayReimburse.class, formDataStr); + Dao dao = ServiceContext.find(Dao.class); + OutlayUseDetail detail = new OutlayUseDetail(); + + detail.setProjectName(outlayReimburse.getActivityMatter()); + detail.setAdjustMoney(outlayReimburse.getMoney()); + detail.setAdjustMoney(outlayReimburse.getMoney()); + detail.setAdjustReason(outlayReimburse.getPaymentContent()); + detail.setAdjustUserId(SecurityUtil.getUserId()); + detail.setAdjustUserName(SecurityUtil.getUserUsername()); + detail.setAdjustLoginName(SecurityUtil.getUserLoginname()); + detail.setOutlayReimburseId(outlayReimburse.getId()); + detail.setActivityTime(outlayReimburse.getActivityTime()); + // 更新校工会经费表 + if (outlayReimburse.getOutlayManageSource().equals("ACTIVITY_BUDGET_TYPE_ONE")) { + OutlayManageSchool school = dao.fetch(OutlayManageSchool.class, Cnd.where("year", "=", DateUtil.thisYear())); + if (ObjectUtil.isEmpty(school)) { + throw new BaseException("该年份没有设置金额!"); + } + school.setUsedQuota(school.getUsedQuota().add(outlayReimburse.getMoney())); + dao.updateIgnoreNull(school); + + //添加使用记录到经费管理表 + detail.setOutlayManageId(school.getId()); + dao.insert(detail); + } else if (outlayReimburse.getOutlayManageSource().equals("ACTIVITY_BUDGET_TYPE_TWO")) { + + ActivityBudget budget = dao.fetch(ActivityBudget.class, Cnd.where("id", "=", outlayReimburse.getBudgetId())); + if (ObjectUtil.isNotEmpty(budget)&&budget.getIsSchoolBudget()){ + //如果分工会报销了校工会的余额 + OutlayManageSchool school = dao.fetch(OutlayManageSchool.class, Cnd.where("year", "=", DateUtil.thisYear())); + if (ObjectUtil.isEmpty(school)) { + throw new BaseException("该年份没有设置金额!"); + } + school.setUsedQuota(school.getUsedQuota().add(outlayReimburse.getMoney())); + dao.updateIgnoreNull(school); + + //添加使用记录到经费管理表 + detail.setOutlayManageId(school.getId()); + dao.insert(detail); + }else{ + // 更新分工会活动经费表 + OutlayManageUnion manageUnion = dao.fetch(OutlayManageUnion.class, + Cnd.where("year", "=", DateUtil.thisYear()) + .and("unionId", "=", outlayReimburse.getUnionId())); + if (ObjectUtil.isEmpty(manageUnion)) { + throw new BaseException("该年份没有设置金额!"); + } + if (manageUnion.getTotalQuota().subtract(manageUnion.getUsedQuota()).compareTo(outlayReimburse.getMoney()) < 0) { + throw new BaseException("剩余配额不足!剩余:" + manageUnion.getTotalQuota().subtract(manageUnion.getUsedQuota())); + } + manageUnion.setUsedQuota(manageUnion.getUsedQuota().add(outlayReimburse.getMoney())); + dao.updateIgnoreNull(manageUnion); + + //添加使用记录到经费管理表 + detail.setOutlayManageId(manageUnion.getId()); + dao.insert(detail); + } + } } } diff --git a/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/model/OutlayReimburse.java b/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/model/OutlayReimburse.java index 14a1d439..559f7a23 100644 --- a/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/model/OutlayReimburse.java +++ b/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/model/OutlayReimburse.java @@ -84,6 +84,12 @@ public class OutlayReimburse extends BaseModel implements Serializable { @ColDefine(type = ColType.VARCHAR, width = 30) private String activityTime; + + @Column + @Comment("活动人数") + @ColDefine(type = ColType.VARCHAR, width = 30) + private String activityNumber; + @Column @Comment("支付内容") @ColDefine(type = ColType.TEXT) diff --git a/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/service/OutlayReimburseApplyService.java b/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/service/OutlayReimburseApplyService.java index c704ae50..4ba5ff23 100644 --- a/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/service/OutlayReimburseApplyService.java +++ b/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/service/OutlayReimburseApplyService.java @@ -24,9 +24,10 @@ public interface OutlayReimburseApplyService extends BaseService budgetList = dao().query(ActivityBudget.class, diff --git a/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/vo/OutlayReimbursePageForm.java b/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/vo/OutlayReimbursePageForm.java new file mode 100644 index 00000000..72986f05 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/vo/OutlayReimbursePageForm.java @@ -0,0 +1,20 @@ +package com.budwk.app.zhgh.outlay.outlayReimburse.vo; + +import com.budwk.app.base.param.PageForm; +import lombok.Data; + +/** + * @author zhf + * @date 2025/8/21 09:19 + * @description + */ +@Data +public class OutlayReimbursePageForm extends PageForm { + private Integer year; + private String unionId; + private String outlayManageSource; + private String detailsTypeId; + + private Boolean approval; + private String clubId; +} diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/controller/ExcellentRecuperationActivityListController.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/controller/ExcellentRecuperationActivityListController.java new file mode 100644 index 00000000..c9b0d867 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/controller/ExcellentRecuperationActivityListController.java @@ -0,0 +1,150 @@ +package com.budwk.app.zhgh.staffbenefit.excellentRecuperation.controller; + +import cn.dev33.satoken.annotation.SaCheckLogin; +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.annotation.SLog; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.result.Result; +import com.budwk.app.zhgh.staffbenefit.excellentRecuperation.model.ExcellentRecuperationActivity; +import com.budwk.app.zhgh.staffbenefit.excellentRecuperation.model.ExcellentRecuperationLine; +import com.budwk.app.zhgh.staffbenefit.excellentRecuperation.model.ExcellentRecuperationQuotaAllocation; +import com.budwk.app.zhgh.staffbenefit.excellentRecuperation.service.ExcellentRecuperationLineService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nutz.aop.interceptor.ioc.TransAop; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.ioc.aop.Aop; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.lang.util.NutMap; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; +import org.nutz.mvc.annotation.Param; + +import java.util.List; + +/** + * @author zhf + * @date 2025/8/26 20:13 + * @description 活动管理 + */ +@Slf4j +@IocBean +@At("/platform/excellentRecuperation/activityList") +@Api("优秀教职工疗休养管理") +@Ok("json:full") +public class ExcellentRecuperationActivityListController { + + + @Inject + private ExcellentRecuperationLineService excellentRecuperationLineService; + + @Inject + private Dao dao; + + + @At("") + @Ok("beetl:/platform/zhgh/staffbenefit/excellentRecuperation/activityList/index.html") + @SaCheckLogin + public void index() { + } + + @At + @ApiOperation("分页") + @SaCheckPermission("excellentRecuperation.activityList") + public Result pageData(PageForm pageForm, String year) { + Sql sql = Sqls.create(""" + select * from excellent_recuperation_activity $condition + """); + Cnd cnd = Cnd.NEW(); + cnd.andEX("YEAR(signUpStartTime)", "=", year); + sql.setCondition(cnd); + Pagination pagination = excellentRecuperationLineService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + return Result.success(pagination); + } + + + @At + @ApiOperation("获取线路列表") + @SaCheckPermission("excellentRecuperation.activityList") + public Result onSubmit(@Param("data") ExcellentRecuperationActivity excellentRecuperationActivity) { + if (StrUtil.isNotBlank(excellentRecuperationActivity.getId())) { + dao.clear(ExcellentRecuperationQuotaAllocation.class, Cnd.where("activityId", "=", excellentRecuperationActivity.getId())); + excellentRecuperationActivity.getUnionQuotaAllocationList().stream().forEach(v->{ + v.setActivityId(excellentRecuperationActivity.getId()); + }); + dao.insert(excellentRecuperationActivity.getUnionQuotaAllocationList()); + dao.update(excellentRecuperationActivity); + }else{ + dao.insertWith(excellentRecuperationActivity, "unionQuotaAllocationList"); + } + + return Result.success(); + } + + + @At + @ApiOperation("获取线路列表") + @Aop(TransAop.READ_COMMITTED) + @SaCheckPermission("excellentRecuperation.activityList") + @SLog(type = "excellentRecuperation", tag = "优秀教职工疗休养-活动管理", msg = "删除线路") + public Result onDelete(@Param("id") String id) { + dao.delete(ExcellentRecuperationActivity.class, id); + dao.clear(ExcellentRecuperationQuotaAllocation.class, Cnd.where("activityId", "=", id)); + return Result.success(); + } + + + @At + @ApiOperation("获取活动详细信息") + @SaCheckLogin + public Result findOne(String id) { + ExcellentRecuperationActivity recuperationActivity = dao.fetchLinks(dao.fetch(ExcellentRecuperationActivity.class, id), "unionQuotaAllocationList", Cnd.NEW().asc("unionCode")); + List lineList = excellentRecuperationLineService.query(Cnd.where("id", "in", recuperationActivity.getLinIds())); + List lingNames = lineList.stream().map(ExcellentRecuperationLine::getLineName).toList(); + recuperationActivity.setLinNames(StrUtil.join(",", lingNames)); + return Result.success(recuperationActivity); + } + + + @At + @ApiOperation("获取线路列表") + @SaCheckPermission("excellentRecuperation.activityList") + public Result listLineListByThisYear() { + List excellentRecuperationLines = excellentRecuperationLineService.listLineListByThisYear(); + return Result.success(excellentRecuperationLines); + } + + + @At + @ApiOperation("获取分工会以及分工会的会员数") + @SaCheckPermission("excellentRecuperation.activityList") + public Result listUnion() { + Sql sql = Sqls.create(""" + SELECT + un.id unionId, + un.`name` unionName, + un.unionCode, + COUNT(u.id) memberNum + FROM + `sys_union` un + LEFT JOIN vw_user u ON u.unionId = un.id + AND u.member = 1 + GROUP BY + un.id + ORDER BY + un.unionCode + """); + List list = excellentRecuperationLineService.listMap(sql); + return Result.success(list); + } + + + +} diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/controller/ExcellentRecuperationActivitySignUpController.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/controller/ExcellentRecuperationActivitySignUpController.java new file mode 100644 index 00000000..1b9e9d25 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/controller/ExcellentRecuperationActivitySignUpController.java @@ -0,0 +1,262 @@ +package com.budwk.app.zhgh.staffbenefit.excellentRecuperation.controller; + +import cn.dev33.satoken.annotation.SaCheckLogin; +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.lang.Dict; +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.annotation.SLog; +import com.budwk.app.base.constant.RoleConstant; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.result.Result; +import com.budwk.app.base.service.BaseService; +import com.budwk.app.flow.constant.FlowConst; +import com.budwk.app.flow.engine.FlowEngine; +import com.budwk.app.flow.entity.ProcessInstance; +import com.budwk.app.flow.entity.ProcessTask; +import com.budwk.app.flow.enums.ProcessSubmitTypeEnum; +import com.budwk.app.sys.views.View_user; +import com.budwk.app.web.commons.auth.utils.AuthUtil; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.enrollmentRegistration.model.EnrollmentRegistration; +import com.budwk.app.zhgh.staffbenefit.excellentRecuperation.model.ExcellentRecuperationActivity; +import com.budwk.app.zhgh.staffbenefit.excellentRecuperation.model.ExcellentRecuperationLine; +import com.budwk.app.zhgh.staffbenefit.excellentRecuperation.model.ExcellentRecuperationSignUpUser; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nutz.aop.interceptor.ioc.TransAop; +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.ioc.aop.Aop; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.lang.util.NutMap; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; +import org.nutz.mvc.annotation.Param; + +import java.util.List; + +/** + * @author zhf + * @date 2025/8/27 11:12 + * @description 活动报名 + */ +@Slf4j +@IocBean +@At("/platform/excellentRecuperation/activitySignUp") +@Api("优秀教职工疗休养报名") +@Ok("json:full") +public class ExcellentRecuperationActivitySignUpController { + + @Inject + private BaseService baseService; + @Inject + private Dao dao; + + + @Inject + private FlowEngine flowEngine; + + + @At("") + @Ok("beetl:/platform/zhgh/staffbenefit/excellentRecuperation/activitySignUp/index.html") + @SaCheckLogin + public void index() { + } + + + @At + @ApiOperation("分页") + @SaCheckPermission("excellentRecuperation.activitySignUp") + public Result pageData(PageForm pageForm, String year, String unionId, String activityId) { + Sql sql = Sqls.create(""" + SELECT + erqa.*, + era.activityName, + era.signUpStartTime, + era.signUpEndTIme + FROM + `excellent_recuperation_quota_allocation` erqa + LEFT JOIN excellent_recuperation_activity era ON era.id = erqa.activityId + $condition + """); + Cnd cnd = Cnd.NEW(); + if (!AuthUtil.hasRoleOr(RoleConstant.SCHOOL_UNION_ADMIN.name(), RoleConstant.SYSADMIN.name())) { + cnd.and("erqa.unionId", "=", SecurityUtil.getUnionId()); + } + cnd.andEX("YEAR(era.signUpStartTime)", "=", year); + cnd.andEX("erqa.unionId", "=", unionId); + cnd.and("erqa.activityId", "=", activityId); + cnd.asc("erqa.unionCode"); + sql.setCondition(cnd); + Pagination pagination = baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + return Result.success(pagination); + } + + + @At + @ApiOperation("保存") + @SaCheckPermission("excellentRecuperation.activitySignUp") + @SLog(type = "excellentRecuperationActivitySignUp", tag = "优秀教职工疗休养-活动报名", msg = "保存疗休养报名") + public Result save(@Param("data") ExcellentRecuperationSignUpUser signUpUser) { + List userList = dao.query(ExcellentRecuperationSignUpUser.class, Cnd.where("activityId", "=", signUpUser.getActivityId())); + List userIds = userList.stream().map(ExcellentRecuperationSignUpUser::getUserId).toList(); + if (StrUtil.isBlank(signUpUser.getId()) && userIds.contains(signUpUser.getUserId())) { + return Result.error("该用户已报名"); + } + signUpUser.setSignUpTime(DateUtil.now()); + baseService.insertOrUpdate(signUpUser); + return Result.success(); + } + + + @At + @SaCheckPermission("enrollmentRegistration.apply") + @ApiOperation("提交") + @Aop(TransAop.READ_COMMITTED) + @SLog(type = "excellentRecuperationActivitySignUp", tag = "优秀教职工疗休养-活动报名", msg = "提交疗休养报名") + public Result submit(@Param("data") ExcellentRecuperationSignUpUser signUpUser) { + List userList = dao.query(ExcellentRecuperationSignUpUser.class, Cnd.where("activityId", "=", signUpUser.getActivityId())); + List userIds = userList.stream().map(ExcellentRecuperationSignUpUser::getUserId).toList(); + if (StrUtil.isBlank(signUpUser.getId()) && userIds.contains(signUpUser.getUserId())) { + return Result.error("该用户已报名"); + } + + if (StrUtil.isBlank(signUpUser.getId())) { + signUpUser.setSignUpTime(DateUtil.now()); + } + baseService.insertOrUpdate(signUpUser); + // 开启流程实例 + Dict args = Dict.create(); + args.set(FlowConst.FORM_DATA, signUpUser); + ProcessInstance instance = flowEngine.startProcessInstanceByKey("YXJZGLXY", signUpUser.getId(), SecurityUtil.getUserId(), args); + + // 自动完成第一个申请任务 + List doingTaskList = flowEngine.processTaskService().getDoingTaskList(instance.getId(), null); + for (ProcessTask task : doingTaskList) { + flowEngine.executeProcessTask(task.getId(), SecurityUtil.getUserId(), args); + } + return Result.success(); + } + + + @At + @ApiOperation("删除报名信息") + @Aop(TransAop.READ_COMMITTED) + @SaCheckPermission("enrollmentRegistration.summary") + @SLog(tag = "优秀教职工疗休养-活动报名", type = "excellentRecuperationActivitySignUp", msg = "删除id: ${args[0]}") + public Result doDelete(String id) { + dao.delete(ExcellentRecuperationSignUpUser.class, id); + flowEngine.processInstanceService().deleteProcessInstanceByBusinessKey(id); + return Result.success(); + } + + @At + @ApiOperation("查询当前工会当前活动报名的人员") + @SaCheckPermission("excellentRecuperation.activitySignUp") + public Result listQuotaAllocation(String unionId, String activityId) { + Sql sql = Sqls.create(""" + SELECT + info.*, + line.lineName, + 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 + excellent_recuperation_sign_user info + LEFT JOIN excellent_recuperation_line line ON line.id = info.lineId + 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_actor ta ON ta.processTaskId = t.id + $condition + """); + Cnd cnd = Cnd.NEW(); + cnd.and("info.activityId", "=", activityId); + cnd.and("info.unionId", "=", unionId); + sql.setCondition(cnd); + List map = baseService.listMap(sql); + return Result.success(map); + } + + + @At + @ApiOperation("根据年份获取疗休养活动") + @SaCheckPermission("excellentRecuperation.activitySignUp") + public Result listActivityByYear(String year) { + List activityList = dao.query(ExcellentRecuperationActivity.class, + Cnd.where("YEAR(signUpStartTime)", "=", year).desc("signUpStartTime")); + return Result.success(activityList); + } + + @At + @ApiOperation("根据活动id获取线路") + @SaCheckPermission("excellentRecuperation.activitySignUp") + public Result listLineByActivityId(String id) { + ExcellentRecuperationActivity activity = dao.fetch(ExcellentRecuperationActivity.class, id); + List lineList = dao.query(ExcellentRecuperationLine.class, Cnd.where("id", "in", activity.getLinIds())); + return Result.success(lineList); + } + + @At + @ApiOperation("查询用户") + @SaCheckPermission("excellentRecuperation.activitySignUp") + public Object listUser(String keyword, String unionId) { + Sql sql = Sqls.create(""" + select + id, + username userName, + loginname loginName, + sex, + mobile, + IFNULL(unitname, '暂无') as unitName, + unitId, + unionId, + unionName, + idCard + from + vw_user + $condition + """); + Cnd cnd = Cnd.NEW(); + if (StrUtil.isNotBlank(keyword)) { + SqlExpressionGroup seg = new SqlExpressionGroup(); + seg.or(View_user::getLoginname, "like", "%" + keyword + "%"); + seg.or(View_user::getUsername, "like", "%" + keyword + "%"); + cnd.and(seg); + } + cnd.and(View_user::getUnionId, "=", unionId); + sql.setCondition(cnd); + Pagination pagination = baseService.listPageMap(1, 50, sql); + return Result.success(pagination.getList()); + } + + + @At + @ApiOperation("查询单个报名信息") + @SaCheckLogin + public Result findUserSignUp(String id){ + return Result.success(dao.fetch(ExcellentRecuperationSignUpUser.class, id)); + } + + +} diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/controller/ExcellentRecuperationLineController.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/controller/ExcellentRecuperationLineController.java new file mode 100644 index 00000000..3c88e473 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/controller/ExcellentRecuperationLineController.java @@ -0,0 +1,145 @@ +package com.budwk.app.zhgh.staffbenefit.excellentRecuperation.controller; + +import cn.dev33.satoken.annotation.SaCheckLogin; +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.annotation.SLog; +import com.budwk.app.base.constant.RoleConstant; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.result.Result; +import com.budwk.app.base.service.BaseService; +import com.budwk.app.web.commons.auth.utils.AuthUtil; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.staffbenefit.excellentRecuperation.model.ExcellentRecuperationLine; +import com.budwk.app.zhgh.staffbenefit.excellentRecuperation.service.ExcellentRecuperationLineService; +import com.budwk.app.zhgh.staffbenefit.recuperation.model.RecuperationLine; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nutz.aop.interceptor.ioc.TransAop; +import org.nutz.dao.Chain; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.ioc.aop.Aop; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; +import org.nutz.mvc.annotation.Param; + +import java.util.Objects; + +/** + * @author zhf + * @date 2025/8/26 18:59 + * @description 线路管理 + */ +@Slf4j +@IocBean +@At("/platform/excellentRecuperation/line") +@Api("疗休养线路管理") +@Ok("json:full") +public class ExcellentRecuperationLineController { + + @Inject + private Dao dao; + @Inject + private ExcellentRecuperationLineService lineService; + + @At("") + @Ok("beetl:/platform/zhgh/staffbenefit/excellentRecuperation/line/index.html") + @SaCheckLogin + public void index() { + } + + @At + @ApiOperation("分页查询") + @SaCheckPermission("excellentRecuperation.line") + public Result pageData(PageForm pageForm, + @Param(value = "startYear") Integer startYear, + @Param(value = "endYear") Integer endYear, + @Param(value = "travelAgencyId") String travelAgencyId, + @Param(value = "lineName") String lineName, + @Param(value = "unionId") String unionId, + @Param(value = "lotId") String lotId) { + Cnd cnd = Cnd.NEW(); + cnd.andEX("line.`year`", ">=", startYear); + cnd.andEX("line.`year`", "<=", endYear); + cnd.andEX("line.travelAgencyId", "=", travelAgencyId); + cnd.andEX("line.lotId", "=", lotId); + cnd.and(Cnd.likeEX("line.lineName", lineName)); + + cnd.desc("year").asc("serialNumber").asc("line.createdAt"); + Pagination pagination = lineService.pageData(pageForm, cnd); + return Result.success(pagination); + } + + + @At + @ApiOperation("获取编号") + @SaCheckPermission("excellentRecuperation.line") + public Result getNo() { + Object serialNumber = dao.func2(ExcellentRecuperationLine.class, "max", "serialNumber"); + serialNumber = Objects.requireNonNullElse(serialNumber, 0); + return Result.success(Integer.parseInt(serialNumber.toString()) + 1); + } + + @At + @ApiOperation("新增/编辑疗休养线路") + @Aop(TransAop.READ_COMMITTED) + @SaCheckPermission("excellentRecuperation.line") + @SLog(type = "excellentRecuperation", tag = "新增/编辑疗休养线路", msg = "新增/编辑疗休养线路") + public Result onSubmit(ExcellentRecuperationLine line) { + if (StrUtil.isBlank(line.getId())) { + if (lineService.count(Cnd.where("serialNumber", "=", line.getSerialNumber())) > 0) { + return Result.error("编号已存在"); + } + lineService.insert( line); + } else { + if (lineService.count(Cnd.where("serialNumber", "=", line.getSerialNumber()).and("id", "!=", line.getId())) > 0) { + return Result.error("编号已存在"); + } + lineService.update( line); + } + return Result.success(); + } + + @At("/openClosedLine/?") + @ApiOperation("开启或关闭线路") + @Aop(TransAop.READ_COMMITTED) + @SaCheckPermission("excellentRecuperation.line") + @SLog(type = "excellentRecuperation", tag = "开启或关闭线路", msg = "开启或关闭线路") + public Result openClosedLine(String id) { + if (StrUtil.isBlank(id)) { + return Result.error("参数错误"); + } + lineService.update(Chain.makeSpecial("isDisabled", "isDisabled ^ 1"), Cnd.where("id", "=", id)); + return Result.success(); + } + + @At + @ApiOperation("删除线路") + @Aop(TransAop.READ_COMMITTED) + @SaCheckPermission("excellentRecuperation.line") + @SLog(type = "excellentRecuperation", tag = "删除线路", msg = "删除线路") + public Result onDelete(String id) { + if (StrUtil.isBlank(id)) { + return Result.error("参数错误"); + } + lineService.delete(id); + return Result.success(); + } + + @At("/selectLineInfoById/?") + @ApiOperation("查询线路") + @SaCheckPermission("excellentRecuperation.line") + public Result selectLineInfoById(String id) { + Assert.notBlank(id); + ExcellentRecuperationLine line = lineService.fetchLinks(lineService.fetch(id), "travelAgency"); + return Result.success(line); + } + + +} diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/controller/ExcellentRecuperationSchoolAuditController.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/controller/ExcellentRecuperationSchoolAuditController.java new file mode 100644 index 00000000..f756da8d --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/controller/ExcellentRecuperationSchoolAuditController.java @@ -0,0 +1,140 @@ +package com.budwk.app.zhgh.staffbenefit.excellentRecuperation.controller; + +import cn.dev33.satoken.annotation.SaCheckLogin; +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.result.Result; +import com.budwk.app.base.service.BaseService; +import com.budwk.app.base.utils.PageUtil; +import com.budwk.app.flow.enums.ProcessTaskStateEnum; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.staffbenefit.excellentRecuperation.model.ExcellentRecuperationActivity; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.lang.util.NutMap; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; +import org.nutz.mvc.annotation.Param; + +import java.util.List; + +/** + * @author zhf + * @date 2025/8/28 08:42 + * @description 校工会审核 + */ +@Slf4j +@IocBean +@At("/platform/excellentRecuperation/schoolAudit") +@Api("疗休养校工会审核报名人员") +@Ok("json:full") +public class ExcellentRecuperationSchoolAuditController { + + + @Inject + private BaseService baseService; + @Inject + private Dao dao; + + + @At("") + @Ok("beetl:/platform/zhgh/staffbenefit/excellentRecuperation/schoolAudit/index.html") + @SaCheckLogin + public void index() { + } + + @At + @ApiOperation("分页查询") + @SaCheckPermission("excellentRecuperation.schoolAudit") + public Result pageData(PageForm pageForm, + @Param(value = "year") Integer year, + @Param(value = "unionId") String unionId, + @Param(value = "activityId") String activityId, + @Param(value = "unitId") String unitId, + @Param(value = "approval") Boolean approval) { + Sql sql = Sqls.create(""" + SELECT + info.*, + line.lineName, + 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 taskVariable, + IFNULL(GROUP_CONCAT(DISTINCT nt.displayName),'结束') curTaskName, + IF(rt.id IS NOT NULL, 1, 0) AS canRevoke + FROM + wf_process_task t + LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId + LEFT JOIN excellent_recuperation_sign_user info ON info.id = ins.businessNo + LEFT JOIN excellent_recuperation_line line ON line.id = info.lineId + LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id + LEFT JOIN wf_process_task nt ON nt.processInstanceId = ins.id AND nt.taskState = 10 + LEFT JOIN wf_process_task rt ON rt.processInstanceId = ins.id AND rt.taskParentId = t.id AND rt.taskState = 10 + $condition + """); + Cnd cnd = Cnd.NEW(); + cnd.andEX("YEAR(info.signUpTime)", "=", year); + cnd.andEX("info.activityId", "=", activityId); + cnd.andEX("info.unionId", "=", unionId); + cnd.andEX("info.unitId", "=", unitId); + + cnd.and("t.taskName", "=", "0a8a7e2f-bc0d-4849-8c97-5ef61ac0478b"); + cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); + + if (approval) { + cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); + } else { + cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode()); + } + + if (StrUtil.isNotBlank(pageForm.getSearchName())&& StrUtil.isNotBlank(pageForm.getSearchKeyword())){ + cnd.where().andLike(pageForm.getSearchName(), pageForm.getSearchKeyword()); + } + + if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) { + cnd.desc("info.signUpTime"); + } else { + cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy())); + } + cnd.groupBy("t.id"); + sql.setCondition(cnd); + Pagination pageVO = baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + return Result.success(pageVO); + } + + + + @At + @ApiOperation("根据年份获取疗休养活动") + @SaCheckPermission("excellentRecuperation.schoolAudit") + public Result listActivityByYear(String year) { + List activityList = dao.query(ExcellentRecuperationActivity.class, + Cnd.where("YEAR(signUpStartTime)", "=", year).desc("signUpStartTime")); + return Result.success(activityList); + } + + + + + + +} diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/controller/ExcellentRecuperationSummaryController.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/controller/ExcellentRecuperationSummaryController.java new file mode 100644 index 00000000..e1343321 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/controller/ExcellentRecuperationSummaryController.java @@ -0,0 +1,125 @@ +package com.budwk.app.zhgh.staffbenefit.excellentRecuperation.controller; + +import cn.afterturn.easypoi.excel.ExcelExportUtil; +import cn.afterturn.easypoi.excel.entity.ExportParams; +import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; +import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; +import cn.dev33.satoken.annotation.SaCheckLogin; +import cn.dev33.satoken.annotation.SaCheckPermission; +import com.budwk.app.base.annotation.SLog; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.result.Result; +import com.budwk.app.base.service.BaseService; +import com.budwk.app.flow.engine.FlowEngine; +import com.budwk.app.flow.enums.ProcessTaskStateEnum; +import com.budwk.app.sys.models.Sys_dict; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.enrollmentRegistration.model.EnrollmentRegistration; +import com.budwk.app.zhgh.enrollmentRegistration.vo.EnrollmentRegistrationPageForm; +import com.budwk.app.zhgh.staffbenefit.excellentRecuperation.model.ExcellentRecuperationActivity; +import com.budwk.app.zhgh.staffbenefit.excellentRecuperation.service.ExcellentRecuperationSummaryService; +import com.budwk.app.zhgh.staffbenefit.excellentRecuperation.vo.ExcellentRecuperationPageForm; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.poi.ss.usermodel.Workbook; +import org.nutz.aop.interceptor.ioc.TransAop; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.ioc.aop.Aop; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.lang.util.NutMap; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; +import org.nutz.mvc.annotation.Param; + +import javax.servlet.http.HttpServletResponse; +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.List; + +/** + * @author zhf + * @date 2025/8/28 10:11 + * @description 查询统计 + */ +@Slf4j +@IocBean +@At("/platform/excellentRecuperation/summary") +@Api("疗休养查询统计") +@Ok("json:full") +public class ExcellentRecuperationSummaryController { + + @Inject + private ExcellentRecuperationSummaryService excellentRecuperationSummaryService; + @Inject + private FlowEngine flowEngine; + + + @At("") + @Ok("beetl:/platform/zhgh/staffbenefit/excellentRecuperation/summary/index.html") + @SaCheckLogin + public void index() { + } + + @At + @ApiOperation("分页查询") + @SaCheckPermission("enrollmentRegistration.summary") + public Result pageData(ExcellentRecuperationPageForm pageForm) { + Sql sql = excellentRecuperationSummaryService.getsql(pageForm); + Pagination pagination = excellentRecuperationSummaryService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + return Result.success(pagination); + } + + @At + @ApiOperation("删除疗休养报名人员") + @Aop(TransAop.READ_COMMITTED) + @SaCheckPermission("enrollmentRegistration.summary") + @SLog(tag = "优秀教职工疗休养", msg = "删除疗休养报名人员id: ${args[0]}") + public Result doDelete(String id) { + excellentRecuperationSummaryService.dao().delete(EnrollmentRegistration.class, id); + flowEngine.processInstanceService().deleteProcessInstanceByBusinessKey(id); + return Result.success(); + } + + @At + @Ok("void") + @SaCheckPermission("enrollmentRegistration.summary") + public void doExportExcel(@Param("data") ExcellentRecuperationPageForm pageForm, HttpServletResponse response) { + try { + ExcellentRecuperationActivity activity = excellentRecuperationSummaryService.dao().fetch(ExcellentRecuperationActivity.class, pageForm.getActivityId()); + Sql sql = excellentRecuperationSummaryService.getsql(pageForm); + List map = excellentRecuperationSummaryService.listMap(sql); + + + List entityList = new ArrayList<>(); + ExcelExportEntity no = new ExcelExportEntity("序号", "no", 10); + no.setFormat("isAddIndex"); + entityList.add(no); + + entityList.add(new ExcelExportEntity("姓名", "userName", 20)); + entityList.add(new ExcelExportEntity("工号", "loginName", 20)); + entityList.add(new ExcelExportEntity("手机号码", "mobile", 20)); + entityList.add(new ExcelExportEntity("身份证号", "idCard", 20)); + entityList.add(new ExcelExportEntity("线路", "lineName", 20)); + entityList.add(new ExcelExportEntity("所属工会", "unionName", 20)); + entityList.add(new ExcelExportEntity("所属单位", "unitName", 20)); + entityList.add(new ExcelExportEntity("报名时间", "signUpTime", 20)); + + response.setContentType("application/octet-stream"); + response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(activity.getActivityName() + "疗休养报名人员汇总.xlsx", "UTF-8")); + ExportParams exportParams = new ExportParams(); + exportParams.setType(ExcelType.XSSF); + Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entityList, map); + workbook.write(response.getOutputStream()); + + } catch (Exception e) { + e.printStackTrace(); + } + } + +} diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/controller/ExcellentRecuperationTravelAgencyController.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/controller/ExcellentRecuperationTravelAgencyController.java new file mode 100644 index 00000000..24e0f443 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/controller/ExcellentRecuperationTravelAgencyController.java @@ -0,0 +1,269 @@ +package com.budwk.app.zhgh.staffbenefit.excellentRecuperation.controller; + +import cn.afterturn.easypoi.excel.ExcelExportUtil; +import cn.afterturn.easypoi.excel.ExcelImportUtil; +import cn.afterturn.easypoi.excel.entity.ExportParams; +import cn.afterturn.easypoi.excel.entity.ImportParams; +import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; +import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; +import cn.dev33.satoken.annotation.SaCheckLogin; +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.annotation.SLog; +import com.budwk.app.base.model.ExcelImportRes; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.result.Result; +import com.budwk.app.base.utils.CommonDownloadUtil; +import com.budwk.app.base.utils.PageUtil; +import com.budwk.app.zhgh.staffbenefit.excellentRecuperation.model.ExcellentRecuperationTravelAgency; +import com.budwk.app.zhgh.staffbenefit.excellentRecuperation.service.ExcellentRecuperationTravelAgencyService; +import com.budwk.app.zhgh.staffbenefit.recuperation.mode.TravelAgencyExcelMode; +import com.budwk.app.zhgh.staffbenefit.recuperation.model.RecuperationTravelAgency; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.poi.ss.usermodel.Workbook; +import org.nutz.aop.interceptor.ioc.TransAop; +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.ioc.aop.Aop; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.lang.Strings; +import org.nutz.lang.util.NutMap; +import org.nutz.mvc.annotation.AdaptBy; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; +import org.nutz.mvc.annotation.Param; +import org.nutz.mvc.upload.TempFile; +import org.nutz.mvc.upload.UploadAdaptor; + +import javax.servlet.http.HttpServletResponse; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @author zhf + * @date 2025/8/26 18:10 + * @description + */ +@Slf4j +@IocBean +@At("/platform/excellentRecuperation/travelAgency") +@Api("疗休养旅行社管理") +@Ok("json:full") +public class ExcellentRecuperationTravelAgencyController { + + + @Inject + private Dao dao; + @Inject + private ExcellentRecuperationTravelAgencyService travelAgencyService; + + @At("") + @Ok("beetl:/platform/zhgh/staffbenefit/excellentRecuperation/travelAgency/index.html") + @SaCheckLogin + public void index() {} + + @At + @ApiOperation("分页查询") + @SaCheckPermission("excellentRecuperation.travelAgency") + public Result pageData(PageForm pageForm, + @Param(value = "year") Integer year) { + Cnd cnd = Cnd.NEW(); + cnd.andEX("year", "=", year); + if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) { + SqlExpressionGroup seg = new SqlExpressionGroup(); + seg.orLike("contact", pageForm.getSearchKeyword()); + seg.orLike("travelAgencyName", pageForm.getSearchKeyword()); + seg.orLike("serialNumber", pageForm.getSearchKeyword()); + cnd.and(seg); + } + if (StrUtil.isAllNotBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) { + cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy())); + } else { + cnd.asc("serialNumber"); + } + Pagination pagination = travelAgencyService.pageData(pageForm, cnd); + return Result.success(pagination); + } + + @At + @ApiOperation("新增/编辑疗休养旅行社") + @Aop(TransAop.READ_COMMITTED) + @SaCheckPermission("excellentRecuperation.travelAgency") + @SLog(type = "excellentRecuperation", tag = "新增/编辑疗休养旅行社", msg = "新增/编辑疗休养旅行社") + public Result onSubmit(ExcellentRecuperationTravelAgency travelAgency) { + if (StrUtil.isBlank(travelAgency.getId())) { + if (travelAgencyService.count(Cnd.where("serialNumber", "=", travelAgency.getSerialNumber())) > 0) { + return Result.error("编号已存在"); + } + travelAgencyService.addTravelAgency(travelAgency); + } else { + if (travelAgencyService.count(Cnd.where("serialNumber", "=", travelAgency.getSerialNumber()).and("id", "!=", travelAgency.getId())) > 0) { + return Result.error("编号已存在"); + } + travelAgencyService.editTravelAgency(travelAgency); + } + return Result.success(); + } + + @At("/openClosedTravelAgency/?") + @ApiOperation("开启或关闭旅行社") + @Aop(TransAop.READ_COMMITTED) + @SaCheckPermission("excellentRecuperation.travelAgency") + @SLog(type = "excellentRecuperation", tag = "开启或关闭旅行社", msg = "开启或关闭旅行社") + public Result openClosedTravelAgency(String id) { + if (StrUtil.isBlank(id)) { + return Result.error("参数错误"); + } + travelAgencyService.openTravelAgency(id); + return Result.success(); + } + + @At + @ApiOperation("删除旅行社") + @Aop(TransAop.READ_COMMITTED) + @SaCheckPermission("excellentRecuperation.travelAgency") + @SLog(type = "excellentRecuperation", tag = "删除旅行社", msg = "删除旅行社") + public Result onDelete(String id) { + if (StrUtil.isBlank(id)) { + return Result.error("参数错误"); + } + travelAgencyService.deleteTravelAgency(id); + return Result.success(); + } + + @At + @ApiOperation("查询旅行社") + @SaCheckPermission("excellentRecuperation.travelAgency") + public Result selectTravelAgency(Integer year) { + Cnd cnd = Cnd.NEW(); + cnd.andEX("year", "=", year); + List list = travelAgencyService.selectAllTravelAgencyByYear(cnd); + return Result.success(list); + } + + @At + @ApiOperation("年度区间查询旅行社") + @SaCheckPermission("excellentRecuperation.travelAgency") + public Result selectTravelAgencyByYears(Integer startYear, Integer endYear) { + Cnd cnd = Cnd.NEW(); + cnd.andEX("year", ">=", startYear); + cnd.andEX("year", "<=", endYear); + List list = travelAgencyService.selectAllTravelAgencyByYear(cnd); + return Result.success(list); + } + + @At + @ApiOperation("根据旅行社id查线路") + @SaCheckPermission("excellentRecuperation.travelAgency") + public Result selectLineByAgencyId(String agencyId) { + Sql sql = Sqls.create(""" + SELECT id,lineName FROM `the_rapy_recuperation_line` WHERE travelAgencyId=@travelAgencyId + """).setParam("travelAgencyId", agencyId); + List listMap = travelAgencyService.listMap(sql); + return Result.success(listMap); + } + + @At + @Ok("void") + @SaCheckPermission("excellentRecuperation.travelAgency") + public void downloadTemplate(HttpServletResponse response) { + + List list = new ArrayList<>(); + NutMap map = new NutMap(); + map.put("year", 2025); + map.put("serialNumber", 1); + map.put("travelAgencyName", "杭州海外旅游有限公司"); + map.put("contact", "张三"); + map.put("contactMobileNumber", "17867895678"); + map.put("email", "123@qq.com"); + map.put("isDisabled", "是"); + list.add(map); + + List entities = new ArrayList<>(); + entities.add(new ExcelExportEntity("年度", "year", 20)); + entities.add(new ExcelExportEntity("排序编号", "serialNumber", 20)); + entities.add(new ExcelExportEntity("旅行社名称", "travelAgencyName", 20)); + entities.add(new ExcelExportEntity("旅行社联系人", "contact", 20)); + entities.add(new ExcelExportEntity("联系电话", "contactMobileNumber", 20)); + entities.add(new ExcelExportEntity("邮箱", "email", 20)); + entities.add(new ExcelExportEntity("官网", "officialWebsite", 20)); + entities.add(new ExcelExportEntity("备注", "note", 20)); + ExcelExportEntity excelExport = new ExcelExportEntity("是否启用(是/否)", "isDisabled", 20); + String[] options = {"是_1", "否_0"}; + excelExport.setReplace(options); + excelExport.setAddressList(true); + entities.add(excelExport); + + ExportParams exportParams = new ExportParams(); + exportParams.setType(ExcelType.XSSF); + Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entities, list); + CommonDownloadUtil.download("旅行社导入模板.xlsx", workbook, response); + } + + @At + @ApiOperation("旅行社导入") + @Aop(TransAop.READ_COMMITTED) + @SaCheckPermission("excellentRecuperation.travelAgency") + @SLog(type = "excellentRecuperation", tag = "旅行社导入", msg = "旅行社导入") + @AdaptBy(type = UploadAdaptor.class, args = {"ioc:fileUpload"}) + public Result travelAgencyImport(@Param("file") TempFile file) { + List travelAgency = ExcelImportUtil.importExcel(file.getFile(), TravelAgencyExcelMode.class, new ImportParams()); + // 创建结果集 + ExcelImportRes excelImportRes = new ExcelImportRes<>(); + excelImportRes.setTotalRecords(travelAgency.size()); + + List travelAgencyList = dao.query(RecuperationTravelAgency.class, Cnd.NEW().desc("id")); + Map map = travelAgencyList.stream().collect(Collectors.toMap(RecuperationTravelAgency::getTravelAgencyName, RecuperationTravelAgency::getId)); + + for (int i = 0; i < travelAgency.size(); i++) { + TravelAgencyExcelMode travel = travelAgency.get(i); + if(travel.getYear() == null) { + travel.setErrInfo("年度为空", i + 1); + continue; + } + if (StrUtil.isBlank(travel.getTravelAgencyName())) { + travel.setErrInfo("旅行社名称为空", i + 1); + continue; + } + RecuperationTravelAgency agency = new RecuperationTravelAgency(); + if (Strings.isNotBlank(map.get(travel.getTravelAgencyName()))){ + agency.setId(map.get(travel.getTravelAgencyName())); + } + if ("是".equals(travel.getIsDisabled())) { + agency.setDisabled(false); + } else if ("否".equals(travel.getIsDisabled())) { + agency.setDisabled(true); + } + agency.setContact(travel.getContact()); + agency.setTravelAgencyName(travel.getTravelAgencyName()); + agency.setSerialNumber(travel.getSerialNumber()); + agency.setEmail(travel.getEmail()); + agency.setContactMobileNumber(travel.getContactMobileNumber()); + agency.setNote(travel.getNote()); + agency.setYear(travel.getYear()); + agency.setOfficialWebsite(travel.getOfficialWebsite()); + try { + dao.insertOrUpdate(agency); + } catch (Exception e) { + log.error("导入旅行社失败:{}", e.getMessage()); + travel.setErrInfo("添加失败", i + 1); + } + } + + // 添加错误记录 + excelImportRes.setErrorDetails(travelAgency.stream().filter(s -> StrUtil.isNotBlank(s.getErrMsg())).collect(Collectors.toList())); + excelImportRes.setFailedCount(excelImportRes.getErrorDetails().size()); + excelImportRes.setSuccessCount(Math.max(travelAgency.size() - excelImportRes.getFailedCount(), 0)); + return Result.success(excelImportRes); + } + +} diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/model/ExcellentRecuperationActivity.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/model/ExcellentRecuperationActivity.java new file mode 100644 index 00000000..fc1e06b3 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/model/ExcellentRecuperationActivity.java @@ -0,0 +1,66 @@ +package com.budwk.app.zhgh.staffbenefit.excellentRecuperation.model; + +import cn.hutool.json.JSONObject; +import com.budwk.app.base.model.BaseModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.nutz.dao.entity.annotation.*; +import org.nutz.dao.interceptor.annotation.PrevInsert; + +import java.util.List; + +/** + * @author zhf + * @date 2025/8/26 21:26 + * @description 疗休养活动 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@Table("excellent_recuperation_activity") +@TableMeta("{'mysql-charset':'utf8mb4'}") +@Comment("疗休养活动") +public class ExcellentRecuperationActivity extends BaseModel { + + @Name + @Comment("id") + @PrevInsert(uu32 = true) + private String id; + + @Column + @Comment("名称") + @ColDefine(type = ColType.VARCHAR, width = 100) + private String activityName; + + + @Column + @Comment("报名开始时间") + @ColDefine(type = ColType.VARCHAR, width = 30) + private String signUpStartTime; + + @Column + @Comment("报名截止时间") + @ColDefine(type = ColType.VARCHAR, width = 30) + private String signUpEndTIme; + + + @Column + @Comment("活动内容") + @ColDefine(type = ColType.TEXT) + private String activityContent; + + @Column + @Comment("附件") + @ColDefine(type = ColType.MYSQL_JSON) + private List files; + + @Column + @Comment("活动线路") + @ColDefine(type = ColType.MYSQL_JSON) + private List linIds; + + private String linNames; + + @Many(field = "activityId") + private List unionQuotaAllocationList; + +} diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/model/ExcellentRecuperationLine.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/model/ExcellentRecuperationLine.java new file mode 100644 index 00000000..aa8e05bf --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/model/ExcellentRecuperationLine.java @@ -0,0 +1,75 @@ +package com.budwk.app.zhgh.staffbenefit.excellentRecuperation.model; + +import com.budwk.app.base.model.BaseModel; +import com.budwk.app.zhgh.staffbenefit.recuperation.model.RecuperationTravelAgency; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.nutz.dao.entity.annotation.*; +import org.nutz.dao.interceptor.annotation.PrevInsert; + +/** + * @author zhf + * @date 2025/8/26 18:36 + * @description 线路管理 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@Table("excellent_recuperation_line") +@TableMeta("{'mysql-charset':'utf8mb4'}") +@Comment("疗休养旅行社") +public class ExcellentRecuperationLine extends BaseModel { + + @Name + @Comment("id") + @PrevInsert(uu32 = true) + private String id; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 50) + @Comment("编号") + private String serialNumber; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 50) + @Comment("线路名称") + private String lineName; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 32) + @Comment("旅行社Id") + private String travelAgencyId; + + @Column + @ColDefine(customType = "text") + @Comment("疗休养内容") + private String content; + + @Column + @ColDefine(type = ColType.INT) + @Comment("年度") + private Integer year; + + @Column + @ColDefine(type = ColType.BOOLEAN) + @Comment("是否禁用") + private boolean isDisabled; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 50) + @Comment("缩略图") + private String file; + + @Column + @ColDefine(type = ColType.VARCHAR) + @Comment("联系人") + private String lineContact; + + @Column + @ColDefine(type = ColType.VARCHAR) + @Comment("联系电话") + private String lineContactPhone; + + @One(field = "travelAgencyId") + private ExcellentRecuperationTravelAgency travelAgency; + +} diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/model/ExcellentRecuperationQuotaAllocation.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/model/ExcellentRecuperationQuotaAllocation.java new file mode 100644 index 00000000..65f2c2c2 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/model/ExcellentRecuperationQuotaAllocation.java @@ -0,0 +1,59 @@ +package com.budwk.app.zhgh.staffbenefit.excellentRecuperation.model; + +import com.budwk.app.base.model.BaseModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.nutz.dao.entity.annotation.*; +import org.nutz.dao.interceptor.annotation.PrevInsert; + +/** + * @author zhf + * @date 2025/8/27 08:49 + * @description 疗休养分配名额 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@Table("excellent_recuperation_quota_allocation") +@TableMeta("{'mysql-charset':'utf8mb4'}") +@Comment("疗休养活动") +public class ExcellentRecuperationQuotaAllocation extends BaseModel { + + @Name + @Comment("id") + @PrevInsert(uu32 = true) + private String id; + + + @Column + @Comment("活动Id") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String activityId; + + @Column + @Comment("工会Id") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String unionId; + + @Column + @Comment("工会名称") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String unionName; + + @Column + @Comment("工会编码") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String unionCode; + + @Column + @Comment("名额分配数") + @ColDefine(type = ColType.INT, width = 4) + @Default("0") + private Integer allocationNum; + + @Column + @Comment("会员数量") + @ColDefine(type = ColType.INT, width = 4) + @Default("0") + private Integer memberNum; + +} diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/model/ExcellentRecuperationSignUpUser.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/model/ExcellentRecuperationSignUpUser.java new file mode 100644 index 00000000..7e04d8fd --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/model/ExcellentRecuperationSignUpUser.java @@ -0,0 +1,94 @@ +package com.budwk.app.zhgh.staffbenefit.excellentRecuperation.model; + +import cn.hutool.json.JSONObject; +import com.budwk.app.base.model.BaseModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.nutz.dao.entity.annotation.*; +import org.nutz.dao.interceptor.annotation.PrevInsert; + +import java.util.List; + +/** + * @author zhf + * @date 2025/8/27 16:13 + * @description 疗休养报名人员 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@Table("excellent_recuperation_sign_user") +@TableMeta("{'mysql-charset':'utf8mb4'}") +@Comment("疗休养报名人员") +public class ExcellentRecuperationSignUpUser extends BaseModel { + + @Name + @Comment("id") + @PrevInsert(uu32 = true) + private String id; + + @Column + @Comment("姓名Id") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String userId; + + @Column + @Comment("活动Id") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String activityId; + + @Column + @Comment("线路Id") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String lineId; + + @Column + @Comment("姓名") + @ColDefine(type = ColType.VARCHAR, width = 50) + private String userName; + + @Column + @Comment("联系电话") + @ColDefine(type = ColType.VARCHAR, width = 50) + private String mobile; + + @Column + @Comment("身份证号") + @ColDefine(type = ColType.VARCHAR, width = 50) + private String idCard; + + @Column + @Comment("工号") + @ColDefine(type = ColType.VARCHAR, width = 50) + private String loginName; + + @Column + @Comment("工会Id") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String unionId; + + @Column + @Comment("工会名称") + @ColDefine(type = ColType.VARCHAR, width = 50) + private String unionName; + + @Column + @Comment("单位Id") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String unitId; + + @Column + @Comment("单位名称") + @ColDefine(type = ColType.VARCHAR, width = 50) + private String unitName; + + @Column + @Comment("附件") + @ColDefine(type = ColType.MYSQL_JSON) + private List files; + + @Column + @Comment("报名时间") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String signUpTime; + +} diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/model/ExcellentRecuperationTravelAgency.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/model/ExcellentRecuperationTravelAgency.java new file mode 100644 index 00000000..0f520126 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/model/ExcellentRecuperationTravelAgency.java @@ -0,0 +1,77 @@ +package com.budwk.app.zhgh.staffbenefit.excellentRecuperation.model; + +import com.budwk.app.base.model.BaseModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.nutz.dao.entity.annotation.*; +import org.nutz.dao.interceptor.annotation.PrevInsert; + +/** + * @author zhf + * @date 2025/8/26 18:06 + * @description 旅行社管理 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@Table("excellent_recuperation_travel_agency") +@TableMeta("{'mysql-charset':'utf8mb4'}") +@Comment("疗休养旅行社") +public class ExcellentRecuperationTravelAgency extends BaseModel { + + @Name + @Comment("id") + @PrevInsert(uu32 = true) + private String id; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 50) + @Comment("旅行社编号") + private String serialNumber; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 50) + @Comment("旅行社名称") + private String travelAgencyName; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 20) + @Comment("旅行社联系人") + private String contact; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 11) + @Comment("旅行社联系人手机") + private String contactMobileNumber; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 50) + @Comment("旅行社邮箱") + private String email; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 100) + @Comment("旅行社官网") + private String officialWebsite; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 100) + @Comment("备注") + private String note; + + @Column + @ColDefine(type = ColType.INT) + @Comment("年度") + private Integer year; + + @Column + @ColDefine(type = ColType.BOOLEAN) + @Comment("是否禁用") + private boolean isDisabled; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 100) + @Comment("缩略图") + private String file; + + +} diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/service/ExcellentRecuperationLineService.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/service/ExcellentRecuperationLineService.java new file mode 100644 index 00000000..dbd1daed --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/service/ExcellentRecuperationLineService.java @@ -0,0 +1,28 @@ +package com.budwk.app.zhgh.staffbenefit.excellentRecuperation.service; + +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.service.BaseService; +import com.budwk.app.zhgh.staffbenefit.excellentRecuperation.model.ExcellentRecuperationLine; +import lombok.extern.slf4j.Slf4j; +import org.nutz.dao.Cnd; +import org.nutz.ioc.loader.annotation.IocBean; + +import java.util.List; + +public interface ExcellentRecuperationLineService extends BaseService { + + + Pagination pageData(PageForm pageForm, Cnd cnd); + + + /** + * 获取当前年度的线路列表 + * @return + */ + List listLineListByThisYear(); + + + + +} diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/service/ExcellentRecuperationSummaryService.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/service/ExcellentRecuperationSummaryService.java new file mode 100644 index 00000000..4fdd3ad7 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/service/ExcellentRecuperationSummaryService.java @@ -0,0 +1,10 @@ +package com.budwk.app.zhgh.staffbenefit.excellentRecuperation.service; + +import com.budwk.app.base.service.BaseService; +import com.budwk.app.zhgh.staffbenefit.excellentRecuperation.vo.ExcellentRecuperationPageForm; +import org.nutz.dao.sql.Sql; + +public interface ExcellentRecuperationSummaryService extends BaseService { + + Sql getsql(ExcellentRecuperationPageForm pageForm); +} diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/service/ExcellentRecuperationTravelAgencyService.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/service/ExcellentRecuperationTravelAgencyService.java new file mode 100644 index 00000000..cff96c6c --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/service/ExcellentRecuperationTravelAgencyService.java @@ -0,0 +1,65 @@ +package com.budwk.app.zhgh.staffbenefit.excellentRecuperation.service; + +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.service.BaseService; +import com.budwk.app.zhgh.staffbenefit.excellentRecuperation.model.ExcellentRecuperationTravelAgency; +import com.budwk.app.zhgh.staffbenefit.recuperation.model.RecuperationTravelAgency; +import org.nutz.dao.Cnd; +import org.nutz.lang.util.NutMap; + +import java.util.List; + + +public interface ExcellentRecuperationTravelAgencyService extends BaseService { + + /** + * 删除旅行社 + * + * @param travelAgencyId 旅行社 ID + */ + void deleteTravelAgency(String travelAgencyId); + + + /** + * 添加旅行社 + * + * @param travelAgency 旅行社 + */ + void addTravelAgency(ExcellentRecuperationTravelAgency travelAgency); + + /** + * 编辑旅行社 + * + * @param travelAgency 旅行社 + */ + void editTravelAgency(ExcellentRecuperationTravelAgency travelAgency); + + + /** + * 开启或关闭旅行社 + * + * @param travelAgencyId 旅行社id + */ + void openTravelAgency(String travelAgencyId); + + + /** + * 页面数据 + * + * @param pageForm 分页参数 + * @param cnd cnd + * @return {@link Pagination} + */ + Pagination pageData(PageForm pageForm, Cnd cnd); + + + /** + * 查询旅行社 + * + * @param cnd cnd + * @return {@link List}<{@link RecuperationTravelAgency}> + */ + List selectAllTravelAgencyByYear(Cnd cnd); + +} diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/service/impl/ExcellentRecuperationLineServiceImpl.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/service/impl/ExcellentRecuperationLineServiceImpl.java new file mode 100644 index 00000000..b410c7bc --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/service/impl/ExcellentRecuperationLineServiceImpl.java @@ -0,0 +1,61 @@ +package com.budwk.app.zhgh.staffbenefit.excellentRecuperation.service.impl; + +import cn.hutool.core.date.DateUtil; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.service.impl.BaseServiceImpl; +import com.budwk.app.zhgh.staffbenefit.excellentRecuperation.model.ExcellentRecuperationLine; +import com.budwk.app.zhgh.staffbenefit.excellentRecuperation.service.ExcellentRecuperationLineService; +import lombok.extern.slf4j.Slf4j; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.ioc.loader.annotation.IocBean; + +import java.util.List; + +/** + * @author zhf + * @date 2025/8/26 19:09 + * @description + */ +@Slf4j +@IocBean(args = {"refer:dao"}) +public class ExcellentRecuperationLineServiceImpl extends BaseServiceImpl implements ExcellentRecuperationLineService { + public ExcellentRecuperationLineServiceImpl(Dao dao) { + super(dao); + } + + @Override + public Pagination pageData(PageForm pageForm, Cnd cnd) { + Sql sql = Sqls.create(""" + SELECT + line.id, + line.serialNumber, + line.lineName, + line.year, + line.isDisabled, + line.file AS fileId, + u.username AS createUserName, + ta.travelAgencyName, + ta.contact, + ta.contactMobileNumber, + ta.officialWebsite + FROM + excellent_recuperation_line line + LEFT JOIN excellent_recuperation_travel_agency ta ON ta.id = line.travelAgencyId + LEFT JOIN sys_user u ON u.id = line.createdBy + $condition + """); + sql.setCondition(cnd); + return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + } + + @Override + public List listLineListByThisYear() { + + List lineList = query(Cnd.where("isDisabled", "=", true).and("year", "=", DateUtil.thisYear())); + return lineList; + } +} diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/service/impl/ExcellentRecuperationSummaryServiceImpl.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/service/impl/ExcellentRecuperationSummaryServiceImpl.java new file mode 100644 index 00000000..b00fc995 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/service/impl/ExcellentRecuperationSummaryServiceImpl.java @@ -0,0 +1,70 @@ +package com.budwk.app.zhgh.staffbenefit.excellentRecuperation.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.service.impl.BaseServiceImpl; +import com.budwk.app.flow.enums.ProcessTaskStateEnum; +import com.budwk.app.zhgh.staffbenefit.excellentRecuperation.service.ExcellentRecuperationSummaryService; +import com.budwk.app.zhgh.staffbenefit.excellentRecuperation.vo.ExcellentRecuperationPageForm; +import lombok.extern.slf4j.Slf4j; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.ioc.loader.annotation.IocBean; + +/** + * @author zhf + * @date 2025/8/28 10:24 + * @description + */ +@Slf4j +@IocBean(args = {"refer:dao"}) +public class ExcellentRecuperationSummaryServiceImpl extends BaseServiceImpl implements ExcellentRecuperationSummaryService { + public ExcellentRecuperationSummaryServiceImpl(Dao dao) { + super(dao); + } + + @Override + public Sql getsql(ExcellentRecuperationPageForm pageForm) { + Sql sql = Sqls.create(""" + SELECT + info.*, + line.lineName, + 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 + excellent_recuperation_sign_user info + LEFT JOIN excellent_recuperation_line line ON line.id = info.lineId + 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_actor ta ON ta.processTaskId = t.id + $condition + """); + Cnd cnd = Cnd.NEW(); + cnd.andEX("YEAR(info.signUpTime)", "=", pageForm.getYear()); + cnd.andEX("info.activityId", "=", pageForm.getActivityId()); + cnd.andEX("info.unionId", "=", pageForm.getUnionId()); + cnd.andEX("info.unitId", "=", pageForm.getUnitId()); + cnd.and("ins.state", "=", ProcessTaskStateEnum.FINISHED.getCode()); + if (StrUtil.isNotBlank(pageForm.getSearchName())&& StrUtil.isNotBlank(pageForm.getSearchKeyword())){ + cnd.where().andLike(pageForm.getSearchName(), pageForm.getSearchKeyword()); + } + sql.setCondition(cnd); + return sql; + } +} diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/service/impl/ExcellentRecuperationTravelAgencyServiceImpl.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/service/impl/ExcellentRecuperationTravelAgencyServiceImpl.java new file mode 100644 index 00000000..202eb980 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/service/impl/ExcellentRecuperationTravelAgencyServiceImpl.java @@ -0,0 +1,67 @@ +package com.budwk.app.zhgh.staffbenefit.excellentRecuperation.service.impl; + +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.service.impl.BaseServiceImpl; +import com.budwk.app.zhgh.staffbenefit.excellentRecuperation.model.ExcellentRecuperationTravelAgency; +import com.budwk.app.zhgh.staffbenefit.excellentRecuperation.service.ExcellentRecuperationTravelAgencyService; +import com.budwk.app.zhgh.staffbenefit.recuperation.model.RecuperationTravelAgency; +import lombok.extern.slf4j.Slf4j; +import org.nutz.dao.Chain; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.ioc.loader.annotation.IocBean; + +import java.util.List; + + +@Slf4j +@IocBean(args = {"refer:dao"}) +public class ExcellentRecuperationTravelAgencyServiceImpl extends BaseServiceImpl implements ExcellentRecuperationTravelAgencyService { + + public ExcellentRecuperationTravelAgencyServiceImpl(Dao dao) { + super(dao); + } + + @Override + public void deleteTravelAgency(String travelAgencyId) { + delete(travelAgencyId); + } + + @Override + public void addTravelAgency(ExcellentRecuperationTravelAgency travelAgency) { + insert(travelAgency); + } + + @Override + public void editTravelAgency(ExcellentRecuperationTravelAgency travelAgency) { + update(travelAgency); + } + + @Override + public void openTravelAgency(String travelAgencyId) { + update(Chain.makeSpecial("isDisabled", "isDisabled ^ 1"), Cnd.where("id", "=", travelAgencyId)); + } + + @Override + public Pagination pageData(PageForm pageForm, Cnd cnd) { + Sql sql = Sqls.create(""" + select + *, + file as fileId + from + excellent_recuperation_travel_agency + $condition + """); + sql.setCondition(cnd); + return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + } + + @Override + public List selectAllTravelAgencyByYear(Cnd cnd) { + return dao().query(ExcellentRecuperationTravelAgency.class, cnd); + } + +} diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/vo/ExcellentRecuperationPageForm.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/vo/ExcellentRecuperationPageForm.java new file mode 100644 index 00000000..d2b9c2f7 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/excellentRecuperation/vo/ExcellentRecuperationPageForm.java @@ -0,0 +1,18 @@ +package com.budwk.app.zhgh.staffbenefit.excellentRecuperation.vo; + +import com.budwk.app.base.param.PageForm; +import lombok.Data; + +/** + * @author zhf + * @date 2025/8/28 10:23 + * @description + */ +@Data +public class ExcellentRecuperationPageForm extends PageForm { + + private String year; + private String unionId; + private String unitId; + private String activityId; +} diff --git a/src/main/resources/views/platform/zhgh/democratic/executiveCommittee/delegationOnePush/index.html b/src/main/resources/views/platform/zhgh/democratic/executiveCommittee/delegationOnePush/index.html new file mode 100644 index 00000000..72b41636 --- /dev/null +++ b/src/main/resources/views/platform/zhgh/democratic/executiveCommittee/delegationOnePush/index.html @@ -0,0 +1,194 @@ + + +
+ + + + + +
+ + + + + diff --git a/src/main/resources/views/platform/zhgh/democratic/executiveCommittee/delegationOnePush/onePushFormalDialog.js b/src/main/resources/views/platform/zhgh/democratic/executiveCommittee/delegationOnePush/onePushFormalDialog.js new file mode 100644 index 00000000..ac208f6f --- /dev/null +++ b/src/main/resources/views/platform/zhgh/democratic/executiveCommittee/delegationOnePush/onePushFormalDialog.js @@ -0,0 +1,95 @@ +const DELEGATION_ONE_PUSH_FORMAL_DIALOG = { + template: /*language=HTML*/ ` +
+ + +
+
+
{{ option.userName }} - {{ option.loginName }}
+
+ + {{option.sex}} + + {{ option.age }}岁 + {{ option.jobTitle }} +
+
+
+
+ + 取 消 + 确 定 + +
+
+ `, + data() { + return { + dialogVisible: false, + userValue: [], + userData: [], + rightChecked: [], + attendanceRightChecked: [], + teacherMeetId: null + } + }, + methods: { + async onOpen(teacherMeetId) { + + this.teacherMeetId = teacherMeetId + this.userValue = [] + this.userData = [] + const { + code, + msg, + data + } = await this.$axios.post('/platform/executiveCommittee/delegationOnePush/getDelegationUser', {teacherMeetId: teacherMeetId}) + if (code === 0) { + data.userData.forEach(v => { + this.userData.push({userId: v.userId, ...v}) + }) + this.dialogVisible = true + }else{ + this.$message.error(msg) + } + }, + filterMethod(query, item) { + return item.userName.indexOf(query) > -1 + }, + async onConfirm() { + const { + code, + msg + } = await this.$axios.post('/platform/executiveCommittee/delegationOnePush/addOnePush', { + userValue: JSON.stringify(this.userValue), + teacherMeetId: this.teacherMeetId + }) + if (code === 0) { + this.dialogVisible = false + this.$message.success(msg) + this.$emit('refresh') + }else{ + this.$message.error(msg) + } + } + }, + style: /*language=CSS*/ ` + + ` +} diff --git a/src/main/resources/views/platform/zhgh/democratic/executiveCommittee/delegationTwoPush/index.html b/src/main/resources/views/platform/zhgh/democratic/executiveCommittee/delegationTwoPush/index.html new file mode 100644 index 00000000..ee6fd651 --- /dev/null +++ b/src/main/resources/views/platform/zhgh/democratic/executiveCommittee/delegationTwoPush/index.html @@ -0,0 +1,193 @@ + + +
+ + + + + +
+ + + + + diff --git a/src/main/resources/views/platform/zhgh/democratic/executiveCommittee/delegationTwoPush/twoPushFormalDialog.js b/src/main/resources/views/platform/zhgh/democratic/executiveCommittee/delegationTwoPush/twoPushFormalDialog.js new file mode 100644 index 00000000..0b8aa5c0 --- /dev/null +++ b/src/main/resources/views/platform/zhgh/democratic/executiveCommittee/delegationTwoPush/twoPushFormalDialog.js @@ -0,0 +1,142 @@ +const DELEGATION_TWO_PUSH_FORMAL_DIALOG = { + template: /*language=HTML*/ ` +
+ + +
+
+
{{ option.userName }} - {{ option.loginName }}
+
+ + {{option.sex}} + + {{ option.age }}岁 + {{ option.jobTitle }} +
+
+
+
+ + 取 消 + 确 定 + +
+
+ `, + data() { + return { + dialogVisible: false, + userValue: [], + userData: [], + rightChecked: [], + attendanceRightChecked: [], + teacherMeetId: null + } + }, + methods: { + async onOpen(teacherMeetId) { + this.teacherMeetId = teacherMeetId + this.userValue = [] + this.userData = [] + const { + code, + msg, + data + } = await this.$axios.post('/platform/executiveCommittee/delegationTwoPush/getDelegationUser', {teacherMeetId: teacherMeetId}) + if (code === 0) { + data.userData.forEach(v => { + this.userData.push({userId: v.userId, ...v}) + }) + this.dialogVisible = true + }else{ + this.$message.error(msg) + } + }, + filterMethod(query, item) { + return item.userName.indexOf(query) > -1 + }, + async onConfirm() { + const { + code, + msg + } = await this.$axios.post('/platform/executiveCommittee/delegationTwoPush/addOnePush', { + userValue: JSON.stringify(this.userValue), + teacherMeetId: this.teacherMeetId + }) + if (code === 0) { + this.dialogVisible = false + this.$message.success(msg) + this.$emit('refresh') + }else{ + this.$message.error(msg) + } + } + }, + style: /*language=CSS*/ ` + .pushFormDialog .el-transfer-panel__item.el-checkbox { + height: auto; + display: block; + margin-right: 0; + padding: 0 15px; + } + + .pushFormDialog .el-checkbox__input { + vertical-align: top; + margin-top: 5px; + } + + .pushFormDialog .transfer-item { + padding: 5px; + font-size: 12px; + border-bottom: 1px solid #f0f0f0; + } + + .pushFormDialog .transfer-item-name { + font-weight: bold; + margin-bottom: 3px; + color: #303133; + } + + .pushFormDialog .transfer-item-details { + display: flex; + flex-wrap: wrap; + gap: 6px; + color: #606266; + } + + .pushFormDialog .detail-item { + display: inline-flex; + align-items: center; + } + + .pushFormDialog .el-transfer-panel { + height: 60vh; + } + + .pushFormDialog .el-transfer-panel__body { + height: calc(100% - 40px) !important; + display: flex; + flex-direction: column; + } + + .pushFormDialog .el-transfer-panel__list.is-filterable { + flex: 1; + } + ` +} diff --git a/src/main/resources/views/platform/zhgh/democratic/executiveCommittee/executiveCommitteeConfig/index.html b/src/main/resources/views/platform/zhgh/democratic/executiveCommittee/executiveCommitteeConfig/index.html new file mode 100644 index 00000000..60346ce0 --- /dev/null +++ b/src/main/resources/views/platform/zhgh/democratic/executiveCommittee/executiveCommitteeConfig/index.html @@ -0,0 +1,176 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 提 交 + + + + +
+ + + + diff --git a/src/main/resources/views/platform/zhgh/democratic/executiveCommittee/executiveCommitteeMember/index.html b/src/main/resources/views/platform/zhgh/democratic/executiveCommittee/executiveCommitteeMember/index.html new file mode 100644 index 00000000..ce87c371 --- /dev/null +++ b/src/main/resources/views/platform/zhgh/democratic/executiveCommittee/executiveCommitteeMember/index.html @@ -0,0 +1,192 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 导出名单 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 确定 + + + +
+ + + + + diff --git a/src/main/resources/views/platform/zhgh/democratic/executiveCommittee/preparatoryGroupPush/index.html b/src/main/resources/views/platform/zhgh/democratic/executiveCommittee/preparatoryGroupPush/index.html new file mode 100644 index 00000000..9c2ab8bc --- /dev/null +++ b/src/main/resources/views/platform/zhgh/democratic/executiveCommittee/preparatoryGroupPush/index.html @@ -0,0 +1,208 @@ + + +
+ + + + + +
+ + + + + diff --git a/src/main/resources/views/platform/zhgh/democratic/executiveCommittee/preparatoryGroupPush/pushFormalDialog.js b/src/main/resources/views/platform/zhgh/democratic/executiveCommittee/preparatoryGroupPush/pushFormalDialog.js new file mode 100644 index 00000000..5d258693 --- /dev/null +++ b/src/main/resources/views/platform/zhgh/democratic/executiveCommittee/preparatoryGroupPush/pushFormalDialog.js @@ -0,0 +1,87 @@ +const PUSH_FORMAL_DIALOG = { + template: /*language=HTML*/ ` +
+ + +
+
+
{{ option.userName }} - {{ option.loginName }}
+
+ + {{option.sex}} + + {{ option.age }}岁 + {{ option.jobTitle }} +
+
+
+
+ + 取 消 + 确 定 + +
+
+ `, + data() { + return { + dialogVisible: false, + userValue: [], + userData: [], + rightChecked: [], + attendanceRightChecked: [], + teacherMeetId: null + } + }, + methods: { + async onOpen(teacherMeetId) { + this.dialogVisible = true + this.teacherMeetId = teacherMeetId + this.userValue = [] + this.userData = [] + const { + code, + data + } = await this.$axios.post('/platform/executiveCommittee/preparatoryGroupPush/getDelegationUser', {teacherMeetId: teacherMeetId}) + if (code === 0) { + data.userData.forEach(v => { + this.userData.push({userId: v.userId, ...v}) + }) + } + }, + filterMethod(query, item) { + return item.userName.indexOf(query) > -1 + }, + async onConfirm() { + const { + code, + msg + } = await this.$axios.post('/platform/executiveCommittee/preparatoryGroupPush/addOnePush', { + userValue: JSON.stringify(this.userValue), + teacherMeetId: this.teacherMeetId + }) + if (code === 0) { + this.dialogVisible = false + this.$message.success(msg) + this.$emit('refresh') + } + } + }, + +} diff --git a/src/main/resources/views/platform/zhgh/democratic/teachercongress/prepare/quotaAllocation/index.html b/src/main/resources/views/platform/zhgh/democratic/teachercongress/prepare/quotaAllocation/index.html new file mode 100644 index 00000000..7ff0b789 --- /dev/null +++ b/src/main/resources/views/platform/zhgh/democratic/teachercongress/prepare/quotaAllocation/index.html @@ -0,0 +1,110 @@ + + +
+ + + + + + + + + + + + + + + + + + 分配名额 + + + + + + + + + + + + + + + + + +
+ + + + + diff --git a/src/main/resources/views/platform/zhgh/democratic/teachercongress/prepare/quotaAllocation/manualAllocationDialog.js b/src/main/resources/views/platform/zhgh/democratic/teachercongress/prepare/quotaAllocation/manualAllocationDialog.js new file mode 100644 index 00000000..f4d24551 --- /dev/null +++ b/src/main/resources/views/platform/zhgh/democratic/teachercongress/prepare/quotaAllocation/manualAllocationDialog.js @@ -0,0 +1,190 @@ +const MANUAL_ALLOCATION_DIALOG = { + template: /*language=HTML*/ ` + + + 一键比例: + + 应用比例设置 + + + + + + + + + + + + + + + + + + + + + + + + + + + + 清空当前已分配 + + + + 取 消 + 确 定 + + + `, + data() { + return { + unionUserNumOneKeyRatio: null, + sessionId: "", + unionLimit: [], + manualAllocationDialog: false, + } + }, + methods: { + async doManualAllocationSub() { + const hasNull = this.unionLimit.some(v => v.allocationNum === undefined) + if (hasNull) { + this.$message.warning('还有未设置的数据!') + return + } + + const confirm = await this.$confirm('您确定要分配吗?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }).catch(err => err) + if (confirm === 'confirm') { + const { + code, + msg + } = await this.$axios.post('/platform/teacherCongress/prepare/quotaAllocation/doQuotaAllocation', { + list: JSON.stringify(this.unionLimit), + sessionId: this.sessionId + }) + if (code === 0) { + this.manualAllocationDialog = false + this.$message.success(msg) + this.$emit('refresh') + } + } + }, + async clearUnionLimit() { + const confirm = await this.$confirm('确定要清空分工会人数限制吗, 是否继续?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }).catch(err => err) + if (confirm === 'confirm') { + this.unionLimit = [] + this.unionUserNumOneKeyRatio = null + await this.getUnionUsers() + } + }, + applyScaleSettings() { + this.unionLimit.forEach(v => { + v.ratio = this.unionUserNumOneKeyRatio + if (v.ratio) { + const num = parseFloat((v.memberCount * v.ratio / 100).toFixed(0)) + v.allocationNum = (num === 0 ? 1 : num) + } + }) + }, + ratioChange(val, index) { + const v = this.unionLimit[index] + const num = parseFloat((v.memberCount * v.ratio / 100).toFixed(0)) + v.allocationNum = (num === 0 ? 1 : num) + this.$forceUpdate() + }, + getUnionUsers() { + this.$axios.post('/platform/teacherCongress/prepare/quotaAllocation/getUnionLimit', {sessionId: this.sessionId}).then(resp => { + if (resp.code === 0) { + this.unionLimit = resp.data + } + }) + }, + async onOpen(sessionId) { + this.sessionId = sessionId + this.manualAllocationDialog = true + this.getUnionUsers() + } + } +} diff --git a/src/main/resources/views/platform/zhgh/enrollmentRegistration/apply/index.html b/src/main/resources/views/platform/zhgh/enrollmentRegistration/apply/index.html new file mode 100644 index 00000000..81087cec --- /dev/null +++ b/src/main/resources/views/platform/zhgh/enrollmentRegistration/apply/index.html @@ -0,0 +1,297 @@ + + + +
+ + + + + + + + + {{i.registrationTypeName}} + + + + + + + {{formData.userName}} + + + + {{formData.loginName}} + + + + + + + + + + {{formData.unitName}} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 保存 + 提交 + 提交 + + +
+ + + + diff --git a/src/main/resources/views/platform/zhgh/enrollmentRegistration/applyList/index.html b/src/main/resources/views/platform/zhgh/enrollmentRegistration/applyList/index.html new file mode 100644 index 00000000..ab1f248d --- /dev/null +++ b/src/main/resources/views/platform/zhgh/enrollmentRegistration/applyList/index.html @@ -0,0 +1,114 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + diff --git a/src/main/resources/views/platform/zhgh/enrollmentRegistration/info.js b/src/main/resources/views/platform/zhgh/enrollmentRegistration/info.js new file mode 100644 index 00000000..eaaf97c9 --- /dev/null +++ b/src/main/resources/views/platform/zhgh/enrollmentRegistration/info.js @@ -0,0 +1,133 @@ +const ENROLLMENT_REGISTRATION_INFO = { + template: /*language=HTML*/ ` + +
+
+ 申请信息 + 点击查看流程图 +
+ + {{viewData.userName}} + {{viewData.loginName}} + {{viewData.mobile}} + {{viewData.unitName}} + + + + + + + + {{viewData.childrenName}} + + + {{viewData.sex}} + + + {{viewData.childrenIdCard}} + + + {{viewData.childrenCurrentSchool}} + + + + + + {{viewData.childrenHuKouAddress}} + + + {{viewData.note}} + + + + + + + + + + + + + + + +
+ `, + dicts: ["ENROLLMENT_REGISTRATION_TYPE", "ENROLLMENT_REGISTRATION_CHILD_RELATIONSHIP", "ENROLLMENT_REGISTRATION_CHILDREN_PLAN_SCHOOL"], + data() { + return { + viewData: {}, + doneTasks: [], + row: null + } + }, + methods: { + // 打开 + onOpen(row) { + this.row = row + this.getInfo() + this.getDoneTasks() + }, + // 获取申请信息 + getInfo() { + this.$axios.post('/platform/enrollmentRegistration/apply/findOne', {id: this.row.id}).then((res) => { + if (res.code === 0) { + this.viewData = res.data + } + }) + }, + // 获取已办任务审批记录 + getDoneTasks() { + this.$axios.post("/flow/common/doneTasks", {bizId: this.row.id}).then((res) => { + if (res.code === 0) { + this.doneTasks = res.data + } + }) + }, + + // 查看流程图 + openChart(){ + this.$refs.snakerChartRef.onOpenFull(this.row.instanceProcessDefineId,this.row.instanceId) + } + } +} diff --git a/src/main/resources/views/platform/zhgh/enrollmentRegistration/plan/index.html b/src/main/resources/views/platform/zhgh/enrollmentRegistration/plan/index.html new file mode 100644 index 00000000..0dbf7859 --- /dev/null +++ b/src/main/resources/views/platform/zhgh/enrollmentRegistration/plan/index.html @@ -0,0 +1,200 @@ + + +
+ + + + + + + + + + + + + 创建计划 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 关闭 + 提交 + + +
+ + + + + diff --git a/src/main/resources/views/platform/zhgh/enrollmentRegistration/schoolAudit/index.html b/src/main/resources/views/platform/zhgh/enrollmentRegistration/schoolAudit/index.html new file mode 100644 index 00000000..09d46060 --- /dev/null +++ b/src/main/resources/views/platform/zhgh/enrollmentRegistration/schoolAudit/index.html @@ -0,0 +1,225 @@ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 已审核 + 未审核 + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + diff --git a/src/main/resources/views/platform/zhgh/enrollmentRegistration/summary/index.html b/src/main/resources/views/platform/zhgh/enrollmentRegistration/summary/index.html new file mode 100644 index 00000000..267711b0 --- /dev/null +++ b/src/main/resources/views/platform/zhgh/enrollmentRegistration/summary/index.html @@ -0,0 +1,170 @@ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 导出汇总名单 + + 导出附件zip + + + + + + + + + + + + + + + + + + + + + + + +
+ + + diff --git a/src/main/resources/views/platform/zhgh/enrollmentRegistration/unionAudit/index.html b/src/main/resources/views/platform/zhgh/enrollmentRegistration/unionAudit/index.html new file mode 100644 index 00000000..071e66cc --- /dev/null +++ b/src/main/resources/views/platform/zhgh/enrollmentRegistration/unionAudit/index.html @@ -0,0 +1,200 @@ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + 已审核 + 未审核 + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + diff --git a/src/main/resources/views/platform/zhgh/outlay/activityBudget/apply/form.html b/src/main/resources/views/platform/zhgh/outlay/activityBudget/apply/form.html deleted file mode 100644 index 0dea9b51..00000000 --- a/src/main/resources/views/platform/zhgh/outlay/activityBudget/apply/form.html +++ /dev/null @@ -1,337 +0,0 @@ -
- - - {{formData.userName}} - {{formData.applyDate}} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 属于 - 不属于 - - - - - - - - - - - - - - - - - - - - - -
- - diff --git a/src/main/resources/views/platform/zhgh/outlay/activityBudget/apply/index.html b/src/main/resources/views/platform/zhgh/outlay/activityBudget/apply/index.html index bc6332e0..422b4913 100644 --- a/src/main/resources/views/platform/zhgh/outlay/activityBudget/apply/index.html +++ b/src/main/resources/views/platform/zhgh/outlay/activityBudget/apply/index.html @@ -112,8 +112,8 @@ layout("/layouts/platform.html"){ - + diff --git a/src/main/resources/views/platform/zhgh/outlay/activityBudget/applyStatistics/index.html b/src/main/resources/views/platform/zhgh/outlay/activityBudget/applyStatistics/index.html index 104836ba..111e8ad2 100644 --- a/src/main/resources/views/platform/zhgh/outlay/activityBudget/applyStatistics/index.html +++ b/src/main/resources/views/platform/zhgh/outlay/activityBudget/applyStatistics/index.html @@ -21,20 +21,6 @@ layout("/layouts/platform.html"){ - - - - - - - + + + + + + + + @@ -93,17 +94,21 @@ layout("/layouts/platform.html"){ + + width="200">