소스 검색

项目打包

lixing 4 년 전
부모
커밋
96291ae323
37개의 변경된 파일2059개의 추가작업 그리고 0개의 파일을 삭제
  1. 104 0
      fm-person/pom.xml
  2. 6 0
      fm-person/src/main/java/com/persagy/fm/department/model/Department.java
  3. 41 0
      fm-person/src/main/java/com/persagy/fm/person/constant/enums/PersonTypeEnum.java
  4. 93 0
      fm-person/src/main/java/com/persagy/fm/person/controller/PersonController.java
  5. 16 0
      fm-person/src/main/java/com/persagy/fm/person/dao/PersonMapper.java
  6. 84 0
      fm-person/src/main/java/com/persagy/fm/person/model/ConvertPersonTool.java
  7. 63 0
      fm-person/src/main/java/com/persagy/fm/person/model/Person.java
  8. 55 0
      fm-person/src/main/java/com/persagy/fm/person/model/dto/AddPersonDTO.java
  9. 20 0
      fm-person/src/main/java/com/persagy/fm/person/model/dto/DeletePersonDTO.java
  10. 24 0
      fm-person/src/main/java/com/persagy/fm/person/model/dto/PageQueryPersonByDepDTO.java
  11. 48 0
      fm-person/src/main/java/com/persagy/fm/person/model/dto/PageQueryPersonDTO.java
  12. 43 0
      fm-person/src/main/java/com/persagy/fm/person/model/dto/QueryPersonDTO.java
  13. 20 0
      fm-person/src/main/java/com/persagy/fm/person/model/dto/QueryPersonDetailDTO.java
  14. 59 0
      fm-person/src/main/java/com/persagy/fm/person/model/dto/UpdatePersonDTO.java
  15. 61 0
      fm-person/src/main/java/com/persagy/fm/person/model/vo/ResponsePersonItemVO.java
  16. 47 0
      fm-person/src/main/java/com/persagy/fm/person/model/vo/ResponsePersonListItemVO.java
  17. 88 0
      fm-person/src/main/java/com/persagy/fm/person/service/IPersonService.java
  18. 304 0
      fm-person/src/main/java/com/persagy/fm/person/service/impl/PersonServiceImpl.java
  19. 93 0
      fm-person/src/main/java/com/persagy/fm/workresume/controller/WorkResumeController.java
  20. 16 0
      fm-person/src/main/java/com/persagy/fm/workresume/dao/WorkResumeMapper.java
  21. 73 0
      fm-person/src/main/java/com/persagy/fm/workresume/model/ConvertWorkResumeTool.java
  22. 44 0
      fm-person/src/main/java/com/persagy/fm/workresume/model/WorkResume.java
  23. 39 0
      fm-person/src/main/java/com/persagy/fm/workresume/model/dto/AddWorkResumeDTO.java
  24. 20 0
      fm-person/src/main/java/com/persagy/fm/workresume/model/dto/DeleteWorkResumeDTO.java
  25. 36 0
      fm-person/src/main/java/com/persagy/fm/workresume/model/dto/PageQueryWorkResumeDTO.java
  26. 31 0
      fm-person/src/main/java/com/persagy/fm/workresume/model/dto/QueryWorkResumeDTO.java
  27. 20 0
      fm-person/src/main/java/com/persagy/fm/workresume/model/dto/QueryWorkResumeDetailDTO.java
  28. 43 0
      fm-person/src/main/java/com/persagy/fm/workresume/model/dto/UpdateWorkResumeDTO.java
  29. 49 0
      fm-person/src/main/java/com/persagy/fm/workresume/model/vo/ResponseWorkResumeItemVO.java
  30. 49 0
      fm-person/src/main/java/com/persagy/fm/workresume/model/vo/ResponseWorkResumeListItemVO.java
  31. 77 0
      fm-person/src/main/java/com/persagy/fm/workresume/service/IWorkResumeService.java
  32. 219 0
      fm-person/src/main/java/com/persagy/fm/workresume/service/impl/WorkResumeServiceImpl.java
  33. 23 0
      fm-person/src/main/resources/mapper/PersonMapper.xml
  34. 19 0
      fm-person/src/main/resources/mapper/WorkResumeMapper.xml
  35. 4 0
      fm-person/src/script/start.bat
  36. 5 0
      fm-person/src/script/start.sh
  37. 23 0
      fm-person/src/script/zip.xml

+ 104 - 0
fm-person/pom.xml

@@ -19,6 +19,19 @@
         <platform.version>1.0.0</platform.version>
     </properties>
 
+    <repositories>
+        <repository>
+            <id>integrated</id>
+            <name>releases Repository</name>
+            <url>http://47.93.132.139:8081/nexus/content/repositories/integrated/</url>
+        </repository>
+        <repository>
+            <id>persagy</id>
+            <name>persagy Repository</name>
+            <url>http://47.93.132.139:8081/nexus/content/repositories/persagy/</url>
+        </repository>
+    </repositories>
+
     <dependencies>
         <!-- 配置中心(包含注册中心) -->
         <dependency>
@@ -73,5 +86,96 @@
 
     </dependencies>
 
+    <build>
+        <finalName>fm-person</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.8.1</version>
+                <configuration>
+                    <source>1.8</source>
+                    <target>1.8</target>
+                    <encoding>UTF-8</encoding>
+                    <skip>true</skip>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <!-- 指定启动类 -->
+                <configuration>
+                    <mainClass>com.persagy.fm.server.ServerApplication</mainClass>
+                </configuration>
+            </plugin>
+            <!-- 按照测试要求打成zip需要的配置 -->
+            <plugin>
+                <groupId>com.coderplus.maven.plugins</groupId>
+                <artifactId>copy-rename-maven-plugin</artifactId>
+                <version>1.0.1</version>
+                <executions>
+                    <execution>
+                        <id>rename-file</id>
+                        <phase>compile</phase>
+                        <goals>
+                            <goal>rename</goal>
+                        </goals>
+                        <configuration>
+                            <destinationFile>${project.build.directory}/version.txt</destinationFile>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <!--拷贝资源文件 copy-resources-->
+            <plugin>
+                <artifactId>maven-resources-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>copy-resources</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>copy-resources</goal>
+                        </goals>
+                        <configuration>
+                            <resources>
+                                <resource>
+                                    <directory>src/main/resources/</directory>
+                                    <includes>
+                                        <include>**/*.yml</include>
+                                    </includes>
+                                </resource>
+                                <resource>
+                                    <directory>${project.build.directory}</directory>
+                                    <includes>
+                                        <include>**/version.txt</include>
+                                    </includes>
+                                </resource>
+                            </resources>
+                            <outputDirectory>${project.build.directory}/config</outputDirectory>
+                        </configuration>
+                    </execution>
+                    <!--拷贝启动脚本-->
+                    <execution>
+                        <id>copy-version</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>copy-resources</goal>
+                        </goals>
+                        <configuration>
+                            <resources>
+                                <resource>
+                                    <directory>src/script</directory>
+                                </resource>
+                            </resources>
+                            <outputDirectory>${project.build.directory}</outputDirectory>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+
+
+        </plugins>
+    </build>
+
 
 </project>

+ 6 - 0
fm-person/src/main/java/com/persagy/fm/department/model/Department.java

@@ -1,5 +1,6 @@
 package com.persagy.fm.department.model;
 
+import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -15,6 +16,7 @@ import java.io.Serializable;
  */
 @Data
 @ApiModel(description = "部门")
+@TableName(autoResultMap = true)
 public class Department extends AuditableEntity<Department> implements Serializable {
     private static final long serialVersionUID = 729299541515891979L;
 
@@ -39,6 +41,9 @@ public class Department extends AuditableEntity<Department> implements Serializa
     @ApiModelProperty("编制人数")
     private Integer staffCount;
 
+    @ApiModelProperty("关联的项目")
+    private String projectIds;
+
     public static String PROP_NAME = "name";
     public static String PROP_TYPE = "type";
     public static String PROP_PARENT_ID = "parent_id";
@@ -46,4 +51,5 @@ public class Department extends AuditableEntity<Department> implements Serializa
     public static String PROP_MANAGERS = "managers";
     public static String PROP_FULL_PATH = "full_path";
     public static String PROP_STAFF_COUNT = "staff_count";
+    public static String PROP_PROJECT_IDS = "project_ids";
 }

+ 41 - 0
fm-person/src/main/java/com/persagy/fm/person/constant/enums/PersonTypeEnum.java

@@ -0,0 +1,41 @@
+package com.persagy.fm.person.constant.enums;
+
+/**
+ * 员工类型
+ *
+ * @author lixing
+ * @version V1.0 2021/3/12 3:00 下午
+ */
+public enum PersonTypeEnum {
+    /**
+     * 员工类型
+     */
+    PRIVATE("1", "自有员工"),
+    OUTSOURCING("2", "外包员工"),
+    PARTNER("3", "合作方人员"),
+    FOREIGN("4", "外部用户");
+
+    private String type;
+    private String desc;
+
+    PersonTypeEnum(String type, String desc) {
+        this.type = type;
+        this.desc = desc;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+
+    public void setDesc(String desc) {
+        this.desc = desc;
+    }
+}

+ 93 - 0
fm-person/src/main/java/com/persagy/fm/person/controller/PersonController.java

@@ -0,0 +1,93 @@
+package com.persagy.fm.person.controller;
+
+import com.persagy.fm.person.service.IPersonService;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import com.persagy.fm.person.model.*;
+import com.persagy.fm.person.model.vo.*;
+import com.persagy.fm.person.model.dto.*;
+import com.persagy.fm.common.response.*;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+ * 人员控制层
+ *
+ * @author lixing
+ * @version V1.0 2021-03-15 17:20:31
+ */
+@Api(tags = "人员")
+@Validated
+@RestController
+@RequestMapping("persons")
+public class PersonController {
+    @Autowired
+    private IPersonService personService;
+
+    @ApiOperation(value = "创建人员")
+    @PostMapping("/create")
+    public FmResponseItem<FmResponseUpsertVO> createPerson(
+            @Valid @RequestBody AddPersonDTO addPersonDTO) {
+        Long id = personService.createPerson(addPersonDTO);
+        return FmResponseUtil.successItem(new FmResponseUpsertVO(id));
+    }
+
+    @ApiOperation(value = "人员详情")
+    @PostMapping("/get")
+    public FmResponseItem<ResponsePersonItemVO> queryPersonDetail(
+            @Valid @RequestBody QueryPersonDetailDTO queryPersonDetailDTO) {
+        Person person = personService.queryPersonDetail(queryPersonDetailDTO.getId());
+        ResponsePersonItemVO responsePersonItemVO = ConvertPersonTool.INSTANCE.convert2ResponseItemDTO(person);
+        return FmResponseUtil.successItem(responsePersonItemVO);
+    }
+
+
+    @ApiOperation(value = "更新人员")
+    @PostMapping("/update")
+    public FmResponseItem<FmResponseUpsertVO> updatePerson(
+            @Valid @RequestBody UpdatePersonDTO updatePersonDTO) {
+        personService.updatePerson(updatePersonDTO);
+        return FmResponseUtil.successItem(new FmResponseUpsertVO(updatePersonDTO.getId()));
+    }
+
+
+    @ApiOperation(value = "删除人员")
+    @PostMapping("/delete")
+    public FmResponseMsg deletePerson(
+            @RequestBody @Valid DeletePersonDTO deletePersonDTO) {
+        personService.deletePerson(deletePersonDTO.getId());
+        return FmResponseUtil.successMsg("删除成功");
+    }
+
+
+    @ApiOperation(value = "人员列表")
+    @PostMapping("/query")
+    public FmResponseContent<List<ResponsePersonListItemVO>> queryPerson(
+            @Valid @RequestBody QueryPersonDTO queryPersonDTO) {
+        List<Person> personList = personService.queryPersonList(queryPersonDTO);
+        List<ResponsePersonListItemVO> resultList = ConvertPersonTool.INSTANCE.convert2List(personList);
+        return FmResponseUtil.successContent(resultList);
+    }
+
+    //@ApiOperation(value = "人员列表, 分页查询")
+    //@PostMapping("/query")
+    //public FmResponseContent<List<ResponsePersonListItemVO>> queryPerson(
+    //        @Valid @RequestBody PageQueryPersonDTO pageQueryPersonDTO) {
+    //    IPage<ResponsePersonListItemVO> pagedList = personService.pageQueryPerson(pageQueryPersonDTO);
+    //    IPage<ResponsePersonListItemVO> pagedResultList = pagedList.convert(item -> {
+    //        try {
+    //           return ConvertPersonTool.INSTANCE.convert2ResponseListItemDTO(item);
+    //        } catch (Exception e) {
+    //            throw new IllegalArgumentException("分页查询,Person实体类转换为列表对象发生异常", e);
+    //        }
+    //    });
+    //    return FmResponseUtil.successContent(pagedResultList);;
+    //}
+}
+

+ 16 - 0
fm-person/src/main/java/com/persagy/fm/person/dao/PersonMapper.java

@@ -0,0 +1,16 @@
+package com.persagy.fm.person.dao;
+
+import com.persagy.fm.person.model.Person;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 人员(Person)dao层
+ *
+ * @author lixing
+ * @version V1.0 2021-03-15 17:20:32
+ */
+@Mapper
+public interface PersonMapper extends BaseMapper<Person> {
+
+}

+ 84 - 0
fm-person/src/main/java/com/persagy/fm/person/model/ConvertPersonTool.java

@@ -0,0 +1,84 @@
+package com.persagy.fm.person.model;
+
+import com.persagy.fm.workresume.model.dto.PageQueryWorkResumeDTO;
+import org.mapstruct.Mapper;
+import org.mapstruct.MappingTarget;
+import org.mapstruct.factory.Mappers;
+import com.persagy.fm.person.model.vo.*;
+import com.persagy.fm.person.model.dto.*;
+
+import java.util.List;
+
+/**
+ * 人员(Person) dto、vo、do转换工具类
+ *
+ * @author lixing
+ * @version V1.0 2021-03-15 17:20:33 2021-03-15 17:20:33
+ */
+@Mapper
+public interface ConvertPersonTool {
+
+    ConvertPersonTool INSTANCE = Mappers.getMapper(ConvertPersonTool.class);
+
+    /**
+     * do转换为ResponseItemVO
+     *
+     * @param person do对象
+     * @return ResponseItemVO
+     * @author lixing
+     * @version V1.0 2021-03-15 17:20:33
+     */
+    ResponsePersonItemVO convert2ResponseItemDTO(Person person);
+
+    /**
+     * do转换为ResponseListItemVO
+     *
+     * @param person do对象
+     * @return ResponseListItemVO
+     * @author lixing
+     * @version V1.0 2021-03-15 17:20:33
+     */
+    ResponsePersonListItemVO convert2ResponseListItemDTO(Person person);
+
+    /**
+     * do列表转换为ResponseListItemVO列表
+     *
+     * @param personList do列表
+     * @return ResponseListItemVO列表
+     * @author lixing
+     * @version V1.0 2021-03-15 17:20:33
+     */
+    List<ResponsePersonListItemVO> convert2List(List<Person> personList);
+
+    /**
+     * addDTO转换为do
+     *
+     * @param addPersonDTO addDTO
+     * @return 要创建的do对象
+     * @author lixing
+     * @version V1.0 2021-03-15 17:20:33
+     */
+    Person convertAddDto2Entity(AddPersonDTO addPersonDTO);
+
+    /**
+     * updateDTO转换为实体
+     *
+     * @param person          更新前的do对象
+     * @param updatePersonDTO updateDTO
+     * @return 更新后的do对象
+     * @author lixing
+     * @version V1.0 2021-03-15 17:20:33
+     */
+    Person convertUpdateDto2Entity(@MappingTarget Person person, UpdatePersonDTO updatePersonDTO);
+
+    /**
+     * 分页查询部门下的人员入参转换为查询工作信息入参
+     *
+     * @param pageQueryPersonByDepDTO 分页查询部门下的人员入参
+     * @return 查询工作信息入参
+     * @author lixing
+     * @version V1.0 2021/3/15 5:32 下午
+     */
+    PageQueryWorkResumeDTO convert2PageQueryWorkResumeDTO(PageQueryPersonByDepDTO pageQueryPersonByDepDTO);
+}
+

+ 63 - 0
fm-person/src/main/java/com/persagy/fm/person/model/Person.java

@@ -0,0 +1,63 @@
+package com.persagy.fm.person.model;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import com.persagy.fm.common.model.entity.AuditableEntity;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 人员(Person)实体类
+ *
+ * @author lixing
+ * @version V1.0 2021-03-15 17:20:32
+ */
+@Data
+@ApiModel(description = "人员")
+public class Person extends AuditableEntity<Person> implements Serializable {
+    private static final long serialVersionUID = 927933790373524126L;
+
+    @ApiModelProperty("姓名")
+    private String name;
+
+    @ApiModelProperty("账号")
+    private String username;
+
+    @ApiModelProperty("证件号码")
+    private String idNumber;
+
+    @ApiModelProperty("性别")
+    private Integer gender;
+
+    @ApiModelProperty("生日")
+    private Date birthday;
+
+    @ApiModelProperty("第三方账号")
+    private String otherAccount;
+
+    @ApiModelProperty("账号来源")
+    private String userFrom;
+
+    @ApiModelProperty("员工类型")
+    private String personType;
+
+    @ApiModelProperty("备注")
+    private String remark;
+
+    @ApiModelProperty("专业")
+    private String profession;
+
+
+    public static String PROP_NAME = "name";
+    public static String PROP_USERNAME = "username";
+    public static String PROP_ID_NUMBER = "id_number";
+    public static String PROP_GENDER = "gender";
+    public static String PROP_BIRTHDAY = "birthday";
+    public static String PROP_OTHER_ACCOUNT = "other_account";
+    public static String PROP_USER_FROM = "user_from";
+    public static String PROP_REMARK = "remark";
+    public static String PROP_PROFESSION = "profession";
+
+}

+ 55 - 0
fm-person/src/main/java/com/persagy/fm/person/model/dto/AddPersonDTO.java

@@ -0,0 +1,55 @@
+package com.persagy.fm.person.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import javax.validation.constraints.NotNull;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author lixing
+ * @version V1.0 2021-03-15 17:20:32
+ */
+@Data
+@ApiModel(value = "创建人员入参")
+public class AddPersonDTO {
+    @ApiModelProperty(value = "姓名", required = true)
+    @NotNull(message = "姓名不能为空") // todo 更新校验规则
+    private String name;
+
+    @ApiModelProperty(value = "账号", required = true)
+    @NotNull(message = "账号不能为空") // todo 更新校验规则
+    private String username;
+
+    @ApiModelProperty(value = "证件号码", required = true)
+    @NotNull(message = "证件号码不能为空") // todo 更新校验规则
+    private String idNumber;
+
+    @ApiModelProperty(value = "性别", required = true)
+    @NotNull(message = "性别不能为空") // todo 更新校验规则
+    private Integer gender;
+
+    @ApiModelProperty(value = "生日", required = true)
+    @NotNull(message = "生日不能为空") // todo 更新校验规则
+    private Date birthday;
+
+    @ApiModelProperty(value = "第三方账号", required = true)
+    @NotNull(message = "第三方账号不能为空") // todo 更新校验规则
+    private String otherAccount;
+
+    @ApiModelProperty(value = "账号来源", required = true)
+    @NotNull(message = "账号来源不能为空") // todo 更新校验规则
+    private String userFrom;
+
+    @ApiModelProperty(value = "备注", required = true)
+    @NotNull(message = "备注不能为空") // todo 更新校验规则
+    private String remark;
+
+    @ApiModelProperty(value = "专业", required = true)
+    @NotNull(message = "专业不能为空") // todo 更新校验规则
+    private String profession;
+
+}

+ 20 - 0
fm-person/src/main/java/com/persagy/fm/person/model/dto/DeletePersonDTO.java

@@ -0,0 +1,20 @@
+package com.persagy.fm.person.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author lixing
+ * @version V1.0 2021-03-15 17:20:33
+ */
+@Data
+@ApiModel(value = "删除人员入参")
+public class DeletePersonDTO {
+    @NotNull(message = "id不能为空")
+    @ApiModelProperty(value = "id", required = true)
+    private Long id;
+
+}

+ 24 - 0
fm-person/src/main/java/com/persagy/fm/person/model/dto/PageQueryPersonByDepDTO.java

@@ -0,0 +1,24 @@
+package com.persagy.fm.person.model.dto;
+
+import com.persagy.fm.common.model.dto.PageDTO;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author lixing
+ * @version V1.0 2021-03-15 17:20:33
+ */
+@Data
+@ApiModel(value = "分页查询部门下的人员入参")
+public class PageQueryPersonByDepDTO extends PageDTO {
+
+    @ApiModelProperty(value = "部门id", required = true)
+    private Long depId;
+
+    @ApiModelProperty(value = "在职状态")
+    private Integer state;
+
+}

+ 48 - 0
fm-person/src/main/java/com/persagy/fm/person/model/dto/PageQueryPersonDTO.java

@@ -0,0 +1,48 @@
+package com.persagy.fm.person.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.Date;
+
+import com.persagy.fm.common.model.dto.PageDTO;
+import lombok.Data;
+
+/**
+ * @author lixing
+ * @version V1.0 2021-03-15 17:20:33
+ */
+@Data
+@ApiModel(value = "分页查询人员入参")
+public class PageQueryPersonDTO extends PageDTO {
+    @ApiModelProperty(value = "id", required = true)
+    private Long id;
+
+    @ApiModelProperty(value = "姓名", required = true)
+    private String name;
+
+    @ApiModelProperty(value = "账号", required = true)
+    private String username;
+
+    @ApiModelProperty(value = "证件号码", required = true)
+    private String idNumber;
+
+    @ApiModelProperty(value = "性别", required = true)
+    private Integer gender;
+
+    @ApiModelProperty(value = "生日", required = true)
+    private Date birthday;
+
+    @ApiModelProperty(value = "第三方账号", required = true)
+    private String otherAccount;
+
+    @ApiModelProperty(value = "账号来源", required = true)
+    private String userFrom;
+
+    @ApiModelProperty(value = "备注", required = true)
+    private String remark;
+
+    @ApiModelProperty(value = "专业", required = true)
+    private String profession;
+
+}

+ 43 - 0
fm-person/src/main/java/com/persagy/fm/person/model/dto/QueryPersonDTO.java

@@ -0,0 +1,43 @@
+package com.persagy.fm.person.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author lixing
+ * @version V1.0 2021-03-15 17:20:33
+ */
+@Data
+@ApiModel(value = "查询人员入参")
+public class QueryPersonDTO {
+    @ApiModelProperty(value = "姓名", required = true)
+    private String name;
+
+    @ApiModelProperty(value = "账号", required = true)
+    private String username;
+
+    @ApiModelProperty(value = "证件号码", required = true)
+    private String idNumber;
+
+    @ApiModelProperty(value = "性别", required = true)
+    private Integer gender;
+
+    @ApiModelProperty(value = "生日", required = true)
+    private Date birthday;
+
+    @ApiModelProperty(value = "第三方账号", required = true)
+    private String otherAccount;
+
+    @ApiModelProperty(value = "账号来源", required = true)
+    private String userFrom;
+
+    @ApiModelProperty(value = "备注", required = true)
+    private String remark;
+
+    @ApiModelProperty(value = "专业", required = true)
+    private String profession;
+
+}

+ 20 - 0
fm-person/src/main/java/com/persagy/fm/person/model/dto/QueryPersonDetailDTO.java

@@ -0,0 +1,20 @@
+package com.persagy.fm.person.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author lixing
+ * @version V1.0 2021-03-15 17:20:32
+ */
+@Data
+@ApiModel(value = "获取人员详情入参")
+public class QueryPersonDetailDTO {
+    @NotNull(message = "id不能为空")
+    @ApiModelProperty(value = "id", required = true)
+    private Long id;
+
+}

+ 59 - 0
fm-person/src/main/java/com/persagy/fm/person/model/dto/UpdatePersonDTO.java

@@ -0,0 +1,59 @@
+package com.persagy.fm.person.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import javax.validation.constraints.NotNull;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author lixing
+ * @version V1.0 2021-03-15 17:20:32
+ */
+@Data
+@ApiModel(value = "更新人员入参")
+public class UpdatePersonDTO {
+    @ApiModelProperty(value = "id", required = true)
+    @NotNull(message = "id不能为空") // todo 更新校验规则
+    private Long id;
+
+    @ApiModelProperty(value = "姓名", required = true)
+    @NotNull(message = "姓名不能为空") // todo 更新校验规则
+    private String name;
+
+    @ApiModelProperty(value = "账号", required = true)
+    @NotNull(message = "账号不能为空") // todo 更新校验规则
+    private String username;
+
+    @ApiModelProperty(value = "证件号码", required = true)
+    @NotNull(message = "证件号码不能为空") // todo 更新校验规则
+    private String idNumber;
+
+    @ApiModelProperty(value = "性别", required = true)
+    @NotNull(message = "性别不能为空") // todo 更新校验规则
+    private Integer gender;
+
+    @ApiModelProperty(value = "生日", required = true)
+    @NotNull(message = "生日不能为空") // todo 更新校验规则
+    private Date birthday;
+
+    @ApiModelProperty(value = "第三方账号", required = true)
+    @NotNull(message = "第三方账号不能为空") // todo 更新校验规则
+    private String otherAccount;
+
+    @ApiModelProperty(value = "账号来源", required = true)
+    @NotNull(message = "账号来源不能为空") // todo 更新校验规则
+    private String userFrom;
+
+    @ApiModelProperty(value = "备注", required = true)
+    @NotNull(message = "备注不能为空") // todo 更新校验规则
+    private String remark;
+
+    @ApiModelProperty(value = "专业", required = true)
+    @NotNull(message = "专业不能为空") // todo 更新校验规则
+    private String profession;
+
+}

+ 61 - 0
fm-person/src/main/java/com/persagy/fm/person/model/vo/ResponsePersonItemVO.java

@@ -0,0 +1,61 @@
+package com.persagy.fm.person.model.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+
+/**
+ * @author lixing
+ * @version V1.0 2021-03-15 17:20:33
+ */
+@Data
+@ApiModel(value = "人员返回结果参数")
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class ResponsePersonItemVO {
+    @ApiModelProperty("id")
+    private Long id;
+
+    @ApiModelProperty("姓名")
+    private String name;
+
+    @ApiModelProperty("账号")
+    private String username;
+
+    @ApiModelProperty("证件号码")
+    private String idNumber;
+
+    @ApiModelProperty("性别")
+    private Integer gender;
+
+    @ApiModelProperty("生日")
+    private Date birthday;
+
+    @ApiModelProperty("第三方账号")
+    private String otherAccount;
+
+    @ApiModelProperty("账号来源")
+    private String userFrom;
+
+    @ApiModelProperty("备注")
+    private String remark;
+
+    @ApiModelProperty("专业")
+    private String profession;
+
+    @ApiModelProperty("创建时间")
+    private Date creationTime;
+
+    @ApiModelProperty("创建用户")
+    private String creator;
+
+    @ApiModelProperty("更新用户")
+    private String modifier;
+
+    @ApiModelProperty("更新时间")
+    private Date modifiedTime;
+
+}

+ 47 - 0
fm-person/src/main/java/com/persagy/fm/person/model/vo/ResponsePersonListItemVO.java

@@ -0,0 +1,47 @@
+package com.persagy.fm.person.model.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonInclude;
+
+/**
+ * @author lixing
+ * @version V1.0 2021-03-15 17:20:33
+ */
+@Data
+@ApiModel(value = "人员列表返回结果参数")
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class ResponsePersonListItemVO {
+    @ApiModelProperty("id")
+    private Long id;
+
+    @ApiModelProperty("姓名")
+    private String name;
+
+    @ApiModelProperty("账号")
+    private String username;
+
+    @ApiModelProperty("主岗id")
+    private String mainRoleId;
+
+    @ApiModelProperty("主岗名称")
+    private String mainRoleShowName;
+
+    @ApiModelProperty("副岗id")
+    private String otherRoleIds;
+
+    @ApiModelProperty("副岗名称")
+    private String otherRolesShowName;
+
+    @ApiModelProperty("专业id")
+    private String profession;
+
+    @ApiModelProperty("专业名称")
+    private String professionShowName;
+
+    @ApiModelProperty("登录权限(年.月.日/永久)")
+    private String expireDate;
+
+}

+ 88 - 0
fm-person/src/main/java/com/persagy/fm/person/service/IPersonService.java

@@ -0,0 +1,88 @@
+package com.persagy.fm.person.service;
+
+import com.persagy.fm.person.model.*;
+import com.persagy.fm.person.model.dto.*;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.persagy.fm.person.model.vo.ResponsePersonListItemVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 人员(Person) service接口
+ *
+ * @author lixing
+ * @version V1.0 2021-03-15 17:20:31
+ */
+public interface IPersonService {
+
+    /**
+     * 创建人员
+     *
+     * @param addPersonDTO addDTO
+     * @return 人员主键
+     * @author lixing
+     * @version V1.0 2021-03-15 17:20:31
+     */
+    Long createPerson(AddPersonDTO addPersonDTO);
+
+    /**
+     * 人员详情
+     *
+     * @param id 主键
+     * @return 人员do对象
+     * @author lixing
+     * @version V1.0 2021-03-15 17:20:31
+     */
+    Person queryPersonDetail(Long id);
+
+    /**
+     * 更新人员
+     *
+     * @param updatePersonDTO updateDTO
+     * @author lixing
+     * @version V1.0 2021-03-15 17:20:31
+     */
+    void updatePerson(UpdatePersonDTO updatePersonDTO);
+
+    /**
+     * 删除人员
+     *
+     * @param id 主键
+     * @author lixing
+     * @version V1.0 2021-03-15 17:20:31
+     */
+    void deletePerson(Long id);
+
+    /**
+     * 查询人员
+     *
+     * @param queryPersonDTO queryDTO
+     * @return List<Person>
+     * @author lixing
+     * @version V1.0 2021-03-15 17:20:31
+     */
+    List<Person> queryPersonList(QueryPersonDTO queryPersonDTO);
+
+    /**
+     * 根据部门id分页查询部门下的人员
+     *
+     * @param pageQueryPersonByDepDTO 分页查询部门下的人员入参
+     * @return 直属部门下的人员
+     * @author lixing
+     * @version V1.0 2021/3/15 5:21 下午
+     */
+    IPage<ResponsePersonListItemVO> pageQueryPersonListByDepId(PageQueryPersonByDepDTO pageQueryPersonByDepDTO);
+
+    /**
+     * 分页查询人员
+     *
+     * @param pageQueryPersonDTO pageQueryDTO
+     * @return IPage<Person>
+     * @author lixing
+     * @version V1.0 2021-03-15 17:20:31
+     */
+    IPage<Person> pageQueryPerson(PageQueryPersonDTO pageQueryPersonDTO);
+}

+ 304 - 0
fm-person/src/main/java/com/persagy/fm/person/service/impl/PersonServiceImpl.java

@@ -0,0 +1,304 @@
+package com.persagy.fm.person.service.impl;
+
+import com.persagy.fm.common.model.RequiredParamsStorage;
+import com.persagy.fm.person.dao.PersonMapper;
+import com.persagy.fm.person.model.vo.ResponsePersonListItemVO;
+import com.persagy.fm.person.service.IPersonService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.persagy.fm.workresume.model.WorkResume;
+import com.persagy.fm.workresume.model.dto.PageQueryWorkResumeDTO;
+import com.persagy.fm.workresume.service.IWorkResumeService;
+import org.assertj.core.util.Lists;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.apache.commons.lang.StringUtils;
+import com.persagy.fm.common.constant.enums.ValidEnum;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.persagy.fm.person.model.*;
+import com.persagy.fm.person.model.dto.*;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.google.common.base.CaseFormat;
+import com.persagy.fm.common.model.dto.Sort;
+import org.springframework.util.CollectionUtils;
+
+/**
+ * 人员(Person) service层
+ *
+ * @author lixing
+ * @version V1.0 2021-03-15 17:20:31
+ */
+@Service
+public class PersonServiceImpl extends ServiceImpl<PersonMapper, Person>
+        implements IPersonService {
+    @Autowired
+    private IWorkResumeService workResumeService;
+
+    /**
+     * 创建人员
+     *
+     * @return Long 人员主键
+     * @author lixing
+     * @version V1.0 2021-03-15 17:20:31
+     */
+    @Override
+    public Long createPerson(AddPersonDTO addPersonDTO) {
+        Person person = ConvertPersonTool.INSTANCE.convertAddDto2Entity(addPersonDTO);
+        // 设置默认值
+        setDefaultValue(person);
+        save(person);
+        return person.getId();
+    }
+
+    /**
+     * 如果某些字段没有赋值,使用默认的值
+     *
+     * @param person 人员实体
+     * @author lixing
+     * @version V1.0 2021/3/12 12:29 下午
+     */
+    private void setDefaultValue(Person person) {
+        person.setCreator(RequiredParamsStorage.getUserId());
+        // todo 其他默认的属性
+
+    }
+
+    /**
+     * 人员详情
+     *
+     * @param id 主键
+     * @return 部门do类
+     * @author lixing
+     * @version V1.0 2021-03-15 17:20:31
+     */
+    @Override
+    public Person queryPersonDetail(Long id) {
+        Person person = getById(id);
+        if (person == null) {
+            throw new IllegalArgumentException("查看Person详情时发生异常,找不到要查看的记录,id=" + id);
+        }
+        return person;
+    }
+
+    /**
+     * 更新人员
+     *
+     * @author lixing
+     * @version V1.0 2021-03-15 17:20:31
+     */
+    @Override
+    public void updatePerson(UpdatePersonDTO updatePersonDTO) {
+        Person person = getById(updatePersonDTO.getId());
+        person = ConvertPersonTool.INSTANCE.convertUpdateDto2Entity(person, updatePersonDTO);
+        person.setModifier(RequiredParamsStorage.getUserId());
+        updateById(person);
+    }
+
+    /**
+     * 校验人员是否可删除
+     *
+     * @param id 人员主键
+     * @return 人员do类
+     * @author lixing
+     * @version V1.0 2021-03-15 17:20:31
+     */
+    public Person checkDeletable(Long id) {
+        if (id == null) {
+            throw new IllegalArgumentException("删除Person时发生异常,主键为空");
+        }
+
+        Person person = getById(id);
+
+        if (person == null) {
+            throw new IllegalArgumentException("删除Person时发生异常,找不到要删除的数据,id:" + id);
+        }
+
+        return person;
+    }
+
+    /**
+     * 删除人员
+     *
+     * @param id 主键
+     * @author lixing
+     * @version V1.0 2021-03-15 17:20:31
+     */
+    @Override
+    public void deletePerson(Long id) {
+        // 校验是否可删除
+        Person person = checkDeletable(id);
+
+        person.setValid(ValidEnum.FALSE.getType());
+        updateById(person);
+    }
+
+    /**
+     * 查询人员
+     *
+     * @return List<Person>
+     * @author lixing
+     * @version V1.0 2021-03-15 17:20:31
+     */
+    @Override
+    public List<Person> queryPersonList(QueryPersonDTO queryPersonDTO) {
+        QueryWrapper<Person> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq(Person.PROP_VALID, ValidEnum.TRUE.getType());
+        // 默认按创建时间倒序排序
+        queryWrapper.orderBy(true, false, Person.PROP_CREATIONTIME);
+
+        if (queryPersonDTO != null) {
+
+            // todo 需判断使用like还是eq
+            if (StringUtils.isNotEmpty(queryPersonDTO.getName())) {
+                queryWrapper.like(Person.PROP_NAME, queryPersonDTO.getName());
+            }
+
+            // todo 需判断使用like还是eq
+            if (StringUtils.isNotEmpty(queryPersonDTO.getUsername())) {
+                queryWrapper.like(Person.PROP_USERNAME, queryPersonDTO.getUsername());
+            }
+
+            // todo 需判断使用like还是eq
+            if (StringUtils.isNotEmpty(queryPersonDTO.getIdNumber())) {
+                queryWrapper.like(Person.PROP_ID_NUMBER, queryPersonDTO.getIdNumber());
+            }
+
+            if (queryPersonDTO.getGender() != null) {
+                queryWrapper.eq(Person.PROP_GENDER, queryPersonDTO.getGender());
+            }
+
+            if (queryPersonDTO.getBirthday() != null) {
+                queryWrapper.eq(Person.PROP_BIRTHDAY, queryPersonDTO.getBirthday());
+            }
+
+            // todo 需判断使用like还是eq
+            if (StringUtils.isNotEmpty(queryPersonDTO.getOtherAccount())) {
+                queryWrapper.like(Person.PROP_OTHER_ACCOUNT, queryPersonDTO.getOtherAccount());
+            }
+
+            // todo 需判断使用like还是eq
+            if (StringUtils.isNotEmpty(queryPersonDTO.getUserFrom())) {
+                queryWrapper.like(Person.PROP_USER_FROM, queryPersonDTO.getUserFrom());
+            }
+
+            // todo 需判断使用like还是eq
+            if (StringUtils.isNotEmpty(queryPersonDTO.getRemark())) {
+                queryWrapper.like(Person.PROP_REMARK, queryPersonDTO.getRemark());
+            }
+
+            // todo 需判断使用like还是eq
+            if (StringUtils.isNotEmpty(queryPersonDTO.getProfession())) {
+                queryWrapper.like(Person.PROP_PROFESSION, queryPersonDTO.getProfession());
+            }
+
+        }
+
+        return list(queryWrapper);
+    }
+
+    @Override
+    public IPage<ResponsePersonListItemVO> pageQueryPersonListByDepId(PageQueryPersonByDepDTO pageQueryPersonByDepDTO) {
+        // 根据工作信息获取部门下的人员
+        PageQueryWorkResumeDTO pageQueryWorkResumeDTO = ConvertPersonTool.INSTANCE.
+                convert2PageQueryWorkResumeDTO(pageQueryPersonByDepDTO);
+        IPage<WorkResume> workResumePagedList = workResumeService.pageQueryWorkResume(pageQueryWorkResumeDTO);
+        List<WorkResume> workResumeList = workResumePagedList.getRecords();
+
+        /* 将工作信息转换为人员信息 */
+        if (CollectionUtils.isEmpty(workResumeList)) {
+            IPage<ResponsePersonListItemVO> result = new Page<>();
+            result.setRecords(Lists.newArrayList());
+            result.setTotal(0);
+            return result;
+        }
+
+        // 获取人员的基本信息
+        List<Long> personIdList = workResumeList.stream().map(WorkResume::getPersonId).collect(Collectors.toList());
+        List<Person> people = listByIds(personIdList);
+
+        // TODO: 2021/3/15  获取账号的信息
+
+        // 数据转换
+        List<ResponsePersonListItemVO> responsePersonListItems = ConvertPersonTool.INSTANCE.convert2List(people);
+        IPage<ResponsePersonListItemVO> result = new Page<>();
+        result.setRecords(responsePersonListItems);
+        result.setTotal(workResumePagedList.getTotal());
+        return result;
+    }
+
+    /**
+     * 分页查询人员
+     *
+     * @return IPage<Person>
+     * @author lixing
+     * @version V1.0 2021-03-15 17:20:31
+     */
+    @Override
+    public IPage<Person> pageQueryPerson(PageQueryPersonDTO pageQueryPersonDTO) {
+        QueryWrapper<Person> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq(Person.PROP_VALID, ValidEnum.TRUE.getType());
+        // 这里认为pageQueryDTO是经过校验的,肯定包含分页信息
+        IPage<Person> pageParam = new Page<>(pageQueryPersonDTO.getPage(), pageQueryPersonDTO.getSize(), true);
+        // 排序信息
+        if (CollectionUtils.isEmpty(pageQueryPersonDTO.getOrders())) {
+            // 默认按创建时间倒序排序
+            queryWrapper.orderBy(true, false, Person.PROP_CREATIONTIME);
+        } else {
+            List<Sort> orders = pageQueryPersonDTO.getOrders();
+            for (Sort sort : orders) {
+                // 将驼峰转换为下划线格式
+                sort.setColumn(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, sort.getColumn()));
+                queryWrapper.orderBy(true, sort.isAsc(), sort.getColumn());
+            }
+        }
+
+        // todo 需判断使用like还是eq
+        if (StringUtils.isNotEmpty(pageQueryPersonDTO.getName())) {
+            queryWrapper.like(Person.PROP_NAME, pageQueryPersonDTO.getName());
+        }
+
+        // todo 需判断使用like还是eq
+        if (StringUtils.isNotEmpty(pageQueryPersonDTO.getUsername())) {
+            queryWrapper.like(Person.PROP_USERNAME, pageQueryPersonDTO.getUsername());
+        }
+
+        // todo 需判断使用like还是eq
+        if (StringUtils.isNotEmpty(pageQueryPersonDTO.getIdNumber())) {
+            queryWrapper.like(Person.PROP_ID_NUMBER, pageQueryPersonDTO.getIdNumber());
+        }
+
+        if (pageQueryPersonDTO.getGender() != null) {
+            queryWrapper.eq(Person.PROP_GENDER, pageQueryPersonDTO.getGender());
+        }
+
+        if (pageQueryPersonDTO.getBirthday() != null) {
+            queryWrapper.eq(Person.PROP_BIRTHDAY, pageQueryPersonDTO.getBirthday());
+        }
+
+        // todo 需判断使用like还是eq
+        if (StringUtils.isNotEmpty(pageQueryPersonDTO.getOtherAccount())) {
+            queryWrapper.like(Person.PROP_OTHER_ACCOUNT, pageQueryPersonDTO.getOtherAccount());
+        }
+
+        // todo 需判断使用like还是eq
+        if (StringUtils.isNotEmpty(pageQueryPersonDTO.getUserFrom())) {
+            queryWrapper.like(Person.PROP_USER_FROM, pageQueryPersonDTO.getUserFrom());
+        }
+
+        // todo 需判断使用like还是eq
+        if (StringUtils.isNotEmpty(pageQueryPersonDTO.getRemark())) {
+            queryWrapper.like(Person.PROP_REMARK, pageQueryPersonDTO.getRemark());
+        }
+
+        // todo 需判断使用like还是eq
+        if (StringUtils.isNotEmpty(pageQueryPersonDTO.getProfession())) {
+            queryWrapper.like(Person.PROP_PROFESSION, pageQueryPersonDTO.getProfession());
+        }
+
+        return getBaseMapper().selectPage(pageParam, queryWrapper);
+    }
+}

+ 93 - 0
fm-person/src/main/java/com/persagy/fm/workresume/controller/WorkResumeController.java

@@ -0,0 +1,93 @@
+package com.persagy.fm.workresume.controller;
+
+import com.persagy.fm.workresume.service.IWorkResumeService;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import com.persagy.fm.workresume.model.*;
+import com.persagy.fm.workresume.model.vo.*;
+import com.persagy.fm.workresume.model.dto.*;
+import com.persagy.fm.common.response.*;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+ * 工作信息控制层
+ *
+ * @author lixing
+ * @version V1.0 2021-03-15 17:20:06
+ */
+@Api(tags = "工作信息")
+@Validated
+@RestController
+@RequestMapping("workResumes")
+public class WorkResumeController {
+    @Autowired
+    private IWorkResumeService workResumeService;
+
+    @ApiOperation(value = "创建工作信息")
+    @PostMapping("/create")
+    public FmResponseItem<FmResponseUpsertVO> createWorkResume(
+            @Valid @RequestBody AddWorkResumeDTO addWorkResumeDTO) {
+        Long id = workResumeService.createWorkResume(addWorkResumeDTO);
+        return FmResponseUtil.successItem(new FmResponseUpsertVO(id));
+    }
+
+    @ApiOperation(value = "工作信息详情")
+    @PostMapping("/get")
+    public FmResponseItem<ResponseWorkResumeItemVO> queryWorkResumeDetail(
+            @Valid @RequestBody QueryWorkResumeDetailDTO queryWorkResumeDetailDTO) {
+        WorkResume workResume = workResumeService.queryWorkResumeDetail(queryWorkResumeDetailDTO.getId());
+        ResponseWorkResumeItemVO responseWorkResumeItemVO = ConvertWorkResumeTool.INSTANCE.convert2ResponseItemDTO(workResume);
+        return FmResponseUtil.successItem(responseWorkResumeItemVO);
+    }
+
+
+    @ApiOperation(value = "更新工作信息")
+    @PostMapping("/update")
+    public FmResponseItem<FmResponseUpsertVO> updateWorkResume(
+            @Valid @RequestBody UpdateWorkResumeDTO updateWorkResumeDTO) {
+        workResumeService.updateWorkResume(updateWorkResumeDTO);
+        return FmResponseUtil.successItem(new FmResponseUpsertVO(updateWorkResumeDTO.getId()));
+    }
+
+
+    @ApiOperation(value = "删除工作信息")
+    @PostMapping("/delete")
+    public FmResponseMsg deleteWorkResume(
+            @RequestBody @Valid DeleteWorkResumeDTO deleteWorkResumeDTO) {
+        workResumeService.deleteWorkResume(deleteWorkResumeDTO.getId());
+        return FmResponseUtil.successMsg("删除成功");
+    }
+
+
+    @ApiOperation(value = "工作信息列表")
+    @PostMapping("/query")
+    public FmResponseContent<List<ResponseWorkResumeListItemVO>> queryWorkResume(
+            @Valid @RequestBody QueryWorkResumeDTO queryWorkResumeDTO) {
+        List<WorkResume> workResumeList = workResumeService.queryWorkResumeList(queryWorkResumeDTO);
+        List<ResponseWorkResumeListItemVO> resultList = ConvertWorkResumeTool.INSTANCE.convert2List(workResumeList);
+        return FmResponseUtil.successContent(resultList);
+    }
+
+    //@ApiOperation(value = "工作信息列表, 分页查询")
+    //@PostMapping("/query")
+    //public FmResponseContent<List<ResponseWorkResumeListItemVO>> queryWorkResume(
+    //        @Valid @RequestBody PageQueryWorkResumeDTO pageQueryWorkResumeDTO) {
+    //    IPage<ResponseWorkResumeListItemVO> pagedList = workResumeService.pageQueryWorkResume(pageQueryWorkResumeDTO);
+    //    IPage<ResponseWorkResumeListItemVO> pagedResultList = pagedList.convert(item -> {
+    //        try {
+    //           return ConvertWorkResumeTool.INSTANCE.convert2ResponseListItemDTO(item);
+    //        } catch (Exception e) {
+    //            throw new IllegalArgumentException("分页查询,WorkResume实体类转换为列表对象发生异常", e);
+    //        }
+    //    });
+    //    return FmResponseUtil.successContent(pagedResultList);;
+    //}
+}
+

+ 16 - 0
fm-person/src/main/java/com/persagy/fm/workresume/dao/WorkResumeMapper.java

@@ -0,0 +1,16 @@
+package com.persagy.fm.workresume.dao;
+
+import com.persagy.fm.workresume.model.WorkResume;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 工作信息(WorkResume)dao层
+ *
+ * @author lixing
+ * @version V1.0 2021-03-15 17:20:07
+ */
+@Mapper
+public interface WorkResumeMapper extends BaseMapper<WorkResume> {
+
+}

+ 73 - 0
fm-person/src/main/java/com/persagy/fm/workresume/model/ConvertWorkResumeTool.java

@@ -0,0 +1,73 @@
+package com.persagy.fm.workresume.model;
+
+import org.mapstruct.Mapper;
+import org.mapstruct.MappingTarget;
+import org.mapstruct.factory.Mappers;
+import com.persagy.fm.workresume.model.vo.*;
+import com.persagy.fm.workresume.model.dto.*;
+
+import java.util.List;
+
+/**
+ * 工作信息(WorkResume) dto、vo、do转换工具类
+ *
+ * @author lixing
+ * @version V1.0 2021-03-15 17:20:08 2021-03-15 17:20:08
+ */
+@Mapper
+public interface ConvertWorkResumeTool {
+
+    ConvertWorkResumeTool INSTANCE = Mappers.getMapper(ConvertWorkResumeTool.class);
+
+    /**
+     * do转换为ResponseItemVO
+     *
+     * @param workResume do对象
+     * @return ResponseItemVO
+     * @author lixing
+     * @version V1.0 2021-03-15 17:20:08
+     */
+    ResponseWorkResumeItemVO convert2ResponseItemDTO(WorkResume workResume);
+
+    /**
+     * do转换为ResponseListItemVO
+     *
+     * @param workResume do对象
+     * @return ResponseListItemVO
+     * @author lixing
+     * @version V1.0 2021-03-15 17:20:08
+     */
+    ResponseWorkResumeListItemVO convert2ResponseListItemDTO(WorkResume workResume);
+
+    /**
+     * do列表转换为ResponseListItemVO列表
+     *
+     * @param workResumeList do列表
+     * @return ResponseListItemVO列表
+     * @author lixing
+     * @version V1.0 2021-03-15 17:20:08
+     */
+    List<ResponseWorkResumeListItemVO> convert2List(List<WorkResume> workResumeList);
+
+    /**
+     * addDTO转换为do
+     *
+     * @param addWorkResumeDTO addDTO
+     * @return 要创建的do对象
+     * @author lixing
+     * @version V1.0 2021-03-15 17:20:08
+     */
+    WorkResume convertAddDto2Entity(AddWorkResumeDTO addWorkResumeDTO);
+
+    /**
+     * updateDTO转换为实体
+     *
+     * @param workResume          更新前的do对象
+     * @param updateWorkResumeDTO updateDTO
+     * @return 更新后的do对象
+     * @author lixing
+     * @version V1.0 2021-03-15 17:20:08
+     */
+    WorkResume convertUpdateDto2Entity(@MappingTarget WorkResume workResume, UpdateWorkResumeDTO updateWorkResumeDTO);
+}
+

+ 44 - 0
fm-person/src/main/java/com/persagy/fm/workresume/model/WorkResume.java

@@ -0,0 +1,44 @@
+package com.persagy.fm.workresume.model;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import com.persagy.fm.common.model.entity.AuditableEntity;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 工作信息(WorkResume)实体类
+ *
+ * @author lixing
+ * @version V1.0 2021-03-15 17:20:07
+ */
+@Data
+@ApiModel(description = "工作信息")
+public class WorkResume extends AuditableEntity<WorkResume> implements Serializable {
+    private static final long serialVersionUID = -83670378701786778L;
+
+    @ApiModelProperty("人员主键")
+    private Long personId;
+
+    @ApiModelProperty("部门主键")
+    private Long depId;
+
+    @ApiModelProperty("状态")
+    private Integer state;
+
+    @ApiModelProperty("入职时间")
+    private Date hiredDate;
+
+    @ApiModelProperty("离职时间")
+    private Date departureDate;
+
+
+    public static String PROP_PERSON_ID = "person_id";
+    public static String PROP_DEP_ID = "dep_id";
+    public static String PROP_STATE = "state";
+    public static String PROP_HIRED_DATE = "hired_date";
+    public static String PROP_DEPARTURE_DATE = "departure_date";
+
+}

+ 39 - 0
fm-person/src/main/java/com/persagy/fm/workresume/model/dto/AddWorkResumeDTO.java

@@ -0,0 +1,39 @@
+package com.persagy.fm.workresume.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import javax.validation.constraints.NotNull;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author lixing
+ * @version V1.0 2021-03-15 17:20:07
+ */
+@Data
+@ApiModel(value = "创建工作信息入参")
+public class AddWorkResumeDTO {
+    @ApiModelProperty(value = "人员主键", required = true)
+    @NotNull(message = "人员主键不能为空") // todo 更新校验规则
+    private Long personId;
+
+    @ApiModelProperty(value = "部门主键", required = true)
+    @NotNull(message = "部门主键不能为空") // todo 更新校验规则
+    private Long depId;
+
+    @ApiModelProperty(value = "状态", required = true)
+    @NotNull(message = "状态不能为空") // todo 更新校验规则
+    private Integer state;
+
+    @ApiModelProperty(value = "入职时间", required = true)
+    @NotNull(message = "入职时间不能为空") // todo 更新校验规则
+    private Date hiredDate;
+
+    @ApiModelProperty(value = "离职时间", required = true)
+    @NotNull(message = "离职时间不能为空") // todo 更新校验规则
+    private Date departureDate;
+
+}

+ 20 - 0
fm-person/src/main/java/com/persagy/fm/workresume/model/dto/DeleteWorkResumeDTO.java

@@ -0,0 +1,20 @@
+package com.persagy.fm.workresume.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author lixing
+ * @version V1.0 2021-03-15 17:20:07
+ */
+@Data
+@ApiModel(value = "删除工作信息入参")
+public class DeleteWorkResumeDTO {
+    @NotNull(message = "id不能为空")
+    @ApiModelProperty(value = "id", required = true)
+    private Long id;
+
+}

+ 36 - 0
fm-person/src/main/java/com/persagy/fm/workresume/model/dto/PageQueryWorkResumeDTO.java

@@ -0,0 +1,36 @@
+package com.persagy.fm.workresume.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.Date;
+
+import com.persagy.fm.common.model.dto.PageDTO;
+import lombok.Data;
+
+/**
+ * @author lixing
+ * @version V1.0 2021-03-15 17:20:08
+ */
+@Data
+@ApiModel(value = "分页查询工作信息入参")
+public class PageQueryWorkResumeDTO extends PageDTO {
+    @ApiModelProperty(value = "id", required = true)
+    private Long id;
+
+    @ApiModelProperty(value = "人员主键", required = true)
+    private Long personId;
+
+    @ApiModelProperty(value = "部门主键", required = true)
+    private Long depId;
+
+    @ApiModelProperty(value = "状态", required = true)
+    private Integer state;
+
+    @ApiModelProperty(value = "入职时间", required = true)
+    private Date hiredDate;
+
+    @ApiModelProperty(value = "离职时间", required = true)
+    private Date departureDate;
+
+}

+ 31 - 0
fm-person/src/main/java/com/persagy/fm/workresume/model/dto/QueryWorkResumeDTO.java

@@ -0,0 +1,31 @@
+package com.persagy.fm.workresume.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author lixing
+ * @version V1.0 2021-03-15 17:20:08
+ */
+@Data
+@ApiModel(value = "查询工作信息入参")
+public class QueryWorkResumeDTO {
+    @ApiModelProperty(value = "人员主键", required = true)
+    private Long personId;
+
+    @ApiModelProperty(value = "部门主键", required = true)
+    private Long depId;
+
+    @ApiModelProperty(value = "状态", required = true)
+    private Integer state;
+
+    @ApiModelProperty(value = "入职时间", required = true)
+    private Date hiredDate;
+
+    @ApiModelProperty(value = "离职时间", required = true)
+    private Date departureDate;
+
+}

+ 20 - 0
fm-person/src/main/java/com/persagy/fm/workresume/model/dto/QueryWorkResumeDetailDTO.java

@@ -0,0 +1,20 @@
+package com.persagy.fm.workresume.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author lixing
+ * @version V1.0 2021-03-15 17:20:07
+ */
+@Data
+@ApiModel(value = "获取工作信息详情入参")
+public class QueryWorkResumeDetailDTO {
+    @NotNull(message = "id不能为空")
+    @ApiModelProperty(value = "id", required = true)
+    private Long id;
+
+}

+ 43 - 0
fm-person/src/main/java/com/persagy/fm/workresume/model/dto/UpdateWorkResumeDTO.java

@@ -0,0 +1,43 @@
+package com.persagy.fm.workresume.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import javax.validation.constraints.NotNull;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author lixing
+ * @version V1.0 2021-03-15 17:20:07
+ */
+@Data
+@ApiModel(value = "更新工作信息入参")
+public class UpdateWorkResumeDTO {
+    @ApiModelProperty(value = "id", required = true)
+    @NotNull(message = "id不能为空") // todo 更新校验规则
+    private Long id;
+
+    @ApiModelProperty(value = "人员主键", required = true)
+    @NotNull(message = "人员主键不能为空") // todo 更新校验规则
+    private Long personId;
+
+    @ApiModelProperty(value = "部门主键", required = true)
+    @NotNull(message = "部门主键不能为空") // todo 更新校验规则
+    private Long depId;
+
+    @ApiModelProperty(value = "状态", required = true)
+    @NotNull(message = "状态不能为空") // todo 更新校验规则
+    private Integer state;
+
+    @ApiModelProperty(value = "入职时间", required = true)
+    @NotNull(message = "入职时间不能为空") // todo 更新校验规则
+    private Date hiredDate;
+
+    @ApiModelProperty(value = "离职时间", required = true)
+    @NotNull(message = "离职时间不能为空") // todo 更新校验规则
+    private Date departureDate;
+
+}

+ 49 - 0
fm-person/src/main/java/com/persagy/fm/workresume/model/vo/ResponseWorkResumeItemVO.java

@@ -0,0 +1,49 @@
+package com.persagy.fm.workresume.model.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+
+/**
+ * @author lixing
+ * @version V1.0 2021-03-15 17:20:08
+ */
+@Data
+@ApiModel(value = "工作信息返回结果参数")
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class ResponseWorkResumeItemVO {
+    @ApiModelProperty("id")
+    private Long id;
+
+    @ApiModelProperty("人员主键")
+    private Long personId;
+
+    @ApiModelProperty("部门主键")
+    private Long depId;
+
+    @ApiModelProperty("状态")
+    private Integer state;
+
+    @ApiModelProperty("入职时间")
+    private Date hiredDate;
+
+    @ApiModelProperty("离职时间")
+    private Date departureDate;
+
+    @ApiModelProperty("创建人")
+    private String creator;
+
+    @ApiModelProperty("创建时间")
+    private Date creationTime;
+
+    @ApiModelProperty("最后修改人")
+    private String modifier;
+
+    @ApiModelProperty("最后修改时间")
+    private Date modifiedTime;
+
+}

+ 49 - 0
fm-person/src/main/java/com/persagy/fm/workresume/model/vo/ResponseWorkResumeListItemVO.java

@@ -0,0 +1,49 @@
+package com.persagy.fm.workresume.model.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+
+/**
+ * @author lixing
+ * @version V1.0 2021-03-15 17:20:08
+ */
+@Data
+@ApiModel(value = "工作信息列表返回结果参数")
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class ResponseWorkResumeListItemVO {
+    @ApiModelProperty("id")
+    private Long id;
+
+    @ApiModelProperty("人员主键")
+    private Long personId;
+
+    @ApiModelProperty("部门主键")
+    private Long depId;
+
+    @ApiModelProperty("状态")
+    private Integer state;
+
+    @ApiModelProperty("入职时间")
+    private Date hiredDate;
+
+    @ApiModelProperty("离职时间")
+    private Date departureDate;
+
+    @ApiModelProperty("创建人")
+    private String creator;
+
+    @ApiModelProperty("创建时间")
+    private Date creationTime;
+
+    @ApiModelProperty("最后修改人")
+    private String modifier;
+
+    @ApiModelProperty("最后修改时间")
+    private Date modifiedTime;
+
+}

+ 77 - 0
fm-person/src/main/java/com/persagy/fm/workresume/service/IWorkResumeService.java

@@ -0,0 +1,77 @@
+package com.persagy.fm.workresume.service;
+
+import com.persagy.fm.workresume.model.*;
+import com.persagy.fm.workresume.model.dto.*;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 工作信息(WorkResume) service接口
+ *
+ * @author lixing
+ * @version V1.0 2021-03-15 17:20:06
+ */
+public interface IWorkResumeService {
+
+    /**
+     * 创建工作信息
+     *
+     * @param addWorkResumeDTO addDTO
+     * @return 工作信息主键
+     * @author lixing
+     * @version V1.0 2021-03-15 17:20:06
+     */
+    Long createWorkResume(AddWorkResumeDTO addWorkResumeDTO);
+
+    /**
+     * 工作信息详情
+     *
+     * @param id 主键
+     * @return 工作信息do对象
+     * @author lixing
+     * @version V1.0 2021-03-15 17:20:06
+     */
+    WorkResume queryWorkResumeDetail(Long id);
+
+    /**
+     * 更新工作信息
+     *
+     * @param updateWorkResumeDTO updateDTO
+     * @author lixing
+     * @version V1.0 2021-03-15 17:20:06
+     */
+    void updateWorkResume(UpdateWorkResumeDTO updateWorkResumeDTO);
+
+    /**
+     * 删除工作信息
+     *
+     * @param id 主键
+     * @author lixing
+     * @version V1.0 2021-03-15 17:20:06
+     */
+    void deleteWorkResume(Long id);
+
+    /**
+     * 查询工作信息
+     *
+     * @param queryWorkResumeDTO queryDTO
+     * @return List<WorkResume>
+     * @author lixing
+     * @version V1.0 2021-03-15 17:20:06
+     */
+    List<WorkResume> queryWorkResumeList(QueryWorkResumeDTO queryWorkResumeDTO);
+
+    /**
+     * 分页查询工作信息
+     *
+     * @param pageQueryWorkResumeDTO pageQueryDTO
+     * @return IPage<WorkResume>
+     * @author lixing
+     * @version V1.0 2021-03-15 17:20:06
+     */
+    IPage<WorkResume> pageQueryWorkResume(PageQueryWorkResumeDTO pageQueryWorkResumeDTO);
+}

+ 219 - 0
fm-person/src/main/java/com/persagy/fm/workresume/service/impl/WorkResumeServiceImpl.java

@@ -0,0 +1,219 @@
+package com.persagy.fm.workresume.service.impl;
+
+import com.persagy.fm.common.model.RequiredParamsStorage;
+import com.persagy.fm.workresume.dao.WorkResumeMapper;
+import com.persagy.fm.workresume.service.IWorkResumeService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import org.apache.commons.lang.StringUtils;
+import com.persagy.fm.common.constant.enums.ValidEnum;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.persagy.fm.workresume.model.*;
+import com.persagy.fm.workresume.model.dto.*;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.google.common.base.CaseFormat;
+import com.persagy.fm.common.model.dto.Sort;
+import org.springframework.util.CollectionUtils;
+
+/**
+ * 工作信息(WorkResume) service层
+ *
+ * @author lixing
+ * @version V1.0 2021-03-15 17:20:06
+ */
+@Service
+public class WorkResumeServiceImpl extends ServiceImpl<WorkResumeMapper, WorkResume>
+        implements IWorkResumeService {
+
+    /**
+     * 创建工作信息
+     *
+     * @return Long 工作信息主键
+     * @author lixing
+     * @version V1.0 2021-03-15 17:20:06
+     */
+    @Override
+    public Long createWorkResume(AddWorkResumeDTO addWorkResumeDTO) {
+        WorkResume workResume = ConvertWorkResumeTool.INSTANCE.convertAddDto2Entity(addWorkResumeDTO);
+        // 设置默认值
+        setDefaultValue(workResume);
+        save(workResume);
+        return workResume.getId();
+    }
+
+    /**
+     * 如果某些字段没有赋值,使用默认的值
+     *
+     * @param workResume 工作信息实体
+     * @author lixing
+     * @version V1.0 2021/3/12 12:29 下午
+     */
+    private void setDefaultValue(WorkResume workResume) {
+        workResume.setCreator(RequiredParamsStorage.getUserId());
+        // todo 其他默认的属性
+
+    }
+
+    /**
+     * 工作信息详情
+     *
+     * @param id 主键
+     * @return 部门do类
+     * @author lixing
+     * @version V1.0 2021-03-15 17:20:06
+     */
+    @Override
+    public WorkResume queryWorkResumeDetail(Long id) {
+        WorkResume workResume = getById(id);
+        if (workResume == null) {
+            throw new IllegalArgumentException("查看WorkResume详情时发生异常,找不到要查看的记录,id=" + id);
+        }
+        return workResume;
+    }
+
+    /**
+     * 更新工作信息
+     *
+     * @author lixing
+     * @version V1.0 2021-03-15 17:20:06
+     */
+    @Override
+    public void updateWorkResume(UpdateWorkResumeDTO updateWorkResumeDTO) {
+        WorkResume workResume = getById(updateWorkResumeDTO.getId());
+        workResume = ConvertWorkResumeTool.INSTANCE.convertUpdateDto2Entity(workResume, updateWorkResumeDTO);
+        workResume.setModifier(RequiredParamsStorage.getUserId());
+        updateById(workResume);
+    }
+
+    /**
+     * 校验工作信息是否可删除
+     *
+     * @param id 工作信息主键
+     * @return 工作信息do类
+     * @author lixing
+     * @version V1.0 2021-03-15 17:20:06
+     */
+    public WorkResume checkDeletable(Long id) {
+        if (id == null) {
+            throw new IllegalArgumentException("删除WorkResume时发生异常,主键为空");
+        }
+
+        WorkResume workResume = getById(id);
+
+        if (workResume == null) {
+            throw new IllegalArgumentException("删除WorkResume时发生异常,找不到要删除的数据,id:" + id);
+        }
+
+        return workResume;
+    }
+
+    /**
+     * 删除工作信息
+     *
+     * @param id 主键
+     * @author lixing
+     * @version V1.0 2021-03-15 17:20:06
+     */
+    @Override
+    public void deleteWorkResume(Long id) {
+        // 校验是否可删除
+        WorkResume workResume = checkDeletable(id);
+
+        workResume.setValid(ValidEnum.FALSE.getType());
+        updateById(workResume);
+    }
+
+    /**
+     * 查询工作信息
+     *
+     * @return List<WorkResume>
+     * @author lixing
+     * @version V1.0 2021-03-15 17:20:06
+     */
+    @Override
+    public List<WorkResume> queryWorkResumeList(QueryWorkResumeDTO queryWorkResumeDTO) {
+        QueryWrapper<WorkResume> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq(WorkResume.PROP_VALID, ValidEnum.TRUE.getType());
+        // 默认按创建时间倒序排序
+        queryWrapper.orderBy(true, false, WorkResume.PROP_CREATIONTIME);
+
+        if (queryWorkResumeDTO != null) {
+
+            if (queryWorkResumeDTO.getPersonId() != null) {
+                queryWrapper.eq(WorkResume.PROP_PERSON_ID, queryWorkResumeDTO.getPersonId());
+            }
+
+            if (queryWorkResumeDTO.getDepId() != null) {
+                queryWrapper.eq(WorkResume.PROP_DEP_ID, queryWorkResumeDTO.getDepId());
+            }
+
+            if (queryWorkResumeDTO.getState() != null) {
+                queryWrapper.eq(WorkResume.PROP_STATE, queryWorkResumeDTO.getState());
+            }
+
+            if (queryWorkResumeDTO.getHiredDate() != null) {
+                queryWrapper.eq(WorkResume.PROP_HIRED_DATE, queryWorkResumeDTO.getHiredDate());
+            }
+
+            if (queryWorkResumeDTO.getDepartureDate() != null) {
+                queryWrapper.eq(WorkResume.PROP_DEPARTURE_DATE, queryWorkResumeDTO.getDepartureDate());
+            }
+
+        }
+
+        return list(queryWrapper);
+    }
+
+    /**
+     * 分页查询工作信息
+     *
+     * @return IPage<WorkResume>
+     * @author lixing
+     * @version V1.0 2021-03-15 17:20:06
+     */
+    @Override
+    public IPage<WorkResume> pageQueryWorkResume(PageQueryWorkResumeDTO pageQueryWorkResumeDTO) {
+        QueryWrapper<WorkResume> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq(WorkResume.PROP_VALID, ValidEnum.TRUE.getType());
+        // 这里认为pageQueryDTO是经过校验的,肯定包含分页信息
+        IPage<WorkResume> pageParam = new Page<>(pageQueryWorkResumeDTO.getPage(), pageQueryWorkResumeDTO.getSize(), true);
+        // 排序信息
+        if (CollectionUtils.isEmpty(pageQueryWorkResumeDTO.getOrders())) {
+            // 默认按创建时间倒序排序
+            queryWrapper.orderBy(true, false, WorkResume.PROP_CREATIONTIME);
+        } else {
+            List<Sort> orders = pageQueryWorkResumeDTO.getOrders();
+            for (Sort sort : orders) {
+                // 将驼峰转换为下划线格式
+                sort.setColumn(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, sort.getColumn()));
+                queryWrapper.orderBy(true, sort.isAsc(), sort.getColumn());
+            }
+        }
+
+        if (pageQueryWorkResumeDTO.getPersonId() != null) {
+            queryWrapper.eq(WorkResume.PROP_PERSON_ID, pageQueryWorkResumeDTO.getPersonId());
+        }
+
+        if (pageQueryWorkResumeDTO.getDepId() != null) {
+            queryWrapper.eq(WorkResume.PROP_DEP_ID, pageQueryWorkResumeDTO.getDepId());
+        }
+
+        if (pageQueryWorkResumeDTO.getState() != null) {
+            queryWrapper.eq(WorkResume.PROP_STATE, pageQueryWorkResumeDTO.getState());
+        }
+
+        if (pageQueryWorkResumeDTO.getHiredDate() != null) {
+            queryWrapper.eq(WorkResume.PROP_HIRED_DATE, pageQueryWorkResumeDTO.getHiredDate());
+        }
+
+        if (pageQueryWorkResumeDTO.getDepartureDate() != null) {
+            queryWrapper.eq(WorkResume.PROP_DEPARTURE_DATE, pageQueryWorkResumeDTO.getDepartureDate());
+        }
+
+        return getBaseMapper().selectPage(pageParam, queryWrapper);
+    }
+}

+ 23 - 0
fm-person/src/main/resources/mapper/PersonMapper.xml

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.persagy.fm.person.dao.PersonDao">
+    <resultMap id="PersonMap" type="com.persagy.fm.person.model.Person">
+        <result column="id" property="id"/>
+        <result column="name" property="name"/>
+        <result column="username" property="username"/>
+        <result column="id_number" property="idNumber"/>
+        <result column="gender" property="gender"/>
+        <result column="birthday" property="birthday"/>
+        <result column="other_account" property="otherAccount"/>
+        <result column="user_from" property="userFrom"/>
+        <result column="remark" property="remark"/>
+        <result column="profession" property="profession"/>
+        <result column="ts" property="ts"/>
+        <result column="creation_time" property="creationTime"/>
+        <result column="creator" property="creator"/>
+        <result column="modifier" property="modifier"/>
+        <result column="modified_time" property="modifiedTime"/>
+        <result column="valid" property="valid"/>
+    </resultMap>
+</mapper>
+

+ 19 - 0
fm-person/src/main/resources/mapper/WorkResumeMapper.xml

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.persagy.fm.workresume.dao.WorkResumeDao">
+    <resultMap id="WorkResumeMap" type="com.persagy.fm.workresume.model.WorkResume">
+        <result column="id" property="id"/>
+        <result column="person_id" property="personId"/>
+        <result column="dep_id" property="depId"/>
+        <result column="state" property="state"/>
+        <result column="hired_date" property="hiredDate"/>
+        <result column="departure_date" property="departureDate"/>
+        <result column="ts" property="ts"/>
+        <result column="creator" property="creator"/>
+        <result column="creation_time" property="creationTime"/>
+        <result column="modifier" property="modifier"/>
+        <result column="modified_time" property="modifiedTime"/>
+        <result column="valid" property="valid"/>
+    </resultMap>
+</mapper>
+

+ 4 - 0
fm-person/src/script/start.bat

@@ -0,0 +1,4 @@
+@ECHO OFF&PUSHD %~DP0 &TITLE fm-person
+@ECHO 根据情况使用内存限制 命令为:
+@ECHO java -jar -Xms500m -Xmx2048m -Dfile.encoding=utf-8 fm-person.jar
+java -jar -Xms500m -Xmx1024m -Dfile.encoding=utf-8 -DCONFIG_FILE_PATH=D:\SpringCloud fm-person.jar

+ 5 - 0
fm-person/src/script/start.sh

@@ -0,0 +1,5 @@
+#!/bin/sh
+# 根据情况使用内存限制 命令为:
+nohup java -jar -Xms500m -Xmx2048m -Dfile.encoding=utf-8 -DCONFIG_FILE_PATH=/mnt/data/SpringCloud fm-person.jar >/dev/null 2>&1 &
+sleep 2
+tail -f ../logs/fm-person/log.log

+ 23 - 0
fm-person/src/script/zip.xml

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<assembly
+        xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/3.1.1"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/3.1.1 http://maven.apache.org/xsd/assembly-3.1.1.xsd">
+    <id>dev</id>
+    <formats>
+        <format>zip</format>
+    </formats>
+    <includeBaseDirectory>false</includeBaseDirectory>
+    <fileSets>
+        <fileSet>
+            <directory>${basedir}/target/</directory>
+            <includes>
+                <include>config/</include>
+                <include>*.jar</include>
+                <include>start.bat</include>
+                <include>start.sh</include>
+            </includes>
+            <outputDirectory>/</outputDirectory>
+        </fileSet>
+    </fileSets>
+</assembly>