diff --git a/vetti-admin/src/main/java/com/vetti/web/controller/hotake/HotakeCandidateComplianceController.java b/vetti-admin/src/main/java/com/vetti/web/controller/hotake/HotakeCandidateComplianceController.java new file mode 100644 index 0000000..6d80a09 --- /dev/null +++ b/vetti-admin/src/main/java/com/vetti/web/controller/hotake/HotakeCandidateComplianceController.java @@ -0,0 +1,95 @@ +package com.vetti.web.controller.hotake; + +import com.vetti.common.annotation.Log; +import com.vetti.common.core.controller.BaseController; +import com.vetti.common.core.domain.AjaxResult; +import com.vetti.common.core.page.TableDataInfo; +import com.vetti.common.enums.BusinessType; +import com.vetti.common.utils.SecurityUtils; +import com.vetti.common.utils.poi.ExcelUtil; +import com.vetti.hotake.domain.HotakeCandidateCompliance; +import com.vetti.hotake.domain.dto.CandidateComplianceDto; +import com.vetti.hotake.service.IHotakeCandidateComplianceService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; + +@Api(tags ="候选者合规") +@RestController +@RequestMapping("/hotake/candidateCompliance") +public class HotakeCandidateComplianceController extends BaseController +{ + @Autowired + private IHotakeCandidateComplianceService hotakeCandidateComplianceService; + + @ApiOperation("查询候选者合规列表") + @PreAuthorize("@ss.hasPermi('hotake:candidateCompliance:list')") + @GetMapping("/list") + public TableDataInfo list(HotakeCandidateCompliance hotakeCandidateCompliance) + { + startPage(); + List list = hotakeCandidateComplianceService.selectHotakeCandidateComplianceList(hotakeCandidateCompliance); + return getDataTable(list); + } + + @ApiOperation("获取当前登录人候选者合规列表") + @GetMapping("/listByLoginUser") + public AjaxResult listByLoginUser() + { + HotakeCandidateCompliance query = new HotakeCandidateCompliance(); + query.setUserId(SecurityUtils.getUserId()); + List list = hotakeCandidateComplianceService.selectHotakeCandidateComplianceList(query); + return AjaxResult.success(list); + } + +// @ApiOperation("导出候选者合规列表") +// @PreAuthorize("@ss.hasPermi('hotake:candidateCompliance:export')") +// @Log(title = "候选者合规", businessType = BusinessType.EXPORT) +// @GetMapping("/export") +// public AjaxResult export(HotakeCandidateCompliance hotakeCandidateCompliance) +// { +// List list = hotakeCandidateComplianceService.selectHotakeCandidateComplianceList(hotakeCandidateCompliance); +// ExcelUtil util = new ExcelUtil(HotakeCandidateCompliance.class); +// return util.exportExcel(list, "候选者合规数据"); +// } + + @ApiOperation("获取候选者合规详细信息") + @PreAuthorize("@ss.hasPermi('hotake:candidateCompliance:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return AjaxResult.success(hotakeCandidateComplianceService.selectHotakeCandidateComplianceById(id)); + } + + @ApiOperation("新增候选者合规") + @PreAuthorize("@ss.hasPermi('hotake:candidateCompliance:add')") + @Log(title = "候选者合规", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestPart("file") MultipartFile file, HotakeCandidateCompliance hotakeCandidateCompliance) + { + return toAjax(hotakeCandidateComplianceService.insertHotakeCandidateCompliance(file, hotakeCandidateCompliance)); + } + + @ApiOperation("修改候选者合规") + @PreAuthorize("@ss.hasPermi('hotake:candidateCompliance:edit')") + @Log(title = "候选者合规", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestPart(name = "file", required = false) MultipartFile file, HotakeCandidateCompliance hotakeCandidateCompliance) + { + return toAjax(hotakeCandidateComplianceService.updateHotakeCandidateCompliance(file, hotakeCandidateCompliance)); + } + + @ApiOperation("删除候选者合规") + @PreAuthorize("@ss.hasPermi('hotake:candidateCompliance:remove')") + @Log(title = "候选者合规", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) + { + return toAjax(hotakeCandidateComplianceService.deleteHotakeCandidateComplianceByIds(ids)); + } +} diff --git a/vetti-hotakes/src/main/java/com/vetti/hotake/domain/HotakeCandidateCompliance.java b/vetti-hotakes/src/main/java/com/vetti/hotake/domain/HotakeCandidateCompliance.java new file mode 100644 index 0000000..e97b433 --- /dev/null +++ b/vetti-hotakes/src/main/java/com/vetti/hotake/domain/HotakeCandidateCompliance.java @@ -0,0 +1,36 @@ +package com.vetti.hotake.domain; + +import lombok.Data; +import lombok.experimental.Accessors; +import io.swagger.annotations.ApiModelProperty; +import com.vetti.common.annotation.Excel; +import com.vetti.common.core.domain.BaseEntity; + +@Data +public class HotakeCandidateCompliance extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键ID") + private Long id; + + @ApiModelProperty("用户合规项ID(关联 sys_user.id)") + @Excel(name = "用户合规项ID") + private Long userId; + + @ApiModelProperty("附件ID(关联 hotake_sys_file.id)") + @Excel(name = "附件ID") + private Long fileId; + + @ApiModelProperty("类型名") + @Excel(name = "类型名") + private String typeName; + + @ApiModelProperty("描述") + @Excel(name = "描述") + private String description; + + @ApiModelProperty("删除状态(0正常 2删除)") + private String delFlag; +} + diff --git a/vetti-hotakes/src/main/java/com/vetti/hotake/domain/dto/CandidateComplianceDto.java b/vetti-hotakes/src/main/java/com/vetti/hotake/domain/dto/CandidateComplianceDto.java new file mode 100644 index 0000000..263eda4 --- /dev/null +++ b/vetti-hotakes/src/main/java/com/vetti/hotake/domain/dto/CandidateComplianceDto.java @@ -0,0 +1,27 @@ +package com.vetti.hotake.domain.dto; + +import cn.hutool.core.bean.BeanUtil; +import com.vetti.hotake.domain.HotakeCandidateCompliance; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author ID + * @date 2026/1/15 11:03 + */ +@Data +public class CandidateComplianceDto extends HotakeCandidateCompliance { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("附件URL") + private String fileUrl; + + public static CandidateComplianceDto build(HotakeCandidateCompliance data, String fileUrl) { + CandidateComplianceDto dto = new CandidateComplianceDto(); + BeanUtil.copyProperties(data, dto); + dto.setFileUrl(fileUrl); + return dto; + } + +} diff --git a/vetti-hotakes/src/main/java/com/vetti/hotake/mapper/HotakeCandidateComplianceMapper.java b/vetti-hotakes/src/main/java/com/vetti/hotake/mapper/HotakeCandidateComplianceMapper.java new file mode 100644 index 0000000..8e6de40 --- /dev/null +++ b/vetti-hotakes/src/main/java/com/vetti/hotake/mapper/HotakeCandidateComplianceMapper.java @@ -0,0 +1,20 @@ +package com.vetti.hotake.mapper; + +import java.util.List; +import com.vetti.hotake.domain.HotakeCandidateCompliance; + +public interface HotakeCandidateComplianceMapper +{ + public HotakeCandidateCompliance selectHotakeCandidateComplianceById(Long id); + + public List selectHotakeCandidateComplianceList(HotakeCandidateCompliance hotakeCandidateCompliance); + + public int insertHotakeCandidateCompliance(HotakeCandidateCompliance hotakeCandidateCompliance); + + public int updateHotakeCandidateCompliance(HotakeCandidateCompliance hotakeCandidateCompliance); + + public int deleteHotakeCandidateComplianceById(Long id); + + public int deleteHotakeCandidateComplianceByIds(Long[] ids); +} + diff --git a/vetti-hotakes/src/main/java/com/vetti/hotake/service/IHotakeCandidateComplianceService.java b/vetti-hotakes/src/main/java/com/vetti/hotake/service/IHotakeCandidateComplianceService.java new file mode 100644 index 0000000..8d80003 --- /dev/null +++ b/vetti-hotakes/src/main/java/com/vetti/hotake/service/IHotakeCandidateComplianceService.java @@ -0,0 +1,21 @@ +package com.vetti.hotake.service; + +import java.util.List; +import com.vetti.hotake.domain.HotakeCandidateCompliance; +import com.vetti.hotake.domain.dto.CandidateComplianceDto; +import org.springframework.web.multipart.MultipartFile; + +public interface IHotakeCandidateComplianceService +{ + public CandidateComplianceDto selectHotakeCandidateComplianceById(Long id); + + public List selectHotakeCandidateComplianceList(HotakeCandidateCompliance hotakeCandidateCompliance); + + public int insertHotakeCandidateCompliance(MultipartFile file, HotakeCandidateCompliance hotakeCandidateCompliance); + + public int updateHotakeCandidateCompliance(MultipartFile file, HotakeCandidateCompliance hotakeCandidateCompliance); + + public int deleteHotakeCandidateComplianceByIds(Long[] ids); + + public int deleteHotakeCandidateComplianceById(Long id); +} diff --git a/vetti-hotakes/src/main/java/com/vetti/hotake/service/impl/HotakeCandidateComplianceServiceImpl.java b/vetti-hotakes/src/main/java/com/vetti/hotake/service/impl/HotakeCandidateComplianceServiceImpl.java new file mode 100644 index 0000000..b081ced --- /dev/null +++ b/vetti-hotakes/src/main/java/com/vetti/hotake/service/impl/HotakeCandidateComplianceServiceImpl.java @@ -0,0 +1,91 @@ +package com.vetti.hotake.service.impl; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import com.vetti.common.core.service.BaseServiceImpl; +import com.vetti.common.enums.FillTypeEnum; +import com.vetti.hotake.domain.HotakeSysFile; +import com.vetti.hotake.domain.dto.CandidateComplianceDto; +import com.vetti.hotake.service.IHotakeSysFileService; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; + +import com.vetti.hotake.mapper.HotakeCandidateComplianceMapper; +import com.vetti.hotake.domain.HotakeCandidateCompliance; +import com.vetti.hotake.service.IHotakeCandidateComplianceService; + +@SuppressWarnings("all") +@Service +public class HotakeCandidateComplianceServiceImpl extends BaseServiceImpl implements IHotakeCandidateComplianceService { + private static final String MINIO_BUCKET_NAME = "compliance-fs"; + + @Autowired + private HotakeCandidateComplianceMapper hotakeCandidateComplianceMapper; + + @Autowired + private IHotakeSysFileService hotakeSysFileService; + + @Transactional(readOnly = true) + @Override + public CandidateComplianceDto selectHotakeCandidateComplianceById(Long id) { + HotakeCandidateCompliance data = hotakeCandidateComplianceMapper.selectHotakeCandidateComplianceById(id); + if (data.getFileId() != null) { + return CandidateComplianceDto.build(data, hotakeSysFileService.url(data.getFileId())); + } + return CandidateComplianceDto.build(data, ""); + } + + @Transactional(readOnly = true) + @Override + public List selectHotakeCandidateComplianceList(HotakeCandidateCompliance hotakeCandidateCompliance) { + List dtoList = new ArrayList<>(); + List list = hotakeCandidateComplianceMapper.selectHotakeCandidateComplianceList(hotakeCandidateCompliance); + if (CollectionUtils.isNotEmpty(list)) { + list.forEach(e -> { + if (e.getFileId() != null) { + dtoList.add(CandidateComplianceDto.build(e, hotakeSysFileService.url(e.getFileId()))); + } + }); + } + return dtoList; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public int insertHotakeCandidateCompliance(MultipartFile file, HotakeCandidateCompliance hotakeCandidateCompliance) { + if (file != null) { + HotakeSysFile sysFile = hotakeSysFileService.uploadFile(file, MINIO_BUCKET_NAME); + hotakeCandidateCompliance.setFileId(sysFile.getId()); + } + fill(FillTypeEnum.INSERT.getCode(), hotakeCandidateCompliance); + return hotakeCandidateComplianceMapper.insertHotakeCandidateCompliance(hotakeCandidateCompliance); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public int updateHotakeCandidateCompliance(MultipartFile file, HotakeCandidateCompliance hotakeCandidateCompliance) { + if (file != null) { + HotakeSysFile sysFile = hotakeSysFileService.uploadFile(file, MINIO_BUCKET_NAME); + hotakeCandidateCompliance.setFileId(sysFile.getId()); + } + fill(FillTypeEnum.UPDATE.getCode(), hotakeCandidateCompliance); + return hotakeCandidateComplianceMapper.updateHotakeCandidateCompliance(hotakeCandidateCompliance); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public int deleteHotakeCandidateComplianceByIds(Long[] ids) { + return hotakeCandidateComplianceMapper.deleteHotakeCandidateComplianceByIds(ids); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public int deleteHotakeCandidateComplianceById(Long id) { + return hotakeCandidateComplianceMapper.deleteHotakeCandidateComplianceById(id); + } +} diff --git a/vetti-hotakes/src/main/resources/mapper/hotake/HotakeCandidateComplianceMapper.xml b/vetti-hotakes/src/main/resources/mapper/hotake/HotakeCandidateComplianceMapper.xml new file mode 100644 index 0000000..85a575f --- /dev/null +++ b/vetti-hotakes/src/main/resources/mapper/hotake/HotakeCandidateComplianceMapper.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + select id, user_id, file_id, type_name, description, del_flag, create_by, create_time, update_by, update_time, remark from hotake_candidate_compliance + + + + + + + + insert into hotake_candidate_compliance + + user_id, + file_id, + type_name, + description, + del_flag, + create_by, + create_time, + update_by, + update_time, + remark, + + + #{userId}, + #{fileId}, + #{typeName}, + #{description}, + #{delFlag}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + #{remark}, + + + + + update hotake_candidate_compliance + + user_id = #{userId}, + file_id = #{fileId}, + type_name = #{typeName}, + description = #{description}, + del_flag = #{delFlag}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + remark = #{remark}, + + where id = #{id} + + + + delete from hotake_candidate_compliance where id = #{id} + + + + delete from hotake_candidate_compliance where id in + + #{id} + + + + diff --git a/vetti-system/target/classes/mapper/system/SysUserMapper.xml b/vetti-system/target/classes/mapper/system/SysUserMapper.xml index 86837b7..98e81ed 100644 --- a/vetti-system/target/classes/mapper/system/SysUserMapper.xml +++ b/vetti-system/target/classes/mapper/system/SysUserMapper.xml @@ -43,6 +43,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + @@ -73,7 +75,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status, r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status,u.sys_user_type ,u.steps,u.job_position,u.experience,u.cv_url,u.location,u.job_type,u.relocate,u.best_side_json,u.address, - u.user_flag,u.user_set_json,u.company_name,u.job_title,u.user_oper_status + u.user_flag,u.user_set_json,u.company_name,u.job_title,u.user_oper_status,u.cv_template_json,u.work_nature_json from sys_user u left join sys_dept d on u.dept_id = d.dept_id left join sys_user_role ur on u.user_id = ur.user_id @@ -82,7 +84,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, u.create_time,u.sys_user_type,u.steps,u.job_position,u.experience,u.cv_url,u.location, - u.job_type,u.relocate,u.best_side_json,u.address,u.user_flag,u.user_set_json,u.company_name,u.job_title,u.user_oper_status + u.job_type,u.relocate,u.best_side_json,u.address,u.user_flag,u.user_set_json,u.company_name,u.job_title,u.user_oper_status,u.cv_template_json,u.work_nature_json from sys_user u left join sys_dept d on u.dept_id = d.dept_id left join sys_user_role ur on u.user_id = ur.user_id @@ -134,7 +136,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"