提交 4020d16b authored 作者: zhu's avatar zhu

dev

上级 1f64609f
No preview for this file type
/.idea/ /.idea/
/logs/
/.gradle/
/build/
...@@ -60,13 +60,17 @@ dependencies { ...@@ -60,13 +60,17 @@ dependencies {
implementation "cn.dev33:sa-token-spring-boot3-starter:${satokenVersion}" implementation "cn.dev33:sa-token-spring-boot3-starter:${satokenVersion}"
implementation "cn.dev33:sa-token-jwt:${satokenVersion}" implementation "cn.dev33:sa-token-jwt:${satokenVersion}"
implementation "com.google.guava:guava:${guavaVersion}" implementation "com.google.guava:guava:${guavaVersion}"
implementation 'com.github.binarywang:wx-java:4.5.5.B' implementation 'com.github.binarywang:weixin-java-miniapp:4.5.5.B'
implementation 'org.springframework.boot:spring-boot-starter-data-redis:3.1.3'
implementation 'redis.clients:jedis:3.7.1'
implementation 'com.github.wechatpay-apiv3:wechatpay-java:0.2.11'
annotationProcessor "org.projectlombok:lombok:${lombokPluginVersion}" annotationProcessor "org.projectlombok:lombok:${lombokPluginVersion}"
annotationProcessor "org.mapstruct:mapstruct-processor:${mapStructVersion}" annotationProcessor "org.mapstruct:mapstruct-processor:${mapStructVersion}"
annotationProcessor "org.springframework.boot:spring-boot-configuration-processor" annotationProcessor "org.springframework.boot:spring-boot-configuration-processor"
compileOnly "org.projectlombok:lombok:${lombokPluginVersion}" compileOnly "org.projectlombok:lombok:${lombokPluginVersion}"
compileOnly 'com.github.jedis-lock:jedis-lock:1.0.0'
runtimeOnly "mysql:mysql-connector-java:${mysqlVersion}" runtimeOnly "mysql:mysql-connector-java:${mysqlVersion}"
developmentOnly 'org.springframework.boot:spring-boot-devtools' developmentOnly 'org.springframework.boot:spring-boot-devtools'
......
No preview for this file type
No preview for this file type
package com.xwd.hospital.server.config;
import org.springframework.cache.CacheManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.cache.RedisCacheWriter;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.*;
import java.time.Duration;
@Configuration
public class RedisConfiguration {
/**
* spring-boot-autoconfigure的RedisAutoConfiguration自动注册的RedisTemplate,使用的序列化器为默人的JdkSerializationRedisSerializer,序列化后生成的是不利于阅读的编码字符串。
* 所以我们手动注册一个RedisTemplate,设置RedisConnectionFactory属性为spring-boot-autoconfigure的JedisConnectionConfiguration/LettuceConnectionConfiguration自动注册的RedisConnectionFactory,并设置序列化器为StringRedisSerializer。
* 其实也可以直接在主启动类中使用@Autowired注入SpringBoot自动注册的RedisTemplate,并添加一个@PostConstruct的方法来修改它的序列化器为StringRedisSerializer。
*/
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
final RedisTemplate<String, Object> template = new RedisTemplate<>();
// 设置ConnectionFactory,SpringBoot会自动注册ConnectionFactory-Bean
template.setConnectionFactory(redisConnectionFactory);
// 设置序列化器为StringRedisSerializer(默认是 JdkSerializationRedisSerializer , java操作时会产生乱码)
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
template.setKeySerializer(stringRedisSerializer);
template.setHashKeySerializer(stringRedisSerializer);
template.setHashValueSerializer(stringRedisSerializer);
template.setValueSerializer(new JdkSerializationRedisSerializer());
template.afterPropertiesSet();
return template;
}
/**
* 配置StringRedisTemplate
* @param factory
* @return
*/
@Bean
public StringRedisTemplate stringRedisTemplate(
RedisConnectionFactory factory) {
StringRedisTemplate redisTemplate = new StringRedisTemplate();
redisTemplate.setConnectionFactory(factory);
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
return redisTemplate;
}
/**
* 支持使用Spring缓存注解操作Redis。(注意:主启动类上必须加@EnableCaching,开启支持缓存注解!)
* 若使用了spring-boot-autoconfigure,只需在application.yml中配置spring.cacheh和spring.cache.redis即可,RedisCacheConfiguration会自动注册RedisCacheManager
*/
@Bean
public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
// 初始化一个RedisCacheWriter
RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory);
RedisCacheConfiguration defaultCacheConfig = RedisCacheConfiguration.defaultCacheConfig();
// 默认不过期
defaultCacheConfig = defaultCacheConfig.entryTtl(Duration.ZERO)
// 设置 key为string序列化
.serializeKeysWith(RedisSerializationContext.SerializationPair
.fromSerializer(new StringRedisSerializer()))
// 设置value为json序列化
.serializeValuesWith(RedisSerializationContext.SerializationPair
.fromSerializer(new Jackson2JsonRedisSerializer<>(
Object.class)));
// 不缓存空值
// .disableCachingNullValues();
// 初始化RedisCacheManager
return new RedisCacheManager(redisCacheWriter, defaultCacheConfig);
}
}
...@@ -38,6 +38,7 @@ public class SaTokenConfig implements WebMvcConfigurer { ...@@ -38,6 +38,7 @@ public class SaTokenConfig implements WebMvcConfigurer {
// 放行用户登录注册相关接口 // 放行用户登录注册相关接口
.excludePathPatterns("/v1/system/user/login") .excludePathPatterns("/v1/system/user/login")
.excludePathPatterns("/v1/system/user/register") .excludePathPatterns("/v1/system/user/register")
.excludePathPatterns("/v1/system/home/test")
// swagger 放行 // swagger 放行
.excludePathPatterns("/webjars/**") .excludePathPatterns("/webjars/**")
.excludePathPatterns("/doc.html") .excludePathPatterns("/doc.html")
......
package com.xwd.hospital.server.config;
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
import cn.binarywang.wx.miniapp.bean.WxMaKefuMessage;
import cn.binarywang.wx.miniapp.bean.WxMaSubscribeMessage;
import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl;
import cn.binarywang.wx.miniapp.config.impl.WxMaRedisConfigImpl;
import cn.binarywang.wx.miniapp.message.WxMaMessageHandler;
import cn.binarywang.wx.miniapp.message.WxMaMessageRouter;
import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.common.error.WxRuntimeException;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import redis.clients.jedis.JedisPool;
import java.io.File;
import java.util.List;
import java.util.stream.Collectors;
/**
* 小程序相关配置转化Bean
*/
@Slf4j
@Configuration
@EnableConfigurationProperties(WxMaProperties.class)
public class WxMaConfiguration {
private final WxMaProperties properties;
@Autowired
public WxMaConfiguration(WxMaProperties properties) {
this.properties = properties;
}
@Bean
public WxMaService wxMaService() {
List<WxMaProperties.Config> configs = this.properties.getConfigs();
if (configs == null) {
throw new WxRuntimeException("添加相关配置!");
}
WxMaService maService = new WxMaServiceImpl();
maService.setMultiConfigs(
configs.stream()
.map(a -> {
// WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl();
WxMaDefaultConfigImpl config = new WxMaRedisConfigImpl(new JedisPool(new GenericObjectPoolConfig(),"localhost",6379,2000,"123456"));
// 使用上面的配置时,需要同时引入jedis-lock的依赖,否则会报类无法找到的异常
config.setAppid(a.getAppid());
config.setSecret(a.getSecret());
config.setToken(a.getToken());
config.setAesKey(a.getAesKey());
config.setMsgDataFormat(a.getMsgDataFormat());
return config;
}).collect(Collectors.toMap(WxMaDefaultConfigImpl::getAppid, a -> a, (o, n) -> o)));
return maService;
}
@Bean
public WxMaMessageRouter wxMaMessageRouter(WxMaService wxMaService) {
final WxMaMessageRouter router = new WxMaMessageRouter(wxMaService);
router
.rule().handler(logHandler).next()
.rule().async(false).content("订阅消息").handler(subscribeMsgHandler).end()
.rule().async(false).content("文本").handler(textHandler).end()
.rule().async(false).content("图片").handler(picHandler).end()
.rule().async(false).content("二维码").handler(qrcodeHandler).end();
return router;
}
private final WxMaMessageHandler subscribeMsgHandler = (wxMessage, context, service, sessionManager) -> {
service.getMsgService().sendSubscribeMsg(WxMaSubscribeMessage.builder()
.templateId("此处更换为自己的模板id")
.data(Lists.newArrayList(
new WxMaSubscribeMessage.MsgData("keyword1", "339208499")))
.toUser(wxMessage.getFromUser())
.build());
return null;
};
private final WxMaMessageHandler logHandler = (wxMessage, context, service, sessionManager) -> {
log.info("收到消息:" + wxMessage.toString());
service.getMsgService().sendKefuMsg(WxMaKefuMessage.newTextBuilder().content("收到信息为:" + wxMessage.toJson())
.toUser(wxMessage.getFromUser()).build());
return null;
};
private final WxMaMessageHandler textHandler = (wxMessage, context, service, sessionManager) -> {
service.getMsgService().sendKefuMsg(WxMaKefuMessage.newTextBuilder().content("回复文本消息")
.toUser(wxMessage.getFromUser()).build());
return null;
};
private final WxMaMessageHandler picHandler = (wxMessage, context, service, sessionManager) -> {
try {
WxMediaUploadResult uploadResult = service.getMediaService()
.uploadMedia("image", "png",
ClassLoader.getSystemResourceAsStream("tmp.png"));
service.getMsgService().sendKefuMsg(
WxMaKefuMessage
.newImageBuilder()
.mediaId(uploadResult.getMediaId())
.toUser(wxMessage.getFromUser())
.build());
} catch (WxErrorException e) {
e.printStackTrace();
}
return null;
};
private final WxMaMessageHandler qrcodeHandler = (wxMessage, context, service, sessionManager) -> {
try {
final File file = service.getQrcodeService().createQrcode("123", 430);
WxMediaUploadResult uploadResult = service.getMediaService().uploadMedia("image", file);
service.getMsgService().sendKefuMsg(
WxMaKefuMessage
.newImageBuilder()
.mediaId(uploadResult.getMediaId())
.toUser(wxMessage.getFromUser())
.build());
} catch (WxErrorException e) {
e.printStackTrace();
}
return null;
};
}
package com.xwd.hospital.server.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import java.util.List;
/**
* 小程序配置文件读取
*/
@Data
@ConfigurationProperties(prefix = "wx.miniapp")
public class WxMaProperties {
private List<Config> configs;
@Data
public static class Config {
/**
* 设置微信小程序的appid
*/
private String appid;
/**
* 设置微信小程序的Secret
*/
private String secret;
/**
* 设置微信小程序消息服务器配置的token
*/
private String token;
/**
* 设置微信小程序消息服务器配置的EncodingAESKey
*/
private String aesKey;
/**
* 消息格式,XML或者JSON
*/
private String msgDataFormat;
}
}
package com.xwd.hospital.server.constants;
import lombok.Data;
@Data
public class Constant {
public static final String SMS_PREFIX = "sms_code_login_";
}
...@@ -43,13 +43,13 @@ public class DepartmentInfo extends BaseDomain { ...@@ -43,13 +43,13 @@ public class DepartmentInfo extends BaseDomain {
*/ */
@TableField(value = "department_name") @TableField(value = "department_name")
@Schema(description = "科室名称", nullable = false) @Schema(description = "科室名称", nullable = false)
private Long departmentName; private String departmentName;
/** /**
* 科室介绍 * 科室介绍
*/ */
@TableField(value = "department_introduce", select = false) @TableField(value = "department_introduce", select = false)
@Schema(description = "科室介绍", nullable = false) @Schema(description = "科室介绍", nullable = false)
private Long departmentIntroduce; private String departmentIntroduce;
/** /**
* 科室层级 * 科室层级
*/ */
...@@ -60,7 +60,7 @@ public class DepartmentInfo extends BaseDomain { ...@@ -60,7 +60,7 @@ public class DepartmentInfo extends BaseDomain {
* 上级科室id * 上级科室id
*/ */
@TableField(value = "parent_id") @TableField(value = "parent_id")
@Schema(description = "上级科室id", nullable = false) @Schema(description = "上级科室id")
private Long parentId; private Long parentId;
/** /**
* 是否隐藏 * 是否隐藏
...@@ -144,12 +144,6 @@ public class DepartmentInfo extends BaseDomain { ...@@ -144,12 +144,6 @@ public class DepartmentInfo extends BaseDomain {
} }
return false; return false;
} }
if (this.getParentId() == null) {
if (throwException) {
throw new ApiCode.ApiException(-1, "上级科室id不能为空!");
}
return false;
}
if (this.getHiddenStatus() == null) { if (this.getHiddenStatus() == null) {
if (throwException) { if (throwException) {
throw new ApiCode.ApiException(-1, "是否隐藏不能为空!"); throw new ApiCode.ApiException(-1, "是否隐藏不能为空!");
......
...@@ -158,6 +158,8 @@ public class DoctorInfo extends BaseDomain { ...@@ -158,6 +158,8 @@ public class DoctorInfo extends BaseDomain {
@Schema(description = "更新时间", nullable = false) @Schema(description = "更新时间", nullable = false)
private java.util.Date updateTime; private java.util.Date updateTime;
private List<DoctorServiceInfo> serviceInfoList;
/** /**
* 设置默认值 * 设置默认值
*/ */
......
...@@ -43,7 +43,7 @@ public class HospitalInfo extends BaseDomain { ...@@ -43,7 +43,7 @@ public class HospitalInfo extends BaseDomain {
*/ */
@TableField(value = "hospital_name") @TableField(value = "hospital_name")
@Schema(description = "医院名称", nullable = false) @Schema(description = "医院名称", nullable = false)
private Long hospitalName; private String hospitalName;
/** /**
* 医院等级 * 医院等级
*/ */
......
package com.xwd.hospital.server.dto;
import com.xwd.hospital.server.enums.OrderTypeEnum;
import lombok.Data;
import java.util.Date;
import java.util.List;
@Data
public class CreateOrderDto {
private Long userInfoId;
private Long doctorId;
private Long patientId;
private OrderTypeEnum orderType;
//优惠券id(不使用优惠券时为空)
private Long userCouponId;
//预约就诊日期(续方开药时为空)
private Date appointmentDate;
private String patientSelfIntroduce;
private List<String> pictureList;
}
package com.xwd.hospital.server.dto;
import com.xwd.hospital.server.enums.YesNoEnum;
import lombok.Data;
import java.util.List;
@Data
public class DepartmentDto {
private Long id;
private String departmentName;
private Long parentId;
private List<DepartmentDto> childList;
}
package com.xwd.hospital.server.dto;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class DoctorDto {
private Long doctorId;
private String doctorName;
private String hospitalName;
private String departmentName;
private String expertiseArea;
private String introduction;
private String title;
private String avatar;
private BigDecimal service_price;
private int orderCount;
private int fansCount;
}
package com.xwd.hospital.server.dto;
import com.xwd.hospital.server.domain.ArticleInfo;
import com.xwd.hospital.server.domain.Order;
import lombok.Data;
import java.util.List;
@Data
public class DoctorMiniAppHomeDto {
private String doctorName;
private String avatar;
private String hospitalName;
private String departmentName;
private String doctorTitle;
private List<Order> orderList;
private List<ArticleInfo> articleInfoList;
}
package com.xwd.hospital.server.dto;
import com.xwd.hospital.server.enums.UserTypeEnum;
import lombok.Data;
@Data
public class LoginDto {
//小程序授权码
private String code;
//手机号码
private String phoneNumber;
//短信验证码
private String smsAuthCode;
//小程序来源
private UserTypeEnum userType;
}
package com.xwd.hospital.server.dto;
import com.xwd.hospital.server.enums.OrderStateEnum;
import com.xwd.hospital.server.enums.OrderTypeEnum;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
@Data
public class OrderDto {
private String orderNo;
private String hospitalName;
private String doctorName;
private String departmentName;
private String patientName;
private String patientSex;
private OrderStateEnum orderState;
private BigDecimal actualPrice;
private OrderTypeEnum orderType;
private Date createTime;
}
package com.xwd.hospital.server.dto;
import com.xwd.hospital.server.domain.DoctorInfo;
import lombok.Data;
import java.util.List;
@Data
public class PatientMiniAppHomeDto {
private List<DoctorInfo> recommendedDoctor;
}
package com.xwd.hospital.server.dto;
import com.xwd.hospital.server.enums.UserTypeEnum;
import lombok.Data;
@Data
public class RegisterDto {
private String phoneNumber;
private String code;
//小程序来源
private UserTypeEnum userType;
}
package com.xwd.hospital.server.dto;
import com.xwd.hospital.server.enums.UserTypeEnum;
import lombok.Data;
@Data
public class UpdateUserDto {
private String code;
//小程序来源
private UserTypeEnum userType;
private String ivStr;
private String encryptedData;
}
package com.xwd.hospital.server.dto;
import com.xwd.hospital.server.domain.DoctorInfo;
import com.xwd.hospital.server.domain.User;
import com.xwd.hospital.server.domain.UserInfo;
import lombok.Data;
import org.mapstruct.control.MappingControl;
@Data
public class UserDto {
private User user;
private UserInfo userInfo;
private DoctorInfo doctorInfo;
//是否需要注册
private boolean registerFlag = false;
//短信验证码是否正确
private boolean authFlag = true;
}
...@@ -15,6 +15,8 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper; ...@@ -15,6 +15,8 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.xwd.hospital.server.dto.DepartmentDto;
import com.xwd.hospital.server.enums.YesNoEnum;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import com.xwd.hospital.server.domain.DepartmentInfo; import com.xwd.hospital.server.domain.DepartmentInfo;
...@@ -23,5 +25,5 @@ import com.xwd.hospital.server.repository.base.DepartmentInfoBaseMapper; ...@@ -23,5 +25,5 @@ import com.xwd.hospital.server.repository.base.DepartmentInfoBaseMapper;
@Repository @Repository
public interface DepartmentInfoMapper extends DepartmentInfoBaseMapper { public interface DepartmentInfoMapper extends DepartmentInfoBaseMapper {
List<DepartmentDto> queryAllDepartment(YesNoEnum hiddenStatus);
} }
...@@ -15,6 +15,7 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper; ...@@ -15,6 +15,7 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.xwd.hospital.server.dto.DoctorDto;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import com.xwd.hospital.server.domain.DoctorInfo; import com.xwd.hospital.server.domain.DoctorInfo;
...@@ -23,5 +24,8 @@ import com.xwd.hospital.server.repository.base.DoctorInfoBaseMapper; ...@@ -23,5 +24,8 @@ import com.xwd.hospital.server.repository.base.DoctorInfoBaseMapper;
@Repository @Repository
public interface DoctorInfoMapper extends DoctorInfoBaseMapper { public interface DoctorInfoMapper extends DoctorInfoBaseMapper {
List<DoctorDto> queryDoctorList(@Param("sickness")String sickness,
@Param("doctorName")String doctorName,
@Param("departmentId")Long departmentId);
} }
...@@ -23,5 +23,5 @@ import com.xwd.hospital.server.repository.base.DoctorServiceInfoBaseMapper; ...@@ -23,5 +23,5 @@ import com.xwd.hospital.server.repository.base.DoctorServiceInfoBaseMapper;
@Repository @Repository
public interface DoctorServiceInfoMapper extends DoctorServiceInfoBaseMapper { public interface DoctorServiceInfoMapper extends DoctorServiceInfoBaseMapper {
List<DoctorServiceInfo> selectByDoctorId(Long doctorId);
} }
...@@ -15,6 +15,7 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper; ...@@ -15,6 +15,7 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.xwd.hospital.server.domain.DoctorServiceInfo;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import com.xwd.hospital.server.domain.MedicalQualifications; import com.xwd.hospital.server.domain.MedicalQualifications;
......
...@@ -15,6 +15,7 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper; ...@@ -15,6 +15,7 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.xwd.hospital.server.dto.OrderDto;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import com.xwd.hospital.server.domain.Order; import com.xwd.hospital.server.domain.Order;
...@@ -23,5 +24,5 @@ import com.xwd.hospital.server.repository.base.OrderBaseMapper; ...@@ -23,5 +24,5 @@ import com.xwd.hospital.server.repository.base.OrderBaseMapper;
@Repository @Repository
public interface OrderMapper extends OrderBaseMapper { public interface OrderMapper extends OrderBaseMapper {
List<OrderDto> queryOrderListForMiniApp(@Param("")Long userInfoId, @Param("state")String state);
} }
...@@ -22,6 +22,7 @@ import com.xwd.hospital.server.annotation.ApiCommon; ...@@ -22,6 +22,7 @@ import com.xwd.hospital.server.annotation.ApiCommon;
import com.xwd.hospital.server.annotation.AuthUser; import com.xwd.hospital.server.annotation.AuthUser;
import com.xwd.hospital.server.base.BaseController; import com.xwd.hospital.server.base.BaseController;
import com.xwd.hospital.server.domain.User; import com.xwd.hospital.server.domain.User;
import com.xwd.hospital.server.enums.YesNoEnum;
import com.xwd.hospital.server.rest.res.ApiCode; import com.xwd.hospital.server.rest.res.ApiCode;
import com.xwd.hospital.server.domain.DepartmentInfo; import com.xwd.hospital.server.domain.DepartmentInfo;
import com.xwd.hospital.server.rest.req.DepartmentInfoParam; import com.xwd.hospital.server.rest.req.DepartmentInfoParam;
...@@ -87,5 +88,16 @@ public class DepartmentInfoController extends BaseController<DepartmentInfoServi ...@@ -87,5 +88,16 @@ public class DepartmentInfoController extends BaseController<DepartmentInfoServi
return ApiResponse.ok(this.service.saveBatch(entityList)); return ApiResponse.ok(this.service.saveBatch(entityList));
} }
/**
* 查询科室列表
*
* @param
*/
@PostMapping("/queryAllDepartment")
@Operation(summary = "查询科室列表")
public ApiResponse queryAllDepartment(@RequestParam(required = false) YesNoEnum showHidden) {
return ApiResponse.ok(this.service.queryAllDepartment(showHidden));
}
} }
...@@ -22,6 +22,9 @@ import com.xwd.hospital.server.annotation.ApiCommon; ...@@ -22,6 +22,9 @@ import com.xwd.hospital.server.annotation.ApiCommon;
import com.xwd.hospital.server.annotation.AuthUser; import com.xwd.hospital.server.annotation.AuthUser;
import com.xwd.hospital.server.base.BaseController; import com.xwd.hospital.server.base.BaseController;
import com.xwd.hospital.server.domain.User; import com.xwd.hospital.server.domain.User;
import com.xwd.hospital.server.dto.DoctorDto;
import com.xwd.hospital.server.dto.OrderDto;
import com.xwd.hospital.server.rest.req.DoctorSearchParam;
import com.xwd.hospital.server.rest.res.ApiCode; import com.xwd.hospital.server.rest.res.ApiCode;
import com.xwd.hospital.server.domain.DoctorInfo; import com.xwd.hospital.server.domain.DoctorInfo;
import com.xwd.hospital.server.rest.req.DoctorInfoParam; import com.xwd.hospital.server.rest.req.DoctorInfoParam;
...@@ -87,5 +90,21 @@ public class DoctorInfoController extends BaseController<DoctorInfoService, Doct ...@@ -87,5 +90,21 @@ public class DoctorInfoController extends BaseController<DoctorInfoService, Doct
return ApiResponse.ok(this.service.saveBatch(entityList)); return ApiResponse.ok(this.service.saveBatch(entityList));
} }
/**
* 小程序医生列表
*
*/
@PostMapping("/queryDoctorList")
@Operation(summary = "小程序医生列表")
public ApiResponse queryDoctorList(@RequestBody DoctorSearchParam param,
@RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
Page<DoctorDto> page = new Page<>(pageNum, pageSize);
List<DoctorDto> list = this.service.queryDoctorList(param);
page.setRecords(list);
return ApiResponse.ok(page);
}
} }
package com.xwd.hospital.server.rest;
import cn.dev33.satoken.stp.SaLoginModel;
import cn.dev33.satoken.stp.StpUtil;
import com.xwd.hospital.server.annotation.ApiCommon;
import com.xwd.hospital.server.domain.User;
import com.xwd.hospital.server.dto.LoginDto;
import com.xwd.hospital.server.dto.PatientMiniAppHomeDto;
import com.xwd.hospital.server.rest.res.ApiResponse;
import com.xwd.hospital.server.service.HomeService;
import com.xwd.hospital.server.service.RedisService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.springframework.web.bind.annotation.*;
import redis.clients.jedis.JedisPool;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
@Slf4j
@RestController
@Tag(name = "HomeController", description = "首页信息")
@RequestMapping("/v1/system/home")
public class HomeController {
@Resource
private HomeService homeService;
@Resource
private RedisService redisService;
/**
* <pre>
* 患者端首页
* </pre>
*/
@Operation(summary = "患者端首页")
@PostMapping("/patientMiniAppHome")
@ApiCommon
public ApiResponse<PatientMiniAppHomeDto> patientMiniAppHome() {
return ApiResponse.ok(homeService.patientMiniAppHome());
}
/**
* <pre>
* 医生端首页
* </pre>
*/
@Operation(summary = "医生端首页")
@PostMapping("/doctorMiniAppHome")
@ApiCommon
public ApiResponse doctorMiniAppHome(@RequestParam("doctorId") Long doctorId) {
return ApiResponse.ok(homeService.doctorMiniAppHome(doctorId));
}
/**
* <pre>
* test
* </pre>
*/
@Operation(summary = "test")
@PostMapping("/test")
@ApiCommon
public ApiResponse test() {
JedisPool jedis = new JedisPool(new GenericObjectPoolConfig(), "localhost", 6379, 2000, "123456");
jedis.getResource().get("zhuweidong");
// redisService.setExpire("zhuweidong","123456",30, TimeUnit.SECONDS);
return ApiResponse.ok(jedis.getResource().get("zhuweidong"));
}
}
...@@ -22,6 +22,9 @@ import com.xwd.hospital.server.annotation.ApiCommon; ...@@ -22,6 +22,9 @@ import com.xwd.hospital.server.annotation.ApiCommon;
import com.xwd.hospital.server.annotation.AuthUser; import com.xwd.hospital.server.annotation.AuthUser;
import com.xwd.hospital.server.base.BaseController; import com.xwd.hospital.server.base.BaseController;
import com.xwd.hospital.server.domain.User; import com.xwd.hospital.server.domain.User;
import com.xwd.hospital.server.dto.CreateOrderDto;
import com.xwd.hospital.server.dto.OrderDto;
import com.xwd.hospital.server.enums.OrderStateEnum;
import com.xwd.hospital.server.rest.res.ApiCode; import com.xwd.hospital.server.rest.res.ApiCode;
import com.xwd.hospital.server.domain.Order; import com.xwd.hospital.server.domain.Order;
import com.xwd.hospital.server.rest.req.OrderParam; import com.xwd.hospital.server.rest.req.OrderParam;
...@@ -87,5 +90,29 @@ public class OrderController extends BaseController<OrderService, Order, OrderPa ...@@ -87,5 +90,29 @@ public class OrderController extends BaseController<OrderService, Order, OrderPa
return ApiResponse.ok(this.service.saveBatch(entityList)); return ApiResponse.ok(this.service.saveBatch(entityList));
} }
/**
* 小程序端订单列表
*
*/
@PostMapping("/queryOrderListForMiniApp")
@Operation(summary = "小程序端订单列表")
public ApiResponse queryOrderListForMiniApp(@RequestParam(value = "status",required = false)OrderStateEnum status,
@RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
Page<OrderDto> page = new Page<>(pageNum, pageSize);
List<OrderDto> orderDtoList = this.service.queryOrderListForMiniApp(status);
page.setRecords(orderDtoList);
return ApiResponse.ok(page);
}
/**
* 创建订单
*
*/
@PostMapping("/createOrder")
@Operation(summary = "创建订单")
@ApiCommon
public ApiResponse<Order> createOrder(@RequestBody CreateOrderDto createOrderDto, @AuthUser User user) {
return ApiResponse.ok( this.service.createOrder(createOrderDto));
}
} }
package com.xwd.hospital.server.rest;
import com.xwd.hospital.server.annotation.ApiCommon;
import com.xwd.hospital.server.enums.PayPathEnum;
import com.xwd.hospital.server.rest.res.ApiResponse;
import com.xwd.hospital.server.service.PaymentService;
import com.xwd.hospital.server.service.SmsService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController
@Tag(name = "PaymentController", description = "支付相关服务")
@RequestMapping("/v1/system/payment")
public class PaymentController {
@Resource
private PaymentService paymentService;
/**
* <pre>
* 支付行为调起
* </pre>
*/
@Operation(summary = "支付行为调起")
@PostMapping("/startPay")
@ApiCommon
public ApiResponse startPay(@RequestParam("orderNo") String orderNo,@RequestParam("payPath") PayPathEnum payPath) {
return ApiResponse.ok(paymentService.startPay(orderNo, payPath));
}
/**
* <pre>
* 支付回调接口
* </pre>
*/
@Operation(summary = "支付回调接口")
@PostMapping("/payNotify")
@ApiCommon
public void payNotify(HttpServletRequest request, HttpServletResponse response) {
paymentService.payNotify(request,response);
}
/**
* <pre>
* 退款回调接口
* </pre>
*/
@Operation(summary = "退款回调接口")
@PostMapping("/refundNotify")
@ApiCommon
public void refundNotify(HttpServletRequest request, HttpServletResponse response) {
paymentService.refundNotify(request,response);
}
/**
* <pre>
* 支付退款接口
* </pre>
*/
@Operation(summary = "支付退款接口")
@PostMapping("/refundPay")
@ApiCommon
public ApiResponse refundPay(String orderNo) {
paymentService.refundPay(orderNo);
return ApiResponse.ok(true);
}
}
package com.xwd.hospital.server.rest;
import com.xwd.hospital.server.annotation.ApiCommon;
import com.xwd.hospital.server.dto.PatientMiniAppHomeDto;
import com.xwd.hospital.server.rest.res.ApiResponse;
import com.xwd.hospital.server.service.SmsService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController
@Tag(name = "SmsController", description = "通信服务")
@RequestMapping("/v1/system/sms")
public class SmsController {
@Resource
private SmsService smsService;
/**
* <pre>
* 发送短信验证码
* </pre>
*/
@Operation(summary = "发送短信验证码")
@PostMapping("/sendSms")
@ApiCommon
public ApiResponse sendSms(@RequestParam("phone") String phone) {
smsService.sendSms(phone);
return ApiResponse.ok(smsService.sendSms(phone));
}
}
...@@ -23,6 +23,8 @@ import com.xwd.hospital.server.annotation.ApiCommon; ...@@ -23,6 +23,8 @@ import com.xwd.hospital.server.annotation.ApiCommon;
import com.xwd.hospital.server.annotation.AuthUser; import com.xwd.hospital.server.annotation.AuthUser;
import com.xwd.hospital.server.base.BaseController; import com.xwd.hospital.server.base.BaseController;
import com.xwd.hospital.server.domain.User; import com.xwd.hospital.server.domain.User;
import com.xwd.hospital.server.dto.LoginDto;
import com.xwd.hospital.server.dto.UserDto;
import com.xwd.hospital.server.rest.res.ApiCode; import com.xwd.hospital.server.rest.res.ApiCode;
import com.xwd.hospital.server.domain.User; import com.xwd.hospital.server.domain.User;
import com.xwd.hospital.server.rest.req.UserParam; import com.xwd.hospital.server.rest.req.UserParam;
...@@ -161,6 +163,21 @@ public class UserController extends BaseController<UserService, User, UserParam> ...@@ -161,6 +163,21 @@ public class UserController extends BaseController<UserService, User, UserParam>
return ApiResponse.ok(result); return ApiResponse.ok(result);
} }
/**
* <pre>
* 用户登陆接口
* </pre>
*/
@Operation(summary = "小程序用户登陆接口")
@PostMapping("/miniAppLogin")
@ApiCommon
public ApiResponse<UserDto> miniAppLogin(@RequestBody LoginDto loginDto) {
UserDto loginUser = this.service.miniAppLogin(loginDto);
return ApiResponse.ok(loginUser);
}
/** /**
* <pre> * <pre>
* 用户登出接口 * 用户登出接口
......
package com.xwd.hospital.server.rest.req;
import lombok.Data;
@Data
public class DoctorSearchParam {
private String doctorName;
private String departmentName;
private String sickness;
private Long departmentId;
}
...@@ -11,8 +11,11 @@ package com.xwd.hospital.server.service; ...@@ -11,8 +11,11 @@ package com.xwd.hospital.server.service;
import java.util.List; import java.util.List;
import com.xwd.hospital.server.base.BaseService; import com.xwd.hospital.server.base.BaseService;
import com.xwd.hospital.server.domain.DepartmentInfo; import com.xwd.hospital.server.domain.DepartmentInfo;
import com.xwd.hospital.server.enums.YesNoEnum;
import com.xwd.hospital.server.rest.req.DepartmentInfoParam; import com.xwd.hospital.server.rest.req.DepartmentInfoParam;
public interface DepartmentInfoService extends BaseService<DepartmentInfo> { public interface DepartmentInfoService extends BaseService<DepartmentInfo> {
List queryAllDepartment(YesNoEnum showHidden);
} }
...@@ -11,8 +11,12 @@ package com.xwd.hospital.server.service; ...@@ -11,8 +11,12 @@ package com.xwd.hospital.server.service;
import java.util.List; import java.util.List;
import com.xwd.hospital.server.base.BaseService; import com.xwd.hospital.server.base.BaseService;
import com.xwd.hospital.server.domain.DoctorInfo; import com.xwd.hospital.server.domain.DoctorInfo;
import com.xwd.hospital.server.dto.DoctorDto;
import com.xwd.hospital.server.rest.req.DoctorInfoParam; import com.xwd.hospital.server.rest.req.DoctorInfoParam;
import com.xwd.hospital.server.rest.req.DoctorSearchParam;
public interface DoctorInfoService extends BaseService<DoctorInfo> { public interface DoctorInfoService extends BaseService<DoctorInfo> {
List<DoctorDto> queryDoctorList(DoctorSearchParam param);
} }
package com.xwd.hospital.server.service;
import com.xwd.hospital.server.domain.PatientInfo;
import com.xwd.hospital.server.dto.DoctorMiniAppHomeDto;
import com.xwd.hospital.server.dto.PatientMiniAppHomeDto;
public interface HomeService {
PatientMiniAppHomeDto patientMiniAppHome();
DoctorMiniAppHomeDto doctorMiniAppHome(Long doctorId);
}
...@@ -11,8 +11,17 @@ package com.xwd.hospital.server.service; ...@@ -11,8 +11,17 @@ package com.xwd.hospital.server.service;
import java.util.List; import java.util.List;
import com.xwd.hospital.server.base.BaseService; import com.xwd.hospital.server.base.BaseService;
import com.xwd.hospital.server.domain.Order; import com.xwd.hospital.server.domain.Order;
import com.xwd.hospital.server.dto.CreateOrderDto;
import com.xwd.hospital.server.dto.OrderDto;
import com.xwd.hospital.server.enums.OrderStateEnum;
import com.xwd.hospital.server.rest.req.OrderParam; import com.xwd.hospital.server.rest.req.OrderParam;
import org.springframework.data.domain.jaxb.SpringDataJaxb;
public interface OrderService extends BaseService<Order> { public interface OrderService extends BaseService<Order> {
List<OrderDto> queryOrderListForMiniApp(OrderStateEnum state);
Order createOrder(CreateOrderDto createOrderDto);
void cancelOrder(String orderNo);
} }
package com.xwd.hospital.server.service;
import com.xwd.hospital.server.enums.PayPathEnum;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
public interface PaymentService {
String startPay(String orderNo, PayPathEnum payPath);
void payNotify(HttpServletRequest request, HttpServletResponse response);
void refundNotify(HttpServletRequest request, HttpServletResponse response);
void refundPay(String orderNo);
}
package com.xwd.hospital.server.service;
import java.util.concurrent.TimeUnit;
public interface RedisService {
void set(String key,String value);
String get(String key);
void setExpire(String key, String value, long time, TimeUnit timeUnit);
}
package com.xwd.hospital.server.service;
public interface SmsService {
/**
* 发送短信验证码
* @param phoneNumber
* @return
*/
boolean sendSms(String phoneNumber);
}
...@@ -11,6 +11,10 @@ package com.xwd.hospital.server.service; ...@@ -11,6 +11,10 @@ package com.xwd.hospital.server.service;
import java.util.List; import java.util.List;
import com.xwd.hospital.server.base.BaseService; import com.xwd.hospital.server.base.BaseService;
import com.xwd.hospital.server.domain.User; import com.xwd.hospital.server.domain.User;
import com.xwd.hospital.server.dto.LoginDto;
import com.xwd.hospital.server.dto.RegisterDto;
import com.xwd.hospital.server.dto.UpdateUserDto;
import com.xwd.hospital.server.dto.UserDto;
import com.xwd.hospital.server.rest.req.UserParam; import com.xwd.hospital.server.rest.req.UserParam;
public interface UserService extends BaseService<User> { public interface UserService extends BaseService<User> {
...@@ -50,4 +54,23 @@ public interface UserService extends BaseService<User> { ...@@ -50,4 +54,23 @@ public interface UserService extends BaseService<User> {
*/ */
User selectByUsername(String username); User selectByUsername(String username);
/**
* 小程序登录
* @return
*/
UserDto miniAppLogin(LoginDto loginDto);
/**
* 小程序注册
* @return
*/
UserDto miniAppRegister(RegisterDto registserDto);
/**
* 更新用户信息
* @return
*/
UserDto updateMiniUserInfo(UpdateUserDto updateUserDto);
} }
...@@ -9,10 +9,13 @@ ...@@ -9,10 +9,13 @@
package com.xwd.hospital.server.service.impl; package com.xwd.hospital.server.service.impl;
import java.io.Serializable; import java.io.Serializable;
import java.util.List; import java.util.*;
import java.util.ArrayList;
import java.util.Collection;
import com.xwd.hospital.server.domain.User;
import com.xwd.hospital.server.dto.DepartmentDto;
import com.xwd.hospital.server.enums.DepartmentLevelEnum;
import com.xwd.hospital.server.enums.DepartmentLevelType;
import com.xwd.hospital.server.enums.YesNoEnum;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import com.baomidou.mybatisplus.core.enums.SqlMethod; import com.baomidou.mybatisplus.core.enums.SqlMethod;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
...@@ -48,5 +51,34 @@ public class DepartmentInfoServiceImpl extends ServiceImpl<DepartmentInfoMapper, ...@@ -48,5 +51,34 @@ public class DepartmentInfoServiceImpl extends ServiceImpl<DepartmentInfoMapper,
return executeBatch(entityList, batchSize, (sqlSession, entity) -> sqlSession.insert(sqlStatement, entity)); return executeBatch(entityList, batchSize, (sqlSession, entity) -> sqlSession.insert(sqlStatement, entity));
} }
@Override
public List queryAllDepartment(YesNoEnum showHidden) {
List<DepartmentDto> departmentDtos = this.getBaseMapper().queryAllDepartment(showHidden);
return buildDepartmentDto(departmentDtos);
}
public static List<DepartmentDto> buildDepartmentDto(List<DepartmentDto> departmentList) {
List<DepartmentDto> parentDepartmentList = new ArrayList<>();
Map<Long, DepartmentDto> departmentMap = new HashMap<>();
for (DepartmentDto departmentDto : departmentList) {
departmentMap.put(departmentDto.getId(), departmentDto);
}
for (DepartmentDto departmentDto : departmentList) {
if (departmentDto.getParentId() != null) {
DepartmentDto parent = departmentMap.get(departmentDto.getParentId());
if (parent != null) {
parent.getChildList().add(departmentDto);
}
} else {
parentDepartmentList.add(departmentDto);
}
}
return parentDepartmentList;
}
} }
...@@ -13,11 +13,17 @@ import java.util.List; ...@@ -13,11 +13,17 @@ import java.util.List;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import com.xwd.hospital.server.domain.ArticleInfo;
import com.xwd.hospital.server.domain.DepartmentInfo;
import com.xwd.hospital.server.dto.DoctorDto;
import com.xwd.hospital.server.rest.req.DoctorSearchParam;
import com.xwd.hospital.server.service.DepartmentInfoService;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import com.baomidou.mybatisplus.core.enums.SqlMethod; import com.baomidou.mybatisplus.core.enums.SqlMethod;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper; import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import com.xwd.hospital.server.service.DoctorInfoService; import com.xwd.hospital.server.service.DoctorInfoService;
...@@ -28,6 +34,8 @@ import com.xwd.hospital.server.rest.req.DoctorInfoParam; ...@@ -28,6 +34,8 @@ import com.xwd.hospital.server.rest.req.DoctorInfoParam;
@Service @Service
public class DoctorInfoServiceImpl extends ServiceImpl<DoctorInfoMapper, DoctorInfo> implements DoctorInfoService { public class DoctorInfoServiceImpl extends ServiceImpl<DoctorInfoMapper, DoctorInfo> implements DoctorInfoService {
@Resource
private DepartmentInfoService departmentInfoService;
@Override @Override
public int updateAllFieldsById(DoctorInfo entity) { public int updateAllFieldsById(DoctorInfo entity) {
...@@ -48,5 +56,13 @@ public class DoctorInfoServiceImpl extends ServiceImpl<DoctorInfoMapper, DoctorI ...@@ -48,5 +56,13 @@ public class DoctorInfoServiceImpl extends ServiceImpl<DoctorInfoMapper, DoctorI
return executeBatch(entityList, batchSize, (sqlSession, entity) -> sqlSession.insert(sqlStatement, entity)); return executeBatch(entityList, batchSize, (sqlSession, entity) -> sqlSession.insert(sqlStatement, entity));
} }
@Override
public List<DoctorDto> queryDoctorList(DoctorSearchParam param) {
if(!StringUtils.isBlank(param.getDepartmentName()) && null == param.getDepartmentId()){
DepartmentInfo department = departmentInfoService.getOne(Wrappers.<DepartmentInfo>query().eq("department_name", param.getDepartmentName()));
param.setDepartmentId(department.getId());
}
return this.getBaseMapper().queryDoctorList(param.getSickness(),param.getDoctorName(),param.getDepartmentId());
}
} }
package com.xwd.hospital.server.service.impl;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.xwd.hospital.server.domain.ArticleInfo;
import com.xwd.hospital.server.domain.DoctorInfo;
import com.xwd.hospital.server.domain.Order;
import com.xwd.hospital.server.domain.User;
import com.xwd.hospital.server.dto.DoctorMiniAppHomeDto;
import com.xwd.hospital.server.dto.PatientMiniAppHomeDto;
import com.xwd.hospital.server.enums.OrderStateEnum;
import com.xwd.hospital.server.service.ArticleInfoService;
import com.xwd.hospital.server.service.DoctorInfoService;
import com.xwd.hospital.server.service.HomeService;
import com.xwd.hospital.server.service.OrderService;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class HomeServiceImpl implements HomeService {
@Resource
private DoctorInfoService doctorInfoService;
@Resource
private OrderService orderService;
@Resource
private ArticleInfoService articleInfoService;
@Override
public PatientMiniAppHomeDto patientMiniAppHome() {
return null;
}
@Override
public DoctorMiniAppHomeDto doctorMiniAppHome(Long doctorId) {
DoctorMiniAppHomeDto doctorMiniAppHomeDto = new DoctorMiniAppHomeDto();
DoctorInfo doctorInfo = doctorInfoService.getById(doctorId);
doctorMiniAppHomeDto.setDoctorName(doctorInfo.getDoctorName());
doctorMiniAppHomeDto.setAvatar(doctorInfo.getUser().getAvatar());
doctorMiniAppHomeDto.setHospitalName(doctorInfo.getMedicalQualification().getHospital().getHospitalName());
doctorMiniAppHomeDto.setDepartmentName(doctorInfo.getMedicalQualification().getDepartment().getDepartmentName());
doctorMiniAppHomeDto.setDoctorTitle(doctorInfo.getMedicalQualification().getTitle().getName());
//文章
List<ArticleInfo> articleInfoList = articleInfoService.list(Wrappers.<ArticleInfo>query().orderByDesc("create_time").last("LIMIT 5"));
doctorMiniAppHomeDto.setArticleInfoList(articleInfoList);
//问诊订单
//待确认订单
List<Order> orderList = orderService.list(Wrappers.<Order>query().eq("doctor_id", doctorId).eq("order_state", OrderStateEnum.TO_CONFIRM).orderByDesc("create_time").last("LIMIT 5"));
doctorMiniAppHomeDto.setOrderList(orderList);
return doctorMiniAppHomeDto;
}
}
...@@ -9,10 +9,19 @@ ...@@ -9,10 +9,19 @@
package com.xwd.hospital.server.service.impl; package com.xwd.hospital.server.service.impl;
import java.io.Serializable; import java.io.Serializable;
import java.util.List; import java.math.BigDecimal;
import java.util.ArrayList; import java.text.SimpleDateFormat;
import java.util.Collection; import java.util.*;
import cn.dev33.satoken.stp.StpUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xwd.hospital.server.domain.*;
import com.xwd.hospital.server.dto.CreateOrderDto;
import com.xwd.hospital.server.dto.OrderDto;
import com.xwd.hospital.server.enums.OrderStateEnum;
import com.xwd.hospital.server.enums.OrderTypeEnum;
import com.xwd.hospital.server.enums.YesNoEnum;
import com.xwd.hospital.server.service.*;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import com.baomidou.mybatisplus.core.enums.SqlMethod; import com.baomidou.mybatisplus.core.enums.SqlMethod;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
...@@ -20,14 +29,22 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; ...@@ -20,14 +29,22 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper; import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import com.xwd.hospital.server.service.OrderService;
import com.xwd.hospital.server.repository.OrderMapper; import com.xwd.hospital.server.repository.OrderMapper;
import com.xwd.hospital.server.repository.base.OrderBaseMapper; import com.xwd.hospital.server.repository.base.OrderBaseMapper;
import com.xwd.hospital.server.domain.Order;
import com.xwd.hospital.server.rest.req.OrderParam; import com.xwd.hospital.server.rest.req.OrderParam;
@Service @Service
public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements OrderService { public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements OrderService {
@Resource
private UserInfoService userInfoService;
@Resource
private DoctorServiceInfoService doctorServiceInfoService;
@Resource
private UserCouponInfoService userCouponInfoService;
@Resource
private DoctorInfoService doctorInfoService;
@Resource
private PatientInfoService patientInfoService;
@Override @Override
public int updateAllFieldsById(Order entity) { public int updateAllFieldsById(Order entity) {
...@@ -48,5 +65,129 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements ...@@ -48,5 +65,129 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
return executeBatch(entityList, batchSize, (sqlSession, entity) -> sqlSession.insert(sqlStatement, entity)); return executeBatch(entityList, batchSize, (sqlSession, entity) -> sqlSession.insert(sqlStatement, entity));
} }
@Override
public List<OrderDto> queryOrderListForMiniApp(OrderStateEnum param) {
long userId = StpUtil.getLoginIdAsLong();
UserInfo userInfo = userInfoService.getOne(Wrappers.<UserInfo>query().eq("user_id", userId));
return this.getBaseMapper().queryOrderListForMiniApp(userInfo.getId(),param.toString());
}
@Override
public Order createOrder(CreateOrderDto createOrderDto) {
Order order = new Order();
//写入订单相关记录记录
order.setUserInfoId(createOrderDto.getUserInfoId());
order.setDoctorId(createOrderDto.getDoctorId());
order.setPatientId(createOrderDto.getPatientId());
//生成订单号
//todo 订单号生成规则待定
order.setOrderNo(geneartOrderNo());
order.setOrderState(OrderStateEnum.TO_PAY);
order.setOrderType(createOrderDto.getOrderType());
order.setAppointmentDate(createOrderDto.getAppointmentDate());
//查询相关服务价格
OrderTypeEnum orderType = createOrderDto.getOrderType();
Long doctorId = createOrderDto.getDoctorId();
DoctorInfo doctorInfo = doctorInfoService.getById(doctorId);
DoctorServiceInfo doctorServiceInfo = doctorServiceInfoService.getOne(
Wrappers.<DoctorServiceInfo>query().eq("doctor_id", doctorId)
.eq("service_name", orderType.toString())
.eq("service_state", YesNoEnum.YES.toString()));
if(null == doctorServiceInfo){
}
order.setOrderPrice(doctorServiceInfo.getServicePrice());
//查询优惠金额
order.setOrderDiscount(BigDecimal.ZERO);
if(null != createOrderDto.getUserCouponId()){
UserCouponInfo userCouponInfo = userCouponInfoService.getById(createOrderDto.getUserCouponId());
//校验优惠券有效性
if(checkCoupon(userCouponInfo)){
order.setOrderDiscount(userCouponInfo.getCouponDiscount());
order.setUserCouponId(createOrderDto.getUserCouponId());
//优惠券变为已使用
userCouponInfo.setCouponUseState(YesNoEnum.NO);
userCouponInfoService.save(userCouponInfo);
}
}
//计算实际价格
BigDecimal caulatePrice = order.getOrderPrice().subtract(order.getOrderDiscount());
order.setOrderActualPay(caulatePrice.compareTo(BigDecimal.ZERO) > 0?order.getOrderPrice().subtract(order.getOrderDiscount()) : BigDecimal.ZERO );
//写入服务相关信息
order.setServiceStartTime(doctorServiceInfo.getServiceStartTime());
order.setServiceEndTime(doctorServiceInfo.getServiceEndTime());
order.setDoctorName(doctorInfo.getDoctorName());
order.setHospitalName(doctorInfo.getMedicalQualification().getHospital().getHospitalName());
order.setDepartmentName(doctorInfo.getMedicalQualification().getDepartment().getDepartmentName());
//写入就诊人相关信息
PatientInfo patientInfo = patientInfoService.getById(createOrderDto.getPatientId());
order.setPatientName(patientInfo.getPatientName());
order.setPatientSex(patientInfo.getSex());
order.setPatientIdNo(patientInfo.getIdNo());
order.setPatientPhoneNumber(patientInfo.getPhoneNumber());
order.setPatientBornDate(patientInfo.getBornDate());
order.setPatientSelfIntroduce(createOrderDto.getPatientSelfIntroduce());
this.save(order);
return order;
}
/**
* 生成订单
* @return
*/
public static String geneartOrderNo() {
//生成方式:当前时间+随机6位数字
// 获取当前日期时间
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
String dateTime = dateFormat.format(new Date());
// 生成6位随机数
Random random = new Random();
int randomValue = random.nextInt(900000) + 100000; // 生成100000到999999之间的随机数
// 将时间戳和随机数拼接成订单号
String serialNumber = String.valueOf(dateTime) + String.valueOf(randomValue);
return serialNumber;
}
/**
* 校验优惠券有效性
* @return
*/
public static boolean checkCoupon(UserCouponInfo userCouponInfo) {
//校验优惠券可用状态
if(userCouponInfo.getCouponUseState() == YesNoEnum.NO){
return false;
}
//校验优惠券有效日期
Date today = new Date();
if(today.after(userCouponInfo.getCouponStartDate()) && today.before(userCouponInfo.getCouponEndDate())){
return true;
}else {
return false;
}
}
@Override
public void cancelOrder(String orderNo) {
//修改订单状态
Order order = this.getOne(Wrappers.<Order>query().eq("order_no", orderNo));
if(order.getOrderState() == OrderStateEnum.TO_PAY){
order.setOrderState(OrderStateEnum.CANCELED);
this.save(order);
}
}
} }
package com.xwd.hospital.server.service.impl;
import com.xwd.hospital.server.service.RedisService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import java.util.concurrent.TimeUnit;
@Service
public class RedisServiceImpl implements RedisService {
@Autowired
private RedisTemplate<String,String> redisTemplate;
@Override
public void set(String key, String value) {
redisTemplate.opsForValue().set(key,value);
}
@Override
public String get(String key) {
String value= (String) redisTemplate.opsForValue().get(key);
return value;
}
@Override
public void setExpire(String key, String value,long time,TimeUnit timeUnit) {
redisTemplate.opsForValue().set(key,value,time, timeUnit);
}
}
package com.xwd.hospital.server.service.impl;
import com.xwd.hospital.server.constants.Constant;
import com.xwd.hospital.server.service.RedisService;
import com.xwd.hospital.server.service.SmsService;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import java.util.Random;
import java.util.concurrent.TimeUnit;
@Service
public class SmsServiceImpl implements SmsService {
@Resource
private RedisService redisService;
@Override
public boolean sendSms(String phoneNumber) {
//随机生成六位数字验证码
Random random = new Random();
// 生成一个100000到999999之间的随机整数
int randomNumber = random.nextInt(900000) + 100000;
//TODO 调用短信sdk发送短信
//存入redis中,缓存默认5分钟失效
redisService.setExpire(Constant.SMS_PREFIX+phoneNumber,String.valueOf(randomNumber),5, TimeUnit.MINUTES);
return true;
}
}
...@@ -13,24 +13,36 @@ import java.util.List; ...@@ -13,24 +13,36 @@ import java.util.List;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
import cn.binarywang.wx.miniapp.bean.WxMaUserInfo;
import cn.binarywang.wx.miniapp.util.WxMaConfigHolder;
import com.xwd.hospital.server.constants.Constant;
import com.xwd.hospital.server.domain.*;
import com.xwd.hospital.server.dto.LoginDto;
import com.xwd.hospital.server.dto.RegisterDto;
import com.xwd.hospital.server.dto.UpdateUserDto;
import com.xwd.hospital.server.dto.UserDto;
import com.xwd.hospital.server.enums.RegisterSourceEnum;
import com.xwd.hospital.server.enums.UserTypeEnum;
import com.xwd.hospital.server.service.*;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import com.baomidou.mybatisplus.core.enums.SqlMethod; import com.baomidou.mybatisplus.core.enums.SqlMethod;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper; import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
import me.chanjar.weixin.common.error.WxErrorException;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import com.xwd.hospital.server.service.UserService;
import com.xwd.hospital.server.repository.UserMapper; import com.xwd.hospital.server.repository.UserMapper;
import com.xwd.hospital.server.repository.base.UserBaseMapper; import com.xwd.hospital.server.repository.base.UserBaseMapper;
import com.xwd.hospital.server.domain.User;
import com.xwd.hospital.server.rest.req.UserParam; import com.xwd.hospital.server.rest.req.UserParam;
import com.xwd.hospital.server.rest.res.ApiCode; import com.xwd.hospital.server.rest.res.ApiCode;
import cn.dev33.satoken.secure.SaSecureUtil; import cn.dev33.satoken.secure.SaSecureUtil;
import com.xwd.hospital.server.repository.RoleMapper; import com.xwd.hospital.server.repository.RoleMapper;
import com.xwd.hospital.server.enums.YesNoEnum; import com.xwd.hospital.server.enums.YesNoEnum;
import com.xwd.hospital.server.domain.Role;
import com.xwd.hospital.server.domain.UserRole;
import com.xwd.hospital.server.repository.UserRoleMapper; import com.xwd.hospital.server.repository.UserRoleMapper;
@Service @Service
...@@ -39,6 +51,20 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us ...@@ -39,6 +51,20 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
private UserRoleMapper userRoleMapper; private UserRoleMapper userRoleMapper;
@Resource @Resource
private RoleMapper roleMapper; private RoleMapper roleMapper;
@Resource
private WxMaService wxMaService;
@Resource
private RedisService redisService;
@Resource
private UserInfoService userInfoService;
@Resource
private DoctorInfoService doctorInfoService;
@Value("$(wx.miniapp.configs[0].appid)")
private String patientAppId;
@Value("$(wx.miniapp.configs[1].appid)")
private String doctorAppId;
@Override @Override
public int updateAllFieldsById(User entity) { public int updateAllFieldsById(User entity) {
...@@ -137,4 +163,134 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us ...@@ -137,4 +163,134 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
} }
return result; return result;
} }
@Override
public UserDto miniAppLogin(LoginDto loginDto){
UserDto userDto = new UserDto();
//短信验证码登录
if (StringUtils.isBlank(loginDto.getCode())) {
String authCode = redisService.get(Constant.SMS_PREFIX + loginDto.getPhoneNumber());
if(StringUtils.isBlank(authCode) ||
StringUtils.isBlank(loginDto.getSmsAuthCode()) ||
!authCode.equals(loginDto.getSmsAuthCode())){
//校验不通过,直接返回空userDto
userDto.setAuthFlag(false);
return userDto;
}else {
userDto.setAuthFlag(true);
User user = this.getOne(Wrappers.<User>query().eq("phone", loginDto.getPhoneNumber()));
if(null == user){
//此手机号尚未在系统中注册,直接注册为新用户
user = new User();
user.setUsername(loginDto.getPhoneNumber());
user.setUserType(loginDto.getUserType());
user.setRegisterSource(RegisterSourceEnum.WX);
user.setPhone(loginDto.getPhoneNumber());
this.save(user);
}
userDto.setUser(user);
return userDto;
}
}else {//微信直接授权登录
//根据小程序登录源,切换相应配置
if(loginDto.getUserType() == UserTypeEnum.PATIENT){
wxMaService.switchover(patientAppId);
}else if(loginDto.getUserType() == UserTypeEnum.DOCTOR){
wxMaService.switchover(doctorAppId);
}
try {
WxMaJscode2SessionResult session = wxMaService.getUserService().getSessionInfo(loginDto.getCode());
log.debug(session.getSessionKey());
log.debug(session.getOpenid());
//通过openId与sys_user表关联 判断是否需要进行注册流程
String openid = session.getOpenid();
User user = this.getOne(Wrappers.<User>query().eq("open_id", openid));
if(null == user){//open_id未查询到相关用户
userDto.setRegisterFlag(true);
return userDto;
}else{
userDto.setUser(user);
if(null != user.getObjId()){//关联信息表
if(user.getUserType() == UserTypeEnum.PATIENT){
userDto.setUserInfo(userInfoService.getById(user.getObjId()));
}else if(loginDto.getUserType() == UserTypeEnum.DOCTOR){
userDto.setDoctorInfo(doctorInfoService.getById(user.getObjId()));
}
}
return userDto;
}
} catch (WxErrorException e) {
log.error("微信登录异常");
} finally {
WxMaConfigHolder.remove();//清理ThreadLocal
}
}
return userDto;
};
@Override
public UserDto miniAppRegister(RegisterDto registserDto) {
UserDto userDto = new UserDto();
//根据小程序登录源,切换相应配置
if(registserDto.getUserType() == UserTypeEnum.PATIENT){
wxMaService.switchover(patientAppId);
}else if(registserDto.getUserType() == UserTypeEnum.DOCTOR){
wxMaService.switchover(doctorAppId);
}
try {
WxMaJscode2SessionResult session = wxMaService.getUserService().getSessionInfo(registserDto.getCode());
log.debug(session.getSessionKey());
log.debug(session.getOpenid());
//通过openId与sys_user表关联 判断是否需要进行注册流程
String openid = session.getOpenid();
User user = this.getOne(Wrappers.<User>query().eq("phone", registserDto.getPhoneNumber()));
if(null != user ){
user.setOpenId(openid);
}else {
//尚未在系统中注册,直接注册为新用户
user = new User();
user.setUsername(registserDto.getPhoneNumber());
user.setUserType(registserDto.getUserType());
user.setRegisterSource(RegisterSourceEnum.WX);
user.setPhone(registserDto.getPhoneNumber());
user.setOpenId(openid);
}
this.save(user);
return userDto;
} catch (WxErrorException e) {
log.error("微信登录异常");
} finally {
WxMaConfigHolder.remove();//清理ThreadLocal
}
return userDto;
}
@Override
public UserDto updateMiniUserInfo(UpdateUserDto updateUserDto) {
UserDto userDto = new UserDto();
//根据小程序登录源,切换相应配置
if(updateUserDto.getUserType() == UserTypeEnum.PATIENT){
wxMaService.switchover(patientAppId);
}else if(updateUserDto.getUserType() == UserTypeEnum.DOCTOR){
wxMaService.switchover(doctorAppId);
}
try {
WxMaJscode2SessionResult session = wxMaService.getUserService().getSessionInfo(updateUserDto.getCode());
log.debug(session.getSessionKey());
log.debug(session.getOpenid());
User user = this.getOne(Wrappers.<User>query().eq("open_id", session.getOpenid()));
WxMaUserInfo userInfo = wxMaService.getUserService().getUserInfo(session.getSessionKey(), updateUserDto.getEncryptedData(), updateUserDto.getIvStr());
user.setUsername(userInfo.getNickName());
user.setAvatar(userInfo.getAvatarUrl());
this.save(user);
userDto.setUser(user);
return userDto;
} catch (WxErrorException e) {
log.error("微信登录异常");
} finally {
WxMaConfigHolder.remove();//清理ThreadLocal
}
return userDto;
}
} }
spring: spring:
application: application:
name: ./aiming-hospital-server-dev name: aiming-hospital-server-dev
datasource: datasource:
url: jdbc:mysql://localhost:3306/aiming-hospital?serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&autoReconnect=true&failOverReadOnly=false&useSSL=false url: jdbc:mysql://localhost:3306/aiming-hospital?serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&autoReconnect=true&failOverReadOnly=false&useSSL=false
username: root username: root
password: 123456 password: 123456
data:
redis:
host: localhost
port: 6379
password: 123456
logging: logging:
config: classpath:logback-dev.xml config: classpath:logback-dev.xml
level: level:
...@@ -13,3 +18,23 @@ logging: ...@@ -13,3 +18,23 @@ logging:
web: info web: info
knife4j: knife4j:
production: false production: false
wx:
miniapp:
configs:
- appid: #微信小程序的appid
secret: #微信小程序的Secret
token: #微信小程序消息服务器配置的token
aesKey: #微信小程序消息服务器配置的EncodingAESKey
msgDataFormat: JSON
- appid: #微信小程序的appid
secret: #微信小程序的Secret
token: #微信小程序消息服务器配置的token
aesKey: #微信小程序消息服务器配置的EncodingAESKey
msgDataFormat: JSON
pay:
wx:
appId:
merchantId:
keyPath:
merchantSerialNumber:
apiV3Key:
...@@ -9,7 +9,7 @@ management: ...@@ -9,7 +9,7 @@ management:
include: health,info include: health,info
spring: spring:
application: application:
name: ./aiming-hospital-server name: aiming-hospital-server
profiles: profiles:
active: dev active: dev
jackson: jackson:
...@@ -97,7 +97,7 @@ logging: ...@@ -97,7 +97,7 @@ logging:
sql: error sql: error
web: info web: info
mybatis-plus: mybatis-plus:
mapper-locations: classpath*:mappers/**/*.xml mapper-locations: classpath*:mappers/base/*.xml,classpath*:mappers/*.xml
type-handlers-package: com.xwd.hospital.server.handler type-handlers-package: com.xwd.hospital.server.handler
type-aliases-package: com.xwd.hospital.server.domain type-aliases-package: com.xwd.hospital.server.domain
configuration: configuration:
......
...@@ -167,7 +167,7 @@ drop table if exists `pms_hospital_info`; ...@@ -167,7 +167,7 @@ drop table if exists `pms_hospital_info`;
create table `pms_hospital_info` create table `pms_hospital_info`
( (
id int(11) auto_increment not null comment 'Id', id int(11) auto_increment not null comment 'Id',
hospital_name int(11) not null comment '医院名称', hospital_name varchar(255) not null comment '医院名称',
hospital_level varchar(50) not null default 'THIRD_CLASS_GRADE_A' comment '医院等级 [THIRD_CLASS_GRADE_S.三级特等 THIRD_CLASS_GRADE_A.三级甲等 THIRD_CLASS_GRADE_B.三级乙等 THIRD_CLASS_GRADE_C.三级丙等 SECOND_CLASS_GRADE_A.二级甲等 SECOND_CLASS_GRADE_B.二级乙等 SECOND_CLASS_GRADE_C.二级丙等 FIRST_CLASS_GRADE_A.一级甲等 FIRST_CLASS_GRADE_B.一级乙等 FIRST_CLASS_GRADE_C.一级丙等]', hospital_level varchar(50) not null default 'THIRD_CLASS_GRADE_A' comment '医院等级 [THIRD_CLASS_GRADE_S.三级特等 THIRD_CLASS_GRADE_A.三级甲等 THIRD_CLASS_GRADE_B.三级乙等 THIRD_CLASS_GRADE_C.三级丙等 SECOND_CLASS_GRADE_A.二级甲等 SECOND_CLASS_GRADE_B.二级乙等 SECOND_CLASS_GRADE_C.二级丙等 FIRST_CLASS_GRADE_A.一级甲等 FIRST_CLASS_GRADE_B.一级乙等 FIRST_CLASS_GRADE_C.一级丙等]',
address varchar(255) not null comment '医院地址', address varchar(255) not null comment '医院地址',
hospital_tel varchar(255) not null comment '医院联系方式', hospital_tel varchar(255) not null comment '医院联系方式',
...@@ -184,10 +184,10 @@ drop table if exists `pms_department_info`; ...@@ -184,10 +184,10 @@ drop table if exists `pms_department_info`;
create table `pms_department_info` create table `pms_department_info`
( (
id int(11) auto_increment not null comment 'Id', id int(11) auto_increment not null comment 'Id',
department_name int(11) not null comment '科室名称', department_name varchar(255) not null comment '科室名称',
department_introduce int(11) not null comment '科室介绍', department_introduce varchar(255) not null comment '科室介绍',
department_level varchar(50) not null default 'FIRST_LEVEL' comment '科室层级 [FIRST_LEVEL.第一层级 SECOND_LEVEL.第二层级]', department_level varchar(50) not null default 'FIRST_LEVEL' comment '科室层级 [FIRST_LEVEL.第一层级 SECOND_LEVEL.第二层级]',
parent_id int(11) not null comment '上级科室id', parent_id int(11) null comment '上级科室id',
hidden_status varchar(50) not null default 'NO' comment '是否隐藏 [YES.是 NO.否]', hidden_status varchar(50) not null default 'NO' comment '是否隐藏 [YES.是 NO.否]',
editor_id int(11) not null default 1 comment '操作人Id', editor_id int(11) not null default 1 comment '操作人Id',
editor_name varchar(255) not null default 'admin' comment '操作人', editor_name varchar(255) not null default 'admin' comment '操作人',
......
insert sys_role (name,remark,editor_id,editor_name) values('ROLE_ADMIN','管理员',1,'admin'); insert sys_role (name,remark,editor_id,editor_name) values('ROLE_ADMIN','管理员',1,'admin');
insert sys_role (name,remark,editor_id,editor_name) values('ROLE_USER','患者端用户',1,'admin'); insert sys_role (name,remark,editor_id,editor_name) values('ROLE_PATIENT','患者端用户',1,'admin');
insert sys_role (name,remark,editor_id,editor_name) values('ROLE_DOCTOR','医生端用户',1,'admin'); insert sys_role (name,remark,editor_id,editor_name) values('ROLE_DOCTOR','医生端用户',1,'admin');
insert sys_user (username,password,real_name,editor_id,editor_name) values('admin','ebf7dae46b247505e9d76262d188a99170e9400f5191c64b1eed1e706f8ae42b', '管理员', 1, 'admin'); insert sys_user (username,password,real_name,editor_id,editor_name) values('admin','ebf7dae46b247505e9d76262d188a99170e9400f5191c64b1eed1e706f8ae42b', '管理员', 1, 'admin');
insert sys_user_role (user_id,role_id) values(1,1); insert sys_user_role (user_id,role_id) values(1,1);
......
...@@ -36,4 +36,32 @@ ...@@ -36,4 +36,32 @@
from pms_department_info from pms_department_info
${ew.customSqlSegment} ${ew.customSqlSegment}
</select> </select>
<resultMap id="DepartmentResultMap" type="com.xwd.hospital.server.dto.DepartmentDto">
<id property="id" column="id"/>
<result property="departmentName" column="department_name"/>
<result property="parentId" column="parent_id"/>
<!-- 定义子对象的映射 -->
<collection property="childList" ofType="com.xwd.hospital.server.dto.DepartmentDto">
<id property="id" column="child_id"/>
<result property="departmentName" column="child_name"/>
<result property="parentId" column="child_parent_id"/>
<!-- 继续定义更多的子对象映射 -->
</collection>
</resultMap>
<select id="queryAllDepartment" parameterType="com.xwd.hospital.server.enums.YesNoEnum" resultMap="DepartmentResultMap">
SELECT
parent.id,
parent.department_name,
parent.parent_id
FROM pms_department_info parent
where 1 = 1
<if test="hiddenStatus != null">
AND parent.hidden_status = #{hiddenStatus}
</if>
</select>
</mapper> </mapper>
...@@ -36,4 +36,38 @@ ...@@ -36,4 +36,38 @@
from pms_doctor_info from pms_doctor_info
${ew.customSqlSegment} ${ew.customSqlSegment}
</select> </select>
<!-- 小程序查询医生列表 -->
<select id="queryDoctorList" resultType="com.xwd.hospital.server.dto.DoctorDto">
select
di.doctor_name,
h.hospital_name,
d.department_name,
di.expertise_area,
di.introduction,
pmq.title,
u.avatar,
s.service_price,
count(o.id) as orderCount,
count(ua.id) as fansCount
from pms_doctor_info di
inner join pms_medical_qualifications pmq on di.medical_qualification_id = pmq.id
inner join pms_hospital_info h on h.id = pmq.hospital_id
inner join pms_department_info d on d.id = pmq.department_id
inner join sys_user u on di.user_id = u.id
left join pms_order o on o.doctor_id = di.id
left join pms_doctor_service_info s on s.doctor_id = di.id
left join pms_user_attention_info ua on ua.doctor_id = di.id
where di.doctor_state = 'NORMAL' and s.service_name = 'ONLINE_INQUIRY'
<if test="sickness != null and sickness != ''">
AND di.expertise_area LIKE CONCAT('%', #{sickness}, '%')
</if>
<if test="doctorName != null and doctorName != ''">
AND di.doctor_name = #{doctorName}
</if>
<if test="departmentId != null and departmentId != ''">
AND pmq.department_id = #{departmentId}
</if>
GROUP BY di.doctor_name, h.hospital_name, d.department_name, di.expertise_area, di.introduction, pmq.title, u.avatar, s.service_price
</select>
</mapper> </mapper>
...@@ -36,4 +36,9 @@ ...@@ -36,4 +36,9 @@
from pms_doctor_service_info from pms_doctor_service_info
${ew.customSqlSegment} ${ew.customSqlSegment}
</select> </select>
<select id="selectByDoctorId" parameterType="long" resultMap="com.xwd.hospital.server.repository.base.DoctorServiceInfoBaseMapper.BaseResultMap">
select
<include refid="com.xwd.hospital.server.repository.base.DoctorServiceInfoBaseMapper.Base_Column_List" />
from pms_doctor_service_info where doctor_id= #{doctorId}
</select>
</mapper> </mapper>
...@@ -36,4 +36,27 @@ ...@@ -36,4 +36,27 @@
from pms_order from pms_order
${ew.customSqlSegment} ${ew.customSqlSegment}
</select> </select>
<select id="queryOrderListForMiniApp" resultType="com.xwd.hospital.server.dto.OrderDto">
select
order_no,
hospital_name,
doctor_name,
department_name,
patient_name,
patient_sex,
order_state,
order_actual_pay as actualPrice,
order_type,
create_time
from pms_order
where user_info_id = #{userInfoId}
<if test="state != null and state != 'COMPLETED'">
AND order_state = #{state}
</if>
<if test="state != null and state != '' ">
AND ( order_state = '已取消'or order_state = 'REJECTED' or order_state = 'COMPLETED' )
</if>
order by create_time desc
</select>
</mapper> </mapper>
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<mapper namespace="com.xwd.hospital.server.repository.base.DepartmentInfoBaseMapper"> <mapper namespace="com.xwd.hospital.server.repository.base.DepartmentInfoBaseMapper">
<resultMap id="BaseResultMap" type="com.xwd.hospital.server.domain.DepartmentInfo"> <resultMap id="BaseResultMap" type="com.xwd.hospital.server.domain.DepartmentInfo">
<id column="id" jdbcType="BIGINT" property="id" /> <id column="id" jdbcType="BIGINT" property="id" />
<result column="department_name" jdbcType="BIGINT" property="departmentName" /> <result column="department_name" jdbcType="VARCHAR" property="departmentName" />
<result column="department_level" jdbcType="VARCHAR" property="departmentLevel" /> <result column="department_level" jdbcType="VARCHAR" property="departmentLevel" />
<result column="parent_id" jdbcType="BIGINT" property="parentId" /> <result column="parent_id" jdbcType="BIGINT" property="parentId" />
<result column="hidden_status" jdbcType="VARCHAR" property="hiddenStatus" /> <result column="hidden_status" jdbcType="VARCHAR" property="hiddenStatus" />
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime" /> <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
</resultMap> </resultMap>
<resultMap id="ResultMap" type="com.xwd.hospital.server.domain.DepartmentInfo" extends="BaseResultMap"> <resultMap id="ResultMap" type="com.xwd.hospital.server.domain.DepartmentInfo" extends="BaseResultMap">
<result column="department_introduce" jdbcType="BIGINT" property="departmentIntroduce" /> <result column="department_introduce" jdbcType="VARCHAR" property="departmentIntroduce" />
</resultMap> </resultMap>
<sql id="Base_Column_List"> <sql id="Base_Column_List">
`id`, `department_name`, `department_level`, `parent_id`, `hidden_status`, `editor_id`, `editor_name`, `create_time`, `update_time` `id`, `department_name`, `department_level`, `parent_id`, `hidden_status`, `editor_id`, `editor_name`, `create_time`, `update_time`
...@@ -34,15 +34,15 @@ ...@@ -34,15 +34,15 @@
values values
<foreach collection="records" item="record" separator=","> <foreach collection="records" item="record" separator=",">
( (
#{record.departmentName, jdbcType=BIGINT}, #{record.departmentIntroduce, jdbcType=BIGINT}, #{record.departmentLevel, jdbcType=VARCHAR}, #{record.parentId, jdbcType=BIGINT}, #{record.hiddenStatus, jdbcType=VARCHAR}, #{record.editorId, jdbcType=BIGINT}, #{record.editorName, jdbcType=VARCHAR} #{record.departmentName, jdbcType=VARCHAR}, #{record.departmentIntroduce, jdbcType=VARCHAR}, #{record.departmentLevel, jdbcType=VARCHAR}, #{record.parentId, jdbcType=BIGINT}, #{record.hiddenStatus, jdbcType=VARCHAR}, #{record.editorId, jdbcType=BIGINT}, #{record.editorName, jdbcType=VARCHAR}
) )
</foreach> </foreach>
</insert> </insert>
<update id="updateAllFieldsById" parameterType="com.xwd.hospital.server.domain.DepartmentInfo"> <update id="updateAllFieldsById" parameterType="com.xwd.hospital.server.domain.DepartmentInfo">
update pms_department_info set update pms_department_info set
<trim suffixOverrides=","> <trim suffixOverrides=",">
department_name = #{et.departmentName, jdbcType=BIGINT}, department_name = #{et.departmentName, jdbcType=VARCHAR},
department_introduce = #{et.departmentIntroduce, jdbcType=BIGINT}, department_introduce = #{et.departmentIntroduce, jdbcType=VARCHAR},
department_level = #{et.departmentLevel, jdbcType=VARCHAR}, department_level = #{et.departmentLevel, jdbcType=VARCHAR},
parent_id = #{et.parentId, jdbcType=BIGINT}, parent_id = #{et.parentId, jdbcType=BIGINT},
hidden_status = #{et.hiddenStatus, jdbcType=VARCHAR}, hidden_status = #{et.hiddenStatus, jdbcType=VARCHAR},
......
...@@ -26,6 +26,8 @@ ...@@ -26,6 +26,8 @@
select="com.xwd.hospital.server.repository.UserMapper.selectById" /> select="com.xwd.hospital.server.repository.UserMapper.selectById" />
<association column="medical_qualification_id" property="medicalQualification" javaType="com.xwd.hospital.server.domain.MedicalQualifications" <association column="medical_qualification_id" property="medicalQualification" javaType="com.xwd.hospital.server.domain.MedicalQualifications"
select="com.xwd.hospital.server.repository.MedicalQualificationsMapper.selectById" /> select="com.xwd.hospital.server.repository.MedicalQualificationsMapper.selectById" />
<association column="id" property="serviceInfoList" javaType="com.xwd.hospital.server.domain.DoctorServiceInfo"
select="com.xwd.hospital.server.repository.DoctorServiceInfoMapper.selectByDoctorId"/>
</resultMap> </resultMap>
<sql id="Base_Column_List"> <sql id="Base_Column_List">
`id`, `user_id`, `medical_qualification_id`, `doctor_state`, `doctor_name`, `sex`, `id_no`, `born_date`, `phone_number`, `expertise_area`, `id_card_picture_front`, `id_card_picture_back`, `delete_status`, `editor_id`, `editor_name`, `create_time`, `update_time` `id`, `user_id`, `medical_qualification_id`, `doctor_state`, `doctor_name`, `sex`, `id_no`, `born_date`, `phone_number`, `expertise_area`, `id_card_picture_front`, `id_card_picture_back`, `delete_status`, `editor_id`, `editor_name`, `create_time`, `update_time`
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<mapper namespace="com.xwd.hospital.server.repository.base.HospitalInfoBaseMapper"> <mapper namespace="com.xwd.hospital.server.repository.base.HospitalInfoBaseMapper">
<resultMap id="BaseResultMap" type="com.xwd.hospital.server.domain.HospitalInfo"> <resultMap id="BaseResultMap" type="com.xwd.hospital.server.domain.HospitalInfo">
<id column="id" jdbcType="BIGINT" property="id" /> <id column="id" jdbcType="BIGINT" property="id" />
<result column="hospital_name" jdbcType="BIGINT" property="hospitalName" /> <result column="hospital_name" jdbcType="VARCHAR" property="hospitalName" />
<result column="hospital_level" jdbcType="VARCHAR" property="hospitalLevel" /> <result column="hospital_level" jdbcType="VARCHAR" property="hospitalLevel" />
<result column="address" jdbcType="VARCHAR" property="address" /> <result column="address" jdbcType="VARCHAR" property="address" />
<result column="hospital_tel" jdbcType="VARCHAR" property="hospitalTel" /> <result column="hospital_tel" jdbcType="VARCHAR" property="hospitalTel" />
...@@ -35,14 +35,14 @@ ...@@ -35,14 +35,14 @@
values values
<foreach collection="records" item="record" separator=","> <foreach collection="records" item="record" separator=",">
( (
#{record.hospitalName, jdbcType=BIGINT}, #{record.hospitalLevel, jdbcType=VARCHAR}, #{record.address, jdbcType=VARCHAR}, #{record.hospitalTel, jdbcType=VARCHAR}, #{record.hospitalIntroduce, jdbcType=VARCHAR}, #{record.deleteStatus, jdbcType=VARCHAR}, #{record.editorId, jdbcType=BIGINT}, #{record.editorName, jdbcType=VARCHAR} #{record.hospitalName, jdbcType=VARCHAR}, #{record.hospitalLevel, jdbcType=VARCHAR}, #{record.address, jdbcType=VARCHAR}, #{record.hospitalTel, jdbcType=VARCHAR}, #{record.hospitalIntroduce, jdbcType=VARCHAR}, #{record.deleteStatus, jdbcType=VARCHAR}, #{record.editorId, jdbcType=BIGINT}, #{record.editorName, jdbcType=VARCHAR}
) )
</foreach> </foreach>
</insert> </insert>
<update id="updateAllFieldsById" parameterType="com.xwd.hospital.server.domain.HospitalInfo"> <update id="updateAllFieldsById" parameterType="com.xwd.hospital.server.domain.HospitalInfo">
update pms_hospital_info set update pms_hospital_info set
<trim suffixOverrides=","> <trim suffixOverrides=",">
hospital_name = #{et.hospitalName, jdbcType=BIGINT}, hospital_name = #{et.hospitalName, jdbcType=VARCHAR},
hospital_level = #{et.hospitalLevel, jdbcType=VARCHAR}, hospital_level = #{et.hospitalLevel, jdbcType=VARCHAR},
address = #{et.address, jdbcType=VARCHAR}, address = #{et.address, jdbcType=VARCHAR},
hospital_tel = #{et.hospitalTel, jdbcType=VARCHAR}, hospital_tel = #{et.hospitalTel, jdbcType=VARCHAR},
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论