HuRongxin 3 месяцев назад
Родитель
Сommit
d3a72943f4
17 измененных файлов с 881 добавлено и 6 удалено
  1. 106 0
      ruoyi-admin/src/main/java/org/dromara/web/controller/NutritionEducationTemplateController.java
  2. 14 0
      ruoyi-admin/src/main/java/org/dromara/web/domain/NutritionDiagnosis.java
  3. 67 0
      ruoyi-admin/src/main/java/org/dromara/web/domain/NutritionEducationTemplate.java
  4. 21 0
      ruoyi-admin/src/main/java/org/dromara/web/domain/bo/NutritionDiagnosisBo.java
  5. 77 0
      ruoyi-admin/src/main/java/org/dromara/web/domain/bo/NutritionEducationTemplateBo.java
  6. 4 0
      ruoyi-admin/src/main/java/org/dromara/web/domain/vo/ConsultantResultTemplateVo.java
  7. 12 0
      ruoyi-admin/src/main/java/org/dromara/web/domain/vo/NutritionDiagnosisVo.java
  8. 111 0
      ruoyi-admin/src/main/java/org/dromara/web/domain/vo/NutritionEducationTemplateVo.java
  9. 18 0
      ruoyi-admin/src/main/java/org/dromara/web/mapper/NutritionEducationTemplateMapper.java
  10. 69 0
      ruoyi-admin/src/main/java/org/dromara/web/service/INutritionEducationTemplateService.java
  11. 20 2
      ruoyi-admin/src/main/java/org/dromara/web/service/impl/ConsultantResultTemplateServiceImpl.java
  12. 76 4
      ruoyi-admin/src/main/java/org/dromara/web/service/impl/NutritionDiagnosisServiceImpl.java
  13. 244 0
      ruoyi-admin/src/main/java/org/dromara/web/service/impl/NutritionEducationTemplateServiceImpl.java
  14. 21 0
      ruoyi-admin/src/main/java/org/dromara/web/service/impl/TreatmentUserServiceImpl.java
  15. 7 0
      ruoyi-admin/src/main/resources/mapper/parameter/NutritionEducationTemplateMapper.xml
  16. 3 0
      ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/BizConst.java
  17. 11 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/config/RedisUtil.java

+ 106 - 0
ruoyi-admin/src/main/java/org/dromara/web/controller/NutritionEducationTemplateController.java

@@ -0,0 +1,106 @@
+package org.dromara.web.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.dromara.web.domain.bo.NutritionEducationTemplateBo;
+import org.dromara.web.domain.vo.NutritionEducationTemplateVo;
+import org.dromara.web.service.INutritionEducationTemplateService;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 营养宣教模板
+ *
+ * @author Lion Li
+ * @date 2025-07-14
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/basicPublicTemplate/educationTemplate")
+public class NutritionEducationTemplateController extends BaseController {
+
+    private final INutritionEducationTemplateService nutritionEducationTemplateService;
+
+    /**
+     * 查询营养宣教模板列表
+     */
+    @SaCheckPermission("basicPublicTemplate:educationTemplate:list")
+    @GetMapping("/list")
+    public TableDataInfo<NutritionEducationTemplateVo> list(NutritionEducationTemplateBo bo, PageQuery pageQuery) {
+        return nutritionEducationTemplateService.queryPageList(bo, pageQuery);
+    }
+
+    /**
+     * 导出营养宣教模板列表
+     */
+    @SaCheckPermission("basicPublicTemplate:educationTemplate:export")
+    @Log(title = "营养宣教模板", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(NutritionEducationTemplateBo bo, HttpServletResponse response) {
+        List<NutritionEducationTemplateVo> list = nutritionEducationTemplateService.queryList(bo);
+        ExcelUtil.exportExcel(list, "营养宣教模板", NutritionEducationTemplateVo.class, response);
+    }
+
+    /**
+     * 获取营养宣教模板详细信息
+     *
+     * @param id 主键
+     */
+    @SaCheckPermission("basicPublicTemplate:educationTemplate:query")
+    @GetMapping("/{id}")
+    public R<NutritionEducationTemplateVo> getInfo(@NotNull(message = "主键不能为空")
+                                     @PathVariable Long id) {
+        return R.ok(nutritionEducationTemplateService.queryById(id));
+    }
+
+    /**
+     * 新增营养宣教模板
+     */
+    @SaCheckPermission("basicPublicTemplate:educationTemplate:add")
+    @Log(title = "营养宣教模板", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody NutritionEducationTemplateBo bo) {
+        return toAjax(nutritionEducationTemplateService.insertByBo(bo));
+    }
+
+    /**
+     * 修改营养宣教模板
+     */
+    @SaCheckPermission("basicPublicTemplate:educationTemplate:edit")
+    @Log(title = "营养宣教模板", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody NutritionEducationTemplateBo bo) {
+        return toAjax(nutritionEducationTemplateService.updateByBo(bo));
+    }
+
+    /**
+     * 删除营养宣教模板
+     *
+     * @param ids 主键串
+     */
+    @SaCheckPermission("basicPublicTemplate:educationTemplate:remove")
+    @Log(title = "营养宣教模板", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public R<Void> remove(@NotEmpty(message = "主键不能为空")
+                          @PathVariable Long[] ids) {
+        return toAjax(nutritionEducationTemplateService.deleteWithValidByIds(List.of(ids), true));
+    }
+}

+ 14 - 0
ruoyi-admin/src/main/java/org/dromara/web/domain/NutritionDiagnosis.java

@@ -27,11 +27,22 @@ public class NutritionDiagnosis extends TenantEntity {
     @TableId(value = "id")
     private Long id;
 
+
     /**
      * 患者id
      */
     private Long treatmentUserId;
 
+    /**
+     * 看诊类型
+     */
+    private String type;
+
+    /**
+     * 门诊号
+     */
+    private String outpatientNo;
+
     /**
      * 会诊结果模板id
      */
@@ -47,6 +58,9 @@ public class NutritionDiagnosis extends TenantEntity {
      */
     private String diagnosisBasisId;
 
+
+    private String consultantResult;
+
     /**
      * 医嘱
      */

+ 67 - 0
ruoyi-admin/src/main/java/org/dromara/web/domain/NutritionEducationTemplate.java

@@ -0,0 +1,67 @@
+package org.dromara.web.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * 营养宣教模板对象 nutrition_education_template
+ *
+ * @author Lion Li
+ * @date 2025-07-14
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("nutrition_education_template")
+public class NutritionEducationTemplate extends TenantEntity {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     *
+     */
+    @TableId(value = "id")
+    private Long id;
+
+    /**
+     * 模板名称
+     */
+    private String templateName;
+
+    /**
+     * 适用科室
+     */
+    private String deptId;
+
+    /**
+     * 疾病标签id
+     */
+    private String diseaseLabelId;
+
+    /**
+     * 模板描述
+     */
+    private String description;
+
+    /**
+     * 正文
+     */
+    private String content;
+
+    /**
+     * 删除标志(0代表存在 1代表删除)
+     */
+    @TableLogic
+    private String delFlag;
+
+    /**
+     * 最后修改人部门
+     */
+    private Long updateDept;
+
+
+}

+ 21 - 0
ruoyi-admin/src/main/java/org/dromara/web/domain/bo/NutritionDiagnosisBo.java

@@ -9,6 +9,9 @@ import lombok.EqualsAndHashCode;
 import jakarta.validation.constraints.*;
 import org.dromara.web.domain.NutritionDiagnosis;
 
+import java.util.Date;
+import java.util.List;
+
 /**
  * 营养诊断业务对象 nutrition_diagnosis
  *
@@ -32,6 +35,16 @@ public class NutritionDiagnosisBo extends BaseEntity {
     @NotNull(message = "患者id不能为空", groups = { AddGroup.class, EditGroup.class })
     private Long treatmentUserId;
 
+    /**
+     * 看诊类型
+     */
+    private String type;
+
+    /**
+     * 门诊号
+     */
+    private String outpatientNo;
+
     /**
      * 会诊结果模板id
      */
@@ -47,10 +60,18 @@ public class NutritionDiagnosisBo extends BaseEntity {
      */
     private String diagnosisBasisId;
 
+    private String consultantResult;
+
+    private String consultantResultStr;
+
     /**
      * 医嘱
      */
     private String medicalOrder;
 
+    private List<String>labelList;
+
+    private List<Date>dateRange;
+
 
 }

+ 77 - 0
ruoyi-admin/src/main/java/org/dromara/web/domain/bo/NutritionEducationTemplateBo.java

@@ -0,0 +1,77 @@
+package org.dromara.web.domain.bo;
+
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+import org.dromara.system.domain.bo.SysDeptBo;
+import org.dromara.system.domain.bo.SysDiseaseLabelBo;
+import org.dromara.web.domain.NutritionEducationTemplate;
+
+import java.util.List;
+
+/**
+ * 营养宣教模板业务对象 nutrition_education_template
+ *
+ * @author Lion Li
+ * @date 2025-07-14
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = NutritionEducationTemplate.class, reverseConvertGenerate = false)
+public class NutritionEducationTemplateBo extends BaseEntity {
+
+    /**
+     *
+     */
+    @NotNull(message = "不能为空", groups = { EditGroup.class })
+    private Long id;
+
+    /**
+     * 模板名称
+     */
+    @NotBlank(message = "模板名称不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String templateName;
+
+    /**
+     * 适用科室
+     */
+    private String deptId;
+
+    /**
+     * 疾病标签id
+     */
+    private String diseaseLabelId;
+
+    /**
+     * 模板描述
+     */
+    private String description;
+
+    /**
+     * 正文
+     */
+    private String content;
+
+    private String contentStr;
+
+    /**
+     * 最后修改人部门
+     */
+    private Long updateDept;
+
+    private String deptName;
+
+    private String createDeptName;
+
+    private String updateDeptName;
+
+    private List<String> deptIdList;
+
+    private List<SysDiseaseLabelBo> labelList;
+
+
+}

+ 4 - 0
ruoyi-admin/src/main/java/org/dromara/web/domain/vo/ConsultantResultTemplateVo.java

@@ -74,8 +74,12 @@ public class ConsultantResultTemplateVo implements Serializable {
 
     private Long createBy;
 
+    private String createByUser;
+
     private Long updateBy;
 
+    private String updateByUser;
+
     private String createDeptName;
 
     private String updateDeptName;

+ 12 - 0
ruoyi-admin/src/main/java/org/dromara/web/domain/vo/NutritionDiagnosisVo.java

@@ -37,6 +37,12 @@ public class NutritionDiagnosisVo implements Serializable {
     @ExcelProperty(value = "患者id")
     private Long treatmentUserId;
 
+    @ExcelProperty(value = "看诊类型")
+    private String type;
+
+    @ExcelProperty(value = "门诊号")
+    private String outpatientNo;
+
     /**
      * 会诊结果模板id
      */
@@ -55,6 +61,9 @@ public class NutritionDiagnosisVo implements Serializable {
     @ExcelProperty(value = "诊断依据id")
     private String diagnosisBasisId;
 
+    @ExcelProperty(value = "会诊结果")
+    private String consultantResult;
+
     /**
      * 医嘱
      */
@@ -73,5 +82,8 @@ public class NutritionDiagnosisVo implements Serializable {
     @ExcelProperty(value = "诊断医生")
     private Long createBy;
 
+    private String createByUser;
+
+    private String diagnosisLabelStr;
 
 }

+ 111 - 0
ruoyi-admin/src/main/java/org/dromara/web/domain/vo/NutritionEducationTemplateVo.java

@@ -0,0 +1,111 @@
+package org.dromara.web.domain.vo;
+
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import cn.idev.excel.annotation.ExcelProperty;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import org.dromara.web.domain.NutritionEducationTemplate;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 营养宣教模板视图对象 nutrition_education_template
+ *
+ * @author Lion Li
+ * @date 2025-07-14
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = NutritionEducationTemplate.class)
+public class NutritionEducationTemplateVo  implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     *
+     */
+    @ExcelProperty(value = "")
+    private Long id;
+
+    /**
+     * 模板名称
+     */
+    @ExcelProperty(value = "模板名称")
+    private String templateName;
+
+    /**
+     * 适用科室
+     */
+    @ExcelProperty(value = "适用科室")
+    private String deptId;
+
+    /**
+     * 疾病标签id
+     */
+    @ExcelProperty(value = "疾病标签id")
+    private String diseaseLabelId;
+
+    /**
+     * 模板描述
+     */
+    @ExcelProperty(value = "模板描述")
+    private String description;
+
+    /**
+     * 正文
+     */
+    @ExcelProperty(value = "正文")
+    private String content;
+
+    /**
+     * 最后修改人部门
+     */
+    @ExcelProperty(value = "最后修改人部门")
+    private Long updateDept;
+
+    /**
+     * 创建部门
+     */
+    private Long createDept;
+
+    /**
+     * 创建者
+     */
+    @ExcelProperty(value = "创建者")
+    private Long createBy;
+
+    @ExcelProperty(value = "创建时间")
+
+    private Date createTime;
+    @ExcelProperty(value = "编辑时间")
+
+    private Date updateTime;
+
+    private String createByUser;
+
+
+    /**
+     * 更新者
+     */
+    private Long updateBy;
+
+    private String updateByUser;
+
+    private String deptName;
+
+    private String createDeptName;
+
+    private String updateDeptName;
+
+
+
+
+}

+ 18 - 0
ruoyi-admin/src/main/java/org/dromara/web/mapper/NutritionEducationTemplateMapper.java

@@ -0,0 +1,18 @@
+package org.dromara.web.mapper;
+
+
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+import org.dromara.web.domain.NutritionEducationTemplate;
+import org.dromara.web.domain.vo.NutritionEducationTemplateVo;
+import org.springframework.stereotype.Repository;
+
+/**
+ * 营养宣教模板Mapper接口
+ *
+ * @author Lion Li
+ * @date 2025-07-14
+ */
+@Repository
+public interface NutritionEducationTemplateMapper extends BaseMapperPlus<NutritionEducationTemplate, NutritionEducationTemplateVo> {
+
+}

+ 69 - 0
ruoyi-admin/src/main/java/org/dromara/web/service/INutritionEducationTemplateService.java

@@ -0,0 +1,69 @@
+package org.dromara.web.service;
+
+
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.web.domain.bo.NutritionEducationTemplateBo;
+import org.dromara.web.domain.vo.NutritionEducationTemplateVo;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 营养宣教模板Service接口
+ *
+ * @author Lion Li
+ * @date 2025-07-14
+ */
+public interface INutritionEducationTemplateService {
+
+    /**
+     * 查询营养宣教模板
+     *
+     * @param id 主键
+     * @return 营养宣教模板
+     */
+    NutritionEducationTemplateVo queryById(Long id);
+
+    /**
+     * 分页查询营养宣教模板列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 营养宣教模板分页列表
+     */
+    TableDataInfo<NutritionEducationTemplateVo> queryPageList(NutritionEducationTemplateBo bo, PageQuery pageQuery);
+
+    /**
+     * 查询符合条件的营养宣教模板列表
+     *
+     * @param bo 查询条件
+     * @return 营养宣教模板列表
+     */
+    List<NutritionEducationTemplateVo> queryList(NutritionEducationTemplateBo bo);
+
+    /**
+     * 新增营养宣教模板
+     *
+     * @param bo 营养宣教模板
+     * @return 是否新增成功
+     */
+    Boolean insertByBo(NutritionEducationTemplateBo bo);
+
+    /**
+     * 修改营养宣教模板
+     *
+     * @param bo 营养宣教模板
+     * @return 是否修改成功
+     */
+    Boolean updateByBo(NutritionEducationTemplateBo bo);
+
+    /**
+     * 校验并批量删除营养宣教模板信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+}

+ 20 - 2
ruoyi-admin/src/main/java/org/dromara/web/service/impl/ConsultantResultTemplateServiceImpl.java

@@ -10,7 +10,9 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.dromara.system.domain.SysDept;
+import org.dromara.system.domain.SysUser;
 import org.dromara.system.mapper.SysDeptMapper;
+import org.dromara.system.mapper.SysUserMapper;
 import org.dromara.web.domain.ConsultantResultTemplate;
 import org.dromara.web.domain.SuppliesManage;
 import org.dromara.web.domain.bo.ConsultantResultTemplateBo;
@@ -42,6 +44,9 @@ public class ConsultantResultTemplateServiceImpl implements IConsultantResultTem
 
     private final SysDeptMapper deptMapper;
 
+    private final SysUserMapper userMapper;
+
+
     /**
      * 查询会诊结果模板
      *
@@ -68,10 +73,23 @@ public class ConsultantResultTemplateServiceImpl implements IConsultantResultTem
         List<SysDept> deptlList = deptMapper.selectList(Wrappers.lambdaQuery(SysDept.class).select(SysDept::getDeptId, SysDept::getDeptName));
         Map<Long, String> deptMap = deptlList.stream().collect(Collectors.toMap(k1 -> k1.getDeptId(), k2 -> String.valueOf(k2.getDeptName()), (k1, k2) -> k1));
 
+        List<SysUser> userList = userMapper.selectList(Wrappers.lambdaQuery(SysUser.class).select(SysUser::getUserId, SysUser::getUserName));
+        Map<String, String> userMap = userList.stream().collect(Collectors.toMap(k1 -> String.valueOf(k1.getUserId()), k2 -> k2.getUserName(), (k1, k2) -> k1));
+
         if (null != templateVoList) {
             for (ConsultantResultTemplateVo templateVo : templateVoList) {
-                templateVo.setCreateDeptName(deptMap.get(templateVo.getCreateDept()));
-                templateVo.setUpdateDeptName(deptMap.get(templateVo.getUpdateDept()));
+                if (null != templateVo.getCreateBy()) {
+                    templateVo.setCreateByUser(userMap.get(templateVo.getCreateBy().toString()));
+                }
+                if (null != templateVo.getUpdateBy()) {
+                    templateVo.setUpdateByUser(userMap.get(templateVo.getUpdateBy().toString()));
+                }
+                if (null != templateVo.getCreateDept()) {
+                    templateVo.setCreateDeptName(deptMap.get(templateVo.getCreateDept()));
+                }
+                if (null != templateVo.getUpdateDept()) {
+                    templateVo.setUpdateDeptName(deptMap.get(templateVo.getUpdateDept()));
+                }
             }
         }
         return TableDataInfo.build(result);

+ 76 - 4
ruoyi-admin/src/main/java/org/dromara/web/service/impl/NutritionDiagnosisServiceImpl.java

@@ -1,5 +1,6 @@
 package org.dromara.web.service.impl;
 
+import cn.hutool.core.collection.CollUtil;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
@@ -9,23 +10,36 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.dromara.system.domain.SysDept;
+import org.dromara.system.domain.SysDiseaseLabel;
 import org.dromara.system.domain.SysMenu;
+import org.dromara.system.domain.SysUser;
+import org.dromara.system.domain.vo.SysDiseaseLabelVo;
 import org.dromara.system.domain.vo.SysMenuVo;
+import org.dromara.system.mapper.SysDiseaseLabelMapper;
 import org.dromara.system.mapper.SysMenuMapper;
+import org.dromara.system.mapper.SysUserMapper;
+import org.dromara.system.service.ISysDiseaseLabelService;
 import org.dromara.web.domain.ConsultantResultTemplate;
 import org.dromara.web.domain.ConsultantResultTemplateType;
 import org.dromara.web.domain.NutritionDiagnosis;
 import org.dromara.web.domain.bo.NutritionDiagnosisBo;
 import org.dromara.web.domain.vo.ConsultantResultTemplateVo;
 import org.dromara.web.domain.vo.NutritionDiagnosisVo;
+import org.dromara.web.domain.vo.TreatmentUserVo;
 import org.dromara.web.mapper.ConsultantResultTemplateMapper;
 import org.dromara.web.mapper.ConsultantResultTemplateTypeMapper;
 import org.dromara.web.mapper.NutritionDiagnosisMapper;
 import org.dromara.web.service.INutritionDiagnosisService;
+import org.dromara.web.service.ITreatmentUserService;
 import org.springframework.stereotype.Service;
 
 
+import java.net.URLDecoder;
+import java.nio.charset.StandardCharsets;
+import java.text.SimpleDateFormat;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 营养诊断Service业务层处理
@@ -40,8 +54,16 @@ public class NutritionDiagnosisServiceImpl implements INutritionDiagnosisService
 
     private final NutritionDiagnosisMapper baseMapper;
 
+    private final SysUserMapper userMapper;
+
+    private final SysDiseaseLabelMapper labelMapper;
+
+    private final ITreatmentUserService treatmentUserService;
+
     private final ConsultantResultTemplateMapper templateMapper;
 
+    private final ISysDiseaseLabelService diseaseLabelService;
+
     private final ConsultantResultTemplateTypeMapper templateTypeMapper;
 
     /**
@@ -52,6 +74,7 @@ public class NutritionDiagnosisServiceImpl implements INutritionDiagnosisService
      */
     @Override
     public NutritionDiagnosisVo queryById(Long id) {
+
         return baseMapper.selectVoById(id);
     }
 
@@ -66,6 +89,33 @@ public class NutritionDiagnosisServiceImpl implements INutritionDiagnosisService
     public TableDataInfo<NutritionDiagnosisVo> queryPageList(NutritionDiagnosisBo bo, PageQuery pageQuery) {
         LambdaQueryWrapper<NutritionDiagnosis> lqw = buildQueryWrapper(bo);
         Page<NutritionDiagnosisVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        List<SysUser> userList = userMapper.selectList(Wrappers.lambdaQuery(SysUser.class).select(SysUser::getUserId, SysUser::getUserName));
+        Map<Long, String> userMap = userList.stream().collect(Collectors.toMap(k1 -> k1.getUserId(), k2 -> String.valueOf(k2.getUserName()), (k1, k2) -> k1));
+
+
+        List<NutritionDiagnosisVo> records = result.getRecords();
+        if (CollUtil.isNotEmpty(records)) {
+            String labelIdsStr = null;
+            List<String> labelNames = null;
+            for (NutritionDiagnosisVo record : records) {
+                record.setCreateByUser(userMap.get(record.getCreateBy()));
+                labelIdsStr = record.getDiagnosisLableId();
+                // 处理产品标签
+                if (StringUtils.isNotBlank(labelIdsStr)) {
+                    labelNames = Arrays.stream(labelIdsStr.split(",")).map(String::trim).filter(StringUtils::isNotBlank).map(labelid -> {
+                        try {
+                            return diseaseLabelService.queryById(Long.parseLong(labelid));
+                        } catch (NumberFormatException e) {
+                            return null;
+                        }
+                    }).filter(Objects::nonNull).map(SysDiseaseLabelVo::getLabelName).filter(StringUtils::isNotBlank).collect(Collectors.toList());
+
+                    if (!labelNames.isEmpty()) {
+                        record.setDiagnosisLabelStr(String.join(",", labelNames));
+                    }
+                }
+            }
+        }
         return TableDataInfo.build(result);
     }
 
@@ -83,13 +133,22 @@ public class NutritionDiagnosisServiceImpl implements INutritionDiagnosisService
 
     private LambdaQueryWrapper<NutritionDiagnosis> buildQueryWrapper(NutritionDiagnosisBo bo) {
         Map<String, Object> params = bo.getParams();
+        List<Date> dateRange = bo.getDateRange();
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
         LambdaQueryWrapper<NutritionDiagnosis> lqw = Wrappers.lambdaQuery();
         lqw.orderByAsc(NutritionDiagnosis::getId);
         lqw.eq(bo.getTreatmentUserId() != null, NutritionDiagnosis::getTreatmentUserId, bo.getTreatmentUserId());
-        lqw.eq(bo.getConsultantTemplateId() != null, NutritionDiagnosis::getConsultantTemplateId, bo.getConsultantTemplateId());
-        lqw.eq(StringUtils.isNotBlank(bo.getDiagnosisLableId()), NutritionDiagnosis::getDiagnosisLableId, bo.getDiagnosisLableId());
-        lqw.eq(StringUtils.isNotBlank(bo.getDiagnosisBasisId()), NutritionDiagnosis::getDiagnosisBasisId, bo.getDiagnosisBasisId());
-        lqw.eq(StringUtils.isNotBlank(bo.getMedicalOrder()), NutritionDiagnosis::getMedicalOrder, bo.getMedicalOrder());
+        lqw.eq(StringUtils.isNotBlank(bo.getType()), NutritionDiagnosis::getType, bo.getType());
+        lqw.like(StringUtils.isNotBlank(bo.getSearchValue()), NutritionDiagnosis::getOutpatientNo, bo.getSearchValue());
+
+        if (dateRange != null && dateRange.size() == 2) {
+            String startTime = sdf.format(dateRange.get(0)) + " 00:00:00";  // 开始时间
+            String endTime = sdf.format(dateRange.get(1)) + " 23:59:59";    // 结束时间
+            if (StringUtils.isNotBlank(startTime) && StringUtils.isNotBlank(endTime)) {
+                lqw.between(NutritionDiagnosis::getCreateTime, startTime, endTime);
+
+            }
+        }
         return lqw;
     }
 
@@ -101,6 +160,16 @@ public class NutritionDiagnosisServiceImpl implements INutritionDiagnosisService
      */
     @Override
     public Boolean insertByBo(NutritionDiagnosisBo bo) {
+        bo.setDiagnosisLableId(String.join(",", bo.getLabelList()));
+        Long treatmentUserId = bo.getTreatmentUserId();
+        if (null != treatmentUserId) {
+            TreatmentUserVo treatmentUserVo = treatmentUserService.queryById(treatmentUserId);
+            if (null != treatmentUserVo) {
+                bo.setType(treatmentUserVo.getType());
+                bo.setOutpatientNo(treatmentUserVo.getOutpatientNo());
+            }
+        }
+        bo.setConsultantResult(URLDecoder.decode(new String(Base64.getDecoder().decode(bo.getConsultantResultStr()), StandardCharsets.UTF_8)));
         NutritionDiagnosis add = MapstructUtils.convert(bo, NutritionDiagnosis.class);
         validEntityBeforeSave(add);
         boolean flag = baseMapper.insert(add) > 0;
@@ -118,6 +187,8 @@ public class NutritionDiagnosisServiceImpl implements INutritionDiagnosisService
      */
     @Override
     public Boolean updateByBo(NutritionDiagnosisBo bo) {
+        bo.setDiagnosisLableId(String.join(",", bo.getLabelList()));
+        bo.setConsultantResult(URLDecoder.decode(new String(Base64.getDecoder().decode(bo.getConsultantResultStr()), StandardCharsets.UTF_8)));
         NutritionDiagnosis update = MapstructUtils.convert(bo, NutritionDiagnosis.class);
         validEntityBeforeSave(update);
         return baseMapper.updateById(update) > 0;
@@ -171,6 +242,7 @@ public class NutritionDiagnosisServiceImpl implements INutritionDiagnosisService
             List<Map<String, Object>> templateChildren = new ArrayList<>();
             for (ConsultantResultTemplateVo template : templates) {
                 Map<String, Object> templateNode = new HashMap<>();
+                templateNode.put("id", template.getId()); // 模板名称
                 templateNode.put("label", template.getTemplateName()); // 模板名称
                 templateNode.put("template", template.getContent());
                 templateChildren.add(templateNode);

+ 244 - 0
ruoyi-admin/src/main/java/org/dromara/web/service/impl/NutritionEducationTemplateServiceImpl.java

@@ -0,0 +1,244 @@
+package org.dromara.web.service.impl;
+
+import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.dromara.system.domain.SysDept;
+import org.dromara.system.domain.SysDiseaseLabel;
+import org.dromara.system.domain.SysUser;
+import org.dromara.system.domain.bo.SysDiseaseLabelBo;
+import org.dromara.system.mapper.SysDeptMapper;
+import org.dromara.system.mapper.SysDiseaseLabelMapper;
+import org.dromara.system.mapper.SysUserMapper;
+import org.dromara.web.domain.NutritionEducationTemplate;
+import org.dromara.web.domain.TreatmentUser;
+import org.dromara.web.domain.bo.NutritionEducationTemplateBo;
+import org.dromara.web.domain.vo.NutritionEducationTemplateVo;
+import org.dromara.web.mapper.NutritionEducationTemplateMapper;
+import org.dromara.web.service.INutritionEducationTemplateService;
+import org.springframework.stereotype.Service;
+
+
+import java.net.URLDecoder;
+import java.nio.charset.StandardCharsets;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * 营养宣教模板Service业务层处理
+ *
+ * @author Lion Li
+ * @date 2025-07-14
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class NutritionEducationTemplateServiceImpl implements INutritionEducationTemplateService {
+
+    private final NutritionEducationTemplateMapper baseMapper;
+
+    private final SysDeptMapper deptMapper;
+
+    private final SysUserMapper userMapper;
+
+    private final SysDiseaseLabelMapper labelMapper;
+
+    /**
+     * 查询营养宣教模板
+     *
+     * @param id 主键
+     * @return 营养宣教模板
+     */
+    @Override
+    public NutritionEducationTemplateVo queryById(Long id) {
+        NutritionEducationTemplateVo templateVo = baseMapper.selectVoById(id);
+        List<SysDept> deptlList = deptMapper.selectList(Wrappers.lambdaQuery(SysDept.class).select(SysDept::getDeptId, SysDept::getDeptName));
+        Map<String, String> deptMap = deptlList.stream().collect(Collectors.toMap(k1 -> String.valueOf(k1.getDeptId()), k2 -> k2.getDeptName(), (k1, k2) -> k1));
+
+        List<SysDiseaseLabel> disLabelList = labelMapper.selectList(Wrappers.lambdaQuery(SysDiseaseLabel.class).select(SysDiseaseLabel::getLabelId, SysDiseaseLabel::getLabelName));
+        Map<String, String> labelMap = disLabelList.stream().collect(Collectors.toMap(k1 -> String.valueOf(k1.getLabelId()), k2 -> String.valueOf(k2.getLabelName()), (k1, k2) -> k1));
+
+        if (StringUtils.isNotBlank(templateVo.getDeptId())) {
+            List<String> stringIdList = Arrays.stream(templateVo.getDeptId().split(",")).map(String::trim).filter(StringUtils::isNotBlank).collect(Collectors.toList());
+           List<String> deptNameList = new ArrayList<>();
+            for (String idStr : stringIdList) {
+                deptNameList.add(deptMap.get(idStr));
+            }
+            templateVo.setDeptName(String.join(",", deptNameList));
+        }
+
+        if (StringUtils.isNotBlank(templateVo.getDiseaseLabelId())) {
+            List<String> labelIdList = Arrays.stream(templateVo.getDiseaseLabelId().split(",")).map(String::trim).filter(StringUtils::isNotBlank).collect(Collectors.toList());
+            List<String> labelList = new ArrayList<>();
+            for (String idStr : labelIdList) {
+                labelList.add(labelMap.get(idStr));
+            }
+            templateVo.setDiseaseLabelId(String.join(",", labelList));
+        }
+        return templateVo;
+    }
+
+    /**
+     * 分页查询营养宣教模板列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 营养宣教模板分页列表
+     */
+    @Override
+    public TableDataInfo<NutritionEducationTemplateVo> queryPageList(NutritionEducationTemplateBo bo, PageQuery pageQuery) {
+        LambdaQueryWrapper<NutritionEducationTemplate> lqw = buildQueryWrapper(bo);
+        Page<NutritionEducationTemplateVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        List<NutritionEducationTemplateVo> records = result.getRecords();
+        String deptId = null;
+        String name = null;
+        List<String> deptIds = null;
+        List<String> deptNameList = null;
+        List<SysDept> deptlList = deptMapper.selectList(Wrappers.lambdaQuery(SysDept.class).select(SysDept::getDeptId, SysDept::getDeptName));
+        Map<String, String> deptMap = deptlList.stream().collect(Collectors.toMap(k1 -> String.valueOf(k1.getDeptId()), k2 -> k2.getDeptName(), (k1, k2) -> k1));
+
+        List<SysUser> userList = userMapper.selectList(Wrappers.lambdaQuery(SysUser.class).select(SysUser::getUserId, SysUser::getUserName));
+        Map<String, String> userMap = userList.stream().collect(Collectors.toMap(k1 -> String.valueOf(k1.getUserId()), k2 -> k2.getUserName(), (k1, k2) -> k1));
+
+        if (null != records) {
+            for (NutritionEducationTemplateVo record : records) {
+                deptId = record.getDeptId();
+                deptIds = Arrays.stream(deptId.split(",")).map(String::trim).filter(StringUtils::isNotBlank).collect(Collectors.toList());
+                deptNameList = new ArrayList<>();
+                for (String id : deptIds) {
+                    deptNameList.add(deptMap.get(id));
+                }
+                name = String.join(",", deptNameList); // 自动处理逗号
+                record.setDeptName(name);
+                if (null != record.getCreateBy()) {
+                    record.setCreateByUser(userMap.get(record.getCreateBy().toString()));
+                }
+                if (null != record.getUpdateBy()) {
+                    record.setUpdateByUser(userMap.get(record.getUpdateBy().toString()));
+                }
+                if (null != record.getCreateDept()) {
+                    record.setCreateDeptName(deptMap.get(record.getCreateDept().toString()));
+                }
+                if (null != record.getUpdateDept()) {
+                    record.setUpdateDeptName(deptMap.get(record.getUpdateDept().toString()));
+                }
+
+            }
+        }
+        return TableDataInfo.build(result);
+    }
+
+    /**
+     * 查询符合条件的营养宣教模板列表
+     *
+     * @param bo 查询条件
+     * @return 营养宣教模板列表
+     */
+    @Override
+    public List<NutritionEducationTemplateVo> queryList(NutritionEducationTemplateBo bo) {
+        LambdaQueryWrapper<NutritionEducationTemplate> lqw = buildQueryWrapper(bo);
+        return baseMapper.selectVoList(lqw);
+    }
+
+    private LambdaQueryWrapper<NutritionEducationTemplate> buildQueryWrapper(NutritionEducationTemplateBo bo) {
+        Map<String, Object> params = bo.getParams();
+        LambdaQueryWrapper<NutritionEducationTemplate> lqw = Wrappers.lambdaQuery();
+        lqw.orderByAsc(NutritionEducationTemplate::getId);
+        lqw.eq(StringUtils.isNotBlank(bo.getDeptId()), NutritionEducationTemplate::getDeptId, bo.getDeptId());
+        lqw.like(bo.getCreateDept() != null, NutritionEducationTemplate::getCreateDept, bo.getCreateDept());
+        if (StringUtils.isNotBlank(bo.getSearchValue())) {
+            lqw.and(wrapper ->
+                wrapper.like(NutritionEducationTemplate::getTemplateName, bo.getSearchValue())
+                    .or()
+                    .like(NutritionEducationTemplate::getDescription, bo.getSearchValue())
+                    .or()
+                    .like(NutritionEducationTemplate::getCreateBy, bo.getSearchValue())
+                    .or()
+                    .like(NutritionEducationTemplate::getUpdateBy, bo.getSearchValue()));
+        }
+        return lqw;
+    }
+
+    /**
+     * 新增营养宣教模板
+     *
+     * @param bo 营养宣教模板
+     * @return 是否新增成功
+     */
+    @Override
+    public Boolean insertByBo(NutritionEducationTemplateBo bo) {
+        String deptId = null;
+        String diseaseLabel = null;
+        bo.setContent(URLDecoder.decode(new String(Base64.getDecoder().decode(bo.getContentStr()), StandardCharsets.UTF_8)));
+        if (null != bo.getDeptIdList() && bo.getDeptIdList().size() > 0) {
+            deptId = String.join(",", bo.getDeptIdList());
+        }
+        bo.setDeptId(deptId);
+        if (null != bo.getLabelList() && bo.getLabelList().size() > 0) {
+            List<String> labelIds = bo.getLabelList().stream().map(labelBo -> labelBo.getLabelId().toString()).collect(Collectors.toList());
+            diseaseLabel = String.join(",", labelIds);
+        }
+        bo.setDiseaseLabelId(diseaseLabel);
+        NutritionEducationTemplate add = MapstructUtils.convert(bo, NutritionEducationTemplate.class);
+        validEntityBeforeSave(add);
+        boolean flag = baseMapper.insert(add) > 0;
+        if (flag) {
+            bo.setId(add.getId());
+            bo.setUpdateDept(bo.getCreateDept());
+        }
+        return flag;
+    }
+
+    /**
+     * 修改营养宣教模板
+     *
+     * @param bo 营养宣教模板
+     * @return 是否修改成功
+     */
+    @Override
+    public Boolean updateByBo(NutritionEducationTemplateBo bo) {
+        String deptId = null;
+        String diseaseLabel = null;
+        if (null != bo.getDeptIdList() && bo.getDeptIdList().size() > 0) {
+            deptId = String.join(",", bo.getDeptIdList());
+        }
+        bo.setDeptId(deptId);
+        if (null != bo.getLabelList() && bo.getLabelList().size() > 0) {
+            List<String> labelIds = bo.getLabelList().stream().map(labelBo -> labelBo.getLabelId().toString()).collect(Collectors.toList());
+            diseaseLabel = String.join(",", labelIds);
+        }
+        bo.setDiseaseLabelId(diseaseLabel);
+        bo.setContent(URLDecoder.decode(new String(Base64.getDecoder().decode(bo.getContentStr()), StandardCharsets.UTF_8)));
+        NutritionEducationTemplate update = MapstructUtils.convert(bo, NutritionEducationTemplate.class);
+        validEntityBeforeSave(update);
+        return baseMapper.updateById(update) > 0;
+    }
+
+    /**
+     * 保存前的数据校验
+     */
+    private void validEntityBeforeSave(NutritionEducationTemplate entity) {
+        //TODO 做一些数据校验,如唯一约束
+    }
+
+    /**
+     * 校验并批量删除营养宣教模板信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if (isValid) {
+            //TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return baseMapper.deleteByIds(ids) > 0;
+    }
+}

+ 21 - 0
ruoyi-admin/src/main/java/org/dromara/web/service/impl/TreatmentUserServiceImpl.java

@@ -10,6 +10,9 @@ import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
 
+import org.dromara.common.redis.utils.RedisUtils;
+import org.dromara.system.config.RedisUtil;
+import org.dromara.system.domain.SysDept;
 import org.dromara.system.domain.vo.SysDeptVo;
 import org.dromara.system.mapper.SysDeptMapper;
 import org.dromara.system.service.ISysDeptService;
@@ -23,6 +26,7 @@ import org.springframework.stereotype.Service;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * 待诊患者 Service业务层处理
@@ -39,6 +43,8 @@ public class TreatmentUserServiceImpl implements ITreatmentUserService {
 
     private final ISysDeptService deptService;
 
+    private final SysDeptMapper deptMapper;
+
     /**
      * 查询【请填写功能名称】
      *
@@ -68,7 +74,14 @@ public class TreatmentUserServiceImpl implements ITreatmentUserService {
     @Override
     public TableDataInfo<TreatmentUserVo> queryPageList(TreatmentUserBo bo, PageQuery pageQuery) {
         LambdaQueryWrapper<TreatmentUser> lqw = buildQueryWrapper(bo);
+        List<SysDept> deptlList = deptMapper.selectList(Wrappers.lambdaQuery(SysDept.class).select(SysDept::getDeptId, SysDept::getDeptName));
+        Map<Long, String> deptMap = deptlList.stream().collect(Collectors.toMap(k1 -> k1.getDeptId(), k2 -> String.valueOf(k2.getDeptName()), (k1, k2) -> k1));
         List<TreatmentUserVo> result = baseMapper.selectVoList(lqw);
+        if (null != result) {
+            for (TreatmentUserVo vo : result) {
+                vo.setDeptName(deptMap.get(vo.getDoorId()));
+            }
+        }
         return TableDataInfo.build(result);
     }
 
@@ -117,6 +130,14 @@ public class TreatmentUserServiceImpl implements ITreatmentUserService {
     @Override
     public Boolean insertByBo(TreatmentUserBo bo) {
         TreatmentUser add = MapstructUtils.convert(bo, TreatmentUser.class);
+        add.setTreatNum(RedisUtil.generatePatientNumber("M"));
+        if (null != add && StringUtils.isNotBlank(add.getType())) {
+            if ("0".equals(add.getType())) {
+                add.setOutpatientNo(RedisUtil.generatePatientNumber("2"));
+            } else if ("1".equals(add.getType())) {
+                add.setOutpatientNo(RedisUtil.generatePatientNumber("1"));
+            }
+        }
         add.setBirthday(bo.getBirthday());
         add.setPhoneNum(bo.getPhoneNum());
         validEntityBeforeSave(add);

+ 7 - 0
ruoyi-admin/src/main/resources/mapper/parameter/NutritionEducationTemplateMapper.xml

@@ -0,0 +1,7 @@
+<?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="org.dromara.web.mapper.NutritionEducationTemplateMapper">
+
+</mapper>

+ 3 - 0
ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/BizConst.java

@@ -38,4 +38,7 @@ public interface BizConst {
     String FOOD_INGREDIENT_CODE_PREFIX = "SC";
 
     String DATE_PATTERN_FOR_SIMPLE_DAY = "yyMMdd";
+
+    String PATIENT_NUMBER = "patient:number";
+
 }

+ 11 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/config/RedisUtil.java

@@ -30,4 +30,15 @@ public class RedisUtil {
         }
         return BizConst.FOOD_INGREDIENT_CODE_PREFIX + today + StrUtil.padPre(String.valueOf(val), 5, "0");
     }
+
+    public static String generatePatientNumber( String prefix) {
+        String today = FastDateFormat.getInstance(BizConst.DATE_PATTERN_FOR_SIMPLE_DAY).format(new Date());
+        String key = BizConst.PATIENT_NUMBER + today;
+        Long val = redisTemplate.opsForValue().increment(key, 1);
+        if (Long.valueOf(1L).equals(val)) {
+            redisTemplate.expire(key, 24, TimeUnit.HOURS);
+        }
+        return prefix + today + StrUtil.padPre(String.valueOf(val), 6, "0");
+    }
+
 }