新增劳动合同管理功能,包括试用期、历史签约信息和用户签约状态。

- 劳动合同管理界面新增试用期时间字段,支持设置试用期限。
- 实现了用户历史签约信息查询功能,可通过新接口获取用户的历史劳动合同。
- 优化了劳动合同分页查询的实现,提高查询效率和结果准确性。
- 为用户签约操作添加了UUID分配机制,确保用户记录的唯一性和正确性。
This commit is contained in:
furongxin 2024-09-20 15:55:57 +08:00
parent 831d575514
commit 08b86ed048
9 changed files with 108 additions and 67 deletions

View File

@ -3,11 +3,17 @@ package cn.iocoder.yudao.module.system.controller.admin.laborcontract;
import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.system.api.dept.DeptApi;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import cn.iocoder.yudao.module.system.controller.admin.laborcontract.vo.LaborContractPageReqVO; import cn.iocoder.yudao.module.system.controller.admin.laborcontract.vo.LaborContractPageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.laborcontract.vo.LaborContractRespVO; import cn.iocoder.yudao.module.system.controller.admin.laborcontract.vo.LaborContractRespVO;
import cn.iocoder.yudao.module.system.controller.admin.laborcontract.vo.LaborContractSaveReqVO; import cn.iocoder.yudao.module.system.controller.admin.laborcontract.vo.LaborContractSaveReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
import cn.iocoder.yudao.module.system.dal.dataobject.laborcontract.LaborContractDO; import cn.iocoder.yudao.module.system.dal.dataobject.laborcontract.LaborContractDO;
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
import cn.iocoder.yudao.module.system.service.dept.DeptService;
import cn.iocoder.yudao.module.system.service.laborcontract.LaborContractService; import cn.iocoder.yudao.module.system.service.laborcontract.LaborContractService;
import cn.iocoder.yudao.module.system.service.user.AdminUserService;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
@ -18,6 +24,8 @@ import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.validation.Valid; import javax.validation.Valid;
import java.util.List;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@Tag(name = "管理后台 - 劳动合同管理") @Tag(name = "管理后台 - 劳动合同管理")
@ -62,11 +70,22 @@ public class LaborContractController {
return success(BeanUtils.toBean(laborContract, LaborContractRespVO.class)); return success(BeanUtils.toBean(laborContract, LaborContractRespVO.class));
} }
@GetMapping("/get-history")
@Operation(summary = "获得用户历史签约信息")
@Parameter(name = "userId", description = "用户编号", required = true, example = "146")
@PreAuthorize("@ss.hasPermission('system:labor-contract:query')")
public CommonResult<List<LaborContractRespVO>> getHistoryList(@RequestParam("userId") Long userId) {
List<LaborContractDO> laborContracts = laborContractService.getHistoryList(userId);
return success(BeanUtils.toBean(laborContracts, LaborContractRespVO.class));
}
@GetMapping("/page") @GetMapping("/page")
@Operation(summary = "获得劳动合同管理分页") @Operation(summary = "获得劳动合同管理分页")
@PreAuthorize("@ss.hasPermission('system:labor-contract:query')") @PreAuthorize("@ss.hasPermission('system:labor-contract:query')")
public CommonResult<PageResult<LaborContractRespVO>> getLaborContractPage(@Valid LaborContractPageReqVO pageReqVO) { public CommonResult<PageResult<LaborContractRespVO>> getLaborContractPage(@Valid LaborContractPageReqVO pageReqVO) {
PageResult<LaborContractDO> pageResult = laborContractService.getLaborContractPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, LaborContractRespVO.class)); return success(laborContractService.getLaborContractPage(pageReqVO));
} }
} }

View File

@ -39,6 +39,9 @@ public class LaborContractRespVO {
@Schema(description = "签约次数") @Schema(description = "签约次数")
private Integer signingCount; private Integer signingCount;
@Schema(description = "试用期时间(月)", example = "3")
private Integer probationPeriodTime;
@Schema(description = "状态 0待签 1已签 2过期", example = "0") @Schema(description = "状态 0待签 1已签 2过期", example = "0")
private Integer status; private Integer status;

View File

@ -24,11 +24,16 @@ public class LaborContractSaveReqVO {
private Long deptId; private Long deptId;
@Schema(description = "签约日期") @Schema(description = "签约日期")
@NotNull(message = "签约日期不能为空")
private LocalDate signingDate; private LocalDate signingDate;
@Schema(description = "签约年限") @Schema(description = "签约年限")
@NotNull(message = "签约年限不能为空")
private Integer contractDuration; private Integer contractDuration;
@Schema(description = "试用期时间(月)", example = "3")
private Integer probationPeriodTime;
@Schema(description = "状态 0待签 1已签 2过期", example = "0") @Schema(description = "状态 0待签 1已签 2过期", example = "0")
private Integer status; private Integer status;

View File

@ -0,0 +1,17 @@
package cn.iocoder.yudao.module.system.controller.admin.laborcontract.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* 功能描述 用于给日志附件同用的上传文件对象
*/
@Data
public class UploadFile {
@Schema(description = "文件管理 fileId", requiredMode = Schema.RequiredMode.REQUIRED, example = "123.jpg")
private String fileId;
@Schema(description = "文件URL", requiredMode = Schema.RequiredMode.REQUIRED, example = "http://xxx.xxx/xx/xx/123.jpgss")
private String url;
}

View File

@ -1,6 +1,7 @@
package cn.iocoder.yudao.module.system.dal.dataobject.laborcontract; package cn.iocoder.yudao.module.system.dal.dataobject.laborcontract;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import cn.iocoder.yudao.module.system.controller.admin.laborcontract.vo.UploadFile;
import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.upload.UploadUserFile; import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.upload.UploadUserFile;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
@ -50,6 +51,10 @@ public class LaborContractDO extends BaseDO {
* 签约年限 * 签约年限
*/ */
private Integer contractDuration; private Integer contractDuration;
/**
* 试用期限
*/
private Integer probationPeriodTime;
/** /**
* 状态 0待签 1已签 2过期 * 状态 0待签 1已签 2过期
*/ */
@ -58,5 +63,5 @@ public class LaborContractDO extends BaseDO {
* 附件基本信息 * 附件基本信息
*/ */
@TableField(typeHandler = JacksonTypeHandler.class) @TableField(typeHandler = JacksonTypeHandler.class)
private List<UploadUserFile> fileItems; private List<UploadFile> fileItems;
} }

View File

@ -1,13 +1,20 @@
package cn.iocoder.yudao.module.system.dal.mysql.laborcontract; package cn.iocoder.yudao.module.system.dal.mysql.laborcontract;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.MPJLambdaWrapperX;
import cn.iocoder.yudao.module.system.controller.admin.laborcontract.vo.LaborContractPageReqVO; import cn.iocoder.yudao.module.system.controller.admin.laborcontract.vo.LaborContractPageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.laborcontract.vo.LaborContractRespVO; import cn.iocoder.yudao.module.system.controller.admin.laborcontract.vo.LaborContractRespVO;
import cn.iocoder.yudao.module.system.dal.dataobject.laborcontract.LaborContractDO; import cn.iocoder.yudao.module.system.dal.dataobject.laborcontract.LaborContractDO;
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
import cn.iocoder.yudao.module.system.dal.mysql.user.AdminUserMapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import javax.annotation.Resource;
import java.util.List;
/** /**
* 劳动合同管理 Mapper * 劳动合同管理 Mapper
* *
@ -16,5 +23,10 @@ import org.apache.ibatis.annotations.Param;
@Mapper @Mapper
public interface LaborContractMapper extends BaseMapperX<LaborContractDO> { public interface LaborContractMapper extends BaseMapperX<LaborContractDO> {
IPage<LaborContractRespVO> selectPage(@Param("page") IPage<LaborContractRespVO> mpPage, @Param("reqVO") LaborContractPageReqVO pageReqVO); default List<LaborContractDO> selectHistoryList(Long userId) {
return selectList(new LambdaQueryWrapperX<LaborContractDO>()
.eqIfPresent(LaborContractDO::getUserId, userId)
.orderByDesc(LaborContractDO::getCreateTime));
}
} }

View File

@ -2,10 +2,12 @@ package cn.iocoder.yudao.module.system.service.laborcontract;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.controller.admin.laborcontract.vo.LaborContractPageReqVO; import cn.iocoder.yudao.module.system.controller.admin.laborcontract.vo.LaborContractPageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.laborcontract.vo.LaborContractRespVO;
import cn.iocoder.yudao.module.system.controller.admin.laborcontract.vo.LaborContractSaveReqVO; import cn.iocoder.yudao.module.system.controller.admin.laborcontract.vo.LaborContractSaveReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.laborcontract.LaborContractDO; import cn.iocoder.yudao.module.system.dal.dataobject.laborcontract.LaborContractDO;
import javax.validation.Valid; import javax.validation.Valid;
import java.util.List;
/** /**
* 劳动合同管理 Service 接口 * 劳动合同管理 Service 接口
@ -50,6 +52,19 @@ public interface LaborContractService {
* @param pageReqVO 分页查询 * @param pageReqVO 分页查询
* @return 劳动合同管理分页 * @return 劳动合同管理分页
*/ */
PageResult<LaborContractDO> getLaborContractPage(LaborContractPageReqVO pageReqVO); PageResult<LaborContractRespVO> getLaborContractPage(LaborContractPageReqVO pageReqVO);
/**
* 获得用户历史签约信息
* @param userId 用户编号
* @return 合同信息列表
*/
List<LaborContractDO> getHistoryList(Long userId);
/**
* 获得指定用户的签约信息列表
* @param userIds 用户编号列表
* @return 签约信息列表
*/
List<LaborContractDO> getListByUserIds(List<Long> userIds);
} }

View File

@ -3,14 +3,21 @@ package cn.iocoder.yudao.module.system.service.laborcontract;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.system.controller.admin.laborcontract.vo.LaborContractPageReqVO; import cn.iocoder.yudao.module.system.controller.admin.laborcontract.vo.LaborContractPageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.laborcontract.vo.LaborContractRespVO;
import cn.iocoder.yudao.module.system.controller.admin.laborcontract.vo.LaborContractSaveReqVO; import cn.iocoder.yudao.module.system.controller.admin.laborcontract.vo.LaborContractSaveReqVO;
import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.loginstance.LogInstanceRespVO;
import cn.iocoder.yudao.module.system.dal.dataobject.laborcontract.LaborContractDO; import cn.iocoder.yudao.module.system.dal.dataobject.laborcontract.LaborContractDO;
import cn.iocoder.yudao.module.system.dal.mysql.laborcontract.LaborContractMapper; import cn.iocoder.yudao.module.system.dal.mysql.laborcontract.LaborContractMapper;
import cn.iocoder.yudao.module.system.dal.mysql.user.AdminUserMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.List;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.LABOR_CONTRACT_NOT_EXISTS; import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.LABOR_CONTRACT_NOT_EXISTS;
@ -26,6 +33,9 @@ public class LaborContractServiceImpl implements LaborContractService {
@Resource @Resource
private LaborContractMapper laborContractMapper; private LaborContractMapper laborContractMapper;
@Resource
private AdminUserMapper userMapper;
@Override @Override
public Long createLaborContract(LaborContractSaveReqVO createReqVO) { public Long createLaborContract(LaborContractSaveReqVO createReqVO) {
// 插入 // 插入
@ -64,8 +74,23 @@ public class LaborContractServiceImpl implements LaborContractService {
} }
@Override @Override
public PageResult<LaborContractDO> getLaborContractPage(LaborContractPageReqVO pageReqVO) { public PageResult<LaborContractRespVO> getLaborContractPage(LaborContractPageReqVO pageReqVO) {
return null;
Page<LaborContractRespVO> page = new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize());
IPage<LaborContractRespVO> pageList = userMapper.selectContractPage(page, pageReqVO);
return new PageResult<>(pageList.getRecords(), pageList.getTotal());
} }
@Override
public List<LaborContractDO> getHistoryList(Long userId) {
return laborContractMapper.selectHistoryList(userId);
}
@Override
public List<LaborContractDO> getListByUserIds(List<Long> userIds) {
return laborContractMapper.selectList(LaborContractDO::getUserId, userIds);
}
} }

View File

@ -8,64 +8,4 @@
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。 代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见https://www.iocoder.cn/MyBatis/x-plugins/ 文档可见https://www.iocoder.cn/MyBatis/x-plugins/
--> -->
<select id="selectPage" resultType="cn.iocoder.yudao.module.system.controller.admin.laborcontract.vo.LaborContractRespVO">
SELECT
a.id,
a.user_id AS userId,
e.nickname AS userName,
a.dept_id AS deptId,
e.name AS deptName,
a.signing_date AS signingDate,
a.expiration_date AS expirationDate,
a.contract_duration AS contractDuration,
e.signingCount,
a.status,
a.create_time AS createTime
FROM
system_labor_contract a,
(
SELECT
c.nickname,
d.name,
COUNT(1) as signingCount,
MAX( b.create_time ) AS create_time
FROM
system_labor_contract b,
system_users c,
system_dept d
WHERE
b.user_id = c.id
AND b.dept_id = d.id
<if test="reqVO.userName != null and reqVO.userName != ''">
AND c.nickname LIKE CONCAT('%', #{reqVO.userName}, '%')
</if>
<if test="reqVO.deptId != null">
AND b.deptId = #{deptId}
</if>
<if test="reqVO.signingDate != null and reqVO.signingDate.length > 0">
<if test="reqVO.signingDate[0] != null">
AND b.signing_date &gt;= #{reqVO.signingDatee[0]}
</if>
<if test="reqVO.signingDate[1] != null">
AND b.signing_date &lt;= #{reqVO.signingDate[1]}
</if>
</if>
<if test="reqVO.expirationDate != null and reqVO.expirationDate.length > 0">
<if test="reqVO.expirationDate[0] != null">
AND b.expiration_date &gt;= #{reqVO.expirationDate[0]}
</if>
<if test="reqVO.expirationDate[1] != null">
AND b.expiration_date &lt;= #{reqVO.expirationDate[1]}
</if>
</if>
<if test="reqVO.status != null">
AND b.status = #{reqVO.status}
</if>
GROUP BY
b.user_id
) e
WHERE
a.create_time = e.create_time
</select>
</mapper> </mapper>