Преглед на файлове

Merge branch 'master' of http://47.110.251.215:3000/java_org/bladex

huangtf преди 2 години
родител
ревизия
cea9ed4716
променени са 23 файла, в които са добавени 844 реда и са изтрити 29 реда
  1. 34 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/UserContractInfoDTO.java
  2. 0 2
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/PlanInform.java
  3. 79 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/UserContractInfo.java
  4. 8 3
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/UserpayInfo.java
  5. 1 6
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/DepartmentMonthPlanVO.java
  6. 34 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/UserContractInfoVO.java
  7. 10 0
      blade-service/blade-control/pom.xml
  8. 1 1
      blade-service/blade-control/src/main/java/org/springblade/control/controller/AttendanceManagerController.java
  9. 193 0
      blade-service/blade-control/src/main/java/org/springblade/control/controller/CorporationInfoController.java
  10. 3 3
      blade-service/blade-control/src/main/java/org/springblade/control/controller/LogHistoryController.java
  11. 117 0
      blade-service/blade-control/src/main/java/org/springblade/control/controller/UserContractInfoController.java
  12. 43 0
      blade-service/blade-control/src/main/java/org/springblade/control/controller/UserpayInfoController.java
  13. 120 0
      blade-service/blade-control/src/main/java/org/springblade/control/excel/UserpayExcel.java
  14. 1 1
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/AnnualBudgetMapper.xml
  15. 43 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/UserContractInfoMapper.java
  16. 24 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/UserContractInfoMapper.xml
  17. 1 1
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/UserpayInfoMapper.xml
  18. 41 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/IUserContractInfoService.java
  19. 6 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/AttendanceTripServiceImpl.java
  20. 4 1
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/LogHistoryServiceImpl.java
  21. 1 1
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectCostBudgetServiceImpl.java
  22. 39 10
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/TaskProcessServiceImpl.java
  23. 41 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/UserContractInfoServiceImpl.java

+ 34 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/UserContractInfoDTO.java

@@ -0,0 +1,34 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.control.dto;
+
+import org.springblade.control.entity.UserContractInfo;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 员工合同信息表数据传输对象实体类
+ *
+ * @author BladeX
+ * @since 2023-07-06
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class UserContractInfoDTO extends UserContractInfo {
+    private static final long serialVersionUID = 1L;
+
+}

+ 0 - 2
blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/PlanInform.java

@@ -36,6 +36,4 @@ public class PlanInform extends BaseEntity {
     @ApiModelProperty(value = "通知时间")
     private LocalDate informDate;
 
-
-
 }

+ 79 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/UserContractInfo.java

@@ -0,0 +1,79 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.control.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+import io.swagger.annotations.ApiModelProperty;
+import org.springblade.core.mp.base.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 员工合同信息表实体类
+ *
+ * @author BladeX
+ * @since 2023-07-06
+ */
+@Data
+@TableName("c_user_contract_info")
+@EqualsAndHashCode(callSuper = true)
+public class UserContractInfo extends BaseEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 用户主建Id
+     */
+    @ApiModelProperty(value = "用户主建Id")
+    private Long userId;
+    /**
+     * 合同类型
+     */
+    @ApiModelProperty(value = "合同类型")
+    private Integer conType;
+    /**
+     * 开始日期
+     */
+    @ApiModelProperty(value = "开始日期")
+    private LocalDateTime startDate;
+    /**
+     * 结束日期
+     */
+    @ApiModelProperty(value = "结束日期")
+    private LocalDateTime endDate;
+    /**
+     * 文件路径
+     */
+    @ApiModelProperty(value = "文件路径")
+    private String fileUrl;
+    /**
+     * 1:合同 2入职 3 离职
+     */
+    @ApiModelProperty(value = "1:合同 2入职 3 离职")
+    private Integer type;
+
+    /**
+     * 离职原因
+     */
+    @ApiModelProperty(value = "离职原因")
+    private String desc;
+
+}

+ 8 - 3
blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/UserpayInfo.java

@@ -20,7 +20,9 @@ import com.baomidou.mybatisplus.annotation.TableName;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
+import java.time.LocalDate;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
 import org.springblade.core.mp.base.BaseEntity;
 import lombok.Data;
@@ -33,7 +35,7 @@ import lombok.EqualsAndHashCode;
  * @since 2023-07-06
  */
 @Data
-@TableName("c_userpay_info")
+@TableName("c_user_pay_info")
 @EqualsAndHashCode(callSuper = true)
 public class UserpayInfo extends BaseEntity {
 
@@ -44,11 +46,15 @@ public class UserpayInfo extends BaseEntity {
      */
     @ApiModelProperty(value = "用户id主键")
     private Long userId;
+
     /**
      * yyyy-mm 格式
      */
+    @JsonFormat(
+            pattern = "yyyy-MM"
+    )
     @ApiModelProperty(value = "时间yyyy-mm")
-    private String costTime;
+    private LocalDate costTime;
     /**
      * 应出勤天数
      */
@@ -145,5 +151,4 @@ public class UserpayInfo extends BaseEntity {
     @ApiModelProperty(value = "描述")
     private String desc;
 
-
 }

+ 1 - 6
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/DepartmentMonthPlanVO.java

@@ -1,16 +1,11 @@
 package org.springblade.control.vo;
 
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import io.swagger.annotations.ApiModel;
+
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import org.springblade.control.entity.DepartmentMonthPlan;
-import org.springblade.core.mp.base.BaseEntity;
-import org.springframework.format.annotation.DateTimeFormat;
 
-import java.time.LocalDate;
 
 /**
  * @Param

+ 34 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/UserContractInfoVO.java

@@ -0,0 +1,34 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.control.vo;
+
+import org.springblade.control.entity.UserContractInfo;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 员工合同信息表视图实体类
+ *
+ * @author BladeX
+ * @since 2023-07-06
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class UserContractInfoVO extends UserContractInfo {
+    private static final long serialVersionUID = 1L;
+
+}

+ 10 - 0
blade-service/blade-control/pom.xml

@@ -42,6 +42,16 @@
             <version>2.9.1.RELEASE</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-resource-api</artifactId>
+            <version>2.9.1.RELEASE</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-excel</artifactId>
+        </dependency>
     </dependencies>
     <build>
         <plugins>

+ 1 - 1
blade-service/blade-control/src/main/java/org/springblade/control/controller/AttendanceManagerController.java

@@ -28,7 +28,7 @@ public class AttendanceManagerController extends BladeController {
     @PostMapping("/trip/page")
     @ApiOperationSupport(order = 1)
     @ApiOperation(value = "出差信息分页查询", notes = "传入AttendanceTripInfoDTO、Query")
-    public R<IPage<AttendanceTripInfoVO>> tripPage(AttendanceTripInfoDTO dto,@RequestBody Query query) {
+    public R<IPage<AttendanceTripInfoVO>> tripPage(@RequestBody AttendanceTripInfoDTO dto, @RequestBody Query query) {
         return R.data(attendanceTripService.tripPage(Condition.getPage(query), dto));
     }
 

+ 193 - 0
blade-service/blade-control/src/main/java/org/springblade/control/controller/CorporationInfoController.java

@@ -0,0 +1,193 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.control.controller;
+
+import io.swagger.annotations.*;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import lombok.AllArgsConstructor;
+
+import javax.validation.Valid;
+
+import lombok.SneakyThrows;
+import net.logstash.logback.encoder.org.apache.commons.lang3.StringUtils;
+import org.hibernate.validator.constraints.Length;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.oss.model.BladeFile;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.FileUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.resource.entity.Attach;
+import org.springblade.resource.entity.LargeFile;
+import org.springblade.resource.feign.CommonFileClient;
+import org.springblade.resource.feign.NewIOSSClient;
+import org.springblade.resource.vo.NewBladeFile;
+import org.springframework.beans.BeanUtils;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.RequestParam;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.control.entity.CorporationInfo;
+import org.springblade.control.vo.CorporationInfoVO;
+import org.springblade.control.service.ICorporationInfoService;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.Objects;
+
+/**
+ * 公司制度信息表 控制器
+ *
+ * @author BladeX
+ * @since 2023-07-06
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/corporationinfo")
+@Api(value = "公司制度信息表", tags = "公司制度信息表接口")
+public class CorporationInfoController extends BladeController {
+
+    private final ICorporationInfoService corporationInfoService;
+
+    // pdf转换
+    private final CommonFileClient commonFileClient;
+
+    private final NewIOSSClient newIOSSClient;
+
+
+    /**
+     * 详情
+     */
+    @GetMapping("/detail")
+    @ApiOperationSupport(order = 1)
+    @ApiOperation(value = "详情", notes = "传入corporationInfo")
+    public R<CorporationInfo> detail(CorporationInfo corporationInfo) {
+        CorporationInfo detail = corporationInfoService.getOne(Condition.getQueryWrapper(corporationInfo));
+        return R.data(detail);
+    }
+
+    /**
+     * 分页 公司制度信息表
+     */
+    @GetMapping("/page")
+    @ApiOperationSupport(order = 3)
+    @ApiOperation(value = "分页公司制度信息表", notes = "传入corporationInfo")
+    public R<IPage<CorporationInfoVO>> page(CorporationInfoVO corporationInfo, Query query) {
+        IPage<CorporationInfoVO> pages = corporationInfoService.selectCorporationInfoPage(Condition.getPage(query), corporationInfo);
+        return R.data(pages);
+    }
+
+    /**
+     * 新增 公司制度信息表
+     */
+    @PostMapping("/save")
+    @ApiOperationSupport(order = 4)
+    @ApiOperation(value = "新增", notes = "传入corporationInfo")
+    public R save(@Valid @RequestBody CorporationInfo corporationInfo) {
+        return R.status(corporationInfoService.save(corporationInfo));
+    }
+
+    /**
+     * 修改 公司制度信息表
+     */
+    @PostMapping("/update")
+    @ApiOperationSupport(order = 5)
+    @ApiOperation(value = "修改", notes = "传入corporationInfo")
+    public R update(@Valid @RequestBody CorporationInfo corporationInfo) {
+        return R.status(corporationInfoService.updateById(corporationInfo));
+    }
+
+    /**
+     * 新增或修改 公司制度信息表
+     */
+    @PostMapping("/submit")
+    @ApiOperationSupport(order = 6)
+    @ApiOperation(value = "新增或修改", notes = "传入corporationInfo")
+    public R submit(@Valid @RequestBody CorporationInfo corporationInfo) {
+        return R.status(corporationInfoService.saveOrUpdate(corporationInfo));
+    }
+
+
+    /**
+     * 删除 公司制度信息表
+     */
+    @PostMapping("/remove")
+    @ApiOperationSupport(order = 7)
+    @ApiOperation(value = "逻辑删除", notes = "传入ids")
+    public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+        return R.status(corporationInfoService.deleteLogic(Func.toLongList(ids)));
+    }
+
+
+    /**
+     * 上传和重新上传
+     */
+    @SneakyThrows
+    @PostMapping("/put-corporationinfo")
+    @ApiOperationSupport(order = 8)
+    @ApiOperation(value = "公司制度上传和重新上传", notes = "公司制度上传和重新上传")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "file", value = "文件源", required = true),
+            @ApiImplicitParam(name = "id", value = "制度主键Id(重新上传必须传)", required = false)
+    })
+    public R putFileAttach(@RequestParam("file") MultipartFile file, String id) {
+        //
+        CorporationInfo corporationInfo = new CorporationInfo();
+        NewBladeFile newBladeFile = new NewBladeFile();
+        if (Objects.requireNonNull(file.getOriginalFilename()).contains("xlsx")) {
+            newBladeFile = this.commonFileClient.excelToPdf(file);
+
+        } else if (file.getOriginalFilename().contains("xls")) {
+            newBladeFile = this.commonFileClient.excelToPdf(file);
+
+        } else if (file.getOriginalFilename().contains("docx")) {
+            newBladeFile = this.commonFileClient.wordToPdf(file);
+
+        } else if (file.getOriginalFilename().contains("png") || file.getOriginalFilename().contains("jpg")) {
+            newBladeFile = this.commonFileClient.pngOrJpgToPdf(file);
+
+        } else if (file.getOriginalFilename().contains("pdf")) {
+            //获取PDF文件
+            BladeFile bladeFile = this.newIOSSClient.updateFile(file.getBytes(), file.getOriginalFilename());
+            BeanUtils.copyProperties(bladeFile, newBladeFile);
+        }
+        String fileExtension = FileUtil.getFileExtension(newBladeFile.getOriginalName());
+        if (StringUtils.isNotEmpty(id)) {
+            corporationInfo = corporationInfoService.getById(id);
+            corporationInfo.setName(file.getName());
+            corporationInfo.setOriginalName(file.getOriginalFilename());
+            corporationInfo.setDomainUrl(newBladeFile.getDomain());
+            corporationInfo.setLink(newBladeFile.getPdfUrl());
+            corporationInfo.setName(newBladeFile.getName());
+
+            corporationInfo.setAttachSize(newBladeFile.getFileSize());
+            corporationInfo.setExtension(fileExtension);
+
+        } else {
+            corporationInfo.setName(file.getName());
+            corporationInfo.setOriginalName(file.getOriginalFilename());
+            corporationInfo.setDomainUrl(newBladeFile.getDomain());
+            corporationInfo.setLink(newBladeFile.getPdfUrl());
+            corporationInfo.setName(newBladeFile.getName());
+            corporationInfo.setAttachSize(newBladeFile.getFileSize());
+            corporationInfo.setExtension(fileExtension);
+        }
+
+        boolean b = corporationInfoService.saveOrUpdate(corporationInfo);
+        return R.status(b);
+    }
+
+}

+ 3 - 3
blade-service/blade-control/src/main/java/org/springblade/control/controller/LogHistoryController.java

@@ -54,14 +54,14 @@ public class LogHistoryController extends BladeController {
 
     @PostMapping("/task/complete")
     @ApiOperationSupport(order = 5)
-    @ApiOperation(value = "日志任务完成", notes = "传入日志logId(编辑时完成要传日志logId)、任务taskId")
-    public R<Object> logTaskComplete(Long logId, @RequestParam Long taskId) {
+    @ApiOperation(value = "日志任务完成", notes = "传入日志logId(编辑时完成要传日志logId、新增传空)、任务taskId")
+    public R<Object> logTaskComplete(@RequestParam Long logId, @RequestParam Long taskId) {
         return R.status(logHistoryService.logTaskComplete(logId, taskId));
     }
 
     @PostMapping("/task/list")
     @ApiOperationSupport(order = 6)
-    @ApiOperation(value = "日志任务列表-获取当前用户当日的任务信息", notes = "")
+    @ApiOperation(value = "日志任务列表-获取当前用户当日的任务信息")
     public R<List<TaskPlanInfoVO>> logTaskList() {
         return R.data(logHistoryService.logTaskList());
     }

+ 117 - 0
blade-service/blade-control/src/main/java/org/springblade/control/controller/UserContractInfoController.java

@@ -0,0 +1,117 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.control.controller;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import lombok.AllArgsConstructor;
+
+import javax.validation.Valid;
+
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.RequestParam;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.control.entity.UserContractInfo;
+import org.springblade.control.vo.UserContractInfoVO;
+import org.springblade.control.service.IUserContractInfoService;
+import org.springblade.core.boot.ctrl.BladeController;
+
+/**
+ * 员工合同信息表 控制器
+ *
+ * @author BladeX
+ * @since 2023-07-06
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/usercontractinfo")
+@Api(value = "员工合同入职离职信息表", tags = "员工合同入职离职信息表接口")
+public class UserContractInfoController extends BladeController {
+
+    private final IUserContractInfoService userContractInfoService;
+
+    /**
+     * 详情
+     */
+    @GetMapping("/detail")
+    @ApiOperationSupport(order = 1)
+    @ApiOperation(value = "详情", notes = "传入userContractInfo")
+    public R<UserContractInfo> detail(UserContractInfo userContractInfo) {
+        UserContractInfo detail = userContractInfoService.getOne(Condition.getQueryWrapper(userContractInfo));
+        return R.data(detail);
+    }
+
+    /**
+     * 自定义分页 员工合同信息表
+     */
+    @GetMapping("/page")
+    @ApiOperationSupport(order = 3)
+    @ApiOperation(value = "分页", notes = "传入userContractInfo")
+    public R<IPage<UserContractInfoVO>> page(UserContractInfoVO userContractInfo, Query query) {
+        IPage<UserContractInfoVO> pages = userContractInfoService.selectUserContractInfoPage(Condition.getPage(query), userContractInfo);
+        return R.data(pages);
+    }
+
+    /**
+     * 新增 员工合同信息表
+     */
+    @PostMapping("/save")
+    @ApiOperationSupport(order = 4)
+    @ApiOperation(value = "新增", notes = "传入userContractInfo")
+    public R save(@Valid @RequestBody UserContractInfo userContractInfo) {
+        return R.status(userContractInfoService.save(userContractInfo));
+    }
+
+    /**
+     * 修改 员工合同信息表
+     */
+    @PostMapping("/update")
+    @ApiOperationSupport(order = 5)
+    @ApiOperation(value = "修改", notes = "传入userContractInfo")
+    public R update(@Valid @RequestBody UserContractInfo userContractInfo) {
+        return R.status(userContractInfoService.updateById(userContractInfo));
+    }
+
+    /**
+     * 新增或修改 员工合同信息表
+     */
+    @PostMapping("/submit")
+    @ApiOperationSupport(order = 6)
+    @ApiOperation(value = "新增或修改", notes = "传入userContractInfo")
+    public R submit(@Valid @RequestBody UserContractInfo userContractInfo) {
+        return R.status(userContractInfoService.saveOrUpdate(userContractInfo));
+    }
+
+
+    /**
+     * 删除 员工合同信息表
+     */
+    @PostMapping("/remove")
+    @ApiOperationSupport(order = 7)
+    @ApiOperation(value = "逻辑删除", notes = "传入ids")
+    public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+        return R.status(userContractInfoService.deleteLogic(Func.toLongList(ids)));
+    }
+
+
+}

+ 43 - 0
blade-service/blade-control/src/main/java/org/springblade/control/controller/UserpayInfoController.java

@@ -22,11 +22,15 @@ import io.swagger.annotations.ApiParam;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import lombok.AllArgsConstructor;
 
+import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 
+import org.springblade.control.excel.UserpayExcel;
+import org.springblade.core.excel.util.ExcelUtil;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.DateUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.RequestParam;
@@ -35,6 +39,10 @@ import org.springblade.control.entity.UserpayInfo;
 import org.springblade.control.vo.UserpayInfoVO;
 import org.springblade.control.service.IUserpayInfoService;
 import org.springblade.core.boot.ctrl.BladeController;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * 薪酬管理 控制器
@@ -115,4 +123,39 @@ public class UserpayInfoController extends BladeController {
     }
 
 
+    /**
+     * 导入薪酬管理
+     */
+    @PostMapping("import-userpay")
+    @ApiOperationSupport(order = 8)
+    @ApiOperation(value = "导入薪酬管理", notes = "传入excel")
+    public R importUserpayInfo(MultipartFile file) {
+        List<UserpayExcel> list = ExcelUtil.read(file, UserpayExcel.class);
+
+        //userpayInfoService.saveBatch();
+        return R.success("操作成功");
+    }
+
+    /**
+     * 导出全部用户
+     */
+/*    @GetMapping("export-userpay")
+    @ApiOperationSupport(order = 9)
+    @ApiOperation(value = "导出薪酬管理", notes = "传入token")
+    public void exportUser(@ApiIgnore @RequestParam Map<String, Object> user, BladeUser bladeUser, HttpServletResponse response) {
+        List<UserVO> list = userService.selectUserListByCondition();
+        List<UserExcel2> list1 = Objects.requireNonNull(BeanUtil.copy(list, UserExcel2.class));
+        ExcelUtil.export(response, "用户数据" + DateUtil.time(), "用户数据表", list1, UserExcel2.class);
+    }*/
+
+    /**
+     * 导出模板
+     */
+    @GetMapping("export-template")
+    @ApiOperationSupport(order = 10)
+    @ApiOperation(value = "导出模板")
+    public void exportUser(HttpServletResponse response) {
+        List<UserpayExcel> list = new ArrayList<>();
+        ExcelUtil.export(response, "薪酬管理模板" + DateUtil.time(), "薪酬管理表", list, UserpayExcel.class);
+    }
 }

+ 120 - 0
blade-service/blade-control/src/main/java/org/springblade/control/excel/UserpayExcel.java

@@ -0,0 +1,120 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.control.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * UserExcel
+ *
+ * @author Chill
+ */
+@Data
+@ColumnWidth(25)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class UserpayExcel implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ColumnWidth(15)
+    @ExcelProperty("姓名")
+    private String userName;
+
+    @ColumnWidth(15)
+    @ExcelProperty(value = "应出勤天数")
+    private Integer yAllDays;
+
+    @ColumnWidth(15)
+    @ExcelProperty(value = "实际出勤天数")
+    private Integer sAllDays;
+
+    @ColumnWidth(15)
+    @ExcelProperty(value = "年假")
+    private Integer yearDays;
+
+    @ColumnWidth(15)
+    @ExcelProperty(value = "调休假")
+    private Integer cLeaveDays;
+
+    @ColumnWidth(15)
+    @ExcelProperty(value = "病假")
+    private Integer sickLeaveDays;
+
+    @ColumnWidth(15)
+    @ExcelProperty(value = "事假")
+    private Integer absenceDays;
+
+    @ColumnWidth(15)
+    @ExcelProperty(value = "基础工资")
+    private BigDecimal basicSalary;
+
+    @ColumnWidth(15)
+    @ExcelProperty(value = "岗位工资")
+    private BigDecimal postSalary;
+
+    @ColumnWidth(15)
+    @ExcelProperty(value = "绩效工资")
+    private BigDecimal meritSalary;
+
+    @ColumnWidth(15)
+    @ExcelProperty(value = "奖金")
+    private BigDecimal bonusSalary;
+
+    @ColumnWidth(15)
+    @ExcelProperty(value = "伙食补贴")
+    private BigDecimal mealWance;
+
+    @ColumnWidth(15)
+    @ExcelProperty(value = "其他补贴")
+    private BigDecimal otherWance;
+
+    @ColumnWidth(15)
+    @ExcelProperty(value = "考勤扣款")
+    private BigDecimal attendDuction;
+
+    @ColumnWidth(15)
+    @ExcelProperty(value = "其他扣款")
+    private BigDecimal otherDuction;
+
+    @ColumnWidth(15)
+    @ExcelProperty(value = "应发工资")
+    private BigDecimal grossPay;
+
+    @ColumnWidth(15)
+    @ExcelProperty(value = "代缴个税")
+    private BigDecimal personalTax;
+
+    @ColumnWidth(15)
+    @ExcelProperty(value = "代缴社保")
+    private BigDecimal socialSec;
+
+    @ColumnWidth(15)
+    @ExcelProperty(value = "实发工资")
+    private BigDecimal netSalary;
+
+    @ColumnWidth(15)
+    @ExcelProperty(value = "描述")
+    private String desc;
+
+}

+ 1 - 1
blade-service/blade-control/src/main/java/org/springblade/control/mapper/AnnualBudgetMapper.xml

@@ -16,7 +16,7 @@
         where id = #{id}
     </select>
     <select id="getProjectList" resultType="org.springblade.control.vo.ControlProjectInfoVO">
-        select cpi.name,
+        select cpi.id,cpi.name,
                (select dict_name  from c_dict_info WHERE code = 'project_type' AND dict_value = cpi.project_type) as projectTypeValue,
                (select dict_name  from c_dict_info WHERE code = 'contract_type' AND dict_value= cci.contract_type) as contractTypeValue
         from c_control_project_info cpi left join c_control_contract_info cci on cpi.id = cci.project_id

+ 43 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/UserContractInfoMapper.java

@@ -0,0 +1,43 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.control.mapper;
+
+import org.springblade.control.entity.UserContractInfo;
+import org.springblade.control.vo.UserContractInfoVO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+import java.util.List;
+
+/**
+ * 员工合同信息表 Mapper 接口
+ *
+ * @author BladeX
+ * @since 2023-07-06
+ */
+public interface UserContractInfoMapper extends BaseMapper<UserContractInfo> {
+
+    /**
+     * 自定义分页
+     *
+     * @param page
+     * @param userContractInfo
+     * @return
+     */
+    List<UserContractInfoVO> selectUserContractInfoPage(IPage page, UserContractInfoVO userContractInfo);
+
+}

+ 24 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/UserContractInfoMapper.xml

@@ -0,0 +1,24 @@
+<?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="org.springblade.control.mapper.UserContractInfoMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="userContractInfoResultMap" type="org.springblade.control.entity.UserContractInfo">
+        <result column="id" property="id"/>
+        <result column="is_deleted" property="isDeleted"/>
+        <result column="user_id" property="userId"/>
+        <result column="con_type" property="conType"/>
+        <result column="start_date" property="startDate"/>
+        <result column="end_date" property="endDate"/>
+        <result column="file_url" property="fileUrl"/>
+        <result column="type" property="type"/>
+    </resultMap>
+
+
+    <select id="selectUserContractInfoPage" resultMap="userContractInfoResultMap">
+        select *
+        from c_user_contract_info
+        where is_deleted = 0
+    </select>
+
+</mapper>

+ 1 - 1
blade-service/blade-control/src/main/java/org/springblade/control/mapper/UserpayInfoMapper.xml

@@ -31,7 +31,7 @@
 
     <select id="selectUserpayInfoPage" resultMap="userpayInfoResultMap">
         select *
-        from c_userpay_info
+        from c_user_pay_info
         where is_deleted = 0
     </select>
 

+ 41 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/IUserContractInfoService.java

@@ -0,0 +1,41 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.control.service;
+
+import org.springblade.control.entity.UserContractInfo;
+import org.springblade.control.vo.UserContractInfoVO;
+import org.springblade.core.mp.base.BaseService;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+/**
+ * 员工合同信息表 服务类
+ *
+ * @author BladeX
+ * @since 2023-07-06
+ */
+public interface IUserContractInfoService extends BaseService<UserContractInfo> {
+
+	/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param userContractInfo
+	 * @return
+	 */
+	IPage<UserContractInfoVO> selectUserContractInfoPage(IPage<UserContractInfoVO> page, UserContractInfoVO userContractInfo);
+
+}

+ 6 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/AttendanceTripServiceImpl.java

@@ -45,6 +45,9 @@ public class AttendanceTripServiceImpl extends BaseServiceImpl<AttendanceTripMap
         queryWrapper.lambda().eq(AttendanceTripInfo::getIsTemp, 1); //提交的数据
         IPage<AttendanceTripInfo> pages = this.page(page, queryWrapper.lambda().orderBy(true, true, AttendanceTripInfo::getCreateTime));
         Map<Long, String> userMap = iUserClient.selectUserAll().stream().filter(f -> ObjectUtil.isNotEmpty(f.getRealName())).collect(Collectors.toMap(User::getId, User::getRealName));
+        List<ControlProjectInfo> projectInfoList = jdbcTemplate.query("select id,name from c_control_project_info", new BeanPropertyRowMapper<>(ControlProjectInfo.class));
+        Map<Long, String> maps = projectInfoList.stream().collect(Collectors.toMap(ControlProjectInfo::getId, ControlProjectInfo::getName));
+
         return pages.convert(obj -> {
             AttendanceTripInfoVO vo = new AttendanceTripInfoVO();
             BeanUtils.copyProperties(obj, vo);
@@ -63,6 +66,9 @@ public class AttendanceTripServiceImpl extends BaseServiceImpl<AttendanceTripMap
             vo.setCreateName(userMap.get(vo.getCreateUser()));
             vo.setApprovalStatusName(vo.getStatus().equals(1) ? "待审批" : (vo.getStatus().equals(2) ? "已审批" : (vo.getStatus().equals(3) ? "已驳回" : "未上报")));
             vo.setApprovalResultName(vo.getApprovalStatusName().equals("已审批") || vo.getApprovalStatusName().equals("已驳回") ? "已通过" : "未通过");
+            vo.setProjectName(ObjectUtil.isNotEmpty(maps.get(obj.getProjectId())) ? maps.get(obj.getProjectId()) : null);
+            vo.setDurationAll(ObjectUtil.isNotEmpty(obj.getDurationAll()) ? obj.getDurationAll() : null);
+            vo.setDuration(ObjectUtil.isNotEmpty(obj.getDuration()) ? obj.getDuration() : null);
             return vo;
         });
     }

+ 4 - 1
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/LogHistoryServiceImpl.java

@@ -431,7 +431,7 @@ public class LogHistoryServiceImpl extends BaseServiceImpl<LogHistoryMapper, Log
             taskProcessInfo.setStatus(1); //待审批
             taskProcessInfo.setReportDate(new Date());
             taskProcessInfo.setTaskType(1); //任务审批
-            taskProcessInfo.setTaskName("【" + SecureUtil.getUser().getNickName() + "】向您发起【任务完成】审批");
+            taskProcessInfo.setTaskName("【" + SecureUtil.getUser().getNickName() + "】向您发起【计划任务完成】审批");
 
             //上报人
             taskProcessInfo.setReportUserId(SecureUtil.getUserId());
@@ -445,6 +445,9 @@ public class LogHistoryServiceImpl extends BaseServiceImpl<LogHistoryMapper, Log
                 //如果审批人中存在自己本身,那么移除,自己不审批自己的任务
                 if (StringUtils.isNotEmpty(userId) && !userId.equals(String.valueOf(SecureUtil.getUserId()))) {
                     nonEmptyAuditUserIds.add(userId);
+                } else if (auditUserIds.size() == 1 && StringUtils.isNotEmpty(userId) && userId.equals(String.valueOf(SecureUtil.getUserId()))) {
+                    //如果只有本身,就是自己给自己提交的任务,只有一个审批人,那么就要添加
+                    nonEmptyAuditUserIds.add(userId);
                 }
             }
             if (nonEmptyAuditUserIds.size() == 0) {

+ 1 - 1
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectCostBudgetServiceImpl.java

@@ -136,7 +136,7 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
      */
     @Override
     public List<ProjectCostBudget> budgetListByProjectId(Long projectId) {
-        return this.list(new LambdaQueryWrapper<ProjectCostBudget>().eq(ProjectCostBudget::getProjectId,projectId));
+        return this.list(new LambdaQueryWrapper<ProjectCostBudget>().eq(ProjectCostBudget::getProjectId,projectId).eq(ProjectCostBudget::getParentId,0));
 
     }
 

+ 39 - 10
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/TaskProcessServiceImpl.java

@@ -652,9 +652,26 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
             List<String> taskIds = Func.toStrList(dto.getTaskIds());
             SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
             String completionTimeStr = dateFormatter.format(dto.getCompletionTime());
+
+            //获取所有审批任务与计划任务关系
+            Map<String, ExpenseTaskRecord> taskRecordMaps = new LinkedHashMap<>();
+            if (ObjectUtil.isNotEmpty(dto.getTaskIds())) {
+                List<ExpenseTaskRecord> expenseTaskRecords = jdbcTemplate.query("select task_id,expense_info_id from c_expense_task_record where expense_info_type = 1 and expense_info_id in(" + dto.getTaskIds() + ")", new BeanPropertyRowMapper<>(ExpenseTaskRecord.class));
+                taskRecordMaps = expenseTaskRecords.stream().collect(Collectors.toMap(ExpenseTaskRecord::getExpenseInfoId, Function.identity()));
+            }
+
             for (String taskId : taskIds) {
                 ProjectCostBudget planTaskInfo = projectCostBudgetService.getById(taskId);
                 if (planTaskInfo != null) {
+                    //判断计划任务状态
+                    ExpenseTaskRecord record = taskRecordMaps.getOrDefault(String.valueOf(taskId), null);
+                    if (record != null) {
+                        TaskProcessInfo task = jdbcTemplate.query("select status from c_task_process_info where id = " + record.getTaskId(), new BeanPropertyRowMapper<>(TaskProcessInfo.class)).stream().findAny().orElse(null);
+                        if (task != null && (Arrays.asList(1, 2).contains(task.getStatus()))) {
+                            throw new ServiceException("计划任务【" + (ObjectUtil.isNotEmpty(planTaskInfo.getPlanTaskDesc()) ? planTaskInfo.getPlanTaskDesc() : null) + "】不是未提交或已驳回状态,操作失败");
+                        }
+                    }
+
                     User departmentHead = this.getDepartmentHead(planTaskInfo.getDeptId());
                     if (departmentHead != null && dto.getUpdateType().equals("1")) {
                         //任务完成
@@ -663,7 +680,7 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
                         taskProcessInfo.setStatus(1); //待审批
                         taskProcessInfo.setReportDate(new Date());
                         taskProcessInfo.setTaskType(1); //任务审批
-                        taskProcessInfo.setTaskName("【" + SecureUtil.getUser().getNickName() + "】向您发起【计划完成】审批");
+                        taskProcessInfo.setTaskName("【" + SecureUtil.getUser().getNickName() + "】向您发起【计划任务完成】审批");
 
                         //上报人
                         taskProcessInfo.setReportUserId(SecureUtil.getUserId());
@@ -677,6 +694,9 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
                             //如果审批人中存在自己本身,那么移除,自己不审批自己的任务
                             if (StringUtils.isNotEmpty(userId) && !userId.equals(String.valueOf(SecureUtil.getUserId()))) {
                                 nonEmptyAuditUserIds.add(userId);
+                            } else if (auditUserIds.size() == 1 && StringUtils.isNotEmpty(userId) && userId.equals(String.valueOf(SecureUtil.getUserId()))) {
+                                //如果只有本身,就是自己给自己提交的任务,只有一个审批人,那么就要添加
+                                nonEmptyAuditUserIds.add(userId);
                             }
                         }
                         taskProcessInfo.setAuditUserIds(StringUtils.join(nonEmptyAuditUserIds, ","));
@@ -697,7 +717,7 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
                         taskProcessInfo.setStatus(1); //待审批
                         taskProcessInfo.setReportDate(new Date());
                         taskProcessInfo.setTaskType(1); //任务审批
-                        taskProcessInfo.setTaskName("【" + SecureUtil.getUser().getNickName() + "】向您发起【任务转移】审批");
+                        taskProcessInfo.setTaskName("【" + SecureUtil.getUser().getNickName() + "】向您发起【计划任务转移】审批");
 
                         //上报人
                         taskProcessInfo.setReportUserId(SecureUtil.getUserId());
@@ -711,6 +731,9 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
                             //如果审批人中存在自己本身,那么移除,自己不审批自己的任务
                             if (StringUtils.isNotEmpty(userId) && !userId.equals(String.valueOf(SecureUtil.getUserId()))) {
                                 nonEmptyAuditUserIds.add(userId);
+                            } else if (auditUserIds.size() == 1 && StringUtils.isNotEmpty(userId) && userId.equals(String.valueOf(SecureUtil.getUserId()))) {
+                                //如果只有本身,就是自己给自己提交的任务,只有一个审批人,那么就要添加
+                                nonEmptyAuditUserIds.add(userId);
                             }
                         }
                         taskProcessInfo.setAuditUserIds(StringUtils.join(nonEmptyAuditUserIds, ","));
@@ -823,6 +846,9 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
                     //如果审批人中存在自己本身,那么移除,自己不审批自己的任务
                     if (StringUtils.isNotEmpty(userId) && !userId.equals(String.valueOf(SecureUtil.getUserId()))) {
                         nonEmptyAuditUserIds.add(userId);
+                    } else if (auditUserIds.size() == 1 && StringUtils.isNotEmpty(userId) && userId.equals(String.valueOf(SecureUtil.getUserId()))) {
+                        //如果只有本身,就是自己给自己提交的任务,只有一个审批人,那么就要添加
+                        nonEmptyAuditUserIds.add(userId);
                     }
                 }
                 taskProcessInfo.setAuditUserIds(StringUtils.join(nonEmptyAuditUserIds, ","));
@@ -1023,6 +1049,9 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
             //如果审批人中存在自己本身,那么移除,自己不审批自己的任务
             if (StringUtils.isNotEmpty(userId) && !userId.equals(String.valueOf(SecureUtil.getUserId()))) {
                 nonEmptyAuditUserIds.add(userId);
+            } else if (auditUserIds.size() == 1 && StringUtils.isNotEmpty(userId) && userId.equals(String.valueOf(SecureUtil.getUserId()))) {
+                //如果只有本身,就是自己给自己提交的任务,只有一个审批人,那么就要添加
+                nonEmptyAuditUserIds.add(userId);
             }
         }
         if (nonEmptyAuditUserIds.size() == 0) {
@@ -1051,21 +1080,21 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
     private String taskNameByType(int type) {
         switch (type) {
             case 2:
-                return "向您发起【报销审批】审批";
+                return "向您发起【报销申请】审批";
             case 3:
-                return "向您发起【支付审批】审批";
+                return "向您发起【支付申请】审批";
             case 4:
-                return "向您发起【借款审批】审批";
+                return "向您发起【借款申请】审批";
             case 5:
-                return "向您发起【采购审批】审批";
+                return "向您发起【采购申请】审批";
             case 6:
-                return "向您发起【用车审批】审批";
+                return "向您发起【用车申请】审批";
             case 7:
-                return "向您发起【发票审批】审批";
+                return "向您发起【发票申请】审批";
             case 8:
-                return "向您发起【外包支付】审批";
+                return "向您发起【外包支付申请】审批";
             case 9:
-                return "向您发起【出差审批】审批";
+                return "向您发起【出差申请】审批";
         }
         return "";
     }

+ 41 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/UserContractInfoServiceImpl.java

@@ -0,0 +1,41 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.control.service.impl;
+
+import org.springblade.control.entity.UserContractInfo;
+import org.springblade.control.vo.UserContractInfoVO;
+import org.springblade.control.mapper.UserContractInfoMapper;
+import org.springblade.control.service.IUserContractInfoService;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+/**
+ * 员工合同信息表 服务实现类
+ *
+ * @author BladeX
+ * @since 2023-07-06
+ */
+@Service
+public class UserContractInfoServiceImpl extends BaseServiceImpl<UserContractInfoMapper, UserContractInfo> implements IUserContractInfoService {
+
+    @Override
+    public IPage<UserContractInfoVO> selectUserContractInfoPage(IPage<UserContractInfoVO> page, UserContractInfoVO userContractInfo) {
+        return page.setRecords(baseMapper.selectUserContractInfoPage(page, userContractInfo));
+    }
+
+}