Advertisement
Guest User

Untitled

a guest
Nov 12th, 2019
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.68 KB | None | 0 0
  1.     public Page<?> findAll(PatientClassUpQueryProps queryProps) {
  2.  
  3.         Map<String, String> params = new HashMap<>();
  4.         Map<String, Integer> paramsLong = new HashMap<>();
  5.  
  6.         StringBuilder rootBuilder = new StringBuilder();
  7.         rootBuilder.append("from PatientFlat p ");
  8.  
  9.  
  10.         StringBuilder joinBuilder = new StringBuilder();
  11.         StringBuilder whereBuilder = new StringBuilder();
  12.         StringBuilder orderBuilder = new StringBuilder();
  13.  
  14.         StringJoiner likeQField = new StringJoiner("\n");
  15.  
  16.         try {
  17.             Long.parseLong(queryProps.getQ());
  18.             likeQField.add("0");
  19.         } catch (Exception e) {
  20.             if (queryProps.getQ() != null && !queryProps.getQ().equals("")) {
  21.                 likeQField.add("CASE");
  22.                 likeQField.add("WHEN replace(UPPER(p.lastName), \'" + queryProps.getQ().toUpperCase() + "\') <> UPPER(p.lastName)     THEN 3");
  23.                 likeQField.add("WHEN replace(UPPER(p.firstName), \'" + queryProps.getQ().toUpperCase() + "\') <> UPPER(p.firstName)   THEN 2");
  24.                 likeQField.add("WHEN replace(UPPER(p.middleName), \'" + queryProps.getQ().toUpperCase() + "\') <> UPPER(p.middleName) THEN 1");
  25.                 likeQField.add("ELSE 0");
  26.                 likeQField.add("END");
  27.             } else {
  28.                 likeQField.add("0");
  29.             }
  30.         }
  31.  
  32.         if (queryProps.getSort() != null &&
  33.             !queryProps.getSort().equals("")
  34.             ) {
  35.             String[] orderAtr = queryProps.getSort().split(",");
  36.             String[] orderTableAtr = orderAtr[0].split(".");
  37.             orderBuilder = new StringBuilder();
  38.             if (orderTableAtr.length == 2) {
  39.                 orderBuilder.append(" ORDER BY " + orderAtr[0] + " " + orderAtr[1]);
  40.             } else {
  41.                 orderBuilder.append(" ORDER BY p." + orderAtr[0] + " " + orderAtr[1]);
  42.             }
  43.         } else {
  44.             orderBuilder.append(" ORDER BY 1 DESC");
  45.         }
  46.  
  47.         PatientPredicate patientPredicate = getPatientPredicate(queryProps);
  48.         whereBuilder.append(patientPredicate.getWhereBuilder().toString());
  49.         joinBuilder.append(patientPredicate.getJoinBuilder().toString());
  50.  
  51.         joinBuilder.append(" left join KladrFlatNoAuditLazy k on p.factAddress=k.id");
  52.         joinBuilder.append(" left join KladrRegionFlat kr on k.kladrRegion=kr.id");
  53.         joinBuilder.append(" left join KladrAreaFlatNoAudit ka on k.kladrArea=ka.id");
  54.         joinBuilder.append(" left join KladrCityFlatNoAudit kc on k.kladrCity=kc.id");
  55.         joinBuilder.append(" left join KladrLocalityFlatNoAudit kl on k.kladrLocality=kl.id");
  56.         joinBuilder.append(" left join KladrStreetFlatNoAudit ks on k.kladrStreet=ks.id");
  57.         joinBuilder.append(" left join SectorTypeFlatNoAudit st on p.sectorType=st.id");
  58.         joinBuilder.append(" left join SocialGroupFlatNoAudit sg on p.socialGroup=sg.id");
  59.         joinBuilder.append(" left join RiskGroupTypeFlatNoAudit rgt on p.riskGroupType=rgt.id");
  60.         joinBuilder.append(" left join StudyPlaceFlatNoAudit sp on p.studyPlace=sp.id");
  61.         joinBuilder.append(" left join WorkPlaceFlatNoAudit wp on p.workPlace=wp.id");
  62.         joinBuilder.append(" left join WorkSpecialityFlatNoAudit wps on p.workSpeciality=wps.id");
  63.         joinBuilder.append(" left join StudyGroupFlatNoAudit spg on p.studyGroup=spg.id");
  64.         joinBuilder.append(" left join EmptySnilsReason esr on p.emptySnilsReason=esr.id");
  65.  
  66. //        pagination
  67.         Pageable pageable = new PageRequest(1, Integer.MAX_VALUE);
  68.         final String queryStr = "Select count(p) " + rootBuilder.toString() + joinBuilder.toString() + whereBuilder.toString() + orderBuilder.toString();
  69.         Query query = entityManager.createQuery(queryStr);
  70.  
  71.         for (Map.Entry<String, Integer> map : patientPredicate.getParamsLong().entrySet()
  72.             ) {
  73.             query.setParameter(map.getKey(), map.getValue());
  74.         }
  75.         for (Map.Entry<String, String> map : patientPredicate.getParams().entrySet()
  76.             ) {
  77.             query.setParameter(map.getKey(), map.getValue());
  78.         }
  79.  
  80.         Long totalSize = (Long) query.getResultList().get(0);
  81.  
  82.         query = entityManager.createQuery("SELECT " + likeQField +
  83.             ", p, k, kr, ka, kc, kl, ks, st, sg, rgt, sp, wp, wps, spg, esr " + rootBuilder.toString() +
  84.             joinBuilder.toString() + whereBuilder.toString() + orderBuilder.toString());
  85.  
  86.         if (queryProps.getCurPage() != null && !queryProps.getCurPage().equals("")
  87.             && queryProps.getPerPage() != null && !queryProps.getPerPage().equals("")) {
  88.             pageable = new PageRequest(Integer.valueOf(queryProps.getCurPage()), Integer.valueOf(queryProps.getPerPage()));
  89.             query.setFirstResult((pageable.getPageNumber()) * pageable.getPageSize());
  90.             query.setMaxResults(pageable.getPageSize());
  91.         }
  92.  
  93.         for (Map.Entry<String, Integer> map : patientPredicate.getParamsLong().entrySet()
  94.             ) {
  95.             query.setParameter(map.getKey(), map.getValue());
  96.         }
  97.         for (Map.Entry<String, String> map : patientPredicate.getParams().entrySet()
  98.             ) {
  99.             query.setParameter(map.getKey(), map.getValue());
  100.         }
  101.  
  102.         List<?> resultList = query.getResultList();
  103.         if (resultList.size() > 0 && !(resultList.get(0) instanceof PatientFlat)) {
  104.             List<PatientFlat> patients = new ArrayList<>();
  105.             for (Object wrongPatient : resultList) {
  106.                 Object[] arrayFromWrongPatient = (Object[]) wrongPatient;
  107.  
  108.                 PatientFlat patient = (PatientFlat) arrayFromWrongPatient[1];
  109.                 patient.setFactAddress((KladrFlatNoAuditLazy) arrayFromWrongPatient[2]);
  110.                 if (patient.getFactAddress() != null) {
  111.                     patient.getFactAddress().setKladrRegion(
  112.                         (KladrRegionFlat) arrayFromWrongPatient[3]
  113.                     );
  114.                     patient.getFactAddress().setKladrArea(
  115.                         (KladrAreaFlatNoAudit) arrayFromWrongPatient[4]
  116.                     );
  117.                     patient.getFactAddress().setKladrCity(
  118.                         (KladrCityFlatNoAudit) arrayFromWrongPatient[5]
  119.                     );
  120.                     patient.getFactAddress().setKladrLocality(
  121.                         (KladrLocalityFlatNoAudit) arrayFromWrongPatient[6]
  122.                     );
  123.                     patient.getFactAddress().setKladrStreet(
  124.                         (KladrStreetFlatNoAudit) arrayFromWrongPatient[7]
  125.                     );
  126.                 }
  127.                 // эта хрень не мапится врантайм, тока при дебаге
  128.                 Hibernate.initialize(patient.getVaccineCards());
  129.                 patient.setSectorType((SectorTypeFlatNoAudit) arrayFromWrongPatient[8]);
  130.                 patient.setSocialGroup((SocialGroupFlatNoAudit) arrayFromWrongPatient[9]);
  131.                 patient.setRiskGroupType((RiskGroupTypeFlatNoAudit) arrayFromWrongPatient[10]);
  132.                 patient.setStudyPlace((StudyPlaceFlatNoAudit) arrayFromWrongPatient[11]);
  133.                 patient.setWorkPlace((WorkPlaceFlatNoAudit) arrayFromWrongPatient[12]);
  134.                 patient.setWorkSpeciality((WorkSpecialityFlatNoAudit) arrayFromWrongPatient[13]);
  135.                 patient.setStudyGroup((StudyGroupFlatNoAudit) arrayFromWrongPatient[14]);
  136.                 patient.setEmptySnilsReason((EmptySnilsReason) arrayFromWrongPatient[15]);
  137.  
  138.                 patients.add(patient);
  139.             }
  140.             return new PageImpl<>(patients, pageable, totalSize);
  141.         } else {
  142.             return new PageImpl<>(resultList, pageable, totalSize);
  143.         }
  144.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement