package com.ruoyi.production.service.impl;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.ruoyi.framework.web.domain.R;
|
import com.ruoyi.production.mapper.ProductionOperationTaskMapper;
|
import com.ruoyi.production.mapper.ProductionOrderRoutingOperationMapper;
|
import com.ruoyi.production.mapper.ProductionOrderRoutingOperationParamMapper;
|
import com.ruoyi.production.mapper.ProductionProductMainMapper;
|
import com.ruoyi.production.pojo.ProductionOperationTask;
|
import com.ruoyi.production.pojo.ProductionOrderRoutingOperation;
|
import com.ruoyi.production.pojo.ProductionOrderRoutingOperationParam;
|
import com.ruoyi.production.pojo.ProductionProductMain;
|
import com.ruoyi.production.service.ProductionOrderRoutingOperationService;
|
import com.ruoyi.production.service.ProductionProductMainService;
|
import com.ruoyi.technology.mapper.TechnologyOperationParamMapper;
|
import com.ruoyi.technology.mapper.TechnologyParamMapper;
|
import com.ruoyi.technology.pojo.TechnologyOperationParam;
|
import com.ruoyi.technology.pojo.TechnologyParam;
|
import lombok.RequiredArgsConstructor;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.math.BigDecimal;
|
import java.time.LocalDate;
|
import java.time.format.DateTimeFormatter;
|
import java.util.ArrayList;
|
import java.util.List;
|
|
@Service
|
@Transactional(rollbackFor = Exception.class)
|
@RequiredArgsConstructor
|
public class ProductionOrderRoutingOperationServiceImpl extends ServiceImpl<ProductionOrderRoutingOperationMapper, ProductionOrderRoutingOperation>
|
implements ProductionOrderRoutingOperationService {
|
|
private final ProductionOrderRoutingOperationMapper productionOrderRoutingOperationMapper;
|
private final ProductionOperationTaskMapper productionOperationTaskMapper;
|
private final ProductionProductMainMapper productionProductMainMapper;
|
private final ProductionProductMainService productionProductMainService;
|
private final TechnologyOperationParamMapper technologyOperationParamMapper;
|
private final TechnologyParamMapper technologyParamMapper;
|
private final ProductionOrderRoutingOperationParamMapper productionOrderRoutingOperationParamMapper;
|
|
@Override
|
public R addRouteItem(ProductionOrderRoutingOperation productionOrderRoutingOperation) {
|
int insert = productionOrderRoutingOperationMapper.insert(productionOrderRoutingOperation);
|
//工序关联的参数需要同步新增
|
List<TechnologyOperationParam> technologyOperationParams = technologyOperationParamMapper.selectList(Wrappers.<TechnologyOperationParam>lambdaQuery()
|
.eq(TechnologyOperationParam::getTechnologyOperationId, productionOrderRoutingOperation.getTechnologyOperationId()));
|
if (CollectionUtils.isNotEmpty(technologyOperationParams)){
|
ArrayList<ProductionOrderRoutingOperationParam> productionOrderRoutingOperationParams = new ArrayList<>();
|
for (TechnologyOperationParam technologyOperationParam : technologyOperationParams) {
|
TechnologyParam technologyParam = technologyParamMapper.selectById(technologyOperationParam.getTechnologyParamId());
|
ProductionOrderRoutingOperationParam productionOrderRoutingOperationParam = new ProductionOrderRoutingOperationParam();
|
productionOrderRoutingOperationParam.setProductionOrderId(productionOrderRoutingOperation.getProductionOrderId());
|
productionOrderRoutingOperationParam.setProductionOrderRoutingOperationId(productionOrderRoutingOperation.getId());
|
productionOrderRoutingOperationParam.setParamCode(technologyParam.getParamCode());
|
productionOrderRoutingOperationParam.setParamName(technologyParam.getParamName());
|
productionOrderRoutingOperationParam.setParamType(technologyParam.getParamType());
|
productionOrderRoutingOperationParam.setParamFormat(technologyParam.getParamFormat());
|
productionOrderRoutingOperationParam.setUnit(technologyParam.getUnit());
|
productionOrderRoutingOperationParam.setIsRequired(technologyParam.getIsRequired());
|
productionOrderRoutingOperationParam.setRemark(technologyParam.getRemark());
|
productionOrderRoutingOperationParam.setParamId(technologyParam.getId());
|
productionOrderRoutingOperationParam.setTechnologyOperationId(productionOrderRoutingOperation.getTechnologyOperationId());
|
productionOrderRoutingOperationParams.add(productionOrderRoutingOperationParam);
|
}
|
productionOrderRoutingOperationParamMapper.insert(productionOrderRoutingOperationParams);
|
}
|
String datePrefix = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
|
if (insert > 0) {
|
ProductionOperationTask lastTask = productionOperationTaskMapper.selectOne(
|
Wrappers.<ProductionOperationTask>lambdaQuery()
|
.likeRight(ProductionOperationTask::getWorkOrderNo, "GD" + datePrefix)
|
.orderByDesc(ProductionOperationTask::getWorkOrderNo)
|
.last("limit 1"));
|
int sequenceNumber = 1;
|
if (lastTask != null && lastTask.getWorkOrderNo() != null) {
|
String lastNo = lastTask.getWorkOrderNo();
|
if (lastNo.startsWith("GD" + datePrefix)) {
|
String seqStr = lastNo.substring(("GD" + datePrefix).length());
|
try {
|
sequenceNumber = Integer.parseInt(seqStr) + 1;
|
} catch (NumberFormatException e) {
|
sequenceNumber = 1;
|
}
|
}
|
}
|
String workOrderNoStr = "GD" + String.format("%s%03d", datePrefix, sequenceNumber);
|
ProductionOperationTask productionOperationTask = new ProductionOperationTask();
|
productionOperationTask.setProductionOrderRoutingOperationId(productionOrderRoutingOperation.getId());
|
productionOperationTask.setProductionOrderId(productionOrderRoutingOperation.getProductionOrderId());
|
productionOperationTask.setPlanQuantity(BigDecimal.ZERO);
|
productionOperationTask.setCompleteQuantity(BigDecimal.ZERO);
|
productionOperationTask.setWorkOrderNo(workOrderNoStr);
|
productionOperationTask.setStatus(1);
|
productionOperationTaskMapper.insert(productionOperationTask);
|
}
|
return R.ok();
|
}
|
|
@Override
|
public R deleteRouteItem(Long id) {
|
try {
|
ProductionOperationTask productionOperationTask = productionOperationTaskMapper.selectOne(
|
new LambdaQueryWrapper<ProductionOperationTask>()
|
.eq(ProductionOperationTask::getProductionOrderRoutingOperationId, id)
|
.last("limit 1"));
|
if (productionOperationTask == null) {
|
throw new RuntimeException("删除失败:未找到关联的生产工单");
|
}
|
if (productionOperationTask.getCompleteQuantity() != null
|
&& BigDecimal.ZERO.compareTo(productionOperationTask.getCompleteQuantity()) < 0) {
|
throw new RuntimeException("删除失败:该工单已开始生产,请先删除生产报工");
|
}
|
List<ProductionProductMain> productionProductMains = productionProductMainMapper.selectList(
|
new LambdaQueryWrapper<ProductionProductMain>()
|
.eq(ProductionProductMain::getProductionOperationTaskId, productionOperationTask.getId()));
|
for (ProductionProductMain main : productionProductMains) {
|
productionProductMainService.removeProductMain(main.getId());
|
}
|
Long productionOrderId = productionOperationTask.getProductionOrderId();
|
Long routingId = null;
|
ProductionOrderRoutingOperation deleteItem = productionOrderRoutingOperationMapper.selectById(id);
|
if (deleteItem != null) {
|
routingId = deleteItem.getOrderRoutingId();
|
}
|
productionOperationTaskMapper.delete(new LambdaQueryWrapper<ProductionOperationTask>()
|
.eq(ProductionOperationTask::getProductionOrderRoutingOperationId, id));
|
productionOrderRoutingOperationMapper.deleteById(id);
|
if (routingId != null) {
|
List<ProductionOrderRoutingOperation> operationList = productionOrderRoutingOperationMapper.selectList(
|
Wrappers.<ProductionOrderRoutingOperation>lambdaQuery()
|
.eq(ProductionOrderRoutingOperation::getOrderRoutingId, routingId)
|
.eq(ProductionOrderRoutingOperation::getProductionOrderId, productionOrderId)
|
.orderByAsc(ProductionOrderRoutingOperation::getDragSort));
|
for (int i = 0; i < operationList.size(); i++) {
|
ProductionOrderRoutingOperation item = operationList.get(i);
|
if (!Integer.valueOf(i + 1).equals(item.getDragSort())) {
|
item.setDragSort(i + 1);
|
productionOrderRoutingOperationMapper.updateById(item);
|
}
|
}
|
}
|
return R.ok();
|
} catch (Exception e) {
|
throw new RuntimeException("删除生产工艺路线失败:" + e.getMessage());
|
}
|
}
|
|
@Override
|
public int sortRouteItem(ProductionOrderRoutingOperation productionOrderRoutingOperation) {
|
ProductionOrderRoutingOperation oldItem = productionOrderRoutingOperationMapper.selectById(productionOrderRoutingOperation.getId());
|
List<ProductionOrderRoutingOperation> operationList = productionOrderRoutingOperationMapper.selectList(
|
Wrappers.<ProductionOrderRoutingOperation>lambdaQuery()
|
.eq(ProductionOrderRoutingOperation::getOrderRoutingId, oldItem.getOrderRoutingId())
|
.orderByAsc(ProductionOrderRoutingOperation::getDragSort));
|
Integer targetPosition = productionOrderRoutingOperation.getDragSort();
|
if (targetPosition != null && targetPosition >= 1) {
|
operationList.removeIf(item -> item.getId().equals(oldItem.getId()));
|
operationList.add(targetPosition - 1, oldItem);
|
for (int i = 0; i < operationList.size(); i++) {
|
ProductionOrderRoutingOperation item = operationList.get(i);
|
int dragSort = i + 1;
|
if (!Integer.valueOf(dragSort).equals(item.getDragSort())) {
|
item.setDragSort(dragSort);
|
productionOrderRoutingOperationMapper.updateById(item);
|
}
|
}
|
return 1;
|
}
|
return 0;
|
}
|
}
|