代码提交

master
Xusan 2024-05-13 14:55:42 +08:00
parent 03c54e4cc5
commit 9dca0dd6a3
32 changed files with 621 additions and 84 deletions

View File

@ -1,4 +1,4 @@
# 歧义数据管理api
# 防汛抗旱通讯录api
## 目录
```

12
pom.xml
View File

@ -186,6 +186,18 @@
</dependency>
<!-- joda-time end -->
<!-- Sa-Token 权限认证, 在线文档http://sa-token.dev33.cn/ -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-spring-boot-starter</artifactId>
<version>1.30.0</version>
</dependency><!-- Sa-Token 整合 Redis (使用 jackson 序列化方式) -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-dao-redis-jackson</artifactId>
<version>1.30.0</version>
</dependency>
</dependencies>

View File

@ -11,7 +11,6 @@ CREATE TABLE "FXKH_TXL"."ADDRESS_BOOK"
"URL" VARCHAR(200),
"SORT" INTEGER DEFAULT 0,
"V" INTEGER DEFAULT 0,
"ROLE" CHAR(1) DEFAULT 0,
NOT CLUSTER PRIMARY KEY("ID")) STORAGE(ON "MAIN", CLUSTERBTR) ;
COMMENT ON TABLE "FXKH_TXL"."ADDRESS_BOOK" IS '通讯录';
@ -21,7 +20,6 @@ COMMENT ON COLUMN "FXKH_TXL"."ADDRESS_BOOK"."NAME" IS '姓名';
COMMENT ON COLUMN "FXKH_TXL"."ADDRESS_BOOK"."ORGANIZATION" IS '组织';
COMMENT ON COLUMN "FXKH_TXL"."ADDRESS_BOOK"."PHONE" IS '手机号';
COMMENT ON COLUMN "FXKH_TXL"."ADDRESS_BOOK"."POSITION" IS '职务';
COMMENT ON COLUMN "FXKH_TXL"."ADDRESS_BOOK"."ROLE" IS '0:普通管理员,1:政区管理员,99:系统管理员';
COMMENT ON COLUMN "FXKH_TXL"."ADDRESS_BOOK"."SORT" IS '序号';
COMMENT ON COLUMN "FXKH_TXL"."ADDRESS_BOOK"."TEL" IS '电话';
COMMENT ON COLUMN "FXKH_TXL"."ADDRESS_BOOK"."URL" IS '图片路径';
@ -44,13 +42,13 @@ CREATE TABLE "FXKH_TXL"."UNIT_DICT"
"ID" INTEGER IDENTITY(1, 1) NOT NULL,
"NAME" VARCHAR(50) NOT NULL,
"SORT" INTEGER DEFAULT 0 NOT NULL,
"TYPE" CHAR(1) NOT NULL,
"O_ID" INTEGER NOT NULL,
NOT CLUSTER PRIMARY KEY("ID")) STORAGE(ON "MAIN", CLUSTERBTR) ;
COMMENT ON TABLE "FXKH_TXL"."UNIT_DICT" IS '单位字典表';
COMMENT ON COLUMN "FXKH_TXL"."UNIT_DICT"."NAME" IS '名称';
COMMENT ON COLUMN "FXKH_TXL"."UNIT_DICT"."SORT" IS '序号';
COMMENT ON COLUMN "FXKH_TXL"."UNIT_DICT"."TYPE" IS '1:联络名单, 2: 湖泊及涉湖泵站,3:重要提防,4:大型水库大坝';
COMMENT ON COLUMN "FXKH_TXL"."UNIT_DICT"."O_ID" IS '组织类型Id';
CREATE TABLE "FXKH_TXL"."FC"
@ -90,11 +88,9 @@ CREATE TABLE "FXKH_TXL"."ORGANIZATION"
"OBJ_ID" VARCHAR(50) NOT NULL,
"NAME" VARCHAR(50) NOT NULL,
"SORT" INTEGER DEFAULT 0,
"ADCD" CHAR(15) NOT NULL,
NOT CLUSTER PRIMARY KEY("ID")) STORAGE(ON "MAIN", CLUSTERBTR) ;
COMMENT ON TABLE "FXKH_TXL"."ORGANIZATION" IS '组织表';
COMMENT ON COLUMN "FXKH_TXL"."ORGANIZATION"."ADCD" IS '政区编码';
COMMENT ON COLUMN "FXKH_TXL"."ORGANIZATION"."NAME" IS '名称';
COMMENT ON COLUMN "FXKH_TXL"."ORGANIZATION"."OBJ_ID" IS '编号';
COMMENT ON COLUMN "FXKH_TXL"."ORGANIZATION"."SORT" IS '序号';
@ -103,14 +99,20 @@ COMMENT ON COLUMN "FXKH_TXL"."ORGANIZATION"."SORT" IS '序号';
CREATE TABLE "FXKH_TXL"."USER"
(
"ID" INTEGER IDENTITY(1, 1) NOT NULL,
"USERNAME" VARCHAR(50) NOT NULL,
"PASSWORD" VARCHAR(50) NOT NULL,
"SALT" VARCHAR(50),
"ROLE" CHAR(1) DEFAULT 0,
"AB_ID" INTEGER,
"LAST_DATE" DATETIME(0),
NOT CLUSTER PRIMARY KEY("ID")) STORAGE(ON "MAIN", CLUSTERBTR) ;
COMMENT ON TABLE "FXKH_TXL"."USER" IS '用户表';
COMMENT ON COLUMN "FXKH_TXL"."USER"."AB_ID" IS '通讯录id';
COMMENT ON COLUMN "FXKH_TXL"."USER"."USERNAME" IS '用户名';
COMMENT ON COLUMN "FXKH_TXL"."USER"."ROLE" IS '0:普通管理员,1:政区管理员,99:系统管理员';
COMMENT ON COLUMN "FXKH_TXL"."USER"."PASSWORD" IS '密码';
COMMENT ON COLUMN "FXKH_TXL"."USER"."LAST_DATE" IS '最后登录时间';
COMMENT ON COLUMN "FXKH_TXL"."USER"."SALT" IS '盐值';

View File

@ -1,12 +1,16 @@
package com.whdc.controller;
import cn.dev33.satoken.stp.StpUtil;
import com.whdc.model.dto.AddressBootDto;
import com.whdc.model.entity.AddressBook;
import com.whdc.model.entity.User;
import com.whdc.model.enums.Role;
import com.whdc.model.enums.VersionsType;
import com.whdc.model.group.Insert;
import com.whdc.model.group.Update;
import com.whdc.service.IAddressBookService;
import com.whdc.service.IUserService;
import com.whdc.service.IVersionsService;
import com.whdc.utils.ResultJson;
import io.swagger.annotations.Api;
@ -32,6 +36,9 @@ public class AddressBookController {
@Autowired
private IAddressBookService service;
@Autowired
private IUserService userService;
@Autowired
private IVersionsService versionsService;
@ -57,6 +64,15 @@ public class AddressBookController {
@ApiOperation(value = "添加")
@PostMapping(value = "save")
public ResultJson insert(@RequestBody @Validated(Insert.class) AddressBook model) {
Integer loginId = (Integer) StpUtil.getLoginId();
String role = userService.getRole(loginId);
switch (Objects.requireNonNull(Role.getByName(role))) {
case R000:return ResultJson.error("权限不足");
case R001:
case R099:break;
default:return ResultJson.error("权限不足!!");
}
if (CollectionUtils.isNotEmpty(
service.lambdaQuery()
@ -68,9 +84,14 @@ public class AddressBookController {
// 添加日志
versionsService.saveInfo(model,VersionsType.ADD);
// versionsService.save(new Versions(null, JSON.toJSONString(model),model.getId(),null,model.getCreateId(),new Date(), VersionsType.ADD.getName()));
return ResultJson.ok(service.save(model));
boolean save = service.save(model);
if (save){
userService.register( model.getPhone(), model.getId());
}
return ResultJson.ok(save);
}
@ -78,6 +99,22 @@ public class AddressBookController {
@PostMapping(value = "edit")
public ResultJson update(@RequestBody @Validated(Update.class) AddressBook model) {
Integer loginId = (Integer) StpUtil.getLoginId();
String role = userService.getRole(loginId);
switch (Objects.requireNonNull(Role.getByName(role))) {
case R000:{
// 不是修改自己
if (!model.getId().equals(loginId)){
return ResultJson.error("权限不足");
}
};
case R001:
case R099:break;
default:return ResultJson.error("权限不足!!");
}
AddressBook byId = service.getById(model.getId());
if (Objects.isNull(byId)){
return ResultJson.error("当前数据不存在");
@ -108,16 +145,25 @@ public class AddressBookController {
// versionsService.save(new Versions(null, JSON.toJSONString(model),model.getId(),++version,model.getCreateId(),new Date(), VersionsType.UPDATE.getName()));
versionsService.saveInfo(model,VersionsType.UPDATE);
// 不修改角色
model.setRole(byId.getRole());
return ResultJson.ok(service.updateById(model));
}
@ApiOperation(value = "修改权限")
@PostMapping(value = "edit")
public ResultJson updateRole(@RequestBody @Validated(Update.class) AddressBook model) {
public ResultJson updateRole(@RequestBody @Validated(Update.class) User model) {
AddressBook byId = service.getById(model.getId());
Integer loginId = (Integer) StpUtil.getLoginId();
String role = userService.getRole(loginId);
switch (Objects.requireNonNull(Role.getByName(role))) {
case R000:
case R001: return ResultJson.error("权限不足");
case R099:break;
default:return ResultJson.error("权限不足!!");
}
AddressBook byId = service.getById(model.getAbId());
if (Objects.isNull(byId)){
return ResultJson.error("当前数据不存在");
}
@ -137,12 +183,13 @@ public class AddressBookController {
// }
// // 添加日志
// versionsService.save(new Versions(null, JSON.toJSONString(model),model.getId(),++version,model.getCreateId(),new Date(), VersionsType.UPDATE_ROLE.getName()));
versionsService.saveInfo(model,VersionsType.UPDATE_ROLE);
versionsService.saveInfo(byId,VersionsType.UPDATE_ROLE);
// 只修改角色
boolean update = service.lambdaUpdate().set(AddressBook::getRole, model.getRole())
.eq(AddressBook::getId, model.getId())
boolean update = userService.lambdaUpdate().set(User::getRole, model.getRole())
.eq(User::getAbId, model.getAbId())
.update();
return ResultJson.ok(update);
}
@ -153,6 +200,16 @@ public class AddressBookController {
public ResultJson delete(@PathVariable("id") Integer id) {
Integer loginId = (Integer) StpUtil.getLoginId();
String role = userService.getRole(loginId);
switch (Objects.requireNonNull(Role.getByName(role))) {
case R000:
case R001: return ResultJson.error("权限不足");
case R099:break;
default:return ResultJson.error("权限不足!!");
}
AddressBook model = service.getById(id);
if (Objects.isNull(model)) {

View File

@ -1,9 +1,12 @@
package com.whdc.controller;
import com.whdc.model.dto.FcDto;
import com.whdc.model.entity.Fc;
import com.whdc.model.group.Find;
import com.whdc.model.group.Insert;
import com.whdc.model.group.Update;
import com.whdc.model.vo.FcVo;
import com.whdc.service.IFcService;
import com.whdc.utils.ResultJson;
import io.swagger.annotations.Api;
@ -31,8 +34,8 @@ public class FcController {
@ApiOperation(value = "查询所有")
@PostMapping(value = "find")
// @ApiOperation(value = "查询所有")
// @PostMapping(value = "find")
public ResultJson<Fc> find(@RequestBody Fc dto) {
return ResultJson.ok(service.find(dto));
@ -41,7 +44,7 @@ public class FcController {
@ApiOperation(value = "分页查询")
@PostMapping(value = "page")
public ResultJson<Fc> page(@RequestBody Fc dto) {
public ResultJson<FcVo> page(@RequestBody @Validated(Find.class) FcDto dto) {
return ResultJson.ok(service.page(dto));
@ -54,7 +57,8 @@ public class FcController {
if (CollectionUtils.isNotEmpty(
service.lambdaQuery()
.eq(Fc::getName,String.valueOf(model.getName()).trim())
.eq(Fc::getUserId,String.valueOf(model.getUserId()).trim())
.eq(Fc::getAbId,String.valueOf(model.getAbId()).trim())
.list())
){
return ResultJson.error("该名称重复");
@ -70,7 +74,8 @@ public class FcController {
if (CollectionUtils.isNotEmpty(
service.lambdaQuery()
.eq(Fc::getName,String.valueOf(model.getName()).trim())
.eq(Fc::getUserId,String.valueOf(model.getUserId()).trim())
.eq(Fc::getAbId,String.valueOf(model.getAbId()).trim())
.ne(Fc::getId, model.getId())
.list())
){

View File

@ -1,6 +1,7 @@
package com.whdc.controller;
import com.whdc.model.dto.FindPageDto;
import com.whdc.model.entity.LoginInfo;
import com.whdc.model.group.Insert;
import com.whdc.model.group.Update;
@ -14,6 +15,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.Date;
import java.util.Objects;
/**
@ -41,7 +43,7 @@ public class LoginInfoController {
@ApiOperation(value = "分页查询")
@PostMapping(value = "page")
public ResultJson<LoginInfo> page(@RequestBody LoginInfo dto) {
public ResultJson<LoginInfo> page(@RequestBody FindPageDto dto) {
return ResultJson.ok(service.page(dto));
@ -51,38 +53,21 @@ public class LoginInfoController {
@ApiOperation(value = "添加")
@PostMapping(value = "save")
public ResultJson insert(@RequestBody @Validated(Insert.class) LoginInfo model) {
if (CollectionUtils.isNotEmpty(
service.lambdaQuery()
.eq(LoginInfo::getName,String.valueOf(model.getName()).trim())
.list())
){
return ResultJson.error("该名称重复");
}
model.setCreateTime(new Date());
return ResultJson.ok(service.save(model));
}
@ApiOperation(value = "修改")
@PostMapping(value = "edit")
// @ApiOperation(value = "修改")
// @PostMapping(value = "edit")
public ResultJson update(@RequestBody @Validated(Update.class) LoginInfo model) {
if (CollectionUtils.isNotEmpty(
service.lambdaQuery()
.eq(LoginInfo::getName,String.valueOf(model.getName()).trim())
.ne(LoginInfo::getId, model.getId())
.list())
){
return ResultJson.error("该名称重复");
}
return ResultJson.ok(service.updateById(model));
}
@ApiOperation(value = "删除")
@GetMapping(value = "del/{id}")
// @ApiOperation(value = "删除")
// @GetMapping(value = "del/{id}")
public ResultJson delete(@PathVariable("id") Integer id) {

View File

@ -1,6 +1,7 @@
package com.whdc.controller;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.whdc.model.entity.Organization;
import com.whdc.model.group.Insert;
import com.whdc.model.group.Update;
@ -10,6 +11,7 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@ -35,7 +37,18 @@ public class OrganizationController {
@PostMapping(value = "find")
public ResultJson<Organization> find(@RequestBody Organization dto) {
return ResultJson.ok(service.find(dto));
LambdaQueryChainWrapper<Organization> query = service.lambdaQuery();
String name = dto.getName();
if (StringUtils.isNotBlank(name)){
query.like(Organization::getName,name);
}
String objId = dto.getObjId();
if (StringUtils.isNotBlank(objId)){
query.eq(Organization::getObjId,objId);
}
query.orderByAsc(Organization::getSort);
return ResultJson.ok(query.list());
}

View File

@ -1,15 +1,20 @@
package com.whdc.controller;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.whdc.model.entity.Organization;
import com.whdc.model.entity.UnitDict;
import com.whdc.model.group.Find;
import com.whdc.model.group.Insert;
import com.whdc.model.group.Update;
import com.whdc.service.IOrganizationService;
import com.whdc.service.IUnitDictService;
import com.whdc.utils.ResultJson;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@ -28,19 +33,34 @@ public class UnitDictController {
@Autowired
private IUnitDictService service;
@Autowired
private IOrganizationService organizationService;
@ApiOperation(value = "查询所有")
@PostMapping(value = "find")
public ResultJson<UnitDict> find(@RequestBody UnitDict dto) {
public ResultJson<UnitDict> find(@RequestBody @Validated(Find.class) UnitDict dto) {
if (Objects.isNull(organizationService.getById( dto.getOId()))) {
return ResultJson.error("组织类型Id不存在");
}
LambdaQueryChainWrapper<UnitDict> query = service.lambdaQuery();
String name = dto.getName();
if (StringUtils.isNotBlank(name)) {
query.like(UnitDict::getName, name);
}
query.eq(UnitDict::getOId, dto.getOId());
query.orderByAsc(UnitDict::getSort);
return ResultJson.ok(query.list());
return ResultJson.ok(service.find(dto));
}
@ApiOperation(value = "分页查询")
@PostMapping(value = "page")
// @ApiOperation(value = "分页查询")
// @PostMapping(value = "page")
public ResultJson<UnitDict> page(@RequestBody UnitDict dto) {
return ResultJson.ok(service.page(dto));
@ -52,11 +72,16 @@ public class UnitDictController {
@PostMapping(value = "save")
public ResultJson insert(@RequestBody @Validated(Insert.class) UnitDict model) {
if (Objects.isNull(organizationService.getById( model.getOId()))) {
return ResultJson.error("组织类型Id不存在");
}
if (CollectionUtils.isNotEmpty(
service.lambdaQuery()
.eq(UnitDict::getName,String.valueOf(model.getName()).trim())
.eq(UnitDict::getName, String.valueOf(model.getName()).trim())
.eq(UnitDict::getOId, String.valueOf(model.getOId()).trim())
.list())
){
) {
return ResultJson.error("该名称重复");
}
@ -68,12 +93,18 @@ public class UnitDictController {
@PostMapping(value = "edit")
public ResultJson update(@RequestBody @Validated(Update.class) UnitDict model) {
if (Objects.isNull(organizationService.getById( model.getOId()))) {
return ResultJson.error("组织类型Id不存在");
}
if (CollectionUtils.isNotEmpty(
service.lambdaQuery()
.eq(UnitDict::getName,String.valueOf(model.getName()).trim())
.eq(UnitDict::getName, String.valueOf(model.getName()).trim())
.eq(UnitDict::getOId, String.valueOf(model.getOId()).trim())
.ne(UnitDict::getId, model.getId())
.list())
){
) {
return ResultJson.error("该名称重复");
}

View File

@ -1,9 +1,13 @@
package com.whdc.controller;
import cn.dev33.satoken.stp.StpUtil;
import com.whdc.model.dto.LoginDto;
import com.whdc.model.entity.User;
import com.whdc.model.group.Insert;
import com.whdc.model.group.Update;
import com.whdc.model.vo.AuthToken;
import com.whdc.model.vo.LoginVo;
import com.whdc.service.IUserService;
import com.whdc.utils.ResultJson;
import io.swagger.annotations.Api;
@ -14,6 +18,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.lang.reflect.InvocationTargetException;
import java.util.Date;
import java.util.Objects;
/**
@ -30,7 +36,37 @@ public class UserController {
private IUserService service;
@ApiOperation(value = "登录", notes = "登录后,从 tokenInfo 中获取 token 相关信息。headers[tokenName] = tokenValue ")
@PostMapping("doLogin")
public ResultJson<LoginVo> doLogin(@RequestBody @Validated LoginDto obj) throws InvocationTargetException, IllegalAccessException {
LoginVo loginVo = service.login(obj);
if (loginVo == null || loginVo.getId() == null) {
return ResultJson.error("登录失败");
} else {
StpUtil.login(loginVo.getId()); // 使用 user id 登录
// 获取 Token 相关参数
loginVo.setTokenInfo(new AuthToken(StpUtil.getTokenInfo()));
// 更新最后登录时间
service.updateLastDate(loginVo.getId());
return ResultJson.ok(loginVo);
}
}
@ApiOperation(value = "查询登录状态")
@PostMapping("isLogin")
public ResultJson<AuthToken> isLogin() {
return ResultJson.ok(StpUtil.getTokenInfo());
}
@ApiOperation(value = "按id踢人下线")
@PostMapping("kickout/{id}")
public ResultJson kickout(@PathVariable String id) {
StpUtil.kickout(id);
return ResultJson.ok("将用户[" + id + "]踢下线");
}
@ApiOperation(value = "查询所有")
@PostMapping(value = "find")
public ResultJson<User> find(@RequestBody User dto) {
@ -48,19 +84,21 @@ public class UserController {
}
@ApiOperation(value = "添加")
@PostMapping(value = "save")
// @ApiOperation(value = "注册")
// @PostMapping(value = "register")
public ResultJson insert(@RequestBody @Validated(Insert.class) User model) {
if (CollectionUtils.isNotEmpty(
service.lambdaQuery()
.eq(User::getName,String.valueOf(model.getName()).trim())
.eq(User::getUsername,String.valueOf(model.getUsername()).trim())
.list())
){
return ResultJson.error("该名称重复");
}
return ResultJson.ok(service.save(model));
return ResultJson.ok(service.register(model));
}
@ -70,7 +108,7 @@ public class UserController {
if (CollectionUtils.isNotEmpty(
service.lambdaQuery()
.eq(User::getName,String.valueOf(model.getName()).trim())
.eq(User::getUsername,String.valueOf(model.getUsername()).trim())
.ne(User::getId, model.getId())
.list())
){

View File

@ -2,6 +2,8 @@ package com.whdc.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.whdc.model.dto.FcDto;
import com.whdc.model.vo.FcVo;
import org.apache.ibatis.annotations.Param;
import com.whdc.model.entity.Fc;
@ -13,7 +15,7 @@ import java.util.List;
*/
public interface FcMapper extends BaseMapper<Fc> {
IPage<Fc> page(@Param("page") IPage<Fc> page, @Param("dto") Fc dto);
IPage<FcVo> page(@Param("page") IPage<FcVo> page, @Param("dto") FcDto dto);
List<Fc> find(@Param("dto") Fc dto);

View File

@ -2,6 +2,7 @@ package com.whdc.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.whdc.model.dto.FindPageDto;
import org.apache.ibatis.annotations.Param;
import com.whdc.model.entity.LoginInfo;
@ -13,7 +14,7 @@ import java.util.List;
*/
public interface LoginInfoMapper extends BaseMapper<LoginInfo> {
IPage<LoginInfo> page(@Param("page") IPage<LoginInfo> page, @Param("dto") LoginInfo dto);
IPage<LoginInfo> page(@Param("page") IPage<LoginInfo> page, @Param("dto") FindPageDto dto);
List<LoginInfo> find(@Param("dto") LoginInfo dto);

View File

@ -2,6 +2,7 @@ package com.whdc.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.whdc.model.vo.LoginVo;
import org.apache.ibatis.annotations.Param;
import com.whdc.model.entity.User;
@ -17,4 +18,6 @@ public interface UserMapper extends BaseMapper<User> {
List<User> find(@Param("dto") User dto);
LoginVo findByLoginName(@Param("username") String username);
}

View File

@ -0,0 +1,31 @@
package com.whdc.model.dto;
import com.whdc.model.group.Find;
import com.whdc.model.group.Insert;
import com.whdc.model.group.Update;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
* @author xusan
* @date 202332008:57:22
*/
@Data
public class FcDto extends FindPageDto {
@ApiModelProperty(value = "用户id")
@NotNull(message = "用户id不能为空", groups = {Find.class})
private String userId;
@ApiModelProperty(value = "类型 0:常用联系人,1:置顶联系人")
@NotNull(message = "类型不能为空", groups = {Find.class})
private String type;
@ApiModelProperty(value = "联系人名称")
private String name;
@ApiModelProperty(value = "联系人手机号")
private String phone;
}

View File

@ -0,0 +1,21 @@
package com.whdc.model.dto;
import io.swagger.annotations.ApiParam;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
/**
* @author
* @date 2022-07-01 1:21
*/
@Data
public class LoginDto {
@ApiParam(value = "登录名")
@NotEmpty(message = "登录名不能为空")
private String loginName;
@ApiParam(value = "密码")
@NotEmpty(message = "密码不能为空")
private String password;
}

View File

@ -77,10 +77,6 @@ public class AddressBook extends Model<AddressBook> implements Serializable {
@ApiModelProperty(value = "版本")
private Integer v;
@TableField("ROLE")
@ApiModelProperty(value = "0:普通管理员,1:政区管理员,99:系统管理员")
private String role;
@TableField(exist = false)
@ApiModelProperty(value = "创建人id")
private String createId;

View File

@ -40,6 +40,7 @@ public class LoginInfo extends Model<LoginInfo> implements Serializable {
@TableField("CREATE_ID")
@ApiModelProperty(value = "新增人id")
@NotNull(message = "id不能为空" , groups = {Insert.class})
private String createId;
@TableField("CREATE_TIME")

View File

@ -50,8 +50,4 @@ public class Organization extends Model<Organization> implements Serializable {
@ApiModelProperty(value = "序号")
private Integer sort;
@NotEmpty(message = "政区编码不能为空", groups = {Insert.class,Update.class})
@TableField("ADCD")
@ApiModelProperty(value = "政区编码")
private String adcd;
}

View File

@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.whdc.model.group.Find;
import com.whdc.model.group.Insert;
import com.whdc.model.group.Update;
import io.swagger.annotations.ApiModel;
@ -46,8 +47,9 @@ public class UnitDict extends Model<UnitDict> implements Serializable {
@ApiModelProperty(value = "序号")
private Integer sort;
@NotEmpty(message = "类型不能为空", groups = {Insert.class,Update.class})
@TableField("TYPE")
@ApiModelProperty(value = "1:省防指,2: 省防办,3: 省防指成员单位,4: 市、县防指、防办, 5: 主要湖泊及涉湖泵站,6:重要提防,7: 主要蓄滞洪区,8: 大型水库大坝")
private String type;
@NotEmpty(message = "组织类型Id不能为空", groups = {Insert.class,Update.class, Find.class})
@TableField("O_ID")
// @ApiModelProperty(value = "1:省防指,2: 省防办,3: 省防指成员单位,4: 市、县防指、防办, 5: 主要湖泊及涉湖泵站,6:重要提防,7: 主要蓄滞洪区,8: 大型水库大坝")
@ApiModelProperty(value = "组织类型Id")
private Integer OId;
}

View File

@ -30,9 +30,14 @@ public class User extends Model<User> implements Serializable {
@TableId(value = "ID",type = IdType.AUTO)
@ApiModelProperty(value = "id")
@NotNull(message = "id不能为空" , groups = {Update.class})
// @NotNull(message = "id不能为空" , groups = {Update.class})
private Integer id;
@NotEmpty(message = "用户名不能为空", groups = {Insert.class,Update.class})
@TableField("USERNAME")
@ApiModelProperty(value = "用户名")
private String username;
@NotEmpty(message = "密码不能为空", groups = {Insert.class,Update.class})
@TableField("PASSWORD")
@ -45,5 +50,15 @@ public class User extends Model<User> implements Serializable {
@TableField("AB_ID")
@ApiModelProperty(value = "通讯录id")
@NotEmpty(message = "通讯录id不能为空", groups = {Insert.class,Update.class})
private Integer abId;
@TableField("LAST_DATE")
@ApiModelProperty(value = "最后登录时间")
private Date lastLoginDate;
@TableField("ROLE")
@ApiModelProperty(value = "0:普通管理员,1:政区管理员,99:系统管理员")
private String role;
}

View File

@ -0,0 +1,72 @@
package com.whdc.model.enums;
import org.apache.commons.lang3.StringUtils;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
/**
* @author xusan
* @date 2022/7/14 16:55
*
*/
public enum Role {
R000("0", "普通管理员"),
R001("1", "政区管理员"),
R099("99", "系统管理员");
private String name;
private String value;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
private Role(String name, String value) {
this.name = name;
this.value = value;
}
public static Map<String, Role> map() {
Map<String, Role> map = new HashMap<>();
Role[] values = Role.values();
for (Role e : values) {
map.put(e.getValue(), e);
}
return map;
}
public static Map<String, Role> mapName() {
Map<String, Role> map = new HashMap<>();
Role[] values = Role.values();
for (Role e : values) {
map.put(e.getName(), e);
}
return map;
}
public static Role getByValue(String value) {
if (Objects.isNull(value)) return null;
return map().get(value);
}
public static Role getByName(String name) {
if (StringUtils.isEmpty(name)) return null;
return mapName().get(name);
}
}

View File

@ -0,0 +1,44 @@
package com.whdc.model.vo;
import cn.dev33.satoken.stp.SaTokenInfo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.apache.commons.beanutils.BeanUtils;
import java.lang.reflect.InvocationTargetException;
/**
* SaTokenInfo swagger
*
* @author
* @date 2022-07-18 8:10
* {
* "tokenName": "satoken", // token名称
* "tokenValue": "e67b99f1-3d7a-4a8d-bb2f-e888a0805633", // token值
* "isLogin": true, // 此token是否已经登录
* "loginId": "10001", // 此token对应的LoginId未登录时为null
* "loginType": "login", // 账号类型标识
* "tokenTimeout": 2591977, // token剩余有效期 (单位: 秒)
* "sessionTimeout": 2591977, // User-Session剩余有效时间 (单位: 秒)
* "tokenSessionTimeout": -2, // Token-Session剩余有效时间 (单位: 秒)
* "tokenActivityTimeout": -1, // token剩余无操作有效时间 (单位: 秒)
* "loginDevice": "default-device" // 登录设备类型
* }
*/
@Data
@ApiModel("授权 token 信息")
public class AuthToken extends SaTokenInfo {
@ApiModelProperty("token 名称")
public String tokenName;
@ApiModelProperty("token 值")
public String tokenValue;
@ApiModelProperty("token 剩余有效期 (单位: 秒)")
public long tokenTimeout;
public AuthToken(SaTokenInfo info) throws InvocationTargetException, IllegalAccessException {
BeanUtils.copyProperties(this, info);
}
}

View File

@ -0,0 +1,26 @@
package com.whdc.model.vo;
import com.baomidou.mybatisplus.annotation.TableField;
import com.whdc.model.entity.AddressBook;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* @Author xusan
* @Date 2024/5/13 10:17
* @Notes
**/
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@ApiModel(description = "常用联系人置顶联系人通讯录")
public class FcVo extends AddressBook{
@TableField("FSORT")
@ApiModelProperty(value = "常用联系人置顶联系人序号")
private Integer fsort;
}

View File

@ -0,0 +1,39 @@
package com.whdc.model.vo;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.List;
/**
* @author
* @date 2022-07-01 1:22
*/
@Data
@Accessors(chain = true) // chain = true 实现链式调用
@JsonInclude(JsonInclude.Include.NON_NULL) // 表示序列化非null属性
public class LoginVo implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "主键ID")
private Integer id;
@ApiModelProperty(value = "类型")
private Integer type;
@ApiModelProperty(value = "登录名")
private String loginName;
@ApiModelProperty(value = "姓名")
private String name;
@ApiModelProperty(value = "token 信息")
private AuthToken tokenInfo;
@ApiModelProperty(value = "角色")
private String role;
}

View File

@ -2,7 +2,9 @@ package com.whdc.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.whdc.model.dto.FcDto;
import com.whdc.model.entity.Fc;
import com.whdc.model.vo.FcVo;
import java.util.List;
@ -16,7 +18,7 @@ import java.util.List;
public interface IFcService extends IService<Fc> {
// 获取所有规则分页
IPage<Fc> page(Fc dto);
IPage<FcVo> page(FcDto dto);
// 获取所有规则
List<Fc> find(Fc dto);

View File

@ -2,6 +2,7 @@ package com.whdc.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.whdc.model.dto.FindPageDto;
import com.whdc.model.entity.LoginInfo;
import java.util.List;
@ -16,7 +17,7 @@ import java.util.List;
public interface ILoginInfoService extends IService<LoginInfo> {
// 获取所有规则分页
IPage<LoginInfo> page(LoginInfo dto);
IPage<LoginInfo> page(FindPageDto dto);
// 获取所有规则
List<LoginInfo> find(LoginInfo dto);

View File

@ -2,7 +2,11 @@ package com.whdc.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
import com.whdc.model.dto.LoginDto;
import com.whdc.model.entity.User;
import com.whdc.model.vo.LoginVo;
import org.apache.poi.ss.formula.functions.T;
import java.util.List;
@ -21,4 +25,14 @@ public interface IUserService extends IService<User> {
// 获取所有规则
List<User> find(User dto);
LoginVo login(LoginDto obj);
boolean register(User entity);
String getRole(Integer id);
boolean register(String phone, Integer abId);
boolean updateLastDate(Integer id);
}

View File

@ -1,8 +1,11 @@
package com.whdc.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.whdc.mapper.FcMapper;
import com.whdc.model.dto.FcDto;
import com.whdc.model.entity.Fc;
import com.whdc.model.vo.FcVo;
import com.whdc.service.IFcService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@ -21,8 +24,8 @@ public class FcServiceImpl extends ServiceImpl<FcMapper, Fc> implements IFcServi
@Override
public IPage<Fc> page(Fc dto) {
return baseMapper.page(new Page<>(), dto);
public IPage<FcVo> page(FcDto dto) {
return baseMapper.page(dto.getPage(), dto);
}

View File

@ -2,6 +2,7 @@ package com.whdc.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.whdc.mapper.LoginInfoMapper;
import com.whdc.model.dto.FindPageDto;
import com.whdc.model.entity.LoginInfo;
import com.whdc.service.ILoginInfoService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -21,8 +22,8 @@ public class LoginInfoServiceImpl extends ServiceImpl<LoginInfoMapper, LoginInfo
@Override
public IPage<LoginInfo> page(LoginInfo dto) {
return baseMapper.page(new Page<>(), dto);
public IPage<LoginInfo> page(FindPageDto dto) {
return baseMapper.page(dto.getPage(), dto);
}

View File

@ -1,13 +1,22 @@
package com.whdc.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.whdc.exception.MyException;
import com.whdc.mapper.UserMapper;
import com.whdc.model.dto.LoginDto;
import com.whdc.model.entity.User;
import com.whdc.model.vo.LoginVo;
import com.whdc.service.IUserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;
import java.util.Date;
import java.util.List;
import java.util.UUID;
/**
* <p>
@ -19,6 +28,7 @@ import java.util.List;
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
public static final String DEFAULT_PASSWORD = "Fxhk@123456";
@Override
public IPage<User> page(User dto) {
@ -33,4 +43,72 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
@Override
public LoginVo login(LoginDto obj) {
User sysUser = findByLoginName(obj.getLoginName());
if (sysUser == null) {
throw new MyException("用户名或密码错误");
}
if (getPassword(sysUser.getSalt() ,obj.getPassword()).equals(sysUser.getPassword())) {
LoginVo out = new LoginVo();
BeanUtils.copyProperties(sysUser, out);
return out;
}
throw new MyException("用户名或密码错误");
}
@Override
public boolean register(User entity) {
// 生成盐值
String salt = UUID.randomUUID().toString().replaceAll("-", "");
// 生成密码
entity.setSalt(salt)
.setPassword(getPassword(salt, DEFAULT_PASSWORD));
return this.save(entity);
}
@Override
public String getRole(Integer id) {
User byId = this.getById(id);
if (byId == null){
throw new MyException("该用户不存在");
}
return byId.getRole();
}
@Override
public boolean register(String phone, Integer abId) {
User user = new User();
user.setAbId(abId)
.setUsername(phone);
return register(user);
}
@Override
public boolean updateLastDate(Integer id) {
return this.lambdaUpdate()
.set(User::getLastLoginDate,new Date())
.eq(User::getId,id)
.update();
}
private User findByLoginName(String loginName) {
if (loginName == null) {
throw new MyException("登录名不能为空");
}
return this.lambdaQuery().eq(User::getUsername, loginName).one();
}
private String getPassword(String salt,String password) {
return DigestUtils.md5DigestAsHex((salt + password).getBytes());
}
}

View File

@ -3,7 +3,26 @@
<mapper namespace="com.whdc.mapper.FcMapper">
<select id="page" resultType="com.whdc.model.entity.Fc">
<select id="page" resultType="com.whdc.model.entity.FcVo">
SELECT
AB.*,F.SORT FSORT
FROM
FC F
LEFT JOIN ADDRESS_BOOK AB ON F.AB_ID = AB.ID
WHERE 1=1
<if test="obj.userId != null and obj.userId != '' ">
AND F.USER_ID = #{obj.userId}
</if>
<if test="obj.type != null and obj.userId != '' ">
AND F.TYPE = #{obj.type}
</if>
<if test="obj.name != null and obj.name != '' ">
AND AB.NAME LIKE CONCAT('%', #{obj.name}, '%')
</if>
<if test="obj.phone != null and obj.phone != '' ">
AND AB.PHONE = #{obj.phone}
</if>
ORDER BY F.SORT
</select>

View File

@ -4,6 +4,18 @@
<select id="page" resultType="com.whdc.model.entity.LoginInfo">
SELECT
*
FROM
LOGIN_INFO
WHERE 1=1
<if test="obj.createId != null and obj.createId != '' ">
AND CREATE_ID = #{obj.createId}
</if>
<if test="obj.type != null and obj.type != '' ">
AND TYPE= #{obj.type}
</if>
</select>

View File

@ -10,4 +10,19 @@
<select id="find" resultType="com.whdc.model.entity.User">
</select>
<select id="findByLoginName" resultType="com.whdc.model.vo.LoginVo">
SELECT
U.ID,
U.USERNAME,
U.PASSWORD,
U.SALT,
U.ROLE,
U.AB_ID.AB.NAME
FROM
USER U
LEFT JOIN ADDRESS_BOOK AB ON U.AB_ID = AB.ID
WHERE
U.USERNAME = #{username}
</select>
</mapper>