hz-zhhq-app-service/greenH5modul/src/com/jysoft/card/service/NewCardService.java

1422 lines
56 KiB
Java

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<Map<String, String>> list = getDeptByUser(vo);
List<CardAuditVo> dataList = new ArrayList<CardAuditVo>();
List<Object> parameter = new ArrayList<Object>();
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>(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<CardAuditVo> dataList = new ArrayList<CardAuditVo>();
List<Object> parameter = new ArrayList<Object>();
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>(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<UserInfoVo> 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<UserInfoVo> 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<UserInfoVo> 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<UserInfoVo> 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<String> 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<CardVo> dataList = new ArrayList<CardVo>();
CardVo cardVo = new CardVo();
List<Object> parameter = new ArrayList<Object>();
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>(CardVo.class));
if (CollectionUtils.isNotEmpty(dataList)) {
// 查询基本信息
cardVo = dataList.get(0);
// 查询出入区域
String accessArea = getAreaData(vo);
cardVo.setAccessArea(accessArea);
// 查询人员信息
List<CardVo.UserInfoVo> userInfoVos = new ArrayList<CardVo.UserInfoVo>();
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>(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<AuditVo> 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<CardVo> dataList = new ArrayList<CardVo>();
CardVo cardVo = new CardVo();
List<Object> parameter = new ArrayList<Object>();
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>(CardVo.class));
if (CollectionUtils.isNotEmpty(dataList)) {
// 查询基本信息
cardVo = dataList.get(0);
// 查询出入区域
String accessArea = getAreaData(vo);
cardVo.setAccessArea(accessArea);
// 查询人员信息
List<CardVo.UserInfoVo> userInfoVos = new ArrayList<CardVo.UserInfoVo>();
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>(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<AuditVo> 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<CardVo> dataList = new ArrayList<CardVo>();
CardVo cardVo = new CardVo();
List<Object> parameter = new ArrayList<Object>();
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>(CardVo.class));
if (CollectionUtils.isNotEmpty(dataList)) {
// 查询基本信息
cardVo = dataList.get(0);
// 处理附件照片
String documentation = cardVo.getDocumentation();
if (StringUtils.isNotBlank(documentation)) {
cardVo.setDocumentation(baseService.getImageBase64(documentation));
}
// 查询审核详情
List<AuditVo> 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<CardVo> dataList = new ArrayList<CardVo>();
CardVo cardVo = new CardVo();
List<Object> parameter = new ArrayList<Object>();
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>(CardVo.class));
if (CollectionUtils.isNotEmpty(dataList)) {
// 查询基本信息
cardVo = dataList.get(0);
// 查询人员信息
List<CardVo.UserInfoVo> userInfoVos = new ArrayList<CardVo.UserInfoVo>();
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>(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<AuditVo> 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<CardVo> dataList = new ArrayList<CardVo>();
CardVo cardVo = new CardVo();
List<Object> parameter = new ArrayList<Object>();
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>(CardVo.class));
if (CollectionUtils.isNotEmpty(dataList)) {
// 查询基本信息
cardVo = dataList.get(0);
// 查询人员信息
List<CardVo.UserInfoVo> userInfoVos = new ArrayList<CardVo.UserInfoVo>();
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>(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<AuditVo> 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<Map<String, String>> 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<Map<String, String>> 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<Map<String, String>> list, List<Map<String, String>> list2) {
List<Map<String, Object>> returnList = new ArrayList<Map<String, Object>>();
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<String, Object> data = new HashMap<String, Object>();
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<CardVo.AuditVo> getAudits(CardVo vo) {
List<CardVo.AuditVo> dataList = new ArrayList<CardVo.AuditVo>();
List<Object> parameter = new ArrayList<Object>();
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>(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<Map<String, Object>> 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<Map<String, Object>> 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<Map<String, Object>> 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<Map<String, Object>> 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<Map<String, String>> 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<Map<String, String>> 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<Map<String, String>> 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<Map<String, String>> 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<Map<String, String>> 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<Map<String, String>> list = iHibernateDao.queryForListWithSql(sql,
new Object[] { vo.getCheckId(),examineBatch,nextExamineBatch});
if(CollectionUtils.isNotEmpty(list) && list.size() == 1){
Map<String, String> map = new HashMap<String, String>();
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<Object> parameter = new ArrayList<Object>();
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<Map<String, String>> 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<Map<String, String>> 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<String> aduitRoles = new ArrayList<String>();
String userId = vo.getUserId();
List<Object> parameter = new ArrayList<Object>();
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<Map<String, Object>> 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<Object> parameter = new ArrayList<Object>();
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<Map<String, Object>> 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<String> getCurrentUserRole(CardVo vo){
List<String> dataList = new ArrayList<String>();
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<Map<String, String>> 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<Map<String, String>> 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<Map<String, String>> getDeptByUser(CardVo vo) {
try {
List<Object> parameter = new ArrayList<Object>();
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<Map<String, String>> list = iHibernateDao.queryForListWithSql(sql,parameter.toArray());
return list;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 处理占位符
* @return
*/
public String handlePlaceholder(List<String> 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<Object> parameter = new ArrayList<Object>();
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, "操作失败");
}
}
}