package com.cabletech.business.resource.dao; import java.util.List; import java.util.Map; import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.StringUtils; import org.springframework.stereotype.Repository; import com.cabletech.business.resource.model.ResourceAllotForm; import com.cabletech.business.resource.model.RsMaintenance; import com.cabletech.common.base.BaseDao; /** * * @author wangj 资源分配DAO * */ @Repository public class ResourceAllotDao extends BaseDao<RsMaintenance, String> { /** * 根据查询条件获取所有待分配的资源列表 * * @param form * ResourceAllotForm * @return List<Map<String, Object>> */ public List<Map<String, Object>> queryResourceList(ResourceAllotForm form) { StringBuffer sql = new StringBuffer(""); sql.append(" SELECT DISTINCT t.xtbh, t.zymc, t.zdbh, t.ymc, t.jtgfmc, t.sx, t.dz, t.dlmc, t.zdlx, t.ywjb, t.cqxz, t.mphm, t.fwjg, t.zydw, t.cz, t.ssglq, t.regionid, t.bz, t.orgid, t.createdate,t.status, t.ZYMC, t.lon, t.lat,t.XTBH AS ID,"); sql.append(" t.ZDBH||'-'||t.ZYMC||'-'||r.REGIONNAME AS NAME "); sql.append(" FROM RES_ZDXX t "); sql.append(" JOIN REGION r ON t.REGIONID=r.REGIONID "); sql.append(" LEFT JOIN RES_RESOURCETYPE rs_type ON t.XTBH=rs_type.XTBH "); sql.append(" LEFT JOIN RES_MAINTENANCE res_m ON res_m.RS_ID=t.XTBH "); sql.append(" AND RES_M.RS_TYPE=RS_TYPE.BUSINESS_TYPE "); sql.append(" WHERE (t.STATUS IS NULL OR t.STATUS<>'9') "); getResourceCondition(form, sql); getMaintenanceCondition(form, sql); logger.info("获取所有待分配资源:" + sql.toString()); return super.getSQLALL(sql.toString()); } /** * 根据查询条件获取所有待确认的资源列表 * * @param form * ResourceAllotForm * @return List<Map<String, Object>> */ public List<Map<String, Object>> queryConfirmResourceList( ResourceAllotForm form) { StringBuffer sql = new StringBuffer(""); sql.append(" SELECT DISTINCT t.xtbh, t.zymc, t.zdbh, t.ymc, t.jtgfmc, t.sx, t.dz, t.dlmc, t.zdlx, t.ywjb, t.cqxz, t.mphm, t.fwjg, t.zydw, t.cz, t.ssglq, t.regionid, t.bz, t.orgid, t.createdate,t.status, t.ZYMC, t.lon, t.lat,t.XTBH AS ID,"); sql.append(" vo.NAME AS ORG_NAME,vp.NAME AS PATROLGROUP_NAME, "); sql.append(" t.ZDBH||'-'||t.ZYMC||'-'||r.REGIONNAME AS NAME "); sql.append(" FROM RES_ZDXX t "); sql.append(" JOIN REGION r ON t.REGIONID=r.REGIONID "); sql.append(" LEFT JOIN RES_RESOURCETYPE rs_type ON t.XTBH=rs_type.XTBH "); sql.append(" LEFT JOIN RES_MAINTENANCE res_m ON res_m.RS_ID=t.XTBH "); sql.append(" AND RES_M.RS_TYPE=RS_TYPE.BUSINESS_TYPE "); sql.append(" LEFT JOIN VIEW_ORG vo ON vo.ID=res_m.MAINTENANCE_ID "); sql.append(" LEFT JOIN VIEW_PATROLGROUP vp ON vp.ID=res_m.PATROL_GROUP_ID "); sql.append(" WHERE (t.STATUS IS NULL OR t.STATUS<>'9') "); sql.append(" AND t.XTBH IN ( "); sql.append(arrToSql(form.getNewResources())); sql.append(" ) "); getResourceCondition(form, sql); getMaintenanceCondition(form, sql); logger.info("获取所有待确认资源:" + sql.toString()); return super.getSQLALL(sql.toString()); } /** * 添加维护关系 * * @param form * ResourceAllotForm */ public void insertRsMaintenance(ResourceAllotForm form) { if (ArrayUtils.isEmpty(form.getNewResources())) { return; } for (int i = 0; i < form.getNewResources().length; i++) { RsMaintenance rsMaintenance = new RsMaintenance(); rsMaintenance.setMaintenanceId(form.getNewMaintenceId()); rsMaintenance.setPatrolGroupId(form.getNewPatrolmanId()); rsMaintenance.setRsId(form.getNewResources()[i]); rsMaintenance.setRsType(form.getResourceType()); super.save(rsMaintenance); } } /** * 变更维护关系 * * @param form * ResourceAllotForm */ public void updateRsMaintenance(ResourceAllotForm form) { StringBuffer sql = new StringBuffer(""); sql.append(" UPDATE RES_MAINTENANCE SET "); sql.append(" MAINTENANCE_ID='"); sql.append(form.getNewMaintenceId()); sql.append("', "); sql.append(" PATROL_GROUP_ID='"); sql.append(form.getNewPatrolmanId()); sql.append("' "); sql.append(" WHERE RS_ID IN ("); sql.append(arrToSql(form.getNewResources())); sql.append(") "); sql.append(" AND RS_TYPE='"); sql.append(form.getResourceType()); sql.append("' "); sql.append(" AND MAINTENANCE_ID='"); sql.append(form.getOldMaintenceId()); sql.append("' "); if (StringUtils.isNotBlank(form.getOldPatrolmanId())) { if (form.isNoMaintenancedPatrolgroup()) { sql.append(" AND PATROL_GROUP_ID IS NULL "); } else { sql.append(" AND PATROL_GROUP_ID='"); sql.append(form.getOldPatrolmanId()); sql.append("' "); } } logger.info("更新维护关系sql:" + sql.toString()); super.getJdbcTemplate().execute(sql.toString()); } /** * 删除维护关系 * * @param form * ResourceAllotForm * @param isSingle * boolean */ public void deleteRsMaintenance(ResourceAllotForm form, boolean isSingle) { StringBuffer sql = new StringBuffer(""); sql.append(" DELETE FROM RES_MAINTENANCE "); sql.append(" WHERE RS_ID IN ( "); sql.append(arrToSql(form.getNewResources())); sql.append(" ) "); sql.append(" AND RS_TYPE='"); sql.append(form.getResourceType()); sql.append("' "); if (isSingle) { sql.append(" AND MAINTENANCE_ID='"); sql.append(form.getOldMaintenceId()); sql.append("' "); } logger.info("删除维护关系sql:" + sql.toString()); super.getJdbcTemplate().execute(sql.toString()); } /** * 判断资源是否被分配过 * * @param parameter * ResourceAllotForm * @return */ public List<Map<String, Object>> getAllotedSelfResources( ResourceAllotForm parameter) { StringBuffer sql = new StringBuffer(""); sql.append(" SELECT DISTINCT T.XTBH,T.ZYMC "); sql.append(" FROM RES_ZDXX T "); sql.append(" JOIN RES_RESOURCETYPE RS_TYPE ON T.XTBH=RS_TYPE.XTBH "); sql.append(" JOIN RES_MAINTENANCE RES_M ON RES_M.RS_ID=T.XTBH "); sql.append(" WHERE 1=1 "); sql.append(" AND T.XTBH IN ( "); sql.append(arrToSql(parameter.getNewResources())); sql.append(" ) "); sql.append(" AND RES_M.RS_TYPE='"); sql.append(parameter.getResourceType()); sql.append("' "); getMaintenanceCondition(parameter, sql); logger.info("获取所有分配过资源:" + sql.toString()); return super.getSQLALL(sql.toString()); } /** * 获取资源信息查询条件 * * @param form * ResourceAllotForm 检索条件 * @param sql * StringBuffer */ private void getResourceCondition(ResourceAllotForm form, StringBuffer sql) { if (StringUtils.isNotBlank(form.getRegionId())) { sql.append(" AND EXISTS ("); sql.append(" SELECT REGIONID FROM REGION "); sql.append(" WHERE t.REGIONID=REGIONID "); sql.append(" START WITH REGIONID='"); sql.append(form.getRegionId()); sql.append("' "); sql.append(" CONNECT BY PRIOR REGIONID=PARENTREGIONID"); sql.append(" ) "); } if (StringUtils.isNotBlank(form.getUserRegionId())) { sql.append(" AND EXISTS ("); sql.append(" SELECT REGIONID FROM REGION "); sql.append(" WHERE t.REGIONID=REGIONID "); sql.append(" START WITH REGIONID='"); sql.append(form.getUserRegionId()); sql.append("' "); sql.append(" CONNECT BY PRIOR REGIONID=PARENTREGIONID"); sql.append(" ) "); } if (StringUtils.isNotBlank(form.getResourceName())) { sql.append(" AND (( "); sql.append(" t.ZYMC LIKE '%"); sql.append(form.getResourceName()); sql.append("%') "); sql.append(" OR ("); sql.append(" t.XTBH LIKE '%"); sql.append(form.getResourceName()); sql.append("%')) "); } if (StringUtils.isNotBlank(form.getResourceType())) { sql.append(" AND rs_type.BUSINESS_TYPE = '"); sql.append(form.getResourceType()); sql.append("' "); } } /** * 获取资源的维护查询条件 * * @param form * ResourceAllotForm 检索条件 * @param sql * StringBuffer */ private void getMaintenanceCondition(ResourceAllotForm form, StringBuffer sql) { getContractorCondition(form, sql); getPatrolgroupCondition(form, sql); } /** * 获取维护关系的代维公司查询条件 * * @param form * ResourceAllotForm 检索条件 * @param sql * StringBuffer */ private void getContractorCondition(ResourceAllotForm form, StringBuffer sql) { if (StringUtils.isBlank(form.getOldMaintenceId())) { return; } if (form.isNoMaintenancedContractor()) { sql.append(" AND res_m.MAINTENANCE_ID IS NULL "); } else { sql.append(" AND EXISTS ("); sql.append(" SELECT ID FROM VIEW_ORG "); sql.append(" WHERE res_m.MAINTENANCE_ID=ID "); sql.append(" START WITH ID='"); sql.append(form.getOldMaintenceId()); sql.append("' "); sql.append(" CONNECT BY PRIOR ID=PARENTID) "); } } /** * 获取维护关系的维护组查询条件 * * @param form * ResourceAllotForm 检索条件 * @param sql * StringBuffer */ private void getPatrolgroupCondition(ResourceAllotForm form, StringBuffer sql) { if (StringUtils.isBlank(form.getOldPatrolmanId())) { return; } if (form.isNoMaintenancedPatrolgroup()) { sql.append(" AND res_m.PATROL_GROUP_ID IS NULL "); } else { sql.append(" AND res_m.PATROL_GROUP_ID = '"); sql.append(form.getOldPatrolmanId()); sql.append("' "); } } /** * 私有方法 构造SQL,逗号分隔符 * * @param arr * 字符串数组 * @return */ private String arrToSql(String[] arr) { StringBuffer sbu = new StringBuffer(); String ret = ""; if (arr == null) return "''"; if (arr.length == 0) return "''"; for (String s : arr) { sbu.append("'" + s + "',"); } if (sbu.length() > 0) { ret = sbu.substring(0, sbu.length() - 1); } return ret; } }