package com.gkhy.exam.system.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gkhy.exam.common.api.CommonPage;
import com.gkhy.exam.common.api.CommonResult;
import com.gkhy.exam.common.constant.UserConstant;
import com.gkhy.exam.common.exception.ApiException;
import com.gkhy.exam.common.utils.PageUtils;
import com.gkhy.exam.common.utils.SecurityUtils;
import com.gkhy.exam.system.domain.CalibrationMonitoringEquipment;
import com.gkhy.exam.system.mapper.CalibrationMonitoringEquipmentMapper;
import com.gkhy.exam.system.service.CalibrationMonitoringEquipmentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.List;
import java.util.stream.Collectors;
/**
*
* 监测和测量设备校准确认表 服务实现类
*
*
* @author hh
* @since 2025-08-25 15:01:44
*/
@Service
public class CalibrationMonitoringEquipmentServiceImpl extends ServiceImpl implements CalibrationMonitoringEquipmentService {
@Autowired
private CalibrationMonitoringEquipmentMapper calibrationMonitoringEquipmentMapper;
@Override
public CommonPage selectCalibrationMonitoringEquipmentList(CalibrationMonitoringEquipment calibrationMonitoringEquipment) {
PageUtils.startPage();
List calibrationMonitoringEquipments = calibrationMonitoringEquipmentMapper.selectCalibrationMonitoringEquipmentList(calibrationMonitoringEquipment);
return CommonPage.restPage(calibrationMonitoringEquipments);
}
@Override
public CommonResult saveCalibrationMonitoringEquipment(CalibrationMonitoringEquipment calibrationMonitoringEquipment) {
int i = 0;
if (calibrationMonitoringEquipment.getId() == null){
calibrationMonitoringEquipment.setCreateBy(SecurityUtils.getUsername());
calibrationMonitoringEquipment.setCreateTime(LocalDateTime.now());
i = calibrationMonitoringEquipmentMapper.insert(calibrationMonitoringEquipment);
}else {
calibrationMonitoringEquipment.setUpdateTime(LocalDateTime.now());
calibrationMonitoringEquipment.setUpdateBy(SecurityUtils.getUsername());
i = calibrationMonitoringEquipmentMapper.updateById(calibrationMonitoringEquipment);
}
return i > 0 ? CommonResult.success() : CommonResult.failed();
}
@Override
public CommonResult deletedCalibrationMonitoringEquipment(Long id) {
int i = calibrationMonitoringEquipmentMapper.update(new CalibrationMonitoringEquipment(),
new LambdaUpdateWrapper().eq(CalibrationMonitoringEquipment::getId, id).set(CalibrationMonitoringEquipment::getDelFlag, UserConstant.DISENABLE)
.set(CalibrationMonitoringEquipment::getUpdateTime, LocalDateTime.now()).set(CalibrationMonitoringEquipment::getUpdateBy, SecurityUtils.getUsername())
);
return CommonResult.success();
}
@Override
@Transactional(rollbackFor = Exception.class)
public CommonResult copyCalibrationMonitoringEquipment(Integer companyId, String sourceYear, String targetYear) {
if (ObjectUtils.isEmpty(companyId)) {
return CommonResult.failed("公司ID不能为空");
}
if (ObjectUtils.isEmpty(sourceYear) || ObjectUtils.isEmpty(targetYear)) {
return CommonResult.failed("源年份和目标年份不能为空");
}
if (sourceYear.equals(targetYear)) {
return CommonResult.failed("源年份和目标年份不能相同");
}
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(CalibrationMonitoringEquipment::getDelFlag, UserConstant.ENABLE)
.eq(CalibrationMonitoringEquipment::getCompanyId, companyId);
List sourceEquipments = calibrationMonitoringEquipmentMapper.selectList(queryWrapper);
if (ObjectUtils.isEmpty(sourceEquipments)) {
return CommonResult.failed("未找到源公司的设备校准数据");
}
List filteredEquipments = sourceEquipments.stream()
.filter(equipment -> equipment.getCalibrationTime() != null
&& String.valueOf(equipment.getCalibrationTime().getYear()).equals(sourceYear))
.collect(Collectors.toList());
if (ObjectUtils.isEmpty(filteredEquipments)) {
return CommonResult.failed("未找到" + sourceYear + "年的设备校准数据");
}
int successCount = 0;
for (CalibrationMonitoringEquipment sourceEquipment : filteredEquipments) {
CalibrationMonitoringEquipment newEquipment = new CalibrationMonitoringEquipment();
newEquipment.setCompanyId(sourceEquipment.getCompanyId());
newEquipment.setDeviceName(sourceEquipment.getDeviceName());
newEquipment.setDeviceNumber(sourceEquipment.getDeviceNumber());
newEquipment.setCalibrationNumber(sourceEquipment.getCalibrationNumber());
LocalDateTime newCalibrationTime = sourceEquipment.getCalibrationTime()
.withYear(Integer.parseInt(targetYear));
newEquipment.setCalibrationTime(newCalibrationTime);
newEquipment.setCalibrationCompany(sourceEquipment.getCalibrationCompany());
newEquipment.setCalibrationResult(sourceEquipment.getCalibrationResult());
newEquipment.setConfirmUser(sourceEquipment.getConfirmUser());
newEquipment.setConfirmTime(sourceEquipment.getConfirmTime());
newEquipment.setExecutiveUser(sourceEquipment.getExecutiveUser());
newEquipment.setExecutiveTime(sourceEquipment.getExecutiveTime());
newEquipment.setDelFlag(UserConstant.ENABLE);
newEquipment.setCreateBy(SecurityUtils.getUsername());
newEquipment.setCreateTime(LocalDateTime.now());
newEquipment.setVersion(0);
int insertResult = calibrationMonitoringEquipmentMapper.insert(newEquipment);
if (insertResult > 0) {
successCount++;
}
}
if (successCount == 0) {
throw new ApiException("复制设备校准数据失败");
}
return CommonResult.success("成功复制" + successCount + "条设备校准数据");
}
}