From d5105a870cce3c1ced09dc2f908ffed6302809d5 Mon Sep 17 00:00:00 2001 From: Ftz123456 <485913144@qq.com> Date: Mon, 15 Jan 2024 12:10:47 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E7=A5=A8=E6=8D=AE=E5=88=86?= =?UTF-8?q?=E9=A1=B5=E6=9F=A5=E8=AF=A2=EF=BC=8C=E7=94=A8=E6=88=B7=E7=AE=A1?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 8 + .../zsc/edu/bill/common/enums/Auditor.java | 30 ++++ .../edu/bill/common/enums/RegularUsers.java | 29 +++ .../security/SpringSecurityConfig.java | 8 +- .../system/controller/TicketController.java | 64 +++++++ .../system/controller/UserController.java | 26 ++- .../edu/bill/modules/system/dto/PageDto.java | 26 +++ .../bill/modules/system/dto/TicketDto.java | 67 +++++++ .../modules/system/dto/UserCreateDto.java | 2 +- .../modules/system/dto/UserSelfUpdateDto.java | 12 ++ .../bill/modules/system/entity/Ticket.java | 169 ++++++++++++++++++ .../edu/bill/modules/system/entity/User.java | 16 +- .../modules/system/mapper/TicketMapper.java | 24 +++ .../bill/modules/system/query/PageQuery.java | 28 +++ .../modules/system/query/TicketQuery.java | 80 +++++++++ .../bill/modules/system/query/UserQuery.java | 27 ++- .../modules/system/repo/TicketRepository.java | 13 ++ .../modules/system/repo/UserRepository.java | 3 + .../modules/system/service/TicketService.java | 19 ++ .../modules/system/service/UserService.java | 11 +- .../service/impl/TicketServiceImpl.java | 62 +++++++ .../system/service/impl/UserServiceImpl.java | 67 ++++++- .../edu/bill/modules/system/vo/TicketVo.java | 76 ++++++++ .../edu/bill/modules/system/vo/UserVo.java | 47 ++++- src/main/resources/application-dev.yml | 6 +- src/main/resources/mappers/TicketMapper.xml | 31 ++++ src/main/resources/mappers/UserMapper.xml | 3 + 27 files changed, 912 insertions(+), 42 deletions(-) create mode 100644 Dockerfile create mode 100644 src/main/java/com/zsc/edu/bill/common/enums/Auditor.java create mode 100644 src/main/java/com/zsc/edu/bill/common/enums/RegularUsers.java create mode 100644 src/main/java/com/zsc/edu/bill/modules/system/controller/TicketController.java create mode 100644 src/main/java/com/zsc/edu/bill/modules/system/dto/PageDto.java create mode 100644 src/main/java/com/zsc/edu/bill/modules/system/dto/TicketDto.java create mode 100644 src/main/java/com/zsc/edu/bill/modules/system/entity/Ticket.java create mode 100644 src/main/java/com/zsc/edu/bill/modules/system/mapper/TicketMapper.java create mode 100644 src/main/java/com/zsc/edu/bill/modules/system/query/PageQuery.java create mode 100644 src/main/java/com/zsc/edu/bill/modules/system/query/TicketQuery.java create mode 100644 src/main/java/com/zsc/edu/bill/modules/system/repo/TicketRepository.java create mode 100644 src/main/java/com/zsc/edu/bill/modules/system/service/TicketService.java create mode 100644 src/main/java/com/zsc/edu/bill/modules/system/service/impl/TicketServiceImpl.java create mode 100644 src/main/java/com/zsc/edu/bill/modules/system/vo/TicketVo.java create mode 100644 src/main/resources/mappers/TicketMapper.xml diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..55c1334 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,8 @@ +FROM openjdk:18 +LABEL authors="fantianzhi" +ADD target/bill-0.0.1-SNAPSHOT.jar /usr/src/bill/ +WORKDIR /usr/src/bill +EXPOSE 8081 +CMD ["java", "-jar", "bill-0.0.1-SNAPSHOT.jar"] + + diff --git a/src/main/java/com/zsc/edu/bill/common/enums/Auditor.java b/src/main/java/com/zsc/edu/bill/common/enums/Auditor.java new file mode 100644 index 0000000..0f4d91d --- /dev/null +++ b/src/main/java/com/zsc/edu/bill/common/enums/Auditor.java @@ -0,0 +1,30 @@ +package com.zsc.edu.bill.common.enums; + +import org.springframework.security.core.GrantedAuthority; + +/** + * @author ftz + * 创建时间:11/1/2024 下午1:54 + * 描述: 审核员权限 + */ +public enum Auditor implements GrantedAuthority { + + + + /** + * 用户管理 + */ + USER_QUERY, + USER_CREATE, + /** + * 审核票据 + + */ + AUDIT_TICKET_QUERY, + AUDIT_TICKET_UPDATE; + + @Override + public String getAuthority() { + return name(); + } +} diff --git a/src/main/java/com/zsc/edu/bill/common/enums/RegularUsers.java b/src/main/java/com/zsc/edu/bill/common/enums/RegularUsers.java new file mode 100644 index 0000000..ce37e5c --- /dev/null +++ b/src/main/java/com/zsc/edu/bill/common/enums/RegularUsers.java @@ -0,0 +1,29 @@ +package com.zsc.edu.bill.common.enums; + +import org.springframework.security.core.GrantedAuthority; + +/** + * @author ftz + * 创建时间:11/1/2024 下午2:04 + * 描述: TODO + */ +public enum RegularUsers implements GrantedAuthority { + /** + * 用户管理 + */ + USER_QUERY, + USER_CREATE, + USER_UPDATE, + /** + * 票据管理 + */ + TICKET_QUERY, + TICKET_CREATE, + TICKET_UPDATE, + TICKET_DELETE; + + @Override + public String getAuthority() { + return name(); + } +} diff --git a/src/main/java/com/zsc/edu/bill/framework/security/SpringSecurityConfig.java b/src/main/java/com/zsc/edu/bill/framework/security/SpringSecurityConfig.java index fb36051..a58ab2c 100644 --- a/src/main/java/com/zsc/edu/bill/framework/security/SpringSecurityConfig.java +++ b/src/main/java/com/zsc/edu/bill/framework/security/SpringSecurityConfig.java @@ -17,6 +17,8 @@ import org.springframework.security.web.authentication.rememberme.JdbcTokenRepos import org.springframework.security.web.authentication.rememberme.PersistentTokenRepository; import jakarta.annotation.Resource; +import org.springframework.security.web.context.HttpSessionSecurityContextRepository; + import javax.sql.DataSource; /** @@ -59,6 +61,7 @@ public class SpringSecurityConfig { filter.setAuthenticationFailureHandler(customAuthenticationFailureHandler); filter.setFilterProcessesUrl("/api/rest/user/login"); filter.setAuthenticationManager(authenticationManager()); + filter.setSecurityContextRepository(new HttpSessionSecurityContextRepository()); return filter; } @@ -67,7 +70,8 @@ public class SpringSecurityConfig { return http .authorizeHttpRequests(auth -> auth - .requestMatchers(HttpMethod.GET, "/api/rest/user/me").permitAll() + .requestMatchers(HttpMethod.GET, "/api/rest/user/me","/api/rest/user/register").permitAll() + .requestMatchers(HttpMethod.POST, "/api/rest/user/login","/api/rest/user/register").permitAll() .requestMatchers("/api/**").authenticated()) .addFilterAt(jsonAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class) .formLogin(form -> form @@ -86,7 +90,7 @@ public class SpringSecurityConfig { .rememberMe(rememberMe -> rememberMe .userDetailsService(userDetailsService) .tokenRepository(persistentTokenRepository())) - .csrf(csrf -> csrf.ignoringRequestMatchers("/api/internal/**", "/api/rest/user/logout")) + .csrf(csrf -> csrf.ignoringRequestMatchers("/api/internal/**", "/api/rest/user/logout","/api/rest/user/register")) .sessionManagement(session -> session .maximumSessions(3) .sessionRegistry(sessionRegistry) diff --git a/src/main/java/com/zsc/edu/bill/modules/system/controller/TicketController.java b/src/main/java/com/zsc/edu/bill/modules/system/controller/TicketController.java new file mode 100644 index 0000000..7d038c6 --- /dev/null +++ b/src/main/java/com/zsc/edu/bill/modules/system/controller/TicketController.java @@ -0,0 +1,64 @@ +package com.zsc.edu.bill.modules.system.controller; + + +/** + * @author ftz + * 票据Controller + * 创建时间:11/1/2024 上午10:57 + * 描述: 针对表【ticket(票据表)】的数据库操作Controller + */ +@AllArgsConstructor +@RestController +@RequestMapping("api/rest/ticket") +public class TicketController { + private final TicketService service; + /** + * 分页查询票据列表 + * @return 票据列表 + */ + @GetMapping("list") + public PageDto list(TicketQuery query){ + return service.tickePage(query); + } + /** + * 创建票据 + * @return ture/false + */ + @PostMapping("create") + public Boolean create(Ticket ticket){ + return service.save(ticket); + } + /** + * 更新票据 + * @return ture/false + */ + @PostMapping("update") + public Boolean update(Ticket ticket){ + return service.updateById(ticket); + } + /** + * 删除票据 + * @return ture/false + */ + @PostMapping("delete") + public Boolean delete(Long id){ + return service.removeById(id); + } + /** + * 批量删除票据 + * @return ture/false + */ + @PostMapping("deleteBatch") + public Boolean deleteBatch(List ids){ + return service.removeByIds(ids); + } + /** + * 获取票据详情 + * @return 票据详情 + */ + @GetMapping("detail") + public Ticket detail(Long id){ + return service.getById(id); + } + +} diff --git a/src/main/java/com/zsc/edu/bill/modules/system/controller/UserController.java b/src/main/java/com/zsc/edu/bill/modules/system/controller/UserController.java index b822633..9c65eaa 100644 --- a/src/main/java/com/zsc/edu/bill/modules/system/controller/UserController.java +++ b/src/main/java/com/zsc/edu/bill/modules/system/controller/UserController.java @@ -2,10 +2,7 @@ package com.zsc.edu.bill.modules.system.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.zsc.edu.bill.framework.security.UserDetailsImpl; -import com.zsc.edu.bill.modules.system.dto.UserCreateDto; -import com.zsc.edu.bill.modules.system.dto.UserSelfUpdateDto; -import com.zsc.edu.bill.modules.system.dto.UserSelfUpdatePasswordDto; -import com.zsc.edu.bill.modules.system.dto.UserUpdateDto; +import com.zsc.edu.bill.modules.system.dto.*; import com.zsc.edu.bill.modules.system.entity.User; import com.zsc.edu.bill.modules.system.query.UserQuery; import com.zsc.edu.bill.modules.system.service.DeptService; @@ -105,6 +102,18 @@ public class UserController { public Page query(UserQuery query, PageDTO page) { return service.page(query, page); } + /** + * 分页查询用户信息2 hasAuthority('USER_QUERY') + * + * @param query 查询表单 + * @return 分页用户信息 + */ + + @GetMapping("query") + @PreAuthorize("hasAuthority('USER_QUERY')") + public PageDto query2(UserQuery query) { + return service.queryUserPage(query); + } /** * 新建用户 hasAuthority('USER_CREATE') @@ -117,6 +126,15 @@ public class UserController { public Boolean create(@RequestBody UserCreateDto dto) { return service.create(dto); } + /** + * 注册用户 + * @param dto 表单数据 + * @return Boolean + */ + @PostMapping("register") + public Boolean register(@RequestBody UserCreateDto dto) { + return service.register(dto); + } /** * 更新用户 hasAuthority('USER_UPDATE') diff --git a/src/main/java/com/zsc/edu/bill/modules/system/dto/PageDto.java b/src/main/java/com/zsc/edu/bill/modules/system/dto/PageDto.java new file mode 100644 index 0000000..0ca2070 --- /dev/null +++ b/src/main/java/com/zsc/edu/bill/modules/system/dto/PageDto.java @@ -0,0 +1,26 @@ +package com.zsc.edu.bill.modules.system.dto; + +import lombok.Data; + +import java.util.List; + +/** + * @author ftz + * 创建时间:12/1/2024 下午1:55 + * 描述: 分页查询 + */ +@Data +public class PageDto { + /** + * 总条数 + */ + private Long total; + /** + * 总页数 + */ + private Integer pages; + /** + * 集合 + */ + private List list; +} diff --git a/src/main/java/com/zsc/edu/bill/modules/system/dto/TicketDto.java b/src/main/java/com/zsc/edu/bill/modules/system/dto/TicketDto.java new file mode 100644 index 0000000..20c2b11 --- /dev/null +++ b/src/main/java/com/zsc/edu/bill/modules/system/dto/TicketDto.java @@ -0,0 +1,67 @@ +package com.zsc.edu.bill.modules.system.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; + +/** + * @author ftz + * 创建时间:11/1/2024 上午10:25 + * 描述: TODO + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class TicketDto { + /** + * 票据uuid 提供给前端显示用 + */ + private String uuid; + + /** + * 用户id 票据创建者id + */ + private Long userId; + + /** + * 票据标题 + */ + private String title; + + /** + * 主体内容 票据详细内容 + */ + private String body; + + /** + * 金额 票据金额 + */ + private BigDecimal money; + + /** + * 状态 0:未提交,草稿;1:未审核;2:审核通过;3:退回、审核未通过 + */ + private Integer status; + + /** + * 票据类型 + */ + private Integer ticketType; + + /** + * 联系方式email邮箱 + */ + private String contactEmail; + + /** + * 客户公司名称 票据对应的企业名称 + */ + private String companyName; + + + + + +} diff --git a/src/main/java/com/zsc/edu/bill/modules/system/dto/UserCreateDto.java b/src/main/java/com/zsc/edu/bill/modules/system/dto/UserCreateDto.java index 7ab2fe3..c3a1ab6 100644 --- a/src/main/java/com/zsc/edu/bill/modules/system/dto/UserCreateDto.java +++ b/src/main/java/com/zsc/edu/bill/modules/system/dto/UserCreateDto.java @@ -56,7 +56,7 @@ public class UserCreateDto { /** * 用户身份集合 */ - @NotEmpty(message = "角色不能为空") + //@NotEmpty(message = "角色不能为空") public Set roleIds; /** diff --git a/src/main/java/com/zsc/edu/bill/modules/system/dto/UserSelfUpdateDto.java b/src/main/java/com/zsc/edu/bill/modules/system/dto/UserSelfUpdateDto.java index a0e72c9..7f6fe4e 100644 --- a/src/main/java/com/zsc/edu/bill/modules/system/dto/UserSelfUpdateDto.java +++ b/src/main/java/com/zsc/edu/bill/modules/system/dto/UserSelfUpdateDto.java @@ -28,6 +28,18 @@ public class UserSelfUpdateDto { */ @Email(message = "电子邮箱格式不对") public String email; + /** + * 昵称 + * */ + public String nickName; + /** + * 头像 + * */ + public String avatar; + /** + * 地址 + * */ + public String address; } diff --git a/src/main/java/com/zsc/edu/bill/modules/system/entity/Ticket.java b/src/main/java/com/zsc/edu/bill/modules/system/entity/Ticket.java new file mode 100644 index 0000000..461577d --- /dev/null +++ b/src/main/java/com/zsc/edu/bill/modules/system/entity/Ticket.java @@ -0,0 +1,169 @@ +package com.zsc.edu.bill.modules.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; +import lombok.Data; + +/** + * 票据表 + * @TableName ticket + */ +@TableName(value ="ticket") +@Data +public class Ticket extends BaseEntity implements Serializable{ + /** + * 票据id 主键id + */ + @TableId(type = IdType.AUTO) + private Long id; + + /** + * 票据uuid 提供给前端显示用 + */ + private String uuid; + + /** + * 用户id 票据创建者id + */ + private Long userId; + + /** + * 票据标题 + */ + private String title; + + /** + * 主体内容 票据详细内容 + */ + private String body; + + /** + * 金额 票据金额 + */ + private BigDecimal money; + + /** + * 状态 0:未提交,草稿;1:未审核;2:审核通过;3:退回、审核未通过 + */ + private Integer status; + + /** + * 票据类型 + */ + private Integer ticketType; + + /** + * 联系方式email邮箱 + */ + private String contactEmail; + + /** + * 客户公司名称 票据对应的企业名称 + */ + private String companyName; + + /** + * 创建人 + */ + private String createdBy; + + /** + * 创建时间 + */ + private Date createdTime; + + /** + * 更新人 + */ + private String updatedBy; + + /** + * 更新时间 + */ + private Date updatedTime; + + @Serial + @TableField(exist = false) + private static final long serialVersionUID = 1L; + + @Override + public boolean equals(Object that) { + if (this == that) { + return true; + } + if (that == null) { + return false; + } + if (getClass() != that.getClass()) { + return false; + } + Ticket other = (Ticket) that; + return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId())) + && (this.getUuid() == null ? other.getUuid() == null : this.getUuid().equals(other.getUuid())) + && (this.getUserId() == null ? other.getUserId() == null : this.getUserId().equals(other.getUserId())) + && (this.getTitle() == null ? other.getTitle() == null : this.getTitle().equals(other.getTitle())) + && (this.getBody() == null ? other.getBody() == null : this.getBody().equals(other.getBody())) + && (this.getMoney() == null ? other.getMoney() == null : this.getMoney().equals(other.getMoney())) + && (this.getStatus() == null ? other.getStatus() == null : this.getStatus().equals(other.getStatus())) + && (this.getTicketType() == null ? other.getTicketType() == null : this.getTicketType().equals(other.getTicketType())) + && (this.getContactEmail() == null ? other.getContactEmail() == null : this.getContactEmail().equals(other.getContactEmail())) + && (this.getCompanyName() == null ? other.getCompanyName() == null : this.getCompanyName().equals(other.getCompanyName())) + && (this.getCreatedBy() == null ? other.getCreatedBy() == null : this.getCreatedBy().equals(other.getCreatedBy())) + && (this.getCreatedTime() == null ? other.getCreatedTime() == null : this.getCreatedTime().equals(other.getCreatedTime())) + && (this.getUpdatedBy() == null ? other.getUpdatedBy() == null : this.getUpdatedBy().equals(other.getUpdatedBy())) + && (this.getUpdatedTime() == null ? other.getUpdatedTime() == null : this.getUpdatedTime().equals(other.getUpdatedTime())); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((getId() == null) ? 0 : getId().hashCode()); + result = prime * result + ((getUuid() == null) ? 0 : getUuid().hashCode()); + result = prime * result + ((getUserId() == null) ? 0 : getUserId().hashCode()); + result = prime * result + ((getTitle() == null) ? 0 : getTitle().hashCode()); + result = prime * result + ((getBody() == null) ? 0 : getBody().hashCode()); + result = prime * result + ((getMoney() == null) ? 0 : getMoney().hashCode()); + result = prime * result + ((getStatus() == null) ? 0 : getStatus().hashCode()); + result = prime * result + ((getTicketType() == null) ? 0 : getTicketType().hashCode()); + result = prime * result + ((getContactEmail() == null) ? 0 : getContactEmail().hashCode()); + result = prime * result + ((getCompanyName() == null) ? 0 : getCompanyName().hashCode()); + result = prime * result + ((getCreatedBy() == null) ? 0 : getCreatedBy().hashCode()); + result = prime * result + ((getCreatedTime() == null) ? 0 : getCreatedTime().hashCode()); + result = prime * result + ((getUpdatedBy() == null) ? 0 : getUpdatedBy().hashCode()); + result = prime * result + ((getUpdatedTime() == null) ? 0 : getUpdatedTime().hashCode()); + return result; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append(getClass().getSimpleName()); + sb.append(" ["); + sb.append("Hash = ").append(hashCode()); + sb.append(", id=").append(id); + sb.append(", uuid=").append(uuid); + sb.append(", userId=").append(userId); + sb.append(", title=").append(title); + sb.append(", body=").append(body); + sb.append(", money=").append(money); + sb.append(", status=").append(status); + sb.append(", ticketType=").append(ticketType); + sb.append(", contactEmail=").append(contactEmail); + sb.append(", companyName=").append(companyName); + sb.append(", createdBy=").append(createdBy); + sb.append(", createdTime=").append(createdTime); + sb.append(", updatedBy=").append(updatedBy); + sb.append(", updatedTime=").append(updatedTime); + sb.append(", serialVersionUID=").append(serialVersionUID); + sb.append("]"); + return sb.toString(); + } +} \ No newline at end of file diff --git a/src/main/java/com/zsc/edu/bill/modules/system/entity/User.java b/src/main/java/com/zsc/edu/bill/modules/system/entity/User.java index ebb65d1..e109490 100644 --- a/src/main/java/com/zsc/edu/bill/modules/system/entity/User.java +++ b/src/main/java/com/zsc/edu/bill/modules/system/entity/User.java @@ -5,8 +5,6 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.*; -import java.util.Set; - /** * 用户 * @@ -45,7 +43,11 @@ public class User extends BaseEntity { * 启用状态 */ public Boolean enabled = true; - +/** + * + *昵称 + * */ + public String nickName; /** * 所属部门ID @@ -56,6 +58,14 @@ public class User extends BaseEntity { * 角色ID */ public Long roleId; + /** + * 头像 + */ + public String avatar; + /** + * 地址 + */ + public String address; /** * 所属部门 diff --git a/src/main/java/com/zsc/edu/bill/modules/system/mapper/TicketMapper.java b/src/main/java/com/zsc/edu/bill/modules/system/mapper/TicketMapper.java new file mode 100644 index 0000000..5e922a1 --- /dev/null +++ b/src/main/java/com/zsc/edu/bill/modules/system/mapper/TicketMapper.java @@ -0,0 +1,24 @@ +package com.zsc.edu.bill.modules.system.mapper; + + + +import com.zsc.edu.bill.common.mapstruct.BaseMapper; +import com.zsc.edu.bill.modules.system.dto.TicketDto; +import com.zsc.edu.bill.modules.system.entity.Ticket; +import org.mapstruct.Mapper; +import org.mapstruct.ReportingPolicy; + +/** +* @author fantianzhi +* @description 针对表【ticket(票据表)】的数据库操作Mapper +* @createDate 2024-01-11 10:13:22 +* @Entity com.zsc.edu.bill.modules.system.entity.Ticket +*/ +@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE) +public interface TicketMapper extends BaseMapper { + +} + + + + diff --git a/src/main/java/com/zsc/edu/bill/modules/system/query/PageQuery.java b/src/main/java/com/zsc/edu/bill/modules/system/query/PageQuery.java new file mode 100644 index 0000000..7ef335d --- /dev/null +++ b/src/main/java/com/zsc/edu/bill/modules/system/query/PageQuery.java @@ -0,0 +1,28 @@ +package com.zsc.edu.bill.modules.system.query; + +import lombok.Data; + +/** + * @author ftz + * 创建时间:12/1/2024 下午1:49 + * 描述: 分页查询 + */ +@Data +public class PageQuery { + /** + * 页码 + */ + private Integer page; + /** + * 每页大小 + */ + private Integer size; + /** + * 排序字段 + */ + private String orderBy; + /** + * 是否升序 + */ + private Boolean asc; +} diff --git a/src/main/java/com/zsc/edu/bill/modules/system/query/TicketQuery.java b/src/main/java/com/zsc/edu/bill/modules/system/query/TicketQuery.java new file mode 100644 index 0000000..9abcda3 --- /dev/null +++ b/src/main/java/com/zsc/edu/bill/modules/system/query/TicketQuery.java @@ -0,0 +1,80 @@ +package com.zsc.edu.bill.modules.system.query; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.zsc.edu.bill.modules.system.entity.Ticket; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import org.springframework.util.StringUtils; + +import java.math.BigDecimal; + +/** + * @author ftz + * 创建时间:11/1/2024 上午11:04 + * 描述: 前端传递的查询参数 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@AllArgsConstructor +@NoArgsConstructor +public class TicketQuery extends PageQuery { + /** + * 票据uuid 提供给前端显示用 + */ + private String uuid; + + /** + * 用户id 票据创建者id + */ + private Long userId; + + /** + * 票据标题 + */ + private String title; + + /** + * 主体内容 票据详细内容 + */ + private String body; + + /** + * 金额 票据金额 + */ + private BigDecimal money; + + /** + * 状态 0:未提交,草稿;1:未审核;2:审核通过;3:退回、审核未通过 + */ + private Integer status; + + /** + * 票据类型 + */ + private Integer ticketType; + + /** + * 联系方式email邮箱 + */ + private String contactEmail; + + /** + * 客户公司名称 票据对应的企业名称 + */ + private String companyName; +public LambdaQueryWrapper wrapper() { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(StringUtils.hasText(this.uuid), Ticket::getUuid, this.uuid); + queryWrapper.eq(StringUtils.hasText(String.valueOf(this.userId)), Ticket::getUserId, this.userId); + queryWrapper.eq(StringUtils.hasText(this.title), Ticket::getTitle, this.title); + queryWrapper.eq(StringUtils.hasText(this.body), Ticket::getBody, this.body); + queryWrapper.eq(StringUtils.hasText(String.valueOf(this.money)), Ticket::getMoney, this.money); + queryWrapper.eq(StringUtils.hasText(String.valueOf(this.status)), Ticket::getStatus, this.status); + queryWrapper.eq(StringUtils.hasText(String.valueOf(this.ticketType)), Ticket::getTicketType, this.ticketType); + queryWrapper.eq(StringUtils.hasText(this.contactEmail), Ticket::getContactEmail, this.contactEmail); + queryWrapper.eq(StringUtils.hasText(this.companyName), Ticket::getCompanyName, this.companyName); + return queryWrapper; + } +} diff --git a/src/main/java/com/zsc/edu/bill/modules/system/query/UserQuery.java b/src/main/java/com/zsc/edu/bill/modules/system/query/UserQuery.java index 05b6cf6..6058260 100644 --- a/src/main/java/com/zsc/edu/bill/modules/system/query/UserQuery.java +++ b/src/main/java/com/zsc/edu/bill/modules/system/query/UserQuery.java @@ -1,13 +1,10 @@ package com.zsc.edu.bill.modules.system.query; -import com.zsc.edu.bill.modules.system.entity.User; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.AllArgsConstructor; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; -import org.springframework.util.StringUtils; -import java.util.Objects; import java.util.Set; /** @@ -15,10 +12,11 @@ import java.util.Set; * * @author harry yao */ +@EqualsAndHashCode(callSuper = true) @Data @AllArgsConstructor @NoArgsConstructor -public class UserQuery { +public class UserQuery extends PageQuery{ /** * 用户名 @@ -43,20 +41,21 @@ public class UserQuery { /** * 角色集合 */ - public Set roleIds; + public Long roleId; /** * 部门集合 */ public Set deptIds; + - public LambdaQueryWrapper wrapper() { - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(StringUtils.hasText(this.username), User::getUsername, this.username); - queryWrapper.eq(StringUtils.hasText(this.phone), User::getPhone, this.phone); - queryWrapper.eq(StringUtils.hasText(this.email), User::getEmail, this.email); - queryWrapper.eq(Objects.nonNull(this.enable), User::getEnabled, this.enable); - return queryWrapper; - } +// public LambdaQueryWrapper wrapper() { +// LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); +// queryWrapper.eq(StringUtils.hasText(this.username), User::getUsername, this.username); +// queryWrapper.eq(StringUtils.hasText(this.phone), User::getPhone, this.phone); +// queryWrapper.eq(StringUtils.hasText(this.email), User::getEmail, this.email); +// queryWrapper.eq(Objects.nonNull(this.enable), User::getEnabled, this.enable); +// return queryWrapper; +// } } diff --git a/src/main/java/com/zsc/edu/bill/modules/system/repo/TicketRepository.java b/src/main/java/com/zsc/edu/bill/modules/system/repo/TicketRepository.java new file mode 100644 index 0000000..245193c --- /dev/null +++ b/src/main/java/com/zsc/edu/bill/modules/system/repo/TicketRepository.java @@ -0,0 +1,13 @@ +package com.zsc.edu.bill.modules.system.repo; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.zsc.edu.bill.modules.system.entity.Ticket; + + +/** + * @author ftz + * 创建时间:11/1/2024 上午10:41 + * 描述: TODO + */ +public interface TicketRepository extends BaseMapper { +} diff --git a/src/main/java/com/zsc/edu/bill/modules/system/repo/UserRepository.java b/src/main/java/com/zsc/edu/bill/modules/system/repo/UserRepository.java index 29b29e9..1dc4db9 100644 --- a/src/main/java/com/zsc/edu/bill/modules/system/repo/UserRepository.java +++ b/src/main/java/com/zsc/edu/bill/modules/system/repo/UserRepository.java @@ -1,5 +1,7 @@ package com.zsc.edu.bill.modules.system.repo; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; import com.zsc.edu.bill.modules.system.entity.User; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -31,4 +33,5 @@ public interface UserRepository extends BaseMapper { // User findByUsername(String username); User selectByUsername(String username); + Page page2(PageDTO page, LambdaQueryWrapper wrapper); } diff --git a/src/main/java/com/zsc/edu/bill/modules/system/service/TicketService.java b/src/main/java/com/zsc/edu/bill/modules/system/service/TicketService.java new file mode 100644 index 0000000..5a20663 --- /dev/null +++ b/src/main/java/com/zsc/edu/bill/modules/system/service/TicketService.java @@ -0,0 +1,19 @@ +package com.zsc.edu.bill.modules.system.service; + + +import com.baomidou.mybatisplus.extension.service.IService; +import com.zsc.edu.bill.modules.system.dto.PageDto; +import com.zsc.edu.bill.modules.system.entity.Ticket; +import com.zsc.edu.bill.modules.system.query.TicketQuery; +import com.zsc.edu.bill.modules.system.query.UserQuery; +import com.zsc.edu.bill.modules.system.vo.TicketVo; + +/** +* @author fantianzhi +* @description 针对表【ticket(票据表)】的数据库操作Service +* @createDate 2024-01-11 10:13:22 +*/ +public interface TicketService extends IService { + + PageDto tickePage(TicketQuery query); +} diff --git a/src/main/java/com/zsc/edu/bill/modules/system/service/UserService.java b/src/main/java/com/zsc/edu/bill/modules/system/service/UserService.java index 1538dc8..bafd801 100644 --- a/src/main/java/com/zsc/edu/bill/modules/system/service/UserService.java +++ b/src/main/java/com/zsc/edu/bill/modules/system/service/UserService.java @@ -2,10 +2,7 @@ package com.zsc.edu.bill.modules.system.service; import com.zsc.edu.bill.framework.security.UserDetailsImpl; -import com.zsc.edu.bill.modules.system.dto.UserCreateDto; -import com.zsc.edu.bill.modules.system.dto.UserSelfUpdateDto; -import com.zsc.edu.bill.modules.system.dto.UserSelfUpdatePasswordDto; -import com.zsc.edu.bill.modules.system.dto.UserUpdateDto; +import com.zsc.edu.bill.modules.system.dto.*; import com.zsc.edu.bill.modules.system.entity.User; import com.zsc.edu.bill.modules.system.query.UserQuery; import com.zsc.edu.bill.modules.system.vo.UserVo; @@ -38,4 +35,10 @@ public interface UserService extends IService { Boolean toggle(Long id); Page page(UserQuery query, PageDTO pageDTO); + + Boolean register(UserCreateDto dto); + + Page page2(UserQuery query, PageDTO page); + + PageDto queryUserPage(UserQuery query); } diff --git a/src/main/java/com/zsc/edu/bill/modules/system/service/impl/TicketServiceImpl.java b/src/main/java/com/zsc/edu/bill/modules/system/service/impl/TicketServiceImpl.java new file mode 100644 index 0000000..c6252ab --- /dev/null +++ b/src/main/java/com/zsc/edu/bill/modules/system/service/impl/TicketServiceImpl.java @@ -0,0 +1,62 @@ +package com.zsc.edu.bill.modules.system.service.impl; + + +import com.baomidou.mybatisplus.core.metadata.OrderItem; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.zsc.edu.bill.modules.system.dto.PageDto; +import com.zsc.edu.bill.modules.system.entity.Ticket; +import com.zsc.edu.bill.modules.system.query.TicketQuery; +import com.zsc.edu.bill.modules.system.repo.TicketRepository; +import com.zsc.edu.bill.modules.system.service.TicketService; +import com.zsc.edu.bill.modules.system.vo.TicketVo; +import lombok.AllArgsConstructor; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** +* @author fantianzhi +* @description 针对表【ticket(票据表)】的数据库操作Service实现 +* @createDate 2024-01-11 10:13:22 +*/ +@AllArgsConstructor +@Service +public class TicketServiceImpl extends ServiceImpl + implements TicketService { + + @Override + public PageDto tickePage(TicketQuery query) { + + Page page = Page.of(query.getPage(), query.getSize()); + if (query.getOrderBy()!=null) { + page.addOrder(new OrderItem().setColumn(query.getOrderBy()).setAsc(query.getAsc())); + } else { + page.addOrder(new OrderItem().setColumn("id").setAsc(false)); + } + Page ticketPage = lambdaQuery() + .eq(query.getUuid()!=null, Ticket::getUuid, query.getUuid()) + .eq(query.getUserId()!=null, Ticket::getUserId, query.getUserId()) + .eq(query.getTitle()!=null, Ticket::getTitle, query.getTitle()) + .eq(query.getBody()!=null, Ticket::getBody, query.getBody()) + .eq(query.getMoney()!=null, Ticket::getMoney, query.getMoney()) + .eq(query.getStatus()!=null, Ticket::getStatus, query.getStatus()) + .eq(query.getTicketType()!=null, Ticket::getTicketType, query.getTicketType()) + .page(page); + PageDto pageDto = new PageDto<>(); + pageDto.setTotal(ticketPage.getTotal()); + pageDto.setPages(Math.toIntExact(ticketPage.getPages())); + List ticketVoList = ticketPage.getRecords().stream().map(ticket -> { + TicketVo ticketVo = new TicketVo(); + BeanUtils.copyProperties(ticket, ticketVo); + return ticketVo; + }).toList(); + pageDto.setList(ticketVoList); + return pageDto; + } +} + + + + diff --git a/src/main/java/com/zsc/edu/bill/modules/system/service/impl/UserServiceImpl.java b/src/main/java/com/zsc/edu/bill/modules/system/service/impl/UserServiceImpl.java index 1d6501b..aa2cf62 100644 --- a/src/main/java/com/zsc/edu/bill/modules/system/service/impl/UserServiceImpl.java +++ b/src/main/java/com/zsc/edu/bill/modules/system/service/impl/UserServiceImpl.java @@ -1,12 +1,11 @@ package com.zsc.edu.bill.modules.system.service.impl; +import com.baomidou.mybatisplus.core.metadata.OrderItem; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.zsc.edu.bill.exception.ConstraintException; import com.zsc.edu.bill.framework.security.UserDetailsImpl; -import com.zsc.edu.bill.modules.system.dto.UserCreateDto; -import com.zsc.edu.bill.modules.system.dto.UserSelfUpdateDto; -import com.zsc.edu.bill.modules.system.dto.UserSelfUpdatePasswordDto; -import com.zsc.edu.bill.modules.system.dto.UserUpdateDto; +import com.zsc.edu.bill.modules.system.dto.*; +import com.zsc.edu.bill.modules.system.entity.Role; import com.zsc.edu.bill.modules.system.entity.User; import com.zsc.edu.bill.modules.system.query.UserQuery; import com.zsc.edu.bill.modules.system.repo.UserRepository; @@ -21,6 +20,8 @@ import org.springframework.beans.BeanUtils; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 服务实现类 @@ -34,6 +35,7 @@ import org.springframework.stereotype.Service; public class UserServiceImpl extends ServiceImpl implements UserService { private final PasswordEncoder passwordEncoder; + private final RoleServiceImpl roleService; @Override @@ -76,13 +78,64 @@ public class UserServiceImpl extends ServiceImpl implement public Page page(UserQuery query, PageDTO pageDTO) { //2.构造连表查询的动态SQL代码⽚段 QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.like(!query.getUsername().isBlank(), "u.username", query.getUsername()) - .in(query.deptIds != null && !query.deptIds.isEmpty(), "d.id", query.getDeptIds()) - .in(query.roleIds != null && !query.roleIds.isEmpty(), "r.id", query.getRoleIds()); +// wrapper.like(!query.getUsername().isBlank(), "u.username", query.getUsername()) +// wrapper +// .in(query.deptIds != null && !query.deptIds.isEmpty(), "d.id", query.getDeptIds()) +// .in(query.roleId != null && !query.roleId.isEmpty(), "r.id", query.getRoleId()); //3.调⽤Mapper层连表查询SQL语句,并把动态查询的代码⽚段传递给Mapper接⼝ return this.baseMapper.page(pageDTO, wrapper); } + @Override + public Boolean register(UserCreateDto dto) { + User user = new User(); + BeanUtils.copyProperties(dto, user); + if (count(new LambdaQueryWrapper().eq(User::getPhone, dto.getPhone())) > 0) { + throw new ConstraintException("phone", dto.phone, "手机号已存在"); + } + if (count(new LambdaQueryWrapper().eq(User::getEmail, dto.getEmail())) > 0) { + throw new ConstraintException("email", dto.email, "邮箱地址已存在"); + } + user.setPassword(passwordEncoder.encode(dto.password)); + user.setRoleId(roleService.getOne(new LambdaQueryWrapper().eq(Role::getName, "普通用户")).getId()); + return save(user); + } + + @Override + public Page page2(UserQuery query, PageDTO page) { + QueryWrapper wrapper = new QueryWrapper<>(); + return this.baseMapper.page(page, wrapper); + } + + @Override + public PageDto queryUserPage(UserQuery query) { + String username = query.getUsername(); + String phone = query.getPhone(); + String email = query.getEmail(); + Page page = Page.of(query.getPage(), query.getSize()); + if (query.getOrderBy()!=null) { + page.addOrder(new OrderItem().setColumn(query.getOrderBy()).setAsc(query.getAsc())); + } else { + page.addOrder(new OrderItem().setColumn("id").setAsc(false)); + } + Page p = lambdaQuery() + .like(username != null && !username.isBlank(), User::getUsername, username) + .like(phone != null && !phone.isBlank(), User::getPhone, phone) + .like(email != null && !email.isBlank(), User::getEmail, email) + .page(page); + PageDto dto = new PageDto<>(); + dto.setTotal(p.getTotal()); + dto.setPages((int) p.getPages()); + List list = p.getRecords().stream().map(user -> { + UserVo vo = new UserVo(); + BeanUtils.copyProperties(user, vo); + return vo; + }).toList(); + dto.setList(list); + + return dto; + } + @Override public User selfDetail(UserDetailsImpl userDetails) { return getById(userDetails.getId()); diff --git a/src/main/java/com/zsc/edu/bill/modules/system/vo/TicketVo.java b/src/main/java/com/zsc/edu/bill/modules/system/vo/TicketVo.java new file mode 100644 index 0000000..d197008 --- /dev/null +++ b/src/main/java/com/zsc/edu/bill/modules/system/vo/TicketVo.java @@ -0,0 +1,76 @@ +package com.zsc.edu.bill.modules.system.vo; + +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * @author ftz + * 创建时间:13/1/2024 下午3:00 + * 描述: 票据vo + */ +@Data +public class TicketVo { + private String uuid; + + /** + * 用户id 票据创建者id + */ + private Long userId; + + /** + * 票据标题 + */ + private String title; + + /** + * 主体内容 票据详细内容 + */ + private String body; + + /** + * 金额 票据金额 + */ + private BigDecimal money; + + /** + * 状态 0:未提交,草稿;1:未审核;2:审核通过;3:退回、审核未通过 + */ + private Integer status; + + /** + * 票据类型 + */ + private Integer ticketType; + + /** + * 联系方式email邮箱 + */ + private String contactEmail; + + /** + * 客户公司名称 票据对应的企业名称 + */ + private String companyName; + + /** + * 创建人 + */ + private String createdBy; + + /** + * 创建时间 + */ + private Date createdTime; + + /** + * 更新人 + */ + private String updatedBy; + + /** + * 更新时间 + */ + private Date updatedTime; +} diff --git a/src/main/java/com/zsc/edu/bill/modules/system/vo/UserVo.java b/src/main/java/com/zsc/edu/bill/modules/system/vo/UserVo.java index 2d1d051..dae7257 100644 --- a/src/main/java/com/zsc/edu/bill/modules/system/vo/UserVo.java +++ b/src/main/java/com/zsc/edu/bill/modules/system/vo/UserVo.java @@ -6,10 +6,49 @@ import java.time.LocalDateTime; @Data public class UserVo { - String username; - String phone; - String email; - Boolean enabled; + /** + * 用户名 + */ + public String username; + + /** + * 手机号码 + */ + public String phone; + + /** + * 电子邮件 + */ + public String email; + + /** + * 启用状态 + */ + public Boolean enabled; + /** + * + *昵称 + * */ + public String nickName; + + /** + * 所属部门ID + */ + public Long deptId; + + /** + * 角色ID + */ + public Long roleId; + /** + * 头像 + */ + public String avatar; + /** + * 地址 + */ + public String address; + LocalDateTime createTime; LocalDateTime updateTime; } diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index eb268b6..4b7b289 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -1,5 +1,5 @@ server: - port: 8080 + port: 8081 mybatis-plus: type-aliases-package: com.zsc.edu.bill.modules.*.entity @@ -9,7 +9,7 @@ mybatis-plus: spring: datasource: - url: jdbc:mysql://localhost:3306/study?useSSL=false&allowPublicKeyRetrieval=true&createDatabaseIfNotExist=true&characterEncoding=utf8&serverTimezone=Hongkong + url: jdbc:mysql://59.110.238.182:3306/study?useSSL=false&allowPublicKeyRetrieval=true&createDatabaseIfNotExist=true&characterEncoding=utf8&serverTimezone=Hongkong username: root - password: 123123 + password: 2002 driver-class-name: com.mysql.cj.jdbc.Driver \ No newline at end of file diff --git a/src/main/resources/mappers/TicketMapper.xml b/src/main/resources/mappers/TicketMapper.xml new file mode 100644 index 0000000..543f3c7 --- /dev/null +++ b/src/main/resources/mappers/TicketMapper.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + id,uuid,user_id, + title,body,money, + status,ticket_type,contact_email, + company_name,created_by,created_time, + updated_by,updated_time + + diff --git a/src/main/resources/mappers/UserMapper.xml b/src/main/resources/mappers/UserMapper.xml index 63ced6a..69505d5 100644 --- a/src/main/resources/mappers/UserMapper.xml +++ b/src/main/resources/mappers/UserMapper.xml @@ -9,6 +9,9 @@ + + +