diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..3dc0817 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,14 @@ +{ + "printWidth": 150, + "singleQuote": false, + "tabWidth": 4, + "semi": false, + "trailingComma": "none", + "bracketSpacing": true, + "arrowParens": "always", + "rangeStart": 0, + "htmlWhitespaceSensitivity": "ignore", + "vueIndentScriptAndStyle": false, + "endOfLine": "auto", + "useTabs": false +} diff --git a/pom.xml b/pom.xml index 2418589..c382d7b 100644 --- a/pom.xml +++ b/pom.xml @@ -165,6 +165,13 @@ + + + org.apache.shiro + shiro-web + 1.9.1 + + org.nutz nutzboot-starter-shiro @@ -803,6 +810,14 @@ + + + src/main/resources + + **/* + + + diff --git a/src/main/java/io/v/nutz/web/commons/base/Globals.java b/src/main/java/io/v/nutz/web/commons/base/Globals.java index be8b2d8..5086160 100644 --- a/src/main/java/io/v/nutz/web/commons/base/Globals.java +++ b/src/main/java/io/v/nutz/web/commons/base/Globals.java @@ -53,9 +53,9 @@ public class Globals { //项目短名称 public static String AppShrotName = ""; //项目域名 (设置一个默认的 为优先级考虑) - public static String AppDomain = "https://zhgh.zufe.edu.cn"; + public static String AppDomain = "https://zhgh.hmc.edu.cn"; //cas地址 - public static String CasAddress = "https://cas.zufe.edu.cn/cas"; + public static String CasAddress = "https://newca.hmc.edu.cn/cas"; //文件访问域名 public static String AppFileDomain = ""; //文件上传路径 @@ -69,7 +69,7 @@ public class Globals { //微信map public static NutMap WxMap = NutMap.NEW(); //高校名称 - public static String schoolName = "浙江财经大学"; + public static String schoolName = "杭州医学院"; public static String BrandActivityName = ""; @@ -122,9 +122,11 @@ public class Globals { List taskList = sysTaskService.query(); for (Sys_task sysTask : taskList) { try { - if (!sysTask.isDisabled())//不存在则新建 + if (!sysTask.isDisabled()) { + //不存在则新建 taskPlatformService.add(sysTask.getId(), sysTask.getId(), sysTask.getJobClass(), sysTask.getCron() , sysTask.getNote(), sysTask.getData()); + } } catch (Exception e) { e.printStackTrace(); } diff --git a/src/main/java/io/v/nutz/zhgh/data/constant/SourceData.java b/src/main/java/io/v/nutz/zhgh/data/constant/SourceData.java index 4fe1db0..fef3ac0 100644 --- a/src/main/java/io/v/nutz/zhgh/data/constant/SourceData.java +++ b/src/main/java/io/v/nutz/zhgh/data/constant/SourceData.java @@ -42,7 +42,7 @@ public interface SourceData { * @param jsonResult 接口返回数据 */ private static void checkSuccess(NutMap jsonResult) { - Assert.isTrue(jsonResult.getBoolean("success"), jsonResult.getString("data")); +// Assert.isTrue(jsonResult.getBoolean("success"), jsonResult.getString("data")); } /* *//** @@ -157,10 +157,8 @@ public interface SourceData { while (hasRecords) { String body = HttpUtil.createPost(DATA_URL).body(JSON.toJSONString(new NutMap().addv("address", "jzgjbxx").addv("params", new NutMap()) .addv("token", "3318a5a9-c2f2-4c8b-a8ea-e99dd68c165c").addv("pageIndex", page).addv("pageSize", 1000))).execute().body(); -// String body = HttpUtil.get(DATA_URL, new NutMap().addv("address", "jzgjbxx").addv("params", new NutMap()) -// .addv("token", "3318a5a9-c2f2-4c8b-a8ea-e99dd68c165c").addv("pageIndex", page).addv("pageSize", 1000)); NutMap map = Json.fromJson(NutMap.class, body); - checkSuccess(map); +// checkSuccess(map); List data = map.getAsList("data", NutMap.class); for (NutMap row : data) { Map entity = new HashMap(1000); @@ -179,7 +177,7 @@ public interface SourceData { users.add(BeanUtil.mapToBean(entity, UserSource.class, true)); } int totalCount = map.getInt("totalCount"); - maxPage = (int) Math.ceil((double) totalCount / page); + maxPage = (int) Math.ceil((double) totalCount / 1000); page++; if (page > maxPage) { hasRecords = false; @@ -212,11 +210,11 @@ public interface SourceData { List units = new ArrayList<>(); int page = 1; String body = HttpUtil.createPost(DATA_URL).body(JSON.toJSONString(new NutMap().addv("address", "rsxt_dwjbsj").addv("params", new NutMap()) - .addv("token", "3318a5a9-c2f2-4c8b-a8ea-e99dd68c165c").addv("pageIndex", page).addv("pageSize", 1000))).execute().body(); + .addv("token", "3318a5a9-c2f2-4c8b-a8ea-e99dd68c165c").addv("pageIndex", page).addv("pageSize", 100))).execute().body(); // String body = HttpUtil.get(DATA_URL, new NutMap().addv("address", "rsxt_dwjbsj").addv("params", new NutMap()) // .addv("token", "3318a5a9-c2f2-4c8b-a8ea-e99dd68c165c").addv("pageIndex", page).addv("pageSize", 1000)); NutMap map = Json.fromJson(NutMap.class, body); - checkSuccess(map); +// checkSuccess(map); List data = map.getAsList("data", NutMap.class); for (NutMap row : data) { diff --git a/src/main/java/io/v/nutz/zhgh/data/service/impl/SourceUserServiceImpl.java b/src/main/java/io/v/nutz/zhgh/data/service/impl/SourceUserServiceImpl.java index f9f05ed..3c3803a 100644 --- a/src/main/java/io/v/nutz/zhgh/data/service/impl/SourceUserServiceImpl.java +++ b/src/main/java/io/v/nutz/zhgh/data/service/impl/SourceUserServiceImpl.java @@ -1,6 +1,5 @@ package io.v.nutz.zhgh.data.service.impl; -import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; @@ -14,7 +13,6 @@ import io.v.nutz.zhgh.data.model.UserHistory; import io.v.nutz.zhgh.data.model.UserSource; import io.v.nutz.zhgh.data.service.HistoryUserService; import io.v.nutz.zhgh.data.service.SourceUserService; -import io.v.nutz.base.lang.Enum; import io.v.nutz.zhgh.member.UserMode; import io.v.nutz.base.service.AsyncService; import io.v.nutz.base.service.impl.ViServiceImpl; @@ -30,7 +28,6 @@ import org.nutz.dao.Cnd; import org.nutz.dao.Dao; import org.nutz.dao.FieldFilter; import org.nutz.dao.Sqls; -import org.nutz.dao.entity.Record; import org.nutz.dao.sql.Sql; import org.nutz.dao.util.Daos; import org.nutz.ioc.aop.Aop; @@ -47,9 +44,10 @@ import org.springframework.util.StringUtils; import java.util.*; import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicReference; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; import java.util.stream.Collectors; - /** * @author 1V */ @@ -83,12 +81,6 @@ public class SourceUserServiceImpl extends ViServiceImpl implements public void pullSourceData(Boolean isIncrement) { Date now = new Date(); List users = SourceData.users(); - /* List userSourceList = users.stream().filter(v -> !v.getUserState().equals("离校")).collect(Collectors.toList()); - //离退休劳模,要更新到系统 - List userPartUpLoginNameList = userPatUpService.query(Cnd.where("groupId", "=", 2)).stream().map(UserPartUp::getLoginname).collect(Collectors.toList()); - //离退休超过两年 - List retireUser = userSourceList.stream().filter(v -> v.getRetireDate() != null && DateUtil.betweenYear(v.getRetireDate(), DateUtil.date(), false) > 2L && !userPartUpLoginNameList.contains(v.getLoginname())).collect(Collectors.toList()); - users = userSourceList.stream().filter(v -> !retireUser.contains(v)).collect(Collectors.toList());*/ asyncService.exe2(users, (user) -> { user.setPullTime(now); UserMode.initUser(user); @@ -176,7 +168,7 @@ public class SourceUserServiceImpl extends ViServiceImpl implements } } - List changeTypes = getChangeTypes(source, user); + List changeTypes = getChangeTypes(source, user, sourceType); if (changeTypes.contains(UserChangeType.NEW)) { user = UserMode.initUser(u); needInitUserList.add(user); @@ -220,6 +212,7 @@ public class SourceUserServiceImpl extends ViServiceImpl implements // sysRoleService.clearCache(); } catch (Exception e) { e.printStackTrace(); + throw new RuntimeException(e.getMessage()); } } @@ -237,35 +230,38 @@ public class SourceUserServiceImpl extends ViServiceImpl implements dao().clear(UserSource.class, Cnd.where("DATE(pullTime)", "<", formatAgoWeekDate)); } - private List getChangeTypes(Sys_user source, Sys_user user) { + private List getChangeTypes(Sys_user source, Sys_user user, String sourceType) { List userChangeTypes = new ArrayList<>(); if (user == null) { userChangeTypes.add(UserChangeType.NEW); return userChangeTypes; - } - if (!StringUtils.isEmpty(source.getUnitid()) && !source.getUnitid().equals(user.getUnitid())) { - userChangeTypes.add(UserChangeType.UNIT_CHANGE); - } - if (!StringUtils.isEmpty(user.getUserState()) && StrUtil.isNotEmpty(source.getUserState()) && !source.getUserState().equals(user.getUserState())) { - for (UserChangeType value : UserChangeType.values()) { - if (value.getDescription().equals(source.getUserState())) { - userChangeTypes.add(value); + } else { + if ("add".equals(sourceType)) { + return userChangeTypes; + } + if (!StringUtils.isEmpty(source.getUnitid()) && !source.getUnitid().equals(user.getUnitid())) { + userChangeTypes.add(UserChangeType.UNIT_CHANGE); + } + if (!StringUtils.isEmpty(user.getUserState()) && StrUtil.isNotEmpty(source.getUserState()) && !source.getUserState().equals(user.getUserState())) { + for (UserChangeType value : UserChangeType.values()) { + if (value.getDescription().equals(source.getUserState())) { + userChangeTypes.add(value); + } + } + } + + List columns = List.of("nation", "birthday", "personType", "political", "schoolTime", "jobTitle", "education", "academicDegree", "position", "leaveSchoolDate", "retireDate"); + for (String column : columns) { + NutMap userSourceMap = Lang.obj2nutmap(source); + NutMap userMap = Lang.obj2nutmap(user); + String sourceValue = userSourceMap.getString(column, ""); + String value = userMap.getString(column, ""); + if (!sourceValue.equals(value) && StrUtil.isNotBlank(sourceValue)) { + userChangeTypes.add(UserChangeType.BASIC_CHANGE); + break; } } } - - List columns = List.of("nation", "birthday", "personType", "political", "schoolTime", "jobTitle", "education", "academicDegree", "position", "leaveSchoolDate", "retireDate"); - for (String column : columns) { - NutMap userSourceMap = Lang.obj2nutmap(source); - NutMap userMap = Lang.obj2nutmap(user); - String sourceValue = userSourceMap.getString(column, ""); - String value = userMap.getString(column, ""); - if (!sourceValue.equals(value) && StrUtil.isNotBlank(sourceValue)) { - userChangeTypes.add(UserChangeType.BASIC_CHANGE); - break; - } - } - return userChangeTypes; } @@ -304,53 +300,51 @@ public class SourceUserServiceImpl extends ViServiceImpl implements * @param filterColumnDao 部分更新传递(部分更新存在过滤字段) */ private void massUpdatesAsync(List needDoUpdateList, Boolean isPart, AtomicReference filterColumnDao) { - // 根据服务器性能和任务特性动态确定线程池大小;通常,线程池大小为CPU核心数的2倍 + // 创建一个CPU核心数的2倍的线程池 int numberOfThreads = Runtime.getRuntime().availableProcessors() * 2; ExecutorService executorService = Executors.newFixedThreadPool(numberOfThreads); ExecutorCompletionService ecs = new ExecutorCompletionService<>(executorService); - // 每批处理的数据量 - int batchSize = 100; - + int batchSize = 200; + // 共享锁 + Lock lock = new ReentrantLock(); try { - // 将sources分成若干批 for (int i = 0; i < needDoUpdateList.size(); i += batchSize) { final int end = Math.min(i + batchSize, needDoUpdateList.size()); List batch = needDoUpdateList.subList(i, end); - // 提交任务给线程池执行 ecs.submit(() -> { Dao daoToUse = isPart ? filterColumnDao.get() : dao(); - // 执行数据库更新操作 - synchronized (daoToUse) { + lock.lock(); + try { daoToUse.updateIgnoreNull(batch); + } finally { + lock.unlock(); } - return null; // CompletionService需要一个返回值,这里返回null + return null; }); } - // 等待所有任务完成 for (int i = 0; i < needDoUpdateList.size(); i += batchSize) { try { Future future = ecs.take(); - future.get(); // 等待任务完成 + future.get(); } catch (InterruptedException | ExecutionException e) { - Thread.currentThread().interrupt(); // 恢复中断状态 - throw new RuntimeException(e); + Thread.currentThread().interrupt(); + throw new RuntimeException("Error during batch update", e); } } } catch (Exception e) { - e.printStackTrace(); + log.error("Error in massUpdatesAsync", e); + throw new RuntimeException("Error in massUpdatesAsync", e); } finally { - // 关闭线程池 executorService.shutdown(); try { - // 设置合理的超时时间,防止无限期阻塞 if (!executorService.awaitTermination(10, TimeUnit.SECONDS)) { - executorService.shutdownNow(); // 如果超时,强制关闭 + executorService.shutdownNow(); } } catch (InterruptedException e) { - Thread.currentThread().interrupt(); // 恢复中断状态 + Thread.currentThread().interrupt(); } } } diff --git a/src/main/java/io/v/nutz/zhgh/member/handle/MemberChangeHandle.java b/src/main/java/io/v/nutz/zhgh/member/handle/MemberChangeHandle.java index 3199738..bdc5f0d 100644 --- a/src/main/java/io/v/nutz/zhgh/member/handle/MemberChangeHandle.java +++ b/src/main/java/io/v/nutz/zhgh/member/handle/MemberChangeHandle.java @@ -10,6 +10,7 @@ import io.v.nutz.sys.services.SysRoleService; import io.v.nutz.sys.services.SysUserService; import io.v.nutz.zhgh.data.constant.UserChangeType; import io.v.nutz.zhgh.data.model.UserHistory; +import io.v.nutz.zhgh.member.MemberMode; import io.v.nutz.zhgh.member.UserMode; import io.v.nutz.zhgh.member.WelfareMemberMode; import io.v.nutz.zhgh.member.constant.MemberStatus; @@ -49,13 +50,10 @@ public enum MemberChangeHandle { @Override public void change(MemberChangeRecord record) { archive(record.getUserId(), UserChangeType.NEW); - if (null != record.getInsertMember() && record.getInsertMember()){ - UserMode.addMemberRole(record.getUserId()); + if (null != record.getUpdateMember() && record.getUpdateMember()){ sysUserService.update(Chain.make("schoolTime", DateUtil.today()),Cnd.where("id","=",record.getUserId())); } - if (null != record.getUpdateWelfareMember() && record.getUpdateWelfareMember()) { - sysUserService.update(Chain.make("welfareMember", WelfareMemberMode.NORMAL.getCode()).add("schoolTime", DateUtil.today()), Cnd.where("id", "=", record.getUserId())); - } + updateMemberAndWelfareMember(record); sysUserService.clearCache(); sysRoleService.clearCache(); } @@ -65,8 +63,8 @@ public enum MemberChangeHandle { public void change(MemberChangeRecord record) { archive(record.getUserId(), UserChangeType.RESIGN); UserMode.removeMemberRole(record.getUserId()); - updateWelfareMember(record); - updateMemberStatus(MemberStatus.TURN_OUT, record.getUserId()); + updateMemberAndWelfareMember(record); +// updateMemberStatus(MemberStatus.TURN_OUT, record.getUserId()); updateUserStateAndPersonType(record); } }, @@ -85,8 +83,8 @@ public enum MemberChangeHandle { public void change(MemberChangeRecord record) { archive(record.getUserId(), UserChangeType.RETIREMENT); UserMode.removeMemberRole(record.getUserId()); - updateWelfareMember(record); - updateMemberStatus(MemberStatus.KEEP, record.getUserId()); + updateMemberAndWelfareMember(record); +// updateMemberStatus(MemberStatus.KEEP, record.getUserId()); updateUserStateAndPersonType(record); } }, @@ -106,9 +104,7 @@ public enum MemberChangeHandle { archive(record.getUserId(), UserChangeType.RESTORE); UserMode.addMemberRole(record.getUserId()); updateMemberStatus(MemberStatus.RESTORE, record.getUserId()); - if (record.getUpdateWelfareMember()) { - sysUserService.update(Chain.make("welfareMember", WelfareMemberMode.NORMAL.getCode()), Cnd.where("id", "=", record.getUserId())); - } + updateMemberAndWelfareMember(record); } }, WITHDRAWAL(UserChangeType.WITHDRAWAL.getCode()) { @@ -116,7 +112,7 @@ public enum MemberChangeHandle { public void change(MemberChangeRecord record) { archive(record.getUserId(), UserChangeType.WITHDRAWAL); UserMode.removeMemberRole(record.getUserId()); - updateWelfareMember(record); + updateMemberAndWelfareMember(record); updateMemberStatus(MemberStatus.WITHDRAWAL, record.getUserId()); updateUserStateAndPersonType(record); } @@ -171,14 +167,17 @@ public enum MemberChangeHandle { * * @param record 变更记录 */ - public static void updateWelfareMember(MemberChangeRecord record) { - //record.getUpdateWelfareMember() (true:增加福利会员 false:取消福利会员);针对入会(恢复) - if (null != record.getUpdateWelfareMember() && record.getUpdateWelfareMember()) { - sysUserService.update(Chain.make("welfareMember", WelfareMemberMode.NORMAL.getCode()), Cnd.where("id", "=", record.getUserId())); + public static void updateMemberAndWelfareMember(MemberChangeRecord record) { + if (null != record.getUpdateWelfareMember()) { + sysUserService.update(Chain.make("welfareMember", record.getUpdateWelfareMember() ? WelfareMemberMode.NORMAL.getCode() : WelfareMemberMode.NONE.getCode()), Cnd.where("id", "=", record.getUserId())); } - //record.getUpdateWelfare() (true:取消 false:不取消);针对(退休、离职、退会、去世) - if (null != record.getUpdateWelfare() && record.getUpdateWelfare()){ - sysUserService.update(Chain.make("welfareMember", WelfareMemberMode.NONE.getCode()), Cnd.where("id", "=", record.getUserId())); + if (null != record.getUpdateMember()){ + sysUserService.update(Chain.make("member", record.getUpdateMember() ? MemberMode.NORMAL.getCode() : MemberMode.NONE.getCode()), Cnd.where("id", "=", record.getUserId())); + } + if (null != record.getUpdateMember() && record.getUpdateMember()) { + UserMode.addMemberRole(record.getUserId()); + } else { + UserMode.removeMemberRole(record.getUserId()); } } @@ -199,13 +198,11 @@ public enum MemberChangeHandle { * @param record 变更记录 */ public static void updateUserStateAndPersonType(MemberChangeRecord record){ - Chain chain = null; - if (Strings.isNotBlank(record.getChangeUserState()) && Strings.isNotBlank(record.getChangePersonType())){ - chain = Chain.make("userState",record.getChangeUserState()).add("personType",record.getChangePersonType()); - } else if (Strings.isNotBlank(record.getChangeUserState()) && Strings.isBlank(record.getChangePersonType())){ - chain = Chain.make("userState",record.getChangeUserState()); - } else if (Strings.isBlank(record.getChangeUserState()) && Strings.isNotBlank(record.getChangePersonType())){ - chain = Chain.make("personType",record.getChangePersonType()); + Chain chain = Chain.make("eCard",null); + if (Strings.isNotBlank(record.getChangeUserState())) { + chain.add("userState", record.getChangeUserState()); + } else if (Strings.isNotBlank(record.getChangePersonType())) { + chain.add("personType", record.getChangePersonType()); } sysUserService.update(chain,Cnd.where("id","=",record.getUserId())); } diff --git a/src/main/java/io/v/nutz/zhgh/member/model/MemberChangeRecord.java b/src/main/java/io/v/nutz/zhgh/member/model/MemberChangeRecord.java index 3bb9b06..1b64495 100644 --- a/src/main/java/io/v/nutz/zhgh/member/model/MemberChangeRecord.java +++ b/src/main/java/io/v/nutz/zhgh/member/model/MemberChangeRecord.java @@ -124,16 +124,6 @@ public class MemberChangeRecord { @ColDefine(type = ColType.BOOLEAN) private Boolean updateMember; - @Column - @Comment("福利会员身份(true:取消 false:不取消);针对(退休、离职、退会、去世)") - @ColDefine(type = ColType.BOOLEAN) - private Boolean updateWelfare; - - @Column - @Comment("是否增加会员身份(true:增加 false:不增加)") - @ColDefine(type = ColType.BOOLEAN) - private Boolean insertMember; - @Column @Comment("身份证号异动") @ColDefine(type = ColType.VARCHAR, width = 30) diff --git a/src/main/java/org/nutz/boot/starter/shiro/NbShiroEnvironmentLoaderListener.java b/src/main/java/org/nutz/boot/starter/shiro/NbShiroEnvironmentLoaderListener.java new file mode 100644 index 0000000..efb9ce0 --- /dev/null +++ b/src/main/java/org/nutz/boot/starter/shiro/NbShiroEnvironmentLoaderListener.java @@ -0,0 +1,86 @@ +package org.nutz.boot.starter.shiro; + +import java.io.IOException; + +import javax.servlet.ServletContext; +import javax.servlet.ServletContextEvent; + +import org.apache.shiro.ShiroException; +import org.apache.shiro.config.ConfigurationException; +import org.apache.shiro.util.ClassUtils; +import org.apache.shiro.util.UnknownClassException; +import org.apache.shiro.web.env.EnvironmentLoader; +import org.apache.shiro.web.env.EnvironmentLoaderListener; +import org.apache.shiro.web.env.IniWebEnvironment; +import org.apache.shiro.web.env.WebEnvironment; +import org.nutz.boot.AppContext; +import org.nutz.ioc.impl.PropertiesProxy; +import org.nutz.lang.Lang; + +public class NbShiroEnvironmentLoaderListener extends EnvironmentLoaderListener { + + protected PropertiesProxy conf; + + protected AppContext appContext; + + @Override + public void contextInitialized(ServletContextEvent sce) { + PropertiesProxy conf = appContext.getConfigureLoader().get(); + try { + // 走原生API的shiro.ini文件吗? + String iniPath = conf.get("shiro.ini.path", "shiro.ini"); + if (conf.has("shiro.ini.path") || appContext.getResourceLoader().has(iniPath)) { + sce.getServletContext().setAttribute(EnvironmentLoader.CONFIG_LOCATIONS_PARAM, iniPath); + super.contextInitialized(sce); + return; + } + } catch (Exception e) { + throw Lang.wrapThrow(e); + } + sce.getServletContext().setAttribute(ENVIRONMENT_CLASS_PARAM, NbResourceBasedWebEnvironment.class.getName()); + super.contextInitialized(sce); + } + + protected WebEnvironment determineWebEnvironment(ServletContext servletContext) { +// Class webEnvironmentClass = this.webEnvironmentClassFromServletContext(servletContext); +// WebEnvironment webEnvironment = null; +// if (webEnvironmentClass == null) { +// webEnvironment = this.webEnvironmentFromServiceLoader(); +// } +// +// if (webEnvironmentClass == null && webEnvironment == null) { +// webEnvironmentClass = this.getDefaultWebEnvironmentClass(); +// } +// +// if (webEnvironmentClass != null) { +// webEnvironment = (WebEnvironment)ClassUtils.newInstance(webEnvironmentClass); +// } +// +// return webEnvironment; +// String className = servletContext.getInitParameter(ENVIRONMENT_CLASS_PARAM); + WebEnvironment webEnvironment = (WebEnvironment)ClassUtils.newInstance(NbResourceBasedWebEnvironment.class); + return webEnvironment; + } + + protected Class determineWebEnvironmentClass(ServletContext servletContext) { + String className = servletContext.getInitParameter(ENVIRONMENT_CLASS_PARAM); + if (className != null) { + try { + return ClassUtils.forName(className); + } catch (UnknownClassException ex) { + throw new ConfigurationException( + "Failed to load custom WebEnvironment class [" + className + "]", ex); + } + } else { + try { + String iniPath = conf.get("shiro.ini.path", "shiro.ini"); + if (conf.has("shiro.ini.path") || appContext.getResourceLoader().has(iniPath)) { + return IniWebEnvironment.class; + } + } catch (IOException e) { + throw new ShiroException(e); + } + return NbResourceBasedWebEnvironment.class; + } + } +} diff --git a/src/main/resources/static/components/member/MemChangeApply.vue b/src/main/resources/static/components/member/MemChangeApply.vue index befbf89..6789810 100644 --- a/src/main/resources/static/components/member/MemChangeApply.vue +++ b/src/main/resources/static/components/member/MemChangeApply.vue @@ -87,18 +87,24 @@
- - - 享受福利 - 不享受福利 - - - - - 成为会员 - 不成为会员 - - + + + + + 享受福利 + 不享受福利 + + + + + + + 成为会员 + 不成为会员 + + + +
@@ -111,23 +117,30 @@
- - - 保留享受福利 - 取消享受福利 - - - + + + + + 保留享受福利 + 取消享受福利 + + + + + + + 保留会员资格 + 取消会员资格 + + + + - - - 取消会员资格 - 保留会员资格 - - + + +