Browse Source

产品分类管理 营养产品管理耗材管理 待诊患者等模块代码提交

HuRongxin 3 months ago
parent
commit
1c4507da7a
25 changed files with 3166 additions and 1 deletions
  1. 106 0
      ruoyi-admin/src/main/java/org/dromara/web/controller/ProductCategoryController.java
  2. 107 0
      ruoyi-admin/src/main/java/org/dromara/web/controller/ProductNutritionController.java
  3. 105 0
      ruoyi-admin/src/main/java/org/dromara/web/controller/SuppliesCategoryController.java
  4. 52 0
      ruoyi-admin/src/main/java/org/dromara/web/domain/ProductCategory.java
  5. 579 0
      ruoyi-admin/src/main/java/org/dromara/web/domain/ProductNutrition.java
  6. 52 0
      ruoyi-admin/src/main/java/org/dromara/web/domain/SuppliesCategory.java
  7. 46 0
      ruoyi-admin/src/main/java/org/dromara/web/domain/bo/ProductCategoryBo.java
  8. 589 0
      ruoyi-admin/src/main/java/org/dromara/web/domain/bo/ProductNutritionBo.java
  9. 46 0
      ruoyi-admin/src/main/java/org/dromara/web/domain/bo/SuppliesCategoryBo.java
  10. 53 0
      ruoyi-admin/src/main/java/org/dromara/web/domain/vo/ProductCategoryVo.java
  11. 689 0
      ruoyi-admin/src/main/java/org/dromara/web/domain/vo/ProductNutritionVo.java
  12. 53 0
      ruoyi-admin/src/main/java/org/dromara/web/domain/vo/SuppliesCategoryVo.java
  13. 16 0
      ruoyi-admin/src/main/java/org/dromara/web/mapper/ProductCategoryMapper.java
  14. 16 0
      ruoyi-admin/src/main/java/org/dromara/web/mapper/ProductNutritionMapper.java
  15. 16 0
      ruoyi-admin/src/main/java/org/dromara/web/mapper/SuppliesCategoryMapper.java
  16. 69 0
      ruoyi-admin/src/main/java/org/dromara/web/service/IProductCategoryService.java
  17. 69 0
      ruoyi-admin/src/main/java/org/dromara/web/service/IProductNutritionService.java
  18. 69 0
      ruoyi-admin/src/main/java/org/dromara/web/service/ISuppliesCategoryService.java
  19. 134 0
      ruoyi-admin/src/main/java/org/dromara/web/service/impl/ProductCategoryServiceImpl.java
  20. 144 0
      ruoyi-admin/src/main/java/org/dromara/web/service/impl/ProductNutritionServiceImpl.java
  21. 134 0
      ruoyi-admin/src/main/java/org/dromara/web/service/impl/SuppliesCategoryServiceImpl.java
  22. 1 1
      ruoyi-admin/src/main/java/org/dromara/web/service/impl/TreatmentUserServiceImpl.java
  23. 7 0
      ruoyi-admin/src/main/resources/mapper/warehouse/ProductCategoryMapper.xml
  24. 7 0
      ruoyi-admin/src/main/resources/mapper/warehouse/ProductNutritionMapper.xml
  25. 7 0
      ruoyi-admin/src/main/resources/mapper/warehouse/SuppliesCategoryMapper.xml

+ 106 - 0
ruoyi-admin/src/main/java/org/dromara/web/controller/ProductCategoryController.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.common.mybatis.core.page.TableDataInfo;
+import org.dromara.web.domain.bo.ProductCategoryBo;
+import org.dromara.web.domain.vo.ProductCategoryVo;
+import org.dromara.web.service.IProductCategoryService;
+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;
+
+
+/**
+ * 产品分类
+ *
+ * @author Lion Li
+ * @date 2025-06-26
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/warehouse/productCategory")
+public class ProductCategoryController extends BaseController {
+
+    private final IProductCategoryService productCategoryService;
+
+    /**
+     * 查询产品分类列表
+     */
+    @SaCheckPermission("warehouse:productCategory:list")
+    @GetMapping("/list")
+    public TableDataInfo<ProductCategoryVo> list(ProductCategoryBo bo, PageQuery pageQuery) {
+        return productCategoryService.queryPageList(bo, pageQuery);
+    }
+
+    /**
+     * 导出产品分类列表
+     */
+    @SaCheckPermission("warehouse:productCategory:export")
+    @Log(title = "产品分类", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(ProductCategoryBo bo, HttpServletResponse response) {
+        List<ProductCategoryVo> list = productCategoryService.queryList(bo);
+        ExcelUtil.exportExcel(list, "产品分类", ProductCategoryVo.class, response);
+    }
+
+    /**
+     * 获取产品分类详细信息
+     *
+     * @param categoryId 主键
+     */
+    @SaCheckPermission("warehouse:productCategory:query")
+    @GetMapping("/{categoryId}")
+    public R<ProductCategoryVo> getInfo(@NotNull(message = "主键不能为空")
+                                     @PathVariable Long categoryId) {
+        return R.ok(productCategoryService.queryById(categoryId));
+    }
+
+    /**
+     * 新增产品分类
+     */
+    @SaCheckPermission("warehouse:productCategory:add")
+    @Log(title = "产品分类", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody ProductCategoryBo bo) {
+        return toAjax(productCategoryService.insertByBo(bo));
+    }
+
+    /**
+     * 修改产品分类
+     */
+    @SaCheckPermission("warehouse:productCategory:edit")
+    @Log(title = "产品分类", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody ProductCategoryBo bo) {
+        return toAjax(productCategoryService.updateByBo(bo));
+    }
+
+    /**
+     * 删除产品分类
+     *
+     * @param categoryIds 主键串
+     */
+    @SaCheckPermission("warehouse:productCategory:remove")
+    @Log(title = "产品分类", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{categoryIds}")
+    public R<Void> remove(@NotEmpty(message = "主键不能为空")
+                          @PathVariable Long[] categoryIds) {
+        return toAjax(productCategoryService.deleteWithValidByIds(List.of(categoryIds), true));
+    }
+}

+ 107 - 0
ruoyi-admin/src/main/java/org/dromara/web/controller/ProductNutritionController.java

@@ -0,0 +1,107 @@
+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.common.mybatis.core.page.TableDataInfo;
+import org.dromara.web.domain.bo.ProductNutritionBo;
+import org.dromara.web.domain.vo.ProductNutritionVo;
+import org.dromara.web.service.IProductNutritionService;
+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;
+
+/**
+ * 营养产品信息
+ *
+ * @author h
+ * @date 2025-06-26
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/warehouse/nutrition")
+public class ProductNutritionController extends BaseController {
+
+    private final IProductNutritionService productNutritionService;
+
+    /**
+     * 查询营养产品信息列表
+     */
+    @SaCheckPermission("warehouse:nutrition:list")
+    @GetMapping("/list")
+    public TableDataInfo<ProductNutritionVo> list(ProductNutritionBo bo, PageQuery pageQuery) {
+        return productNutritionService.queryPageList(bo, pageQuery);
+    }
+
+    /**
+     * 导出营养产品信息列表
+     */
+    @SaCheckPermission("warehouse:nutrition:export")
+    @Log(title = "营养产品信息", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(ProductNutritionBo bo, HttpServletResponse response) {
+        List<ProductNutritionVo> list = productNutritionService.queryList(bo);
+        ExcelUtil.exportExcel(list, "营养产品信息", ProductNutritionVo.class, response);
+    }
+
+    /**
+     * 获取营养产品信息详细信息
+     *
+     * @param id 主键
+     */
+    @SaCheckPermission("warehouse:nutrition:query")
+    @GetMapping("/{id}")
+    public R<ProductNutritionVo> getInfo(@NotNull(message = "主键不能为空")
+                                     @PathVariable Long id) {
+        return R.ok(productNutritionService.queryById(id));
+    }
+
+    /**
+     * 新增营养产品信息
+     */
+    @SaCheckPermission("warehouse:nutrition:add")
+    @Log(title = "营养产品信息", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody ProductNutritionBo bo) {
+        String categoryIds = String.join(",", bo.getProductCategoryList());
+        bo.setProductCategory(categoryIds);
+        return toAjax(productNutritionService.insertByBo(bo));
+    }
+
+    /**
+     * 修改营养产品信息
+     */
+    @SaCheckPermission("warehouse:nutrition:edit")
+    @Log(title = "营养产品信息", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody ProductNutritionBo bo) {
+        return toAjax(productNutritionService.updateByBo(bo));
+    }
+
+    /**
+     * 删除营养产品信息
+     *
+     * @param ids 主键串
+     */
+    @SaCheckPermission("warehouse:nutrition:remove")
+    @Log(title = "营养产品信息", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public R<Void> remove(@NotEmpty(message = "主键不能为空")
+                          @PathVariable Long[] ids) {
+        return toAjax(productNutritionService.deleteWithValidByIds(List.of(ids), true));
+    }
+}

+ 105 - 0
ruoyi-admin/src/main/java/org/dromara/web/controller/SuppliesCategoryController.java

@@ -0,0 +1,105 @@
+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.common.mybatis.core.page.TableDataInfo;
+import org.dromara.web.domain.bo.SuppliesCategoryBo;
+import org.dromara.web.domain.vo.SuppliesCategoryVo;
+import org.dromara.web.service.ISuppliesCategoryService;
+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;
+
+/**
+ * 耗材分类
+ *
+ * @author Lion Li
+ * @date 2025-06-27
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/warehouse/supplies")
+public class SuppliesCategoryController extends BaseController {
+
+    private final ISuppliesCategoryService suppliesCategoryService;
+
+    /**
+     * 查询耗材分类列表
+     */
+    @SaCheckPermission("warehouse:supplies:list")
+    @GetMapping("/list")
+    public TableDataInfo<SuppliesCategoryVo> list(SuppliesCategoryBo bo, PageQuery pageQuery) {
+        return suppliesCategoryService.queryPageList(bo, pageQuery);
+    }
+
+    /**
+     * 导出耗材分类列表
+     */
+    @SaCheckPermission("warehouse:supplies:export")
+    @Log(title = "耗材分类", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(SuppliesCategoryBo bo, HttpServletResponse response) {
+        List<SuppliesCategoryVo> list = suppliesCategoryService.queryList(bo);
+        ExcelUtil.exportExcel(list, "耗材分类", SuppliesCategoryVo.class, response);
+    }
+
+    /**
+     * 获取耗材分类详细信息
+     *
+     * @param categoryId 主键
+     */
+    @SaCheckPermission("warehouse:supplies:query")
+    @GetMapping("/{categoryId}")
+    public R<SuppliesCategoryVo> getInfo(@NotNull(message = "主键不能为空")
+                                     @PathVariable Long categoryId) {
+        return R.ok(suppliesCategoryService.queryById(categoryId));
+    }
+
+    /**
+     * 新增耗材分类
+     */
+    @SaCheckPermission("warehouse:supplies:add")
+    @Log(title = "耗材分类", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody SuppliesCategoryBo bo) {
+        return toAjax(suppliesCategoryService.insertByBo(bo));
+    }
+
+    /**
+     * 修改耗材分类
+     */
+    @SaCheckPermission("warehouse:supplies:edit")
+    @Log(title = "耗材分类", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody SuppliesCategoryBo bo) {
+        return toAjax(suppliesCategoryService.updateByBo(bo));
+    }
+
+    /**
+     * 删除耗材分类
+     *
+     * @param categoryIds 主键串
+     */
+    @SaCheckPermission("warehouse:supplies:remove")
+    @Log(title = "耗材分类", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{categoryIds}")
+    public R<Void> remove(@NotEmpty(message = "主键不能为空")
+                          @PathVariable Long[] categoryIds) {
+        return toAjax(suppliesCategoryService.deleteWithValidByIds(List.of(categoryIds), true));
+    }
+}

+ 52 - 0
ruoyi-admin/src/main/java/org/dromara/web/domain/ProductCategory.java

@@ -0,0 +1,52 @@
+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;
+
+/**
+ * 产品分类对象 product_category
+ *
+ * @author Lion Li
+ * @date 2025-06-26
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("product_category")
+public class ProductCategory extends TenantEntity {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 产品分类ID
+     */
+    @TableId(value = "category_id")
+    private Long categoryId;
+
+    /**
+     * 父产品分类id
+     */
+    private Long parentId;
+
+    /**
+     * 产品分类名称
+     */
+    private String categoryName;
+
+    /**
+     * 显示顺序
+     */
+    private Long orderNum;
+
+    /**
+     * 删除标志(0代表存在 1代表删除)
+     */
+    @TableLogic
+    private String delFlag;
+
+
+}

+ 579 - 0
ruoyi-admin/src/main/java/org/dromara/web/domain/ProductNutrition.java

@@ -0,0 +1,579 @@
+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.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.io.Serial;
+
+/**
+ * 营养产品信息对象 product_nutrition
+ *
+ * @author h
+ * @date 2025-06-26
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("product_nutrition")
+public class ProductNutrition extends TenantEntity {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id")
+    private Long id;
+
+    /**
+     * 产品名称
+     */
+    private String productName;
+
+    /**
+     * 院方系统编码
+     */
+    private String hospitalSystemCode;
+
+    /**
+     * 商品编码
+     */
+    private String productCode;
+
+    /**
+     * 产品所属分类
+     */
+    private String productCategory;
+
+    /**
+     * 生产厂商
+     */
+    private String manufacturer;
+
+    /**
+     * 品牌
+     */
+    private String brand;
+
+    /**
+     * 产品所属标签
+     */
+    private String productLabel;
+
+    /**
+     * 许可证有效期提醒
+     */
+    private String licenseExpiryReminder;
+
+    /**
+     * 商品许可证有效期至
+     */
+    private Date productLicenseExpiry;
+
+    /**
+     * 商品资质
+     */
+    private String productQualification;
+
+    /**
+     * 批准文号
+     */
+    private String approvalNumber;
+
+    /**
+     * 口味
+     */
+    private String taste;
+
+    /**
+     * 剂型/形态
+     */
+    private String dosageForm;
+
+    /**
+     * 供应商
+     */
+    private String supplier;
+
+    /**
+     * 产品适用科室
+     */
+    private String applicableDepartment;
+
+    /**
+     * 禁忌症所属标签
+     */
+    private String contraindicationLabel;
+
+    /**
+     * 保质期临期提醒
+     */
+    private String shelfLifeReminder;
+
+    /**
+     * 保质期
+     */
+    private String shelfLife;
+
+    /**
+     * 入货价格
+     */
+    private Long purchasePrice;
+
+    /**
+     * 入货单位
+     */
+    private String purchaseUnit;
+
+    /**
+     * 默认用法
+     */
+    private String defaultUsage;
+
+    /**
+     * 预包装单位
+     */
+    private String packageUnit;
+
+    /**
+     * 商品规格
+     */
+    private String productSpec;
+
+    /**
+     * 预包装销售价
+     */
+    private Long packagePrice;
+
+    /**
+     * 最小包装单位
+     */
+    private String minUnit;
+
+    /**
+     * 最小包装规格
+     */
+    private String minSpec;
+
+    /**
+     * 净含量/规格
+     */
+    private String netContent;
+
+    /**
+     * 配置销售价格
+     */
+    private Long configSalePrice;
+
+    /**
+     * 配置损耗率
+     */
+    private Long configLossRate;
+
+    /**
+     * 热量
+     */
+    private Long calorie;
+
+    /**
+     * 碳水化合物
+     */
+    private Long carbohydrate;
+
+    /**
+     * 热能
+     */
+    private Long heatEnergy;
+
+    /**
+     * 蛋白质
+     */
+    private Long protein;
+
+    /**
+     * 脂肪
+     */
+    private Long fat;
+
+    /**
+     * 钙
+     */
+    private Long ca;
+
+    /**
+     * 磷
+     */
+    private Long p;
+
+    /**
+     * 钾
+     */
+    private Long k;
+
+    /**
+     * 钠
+     */
+    private Long na;
+
+    /**
+     * 镁
+     */
+    private Long mg;
+
+    /**
+     * 氯
+     */
+    private Long cl;
+
+    /**
+     * 铁
+     */
+    private Long fe;
+
+    /**
+     * 锌
+     */
+    private Long zn;
+
+    /**
+     * 硒
+     */
+    private Long se;
+
+    /**
+     * 铜
+     */
+    private Long cu;
+
+    /**
+     * 锰
+     */
+    private Long mn;
+
+    /**
+     * 碘
+     */
+    private Long i;
+
+    /**
+     * 氟
+     */
+    private Long f;
+
+    /**
+     * 铬
+     */
+    private Long cr;
+
+    /**
+     * 钼
+     */
+    private Long mo;
+
+    /**
+     * 异亮氨酸
+     */
+    private Long isoleucine;
+
+    /**
+     * 色氨酸
+     */
+    private Long tryptophan;
+
+    /**
+     * 含硫氨基酸
+     */
+    private Long sulfurAminoAcid;
+
+    /**
+     * 组氨酸
+     */
+    private Long histidine;
+
+    /**
+     * 芳香族氨基酸
+     */
+    private Long aromaticAminoAcid;
+
+    /**
+     * 谷氨酸
+     */
+    private Long glutamicAcid;
+
+    /**
+     * 苏氨酸
+     */
+    private Long threonine;
+
+    /**
+     * 丝氨酸
+     */
+    private Long serine;
+
+    /**
+     * 精氨酸
+     */
+    private Long arginine;
+
+    /**
+     * 赖氨酸
+     */
+    private Long lysine;
+
+    /**
+     * 天冬氨酸
+     */
+    private Long asparticAcid;
+
+    /**
+     * 胱氨酸
+     */
+    private Long cysteine;
+
+    /**
+     * 脯氨酸
+     */
+    private Long proline;
+
+    /**
+     * 酪氨酸
+     */
+    private Long tyrosine;
+
+    /**
+     * 亮氨酸
+     */
+    private Long leucine;
+
+    /**
+     * 缬氨酸
+     */
+    private Long valine;
+
+    /**
+     * 蛋氨酸
+     */
+    private Long methionine;
+
+    /**
+     * 丙氨酸
+     */
+    private Long alanine;
+
+    /**
+     * 苯丙氨酸
+     */
+    private Long phenylalanine;
+
+    /**
+     * 甘氨酸
+     */
+    private Long glycine;
+
+    /**
+     * 脂肪酸
+     */
+    private Long fattyAcid;
+
+    /**
+     * 饱和脂肪酸
+     */
+    private Long saturatedFattyAcid;
+
+    /**
+     * 单不饱和脂肪酸
+     */
+    private Long monounsaturatedFattyAcid;
+
+    /**
+     * 多不饱和脂肪酸
+     */
+    private Long polyunsaturatedFattyAcid;
+
+    /**
+     * 维生素A
+     */
+    private Long vitaminA;
+
+    /**
+     * 维生素A(胡萝卜素)
+     */
+    private Long vitaminACarotene;
+
+    /**
+     * 维生素A醇
+     */
+    private Long vitaminAAlcohol;
+
+    /**
+     * 维生素D
+     */
+    private Long vitaminD;
+
+    /**
+     * 维生素E
+     */
+    private Long vitaminE;
+
+    /**
+     * 维生素E(生育酚)
+     */
+    private Long vitaminETocopherol;
+
+    /**
+     * 维生素K
+     */
+    private Long vitaminK;
+
+    /**
+     * 维生素B1
+     */
+    private Long vitaminBOne;
+
+    /**
+     * 维生素B2
+     */
+    private Long vitaminBTwo;
+
+    /**
+     * 维生素B6
+     */
+    private Long vitaminBSix;
+
+    /**
+     * 维生素B12
+     */
+    private Long vitaminBTwelve;
+
+    /**
+     * 烟酸(尼克酸)
+     */
+    private Long niacin;
+
+    /**
+     * 维生素C
+     */
+    private Long vitaminC;
+
+    /**
+     * 叶酸
+     */
+    private Long folicAcid;
+
+    /**
+     * 胆碱
+     */
+    private Long choline;
+
+    /**
+     * 生物素
+     */
+    private Long biotin;
+
+    /**
+     * 泛酸
+     */
+    private Long pantothenicAcid;
+
+    /**
+     * 胆固醇
+     */
+    private Long cholesterol;
+
+    /**
+     * 血糖生成指数
+     */
+    private Long bloodGlucoseIndex;
+
+    /**
+     * 不可溶性膳食纤维
+     */
+    private Long insolubleDietaryFiber;
+
+    /**
+     * 膳食纤维
+     */
+    private Long dietaryFiber;
+
+    /**
+     * 灰分
+     */
+    private Long ash;
+
+    /**
+     * 可溶性膳食纤维
+     */
+    private Long solubleDietaryFiber;
+
+    /**
+     * 适用人群
+     */
+    private String applicableCrowd;
+
+    /**
+     * 不适用人群
+     */
+    private String unsuitableCrowd;
+
+    /**
+     * 渗透压
+     */
+    private Long osmoticPressure;
+
+    /**
+     * 原料
+     */
+    private String rawMaterial;
+
+    /**
+     * 适应症及禁忌
+     */
+    private String indicationsContraindications;
+
+    /**
+     * 食用方法和食用量
+     */
+    private String usageAndDosage;
+
+    /**
+     * 产品特点
+     */
+    private String productFeatures;
+
+    /**
+     * 储存条件
+     */
+    private String storageConditions;
+
+    /**
+     * 警示说明及注意事项
+     */
+    private String warningInstructions;
+
+    /**
+     * 商品附件
+     */
+    private String productAttachments;
+
+    /**
+     * 状态(1:启用 0:禁用)
+     */
+    private Long status;
+
+    /**
+     * 删除标志(0代表存在 1代表删除)
+     */
+    @TableLogic
+    private String delFlag;
+
+    /**
+     * 上架
+     */
+    private String putFlag;
+
+
+}

+ 52 - 0
ruoyi-admin/src/main/java/org/dromara/web/domain/SuppliesCategory.java

@@ -0,0 +1,52 @@
+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;
+
+/**
+ * 耗材分类对象 supplies_category
+ *
+ * @author Lion Li
+ * @date 2025-06-27
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("supplies_category")
+public class SuppliesCategory extends TenantEntity {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 耗材分类ID
+     */
+    @TableId(value = "category_id")
+    private Long categoryId;
+
+    /**
+     * 父耗材分类id
+     */
+    private Long parentId;
+
+    /**
+     * 耗材分类名称
+     */
+    private String categoryName;
+
+    /**
+     * 显示顺序
+     */
+    private Long orderNum;
+
+    /**
+     * 删除标志(0代表存在 1代表删除)
+     */
+    @TableLogic
+    private String delFlag;
+
+
+}

+ 46 - 0
ruoyi-admin/src/main/java/org/dromara/web/domain/bo/ProductCategoryBo.java

@@ -0,0 +1,46 @@
+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.web.domain.ProductCategory;
+
+/**
+ * 产品分类业务对象 product_category
+ *
+ * @author Lion Li
+ * @date 2025-06-26
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = ProductCategory.class, reverseConvertGenerate = false)
+public class ProductCategoryBo extends BaseEntity {
+
+    /**
+     * 产品分类ID
+     */
+    @NotNull(message = "产品分类ID不能为空", groups = { EditGroup.class })
+    private Long categoryId;
+
+    /**
+     * 父产品分类id
+     */
+    private Long parentId;
+
+    /**
+     * 产品分类名称
+     */
+    @NotBlank(message = "产品分类名称不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String categoryName;
+
+    /**
+     * 显示顺序
+     */
+    private Long orderNum;
+
+
+}

+ 589 - 0
ruoyi-admin/src/main/java/org/dromara/web/domain/bo/ProductNutritionBo.java

@@ -0,0 +1,589 @@
+package org.dromara.web.domain.bo;
+
+import io.github.linpeilie.annotations.AutoMapper;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.web.domain.ProductNutrition;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 营养产品信息业务对象 product_nutrition
+ *
+ * @author h
+ * @date 2025-06-26
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = ProductNutrition.class, reverseConvertGenerate = false)
+public class ProductNutritionBo extends BaseEntity {
+
+    /**
+     * 主键ID
+     */
+    @NotNull(message = "主键ID不能为空", groups = { EditGroup.class })
+    private Long id;
+
+    /**
+     * 产品名称
+     */
+    @NotBlank(message = "产品名称不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String productName;
+
+    /**
+     * 院方系统编码
+     */
+    @NotBlank(message = "院方系统编码不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String hospitalSystemCode;
+
+    /**
+     * 商品编码
+     */
+    @NotBlank(message = "商品编码不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String productCode;
+
+    /**
+     * 产品所属分类
+     */
+//    @NotBlank(message = "产品所属分类不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String productCategory;
+
+    private List<String> productCategoryList;
+
+    /**
+     * 生产厂商
+     */
+    private String manufacturer;
+
+    /**
+     * 品牌
+     */
+    private String brand;
+
+    /**
+     * 产品所属标签
+     */
+    private String productLabel;
+
+    /**
+     * 许可证有效期提醒
+     */
+    private String licenseExpiryReminder;
+
+    /**
+     * 商品许可证有效期至
+     */
+    private Date productLicenseExpiry;
+
+    /**
+     * 商品资质
+     */
+    @NotBlank(message = "商品资质不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String productQualification;
+
+    /**
+     * 批准文号
+     */
+    private String approvalNumber;
+
+    /**
+     * 口味
+     */
+    private String taste;
+
+    /**
+     * 剂型/形态
+     */
+    private String dosageForm;
+
+    /**
+     * 供应商
+     */
+    private String supplier;
+
+    /**
+     * 产品适用科室
+     */
+    private String applicableDepartment;
+
+    /**
+     * 禁忌症所属标签
+     */
+    private String contraindicationLabel;
+
+    /**
+     * 保质期临期提醒
+     */
+    @NotBlank(message = "保质期临期提醒不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String shelfLifeReminder;
+
+    /**
+     * 保质期
+     */
+    @NotBlank(message = "保质期不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String shelfLife;
+
+    /**
+     * 入货价格
+     */
+    @NotNull(message = "入货价格不能为空", groups = { AddGroup.class, EditGroup.class })
+    private Long purchasePrice;
+
+    /**
+     * 入货单位
+     */
+    @NotBlank(message = "入货单位不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String purchaseUnit;
+
+    /**
+     * 默认用法
+     */
+    private String defaultUsage;
+
+    /**
+     * 预包装单位
+     */
+    @NotBlank(message = "预包装单位不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String packageUnit;
+
+    /**
+     * 商品规格
+     */
+    @NotBlank(message = "商品规格不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String productSpec;
+
+    /**
+     * 预包装销售价
+     */
+    @NotNull(message = "预包装销售价不能为空", groups = { AddGroup.class, EditGroup.class })
+    private Long packagePrice;
+
+    /**
+     * 最小包装单位
+     */
+    private String minUnit;
+
+    /**
+     * 最小包装规格
+     */
+    private String minSpec;
+
+    /**
+     * 净含量/规格
+     */
+    private String netContent;
+
+    /**
+     * 配置销售价格
+     */
+    @NotNull(message = "配置销售价格不能为空", groups = { AddGroup.class, EditGroup.class })
+    private Long configSalePrice;
+
+    /**
+     * 配置损耗率
+     */
+    private Long configLossRate;
+
+    /**
+     * 热量
+     */
+    private Long calorie;
+
+    /**
+     * 碳水化合物
+     */
+    private Long carbohydrate;
+
+    /**
+     * 热能
+     */
+    private Long heatEnergy;
+
+    /**
+     * 蛋白质
+     */
+    private Long protein;
+
+    /**
+     * 脂肪
+     */
+    private Long fat;
+
+    /**
+     * 钙
+     */
+    private Long ca;
+
+    /**
+     * 磷
+     */
+    private Long p;
+
+    /**
+     * 钾
+     */
+    private Long k;
+
+    /**
+     * 钠
+     */
+    private Long na;
+
+    /**
+     * 镁
+     */
+    private Long mg;
+
+    /**
+     * 氯
+     */
+    private Long cl;
+
+    /**
+     * 铁
+     */
+    private Long fe;
+
+    /**
+     * 锌
+     */
+    private Long zn;
+
+    /**
+     * 硒
+     */
+    private Long se;
+
+    /**
+     * 铜
+     */
+    private Long cu;
+
+    /**
+     * 锰
+     */
+    private Long mn;
+
+    /**
+     * 碘
+     */
+    private Long i;
+
+    /**
+     * 氟
+     */
+    private Long f;
+
+    /**
+     * 铬
+     */
+    private Long cr;
+
+    /**
+     * 钼
+     */
+    private Long mo;
+
+    /**
+     * 异亮氨酸
+     */
+    private Long isoleucine;
+
+    /**
+     * 色氨酸
+     */
+    private Long tryptophan;
+
+    /**
+     * 含硫氨基酸
+     */
+    private Long sulfurAminoAcid;
+
+    /**
+     * 组氨酸
+     */
+    private Long histidine;
+
+    /**
+     * 芳香族氨基酸
+     */
+    private Long aromaticAminoAcid;
+
+    /**
+     * 谷氨酸
+     */
+    private Long glutamicAcid;
+
+    /**
+     * 苏氨酸
+     */
+    private Long threonine;
+
+    /**
+     * 丝氨酸
+     */
+    private Long serine;
+
+    /**
+     * 精氨酸
+     */
+    private Long arginine;
+
+    /**
+     * 赖氨酸
+     */
+    private Long lysine;
+
+    /**
+     * 天冬氨酸
+     */
+    private Long asparticAcid;
+
+    /**
+     * 胱氨酸
+     */
+    private Long cysteine;
+
+    /**
+     * 脯氨酸
+     */
+    private Long proline;
+
+    /**
+     * 酪氨酸
+     */
+    private Long tyrosine;
+
+    /**
+     * 亮氨酸
+     */
+    private Long leucine;
+
+    /**
+     * 缬氨酸
+     */
+    private Long valine;
+
+    /**
+     * 蛋氨酸
+     */
+    private Long methionine;
+
+    /**
+     * 丙氨酸
+     */
+    private Long alanine;
+
+    /**
+     * 苯丙氨酸
+     */
+    private Long phenylalanine;
+
+    /**
+     * 甘氨酸
+     */
+    private Long glycine;
+
+    /**
+     * 脂肪酸
+     */
+    private Long fattyAcid;
+
+    /**
+     * 饱和脂肪酸
+     */
+    private Long saturatedFattyAcid;
+
+    /**
+     * 单不饱和脂肪酸
+     */
+    private Long monounsaturatedFattyAcid;
+
+    /**
+     * 多不饱和脂肪酸
+     */
+    private Long polyunsaturatedFattyAcid;
+
+    /**
+     * 维生素A
+     */
+    private Long vitaminA;
+
+    /**
+     * 维生素A(胡萝卜素)
+     */
+    private Long vitaminACarotene;
+
+    /**
+     * 维生素A醇
+     */
+    private Long vitaminAAlcohol;
+
+    /**
+     * 维生素D
+     */
+    private Long vitaminD;
+
+    /**
+     * 维生素E
+     */
+    private Long vitaminE;
+
+    /**
+     * 维生素E(生育酚)
+     */
+    private Long vitaminETocopherol;
+
+    /**
+     * 维生素K
+     */
+    private Long vitaminK;
+
+    /**
+     * 维生素B1
+     */
+    private Long vitaminBOne;
+
+    /**
+     * 维生素B2
+     */
+    private Long vitaminBTwo;
+
+    /**
+     * 维生素B6
+     */
+    private Long vitaminBSix;
+
+    /**
+     * 维生素B12
+     */
+    private Long vitaminBTwelve;
+
+    /**
+     * 烟酸(尼克酸)
+     */
+    private Long niacin;
+
+    /**
+     * 维生素C
+     */
+    private Long vitaminC;
+
+    /**
+     * 叶酸
+     */
+    private Long folicAcid;
+
+    /**
+     * 胆碱
+     */
+    private Long choline;
+
+    /**
+     * 生物素
+     */
+    private Long biotin;
+
+    /**
+     * 泛酸
+     */
+    private Long pantothenicAcid;
+
+    /**
+     * 胆固醇
+     */
+    private Long cholesterol;
+
+    /**
+     * 血糖生成指数
+     */
+    private Long bloodGlucoseIndex;
+
+    /**
+     * 不可溶性膳食纤维
+     */
+    private Long insolubleDietaryFiber;
+
+    /**
+     * 膳食纤维
+     */
+    private Long dietaryFiber;
+
+    /**
+     * 灰分
+     */
+    private Long ash;
+
+    /**
+     * 可溶性膳食纤维
+     */
+    private Long solubleDietaryFiber;
+
+    /**
+     * 适用人群
+     */
+    private String applicableCrowd;
+
+    /**
+     * 不适用人群
+     */
+    private String unsuitableCrowd;
+
+    /**
+     * 渗透压
+     */
+    private Long osmoticPressure;
+
+    /**
+     * 原料
+     */
+    private String rawMaterial;
+
+    /**
+     * 适应症及禁忌
+     */
+    private String indicationsContraindications;
+
+    /**
+     * 食用方法和食用量
+     */
+    private String usageAndDosage;
+
+    /**
+     * 产品特点
+     */
+    private String productFeatures;
+
+    /**
+     * 储存条件
+     */
+    private String storageConditions;
+
+    /**
+     * 警示说明及注意事项
+     */
+    private String warningInstructions;
+
+    /**
+     * 商品附件
+     */
+    private String productAttachments;
+
+    /**
+     * 状态(1:启用 0:禁用)
+     */
+    private Long status;
+
+    /**
+     * 上架
+     */
+    private String putFlag;
+
+
+}

+ 46 - 0
ruoyi-admin/src/main/java/org/dromara/web/domain/bo/SuppliesCategoryBo.java

@@ -0,0 +1,46 @@
+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.web.domain.SuppliesCategory;
+
+/**
+ * 耗材分类业务对象 supplies_category
+ *
+ * @author Lion Li
+ * @date 2025-06-27
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = SuppliesCategory.class, reverseConvertGenerate = false)
+public class SuppliesCategoryBo extends BaseEntity {
+
+    /**
+     * 耗材分类ID
+     */
+    @NotNull(message = "耗材分类ID不能为空", groups = { EditGroup.class })
+    private Long categoryId;
+
+    /**
+     * 父耗材分类id
+     */
+    private Long parentId;
+
+    /**
+     * 耗材分类名称
+     */
+    @NotBlank(message = "耗材分类名称不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String categoryName;
+
+    /**
+     * 显示顺序
+     */
+    private Long orderNum;
+
+
+}

+ 53 - 0
ruoyi-admin/src/main/java/org/dromara/web/domain/vo/ProductCategoryVo.java

@@ -0,0 +1,53 @@
+package org.dromara.web.domain.vo;
+
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import cn.idev.excel.annotation.ExcelProperty;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import org.dromara.web.domain.ProductCategory;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+
+
+/**
+ * 产品分类视图对象 product_category
+ *
+ * @author Lion Li
+ * @date 2025-06-26
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = ProductCategory.class)
+public class ProductCategoryVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 产品分类ID
+     */
+    @ExcelProperty(value = "产品分类ID")
+    private Long categoryId;
+
+    /**
+     * 父产品分类id
+     */
+    @ExcelProperty(value = "父产品分类id")
+    private Long parentId;
+
+    /**
+     * 产品分类名称
+     */
+    @ExcelProperty(value = "产品分类名称")
+    private String categoryName;
+
+    /**
+     * 显示顺序
+     */
+    @ExcelProperty(value = "显示顺序")
+    private Long orderNum;
+
+
+}

+ 689 - 0
ruoyi-admin/src/main/java/org/dromara/web/domain/vo/ProductNutritionVo.java

@@ -0,0 +1,689 @@
+package org.dromara.web.domain.vo;
+
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import cn.idev.excel.annotation.ExcelProperty;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import org.dromara.web.domain.ProductNutrition;
+
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 营养产品信息视图对象 product_nutrition
+ *
+ * @author h
+ * @date 2025-06-26
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = ProductNutrition.class)
+public class ProductNutritionVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @ExcelProperty(value = "主键ID")
+    private Long id;
+
+    /**
+     * 产品名称
+     */
+    @ExcelProperty(value = "产品名称")
+    private String productName;
+
+    /**
+     * 院方系统编码
+     */
+    @ExcelProperty(value = "院方系统编码")
+    private String hospitalSystemCode;
+
+    /**
+     * 商品编码
+     */
+    @ExcelProperty(value = "商品编码")
+    private String productCode;
+
+    /**
+     * 产品所属分类
+     */
+    @ExcelProperty(value = "产品所属分类")
+    private String productCategory;
+
+    /**
+     * 生产厂商
+     */
+    @ExcelProperty(value = "生产厂商")
+    private String manufacturer;
+
+    /**
+     * 品牌
+     */
+    @ExcelProperty(value = "品牌")
+    private String brand;
+
+    /**
+     * 产品所属标签
+     */
+    @ExcelProperty(value = "产品所属标签")
+    private String productLabel;
+
+    /**
+     * 许可证有效期提醒
+     */
+    @ExcelProperty(value = "许可证有效期提醒")
+    private String licenseExpiryReminder;
+
+    /**
+     * 商品许可证有效期至
+     */
+    @ExcelProperty(value = "商品许可证有效期至")
+    private Date productLicenseExpiry;
+
+    /**
+     * 商品资质
+     */
+    @ExcelProperty(value = "商品资质")
+    private String productQualification;
+
+    /**
+     * 批准文号
+     */
+    @ExcelProperty(value = "批准文号")
+    private String approvalNumber;
+
+    /**
+     * 口味
+     */
+    @ExcelProperty(value = "口味")
+    private String taste;
+
+    /**
+     * 剂型/形态
+     */
+    @ExcelProperty(value = "剂型/形态")
+    private String dosageForm;
+
+    /**
+     * 供应商
+     */
+    @ExcelProperty(value = "供应商")
+    private String supplier;
+
+    /**
+     * 产品适用科室
+     */
+    @ExcelProperty(value = "产品适用科室")
+    private String applicableDepartment;
+
+    /**
+     * 禁忌症所属标签
+     */
+    @ExcelProperty(value = "禁忌症所属标签")
+    private String contraindicationLabel;
+
+    /**
+     * 保质期临期提醒
+     */
+    @ExcelProperty(value = "保质期临期提醒")
+    private String shelfLifeReminder;
+
+    /**
+     * 保质期
+     */
+    @ExcelProperty(value = "保质期")
+    private String shelfLife;
+
+    /**
+     * 入货价格
+     */
+    @ExcelProperty(value = "入货价格")
+    private Long purchasePrice;
+
+    /**
+     * 入货单位
+     */
+    @ExcelProperty(value = "入货单位")
+    private String purchaseUnit;
+
+    /**
+     * 默认用法
+     */
+    @ExcelProperty(value = "默认用法")
+    private String defaultUsage;
+
+    /**
+     * 预包装单位
+     */
+    @ExcelProperty(value = "预包装单位")
+    private String packageUnit;
+
+    /**
+     * 商品规格
+     */
+    @ExcelProperty(value = "商品规格")
+    private String productSpec;
+
+    /**
+     * 预包装销售价
+     */
+    @ExcelProperty(value = "预包装销售价")
+    private Long packagePrice;
+
+    /**
+     * 最小包装单位
+     */
+    @ExcelProperty(value = "最小包装单位")
+    private String minUnit;
+
+    /**
+     * 最小包装规格
+     */
+    @ExcelProperty(value = "最小包装规格")
+    private String minSpec;
+
+    /**
+     * 净含量/规格
+     */
+    @ExcelProperty(value = "净含量/规格")
+    private String netContent;
+
+    /**
+     * 配置销售价格
+     */
+    @ExcelProperty(value = "配置销售价格")
+    private Long configSalePrice;
+
+    /**
+     * 配置损耗率
+     */
+    @ExcelProperty(value = "配置损耗率")
+    private Long configLossRate;
+
+    /**
+     * 热量
+     */
+    @ExcelProperty(value = "热量")
+    private Long calorie;
+
+    /**
+     * 碳水化合物
+     */
+    @ExcelProperty(value = "碳水化合物")
+    private Long carbohydrate;
+
+    /**
+     * 热能
+     */
+    @ExcelProperty(value = "热能")
+    private Long heatEnergy;
+
+    /**
+     * 蛋白质
+     */
+    @ExcelProperty(value = "蛋白质")
+    private Long protein;
+
+    /**
+     * 脂肪
+     */
+    @ExcelProperty(value = "脂肪")
+    private Long fat;
+
+    /**
+     * 钙
+     */
+    @ExcelProperty(value = "钙")
+    private Long ca;
+
+    /**
+     * 磷
+     */
+    @ExcelProperty(value = "磷")
+    private Long p;
+
+    /**
+     * 钾
+     */
+    @ExcelProperty(value = "钾")
+    private Long k;
+
+    /**
+     * 钠
+     */
+    @ExcelProperty(value = "钠")
+    private Long na;
+
+    /**
+     * 镁
+     */
+    @ExcelProperty(value = "镁")
+    private Long mg;
+
+    /**
+     * 氯
+     */
+    @ExcelProperty(value = "氯")
+    private Long cl;
+
+    /**
+     * 铁
+     */
+    @ExcelProperty(value = "铁")
+    private Long fe;
+
+    /**
+     * 锌
+     */
+    @ExcelProperty(value = "锌")
+    private Long zn;
+
+    /**
+     * 硒
+     */
+    @ExcelProperty(value = "硒")
+    private Long se;
+
+    /**
+     * 铜
+     */
+    @ExcelProperty(value = "铜")
+    private Long cu;
+
+    /**
+     * 锰
+     */
+    @ExcelProperty(value = "锰")
+    private Long mn;
+
+    /**
+     * 碘
+     */
+    @ExcelProperty(value = "碘")
+    private Long i;
+
+    /**
+     * 氟
+     */
+    @ExcelProperty(value = "氟")
+    private Long f;
+
+    /**
+     * 铬
+     */
+    @ExcelProperty(value = "铬")
+    private Long cr;
+
+    /**
+     * 钼
+     */
+    @ExcelProperty(value = "钼")
+    private Long mo;
+
+    /**
+     * 异亮氨酸
+     */
+    @ExcelProperty(value = "异亮氨酸")
+    private Long isoleucine;
+
+    /**
+     * 色氨酸
+     */
+    @ExcelProperty(value = "色氨酸")
+    private Long tryptophan;
+
+    /**
+     * 含硫氨基酸
+     */
+    @ExcelProperty(value = "含硫氨基酸")
+    private Long sulfurAminoAcid;
+
+    /**
+     * 组氨酸
+     */
+    @ExcelProperty(value = "组氨酸")
+    private Long histidine;
+
+    /**
+     * 芳香族氨基酸
+     */
+    @ExcelProperty(value = "芳香族氨基酸")
+    private Long aromaticAminoAcid;
+
+    /**
+     * 谷氨酸
+     */
+    @ExcelProperty(value = "谷氨酸")
+    private Long glutamicAcid;
+
+    /**
+     * 苏氨酸
+     */
+    @ExcelProperty(value = "苏氨酸")
+    private Long threonine;
+
+    /**
+     * 丝氨酸
+     */
+    @ExcelProperty(value = "丝氨酸")
+    private Long serine;
+
+    /**
+     * 精氨酸
+     */
+    @ExcelProperty(value = "精氨酸")
+    private Long arginine;
+
+    /**
+     * 赖氨酸
+     */
+    @ExcelProperty(value = "赖氨酸")
+    private Long lysine;
+
+    /**
+     * 天冬氨酸
+     */
+    @ExcelProperty(value = "天冬氨酸")
+    private Long asparticAcid;
+
+    /**
+     * 胱氨酸
+     */
+    @ExcelProperty(value = "胱氨酸")
+    private Long cysteine;
+
+    /**
+     * 脯氨酸
+     */
+    @ExcelProperty(value = "脯氨酸")
+    private Long proline;
+
+    /**
+     * 酪氨酸
+     */
+    @ExcelProperty(value = "酪氨酸")
+    private Long tyrosine;
+
+    /**
+     * 亮氨酸
+     */
+    @ExcelProperty(value = "亮氨酸")
+    private Long leucine;
+
+    /**
+     * 缬氨酸
+     */
+    @ExcelProperty(value = "缬氨酸")
+    private Long valine;
+
+    /**
+     * 蛋氨酸
+     */
+    @ExcelProperty(value = "蛋氨酸")
+    private Long methionine;
+
+    /**
+     * 丙氨酸
+     */
+    @ExcelProperty(value = "丙氨酸")
+    private Long alanine;
+
+    /**
+     * 苯丙氨酸
+     */
+    @ExcelProperty(value = "苯丙氨酸")
+    private Long phenylalanine;
+
+    /**
+     * 甘氨酸
+     */
+    @ExcelProperty(value = "甘氨酸")
+    private Long glycine;
+
+    /**
+     * 脂肪酸
+     */
+    @ExcelProperty(value = "脂肪酸")
+    private Long fattyAcid;
+
+    /**
+     * 饱和脂肪酸
+     */
+    @ExcelProperty(value = "饱和脂肪酸")
+    private Long saturatedFattyAcid;
+
+    /**
+     * 单不饱和脂肪酸
+     */
+    @ExcelProperty(value = "单不饱和脂肪酸")
+    private Long monounsaturatedFattyAcid;
+
+    /**
+     * 多不饱和脂肪酸
+     */
+    @ExcelProperty(value = "多不饱和脂肪酸")
+    private Long polyunsaturatedFattyAcid;
+
+    /**
+     * 维生素A
+     */
+    @ExcelProperty(value = "维生素A")
+    private Long vitaminA;
+
+    /**
+     * 维生素A(胡萝卜素)
+     */
+    @ExcelProperty(value = "维生素A(胡萝卜素)")
+    private Long vitaminACarotene;
+
+    /**
+     * 维生素A醇
+     */
+    @ExcelProperty(value = "维生素A醇")
+    private Long vitaminAAlcohol;
+
+    /**
+     * 维生素D
+     */
+    @ExcelProperty(value = "维生素D")
+    private Long vitaminD;
+
+    /**
+     * 维生素E
+     */
+    @ExcelProperty(value = "维生素E")
+    private Long vitaminE;
+
+    /**
+     * 维生素E(生育酚)
+     */
+    @ExcelProperty(value = "维生素E", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "生=育酚")
+    private Long vitaminETocopherol;
+
+    /**
+     * 维生素K
+     */
+    @ExcelProperty(value = "维生素K")
+    private Long vitaminK;
+
+    /**
+     * 维生素B1
+     */
+    @ExcelProperty(value = "维生素B1")
+    private Long vitaminBOne;
+
+    /**
+     * 维生素B2
+     */
+    @ExcelProperty(value = "维生素B2")
+    private Long vitaminBTwo;
+
+    /**
+     * 维生素B6
+     */
+    @ExcelProperty(value = "维生素B6")
+    private Long vitaminBSix;
+
+    /**
+     * 维生素B12
+     */
+    @ExcelProperty(value = "维生素B12")
+    private Long vitaminBTwelve;
+
+    /**
+     * 烟酸(尼克酸)
+     */
+    @ExcelProperty(value = "烟酸", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "尼=克酸")
+    private Long niacin;
+
+    /**
+     * 维生素C
+     */
+    @ExcelProperty(value = "维生素C")
+    private Long vitaminC;
+
+    /**
+     * 叶酸
+     */
+    @ExcelProperty(value = "叶酸")
+    private Long folicAcid;
+
+    /**
+     * 胆碱
+     */
+    @ExcelProperty(value = "胆碱")
+    private Long choline;
+
+    /**
+     * 生物素
+     */
+    @ExcelProperty(value = "生物素")
+    private Long biotin;
+
+    /**
+     * 泛酸
+     */
+    @ExcelProperty(value = "泛酸")
+    private Long pantothenicAcid;
+
+    /**
+     * 胆固醇
+     */
+    @ExcelProperty(value = "胆固醇")
+    private Long cholesterol;
+
+    /**
+     * 血糖生成指数
+     */
+    @ExcelProperty(value = "血糖生成指数")
+    private Long bloodGlucoseIndex;
+
+    /**
+     * 不可溶性膳食纤维
+     */
+    @ExcelProperty(value = "不可溶性膳食纤维")
+    private Long insolubleDietaryFiber;
+
+    /**
+     * 膳食纤维
+     */
+    @ExcelProperty(value = "膳食纤维")
+    private Long dietaryFiber;
+
+    /**
+     * 灰分
+     */
+    @ExcelProperty(value = "灰分")
+    private Long ash;
+
+    /**
+     * 可溶性膳食纤维
+     */
+    @ExcelProperty(value = "可溶性膳食纤维")
+    private Long solubleDietaryFiber;
+
+    /**
+     * 适用人群
+     */
+    @ExcelProperty(value = "适用人群")
+    private String applicableCrowd;
+
+    /**
+     * 不适用人群
+     */
+    @ExcelProperty(value = "不适用人群")
+    private String unsuitableCrowd;
+
+    /**
+     * 渗透压
+     */
+    @ExcelProperty(value = "渗透压")
+    private Long osmoticPressure;
+
+    /**
+     * 原料
+     */
+    @ExcelProperty(value = "原料")
+    private String rawMaterial;
+
+    /**
+     * 适应症及禁忌
+     */
+    @ExcelProperty(value = "适应症及禁忌")
+    private String indicationsContraindications;
+
+    /**
+     * 食用方法和食用量
+     */
+    @ExcelProperty(value = "食用方法和食用量")
+    private String usageAndDosage;
+
+    /**
+     * 产品特点
+     */
+    @ExcelProperty(value = "产品特点")
+    private String productFeatures;
+
+    /**
+     * 储存条件
+     */
+    @ExcelProperty(value = "储存条件")
+    private String storageConditions;
+
+    /**
+     * 警示说明及注意事项
+     */
+    @ExcelProperty(value = "警示说明及注意事项")
+    private String warningInstructions;
+
+    /**
+     * 商品附件
+     */
+    @ExcelProperty(value = "商品附件")
+    private String productAttachments;
+
+    /**
+     * 状态(1:启用 0:禁用)
+     */
+    @ExcelProperty(value = "状态(1:启用 0:禁用)")
+    private Long status;
+
+    /**
+     * 上架
+     */
+    @ExcelProperty(value = "上架 ")
+    private String putFlag;
+
+
+}

+ 53 - 0
ruoyi-admin/src/main/java/org/dromara/web/domain/vo/SuppliesCategoryVo.java

@@ -0,0 +1,53 @@
+package org.dromara.web.domain.vo;
+
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import cn.idev.excel.annotation.ExcelProperty;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import org.dromara.web.domain.SuppliesCategory;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+
+
+/**
+ * 耗材分类视图对象 supplies_category
+ *
+ * @author Lion Li
+ * @date 2025-06-27
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = SuppliesCategory.class)
+public class SuppliesCategoryVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 耗材分类ID
+     */
+    @ExcelProperty(value = "耗材分类ID")
+    private Long categoryId;
+
+    /**
+     * 父耗材分类id
+     */
+    @ExcelProperty(value = "父耗材分类id")
+    private Long parentId;
+
+    /**
+     * 耗材分类名称
+     */
+    @ExcelProperty(value = "耗材分类名称")
+    private String categoryName;
+
+    /**
+     * 显示顺序
+     */
+    @ExcelProperty(value = "显示顺序")
+    private Long orderNum;
+
+
+}

+ 16 - 0
ruoyi-admin/src/main/java/org/dromara/web/mapper/ProductCategoryMapper.java

@@ -0,0 +1,16 @@
+package org.dromara.web.mapper;
+
+
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+import org.dromara.web.domain.ProductCategory;
+import org.dromara.web.domain.vo.ProductCategoryVo;
+
+/**
+ * 产品分类Mapper接口
+ *
+ * @author Lion Li
+ * @date 2025-06-26
+ */
+public interface ProductCategoryMapper extends BaseMapperPlus<ProductCategory, ProductCategoryVo> {
+
+}

+ 16 - 0
ruoyi-admin/src/main/java/org/dromara/web/mapper/ProductNutritionMapper.java

@@ -0,0 +1,16 @@
+package org.dromara.web.mapper;
+
+
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+import org.dromara.web.domain.ProductNutrition;
+import org.dromara.web.domain.vo.ProductNutritionVo;
+
+/**
+ * 营养产品信息Mapper接口
+ *
+ * @author h
+ * @date 2025-06-26
+ */
+public interface ProductNutritionMapper extends BaseMapperPlus<ProductNutrition, ProductNutritionVo> {
+
+}

+ 16 - 0
ruoyi-admin/src/main/java/org/dromara/web/mapper/SuppliesCategoryMapper.java

@@ -0,0 +1,16 @@
+package org.dromara.web.mapper;
+
+
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+import org.dromara.web.domain.SuppliesCategory;
+import org.dromara.web.domain.vo.SuppliesCategoryVo;
+
+/**
+ * 耗材分类Mapper接口
+ *
+ * @author Lion Li
+ * @date 2025-06-27
+ */
+public interface SuppliesCategoryMapper extends BaseMapperPlus<SuppliesCategory, SuppliesCategoryVo> {
+
+}

+ 69 - 0
ruoyi-admin/src/main/java/org/dromara/web/service/IProductCategoryService.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.ProductCategoryBo;
+import org.dromara.web.domain.vo.ProductCategoryVo;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 产品分类Service接口
+ *
+ * @author Lion Li
+ * @date 2025-06-26
+ */
+public interface IProductCategoryService {
+
+    /**
+     * 查询产品分类
+     *
+     * @param categoryId 主键
+     * @return 产品分类
+     */
+    ProductCategoryVo queryById(Long categoryId);
+
+    /**
+     * 分页查询产品分类列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 产品分类分页列表
+     */
+    TableDataInfo<ProductCategoryVo> queryPageList(ProductCategoryBo bo, PageQuery pageQuery);
+
+    /**
+     * 查询符合条件的产品分类列表
+     *
+     * @param bo 查询条件
+     * @return 产品分类列表
+     */
+    List<ProductCategoryVo> queryList(ProductCategoryBo bo);
+
+    /**
+     * 新增产品分类
+     *
+     * @param bo 产品分类
+     * @return 是否新增成功
+     */
+    Boolean insertByBo(ProductCategoryBo bo);
+
+    /**
+     * 修改产品分类
+     *
+     * @param bo 产品分类
+     * @return 是否修改成功
+     */
+    Boolean updateByBo(ProductCategoryBo bo);
+
+    /**
+     * 校验并批量删除产品分类信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+}

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

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

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

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

+ 134 - 0
ruoyi-admin/src/main/java/org/dromara/web/service/impl/ProductCategoryServiceImpl.java

@@ -0,0 +1,134 @@
+package org.dromara.web.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.dromara.common.core.utils.MapstructUtils;
+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.web.domain.ProductCategory;
+import org.dromara.web.domain.bo.ProductCategoryBo;
+import org.dromara.web.domain.vo.ProductCategoryVo;
+import org.dromara.web.mapper.ProductCategoryMapper;
+import org.dromara.web.service.IProductCategoryService;
+import org.springframework.stereotype.Service;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 产品分类Service业务层处理
+ *
+ * @author hrx
+ * @date 2025-06-26
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class ProductCategoryServiceImpl implements IProductCategoryService {
+
+    private final ProductCategoryMapper baseMapper;
+
+    /**
+     * 查询产品分类
+     *
+     * @param categoryId 主键
+     * @return 产品分类
+     */
+    @Override
+    public ProductCategoryVo queryById(Long categoryId){
+        return baseMapper.selectVoById(categoryId);
+    }
+
+    /**
+     * 分页查询产品分类列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 产品分类分页列表
+     */
+    @Override
+    public TableDataInfo<ProductCategoryVo> queryPageList(ProductCategoryBo bo, PageQuery pageQuery) {
+        LambdaQueryWrapper<ProductCategory> lqw = buildQueryWrapper(bo);
+        Page<ProductCategoryVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        return TableDataInfo.build(result);
+    }
+
+    /**
+     * 查询符合条件的产品分类列表
+     *
+     * @param bo 查询条件
+     * @return 产品分类列表
+     */
+    @Override
+    public List<ProductCategoryVo> queryList(ProductCategoryBo bo) {
+        LambdaQueryWrapper<ProductCategory> lqw = buildQueryWrapper(bo);
+        return baseMapper.selectVoList(lqw);
+    }
+
+    private LambdaQueryWrapper<ProductCategory> buildQueryWrapper(ProductCategoryBo bo) {
+        Map<String, Object> params = bo.getParams();
+        LambdaQueryWrapper<ProductCategory> lqw = Wrappers.lambdaQuery();
+        lqw.orderByAsc(ProductCategory::getCategoryId);
+        lqw.eq(bo.getParentId() != null, ProductCategory::getParentId, bo.getParentId());
+        lqw.like(StringUtils.isNotBlank(bo.getCategoryName()), ProductCategory::getCategoryName, bo.getCategoryName());
+        lqw.eq(bo.getOrderNum() != null, ProductCategory::getOrderNum, bo.getOrderNum());
+        return lqw;
+    }
+
+    /**
+     * 新增产品分类
+     *
+     * @param bo 产品分类
+     * @return 是否新增成功
+     */
+    @Override
+    public Boolean insertByBo(ProductCategoryBo bo) {
+        ProductCategory add = MapstructUtils.convert(bo, ProductCategory.class);
+        validEntityBeforeSave(add);
+        boolean flag = baseMapper.insert(add) > 0;
+        if (flag) {
+            bo.setCategoryId(add.getCategoryId());
+        }
+        return flag;
+    }
+
+    /**
+     * 修改产品分类
+     *
+     * @param bo 产品分类
+     * @return 是否修改成功
+     */
+    @Override
+    public Boolean updateByBo(ProductCategoryBo bo) {
+        ProductCategory update = MapstructUtils.convert(bo, ProductCategory.class);
+        validEntityBeforeSave(update);
+        return baseMapper.updateById(update) > 0;
+    }
+
+    /**
+     * 保存前的数据校验
+     */
+    private void validEntityBeforeSave(ProductCategory entity){
+        //TODO 做一些数据校验,如唯一约束
+    }
+
+    /**
+     * 校验并批量删除产品分类信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if(isValid){
+            //TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return baseMapper.deleteByIds(ids) > 0;
+    }
+}

+ 144 - 0
ruoyi-admin/src/main/java/org/dromara/web/service/impl/ProductNutritionServiceImpl.java

@@ -0,0 +1,144 @@
+package org.dromara.web.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+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.core.toolkit.Wrappers;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.dromara.web.domain.ProductNutrition;
+import org.dromara.web.domain.bo.ProductNutritionBo;
+import org.dromara.web.domain.vo.ProductNutritionVo;
+import org.dromara.web.mapper.ProductNutritionMapper;
+import org.dromara.web.service.IProductNutritionService;
+import org.springframework.stereotype.Service;
+
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 营养产品信息Service业务层处理
+ *
+ * @author h
+ * @date 2025-06-26
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class ProductNutritionServiceImpl implements IProductNutritionService {
+
+    private final ProductNutritionMapper baseMapper;
+
+    /**
+     * 查询营养产品信息
+     *
+     * @param id 主键
+     * @return 营养产品信息
+     */
+    @Override
+    public ProductNutritionVo queryById(Long id) {
+        return baseMapper.selectVoById(id);
+    }
+
+    /**
+     * 分页查询营养产品信息列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 营养产品信息分页列表
+     */
+    @Override
+    public TableDataInfo<ProductNutritionVo> queryPageList(ProductNutritionBo bo, PageQuery pageQuery) {
+        LambdaQueryWrapper<ProductNutrition> lqw = buildQueryWrapper(bo);
+        Page<ProductNutritionVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        return TableDataInfo.build(result);
+    }
+
+    /**
+     * 查询符合条件的营养产品信息列表
+     *
+     * @param bo 查询条件
+     * @return 营养产品信息列表
+     */
+    @Override
+    public List<ProductNutritionVo> queryList(ProductNutritionBo bo) {
+        LambdaQueryWrapper<ProductNutrition> lqw = buildQueryWrapper(bo);
+        return baseMapper.selectVoList(lqw);
+    }
+
+    private LambdaQueryWrapper<ProductNutrition> buildQueryWrapper(ProductNutritionBo bo) {
+        Map<String, Object> params = bo.getParams();
+        String categoryIds = null;
+        if (bo.getProductCategoryList() != null && !bo.getProductCategoryList().isEmpty()) {
+            categoryIds = String.join(",", bo.getProductCategoryList());
+        }
+        LambdaQueryWrapper<ProductNutrition> lqw = Wrappers.lambdaQuery();
+        lqw.orderByAsc(ProductNutrition::getId);
+        lqw.like(StringUtils.isNotBlank(bo.getProductName()), ProductNutrition::getProductName, bo.getProductName());
+        lqw.like(StringUtils.isNotBlank(bo.getProductCode()), ProductNutrition::getProductCode, bo.getProductName());
+        lqw.eq(StringUtils.isNotBlank(bo.getProductCode()), ProductNutrition::getProductCode, bo.getProductCode());
+        if (StringUtils.isNotBlank(categoryIds)) {
+            lqw.eq(ProductNutrition::getProductCategory, categoryIds);
+        }
+
+        return lqw;
+    }
+
+    /**
+     * 新增营养产品信息
+     *
+     * @param bo 营养产品信息
+     * @return 是否新增成功
+     */
+    @Override
+    public Boolean insertByBo(ProductNutritionBo bo) {
+        ProductNutrition add = MapstructUtils.convert(bo, ProductNutrition.class);
+        validEntityBeforeSave(add);
+        boolean flag = baseMapper.insert(add) > 0;
+        if (flag) {
+            bo.setId(add.getId());
+        }
+        return flag;
+    }
+
+    /**
+     * 修改营养产品信息
+     *
+     * @param bo 营养产品信息
+     * @return 是否修改成功
+     */
+    @Override
+    public Boolean updateByBo(ProductNutritionBo bo) {
+        ProductNutrition update = MapstructUtils.convert(bo, ProductNutrition.class);
+        validEntityBeforeSave(update);
+        return baseMapper.updateById(update) > 0;
+    }
+
+    /**
+     * 保存前的数据校验
+     */
+    private void validEntityBeforeSave(ProductNutrition entity) {
+        //TODO 做一些数据校验,如唯一约束
+    }
+
+    /**
+     * 校验并批量删除营养产品信息信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if (isValid) {
+            //TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return baseMapper.deleteByIds(ids) > 0;
+    }
+}

+ 134 - 0
ruoyi-admin/src/main/java/org/dromara/web/service/impl/SuppliesCategoryServiceImpl.java

@@ -0,0 +1,134 @@
+package org.dromara.web.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+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.core.toolkit.Wrappers;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.dromara.web.domain.SuppliesCategory;
+import org.dromara.web.domain.bo.SuppliesCategoryBo;
+import org.dromara.web.domain.vo.SuppliesCategoryVo;
+import org.dromara.web.mapper.SuppliesCategoryMapper;
+import org.dromara.web.service.ISuppliesCategoryService;
+import org.springframework.stereotype.Service;
+
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 耗材分类Service业务层处理
+ *
+ * @author Lion Li
+ * @date 2025-06-27
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class SuppliesCategoryServiceImpl implements ISuppliesCategoryService {
+
+    private final SuppliesCategoryMapper baseMapper;
+
+    /**
+     * 查询耗材分类
+     *
+     * @param categoryId 主键
+     * @return 耗材分类
+     */
+    @Override
+    public SuppliesCategoryVo queryById(Long categoryId) {
+        return baseMapper.selectVoById(categoryId);
+    }
+
+    /**
+     * 分页查询耗材分类列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 耗材分类分页列表
+     */
+    @Override
+    public TableDataInfo<SuppliesCategoryVo> queryPageList(SuppliesCategoryBo bo, PageQuery pageQuery) {
+        LambdaQueryWrapper<SuppliesCategory> lqw = buildQueryWrapper(bo);
+        Page<SuppliesCategoryVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        return TableDataInfo.build(result);
+    }
+
+    /**
+     * 查询符合条件的耗材分类列表
+     *
+     * @param bo 查询条件
+     * @return 耗材分类列表
+     */
+    @Override
+    public List<SuppliesCategoryVo> queryList(SuppliesCategoryBo bo) {
+        LambdaQueryWrapper<SuppliesCategory> lqw = buildQueryWrapper(bo);
+        return baseMapper.selectVoList(lqw);
+    }
+
+    private LambdaQueryWrapper<SuppliesCategory> buildQueryWrapper(SuppliesCategoryBo bo) {
+        Map<String, Object> params = bo.getParams();
+        LambdaQueryWrapper<SuppliesCategory> lqw = Wrappers.lambdaQuery();
+        lqw.orderByAsc(SuppliesCategory::getCategoryId);
+        lqw.like(StringUtils.isNotBlank(bo.getCategoryName()), SuppliesCategory::getCategoryName, bo.getCategoryName());
+        return lqw;
+    }
+
+    /**
+     * 新增耗材分类
+     *
+     * @param bo 耗材分类
+     * @return 是否新增成功
+     */
+    @Override
+    public Boolean insertByBo(SuppliesCategoryBo bo) {
+        SuppliesCategory add = MapstructUtils.convert(bo, SuppliesCategory.class);
+        validEntityBeforeSave(add);
+        boolean flag = baseMapper.insert(add) > 0;
+        if (flag) {
+            bo.setCategoryId(add.getCategoryId());
+        }
+        return flag;
+    }
+
+    /**
+     * 修改耗材分类
+     *
+     * @param bo 耗材分类
+     * @return 是否修改成功
+     */
+    @Override
+    public Boolean updateByBo(SuppliesCategoryBo bo) {
+        SuppliesCategory update = MapstructUtils.convert(bo, SuppliesCategory.class);
+        validEntityBeforeSave(update);
+        return baseMapper.updateById(update) > 0;
+    }
+
+    /**
+     * 保存前的数据校验
+     */
+    private void validEntityBeforeSave(SuppliesCategory entity) {
+        //TODO 做一些数据校验,如唯一约束
+    }
+
+    /**
+     * 校验并批量删除耗材分类信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if (isValid) {
+            //TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return baseMapper.deleteByIds(ids) > 0;
+    }
+}

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

@@ -22,7 +22,7 @@ import java.util.List;
 import java.util.Map;
 
 /**
- * 【请填写功能名称】Service业务层处理
+ * 待诊患者 Service业务层处理
  *
  * @author Lion Li
  * @date 2025-06-24

+ 7 - 0
ruoyi-admin/src/main/resources/mapper/warehouse/ProductCategoryMapper.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.ProductCategoryMapper">
+
+</mapper>

+ 7 - 0
ruoyi-admin/src/main/resources/mapper/warehouse/ProductNutritionMapper.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.ProductNutritionMapper">
+
+</mapper>

+ 7 - 0
ruoyi-admin/src/main/resources/mapper/warehouse/SuppliesCategoryMapper.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.SuppliesCategoryMapper">
+
+</mapper>