HuRongxin 2 месяцев назад
Родитель
Сommit
0eedb8e095
29 измененных файлов с 1299 добавлено и 110 удалено
  1. 44 0
      ruoyi-admin/src/main/java/org/dromara/web/controller/EnteralNutritionController.java
  2. 42 1
      ruoyi-admin/src/main/java/org/dromara/web/controller/HospitalMealPlanController.java
  3. 22 0
      ruoyi-admin/src/main/java/org/dromara/web/domain/EnteralNutrition.java
  4. 3 0
      ruoyi-admin/src/main/java/org/dromara/web/domain/HospitalMealPlan.java
  5. 21 0
      ruoyi-admin/src/main/java/org/dromara/web/domain/HospitalMealRecipe.java
  6. 35 0
      ruoyi-admin/src/main/java/org/dromara/web/domain/bo/EnteralNutritionBo.java
  7. 2 0
      ruoyi-admin/src/main/java/org/dromara/web/domain/bo/HospitalMealPlanBo.java
  8. 25 0
      ruoyi-admin/src/main/java/org/dromara/web/domain/bo/HospitalMealRecipeBo.java
  9. 2 0
      ruoyi-admin/src/main/java/org/dromara/web/domain/vo/ChargeRecordVo.java
  10. 111 0
      ruoyi-admin/src/main/java/org/dromara/web/domain/vo/EnteralNutritionQueryOneVo.java
  11. 3 0
      ruoyi-admin/src/main/java/org/dromara/web/domain/vo/EnteralNutritionQueryVo.java
  12. 32 0
      ruoyi-admin/src/main/java/org/dromara/web/domain/vo/EnteralNutritionVo.java
  13. 117 0
      ruoyi-admin/src/main/java/org/dromara/web/domain/vo/HospitalMealPlanQueryVo.java
  14. 3 0
      ruoyi-admin/src/main/java/org/dromara/web/domain/vo/HospitalMealPlanVo.java
  15. 31 0
      ruoyi-admin/src/main/java/org/dromara/web/domain/vo/HospitalMealRecipeVo.java
  16. 8 0
      ruoyi-admin/src/main/java/org/dromara/web/domain/vo/SettlementVo.java
  17. 98 0
      ruoyi-admin/src/main/java/org/dromara/web/mapper/EnteralNutritionMapper.java
  18. 102 0
      ruoyi-admin/src/main/java/org/dromara/web/mapper/HospitalMealPlanMapper.java
  19. 19 0
      ruoyi-admin/src/main/java/org/dromara/web/service/IEnteralNutritionService.java
  20. 24 1
      ruoyi-admin/src/main/java/org/dromara/web/service/IHospitalMealPlanService.java
  21. 14 0
      ruoyi-admin/src/main/java/org/dromara/web/service/impl/ChargeRecordServiceImpl.java
  22. 209 70
      ruoyi-admin/src/main/java/org/dromara/web/service/impl/EnteralNutritionServiceImpl.java
  23. 240 33
      ruoyi-admin/src/main/java/org/dromara/web/service/impl/HospitalMealPlanServiceImpl.java
  24. 18 5
      ruoyi-admin/src/main/java/org/dromara/web/service/impl/SettlementServiceImpl.java
  25. 6 0
      ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/BizConst.java
  26. 17 0
      ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/enums/biz/ConfigStatus.java
  27. 17 0
      ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/enums/biz/ExecuteStatus.java
  28. 17 0
      ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/enums/biz/MakeStatus.java
  29. 17 0
      ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/enums/biz/PrintStatus.java

+ 44 - 0
ruoyi-admin/src/main/java/org/dromara/web/controller/EnteralNutritionController.java

@@ -18,6 +18,7 @@ import org.dromara.common.web.core.BaseController;
 import org.dromara.web.domain.bo.EnteralNutritionBo;
 import org.dromara.web.domain.bo.EnteralNutritionSaveBo;
 import org.dromara.web.domain.bo.SettlementBo;
+import org.dromara.web.domain.vo.EnteralNutritionQueryOneVo;
 import org.dromara.web.domain.vo.EnteralNutritionQueryVo;
 import org.dromara.web.domain.vo.EnteralNutritionVo;
 import org.dromara.web.service.IEnteralNutritionService;
@@ -58,6 +59,49 @@ public class EnteralNutritionController extends BaseController {
     }
 
 
+    /**
+     * 查询处方信息列表
+     */
+    @SaCheckPermission("system:nutrition:list")
+    @GetMapping("/enteralNutritionList")
+    public TableDataInfo<EnteralNutritionQueryOneVo> enteralNutritionList(EnteralNutritionBo bo, PageQuery pageQuery) {
+        return enteralNutritionService.queryEnteralNutritionPageList(bo, pageQuery);
+    }
+
+    @SaCheckPermission("system:nutrition:query")
+    @GetMapping("/getBySettlementId")
+    public R<List<EnteralNutritionVo>> getBySettlementId(@RequestParam Long settlementId) {
+        return R.ok(enteralNutritionService.queryBySettlementId(settlementId));
+    }
+
+    @SaCheckPermission("system:nutrition:query")
+    @GetMapping("/queryById")
+    public R<List<EnteralNutritionVo>> queryById(@RequestParam String ids) {
+        return enteralNutritionService.queryById(ids);
+    }
+
+   /*手动配置*/
+    @SaCheckPermission("system:nutrition:edit")
+    @GetMapping("/manualConfig")
+    public R manualConfig(@RequestParam String ids) {
+      return enteralNutritionService.manualConfig(ids);
+    }
+
+    /*执行操作*/
+    @SaCheckPermission("system:nutrition:edit")
+    @GetMapping("/execute")
+    public R execute(@RequestParam String ids) {
+       return enteralNutritionService.execute(ids);
+    }
+
+    /*打印标签*/
+    @SaCheckPermission("system:nutrition:edit")
+    @GetMapping("/tagPrint")
+    public R tagPrint(@RequestParam String ids) {
+        return enteralNutritionService.tagPrint(ids);
+    }
+
+
     /**
      * 查询营养评估列表
      */

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

@@ -6,8 +6,9 @@ import lombok.RequiredArgsConstructor;
 import jakarta.servlet.http.HttpServletResponse;
 import jakarta.validation.constraints.*;
 import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.dromara.web.domain.bo.EnteralNutritionBo;
 import org.dromara.web.domain.bo.HospitalMealPlanBo;
-import org.dromara.web.domain.vo.HospitalMealPlanVo;
+import org.dromara.web.domain.vo.*;
 import org.dromara.web.service.IHospitalMealPlanService;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.validation.annotation.Validated;
@@ -103,4 +104,44 @@ public class HospitalMealPlanController extends BaseController {
                           @PathVariable Long[] ids) {
         return toAjax(hospitalMealPlanService.deleteWithValidByIds(List.of(ids), true));
     }
+
+    /**
+     * 查询膳食处方信息列表
+     */
+    @SaCheckPermission("patients:hospitalMealPlan:list")
+    @GetMapping("/makeRecipeList")
+    public TableDataInfo<HospitalMealPlanQueryVo> queryMakeRecipeListList(EnteralNutritionBo bo, PageQuery pageQuery) {
+        return hospitalMealPlanService.queryHospitalMealPlanList(bo, pageQuery);
+    }
+    @SaCheckPermission("patients:hospitalMealPlan:query")
+    @GetMapping("/getBySettlementId")
+    public R<List<HospitalMealRecipeVo>> getBySettlementId(@RequestParam Long settlementId) {
+        return R.ok(hospitalMealPlanService.queryBySettlementId(settlementId));
+    }
+    @SaCheckPermission("patients:hospitalMealPlan:query")
+    @GetMapping("/queryById")
+    public R<List<HospitalMealRecipeVo>> queryById(@RequestParam String ids) {
+        return hospitalMealPlanService.queryById(ids);
+    }
+
+    /*手动配置*/
+    @SaCheckPermission("patients:hospitalMealPlan:edit")
+    @GetMapping("/manualConfig")
+    public R manualConfig(@RequestParam String ids) {
+        return hospitalMealPlanService.manualConfig(ids);
+    }
+
+    /*执行操作*/
+    @SaCheckPermission("patients:hospitalMealPlan:edit")
+    @GetMapping("/execute")
+    public R execute(@RequestParam String ids) {
+        return hospitalMealPlanService.execute(ids);
+    }
+
+    /*打印标签*/
+    @SaCheckPermission("patients:hospitalMealPlan:edit")
+    @GetMapping("/tagPrint")
+    public R tagPrint(@RequestParam String ids) {
+        return hospitalMealPlanService.tagPrint(ids);
+    }
 }

+ 22 - 0
ruoyi-admin/src/main/java/org/dromara/web/domain/EnteralNutrition.java

@@ -4,6 +4,9 @@ import org.dromara.common.tenant.core.TenantEntity;
 import com.baomidou.mybatisplus.annotation.*;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+
+import java.time.LocalDate;
+import java.time.LocalTime;
 import java.util.Date;
 import com.fasterxml.jackson.annotation.JsonFormat;
 
@@ -150,4 +153,23 @@ public class EnteralNutrition extends TenantEntity {
      * 删除标志(0代表存在 1代表删除)
      */
     private String delFlag;
+
+    /*配置状态 0 未配置 1已配置*/
+    private String configStatus;
+
+    private Date configTime;
+
+    private Long configBy;
+
+    /*执行状态 0 未执行 1已执行*/
+    private String executeStatus;
+
+    private LocalDate executeDate;
+
+    private LocalTime executeTime;
+
+    private Long executeBy;
+
+    /*标签打印数量*/
+    private Integer tagPrintNum;
 }

+ 3 - 0
ruoyi-admin/src/main/java/org/dromara/web/domain/HospitalMealPlan.java

@@ -31,6 +31,9 @@ public class HospitalMealPlan extends TenantEntity {
     @TableId(value = "id")
     private Long id;
 
+    /*结算管理Id*/
+    private Long settlementId;
+
     /**
      * 看诊类型
      */

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

@@ -4,6 +4,9 @@ import org.dromara.common.tenant.core.TenantEntity;
 import com.baomidou.mybatisplus.annotation.*;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+
+import java.time.LocalDate;
+import java.time.LocalTime;
 import java.util.Date;
 import com.fasterxml.jackson.annotation.JsonFormat;
 
@@ -95,5 +98,23 @@ public class HospitalMealRecipe extends TenantEntity {
     @TableLogic
     private String delFlag;
 
+    /*制餐状态 0 未配餐 1已配餐*/
+    private String makeStatus;
+
+    private Date makeTime;
+
+    private Long makeBy;
+
+    /*执行状态 0 未执行 1已执行*/
+    private String executeStatus;
+
+    private LocalDate executeDate;
+
+    private LocalTime executeTime;
+
+    private Long executeBy;
+
+    /*标签打印数量*/
+    private Integer tagPrintNum;
 
 }

+ 35 - 0
ruoyi-admin/src/main/java/org/dromara/web/domain/bo/EnteralNutritionBo.java

@@ -9,6 +9,8 @@ import jakarta.validation.constraints.*;
 import org.dromara.web.domain.EnteralNutrition;
 
 import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalTime;
 import java.util.Date;
 import java.util.List;
 
@@ -145,5 +147,38 @@ public class EnteralNutritionBo extends BaseEntity {
      */
     private String status;
 
+    /*配置状态 0 未配置 1已配置*/
+    private String configStatus;
+
+    private String makeStatus;
+
+    private String paymentStatus;
+
+    private Date configTime;
+
+    private Long configBy;
+
+    /*执行状态 0 未执行 1已执行*/
+    private String executeStatus;
+
+    private LocalDate executeDate;
+
+    private LocalTime executeTime;
+
+    private Long executeBy;
+
+    /*标签打印数量*/
+    private Integer tagPrintNum;
+
     private List<EnteralNutritionBo> products;
+
+    private Long doorId;
+
+    private String visitType;
+
+    private Long wardId;
+
+    List<Date>executeDateRange;
+
+    List<Date>prescriptionDateRange;
 }

+ 2 - 0
ruoyi-admin/src/main/java/org/dromara/web/domain/bo/HospitalMealPlanBo.java

@@ -32,6 +32,8 @@ public class HospitalMealPlanBo extends BaseEntity {
     @NotNull(message = "主键不能为空", groups = {EditGroup.class})
     private Long id;
 
+    private Long settlementId;
+
     /**
      * 看诊类型
      */

+ 25 - 0
ruoyi-admin/src/main/java/org/dromara/web/domain/bo/HospitalMealRecipeBo.java

@@ -8,6 +8,8 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 import jakarta.validation.constraints.*;
 
+import java.time.LocalDate;
+import java.time.LocalTime;
 import java.util.Date;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
@@ -93,5 +95,28 @@ public class HospitalMealRecipeBo extends BaseEntity {
      */
     private Long price;
 
+    /*制餐状态 0 未配餐 1已配餐*/
+    private String makeStatus;
+
+    private Date makeTime;
+
+    private Long makeBy;
+
+    /*执行状态 0 未执行 1已执行*/
+    private String executeStatus;
+
+    private LocalDate executeDate;
+
+    private LocalTime executeTime;
+
+    private Long executeBy;
+
+    /*标签打印数量*/
+    private Integer tagPrintNum;
+
+    private String makeByName;
+
+    private String executeByName;
+
 
 }

+ 2 - 0
ruoyi-admin/src/main/java/org/dromara/web/domain/vo/ChargeRecordVo.java

@@ -175,6 +175,8 @@ public class ChargeRecordVo implements Serializable {
     /*营养配置费用*/
     private BigDecimal prescriptionFee;
 
+    private List<HospitalMealRecipeVo>hospitalMealRecipeList;
+
     /*肠内营养*/
     private List<EnteralNutritionVo> enteralNutritionList;
     /*营养筛查数据*/

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

@@ -0,0 +1,111 @@
+package org.dromara.web.domain.vo;
+
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import org.dromara.web.domain.EnteralNutrition;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalTime;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ *
+ * @author Lion Li
+ * @date 2025-08-12
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = EnteralNutrition.class)
+public class EnteralNutritionQueryOneVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    private Long id;
+    /**
+     * 结算管理id
+     */
+    private Long settlementId;
+
+    private Date orderTime;
+
+    private String chargeType;
+
+    private String chargeTypeMame;
+
+    private String paymentStatus;
+
+    private String createByName;
+
+    private Boolean stopFlag;
+
+    private Boolean delFlag;
+
+    /*处方明细*/
+    private String productName;
+
+    private Date prescriptionDate;
+
+    private String groupNo;
+
+    private Date stopDate;
+
+    private LocalDate executeDate;
+
+    private LocalTime executeTime;
+
+    private String nutritionProduct;
+
+    private String executeStatus;
+
+    private long executeBy;
+
+    private String executeByName;
+
+    private Integer tagPrintNum;
+
+    private String configStatus;
+
+    private Date configTime;
+
+    private Long configBy;
+
+    private String configByName;
+
+    private String patientDepartment;
+
+    private String patientNo;
+
+    private String idCard;
+
+    private String visitType;
+
+    private String bedNo;
+
+    private String wardName;
+
+    private String treatNum;
+
+    private String idStr;
+
+    private String mealTime;
+
+    private Long patientId;
+
+    private String patientName;
+
+
+    /**
+     * 状态(0正常 1停用 2草稿)
+     */
+    private String status;
+
+
+
+}

+ 3 - 0
ruoyi-admin/src/main/java/org/dromara/web/domain/vo/EnteralNutritionQueryVo.java

@@ -50,6 +50,9 @@ public class EnteralNutritionQueryVo implements Serializable {
 
     private Boolean delFlag;
 
+    /*处方明细*/
+    private String productName;
+
     /**
      * 状态(0正常 1停用 2草稿)
      */

+ 32 - 0
ruoyi-admin/src/main/java/org/dromara/web/domain/vo/EnteralNutritionVo.java

@@ -1,6 +1,8 @@
 package org.dromara.web.domain.vo;
 
 import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalTime;
 import java.util.Date;
 
 import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
@@ -10,6 +12,7 @@ import org.dromara.common.excel.convert.ExcelDictConvert;
 import io.github.linpeilie.annotations.AutoMapper;
 import lombok.Data;
 import org.dromara.web.domain.EnteralNutrition;
+import org.dromara.web.domain.TreatmentUser;
 
 import java.io.Serial;
 import java.io.Serializable;
@@ -185,4 +188,33 @@ public class EnteralNutritionVo implements Serializable {
 
     private BigDecimal salePrice;
 
+    /*配置状态 0 未配置 1已配置*/
+    private String configStatus;
+
+    private Date configTime;
+
+    private Long configBy;
+
+    /*执行状态 0 未执行 1已执行*/
+    private String executeStatus;
+
+    private LocalDate executeDate;
+
+    private LocalTime executeTime;
+
+    private Long executeBy;
+
+    /*标签打印数量*/
+    private Integer tagPrintNum;
+
+    private String configByName;
+
+    private String executeByName;
+
+    private String paymentStatus;
+
+    private String idStr;
+
+    private TreatmentUser patient;
+
 }

+ 117 - 0
ruoyi-admin/src/main/java/org/dromara/web/domain/vo/HospitalMealPlanQueryVo.java

@@ -0,0 +1,117 @@
+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.HospitalMealPlan;
+import org.dromara.web.domain.HospitalMealRecipe;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.sql.Time;
+import java.time.LocalDate;
+import java.time.LocalTime;
+import java.util.Date;
+import java.util.List;
+
+
+/**
+ * 院内膳食主视图对象 hospital_meal_plan
+ *
+ * @author Lion Li
+ * @date 2025-07-23
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = HospitalMealRecipe.class)
+public class HospitalMealPlanQueryVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    private Long id;
+    /**
+     * 结算管理id
+     */
+    private Long settlementId;
+
+    private Date orderTime;
+
+    private String chargeType;
+
+    private String chargeTypeMame;
+
+    private String paymentStatus;
+
+    private String createByName;
+
+    private Boolean stopFlag;
+
+    private Boolean delFlag;
+
+    /*处方明细*/
+    private String productName;
+
+    private Date prescriptionDate;
+
+    private String recipeNo;
+
+    private LocalDate executeDate;
+
+    private LocalTime executeTime;
+
+    private String nutritionProduct;
+
+    private String executeStatus;
+
+    private long executeBy;
+
+    private String executeByName;
+
+    private Integer tagPrintNum;
+
+    private String makeStatus;
+
+    private Date makeTime;
+
+    private Long makeBy;
+
+    private String makeByName;
+
+    private String patientDepartment;
+
+    private String patientNo;
+
+    private String idCard;
+
+    private String visitType;
+
+    private String bedNo;
+
+    private String wardName;
+
+    private String treatNum;
+
+    private String idStr;
+
+    private String mealTime;
+
+    private Long patientId;
+
+    private String patientName;
+
+    private Date eatTime;
+
+    private LocalDate recommendStartDate;
+
+    private LocalDate recommendEndDate;
+
+    /**
+     * 状态(0正常 1停用 2草稿)
+     */
+    private String status;
+
+
+}

+ 3 - 0
ruoyi-admin/src/main/java/org/dromara/web/domain/vo/HospitalMealPlanVo.java

@@ -38,6 +38,9 @@ public class HospitalMealPlanVo implements Serializable {
     @ExcelProperty(value = "主键")
     private Long id;
 
+    /*结算管理Id*/
+    private Long settlementId;
+
     /**
      * 看诊类型
      */

+ 31 - 0
ruoyi-admin/src/main/java/org/dromara/web/domain/vo/HospitalMealRecipeVo.java

@@ -1,5 +1,7 @@
 package org.dromara.web.domain.vo;
 
+import java.time.LocalDate;
+import java.time.LocalTime;
 import java.util.Date;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
@@ -9,6 +11,7 @@ import org.dromara.common.excel.convert.ExcelDictConvert;
 import io.github.linpeilie.annotations.AutoMapper;
 import lombok.Data;
 import org.dromara.web.domain.HospitalMealRecipe;
+import org.dromara.web.domain.TreatmentUser;
 
 import java.io.Serial;
 import java.io.Serializable;
@@ -108,5 +111,33 @@ public class HospitalMealRecipeVo implements Serializable {
     @ExcelProperty(value = "金额")
     private Long price;
 
+    /*制餐状态 0 未配餐 1已配餐*/
+    private String makeStatus;
+
+    private Date makeTime;
+
+    private Long makeBy;
+
+    /*执行状态 0 未执行 1已执行*/
+    private String executeStatus;
+
+    private LocalDate executeDate;
+
+    private LocalTime executeTime;
+
+    private Long executeBy;
+
+    /*标签打印数量*/
+    private Integer tagPrintNum;
+
+    private String makeByName;
+
+    private String executeByName;
+
+    private Long createBy;
+
+    private String createByName;
+
+    private String idStr;
 
 }

+ 8 - 0
ruoyi-admin/src/main/java/org/dromara/web/domain/vo/SettlementVo.java

@@ -1,6 +1,7 @@
 package org.dromara.web.domain.vo;
 
 import java.math.BigDecimal;
+import java.time.LocalDate;
 import java.util.Date;
 
 import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
@@ -146,9 +147,16 @@ public class SettlementVo implements Serializable {
 
     private String remark;
 
+    private Date recommendStartDate;
+
+    private Date recommendEndDate;
+
     /*营养配置费用*/
     private BigDecimal prescriptionFee;
 
+    /*院内膳食*/
+    List<HospitalMealRecipeVo> hospitalMealRecipeList;
+
     /*肠内营养*/
     private List<EnteralNutritionVo> enteralNutritionList;
     /*营养筛查数据*/

+ 98 - 0
ruoyi-admin/src/main/java/org/dromara/web/mapper/EnteralNutritionMapper.java

@@ -1,7 +1,10 @@
 package org.dromara.web.mapper;
 
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
 import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
 import org.dromara.web.domain.EnteralNutrition;
+import org.dromara.web.domain.vo.EnteralNutritionQueryOneVo;
 import org.dromara.web.domain.vo.EnteralNutritionVo;
 
 import java.util.List;
@@ -13,4 +16,99 @@ import java.util.List;
  * @date 2025-07-22
  */
 public interface EnteralNutritionMapper extends BaseMapperPlus<EnteralNutrition, EnteralNutritionVo> {
+
+    @Select("<script>" +
+        "SELECT " +
+        "   MIN(en.id) AS id, " +
+        "   en.settlement_id AS settlementId, " +
+        "   GROUP_CONCAT(DISTINCT en.id) AS idStr, " +
+        "   GROUP_CONCAT(DISTINCT en.nutrition_product) AS productName, " +
+        "   MIN(en.prescription_date) AS prescriptionDate, " +
+        "   en.group_no AS groupNo, " +
+        "   MIN(en.execute_date) AS executeDate, " +
+        "   MIN(en.meal_time) AS mealTime, " +
+        "   MIN(en.execute_time) AS executeTime, " +
+        "   MIN(se.payment_status) AS paymentStatus, " +
+        "   MIN(en.execute_status) AS executeStatus, " +
+        "   MIN(en.stop_date) AS stopDate, " +
+        "   MIN(en.config_status) AS configStatus, " +
+        "   MIN(en.config_time) AS configTime, " +
+        "   MIN(en.config_by) AS configBy, " +
+        "   MIN(en.execute_by) AS executeBy, " +
+        "   MIN(en.tag_print_num) AS tagPrintNum, " +
+        "   MIN(sd.dept_name) AS patientDepartment, " +
+        "   MIN(se.visit_type) AS visitType, " +
+        "   MIN(tu.id_card) AS idCard, " +
+        "   MIN(tu.outpatient_no) AS patientNo, " +
+        "   MIN(tu.bed_no) AS bedNo, " +
+        "   MIN(tu.ward_name) AS wardName, " +
+        "   MIN(tu.treat_num) AS treatNum, " +
+        "   MIN(su.user_name) AS configByName, " +
+        "   MIN(syu.user_name) AS executeByName, " +
+        "   MIN(tu.treat_name) AS patientName, " +
+        "   MIN(se.stop_date) AS stopDate, " +
+        "   MIN(se.patient_id) AS patientId, " +
+        "   MIN(en.del_flag) AS delFlag " +
+        "FROM enteral_nutrition en " +
+        "LEFT JOIN settlement se ON en.settlement_id = se.id AND IFNULL(se.del_Flag, '0') != '1' " +
+        "LEFT JOIN sys_user su ON en.config_by = su.user_id AND IFNULL(su.del_Flag, '0') != '1' " +
+        "LEFT JOIN sys_user syu ON en.execute_by = syu.user_id AND IFNULL(syu.del_Flag, '0') != '1' " +
+        "LEFT JOIN treatment_user tu ON se.patient_id = tu.id AND IFNULL(tu.del_Flag, '0') != '1' " +
+        "LEFT JOIN sys_dept sd ON se.door_id = sd.dept_id AND IFNULL(sd.del_Flag, '0') != '1' " +
+        "WHERE 1 = 1 " +
+        "<if test='prescriptionType != null and prescriptionType != \"\"'> and en.prescription_type = #{prescriptionType} </if> " +
+        "<if test='visitType != null and visitType != \"\"'> and se.visit_type = #{visitType} </if> " +
+        "<if test='configStatus != null and configStatus != \"\"'> and en.config_status = #{configStatus} </if> " +
+        "<if test='paymentStatus != null and paymentStatus != \"\"'> and se.payment_status = #{paymentStatus} </if> " +
+        "<if test='executeStatus != null and executeStatus != \"\"'> and en.execute_status = #{executeStatus} </if> " +
+        "<if test='doorId != null '> and se.door_id = #{doorId} </if> " +
+        "<if test='wardId != null '> and se.ward_id = #{wardId} </if> " +
+        "<if test='searchValue != null and searchValue != \"\"'> and (tu.treat_num like concat('%', #{searchValue}, '%') " +
+        "or tu.treat_name like concat('%', #{searchValue}, '%') or tu.id_card like concat('%', #{searchValue}, '%')" +
+        "or tu.outpatient_no like concat('%', #{searchValue}, '%') or en.settlement_id like concat('%', #{searchValue}, '%')) </if> " +
+        "<if test='beginTime != null'> and en.prescription_date <![CDATA[>=]]> #{beginTime} </if>" +
+        "<if test='endTime != null'> and en.prescription_date <![CDATA[<=]]> #{endTime} </if>" +
+        "<if test='exeBeginTime != null'> and en.execute_date <![CDATA[>=]]> #{exeBeginTime} </if>" +
+        "<if test='exeEndTime != null'> and en.execute_date <![CDATA[<=]]> #{exeEndTime} </if>" +
+        "GROUP BY en.settlement_id, en.group_no " +
+        "ORDER BY MIN(en.create_time) DESC " +
+        "<if test='offset != null and rows != null'>LIMIT #{offset}, #{rows}</if>" +
+        "</script>")
+    List<EnteralNutritionQueryOneVo> queryPageVoList(@Param("prescriptionType") String prescriptionType, @Param("visitType") String visitType, @Param("configStatus") String configStatus,
+                                                     @Param("paymentStatus") String paymentStatus, @Param("executeStatus") String executeStatus, @Param("doorId") Long doorId,
+                                                     @Param("wardId") Long wardId, @Param("searchValue") String searchValue, @Param("beginTime") String beginTime,
+                                                     @Param("endTime") String endTime, @Param("exeBeginTime") String exeBeginTime,
+                                                     @Param("exeEndTime") String exeEndTime, @Param("offset") Integer offset, @Param("rows") Integer rows);
+
+    @Select("<script>" +
+        "SELECT COUNT(*) FROM ( SELECT 1 FROM enteral_nutrition en " +
+        "LEFT JOIN settlement se ON en.settlement_id = se.id AND IFNULL(se.del_Flag, '0') != '1' " +
+        "LEFT JOIN sys_user su ON en.config_by = su.user_id AND IFNULL(su.del_Flag, '0') != '1' " +
+        "LEFT JOIN sys_user syu ON en.execute_by = syu.user_id AND IFNULL(syu.del_Flag, '0') != '1' " +
+        "LEFT JOIN treatment_user tu ON se.patient_id = tu.id AND IFNULL(tu.del_Flag, '0') != '1' " +
+        "LEFT JOIN sys_dept sd ON se.door_id = sd.dept_id AND IFNULL(sd.del_Flag, '0') != '1' " +
+        "WHERE 1 = 1 " +
+        "<if test='prescriptionType != null and prescriptionType != \"\"'> and en.prescription_type = #{prescriptionType} </if> " +
+        "<if test='visitType != null and visitType != \"\"'> and se.visit_type = #{visitType} </if> " +
+        "<if test='configStatus != null and configStatus != \"\"'> and en.config_status = #{configStatus} </if> " +
+        "<if test='paymentStatus != null and paymentStatus != \"\"'> and se.payment_status = #{paymentStatus} </if> " +
+        "<if test='executeStatus != null and executeStatus != \"\"'> and en.execute_status = #{executeStatus} </if> " +
+        "<if test='doorId != null '> and se.door_id = #{doorId} </if> " +
+        "<if test='wardId != null '> and se.ward_id = #{wardId} </if> " +
+        "<if test='searchValue != null and searchValue != \"\"'> and (tu.treat_num like concat('%', #{searchValue}, '%') " +
+        "or tu.treat_name like concat('%', #{searchValue}, '%') or tu.id_card like concat('%', #{searchValue}, '%')" +
+        "or tu.outpatient_no like concat('%', #{searchValue}, '%') or en.settlement_id like concat('%', #{searchValue}, '%')) </if> " +
+        "<if test='beginTime != null'> and en.prescription_date <![CDATA[>=]]> #{beginTime} </if>" +
+        "<if test='endTime != null'> and en.prescription_date <![CDATA[<=]]> #{endTime} </if>" +
+        "<if test='exeBeginTime != null'> and en.execute_date <![CDATA[>=]]> #{exeBeginTime} </if>" +
+        "<if test='exeEndTime != null'> and en.execute_date <![CDATA[<=]]> #{exeEndTime} </if>" +
+        "GROUP BY en.settlement_id, en.group_no ) t" +
+        "</script>")
+    Integer queryPageVoCount(@Param("prescriptionType") String prescriptionType, @Param("visitType") String visitType, @Param("configStatus") String configStatus,
+                             @Param("paymentStatus") String paymentStatus, @Param("executeStatus") String executeStatus, @Param("doorId") Long doorId,
+                             @Param("wardId") Long wardId, @Param("searchValue") String searchValue, @Param("beginTime") String beginTime,
+                             @Param("endTime") String endTime, @Param("exeBeginTime") String exeBeginTime,
+                             @Param("exeEndTime") String exeEndTime);
+
+
 }

+ 102 - 0
ruoyi-admin/src/main/java/org/dromara/web/mapper/HospitalMealPlanMapper.java

@@ -1,11 +1,17 @@
 package org.dromara.web.mapper;
 
 
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
 import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
 import org.dromara.web.domain.HospitalMealPlan;
+import org.dromara.web.domain.vo.EnteralNutritionQueryOneVo;
+import org.dromara.web.domain.vo.HospitalMealPlanQueryVo;
 import org.dromara.web.domain.vo.HospitalMealPlanVo;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
 /**
  * 院内膳食主Mapper接口
  *
@@ -15,4 +21,100 @@ import org.springframework.stereotype.Repository;
 @Repository
 public interface HospitalMealPlanMapper extends BaseMapperPlus<HospitalMealPlan, HospitalMealPlanVo> {
 
+    @Select("<script>" +
+        "SELECT  " +
+        "    MIN(hmr.id) AS id, " +
+        "    hmp.settlement_id AS settlementId, " +
+        "    GROUP_CONCAT(DISTINCT hmr.id) AS idStr, " +
+        "    GROUP_CONCAT(DISTINCT hmr.food_name) AS productName, " +
+        "    MIN(hmr.create_time) AS prescriptionDate, " +
+        "    hmr.recipe_no AS recipeNo, " +
+        "    MIN(hmr.execute_date) AS executeDate, " +
+        "    MIN(hmr.meal_time) AS mealTime, " +
+        "    hmr.eat_time AS eatTime, " +
+        "    MIN(hmr.execute_time) AS executeTime, " +
+        "    MIN(se.payment_status) AS paymentStatus, " +
+        "    MIN(hmr.execute_status) AS executeStatus, " +
+        "    MIN(hmr.make_status) AS makeStatus, " +
+        "    MIN(hmr.make_time) AS makeTime, " +
+        "    MIN(hmr.make_by) AS makeBy, " +
+        "    MIN(hmr.execute_by) AS executeBy, " +
+        "    MIN(hmr.tag_print_num) AS tagPrintNum, " +
+        "    MIN(sd.dept_name) AS patientDepartment, " +
+        "    MIN(se.visit_type) AS visitType, " +
+        "    MIN(tu.id_card) AS idCard, " +
+        "    MIN(tu.outpatient_no) AS patientNo, " +
+        "    MIN(tu.bed_no) AS bedNo, " +
+        "    MIN(tu.ward_name) AS wardName, " +
+        "    MIN(tu.treat_num) AS treatNum, " +
+        "    MIN(su.user_name) AS makeByName, " +
+        "    MIN(syu.user_name) AS executeByName, " +
+        "    MIN(tu.treat_name) AS patientName, " +
+        "    MIN(se.stop_date) AS stopDate, " +
+        "    MIN(se.patient_id) AS patientId, " +
+        "    MIN(hmp.recommend_start_date) AS recommendStartDate, " +
+        "    MIN(hmp.recommend_end_date) AS recommendEndDate, " +
+        "    MIN(hmr.del_flag) AS delFlag " +
+        "FROM hospital_meal_recipe hmr " +
+        "LEFT JOIN hospital_meal_plan hmp ON hmr.plan_id = hmp.id AND IFNULL(hmp.del_Flag, '0') != '1' " +
+        "LEFT JOIN settlement se ON hmp.settlement_id = se.id AND IFNULL(se.del_Flag, '0') != '1' " +
+        "LEFT JOIN sys_user su ON hmr.make_by = su.user_id AND IFNULL(su.del_Flag, '0') != '1' " +
+        "LEFT JOIN sys_user syu ON hmr.execute_by = syu.user_id AND IFNULL(syu.del_Flag, '0') != '1' " +
+        "LEFT JOIN treatment_user tu ON se.patient_id = tu.id AND IFNULL(tu.del_Flag, '0') != '1' " +
+        "LEFT JOIN sys_dept sd ON se.door_id = sd.dept_id AND IFNULL(sd.del_Flag, '0') != '1' " +
+        "WHERE 1 = 1 " +
+        "<if test='prescriptionType != null and prescriptionType != \"\"'> and se.charge_type = #{prescriptionType} </if> " +
+        "<if test='visitType != null and visitType != \"\"'> and se.visit_type = #{visitType} </if> " +
+        "<if test='makeStatus != null and makeStatus != \"\"'> and hmr.make_status = #{makeStatus} </if> " +
+        "<if test='paymentStatus != null and paymentStatus != \"\"'> and se.payment_status = #{paymentStatus} </if> " +
+        "<if test='executeStatus != null and executeStatus != \"\"'> and hmr.execute_status = #{executeStatus} </if> " +
+        "<if test='doorId != null'> and se.door_id = #{doorId} </if> " +
+        "<if test='wardId != null'> and se.ward_id = #{wardId} </if> " +
+        "<if test='searchValue != null and searchValue != \"\"'> and (tu.treat_num like concat('%', #{searchValue}, '%') " +
+        "or tu.treat_name like concat('%', #{searchValue}, '%') or tu.id_card like concat('%', #{searchValue}, '%') " +
+        "or tu.outpatient_no like concat('%', #{searchValue}, '%') or hmp.settlement_id like concat('%', #{searchValue}, '%')) </if> " +
+        "<if test='beginTime != null'> and hmr.create_time <![CDATA[>=]]> #{beginTime} </if> " +
+        "<if test='endTime != null'> and hmr.create_time <![CDATA[<=]]> #{endTime} </if> " +
+        "<if test='exeBeginTime != null'> and hmr.execute_date <![CDATA[>=]]> #{exeBeginTime} </if> " +
+        "<if test='exeEndTime != null'> and hmr.execute_date <![CDATA[<=]]> #{exeEndTime} </if> " +
+        "GROUP BY hmr.plan_id, hmr.recipe_no, hmp.settlement_id, hmr.eat_time " +
+        "ORDER BY MIN(hmr.create_time) DESC " +
+        "<if test='offset != null and rows != null'>LIMIT #{offset}, #{rows}</if>" +
+        "</script>")
+    List<HospitalMealPlanQueryVo> queryPageVoList(@Param("prescriptionType") String prescriptionType, @Param("visitType") String visitType, @Param("makeStatus") String makeStatus,
+                                                  @Param("paymentStatus") String paymentStatus, @Param("executeStatus") String executeStatus, @Param("doorId") Long doorId,
+                                                  @Param("wardId") Long wardId, @Param("searchValue") String searchValue, @Param("beginTime") String beginTime,
+                                                  @Param("endTime") String endTime, @Param("exeBeginTime") String exeBeginTime,
+                                                  @Param("exeEndTime") String exeEndTime, @Param("offset") Integer offset, @Param("rows") Integer rows);
+
+    @Select("<script>" +
+        "SELECT COUNT(*) FROM ( SELECT 1 FROM hospital_meal_recipe hmr " +
+        "LEFT JOIN hospital_meal_plan hmp ON hmr.plan_id = hmp.id AND IFNULL(hmp.del_Flag, '0') != '1' " +
+        "LEFT JOIN settlement se ON hmp.settlement_id = se.id AND IFNULL(se.del_Flag, '0') != '1' " +
+        "LEFT JOIN sys_user su ON hmr.make_by = su.user_id AND IFNULL(su.del_Flag, '0') != '1' " +
+        "LEFT JOIN sys_user syu ON hmr.execute_by = syu.user_id AND IFNULL(syu.del_Flag, '0') != '1' " +
+        "LEFT JOIN treatment_user tu ON se.patient_id = tu.id AND IFNULL(tu.del_Flag, '0') != '1' " +
+        "LEFT JOIN sys_dept sd ON se.door_id = sd.dept_id AND IFNULL(sd.del_Flag, '0') != '1' " +
+        "WHERE 1 = 1 " +
+        "<if test='prescriptionType != null and prescriptionType != \"\"'> and se.charge_type = #{prescriptionType} </if> " +
+        "<if test='visitType != null and visitType != \"\"'> and se.visit_type = #{visitType} </if> " +
+        "<if test='makeStatus != null and makeStatus != \"\"'> and hmr.make_status = #{makeStatus} </if> " +
+        "<if test='paymentStatus != null and paymentStatus != \"\"'> and se.payment_status = #{paymentStatus} </if> " +
+        "<if test='executeStatus != null and executeStatus != \"\"'> and hmr.execute_status = #{executeStatus} </if> " +
+        "<if test='doorId != null '> and se.door_id = #{doorId} </if> " +
+        "<if test='wardId != null '> and se.ward_id = #{wardId} </if> " +
+        "<if test='searchValue != null and searchValue != \"\"'> and (tu.treat_num like concat('%', #{searchValue}, '%') " +
+        "or tu.treat_name like concat('%', #{searchValue}, '%') or tu.id_card like concat('%', #{searchValue}, '%')" +
+        "or tu.outpatient_no like concat('%', #{searchValue}, '%') or hmp.settlement_id like concat('%', #{searchValue}, '%')) </if> " +
+        "<if test='beginTime != null'> and hmr.create_time <![CDATA[>=]]> #{beginTime} </if>" +
+        "<if test='endTime != null'> and hmr.create_time <![CDATA[<=]]> #{endTime} </if>" +
+        "<if test='exeBeginTime != null'> and hmr.execute_date <![CDATA[>=]]> #{exeBeginTime} </if>" +
+        "<if test='exeEndTime != null'> and hmr.execute_date <![CDATA[<=]]> #{exeEndTime} </if>" +
+        "GROUP BY hmr.plan_id, hmr.recipe_no,hmp.settlement_id, hmr.eat_time ) t" +
+        "</script>")
+    Integer queryPageVoCount(@Param("prescriptionType") String prescriptionType, @Param("visitType") String visitType, @Param("makeStatus") String makeStatus,
+                             @Param("paymentStatus") String paymentStatus, @Param("executeStatus") String executeStatus, @Param("doorId") Long doorId,
+                             @Param("wardId") Long wardId, @Param("searchValue") String searchValue, @Param("beginTime") String beginTime,
+                             @Param("endTime") String endTime, @Param("exeBeginTime") String exeBeginTime,
+                             @Param("exeEndTime") String exeEndTime);
 }

+ 19 - 0
ruoyi-admin/src/main/java/org/dromara/web/service/IEnteralNutritionService.java

@@ -6,8 +6,10 @@ import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.web.domain.bo.EnteralNutritionBo;
 import org.dromara.web.domain.bo.EnteralNutritionSaveBo;
 import org.dromara.web.domain.bo.SettlementBo;
+import org.dromara.web.domain.vo.EnteralNutritionQueryOneVo;
 import org.dromara.web.domain.vo.EnteralNutritionQueryVo;
 import org.dromara.web.domain.vo.EnteralNutritionVo;
+import org.dromara.web.domain.vo.SettlementVo;
 
 import java.util.Collection;
 import java.util.List;
@@ -41,6 +43,17 @@ public interface IEnteralNutritionService {
 
     R<EnteralNutritionQueryVo> detail(Long id);
 
+    List<EnteralNutritionVo> queryBySettlementId(Long id);
+    R<List<EnteralNutritionVo>> queryById(String ids);
+    //手动配置
+    R manualConfig(String ids);
+
+    //执行操作
+    R execute(String ids);
+
+    //执行操作
+    R tagPrint(String ids);
+
     /**
      * 查询符合条件的肠内营养列表
      *
@@ -73,4 +86,10 @@ public interface IEnteralNutritionService {
      * @return 是否删除成功
      */
     Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+
+
+    TableDataInfo<EnteralNutritionQueryOneVo> queryEnteralNutritionPageList(EnteralNutritionBo bo, PageQuery pageQuery);
+
+
+
 }

+ 24 - 1
ruoyi-admin/src/main/java/org/dromara/web/service/IHospitalMealPlanService.java

@@ -1,10 +1,12 @@
 package org.dromara.web.service;
 
 
+import org.dromara.common.core.domain.R;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
 import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.web.domain.bo.EnteralNutritionBo;
 import org.dromara.web.domain.bo.HospitalMealPlanBo;
-import org.dromara.web.domain.vo.HospitalMealPlanVo;
+import org.dromara.web.domain.vo.*;
 
 import java.util.Collection;
 import java.util.List;
@@ -66,4 +68,25 @@ public interface IHospitalMealPlanService {
      * @return 是否删除成功
      */
     Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+
+    List<HospitalMealRecipeVo> queryBySettlementId(Long id);
+    R<List<HospitalMealRecipeVo>> queryById(String ids);
+    //手动配置
+    R manualConfig(String ids);
+
+    //执行操作
+    R execute(String ids);
+
+    //执行操作
+    R tagPrint(String ids);
+
+    /**
+     * 查询符合条件的肠内营养列表
+     *
+     * @param bo 查询条件
+     * @return 肠内营养列表
+     */
+    List<HospitalMealRecipeVo> queryList(EnteralNutritionBo bo);
+
+    TableDataInfo<HospitalMealPlanQueryVo> queryHospitalMealPlanList(EnteralNutritionBo bo, PageQuery pageQuery);
 }

+ 14 - 0
ruoyi-admin/src/main/java/org/dromara/web/service/impl/ChargeRecordServiceImpl.java

@@ -7,6 +7,7 @@ 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.constant.BizConst;
 import org.dromara.common.core.enums.biz.ActionStatus;
 import org.dromara.common.core.enums.biz.FeeType;
 import org.dromara.common.core.enums.biz.PaymentStatus;
@@ -62,6 +63,10 @@ public class ChargeRecordServiceImpl implements IChargeRecordService {
 
     private final ProductNutritionMapper productNutritionMapper;
 
+    private final HospitalMealPlanMapper mealPlanMapper;
+
+    private final HospitalMealRecipeMapper mealRecipeMapper;
+
     /**
      * 查询收费记录
      *
@@ -113,6 +118,15 @@ public class ChargeRecordServiceImpl implements IChargeRecordService {
                     v.setCreateByName(userMap.get(v.getCreateBy()));
                 });
                 chargeRecordVo.setNutritionEvaluationList(nutritionEvaluationVos);
+
+                List<HospitalMealPlanVo> hospitalMealPlanVos = mealPlanMapper.selectVoList(new LambdaQueryWrapper<HospitalMealPlan>().eq(HospitalMealPlan::getSettlementId, settlementVo.getId()));
+                if (CollUtil.isNotEmpty(hospitalMealPlanVos)) {
+                    List<HospitalMealRecipeVo> hospitalMealRecipeVos = mealRecipeMapper.selectVoList(new LambdaQueryWrapper<HospitalMealRecipe>().eq(HospitalMealRecipe::getPlanId, hospitalMealPlanVos.get(0).getId()));
+                    hospitalMealRecipeVos.forEach(v -> {
+                        v.setCreateByName(userMap.get(v.getCreateBy()));
+                    });
+                    chargeRecordVo.setHospitalMealRecipeList(hospitalMealRecipeVos);
+                }
             }
             List<ChargeRecordLogVo> chargeRecordLogs = logMapper.selectVoList(new LambdaQueryWrapper<ChargeRecordLog>().eq(ChargeRecordLog::getChargeRecordId, chargeRecordVo.getId()));
             chargeRecordLogs.forEach(v -> {

+ 209 - 70
ruoyi-admin/src/main/java/org/dromara/web/service/impl/EnteralNutritionServiceImpl.java

@@ -12,51 +12,36 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.dromara.common.core.constant.BizConst;
 import org.dromara.common.core.domain.R;
-import org.dromara.common.core.enums.biz.DelFlag;
-import org.dromara.common.core.enums.biz.FeeType;
-import org.dromara.common.core.enums.biz.PaymentStatus;
+import org.dromara.common.core.enums.biz.*;
 import org.dromara.common.core.exception.ServiceException;
 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.common.satoken.utils.LoginHelper;
 import org.dromara.system.domain.SysUser;
 import org.dromara.system.domain.vo.SysDictDataVo;
+import org.dromara.system.mapper.SysDeptMapper;
 import org.dromara.system.mapper.SysUserMapper;
 import org.dromara.system.service.ISysDictDataService;
-import org.dromara.web.domain.EnteralNutrition;
-import org.dromara.web.domain.EnteralNutritionConsumable;
-import org.dromara.web.domain.ProductNutrition;
-import org.dromara.web.domain.Settlement;
-import org.dromara.web.domain.SuppliesManage;
-import org.dromara.web.domain.TreatmentUser;
+import org.dromara.web.domain.*;
 import org.dromara.web.domain.bo.EnteralNutritionBo;
 import org.dromara.web.domain.bo.EnteralNutritionConsumableBo;
 import org.dromara.web.domain.bo.EnteralNutritionSaveBo;
 import org.dromara.web.domain.bo.SettlementBo;
-import org.dromara.web.domain.vo.EnteralNutritionConsumableVo;
-import org.dromara.web.domain.vo.EnteralNutritionQueryVo;
-import org.dromara.web.domain.vo.EnteralNutritionVo;
-import org.dromara.web.domain.vo.ProductNutritionVo;
-import org.dromara.web.mapper.EnteralNutritionConsumableMapper;
-import org.dromara.web.mapper.EnteralNutritionMapper;
-import org.dromara.web.mapper.ProductNutritionMapper;
-import org.dromara.web.mapper.SettlementMapper;
-import org.dromara.web.mapper.SuppliesManageMapper;
-import org.dromara.web.mapper.TreatmentUserMapper;
+import org.dromara.web.domain.vo.*;
+import org.dromara.web.mapper.*;
 import org.dromara.web.service.IEnteralNutritionService;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.Set;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.LocalTime;
+import java.util.*;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * 肠内营养Service业务层处理
@@ -78,6 +63,9 @@ public class EnteralNutritionServiceImpl implements IEnteralNutritionService {
     private final SysUserMapper userMapper;
     private final ISysDictDataService dataService;
 
+    private final SysDeptMapper deptMapper;
+
+
     /**
      * 查询肠内营养
      *
@@ -89,24 +77,164 @@ public class EnteralNutritionServiceImpl implements IEnteralNutritionService {
         return baseMapper.selectVoById(id);
     }
 
+    public List<EnteralNutritionVo> queryBySettlementId(Long settlementId) {
+        SettlementVo selectVoById = settlementMapper.selectVoById(settlementId);
+
+        List<EnteralNutritionVo> nutritionVoList = baseMapper.selectVoList(new LambdaQueryWrapper<EnteralNutrition>().eq(EnteralNutrition::getSettlementId, selectVoById.getId()));
+        if (CollUtil.isNotEmpty(nutritionVoList)) {
+            Set<Long> userList = CollUtil.newHashSet();
+            nutritionVoList.forEach(v -> {
+                userList.add(v.getConfigBy());
+                userList.add(v.getExecuteBy());
+            });
+            // 按settlementId和groupNo分组
+            Map<String, List<EnteralNutritionVo>> groupedRecords = nutritionVoList.stream().collect(Collectors.groupingBy(r -> r.getSettlementId() + "_" + r.getGroupNo(), Collectors.toList()));
+
+            Map<Long, String> userMap = userMapper.selectList(Wrappers.lambdaQuery(SysUser.class).select(SysUser::getUserId, SysUser::getNickName).in(SysUser::getUserId, userList)).stream().collect(Collectors.toMap(k1 -> k1.getUserId(), k2 -> k2.getNickName(), (k1, k2) -> k1));
+            for (List<EnteralNutritionVo> group : groupedRecords.values()) {
+                if (CollUtil.isEmpty(group)) continue;
+                // 拼接id
+                String enteralNutritionIds = group.stream().map(EnteralNutritionVo::getId).filter(Objects::nonNull).distinct().map(String::valueOf).collect(Collectors.joining(","));
+
+                for (EnteralNutritionVo record : group) {
+                    // 设置用户信息
+                    record.setIdStr(enteralNutritionIds);
+                    record.setCreateByName(userMap.get(record.getCreateBy()));
+                    record.setConfigByName(userMap.get(record.getConfigBy()));
+                    record.setExecuteByName(userMap.get(record.getExecuteBy()));
+
+                }
+            }
+
+        }
+        return nutritionVoList;
+    }
+
+    @Override
+    public R<List<EnteralNutritionVo>> queryById(String ids) {
+        List<EnteralNutritionVo> nutritionVoList = new ArrayList<>();
+        if (StringUtils.isNotBlank(ids)) {
+            // 获取当前登录用户的ID,并填充更新人信息
+            Long userId = LoginHelper.getUserId();
+            Optional.ofNullable(ids) // 处理ids可能为null的情况
+                .map(str -> Arrays.stream(str.split(","))) // 按逗号分割
+                .orElseGet(Stream::empty) // 如果ids为null,返回空流
+                .map(String::trim) // 去除空格
+                .filter(StringUtils::isNotBlank) // 过滤空字符串
+                .forEach(id -> {
+                    try {
+                        Long parsedId = Long.parseLong(id);
+                        EnteralNutritionVo enteralNutritionVo = baseMapper.selectVoById(parsedId);
+                        nutritionVoList.add(enteralNutritionVo);
+                    } catch (NumberFormatException e) {
+                        log.error("Invalid ID format: {}", id, e); // 记录错误日志
+                    }
+                });
+        }
+        return R.ok(nutritionVoList);
+    }
+
+    //手动配置
+    @Override
+    public R manualConfig(String ids) {
+        if (StringUtils.isNotBlank(ids)) {
+            // 获取当前登录用户的ID,并填充更新人信息
+            Long userId = LoginHelper.getUserId();
+            Optional.ofNullable(ids) // 处理ids可能为null的情况
+                .map(str -> Arrays.stream(str.split(","))) // 按逗号分割
+                .orElseGet(Stream::empty) // 如果ids为null,返回空流
+                .map(String::trim) // 去除空格
+                .filter(StringUtils::isNotBlank) // 过滤空字符串
+                .forEach(id -> {
+                    try {
+                        Long parsedId = Long.parseLong(id);
+                        EnteralNutrition vo = baseMapper.selectById(parsedId);
+                        if (vo != null) {
+                            vo.setConfigStatus(ConfigStatus.ONE.getCode()); // 设置状态
+                            vo.setConfigTime(new Date()); // 设置更新时间
+                            vo.setConfigBy(userId); // 设置操作人(需替换成实际方法)
+                            baseMapper.updateById(vo); // 执行更新
+                        }
+                    } catch (NumberFormatException e) {
+                        log.error("Invalid ID format: {}", id, e); // 记录错误日志
+                    }
+                });
+        }
+        return R.ok();
+    }
+
+    @Override
+    public R execute(String ids) {
+        if (StringUtils.isNotBlank(ids)) {
+            // 获取当前登录用户的ID,并填充更新人信息
+            Long userId = LoginHelper.getUserId();
+            Optional.ofNullable(ids) // 处理ids可能为null的情况
+                .map(str -> Arrays.stream(str.split(","))) // 按逗号分割
+                .orElseGet(Stream::empty) // 如果ids为null,返回空流
+                .map(String::trim) // 去除空格
+                .filter(StringUtils::isNotBlank) // 过滤空字符串
+                .forEach(id -> {
+                    try {
+                        Long parsedId = Long.parseLong(id);
+                        EnteralNutrition vo = baseMapper.selectById(parsedId);
+                        if (vo != null) {
+                            vo.setExecuteStatus(ExecuteStatus.ONE.getCode()); // 设置状态
+                            vo.setExecuteDate(LocalDate.now()); // 更新执行时间
+                            vo.setExecuteTime(LocalTime.now());
+                            vo.setExecuteBy(userId); // 设置操作人(需替换成实际方法)
+                            baseMapper.updateById(vo); // 执行更新
+                        }
+                    } catch (NumberFormatException e) {
+                        log.error("Invalid ID format: {}", id, e); // 记录错误日志
+                    }
+                });
+        }
+        return R.ok();
+    }
+
+    @Override
+    public R tagPrint(String ids) {
+        if (StringUtils.isNotBlank(ids)) {
+            System.err.println("当前打印 ids : " + ids);
+            // 获取当前登录用户的ID,并填充更新人信息
+            Long userId = LoginHelper.getUserId();
+            Optional.ofNullable(ids) // 处理ids可能为null的情况
+                .map(str -> Arrays.stream(str.split(","))) // 按逗号分割
+                .orElseGet(Stream::empty) // 如果ids为null,返回空流
+                .map(String::trim) // 去除空格
+                .filter(StringUtils::isNotBlank) // 过滤空字符串
+                .forEach(id -> {
+                    System.err.println("当前打印:"+id);
+                    try {
+                        Long parsedId = Long.parseLong(id);
+                        EnteralNutrition vo = baseMapper.selectById(parsedId);
+                        if (vo != null) {
+                            vo.setTagPrintNum(vo.getTagPrintNum() + 1);
+                            baseMapper.updateById(vo); // 执行更新
+                        }
+                    } catch (NumberFormatException e) {
+                        log.error("Invalid ID format: {}", id, e); // 记录错误日志
+                    }
+                });
+        }
+        return R.ok();
+    }
+
     @Override
     public R<EnteralNutritionQueryVo> detail(Long id) {
         if (ObjUtil.isNull(id)) {
             throw new ServiceException("id不能为空!");
         }
 
-        List<EnteralNutrition> nutritionList = baseMapper.selectList(Wrappers.lambdaQuery(EnteralNutrition.class)
-            .eq(EnteralNutrition::getSettlementId, id));
-        List<EnteralNutritionConsumable> consumableList = consumableMapper.selectList(Wrappers.lambdaQuery(EnteralNutritionConsumable.class)
-            .eq(EnteralNutritionConsumable::getSettlementId, id));
+        List<EnteralNutrition> nutritionList = baseMapper.selectList(Wrappers.lambdaQuery(EnteralNutrition.class).eq(EnteralNutrition::getSettlementId, id));
+        List<EnteralNutritionConsumable> consumableList = consumableMapper.selectList(Wrappers.lambdaQuery(EnteralNutritionConsumable.class).eq(EnteralNutritionConsumable::getSettlementId, id));
 
         EnteralNutritionQueryVo queryVo = new EnteralNutritionQueryVo();
         queryVo.setNutritionList(MapstructUtils.convert(nutritionList, EnteralNutritionVo.class));
         queryVo.setConsumableList(MapstructUtils.convert(consumableList, EnteralNutritionConsumableVo.class));
 
         if (CollUtil.isNotEmpty(nutritionList)) {
-            queryVo.setProductNutritionMap(productNutritionMapper.selectByIds(nutritionList.stream().map(EnteralNutrition::getNutritionProductId).collect(Collectors.toSet()))
-                .stream().map(v -> MapstructUtils.convert(v, ProductNutritionVo.class)).collect(Collectors.toMap(k1 -> k1.getId(), k2 -> k2, (k1, k12) -> k1)));
+            queryVo.setProductNutritionMap(productNutritionMapper.selectByIds(nutritionList.stream().map(EnteralNutrition::getNutritionProductId).collect(Collectors.toSet())).stream().map(v -> MapstructUtils.convert(v, ProductNutritionVo.class)).collect(Collectors.toMap(k1 -> k1.getId(), k2 -> k2, (k1, k12) -> k1)));
 
             queryVo.getNutritionList().forEach(nutrition -> {
                 nutrition.setMealTime(Arrays.stream(nutrition.getMealTime().split(",")).filter(StrUtil::isNotBlank).collect(Collectors.joining(",")));
@@ -174,17 +302,11 @@ public class EnteralNutritionServiceImpl implements IEnteralNutritionService {
         });
 
         Set<Long> settlementIdList = settlementMap.keySet();
-        Map<Long, List<EnteralNutrition>> nutritionGroupMap = baseMapper.selectList(
-                Wrappers.lambdaQuery(EnteralNutrition.class).in(EnteralNutrition::getSettlementId, settlementIdList))
-            .stream().collect(Collectors.groupingBy(EnteralNutrition::getSettlementId));
+        Map<Long, List<EnteralNutrition>> nutritionGroupMap = baseMapper.selectList(Wrappers.lambdaQuery(EnteralNutrition.class).in(EnteralNutrition::getSettlementId, settlementIdList)).stream().collect(Collectors.groupingBy(EnteralNutrition::getSettlementId));
 
-        Map<Long, List<EnteralNutritionConsumable>> consumableGroupMap = consumableMapper.selectList(
-                Wrappers.lambdaQuery(EnteralNutritionConsumable.class).in(EnteralNutritionConsumable::getSettlementId, settlementIdList))
-            .stream().collect(Collectors.groupingBy(EnteralNutritionConsumable::getSettlementId));
+        Map<Long, List<EnteralNutritionConsumable>> consumableGroupMap = consumableMapper.selectList(Wrappers.lambdaQuery(EnteralNutritionConsumable.class).in(EnteralNutritionConsumable::getSettlementId, settlementIdList)).stream().collect(Collectors.groupingBy(EnteralNutritionConsumable::getSettlementId));
 
-        Map<Long, String> userMap = userMapper.selectList(Wrappers.lambdaQuery(SysUser.class)
-            .select(SysUser::getUserId, SysUser::getNickName)
-            .in(SysUser::getUserId, userList)).stream().collect(Collectors.toMap(k1 -> k1.getUserId(), k2 -> k2.getNickName(), (k1, k2) -> k1));
+        Map<Long, String> userMap = userMapper.selectList(Wrappers.lambdaQuery(SysUser.class).select(SysUser::getUserId, SysUser::getNickName).in(SysUser::getUserId, userList)).stream().collect(Collectors.toMap(k1 -> k1.getUserId(), k2 -> k2.getNickName(), (k1, k2) -> k1));
 
         Map<String, List<SysDictDataVo>> dictMap = dataService.selectGroupByType(List.of(BizConst.PAYMENT_STATUS, BizConst.FEE_TYPE)).getData();
         Map<String, String> paymentMap = dictMap.get(BizConst.PAYMENT_STATUS).stream().collect(Collectors.toMap(k1 -> k1.getDictValue(), k2 -> k2.getDictLabel(), (k1, k2) -> k1));
@@ -271,8 +393,7 @@ public class EnteralNutritionServiceImpl implements IEnteralNutritionService {
     }
 
     private void saveOrUpdateData(EnteralNutritionSaveBo bo, Settlement settlement) {
-        Map<String, List<SysDictDataVo>> dictMap = dataService.selectGroupByType(
-            List.of(BizConst.PRODUCT_SPEC_UNIT, BizConst.PRODUCT_PACKAGE_UNIT)).getData();
+        Map<String, List<SysDictDataVo>> dictMap = dataService.selectGroupByType(List.of(BizConst.PRODUCT_SPEC_UNIT, BizConst.PRODUCT_PACKAGE_UNIT)).getData();
         Map<String, String> specUnitMap = dictMap.get(BizConst.PRODUCT_SPEC_UNIT).stream().collect(Collectors.toMap(k1 -> k1.getDictValue(), k2 -> k2.getDictLabel(), (k1, k2) -> k1));
         Map<String, String> packageUnitMap = dictMap.get(BizConst.PRODUCT_PACKAGE_UNIT).stream().collect(Collectors.toMap(k1 -> k1.getDictValue(), k2 -> k2.getDictLabel(), (k1, k2) -> k1));
 
@@ -290,8 +411,7 @@ public class EnteralNutritionServiceImpl implements IEnteralNutritionService {
             }
         });
 
-        Map<Long, ProductNutrition> nutritionMap = productNutritionMapper.selectByIds(idList)
-            .stream().collect(Collectors.toMap(k1 -> k1.getId(), k2 -> k2, (k1, k2) -> k1));
+        Map<Long, ProductNutrition> nutritionMap = productNutritionMapper.selectByIds(idList).stream().collect(Collectors.toMap(k1 -> k1.getId(), k2 -> k2, (k1, k2) -> k1));
         BigDecimal total = BigDecimal.ZERO;
         Map<String, EnteralNutritionBo> groupNoMap = MapUtil.newHashMap(bo.getNutritionList().size());
         for (EnteralNutritionBo nutritionBo : bo.getNutritionList()) {
@@ -305,8 +425,7 @@ public class EnteralNutritionServiceImpl implements IEnteralNutritionService {
                 throw new ServiceException("餐次时间不能为空");
             }
 
-            Set<String> mealTimeSet = Arrays.stream(nutritionBo.getMealTime().split(","))
-                .map(String::trim).filter(StrUtil::isNotBlank).collect(Collectors.toSet());
+            Set<String> mealTimeSet = Arrays.stream(nutritionBo.getMealTime().split(",")).map(String::trim).filter(StrUtil::isNotBlank).collect(Collectors.toSet());
             nutritionBo.setFrequency(Long.valueOf(mealTimeSet.size()));
 
             if (FeeType.PRE_PACKAGED_PRESCRIPTION.getCode().equalsIgnoreCase(bo.getChargeType())) {
@@ -324,11 +443,9 @@ public class EnteralNutritionServiceImpl implements IEnteralNutritionService {
                     throw new ServiceException("数量不能为空");
                 }
 
-                nutritionBo.setAmount(BigDecimal.valueOf(nutritionBo.getQuantity() * nutrition.getPackagePrice())
-                    .multiply(new BigDecimal(nutrition.getProductSpec())).multiply(nutritionBo.getDosePerTime()));
+                nutritionBo.setAmount(BigDecimal.valueOf(nutritionBo.getQuantity() * nutrition.getPackagePrice()).multiply(new BigDecimal(nutrition.getProductSpec())).multiply(nutritionBo.getDosePerTime()));
 
-                nutritionBo.setDailyCalories(BigDecimal.valueOf(nutrition.getCalorie() * nutritionBo.getFrequency() / 100.0)
-                    .multiply(nutritionBo.getDosePerTime()));
+                nutritionBo.setDailyCalories(BigDecimal.valueOf(nutrition.getCalorie() * nutritionBo.getFrequency() / 100.0).multiply(nutritionBo.getDosePerTime()));
 
                 settlement.setStopDate(DateUtil.offsetDay(nutritionBo.getPrescriptionDate(), nutritionBo.getUsageDays().intValue() - 1));
                 nutritionBo.setStopDate(settlement.getStopDate());
@@ -371,16 +488,12 @@ public class EnteralNutritionServiceImpl implements IEnteralNutritionService {
                         throw new ServiceException("首日不能为空");
                     }
 
-                    product.setAmount(BigDecimal.valueOf(nutrition.getConfigSalePrice() *
-                            (nutritionBo.getFrequency() * (nutritionBo.getUsageDays() - 1) + nutritionBo.getFirstDay()))
-                        .multiply(product.getDosePerTime()));
+                    product.setAmount(BigDecimal.valueOf(nutrition.getConfigSalePrice() * (nutritionBo.getFrequency() * (nutritionBo.getUsageDays() - 1) + nutritionBo.getFirstDay())).multiply(product.getDosePerTime()));
                     product.setAmount(BigDecimal.ZERO.compareTo(product.getAmount()) > 0 ? BigDecimal.ZERO : product.getAmount());
 
-                    product.setDailyCalories(BigDecimal.valueOf(nutrition.getCalorie() * nutritionBo.getFrequency() / 100.0)
-                        .multiply(product.getDosePerTime()));
+                    product.setDailyCalories(BigDecimal.valueOf(nutrition.getCalorie() * nutritionBo.getFrequency() / 100.0).multiply(product.getDosePerTime()));
 
-                    product.setTotalDose(BigDecimal.valueOf((nutritionBo.getFrequency() * (nutritionBo.getUsageDays() - 1) + nutritionBo.getFirstDay()))
-                        .multiply(product.getDosePerTime()));
+                    product.setTotalDose(BigDecimal.valueOf((nutritionBo.getFrequency() * (nutritionBo.getUsageDays() - 1) + nutritionBo.getFirstDay())).multiply(product.getDosePerTime()));
 
                     settlement.setStopDate(DateUtil.offsetDay(nutritionBo.getPrescriptionDate(), product.getUsageDays().intValue() - 1));
                     product.setStopDate(settlement.getStopDate());
@@ -400,12 +513,10 @@ public class EnteralNutritionServiceImpl implements IEnteralNutritionService {
                     long days = DateUtil.between(nutritionBo.getPrescriptionDate(), product.getStopDate(), DateUnit.DAY) + 1;
                     product.setUsageDays(days);
 
-                    product.setAmount(BigDecimal.valueOf(((days - 1) * nutritionBo.getFrequency() + nutritionBo.getFirstDay()) * nutrition.getConfigSalePrice())
-                        .multiply(product.getDosePerTime()));
+                    product.setAmount(BigDecimal.valueOf(((days - 1) * nutritionBo.getFrequency() + nutritionBo.getFirstDay()) * nutrition.getConfigSalePrice()).multiply(product.getDosePerTime()));
                     product.setAmount(BigDecimal.ZERO.compareTo(product.getAmount()) > 0 ? BigDecimal.ZERO : product.getAmount());
 
-                    product.setDailyCalories(BigDecimal.valueOf(nutrition.getCalorie() * nutritionBo.getFrequency() / 100.0)
-                        .multiply(product.getDosePerTime()));
+                    product.setDailyCalories(BigDecimal.valueOf(nutrition.getCalorie() * nutritionBo.getFrequency() / 100.0).multiply(product.getDosePerTime()));
 
                     settlement.setStopDate(product.getStopDate());
                 }
@@ -430,8 +541,7 @@ public class EnteralNutritionServiceImpl implements IEnteralNutritionService {
                 consumableIds.add(v.getConsumableId());
             });
 
-            Map<Long, SuppliesManage> suppliesManageMap = suppliesManageMapper.selectByIds(consumableIds).stream()
-                .collect(Collectors.toMap(k1 -> k1.getId(), k2 -> k2, (k1, k2) -> k1));
+            Map<Long, SuppliesManage> suppliesManageMap = suppliesManageMapper.selectByIds(consumableIds).stream().collect(Collectors.toMap(k1 -> k1.getId(), k2 -> k2, (k1, k2) -> k1));
 
             bo.getConsumableList().forEach(v -> {
                 SuppliesManage suppliesManage = suppliesManageMap.get(v.getConsumableId());
@@ -449,8 +559,7 @@ public class EnteralNutritionServiceImpl implements IEnteralNutritionService {
                         days = nutritionBo.getUsageDays();
                     }
 
-                    v.setQuantity(BigDecimal.valueOf(days - 1).multiply(BigDecimal.valueOf(v.getFrequency()))
-                        .add(BigDecimal.valueOf(v.getFirstDay())).multiply(v.getDosePerTime()).longValue());
+                    v.setQuantity(BigDecimal.valueOf(days - 1).multiply(BigDecimal.valueOf(v.getFrequency())).add(BigDecimal.valueOf(v.getFirstDay())).multiply(v.getDosePerTime()).longValue());
                     v.setQuantity(Math.max(v.getQuantity(), 0L));
                 }
 
@@ -551,9 +660,39 @@ public class EnteralNutritionServiceImpl implements IEnteralNutritionService {
         if (isValid) {
             //TODO 做一些业务上的校验,判断是否需要校验
         }
-        int cnt = settlementMapper.update(Wrappers.lambdaUpdate(Settlement.class)
-            .set(Settlement::getDelFlag, DelFlag.YES.getCode())
-            .in(Settlement::getId, ids));
+        int cnt = settlementMapper.update(Wrappers.lambdaUpdate(Settlement.class).set(Settlement::getDelFlag, DelFlag.YES.getCode()).in(Settlement::getId, ids));
         return cnt > 0;
     }
+
+    @Override
+    public TableDataInfo<EnteralNutritionQueryOneVo> queryEnteralNutritionPageList(EnteralNutritionBo bo, PageQuery pageQuery) {
+        Map<String, Object> params = bo.getParams();
+        List<Date> executeDateRange = bo.getExecuteDateRange();
+        List<Date> prescriptionDateRange = bo.getPrescriptionDateRange();
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        String startExecuteDate = null;
+        String endExecuteDate = null;
+        String startTime = null;
+        String endTime = null;
+        if (executeDateRange != null && executeDateRange.size() == 2) {
+            startExecuteDate = sdf.format(executeDateRange.get(0)) + " 00:00:00";  // 开始时间
+            endExecuteDate = sdf.format(executeDateRange.get(1)) + " 23:59:59";    // 结束时间
+        }
+        if (prescriptionDateRange != null && prescriptionDateRange.size() == 2) {
+            startTime = sdf.format(prescriptionDateRange.get(0)) + " 00:00:00";  // 开始时间
+            endTime = sdf.format(prescriptionDateRange.get(1)) + " 23:59:59";    // 结束时间
+        }
+        // 计算正确的offset
+        int offset = (pageQuery.getPageNum() - 1) * pageQuery.getPageSize();
+        Integer total = baseMapper.queryPageVoCount(bo.getPrescriptionType(), bo.getVisitType(), bo.getConfigStatus(), bo.getPaymentStatus(), bo.getExecuteStatus(), bo.getDoorId(), bo.getWardId(), bo.getSearchValue(), startExecuteDate, endExecuteDate, startTime, endTime);
+
+        List<EnteralNutritionQueryOneVo> enteralNutritionVoList = baseMapper.queryPageVoList(bo.getPrescriptionType(), bo.getVisitType(), bo.getConfigStatus(), bo.getPaymentStatus(), bo.getExecuteStatus(), bo.getDoorId(), bo.getWardId(), bo.getSearchValue(), startExecuteDate, endExecuteDate, startTime, endTime, offset, pageQuery.getPageSize());
+
+        TableDataInfo tableDataInfo = new TableDataInfo();
+        tableDataInfo.setRows(enteralNutritionVoList);
+        tableDataInfo.setTotal(total);
+        return tableDataInfo;
+
+    }
+
 }

+ 240 - 33
ruoyi-admin/src/main/java/org/dromara/web/service/impl/HospitalMealPlanServiceImpl.java

@@ -2,38 +2,37 @@ package org.dromara.web.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjUtil;
-import org.dromara.common.core.exception.ServiceException;
-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 com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.dromara.system.domain.SysRecipeFoodIngredient;
-import org.dromara.system.domain.SysScreeningAssessmentQuestion;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.enums.biz.*;
+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.common.satoken.utils.LoginHelper;
 import org.dromara.system.domain.SysUser;
-import org.dromara.system.domain.vo.SysScreeningAssessmentQuestionVo;
 import org.dromara.system.mapper.SysUserMapper;
-import org.dromara.web.domain.HospitalMealPlan;
-import org.dromara.web.domain.HospitalMealRecipe;
-import org.dromara.web.domain.NutritionSetting;
+import org.dromara.web.domain.*;
+import org.dromara.web.domain.bo.EnteralNutritionBo;
 import org.dromara.web.domain.bo.HospitalMealPlanBo;
-import org.dromara.web.domain.bo.HospitalMealRecipeBo;
-import org.dromara.web.domain.vo.HospitalMealPlanVo;
-import org.dromara.web.domain.vo.HospitalMealRecipeVo;
-import org.dromara.web.domain.vo.NutritionSettingVo;
+import org.dromara.web.domain.vo.*;
 import org.dromara.web.mapper.HospitalMealPlanMapper;
 import org.dromara.web.mapper.HospitalMealRecipeMapper;
+import org.dromara.web.mapper.SettlementMapper;
+import org.dromara.web.mapper.TreatmentUserMapper;
 import org.dromara.web.service.IHospitalMealPlanService;
 import org.springframework.stereotype.Service;
 
-
 import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.LocalTime;
 import java.util.*;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * 院内膳食主Service业务层处理
@@ -50,6 +49,10 @@ public class HospitalMealPlanServiceImpl implements IHospitalMealPlanService {
 
     private final SysUserMapper userMapper;
 
+    private final SettlementMapper settlementMapper;
+
+    private final TreatmentUserMapper treatmentUserMapper;
+
     private final HospitalMealRecipeMapper mealRecipeMapper;
 
     /**
@@ -62,8 +65,7 @@ public class HospitalMealPlanServiceImpl implements IHospitalMealPlanService {
     public HospitalMealPlanVo queryById(Long id) {
         HospitalMealPlanVo hospitalMealPlanVo = baseMapper.selectVoById(id);
         if (ObjUtil.isNotNull(hospitalMealPlanVo)) {
-            List<HospitalMealRecipeVo> voList = mealRecipeMapper.selectVoList(Wrappers.lambdaQuery(HospitalMealRecipe.class)
-                .eq(HospitalMealRecipe::getPlanId, hospitalMealPlanVo.getId()));
+            List<HospitalMealRecipeVo> voList = mealRecipeMapper.selectVoList(Wrappers.lambdaQuery(HospitalMealRecipe.class).eq(HospitalMealRecipe::getPlanId, hospitalMealPlanVo.getId()));
             hospitalMealPlanVo.setMealRecipeList(voList);
         }
         return hospitalMealPlanVo;
@@ -87,9 +89,7 @@ public class HospitalMealPlanServiceImpl implements IHospitalMealPlanService {
             records.forEach(v -> {
                 userList.add(v.getCreateBy());
             });
-            Map<Long, String> userMap = userMapper.selectList(Wrappers.lambdaQuery(SysUser.class)
-                .select(SysUser::getUserId, SysUser::getUserName)
-                .in(SysUser::getUserId, userList)).stream().collect(Collectors.toMap(k1 -> k1.getUserId(), k2 -> k2.getUserName(), (k1, k2) -> k1));
+            Map<Long, String> userMap = userMapper.selectList(Wrappers.lambdaQuery(SysUser.class).select(SysUser::getUserId, SysUser::getUserName).in(SysUser::getUserId, userList)).stream().collect(Collectors.toMap(k1 -> k1.getUserId(), k2 -> k2.getUserName(), (k1, k2) -> k1));
             records.forEach(v -> {
                 v.setCreateByUser(userMap.get(v.getCreateBy()));
             });
@@ -142,19 +142,43 @@ public class HospitalMealPlanServiceImpl implements IHospitalMealPlanService {
      */
     @Override
     public Boolean insertByBo(HospitalMealPlanBo bo) {
-        HospitalMealPlan add = MapstructUtils.convert(bo, HospitalMealPlan.class);
-        validEntityBeforeSave(add);
-        boolean flag = baseMapper.insert(add) > 0;
+        /*新增院内膳食时新增一条结算管理的待收费订单*/
+        TreatmentUser treatmentUser = treatmentUserMapper.selectById(bo.getPatientId());
+        Settlement settlement = new Settlement();
+        settlement.setOrderTime(new Date());
+        settlement.setPatientId(bo.getPatientId());
+        settlement.setVisitType(bo.getType());
+        settlement.setChargeType(FeeType.IN_HOSPITAL_MEALS.getCode());
+        settlement.setPatientNo(bo.getOutpatientNo());
+        settlement.setPatientName(treatmentUser.getTreatName());
+        settlement.setDoorId(treatmentUser.getDoorId());
+        settlement.setPhone(treatmentUser.getPhoneNum());
+        settlement.setIdCard(treatmentUser.getIdCard());
+        settlement.setBedNo(treatmentUser.getBedNo());
+        settlement.setWardId(treatmentUser.getWardId());
+        settlement.setWardName(treatmentUser.getWardName());
+        settlement.setReceivableAmount(bo.getTotalPrice());
+        settlement.setPaymentStatus(PaymentStatus.UNPAID.getCode());
+        settlement.setCheckStatus(CheckStatus.STATUS_TWO.getCode());
+        settlement.setStatus(bo.getStatus());
+        settlement.setTreatNum(treatmentUser.getTreatNum());
+        boolean flag = settlementMapper.insert(settlement) > 0;
         if (flag) {
-            List<HospitalMealRecipe> hList = bo.getMealRecipeList().stream().map(mealRecipe -> {
-                HospitalMealRecipe hospitalMealRecipe = MapstructUtils.convert(mealRecipe, HospitalMealRecipe.class);
-
-                hospitalMealRecipe.setPlanId(add.getId());
-                return hospitalMealRecipe;
-            }).collect(Collectors.toList());
-            mealRecipeMapper.insertBatch(hList);
-            bo.setId(add.getId());
+            bo.setSettlementId(settlement.getId());
+            HospitalMealPlan add = MapstructUtils.convert(bo, HospitalMealPlan.class);
+            validEntityBeforeSave(add);
+            flag = baseMapper.insert(add) > 0;
+            if (flag) {
+                List<HospitalMealRecipe> hList = bo.getMealRecipeList().stream().map(mealRecipe -> {
+                    HospitalMealRecipe hospitalMealRecipe = MapstructUtils.convert(mealRecipe, HospitalMealRecipe.class);
+                    hospitalMealRecipe.setPlanId(add.getId());
+                    return hospitalMealRecipe;
+                }).collect(Collectors.toList());
+                mealRecipeMapper.insertBatch(hList);
+                bo.setId(add.getId());
+            }
         }
+
         return flag;
     }
 
@@ -192,4 +216,187 @@ public class HospitalMealPlanServiceImpl implements IHospitalMealPlanService {
         }
         return baseMapper.deleteByIds(ids) > 0;
     }
+
+    @Override
+    public TableDataInfo<HospitalMealPlanQueryVo> queryHospitalMealPlanList(EnteralNutritionBo bo, PageQuery pageQuery) {
+        Map<String, Object> params = bo.getParams();
+        List<Date> executeDateRange = bo.getExecuteDateRange();
+        List<Date> prescriptionDateRange = bo.getPrescriptionDateRange();
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        String startExecuteDate = null;
+        String endExecuteDate = null;
+        String startTime = null;
+        String endTime = null;
+        if (executeDateRange != null && executeDateRange.size() == 2) {
+            startExecuteDate = sdf.format(executeDateRange.get(0)) + " 00:00:00";  // 开始时间
+            endExecuteDate = sdf.format(executeDateRange.get(1)) + " 23:59:59";    // 结束时间
+        }
+        if (prescriptionDateRange != null && prescriptionDateRange.size() == 2) {
+            startTime = sdf.format(prescriptionDateRange.get(0)) + " 00:00:00";  // 开始时间
+            endTime = sdf.format(prescriptionDateRange.get(1)) + " 23:59:59";    // 结束时间
+        }
+        // 计算正确的offset
+        int offset = (pageQuery.getPageNum() - 1) * pageQuery.getPageSize();
+        Integer total = baseMapper.queryPageVoCount(bo.getPrescriptionType(), bo.getVisitType(), bo.getMakeStatus(), bo.getPaymentStatus(), bo.getExecuteStatus(), bo.getDoorId(), bo.getWardId(), bo.getSearchValue(), startExecuteDate, endExecuteDate, startTime, endTime);
+
+        List<HospitalMealPlanQueryVo> mealPlanQueryVoList = baseMapper.queryPageVoList(bo.getPrescriptionType(), bo.getVisitType(), bo.getMakeStatus(), bo.getPaymentStatus(), bo.getExecuteStatus(), bo.getDoorId(), bo.getWardId(), bo.getSearchValue(), startExecuteDate, endExecuteDate, startTime, endTime, offset, pageQuery.getPageSize());
+
+        TableDataInfo tableDataInfo = new TableDataInfo();
+        tableDataInfo.setRows(mealPlanQueryVoList);
+        tableDataInfo.setTotal(total);
+        return tableDataInfo;
+
+    }
+
+    @Override
+    public List<HospitalMealRecipeVo> queryBySettlementId(Long id) {
+        List<HospitalMealRecipeVo> hospitalMealRecipes =null;
+        SettlementVo selectVoById = settlementMapper.selectVoById(id);
+
+        List<HospitalMealPlan> mealPlanList = baseMapper.selectList(new LambdaQueryWrapper<HospitalMealPlan>().eq(HospitalMealPlan::getSettlementId, selectVoById.getId()));
+        if (CollUtil.isNotEmpty(mealPlanList)) {
+
+             hospitalMealRecipes = mealRecipeMapper.selectVoList(new LambdaQueryWrapper<HospitalMealRecipe>().eq(HospitalMealRecipe::getPlanId, mealPlanList.get(0).getId()));
+
+
+        if (CollUtil.isNotEmpty(hospitalMealRecipes)) {
+            Set<Long> userList = CollUtil.newHashSet();
+            hospitalMealRecipes.forEach(v -> {
+                userList.add(v.getMakeBy());
+                userList.add(v.getExecuteBy());
+            });
+            // 按settlementId和groupNo分组
+            Map<String, List<HospitalMealRecipeVo>> listMap = hospitalMealRecipes.stream().collect(Collectors.groupingBy(r -> r.getPlanId() + "_" + r.getRecipeNo()+"_"+r.getEatTime(), Collectors.toList()));
+
+            Map<Long, String> userMap = userMapper.selectList(Wrappers.lambdaQuery(SysUser.class).select(SysUser::getUserId, SysUser::getNickName).in(SysUser::getUserId, userList)).stream().collect(Collectors.toMap(k1 -> k1.getUserId(), k2 -> k2.getNickName(), (k1, k2) -> k1));
+            for (List<HospitalMealRecipeVo> group : listMap.values()) {
+                if (CollUtil.isEmpty(group)) continue;
+                // 拼接id
+                String ids = group.stream().map(HospitalMealRecipeVo::getId).filter(Objects::nonNull).distinct().map(String::valueOf).collect(Collectors.joining(","));
+                for (HospitalMealRecipeVo record : group) {
+                    // 设置用户信息
+                    record.setIdStr(ids);
+                    record.setCreateByName(userMap.get(record.getCreateBy()));
+                    record.setMakeByName(userMap.get(record.getMakeBy()));
+                    record.setExecuteByName(userMap.get(record.getExecuteBy()));
+                }
+            }
+        }
+
+        }
+        return hospitalMealRecipes;
+    }
+
+    @Override
+    public R<List<HospitalMealRecipeVo>> queryById(String ids) {
+        List<HospitalMealRecipeVo> mealRecipeVoList = new ArrayList<>();
+        if (StringUtils.isNotBlank(ids)) {
+            Optional.ofNullable(ids) // 处理ids可能为null的情况
+                .map(str -> Arrays.stream(str.split(","))) // 按逗号分割
+                .orElseGet(Stream::empty) // 如果ids为null,返回空流
+                .map(String::trim) // 去除空格
+                .filter(StringUtils::isNotBlank) // 过滤空字符串
+                .forEach(id -> {
+                    try {
+                        Long parsedId = Long.parseLong(id);
+                        HospitalMealRecipeVo mealRecipeVo = mealRecipeMapper.selectVoById(parsedId);
+                        mealRecipeVoList.add(mealRecipeVo);
+                    } catch (NumberFormatException e) {
+                        log.error("Invalid ID format: {}", id, e); // 记录错误日志
+                    }
+                });
+        }
+        return R.ok(mealRecipeVoList);
+    }
+
+    @Override
+    public R manualConfig(String ids) {
+        if (StringUtils.isNotBlank(ids)) {
+            // 获取当前登录用户的ID,并填充更新人信息
+            Long userId = LoginHelper.getUserId();
+            Optional.ofNullable(ids) // 处理ids可能为null的情况
+                .map(str -> Arrays.stream(str.split(","))) // 按逗号分割
+                .orElseGet(Stream::empty) // 如果ids为null,返回空流
+                .map(String::trim) // 去除空格
+                .filter(StringUtils::isNotBlank) // 过滤空字符串
+                .forEach(id -> {
+                    try {
+                        Long parsedId = Long.parseLong(id);
+                        HospitalMealRecipe mealRecipe = mealRecipeMapper.selectById(parsedId);
+                        if (mealRecipe != null) {
+                            mealRecipe.setMakeStatus(MakeStatus.ONE.getCode()); // 设置状态
+                            mealRecipe.setMakeTime(new Date()); // 设置更新时间
+                            mealRecipe.setMakeBy(userId); // 设置操作人(需替换成实际方法)
+                            mealRecipeMapper.updateById(mealRecipe); // 执行更新
+                        }
+                    } catch (NumberFormatException e) {
+                        log.error("Invalid ID format: {}", id, e); // 记录错误日志
+                    }
+                });
+        }
+        return R.ok();
+    }
+
+    @Override
+    public R execute(String ids) {
+        if (StringUtils.isNotBlank(ids)) {
+            // 获取当前登录用户的ID,并填充更新人信息
+            Long userId = LoginHelper.getUserId();
+            Optional.ofNullable(ids) // 处理ids可能为null的情况
+                .map(str -> Arrays.stream(str.split(","))) // 按逗号分割
+                .orElseGet(Stream::empty) // 如果ids为null,返回空流
+                .map(String::trim) // 去除空格
+                .filter(StringUtils::isNotBlank) // 过滤空字符串
+                .forEach(id -> {
+                    try {
+                        Long parsedId = Long.parseLong(id);
+                        HospitalMealRecipe mealRecipe = mealRecipeMapper.selectById(parsedId);
+                        if (mealRecipe != null) {
+                            mealRecipe.setExecuteStatus(ExecuteStatus.ONE.getCode()); // 设置状态
+                            mealRecipe.setExecuteDate(LocalDate.now()); // 更新执行时间
+                            mealRecipe.setExecuteTime(LocalTime.now());
+                            mealRecipe.setExecuteBy(userId); // 设置操作人(需替换成实际方法)
+                            mealRecipeMapper.updateById(mealRecipe); // 执行更新
+                        }
+                    } catch (NumberFormatException e) {
+                        log.error("Invalid ID format: {}", id, e); // 记录错误日志
+                    }
+                });
+        }
+        return R.ok();
+    }
+
+    @Override
+    public R tagPrint(String ids) {
+        if (StringUtils.isNotBlank(ids)) {
+            System.err.println("当前打印 ids : " + ids);
+            // 获取当前登录用户的ID,并填充更新人信息
+            Long userId = LoginHelper.getUserId();
+            Optional.ofNullable(ids) // 处理ids可能为null的情况
+                .map(str -> Arrays.stream(str.split(","))) // 按逗号分割
+                .orElseGet(Stream::empty) // 如果ids为null,返回空流
+                .map(String::trim) // 去除空格
+                .filter(StringUtils::isNotBlank) // 过滤空字符串
+                .forEach(id -> {
+                    System.err.println("当前打印:" + id);
+                    try {
+                        Long parsedId = Long.parseLong(id);
+                        HospitalMealRecipe mealRecipe = mealRecipeMapper.selectById(parsedId);
+                        if (mealRecipe != null) {
+                            mealRecipe.setTagPrintNum(mealRecipe.getTagPrintNum() + 1);
+                            mealRecipeMapper.updateById(mealRecipe); // 执行更新
+                        }
+                    } catch (NumberFormatException e) {
+                        log.error("Invalid ID format: {}", id, e); // 记录错误日志
+                    }
+                });
+        }
+        return R.ok();
+    }
+
+
+    @Override
+    public List<HospitalMealRecipeVo> queryList(EnteralNutritionBo bo) {
+        return null;
+    }
 }

+ 18 - 5
ruoyi-admin/src/main/java/org/dromara/web/service/impl/SettlementServiceImpl.java

@@ -20,10 +20,7 @@ import org.dromara.system.mapper.SysDeptMapper;
 import org.dromara.system.mapper.SysUserMapper;
 import org.dromara.web.domain.*;
 import org.dromara.web.domain.bo.SettlementBo;
-import org.dromara.web.domain.vo.EnteralNutritionVo;
-import org.dromara.web.domain.vo.NutritionEvaluationVo;
-import org.dromara.web.domain.vo.NutritionScreeningVo;
-import org.dromara.web.domain.vo.SettlementVo;
+import org.dromara.web.domain.vo.*;
 import org.dromara.web.mapper.*;
 import org.dromara.web.service.ISettlementService;
 import org.springframework.stereotype.Service;
@@ -58,6 +55,10 @@ public class SettlementServiceImpl implements ISettlementService {
 
     private final ProductNutritionMapper productNutritionMapper;
 
+    private final HospitalMealPlanMapper mealPlanMapper;
+
+    private final HospitalMealRecipeMapper mealRecipeMapper;
+
     /**
      * 查询结算管理
      *
@@ -75,7 +76,7 @@ public class SettlementServiceImpl implements ISettlementService {
                 new LambdaQueryWrapper<EnteralNutrition>()
                     .eq(EnteralNutrition::getSettlementId, settlementVo.getId()));
 
-            if (CollUtil.isNotEmpty(enteralNutritionVoList)){
+            if (CollUtil.isNotEmpty(enteralNutritionVoList)) {
                 // 提获取所有需要的产品营养信息
                 Set<Long> productIds = enteralNutritionVoList.stream()
                     .map(EnteralNutritionVo::getNutritionProductId)
@@ -116,6 +117,18 @@ public class SettlementServiceImpl implements ISettlementService {
                 v.setCreateByName(userMap.get(v.getCreateBy()));
             });
             settlementVo.setNutritionEvaluationList(nutritionEvaluationVos);
+
+            List<HospitalMealPlanVo> hospitalMealPlanVos = mealPlanMapper.selectVoList(new LambdaQueryWrapper<HospitalMealPlan>().eq(HospitalMealPlan::getSettlementId, settlementVo.getId()));
+            if (CollUtil.isNotEmpty(hospitalMealPlanVos)) {
+                HospitalMealPlanVo planVo = hospitalMealPlanVos.get(0);
+                List<HospitalMealRecipeVo> hospitalMealRecipeVos = mealRecipeMapper.selectVoList(new LambdaQueryWrapper<HospitalMealRecipe>().eq(HospitalMealRecipe::getPlanId, planVo.getId()));
+                hospitalMealRecipeVos.forEach(v -> {
+                    v.setCreateByName(userMap.get(v.getCreateBy()));
+                });
+                settlementVo.setRecommendStartDate(planVo.getRecommendStartDate());
+                settlementVo.setRecommendEndDate(planVo.getRecommendEndDate());
+                settlementVo.setHospitalMealRecipeList(hospitalMealRecipeVos);
+            }
         }
         return settlementVo;
     }

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

@@ -21,6 +21,12 @@ public interface BizConst {
     String CHECK_STATUS_PASS="2";//通过审核
     String CHECK_STATUS_ALL="9"; //审核状态 全部状态
 
+    String CONFIG_STATUS="config_status"; //配置状态
+
+    String EXECUTE_STATUS="execute_status";  //执行状态
+
+    String PRINT_STATUS = "print_status";//打印状态
+
     String HOSPITAL_ROLE_TYPE = "hospital_role_type";
 
     String FOOD_UNIT = "food_unit";

+ 17 - 0
ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/enums/biz/ConfigStatus.java

@@ -0,0 +1,17 @@
+package org.dromara.common.core.enums.biz;
+
+import lombok.Getter;
+
+@Getter
+public enum ConfigStatus {
+    ZERO("0", "待配置"),
+    ONE("1", "已配置");
+
+    private String code;
+    private String remark;
+
+    private ConfigStatus(String code, String remark) {
+        this.code = code;
+        this.remark = remark;
+    }
+}

+ 17 - 0
ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/enums/biz/ExecuteStatus.java

@@ -0,0 +1,17 @@
+package org.dromara.common.core.enums.biz;
+
+import lombok.Getter;
+
+@Getter
+public enum ExecuteStatus {
+    ZERO("0", "待执行"),
+    ONE("1", "已执行");
+
+    private String code;
+    private String remark;
+
+    private ExecuteStatus(String code, String remark) {
+        this.code = code;
+        this.remark = remark;
+    }
+}

+ 17 - 0
ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/enums/biz/MakeStatus.java

@@ -0,0 +1,17 @@
+package org.dromara.common.core.enums.biz;
+
+import lombok.Getter;
+
+@Getter
+public enum MakeStatus {
+    ZERO("0", "待制餐"),
+    ONE("1", "已制餐");
+
+    private String code;
+    private String remark;
+
+    private MakeStatus(String code, String remark) {
+        this.code = code;
+        this.remark = remark;
+    }
+}

+ 17 - 0
ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/enums/biz/PrintStatus.java

@@ -0,0 +1,17 @@
+package org.dromara.common.core.enums.biz;
+
+import lombok.Getter;
+
+@Getter
+public enum PrintStatus {
+    ZERO("0", "未打印"),
+    ONE("1", "已打印");
+
+    private String code;
+    private String remark;
+
+    private PrintStatus(String code, String remark) {
+        this.code = code;
+        this.remark = remark;
+    }
+}