diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/TestController.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/TestController.java index 4a4c6d3..394f30c 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/TestController.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/TestController.java @@ -45,7 +45,6 @@ import org.springframework.web.bind.annotation.ResponseBody; import java.io.File; import java.io.IOException; import java.util.*; -import java.util.concurrent.Future; /** * Created by Zhang.Rui on 2016/4/8. @@ -148,23 +147,27 @@ public class TestController { //排查本院隐藏建档 patientsQuery.setExtEnable(false); patientsQuery.setBuildTypeNot(1); + // patientsQuery.setServiceType(ServiceTypeEnums.ADD_SERVICE.getId()); patientsQuery.setYn(YnEnums.YES.getId()); patientsQuery.setType(1); int patientCount = patientsService.queryPatientCount(patientsQuery); System.out.println("一共需要处理数据量:"+patientCount); - //预计开启5个线程处理,计算每个线程需要处理的数据量 - int batchSize = patientCount/5; + //计算每个线程需要处理的数据量,默认1000,必须是分页条数的倍数,不然多线程处理的数据会重复 + int batchSize = 1000; + if(patientCount>10000){ + batchSize = 10000; + } + int end = 0; - List listFuture = new ArrayList<>(); for (int i = 0; i < patientCount; i += batchSize) { end = (end + batchSize); if (end > patientCount) { - end = patientCount+1; + end = patientCount; } System.out.println("线程处理数据量:"+i+"--至--"+end); - listFuture.add(commonThreadPool.submit(new BuildSerToPatientSerWorker(i, end,patientsService,patientServiceService,isSkip,isZjzx,batchSize,patientCount))); + commonThreadPool.submit(new BuildSerToPatientSerWorker(i, end,patientsService,patientServiceService,isSkip,isZjzx,batchSize,patientCount)); } // for (Future f : listFuture) { diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/BuildSerToPatientSerWorker.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/BuildSerToPatientSerWorker.java index 8b28d46..ba18952 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/BuildSerToPatientSerWorker.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/BuildSerToPatientSerWorker.java @@ -5,6 +5,7 @@ import com.lyms.platform.common.enums.PatientSerEnums; import com.lyms.platform.common.enums.ServiceStatusEnums; import com.lyms.platform.common.enums.ServiceTypeEnums; import com.lyms.platform.common.enums.YnEnums; +import com.lyms.platform.common.utils.StringUtils; import com.lyms.platform.operate.web.utils.CollectionUtils; import com.lyms.platform.permission.model.PatientService; import com.lyms.platform.permission.model.PatientServiceQuery; @@ -12,7 +13,9 @@ import com.lyms.platform.permission.service.PatientServiceService; import com.lyms.platform.pojo.Patients; import com.lyms.platform.query.PatientsQuery; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.UUID; import java.util.concurrent.Callable; @@ -54,16 +57,15 @@ public class BuildSerToPatientSerWorker implements Callable { @Override public Object call() { try { + Map patientsMap = new HashMap<>(); + for (int i = startIndex; i < endIndex; i += batchSize) { PatientsQuery patientsQuery = new PatientsQuery(); - if(i+batchSize>endIndex){ - patientsQuery.setLimit(endIndex-i); - }else{ - patientsQuery.setLimit(batchSize); - } - System.out.println("总数据量:"+allCount+",正在处理第:" + i+"--到--"+(i+batchSize)+",limit:"+patientsQuery.getLimit()); - + patientsQuery.setLimit(batchSize); patientsQuery.setPage((i + batchSize) / batchSize); + + System.out.println("总数据量:"+allCount+",正在处理第:" + i+"--到--"+(i+batchSize)+",page:"+patientsQuery.getPage()+",limit:"+patientsQuery.getLimit()); + //排查本院隐藏建档 patientsQuery.setExtEnable(false); patientsQuery.setBuildTypeNot(1); @@ -73,6 +75,13 @@ public class BuildSerToPatientSerWorker implements Callable { List patients = patientsService.queryPatient(patientsQuery); for (Patients pt : patients) { + if(StringUtils.isEmpty(pt.getId())){ + System.out.println("建档主键id为空:"+pt.getId()); + }else if(patientsMap.containsKey(pt.getId())){//存在 + System.out.println("重复的主键:"+pt.getId()); + }else{ + patientsMap.put(pt.getId(),1); + } if (pt.getServiceType() == null) { System.out.println("跳过数据:"+pt.getId()); continue; @@ -115,13 +124,13 @@ public class BuildSerToPatientSerWorker implements Callable { convertPatient(pt, pser2); //增值服务有服务医生 pser2.setSerDoct(pt.getBookbuildingDoctor()); - patientServiceService.addPatientService(pser2); + // patientServiceService.addPatientService(pser2); } } else { convertPatient(pt, pser2); //增值服务有服务医生 pser2.setSerDoct(pt.getBookbuildingDoctor()); - patientServiceService.addPatientService(pser2); + // patientServiceService.addPatientService(pser2); } } } @@ -134,14 +143,17 @@ public class BuildSerToPatientSerWorker implements Callable { List patientServices = patientServiceService.queryPatientService(patientQuery); if (CollectionUtils.isNotEmpty(patientServices)) { + System.out.println("增量查询数据存在:"+pt.getId()); continue; } } //老数据服务标记 - patientServiceService.addPatientService(pser); + // patientServiceService.addPatientService(pser); } // System.out.println("endIndex:" + endIndex + "," + i + ":" + patients.size()); } + + System.out.println("线程处理数据完成,开始条数:"+startIndex+",结束条数:"+endIndex+",map:"+ patientsMap.size()); } catch (Exception e) { e.printStackTrace(); }