You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
LianzhongCollect/src/main/java/com/jiashi/dao/DataQuery.java

182 lines
5.9 KiB
Java

package com.jiashi.dao;
import com.jiashi.service.CardInfo;
import com.jiashi.service.Picture;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Repository;
import org.springframework.util.StringUtils;
import javax.persistence.criteria.Predicate;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
@Repository
@Slf4j
public class DataQuery {
@Autowired
private CardInfoRepository cardInfoRepository;
@Autowired
private PictureRepository pictureRepository;
@Value("${lz.disdate-range:}")
private String disdateRange;
private static final Lock cardInfoTableLock = new ReentrantLock();
public List<CardInfo> dateQuery() {
cardInfoTableLock.lock();
try {
Specification<CardInfo> specification = (root, query, cb) -> {
List<Predicate> predicates = new ArrayList<>();
predicates.add(cb.equal(root.<String>get("state"), 0));
if (StringUtils.hasText(disdateRange)) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String[] split = disdateRange.split(",");
try {
predicates.add(cb.between(root.<Date>get("outdate"), simpleDateFormat.parse(split[0]), simpleDateFormat.parse(split[1])));
} catch (ParseException e) {
log.error("出院时间条件错误:" + disdateRange + "," + e.getMessage(), e);
}
}
return cb.and(predicates.toArray(new Predicate[predicates.size()]));
};
Sort.Order sortCreateTime = Sort.Order.asc("outdate");
Sort sort = Sort.by(sortCreateTime);
Pageable pageable = PageRequest.of(0, 1000, sort);
Page<CardInfo> all = cardInfoRepository.findAll(specification, pageable);
return all.toList();
} finally {
cardInfoTableLock.unlock();
}
}
public List<CardInfo> dateQuery(int state) {
cardInfoTableLock.lock();
try {
Specification<CardInfo> specification = (root, query, cb) -> {
List<Predicate> predicates = new ArrayList<>();
predicates.add(cb.equal(root.<String>get("state"), state));
return cb.and(predicates.toArray(new Predicate[predicates.size()]));
};
List<CardInfo> all = cardInfoRepository.findAll(specification);
return all;
} finally {
cardInfoTableLock.unlock();
}
}
public List<CardInfo> dateQueryByInpNo(String inpNo) {
cardInfoTableLock.lock();
try {
Specification<CardInfo> specification = (root, query, cb) -> {
List<Predicate> predicates = new ArrayList<>();
predicates.add(cb.equal(root.<String>get("patno"), inpNo));
return cb.and(predicates.toArray(new Predicate[predicates.size()]));
};
Sort.Order sortCreateTime = Sort.Order.asc("outdate");
Sort sort = Sort.by(sortCreateTime);
Pageable pageable = PageRequest.of(0, 1000, sort);
Page<CardInfo> all = cardInfoRepository.findAll(specification, pageable);
return all.toList();
} finally {
cardInfoTableLock.unlock();
}
}
public void updateBatch(List<CardInfo> cardInfos) {
cardInfoTableLock.lock();
try {
for (CardInfo cardInfo : cardInfos) {
cardInfo.setState(1);
}
cardInfoRepository.saveAll(cardInfos);
} finally {
cardInfoTableLock.unlock();
}
}
public void updateBatchState(List<CardInfo> cardInfos, Integer state) {
cardInfoTableLock.lock();
try {
List<String> ids = new ArrayList<>();
for (CardInfo cardInfo : cardInfos) {
String id = cardInfo.getId();
ids.add(id);
}
cardInfoRepository.updateState(ids, state);
} finally {
cardInfoTableLock.unlock();
}
}
public void updateBatchState(CardInfo cardInfo, Integer state) {
cardInfoTableLock.lock();
try {
cardInfoRepository.updateState(cardInfo.getId(), state);
} finally {
cardInfoTableLock.unlock();
}
}
public List<Picture> getPictures(String FileId) {
Specification<Picture> specification = (root, query, cb) -> {
List<Predicate> predicates = new ArrayList<>();
predicates.add(cb.equal(root.<String>get("fileid"), FileId));
return cb.and(predicates.toArray(new Predicate[predicates.size()]));
};
List<Picture> all = pictureRepository.findAll(specification);
return all;
}
public void updateBatchState(CardInfo cardInfo, Integer state, String desc) {
cardInfoTableLock.lock();
try {
cardInfoRepository.updateState(cardInfo.getId(), state, desc);
} finally {
cardInfoTableLock.unlock();
}
}
public void updatePicPath(CardInfo cardInfo, String findpicpath) {
cardInfoTableLock.lock();
try {
cardInfoRepository.updatePicPath(cardInfo.getId(), findpicpath);
} finally {
cardInfoTableLock.unlock();
}
}
}