From c3a11538b96aeac198fbaa467210ef8754773ad1 Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期五, 24 十月 2025 18:14:06 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
ruoyi-system/src/main/resources/mapper/system/AssetAdMaterialSporadicSettlementMapper.xml | 25 +
ruoyi-system/src/main/resources/mapper/system/AssetMainMapper.xml | 18
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetAdController.java | 28 -
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetAdMaterialSporadicSettlementServiceImpl.java | 212 +++++++++++
ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/AssetAdDTO.java | 2
ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/AssetAdMaterialPriceDTO.java | 4
ruoyi-system/src/main/java/com/ruoyi/system/model/AssetAdMaterialSporadicSettlement.java | 7
ruoyi-system/src/main/java/com/ruoyi/system/utils/FastExcelUtil.java | 63 +++
ruoyi-system/src/main/java/com/ruoyi/system/utils/ExcelImportValid.java | 33 +
ruoyi-system/src/main/resources/mapper/system/AssetAdMaterialPriceMapper.xml | 28
ruoyi-system/src/main/java/com/ruoyi/system/model/AssetAdMaterialIntegralSettlement.java | 3
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetHouseInspectionItemController.java | 32 +
ruoyi-system/src/main/java/com/ruoyi/system/service/OssService.java | 3
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetAdMaterialSporadicSettlementController.java | 103 +++++
ruoyi-system/src/main/java/com/ruoyi/system/query/AssetMainPageQuery.java | 3
ruoyi-system/src/main/java/com/ruoyi/system/model/AssetAdMaterialQuotation.java | 3
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetRepairRequestController.java | 31 +
ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/AssetAdMaterialSporadicSettlementVO.java | 37 +
ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/AssetAdMaterialSporadicSettlementInfoDTO.java | 69 +++
ruoyi-system/src/main/java/com/ruoyi/system/annotation/ExcelValid.java | 14
ruoyi-system/src/main/java/com/ruoyi/system/export/AssetAdMaterialSporadicSettlementImport.java | 71 +++
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetAdMaterialSporadicSettlementInfoServiceImpl.java | 16
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/dto/AddAssetRepairRequestDTO.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/AssetAdMaterialPriceController.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 | 43 ++
ruoyi-system/src/main/java/com/ruoyi/system/service/AssetAdMaterialSporadicSettlementService.java | 49 ++
/dev/null | 34 -
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OssServiceImpl.java | 33 +
ruoyi-system/src/main/java/com/ruoyi/system/service/AssetAdMaterialSporadicSettlementInfoService.java | 5
ruoyi-system/src/main/java/com/ruoyi/system/model/AssetAdMaterialSporadicSettlementInfo.java | 11
ruoyi-system/src/main/java/com/ruoyi/system/query/AssetAdMaterialSporadicSettlementQuery.java | 25 +
35 files changed, 965 insertions(+), 125 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 0a860f6..9941ebd 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
@@ -1,7 +1,7 @@
package com.ruoyi.web.controller.api;
-import cn.idev.excel.FastExcel;
+import cn.afterturn.easypoi.excel.ExcelImportUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.domain.R;
@@ -12,9 +12,9 @@
import com.ruoyi.system.query.AssetAdQuery;
import com.ruoyi.system.service.AssetAdRentalRecordService;
import com.ruoyi.system.service.AssetAdService;
+import com.ruoyi.system.utils.FastExcelUtil;
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;
@@ -36,9 +36,7 @@
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>
@@ -90,18 +88,7 @@
@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(), AssetAdDTO.class)
- .sheet("广告无形资产")
- .doWrite(Collections.emptyList());
- } catch (IOException e) {
- log.error("下载导入模板异常", e);
- }
+ FastExcelUtil.exportData(response, "广告无形资产导入模板", "广告无形资产", AssetAdDTO.class, Collections.emptyList());
}
@ApiOperation("导入")
@@ -112,14 +99,15 @@
return R.fail("请选择一个文件上传!");
}
try {
- List<AssetAdDTO> list = FastExcel.read(file.getInputStream(), AssetAdDTO.class, new AssetAdValidatorListener())
- .sheet()
- .doReadSync();
- assetAdService.importAssetAd(list);
+ //List<AssetAdDTO> list = FastExcelUtil.readMultipartFile(file.getInputStream(), AssetAdDTO.class);
+ //assetAdService.importAssetAd(list);
+ ExcelImportUtil.importExcel(file.getInputStream(), AssetAdDTO.class, null);
return R.ok();
} catch (IOException e) {
log.error("文件处理失败", e);
return R.fail("文件处理失败!");
+ } catch (Exception e) {
+ throw new RuntimeException(e);
}
}
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 e5716e8..284bb88 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,6 +1,5 @@
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;
@@ -8,6 +7,7 @@
import com.ruoyi.system.dto.asset.AssetAdMaterialPriceDTO;
import com.ruoyi.system.query.AssetAdMaterialPriceQuery;
import com.ruoyi.system.service.AssetAdMaterialPriceService;
+import com.ruoyi.system.utils.FastExcelUtil;
import com.ruoyi.system.vo.asset.AssetAdMaterialPriceVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -30,7 +30,6 @@
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;
@@ -91,18 +90,7 @@
@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);
- }
+ FastExcelUtil.exportData(response, "广告物料单价导入模板", "广告物料单价", AssetAdMaterialPriceDTO.class, Collections.emptyList());
}
@ApiOperation("导入")
@@ -113,10 +101,7 @@
return R.fail("请选择一个文件上传!");
}
try {
- List<AssetAdMaterialPriceDTO> list = FastExcel.read(file.getInputStream())
- .head(AssetAdMaterialPriceDTO.class)
- .sheet()
- .doReadSync();
+ List<AssetAdMaterialPriceDTO> list = FastExcelUtil.readMultipartFile(file.getInputStream(), AssetAdMaterialPriceDTO.class);
assetAdMaterialPriceService.importAssetAdMaterialPrice(list);
return R.ok();
} catch (IOException e) {
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 ae6035f..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
@@ -1,9 +1,41 @@
package com.ruoyi.web.controller.api;
+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;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import java.io.IOException;
+import java.net.URLEncoder;
/**
* <p>
@@ -13,8 +45,77 @@
* @author mitao
* @since 2025-10-17
*/
+@Slf4j
+@Validated
+@Api(tags = {"广告物料零星结算相关接口"})
@RestController
@RequestMapping("/asset-ad-material-sporadic-settlement")
+@RequiredArgsConstructor(onConstructor_ = {@Lazy})
public class AssetAdMaterialSporadicSettlementController {
+ private final AssetAdMaterialSporadicSettlementService assetAdMaterialSporadicSettlementService;
+
+ @ApiOperation("下载导入模板")
+ @GetMapping("/template")
+ public void downloadTemplate(HttpServletResponse response) {
+ Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), AssetAdMaterialSporadicSettlementImport.class,
+ Lists.newArrayList(new AssetAdMaterialSporadicSettlementImport()));
+ ServletOutputStream outputStream = null;
+ try {
+ String fileName = URLEncoder.encode("广告物料零星结算导入模板.xls", "utf-8");
+ response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
+ response.setHeader("content-Type", "application/vnd.ms-excel");
+ response.setHeader("Pragma", "no-cache");
+ response.setHeader("Cache-Control", "no-cache");
+ outputStream = response.getOutputStream();
+ workbook.write(outputStream);
+ } catch (IOException e) {
+ log.error("房屋巡检导入模板下载失败!", e);
+ } finally {
+ try {
+ outputStream.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ @ApiOperation("导入零星资产结算数据")
+ @PostMapping("/import")
+ 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-admin/src/main/java/com/ruoyi/web/controller/api/AssetHouseInspectionItemController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetHouseInspectionItemController.java
index 2eea89d..35f9633 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetHouseInspectionItemController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetHouseInspectionItemController.java
@@ -6,7 +6,6 @@
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.hutool.json.JSONObject;
-import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.basic.PageInfo;
@@ -19,27 +18,40 @@
import com.ruoyi.common.utils.WebUtils;
import com.ruoyi.framework.web.service.TokenService;
import com.ruoyi.system.dto.AddAssetHouseInspection;
-import com.ruoyi.system.dto.AddAssetRepairRequestDTO;
import com.ruoyi.system.export.AssetHouseInspectionImport;
-import com.ruoyi.system.model.*;
+import com.ruoyi.system.model.AssetHouseInspectionDetail;
+import com.ruoyi.system.model.AssetHouseInspectionItem;
+import com.ruoyi.system.model.AssetHouseInspectionRecord;
+import com.ruoyi.system.model.AssetMain;
+import com.ruoyi.system.model.AssetPropertyExt;
+import com.ruoyi.system.model.AssetType;
import com.ruoyi.system.query.AssetHouseInspectionRecordListQuery;
-import com.ruoyi.system.query.AssetRepairRequestListQuery;
-import com.ruoyi.system.service.*;
+import com.ruoyi.system.service.AssetHouseInspectionDetailService;
+import com.ruoyi.system.service.AssetHouseInspectionItemService;
+import com.ruoyi.system.service.AssetHouseInspectionRecordService;
+import com.ruoyi.system.service.AssetMainService;
+import com.ruoyi.system.service.AssetPropertyExtService;
+import com.ruoyi.system.service.AssetTypeService;
+import com.ruoyi.system.service.ISysUserService;
+import com.ruoyi.system.service.TDeptService;
import com.ruoyi.system.vo.AssetHouseInspectionVO;
-import com.ruoyi.system.vo.AssetRepairRequestVO;
import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation;
-import io.swagger.models.auth.In;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Workbook;
-import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+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.RequestParam;
+import org.springframework.web.bind.annotation.RequestPart;
+import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.ServletOutputStream;
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetRepairRequestController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetRepairRequestController.java
index 1b64135..f352ecf 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetRepairRequestController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetRepairRequestController.java
@@ -6,37 +6,41 @@
import com.ruoyi.common.basic.PageInfo;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.domain.entity.SysUser;
-import com.ruoyi.common.core.domain.entity.TDept;
-import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.framework.web.service.TokenService;
import com.ruoyi.system.dto.AddAssetRepairRequestDTO;
-import com.ruoyi.system.dto.AddContractDTO;
import com.ruoyi.system.model.AssetMain;
import com.ruoyi.system.model.AssetRepairRequest;
import com.ruoyi.system.model.AssetRepairRequestItem;
+import com.ruoyi.system.model.AssetType;
import com.ruoyi.system.query.AssetRepairRequestListQuery;
-import com.ruoyi.system.query.AssetStatisticsListQuery;
-import com.ruoyi.system.service.*;
import com.ruoyi.system.service.AssetMainService;
import com.ruoyi.system.service.AssetRepairRecordService;
+import com.ruoyi.system.service.AssetRepairRequestItemService;
+import com.ruoyi.system.service.AssetRepairRequestService;
+import com.ruoyi.system.service.AssetTypeService;
+import com.ruoyi.system.service.ISysUserService;
+import com.ruoyi.system.service.OaApprovalApplicationAssetItemService;
import com.ruoyi.system.service.TDeptService;
import com.ruoyi.system.vo.AssetRepairListVO;
import com.ruoyi.system.vo.AssetRepairRequestVO;
-import com.ruoyi.system.vo.AssetStatisticsVO;
-import com.ruoyi.system.vo.GrabListVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
-import io.swagger.models.auth.In;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+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.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+import java.util.Objects;
import java.util.stream.Collectors;
/**
@@ -68,6 +72,8 @@
private ISysUserService sysUserService;
@Resource
private AssetMainService assetMainService;
+ @Autowired
+ private AssetTypeService assetTypeService;
@ApiOperation("资产报修分页列表")
@PostMapping("/pageList")
@@ -141,6 +147,11 @@
AddAssetRepairRequestDTO res = new AddAssetRepairRequestDTO();
AssetRepairRequest assetRepairRequest = assetRepairRequestService.getById(id);
BeanUtils.copyProperties(assetRepairRequest, res);
+ //查询类型名称
+ AssetType assetType = assetTypeService.getById(assetRepairRequest.getAssetTypeId());
+ if (Objects.nonNull(assetType)) {
+ res.setAssetTypeName(assetType.getTypeName());
+ }
List<AssetRepairListVO> items = assetRepairRequestItemService.listDetail(id);
res.setListDetail(items);
SysUser sysUser = sysUserService.selectUserById(Long.valueOf(assetRepairRequest.getReporterId()));
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
deleted file mode 100644
index 9aaecc6..0000000
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/listener/AssetAdValidatorListener.java
+++ /dev/null
@@ -1,34 +0,0 @@
-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/src/main/java/com/ruoyi/system/annotation/ExcelValid.java b/ruoyi-system/src/main/java/com/ruoyi/system/annotation/ExcelValid.java
new file mode 100644
index 0000000..b1b88e5
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/annotation/ExcelValid.java
@@ -0,0 +1,14 @@
+package com.ruoyi.system.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+/**
+* <p>Excel导入必填校验注解</p>
+*/
+@Target({ ElementType.FIELD, ElementType.TYPE })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface ExcelValid {
+ String message() default "导入有未填入的字段";
+}
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddAssetRepairRequestDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddAssetRepairRequestDTO.java
index 3c983c0..031d519 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddAssetRepairRequestDTO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddAssetRepairRequestDTO.java
@@ -3,12 +3,10 @@
import com.ruoyi.system.model.AssetRepairRequest;
import com.ruoyi.system.model.AssetRepairRequestItem;
import com.ruoyi.system.vo.AssetRepairListVO;
-import com.ruoyi.system.vo.GrabListVO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
-import java.io.Serializable;
import java.util.List;
@Data
@@ -18,6 +16,8 @@
@ApiModelProperty(value = "报修人")
private String reporterName;
+ @ApiModelProperty(value = "报修资产类型名称")
+ private String assetTypeName;
@ApiModelProperty(value = "新增使用报修资产列表")
private List<AssetRepairRequestItem> list;
@ApiModelProperty(value = "详情使用报修资产列表")
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/AssetAdDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/AssetAdDTO.java
index e3ef974..4d952e6 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/AssetAdDTO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/AssetAdDTO.java
@@ -3,6 +3,7 @@
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import cn.idev.excel.annotation.write.style.ColumnWidth;
+import com.ruoyi.system.annotation.ExcelValid;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -24,6 +25,7 @@
@ApiModelProperty(value = "资产名称")
@ExcelProperty("资产名称")
@ColumnWidth(11)
+ @ExcelValid(message = "名称不能为空")
@NotBlank(message = "资产名称")
private String assetName;
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
index d707a51..6b6c811 100644
--- 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
@@ -3,6 +3,7 @@
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import cn.idev.excel.annotation.write.style.ColumnWidth;
+import com.ruoyi.system.annotation.ExcelValid;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -29,6 +30,7 @@
@ApiModelProperty(value = "物料名称")
@ExcelProperty("物料名称")
@ColumnWidth(15)
+ @ExcelValid(message = "名称不能为空")
@NotBlank(message = "物料名称不能为空")
private String materialName;
@@ -36,12 +38,14 @@
@ExcelProperty("单价")
@ColumnWidth(10)
@NotNull(message = "单价不能为空")
+ @ExcelValid(message = "单价不能为空")
@DecimalMin(value = "0.01", message = "单价必须大于0")
private BigDecimal unitPrice;
@ApiModelProperty(value = "单位(元、平方米等)")
@ExcelProperty("单位")
@ColumnWidth(8)
+ @ExcelValid(message = "单位不能为空")
@NotBlank(message = "单位不能为空")
private String priceUnit;
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
new file mode 100644
index 0000000..87cbca0
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/AssetAdMaterialSporadicSettlementDTO.java
@@ -0,0 +1,43 @@
+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.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * @author mitao
+ * @date 2025/10/22
+ */
+@Data
+@ApiModel("广告物料零星结算表数据传输对象")
+public class AssetAdMaterialSporadicSettlementDTO {
+
+ @ApiModelProperty(value = "主键")
+ private Integer id;
+
+ @ApiModelProperty(value = "标题")
+ @NotBlank(message = "标题不能为空")
+ private String title;
+
+ @ApiModelProperty(value = "结算项目")
+ @NotBlank(message = "结算项目不能为空")
+ private String settlementProject;
+
+ @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
new file mode 100644
index 0000000..351a8b2
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/export/AssetAdMaterialSporadicSettlementImport.java
@@ -0,0 +1,71 @@
+package com.ruoyi.system.export;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+
+/**
+ * <p>
+ * 广告物料零星结算表关联表
+ * </p>
+ *
+ * @author mitao
+ * @since 2025-10-17
+ */
+@Data
+@ApiModel(value="AssetAdMaterialSporadicSettlementInfo对象", description="广告物料零星结算表关联表")
+public class AssetAdMaterialSporadicSettlementImport {
+
+ @Excel(name = "日期", width = 20)
+ private LocalDate settlementDate;
+
+ @Excel(name = "安装地点", width = 20)
+ private String address;
+
+ @Excel(name = "名称", width = 20)
+ private String adName;
+
+ @Excel(name = "材质工艺", width = 20)
+ private String material;
+
+ /**
+ * 设计图例oss地址
+ */
+ private String designLegend;
+
+ @Excel(name = "设计图例",type = 2, width = 20)
+ private String designLegendTemp;
+
+ /**
+ * 安装图例oss地址
+ */
+ private String installationLegend;
+
+ @Excel(name = "安装图例",type = 2, width = 20)
+ private String installationLegendTemp;
+
+ @Excel(name = "长(米)", width = 20)
+ private Double length;
+
+ @Excel(name = "高(米)", width = 20)
+ private Double height;
+
+ @Excel(name = "数量", width = 20)
+ private Integer quantity;
+
+ @Excel(name = "小计", width = 20)
+ private String subtotal;
+
+ @Excel(name = "单价(元)", width = 20)
+ private BigDecimal unitPrice;
+
+ @Excel(name = "金额(元)", width = 20)
+ 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/AssetAdMaterialIntegralSettlement.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/AssetAdMaterialIntegralSettlement.java
index 7fe32ff..c542705 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/model/AssetAdMaterialIntegralSettlement.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/AssetAdMaterialIntegralSettlement.java
@@ -35,6 +35,9 @@
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
+ @ApiModelProperty(value = "所属部门ID")
+ private Integer deptId;
+
@ApiModelProperty(value = "标题")
private String title;
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/AssetAdMaterialQuotation.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/AssetAdMaterialQuotation.java
index 196e85d..0847f74 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/model/AssetAdMaterialQuotation.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/AssetAdMaterialQuotation.java
@@ -34,6 +34,9 @@
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
+ @ApiModelProperty(value = "所属部门ID")
+ private Integer deptId;
+
@ApiModelProperty(value = "标题")
private String title;
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 c3829ab..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;
/**
@@ -34,6 +35,9 @@
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
+ @ApiModelProperty(value = "所属部门ID")
+ private Integer deptId;
+
@ApiModelProperty(value = "标题")
private String title;
@@ -43,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/query/AssetMainPageQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/AssetMainPageQuery.java
index ada367e..0d8a410 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/query/AssetMainPageQuery.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/AssetMainPageQuery.java
@@ -27,6 +27,9 @@
@ApiModelProperty("关键字(资产名称/资产编码)")
private String keyword;
+ @ApiModelProperty("使用部门")
+ private String useDeptOrLocation;
+
@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 8008405..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,7 +1,14 @@
package com.ruoyi.system.service;
-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;
/**
* <p>
@@ -12,5 +19,45 @@
* @since 2025-10-17
*/
public interface AssetAdMaterialSporadicSettlementService extends IService<AssetAdMaterialSporadicSettlement> {
+ /**
+ * 导入
+ * @param file
+ * @param dto
+ */
+ void importData(MultipartFile file, AssetAdMaterialSporadicSettlementImportDTO 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/OssService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/OssService.java
index 2b6d049..df07888 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/OssService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/OssService.java
@@ -3,6 +3,7 @@
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
+import java.io.InputStream;
/**
* @author mitao
@@ -25,4 +26,6 @@
* @return
*/
String upload(String storagePath, MultipartFile file) throws IOException;
+
+ String uploadByInputStream(InputStream inputStream);
}
\ No newline at end of file
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 5936b4a..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
@@ -1,10 +1,43 @@
package com.ruoyi.system.service.impl;
-import com.ruoyi.system.model.AssetAdMaterialSporadicSettlement;
-import com.ruoyi.system.mapper.AssetAdMaterialSporadicSettlementMapper;
-import com.ruoyi.system.service.AssetAdMaterialSporadicSettlementService;
+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;
+import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+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;
/**
* <p>
@@ -15,6 +48,179 @@
* @since 2025-10-17
*/
@Service
+@RequiredArgsConstructor(onConstructor_ = {@Lazy})
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, AssetAdMaterialSporadicSettlementImportDTO dto) {
+ try {
+ ImportParams importParams = new ImportParams();
+ importParams.setTitleRows(0);
+ importParams.setHeadRows(1);
+ @Cleanup
+ InputStream inputStream = file.getInputStream();
+ List<AssetAdMaterialSporadicSettlementImport> list = ExcelImportUtil.importExcel(inputStream, AssetAdMaterialSporadicSettlementImport.class, importParams);
+ validateFields(list);
+ 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);
+ //保存明细
+ List<AssetAdMaterialSporadicSettlementInfo> assetAdMaterialSporadicSettlementInfos = BeanUtil.copyToList(list, AssetAdMaterialSporadicSettlementInfo.class);
+ assetAdMaterialSporadicSettlementInfos.forEach(item -> item.setAdMaterialSporadicSettlementId(assetAdMaterialSporadicSettlement.getId()));
+ assetAdMaterialSporadicSettlementInfoService.saveBatch(assetAdMaterialSporadicSettlementInfos);
+ } 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) {
+ Optional<AssetAdMaterialSporadicSettlementImport> any = list.stream()
+ .filter(item -> StringUtils.isBlank(item.getAdName())).findAny();
+ if (any.isPresent()) {
+ throw new ServiceException("【名称】不能为空,请检查该列是否填写完整");
+ }
+ Optional<AssetAdMaterialSporadicSettlementImport> quantityOpt = list.stream()
+ .filter(item -> Objects.isNull(item.getQuantity())).findAny();
+ if (quantityOpt.isPresent()) {
+ throw new ServiceException("【数量】不能为空,请检查该列是否填写完整");
+ }
+ Optional<AssetAdMaterialSporadicSettlementImport> priceOpt = list.stream()
+ .filter(item -> Objects.isNull(item.getUnitPrice())).findAny();
+ if (priceOpt.isPresent()) {
+ throw new ServiceException("【单价】不能为空,请检查该列是否填写完整");
+ }
+ }
+ /**
+ * 文件转存
+ * @param list
+ */
+ private void uploadToOss(List<AssetAdMaterialSporadicSettlementImport> list) {
+ //遍历每一条数据
+ for (AssetAdMaterialSporadicSettlementImport settlementImport : list) {
+ if (StringUtils.isNotEmpty(settlementImport.getDesignLegendTemp())) {
+ String ossUrl = getOssUrl(settlementImport.getDesignLegendTemp());
+ settlementImport.setDesignLegend(ossUrl);
+ }
+ if (StringUtils.isNotEmpty(settlementImport.getInstallationLegendTemp())) {
+ String ossUrl = getOssUrl(settlementImport.getInstallationLegendTemp());
+ settlementImport.setInstallationLegend(ossUrl);
+ }
+ }
+ //删除图片缓存
+ for (AssetAdMaterialSporadicSettlementImport settlementImport : list) {
+ if (StringUtils.isNotEmpty(settlementImport.getDesignLegendTemp())) {
+ deleteImageCache(settlementImport.getDesignLegendTemp());
+ }
+ if (StringUtils.isNotEmpty(settlementImport.getInstallationLegendTemp())) {
+ deleteImageCache(settlementImport.getInstallationLegendTemp());
+ }
+ }
+ }
+
+ private String getOssUrl(String filePath) {
+ try {
+ //获取到暂存的文件
+ File tmpFile = new File(filePath);
+ FileInputStream fileInputStream = new FileInputStream(tmpFile);
+ //转换为 multipartFile 类
+ return ossService.uploadByInputStream(fileInputStream);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+ private void deleteImageCache(String filePath) {
+ //获取到暂存的文件
+ File tmpFile = new File(filePath);
+ if (tmpFile.exists() && tmpFile.isFile()) {
+ 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/service/impl/OssServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OssServiceImpl.java
index 3bb8466..0ca8128 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OssServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OssServiceImpl.java
@@ -93,7 +93,38 @@
ossClient.shutdown();
}
}
-
+
+ @Override
+ public String uploadByInputStream(InputStream inputStream) {
+ OSS ossClient = null;
+ try {
+ CredentialsProvider credentialsProvider = new DefaultCredentialProvider(OssConfig.ACCESS_KEY_ID, OssConfig.ACCESS_KEY_SECRET);
+ String region = "cn-chengdu";
+ // 创建OSSClient实例。
+ ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
+ clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
+ ossClient = OSSClientBuilder.create()
+ .endpoint(OssConfig.UPLOAD_ENDPOINT)
+ .credentialsProvider(credentialsProvider)
+ .clientConfiguration(clientBuilderConfiguration)
+ .region(region)
+ .build();
+
+ String fileExt = "png";
+ String fileName = UUID.randomUUID().toString();
+ // 设置文件名
+ String filePathName = generateRelativeStoragePath(OssConfig.FOLDER, fileExt, fileName);
+ // 创建PutObjectRequest对象。
+ PutObjectRequest putObjectRequest = new PutObjectRequest(OssConfig.BUCKET_NAME, filePathName, inputStream);
+ // 创建PutObject请求。
+ PutObjectResult result = ossClient.putObject(putObjectRequest);
+
+ return OssConfig.DOWNLOAD_ENDPOINT + filePathName;
+ } finally {
+ ossClient.shutdown();
+ }
+ }
+
/**
* <pre>
* 获取存储的相对路径
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/utils/ExcelImportValid.java b/ruoyi-system/src/main/java/com/ruoyi/system/utils/ExcelImportValid.java
new file mode 100644
index 0000000..9a1a4bc
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/utils/ExcelImportValid.java
@@ -0,0 +1,33 @@
+package com.ruoyi.system.utils;
+
+import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.system.annotation.ExcelValid;
+
+import java.lang.reflect.Field;
+import java.util.Objects;
+public class ExcelImportValid {
+ /**
+ * Excel导入字段非空校验
+ *
+ * @param object 校验的JavaBean 其属性须有自定义注解
+ */
+ public static void valid(Object object) throws Exception {
+ Field[] fields = object.getClass().getDeclaredFields();
+ for (Field field : fields) {
+ // 设置可访问
+ field.setAccessible(true);
+ // 属性的值
+ Object fieldValue = null;
+ try {
+ fieldValue = field.get(object);
+ } catch (IllegalAccessException e) {
+ throw new ServiceException("导入参数检查失败!");
+ }
+ // 是否包含必填校验注解
+ boolean isRequiredValid = field.isAnnotationPresent(ExcelValid.class);
+ if (isRequiredValid && Objects.isNull(fieldValue)) {
+ throw new ServiceException(field.getAnnotation(ExcelValid.class).message());
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/utils/FastExcelUtil.java b/ruoyi-system/src/main/java/com/ruoyi/system/utils/FastExcelUtil.java
new file mode 100644
index 0000000..52a8f23
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/utils/FastExcelUtil.java
@@ -0,0 +1,63 @@
+package com.ruoyi.system.utils;
+
+import cn.idev.excel.FastExcel;
+import cn.idev.excel.context.AnalysisContext;
+import cn.idev.excel.event.AnalysisEventListener;
+import com.ruoyi.common.exception.ServiceException;
+import lombok.extern.slf4j.Slf4j;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URLEncoder;
+import java.util.List;
+
+/**
+ * @author mitao
+ * @date 2025/10/22
+ */
+@Slf4j
+public class FastExcelUtil {
+ public static <T> void exportData(HttpServletResponse response, String fileName, String sheetName, Class<T> clazz, List<T> data) {
+ response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+ response.setCharacterEncoding("utf-8");
+ try {
+ fileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");
+ response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
+ FastExcel.write(response.getOutputStream(), clazz)
+ .sheet(sheetName)
+ .doWrite(data);
+ } catch (IOException e) {
+ log.error("导出数据异常", e);
+ throw new ServiceException("导出数据异常");
+ }
+ }
+ /**
+ * 读取文件数据,并返回一个包含指定类型数据的列表。
+ *
+ * @param inputStream 文件对象输入流
+ * @param clazz 数据对象的类型
+ * @param <T> 泛型类型,表示数据对象的类型
+ * @return 包含解析后数据对象的列表
+ */
+ public static <T> List<T> readMultipartFile(InputStream inputStream, Class<T> clazz) {
+ return FastExcel.read(inputStream, clazz, new AnalysisEventListener<T>() {
+ @Override
+ public void invoke(Object o, AnalysisContext analysisContext) {
+ Integer rowIndex = analysisContext.readRowHolder().getRowIndex();
+ rowIndex += 1; // 行号从0开始,需要加1
+ try {
+ // 调用字段校验方法
+ ExcelImportValid.valid(o);
+ } catch (Exception e) {
+ throw new ServiceException(String.format("第%d行:%s", rowIndex, e.getMessage()));
+ }
+ }
+
+ @Override
+ public void doAfterAllAnalysed(AnalysisContext analysisContext) {
+
+ }
+ }).sheet().doReadSync(); // 读取 Excel 文件中的第一个工作表
+ }
+}
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>
diff --git a/ruoyi-system/src/main/resources/mapper/system/AssetMainMapper.xml b/ruoyi-system/src/main/resources/mapper/system/AssetMainMapper.xml
index 5b99324..65c5362 100644
--- a/ruoyi-system/src/main/resources/mapper/system/AssetMainMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/AssetMainMapper.xml
@@ -47,7 +47,8 @@
<!-- 分页查询:审批通过的资产列表(关联审批记录、资产类型与部门) -->
<select id="selectApprovedAssetPage" resultType="com.ruoyi.system.vo.asset.AssetMainPageVO">
SELECT
- am.id AS id,
+ DISTINCT
+ am.id,
am.asset_code AS assetCode,
am.asset_name AS assetName,
at.type_name AS assetTypeName,
@@ -80,7 +81,7 @@
AND IFNULL(am.is_borrowed, 0) = 0
AND ( oaa.id IS NULL OR oaa.approval_status != 0 )
<if test="query != null and query.assetTypeId != null">
- AND am.asset_type_id = #{query.assetTypeId}
+ AND (am.asset_type_id = #{query.assetTypeId} OR FIND_IN_SET(#{query.assetTypeId},at.parent_id))
</if>
<if test="query != null and query.ownershipDeptId != null">
AND am.ownership_dept_id = #{query.ownershipDeptId}
@@ -95,11 +96,17 @@
<if test="query.deptId != null">
AND (od.id = #{query.deptId} OR FIND_IN_SET(#{query.deptId}, od.parent_id))
</if>
+ <if test="query.useDeptOrLocation!=null and query.useDeptOrLocation!=''">
+ AND ((ud.dept_name LIKE CONCAT('%',#{query.useDeptOrLocation}, '%') AND am.address_type = 0)
+ OR (am.warehouse_name LIKE CONCAT('%',#{query.useDeptOrLocation}, '%') AND am.address_type = 1)
+ OR (am.address LIKE CONCAT('%',#{query.useDeptOrLocation}, '%') AND am.address_type = 2))
+ </if>
</where>
ORDER BY COALESCE(oas.storage_time, DATE(am.create_time)) DESC, am.id DESC
</select>
<select id="getAssetPageList" resultType="com.ruoyi.system.vo.asset.AssetMainPageVO">
SELECT
+ DISTINCT
am.*,
at.type_name AS assetTypeName,
od.dept_name AS ownershipDeptName,
@@ -127,7 +134,7 @@
AND IFNULL(aaa.disabled, 0) = 0
AND aaa.approval_status = 2 AND aaa.approval_id = '${@com.ruoyi.system.emums.ApprovalTypeEnum@IN_STOCK.getCode()}'
<if test="query != null and query.assetTypeId != null">
- AND am.asset_type_id = #{query.assetTypeId}
+ AND (am.asset_type_id = #{query.assetTypeId} OR FIND_IN_SET(#{query.assetTypeId},at.parent_id))
</if>
<if test="query != null and query.ownershipDeptId != null">
AND am.ownership_dept_id = #{query.ownershipDeptId}
@@ -142,6 +149,11 @@
<if test="query.deptId != null">
AND (od.id = #{query.deptId} OR FIND_IN_SET(#{query.deptId}, od.parent_id))
</if>
+ <if test="query.useDeptOrLocation!=null and query.useDeptOrLocation!=''">
+ AND ((ud.dept_name LIKE CONCAT('%',#{query.useDeptOrLocation}, '%') AND am.address_type = 0)
+ OR (am.warehouse_name LIKE CONCAT('%',#{query.useDeptOrLocation}, '%') AND am.address_type = 1)
+ OR (am.address LIKE CONCAT('%',#{query.useDeptOrLocation}, '%') AND am.address_type = 2))
+ </if>
</where>
ORDER BY COALESCE(oas.storage_time, DATE(am.create_time)) DESC, am.id DESC
</select>
--
Gitblit v1.7.1