diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/modules/system/service/dto/UserDeptRelation.java b/nladmin-system/nlsso-server/src/main/java/org/nl/modules/system/service/dto/UserDeptRelation.java new file mode 100644 index 0000000..49876a9 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/modules/system/service/dto/UserDeptRelation.java @@ -0,0 +1,13 @@ +package org.nl.modules.system.service.dto; + +import lombok.Data; + +/* + * @author ZZQ + * @Date 2022/11/29 6:28 下午 + */ +@Data +public class UserDeptRelation { + private Long user_id; + private Long dept_id; +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/modules/system/service/dto/UserDetail.java b/nladmin-system/nlsso-server/src/main/java/org/nl/modules/system/service/dto/UserDetail.java new file mode 100644 index 0000000..c1d07c8 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/modules/system/service/dto/UserDetail.java @@ -0,0 +1,88 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.modules.system.service.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; +import org.nl.modules.common.base.BaseEntity; +import org.nl.modules.system.domain.Dept; +import org.nl.modules.system.domain.Role; + +import javax.persistence.Column; +import javax.validation.constraints.NotBlank; +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + * @author Zheng Jie + * @date 2018-11-22 + */ +@Getter +@Setter +public class UserDetail extends BaseEntity implements Serializable { + + + private Long user_id; + + private List dept; + + private List role; + + @ApiModelProperty(value = "用户名称") + private String username; + + @NotBlank + @ApiModelProperty(value = "用户昵称") + private String nickName; + + @ApiModelProperty(value = "邮箱") + private String email; + + @ApiModelProperty(value = "电话号码") + private String phone; + + @ApiModelProperty(value = "用户性别") + private String gender; + + @ApiModelProperty(value = "头像真实名称",hidden = true) + private String avatar_name; + + @ApiModelProperty(value = "头像存储的路径", hidden = true) + private String avatar_path; + + @ApiModelProperty(value = "密码") + private String password; + + @ApiModelProperty(value = "是否为admin账号", hidden = true) + private Boolean isAdmin = false; + + @Column(name = "pwd_reset_time") + @ApiModelProperty(value = "最后修改密码的时间", hidden = true) + private Date pwd_reset_time; + @Column(name = "pwd_reset_time") + @ApiModelProperty(value = "最后修改密码的时间", hidden = true) + private Long pwd_reset_user_id; + + private String extperson_id; + + private String extuser_id; + + private Boolean is_used; + + +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/modules/tools/MapOf.java b/nladmin-system/nlsso-server/src/main/java/org/nl/modules/tools/MapOf.java new file mode 100644 index 0000000..c897364 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/modules/tools/MapOf.java @@ -0,0 +1,20 @@ +package org.nl.modules.tools; + + +import java.io.Serializable; +import java.util.HashMap; + +/* + * @author ZZQ + * @Date 2022/11/29 2:55 下午 + */ +public class MapOf implements Serializable { + + public static HashMap of(K... key){ + HashMap map = new HashMap<>(); + for (int i = 0; i < (key.length & ~1); i=i+2) { + map.put(key[i],key[i+1]); + } + return map; + } +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/sso/wql/SYS_DEPT.wql b/nladmin-system/nlsso-server/src/main/java/org/nl/sso/wql/SYS_DEPT.wql new file mode 100644 index 0000000..84e76dc --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/sso/wql/SYS_DEPT.wql @@ -0,0 +1,77 @@ +[交易说明] + 交易名: 部门模块 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.name TYPEAS s_string + 输入.code TYPEAS s_string + 输入.pid TYPEAS s_string + 输入.pidIsNull TYPEAS s_string + 输入.is_used TYPEAS s_string + 输入.startTime TYPEAS s_string + 输入.endTime TYPEAS s_string + + + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + PAGEQUERY + SELECT + * + FROM + sys_dept + WHERE 1=1 + OPTION 输入.pid <> "" + pid = 输入.id + ENDOPTION + OPTION 输入.name <> "" + name = 输入.name + ENDOPTION + OPTION 输入.code <> "" + code = 输入.code + ENDOPTION + OPTION 输入.pidIsNull <> "" + pid is null + ENDOPTION + OPTION 输入.startTime <> "" + sys_user.create_time >= 输入.startTime + ENDOPTION + OPTION 输入.endTime <> "" + sys_user.create_time <= 输入.endTime + ENDOPTION + order by dept_sort asc + ENDSELECT + ENDPAGEQUERY + ENDIF diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/sso/wql/SYS_MENU.wql b/nladmin-system/nlsso-server/src/main/java/org/nl/sso/wql/SYS_MENU.wql new file mode 100644 index 0000000..3c2758e --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/sso/wql/SYS_MENU.wql @@ -0,0 +1,71 @@ +[交易说明] + 交易名: 获取用户权限 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.user_id TYPEAS s_string + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + IF 输入.flag = "1" + QUERY + SELECT DISTINCT + permission + FROM + sys_menu + WHERE + menu_id IN + ( + SELECT + menu_id + FROM + sys_roles_menus + WHERE + role_id IN + ( + SELECT + role_id + FROM + sys_users_roles + WHERE + 1=1 + OPTION 输入.user_id <> "" + user_id = 输入.user_id + ENDOPTION + ) + ) + AND permission IS NOT NULL + AND permission != '' + ENDSELECT + ENDQUERY + ENDIF \ No newline at end of file diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/sso/wql/SYS_USER.wql b/nladmin-system/nlsso-server/src/main/java/org/nl/sso/wql/SYS_USER.wql new file mode 100644 index 0000000..4e8b04b --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/sso/wql/SYS_USER.wql @@ -0,0 +1,82 @@ +[交易说明] + 交易名: 用户模块 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.deptIds TYPEAS s_string + 输入.deptId TYPEAS s_string + 输入.id TYPEAS s_string + 输入.blurry TYPEAS s_string + 输入.is_used TYPEAS s_string + 输入.startTime TYPEAS s_string + 输入.endTime TYPEAS s_string + + + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + PAGEQUERY + SELECT + sys_user.*,GROUP_CONCAT(DISTINCT dept_id),GROUP_CONCAT(DISTINCT role_id) + FROM + sys_user + left join sys_user_dept on sys_user.user_id = sys_user_dept.user_id + left join sys_users_roles on sys_users_roles.user_id = sys_user.user_id + WHERE 1=1 + OPTION 输入.id <> "" + sys_user.id = 输入.id + ENDOPTION + OPTION 输入.deptIds <> "" + sys_user.dept_id in 输入.deptIds + ENDOPTION + OPTION 输入.blurry <> "" + (email like 输入.blurry or username like 输入.blurry or nickName like 输入.blurry) + ENDOPTION + OPTION 输入.is_used <> "" + sys_user.is_used = 输入.enabled + ENDOPTION + OPTION 输入.deptId <> "" + sys_user.dept_id = 输入.deptId + ENDOPTION + OPTION 输入.startTime <> "" + sys_user.create_time >= 输入.startTime + ENDOPTION + OPTION 输入.endTime <> "" + sys_user.create_time <= 输入.endTime + ENDOPTION + GROUP BY sys_user.user_id + ENDSELECT + ENDPAGEQUERY + ENDIF diff --git a/nladmin-system/user/src/main/java/org/nl/rest/SysUserController.java b/nladmin-system/user/src/main/java/org/nl/rest/SysUserController.java new file mode 100644 index 0000000..f1ac2fb --- /dev/null +++ b/nladmin-system/user/src/main/java/org/nl/rest/SysUserController.java @@ -0,0 +1,64 @@ + +package org.nl.rest; + + +import org.springframework.data.domain.Pageable; +import lombok.RequiredArgsConstructor; +import org.nl.modules.logging.annotation.Log; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import io.swagger.annotations.*; +import java.util.Map; +import lombok.extern.slf4j.Slf4j; + +/** +* @author zzq +* @date 2022-11-28 +**/ +@RestController +@RequiredArgsConstructor +@Api(tags = "userService管理") +@RequestMapping("/api/sysUser") +@Slf4j +public class SysUserController { + + private final SysUserService sysUserService; + + @GetMapping + @Log("查询userService") + @ApiOperation("查询userService") + //@SaCheckPermission("@el.check('sysUser:list')") + public ResponseEntity query(@RequestParam Map whereJson, Pageable page){ + return new ResponseEntity<>(sysUserService.queryAll(whereJson,page),HttpStatus.OK); + } + + @PostMapping + @Log("新增userService") + @ApiOperation("新增userService") + //@SaCheckPermission("@el.check('sysUser:add')") + public ResponseEntity create(@Validated @RequestBody SysUserDto dto){ + sysUserService.create(dto); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改userService") + @ApiOperation("修改userService") + //@SaCheckPermission("@el.check('sysUser:edit')") + public ResponseEntity update(@Validated @RequestBody SysUserDto dto){ + sysUserService.update(dto); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除userService") + @ApiOperation("删除userService") + //@SaCheckPermission("@el.check('sysUser:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Long[] ids) { + sysUserService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } +} diff --git a/nladmin-system/user/src/main/java/org/nl/service/SysUserService.java b/nladmin-system/user/src/main/java/org/nl/service/SysUserService.java new file mode 100644 index 0000000..f86dc6e --- /dev/null +++ b/nladmin-system/user/src/main/java/org/nl/service/SysUserService.java @@ -0,0 +1,64 @@ + +package org.nl.service; + +import org.springframework.data.domain.Pageable; +import java.util.Map; +import java.util.List; +import java.io.IOException; +import javax.servlet.http.HttpServletResponse; + +/** +* @description 服务接口 +* @author zzq +* @date 2022-11-28 +**/ +public interface SysUserService { + +/** +* 查询数据分页 +* @param whereJson 条件 +* @param page 分页参数 +* @return Map +*/ +Map queryAll(Map whereJson, Pageable page); + +/** +* 查询所有数据不分页 +* @param whereJson 条件参数 +* @return List + */ + List queryAll(Map whereJson); + + /** + * 根据ID查询 + * @param user_id ID + * @return SysUser + */ + SysUserDto findById(Long user_id); + + /** + * 根据编码查询 + * @param code code + * @return SysUser + */ + SysUserDto findByCode(String code); + + + /** + * 创建 + * @param dto / + */ + void create(SysUserDto dto); + + /** + * 编辑 + * @param dto / + */ + void update(SysUserDto dto); + + /** + * 多选删除 + * @param ids / + */ + void deleteAll(Long[] ids); + } diff --git a/nladmin-system/user/src/main/java/org/nl/service/dto/SysUserDto.java b/nladmin-system/user/src/main/java/org/nl/service/dto/SysUserDto.java new file mode 100644 index 0000000..29231dc --- /dev/null +++ b/nladmin-system/user/src/main/java/org/nl/service/dto/SysUserDto.java @@ -0,0 +1,65 @@ +package org.nl.service.dto; + +import lombok.Data; + import java.sql.Timestamp; +import java.io.Serializable; + +/** +* @description / +* @author zzq +* @date 2022-11-28 +**/ +@Data +public class SysUserDto implements Serializable { + + /** ID */ + private Long user_id; + + /** 部门名称 */ + private Long dept_id; + + /** 用户名 */ + private String username; + + /** 昵称 */ + private String nick_name; + + /** 性别 */ + private String gender; + + /** 手机号码 */ + private String phone; + + /** 邮箱 */ + private String email; + + /** 头像地址 */ + private String avatar_name; + + /** 头像真实路径 */ + private String avatar_path; + + /** 密码 */ + private String password; + + /** 是否为admin账号 */ + private Boolean is_admin; + + /** 状态:1启用、0禁用 */ + private Long enabled; + + /** 创建者 */ + private String create_by; + + /** 更新者 */ + private String update_by; + + /** 修改密码的时间 */ + private Timestamp pwd_reset_time; + + /** 创建日期 */ + private Timestamp create_time; + + /** 更新时间 */ + private Timestamp update_time; +} diff --git a/nladmin-system/user/src/main/java/org/nl/service/impl/SysUserServiceImpl.java b/nladmin-system/user/src/main/java/org/nl/service/impl/SysUserServiceImpl.java new file mode 100644 index 0000000..892f9a7 --- /dev/null +++ b/nladmin-system/user/src/main/java/org/nl/service/impl/SysUserServiceImpl.java @@ -0,0 +1,128 @@ + +package org.nl.service.impl; + + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import org.springframework.data.domain.Pageable; +import java.util.List; +import java.util.Map; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.nl.modules.common.utils.SecurityUtils; +import org.nl.modules.wql.core.bean.ResultBean; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.WqlUtil; +import lombok.extern.slf4j.Slf4j; +import cn.hutool.core.util.ObjectUtil; + +/** +* @description 服务实现 +* @author zzq +* @date 2022-11-28 +**/ +@Service +@RequiredArgsConstructor +@Slf4j +public class SysUserServiceImpl implements SysUserService { + +@Override +public Map queryAll(Map whereJson, Pageable page){ +WQLObject wo = WQLObject.getWQLObject("sys_user"); +ResultBean rb = wo.pagequery(WqlUtil.getHttpContext(page), "1=1", "update_time desc"); +final JSONObject json = rb.pageResult(); +return json; +} + +@Override +public List queryAll(Map whereJson){ + WQLObject wo = WQLObject.getWQLObject("sys_user"); + JSONArray arr = wo.query().getResultJSONArray(0); + if (ObjectUtil.isNotEmpty(arr)) return arr.toJavaList(SysUserDto.class); + return null; + } + + @Override + public SysUserDto findById(Long user_id) { + WQLObject wo = WQLObject.getWQLObject("sys_user"); + JSONObject json = wo.query("user_id = '" + user_id + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(json)){ + return json.toJavaObject( SysUserDto.class); + } + return null; + } + + @Override + public SysUserDto findByCode(String code) { + WQLObject wo = WQLObject.getWQLObject("sys_user"); + JSONObject json = wo.query("code ='" + code + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(json)){ + return json.toJavaObject( SysUserDto.class); + } + return null; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(SysUserDto dto) { + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + dto.setUser_id(IdUtil.getSnowflake(1, 1).nextId()); + dto.setCreate_id(currentUserId); + dto.setCreate_name(nickName); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + dto.setUpdate_time(now); + dto.setCreate_time(now); + + WQLObject wo = WQLObject.getWQLObject("sys_user"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.insert(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(SysUserDto dto) { + SysUserDto entity = this.findById(dto.getUser_id()); + if (entity == null) throw new BadRequestException("被删除或无权限,操作失败!"); + + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + + String now = DateUtil.now(); + dto.setUpdate_time(now); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + + WQLObject wo = WQLObject.getWQLObject("sys_user"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.update(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteAll(Long[] ids) { + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + WQLObject wo = WQLObject.getWQLObject("sys_user"); + for (Long user_id: ids) { + JSONObject param = new JSONObject(); + param.put("user_id", String.valueOf(user_id)); + param.put("is_delete", "1"); + param.put("update_optid", currentUserId); + param.put("update_optname", nickName); + param.put("update_time", now); + wo.update(param); + } + } + + }