diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/PregnantBuildController.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/PregnantBuildController.java index f430427..4e6bc57 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/PregnantBuildController.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/PregnantBuildController.java @@ -12,6 +12,7 @@ import com.lyms.platform.common.utils.PropertiesUtils; import com.lyms.platform.common.utils.StringUtils; import com.lyms.platform.operate.web.facade.AntenatalExaminationFacade; import com.lyms.platform.operate.web.facade.BookbuildingFacade; +import com.lyms.platform.operate.web.facade.SaveByV2ThreadPoolFacade; import com.lyms.platform.operate.web.request.*; import net.sf.json.JSONObject; import org.apache.commons.httpclient.HttpClient; @@ -42,6 +43,8 @@ public class PregnantBuildController extends BaseController{ @Autowired private AntenatalExaminationFacade antenatalExaminationFacade; + @Autowired + private SaveByV2ThreadPoolFacade saveByV2ThreadPoolFacade; /** * 查询孕妇是否有建档记录 有就返回patientid @@ -146,7 +149,7 @@ public class PregnantBuildController extends BaseController{ @RequestMapping(method = RequestMethod.POST, value = "/v2/history/batchSave") @ResponseBody public BaseResponse saveByV2(@RequestBody SyncV2HistoryRequest param) { - return bookbuildingFacade.saveByV2(param); + return saveByV2ThreadPoolFacade.saveByV2(param); } /** diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/BookbuildingFacade.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/BookbuildingFacade.java index 31b8585..f9204c1 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/BookbuildingFacade.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/BookbuildingFacade.java @@ -2368,108 +2368,6 @@ public class BookbuildingFacade { return param; } - /** - * 保存历史数据,根据时间和医院id - * - * @param param 请求参数 - * @return BaseResponse - */ - public BaseResponse saveByV2(SyncV2HistoryRequest param) { - //获取2.0历史建档数据 - String startTime = param.getStartTime(); - String endTime = param.getEndTime(); - Connection connection = null; - try { - connection = getConnection(); - String sql = getSqlString(startTime, endTime); - QueryRunner queryRunner = new QueryRunner(true); - List lists = queryRunner.query(connection, sql, new BeanListHandler(SyncV2HistoryRequest.class)); - // TODO 2019/6/5 15:39 dongqing 分批次请求保存 - - for (YunBookbuildingAddRequest list : lists) { - list.setHospitalId("216216"); - list.setBookbuildingDoctor("1000000185"); - System.out.println("建档孕妇身份证号cardNo=="+list.getPregnantCertificateNum()); - addPregnantBookbuilding(list, null, false);//Integer.parseInt(list.getBookbuildingDoctor() - } - -// if (CollectionUtils.isNotEmpty(lists)) { -// int batchSize = 2; -// int end = 0; -// for (int i = 0; i < lists.size(); i += batchSize) { -// end = (end + batchSize); -// if (end > lists.size()) { -// end = lists.size(); -// } -// Future f = commonThreadPool.submit(new SyncV2HistoryWorkerx(new BookbuildingFacade(), lists.subList(i, end))); -// } -// } - - } catch (Exception e) { - logger.info(e.getMessage()); - return new BaseResponse().setErrorcode(ErrorCodeConstants.SYSTEM_ERROR).setErrormsg("系统异常"); - } finally { - if (connection != null) { - try { - connection.close(); - } catch (SQLException e) { - e.printStackTrace(); - } - } - } - return new BaseResponse().setErrorcode(ErrorCodeConstants.SUCCESS).setErrormsg("成功"); - - } - - private String getSqlString(String startTime, String endTime) { - String str = "t.P_CARDTYPE as pregnantCertificateTypeId," +//证件类型 - "t.P_ADDRESSPROVINCE as pregnantCensusProvinceId," +//居住地-省 - "t.P_ADDRESSCITY as pregnantCensusCityId," +//居住地 -城市 - "t.P_ADDRESSCOUNTY as pregnantCensusAreaId," +//居住地区 - "t.P_ADDRESSSTREET as pregnantCensusStreetId," +//居住地 -街道 - "t.P_COUNTRY as pregnantCountryId," +//国籍 - "t.P_HUSBANDCOUNTRY as husbandCountryId," +//丈夫国籍 - "t.P_HUSBANDCARDTYPE as husbandCertificateTypeId," +//丈夫证件类型 - "t.P_NATION as pregnantNationId," +//民族 - "t.P_HUSBANDNATION as husbandNationId," +//丈夫民族 - "t.P_DOCID as bookbuildingDoctor," +//建档医生 - "t.P_CARDNO as pregnantCertificateNum," +//证件号 - "t.P_CARDNO as pregnantNationId," +// 孕妇民族 - "t.P_CARDNO as pregnantPhone," +// 孕妇手机号 - "t.P_RRPROVINCE as pregnantLiveProvinceId," +//户口——省 - "t.P_RRCITY as pregnantLiveCityId," +//户口——市 - "t.P_RRCOUNTY as pregnantLiveAreaId," +//户口——区县 - "t.P_RRSTREET as pregnantLiveStreetId," +//户口——街道 - "t.P_POSTPARTUMPROVINCE as childbirthProvinceId," +//产后——省 - "t.P_POSTPARTUMCITY as childbirthCityId," +//产后——市 - "t.P_POSTPARTUMCOUNTY as childbirthAreaId," +//产后——区县 - "t.P_POSTPARTUMSTREET as childbirthStreetId," +//产后——街道 - "t.P_HUSBANDNAME as husbandName," +//丈夫姓名 - "t.P_HUSBANDCARDNO as husbandCertificateNum," +//丈夫证件号码 - "t.P_HUSBANDBIRTHDAY as husbandBirth," +//丈夫出生日期 - "t.P_HUSBANDRRPROVINCE as husbandProvinceRegisterId," +//丈夫户口所在地 省 - "t.P_HUSBANDRRCITY as husbandCityRegisterId," +//丈夫户口所在地 市 - "t.P_HUSBANDRRCOUNTY as husbandAreaRegisterId," +//丈夫户口所在地 县 - "t.P_HUSBANDRRSTREET as husbandStreetRegisterId," +//丈夫户口所在地 街道 - "t.VC_CARDNO as vcCardNo, " +//就诊卡号 条码号 - "t.P_BIRTHDAY as birthday, " +//孕妇生日 - "t.P_LASTMENSTRUALPERIOD as lastMenstrualPeriod," +//末次月经 - "t.YCQ as dueDate," +//预产期 - "t.P_FILINGTIME as bookbuildingDate," +//建档日期 - "t.P_HOSPITALID as hospitalId ";//医院Id - - String sql = "select " + str + " from " + - " (select p.* from V_SYNC_TO_V3_PATIENT p " + - " left join V_SYNC_TO_V3_PDR pdr on pdr.p_no = p.p_no " + - " where pdr.p_no is null and (TRUNC(p.P_FILINGTIME) BETWEEN TO_DATE('" + startTime + "','YYYY-MM-DD') AND TO_DATE('" + endTime + "','YYYY-MM-DD')) and ( p.P_ADDRESSCOUNTY='160' OR p.P_POSTPARTUMCOUNTY='160' OR p.P_RRCOUNTY ='160')" + - " union " + - " select p.* from V_SYNC_TO_V3_PATIENT p " + - " right join V_SYNC_TO_V3_PDR pdr on pdr.p_no = p.p_no " + - " where pdr.PDR_CHILDBIRTHDAY > sysdate - 29 and pdr.p_no is not null and to_char(pdr.PDR_CHILDBIRTHDAY,'YYYY-MM-DD') BETWEEN TO_DATE('" + startTime + "','YYYY-MM-DD') AND TO_DATE('" + endTime + "','YYYY-MM-DD')" + - ") t"; - return sql; - } - /* WHERE TRUNC(T.P_FILINGTIME) between TO_DATE('" + startTime + "','YYYY-MM-DD') AND TO_DATE('" + endTime + "','YYYY-MM-DD') " + "and pdr.p_no is null " + diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/SaveByV2ThreadPoolFacade.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/SaveByV2ThreadPoolFacade.java index 6c9af4f..e0f4628 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/SaveByV2ThreadPoolFacade.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/SaveByV2ThreadPoolFacade.java @@ -1,129 +1,138 @@ package com.lyms.platform.operate.web.facade; +import com.lyms.platform.common.constants.ErrorCodeConstants; import com.lyms.platform.common.result.BaseObjectResponse; +import com.lyms.platform.common.result.BaseResponse; import com.lyms.platform.operate.web.request.SyncV2HistoryRequest; +import com.lyms.platform.operate.web.worker.SyncV2HistoryWorkerx; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.stereotype.Component; +import java.sql.Connection; +import java.sql.SQLException; import java.util.List; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.concurrent.Future; @Component public class SaveByV2ThreadPoolFacade { - @Autowired - private BookbuildingFacade bookbuildingFacade; - - public void exec(List list) throws InterruptedException { - //初始化线程处理500条数据 - int count = 500; - int listSize = list.size(); - int runSize = (listSize / count) + 1; - //线程数最大设置10个 - if (runSize>10){ - runSize=10; - count= listSize/runSize; - } - List newlist = null; - //创建一个线程池,数量和开启线程的数量一样 - ExecutorService executor = Executors.newFixedThreadPool(runSize); - CountDownLatch begin = new CountDownLatch(1); - CountDownLatch end = new CountDownLatch(runSize); - for (int i = 0; i < runSize; i++) { - //计算每个线程执行的数据 - if ((i + 1) == runSize) { - int startIndex = (i * count); - int endIndex = list.size(); - newlist = list.subList(startIndex, endIndex); - } else { - int startIndex = (i * count); - int endIndex = (i + 1) * count; - newlist = list.subList(startIndex, endIndex); - } - MyThread mythead = new MyThread(newlist, begin, end,bookbuildingFacade); - MyThread2 mythead2 = new MyThread2(bookbuildingFacade, newlist, begin, end); - executor.execute(mythead2); -// executor.execute(mythead); - } + private Logger logger = LoggerFactory.getLogger(BookbuildingFacade.class); - begin.countDown(); - end.await(); - executor.shutdown(); - } - -} + @Autowired + @Qualifier("commonThreadPool") + private ThreadPoolTaskExecutor commonThreadPool; -class MyThread implements Runnable { - private BookbuildingFacade bookbuildingFacade; - private List list; - private CountDownLatch begin; - private CountDownLatch end; + @Autowired + BookbuildingFacade bookbuildingFacade; + /** + * 保存历史数据,根据时间和医院id + * + * @param param 请求参数 + * @return BaseResponse + */ + public BaseResponse saveByV2(SyncV2HistoryRequest param) { + //获取2.0历史建档数据 + String startTime = param.getStartTime(); + String endTime = param.getEndTime(); + Connection connection = null; + try { + connection = bookbuildingFacade.getConnection(); + String sql = getSqlString(startTime, endTime); + QueryRunner queryRunner = new QueryRunner(true); + List lists = queryRunner.query(connection, sql, new BeanListHandler(SyncV2HistoryRequest.class)); + // TODO 2019/6/5 15:39 dongqing 分批次请求保存 - public MyThread(List list, CountDownLatch begin, CountDownLatch end,BookbuildingFacade bookbuildingFacade) { - this.list = list; - this.begin = begin; - this.end = end; - this.bookbuildingFacade = bookbuildingFacade; - } +// for (YunBookbuildingAddRequest list : lists) { +// list.setHospitalId("216216"); +// list.setBookbuildingDoctor("1000000185"); +// System.out.println("建档孕妇身份证号cardNo=="+list.getPregnantCertificateNum()); +// addPregnantBookbuilding(list, null, false);//Integer.parseInt(list.getBookbuildingDoctor() +// } - @Override - public void run() { - try { - for (int i = 0; i < list.size(); i++) { - /* - 2: 具体插入实现在这里写 - */ - BaseObjectResponse p = bookbuildingFacade.addPregnantBookbuilding(list.get(i), null, false);//Integer.parseInt(list.getBookbuildingDoctor() - System.out.println(p.getData()); - System.out.println("当前线程名称:"+Thread.currentThread().getName()+"======存储的数据内容:"+p.getData() - ); + if (CollectionUtils.isNotEmpty(lists)) { + int batchSize = 2; + int end = 0; + for (int i = 0; i < lists.size(); i += batchSize) { + end = (end + batchSize); + if (end > lists.size()) { + end = lists.size(); + } + Future f = commonThreadPool.submit(new SyncV2HistoryWorkerx(bookbuildingFacade, lists.subList(i, end))); + } } - //执行完让线程直接进入等待 - begin.await(); - } catch (InterruptedException e) { - e.printStackTrace(); + + } catch (Exception e) { + logger.info(e.getMessage()); + return new BaseResponse().setErrorcode(ErrorCodeConstants.SYSTEM_ERROR).setErrormsg("系统异常"); } finally { - end.countDown(); + if (connection != null) { + try { + connection.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + } } - } - + return new BaseResponse().setErrorcode(ErrorCodeConstants.SUCCESS).setErrormsg("成功"); -} -class MyThread2 implements Runnable { - private BookbuildingFacade bookbuildingFacade; - private List list; - private CountDownLatch begin; - private CountDownLatch end; - - public MyThread2(BookbuildingFacade bookbuildingFacade, List list, CountDownLatch begin, CountDownLatch end) { - this.bookbuildingFacade = bookbuildingFacade; - this.list = list; - this.begin = begin; - this.end = end; } - @Override - public void run() { - System.out.println("123456"); + private String getSqlString(String startTime, String endTime) { + String str = "t.P_CARDTYPE as pregnantCertificateTypeId," +//证件类型 + "t.P_ADDRESSPROVINCE as pregnantCensusProvinceId," +//居住地-省 + "t.P_ADDRESSCITY as pregnantCensusCityId," +//居住地 -城市 + "t.P_ADDRESSCOUNTY as pregnantCensusAreaId," +//居住地区 + "t.P_ADDRESSSTREET as pregnantCensusStreetId," +//居住地 -街道 + "t.P_COUNTRY as pregnantCountryId," +//国籍 + "t.P_HUSBANDCOUNTRY as husbandCountryId," +//丈夫国籍 + "t.P_HUSBANDCARDTYPE as husbandCertificateTypeId," +//丈夫证件类型 + "t.P_NATION as pregnantNationId," +//民族 + "t.P_HUSBANDNATION as husbandNationId," +//丈夫民族 + "t.P_DOCID as bookbuildingDoctor," +//建档医生 + "t.P_CARDNO as pregnantCertificateNum," +//证件号 + "t.P_CARDNO as pregnantNationId," +// 孕妇民族 + "t.P_CARDNO as pregnantPhone," +// 孕妇手机号 + "t.P_RRPROVINCE as pregnantLiveProvinceId," +//户口——省 + "t.P_RRCITY as pregnantLiveCityId," +//户口——市 + "t.P_RRCOUNTY as pregnantLiveAreaId," +//户口——区县 + "t.P_RRSTREET as pregnantLiveStreetId," +//户口——街道 + "t.P_POSTPARTUMPROVINCE as childbirthProvinceId," +//产后——省 + "t.P_POSTPARTUMCITY as childbirthCityId," +//产后——市 + "t.P_POSTPARTUMCOUNTY as childbirthAreaId," +//产后——区县 + "t.P_POSTPARTUMSTREET as childbirthStreetId," +//产后——街道 + "t.P_HUSBANDNAME as husbandName," +//丈夫姓名 + "t.P_HUSBANDCARDNO as husbandCertificateNum," +//丈夫证件号码 + "t.P_HUSBANDBIRTHDAY as husbandBirth," +//丈夫出生日期 + "t.P_HUSBANDRRPROVINCE as husbandProvinceRegisterId," +//丈夫户口所在地 省 + "t.P_HUSBANDRRCITY as husbandCityRegisterId," +//丈夫户口所在地 市 + "t.P_HUSBANDRRCOUNTY as husbandAreaRegisterId," +//丈夫户口所在地 县 + "t.P_HUSBANDRRSTREET as husbandStreetRegisterId," +//丈夫户口所在地 街道 + "t.VC_CARDNO as vcCardNo, " +//就诊卡号 条码号 + "t.P_BIRTHDAY as birthday, " +//孕妇生日 + "t.P_LASTMENSTRUALPERIOD as lastMenstrualPeriod," +//末次月经 + "t.YCQ as dueDate," +//预产期 + "t.P_FILINGTIME as bookbuildingDate," +//建档日期 + "t.P_HOSPITALID as hospitalId ";//医院Id - try { - for (int i = 0; i < list.size(); i++) { - /* - 2: 具体插入实现在这里写 - */ - BaseObjectResponse p = bookbuildingFacade.addPregnantBookbuilding(list.get(i), null, false);//Integer.parseInt(list.getBookbuildingDoctor() - System.out.println(p.getData()); - System.out.println("当前线程名称:"+Thread.currentThread().getName()+"======存储的数据内容:"+p.getData() - ); - } - //执行完让线程直接进入等待 - begin.await(); - } catch (InterruptedException e) { - e.printStackTrace(); - } finally { - end.countDown(); - } + String sql = "select " + str + " from " + + " (select p.* from V_SYNC_TO_V3_PATIENT p " + + " left join V_SYNC_TO_V3_PDR pdr on pdr.p_no = p.p_no " + + " where pdr.p_no is null and (TRUNC(p.P_FILINGTIME) BETWEEN TO_DATE('" + startTime + "','YYYY-MM-DD') AND TO_DATE('" + endTime + "','YYYY-MM-DD')) and ( p.P_ADDRESSCOUNTY='160' OR p.P_POSTPARTUMCOUNTY='160' OR p.P_RRCOUNTY ='160')" + + " union " + + " select p.* from V_SYNC_TO_V3_PATIENT p " + + " right join V_SYNC_TO_V3_PDR pdr on pdr.p_no = p.p_no " + + " where pdr.PDR_CHILDBIRTHDAY > sysdate - 29 and pdr.p_no is not null and to_char(pdr.PDR_CHILDBIRTHDAY,'YYYY-MM-DD') BETWEEN TO_DATE('" + startTime + "','YYYY-MM-DD') AND TO_DATE('" + endTime + "','YYYY-MM-DD')" + + ") t"; + return sql; } } \ No newline at end of file diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/SyncV2HistoryWorkerx.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/SyncV2HistoryWorkerx.java index 19baa3b..e04accf 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/SyncV2HistoryWorkerx.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/SyncV2HistoryWorkerx.java @@ -47,8 +47,8 @@ public class SyncV2HistoryWorkerx implements Callable { //董勤让写死的 list.setHospitalId("216216"); list.setBookbuildingDoctor("1000000185"); - System.out.println("建档孕妇身份证号=="+list.getPregnantCertificateNum()); - p = bookbuildingFacade.addPregnantBookbuilding(list, null, false);//Integer.parseInt(list.getBookbuildingDoctor() + p = bookbuildingFacade.addPregnantBookbuilding(list, null, false); + System.out.println("当前线程名称:"+Thread.currentThread().getName()+"===保存好建档_id:"+p.getData()); } return p; }