Browse Source

新增
1、建行支付额外增加记录账单信息供院区查看
2、新增楼层活动图片记录模块
3、新增楼层活动文字记录模块
4、长者报餐记录导出Excel增加长者排序
5、增加给长者追加固定费用接口
修改
1、修改库存模块数量类型为小数,相应代码修改
BUGFIX
1、解决撤销账单缴费账单余额不会回退问题
2、解决长者报餐记录某个特殊场景下报错问题

liangwenxuan 3 months ago
parent
commit
1419f0ee51
54 changed files with 1384 additions and 211 deletions
  1. 82 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/ElderlyBuildFloorActivityImageController.java
  2. 82 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/ElderlyBuildFloorActivityTextController.java
  3. 0 36
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/ElderlyExpenseController.java
  4. 9 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/ExpenseController.java
  5. 2 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/RelativesController.java
  6. 34 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/elderlyactivityimage/ElderlyBuildFloorActivityImagePageReqVO.java
  7. 73 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/elderlyactivityimage/ElderlyBuildFloorActivityImageRespVO.java
  8. 68 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/elderlyactivityimage/ElderlyBuildFloorActivityImageSaveReqVO.java
  9. 34 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/elderlyactivitytext/ElderlyBuildFloorActivityTextPageReqVO.java
  10. 83 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/elderlyactivitytext/ElderlyBuildFloorActivityTextRespVO.java
  11. 78 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/elderlyactivitytext/ElderlyBuildFloorActivityTextSaveReqVO.java
  12. 3 3
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/material/MaterialInfoRespVO.java
  13. 4 3
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/material/MaterialInfoSaveReqVO.java
  14. 4 2
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/material/excel/MaterialInfoImportExcelVO.java
  15. 2 2
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/materialio/MaterialInBalanceRespVO.java
  16. 1 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/materialio/MaterialIoOrderItemSaveReqVO.java
  17. 1 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/materialio/inbound/MaterialInboundDetailRespVO.java
  18. 1 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/materialio/inbound/MaterialInboundImportExcelVO.java
  19. 1 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/materialio/inbound/MaterialInboundOrderExportExcelVO.java
  20. 3 3
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/materialio/inbound/MaterialInboundOrderItemRespVO.java
  21. 1 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/materialio/inbound/MaterialInboundSummaryRespVO.java
  22. 2 2
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/materialio/inboundreturn/MaterialInboundReturnOrderItemRespVO.java
  23. 3 2
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/materialio/inventory/MaterialInventoryFlowRespVO.java
  24. 4 4
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/materialio/inventory/MaterialInventoryReportExcelVO.java
  25. 4 4
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/materialio/inventory/MaterialInventoryReportRespVO.java
  26. 1 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/materialio/outbound/MaterialOutboundDetailRespVO.java
  27. 1 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/materialio/outbound/MaterialOutboundImportExcelVO.java
  28. 1 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/materialio/outbound/MaterialOutboundOrderExportExcelVO.java
  29. 2 2
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/materialio/outbound/MaterialOutboundOrderItemRespVO.java
  30. 1 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/materialio/outboundreturn/MaterialOutboundReturnOrderItemRespVO.java
  31. 108 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/biz/ElderlyBuildFloorActivityImageDO.java
  32. 129 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/biz/ElderlyBuildFloorActivityTextDO.java
  33. 67 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/biz/ElderlyCcbPayOrderRecordDO.java
  34. 3 3
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/biz/MaterialInboundOrderItemDO.java
  35. 3 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/biz/MaterialInboundReturnOrderItemDO.java
  36. 3 3
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/biz/MaterialInfoDO.java
  37. 2 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/biz/MaterialOutboundOrderItemDO.java
  38. 3 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/biz/MaterialOutboundReturnOrderItemDO.java
  39. 30 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/biz/ElderlyBuildFloorActivityImageMapper.java
  40. 27 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/biz/ElderlyBuildFloorActivityTextMapper.java
  41. 14 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/biz/ElderlyCcbPayOrderRecordMapper.java
  42. 1 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/biz/BalanceServiceImpl.java
  43. 54 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/biz/ElderlyBuildFloorActivityImageService.java
  44. 70 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/biz/ElderlyBuildFloorActivityImageServiceImpl.java
  45. 54 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/biz/ElderlyBuildFloorActivityTextService.java
  46. 71 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/biz/ElderlyBuildFloorActivityTextServiceImpl.java
  47. 3 2
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/biz/ElderlyOrderFoodServiceImpl.java
  48. 20 3
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/biz/ExpenseOrderServiceImpl.java
  49. 7 3
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/biz/ExpenseServiceImpl.java
  50. 2 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/biz/MaterialInfoServiceImpl.java
  51. 109 111
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/biz/MaterialIoServiceImpl.java
  52. 17 8
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/ccb/CcbBusinessService.java
  53. 1 1
      yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/ElderlyOrderFoodMapper.xml
  54. 1 0
      yudao-server/src/main/resources/application.yaml

+ 82 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/ElderlyBuildFloorActivityImageController.java

@@ -0,0 +1,82 @@
+package cn.iocoder.yudao.module.system.controller.admin.biz;
+
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
+import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
+import cn.iocoder.yudao.module.system.controller.admin.biz.vo.elderlyactivityimage.ElderlyBuildFloorActivityImagePageReqVO;
+import cn.iocoder.yudao.module.system.controller.admin.biz.vo.elderlyactivityimage.ElderlyBuildFloorActivityImageRespVO;
+import cn.iocoder.yudao.module.system.controller.admin.biz.vo.elderlyactivityimage.ElderlyBuildFloorActivityImageSaveReqVO;
+import cn.iocoder.yudao.module.system.service.biz.ElderlyBuildFloorActivityImageService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+
+/**
+ * 管理后台 - 楼层活动图片记录 Controller
+ *
+ * @author 系统管理员
+ */
+@Tag(name = "管理后台 - 楼层活动图片记录")
+@RestController
+@RequestMapping("/elderly-build-floor-activity-image")
+@Validated
+public class ElderlyBuildFloorActivityImageController {
+
+    @Resource
+    private ElderlyBuildFloorActivityImageService elderlyBuildFloorActivityImageService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建楼层活动图片记录")
+    public CommonResult<Long> create(@Valid @RequestBody ElderlyBuildFloorActivityImageSaveReqVO createReqVO) {
+        if (createReqVO.getTenantId() == null) {
+            createReqVO.setTenantId(TenantContextHolder.getTenantId());
+        }
+        return success(elderlyBuildFloorActivityImageService.createElderlyBuildFloorActivityImage(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新楼层活动图片记录")
+    @TenantIgnore
+    public CommonResult<Boolean> update(@Valid @RequestBody ElderlyBuildFloorActivityImageSaveReqVO updateReqVO) {
+        if (updateReqVO.getTenantId() == null) {
+            updateReqVO.setTenantId(TenantContextHolder.getTenantId());
+        }
+        elderlyBuildFloorActivityImageService.updateElderlyBuildFloorActivityImage(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除楼层活动图片记录")
+    @Parameter(name = "id", description = "编号", required = true)
+    @TenantIgnore
+    public CommonResult<Boolean> delete(@RequestParam("id") Long id) {
+        elderlyBuildFloorActivityImageService.deleteElderlyBuildFloorActivityImage(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得楼层活动图片记录详情")
+    @Parameter(name = "id", description = "编号", required = true, example = "1")
+    @TenantIgnore
+    public CommonResult<ElderlyBuildFloorActivityImageRespVO> get(@RequestParam("id") Long id) {
+        return success(elderlyBuildFloorActivityImageService.getElderlyBuildFloorActivityImage(id));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得楼层活动图片记录分页")
+    @TenantIgnore
+    public CommonResult<PageResult<ElderlyBuildFloorActivityImageRespVO>> page(@Valid ElderlyBuildFloorActivityImagePageReqVO pageReqVO) {
+        if (pageReqVO.getTenantId() == null) {
+            pageReqVO.setTenantId(TenantContextHolder.getTenantId());
+        }
+        return success(elderlyBuildFloorActivityImageService.getElderlyBuildFloorActivityImagePage(pageReqVO));
+    }
+}

+ 82 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/ElderlyBuildFloorActivityTextController.java

@@ -0,0 +1,82 @@
+package cn.iocoder.yudao.module.system.controller.admin.biz;
+
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
+import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
+import cn.iocoder.yudao.module.system.controller.admin.biz.vo.elderlyactivitytext.ElderlyBuildFloorActivityTextPageReqVO;
+import cn.iocoder.yudao.module.system.controller.admin.biz.vo.elderlyactivitytext.ElderlyBuildFloorActivityTextRespVO;
+import cn.iocoder.yudao.module.system.controller.admin.biz.vo.elderlyactivitytext.ElderlyBuildFloorActivityTextSaveReqVO;
+import cn.iocoder.yudao.module.system.service.biz.ElderlyBuildFloorActivityTextService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+
+/**
+ * 管理后台 - 楼层活动文字记录 Controller
+ *
+ * @author 系统管理员
+ */
+@Tag(name = "管理后台 - 楼层活动文字记录")
+@RestController
+@RequestMapping("/elderly-build-floor-activity-text")
+@Validated
+public class ElderlyBuildFloorActivityTextController {
+
+    @Resource
+    private ElderlyBuildFloorActivityTextService elderlyBuildFloorActivityTextService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建楼层活动文字记录")
+    public CommonResult<Long> create(@Valid @RequestBody ElderlyBuildFloorActivityTextSaveReqVO createReqVO) {
+        if (createReqVO.getTenantId() == null) {
+            createReqVO.setTenantId(TenantContextHolder.getTenantId());
+        }
+        return success(elderlyBuildFloorActivityTextService.createElderlyBuildFloorActivityText(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新楼层活动文字记录")
+    @TenantIgnore
+    public CommonResult<Boolean> update(@Valid @RequestBody ElderlyBuildFloorActivityTextSaveReqVO updateReqVO) {
+        if (updateReqVO.getTenantId() == null) {
+            updateReqVO.setTenantId(TenantContextHolder.getTenantId());
+        }
+        elderlyBuildFloorActivityTextService.updateElderlyBuildFloorActivityText(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除楼层活动文字记录")
+    @Parameter(name = "id", description = "编号", required = true)
+    @TenantIgnore
+    public CommonResult<Boolean> delete(@RequestParam("id") Long id) {
+        elderlyBuildFloorActivityTextService.deleteElderlyBuildFloorActivityText(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得楼层活动文字记录详情")
+    @Parameter(name = "id", description = "编号", required = true, example = "1")
+    @TenantIgnore
+    public CommonResult<ElderlyBuildFloorActivityTextRespVO> get(@RequestParam("id") Long id) {
+        return success(elderlyBuildFloorActivityTextService.getElderlyBuildFloorActivityText(id));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得楼层活动文字记录分页")
+    @TenantIgnore
+    public CommonResult<PageResult<ElderlyBuildFloorActivityTextRespVO>> page(@Valid ElderlyBuildFloorActivityTextPageReqVO pageReqVO) {
+        if (pageReqVO.getTenantId() == null) {
+            pageReqVO.setTenantId(TenantContextHolder.getTenantId());
+        }
+        return success(elderlyBuildFloorActivityTextService.getElderlyBuildFloorActivityTextPage(pageReqVO));
+    }
+}

+ 0 - 36
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/ElderlyExpenseController.java

@@ -1,36 +0,0 @@
-package cn.iocoder.yudao.module.system.controller.admin.biz;
-
-import cn.iocoder.yudao.framework.common.pojo.CommonResult;
-import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
-import cn.iocoder.yudao.module.system.controller.admin.biz.vo.ElderlyFixedExpenseAppendReqVO;
-import cn.iocoder.yudao.module.system.service.biz.ExpenseService;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.annotation.Resource;
-import javax.validation.Valid;
-
-import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
-
-@Tag(name = "管理后台 - 长者固定费用")
-@RestController
-@RequestMapping("/elderly/elderlyExpense")
-@Validated
-public class ElderlyExpenseController {
-
-    @Resource
-    private ExpenseService expenseService;
-
-    @PostMapping("/addFixedExpense")
-    @Operation(summary = "给长者追加固定费用")
-    @TenantIgnore
-    public CommonResult<Boolean> addFixedExpense(@Valid @RequestBody ElderlyFixedExpenseAppendReqVO reqVO) {
-        expenseService.appendFixedExpense(reqVO);
-        return success(true);
-    }
-}

+ 9 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/ExpenseController.java

@@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.system.controller.admin.biz;
 
 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
 import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
+import cn.iocoder.yudao.module.system.controller.admin.biz.vo.ElderlyFixedExpenseAppendReqVO;
 import cn.iocoder.yudao.module.system.controller.admin.biz.vo.ExpenseRespVO;
 import cn.iocoder.yudao.module.system.controller.admin.biz.vo.ExpenseSaveReqVO;
 import cn.iocoder.yudao.module.system.service.biz.ExpenseService;
@@ -57,6 +58,14 @@ public class ExpenseController {
     }
 
 
+    @PostMapping("/addFixedExpense")
+    @Operation(summary = "给长者追加固定费用")
+    @TenantIgnore
+    public CommonResult<Boolean> addFixedExpense(@Valid @RequestBody ElderlyFixedExpenseAppendReqVO reqVO) {
+        expenseService.appendFixedExpense(reqVO);
+        return success(true);
+    }
+
 
 //
 //    @PutMapping("/update")

+ 2 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/RelativesController.java

@@ -13,6 +13,7 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
+import javax.annotation.security.PermitAll;
 import javax.validation.Valid;
 import java.util.List;
 
@@ -35,6 +36,7 @@ public class RelativesController {
 
     @GetMapping("/getDetailsByElderId")
     @Operation(summary = "根据长者ID查询亲属信息")
+    @PermitAll
     public CommonResult<List<RelativesDO>>  getDetailsByElderId(@RequestParam("elderId") Long elderId){
         return CommonResult.success(relativesService.getDetailsByElderId(elderId));
     }

+ 34 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/elderlyactivityimage/ElderlyBuildFloorActivityImagePageReqVO.java

@@ -0,0 +1,34 @@
+package cn.iocoder.yudao.module.system.controller.admin.biz.vo.elderlyactivityimage;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+
+/**
+ * 管理后台 - 楼层活动图片记录分页 Request VO
+ *
+ * @author 系统管理员
+ */
+@Schema(description = "管理后台 - 楼层活动图片记录分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class ElderlyBuildFloorActivityImagePageReqVO extends PageParam {
+
+    @Schema(description = "长者姓名")
+    private String elderName;
+
+    @Schema(description = "楼栋id", example = "1")
+    private Long buildId;
+
+    @Schema(description = "楼层id", example = "1")
+    private Long floorId;
+
+    @Schema(description = "记录月", example = "2024-10")
+    private String recordMonth;
+
+    @Schema(description = "机构id", example = "1")
+    private Long tenantId;
+}

+ 73 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/elderlyactivityimage/ElderlyBuildFloorActivityImageRespVO.java

@@ -0,0 +1,73 @@
+package cn.iocoder.yudao.module.system.controller.admin.biz.vo.elderlyactivityimage;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+/**
+ * 管理后台 - 楼层活动图片记录 Response VO
+ *
+ * @author 系统管理员
+ */
+@Schema(description = "管理后台 - 楼层活动图片记录 Response VO")
+@Data
+public class ElderlyBuildFloorActivityImageRespVO {
+
+    @Schema(description = "id", example = "1")
+    private Long id;
+
+    @Schema(description = "记录月")
+    private String recordMonth;
+
+    @Schema(description = "第几周", example = "1")
+    private Integer week;
+
+    @Schema(description = "长者姓名")
+    private String elderName;
+
+    @Schema(description = "楼栋id", example = "1")
+    private Long buildId;
+
+    @Schema(description = "楼层id", example = "1")
+    private Long floorId;
+
+    @Schema(description = "记录时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND, timezone = "GMT+8")
+    private Date recordTime;
+
+    @Schema(description = "所属楼层")
+    private String belongFloor;
+
+    @Schema(description = "活动日期")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND, timezone = "GMT+8")
+    private Date activityDate;
+
+    @Schema(description = "活动内容")
+    private String activityContent;
+
+    @Schema(description = "活动图片")
+    private String activityImage;
+
+    @Schema(description = "机构id", example = "1")
+    private Long tenantId;
+
+    @Schema(description = "创建时间")
+    private LocalDateTime createTime;
+
+    @Schema(description = "更新时间")
+    private LocalDateTime updateTime;
+
+    @Schema(description = "创建人")
+    private String creator;
+
+    @Schema(description = "更新人")
+    private String updater;
+}

+ 68 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/elderlyactivityimage/ElderlyBuildFloorActivityImageSaveReqVO.java

@@ -0,0 +1,68 @@
+package cn.iocoder.yudao.module.system.controller.admin.biz.vo.elderlyactivityimage;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+/**
+ * 管理后台 - 楼层活动图片记录新增/修改 Request VO
+ *
+ * @author 系统管理员
+ */
+@Schema(description = "管理后台 - 楼层活动图片记录新增/修改 Request VO")
+@Data
+public class ElderlyBuildFloorActivityImageSaveReqVO {
+
+    @Schema(description = "id(修改时必传)", example = "1")
+    private Long id;
+
+    @Schema(description = "记录月", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "记录月不能为空")
+    private String recordMonth;
+
+    @Schema(description = "第几周", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @NotNull(message = "第几周不能为空")
+    private Integer week;
+
+    @Schema(description = "长者姓名", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "长者姓名不能为空")
+    private String elderName;
+
+    @Schema(description = "楼栋id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @NotNull(message = "楼栋id不能为空")
+    private Long buildId;
+
+    @Schema(description = "楼层id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @NotNull(message = "楼层id不能为空")
+    private Long floorId;
+
+    @Schema(description = "记录时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "记录时间不能为空")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND, timezone = "GMT+8")
+    private Date recordTime;
+
+    @Schema(description = "所属楼层")
+    private String belongFloor;
+
+    @Schema(description = "活动日期")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND, timezone = "GMT+8")
+    private Date activityDate;
+
+    @Schema(description = "活动内容")
+    private String activityContent;
+
+    @Schema(description = "活动图片")
+    private String activityImage;
+
+    @Schema(description = "机构id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @NotNull(message = "机构id不能为空")
+    private Long tenantId;
+}

+ 34 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/elderlyactivitytext/ElderlyBuildFloorActivityTextPageReqVO.java

@@ -0,0 +1,34 @@
+package cn.iocoder.yudao.module.system.controller.admin.biz.vo.elderlyactivitytext;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+
+/**
+ * 管理后台 - 楼层活动文字记录分页 Request VO
+ *
+ * @author 系统管理员
+ */
+@Schema(description = "管理后台 - 楼层活动文字记录分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class ElderlyBuildFloorActivityTextPageReqVO extends PageParam {
+
+    @Schema(description = "长者姓名")
+    private String elderName;
+
+    @Schema(description = "楼栋id", example = "1")
+    private Long buidId;
+
+    @Schema(description = "楼层id", example = "1")
+    private Long floorId;
+
+    @Schema(description = "记录月", example = "2024-10")
+    private String recordMonth;
+
+    @Schema(description = "机构id", example = "1")
+    private Long tenantId;
+}

+ 83 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/elderlyactivitytext/ElderlyBuildFloorActivityTextRespVO.java

@@ -0,0 +1,83 @@
+package cn.iocoder.yudao.module.system.controller.admin.biz.vo.elderlyactivitytext;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+/**
+ * 管理后台 - 楼层活动文字记录 Response VO
+ *
+ * @author 系统管理员
+ */
+@Schema(description = "管理后台 - 楼层活动文字记录 Response VO")
+@Data
+public class ElderlyBuildFloorActivityTextRespVO {
+
+    @Schema(description = "id", example = "1")
+    private Long id;
+
+    @Schema(description = "记录月")
+    private String recordMonth;
+
+    @Schema(description = "第几周", example = "1")
+    private Integer week;
+
+    @Schema(description = "楼栋id", example = "1")
+    private Long buidId;
+
+    @Schema(description = "楼层id", example = "1")
+    private Long floorId;
+
+    @Schema(description = "长者姓名")
+    private String elderName;
+
+    @Schema(description = "日期")
+    private String activityDate;
+
+    @Schema(description = "早上第一个时间段")
+    private String morningOne;
+
+    @Schema(description = "早上第二个时间段")
+    private String morningTwo;
+
+    @Schema(description = "午餐")
+    private String lunch;
+
+    @Schema(description = "中午")
+    private String noon;
+
+    @Schema(description = "下午")
+    private String afternonn;
+
+    @Schema(description = "执行人")
+    private String excuteName;
+
+    @Schema(description = "执行记录")
+    private String excuteRecord;
+
+    @Schema(description = "记录时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND, timezone = "GMT+8")
+    private Date recordTime;
+
+    @Schema(description = "机构id", example = "1")
+    private Long tenantId;
+
+    @Schema(description = "创建时间")
+    private LocalDateTime createTime;
+
+    @Schema(description = "更新时间")
+    private LocalDateTime updateTime;
+
+    @Schema(description = "创建人")
+    private String creator;
+
+    @Schema(description = "更新人")
+    private String updater;
+}

+ 78 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/elderlyactivitytext/ElderlyBuildFloorActivityTextSaveReqVO.java

@@ -0,0 +1,78 @@
+package cn.iocoder.yudao.module.system.controller.admin.biz.vo.elderlyactivitytext;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+/**
+ * 管理后台 - 楼层活动文字记录新增/修改 Request VO
+ *
+ * @author 系统管理员
+ */
+@Schema(description = "管理后台 - 楼层活动文字记录新增/修改 Request VO")
+@Data
+public class ElderlyBuildFloorActivityTextSaveReqVO {
+
+    @Schema(description = "id(修改时必传)", example = "1")
+    private Long id;
+
+    @Schema(description = "记录月", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "记录月不能为空")
+    private String recordMonth;
+
+    @Schema(description = "第几周", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @NotNull(message = "第几周不能为空")
+    private Integer week;
+
+    @Schema(description = "楼栋id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @NotNull(message = "楼栋id不能为空")
+    private Long buidId;
+
+    @Schema(description = "楼层id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @NotNull(message = "楼层id不能为空")
+    private Long floorId;
+
+    @Schema(description = "长者姓名", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "长者姓名不能为空")
+    private String elderName;
+
+    @Schema(description = "日期")
+    private String activityDate;
+
+    @Schema(description = "早上第一个时间段")
+    private String morningOne;
+
+    @Schema(description = "早上第二个时间段")
+    private String morningTwo;
+
+    @Schema(description = "午餐")
+    private String lunch;
+
+    @Schema(description = "中午")
+    private String noon;
+
+    @Schema(description = "下午")
+    private String afternonn;
+
+    @Schema(description = "执行人")
+    private String excuteName;
+
+    @Schema(description = "执行记录")
+    private String excuteRecord;
+
+    @Schema(description = "记录时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "记录时间不能为空")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND, timezone = "GMT+8")
+    private Date recordTime;
+
+    @Schema(description = "机构id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @NotNull(message = "机构id不能为空")
+    private Long tenantId;
+}

+ 3 - 3
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/material/MaterialInfoRespVO.java

@@ -44,13 +44,13 @@ public class MaterialInfoRespVO {
     private String specification;
 
     @Schema(description = "当前库存量", example = "100")
-    private Integer materialCount;
+    private BigDecimal materialCount;
 
     @Schema(description = "最高库存量", example = "1000")
-    private Integer maxNum;
+    private BigDecimal maxNum;
 
     @Schema(description = "最低库存量", example = "10")
-    private Integer minNum;
+    private BigDecimal minNum;
 
     @Schema(description = "保质期(月)", example = "24")
     private Integer shelfLife;

+ 4 - 3
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/material/MaterialInfoSaveReqVO.java

@@ -5,6 +5,7 @@ import lombok.Data;
 
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
 
 @Schema(description = "管理后台 - 物资信息新增/修改 Request VO")
 @Data
@@ -36,13 +37,13 @@ public class MaterialInfoSaveReqVO {
     private String specification;
 
     @Schema(description = "当前库存量", example = "100")
-    private Integer materialCount;
+    private BigDecimal materialCount;
 
     @Schema(description = "最高库存量", example = "1000")
-    private Integer maxNum;
+    private BigDecimal maxNum;
 
     @Schema(description = "最低库存量", example = "10")
-    private Integer minNum;
+    private BigDecimal minNum;
 
     @Schema(description = "保质期(月)", example = "24")
     private Integer shelfLife;

+ 4 - 2
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/material/excel/MaterialInfoImportExcelVO.java

@@ -7,6 +7,8 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.experimental.Accessors;
 
+import java.math.BigDecimal;
+
 /**
  * 物资信息 Excel 导入 VO
  */
@@ -39,10 +41,10 @@ public class MaterialInfoImportExcelVO {
     private String specification;
 
     @ExcelProperty("最高库存量")
-    private Integer maxNum;
+    private BigDecimal maxNum;
 
     @ExcelProperty("最低库存量")
-    private Integer minNum;
+    private BigDecimal minNum;
 
     @ExcelProperty("保质期(月)")
     private Integer shelfLife;

+ 2 - 2
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/materialio/MaterialInBalanceRespVO.java

@@ -36,10 +36,10 @@ public class MaterialInBalanceRespVO {
     private String materialUnit;
 
     @Schema(description = "数量(批次入库数量)")
-    private Integer inQty;
+    private BigDecimal inQty;
 
     @Schema(description = "可出库数量")
-    private Integer availableQty;
+    private BigDecimal availableQty;
 
     @Schema(description = "入库单价")
     private BigDecimal inUnitPrice;

+ 1 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/materialio/MaterialIoOrderItemSaveReqVO.java

@@ -43,7 +43,7 @@ public class MaterialIoOrderItemSaveReqVO {
 
     @Schema(description = "数量", requiredMode = Schema.RequiredMode.REQUIRED)
     @NotNull(message = "quantity不能为空")
-    private Integer quantity;
+    private BigDecimal quantity;
 
     @Schema(description = "入库单价(出库单价=入库单价)")
     private BigDecimal inUnitPrice;

+ 1 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/materialio/inbound/MaterialInboundDetailRespVO.java

@@ -22,7 +22,7 @@ public class MaterialInboundDetailRespVO {
     private String materialUnit;
 
     @Schema(description = "数量", example = "7")
-    private Integer quantity;
+    private BigDecimal quantity;
 
     @Schema(description = "单价", example = "158.00")
     private BigDecimal inUnitPrice;

+ 1 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/materialio/inbound/MaterialInboundImportExcelVO.java

@@ -33,7 +33,7 @@ public class MaterialInboundImportExcelVO {
     private String refInStoreNumber;
 
     @ExcelProperty("数量")
-    private Integer quantity;
+    private BigDecimal quantity;
 
     @ExcelProperty("入库单价")
     private BigDecimal inUnitPrice;

+ 1 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/materialio/inbound/MaterialInboundOrderExportExcelVO.java

@@ -40,7 +40,7 @@ public class MaterialInboundOrderExportExcelVO {
     private LocalDate produceDate;
 
     @ExcelProperty("入库数量")
-    private Integer inQty;
+    private BigDecimal inQty;
 
     @ExcelProperty("入库单价")
     private BigDecimal inUnitPrice;

+ 3 - 3
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/materialio/inbound/MaterialInboundOrderItemRespVO.java

@@ -35,13 +35,13 @@ public class MaterialInboundOrderItemRespVO {
     private String refInStoreName;
 
     /** 本批次入库数量 */
-    private Integer inQty;
+    private BigDecimal inQty;
 
     /** 本批次已出库数量(累计) */
-    private Integer outQty;
+    private BigDecimal outQty;
 
     /** 本批次当前可用数量(冗余:in_qty - out_qty) */
-    private Integer availableQty;
+    private BigDecimal availableQty;
 
     private BigDecimal inUnitPrice;
 

+ 1 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/materialio/inbound/MaterialInboundSummaryRespVO.java

@@ -18,7 +18,7 @@ public class MaterialInboundSummaryRespVO {
     @Schema(description = "供应商名称", example = "杭州XX供应商")
     private String supplierName;
 
-    @Schema(description = "入库单数", example = "5")
+    @Schema(description = "单据张数", example = "5")
     private Integer orderCount;
 
     @Schema(description = "入库总金额", example = "10000.00")

+ 2 - 2
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/materialio/inboundreturn/MaterialInboundReturnOrderItemRespVO.java

@@ -28,7 +28,7 @@ public class MaterialInboundReturnOrderItemRespVO {
     private String storeName;
 
     @Schema(description = "退回数量")
-    private Integer quantity;
+    private BigDecimal quantity;
 
     @Schema(description = "扣减的入库批次ID")
     private Long refInboundItemId;
@@ -40,6 +40,6 @@ public class MaterialInboundReturnOrderItemRespVO {
     private BigDecimal amount;
 
     @Schema(description = "可退回数量(关联原入库批次明细的可用数量)")
-    private Integer availableQty;
+    private BigDecimal availableQty;
 }
 

+ 3 - 2
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/materialio/inventory/MaterialInventoryFlowRespVO.java

@@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.system.controller.admin.biz.vo.materialio.invent
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 @Schema(description = "管理后台 - 库存流水查询 Response VO")
@@ -25,7 +26,7 @@ public class MaterialInventoryFlowRespVO {
         private String materialName;
 
         @Schema(description = "库存数", example = "0")
-        private Integer inventoryQty;
+        private BigDecimal inventoryQty;
 
         @Schema(description = "物资类别", example = "办公设备")
         private String categoryName;
@@ -54,7 +55,7 @@ public class MaterialInventoryFlowRespVO {
         private String operationType;
 
         @Schema(description = "数量", example = "1")
-        private Integer quantity;
+        private BigDecimal quantity;
 
         @Schema(description = "部门", example = "京东自营")
         private String deptName;

+ 4 - 4
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/materialio/inventory/MaterialInventoryReportExcelVO.java

@@ -21,28 +21,28 @@ public class MaterialInventoryReportExcelVO {
     private String materialUnit;
 
     @ExcelProperty("期初余额-数量")
-    private Integer beginQty;
+    private BigDecimal beginQty;
     @ExcelProperty("期初余额-单价")
     private BigDecimal beginPrice;
     @ExcelProperty("期初余额-金额")
     private BigDecimal beginAmount;
 
     @ExcelProperty("本期收入-数量")
-    private Integer inQty;
+    private BigDecimal inQty;
     @ExcelProperty("本期收入-单价")
     private BigDecimal inPrice;
     @ExcelProperty("本期收入-金额")
     private BigDecimal inAmount;
 
     @ExcelProperty("本期支出-数量")
-    private Integer outQty;
+    private BigDecimal outQty;
     @ExcelProperty("本期支出-单价")
     private BigDecimal outPrice;
     @ExcelProperty("本期支出-金额")
     private BigDecimal outAmount;
 
     @ExcelProperty("本期结余-数量")
-    private Integer endQty;
+    private BigDecimal endQty;
     @ExcelProperty("本期结余-单价")
     private BigDecimal endPrice;
     @ExcelProperty("本期结余-金额")

+ 4 - 4
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/materialio/inventory/MaterialInventoryReportRespVO.java

@@ -31,28 +31,28 @@ public class MaterialInventoryReportRespVO {
     private String materialUnit;
 
     @Schema(description = "期初余额-数量", example = "0")
-    private Integer beginQty;
+    private BigDecimal beginQty;
     @Schema(description = "期初余额-单价", example = "24.00")
     private BigDecimal beginPrice;
     @Schema(description = "期初余额-金额", example = "0.00")
     private BigDecimal beginAmount;
 
     @Schema(description = "本期收入-数量", example = "0")
-    private Integer inQty;
+    private BigDecimal inQty;
     @Schema(description = "本期收入-单价", example = "24.00")
     private BigDecimal inPrice;
     @Schema(description = "本期收入-金额", example = "0.00")
     private BigDecimal inAmount;
 
     @Schema(description = "本期支出-数量", example = "0")
-    private Integer outQty;
+    private BigDecimal outQty;
     @Schema(description = "本期支出-单价", example = "24.00")
     private BigDecimal outPrice;
     @Schema(description = "本期支出-金额", example = "0.00")
     private BigDecimal outAmount;
 
     @Schema(description = "本期结余-数量", example = "0")
-    private Integer endQty;
+    private BigDecimal endQty;
     @Schema(description = "本期结余-单价", example = "24.00")
     private BigDecimal endPrice;
     @Schema(description = "本期结余-金额", example = "0.00")

+ 1 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/materialio/outbound/MaterialOutboundDetailRespVO.java

@@ -22,7 +22,7 @@ public class MaterialOutboundDetailRespVO {
     private String materialUnit;
 
     @Schema(description = "数量", example = "1")
-    private Integer quantity;
+    private BigDecimal quantity;
 
     @Schema(description = "单价", example = "1.65")
     private BigDecimal inUnitPrice;

+ 1 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/materialio/outbound/MaterialOutboundImportExcelVO.java

@@ -48,7 +48,7 @@ public class MaterialOutboundImportExcelVO {
     private String inboundOrderNo;
 
     @ExcelProperty("数量")
-    private Integer quantity;
+    private BigDecimal quantity;
 
     @ExcelProperty("销售单价")
     private BigDecimal saleUnitPrice;

+ 1 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/materialio/outbound/MaterialOutboundOrderExportExcelVO.java

@@ -46,7 +46,7 @@ public class MaterialOutboundOrderExportExcelVO {
     private LocalDate produceDate;
 
     @ExcelProperty("出库数量")
-    private Integer quantity;
+    private BigDecimal quantity;
 
     @ExcelProperty("入库单价")
     private BigDecimal inUnitPrice;

+ 2 - 2
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/materialio/outbound/MaterialOutboundOrderItemRespVO.java

@@ -31,7 +31,7 @@ public class MaterialOutboundOrderItemRespVO {
     @Schema(description = "关联入库单号")
     private String refInOrderNo;
 
-    private Integer quantity;
+    private BigDecimal quantity;
 
     private BigDecimal inUnitPrice;
 
@@ -43,7 +43,7 @@ public class MaterialOutboundOrderItemRespVO {
     private LocalDate produceDate;
 
     @Schema(description = "最新可出库数量")
-    private Integer latestAvailableQty;
+    private BigDecimal latestAvailableQty;
 
     @Schema(description = "入库仓库ID")
     private Long refInStoreId;

+ 1 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/materialio/outboundreturn/MaterialOutboundReturnOrderItemRespVO.java

@@ -27,7 +27,7 @@ public class MaterialOutboundReturnOrderItemRespVO {
     private String storeName;
     
     @Schema(description = "退回数量")
-    private Integer quantity;
+    private BigDecimal quantity;
 
     @Schema(description = "关联的原入库批次ID")
     private Long inboundItemId;

+ 108 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/biz/ElderlyBuildFloorActivityImageDO.java

@@ -0,0 +1,108 @@
+package cn.iocoder.yudao.module.system.dal.dataobject.biz;
+
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseNoDeleteDO;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+/**
+ * 楼层活动图片记录 DO
+ *
+ * @author 系统管理员
+ */
+@TableName("elderly_build_floor_activity_image")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ElderlyBuildFloorActivityImageDO extends BaseNoDeleteDO {
+
+    /**
+     * 主键ID
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 记录月
+     */
+    @Schema(description = "记录月")
+    private String recordMonth;
+
+    /**
+     * 第几周
+     */
+    @Schema(description = "第几周")
+    private Integer week;
+
+    /**
+     * 楼栋id
+     */
+    @Schema(description = "楼栋id")
+    private Long buildId;
+
+    /**
+     * 楼层id
+     */
+    @Schema(description = "楼层id")
+    private Long floorId;
+
+    /**
+     * 长者姓名
+     */
+    @Schema(description = "长者姓名")
+    private String elderName;
+
+    /**
+     * 记录时间
+     */
+    @Schema(description = "记录时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND, timezone = "GMT+8")
+    private Date recordTime;
+
+    /**
+     * 所属楼层
+     */
+    @Schema(description = "所属楼层")
+    private String belongFloor;
+
+    /**
+     * 活动日期
+     */
+    @Schema(description = "活动日期")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND, timezone = "GMT+8")
+    private Date activityDate;
+
+    /**
+     * 活动内容
+     */
+    @Schema(description = "活动内容")
+    private String activityContent;
+
+    /**
+     * 活动图片
+     */
+    @Schema(description = "活动图片")
+    private String activityImage;
+
+    /**
+     * 机构id
+     */
+    @Schema(description = "机构id")
+    private Long tenantId;
+}
+
+
+

+ 129 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/biz/ElderlyBuildFloorActivityTextDO.java

@@ -0,0 +1,129 @@
+package cn.iocoder.yudao.module.system.dal.dataobject.biz;
+
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseNoDeleteDO;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+/**
+ * 楼层活动文字记录 DO
+ *
+ * @author 系统管理员
+ */
+@TableName("elderly_build_floor_activity_text")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ElderlyBuildFloorActivityTextDO extends BaseNoDeleteDO {
+
+    /**
+     * 主键ID
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 记录月
+     */
+    @Schema(description = "记录月")
+    private String recordMonth;
+
+    /**
+     * 第几周
+     */
+    @Schema(description = "第几周")
+    private Integer week;
+
+    /**
+     * 楼栋id
+     */
+    @Schema(description = "楼栋id")
+    @TableField("buid_id")
+    private Long buidId;
+
+    /**
+     * 楼层id
+     */
+    @Schema(description = "楼层id")
+    private Long floorId;
+
+    /**
+     * 长者姓名
+     */
+    @Schema(description = "长者姓名")
+    private String elderName;
+
+    /**
+     * 日期
+     */
+    @Schema(description = "日期")
+    private String activityDate;
+
+    /**
+     * 早上第一个时间段
+     */
+    @Schema(description = "早上第一个时间段")
+    private String morningOne;
+
+    /**
+     * 早上第二个时间段
+     */
+    @Schema(description = "早上第二个时间段")
+    private String morningTwo;
+
+    /**
+     * 午餐
+     */
+    @Schema(description = "午餐")
+    private String lunch;
+
+    /**
+     * 中午
+     */
+    @Schema(description = "中午")
+    private String noon;
+
+    /**
+     * 下午
+     */
+    @Schema(description = "下午")
+    private String afternonn;
+
+    /**
+     * 执行人
+     */
+    @Schema(description = "执行人")
+    private String excuteName;
+
+    /**
+     * 执行记录
+     */
+    @Schema(description = "执行记录")
+    private String excuteRecord;
+
+    /**
+     * 记录时间
+     */
+    @Schema(description = "记录时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND, timezone = "GMT+8")
+    private Date recordTime;
+
+    /**
+     * 机构id
+     */
+    @Schema(description = "机构id")
+    private Long tenantId;
+}

+ 67 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/biz/ElderlyCcbPayOrderRecordDO.java

@@ -0,0 +1,67 @@
+package cn.iocoder.yudao.module.system.dal.dataobject.biz;
+
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseNoDeleteDO;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+/**
+ * 建行支付账单记录 DO
+ *
+ * @author 系统管理员
+ */
+@TableName("elderly_ccb_pay_order_record")
+@Data
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ElderlyCcbPayOrderRecordDO {
+
+    /**
+     * id
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 账单id
+     */
+    @Schema(description = "账单id")
+    private Long expenseOrderId;
+
+    /**
+     * 账单月
+     */
+    @Schema(description = "账单月")
+    private String billingMonth;
+
+    /**
+     * 支付时间
+     */
+    @Schema(description = "支付时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND, timezone = "GMT+8")
+    private Date payTime;
+
+    /**
+     * 金额
+     */
+    @Schema(description = "金额")
+    private BigDecimal payAmount;
+
+    /**
+     * 机构id
+     */
+    @Schema(description = "机构id")
+    private Long tenantId;
+}

+ 3 - 3
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/biz/MaterialInboundOrderItemDO.java

@@ -38,13 +38,13 @@ public class MaterialInboundOrderItemDO extends BaseNoDeleteDO {
     private Long storeId;
 
     /** 本批次入库数量 */
-    private Integer inQty;
+    private BigDecimal inQty;
 
     /** 本批次已出库数量(累计) */
-    private Integer outQty;
+    private BigDecimal outQty;
 
     /** 本批次当前可用数量(冗余:in_qty - out_qty) */
-    private Integer availableQty;
+    private BigDecimal availableQty;
 
     /** 入库单价 */
     private BigDecimal inUnitPrice;

+ 3 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/biz/MaterialInboundReturnOrderItemDO.java

@@ -6,6 +6,8 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.*;
 
+import java.math.BigDecimal;
+
 
 @TableName("material_inbound_return_order_item")
 @KeySequence("material_inbound_return_order_item_seq")
@@ -22,6 +24,6 @@ public class MaterialInboundReturnOrderItemDO extends BaseNoDeleteDO {
     private Long returnOrderId;
     private Long refInboundItemId;
     private Long materialId;
-    private Integer quantity;
+    private BigDecimal quantity;
     private Long tenantId;
 }

+ 3 - 3
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/biz/MaterialInfoDO.java

@@ -47,13 +47,13 @@ public class MaterialInfoDO extends BaseNoDeleteDO {
     private String specification;
 
     /** 当前库存量 */
-    private Integer materialCount;
+    private BigDecimal materialCount;
 
     /** 最高库存量 */
-    private Integer maxNum;
+    private BigDecimal maxNum;
 
     /** 最低库存量 */
-    private Integer minNum;
+    private BigDecimal minNum;
 
     /** 保质期(月) */
     private Integer shelfLife;

+ 2 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/biz/MaterialOutboundOrderItemDO.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.*;
 
+import java.math.BigDecimal;
 import java.time.LocalDate;
 
 /**
@@ -37,7 +38,7 @@ public class MaterialOutboundOrderItemDO extends BaseNoDeleteDO {
     private Long materialId;
 
     /** 出库数量 */
-    private Integer quantity;
+    private BigDecimal quantity;
 
     /** 租户 ID */
     private Long tenantId;

+ 3 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/biz/MaterialOutboundReturnOrderItemDO.java

@@ -6,6 +6,8 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.*;
 
+import java.math.BigDecimal;
+
 @TableName("material_outbound_return_order_item")
 @KeySequence("material_outbound_return_order_item_seq")
 @Data
@@ -22,6 +24,6 @@ public class MaterialOutboundReturnOrderItemDO extends BaseNoDeleteDO {
     private Long inboundItemId;
     private Long outboundItemId;
     private Long materialId;
-    private Integer quantity;
+    private BigDecimal quantity;
     private Long tenantId;
 }

+ 30 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/biz/ElderlyBuildFloorActivityImageMapper.java

@@ -0,0 +1,30 @@
+package cn.iocoder.yudao.module.system.dal.mysql.biz;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.module.system.controller.admin.biz.vo.elderlyactivityimage.ElderlyBuildFloorActivityImagePageReqVO;
+import cn.iocoder.yudao.module.system.dal.dataobject.biz.ElderlyBuildFloorActivityImageDO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 楼层活动图片记录 Mapper
+ *
+ * @author 系统管理员
+ */
+@Mapper
+public interface ElderlyBuildFloorActivityImageMapper extends BaseMapperX<ElderlyBuildFloorActivityImageDO> {
+
+    default PageResult<ElderlyBuildFloorActivityImageDO> selectPage(ElderlyBuildFloorActivityImagePageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<ElderlyBuildFloorActivityImageDO>()
+                .likeIfPresent(ElderlyBuildFloorActivityImageDO::getElderName, reqVO.getElderName())
+                .eqIfPresent(ElderlyBuildFloorActivityImageDO::getBuildId, reqVO.getBuildId())
+                .eqIfPresent(ElderlyBuildFloorActivityImageDO::getFloorId, reqVO.getFloorId())
+                .eqIfPresent(ElderlyBuildFloorActivityImageDO::getRecordMonth, reqVO.getRecordMonth())
+                .eqIfPresent(ElderlyBuildFloorActivityImageDO::getTenantId, reqVO.getTenantId())
+                .orderByDesc(ElderlyBuildFloorActivityImageDO::getId));
+    }
+}
+
+
+

+ 27 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/biz/ElderlyBuildFloorActivityTextMapper.java

@@ -0,0 +1,27 @@
+package cn.iocoder.yudao.module.system.dal.mysql.biz;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.module.system.controller.admin.biz.vo.elderlyactivitytext.ElderlyBuildFloorActivityTextPageReqVO;
+import cn.iocoder.yudao.module.system.dal.dataobject.biz.ElderlyBuildFloorActivityTextDO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 楼层活动文字记录 Mapper
+ *
+ * @author 系统管理员
+ */
+@Mapper
+public interface ElderlyBuildFloorActivityTextMapper extends BaseMapperX<ElderlyBuildFloorActivityTextDO> {
+
+    default PageResult<ElderlyBuildFloorActivityTextDO> selectPage(ElderlyBuildFloorActivityTextPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<ElderlyBuildFloorActivityTextDO>()
+                .likeIfPresent(ElderlyBuildFloorActivityTextDO::getElderName, reqVO.getElderName())
+                .eqIfPresent(ElderlyBuildFloorActivityTextDO::getBuidId, reqVO.getBuidId())
+                .eqIfPresent(ElderlyBuildFloorActivityTextDO::getFloorId, reqVO.getFloorId())
+                .eqIfPresent(ElderlyBuildFloorActivityTextDO::getRecordMonth, reqVO.getRecordMonth())
+                .eqIfPresent(ElderlyBuildFloorActivityTextDO::getTenantId, reqVO.getTenantId())
+                .orderByDesc(ElderlyBuildFloorActivityTextDO::getId));
+    }
+}

+ 14 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/biz/ElderlyCcbPayOrderRecordMapper.java

@@ -0,0 +1,14 @@
+package cn.iocoder.yudao.module.system.dal.mysql.biz;
+
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.module.system.dal.dataobject.biz.ElderlyCcbPayOrderRecordDO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 建行支付账单记录 Mapper
+ *
+ * @author 系统管理员
+ */
+@Mapper
+public interface ElderlyCcbPayOrderRecordMapper extends BaseMapperX<ElderlyCcbPayOrderRecordDO> {
+}

+ 1 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/biz/BalanceServiceImpl.java

@@ -132,7 +132,7 @@ public class BalanceServiceImpl implements BalanceService {
                 balanceRecordDO.setCreatedTime(new Date());
                 balanceRecordDO.setCreatedBy(SecurityFrameworkUtils.getLoginUserNickname());
                 balanceRecordMapper.insert(balanceRecordDO);
-                amount = amount.subtract(balanceRecordDO.getChangeAmount());
+                amount = amount.add(balanceRecordDO.getChangeAmount());
             }
             balance.setAmount(amount);
             balanceMapper.updateById(balance);

+ 54 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/biz/ElderlyBuildFloorActivityImageService.java

@@ -0,0 +1,54 @@
+package cn.iocoder.yudao.module.system.service.biz;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.system.controller.admin.biz.vo.elderlyactivityimage.ElderlyBuildFloorActivityImagePageReqVO;
+import cn.iocoder.yudao.module.system.controller.admin.biz.vo.elderlyactivityimage.ElderlyBuildFloorActivityImageRespVO;
+import cn.iocoder.yudao.module.system.controller.admin.biz.vo.elderlyactivityimage.ElderlyBuildFloorActivityImageSaveReqVO;
+
+import javax.validation.Valid;
+
+/**
+ * 楼层活动图片记录 Service 接口
+ *
+ * @author 系统管理员
+ */
+public interface ElderlyBuildFloorActivityImageService {
+
+    /**
+     * 创建楼层活动图片记录
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createElderlyBuildFloorActivityImage(@Valid ElderlyBuildFloorActivityImageSaveReqVO createReqVO);
+
+    /**
+     * 更新楼层活动图片记录
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateElderlyBuildFloorActivityImage(@Valid ElderlyBuildFloorActivityImageSaveReqVO updateReqVO);
+
+    /**
+     * 删除楼层活动图片记录
+     *
+     * @param id 编号
+     */
+    void deleteElderlyBuildFloorActivityImage(Long id);
+
+    /**
+     * 获得楼层活动图片记录
+     *
+     * @param id 编号
+     * @return 楼层活动图片记录
+     */
+    ElderlyBuildFloorActivityImageRespVO getElderlyBuildFloorActivityImage(Long id);
+
+    /**
+     * 获得楼层活动图片记录分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 楼层活动图片记录分页
+     */
+    PageResult<ElderlyBuildFloorActivityImageRespVO> getElderlyBuildFloorActivityImagePage(ElderlyBuildFloorActivityImagePageReqVO pageReqVO);
+}

+ 70 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/biz/ElderlyBuildFloorActivityImageServiceImpl.java

@@ -0,0 +1,70 @@
+package cn.iocoder.yudao.module.system.service.biz;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.system.controller.admin.biz.vo.elderlyactivityimage.ElderlyBuildFloorActivityImagePageReqVO;
+import cn.iocoder.yudao.module.system.controller.admin.biz.vo.elderlyactivityimage.ElderlyBuildFloorActivityImageRespVO;
+import cn.iocoder.yudao.module.system.controller.admin.biz.vo.elderlyactivityimage.ElderlyBuildFloorActivityImageSaveReqVO;
+import cn.iocoder.yudao.module.system.dal.dataobject.biz.ElderlyBuildFloorActivityImageDO;
+import cn.iocoder.yudao.module.system.dal.mysql.biz.ElderlyBuildFloorActivityImageMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import javax.annotation.Resource;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.COMMON_NOT_FOUND;
+
+/**
+ * 楼层活动图片记录 Service 实现类
+ *
+ * @author 系统管理员
+ */
+@Service
+@Validated
+public class ElderlyBuildFloorActivityImageServiceImpl implements ElderlyBuildFloorActivityImageService {
+
+    @Resource
+    private ElderlyBuildFloorActivityImageMapper elderlyBuildFloorActivityImageMapper;
+
+    @Override
+    public Long createElderlyBuildFloorActivityImage(ElderlyBuildFloorActivityImageSaveReqVO createReqVO) {
+        ElderlyBuildFloorActivityImageDO record = BeanUtils.toBean(createReqVO, ElderlyBuildFloorActivityImageDO.class);
+        elderlyBuildFloorActivityImageMapper.insert(record);
+        return record.getId();
+    }
+
+    @Override
+    public void updateElderlyBuildFloorActivityImage(ElderlyBuildFloorActivityImageSaveReqVO updateReqVO) {
+        validateElderlyBuildFloorActivityImageExists(updateReqVO.getId());
+        ElderlyBuildFloorActivityImageDO updateObj = BeanUtils.toBean(updateReqVO, ElderlyBuildFloorActivityImageDO.class);
+        elderlyBuildFloorActivityImageMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteElderlyBuildFloorActivityImage(Long id) {
+        validateElderlyBuildFloorActivityImageExists(id);
+        elderlyBuildFloorActivityImageMapper.deleteById(id);
+    }
+
+    @Override
+    public ElderlyBuildFloorActivityImageRespVO getElderlyBuildFloorActivityImage(Long id) {
+        ElderlyBuildFloorActivityImageDO record = elderlyBuildFloorActivityImageMapper.selectById(id);
+        if (record == null) {
+            throw exception(COMMON_NOT_FOUND);
+        }
+        return BeanUtils.toBean(record, ElderlyBuildFloorActivityImageRespVO.class);
+    }
+
+    @Override
+    public PageResult<ElderlyBuildFloorActivityImageRespVO> getElderlyBuildFloorActivityImagePage(ElderlyBuildFloorActivityImagePageReqVO pageReqVO) {
+        PageResult<ElderlyBuildFloorActivityImageDO> pageResult = elderlyBuildFloorActivityImageMapper.selectPage(pageReqVO);
+        return new PageResult<>(BeanUtils.toBean(pageResult.getList(), ElderlyBuildFloorActivityImageRespVO.class), pageResult.getTotal());
+    }
+
+    private void validateElderlyBuildFloorActivityImageExists(Long id) {
+        if (id == null || elderlyBuildFloorActivityImageMapper.selectById(id) == null) {
+            throw exception(COMMON_NOT_FOUND);
+        }
+    }
+}

+ 54 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/biz/ElderlyBuildFloorActivityTextService.java

@@ -0,0 +1,54 @@
+package cn.iocoder.yudao.module.system.service.biz;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.system.controller.admin.biz.vo.elderlyactivitytext.ElderlyBuildFloorActivityTextPageReqVO;
+import cn.iocoder.yudao.module.system.controller.admin.biz.vo.elderlyactivitytext.ElderlyBuildFloorActivityTextRespVO;
+import cn.iocoder.yudao.module.system.controller.admin.biz.vo.elderlyactivitytext.ElderlyBuildFloorActivityTextSaveReqVO;
+
+import javax.validation.Valid;
+
+/**
+ * 楼层活动文字记录 Service 接口
+ *
+ * @author 系统管理员
+ */
+public interface ElderlyBuildFloorActivityTextService {
+
+    /**
+     * 创建楼层活动文字记录
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createElderlyBuildFloorActivityText(@Valid ElderlyBuildFloorActivityTextSaveReqVO createReqVO);
+
+    /**
+     * 更新楼层活动文字记录
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateElderlyBuildFloorActivityText(@Valid ElderlyBuildFloorActivityTextSaveReqVO updateReqVO);
+
+    /**
+     * 删除楼层活动文字记录
+     *
+     * @param id 编号
+     */
+    void deleteElderlyBuildFloorActivityText(Long id);
+
+    /**
+     * 获得楼层活动文字记录
+     *
+     * @param id 编号
+     * @return 楼层活动文字记录
+     */
+    ElderlyBuildFloorActivityTextRespVO getElderlyBuildFloorActivityText(Long id);
+
+    /**
+     * 获得楼层活动文字记录分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 楼层活动文字记录分页
+     */
+    PageResult<ElderlyBuildFloorActivityTextRespVO> getElderlyBuildFloorActivityTextPage(ElderlyBuildFloorActivityTextPageReqVO pageReqVO);
+}

+ 71 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/biz/ElderlyBuildFloorActivityTextServiceImpl.java

@@ -0,0 +1,71 @@
+package cn.iocoder.yudao.module.system.service.biz;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.system.controller.admin.biz.vo.elderlyactivitytext.ElderlyBuildFloorActivityTextPageReqVO;
+import cn.iocoder.yudao.module.system.controller.admin.biz.vo.elderlyactivitytext.ElderlyBuildFloorActivityTextRespVO;
+import cn.iocoder.yudao.module.system.controller.admin.biz.vo.elderlyactivitytext.ElderlyBuildFloorActivityTextSaveReqVO;
+import cn.iocoder.yudao.module.system.dal.dataobject.biz.ElderlyBuildFloorActivityTextDO;
+import cn.iocoder.yudao.module.system.dal.mysql.biz.ElderlyBuildFloorActivityTextMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import javax.annotation.Resource;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.COMMON_NOT_FOUND;
+
+/**
+ * 楼层活动文字记录 Service 实现类
+ *
+ * @author 系统管理员
+ */
+@Service
+@Validated
+public class ElderlyBuildFloorActivityTextServiceImpl implements ElderlyBuildFloorActivityTextService {
+
+    @Resource
+    private ElderlyBuildFloorActivityTextMapper elderlyBuildFloorActivityTextMapper;
+
+    @Override
+    public Long createElderlyBuildFloorActivityText(ElderlyBuildFloorActivityTextSaveReqVO createReqVO) {
+        ElderlyBuildFloorActivityTextDO record = BeanUtils.toBean(createReqVO, ElderlyBuildFloorActivityTextDO.class);
+        elderlyBuildFloorActivityTextMapper.insert(record);
+        return record.getId();
+    }
+
+    @Override
+    public void updateElderlyBuildFloorActivityText(ElderlyBuildFloorActivityTextSaveReqVO updateReqVO) {
+        validateElderlyBuildFloorActivityTextExists(updateReqVO.getId());
+        ElderlyBuildFloorActivityTextDO updateObj = BeanUtils.toBean(updateReqVO, ElderlyBuildFloorActivityTextDO.class);
+        elderlyBuildFloorActivityTextMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteElderlyBuildFloorActivityText(Long id) {
+        validateElderlyBuildFloorActivityTextExists(id);
+        elderlyBuildFloorActivityTextMapper.deleteById(id);
+    }
+
+    @Override
+    public ElderlyBuildFloorActivityTextRespVO getElderlyBuildFloorActivityText(Long id) {
+        ElderlyBuildFloorActivityTextDO record = elderlyBuildFloorActivityTextMapper.selectById(id);
+        if (record == null) {
+            throw exception(COMMON_NOT_FOUND);
+        }
+        return BeanUtils.toBean(record, ElderlyBuildFloorActivityTextRespVO.class);
+    }
+
+    @Override
+    public PageResult<ElderlyBuildFloorActivityTextRespVO> getElderlyBuildFloorActivityTextPage(ElderlyBuildFloorActivityTextPageReqVO pageReqVO) {
+        PageResult<ElderlyBuildFloorActivityTextDO> pageResult = elderlyBuildFloorActivityTextMapper.selectPage(pageReqVO);
+        return new PageResult<>(BeanUtils.toBean(pageResult.getList(), ElderlyBuildFloorActivityTextRespVO.class), pageResult.getTotal());
+    }
+
+    private void validateElderlyBuildFloorActivityTextExists(Long id) {
+        if (id == null || elderlyBuildFloorActivityTextMapper.selectById(id) == null) {
+            throw exception(COMMON_NOT_FOUND);
+        }
+    }
+}
+

+ 3 - 2
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/biz/ElderlyOrderFoodServiceImpl.java

@@ -54,11 +54,12 @@ public class ElderlyOrderFoodServiceImpl implements ElderlyOrderFoodService {
         for (Long elderId : map.keySet()) {
             ElderlyOrderFoodCommitVO firstItem = map.get(elderId).get(0);
             LocalDate orderFoodDate = firstItem.getOrderFoodDate();
-            LocalDate endDate = orderFoodDate.plusDays(6);
+            LocalDate monday = orderFoodDate.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
+            LocalDate sunday = orderFoodDate.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY));
             elderlyOrderFoodMapper.delete(new LambdaQueryWrapperX<ElderlyOrderFoodDO>()
                     .eq(ElderlyOrderFoodDO::getElderId, elderId)
                     .eq(ElderlyOrderFoodDO::getTenantId, firstItem.getTenantId())
-                    .between(ElderlyOrderFoodDO::getOrderFoodDate, orderFoodDate, endDate));
+                    .between(ElderlyOrderFoodDO::getOrderFoodDate, monday, sunday));
         }
         List<ElderlyOrderFoodDO> insertList = voList.stream()
                 .map(vo -> {

+ 20 - 3
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/biz/ExpenseOrderServiceImpl.java

@@ -428,9 +428,8 @@ public class ExpenseOrderServiceImpl implements ExpenseOrderService {
                     balanceRecord.setCreatedTime(new Date());
                     balanceRecord.setCreatedBy(SecurityFrameworkUtils.getLoginUserNickname());
 
-                    redisTemplate.opsForValue().increment(RedisKeyConstants.BALANCE_REDIS_KEY);
-                    Integer redisValue = (Integer) redisTemplate.opsForValue().get(RedisKeyConstants.BALANCE_REDIS_KEY);
-                    balanceRecord.setOrderNumber(SerialCodeUtils.generateOrderNumber(redisValue));
+                    // 记录账单号
+                    balanceRecord.setOrderNumber(expenseOrder.getBillOrderNumber());
                     balanceRecordMapper.insert(balanceRecord);
                 }
             }
@@ -2802,6 +2801,24 @@ public class ExpenseOrderServiceImpl implements ExpenseOrderService {
                 }
             }
         }
+        // 9. 回退余额
+        BalanceRecordDO balanceRecordDO = balanceRecordMapper.selectOne(new LambdaQueryWrapperX<BalanceRecordDO>()
+                .eq(BalanceRecordDO::getOrderNumber, expenseOrder.getBillOrderNumber())
+                .eq(BalanceRecordDO::getType,3));
+        if(balanceRecordDO != null) {
+            BalanceRecordDO refundBalance = new BalanceRecordDO();
+            BalanceDO balance = balanceMapper.selectOne(new LambdaQueryWrapperX<BalanceDO>().eq(BalanceDO::getElderId, expenseOrder.getElderId()));
+            refundBalance.setPayType(expenseOrder.getPayType());
+            refundBalance.setChangeAmount(balanceRecordDO.getChangeAmount());
+            refundBalance.setType(2); //消费
+            refundBalance.setElderId(balance.getElderId());
+            refundBalance.setCreatedTime(new Date());
+            refundBalance.setCreatedBy(SecurityFrameworkUtils.getLoginUserNickname());
+            refundBalance.setRemarks("账单撤销,撤销月份:" + expenseOrder.getBillingMonth() + ",退回金额:" + refundBalance.getChangeAmount());
+            balanceRecordMapper.insert(refundBalance);
+            balance.setAmount(balance.getAmount().add(refundBalance.getChangeAmount()));
+            balanceMapper.updateById(balance);
+        }
     }
 
     @Override

+ 7 - 3
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/biz/ExpenseServiceImpl.java

@@ -389,7 +389,7 @@ public class ExpenseServiceImpl implements ExpenseService {
                 }
             }
         }
-        BigDecimal reservationDeposit = handleReservation(elderlyInfo.getIdCard(), expenseBill.getId());
+        BigDecimal reservationDeposit = handleReservation(elderlyInfo.getElderName(), expenseBill.getId());
         expenseBill.setActualAmount(amount.add(reservationDeposit));
         expenseOrderMapper.updateById(expenseBill);
         //生成押金记录
@@ -1032,9 +1032,13 @@ public class ExpenseServiceImpl implements ExpenseService {
         bpmBusinessFormApi.createBusinessForm(businessFormDTO);
     }
 
-    private BigDecimal handleReservation(String idCard,Long expenseOrderId){
+    /**
+     * 定金抵扣
+     */
+    private BigDecimal handleReservation(String elderName,Long expenseOrderId){
+        // 预约时,家属不愿意提供身份证,只能通过长者姓名匹配
         ReservationBedDO reservationBedDO = reservationBedMapper.selectOne(new LambdaQueryWrapperX<ReservationBedDO>()
-                .eq(ReservationBedDO::getIdNumber, idCard)
+                .eq(ReservationBedDO::getElderName, elderName)
                 .eq(ReservationBedDO::getTenantId, TenantContextHolder.getTenantId()));
         if(reservationBedDO == null){
             return BigDecimal.ZERO;

+ 2 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/biz/MaterialInfoServiceImpl.java

@@ -23,6 +23,7 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.Resource;
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -242,7 +243,7 @@ public class MaterialInfoServiceImpl implements MaterialInfoService {
                 materialInfo.setMaterialUnit(excelVO.getMaterialUnit());
                 materialInfo.setSupplierId(supplierId);
                 materialInfo.setSpecification(excelVO.getSpecification());
-                materialInfo.setMaterialCount(0); // 默认库存为0
+                materialInfo.setMaterialCount(BigDecimal.ZERO); // 默认库存为0
                 materialInfo.setMaxNum(excelVO.getMaxNum());
                 materialInfo.setMinNum(excelVO.getMinNum());
                 materialInfo.setShelfLife(excelVO.getShelfLife());

+ 109 - 111
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/biz/MaterialIoServiceImpl.java

@@ -151,7 +151,7 @@ public class MaterialIoServiceImpl implements MaterialIoService {
             if (itemVO.getInboundItemId() == null) {
                 throw exceptionCustomMsg(COMMON_NOT_FOUND, "必须指定退回的入库批次");
             }
-            if (itemVO.getQuantity() == null || itemVO.getQuantity() <= 0) {
+            if (itemVO.getQuantity() == null || itemVO.getQuantity().compareTo(BigDecimal.ZERO) <= 0) {
                 throw exceptionCustomMsg(COMMON_NOT_FOUND, "退回数量必须大于0");
             }
 
@@ -163,13 +163,13 @@ public class MaterialIoServiceImpl implements MaterialIoService {
             if (outboundItem == null) {
                 throw exceptionCustomMsg(COMMON_NOT_FOUND, "原出库明细不存在");
             }
-            int originalOutQty = outboundItem.getQuantity() == null ? 0 : outboundItem.getQuantity();
-            if (originalOutQty < itemVO.getQuantity()) {
+            BigDecimal originalOutQty = outboundItem.getQuantity() == null ? BigDecimal.ZERO : outboundItem.getQuantity();
+            if (originalOutQty.compareTo(itemVO.getQuantity()) < 0) {
                 throw exceptionCustomMsg(COMMON_NOT_FOUND, "退回数量不能大于原出库数量");
             }
 
             // 出库退回应当对出库数量进行回扣:减少出库明细数量
-            outboundItem.setQuantity(originalOutQty - itemVO.getQuantity());
+            outboundItem.setQuantity(originalOutQty.subtract(itemVO.getQuantity()));
             outboundOrderItemMapper.updateById(outboundItem);
 
             // 4.3 更新批次信息(回补)
@@ -225,7 +225,7 @@ public class MaterialIoServiceImpl implements MaterialIoService {
             if (itemVO.getInboundItemId() == null) {
                 throw exceptionCustomMsg(COMMON_NOT_FOUND, "必须指定扣减的入库批次");
             }
-            if (itemVO.getQuantity() == null || itemVO.getQuantity() <= 0) {
+            if (itemVO.getQuantity() == null || itemVO.getQuantity().compareTo(BigDecimal.ZERO) <= 0) {
                 throw exceptionCustomMsg(COMMON_NOT_FOUND, "退回数量必须大于0");
             }
 
@@ -233,7 +233,7 @@ public class MaterialIoServiceImpl implements MaterialIoService {
             MaterialInboundOrderItemDO inboundItem = getInboundItemOrThrow(itemVO.getInboundItemId());
 
             // 4.3 校验可用数量
-            if (inboundItem.getAvailableQty() < itemVO.getQuantity()) {
+            if (inboundItem.getAvailableQty().compareTo(itemVO.getQuantity()) < 0) {
                 throw exceptionCustomMsg(COMMON_NOT_FOUND, "批次可用数量不足");
             }
 
@@ -241,7 +241,7 @@ public class MaterialIoServiceImpl implements MaterialIoService {
             applyInboundReturnToBatch(inboundItem, itemVO.getQuantity());
 
             // 4.5 更新总库存
-            updateMaterialStock(itemVO.getMaterialId(), -itemVO.getQuantity());
+            updateMaterialStock(itemVO.getMaterialId(), itemVO.getQuantity().negate());
 
             // 4.6 保存退回明细
             MaterialInboundReturnOrderItemDO item = MaterialInboundReturnOrderItemDO.builder()
@@ -279,7 +279,7 @@ public class MaterialIoServiceImpl implements MaterialIoService {
             MaterialInboundOrderItemDO item = BeanUtils.toBean(itemVO, MaterialInboundOrderItemDO.class);
             item.setInboundOrderId(order.getId());
             item.setInQty(itemVO.getQuantity());
-            item.setOutQty(0);
+            item.setOutQty(BigDecimal.ZERO);
             item.setAvailableQty(itemVO.getQuantity());
             item.setTenantId(createReqVO.getTenantId());
             item.setStoreId(itemVO.getRefInStoreId());
@@ -314,7 +314,7 @@ public class MaterialIoServiceImpl implements MaterialIoService {
             if (inboundItem == null) {
                 throw exceptionCustomMsg(COMMON_NOT_FOUND, "入库批次不存在");
             }
-            if (inboundItem.getAvailableQty() < itemVO.getQuantity()) {
+            if (inboundItem.getAvailableQty().compareTo(itemVO.getQuantity()) < 0) {
                 throw exceptionCustomMsg(COMMON_NOT_FOUND, "批次可用数量不足");
             }
 
@@ -328,8 +328,8 @@ public class MaterialIoServiceImpl implements MaterialIoService {
             outboundOrderItemMapper.insert(outboundItem);
 
             // 更新批次余额
-            inboundItem.setOutQty(inboundItem.getOutQty() + itemVO.getQuantity());
-            inboundItem.setAvailableQty(inboundItem.getAvailableQty() - itemVO.getQuantity());
+            inboundItem.setOutQty(inboundItem.getOutQty().add(itemVO.getQuantity()));
+            inboundItem.setAvailableQty(inboundItem.getAvailableQty().subtract(itemVO.getQuantity()));
             inboundOrderItemMapper.updateById(inboundItem);
         }
 
@@ -406,7 +406,7 @@ public class MaterialIoServiceImpl implements MaterialIoService {
                 // 恢复库存:删除入库明细等价于减少入库数量
                 MaterialInfoDO material = materialInfoMapper.selectById(oldItem.getMaterialId());
                 if (material != null) {
-                    material.setMaterialCount(material.getMaterialCount() - oldItem.getInQty());
+                    material.setMaterialCount(material.getMaterialCount().subtract(oldItem.getInQty()));
                     materialInfoMapper.updateById(material);
                 }
                 inboundOrderItemMapper.deleteById(deleteId);
@@ -418,7 +418,7 @@ public class MaterialIoServiceImpl implements MaterialIoService {
         inboundOrderMapper.updateById(updateObj);
 
         // 6. 更新已有明细(不允许修改 materialId;允许修改数量但需 >= outQty)
-        Map<Long, Integer> materialDeltaMap = new HashMap<>();
+        Map<Long, BigDecimal> materialDeltaMap = new HashMap<>();
         // 更新物资信息的入库单价
         List<MaterialInfoDO> updateMaterialPriceList = new ArrayList<>();
         for (Map.Entry<Long, MaterialIoOrderItemSaveReqVO> entry : updateReqMap.entrySet()) {
@@ -434,26 +434,25 @@ public class MaterialIoServiceImpl implements MaterialIoService {
                 throw exceptionCustomMsg(COMMON_NOT_FOUND, "入库明细已存在,不允许修改物资");
             }
 
-            Integer newInQty = itemVO.getQuantity();
+            BigDecimal newInQty = itemVO.getQuantity();
             if (newInQty == null) {
-                newInQty = 0;
+                newInQty = BigDecimal.ZERO;
             }
-            Integer outQty = oldItem.getOutQty() == null ? 0 : oldItem.getOutQty();
-            if (newInQty < outQty) {
+            BigDecimal outQty = oldItem.getOutQty() == null ? BigDecimal.ZERO : oldItem.getOutQty();
+            if (newInQty.compareTo(outQty) < 0) {
                 throw exceptionCustomMsg(COMMON_NOT_FOUND, "入库数量不能小于已出库数量");
             }
 
-            int oldInQty = oldItem.getInQty() == null ? 0 : oldItem.getInQty();
-            int delta = newInQty - oldInQty;
-            if (delta != 0) {
-                materialDeltaMap.merge(oldItem.getMaterialId(), delta, Integer::sum);
+            BigDecimal oldInQty = oldItem.getInQty() == null ? BigDecimal.ZERO : oldItem.getInQty();
+            BigDecimal delta = newInQty.subtract(oldInQty);
+            if (delta.compareTo(BigDecimal.ZERO) != 0) {
+                materialDeltaMap.merge(oldItem.getMaterialId(), delta, BigDecimal::add);
             }
-
             MaterialInboundOrderItemDO updateItem = BeanUtils.toBean(itemVO, MaterialInboundOrderItemDO.class);
             updateItem.setId(itemId);
             updateItem.setInboundOrderId(order.getId());
             updateItem.setInQty(newInQty);
-            updateItem.setAvailableQty(newInQty - outQty);
+            updateItem.setAvailableQty(newInQty.subtract(outQty));
             updateItem.setOutQty(outQty);
             updateItem.setTenantId(updateReqVO.getTenantId());
             updateItem.setStoreId(itemVO.getRefInStoreId());
@@ -469,23 +468,23 @@ public class MaterialIoServiceImpl implements MaterialIoService {
             MaterialInboundOrderItemDO item = BeanUtils.toBean(itemVO, MaterialInboundOrderItemDO.class);
             item.setInboundOrderId(order.getId());
             item.setInQty(itemVO.getQuantity());
-            item.setOutQty(0);
+            item.setOutQty(BigDecimal.ZERO);
             item.setAvailableQty(itemVO.getQuantity());
             item.setTenantId(updateReqVO.getTenantId());
             item.setStoreId(itemVO.getRefInStoreId());
             inboundOrderItemMapper.insert(item);
             updateMaterialPriceList.add(new MaterialInfoDO().setId(itemVO.getMaterialId()).setMaterialInPrice(itemVO.getInUnitPrice()));
-            int addQty = itemVO.getQuantity() == null ? 0 : itemVO.getQuantity();
-            if (addQty != 0) {
-                materialDeltaMap.merge(itemVO.getMaterialId(), addQty, Integer::sum);
+            BigDecimal addQty = itemVO.getQuantity() == null ? BigDecimal.ZERO : itemVO.getQuantity();
+            if (addQty.compareTo(BigDecimal.ZERO) != 0) {
+                materialDeltaMap.merge(itemVO.getMaterialId(), addQty, BigDecimal::add);
             }
         }
 
         // 8. 按差量更新物资总库存
-        for (Map.Entry<Long, Integer> entry : materialDeltaMap.entrySet()) {
+        for (Map.Entry<Long, BigDecimal> entry : materialDeltaMap.entrySet()) {
             MaterialInfoDO material = materialInfoMapper.selectById(entry.getKey());
             if (material != null) {
-                material.setMaterialCount(material.getMaterialCount() + entry.getValue());
+                material.setMaterialCount(material.getMaterialCount().add(entry.getValue()));
                 materialInfoMapper.updateById(material);
             }
         }
@@ -508,14 +507,14 @@ public class MaterialIoServiceImpl implements MaterialIoService {
         for (MaterialOutboundOrderItemDO oldItem : oldItems) {
             MaterialInboundOrderItemDO inboundItem = inboundOrderItemMapper.selectById(oldItem.getRefInboundItemId());
             if (inboundItem != null) {
-                inboundItem.setOutQty(inboundItem.getOutQty() - oldItem.getQuantity());
-                inboundItem.setAvailableQty(inboundItem.getAvailableQty() + oldItem.getQuantity());
+                inboundItem.setOutQty(inboundItem.getOutQty().subtract(oldItem.getQuantity()));
+                inboundItem.setAvailableQty(inboundItem.getAvailableQty().add(oldItem.getQuantity()));
                 inboundOrderItemMapper.updateById(inboundItem);
             }
 
             MaterialInfoDO material = materialInfoMapper.selectById(oldItem.getMaterialId());
             if (material != null) {
-                material.setMaterialCount(material.getMaterialCount() + oldItem.getQuantity());
+                material.setMaterialCount(material.getMaterialCount().add(oldItem.getQuantity()));
                 materialInfoMapper.updateById(material);
             }
         }
@@ -534,7 +533,7 @@ public class MaterialIoServiceImpl implements MaterialIoService {
             if (inboundItem == null) {
                 throw exceptionCustomMsg(COMMON_NOT_FOUND, "入库批次不存在");
             }
-            if (inboundItem.getAvailableQty() < itemVO.getQuantity()) {
+            if (inboundItem.getAvailableQty().compareTo(itemVO.getQuantity()) < 0) {
                 throw exceptionCustomMsg(COMMON_NOT_FOUND, "批次可用数量不足");
             }
 
@@ -546,8 +545,8 @@ public class MaterialIoServiceImpl implements MaterialIoService {
             outboundItem.setTenantId(updateReqVO.getTenantId());
             outboundOrderItemMapper.insert(outboundItem);
 
-            inboundItem.setOutQty(inboundItem.getOutQty() + itemVO.getQuantity());
-            inboundItem.setAvailableQty(inboundItem.getAvailableQty() - itemVO.getQuantity());
+            inboundItem.setOutQty(inboundItem.getOutQty().add(itemVO.getQuantity()));
+            inboundItem.setAvailableQty(inboundItem.getAvailableQty().subtract(itemVO.getQuantity()));
             inboundOrderItemMapper.updateById(inboundItem);
         }
 
@@ -586,7 +585,7 @@ public class MaterialIoServiceImpl implements MaterialIoService {
         // 5. 插入新明细并重新计算库存和批次
         for (MaterialIoOrderItemSaveReqVO itemVO : updateReqVO.getItems()) {
             MaterialInboundOrderItemDO inboundItem = getInboundItemOrThrow(itemVO.getInboundItemId());
-            if (inboundItem.getAvailableQty() < itemVO.getQuantity()) {
+            if (inboundItem.getAvailableQty().compareTo(itemVO.getQuantity()) < 0) {
                 throw exception(COMMON_NOT_FOUND, "批次可用数量不足");
             }
 
@@ -594,7 +593,7 @@ public class MaterialIoServiceImpl implements MaterialIoService {
             applyInboundReturnToBatch(inboundItem, itemVO.getQuantity());
 
             // 更新库存(减少)
-            updateMaterialStock(itemVO.getMaterialId(), -itemVO.getQuantity());
+            updateMaterialStock(itemVO.getMaterialId(), itemVO.getQuantity().negate());
 
             // 插入新明细
             MaterialInboundReturnOrderItemDO newItem = BeanUtils.toBean(itemVO, MaterialInboundReturnOrderItemDO.class);
@@ -622,13 +621,13 @@ public class MaterialIoServiceImpl implements MaterialIoService {
                 rollbackOutboundReturnOnBatch(inboundItem, oldItem.getQuantity());
             }
             // 回滚库存:出库退回是增加,回滚就是减少
-            updateMaterialStock(oldItem.getMaterialId(), -oldItem.getQuantity());
+            updateMaterialStock(oldItem.getMaterialId(), oldItem.getQuantity().negate());
 
             // 回滚出库明细:把之前扣掉的出库数量加回来
             MaterialOutboundOrderItemDO outboundItem = outboundOrderItemMapper.selectById(oldItem.getOutboundItemId());
             if (outboundItem != null) {
-                int currentQty = outboundItem.getQuantity() == null ? 0 : outboundItem.getQuantity();
-                outboundItem.setQuantity(currentQty + oldItem.getQuantity());
+                BigDecimal currentQty = outboundItem.getQuantity() == null ? BigDecimal.ZERO : outboundItem.getQuantity();
+                outboundItem.setQuantity(currentQty.add(oldItem.getQuantity()));
                 outboundOrderItemMapper.updateById(outboundItem);
             }
         }
@@ -650,13 +649,13 @@ public class MaterialIoServiceImpl implements MaterialIoService {
             if (outboundItem == null) {
                 throw exceptionCustomMsg(COMMON_NOT_FOUND, "原出库明细不存在");
             }
-            int currentOutQty = outboundItem.getQuantity() == null ? 0 : outboundItem.getQuantity();
-            if (currentOutQty < itemVO.getQuantity()) {
+            BigDecimal currentOutQty = outboundItem.getQuantity() == null ? BigDecimal.ZERO : outboundItem.getQuantity();
+            if (currentOutQty.compareTo(itemVO.getQuantity()) < 0) {
                 throw exceptionCustomMsg(COMMON_NOT_FOUND, "退回数量不能大于原出库数量");
             }
 
             // 回扣出库明细数量
-            outboundItem.setQuantity(currentOutQty - itemVO.getQuantity());
+            outboundItem.setQuantity(currentOutQty.subtract(itemVO.getQuantity()));
             outboundOrderItemMapper.updateById(outboundItem);
 
             // 更新批次(增加)
@@ -722,7 +721,7 @@ public class MaterialIoServiceImpl implements MaterialIoService {
         for (MaterialInboundOrderItemDO item : items) {
             MaterialInfoDO material = materialInfoMapper.selectById(item.getMaterialId());
             if (material != null) {
-                material.setMaterialCount(material.getMaterialCount() - item.getInQty());
+                material.setMaterialCount(material.getMaterialCount().subtract(item.getInQty()));
                 materialInfoMapper.updateById(material);
             }
         }
@@ -752,14 +751,14 @@ public class MaterialIoServiceImpl implements MaterialIoService {
         for (MaterialOutboundOrderItemDO item : items) {
             MaterialInboundOrderItemDO inboundItem = inboundOrderItemMapper.selectById(item.getRefInboundItemId());
             if (inboundItem != null) {
-                inboundItem.setOutQty(inboundItem.getOutQty() - item.getQuantity());
-                inboundItem.setAvailableQty(inboundItem.getAvailableQty() + item.getQuantity());
+                inboundItem.setOutQty(inboundItem.getOutQty().subtract(item.getQuantity()));
+                inboundItem.setAvailableQty(inboundItem.getAvailableQty().add(item.getQuantity()));
                 inboundOrderItemMapper.updateById(inboundItem);
             }
 
             MaterialInfoDO material = materialInfoMapper.selectById(item.getMaterialId());
             if (material != null) {
-                material.setMaterialCount(material.getMaterialCount() + item.getQuantity());
+                material.setMaterialCount(material.getMaterialCount().add(item.getQuantity()));
                 materialInfoMapper.updateById(material);
             }
         }
@@ -805,7 +804,7 @@ public class MaterialIoServiceImpl implements MaterialIoService {
             itemRespVO.setProduceDate(item.getProduceDate());
             // 计算金额
             if (item.getInQty() != null && item.getInUnitPrice() != null) {
-                itemRespVO.setAmount(item.getInUnitPrice().multiply(new java.math.BigDecimal(item.getInQty())));
+                itemRespVO.setAmount(item.getInUnitPrice().multiply(item.getInQty()));
             }
             itemRespVOs.add(itemRespVO);
 
@@ -938,7 +937,7 @@ public class MaterialIoServiceImpl implements MaterialIoService {
                     itemRespVO.setInUnitPrice(inboundItem.getInUnitPrice());
                     itemRespVO.setSaleUnitPrice(inboundItem.getSaleUnitPrice());
                     itemRespVO.setProduceDate(inboundItem.getProduceDate());
-                    itemRespVO.setLatestAvailableQty(inboundItem.getAvailableQty() + itemRespVO.getQuantity());
+                    itemRespVO.setLatestAvailableQty(inboundItem.getAvailableQty().add(itemRespVO.getQuantity()));
                     // 填充入库单号
                     MaterialInboundOrderDO inboundOrder = inboundOrderMap.get(inboundItem.getInboundOrderId());
                     if (inboundOrder != null) {
@@ -946,7 +945,7 @@ public class MaterialIoServiceImpl implements MaterialIoService {
                     }
                     // 计算金额
                     if (itemRespVO.getQuantity() != null && itemRespVO.getInUnitPrice() != null) {
-                        itemRespVO.setAmount(itemRespVO.getInUnitPrice().multiply(new java.math.BigDecimal(itemRespVO.getQuantity())));
+                        itemRespVO.setAmount(itemRespVO.getInUnitPrice().multiply(itemRespVO.getQuantity()));
                     }
                 }
             }
@@ -1274,7 +1273,7 @@ public class MaterialIoServiceImpl implements MaterialIoService {
                 if (inboundItem != null) {
                     itemVO.setInUnitPrice(inboundItem.getInUnitPrice());
                     if (inboundItem.getInUnitPrice() != null && item.getQuantity() != null) {
-                        itemVO.setAmount(inboundItem.getInUnitPrice().multiply(new BigDecimal(item.getQuantity())));
+                        itemVO.setAmount(inboundItem.getInUnitPrice().multiply(item.getQuantity()));
                     }
                 }
 
@@ -1341,9 +1340,9 @@ public class MaterialIoServiceImpl implements MaterialIoService {
                 MaterialInboundOrderItemDO inboundItem = inboundItemMap.get(item.getRefInboundItemId());
                 if (inboundItem != null) {
                     itemVO.setInUnitPrice(inboundItem.getInUnitPrice());
-                    itemVO.setAvailableQty(inboundItem.getAvailableQty() + item.getQuantity());
+                    itemVO.setAvailableQty(inboundItem.getAvailableQty().add(item.getQuantity()));
                     if (inboundItem.getInUnitPrice() != null && item.getQuantity() != null) {
-                        itemVO.setAmount(inboundItem.getInUnitPrice().multiply(new BigDecimal(item.getQuantity())));
+                        itemVO.setAmount(inboundItem.getInUnitPrice().multiply(item.getQuantity()));
                     }
                 }
 
@@ -1563,7 +1562,7 @@ public class MaterialIoServiceImpl implements MaterialIoService {
             }
 
             if (item.getInQty() != null && item.getInUnitPrice() != null) {
-                vo.setTotalAmount(vo.getTotalAmount().add(item.getInUnitPrice().multiply(new BigDecimal(item.getInQty()))));
+                vo.setTotalAmount(vo.getTotalAmount().add(item.getInUnitPrice().multiply(item.getInQty())));
             }
         }
 
@@ -1674,7 +1673,7 @@ public class MaterialIoServiceImpl implements MaterialIoService {
                     vo.setQuantity(item.getInQty());
                     vo.setInUnitPrice(item.getInUnitPrice());
                     if (item.getInQty() != null && item.getInUnitPrice() != null) {
-                        vo.setAmount(item.getInUnitPrice().multiply(new BigDecimal(item.getInQty())));
+                        vo.setAmount(item.getInUnitPrice().multiply(item.getInQty()));
                     }
                     return vo;
                 })
@@ -1787,7 +1786,7 @@ public class MaterialIoServiceImpl implements MaterialIoService {
 
             MaterialInboundOrderItemDO inboundItem = inboundItemMap.get(item.getRefInboundItemId());
             if (inboundItem != null && inboundItem.getInUnitPrice() != null && item.getQuantity() != null) {
-                vo.setTotalAmount(vo.getTotalAmount().add(inboundItem.getInUnitPrice().multiply(new BigDecimal(item.getQuantity()))));
+                vo.setTotalAmount(vo.getTotalAmount().add(inboundItem.getInUnitPrice().multiply(item.getQuantity())));
             }
         }
 
@@ -1884,7 +1883,7 @@ public class MaterialIoServiceImpl implements MaterialIoService {
             if (inboundItem != null) {
                 vo.setInUnitPrice(inboundItem.getInUnitPrice());
                 if (inboundItem.getInUnitPrice() != null && item.getQuantity() != null) {
-                    vo.setAmount(inboundItem.getInUnitPrice().multiply(new BigDecimal(item.getQuantity())));
+                    vo.setAmount(inboundItem.getInUnitPrice().multiply(item.getQuantity()));
                 }
             }
             return vo;
@@ -2012,7 +2011,7 @@ public class MaterialIoServiceImpl implements MaterialIoService {
     private List<MaterialInventoryReportRespVO> buildInventoryReportResp(LocalDate monthStart, LocalDate nextMonthStart,
                                                                         List<MaterialInboundOrderItemDO> records) {
         Set<Long> inboundItemIds = records.stream().map(MaterialInboundOrderItemDO::getId).collect(Collectors.toSet());
-        Map<Long, Integer> outQtyMap = getOutboundQtySumByInboundItemIds(monthStart, nextMonthStart, inboundItemIds);
+        Map<Long, BigDecimal> outQtyMap = getOutboundQtySumByInboundItemIds(monthStart, nextMonthStart, inboundItemIds);
 
         Set<Long> materialIds = records.stream().map(MaterialInboundOrderItemDO::getMaterialId).collect(Collectors.toSet());
         Map<Long, MaterialInfoDO> materialMap = materialIds.isEmpty() ? Collections.emptyMap()
@@ -2051,25 +2050,25 @@ public class MaterialIoServiceImpl implements MaterialIoService {
             }
 
             BigDecimal price = item.getInUnitPrice() != null ? item.getInUnitPrice() : BigDecimal.ZERO;
-            int inQty = item.getInQty() != null ? item.getInQty() : 0;
-            int outQty = outQtyMap.getOrDefault(item.getId(), 0);
-            int endQty = inQty - outQty;
+            BigDecimal inQty = item.getInQty() != null ? item.getInQty() : BigDecimal.ZERO;
+            BigDecimal outQty = outQtyMap.getOrDefault(item.getId(), BigDecimal.ZERO);
+            BigDecimal endQty = inQty.subtract(outQty);
 
-            vo.setBeginQty(0);
+            vo.setBeginQty(BigDecimal.ZERO);
             vo.setBeginPrice(price);
             vo.setBeginAmount(BigDecimal.ZERO);
 
             vo.setInQty(inQty);
             vo.setInPrice(price);
-            vo.setInAmount(price.multiply(BigDecimal.valueOf(inQty)));
+            vo.setInAmount(price.multiply(inQty));
 
             vo.setOutQty(outQty);
             vo.setOutPrice(price);
-            vo.setOutAmount(price.multiply(BigDecimal.valueOf(outQty)));
+            vo.setOutAmount(price.multiply(outQty));
 
             vo.setEndQty(endQty);
             vo.setEndPrice(price);
-            vo.setEndAmount(price.multiply(BigDecimal.valueOf(endQty)));
+            vo.setEndAmount(price.multiply(endQty));
 
             return vo;
         }).collect(Collectors.toList());
@@ -2116,7 +2115,7 @@ public class MaterialIoServiceImpl implements MaterialIoService {
         MaterialInventoryFlowRespVO.InventoryInfo inventoryInfo = new MaterialInventoryFlowRespVO.InventoryInfo();
         inventoryInfo.setStoreName(store != null ? store.getStoreName() : null);
         inventoryInfo.setMaterialName(material.getMaterialName());
-        inventoryInfo.setInventoryQty(inboundItem.getAvailableQty() != null ? inboundItem.getAvailableQty() : 0);
+        inventoryInfo.setInventoryQty(inboundItem.getAvailableQty() != null ? inboundItem.getAvailableQty() : BigDecimal.ZERO);
         inventoryInfo.setCategoryName(category != null ? category.getCategoryName() : null);
         inventoryInfo.setSpecification(material.getSpecification());
         inventoryInfo.setMaterialUnit(material.getMaterialUnit());
@@ -2183,7 +2182,7 @@ public class MaterialIoServiceImpl implements MaterialIoService {
     /**
      * 统计一批入库明细(批次)在指定时间范围内的出库总数量
      */
-    private Map<Long, Integer> getOutboundQtySumByInboundItemIds(LocalDate start, LocalDate end, Set<Long> inboundItemIds) {
+    private Map<Long, BigDecimal> getOutboundQtySumByInboundItemIds(LocalDate start, LocalDate end, Set<Long> inboundItemIds) {
         if (inboundItemIds == null || inboundItemIds.isEmpty()) {
             return Collections.emptyMap();
         }
@@ -2193,7 +2192,7 @@ public class MaterialIoServiceImpl implements MaterialIoService {
         }
         return result.stream().collect(Collectors.toMap(
                 m -> ((Number) m.get("refInboundItemId")).longValue(),
-                m -> ((Number) m.get("totalQty")).intValue()
+                m -> ((BigDecimal) m.get("totalQty"))
         ));
     }
 
@@ -2201,15 +2200,14 @@ public class MaterialIoServiceImpl implements MaterialIoService {
      * 更新物资总库存(入库)
      */
     private void updateMaterialStockForInbound(List<MaterialIoOrderItemSaveReqVO> items) {
-        Map<Long, Integer> materialQtyMap = items.stream()
-                .collect(Collectors.groupingBy(
-                        MaterialIoOrderItemSaveReqVO::getMaterialId,
-                        Collectors.summingInt(MaterialIoOrderItemSaveReqVO::getQuantity)));
-
-        for (Map.Entry<Long, Integer> entry : materialQtyMap.entrySet()) {
+        Map<Long, BigDecimal> materialQtyMap = items.stream()
+                .collect(Collectors.toMap(MaterialIoOrderItemSaveReqVO::getMaterialId,
+                        MaterialIoOrderItemSaveReqVO::getQuantity,
+                        BigDecimal::add));
+        for (Map.Entry<Long, BigDecimal> entry : materialQtyMap.entrySet()) {
             MaterialInfoDO material = materialInfoMapper.selectById(entry.getKey());
             if (material != null) {
-                material.setMaterialCount(material.getMaterialCount() + entry.getValue());
+                material.setMaterialCount(material.getMaterialCount().add(entry.getValue()));
                 materialInfoMapper.updateById(material);
             }
         }
@@ -2219,18 +2217,19 @@ public class MaterialIoServiceImpl implements MaterialIoService {
      * 更新物资总库存(出库)
      */
     private void updateMaterialStockForOutbound(List<MaterialIoOrderItemSaveReqVO> items, Long tenantId) {
-        Map<Long, Integer> materialQtyMap = items.stream()
-                .collect(Collectors.groupingBy(
+        Map<Long, BigDecimal> materialQtyMap = items.stream()
+                .collect(Collectors.toMap(
                         MaterialIoOrderItemSaveReqVO::getMaterialId,
-                        Collectors.summingInt(MaterialIoOrderItemSaveReqVO::getQuantity)));
+                        MaterialIoOrderItemSaveReqVO::getQuantity,
+                        BigDecimal::add));
 
-        for (Map.Entry<Long, Integer> entry : materialQtyMap.entrySet()) {
+        for (Map.Entry<Long, BigDecimal> entry : materialQtyMap.entrySet()) {
             MaterialInfoDO material = materialInfoMapper.selectById(entry.getKey());
             if (material != null) {
-                if (material.getMaterialCount() < entry.getValue()) {
+                if (material.getMaterialCount().compareTo( entry.getValue()) < 0) {
                     throw exceptionCustomMsg(COMMON_NOT_FOUND, "物资库存不足: " + material.getMaterialName());
                 }
-                material.setMaterialCount(material.getMaterialCount() - entry.getValue());
+                material.setMaterialCount(material.getMaterialCount().subtract(entry.getValue()));
                 materialInfoMapper.updateById(material);
             }
         }
@@ -2254,17 +2253,17 @@ public class MaterialIoServiceImpl implements MaterialIoService {
      * @param materialId 物资ID
      * @param quantityDelta 数量变化量(正数为增加,负数为减少)
      */
-    private void updateMaterialStock(Long materialId, int quantityDelta) {
-        if (quantityDelta == 0) {
+    private void updateMaterialStock(Long materialId, BigDecimal quantityDelta) {
+        if (quantityDelta.compareTo(BigDecimal.ZERO) == 0) {
             return;
         }
         MaterialInfoDO material = materialInfoMapper.selectById(materialId);
         if (material == null) {
             return;
         }
-        int current = material.getMaterialCount() == null ? 0 : material.getMaterialCount();
-        int newStock = current + quantityDelta;
-        if (newStock < 0) {
+        BigDecimal current = material.getMaterialCount() == null ? BigDecimal.ZERO : material.getMaterialCount();
+        BigDecimal newStock = current.add(quantityDelta);
+        if (newStock.compareTo(BigDecimal.ZERO) < 0) {
             throw exceptionCustomMsg(COMMON_NOT_FOUND, "物资库存不足: " + material.getMaterialName());
         }
         material.setMaterialCount(newStock);
@@ -2274,55 +2273,54 @@ public class MaterialIoServiceImpl implements MaterialIoService {
     /**
      * 应用入库退回对批次的影响(减少 inQty)
      */
-    private void applyInboundReturnToBatch(MaterialInboundOrderItemDO inboundItem, int returnQty) {
-        int oldInQty = inboundItem.getInQty() == null ? 0 : inboundItem.getInQty();
-        int outQty = inboundItem.getOutQty() == null ? 0 : inboundItem.getOutQty();
-        int newInQty = oldInQty - returnQty;
-        if (newInQty < outQty) {
+    private void applyInboundReturnToBatch(MaterialInboundOrderItemDO inboundItem, BigDecimal returnQty) {
+        BigDecimal oldInQty = inboundItem.getInQty() == null ? BigDecimal.ZERO : inboundItem.getInQty();
+        BigDecimal outQty = inboundItem.getOutQty() == null ? BigDecimal.ZERO : inboundItem.getOutQty();
+        BigDecimal newInQty = oldInQty.subtract(returnQty);
+        if (newInQty.compareTo(outQty) < 0) {
             throw exceptionCustomMsg(COMMON_NOT_FOUND, "退回后入库数量不能小于已出库数量");
         }
         inboundItem.setInQty(newInQty);
-        inboundItem.setAvailableQty(newInQty - outQty);
+        inboundItem.setAvailableQty(newInQty.subtract(outQty));
         inboundOrderItemMapper.updateById(inboundItem);
     }
 
     /**
      * 回滚入库退回对批次的影响(恢复 inQty)
      */
-    private void rollbackInboundReturnOnBatch(MaterialInboundOrderItemDO inboundItem, int returnQty) {
-        int oldInQty = inboundItem.getInQty() == null ? 0 : inboundItem.getInQty();
-        int outQty = inboundItem.getOutQty() == null ? 0 : inboundItem.getOutQty();
-        int newInQty = oldInQty + returnQty;
+    private void rollbackInboundReturnOnBatch(MaterialInboundOrderItemDO inboundItem, BigDecimal returnQty) {
+        BigDecimal oldInQty = inboundItem.getInQty() == null ? BigDecimal.ZERO : inboundItem.getInQty();
+        BigDecimal outQty = inboundItem.getOutQty() == null ? BigDecimal.ZERO : inboundItem.getOutQty();
+        BigDecimal newInQty = oldInQty.add(returnQty);
         inboundItem.setInQty(newInQty);
-        inboundItem.setAvailableQty(newInQty - outQty);
+        inboundItem.setAvailableQty(newInQty.subtract(outQty));
         inboundOrderItemMapper.updateById(inboundItem);
     }
 
     /**
      * 应用出库退回对批次的影响(减少 outQty)
      */
-    private void applyOutboundReturnToBatch(MaterialInboundOrderItemDO inboundItem, int returnQty) {
-        int outQty = inboundItem.getOutQty() == null ? 0 : inboundItem.getOutQty();
-        int availableQty = inboundItem.getAvailableQty() == null ? 0 : inboundItem.getAvailableQty();
-
-        int newOutQty = outQty - returnQty;
-        if (newOutQty < 0) {
+    private void applyOutboundReturnToBatch(MaterialInboundOrderItemDO inboundItem, BigDecimal returnQty) {
+        BigDecimal outQty = inboundItem.getOutQty() == null ? BigDecimal.ZERO : inboundItem.getOutQty();
+        BigDecimal availableQty = inboundItem.getAvailableQty() == null ? BigDecimal.ZERO : inboundItem.getAvailableQty();
+        BigDecimal newOutQty = outQty.subtract(returnQty);
+        if (newOutQty.compareTo(BigDecimal.ZERO) < 0) {
             throw exceptionCustomMsg(COMMON_NOT_FOUND, "退回数量不能大于该批次已出库数量");
         }
 
         inboundItem.setOutQty(newOutQty);
-        inboundItem.setAvailableQty(availableQty + returnQty);
+        inboundItem.setAvailableQty(availableQty.add(returnQty));
         inboundOrderItemMapper.updateById(inboundItem);
     }
 
     /**
      * 回滚出库退回对批次的影响(恢复 outQty)
      */
-    private void rollbackOutboundReturnOnBatch(MaterialInboundOrderItemDO inboundItem, int returnQty) {
-        int outQty = inboundItem.getOutQty() == null ? 0 : inboundItem.getOutQty();
-        int availableQty = inboundItem.getAvailableQty() == null ? 0 : inboundItem.getAvailableQty();
-        inboundItem.setOutQty(outQty + returnQty);
-        inboundItem.setAvailableQty(availableQty - returnQty);
+    private void rollbackOutboundReturnOnBatch(MaterialInboundOrderItemDO inboundItem, BigDecimal returnQty) {
+        BigDecimal outQty = inboundItem.getOutQty() == null ? BigDecimal.ZERO : inboundItem.getOutQty();
+        BigDecimal availableQty = inboundItem.getAvailableQty() == null ? BigDecimal.ZERO : inboundItem.getAvailableQty();
+        inboundItem.setOutQty(outQty.add(returnQty));
+        inboundItem.setAvailableQty(availableQty.subtract(returnQty));
         inboundOrderItemMapper.updateById(inboundItem);
     }
 
@@ -2420,7 +2418,7 @@ public class MaterialIoServiceImpl implements MaterialIoService {
             if (!Objects.equals(StringUtils.trimToEmpty(head.getRemark()), StringUtils.trimToEmpty(row.getRemark()))) {
                 throw new IllegalArgumentException("同单号的备注必须一致");
             }
-            if (row.getQuantity() == null || row.getQuantity() <= 0) {
+            if (row.getQuantity() == null || row.getQuantity().compareTo(BigDecimal.ZERO) <= 0) {
                 throw new IllegalArgumentException("入库明细数量必须填写且数量大于0");
             }
             Long materialId = resolveMaterialId(row.getMaterialNumber(), null);
@@ -2474,7 +2472,7 @@ public class MaterialIoServiceImpl implements MaterialIoService {
             if (!Objects.equals(StringUtils.trimToEmpty(head.getRemark()), StringUtils.trimToEmpty(row.getRemark()))) {
                 throw new IllegalArgumentException("同单号的备注必须一致");
             }
-            if (row.getQuantity() == null || row.getQuantity() <= 0) {
+            if (row.getQuantity() == null || row.getQuantity().compareTo(BigDecimal.ZERO) <= 0) {
                 throw new IllegalArgumentException("出库明细数量必须填写且数量大于0");
             }
 

+ 17 - 8
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/ccb/CcbBusinessService.java

@@ -2,16 +2,10 @@ package cn.iocoder.yudao.module.system.service.ccb;
 
 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
-import cn.iocoder.yudao.module.system.dal.dataobject.biz.ExpenseOrderDO;
-import cn.iocoder.yudao.module.system.dal.dataobject.biz.ExpenseOrderItemDO;
-import cn.iocoder.yudao.module.system.dal.dataobject.biz.ExpensePayOrderDO;
-import cn.iocoder.yudao.module.system.dal.dataobject.biz.ExpensePayOrderItemDO;
+import cn.iocoder.yudao.module.system.dal.dataobject.biz.*;
 import cn.iocoder.yudao.module.system.dal.dataobject.ccb.CcbPayCallbackRecordDO;
 import cn.iocoder.yudao.module.system.dal.dataobject.ccb.MerchantRecordDO;
-import cn.iocoder.yudao.module.system.dal.mysql.biz.ExpenseOrderItemMapper;
-import cn.iocoder.yudao.module.system.dal.mysql.biz.ExpenseOrderMapper;
-import cn.iocoder.yudao.module.system.dal.mysql.biz.ExpensePayOrderItemMapper;
-import cn.iocoder.yudao.module.system.dal.mysql.biz.ExpensePayOrderMapper;
+import cn.iocoder.yudao.module.system.dal.mysql.biz.*;
 import cn.iocoder.yudao.module.system.dal.mysql.ccb.CcbPayCallbackRecordMapper;
 import cn.iocoder.yudao.module.system.dal.mysql.ccb.MerchantRecordMapper;
 import cn.iocoder.yudao.module.system.enums.ErrorCodeConstants;
@@ -54,6 +48,9 @@ public class CcbBusinessService {
     @Autowired
     private MerchantRecordMapper merchantRecordMapper;
 
+    @Autowired
+    private ElderlyCcbPayOrderRecordMapper elderlyCcbPayOrderRecordMapper;
+
 
     public void handleOrderBusiness(Map<String, String> paramMap) throws Exception {
         //1.校验账单是否存在
@@ -103,6 +100,8 @@ public class CcbBusinessService {
 
             //处理费用项
             processExpenseOrderItems(expenseOrderDO, payOrder);
+            // 记录支付记录
+            saveCcbPayOrderRecord(expenseOrderDO);
 
             log.info("订单号{} 业务处理结果={},支付金额={}", orderId, "成功", callbackAmount);
             //7.保存回调记录
@@ -138,6 +137,16 @@ public class CcbBusinessService {
         callbackRecordMapper.insertOrUpdate(record);
     }
 
+    private void saveCcbPayOrderRecord(ExpenseOrderDO expenseOrderDO) {
+        ElderlyCcbPayOrderRecordDO record = new ElderlyCcbPayOrderRecordDO();
+        record.setExpenseOrderId(expenseOrderDO.getId());
+        record.setPayTime(expenseOrderDO.getPayTime());
+        record.setPayAmount(expenseOrderDO.getPayableAmount());
+        record.setBillingMonth(expenseOrderDO.getBillingMonth());
+        record.setTenantId(expenseOrderDO.getTenantId());
+        elderlyCcbPayOrderRecordMapper.insert(record);
+    }
+
     private void updateExpenseOrderStatus(Map<String, String> paramMap, ExpenseOrderDO expenseOrderDO, BigDecimal callbackAmount) {
         expenseOrderDO.setPayStatus(1);
         expenseOrderDO.setPayTime(new Date());

+ 1 - 1
yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/ElderlyOrderFoodMapper.xml

@@ -63,7 +63,7 @@
         <if test="reqVO.orderFoodDate != null">
             AND eof.order_food_date = #{reqVO.orderFoodDate}
         </if>
-        ORDER BY b.build_name DESC, f.floor_name DESC, r.room_name DESC, eof.order_food_date DESC
+        ORDER BY b.build_name DESC, f.floor_name DESC, r.room_name DESC, eof.order_food_date DESC,eof.elder_id DESC
     </select>
 
 </mapper>

+ 1 - 0
yudao-server/src/main/resources/application.yaml

@@ -231,6 +231,7 @@ yudao:
       - /admin-api/elderly/order-food/commit
       - /admin-api/elderly/order-food/get
       - /admin-api/elderly/order-food/page
+      - /admin-api/relatives/getDetailsByElderId
     ignore-tables:
       - system_tenant
       - system_groups