cn.com.sinosoft.cimp.recordsummarize.datadeduplication.service.impl.DataDeduplicationService.java Source code

Java tutorial

Introduction

Here is the source code for cn.com.sinosoft.cimp.recordsummarize.datadeduplication.service.impl.DataDeduplicationService.java

Source

package cn.com.sinosoft.cimp.recordsummarize.datadeduplication.service.impl;

import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.Map.Entry;

import javax.annotation.Resource;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

import org.apache.commons.lang.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.session.Session;
import org.apache.shiro.subject.Subject;
import org.hibernate.Query;
import org.hibernate.transform.Transformers;
import org.hibernate.type.StringType;
import org.hibernate.type.Type;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import cn.com.sinosoft.cimp.auth.permmgr.model.UserVO;
import cn.com.sinosoft.cimp.common.util.DataHandleUtil;
import cn.com.sinosoft.cimp.core.dao.SimpleBaseDao;
import cn.com.sinosoft.cimp.core.service.SimpleServiceImpl;
import cn.com.sinosoft.cimp.core.service.model.FormResult;
import cn.com.sinosoft.cimp.core.service.model.PageParam;
import cn.com.sinosoft.cimp.core.service.model.PagingResult;
import cn.com.sinosoft.cimp.core.service.model.PagingSrcSql;
import cn.com.sinosoft.cimp.personnelManager.model.PersonDemo;
import cn.com.sinosoft.cimp.recordsummarize.datadeduplication.model.CimpCoBlaObjectInvolved;
import cn.com.sinosoft.cimp.recordsummarize.datadeduplication.model.CimpCoBlaUnit;
import cn.com.sinosoft.cimp.recordsummarize.datadeduplication.model.CimpCoDiscipline;
import cn.com.sinosoft.cimp.recordsummarize.datadeduplication.model.CimpCoDisinfectant;
import cn.com.sinosoft.cimp.recordsummarize.datadeduplication.model.CimpCoDoctor;
import cn.com.sinosoft.cimp.recordsummarize.datadeduplication.model.CimpCoExDonateBlood;
import cn.com.sinosoft.cimp.recordsummarize.datadeduplication.model.CimpCoNurse;
import cn.com.sinosoft.cimp.recordsummarize.datadeduplication.model.CimpCoOccServices;
import cn.com.sinosoft.cimp.recordsummarize.datadeduplication.model.CimpCoPublicplaces;
import cn.com.sinosoft.cimp.recordsummarize.datadeduplication.model.CimpCoRadiation;
import cn.com.sinosoft.cimp.recordsummarize.datadeduplication.model.CimpCoWater;
import cn.com.sinosoft.cimp.recordsummarize.datadeduplication.model.CimpDeduplicateLog;
import cn.com.sinosoft.cimp.recordsummarize.datadeduplication.model.PerCoDisinfectant;
import cn.com.sinosoft.cimp.recordsummarize.datadeduplication.model.PerCoWater;

/**
 *
 * @author wang
 * 
 */
@Service("dataDeduplicationService")
public class DataDeduplicationService extends SimpleServiceImpl {
    @Resource
    SimpleBaseDao dao;

    @Autowired
    private HibernateTemplate hibernateTemplate;

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    Date date;

    //?
    public String queryUserOrg() {
        Subject currentUser = SecurityUtils.getSubject();
        Session sessions = currentUser.getSession();
        UserVO user = (UserVO) sessions.getAttribute("loginuser");
        String queryFieldNameSql = "select ORG_CODE from t_auth_user where ID='" + user.getId() + "'";
        String userOrg = dao.executeSql(queryFieldNameSql);
        return userOrg;
    }

    //???
    public List<Map<String, Object>> queryCreditItems(String typeInfoId) {
        List<Map<String, Object>> list = null;
        Map<String, Object> obj = null;
        String userOrg = queryUserOrg();
        if (typeInfoId != null && !typeInfoId.isEmpty()) {
            String sql = "select CR_CODE, NAME_TABLE from DIC_CREDIT_RECORD_MANAGEMENT where CR_CODE LIKE '"
                    + typeInfoId + "%' and OWNERSHIP_MECHANISM='" + userOrg + "'";
            list = dao.qryBySql(sql);
            for (int i = 0; i < list.size(); i++) {
                obj = list.get(i);
                System.out.println(obj.get("CR_CODE"));
                System.out.println(obj.get("NAME_TABLE"));
            }
        }
        return list;
    }

    //??
    public List<Map<String, Object>> queryMergeRule(String crCode) {
        List<Map<String, Object>> list = null;
        if (crCode != null && !crCode.isEmpty()) {
            String sql = "select t.name_en,t.name_zh,t.is_co_mergeprimaryrule,t.is_co_mergedeputyrule from dic_column_list t "
                    + "where (t.is_co_mergeprimaryrule = 'T' or " + "t.is_co_mergedeputyrule = 'T') and t.cr_code ="
                    + crCode;
            System.out.println(sql);
            list = dao.qryBySql(sql);
        }
        return list;
    }

    //??
    public String queryCreditItemTblName(String creditItemID) {
        String tableName = null;
        if (creditItemID != null && !creditItemID.isEmpty()) {
            String queryCreditItemsSql = "select CODE_ORIGINAL_TABLE from DIC_CREDIT_RECORD_MANAGEMENT where CR_CODE='"
                    + creditItemID + "'";
            tableName = dao.executeSql(queryCreditItemsSql);
        }
        return tableName;
    }

    //ID??
    public String queryCreditItemTableIDField(String creditItemID) {
        String IDFieldName = null;
        if (creditItemID != null && !creditItemID.isEmpty()) {
            String queryIDFieldNameSql = "select NAME_EN from DIC_COLUMN_LIST where is_primary_key='01' and cr_code='"
                    + creditItemID + "'";
            IDFieldName = dao.executeSql(queryIDFieldNameSql);
        }
        return IDFieldName;
    }

    //??
    public String queryCreditItemTableFieldName(String sql) {
        String FieldName = null;
        if (sql != null && !sql.isEmpty()) {
            FieldName = dao.executeSql(sql);
        }
        return FieldName;
    }

    //?
    public PagingResult queryRecordEntry(Map<String, String> params, PageParam pageParams) {
        System.out.println("----0------");
        PagingSrcSql srcSql = getRecordEntrySql(params);
        String orderCol = getOrderCol(params);
        if (orderCol != null && orderCol != "") {
            params.put("orderCol", orderCol);
        }
        if (srcSql != null && srcSql.getSrcSql() != "") {
            return pagingSearch(params, pageParams, srcSql);
        } else {
            return null;
        }
    }

    //orderCol,sql
    private String getOrderCol(Map<String, String> params) {
        System.out.println("----2------");
        String boxT = params.get("boxT");
        String ruleMin = "";
        if (boxT != null && boxT.length() > 0) {
            ruleMin = boxT.split(",")[0];
        }
        return ruleMin;
    }

    //SQL
    private PagingSrcSql getRecordEntrySql(Map<String, String> params) {
        System.out.println("----1------");
        PagingSrcSql srcSql = new PagingSrcSql();
        StringBuffer sb = new StringBuffer();
        List<Object> values = new ArrayList<Object>();
        List<Type> types = new ArrayList<Type>();
        String tableNameCode = params.get("recordItem"); //
        String organOrIndividual = params.get("organizationOrIndividual");//

        String orgOrIndividualName = queryCreditItemTableFieldName(
                "select name_en from dic_column_list where is_orgorindividualname='01' and cr_code='"
                        + tableNameCode + "'");
        String colTableName = queryCreditItemTableFieldName(
                "select CODE_COLLECTION_TABLE from dic_credit_record_management where cr_code='" + tableNameCode
                        + "'");
        //      String colTableName=queryCreditItemTableFieldName("select CODE_original_TABLE from dic_credit_record_management where cr_code='"+tableNameCode+"'");

        String boxT = params.get("boxT");//
        String boxF = params.get("boxF");//
        String ruleMin = "";//??
        String ruleMax = "";//??
        if (boxT != null && boxT.length() > 0) {
            ruleMin = boxT.split(",")[0];
            if (boxF != null && boxF.length() > 0) {
                ruleMax = boxT + "," + boxF;
            } else {
                ruleMax = boxT;
            }
            sb.append("select t.* from " + colTableName + " t where " + ruleMin);
            sb.append(" in (select c." + ruleMin + " from " + colTableName + " c where state_valid = '02' ");
            if (organOrIndividual != null && organOrIndividual.length() > 0) {
                sb.append("and c." + orgOrIndividualName + " like '%" + organOrIndividual + "%'");
            }
            sb.append(" group by " + ruleMax + " having count(1) > 1) and state_valid = '02'  order by " + ruleMin);
        }
        if (sb != null && sb.length() > 0) {
            srcSql.setSrcSql(sb.toString());
            srcSql.setTypes(types.toArray(new Type[0]));
            srcSql.setValues(values.toArray());
            return srcSql;
        } else {
            return null;
        }
    }

    /////////////////////////////////////////////
    public Integer findTotalPage(String sql, String crCode, String boxT, List<Map<String, Object>> params) {
        StringBuffer finalSql = new StringBuffer();
        StringBuffer sb = new StringBuffer();
        String colTableName = "";
        StringBuffer temp = new StringBuffer();
        colTableName = queryCreditItemTableFieldName(
                "select CODE_COLLECTION_TABLE from dic_credit_record_management where cr_code='" + crCode + "'");
        //      String s1 = colTableName.substring(8);
        //      String s2 = "CIMP_"+s1;
        //      sql = sql.replace(s2, colTableName);
        String ruleMin = "";//??
        String ruleMax = "";//??
        if (boxT != null && boxT.length() > 0) {
            ruleMin = boxT.split(",")[0];
            ruleMax = boxT;
            sb.append("select t.* from " + colTableName + " t where " + ruleMin);
            sb.append(" in (select c." + ruleMin + " from " + colTableName + " c where c.state_valid = '02' ");
            if (colTableName.equals("CIMP_CO_FOOD_LICENSE")) {
                if (crCode.equals("0103000000")) {
                    sb.append(" and c.product_type like '?' ");
                }
                if (crCode.equals("0104000000")) {
                    sb.append(" and c.product_type like '???' ");
                }
                if (crCode.equals("0105000000")) {
                    sb.append(" and c.product_type like '????' ");
                }
                if (crCode.equals("0106000000")) {
                    sb.append(" and c.product_type like '?' ");
                }
            }
            if (colTableName.equals("CIMP_CO_WATER")) {
                if (crCode.equals("0111000000")) {//
                    sb.append(" and c.comp_type like '0203%' ");
                }
            }
            if (colTableName.equals("CIMP_CO_DISCIPLINE")) {
                if (crCode.equals("0201010000")) {//???
                    sb.append(" and c.specialty_primary like '01%' ");
                }
                if (crCode.equals("0206080000")) {//???
                    sb.append(" and c.specialty_primary like '08%' ");
                }
                if (crCode.equals("0207020000")) {//??????
                    sb.append(" and c.specialty_primary like '0203%' ");
                }
                if (crCode.equals("0203050000")) {//???
                    sb.append(" and c.specialty_primary like '05%' ");
                }
                if (crCode.equals("0204030000")) {//?)???
                    sb.append(" and c.specialty_primary like '03%' ");
                }
                if (crCode.equals("0205040000")) {//???
                    sb.append(" and c.specialty_primary like '04%' ");
                }
                if (crCode.equals("0208070000")) {//???---??like '07%' 
                    sb.append(" and c.specialty_primary like '07%' ");
                }
                if (crCode.equals("0202020000")) {//???
                    sb.append(" and c.specialty_primary like '02%' ");
                }
            }
            //         sb.append(" group by "+ruleMax+" having count(1) > 1) and state_valid = '02'  order by "+ruleMin);
            sb.append(" group by " + ruleMax + " having count(1) > 1) and state_valid = '02' ");
            if (colTableName.equals("CIMP_CO_FOOD_LICENSE")) {
                if (crCode.equals("0103000000")) {
                    sb.append(" and t.product_type like '?' ");
                }
                if (crCode.equals("0104000000")) {
                    sb.append(" and t.product_type like '???' ");
                }
                if (crCode.equals("0105000000")) {
                    sb.append(" and t.product_type like '????' ");
                }
                if (crCode.equals("0106000000")) {
                    sb.append(" and t.product_type like '?' ");
                }
            }
            if (colTableName.equals("CIMP_CO_WATER")) {
                if (crCode.equals("0111000000")) {//
                    sb.append(" and t.comp_type like '0203%' ");
                }
            }
            if (colTableName.equals("CIMP_CO_DISCIPLINE")) {
                if (crCode.equals("0201010000")) {//???
                    sb.append(" and t.specialty_primary like '01%' ");
                }
                if (crCode.equals("0206080000")) {//???
                    sb.append(" and t.specialty_primary like '08%' ");
                }
                if (crCode.equals("0207020000")) {//??????
                    sb.append(" and t.specialty_primary like '0203%' ");
                }
                if (crCode.equals("0203050000")) {//???
                    sb.append(" and t.specialty_primary like '05%' ");
                }
                if (crCode.equals("0204030000")) {//?)???
                    sb.append(" and t.specialty_primary like '03%' ");
                }
                if (crCode.equals("0205040000")) {//???
                    sb.append(" and t.specialty_primary like '04%' ");
                }
                if (crCode.equals("0208070000")) {//???---??like '07%' 
                    sb.append(" and t.specialty_primary like '07%' ");
                }
                if (crCode.equals("0202020000")) {//???
                    sb.append(" and t.specialty_primary like '02%' ");
                }
            }
            sb.append(" order by " + ruleMin);
        }
        if (!params.isEmpty() || params.size() != 0) {
            int sum = 0;
            temp.append(" select distinct ");
            temp.append(ruleMin);
            temp.append(" from ( ");
            temp.append(sb);
            temp.append(" ) where 1 =1 ");
            temp.append(sql);
            Query query = hibernateTemplate.getSessionFactory().openSession().createSQLQuery(temp.toString());
            if (params.size() != 0) {//----------------------------------->
                for (Map<String, Object> map : params) {
                    if (map.get("symbol").equals("R")) {
                        for (Entry<String, Object> entry : map.entrySet()) {
                            if (!(entry.getKey().equals("fuzzy") || entry.getKey().equals("symbol"))) {
                                query.setString(entry.getKey(), (String) entry.getValue());
                            }
                        }
                    } else {
                        if (map.get("fuzzy").equals("T")) {
                            for (Entry<String, Object> entry : map.entrySet()) {
                                if (!(entry.getKey().equals("fuzzy") || entry.getKey().equals("symbol"))) {
                                    query.setString(entry.getKey(), "%" + (String) entry.getValue() + "%");
                                }
                            }
                        } else {
                            for (Entry<String, Object> entry : map.entrySet()) {
                                if (!(entry.getKey().equals("fuzzy") || entry.getKey().equals("symbol"))) {
                                    query.setString(entry.getKey(), (String) entry.getValue());
                                }
                            }
                        }
                    }

                }
            }
            List<String> obj = query.list();
            if (obj.size() != 0) {
                String ruleStr = getSqlStrByList(obj, 999, ruleMin);
                //            for(int i=0;i<obj.size();i++){
                temp.delete(0, temp.length());
                temp.append("select count(*)  quantity from ");
                temp.append(colTableName);
                temp.append(" where ");
                //               temp.append(ruleMin);
                //               temp.append(" in (:obj) ");
                temp.append(ruleStr);
                temp.append(" and state_valid = '02' ");
                if (temp != null && temp.length() > 0) {
                    Query qry = hibernateTemplate.getSessionFactory().openSession().createSQLQuery(temp.toString());
                    //                  qry.setParameterList("obj", obj);
                    qry.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
                    Map map = (Map) qry.list().get(0);
                    BigDecimal b = (BigDecimal) map.get("QUANTITY");
                    sum = b.intValue();
                }
                //            }
            }
            return sum;
        } else {
            temp.append("select count(*)  quantity from ( ");
            temp.append(sb);
            temp.append(" ) ");

        }
        //      StringBuffer sbSql = new StringBuffer(getSql(sql,crCode,boxT));
        //      finalSql.append("select count(*)  quantity from ( ");
        //      finalSql.append(sbSql + " )");
        if (temp != null && temp.length() > 0) {
            Query query = hibernateTemplate.getSessionFactory().openSession().createSQLQuery(temp.toString());
            query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
            Map map = (Map) query.list().get(0);
            BigDecimal b = (BigDecimal) map.get("QUANTITY");
            return b.intValue();
        }
        return 0;
    }

    /** 
      *  Example: 
      *  List sqhlist=[aa,bb,cc,dd,ee,ff,gg] ; 
      *  Test.getSqlStrByList(sqhList,3,"SHENQINGH")=  
      *  "SHENQING IN ('aa','bb','cc') OR SHENQINGH IN ('dd','ee','ff') OR SHENQINGH IN ('gg')" 
      *  
      *  1000????splitNumsqlin ? 
      * @param sqhList ?List 
      * @param splitNum , 1000 
      * @param columnName SQL?? Z.SHENQINGH  
      * @return 
      */
    public String getSqlStrByList(List sqhList, int splitNum, String columnName) {
        if (splitNum > 1000) //?sql??1000.  
            return null;
        StringBuffer sql = new StringBuffer("");
        if (sqhList != null) {
            sql.append(" ").append(columnName).append(" IN ( ");
            for (int i = 0; i < sqhList.size(); i++) {
                sql.append("'").append(sqhList.get(i) + "',");
                if ((i + 1) % splitNum == 0 && (i + 1) < sqhList.size()) {
                    sql.deleteCharAt(sql.length() - 1);
                    sql.append(" ) OR ").append(columnName).append(" IN (");
                }
            }
            sql.deleteCharAt(sql.length() - 1);
            sql.append(" )");
        }
        return sql.toString();
    }

    public List<Map<String, Object>> findByPage(String sql, String crCode, String boxT,
            List<Map<String, Object>> params, String page, String rows) {
        //      StringBuffer orignalSql = new StringBuffer(getSql(sql,crCode,boxT));
        StringBuffer orignalSql = new StringBuffer();
        StringBuffer finalSql = new StringBuffer();
        StringBuffer sb = new StringBuffer();
        StringBuffer temp = new StringBuffer();
        String colTableName = queryCreditItemTableFieldName(
                "select CODE_COLLECTION_TABLE from dic_credit_record_management where cr_code='" + crCode + "'");
        //      String s1 = colTableName.substring(8);
        //      String s2 = "CIMP_"+s1;
        //      sql = sql.replace(s2, colTableName);
        String ruleMin = "";//??
        String ruleMax = "";//??
        String coltable = dao
                .executeSql("SELECT T.QUERY_COL_RELEASE_SQL FROM DIC_CREDIT_RECORD_MANAGEMENT T WHERE T.CR_CODE='"
                        + crCode + "'");
        if (boxT != null && boxT.length() > 0) {
            ruleMin = boxT.split(",")[0];
            ruleMax = boxT;
            //         sb.append("select t.* from "+colTableName+" t where "+ruleMin);
            sb.append(coltable + " and " + ruleMin);
            sb.append(" in (select c." + ruleMin + " from " + colTableName + " c where c.state_valid = '02' ");
            if (colTableName.equals("CIMP_CO_FOOD_LICENSE")) {
                if (crCode.equals("0103000000")) {
                    sb.append(" and c.product_type like '?' ");
                }
                if (crCode.equals("0104000000")) {
                    sb.append(" and c.product_type like '???' ");
                }
                if (crCode.equals("0105000000")) {
                    sb.append(" and c.product_type like '????' ");
                }
                if (crCode.equals("0106000000")) {
                    sb.append(" and c.product_type like '?' ");
                }
            }
            if (colTableName.equals("CIMP_CO_WATER")) {
                if (crCode.equals("0111000000")) {//
                    sb.append(" and c.comp_type like '0203%' ");
                }
            }
            if (colTableName.equals("CIMP_CO_DISCIPLINE")) {
                if (crCode.equals("0201010000")) {//???
                    sb.append(" and c.specialty_primary like '01%' ");
                }
                if (crCode.equals("0206080000")) {//???
                    sb.append(" and c.specialty_primary like '08%' ");
                }
                if (crCode.equals("0207020000")) {//??????
                    sb.append(" and c.specialty_primary like '0203%' ");
                }
                if (crCode.equals("0203050000")) {//???
                    sb.append(" and c.specialty_primary like '05%' ");
                }
                if (crCode.equals("0204030000")) {//?)???
                    sb.append(" and c.specialty_primary like '03%' ");
                }
                if (crCode.equals("0205040000")) {//???
                    sb.append(" and c.specialty_primary like '04%' ");
                }
                if (crCode.equals("0208070000")) {//???---??like '07%' 
                    sb.append(" and c.specialty_primary like '07%' ");
                }
                if (crCode.equals("0202020000")) {//???
                    sb.append(" and c.specialty_primary like '02%' ");
                }
            }
            //         sb.append(" group by "+ruleMax+" having count(1) > 1) and state_valid = '02'  order by "+ruleMin);
            sb.append(" group by " + ruleMax + " having count(1) > 1) and state_valid = '02' ");
            if (colTableName.equals("CIMP_CO_FOOD_LICENSE")) {
                if (crCode.equals("0103000000")) {
                    sb.append(" and product_type like '?' ");
                }
                if (crCode.equals("0104000000")) {
                    sb.append(" and product_type like '???' ");
                }
                if (crCode.equals("0105000000")) {
                    sb.append(" and product_type like '????' ");
                }
                if (crCode.equals("0106000000")) {
                    sb.append(" and product_type like '?' ");
                }
            }
            if (colTableName.equals("CIMP_CO_WATER")) {
                if (crCode.equals("0111000000")) {//
                    sb.append(" and comp_type like '0203%' ");
                }
            }
            if (colTableName.equals("CIMP_CO_DISCIPLINE")) {
                if (crCode.equals("0201010000")) {//???
                    sb.append(" and specialty_primary like '01%' ");
                }
                if (crCode.equals("0206080000")) {//???
                    sb.append(" and specialty_primary like '08%' ");
                }
                if (crCode.equals("0207020000")) {//??????
                    sb.append(" and specialty_primary like '0203%' ");
                }
                if (crCode.equals("0203050000")) {//???
                    sb.append(" and specialty_primary like '05%' ");
                }
                if (crCode.equals("0204030000")) {//?)???
                    sb.append(" and specialty_primary like '03%' ");
                }
                if (crCode.equals("0205040000")) {//???
                    sb.append(" and specialty_primary like '04%' ");
                }
                if (crCode.equals("0208070000")) {//???---??like '07%' 
                    sb.append(" and specialty_primary like '07%' ");
                }
                if (crCode.equals("0202020000")) {//???
                    sb.append(" and specialty_primary like '02%' ");
                }
            }
            sb.append(" order by " + ruleMin);
        }
        if (!params.isEmpty() || params.size() != 0) {
            temp.append(" select ");
            temp.append(ruleMin);
            temp.append(" from ( ");
            temp.append(sb);
            temp.append(" ) where 1 = 1 ");
            temp.append(sql);
            Query query = hibernateTemplate.getSessionFactory().openSession().createSQLQuery(temp.toString());
            if (params.size() != 0) {//----------------------------------->
                for (Map<String, Object> map : params) {
                    if (map.get("symbol").equals("R")) {
                        for (Entry<String, Object> entry : map.entrySet()) {
                            if (!(entry.getKey().equals("fuzzy") || entry.getKey().equals("symbol"))) {
                                query.setString(entry.getKey(), (String) entry.getValue());
                            }
                        }
                    } else {
                        if (map.get("fuzzy").equals("T")) {
                            for (Entry<String, Object> entry : map.entrySet()) {
                                if (!(entry.getKey().equals("fuzzy") || entry.getKey().equals("symbol"))) {
                                    query.setString(entry.getKey(), "%" + (String) entry.getValue() + "%");
                                }
                            }
                        } else {
                            for (Entry<String, Object> entry : map.entrySet()) {
                                if (!(entry.getKey().equals("fuzzy") || entry.getKey().equals("symbol"))) {
                                    query.setString(entry.getKey(), (String) entry.getValue());
                                }
                            }
                        }
                    }

                }
            }
            List<String> obj = query.list();
            if (obj.size() != 0) {
                String ruleStr = getSqlStrByList(obj, 999, ruleMin);
                finalSql.append("SELECT * ");
                //            finalSql.append(" * ");
                finalSql.append(" FROM ( ");
                finalSql.append(" SELECT ORINGAL.*, ROWNUM rnum ");
                //            finalSql.append(" ORINGAL.*, ROWNUM rnum ");
                finalSql.append(" FROM ( ");
                //            finalSql.append(" select * from "+colTableName+" where "+ruleMin+" in (:obj) and state_valid='02' order by "+ruleMax+"");//----------
                finalSql.append(" select * from ( " + sb + " ) where " + ruleStr + " and state_valid='02' order by "
                        + ruleMax);
                finalSql.append(" ) ORINGAL");
                finalSql.append(" WHERE ROWNUM <=  " + Integer.parseInt(page) * (Integer.parseInt(rows)));
                finalSql.append(" ) ");
                finalSql.append(" WHERE ");
                finalSql.append(" rnum > " + (Integer.parseInt(page) - 1) * (Integer.parseInt(rows)));
                Query qry = hibernateTemplate.getSessionFactory().openSession().createSQLQuery(finalSql.toString());
                //            qry.setParameterList("obj", obj);
                qry.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
                DataHandleUtil u = new DataHandleUtil();
                List<Map<String, Object>> newItems = u.idCardHandlerItem(qry.list(), "ID_CARD");
                return newItems;
            }
            return new ArrayList<Map<String, Object>>();
        } else {
            finalSql.append("SELECT");
            finalSql.append(" * ");
            finalSql.append(" FROM ( ");
            finalSql.append(" SELECT ");
            finalSql.append(" ORINGAL.*, ROWNUM rnum ");
            finalSql.append(" FROM ( ");
            finalSql.append(sb);
            finalSql.append(" ) ORINGAL");
            finalSql.append(" ) ");
            finalSql.append(" WHERE ");
            finalSql.append(" rnum > " + (Integer.parseInt(page) - 1) * (Integer.parseInt(rows)));
            finalSql.append(" AND rnum <=  " + Integer.parseInt(page) * (Integer.parseInt(rows)));
            Query query = hibernateTemplate.getSessionFactory().openSession().createSQLQuery(finalSql.toString());
            if (params.size() != 0) {
                for (int i = 0; i < params.size(); i++) {
                    Map<String, Object> map = params.get(i);
                    if (map.get("symbol").equals("R")) {
                        for (Entry<String, Object> entry : map.entrySet()) {
                            if (!(entry.getKey().equals("fuzzy") || entry.getKey().equals("symbol"))) {
                                query.setString(entry.getKey(), (String) entry.getValue());
                            }
                        }
                    } else {
                        if (map.get("fuzzy").equals("T")) {

                            for (Entry<String, Object> entry : map.entrySet()) {
                                if (!(entry.getKey().equals("fuzzy") || entry.getKey().equals("symbol"))) {
                                    query.setString(entry.getKey(), "%" + (String) entry.getValue() + "%");
                                }
                            }

                        } else {
                            for (Entry<String, Object> entry : map.entrySet()) {
                                if (!(entry.getKey().equals("fuzzy") || entry.getKey().equals("symbol"))) {
                                    query.setString(entry.getKey(), (String) entry.getValue());

                                }
                            }
                        }
                    }

                }
            }
            query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
            DataHandleUtil u = new DataHandleUtil();
            List<Map<String, Object>> newItems = u.idCardHandlerItem(query.list(), "ID_CARD");
            return newItems;
        }
    }

    public String getSql(String sql, String crCode, String boxT) {
        StringBuffer sb = new StringBuffer();
        String colTableName = queryCreditItemTableFieldName(
                "select CODE_COLLECTION_TABLE from dic_credit_record_management where cr_code='" + crCode + "'");
        String s1 = colTableName.substring(8);
        String s2 = "CIMP_" + s1;
        sql = sql.replace(s2, colTableName);
        String ruleMin = "";//??
        String ruleMax = "";//??
        if (boxT != null && boxT.length() > 0) {
            ruleMin = boxT.split(",")[0];
            ruleMax = boxT;
            sb.append("select t.* from (");
            sb.append(sql);
            sb.append(")t where " + ruleMin);
            sb.append(" in (select c." + ruleMin + " from " + colTableName + " c where state_valid = '02' ");
            sb.append(" group by " + ruleMax + " having count(1) > 1) order by " + ruleMin);
        }
        return sb.toString();
    }

    /////////////////////////////////////////////////
    //?
    public List<Map<String, Object>> querySelectedRecords(String idOne, String idTwo, String recordItem) {
        String tableName;
        //      String tablePKFieldName=queryCreditItemTableIDField(recordItem);
        tableName = queryCreditItemTableFieldName(
                "select CODE_COLLECTION_TABLE from dic_credit_record_management where cr_code='" + recordItem
                        + "'");
        //      tableName=queryCreditItemTableFieldName("select CODE_original_TABLE from dic_credit_record_management where cr_code='"+recordItem+"'");

        String sql = "select * from " + tableName + " where uuid in ('" + idOne + "','" + idTwo + "')";
        List<Map<String, Object>> list = dao.qryBySql(sql);
        return list;
    }

    //?
    @Transactional
    public Map<String, Object> mergeRecord(Map<String, Object> params) throws Exception {
        Map<String, Object> msg = new HashMap<String, Object>();
        String tableCode = (String) params.get("tableCode");
        String id = UUID.randomUUID().toString().replace("-", "");
        org.hibernate.classic.Session hibsession = dao.getHibernateTemplate().getSessionFactory()
                .getCurrentSession();
        boolean flag = false;
        Date tt = new Date();
        String preid = (String) params.get("idOne");
        if ("0101000000".equals(tableCode)) {//?
            CimpCoDoctor preobj = (CimpCoDoctor) hibsession.get(CimpCoDoctor.class, preid);
            CimpCoDoctor newobj = (CimpCoDoctor) bindData2Class(params, CimpCoDoctor.class, null);
            CimpCoDoctor finalobj = new CimpCoDoctor();
            //         BeanUtils.copyProperties(doctorNew , doctorOld , new String[]{});
            //               doctorOld .setUuid(id);
            //               doctorOld .setState_release("02");
            //         hibsession.save(doctorOld );
            //         CimpCoDoctor doctor=(CimpCoDoctor) hibsession.get(CimpCoDoctor.class, preid);
            //         doctor=(CimpCoDoctor) bindData2Class(params, CimpCoDoctor.class, null);
            //         doctor.setUuid(id);
            //         doctor.setState_release("02");
            //         hibsession.save(finalDoctor);
            //
            //         Field[] field = doctorOld.getClass().getDeclaredFields();
            //         for (Field f : field) {
            //            if (!f.getName().equals("uuid")) {
            //               Field tempField = finalDoctor.getClass().getDeclaredField(f.getName());
            //               tempField.setAccessible(true);
            //               Object val = tempField.get(doctorOld);// 
            //               if (val != null) {
            //                  tempField.set(finalDoctor, val);
            //               }
            //
            //            }
            //            
            //         }
            //         Field[] field2 = doctorNew.getClass().getDeclaredFields();
            //         for (Field f : field2) {
            //            if (!f.getName().equals("uuid")) {
            //               Field tempField = finalDoctor.getClass().getDeclaredField(f.getName());
            //               tempField.setAccessible(true);
            //               Object val = tempField.get(doctorNew);// 
            //               if (val != null) {
            //                  tempField.set(finalDoctor, val);
            //               }
            //
            //            }
            //         
            //         }
            reflect(preobj, newobj, finalobj);
            finalobj.setUuid(id);
            finalobj.setState_valid("02");
            finalobj.setDate_data_access(tt);
            finalobj.setState_release("01");
            hibsession.save(finalobj);
            CimpCoDoctor preDoctorOne = dao.queryById((String) params.get("idTwo"), CimpCoDoctor.class);
            CimpCoDoctor preDoctorTwo = dao.queryById((String) params.get("idOne"), CimpCoDoctor.class);
            preDoctorOne.setState_valid("01");
            preDoctorTwo.setState_valid("01");
            hibsession.update(preDoctorTwo);
            hibsession.update(preDoctorOne);
            flag = true;
            msg.put("mark", "success");
        }
        if ("0102000000".equals(tableCode)) {//?
            CimpCoNurse preNurseOne, preNurseTwo;
            CimpCoNurse preobj = (CimpCoNurse) hibsession.get(CimpCoNurse.class, preid);
            CimpCoNurse newobj = (CimpCoNurse) bindData2Class(params, CimpCoNurse.class, null);
            CimpCoNurse finalobj = new CimpCoNurse();
            reflect(preobj, newobj, finalobj);
            finalobj.setUuid(id);
            finalobj.setState_valid("02");
            finalobj.setDate_data_access(tt);
            finalobj.setState_release("01");
            hibsession.save(finalobj);
            preNurseOne = dao.queryById((String) params.get("idTwo"), CimpCoNurse.class);
            preNurseTwo = dao.queryById((String) params.get("idOne"), CimpCoNurse.class);
            preNurseOne.setState_valid("01");
            preNurseTwo.setState_valid("01");
            hibsession.update(preNurseOne);
            hibsession.update(preNurseTwo);
            flag = true;
            msg.put("mark", "success");
        }
        //      if("0103000000".equals(tableCode)||"0104000000".equals(tableCode)||"0105000000".equals(tableCode)||"0106000000".equals(tableCode)){
        if ("0103000000".equals(tableCode)) {
            //????---???
            PerCoDisinfectant preDisinfectantOne, preDisinfectantTwo;
            PerCoDisinfectant preobj = (PerCoDisinfectant) hibsession.get(PerCoDisinfectant.class, preid);
            PerCoDisinfectant newobj = (PerCoDisinfectant) bindData2Class(params, PerCoDisinfectant.class, null);
            PerCoDisinfectant finalobj = new PerCoDisinfectant();
            reflect(preobj, newobj, finalobj);
            finalobj.setUuid(id);
            finalobj.setState_valid("02");
            finalobj.setDate_data_access(tt);
            finalobj.setState_release("01");
            hibsession.save(finalobj);
            preDisinfectantOne = dao.queryById((String) params.get("idOne"), PerCoDisinfectant.class);
            preDisinfectantTwo = dao.queryById((String) params.get("idTwo"), PerCoDisinfectant.class);
            preDisinfectantOne.setState_valid("01");
            preDisinfectantTwo.setState_valid("01");
            hibsession.update(preDisinfectantOne);
            hibsession.update(preDisinfectantTwo);
            flag = true;
            msg.put("mark", "success");
        }
        if ("0104000000".equals(tableCode)) {
            //??????---???
            PerCoWater preWaterOne, preWaterTwo;
            PerCoWater preobj = (PerCoWater) hibsession.get(PerCoWater.class, preid);
            PerCoWater newobj = (PerCoWater) bindData2Class(params, PerCoWater.class, null);
            PerCoWater finalobj = new PerCoWater();
            reflect(preobj, newobj, finalobj);
            finalobj.setUuid(id);
            finalobj.setState_valid("02");
            finalobj.setDate_data_access(tt);
            finalobj.setState_release("01");
            hibsession.save(finalobj);
            preWaterOne = dao.queryById((String) params.get("idOne"), PerCoWater.class);
            preWaterTwo = dao.queryById((String) params.get("idTwo"), PerCoWater.class);
            preWaterOne.setState_valid("01");
            preWaterTwo.setState_valid("01");
            hibsession.update(preWaterOne);
            hibsession.update(preWaterTwo);
            flag = true;
            msg.put("mark", "success");
        }
        //      if("0104000000".equals(tableCode)){//?????
        //         
        //      }
        //      if("0105000000".equals(tableCode)){//??????
        //         
        //      }
        //      if("0106000000".equals(tableCode)){//?????
        //         
        //      }
        if ("0107000000".equals(tableCode)) {//???
            CimpCoPublicplaces preOne, preTwo;
            CimpCoPublicplaces preobj = (CimpCoPublicplaces) hibsession.get(CimpCoPublicplaces.class, preid);
            CimpCoPublicplaces newobj = (CimpCoPublicplaces) bindData2Class(params, CimpCoPublicplaces.class, null);
            CimpCoPublicplaces finalobj = new CimpCoPublicplaces();
            reflect(preobj, newobj, finalobj);
            finalobj.setUuid(id);
            finalobj.setState_valid("02");
            finalobj.setDate_data_access(tt);
            finalobj.setState_release("01");
            hibsession.save(finalobj);
            preOne = dao.queryById((String) params.get("idTwo"), CimpCoPublicplaces.class);
            preTwo = dao.queryById((String) params.get("idOne"), CimpCoPublicplaces.class);
            preOne.setState_valid("01");
            preTwo.setState_valid("01");
            hibsession.update(preOne);
            hibsession.update(preTwo);
            flag = true;
            msg.put("mark", "success");

        }
        if ("0108000000".equals(tableCode)) {//?????
            CimpCoWater preOne, preTwo;
            CimpCoWater preobj = (CimpCoWater) hibsession.get(CimpCoWater.class, preid);
            CimpCoWater newobj = (CimpCoWater) bindData2Class(params, CimpCoWater.class, null);
            CimpCoWater finalobj = new CimpCoWater();
            reflect(preobj, newobj, finalobj);
            finalobj.setUuid(id);
            finalobj.setState_valid("02");
            finalobj.setDate_data_access(tt);
            finalobj.setState_release("01");
            hibsession.save(finalobj);
            preOne = dao.queryById((String) params.get("idTwo"), CimpCoWater.class);
            preTwo = dao.queryById((String) params.get("idOne"), CimpCoWater.class);
            preOne.setState_valid("01");
            preTwo.setState_valid("01");
            hibsession.update(preOne);
            hibsession.update(preTwo);
            flag = true;
            msg.put("mark", "success");
        }
        if ("0109000000".equals(tableCode)) {//????
            CimpCoDisinfectant preOne, preTwo;
            CimpCoDisinfectant preobj = (CimpCoDisinfectant) hibsession.get(CimpCoDisinfectant.class, preid);
            CimpCoDisinfectant newobj = (CimpCoDisinfectant) bindData2Class(params, CimpCoDisinfectant.class, null);
            CimpCoDisinfectant finalobj = new CimpCoDisinfectant();
            reflect(preobj, newobj, finalobj);
            finalobj.setUuid(id);
            finalobj.setState_valid("02");
            finalobj.setDate_data_access(tt);
            finalobj.setState_release("01");
            hibsession.save(finalobj);
            preOne = dao.queryById((String) params.get("idTwo"), CimpCoDisinfectant.class);
            preTwo = dao.queryById((String) params.get("idOne"), CimpCoDisinfectant.class);
            preOne.setState_valid("01");
            preTwo.setState_valid("01");
            hibsession.update(preOne);
            hibsession.update(preTwo);
            flag = true;
            msg.put("mark", "success");
        }
        //      if("0110000000".equals(tableCode)){//????
        //         msg.put("mark", "success");
        //         return msg;
        //      }
        if ("0111000000".equals(tableCode)) {//??????
            CimpCoWater preOne, preTwo;
            CimpCoWater preobj = (CimpCoWater) hibsession.get(CimpCoWater.class, preid);
            CimpCoWater newobj = (CimpCoWater) bindData2Class(params, CimpCoWater.class, null);
            CimpCoWater finalobj = new CimpCoWater();
            reflect(preobj, newobj, finalobj);
            finalobj.setUuid(id);
            finalobj.setState_valid("02");
            finalobj.setDate_data_access(tt);
            finalobj.setState_release("01");
            hibsession.save(finalobj);
            preOne = dao.queryById((String) params.get("idTwo"), CimpCoWater.class);
            preTwo = dao.queryById((String) params.get("idOne"), CimpCoWater.class);
            preOne.setState_valid("01");
            preTwo.setState_valid("01");
            hibsession.update(preOne);
            hibsession.update(preTwo);
            flag = true;
            msg.put("mark", "success");
        }
        if ("0112000000".equals(tableCode)) {//????
            CimpCoRadiation preOne, preTwo;
            CimpCoRadiation preobj = (CimpCoRadiation) hibsession.get(CimpCoRadiation.class, preid);
            CimpCoRadiation newobj = (CimpCoRadiation) bindData2Class(params, CimpCoRadiation.class, null);
            CimpCoRadiation finalobj = new CimpCoRadiation();
            reflect(preobj, newobj, finalobj);
            finalobj.setUuid(id);
            finalobj.setState_valid("02");
            finalobj.setDate_data_access(tt);
            finalobj.setState_release("01");
            hibsession.save(finalobj);
            preOne = dao.queryById((String) params.get("idTwo"), CimpCoRadiation.class);
            preTwo = dao.queryById((String) params.get("idOne"), CimpCoRadiation.class);
            preOne.setState_valid("01");
            preTwo.setState_valid("01");
            hibsession.update(preOne);
            hibsession.update(preTwo);
            flag = true;
            msg.put("mark", "success");
        }
        if ("0113000000".equals(tableCode)) {//??????
            CimpCoOccServices preOne, preTwo;
            CimpCoOccServices preobj = (CimpCoOccServices) hibsession.get(CimpCoOccServices.class, preid);
            CimpCoOccServices newobj = (CimpCoOccServices) bindData2Class(params, CimpCoOccServices.class, null);
            CimpCoOccServices finalobj = new CimpCoOccServices();
            reflect(preobj, newobj, finalobj);
            finalobj.setUuid(id);
            finalobj.setStateValid("02");
            finalobj.setDateDataAccess(tt);
            finalobj.setStateRelease("01");
            hibsession.save(finalobj);
            preOne = dao.queryById((String) params.get("idTwo"), CimpCoOccServices.class);
            preTwo = dao.queryById((String) params.get("idOne"), CimpCoOccServices.class);
            preOne.setStateValid("01");
            preTwo.setStateValid("01");
            hibsession.update(preOne);
            hibsession.update(preTwo);
            flag = true;
            msg.put("mark", "success");
        }
        if ("0201010000".equals(tableCode)) {//???
            CimpCoDiscipline preOne, preTwo;
            CimpCoDiscipline preobj = (CimpCoDiscipline) hibsession.get(CimpCoDiscipline.class, preid);
            CimpCoDiscipline newobj = (CimpCoDiscipline) bindData2Class(params, CimpCoDiscipline.class, null);
            CimpCoDiscipline finalobj = new CimpCoDiscipline();
            reflect(preobj, newobj, finalobj);
            finalobj.setUuid(id);
            finalobj.setState_valid("02");
            finalobj.setDate_data_access(tt);
            finalobj.setState_release("01");
            hibsession.save(finalobj);
            preOne = dao.queryById((String) params.get("idTwo"), CimpCoDiscipline.class);
            preTwo = dao.queryById((String) params.get("idOne"), CimpCoDiscipline.class);
            preOne.setState_valid("01");
            preTwo.setState_valid("01");
            hibsession.update(preOne);
            hibsession.update(preTwo);
            flag = true;
            msg.put("mark", "success");
        }
        if ("0202020000".equals(tableCode)) {//???
            CimpCoDiscipline preOne, preTwo;
            CimpCoDiscipline preobj = (CimpCoDiscipline) hibsession.get(CimpCoDiscipline.class, preid);
            CimpCoDiscipline newobj = (CimpCoDiscipline) bindData2Class(params, CimpCoDiscipline.class, null);
            CimpCoDiscipline finalobj = new CimpCoDiscipline();
            reflect(preobj, newobj, finalobj);
            finalobj.setUuid(id);
            finalobj.setState_valid("02");
            finalobj.setDate_data_access(tt);
            finalobj.setState_release("01");
            hibsession.save(finalobj);
            preOne = dao.queryById((String) params.get("idTwo"), CimpCoDiscipline.class);
            preTwo = dao.queryById((String) params.get("idOne"), CimpCoDiscipline.class);
            preOne.setState_valid("01");
            preTwo.setState_valid("01");
            hibsession.update(preOne);
            hibsession.update(preTwo);
            flag = true;
            msg.put("mark", "success");
        }
        if ("0203050000".equals(tableCode)) {//???
            CimpCoDiscipline preOne, preTwo;
            CimpCoDiscipline preobj = (CimpCoDiscipline) hibsession.get(CimpCoDiscipline.class, preid);
            CimpCoDiscipline newobj = (CimpCoDiscipline) bindData2Class(params, CimpCoDiscipline.class, null);
            CimpCoDiscipline finalobj = new CimpCoDiscipline();
            reflect(preobj, newobj, finalobj);
            finalobj.setUuid(id);
            finalobj.setState_valid("02");
            finalobj.setDate_data_access(tt);
            finalobj.setState_release("01");
            hibsession.save(finalobj);
            preOne = dao.queryById((String) params.get("idTwo"), CimpCoDiscipline.class);
            preTwo = dao.queryById((String) params.get("idOne"), CimpCoDiscipline.class);
            preOne.setState_valid("01");
            preTwo.setState_valid("01");
            hibsession.update(preOne);
            hibsession.update(preTwo);
            flag = true;
            msg.put("mark", "success");
        }
        if ("0204030000".equals(tableCode)) {//?)???
            CimpCoDiscipline preOne, preTwo;
            CimpCoDiscipline preobj = (CimpCoDiscipline) hibsession.get(CimpCoDiscipline.class, preid);
            CimpCoDiscipline newobj = (CimpCoDiscipline) bindData2Class(params, CimpCoDiscipline.class, null);
            CimpCoDiscipline finalobj = new CimpCoDiscipline();
            reflect(preobj, newobj, finalobj);
            finalobj.setUuid(id);
            finalobj.setState_valid("02");
            finalobj.setDate_data_access(tt);
            finalobj.setState_release("01");
            hibsession.save(finalobj);
            preOne = dao.queryById((String) params.get("idTwo"), CimpCoDiscipline.class);
            preTwo = dao.queryById((String) params.get("idOne"), CimpCoDiscipline.class);
            preOne.setState_valid("01");
            preTwo.setState_valid("01");
            hibsession.update(preOne);
            hibsession.update(preTwo);
            flag = true;
            msg.put("mark", "success");
        }
        if ("0205040000".equals(tableCode)) {//???
            CimpCoDiscipline preOne, preTwo;
            CimpCoDiscipline preobj = (CimpCoDiscipline) hibsession.get(CimpCoDiscipline.class, preid);
            CimpCoDiscipline newobj = (CimpCoDiscipline) bindData2Class(params, CimpCoDiscipline.class, null);
            CimpCoDiscipline finalobj = new CimpCoDiscipline();
            reflect(preobj, newobj, finalobj);
            finalobj.setUuid(id);
            finalobj.setState_valid("02");
            finalobj.setDate_data_access(tt);
            finalobj.setState_release("01");
            hibsession.save(finalobj);
            preOne = dao.queryById((String) params.get("idTwo"), CimpCoDiscipline.class);
            preTwo = dao.queryById((String) params.get("idOne"), CimpCoDiscipline.class);
            preOne.setState_valid("01");
            preTwo.setState_valid("01");
            hibsession.update(preOne);
            hibsession.update(preTwo);
            flag = true;
            msg.put("mark", "success");
        }
        if ("0206080000".equals(tableCode)) {//???
            CimpCoDiscipline preOne, preTwo;
            CimpCoDiscipline preobj = (CimpCoDiscipline) hibsession.get(CimpCoDiscipline.class, preid);
            CimpCoDiscipline newobj = (CimpCoDiscipline) bindData2Class(params, CimpCoDiscipline.class, null);
            CimpCoDiscipline finalobj = new CimpCoDiscipline();
            reflect(preobj, newobj, finalobj);
            finalobj.setUuid(id);
            finalobj.setState_valid("02");
            finalobj.setDate_data_access(tt);
            finalobj.setState_release("01");
            hibsession.save(finalobj);
            preOne = dao.queryById((String) params.get("idTwo"), CimpCoDiscipline.class);
            preTwo = dao.queryById((String) params.get("idOne"), CimpCoDiscipline.class);
            preOne.setState_valid("01");
            preTwo.setState_valid("01");
            hibsession.update(preOne);
            hibsession.update(preTwo);
            flag = true;
            msg.put("mark", "success");
        }
        if ("0207020000".equals(tableCode)) {//??????
            CimpCoDiscipline preOne, preTwo;
            CimpCoDiscipline preobj = (CimpCoDiscipline) hibsession.get(CimpCoDiscipline.class, preid);
            CimpCoDiscipline newobj = (CimpCoDiscipline) bindData2Class(params, CimpCoDiscipline.class, null);
            CimpCoDiscipline finalobj = new CimpCoDiscipline();
            reflect(preobj, newobj, finalobj);
            finalobj.setUuid(id);
            finalobj.setState_valid("02");
            finalobj.setDate_data_access(tt);
            finalobj.setState_release("01");
            hibsession.save(finalobj);
            preOne = dao.queryById((String) params.get("idTwo"), CimpCoDiscipline.class);
            preTwo = dao.queryById((String) params.get("idOne"), CimpCoDiscipline.class);
            preOne.setState_valid("01");
            preTwo.setState_valid("01");
            hibsession.update(preOne);
            hibsession.update(preTwo);
            flag = true;
            msg.put("mark", "success");
            //          return msg;   
        }
        if ("0208070000".equals(tableCode)) {//???
            CimpCoDiscipline preOne, preTwo;
            CimpCoDiscipline preobj = (CimpCoDiscipline) hibsession.get(CimpCoDiscipline.class, preid);
            CimpCoDiscipline newobj = (CimpCoDiscipline) bindData2Class(params, CimpCoDiscipline.class, null);
            CimpCoDiscipline finalobj = new CimpCoDiscipline();
            reflect(preobj, newobj, finalobj);
            finalobj.setUuid(id);
            finalobj.setState_valid("02");
            finalobj.setDate_data_access(tt);
            finalobj.setState_release("01");
            hibsession.save(finalobj);
            preOne = dao.queryById((String) params.get("idTwo"), CimpCoDiscipline.class);
            preTwo = dao.queryById((String) params.get("idOne"), CimpCoDiscipline.class);
            preOne.setState_valid("01");
            preTwo.setState_valid("01");
            hibsession.update(preOne);
            hibsession.update(preTwo);
            flag = true;
            msg.put("mark", "success");
        }
        if ("0401000000".equals(tableCode)) {//??
            CimpCoExDonateBlood preOne, preTwo;
            CimpCoExDonateBlood preobj = (CimpCoExDonateBlood) hibsession.get(CimpCoExDonateBlood.class, preid);
            CimpCoExDonateBlood newobj = (CimpCoExDonateBlood) bindData2Class(params, CimpCoExDonateBlood.class,
                    null);
            CimpCoExDonateBlood finalobj = new CimpCoExDonateBlood();
            reflect(preobj, newobj, finalobj);
            finalobj.setUuid(id);
            finalobj.setState_valid("02");
            finalobj.setDate_data_access(tt);
            finalobj.setState_release("01");
            hibsession.save(finalobj);
            preOne = dao.queryById((String) params.get("idTwo"), CimpCoExDonateBlood.class);
            preTwo = dao.queryById((String) params.get("idOne"), CimpCoExDonateBlood.class);
            preOne.setState_valid("01");
            preTwo.setState_valid("01");
            hibsession.update(preOne);
            hibsession.update(preTwo);
            flag = true;
            msg.put("mark", "success");
        }
        //      if("0301000000".equals(tableCode)){//???
        //         msg.put("mark", "success");
        //         return msg;
        //      }
        //      if("0302000000".equals(tableCode)){//???
        //         msg.put("mark", "success");
        //      }
        if ("0303000000".equals(tableCode)) {//??
            CimpCoBlaObjectInvolved preOne, preTwo;
            CimpCoBlaObjectInvolved preobj = (CimpCoBlaObjectInvolved) hibsession.get(CimpCoBlaObjectInvolved.class,
                    preid);
            CimpCoBlaObjectInvolved newobj = (CimpCoBlaObjectInvolved) bindData2Class(params,
                    CimpCoBlaObjectInvolved.class, null);
            CimpCoBlaObjectInvolved finalobj = new CimpCoBlaObjectInvolved();
            reflect(preobj, newobj, finalobj);
            finalobj.setUuid(id);
            finalobj.setStateValid("02");
            finalobj.setDateDataAccess(tt);
            finalobj.setStateRelease("01");
            hibsession.save(finalobj);
            preOne = dao.queryById((String) params.get("idTwo"), CimpCoBlaObjectInvolved.class);
            preTwo = dao.queryById((String) params.get("idOne"), CimpCoBlaObjectInvolved.class);
            preOne.setStateValid("01");
            preTwo.setStateValid("01");
            hibsession.update(preOne);
            hibsession.update(preTwo);
            flag = true;
            msg.put("mark", "success");
        }
        if ("0304000000".equals(tableCode)) {//??
            CimpCoBlaUnit preOne, preTwo;
            CimpCoBlaUnit preobj = (CimpCoBlaUnit) hibsession.get(CimpCoBlaUnit.class, preid);
            CimpCoBlaUnit newobj = (CimpCoBlaUnit) bindData2Class(params, CimpCoBlaUnit.class, null);
            CimpCoBlaUnit finalobj = new CimpCoBlaUnit();
            reflect(preobj, newobj, finalobj);
            finalobj.setUuid(id);
            finalobj.setStateValid("02");
            finalobj.setDateDataAccess(tt);
            finalobj.setStateRelease("01");
            hibsession.save(finalobj);
            preOne = dao.queryById((String) params.get("idTwo"), CimpCoBlaUnit.class);
            preTwo = dao.queryById((String) params.get("idOne"), CimpCoBlaUnit.class);
            preOne.setStateValid("01");
            preTwo.setStateValid("01");
            hibsession.update(preOne);
            hibsession.update(preTwo);
            flag = true;
            msg.put("mark", "success");
        }
        if (flag) {
            CimpDeduplicateLog deduplicateLog1 = new CimpDeduplicateLog(),
                    deduplicateLog2 = new CimpDeduplicateLog();
            Subject currentUser = SecurityUtils.getSubject();
            Session sessions = currentUser.getSession();
            UserVO user = (UserVO) sessions.getAttribute("loginuser");
            String id1 = UUID.randomUUID().toString().replace("-", "");
            String id2 = UUID.randomUUID().toString().replace("-", "");
            deduplicateLog1.setId(id1);
            deduplicateLog2.setId(id2);
            deduplicateLog1.setPreRecordUUID(params.get("idOne").toString());
            deduplicateLog2.setPreRecordUUID(params.get("idTwo").toString());
            deduplicateLog1.setNewRecordUUID(id);
            deduplicateLog2.setNewRecordUUID(id);
            deduplicateLog1.setUserId(user.getId());
            deduplicateLog2.setUserId(user.getId());
            deduplicateLog1.setOperateDate(tt);
            deduplicateLog2.setOperateDate(tt);
            ;
            deduplicateLog1.setCreditTypeCode(tableCode.substring(0, 2));
            deduplicateLog2.setCreditTypeCode(tableCode.substring(0, 2));
            deduplicateLog1.setCreditItemCode(tableCode);
            deduplicateLog2.setCreditItemCode(tableCode);
            deduplicateLog1.setOperateType("01");
            deduplicateLog2.setOperateType("01");
            deduplicateLog1.setOrgCode(user.getOrgCode());
            deduplicateLog2.setOrgCode(user.getOrgCode());
            hibsession.save(deduplicateLog1);
            hibsession.save(deduplicateLog2);
            return msg;
        }
        msg.put("mark", "fail");
        return msg;
    }

    @Transactional
    public boolean deleteRecordEntry(String[] id, String tableCode) {
        String tableName;
        tableName = queryCreditItemTableFieldName(
                "select CODE_COLLECTION_TABLE from dic_credit_record_management where cr_code='" + tableCode + "'");
        String newID;
        Subject currentUser = SecurityUtils.getSubject();
        Session sessions = currentUser.getSession();
        UserVO user = (UserVO) sessions.getAttribute("loginuser");
        Date time = new Date();
        try {
            for (int i = 0; i < id.length; i++) {
                if (tableName != null && !tableName.isEmpty()) {
                    newID = UUID.randomUUID().toString().replace("-", "");
                    String sql = "update " + tableName + " set STATE_VALID='01' where uuid='" + id[i] + "'";
                    org.hibernate.classic.Session hibsession = dao.getHibernateTemplate().getSessionFactory()
                            .getCurrentSession();
                    dao.executeSql(sql);
                    CimpDeduplicateLog deduplicateLog = new CimpDeduplicateLog();
                    deduplicateLog.setId(newID);
                    deduplicateLog.setPreRecordUUID(id[i]);
                    deduplicateLog.setUserId(user.getId());
                    deduplicateLog.setOperateDate(time);
                    deduplicateLog.setCreditTypeCode(tableCode.substring(0, 2));
                    deduplicateLog.setCreditItemCode(tableCode);
                    deduplicateLog.setOperateType("02");
                    deduplicateLog.setOrgCode(user.getOrgCode());
                    hibsession.save(deduplicateLog);
                }
            }
            //         dao.executeDelOrUpdateSql("DELETE FROM CimpPiBasDoctor WHERE doctorId = ? ",
            //               new Object[]{id}, new Type[]{StringType.INSTANCE});
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    // springmvc ??date?
    /*
     * @InitBinder protected void initBinder(WebDataBinder binder) {
     * SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
     * binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat,
     * true)); }
     */

    /*
     * ???02?
     * 
     */
    public boolean changeStatus(String tableName) {
        if (tableName == null) {
            return false;
        } else {
            String sql = "update " + tableName + " set state_valid='02' where PRIME_INDEX is not null";
            dao.executeDelOrUpdateSql(sql, null, null);
            return true;
        }
    }

    public Object reflect(Object preobj, Object newobj, Object finalobj) throws Exception {
        Field[] field = preobj.getClass().getDeclaredFields();
        for (Field f : field) {
            if (!f.getName().equals("uuid")) {
                Field tempField = finalobj.getClass().getDeclaredField(f.getName());
                tempField.setAccessible(true);
                Object val = tempField.get(preobj);// 
                if (val != null) {
                    tempField.set(finalobj, val);
                }
            }
        }
        Field[] field2 = newobj.getClass().getDeclaredFields();
        for (Field f : field2) {
            if (!f.getName().equals("uuid")) {
                Field tempField = finalobj.getClass().getDeclaredField(f.getName());
                tempField.setAccessible(true);
                Object val = tempField.get(newobj);// 
                if (val != null) {
                    tempField.set(finalobj, val);
                }
            }
        }
        return finalobj;
    }

    public List<Map<String, Object>> getCreditTypeByPermissions(String orgCode, String type) {
        List<Map<String, Object>> result = new ArrayList<Map<String, Object>>();
        StringBuffer sql = new StringBuffer();
        sql.append("SELECT ");
        sql.append(" * ");
        sql.append(" FROM ");
        sql.append(" DIC_CREDIT_INFO_TYPE ORDER BY ORDERS");
        Query query = hibernateTemplate.getSessionFactory().openSession().createSQLQuery(sql.toString());
        query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
        List<Map<String, Object>> list = query.list();
        System.out.println("?" + orgCode);
        for (Map<String, Object> map : list) {
            String departments = (String) map.get("BELONG_DEPARTMENTS");
            if (Arrays.asList(departments.split(",")).contains(orgCode)) {
                String typename = (String) map.get("NAME");
                if (type.equals("1")) {//1???    2
                    if (orgCode.equals("0000000001")) {
                        if (!typename.isEmpty() && !typename.equals("????")) {
                            result.add(map);
                        }
                    } else if (orgCode.equals("0000000000")) {
                        if (!typename.isEmpty() && !typename.equals("?")) {
                            result.add(map);
                        }
                    } else {
                        result.add(map);
                    }
                }
                if (type.equals("2")) {
                    if (orgCode.equals("0000000001")) {
                        if (!typename.isEmpty() && !typename.equals("????")) {
                            result.add(map);
                        }
                    } else {
                        result.add(map);
                    }
                }
            }
        }
        result.get(0).put("selected", true);
        return result;
    }

    /**
     * ????
     * @author taotouhong
     * @date 20151019 ?4:49:25
     * @param dicTable
     * @return
     */
    public String convertCodes(String dicTable) {
        String sql = "select codes,names from dic_" + dicTable;
        String temp = "<option value=''></option>";
        List<Map<String, Object>> list = dao.qryBySql(sql);
        for (Map<String, Object> obj : list) {
            String names = (String) obj.get("names");
            String codes = (String) obj.get("codes");
            temp += "<option value='" + codes + "'>" + names + "</option>";
        }
        return temp;
    }

    public String convertCodes(String dicTable, String sort) {
        String sql = "select spe_code,spe_name from " + dicTable + " where spe_code like '" + sort + "'";
        String temp = "<option value=''></option>";
        List<Map<String, Object>> list = dao.qryBySql(sql);
        for (Map<String, Object> obj : list) {
            String names = (String) obj.get("spe_name");
            String codes = (String) obj.get("spe_code");
            temp += "<option value='" + codes + "'>" + names + "</option>";
        }
        return temp;
    }

    public List<String> getValByCodes(String dicTable, String code, String type) {
        String sql = "";
        int j = 0;
        String temp = "";
        String[] str = null;
        str = code.split(",");
        if (code.contains("null")) {
            for (int i = 0; i < str.length; i++) {
                if (str[i].equals("'null'")) {
                    j = i;
                }
            }
        }
        if (type.equals("1")) {
            //         sql = "select names from "+dicTable+" where codes in ("+code+") order by instr("+code+",codes)";
            sql = "select names from " + dicTable + " where codes in (" + code + ") ORDER BY \"DECODE\"(codes,"
                    + code + ")";
        } else {
            sql = "select spe_name from " + dicTable + " where spe_code in (" + code
                    + ") ORDER BY \"DECODE\"(spe_code," + code + ")";
        }

        Query query = hibernateTemplate.getSessionFactory().openSession().createSQLQuery(sql);
        List<String> list = query.list();
        if (list.size() == 1) {
            if (str[0].equals(str[1])) {
                list.add(1, list.get(0));
            } else {
                if (j == 0) {
                    temp = list.get(0);
                    list.add(j, "&nbsp;");
                    list.add(1, temp);
                } else {
                    list.add(1, "&nbsp;");
                }
            }
        }
        return list;
    }
}