rpa机器人

This commit is contained in:
lSun 2025-10-23 17:57:46 +08:00
parent 5b4fb4d5b3
commit 79a8afe6c0
6 changed files with 1020 additions and 0 deletions

View File

@ -0,0 +1,158 @@
package com.bonus.bmw.controller;
import com.bonus.bmw.domain.vo.CertificateStatisticsBean;
import com.bonus.bmw.service.CertificateStatisticsService;
import com.bonus.common.core.utils.poi.ExcelUtil;
import com.bonus.common.core.web.controller.BaseController;
import com.bonus.common.core.web.page.TableDataInfo;
import com.bonus.common.log.annotation.SysLog;
import com.bonus.common.log.enums.OperaType;
import com.bonus.system.api.domain.SysUser;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* packageName com.bonus.gzrn.rnbmw.certificate.controller
*
* @author lsun
* @version 1.0.0
* @className CertificateStatisticsController (此处以class为例)
* @date 2024/11/5
* @description 持证统计
*/
@Controller
@Api(tags = "持证统计")
@RestController
@RequestMapping(value = "/certificateStatistics")
public class CertificateStatisticsController extends BaseController {
public static Logger logger = LoggerFactory.getLogger(CertificateStatisticsController.class);
@Resource(name = "CertificateStatisticsService")
private CertificateStatisticsService service;
@GetMapping("getCertificateTypeList")
@SysLog(title = "rap机器人", businessType = OperaType.QUERY,logType = 0,module = "rap机器人->持证统计",details = "持证统计列表")
public TableDataInfo listProjects(CertificateStatisticsBean o) {
try {
startPage();
List<CertificateStatisticsBean> list = service.getList(o);
return getDataTable(list);
} catch (Exception e) {
logger.error(e.toString(), e);
}
return getDataTableError(new ArrayList<>());
}
/**
* 查询持证类型树
* @param o
* @return
*/
@GetMapping("getTreeDataType")
@SysLog(title = "rap机器人", businessType = OperaType.QUERY,logType = 0,module = "rap机器人->持证统计",details = "查询持证类型树")
public List<CertificateStatisticsBean> getTreeDataType(@RequestBody(required = false) CertificateStatisticsBean o) {
return service.getTreeDataType(o);
}
/**
* 查询公司工程树
* @param o
* @return
*/
@GetMapping("getTreeDataPro")
@SysLog(title = "rap机器人", businessType = OperaType.QUERY,logType = 0,module = "rap机器人->持证统计",details = "查询公司工程树")
public List<CertificateStatisticsBean> getTreeDataPro(@RequestBody(required = false) CertificateStatisticsBean o) {
return service.getTreeDataPro(o);
}
/**
* 查询工种下拉选
* @param o
* @return
*/
// @PostMapping("getPost")
// @ApiOperation(value = "查询工种下拉选")
// public List<CertificateStatisticsBean> getPost(@RequestBody(required = false) CertificateStatisticsBean o) {
// return service.getPost(o);
// }
/**
* 证书统计导出
* @param response
* @param o
*/
@PostMapping("/exportOwnData")
@SysLog(title = "rap机器人", businessType = OperaType.EXPORT,logType = 0,module = "rap机器人->持证统计",details = "持证统计-导出")
public void exportOwnData(HttpServletResponse response, CertificateStatisticsBean o){
List<CertificateStatisticsBean> list = service.getCertificateTypeList(o);
ExcelUtil<CertificateStatisticsBean> util = new ExcelUtil<>(CertificateStatisticsBean.class);
util.exportExcel(response,list,"持证统计-导出详情", "持证统计-导出详情");
}
/**
* 获取预警列表
* @return
*/
@GetMapping("getCertificateWarningList")
@SysLog(title = "rap机器人", businessType = OperaType.QUERY,logType = 0,module = "rap机器人->持证统计预警",details = "持证统计预警")
public TableDataInfo getCertificateWarningList(CertificateStatisticsBean o) {
try {
startPage();
List<CertificateStatisticsBean> list = service.getListWarning(o);
return getDataTable(list);
} catch (Exception e) {
logger.error(e.toString(), e);
}
return getDataTableError(new ArrayList<>());
}
/**
* 获取证件类别统计
* @return
*/
@GetMapping("getCategoryChart")
@SysLog(title = "rap机器人", businessType = OperaType.QUERY,logType = 0,module = "rap机器人->获取证件类别统计",details = "获取证件类别统计")
public List<CertificateStatisticsBean> getCategoryChart() {
List<CertificateStatisticsBean> list = null;
try {
list = service.getCategoryChart();
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
/**
* 获取证件类别统计
* @return
*/
@GetMapping("getStatusChart")
@SysLog(title = "rap机器人", businessType = OperaType.QUERY,logType = 0,module = "rap机器人->获取证件状态统计",details = "获取证件状态统计")
public List<CertificateStatisticsBean> getStatusChart() {
List<CertificateStatisticsBean> list = null;
try {
list = service.getStatusChart();
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
}

View File

@ -0,0 +1,176 @@
package com.bonus.bmw.domain.vo;
import com.bonus.common.core.annotation.Excel;
import com.bonus.common.core.web.domain.BaseEntity;
import lombok.Data;
import java.util.List;
/**
* packageName com.bonus.gzrn.rnbmw.certificate.entity
*
* @author lsun
* @version 1.0.0
* @className certificateStatisticsBean
* @date 2024/11/5
* @description 持证统计
*/
@Data
public class CertificateStatisticsBean extends BaseEntity {
/**
*
*/
private String title;
private String id;
private String name;
private String pid;
private Boolean spread;
private String neatenWorkOperation;
private List<CertificateStatisticsBean> children;
/**
* 基础数据
*/
/**
*姓名
*/
@Excel(name = "姓名")
private String username;
/**
* 身份证
*/
@Excel(name = "身份证号")
private String idNumber;
/**
* 工种id
*/
private String postId;
/**
* 工种
*/
@Excel(name = "工种")
private String postName;
/**
* 作业类别
*/
@Excel(name = "进持证类别")
private String workType;
/**
* 操作项目
*/
@Excel(name = "操作项目")
private String workOperation;
/**
* 应复审日期
*/
@Excel(name = "应复审日期")
private String reviewDate;
/**
* 应复审日期
*/
private String realityReviewDate;
/**
* 证件有效期
*/
@Excel(name = "证件状态")
private String certificateStatus;
/**
* 证件有效期
*/
@Excel(name = "证件有效期")
private String validityData;
/**
* 有效开始时间
*/
private String validStartDate;
/**
* 有效结束时间
*/
private String validEndDate;
/**
* 签发机关
*/
@Excel(name = "签发机关")
private String issuingAuthority;
/**
* 证件照片
*/
private String certificatePhoto;
/**
* 证件状态
*/
private String certificateState;
/**
* 树节点id
*/
private String treeNodeId;
/**
* 工程id
*/
private String proId;
/**
* 分公司id
*/
private String subComId;
/**
* 树节点类型
*/
private String nodeType;
/**
* 总数
*/
private Integer total;
private String keyword;
/**
* 在职状态
*/
private String onState;
/**
* 电话
*/
@Excel(name = "电话")
private String phone;
/**
*
* 入场时间
*/
@Excel(name = "入场时间")
private String einTime;
/**
* 出场时间
*/
@Excel(name = "出场时间")
private String exitTime;
/**
* 风险预警
*/
private String riskWarning;
private String startTime;
private String endTime;
/**
* 有效
*/
private String effective;
/**
* 过期
*/
private String beOverdue;
/**
* 即将过期
*/
private String expiringSoon;
}

View File

@ -0,0 +1,54 @@
package com.bonus.bmw.mapper;
import com.bonus.bmw.domain.vo.CertificateStatisticsBean;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Map;
/**
* packageName com.bonus.gzrn.rnbmw.certificate.dao
*
* @author lsun
* @version 1.0.0
* @className certificateStatisticsDao (此处以class为例)
* @date 2024/11/5
* @description 持证统计
*/
@Repository(value = "CertificateStatisticsMapper")
@Mapper
public interface CertificateStatisticsMapper {
List<CertificateStatisticsBean> getList(CertificateStatisticsBean o);
List<CertificateStatisticsBean> getTreeDataTypeOne(CertificateStatisticsBean o);
List<CertificateStatisticsBean> getTreeDataTypeTwo(CertificateStatisticsBean o);
List<CertificateStatisticsBean> getTreeDataProOne(CertificateStatisticsBean o);
List<CertificateStatisticsBean> getTreeDataProTwo(CertificateStatisticsBean o);
List<CertificateStatisticsBean> getPost(CertificateStatisticsBean o);
List<CertificateStatisticsBean> getListWarning(CertificateStatisticsBean o);
List<CertificateStatisticsBean> getCategoryChart();
List<CertificateStatisticsBean> getStatusChart();
/**
* 查询预警数据
* @return
*/
List<CertificateStatisticsBean> getWarning();
/**
* 查询复审数据
* @return
*/
List<CertificateStatisticsBean> getReexamine();
}

View File

@ -0,0 +1,67 @@
package com.bonus.bmw.service;
import com.bonus.bmw.domain.vo.CertificateStatisticsBean;
import java.util.List;
import java.util.Map;
/**
* packageName com.bonus.gzrn.rnbmw.certificate.service
*
* @author lsun
* @version 1.0.0
* @className CertificateStatisticsService (此处以class为例)
* @date 2024/11/5
* @description 持证统计
*/
public interface CertificateStatisticsService {
/**
* 获取列表
* @return
*/
List<CertificateStatisticsBean> getList(CertificateStatisticsBean o);
/**
* 查询持证类型树
* @param o
* @return
*/
List<CertificateStatisticsBean> getTreeDataType(CertificateStatisticsBean o);
/**
*查询公司工程树
* @param o
* @return
*/
List<CertificateStatisticsBean> getTreeDataPro(CertificateStatisticsBean o);
/**
* 查询工种下拉选
* @param o
* @return
*/
List<CertificateStatisticsBean> getPost(CertificateStatisticsBean o);
/**
* 获取持证类型列表
* @return
*/
List<CertificateStatisticsBean> getCertificateTypeList(CertificateStatisticsBean o);
/**
* 获取持证预警列表
* @return
*/
List<CertificateStatisticsBean> getListWarning(CertificateStatisticsBean o);
/**
* 获取证件类别统计
* @return
*/
List<CertificateStatisticsBean> getCategoryChart();
List<CertificateStatisticsBean> getStatusChart();
}

View File

@ -0,0 +1,145 @@
package com.bonus.bmw.service;
import com.bonus.bmw.mapper.CertificateStatisticsMapper;
import com.bonus.bmw.domain.vo.CertificateStatisticsBean;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* packageName com.bonus.gzrn.rnbmw.certificate.service
*
* @author lsun
* @version 1.0.0
* @className CertificateStatisticsService (此处以class为例)
* @date 2024/11/5
* @description 持证统计
*/
@Service(value = "CertificateStatisticsService")
public class CertificateStatisticsServiceImpl implements CertificateStatisticsService {
@Resource(name = "CertificateStatisticsMapper")
private CertificateStatisticsMapper dao;
@Override
public List<CertificateStatisticsBean> getList(CertificateStatisticsBean o) {
return dao.getList(o);
}
/**
*查询持证类型树
* @param o
* @return
*/
@Override
public List<CertificateStatisticsBean> getTreeDataType(CertificateStatisticsBean o) {
List<CertificateStatisticsBean> topList = new ArrayList<>();
List<CertificateStatisticsBean> parentList = new ArrayList<>();
List<CertificateStatisticsBean> childList = new ArrayList<>();
try {
parentList = dao.getTreeDataTypeOne(o);
childList = dao.getTreeDataTypeTwo(o);
if(parentList.size() > 0){
Integer total = 0;
for (int i = 0; i < parentList.size(); i++) {
List<CertificateStatisticsBean> childListNew = new ArrayList<>();
String parentWorkType = parentList.get(i).getName();
for (int j = 0; j < childList.size(); j++) {
String childWorkType = childList.get(j).getName();
if(parentWorkType.equals(childWorkType)){
CertificateStatisticsBean vo = new CertificateStatisticsBean();
vo.setId(childList.get(j).getId());
vo.setName(childList.get(j).getNeatenWorkOperation());
vo.setTitle(childList.get(j).getTitle());
childListNew.add(vo);
}
}
parentList.get(i).setChildren(childListNew);
total += parentList.get(i).getTotal();
}
CertificateStatisticsBean vo = new CertificateStatisticsBean();
vo.setTitle("全部(" + total + "");
vo.setChildren(parentList);
vo.setSpread(true);
topList.add(vo);
}
}catch (Exception e){
e.printStackTrace();
}
return topList;
}
/**
*查询公司工程树
* @param o
* @return
*/
@Override
public List<CertificateStatisticsBean> getTreeDataPro(CertificateStatisticsBean o) {
List<CertificateStatisticsBean> topList = new ArrayList<>();
List<CertificateStatisticsBean> parentList = new ArrayList<>();
List<CertificateStatisticsBean> childList = new ArrayList<>();
try {
parentList = dao.getTreeDataProOne(o);
childList = dao.getTreeDataProTwo(o);
if(parentList.size() > 0){
Integer total = 0;
for (int i = 0; i < parentList.size(); i++) {
List<CertificateStatisticsBean> childListNew = new ArrayList<>();
String parentId = parentList.get(i).getId();
for (int j = 0; j < childList.size(); j++) {
String childPid = childList.get(j).getPid();
if(parentId.equals(childPid)){
CertificateStatisticsBean vo = new CertificateStatisticsBean();
vo.setId(childList.get(j).getId());
vo.setName(childList.get(j).getName());
vo.setTitle(childList.get(j).getTitle());
vo.setNodeType("3");
childListNew.add(vo);
}
}
parentList.get(i).setChildren(childListNew);
total += parentList.get(i).getTotal();
}
CertificateStatisticsBean vo = new CertificateStatisticsBean();
vo.setTitle("全部(" + total + "");
vo.setChildren(parentList);
vo.setSpread(true);
topList.add(vo);
}
}catch (Exception e){
e.printStackTrace();
}
return topList;
}
@Override
public List<CertificateStatisticsBean> getPost(CertificateStatisticsBean o) {
return dao.getPost(o);
}
@Override
public List<CertificateStatisticsBean> getCertificateTypeList(CertificateStatisticsBean o) {
return dao.getList(o);
}
@Override
public List<CertificateStatisticsBean> getListWarning(CertificateStatisticsBean o) {
return dao.getListWarning(o);
}
@Override
public List<CertificateStatisticsBean> getCategoryChart() {
return dao.getCategoryChart();
}
@Override
public List<CertificateStatisticsBean> getStatusChart() {
return dao.getStatusChart();
}
}

View File

@ -0,0 +1,420 @@
<?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.bmw.mapper.CertificateStatisticsMapper">
<select id="getList" resultType="com.bonus.bmw.domain.vo.CertificateStatisticsBean">
SELECT
bw.name AS username,
bcr.id_number AS idNumber,
bweh.post_name AS postName,
bct.work_type AS workType,
bct.work_operation AS workOperation,
bcr.reality_review_date AS reviewDate,
bcr.valid_start_date AS validStartDate,
bcr.valid_end_date AS validEndDate,
bcr.issuing_authority AS issuingAuthority,
bcr.certificate_photo AS certificatePhoto,
CONCAT( bcr.valid_start_date, '~', bcr.valid_end_date ) AS validityData,
if((bcr.valid_start_date &lt; CURRENT_DATE AND bcr.valid_end_date > CURRENT_DATE), '有效', '失效') AS
certificateStatus,
bw.PHONE,
bweh.EIN_TIME as einTime,
bweh.EXIT_TIME as exitTime
FROM
bm_certificate_type_auto bct
LEFT JOIN (
SELECT * FROM (
SELECT * FROM bm_certificate_read ORDER BY valid_end_date DESC limit 999999999
) a GROUP BY a.id_number, a.certificate_id
) bcr ON bcr.certificate_id = bct.id
LEFT JOIN pm_worker bw ON bw.id_number = bcr.id_number AND bw.is_active = '1'
LEFT JOIN bm_worker_ein_pro_record bweh ON bweh.worker_id = bw.id AND bweh.is_active = '1'
LEFT JOIN pm_project bp ON bp.id = bweh.pro_id
left JOIN pm_main_project po ON po.id = bp.main_pro_id
WHERE bct.is_hidden = '0'
AND bct.is_active = '1'
AND bcr.ID_NUMBER is not null
AND bweh.worker_id is not null
<if test="onState == 1 or onState == '1'">
AND bweh.EXIT_TIME is null
</if>
<if test="onState == 2 or onState == '2'">
AND bweh.EXIT_TIME is not null
</if>
<if test="neatenWorkOperation != '' and neatenWorkOperation != null">
AND bct.neaten_work_operation = #{neatenWorkOperation}
</if>
<if test="name != '' and name != null and name != 'null' ">
AND (bct.work_type = #{name} OR bct.neaten_work_operation = #{name})
</if>
<if test="subComId != '' and subComId != null">
AND po.`id` = #{subComId}
</if>
<if test="proId != '' and proId != null">
AND bp.`id` = #{proId}
</if>
<if test="keyword != '' and keyword != null">
AND (bcr.id_number like concat('%',#{keyword},'%') OR bw.`name` like
concat('%',#{keyword},'%'))
</if>
<if test="postId != '' and postId != null">
AND bweh.post_id like concat('%',#{postId},'%')
</if>
<if test="certificateState == 1 or certificateState == '1'">
AND (bcr.valid_start_date &lt; CURRENT_DATE AND bcr.valid_end_date > CURRENT_DATE)
</if>
<if test="certificateState == 2 or certificateState == '2'">
AND (bcr.valid_start_date > CURRENT_DATE OR bcr.valid_end_date &lt; CURRENT_DATE)
</if>
<if test="certificateState == 3 or certificateState == '3'">
AND (DATEDIFF(bcr.reality_review_date, CURRENT_DATE) > 0 AND DATEDIFF(bcr.reality_review_date, CURRENT_DATE)
&lt;= 90)
</if>
<if test="certificateState == 4 or certificateState == '4'">
AND (DATEDIFF(bcr.reality_review_date, CURRENT_DATE) > 0 AND DATEDIFF(bcr.reality_review_date, CURRENT_DATE)
&lt;= 30)
</if>
GROUP BY bcr.id_number,bct.neaten_work_operation
</select>
<select id="getTreeDataTypeOne"
resultType="com.bonus.bmw.domain.vo.CertificateStatisticsBean">
SELECT
id,
`name`,
sum( title ) AS total,
CONCAT( `name`, '', sum( title ), '' ) AS title
FROM
(
SELECT
bct.id AS id,
bct.work_type AS NAME,
COUNT( DISTINCT bw.id_number ) AS title
FROM
bm_certificate_type_auto bct
LEFT JOIN (
SELECT * FROM (
SELECT * FROM bm_certificate_read ORDER BY valid_end_date DESC limit 999999999
) a GROUP BY a.id_number, a.certificate_id
) bcr ON bcr.certificate_id = bct.id
LEFT JOIN pm_worker bw ON bw.id_number = bcr.id_number AND bw.is_active = '1'
LEFT JOIN bm_worker_ein_pro_record bweh ON bweh.worker_id = bw.id AND bweh.is_active = '1'
WHERE bct.is_hidden = '0' AND bct.is_active = '1'
<if test="name != '' and name != null">
AND (bct.work_type like concat('%',#{name},'%') OR bct.neaten_work_operation like concat('%',#{name},'%'))
</if>
GROUP BY bct.work_type,
bct.neaten_work_operation
) a
GROUP BY name
</select>
<select id="getTreeDataTypeTwo"
resultType="com.bonus.bmw.domain.vo.CertificateStatisticsBean">
SELECT
bct.id AS id,
bct.work_type AS name,
bct.neaten_work_operation AS neatenWorkOperation,
CONCAT(bct.neaten_work_operation,'',COUNT(DISTINCT bw.id_number), '') AS title
FROM
bm_certificate_type_auto bct
LEFT JOIN (
SELECT * FROM (
SELECT * FROM bm_certificate_read ORDER BY valid_end_date DESC limit 999999999
) a GROUP BY a.id_number, a.certificate_id
) bcr ON bcr.certificate_id = bct.id
LEFT JOIN pm_worker bw ON bw.id_number = bcr.id_number AND bw.is_active = '1'
LEFT JOIN bm_worker_ein_pro_record bweh ON bweh.worker_id = bw.id AND bweh.is_active = '1'
WHERE bct.is_hidden = '0' AND bct.is_active = '1'
<if test="name != '' and name != null">
AND (bct.work_type like concat('%',#{name},'%') OR bct.neaten_work_operation like concat('%',#{name},'%'))
</if>
GROUP BY bct.`neaten_work_operation`
</select>
<select id="getTreeDataProOne"
resultType="com.bonus.bmw.domain.vo.CertificateStatisticsBean">
SELECT
po.id AS id,
po.main_pro_name AS NAME,
COUNT( bweh.id_number ) AS total,
CONCAT( po.main_pro_name, '', COUNT( bweh.id_number ), '' ) AS title,
'2' AS nodeType
FROM
pm_main_project po
LEFT JOIN pm_project bp ON bp.main_pro_id = po.id
AND bp.is_active = '1'
LEFT JOIN (
SELECT
bweh.pro_id,
bw.id_number,
bct.work_type,
bct.`neaten_work_operation`,
bct.is_hidden,
bct.is_active
FROM
bm_worker_ein_pro_record bweh
LEFT JOIN pm_worker bw ON bw.id = bweh.worker_id AND bw.is_active = '1'
INNER JOIN ( SELECT * FROM ( SELECT * FROM bm_certificate_read ORDER BY valid_end_date DESC LIMIT 999999999 ) a
GROUP BY a.id_number, a.certificate_id ) bcr ON bw.id_number = bcr.id_number
INNER JOIN bm_certificate_type_auto bct ON bcr.certificate_id = bct.id
AND bct.is_hidden = '0'
AND bct.is_active = '1'
WHERE
bweh.is_active = '1'
GROUP BY
bcr.id_number,
bct.`neaten_work_operation`
) bweh ON bp.id = bweh.pro_id
WHERE
po.is_active = '1'
<if test="name != '' and name != null">
AND (po.`main_pro_name` like concat('%',#{name},'%') OR bp.`pro_name` like concat('%',#{name},'%'))
</if>
GROUP BY po.id
</select>
<select id="getTreeDataProTwo"
resultType="com.bonus.bmw.domain.vo.CertificateStatisticsBean">
SELECT
bp.id AS id,
bp.pro_name AS name,
po.id AS pid,
CONCAT( bp.pro_name, '', COUNT( bweh.id_number ), '' ) AS title,
'3' AS nodeType
FROM
pm_main_project po
LEFT JOIN pm_project bp ON bp.main_pro_id = po.id
AND bp.is_active = '1'
LEFT JOIN (
SELECT
bweh.pro_id,
bw.id_number,
bct.work_type,
bct.`neaten_work_operation`
FROM
bm_worker_ein_pro_record bweh
LEFT JOIN pm_worker bw ON bw.id = bweh.worker_id AND bw.is_active = '1'
INNER JOIN (
SELECT * FROM (
SELECT * FROM bm_certificate_read ORDER BY valid_end_date DESC limit 999999999
) a GROUP BY a.id_number, a.certificate_id
) bcr ON bw.id_number = bcr.id_number
INNER JOIN bm_certificate_type_auto bct ON bcr.certificate_id = bct.id
AND bct.is_hidden = '0'
AND bct.is_active = '1'
WHERE
bweh.is_active = '1'
GROUP BY bcr.id_number,bct.`neaten_work_operation`
) bweh ON bp.id = bweh.pro_id
WHERE po.is_active = '1'
AND bp.id IS NOT NULL
AND bp.is_active = '1'
<if test="name != '' and name != null">
AND (po.`main_pro_name` like concat('%',#{name},'%') OR bp.`pro_name` like concat('%',#{name},'%'))
</if>
GROUP BY
bp.id
</select>
<select id="getPost" resultType="com.bonus.bmw.domain.vo.CertificateStatisticsBean">
SELECT id AS id,
name
FROM sys_dic_detail
WHERE dic_type = '3'
AND is_active = '1'
</select>
<select id="getListWarning" resultType="com.bonus.bmw.domain.vo.CertificateStatisticsBean">
SELECT
*
FROM(
SELECT
bw.name AS username,
bcr.id_number AS idNumber,
bweh.post_name AS postName,
bct.work_type AS workType,
bct.work_operation AS workOperation,
bcr.reality_review_date AS reviewDate,
bcr.valid_start_date AS validStartDate,
bcr.valid_end_date AS validEndDate,
bcr.issuing_authority AS issuingAuthority,
bcr.certificate_photo AS certificatePhoto,
CONCAT( bcr.valid_start_date, '~', bcr.valid_end_date ) AS validityData,
if((bcr.valid_start_date &lt; CURRENT_DATE AND bcr.valid_end_date > CURRENT_DATE), '有效', '失效') AS
certificateStatus,
bw.PHONE,
bweh.EIN_TIME as einTime,
bweh.EXIT_TIME as exitTime,
CASE
WHEN STR_TO_DATE(bcr.valid_end_date, '%Y-%m-%d') &lt; CURDATE() THEN '已过期'
WHEN STR_TO_DATE(bcr.valid_end_date, '%Y-%m-%d') BETWEEN DATE_FORMAT(CURDATE(), '%Y-%m-01') AND
LAST_DAY(CURDATE()) THEN '当月过期'
WHEN STR_TO_DATE(bcr.valid_end_date, '%Y-%m-%d') > CURDATE()
AND STR_TO_DATE(bcr.valid_end_date, '%Y-%m-%d') &lt;= DATE_ADD(CURDATE(), INTERVAL 3 MONTH) THEN '即将过期'
ELSE '正常'
END AS riskWarning
FROM
bm_certificate_type_auto bct
LEFT JOIN (
SELECT * FROM (
SELECT * FROM bm_certificate_read ORDER BY valid_end_date DESC limit 999999999
) a GROUP BY a.id_number, a.certificate_id
) bcr ON bcr.certificate_id = bct.id
LEFT JOIN pm_worker bw ON bw.id_number = bcr.id_number AND bw.is_active = '1'
LEFT JOIN bm_worker_ein_pro_record bweh ON bweh.worker_id = bw.id AND bweh.is_active = '1'
LEFT JOIN pm_project bp ON bp.id = bweh.pro_id
left JOIN pm_main_project po ON po.id = bp.main_pro_id
WHERE bct.is_hidden = '0'
AND bct.is_active = '1'
AND SUBSTRING(bcr.valid_end_date, 1, 7) BETWEEN #{startTime} AND #{endTime}
<if test="onState == 1 or onState == '1'">
AND bweh.EXIT_TIME is null
</if>
<if test="onState == 2 or onState == '2'">
AND bweh.EXIT_TIME is not null
</if>
GROUP BY bcr.id_number,bct.neaten_work_operation
) aa
<where>
<if test="riskWarning != '' and riskWarning != null">
AND riskWarning = #{riskWarning}
</if>
</where>
</select>
<select id="getCategoryChart" resultType="com.bonus.bmw.domain.vo.CertificateStatisticsBean">
SELECT id,
`name`,
sum(title) AS total,
CONCAT(`name`, '', sum(title), '') AS title
FROM (SELECT bct.id AS id,
bct.work_type AS NAME,
COUNT(DISTINCT bw.id_number) AS title
FROM bm_certificate_type_auto bct
LEFT JOIN (SELECT *
FROM (SELECT *
FROM bm_certificate_read
ORDER BY valid_end_date DESC limit 999999999) a
GROUP BY a.id_number, a.certificate_id) bcr ON bcr.certificate_id = bct.id
LEFT JOIN pm_worker bw ON bw.id_number = bcr.id_number AND bw.is_active = '1'
LEFT JOIN bm_worker_ein_pro_record bweh
ON bweh.worker_id = bw.id AND bweh.is_active = '1'
WHERE bct.is_hidden = '0'
AND bct.is_active = '1'
GROUP BY bct.work_type,
bct.neaten_work_operation) a
GROUP BY name
ORDER BY total DESC LIMIT 0 , 3
</select>
<select id="getStatusChart" resultType="com.bonus.bmw.domain.vo.CertificateStatisticsBean">
SELECT (SELECT COALESCE(SUM(total), 0)
FROM (SELECT id,
`name`,
SUM(title) AS total,
CONCAT(`name`, '', SUM(title), '') AS title
FROM (SELECT bct.id AS id,
bct.work_type AS NAME,
COUNT(DISTINCT bw.id_number) AS title
FROM bm_certificate_type_auto bct
LEFT JOIN (SELECT *
FROM (SELECT *
FROM bm_certificate_read bcr
WHERE STR_TO_DATE(bcr.valid_end_date, '%Y-%m-%d') > CURDATE()
AND STR_TO_DATE(bcr.valid_end_date, '%Y-%m-%d')&lt;=
DATE_ADD(CURDATE(), INTERVAL 3 MONTH)
ORDER BY valid_end_date DESC LIMIT 999999999) a
GROUP BY a.id_number, a.certificate_id) bcr
ON bcr.certificate_id = bct.id
LEFT JOIN pm_worker bw ON bw.id_number = bcr.id_number AND bw.is_active = '1'
LEFT JOIN bm_worker_ein_pro_record bweh
ON bweh.worker_id = bw.id AND bweh.is_active = '1'
WHERE bct.is_hidden = '0'
AND bct.is_active = '1'
GROUP BY bct.work_type, bct.neaten_work_operation) a
GROUP BY `name`) aa) AS effective,
(SELECT COALESCE(SUM(total), 0)
FROM (SELECT id,
`name`,
SUM(title) AS total,
CONCAT(`name`, '', SUM(title), '') AS title
FROM (SELECT bct.id AS id,
bct.work_type AS NAME,
COUNT(DISTINCT bw.id_number) AS title
FROM bm_certificate_type_auto bct
LEFT JOIN (SELECT *
FROM (SELECT *
FROM bm_certificate_read bcr
WHERE STR_TO_DATE(bcr.valid_end_date, '%Y-%m-%d') &lt; CURDATE()
ORDER BY valid_end_date DESC LIMIT 999999999) a
GROUP BY a.id_number, a.certificate_id) bcr
ON bcr.certificate_id = bct.id
LEFT JOIN pm_worker bw ON bw.id_number = bcr.id_number AND bw.is_active = '1'
LEFT JOIN bm_worker_ein_pro_record bweh
ON bweh.worker_id = bw.id AND bweh.is_active = '1'
WHERE bct.is_hidden = '0'
AND bct.is_active = '1'
GROUP BY bct.work_type, bct.neaten_work_operation) a
GROUP BY `name`) bb) AS beOverdue,
(SELECT COALESCE(SUM(total), 0)
FROM (SELECT id,
`name`,
SUM(title) AS total,
CONCAT(`name`, '', SUM(title), '') AS title
FROM (SELECT bct.id AS id,
bct.work_type AS NAME,
COUNT(DISTINCT bw.id_number) AS title
FROM bm_certificate_type_auto bct
LEFT JOIN (SELECT *
FROM (SELECT *
FROM bm_certificate_read bcr
WHERE STR_TO_DATE(bcr.valid_end_date, '%Y-%m-%d') > CURDATE()
ORDER BY valid_end_date DESC LIMIT 999999999) a
GROUP BY a.id_number, a.certificate_id) bcr
ON bcr.certificate_id = bct.id
LEFT JOIN pm_worker bw ON bw.id_number = bcr.id_number AND bw.is_active = '1'
LEFT JOIN bm_worker_ein_pro_record bweh
ON bweh.worker_id = bw.id AND bweh.is_active = '1'
WHERE bct.is_hidden = '0'
AND bct.is_active = '1'
GROUP BY bct.work_type, bct.neaten_work_operation) a
GROUP BY `name`) cc) AS expiringSoon
</select>
<select id="getWarning" resultType="com.bonus.bmw.domain.vo.CertificateStatisticsBean">
SELECT bw.`NAME` as username,
bb.`NAME`,
bb.valid_end_date as validEndDate,
bw.PHONE
FROM pm_worker bw
LEFT JOIN (SELECT *
FROM bm_certificate_read a
LEFT JOIN bm_certificate_type_auto b on a.certificate_id = b.id
WHERE valid_end_date = DATE_ADD(CURDATE(), INTERVAL 3 MONTH )
OR valid_end_date = DATE_ADD(CURDATE(), INTERVAL 6 MONTH )
GROUP BY id_number,
certificate_id) bb ON bw.ID_NUMBER = bb.id_number
WHERE bb.ID_NUMBER is not null
</select>
<select id="getReexamine" resultType="com.bonus.bmw.domain.vo.CertificateStatisticsBean">
SELECT bw.`NAME` as username,
bb.`NAME`,
bb.reality_review_date as reviewDate,
bw.PHONE
FROM pm_worker bw
LEFT JOIN (SELECT *
FROM bm_certificate_read a
LEFT JOIN bm_certificate_type_auto b on a.certificate_id = b.id
WHERE reality_review_date = DATE_ADD(CURDATE(), INTERVAL 3 MONTH )
OR reality_review_date = DATE_ADD(CURDATE(), INTERVAL 6 MONTH )
GROUP BY id_number,
certificate_id) bb ON bw.ID_NUMBER = bb.id_number
WHERE bb.ID_NUMBER is not null
</select>
</mapper>