| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 |
- package com.coffee.bus.service;
- import cn.hutool.core.util.ObjectUtil;
- import cn.hutool.core.util.StrUtil;
- import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
- import com.baomidou.mybatisplus.core.toolkit.IdWorker;
- import com.coffee.bus.bean.GeoPoint;
- import com.coffee.bus.entity.BusHospitalConfigEntity;
- import com.coffee.bus.entity.BusHospitalEntity;
- import com.coffee.bus.hospital.HospitalManagerRegister;
- import com.coffee.bus.hospital.his.strategy.HisStrategyEnum;
- import com.coffee.bus.mapper.BusHospitalMapper;
- import com.coffee.bus.utils.CodeUtils;
- import com.coffee.common.cache.ConfigStorage;
- import com.coffee.common.cache.manager.ConfigStorageManager;
- import com.coffee.common.config.mybatis.GetNameInterface;
- import com.coffee.common.config.websocket.HospitalCodeCheck;
- import com.coffee.common.crud.BaseService;
- import com.coffee.common.exception.CustomException;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.boot.CommandLineRunner;
- import org.springframework.context.annotation.Lazy;
- import org.springframework.stereotype.Service;
- import javax.annotation.PostConstruct;
- import java.util.List;
- import java.util.Optional;
- import java.util.concurrent.CompletableFuture;
- /**
- * @author lifang
- * @version 1.0.0
- * @ClassName LocalBusHospitalService.java
- * @Description TODO
- * @createTime 2022年03月19日 09:27:00
- */
- @Service
- public class LocalBusHospitalService extends BaseService<BusHospitalMapper, BusHospitalEntity,String> implements CommandLineRunner, GetNameInterface<String,String>, HospitalCodeCheck {
- @Autowired
- @Lazy
- private ConfigStorageManager configStorageManager;
- private ConfigStorage nameCache;
- @Autowired
- @Lazy
- private HospitalManagerRegister hospitalManagerRegister;
- @Autowired
- @Lazy
- private LocalBusHospitalConfigService configService;
- @PostConstruct
- public void init(){
- nameCache =configStorageManager.getStorage("hospital_name");
- }
- @Override
- public void validateBeforeSave(BusHospitalEntity entity) {
- long id = IdWorker.getId();
- String name = entity.getName();
- if(isExistName(name)){
- throw new CustomException(String.format("医院名称[%s]不可重复",entity.getName()));
- }
- if(entity.getStrategy()==null){
- entity.setStrategy(HisStrategyEnum.NONE);
- }
- entity.setScriptOnline(false);
- entity.setCode(CodeUtils.genInviteCode(id));
- entity.setId(String.valueOf(id));
- }
- @Override
- public void validateBeforeUpdate(BusHospitalEntity entity) {
- if("1".equals(entity.getId())){
- throw new CustomException("系统级医院,不可修改");
- }
- BusHospitalEntity hospital = this.getById(entity.getName());
- if(hospital==null){
- return;
- }
- if (!ObjectUtil.equal(entity.getName(), hospital.getName())) {
- if(!isExistName(entity.getName())){
- throw new CustomException(String.format("医院名称[%s]不可重复",entity.getName()));
- }
- }
- }
- @Override
- public void validateBeforeDelete(String id) {
- if("1".equals(id)){
- throw new CustomException("系统级医院,不可删除");
- }
- }
- @Override
- public void postSave(BusHospitalEntity entity) {
- CompletableFuture.runAsync(()->{
- List<BusHospitalConfigEntity> configs =
- configService.list(new QueryWrapper<BusHospitalConfigEntity>().lambda()
- .or()
- .eq(BusHospitalConfigEntity::getTenantId, 1));
- configs.forEach(config->{
- config.setId(null);
- config.setTenantId(entity.getId());
- });
- configService.saveBatch(configs);
- })
- .whenComplete((i,e)->{
- if(e!=null){
- log.error("新增医院默认配置失败,",e);
- }
- });
- nameCache.setConfig(entity.getId(),entity.getName());
- }
- @Override
- public void postUpdate(BusHospitalEntity entity) {
- hospitalManagerRegister.refresh(entity.getId(),true,null!=entity.getScript());
- if(StrUtil.isNotEmpty(entity.getName())){
- nameCache.setConfig(entity.getId(),entity.getName());
- }
- }
- @Override
- public void postDelete(String id) {
- }
- @Override
- public void run(String... args) {
- saveDefaultHospital();
- List<BusHospitalEntity> list = list();
- list.forEach(entity -> {
- nameCache.setConfig(entity.getId(),entity.getName());
- });
- configService.saveDefaultConfig();
- list.forEach(hospital->hospitalManagerRegister.refresh(hospital.getId(),true,true,true));
- }
- @Override
- public String getName(String id) {
- return nameCache.getConfig(id).asString();
- }
- private void saveDefaultHospital(){
- BusHospitalEntity hospital = new BusHospitalEntity();
- hospital.setId("1");
- hospital.setName("驼人医疗器械有限公司");
- hospital.setRemark("系统级医院,不可删除、修改");
- GeoPoint geoPoint = new GeoPoint();
- geoPoint.setLon("35.135106");
- geoPoint.setLat("114.658855");
- hospital.setCoordinate(geoPoint);
- try {
- this.save(hospital);
- }catch (Exception e){
- }
- }
- /**
- * 描述: 医院名称是否有效
- * @author lifang
- * @date 2022/5/12 15:42
- * @param name
- * @return boolean
- */
- public boolean isExistName(String name){
- return this.count(new QueryWrapper<BusHospitalEntity>().lambda().eq(BusHospitalEntity::getName,name))!=0;
- }
- @Override
- public boolean isExistCode(String code) {
- return this.count(new QueryWrapper<BusHospitalEntity>().lambda().eq(BusHospitalEntity::getCode,code))!=0;
- }
- @Override
- public String getHospitalId(String code) {
- return Optional.ofNullable(this.getOne(new QueryWrapper<BusHospitalEntity>().lambda().eq(BusHospitalEntity::getCode,code))).orElse(new BusHospitalEntity()).getId();
- }
- }
|