Compare commits
13 Commits
2b706d5dcb
...
5117cf4115
Author | SHA1 | Date | |
---|---|---|---|
![]() |
5117cf4115 | ||
![]() |
7a041e64f1 | ||
![]() |
ad7aae0daf | ||
![]() |
bd6a7d8f1b | ||
![]() |
5833692c34 | ||
![]() |
288b934149 | ||
![]() |
fa52566ce8 | ||
![]() |
6672357229 | ||
![]() |
08b86ed048 | ||
![]() |
831d575514 | ||
![]() |
6d04114723 | ||
![]() |
9fc18abf1c | ||
![]() |
c7bf42a41e |
@ -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);
|
||||
}
|
@ -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;
|
||||
}
|
@ -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() {
|
||||
// 私有构造方法,防止该类被实例化
|
||||
}
|
||||
|
@ -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));
|
||||
}
|
||||
}
|
@ -19,9 +19,6 @@ import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.
|
||||
|
||||
/**
|
||||
* Flowable 流程实例 Api 实现类
|
||||
*
|
||||
|
||||
* @author jason
|
||||
*/
|
||||
@RestController
|
||||
@Validated
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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()));
|
||||
}
|
||||
}
|
||||
|
File diff suppressed because one or more lines are too long
@ -57,4 +57,7 @@ public class UserSaveRespDTO {
|
||||
|
||||
@Schema(description = "是否为外勤人员", example = "1")
|
||||
private Integer fieldworkFlag;
|
||||
|
||||
@Schema(description = "状态,参见 CommonStatusEnum 枚举", example = "1")
|
||||
private Integer status;
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
@ -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));
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
@ -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;
|
||||
}
|
@ -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;
|
||||
}
|
@ -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")
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
@ -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);
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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 {
|
||||
}
|
||||
|
@ -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));
|
||||
//获得用户组中 用户信息
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -354,4 +354,11 @@ public interface AdminUserService {
|
||||
* @return 用户列表
|
||||
*/
|
||||
List<AdminUserDO> getListByNature(Integer userNature);
|
||||
|
||||
/**
|
||||
* 获取指定用户编制列表
|
||||
* @param userStaffing 编制
|
||||
* @return 用户列表
|
||||
*/
|
||||
List<AdminUserDO> getUserListByUserStaffing(Integer userStaffing);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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 >= #{reqVO.signingDatee[0]}
|
||||
</if>
|
||||
<if test="reqVO.signingDate[1] != null">
|
||||
AND b.signing_date <= #{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 >= #{reqVO.expirationDate[0]}
|
||||
</if>
|
||||
<if test="reqVO.expirationDate[1] != null">
|
||||
AND b.expiration_date <= #{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>
|
@ -27,7 +27,7 @@
|
||||
</foreach>
|
||||
</select>
|
||||
|
||||
<select id="selectUserByBoss">
|
||||
<select id="selectUserByBoss" resultType="java.lang.Long">
|
||||
SELECT DISTINCT
|
||||
a.id
|
||||
FROM
|
||||
|
Loading…
Reference in New Issue
Block a user