Huanyi 1 kuukausi sitten
vanhempi
sitoutus
d98fc9e703
23 muutettua tiedostoa jossa 1302 lisäystä ja 55 poistoa
  1. 105 0
      ruoyi-admin/src/main/java/org/dromara/web/controller/BadEnteralNutritionEventController.java
  2. 1 1
      ruoyi-admin/src/main/java/org/dromara/web/controller/ReportController.java
  3. 52 0
      ruoyi-admin/src/main/java/org/dromara/web/domain/BadEnteralNutritionEvent.java
  4. 34 12
      ruoyi-admin/src/main/java/org/dromara/web/domain/NutritionQualityControl.java
  5. 41 0
      ruoyi-admin/src/main/java/org/dromara/web/domain/bo/BadEnteralNutritionEventBo.java
  6. 38 0
      ruoyi-admin/src/main/java/org/dromara/web/domain/bo/InventoryBo.java
  7. 50 0
      ruoyi-admin/src/main/java/org/dromara/web/domain/bo/NutritionQualityControlBo.java
  8. 50 0
      ruoyi-admin/src/main/java/org/dromara/web/domain/vo/BadEnteralNutritionEventVo.java
  9. 87 0
      ruoyi-admin/src/main/java/org/dromara/web/domain/vo/InventoryActionVo.java
  10. 93 0
      ruoyi-admin/src/main/java/org/dromara/web/domain/vo/InventoryVo.java
  11. 56 0
      ruoyi-admin/src/main/java/org/dromara/web/domain/vo/NutritionQualityControlVo.java
  12. 9 9
      ruoyi-admin/src/main/java/org/dromara/web/domain/vo/NutritionalQualityControlReportVo.java
  13. 87 0
      ruoyi-admin/src/main/java/org/dromara/web/domain/vo/OutboundActionVo.java
  14. 15 0
      ruoyi-admin/src/main/java/org/dromara/web/mapper/BadEnteralNutritionEventMapper.java
  15. 15 0
      ruoyi-admin/src/main/java/org/dromara/web/mapper/NutritionQualityControlMapper.java
  16. 68 0
      ruoyi-admin/src/main/java/org/dromara/web/service/IBadEnteralNutritionEventService.java
  17. 134 0
      ruoyi-admin/src/main/java/org/dromara/web/service/impl/BadEnteralNutritionEventServiceImpl.java
  18. 220 33
      ruoyi-admin/src/main/java/org/dromara/web/service/impl/ReportServiceImpl.java
  19. 1 0
      ruoyi-admin/src/main/resources/application.yml
  20. 7 0
      ruoyi-admin/src/main/resources/mapper/BadEnteralNutritionEventMapper.xml
  21. 7 0
      ruoyi-admin/src/main/resources/mapper/NutritionQualityControlMapper.xml
  22. 66 0
      script/sql/biz/2025/08/dump_2025_08_27.sql
  23. 66 0
      script/sql/biz/2025/08/dump_2025_08_28.sql

+ 105 - 0
ruoyi-admin/src/main/java/org/dromara/web/controller/BadEnteralNutritionEventController.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.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.web.domain.vo.BadEnteralNutritionEventVo;
+import org.dromara.web.domain.bo.BadEnteralNutritionEventBo;
+import org.dromara.web.service.IBadEnteralNutritionEventService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 不良事件登记
+ *
+ * @author Huanyi
+ * @date 2025-08-29
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/report/badEnteralNutritionEvent")
+public class BadEnteralNutritionEventController extends BaseController {
+
+    private final IBadEnteralNutritionEventService badEnteralNutritionEventService;
+
+    /**
+     * 查询不良事件登记列表
+     */
+    @SaCheckPermission("report:badEnteralNutritionEvent:list")
+    @GetMapping("/list")
+    public TableDataInfo<BadEnteralNutritionEventVo> list(BadEnteralNutritionEventBo bo, PageQuery pageQuery) {
+        return badEnteralNutritionEventService.queryPageList(bo, pageQuery);
+    }
+
+    /**
+     * 导出不良事件登记列表
+     */
+    @SaCheckPermission("report:badEnteralNutritionEvent:export")
+    @Log(title = "不良事件登记", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(BadEnteralNutritionEventBo bo, HttpServletResponse response) {
+        List<BadEnteralNutritionEventVo> list = badEnteralNutritionEventService.queryList(bo);
+        ExcelUtil.exportExcel(list, "不良事件登记", BadEnteralNutritionEventVo.class, response);
+    }
+
+    /**
+     * 获取不良事件登记详细信息
+     *
+     * @param id 主键
+     */
+    @SaCheckPermission("report:badEnteralNutritionEvent:query")
+    @GetMapping("/{id}")
+    public R<BadEnteralNutritionEventVo> getInfo(@NotNull(message = "主键不能为空")
+                                     @PathVariable Long id) {
+        return R.ok(badEnteralNutritionEventService.queryById(id));
+    }
+
+    /**
+     * 新增不良事件登记
+     */
+    @SaCheckPermission("report:badEnteralNutritionEvent:add")
+    @Log(title = "不良事件登记", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody BadEnteralNutritionEventBo bo) {
+        return toAjax(badEnteralNutritionEventService.insertByBo(bo));
+    }
+
+    /**
+     * 修改不良事件登记
+     */
+    @SaCheckPermission("report:badEnteralNutritionEvent:edit")
+    @Log(title = "不良事件登记", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody BadEnteralNutritionEventBo bo) {
+        return toAjax(badEnteralNutritionEventService.updateByBo(bo));
+    }
+
+    /**
+     * 删除不良事件登记
+     *
+     * @param ids 主键串
+     */
+    @SaCheckPermission("report:badEnteralNutritionEvent:remove")
+    @Log(title = "不良事件登记", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public R<Void> remove(@NotEmpty(message = "主键不能为空")
+                          @PathVariable Long[] ids) {
+        return toAjax(badEnteralNutritionEventService.deleteWithValidByIds(List.of(ids), true));
+    }
+}

+ 1 - 1
ruoyi-admin/src/main/java/org/dromara/web/controller/ReportController.java

@@ -40,7 +40,7 @@ public class ReportController {
 
     @GetMapping("/nutritionalQualityControl")
     @SaCheckPermission("report:nutritionQualityControl:list")
-    public R<NutritionalQualityControlVo> getNutritionalQualityControl(
+    public R<NutritionalQualityControlReportVo> getNutritionalQualityControl(
         @RequestParam(value = "start", required = false) Timestamp start,
         @RequestParam(value = "end", required = false) Timestamp end) {
         return reportService.getNutritionalQualityControl(start, end);

+ 52 - 0
ruoyi-admin/src/main/java/org/dromara/web/domain/BadEnteralNutritionEvent.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;
+
+/**
+ * 不良事件登记对象 bad_enteral_nutrition_event
+ *
+ * @author Huanyi
+ * @date 2025-08-29
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("bad_enteral_nutrition_event")
+public class BadEnteralNutritionEvent extends TenantEntity {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 事件数量
+     */
+    private Long count;
+
+    /**
+     * 事件名称
+     */
+    private String name;
+
+    /**
+     * 事件表现
+     */
+    private String manifestation;
+
+    /**
+     *
+     */
+    @TableLogic
+    private String delFlag;
+
+
+}

+ 34 - 12
ruoyi-admin/src/main/java/org/dromara/web/domain/NutritionQualityControl.java

@@ -1,28 +1,50 @@
 package org.dromara.web.domain;
 
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import com.baomidou.mybatisplus.annotation.*;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
 
 import java.io.Serial;
-import java.io.Serializable;
 
 /**
- * @Author: Huanyi
- * @CreateTime: 2025-08-28
- * @Description:
- * @Version: 1.0
+ * 营养指控报单例对象 nutrition_quality_control
+ *
+ * @author Huanyi
+ * @date 2025-08-29
  */
-
 @Data
 @TableName("nutrition_quality_control")
-public class NutritionQualityControl implements Serializable {
+public class NutritionQualityControl {
 
     @Serial
     private static final long serialVersionUID = 1L;
 
-    @TableId(value = "id", type = IdType.AUTO)
-    private Integer id;
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id")
+    private Long id;
+
+    /**
+     * 床位数
+     */
+    private Long bedCount;
+
+    /**
+     * 医生数
+     */
+    private Long doctorCount;
+
+    /**
+     * 护士数
+     */
+    private Long nurseCount;
+
+    /**
+     * 营养门诊诊疗投诉发生人次数
+     */
+    private Long nutritionClinicComplaintCount;
+
 
 }

+ 41 - 0
ruoyi-admin/src/main/java/org/dromara/web/domain/bo/BadEnteralNutritionEventBo.java

@@ -0,0 +1,41 @@
+package org.dromara.web.domain.bo;
+
+import org.dromara.web.domain.BadEnteralNutritionEvent;
+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.*;
+
+/**
+ * 不良事件登记业务对象 bad_enteral_nutrition_event
+ *
+ * @author Huanyi
+ * @date 2025-08-29
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = BadEnteralNutritionEvent.class, reverseConvertGenerate = false)
+public class BadEnteralNutritionEventBo extends BaseEntity {
+
+    private Long id;
+
+    /**
+     * 事件数量
+     */
+    private Long count;
+
+    /**
+     * 事件名称
+     */
+    private String name;
+
+    /**
+     * 事件表现
+     */
+    private String manifestation;
+
+
+}

+ 38 - 0
ruoyi-admin/src/main/java/org/dromara/web/domain/bo/InventoryBo.java

@@ -2,6 +2,8 @@ package org.dromara.web.domain.bo;
 
 import lombok.Data;
 
+import java.util.Date;
+
 /**
  * @Author: Huanyi
  * @CreateTime: 2025-08-18
@@ -11,4 +13,40 @@ import lombok.Data;
 
 @Data
 public class InventoryBo {
+
+    /**
+     * 最早统计日期
+     */
+    private Date createTimeEarliest;
+
+    /**
+     * 最晚统计日期
+     */
+    private Date createTimeLatest;
+
+    /**
+     * 库位
+     */
+    private Long stockLocationId;
+
+    /**
+     * 商品类型(使用下拉框)
+     * 1 -> 营养产品
+     * 3 -> 耗材
+     */
+    private String productType;
+
+    /**
+     * 商品名称
+     */
+    private String productName;
+
+    /**
+     * 报表类型(菜单栏,必传字段)
+     * 0 -> 库存报表
+     * 1 -> 入库报表
+     * 2 -> 出库报表
+     */
+    private Integer reportType;
+
 }

+ 50 - 0
ruoyi-admin/src/main/java/org/dromara/web/domain/bo/NutritionQualityControlBo.java

@@ -0,0 +1,50 @@
+package org.dromara.web.domain.bo;
+
+import org.dromara.web.domain.NutritionQualityControl;
+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.*;
+
+/**
+ * 营养指控报单例业务对象 nutrition_quality_control
+ *
+ * @author Huanyi
+ * @date 2025-08-29
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = NutritionQualityControl.class, reverseConvertGenerate = false)
+public class NutritionQualityControlBo extends BaseEntity {
+
+    /**
+     * 主键ID
+     */
+    @NotNull(message = "主键ID不能为空", groups = { EditGroup.class })
+    private Long id;
+
+    /**
+     * 床位数
+     */
+    private Long bedCount;
+
+    /**
+     * 医生数
+     */
+    private Long doctorCount;
+
+    /**
+     * 护士数
+     */
+    private Long nurseCount;
+
+    /**
+     * 营养门诊诊疗投诉发生人次数
+     */
+    private Long nutritionClinicComplaintCount;
+
+
+}

+ 50 - 0
ruoyi-admin/src/main/java/org/dromara/web/domain/vo/BadEnteralNutritionEventVo.java

@@ -0,0 +1,50 @@
+package org.dromara.web.domain.vo;
+
+import org.dromara.web.domain.BadEnteralNutritionEvent;
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import cn.idev.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 不良事件登记视图对象 bad_enteral_nutrition_event
+ *
+ * @author Huanyi
+ * @date 2025-08-29
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = BadEnteralNutritionEvent.class)
+public class BadEnteralNutritionEventVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 事件数量
+     */
+    @ExcelProperty(value = "事件数量")
+    private Long count;
+
+    /**
+     * 事件名称
+     */
+    @ExcelProperty(value = "事件名称")
+    private String name;
+
+    /**
+     * 事件表现
+     */
+    @ExcelProperty(value = "事件表现")
+    private String manifestation;
+
+
+}

+ 87 - 0
ruoyi-admin/src/main/java/org/dromara/web/domain/vo/InventoryActionVo.java

@@ -0,0 +1,87 @@
+package org.dromara.web.domain.vo;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @Author: Huanyi
+ * @CreateTime: 2025-08-29
+ * @Description:
+ * @Version: 1.0
+ */
+
+@Data
+public class InventoryActionVo {
+
+    /**
+     * 操作入库时间
+     */
+    private Date actionInventoryDate;
+
+    /**
+     * 商品编号
+     */
+    private String productCode;
+
+    /**
+     * 产品名称
+     */
+    private String productName;
+
+    /**
+     * 院方系统编码
+     */
+    private String hospitalSystemCode;
+
+    /**
+     * 规格
+     */
+    private String specification;
+
+    /**
+     * 商品类型
+     */
+    private String productType;
+
+    /**
+     * 供应商
+     */
+    private String provider;
+
+    /**
+     * 生产厂商
+     */
+    private String manufacture;
+
+    /**
+     * 商品批号
+     */
+    private String productBatchCode;
+
+    /**
+     * 入库批次
+     */
+    private String inventoryBatch;
+
+    /**
+     * 操作类型
+     */
+    private String actionType;
+
+    /**
+     * 数量
+     */
+    private Long count;
+
+    /**
+     * 单位
+     */
+    private String unit;
+
+    /**
+     * 操作人
+     */
+    private String actioner;
+
+}

+ 93 - 0
ruoyi-admin/src/main/java/org/dromara/web/domain/vo/InventoryVo.java

@@ -0,0 +1,93 @@
+package org.dromara.web.domain.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @Author: Huanyi
+ * @CreateTime: 2025-08-28
+ * @Description:
+ * @Version: 1.0
+ */
+
+@Data
+public class InventoryVo {
+
+    /**
+     * 统计日期
+     */
+    private Date createTime;
+
+    /**
+     * 商品类型
+     */
+    private String productType;
+
+    /**
+     * 商品分类
+     */
+    private String productCategory;
+
+    /**
+     * 商品编码
+     */
+    private String productCode;
+
+    /**
+     * 产品名称
+     */
+    private String productName;
+
+    /**
+     * 商品规格
+     */
+    private String productSpecification;
+
+    /**
+     * 库存单位
+     */
+    private String stockUnit;
+
+    /**
+     * 手动入库数量
+     */
+    private BigDecimal manualInventory;
+
+    /**
+     * 退货入库
+     */
+    private BigDecimal refundInventory;
+
+    /**
+     * 门诊处方消耗数量
+     */
+    private BigDecimal outpatientNutritionConsume;
+
+    /**
+     * 住院处方消耗数量
+     */
+    private BigDecimal inHospitalNutritionConsume;
+
+    /**
+     * 调库出库数量
+     */
+    private BigDecimal transferOutbound;
+
+    /**
+     * 总出库数量
+     */
+    private BigDecimal totalOutbound;
+
+    /**
+     * 配置耗损
+     */
+    private BigDecimal configureConsume;
+
+    /**
+     * 退费耗损
+     */
+    private BigDecimal refundConsume;
+
+}

+ 56 - 0
ruoyi-admin/src/main/java/org/dromara/web/domain/vo/NutritionQualityControlVo.java

@@ -0,0 +1,56 @@
+package org.dromara.web.domain.vo;
+
+import org.dromara.web.domain.NutritionQualityControl;
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import cn.idev.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 营养指控报单例视图对象 nutrition_quality_control
+ *
+ * @author Huanyi
+ * @date 2025-08-29
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = NutritionQualityControl.class)
+public class NutritionQualityControlVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 床位数
+     */
+    @ExcelProperty(value = "床位数")
+    private Long bedCount;
+
+    /**
+     * 医生数
+     */
+    @ExcelProperty(value = "医生数")
+    private Long doctorCount;
+
+    /**
+     * 护士数
+     */
+    @ExcelProperty(value = "护士数")
+    private Long nurseCount;
+
+    /**
+     * 营养门诊诊疗投诉发生人次数
+     */
+    @ExcelProperty(value = "营养门诊诊疗投诉发生人次数")
+    private Long nutritionClinicComplaintCount;
+
+
+}

+ 9 - 9
ruoyi-admin/src/main/java/org/dromara/web/domain/vo/NutritionalQualityControlVo.java → ruoyi-admin/src/main/java/org/dromara/web/domain/vo/NutritionalQualityControlReportVo.java

@@ -10,25 +10,25 @@ import lombok.Data;
  */
 
 @Data
-public class NutritionalQualityControlVo {
+public class NutritionalQualityControlReportVo {
 
     /**
-     * 床位数
+     * 床位数(单例)
      */
     private Long bedCount;
 
     /**
-     * 医生数
+     * 医生数(单例)
      */
     private Long doctorCount;
 
     /**
-     * 护士数
+     * 护士数(单例)
      */
     private Long nurseCount;
 
     /**
-     * 营养门诊诊疗投诉发生人次数
+     * 营养门诊诊疗投诉发生人次数(单例)
      */
     private Long nutritionClinicComplaintCount;
 
@@ -68,7 +68,7 @@ public class NutritionalQualityControlVo {
     private Long InHospitalInDangerTotalCount;
 
     /**
-     * 肠内营养干预不良事件发生例数
+     * 肠内营养干预不良事件发生例数(单例)
      */
     private Long enteralNutritionBadEventCount;
 
@@ -78,7 +78,7 @@ public class NutritionalQualityControlVo {
     private Long enteralNutritionInterventionCount;
 
     /**
-     * 膳食营养干预不良事件发生例数
+     * 膳食营养干预不良事件发生例数(单例)
      */
     private Long dietaryNutritionInterventionBadEventCount;
 
@@ -88,12 +88,12 @@ public class NutritionalQualityControlVo {
     private Long dietaryNutritionInterventionTotalCount;
 
     /**
-     * 使用剂量减少的糖尿病住院患者数
+     * 使用剂量减少的糖尿病住院患者数(单例)
      */
     private Long decreaseDosageDiabeticInHospitalCount;
 
     /**
-     * 使用胰岛素治疗并接受营养治疗的糖尿病住院患者总数
+     * 使用胰岛素治疗并接受营养治疗的糖尿病住院患者总数(单例)
      */
     private Long insulinAndNutritionDiabeticInHospitalCount;
 

+ 87 - 0
ruoyi-admin/src/main/java/org/dromara/web/domain/vo/OutboundActionVo.java

@@ -0,0 +1,87 @@
+package org.dromara.web.domain.vo;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @Author: Huanyi
+ * @CreateTime: 2025-08-29
+ * @Description:
+ * @Version: 1.0
+ */
+
+@Data
+public class OutboundActionVo {
+
+    /**
+     * 操作出库时间
+     */
+    private Date actionOutboundDate;
+
+    /**
+     * 商品编号
+     */
+    private String productCode;
+
+    /**
+     * 产品名称
+     */
+    private String productName;
+
+    /**
+     * 院方系统编码
+     */
+    private String hospitalSystemCode;
+
+    /**
+     * 规格
+     */
+    private String specification;
+
+    /**
+     * 商品类型
+     */
+    private String productType;
+
+    /**
+     * 供应商
+     */
+    private String provider;
+
+    /**
+     * 生产厂商
+     */
+    private String manufacture;
+
+    /**
+     * 商品批号
+     */
+    private String productBatchCode;
+
+    /**
+     * 入库批次
+     */
+    private String inventoryBatch;
+
+    /**
+     * 操作类型
+     */
+    private String actionType;
+
+    /**
+     * 数量
+     */
+    private Long count;
+
+    /**
+     * 单位
+     */
+    private String unit;
+
+    /**
+     * 操作人
+     */
+    private String actioner;
+
+}

+ 15 - 0
ruoyi-admin/src/main/java/org/dromara/web/mapper/BadEnteralNutritionEventMapper.java

@@ -0,0 +1,15 @@
+package org.dromara.web.mapper;
+
+import org.dromara.web.domain.BadEnteralNutritionEvent;
+import org.dromara.web.domain.vo.BadEnteralNutritionEventVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 不良事件登记Mapper接口
+ *
+ * @author Huanyi
+ * @date 2025-08-29
+ */
+public interface BadEnteralNutritionEventMapper extends BaseMapperPlus<BadEnteralNutritionEvent, BadEnteralNutritionEventVo> {
+
+}

+ 15 - 0
ruoyi-admin/src/main/java/org/dromara/web/mapper/NutritionQualityControlMapper.java

@@ -0,0 +1,15 @@
+package org.dromara.web.mapper;
+
+import org.dromara.web.domain.NutritionQualityControl;
+import org.dromara.web.domain.vo.NutritionQualityControlVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 营养指控报单例Mapper接口
+ *
+ * @author Huanyi
+ * @date 2025-08-29
+ */
+public interface NutritionQualityControlMapper extends BaseMapperPlus<NutritionQualityControl, NutritionQualityControlVo> {
+
+}

+ 68 - 0
ruoyi-admin/src/main/java/org/dromara/web/service/IBadEnteralNutritionEventService.java

@@ -0,0 +1,68 @@
+package org.dromara.web.service;
+
+import org.dromara.web.domain.vo.BadEnteralNutritionEventVo;
+import org.dromara.web.domain.bo.BadEnteralNutritionEventBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 不良事件登记Service接口
+ *
+ * @author Huanyi
+ * @date 2025-08-29
+ */
+public interface IBadEnteralNutritionEventService {
+
+    /**
+     * 查询不良事件登记
+     *
+     * @param id 主键
+     * @return 不良事件登记
+     */
+    BadEnteralNutritionEventVo queryById(Long id);
+
+    /**
+     * 分页查询不良事件登记列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 不良事件登记分页列表
+     */
+    TableDataInfo<BadEnteralNutritionEventVo> queryPageList(BadEnteralNutritionEventBo bo, PageQuery pageQuery);
+
+    /**
+     * 查询符合条件的不良事件登记列表
+     *
+     * @param bo 查询条件
+     * @return 不良事件登记列表
+     */
+    List<BadEnteralNutritionEventVo> queryList(BadEnteralNutritionEventBo bo);
+
+    /**
+     * 新增不良事件登记
+     *
+     * @param bo 不良事件登记
+     * @return 是否新增成功
+     */
+    Boolean insertByBo(BadEnteralNutritionEventBo bo);
+
+    /**
+     * 修改不良事件登记
+     *
+     * @param bo 不良事件登记
+     * @return 是否修改成功
+     */
+    Boolean updateByBo(BadEnteralNutritionEventBo 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/BadEnteralNutritionEventServiceImpl.java

@@ -0,0 +1,134 @@
+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.springframework.stereotype.Service;
+import org.dromara.web.domain.bo.BadEnteralNutritionEventBo;
+import org.dromara.web.domain.vo.BadEnteralNutritionEventVo;
+import org.dromara.web.domain.BadEnteralNutritionEvent;
+import org.dromara.web.mapper.BadEnteralNutritionEventMapper;
+import org.dromara.web.service.IBadEnteralNutritionEventService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 不良事件登记Service业务层处理
+ *
+ * @author Huanyi
+ * @date 2025-08-29
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class BadEnteralNutritionEventServiceImpl implements IBadEnteralNutritionEventService {
+
+    private final BadEnteralNutritionEventMapper baseMapper;
+
+    /**
+     * 查询不良事件登记
+     *
+     * @param id 主键
+     * @return 不良事件登记
+     */
+    @Override
+    public BadEnteralNutritionEventVo queryById(Long id){
+        return baseMapper.selectVoById(id);
+    }
+
+    /**
+     * 分页查询不良事件登记列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 不良事件登记分页列表
+     */
+    @Override
+    public TableDataInfo<BadEnteralNutritionEventVo> queryPageList(BadEnteralNutritionEventBo bo, PageQuery pageQuery) {
+        LambdaQueryWrapper<BadEnteralNutritionEvent> lqw = buildQueryWrapper(bo);
+        Page<BadEnteralNutritionEventVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        return TableDataInfo.build(result);
+    }
+
+    /**
+     * 查询符合条件的不良事件登记列表
+     *
+     * @param bo 查询条件
+     * @return 不良事件登记列表
+     */
+    @Override
+    public List<BadEnteralNutritionEventVo> queryList(BadEnteralNutritionEventBo bo) {
+        LambdaQueryWrapper<BadEnteralNutritionEvent> lqw = buildQueryWrapper(bo);
+        return baseMapper.selectVoList(lqw);
+    }
+
+    private LambdaQueryWrapper<BadEnteralNutritionEvent> buildQueryWrapper(BadEnteralNutritionEventBo bo) {
+        Map<String, Object> params = bo.getParams();
+        LambdaQueryWrapper<BadEnteralNutritionEvent> lqw = Wrappers.lambdaQuery();
+        lqw.orderByDesc(BadEnteralNutritionEvent::getId);
+        lqw.eq(bo.getCount() != null, BadEnteralNutritionEvent::getCount, bo.getCount());
+        lqw.like(StringUtils.isNotBlank(bo.getName()), BadEnteralNutritionEvent::getName, bo.getName());
+        lqw.eq(StringUtils.isNotBlank(bo.getManifestation()), BadEnteralNutritionEvent::getManifestation, bo.getManifestation());
+        return lqw;
+    }
+
+    /**
+     * 新增不良事件登记
+     *
+     * @param bo 不良事件登记
+     * @return 是否新增成功
+     */
+    @Override
+    public Boolean insertByBo(BadEnteralNutritionEventBo bo) {
+        BadEnteralNutritionEvent add = MapstructUtils.convert(bo, BadEnteralNutritionEvent.class);
+        validEntityBeforeSave(add);
+        boolean flag = baseMapper.insert(add) > 0;
+        if (flag) {
+            bo.setId(add.getId());
+        }
+        return flag;
+    }
+
+    /**
+     * 修改不良事件登记
+     *
+     * @param bo 不良事件登记
+     * @return 是否修改成功
+     */
+    @Override
+    public Boolean updateByBo(BadEnteralNutritionEventBo bo) {
+        BadEnteralNutritionEvent update = MapstructUtils.convert(bo, BadEnteralNutritionEvent.class);
+        validEntityBeforeSave(update);
+        return baseMapper.updateById(update) > 0;
+    }
+
+    /**
+     * 保存前的数据校验
+     */
+    private void validEntityBeforeSave(BadEnteralNutritionEvent entity){
+        //TODO 做一些数据校验,如唯一约束
+    }
+
+    /**
+     * 校验并批量删除不良事件登记信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if(isValid){
+            //TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return baseMapper.deleteByIds(ids) > 0;
+    }
+}

+ 220 - 33
ruoyi-admin/src/main/java/org/dromara/web/service/impl/ReportServiceImpl.java

@@ -25,6 +25,7 @@ import org.dromara.web.service.ReportService;
 import org.springframework.stereotype.Service;
 
 import java.sql.Timestamp;
+import java.util.concurrent.atomic.AtomicLong;
 
 /**
  * @Author: Huanyi
@@ -67,36 +68,48 @@ public class ReportServiceImpl implements ReportService {
     private final SysDiseaseLabelMapper sysDiseaseLabelMapper;
     private final FoodIngredientStockMapper foodIngredientStockMapper;
     private final SysFoodCategoryMapper sysFoodCategoryMapper;
+    private final ProductStockMapper productStockMapper;
+    private final ProductInOutRecordMapper productInOutRecordMapper;
+    private final StorageLocationMapper storageLocationMapper;
+    private final ProductDispatchRecordMapper productDispatchRecordMapper;
+    private final NutritionQualityControlMapper nutritionQualityControlMapper;
+    private final BadEnteralNutritionEventMapper badEnteralNutritionEventMapper;
 
     @Override
     public R getNutritionalQualityControl(Timestamp start, Timestamp end) {
 
-        NutritionalQualityControlVo vo = new NutritionalQualityControlVo();
-
-        vo.setBedCount(0L);
-        vo.setDoctorCount(0L);
-        vo.setNurseCount(0L);
-        vo.setNutritionClinicComplaintCount(0L);
-        vo.setNutritionClinicTotalCount(0L);
-        vo.setNutritionScreeningInHospitalInDayCount(0L);
-        vo.setInHospitalOneDayTotalCount(0L);
-        vo.setNutritionEvaluationCount(0L);
-        vo.setInHospitalTotalCount(0L);
-        vo.setNutritionEvaluationInDangerCount(0L);
-        vo.setInHospitalInDangerTotalCount(0L);
-        vo.setEnteralNutritionBadEventCount(0L);
-        vo.setEnteralNutritionInterventionCount(0L);
+        NutritionalQualityControlReportVo vo = new NutritionalQualityControlReportVo();
+
+        NutritionQualityControl nutritionQualityControl = nutritionQualityControlMapper.selectById(1);
+        AtomicLong count = new AtomicLong(0L);
+        badEnteralNutritionEventMapper.selectList().forEach(e -> count.addAndGet(e.getCount()));
+
+        vo.setBedCount(nutritionQualityControl.getBedCount());
+        vo.setDoctorCount(nutritionQualityControl.getDoctorCount());
+        vo.setNurseCount(nutritionQualityControl.getNurseCount());
+        vo.setNutritionClinicComplaintCount(nutritionQualityControl.getNutritionClinicComplaintCount());
+
+
+        vo.setNutritionClinicTotalCount(100L);
+        vo.setNutritionScreeningInHospitalInDayCount(20L);
+        vo.setInHospitalOneDayTotalCount(50L);
+        vo.setNutritionEvaluationCount(20L);
+        vo.setInHospitalTotalCount(150L);
+        vo.setNutritionEvaluationInDangerCount(20L);
+        vo.setInHospitalInDangerTotalCount(60L);
+        vo.setEnteralNutritionBadEventCount(count.get());
+        vo.setEnteralNutritionInterventionCount(20L);
         vo.setDietaryNutritionInterventionBadEventCount(0L);
-        vo.setDietaryNutritionInterventionTotalCount(0L);
-        vo.setDecreaseDosageDiabeticInHospitalCount(0L);
-        vo.setInsulinAndNutritionDiabeticInHospitalCount(0L);
-        vo.setNutritionScreeningInHospitalCount(0L);
-        vo.setInHospitalCount(0L);
-        vo.setInDangerAndNutritionCureInHospitalCount(0L);
-        vo.setInDangerAndInHospitalCount(0L);
-        vo.setNutritionEvaluationDiabeticInHospitalCount(0L);
-        vo.setDiabeticInHospitalCount(0L);
-        vo.setNutritionCureDiabeticInHospitalCount(0L);
+        vo.setDietaryNutritionInterventionTotalCount(40L);
+        vo.setDecreaseDosageDiabeticInHospitalCount(30L);
+        vo.setInsulinAndNutritionDiabeticInHospitalCount(50L);
+        vo.setNutritionScreeningInHospitalCount(25L);
+        vo.setInHospitalCount(150L);
+        vo.setInDangerAndNutritionCureInHospitalCount(40L);
+        vo.setInDangerAndInHospitalCount(30L);
+        vo.setNutritionEvaluationDiabeticInHospitalCount(20L);
+        vo.setDiabeticInHospitalCount(50L);
+        vo.setNutritionCureDiabeticInHospitalCount(10L);
 
         return R.ok(vo);
     }
@@ -343,11 +356,6 @@ public class ReportServiceImpl implements ReportService {
             BigDecimal mealPreparationLoss = new BigDecimal("0");
             for (FoodIngredientStock stock : stocks) {
                 if (Objects.equals(stock.getFoodId(), ingredient.getFoodIngredientId())) {
-
-//                    if (foodFirstCategory == null) foodFirstCategory = stock.getMainClassName();
-//                    if (foodSecondCategory == null) foodSecondCategory = stock.getSubClassName();
-//                    if (unit == null) unit = unitMap.get(stock.getStockUnit());
-
                     switch (stock.getType()) {
                         case "0" -> {
                             manualInventoryQuantity = manualInventoryQuantity.add(stock.getNum());
@@ -355,7 +363,7 @@ public class ReportServiceImpl implements ReportService {
                         }
                         case "1" -> {
                             outboundTotal = outboundTotal.add(stock.getNum());
-                            manualOutboundQuantity = manualInventoryQuantity.add(stock.getNum());
+                            manualOutboundQuantity = manualOutboundQuantity.add(stock.getNum());
                         }
                         case "2" -> {
                             outboundTotal = outboundTotal.add(stock.getNum());
@@ -366,7 +374,6 @@ public class ReportServiceImpl implements ReportService {
                             refundLoss = refundLoss.add(stock.getNum());
                         }
                     }
-
                 }
             }
 
@@ -387,7 +394,187 @@ public class ReportServiceImpl implements ReportService {
 
     @Override
     public TableDataInfo listPageInventory(InventoryBo bo, PageQuery pageQuery) {
-        return null;
+
+        Map<Long, String> locationMap = new HashMap<>();
+        Map<String, String> productTypeMap = new HashMap<>();
+        Map<Long, String> productCategoryMap = new HashMap<>();
+        Map<Long, String> consumableCategoryMap = new HashMap<>();
+        Map<String, String> unitMap = new HashMap<>();
+        storageLocationMapper.selectList().forEach(e -> locationMap.put(e.getId(), e.getStorageName()));
+        sysDictDataMapper.selectDictDataByType("product_type").forEach(e -> productTypeMap.put(e.getDictValue(), e.getDictLabel()));
+        sysDictDataMapper.selectDictDataByType("product_package_unit").forEach(e -> unitMap.put(e.getDictValue(), e.getDictLabel()));
+        productCategoryMapper.selectList().forEach(e -> productCategoryMap.put(e.getCategoryId(), e.getCategoryName()));
+        suppliesCategoryMapper.selectList().forEach(e -> consumableCategoryMap.put(e.getCategoryId(), e.getCategoryName()));
+
+        switch (bo.getReportType()) {
+            case 0 -> {
+
+                List<ProductInOutRecord> inOutRecordList = productInOutRecordMapper.selectList(
+                    Wrappers.lambdaQuery(ProductInOutRecord.class)
+                        .ge(bo.getCreateTimeEarliest() != null, ProductInOutRecord::getCreateTime, bo.getCreateTimeEarliest())
+                        .le(bo.getCreateTimeLatest() != null, ProductInOutRecord::getCreateTime, bo.getCreateTimeLatest())
+                );
+                List<ProductDispatchRecord> dispatchRecordList = productDispatchRecordMapper.selectList(
+                    Wrappers.lambdaQuery(ProductDispatchRecord.class)
+                        .ge(bo.getCreateTimeEarliest() != null, ProductDispatchRecord::getCreateTime, bo.getCreateTimeEarliest())
+                        .le(bo.getCreateTimeLatest() != null, ProductDispatchRecord::getCreateTime, bo.getCreateTimeLatest())
+                );
+
+                Page<ProductStock> page = productStockMapper.selectPage(
+                    pageQuery.build(),
+                    Wrappers.lambdaQuery(ProductStock.class)
+                        .eq(bo.getStockLocationId() != null, ProductStock::getLocationId, bo.getStockLocationId())
+                );
+
+                return TableDataInfo.build(page.convert(stock -> {
+                    InventoryVo vo = new InventoryVo();
+                    vo.setCreateTime(stock.getCreateTime());
+                    vo.setProductType(productTypeMap.get(stock.getProductType()));
+
+                    if (Objects.equals(stock.getProductType(), "1")) vo.setProductCategory(productCategoryMap.get(stock.getCategoryId()));
+                    else vo.setProductCategory(consumableCategoryMap.get(stock.getCategoryId()));
+
+                    vo.setProductCode(stock.getProductNo());
+                    vo.setProductName(stock.getProductName());
+                    vo.setProductSpecification(stock.getSpecsName());
+                    vo.setStockUnit(stock.getStockUnitName());
+
+                    BigDecimal manualInventory = new BigDecimal("0");
+                    BigDecimal transferOutbound = new BigDecimal("0");
+                    BigDecimal totalOutbound = new BigDecimal("0");
+                    BigDecimal refundInventory = new BigDecimal("0");
+                    BigDecimal outpatientNutritionConsume = new BigDecimal("0");
+                    BigDecimal inHospitalNutritionConsume = new BigDecimal("0");
+                    BigDecimal configureConsume = new BigDecimal("0");
+                    BigDecimal refundConsume = new BigDecimal("0");
+
+                    for (ProductInOutRecord record : inOutRecordList) {
+                        if (Objects.equals(record.getLocationId(), stock.getLocationId())) {
+                            switch (record.getType()) {
+                                case "0" -> {
+                                    manualInventory = manualInventory.add(new BigDecimal(record.getNum()));
+                                }
+                                case "1", "2" -> {
+                                    totalOutbound = totalOutbound.add(new BigDecimal(record.getNum()));
+                                }
+                                case "3" -> {
+                                    totalOutbound = totalOutbound.add(new BigDecimal(record.getNum()));
+                                    refundConsume = refundConsume.add(new BigDecimal(record.getNum()));
+                                }
+                            }
+                        }
+
+                    }
+
+                    vo.setManualInventory(manualInventory);
+                    vo.setRefundInventory(refundInventory);
+                    vo.setOutpatientNutritionConsume(outpatientNutritionConsume);
+                    vo.setInHospitalNutritionConsume(inHospitalNutritionConsume);
+                    vo.setTransferOutbound(transferOutbound);
+                    vo.setTotalOutbound(totalOutbound);
+                    vo.setConfigureConsume(configureConsume);
+                    vo.setRefundConsume(refundConsume);
+                    return vo;
+                }));
+            }
+            case 1 -> {
+
+                Page<ProductInOutRecord> page = productInOutRecordMapper.selectPage(
+                    pageQuery.build(),
+                    Wrappers.lambdaQuery(ProductInOutRecord.class)
+                        .eq(ProductInOutRecord::getType, "0")
+                        .ge(bo.getCreateTimeEarliest() != null, ProductInOutRecord::getCreateTime, bo.getCreateTimeEarliest())
+                        .le(bo.getCreateTimeLatest() != null, ProductInOutRecord::getCreateTime, bo.getCreateTimeLatest())
+                );
+                List<Long> list = new ArrayList<>();
+                page.getRecords().forEach(e -> list.add(e.getProductId()));
+                List<ProductNutrition> nutritionList = productNutritionMapper.selectList(
+                    Wrappers.lambdaQuery(ProductNutrition.class).in(!list.isEmpty(), ProductNutrition::getId, list)
+                );
+                Map<Long, String> manufactureMap = new HashMap<>();
+                Map<Long, String> providerMap = new HashMap<>();
+                Map<Long, String> actionerMap = new HashMap<>();
+
+                productSupplierMapper.selectList().forEach(e -> providerMap.put(e.getId(), e.getName()));
+                productManufacturerMapper.selectList().forEach(e -> manufactureMap.put(e.getId(), e.getName()));
+                sysUserMapper.selectList().forEach(e -> actionerMap.put(e.getUserId(), e.getName()));
+
+                return TableDataInfo.build(page.convert(record -> {
+                    InventoryActionVo vo = new InventoryActionVo();
+                    vo.setActionInventoryDate(record.getCreateTime());
+                    vo.setProductCode(record.getProductNo());
+                    vo.setProductName(record.getProductName());
+
+                    for (ProductNutrition productNutrition : nutritionList) {
+                        if (Objects.equals(record.getProductId(), productNutrition.getId())) {
+                            vo.setHospitalSystemCode(productNutrition.getHospitalSystemCode());
+                            vo.setProvider(providerMap.get(Long.valueOf(productNutrition.getSupplier())));
+                            vo.setManufacture(manufactureMap.get(Long.valueOf(productNutrition.getManufacturer())));
+                        }
+                    }
+
+                    vo.setSpecification(unitMap.get(record.getUnit()));
+                    vo.setProductType(productTypeMap.get(record.getProductType()));
+                    vo.setProductBatchCode(record.getProductBatchNo());
+                    vo.setInventoryBatch(record.getSerialNo());
+                    vo.setActionType("手动入库");
+                    vo.setCount(record.getNum());
+                    vo.setUnit(unitMap.get(record.getUnit()));
+                    vo.setActioner(actionerMap.get(record.getCreateBy()));
+                    return vo;
+                }));
+            }
+            case 2 -> {
+
+                Page<ProductInOutRecord> page = productInOutRecordMapper.selectPage(
+                    pageQuery.build(),
+                    Wrappers.lambdaQuery(ProductInOutRecord.class)
+                        .eq(ProductInOutRecord::getType, "1")
+                        .ge(bo.getCreateTimeEarliest() != null, ProductInOutRecord::getCreateTime, bo.getCreateTimeEarliest())
+                        .le(bo.getCreateTimeLatest() != null, ProductInOutRecord::getCreateTime, bo.getCreateTimeLatest())
+                );
+
+                List<Long> list = new ArrayList<>();
+                page.getRecords().forEach(e -> list.add(e.getProductId()));
+                List<ProductNutrition> nutritionList = productNutritionMapper.selectList(
+                    Wrappers.lambdaQuery(ProductNutrition.class).in(!list.isEmpty(), ProductNutrition::getId, list)
+                );
+
+                Map<Long, String> manufactureMap = new HashMap<>();
+                Map<Long, String> providerMap = new HashMap<>();
+                Map<Long, String> actionerMap = new HashMap<>();
+
+                productSupplierMapper.selectList().forEach(e -> providerMap.put(e.getId(), e.getName()));
+                productManufacturerMapper.selectList().forEach(e -> manufactureMap.put(e.getId(), e.getName()));
+                sysUserMapper.selectList().forEach(e -> actionerMap.put(e.getUserId(), e.getName()));
+
+                return TableDataInfo.build(page.convert(record -> {
+                    OutboundActionVo vo = new OutboundActionVo();
+                    vo.setActionOutboundDate(record.getCreateTime());
+                    vo.setProductCode(record.getProductNo());
+                    vo.setProductName(record.getProductName());
+
+                    for (ProductNutrition productNutrition : nutritionList) {
+                        if (Objects.equals(record.getProductId(), productNutrition.getId())) {
+                            vo.setHospitalSystemCode(productNutrition.getHospitalSystemCode());
+                            vo.setProvider(providerMap.get(Long.valueOf(productNutrition.getSupplier())));
+                            vo.setManufacture(manufactureMap.get(Long.valueOf(productNutrition.getManufacturer())));
+                        }
+                    }
+
+                    vo.setSpecification(record.getSpecsName());
+                    vo.setProductType(productTypeMap.get(record.getProductType()));
+                    vo.setProductBatchCode(record.getProductBatchNo());
+                    vo.setInventoryBatch(record.getSerialNo());
+                    vo.setActionType("手动出库");
+                    vo.setCount(record.getNum());
+                    vo.setUnit(unitMap.get(record.getUnit()));
+                    vo.setActioner(actionerMap.get(record.getCreateBy()));
+                    return vo;
+                }));
+            }
+        }
+        return TableDataInfo.build();
     }
 
     @Override

+ 1 - 0
ruoyi-admin/src/main/resources/application.yml

@@ -115,6 +115,7 @@ tenant:
         - sys_user_role
         - sys_client
         - sys_oss_config
+        - nutrition_quality_control
 
 # MyBatisPlus配置
 # https://baomidou.com/config/

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

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

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 66 - 0
script/sql/biz/2025/08/dump_2025_08_27.sql


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 66 - 0
script/sql/biz/2025/08/dump_2025_08_28.sql


Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä