package com.gkhy.exam.system.service.impl;
import cn.hutool.core.util.ObjectUtil;
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.gkhy.exam.common.api.CommonPage;
import com.gkhy.exam.common.api.CommonResult;
import com.gkhy.exam.common.constant.UserConstant;
import com.gkhy.exam.common.utils.PageUtils;
import com.gkhy.exam.common.utils.SecurityUtils;
import com.gkhy.exam.system.domain.*;
import com.gkhy.exam.system.mapper.AnnualMaintenanceServiceContentMapper;
import com.gkhy.exam.system.mapper.AnnualMaintenanceServiceMapper;
import com.gkhy.exam.system.mapper.AnnualMaintenanceServiceUserMapper;
import com.gkhy.exam.system.service.AnnualMaintenanceServiceService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
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.Set;
import java.util.stream.Collectors;
import static net.sf.jsqlparser.parser.feature.Feature.update;
/**
*
* 年度基础设施维护保养表 服务实现类
*
*
* @author hh
* @since 2025-07-31 16:12:02
*/
@Service
public class AnnualMaintenanceServiceServiceImpl extends ServiceImpl implements AnnualMaintenanceServiceService {
@Autowired
private AnnualMaintenanceServiceMapper annualMaintenanceServiceMapper;
@Autowired
private AnnualMaintenanceServiceUserMapper annualMaintenanceServiceUserMapper;
@Autowired
private AnnualMaintenanceServiceContentMapper annualMaintenanceServiceContentMapper;
@Override
public CommonPage selectAnnualMaintenanceServiceList(AnnualMaintenanceService annualMaintenanceService) {
PageUtils.startPage();
List annualMaintenanceServices = annualMaintenanceServiceMapper.selectAnnualMaintenanceServiceList(annualMaintenanceService);
return CommonPage.restPage(annualMaintenanceServices);
}
@Override
public CommonResult saveAnnualMaintenanceService(AnnualMaintenanceService annualMaintenanceService) {
List annualMaintenanceServiceContentList = annualMaintenanceService.getAnnualMaintenanceServiceContentList();
List annualMaintenanceServiceUserList = annualMaintenanceService.getAnnualMaintenanceServiceUserList();
if (ObjectUtil.isEmpty(annualMaintenanceServiceContentList) || ObjectUtil.isEmpty(annualMaintenanceServiceUserList)) {
return CommonResult.failed("请填写保养内容及保养人员数据");
}
checkUser(annualMaintenanceServiceUserList);
boolean isAdd = annualMaintenanceService.getId() == null;
int i = 0;
if (isAdd) {
annualMaintenanceService.setCreateBy(SecurityUtils.getUsername());
annualMaintenanceService.setCreateTime(LocalDateTime.now());
i = annualMaintenanceServiceMapper.insert(annualMaintenanceService);
} else {
annualMaintenanceService.setUpdateBy(SecurityUtils.getUsername());
annualMaintenanceService.setUpdateTime(LocalDateTime.now());
i = annualMaintenanceServiceMapper.updateById(annualMaintenanceService);
}
if (i > 0) {
batchSaveContent(isAdd, annualMaintenanceService.getId(), annualMaintenanceServiceContentList);
batchSaveUser(annualMaintenanceService.getId(), annualMaintenanceServiceUserList, annualMaintenanceService.getDelServiceUserIds());
return CommonResult.success();
}
return CommonResult.failed();
}
private void batchSaveContent(boolean isAdd, Long serviceId, List annualMaintenanceServiceContentList) {
if (isAdd) {
annualMaintenanceServiceContentList.forEach(content -> {
content.setAnnualMaintenanceServiceId(serviceId);
content.setCreateBy(SecurityUtils.getUsername());
content.setCreateTime(LocalDateTime.now());
});
int insert = annualMaintenanceServiceContentMapper.batchInsert(annualMaintenanceServiceContentList);
if (insert <= 0) {
throw new RuntimeException("保存保养内容失败");
}
} else {
annualMaintenanceServiceContentList.forEach(content -> {
content.setUpdateBy(SecurityUtils.getUsername());
content.setUpdateTime(LocalDateTime.now());
});
int update = annualMaintenanceServiceContentMapper.batchUpdate(annualMaintenanceServiceContentList);
if (update <= 0) {
throw new RuntimeException("保存保养内容失败");
}
}
}
private void batchSaveUser(Long serviceId, List annualMaintenanceServiceUserList, List delServiceUserIds) {
if (ObjectUtil.isNotEmpty(delServiceUserIds)) {
int update1 = annualMaintenanceServiceUserMapper.update(new AnnualMaintenanceServiceUser(),
new LambdaUpdateWrapper().set(AnnualMaintenanceServiceUser::getDelFlag, UserConstant.DEPT_DISABLE)
.set(AnnualMaintenanceServiceUser::getUpdateTime, LocalDateTime.now()).set(AnnualMaintenanceServiceUser::getUpdateBy, SecurityUtils.getUsername())
.in(AnnualMaintenanceServiceUser::getId, delServiceUserIds)
);
if (update1 <= 0) {
throw new RuntimeException("保存失败");
}
}
List addUser = annualMaintenanceServiceUserList.stream()
.filter(user -> null == user.getId())
.collect(Collectors.toList());
addUser.forEach(user -> {
user.setCreateBy(SecurityUtils.getUsername());
user.setCreateTime(LocalDateTime.now());
user.setAnnualMaintenanceServiceId(serviceId);
});
int i = annualMaintenanceServiceUserMapper.batchInsert(addUser);
if (i <= 0) {
throw new RuntimeException("保存失败");
}
List updateUser = annualMaintenanceServiceUserList.stream()
.filter(user -> null != user.getId())
.collect(Collectors.toList());
updateUser.forEach(user -> {
user.setUpdateBy(SecurityUtils.getUsername());
user.setUpdateTime(LocalDateTime.now());
});
int update = annualMaintenanceServiceUserMapper.batchUpdate(updateUser);
if (update <= 0) {
throw new RuntimeException("保存失败");
}
}
private void checkUser(List annualMaintenanceServiceUserList) {
List filteredUsers = annualMaintenanceServiceUserList.stream()
.filter(user -> 1 == user.getUserType())
.collect(Collectors.toList());
if (ObjectUtil.isEmpty(filteredUsers)) {
throw new RuntimeException("请填写一级保养操作人员");
}
Set userIdSet = filteredUsers.stream()
.map(AnnualMaintenanceServiceUser::getUserId)
.collect(Collectors.toSet());
if (userIdSet.size() != filteredUsers.size()) {
throw new RuntimeException("一级保养操作人员重复");
}
List filteredUsers2 = annualMaintenanceServiceUserList.stream()
.filter(user -> 2 == user.getUserType())
.collect(Collectors.toList());
if (ObjectUtil.isEmpty(filteredUsers2)) {
throw new RuntimeException("请填写一级保养检查人员");
}
Set userIdSet2 = filteredUsers2.stream()
.map(AnnualMaintenanceServiceUser::getUserId)
.collect(Collectors.toSet());
if (userIdSet2.size() != filteredUsers2.size()) {
throw new RuntimeException("一级保养检查人员重复");
}
List filteredUsers3 = annualMaintenanceServiceUserList.stream()
.filter(user -> 3 == user.getUserType())
.collect(Collectors.toList());
if (ObjectUtil.isEmpty(filteredUsers3)) {
throw new RuntimeException("请填写二级保养操作人员");
}
Set userIdSet3 = filteredUsers.stream()
.map(AnnualMaintenanceServiceUser::getUserId)
.collect(Collectors.toSet());
if (userIdSet3.size() != filteredUsers3.size()) {
throw new RuntimeException("二级保养操作人员重复");
}
List filteredUsers4 = annualMaintenanceServiceUserList.stream()
.filter(user -> 4 == user.getUserType())
.collect(Collectors.toList());
if (ObjectUtil.isEmpty(filteredUsers4)) {
throw new RuntimeException("请填写二级保养检查人员");
}
Set userIdSet4 = filteredUsers2.stream()
.map(AnnualMaintenanceServiceUser::getUserId)
.collect(Collectors.toSet());
if (userIdSet4.size() != filteredUsers4.size()) {
throw new RuntimeException("二级保养检查人员重复");
}
}
@Override
public CommonResult getAnnualMaintenanceService(Integer id) {
AnnualMaintenanceService annualMaintenanceService = annualMaintenanceServiceMapper.selectById(id);
if (ObjectUtils.isNotEmpty(annualMaintenanceService)) {
List annualMaintenanceServiceContentList = annualMaintenanceServiceContentMapper.selectList(
new LambdaQueryWrapper().eq(AnnualMaintenanceServiceContent::getAnnualMaintenanceServiceId, id)
.eq(AnnualMaintenanceServiceContent::getDelFlag, UserConstant.ENABLE).orderByAsc(AnnualMaintenanceServiceContent::getServiceType));
annualMaintenanceService.setAnnualMaintenanceServiceContentList(annualMaintenanceServiceContentList);
List annualMaintenanceServiceUserList = annualMaintenanceServiceUserMapper.selectList(
new LambdaQueryWrapper().eq(AnnualMaintenanceServiceUser::getAnnualMaintenanceServiceId, id)
.eq(AnnualMaintenanceServiceUser::getDelFlag, UserConstant.ENABLE).orderByAsc(AnnualMaintenanceServiceUser::getUserType));
annualMaintenanceService.setAnnualMaintenanceServiceUserList(annualMaintenanceServiceUserList);
}
return CommonResult.success(annualMaintenanceService);
}
@Override
@Transactional
public CommonResult deletedAnnualMaintenanceService(Integer id) {
AnnualMaintenanceService annualMaintenanceService = new AnnualMaintenanceService();
annualMaintenanceService.setId(Long.valueOf(id));
annualMaintenanceService.setDelFlag(UserConstant.DEPT_DISABLE);
int update = annualMaintenanceServiceMapper.updateById(annualMaintenanceService);
if (update > 0) {
int update1 = annualMaintenanceServiceUserMapper.update(new AnnualMaintenanceServiceUser(),
new LambdaUpdateWrapper().eq(AnnualMaintenanceServiceUser::getAnnualMaintenanceServiceId, id)
.set(AnnualMaintenanceServiceUser::getDelFlag, UserConstant.DEPT_DISABLE)
.set(AnnualMaintenanceServiceUser::getUpdateTime, LocalDateTime.now())
.set(AnnualMaintenanceServiceUser::getUpdateBy, SecurityUtils.getUsername()));
if (update1 <= 0) {
throw new RuntimeException("删除失败");
}
int update2 = annualMaintenanceServiceContentMapper.update(new AnnualMaintenanceServiceContent(),
new LambdaUpdateWrapper().eq(AnnualMaintenanceServiceContent::getAnnualMaintenanceServiceId, id)
.set(AnnualMaintenanceServiceContent::getDelFlag, UserConstant.DEPT_DISABLE)
.set(AnnualMaintenanceServiceContent::getUpdateTime, LocalDateTime.now())
.set(AnnualMaintenanceServiceContent::getUpdateBy, SecurityUtils.getUsername())
);
if (update2 <= 0) {
throw new RuntimeException("删除失败");
}
return CommonResult.success();
}
return CommonResult.failed();
}
}