From 2c76f34d891d54dd768abcc53268d02d256bdf35 Mon Sep 17 00:00:00 2001 From: liuchao Date: Tue, 15 Sep 2020 18:25:16 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../querydsl/controller/DeptController.java | 11 ++++ .../querydsl/controller/EmpController.java | 5 +- .../aiprose/querydsl/service/DeptService.java | 10 +++- .../aiprose/querydsl/service/EmpService.java | 53 +++++++++++++------ .../com/aiprose/querydsl/vos/DeptTreeVo.java | 3 +- .../java/com/aiprose/querydsl/vos/EmpVo.java | 28 ++++++++++ 6 files changed, 89 insertions(+), 21 deletions(-) create mode 100644 src/main/java/com/aiprose/querydsl/vos/EmpVo.java diff --git a/src/main/java/com/aiprose/querydsl/controller/DeptController.java b/src/main/java/com/aiprose/querydsl/controller/DeptController.java index 138c3de..435fbdb 100644 --- a/src/main/java/com/aiprose/querydsl/controller/DeptController.java +++ b/src/main/java/com/aiprose/querydsl/controller/DeptController.java @@ -4,6 +4,7 @@ import com.aiprose.querydsl.entity.Dept; import com.aiprose.querydsl.entity.Emp; import com.aiprose.querydsl.entity.Response; import com.aiprose.querydsl.service.DeptService; +import com.aiprose.querydsl.service.EmpService; import com.aiprose.querydsl.util.FixedPageData; import com.aiprose.querydsl.vos.DeptTreeVo; import org.springframework.beans.factory.annotation.Autowired; @@ -25,6 +26,8 @@ public class DeptController { @Autowired private DeptService service; + @Autowired + private EmpService empService; @Autowired private Response resp; @@ -37,6 +40,14 @@ public class DeptController { @DeleteMapping("{id}") public Mono delete(@PathVariable("id") Integer id){ + Boolean flag = empService.hasEmp(id); + if(flag){ + return Mono.just(resp.failure("该部门下面有员工,无法删除")); + } + flag = service.hasChild(id); + if(flag){ + return Mono.just(resp.failure("该部门下面有其他部门,无法删除")); + } service.deleteById(id); return Mono.just(resp.success()); } diff --git a/src/main/java/com/aiprose/querydsl/controller/EmpController.java b/src/main/java/com/aiprose/querydsl/controller/EmpController.java index f409ef0..9d3bcd9 100644 --- a/src/main/java/com/aiprose/querydsl/controller/EmpController.java +++ b/src/main/java/com/aiprose/querydsl/controller/EmpController.java @@ -23,6 +23,7 @@ import java.util.Map; * @Date: 2020/9/14 */ @RestController +@RequestMapping("emp") public class EmpController { @Autowired @@ -32,8 +33,8 @@ public class EmpController { private Response resp; @GetMapping("list") - public Mono list(@RequestParam Integer page, @RequestParam Integer size, Emp emp){ - FixedPageData pageData = service.list(page,size,emp); + public Mono list(@RequestParam Integer page, @RequestParam Integer size, String search){ + FixedPageData pageData = service.list(page,size,search); return Mono.just(resp.page(pageData.getResults(),pageData.getTotal())); } diff --git a/src/main/java/com/aiprose/querydsl/service/DeptService.java b/src/main/java/com/aiprose/querydsl/service/DeptService.java index b0cc5a8..1a18ce8 100644 --- a/src/main/java/com/aiprose/querydsl/service/DeptService.java +++ b/src/main/java/com/aiprose/querydsl/service/DeptService.java @@ -56,7 +56,7 @@ public class DeptService extends BasicServiceImpl { DeptTreeVo vo = new DeptTreeVo(); BeanUtils.copyProperties(x, vo); List childs = getChilds(qDept, x.getId()); - vo.setChild(childs); + vo.setChildren(childs); return vo; }).collect(Collectors.toList()); return collect; @@ -67,8 +67,14 @@ public class DeptService extends BasicServiceImpl { DeptTreeVo vo = new DeptTreeVo(); BeanUtils.copyProperties(x, vo); List childs = getChilds(qDept, x.getId()); - vo.setChild(childs); + vo.setChildren(childs); return vo; }).collect(Collectors.toList()); } + + public Boolean hasChild(Integer id) { + QDept qDept = QDept.dept; + long l = queryFactory.selectFrom(qDept).where(qDept.pid.eq(id)).fetchCount(); + return l>0; + } } diff --git a/src/main/java/com/aiprose/querydsl/service/EmpService.java b/src/main/java/com/aiprose/querydsl/service/EmpService.java index afdab98..d9c9d9d 100644 --- a/src/main/java/com/aiprose/querydsl/service/EmpService.java +++ b/src/main/java/com/aiprose/querydsl/service/EmpService.java @@ -2,14 +2,19 @@ package com.aiprose.querydsl.service; import com.aiprose.base.BasicServiceImpl; import com.aiprose.querydsl.entity.Emp; +import com.aiprose.querydsl.entity.QDept; import com.aiprose.querydsl.entity.QEmp; import com.aiprose.querydsl.repository.EmpRepository; import com.aiprose.querydsl.util.FixedPageData; +import com.aiprose.querydsl.vos.EmpVo; +import com.querydsl.core.BooleanBuilder; import com.querydsl.core.QueryResults; +import com.querydsl.core.Tuple; import com.querydsl.core.types.ExpressionUtils; import com.querydsl.core.types.Predicate; import com.querydsl.jpa.impl.JPAQueryFactory; import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; @@ -19,6 +24,8 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.PostConstruct; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; +import java.util.List; +import java.util.stream.Collectors; /** * @version 1.0 @@ -28,7 +35,7 @@ import javax.persistence.PersistenceContext; */ @Transactional @Service -public class EmpService extends BasicServiceImpl { +public class EmpService extends BasicServiceImpl { @Autowired private JPAQueryFactory queryFactory; @@ -46,26 +53,40 @@ public class EmpService extends BasicServiceImpl { return null; } - public FixedPageData list(Integer page, Integer size, Emp emp) { + public FixedPageData list(Integer page, Integer size, String search) { FixedPageData pageData = new FixedPageData(page, size); QEmp qEmp = QEmp.emp; - Integer deptId = emp.getDeptId(); - String empName = emp.getEmpName(); - Long mobile = emp.getMobile(); + QDept qDept = QDept.dept; Predicate predicate = qEmp.isNotNull(); - if (StringUtils.isNotBlank(empName)) { - predicate = ExpressionUtils.and(predicate, qEmp.empName.eq(empName)); + if (StringUtils.isNotBlank(search)) { + BooleanBuilder builder = new BooleanBuilder(); + builder.or(qEmp.empName.like(search)); + try { + Long aLong = Long.valueOf(search); + builder.or(qEmp.mobile.eq(aLong)); + } catch (Exception e) { + } + predicate = ExpressionUtils.and(predicate, builder); } - if (deptId != null) { - predicate = ExpressionUtils.and(predicate, qEmp.deptId.eq(deptId)); - } - if (mobile != null) { - predicate = ExpressionUtils.and(predicate, qEmp.mobile.eq(mobile)); - } - QueryResults queryResults = queryFactory.selectFrom(qEmp).where(predicate).offset(pageData.getOffset()) +// if (deptId != null) { +// predicate = ExpressionUtils.and(predicate, qEmp.deptId.eq(deptId)); +// } + QueryResults tupleQueryResults = queryFactory.select(qEmp, qDept.name).from(qEmp).leftJoin(qDept).on(qEmp.deptId.eq(qDept.id)).where(predicate).offset(pageData.getOffset()) .limit(pageData.getSize()).fetchResults(); - pageData.setResults(queryResults.getResults()); - pageData.setTotal(queryResults.getTotal()); + List collect = tupleQueryResults.getResults().stream().map(x -> { + EmpVo vo = new EmpVo(); + BeanUtils.copyProperties(x.get(0, Emp.class), vo); + vo.setDeptName(x.get(1, String.class)); + return vo; + }).collect(Collectors.toList()); + pageData.setResults(collect); + pageData.setTotal(tupleQueryResults.getTotal()); return pageData; } + + public Boolean hasEmp(Integer id) { + QEmp qEmp = QEmp.emp; + long l = queryFactory.selectFrom(qEmp).where(qEmp.deptId.eq(id)).fetchCount(); + return l > 0; + } } diff --git a/src/main/java/com/aiprose/querydsl/vos/DeptTreeVo.java b/src/main/java/com/aiprose/querydsl/vos/DeptTreeVo.java index 2fc4cf2..4eaaf18 100644 --- a/src/main/java/com/aiprose/querydsl/vos/DeptTreeVo.java +++ b/src/main/java/com/aiprose/querydsl/vos/DeptTreeVo.java @@ -17,9 +17,10 @@ import java.util.List; */ @Data public class DeptTreeVo implements Serializable { + private Integer id; private String name; private String loc; private Integer pid; private Date cdate; - private List child; + private List children; } diff --git a/src/main/java/com/aiprose/querydsl/vos/EmpVo.java b/src/main/java/com/aiprose/querydsl/vos/EmpVo.java new file mode 100644 index 0000000..439acc4 --- /dev/null +++ b/src/main/java/com/aiprose/querydsl/vos/EmpVo.java @@ -0,0 +1,28 @@ +package com.aiprose.querydsl.vos; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.persistence.Column; +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + * @version 1.0 + * @Auther: liuchao + * @company 北京中经网软件有限公司 + * @Date: 2020/9/15 + */ +@Data +public class EmpVo implements Serializable { + private Integer id; + private String empName; + private String deptName; + private Long mobile; + private Integer deptId; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date joindate; +}