9c76b7efccd70395231b032a193a89f7638b657e..42131eb034e559dc361fe75d653e4d904aa6a316
7 小时以前 mitao
保修详情增加资产类型名称字段
42131e 对比 | 目录
8 小时以前 mitao
广告物料零星结算接口
5b13db 对比 | 目录
15个文件已修改
5个文件已添加
516 ■■■■■ 已修改文件
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetAdMaterialQuotationController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetAdMaterialSporadicSettlementController.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetRepairRequestController.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/dto/AddAssetRepairRequestDTO.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/AssetAdMaterialSporadicSettlementDTO.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/AssetAdMaterialSporadicSettlementImportDTO.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/AssetAdMaterialSporadicSettlementInfoDTO.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/export/AssetAdMaterialSporadicSettlementImport.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/mapper/AssetAdMaterialSporadicSettlementMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/model/AssetAdMaterialSporadicSettlement.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/model/AssetAdMaterialSporadicSettlementInfo.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/query/AssetAdMaterialSporadicSettlementQuery.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/AssetAdMaterialSporadicSettlementInfoService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/AssetAdMaterialSporadicSettlementService.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetAdMaterialSporadicSettlementInfoServiceImpl.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetAdMaterialSporadicSettlementServiceImpl.java 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/AssetAdMaterialSporadicSettlementDetailVO.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/AssetAdMaterialSporadicSettlementVO.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/AssetAdMaterialPriceMapper.xml 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/AssetAdMaterialSporadicSettlementMapper.xml 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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 {
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));
    }
}
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()));
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 = "详情使用报修资产列表")
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;
}
ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/AssetAdMaterialSporadicSettlementImportDTO.java
New file
@@ -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;
}
ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/AssetAdMaterialSporadicSettlementInfoDTO.java
New file
@@ -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;
}
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;
}
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);
}
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;
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;
ruoyi-system/src/main/java/com/ruoyi/system/query/AssetAdMaterialSporadicSettlementQuery.java
New file
@@ -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;
}
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);
}
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);
}
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();
    }
}
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;
    }
}
ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/AssetAdMaterialSporadicSettlementDetailVO.java
New file
@@ -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;
}
ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/AssetAdMaterialSporadicSettlementVO.java
New file
@@ -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;
}
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>
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>