package com.yihu.wlyy.service.common.util; import com.yihu.wlyy.entity.doctor.team.sign.DoctorPatientGroupInfo; import com.yihu.wlyy.entity.doctor.team.sign.DoctorTeam; import com.yihu.wlyy.entity.doctor.team.sign.DoctorTeamInfo; import com.yihu.wlyy.entity.doctor.team.sign.DoctorTeamMember; import com.yihu.wlyy.entity.patient.SignFamily; import com.yihu.wlyy.repository.doctor.DoctorPatientGroupInfoDao; import com.yihu.wlyy.repository.doctor.DoctorTeamDao; import com.yihu.wlyy.repository.doctor.DoctorTeamMemberDao; import com.yihu.wlyy.repository.patient.SignFamilyDao; import com.yihu.wlyy.service.BaseService; import com.yihu.wlyy.util.IdCardUtil; import com.yihu.wlyy.util.SystemConf; 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.jdbc.datasource.DataSourceTransactionManager; import org.springframework.orm.jpa.JpaTransactionManager; import org.springframework.stereotype.Service; import org.springframework.transaction.TransactionDefinition; import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.support.DefaultTransactionDefinition; import java.text.SimpleDateFormat; import java.util.*; import java.util.concurrent.ExecutionException; /** * Created by lyr-pc on 2016/10/11. */ @Service public class ManageUtilService extends BaseService { @Autowired SignFamilyDao signFamilyDao; @Autowired DoctorPatientGroupInfoDao groupInfoDao; @Autowired DoctorTeamDao teamDao; @Autowired DoctorTeamMemberDao teamMemberDao; @Autowired JpaTransactionManager transactionManager; public static int page = 0; public static List errorPages = new ArrayList<>(); public static List errorSigns = new ArrayList<>(); /** * 清洗头同步签约数据分组 * * @return */ public void signPatientSetGroup() { boolean flag = true; while (flag) { PageRequest pageRequest = new PageRequest(0, 1000); Page signs = signFamilyDao.findByTypeAndSignSource(2, "1", pageRequest); if (signs != null && signs.getContent().size() < 1000) { flag = false; } System.out.println("sign-patient-group-team:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); DefaultTransactionDefinition def = new DefaultTransactionDefinition(); def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); // 事物隔离级别,开启新事务 TransactionStatus status = transactionManager.getTransaction(def); // 获得事务状态 try { 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(); errorSigns.add(sign.getId()); } } //事物提交 transactionManager.commit(status); System.out.println("sign-patient-group-team:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); } catch (Exception e) { transactionManager.rollback(status); } } } /** * 执行某一页 * * @param page * @throws Exception */ @Transactional public void setSignTeamAndGroupByPage(int page) throws Exception { PageRequest pageRequest = new PageRequest(page, 1000); Page signs = signFamilyDao.findByTypeAndSignSource(2, "1", pageRequest); for (SignFamily sign : signs.getContent()) { 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); } } /** * 执行某一条 * * @param id */ @Transactional public void setSignTeamAndGroupById(Long id) throws Exception { SignFamily sign = signFamilyDao.findOne(id); try { if (StringUtils.isNotEmpty(sign.getTeamCode())) { throw new Exception("error:sign-family-set-group:team-exist:" + id); } //建立团队 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()); } 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(); errorSigns.add(sign.getId()); throw new Exception(e.getMessage()); } } }