package com.jysoft.card.service; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.UUID; import java.util.stream.Collectors; import javax.annotation.Resource; import org.apache.commons.collections.CollectionUtils; import org.hibernate.util.StringHelper; import org.json.JSONArray; import org.json.JSONObject; import org.springframework.beans.factory.annotation.Autowired; 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.visitor.util.ArtemisPost; 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.po.GreenAccessControl; import com.nationalelectric.greenH5.po.GreenRentHouseApply; import com.nationalelectric.greenH5.po.GreenVisitor; import com.nationalelectric.greenH5.po.VisitorEventNotify; import com.nationalelectric.greenH5.po.VisitorEventNotify.ParamsDTO.EventsDTO; import com.nationalelectric.greenH5.po.VisitorEventNotify.ParamsDTO.EventsDTO.DataDTO; import com.nationalelectric.greenH5.utils.Base64Utils; import com.nationalelectric.greenH5.utils.DateTimeHelper; import com.nationalelectric.greenH5.utils.DateUtil; import com.sgcc.uap.persistence.IHibernateDao; import com.sgcc.uap.utils.DateUtils; import com.sgcc.uap.utils.StringUtils; import oracle.jdbc.logging.annotations.StringBlinder; /** * @author bonus * @date 2023-06-12 * @功能 访客管理 */ @Service public class CardService { @Autowired private IHibernateDao iHibernateDao; @Resource private AliasManageController aliasManageController; @Autowired private BaseServiceImpl baseService; /** * 添加门禁卡 * * @param entity * 数据 * @return 响应数据 */ @Transactional(rollbackFor = Exception.class) public RestResult addCard(GreenCard entity) { StringBuilder sqlString = new StringBuilder(); try { // 新办卡-门禁卡校验 String sql = "SELECT COUNT(*) FROM GREEN_CARD WHERE PERSONNEL_PHONE = '" + entity.getPersonnelPhone() + "' AND TYPE_NAME = '" + entity.getTypeName() + "'" + " AND CARD_TYPE = '" + entity.getCardType() + "' AND TYPE = '1'"; // 新办卡 门卡类型 同一手机号只能限制办理一张 if (Objects.equals("新办卡", entity.getTypeName())) { // 1. 申请的门禁卡处于审批中 /* * String checkSql = sql + " AND EXAMINE_STATE = '0'"; int * result = iHibernateDao.queryForIntWithSql(checkSql); * if(result > 0){ return new RestResult(Constant.FAILED, * "申请人申请的"+entity.getCardType()+"处于审核中"); } */ // 2. 申请的门禁卡处于制卡完成状态(未领取) /* * String checkSql2 = sql + " AND CARD_STATUS = '2'"; int * result2 = iHibernateDao.queryForIntWithSql(checkSql2); * if(result2 > 0){ return new RestResult(Constant.FAILED, * "申请人申请的"+entity.getCardType()+"已制卡完成,未领取"); } */ // 3. 申请的门禁卡已领取 /* * String checkSql3 = sql + " AND CARD_STATUS = '3'"; int * result3 = iHibernateDao.queryForIntWithSql(checkSql3); * if(result3 > 0){ return new RestResult(Constant.FAILED, * "申请人申请的"+entity.getCardType()+"已存在"); } */ /* * // 4. 门禁卡已挂失 String checkSql4 = sql + * " AND CARD_STATUS = '4'"; int result4 = * iHibernateDao.queryForIntWithSql(checkSql4); if(result4 > 0){ * return new RestResult(Constant.FAILED, * "申请人申请的"+entity.getCardType()+"已挂失,后续操作,请在补办卡/卡挂失中进行办理"); } */ } String batchSql = "SELECT ID,DATA_TYPE,DATA_CODE,DATA_VALUE FROM GREEN_DICTIONARY_INFO WHERE DATA_TYPE = 'cardExamSwitch' AND IS_DELETED = 'N' AND DATA_VALUE = 1 ORDER BY DATA_CODE ASC "; List> list = iHibernateDao.queryForListWithSql(batchSql); String examineBatch = "0"; if (list.size() > 0) { examineBatch = list.get(0).get("DATA_CODE"); } if (StringUtils.isBlank(entity.getExaminePersonId())) { return new RestResult(Constant.FAILED, "请选择审核人"); } if (Objects.equals("新办证", entity.getTypeName()) && StringUtils.isNotBlank(entity.getAccessArea())) { String accessArea = entity.getAccessArea(); if (accessArea.contains("后勤中心")) { entity.setAccessArea(accessArea.replace("后勤中心", "后勤楼")); } } sqlString.append( "INSERT INTO GREEN_CARD (ID, USER_ID, USER_NAME, PHONE, ORG_ID, ORG_NAME, TYPE, UNIT, PERSONNEL, PERSONNEL_PHONE, MATTER, ACCESS_AREA, START_TIME, END_TIME, APPLY_TIME, EXAMINE_BATCH, EXAMINE_STATE, EXAMINE_PERSON_ID, EXAMINE_PERSON_NAME,CARD_CODE,CARD_TYPE ,TYPE_NAME,PHOTO,ID_PHOTO,IS_ENABLE_FACE,CARD_STATUS,DOCUMENTATION) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?, ?,?,?,?,?,?,?)"); String uuid = UUID.randomUUID().toString().replace("-", ""); iHibernateDao.executeSqlUpdate(sqlString.toString(), new Object[] { uuid, entity.getUserId(), entity.getUserName(), entity.getPhone(), entity.getOrgId(), entity.getOrgName(), entity.getType(), entity.getUnit(), entity.getPersonnel(), entity.getPersonnelPhone(), entity.getMatter(), entity.getAccessArea(), entity.getStartTime(), entity.getEndTime(), DateTimeHelper.getNowDate(), examineBatch, "0", entity.getExaminePersonId(), entity.getExaminePersonName(), entity.getCardCode(), entity.getCardType(), entity.getTypeName(), entity.getPhoto(), entity.getIdPhoto(), entity.getIsEnableFace(), "0", entity.getDocumentation() }); System.err.println("新办卡类型:" + entity.getTypeName()); // 出入区域 if (Objects.equals("新办卡", entity.getTypeName()) && StringUtils.isNotBlank(entity.getAccessArea())) { String[] areaIdsArr = entity.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[] { uuid, areaId }); } } String title = "" + entity.getTypeName() + "申请"; String text = "您好,您有新的" + entity.getTypeName() + "申请需要审批,请点击查看。"; String url = "/pages/access-card/card-record?examineBatch=" + examineBatch; aliasManageController.pushToSingle(entity.getExaminePersonId(), title, text, url); return new RestResult(Constant.SUCCESS, "添加成功"); } catch (Exception e) { e.printStackTrace(); // 手动回滚异常 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return new RestResult(Constant.FAILED, "添加失败"); } } /** * 通过id获取来访记录 * * @param entity * 数据 * @return 响应数据 */ public RestResult getCard(GreenCard entity) { try { System.err.println("门禁卡详情"); List params = new ArrayList(); String sql = "SELECT * FROM GREEN_CARD WHERE ID = ? ORDER BY APPLY_TIME desc "; params.add(entity.getId()); List> list = iHibernateDao.queryForListWithSql(sql, params.toArray()); if (list.size() > 0) { String id = String.valueOf(list.get(0).get("ID")); String pictureString = list.get(0).get("PHOTO") == null ? "" : list.get(0).get("PHOTO").toString(); String documentation = list.get(0).get("DOCUMENTATION") == null ? "" : list.get(0).get("DOCUMENTATION").toString(); String idPhoto = list.get(0).get("ID_PHOTO") == null ? "" : list.get(0).get("ID_PHOTO").toString(); String[] strs = idPhoto.split(","); String photo = ""; for (String string : strs) { photo += baseService.getImageBase64(string) + ","; } photo = photo.substring(0, photo.lastIndexOf(",")); list.get(0).put("PHOTO", baseService.getImageBase64(pictureString)); list.get(0).put("ID_PHOTO", photo); list.get(0).put("DOCUMENTATION", baseService.getImageBase64(documentation)); System.err.println("人脸照片:" + baseService.getImageBase64(pictureString)); System.err.println("证明文件:" + baseService.getImageBase64(documentation)); System.err.println("身份证照片:" + photo); System.err.println("-------------------------"); // 获取审核详情 String sqls = "SELECT * from GREEN_CARD_EXAMINE where DEL_FLAG = 0 and CARD_ID = ? order by EXAMINE_BATCH asc "; List> lists = iHibernateDao.queryForListWithSql(sqls, new Object[] { list.get(0).get("ID").toString() }); if (lists.size() > 0) { list.get(0).put("detail", lists.toArray()); } if (Objects.equals("新办卡", String.valueOf(list.get(0).get("TYPE_NAME"))) || Objects.equals("补办卡", String.valueOf(list.get(0).get("TYPE_NAME")))) { System.err.println("我进出入区域了"); // 出入区域 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 = '" + id + "' 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); list.get(0).put("ACCESS_AREA", accessArea); } } } return new RestResult(Constant.SUCCESS, "查询成功", list); } catch (Exception e) { e.printStackTrace(); System.err.println(e.getMessage()); return new RestResult(Constant.FAILED, "查询失败"); } } /** * @MethodName: setAreaData * @Description: 出入区域处理 * @author cwchen * @param list * @return String * @date 2024-05-14 03:40:48 */ 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)) { // GreenAccessControl vo = new GreenAccessControl(); Map data = new HashMap(); // vo.setAddress(list2.get(i).get("name")); data.put("address", list2.get(i).get("name")); // vo.setAddressId(id); data.put("addressId", id); // vo.setArea(area.substring(0,area.lastIndexOf(","))); data.put("area", area.substring(0, area.lastIndexOf(","))); // vo.setAreaIds(areaId.substring(0,areaId.lastIndexOf(","))); data.put("areaIds", areaId.substring(0, areaId.lastIndexOf(","))); // System.err.println(vo); System.err.println("hhhh"); returnList.add(data); System.err.println("集合数量" + returnList.size()); } } } catch (Exception e) { e.printStackTrace(); System.err.println("区域处理"); } return JSON.toJSONString(returnList); } /** * 修改门禁信息状态 * * @param entity * 数据 * @return 响应数据 */ public RestResult updateCard(GreenCard entity) { try { String uuid = UUID.randomUUID().toString().replaceAll("-", ""); if (StringUtils.isBlank(entity.getExamineState())) { return new RestResult(Constant.FAILED, "审核状态不能为空"); } if (StringUtils.isBlank(entity.getExamineBatch())) { return new RestResult(Constant.FAILED, "审核批次不能为空"); } // 查询下一审核批次 String batchSql = "SELECT ID,DATA_TYPE,DATA_CODE,DATA_VALUE FROM GREEN_DICTIONARY_INFO WHERE DATA_TYPE = 'cardExamSwitch' " + "AND IS_DELETED = 'N' AND DATA_VALUE = 1 AND DATA_CODE > ? ORDER BY DATA_CODE ASC "; List> list = iHibernateDao.queryForListWithSql(batchSql, new Object[] { entity.getExamineBatch() }); // 更新所要补卡的注销状态 String carTypeSql = "SELECT ID,LAST_CARD_ID FROM GREEN_CARD WHERE ID = '" + entity.getId() + "' "; List> carTypeList = iHibernateDao.queryForListWithSql(carTypeSql); // 不为空则更改审核批次,否则更改申请单的审核状态 if (list.size() > 0) { if ("1".equals(entity.getExamineState())) { String lastExamineBatch = list.get(0).get("DATA_CODE"); // 后勤领导审批通过后,卡状态为待制卡状态 String cardStatusString = "0"; if (Objects.equals("2", entity.getExamineBatch())) { cardStatusString = "1"; } String updateBatchSql = "UPDATE GREEN_CARD SET EXAMINE_BATCH = ?,CARD_STATUS = ? WHERE ID = ? "; iHibernateDao.executeSqlUpdate(updateBatchSql, new Object[] { lastExamineBatch, cardStatusString, entity.getId() }); } else if ("2".equals(entity.getExamineState())) { String updateStateSql = "UPDATE GREEN_CARD SET EXAMINE_STATE = ? WHERE ID = ? "; iHibernateDao.executeSqlUpdate(updateStateSql, new Object[] { entity.getExamineState(), entity.getId() }); /* * // 补办卡被审批不通过时 重置补办卡状态 * if(CollectionUtils.isNotEmpty(carTypeList)){ Map mapData = carTypeList.get(0); String * lastCardIdString = mapData.get("LAST_CARD_ID"); * if(org.apache.commons.lang3.StringUtils.isNotBlank( * lastCardIdString)){ String reissueCardSql = * "UPDATE GREEN_CARD SET IS_LOG_OFF = NULL WHERE ID = '" * +lastCardIdString+"' "; * iHibernateDao.executeSqlUpdate(reissueCardSql); } } */ } } else { String updateStateSql = "UPDATE GREEN_CARD SET EXAMINE_STATE = ?,CARD_STATUS = ? WHERE ID = ? "; iHibernateDao.executeSqlUpdate(updateStateSql, new Object[] { entity.getExamineState(), "2", entity.getId() }); // 补办卡制卡完成时 更新补办卡状态 if (CollectionUtils.isNotEmpty(carTypeList)) { Map mapData = carTypeList.get(0); String lastCardIdString = mapData.get("LAST_CARD_ID"); if (org.apache.commons.lang3.StringUtils.isNotBlank(lastCardIdString)) { String reissueCardSql = "UPDATE GREEN_CARD SET IS_LOG_OFF = '1' WHERE ID = '" + lastCardIdString + "' "; iHibernateDao.executeSqlUpdate(reissueCardSql); } } } // 查询当前批次描述 String description = ""; String sqls = "SELECT DATA_CODE as \"id\",DATA_VALUE as \"name\",DESCRIPTION as \"description\" FROM GREEN_DICTIONARY_INFO " + "WHERE DATA_TYPE = 'cardExamSwitch' AND IS_DELETED = 'N' and DATA_CODE = ? "; List> lists = iHibernateDao.queryForListWithSql(sqls, new Object[] { entity.getExamineBatch() }); if (lists.size() > 0) { description = lists.get(0).get("description"); } // 插入数据 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, entity.getId(), entity.getUserId(), entity.getUserName(), entity.getExamineState(), entity.getExamineOpinion(), DateTimeHelper.getNowDate(), entity.getExamineBatch(), description }); return new RestResult(Constant.SUCCESS, "操作成功"); } catch (Exception e) { e.printStackTrace(); return new RestResult(Constant.FAILED, "操作失败"); } } /** * 审核记录 * * @param entity * 数据 * @return 响应数据 */ public RestResult getCardByUserId(GreenCard entity) { try { ArrayList paramList = new ArrayList(); int pageSize = entity.getPageSize(); int pageNum = entity.getPageNum(); int page = (pageNum - 1) * pageSize; int limit = pageNum * pageSize; if (StringUtils.isBlank(entity.getExamineState())) { return new RestResult(Constant.FAILED, "审核状态不能为空"); } if (StringUtils.isBlank(entity.getExamineBatch())) { return new RestResult(Constant.FAILED, "审核批次不能为空"); } if ("0".equals(entity.getExamineState())) { String sqlState = "select count(*) from GREEN_DICTIONARY_INFO where data_type = 'cardExamSwitch' and data_code in (?) and data_value = 1 "; int count = iHibernateDao.queryForIntWithSql(sqlState, new Object[] { entity.getExamineBatch() }); if (count == 0) { return new RestResult(Constant.SUCCESS, "操作成功", new ArrayList>()); } } String sql = "select * from (select rn.*,rownum rn from ( " + " SELECT DISTINCT A.*" + " FROM GREEN_CARD A " + " LEFT JOIN (select * from GREEN_CARD_EXAMINE where EXAMINE_BATCH in (?) and DEL_FLAG=0) E ON A.ID = E.CARD_ID " + " WHERE 1=1 "; paramList.add(entity.getExamineBatch()); // 当查询审核批次为1时,只查询审核人为当前userid的数据 if ("1".equals(entity.getExamineBatch())) { sql += "AND A.EXAMINE_PERSON_ID = ? "; paramList.add(entity.getUserId()); } if ("1".equals(entity.getExamineState())) {// 已审核 sql += "and e.ID is not NULL "; } else if ("0".equals(entity.getExamineState())) {// 待审核 sql += "AND A.EXAMINE_STATE = 0 AND A.EXAMINE_BATCH in (?) "; paramList.add(entity.getExamineBatch()); } sql += " ORDER BY A.APPLY_TIME DESC " + " ) rn )where rn>? and rn<=? "; paramList.add(page); paramList.add(limit); System.err.println(sql); List> list = iHibernateDao.queryForListWithSql(sql, paramList.toArray()); for (Map map : list) { String pictureString = map.get("PHOTO") == null ? "" : map.get("PHOTO").toString(); String idPhoto = map.get("ID_PHOTO") == null ? "" : map.get("ID_PHOTO").toString(); String documentation = map.get("DOCUMENTATION") == null ? "" : map.get("DOCUMENTATION").toString(); String[] strs = idPhoto.split(","); String photo = ""; for (String string : strs) { photo += baseService.getImageBase64(string) + ","; } photo = photo.substring(0, photo.lastIndexOf(",")); list.get(0).put("PHOTO", baseService.getImageBase64(pictureString)); list.get(0).put("DOCUMENTATION", baseService.getImageBase64(documentation)); list.get(0).put("ID_PHOTO", photo); } return new RestResult(Constant.SUCCESS, "查询成功", list); } catch (Exception e) { e.printStackTrace(); System.err.println(e.getMessage()); return new RestResult(Constant.FAILED, "查询失败"); } } /** * 获取个人发出的申请门禁记录 * * @param entity * 数据 * @return 响应数据 */ public RestResult getIssueCardByUserId(GreenCard entity) { String sql = "SELECT * FROM (SELECT ROWNUM num,A.* FROM (SELECT gc.* FROM GREEN_CARD gc WHERE gc.USER_ID =? ORDER BY gc.APPLY_TIME DESC ) A WHERE ROWNUM<=?) WHERE num > ? "; try { int pageSize = entity.getPageSize(); int pageNum = entity.getPageNum(); int page = (pageNum - 1) * pageSize; int limit = pageNum * pageSize; List> list = iHibernateDao.queryForListWithSql(sql, new Object[] { entity.getUserId(), limit, page }); /* * String pictureString = list.get(0).get("PHOTO") == null ? "" : * list.get(0).get("PHOTO").toString(); String idPhoto = * list.get(0).get("ID_PHOTO") == null ? "" : * list.get(0).get("ID_PHOTO").toString(); String[] strs = * idPhoto.split(","); String photo = ""; for (String string : strs) * { photo += baseService.getImageBase64(string)+ ","; } photo = * photo.substring(0, photo.lastIndexOf(",")); * list.get(0).put("PHOTO", * baseService.getImageBase64(pictureString)); * list.get(0).put("ID_PHOTO", photo); */ return new RestResult(Constant.SUCCESS, "查询成功", list); } catch (Exception e) { e.printStackTrace(); return new RestResult(Constant.FAILED, "查询失败"); } } /** * 查询出行报备部门拥有审核权限人员 * * @param map * @return */ public RestResult getDeptExamineAuth(GreenCard entity) { try { String depts[] = entity.getDepartmentId().split("/"); String dept = ""; for (String string : depts) { dept = dept + string + "/"; } int lastIndex = dept.lastIndexOf("/"); dept = dept.substring(0, lastIndex); String sql = "SELECT u.id as \"id\",u.REAL_NAME as \"name\" from GREEN_USER_INFO u " + "LEFT JOIN GREEN_USER_ROLE_REL urr ON u.ID = urr.USER_ID AND u.IS_DELETED = 'N' " + "LEFT JOIN GREEN_ROLE_PERMISSION rp ON urr.ROLE_ID = rp.ROLE_ID AND urr.IS_DELETED = 'N' " + "WHERE u.DEPt_ID_url like '%" + dept + "%' AND rp.PERMISSION_ID = '43418' "; // 生产:43418 // 开发:15102 System.err.println(sql); List> list = iHibernateDao.queryForListWithSql(sql); return new RestResult(Constant.SUCCESS, "操作成功", list); } catch (Exception e) { e.printStackTrace(); return new RestResult(Constant.FAILED, "操作失败"); } } /** * 获取服务类型 * * @param entity * 数据 * @return 响应数据 */ public RestResult getCardType(GreenCard entity) { String sql = "SELECT ID,DATA_TYPE ,DATA_CODE,DATA_VALUE,DESCRIPTION,DATA_SORT,CREATOR,MODIFIER,IS_DELETED " + "FROM GREEN_DICTIONARY_INFO WHERE DATA_TYPE ='cardType' AND DATA_CODE = ?"; try { List> list = iHibernateDao.queryForListWithSql(sql, new Object[] { entity.getType() }); return new RestResult(Constant.SUCCESS, "查询成功", list); } catch (Exception e) { e.printStackTrace(); return new RestResult(Constant.FAILED, "查询失败"); } } /** * @MethodName: getAccessControlList * @Description: 门禁卡办理-出入区域 * @author cwchen * @param entity * @return RestResult * @date 2024-05-13 04:41:59 */ public RestResult getAccessControlList(GreenCard entity) { try { String sql = "SELECT ACCESS_ID AS \"ACCESSID\",ACCESS_NAME AS \"ACCESSNAME\" FROM GREEN_ACCESS_CONTROL WHERE ACCESS_LEVEL ='1' AND IS_DELETE = 'N' ORDER BY CREATE_TIME ASC"; System.err.println(sql); List> list = iHibernateDao.queryForListWithSql(sql); if (CollectionUtils.isNotEmpty(list)) { for (int i = 0; i < list.size(); i++) { String accessId = String.valueOf(list.get(i).get("accessId")); String sql2 = "SELECT ACCESS_ID AS \"ACCESSID\",ACCESS_NAME AS \"ACCESSNAME\" FROM GREEN_ACCESS_CONTROL WHERE PARENT_ID = '" + accessId + "' AND ACCESS_LEVEL ='2' AND IS_DELETE = 'N' ORDER BY CREATE_TIME ASC"; System.err.println(sql2); List> childList = iHibernateDao.queryForListWithSql(sql2); list.get(i).put("areaList", childList); } } return new RestResult(Constant.SUCCESS, "查询成功", list); } catch (Exception e) { e.printStackTrace(); System.err.println(e.getMessage()); return new RestResult(Constant.FAILED, "查询失败"); } } /** * @MethodName: updateCardStatusById * @Description: 申请人更新领卡状态 * @author cwchen * @param entity * @return RestResult * @date 2024-05-15 09:56:08 */ @Transactional(rollbackFor = Exception.class) public RestResult updateCardStatusById(GreenCard entity) { try { // cardStatus:3 领卡 4.挂失 if (Objects.equals("3", entity.getCardStatus())) { String sql = "UPDATE GREEN_CARD SET CARD_STATUS = '" + entity.getCardStatus() + "' WHERE ID = '" + entity.getId() + "'"; iHibernateDao.executeSqlUpdate(sql); } else if (Objects.equals("4", entity.getCardStatus())) { String sql = "SELECT * FROM GREEN_GUARD_CARD WHERE UUID='" + entity.getId() + "' AND CARD_STATE = '1'"; List> list = iHibernateDao.queryForListWithSql(sql); if (CollectionUtils.isNotEmpty(list)) { // 添加挂失卡数据 Map dataMap = list.get(0); StringBuilder addSql = new StringBuilder(); addSql.append( "INSERT INTO GREEN_GUARD_LOSS_CARD (UUID, CARD_ID, STAFF_ID, STAFF_NO, NAME, PHONE_NUM, ORG_NAME, CARD_TYPE, CARD_NAME, CARD_ETIME, CARD_STATE, FACE_PHOTO, IS_PUSH) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); iHibernateDao.executeSqlUpdate(addSql.toString(), new Object[] { dataMap.get("UUID"), dataMap.get("CARD_ID"), dataMap.get("STAFF_ID"), dataMap.get("STAFF_NO"), dataMap.get("NAME"), dataMap.get("PHONE_NUM"), dataMap.get("ORG_NAME"), dataMap.get("CARD_TYPE"), dataMap.get("CARD_NAME"), dataMap.get("CARD_ETIME"), dataMap.get("CARD_STATE"), null, "0" }); // 添加补办卡门禁点位 String sql2 = "SELECT * FROM GREEN_MJ_ROLE WHERE CARD_ID='" + entity.getId() + "'"; List> list2 = iHibernateDao.queryForListWithSql(sql2); if (CollectionUtils.isNotEmpty(list2)) { for (int i = 0; i < list2.size(); i++) { StringBuilder addSql2 = new StringBuilder(); addSql2.append("INSERT INTO GREEN_MJ_ROLE_LOSS (CARD_ID, DEVICE_ID) VALUES (?, ?)"); iHibernateDao.executeSqlUpdate(addSql2.toString(), new Object[] { list.get(0).get("UUID"), list2.get(i).get("DEVICE_ID") }); } } // 更新门禁卡与用户关联的卡状态 String updateSql = "UPDATE GREEN_GUARD_CARD_REAL_USER SET IS_LOSS = '1' WHERE CARD_ID = '" + entity.getId() + "'"; iHibernateDao.executeSqlUpdate(updateSql); // 更新门禁卡状态为挂失 String updateSql2 = "UPDATE GREEN_GUARD_CARD SET CARD_STATE = '2' WHERE UUID = '" + entity.getId() + "'"; iHibernateDao.executeSqlUpdate(updateSql2); } } return new RestResult(Constant.SUCCESS, "操作成功"); } catch (Exception e) { e.printStackTrace(); // 手动回滚异常 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return new RestResult(Constant.FAILED, "操作失败"); } } /** * @MethodName: getAllCardList * @Description: 查询卡挂失-列表 * @author cwchen * @param entity * @return RestResult * @date 2024-05-15 11:00:40 */ @SuppressWarnings("unchecked") public RestResult getAllCardList(GreenCard entity) { List> dataList = new ArrayList>(); try { String sql = "SELECT ggc.UUID AS \"id\",ggc.CARD_ID AS \"staffNo\",ggc.NAME AS \"name\",ggc.CARD_NAME AS \"cardName\",ggc.ORG_NAME AS \"orgName\",ggc.PHONE_NUM AS \"phone\",IS_LOSS AS \"isLoss\"" + " FROM GREEN_GUARD_CARD_REAL_USER ggcru" + " LEFT JOIN GREEN_GUARD_CARD ggc ON ggcru.CARD_ID = ggc.UUID" + " WHERE ggcru.USER_ID = ? ORDER BY IS_LOSS ASC"; List> list = iHibernateDao.queryForListWithSql(sql, new Object[] { entity.getUserId() }); if (CollectionUtils.isNotEmpty(list)) { dataList.addAll(list); } return new RestResult(Constant.SUCCESS, "查询成功", dataList); } catch (Exception e) { e.printStackTrace(); return new RestResult(Constant.FAILED, "查询失败"); } } /** * @MethodName: reissueCard * @Description: 补办卡 * @author cwchen * @param entity * @return RestResult * @date 2024-05-15 04:26:42 */ public RestResult reissueCard(GreenCard entity) { StringBuilder sqlString = new StringBuilder(); try { String reissueSql = "SELECT * FROM GREEN_GUARD_LOSS_CARD WHERE UUID = '" + entity.getId() + "'"; List> reissueList = iHibernateDao.queryForListWithSql(reissueSql); if (CollectionUtils.isEmpty(reissueList)) { return new RestResult(Constant.FAILED, "未匹配到补办卡数据"); } Map dataMap = reissueList.get(0); String batchSql = "SELECT ID,DATA_TYPE,DATA_CODE,DATA_VALUE FROM GREEN_DICTIONARY_INFO WHERE DATA_TYPE = 'cardExamSwitch' AND IS_DELETED = 'N' AND DATA_VALUE = 1 ORDER BY DATA_CODE ASC "; List> list = iHibernateDao.queryForListWithSql(batchSql); String examineBatch = "0"; if (list.size() > 0) { examineBatch = list.get(0).get("DATA_CODE"); } if (StringUtils.isBlank(entity.getExaminePersonId())) { return new RestResult(Constant.FAILED, "请选择审核人"); } // 补办卡是否开通人脸权限 String isEnableFace = "0"; String facePhoto = dataMap.get("FACE_PHOTO"); if (StringUtils.isNotBlank(facePhoto)) { isEnableFace = "1"; } // 补办人手机号 /* * String phoneNum = dataMap.get("PHONE_NUM"); String phone = null; * if(StringUtils.isNotBlank(phoneNum) && !Objects.equals("null", * phoneNum)){ phone = phoneNum; } */ sqlString.append( "INSERT INTO GREEN_CARD (ID, USER_ID, USER_NAME, PHONE, ORG_ID, ORG_NAME, TYPE, UNIT, PERSONNEL, PERSONNEL_PHONE, MATTER, ACCESS_AREA, START_TIME, END_TIME, APPLY_TIME, EXAMINE_BATCH, EXAMINE_STATE, EXAMINE_PERSON_ID, EXAMINE_PERSON_NAME,CARD_CODE,CARD_TYPE ,TYPE_NAME,PHOTO,ID_PHOTO,IS_ENABLE_FACE,IS_REISSUE,LAST_CARD_ID,CARD_STATUS) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?, ?,?,?,?,?,?,?,?)"); String uuid = UUID.randomUUID().toString().replace("-", ""); iHibernateDao.executeSqlUpdate(sqlString.toString(), new Object[] { uuid, entity.getUserId(), entity.getUserName(), entity.getPhone(), entity.getOrgId(), entity.getOrgName(), entity.getType(), dataMap.get("ORG_NAME"), dataMap.get("NAME"), entity.getPersonnelPhone(), "补办卡", null, null, null, DateTimeHelper.getNowDate(), examineBatch, "0", entity.getExaminePersonId(), entity.getExaminePersonName(), null, dataMap.get("CARD_NAME"), entity.getTypeName(), dataMap.get("FACE_PHOTO"), null, isEnableFace, "1", entity.getId(), "0" }); // 出入区域 String areaSql = "SELECT * FROM GREEN_MJ_ROLE_LOSS WHERE CARD_ID = '" + entity.getId() + "'"; List> areaList = iHibernateDao.queryForListWithSql(areaSql); if (CollectionUtils.isNotEmpty(areaList)) { for (int i = 0; i < areaList.size(); i++) { String sqlStr = "INSERT INTO CARD_RELA_ACCESS (GREEN_CARD_ID, ACCESS_ID) VALUES (?, ?)"; iHibernateDao.executeSqlUpdate(sqlStr, new Object[] { uuid, areaList.get(i).get("DEVICE_ID") }); } } String title = "补办卡申请"; String text = "您好,您有新的补办卡申请需要审批,请点击查看。"; String url = "/pages/access-card/card-record?examineBatch=" + examineBatch; aliasManageController.pushToSingle(entity.getExaminePersonId(), title, text, url); return new RestResult(Constant.SUCCESS, "添加成功"); } catch (Exception e) { e.printStackTrace(); System.err.println(e.getMessage()); // 手动回滚异常 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return new RestResult(Constant.FAILED, "添加失败"); } } /** * 添加我的卡 * * @param entity * @return */ @Transactional(rollbackFor = Exception.class) @SuppressWarnings("unchecked") public RestResult addMyCard(GreenCard entity) { try { if (Objects.equals(entity.getType(), "1")) { // 新增我的门禁卡 if (StringUtils.isEmpty(entity.getCardNo())) { return new RestResult(Constant.FAILED, "请输入卡号"); } String cardSql = "SELECT * FROM GREEN_GUARD_CARD WHERE CARD_ID = ?"; List> cardList = iHibernateDao.queryForListWithSql(cardSql, new Object[] { entity.getCardNo() }); if (CollectionUtils.isEmpty(cardList)) { return new RestResult(Constant.FAILED, "未查询到卡号"); } else { Map dataMap = cardList.get(0); String cardState = setNullValue(dataMap.get("CARD_STATE")); String uuid = setNullValue(dataMap.get("UUID")); if (!Objects.equals(cardState, "1")) { return new RestResult(Constant.FAILED, "此卡号已挂失"); } String isExistSql = "SELECT COUNT(*) FROM GREEN_GUARD_CARD_REAL_USER WHERE CARD_ID = ?"; Integer existNum = iHibernateDao.queryForIntWithSql(isExistSql, new Object[] { uuid }); if (existNum > 0) { return new RestResult(Constant.FAILED, "请勿重复绑定此卡号"); } String sql = "INSERT INTO GREEN_GUARD_CARD_REAL_USER (CARD_ID,USER_ID,IS_LOSS) VALUES (?,?,?)"; iHibernateDao.executeSqlUpdate(sql, new Object[] { uuid, entity.getUserId(), "0" }); return new RestResult(Constant.SUCCESS, "操作成功"); } } else if (Objects.equals(entity.getType(), "2")) { // 取消我的门禁卡 if (StringUtils.isEmpty(entity.getCardId())) { return new RestResult(Constant.FAILED, "参数不能为空"); } String isExistSql = "SELECT COUNT(*) FROM GREEN_GUARD_CARD_REAL_USER WHERE CARD_ID = ? AND IS_LOSS !='0'"; Integer existNum = iHibernateDao.queryForIntWithSql(isExistSql, new Object[] { entity.getCardId() }); if (existNum > 0) { return new RestResult(Constant.FAILED, "此卡号已挂失,不能解绑"); } String sql = "DELETE FROM GREEN_GUARD_CARD_REAL_USER WHERE CARD_ID = ?"; iHibernateDao.executeSqlUpdate(sql, new Object[] { entity.getCardId() }); return new RestResult(Constant.SUCCESS, "操作成功"); } else if (Objects.equals(entity.getType(), "3")) { // 挂失 if (StringUtils.isEmpty(entity.getCardId())) { return new RestResult(Constant.FAILED, "参数不能为空"); } String sql = "UPDATE GREEN_GUARD_CARD_REAL_USER SET IS_LOSS = ? WHERE CARD_ID = ?"; iHibernateDao.executeSqlUpdate(sql, new Object[] { "1", entity.getCardId() }); String querySql = "SELECT * FROM GREEN_GUARD_CARD WHERE UUID = ? AND CARD_STATE = ?"; List> list = iHibernateDao.queryForListWithSql(querySql, new Object[] { entity.getCardId(), "1" }); if (CollectionUtils.isNotEmpty(list)) { // 添加挂失卡数据 Map dataMap = list.get(0); StringBuilder addSql = new StringBuilder(); addSql.append( "INSERT INTO GREEN_GUARD_LOSS_CARD (UUID, CARD_ID, STAFF_ID, STAFF_NO, NAME, PHONE_NUM, ORG_NAME, CARD_TYPE, CARD_NAME, CARD_ETIME, CARD_STATE, FACE_PHOTO, IS_PUSH) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); iHibernateDao.executeSqlUpdate(addSql.toString(), new Object[] { dataMap.get("UUID"), dataMap.get("CARD_ID"), dataMap.get("STAFF_ID"), dataMap.get("STAFF_NO"), dataMap.get("NAME"), dataMap.get("PHONE_NUM"), dataMap.get("ORG_NAME"), dataMap.get("CARD_TYPE"), dataMap.get("CARD_NAME"), dataMap.get("CARD_ETIME"), dataMap.get("CARD_STATE"), null, "0" }); // 更新门禁卡状态为挂失 String updateSql2 = "UPDATE GREEN_GUARD_CARD SET CARD_STATE = ? WHERE UUID = ?"; iHibernateDao.executeSqlUpdate(updateSql2, new Object[] { "2", entity.getCardId() }); } return new RestResult(Constant.SUCCESS, "操作成功"); }else if(Objects.equals(entity.getType(), "4")){ // 补办卡 if (StringUtils.isEmpty(entity.getCardId())) { return new RestResult(Constant.FAILED, "参数不能为空"); } String sql = "UPDATE GREEN_GUARD_CARD_REAL_USER SET IS_LOSS = ? WHERE CARD_ID = ?"; iHibernateDao.executeSqlUpdate(sql, new Object[] { "3", entity.getCardId() }); String querySql = "SELECT * FROM GREEN_GUARD_CARD WHERE UUID = ?"; List> list = iHibernateDao.queryForListWithSql(querySql, new Object[] { entity.getCardId()}); if (CollectionUtils.isNotEmpty(list)) { // 添加挂失卡数据 Map dataMap = list.get(0); StringBuffer sqlString = new StringBuffer(); // 补办卡的审核流程:经办人到制卡人 sqlString.append( "INSERT INTO GREEN_CARD (ID, USER_ID, USER_NAME, PHONE, ORG_ID, ORG_NAME, TYPE, UNIT, PERSONNEL, PERSONNEL_PHONE, MATTER, ACCESS_AREA, START_TIME, END_TIME, APPLY_TIME, EXAMINE_BATCH, EXAMINE_STATE, EXAMINE_PERSON_ID, EXAMINE_PERSON_NAME,CARD_CODE,CARD_TYPE ,TYPE_NAME,PHOTO,ID_PHOTO,IS_ENABLE_FACE,IS_REISSUE,LAST_CARD_ID,CARD_STATUS) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?, ?,?,?,?,?,?,?,?)"); String uuid = UUID.randomUUID().toString().replace("-", ""); iHibernateDao.executeSqlUpdate(sqlString.toString(), new Object[] { uuid, entity.getUserId(), entity.getUserName(), entity.getPhone(), entity.getOrgId(), entity.getOrgName(), entity.getType(), dataMap.get("ORG_NAME"), dataMap.get("NAME"), dataMap.get("PHONE_NUM"), "补办卡", null, null, null, DateTimeHelper.getNowDate(), "3", "0", null, null, null, dataMap.get("CARD_NAME"), "补办卡", null, null, "1", "1", null, "0" }); // 添加出入区域 String areaSql = "SELECT * FROM GREEN_MJ_ROLE WHERE CARD_ID = ? "; List> areaList = iHibernateDao.queryForListWithSql(areaSql,new Object[] {entity.getCardId() }); if (CollectionUtils.isNotEmpty(areaList)) { for (int i = 0; i < areaList.size(); i++) { String sqlStr = "INSERT INTO CARD_RELA_ACCESS (GREEN_CARD_ID, ACCESS_ID) VALUES (?, ?)"; iHibernateDao.executeSqlUpdate(sqlStr, new Object[] { uuid, areaList.get(i).get("DEVICE_ID") }); } } } return new RestResult(Constant.SUCCESS, "操作成功"); }else if(Objects.equals(entity.getType(), "5")){ // 重置-删除当前登录人所有绑定的卡号 String sql = "DELETE FROM GREEN_GUARD_CARD_REAL_USER WHERE CARD_ID = ?"; iHibernateDao.executeSqlUpdate(sql, new Object[] { entity.getCardId() }); String sql2 = "DELETE FROM GREEN_GUARD_LOSS_CARD WHERE UUID = ?"; iHibernateDao.executeSqlUpdate(sql2, new Object[] { entity.getCardId() }); String sql3 = "UPDATE GREEN_GUARD_CARD SET CARD_STATE = ? WHERE UUID = ?"; iHibernateDao.executeSqlUpdate(sql3, new Object[] { "1", entity.getCardId() }); } } catch (Exception e) { e.printStackTrace(); // 手动回滚异常 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return new RestResult(Constant.FAILED, "操作失败"); } return new RestResult(Constant.SUCCESS, "操作成功"); } public static String setNullValue(Object value) { if (value != null) { return String.valueOf(value); } return null; } /** * 已挂失卡的列表 * * @param entity * @return */ @SuppressWarnings("unchecked") public RestResult getReissueCardList(GreenCard entity) { List> dataList = new ArrayList>(); try { String sql = "SELECT ggc.UUID AS \"id\",ggc.CARD_ID AS \"staffNo\",ggc.NAME AS \"name\",ggc.CARD_NAME AS \"cardName\",ggc.ORG_NAME AS \"orgName\",ggc.PHONE_NUM AS \"phone\",IS_LOSS AS \"isLoss\"" + " FROM GREEN_GUARD_CARD_REAL_USER ggcru" + " LEFT JOIN GREEN_GUARD_CARD ggc ON ggcru.CARD_ID = ggc.UUID" + " WHERE ggcru.USER_ID = ? AND ggcru.IS_LOSS = ?"; List> list = iHibernateDao.queryForListWithSql(sql, new Object[] { entity.getUserId(), "2" }); if (CollectionUtils.isNotEmpty(list)) { dataList.addAll(list); } return new RestResult(Constant.SUCCESS, "查询成功", dataList); } catch (Exception e) { e.printStackTrace(); return new RestResult(Constant.FAILED, "查询失败"); } } }