Browse Source

儿童疫苗相关功能

sunday 4 days ago
parent
commit
d4e513de2c
21 changed files with 416 additions and 10 deletions
  1. 24 8
      Marketplace/pom.xml
  2. 77 0
      Marketplace/src/main/java/com/dt/care/controller/AgesNameController.java
  3. 50 0
      Marketplace/src/main/java/com/dt/care/controller/ExcelFileLeadInController.java
  4. 54 0
      Marketplace/src/main/java/com/dt/care/controller/VaccinesController.java
  5. 8 0
      Marketplace/src/main/java/com/dt/care/dto/AgesNameDto.java
  6. 8 0
      Marketplace/src/main/java/com/dt/care/dto/DiseasesDto.java
  7. 8 0
      Marketplace/src/main/java/com/dt/care/dto/VaccinesDto.java
  8. 26 0
      Marketplace/src/main/java/com/dt/care/vo/ResultVo.java
  9. 1 0
      Marketplace/src/main/java/com/dt/common/domain/Child.java
  10. 3 0
      Marketplace/src/main/java/com/dt/common/service/AbnormalRecordService.java
  11. 4 0
      Marketplace/src/main/java/com/dt/common/service/FoodRecordService.java
  12. 3 0
      Marketplace/src/main/java/com/dt/common/service/SleepRecordService.java
  13. 3 0
      Marketplace/src/main/java/com/dt/common/service/TemperatureRecordService.java
  14. 4 0
      Marketplace/src/main/java/com/dt/common/service/ToiletRecordService.java
  15. 6 0
      Marketplace/src/main/java/com/dt/common/service/impl/AbnormalRecordServiceImpl.java
  16. 117 0
      Marketplace/src/main/java/com/dt/common/service/impl/FoodRecordServiceImpl.java
  17. 6 0
      Marketplace/src/main/java/com/dt/common/service/impl/SleepRecordServiceImpl.java
  18. 6 0
      Marketplace/src/main/java/com/dt/common/service/impl/TemperatureRecordServiceImpl.java
  19. 6 0
      Marketplace/src/main/java/com/dt/common/service/impl/ToiletRecordServiceImpl.java
  20. 1 1
      Marketplace/src/main/java/com/dt/intercepter/AuthIntercepter.java
  21. 1 1
      Marketplace/src/main/resources/application.yml

+ 24 - 8
Marketplace/pom.xml

@@ -21,13 +21,20 @@
             <version>3.5.4</version>
         </dependency>
 
-
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-jdbc</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.redisson</groupId>
             <artifactId>redisson-spring-boot-starter</artifactId>
             <version>3.21.3</version>
         </dependency>
-
+        <dependency>
+            <groupId>commons-dbutils</groupId>
+            <artifactId>commons-dbutils</artifactId>
+            <version>1.8.1</version> <!-- 版本可根据实际情况选择,建议用较新稳定版 -->
+        </dependency>
 
         <dependency>
             <groupId>io.jsonwebtoken</groupId>
@@ -51,14 +58,23 @@
         </dependency>
 
 
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>5.7.15</version>
+        </dependency>
 
 
-
-
-
-
-
-
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi</artifactId>
+            <version>4.1.2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml</artifactId>
+            <version>4.1.2</version>
+        </dependency>
 
 
 

+ 77 - 0
Marketplace/src/main/java/com/dt/care/controller/AgesNameController.java

@@ -0,0 +1,77 @@
+package com.dt.care.controller;
+
+import com.dt.care.dto.AgesNameDto;
+import com.dt.care.dto.DiseasesDto;
+import com.dt.care.vo.ResultVo;
+import com.dt.common.domain.HxwAgeBasedVaccineRecommendations;
+import com.dt.common.domain.HxwDiseases;
+import com.dt.common.domain.HxwVaccines;
+import com.dt.common.service.HxwAgeBasedVaccineRecommendationsService;
+import com.dt.common.service.HxwDiseasesService;
+import com.dt.common.service.HxwVaccineDiseaseRelationsService;
+import com.dt.config.NonLoginRequired;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+
+@RestController
+@RequestMapping("agesName")
+public class AgesNameController {
+    @Resource
+    private HxwAgeBasedVaccineRecommendationsService agesNameService;
+    @Resource
+    private HxwDiseasesService hxwDiseasesService;
+
+    @Resource
+    private HxwVaccineDiseaseRelationsService hxwVaccineDiseaseRelationsService;
+    @RequestMapping("findByAgesName")
+    @NonLoginRequired
+    public ResultVo findByAgesName() {//获取到年龄段
+        List<HxwAgeBasedVaccineRecommendations> list = agesNameService.list();
+        List<String> agesName=new ArrayList<>();
+        for (HxwAgeBasedVaccineRecommendations ageName : list) {
+            agesName.add(ageName.getAgeGroup());
+        }
+        return ResultVo.OK(agesName);
+
+    }
+
+
+    @RequestMapping("findByAgesNameByVaccines")
+    @NonLoginRequired
+    public ResultVo findByAgesNameByVaccines(@RequestBody AgesNameDto agesNameDto){//获取到年龄段的疫苗
+        List<HxwVaccines> list=agesNameService.findByAgesNameByVaccines(agesNameDto);
+        if (list != null){
+            return ResultVo.OK(list);
+        }else {
+            return ResultVo.ERROR("查询失败");
+        }
+    }
+
+
+    @RequestMapping("findByDiseases")
+    @NonLoginRequired
+    public ResultVo findByDiseases(){//获得到疾病名称
+        List<HxwDiseases> list = hxwDiseasesService.list();
+        List<String> diseasesName=new ArrayList<>();
+        for (HxwDiseases diseases : list){
+            diseasesName.add(diseases.getName());
+        }
+        return ResultVo.OK(diseasesName);
+    }
+
+    @RequestMapping("findByDiseasesByVaccines")
+    @NonLoginRequired
+    public ResultVo findByDiseasesByVaccines(@RequestBody DiseasesDto dto){//获取到疾病和对应疫苗
+        HxwDiseases hxwDiseases=hxwVaccineDiseaseRelationsService.findByDiseasesByVaccines(dto);
+        if (hxwDiseases != null){
+            return ResultVo.OK(hxwDiseases);
+        }else {
+            return ResultVo.ERROR("疾病和对应疫苗查询失败");
+        }
+    }
+}

+ 50 - 0
Marketplace/src/main/java/com/dt/care/controller/ExcelFileLeadInController.java

@@ -0,0 +1,50 @@
+package com.dt.care.controller;
+
+import com.dt.care.vo.ResultVo;
+import com.dt.common.service.*;
+import com.dt.config.NonLoginRequired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.io.IOException;
+import java.io.InputStream;
+
+@RestController
+@RequestMapping("excelFile")
+public class ExcelFileLeadInController {
+
+
+    @Resource
+    private FoodRecordService foodRecordService;
+    @Resource
+    private SleepRecordService sleepRecordService;
+
+    @Resource
+    private TemperatureRecordService temperatureRecordService;
+    @Resource
+    private ToiletRecordService toiletRecordService;
+    @Resource
+    private AbnormalRecordService abnormalRecordService;
+
+
+
+
+    @RequestMapping("leadIn")
+    @NonLoginRequired
+    public ResultVo leadIn(@RequestParam("file")MultipartFile file){
+        try {
+            InputStream inputStream = file.getInputStream();
+            foodRecordService.leadIn(inputStream);
+            sleepRecordService.leadIn(inputStream);
+            temperatureRecordService.leadIn(inputStream);
+            toiletRecordService.leadIn(inputStream);
+            abnormalRecordService.leadIn(inputStream);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        return ResultVo.OK("导入成功");
+    }
+}

+ 54 - 0
Marketplace/src/main/java/com/dt/care/controller/VaccinesController.java

@@ -0,0 +1,54 @@
+package com.dt.care.controller;
+
+import com.dt.care.dto.VaccinesDto;
+import com.dt.care.vo.ResultVo;
+import com.dt.common.domain.HxwVaccineCategories;
+import com.dt.common.domain.HxwVaccines;
+import com.dt.common.service.HxwVaccineCategoriesService;
+import com.dt.common.service.HxwVaccinesService;
+import com.dt.config.NonLoginRequired;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+
+@RestController
+@RequestMapping("vaccines")
+public class VaccinesController {
+
+    @Resource
+    private HxwVaccinesService hxwVaccinesService;
+    @Resource
+    private HxwVaccineCategoriesService hxwVaccineCategories;
+
+    @RequestMapping("findByVaccines")
+    @NonLoginRequired
+    public ResultVo findByVaccines(){
+        List<HxwVaccineCategories> list = hxwVaccineCategories.list();
+        List<String> names=new ArrayList<>();
+        for (HxwVaccineCategories name : list){
+            names.add(name.getName());
+        }
+        return ResultVo.OK(names);
+    }
+
+
+
+
+
+    @RequestMapping("findByVaccinesByCategory")
+    @NonLoginRequired
+    public ResultVo findByVaccinesByCategory(@RequestBody VaccinesDto dto){//查询出所有儿童或者成人的疫苗
+        List<HxwVaccines> vaccinesList= hxwVaccinesService.findByVaccinesByCategory(dto);
+        if(vaccinesList!=null){
+            return ResultVo.OK(vaccinesList);
+        }else {
+            return ResultVo.ERROR("疫苗分类查询失败");
+        }
+    }
+
+
+}

+ 8 - 0
Marketplace/src/main/java/com/dt/care/dto/AgesNameDto.java

@@ -0,0 +1,8 @@
+package com.dt.care.dto;
+
+import lombok.Data;
+
+@Data
+public class AgesNameDto {
+    private String agesName;
+}

+ 8 - 0
Marketplace/src/main/java/com/dt/care/dto/DiseasesDto.java

@@ -0,0 +1,8 @@
+package com.dt.care.dto;
+
+import lombok.Data;
+
+@Data
+public class DiseasesDto {
+    private String diseasesName;
+}

+ 8 - 0
Marketplace/src/main/java/com/dt/care/dto/VaccinesDto.java

@@ -0,0 +1,8 @@
+package com.dt.care.dto;
+
+import lombok.Data;
+
+@Data
+public class VaccinesDto {
+    private String name;
+}

+ 26 - 0
Marketplace/src/main/java/com/dt/care/vo/ResultVo.java

@@ -0,0 +1,26 @@
+package com.dt.care.vo;
+
+import lombok.Data;
+
+@Data
+public class ResultVo {
+    private Integer code;
+    private String msg;
+    private Object data;
+
+    public static ResultVo OK(Object data){
+        ResultVo resultVo=new ResultVo();
+        resultVo.setCode(200);
+        resultVo.setMsg("操作成功");
+        resultVo.setData(data);
+        return resultVo;
+    }
+
+    public static ResultVo ERROR(Object data){
+        ResultVo resultVo=new ResultVo();
+        resultVo.setCode(400);
+        resultVo.setMsg("操作失败");
+        resultVo.setData(data);
+        return resultVo;
+    }
+}

+ 1 - 0
Marketplace/src/main/java/com/dt/common/domain/Child.java

@@ -68,6 +68,7 @@ public class Child {
     /**
      * 用户id
      */
+    @TableField(exist = false)
     private Long userId;
 
     @Override

+ 3 - 0
Marketplace/src/main/java/com/dt/common/service/AbnormalRecordService.java

@@ -3,6 +3,8 @@ package com.dt.common.service;
 import com.dt.common.domain.AbnormalRecord;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.io.InputStream;
+
 /**
 * @author sunday
 * @description 针对表【abnormal_record(异常情况记录表)】的数据库操作Service
@@ -10,4 +12,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
 */
 public interface AbnormalRecordService extends IService<AbnormalRecord> {
 
+    void leadIn(InputStream inputStream);
 }

+ 4 - 0
Marketplace/src/main/java/com/dt/common/service/FoodRecordService.java

@@ -3,6 +3,8 @@ package com.dt.common.service;
 import com.dt.common.domain.FoodRecord;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.io.InputStream;
+
 /**
 * @author sunday
 * @description 针对表【food_record(饮食记录表)】的数据库操作Service
@@ -10,4 +12,6 @@ import com.baomidou.mybatisplus.extension.service.IService;
 */
 public interface FoodRecordService extends IService<FoodRecord> {
 
+    void leadIn(InputStream inputStream);
+
 }

+ 3 - 0
Marketplace/src/main/java/com/dt/common/service/SleepRecordService.java

@@ -3,6 +3,8 @@ package com.dt.common.service;
 import com.dt.common.domain.SleepRecord;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.io.InputStream;
+
 /**
 * @author sunday
 * @description 针对表【sleep_record(睡眠记录表)】的数据库操作Service
@@ -10,4 +12,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
 */
 public interface SleepRecordService extends IService<SleepRecord> {
 
+    void leadIn(InputStream inputStream);
 }

+ 3 - 0
Marketplace/src/main/java/com/dt/common/service/TemperatureRecordService.java

@@ -3,6 +3,8 @@ package com.dt.common.service;
 import com.dt.common.domain.TemperatureRecord;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.io.InputStream;
+
 /**
 * @author sunday
 * @description 针对表【temperature_record(体温记录表)】的数据库操作Service
@@ -10,4 +12,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
 */
 public interface TemperatureRecordService extends IService<TemperatureRecord> {
 
+    void leadIn(InputStream inputStream);
 }

+ 4 - 0
Marketplace/src/main/java/com/dt/common/service/ToiletRecordService.java

@@ -3,6 +3,8 @@ package com.dt.common.service;
 import com.dt.common.domain.ToiletRecord;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.io.InputStream;
+
 /**
 * @author sunday
 * @description 针对表【toilet_record(如厕记录表)】的数据库操作Service
@@ -10,4 +12,6 @@ import com.baomidou.mybatisplus.extension.service.IService;
 */
 public interface ToiletRecordService extends IService<ToiletRecord> {
 
+    void leadIn(InputStream inputStream);
+
 }

+ 6 - 0
Marketplace/src/main/java/com/dt/common/service/impl/AbnormalRecordServiceImpl.java

@@ -6,6 +6,8 @@ import com.dt.common.service.AbnormalRecordService;
 import com.dt.common.mapper.AbnormalRecordMapper;
 import org.springframework.stereotype.Service;
 
+import java.io.InputStream;
+
 /**
 * @author sunday
 * @description 针对表【abnormal_record(异常情况记录表)】的数据库操作Service实现
@@ -15,6 +17,10 @@ import org.springframework.stereotype.Service;
 public class AbnormalRecordServiceImpl extends ServiceImpl<AbnormalRecordMapper, AbnormalRecord>
     implements AbnormalRecordService{
 
+    @Override
+    public void leadIn(InputStream inputStream) {
+
+    }
 }
 
 

+ 117 - 0
Marketplace/src/main/java/com/dt/common/service/impl/FoodRecordServiceImpl.java

@@ -1,10 +1,27 @@
 package com.dt.common.service.impl;
 
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.poi.excel.ExcelUtil;
+import cn.hutool.poi.excel.sax.handler.RowHandler;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.dt.common.domain.Child;
 import com.dt.common.domain.FoodRecord;
+import com.dt.common.domain.User;
+import com.dt.common.mapper.ChildMapper;
+import com.dt.common.mapper.UserMapper;
 import com.dt.common.service.FoodRecordService;
 import com.dt.common.mapper.FoodRecordMapper;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.io.InputStream;
+import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
 
 /**
 * @author sunday
@@ -12,9 +29,109 @@ import org.springframework.stereotype.Service;
 * @createDate 2025-07-01 16:33:35
 */
 @Service
+@Slf4j
 public class FoodRecordServiceImpl extends ServiceImpl<FoodRecordMapper, FoodRecord>
     implements FoodRecordService{
 
+
+    @Resource
+    private ChildMapper childMapper;
+    @Resource
+    private UserMapper userMapper;
+
+    static AtomicInteger num=new AtomicInteger(0);
+
+    @Override
+    public void leadIn(InputStream inputStream) {
+        List<FoodRecord> list=new ArrayList<>();
+        ExcelUtil.readBySax(inputStream, -1, createRowHandler(list));
+        if(!CollectionUtils.isEmpty(list)){
+            batchAddFoodRecord(list);
+        }
+    }
+
+
+    public void batchAddFoodRecord(List<FoodRecord> list){
+
+        for (FoodRecord foodRecord : list){
+            num.getAndIncrement();
+                try {
+                    addFoodRecord(foodRecord);
+                } catch (Exception e) {
+                    log.info("第"+num.get()+"行数据插入失败");
+                }
+            }
+        }
+
+
+    @Transactional(rollbackFor = {Exception.class, RuntimeException.class})
+    public void addFoodRecord(FoodRecord foodRecord){
+        if (foodRecord!=null){
+            this.baseMapper.insert(foodRecord);
+        }
+    }
+
+
+
+    private RowHandler createRowHandler(List<FoodRecord> foodRecordList){
+        return new RowHandler() {
+            @Override
+            public void handle(int i, long l, List<Object> list) {
+                if(l>0){
+                    String childName = list.get(0).toString();
+                    QueryWrapper<Child> wrapper=new QueryWrapper<>();
+                    wrapper.eq("name",childName);
+                    Child child = childMapper.selectOne(wrapper);
+                    if(child==null){
+                        log.warn("第{}行数据被跳过:未找到姓名为【{}】的幼儿", l, childName);
+                        return;
+                    }
+                    Long id = child.getId();
+                    Date recordTime = (Date) list.get(1);
+
+                    Map<String,Integer> map=new HashMap<>();//将食谱名称映射成数字
+                    map.put("早餐",0);
+                    map.put("上午加餐",1);
+                    map.put("午餐",2);
+                    map.put("下午加餐",3);
+                    map.put("晚餐",4);
+
+                    String goodName =  list.get(2).toString();//食谱名称
+                    Integer mealType = map.get(goodName);//食谱名称对应的数字
+                    if(mealType==null){
+                        mealType=5;
+                    }
+                    String foodContent =list.get(3).toString();
+                    String amount = list.get(4).toString();
+                    String remark=list.get(5).toString();
+                    String username =  list.get(6).toString();
+                    QueryWrapper<User> userWrapper=new QueryWrapper<>();
+                    userWrapper.eq("username",username);
+                    User user = userMapper.selectOne(userWrapper);
+                    if (user==null){
+                        log.warn("第{}行数据被跳过:未找到名称为【{}】的记录人", l, username);
+                        return;
+                    }
+                    Long recorderId = user.getId();
+                    FoodRecord foodRecord=new FoodRecord();
+                    foodRecord.setChildId(id);
+                    foodRecord.setRecordTime(recordTime);
+                    foodRecord.setMealType(mealType);
+                    foodRecord.setFoodContent(foodContent);
+                    foodRecord.setAmount(amount);
+                    foodRecord.setRemark(remark);
+                    foodRecord.setRecorderId(recorderId);
+                    foodRecordList.add(foodRecord);
+                }
+            }
+        };
+    }
+
+
+
+
+
+
 }
 
 

+ 6 - 0
Marketplace/src/main/java/com/dt/common/service/impl/SleepRecordServiceImpl.java

@@ -6,6 +6,8 @@ import com.dt.common.service.SleepRecordService;
 import com.dt.common.mapper.SleepRecordMapper;
 import org.springframework.stereotype.Service;
 
+import java.io.InputStream;
+
 /**
 * @author sunday
 * @description 针对表【sleep_record(睡眠记录表)】的数据库操作Service实现
@@ -15,6 +17,10 @@ import org.springframework.stereotype.Service;
 public class SleepRecordServiceImpl extends ServiceImpl<SleepRecordMapper, SleepRecord>
     implements SleepRecordService{
 
+    @Override
+    public void leadIn(InputStream inputStream) {
+
+    }
 }
 
 

+ 6 - 0
Marketplace/src/main/java/com/dt/common/service/impl/TemperatureRecordServiceImpl.java

@@ -6,6 +6,8 @@ import com.dt.common.service.TemperatureRecordService;
 import com.dt.common.mapper.TemperatureRecordMapper;
 import org.springframework.stereotype.Service;
 
+import java.io.InputStream;
+
 /**
 * @author sunday
 * @description 针对表【temperature_record(体温记录表)】的数据库操作Service实现
@@ -15,6 +17,10 @@ import org.springframework.stereotype.Service;
 public class TemperatureRecordServiceImpl extends ServiceImpl<TemperatureRecordMapper, TemperatureRecord>
     implements TemperatureRecordService{
 
+    @Override
+    public void leadIn(InputStream inputStream) {
+
+    }
 }
 
 

+ 6 - 0
Marketplace/src/main/java/com/dt/common/service/impl/ToiletRecordServiceImpl.java

@@ -6,6 +6,8 @@ import com.dt.common.service.ToiletRecordService;
 import com.dt.common.mapper.ToiletRecordMapper;
 import org.springframework.stereotype.Service;
 
+import java.io.InputStream;
+
 /**
 * @author sunday
 * @description 针对表【toilet_record(如厕记录表)】的数据库操作Service实现
@@ -15,6 +17,10 @@ import org.springframework.stereotype.Service;
 public class ToiletRecordServiceImpl extends ServiceImpl<ToiletRecordMapper, ToiletRecord>
     implements ToiletRecordService{
 
+    @Override
+    public void leadIn(InputStream inputStream) {
+
+    }
 }
 
 

+ 1 - 1
Marketplace/src/main/java/com/dt/intercepter/AuthIntercepter.java

@@ -63,7 +63,7 @@ public class AuthIntercepter implements HandlerInterceptor {
             Long userId = TokenUtils.getUserId(token);
             log.info("userId",userId);
             String s = stringRedisTemplate.opsForValue().get(userId);
-            if (s.equals(token))
+            if (!s.equals(token))
             {
                 log.info("*************用户不存在");
                 throw new ApiException(101,"token错误");

+ 1 - 1
Marketplace/src/main/resources/application.yml

@@ -32,7 +32,7 @@ logging:
 #    bootstrap-servers: localhost:9092
 #    consumer:
 #      group-id: sms_group
-#      auto-offset-reset: latest #latest
+#      auto-offset-reset: latest #latestcare
 #      enable-auto-commit: false
 #      auto-commit-interval: 100
 #      max-poll-records: 500