SignTeamAndGroupRunnable.java 9.9 KB

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