From eaef137e2a787d55f5d31b39ec3a104675368579 Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期三, 22 十月 2025 09:12:03 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetAdController.java                    |    3 
 ruoyi-system/src/main/java/com/ruoyi/system/model/AssetAdMaterialPrice.java                      |    4 
 ruoyi-system/pom.xml                                                                             |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/service/AssetAdMaterialPriceService.java             |   38 ++
 ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/AssetAdMaterialPriceDTO.java               |   53 ++++
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationAdServiceImpl.java |   65 +++++
 ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/AdUpdateMaterialDTO.java                   |   28 ++
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetAdMakeController.java                |   24 +
 ruoyi-system/src/main/java/com/ruoyi/system/query/AssetAdMaterialPriceQuery.java                 |   26 ++
 ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationAdService.java          |   18 +
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetAdMaterialPriceController.java       |  110 ++++++++
 ruoyi-system/src/main/resources/mapper/system/AssetAdMapper.xml                                  |   26 ++
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/listener/AssetAdValidatorListener.java        |   34 ++
 ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/AdHandleCompleteDTO.java                   |   36 ++
 ruoyi-system/src/main/resources/mapper/system/AssetAdMaterialPriceMapper.xml                     |   26 ++
 ruoyi-system/src/main/java/com/ruoyi/system/query/AssetAdQuery.java                              |    3 
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/AssetAdMapper.java                            |    5 
 ruoyi-system/src/main/java/com/ruoyi/system/model/AssetAd.java                                   |    4 
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/AssetAdMaterialPriceMapper.java               |   13 +
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetAdMaterialPriceServiceImpl.java    |   88 ++++++
 ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/AssetAdMaterialPriceVO.java                 |   50 +++
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetAdServiceImpl.java                 |   76 +++--
 22 files changed, 695 insertions(+), 37 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetAdController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetAdController.java
index 44a79ec..0a860f6 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetAdController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetAdController.java
@@ -14,6 +14,7 @@
 import com.ruoyi.system.service.AssetAdService;
 import com.ruoyi.system.vo.asset.AssetAdDetailVO;
 import com.ruoyi.system.vo.asset.AssetAdVO;
+import com.ruoyi.web.controller.listener.AssetAdValidatorListener;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -111,7 +112,7 @@
             return R.fail("请选择一个文件上传!");
         }
         try {
-            List<AssetAdDTO> list = FastExcel.read(file.getInputStream()).head(AssetAdDTO.class)
+            List<AssetAdDTO> list = FastExcel.read(file.getInputStream(), AssetAdDTO.class, new AssetAdValidatorListener())
                     .sheet()
                     .doReadSync();
             assetAdService.importAssetAd(list);
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetAdMakeController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetAdMakeController.java
index cb4e0b6..d63e456 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetAdMakeController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetAdMakeController.java
@@ -5,6 +5,8 @@
 import com.ruoyi.system.query.ApprovalApplicationAdQuery;
 import com.ruoyi.system.service.OaApprovalApplicationAdService;
 import com.ruoyi.system.vo.ApprovalApplicationAdVO;
+import com.ruoyi.system.dto.asset.AdHandleCompleteDTO;
+import com.ruoyi.system.dto.asset.AdUpdateMaterialDTO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
@@ -35,4 +37,26 @@
         return R.ok(oaApprovalApplicationAdService.getPageList(query));
     }
 
+    @PostMapping("/handle-complete")
+    @ApiOperation("处理完成 - 更新接单人员、广告图、处理状态")
+    public R<Boolean> handleComplete(@RequestBody @Validated AdHandleCompleteDTO dto) {
+        boolean success = oaApprovalApplicationAdService.handleComplete(dto);
+        if (success) {
+            return R.ok(true, "处理完成操作成功");
+        } else {
+            return R.fail("处理完成操作失败,请检查记录是否存在或权限不足");
+        }
+    }
+
+    @PostMapping("/update-material")
+    @ApiOperation("修改完成资料 - 更新广告图")
+    public R<Boolean> updateMaterial(@RequestBody @Validated AdUpdateMaterialDTO dto) {
+        boolean success = oaApprovalApplicationAdService.updateMaterial(dto);
+        if (success) {
+            return R.ok(true, "修改完成资料操作成功");
+        } else {
+            return R.fail("修改完成资料操作失败,请检查记录是否存在或权限不足");
+        }
+    }
+
 }
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetAdMaterialPriceController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetAdMaterialPriceController.java
index b1ffd71..e5716e8 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetAdMaterialPriceController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetAdMaterialPriceController.java
@@ -1,8 +1,38 @@
 package com.ruoyi.web.controller.api;
 
-
+import cn.idev.excel.FastExcel;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.system.dto.asset.AssetAdMaterialPriceDTO;
+import com.ruoyi.system.query.AssetAdMaterialPriceQuery;
+import com.ruoyi.system.service.AssetAdMaterialPriceService;
+import com.ruoyi.system.vo.asset.AssetAdMaterialPriceVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+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.RequestPart;
 import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.util.Collections;
+import java.util.List;
 
 /**
  * <p>
@@ -12,9 +42,87 @@
  * @author WuGuanFengYue
  * @since 2025-09-15
  */
+@Api(tags = {"广告物料单价相关接口"})
+@Slf4j
+@Validated
 @RestController
 @RequestMapping("/asset-ad-material-price")
+@RequiredArgsConstructor(onConstructor_ = {@Lazy})
 public class AssetAdMaterialPriceController {
 
+    private final AssetAdMaterialPriceService assetAdMaterialPriceService;
+
+    @ApiOperation(value = "新增广告物料单价")
+    @Log(title = "新增广告物料单价", businessType = BusinessType.INSERT)
+    @PostMapping("/add")
+    public R<?> addAssetAdMaterialPrice(@Valid @RequestBody AssetAdMaterialPriceDTO dto) {
+        assetAdMaterialPriceService.addAssetAdMaterialPrice(dto);
+        return R.ok();
+    }
+
+    @ApiOperation(value = "编辑广告物料单价")
+    @Log(title = "编辑广告物料单价", businessType = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    public R<?> editAssetAdMaterialPrice(@Valid @RequestBody AssetAdMaterialPriceDTO dto) {
+        assetAdMaterialPriceService.editAssetAdMaterialPrice(dto);
+        return R.ok();
+    }
+
+    @ApiOperation("获取分页列表")
+    @PostMapping("/page")
+    public R<IPage<AssetAdMaterialPriceVO>> getPageList(@RequestBody AssetAdMaterialPriceQuery query) {
+        return R.ok(assetAdMaterialPriceService.getPageList(query));
+    }
+
+    @ApiOperation("详情")
+    @GetMapping("/detail/{id}")
+    public R<AssetAdMaterialPriceVO> getDetail(@ApiParam(name = "id", value = "广告物料单价ID") @PathVariable Integer id) {
+        return R.ok(assetAdMaterialPriceService.getDetail(id));
+    }
+
+    @ApiOperation("删除")
+    @Transactional(rollbackFor = Exception.class)
+    @DeleteMapping("/{id}")
+    public R<?> delete(@ApiParam(name = "id", value = "广告物料单价ID") @PathVariable Integer id) {
+        assetAdMaterialPriceService.removeById(id);
+        return R.ok();
+    }
+
+    @ApiOperation("下载导入模板")
+    @GetMapping("/template")
+    public void getTemplate(HttpServletResponse response){
+        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+        response.setCharacterEncoding("utf-8");
+        String fileName = null;
+        try {
+            fileName = URLEncoder.encode("广告物料单价导入模板", "UTF-8").replaceAll("\\+", "%20");
+            response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
+            FastExcel.write(response.getOutputStream(), AssetAdMaterialPriceDTO.class)
+                    .sheet("广告物料单价")
+                    .doWrite(Collections.emptyList());
+        } catch (IOException e) {
+            log.error("下载导入模板异常", e);
+        }
+    }
+
+    @ApiOperation("导入")
+    @Log(title = "导入广告物料单价", businessType = BusinessType.IMPORT)
+    @PostMapping("/import")
+    public R<?> importAssetAdMaterialPrice(@RequestPart("file") MultipartFile file){
+        if (file.isEmpty()) {
+            return R.fail("请选择一个文件上传!");
+        }
+        try {
+            List<AssetAdMaterialPriceDTO> list = FastExcel.read(file.getInputStream())
+                    .head(AssetAdMaterialPriceDTO.class)
+                    .sheet()
+                    .doReadSync();
+            assetAdMaterialPriceService.importAssetAdMaterialPrice(list);
+            return R.ok();
+        } catch (IOException e) {
+            log.error("文件处理失败", e);
+            return R.fail("文件处理失败!");
+        }
+    }
 }
 
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/listener/AssetAdValidatorListener.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/listener/AssetAdValidatorListener.java
new file mode 100644
index 0000000..9aaecc6
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/listener/AssetAdValidatorListener.java
@@ -0,0 +1,34 @@
+package com.ruoyi.web.controller.listener;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.idev.excel.context.AnalysisContext;
+import cn.idev.excel.event.AnalysisEventListener;
+import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.system.dto.asset.AssetAdDTO;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author mitao
+ * @date 2025/10/21
+ */
+public class AssetAdValidatorListener extends AnalysisEventListener<AssetAdDTO> {
+    private List<String> errList = new ArrayList<>();
+    @Override
+    public void invoke(AssetAdDTO assetAdDTO, AnalysisContext analysisContext) {
+        Integer rowIndex = analysisContext.readRowHolder().getRowIndex();
+        rowIndex += 1;
+        if (StringUtils.isBlank(assetAdDTO.getAssetName())) {
+            errList.add(String.format("第%d行", rowIndex));
+        }
+    }
+
+    @Override
+    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
+        if (CollUtil.isNotEmpty(errList)) {
+            throw new ServiceException(String.format("%s,资产名称不能为空",String.join(",", errList)));
+        }
+    }
+}
diff --git a/ruoyi-system/pom.xml b/ruoyi-system/pom.xml
index e3b68e4..06fb28b 100644
--- a/ruoyi-system/pom.xml
+++ b/ruoyi-system/pom.xml
@@ -65,7 +65,7 @@
         <dependency>
             <groupId>cn.idev.excel</groupId>
             <artifactId>fastexcel</artifactId>
-            <version>1.3.0</version>
+            <version>1.2.0</version>
         </dependency>
 
 
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/AdHandleCompleteDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/AdHandleCompleteDTO.java
new file mode 100644
index 0000000..3f28bda
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/AdHandleCompleteDTO.java
@@ -0,0 +1,36 @@
+package com.ruoyi.system.dto.asset;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * 广告制作申请处理完成请求参数
+ *
+ * @author mitao
+ * @date 2025/10/21
+ */
+@Data
+@ApiModel("广告制作申请处理完成请求参数")
+public class AdHandleCompleteDTO {
+
+    @ApiModelProperty(value = "广告制作申请ID", required = true)
+    @NotNull(message = "广告制作申请ID不能为空")
+    private Integer id;
+
+    @ApiModelProperty(value = "接单人员", required = true)
+    @NotBlank(message = "接单人员不能为空")
+    private String orderTaker;
+
+    @ApiModelProperty(value = "广告图(多个使用英文逗号拼接)", required = true)
+    @NotBlank(message = "广告图不能为空")
+    private String fileUrl;
+
+    @ApiModelProperty(value = "处理状态 0-待处理,1-已处理", required = true)
+    @NotNull(message = "处理状态不能为空")
+    private Integer status;
+
+}
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/AdUpdateMaterialDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/AdUpdateMaterialDTO.java
new file mode 100644
index 0000000..26c88df
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/AdUpdateMaterialDTO.java
@@ -0,0 +1,28 @@
+package com.ruoyi.system.dto.asset;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * 广告制作申请修改完成资料请求参数
+ *
+ * @author mitao
+ * @date 2025/10/21
+ */
+@Data
+@ApiModel("广告制作申请修改完成资料请求参数")
+public class AdUpdateMaterialDTO {
+
+    @ApiModelProperty(value = "广告制作申请ID", required = true)
+    @NotNull(message = "广告制作申请ID不能为空")
+    private Integer id;
+
+    @ApiModelProperty(value = "广告图(多个使用英文逗号拼接)", required = true)
+    @NotBlank(message = "广告图不能为空")
+    private String fileUrl;
+
+}
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/AssetAdMaterialPriceDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/AssetAdMaterialPriceDTO.java
new file mode 100644
index 0000000..d707a51
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/AssetAdMaterialPriceDTO.java
@@ -0,0 +1,53 @@
+package com.ruoyi.system.dto.asset;
+
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import cn.idev.excel.annotation.ExcelProperty;
+import cn.idev.excel.annotation.write.style.ColumnWidth;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.DecimalMin;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+
+/**
+ * 广告物料单价数据传输对象
+ *
+ * @author WuGuanFengYue
+ * @since 2025-09-15
+ */
+@ExcelIgnoreUnannotated
+@Data
+@ApiModel("广告物料单价数据传输对象")
+public class AssetAdMaterialPriceDTO {
+
+    @ApiModelProperty(value = "主键")
+    private Integer id;
+
+    @ApiModelProperty(value = "物料名称")
+    @ExcelProperty("物料名称")
+    @ColumnWidth(15)
+    @NotBlank(message = "物料名称不能为空")
+    private String materialName;
+
+    @ApiModelProperty(value = "单价")
+    @ExcelProperty("单价")
+    @ColumnWidth(10)
+    @NotNull(message = "单价不能为空")
+    @DecimalMin(value = "0.01", message = "单价必须大于0")
+    private BigDecimal unitPrice;
+
+    @ApiModelProperty(value = "单位(元、平方米等)")
+    @ExcelProperty("单位")
+    @ColumnWidth(8)
+    @NotBlank(message = "单位不能为空")
+    private String priceUnit;
+
+    @ApiModelProperty(value = "备注")
+    @ExcelProperty("备注")
+    @ColumnWidth(20)
+    private String remarks;
+
+}
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/AssetAdMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/AssetAdMapper.java
index 50292a1..0490032 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/AssetAdMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/AssetAdMapper.java
@@ -1,7 +1,11 @@
 package com.ruoyi.system.mapper;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.system.model.AssetAd;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.system.query.AssetAdQuery;
+import com.ruoyi.system.vo.asset.AssetAdVO;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * <p>
@@ -13,4 +17,5 @@
  */
 public interface AssetAdMapper extends BaseMapper<AssetAd> {
 
+    Page<AssetAdVO> getPageList(Page<AssetAdVO> page, @Param("query") AssetAdQuery query);
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/AssetAdMaterialPriceMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/AssetAdMaterialPriceMapper.java
index 51ae978..d1a135a 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/AssetAdMaterialPriceMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/AssetAdMaterialPriceMapper.java
@@ -1,7 +1,12 @@
 package com.ruoyi.system.mapper;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.system.model.AssetAdMaterialPrice;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.system.query.AssetAdMaterialPriceQuery;
+import com.ruoyi.system.vo.asset.AssetAdMaterialPriceVO;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * <p>
@@ -13,4 +18,12 @@
  */
 public interface AssetAdMaterialPriceMapper extends BaseMapper<AssetAdMaterialPrice> {
 
+    /**
+     * 分页查询
+     * @param page 分页参数
+     * @param query 查询条件
+     * @return 分页结果
+     */
+    IPage<AssetAdMaterialPriceVO> getPageList(Page<AssetAdMaterialPriceVO> page, @Param("query") AssetAdMaterialPriceQuery query);
+
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/AssetAd.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/AssetAd.java
index 3ff32b9..8c778d9 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/model/AssetAd.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/AssetAd.java
@@ -45,6 +45,10 @@
     @TableField("asset_type_id")
     private Integer assetTypeId;
 
+    @ApiModelProperty(value = "所属部门")
+    @TableField("dept_id")
+    private Integer deptId;
+
     @ApiModelProperty(value = "位置")
     @TableField("location")
     private String location;
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/AssetAdMaterialPrice.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/AssetAdMaterialPrice.java
index 8655ac8..5f98a80 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/model/AssetAdMaterialPrice.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/AssetAdMaterialPrice.java
@@ -34,6 +34,10 @@
     @TableId(value = "id", type = IdType.AUTO)
     private Integer id;
 
+    @ApiModelProperty(value = "部门id")
+    @TableField("dept_id")
+    private Integer deptId;
+
     @ApiModelProperty(value = "物料名称")
     @TableField("material_name")
     private String materialName;
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/AssetAdMaterialPriceQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/AssetAdMaterialPriceQuery.java
new file mode 100644
index 0000000..33b5f72
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/AssetAdMaterialPriceQuery.java
@@ -0,0 +1,26 @@
+package com.ruoyi.system.query;
+
+import com.ruoyi.common.core.domain.BasePage;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 广告物料单价查询条件对象
+ *
+ * @author WuGuanFengYue
+ * @since 2025-09-15
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+@ApiModel("广告物料单价查询条件对象")
+public class AssetAdMaterialPriceQuery extends BasePage {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("物料名称(模糊搜索)")
+    private String materialName;
+
+    @ApiModelProperty("部门ID(非管理员时作为数据权限过滤),前端不传")
+    private Integer deptId;
+}
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/AssetAdQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/AssetAdQuery.java
index 3f92067..09ce1e7 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/query/AssetAdQuery.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/AssetAdQuery.java
@@ -18,4 +18,7 @@
 
     @ApiModelProperty("关键字 资产名称/资产编号")
     private String keyword;
+
+    @ApiModelProperty("部门ID(非管理员时作为数据权限过滤),前端不传")
+    private Integer deptId;
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/AssetAdMaterialPriceService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/AssetAdMaterialPriceService.java
index cf0032d..8bc3713 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/AssetAdMaterialPriceService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/AssetAdMaterialPriceService.java
@@ -1,7 +1,13 @@
 package com.ruoyi.system.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.system.dto.asset.AssetAdMaterialPriceDTO;
 import com.ruoyi.system.model.AssetAdMaterialPrice;
+import com.ruoyi.system.query.AssetAdMaterialPriceQuery;
+import com.ruoyi.system.vo.asset.AssetAdMaterialPriceVO;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +19,36 @@
  */
 public interface AssetAdMaterialPriceService extends IService<AssetAdMaterialPrice> {
 
+    /**
+     * 添加广告物料单价
+     * @param dto
+     */
+    void addAssetAdMaterialPrice(AssetAdMaterialPriceDTO dto);
+
+    /**
+     * 编辑广告物料单价
+     * @param dto
+     */
+    void editAssetAdMaterialPrice(AssetAdMaterialPriceDTO dto);
+
+    /**
+     * 广告物料单价分页列表
+     * @param query
+     * @return
+     */
+    IPage<AssetAdMaterialPriceVO> getPageList(AssetAdMaterialPriceQuery query);
+
+    /**
+     * 获取详情
+     *
+     * @param id
+     * @return
+     */
+    AssetAdMaterialPriceVO getDetail(Integer id);
+
+    /**
+     * 导入广告物料单价
+     * @param list
+     */
+    void importAssetAdMaterialPrice(List<AssetAdMaterialPriceDTO> list);
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationAdService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationAdService.java
index 0bef412..ca4f69e 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationAdService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationAdService.java
@@ -5,6 +5,8 @@
 import com.ruoyi.system.model.OaApprovalApplicationAd;
 import com.ruoyi.system.query.ApprovalApplicationAdQuery;
 import com.ruoyi.system.vo.ApprovalApplicationAdVO;
+import com.ruoyi.system.dto.asset.AdHandleCompleteDTO;
+import com.ruoyi.system.dto.asset.AdUpdateMaterialDTO;
 
 /**
  * <p>
@@ -17,4 +19,20 @@
 public interface OaApprovalApplicationAdService extends IService<OaApprovalApplicationAd> {
 
     IPage<ApprovalApplicationAdVO> getPageList(ApprovalApplicationAdQuery query);
+
+    /**
+     * 处理完成 - 更新接单人员、广告图、处理状态
+     *
+     * @param dto 处理完成请求参数
+     * @return 是否成功
+     */
+    boolean handleComplete(AdHandleCompleteDTO dto);
+
+    /**
+     * 修改完成资料 - 更新广告图
+     *
+     * @param dto 修改完成资料请求参数
+     * @return 是否成功
+     */
+    boolean updateMaterial(AdUpdateMaterialDTO dto);
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetAdMaterialPriceServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetAdMaterialPriceServiceImpl.java
index 0c6fa38..c98de55 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetAdMaterialPriceServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetAdMaterialPriceServiceImpl.java
@@ -1,10 +1,26 @@
 package com.ruoyi.system.service.impl;
 
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.system.constants.AssetDeptConstant;
+import com.ruoyi.system.dto.asset.AssetAdMaterialPriceDTO;
 import com.ruoyi.system.mapper.AssetAdMaterialPriceMapper;
 import com.ruoyi.system.model.AssetAdMaterialPrice;
+import com.ruoyi.system.query.AssetAdMaterialPriceQuery;
 import com.ruoyi.system.service.AssetAdMaterialPriceService;
+import com.ruoyi.system.service.ISysUserService;
+import com.ruoyi.system.vo.asset.AssetAdMaterialPriceVO;
+import lombok.RequiredArgsConstructor;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -15,6 +31,78 @@
  * @since 2025-09-15
  */
 @Service
+@RequiredArgsConstructor(onConstructor_ = {@Lazy})
 public class AssetAdMaterialPriceServiceImpl extends ServiceImpl<AssetAdMaterialPriceMapper, AssetAdMaterialPrice> implements AssetAdMaterialPriceService {
+    private final ISysUserService sysUserService;
+    @Override
+    public void addAssetAdMaterialPrice(AssetAdMaterialPriceDTO dto) {
+        AssetAdMaterialPrice entity = BeanUtil.copyProperties(dto, AssetAdMaterialPrice.class);
+        entity.setDeptId(Integer.parseInt(SecurityUtils.getLoginUser().getUser().getDeptId()));
+        entity.setCreateBy(SecurityUtils.getLoginUser().getUser().getNickName());
+        entity.setCreateTime(LocalDateTime.now());
+        save(entity);
+    }
 
+    @Override
+    public void editAssetAdMaterialPrice(AssetAdMaterialPriceDTO dto) {
+        AssetAdMaterialPrice entity = BeanUtil.copyProperties(dto, AssetAdMaterialPrice.class);
+        entity.setUpdateBy(SecurityUtils.getLoginUser().getUser().getNickName());
+        entity.setUpdateTime(LocalDateTime.now());
+        updateById(entity);
+    }
+
+    @Override
+    public IPage<AssetAdMaterialPriceVO> getPageList(AssetAdMaterialPriceQuery query) {
+        // 数据权限:超级管理员/资产管理部查看所有数据,其他部门查看当前及下级部门的数据
+        Long userId = SecurityUtils.getUserId();
+        boolean isAdmin = SecurityUtils.isAdmin(userId);
+
+        if (!isAdmin) {
+            try {
+                // 获取当前用户的部门名称
+                String deptName = sysUserService.selectUserById(userId).getDeptName();
+
+                // 非超级管理员且非资产管理部,设置部门权限
+                if (!AssetDeptConstant.ASSET_INVENTORY_DEPT_NAMES.contains(deptName)) {
+                    query.setDeptId(Integer.valueOf(SecurityUtils.getLoginUser().getDeptId()));
+                }
+            } catch (Exception e) {
+                // 如果获取部门信息失败,默认设置部门权限
+                try {
+                    query.setDeptId(Integer.valueOf(SecurityUtils.getLoginUser().getDeptId()));
+                } catch (Exception ex) {
+                    // ignore parse, leave null if cannot parse
+                }
+            }
+        }
+        // 直接使用Mapper的分页查询方法
+        Page<AssetAdMaterialPriceVO> page = new Page<>(query.getPageNum(), query.getPageSize());
+        return baseMapper.getPageList(page, query);
+    }
+
+    @Override
+    public AssetAdMaterialPriceVO getDetail(Integer id) {
+        AssetAdMaterialPrice entity = getById(id);
+        if (entity == null) {
+            return null;
+        }
+        return BeanUtil.copyProperties(entity, AssetAdMaterialPriceVO.class);
+    }
+
+    @Override
+    public void importAssetAdMaterialPrice(List<AssetAdMaterialPriceDTO> list) {
+        if (CollUtil.isNotEmpty(list)) {
+            String currentUser = SecurityUtils.getLoginUser().getUser().getNickName();
+            LocalDateTime now = LocalDateTime.now();
+
+            List<AssetAdMaterialPrice> entities = list.stream().map(dto -> {
+                AssetAdMaterialPrice entity = BeanUtil.copyProperties(dto, AssetAdMaterialPrice.class);
+                entity.setCreateBy(currentUser);
+                entity.setCreateTime(now);
+                return entity;
+            }).collect(Collectors.toList());
+
+            saveBatch(entities);
+        }
+    }
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetAdServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetAdServiceImpl.java
index 29d748e..44dd518 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetAdServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetAdServiceImpl.java
@@ -1,11 +1,13 @@
 package com.ruoyi.system.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.system.constants.AssetDeptConstant;
 import com.ruoyi.system.dto.asset.AssetAdDTO;
 import com.ruoyi.system.mapper.AssetAdMapper;
 import com.ruoyi.system.mapper.AssetAdRentalRecordMapper;
@@ -14,18 +16,17 @@
 import com.ruoyi.system.query.AssetAdQuery;
 import com.ruoyi.system.service.AssetAdService;
 import com.ruoyi.system.service.AssetTypeService;
+import com.ruoyi.system.service.ISysUserService;
 import com.ruoyi.system.vo.asset.AssetAdDetailVO;
 import com.ruoyi.system.vo.asset.AssetAdRentalRecordVO;
 import com.ruoyi.system.vo.asset.AssetAdVO;
 import lombok.RequiredArgsConstructor;
-import org.apache.commons.lang3.StringUtils;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
 import java.time.temporal.ChronoUnit;
-import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.function.Function;
@@ -44,6 +45,7 @@
 public class AssetAdServiceImpl extends ServiceImpl<AssetAdMapper, AssetAd> implements AssetAdService {
     private final AssetTypeService assetTypeService;
     private final AssetAdRentalRecordMapper rentalRecordMapper;
+    private final ISysUserService sysUserService;
 
     @Override
     public void addAssetAd(AssetAdDTO dto) {
@@ -51,6 +53,7 @@
         assetAd.setAssetTypeId(2);
         assetAd.setAssetCode(generateCode());
         assetAd.setCreateBy(SecurityUtils.getLoginUser().getUser().getNickName());
+        assetAd.setDeptId(Integer.parseInt(SecurityUtils.getLoginUser().getUser().getDeptId()));
         save(assetAd);
     }
 
@@ -83,15 +86,30 @@
 
     @Override
     public IPage<AssetAdVO> getPageList(AssetAdQuery query) {
-        // 1. 分页查询 AssetAd
-        Page<AssetAd> page = new Page<>(query.getPageNum(), query.getPageSize());
-        LambdaQueryWrapper<AssetAd> queryWrapper = new LambdaQueryWrapper<AssetAd>()
-            .like(StringUtils.isNotBlank(query.getKeyword()), AssetAd::getAssetName, query.getKeyword())
-            .or()
-            .like(StringUtils.isNotBlank(query.getKeyword()), AssetAd::getAssetCode, query.getKeyword())
-            .orderByDesc(AssetAd::getCreateTime);
+        // 数据权限:超级管理员/资产管理部查看所有数据,其他部门查看当前及下级部门的数据
+        Long userId = SecurityUtils.getUserId();
+        boolean isAdmin = SecurityUtils.isAdmin(userId);
 
-        Page<AssetAd> assetPage = this.page(page, queryWrapper);
+        if (!isAdmin) {
+            try {
+                // 获取当前用户的部门名称
+                String deptName = sysUserService.selectUserById(userId).getDeptName();
+
+                // 非超级管理员且非资产管理部,设置部门权限
+                if (!AssetDeptConstant.ASSET_INVENTORY_DEPT_NAMES.contains(deptName)) {
+                    query.setDeptId(Integer.valueOf(SecurityUtils.getLoginUser().getDeptId()));
+                }
+            } catch (Exception e) {
+                // 如果获取部门信息失败,默认设置部门权限
+                try {
+                    query.setDeptId(Integer.valueOf(SecurityUtils.getLoginUser().getDeptId()));
+                } catch (Exception ex) {
+                    // ignore parse, leave null if cannot parse
+                }
+            }
+        }
+        // 1. 分页查询 AssetAd
+        Page<AssetAdVO> assetPage = this.baseMapper.getPageList(new Page<>(query.getPageNum(), query.getPageSize()), query);
 
         // 2. 如果没有数据,返回空分页
         if (assetPage.getRecords().isEmpty()) {
@@ -100,7 +118,7 @@
 
         // 3. 获取所有资产ID
         List<Integer> assetAdIds = assetPage.getRecords().stream()
-            .map(AssetAd::getId)
+            .map(AssetAdVO::getId)
             .collect(Collectors.toList());
 
         // 4. 查询相关租赁记录
@@ -118,30 +136,18 @@
                 .collect(Collectors.toMap(AssetAdRentalRecord::getAssetAdId, Function.identity()));
 
         // 6. 组装VO数据
-        List<AssetAdVO> voList = new ArrayList<>();
-        for (AssetAd asset : assetPage.getRecords()) {
-            AssetAdVO vo = BeanUtil.copyProperties(asset, AssetAdVO.class);
-
+        for (AssetAdVO vo : assetPage.getRecords()) {
             // 设置租赁相关信息
-            AssetAdRentalRecord currentRental = currentRentalMap.get(asset.getId());
+            AssetAdRentalRecord currentRental = currentRentalMap.get(vo.getId());
             if (currentRental != null) {
                 vo.setCurrentUseBy(currentRental.getUseBy());
                 vo.setRentalPrice(currentRental.getRentalPrice());
                 vo.setUseDuration(calculateUseDuration(currentRental.getStartDate(), currentRental.getEndDate()));
             }
-
-            voList.add(vo);
         }
 
         // 7. 返回分页结果
-        Page<AssetAdVO> resultPage = new Page<>(query.getPageNum(), query.getPageSize());
-        resultPage.setRecords(voList);
-        resultPage.setTotal(assetPage.getTotal());
-        resultPage.setSize(assetPage.getSize());
-        resultPage.setCurrent(assetPage.getCurrent());
-        resultPage.setPages(assetPage.getPages());
-
-        return resultPage;
+        return assetPage;
     }
 
     /**
@@ -184,13 +190,15 @@
 
     @Override
     public void importAssetAd(List<AssetAdDTO> list) {
-        List<AssetAd> collect = list.stream().map(item -> {
-            AssetAd assetAd = BeanUtil.copyProperties(item, AssetAd.class);
-            assetAd.setAssetTypeId(2);
-            assetAd.setAssetCode(generateCode());
-            assetAd.setCreateBy(SecurityUtils.getLoginUser().getUser().getNickName());
-            return assetAd;
-        }).collect(Collectors.toList());
-        saveBatch(collect);
+        if (CollUtil.isNotEmpty(list)) {
+            List<AssetAd> collect = list.stream().map(item -> {
+                AssetAd assetAd = BeanUtil.copyProperties(item, AssetAd.class);
+                assetAd.setAssetTypeId(2);
+                assetAd.setAssetCode(generateCode());
+                assetAd.setCreateBy(SecurityUtils.getLoginUser().getUser().getNickName());
+                return assetAd;
+            }).collect(Collectors.toList());
+            saveBatch(collect);
+        }
     }
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationAdServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationAdServiceImpl.java
index 78f5c67..e37e36c 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationAdServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationAdServiceImpl.java
@@ -5,6 +5,8 @@
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.system.constants.AssetDeptConstant;
+import com.ruoyi.system.dto.asset.AdHandleCompleteDTO;
+import com.ruoyi.system.dto.asset.AdUpdateMaterialDTO;
 import com.ruoyi.system.mapper.OaApprovalApplicationAdMapper;
 import com.ruoyi.system.model.OaApprovalApplicationAd;
 import com.ruoyi.system.query.ApprovalApplicationAdQuery;
@@ -14,6 +16,8 @@
 import lombok.RequiredArgsConstructor;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
 
 /**
  * <p>
@@ -53,4 +57,65 @@
         }
         return baseMapper.getPageList(new Page<>(query.getPageNum(), query.getPageSize()), query);
     }
+
+    @Override
+    public boolean handleComplete(AdHandleCompleteDTO dto) {
+        // 查询记录是否存在
+        OaApprovalApplicationAd entity = getById(dto.getId());
+        if (entity == null) {
+            return false;
+        }
+
+        // 更新字段
+        entity.setOrderTaker(dto.getOrderTaker());
+        entity.setFileUrl(dto.getFileUrl());
+        entity.setStatus(dto.getStatus());
+        entity.setHandleTime(LocalDateTime.now());
+        return updateById(entity);
+    }
+
+    @Override
+    public boolean updateMaterial(AdUpdateMaterialDTO dto) {
+        // 查询记录是否存在
+        OaApprovalApplicationAd entity = getById(dto.getId());
+        if (entity == null) {
+            return false;
+        }
+
+        // 只更新广告图
+        entity.setFileUrl(dto.getFileUrl());
+
+        return updateById(entity);
+    }
+
+    /**
+     * 检查用户是否有数据权限处理该记录
+     *
+     * @param entity 实体对象
+     * @return 是否有权限
+     */
+    private boolean hasDataPermission(OaApprovalApplicationAd entity) {
+        Long userId = SecurityUtils.getUserId();
+        boolean isAdmin = SecurityUtils.isAdmin(userId);
+
+        // 超级管理员有所有权限
+        if (isAdmin) {
+            return true;
+        }
+
+        try {
+            // 获取当前用户的部门名称
+            String deptName = sysUserService.selectUserById(userId).getDeptName();
+
+            // 资产管理部有所有权限
+            if (AssetDeptConstant.ASSET_DEPARTMENT_NAME.equals(deptName)) {
+                return true;
+            }
+        } catch (Exception e) {
+            // 如果获取部门信息失败,默认无权限
+            return false;
+        }
+
+        return false;
+    }
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/AssetAdMaterialPriceVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/AssetAdMaterialPriceVO.java
new file mode 100644
index 0000000..2a2dee1
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/AssetAdMaterialPriceVO.java
@@ -0,0 +1,50 @@
+package com.ruoyi.system.vo.asset;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * 广告物料单价视图对象
+ *
+ * @author WuGuanFengYue
+ * @since 2025-09-15
+ */
+@Data
+@ApiModel("广告物料单价视图对象")
+public class AssetAdMaterialPriceVO {
+
+    @ApiModelProperty(value = "主键")
+    private Integer id;
+
+    @ApiModelProperty(value = "物料名称")
+    private String materialName;
+
+    @ApiModelProperty(value = "单价")
+    private BigDecimal unitPrice;
+
+    @ApiModelProperty(value = "单位(元、平方米等)")
+    private String priceUnit;
+
+    @ApiModelProperty(value = "备注")
+    private String remarks;
+
+    @ApiModelProperty(value = "创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+
+    @ApiModelProperty(value = "更新时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+
+}
\ No newline at end of file
diff --git a/ruoyi-system/src/main/resources/mapper/system/AssetAdMapper.xml b/ruoyi-system/src/main/resources/mapper/system/AssetAdMapper.xml
index 83ebde0..42946b4 100644
--- a/ruoyi-system/src/main/resources/mapper/system/AssetAdMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/AssetAdMapper.xml
@@ -24,5 +24,31 @@
     <sql id="Base_Column_List">
         id, asset_name, asset_code, asset_type_id, location, rental_type, asset_status, remarks, attachment_urls, create_time, create_by, update_time, update_by, disabled
     </sql>
+    <select id="getPageList" resultType="com.ruoyi.system.vo.asset.AssetAdVO">
+        SELECT aa.id,
+        asset_name,
+        asset_code,
+        dept_id,
+        asset_type_id,
+        location,
+        rental_type,
+        asset_status,
+        remarks,
+        attachment_urls,
+        create_time,
+        create_by
+        FROM asset_ad aa LEFT JOIN t_dept td ON aa.dept_id = td.id
+        <where>
+            aa.disabled = 0
+            <if test="query.keyword != null and query.keyword != ''">
+                AND (aa.asset_name LIKE CONCAT('%', #{query.keyword}, '%')
+                OR aa.asset_code LIKE CONCAT('%', #{query.keyword}, '%'))
+            </if>
+            <if test="query.deptId != null">
+                AND (td.id = #{query.deptId} OR FIND_IN_SET(#{query.deptId}, od.parent_id))
+            </if>
+        </where>
+        ORDER BY aa.create_time DESC
+    </select>
 
 </mapper>
diff --git a/ruoyi-system/src/main/resources/mapper/system/AssetAdMaterialPriceMapper.xml b/ruoyi-system/src/main/resources/mapper/system/AssetAdMaterialPriceMapper.xml
index b517ed8..77fd44e 100644
--- a/ruoyi-system/src/main/resources/mapper/system/AssetAdMaterialPriceMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/AssetAdMaterialPriceMapper.xml
@@ -21,4 +21,30 @@
         id, material_name, unit_price, price_unit, remarks, create_time, create_by, update_time, update_by, disabled
     </sql>
 
+    <!-- 分页查询 -->
+    <select id="getPageList" resultType="com.ruoyi.system.vo.asset.AssetAdMaterialPriceVO">
+        SELECT
+            id,
+            material_name,
+            dept_id,
+            unit_price,
+            price_unit,
+            remarks,
+            create_time,
+            create_by,
+            update_time,
+            update_by
+        FROM asset_ad_material_price aamp LEFT JOIN t_dept td ON aamp.dept_id = td.id
+        <where>
+            disabled = 0
+            <if test="query.materialName != null and query.materialName != ''">
+                AND material_name LIKE CONCAT('%', #{query.materialName}, '%')
+            </if>
+            <if test="query.deptId != null">
+                AND (td.id = #{query.deptId} OR FIND_IN_SET(#{query.deptId}, od.parent_id))
+            </if>
+        </where>
+        ORDER BY create_time DESC
+    </select>
+
 </mapper>

--
Gitblit v1.7.1