diff --git a/ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/RemoteFileService.java b/ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/RemoteFileService.java index ec60969..298ef79 100644 --- a/ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/RemoteFileService.java +++ b/ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/RemoteFileService.java @@ -39,4 +39,10 @@ public interface RemoteFileService { void deleteFile(Collection urls); + + /** + * 通过ossId列表删除 + * @param ossIds + */ + void deleteFileByIds(Collection ossIds); } diff --git a/ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/RemoteFileServiceMock.java b/ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/RemoteFileServiceMock.java index ca76112..4d41275 100644 --- a/ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/RemoteFileServiceMock.java +++ b/ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/RemoteFileServiceMock.java @@ -56,4 +56,9 @@ public class RemoteFileServiceMock implements RemoteFileService { log.warn("服务调用异常 -> 降级处理"); } + @Override + public void deleteFileByIds(Collection ossIds) { + log.warn("服务调用异常 -> 降级处理"); + } + } diff --git a/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/dubbo/RemoteFileServiceImpl.java b/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/dubbo/RemoteFileServiceImpl.java index 4072a27..5355c44 100644 --- a/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/dubbo/RemoteFileServiceImpl.java +++ b/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/dubbo/RemoteFileServiceImpl.java @@ -96,4 +96,13 @@ public class RemoteFileServiceImpl implements RemoteFileService { storage.delete(url); } } + + /** + * 通过ossId列表删除 + * @param ossIds + */ + @Override + public void deleteFileByIds(Collection ossIds) { + sysOssService.deleteWithValidByIds(ossIds,false); + } } diff --git a/ruoyi-modules/xny-ops/pom.xml b/ruoyi-modules/xny-ops/pom.xml index 74ecadd..6d19103 100644 --- a/ruoyi-modules/xny-ops/pom.xml +++ b/ruoyi-modules/xny-ops/pom.xml @@ -92,6 +92,11 @@ org.dromara ruoyi-common-encrypt + + + + + diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/controller/OpsBeipinBeijianController.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/controller/OpsBeipinBeijianController.java index 8c6a3b9..01bafaa 100644 --- a/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/controller/OpsBeipinBeijianController.java +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/controller/OpsBeipinBeijianController.java @@ -6,6 +6,8 @@ import lombok.RequiredArgsConstructor; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; +import org.dromara.personnel.domain.dto.OpsBeipinBeijianDto; +import org.dromara.personnel.domain.vo.OpsBeipinBeijianCountVo; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import org.dromara.common.idempotent.annotation.RepeatSubmit; @@ -42,8 +44,17 @@ public class OpsBeipinBeijianController extends BaseController { */ @SaCheckPermission("personnel:beipinBeijian:list") @GetMapping("/list") - public TableDataInfo list(OpsBeipinBeijianBo bo, PageQuery pageQuery) { - return opsBeipinBeijianService.queryPageList(bo, pageQuery); + public TableDataInfo list(OpsBeipinBeijianBo bo, PageQuery pageQuery) { + return opsBeipinBeijianService.getList(bo, pageQuery); + } + + /** + * 查询运维-物资-备品配件列表 + */ + @SaCheckPermission("personnel:beipinBeijian:list") + @GetMapping("/getCount") + public R getCount(OpsBeipinBeijianBo bo) { + return R.ok(opsBeipinBeijianService.getCount(bo)); } /** diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/domain/OpsCaigouPlanChanpin.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/domain/OpsCaigouPlanChanpin.java index 9dd0f4e..ea28048 100644 --- a/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/domain/OpsCaigouPlanChanpin.java +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/domain/OpsCaigouPlanChanpin.java @@ -29,6 +29,11 @@ public class OpsCaigouPlanChanpin extends BaseEntity { @TableId(value = "id") private Long id; + /** + * 项目id + */ + private Long projectId; + /** * 采购申请计划id */ @@ -39,6 +44,11 @@ public class OpsCaigouPlanChanpin extends BaseEntity { */ private String shebeiType; + /** + * 产品编号 + */ + private String chanpinBianhao; + /** * 产品名称 */ diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/domain/bo/OpsCaigouPlanChanpinBo.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/domain/bo/OpsCaigouPlanChanpinBo.java index f592323..cd1aefe 100644 --- a/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/domain/bo/OpsCaigouPlanChanpinBo.java +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/domain/bo/OpsCaigouPlanChanpinBo.java @@ -28,6 +28,11 @@ public class OpsCaigouPlanChanpinBo extends BaseEntity { */ private Long id; + /** + * 项目id + */ + private Long projectId; + /** * 采购申请计划id */ @@ -38,6 +43,10 @@ public class OpsCaigouPlanChanpinBo extends BaseEntity { * 设备类型 */ private String shebeiType; + /** + * 产品编号 + */ + private String chanpinBianhao; /** * 产品名称 diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/domain/bo/OpsChurukudanBo.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/domain/bo/OpsChurukudanBo.java index fdb836c..1d80e51 100644 --- a/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/domain/bo/OpsChurukudanBo.java +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/domain/bo/OpsChurukudanBo.java @@ -36,7 +36,7 @@ public class OpsChurukudanBo extends BaseEntity { /** * 产品id */ - @NotBlank(message = "产品不能为空", groups = { AddGroup.class, EditGroup.class }) + @NotNull(message = "产品不能为空", groups = { AddGroup.class, EditGroup.class }) private Long chanpinId; /** diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/domain/dto/OpsBeipinBeijianDto.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/domain/dto/OpsBeipinBeijianDto.java new file mode 100644 index 0000000..5c07a06 --- /dev/null +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/domain/dto/OpsBeipinBeijianDto.java @@ -0,0 +1,76 @@ +package org.dromara.personnel.domain.dto; + +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import org.dromara.personnel.domain.OpsBeipinBeijian; + +import java.io.Serial; +import java.io.Serializable; + + +/** + * 运维-物资-备品配件视图对象 ops_beipin_beijian + * + * @author LionLi + * @date 2025-09-24 + */ +@Data +public class OpsBeipinBeijianDto implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + private Long id; + + /** + * 项目id + */ + private Long projectId; + + /** + * 备件编号 + */ + private String beijianNumber; + + /** + * 备件名称 + */ + private String beijianName; + + /** + * 设备类型 + */ + private String shebeiType; + + /** + * 规格型号 + */ + private String guigexinghao; + + /** + * 库存状态(待定) + */ + private String kucunStatus; + + /** + * 入库数量 + */ + private Long ruKuCount; + /** + * 出库数量 + */ + private Long chuKuCount; + + /** + * 库存数量 + */ + private Long kucunCount; + +} diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/domain/vo/OpsBeipinBeijianCountVo.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/domain/vo/OpsBeipinBeijianCountVo.java new file mode 100644 index 0000000..8fd1dab --- /dev/null +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/domain/vo/OpsBeipinBeijianCountVo.java @@ -0,0 +1,44 @@ +package org.dromara.personnel.domain.vo; + +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import org.dromara.personnel.domain.OpsBeipinBeijian; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Map; + + +/** + * 运维-物资-备品配件视图对象 ops_beipin_beijian + * + * @author LionLi + * @date 2025-09-24 + */ +@Data +public class OpsBeipinBeijianCountVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + + /** + * 总数量 + */ + private Long zonCount; + /** + * 低库存数量 + */ + private Long diCount; + + /** + * 设备类型数量 + */ + private Map typeCount; + + +} diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/domain/vo/OpsBeipinBeijianVo.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/domain/vo/OpsBeipinBeijianVo.java index f30e68b..dc6a3c6 100644 --- a/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/domain/vo/OpsBeipinBeijianVo.java +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/domain/vo/OpsBeipinBeijianVo.java @@ -71,6 +71,15 @@ public class OpsBeipinBeijianVo implements Serializable { @ExcelDictFormat(readConverterExp = "待=定") private String kucunStatus; + /** + * 入库数量 + */ + private Long ruKuCount; + /** + * 出库数量 + */ + private Long chuKuCount; + /** * 库存数量 */ diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/domain/vo/OpsCaigouPlanChanpinVo.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/domain/vo/OpsCaigouPlanChanpinVo.java index 3e963a1..d6da3bf 100644 --- a/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/domain/vo/OpsCaigouPlanChanpinVo.java +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/domain/vo/OpsCaigouPlanChanpinVo.java @@ -35,6 +35,12 @@ public class OpsCaigouPlanChanpinVo implements Serializable { @ExcelProperty(value = "id") private Long id; + /** + * 项目id + */ + @ExcelProperty(value = "项目id") + private Long projectId; + /** * 采购申请计划id */ @@ -47,6 +53,11 @@ public class OpsCaigouPlanChanpinVo implements Serializable { @ExcelProperty(value = "设备类型") private String shebeiType; + /** + * 产品编号 + */ + private String chanpinBianhao; + /** * 产品名称 */ diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/domain/vo/OpsCaigouPlanVo.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/domain/vo/OpsCaigouPlanVo.java index 7a75ad7..99a322e 100644 --- a/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/domain/vo/OpsCaigouPlanVo.java +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/domain/vo/OpsCaigouPlanVo.java @@ -105,6 +105,7 @@ public class OpsCaigouPlanVo implements Serializable { */ @ExcelProperty(value = "供应商id") private Long gonyingshangId; + private String gonyingshangName; /** * 出货时间 diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/mapper/OpsCaigouPlanChanpinMapper.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/mapper/OpsCaigouPlanChanpinMapper.java index 9226fa8..8c46e9d 100644 --- a/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/mapper/OpsCaigouPlanChanpinMapper.java +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/mapper/OpsCaigouPlanChanpinMapper.java @@ -1,9 +1,17 @@ package org.dromara.personnel.mapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Param; import org.dromara.personnel.domain.OpsCaigouPlanChanpin; +import org.dromara.personnel.domain.bo.OpsBeipinBeijianBo; +import org.dromara.personnel.domain.dto.OpsBeipinBeijianDto; +import org.dromara.personnel.domain.vo.OpsBeipinBeijianVo; import org.dromara.personnel.domain.vo.OpsCaigouPlanChanpinVo; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; +import java.util.List; + /** * 运维-物资-采购申请计划-产品信息Mapper接口 * @@ -12,4 +20,7 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; */ public interface OpsCaigouPlanChanpinMapper extends BaseMapperPlus { + Page getBeiJianList(IPage build, @Param("bo") OpsBeipinBeijianBo bo); + + List getCount(@Param("projectId") Long projectId); } diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/service/IOpsBeipinBeijianService.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/service/IOpsBeipinBeijianService.java index 4df2eb4..e36b6fc 100644 --- a/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/service/IOpsBeipinBeijianService.java +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/service/IOpsBeipinBeijianService.java @@ -2,6 +2,8 @@ package org.dromara.personnel.service; import com.baomidou.mybatisplus.extension.service.IService; import org.dromara.personnel.domain.OpsBeipinBeijian; +import org.dromara.personnel.domain.dto.OpsBeipinBeijianDto; +import org.dromara.personnel.domain.vo.OpsBeipinBeijianCountVo; import org.dromara.personnel.domain.vo.OpsBeipinBeijianVo; import org.dromara.personnel.domain.bo.OpsBeipinBeijianBo; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -67,4 +69,8 @@ public interface IOpsBeipinBeijianService extends IService { * @return 是否删除成功 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + TableDataInfo getList(OpsBeipinBeijianBo bo, PageQuery pageQuery); + + OpsBeipinBeijianCountVo getCount(OpsBeipinBeijianBo bo); } diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/service/IOpsCaigouPlanChanpinService.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/service/IOpsCaigouPlanChanpinService.java index 45e3d34..6ca96ab 100644 --- a/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/service/IOpsCaigouPlanChanpinService.java +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/service/IOpsCaigouPlanChanpinService.java @@ -1,7 +1,13 @@ package org.dromara.personnel.service; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import org.apache.ibatis.annotations.Param; import org.dromara.personnel.domain.OpsCaigouPlanChanpin; +import org.dromara.personnel.domain.bo.OpsBeipinBeijianBo; +import org.dromara.personnel.domain.dto.OpsBeipinBeijianDto; +import org.dromara.personnel.domain.vo.OpsBeipinBeijianVo; import org.dromara.personnel.domain.vo.OpsCaigouPlanChanpinVo; import org.dromara.personnel.domain.bo.OpsCaigouPlanChanpinBo; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -75,4 +81,8 @@ public interface IOpsCaigouPlanChanpinService extends IService getVoByCaiGouPlanId(Long caigouId); + + Page getBeiJianList(IPage build, OpsBeipinBeijianBo bo); + + List getCount(OpsBeipinBeijianBo bo); } diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/service/impl/OpsBeipinBeijianServiceImpl.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/service/impl/OpsBeipinBeijianServiceImpl.java index e366bf7..5f7d803 100644 --- a/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/service/impl/OpsBeipinBeijianServiceImpl.java +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/service/impl/OpsBeipinBeijianServiceImpl.java @@ -10,6 +10,10 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.dromara.personnel.domain.dto.OpsBeipinBeijianDto; +import org.dromara.personnel.domain.vo.OpsBeipinBeijianCountVo; +import org.dromara.personnel.service.IOpsCaigouPlanChanpinService; +import org.dromara.personnel.service.IOpsCaigouPlanService; import org.springframework.stereotype.Service; import org.dromara.personnel.domain.bo.OpsBeipinBeijianBo; import org.dromara.personnel.domain.vo.OpsBeipinBeijianVo; @@ -17,6 +21,7 @@ import org.dromara.personnel.domain.OpsBeipinBeijian; import org.dromara.personnel.mapper.OpsBeipinBeijianMapper; import org.dromara.personnel.service.IOpsBeipinBeijianService; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Collection; @@ -34,6 +39,8 @@ public class OpsBeipinBeijianServiceImpl extends ServiceImpl 0; } + + @Override + public TableDataInfo getList(OpsBeipinBeijianBo bo, PageQuery pageQuery) { + Page result = caigouPlanChanpinService.getBeiJianList(pageQuery.build(),bo); + result.getRecords().forEach(item -> { + item.setKucunCount(item.getRuKuCount()-item.getChuKuCount()); + if (item.getKucunCount() == 0){ + item.setKucunStatus("2"); + } + if (item.getRuKuCount() > 0 && item.getRuKuCount() / 2 > item.getKucunCount()){ + item.setKucunStatus("1"); + } + if (item.getRuKuCount() > 0 && item.getRuKuCount() / 2 < item.getKucunCount()){ + item.setKucunStatus("0"); + } + }); + return TableDataInfo.build(result); + } + + @Override + public OpsBeipinBeijianCountVo getCount(OpsBeipinBeijianBo bo) { + List records = caigouPlanChanpinService.getCount(bo); + OpsBeipinBeijianCountVo vo = new OpsBeipinBeijianCountVo(); + long zonCount = 0L; + long diCount = 0L; + Map map = new HashMap<>(); + for (OpsBeipinBeijianDto item : records) { + long kucunCount = item.getRuKuCount() - item.getChuKuCount(); + zonCount += kucunCount; + if (kucunCount == 0 || (item.getRuKuCount() > 0 && item.getRuKuCount() / 2 > item.getKucunCount())){ + diCount++; + } + if (!map.containsKey(item.getShebeiType())) { + map.put(item.getShebeiType(), kucunCount); + }else { + map.put(item.getShebeiType(), map.get(item.getShebeiType()) + kucunCount); + } + } + vo.setZonCount(zonCount); + vo.setDiCount(diCount); + vo.setTypeCount(map); + return vo; + } } diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/service/impl/OpsCaigouPlanChanpinServiceImpl.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/service/impl/OpsCaigouPlanChanpinServiceImpl.java index a071ede..e71ace1 100644 --- a/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/service/impl/OpsCaigouPlanChanpinServiceImpl.java +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/service/impl/OpsCaigouPlanChanpinServiceImpl.java @@ -1,5 +1,6 @@ package org.dromara.personnel.service.impl; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; @@ -10,6 +11,9 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.dromara.personnel.domain.bo.OpsBeipinBeijianBo; +import org.dromara.personnel.domain.dto.OpsBeipinBeijianDto; +import org.dromara.personnel.domain.vo.OpsBeipinBeijianVo; import org.springframework.stereotype.Service; import org.dromara.personnel.domain.bo.OpsCaigouPlanChanpinBo; import org.dromara.personnel.domain.vo.OpsCaigouPlanChanpinVo; @@ -142,4 +146,14 @@ public class OpsCaigouPlanChanpinServiceImpl extends ServiceImpl().eq(OpsCaigouPlanChanpin::getCaigouPlanId, caigouId)); } + @Override + public Page getBeiJianList(IPage build, OpsBeipinBeijianBo bo) { + return baseMapper.getBeiJianList(build,bo); + } + + @Override + public List getCount(OpsBeipinBeijianBo bo) { + return baseMapper.getCount(bo.getProjectId()); + } + } diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/service/impl/OpsCaigouPlanServiceImpl.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/service/impl/OpsCaigouPlanServiceImpl.java index c0ce096..442f883 100644 --- a/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/service/impl/OpsCaigouPlanServiceImpl.java +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/service/impl/OpsCaigouPlanServiceImpl.java @@ -1,8 +1,9 @@ package org.dromara.personnel.service.impl; import cn.hutool.core.bean.BeanUtil; -import com.baomidou.mybatisplus.core.toolkit.BeanUtils; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import jakarta.validation.constraints.NotNull; +import org.apache.seata.spring.annotation.GlobalTransactional; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; @@ -16,16 +17,18 @@ import lombok.extern.slf4j.Slf4j; import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.personnel.domain.OpsCaigouPlanChanpin; import org.dromara.personnel.domain.OpsCaigouPlanFiles; +import org.dromara.personnel.domain.OpsTenderSupplierInput; import org.dromara.personnel.domain.bo.OpsCaigouPlanChanpinBo; import org.dromara.personnel.domain.bo.OpsCaigouPlanFilesBo; import org.dromara.personnel.domain.bo.OpsCaigouPlanReq; import org.dromara.personnel.domain.enums.OpsCaigouPlanEnum; import org.dromara.personnel.domain.vo.OpsCaigouPlanChanpinListVo; -import org.dromara.personnel.domain.vo.OpsCaigouPlanChanpinVo; import org.dromara.personnel.domain.vo.OpsCaigouPlanCountVo; import org.dromara.personnel.service.IOpsCaigouPlanChanpinService; import org.dromara.personnel.service.IOpsCaigouPlanFilesService; +import org.dromara.personnel.service.IOpsTenderSupplierInputService; import org.dromara.personnel.utils.CglxdIdGenerator; +import org.dromara.resource.api.RemoteFileService; import org.dromara.system.api.model.LoginUser; import org.springframework.stereotype.Service; import org.dromara.personnel.domain.bo.OpsCaigouPlanBo; @@ -38,6 +41,7 @@ import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.*; +import java.util.stream.Collectors; /** * 运维-物资-采购计划单Service业务层处理 @@ -55,6 +59,9 @@ public class OpsCaigouPlanServiceImpl extends ServiceImpl 0; if (flag) { bo.setId(add.getId()); + if (bo.getOpsCaigouPlanChanpinBos() ==null){ + throw new ServiceException("产品信息不能为空!!!"); + } List opsCaigouPlanChanpinBos = bo.getOpsCaigouPlanChanpinBos(); BigDecimal yujiJine = opsCaigouPlanChanpinBos.stream() // 步骤1:设置 caigouPlanId(副作用,也可单独处理) - .peek(chanpin -> chanpin.setCaigouPlanId(add.getId())) + .peek(chanpin -> { + chanpin.setCaigouPlanId(add.getId()); + chanpin.setProjectId(add.getProjectId()); + chanpin.setChanpinBianhao(CglxdIdGenerator.generateId("CP-")); + }) // 步骤2:提取要累加的 totalPrice .map(OpsCaigouPlanChanpinBo::getTotalPrice) // 步骤3:过滤 null(避免 NPE) @@ -160,37 +178,100 @@ public class OpsCaigouPlanServiceImpl extends ServiceImpl().eq(OpsCaigouPlanChanpin::getCaigouPlanId, bo.getId())); - caigouPlanFilesService.getBaseMapper().delete(new LambdaQueryWrapper().eq(OpsCaigouPlanFiles::getCaigouPlanId, bo.getId())); + List opsCaigouPlanChanpinBos = bo.getOpsCaigouPlanChanpinBos(); + if (opsCaigouPlanChanpinBos == null) { + throw new ServiceException("产品信息不能为空!!!"); + } + + //查询该计划下产品信息列表 + List opsCaigouPlanChanpins = caigouPlanChanpinService.getBaseMapper().selectList(new LambdaQueryWrapper().eq(OpsCaigouPlanChanpin::getCaigouPlanId, bo.getId())); OpsCaigouPlan update = MapstructUtils.convert(bo, OpsCaigouPlan.class); validEntityBeforeSave(update); - List opsCaigouPlanChanpinBos = bo.getOpsCaigouPlanChanpinBos(); BigDecimal yujiJine = opsCaigouPlanChanpinBos.stream() - // 步骤1:设置 caigouPlanId(副作用,也可单独处理) - .peek(chanpin -> chanpin.setCaigouPlanId(update.getId())) - // 步骤2:提取要累加的 totalPrice - .map(OpsCaigouPlanChanpinBo::getTotalPrice) // 步骤3:过滤 null(避免 NPE) .filter(Objects::nonNull) + // 步骤2:提取要累加的 totalPrice + .map(OpsCaigouPlanChanpinBo::getTotalPrice) // 步骤4:累加所有 BigDecimal(初始值为 BigDecimal.ZERO) .reduce(BigDecimal.ZERO, BigDecimal::add); update.setYujiJine(yujiJine); - List planChanpinList = MapstructUtils.convert(opsCaigouPlanChanpinBos, OpsCaigouPlanChanpin.class); - caigouPlanChanpinService.saveBatch(planChanpinList); + if (opsCaigouPlanChanpins != null) { + //获取已存在产品id + Set chanpinOldIds = opsCaigouPlanChanpins.stream().filter(Objects::nonNull).map(OpsCaigouPlanChanpin::getId).collect(Collectors.toSet()); + //获取新的产品id列表 + Set chanpinNowIds = opsCaigouPlanChanpinBos.stream().filter(Objects::nonNull).map(OpsCaigouPlanChanpinBo::getId).collect(Collectors.toSet()); + //获取需要删除的产品id + List detChanpinIds = new ArrayList<>(); + chanpinOldIds.forEach(detChanpinId -> { + if (!chanpinNowIds.contains(detChanpinId)) { + detChanpinIds.add(detChanpinId); + } + }); + //判断需要删除产品id是否为空,不为空则删除 + if (!detChanpinIds.isEmpty()) { + caigouPlanChanpinService.getBaseMapper().deleteByIds(detChanpinIds); + } + //过滤掉不存在的产品,对原有产品进行修改 + List list =opsCaigouPlanChanpinBos.stream() + .filter(Objects::nonNull) + .filter(chanpin -> chanpinOldIds.contains(chanpin.getId())) + .toList(); + List planChanpinList = MapstructUtils.convert(list, OpsCaigouPlanChanpin.class); + caigouPlanChanpinService.updateBatchById(planChanpinList); + //过滤掉存在产品,并新增产品 + List chanpinBoList = opsCaigouPlanChanpinBos.stream() + .filter(Objects::nonNull) + .filter(opsCaigouPlanChanpinBo -> opsCaigouPlanChanpinBo.getId() == null).toList(); + for (OpsCaigouPlanChanpinBo chanpin : chanpinBoList) { + if (chanpin != null) { + chanpin.setCaigouPlanId(update.getId()); + chanpin.setProjectId(update.getProjectId()); + chanpin.setChanpinBianhao(CglxdIdGenerator.generateId("CP-")); + } + } + List planChanpinNowList = MapstructUtils.convert(chanpinBoList, OpsCaigouPlanChanpin.class); + caigouPlanChanpinService.saveBatch(planChanpinNowList); + }else { + for (OpsCaigouPlanChanpinBo chanpin : opsCaigouPlanChanpinBos) { + if (chanpin != null) { + chanpin.setCaigouPlanId(update.getId()); + chanpin.setChanpinBianhao(CglxdIdGenerator.generateId("CP-")); + } + } + List planChanpinList = MapstructUtils.convert(opsCaigouPlanChanpinBos, OpsCaigouPlanChanpin.class); + caigouPlanChanpinService.saveBatch(planChanpinList); + } +// caigouPlanChanpinService.getBaseMapper().delete(new LambdaQueryWrapper().eq(OpsCaigouPlanChanpin::getCaigouPlanId, bo.getId())); + //查询该计划文件id + + caigouPlanFilesService.getBaseMapper().delete(new LambdaQueryWrapper().eq(OpsCaigouPlanFiles::getCaigouPlanId, bo.getId())); List opsCaigouPlanFilesBos = bo.getOpsCaigouPlanFilesBos(); - opsCaigouPlanFilesBos.forEach(fileBo -> { - fileBo.setCaigouPlanId(update.getId()); - }); - List planFilesList = MapstructUtils.convert(opsCaigouPlanFilesBos, OpsCaigouPlanFiles.class); - caigouPlanFilesService.saveBatch(planFilesList); + if (opsCaigouPlanFilesBos != null) { + //保存文件 + opsCaigouPlanFilesBos.forEach(fileBo -> { + fileBo.setCaigouPlanId(update.getId()); + }); + List planFilesList = MapstructUtils.convert(opsCaigouPlanFilesBos, OpsCaigouPlanFiles.class); + caigouPlanFilesService.saveBatch(planFilesList); + } return baseMapper.updateById(update) > 0; } + private List detPlanFileIds(List chanpinId) { + List opsCaigouPlanFiles = caigouPlanFilesService.getBaseMapper() + .selectList(new LambdaQueryWrapper() + .in(OpsCaigouPlanFiles::getCaigouPlanId, chanpinId)); + List ossIds = new ArrayList<>(); + opsCaigouPlanFiles.forEach(fileBo -> {ossIds.add(fileBo.getId());}); + + return ossIds; + } + /** * 保存前的数据校验 */ @@ -213,14 +294,28 @@ public class OpsCaigouPlanServiceImpl extends ServiceImpl ids, Boolean isValid) { if(isValid){ //TODO 做一些业务上的校验,判断是否需要校验 - baseMapper.selectVoByIds(ids).forEach(vo -> { + List opsCaigouPlanVos = baseMapper.selectVoByIds(ids); + opsCaigouPlanVos.forEach(vo -> { if (!OpsCaigouPlanEnum.CAOGAO.getValue().equals(vo.getStatus())) { throw new ServiceException("已开始审核,不允许修改"); } }); + caigouPlanChanpinService + .getBaseMapper() + .delete(new LambdaQueryWrapper() + .in(OpsCaigouPlanChanpin::getCaigouPlanId,ids)); + List ossIds = detPlanFileIds((List) ids); + if (!ossIds.isEmpty()){ + remoteFileService.deleteFileByIds(ossIds); + } + caigouPlanFilesService + .getBaseMapper() + .delete(new LambdaQueryWrapper() + .in(OpsCaigouPlanFiles::getCaigouPlanId,ids)); } return baseMapper.deleteByIds(ids) > 0; } diff --git a/ruoyi-modules/xny-ops/src/main/resources/mapper/personnel/OpsCaigouPlanChanpinMapper.xml b/ruoyi-modules/xny-ops/src/main/resources/mapper/personnel/OpsCaigouPlanChanpinMapper.xml index 25a12e9..cd1bcfa 100644 --- a/ruoyi-modules/xny-ops/src/main/resources/mapper/personnel/OpsCaigouPlanChanpinMapper.xml +++ b/ruoyi-modules/xny-ops/src/main/resources/mapper/personnel/OpsCaigouPlanChanpinMapper.xml @@ -4,4 +4,36 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + + diff --git a/ruoyi-modules/xny-ops/src/main/resources/mapper/personnel/OpsChurukudanMapper.xml b/ruoyi-modules/xny-ops/src/main/resources/mapper/personnel/OpsChurukudanMapper.xml index 8726bf3..beec351 100644 --- a/ruoyi-modules/xny-ops/src/main/resources/mapper/personnel/OpsChurukudanMapper.xml +++ b/ruoyi-modules/xny-ops/src/main/resources/mapper/personnel/OpsChurukudanMapper.xml @@ -55,7 +55,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"