forked from ouchuangxin/leave-sample
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
c9bac7b
commit cf27edb
Showing
61 changed files
with
1,737 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,90 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<project xmlns="http://maven.apache.org/POM/4.0.0" | ||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||
<modelVersion>4.0.0</modelVersion> | ||
|
||
<groupId>ddd</groupId> | ||
<artifactId>leave-service</artifactId> | ||
<version>1.0-SNAPSHOT</version> | ||
|
||
<parent> | ||
<groupId>org.springframework.boot</groupId> | ||
<artifactId>spring-boot-starter-parent</artifactId> | ||
<version>2.1.8.RELEASE</version> | ||
<relativePath/> | ||
</parent> | ||
|
||
<dependencyManagement> | ||
<dependencies> | ||
<dependency> | ||
<groupId>org.springframework.cloud</groupId> | ||
<artifactId>spring-cloud-dependencies</artifactId> | ||
<version>Greenwich.RELEASE</version> | ||
<type>pom</type> | ||
<scope>import</scope> | ||
</dependency> | ||
</dependencies> | ||
</dependencyManagement> | ||
|
||
<dependencies> | ||
|
||
<dependency> | ||
<groupId>org.springframework.cloud</groupId> | ||
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId> | ||
</dependency> | ||
|
||
<dependency> | ||
<groupId>org.springframework.cloud</groupId> | ||
<artifactId>spring-cloud-starter-feign</artifactId> | ||
<version>1.4.0.RELEASE</version> | ||
</dependency> | ||
|
||
<dependency> | ||
<groupId>org.springframework.boot</groupId> | ||
<artifactId>spring-boot-starter-data-jpa</artifactId> | ||
</dependency> | ||
|
||
<dependency> | ||
<groupId>org.springframework.boot</groupId> | ||
<artifactId>spring-boot-starter-web</artifactId> | ||
</dependency> | ||
|
||
<dependency> | ||
<groupId>org.springframework.boot</groupId> | ||
<artifactId>spring-boot-starter-test</artifactId> | ||
<scope>test</scope> | ||
</dependency> | ||
|
||
<dependency> | ||
<groupId>com.github.meixuesong</groupId> | ||
<artifactId>aggregate-persistence</artifactId> | ||
<version>1.0.0</version> | ||
</dependency> | ||
|
||
<dependency> | ||
<groupId>org.postgresql</groupId> | ||
<artifactId>postgresql</artifactId> | ||
<version>42.2.2</version> | ||
</dependency> | ||
|
||
<dependency> | ||
<groupId>com.alibaba</groupId> | ||
<artifactId>fastjson</artifactId> | ||
<version>1.2.4</version> | ||
</dependency> | ||
|
||
<dependency> | ||
<groupId>org.projectlombok</groupId> | ||
<artifactId>lombok</artifactId> | ||
<scope>provided</scope> | ||
</dependency> | ||
<dependency> | ||
<groupId>org.jetbrains</groupId> | ||
<artifactId>annotations</artifactId> | ||
<version>RELEASE</version> | ||
<scope>compile</scope> | ||
</dependency> | ||
|
||
</dependencies> | ||
</project> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
package ddd.leave; | ||
|
||
import org.springframework.boot.SpringApplication; | ||
import org.springframework.boot.autoconfigure.SpringBootApplication; | ||
import org.springframework.cloud.openfeign.EnableFeignClients; | ||
|
||
@EnableFeignClients | ||
@SpringBootApplication | ||
public class Application { | ||
|
||
public static void main(String[] args) { | ||
SpringApplication.run(Application.class, args); | ||
} | ||
} |
67 changes: 67 additions & 0 deletions
67
leave-service/src/main/java/ddd/leave/application/service/LeaveApplicationService.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
package ddd.leave.application.service; | ||
|
||
import ddd.leave.domain.leave.entity.valueobject.Approver; | ||
import ddd.leave.domain.leave.entity.Leave; | ||
import ddd.leave.domain.leave.service.LeaveDomainService; | ||
import ddd.leave.domain.person.entity.Person; | ||
import ddd.leave.domain.person.repository.po.PersonPO; | ||
import ddd.leave.domain.person.service.PersonDomainService; | ||
import ddd.leave.domain.rule.entity.ApprovalRule; | ||
import ddd.leave.domain.rule.service.ApprovalRuleDomainService; | ||
import org.springframework.beans.factory.annotation.Autowired; | ||
import org.springframework.stereotype.Service; | ||
|
||
import java.util.List; | ||
|
||
@Service | ||
public class LeaveApplicationService{ | ||
|
||
@Autowired | ||
LeaveDomainService leaveDomainService; | ||
@Autowired | ||
PersonDomainService personDomainService; | ||
@Autowired | ||
ApprovalRuleDomainService approvalRuleDomainService; | ||
|
||
/** | ||
* 创建一个请假申请并为审批人生成任务 | ||
* @param leave | ||
*/ | ||
public void createLeaveInfo(Leave leave){ | ||
//get approval leader max level by rule | ||
int leaderMaxLevel = approvalRuleDomainService.getLeaderMaxLevel(leave.getApplicant().getPersonType(), leave.getType().toString(), leave.getDuration()); | ||
//find next approver | ||
Person approver = personDomainService.findFirstApprover(leave.getApplicant().getPersonId(), leaderMaxLevel); | ||
leaveDomainService.createLeave(leave, leaderMaxLevel, Approver.fromPerson(approver)); | ||
} | ||
|
||
/** | ||
* 更新请假单基本信息 | ||
* @param leave | ||
*/ | ||
public void updateLeaveInfo(Leave leave){ | ||
leaveDomainService.updateLeaveInfo(leave); | ||
} | ||
|
||
/** | ||
* 提交审批,更新请假单信息 | ||
* @param leave | ||
*/ | ||
public void submitApproval(Leave leave){ | ||
//find next approver | ||
Person approver = personDomainService.findNextApprover(leave.getApprover().getPersonId(), leave.getLeaderMaxLevel()); | ||
leaveDomainService.submitApproval(leave, Approver.fromPerson(approver)); | ||
} | ||
|
||
public Leave getLeaveInfo(String leaveId){ | ||
return leaveDomainService.getLeaveInfo(leaveId); | ||
} | ||
|
||
public List<Leave> queryLeaveInfosByApplicant(String applicantId){ | ||
return leaveDomainService.queryLeaveInfosByApplicant(applicantId); | ||
} | ||
|
||
public List<Leave> queryLeaveInfosByApprover(String approverId){ | ||
return leaveDomainService.queryLeaveInfosByApprover(approverId); | ||
} | ||
} |
22 changes: 22 additions & 0 deletions
22
leave-service/src/main/java/ddd/leave/application/service/LoginApplicationService.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
package ddd.leave.application.service; | ||
|
||
import ddd.leave.domain.person.entity.Person; | ||
import ddd.leave.domain.person.service.PersonDomainService; | ||
import ddd.leave.infrastructure.client.AuthFeignClient; | ||
import ddd.leave.infrastructure.common.api.Response; | ||
import org.springframework.beans.factory.annotation.Autowired; | ||
import org.springframework.stereotype.Service; | ||
|
||
@Service | ||
public class LoginApplicationService{ | ||
|
||
@Autowired | ||
AuthFeignClient authService; | ||
@Autowired | ||
PersonDomainService personDomainService; | ||
|
||
public Response login(Person person){ | ||
//调用鉴权微服务 | ||
return authService.login(person); | ||
} | ||
} |
35 changes: 35 additions & 0 deletions
35
leave-service/src/main/java/ddd/leave/application/service/PersonApplicationService.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
package ddd.leave.application.service; | ||
|
||
import ddd.leave.domain.person.entity.Person; | ||
import ddd.leave.domain.person.service.PersonDomainService; | ||
import org.springframework.beans.factory.annotation.Autowired; | ||
import org.springframework.stereotype.Service; | ||
|
||
@Service | ||
public class PersonApplicationService { | ||
|
||
@Autowired | ||
PersonDomainService personDomainService; | ||
|
||
public void create(Person person) { | ||
personDomainService.create(person); | ||
} | ||
|
||
public void update(Person person) { | ||
personDomainService.update(person); | ||
} | ||
|
||
public void deleteById(String personId) { | ||
personDomainService.deleteById(personId); | ||
} | ||
|
||
public Person findById(String personId) { | ||
return null; | ||
} | ||
|
||
public Person findFirstApprover(String applicantId, int leaderMaxLevel) { | ||
return personDomainService.findFirstApprover(applicantId, leaderMaxLevel); | ||
} | ||
|
||
|
||
} |
16 changes: 16 additions & 0 deletions
16
leave-service/src/main/java/ddd/leave/domain/leave/entity/ApprovalInfo.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
package ddd.leave.domain.leave.entity; | ||
|
||
import ddd.leave.domain.leave.entity.valueobject.ApprovalType; | ||
import ddd.leave.domain.leave.entity.valueobject.Approver; | ||
import lombok.Data; | ||
|
||
@Data | ||
public class ApprovalInfo { | ||
|
||
String approvalInfoId; | ||
Approver approver; | ||
ApprovalType approvalType; | ||
String msg; | ||
long time; | ||
|
||
} |
69 changes: 69 additions & 0 deletions
69
leave-service/src/main/java/ddd/leave/domain/leave/entity/Leave.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
package ddd.leave.domain.leave.entity; | ||
|
||
import ddd.leave.domain.leave.entity.valueobject.Applicant; | ||
import ddd.leave.domain.leave.entity.valueobject.Approver; | ||
import ddd.leave.domain.leave.entity.valueobject.LeaveType; | ||
import ddd.leave.domain.leave.entity.valueobject.Status; | ||
import lombok.Data; | ||
|
||
import java.util.ArrayList; | ||
import java.util.Date; | ||
import java.util.List; | ||
|
||
/** | ||
* 请假单信息 | ||
*/ | ||
@Data | ||
public class Leave { | ||
|
||
String id; | ||
Applicant applicant; | ||
Approver approver; | ||
LeaveType type; | ||
Status status; | ||
Date startTime; | ||
Date endTime; | ||
long duration; | ||
//审批领导的最大级别 | ||
int leaderMaxLevel; | ||
ApprovalInfo currentApprovalInfo; | ||
List<ApprovalInfo> historyApprovalInfos; | ||
|
||
public long getDuration() { | ||
return endTime.getTime() - startTime.getTime(); | ||
} | ||
|
||
public Leave addHistoryApprovalInfo(ApprovalInfo approvalInfo) { | ||
if (historyApprovalInfos == null) | ||
historyApprovalInfos = new ArrayList<>(); | ||
this.historyApprovalInfos.add(approvalInfo); | ||
return this; | ||
} | ||
|
||
public Leave create(){ | ||
this.setStatus(Status.APPROVING); | ||
this.setStartTime(new Date()); | ||
return this; | ||
} | ||
|
||
public Leave agree(Approver nextApprover){ | ||
this.setStatus(Status.APPROVING); | ||
this.setApprover(nextApprover); | ||
return this; | ||
} | ||
|
||
public Leave reject(Approver approver){ | ||
this.setApprover(approver); | ||
this.setStatus(Status.REJECTED); | ||
this.setApprover(null); | ||
return this; | ||
} | ||
|
||
public Leave finish(){ | ||
this.setApprover(null); | ||
this.setStatus(Status.APPROVED); | ||
this.setEndTime(new Date()); | ||
this.setDuration(this.getEndTime().getTime() - this.getStartTime().getTime()); | ||
return this; | ||
} | ||
} |
17 changes: 17 additions & 0 deletions
17
leave-service/src/main/java/ddd/leave/domain/leave/entity/valueobject/Applicant.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
package ddd.leave.domain.leave.entity.valueobject; | ||
|
||
import lombok.AllArgsConstructor; | ||
import lombok.Builder; | ||
import lombok.Data; | ||
import lombok.NoArgsConstructor; | ||
|
||
@Data | ||
@Builder | ||
@AllArgsConstructor | ||
@NoArgsConstructor | ||
public class Applicant { | ||
|
||
String personId; | ||
String personName; | ||
String personType; | ||
} |
5 changes: 5 additions & 0 deletions
5
leave-service/src/main/java/ddd/leave/domain/leave/entity/valueobject/ApprovalType.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
package ddd.leave.domain.leave.entity.valueobject; | ||
|
||
public enum ApprovalType { | ||
AGREE, REJECT | ||
} |
28 changes: 28 additions & 0 deletions
28
leave-service/src/main/java/ddd/leave/domain/leave/entity/valueobject/Approver.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
package ddd.leave.domain.leave.entity.valueobject; | ||
|
||
import ddd.leave.domain.person.entity.Person; | ||
import ddd.leave.domain.person.repository.po.PersonPO; | ||
import lombok.AllArgsConstructor; | ||
import lombok.Builder; | ||
import lombok.Data; | ||
import lombok.NoArgsConstructor; | ||
|
||
@Data | ||
@AllArgsConstructor | ||
@NoArgsConstructor | ||
@Builder | ||
public class Approver { | ||
|
||
String personId; | ||
String personName; | ||
int level; | ||
|
||
public static Approver fromPerson(Person person){ | ||
Approver approver = new Approver(); | ||
approver.setPersonId(person.getPersonId()); | ||
approver.setPersonName(person.getPersonName()); | ||
approver.setLevel(person.getRoleLevel()); | ||
return approver; | ||
} | ||
|
||
} |
5 changes: 5 additions & 0 deletions
5
leave-service/src/main/java/ddd/leave/domain/leave/entity/valueobject/LeaveType.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
package ddd.leave.domain.leave.entity.valueobject; | ||
|
||
public enum LeaveType { | ||
Internal, External, Official | ||
} |
5 changes: 5 additions & 0 deletions
5
leave-service/src/main/java/ddd/leave/domain/leave/entity/valueobject/Status.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
package ddd.leave.domain.leave.entity.valueobject; | ||
|
||
public enum Status { | ||
APPROVING, APPROVED, REJECTED | ||
} |
Oops, something went wrong.