From 5b13db7e2c95385d69b8bdb449560bbbfe359146 Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期四, 23 十月 2025 17:16:47 +0800
Subject: [PATCH] 广告物料零星结算接口

---
 ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/AssetAdMaterialSporadicSettlementVO.java                  |   37 ++++
 ruoyi-system/src/main/resources/mapper/system/AssetAdMaterialSporadicSettlementMapper.xml                      |   25 ++
 ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/AssetAdMaterialSporadicSettlementInfoDTO.java            |   69 +++++++
 ruoyi-system/src/main/java/com/ruoyi/system/export/AssetAdMaterialSporadicSettlementImport.java                |    3 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetAdMaterialSporadicSettlementInfoServiceImpl.java |   16 +
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetAdMaterialSporadicSettlementServiceImpl.java     |   93 ++++++++++
 ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/AssetAdMaterialSporadicSettlementImportDTO.java          |   29 +++
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/AssetAdMaterialSporadicSettlementMapper.java                |    4 
 ruoyi-system/src/main/java/com/ruoyi/system/model/AssetAdMaterialSporadicSettlement.java                       |    4 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/AssetAdMaterialSporadicSettlementDetailVO.java            |   21 ++
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetAdMaterialQuotationController.java                 |    6 
 ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/AssetAdMaterialSporadicSettlementDTO.java                |   13 +
 ruoyi-system/src/main/java/com/ruoyi/system/service/AssetAdMaterialSporadicSettlementService.java              |   50 +++++
 ruoyi-system/src/main/java/com/ruoyi/system/service/AssetAdMaterialSporadicSettlementInfoService.java          |    5 
 ruoyi-system/src/main/resources/mapper/system/AssetAdMaterialPriceMapper.xml                                   |   28 +-
 ruoyi-system/src/main/java/com/ruoyi/system/model/AssetAdMaterialSporadicSettlementInfo.java                   |   11 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetAdMaterialSporadicSettlementController.java        |   42 ++++
 ruoyi-system/src/main/java/com/ruoyi/system/query/AssetAdMaterialSporadicSettlementQuery.java                  |   25 ++
 18 files changed, 452 insertions(+), 29 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetAdMaterialQuotationController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetAdMaterialQuotationController.java
index e4fdd9d..05b1d49 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetAdMaterialQuotationController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetAdMaterialQuotationController.java
@@ -1,6 +1,9 @@
 package com.ruoyi.web.controller.api;
 
 
+import io.swagger.annotations.Api;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.RequestMapping;
 
 import org.springframework.web.bind.annotation.RestController;
@@ -13,6 +16,9 @@
  * @author mitao
  * @since 2025-10-17
  */
+@Slf4j
+@Validated
+@Api(tags = {"广告物料报价表相关接口"})
 @RestController
 @RequestMapping("/asset-ad-material-quotation")
 public class AssetAdMaterialQuotationController {
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetAdMaterialSporadicSettlementController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetAdMaterialSporadicSettlementController.java
index a3af75b..b816333 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetAdMaterialSporadicSettlementController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetAdMaterialSporadicSettlementController.java
@@ -3,20 +3,29 @@
 
 import cn.afterturn.easypoi.excel.ExcelExportUtil;
 import cn.afterturn.easypoi.excel.entity.ExportParams;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.google.common.collect.Lists;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.system.dto.asset.AssetAdMaterialSporadicSettlementDTO;
+import com.ruoyi.system.dto.asset.AssetAdMaterialSporadicSettlementImportDTO;
 import com.ruoyi.system.export.AssetAdMaterialSporadicSettlementImport;
+import com.ruoyi.system.query.AssetAdMaterialSporadicSettlementQuery;
 import com.ruoyi.system.service.AssetAdMaterialSporadicSettlementService;
+import com.ruoyi.system.vo.asset.AssetAdMaterialSporadicSettlementDetailVO;
+import com.ruoyi.system.vo.asset.AssetAdMaterialSporadicSettlementVO;
 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.apache.poi.ss.usermodel.Workbook;
 import org.springframework.context.annotation.Lazy;
 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;
@@ -73,9 +82,40 @@
 
     @ApiOperation("导入零星资产结算数据")
     @PostMapping("/import")
-    public R<?> importData(@RequestPart("file") MultipartFile file, @Valid AssetAdMaterialSporadicSettlementDTO dto) {
+    public R<?> importData(@RequestPart("file") MultipartFile file, @Valid AssetAdMaterialSporadicSettlementImportDTO dto) {
         assetAdMaterialSporadicSettlementService.importData(file, dto);
         return R.ok();
     }
 
+    @ApiOperation("分页列表")
+    @PostMapping("/page")
+    public R<IPage<AssetAdMaterialSporadicSettlementVO>> getPageList(@RequestBody AssetAdMaterialSporadicSettlementQuery query){
+        return R.ok(assetAdMaterialSporadicSettlementService.getPageList(query));
+    }
+
+    @ApiOperation("新增")
+    @PostMapping("/add")
+    public R<Boolean> add(@Valid @RequestBody AssetAdMaterialSporadicSettlementDTO dto){
+        return R.ok(assetAdMaterialSporadicSettlementService.add(dto));
+    }
+
+    @ApiOperation("编辑")
+    @PostMapping("/edit")
+    public R<?> edit(@Valid @RequestBody AssetAdMaterialSporadicSettlementDTO dto){
+        assetAdMaterialSporadicSettlementService.edit(dto);
+        return R.ok();
+    }
+
+    @ApiOperation("删除")
+    @DeleteMapping("/{id}")
+    public R<?> deleteById(@ApiParam(name = "id", value = "主键") @PathVariable Integer id) {
+        assetAdMaterialSporadicSettlementService.deleteById(id);
+        return R.ok();
+    }
+
+    @ApiOperation("详情")
+    @GetMapping("/detail/{id}")
+    public R<AssetAdMaterialSporadicSettlementDetailVO> getDetail(@ApiParam(name = "id", value = "主键") @PathVariable Integer id) {
+        return R.ok(assetAdMaterialSporadicSettlementService.getDetail(id));
+    }
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/AssetAdMaterialSporadicSettlementDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/AssetAdMaterialSporadicSettlementDTO.java
index 05269b3..87cbca0 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/AssetAdMaterialSporadicSettlementDTO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/AssetAdMaterialSporadicSettlementDTO.java
@@ -5,6 +5,10 @@
 import lombok.Data;
 
 import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.List;
 
 /**
  * @author mitao
@@ -13,6 +17,7 @@
 @Data
 @ApiModel("广告物料零星结算表数据传输对象")
 public class AssetAdMaterialSporadicSettlementDTO {
+
     @ApiModelProperty(value = "主键")
     private Integer id;
 
@@ -27,4 +32,12 @@
     @ApiModelProperty(value = "结算单位")
     @NotBlank(message = "结算单位不能为空")
     private String settlementInstitution;
+
+    @ApiModelProperty(value = "合计金额")
+    @NotNull(message = "合计金额不能为空")
+    private BigDecimal totalAmount;
+
+    @ApiModelProperty(value = "明细列表")
+    @NotEmpty(message = "明细列表不能为空")
+    private List<AssetAdMaterialSporadicSettlementInfoDTO> infos;
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/AssetAdMaterialSporadicSettlementImportDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/AssetAdMaterialSporadicSettlementImportDTO.java
new file mode 100644
index 0000000..1e5725b
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/AssetAdMaterialSporadicSettlementImportDTO.java
@@ -0,0 +1,29 @@
+package com.ruoyi.system.dto.asset;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * @author mitao
+ * @date 2025/10/22
+ */
+@Data
+@ApiModel("广告物料零星结算表导入数据传输对象")
+public class AssetAdMaterialSporadicSettlementImportDTO {
+
+    @ApiModelProperty(value = "标题")
+    @NotBlank(message = "标题不能为空")
+    private String title;
+
+    @ApiModelProperty(value = "结算项目")
+    @NotBlank(message = "结算项目不能为空")
+    private String settlementProject;
+
+    @ApiModelProperty(value = "结算单位")
+    @NotBlank(message = "结算单位不能为空")
+    private String settlementInstitution;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/AssetAdMaterialSporadicSettlementInfoDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/AssetAdMaterialSporadicSettlementInfoDTO.java
new file mode 100644
index 0000000..e74915b
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/AssetAdMaterialSporadicSettlementInfoDTO.java
@@ -0,0 +1,69 @@
+package com.ruoyi.system.dto.asset;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+
+/**
+ * <p>
+ * 广告物料零星结算表关联表
+ * </p>
+ *
+ * @author mitao
+ * @since 2025-10-17
+ */
+@Data
+@ApiModel(value="广告物料零星结算表明细数据传输对象")
+public class AssetAdMaterialSporadicSettlementInfoDTO {
+
+    @ApiModelProperty(value = "日期")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private LocalDate settlementDate;
+
+    @ApiModelProperty(value = "安装地点")
+    private String address;
+
+    @ApiModelProperty(value = "名称")
+    @NotBlank(message = "名称不能为空")
+    private String adName;
+
+    @ApiModelProperty(value = "材质工艺")
+    private String material;
+
+    @ApiModelProperty(value = "设计图例")
+    private String designLegend;
+
+    @ApiModelProperty(value = "安装图例")
+    private String installationLegend;
+
+    @ApiModelProperty(value = "长(米)")
+    private Double length;
+
+    @ApiModelProperty(value = "高(米)")
+    private Double height;
+
+    @ApiModelProperty(value = "数量")
+    @NotNull(message = "数量不能为空")
+    private Integer quantity;
+
+    @ApiModelProperty(value = "小计")
+    private String subtotal;
+
+    @ApiModelProperty(value = "单价(元)")
+    @NotNull(message = "单价不能为空")
+    private BigDecimal unitPrice;
+
+    @ApiModelProperty(value = "金额(元)")
+    private BigDecimal amount;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/export/AssetAdMaterialSporadicSettlementImport.java b/ruoyi-system/src/main/java/com/ruoyi/system/export/AssetAdMaterialSporadicSettlementImport.java
index 9779f73..351a8b2 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/export/AssetAdMaterialSporadicSettlementImport.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/export/AssetAdMaterialSporadicSettlementImport.java
@@ -63,10 +63,9 @@
     private BigDecimal unitPrice;
 
     @Excel(name = "金额(元)", width = 20)
-    private BigDecimal totalAmount;
+    private BigDecimal amount;
 
     @Excel(name = "备注", width = 20)
     private String remark;
-
 
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/AssetAdMaterialSporadicSettlementMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/AssetAdMaterialSporadicSettlementMapper.java
index f55c563..c7e3278 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/AssetAdMaterialSporadicSettlementMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/AssetAdMaterialSporadicSettlementMapper.java
@@ -1,7 +1,10 @@
 package com.ruoyi.system.mapper;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.ruoyi.system.model.AssetAdMaterialSporadicSettlement;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.system.query.AssetAdMaterialSporadicSettlementQuery;
+import com.ruoyi.system.vo.asset.AssetAdMaterialSporadicSettlementVO;
 
 /**
  * <p>
@@ -13,4 +16,5 @@
  */
 public interface AssetAdMaterialSporadicSettlementMapper extends BaseMapper<AssetAdMaterialSporadicSettlement> {
 
+    IPage<AssetAdMaterialSporadicSettlementVO> getPageList(AssetAdMaterialSporadicSettlementQuery query);
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/AssetAdMaterialSporadicSettlement.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/AssetAdMaterialSporadicSettlement.java
index de1b051..b646b03 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/model/AssetAdMaterialSporadicSettlement.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/AssetAdMaterialSporadicSettlement.java
@@ -11,6 +11,7 @@
 import lombok.experimental.Accessors;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.time.LocalDateTime;
 
 /**
@@ -46,6 +47,9 @@
     @ApiModelProperty(value = "结算单位")
     private String settlementInstitution;
 
+    @ApiModelProperty(value = "合计金额")
+    private BigDecimal totalAmount;
+
     @ApiModelProperty(value = "创建时间")
     private LocalDateTime createTime;
 
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/AssetAdMaterialSporadicSettlementInfo.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/AssetAdMaterialSporadicSettlementInfo.java
index fcf2dcd..d08e75b 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/model/AssetAdMaterialSporadicSettlementInfo.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/AssetAdMaterialSporadicSettlementInfo.java
@@ -1,16 +1,17 @@
 package com.ruoyi.system.model;
 
-import java.math.BigDecimal;
-import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.annotation.IdType;
-import java.time.LocalDate;
 import com.baomidou.mybatisplus.annotation.TableId;
-import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDate;
 
 /**
  * <p>
@@ -70,7 +71,7 @@
     private BigDecimal unitPrice;
 
     @ApiModelProperty(value = "金额(元)")
-    private BigDecimal totalAmount;
+    private BigDecimal amount;
 
     @ApiModelProperty(value = "备注")
     private String remark;
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/AssetAdMaterialSporadicSettlementQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/AssetAdMaterialSporadicSettlementQuery.java
new file mode 100644
index 0000000..1fb19ad
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/AssetAdMaterialSporadicSettlementQuery.java
@@ -0,0 +1,25 @@
+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 mitao
+ * @date 2025/10/23
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("广告物料零星结算查询对象")
+public class AssetAdMaterialSporadicSettlementQuery extends BasePage {
+
+    private static final long serialVersionUID = 5372773098625060538L;
+
+    @ApiModelProperty(value = "标题")
+    private String title;
+
+    @ApiModelProperty("部门ID(非管理员时作为数据权限过滤),前端不传")
+    private Integer deptId;
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/AssetAdMaterialSporadicSettlementInfoService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/AssetAdMaterialSporadicSettlementInfoService.java
index 390baf7..1c325e2 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/AssetAdMaterialSporadicSettlementInfoService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/AssetAdMaterialSporadicSettlementInfoService.java
@@ -3,6 +3,8 @@
 import com.ruoyi.system.model.AssetAdMaterialSporadicSettlementInfo;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.List;
+
 /**
  * <p>
  * 广告物料零星结算表关联表 服务类
@@ -13,4 +15,7 @@
  */
 public interface AssetAdMaterialSporadicSettlementInfoService extends IService<AssetAdMaterialSporadicSettlementInfo> {
 
+    void removeBySettlementId(Integer id);
+
+    List<AssetAdMaterialSporadicSettlementInfo> getBySettlementId(Integer id);
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/AssetAdMaterialSporadicSettlementService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/AssetAdMaterialSporadicSettlementService.java
index e321801..3c9aeed 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/AssetAdMaterialSporadicSettlementService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/AssetAdMaterialSporadicSettlementService.java
@@ -1,8 +1,13 @@
 package com.ruoyi.system.service;
 
-import com.ruoyi.system.dto.asset.AssetAdMaterialSporadicSettlementDTO;
-import com.ruoyi.system.model.AssetAdMaterialSporadicSettlement;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.system.dto.asset.AssetAdMaterialSporadicSettlementDTO;
+import com.ruoyi.system.dto.asset.AssetAdMaterialSporadicSettlementImportDTO;
+import com.ruoyi.system.model.AssetAdMaterialSporadicSettlement;
+import com.ruoyi.system.query.AssetAdMaterialSporadicSettlementQuery;
+import com.ruoyi.system.vo.asset.AssetAdMaterialSporadicSettlementDetailVO;
+import com.ruoyi.system.vo.asset.AssetAdMaterialSporadicSettlementVO;
 import org.springframework.web.multipart.MultipartFile;
 
 /**
@@ -14,6 +19,45 @@
  * @since 2025-10-17
  */
 public interface AssetAdMaterialSporadicSettlementService extends IService<AssetAdMaterialSporadicSettlement> {
+    /**
+     * 导入
+     * @param file
+     * @param dto
+     */
+    void importData(MultipartFile file, AssetAdMaterialSporadicSettlementImportDTO dto);
 
-    void importData(MultipartFile file, AssetAdMaterialSporadicSettlementDTO dto);
+    /**
+     * 分页列表查询
+     * @param query
+     * @return
+     */
+    IPage<AssetAdMaterialSporadicSettlementVO> getPageList(AssetAdMaterialSporadicSettlementQuery query);
+
+    /**
+     * 新增
+     *
+     * @param dto
+     * @return
+     */
+    Boolean add(AssetAdMaterialSporadicSettlementDTO dto);
+
+    /**
+     * 编辑
+     * @param dto
+     */
+    Boolean edit(AssetAdMaterialSporadicSettlementDTO dto);
+
+    /**
+     * 删除
+     * @param id
+     * @return
+     */
+    Boolean deleteById(Integer id);
+
+    /**
+     * 详情
+     *
+     * @return
+     */
+    AssetAdMaterialSporadicSettlementDetailVO getDetail(Integer id);
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetAdMaterialSporadicSettlementInfoServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetAdMaterialSporadicSettlementInfoServiceImpl.java
index 2690a4f..77b0974 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetAdMaterialSporadicSettlementInfoServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetAdMaterialSporadicSettlementInfoServiceImpl.java
@@ -1,10 +1,12 @@
 package com.ruoyi.system.service.impl;
 
-import com.ruoyi.system.model.AssetAdMaterialSporadicSettlementInfo;
-import com.ruoyi.system.mapper.AssetAdMaterialSporadicSettlementInfoMapper;
-import com.ruoyi.system.service.AssetAdMaterialSporadicSettlementInfoService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.system.mapper.AssetAdMaterialSporadicSettlementInfoMapper;
+import com.ruoyi.system.model.AssetAdMaterialSporadicSettlementInfo;
+import com.ruoyi.system.service.AssetAdMaterialSporadicSettlementInfoService;
 import org.springframework.stereotype.Service;
+
+import java.util.List;
 
 /**
  * <p>
@@ -16,5 +18,13 @@
  */
 @Service
 public class AssetAdMaterialSporadicSettlementInfoServiceImpl extends ServiceImpl<AssetAdMaterialSporadicSettlementInfoMapper, AssetAdMaterialSporadicSettlementInfo> implements AssetAdMaterialSporadicSettlementInfoService {
+    @Override
+    public void removeBySettlementId(Integer id) {
+        lambdaUpdate().eq(AssetAdMaterialSporadicSettlementInfo::getAdMaterialSporadicSettlementId, id).remove();
+    }
 
+    @Override
+    public List<AssetAdMaterialSporadicSettlementInfo> getBySettlementId(Integer id) {
+        return lambdaQuery().eq(AssetAdMaterialSporadicSettlementInfo::getAdMaterialSporadicSettlementId, id).list();
+    }
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetAdMaterialSporadicSettlementServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetAdMaterialSporadicSettlementServiceImpl.java
index 94a38ae..211858c 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetAdMaterialSporadicSettlementServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetAdMaterialSporadicSettlementServiceImpl.java
@@ -3,17 +3,25 @@
 import cn.afterturn.easypoi.excel.ExcelImportUtil;
 import cn.afterturn.easypoi.excel.entity.ImportParams;
 import cn.hutool.core.bean.BeanUtil;
+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.core.exception.ServiceException;
 import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.system.constants.AssetDeptConstant;
 import com.ruoyi.system.dto.asset.AssetAdMaterialSporadicSettlementDTO;
+import com.ruoyi.system.dto.asset.AssetAdMaterialSporadicSettlementImportDTO;
 import com.ruoyi.system.export.AssetAdMaterialSporadicSettlementImport;
 import com.ruoyi.system.mapper.AssetAdMaterialSporadicSettlementMapper;
 import com.ruoyi.system.model.AssetAdMaterialSporadicSettlement;
 import com.ruoyi.system.model.AssetAdMaterialSporadicSettlementInfo;
+import com.ruoyi.system.query.AssetAdMaterialSporadicSettlementQuery;
 import com.ruoyi.system.service.AssetAdMaterialSporadicSettlementInfoService;
 import com.ruoyi.system.service.AssetAdMaterialSporadicSettlementService;
+import com.ruoyi.system.service.ISysUserService;
 import com.ruoyi.system.service.OssService;
+import com.ruoyi.system.vo.asset.AssetAdMaterialSporadicSettlementDetailVO;
+import com.ruoyi.system.vo.asset.AssetAdMaterialSporadicSettlementVO;
 import lombok.Cleanup;
 import lombok.RequiredArgsConstructor;
 import org.apache.commons.lang3.StringUtils;
@@ -25,6 +33,8 @@
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.InputStream;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.List;
 import java.util.Objects;
 import java.util.Optional;
@@ -42,10 +52,11 @@
 public class AssetAdMaterialSporadicSettlementServiceImpl extends ServiceImpl<AssetAdMaterialSporadicSettlementMapper, AssetAdMaterialSporadicSettlement> implements AssetAdMaterialSporadicSettlementService {
     private final OssService ossService;
     private final AssetAdMaterialSporadicSettlementInfoService assetAdMaterialSporadicSettlementInfoService;
+    private final ISysUserService sysUserService;
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public void importData(MultipartFile file, AssetAdMaterialSporadicSettlementDTO dto) {
+    public void importData(MultipartFile file, AssetAdMaterialSporadicSettlementImportDTO dto) {
         try {
             ImportParams importParams = new ImportParams();
             importParams.setTitleRows(0);
@@ -57,6 +68,7 @@
             uploadToOss(list);
             //保存
             AssetAdMaterialSporadicSettlement assetAdMaterialSporadicSettlement = BeanUtil.copyProperties(dto, AssetAdMaterialSporadicSettlement.class);
+            assetAdMaterialSporadicSettlement.setTotalAmount(calculateTotalAmount(list));
             assetAdMaterialSporadicSettlement.setCreateBy(SecurityUtils.getLoginUser().getUser().getNickName());
             assetAdMaterialSporadicSettlement.setDeptId(Integer.parseInt(SecurityUtils.getLoginUser().getUser().getDeptId()));
             save(assetAdMaterialSporadicSettlement);
@@ -67,6 +79,12 @@
         } catch (Exception e) {
             throw new RuntimeException(e);
         }
+    }
+
+    private BigDecimal calculateTotalAmount(List<AssetAdMaterialSporadicSettlementImport> list) {
+        return list.stream().map(item -> BigDecimal.valueOf(item.getQuantity())
+                        .multiply(item.getUnitPrice()).setScale(2, RoundingMode.HALF_UP))
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
     }
 
     private void validateFields(List<AssetAdMaterialSporadicSettlementImport> list) {
@@ -132,4 +150,77 @@
             tmpFile.delete();
         }
     }
+
+    @Override
+    public IPage<AssetAdMaterialSporadicSettlementVO> getPageList(AssetAdMaterialSporadicSettlementQuery 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<AssetAdMaterialSporadicSettlementVO> page = new Page<>(query.getPageNum(), query.getPageSize());
+        return baseMapper.getPageList(query);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public Boolean add(AssetAdMaterialSporadicSettlementDTO dto) {
+        AssetAdMaterialSporadicSettlement assetAdMaterialSporadicSettlement = BeanUtil.copyProperties(dto, AssetAdMaterialSporadicSettlement.class);
+        assetAdMaterialSporadicSettlement.setCreateBy(SecurityUtils.getLoginUser().getUser().getNickName());
+        assetAdMaterialSporadicSettlement.setDeptId(Integer.parseInt(SecurityUtils.getLoginUser().getUser().getDeptId()));
+        save(assetAdMaterialSporadicSettlement);
+        //保存明细
+        List<AssetAdMaterialSporadicSettlementInfo> assetAdMaterialSporadicSettlementInfos = BeanUtil.copyToList(dto.getInfos(), AssetAdMaterialSporadicSettlementInfo.class);
+        assetAdMaterialSporadicSettlementInfos.forEach(item -> item.setAdMaterialSporadicSettlementId(assetAdMaterialSporadicSettlement.getId()));
+      return assetAdMaterialSporadicSettlementInfoService.saveBatch(assetAdMaterialSporadicSettlementInfos);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public Boolean edit(AssetAdMaterialSporadicSettlementDTO dto) {
+        if (Objects.isNull(dto.getId())) {
+            throw new ServiceException("ID不能为空");
+        }
+        AssetAdMaterialSporadicSettlement assetAdMaterialSporadicSettlement = BeanUtil.copyProperties(dto, AssetAdMaterialSporadicSettlement.class);
+        updateById(assetAdMaterialSporadicSettlement);
+        //删除原有明细
+        assetAdMaterialSporadicSettlementInfoService.removeBySettlementId(dto.getId());
+        //保存明细
+        List<AssetAdMaterialSporadicSettlementInfo> assetAdMaterialSporadicSettlementInfos = BeanUtil.copyToList(dto.getInfos(), AssetAdMaterialSporadicSettlementInfo.class);
+        assetAdMaterialSporadicSettlementInfos.forEach(item -> item.setAdMaterialSporadicSettlementId(assetAdMaterialSporadicSettlement.getId()));
+       return assetAdMaterialSporadicSettlementInfoService.saveBatch(assetAdMaterialSporadicSettlementInfos);
+    }
+
+    @Override
+    public Boolean deleteById(Integer id) {
+        //删除明细
+        assetAdMaterialSporadicSettlementInfoService.removeBySettlementId(id);
+        return removeById(id);
+    }
+
+    @Override
+    public AssetAdMaterialSporadicSettlementDetailVO getDetail(Integer id) {
+        AssetAdMaterialSporadicSettlement assetAdMaterialSporadicSettlement = getById(id);
+        AssetAdMaterialSporadicSettlementDetailVO vo = BeanUtil.copyProperties(assetAdMaterialSporadicSettlement, AssetAdMaterialSporadicSettlementDetailVO.class);
+        vo.setInfos(assetAdMaterialSporadicSettlementInfoService.getBySettlementId(id));
+        return vo;
+    }
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/AssetAdMaterialSporadicSettlementDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/AssetAdMaterialSporadicSettlementDetailVO.java
new file mode 100644
index 0000000..20dfc9d
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/AssetAdMaterialSporadicSettlementDetailVO.java
@@ -0,0 +1,21 @@
+package com.ruoyi.system.vo.asset;
+
+import com.ruoyi.system.model.AssetAdMaterialSporadicSettlementInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.List;
+
+/**
+ * @author mitao
+ * @date 2025/10/23
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("广告物料零星结算详情视图对象")
+public class AssetAdMaterialSporadicSettlementDetailVO extends AssetAdMaterialSporadicSettlementVO {
+    @ApiModelProperty("明细列表")
+    private List<AssetAdMaterialSporadicSettlementInfo> infos;
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/AssetAdMaterialSporadicSettlementVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/AssetAdMaterialSporadicSettlementVO.java
new file mode 100644
index 0000000..9c30ceb
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/AssetAdMaterialSporadicSettlementVO.java
@@ -0,0 +1,37 @@
+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 mitao
+ * @date 2025/10/23
+ */
+@Data
+@ApiModel("广告物料零星结算视图对象")
+public class AssetAdMaterialSporadicSettlementVO {
+    @ApiModelProperty(value = "主键")
+    private Integer id;
+
+    @ApiModelProperty(value = "标题")
+    private String title;
+
+    @ApiModelProperty(value = "结算项目")
+    private String settlementProject;
+
+    @ApiModelProperty(value = "结算单位")
+    private String settlementInstitution;
+
+    @ApiModelProperty("合计金额")
+    private BigDecimal totalAmount;
+
+    @ApiModelProperty(value = "创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime createTime;
+
+}
diff --git a/ruoyi-system/src/main/resources/mapper/system/AssetAdMaterialPriceMapper.xml b/ruoyi-system/src/main/resources/mapper/system/AssetAdMaterialPriceMapper.xml
index 77fd44e..c43434e 100644
--- a/ruoyi-system/src/main/resources/mapper/system/AssetAdMaterialPriceMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/AssetAdMaterialPriceMapper.xml
@@ -24,27 +24,27 @@
     <!-- 分页查询 -->
     <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
+            aamp.id,
+            aamp.material_name,
+            aamp.dept_id,
+            aamp.unit_price,
+            aamp.price_unit,
+            aamp.remarks,
+            aamp.create_time,
+            aamp.create_by,
+            aamp.update_time,
+            aamp.update_by
         FROM asset_ad_material_price aamp LEFT JOIN t_dept td ON aamp.dept_id = td.id
         <where>
-            disabled = 0
+            aamp.disabled = 0
             <if test="query.materialName != null and query.materialName != ''">
-                AND material_name LIKE CONCAT('%', #{query.materialName}, '%')
+                AND aamp.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))
+                AND (td.id = #{query.deptId} OR FIND_IN_SET(#{query.deptId}, td.parent_id))
             </if>
         </where>
-        ORDER BY create_time DESC
+        ORDER BY aamp.create_time DESC
     </select>
 
 </mapper>
diff --git a/ruoyi-system/src/main/resources/mapper/system/AssetAdMaterialSporadicSettlementMapper.xml b/ruoyi-system/src/main/resources/mapper/system/AssetAdMaterialSporadicSettlementMapper.xml
index f962437..bb5f674 100644
--- a/ruoyi-system/src/main/resources/mapper/system/AssetAdMaterialSporadicSettlementMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/AssetAdMaterialSporadicSettlementMapper.xml
@@ -2,4 +2,29 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ruoyi.system.mapper.AssetAdMaterialSporadicSettlementMapper">
 
+    <select id="getPageList" resultType="com.ruoyi.system.vo.asset.AssetAdMaterialSporadicSettlementVO"
+            parameterType="com.ruoyi.system.query.AssetAdMaterialSporadicSettlementQuery">
+        SELECT aamss.id,
+              aamss.dept_id,
+              aamss.title,
+              aamss.settlement_project,
+              aamss.settlement_institution,
+              aamss.total_amount,
+              aamss.create_time,
+              aamss.create_by,
+              aamss.update_time,
+              aamss.update_by,
+              aamss.disabled
+        FROM asset_ad_material_sporadic_settlement aamss LEFT JOIN t_dept td ON aamss.dept_id = td.id
+        <where>
+            aamss.disabled = 0
+            <if test="query.title != null and query.title != ''">
+                AND aamss.title LIKE CONCAT('%', #{query.title}, '%')
+            </if>
+            <if test="query.deptId != null">
+                AND (td.id = #{query.deptId} OR FIND_IN_SET(#{query.deptId}, td.parent_id))
+            </if>
+        </where>
+        ORDER BY aamss.create_time DESC
+    </select>
 </mapper>

--
Gitblit v1.7.1