diff --git a/tlias-web-management/src/main/java/com/inmind/controller/DeptController.java b/tlias-web-management/src/main/java/com/inmind/controller/DeptController.java index b729bc3..3f4139e 100644 --- a/tlias-web-management/src/main/java/com/inmind/controller/DeptController.java +++ b/tlias-web-management/src/main/java/com/inmind/controller/DeptController.java @@ -38,7 +38,7 @@ public class DeptController { 删除部门 */ @DeleteMapping("/{id}") - public Result delete(@PathVariable Integer id){ + public Result delete(@PathVariable Integer id) throws Exception { log.info("删除部门:{}",id); deptService.delete(id); return Result.success(); diff --git a/tlias-web-management/src/main/java/com/inmind/mapper/DeptLogMapper.java b/tlias-web-management/src/main/java/com/inmind/mapper/DeptLogMapper.java new file mode 100644 index 0000000..547a916 --- /dev/null +++ b/tlias-web-management/src/main/java/com/inmind/mapper/DeptLogMapper.java @@ -0,0 +1,13 @@ +package com.inmind.mapper; + +import com.inmind.pojo.DeptLog; +import org.apache.ibatis.annotations.Insert; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface DeptLogMapper { + + @Insert("insert into dept_log(create_time,description) values(#{createTime},#{description})") + void insert(DeptLog log); + +} diff --git a/tlias-web-management/src/main/java/com/inmind/mapper/EmpMapper.java b/tlias-web-management/src/main/java/com/inmind/mapper/EmpMapper.java index 68b311c..4f24608 100644 --- a/tlias-web-management/src/main/java/com/inmind/mapper/EmpMapper.java +++ b/tlias-web-management/src/main/java/com/inmind/mapper/EmpMapper.java @@ -1,6 +1,7 @@ package com.inmind.mapper; import com.inmind.pojo.Emp; +import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; @@ -43,4 +44,7 @@ public interface EmpMapper { @Select("select * from emp where username =#{username} and password = #{password} ") Emp getEmpByUserNameAndPassWord(Emp emp); + + @Delete("delete from emp where dept_id = #{deptId}") + void deleteByDeptId(Integer deptId); } diff --git a/tlias-web-management/src/main/java/com/inmind/pojo/DeptLog.java b/tlias-web-management/src/main/java/com/inmind/pojo/DeptLog.java new file mode 100644 index 0000000..8799f28 --- /dev/null +++ b/tlias-web-management/src/main/java/com/inmind/pojo/DeptLog.java @@ -0,0 +1,16 @@ +package com.inmind.pojo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class DeptLog { + private Integer id; + private LocalDateTime createTime; + private String description; +} diff --git a/tlias-web-management/src/main/java/com/inmind/service/DeptLogService.java b/tlias-web-management/src/main/java/com/inmind/service/DeptLogService.java new file mode 100644 index 0000000..4ad8db1 --- /dev/null +++ b/tlias-web-management/src/main/java/com/inmind/service/DeptLogService.java @@ -0,0 +1,9 @@ +package com.inmind.service; + + +import com.inmind.pojo.DeptLog; + +public interface DeptLogService { + + void insert(DeptLog deptLog); +} diff --git a/tlias-web-management/src/main/java/com/inmind/service/DeptService.java b/tlias-web-management/src/main/java/com/inmind/service/DeptService.java index c605079..513ede0 100644 --- a/tlias-web-management/src/main/java/com/inmind/service/DeptService.java +++ b/tlias-web-management/src/main/java/com/inmind/service/DeptService.java @@ -1,6 +1,7 @@ package com.inmind.service; import com.inmind.pojo.Dept; +import org.springframework.transaction.annotation.Transactional; import java.util.List; @@ -9,7 +10,7 @@ public interface DeptService { List list(); //根据id删除部门 - void delete(Integer id); + void delete(Integer id) throws Exception; //新增部门 void add(Dept dept); diff --git a/tlias-web-management/src/main/java/com/inmind/service/impl/DeptLogServiceImpl.java b/tlias-web-management/src/main/java/com/inmind/service/impl/DeptLogServiceImpl.java new file mode 100644 index 0000000..ee2b396 --- /dev/null +++ b/tlias-web-management/src/main/java/com/inmind/service/impl/DeptLogServiceImpl.java @@ -0,0 +1,23 @@ +package com.inmind.service.impl; + +import com.inmind.mapper.DeptLogMapper; +import com.inmind.pojo.DeptLog; +import com.inmind.service.DeptLogService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class DeptLogServiceImpl implements DeptLogService { + + @Autowired + private DeptLogMapper deptLogMapper; + + //将部门日志传播行为设置为必须新建一个新的事务,它的操作,不受其他事务所影响 + @Transactional(propagation = Propagation.REQUIRES_NEW) + @Override + public void insert(DeptLog deptLog) { + deptLogMapper.insert(deptLog); + } +} diff --git a/tlias-web-management/src/main/java/com/inmind/service/impl/DeptServiceImpl.java b/tlias-web-management/src/main/java/com/inmind/service/impl/DeptServiceImpl.java index 32d6041..f89e51f 100644 --- a/tlias-web-management/src/main/java/com/inmind/service/impl/DeptServiceImpl.java +++ b/tlias-web-management/src/main/java/com/inmind/service/impl/DeptServiceImpl.java @@ -1,10 +1,14 @@ package com.inmind.service.impl; import com.inmind.mapper.DeptMapper; +import com.inmind.mapper.EmpMapper; import com.inmind.pojo.Dept; +import com.inmind.pojo.DeptLog; +import com.inmind.service.DeptLogService; import com.inmind.service.DeptService; 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; @@ -15,6 +19,12 @@ public class DeptServiceImpl implements DeptService { @Autowired private DeptMapper deptMapper; + //注入一个员工Mapper,操作员工数据 + @Autowired + private EmpMapper empMapper; + @Autowired + private DeptLogService deptLogService; + //查询部门列表 @Override public List list() { //调用deptMapper获取部门列表数据 @@ -23,9 +33,29 @@ public class DeptServiceImpl implements DeptService { } //根据id删除部门 + @Transactional(rollbackFor = Exception.class)//让当前方法,处于事务管理下(在方法调用前,执行start transaction) @Override - public void delete(Integer id) { - deptMapper.delete(id); + public void delete(Integer id) throws Exception { + try { + //不仅删除对应部门数据 + deptMapper.delete(id); + //进行一些业务逻辑代码,假设业务出现了异常 +// int a = 1/0; + //抛出一个编译时异常 + if (true) { + throw new Exception("出错了..."); + } + //还要删除该部门下的员工数据(根据部门ID删除相关的员工) + empMapper.deleteByDeptId(id); + } catch (Exception e) { + throw new RuntimeException(e); + } finally { + //调用部门日志记录业务的插入功能,进行部门日志记录操作 + DeptLog deptLog = new DeptLog(); + deptLog.setCreateTime(LocalDateTime.now()); + deptLog.setDescription("执行了解散部门的操作,此次解散的是"+ id+"号部门"); + deptLogService.insert(deptLog); + } } //新增部门 diff --git a/tlias-web-management/src/main/resources/application.yml b/tlias-web-management/src/main/resources/application.yml index 1c057a2..d79307a 100644 --- a/tlias-web-management/src/main/resources/application.yml +++ b/tlias-web-management/src/main/resources/application.yml @@ -27,3 +27,8 @@ aliyun: endpoint: https://oss-cn-hangzhou.aliyuncs.com bucketName: inmind-test1 region: cn-hangzhou + +#spring事务管理日志 +logging: + level: + org.springframework.jdbc.support.JdbcTransactionManager: debug \ No newline at end of file