package com.jysoft.card.service; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.UUID; import javax.annotation.Resource; import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.interceptor.TransactionAspectSupport; import com.alibaba.fastjson.JSON; import com.jysoft.card.entity.vo.CardAuditVo; import com.jysoft.card.entity.vo.CardVo; import com.jysoft.card.entity.vo.CardVo.AuditVo; import com.jysoft.card.entity.vo.CardVo.UserInfoVo; import com.nationalelectirc.Constant.Constant; import com.nationalelectirc.utils.RestResult; import com.nationalelectric.greenH5.AliasManageController; import com.nationalelectric.greenH5.bizc.BaseServiceImpl; import com.nationalelectric.greenH5.utils.DateTimeHelper; import com.sgcc.uap.persistence.IHibernateDao; import com.sgcc.uap.utils.StringUtils; /** * @author 10488 门禁卡办理业务逻辑层-新 */ @Service public class NewCardService { @Autowired private IHibernateDao iHibernateDao; @Resource private AliasManageController aliasManageController; @Autowired private BaseServiceImpl baseService; /** * 根据选择的卡类型获取审核人 * * @param entity * @return */ @SuppressWarnings("unchecked") public RestResult getAuditCheckUser(CardVo vo) { try { List> list = getDeptByUser(vo); List dataList = new ArrayList(); List parameter = new ArrayList(); String sql = " SELECT ghc.CHECK_ID AS \"checkId\"," + " ghcd.CHECK_ROLE AS \"checkRole\"," + " gui.REAL_NAME AS \"userName\"," + " gui.ID AS \"userId\" " + " FROM GREEN_HOUSE_CHECK ghc" + " LEFT JOIN GREEN_HOUSE_CHECK_DETAILS ghcd ON ghc.CHECK_ID = ghcd.CHECK_ID" + " LEFT JOIN GREEN_HOUSE_CHECK_ROLE ghcr ON ghcd.CHECK_ROLE = ghcr.ROLE_ID" + " LEFT JOIN GREEN_USER_INFO gui ON ghcr.USER_ID = gui.ID" + " WHERE ghc.CHECK_NAME = ? AND gui.DEPARTMENT_ID = ? AND CHECK_SORT = '1'"; System.err.println(sql); parameter.add(vo.getCardType()); parameter.add(list.get(0).get("departmentId")); dataList = iHibernateDao.queryForListWithSql(sql.toString(), parameter.toArray(), new BeanPropertyRowMapper(CardAuditVo.class)); return new RestResult(Constant.SUCCESS, "查询成功", dataList); } catch (Exception e) { e.printStackTrace(); return new RestResult(Constant.FAILED, "查询失败"); } } /** * 第三方人员/VIP贵宾/临时出入证/施工出入证-根据选择的部门获取获取审核人 * @param vo * @return */ public RestResult getAuditCheckUser2(CardVo vo) { try { List dataList = new ArrayList(); List parameter = new ArrayList(); String sql = " SELECT ghc.CHECK_ID AS \"checkId\"," + " ghcd.CHECK_ROLE AS \"checkRole\"," + " gui.REAL_NAME AS \"userName\"," + " gui.ID AS \"userId\" " + " FROM GREEN_HOUSE_CHECK ghc" + " LEFT JOIN GREEN_HOUSE_CHECK_DETAILS ghcd ON ghc.CHECK_ID = ghcd.CHECK_ID" + " LEFT JOIN GREEN_HOUSE_CHECK_ROLE ghcr ON ghcd.CHECK_ROLE = ghcr.ROLE_ID" + " LEFT JOIN GREEN_USER_INFO gui ON gurr.USER_ID = gui.ID" + " WHERE ghc.CHECK_NAME = ? AND gui.DEPARTMENT_ID = ? AND CHECK_SORT = '1'"; System.err.println(sql); parameter.add(vo.getCardType()); parameter.add(vo.getXmgkOrgId()); dataList = iHibernateDao.queryForListWithSql(sql.toString(), parameter.toArray(), new BeanPropertyRowMapper(CardAuditVo.class)); return new RestResult(Constant.SUCCESS, "查询成功", dataList); } catch (Exception e) { e.printStackTrace(); return new RestResult(Constant.FAILED, "查询失败"); } } /** * 新增办卡数据 * * @param vo * @return */ public RestResult addCardData(CardVo vo) { switch (vo.getCardType()) { case "职工卡": return addEmployeeCard(vo); case "第三方人员": return addThirdPartyPersonnelCard(vo); case "VIP贵宾": return addVipCard(vo); case "临时出入证": return addLsCard(vo); case "施工出入证": return addSgCard(vo); default: break; } return new RestResult(Constant.FAILED, "操作失败"); } /** * 新增办卡数据-职工卡 * * @param vo * @return */ @Transactional(rollbackFor = Exception.class) public RestResult addEmployeeCard(CardVo vo) { try { // 多人办理门禁卡使用相同的ID String dataId = UUID.randomUUID().toString().replace("-", ""); List userInfoVos = vo.getUserInfoVos(); String applyTime = DateTimeHelper.getNowDate(); for (int i = 0; i < userInfoVos.size(); i++) { UserInfoVo u = userInfoVos.get(i); StringBuilder addSql = new StringBuilder(); // 数据ID String id = UUID.randomUUID().toString().replace("-", ""); // 保存办卡数据 addSql.append("INSERT INTO GREEN_CARD (ID, USER_ID, USER_NAME, PHONE, ORG_ID, ORG_NAME,TYPE," + " UNIT,PERSONNEL,PERSONNEL_PHONE,APPLY_TIME,EXAMINE_BATCH,EXAMINE_STATE,EXAMINE_PERSON_ID," + " EXAMINE_PERSON_NAME,CARD_TYPE,TYPE_NAME,PHOTO,ID_PHOTO,IS_ENABLE_FACE,CARD_STATUS," + " DATA_ID,CHECK_ID,CHECK_ROLE,OPER_TYPE)" + " VALUES (?, ?, ?, ?, ?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"); iHibernateDao.executeSqlUpdate(addSql.toString(), new Object[] { id, vo.getUserId(), vo.getUserName(), vo.getPhone(), vo.getOrgId(), vo.getOrgName(), vo.getType(), u.getUnit(), u.getPersonnel(), u.getPersonnelPhone(), applyTime, '1', '0', vo.getCheckUserId(), vo.getCheckUserName(), vo.getCardType(), vo.getTypeName(), u.getPhoto(), u.getIdPhoto(), vo.getIsEnableFace(), '1', dataId, vo.getCheckId(), vo.getCheckRole(),"0" }); } // 添加出入区域 addAreaData(vo, dataId); } catch (Exception e) { e.printStackTrace(); // 手动回滚异常 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return new RestResult(Constant.FAILED, "添加失败"); } pushInfo(vo); return new RestResult(Constant.SUCCESS, "添加成功"); } /** * 新增办卡数据-第三方人员 * * @param vo * @return */ @Transactional(rollbackFor = Exception.class) public RestResult addThirdPartyPersonnelCard(CardVo vo) { try { String dataId = UUID.randomUUID().toString().replace("-", ""); List userInfoVos = vo.getUserInfoVos(); String applyTime = DateTimeHelper.getNowDate(); for (int i = 0; i < userInfoVos.size(); i++) { UserInfoVo u = userInfoVos.get(i); StringBuilder addSql = new StringBuilder(); // 数据ID String id = UUID.randomUUID().toString().replace("-", ""); // 保存办卡数据 addSql.append("INSERT INTO GREEN_CARD (ID, USER_ID, USER_NAME, PHONE, ORG_ID, ORG_NAME,TYPE," + " UNIT,PERSONNEL,PERSONNEL_PHONE,APPLY_TIME,EXAMINE_BATCH,EXAMINE_STATE,EXAMINE_PERSON_ID," + " EXAMINE_PERSON_NAME,CARD_TYPE,TYPE_NAME,PHOTO,ID_PHOTO,IS_ENABLE_FACE,CARD_STATUS," + " DATA_ID,CHECK_ID,CHECK_ROLE,XMGK_ORG_ID,XMGK_ORG_NAME,JB_USER_ID,JB_USER_PHONE,JB_USER_NAME," + " APPLY_TYPE,APPLY_TERM,DOCUMENTATION,OPER_TYPE)" + " VALUES (?, ?, ?, ?, ?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"); iHibernateDao.executeSqlUpdate(addSql.toString(), new Object[] { id, vo.getUserId(), vo.getUserName(), vo.getPhone(), vo.getOrgId(), vo.getOrgName(), vo.getType(), u.getUnit(), u.getPersonnel(), u.getPersonnelPhone(), applyTime, '1', '0', vo.getCheckUserId(), vo.getCheckUserName(), vo.getCardType(), vo.getTypeName(), u.getPhoto(), u.getIdPhoto(), vo.getIsEnableFace(), '1', dataId, vo.getCheckId(), vo.getCheckRole(), vo.getXmgkOrgId(), vo.getXmgkOrgName(), vo.getJbUserId(), vo.getJbUserPhone(), vo.getJbUserName(), vo.getApplyType(), vo.getApplyTerm(), u.getDocumentation(),"0" }); } // 添加出入区域 addAreaData(vo, dataId); } catch (Exception e) { e.printStackTrace(); // 手动回滚异常 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return new RestResult(Constant.FAILED, "添加失败"); } pushInfo(vo); return new RestResult(Constant.SUCCESS, "添加成功"); } /** * 新增办卡数据-VIP贵宾 * * @param vo * @return */ @Transactional(rollbackFor = Exception.class) public RestResult addVipCard(CardVo vo) { try { String dataId = UUID.randomUUID().toString().replace("-", ""); String applyTime = DateTimeHelper.getNowDate(); StringBuilder addSql = new StringBuilder(); // 数据ID String id = UUID.randomUUID().toString().replace("-", ""); // 保存办卡数据 addSql.append("INSERT INTO GREEN_CARD (ID, USER_ID, USER_NAME, PHONE, ORG_ID, ORG_NAME,TYPE," + " APPLY_TIME,EXAMINE_BATCH,EXAMINE_STATE,EXAMINE_PERSON_ID,EXAMINE_PERSON_NAME," + " CARD_TYPE,TYPE_NAME,DATA_ID,CHECK_ID,CHECK_ROLE,JB_USER_ID,JB_USER_PHONE,JB_USER_NAME," + " LEND_TIME,BACK_TIME,DOCUMENTATION,OPER_TYPE,CARD_STATUS)" + " VALUES (?, ?, ?, ?, ?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"); iHibernateDao.executeSqlUpdate(addSql.toString(), new Object[] { id, vo.getUserId(), vo.getUserName(), vo.getPhone(), vo.getOrgId(), vo.getOrgName(), vo.getType(), applyTime, "1", "0", vo.getCheckUserId(), vo.getCheckUserName(), vo.getCardType(), vo.getTypeName(), dataId, vo.getCheckId(), vo.getCheckRole(), vo.getJbUserId(), vo.getJbUserPhone(), vo.getJbUserName(), vo.getLendTime(), vo.getBackTime(), vo.getDocumentation(),"0","1" }); } catch (Exception e) { e.printStackTrace(); // 手动回滚异常 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return new RestResult(Constant.FAILED, "添加失败"); } pushInfo(vo); return new RestResult(Constant.SUCCESS, "添加成功"); } /** * 新增办卡数据-临时出入证 * * @param vo * @return */ @Transactional(rollbackFor = Exception.class) public RestResult addLsCard(CardVo vo) { try { String dataId = UUID.randomUUID().toString().replace("-", ""); List userInfoVos = vo.getUserInfoVos(); String applyTime = DateTimeHelper.getNowDate(); for (int i = 0; i < userInfoVos.size(); i++) { UserInfoVo u = userInfoVos.get(i); StringBuilder addSql = new StringBuilder(); // 数据ID String id = UUID.randomUUID().toString().replace("-", ""); // 保存办卡数据 addSql.append("INSERT INTO GREEN_CARD (ID, USER_ID, USER_NAME, PHONE, ORG_ID, ORG_NAME,TYPE," + " APPLY_TIME,EXAMINE_BATCH,EXAMINE_STATE,EXAMINE_PERSON_ID,EXAMINE_PERSON_NAME," + " CARD_TYPE,TYPE_NAME,DATA_ID,CHECK_ID,CHECK_ROLE,PRO_NAME,PRO_UNIT,PRO_MANAGER," + " PRO_MANAGER_PHONE,CONTRACT_START_TIME,CONTRACT_END_TIME,BZ_NUM,PERSONNEL,ID_PHOTO," + " ACCESS_AREA,XMGK_ORG_ID,XMGK_ORG_NAME," + " JB_USER_ID,JB_USER_PHONE,JB_USER_NAME,OPER_TYPE,CARD_STATUS)" + " VALUES (?, ?, ?, ?, ?, ?,?,?, ?, ?, ?, ?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"); iHibernateDao.executeSqlUpdate(addSql.toString(), new Object[] { id, vo.getUserId(), vo.getUserName(), vo.getPhone(), vo.getOrgId(), vo.getOrgName(), vo.getType(), applyTime, "1", "0", vo.getCheckUserId(), vo.getCheckUserName(), vo.getCardType(), vo.getTypeName(), dataId, vo.getCheckId(), vo.getCheckRole(), vo.getProName(), vo.getProUnit(), vo.getProManager(), vo.getProManagerPhone(), vo.getContractStartTime(), vo.getContractEndTime(), vo.getBzNum(), u.getPersonnel(), u.getIdPhoto(), vo.getAccessArea(),vo.getXmgkOrgId(), vo.getXmgkOrgName(),vo.getJbUserId(),vo.getJbUserPhone(),vo.getJbUserName(),"0","1"}); } } catch (Exception e) { e.printStackTrace(); // 手动回滚异常 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return new RestResult(Constant.FAILED, "添加失败"); } pushInfo(vo); return new RestResult(Constant.SUCCESS, "添加成功"); } /** * 新增办卡数据-施工出入证 * * @param vo * @return */ @Transactional(rollbackFor = Exception.class) public RestResult addSgCard(CardVo vo) { try { String dataId = UUID.randomUUID().toString().replace("-", ""); List userInfoVos = vo.getUserInfoVos(); String applyTime = DateTimeHelper.getNowDate(); for (int i = 0; i < userInfoVos.size(); i++) { UserInfoVo u = userInfoVos.get(i); StringBuilder addSql = new StringBuilder(); // 数据ID String id = UUID.randomUUID().toString().replace("-", ""); // 保存办卡数据 addSql.append("INSERT INTO GREEN_CARD (ID, USER_ID, USER_NAME, PHONE, ORG_ID, ORG_NAME,TYPE," + " APPLY_TIME,EXAMINE_BATCH,EXAMINE_STATE,EXAMINE_PERSON_ID,EXAMINE_PERSON_NAME," + " CARD_TYPE,TYPE_NAME,DATA_ID,CHECK_ID,CHECK_ROLE,XMGK_ORG_ID,XMGK_ORG_NAME," + " JB_USER_ID,JB_USER_PHONE,JB_USER_NAME,WORK_CONTENT,TICKET_NO,ACCESS_AREA," + " PRO_UNIT,PRO_MANAGER,PRO_MANAGER_PHONE,CONTRACT_START_TIME,CONTRACT_END_TIME,CAR_NUM," + " PERSONNEL,ID_PHOTO,ID_NUMBER,OPER_TYPE,CARD_STATUS)" + " VALUES (?, ?, ?, ?, ?, ?,?,?, ?, ?, ?, ?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"); iHibernateDao.executeSqlUpdate(addSql.toString(), new Object[] { id, vo.getUserId(), vo.getUserName(), vo.getPhone(), vo.getOrgId(), vo.getOrgName(), vo.getType(), applyTime, "1", "0", vo.getCheckUserId(), vo.getCheckUserName(), vo.getCardType(), vo.getTypeName(), dataId, vo.getCheckId(), vo.getCheckRole(), vo.getXmgkOrgId(), vo.getXmgkOrgName(), vo.getJbUserId(), vo.getJbUserPhone(), vo.getJbUserName(), vo.getWorkContent(), vo.getTicketNo(), vo.getAccessArea(), vo.getProUnit(), vo.getProManager(), vo.getProManagerPhone(), vo.getContractStartTime(), vo.getContractEndTime(), vo.getCarNum(), u.getPersonnel(), u.getIdPhoto(), u.getIdNumber(),"0","1" }); } } catch (Exception e) { e.printStackTrace(); // 手动回滚异常 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return new RestResult(Constant.FAILED, "添加失败"); } pushInfo(vo); return new RestResult(Constant.SUCCESS, "添加成功"); } /** * 添加出入区域 * * @param vo * @param id */ public void addAreaData(CardVo vo, String id) { String[] areaIdsArr = vo.getAccessArea().split(","); List dataList = Arrays.asList(areaIdsArr); for (int i = 0; i < dataList.size(); i++) { String areaId = dataList.get(i); String sqlStr = "INSERT INTO CARD_RELA_ACCESS (GREEN_CARD_ID, ACCESS_ID) VALUES (?, ?)"; iHibernateDao.executeSqlUpdate(sqlStr, new Object[] { id, areaId }); } } /** * 推送消息 * * @param vo */ public void pushInfo(CardVo vo) { String title = "" + vo.getCardType() + "申请"; String text = "您好,您有新的" + vo.getCardType() + "申请需要审批,请点击查看。"; String url = "/pages/access-card/card-record"; aliasManageController.pushToSingle(vo.getCheckUserId(), title, text, url); } /** * 办卡/办证详情接口 * * @param vo * @return */ public RestResult getDetailInfo(CardVo vo) { switch (vo.getCardType()) { case "职工卡": return getEmployeeCardDetail(vo); case "第三方人员": return getThirdPartyPersonnelCardDetail(vo); case "VIP贵宾": return getVipCardDetail(vo); case "临时出入证": return getLsCardDetail(vo); case "施工出入证": return getSgCardDetail(vo); default: break; } return new RestResult(Constant.FAILED, "查询失败"); } /** * 职工卡详情 * * @param vo * @return */ @SuppressWarnings("unchecked") public RestResult getEmployeeCardDetail(CardVo vo) { try { List dataList = new ArrayList(); CardVo cardVo = new CardVo(); List parameter = new ArrayList(); String sql = " SELECT gc.DATA_ID AS \"dataId\",MAX(gc.CARD_TYPE) AS \"carType\",MAX(gc.TYPE_NAME) AS \"typeName\"," + " MAX(gc.IS_ENABLE_FACE) AS \"isEnableFace\",MAX(gc.APPLY_TIME) AS \"applyTime\"," + " MAX(gc.EXAMINE_BATCH) AS \"examineBatch\",MAX(gc.EXAMINE_STATE) AS \"examineState\"," + " MAX(gc.CHECK_ID) AS \"checkId\",MAX(gc.CHECK_ROLE) AS \"checkRole\",MAX(gc.USER_NAME) AS \"userName\"," + " MAX(gc.EXAMINE_PERSON_ID) AS \"checkUserId\",MAX(gc.OPER_TYPE) AS \"operType\"" + " FROM GREEN_CARD gc" + " WHERE gc.DATA_ID = ?" + " GROUP BY gc.DATA_ID"; System.err.println(sql); parameter.add(vo.getDataId()); dataList = iHibernateDao.queryForListWithSql(sql.toString(), parameter.toArray(), new BeanPropertyRowMapper(CardVo.class)); if (CollectionUtils.isNotEmpty(dataList)) { // 查询基本信息 cardVo = dataList.get(0); // 查询出入区域 String accessArea = getAreaData(vo); cardVo.setAccessArea(accessArea); // 查询人员信息 List userInfoVos = new ArrayList(); String sql2 = " SELECT gc.UNIT AS \"unit\",gc.PERSONNEL AS \"personnel\"," + " gc.PERSONNEL_PHONE AS \"personnelPhone\",gc.PHOTO AS \"photo\",gc.ID_PHOTO AS \"idPhoto\"" + " FROM GREEN_CARD gc WHERE gc.DATA_ID = ? "; userInfoVos = iHibernateDao.queryForListWithSql(sql2.toString(), parameter.toArray(), new BeanPropertyRowMapper(CardVo.UserInfoVo.class)); // 处理人员照片 for (int i = 0; i < userInfoVos.size(); i++) { UserInfoVo vo2 = userInfoVos.get(i); String photo = vo2.getPhoto(); String idPhoto = vo2.getIdPhoto(); if (StringUtils.isNotBlank(photo)) { // 证件照片 String newPhoto = ""; String[] photoArr = photo.split(","); for (String str : photoArr) { newPhoto += baseService.getImageBase64(str) + ","; } vo2.setPhoto(newPhoto); } if (StringUtils.isNotBlank(idPhoto)) { // 人脸照片 vo2.setIdPhoto(baseService.getImageBase64(idPhoto)); } } cardVo.setUserInfoVos(userInfoVos); // 查询审核详情 List auditVos = getAudits(vo); cardVo.setAuditVos(auditVos); } return new RestResult(Constant.SUCCESS, "查询成功", cardVo); } catch (Exception e) { e.printStackTrace(); return new RestResult(Constant.FAILED, "查询失败"); } } /** * 第三方人员详情 * * @param vo * @return */ public RestResult getThirdPartyPersonnelCardDetail(CardVo vo) { try { List dataList = new ArrayList(); CardVo cardVo = new CardVo(); List parameter = new ArrayList(); String sql = " SELECT gc.CARD_TYPE AS \"cardType\",gc.TYPE_NAME AS \"typeName\"," + " gc.APPLY_TIME AS \"applyTime\",gc.XMGK_ORG_NAME AS \"xmgkOrgName\"," + " gc.JB_USER_NAME AS \"jbUserName\",gc.JB_USER_PHONE AS \"jbUserPhone\"," + " gc.APPLY_TYPE AS \"applyType\",gc.APPLY_TERM AS \"applyTerm\",gc.DATA_ID AS \"dataId\"," + " gc.EXAMINE_BATCH AS \"examineBatch\",gc.EXAMINE_STATE AS \"examineState\"," + " gc.CHECK_ID AS \"checkId\",gc.CHECK_ROLE AS \"checkRole\",gc.EXAMINE_PERSON_ID AS \"checkUserId\"," + " gc.OPER_TYPE AS \"operType\",gc.USER_NAME AS \"userName\"" + " FROM GREEN_CARD gc" + " WHERE gc.DATA_ID = ?"; System.err.println(sql); parameter.add(vo.getDataId()); dataList = iHibernateDao.queryForListWithSql(sql.toString(), parameter.toArray(), new BeanPropertyRowMapper(CardVo.class)); if (CollectionUtils.isNotEmpty(dataList)) { // 查询基本信息 cardVo = dataList.get(0); // 查询出入区域 String accessArea = getAreaData(vo); cardVo.setAccessArea(accessArea); // 查询人员信息 List userInfoVos = new ArrayList(); String sql2 = " SELECT gc.UNIT AS \"unit\",gc.PERSONNEL AS \"personnel\"," + " gc.PERSONNEL_PHONE AS \"personnelPhone\",gc.PHOTO AS \"photo\",gc.ID_PHOTO AS \"idPhoto\"," + " gc.DOCUMENTATION AS \"documentation\"" + " FROM GREEN_CARD gc WHERE gc.DATA_ID = ? "; userInfoVos = iHibernateDao.queryForListWithSql(sql2.toString(), parameter.toArray(), new BeanPropertyRowMapper(CardVo.UserInfoVo.class)); // 处理人员照片 for (int i = 0; i < userInfoVos.size(); i++) { UserInfoVo vo2 = userInfoVos.get(i); String photo = vo2.getPhoto(); String idPhoto = vo2.getIdPhoto(); String documentation = vo2.getDocumentation(); if (StringUtils.isNotBlank(photo)) { // 证件照片 String newPhoto = ""; String[] photoArr = photo.split(","); for (String str : photoArr) { newPhoto += baseService.getImageBase64(str) + ","; } vo2.setPhoto(newPhoto); } if (StringUtils.isNotBlank(idPhoto)) { // 人脸照片 vo2.setIdPhoto(baseService.getImageBase64(idPhoto)); } if (StringUtils.isNotBlank(documentation)) { // 情况说明 vo2.setDocumentation(baseService.getImageBase64(documentation)); } } cardVo.setUserInfoVos(userInfoVos); // 查询审核详情 List auditVos = getAudits(vo); cardVo.setAuditVos(auditVos); } return new RestResult(Constant.SUCCESS, "查询成功", cardVo); } catch (Exception e) { e.printStackTrace(); return new RestResult(Constant.FAILED, "查询失败"); } } /** * VIP贵宾详情 * * @param vo * @return */ public RestResult getVipCardDetail(CardVo vo) { try { List dataList = new ArrayList(); CardVo cardVo = new CardVo(); List parameter = new ArrayList(); String sql = " SELECT gc.CARD_TYPE AS \"cardType\",gc.TYPE_NAME AS \"typeName\"," + " gc.APPLY_TIME AS \"applyTime\",gc.DATA_ID AS \"dataId\"," + " gc.EXAMINE_BATCH AS \"examineBatch\",gc.EXAMINE_STATE AS \"examineState\"," + " gc.DOCUMENTATION AS \"documentation\",gc.XMGK_ORG_NAME AS \"xmgkOrgName\"," + " gc.JB_USER_NAME AS \"jbUserName\",gc.JB_USER_PHONE AS \"jbUserPhone\"," + " gc.LEND_TIME AS \"lendTime\",gc.BACK_TIME AS \"backTime\"," + " gc.ACTUAL_BACK_TIME AS \"actualBackTime\",gc.REMARK AS \"remark\"," + " gc.CHECK_ID AS \"checkId\",gc.CHECK_ROLE AS \"checkRole\",gc.EXAMINE_PERSON_ID AS \"checkUserId\"," + " gc.OPER_TYPE AS \"operType\",gc.USER_NAME AS \"userName\"" + " FROM GREEN_CARD gc" + " WHERE gc.DATA_ID = ?"; System.err.println(sql); parameter.add(vo.getDataId()); dataList = iHibernateDao.queryForListWithSql(sql.toString(), parameter.toArray(), new BeanPropertyRowMapper(CardVo.class)); if (CollectionUtils.isNotEmpty(dataList)) { // 查询基本信息 cardVo = dataList.get(0); // 处理附件照片 String documentation = cardVo.getDocumentation(); if (StringUtils.isNotBlank(documentation)) { cardVo.setDocumentation(baseService.getImageBase64(documentation)); } // 查询审核详情 List auditVos = getAudits(vo); cardVo.setAuditVos(auditVos); } return new RestResult(Constant.SUCCESS, "查询成功", cardVo); } catch (Exception e) { e.printStackTrace(); return new RestResult(Constant.FAILED, "查询失败"); } } /** * 临时出入证详情 * * @param vo * @return */ public RestResult getLsCardDetail(CardVo vo) { try { List dataList = new ArrayList(); CardVo cardVo = new CardVo(); List parameter = new ArrayList(); String sql = " SELECT MAX(gc.CARD_TYPE) AS \"cardType\",MAX(gc.TYPE_NAME) AS \"typeName\"," + " MAX(gc.APPLY_TIME) AS \"applyTime\",MAX(gc.DATA_ID) AS \"dataId\"," + " MAX(gc.EXAMINE_BATCH) AS \"examineBatch\",MAX(gc.EXAMINE_STATE) AS \"examineState\"," + " MAX(gc.PRO_NAME) AS \"proName\",MAX(gc.PRO_UNIT) AS \"proUnit\",MAX(gc.PRO_MANAGER) AS \"proManager\"," + " MAX(gc.PRO_MANAGER_PHONE) AS \"proManagerPhone\",MAX(gc.XMGK_ORG_NAME) AS \"xmgkOrgName\"," + " MAX(gc.JB_USER_NAME) AS \"jbUserName\",MAX(gc.JB_USER_PHONE) AS \"jbUserPhone\"," + " MAX(gc.CONTRACT_START_TIME) AS \"contractStartTime\",MAX(gc.CONTRACT_END_TIME) AS \"contractEndTime\"," + " MAX(gc.CARD_START_TIME) AS \"cardStartTime\",MAX(gc.CARD_END_TIME) AS \"cardEndTime\"," + " MAX(gc.ACCESS_AREA) AS \"accessArea\",MAX(gc.BZ_NUM) AS \"bzNum\"," + " MAX(gc.CHECK_ID) AS \"checkId\",MAX(gc.CHECK_ROLE) AS \"checkRole\",MAX(gc.USER_NAME) AS \"userName\"," + " MAX(gc.EXAMINE_PERSON_ID) AS \"checkUserId\",MAX(gc.OPER_TYPE) AS \"operType\"" + " FROM GREEN_CARD gc" + " WHERE gc.DATA_ID = ? GROUP BY gc.DATA_ID"; parameter.add(vo.getDataId()); dataList = iHibernateDao.queryForListWithSql(sql.toString(), parameter.toArray(), new BeanPropertyRowMapper(CardVo.class)); if (CollectionUtils.isNotEmpty(dataList)) { // 查询基本信息 cardVo = dataList.get(0); // 查询人员信息 List userInfoVos = new ArrayList(); String sql2 = " SELECT gc.PERSONNEL AS \"personnel\",gc.ID_PHOTO AS \"idPhoto\"" + " FROM GREEN_CARD gc WHERE gc.DATA_ID = ? "; userInfoVos = iHibernateDao.queryForListWithSql(sql2.toString(), parameter.toArray(), new BeanPropertyRowMapper(CardVo.UserInfoVo.class)); // 处理人员照片 for (int i = 0; i < userInfoVos.size(); i++) { UserInfoVo vo2 = userInfoVos.get(i); String idPhoto = vo2.getIdPhoto(); if (StringUtils.isNotBlank(idPhoto)) { // 人脸照片 vo2.setIdPhoto(baseService.getImageBase64(idPhoto)); } } cardVo.setUserInfoVos(userInfoVos); // 查询审核详情 List auditVos = getAudits(vo); cardVo.setAuditVos(auditVos); } return new RestResult(Constant.SUCCESS, "查询成功", cardVo); } catch (Exception e) { e.printStackTrace(); return new RestResult(Constant.FAILED, "查询失败"); } } /** * 施工出入证详情 * * @param vo * @return */ public RestResult getSgCardDetail(CardVo vo) { try { List dataList = new ArrayList(); CardVo cardVo = new CardVo(); List parameter = new ArrayList(); String sql = " SELECT MAX(gc.CARD_TYPE) AS \"cardType\",MAX(gc.TYPE_NAME) AS \"typeName\"," + " MAX(gc.APPLY_TIME) AS \"applyTime\",MAX(gc.DATA_ID) AS \"dataId\"," + " MAX(gc.EXAMINE_BATCH) AS \"examineBatch\",MAX(gc.EXAMINE_STATE) AS \"examineState\"," + " MAX(gc.PRO_UNIT) AS \"proUnit\",MAX(gc.PRO_MANAGER) AS \"proManager\"," + " MAX(gc.PRO_MANAGER_PHONE) AS \"proManagerPhone\",MAX(gc.XMGK_ORG_NAME) AS \"xmgkOrgName\"," + " MAX(gc.JB_USER_NAME) AS \"jbUserName\",MAX(gc.JB_USER_PHONE) AS \"jbUserPhone\"," + " MAX(gc.CONTRACT_START_TIME) AS \"contractStartTime\",MAX(gc.CONTRACT_END_TIME) AS \"contractEndTime\"," + " MAX(gc.CARD_START_TIME) AS \"cardStartTime\",MAX(gc.CARD_END_TIME) AS \"cardEndTime\"," + " MAX(gc.ACCESS_AREA) AS \"accessArea\",MAX(gc.CAR_NUM) AS \"carNum\",MAX(gc.TICKET_NO) AS \"ticketNo\"," + " MAX(gc.WORK_CONTENT) AS \"workContent\",MAX(gc.OPER_TYPE) AS \"operType\"," + " MAX(gc.CHECK_ID) AS \"checkId\",MAX(gc.CHECK_ROLE) AS \"checkRole\",MAX(gc.EXAMINE_PERSON_ID) AS \"checkUserId\"," + " MAX(gc.USER_NAME) AS \"userName\"" + " FROM GREEN_CARD gc WHERE gc.DATA_ID = ? GROUP BY gc.DATA_ID"; parameter.add(vo.getDataId()); dataList = iHibernateDao.queryForListWithSql(sql.toString(), parameter.toArray(), new BeanPropertyRowMapper(CardVo.class)); if (CollectionUtils.isNotEmpty(dataList)) { // 查询基本信息 cardVo = dataList.get(0); // 查询人员信息 List userInfoVos = new ArrayList(); String sql2 = " SELECT gc.PERSONNEL AS \"personnel\",gc.ID_PHOTO AS \"idPhoto\"," + " gc.ID_NUMBER AS \"idNumber\"" + " FROM GREEN_CARD gc WHERE gc.DATA_ID = ? "; userInfoVos = iHibernateDao.queryForListWithSql(sql2.toString(), parameter.toArray(), new BeanPropertyRowMapper(CardVo.UserInfoVo.class)); // 处理人员照片 for (int i = 0; i < userInfoVos.size(); i++) { UserInfoVo vo2 = userInfoVos.get(i); String idPhoto = vo2.getIdPhoto(); if (StringUtils.isNotBlank(idPhoto)) { // 人脸照片 vo2.setIdPhoto(baseService.getImageBase64(idPhoto)); } } cardVo.setUserInfoVos(userInfoVos); // 查询审核详情 List auditVos = getAudits(vo); cardVo.setAuditVos(auditVos); } return new RestResult(Constant.SUCCESS, "查询成功", cardVo); } catch (Exception e) { e.printStackTrace(); return new RestResult(Constant.FAILED, "查询失败"); } } /** * 获取区域列表 * * @param vo * @return */ public String getAreaData(CardVo vo) { String areaSql = "SELECT cra.ACCESS_ID \"id\",gac.ACCESS_NAME AS \"name\"," + " gac.PARENT_ID AS \"parentId\", " + " gac2.ACCESS_NAME AS \"parentName\" " + " FROM CARD_RELA_ACCESS cra" + " INNER JOIN GREEN_ACCESS_CONTROL gac ON cra.ACCESS_ID = gac.ACCESS_ID AND gac.ACCESS_LEVEL = '2' AND gac.IS_DELETE = 'N' " + " INNER JOIN GREEN_ACCESS_CONTROL gac2 ON gac.PARENT_ID = gac2.ACCESS_ID AND gac2.ACCESS_LEVEL = '1' AND gac2.IS_DELETE = 'N' " + " WHERE cra.GREEN_CARD_ID = '" + vo.getDataId() + "' AND gac.IS_DELETE = 'N'"; List> areaList = iHibernateDao.queryForListWithSql(areaSql); System.err.println("areaList:" + areaList.size()); if (areaList != null && areaList.size() > 0) { String areaSql2 = "SELECT ACCESS_ID AS \"id\",ACCESS_NAME AS \"name\" FROM GREEN_ACCESS_CONTROL WHERE ACCESS_LEVEL = '1' AND IS_DELETE = 'N'"; List> areaList2 = iHibernateDao.queryForListWithSql(areaSql2); // 处理出入区域数据 System.err.println("areaList2:" + areaList2.size()); String accessArea = this.setAreaData(areaList, areaList2); return accessArea; } return ""; } /** * 处理出入区域 * * @param list * @param list2 * @return */ public String setAreaData(List> list, List> list2) { List> returnList = new ArrayList>(); try { for (int i = 0; i < list2.size(); i++) { String id = list2.get(i).get("id"); StringBuffer areaStr = new StringBuffer(); StringBuffer areaIdStr = new StringBuffer(); for (int j = 0; j < list.size(); j++) { String parentId = list.get(j).get("parentId"); if (Objects.equals(id, parentId)) { areaIdStr.append(list.get(j).get("id") + ","); areaStr.append(list.get(j).get("name") + ","); } } String area = areaStr.toString(); String areaId = areaIdStr.toString(); if (StringUtils.isNotBlank(areaId)) { Map data = new HashMap(); data.put("address", list2.get(i).get("name")); data.put("addressId", id); data.put("area", area.substring(0, area.lastIndexOf(","))); data.put("areaIds", areaId.substring(0, areaId.lastIndexOf(","))); returnList.add(data); } } } catch (Exception e) { e.printStackTrace(); System.err.println("区域处理"); } return JSON.toJSONString(returnList); } /** * 查询审核详情 * * @param vo * @return */ @SuppressWarnings("unchecked") public List getAudits(CardVo vo) { List dataList = new ArrayList(); List parameter = new ArrayList(); parameter.add(vo.getDataId()); String sql = " SELECT USER_NAME AS \"userName\",EXAMINE_STATE AS \"examineState\"," + " EXAMINE_TIME AS \"examineTime\",EXAMINE_BATCH AS \"examineBatch\"," + " BATCH_DESCRIPTION AS \"batchDescription\"" + " FROM GREEN_CARD_EXAMINE " + " WHERE DEL_FLAG = '0' and CARD_ID = ? ORDER BY EXAMINE_BATCH ASC"; dataList = iHibernateDao.queryForListWithSql(sql.toString(), parameter.toArray(), new BeanPropertyRowMapper(CardVo.AuditVo.class)); return dataList; } /** * 门禁卡办理记录 * * @param vo * @return */ public RestResult getCardList(CardVo vo) { try { String sql = " SELECT * FROM (SELECT ROWNUM num,A.* FROM ( " + " SELECT * FROM (SELECT MAX(gc.DATA_ID) AS \"dataId\",MAX(gc.CARD_TYPE) AS \"carType\"," + " MAX(gc.TYPE_NAME) AS \"typeName\",MAX(gc.APPLY_TIME) AS \"applyTime\"," + " MAX(gc.EXAMINE_BATCH) AS \"examineBatch\",MAX(gc.EXAMINE_STATE) AS \"examineState\"," + " MAX(CARD_STATUS) AS \"cardStatus\"" + " FROM GREEN_CARD gc " + " WHERE gc.USER_ID = ? GROUP BY gc.DATA_ID) B ORDER BY B.\"applyTime\" DESC) " + " A WHERE ROWNUM<=?) WHERE num > ?"; System.err.println(sql); Integer pageSize = vo.getPageSize(); Integer pageNum = vo.getPageNum(); Integer page = (pageNum - 1) * pageSize; Integer limit = pageNum * pageSize; List> list = iHibernateDao.queryForListWithSql(sql, new Object[] { vo.getUserId(), limit, page }); return new RestResult(Constant.SUCCESS, "查询成功", list); } catch (Exception e) { e.printStackTrace(); return new RestResult(Constant.FAILED, "查询失败"); } } /** * 获取部门 * @param vo * @return */ public RestResult getDeptList(CardVo vo) { try { String sql = " SELECT ID AS \"id\",NAME AS \"name\"" + " FROM GREEN_DEPARTMENT WHERE IS_DELETED = 'N'"; List> list = iHibernateDao.queryForListWithSql(sql); return new RestResult(Constant.SUCCESS, "查询成功", list); } catch (Exception e) { e.printStackTrace(); return new RestResult(Constant.FAILED, "查询失败"); } } /** * 根据部门查询部门下的人员 * @param vo * @return */ public RestResult getUserInfoByDept(CardVo vo) { try { String sql = " SELECT ID AS \"id\",REAL_NAME AS \"name\",MOBILE AS \"phone\"" + " FROM GREEN_USER_INFO WHERE DEPARTMENT_ID = ? AND IS_DELETED = 'N' AND USERTYPE = '0'"; List> list = iHibernateDao.queryForListWithSql(sql, new Object[] { vo.getXmgkOrgId()}); return new RestResult(Constant.SUCCESS, "查询成功", list); } catch (Exception e) { e.printStackTrace(); return new RestResult(Constant.FAILED, "查询失败"); } } /** * 根据类型编码查询字典数据 * @param vo * @return */ public RestResult getDictByType(CardVo vo) { try { String sql = " SELECT ID AS \"id\",DESCRIPTION AS \"value\"" + " FROM GREEN_DICTIONARY_INFO WHERE DATA_TYPE = ? AND IS_DELETED = 'N'"; List> list = iHibernateDao.queryForListWithSql(sql, new Object[] { vo.getType()}); return new RestResult(Constant.SUCCESS, "查询成功", list); } catch (Exception e) { e.printStackTrace(); return new RestResult(Constant.FAILED, "查询失败"); } } /** * 办卡/办证-审核 * @param vo * @return */ public RestResult auditData(CardVo vo) { switch (vo.getCardType()) { case "职工卡": case "第三方人员": return auditCard(vo); case "VIP贵宾": case "临时出入证": case "施工出入证": return auditCard2(vo); default: break; } return new RestResult(Constant.FAILED, "操作失败"); } /** * 职工卡-审批 * 第三方人员-审批 * @param vo * @return */ @Transactional(rollbackFor = Exception.class) public RestResult auditCard(CardVo vo) { try { // 职工卡的审批流程-申请人所在部门负责人审核->制卡经办人审核->制卡部门负责人审核->制卡经办人抄送 // 第三方人员的审批流程->项目归口管理部门负责人审核->制卡经办人审核->制卡部门负责人审核->项目归口管理部门分管领导审核->制卡经办人抄送 // 判断当前登录人是否具有审核权限 Boolean isHasAuditAuth = isHasAuditAuth(vo); if(isHasAuditAuth){ return new RestResult(Constant.FAILED, "当前登录用户无审核权限"); } // 判断是否重复审核 Boolean repeatAudit = isRepeatAudit(vo); if(repeatAudit){ return new RestResult(Constant.FAILED, "请勿重复审核,刷新页面重试"); } List> auditNodeList = getNextAuditNodeRole(vo); vo.setDescription(auditNodeList.get(0).get("checkName")); String examineBatch = vo.getExamineBatch(); String nextExamineBatch =String.valueOf(Integer.parseInt(examineBatch)); // check_operate -1.已无审核节点 0.无操作人员审核 1.代表制卡经办人审核 2.代表制卡经办人抄送 String checkOperate = auditNodeList.get(0).get("checkOperate"); String nextCheckOperate = auditNodeList.get(1).get("checkOperate"); // 添加审核记录 addExamineData(vo); if(Objects.equals(vo.getExamineState(), "1") && Objects.equals(checkOperate, "0") && Objects.equals(nextCheckOperate, "0")){ // 无操作人员审核->无操作人员审核 vo.setExamineBatch(nextExamineBatch); vo.setCheckRole(auditNodeList.get(1).get("checkRole")); vo.setExamineState("0"); }else if(Objects.equals(vo.getExamineState(), "1") && Objects.equals(checkOperate, "0") && Objects.equals(nextCheckOperate, "1")){ // 无操作人员审核->制卡经办人审核 vo.setExamineBatch(nextExamineBatch); vo.setCheckRole(auditNodeList.get(1).get("checkRole")); vo.setExamineState("0"); }else if(Objects.equals(vo.getExamineState(), "1") && Objects.equals(checkOperate, "1") && Objects.equals(nextCheckOperate, "0")){ // 制卡经办人审核->无操作人员审核 vo.setExamineBatch(nextExamineBatch); vo.setCheckRole(auditNodeList.get(1).get("checkRole")); vo.setExamineState("0"); // 添加制卡经办人的ID vo.setOperCardId(vo.getUserId()); }else if(Objects.equals(vo.getExamineState(), "1") && Objects.equals(checkOperate, "0") && Objects.equals(nextCheckOperate, "2")){ // 无操作人员审核->制卡经办人抄送(默认审批流程已结束) vo.setExamineBatch(nextExamineBatch); vo.setCheckRole(auditNodeList.get(1).get("checkRole")); vo.setExamineState("1"); List> sendUserInfos = getSendUserInfo(vo); vo.setUserId(sendUserInfos.get(0).get("userId")); vo.setUserId(sendUserInfos.get(0).get("userName")); vo.setDescription(auditNodeList.get(1).get("checkName")); // 添加抄送记录 addExamineData(vo); // 发起抄送 pushInfo2(vo); }else if(Objects.equals(vo.getExamineState(), "1") && Objects.equals(checkOperate, "1") && Objects.equals(nextCheckOperate, "2")){ // 制卡经办人审核->制卡经办人抄送 vo.setExamineBatch(nextExamineBatch); vo.setCheckRole(auditNodeList.get(1).get("checkRole")); vo.setExamineState("1"); // 添加制卡经办人的ID vo.setOperCardId(vo.getUserId()); List> sendUserInfos = getSendUserInfo(vo); vo.setUserId(sendUserInfos.get(0).get("userId")); vo.setUserId(sendUserInfos.get(0).get("userName")); vo.setDescription(auditNodeList.get(1).get("checkName")); // 添加抄送记录 addExamineData(vo); // 发起抄送 pushInfo2(vo); }else if(Objects.equals(vo.getExamineState(), "1") && Objects.equals(checkOperate, "0") && Objects.equals(nextCheckOperate, "-1")){ // 无操作人员审核->已无审核节点(审批流程结束) vo.setExamineState("1"); } // 更新办卡/办证数据 updateCardAuditData(vo); } catch (Exception e) { e.printStackTrace(); // 手动回滚异常 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return new RestResult(Constant.FAILED, "操作失败"); } return new RestResult(Constant.SUCCESS, "操作成功"); } /** * VIP贵宾-审批 * @param vo * @return */ public RestResult auditCard2(CardVo vo) { try { // VIP贵宾的审批流程->经办部门负责人审核->制卡经办人审核->制卡部门负责人审核->制卡经办人填写归还时间及备注 // 临时出入证/施工出入证的审批流程->项目归口管理部门负责人审核->制卡经办人审核->制卡部门负责人审核->制卡经办人填写证件有效期 // 判断当前登录人是否具有审核权限 Boolean isHasAuditAuth = isHasAuditAuth(vo); if(isHasAuditAuth){ return new RestResult(Constant.FAILED, "当前登录用户无审核权限"); } Boolean repeatAudit = isRepeatAudit(vo); if(repeatAudit){ return new RestResult(Constant.FAILED, "请勿重复审核,刷新页面重试"); } if(Objects.equals(vo.getOperType(), "2") && Objects.equals(vo.getCardType(), "VIP贵宾")){ if(StringUtils.isEmpty(vo.getActualBackTime())){ return new RestResult(Constant.FAILED, "实际归还时间不能为空"); } if(StringUtils.isEmpty(vo.getRemark())){ return new RestResult(Constant.FAILED, "备注不能为空"); } } if(Objects.equals(vo.getOperType(), "2") && (Objects.equals(vo.getCardType(), "临时出入证") || Objects.equals(vo.getCardType(), "施工出入证"))){ if(StringUtils.isEmpty(vo.getCardStartTime()) || StringUtils.isEmpty(vo.getCardEndTime())){ return new RestResult(Constant.FAILED, "证件有效期不能为空"); } } List> auditNodeList = getNextAuditNodeRole(vo); vo.setDescription(auditNodeList.get(0).get("checkName")); String examineBatch = vo.getExamineBatch(); String nextExamineBatch =String.valueOf(Integer.parseInt(examineBatch)); // check_operate -1.代表已无审核流程 0.无操作人员审核 1.代表制卡经办人审核 2.代表制卡经办人抄送 String checkOperate = auditNodeList.get(0).get("checkOperate"); String nextCheckOperate = auditNodeList.get(1).get("checkOperate"); // 添加审核记录 addExamineData(vo); if(Objects.equals(vo.getExamineState(), "1") && Objects.equals(checkOperate, "0") && Objects.equals(nextCheckOperate, "0")){ // 无操作人员审核->无操作人员审核 vo.setExamineBatch(nextExamineBatch); vo.setCheckRole(auditNodeList.get(1).get("checkRole")); vo.setExamineState("0"); }else if(Objects.equals(vo.getExamineState(), "1") && Objects.equals(checkOperate, "0") && Objects.equals(nextCheckOperate, "1")){ // 无操作人员审核->制卡经办人审核 vo.setExamineBatch(nextExamineBatch); vo.setCheckRole(auditNodeList.get(1).get("checkRole")); vo.setExamineState("0"); }else if(Objects.equals(vo.getExamineState(), "1") && Objects.equals(checkOperate, "1") && Objects.equals(nextCheckOperate, "0")){ // 制卡经办人审核->无操作人员审核 vo.setExamineBatch(nextExamineBatch); vo.setCheckRole(auditNodeList.get(1).get("checkRole")); vo.setExamineState("0"); // 添加制卡经办人的ID vo.setOperCardId(vo.getUserId()); }else if(Objects.equals(vo.getExamineState(), "1") && Objects.equals(checkOperate, "0") && Objects.equals(nextCheckOperate, "2")){ // 无操作人员审核->制卡经办人填写数据 vo.setExamineBatch(nextExamineBatch); vo.setCheckRole(auditNodeList.get(1).get("checkRole")); vo.setExamineState("0"); }else if(Objects.equals(vo.getExamineState(), "1") && Objects.equals(checkOperate, "1") && Objects.equals(nextCheckOperate, "2")){ // 制卡经办人审核->制卡经办人填写数据 vo.setExamineBatch(nextExamineBatch); vo.setCheckRole(auditNodeList.get(1).get("checkRole")); vo.setExamineState("1"); // 添加制卡经办人的ID vo.setOperCardId(vo.getUserId()); }else if(Objects.equals(vo.getExamineState(), "1") && Objects.equals(checkOperate, "2") && Objects.equals(nextCheckOperate, "-1")){ // 制卡经办人填写数据->已无审核节点(审批流程结束) vo.setExamineState("1"); }else if(Objects.equals(vo.getExamineState(), "1") && Objects.equals(checkOperate, "2") && Objects.equals(nextCheckOperate, "0")){ // 制卡经办人填写数据->无操作人员审核(默认审批流程结束) vo.setExamineState("1"); }else if(Objects.equals(vo.getExamineState(), "1") && Objects.equals(checkOperate, "0") && Objects.equals(nextCheckOperate, "-1")){ // 无操作人员审核->已无审核节点(审批流程结束) vo.setExamineState("1"); } // 更新办卡/办证数据 updateCardAuditData(vo); } catch (Exception e) { e.printStackTrace(); // 手动回滚异常 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return new RestResult(Constant.FAILED, "操作失败"); } return new RestResult(Constant.SUCCESS, "操作成功"); } /** * 判断当前用户是否具有审核权限 * @return */ public Boolean isHasAuditAuth(CardVo vo){ try { if(Objects.equals(vo.getExamineBatch(), "1")){ // 第一批次审核已经指定了审核人-判断当前登录人和审核人是否一致 if(!Objects.equals(vo.getUserId(), vo.getCheckUserId())){ return true; } }else{ // 制卡经办人填写备注、证件有效期等操作 if(Objects.equals(vo.getOperType(), "2")){ if(!Objects.equals(vo.getUserId(), vo.getCheckUserId())){ return true; } } // 其余审核批次指定角色 String sql = "SELECT COUNT(*) FROM GREEN_HOUSE_CHECK_ROLE " + " WHERE USER_ID = ? AND ROLE_ID = ?"; Integer result = iHibernateDao.queryForIntWithSql(sql, new Object[] { vo.getUserId(),vo.getCheckRole()}); if(Objects.equals(result, 0)){ return true; } } } catch (Exception e) { e.printStackTrace(); } return true; } /** * 判断是否重审核 * @return */ public Boolean isRepeatAudit(CardVo vo){ Boolean isFlag = false; try { String sql = "SELECT COUNT(*) FROM GREEN_CARD WHERE DATA_ID = ? AND EXAMINE_BATCH > ?"; Integer result = iHibernateDao.queryForIntWithSql(sql, new Object[] { vo.getDataId(),vo.getExamineBatch()}); if(result > 0){ isFlag = true; } } catch (Exception e) { e.printStackTrace(); } return isFlag; } /** * 查询当前审批节点和下一审批节点 * @param vo * @return */ public List> getNextAuditNodeRole(CardVo vo){ try { String examineBatch = vo.getExamineBatch(); String nextExamineBatch = String.valueOf(Integer.parseInt(examineBatch) + 1); String sql = "SELECT ghcd.CHECK_ROLE AS \"checkRole\",ghcd.CHECK_NAME AS \"checkName\"," + " ghcd.CHECK_OPERATE AS \"checkOperate\",ghc.CHECK_NUM AS \"checkNum\" " + " FROM GREEN_HOUSE_CHECK_DETAILS ghcd" + " LEFT JOIN GREEN_HOUSE_CHECK ghc ON ghcd.CHECK_ID = ghc.CHECK_ID" + " WHERE ghcd.CHECK_ID = ? AND ghcd.CHECK_SORT IN (?,?) ORDER BY ghcd.CHECK_SORT"; List> list = iHibernateDao.queryForListWithSql(sql, new Object[] { vo.getCheckId(),examineBatch,nextExamineBatch}); if(CollectionUtils.isNotEmpty(list) && list.size() == 1){ Map map = new HashMap(); map.put("checkOperate", "-1"); list.add(map); } return list; } catch (Exception e) { e.printStackTrace(); } return null; } /** * 添加审批节点数据 * @param vo */ public void addExamineData(CardVo vo){ String uuid = UUID.randomUUID().toString().replace("-", ""); String sql = "INSERT INTO GREEN_CARD_EXAMINE(ID,CARD_ID,USER_ID,USER_NAME,EXAMINE_STATE,EXAMINE_OPINION," + "EXAMINE_TIME,DEL_FLAG,EXAMINE_BATCH,BATCH_DESCRIPTION) " + "VALUES(?,?,?,?,?,?,?,0,?,?) "; iHibernateDao.executeSqlUpdate(sql,new Object[] { uuid, vo.getDataId(), vo.getUserId(), vo.getUserName(), vo.getExamineState(), vo.getExamineOpinion(), DateTimeHelper.getNowDate(), vo.getExamineBatch(), vo.getDescription() }); } /** * 更新办卡、办证的审批状态、审批节点、及其他数据 * @param vo */ public void updateCardAuditData(CardVo vo){ List parameter = new ArrayList(); String sql = "UPDATE GREEN_CARD SET EXAMINE_BATCH = ?,EXAMINE_STATE = ?,CHECK_ROLE = ?"; parameter.add(vo.getExamineBatch()); parameter.add(vo.getExamineState()); parameter.add(vo.getCheckRole()); if(StringUtils.isNotBlank(vo.getActualBackTime())){ // 实际归还时间 parameter.add(vo.getActualBackTime()); sql += ",ACTUAL_BACK_TIME = ?"; } if(StringUtils.isNotBlank(vo.getRemark())){ // 备注 parameter.add(vo.getRemark()); sql += ",REMARK = ?"; } if(StringUtils.isNotBlank(vo.getCardStartTime())){ // 证件有效期开始时间 parameter.add(vo.getCardStartTime()); sql += ",CARD_START_TIME = ?"; } if(StringUtils.isNotBlank(vo.getCardEndTime())){ // 证件有效期结束时间 parameter.add(vo.getCardEndTime()); sql += ",CARD_END_TIME = ?"; } if(StringUtils.isNotBlank(vo.getOperCardId())){ // 制卡经办人 parameter.add(vo.getOperCardId()); sql += ",OPER_CARD_ID = ?"; } sql += " WHERE DATA_ID = ?"; iHibernateDao.executeSqlUpdate(sql,parameter.toArray()); } /** * 获取抄送人信息 * @param vo * @param examineBatch * @return */ public List> getSendUserInfo(CardVo vo){ try { String sql = "SELECT USER_ID AS \"userId\",USER_NAME AS \"userName\" " + " FROM GREEN_CARD_EXAMINE " + " WHERE CARD_ID = ? AND USER_ID = ?"; List> list = iHibernateDao.queryForListWithSql(sql, new Object[] { vo.getDataId(),vo.getUserId()}); return list; } catch (Exception e) { e.printStackTrace(); } return null; } /** * 抄送制卡经办人 * * @param vo */ public void pushInfo2(CardVo vo) { String title = "" + vo.getCardType() + "审批通过"; String text = "您好," + vo.getCardType() + "申请审批已通过,请点击查看。"; String url = "/pages/access-card/card-record"; aliasManageController.pushToSingle(vo.getCheckUserId(), title, text, url); } /** * 查询未审批和已审批的数据 * @param vo * @return */ public RestResult getAuditData(CardVo vo) { switch (vo.getType()) { case "0": return getUnapprovedData(vo); case "1": return getApprovedData(vo); default: break; } return new RestResult(Constant.FAILED, "查询失败"); } /** * 未审批数据 * @param vo * @return */ public RestResult getUnapprovedData(CardVo vo){ try { // 获取当前登录人的角色 List aduitRoles = new ArrayList(); String userId = vo.getUserId(); List parameter = new ArrayList(); String sql = " SELECT * FROM (SELECT ROWNUM num,A.* FROM ( " + " SELECT * FROM (" + " SELECT MAX(gc.DATA_ID) AS \"dataId\",MAX(gc.CARD_TYPE) AS \"carType\"," + " MAX(gc.TYPE_NAME) AS \"typeName\",MAX(gc.APPLY_TIME) AS \"applyTime\"," + " MAX(gc.EXAMINE_BATCH) AS \"examineBatch\",MAX(gc.EXAMINE_STATE) AS \"examineState\"," + " MAX(gc.CARD_STATUS) AS \"cardStatus\",MAX(gc.USER_NAME) AS \"userName\"" + " FROM GREEN_CARD gc " + " WHERE (gc.EXAMINE_BATCH = '1' AND gc.EXAMINE_STATE = '0' AND gc.EXAMINE_PERSON_ID = ?) OR" + " (gc.EXAMINE_BATCH != '1' AND gc.OPER_TYPE = '2' AND gc.EXAMINE_STATE = '0' AND gc.OPER_CARD_ID = ?) OR" + " (gc.EXAMINE_BATCH != '1' AND gc.OPER_TYPE IN ('0','1') AND gc.EXAMINE_STATE = '0' AND gc.CHECK_ROLE IN ("+handlePlaceholder(aduitRoles)+")) OR" + " GROUP BY gc.DATA_ID" + ") B ORDER BY B.\"applyTime\" DESC) " + " A WHERE ROWNUM <= ?) WHERE num > ?"; System.err.println(sql); Integer pageSize = vo.getPageSize(); Integer pageNum = vo.getPageNum(); Integer page = (pageNum - 1) * pageSize; Integer limit = pageNum * pageSize; parameter.add(userId); parameter.add(userId); if(CollectionUtils.isEmpty(aduitRoles)){ parameter.add("-1"); }else{ for (int i = 0; i < aduitRoles.size(); i++) { parameter.add(aduitRoles.get(i)); } } parameter.add(limit); parameter.add(page); List> list = iHibernateDao.queryForListWithSql(sql,parameter.toArray()); return new RestResult(Constant.SUCCESS, "查询成功", list); } catch (Exception e) { e.printStackTrace(); return new RestResult(Constant.FAILED, "查询失败"); } } /** * 已审批数据 * @param vo * @return */ public RestResult getApprovedData(CardVo vo){ try { List parameter = new ArrayList(); String userId = vo.getUserId(); String sql = " SELECT * FROM (SELECT ROWNUM num,A.* FROM ( " + " SELECT * FROM (" + " SELECT MAX(gc.DATA_ID) AS \"dataId\",MAX(gc.CARD_TYPE) AS \"carType\"," + " MAX(gc.TYPE_NAME) AS \"typeName\",MAX(gc.APPLY_TIME) AS \"applyTime\"," + " MAX(gc.EXAMINE_BATCH) AS \"examineBatch\",MAX(gc.EXAMINE_STATE) AS \"examineState\"," + " MAX(gc.CARD_STATUS) AS \"cardStatus\",MAX(gc.USER_NAME) AS \"userName\"" + " FROM GREEN_CARD_EXAMINE gce " + " LEFT JOIN GREEN_CARD gc ON gc.ID = gce.CARD_ID " + " WHERE gce.USER_ID = ?" // + " (gc.CARD_TYPE IN ('VIP贵宾','临时出入证','施工出入证') AND gc.EXAMINE_BATCH IN ('1','2','3') AND gce.USER_ID = ? ) OR" // + " (gc.CARD_TYPE IN ('VIP贵宾','临时出入证','施工出入证') AND gc.EXAMINE_BATCH = '4' AND gc.EXAMINE_STATE = '0' AND gce.USER_ID = '0' ) OR" // + " (gc.CARD_TYPE IN ('VIP贵宾','临时出入证','施工出入证') AND gc.EXAMINE_BATCH = '4' AND gc.EXAMINE_STATE = '1' AND gce.USER_ID = ? )" + " GROUP BY gc.DATA_ID" + ") B ORDER BY B.\"applyTime\" DESC) " + " A WHERE ROWNUM <= ?) WHERE num > ?"; System.err.println(sql); Integer pageSize = vo.getPageSize(); Integer pageNum = vo.getPageNum(); Integer page = (pageNum - 1) * pageSize; Integer limit = pageNum * pageSize; parameter.add(userId); parameter.add(limit); parameter.add(page); List> list = iHibernateDao.queryForListWithSql(sql, parameter.toArray()); return new RestResult(Constant.SUCCESS, "查询成功", list); } catch (Exception e) { e.printStackTrace(); return new RestResult(Constant.FAILED, "查询失败"); } } /** * 查询当前登录人的审批角色 ROLE_TYPE为3是审批角色 * @return */ public List getCurrentUserRole(CardVo vo){ List dataList = new ArrayList(); try { String sql = "SELECT ghcr.USER_ID AS \"userId\",ghcr.ROLE_ID AS \"roleId\" " + " FROM GREEN_HOUSE_CHECK_ROLE ghcr" + " LEFT JOIN GREEN_ROLE gr ON ghcr.ROLE_ID = gr.ID AND gr.IS_DELETED = 'N'" + " WHERE ghcr.USER_ID = ? AND gr.IS_DELETED = 'N' AND gr.ROLE_TYPE = '3'"; List> list = iHibernateDao.queryForListWithSql(sql, new Object[] { vo.getUserId()}); if(CollectionUtils.isNotEmpty(list)){ for (int i = 0; i < list.size(); i++) { dataList.add(list.get(i).get("roleId")); } } } catch (Exception e) { e.printStackTrace(); } return dataList; } /** * 查询历史填写项目 * @param vo * @return */ public RestResult getHistoryPros(CardVo vo) { try { String sql = "SELECT DISTINCT PRO_NAME AS \"proName\"" + " FROM GREEN_CARD WHERE PRO_NAME IS NOT NULL"; List> list = iHibernateDao.queryForListWithSql(sql); return new RestResult(Constant.SUCCESS, "查询成功", list); } catch (Exception e) { e.printStackTrace(); return new RestResult(Constant.FAILED, "查询失败"); } } /** * 查询当前登录人所在部门 * @param vo * @return */ public List> getDeptByUser(CardVo vo) { try { List parameter = new ArrayList(); String sql = "SELECT ID AS \"id\",DEPARTMENT_ID AS \"departmentId\"" + " FROM GREEN_USER_INFO WHERE ID = ? AND IS_DELETED = 'N'"; parameter.add(vo.getUserId()); List> list = iHibernateDao.queryForListWithSql(sql,parameter.toArray()); return list; } catch (Exception e) { e.printStackTrace(); return null; } } /** * 处理占位符 * @return */ public String handlePlaceholder(List list){ if(CollectionUtils.isEmpty(list)){ return "?"; } StringBuffer sb = new StringBuffer(); for (int i = 0; i < list.size(); i++) { sb.append("?").append(","); } // 检查最后一个字符是否是逗号 if (sb.length() > 0 && sb.charAt(sb.length() - 1) == ',') { // 移除最后一个字符 sb.deleteCharAt(sb.length() - 1); } return sb.toString(); } /** * 更新卡状态 2.制卡完成 3.已领卡 * @param vo * @return */ public RestResult updateCardStatus(CardVo vo) { try { List parameter = new ArrayList(); String sql = "UPDATE GREEN_CARD SET CARD_STATUS = ? WHERE DATA_ID = ?"; parameter.add(vo.getCardStatus()); parameter.add(vo.getDataId()); iHibernateDao.executeSqlUpdate(sql,parameter.toArray()); return new RestResult(Constant.SUCCESS, "操作成功"); } catch (Exception e) { e.printStackTrace(); // 手动回滚异常 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return new RestResult(Constant.FAILED, "操作失败"); } } }