diff --git a/src/main/java/com/budwk/app/base/event/role/RoleEventListener.java b/src/main/java/com/budwk/app/base/event/role/RoleEventListener.java new file mode 100644 index 00000000..36ae34d2 --- /dev/null +++ b/src/main/java/com/budwk/app/base/event/role/RoleEventListener.java @@ -0,0 +1,13 @@ +package com.budwk.app.base.event.role; + +/** + * @version 1.0 + * @Author zzr + * @name:RoleEventListener + * @Date 2025/9/3 17:13 + * @注释 + */ +public interface RoleEventListener { + + void receive(RoleEventMsg message); +} diff --git a/src/main/java/com/budwk/app/base/event/role/RoleEventMsg.java b/src/main/java/com/budwk/app/base/event/role/RoleEventMsg.java new file mode 100644 index 00000000..c1e5213f --- /dev/null +++ b/src/main/java/com/budwk/app/base/event/role/RoleEventMsg.java @@ -0,0 +1,67 @@ +package com.budwk.app.base.event.role; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @version 1.0 + * @Author zzr + * @name:RoleEventMsg + * @Date 2025/9/3 17:14 + * @注释 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class RoleEventMsg { + + /** + * 用户id + */ + private List userIds; + + /** + * 角色code + */ + private String roleCode; + + /** + * 单位id + */ + private String unitId; + + /** + * 操作类型 + */ + private Integer operationType; + + /** + * 添加角色 + */ + public static final int ADD_ROLE = 1; + + /** + * 删除角色 + */ + public static final int REMOVE_ROLE = 2; + + /** + * 更新角色 + */ + public static final int RENEW_ROLE = 3; + + + public RoleEventMsg(String unitId, String roleCode, Integer operationType){ + this.unitId = unitId; + this.operationType = operationType; + } + + public RoleEventMsg(List userIds, String roleCode, Integer operationType){ + this.userIds = userIds; + this.roleCode = roleCode; + this.operationType = operationType; + } +} diff --git a/src/main/java/com/budwk/app/base/event/role/RoleEventPublisher.java b/src/main/java/com/budwk/app/base/event/role/RoleEventPublisher.java new file mode 100644 index 00000000..59ae31a1 --- /dev/null +++ b/src/main/java/com/budwk/app/base/event/role/RoleEventPublisher.java @@ -0,0 +1,21 @@ +package com.budwk.app.base.event.role; + +import org.nutz.mvc.Mvcs; + +/** + * @version 1.0 + * @Author zzr + * @name:RoleEventPublisher + * @Date 2025/9/3 17:14 + * @注释 + */ +public class RoleEventPublisher { + + public static void broadcast(RoleEventMsg event){ + String[] names = Mvcs.getIoc().getNamesByType(RoleEventListener.class); + for (String name : names) { + RoleEventListener listener = Mvcs.getIoc().get(RoleEventListener.class, name); + listener.receive(event); + } + } +} diff --git a/src/main/java/com/budwk/app/sys/controller/SysRoleController.java b/src/main/java/com/budwk/app/sys/controller/SysRoleController.java index f21d53e0..d2915eda 100644 --- a/src/main/java/com/budwk/app/sys/controller/SysRoleController.java +++ b/src/main/java/com/budwk/app/sys/controller/SysRoleController.java @@ -19,8 +19,10 @@ import com.budwk.app.web.commons.auth.utils.SecurityUtil; import io.swagger.annotations.ApiOperation; import org.apache.commons.lang3.StringUtils; import org.nutz.dao.Cnd; +import org.nutz.dao.FieldFilter; import org.nutz.dao.Sqls; import org.nutz.dao.sql.Sql; +import org.nutz.dao.util.Daos; import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.lang.Lang; @@ -29,6 +31,7 @@ import org.nutz.lang.util.NutMap; import org.nutz.log.Log; import org.nutz.log.Logs; import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.GET; import org.nutz.mvc.annotation.Ok; import org.nutz.mvc.annotation.Param; @@ -490,4 +493,15 @@ public class SysRoleController { return Result.success(); } + @At + @Ok("json:full") + @GET + @SaCheckLogin + public Result getMenuOptions() { + FieldFilter fieldFilter = FieldFilter.create(Sys_menu.class, "^id|name$"); + Cnd cnd = Cnd.where("disabled", "=", 0); + cnd.and(Cnd.exps("parentId", "is", null).or("parentId", "=", "")); + return Result.success(Daos.ext(sysRoleService.dao(), fieldFilter).query(Sys_menu.class, cnd)); + } + } diff --git a/src/main/java/com/budwk/app/sys/listener/SysRoleEventListener.java b/src/main/java/com/budwk/app/sys/listener/SysRoleEventListener.java new file mode 100644 index 00000000..24f90de3 --- /dev/null +++ b/src/main/java/com/budwk/app/sys/listener/SysRoleEventListener.java @@ -0,0 +1,108 @@ +package com.budwk.app.sys.listener; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.event.role.RoleEventListener; +import com.budwk.app.base.event.role.RoleEventMsg; +import com.budwk.app.sys.models.Sys_role; +import com.budwk.app.sys.models.Sys_user; +import com.budwk.app.sys.models.Sys_user_role; +import org.nutz.aop.interceptor.ioc.TransAop; +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 java.util.List; + +/** + * @version 1.0 + * @Author zzr + * @name:SysRoleEventListener + * @Date 2025/9/3 17:35 + * @注释 + */ +@IocBean +public class SysRoleEventListener implements RoleEventListener { + + @Inject + private Dao dao; + + @Override + @Aop(TransAop.READ_COMMITTED) + public void receive(RoleEventMsg message) { + if (ObjectUtil.isAllEmpty(message.getUserIds(), message.getUnitId(), message.getRoleCode())) { + return; + } + switch (message.getOperationType()) { + case RoleEventMsg.ADD_ROLE -> { + addRole(message); + } + case RoleEventMsg.REMOVE_ROLE -> { + removeRole(message); + } + case RoleEventMsg.RENEW_ROLE -> { + removeRole(message); + addRole(message); + } + } + } + + + /** + * 添加角色 + * @param message 订阅消息 + */ + private void addRole(RoleEventMsg message) { + Sys_role role = dao.fetch(Sys_role.class, Cnd.where("code", "=", message.getRoleCode())); + + if (ObjectUtil.isAllNotEmpty(message.getUserIds(), message.getRoleCode())) { + List roleList = message.getUserIds().stream().map(item -> { + Sys_user_role userRole = new Sys_user_role(); + userRole.setUserId(item); + userRole.setUnitId(StrUtil.isNotBlank(message.getUnitId()) ? message.getUnitId() : null); + userRole.setRoleId(role.getId()); + return userRole; + }).toList(); + dao.insert(roleList); + } else if (ObjectUtil.isAllNotEmpty(message.getUnitId(), message.getRoleCode())) { + List userList = dao.query(Sys_user.class, Cnd.where("unitId", "=", message.getUnitId())); + List roleList = userList.stream().map(item -> { + Sys_user_role userRole = new Sys_user_role(); + userRole.setUserId(item.getId()); + userRole.setUnitId(item.getUnitId()); + userRole.setRoleId(role.getId()); + return userRole; + }).toList(); + dao.insert(roleList); + } + } + + + /** + * 删除角色 + * @param message 订阅消息 + */ + private void removeRole(RoleEventMsg message) { + // 判断传过来的东西 + if (ObjectUtil.isAllNotEmpty(message.getUserIds(), message.getUnitId(), message.getRoleCode())) { + dao.clear(Sys_user_role.class, + Cnd.where("userId", "in", message.getUserIds()) + .and("unitId", "=", message.getUnitId()) + .and("roleCode", "=", message.getRoleCode()) + ); + } else if (ObjectUtil.isAllNotEmpty(message.getUserIds(), message.getRoleCode())) { + dao.clear(Sys_user_role.class, + Cnd.where("userId", "in", message.getUserIds()) + .and("roleCode", "=", message.getRoleCode()) + ); + } else if (ObjectUtil.isAllNotEmpty(message.getUnitId(), message.getUnitId())) { + dao.clear(Sys_user_role.class, + Cnd.where("unitId", "in", message.getUnitId()) + .and("roleCode", "=", message.getRoleCode()) + ); + } + } + +} diff --git a/src/main/java/com/budwk/app/sys/services/impl/SysDataUserAllUpdateServiceImpl.java b/src/main/java/com/budwk/app/sys/services/impl/SysDataUserAllUpdateServiceImpl.java index 09d26758..2b6b9ea2 100644 --- a/src/main/java/com/budwk/app/sys/services/impl/SysDataUserAllUpdateServiceImpl.java +++ b/src/main/java/com/budwk/app/sys/services/impl/SysDataUserAllUpdateServiceImpl.java @@ -7,6 +7,8 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HtmlUtil; import com.budwk.app.base.constant.RoleConstant; +import com.budwk.app.base.event.role.RoleEventMsg; +import com.budwk.app.base.event.role.RoleEventPublisher; import com.budwk.app.base.utils.ConditionGroupUtil; import com.budwk.app.base.utils.PwdUtil; import com.budwk.app.sys.annotation.DataCenterColumn; @@ -16,6 +18,7 @@ import com.budwk.app.sys.services.SysDataUserUpdateService; import com.budwk.app.sys.services.SysDictService; import com.budwk.app.sys.services.SysRoleService; import com.budwk.app.sys.services.SysUserService; +import com.budwk.app.zhgh.democratic.proposal.models.ProposalConfig; import com.budwk.app.zhgh.staffmanage.member.constant.MemberChangeOrigin; import com.budwk.app.zhgh.staffmanage.member.constant.MemberChangeType; import lombok.extern.slf4j.Slf4j; @@ -161,9 +164,9 @@ public class SysDataUserAllUpdateServiceImpl implements SysDataUserUpdateService Map userMap = sysUsers.stream().collect(Collectors.toMap(Sys_user::getLoginname, sysUser -> sysUser)); // 准备数据集合 - List needDoUpdateList = new ArrayList<>(); - List needInitUserList = new ArrayList<>(); - List histories = new ArrayList<>(); + List needDoUpdateList = new CopyOnWriteArrayList<>(); + List needInitUserList = new CopyOnWriteArrayList<>(); + List histories = new CopyOnWriteArrayList<>(); List addMemberUserIds = Collections.synchronizedList(new ArrayList<>()); List removeMemberUserIds = Collections.synchronizedList(new ArrayList<>()); @@ -380,6 +383,13 @@ public class SysDataUserAllUpdateServiceImpl implements SysDataUserUpdateService }); } + // 6. 处理其他任务 + // 6.1 更新提案的校领导角色,发送订阅 + ProposalConfig config = dao.fetch(ProposalConfig.class, Cnd.where("delFlag", "=", false).desc("updatedAt")); + for (String unitId : config.getSchoolLeaderUnitIds()) { + RoleEventPublisher.broadcast(new RoleEventMsg(unitId, RoleConstant.PROPOSAL_BRANCH_SCHOOL_LEADER.name(), RoleEventMsg.RENEW_ROLE)); + } + long endTime = System.currentTimeMillis(); log.info("全量更新用户数据完成,耗时: {} 毫秒", (endTime - startTime)); diff --git a/src/main/java/com/budwk/app/zhgh/activity/basic/controller/ActivityBasicScopeController.java b/src/main/java/com/budwk/app/zhgh/activity/basic/controller/ActivityBasicScopeController.java index cb4aadb3..6c6f2d2a 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/basic/controller/ActivityBasicScopeController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/basic/controller/ActivityBasicScopeController.java @@ -5,38 +5,52 @@ import cn.afterturn.easypoi.excel.entity.ExportParams; import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.stp.StpUtil; +import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; +import com.alibaba.excel.EasyExcel; 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.result.Result; import com.budwk.app.base.service.BaseService; +import com.budwk.app.base.utils.CommonDownloadUtil; +import com.budwk.app.base.utils.EasyExcelUtil; import com.budwk.app.sys.models.Sys_role; import com.budwk.app.web.commons.auth.utils.SecurityUtil; import com.budwk.app.zhgh.activity.basic.models.ActivityUserScope; import com.budwk.app.zhgh.activity.basic.param.ActivityUserScopePageParam; import com.budwk.app.zhgh.activity.basic.service.ActivityBasicScopeService; +import com.budwk.app.zhgh.activity.basic.template.UserTemp; +import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ArrayUtils; +import org.apache.poi.ss.formula.functions.T; 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.dao.util.cri.Static; +import org.nutz.integration.jedis.RedisService; import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.json.Json; import org.nutz.lang.Lang; 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.io.ByteArrayOutputStream; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; /** @@ -59,6 +73,9 @@ public class ActivityBasicScopeController { @Inject private Dao dao; + @Inject + private RedisService redisService; + @At("") @Ok("beetl:platform/zhgh/activity/basic/userScope/index.html") @SaCheckPermission("activity.basic.scope") @@ -90,6 +107,7 @@ public class ActivityBasicScopeController { FROM `vw_user` u LEFT JOIN sys_user_role sur on sur.userid = u.id + LEFT JOIN sys_club_user clubuser ON clubuser.userid=u.id $condition """); try { @@ -201,8 +219,8 @@ public class ActivityBasicScopeController { } @At - public Object getRoleListByMenuId(String menuId) { - return Result.success(dao.query(Sys_role.class, Cnd.where("system_name", "=", menuId).desc("code"))); + public Object getRoleListByMenuId() { + return Result.success(dao.query(Sys_role.class, Cnd.NEW().desc("code"))); } @@ -275,6 +293,7 @@ public class ActivityBasicScopeController { FROM `vw_user` u LEFT JOIN sys_user_role sur on sur.userid = u.id + LEFT JOIN sys_club_user clubuser ON clubuser.userid=u.id $condition """); @@ -342,6 +361,11 @@ public class ActivityBasicScopeController { } + if (StrUtil.isNotBlank(activityUserScopePageParam.getExistsLoginNameRedisKey())) { + List loginNames = redisService.lrange(activityUserScopePageParam.getExistsLoginNameRedisKey(), 0, -1); + cnd.andEX("u.loginname", "in", loginNames); + } + try { @@ -350,8 +374,8 @@ public class ActivityBasicScopeController { cnd.andEX("u.personType", IN_OR_NIN_OP, activityUserScopePageParam.getPersonTypes()); cnd.andEX("u.userState", IN_OR_NIN_OP, activityUserScopePageParam.getUserStates()); cnd.andEX("u.sex", IN_OR_NIN_OP, activityUserScopePageParam.getSexTypes()); - cnd.andEX("sur.jdhid", EQ_OR_NEQ_OP, activityUserScopePageParam.getTeacherMeetingId()); - cnd.andEX("sur.roleid", IN_OR_NIN_OP, activityUserScopePageParam.getRoleIds()); + cnd.andEX("sur.tcSessionId", EQ_OR_NEQ_OP, activityUserScopePageParam.getSessionId()); + cnd.andEX("sur.roleId", IN_OR_NIN_OP, activityUserScopePageParam.getRoleIds()); cnd.andEX("clubuser.clubid", EQ_OR_NEQ_OP, activityUserScopePageParam.getClubId()); } catch (Exception e) { @@ -362,4 +386,82 @@ public class ActivityBasicScopeController { } + @At + @Ok("void") + @ApiOperation("下载导入人员模板") + @SaCheckPermission("activity.basic.user") + public void downloadImport(HttpServletResponse response) { + try (ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();) { + EasyExcel.write(byteArrayOutputStream, UserTemp.class) + .sheet("福利名单导入模版") + .doWrite(ArrayList::new); + CommonDownloadUtil.download("人员导入模板.xlsx", byteArrayOutputStream.toByteArray(), response); + } catch (Exception e) { + e.printStackTrace(); + } + + } + + + @At + @SaCheckPermission("activity.basic.user") + @ApiOperation("导入人员核对名单") + @AdaptBy(type = UploadAdaptor.class, args = {"ioc:fileUpload"}) + public Result doImport(TempFile file) { + String matchUserLoginNamesKey = "ActivityBasicScopeController.doImport.time=" + System.currentTimeMillis(); + List ts = EasyExcelUtil.syncReadModel(file.getFile(), UserTemp.class, 0, 1); + List userImportList = JSONUtil.parseArray(JSONUtil.toJsonStr(ts)).toList(UserTemp.class); + + //判断人员哪些存在哪些不存在 + Sql sql = Sqls.queryString(""" + SELECT + u.loginname + FROM + sys_user u + """); + dao.execute(sql); + String[] sysLoginNames = (String[]) sql.getResult(); + + //存在的工号 + List existsLoginNames = new ArrayList<>(); + + for (UserTemp excelUser : userImportList) { + if (ArrayUtil.contains(sysLoginNames, excelUser.getLoginName())) { + existsLoginNames.add(excelUser.getLoginName()); + } else { + excelUser.setErrorInfo("系统查不到此人"); + } + } + + //匹配不到的用户 + List errorExcelTempUsers = userImportList.stream().filter(v -> StrUtil.isNotBlank(v.getErrorInfo())).collect(Collectors.toList()); + NutMap nutMap = NutMap.NEW(); + nutMap.setv("totalCount", userImportList.size()); + nutMap.setv("successCount", existsLoginNames.size()); + nutMap.setv("errorCount", errorExcelTempUsers.size()); + nutMap.setv("errorList", errorExcelTempUsers.stream().map(v -> { + return NutMap.NEW().addv("工号", v.getLoginName()).addv("姓名", v.getUserName()).addv("错误原因", v.getErrorInfo()); + }).collect(Collectors.toList())); + nutMap.setv("existsLoginNameRedisKey", matchUserLoginNamesKey); + + //保存存在的工号 + if (Lang.isNotEmpty(existsLoginNames)) { + redisService.lpush(matchUserLoginNamesKey, existsLoginNames.toArray(new String[0])); + redisService.expire(matchUserLoginNamesKey, 60 * 3); + } + return Result.success(nutMap); + } + + @At + @SaCheckPermission("activity.basic.user") + @ApiOperation("清空查询条件") + public Result clearSearchCnd(String existsLoginNameRedisKey) { + if (StrUtil.isNotBlank(existsLoginNameRedisKey)) { + redisService.del(existsLoginNameRedisKey); + } + return Result.success(); + } + + + } diff --git a/src/main/java/com/budwk/app/zhgh/activity/basic/controller/ActivityBasicScopeUserDataController.java b/src/main/java/com/budwk/app/zhgh/activity/basic/controller/ActivityBasicScopeUserDataController.java index 323e7f8c..0c1e3ccb 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/basic/controller/ActivityBasicScopeUserDataController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/basic/controller/ActivityBasicScopeUserDataController.java @@ -2,26 +2,43 @@ package com.budwk.app.zhgh.activity.basic.controller; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.stp.StpUtil; +import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; 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.base.utils.EasyExcelUtil; import com.budwk.app.web.commons.auth.utils.SecurityUtil; import com.budwk.app.zhgh.activity.basic.models.ActivityUserScope; +import com.budwk.app.zhgh.activity.basic.template.UserTemp; +import io.swagger.annotations.ApiOperation; +import org.apache.poi.ss.formula.functions.T; 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.dao.util.cri.Static; +import org.nutz.integration.jedis.RedisService; import org.nutz.ioc.aop.Aop; import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.lang.Lang; +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.validation.Valid; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; /** * @ClassName ActivityBasicScopeUserDataController @@ -37,6 +54,9 @@ public class ActivityBasicScopeUserDataController { @Inject private BaseService baseService; + @Inject + private RedisService redisService; + @At("") @Ok("beetl:platform/zhgh/activity/basic/userScopeData/index.html") @SaCheckPermission("activity.basic.user") @@ -51,29 +71,8 @@ public class ActivityBasicScopeUserDataController { @Param(value = "unitId") String unitId, @Param(value = "personType") String personType, @Param(value = "userState") String userState, - @Param(value = "groupId") Integer groupId) { - /* Sql sql = Sqls.create(""" - SELECT - aus.id, - u.username AS userName, - u.loginname AS loginName, - u.sex, - u.birthday, - u.mobile, - u.personType, - u.userState, - u.unitname AS unitName, - u.unionname AS unionName, - aus.groupId, - aus.groupName, - actun.unionname AS activityUnionName - FROM - activity_user_scope aus - LEFT JOIN `vw_user` u ON u.id = aus.userId - LEFT JOIN activity_basic_unit actit ON actit.id=u.unitid - LEFT JOIN activity_basic_union actun ON actit.unionid=actun.id - $condition - """);*/ + @Param(value = "groupId") Integer groupId, + @Param(value = "existsLoginNameRedisKey") String existsLoginNameRedisKey) { Sql sql = Sqls.create(""" SELECT aus.id, @@ -107,9 +106,13 @@ public class ActivityBasicScopeUserDataController { cnd.andEX("u.personType", "=", personType); cnd.andEX("u.userState", "=", userState); if (!StpUtil.hasRole(RoleConstant.SYSADMIN.name()) && - !StpUtil.hasRole(RoleConstant.SCHOOL_UNION_ADMIN.name())) { + !StpUtil.hasRole(RoleConstant.SCHOOL_UNION_ADMIN.name())) { cnd.and("aus.creator", "=", SecurityUtil.getUserId()); } + if (StrUtil.isNotBlank(existsLoginNameRedisKey)) { + List loginNames = redisService.lrange(existsLoginNameRedisKey, 0, -1); + cnd.andEX("u.loginname", "in", loginNames); + } sql.setCondition(cnd); Pagination pagination = baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); @@ -134,7 +137,17 @@ public class ActivityBasicScopeUserDataController { @Param(value = "unionId") String unionId, @Param(value = "unitId") String unitId, @Param(value = "personType") String personType, - @Param(value = "userState") String userState) { + @Param(value = "userState") String userState, + @Param(value = "existsLoginNameRedisKey") String existsLoginNameRedisKey) { + + List existsLoginNames = new ArrayList<>(); + if(StrUtil.isNotBlank(existsLoginNameRedisKey) && redisService.exists(existsLoginNameRedisKey)){ + existsLoginNames = redisService.lrange(existsLoginNameRedisKey, 0, -1); + if (StrUtil.isNotBlank(existsLoginNameRedisKey)) { + redisService.del(existsLoginNameRedisKey); + } + } + Sql sql = Sqls.create("select id from `vw_user` u $condition"); Cnd userCnd = Cnd.NEW(); if (StrUtil.isNotBlank(searchName) && StrUtil.isNotBlank(searchKeyword)) { @@ -145,12 +158,13 @@ public class ActivityBasicScopeUserDataController { userCnd.andEX("u.personType", "=", personType); userCnd.andEX("u.userState", "=", userState); userCnd.andEX("u.id", "=", id); + userCnd.andEX("u.loginname","in",existsLoginNames); sql.setCondition(userCnd); Cnd cnd = Cnd.NEW(); cnd.and("groupId", "=", groupId); if (!StpUtil.hasRole(RoleConstant.SYSADMIN.name()) && - !StpUtil.hasRole(RoleConstant.SCHOOL_UNION_ADMIN.name())) { + !StpUtil.hasRole(RoleConstant.SCHOOL_UNION_ADMIN.name())) { cnd.and("creator", "=", SecurityUtil.getUserId()); } if (StrUtil.isNotBlank(id)) { @@ -163,5 +177,56 @@ public class ActivityBasicScopeUserDataController { return Result.success(); } + @At + @SaCheckPermission("activity.basic.user") + @ApiOperation("导入人员核对名单") + @AdaptBy(type = UploadAdaptor.class, args = {"ioc:fileUpload"}) + public Result doImport(@Valid String groupId, TempFile file) { + String matchUserLoginNamesKey = "ActivityBasicUserController.doImport.groupId=" + groupId + "time=" + System.currentTimeMillis(); + List ts = EasyExcelUtil.syncReadModel(file.getFile(), UserTemp.class, 0, 1); + List userImportList = JSONUtil.parseArray(JSONUtil.toJsonStr(ts)).toList(UserTemp.class); + + //判断人员哪些存在哪些不存在 + Sql sql = Sqls.queryString(""" + SELECT + u.loginname + FROM + activity_user_scope aus + LEFT JOIN sys_user u ON u.id = aus.userId + WHERE + aus.groupId = @groupId + """).setParam("groupId", groupId); + baseService.execute(sql); + String[] sysLoginNames = (String[]) sql.getResult(); + + //存在的工号 + List existsLoginNames = new ArrayList<>(); + + for (UserTemp excelUser : userImportList) { + if (ArrayUtil.contains(sysLoginNames, excelUser.getLoginName())) { + existsLoginNames.add(excelUser.getLoginName()); + } else { + excelUser.setErrorInfo("系统查不到此人"); + } + } + + //匹配不到的用户 + List errorExcelTempUsers = userImportList.stream().filter(v -> StrUtil.isNotBlank(v.getErrorInfo())).collect(Collectors.toList()); + NutMap nutMap = NutMap.NEW(); + nutMap.setv("totalCount", userImportList.size()); + nutMap.setv("successCount", existsLoginNames.size()); + nutMap.setv("errorCount", errorExcelTempUsers.size()); + nutMap.setv("errorList", errorExcelTempUsers.stream().map(v -> { + return NutMap.NEW().addv("工号", v.getLoginName()).addv("姓名", v.getUserName()).addv("错误原因", v.getErrorInfo()); + }).collect(Collectors.toList())); + nutMap.setv("existsLoginNameRedisKey", matchUserLoginNamesKey); + + //保存存在的工号 + if (Lang.isNotEmpty(existsLoginNames)) { + redisService.lpush(matchUserLoginNamesKey, existsLoginNames.toArray(new String[0])); + redisService.expire(matchUserLoginNamesKey, 60 * 3); + } + return Result.success(nutMap); + } } diff --git a/src/main/java/com/budwk/app/zhgh/activity/basic/param/ActivityUserScopePageParam.java b/src/main/java/com/budwk/app/zhgh/activity/basic/param/ActivityUserScopePageParam.java index e11cac5e..f519c25c 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/basic/param/ActivityUserScopePageParam.java +++ b/src/main/java/com/budwk/app/zhgh/activity/basic/param/ActivityUserScopePageParam.java @@ -33,7 +33,7 @@ public class ActivityUserScopePageParam extends PageForm { private Integer setGroupId; private String setGroupName; // 教师会议id - private String teacherMeetingId; + private String sessionId; // 角色id private String[] roleIds; // 用户id @@ -46,4 +46,6 @@ public class ActivityUserScopePageParam extends PageForm { private String props; + private String existsLoginNameRedisKey; + } diff --git a/src/main/java/com/budwk/app/zhgh/activity/basic/template/UserTemp.java b/src/main/java/com/budwk/app/zhgh/activity/basic/template/UserTemp.java new file mode 100644 index 00000000..72906e53 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/activity/basic/template/UserTemp.java @@ -0,0 +1,27 @@ +package com.budwk.app.zhgh.activity.basic.template; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode +@ContentRowHeight(20) // 内容行高 +@HeadRowHeight(20) // 表头行高 +@ColumnWidth(25) +public class UserTemp { + + @ExcelProperty("工号") + private String loginName; + + @ExcelProperty("姓名") + private String userName; + + @ExcelIgnore + private String errorInfo; + +} diff --git a/src/main/java/com/budwk/app/zhgh/activity/culture/controller/ActivityCultureApplyActivityController.java b/src/main/java/com/budwk/app/zhgh/activity/culture/controller/ActivityCultureApplyActivityController.java index a200a3b5..6594ad30 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/culture/controller/ActivityCultureApplyActivityController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/culture/controller/ActivityCultureApplyActivityController.java @@ -1,10 +1,20 @@ package com.budwk.app.zhgh.activity.culture.controller; +import cn.dev33.satoken.annotation.SaCheckLogin; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaMode; +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.result.Result; +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.flow.service.FlowCommonService; import com.budwk.app.sys.models.Sys_user_role; import com.budwk.app.web.commons.auth.utils.AuthUtil; import com.budwk.app.web.commons.auth.utils.SecurityUtil; @@ -12,10 +22,15 @@ import com.budwk.app.zhgh.activity.culture.models.ActivityTissue; import com.budwk.app.zhgh.activity.culture.service.ActivityCultureService; import com.budwk.app.zhgh.club.model.SysClub; import com.budwk.app.zhgh.club.service.SysClubService; +import com.budwk.app.zhgh.unionReimburse.model.UnionReimburse; +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.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; @@ -39,6 +54,17 @@ import java.util.stream.Collectors; @At("/platform/activity/culture/applyActivity") public class ActivityCultureApplyActivityController { + @Inject + private Dao dao; + @Inject + private FlowEngine flowEngine; + @Inject + private FlowCommonService flowCommonService; + @Inject + private SysClubService sysClubService; + @Inject + private ActivityCultureService activityCultureService; + @At("/school") @Ok("beetl:platform/zhgh/activity/culture/school/applyActivity/index.html") @SaCheckPermission("activity.culture.applyActivity.school") @@ -57,12 +83,6 @@ public class ActivityCultureApplyActivityController { public void clubIndex() { } - @Inject - private ActivityCultureService activityCultureService; - - @Inject - private SysClubService sysClubService; - /** * @param activityScopeGroupId @@ -79,13 +99,71 @@ public class ActivityCultureApplyActivityController { @At - @SLog(tag = "文化活动", msg = "添加了一条文化活动记录", param = true, result = true) + @ApiOperation("保存活动申报") + @SLog( tag = "文化活动-活动申报", msg = "保存了一条文化活动记录") @SaCheckPermission(value = {"activity.culture.applyActivity.school", "activity.culture.applyActivity.union", "activity.culture.applyActivity.club"}, mode = SaMode.OR) - public Result doAdd(@Param("tissue") @Valid ActivityTissue tissue) { - activityCultureService.doAddActivity(tissue); + public Result save(@Param("data") ActivityTissue tissue) { + if (tissue.getActivity_type() == 40002) { + tissue.setUnionId(SecurityUtil.getUnionId()); + } + tissue.setUserId(SecurityUtil.getUserId()); + tissue.setApplyTime(DateUtil.now()); + activityCultureService.insertOrUpdate(tissue); return Result.success(); } + @At + @SaCheckLogin + @ApiOperation("提交申请") + @Aop(TransAop.READ_COMMITTED) + @SaCheckPermission(value = {"activity.culture.applyActivity.school", "activity.culture.applyActivity.union", "activity.culture.applyActivity.club"}, mode = SaMode.OR) + public Result submit(@Param("data") ActivityTissue tissue) { + if (tissue.getActivity_type() == 40002) { + tissue.setUnionId(SecurityUtil.getUnionId()); + } + tissue.setUserId(SecurityUtil.getUserId()); + tissue.setApplyTime(DateUtil.now()); + activityCultureService.insertOrUpdate(tissue); + + if (tissue.getActivity_type() == 40002 || tissue.getActivity_type() == 40003){ + // 开启流程实例 + Dict args = Dict.create(); + args.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.APPLY.getCode()); + args.set(FlowConst.FORM_DATA, tissue); + ProcessInstance instance = flowEngine.startProcessInstanceByKey("WHHD", tissue.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(); + } + return Result.success(); + } + + @At + @SaCheckLogin + @ApiOperation("重新提交申请") + @Aop(TransAop.READ_COMMITTED) + @SaCheckPermission(value = {"activity.culture.applyActivity.school", "activity.culture.applyActivity.union", "activity.culture.applyActivity.club"}, mode = SaMode.OR) + public Result submitAgain(@Param("data") ActivityTissue tissue, @Param("taskId") Long taskId) { + if (tissue.getActivity_type() == 40002) { + tissue.setUnionId(SecurityUtil.getUnionId()); + } + tissue.setUserId(SecurityUtil.getUserId()); + tissue.setApplyTime(DateUtil.now()); + activityCultureService.insertOrUpdate(tissue); + + Dict dict = Dict.create(); + dict.set(FlowConst.PROCESS_TASK_ID_KEY, taskId); + dict.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.RE_APPLY.getCode()); + flowCommonService.executeTask(dict); + return Result.success(); + } + + + @At @SLog(tag = "文化活动", msg = "编辑了一条文化活动记录", param = true, result = true) @SaCheckPermission(value = {"activity.culture.applyActivity.school", "activity.culture.applyActivity.union", "activity.culture.applyActivity.club"}, mode = SaMode.OR) diff --git a/src/main/java/com/budwk/app/zhgh/activity/culture/controller/ActivityCultureApplyUserController.java b/src/main/java/com/budwk/app/zhgh/activity/culture/controller/ActivityCultureApplyUserController.java index ba7dc864..edff076b 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/culture/controller/ActivityCultureApplyUserController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/culture/controller/ActivityCultureApplyUserController.java @@ -3,7 +3,6 @@ package com.budwk.app.zhgh.activity.culture.controller; import cn.dev33.satoken.annotation.SaCheckLogin; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaMode; -import cn.hutool.core.stream.CollectorUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; @@ -15,12 +14,10 @@ import com.budwk.app.web.commons.auth.utils.SecurityUtil; import com.budwk.app.zhgh.activity.culture.models.ActivityTissuePerson; import com.budwk.app.zhgh.activity.culture.service.ActivityCultureApplyUserService; 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.json.Json; @@ -34,7 +31,6 @@ import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.List; -import java.util.stream.Collectors; /** * @ClassName ActivityCultureApplyUserController @@ -115,11 +111,14 @@ public class ActivityCultureApplyUserController { @At @SaCheckLogin @ApiOperation(value = "队友搜索") - public Result queryTeammate(@Valid String keyword) { + public Result queryTeammate(@Valid String keyword,Integer signUpMethod) { Sql sql = Sqls.create("select id userId,username userName,loginname loginName,sex,mobile,unitName from vw_user $condition limit 0,10"); Cnd cnd = Cnd.NEW(); cnd.or(Cnd.likeEX("username", keyword)); cnd.or(Cnd.likeEX("loginname", keyword)); + if (signUpMethod == 3){ + cnd.and("unionid", "=", SecurityUtil.getUnionId()); + } sql.setCondition(cnd); List list = activityCultureApplyUserService.listMap(sql); return Result.success(list); @@ -142,6 +141,16 @@ public class ActivityCultureApplyUserController { return Result.success(list); } + @At + @SaCheckLogin + @ApiOperation(value = "查询分工会报名人员") + public Result listTeamUserUnion(@Valid String activityId) { + List list = dao.query(ActivityTissuePerson.class, Cnd.where(ActivityTissuePerson::getTissueId, "=", activityId) + .and(ActivityTissuePerson::getApplyUserId, "=", SecurityUtil.getUserId()) + ); + return Result.success(list); + } + @At @SaCheckLogin @ApiOperation(value = "是否报名") diff --git a/src/main/java/com/budwk/app/zhgh/activity/culture/controller/ActivityCultureAuditActivityController.java b/src/main/java/com/budwk/app/zhgh/activity/culture/controller/ActivityCultureAuditActivityController.java index 2bd8acaf..55efcfd8 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/culture/controller/ActivityCultureAuditActivityController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/culture/controller/ActivityCultureAuditActivityController.java @@ -7,6 +7,7 @@ import com.budwk.app.base.annotation.SLog; import com.budwk.app.base.model.Audit; import com.budwk.app.base.param.PageForm; import com.budwk.app.base.result.Result; +import com.budwk.app.flow.enums.ProcessTaskStateEnum; import com.budwk.app.web.commons.auth.utils.SecurityUtil; import com.budwk.app.zhgh.activity.culture.models.ActivityTissue; import com.budwk.app.zhgh.activity.culture.service.ActivityCultureService; @@ -20,6 +21,8 @@ import org.nutz.lang.Strings; import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.Ok; +import java.util.List; + /** * @ClassName ActivityCultureAuditActivityController * @Description TODO @@ -50,7 +53,7 @@ public class ActivityCultureAuditActivityController { @At @SaCheckPermission(value = {"activity.culture.auditActivity.union", "activity.culture.auditActivity.club"}, mode = SaMode.OR) - public Result pageData(PageForm page, Boolean state, + public Result pageData(PageForm page, boolean approval, String year, String name, String unionId, @@ -62,19 +65,46 @@ public class ActivityCultureAuditActivityController { tissue.*, uni.name unionname , club.clubName, - abs.`name` projectTypeName + abs.`name` projectTypeName, + ins.id AS instanceId, + ins.businessNo, + ins.state instanceState, + ins.variable instanceVariable, + 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 - activity_tissue tissue + wf_process_task t + LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId + LEFT JOIN activity_tissue tissue ON tissue.id = ins.businessNo LEFT JOIN sys_union uni ON uni.id = tissue.unionId LEFT JOIN sys_club club ON club.id = tissue.clubId LEFT JOIN activity_basic_settings abs ON abs.`code`=tissue.projectTypeCode + 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.and("t.taskName", "=", "76a03838-caa4-4561-ba0f-0da0d3a17c37"); + cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); cnd.andEX("YEAR(tissue.startTime)", "=", year); cnd.andEX("tissue.unionId", "=", unionId); cnd.andEX("tissue.activity_type", "=", activity_type); - cnd.andEX("tissue.state", state ? ">" : "=", 1); + 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 (Strings.isNotBlank(name)) { cnd.where().andLike("tissue.name", name); @@ -86,7 +116,7 @@ public class ActivityCultureAuditActivityController { } else { cnd.desc("tissue.startTime"); } - + cnd.groupBy("t.id"); sql.setCondition(cnd); return Result.success(activityCultureService.listPageMap(page.getPageNumber(), page.getPageSize(), sql)); } diff --git a/src/main/java/com/budwk/app/zhgh/activity/culture/controller/ActivityCultureUserStatisticsController.java b/src/main/java/com/budwk/app/zhgh/activity/culture/controller/ActivityCultureUserStatisticsController.java index a22b253a..ef6daba6 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/culture/controller/ActivityCultureUserStatisticsController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/culture/controller/ActivityCultureUserStatisticsController.java @@ -133,17 +133,38 @@ public class ActivityCultureUserStatisticsController { @SaCheckPermission(value = {"activity.culture.userStatistics.school", "activity.culture.userStatistics.union", "activity.culture.userStatistics.club"}, mode = SaMode.OR) public Result getActivityByYearOrType(Integer year, @Valid Integer activity_type) { - Cnd cnd = Cnd.where("activity_type", "=", activity_type); - cnd.and("projectTypeCode", "!=", 50004); + Sql sql = Sqls.create(""" + SELECT + tissue.*, + uni.name unionname , + club.clubName, + abs.`name` projectTypeName, + atp.applyUserId, + ins.state instanceState, + CASE WHEN atp.id IS NOT NULL THEN 1 ELSE 0 END AS isEnrolled + FROM + activity_tissue tissue + LEFT JOIN sys_union uni ON uni.id = tissue.unionId + LEFT JOIN sys_club club ON club.id = tissue.clubId + LEFT JOIN activity_basic_settings abs ON abs.`code`=tissue.projectTypeCode + LEFT JOIN activity_tissue_person atp on atp.tissueId=tissue.id AND (atp.applyUserId = @userId OR atp.userId = @userId) + LEFT JOIN `wf_process_instance` ins ON ins.businessNo = tissue.id AND ins.state = 20 + $condition + """).setParam("userId", SecurityUtil.getUserId()); + + Cnd cnd =Cnd.where("tissue.activity_type", "=", activity_type); + cnd.and("tissue.projectTypeCode", "!=", 50004); if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) { - cnd.and("signUpMethod", "in", List.of(1, 2, 3)); + cnd.and("tissue.signUpMethod", "in", List.of(1, 2, 3)); if (activity_type == 40002) { - cnd.and("unionId", "=", SecurityUtil.getUnionId()); + cnd.and("tissue.unionId", "=", SecurityUtil.getUnionId()); } } - cnd.andEX("YEAR(startTime)", "=", year).desc("startTime"); - List list = activityCultureApplyUserService.dao().query(ActivityTissue.class, cnd); - return Result.success(list); + // 只查询流程实例状态为20的数据(已完成状态) + cnd.and("ins.state", "=", 20); + cnd.andEX("YEAR(tissue.startTime)", "=", year).desc("tissue.startTime"); + sql.setCondition(cnd); + return Result.success(activityCultureApplyUserService.list(sql)); } diff --git a/src/main/java/com/budwk/app/zhgh/activity/culture/models/ActivityTissue.java b/src/main/java/com/budwk/app/zhgh/activity/culture/models/ActivityTissue.java index a72512ff..0f0803a8 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/culture/models/ActivityTissue.java +++ b/src/main/java/com/budwk/app/zhgh/activity/culture/models/ActivityTissue.java @@ -1,12 +1,8 @@ package com.budwk.app.zhgh.activity.culture.models; -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; import com.budwk.app.base.model.BaseModel; import com.budwk.app.base.model.CustomFormField; -import com.budwk.app.sys.models.Sys_home_activity; -import com.budwk.app.sys.services.SysHomeConvert; import lombok.Data; import lombok.EqualsAndHashCode; import org.nutz.dao.entity.annotation.*; @@ -25,7 +21,7 @@ import java.util.List; @Data @Comment("文化活动表") @Table("activity_tissue") -public class ActivityTissue extends BaseModel implements Serializable, SysHomeConvert { +public class ActivityTissue extends BaseModel implements Serializable { @Column @Name @@ -252,29 +248,6 @@ public class ActivityTissue extends BaseModel implements Serializable, SysHomeCo @Many(field = "tissueId") private List tissuePersonList; - @Override - public Sys_home_activity covertToSysHomeActivity() { - Sys_home_activity sysHomeActivity = new Sys_home_activity(); - sysHomeActivity.setId(this.getId()); - sysHomeActivity.setName(this.getName()); - sysHomeActivity.setCover(this.getCover()); - if (this.getActivity_type() == 40001) { - sysHomeActivity.setUrl("/platform/activity/culture/applyUser/school"); - } else if (this.getActivity_type() == 40002) { - sysHomeActivity.setUrl("/platform/activity/culture/applyUser/union"); - } else if (this.getActivity_type() == 40003) { - sysHomeActivity.setUrl("/platform/activity/culture/applyUser/club"); - } - sysHomeActivity.setH5Url("/platform/h5/activity/culture/applyUser"); - if (StrUtil.isNotBlank(this.getApplyStartTime())) { - sysHomeActivity.setStartDate(DateUtil.parseDate(this.getApplyStartTime())); - sysHomeActivity.setEndDate(DateUtil.parseDate(this.getApplyEndTime())); - } - sysHomeActivity.setAllowUserGroupId(this.getGroupId()); - sysHomeActivity.setEnable(this.getIsUnseal()); - sysHomeActivity.setClassPath(this.getClass().getPackageName() + this.getClass().getName()); - return sysHomeActivity; - } private String username; diff --git a/src/main/java/com/budwk/app/zhgh/activity/culture/service/ActivityCultureService.java b/src/main/java/com/budwk/app/zhgh/activity/culture/service/ActivityCultureService.java index f8f89d2a..8c38bed6 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/culture/service/ActivityCultureService.java +++ b/src/main/java/com/budwk/app/zhgh/activity/culture/service/ActivityCultureService.java @@ -18,7 +18,6 @@ public interface ActivityCultureService extends BaseService { */ List getUnionData(String activityScopeGroupId); - void doAddActivity(ActivityTissue tissue); void doEditActivity(ActivityTissue tissue); diff --git a/src/main/java/com/budwk/app/zhgh/activity/culture/service/impl/ActivityCultureApplyUserServiceImpl.java b/src/main/java/com/budwk/app/zhgh/activity/culture/service/impl/ActivityCultureApplyUserServiceImpl.java index 92b34c2d..3c5d15a8 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/culture/service/impl/ActivityCultureApplyUserServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/activity/culture/service/impl/ActivityCultureApplyUserServiceImpl.java @@ -4,14 +4,11 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; -import com.budwk.app.base.constant.RoleConstant; import com.budwk.app.base.exception.BaseException; 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.impl.BaseServiceImpl; 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.activity.basic.models.ActivityUserScope; import com.budwk.app.zhgh.activity.culture.models.ActivityTissue; @@ -21,15 +18,11 @@ import org.nutz.dao.Cnd; import org.nutz.dao.Dao; import org.nutz.dao.Sqls; import org.nutz.dao.sql.Sql; -import org.nutz.dao.util.cri.SqlExpressionGroup; import org.nutz.dao.util.cri.Static; import org.nutz.ioc.loader.annotation.IocBean; -import org.nutz.lang.Lang; import org.nutz.lang.Strings; import org.nutz.lang.util.NutMap; -import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.Optional; @@ -56,6 +49,7 @@ public class ActivityCultureApplyUserServiceImpl extends BaseServiceImpl fullPersonList = listEntity(sql); + insert(fullPersonList); } } diff --git a/src/main/java/com/budwk/app/zhgh/activity/culture/service/impl/ActivityCultureServiceImpl.java b/src/main/java/com/budwk/app/zhgh/activity/culture/service/impl/ActivityCultureServiceImpl.java index 359c4bed..2a387545 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/culture/service/impl/ActivityCultureServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/activity/culture/service/impl/ActivityCultureServiceImpl.java @@ -1,12 +1,10 @@ package com.budwk.app.zhgh.activity.culture.service.impl; -import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import com.budwk.app.base.constant.RoleConstant; import com.budwk.app.base.model.Audit; import com.budwk.app.base.param.PageForm; import com.budwk.app.base.service.impl.BaseServiceImpl; -import com.budwk.app.sys.models.Sys_home_activity; import com.budwk.app.web.commons.auth.utils.AuthUtil; import com.budwk.app.web.commons.auth.utils.SecurityUtil; import com.budwk.app.zhgh.activity.culture.models.ActivityTissue; @@ -60,7 +58,7 @@ public class ActivityCultureServiceImpl extends BaseServiceImpl gh.id, gh.name unionname, ( SELECT count( 1 ) FROM `user` WHERE id IN ( SELECT userid FROM activity_user_scope WHERE groupId = @activityScopeGroupId ) AND unionId = gh.id ) as teacherCount - + FROM sys_union gh LEFT JOIN `vw_user` u ON u.unionid = gh.id @@ -72,38 +70,10 @@ public class ActivityCultureServiceImpl extends BaseServiceImpl } } - @Override - public void doAddActivity(ActivityTissue tissue) { - tissue.setUserId(SecurityUtil.getUserId()); - tissue.setApplyTime(DateUtil.now()); - tissue.setIsUnseal(true); - if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) { - tissue.setState(1); - } else { - tissue.setState(3); - } - if (tissue.getActivity_type() == 40002) { - tissue.setUnionId(SecurityUtil.getUnionId()); - } else if (tissue.getActivity_type() == 40003) { - -// tissue.setClubId(vi.getClubId()); - } - insertWith(tissue, "tissuePersonList"); - if (tissue.getIsEnrollSystem()) { - Sys_home_activity sysHomeActivity = tissue.covertToSysHomeActivity(); - dao().insertOrUpdate(sysHomeActivity); - } - } @Override public void doEditActivity(ActivityTissue tissue) { update(tissue); - if (tissue.getIsEnrollSystem()) { - Sys_home_activity sysHomeActivity = tissue.covertToSysHomeActivity(); - dao().insertOrUpdate(sysHomeActivity); - } else { - dao().delete(Sys_home_activity.class, tissue.getId()); - } } @Override @@ -115,12 +85,31 @@ public class ActivityCultureServiceImpl extends BaseServiceImpl tissue.*, uni.name unionname , club.clubName, - abs.`name` projectTypeName + abs.`name` projectTypeName, + ins.id AS instanceId, + ins.businessNo, + ins.state instanceState, + ins.variable instanceVariable, + 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, + IF((SELECT taskName FROM wf_process_task tt WHERE tt.id = t.taskParentId) = 'startTask', 1, 0) canRevoke, + (select MAX(id) from wf_process_task where processInstanceId = ins.id and taskName = 'startTask') AS startTaskId FROM activity_tissue tissue LEFT JOIN sys_union uni ON uni.id = tissue.unionId LEFT JOIN sys_club club ON club.id = tissue.clubId LEFT JOIN activity_basic_settings abs ON abs.`code`=tissue.projectTypeCode + LEFT JOIN `wf_process_instance` ins ON ins.businessNo = tissue.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 """); @@ -150,7 +139,7 @@ public class ActivityCultureServiceImpl extends BaseServiceImpl } else { cnd.desc("tissue.startTime"); } - + //cnd.groupBy("tissue.id"); sql.setCondition(cnd); return this.listPageMap(page.getPageNumber(), page.getPageSize(), sql); } diff --git a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/declare/controller/ActivityDeclareMineController.java b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/declare/controller/ActivityDeclareMineController.java index 322891d9..02776333 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/declare/controller/ActivityDeclareMineController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/declare/controller/ActivityDeclareMineController.java @@ -137,7 +137,6 @@ public class ActivityDeclareMineController { } else { cnd.orderBy("info." + pageParam.getPageOrderName(), PageUtil.getOrder(pageParam.getPageOrderBy())); } - cnd.groupBy("t.id"); sql.setCondition(cnd); Pagination pagination = activityDeclareService.listPageMap(pageParam.getPageNumber(), pageParam.getPageSize(), sql); return Result.success().addData(pagination); @@ -178,7 +177,7 @@ public class ActivityDeclareMineController { @Ok("void") @SaCheckPermission("activityDeclare.mine") @SLog(tag = "活动申报", msg = "导出活动申报表") - public void doExport(@Valid String id, HttpServletResponse response) { + public void doExportDeclare(@Valid String id, HttpServletResponse response) { HashMap docData = new HashMap<>(); Sql sql = Sqls.create(""" diff --git a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/controller/ActivityReimbursementApplyController.java b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/controller/ActivityReimbursementApplyController.java index ae70b0d5..546b1636 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/controller/ActivityReimbursementApplyController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/controller/ActivityReimbursementApplyController.java @@ -37,6 +37,7 @@ import org.nutz.mvc.annotation.Param; import javax.validation.Valid; import java.math.BigDecimal; +import java.util.ArrayList; import java.util.List; /** @@ -87,9 +88,6 @@ public class ActivityReimbursementApplyController { .mapToDouble(v -> ObjectUtil.defaultIfNull(v.getActualPrice(), 0D)) .sum(); activityReimbursementInfo.setActualMoney(new BigDecimal(sum)); - if (StrUtil.isBlank(activityReimbursementInfo.getDeclareId())) { - activityReimbursementInfo.setDeclareId(activityReimbursementInfo.getId()); - } dao.insertOrUpdate(activityReimbursementInfo); return Result.success(); } @@ -110,9 +108,6 @@ public class ActivityReimbursementApplyController { .mapToDouble(v -> ObjectUtil.defaultIfNull(v.getActualPrice(), 0D)) .sum(); activityReimbursementInfo.setActualMoney(new BigDecimal(sum)); - if (StrUtil.isBlank(activityReimbursementInfo.getDeclareId())) { - activityReimbursementInfo.setDeclareId(activityReimbursementInfo.getId()); - } dao.insertOrUpdate(activityReimbursementInfo); // 开启流程实例 @@ -146,9 +141,6 @@ public class ActivityReimbursementApplyController { .mapToDouble(v -> ObjectUtil.defaultIfNull(v.getActualPrice(), 0D)) .sum(); activityReimbursementInfo.setActualMoney(new BigDecimal(sum)); - if (StrUtil.isBlank(activityReimbursementInfo.getDeclareId())) { - activityReimbursementInfo.setDeclareId(activityReimbursementInfo.getId()); - } dao.insertOrUpdate(activityReimbursementInfo); Dict dict = Dict.create(); @@ -162,14 +154,33 @@ public class ActivityReimbursementApplyController { @At @ApiOperation("获取当前用户活动报销") @SaCheckPermission("activityReimbursement.apply") - public Result getActivityReimbursementByUser() { - // 查询reimbursement表里面没有,在declare表里面有的申请记录 - Sql sql = Sqls.create("SELECT declareId FROM activity_reimbursement_info WHERE userId = @userId").setParam("userId", SecurityUtil.getUserId()); + public Result getActivityReimbursementByUser(String id) { + if (StrUtil.isNotBlank(id)) { + ActivityReimbursementInfo reimbursementInfo = dao.fetch(ActivityReimbursementInfo.class, id); + ActivityDeclareInfo info = dao.fetch(ActivityDeclareInfo.class, reimbursementInfo.getDeclareId()); + return Result.success().addData(List.of(info)); + } + + // 查询已经报销成功的记录 + Sql reiSql = Sqls.create(""" + SELECT + info.declareId + FROM + activity_reimbursement_info info + LEFT JOIN wf_process_instance ins ON ins.businessNo = info.id + WHERE + userId = @userId + AND ins.state IN (10, 20) + """).setParam("userId", SecurityUtil.getUserId()); + reiSql.setCallback(Sqls.callback.strList()); + dao.execute(reiSql); + List reiDecIdList = reiSql.getList(String.class); + + Sql sql = Sqls.create("select declareId from activity_reimbursement_info where userId = @userId").setParam("userId", SecurityUtil.getUserId()); sql.setCallback(Sqls.callback.strList()); dao.execute(sql); List declareIdList = sql.getList(String.class); - Sql applySql = Sqls.create(""" SELECT info.* @@ -178,10 +189,12 @@ public class ActivityReimbursementApplyController { LEFT JOIN wf_process_instance ins ON info.id = ins.businessNo $condition """); - Cnd cnd = Cnd.NEW(); if (Lang.isNotEmpty(declareIdList)) { - cnd.and("info.id", "in", declareIdList); + cnd.and("info.id", "not in", declareIdList); + } + if (Lang.isNotEmpty(reiDecIdList)) { + cnd.and("info.id", "not in", reiDecIdList); } cnd.and("info.userId", "=", SecurityUtil.getUserId()); cnd.and("ins.state", "=", 20); diff --git a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/models/ActivityReimbursementInfo.java b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/models/ActivityReimbursementInfo.java index 1f02e4e5..fde498c4 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/models/ActivityReimbursementInfo.java +++ b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/models/ActivityReimbursementInfo.java @@ -5,6 +5,7 @@ import com.budwk.app.zhgh.activity.declarereimbursement.declare.models.ActivityD import lombok.Data; import lombok.EqualsAndHashCode; import org.nutz.dao.entity.annotation.*; +import org.nutz.dao.interceptor.annotation.PrevInsert; import java.math.BigDecimal; import java.util.Date; @@ -22,6 +23,12 @@ import java.util.List; @EqualsAndHashCode(callSuper = true) public class ActivityReimbursementInfo extends ActivityDeclareInfo { + @Name + @Comment("ID") + @ColDefine(type = ColType.VARCHAR, width = 32) + @PrevInsert(uu32 = true) + private String id; + @Column @Comment("申报id") @ColDefine(type = ColType.VARCHAR, width = 32) diff --git a/src/main/java/com/budwk/app/zhgh/activity/workscollection/controller/ActivityWorksCollectionReadController.java b/src/main/java/com/budwk/app/zhgh/activity/workscollection/controller/ActivityWorksCollectionReadController.java index abe7d5f6..c8317917 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/workscollection/controller/ActivityWorksCollectionReadController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/workscollection/controller/ActivityWorksCollectionReadController.java @@ -179,7 +179,7 @@ public class ActivityWorksCollectionReadController { response.setHeader("Content-Disposition", "attachment;filename=" + URLUtil.encode("作品征集数据.zip")); Cnd cnd = Cnd.NEW(); - cnd.andEX("up.activityId", "=", pageForm.getActivityId()); + cnd.andEX("activityId", "=", pageForm.getActivityId()); cnd.andEX("typeName", "=", pageForm.getTypeName()); if (StrUtil.isAllNotBlank(pageForm.getSearchKeyword())) { SqlExpressionGroup seg = new SqlExpressionGroup(); diff --git a/src/main/java/com/budwk/app/zhgh/activity/workscollection/controller/ActivityWorksCollectionUploadController.java b/src/main/java/com/budwk/app/zhgh/activity/workscollection/controller/ActivityWorksCollectionUploadController.java index 4fad198b..11ee496d 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/workscollection/controller/ActivityWorksCollectionUploadController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/workscollection/controller/ActivityWorksCollectionUploadController.java @@ -1,6 +1,7 @@ package com.budwk.app.zhgh.activity.workscollection.controller; import cn.dev33.satoken.annotation.SaCheckPermission; +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.result.Result; @@ -26,6 +27,7 @@ import org.nutz.mvc.annotation.Ok; import org.nutz.mvc.annotation.Param; import javax.validation.Valid; +import java.util.Date; import java.util.List; /** @@ -56,7 +58,7 @@ public class ActivityWorksCollectionUploadController { */ @At @SaCheckPermission("activity.workscollection.upload") - public Result pageData(@Valid PageForm pageForm, String activityId, String subjectId, String worksId) { + public Result pageData(@Valid PageForm pageForm, String activityId, String subjectId, String worksId, Long year) { Sql sql = Sqls.create(""" select up.*, @@ -72,6 +74,7 @@ public class ActivityWorksCollectionUploadController { """); Cnd cnd = Cnd.NEW(); cnd.and("userId", "=", SecurityUtil.getUserId()); + cnd.andEX("YEAR(co.startDateTime)","=",year); cnd.andEX("up.activityId", "=", activityId); cnd.andEX("up.subjectId", "=", subjectId); cnd.andEX("up.worksId", "=", worksId); diff --git a/src/main/java/com/budwk/app/zhgh/activity/workscollection/models/Activity_works_collection_upload.java b/src/main/java/com/budwk/app/zhgh/activity/workscollection/models/Activity_works_collection_upload.java index fd8595ac..245268cf 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/workscollection/models/Activity_works_collection_upload.java +++ b/src/main/java/com/budwk/app/zhgh/activity/workscollection/models/Activity_works_collection_upload.java @@ -9,7 +9,9 @@ import org.nutz.dao.interceptor.annotation.PrevInsert; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; +import java.util.Date; import java.util.List; @Data @@ -97,4 +99,6 @@ public class Activity_works_collection_upload extends BaseModel { @NotEmpty(message = "附件不能为空") private List files; + + } diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/evaluation/controller/EvaluateBranchUnionApprovalController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/evaluation/controller/EvaluateBranchUnionApprovalController.java index fb6ec966..ddc7653c 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/evaluation/controller/EvaluateBranchUnionApprovalController.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/evaluation/controller/EvaluateBranchUnionApprovalController.java @@ -57,7 +57,7 @@ public class EvaluateBranchUnionApprovalController { ea.name AS evaluateName, hb.name AS honorName, bs.name as honorTypeName, - ins.id AS instanceId, + ins.id AS instanceId, ins.businessNo, ins.state instanceState, ins.variable instanceVariable, @@ -76,17 +76,18 @@ public class EvaluateBranchUnionApprovalController { FROM wf_process_task t LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId + 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 LEFT JOIN evaluate_apply info ON info.id = ins.businessNo LEFT JOIN evaluate_activity ea ON ea.id = info.evaluateId LEFT JOIN honor_basic_settings hb ON hb.id = info.honorId LEFT JOIN honor_basic_settings bs ON bs.id = info.honorTypeId - 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", "=", "3bdaa29d-e5eb-4e3e-b7f1-14d03bedd078"); + cnd.and("info.evaluateId", "=", pageForm.getEvaluateId()); 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())); diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/evaluation/controller/EvaluateSchoolUnionApprovalController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/evaluation/controller/EvaluateSchoolUnionApprovalController.java index 8bc5bcda..bf7fc275 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/evaluation/controller/EvaluateSchoolUnionApprovalController.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/evaluation/controller/EvaluateSchoolUnionApprovalController.java @@ -102,6 +102,7 @@ public class EvaluateSchoolUnionApprovalController { cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); cnd.andEX("info.unionId","=",pageForm.getUnionId()); cnd.andEX("info.unitId","=",pageForm.getUnitId()); + cnd.andEX("info.evaluateId","=",pageForm.getEvaluateId()); if (approval) { cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); 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 index 1b9e9d25..707987ba 100644 --- 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 @@ -15,13 +15,13 @@ 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.flow.enums.ProcessInstanceStateEnum; 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.ExcellentRecuperationQuotaAllocation; import com.budwk.app.zhgh.staffbenefit.excellentRecuperation.model.ExcellentRecuperationSignUpUser; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -149,7 +149,7 @@ public class ExcellentRecuperationActivitySignUpController { @At @ApiOperation("删除报名信息") @Aop(TransAop.READ_COMMITTED) - @SaCheckPermission("enrollmentRegistration.summary") + @SaCheckPermission("excellentRecuperation.activitySignUp") @SLog(tag = "优秀教职工疗休养-活动报名", type = "excellentRecuperationActivitySignUp", msg = "删除id: ${args[0]}") public Result doDelete(String id) { dao.delete(ExcellentRecuperationSignUpUser.class, id); @@ -205,6 +205,9 @@ public class ExcellentRecuperationActivitySignUpController { public Result listActivityByYear(String year) { List activityList = dao.query(ExcellentRecuperationActivity.class, Cnd.where("YEAR(signUpStartTime)", "=", year).desc("signUpStartTime")); + activityList.forEach(activity -> { + activity.setUnionQuotaAllocationList(dao.query(ExcellentRecuperationQuotaAllocation.class, Cnd.where("activityId", "=", activity.getId()))); + }); return Result.success(activityList); } @@ -258,5 +261,47 @@ public class ExcellentRecuperationActivitySignUpController { return Result.success(dao.fetch(ExcellentRecuperationSignUpUser.class, id)); } + @At + @ApiOperation("查询报名人员") + @SaCheckLogin + public Result getSIgnUpUserList(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); + cnd.and("ins.state", "!=", ProcessInstanceStateEnum.REJECT.getCode()); + sql.setCondition(cnd); + List map = baseService.listMap(sql); + return Result.success(map); + } + } 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 index 24e0f443..466a2bd8 100644 --- 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 @@ -19,7 +19,6 @@ 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; @@ -221,8 +220,8 @@ public class ExcellentRecuperationTravelAgencyController { 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)); + List travelAgencyList = dao.query(ExcellentRecuperationTravelAgency.class, Cnd.NEW().desc("id")); + Map map = travelAgencyList.stream().collect(Collectors.toMap(ExcellentRecuperationTravelAgency::getTravelAgencyName, ExcellentRecuperationTravelAgency::getId)); for (int i = 0; i < travelAgency.size(); i++) { TravelAgencyExcelMode travel = travelAgency.get(i); @@ -234,7 +233,7 @@ public class ExcellentRecuperationTravelAgencyController { travel.setErrInfo("旅行社名称为空", i + 1); continue; } - RecuperationTravelAgency agency = new RecuperationTravelAgency(); + ExcellentRecuperationTravelAgency agency = new ExcellentRecuperationTravelAgency(); if (Strings.isNotBlank(map.get(travel.getTravelAgencyName()))){ agency.setId(map.get(travel.getTravelAgencyName())); } 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 index aa8e05bf..616426e6 100644 --- 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 @@ -1,7 +1,6 @@ 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.*; @@ -55,7 +54,7 @@ public class ExcellentRecuperationLine extends BaseModel { private boolean isDisabled; @Column - @ColDefine(type = ColType.VARCHAR, width = 50) + @ColDefine(type = ColType.VARCHAR, width = 500) @Comment("缩略图") private String file; diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/member/service/impl/MemberStatisticsServiceImpl.java b/src/main/java/com/budwk/app/zhgh/staffmanage/member/service/impl/MemberStatisticsServiceImpl.java index 10a06415..9b3379f0 100644 --- a/src/main/java/com/budwk/app/zhgh/staffmanage/member/service/impl/MemberStatisticsServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/staffmanage/member/service/impl/MemberStatisticsServiceImpl.java @@ -60,7 +60,7 @@ public class MemberStatisticsServiceImpl extends BaseServiceImpl imple cnd.orderBy(pageForm.getPageOrderName(), pageForm.getPageOrderBy().equalsIgnoreCase("ascending") ? "ASC" : "DESC"); } - if (Lang.isNotEmpty(pageForm.getAge()) && !"0".equals(pageForm.getAge().get(0)) && !"0".equals(pageForm.getAge().get(1))) { + if (Lang.isNotEmpty(pageForm.getAge()) && !"0".equals(pageForm.getAge().get(1))) { if (reverseSelection) { cnd.andNot("TIMESTAMPDIFF(YEAR, u.birthday, CURDATE())", "between", pageForm.getAge().toArray()); } else { diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/memberCost/controller/MemberPaymentChartSummaryController.java b/src/main/java/com/budwk/app/zhgh/staffmanage/memberCost/controller/MemberPaymentChartSummaryController.java index a74b598a..5d97e061 100644 --- a/src/main/java/com/budwk/app/zhgh/staffmanage/memberCost/controller/MemberPaymentChartSummaryController.java +++ b/src/main/java/com/budwk/app/zhgh/staffmanage/memberCost/controller/MemberPaymentChartSummaryController.java @@ -174,7 +174,7 @@ public class MemberPaymentChartSummaryController { ) subquery ON subquery.unionId = un.id GROUP BY un.id, - un.unionname, + un.name, un.unioncode ORDER BY un.unioncode; diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/memberCost/controller/MemberPaymentSummaryController.java b/src/main/java/com/budwk/app/zhgh/staffmanage/memberCost/controller/MemberPaymentSummaryController.java index 6181a141..b6c839af 100644 --- a/src/main/java/com/budwk/app/zhgh/staffmanage/memberCost/controller/MemberPaymentSummaryController.java +++ b/src/main/java/com/budwk/app/zhgh/staffmanage/memberCost/controller/MemberPaymentSummaryController.java @@ -5,8 +5,10 @@ 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.SaCheckPermission; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.StrUtil; import com.budwk.app.base.annotation.SLog; import com.budwk.app.base.constant.RoleConstant; @@ -104,9 +106,9 @@ public class MemberPaymentSummaryController { public Result modify(@Param("ids") String[] ids, String paymentMoney, boolean isPay, String remark) { List idList = Arrays.asList(ids); if (Lang.isNotEmpty(idList)) { - if (!isPay) { + if (isPay) { //未缴费设为已缴费 - memberPaymentService.update(Chain.make("paymentMoney", paymentMoney) + memberPaymentService.update(Chain.make("paymentMoney", NumberUtil.mul(paymentMoney, "100")) .add("remark", remark).add("isPayment", 1) .add("paymentTime", new Date()), Cnd.where("id", "in", idList)); @@ -134,9 +136,16 @@ public class MemberPaymentSummaryController { @ApiOperation("下载导入模版") @SaCheckPermission("member.payment.summary") public void downloadImportTemp(HttpServletResponse response) { + List exportEntities = new ArrayList<>(); + exportEntities.add(new ExcelExportEntity("工号", "loginname", 20)); + exportEntities.add(new ExcelExportEntity("姓名", "username", 20)); + exportEntities.add(new ExcelExportEntity("缴纳金额", "paymentBase", 20)); + exportEntities.add(new ExcelExportEntity("是否缴费", "isPay", 20)); + exportEntities.add(new ExcelExportEntity("备注", "remark", 20)); + ExportParams exportParams = new ExportParams(); exportParams.setType(ExcelType.XSSF); - Workbook workbook = ExcelExportUtil.exportExcel(exportParams, MemberPaymentTemp.class, new ArrayList<>()); + Workbook workbook = ExcelExportUtil.exportExcel(exportParams, exportEntities, new ArrayList<>()); CommonDownloadUtil.download("会员缴费导入模版.xlsx", workbook, response); } diff --git a/src/main/java/com/budwk/app/zhgh/unionReimburse/controller/UnionReimburseMineController.java b/src/main/java/com/budwk/app/zhgh/unionReimburse/controller/UnionReimburseMineController.java index e414a65e..5cdbbc95 100644 --- a/src/main/java/com/budwk/app/zhgh/unionReimburse/controller/UnionReimburseMineController.java +++ b/src/main/java/com/budwk/app/zhgh/unionReimburse/controller/UnionReimburseMineController.java @@ -37,7 +37,7 @@ import org.nutz.mvc.annotation.Param; @At("/platform/unionReimburse/mine") @Api("工会报销我的") @Ok("json:full") -public class UnionReimburseMineController { +public class UnionReimburseMineController { @Inject private UnionReimburseService unionReimburseService; diff --git a/src/main/java/com/budwk/app/zhgh/user/childManage/h5controller/H5ChildManageController.java b/src/main/java/com/budwk/app/zhgh/user/childManage/h5controller/H5ChildManageController.java new file mode 100644 index 00000000..d73fd701 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/user/childManage/h5controller/H5ChildManageController.java @@ -0,0 +1,27 @@ +package com.budwk.app.zhgh.user.childManage.h5controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import lombok.extern.slf4j.Slf4j; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; + +/** + * @version 1.0 + * @Author hqw + * @name:H5ChildManageController + * @Date 2025/9/4 8:52 + * @注释 + */ +@Slf4j +@IocBean +@Ok("json") +@At("/platform/childManage/manage/h5") +public class H5ChildManageController { + + @At("") + @Ok("beetl:/platform/zhghh5/staffmanage/childmanage/") + @SaCheckPermission("h5.childManage") + public void index() { + } +} diff --git a/src/main/resources/static/components/module/activity/ActivityImportUser.vue b/src/main/resources/static/components/module/activity/ActivityImportUser.vue new file mode 100644 index 00000000..0d577998 --- /dev/null +++ b/src/main/resources/static/components/module/activity/ActivityImportUser.vue @@ -0,0 +1,235 @@ + + + + + diff --git a/src/main/resources/static/components/module/activity/UserDataScope.vue b/src/main/resources/static/components/module/activity/UserDataScope.vue index 962a6212..afb1938e 100644 --- a/src/main/resources/static/components/module/activity/UserDataScope.vue +++ b/src/main/resources/static/components/module/activity/UserDataScope.vue @@ -1,319 +1,347 @@ diff --git a/src/main/resources/static/components/module/activity/UserScope.vue b/src/main/resources/static/components/module/activity/UserScope.vue index 8627ddbc..cb88804f 100644 --- a/src/main/resources/static/components/module/activity/UserScope.vue +++ b/src/main/resources/static/components/module/activity/UserScope.vue @@ -1,773 +1,751 @@