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>