SignTeamAndGroupRunnable.java 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. package com.yihu.wlyy.service.common.util;
  2. import com.yihu.wlyy.entity.doctor.team.sign.DoctorPatientGroupInfo;
  3. import com.yihu.wlyy.entity.doctor.team.sign.DoctorTeam;
  4. import com.yihu.wlyy.entity.doctor.team.sign.DoctorTeamMember;
  5. import com.yihu.wlyy.entity.patient.SignFamily;
  6. import com.yihu.wlyy.repository.doctor.DoctorPatientGroupInfoDao;
  7. import com.yihu.wlyy.repository.doctor.DoctorTeamDao;
  8. import com.yihu.wlyy.repository.doctor.DoctorTeamMemberDao;
  9. import com.yihu.wlyy.repository.patient.SignFamilyDao;
  10. import com.yihu.wlyy.util.IdCardUtil;
  11. import org.apache.commons.lang3.StringUtils;
  12. import org.hibernate.Transaction;
  13. import org.springframework.beans.factory.annotation.Autowired;
  14. import org.springframework.data.domain.Page;
  15. import org.springframework.data.domain.PageRequest;
  16. import org.springframework.orm.jpa.JpaTransactionManager;
  17. import org.springframework.stereotype.Component;
  18. import org.springframework.stereotype.Service;
  19. import org.springframework.transaction.TransactionDefinition;
  20. import org.springframework.transaction.TransactionStatus;
  21. import org.springframework.transaction.annotation.Propagation;
  22. import org.springframework.transaction.annotation.Transactional;
  23. import org.springframework.transaction.support.DefaultTransactionDefinition;
  24. import org.springframework.web.context.support.SpringBeanAutowiringSupport;
  25. import java.text.SimpleDateFormat;
  26. import java.util.Date;
  27. import java.util.List;
  28. import java.util.Random;
  29. import java.util.UUID;
  30. /**
  31. * Created by lyr-pc on 2016/10/11.
  32. */
  33. @Service
  34. public class SignTeamAndGroupRunnable implements Runnable {
  35. long start = 0;
  36. long end = 0;
  37. @Autowired
  38. SignFamilyDao signFamilyDao;
  39. @Autowired
  40. DoctorPatientGroupInfoDao groupInfoDao;
  41. @Autowired
  42. DoctorTeamDao teamDao;
  43. @Autowired
  44. DoctorTeamMemberDao teamMemberDao;
  45. @Autowired
  46. JpaTransactionManager transactionManager;
  47. public SignTeamAndGroupRunnable(Long start,Long end){
  48. this.start = start;
  49. this.end = end;
  50. }
  51. public String getCode() {
  52. return UUID.randomUUID().toString().replaceAll("-", "");
  53. }
  54. @Override
  55. public void run() {
  56. SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
  57. boolean flag = true;
  58. while (flag) {
  59. PageRequest pageRequest = new PageRequest(0, 500);
  60. Page<SignFamily> signs = signFamilyDao.findByTypeAndSignSourceAndId(2, "1",start, end,pageRequest);
  61. if (signs != null && signs.getContent().size() < 500) {
  62. flag = false;
  63. }
  64. DefaultTransactionDefinition def = new DefaultTransactionDefinition();
  65. def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); // 事物隔离级别,开启新事务
  66. TransactionStatus status = transactionManager.getTransaction(def); // 获得事务状态
  67. try {
  68. transform(signs);
  69. //事物提交
  70. transactionManager.commit(status);
  71. } catch (Exception e) {
  72. transactionManager.rollback(status);
  73. }
  74. start = start + 500;
  75. }
  76. }
  77. public void transform(Page<SignFamily> signs){
  78. System.out.println("sign-patient-group-team:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
  79. for (SignFamily sign : signs.getContent()) {
  80. try {
  81. if (StringUtils.isNotEmpty(sign.getTeamCode())) {
  82. continue;
  83. }
  84. //建立团队
  85. DoctorTeam doctorTeam = new DoctorTeam();
  86. String doctorTeamCode = getCode();
  87. doctorTeam.setCode(doctorTeamCode);
  88. doctorTeam.setCzrq(new Date());
  89. doctorTeam.setName("团队名称:" + sign.getName());
  90. doctorTeam.setSignType("2");//家庭签约
  91. doctorTeam.setDel("1");
  92. teamDao.save(doctorTeam);
  93. //添加团队成员
  94. if (StringUtils.isNotEmpty(sign.getDoctor())) {
  95. //添加全科
  96. DoctorTeamMember wlyyDoctorTeamDoctor = new DoctorTeamMember();
  97. wlyyDoctorTeamDoctor.setTeam(doctorTeamCode);
  98. wlyyDoctorTeamDoctor.setMemberCode(sign.getDoctor());
  99. wlyyDoctorTeamDoctor.setName(sign.getDoctorName());
  100. wlyyDoctorTeamDoctor.setDel("1");
  101. wlyyDoctorTeamDoctor.setType(2);
  102. wlyyDoctorTeamDoctor.setSignType("2");//家庭签约
  103. wlyyDoctorTeamDoctor.setCode(getCode());
  104. wlyyDoctorTeamDoctor.setCzrq(new Date());
  105. teamMemberDao.save(wlyyDoctorTeamDoctor);
  106. }
  107. if (StringUtils.isNotEmpty(sign.getDoctorHealth())) {
  108. //添加健康管理师
  109. DoctorTeamMember wlyyDoctorTeamDoctor = new DoctorTeamMember();
  110. wlyyDoctorTeamDoctor.setTeam(doctorTeamCode);
  111. wlyyDoctorTeamDoctor.setMemberCode(sign.getDoctorHealth());
  112. wlyyDoctorTeamDoctor.setName(sign.getDoctorHealthName());
  113. wlyyDoctorTeamDoctor.setDel("1");
  114. wlyyDoctorTeamDoctor.setType(3);
  115. wlyyDoctorTeamDoctor.setSignType("2");//家庭签约
  116. wlyyDoctorTeamDoctor.setCode(getCode());
  117. wlyyDoctorTeamDoctor.setCzrq(new Date());
  118. teamMemberDao.save(wlyyDoctorTeamDoctor);
  119. }
  120. //添加患者和团队的关系
  121. DoctorTeamMember wlyyDoctorTeamPatient = new DoctorTeamMember();
  122. wlyyDoctorTeamPatient.setTeam(doctorTeamCode);
  123. wlyyDoctorTeamPatient.setMemberCode(sign.getPatient());
  124. wlyyDoctorTeamPatient.setName(sign.getName());
  125. wlyyDoctorTeamPatient.setDel("1");
  126. wlyyDoctorTeamPatient.setSignType("2");//家庭签约
  127. wlyyDoctorTeamPatient.setType(5);
  128. wlyyDoctorTeamPatient.setCode(getCode());
  129. wlyyDoctorTeamPatient.setCzrq(new Date());
  130. teamMemberDao.save(wlyyDoctorTeamPatient);
  131. if (StringUtils.isEmpty(sign.getIdcard())) {
  132. System.out.println("error:sign-family-set-group:no-idcard:" + sign.getId());
  133. continue;
  134. }
  135. int age = IdCardUtil.getAgeForIdcard(sign.getIdcard());
  136. String groupCode = "1";
  137. if (age >= 65) {
  138. groupCode = "3";
  139. }
  140. if (StringUtils.isNotEmpty(sign.getDoctorHealth())) {
  141. //把病人添加到健康管理师的健康分组里
  142. DoctorPatientGroupInfo doctorPatientGroupInfo = new DoctorPatientGroupInfo();
  143. doctorPatientGroupInfo.setCzrq(new Date());
  144. doctorPatientGroupInfo.setDoctor(sign.getDoctorHealth());
  145. doctorPatientGroupInfo.setStatus(1);
  146. doctorPatientGroupInfo.setPatient(sign.getPatient());
  147. doctorPatientGroupInfo.setPname(sign.getName());
  148. doctorPatientGroupInfo.setPartAmount(0);
  149. doctorPatientGroupInfo.setGroup(groupCode);//默认健康分组
  150. doctorPatientGroupInfo.setQyrq(sign.getApplyDate());
  151. doctorPatientGroupInfo.setSignType("2");//家庭签约
  152. groupInfoDao.save(doctorPatientGroupInfo);
  153. }
  154. if (StringUtils.isNotEmpty(sign.getDoctor())) {
  155. //把病人添加到全科医生的健康分组里
  156. DoctorPatientGroupInfo doctorPatientGroupInfo = new DoctorPatientGroupInfo();
  157. doctorPatientGroupInfo.setCzrq(new Date());
  158. doctorPatientGroupInfo.setDoctor(sign.getDoctor());
  159. doctorPatientGroupInfo.setStatus(1);
  160. doctorPatientGroupInfo.setPatient(sign.getPatient());
  161. doctorPatientGroupInfo.setPname(sign.getName());
  162. doctorPatientGroupInfo.setPartAmount(0);
  163. doctorPatientGroupInfo.setGroup(groupCode);//默认健康分组
  164. doctorPatientGroupInfo.setQyrq(sign.getApplyDate());
  165. doctorPatientGroupInfo.setSignType("2");//家庭签约
  166. groupInfoDao.save(doctorPatientGroupInfo);
  167. }
  168. List<DoctorPatientGroupInfo> groups = groupInfoDao.findPatientGroups(sign.getPatient());
  169. if (groups != null && groups.size() > 0) {
  170. for (DoctorPatientGroupInfo group : groups) {
  171. if (StringUtils.isNotEmpty(group.getSignType()) && group.getSignType().equals("2")) {
  172. continue;
  173. }
  174. DoctorPatientGroupInfo patientGroup = new DoctorPatientGroupInfo();
  175. patientGroup.setCzrq(new Date());
  176. patientGroup.setDoctor(group.getDoctor());
  177. patientGroup.setStatus(1);
  178. patientGroup.setPatient(sign.getPatient());
  179. patientGroup.setPname(sign.getName());
  180. patientGroup.setPartAmount(0);
  181. patientGroup.setGroup(group.getGroup());
  182. patientGroup.setQyrq(sign.getApplyDate());
  183. patientGroup.setSignType("2");//家庭签约
  184. groupInfoDao.save(patientGroup);
  185. }
  186. }
  187. sign.setTeamCode(doctorTeamCode);
  188. signFamilyDao.save(sign);
  189. } catch (Exception e) {
  190. e.printStackTrace();
  191. }
  192. }
  193. System.out.println("sign-patient-group-team:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
  194. }
  195. }