From c10d065003d523de7da229161e42fa8e9191899c Mon Sep 17 00:00:00 2001 From: yaoq Date: Mon, 15 Aug 2022 17:58:56 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=AA=E4=BA=BA=E4=BF=A1=E6=81=AF=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E3=80=81=E5=AF=86=E7=A0=81=E4=BF=AE=E6=94=B9=E3=80=81?= =?UTF-8?q?=E5=AF=86=E7=A0=81=E9=87=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../smtweb/system/bpm/web/login/AuthService.java | 18 +++++++- .../smtweb/system/bpm/web/login/LoginHelper.java | 7 +++ .../system/bpm/web/sys/user/user/UserCache.java | 11 +++++ .../system/bpm/web/sys/user/user/UserHandler.java | 22 ++++++++- .../system/bpm/web/sys/user/user/UserService.java | 12 +++++ .../static/event/bpm/sys/user/user/userList.js | 13 ++++++ .../cc/smtweb/framework/core/common/SwEnum.java | 11 +++-- .../cc/smtweb/framework/core/db/EntityDao.java | 42 ++++++++++++++++- .../cc/smtweb/framework/core/db/EntityHelper.java | 54 ++++++++++++++++++++-- 9 files changed, 178 insertions(+), 12 deletions(-) diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/login/AuthService.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/login/AuthService.java index 8a70ecd..51b3093 100644 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/login/AuthService.java +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/login/AuthService.java @@ -56,9 +56,9 @@ public class AuthService { user.put("create_time", PubUtil.checkLastTime(user.getCreate())); user.put("sur_party", PartyCache.getInstance().get(us.getPartyId())); user.put("sur_roles", RoleCache.getInstance().getNamesByIds(UserRoleCache.getInstance().getRoleIdByUP(us.getUserId(), us.getPartyId()))); - data.put("user", user); + data.put("userInfo", user); } catch (CloneNotSupportedException e) { - + data.put("userInfo", new SwMap()); } return R.success(data); } @@ -68,6 +68,20 @@ public class AuthService { SwMap userInfo = params.readMap("userInfo"); User user = UserCache.getInstance().get(us.getUserId()); user.getData().putAll(userInfo); + DbEngine.getInstance().findDao(User.ENTITY_NAME).updateEntity(user); + UserCache.getInstance().put(user); + return R.success(); + } + + @SwPerm() + public R changePwd(@SwBody SwMap params, UserSession us) { + String old_pwd = params.readString("old_pwd"); + String new_pwd = params.readString("new_pwd"); + User user = UserCache.getInstance().get(us.getUserId()); + if (!LoginHelper.verifyPwd(user, old_pwd)) { + return R.error("旧密码错误"); + } + LoginHelper.resetUserPwd(user, new_pwd); return R.success(); } diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/login/LoginHelper.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/login/LoginHelper.java index b304517..9f69494 100644 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/login/LoginHelper.java +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/login/LoginHelper.java @@ -3,6 +3,7 @@ package cc.smtweb.system.bpm.web.login; import cc.smtweb.framework.core.cache.redis.RedisManager; import cc.smtweb.framework.core.common.SwConsts; import cc.smtweb.framework.core.common.SwEnum; +import cc.smtweb.framework.core.db.DbEngine; import cc.smtweb.framework.core.exception.BizException; import cc.smtweb.framework.core.session.UserSession; import cc.smtweb.system.bpm.web.sys.user.user.User; @@ -72,6 +73,12 @@ public class LoginHelper { return DigestUtils.md5Hex(PWD_SALT + user.getId() + pwd).equals(user.getPwd()); } + public static void resetUserPwd(User user, String pwd) { + user.setPwd(LoginHelper.encodePwd(user.getId(), pwd)); + DbEngine.getInstance().findDao(User.ENTITY_NAME).updateEntity(user); + UserCache.getInstance().put(user); + } + /** * 校验密码是否符合规定 * diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/user/UserCache.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/user/UserCache.java index f0002a0..e44ab13 100644 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/user/UserCache.java +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/user/UserCache.java @@ -4,6 +4,9 @@ import cc.smtweb.framework.core.annotation.SwCache; import cc.smtweb.framework.core.cache.AbstractEntityCache; import cc.smtweb.framework.core.cache.CacheManager; +import java.util.HashSet; +import java.util.Set; + /** * Created by 1 at 2022-07-28 15:24:49 * 实体【[用户账号](SYS_USER)】的缓存类 @@ -63,4 +66,12 @@ public class UserCache extends AbstractEntityCache { if (user == null) return ""; return user.getName(); } + + public final Set getUserList(Set ids) { + Set set = new HashSet<>(); + ids.forEach(k -> { + set.add(get(k)); + }); + return set; + } } diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/user/UserHandler.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/user/UserHandler.java index 5b1d5cd..2924c62 100644 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/user/UserHandler.java +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/user/UserHandler.java @@ -70,7 +70,7 @@ public class UserHandler { partyList.add(userParty); String roles = row.get("sup_roles").toString(); - if(PubUtil.isEmpty(roles)) throw new BizException("用户机构所属角色为空"); + if (PubUtil.isEmpty(roles)) throw new BizException("用户机构所属角色为空"); for (String role_id : roles.split(",")) { UserRole userRole = new UserRole(); userRole.init(); @@ -217,5 +217,25 @@ public class UserHandler { }); return R.success(); } + + public R resetPwd() { + Set idList = params.readLongSet("ids"); + Set userList = UserCache.getInstance().getUserList(idList); + userList.forEach(user -> { + user.setPwd(LoginHelper.encodePwd(user.getId(), SwConsts.DEF_PWD)); + }); + DbEngine.getInstance().doTrans(new AbsDbWorker() { + @Override + public void work() { + DbEngine.getInstance().findDao(User.ENTITY_NAME).batchUpdateEntity(userList); + } + + @Override + public void doAfterDbCommit() { + UserCache.getInstance().putList(userList); + } + }); + return R.success(); + } } } diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/user/UserService.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/user/UserService.java index c4d9cb6..09bf762 100644 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/user/UserService.java +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/user/UserService.java @@ -54,4 +54,16 @@ public class UserService extends DynPageService { return pageHandler(params, us, TYPE_CUST, handler -> ((UserHandler.UserCustHandler) handler).delAll()); } + + /** + * @Author yaoq + * @Date 2022/8/15 16:48 + * @Params + * @Return cc.smtweb.framework.core.common.R + * @Description 重置密码 + */ + public R resetPwd(@SwBody SwMap params, UserSession us) { + return pageHandler(params, us, TYPE_CUST, handler -> ((UserHandler.UserCustHandler) handler).resetPwd()); + } + } diff --git a/smtweb-framework/bpm/src/main/resources/static/event/bpm/sys/user/user/userList.js b/smtweb-framework/bpm/src/main/resources/static/event/bpm/sys/user/user/userList.js index 4d1b11a..5292b49 100644 --- a/smtweb-framework/bpm/src/main/resources/static/event/bpm/sys/user/user/userList.js +++ b/smtweb-framework/bpm/src/main/resources/static/event/bpm/sys/user/user/userList.js @@ -13,8 +13,21 @@ window.$swEvent.setup("bpm.sys.user.user.userList", { $model.userCard.setFormVal("partyData", $model.userPartyList.data.list.rows); }; + const batchResetPwd = () => { + const data = $refs.tbuser.getSelectIds(); + if (data.length == 0) { + $$message.notify.warning("请选择要重置的记录!"); + return; + } + $$http.post("bpm/user/resetPwd", {ids: data.join(",")}).then((rt) => { + // 8.弹出成功消息 + $$message.notify.success("操作成功"); + }); + }; + return { onBeforeSave, + batchResetPwd, } } }); diff --git a/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/common/SwEnum.java b/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/common/SwEnum.java index 6b92fa7..4cb84c3 100644 --- a/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/common/SwEnum.java +++ b/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/common/SwEnum.java @@ -122,6 +122,11 @@ public interface SwEnum { public final static String TYPE_DATE = "date"; public final static String TYPE_DATETIME = "datetime"; + public final static String JAVA_TYPE_INT = "int"; + public final static String JAVA_TYPE_LONG = "long"; + public final static String JAVA_TYPE_STRING = "String"; + public final static String JAVA_TYPE_BOOL = "boolean"; + public static DataType instance = new DataType(); public static DataTypeBean ID = instance.addEnum("id", "ID", "bigint", 0, "long", "Long", Types.BIGINT, "", EditorType.INPUT.value); public static DataTypeBean CODE = instance.addEnum("code", "编码", "varchar", 32, "String", "Str", Types.VARCHAR, "", EditorType.INPUT.value); @@ -168,11 +173,11 @@ public interface SwEnum { DataTypeBean dataType = instance.getByValue(value); if (dataType == null) return fieldValue; switch (dataType.javaType) { - case "long": + case JAVA_TYPE_LONG: return PubUtil.getLongIgnoreErr(fieldValue); - case "int": + case JAVA_TYPE_INT: return PubUtil.getIntIgnoreErr(fieldValue); - case "boolean": + case JAVA_TYPE_BOOL: return PubUtil.getBool(fieldValue); default: return fieldValue; diff --git a/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/db/EntityDao.java b/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/db/EntityDao.java index bf31805..24c3593 100644 --- a/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/db/EntityDao.java +++ b/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/db/EntityDao.java @@ -12,6 +12,7 @@ import cc.smtweb.framework.core.util.PubUtil; import lombok.Getter; import org.apache.commons.lang3.StringUtils; +import java.text.MessageFormat; import java.util.*; /** @@ -141,10 +142,11 @@ public class EntityDao extends AbstractEntityDao { * @param entities PO对象列表 * @return 更新数量 */ - public int[] batchInsertEntity(List entities) { + public int[] batchInsertEntity(Collection entities) { return batchInsertEntity(entities, null); } + /** * 批量插入单行数据 * @@ -152,7 +154,7 @@ public class EntityDao extends AbstractEntityDao { * @param fields 逗号分隔的字段列表 * @return 更新数量 */ - public int[] batchInsertEntity(List entities, String fields) { + public int[] batchInsertEntity(Collection entities, String fields) { StringBuilder sql = new StringBuilder(); sql.append("insert into ").append(modelTable.getSchemaTableName()).append("("); @@ -198,6 +200,42 @@ public class EntityDao extends AbstractEntityDao { return jdbcEngine.batchUpdate(sql.toString(), listParams); } + public void batchUpdateEntity(Collection list) { + if (PubUtil.isEmpty(list)) return; + batchUpdateEntity(list, null); + } + + //批量更新 + public void batchUpdateEntity(Collection list, String fields) { + if (PubUtil.isEmpty(list)) return; + + List listFields = adjustFields(fields, SwEnum.FieldType.CREATE_TIME.value, SwEnum.FieldType.LAST_TIME.value); + List fieldList = new ArrayList<>(); + if (listFields == null) { + for (EntityColumn column : this.columns.values()) { + if (column.getField().getName().equals(modelTable.getIdField())) continue; + fieldList.add(column.getField().getName()); + } + } else { + for (String name : listFields) { + if (name.equals(modelTable.getIdField())) continue; + fieldList.add(name); + } + } + + String tableName = this.modelTable.getSchemaTableName(); + String tableFields = EntityHelper.nameString(fieldList, "=?, ", "=? "); + String tablePks = this.modelTable.getIdField() + " =? "; + String sql = MessageFormat.format("UPDATE {0} SET \n {1}\n WHERE {2}", tableName, tableFields, tablePks); + + fieldList.add(this.modelTable.getIdField()); + List params = new ArrayList<>(list.size()); + list.forEach(k -> { + params.add(EntityHelper.getFieldValueArgs(fieldList, (DefaultEntity) k)); + }); + DbEngine.getInstance().batchUpdate(sql, params); + } + /** * 根据ID值删除单行数据 diff --git a/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/db/EntityHelper.java b/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/db/EntityHelper.java index c9fb1ad..90a6e9f 100644 --- a/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/db/EntityHelper.java +++ b/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/db/EntityHelper.java @@ -3,16 +3,17 @@ package cc.smtweb.framework.core.db; import cc.smtweb.framework.core.cache.AbstractCache; import cc.smtweb.framework.core.cache.CacheManager; import cc.smtweb.framework.core.common.SwEnum; -import cc.smtweb.framework.core.db.impl.DefaultEntity; -import cc.smtweb.framework.core.exception.BizException; -import cc.smtweb.framework.core.exception.SwException; import cc.smtweb.framework.core.common.SwMap; import cc.smtweb.framework.core.db.cache.ModelTableCache; +import cc.smtweb.framework.core.db.impl.DefaultEntity; import cc.smtweb.framework.core.db.vo.ModelField; import cc.smtweb.framework.core.db.vo.ModelLinkName; import cc.smtweb.framework.core.db.vo.ModelTable; +import cc.smtweb.framework.core.exception.BizException; +import cc.smtweb.framework.core.exception.SwException; import cc.smtweb.framework.core.util.DateUtil; import cc.smtweb.framework.core.util.NumberUtil; +import cc.smtweb.framework.core.util.PubUtil; import cc.smtweb.framework.core.util.StringUtil; import org.apache.commons.lang3.StringUtils; @@ -24,6 +25,7 @@ import java.util.*; */ public class EntityHelper { private static Map mapFormatter; + static { mapFormatter = new HashMap<>(); mapFormatter.put(SwEnum.DataType.BOOL.value, value -> { @@ -44,6 +46,49 @@ public class EntityHelper { }); } + public static Object[] getFieldValueArgs(List fieldNames, DefaultEntity bean) { + Object[] args = new Object[fieldNames.size()]; + fillFieldValueArgs(fieldNames, bean, args); + return args; + } + + public static void fillFieldValueArgs(List fieldNames, DefaultEntity bean, Object[] args) { + ModelTable modelEntity = bean.getModelTable(); + if (modelEntity == null) return; + //获取实体类字段对象; + int i = 0; + for (String fieldName : fieldNames) { + String fname = fieldName.toLowerCase(); //转换为小写,因此在bean中定义的字段都是小写的; + Object v = bean.getData().get(fname); + String value = v != null ? v.toString() : ""; + final ModelField field = modelEntity.findField(fname); + if (field != null) { + if (PubUtil.isEmpty(value) && PubUtil.isNotEmpty(field.getDefaultValue())) { + value = field.getDefaultValue(); + } + args[i++] = SwEnum.DataType.getDataValue(field.getDataType(), value); + } else { + args[i++] = v; + } + } + } + + + public static String nameString(List fieldNameList, String separator, String afterLast) { + StringBuilder returnString = new StringBuilder(); + if (fieldNameList.size() < 1) { + return ""; + } + int i = 0; + for (; i < fieldNameList.size() - 1; i++) { + returnString.append(fieldNameList.get(i)); + returnString.append(separator); + } + returnString.append(fieldNameList.get(i)); + returnString.append(afterLast); + return returnString.toString(); + } + //获取字段别名 private static String getFieldAlias(Map mapFieldAlias, String field) { return (mapFieldAlias != null && mapFieldAlias.containsKey(field)) ? mapFieldAlias.get(field) : field; @@ -125,7 +170,7 @@ public class EntityHelper { ModelTable table = ModelTableCache.getInstance().getByName(tableName); if (table == null) return; loadBeanLink(table, listData, mapFieldAlias); - for (SwMap bean: listData) { + for (SwMap bean : listData) { setFieldDisplayText(table, bean, mapFieldAlias); } } @@ -271,6 +316,7 @@ public class EntityHelper { /** * bean是否为空 + * * @param bean * @return */