实例方法调用另一个实例方法(部分代码)
public List<ResourceDeptPageResponse> deptPage(ResourceDeptPageRequest request){
Specification specification = getSpecification(request);
}
private Specification getSpecification(ResourceDeptPageRequest request) {
//构造查询条件
Specification<ResourceDept> specification = (Specification<ResourceDept>) (root, query, cb) -> {
List<Predicate> predicateList = new ArrayList<>();
if (ObjectUtils.isNotEmpty(request.getSubCompanyID())) {
predicateList.add(cb.equal(root.get("subCompanyID"), request.getSubCompanyID()));
}
predicateList.add(cb.equal(root.get("status"), BaseConstant.STATUS_USE));
if (ObjectUtils.isNotEmpty(request.getDeptName())) {
predicateList.add(cb.like(root.get("deptName"), "%" + request.getDeptName() + "%"));
}
query.where(cb.and(predicateList.toArray(new Predicate[predicateList.size()])));
return query.getRestriction();
};
return specification;
}
predicateList.add(cb.in(root.get("personID")).value(personIDs));//集合查询
直接用1.8新特性(部分代码)
public PageResponse<AccountChangeDetailResponse> accountChangeDetail(BaseReportRequest request) {
//找资源
Specification<ResourcePerson> specificationPerson = (Specification<ResourcePerson>) (root, query, cb) -> {
List<Predicate> predicateList = new ArrayList<>();
predicateList.add(cb.equal(root.get("status"), BaseConstant.STATUS_USE));
if (ObjectUtils.isNotEmpty(request.getName())) {
predicateList.add(cb.or(cb.like(root.get("nickName"), "%" + request.getName().trim() + "%"), cb.like(root.get("spellCode"), "%" + request.getName().trim() + "%")));
}//嵌套使用
if (ObjectUtils.isNotEmpty(request.getGroupID())) {
predicateList.add(cb.equal(root.get("groupID"), request.getGroupID()));
}
if (ObjectUtils.isNotEmpty(request.getSubCompanyID())) {
predicateList.add(cb.equal(root.get("subCompanyID"), request.getSubCompanyID()));
}
query.where(cb.and(predicateList.toArray(new Predicate[predicateList.size()])));
return query.getRestriction();
};
List<ResourcePerson> resourcePersonList = resourcePersonRepository.findAll(specificationPerson);
也可以使用固定的接口方法
List<ResourcePerson> personList = personRepository.findAllBySubCompanyIDAndDeptIDAndStatus(subCompanyID, deptID, BaseConstant.STATUS_USE);
当遇到统计的时候需要使用qResourcePerson
QResourceAccountMoneyRecord qResourceAccountMoneyRecord = QResourceAccountMoneyRecord.resourceAccountMoneyRecord;
JPAQuery<ResourceAccountMoneyRecord> countQuery = jpaQueryFactory.select(qResourceAccountMoneyRecord).from(qResourceAccountMoneyRecord);
countQuery.where(qResourceAccountMoneyRecord.personID.in(personIDs));
if (ObjectUtils.isNotEmpty(request.getRecordType()) && ObjectUtils.convertToInteger(request.getRecordType()) != 5) {
AccountRecordTypeEnum recordType = AccountRecordTypeEnum.getEnum(request.getRecordType());
countQuery.where(qResourceAccountMoneyRecord.recordType.eq(recordType));
}
if (ObjectUtils.isNotEmpty(request.getStartBusinessDate()) && ObjectUtils.isNotEmpty(request.getEndBusinessDate())) {
countQuery.where(qResourceAccountMoneyRecord.createTime.between(request.getStartBusinessDate(), request.getEndBusinessDate()));
}
List<AccountChangeDetailResponse> accountChangeDetailResponseList = countQuery.select(qResourceAccountMoneyRecord.startMoney.sum(),qResourceAccountMoneyRecord.costMoney.sum(),qResourceAccountMoneyRecord.endMoney.sum()).from(qResourceAccountMoneyRecord)
.fetch().stream().map(x -> {
AccountChangeDetailResponse result = new AccountChangeDetailResponse();
result.setCostMoney(ObjectUtils.isEmpty(x.get(1, Integer.class)) ? 0 : x.get(1, Integer.class));
result.setEndMoney(ObjectUtils.isEmpty(x.get(2, Integer.class)) ? 0 : x.get(2, Integer.class));
return result;
}).collect(Collectors.toList());//如果只统计一个的时候会报错,这时可以在里面添加一个-1来解决