八大员缺员兼职查询

This commit is contained in:
cwchen 2025-02-11 11:13:48 +08:00
parent f02d86e801
commit 9f582413c2
7 changed files with 502 additions and 0 deletions

View File

@ -0,0 +1,65 @@
package com.bonus.system.dept.controller;
import com.bonus.common.core.web.controller.BaseController;
import com.bonus.common.core.web.domain.AjaxResult;
import com.bonus.common.core.web.page.TableDataInfo;
import com.bonus.common.log.annotation.Log;
import com.bonus.common.log.enums.BusinessType;
import com.bonus.common.security.annotation.RequiresPermissions;
import com.bonus.system.dept.entity.EightMembersVacancyVo;
import com.bonus.system.dept.service.EightMembersVacancyService;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
/**
* @className:EightMembersVacancyController
* @author:cwchen
* @date:2025-02-10-13:35
* @version:1.0
* @description:八大员缺员兼职查询-controller
*/
@ApiOperation("八大员缺员兼职查询")
@RestController
@RequestMapping("/eightMembersVacancy")
public class EightMembersVacancyController extends BaseController {
@Resource(name = "EightMembersVacancyService")
private EightMembersVacancyService service;
// @RequiresPermissions("dept:eightMembers:query")
@ApiOperation("八大员缺员兼职查询-列表查询")
@GetMapping("/getList")
@Log(title = "项目部角色管理->八大员缺员兼职查询->列表查询", businessType = BusinessType.QUERY)
public TableDataInfo getList(EightMembersVacancyVo vo) {
startPage();
List<EightMembersVacancyVo> list = service.getList(vo);
return getDataTable(list);
}
@ApiOperation("八大员缺员兼职查询-缺员项目部数量详情")
@GetMapping("/getUnderStaffingList")
@Log(title = "项目部角色管理->八大员缺员兼职查询->列表查询->缺员项目部详情", businessType = BusinessType.QUERY)
public TableDataInfo getUnderStaffingList(EightMembersVacancyVo vo) {
List<EightMembersVacancyVo.VacancyDetail> list = service.getUnderStaffingList(vo);
return getDataTable(list);
}
@ApiOperation("八大员缺员兼职查询-兼职项目部数量详情")
@GetMapping("/getPartTimeList")
@Log(title = "项目部角色管理->八大员缺员兼职查询->列表查询->兼职项目部详情", businessType = BusinessType.QUERY)
public TableDataInfo getPartTimeList(EightMembersVacancyVo vo) {
List<EightMembersVacancyVo.VacancyDetail> list = service.getPartTimeList(vo);
return getDataTable(list);
}
@ApiOperation("角色下拉选")
@GetMapping("/getRoleList")
public AjaxResult getRoleList() {
return service.getRoleList();
}
}

View File

@ -0,0 +1,56 @@
package com.bonus.system.dept.dao;
import com.bonus.system.dept.entity.EightMembersVacancyVo;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Map;
/**
* @className:EightMembersVacancyDao
* @author:cwchen
* @date:2025-02-10-13:41
* @version:1.0
* @description:八大员缺员兼职-数据库层
*/
@Repository(value = "EightMembersVacancyDao")
public interface EightMembersVacancyDao {
/**
* 八大员缺员兼职查询-列表查询
* @param vo
* @return List<EightMembersVacancyVo>
* @author cwchen
* @date 2025/2/10 14:15
*/
List<EightMembersVacancyVo> getList(EightMembersVacancyVo vo);
/**
*
* @param id 角色id
* @param type 1.缺员项目部数量 2.兼职项目部数量
* @return Integer
* @author cwchen
* @date 2025/2/10 15:11
*/
List<Long> getNumByType(@Param("id")Long id,@Param("type") int type);
/**
* 八大员缺员兼职查询-缺员/兼职项目部详情
* @param list
* @return List<VacancyDetail>
* @author cwchen
* @date 2025/2/10 16:36
*/
List<EightMembersVacancyVo.VacancyDetail> getStaffingList(@Param("list")List<Long> list,@Param("params") EightMembersVacancyVo vo);
/**
* 角色下拉选
* @return List<Map<String,Object>>
* @author cwchen
* @date 2025/2/10 17:50
*/
List<Map<String, Object>> getRoleList();
}

View File

@ -0,0 +1,64 @@
package com.bonus.system.dept.entity;
import cn.afterturn.easypoi.excel.annotation.Excel;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
/**
* @className:EightMembersVacancyVo
* @author:cwchen
* @date:2025-02-10-14:03
* @version:1.0
* @description:八大员缺员兼职查询-vo
*/
@Data
public class EightMembersVacancyVo {
/**序号*/
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
@Excel(name = "序号", width = 20,height = 15,orderNum = "0")
private long serialNumber;
/**id*/
private Long id;
/**角色名称*/
@Excel(name = "角色名称", width = 30,height = 15,orderNum = "1")
private String roleName;
/**缺员项目部数量*/
@Excel(name = "缺员项目部数量", width = 30,height = 15,orderNum = "2")
private int vacancyDeptNum;
/**兼职项目部数量*/
@Excel(name = "兼职项目部数量", width = 30,height = 15,orderNum = "3")
private int partTimeJobNum;
/**1.缺员项目部详情 2.兼职项目部详情*/
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private int type;
@Data
public static class VacancyDetail{
/**角色ID*/
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
public String departmentRoleId;
/**姓名*/
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
public String userName;
/**项目部名称*/
public String orgName;
/**项目经理*/
public String projectManager;
/**安全员*/
public String safetyOfficer;
/**质检员*/
public String qualityInspector;
/**项目总工*/
public String projectChiefEngineer;
/**机械员*/
public String machinist;
/**资料员*/
public String document;
/**施工员*/
public String constructionWorker;
/**材料员*/
public String materialMan;
/**其他*/
public String other;
}
}

View File

@ -0,0 +1,51 @@
package com.bonus.system.dept.service;
import com.bonus.common.core.web.domain.AjaxResult;
import com.bonus.system.dept.entity.EightMembersVacancyVo;
import java.util.List;
/**
* @className:EightMembersVacancyService
* @author:cwchen
* @date:2025-02-10-13:40
* @version:1.0
* @description:八大员缺员兼职查询-service
*/
public interface EightMembersVacancyService {
/**
* 八大员缺员兼职查询-列表查询
* @param vo
* @return List<EightMembersVacancyVo>
* @author cwchen
* @date 2025/2/10 14:13
*/
List<EightMembersVacancyVo> getList(EightMembersVacancyVo vo);
/**
* 八大员缺员兼职查询-缺员项目部详情
* @param vo
* @return List<VacancyDetail>
* @author cwchen
* @date 2025/2/10 16:32
*/
List<EightMembersVacancyVo.VacancyDetail> getUnderStaffingList(EightMembersVacancyVo vo);
/**
* 八大员缺员兼职查询-兼职项目部详情
* @param vo
* @return List<VacancyDetail>
* @author cwchen
* @date 2025/2/10 16:32
*/
List<EightMembersVacancyVo.VacancyDetail> getPartTimeList(EightMembersVacancyVo vo);
/**
* 角色下拉选
* @return AjaxResult
* @author cwchen
* @date 2025/2/10 16:40
*/
AjaxResult getRoleList();
}

View File

@ -0,0 +1,161 @@
package com.bonus.system.dept.service;
import com.bonus.common.core.web.domain.AjaxResult;
import com.bonus.system.dept.dao.EightMembersVacancyDao;
import com.bonus.system.dept.entity.EightMembersVacancyVo;
import com.github.pagehelper.PageHelper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import static com.bonus.common.core.utils.PageUtils.startPage;
/**
* @className:EightMembersVacancyServiceImpl
* @author:cwchen
* @date:2025-02-10-13:40
* @version:1.0
* @description:八大员缺员兼职-业务层
*/
@Service(value = "EightMembersVacancyService")
@Slf4j
public class EightMembersVacancyServiceImpl implements EightMembersVacancyService{
@Resource(name = "EightMembersVacancyDao")
private EightMembersVacancyDao dao;
@Resource(name = "testTaskExecutor")
private ThreadPoolTaskExecutor testTaskExecutor;
@Override
public List<EightMembersVacancyVo> getList(EightMembersVacancyVo vo) {
List<EightMembersVacancyVo> list = new ArrayList<>();
try {
list = dao.getList(vo);
for (EightMembersVacancyVo vacancyVo : list) {
testTaskExecutor.execute(() -> {
// 查询缺员项目部数量
List<Long> numList = dao.getNumByType(vacancyVo.getId(),1);
// 查询兼职项目部数量
List<Long> numList2 = dao.getNumByType(vacancyVo.getId(),2);
vacancyVo.setVacancyDeptNum(CollectionUtils.isEmpty(numList) ? 0 : numList.size());
vacancyVo.setPartTimeJobNum(CollectionUtils.isEmpty(numList2) ? 0 : numList2.size());
});
}
} catch (Exception e) {
log.error(e.toString(),e);
}
return list;
}
@Override
public List<EightMembersVacancyVo.VacancyDetail> getUnderStaffingList(EightMembersVacancyVo vo) {
List<EightMembersVacancyVo.VacancyDetail> list = new ArrayList<>();
try {
// 查询缺员项目部id
List<Long> underStaffingIds = dao.getNumByType(vo.getId(),1);
startPage();
if(CollectionUtils.isNotEmpty(underStaffingIds)){
list = dao.getStaffingList(underStaffingIds,vo);
handleData(list);
}
} catch (Exception e) {
log.error(e.toString(),e);
}
return list;
}
@Override
public List<EightMembersVacancyVo.VacancyDetail> getPartTimeList(EightMembersVacancyVo vo) {
List<EightMembersVacancyVo.VacancyDetail> list = new ArrayList<>();
try {
// 查询兼职项目部id
List<Long> partTimeIds = dao.getNumByType(vo.getId(),2);
startPage();
if(CollectionUtils.isNotEmpty(partTimeIds)){
list = dao.getStaffingList(partTimeIds,vo);
handleData(list);
}
} catch (Exception e) {
log.error(e.toString(),e);
}
return list;
}
@Override
public AjaxResult getRoleList() {
List<Map<String,Object>> list = new ArrayList<>();
try {
list = dao.getRoleList();
} catch (Exception e) {
log.error(e.toString(),e);
}
return AjaxResult.success(list);
}
/**
* 处理项目经理安全员质检员等数据
* @param list
* @return void
* @author cwchen
* @date 2025/2/11 10:18
*/
public void handleData(List<EightMembersVacancyVo.VacancyDetail> list){
if(CollectionUtils.isNotEmpty(list)){
for (EightMembersVacancyVo.VacancyDetail vacancyDetail : list) {
StringBuilder sb = new StringBuilder();
StringBuilder sb2 = new StringBuilder();
StringBuilder sb3 = new StringBuilder();
StringBuilder sb4 = new StringBuilder();
StringBuilder sb5 = new StringBuilder();
StringBuilder sb6 = new StringBuilder();
StringBuilder sb7 = new StringBuilder();
StringBuilder sb8 = new StringBuilder();
StringBuilder sb9 = new StringBuilder();
if(StringUtils.isNotBlank(vacancyDetail.getDepartmentRoleId())){
String[] departmentRoleIdArr = vacancyDetail.getDepartmentRoleId().split(",");
String[] userNameArr = vacancyDetail.getUserName().split(",");
for (int i = 0; i < departmentRoleIdArr.length; i++) {
String departmentRoleId = departmentRoleIdArr[i];
if(Objects.equals(departmentRoleId,"1")){
sb.append(userNameArr[i]).append("");
}else if(Objects.equals(departmentRoleId,"2")){
sb2.append(userNameArr[i]).append("");
}else if(Objects.equals(departmentRoleId,"3")){
sb3.append(userNameArr[i]).append("");
}else if(Objects.equals(departmentRoleId,"4")){
sb4.append(userNameArr[i]).append("");
}else if(Objects.equals(departmentRoleId,"5")){
sb5.append(userNameArr[i]).append("");
}else if(Objects.equals(departmentRoleId,"6")){
sb6.append(userNameArr[i]).append("");
}else if(Objects.equals(departmentRoleId,"7")){
sb7.append(userNameArr[i]).append("");
}else if(Objects.equals(departmentRoleId,"8")){
sb8.append(userNameArr[i]).append("");
}else if(Objects.equals(departmentRoleId,"9")){
sb9.append(userNameArr[i]).append("");
}
}
}
vacancyDetail.setProjectManager(StringUtils.stripEnd(sb.toString(),""));
vacancyDetail.setSafetyOfficer(StringUtils.stripEnd(sb2.toString(),""));
vacancyDetail.setQualityInspector(StringUtils.stripEnd(sb3.toString(),""));
vacancyDetail.setProjectChiefEngineer(StringUtils.stripEnd(sb4.toString(),""));
vacancyDetail.setMachinist(StringUtils.stripEnd(sb5.toString(),""));
vacancyDetail.setDocument(StringUtils.stripEnd(sb6.toString(),""));
vacancyDetail.setConstructionWorker(StringUtils.stripEnd(sb7.toString(),""));
vacancyDetail.setMaterialMan(StringUtils.stripEnd(sb8.toString(),""));
vacancyDetail.setOther(StringUtils.stripEnd(sb9.toString(),""));
}
}
}
}

View File

@ -25,7 +25,9 @@ import com.bonus.system.basic.domain.SysOrg;
import com.bonus.system.basic.domain.SysOrgExport;
import com.bonus.system.basic.service.SysOrgService;
import com.bonus.system.dept.dao.ProDeptRoleDao;
import com.bonus.system.dept.entity.EightMembersVacancyVo;
import com.bonus.system.dept.entity.SubOrgBean;
import com.bonus.system.dept.service.EightMembersVacancyService;
import com.bonus.system.dept.service.SubOrgService;
import com.bonus.system.evection.entity.EvectionBean;
import com.bonus.system.evection.service.EvectionService;
@ -140,6 +142,9 @@ public class ExportFileController {
@Resource
private SysOrgDao sysOrgDao;
@Resource(name = "EightMembersVacancyService")
private EightMembersVacancyService eightMembersVacancyService;
/**
* 分公司项目部导出
@ -1266,5 +1271,26 @@ public class ExportFileController {
}
}
/**
* 八大员缺员兼职查询-导出
* @param response
* @param vo
* @return void
* @author cwchen
* @date 2025/2/11 9:16
*/
@GetMapping("/exportEightMembersVacancy")
public void exportEightMembersVacancy(HttpServletResponse response, EightMembersVacancyVo vo) {
try {
List<EightMembersVacancyVo> list = eightMembersVacancyService.getList(vo);
for (int i = 0; i < list.size(); i++) {
list.get(i).setSerialNumber(i + 1);
}
extracted(list, WechatLeaveReportingBean.class, "八大员缺员兼职查询", "八大员缺员兼职查询", "八大员缺员兼职查询", response);
} catch (IOException e) {
log.error(e.toString(),e);
}
}
}

View File

@ -0,0 +1,79 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.bonus.system.dept.dao.EightMembersVacancyDao">
<!--八大员缺员兼职查询-列表查询-->
<select id="getList" resultType="com.bonus.system.dept.entity.EightMembersVacancyVo">
SELECT sd.id,
sd.value AS roleName
FROM sys_dict sd
WHERE sd.type = 'deptRole' AND sd.is_active = '1'
<if test="id!=null">
AND sd.id = #{id}
</if>
ORDER BY update_time
</select>
<!--1.查询缺员项目部数量、2.查询兼职项目部数量-->
<select id="getNumByType" resultType="java.lang.Long">
<if test="type == 1">
SELECT so.id
FROM sys_organization so
LEFT JOIN sys_department_role sdr ON so.id = sdr.org_id AND sdr.department_role_id = #{id} AND sdr.reviewer_status = '1'
LEFT JOIN sys_department_user sdu ON sdr.id = sdu.department_id AND sdu.is_active = '1'
WHERE so.is_department = '1' AND so.reviewer_status = '1' AND so.is_active = '1'
GROUP BY so.id
HAVING(GROUP_CONCAT(ANY_VALUE(sdu.user_id))) IS NULL
</if>
<if test="type == 2">
SELECT so.id
FROM sys_organization so
LEFT JOIN sys_department_role sdr ON so.id = sdr.org_id AND sdr.department_role_id = #{id} AND sdr.reviewer_status = '1'
LEFT JOIN sys_department_user sdu ON sdr.id = sdu.department_id AND sdu.is_active = '1'
LEFT JOIN (
SELECT sdr.org_id,
sdu.user_id,
COUNT(*) AS num
FROM sys_department_user sdu
LEFT JOIN sys_department_role sdr ON sdu.department_id = sdr.id AND sdr.reviewer_status = '1' AND sdr.department_role_id != #{id}
WHERE sdu.is_active = '1'
GROUP BY sdr.org_id,sdu.user_id
) a ON so.id = a.org_id AND sdu.user_id = a.user_id
WHERE so.is_department = '1' AND so.reviewer_status = '1' AND so.is_active = '1'
AND sdu.user_id IS NOT NULL AND a.num IS NOT NULL
</if>
</select>
<!--八大员缺员兼职查询-缺员项目部详情-->
<select id="getStaffingList"
resultType="com.bonus.system.dept.entity.EightMembersVacancyVo$VacancyDetail">
SELECT so.id,
so.org_name AS orgName,
GROUP_CONCAT(sdr.department_role_id) AS departmentRoleId,
GROUP_CONCAT(su.user_name) AS userName
FROM sys_organization so
LEFT JOIN sys_department_role sdr ON so.id = sdr.org_id AND sdr.reviewer_status = '1'
LEFT JOIN sys_dict sd ON sd.id = sdr.department_role_id AND sd.type = 'deptRole' AND sd.is_active = '1'
LEFT JOIN sys_department_user sdu ON sdr.id = sdu.department_id AND sdu.is_active = '1'
LEFT JOIN sys_user su ON su.user_id = sdu.user_id AND su.is_active = '1'
<where>
so.is_department = '1' AND so.reviewer_status = '1' AND so.is_active = '1'
<if test="list!=null">
AND so.id IN
<foreach collection="list" open="(" close=")" separator="," item="item">
#{item}
</foreach>
</if>
</where>
GROUP BY so.id
</select>
<!--角色下拉选-->
<select id="getRoleList" resultType="java.util.Map">
SELECT sd.id,
sd.value AS `value`
FROM sys_dict sd
WHERE sd.is_active = '1'
ORDER BY update_time
</select>
</mapper>