package com.ruoyi.production.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.production.dto.ProductionMachineRecordDto; import com.ruoyi.production.mapper.ProductWorkOrderMapper; import com.ruoyi.production.mapper.ProductionMachineRecordMapper; import com.ruoyi.production.pojo.ProductWorkOrder; import com.ruoyi.production.pojo.ProductionMachineRecord; import com.ruoyi.production.service.ProductionMachineRecordService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** *

* 生产上机记录表 服务实现类 *

* * @author 芯导软件(江苏)有限公司 * @since 2026-04-27 06:12:04 */ @Service @RequiredArgsConstructor public class ProductionMachineRecordServiceImpl extends ServiceImpl implements ProductionMachineRecordService { private final ProductionMachineRecordMapper productionMachineRecordMapper; private final ProductWorkOrderMapper productWorkOrderMapper; @Override public IPage listPage(Page page, ProductionMachineRecordDto productionMachineRecord) { return productionMachineRecordMapper.listPage(page, productionMachineRecord); } @Override @Transactional(rollbackFor = Exception.class) public Boolean add(List productionMachineRecord) { for (ProductionMachineRecordDto productionMachineRecordDto : productionMachineRecord) { this.saveOrUpdate(productionMachineRecordDto); ProductWorkOrder productWorkOrder = productWorkOrderMapper.selectById(productionMachineRecordDto.getWorkOrderId()); if (productWorkOrder != null) { String userIds = productWorkOrder.getUserIds(); String operatorId = productionMachineRecordDto.getOperatorId(); if (ObjectUtils.isNotEmpty(operatorId)) { if (userIds == null || userIds.isEmpty()) { productWorkOrder.setUserIds(operatorId); } else { List userIdList = new ArrayList<>(Arrays.asList(userIds.split(","))); List operatorIdList = Arrays.asList(operatorId.split(",")); for (String opId : operatorIdList) { String trimmedOpId = opId.trim(); if (!userIdList.contains(trimmedOpId)) { userIdList.add(trimmedOpId); } } productWorkOrder.setUserIds(String.join(",", userIdList)); } } productWorkOrder.setDeviceId(productionMachineRecordDto.getMachineId()); productWorkOrderMapper.updateById(productWorkOrder); } else { throw new RuntimeException("操作失败:工单信息不存在"); } } return true; } @Override @Transactional(rollbackFor = Exception.class) public Object delete(List ids) { List productionMachineRecords = this.listByIds(ids); for (ProductionMachineRecord productionMachineRecord : productionMachineRecords) { ProductWorkOrder productWorkOrder = productWorkOrderMapper.selectById(productionMachineRecord.getWorkOrderId()); if (productWorkOrder != null) { String operatorId = productionMachineRecord.getOperatorId(); if (operatorId != null && !operatorId.isEmpty()) { List operatorIdList = Arrays.asList(operatorId.split(",")); List userIdsToRemove = new ArrayList<>(); for (String opId : operatorIdList) { String trimmedOpId = opId.trim(); Long count = this.lambdaQuery() .eq(ProductionMachineRecord::getWorkOrderId, productionMachineRecord.getWorkOrderId()) .ne(ProductionMachineRecord::getId, productionMachineRecord.getId()) .apply("FIND_IN_SET({0}, operator_id)", trimmedOpId) .count(); if (count == 0) { userIdsToRemove.add(trimmedOpId); } } if (!userIdsToRemove.isEmpty()) { String userIds = productWorkOrder.getUserIds(); if (userIds != null && !userIds.isEmpty()) { List userIdList = new ArrayList<>(Arrays.asList(userIds.split(","))); userIdList.removeAll(userIdsToRemove); productWorkOrder.setUserIds(String.join(",", userIdList)); productWorkOrderMapper.updateById(productWorkOrder); } } } } } return this.removeByIds(ids); } }