Ver código fonte

新增
1、新增居家服务工单模块
修改
1、优化推送收款单消息提示词

liangwenxuan 2 semanas atrás
pai
commit
25d170afb7
14 arquivos alterados com 544 adições e 2 exclusões
  1. 4 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/kingdee/KingdeeApiImpl.java
  2. 80 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/home/HomeServiceOrderController.java
  3. 30 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/home/vo/HomeServiceOrderPageReqVO.java
  4. 47 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/home/vo/HomeServiceOrderPageRespVO.java
  5. 50 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/home/vo/HomeServiceOrderRespVO.java
  6. 42 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/home/vo/HomeServiceOrderSaveReqVO.java
  7. 1 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/biz/ExpenseOrderDO.java
  8. 61 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/home/HomeServiceOrderDO.java
  9. 29 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/home/HomeServiceOrderItemDO.java
  10. 10 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/home/HomeServiceOrderItemMapper.java
  11. 18 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/home/HomeServiceOrderMapper.java
  12. 21 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/home/HomeServiceOrderService.java
  13. 95 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/home/HomeServiceOrderServiceImpl.java
  14. 56 0
      yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/HomeServiceOrderMapper.xml

+ 4 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/kingdee/KingdeeApiImpl.java

@@ -299,7 +299,10 @@ public class KingdeeApiImpl implements KingdeeApi {
                 continue;
             }
             Long elderId = elderlyInfoDO.getId();
-            if (StringUtil.isEmptyORNull(elderlyInfoDO.getKingdeeCustomerNumber())) continue;
+            if (StringUtil.isEmptyORNull(elderlyInfoDO.getKingdeeCustomerNumber())) {
+                msg.append(elderlyInfoDO.getElderName()).append("该长者金蝶编号为空\n");
+                continue;
+            }
             TenantDO tenantDO = tenantMapper.selectById(expenseOrderDO.getTenantId());
             String kingedeeCustomerId = elderlyInfoDO.getKingdeeCustomerNumber();
             String baseBillNo = "BILL" + expenseOrderDO.getBillOrderNumber();

+ 80 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/home/HomeServiceOrderController.java

@@ -0,0 +1,80 @@
+package cn.iocoder.yudao.module.system.controller.admin.home;
+
+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.home.vo.HomeServiceOrderPageReqVO;
+import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeServiceOrderPageRespVO;
+import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeServiceOrderRespVO;
+import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeServiceOrderSaveReqVO;
+import cn.iocoder.yudao.module.system.service.home.HomeServiceOrderService;
+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;
+
+@Tag(name = "管理后台 - 居家服务订单")
+@RestController
+@RequestMapping("/home/service-order")
+@Validated
+public class HomeServiceOrderController {
+
+    @Resource
+    private HomeServiceOrderService homeServiceOrderService;
+
+    @PostMapping("/create")
+    @Operation(summary = "新增居家服务订单")
+    @TenantIgnore
+    public CommonResult<Long> create(@Valid @RequestBody HomeServiceOrderSaveReqVO createReqVO) {
+        if (createReqVO.getTenantId() == null) {
+            createReqVO.setTenantId(TenantContextHolder.getTenantId());
+        }
+        return success(homeServiceOrderService.createHomeServiceOrder(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "修改居家服务订单")
+    @TenantIgnore
+    public CommonResult<Boolean> update(@Valid @RequestBody HomeServiceOrderSaveReqVO updateReqVO) {
+        if (updateReqVO.getTenantId() == null) {
+            updateReqVO.setTenantId(TenantContextHolder.getTenantId());
+        }
+        homeServiceOrderService.updateHomeServiceOrder(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除居家服务订单")
+    @Parameter(name = "id", description = "编号", required = true, example = "1")
+    @TenantIgnore
+    public CommonResult<Boolean> delete(@RequestParam("id") Long id) {
+        homeServiceOrderService.deleteHomeServiceOrder(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得居家服务订单详情")
+    @Parameter(name = "id", description = "编号", required = true, example = "1")
+    @TenantIgnore
+    public CommonResult<HomeServiceOrderRespVO> get(@RequestParam("id") Long id) {
+        return success(homeServiceOrderService.getHomeServiceOrder(id));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得居家服务订单分页")
+    @TenantIgnore
+    public CommonResult<PageResult<HomeServiceOrderPageRespVO>> page(@Valid HomeServiceOrderPageReqVO pageReqVO) {
+        if (pageReqVO.getTenantId() == null) {
+            pageReqVO.setTenantId(TenantContextHolder.getTenantId());
+        }
+        return success(homeServiceOrderService.getHomeServiceOrderPage(pageReqVO));
+    }
+}
+

+ 30 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/home/vo/HomeServiceOrderPageReqVO.java

@@ -0,0 +1,30 @@
+package cn.iocoder.yudao.module.system.controller.admin.home.vo;
+
+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;
+
+@Schema(description = "管理后台 - 居家服务订单分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class HomeServiceOrderPageReqVO extends PageParam {
+
+    @Schema(description = "长者姓名(模糊匹配)")
+    private String elderName;
+
+    @Schema(description = "服务员工名称(模糊匹配)")
+    private String serviceMemberName;
+
+    private Integer orderType;
+
+    private Long serviceMemberId;
+
+    private Integer type;
+
+    private Long tenantId;
+
+    private Long[] tenantIds;
+}

+ 47 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/home/vo/HomeServiceOrderPageRespVO.java

@@ -0,0 +1,47 @@
+package cn.iocoder.yudao.module.system.controller.admin.home.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 居家服务订单分页 Response VO")
+@Data
+public class HomeServiceOrderPageRespVO {
+
+    private Long id;
+
+    private Integer orderType;
+
+    private Long serviceMemberId;
+
+    private LocalDateTime orderTime;
+
+    private LocalDateTime serviceStartTime;
+
+    private LocalDateTime serviceEndTime;
+
+    private BigDecimal serviceDuration;
+
+    private String remark;
+
+    private BigDecimal projectAmount;
+
+    private BigDecimal subsidyAmount;
+
+    private BigDecimal selfPayAmount;
+
+    private Integer type;
+
+    private Long tenantId;
+
+    private LocalDateTime createTime;
+
+    private LocalDateTime updateTime;
+
+    private String creator;
+
+    private String updater;
+}
+

+ 50 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/home/vo/HomeServiceOrderRespVO.java

@@ -0,0 +1,50 @@
+package cn.iocoder.yudao.module.system.controller.admin.home.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Schema(description = "管理后台 - 居家服务订单 Response VO")
+@Data
+public class HomeServiceOrderRespVO {
+
+    private Long id;
+
+    private Integer orderType;
+
+    private Long serviceMemberId;
+
+    private LocalDateTime orderTime;
+
+    private LocalDateTime serviceStartTime;
+
+    private LocalDateTime serviceEndTime;
+
+    private BigDecimal serviceDuration;
+
+    private String remark;
+
+    private BigDecimal projectAmount;
+
+    private BigDecimal subsidyAmount;
+
+    private BigDecimal selfPayAmount;
+
+    private Integer type;
+
+    private Long tenantId;
+
+    private LocalDateTime createTime;
+
+    private LocalDateTime updateTime;
+
+    private String creator;
+
+    private String updater;
+
+    private List<Long> serviceItemIds;
+}
+

+ 42 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/home/vo/HomeServiceOrderSaveReqVO.java

@@ -0,0 +1,42 @@
+package cn.iocoder.yudao.module.system.controller.admin.home.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Schema(description = "管理后台 - 居家服务订单新增/修改 Request VO")
+@Data
+public class HomeServiceOrderSaveReqVO {
+
+    private Long id;
+
+    private Integer orderType;
+
+    private Long serviceMemberId;
+
+    private LocalDateTime orderTime;
+
+    private LocalDateTime serviceStartTime;
+
+    private LocalDateTime serviceEndTime;
+
+    private BigDecimal serviceDuration;
+
+    private String remark;
+
+    private BigDecimal projectAmount;
+
+    private BigDecimal subsidyAmount;
+
+    private BigDecimal selfPayAmount;
+
+    private Integer type;
+
+    private Long tenantId;
+
+    private List<Long> serviceItemIds;
+}
+

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

@@ -118,7 +118,7 @@ public class ExpenseOrderDO {
      */
     private Boolean isPushKingdee;
     /**
-     * 账单推送金蝶款单状态,0.未推送 1.已推送
+     * 账单推送金蝶款单状态,0.未推送 1.已推送
      */
     private Boolean isPushKingdeeReceiveBill;
     /**

+ 61 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/home/HomeServiceOrderDO.java

@@ -0,0 +1,61 @@
+package cn.iocoder.yudao.module.system.dal.dataobject.home;
+
+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 lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.TIME_ZONE_DEFAULT;
+
+/**
+ * 居家服务订单 DO
+ */
+@TableName("home_service_order")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class HomeServiceOrderDO extends BaseNoDeleteDO {
+
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    private Integer orderType;
+
+    private Long serviceMemberId;
+
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND, timezone = TIME_ZONE_DEFAULT)
+    private LocalDateTime orderTime;
+
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND, timezone = TIME_ZONE_DEFAULT)
+    private LocalDateTime serviceStartTime;
+
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND, timezone = TIME_ZONE_DEFAULT)
+    private LocalDateTime serviceEndTime;
+
+    private BigDecimal serviceDuration;
+
+    private String remark;
+
+    private BigDecimal projectAmount;
+
+    private BigDecimal subsidyAmount;
+
+    private BigDecimal selfPayAmount;
+
+    private Integer type;
+
+    private Long tenantId;
+}
+

+ 29 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/home/HomeServiceOrderItemDO.java

@@ -0,0 +1,29 @@
+package cn.iocoder.yudao.module.system.dal.dataobject.home;
+
+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 lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+
+/**
+ * 居家服务订单明细 DO
+ */
+@TableName("home_service_order_item")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class HomeServiceOrderItemDO extends BaseNoDeleteDO {
+
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    private Long homeServiceOrderId;
+
+    private Long serviceItemId;
+
+    private Long tenantId;
+}
+

+ 10 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/home/HomeServiceOrderItemMapper.java

@@ -0,0 +1,10 @@
+package cn.iocoder.yudao.module.system.dal.mysql.home;
+
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.module.system.dal.dataobject.home.HomeServiceOrderItemDO;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface HomeServiceOrderItemMapper extends BaseMapperX<HomeServiceOrderItemDO> {
+}
+

+ 18 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/home/HomeServiceOrderMapper.java

@@ -0,0 +1,18 @@
+package cn.iocoder.yudao.module.system.dal.mysql.home;
+
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeServiceOrderPageReqVO;
+import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeServiceOrderPageRespVO;
+import cn.iocoder.yudao.module.system.dal.dataobject.home.HomeServiceOrderDO;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@Mapper
+public interface HomeServiceOrderMapper extends BaseMapperX<HomeServiceOrderDO> {
+
+    List<HomeServiceOrderPageRespVO> selectPageWithJoin(Page<HomeServiceOrderPageRespVO> page,
+                                                       @Param("params") HomeServiceOrderPageReqVO reqVO);
+}

+ 21 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/home/HomeServiceOrderService.java

@@ -0,0 +1,21 @@
+package cn.iocoder.yudao.module.system.service.home;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeServiceOrderPageReqVO;
+import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeServiceOrderPageRespVO;
+import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeServiceOrderRespVO;
+import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeServiceOrderSaveReqVO;
+
+public interface HomeServiceOrderService {
+
+    Long createHomeServiceOrder(HomeServiceOrderSaveReqVO createReqVO);
+
+    void updateHomeServiceOrder(HomeServiceOrderSaveReqVO updateReqVO);
+
+    void deleteHomeServiceOrder(Long id);
+
+    HomeServiceOrderRespVO getHomeServiceOrder(Long id);
+
+    PageResult<HomeServiceOrderPageRespVO> getHomeServiceOrderPage(HomeServiceOrderPageReqVO pageReqVO);
+}
+

+ 95 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/home/HomeServiceOrderServiceImpl.java

@@ -0,0 +1,95 @@
+package cn.iocoder.yudao.module.system.service.home;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeServiceOrderPageReqVO;
+import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeServiceOrderPageRespVO;
+import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeServiceOrderRespVO;
+import cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeServiceOrderSaveReqVO;
+import cn.iocoder.yudao.module.system.dal.dataobject.home.HomeServiceOrderDO;
+import cn.iocoder.yudao.module.system.dal.dataobject.home.HomeServiceOrderItemDO;
+import cn.iocoder.yudao.module.system.dal.mysql.home.HomeServiceOrderItemMapper;
+import cn.iocoder.yudao.module.system.dal.mysql.home.HomeServiceOrderMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.validation.annotation.Validated;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@Service
+@Validated
+public class HomeServiceOrderServiceImpl implements HomeServiceOrderService {
+
+    @Resource
+    private HomeServiceOrderMapper homeServiceOrderMapper;
+    @Resource
+    private HomeServiceOrderItemMapper homeServiceOrderItemMapper;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Long createHomeServiceOrder(HomeServiceOrderSaveReqVO createReqVO) {
+        HomeServiceOrderDO orderDO = BeanUtils.toBean(createReqVO, HomeServiceOrderDO.class);
+        homeServiceOrderMapper.insert(orderDO);
+        saveOrderItems(orderDO.getId(), createReqVO.getServiceItemIds(), orderDO.getTenantId());
+        return orderDO.getId();
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void updateHomeServiceOrder(HomeServiceOrderSaveReqVO updateReqVO) {
+        HomeServiceOrderDO orderDO = BeanUtils.toBean(updateReqVO, HomeServiceOrderDO.class);
+        homeServiceOrderMapper.updateById(orderDO);
+        if (updateReqVO.getServiceItemIds() != null) {
+            homeServiceOrderItemMapper.delete(HomeServiceOrderItemDO::getHomeServiceOrderId, updateReqVO.getId());
+            saveOrderItems(updateReqVO.getId(), updateReqVO.getServiceItemIds(), updateReqVO.getTenantId());
+        }
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void deleteHomeServiceOrder(Long id) {
+        homeServiceOrderItemMapper.delete(HomeServiceOrderItemDO::getHomeServiceOrderId, id);
+        homeServiceOrderMapper.deleteById(id);
+    }
+
+    @Override
+    public HomeServiceOrderRespVO getHomeServiceOrder(Long id) {
+        HomeServiceOrderDO orderDO = homeServiceOrderMapper.selectById(id);
+        if (orderDO == null) {
+            return null;
+        }
+        HomeServiceOrderRespVO respVO = BeanUtils.toBean(orderDO, HomeServiceOrderRespVO.class);
+        List<HomeServiceOrderItemDO> items = homeServiceOrderItemMapper.selectList(
+                new LambdaQueryWrapperX<HomeServiceOrderItemDO>()
+                        .eq(HomeServiceOrderItemDO::getHomeServiceOrderId, id)
+                        .orderByAsc(HomeServiceOrderItemDO::getId)
+        );
+        respVO.setServiceItemIds(CollectionUtils.convertList(items, HomeServiceOrderItemDO::getServiceItemId));
+        return respVO;
+    }
+
+    @Override
+    public PageResult<HomeServiceOrderPageRespVO> getHomeServiceOrderPage(HomeServiceOrderPageReqVO pageReqVO) {
+        Page<HomeServiceOrderPageRespVO> page = new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize());
+        List<HomeServiceOrderPageRespVO> list = homeServiceOrderMapper.selectPageWithJoin(page, pageReqVO);
+        return new PageResult<>(list, page.getTotal());
+    }
+
+    private void saveOrderItems(Long orderId, List<Long> serviceItemIds, Long tenantId) {
+        if (serviceItemIds == null || serviceItemIds.isEmpty()) {
+            return;
+        }
+        List<HomeServiceOrderItemDO> itemDOs = CollectionUtils.convertList(serviceItemIds, itemId -> {
+            HomeServiceOrderItemDO itemDO = new HomeServiceOrderItemDO();
+            itemDO.setHomeServiceOrderId(orderId);
+            itemDO.setServiceItemId(itemId);
+            itemDO.setTenantId(tenantId);
+            return itemDO;
+        });
+        homeServiceOrderItemMapper.insertBatch(itemDOs);
+    }
+}

+ 56 - 0
yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/HomeServiceOrderMapper.xml

@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.iocoder.yudao.module.system.dal.mysql.home.HomeServiceOrderMapper">
+
+    <select id="selectPageWithJoin" resultType="cn.iocoder.yudao.module.system.controller.admin.home.vo.HomeServiceOrderPageRespVO">
+        select
+            o.id,
+            o.order_type as orderType,
+            o.service_member_id as serviceMemberId,
+            o.order_time as orderTime,
+            o.service_start_time as serviceStartTime,
+            o.service_end_time as serviceEndTime,
+            o.service_duration as serviceDuration,
+            o.remark,
+            o.project_amount as projectAmount,
+            o.subsidy_amount as subsidyAmount,
+            o.self_pay_amount as selfPayAmount,
+            o.type,
+            o.tenant_id as tenantId,
+            o.create_time as createTime,
+            o.update_time as updateTime,
+            o.creator,
+            o.updater
+        from home_service_order o
+        left join home_service_member m on m.id = o.service_member_id
+        left join home_elderly_info hei on hei.id = o.home_elder_id
+        where 1 = 1
+        <if test="params.elderName != null and params.elderName != ''">
+            and hei.elder_name like concat('%', #{params.elderName}, '%')
+        </if>
+        <if test="params.serviceMemberName != null and params.serviceMemberName != ''">
+            and m.name like concat('%', #{params.serviceMemberName}, '%')
+        </if>
+        <if test="params.orderType != null">
+            and o.order_type = #{params.orderType}
+        </if>
+        <if test="params.serviceMemberId != null">
+            and o.service_member_id = #{params.serviceMemberId}
+        </if>
+        <if test="params.type != null">
+            and o.type = #{params.type}
+        </if>
+        <if test="params.tenantId != null">
+            and o.tenant_id = #{params.tenantId}
+        </if>
+        <if test="params.tenantIds != null and params.tenantIds.length > 0">
+            and o.tenant_id in
+            <foreach collection="params.tenantIds" item="tenantId" open="(" separator="," close=")">
+                #{tenantId}
+            </foreach>
+        </if>
+        order by o.id desc
+    </select>
+
+</mapper>
+