|
|
@ -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<Emp,Integer> { |
|
|
|
public class EmpService extends BasicServiceImpl<Emp, Integer> { |
|
|
|
|
|
|
|
@Autowired |
|
|
|
private JPAQueryFactory queryFactory; |
|
|
@ -46,26 +53,40 @@ public class EmpService extends BasicServiceImpl<Emp,Integer> { |
|
|
|
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) { |
|
|
|
} |
|
|
|
if (deptId != null) { |
|
|
|
predicate = ExpressionUtils.and(predicate, qEmp.deptId.eq(deptId)); |
|
|
|
predicate = ExpressionUtils.and(predicate, builder); |
|
|
|
} |
|
|
|
if (mobile != null) { |
|
|
|
predicate = ExpressionUtils.and(predicate, qEmp.mobile.eq(mobile)); |
|
|
|
} |
|
|
|
QueryResults<Emp> queryResults = queryFactory.selectFrom(qEmp).where(predicate).offset(pageData.getOffset()) |
|
|
|
// if (deptId != null) {
|
|
|
|
// predicate = ExpressionUtils.and(predicate, qEmp.deptId.eq(deptId));
|
|
|
|
// }
|
|
|
|
QueryResults<Tuple> 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<EmpVo> 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; |
|
|
|
} |
|
|
|
} |
|
|
|