Merge branch 'dev' of http://git.znkjfw.com/ak/zn-cloud into dev

This commit is contained in:
aikai 2024-09-25 14:44:25 +08:00
commit b68eba4949
23 changed files with 169 additions and 47 deletions

View File

@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.bpm.controller.admin.oa;
import cn.hutool.core.collection.CollectionUtil;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.evection.BpmOAEvectionCreateReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.evection.BpmOAEvectionRespVO;
@ -16,8 +17,10 @@ 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;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
/**
@ -54,9 +57,9 @@ public class BpmOAEvectionController {
BpmOAEvectionRespVO respVO = BpmOAEvectionConvert.INSTANCE.convert(evection);
if (evection.getTogetherUserId() != null) {
AdminUserRespDTO userRespDTO = userApi.getUser(evection.getTogetherUserId()).getCheckedData();
respVO.setTogetherUserName(userRespDTO.getNickname());
if (CollectionUtil.isNotEmpty(evection.getTogetherUserIds())) {
List<AdminUserRespDTO> userRespDTOs = userApi.getUserList(respVO.getTogetherUserIds()).getCheckedData();
respVO.setTogetherUserName(String.join("", convertList(userRespDTOs, AdminUserRespDTO::getNickname)));
}
return success(respVO);
@ -71,9 +74,9 @@ public class BpmOAEvectionController {
BpmOAEvectionRespVO respVO = BpmOAEvectionConvert.INSTANCE.convert(evection);
if (evection.getTogetherUserId() != null) {
AdminUserRespDTO userRespDTO = userApi.getUser(evection.getTogetherUserId()).getCheckedData();
respVO.setTogetherUserName(userRespDTO.getNickname());
if (CollectionUtil.isNotEmpty(evection.getTogetherUserIds())) {
List<AdminUserRespDTO> userRespDTOs = userApi.getUserList(evection.getTogetherUserIds()).getCheckedData();
respVO.setTogetherUserName(String.join("", convertList(userRespDTOs, AdminUserRespDTO::getNickname)));
}
return success(respVO);

View File

@ -42,6 +42,10 @@ public class BpmOASalaryController {
@Operation(summary = "创建请求申请")
public CommonResult<Long> createSalary(@Valid @RequestBody BpmOASalaryCreateReqVO createReqVO) {
if (createReqVO.getFactoryId() != null) {
DeptRespDTO dto = deptApi.getDeptByFactoryId(createReqVO.getFactoryId()).getCheckedData();
createReqVO.setCompanyDeptId(dto.getId());
}
return success(salaryService.createSalary(getLoginUserId(), createReqVO));
}
@ -51,9 +55,18 @@ public class BpmOASalaryController {
public CommonResult<BpmOASalaryRespVO> getSalary(@RequestParam("id") Long id) {
BpmOASalaryDO salary = salaryService.getSalary(id);
if (salary == null) {
return success(new BpmOASalaryRespVO());
}
return success(BpmOASalaryConvert.INSTANCE.convert(salary)
.setCompanyName(getDept(salary.getCompanyDeptId()).getName()));
// 获取部门详情
DeptRespDTO dto = getDept(salary.getCompanyDeptId());
BpmOASalaryRespVO respVO = BpmOASalaryConvert.INSTANCE.convert(salary)
.setCompanyName(dto.getName())
.setFactoryId(dto.getFactoryId());
return success(respVO);
}
@GetMapping("/getByProcessInstanceId")
@ -63,8 +76,14 @@ public class BpmOASalaryController {
BpmOASalaryDO salary = salaryService.getByProcessInstanceId(processInstanceId);
return success(BpmOASalaryConvert.INSTANCE.convert(salary)
.setCompanyName(getDept(salary.getCompanyDeptId()).getName()));
// 获取部门详情
DeptRespDTO dto = getDept(salary.getCompanyDeptId());
BpmOASalaryRespVO respVO = BpmOASalaryConvert.INSTANCE.convert(salary)
.setCompanyName(dto.getName())
.setFactoryId(dto.getFactoryId());
return success(respVO);
}
/**

View File

@ -11,6 +11,7 @@ import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Set;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@ -30,7 +31,7 @@ public class BpmOAEvectionCreateReqVO {
private String reason;
@Schema(description = "随行人用户编号")
private Long togetherUserId;
private Set<Long> togetherUserIds;
@Schema(description = "出差起点", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "出差起点不能为空")

View File

@ -12,6 +12,7 @@ import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Set;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@ -29,7 +30,7 @@ public class BpmOAEvectionRespVO extends BpmOABaseRespVO {
private String reason;
@Schema(description = "随行人用户编号")
private Long togetherUserId;
private Set<Long> togetherUserIds;
@Schema(description = "随行人用户名称")
private String togetherUserName;

View File

@ -37,6 +37,10 @@ public class BpmOARegularCreateReqVO {
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
private LocalDate confirmationDate;
@Schema(description = "期望转正时间", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
private LocalDate desireDate;
@Schema(description = "备注", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
private String notes;

View File

@ -36,6 +36,10 @@ public class BpmOARegularRespVO extends BpmOABaseRespVO {
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
private LocalDate confirmationDate;
@Schema(description = "期望转正时间", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
private LocalDate desireDate;
@Schema(description = "备注", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
private String notes;

View File

@ -5,15 +5,11 @@ import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY;
/**
* 薪资付款申请 创建 Request VO
*
@ -29,10 +25,12 @@ public class BpmOASalaryCreateReqVO {
@NotNull(message = "申请原因不能为空")
private String reason;
@Schema(description = "付款公司", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@NotNull(message = "付款公司不能为空")
@Schema(description = "付款公司")
private Long companyDeptId;
@Schema(description = "付款工厂编号")
private Long factoryId;
@Schema(description = "付款总额", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "付款总额不能为空")
private BigDecimal paymentTotal;

View File

@ -6,15 +6,10 @@ import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY;
/**
* @author 符溶馨
*/
@ -33,6 +28,9 @@ public class BpmOASalaryRespVO extends BpmOABaseRespVO {
@Schema(description = "付款公司名称")
private String companyName;
@Schema(description = "付款工厂")
private Long FactoryId;
@Schema(description = "付款总额")
private BigDecimal paymentTotal;

View File

@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.bpm.dal.dataobject.oa;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import cn.iocoder.yudao.framework.common.pojo.UploadUserFile;
import cn.iocoder.yudao.framework.mybatis.core.type.JsonLongSetTypeHandler;
import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
@ -12,6 +13,7 @@ import lombok.*;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Set;
/**
* OA 出差申请 DO
@ -48,9 +50,10 @@ public class BpmOAEvectionDO extends BaseDO {
private String reason;
/**
* 随行人用户编号
* 随行人用户编号
*/
private Long togetherUserId;
@TableField(typeHandler = JsonLongSetTypeHandler.class)
private Set<Long> togetherUserIds;
/**
* 出差地点 起点

View File

@ -36,7 +36,6 @@ public class BpmOARegularDO extends BaseDO {
/**
* 申请人的用户编号
*
* 关联 AdminUserDO id 属性
*/
private Long userId;
@ -56,13 +55,18 @@ public class BpmOARegularDO extends BaseDO {
*/
private LocalDate confirmationDate;
/**
* 期望转正时间
*/
private LocalDate desireDate;
/**
* 备注
*/
private String notes;
/**
* 出差的结果
* 结果
*
* 枚举 {@link BpmProcessInstanceResultEnum}
* 考虑到简单所以直接复用了 BpmProcessInstanceResultEnum 枚举也可以自己定义一个枚举哈

View File

@ -53,8 +53,8 @@ public interface DeptApi {
CommonResult<Long> createDept(@RequestBody DeptRespDTO deptRespDTO);
@PostMapping(PREFIX + "/update")
@Operation(summary = "修改部门信息")
void updateDept(@RequestBody DeptRespDTO deptRespDTO);
@Operation(summary = "修改工厂部门信息")
void updateFactoryDept(@RequestBody DeptRespDTO deptRespDTO);
@PostMapping(PREFIX + "/delete")
@Operation(summary = "删除部门信息")

View File

@ -53,6 +53,7 @@ public interface ErrorCodeConstants {
ErrorCode DEPT_EXISTS_USER = new ErrorCode(1_002_004_005, "部门中存在员工,无法删除");
ErrorCode DEPT_NOT_ENABLE = new ErrorCode(1_002_004_006, "部门({})不处于开启状态,不允许选择");
ErrorCode DEPT_PARENT_IS_CHILD = new ErrorCode(1_002_004_007, "不能设置自己的子部门为父部门");
ErrorCode FACTORY_DEPT_NOT_FOUND = new ErrorCode(1_002_004_008, "当前工厂没有对应部门");
// ========== 职称模块 1-002-005-000 ==========
ErrorCode POST_NOT_FOUND = new ErrorCode(1_002_005_000, "当前职称不存在");

View File

@ -75,18 +75,10 @@ public class DeptApiImpl implements DeptApi {
}
@Override
public void updateDept(DeptRespDTO deptRespDTO) {
public void updateFactoryDept(DeptRespDTO deptRespDTO) {
DeptDO deptDO = deptService.getDeptByFactoryId(deptRespDTO.getFactoryId());
if (deptDO != null) {
DeptSaveReqVO deptSaveReqVO = BeanUtils.toBean(deptDO, DeptSaveReqVO.class);
deptSaveReqVO.setLeaderUserId(deptRespDTO.getLeaderUserId());
deptSaveReqVO.setName(deptRespDTO.getName());
deptService.updateDept(deptSaveReqVO);
}
DeptSaveReqVO deptSaveReqVO = BeanUtils.toBean(deptRespDTO, DeptSaveReqVO.class);
deptService.updateFactoryDept(deptSaveReqVO);
}
@Override

View File

@ -6,6 +6,7 @@ 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.controller.admin.laborcontract.vo.SigningDateRespVO;
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;
@ -21,9 +22,12 @@ import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.validation.Valid;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.List;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
@Tag(name = "管理后台 - 劳动合同管理")
@RestController
@ -101,4 +105,21 @@ public class LaborContractController {
return success(laborContractService.getLaborContractPage(pageReqVO));
}
@GetMapping("/getSigningDate")
@Operation(summary = "获得当前登录用户的入职时间和转正时间")
@PreAuthorize("@ss.hasPermission('system:labor-contract:query')")
public CommonResult<SigningDateRespVO> getSigningDate() {
LaborContractDO contractDO = laborContractService.getSigningDate(getLoginUserId());
if (contractDO == null) {
return success(new SigningDateRespVO());
}
SigningDateRespVO respVO = BeanUtils.toBean(contractDO, SigningDateRespVO.class);
// 设置转正日期
LocalDate regularDate = contractDO.getSigningDate().plusMonths(contractDO.getProbationPeriodTime());
respVO.setRegularDate(regularDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
return success(respVO);
}
}

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;
import org.springframework.format.annotation.DateTimeFormat;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY;
@Schema(description = "管理后台 - 劳动合同管理 Response VO")
@Data
public class SigningDateRespVO {
@Schema(description = "签约日期")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
private String signingDate;
@Schema(description = "转正日期")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
private String regularDate;
}

View File

@ -9,9 +9,12 @@ import lombok.Data;
@Data
public class UploadFile {
@Schema(description = "文件管理 fileId", requiredMode = Schema.RequiredMode.REQUIRED, example = "123.jpg")
@Schema(description = "文件管理 fileId", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private String fileId;
@Schema(description = "文件名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "123.jpg")
private String fileName;
@Schema(description = "文件URL", requiredMode = Schema.RequiredMode.REQUIRED, example = "http://xxx.xxx/xx/xx/123.jpgss")
private String url;

View File

@ -136,7 +136,7 @@ public interface AdminUserMapper extends BaseMapperX<AdminUserDO> {
" contract_duration AS contractDuration,\n" +
" probation_period_time AS probationPeriodTime,\n" +
" status,\n" +
" create_time AS createTime,\n" +
" create_time AS createTime\n" +
" FROM\n" +
" system_labor_contract lc\n" +
" INNER JOIN (SELECT\n" +

View File

@ -3,7 +3,6 @@ package cn.iocoder.yudao.module.system.dal.mysql.worklog;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission;
import cn.iocoder.yudao.framework.datapermission.core.aop.DataPermissionContextHolder;
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;
@ -65,8 +64,8 @@ public interface LogInstanceMapper extends BaseMapperX<LogInstanceDO> {
.eq(LogReadDo::getLogInstanceId, LogInstanceDO::getId)
.eq(LogReadDo::getReadUserId, userId)
.eq(LogReadDo::getDeleted, 0));
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 log_instance_id, COUNT(log_instance_id) AS readCount FROM work_log_read where read_status = 1 and deleted = 0 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 and deleted = 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.eqIfPresent(LogInstanceDO::getDeptId, reqVO.getDeptId());
queryWrapper.eqIfPresent(LogInstanceDO::getFormId, reqVO.getFormId());

View File

@ -30,6 +30,12 @@ public interface DeptService {
*/
void updateDept(DeptSaveReqVO updateReqVO);
/**
* 更新工厂部门
* @param updateReqVO 更新信息
*/
void updateFactoryDept(DeptSaveReqVO updateReqVO);
/**
* 删除部门
*

View File

@ -128,6 +128,17 @@ public class DeptServiceImpl implements DeptService {
deptMapper.updateById(updateObj);
}
@Override
public void updateFactoryDept(DeptSaveReqVO updateReqVO) {
// 校验自己存在
validateFactoryDeptExists(updateReqVO.getFactoryId());
DeptDO update = BeanUtils.toBean(updateReqVO, DeptDO.class);
deptMapper.update(update, new LambdaQueryWrapperX<DeptDO>()
.eq(DeptDO::getFactoryId, updateReqVO.getFactoryId()));
}
@Override
@CacheEvict(cacheNames = RedisKeyConstants.DEPT_CHILDREN_ID_LIST,
allEntries = true) // allEntries 清空所有缓存因为操作一个部门涉及到多个缓存
@ -153,6 +164,17 @@ public class DeptServiceImpl implements DeptService {
}
}
@VisibleForTesting
void validateFactoryDeptExists(Long factoryId) {
if (factoryId == null) {
return;
}
DeptDO dept = deptMapper.selectOne(DeptDO::getFactoryId, factoryId);
if (dept == null) {
throw exception(FACTORY_DEPT_NOT_FOUND);
}
}
@VisibleForTesting
void validateParentDept(Long id, Long parentId) {
if (parentId == null || DeptDO.PARENT_ID_ROOT.equals(parentId)) {

View File

@ -83,5 +83,10 @@ public interface LaborContractService {
*/
List<LaborContractDO> getListByEndTime(LocalDate now);
/**
* 获得当前登录用户的入职时间和转正时间
* @param userId 用户编号
* @return 日期
*/
LaborContractDO getSigningDate(Long userId);
}

View File

@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.system.service.laborcontract;
import cn.hutool.core.collection.CollectionUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
@ -118,4 +119,15 @@ public class LaborContractServiceImpl implements LaborContractService {
.lt(LaborContractDO::getExpirationDate, now)
.eq(LaborContractDO::getStatus, 3));
}
@Override
public LaborContractDO getSigningDate(Long userId) {
List<LaborContractDO> list = laborContractMapper.selectList(new LambdaQueryWrapperX<LaborContractDO>()
.eq(LaborContractDO::getUserId, userId)
.isNotNull(LaborContractDO::getProbationPeriodTime)
.orderByDesc(LaborContractDO::getCreateTime));
return CollectionUtil.isEmpty(list) ? null : list.get(0);
}
}

View File

@ -91,7 +91,7 @@ public class FactoryInfoServiceImpl implements FactoryInfoService {
deptRespDTO.setName(updateReqVO.getShortName());
deptRespDTO.setLeaderUserId(updateReqVO.getLeaderUserId());
deptRespDTO.setFactoryId(updateReqVO.getId());
deptApi.updateDept(deptRespDTO);
deptApi.updateFactoryDept(deptRespDTO);
}
@Override
@ -259,5 +259,11 @@ public class FactoryInfoServiceImpl implements FactoryInfoService {
// 更新
FactoryInfoDO updateObj = BeanUtils.toBean(updateReqVO, FactoryInfoDO.class);
factoryInfoMapper.updateById(updateObj);
//同步更新 工厂部门状态
DeptRespDTO deptRespDTO = new DeptRespDTO();
deptRespDTO.setFactoryId(updateReqVO.getId());
deptRespDTO.setStatus(updateReqVO.getStatus());
deptApi.updateFactoryDept(deptRespDTO);
}
}