From 6ac7d684ab4cddce27d7f24590ba5b1034c4a229 Mon Sep 17 00:00:00 2001 From: jiangjiazhi Date: Tue, 25 Oct 2016 11:48:07 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BA=A7=E6=9C=BA=E5=8F=B7=20=E6=9B=BF?= =?UTF-8?q?=E6=8D=A2=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../operate/web/controller/UpdateController.java | 48 +++++++++ .../web/facade/AntenatalExaminationFacade.java | 4 +- .../operate/web/facade/CorrectDataFacade.java | 70 +++++++++++++ .../operate/web/worker/CorrectDataWorker.java | 112 +++++++++++++++++++++ 4 files changed, 232 insertions(+), 2 deletions(-) create mode 100644 platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/UpdateController.java create mode 100644 platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/CorrectDataFacade.java create mode 100644 platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/CorrectDataWorker.java diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/UpdateController.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/UpdateController.java new file mode 100644 index 0000000..1044961 --- /dev/null +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/UpdateController.java @@ -0,0 +1,48 @@ +package com.lyms.platform.operate.web.controller; + +import com.lyms.platform.common.base.BaseController; +import com.lyms.platform.common.constants.ErrorCodeConstants; +import com.lyms.platform.common.utils.ExceptionUtils; +import com.lyms.platform.common.utils.StringUtils; +import com.lyms.platform.operate.web.facade.CorrectDataFacade; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletResponse; +import java.util.HashMap; +import java.util.Map; + +/** + * 数据处理接口 + *

+ * Created by Administrator on 2016/10/25 0025. + */ +@Controller +public class UpdateController extends BaseController { + + @Autowired + private CorrectDataFacade correctDataFacade; + + @RequestMapping(value = "/updateData", method = RequestMethod.GET) + @ResponseBody + private Map updateCorrectData(@RequestParam("hId") String hId) { + Map result = new HashMap<>(); + try { + if (StringUtils.isNotEmpty(hId)) { + correctDataFacade.correctPatient(hId); + result.put("msg", "成功."); + result.put("code", ErrorCodeConstants.SUCCESS); + } else { + result.put("msg", "参数不能为空."); + result.put("code", ErrorCodeConstants.PARAMETER_ERROR); + } + } catch (Exception e) { + ExceptionUtils.catchException(e, "updateCorrectData Error. hospitalId:" + hId); + } + return result; + } +} diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/AntenatalExaminationFacade.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/AntenatalExaminationFacade.java index 86d1820..f749317 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/AntenatalExaminationFacade.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/AntenatalExaminationFacade.java @@ -340,7 +340,7 @@ public class AntenatalExaminationFacade { * @param parentId * @param hospitalId */ - private void updateLastRhTime(String parentId, String hospitalId) { + public void updateLastRhTime(String parentId, String hospitalId) { AntExQuery antExQuery = new AntExQuery(); antExQuery.setYn(YnEnums.YES.getId()); @@ -1426,7 +1426,7 @@ public class AntenatalExaminationFacade { * * @param parentId */ - private void updateLastRisk(String parentId) { + public void updateLastRisk(String parentId) { Patients patients = patientsService.findOnePatientById(parentId); PatientsQuery patientsQuery1 = new PatientsQuery(); diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/CorrectDataFacade.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/CorrectDataFacade.java new file mode 100644 index 0000000..cfa74b6 --- /dev/null +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/CorrectDataFacade.java @@ -0,0 +1,70 @@ +package com.lyms.platform.operate.web.facade; + +import com.lyms.platform.biz.service.AntenatalExaminationService; +import com.lyms.platform.biz.service.PatientsService; +import com.lyms.platform.biz.service.PostReviewService; +import com.lyms.platform.common.enums.YnEnums; +import com.lyms.platform.operate.web.worker.CorrectDataWorker; +import com.lyms.platform.operate.web.worker.WorkHR; +import com.lyms.platform.pojo.Patients; +import com.lyms.platform.query.PatientsQuery; +import org.apache.commons.collections.CollectionUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.*; +import java.util.concurrent.atomic.AtomicLong; + +/** + * 纠正数据门面 + * + * Created by Administrator on 2016/10/25 0025. + */ +@Component +public class CorrectDataFacade { + + private Logger logger = LoggerFactory.getLogger(CorrectDataFacade.class); + @Autowired + private PatientsService patientsService; + @Autowired + private PostReviewService postReviewService; + @Autowired + private AntenatalExaminationFacade antExFacade; + @Autowired + private AntenatalExaminationService anExService; + + private ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(5, 10, 1, TimeUnit.MINUTES, new LinkedBlockingQueue(5000)); + + /** + * + * 纠正数据 + * + * @param hospitalId + */ + public void correctPatient(String hospitalId) throws InterruptedException { + PatientsQuery patientsQuery1=new PatientsQuery(); + patientsQuery1.setYn(YnEnums.YES.getId()); + patientsQuery1.setHospitalId(hospitalId); + List patientses = patientsService.queryPatient(patientsQuery1); + + if(CollectionUtils.isNotEmpty(patientses)){ + int batchSize = 150; + int end = 0; + CountDownLatch countDownLatch=new CountDownLatch(patientses.size()); + java.util.concurrent.atomic.AtomicLong counter=new AtomicLong(); + for (int i = 0; i < patientses.size(); i += batchSize) { + end = (end + batchSize); + if (end > patientses.size()) { + end = patientses.size(); + } + threadPoolExecutor.submit(new CorrectDataWorker(patientses.subList(i, end),postReviewService,patientsService,anExService,antExFacade,countDownLatch,counter)); + } + countDownLatch.await(); + logger.info("hand hospitalId :" +hospitalId+", update count "+counter.get()); + } + } +} \ No newline at end of file diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/CorrectDataWorker.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/CorrectDataWorker.java new file mode 100644 index 0000000..c980479 --- /dev/null +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/CorrectDataWorker.java @@ -0,0 +1,112 @@ +package com.lyms.platform.operate.web.worker; + +import com.lyms.platform.biz.service.AntenatalExaminationService; +import com.lyms.platform.biz.service.PatientsService; +import com.lyms.platform.biz.service.PostReviewService; +import com.lyms.platform.common.enums.YnEnums; +import com.lyms.platform.common.utils.ExceptionUtils; +import com.lyms.platform.operate.web.facade.AntenatalExaminationFacade; +import com.lyms.platform.pojo.AntExChuModel; +import com.lyms.platform.pojo.AntenatalExaminationModel; +import com.lyms.platform.pojo.Patients; +import com.lyms.platform.query.AntExChuQuery; +import com.lyms.platform.query.AntExQuery; +import com.lyms.platform.query.PostReviewQuery; +import org.apache.commons.collections.CollectionUtils; +import org.springframework.data.domain.Sort; + +import java.util.Date; +import java.util.List; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.atomic.AtomicLong; + +/** + * 纠正数据线程 + *

+ * Created by Administrator on 2016/10/25 0025. + */ +public class CorrectDataWorker extends Thread { + + private PostReviewService postReviewService; + + private PatientsService patientsService; + + private AntenatalExaminationService antExService; + + private AntenatalExaminationFacade antExFacade; + + private List patientses; + + private CountDownLatch countDownLatch; + + private java.util.concurrent.atomic.AtomicLong counter; + + public CorrectDataWorker(List patientses, + PostReviewService postReviewService, + PatientsService patientsService, + AntenatalExaminationService antExService, + AntenatalExaminationFacade antExFacade, + CountDownLatch countDownLatch, + java.util.concurrent.atomic.AtomicLong counter) { + this.patientses = patientses; + this.patientsService = patientsService; + this.postReviewService = postReviewService; + this.antExService=antExService; + this.antExFacade=antExFacade; + this.countDownLatch=countDownLatch; + this.counter=counter; + } + + @Override + public void run() { + //最后一次高危时间 + // Date lastRhTime; + //本院最后一次产检时间 + //Date lastCTime; + //本院产后复查次数 + //Integer postViewTimes; + try { + for(Patients patients:patientses){ + Patients patients1=new Patients(); + patients1.setId(patients.getId()); + //产后复查次数 + PostReviewQuery postReviewQuery=new PostReviewQuery(); + postReviewQuery.setHospitalId(patients.getHospitalId()); + postReviewQuery.setYn(YnEnums.YES.getId()); + //产后复查次数 + patients1.setPostViewTimes(postReviewService.count(postReviewQuery)); + //最后产检时间 + patients1.setLastCTime(findLastCTime(patients.getId())); + //修改最后一次定义高危时间 + antExFacade.updateLastRhTime(patients.getId(),patients.getHospitalId()); + //修改高危 + antExFacade.updateLastRisk(patients.getId()); + counter.incrementAndGet(); + } + }catch (Exception e){ + ExceptionUtils.catchException(e,"CorrectDataWorker Error."); + }finally { + countDownLatch.countDown(); + } + } + + + private Date findLastCTime(String id){ + AntExQuery antExQuery=new AntExQuery(); + antExQuery.setParentId(id); + antExQuery.setYn(YnEnums.YES.getId()); + List antEx= antExService.queryAntenatalExamination(antExQuery.convertToQuery().addOrder(Sort.Direction.DESC, "checkDate")); + if(CollectionUtils.isNotEmpty(antEx)){ + return antEx.get(0).getCheckDate(); + }else{ + AntExChuQuery antExChuQuery=new AntExChuQuery(); + antExChuQuery.setParentId(id); + antExChuQuery.setYn(YnEnums.YES.getId()); + List antExChu= antExService.queryAntExChu(antExChuQuery); + if(CollectionUtils.isNotEmpty(antExChu)){ + return antExChu.get(0).getCheckTime(); + } + } + return null; + } +} -- 1.8.3.1