Skip to content

Commit

Permalink
base version
Browse files Browse the repository at this point in the history
  • Loading branch information
ouchuangxin authored Dec 31, 2019
1 parent c9bac7b commit cf27edb
Show file tree
Hide file tree
Showing 61 changed files with 1,737 additions and 0 deletions.
90 changes: 90 additions & 0 deletions leave-service/pom.xml
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>
14 changes: 14 additions & 0 deletions leave-service/src/main/java/ddd/leave/Application.java
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);
}
}
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);
}
}
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);
}
}
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);
}


}
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;

}
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;
}
}
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;
}
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
}
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;
}

}
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
}
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
}
Loading

0 comments on commit cf27edb

Please sign in to comment.