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 dateQuery() { cardInfoTableLock.lock(); try { Specification specification = (root, query, cb) -> { List predicates = new ArrayList<>(); predicates.add(cb.equal(root.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.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 all = cardInfoRepository.findAll(specification, pageable); return all.toList(); } finally { cardInfoTableLock.unlock(); } } public List dateQuery(int state) { cardInfoTableLock.lock(); try { Specification specification = (root, query, cb) -> { List predicates = new ArrayList<>(); predicates.add(cb.equal(root.get("state"), state)); return cb.and(predicates.toArray(new Predicate[predicates.size()])); }; List all = cardInfoRepository.findAll(specification); return all; } finally { cardInfoTableLock.unlock(); } } public List dateQueryByInpNo(String inpNo) { cardInfoTableLock.lock(); try { Specification specification = (root, query, cb) -> { List predicates = new ArrayList<>(); predicates.add(cb.equal(root.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 all = cardInfoRepository.findAll(specification, pageable); return all.toList(); } finally { cardInfoTableLock.unlock(); } } public void updateBatch(List cardInfos) { cardInfoTableLock.lock(); try { for (CardInfo cardInfo : cardInfos) { cardInfo.setState(1); } cardInfoRepository.saveAll(cardInfos); } finally { cardInfoTableLock.unlock(); } } public void updateBatchState(List cardInfos, Integer state) { cardInfoTableLock.lock(); try { List 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 getPictures(String FileId) { Specification specification = (root, query, cb) -> { List predicates = new ArrayList<>(); predicates.add(cb.equal(root.get("fileid"), FileId)); return cb.and(predicates.toArray(new Predicate[predicates.size()])); }; List 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(); } } }