public ChiticPageResponse<WorkSheetResponse> getListPurviewWorkSheet(Integer pageNo, Integer pageSize,Integer workSheetState,Integer checkState,String workSheetName,String deveName,Long dutyGroup,Long dutyUser,String position) {
        Specification<WorkSheet> specification = (Specification <WorkSheet>) (root, query, cb) -> {
            List <Predicate> predicates = new ArrayList <>();
            Long userId = CurrentTokenHolder.get().getId();
            List<WorkSheetGroupUser> byUserId = workSheetGroupUserRepository.findByUserId(userId);
            Set<Integer> set = byUserId.stream().map(WorkSheetGroupUser::getRights).collect(Collectors.toSet());

            if(!set.contains(WorkSheetRightsEnum.HIGN_VIP.getCode()) && set.contains(WorkSheetRightsEnum.GENERAL_VIP.getCode())){
                //只能查看自己创建的工单
                predicates.add(cb.equal(root.get("createUser"), userId));
            }
            if(!set.contains(WorkSheetRightsEnum.HIGN_VIP.getCode()) && set.contains(WorkSheetRightsEnum.FIX_USER.getCode())){
                //只能查看责任人是自己或者责任组是当前用户的所在组
                List<WorkSheetGroupUser> byUserGroup = workSheetGroupUserRepository.findByUserId(userId);
                Set<Long> setGroup = byUserGroup.stream().map(WorkSheetGroupUser::getGroupId).collect(Collectors.toSet());
                CriteriaBuilder.In<Object> dutyGroup1 = cb.in(root.get("dutyGroup")).value(setGroup);
                Predicate dutyUser1 = cb.equal(root.get("dutyUser"), userId);
                predicates.add(cb.and(cb.or(dutyGroup1,dutyUser1)));
            }
            //查询删除标识为0 的
            predicates.add(cb.equal(root.get("isDelete"), 0));
            if (null != workSheetState) {
                predicates.add(cb.equal(root.get("workSheetState"), workSheetState));
            }
            if (null != checkState) {
                predicates.add(cb.equal(root.get("checkState"), checkState));
            }
            if (null != dutyGroup) {
                predicates.add(cb.equal(root.get("dutyGroup"), dutyGroup));
            }
            if (null != dutyUser) {
                predicates.add(cb.equal(root.get("dutyUser"), dutyUser));
            }
            if(StringUtils.isNotBlank(workSheetName)){
                predicates.add(cb.like(root.get("workSheetName"), "%" + workSheetName + "%"));
            }
            if(StringUtils.isNotBlank(deveName)){
                predicates.add(cb.like(root.get("deveName"), "%" + deveName + "%"));
            }
            if(StringUtils.isNotBlank(position)){
                predicates.add(cb.like(root.get("position"), "%" + position + "%"));
            }
            query.where(predicates.toArray(new Predicate[predicates.size()]));
            return query.getRestriction();
        };
        PageRequest pageRequest = PageRequest.of(pageNo, pageSize,Sort.by(Sort.Direction.DESC,"createTime")); //按照createTime排序
        Page <WorkSheet> page = workSheetRepository.findAll(specification, pageRequest);
        List<WorkSheet> content = page.getContent();
        List<WorkSheetResponse> workSheetListResponse = CopyUtil.copyList(content, WorkSheetResponse.class);
        return ChiticPageResponse.of(workSheetListResponse, page.getTotalElements(), page.getTotalPages());
    }

 

JPA新增、修改的坑

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

1,新增时,如果数据库有默认值字段,会将其置空。解决办法:在service层再将默认值手动赋值一下,如下:

//工单状态:0 待下达
copy.setWorkSheetState(0);
//验收状态:0未验收
copy.setCheckState(0);
//工单来源默认0:手动输入
copy.setWorkSheetSource(0);
//工单下达次数:0
copy.setAssignCount(0);
workSheetRepository.save(copy);

2,修改时,如果只传部分字段,会将未传的字段置空。解决办法

1,根绝id查询对象的值,在此基础上赋值
Optional<WorkSheet> workSheetOptional = workSheetRepository.findById(request.getId());
if (!workSheetOptional.isPresent()) {
throw ChiticException.of("异常");
}
WorkSheet workSheet = workSheetOptional.get();
//赋值
workSheet.set(前台传过来的值);
if(null != request.getRemarks()){
workSheet.setRemarks(request.getRemarks());
}
workSheetRepository.save(workSheet);
还有一种注解的方式,动态插入、更新,本人测试过,可以实现(只是不知道有没有其他的影响)
@DynamicInsert
@DynamicUpdate
 
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄