LocalBusHospitalService.java 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. package com.coffee.bus.service;
  2. import cn.hutool.core.util.ObjectUtil;
  3. import cn.hutool.core.util.StrUtil;
  4. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  5. import com.baomidou.mybatisplus.core.toolkit.IdWorker;
  6. import com.coffee.bus.bean.GeoPoint;
  7. import com.coffee.bus.entity.BusHospitalConfigEntity;
  8. import com.coffee.bus.entity.BusHospitalEntity;
  9. import com.coffee.bus.hospital.HospitalManagerRegister;
  10. import com.coffee.bus.hospital.his.strategy.HisStrategyEnum;
  11. import com.coffee.bus.mapper.BusHospitalMapper;
  12. import com.coffee.bus.utils.CodeUtils;
  13. import com.coffee.common.cache.ConfigStorage;
  14. import com.coffee.common.cache.manager.ConfigStorageManager;
  15. import com.coffee.common.config.mybatis.GetNameInterface;
  16. import com.coffee.common.config.websocket.HospitalCodeCheck;
  17. import com.coffee.common.crud.BaseService;
  18. import com.coffee.common.exception.CustomException;
  19. import org.springframework.beans.factory.annotation.Autowired;
  20. import org.springframework.boot.CommandLineRunner;
  21. import org.springframework.context.annotation.Lazy;
  22. import org.springframework.stereotype.Service;
  23. import javax.annotation.PostConstruct;
  24. import java.util.List;
  25. import java.util.Optional;
  26. import java.util.concurrent.CompletableFuture;
  27. /**
  28. * @author lifang
  29. * @version 1.0.0
  30. * @ClassName LocalBusHospitalService.java
  31. * @Description TODO
  32. * @createTime 2022年03月19日 09:27:00
  33. */
  34. @Service
  35. public class LocalBusHospitalService extends BaseService<BusHospitalMapper, BusHospitalEntity,String> implements CommandLineRunner, GetNameInterface<String,String>, HospitalCodeCheck {
  36. @Autowired
  37. @Lazy
  38. private ConfigStorageManager configStorageManager;
  39. private ConfigStorage nameCache;
  40. @Autowired
  41. @Lazy
  42. private HospitalManagerRegister hospitalManagerRegister;
  43. @Autowired
  44. @Lazy
  45. private LocalBusHospitalConfigService configService;
  46. @PostConstruct
  47. public void init(){
  48. nameCache =configStorageManager.getStorage("hospital_name");
  49. }
  50. @Override
  51. public void validateBeforeSave(BusHospitalEntity entity) {
  52. long id = IdWorker.getId();
  53. String name = entity.getName();
  54. if(isExistName(name)){
  55. throw new CustomException(String.format("医院名称[%s]不可重复",entity.getName()));
  56. }
  57. if(entity.getStrategy()==null){
  58. entity.setStrategy(HisStrategyEnum.NONE);
  59. }
  60. entity.setScriptOnline(false);
  61. entity.setCode(CodeUtils.genInviteCode(id));
  62. entity.setId(String.valueOf(id));
  63. }
  64. @Override
  65. public void validateBeforeUpdate(BusHospitalEntity entity) {
  66. if("1".equals(entity.getId())){
  67. throw new CustomException("系统级医院,不可修改");
  68. }
  69. BusHospitalEntity hospital = this.getById(entity.getName());
  70. if(hospital==null){
  71. return;
  72. }
  73. if (!ObjectUtil.equal(entity.getName(), hospital.getName())) {
  74. if(!isExistName(entity.getName())){
  75. throw new CustomException(String.format("医院名称[%s]不可重复",entity.getName()));
  76. }
  77. }
  78. }
  79. @Override
  80. public void validateBeforeDelete(String id) {
  81. if("1".equals(id)){
  82. throw new CustomException("系统级医院,不可删除");
  83. }
  84. }
  85. @Override
  86. public void postSave(BusHospitalEntity entity) {
  87. CompletableFuture.runAsync(()->{
  88. List<BusHospitalConfigEntity> configs =
  89. configService.list(new QueryWrapper<BusHospitalConfigEntity>().lambda()
  90. .or()
  91. .eq(BusHospitalConfigEntity::getTenantId, 1));
  92. configs.forEach(config->{
  93. config.setId(null);
  94. config.setTenantId(entity.getId());
  95. });
  96. configService.saveBatch(configs);
  97. })
  98. .whenComplete((i,e)->{
  99. if(e!=null){
  100. log.error("新增医院默认配置失败,",e);
  101. }
  102. });
  103. nameCache.setConfig(entity.getId(),entity.getName());
  104. }
  105. @Override
  106. public void postUpdate(BusHospitalEntity entity) {
  107. hospitalManagerRegister.refresh(entity.getId(),true,null!=entity.getScript());
  108. if(StrUtil.isNotEmpty(entity.getName())){
  109. nameCache.setConfig(entity.getId(),entity.getName());
  110. }
  111. }
  112. @Override
  113. public void postDelete(String id) {
  114. }
  115. @Override
  116. public void run(String... args) {
  117. saveDefaultHospital();
  118. List<BusHospitalEntity> list = list();
  119. list.forEach(entity -> {
  120. nameCache.setConfig(entity.getId(),entity.getName());
  121. });
  122. configService.saveDefaultConfig();
  123. list.forEach(hospital->hospitalManagerRegister.refresh(hospital.getId(),true,true,true));
  124. }
  125. @Override
  126. public String getName(String id) {
  127. return nameCache.getConfig(id).asString();
  128. }
  129. private void saveDefaultHospital(){
  130. BusHospitalEntity hospital = new BusHospitalEntity();
  131. hospital.setId("1");
  132. hospital.setName("驼人医疗器械有限公司");
  133. hospital.setRemark("系统级医院,不可删除、修改");
  134. GeoPoint geoPoint = new GeoPoint();
  135. geoPoint.setLon("35.135106");
  136. geoPoint.setLat("114.658855");
  137. hospital.setCoordinate(geoPoint);
  138. try {
  139. this.save(hospital);
  140. }catch (Exception e){
  141. }
  142. }
  143. /**
  144. * 描述: 医院名称是否有效
  145. * @author lifang
  146. * @date 2022/5/12 15:42
  147. * @param name
  148. * @return boolean
  149. */
  150. public boolean isExistName(String name){
  151. return this.count(new QueryWrapper<BusHospitalEntity>().lambda().eq(BusHospitalEntity::getName,name))!=0;
  152. }
  153. @Override
  154. public boolean isExistCode(String code) {
  155. return this.count(new QueryWrapper<BusHospitalEntity>().lambda().eq(BusHospitalEntity::getCode,code))!=0;
  156. }
  157. @Override
  158. public String getHospitalId(String code) {
  159. return Optional.ofNullable(this.getOne(new QueryWrapper<BusHospitalEntity>().lambda().eq(BusHospitalEntity::getCode,code))).orElse(new BusHospitalEntity()).getId();
  160. }
  161. }