package com.xjrsoft.module.material.service.impl; import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.github.yulichang.base.MPJBaseServiceImpl; import com.xjrsoft.module.material.dto.AddMaterialTaskAppendixDto; import com.xjrsoft.module.material.dto.AddMaterialTaskDto; import com.xjrsoft.module.material.dto.MaterialAssignUserDto; import com.xjrsoft.module.material.dto.MaterialTaskAssignAppendixDto; import com.xjrsoft.module.material.entity.MaterialTask; import com.xjrsoft.module.material.entity.MaterialTaskAppendix; import com.xjrsoft.module.material.entity.MaterialTaskAssign; import com.xjrsoft.module.material.mapper.MaterialTaskAppendixMapper; import com.xjrsoft.module.material.mapper.MaterialTaskAssignMapper; import com.xjrsoft.module.material.mapper.MaterialTaskMapper; import com.xjrsoft.module.material.service.IMaterialTaskService; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; /** * @title: 材料提交任务 * @Author baicai * @Date: 2023-10-31 * @Version 1.0 */ @Service @AllArgsConstructor public class MaterialTaskServiceImpl extends MPJBaseServiceImpl implements IMaterialTaskService { private final MaterialTaskMapper materialTaskMaterialTaskMapper; private final MaterialTaskAssignMapper materialTaskMaterialTaskAssignMapper; private final MaterialTaskAppendixMapper materialTaskMaterialTaskAppendixMapper; @Override @Transactional(rollbackFor = Exception.class) public Long add(AddMaterialTaskDto dto) { MaterialTask materialTask = BeanUtil.toBean(dto, MaterialTask.class); materialTask.setStatus(2); if(dto.getUserList() == null && !dto.getUserList().isEmpty()){ materialTask.setSubmitedPerson(dto.getUserList().size()); } materialTaskMaterialTaskMapper.insert(materialTask); for (MaterialAssignUserDto materialAssignUserDto : dto.getUserList()){ materialTaskMaterialTaskAssignMapper.insert(new MaterialTaskAssign(){{ setMaterialTaskId(materialTask.getId()); setUserId(materialAssignUserDto.getUserId()); setUserType(materialAssignUserDto.getUserType()); setUserNumber(materialAssignUserDto.getUserNumber()); setStatus(1); setExecutiveStatus(1); setSendMessage(dto.getSendMessageStatus()); }}); } // materialTaskMaterialTaskMapper.insert(materialTask); // if (materialTask.getMaterialTaskAssignList() != null && materialTask.getMaterialTaskAssignList().size() > 0) { // for (MaterialTaskAssign materialTaskAssign : materialTask.getMaterialTaskAssignList()) { // materialTaskAssign.setMaterialTaskId(materialTask.getId()); // materialTaskMaterialTaskAssignMapper.insert(materialTaskAssign); // } // } // for (MaterialTaskAppendix materialTaskAppendix : materialTask.getMaterialTaskAppendixList()) { // materialTaskAppendix.setMaterialTaskId(materialTask.getId()); // materialTaskMaterialTaskAppendixMapper.insert(materialTaskAppendix); // } return materialTask.getId(); } @Override @Transactional(rollbackFor = Exception.class) public Boolean update(MaterialTask materialTask) { materialTaskMaterialTaskMapper.updateById(materialTask); //********************************* MaterialTaskAssign 增删改 开始 *******************************************/ { if (materialTask.getMaterialTaskAssignList() != null && materialTask.getMaterialTaskAssignList().size() > 0) { // 查出所有子级的id List materialTaskAssignList = materialTaskMaterialTaskAssignMapper.selectList(Wrappers.lambdaQuery(MaterialTaskAssign.class).eq(MaterialTaskAssign::getMaterialTaskId, materialTask.getId()).select(MaterialTaskAssign::getId)); List materialTaskAssignIds = materialTaskAssignList.stream().map(MaterialTaskAssign::getId).collect(Collectors.toList()); //原有子表单 没有被删除的主键 List materialTaskAssignOldIds = materialTask.getMaterialTaskAssignList().stream().map(MaterialTaskAssign::getId).filter(Objects::nonNull).collect(Collectors.toList()); //找到需要删除的id List materialTaskAssignRemoveIds = materialTaskAssignIds.stream().filter(item -> !materialTaskAssignOldIds.contains(item)).collect(Collectors.toList()); for (MaterialTaskAssign materialTaskAssign : materialTask.getMaterialTaskAssignList()) { //如果不等于空则修改 if (materialTaskAssign.getId() != null) { materialTaskMaterialTaskAssignMapper.updateById(materialTaskAssign); } //如果等于空 则新增 else { //已经不存在的id 删除 materialTaskAssign.setMaterialTaskId(materialTask.getId()); materialTaskMaterialTaskAssignMapper.insert(materialTaskAssign); } } //已经不存在的id 删除 if (materialTaskAssignRemoveIds.size() > 0) { materialTaskMaterialTaskAssignMapper.deleteBatchIds(materialTaskAssignRemoveIds); } } } //********************************* MaterialTaskAssign 增删改 结束 *******************************************/ //********************************* MaterialTaskAppendix 增删改 开始 *******************************************/ { // 查出所有子级的id List materialTaskAppendixList = materialTaskMaterialTaskAppendixMapper.selectList(Wrappers.lambdaQuery(MaterialTaskAppendix.class).eq(MaterialTaskAppendix::getMaterialTaskId, materialTask.getId()).select(MaterialTaskAppendix::getId)); List materialTaskAppendixIds = materialTaskAppendixList.stream().map(MaterialTaskAppendix::getId).collect(Collectors.toList()); //原有子表单 没有被删除的主键 List materialTaskAppendixOldIds = materialTask.getMaterialTaskAppendixList().stream().map(MaterialTaskAppendix::getId).filter(Objects::nonNull).collect(Collectors.toList()); //找到需要删除的id List materialTaskAppendixRemoveIds = materialTaskAppendixIds.stream().filter(item -> !materialTaskAppendixOldIds.contains(item)).collect(Collectors.toList()); for (MaterialTaskAppendix materialTaskAppendix : materialTask.getMaterialTaskAppendixList()) { //如果不等于空则修改 if (materialTaskAppendix.getId() != null) { materialTaskMaterialTaskAppendixMapper.updateById(materialTaskAppendix); } //如果等于空 则新增 else { //已经不存在的id 删除 materialTaskAppendix.setMaterialTaskId(materialTask.getId()); materialTaskMaterialTaskAppendixMapper.insert(materialTaskAppendix); } } //已经不存在的id 删除 if (materialTaskAppendixRemoveIds.size() > 0) { materialTaskMaterialTaskAppendixMapper.deleteBatchIds(materialTaskAppendixRemoveIds); } } //********************************* MaterialTaskAppendix 增删改 结束 *******************************************/ return true; } @Override @Transactional(rollbackFor = Exception.class) public Boolean delete(List ids) { materialTaskMaterialTaskMapper.deleteBatchIds(ids); materialTaskMaterialTaskAssignMapper.delete(Wrappers.lambdaQuery(MaterialTaskAssign.class).in(MaterialTaskAssign::getMaterialTaskId, ids)); materialTaskMaterialTaskAppendixMapper.delete(Wrappers.lambdaQuery(MaterialTaskAppendix.class).in(MaterialTaskAppendix::getMaterialTaskId, ids)); return true; } @Override @Transactional(rollbackFor = Exception.class) public Boolean submited(MaterialTaskAssignAppendixDto materialTaskAssignAppendixDto) { if (materialTaskAssignAppendixDto.getMaterialTaskAppendixList() != null && materialTaskAssignAppendixDto.getMaterialTaskAppendixList().size() > 0) { MaterialTaskAssign materialTaskAssign = materialTaskMaterialTaskAssignMapper.selectByIdDeep(materialTaskAssignAppendixDto.getMaterialTaskAssignId()); Integer oldStatus = materialTaskAssign.getStatus(); materialTaskAssign.setStatus(2); if (oldStatus == 1) { MaterialTask materialTask = materialTaskMaterialTaskMapper.selectByIdDeep(materialTaskAssign.getMaterialTaskId()); materialTask.setSubmitedPerson(materialTask.getSubmitedPerson() + 1); materialTaskMaterialTaskMapper.updateById(materialTask); } materialTaskMaterialTaskAssignMapper.updateById(materialTaskAssign); if (oldStatus == 4) { // 重做删除原来的 materialTaskMaterialTaskAppendixMapper.delete(Wrappers.lambdaQuery(MaterialTaskAppendix.class).eq(MaterialTaskAppendix::getMaterialTaskId, materialTaskAssignAppendixDto.getMaterialTaskAssignId())); } for (AddMaterialTaskAppendixDto materialTaskAppendixDto : materialTaskAssignAppendixDto.getMaterialTaskAppendixList()) { MaterialTaskAppendix materialTaskAppendix = new MaterialTaskAppendix(); materialTaskAppendix.setMaterialTaskId(materialTaskAssignAppendixDto.getMaterialTaskAssignId()); materialTaskAppendix.setFileId(materialTaskAppendixDto.getFileId()); materialTaskMaterialTaskAppendixMapper.insert(materialTaskAppendix); } } return true; } }