运维-物资管理接口
This commit is contained in:
@ -39,4 +39,10 @@ public interface RemoteFileService {
|
||||
|
||||
|
||||
void deleteFile(Collection<String> urls);
|
||||
|
||||
/**
|
||||
* 通过ossId列表删除
|
||||
* @param ossIds
|
||||
*/
|
||||
void deleteFileByIds(Collection<Long> ossIds);
|
||||
}
|
||||
|
||||
@ -56,4 +56,9 @@ public class RemoteFileServiceMock implements RemoteFileService {
|
||||
log.warn("服务调用异常 -> 降级处理");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteFileByIds(Collection<Long> ossIds) {
|
||||
log.warn("服务调用异常 -> 降级处理");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -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>
|
||||
|
||||
|
||||
@ -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));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -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;
|
||||
|
||||
/**
|
||||
* 产品名称
|
||||
*/
|
||||
|
||||
@ -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;
|
||||
|
||||
/**
|
||||
* 产品名称
|
||||
|
||||
@ -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;
|
||||
|
||||
/**
|
||||
|
||||
@ -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;
|
||||
|
||||
}
|
||||
@ -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;
|
||||
|
||||
|
||||
}
|
||||
@ -71,6 +71,15 @@ public class OpsBeipinBeijianVo implements Serializable {
|
||||
@ExcelDictFormat(readConverterExp = "待=定")
|
||||
private String kucunStatus;
|
||||
|
||||
/**
|
||||
* 入库数量
|
||||
*/
|
||||
private Long ruKuCount;
|
||||
/**
|
||||
* 出库数量
|
||||
*/
|
||||
private Long chuKuCount;
|
||||
|
||||
/**
|
||||
* 库存数量
|
||||
*/
|
||||
|
||||
@ -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;
|
||||
|
||||
/**
|
||||
* 产品名称
|
||||
*/
|
||||
|
||||
@ -105,6 +105,7 @@ public class OpsCaigouPlanVo implements Serializable {
|
||||
*/
|
||||
@ExcelProperty(value = "供应商id")
|
||||
private Long gonyingshangId;
|
||||
private String gonyingshangName;
|
||||
|
||||
/**
|
||||
* 出货时间
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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
|
||||
|
||||
Reference in New Issue
Block a user