package com.sinata.system.service.impl;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sinata.common.core.domain.entity.SysDictData;
import com.sinata.common.entity.PageDTO;
import com.sinata.common.exception.ServiceException;
import com.sinata.common.utils.BeanUtils;
import com.sinata.common.utils.CollUtils;
import com.sinata.common.utils.StringUtils;
import com.sinata.system.domain.MwAttachment;
import com.sinata.system.domain.MwProtectionTask;
import com.sinata.system.domain.MwProtectionTaskEquipment;
import com.sinata.system.domain.dto.MwProtectionTaskDTO;
import com.sinata.system.domain.query.MwProtectionTaskQuery;
import com.sinata.system.domain.vo.MwAttachmentVO;
import com.sinata.system.domain.vo.MwProtectionTaskEquipmentVO;
import com.sinata.system.domain.vo.MwProtectionTaskVO;
import com.sinata.system.enums.AttachmentTypeEnum;
import com.sinata.system.mapper.MwProtectionTaskMapper;
import com.sinata.system.service.ISysDictDataService;
import com.sinata.system.service.MwAttachmentService;
import com.sinata.system.service.MwProtectionTaskEquipmentService;
import com.sinata.system.service.MwProtectionTaskService;
import com.sinata.system.service.SysDepartmentService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Objects;
/**
*
* 防护作业 服务实现类
*
*
* @author mitao
* @since 2024-12-02
*/
@Service
@RequiredArgsConstructor
public class MwProtectionTaskServiceImpl extends ServiceImpl implements MwProtectionTaskService {
private final SysDepartmentService sysDepartmentService;
private final MwProtectionTaskEquipmentService mwProtectionTaskEquipmentService;
private final MwAttachmentService mwAttachmentService;
private final ISysDictDataService sysDictDataService;
/**
* 防护作业分页列表
*
* @param query
* @return
*/
@Override
public PageDTO pageList(MwProtectionTaskQuery query) {
String treeCode = sysDepartmentService.getTreeCodeByDepartmentId(query.getDepartmentId());
if (StringUtils.isBlank(treeCode)) {
return PageDTO.empty(0L, 0L);
}
Page page = baseMapper.pageList(new Page<>(query.getPageCurr(), query.getPageSize()), query, treeCode);
return PageDTO.of(page);
}
/**
* 防护作业详情
*
* @param id
* @return
*/
@Override
public MwProtectionTaskVO detail(Long id) {
MwProtectionTask task = getById(id);
MwProtectionTaskVO mwProtectionTaskVO = null;
if (Objects.nonNull(task)) {
mwProtectionTaskVO = BeanUtils.copyBean(task, MwProtectionTaskVO.class);
//查询器具列表
List protectionTaskEquipmentVOList = mwProtectionTaskEquipmentService.getUsageEquipmentListByTaskId(id);
mwProtectionTaskVO.setEquipmentList(protectionTaskEquipmentVOList);
//查询附件列表
List list = mwAttachmentService.lambdaQuery().eq(MwAttachment::getType, AttachmentTypeEnum.PROTECTION_TASK.getCode()).eq(MwAttachment::getTargetId, id).list();
mwProtectionTaskVO.setAttachmentList(BeanUtils.copyToList(list, MwAttachmentVO.class));
return mwProtectionTaskVO;
}
return mwProtectionTaskVO;
}
/**
* 新增防护作业
*
* @param dto
* @return
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void add(MwProtectionTaskDTO dto) {
MwProtectionTask mwProtectionTask = BeanUtils.copyBean(dto, MwProtectionTask.class);
SysDictData dictData = sysDictDataService.lambdaQuery().eq(SysDictData::getDictCode, dto.getProtectiveWorkType()).one();
if (Objects.nonNull(dictData)) {
mwProtectionTask.setProtectiveWorkTypeStr(dictData.getDictLabel());
}
save(mwProtectionTask);
//保存使用器具列表
List mwProtectionTaskEquipments = BeanUtils.copyToList(dto.getEquipmentList(), MwProtectionTaskEquipment.class);
mwProtectionTaskEquipments.forEach(equipment -> equipment.setProtectionTaskId(mwProtectionTask.getId()));
mwProtectionTaskEquipmentService.saveBatch(mwProtectionTaskEquipments);
//保存附件
if (CollUtils.isNotEmpty(dto.getAttachmentList())) {
List mwAttachments = BeanUtils.copyToList(dto.getAttachmentList(), MwAttachment.class);
mwAttachments.forEach(attachment -> {
attachment.setTargetId(mwProtectionTask.getId());
attachment.setType(AttachmentTypeEnum.PROTECTION_TASK.getCode());
});
mwAttachmentService.saveBatch(mwAttachments);
}
}
/**
* 编辑防护作业
*
* @param dto
* @return
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void edit(MwProtectionTaskDTO dto) {
if (Objects.isNull(dto.getId())) {
throw new ServiceException("防护作业id不能为空");
}
MwProtectionTask mwProtectionTask = BeanUtils.copyBean(dto, MwProtectionTask.class);
SysDictData dictData = sysDictDataService.lambdaQuery().eq(SysDictData::getDictCode, dto.getProtectiveWorkType()).one();
if (Objects.nonNull(dictData)) {
mwProtectionTask.setProtectiveWorkTypeStr(dictData.getDictLabel());
}
updateById(mwProtectionTask);
//删除原有的使用器具
mwProtectionTaskEquipmentService.lambdaUpdate().eq(MwProtectionTaskEquipment::getProtectionTaskId, dto.getId()).remove();
//保存使用器具列表
List mwProtectionTaskEquipments = BeanUtils.copyToList(dto.getEquipmentList(), MwProtectionTaskEquipment.class);
mwProtectionTaskEquipments.forEach(equipment -> equipment.setProtectionTaskId(mwProtectionTask.getId()));
mwProtectionTaskEquipmentService.saveBatch(mwProtectionTaskEquipments);
//保存附件
if (CollUtils.isNotEmpty(dto.getAttachmentList())) {
//删除原有的附件
mwAttachmentService.lambdaUpdate().eq(MwAttachment::getType, AttachmentTypeEnum.PROTECTION_TASK.getCode()).eq(MwAttachment::getTargetId, dto.getId()).remove();
List mwAttachments = BeanUtils.copyToList(dto.getAttachmentList(), MwAttachment.class);
mwAttachments.forEach(attachment -> {
attachment.setTargetId(mwProtectionTask.getId());
attachment.setType(AttachmentTypeEnum.PROTECTION_TASK.getCode());
});
mwAttachmentService.saveBatch(mwAttachments);
}
}
/**
* 删除
*
* @param id
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void delete(Long id) {
removeById(id);
//删除使用器具
mwProtectionTaskEquipmentService.lambdaUpdate().eq(MwProtectionTaskEquipment::getProtectionTaskId, id).remove();
//删除附件
mwAttachmentService.lambdaUpdate().eq(MwAttachment::getType, AttachmentTypeEnum.PROTECTION_TASK.getCode()).eq(MwAttachment::getTargetId, id).remove();
}
}