实现药品列表

实现药品分类
图片上传
banner图实现
master
张小东 2023-10-19 22:43:18 +08:00
commit f0b6529741
18 changed files with 754 additions and 0 deletions

6
.idea/vcs.xml 100644
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

54
bwie-auth/pom.xml 100644
View File

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.example</groupId>
<artifactId>health-zxd</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>bwie-auth</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- 项目公共 依赖 -->
<dependency>
<groupId>org.example</groupId>
<artifactId>bwie-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- SpringBoot Web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--rabbitMQ-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
</dependency>
<!-- lombok依赖 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,52 @@
package com.bwie.auth.controller;
import com.alibaba.fastjson.JSONObject;
import com.bwie.auth.service.AuthService;
import com.bwie.common.domain.User;
import com.bwie.common.domain.request.UserLogin;
import com.bwie.common.domain.response.JwtResponse;
import com.bwie.common.result.Result;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
@Log4j2
@RestController
@Component
public class AuthController {
@Autowired
private AuthService service;
@Autowired
private HttpServletRequest request;
@PostMapping("/userLogin")
public Result<JwtResponse> userLogin(@RequestBody UserLogin login){
log.info("功能名称:【邮箱密码登录】,请求路径:【{}】,请求方式:【{}】,请求参数:【{}】",
request.getRequestURI(),request.getMethod(), JSONObject.toJSONString(login));
Result<JwtResponse> result = service.userLogin(login);
log.info("返回结果:【{}】",result);
return result;
}
@GetMapping("/info")
public Result<Object> info(){
log.info("功能名称【获取token】请求路径【{}】,请求方式:【{}】",
request.getRequestURI(),request.getMethod());
Result<Object> result = service.info();
log.info("返回结果:【{}】",result);
return result;
}
@PostMapping("/logout")
public Result<Object> logout(){
return service.logout();
}
}

View File

@ -0,0 +1,13 @@
package com.bwie.auth.feign;
import com.bwie.common.domain.User;
import com.bwie.common.result.Result;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
@FeignClient("bwie-system")
public interface AuthFeign {
@PostMapping("/getUserByEmailNumber/{emailNumber}")
public Result<User> getUserByEmailNumber(@PathVariable String emailNumber);
}

View File

@ -0,0 +1,13 @@
package com.bwie.auth.service;
import com.bwie.common.domain.request.UserLogin;
import com.bwie.common.domain.response.JwtResponse;
import com.bwie.common.result.Result;
public interface AuthService {
Result<JwtResponse> userLogin(UserLogin login);
Result<Object> info();
Result<Object> logout();
}

View File

@ -0,0 +1,82 @@
package com.bwie.auth.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.bwie.auth.feign.AuthFeign;
import com.bwie.auth.service.AuthService;
import com.bwie.common.constants.JwtConstants;
import com.bwie.common.constants.TokenConstants;
import com.bwie.common.domain.User;
import com.bwie.common.domain.request.UserLogin;
import com.bwie.common.domain.response.JwtResponse;
import com.bwie.common.result.Result;
import com.bwie.common.utils.JwtUtils;
import com.bwie.common.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
import java.util.regex.Pattern;
@Service
public class AuthServiceImpl implements AuthService {
@Autowired
private AuthFeign feign;
@Autowired
private RedisTemplate<String,String> redisTemplate;
@Autowired
private HttpServletRequest request;
@Override
public Result<JwtResponse> userLogin(UserLogin login) {
boolean emailMatches = Pattern.matches("^[0-9a-zA-Z_-]+@[0-9a-zA-Z_-]+\\.(com|cn|net|vip|cloud)$",login.getEmailNumber());
if (!emailMatches) {
throw new IllegalArgumentException("邮箱格式错误,请重新输入");
}
Result<User> user = feign.getUserByEmailNumber(login.getEmailNumber());
User data = user.getData();
if (null==data){
return Result.error("对不起您还未注册,请先注册完成后进行登录");
}
if (!login.getPassword().equals(data.getPassword())){
return Result.error("密码错误");
}
HashMap<String, Object> map = new HashMap<>();
String userKey = UUID.randomUUID().toString();
map.put(JwtConstants.USER_KEY,userKey);
map.put(JwtConstants.DETAILS_USER_ID,data.getUserId());
String token = JwtUtils.createToken(map);
redisTemplate.opsForValue().set(TokenConstants.LOGIN_TOKEN_KEY+userKey, JSONObject.toJSONString(data),1500, TimeUnit.MINUTES);
JwtResponse jwtResponse = new JwtResponse();
jwtResponse.setToken(token);
return Result.success(jwtResponse);
}
@Override
public Result<Object> info() {
String token = request.getHeader(TokenConstants.TOKEN);
// 添加参数校验
if (StringUtils.isBlank(token)) {
// Token为空可以根据业务需求返回错误信息或进行其他处理
return Result.error("Token cannot be null or empty");
}
String userKey = JwtUtils.getUserKey(token);
String s = redisTemplate.opsForValue().get(TokenConstants.LOGIN_TOKEN_KEY + userKey);
User user = JSONObject.parseObject(s, User.class);
System.out.println(userKey);
return Result.success(user);
}
@Override
public Result<Object> logout() {
String token = request.getHeader(TokenConstants.TOKEN);
String userKey = JwtUtils.getUserKey(token);
redisTemplate.delete(TokenConstants.LOGIN_TOKEN_KEY+userKey);
return Result.success("退出成功");
}
}

View File

@ -0,0 +1,59 @@
# Tomcat
server:
port: 9001
# Spring
spring:
main:
allow-circular-references: true
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
application:
# 应用名称
name: bwie-auth
profiles:
# 环境配置
active: dev
cloud:
nacos:
discovery:
# 服务注册地址
server-addr: 106.54.220.85:8848
config:
# 配置中心地址
server-addr: 106.54.220.85:8848
# 配置文件格式
file-extension: yml
# 共享配置
shared-configs:
- application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
rabbitmq:
host: 106.54.220.85
port: 5672
username: guest
password: guest
virtual-host: /
publisher-confirm-type: correlated #确认消息已发送到交换机(Exchange)
publisher-returns: true #确认消息已发送到队列(Queue)
listener:
simple:
prefetch: 1 # 每次只能获取一条,处理完成才能获取下一条
acknowledge-mode: manual # 设置消费端手动ack确认
retry:
enabled: true # 是否支持重试
template:
# 只要消息抵达Queue就会异步发送优先回调return firm
mandatory: true
kafka:
bootstrap-servers: 106.54.220.85:9092
producer:
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.apache.kafka.common.serialization.StringSerializer
retries: 3
acks: all
compression-type: lz4
consumer:
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
group-id: bw-gp
enable-auto-commit: false

View File

@ -0,0 +1,9 @@
package com.bwie.common.domain;
import lombok.Data;
@Data
public class Banner {
private Integer bannerId;
private String bannerImage;
}

View File

@ -0,0 +1,9 @@
package com.bwie.common.domain;
import lombok.Data;
@Data
public class DrugType {
private Integer drugTypeId;
private String drugTypeName;
}

View File

@ -0,0 +1,16 @@
package com.bwie.common.domain;
import lombok.Data;
@Data
public class SymptomDetails {
private Integer detailsId;
private Integer symptomId;
private String symptomName;
private String pathology;
private String symptom;
private String suitableFood;
private String avoidFood;
private String traditionalMedicineTreatment;
private String westernMedicineTreatment;
}

View File

@ -0,0 +1,9 @@
package com.bwie.common.domain.request;
import lombok.Data;
@Data
public class UserLogin {
private String emailNumber;
private String password;
}

View File

@ -0,0 +1,62 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.example</groupId>
<artifactId>health-zxd</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<artifactId>bwie-system</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- 系统公共 依赖 -->
<dependency>
<groupId>org.example</groupId>
<artifactId>bwie-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- SpringBoot Web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.8</version>
</dependency>
<!-- Mysql Connector -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- Mybatis 依赖配置 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
<!-- Pagehelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.1</version>
</dependency>
<dependency>
<groupId>org.example</groupId>
<artifactId>bwie-common</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,107 @@
package com.bwie.system.controller;
import com.bwie.common.domain.*;
import com.bwie.common.result.Result;
import com.bwie.system.service.SystemService;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
@RestController
@Log4j2
public class SystemController {
@Autowired
private SystemService service;
@Autowired
private HttpServletRequest request;
@PostMapping("/getUserByEmailNumber/{emailNumber}")
public Result<User> getUserByEmailNumber(@PathVariable String emailNumber){
log.info("功能名称:【根据邮箱账号】,请求路径:【{}】,请求发送:【{}】,请求参数:【{}】",
request.getRequestURI(),request.getMethod(),emailNumber);
Result<User> result = service.getUserByEmailNumber(emailNumber);
log.info("返回结果:【{}】",result);
return result;
}
@PostMapping("/departmentList")
public Result<List<Department>> departmentList(){
log.info("功能名称:【科室列表】,请求路径:【{}】,请求发送:【{}】",
request.getRequestURI(),request.getMethod());
Result<List<Department>> result = service.departmentList();
log.info("返回结果:【{}】",result);
return result;
}
@PostMapping("/findSymptomByDepartmentId/{departmentId}")
public Result<List<Symptom>> findSymptomByDepartmentId (@PathVariable Integer departmentId){
log.info("功能名称:【病状列表】,请求路径:【{}】,请求发送:【{}】,请求参数:【{}】",
request.getRequestURI(),request.getMethod(),departmentId);
Result<List<Symptom>> result = service.findSymptomByDepartmentId(departmentId);
log.info("返回结果:【{}】",result);
return result;
}
@PostMapping("/findSymptomDetailsByDepartmentId/{symptomId}")
public Result<SymptomDetails> findSymptomDetailsByDepartmentId (@PathVariable Integer symptomId){
log.info("功能名称:【病状详情列表】,请求路径:【{}】,请求发送:【{}】,请求参数:【{}】",
request.getRequestURI(),request.getMethod(),symptomId);
Result<SymptomDetails> result = service.findSymptomDetailsByDepartmentId(symptomId);
log.info("返回结果:【{}】",result);
return result;
}
@PostMapping("/ossUpLoad")
public Result<String> ossUpLoad(@RequestParam("file") MultipartFile file){
log.info("功能名称:【图片上传】,请求路径:【{}】,请求发送:【{}】,请求参数:【{}】",
request.getRequestURI(),request.getMethod(),file);
Result<String> result = service.ossUpLoad(file);
log.info("返回结果:【{}】",result);
return result;
}
@PostMapping("/bannerList")
public Result<List<Banner>> bannerList(){
log.info("功能名称【banner列表】请求路径【{}】,请求发送:【{}】",
request.getRequestURI(),request.getMethod());
Result<List<Banner>> result = service.bannerList();
log.info("返回结果:【{}】",result);
return result;
}
@PostMapping("/drugTypeList")
public Result<List<DrugType>> drugTypeList(){
log.info("功能名称:【药品类型列表】,请求路径:【{}】,请求发送:【{}】",
request.getRequestURI(),request.getMethod());
Result<List<DrugType>> result = service.drugTypeList();
log.info("返回结果:【{}】",result);
return result;
}
@PostMapping("/findDrugByDrugTypeId/{drugTypeId}")
public Result<List<Drug>> findDrugByDrugTypeId(@PathVariable Integer drugTypeId){
log.info("功能名称:【药品列表】,请求路径:【{}】,请求发送:【{}】,请求参数:【{}】",
request.getRequestURI(),request.getMethod(),drugTypeId);
Result<List<Drug>> result = service.findDrugByDrugTypeId(drugTypeId);
log.info("返回结果:【{}】",result);
return result;
}
@PostMapping("/findDrugDetailsByDrugId/{drugId}")
public Result<List<DrugDetails>> findDrugDetailsByDrugId(@PathVariable Integer drugId){
log.info("功能名称:【可用药品】,请求路径:【{}】,请求发送:【{}】,请求参数:【{}】",
request.getRequestURI(),request.getMethod(),drugId);
Result<List<DrugDetails>> result = service.findDrugDetailsByDrugId(drugId);
log.info("返回结果:【{}】",result);
return result;
}
}

View File

@ -0,0 +1,30 @@
package com.bwie.system.mapper;
import com.bwie.common.domain.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
@Mapper
@Repository
public interface SystemMapper {
List<Department> departmentList();
List<Symptom> findSymptomByDepartmentId(@Param("departmentId") Integer departmentId);
SymptomDetails findSymptomDetailsByDepartmentId(@Param("symptomId") Integer symptomId);
List<Banner> bannerList();
User getUser(@Param("emailNumber") String emailNumber);
List<DrugType> drugTypeList();
List<Drug> findDrugByDrugTypeId(@Param("drugTypeId") Integer drugTypeId);
List<DrugDetails> findDrugDetailsByDrugId(@Param("drugId") Integer drugId);
}

View File

@ -0,0 +1,27 @@
package com.bwie.system.service;
import com.bwie.common.domain.*;
import com.bwie.common.result.Result;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
public interface SystemService {
Result<User> getUserByEmailNumber(String emailNumber);
Result<List<Department>> departmentList();
Result<List<Symptom>> findSymptomByDepartmentId(Integer departmentId);
Result<SymptomDetails> findSymptomDetailsByDepartmentId(Integer symptomId);
Result<String> ossUpLoad(MultipartFile file);
Result<List<Banner>> bannerList();
Result<List<DrugType>> drugTypeList();
Result<List<Drug>> findDrugByDrugTypeId(Integer drugTypeId);
Result<List<DrugDetails>> findDrugDetailsByDrugId(Integer drugId);
}

View File

@ -0,0 +1,81 @@
package com.bwie.system.service.impl;
import com.bwie.common.domain.*;
import com.bwie.common.result.Result;
import com.bwie.common.utils.OssUtil;
import com.bwie.system.mapper.SystemMapper;
import com.bwie.system.service.SystemService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MaxUploadSizeExceededException;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
@Service
public class SystemServiceImpl implements SystemService {
@Autowired
private SystemMapper mapper;
@Override
public Result<User> getUserByEmailNumber(String emailNumber) {
User user1 = mapper.getUser(emailNumber);
return Result.success(user1);
}
@Override
public Result<List<Department>> departmentList() {
List<Department> departments = mapper.departmentList();
return Result.success(departments);
}
@Override
public Result<List<Symptom>> findSymptomByDepartmentId(Integer departmentId) {
List<Symptom> symptom = mapper.findSymptomByDepartmentId(departmentId);
return Result.success(symptom);
}
@Override
public Result<SymptomDetails> findSymptomDetailsByDepartmentId(Integer symptomId) {
SymptomDetails details = mapper.findSymptomDetailsByDepartmentId(symptomId);
return Result.success(details);
}
@Override
public Result<String> ossUpLoad(MultipartFile file) {
if (file.isEmpty()){
return Result.error("文件不能为空");
}
try {
String s = OssUtil.uploadMultipartFile(file);
return Result.success(s);
} catch (MaxUploadSizeExceededException e) {
e.printStackTrace();
return Result.error("上传的文件大小超过了20MB请选择大小不超过20MB的文件上传");
}
}
@Override
public Result<List<Banner>> bannerList() {
List<Banner> banners = mapper.bannerList();
return Result.success(banners);
}
@Override
public Result<List<DrugType>> drugTypeList() {
List<DrugType> drugTypes = mapper.drugTypeList();
return Result.success(drugTypes);
}
@Override
public Result<List<Drug>> findDrugByDrugTypeId(Integer drugTypeId) {
List<Drug> drugs = mapper.findDrugByDrugTypeId(drugTypeId);
return Result.success(drugs);
}
@Override
public Result<List<DrugDetails>> findDrugDetailsByDrugId(Integer drugId) {
List<DrugDetails> drugDetails = mapper.findDrugDetailsByDrugId(drugId);
return Result.success(drugDetails);
}
}

View File

@ -0,0 +1,31 @@
# Tomcat
server:
port: 9002
# Spring
spring:
main:
allow-circular-references: true
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
application:
# 应用名称
name: bwie-system
profiles:
# 环境配置
active: dev
cloud:
nacos:
discovery:
# 服务注册地址
server-addr: 106.54.220.85:8848
config:
# 配置中心地址
server-addr: 106.54.220.85:8848
# 配置文件格式
file-extension: yml
# 共享配置
shared-configs:
- application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}

View File

@ -0,0 +1,94 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.bwie.system.mapper.SystemMapper">
<select id="departmentList" resultType="com.bwie.common.domain.Department">
SELECT
department_id,
department_name
FROM
t_department
</select>
<select id="findSymptomDetailsByDepartmentId" resultType="com.bwie.common.domain.SymptomDetails">
SELECT
d.details_id,
d.symptom_id,
d.pathology,
d.symptom,
s.symptom_name,
d.suitable_food,
d.avoid_food,
d.traditional_medicine_treatment,
d.western_medicine_treatment
FROM
t_symptom_details d
LEFT JOIN t_symptom s ON d.symptom_id = s.symptom_id
WHERE d.symptom_id = #{symptomId}
</select>
<select id="bannerList" resultType="com.bwie.common.domain.Banner">
SELECT
banner_id,
banner_image
FROM
t_banner
</select>
<select id="getUser" resultType="com.bwie.common.domain.User">
SELECT
user_id,
email_number,
password,
name
FROM
t_user
WHERE
email_number = #{emailNumber}
</select>
<select id="findSymptomByDepartmentId" resultType="com.bwie.common.domain.Symptom">
SELECT
symptom_id,
department_id,
symptom_name
FROM
t_symptom
WHERE
department_id = #{departmentId}
</select>
<select id="drugTypeList" resultType="com.bwie.common.domain.DrugType">
SELECT
drugtype_id,
drugtype_name
FROM
t_drugtype
</select>
<select id="findDrugByDrugTypeId" resultType="com.bwie.common.domain.Drug">
SELECT
drug_id,
drugtype_id,
drug_name,
drug_image
FROM
t_drug
WHERE
drugtype_id = #{drugTypeId}
</select>
<select id="findDrugDetailsByDrugId" resultType="com.bwie.common.domain.DrugDetails">
SELECT
d.details_id,
d.drug_id,
d.ingredient,
d.taboo,
d.indications,
d.dosage,
d.drug_character,
d.packaging,
d.adverse_reaction,
t.drug_name
FROM
t_drug_details d
JOIN t_drug t ON d.drug_id = t.drug_id
WHERE
d.drug_id = 1
</select>
</mapper>