Compare commits

...

13 Commits

Author SHA1 Message Date
furongxin
5117cf4115 移除BpmOAEntryApi.java中的Map导入 2024-09-20 21:55:28 +08:00
furongxin
7a041e64f1 优化工作日志分页查询逻辑和排序条件。 2024-09-20 21:55:05 +08:00
furongxin
ad7aae0daf 删除未使用的导入和方法
删除了NoticeConvert.java中未使用的LocalDateTime和DateTimeFormatter导入,以及相关的转换方法。这简化了代码库,并通过消除冗余代码改进了代码的可维护性。
2024-09-20 19:56:56 +08:00
furongxin
bd6a7d8f1b 劳动合同模块状态及文件类型字段更新
- 更新劳动合同模块,调整状态字段定义,使其符合最新业务逻辑。
- 变更文件上传相关VO类,增加文件类型描述字段,优化文件信息存储结构。
- 在LaborContractController中集成用户和服务部门信息,优化劳动合同数据展示。- 在LaborContractServiceImpl中调整合同到期时间和初始状态设置,实现业务流程自动化。
- 调整LaborContractMapper及其XML文件,以支持新的业务逻辑和数据结构。这些变更提升了系统的数据一致性和用户体验,同时也增强了系统的可维护性和扩展性。

修复管理员用户分页查询逻辑以处理最新劳动合同

修复了管理员用户分页查询中劳动合同相关的问题。此更改通过调整SQL查询以正确关联用户表和最新的劳动合同,确保劳动合同的准确记录。此外,修正了时间范围查询的字段引用以提高查询的准确性。
2024-09-20 19:56:45 +08:00
furongxin
5833692c34 refactor(system): 简化FieldworkJob实现并移除未使用导入
移除了FieldworkJob中未使用的导入和方法。重构消除了冗余代码,优化了可读性和维护性。用户相关操作的DTO转换逻辑已被移除,不再需要的身份证工具类和字符串工具类导入也被删除。此外,调整了组件注解的顺序以保持一致性。
2024-09-20 19:56:10 +08:00
furongxin
288b934149 新功能:实现文件管理功能以支持文件查询
实现文件管理的新功能,允许通过用户ID查询相关文件。在系统模块中,创建了FileController来处理文件查询请求,并且定义了FileService接口及其实现FileServiceImpl来具体执行文件相关操作。同时,引入了FileRespVO来作为文件响应的VO类。

- 新增FileController类,提供文件查询的REST API。
- 定义FileRespVO类,用作文件信息的响应对象。- 在FileService接口中定义getFileList方法,用于获取文件列表。- 实现FileServiceImpl类,使用LaborContractMapper进行文件数据的检索。
2024-09-20 19:54:35 +08:00
furongxin
fa52566ce8 ###功能增强
- 用户创建时可自定义状态:在创建用户时,现在可以自定义用户的状态,如果不指定则默认为启用状态。
- 添加获取指定编制用户列表功能:新增`getUserListByUserStaffing`方法,能够根据用户编制返回用户列表。

###定时任务优化
- 生日提醒和转正提醒:生日提醒功能现在可以从定时任务参数中获取角色ID和提醒时长,转正提醒功能已集成并可从参数中读取提醒时长。- 外勤打卡权限更新:新增功能可更新当天入职用户的外勤打卡权限状态。

### 代码改进
- `生日提醒`和`转正提醒`方法:重构了`BirthdayJob`中的`birthdayRemind`方法,用于处理生日提醒和转正提醒。
- `FieldworkJob`中的`updEntryUser`方法:此方法用于更新当天入职用户的外勤打卡权限状态。
2024-09-20 15:57:09 +08:00
furongxin
6672357229 新增查询合同分页功能
在AdminUserMapper中添加了新的分页查询方法selectContractPage,该方法根据LaborContractPageReqVO参数从数据库中检索合同数据,并返回LaborContractRespVO类型的分页结果。
2024-09-20 15:56:44 +08:00
furongxin
08b86ed048 新增劳动合同管理功能,包括试用期、历史签约信息和用户签约状态。
- 劳动合同管理界面新增试用期时间字段,支持设置试用期限。
- 实现了用户历史签约信息查询功能,可通过新接口获取用户的历史劳动合同。
- 优化了劳动合同分页查询的实现,提高查询效率和结果准确性。
- 为用户签约操作添加了UUID分配机制,确保用户记录的唯一性和正确性。
2024-09-20 15:55:57 +08:00
furongxin
831d575514 ```删除BpmOAGoOutApiImpl作者注释
在BpmOAGoOutApiImpl类中移除作者"jason"的注释。该信息不再需要,可能已转移到更合适的文档或存储位置。
```
2024-09-20 15:52:49 +08:00
furongxin
6d04114723 新入职用户API:添加获取当日及昨日外出用户编号的接口添加一个新的getGoOutByTime接口,该接口允许按指定日期检索当日及昨日外出的用户编号。此增强功能旨在优化对外出用户数据的访问和管理。相关代码更改:
- 新增`BpmOAEntryApi`接口,提供`getEntryListByTime`方法。
- 实现`BpmOAEntryApiImpl`类,对接口方法进行具体实现。
-扩展`BpmOAEntryService`接口,增加`getEntryListByTime`服务方法。
- 在`BpmOAEntryServiceImpl`中实现新服务方法的具体逻辑。
2024-09-20 15:52:34 +08:00
furongxin
9fc18abf1c BpmConstants枚举类中新增了一个常量CCSZ_NAME,值为Activity_ccsz。这个新增的常量提供了另一个可用于流程任务名称的选项,类似于已存在的CC_NAME常量。此次添加扩展了流程任务命名的选项,旨在优化流程任务的管理和识别。 2024-09-19 14:13:59 +08:00
furongxin
c7bf42a41e 修正了流程实例服务中的任务分配逻辑。更新了发起人部门判断逻辑,并重构了代码以提高可读性和可维护性。 2024-09-19 14:12:18 +08:00
32 changed files with 635 additions and 115 deletions

View File

@ -0,0 +1,28 @@
package cn.iocoder.yudao.module.bpm.api.oa;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.bpm.api.oa.vo.BpmOAEntryDTO;
import cn.iocoder.yudao.module.bpm.enums.ApiConstants;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import javax.annotation.security.PermitAll;
import java.time.LocalDate;
import java.util.List;
@FeignClient(name = ApiConstants.NAME) // TODO 芋艿fallbackFactory =
@Tag(name = "RPC 服务 - 流程实例")
public interface BpmOAEntryApi {
String PREFIX = ApiConstants.PREFIX + "/oa/entry";
@GetMapping(PREFIX + "/getGoOutByTime")
@Operation(summary = "获取当日以及昨日外出的用户编号")
@Parameter(name = "entryDate", description = "时间格式yyyy-MM-dd", required = true, example = "2024-05-11")
@PermitAll
CommonResult<List<BpmOAEntryDTO>> getEntryListByTime(@RequestParam(name = "entryDate") LocalDate entryDate);
}

View File

@ -0,0 +1,66 @@
package cn.iocoder.yudao.module.bpm.api.oa.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.time.LocalDate;
@Data
public class BpmOAEntryDTO {
@Schema(description = "入职申请表单主键", example = "1")
private Long id;
@Schema(description = "新入职用户用户编号", example = "16315")
@NotNull(message = "新入职用户用户编号不能为空")
private Long entryUserId;
@Schema(description = "新入职用户部门编号", example = "10237")
private Long entryDeptId;
@Schema(description = "新入职用户部门名称", example = "研发部")
private String entryDeptName;
@Schema(description = "新入职用户职称编号", example = "10237")
private Long entryPostId;
@Schema(description = "新入职用户职称名称", example = "职工")
private String entryPostName;
@Schema(description = "新入职用户岗位编号", example = "10237")
private Long entryPositionId;
@Schema(description = "新入职用户岗位名称", example = "职工")
private String entryPositionName;
@Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五")
@NotEmpty(message = "用户昵称不能为空")
private String nickname;
@Schema(description = "合同公司", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "合同公司不能为空")
private Long contractCompany;
@Schema(description = "合同公司名称")
private String contractCompanyName;
@Schema(description = "手机号码", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "手机号码不能为空")
private String mobile;
@Schema(description = "身份证号码")
private String idcard;
@Schema(description = "入职时间", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "入职时间不能为空")
private LocalDate entryDate;
@Schema(description = "面试评价", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "面试评价不能为空")
private String interviewEvaluation;
@Schema(description = "薪资情况", example = "27005")
private String salary;
}

View File

@ -11,6 +11,7 @@ public final class BpmConstants {
public static final String SELF_TASK_NAME = "自己" ;
public static final String AUTO_APPRAVAL = "自动审批";
public static final String CC_NAME = "Activity_cc";
public static final String CCSZ_NAME = "Activity_ccsz";
private BpmConstants() {
// 私有构造方法防止该类被实例化
}

View File

@ -0,0 +1,34 @@
package cn.iocoder.yudao.module.bpm.api.oa;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.bpm.api.oa.vo.BpmOAEntryDTO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAEntryDO;
import cn.iocoder.yudao.module.bpm.service.oa.BpmOAEntryService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.time.LocalDate;
import java.util.List;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
/**
* Flowable 流程实例 Api 实现类
*/
@RestController
@Validated
public class BpmOAEntryApiImpl implements BpmOAEntryApi{
@Resource
private BpmOAEntryService entryService;
@Override
public CommonResult<List<BpmOAEntryDTO>> getEntryListByTime(LocalDate entryDate) {
List<BpmOAEntryDO> entryDOS = entryService.getEntryListByTime(entryDate);
return success(BeanUtils.toBean(entryDOS, BpmOAEntryDTO.class));
}
}

View File

@ -19,9 +19,6 @@ import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.
/**
* Flowable 流程实例 Api 实现类
*
* @author jason
*/
@RestController
@Validated

View File

@ -4,6 +4,8 @@ import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.entry.BpmOAEntryCreate
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAEntryDO;
import javax.validation.Valid;
import java.time.LocalDate;
import java.util.List;
public interface BpmOAEntryService {
@ -38,4 +40,10 @@ public interface BpmOAEntryService {
*/
BpmOAEntryDO getEntryByProcessInstanceId(String processInstanceId);
/**
* 获得指定入职时间的 入职申请信息
* @param entryDate 入职时间
* @return 入职申请列表
*/
List<BpmOAEntryDO> getEntryListByTime(LocalDate entryDate);
}

View File

@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.bpm.service.oa;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.common.util.string.DTO.IdCardDO;
import cn.iocoder.yudao.framework.common.util.string.StrUtils;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi;
import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.entry.BpmOAEntryCreateReqVO;
@ -24,6 +25,7 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.time.LocalDate;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
@ -116,6 +118,7 @@ public class BpmOAEntryServiceImpl implements BpmOAEntryService{
saveRespDTO.setPositionId(entry.getEntryPositionId());
saveRespDTO.setPostIds(Collections.singleton(entry.getEntryPostId()));
saveRespDTO.setPassword("123456");
saveRespDTO.setStatus(1); // 默认设置关闭
// 解析身份证号码
IdCardDO idCardDO = StrUtils.IdCardAnalysis(saveRespDTO.getIdcard());
@ -162,4 +165,12 @@ public class BpmOAEntryServiceImpl implements BpmOAEntryService{
return entryMapper.selectOne(BpmOAEntryDO::getProcessInstanceId, processInstanceId);
}
@Override
public List<BpmOAEntryDO> getEntryListByTime(LocalDate entryDate) {
return entryMapper.selectList(new LambdaQueryWrapperX<BpmOAEntryDO>()
.eq(BpmOAEntryDO::getEntryDate, entryDate)
.eq(BpmOAEntryDO::getResult, BpmProcessInstanceResultEnum.APPROVE.getResult()));
}
}

View File

@ -57,4 +57,7 @@ public class UserSaveRespDTO {
@Schema(description = "是否为外勤人员", example = "1")
private Integer fieldworkFlag;
@Schema(description = "状态,参见 CommonStatusEnum 枚举", example = "1")
private Integer status;
}

View File

@ -0,0 +1,48 @@
package cn.iocoder.yudao.module.system.controller.admin.file;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.system.controller.admin.file.vo.FileRespVO;
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
import cn.iocoder.yudao.module.system.service.file.FileService;
import cn.iocoder.yudao.module.system.service.user.AdminUserService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
import java.util.stream.Collectors;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@Tag(name = "管理后台 - 文件管理")
@RestController
@RequestMapping("/system/file")
@Validated
public class FileController {
@Resource
private FileService fileService;
@Resource
private AdminUserService userService;
@GetMapping("/getFileByUserId")
@Operation(summary = "获得指定用户的文件")
@Parameter(name = "userId", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('system:labor-contract:query')")
public CommonResult<List<FileRespVO>> getFileList(@RequestParam("userId") Long userId) {
AdminUserDO userDO = userService.getUser(userId);
List<FileRespVO> fileRespVOS = fileService.getFileList(userDO.getMobile());
fileRespVOS = fileRespVOS.stream().filter(item -> item.getFileType().contains("pdf") || item.getFileType().contains("doc")).collect(Collectors.toList());
return success(fileRespVOS);
}
}

View File

@ -0,0 +1,21 @@
package cn.iocoder.yudao.module.system.controller.admin.file.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Schema(description = "管理后台 - 文件管理 Response VO")
@Data
public class FileRespVO {
@Schema(description = "文件编号")
private String fileId;
@Schema(description = "文件 URL")
private String url;
@Schema(description = "文件名")
private String fileName;
@Schema(description = "文件类型")
private String fileType;
}

View File

@ -6,8 +6,12 @@ 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.LaborContractRespVO;
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.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.user.AdminUserService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
@ -17,6 +21,7 @@ import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.List;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@ -29,6 +34,12 @@ public class LaborContractController {
@Resource
private LaborContractService laborContractService;
@Resource
private AdminUserService userService;
@Resource
private DeptService deptService;
@PostMapping("/create")
@Operation(summary = "创建劳动合同管理")
@PreAuthorize("@ss.hasPermission('system:labor-contract:create')")
@ -62,11 +73,32 @@ public class LaborContractController {
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);
// 拼接数据
AdminUserDO userDO = userService.getUser(userId);
DeptDO deptDO = deptService.getDept(userDO.getDeptId());
List<LaborContractRespVO> respVOS = BeanUtils.toBean(laborContracts, LaborContractRespVO.class);
respVOS.forEach(item -> {
item.setUserName(userDO.getNickname());
item.setDeptName(deptDO.getName());
});
return success(respVOS);
}
@GetMapping("/page")
@Operation(summary = "获得劳动合同管理分页")
@PreAuthorize("@ss.hasPermission('system:labor-contract:query')")
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

@ -1,6 +1,5 @@
package cn.iocoder.yudao.module.system.controller.admin.laborcontract.vo;
import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.upload.UploadUserFile;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@ -39,12 +38,15 @@ public class LaborContractRespVO {
@Schema(description = "签约次数")
private Integer signingCount;
@Schema(description = "状态 0待签 1已签 2过期", example = "0")
@Schema(description = "试用期时间(月)", example = "3")
private Integer probationPeriodTime;
@Schema(description = "状态 0待签 1过期 2已签 3离职", example = "0")
private Integer status;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
private LocalDateTime createTime;
@Schema(description = "上传文件", requiredMode = Schema.RequiredMode.REQUIRED)
private List<UploadUserFile> fileItems;
private List<UploadFile> fileItems;
}

View File

@ -1,6 +1,5 @@
package cn.iocoder.yudao.module.system.controller.admin.laborcontract.vo;
import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.upload.UploadUserFile;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@ -24,14 +23,19 @@ public class LaborContractSaveReqVO {
private Long deptId;
@Schema(description = "签约日期")
@NotNull(message = "签约日期不能为空")
private LocalDate signingDate;
@Schema(description = "签约年限")
@NotNull(message = "签约年限不能为空")
private Integer contractDuration;
@Schema(description = "状态 0待签 1已签 2过期", example = "0")
@Schema(description = "试用期时间(月)", example = "3")
private Integer probationPeriodTime;
@Schema(description = "状态 0待签 1过期 2已签 3离职", example = "0")
private Integer status;
@Schema(description = "上传文件", requiredMode = Schema.RequiredMode.REQUIRED)
private List<UploadUserFile> fileItems;
private List<UploadFile> fileItems;
}

View File

@ -0,0 +1,20 @@
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;
@Schema(description = "文件类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "jpg")
private String fileType;
}

View File

@ -74,6 +74,9 @@ public class UserSaveReqVO {
@Schema(description = "用户性质", example = "1")
private Integer userStaffing;
@Schema(description = "状态", example = "1")
private Integer status;
// ========== 创建需要传递的字段 ==========
@Schema(description = "密码", requiredMode = Schema.RequiredMode.REQUIRED, example = "123456")

View File

@ -7,8 +7,6 @@ import cn.iocoder.yudao.module.system.dal.dataobject.notice.NoticeDO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
/**
@ -73,6 +71,12 @@ public interface NoticeConvert {
return message;
}
/**
* 生日提醒
* @param openId 微信小程序唯一id
* @param miniProgramState 小程序的状态
* @return 提醒模板
*/
default SubscribeMessageReqDTO convertBirthday(String openId, String miniProgramState) {
SubscribeMessageReqDTO message = new SubscribeMessageReqDTO();
@ -108,4 +112,46 @@ public interface NoticeConvert {
return message;
}
/**
* 生日提醒
* @param openId 微信小程序唯一id
* @param miniProgramState 小程序的状态
* @return 提醒模板
*/
default SubscribeMessageReqDTO convertRegular(String openId, String miniProgramState) {
SubscribeMessageReqDTO message = new SubscribeMessageReqDTO();
message.setToUser(openId);
message.setTemplateId("fH29xjNb8pe-7onQ-wE3QrBAC-y8aaC_oosYZKNMtzM");
//消息类型
MsgData noticeType = new MsgData();
noticeType.setName("phrase8");
noticeType.setValue("转正提醒");
message.addData(noticeType);
//发送人
MsgData publishMan = new MsgData();
publishMan.setName("thing16");
publishMan.setValue("系统");
message.addData(publishMan);
//发送时间
MsgData createTime = new MsgData();
createTime.setName("time3");
createTime.setValue(DateUtils.dateFormat(new Date(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND));
message.addData(createTime);
//消息内容
MsgData content = new MsgData();
content.setName("thing2");
content.setValue("恭喜快要转正了哦,记得走转正流程!");
message.addData(content);
message.setMiniprogramState(miniProgramState);
message.setPage("");
return message;
}
}

View File

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

View File

@ -1,13 +1,15 @@
package cn.iocoder.yudao.module.system.dal.mysql.laborcontract;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
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.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
import cn.iocoder.yudao.module.system.controller.admin.file.vo.FileRespVO;
import cn.iocoder.yudao.module.system.dal.dataobject.laborcontract.LaborContractDO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 劳动合同管理 Mapper
*
@ -16,5 +18,13 @@ import org.apache.ibatis.annotations.Param;
@Mapper
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));
}
@TenantIgnore
List<FileRespVO> selectFileByUserId(@Param("mobile") String mobile);
}

View File

@ -4,12 +4,15 @@ import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
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.LaborContractRespVO;
import cn.iocoder.yudao.module.system.controller.admin.user.dto.UserPageDTO;
import cn.iocoder.yudao.module.system.controller.admin.user.vo.factoryUser.FactoryUserPageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserPageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserRespVO;
import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserSimpleRespVO;
import cn.iocoder.yudao.module.system.dal.dataobject.assets.AssetsTypeDO;
import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Mapper;
@ -17,6 +20,7 @@ import org.apache.ibatis.annotations.Param;
import java.util.Collection;
import java.util.List;
import java.util.Objects;
@Mapper
public interface AdminUserMapper extends BaseMapperX<AdminUserDO> {
@ -107,4 +111,58 @@ public interface AdminUserMapper extends BaseMapperX<AdminUserDO> {
* @return
*/
IPage<UserSimpleRespVO> getAllUserListByGroupIds(@Param("mpPage") IPage mpPage, @Param("dto") UserPageDTO dto);
default IPage<LaborContractRespVO> selectContractPage(IPage<LaborContractRespVO> mpPage, LaborContractPageReqVO pageReqVO) {
MPJLambdaWrapperX<AdminUserDO> queryWrapper = new MPJLambdaWrapperX<AdminUserDO>()
.selectAs("a.id", LaborContractRespVO::getId)
.selectAs(AdminUserDO::getId, LaborContractRespVO::getUserId)
.selectAs(AdminUserDO::getNickname, LaborContractRespVO::getUserName)
.selectAs(AdminUserDO::getDeptId, LaborContractRespVO::getDeptId)
.selectAs(DeptDO::getName, LaborContractRespVO::getDeptName)
.selectAs("a.signingDate", LaborContractRespVO::getSigningDate)
.selectAs("a.expirationDate", LaborContractRespVO::getExpirationDate)
.selectAs("a.contractDuration", LaborContractRespVO::getContractDuration)
.selectAs("a.probationPeriodTime", LaborContractRespVO::getProbationPeriodTime)
.selectAs("a.status", LaborContractRespVO::getStatus)
.selectAs("a.createTime", LaborContractRespVO::getCreateTime)
.selectCount("a.id", LaborContractRespVO::getSigningCount);
queryWrapper.innerJoin(DeptDO.class, DeptDO::getId, AdminUserDO::getDeptId)
.leftJoin("(SELECT\n" +
" id,\n" +
" user_id,\n" +
" signing_date AS signingDate,\n" +
" expiration_date AS expirationDate,\n" +
" contract_duration AS contractDuration,\n" +
" probation_period_time AS probationPeriodTime,\n" +
" status,\n" +
" create_time AS createTime,\n" +
" FROM\n" +
" system_labor_contract lc\n" +
" INNER JOIN (SELECT\n" +
" user_id AS userId,\n" +
" MAX(create_time) AS max_create_time\n" +
" FROM\n" +
" system_labor_contract\n" +
" WHERE\n" +
" deleted = 0\n" +
" GROUP BY user_id) max\n" +
" WHERE\n" +
" lc.user_id = max.userId\n" +
" AND lc.create_time = max.max_create_time) a on a.user_id = t.id");
queryWrapper.eq(AdminUserDO::getUserType, 1);
queryWrapper.likeIfPresent(AdminUserDO::getNickname, pageReqVO.getUserName());
queryWrapper.eqIfPresent(AdminUserDO::getDeptId, pageReqVO.getDeptId());
if (Objects.nonNull(pageReqVO.getSigningDate())) {
queryWrapper.between("a.signing_date", pageReqVO.getSigningDate()[0], pageReqVO.getSigningDate()[1]);
}
if (Objects.nonNull(pageReqVO.getExpirationDate())) {
queryWrapper.between("a.expiration_date", pageReqVO.getExpirationDate()[0], pageReqVO.getExpirationDate()[1]);
}
queryWrapper.eq(Objects.nonNull(pageReqVO.getStatus()),"a.status", pageReqVO.getStatus());
queryWrapper.groupBy(AdminUserDO::getId);
queryWrapper.orderByAsc("a.status");
return selectJoinPage(mpPage, LaborContractRespVO.class, queryWrapper);
}
}

View File

@ -57,9 +57,6 @@ public interface LogInstanceMapper extends BaseMapperX<LogInstanceDO> {
queryWrapper.selectAs("COALESCE(c.readCount, 0)", LogInstanceRespVO::getReadCount);
queryWrapper.selectAs("COALESCE(d.unreadCount, 0)", LogInstanceRespVO::getUnreadCount);
queryWrapper.selectAs("COALESCE(b.comment, 0)", LogInstanceRespVO::getComment);
queryWrapper.innerJoin(UserPostDO.class, "userPost", UserPostDO::getUserId, LogInstanceDO::getStartUserId);
queryWrapper.innerJoin(DeptDO.class, "dept", DeptDO::getId, LogInstanceDO::getDeptId);
queryWrapper.innerJoin(PostDO.class, "post", PostDO::getId, UserPostDO::getPostId);
queryWrapper.leftJoin(LogReadDo.class, "e", on -> on
.eq(LogReadDo::getLogInstanceId, LogInstanceDO::getId)
.eq(LogReadDo::getReadUserId, userId)
@ -67,6 +64,7 @@ public interface LogInstanceMapper extends BaseMapperX<LogInstanceDO> {
queryWrapper.leftJoin("(SELECT log_instance_id, COUNT(log_instance_id) AS readCount FROM work_log_read where read_status = 1 GROUP BY log_instance_id) c on t.id = c.log_instance_id");
queryWrapper.leftJoin("(SELECT log_instance_id, COUNT(log_instance_id) AS unReadCount FROM work_log_read where read_status = 0 GROUP BY log_instance_id) AS d ON t.id = d.log_instance_id");
queryWrapper.leftJoin("(SELECT work_log_id, COUNT(work_log_id) AS comment FROM work_log_comment GROUP BY work_log_id) AS b ON t.id = b.work_log_id");
// queryWrapper.eq(pagingType == 1, LogInstanceDO::getStartUserId, userId);
queryWrapper.eqIfPresent(LogInstanceDO::getDeptId, reqVO.getDeptId());
queryWrapper.eqIfPresent(LogInstanceDO::getFormId, reqVO.getFormId());
queryWrapper.eqIfPresent(LogInstanceDO::getStartUserId, reqVO.getStartUserId());
@ -82,15 +80,15 @@ public interface LogInstanceMapper extends BaseMapperX<LogInstanceDO> {
if (reqVO.getIsProduce() != null && reqVO.getIsProduce() == 2) {
queryWrapper.notLike(DeptDO::getFlag, "166");
}
if (pagingType == 0) {
queryWrapper.ne(LogInstanceDO::getStartUserId, userId);
}
if (pagingType == 1) {
queryWrapper.eq(LogInstanceDO::getStartUserId, userId);
}
queryWrapper.groupBy(LogInstanceDO::getId);
queryWrapper.orderByDesc(LogInstanceDO::getTime);
queryWrapper.orderByAsc(PostDO::getSort);
if (pagingType == 0) {
queryWrapper.innerJoin(UserPostDO.class, "userPost", UserPostDO::getUserId, LogInstanceDO::getStartUserId);
queryWrapper.innerJoin(DeptDO.class, "dept", DeptDO::getId, LogInstanceDO::getDeptId);
queryWrapper.innerJoin(PostDO.class, "post", PostDO::getId, UserPostDO::getPostId);
queryWrapper.ne(LogInstanceDO::getStartUserId, userId);
queryWrapper.orderByAsc(PostDO::getSort);
}
queryWrapper.orderByDesc(LogInstanceDO::getCreateTime);
return selectJoinPage(page, LogInstanceRespVO.class, queryWrapper);

View File

@ -1,6 +1,7 @@
package cn.iocoder.yudao.module.system.framework.rpc.config;
import cn.iocoder.yudao.module.bpm.api.model.BpmModelApi;
import cn.iocoder.yudao.module.bpm.api.oa.BpmOAEntryApi;
import cn.iocoder.yudao.module.bpm.api.oa.BpmOAGoOutApi;
import cn.iocoder.yudao.module.infra.api.file.FileApi;
import cn.iocoder.yudao.module.infra.api.websocket.WebSocketSenderApi;
@ -9,6 +10,6 @@ import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Configuration;
@Configuration(proxyBeanMethods = false)
@EnableFeignClients(clients = {FileApi.class, WebSocketSenderApi.class, FactoryInfoApi.class, BpmModelApi.class, BpmOAGoOutApi.class})
@EnableFeignClients(clients = {FileApi.class, WebSocketSenderApi.class, FactoryInfoApi.class, BpmModelApi.class, BpmOAGoOutApi.class, BpmOAEntryApi.class})
public class RpcConfiguration {
}

View File

@ -5,8 +5,10 @@ import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
import cn.iocoder.yudao.framework.tenant.core.job.TenantJob;
import cn.iocoder.yudao.module.system.api.subscribe.SubscribeMessageSendApi;
import cn.iocoder.yudao.module.system.convert.notice.NoticeConvert;
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 cn.iocoder.yudao.module.system.service.laborcontract.LaborContractService;
import cn.iocoder.yudao.module.system.service.permission.PermissionService;
import cn.iocoder.yudao.module.system.service.user.AdminUserService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@ -19,10 +21,12 @@ import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
@ -43,38 +47,78 @@ public class BirthdayJob {
@Resource
private SubscribeMessageSendApi subscribeMessageSendApi;
/**
* 生日提醒
*
* @return
*/
@Resource
private LaborContractService laborContractService;
@XxlJob("birthdayJob")
@TenantJob // --- 这个注解 会将租户列表拉出来 完了后逐个租户执行 定时任务需要注意
public ReturnT<String> execute() {
// 生日提醒
birthdayRemind();
//获取参数
XxlJobContext xxlJobContext = XxlJobContext.getXxlJobContext();
String jobParam = xxlJobContext.getJobParam();
if (!StringUtil.isNullOrEmpty(jobParam)) {
// 解析参数
JSONObject object = new JSONObject(jobParam);
// 获取角色id
Long roleId = object.getLong("roleId");
// 获取提醒时长
Integer remindDuration = object.getInt("remindDuration");
// 生日提醒
birthdayRemind(roleId);
// 转正提醒
PositiveReminders(remindDuration);
}
// 返回执行成功
return ReturnT.SUCCESS;
}
private void birthdayRemind() {
/**
* 转正提醒
*/
private void PositiveReminders(Integer remindDuration) {
String time = LocalDateTime.now().format(DateTimeFormatter.ofPattern("MM-dd"));
// -- 获取当天月日 生日的人员列表
List<AdminUserDO> list = adminUserMapper.selectList(new LambdaQueryWrapper<AdminUserDO>()
.like(AdminUserDO::getBirthdayDay, time));
if (!list.isEmpty()) {
// 获得提醒日期
LocalDate remindDate = LocalDate.now().plusDays(remindDuration == null ? 7 : remindDuration);
//获取参数
XxlJobContext xxlJobContext = XxlJobContext.getXxlJobContext();
String jobParam = xxlJobContext.getJobParam();
if (!StringUtil.isNullOrEmpty(jobParam)) {
// 查询所有试用人员
List<AdminUserDO> userDOS = userService.getUserListByUserStaffing(5);
List<Long> userIds = convertList(userDOS, AdminUserDO::getId);
// 解析参数
JSONObject object = new JSONObject(jobParam);
Long roleId = object.getLong("roleId");
List<LaborContractDO> laborContractDOS = laborContractService.getListByUserIds(userIds);
List<Long> contractUserIds = laborContractDOS.stream().filter(item -> remindDate.isEqual(item.getSigningDate().plusMonths(item.getProbationPeriodTime())))
.map(LaborContractDO::getUserId)
.collect(Collectors.toList());
// 过滤需要提醒的用户
List<AdminUserDO> positiveUserList = userDOS.stream().filter(item -> contractUserIds.contains(item.getId())).collect(Collectors.toList());
for (AdminUserDO adminUserDO : positiveUserList) {
if( adminUserDO.getOpenId() != null && !adminUserDO.getOpenId().isEmpty()) {
subscribeMessageSendApi.sendCompanyNotice(NoticeConvert.INSTANCE.convertRegular(
adminUserDO.getOpenId(), "formal"));
}
}
log.info("转正提醒,人员为{}", convertList(positiveUserList, AdminUserDO::getNickname));
}
/**
* 生日提醒
*/
private void birthdayRemind(Long roleId) {
if (roleId != null) {
String time = LocalDateTime.now().format(DateTimeFormatter.ofPattern("MM-dd"));
// -- 获取当天月日 生日的人员列表
List<AdminUserDO> list = adminUserMapper.selectList(new LambdaQueryWrapper<AdminUserDO>()
.like(AdminUserDO::getBirthdayDay, time));
if (!list.isEmpty()) {
Set<Long> userIds = permissionService.getUserRoleIdListByRoleId(CollectionUtils.singleton(roleId));
//获得用户组中 用户信息

View File

@ -1,8 +1,11 @@
package cn.iocoder.yudao.module.system.job.fieldwork;
import cn.hutool.core.collection.CollectionUtil;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.tenant.core.job.TenantJob;
import cn.iocoder.yudao.module.bpm.api.oa.BpmOAEntryApi;
import cn.iocoder.yudao.module.bpm.api.oa.BpmOAGoOutApi;
import cn.iocoder.yudao.module.bpm.api.oa.vo.BpmOAEntryDTO;
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.conditions.query.LambdaQueryWrapper;
@ -13,8 +16,10 @@ import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.time.LocalDate;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Component
@Slf4j
@ -27,6 +32,9 @@ public class FieldworkJob {
@Resource
private BpmOAGoOutApi goOutApi;
@Resource
private BpmOAEntryApi entryApi;
/**
* 外勤打卡权限调整 针对外出申请流程
*/
@ -61,7 +69,29 @@ public class FieldworkJob {
log.info(ex.toString());
}
// 修改的入职日期为当天的用户状态
updEntryUser();
// 返回执行成功
return ReturnT.SUCCESS;
}
}
/**
* 修改的入职日期为当天的用户状态
*/
private void updEntryUser() {
LocalDate now = LocalDate.now();
// 获得入职信息
List<BpmOAEntryDTO> entryDTOS = entryApi.getEntryListByTime(now).getCheckedData();
if (CollectionUtil.isNotEmpty(entryDTOS)) {
// 开启入职用户状态
List<AdminUserDO> userDOS = entryDTOS.stream().map(entry -> new AdminUserDO()
.setId(entry.getEntryUserId())
.setStatus(CommonStatusEnum.ENABLE.getStatus())).collect(Collectors.toList());
adminUserMapper.updateBatch(userDOS);
}
}
}

View File

@ -0,0 +1,14 @@
package cn.iocoder.yudao.module.system.service.file;
import cn.iocoder.yudao.module.system.controller.admin.file.vo.FileRespVO;
import java.util.List;
/**
* 文件管理 Service 接口
*
* @author 符溶馨
*/
public interface FileService {
List<FileRespVO> getFileList(String mobile);
}

View File

@ -0,0 +1,28 @@
package cn.iocoder.yudao.module.system.service.file;
import cn.iocoder.yudao.module.system.controller.admin.file.vo.FileRespVO;
import cn.iocoder.yudao.module.system.dal.mysql.laborcontract.LaborContractMapper;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.util.List;
/**
* 文件管理 Service 实现类
*
* @author 符溶馨
*/
@Service
@Validated
public class FileServiceImpl implements FileService {
@Resource
private LaborContractMapper laborContractMapper;
@Override
public List<FileRespVO> getFileList(String mobile) {
return laborContractMapper.selectFileByUserId(mobile);
}
}

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.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.dal.dataobject.laborcontract.LaborContractDO;
import javax.validation.Valid;
import java.util.List;
/**
* 劳动合同管理 Service 接口
@ -50,6 +52,19 @@ public interface LaborContractService {
* @param pageReqVO 分页查询
* @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,13 +3,18 @@ package cn.iocoder.yudao.module.system.service.laborcontract;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
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.LaborContractRespVO;
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.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.validation.annotation.Validated;
import javax.annotation.Resource;
import java.util.List;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.LABOR_CONTRACT_NOT_EXISTS;
@ -26,11 +31,18 @@ public class LaborContractServiceImpl implements LaborContractService {
@Resource
private LaborContractMapper laborContractMapper;
@Resource
private AdminUserMapper userMapper;
@Override
public Long createLaborContract(LaborContractSaveReqVO createReqVO) {
// 插入
LaborContractDO laborContract = BeanUtils.toBean(createReqVO, LaborContractDO.class);
// 设置到期时间
laborContract.setExpirationDate(laborContract.getSigningDate().plusYears(laborContract.getContractDuration()));
laborContract.setStatus(2);
laborContractMapper.insert(laborContract);
// 返回
return laborContract.getId();
}
@ -64,8 +76,23 @@ public class LaborContractServiceImpl implements LaborContractService {
}
@Override
public PageResult<LaborContractDO> getLaborContractPage(LaborContractPageReqVO pageReqVO) {
return null;
public PageResult<LaborContractRespVO> getLaborContractPage(LaborContractPageReqVO pageReqVO) {
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

@ -354,4 +354,11 @@ public interface AdminUserService {
* @return 用户列表
*/
List<AdminUserDO> getListByNature(Integer userNature);
/**
* 获取指定用户编制列表
* @param userStaffing 编制
* @return 用户列表
*/
List<AdminUserDO> getUserListByUserStaffing(Integer userStaffing);
}

View File

@ -118,7 +118,7 @@ public class AdminUserServiceImpl implements AdminUserService {
createReqVO.getMobile(), createReqVO.getEmail(), createReqVO.getDeptId(), createReqVO.getPostIds());
// 插入用户
AdminUserDO user = BeanUtils.toBean(createReqVO, AdminUserDO.class);
user.setStatus(CommonStatusEnum.ENABLE.getStatus()); // 默认开启
user.setStatus(createReqVO.getStatus() == null ? CommonStatusEnum.ENABLE.getStatus() : createReqVO.getStatus()); // 默认开启
user.setPassword(encodePassword(createReqVO.getPassword())); // 加密密码
userMapper.insert(user);
@ -728,4 +728,9 @@ public class AdminUserServiceImpl implements AdminUserService {
return userMapper.selectList(AdminUserDO::getUserNature, userNature);
}
@Override
public List<AdminUserDO> getUserListByUserStaffing(Integer userStaffing) {
return userMapper.selectList(AdminUserDO::getUserStaffing, userStaffing);
}
}

View File

@ -8,64 +8,19 @@
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见https://www.iocoder.cn/MyBatis/x-plugins/
-->
<select id="selectPage" resultType="cn.iocoder.yudao.module.system.controller.admin.laborcontract.vo.LaborContractRespVO">
<select id="selectFileByUserId" resultType="cn.iocoder.yudao.module.system.controller.admin.file.vo.FileRespVO">
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
a.fileId,
a.fileUrl AS url,
c.fileName,
c.extendName AS fileType
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
file.file a,
file.user b,
file.userfile c
WHERE
a.create_time = e.create_time
a.createUserId = b.userId
AND b.telephone = #{mobile}
AND a.fileId = c.fileId
</select>
</mapper>

View File

@ -27,7 +27,7 @@
</foreach>
</select>
<select id="selectUserByBoss">
<select id="selectUserByBoss" resultType="java.lang.Long">
SELECT DISTINCT
a.id
FROM