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