package com.yihu.wlyy.statistics.task; import com.yihu.wlyy.statistics.Application; import com.yihu.wlyy.statistics.dao.DoctorPatientGroupInfoDao; import com.yihu.wlyy.statistics.dao.DoctorTeamDao; import com.yihu.wlyy.statistics.dao.DoctorTeamMemberDao; import com.yihu.wlyy.statistics.dao.SignFamilyDao; import com.yihu.wlyy.statistics.model.doctor.DoctorPatientGroupInfo; import com.yihu.wlyy.statistics.model.signfamily.SignFamily; import com.yihu.wlyy.statistics.model.team.DoctorTeam; import com.yihu.wlyy.statistics.model.team.DoctorTeamMember; import com.yihu.wlyy.statistics.util.IdCardUtil; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.orm.jpa.JpaTransactionManager; import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; import org.springframework.transaction.TransactionDefinition; import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.support.DefaultTransactionDefinition; import org.springframework.web.context.support.SpringBeanAutowiringSupport; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.UUID; /** * Created by lyr-pc on 2016/10/11. */ public class SignTeamAndGroupRunnable implements Runnable { long start = 0; long end = 0; SignFamilyDao signFamilyDao; DoctorPatientGroupInfoDao groupInfoDao; DoctorTeamDao teamDao; DoctorTeamMemberDao teamMemberDao; JpaTransactionManager transactionManager; public SignTeamAndGroupRunnable(Long start, Long end){ this.start = start; this.end = end; this.signFamilyDao = Application.ctx.getBean(SignFamilyDao.class); this.groupInfoDao = Application.ctx.getBean(DoctorPatientGroupInfoDao.class); this.teamDao = Application.ctx.getBean(DoctorTeamDao.class); this.teamMemberDao = Application.ctx.getBean(DoctorTeamMemberDao.class); this.transactionManager = Application.ctx.getBean(JpaTransactionManager.class); } public String getCode() { return UUID.randomUUID().toString().replaceAll("-", ""); } @Override public void run() { boolean flag = true; while (flag) { PageRequest pageRequest = new PageRequest(0, 100); Page signs = signFamilyDao.findByTypeAndSignSourceAndId(2, "1",start, end,pageRequest); if (signs != null && signs.getContent().size() < 100) { flag = false; } DefaultTransactionDefinition def = new DefaultTransactionDefinition(); def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); // 事物隔离级别,开启新事务 TransactionStatus status = transactionManager.getTransaction(def); // 获得事务状态 try { transform(signs); //事物提交 transactionManager.commit(status); } catch (Exception e) { transactionManager.rollback(status); } start = start + 100; } } public void transform(Page signs){ System.out.println("sign-patient-group-team:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); for (SignFamily sign : signs.getContent()) { try { if (StringUtils.isNotEmpty(sign.getTeamCode())) { continue; } //建立团队 DoctorTeam doctorTeam = new DoctorTeam(); String doctorTeamCode = getCode(); doctorTeam.setCode(doctorTeamCode); doctorTeam.setCzrq(new Date()); doctorTeam.setName("团队名称:" + sign.getName()); doctorTeam.setSignType("2");//家庭签约 doctorTeam.setDel("1"); teamDao.save(doctorTeam); //添加团队成员 if (StringUtils.isNotEmpty(sign.getDoctor())) { //添加全科 DoctorTeamMember wlyyDoctorTeamDoctor = new DoctorTeamMember(); wlyyDoctorTeamDoctor.setTeam(doctorTeamCode); wlyyDoctorTeamDoctor.setMemberCode(sign.getDoctor()); wlyyDoctorTeamDoctor.setName(sign.getDoctorName()); wlyyDoctorTeamDoctor.setDel("1"); wlyyDoctorTeamDoctor.setType(2); wlyyDoctorTeamDoctor.setSignType("2");//家庭签约 wlyyDoctorTeamDoctor.setCode(getCode()); wlyyDoctorTeamDoctor.setCzrq(new Date()); teamMemberDao.save(wlyyDoctorTeamDoctor); } if (StringUtils.isNotEmpty(sign.getDoctorHealth())) { //添加健康管理师 DoctorTeamMember wlyyDoctorTeamDoctor = new DoctorTeamMember(); wlyyDoctorTeamDoctor.setTeam(doctorTeamCode); wlyyDoctorTeamDoctor.setMemberCode(sign.getDoctorHealth()); wlyyDoctorTeamDoctor.setName(sign.getDoctorHealthName()); wlyyDoctorTeamDoctor.setDel("1"); wlyyDoctorTeamDoctor.setType(3); wlyyDoctorTeamDoctor.setSignType("2");//家庭签约 wlyyDoctorTeamDoctor.setCode(getCode()); wlyyDoctorTeamDoctor.setCzrq(new Date()); teamMemberDao.save(wlyyDoctorTeamDoctor); } //添加患者和团队的关系 DoctorTeamMember wlyyDoctorTeamPatient = new DoctorTeamMember(); wlyyDoctorTeamPatient.setTeam(doctorTeamCode); wlyyDoctorTeamPatient.setMemberCode(sign.getPatient()); wlyyDoctorTeamPatient.setName(sign.getName()); wlyyDoctorTeamPatient.setDel("1"); wlyyDoctorTeamPatient.setSignType("2");//家庭签约 wlyyDoctorTeamPatient.setType(5); wlyyDoctorTeamPatient.setCode(getCode()); wlyyDoctorTeamPatient.setCzrq(new Date()); teamMemberDao.save(wlyyDoctorTeamPatient); if (StringUtils.isEmpty(sign.getIdcard())) { System.out.println("error:sign-family-set-group:no-idcard:" + sign.getId()); continue; } int age = IdCardUtil.getAgeForIdcard(sign.getIdcard()); String groupCode = "1"; if (age >= 65) { groupCode = "3"; } if (StringUtils.isNotEmpty(sign.getDoctorHealth())) { //把病人添加到健康管理师的健康分组里 DoctorPatientGroupInfo doctorPatientGroupInfo = new DoctorPatientGroupInfo(); doctorPatientGroupInfo.setCzrq(new Date()); doctorPatientGroupInfo.setDoctor(sign.getDoctorHealth()); doctorPatientGroupInfo.setStatus(1); doctorPatientGroupInfo.setPatient(sign.getPatient()); doctorPatientGroupInfo.setPname(sign.getName()); doctorPatientGroupInfo.setPartAmount(0); doctorPatientGroupInfo.setGroup(groupCode);//默认健康分组 doctorPatientGroupInfo.setQyrq(sign.getApplyDate()); doctorPatientGroupInfo.setSignType("2");//家庭签约 groupInfoDao.save(doctorPatientGroupInfo); } if (StringUtils.isNotEmpty(sign.getDoctor())) { //把病人添加到全科医生的健康分组里 DoctorPatientGroupInfo doctorPatientGroupInfo = new DoctorPatientGroupInfo(); doctorPatientGroupInfo.setCzrq(new Date()); doctorPatientGroupInfo.setDoctor(sign.getDoctor()); doctorPatientGroupInfo.setStatus(1); doctorPatientGroupInfo.setPatient(sign.getPatient()); doctorPatientGroupInfo.setPname(sign.getName()); doctorPatientGroupInfo.setPartAmount(0); doctorPatientGroupInfo.setGroup(groupCode);//默认健康分组 doctorPatientGroupInfo.setQyrq(sign.getApplyDate()); doctorPatientGroupInfo.setSignType("2");//家庭签约 groupInfoDao.save(doctorPatientGroupInfo); } List groups = groupInfoDao.findPatientGroups(sign.getPatient()); if (groups != null && groups.size() > 0) { for (DoctorPatientGroupInfo group : groups) { if (StringUtils.isNotEmpty(group.getSignType()) && group.getSignType().equals("2")) { continue; } DoctorPatientGroupInfo patientGroup = new DoctorPatientGroupInfo(); patientGroup.setCzrq(new Date()); patientGroup.setDoctor(group.getDoctor()); patientGroup.setStatus(1); patientGroup.setPatient(sign.getPatient()); patientGroup.setPname(sign.getName()); patientGroup.setPartAmount(0); patientGroup.setGroup(group.getGroup()); patientGroup.setQyrq(sign.getApplyDate()); patientGroup.setSignType("2");//家庭签约 groupInfoDao.save(patientGroup); } } sign.setTeamCode(doctorTeamCode); signFamilyDao.save(sign); } catch (Exception e) { e.printStackTrace(); } } System.out.println("sign-patient-group-team:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); } }