逻辑:
企业注销实现软删除,在企业表中添加字段deleted,0为false,1为true。企业注销后deleted字段由0变为1,并由企业给企业中的用户发送消息,同时用户表中的company_id变为null,企业中的部门也随之删除,用户表中的department_id也变为null。
ServiceImpl层:
@Override
@Transactional
public void deleteCompany(Integer companyId) {
//企业注销
Company company = companyRepository.findCompanyById(companyId);
//发送注销通知
Notice deleteNotice = new Notice();
deleteNotice.setTheme("您所在的公司 " + company.getName() + " 已注销 ,您已被移出企业 ");
deleteNotice.setType(3);
deleteNotice.setIsDealt(false);
deleteNotice.setFromId(companyId);
deleteNotice.setFromType(true);
List<User> ul = userRepository.findByCompanyId(companyId);
if (!ul.isEmpty()) {
for (User user : ul) {
user.setCompanyId(null);
user.setPermission(1);
user.setDepartmentId(null);
Notice deleteNo;
try {
deleteNo = deleteNotice.clone();
deleteNo.setToId(user.getId());
deleteNo.setToType(false);
noticeRepository.save(deleteNo);
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
userRepository.save(user);
}
}
List<Department> dl = departmentRepository.findDepartmentsByCompanyId(companyId);
if (!dl.isEmpty()) {
for (Department department : dl) {
departmentRepository.deleteDepartmentById(department.getId());
}
}
company.setDeleted(true);
userRepository.flush();
noticeRepository.flush();
companyRepository.saveAndFlush(company);
}
Controller层:
@PostMapping("/delete")
public Result<String> delete(@RequestParam Integer companyId) {
if (companyService.getCompanyByDeletedAndId(companyId) != null) {
companyService.deleteCompany(companyId);
return Result.success("注销成功");
} else {
return Result.error(ErrorEnum.CompanyNotExistError);
}
}