package com.ruoyi.production.service.impl;
|
|
import cn.hutool.core.bean.BeanUtil;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.ruoyi.common.exception.ServiceException;
|
import com.ruoyi.production.bean.dto.ProductionOrderRoutingOperationParamDto;
|
import com.ruoyi.production.bean.dto.ProductionOrderRoutingOperationParamSyncDto;
|
import com.ruoyi.production.bean.vo.ProductionOrderRoutingOperationParamVo;
|
import com.ruoyi.production.mapper.ProductionOrderMapper;
|
import com.ruoyi.production.mapper.ProductionOrderRoutingOperationMapper;
|
import com.ruoyi.production.mapper.ProductionOrderRoutingOperationParamMapper;
|
import com.ruoyi.production.pojo.ProductionOrder;
|
import com.ruoyi.production.pojo.ProductionOrderRoutingOperation;
|
import com.ruoyi.production.pojo.ProductionOrderRoutingOperationParam;
|
import com.ruoyi.production.service.ProductionOrderRoutingOperationParamService;
|
import com.ruoyi.technology.mapper.TechnologyRoutingOperationParamMapper;
|
import com.ruoyi.technology.pojo.TechnologyRoutingOperationParam;
|
import lombok.RequiredArgsConstructor;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.util.List;
|
|
@Service
|
@Transactional(rollbackFor = Exception.class)
|
@RequiredArgsConstructor
|
public class ProductionOrderRoutingOperationParamServiceImpl extends ServiceImpl<ProductionOrderRoutingOperationParamMapper, ProductionOrderRoutingOperationParam>
|
implements ProductionOrderRoutingOperationParamService {
|
|
private final ProductionOrderRoutingOperationParamMapper productionOrderRoutingOperationParamMapper;
|
private final ProductionOrderRoutingOperationMapper productionOrderRoutingOperationMapper;
|
private final ProductionOrderMapper productionOrderMapper;
|
private final TechnologyRoutingOperationParamMapper technologyRoutingOperationParamMapper;
|
|
@Override
|
public IPage<ProductionOrderRoutingOperationParamVo> pageProductionOrderRoutingOperationParam(Page<ProductionOrderRoutingOperationParamDto> page,
|
ProductionOrderRoutingOperationParamDto dto) {
|
Page<ProductionOrderRoutingOperationParam> entityPage = new Page<>(page.getCurrent(), page.getSize(), page.getTotal());
|
return this.page(entityPage, buildQueryWrapper(dto))
|
.convert(item -> BeanUtil.copyProperties(item, ProductionOrderRoutingOperationParamVo.class));
|
}
|
|
@Override
|
public List<ProductionOrderRoutingOperationParamVo> listProductionOrderRoutingOperationParam(ProductionOrderRoutingOperationParamDto dto) {
|
return BeanUtil.copyToList(this.list(buildQueryWrapper(dto)), ProductionOrderRoutingOperationParamVo.class);
|
}
|
|
@Override
|
public ProductionOrderRoutingOperationParamVo getProductionOrderRoutingOperationParamInfo(Long id) {
|
ProductionOrderRoutingOperationParam item = this.getById(id);
|
return item == null ? null : BeanUtil.copyProperties(item, ProductionOrderRoutingOperationParamVo.class);
|
}
|
|
@Override
|
public boolean saveProductionOrderRoutingOperationParam(ProductionOrderRoutingOperationParam item) {
|
ProductionOrderRoutingOperation routingOperation = getRoutingOperation(item.getTechnologyRoutingOperationId());
|
fillFromSourceParam(item, routingOperation);
|
validateManualFields(item);
|
checkDuplicate(item);
|
return this.saveOrUpdate(item);
|
}
|
|
@Override
|
public boolean removeProductionOrderRoutingOperationParam(Long id) {
|
return this.removeById(id);
|
}
|
|
@Override
|
public int syncProductionOrderRoutingOperationParam(ProductionOrderRoutingOperationParamSyncDto syncDto) {
|
if (syncDto == null || syncDto.getProductionOrderRoutingOperationId() == null) {
|
throw new ServiceException("productionOrderRoutingOperationId is required");
|
}
|
ProductionOrderRoutingOperation routingOperation = getRoutingOperation(syncDto.getProductionOrderRoutingOperationId());
|
List<TechnologyRoutingOperationParam> sourceParamList = technologyRoutingOperationParamMapper.selectList(
|
Wrappers.<TechnologyRoutingOperationParam>lambdaQuery()
|
.eq(TechnologyRoutingOperationParam::getTechnologyRoutingOperationId, routingOperation.getTechnologyRoutingOperationId())
|
.orderByAsc(TechnologyRoutingOperationParam::getId)
|
);
|
boolean replaceExisting = syncDto.getReplaceExisting() == null || syncDto.getReplaceExisting();
|
if (replaceExisting) {
|
productionOrderRoutingOperationParamMapper.delete(
|
Wrappers.<ProductionOrderRoutingOperationParam>lambdaQuery()
|
.eq(ProductionOrderRoutingOperationParam::getTechnologyRoutingOperationId, routingOperation.getId())
|
);
|
}
|
int successCount = 0;
|
for (TechnologyRoutingOperationParam sourceParam : sourceParamList) {
|
boolean exists = productionOrderRoutingOperationParamMapper.selectCount(
|
Wrappers.<ProductionOrderRoutingOperationParam>lambdaQuery()
|
.eq(ProductionOrderRoutingOperationParam::getTechnologyRoutingOperationId, routingOperation.getId())
|
.eq(ProductionOrderRoutingOperationParam::getTechnologyRoutingOperationParamId, sourceParam.getId())
|
) > 0;
|
if (!replaceExisting && exists) {
|
continue;
|
}
|
ProductionOrderRoutingOperationParam target = new ProductionOrderRoutingOperationParam();
|
target.setTechnologyRoutingOperationId(routingOperation.getId());
|
target.setTechnologyRoutingOperationParamId(sourceParam.getId());
|
target.setProductionOrderId(routingOperation.getProductionOrderId());
|
target.setTechnologyOperationId(sourceParam.getTechnologyOperationId());
|
target.setTechnologyOperationParamId(sourceParam.getTechnologyOperationParamId());
|
target.setParamId(sourceParam.getParamId());
|
target.setParamCode(sourceParam.getParamCode());
|
target.setParamName(sourceParam.getParamName());
|
target.setParamType(sourceParam.getParamType());
|
target.setParamFormat(sourceParam.getParamFormat());
|
target.setUnit(sourceParam.getUnit());
|
target.setIsRequired(sourceParam.getIsRequired());
|
target.setRemark(sourceParam.getRemark());
|
target.setStandardValue(sourceParam.getStandardValue());
|
productionOrderRoutingOperationParamMapper.insert(target);
|
successCount++;
|
}
|
return successCount;
|
}
|
|
private LambdaQueryWrapper<ProductionOrderRoutingOperationParam> buildQueryWrapper(ProductionOrderRoutingOperationParamDto dto) {
|
ProductionOrderRoutingOperationParam query = dto == null ? new ProductionOrderRoutingOperationParam() : dto;
|
return Wrappers.<ProductionOrderRoutingOperationParam>lambdaQuery()
|
.eq(query.getId() != null, ProductionOrderRoutingOperationParam::getId, query.getId())
|
.eq(query.getProductionOrderId() != null, ProductionOrderRoutingOperationParam::getProductionOrderId, query.getProductionOrderId())
|
.eq(query.getTechnologyRoutingOperationId() != null,
|
ProductionOrderRoutingOperationParam::getTechnologyRoutingOperationId, query.getTechnologyRoutingOperationId())
|
.eq(query.getTechnologyOperationId() != null,
|
ProductionOrderRoutingOperationParam::getTechnologyOperationId, query.getTechnologyOperationId())
|
.eq(query.getTechnologyRoutingOperationParamId() != null,
|
ProductionOrderRoutingOperationParam::getTechnologyRoutingOperationParamId, query.getTechnologyRoutingOperationParamId())
|
.eq(query.getTechnologyOperationParamId() != null,
|
ProductionOrderRoutingOperationParam::getTechnologyOperationParamId, query.getTechnologyOperationParamId())
|
.like(query.getParamCode() != null && !query.getParamCode().trim().isEmpty(),
|
ProductionOrderRoutingOperationParam::getParamCode, query.getParamCode())
|
.like(query.getParamName() != null && !query.getParamName().trim().isEmpty(),
|
ProductionOrderRoutingOperationParam::getParamName, query.getParamName())
|
.orderByAsc(ProductionOrderRoutingOperationParam::getTechnologyRoutingOperationId)
|
.orderByAsc(ProductionOrderRoutingOperationParam::getId);
|
}
|
|
private ProductionOrderRoutingOperation getRoutingOperation(Long productionOrderRoutingOperationId) {
|
if (productionOrderRoutingOperationId == null) {
|
throw new ServiceException("productionOrderRoutingOperationId is required");
|
}
|
ProductionOrderRoutingOperation routingOperation = productionOrderRoutingOperationMapper.selectById(productionOrderRoutingOperationId);
|
if (routingOperation == null) {
|
throw new ServiceException("Production order routing operation not found");
|
}
|
return routingOperation;
|
}
|
|
private void fillFromSourceParam(ProductionOrderRoutingOperationParam item, ProductionOrderRoutingOperation routingOperation) {
|
item.setTechnologyRoutingOperationId(routingOperation.getId());
|
item.setProductionOrderId(routingOperation.getProductionOrderId());
|
ProductionOrder productionOrder = productionOrderMapper.selectById(routingOperation.getProductionOrderId());
|
if (productionOrder == null) {
|
throw new ServiceException("Production order not found");
|
}
|
if (item.getTechnologyRoutingOperationParamId() == null) {
|
return;
|
}
|
TechnologyRoutingOperationParam sourceParam = technologyRoutingOperationParamMapper.selectById(item.getTechnologyRoutingOperationParamId());
|
if (sourceParam == null) {
|
throw new ServiceException("Technology routing operation param not found");
|
}
|
if (!routingOperation.getTechnologyRoutingOperationId().equals(sourceParam.getTechnologyRoutingOperationId())) {
|
throw new ServiceException("Source param does not belong to routing operation");
|
}
|
item.setTechnologyOperationId(sourceParam.getTechnologyOperationId());
|
item.setTechnologyOperationParamId(sourceParam.getTechnologyOperationParamId());
|
item.setParamId(sourceParam.getParamId());
|
item.setParamCode(sourceParam.getParamCode());
|
item.setParamName(sourceParam.getParamName());
|
item.setParamType(sourceParam.getParamType());
|
item.setParamFormat(sourceParam.getParamFormat());
|
item.setUnit(sourceParam.getUnit());
|
item.setIsRequired(sourceParam.getIsRequired());
|
if (item.getRemark() == null || item.getRemark().trim().isEmpty()) {
|
item.setRemark(sourceParam.getRemark());
|
}
|
if (item.getStandardValue() == null) {
|
item.setStandardValue(sourceParam.getStandardValue());
|
}
|
}
|
|
private void validateManualFields(ProductionOrderRoutingOperationParam item) {
|
if (item.getParamCode() == null || item.getParamCode().trim().isEmpty()) {
|
throw new ServiceException("paramCode is required");
|
}
|
if (item.getParamName() == null || item.getParamName().trim().isEmpty()) {
|
throw new ServiceException("paramName is required");
|
}
|
}
|
|
private void checkDuplicate(ProductionOrderRoutingOperationParam item) {
|
boolean duplicate = productionOrderRoutingOperationParamMapper.selectCount(
|
Wrappers.<ProductionOrderRoutingOperationParam>lambdaQuery()
|
.eq(ProductionOrderRoutingOperationParam::getTechnologyRoutingOperationId, item.getTechnologyRoutingOperationId())
|
.eq(item.getTechnologyRoutingOperationParamId() != null,
|
ProductionOrderRoutingOperationParam::getTechnologyRoutingOperationParamId, item.getTechnologyRoutingOperationParamId())
|
.eq(item.getTechnologyRoutingOperationParamId() == null && item.getParamCode() != null,
|
ProductionOrderRoutingOperationParam::getParamCode, item.getParamCode())
|
.ne(item.getId() != null, ProductionOrderRoutingOperationParam::getId, item.getId())
|
) > 0;
|
if (duplicate) {
|
throw new ServiceException("Duplicate production order routing operation param");
|
}
|
}
|
}
|