Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public Page<?> findAll(PatientClassUpQueryProps queryProps) {
- Map<String, String> params = new HashMap<>();
- Map<String, Integer> paramsLong = new HashMap<>();
- StringBuilder rootBuilder = new StringBuilder();
- rootBuilder.append("from PatientFlat p ");
- StringBuilder joinBuilder = new StringBuilder();
- StringBuilder whereBuilder = new StringBuilder();
- StringBuilder orderBuilder = new StringBuilder();
- StringJoiner likeQField = new StringJoiner("\n");
- try {
- Long.parseLong(queryProps.getQ());
- likeQField.add("0");
- } catch (Exception e) {
- if (queryProps.getQ() != null && !queryProps.getQ().equals("")) {
- likeQField.add("CASE");
- likeQField.add("WHEN replace(UPPER(p.lastName), \'" + queryProps.getQ().toUpperCase() + "\') <> UPPER(p.lastName) THEN 3");
- likeQField.add("WHEN replace(UPPER(p.firstName), \'" + queryProps.getQ().toUpperCase() + "\') <> UPPER(p.firstName) THEN 2");
- likeQField.add("WHEN replace(UPPER(p.middleName), \'" + queryProps.getQ().toUpperCase() + "\') <> UPPER(p.middleName) THEN 1");
- likeQField.add("ELSE 0");
- likeQField.add("END");
- } else {
- likeQField.add("0");
- }
- }
- if (queryProps.getSort() != null &&
- !queryProps.getSort().equals("")
- ) {
- String[] orderAtr = queryProps.getSort().split(",");
- String[] orderTableAtr = orderAtr[0].split(".");
- orderBuilder = new StringBuilder();
- if (orderTableAtr.length == 2) {
- orderBuilder.append(" ORDER BY " + orderAtr[0] + " " + orderAtr[1]);
- } else {
- orderBuilder.append(" ORDER BY p." + orderAtr[0] + " " + orderAtr[1]);
- }
- } else {
- orderBuilder.append(" ORDER BY 1 DESC");
- }
- PatientPredicate patientPredicate = getPatientPredicate(queryProps);
- whereBuilder.append(patientPredicate.getWhereBuilder().toString());
- joinBuilder.append(patientPredicate.getJoinBuilder().toString());
- joinBuilder.append(" left join KladrFlatNoAuditLazy k on p.factAddress=k.id");
- joinBuilder.append(" left join KladrRegionFlat kr on k.kladrRegion=kr.id");
- joinBuilder.append(" left join KladrAreaFlatNoAudit ka on k.kladrArea=ka.id");
- joinBuilder.append(" left join KladrCityFlatNoAudit kc on k.kladrCity=kc.id");
- joinBuilder.append(" left join KladrLocalityFlatNoAudit kl on k.kladrLocality=kl.id");
- joinBuilder.append(" left join KladrStreetFlatNoAudit ks on k.kladrStreet=ks.id");
- joinBuilder.append(" left join SectorTypeFlatNoAudit st on p.sectorType=st.id");
- joinBuilder.append(" left join SocialGroupFlatNoAudit sg on p.socialGroup=sg.id");
- joinBuilder.append(" left join RiskGroupTypeFlatNoAudit rgt on p.riskGroupType=rgt.id");
- joinBuilder.append(" left join StudyPlaceFlatNoAudit sp on p.studyPlace=sp.id");
- joinBuilder.append(" left join WorkPlaceFlatNoAudit wp on p.workPlace=wp.id");
- joinBuilder.append(" left join WorkSpecialityFlatNoAudit wps on p.workSpeciality=wps.id");
- joinBuilder.append(" left join StudyGroupFlatNoAudit spg on p.studyGroup=spg.id");
- joinBuilder.append(" left join EmptySnilsReason esr on p.emptySnilsReason=esr.id");
- // pagination
- Pageable pageable = new PageRequest(1, Integer.MAX_VALUE);
- final String queryStr = "Select count(p) " + rootBuilder.toString() + joinBuilder.toString() + whereBuilder.toString() + orderBuilder.toString();
- Query query = entityManager.createQuery(queryStr);
- for (Map.Entry<String, Integer> map : patientPredicate.getParamsLong().entrySet()
- ) {
- query.setParameter(map.getKey(), map.getValue());
- }
- for (Map.Entry<String, String> map : patientPredicate.getParams().entrySet()
- ) {
- query.setParameter(map.getKey(), map.getValue());
- }
- Long totalSize = (Long) query.getResultList().get(0);
- query = entityManager.createQuery("SELECT " + likeQField +
- ", p, k, kr, ka, kc, kl, ks, st, sg, rgt, sp, wp, wps, spg, esr " + rootBuilder.toString() +
- joinBuilder.toString() + whereBuilder.toString() + orderBuilder.toString());
- if (queryProps.getCurPage() != null && !queryProps.getCurPage().equals("")
- && queryProps.getPerPage() != null && !queryProps.getPerPage().equals("")) {
- pageable = new PageRequest(Integer.valueOf(queryProps.getCurPage()), Integer.valueOf(queryProps.getPerPage()));
- query.setFirstResult((pageable.getPageNumber()) * pageable.getPageSize());
- query.setMaxResults(pageable.getPageSize());
- }
- for (Map.Entry<String, Integer> map : patientPredicate.getParamsLong().entrySet()
- ) {
- query.setParameter(map.getKey(), map.getValue());
- }
- for (Map.Entry<String, String> map : patientPredicate.getParams().entrySet()
- ) {
- query.setParameter(map.getKey(), map.getValue());
- }
- List<?> resultList = query.getResultList();
- if (resultList.size() > 0 && !(resultList.get(0) instanceof PatientFlat)) {
- List<PatientFlat> patients = new ArrayList<>();
- for (Object wrongPatient : resultList) {
- Object[] arrayFromWrongPatient = (Object[]) wrongPatient;
- PatientFlat patient = (PatientFlat) arrayFromWrongPatient[1];
- patient.setFactAddress((KladrFlatNoAuditLazy) arrayFromWrongPatient[2]);
- if (patient.getFactAddress() != null) {
- patient.getFactAddress().setKladrRegion(
- (KladrRegionFlat) arrayFromWrongPatient[3]
- );
- patient.getFactAddress().setKladrArea(
- (KladrAreaFlatNoAudit) arrayFromWrongPatient[4]
- );
- patient.getFactAddress().setKladrCity(
- (KladrCityFlatNoAudit) arrayFromWrongPatient[5]
- );
- patient.getFactAddress().setKladrLocality(
- (KladrLocalityFlatNoAudit) arrayFromWrongPatient[6]
- );
- patient.getFactAddress().setKladrStreet(
- (KladrStreetFlatNoAudit) arrayFromWrongPatient[7]
- );
- }
- // эта хрень не мапится врантайм, тока при дебаге
- Hibernate.initialize(patient.getVaccineCards());
- patient.setSectorType((SectorTypeFlatNoAudit) arrayFromWrongPatient[8]);
- patient.setSocialGroup((SocialGroupFlatNoAudit) arrayFromWrongPatient[9]);
- patient.setRiskGroupType((RiskGroupTypeFlatNoAudit) arrayFromWrongPatient[10]);
- patient.setStudyPlace((StudyPlaceFlatNoAudit) arrayFromWrongPatient[11]);
- patient.setWorkPlace((WorkPlaceFlatNoAudit) arrayFromWrongPatient[12]);
- patient.setWorkSpeciality((WorkSpecialityFlatNoAudit) arrayFromWrongPatient[13]);
- patient.setStudyGroup((StudyGroupFlatNoAudit) arrayFromWrongPatient[14]);
- patient.setEmptySnilsReason((EmptySnilsReason) arrayFromWrongPatient[15]);
- patients.add(patient);
- }
- return new PageImpl<>(patients, pageable, totalSize);
- } else {
- return new PageImpl<>(resultList, pageable, totalSize);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement