运维-物资管理接口

This commit is contained in:
2025-09-30 15:45:27 +08:00
parent 1ab49c4178
commit 71dba8bb2d
21 changed files with 439 additions and 25 deletions

View File

@ -96,4 +96,13 @@ public class RemoteFileServiceImpl implements RemoteFileService {
storage.delete(url);
}
}
/**
* 通过ossId列表删除
* @param ossIds
*/
@Override
public void deleteFileByIds(Collection<Long> ossIds) {
sysOssService.deleteWithValidByIds(ossIds,false);
}
}

View File

@ -92,6 +92,11 @@
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-encrypt</artifactId>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.dromara</groupId>-->
<!-- <artifactId>ruoyi-workflow</artifactId>-->
<!-- <version>2.4.1</version>-->
<!-- </dependency>-->
</dependencies>

View File

@ -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<OpsBeipinBeijianVo> list(OpsBeipinBeijianBo bo, PageQuery pageQuery) {
return opsBeipinBeijianService.queryPageList(bo, pageQuery);
public TableDataInfo<OpsBeipinBeijianDto> list(OpsBeipinBeijianBo bo, PageQuery pageQuery) {
return opsBeipinBeijianService.getList(bo, pageQuery);
}
/**
* 查询运维-物资-备品配件列表
*/
@SaCheckPermission("personnel:beipinBeijian:list")
@GetMapping("/getCount")
public R<OpsBeipinBeijianCountVo> getCount(OpsBeipinBeijianBo bo) {
return R.ok(opsBeipinBeijianService.getCount(bo));
}
/**

View File

@ -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;
/**
* 产品名称
*/

View File

@ -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;
/**
* 产品名称

View File

@ -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;
/**

View File

@ -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;
}

View File

@ -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<String,Long> typeCount;
}

View File

@ -71,6 +71,15 @@ public class OpsBeipinBeijianVo implements Serializable {
@ExcelDictFormat(readConverterExp = "待=定")
private String kucunStatus;
/**
* 入库数量
*/
private Long ruKuCount;
/**
* 出库数量
*/
private Long chuKuCount;
/**
* 库存数量
*/

View File

@ -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;
/**
* 产品名称
*/

View File

@ -105,6 +105,7 @@ public class OpsCaigouPlanVo implements Serializable {
*/
@ExcelProperty(value = "供应商id")
private Long gonyingshangId;
private String gonyingshangName;
/**
* 出货时间

View File

@ -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<OpsCaigouPlanChanpin, OpsCaigouPlanChanpinVo> {
Page<OpsBeipinBeijianDto> getBeiJianList(IPage<OpsBeipinBeijianDto> build, @Param("bo") OpsBeipinBeijianBo bo);
List<OpsBeipinBeijianDto> getCount(@Param("projectId") Long projectId);
}

View File

@ -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<OpsBeipinBeijian> {
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
TableDataInfo<OpsBeipinBeijianDto> getList(OpsBeipinBeijianBo bo, PageQuery pageQuery);
OpsBeipinBeijianCountVo getCount(OpsBeipinBeijianBo bo);
}

View File

@ -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<OpsCaigouPlanChan
* @return
*/
List<OpsCaigouPlanChanpinVo> getVoByCaiGouPlanId(Long caigouId);
Page<OpsBeipinBeijianDto> getBeiJianList(IPage<OpsBeipinBeijianDto> build, OpsBeipinBeijianBo bo);
List<OpsBeipinBeijianDto> getCount(OpsBeipinBeijianBo bo);
}

View File

@ -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<OpsBeipinBeijianMap
private final OpsBeipinBeijianMapper baseMapper;
private final IOpsCaigouPlanChanpinService caigouPlanChanpinService;
/**
* 查询运维-物资-备品配件
*
@ -136,4 +143,47 @@ public class OpsBeipinBeijianServiceImpl extends ServiceImpl<OpsBeipinBeijianMap
}
return baseMapper.deleteByIds(ids) > 0;
}
@Override
public TableDataInfo<OpsBeipinBeijianDto> getList(OpsBeipinBeijianBo bo, PageQuery pageQuery) {
Page<OpsBeipinBeijianDto> 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<OpsBeipinBeijianDto> records = caigouPlanChanpinService.getCount(bo);
OpsBeipinBeijianCountVo vo = new OpsBeipinBeijianCountVo();
long zonCount = 0L;
long diCount = 0L;
Map<String, Long> 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;
}
}

View File

@ -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<OpsCaigouPlanCh
return baseMapper.selectVoList(new LambdaQueryWrapper<OpsCaigouPlanChanpin>().eq(OpsCaigouPlanChanpin::getCaigouPlanId, caigouId));
}
@Override
public Page<OpsBeipinBeijianDto> getBeiJianList(IPage<OpsBeipinBeijianDto> build, OpsBeipinBeijianBo bo) {
return baseMapper.getBeiJianList(build,bo);
}
@Override
public List<OpsBeipinBeijianDto> getCount(OpsBeipinBeijianBo bo) {
return baseMapper.getCount(bo.getProjectId());
}
}

View File

@ -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<OpsCaigouPlanMapper,Op
private final IOpsCaigouPlanFilesService caigouPlanFilesService;
private final IOpsCaigouPlanChanpinService caigouPlanChanpinService;
private final RemoteFileService remoteFileService;
private final IOpsTenderSupplierInputService tenderSupplierInputService;
@ -67,6 +74,10 @@ public class OpsCaigouPlanServiceImpl extends ServiceImpl<OpsCaigouPlanMapper,Op
@Override
public OpsCaigouPlanVo queryById(Long id){
OpsCaigouPlanVo opsCaigouPlanVo = baseMapper.selectVoById(id);
if (opsCaigouPlanVo.getGonyingshangId() != null){
OpsTenderSupplierInput supplierInput = tenderSupplierInputService.getById(opsCaigouPlanVo.getGonyingshangId());
opsCaigouPlanVo.setGonyingshangName(supplierInput.getSupplierName());
}
opsCaigouPlanVo.setOpsCaigouPlanChanpinVos(caigouPlanChanpinService.getVoByCaiGouPlanId(id));
opsCaigouPlanVo.setOpsCaigouPlanFilesVos(caigouPlanFilesService.getVoByCaiGouPlanId(id));
return opsCaigouPlanVo;
@ -116,7 +127,7 @@ public class OpsCaigouPlanServiceImpl extends ServiceImpl<OpsCaigouPlanMapper,Op
* @return 是否新增成功
*/
@Override
@Transactional(rollbackFor = Exception.class)
@GlobalTransactional(rollbackFor = Exception.class)
public Boolean insertByBo(OpsCaigouPlanBo bo) {
LoginUser loginUser = LoginHelper.getLoginUser();
OpsCaigouPlan add = MapstructUtils.convert(bo, OpsCaigouPlan.class);
@ -124,15 +135,22 @@ public class OpsCaigouPlanServiceImpl extends ServiceImpl<OpsCaigouPlanMapper,Op
add.setJingbanrenName(loginUser.getUsername());
add.setCaigouDanwei(loginUser.getDeptId());
add.setCaigouDanweiName(loginUser.getDeptName());
add.setJihuaBianhao(CglxdIdGenerator.generateId("CGLXD"));
add.setJihuaBianhao(CglxdIdGenerator.generateId("CGLXD-"));
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
if (bo.getOpsCaigouPlanChanpinBos() ==null){
throw new ServiceException("产品信息不能为空!!!");
}
List<OpsCaigouPlanChanpinBo> 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<OpsCaigouPlanMapper,Op
* @return 是否修改成功
*/
@Override
@Transactional(rollbackFor = Exception.class)
@GlobalTransactional(rollbackFor = Exception.class)
public Boolean updateByBo(OpsCaigouPlanBo bo) {
if (!OpsCaigouPlanEnum.CAOGAO.getValue().equals(bo.getStatus()) && !OpsCaigouPlanEnum.WEITONGUO.getValue().equals(bo.getStatus())) {
throw new ServiceException("已开始审核,不允许修改");
}
caigouPlanChanpinService.getBaseMapper().delete(new LambdaQueryWrapper<OpsCaigouPlanChanpin>().eq(OpsCaigouPlanChanpin::getCaigouPlanId, bo.getId()));
caigouPlanFilesService.getBaseMapper().delete(new LambdaQueryWrapper<OpsCaigouPlanFiles>().eq(OpsCaigouPlanFiles::getCaigouPlanId, bo.getId()));
List<OpsCaigouPlanChanpinBo> opsCaigouPlanChanpinBos = bo.getOpsCaigouPlanChanpinBos();
if (opsCaigouPlanChanpinBos == null) {
throw new ServiceException("产品信息不能为空!!!");
}
//查询该计划下产品信息列表
List<OpsCaigouPlanChanpin> opsCaigouPlanChanpins = caigouPlanChanpinService.getBaseMapper().selectList(new LambdaQueryWrapper<OpsCaigouPlanChanpin>().eq(OpsCaigouPlanChanpin::getCaigouPlanId, bo.getId()));
OpsCaigouPlan update = MapstructUtils.convert(bo, OpsCaigouPlan.class);
validEntityBeforeSave(update);
List<OpsCaigouPlanChanpinBo> 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<OpsCaigouPlanChanpin> planChanpinList = MapstructUtils.convert(opsCaigouPlanChanpinBos, OpsCaigouPlanChanpin.class);
caigouPlanChanpinService.saveBatch(planChanpinList);
if (opsCaigouPlanChanpins != null) {
//获取已存在产品id
Set<Long> chanpinOldIds = opsCaigouPlanChanpins.stream().filter(Objects::nonNull).map(OpsCaigouPlanChanpin::getId).collect(Collectors.toSet());
//获取新的产品id列表
Set<Long> chanpinNowIds = opsCaigouPlanChanpinBos.stream().filter(Objects::nonNull).map(OpsCaigouPlanChanpinBo::getId).collect(Collectors.toSet());
//获取需要删除的产品id
List<Long> detChanpinIds = new ArrayList<>();
chanpinOldIds.forEach(detChanpinId -> {
if (!chanpinNowIds.contains(detChanpinId)) {
detChanpinIds.add(detChanpinId);
}
});
//判断需要删除产品id是否为空不为空则删除
if (!detChanpinIds.isEmpty()) {
caigouPlanChanpinService.getBaseMapper().deleteByIds(detChanpinIds);
}
//过滤掉不存在的产品,对原有产品进行修改
List<OpsCaigouPlanChanpinBo> list =opsCaigouPlanChanpinBos.stream()
.filter(Objects::nonNull)
.filter(chanpin -> chanpinOldIds.contains(chanpin.getId()))
.toList();
List<OpsCaigouPlanChanpin> planChanpinList = MapstructUtils.convert(list, OpsCaigouPlanChanpin.class);
caigouPlanChanpinService.updateBatchById(planChanpinList);
//过滤掉存在产品,并新增产品
List<OpsCaigouPlanChanpinBo> 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<OpsCaigouPlanChanpin> 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<OpsCaigouPlanChanpin> planChanpinList = MapstructUtils.convert(opsCaigouPlanChanpinBos, OpsCaigouPlanChanpin.class);
caigouPlanChanpinService.saveBatch(planChanpinList);
}
// caigouPlanChanpinService.getBaseMapper().delete(new LambdaQueryWrapper<OpsCaigouPlanChanpin>().eq(OpsCaigouPlanChanpin::getCaigouPlanId, bo.getId()));
//查询该计划文件id
caigouPlanFilesService.getBaseMapper().delete(new LambdaQueryWrapper<OpsCaigouPlanFiles>().eq(OpsCaigouPlanFiles::getCaigouPlanId, bo.getId()));
List<OpsCaigouPlanFilesBo> opsCaigouPlanFilesBos = bo.getOpsCaigouPlanFilesBos();
opsCaigouPlanFilesBos.forEach(fileBo -> {
fileBo.setCaigouPlanId(update.getId());
});
List<OpsCaigouPlanFiles> planFilesList = MapstructUtils.convert(opsCaigouPlanFilesBos, OpsCaigouPlanFiles.class);
caigouPlanFilesService.saveBatch(planFilesList);
if (opsCaigouPlanFilesBos != null) {
//保存文件
opsCaigouPlanFilesBos.forEach(fileBo -> {
fileBo.setCaigouPlanId(update.getId());
});
List<OpsCaigouPlanFiles> planFilesList = MapstructUtils.convert(opsCaigouPlanFilesBos, OpsCaigouPlanFiles.class);
caigouPlanFilesService.saveBatch(planFilesList);
}
return baseMapper.updateById(update) > 0;
}
private List<Long> detPlanFileIds(List<Long> chanpinId) {
List<OpsCaigouPlanFiles> opsCaigouPlanFiles = caigouPlanFilesService.getBaseMapper()
.selectList(new LambdaQueryWrapper<OpsCaigouPlanFiles>()
.in(OpsCaigouPlanFiles::getCaigouPlanId, chanpinId));
List<Long> ossIds = new ArrayList<>();
opsCaigouPlanFiles.forEach(fileBo -> {ossIds.add(fileBo.getId());});
return ossIds;
}
/**
* 保存前的数据校验
*/
@ -213,14 +294,28 @@ public class OpsCaigouPlanServiceImpl extends ServiceImpl<OpsCaigouPlanMapper,Op
* @return 是否删除成功
*/
@Override
@GlobalTransactional(rollbackFor = Exception.class)
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
baseMapper.selectVoByIds(ids).forEach(vo -> {
List<OpsCaigouPlanVo> opsCaigouPlanVos = baseMapper.selectVoByIds(ids);
opsCaigouPlanVos.forEach(vo -> {
if (!OpsCaigouPlanEnum.CAOGAO.getValue().equals(vo.getStatus())) {
throw new ServiceException("已开始审核,不允许修改");
}
});
caigouPlanChanpinService
.getBaseMapper()
.delete(new LambdaQueryWrapper<OpsCaigouPlanChanpin>()
.in(OpsCaigouPlanChanpin::getCaigouPlanId,ids));
List<Long> ossIds = detPlanFileIds((List<Long>) ids);
if (!ossIds.isEmpty()){
remoteFileService.deleteFileByIds(ossIds);
}
caigouPlanFilesService
.getBaseMapper()
.delete(new LambdaQueryWrapper<OpsCaigouPlanFiles>()
.in(OpsCaigouPlanFiles::getCaigouPlanId,ids));
}
return baseMapper.deleteByIds(ids) > 0;
}

View File

@ -4,4 +4,36 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.personnel.mapper.OpsCaigouPlanChanpinMapper">
<select id="getBeiJianList" resultType="org.dromara.personnel.domain.dto.OpsBeipinBeijianDto">
SELECT ocpc.id AS id,
ocpc.chanpin_bianhao AS beijianNumber,
ocpc.shebei_type AS shebeiType,
ocpc.chanpin_type AS guigexinghao,
ocpc.chanpin_name AS beijianName,
SUM(CASE WHEN oc.danjv_type = '1' THEN oc.zon_number ELSE 0 END) AS chuKuCount,
SUM(CASE WHEN oc.danjv_type = '2' THEN oc.zon_number ELSE 0 END) AS ruKuCount
FROM ops_caigou_plan_chanpin ocpc
LEFT JOIN ops_churukudan oc ON ocpc.id = oc.chanpin_id
WHERE
-- oc.shenhe_status = 'finish' AND
ocpc.project_id = #{bo.projectId}
GROUP BY ocpc.id
ORDER BY ocpc.create_time
</select>
<select id="getCount" resultType="org.dromara.personnel.domain.dto.OpsBeipinBeijianDto">
SELECT ocpc.id AS id,
ocpc.chanpin_bianhao AS beijianNumber,
ocpc.shebei_type AS shebeiType,
ocpc.chanpin_type AS guigexinghao,
ocpc.chanpin_name AS beijianName,
SUM(CASE WHEN oc.danjv_type = '1' THEN oc.zon_number ELSE 0 END) AS chuKuCount,
SUM(CASE WHEN oc.danjv_type = '2' THEN oc.zon_number ELSE 0 END) AS ruKuCount
FROM ops_caigou_plan_chanpin ocpc
LEFT JOIN ops_churukudan oc ON ocpc.id = oc.chanpin_id
WHERE
-- oc.shenhe_status = 'finish' AND
ocpc.project_id = #{projectId}
GROUP BY ocpc.id
ORDER BY ocpc.create_time
</select>
</mapper>

View File

@ -55,7 +55,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select>
<select id="getChuRuKuZonCount" resultType="java.lang.Long">
SELECT
SUM(zon_number)
IFNULL(SUM(zon_number),0)
FROM
ops_churukudan
WHERE