mybatis項目模塊搭建

mybatis使用步驟

1.PO.xml
2.po定義
3.dao定義

4.PO.xml對應sql語句,返回結果集合
5.mybatis.xml配置別名java

6.bean.xml配置PO.xml路徑,Dao對應bean實例化spring

/**
 * 
 */
package com.ym.qab.commons.dao;

import java.lang.reflect.ParameterizedType;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.ibatis.session.RowBounds;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.CollectionUtils;

import com.ym.qab.commons.dto.Page;
import com.ym.qab.commons.exception.PersistenceException;
import com.ym.qab.commons.persistence.AbstractBaseDao;
import com.ym.qab.commons.persistence.IBaseDAO;
import com.ym.qab.commons.utils.FunIMsgFormat;


/**
 * @author Hing<xingguang.ren@pactera.com>
 * @since 2014年4月19日
 */
public abstract class BaseDao<T, ID> extends AbstractBaseDao implements IBaseDAO<T, ID> {

    private final Logger logger = LoggerFactory.getLogger(getClass().getName());

    public static final String POSTFIX_SELECTBYID = ".selectById";
    public static final String POSTFIX_SELECTALL = ".selectAll";
    public static final String POSTFIX_SELECTBYPROPERTIES = ".selectByProperties";
    public static final String POSTFIX_SELECTBYIDS = ".selectByIds";
    public static final String POSTFIX_SELECTBYMAP = ".selectByMap";
    public static final String POSTFIX_SELECTIDSLIKEBYMAP = ".selectIdsLikeByMap";
    public static final String POSTFIX_PKSELECTMAP = ".pkSelectByMap";
    public static final String POSTFIX_COUNT = ".count";
    public static final String POSTFIX_COUNTLIKEBYMAP = ".countLikeByMap";
    public static final String POSTFIX_INSERT = ".insert";
    public static final String POSTFIX_DELETEBYID = ".deleteById";
    public static final String POSTFIX_DELETEBYIDS = ".deleteByIds";
    public static final String POSTFIX_DELETEBYIDSMAP = ".deleteByIdsMap";
    public static final String POSTFIX_DELETEBYMAP = ".deleteByMap";
    public static final String POSTFIX_UPDATE = ".update";
    public static final String POSTFIX_UPDATEBYMAP = ".updateByMap";
    public static final String POSTFIX_UPDATEBYIDSMAP = ".updateByIdsMap";

    protected Class<T> clazz;
    protected String clazzName;


    public String getClazzName() {
        return clazzName;
    }


    public void setClazzName(String clazzName) {
        this.clazzName = clazzName;
    }

    protected T t;


    @SuppressWarnings("unchecked")
    public BaseDao() {
        clazz =
                (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
        clazzName = clazz.getName();
    }


    /**
     * 得到方法名,能夠做爲mybatis的id,便於靈活定義id<br>
     * 方法名 == id
     * */
    public String getPostifx() {
        StackTraceElement[] stacks = new Exception().getStackTrace();
        String mn = stacks[1].getMethodName();
        return "." + mn;
    }


    /**
     * 經過id獲得實體對象
     */
    @Override
    public T selectById(ID id) {
        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG.getFormat("開始調用{}的findById方法,傳入的參數是{}。"),
            new Object[] { this.getClass().getName(), id });
        if (id == null)
            return null;
        T t = getSqlSession().selectOne(clazzName + POSTFIX_SELECTBYID, id);
        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG.getFormat("結束執行{}的findById方,執行的結果是{}。"),
            new Object[] { this.getClass().getName(), t });
        return t;

    }


    @Override
    public List<T> selectAll() {
        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG.getFormat("開始調用{}的findAll()方法。"), this.getClass()
            .getName());
        List<T> list = getSqlSession().selectList(clazzName + POSTFIX_SELECTALL);
        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG.getFormat("結束執行{}的findAll()方法,結果是{},size={}。"),
            new Object[] { this.getClass().getName(), list, list.size() });
        return list;
    }


    @Override
    public T selectByProperties(String propertie, Object values) {
        return selectByProperties(new String[] { propertie }, values);
    }


    @Override
    public T selectByProperties(String[] properties, Object... values) {
        return findOneByStatementPostfix(".selectByProperties", properties, values, null, null);
    }


    @Override
    public <E> E selectByProperties(String statement, String[] properties, Object... values) {
        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG
            .getFormat("開始調用{}的方法,傳遞的參數是statement={},properties={},propertyValues={}。"),
            new Object[] { this.getClass().getName(), statement, properties, values });
        if (StringUtils.isEmpty(statement))
            return null;
        Map<String, Object> map = buildMap(properties, values);
        E t = getSqlSession().selectOne(clazzName + statement, map);
        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG.getFormat("結束執行{}的{}方法,結果是{}。"),
            new Object[] { this.getClass().getName(), statement, t });
        return t;
    }


    /**
     * 根據ids獲取實體列表
     * 
     * @param ids
     * @return
     */
    @Override
    public List<T> selectByIds(List<ID> ids) {
        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG.getFormat("開始調用{}的findByIds方法,傳入的參數是{}。"),
            new Object[] { this.getClass().getName(), ids });
        if (CollectionUtils.isEmpty(ids)) {
            throw new PersistenceException("傳入參數爲空!");
        }
        List<T> list = getSqlSession().selectList(clazzName + POSTFIX_SELECTBYIDS, ids);
        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG.getFormat("結束執行{}的findByIds方法,結果是{},size={}。"),
            new Object[] { this.getClass().getName(), list, list.size() });
        return list;
    }


    /**
     * 根據條件查詢結果
     * 
     * @param properties
     *            查詢條件名
     * @param propertyValues
     *            查詢條件值
     * @return
     */
    public List<T> selectByMap(String[] properties, Object[] propertyValues, String orderBy, String order)
            throws PersistenceException {
        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG
            .getFormat("開始調用{}的selectByMap方法,傳入的參數是properties={},propertyValues={},orderBy={},order={}。"),
            new Object[] { this.getClass().getName(), properties, propertyValues, orderBy, order });
        Map<String, Object> map = buildMapWithOrder(properties, propertyValues, orderBy, order);
        List<T> list = getSqlSession().selectList(clazzName + POSTFIX_SELECTBYMAP, map);
        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG.getFormat("結束執行{}的selectByMap方法,結果是{},size={}。"),
            new Object[] { this.getClass().getName(), list, list.size() });
        return list;
    }


    /**
     * 根據條件分頁查詢結果
     * 
     * @param properties
     * @param propertyValues
     * @param offset
     *            起始記錄
     * @param limit
     *            最大記錄數
     * @param orderBy
     * @param order
     * @return
     * @throws PersistenceException
     */
    public List<T> selectByMap(String[] properties, Object[] propertyValues, int offset, int limit,
            String orderBy, String order) throws PersistenceException {
        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG
            .getFormat("開始調用{}的selectByMap方法,傳入的參數是properties={},propertyValues={},orderBy={},order={}。"),
            new Object[] { this.getClass().getName(), properties, propertyValues, orderBy, order });
        Map<String, Object> map = buildMapWithOrder(properties, propertyValues, orderBy, order);
        RowBounds rowBound = new RowBounds(offset, limit);
        List<T> list = getSqlSession().selectList(clazzName + POSTFIX_SELECTBYMAP, map, rowBound);
        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG.getFormat("結束執行{}的selectByMap方法,結果是{},size={}。"),
            new Object[] { this.getClass().getName(), list, list.size() });
        return list;
    }


    /** like分頁查詢(不走列表緩存) */
    public List<T> pageLikeByMap(String[] properties, Object[] propertyValues, String orderBy, String order,
            int pageSize, int pageNo) throws PersistenceException {
        logger
            .debug(
                FunIMsgFormat.MsgStyle.DEFAULT_LOG
                    .getFormat("開始調用{}的pageLikeByMap方法,傳入的參數是properties={},propertyValues={},orderBy={},order={},pageSize={},pageNo={}。"),
                new Object[] { this.getClass().getName(), properties, propertyValues, orderBy, order,
                              pageSize, pageNo });
        Map<String, Object> map =
                buildMapWithOrderAndPagination(properties, propertyValues, orderBy, order, pageSize, pageNo);
        List<ID> ids = getSqlSession().selectList(clazzName + POSTFIX_SELECTIDSLIKEBYMAP, map);
        List<T> list = selectByIds(ids);
        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG.getFormat("結束執行{}的pageLikeByMap方法,結果是{},size={}。"),
            new Object[] { this.getClass().getName(), list, list.size() });
        return list;
    }


    /**
     * 新增對象
     */
    @Override
    public T insert(T entity) throws PersistenceException {
        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG.getFormat("開始調用{}的insert方法,傳入的參數是entity={}。"),
            new Object[] { this.getClass().getName(), entity });
        if (entity == null)
            throw new PersistenceException("保存的數據爲空!");
        try {
            getSqlSession().insert(clazzName + POSTFIX_INSERT, entity);
        } catch (Exception ex) {
            logger.debug(FunIMsgFormat.MsgStyle.ERROR_REPORT.getFormat("執行{}的insert方法出現異常,具體緣由是:{}"),
                new Object[] { this.getClass().getName(), ex.getStackTrace() });
            throw new PersistenceException("執行數據插入出錯。", ex);
        }
        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG.getFormat("結束執行{}的insert方法,結果是{}。"),
            new Object[] { this.getClass().getName(), entity });
        return entity;
    }


    /**
     * 更新對象
     */
    @Override
    public T update(T entity) throws PersistenceException {
        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG.getFormat("開始調用{}的update方法,傳入的參數是entity={}。"),
            new Object[] { this.getClass().getName(), entity });
        if (entity == null)
            throw new PersistenceException("更新的數據爲空!");
        try {
            getSqlSession().update(clazzName + POSTFIX_UPDATE, entity);
        } catch (Exception ex) {
            logger.debug(FunIMsgFormat.MsgStyle.ERROR_REPORT.getFormat("執行{}的update方法出現異常,具體緣由是:{}"),
                new Object[] { this.getClass().getName(), ex.getStackTrace() });
            throw new PersistenceException("執行數據更新出錯。", ex);
        }
        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG.getFormat("結束執行{}的update方法,結果是{}。"),
            new Object[] { this.getClass().getName(), entity });
        return entity;
    }


    /**
     * 根據ID刪除對象
     */
    @Override
    public void deleteById(ID id) throws PersistenceException {
        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG.getFormat("開始調用{}的deleteById方法,傳遞的參數是id={}。"),
            new Object[] { this.getClass().getName(), id });
        if (id == null)
            throw new PersistenceException("主鍵爲空!");
        try {
            getSqlSession().delete(clazzName + POSTFIX_DELETEBYID, id);
        } catch (Exception ex) {
            logger.debug(FunIMsgFormat.MsgStyle.ERROR_REPORT.getFormat("執行{}的deleteById方法出現異常,具體緣由是:{}"),
                new Object[] { this.getClass().getName(), ex.getStackTrace() });
            throw new PersistenceException("執行刪除出錯。", ex);
        }
        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG.getFormat("結束執行{}的deleteById方法。"), this.getClass()
            .getName());
    }


    /**
     * 根據ID刪除對象
     */
    @Override
    public void deleteByIds(List<ID> ids) throws PersistenceException {
        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG.getFormat("開始調用{}的deleteByIds方法,傳遞的參數是ids={}。"),
            new Object[] { this.getClass().getName(), ids });
        if (CollectionUtils.isEmpty(ids))
            throw new PersistenceException("主鍵爲空!");
        try {
            getSqlSession().delete(clazzName + POSTFIX_DELETEBYIDS, ids);
        } catch (Exception ex) {
            logger.debug(FunIMsgFormat.MsgStyle.ERROR_REPORT.getFormat("執行{}的deleteByIds方法出現異常,具體緣由是:{}"),
                new Object[] { this.getClass().getName(), ex.getStackTrace() });
            throw new PersistenceException("執行批量刪除出錯。", ex);
        }
        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG.getFormat("結束執行{}的deleteByIds方法。"), this.getClass()
            .getName());
    }


    @Override
    public Integer count(String propertyName, Object propertyValue) {
        return count(new String[] { propertyName }, new Object[] { propertyValue });
    }


    @Override
    public Integer count(String[] propertyNames, Object... propertyValues) throws PersistenceException {
        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG
            .getFormat("開始調用{}的count方法,傳入的參數propertyNames={},propertyValues={}"),
            new Object[] { this.getClass().getName(), propertyNames, propertyValues });
        Map<String, Object> map = buildMap(propertyNames, propertyValues);
        BigDecimal cout = (BigDecimal) getSqlSession().selectOne(clazzName + POSTFIX_COUNT, map);
        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG.getFormat("結束執行{}的count方法,執行的結果是{}。"),
            new Object[] { this.getClass().getName(), cout });

        if (cout != null && cout.compareTo(BigDecimal.ZERO) > 0)
            return cout.intValue();

        return BigDecimal.ZERO.intValue();
    }


    @Override
    public Integer countLikeByMap(String[] propertyNames, Object[] propertyValues)
            throws PersistenceException {
        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG
            .getFormat("開始調用{}的countLikeByMap方法,傳入的參數propertyNames={},propertyValues={}"),
            new Object[] { this.getClass().getName(), propertyNames, propertyValues });
        Map<String, Object> map = buildMap(propertyNames, propertyValues);
        Integer cout = (Integer) getSqlSession().selectOne(clazzName + POSTFIX_COUNTLIKEBYMAP, map);
        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG.getFormat("結束執行{}的countLikeByMap方法,執行的結果是{}。"),
            new Object[] { this.getClass().getName(), cout });
        return cout;
    }


    /** 根據自定義SqlMap中的條件語句查詢出記錄數量 */
    @Override
    public Integer countByStatementPostfix(String statementPostfix, String[] properties,
            Object[] propertyValues) throws PersistenceException {
        logger
            .debug(
                FunIMsgFormat.MsgStyle.DEFAULT_LOG
                    .getFormat("開始調用{}的countByStatementPostfix方法,傳入的參數statementPostfix={},propertyNames={},propertyValues={}"),
                new Object[] { this.getClass().getName(), statementPostfix, properties, propertyValues });
        if (StringUtils.isEmpty(statementPostfix))
            return 0;
        Map<String, Object> map = buildMap(properties, propertyValues);
        Integer cout = (Integer) getSqlSession().selectOne(clazzName + statementPostfix, map);
        logger.debug(
            FunIMsgFormat.MsgStyle.DEFAULT_LOG.getFormat("結束執行{}的countByStatementPostfix方法,執行的結果是{}。"),
            new Object[] { this.getClass().getName(), cout });
        if (cout != null) {
            return cout.intValue();
        }

        return 0;

    }


    /**
     * 直接從數據庫查詢出ids列表(包括符合條件的全部id)
     * 
     * @param properties
     *            查詢條件字段名
     * @param propertyValues
     *            字段取值
     * @return
     */
    @Override
    public List<ID> findIdsByMap(String[] properties, Object[] propertyValues, String orderBy, String order)
            throws PersistenceException {
        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG
            .getFormat("開始調用{}的findIdsByMap方法,傳入的參數是properties={},propertyValues={},orderBy={},order={}。"),
            new Object[] { this.getClass().getName(), properties, propertyValues, orderBy, order });
        Map<String, Object> map = buildMapWithOrder(properties, propertyValues, orderBy, order);
        List<ID> list = getSqlSession().selectList(clazzName + POSTFIX_PKSELECTMAP, map);
        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG.getFormat("結束執行{}的findIdsByMap方法,結果是{},size={}。"),
            new Object[] { this.getClass().getName(), list, list.size() });
        return list;
    }


    /**
     * 直接從數據庫查詢出ids列表(包括符合條件的全部id)
     * 
     * @param <E>
     * 
     * @param properties
     *            查詢條件字段名
     * @param propertyValues
     *            字段取值
     * @return
     */
    @Override
    public <E> List<E> findByStatementPostfix(String statement, String[] properties, Object[] propertyValues,
            int offset, int limit) throws PersistenceException {
        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG
            .getFormat("開始調用{}的{}方法,傳入的參數是properties={},propertyValues={}。"), new Object[] {
                                                                                            this.getClass()
                                                                                                .getName(),
                                                                                            statement,
                                                                                            properties,
                                                                                            propertyValues });
        Map<String, Object> map = buildMap(properties, propertyValues);
        RowBounds row = new RowBounds(offset, limit);
        List<E> list = getSqlSession().selectList(clazzName + statement, map, row);
        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG.getFormat("結束執行{}的{}方法,結果是{},size={}。"),
            new Object[] { this.getClass().getName(), statement, list, list.size() });
        return list;
    }


    /**
     * 根據條件查詢結果
     * 
     * @param properties
     *            查詢條件名
     * @param propertyValues
     *            查詢條件值
     * @return
     */
    @Override
    public List<T> findByMap(String[] properties, Object[] propertyValues, String orderBy, String order)
            throws PersistenceException {
        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG
            .getFormat("開始調用{}的findByMap方法,傳入的參數是properties={},propertyValues={},orderBy={},order={}。"),
            new Object[] { this.getClass().getName(), properties, propertyValues, orderBy, order });
        Map<String, Object> map = buildMapWithOrder(properties, propertyValues, orderBy, order);
        List<T> list = getSqlSession().selectList(clazzName + POSTFIX_SELECTBYMAP, map);
        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG.getFormat("結束執行{}的findByMap方法,結果是{},size={}。"),
            new Object[] { this.getClass().getName(), list, list.size() });
        return list;
    }


    /**
     * 分頁查詢(未處理緩存)
     * 
     * @param properties
     *            查詢條件字段名
     * @param propertyValues
     *            字段取值
     * @return
     */
    @Override
    public List<T> pageQueryByMap(String[] properties, Object[] propertyValues, String orderBy, String order,
            int pageSize, int pageNo) throws PersistenceException {
        logger
            .debug(
                FunIMsgFormat.MsgStyle.DEFAULT_LOG
                    .getFormat("開始調用{}的pageQueryByMap方法,傳入的參數是properties={},propertyValues={},orderBy={},order={},pageSize={},pageNo={}。"),
                new Object[] { this.getClass().getName(), properties, propertyValues, orderBy, order,
                              pageSize, pageNo });
        Map<String, Object> map =
                buildMapWithOrderAndPagination(properties, propertyValues, orderBy, order, pageSize, pageNo);
        List<T> list = getSqlSession().selectList(clazzName + POSTFIX_SELECTBYMAP, map);
        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG.getFormat("結束執行{}的pageQueryByMap方法,結果是{},size={}。"),
            new Object[] { this.getClass().getName(), list, list.size() });
        return list;
    }


    /**
     * 分頁查詢出id列表(處理緩存)
     * 
     * @param properties
     *            查詢條件字段名
     * @param propertyValues
     *            字段取值
     * @return
     */
    @Override
    public List<ID> pageQueryIdsByMap(String[] properties, Object[] propertyValues, String orderBy,
            String order, int pageSize, int pageNo) throws PersistenceException {
        logger
            .debug(
                FunIMsgFormat.MsgStyle.DEFAULT_LOG
                    .getFormat("開始調用{}的pageQueryIdsByMap方法,傳入的參數是properties={},propertyValues={},orderBy={},order={},pageSize={},pageNo={}。"),
                new Object[] { this.getClass().getName(), properties, propertyValues, orderBy, order,
                              pageSize, pageNo });
        Map<String, Object> map =
                buildMapWithOrderAndPagination(properties, propertyValues, orderBy, order, pageSize, pageNo);
        List<ID> list = getSqlSession().selectList(clazzName + POSTFIX_PKSELECTMAP, map);
        logger.debug(
            FunIMsgFormat.MsgStyle.DEFAULT_LOG.getFormat("結束執行{}的pageQueryIdsByMap方法,結果是{},size={}。"),
            new Object[] { this.getClass().getName(), list, list.size() });
        return list;
    }


    /**
     * 更新對象的部分屬性
     */
    @Override
    public int update(ID id, String propertie, Object propertyValue) throws PersistenceException {
        return update(id, new String[] { propertie }, new Object[] { propertyValue });
    }


    /**
     * 更新對象的部分屬性
     */
    @Override
    public int update(ID id, String[] properties, Object[] propertyValues) throws PersistenceException {
        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG
            .getFormat("開始調用{}的update方法,傳入的參數是id={},properties={},propertyValues={}。"),
            new Object[] { this.getClass().getName(), id, properties, propertyValues });
        if (id == null)
            throw new PersistenceException("主鍵爲空!");
        Map<String, Object> map = buildMap(properties, propertyValues);
        map.put("id", id);
        int count = 0;
        try {
            count = getSqlSession().update(clazzName + POSTFIX_UPDATEBYMAP, map);
        } catch (Exception ex) {
            logger.debug(FunIMsgFormat.MsgStyle.ERROR_REPORT.getFormat("執行{}的update方法出現異常,具體緣由是:{}"),
                new Object[] { this.getClass().getName(), ex.getStackTrace() });
            throw new PersistenceException("執行數據更新出錯。", ex);
        }
        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG.getFormat("結束執行{}的update方法,結果是{}。"),
            new Object[] { this.getClass().getName(), count });
        return count;
    }


    /**
     * 根據ID列表更新對象的部分屬性
     */
    @Override
    public int updateByIdsMap(List<ID> ids, String[] properties, Object[] propertyValues)
            throws PersistenceException {
        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG
            .getFormat("開始調用{}的updateByIdsMap方法,傳入的參數是ids={},properties={},propertyValues={}。"),
            new Object[] { this.getClass().getName(), ids, properties, propertyValues });
        if (CollectionUtils.isEmpty(ids))
            new PersistenceException("主鍵爲空!");
        Map<String, Object> map = buildMap(properties, propertyValues);
        map.put("ids", ids);
        int count = 0;
        try {
            count = getSqlSession().update(clazzName + POSTFIX_UPDATEBYIDSMAP, map);
        } catch (Exception ex) {
            logger.debug(FunIMsgFormat.MsgStyle.ERROR_REPORT.getFormat("執行{}的updateByIdsMap方法出現異常,具體緣由是:{}"),
                new Object[] { this.getClass().getName(), ex.getStackTrace() });
            throw new PersistenceException("執行批量數據更新出錯。", ex);
        }
        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG.getFormat("結束執行{}的updateByIdsMap方法,結果是{}。"),
            new Object[] { this.getClass().getName(), count });
        return count;
    }


    /** 根據ID及條件刪除對象 */
    @Override
    public void deleteByIdsMap(List<ID> ids, String[] properties, Object[] propertyValues)
            throws PersistenceException {
        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG
            .getFormat("開始調用{}的deleteByIdsMap方法,傳遞的參數是ids={},properties={},propertyValues={}。"),
            new Object[] { this.getClass().getName(), ids, properties, propertyValues });
        if (CollectionUtils.isEmpty(ids))
            throw new PersistenceException("主鍵爲空!");
        Map<String, Object> map = buildMap(properties, propertyValues);
        map.put("ids", ids);
        try {
            getSqlSession().delete(clazzName + POSTFIX_DELETEBYIDSMAP, map);
        } catch (Exception ex) {
            logger.debug(FunIMsgFormat.MsgStyle.ERROR_REPORT.getFormat("執行{}的deleteByIdsMap方法出現異常,具體緣由是:{}"),
                new Object[] { this.getClass().getName(), ex.getStackTrace() });
            throw new PersistenceException("執行批量刪除出錯。", ex);
        }
        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG.getFormat("結束執行{}的deleteByIdsMap方法。"), this
            .getClass().getName());
    }


    /**
     * 根據條件刪除對象
     */
    @Override
    public int deleteByMap(String[] properties, Object[] propertyValues) throws PersistenceException {
        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG
            .getFormat("開始調用{}的deleteByMap方法,傳遞的參數是properties={},propertyValues={}。"),
            new Object[] { this.getClass().getName(), properties, propertyValues });
        Map<String, Object> map = buildMap(properties, propertyValues);
        int count = 0;
        try {
            count = getSqlSession().delete(clazzName + POSTFIX_DELETEBYMAP, map);
        } catch (Exception ex) {
            logger.debug(FunIMsgFormat.MsgStyle.ERROR_REPORT.getFormat("執行{}的deleteByMap方法出現異常,具體緣由是:{}"),
                new Object[] { this.getClass().getName(), ex.getStackTrace() });
            throw new PersistenceException("執行批量刪除出錯。", ex);
        }
        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG.getFormat("結束執行{}的deleteByMap方法,執行的結果是{}。"),
            new Object[] { this.getClass().getName(), count });
        return count;
    }


    /**
     * 根據自定義SqlMap中的條件語句查詢出列表(注意:不處理緩存)
     */
    @Override
    public List<T> findByStatementPostfix(String statementPostfix, String[] properties,
            Object[] propertyValues, String orderBy, String order) throws PersistenceException {
        logger
            .debug(
                FunIMsgFormat.MsgStyle.DEFAULT_LOG
                    .getFormat("開始調用{}的findByStatementPostfix方法,傳遞的參數是statementPostfix={},properties={},propertyValues={},orderBy={},order={}。"),
                new Object[] { this.getClass().getName(), statementPostfix, properties, propertyValues,
                              orderBy, order });
        if (StringUtils.isEmpty(statementPostfix))
            return null;
        Map<String, Object> map = buildMapWithOrder(properties, propertyValues, orderBy, order);
        List<T> list = getSqlSession().selectList(clazzName + statementPostfix, map);
        logger.debug(
            FunIMsgFormat.MsgStyle.DEFAULT_LOG.getFormat("結束執行{}的findByStatementPostfix方法,結果是{},size={}。"),
            new Object[] { this.getClass().getName(), list, list.size() });
        return list;
    }


    /**
     * 根據自定義SqlMap中的條件語句查詢出對象(注意:不處理緩存)
     */
    @Override
    public T findOneByStatementPostfix(String statementPostfix, String[] properties, Object[] propertyValues,
            String orderBy, String order) throws PersistenceException {
        logger
            .debug(
                FunIMsgFormat.MsgStyle.DEFAULT_LOG
                    .getFormat("開始調用{}的findOneByStatementPostfix方法,傳遞的參數是statementPostfix={},properties={},propertyValues={},orderBy={},order={}。"),
                new Object[] { this.getClass().getName(), statementPostfix, properties, propertyValues,
                              orderBy, order });
        if (StringUtils.isEmpty(statementPostfix))
            return null;
        Map<String, Object> map = buildMapWithOrder(properties, propertyValues, orderBy, order);
        T t = getSqlSession().selectOne(clazzName + statementPostfix, map);
        logger.debug(
            FunIMsgFormat.MsgStyle.DEFAULT_LOG.getFormat("結束執行{}的findOneByStatementPostfix方法,結果是{}。"),
            new Object[] { this.getClass().getName(), t });
        return t;
    }


    /**
     * 根據自定義SqlMap中的條件語句查詢出列表(注意:不處理緩存)
     */
    @Override
    public List<T> pageQueryByStatementPostfix(String statementPostfix, String[] properties,
            Object[] propertyValues, String orderBy, String order, int pageSize, int pageNo)
            throws PersistenceException {
        logger
            .debug(
                FunIMsgFormat.MsgStyle.DEFAULT_LOG
                    .getFormat("開始調用{}的findByStatementPostfix方法,傳遞的參數是statementPostfix={},properties={},propertyValues={},orderBy={},order={},pageSize={},pageNo={}。"),
                new Object[] { this.getClass().getName(), statementPostfix, properties, propertyValues,
                              orderBy, order, pageSize, pageNo });
        if (StringUtils.isEmpty(statementPostfix))
            return null;
        Map<String, Object> map =
                buildMapWithOrderAndPagination(properties, propertyValues, orderBy, order, pageSize, pageNo);
        List<ID> ids = getSqlSession().selectList(clazzName + statementPostfix, map);
        List<T> list = selectByIds(ids);
        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG
            .getFormat("結束執行{}的pageQueryByStatementPostfix方法,結果是{},size={}。"),
            new Object[] { this.getClass().getName(), list, list.size() });
        return list;
    }


    /**
     * 根據自定義SqlMap中的條件語句更新數據(注意:不處理緩存)
     */
    @Override
    public int updateByStatementPostfix(String statementPostfix, String[] properties, Object[] propertyValues)
            throws PersistenceException {
        logger
            .debug(
                FunIMsgFormat.MsgStyle.DEFAULT_LOG
                    .getFormat("開始調用{}的updateByStatementPostfix方法,傳遞的參數是statementPostfix={},properties={},propertyValues={}。"),
                new Object[] { this.getClass().getName(), statementPostfix, properties, propertyValues });
        if (StringUtils.isEmpty(statementPostfix))
            throw new PersistenceException("自定義SqlMap中的條件語句爲空!");
        Map<String, Object> map = buildMap(properties, propertyValues);
        int record = 0;
        try {
            record = getSqlSession().update(clazzName + statementPostfix, map);
        } catch (Exception ex) {
            logger
                .debug(FunIMsgFormat.MsgStyle.ERROR_REPORT
                    .getFormat("執行{}的updateByStatementPostfix方法出現異常,具體緣由是:{}"),
                    new Object[] { this.getClass().getName(), ex.getStackTrace() });
            throw new PersistenceException("執行數據更新時出錯!", ex);
        }
        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG.getFormat("結束執行{}的updateByStatementPostfix方法。"), this
            .getClass().getName());

        return record;
    }


    /**
     * 根據自定義SqlMap中的條件語句刪除數據(注意:不處理緩存)
     */
    @Override
    public void deleteByStatementPostfix(String statementPostfix, String[] properties, Object[] propertyValues)
            throws PersistenceException {
        logger
            .debug(
                FunIMsgFormat.MsgStyle.DEFAULT_LOG
                    .getFormat("開始調用{}的deleteByStatementPostfix方法,傳遞的參數是statementPostfix={},properties={},propertyValues={}。"),
                new Object[] { this.getClass().getName(), statementPostfix, properties, propertyValues });
        if (StringUtils.isEmpty(statementPostfix))
            throw new PersistenceException("自定義SqlMap中的條件語句爲空!");
        Map<String, Object> map = buildMap(properties, propertyValues);
        try {
            getSqlSession().delete(clazzName + statementPostfix, map);
        } catch (Exception ex) {
            logger
                .debug(FunIMsgFormat.MsgStyle.ERROR_REPORT
                    .getFormat("執行{}的deleteByStatementPostfix方法出現異常,具體緣由是:{}"),
                    new Object[] { this.getClass().getName(), ex.getStackTrace() });
            throw new PersistenceException("執行數據刪除時出錯!", ex);
        }
        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG.getFormat("結束執行{}的deleteByStatementPostfix方法。"), this
            .getClass().getName());
    }


    /**
     * 根據自定義SqlMap中的條件語句 插入數據(注意:不處理緩存)
     */
    @Override
    public void insertByStatementPostfix(String statementPostfix, String[] properties, Object[] propertyValues)
            throws PersistenceException {
        logger
            .debug(
                FunIMsgFormat.MsgStyle.DEFAULT_LOG
                    .getFormat("開始調用{}的insertByStatementPostfix方法,傳遞的參數是statementPostfix={},properties={},propertyValues={}。"),
                new Object[] { this.getClass().getName(), statementPostfix, properties, propertyValues });
        if (StringUtils.isEmpty(statementPostfix))
            throw new PersistenceException("自定義SqlMap中的條件語句爲空!");
        Map<String, Object> map = buildMap(properties, propertyValues);
        try {
            getSqlSession().insert(clazzName + statementPostfix, map);
        } catch (Exception ex) {
            logger
                .debug(FunIMsgFormat.MsgStyle.ERROR_REPORT
                    .getFormat("執行{}的insertByStatementPostfix方法出現異常,具體緣由是:{}"),
                    new Object[] { this.getClass().getName(), ex.getStackTrace() });
            throw new PersistenceException("執行數據插入時出錯!", ex);
        }
        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG.getFormat("結束執行{}的insertByStatementPostfix方法。"), this
            .getClass().getName());
    }


    @Override
    public <E> List<E> listByPage(String statement, Page page) {
        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG
            .getFormat("開始調用{}的findByStatementPostfix方法,傳遞的參數是statementPostfix={}。"),
            new Object[] { this.getClass().getName(), statement });
        if (StringUtils.isEmpty(statement))
            throw new PersistenceException("自定義SqlMap中的條件語句爲空!");
        if (!statement.endsWith("ByPage"))
            throw new PersistenceException("statement定義錯誤!分頁查詢必須以ByPage結尾");
        List<E> list = getSqlSession().selectList(clazzName + statement, page);
        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG.getFormat("結束執行{}的listByPage方法。"), this.getClass()
            .getName());
        return list;
    }


    private Map<String, Object> buildMap(String[] propertyNames, Object[] propertyValues)
            throws PersistenceException {
        Map<String, Object> map = new HashMap<String, Object>();
        if (ArrayUtils.isNotEmpty(propertyNames) && ArrayUtils.isNotEmpty(propertyValues)) {
            int prosKeyLen = propertyNames.length;
            int prosValueLen = propertyValues.length;
            if (prosKeyLen != prosValueLen)
                throw new PersistenceException("傳遞的參數不匹配!");
            for (int i = 0; i < prosKeyLen; i++) {
                map.put(propertyNames[i], propertyValues[i]);
            }
        }
        return map;
    }


    private Map<String, Object> buildMapWithOrder(String[] propertyNames, Object[] propertyValues,
            String orderBy, String order) throws PersistenceException {
        Map<String, Object> map = buildMap(propertyNames, propertyValues);
        if (StringUtils.isNotEmpty(orderBy)) {
            map.put("orderBy", orderBy);
            map.put("order", order);
        }
        return map;
    }


    private Map<String, Object> buildMapWithOrderAndPagination(String[] propertyNames,
            Object[] propertyValues, String orderBy, String order, int pageSize, int pageNo)
            throws PersistenceException {
        Map<String, Object> map = buildMap(propertyNames, propertyValues);
        if (StringUtils.isNotEmpty(orderBy)) {
            map.put("orderBy", orderBy);
            map.put("order", order);
        }
        map.put("limit", true);
        map.put("start", (pageNo - 1) * pageSize);// limit 操做
        map.put("end", pageSize);
        return map;
    }

}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.ym.qab.ts.po.OrderListPO">
    <resultMap id="BaseResultMap" type="OrderListPO">
    <id column="ID" jdbcType="VARCHAR" property="id" />
    <result column="TXN_DATE" jdbcType="TIMESTAMP" property="txnDate" />
    <result column="CREATE_TIME" jdbcType="TIMESTAMP" property="createTime" />
    <result column="CHNL_ID" jdbcType="CHAR" property="chnlId" />
    <result column="ORDER_NO" jdbcType="CHAR" property="orderNo" />
    <result column="TXN_TYPE" jdbcType="CHAR" property="txnType" />
    <result column="CUST_NO" jdbcType="CHAR" property="custNo" />
    <result column="ACCT_NO" jdbcType="VARCHAR" property="acctNo" />
    <result column="ACCT_TYPE" jdbcType="CHAR" property="acctType" />
    <result column="CARDMER_CODE" jdbcType="CHAR" property="cardmerCode" />
    <result column="MER_TIME" jdbcType="TIMESTAMP" property="merTime" />
    <result column="MER_ORDER" jdbcType="VARCHAR" property="merOrder" />
    <result column="PRODUCT_NAME" jdbcType="VARCHAR" property="productName" />
    <result column="ACQMER_CODE" jdbcType="CHAR" property="acqmerCode" />
    <result column="ACQMER_NAME" jdbcType="VARCHAR" property="acqmerName" />
    <result column="ACQMER_TYPE" jdbcType="CHAR" property="acqmerType" />
    <result column="REL_ACCT" jdbcType="VARCHAR" property="relAcct" />
    <result column="REL_ACCT_TYPE" jdbcType="CHAR" property="relAcctType" />
    <result column="REL_CARDMER_CODE" jdbcType="VARCHAR" property="relCardmerCode" />
    <result column="ORDER_STAT" jdbcType="CHAR" property="orderStat" />
    <result column="DEL_FLAG" jdbcType="CHAR" property="delFlag" />
    <result column="END_TIME" jdbcType="TIMESTAMP" property="endTime" />
    <result column="ORDER_DEL_TIME" jdbcType="TIMESTAMP" property="orderDelTime" />
    <result column="NOTE_STAT" jdbcType="CHAR" property="noteStat" />
    <result column="NOTE_TIME" jdbcType="TIMESTAMP" property="noteTime" />
    <result column="TXN_AMT" jdbcType="DECIMAL" property="txnAmt" />
    <result column="BEF_AMT" jdbcType="DECIMAL" property="befAmt" />
    <result column="TXN_FEE" jdbcType="DECIMAL" property="txnFee" />
    <result column="CCY" jdbcType="CHAR" property="ccy" />
    <result column="ORI_ORDER_NO" jdbcType="CHAR" property="oriOrderNo" />
    <result column="EJECT_AMT" jdbcType="DECIMAL" property="ejectAmt" />
    <result column="CHK_FLAG" jdbcType="CHAR" property="chkFlag" />
    <result column="CHK_BATCH_NO" jdbcType="CHAR" property="chkBatchNo" />
    <result column="CHK_DATE" jdbcType="TIMESTAMP" property="chkDate" />
    <result column="MER_STL_FLAG" jdbcType="CHAR" property="merStlFlag" />
    <result column="MER_STL_BATCH_NO" jdbcType="CHAR" property="merStlBatchNo" />
    <result column="MER_STL_DATE" jdbcType="TIMESTAMP" property="merStlDate" />
    <result column="COP_STL_FLAG" jdbcType="CHAR" property="copStlFlag" />
    <result column="COP_STL_BATCH_NO" jdbcType="CHAR" property="copStlBatchNo" />
    <result column="COP_STL_DATE" jdbcType="TIMESTAMP" property="copStlDate" />
    <result column="MEMO" jdbcType="VARCHAR" property="memo" />
    <result column="ORDER_CLOSE_TIME" jdbcType="TIMESTAMP" property="orderCloseTime" />
    <result column="POS_CODE" jdbcType="VARCHAR" property="posCode" />
    <result column="STL_MER_FLAG" jdbcType="CHAR" property="stlMerFlag" />
    <result column="ERR_STL_FLAG" jdbcType="CHAR" property="errStlFlag" />
    <result column="DEAL_AMT" jdbcType="DECIMAL" property="dealAmt" />
    <result column="MER_ERR_STL_BATCH_NO" jdbcType="CHAR" property="merErrStlBatchNo" />
    <result column="COP_ERR_STL_BATCH_NO" jdbcType="CHAR" property="copErrStlBatchNo" />
    <result column="COPMER_CODE" jdbcType="CHAR" property="copmerCode" />
    <result column="CARDMER_TYPE" jdbcType="CHAR" property="cardmerType" />
    <result column="COP_ERR_STL_FLAG" jdbcType="CHAR" property="copErrStlFlag" />
    <result column="PAY_METHOD" jdbcType="CHAR" property="payMethod" />
    <result column="OPER_NO" jdbcType="VARCHAR" property="operNo" />
  </resultMap>

    <insert id="insert" parameterType="OrderListPO">
    insert into T_ORDER_LIST (ID, TXN_DATE, CREATE_TIME,
      CHNL_ID, ORDER_NO, TXN_TYPE, CUST_NO,
      ACCT_NO, ACCT_TYPE, CARDMER_CODE,
      MER_TIME, MER_ORDER, PRODUCT_NAME,
      ACQMER_CODE, ACQMER_NAME, ACQMER_TYPE,
      REL_ACCT, REL_ACCT_TYPE, REL_CARDMER_CODE,
      ORDER_STAT, DEL_FLAG, END_TIME,
      ORDER_DEL_TIME, NOTE_STAT, NOTE_TIME,
      TXN_AMT, BEF_AMT, TXN_FEE,
      CCY, ORI_ORDER_NO, EJECT_AMT,
      CHK_FLAG, CHK_BATCH_NO, CHK_DATE,
      MER_STL_FLAG, MER_STL_BATCH_NO, MER_STL_DATE,
      COP_STL_FLAG, COP_STL_BATCH_NO, COP_STL_DATE,
      MEMO, ORDER_CLOSE_TIME, POS_CODE,
      STL_MER_FLAG, ERR_STL_FLAG, DEAL_AMT,
      MER_ERR_STL_BATCH_NO, COP_ERR_STL_BATCH_NO, COPMER_CODE,
      CARDMER_TYPE, COP_ERR_STL_FLAG,PAY_METHOD,OPER_NO)
    values (sys_guid(), #{txnDate,jdbcType=TIMESTAMP}, #{createTime,jdbcType=TIMESTAMP},
      #{chnlId,jdbcType=CHAR}, #{orderNo,jdbcType=CHAR}, #{txnType,jdbcType=CHAR}, #{custNo,jdbcType=CHAR},
      #{acctNo,jdbcType=VARCHAR}, #{acctType,jdbcType=CHAR}, #{cardmerCode,jdbcType=CHAR},
      #{merTime,jdbcType=TIMESTAMP}, #{merOrder,jdbcType=VARCHAR}, #{productName,jdbcType=VARCHAR},
      #{acqmerCode,jdbcType=CHAR}, #{acqmerName,jdbcType=VARCHAR}, #{acqmerType,jdbcType=CHAR},
      #{relAcct,jdbcType=VARCHAR}, #{relAcctType,jdbcType=CHAR}, #{relCardmerCode,jdbcType=VARCHAR},
      #{orderStat,jdbcType=CHAR}, #{delFlag,jdbcType=CHAR}, #{endTime,jdbcType=TIMESTAMP},
      #{orderDelTime,jdbcType=TIMESTAMP}, #{noteStat,jdbcType=CHAR}, #{noteTime,jdbcType=TIMESTAMP},
      #{txnAmt,jdbcType=DECIMAL}, #{befAmt,jdbcType=DECIMAL}, #{txnFee,jdbcType=DECIMAL},
      #{ccy,jdbcType=CHAR}, #{oriOrderNo,jdbcType=CHAR}, #{ejectAmt,jdbcType=DECIMAL},
      #{chkFlag,jdbcType=CHAR}, #{chkBatchNo,jdbcType=CHAR}, #{chkDate,jdbcType=TIMESTAMP},
      #{merStlFlag,jdbcType=CHAR}, #{merStlBatchNo,jdbcType=CHAR}, #{merStlDate,jdbcType=TIMESTAMP},
      #{copStlFlag,jdbcType=CHAR}, #{copStlBatchNo,jdbcType=CHAR}, #{copStlDate,jdbcType=TIMESTAMP},
      #{memo,jdbcType=VARCHAR}, #{orderCloseTime,jdbcType=TIMESTAMP}, #{posCode,jdbcType=VARCHAR},
      #{stlMerFlag,jdbcType=CHAR}, #{errStlFlag,jdbcType=CHAR}, #{dealAmt,jdbcType=DECIMAL},
      #{merErrStlBatchNo,jdbcType=CHAR}, #{copErrStlBatchNo,jdbcType=CHAR}, #{copmerCode,jdbcType=CHAR},
      #{cardmerType,jdbcType=CHAR}, #{copErrStlFlag,jdbcType=CHAR},#{payMethod,jdbcType=CHAR}, #{operNo,jdbcType=VARCHAR})
  </insert>


    <sql id="Query_Column_List">
    ID, TXN_DATE, CREATE_TIME, CHNL_ID, ORDER_NO, TXN_TYPE, CUST_NO, ACCT_NO, ACCT_TYPE,
    CARDMER_CODE, MER_TIME, MER_ORDER, PRODUCT_NAME, ACQMER_CODE, ACQMER_NAME, ACQMER_TYPE,
    REL_ACCT, REL_ACCT_TYPE, REL_CARDMER_CODE, ORDER_STAT, DEL_FLAG, END_TIME, ORDER_DEL_TIME,
    NOTE_STAT, NOTE_TIME, TXN_AMT, BEF_AMT, TXN_FEE, CCY, ORI_ORDER_NO, EJECT_AMT, CHK_FLAG,
    CHK_BATCH_NO, CHK_DATE, MER_STL_FLAG, MER_STL_BATCH_NO, MER_STL_DATE, COP_STL_FLAG,
    COP_STL_BATCH_NO, COP_STL_DATE, MEMO, ORDER_CLOSE_TIME, POS_CODE, STL_MER_FLAG, ERR_STL_FLAG,
    DEAL_AMT, MER_ERR_STL_BATCH_NO, COP_ERR_STL_BATCH_NO, COPMER_CODE, CARDMER_TYPE,
    COP_ERR_STL_FLAG,PAY_METHOD,OPER_NO
  </sql>


    <sql id="Query_Order_List">
        o.ID, o.TXN_DATE, o.CREATE_TIME, o.CHNL_ID, o.ORDER_NO, o.TXN_TYPE, o.CUST_NO, o.ACCT_NO,
        ACCT_TYPE,
        o.CARDMER_CODE, o.MER_TIME, o.MER_ORDER, o.PRODUCT_NAME, o.ACQMER_CODE, o.ACQMER_NAME,
        o.ACQMER_TYPE,
        o.REL_ACCT, o.REL_ACCT_TYPE, o.REL_CARDMER_CODE, o.ORDER_STAT, o.DEL_FLAG,
        END_TIME,ORDER_CLOSE_TIME, ORDER_DEL_TIME,
        o.NOTE_STAT, o.NOTE_TIME, o.TXN_AMT, o.BEF_AMT, o.TXN_FEE, o.CCY, o.ORI_ORDER_NO, o.EJECT_AMT,
        o.CHK_FLAG,
        o.CHK_BATCH_NO, o.CHK_DATE, o.MER_STL_FLAG, o.MER_STL_BATCH_NO, o.MER_STL_DATE, o.COP_STL_FLAG,
        o.COP_STL_BATCH_NO, o.COP_STL_DATE,o.POS_CODE
    </sql>

    <!-- 頻繁交易、大額消費監控 -->
    <sql id="Query_Mon_Column_List">
        ID, CUST_NO, ORDER_NO, CREATE_TIME, TXN_AMT, ACCT_NO, ACCT_TYPE, CARDMER_CODE,
        MER_ORDER, PRODUCT_NAME, ACQMER_CODE, ACQMER_NAME, MEMO
    </sql>

    <update id="updateByMap">
        update t_order_list set
        order_stat=#{orderStat},end_time=#{endTime} where id=#{id}
    </update>

    <update id="updateOriOrderEjectAmt">
        update T_ORDER_LIST SET EJECT_AMT = #{ejectAmt} where ORDER_NO = #{orderNo}
    </update>

    <update id="updateStatByOrderNo">
        update t_order_list set order_stat=#{orderStat}
        <if test="endTime != null">
            , end_time=#{endTime}
        </if>
        <if test="acctNo != null">
            , acct_no=#{acctNo}
        </if>
        <if test="txnAmt != null">
            , txn_amt=#{txnAmt}
        </if>
        <if test="cardmerCode != null and cardmerCode != ''">
            , cardmer_code=#{cardmerCode}
        </if>
        
        where order_stat = #{preStat} and order_no=#{orderNo}
    </update>

    <update id="updateNoteStatByOrderNo">
        update t_order_list set NOTE_STAT=#{noteStat}
        ,NOTE_TIME=#{noteTime}
        where order_stat = #{preStat} and order_no=#{orderNo}
    </update>

    <!-- 根據操做員帳號查詢訂單信息,liu.xu於2014-11-13添加 -->
    <sql id="operNoQryCondition">
        <where>
            <if test="operNo != null">
            and oper_no in(
            select cust_no from t_es_login_info where user_flag='2' and cust_no=#{operNo}
            union
            select cust_no from t_es_login_info where mer_code =(select mer_code from t_es_login_info where user_flag='1' and cust_no=#{operNo})
            )
            </if>
            <if test="orderNo != null">
                and order_no like #{orderNo}
            </if>
            and Del_FLAG=#{delFlag}
            and txn_type in('01','02','11')
        </where>
    </sql>
    
    <!-- 查詢消費淨額消費部分金額,liu.xu於2014-11-17添加 -->
    <sql id="qryNetAmtInCondition">
        <where>
            <if test="operNo != null">
                and oper_no in(
            select cust_no from t_es_login_info where user_flag='2' and cust_no=#{operNo}
            union
            select cust_no from t_es_login_info where mer_code =(select mer_code from t_es_login_info where user_flag='1' and cust_no=#{operNo})
            )
            </if>
            <if test="orderNo != null">
                and order_no like #{orderNo}
            </if>
            and Del_FLAG=#{delFlag}
            and txn_type='01'
            and order_stat='1'
        </where>
    </sql>
    
    <!-- 查詢消費淨額退貨部分金額,liu.xu於2014-11-17添加 -->
    <sql id="qryNetAmtOutCondition">
        <where>
            <if test="operNo != null">
                and oper_no in(
            select cust_no from t_es_login_info where user_flag='2' and cust_no=#{operNo}
            union
            select cust_no from t_es_login_info where mer_code =(select mer_code from t_es_login_info where user_flag='1' and cust_no=#{operNo})
            )
            </if>
            <if test="orderNo != null">
                and order_no like #{orderNo}
            </if>
            and Del_FLAG=#{delFlag}
            and txn_type in ('02','11')
            and order_stat='1'
        </where>
    </sql>

    <!-- app訂單查詢,不顯示退款 -->
    <sql id="pageQueryCondition">
        <where>
            <if test="orderNoList != null">
                order_no in
                <foreach collection="orderNoList" index="index" item="item"
                    open="(" separator="," close=")">
                    #{item}
                </foreach>
            </if>
            <if test="acqmerCode != null">
                and acqmer_Code = #{acqmerCode}
            </if>
            <if test="acqmerType != null">
                and acqmer_type = #{acqmerType}
            </if>
            <if test="productName != null">
                and product_name like #{productName}
            </if>
            <!-- 統計數量 2014-10-21添加退款項 j.zhou -->
            and TXN_TYPE in ('01','11','02')
            <!-- and txn_Type='01' -->
            and Del_FLAG=#{delFlag}
            and cust_no=#{custNo}
            and txn_date &gt;= #{txnDate}
        </where>
    </sql>
    <!-- app訂單查詢,不顯示退款 -->
    <!-- <select id="selectByMap" resultMap="BaseResultMap">
        select
        <include refid="Query_Column_List" />
        from T_ORDER_LIST
        <include refid="pageQueryCondition" />
        order by order_no desc
    </select> -->
    
    <!-- 根據操做員帳號查詢訂單信息,liu.xu於2014-11-13添加 -->
    <select id="selectByOperNo" resultMap="BaseResultMap">
        select
        <include refid="Query_Column_List" />
        from T_ORDER_LIST
        <include refid="operNoQryCondition" />
        order by order_no desc
    </select>
    
    <!-- 添加退款訂單 -->
    <sql id="Query_Column_List2">
        t.ID, t.TXN_DATE, t.CREATE_TIME, t.CHNL_ID, t.ORDER_NO, t.TXN_TYPE, t.CUST_NO, t.ACCT_NO,
        t.ACCT_TYPE,t.CARDMER_CODE, t.MER_TIME, t.MER_ORDER, t.PRODUCT_NAME, t.ACQMER_CODE, t.ACQMER_NAME,
        t.ACQMER_TYPE,t.REL_ACCT, t.REL_ACCT_TYPE, t.REL_CARDMER_CODE, t.ORDER_STAT, t.DEL_FLAG,t.END_TIME,
        t.ORDER_DEL_TIME,t.NOTE_STAT, t.NOTE_TIME, t.TXN_AMT, t.BEF_AMT, t.TXN_FEE, t.CCY, 
        (case when (t.txn_type='02' or t.txn_type='11') then p.mer_order else t.ori_order_no end) as ORI_ORDER_NO,
        t.EJECT_AMT,t.CHK_FLAG,t.CHK_BATCH_NO, t.CHK_DATE, t.MER_STL_FLAG, t.MER_STL_BATCH_NO, t.MER_STL_DATE, t.COP_STL_FLAG,
        t.COP_STL_BATCH_NO, t.COP_STL_DATE, t.MEMO, t.ORDER_CLOSE_TIME, t.POS_CODE,
        t.STL_MER_FLAG, t.ERR_STL_FLAG,t.DEAL_AMT, t.MER_ERR_STL_BATCH_NO, t.COP_ERR_STL_BATCH_NO, t.COPMER_CODE, t.CARDMER_TYPE,
        t.COP_ERR_STL_FLAG,t.PAY_METHOD
    </sql>
    <select id="selectByMap" resultMap="BaseResultMap">
        select
        <include refid="Query_Column_List2" />
        from t_order_list t, t_order_list p 
        where t.ori_order_no=p.order_no(+)
            <if test="orderNoList != null">
                and t.order_no in
                <foreach collection="orderNoList" index="index" item="item"
                    open="(" separator="," close=")">
                    #{item}
                </foreach>
            </if>
            <if test="acqmerCode != null">
                and t.acqmer_Code = #{acqmerCode}
            </if>
            <if test="acqmerType != null">
                and t.acqmer_type = #{acqmerType}
            </if>
            <if test="productName != null">
                and t.product_name like #{productName}
            </if>
            and t.TXN_TYPE in ('01','11','02')
            and t.Del_FLAG=#{delFlag}
            and t.cust_no=#{custNo}
            and t.txn_date &gt;=#{txnDate}
            order by t.order_no desc
    </select>
    
    <select id="countRetSuccess" resultType="Integer">
        select count(id) from t_order_list where txn_type in ('02','11')  and order_stat='1' and ori_order_no=#{orderNo}
    </select>
    
    
    
    <select id="selectByMapTotalrecord" resultType="Integer">
        select count(id) from T_ORDER_LIST
        <include refid="pageQueryCondition" />
    </select>

    <!-- 根據操做員帳號查詢訂單總數,liu.xu於2014-11-13添加 -->
    <select id="selectTotalrecordByOperNo" resultType="Integer">
        select count(id) from T_ORDER_LIST
        <include refid="operNoQryCondition" />
    </select>

    <!-- 根據操做員帳號查詢交易淨額,liu.xu於2014-11-17添加 -->
    <select id="selectNetAmountByOperNo" resultType="BigDecimal">
        select consumeAmt-returnAmt from (select decode(sum(txn_amt) ,null,0,sum(txn_amt)) as consumeAmt from t_order_list <include refid="qryNetAmtInCondition" />) , (select decode(sum(txn_amt) ,null,0,sum(txn_amt)) as returnAmt from t_order_list <include refid="qryNetAmtOutCondition" />) 
    </select>


    <select id="findLastPayOrderList" resultMap="BaseResultMap">
        select <include refid="Query_Column_List"/> from
        T_ORDER_LIST where CUST_NO = #{custNo} and CARDMER_CODE =
        #{cardmerCode} and ACCT_NO = #{acctNo} and TXN_TYPE = #{txnType}
        and ORDER_STAT = #{orderStat} and rownum = 1 order by TXN_DATE desc
    </select>

    <!--APP訂單按月份統計 -->
    <!-- 2014-10-22 添加退款記錄,並從支出中去除 -->
    <select id="sumTxnAmt" resultType="Map">
        select sum(amt)*100 AMT,YYMM from(
            select 
                sum((case when (txn_type='02' or txn_type='11') then 0-txn_amt else txn_amt end)) amt,
                to_char(txn_date,'yymm') yymm 
            from T_ORDER_LIST 
            where 
            ORDER_STAT=#{orderStat} 
            and Del_FLAG=#{delFlag}
            and txn_type in ('01','02','11')
            and CUST_NO = #{custNo} 
            and TXN_DATE    
            &gt;= #{txnDateBegin} 
            and txn_date &lt;= #{txnDateEnd}
            group by txn_date
        )group by yymm order by yymm desc
    </select>
    <!-- <select id="sumTxnAmt" resultType="Map">
        select sum(amt)*100 AMT,YYMM from(
        select sum(txn_amt) amt,to_char(txn_date,'yymm') yymm from
        T_ORDER_LIST where ORDER_STAT=#{orderStat} and Del_FLAG=#{delFlag}
        and txn_type=#{txnType}
        and CUST_NO = #{custNo} and TXN_DATE
        &gt;= #{txnDateBegin} and txn_date &lt;= #{txnDateEnd}
        group by txn_date
        )group by yymm order by yymm desc
    </select> -->

    <!--SZL 2014-12-25 添加用於輔助帳戶餘額表 凍結金額處理-->
    <select id="frozenOrderInfo" resultType="Map">
        SELECT o.order_no,o.txn_amt,o.acqmer_code,o.cardmer_code, c.cardmer_type FROM t_order_list o, t_cardmer_info c
        WHERE o.cardmer_code = c.cardmer_code AND o.order_no= #{orderNo}
    </select>
    
    <select id="getByMerOrder" resultMap="BaseResultMap">
        select
        <include refid="Query_Column_List" />
        from T_ORDER_LIST
        where
        mer_order=#{merOrder}
        and acqmer_Code=#{acqmerCode}
    </select>

    <update id="delOrder">
        update T_ORDER_LIST
        set del_flag=#{delFlag},
        ORDER_DEL_TIME = #{orderDelTime}
        where order_no in
        <foreach collection="orderNoList" index="index" item="item"
            open="(" separator="," close=")">
            #{item}
        </foreach>
        and cust_no = #{custNo}
    </update>

    <select id="getRefundOrder" resultMap="BaseResultMap"
        parameterType="String">
        select
        <include refid="Query_Column_List" />
        from T_ORDER_LIST where ACQMER_CODE = #{acqmerCode}
        and ORI_ORDER_NO = #{oriOrderNo} and ORDER_STAT = '1'
    </select>

    <select id="getOriOrder" resultMap="BaseResultMap"
        parameterType="Object">
        select
        <include refid="Query_Column_List" />
        from T_ORDER_LIST where ACQMER_CODE = #{acqmerCode}
        and ORDER_STAT = #{stat} and TXN_TYPE = #{txnType}
        <if test="oriMerOrder !=null and oriMerOrder != ''">
            and MER_ORDER = #{oriMerOrder}
        </if>
        <if test="oriTranDate !=null and oriTranDate != ''">
            and TXN_DATE = #{oriTranDate}
        </if>
        <if test="oriOrderNo !=null and oriOrderNo != ''">
            and ORDER_NO = #{oriOrderNo}
        </if>
    </select>
    
    <!-- 退款,退貨操做查詢是否有原訂單非失敗的退款退貨訂單  -->
    <select id="queryByProps" resultMap="BaseResultMap"
        parameterType="Object">
        select 
        <include refid="Query_Column_List" />
        from T_ORDER_LIST 
        <where>    
            <if test="acqmerCode !=null and acqmerCode != ''">
                 and ACQMER_CODE = #{acqmerCode}  
            </if>
            <if test="stat !=null and stat != ''">
                 and ORDER_STAT  &lt;&gt; #{stat} 
            </if>
            <if test="txnType !=null and txnType != ''">
                 and TXN_TYPE = #{txnType} 
            </if>
            <!-- 退款成功的,不管是商戶仍是亞盟 zhoujian 20141211 -->
            <if test="txnType ==null or txnType == ''">
                and (TXN_TYPE = '11' or TXN_TYPE='02') 
            </if>
            <if test="oriMerOrder !=null and oriMerOrder != ''">
                and MER_ORDER = #{oriMerOrder}
            </if>
            <if test="oriTranDate !=null and oriTranDate != ''">
                and TXN_DATE = #{oriTranDate}
            </if>
            <if test="oriOrderNo !=null and oriOrderNo != ''">
                and ORI_ORDER_NO = #{oriOrderNo}
            </if>
        </where>
    </select>
    
    <!-- 查詢客戶交易記錄 memo==loginName -->
    <select id="queryOrderListByPage" parameterType="com.ym.qab.commons.dto.Page"
        resultMap="BaseResultMap">
        select
        tc.CUST_NO,tc.TXN_DATE,tc.CHNL_ID,tc.ACQMER_NAME,tc.TXN_TYPE,tc.ACCT_TYPE,tc.ACCT_NO
        ,tc.ORDER_STAT,tc.TXN_AMT,tc.ORDER_NO,tc.ORI_ORDER_NO,tc.PAY_METHOD
        <choose>
            <when test="memo != null and memo != ''">
                from T_CUST_INFO c, T_ORDER_LIST tc
            </when>
            <otherwise>
                from T_ORDER_LIST tc
            </otherwise>
        </choose>
        <where>
            <if test="memo !=null and memo != ''">
                and tc.CUST_NO = c.CUST_NO and c.LOGIN_NAME = #{memo}
            </if>
            <if test="custNo !=null and custNo != ''">
                and tc.CUST_NO = #{custNo}
            </if>
            <if test="txnDate !=null and txnDate != ''">
                and tc.TXN_DATE = #{txnDate}
            </if>
            <if test="chnlId !=null and chnlId != ''">
                and tc.CHNL_ID = #{chnlId}
            </if>
            <if test="txnType !=null and txnType != ''">
                and tc.TXN_TYPE = #{txnType}
            </if>
            <if test="acctType !=null and acctType != ''">
                and tc.ACCT_TYPE = #{acctType}
            </if>
            <if test="acctNo !=null and acctNo != ''">
                and tc.ACCT_NO = #{acctNo}
            </if>
            <if test="orderStat !=null and orderStat != ''">
                and tc.ORDER_STAT = #{orderStat}
            </if>
            <if test="cardmerCode !=null and cardmerCode != ''">
                and tc.CARDMER_CODE = #{cardmerCode}
            </if>
            <if test="acqmerCode !=null and acqmerCode != ''">
                and tc.ACQMER_CODE = #{acqmerCode}
            </if>
            <if test="merOrder !=null and merOrder != ''">
                and tc.MER_ORDER = #{merOrder}
            </if>
            <if test="orderNo !=null and orderNo != ''">
                and tc.ORDER_NO = #{orderNo}
            </if>
             <if test="startDate != null and startDate != ''" >
               <![CDATA[
                and to_char(tc.TXN_DATE,'yyyy.mm.dd') >=  #{startDate}
                 ]]>
              </if>
               <if test="endDate != null and endDate != ''" >
               <![CDATA[
                and to_char(tc.TXN_DATE,'yyyy.mm.dd') <=  #{endDate}
                ]]>
              </if>
              <if test="payMethod !=null and payMethod != ''">
                and tc.PAY_METHOD = #{payMethod}
              </if>
        </where>
        order by CREATE_TIME desc
    </select>

    <!-- 查詢客戶交易記錄,進行大額、頻繁交易監控 -->
    <select id="queryMonOrderList" parameterType="Map"
        resultMap="BaseResultMap">
        select <include refid="Query_Mon_Column_List" />
          from T_ORDER_LIST
         where create_time &lt;= #{endTime}
           and create_time &gt;= #{startTime}
           and ORDER_STAT = #{orderStat}
      order by create_time asc
    </select>
    <!-- 查詢客戶交易記錄的條數,進行大額、頻繁交易監控 -->
    <select id="queryMonOrderListCount" parameterType="Map"
        resultType="Long">
        select count(ID)
          from T_ORDER_LIST
         where create_time &lt;= #{endTime}
           and create_time &gt;= #{startTime}
           and ORDER_STAT = #{orderStat}
    </select>

    <!-- 查詢客戶交易記錄總數 -->
    <select id="queryOrderCount" parameterType="OrderListPO"
        resultType="Long">
        select count(*)
        <choose>
            <when test="memo != null and memo != ''">
                from T_CUST_INFO c, T_ORDER_LIST tc
            </when>
            <otherwise>
                from T_ORDER_LIST tc
            </otherwise>
        </choose>
        <where>
            <if test="memo !=null and memo != ''">
                and tc.CUST_NO = c.CUST_NO and c.LOGIN_NAME = #{memo}
            </if>
            <if test="custNo !=null and custNo != ''">
                and tc.CUST_NO = #{custNo}
            </if>
            <if test="txnDate !=null and txnDate != ''">
                and tc.TXN_DATE = #{txnDate}
            </if>
            <if test="chnlId !=null and chnlId != ''">
                and tc.CHNL_ID = #{chnlId}
            </if>
            <if test="txnType !=null and txnType != ''">
                and tc.TXN_TYPE = #{txnType}
            </if>
            <if test="acctType !=null and acctType != ''">
                and tc.ACCT_TYPE = #{acctType}
            </if>
            <if test="acctNo !=null and acctNo != ''">
                and tc.ACCT_NO = #{acctNo}
            </if>
            <if test="orderStat !=null and orderStat != ''">
                and tc.ORDER_STAT = #{orderStat}
            </if>
            <if test="cardmerCode !=null and cardmerCode != ''">
                and tc.CARDMER_CODE = #{cardmerCode}
            </if>
            <if test="acqmerCode !=null and acqmerCode != ''">
                and tc.ACQMER_CODE = #{acqmerCode}
            </if>
            <if test="merOrder !=null and merOrder != ''">
                and tc.MER_ORDER = #{merOrder}
            </if>
            <if test="orderNo !=null and orderNo != ''">
                and tc.ORDER_NO = #{orderNo}
            </if>
        </where>
    </select>



    <!-- 對帳 order_stat=#{orderStat} and chk_Flag=#{chkFlag} and  -->
    <select id="selectChkUnique" resultMap="BaseResultMap">
        select id,txn_amt,order_no,order_stat,chk_Flag from T_ORDER_LIST
        where ACQMER_CODE=#{acqmerCode} and MER_ORDER=#{merOrder}
    </select>

    <update id="updateChkFlag">
        update T_ORDER_LIST set chk_Flag=#{chkFlag} , chk_Batch_No=#{chkBatchNo},chk_date=trunc(sysdate)
        where id=#{id}
    </update>

    <!-- 對帳,登記亞盟多的記錄 -->
    <select id="countChkList" resultType="Integer">
        select count(id) from T_ORDER_LIST
        where txn_type in('01','02','11') and order_stat=#{orderStat} and txn_Date =#{txnDate} and chk_Flag=#{chkFlag} and
        acqmer_Code=#{acqmerCode}
    </select>

    <!-- 對帳,登記亞盟多的記錄 -->
    <select id="findChkList" resultMap="BaseResultMap">
        select
        <include refid="Query_Column_List" />
        from T_ORDER_LIST
        where txn_type in('01','02','11') and order_stat=#{orderStat} and txn_Date =#{txnDate} and chk_Flag=#{chkFlag} and
        acqmer_Code=#{acqmerCode}
    </select>

    <!-- 根據訂單號查詢訂單(可擴展) -->
    <select id="queryOrderByOrderNo" parameterType="OrderListPO"
        resultMap="BaseResultMap">
        select
        <include refid="Query_Order_List" />,
        (select login_name from t_cust_info  c where o.cust_no = c.cust_no) as memo
         from T_ORDER_LIST o
        <where>
            <if test="orderNo !=null and orderNo !=''">
                and o.ORDER_NO = #{orderNo}
            </if>
        </where>
    </select>

    <update id="updateByOrderNo">
        update t_order_list
        <set>
        <if test="orderStat != null and orderStat !=''">
             order_stat=#{orderStat}
        </if>
        </set>
        where  order_no=#{orderNo}
    </update>

    <update id="updateFail">
        update T_ORDER_LIST set order_stat=#{orderStat} , chk_Flag=#{chkFlag},err_stl_flag=#{errStlFlag}
        where id=#{id}
    </update>
    <update id="updateFailWithCop">
        update T_ORDER_LIST set order_stat=#{orderStat} , chk_Flag=#{chkFlag},err_stl_flag=#{errStlFlag},COP_ERR_STL_FLAG=#{copErrStlFlag}
        where id=#{id}
    </update>
    <update id="updateFailWithFlag">
        update T_ORDER_LIST set order_stat=#{orderStat} ,chk_Flag=#{chkFlag},mer_stl_flag=#{merStlFlag},cop_stl_flag=#{copStlFlag}, err_stl_flag=#{errStlFlag},cop_err_stl_flag=#{copErrStlFlag}
        where id=#{id}
    </update>    
    <!-- 合做夥伴結算 -->
    <update id="copmerUpdateOrder">
        update t_order_list t
        set t.COP_STL_BATCH_NO=#{copStlBatchNo},t.COP_STL_DATE=#{copStlDate},
        t.COP_STL_FLAG=#{copStlFlag}
        where t.order_no in
        ((select order_no from t_cust_acct_list where order_no in
        (select o.order_no  from t_order_list o
        where o.COPMER_CODE=#{copmerCode} and o.txn_date&lt;#{txnDate}
        and o.COP_STL_FLAG=#{oldCopStlFlag} and o.ORDER_STAT=#{orderStat}) and STL_FLAG=#{stlFlag} ))
    </update>
    <update id="copmerUpdateAmountDifferOrder">
        update t_order_list t
        set t.COP_ERR_STL_BATCH_NO=#{copErrStlBatchNo}, t.COP_ERR_STL_FLAG=#{copErrStlFlag}
        where t.order_no in
        (select ori_order_no from t_cust_acct_list where ori_order_no in
        (select o.order_no  from t_order_list o
        where o.COPMER_CODE=#{copmerCode} and o.txn_date&lt;#{txnDate}
        and o.COP_ERR_STL_FLAG=#{oldcopErrStlFlag} and o.ORDER_STAT=#{orderStat}) and txn_type not in ('02','11') and STL_FLAG=#{stlFlag})
    </update>
    <update id="copmerUpdateDealOrder">
        update t_order_list t
        set t.COP_ERR_STL_BATCH_NO=#{copErrStlBatchNo}, t.COP_ERR_STL_FLAG=#{copErrStlFlag}
        where t.order_no in
        (select order_no from t_cust_acct_list where order_no in
        (select o.order_no  from t_order_list o
        where o.COPMER_CODE=#{copmerCode} and o.txn_date&lt;#{txnDate}
        and o.COP_ERR_STL_FLAG=#{oldcopErrStlFlag} and o.ORDER_STAT=#{orderStat} ) and STL_FLAG=#{stlFlag}  )
    </update>

    <!-- 特約商戶結算-先對帳後結算
         對帳標記:成功=1 或者 無需對帳=4   SZL 2014-12-04
    -->
    <select id="sumMerTxnAmt" resultType="Map">
        select nvl(sum(o.txn_amt),0)+nvl(sum(o.DEAL_AMT),0) DTXNAMT  from t_order_list o
        where o.acqmer_code=#{acqmerCode} and o.STL_MER_FLAG=#{stlMerFlag} and o.txn_date&lt;#{txnDate}
        and o.CARDMER_TYPE=#{cardmerType} and o.mer_stl_flag=#{merStlFlag} and (o.CHK_FLAG='1' or o.CHK_FLAG='4') and o.ORDER_STAT=#{orderStat} and o.txn_type in
        <foreach item="item" index="index" collection="txnType" open="(" separator="," close=")">
                    #{item}
         </foreach>
    </select>
    <!-- 登記結算後修改訂單明細狀態。[訂單狀態成功=1; 對帳成功=1 或者 無需對帳=4; 未結算=0] 才參與修改
        結算狀態爲  結算中=1
        SZL
    -->
    <update id="merUpdateOrder">
        update t_order_list t
        set t.MER_STL_BATCH_NO=#{merStlBatchNo},t.MER_STL_DATE=#{merStlDate},
        t.MER_STL_FLAG='1'
        where t.order_no in
        (select order_no from t_order_list o
        where o.acqmer_code=#{acqmerCode}  and o.txn_date&lt;#{txnDate}
        and o.MER_STL_FLAG='0' and o.ORDER_STAT='1' and o.CARDMER_TYPE=#{cardmerType} and o.STL_MER_FLAG=#{stlMerFlag}
        and (o.CHK_FLAG='1' or o.CHK_FLAG='4'))
    </update>

    <!-- 修訂 調帳後訂單是成功的,結算時沒同步調漲標記爲 調帳成功已結算 SZL-->
    <!-- 操做 修改 成功狀態、並結算中、並調賬標記不爲null的記錄爲  調帳成功已結算 SZL-->
    <update id="syncErrStlingState">
        update t_order_list o
        set o.err_stl_flag='3'
        where o.order_stat = '1' and o.MER_STL_FLAG = '1' and o.err_stl_flag is not null
    </update>

    <update id="merUpdateAmountDifferOrder">
        update t_order_list t
        set t.MER_ERR_STL_BATCH_NO=#{merStlBatchNo},t.ERR_STL_FLAG=#{newErrStlFlag}
        where t.order_no in
        (select order_no from t_order_list o
        where o.acqmer_code=#{acqmerCode}  and o.txn_date&lt;#{txnDate}
        and o.MER_STL_FLAG=#{oldMerStlFlag} and o.ORDER_STAT=#{orderStat} and o.CARDMER_TYPE=#{cardmerType} and o.STL_MER_FLAG=#{stlMerFlag} and o.CHK_FLAG=#{chkFlag} and o.ERR_STL_FLAG=#{oldErrStlFlag})
    </update>

    <!-- 特約商戶結算-先結算後對帳 -->
    <select id="sumMerChkStlTxnAmt" resultType="Map">
        select nvl(nvl(sum(o.txn_amt),0)+nvl(sum(o.DEAL_AMT),0),0) DTXNAMT  from t_order_list o
        where o.acqmer_code=#{acqmerCode} and o.STL_MER_FLAG=#{stlMerFlag} and o.txn_date&lt;#{txnDate}
        and o.CARDMER_TYPE=#{cardmerType} and o.mer_stl_flag=#{merStlFlag} and o.ORDER_STAT=#{orderStat} and o.txn_type in
        <foreach item="item" index="index" collection="txnType" open="(" separator="," close=")">
                    #{item}
         </foreach>
    </select>
    <select id="sumMerChkStlDealTxnAmt" resultType="Map">
        select nvl(sum(o.txn_amt),0) DTXNAMT  from t_order_list o
        where o.acqmer_code=#{acqmerCode} and o.STL_MER_FLAG=#{stlMerFlag} and o.txn_date&lt;#{txnDate}
        and o.CARDMER_TYPE=#{cardmerType} and o.mer_stl_flag=#{merStlFlag} and o.ERR_STL_FLAG=#{errStlFlag} and o.txn_type in
        <foreach item="item" index="index" collection="txnType" open="(" separator="," close=")">
                    #{item}
         </foreach>
         and o.order_stat=#{orderStat}
    </select>
    <select id="sumMerAmountDifferTxnAmt" resultType="Map">
        select nvl(sum(o.DEAL_AMT),0) DTXNAMT  from t_order_list o
        where o.acqmer_code=#{acqmerCode} and o.STL_MER_FLAG=#{stlMerFlag} and o.txn_date&lt;#{txnDate}
        and o.CARDMER_TYPE=#{cardmerType} and o.mer_stl_flag=#{merStlFlag} and o.ERR_STL_FLAG=#{errStlFlag} and o.txn_type in
        <foreach item="item" index="index" collection="txnType" open="(" separator="," close=")">
                    #{item}
         </foreach>
          and o.order_stat=#{orderStat}
    </select>
    <update id="merUpdatebefOrder">
        update t_order_list t
        set t.MER_STL_BATCH_NO=#{merStlBatchNo},t.MER_STL_DATE=#{merStlDate},
        t.MER_STL_FLAG=#{newMerStlFlag}
        where t.order_no in
        (select order_no from t_order_list o
        where o.acqmer_code=#{acqmerCode}  and o.txn_date&lt;#{txnDate}
        and o.mer_stl_flag=#{oldMerStlFlag} and o.ORDER_STAT=#{orderStat} and o.CARDMER_TYPE=#{cardmerType} and o.STL_MER_FLAG=#{stlMerFlag} )
    </update>
    <update id="merNoChkUpdateAmountDifferOrder">
        update t_order_list t
        set t.MER_ERR_STL_BATCH_NO=#{merStlBatchNo},t.ERR_STL_FLAG=#{newErrStlFlag}
        where t.order_no in
        (select order_no from t_order_list o
        where o.acqmer_code=#{acqmerCode}  and o.txn_date&lt;#{txnDate}
        and o.MER_STL_FLAG=#{oldMerStlFlag} and o.ORDER_STAT=#{orderStat} and o.CARDMER_TYPE=#{cardmerType} and o.STL_MER_FLAG=#{stlMerFlag} and o.ERR_STL_FLAG=#{oldErrStlFlag})
    </update>
    <update id="merUpdateaftOrder">
        update t_order_list t
        set t.MER_ERR_STL_BATCH_NO=#{merErrStlBatchNo},
        t.ERR_STL_FLAG=#{errStlFlagaft}
        where t.order_no in
        (select order_no from t_order_list o
        where o.acqmer_code=#{acqmerCode}  and o.txn_date&lt;#{txnDate}
        and o.mer_stl_flag=#{merStlFlag} and o.CARDMER_TYPE=#{cardmerType} and o.STL_MER_FLAG=#{stlMerFlag} and o.ERR_STL_FLAG=#{errStlFlagbef} and o.ORDER_STAT=#{orderStat})
    </update>
    <!-- 髮卡機構結算-單用途卡-先對帳 後結算-->
    <select id="sumCardSingleTxnAmt" resultType="Map">
        select nvl(nvl(sum(o.txn_amt),0)+nvl(sum(o.DEAL_AMT),0),0) DTXNAMT  from t_order_list o
        where o.acqmer_code=#{acqmerCode} and o.STL_MER_FLAG=#{stlMerFlag} and o.txn_date&lt;#{txnDate}
        and o.CARDMER_TYPE=#{cardmerType} and o.mer_stl_flag=#{merStlFlag} and o.CHK_FLAG in ('1','4')
        and o.ORDER_STAT=#{orderStat} and o.txn_type in
        <foreach item="item" index="index" collection="txnType" open="(" separator="," close=")">
                    #{item}
         </foreach>
         and o.CARDMER_CODE=#{cardmerCode}
    </select>
    <update id="cardSingleUpdateOrder">
        update t_order_list t
        set t.MER_STL_BATCH_NO=#{merStlBatchNo},t.MER_STL_DATE=#{merStlDate},
        t.MER_STL_FLAG=#{newMerStlFlag}
        where t.order_no in
        (select order_no from t_order_list o
        where o.acqmer_code=#{acqmerCode}  and o.txn_date&lt;#{txnDate}
        and o.MER_STL_FLAG=#{oldMerStlFlag} and o.ORDER_STAT=#{orderStat} and o.CARDMER_TYPE=#{cardmerType}
        and o.STL_MER_FLAG=#{stlMerFlag} and o.CHK_FLAG in ('1','4') and o.CARDMER_CODE=#{cardmerCode})
    </update>
    <update id="cardSingleUpdateAmountDifferOrder">
        update t_order_list t
        set t.MER_ERR_STL_BATCH_NO=#{merStlBatchNo},t.ERR_STL_FLAG=#{newErrStlFlag}
        where t.order_no in
        (select order_no from t_order_list o
        where o.acqmer_code=#{acqmerCode}  and o.txn_date&lt;#{txnDate}
        and o.MER_STL_FLAG=#{oldMerStlFlag} and o.ORDER_STAT=#{orderStat} and o.CARDMER_TYPE=#{cardmerType}
        and o.STL_MER_FLAG=#{stlMerFlag} and o.CHK_FLAG in ('1','4')  and o.ERR_STL_FLAG=#{oldErrStlFlag} and
        o.CARDMER_CODE=#{cardmerCode})
    </update>

    <!-- 髮卡機構結算-單用途卡-先結算後對帳 -->
    <select id="sumCardSingleNoChkTxnAmt" resultType="Map">
        select nvl(sum(o.txn_amt),0)+nvl(sum(o.DEAL_AMT),0) DTXNAMT  from t_order_list o
        where o.acqmer_code=#{acqmerCode} and o.STL_MER_FLAG=#{stlMerFlag} and o.txn_date&lt;#{txnDate}
        and o.CARDMER_TYPE=#{cardmerType} and o.mer_stl_flag=#{merStlFlag} and o.ORDER_STAT=#{orderStat} and o.txn_type in
        <foreach item="item" index="index" collection="txnType" open="(" separator="," close=")">
                    #{item}
         </foreach>
        and o.cardmer_code=#{cardmerCode}
    </select>
    <select id="sumCardSingleNoChkDealTxnAmt" resultType="Map">
        select nvl(sum(o.txn_amt),0) DTXNAMT  from t_order_list o
        where o.acqmer_code=#{acqmerCode} and o.STL_MER_FLAG=#{stlMerFlag} and o.txn_date&lt;#{txnDate}
        and o.CARDMER_TYPE=#{cardmerType} and o.mer_stl_flag=#{merStlFlag} and o.ERR_STL_FLAG=#{errStlFlag} and o.txn_type in
        <foreach item="item" index="index" collection="txnType" open="(" separator="," close=")">
                    #{item}
         </foreach>
          and o.order_stat=#{orderStat}
        and o.cardmer_code=#{cardmerCode}
    </select>
    <select id="sumCardSingleNoChkAmountDifferTxnAmt" resultType="Map">
        select nvl(sum(o.DEAL_AMT),0) DTXNAMT  from t_order_list o
        where o.acqmer_code=#{acqmerCode} and o.STL_MER_FLAG=#{stlMerFlag} and o.txn_date&lt;#{txnDate}
        and o.CARDMER_TYPE=#{cardmerType} and o.mer_stl_flag=#{merStlFlag} and o.ERR_STL_FLAG=#{errStlFlag} and o.txn_type in
        <foreach item="item" index="index" collection="txnType" open="(" separator="," close=")">
                    #{item}
         </foreach>
          and o.order_stat=#{orderStat}
        and o.cardmer_code=#{cardmerCode}
    </select>
    <update id="cardSingleNoChkUpdatebefOrder">
        update t_order_list t
        set t.MER_STL_BATCH_NO=#{merStlBatchNo},t.MER_STL_DATE=#{merStlDate},
        t.MER_STL_FLAG=#{newMerStlFlag}
        where t.order_no in
        (select order_no from t_order_list o
        where o.acqmer_code=#{acqmerCode}  and o.txn_date&lt;#{txnDate}
        and o.mer_stl_flag=#{oldMerStlFlag} and o.ORDER_STAT=#{orderStat} and o.CARDMER_TYPE=#{cardmerType} and o.STL_MER_FLAG=#{stlMerFlag} and o.cardmer_code=#{cardmerCode} )

    </update>
    <update id="cardSingleNoChkUpdateAmountDifferOrder">
        update t_order_list t
        set t.MER_ERR_STL_BATCH_NO=#{merStlBatchNo},t.ERR_STL_FLAG=#{newErrStlFlag}
        where t.order_no in
        (select order_no from t_order_list o
        where o.acqmer_code=#{acqmerCode}  and o.txn_date&lt;#{txnDate}
        and o.MER_STL_FLAG=#{oldMerStlFlag} and o.ORDER_STAT=#{orderStat} and o.CARDMER_TYPE=#{cardmerType} and o.STL_MER_FLAG=#{stlMerFlag} and o.ERR_STL_FLAG=#{oldErrStlFlag}
        and o.cardmer_code=#{cardmerCode})

    </update>
    <update id="cardSingleNoChkUpdateaftOrder">
        update t_order_list t
        set t.MER_ERR_STL_BATCH_NO=#{merErrStlBatchNo},
        t.ERR_STL_FLAG=#{errStlFlagaft}
        where t.order_no in
        (select order_no from t_order_list o
        where o.acqmer_code=#{acqmerCode}  and o.txn_date&lt;#{txnDate}
        and o.mer_stl_flag=#{merStlFlag} and o.CARDMER_TYPE=#{cardmerType} and o.STL_MER_FLAG=#{stlMerFlag} and o.ERR_STL_FLAG=#{errStlFlagbef} and o.ORDER_STAT=#{orderStat}
        and o.cardmer_code=#{cardmerCode})

    </update>


    <!-- 髮卡機構結算-多用途卡-先對帳後結算 -->
    <select id="sumCardChkStlTxnAmt" resultType="Map">
        select nvl(sum(o.txn_amt),0) DTXNAMT  from t_order_list o
        inner join t_cust_acct_list t on t.order_no=o.order_no
        and t.STL_FLAG=#{stlFlag} and  t.CHK_FLAG=#{tchkFlag} and t.TXN_STAT=#{txnStat} and t.CARDMER_code=#{cardmerCode} and t.txn_date&lt;#{txnDate}
        where o.MER_STL_FLAG=#{merStlFlag} and  o.CHK_FLAG in ('1','4')  and t.ORDER_STAT=#{orderStat} and o.txn_type in
        <foreach item="item" index="index" collection="txnType" open="(" separator="," close=")">
                    #{item}
         </foreach>
          and o.ACQMER_CODE=#{acqmerCode}
    </select>
    <update id="updateCardChkStlTxnAmt">
        update t_order_list t
        set t.MER_STL_BATCH_NO=#{merStlBatchNo},t.MER_STL_DATE=#{merStlDate}, t.MER_STL_FLAG=#{merStlFlag}
        where t.cardmer_code=#{cardmerCode} and  t.MER_STL_FLAG=#{oldMerStlFlag} and t.ORDER_STAT=#{orderStat} and t.ACQMER_CODE=#{acqmerCode} and t.ERR_STL_FLAG is null and t.CHK_FLAG in ('1','4') 
    </update>
    <update id="updateCardChkDealStlTxnAmt">
        update t_order_list t
        set t.MER_STL_BATCH_NO=#{merStlBatchNo},t.MER_STL_DATE=#{merStlDate}, t.MER_STL_FLAG=#{merStlFlag},t.ERR_STL_FLAG ='3',t.MER_ERR_STL_BATCH_NO=#{merStlBatchNo}
        where t.cardmer_code=#{cardmerCode} and  t.MER_STL_FLAG=#{oldMerStlFlag} and t.ORDER_STAT=#{orderStat} and t.ACQMER_CODE=#{acqmerCode} and t.ERR_STL_FLAG ='1' and t.CHK_FLAG in ('1','4')
    </update>

    <!-- 髮卡機構結算-多用途卡-先結算後對帳 -->
    <select id="sumCardNoChkStlTxnAmt" resultType="Map">
        select nvl(sum(o.txn_amt),0)+nvl(sum(o.DEAL_AMT),0) DTXNAMT  from t_order_list o
        where o.acqmer_code=#{acqmerCode} and o.STL_MER_FLAG=#{stlMerFlag} and o.txn_date&lt;#{txnDate}
        and o.CARDMER_TYPE=#{cardmerType} and o.mer_stl_flag=#{merStlFlag} and o.ORDER_STAT=#{orderStat} and o.txn_type in
        <foreach item="item" index="index" collection="txnType" open="(" separator="," close=")">
                    #{item}
         </foreach>
        and o.cardmer_code=#{cardmerCode}
    </select>
    <select id="sumCardNoChkDealStlTxnAmt" resultType="Map">
        select nvl(sum(o.txn_amt),0) DTXNAMT  from t_order_list o
        where o.acqmer_code=#{acqmerCode} and o.STL_MER_FLAG=#{stlMerFlag} and o.txn_date&lt;#{txnDate}
        and o.CARDMER_TYPE=#{cardmerType} and o.mer_stl_flag=#{merStlFlag} and o.ERR_STL_FLAG=#{errStlFlag} and o.txn_type in
        <foreach item="item" index="index" collection="txnType" open="(" separator="," close=")">
                    #{item}
         </foreach>
          and o.CARDMER_code=#{cardmerCode}
    </select>
    <update id="updateCardNoChkStlTxn">
        update t_order_list t
        set t.MER_STL_BATCH_NO=#{merStlBatchNo},t.MER_STL_DATE=#{merStlDate}, t.MER_STL_FLAG=#{merStlFlag}
        where t.cardmer_code=#{cardmerCode} and  t.MER_STL_FLAG=#{oldMerStlFlag} and t.ORDER_STAT=#{orderStat} and t.ACQMER_CODE=#{acqmerCode} and t.ERR_STL_FLAG is null
    </update>
    <update id="updateCardNoChkDealStlTxn">
        update t_order_list t
        set t.MER_ERR_STL_BATCH_NO=#{merErrStlBatchNo},
        t.ERR_STL_FLAG=#{errStlFlagaft}
        where t.cardmer_code=#{cardmerCode} and  t.MER_STL_FLAG=#{oldMerStlFlag} and t.ACQMER_CODE=#{acqmerCode} and t.ERR_STL_FLAG=#{errStlFlag}
    </update>


    <!-- 金額不符調帳後更新訂單調帳金額 -->
    <update id="updateOriDealAmt">
        update T_ORDER_LIST SET ERR_STL_FLAG=#{errStlFlag},COP_ERR_STL_FLAG=#{copErrStlFlag},DEAL_AMT = #{dealAmt} where ID = #{id}
    </update>

    <!-- 根據結算批次號更新商戶結算標誌 -->
    <update id="updateStlFlagByStlBatchNo">
        update t_order_list
        <set>
            <if test="merStlFlag != null and merStlFlag !=''">
                 MER_STL_FLAG=#{merStlFlag},
            </if>
            <if test="copStlFlag != null and copStlFlag !=''">
                 COP_STL_FLAG=#{copStlFlag},
            </if>
            <if test="errStlFlag != null and errStlFlag !=''">
                 ERR_STL_FLAG=#{errStlFlag},
            </if>
            <if test="copErrStlFlag != null and copErrStlFlag !=''">
                 COP_ERR_STL_FLAG=#{copErrStlFlag},
            </if>
        </set>
        <where>
            <if test="merStlBatchNo != null and merStlBatchNo !=''">
                and MER_STL_BATCH_NO=#{merStlBatchNo}
            </if>
            <if test="copStlBbatchNo != null and copStlBbatchNo !=''">
                and COP_STL_BATCH_NO=#{copStlBbatchNo}
            </if>
            <if test="merErrStlBatchNo != null and merErrStlBatchNo !=''">
                and MER_ERR_STL_BATCH_NO=#{merErrStlBatchNo}
            </if>
            <if test="copErrStlBatchNo != null and copErrStlBatchNo !=''">
                and COP_ERR_STL_BATCH_NO=#{copErrStlBatchNo}
            </if>
            <if test="orderNo != null and orderNo !=''">
                and ORDER_NO=#{orderNo}
            </if>
        </where>
    </update>
    
    <!-- 根據結算批次號更新商戶結算標誌 -->
    <update id="updateStlFlagByStlBatchNoFor11">
        update T_ORDER_LIST SET ERR_STL_FLAG=#{errStlFlag} where MER_STL_BATCH_NO=#{merStlBatchNo} and txn_type='11'
    </update>
    <!-- 根據結算批次號更新商戶結算標誌 -->
    <select id="selectByStlBatchNo"  parameterType="OrderListPO"
        resultMap="BaseResultMap">
        select <include refid="Query_Column_List" /> from  t_order_list
        <where>
            <if test="merStlBatchNo != null and merStlBatchNo !=''">
                and MER_STL_BATCH_NO=#{merStlBatchNo}
            </if>
            <if test="copStlBbatchNo != null and copStlBbatchNo !=''">
                and COP_STL_BATCH_NO=#{copStlBbatchNo}
            </if>
            <if test="merErrStlBatchNo != null and merErrStlBatchNo !=''">
                and MER_ERR_STL_BATCH_NO=#{merErrStlBatchNo}
            </if>
            <if test="copErrStlBatchNo != null and copErrStlBatchNo !=''">
                and COP_ERR_STL_BATCH_NO=#{copErrStlBatchNo}
            </if>
        </where>
        order by acqmer_code,order_no
    </select>

    <!--  查詢髮卡機構結算是否須要參與結算的記錄數-->
    <select id="countCardStlNum" resultType="Map">
        select count(*) STLNUM from t_order_list t
        where
        (t.Mer_STL_FLAG in
        <foreach item="item" index="index" collection="stlFlag" open="(" separator="," close=")">
                               #{item}
        </foreach>
         or t.ERR_STL_FLAG in
         <foreach item="item" index="index" collection="errStlFlag" open="(" separator="," close=")">
                               #{item}
        </foreach>)  and t.CARDMER_code=#{cardmerCode}
    </select>
    <!--  查詢商戶是否須要參與結算的記錄數-->
    <select id="countMerStlNum" resultType="Map">
        select count(*) STLNUM from t_order_list t
        where (t.Mer_STL_FLAG in
        <foreach item="item" index="index" collection="merStlFlag" open="(" separator="," close=")">
                               #{item}
        </foreach>
         or t.ERR_STL_FLAG in
         <foreach item="item" index="index" collection="errStlFlag" open="(" separator="," close=")">
                               #{item}
        </foreach>) and t.ACQMER_CODE=#{acqmerCode}
    </select>
    <!--  查詢合做夥伴是否須要參與結算的記錄數-->
    <select id="countCopStlNum" resultType="Map">
        select count(*) STLNUM from t_order_list t
        where (t.COP_STL_FLAG in
        <foreach item="item" index="index" collection="copStlFlag" open="(" separator="," close=")">
                               #{item}
        </foreach>
         or t.COP_ERR_STL_FLAG in
        <foreach item="item" index="index" collection="copErrStlFlag" open="(" separator="," close=")">
                               #{item}
        </foreach>) and t.COPMER_CODE=#{copmerCode}
    </select>


</mapper>
package com.ym.qab.ts.po;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;


public class OrderListPO implements Serializable {

    private static final long serialVersionUID = -8911518589443724L;

    private String id;

    private Date txnDate;

    private Date createTime;

    private String chnlId;

    private String orderNo;

    private String txnType;

    private String custNo;

    private String acctNo;

    private String acctType;

    private String cardmerCode;

    private Date merTime;

    private String merOrder;

    private String productName;

    private String acqmerCode;

    private String acqmerName;

    private String acqmerType;

    private String relAcct;

    private String relAcctType;

    private String relCardmerCode;

    private String orderStat;

    private String delFlag;

    private Date endTime;

    private Date orderDelTime;

    private String noteStat;

    private Date noteTime;

    private BigDecimal txnAmt;

    private BigDecimal befAmt;

    private BigDecimal txnFee;

    private String ccy;

    private String oriOrderNo;

    private BigDecimal ejectAmt;

    private String chkFlag;

    private String chkBatchNo;

    private Date chkDate;

    private String stlMerFlag;

    private String errStlFlag;

    private String copErrStlFlag;

    private BigDecimal dealAmt;

    private String merErrStlBatchNo;

    private String copErrStlBatchNo;

    private String copmerCode;

    private String cardmerType;

    private String merStlFlag;

    private String merStlBatchNo;

    private Date merStlDate;

    private String copStlFlag;

    private String copStlBatchNo;

    private Date copStlDate;

    private String memo;

    private Date orderCloseTime;

    private String posCode;

    private Date cardmerDate;

    private Date cardmerTime;

    private String cardmerSeq;

    private String operNo;// 操做員帳號,liu.xu於2014.11.12添加

    /** 支付方式:一維碼支付、二維碼支付 */
    private String payMethod;


    public String getId() {
        return id;
    }


    public void setId(String id) {
        this.id = id;
    }


    public Date getTxnDate() {
        return txnDate;
    }


    public void setTxnDate(Date txnDate) {
        this.txnDate = txnDate;
    }


    public Date getCreateTime() {
        return createTime;
    }


    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }


    public String getChnlId() {
        return chnlId;
    }


    public void setChnlId(String chnlId) {
        this.chnlId = chnlId == null ? null : chnlId.trim();
    }


    public String getOrderNo() {
        return orderNo;
    }


    public void setOrderNo(String orderNo) {
        this.orderNo = orderNo == null ? null : orderNo.trim();
    }


    public String getTxnType() {
        return txnType;
    }


    public void setTxnType(String txnType) {
        this.txnType = txnType == null ? null : txnType.trim();
    }


    public String getCustNo() {
        return custNo;
    }


    public void setCustNo(String custNo) {
        this.custNo = custNo == null ? null : custNo.trim();
    }


    public String getAcctNo() {
        return acctNo;
    }


    public void setAcctNo(String acctNo) {
        this.acctNo = acctNo == null ? null : acctNo.trim();
    }


    public String getAcctType() {
        return acctType;
    }


    public void setAcctType(String acctType) {
        this.acctType = acctType == null ? null : acctType.trim();
    }


    public String getCardmerCode() {
        return cardmerCode;
    }


    public void setCardmerCode(String cardmerCode) {
        this.cardmerCode = cardmerCode == null ? null : cardmerCode.trim();
    }


    public Date getMerTime() {
        return merTime;
    }


    public void setMerTime(Date merTime) {
        this.merTime = merTime;
    }


    public String getMerOrder() {
        return merOrder;
    }


    public void setMerOrder(String merOrder) {
        this.merOrder = merOrder == null ? null : merOrder.trim();
    }


    public String getProductName() {
        return productName;
    }


    public void setProductName(String productName) {
        this.productName = productName == null ? null : productName.trim();
    }


    public String getAcqmerCode() {
        return acqmerCode;
    }


    public void setAcqmerCode(String acqmerCode) {
        this.acqmerCode = acqmerCode == null ? null : acqmerCode.trim();
    }


    public String getAcqmerName() {
        return acqmerName;
    }


    public void setAcqmerName(String acqmerName) {
        this.acqmerName = acqmerName == null ? null : acqmerName.trim();
    }


    public String getAcqmerType() {
        return acqmerType;
    }


    public void setAcqmerType(String acqmerType) {
        this.acqmerType = acqmerType == null ? null : acqmerType.trim();
    }


    public String getPosCode() {
        return posCode;
    }


    public void setPosCode(String posCode) {
        this.posCode = posCode;
    }


    public String getRelAcct() {
        return relAcct;
    }


    public void setRelAcct(String relAcct) {
        this.relAcct = relAcct == null ? null : relAcct.trim();
    }


    public String getRelAcctType() {
        return relAcctType;
    }


    public void setRelAcctType(String relAcctType) {
        this.relAcctType = relAcctType == null ? null : relAcctType.trim();
    }


    public String getRelCardmerCode() {
        return relCardmerCode;
    }


    public void setRelCardmerCode(String relCardmerCode) {
        this.relCardmerCode = relCardmerCode;
    }


    public String getOrderStat() {
        return orderStat;
    }


    public void setOrderStat(String orderStat) {
        this.orderStat = orderStat;
    }


    public String getDelFlag() {
        return delFlag;
    }


    public void setDelFlag(String delFlag) {
        this.delFlag = delFlag == null ? null : delFlag.trim();
    }


    public Date getEndTime() {
        return endTime;
    }


    public void setEndTime(Date endTime) {
        this.endTime = endTime;
    }


    public Date getOrderDelTime() {
        return orderDelTime;
    }


    public void setOrderDelTime(Date orderDelTime) {
        this.orderDelTime = orderDelTime;
    }


    public String getNoteStat() {
        return noteStat;
    }


    public void setNoteStat(String noteStat) {
        this.noteStat = noteStat == null ? null : noteStat.trim();
    }


    public Date getNoteTime() {
        return noteTime;
    }


    public void setNoteTime(Date noteTime) {
        this.noteTime = noteTime;
    }


    public BigDecimal getTxnAmt() {
        return txnAmt;
    }


    public void setTxnAmt(BigDecimal txnAmt) {
        this.txnAmt = txnAmt;
    }


    public BigDecimal getBefAmt() {
        return befAmt;
    }


    public void setBefAmt(BigDecimal befAmt) {
        this.befAmt = befAmt;
    }


    public BigDecimal getTxnFee() {
        return txnFee;
    }


    public void setTxnFee(BigDecimal txnFee) {
        this.txnFee = txnFee;
    }


    public String getCcy() {
        return ccy;
    }


    public void setCcy(String ccy) {
        this.ccy = ccy == null ? null : ccy.trim();
    }


    public String getOriOrderNo() {
        return oriOrderNo;
    }


    public void setOriOrderNo(String oriOrderNo) {
        this.oriOrderNo = oriOrderNo == null ? null : oriOrderNo.trim();
    }


    public BigDecimal getEjectAmt() {
        return ejectAmt;
    }


    public void setEjectAmt(BigDecimal ejectAmt) {
        this.ejectAmt = ejectAmt;
    }


    public String getChkFlag() {
        return chkFlag;
    }


    public void setChkFlag(String chkFlag) {
        this.chkFlag = chkFlag == null ? null : chkFlag.trim();
    }


    public String getChkBatchNo() {
        return chkBatchNo;
    }


    public void setChkBatchNo(String chkBatchNo) {
        this.chkBatchNo = chkBatchNo == null ? null : chkBatchNo.trim();
    }


    public Date getChkDate() {
        return chkDate;
    }


    public void setChkDate(Date chkDate) {
        this.chkDate = chkDate;
    }


    public String getMerStlFlag() {
        return merStlFlag;
    }


    public void setMerStlFlag(String merStlFlag) {
        this.merStlFlag = merStlFlag == null ? null : merStlFlag.trim();
    }


    public String getMerStlBatchNo() {
        return merStlBatchNo;
    }


    public void setMerStlBatchNo(String merStlBatchNo) {
        this.merStlBatchNo = merStlBatchNo == null ? null : merStlBatchNo.trim();
    }


    public Date getMerStlDate() {
        return merStlDate;
    }


    public void setMerStlDate(Date merStlDate) {
        this.merStlDate = merStlDate;
    }


    public String getCopStlFlag() {
        return copStlFlag;
    }


    public void setCopStlFlag(String copStlFlag) {
        this.copStlFlag = copStlFlag == null ? null : copStlFlag.trim();
    }


    public String getCopStlBatchNo() {
        return copStlBatchNo;
    }


    public void setCopStlBatchNo(String copStlBatchNo) {
        this.copStlBatchNo = copStlBatchNo == null ? null : copStlBatchNo.trim();
    }


    public Date getCopStlDate() {
        return copStlDate;
    }


    public void setCopStlDate(Date copStlDate) {
        this.copStlDate = copStlDate;
    }


    public Date getOrderCloseTime() {
        return orderCloseTime;
    }


    public void setOrderCloseTime(Date orderCloseTime) {
        this.orderCloseTime = orderCloseTime;
    }


    public String getMemo() {
        return memo;
    }


    public void setMemo(String memo) {
        this.memo = memo == null ? null : memo.trim();
    }


    public String getStlMerFlag() {
        return stlMerFlag;
    }


    public void setStlMerFlag(String stlMerFlag) {
        this.stlMerFlag = stlMerFlag;
    }


    public String getErrStlFlag() {
        return errStlFlag;
    }


    public void setErrStlFlag(String errStlFlag) {
        this.errStlFlag = errStlFlag;
    }


    public String getMerErrStlBatchNo() {
        return merErrStlBatchNo;
    }


    public void setMerErrStlBatchNo(String merErrStlBatchNo) {
        this.merErrStlBatchNo = merErrStlBatchNo;
    }


    public String getCopErrStlBatchNo() {
        return copErrStlBatchNo;
    }


    public void setCopErrStlBatchNo(String copErrStlBatchNo) {
        this.copErrStlBatchNo = copErrStlBatchNo;
    }


    public String getCopmerCode() {
        return copmerCode;
    }


    public void setCopmerCode(String copmerCode) {
        this.copmerCode = copmerCode;
    }


    public BigDecimal getDealAmt() {
        return dealAmt;
    }


    public void setDealAmt(BigDecimal dealAmt) {
        this.dealAmt = dealAmt;
    }


    public String getCardmerType() {
        return cardmerType;
    }


    public void setCardmerType(String cardmerType) {
        this.cardmerType = cardmerType;
    }


    public String getCopErrStlFlag() {
        return copErrStlFlag;
    }


    public void setCopErrStlFlag(String copErrStlFlag) {
        this.copErrStlFlag = copErrStlFlag;
    }


    public Date getCardmerDate() {
        return cardmerDate;
    }


    public void setCardmerDate(Date cardmerDate) {
        this.cardmerDate = cardmerDate;
    }


    public Date getCardmerTime() {
        return cardmerTime;
    }


    public void setCardmerTime(Date cardmerTime) {
        this.cardmerTime = cardmerTime;
    }


    public String getCardmerSeq() {
        return cardmerSeq;
    }


    public void setCardmerSeq(String cardmerSeq) {
        this.cardmerSeq = cardmerSeq;
    }


    public String getPayMethod() {
        return payMethod;
    }


    public void setPayMethod(String payMethod) {
        this.payMethod = payMethod;
    }


    public String getOperNo() {
        return operNo;
    }


    public void setOperNo(String operNo) {
        this.operNo = operNo;
    }

}
package com.ym.qab.ts.dao.impl;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.ibatis.session.RowBounds;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.ym.qab.comm.QueryResult;
import com.ym.qab.commons.consts.CommonConst;
import com.ym.qab.commons.consts.OrderStatConsts;
import com.ym.qab.commons.dao.BaseDao;
import com.ym.qab.commons.exception.PersistenceException;
import com.ym.qab.commons.utils.DateUtil;
import com.ym.qab.commons.utils.FunIMsgFormat;
import com.ym.qab.ts.dao.IOrderListDao;
import com.ym.qab.ts.po.OrderListPO;


/**
 * 
 * @author WUDUFENG
 * @since 2014年4月24日
 */
public class OrderListDaoImpl extends BaseDao<OrderListPO, String> implements IOrderListDao {
    private final Logger logger = LoggerFactory.getLogger(getClass().getName());
    private static final String QUERY_ORDER_LIST = ".queryOrderListByPage";
    private static final String QUERY_ORDER_COUNT = ".queryOrderCount";
    private static final String QUERY_ORDER_BYORDERNOT = ".queryOrderByOrderNo";
    private static final String UPDATE_ORDER_BYORDERNOT = ".updateByOrderNo";
    private static final String QUERY_MON_ORDER_LIST = ".queryMonOrderList";
    private static final String QUERY_MON_ORDER_COUNT = ".queryMonOrderListCount";

    @Override
    public QueryResult<OrderListPO> search(Date ltTxnDate, String custNo, String acqmerType,
            String acqmerCode, String productName, int startIndex, int maxResult) {

        if (productName != null && !productName.trim().equals("")) {
            productName = "%" + productName + "%";
        }

        String[] properties = { "custNo", "acqmerType", "acqmerCode", "productName", "txnDate", "delFlag" };
        Object[] propertyValues =
                { custNo, acqmerType, acqmerCode, productName, ltTxnDate, CommonConst.ORDER_DEL_FLAG_N };

        List<OrderListPO> orderList =
                selectByMap(properties, propertyValues, startIndex, maxResult, null, null);
        long totalRecord = countByStatementPostfix(".selectByMapTotalrecord", properties, propertyValues);

        QueryResult<OrderListPO> queryResult = new QueryResult<OrderListPO>();
        queryResult.setResultList(orderList);
        queryResult.setTotalRecord(totalRecord);

        return queryResult;
    }


    @Override
    public List<OrderListPO> search(List<String> orderNoList, String custNo, Date date) {

        String[] properties = { "orderNoList", "custNo", "txnDate", "delFlag" };
        Object[] propertyValues = { orderNoList, custNo, date, CommonConst.ORDER_DEL_FLAG_N };

        List<OrderListPO> orderList = selectByMap(properties, propertyValues, null, null);

        return orderList;

    }


    @Override
    public OrderListPO get(String merOrder, String acqmerCode) {
        String[] properties = { "merOrder", "acqmerCode" };
        Object[] propertyValues = { merOrder, acqmerCode };

        return findOneByStatementPostfix(".getByMerOrder", properties, propertyValues, null, null);
    }


    @Override
    public int updateStat(String orderNo, String stat, String preStat, Date endTime) {
        return updateStat(orderNo, stat, preStat, null, null, endTime,null);
    }


    @Override
    public int updateStat(String orderNo, String stat, String preStat, String acctNo, BigDecimal txnAmt,
            Date endTime,String cardmerCode) {
        String[] properties = { "orderNo", "orderStat", "preStat", "endTime", "acctNo", "txnAmt","cardmerCode" };
        Object[] propertyValues = { orderNo, stat, preStat, endTime, acctNo, txnAmt,cardmerCode };

        int record = updateByStatementPostfix(".updateStatByOrderNo", properties, propertyValues);
        return record;
    }


    @Override
    public int updateChkFlag(String id, String chkFlag, String chkBatchNo) {
        String[] properties = { "id", "chkFlag", "chkBatchNo" };
        Object[] propertyValues = { id, chkFlag, chkBatchNo };

        int record = updateByStatementPostfix(".updateChkFlag", properties, propertyValues);
        return record;
    }


    /**
     * 根據客戶號查詢客戶訂單信息
     * 
     * @param custInfoPO
     * @return
     */
    public List<OrderListPO> queryOrderList(OrderListPO orderListPO, int start, int limit) {

        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG
            .getFormat("開始調queryOrderList方法,傳入的參數是。" + orderListPO));
        RowBounds rowBound = new RowBounds(start, limit);
        String clazzName = orderListPO.getClass().getName();
        List<OrderListPO> orderListPOList =
                this.getSqlSession().selectList(clazzName + QUERY_ORDER_LIST, orderListPO, rowBound);

        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG.getFormat("結束執行queryOrderList方法,執行的結果取到數據條數爲:"
                + orderListPOList.size()));
        return orderListPOList;

    }
    
    /**
     * 查詢客戶交易記錄,進行大額、頻繁交易監控
     * 
     * @param parMap
     * @return
     */
    public List<OrderListPO> queryMonOrderList(Map<String,Object> parMap, int start, int limit) {
        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG
                .getFormat("開始調queryMonOrderList方法,傳入的參數是:" + parMap));
        RowBounds rowBound = new RowBounds(start, limit);
        String clazzName = this.getClazzName();
        List<OrderListPO> orderMonListPOList =
                this.getSqlSession().selectList(clazzName + QUERY_MON_ORDER_LIST, parMap, rowBound);
        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG.getFormat("結束執行queryMonOrderList方法,執行的結果取到數據條數爲:"
                + orderMonListPOList.size()));
        return orderMonListPOList;
    }
    
    /**
     * 根據查詢訂單條數
     * 
     * @param parMap
     * @return
     */
    public long queryMonOrderListCount(Map<String,Object> parMap) {
        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG.getFormat("開始調queryMonOrderListCount方法,傳入的參數是:"
                + parMap));
        String clazzName = this.getClazzName();
        Long orderListPOCount = this.getSqlSession().selectOne(clazzName + QUERY_MON_ORDER_COUNT, parMap);
        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG.getFormat("結束執行queryMonOrderListCount方法,執行的結果取到數據條數爲:"
                + orderListPOCount));
        return orderListPOCount;
    }

    @Override
    public void syncErrStlingState() {
        this.getSqlSession().update(clazzName + ".syncErrStlingState");
    }

    @Override
    public Map<String, Object> getFrozenOrderInfo(String orderNo) {
        assert orderNo != null : "訂單號不能爲空";
        Map<String, Object> params = new HashMap<>();
        params.put("orderNo", orderNo);
        Map<String, Map<String,Object>> orderInfoMap = getSqlSession().selectMap(clazzName + ".frozenOrderInfo",params, "ORDER_NO");
        return orderInfoMap.get(orderNo);
    }

    /**
     * 根據客戶號查詢客戶訂單條數
     * 
     * @param custInfoPO
     * @return
     */
    public long queryOrderCount(OrderListPO orderListPO) {

        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG.getFormat("開始調queryOrderCount方法,傳入的參數是。"
                + orderListPO));
        String clazzName = orderListPO.getClass().getName();
        Long orderListPOCount = this.getSqlSession().selectOne(clazzName + QUERY_ORDER_COUNT, orderListPO);

        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG.getFormat("結束執行queryOrderCount方法,執行的結果取到數據條數爲:"
                + orderListPOCount));
        return orderListPOCount;

    }


    /**
     * 根據訂單號查詢客戶訂單信息(此方法可擴展)
     * 
     * @param orderListPO
     * @return
     */
    public OrderListPO queryOrderByOrderNo(OrderListPO orderListPO) {

        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG.getFormat("開始調queryOrderByOrderNo方法,傳入的參數是。"
                + orderListPO));
        String clazzName = orderListPO.getClass().getName();
        OrderListPO po = this.getSqlSession().selectOne(clazzName + QUERY_ORDER_BYORDERNOT, orderListPO);

        return po;

    }


    /**
     * 根據訂單號更新客戶訂單信息(此方法可擴展)
     * 
     * @param custInfoPO
     * @return
     */
    public void updateOrderByOrderNo(OrderListPO orderListPO) {

        logger.debug(FunIMsgFormat.MsgStyle.DEFAULT_LOG.getFormat("開始調updateOrderByOrderNo方法,傳入的參數是。"
                + orderListPO));
        String clazzName = orderListPO.getClass().getName();
        this.getSqlSession().update(clazzName + UPDATE_ORDER_BYORDERNOT, orderListPO);

    }


    @Override
    public List<BigDecimal> getSumTxnAmt(String custNo, Date begin, Date endDate) {
        Map<String, Object> parameter = new HashMap<String, Object>();
        parameter.put("custNo", custNo);
        parameter.put("txnDateBegin", begin);
        parameter.put("txnDateEnd", endDate);
        parameter.put("delFlag", CommonConst.ORDER_DEL_FLAG_N);
        parameter.put("orderStat", OrderStatConsts.SUCESS);
        parameter.put("txnType", CommonConst.TXN_TYPE_PAY);
        Map<String, Map<String, Object>> map =
                getSqlSession().selectMap(clazzName + ".sumTxnAmt", parameter, "YYMM");
        List<BigDecimal> list = new ArrayList<BigDecimal>();
        if (map != null && map.size() > 0) {
            Date d = endDate;
            while (d.compareTo(begin) >= 0) {
                String yyMM = DateUtil.format(d, "yyMM");
                Map<String, Object> o = map.get(yyMM);
                if (o != null) {
                    list.add((BigDecimal) o.get("AMT"));
                } else {
                    list.add(BigDecimal.ZERO);
                }

                d = DateUtil.add(d, Calendar.MONTH, -1);
            }
        }
        return list;
    }


    @Override
    public Map<String, Object> findMapByStatementPostfix(String statementPostfix, String[] properties,
            Object[] propertyValues) throws PersistenceException {
        logger
        .debug(
        FunIMsgFormat.MsgStyle.DEFAULT_LOG
                    .getFormat("開始調用{}的findMapByStatementPostfix方法,傳遞的參數是statementPostfix={},properties={},propertyValues={},orderBy={},order={}。"),
            new Object[] { this.getClass().getName(), statementPostfix, properties, propertyValues });
    if (StringUtils.isEmpty(statementPostfix))
        return null;
    Map<String, Object> map = new HashMap<String, Object>();
    if (ArrayUtils.isNotEmpty(properties) && ArrayUtils.isNotEmpty(propertyValues)) {
        int prosKeyLen = properties.length;
        int prosValueLen = propertyValues.length;
        if (prosKeyLen != prosValueLen)
            throw new PersistenceException("傳遞的參數不匹配!");
        for (int i = 0; i < prosKeyLen; i++) {
            map.put(properties[i], propertyValues[i]);
        }
    }
    return getSqlSession().selectOne(clazzName + statementPostfix, map);
    }


    /**
     * 根據訂單號更新狀態(特約商戶發送通知狀態)
     * 
     * @param orderNo
     * @param stat
     * @param preStat
     * @param endTime
     * @return
     */
    @Override
    public int updateNoteStat(String orderNo,String preStat, String noteStat, Date noteTime) {
        String[] properties = { "orderNo","preStat", "noteStat", "noteTime"};
        Object[] propertyValues = { orderNo,preStat, noteStat, noteTime};

        int record = updateByStatementPostfix(".updateNoteStatByOrderNo", properties, propertyValues);
        return record;
    }


    /**
     * 根據操做員帳號及訂單號查詢訂單信息
     * 
     * @param operNo
     *            操做員帳號
     * @param orderNo
     *            訂單號(模糊匹配)
     * @param startIndex
     *            分頁開始索引
     * @param maxResult
     *            每頁條數
     * @return
     * @author liu.xu
     * @since 2014-11-13
     */
    public QueryResult<OrderListPO> search(String operNo, String orderNo, int startIndex, int maxResult) {

        if (StringUtils.isNotBlank(orderNo)) {
            orderNo = "%" + orderNo + "%";
        }

        String[] properties = { "operNo", "orderNo", "delFlag" };
        Object[] propertyValues = { operNo, orderNo, CommonConst.ORDER_DEL_FLAG_N }; // 查詢未刪除的記錄

        List<OrderListPO> orderList =
                findByStatementPostfix(".selectByOperNo", properties, propertyValues, startIndex, maxResult);
        long totalRecord = countByStatementPostfix(".selectTotalrecordByOperNo", properties, propertyValues);

        QueryResult<OrderListPO> queryResult = new QueryResult<OrderListPO>();
        queryResult.setResultList(orderList);
        queryResult.setTotalRecord(totalRecord);

        return queryResult;
    }


    /**
     * 查詢交易淨消費額(消費總額-退貨總額)
     * 
     * @param operNo
     *            操做員帳號
     * @param orderNo
     *            訂單號(模糊匹配)
     * @return
     * @author liu.xu
     * @since 2014-11-17
     */
    public BigDecimal selectNetAmountByOperNo(String operNo, String orderNo) {

        if (StringUtils.isNotBlank(orderNo)) {
            orderNo = "%" + orderNo + "%";
        }

        String[] properties = { "operNo", "orderNo", "delFlag" };
        Object[] propertyValues = { operNo, orderNo, CommonConst.ORDER_DEL_FLAG_N }; // 查詢未刪除的記錄

        return this.<BigDecimal> selectByProperties(".selectNetAmountByOperNo", properties, propertyValues);

    }
}
<?xml version="1.0" encoding="UTF-8" ?>  
  
<!DOCTYPE configuration PUBLIC   
    "-//mybatis.org//DTD Config 3.0//EN"  
    "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
    <typeAliases>
        <!-- A -->
        <typeAlias alias="AcctBindChgPO" type="com.ym.qab.uc.po.AcctBindChgPO" />
        <typeAlias alias="AcctFundsBalancePO" type="com.ym.qab.ts.po.AcctFundsBalancePO" />
        <typeAlias alias="AssDetailPO" type="com.ym.qab.mer.po.AssDetailPO" />
        <typeAlias alias="AreaCodePO" type="com.ym.qab.comm.po.AreaCodePO" />
        <typeAlias alias="AddrBookPO" type="com.ym.qab.bmoa.po.AddrBookPO" />
        <typeAlias alias="AppStorePO" type="com.ym.qab.uc.po.AppStorePO" />
        <typeAlias alias="AcctTatisticsTotalPO" type="com.ym.qab.bmoa.po.AcctTatisticsTotalPO" />
        <typeAlias alias="AdPlayPlanPO" type="com.ym.qab.ts.po.AdPlayPlanPO" />

        <!-- B -->
        <typeAlias alias="BatchFileInfoPO" type="com.ym.qab.comm.po.BatchFileInfoPO" />
        <typeAlias alias="BindPrepayCardPO" type="com.ym.qab.uc.po.BindPrepayCardPO" />
        <typeAlias alias="BlackCustPO" type="com.ym.qab.uc.po.BlackCustPO" />
        <typeAlias alias="BlackWhiteListPO" type="com.ym.qab.uc.po.BlackWhiteListPO" />
        <typeAlias alias="BlackWhiteListChgPO" type="com.ym.qab.bmoa.po.BlackWhiteListChgPO" />
        <typeAlias alias="BlackWhiteTatisticsTotalPO"
            type="com.ym.qab.bmoa.po.BlackWhiteTatisticsTotalPO" />

        
        <!-- C -->
        <typeAlias alias="CardBusinessInfoPO" type="com.ym.qab.uc.po.CardBusinessInfoPO" />
        <typeAlias alias="CardmerRangeRegionPO" type="com.ym.qab.mer.po.CardmerRangeRegionPO" />
        <typeAlias alias="CardmerRangeMertypePO" type="com.ym.qab.mer.po.CardmerRangeMertypePO" />
        <typeAlias alias="ChkInfoPO" type="com.ym.qab.bmfinance.po.ChkInfoPO" />
        <typeAlias alias="ChkMerlistPO" type="com.ym.qab.bmfinance.po.ChkMerlistPO" />
        <typeAlias alias="ChkRulePO" type="com.ym.qab.bmfinance.po.ChkRulePO" />
        <typeAlias alias="CmAppMngPO" type="com.ym.qab.uc.po.CmAppMngPO" />
        <typeAlias alias="CmCodePO" type="com.ym.qab.uc.po.CmCodePO" />
        <typeAlias alias="CmCustKeyPO" type="com.ym.qab.uc.po.CmCustKeyPO" />
        <typeAlias alias="CmSysInfoPO" type="com.ym.qab.comm.po.CmSysInfoPO" />
        <typeAlias alias="CustAcctBookPO" type="com.ym.qab.uc.po.CustAcctBookPO" />
        <typeAlias alias="CustAcctListPO" type="com.ym.qab.ts.po.CustAcctListPO" />
        <typeAlias alias="CustInfoPO" type="com.ym.qab.uc.po.CustInfoPO" />
        <typeAlias alias="CustLoginInfoPO" type="com.ym.qab.uc.po.CustLoginInfoPO" />
        <typeAlias alias="CustLoginLogPO" type="com.ym.qab.uc.po.CustLoginLogPO" />
        <typeAlias alias="CustPwdGetBookPO" type="com.ym.qab.uc.po.CustPwdGetBookPO" />
        <typeAlias alias="CardDiscInfoPO" type="com.ym.qab.ts.po.CardDiscInfoPO" />
        <typeAlias alias="CardMerInfoPO" type="com.ym.qab.mer.po.CardmerInfoPO" />
        <typeAlias alias="CopmerInfoPO" type="com.ym.qab.mer.po.CopmerInfoPO" />
        <typeAlias alias="CopmerRateInfoPO" type="com.ym.qab.mer.po.CopmerRateInfoPO" />
        <typeAlias alias="CmEmailPO" type="com.ym.qab.comm.po.CmEmailPO" />
        <typeAlias alias="CardMerRateInfoPO" type="com.ym.qab.mer.po.CardMerRateInfoPO" />
        <typeAlias alias="CardmerKindConfPO" type="com.ym.qab.mer.po.CardmerKindConfPO" />
        <typeAlias alias="CmParmPO" type="com.ym.qab.uc.po.CmParmPO" />
        <typeAlias alias="CmVcTotPO" type="com.ym.qab.uc.po.CmVcTotPO" />
        <typeAlias alias="CustFrzBookHisPO" type="com.ym.qab.bmoa.po.CustFrzBookHisPO" />
        <typeAlias alias="CustAcctCtrlPO" type="com.ym.qab.uc.po.CustAcctCtrlPO" />
        <typeAlias alias="CustLoginLogHisPO" type="com.ym.qab.bmoa.po.CustLoginLogHisPO" />
        <typeAlias alias="CustAcctConfPO" type="com.ym.qab.uc.po.CustAcctConfPO" />
        <typeAlias alias="CmTxnInfoPO" type="com.ym.qab.ts.po.CmTxnInfoPO" />
        <typeAlias alias="CustFrzBookPO" type="com.ym.qab.bmoa.po.CustFrzBookPO" />
        <typeAlias alias="CustSysLmtConfPO" type="com.ym.qab.ts.po.CustSysLmtConfPO" />
        <typeAlias alias="CustLmtTotalPO" type="com.ym.qab.ts.po.CustLmtTotalPO" />
        <typeAlias alias="CustTatisticsTotalPO" type="com.ym.qab.bmoa.po.CustTatisticsTotalPO" />
        <typeAlias alias="CustTranListPO" type="com.ym.qab.uc.po.CustTranListPO" />
        <typeAlias alias="CmLogoFilePO" type="com.ym.qab.bmpublic.po.CmLogoFilePO" />
        
        <typeAlias alias="CardSelectMerPO" type="com.ym.qab.uc.po.CardSelectMerPO"/>
        <typeAlias alias="CardSelectKindPO" type="com.ym.qab.uc.po.CardSelectKindPO"/>
        <typeAlias alias="CardSelectAcctPO" type="com.ym.qab.uc.po.CardSelectAcctPO"/>
        
        <typeAlias alias="CouponListPO" type="com.ym.qab.ts.po.CouponListPO"/>
        <typeAlias alias="CustTransferListPO" type="com.ym.qab.ts.po.CustTransferListPO"/>
        
        <!-- D -->
        <typeAlias alias="DiscActInfoPO" type="com.ym.qab.ts.po.DiscActInfoPO" />


        <!-- E -->
        <typeAlias alias="ESLoginPO" type="com.ym.qab.uc.po.ESLoginPO" />
            <!-- 電子憑證 -->
        <typeAlias alias="ECouponPO" type="com.ym.qab.ts.po.ECouponPO"/>
        <!-- G -->

        <!-- I -->
        <typeAlias alias="InAcctBookPO" type="com.ym.qab.mer.po.InAcctBookPO" />
        <typeAlias alias="InAcctListPO" type="com.ym.qab.mer.po.InAcctListPO" />

        <!-- L -->
        <typeAlias alias="LoginTatisticsTotalPO" type="com.ym.qab.bmoa.po.LoginTatisticsTotalPO" />
        <!-- M -->
        <typeAlias alias="MerInfoPO" type="com.ym.qab.mer.po.MerInfoPO" />
        <typeAlias alias="MinNumberNoPwdPO" type="com.ym.qab.uc.po.MinNumberNoPwdPO" />
        <typeAlias alias="MerAcctBookPO" type="com.ym.qab.mer.po.MerAcctBookPO" />
        <typeAlias alias="MerAcctListPO" type="com.ym.qab.mer.po.MerAcctListPO" />
        <typeAlias alias="MerRateInfoPO" type="com.ym.qab.mer.po.MerRateInfoPO" />
        <typeAlias alias="MerStoreInfoPO" type="com.ym.qab.mer.po.MerStoreInfoPO" />
        <typeAlias alias="MerTypePO" type="com.ym.qab.bmmer.po.MerTypePO" />
        <typeAlias alias="MerAddrBookPO" type="com.ym.qab.mer.po.MerAddrBookPO" />
        <typeAlias alias="MerKeyPO" type="com.ym.qab.mer.po.MerKeyPO" />
        <typeAlias alias="MonBigatmLmtPO" type="com.ym.qab.bmmonitor.po.MonBigatmLmtPO" />
        <typeAlias alias="MonBigatmPayPO" type="com.ym.qab.bmmonitor.po.MonBigatmPayPO" />
        <typeAlias alias="MonBigatmAverPO" type="com.ym.qab.bmmonitor.po.MonBigatmAverPO" />
        <typeAlias alias="MonFrequentListPO" type="com.ym.qab.bmmonitor.po.MonFrequentListPO" />
        <typeAlias alias="MonFrequentConfPO" type="com.ym.qab.bmmonitor.po.MonFrequentConfPO" />
        <typeAlias alias="MonFundsFrequentPO"
            type="com.ym.qab.bmmonitor.po.MonFundsFrequentPO" />
        <typeAlias alias="MonFundsListPO" type="com.ym.qab.bmmonitor.po.MonFundsListPO" />
        <typeAlias alias="MonPwdLockPO" type="com.ym.qab.bmmonitor.po.MonPwdLockPO" />
        <typeAlias alias="MonRemoteLoginPO" type="com.ym.qab.bmmonitor.po.MonRemoteLoginPO" />
        <typeAlias alias="MonBatchTimePO" type="com.ym.qab.bmmonitor.po.MonBatchTimePO" />
        <typeAlias alias="MerGoodsPO" type="com.ym.qab.bmpublic.po.MerGoodsPO"/>

        <!-- O -->
        <typeAlias alias="OrderGoodsListPO" type="com.ym.qab.ts.po.OrderGoodsListPO" />
        <typeAlias alias="OrderListPO" type="com.ym.qab.ts.po.OrderListPO" />
        <typeAlias alias="OrderTatisticsTotalPO" type="com.ym.qab.bmoa.po.OrderTatisticsTotalPO" />

        <!-- Q -->
        <typeAlias alias="QRFilePO" type="com.ym.qab.bmpublic.po.QRFilePO" />

        <!-- R -->
        <typeAlias alias="RefundOrderListPO" type="com.ym.qab.bmfinance.po.RefundOrderListPO" />
        <typeAlias alias="ReportPO" type="com.ym.qab.bmfinance.po.ReportPO" />

        <!-- S -->
        <typeAlias alias="SafeQuePO" type="com.ym.qab.uc.po.SafeQuePO" />
        <typeAlias type="com.ym.qab.comm.po.SmsMessagePO" alias="SmsMessagePO" />

        <!-- V -->
        <typeAlias alias="ViewMonitorQueryListPO"
            type="com.ym.qab.bmmonitor.po.ViewMonitorQueryListPO" />

        <!-- W -->
        <typeAlias type="com.ym.qab.bmmer.po.WorkflowAuditPO" alias="WorkflowAuditPO" />
        <typeAlias type="com.ym.qab.bmmer.po.WorkflowInfoPO" alias="WorkflowInfoPO" />
        <typeAlias type="com.ym.qab.bmpublic.po.WghtParmPO" alias="WghtParmPO" />
    </typeAliases>
    <plugins>
        <plugin interceptor="com.ym.qab.commons.utils.PagePlugin">
            <property name="dialect" value="oracle" />
            <property name="pageSqlId" value=".*ByPage" />
        </plugin>
    </plugins>
</configuration>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation" value="classpath:META-INF/com/unilife/mybatis-config.xml" />
        <property name="mapperLocations" >
            <list>
                <value>classpath:META-INF/com/unilife/bmmdt/sqlmap/DeviceInfoPO.xml</value>
                <value>classpath:META-INF/com/unilife/bmmdt/sqlmap/MdtInfoPO.xml</value>
                <value>classpath:META-INF/com/unilife/bmmdt/sqlmap/MdtAlarmInfoPO.xml</value>
                <value>classpath:META-INF/com/unilife/bmmdt/sqlmap/MdtParameterPO.xml</value>
                
                <value>classpath:META-INF/com/unilife/finance/sqlmap/OrderAccountSettlePO.xml</value>
                <value>classpath:META-INF/com/unilife/finance/sqlmap/OrderAccountCashPO.xml</value>
                <value>classpath:META-INF/com/unilife/finance/sqlmap/OrderAccountCheckPO.xml</value>
                <value>classpath:META-INF/com/unilife/finance/sqlmap/OrderAccountInfoPO.xml</value>
            </list>
        </property>
    </bean>

    <bean id="baseDao" class="com.unilife.commons.dao.BaseDao" abstract="true">
        <property name="sqlSessionFactory" ref="sqlSessionFactory" />
    </bean>
    <bean id="sequenceGenerator" class="com.unilife.common.SequenceGeneratorImpl"
        parent="baseDao">
    </bean>
    
    <bean id="deviceInfoDao" class="com.unilife.bmmdt.dao.impl.DeviceInfoDaoImpl"
        parent="baseDao">
    </bean>
    <bean id="merInfoDao" class="com.unilife.bmmdt.dao.impl.MdtInfoDaoImpl"
        parent="baseDao">
    </bean>
    <bean id="merAlarmInfoDao" class="com.unilife.bmmdt.dao.impl.MdtAlarmInfoDaoImpl"
        parent="baseDao">
    </bean>
    <bean id="merParameterDao" class="com.unilife.bmmdt.dao.impl.MdtParameterDaoImpl"
        parent="baseDao">
    </bean>
    <bean id="orderAccountSettleDao" class="com.unilife.finance.dao.impl.OrderAccountSettleDaoImpl"
        parent="baseDao">
    </bean>
    <bean id="orderAccountCashDao" class="com.unilife.finance.dao.impl.OrderAccountCashDaoImpl"
        parent="baseDao">
    </bean>
    <bean id="orderAccountCheckDao" class="com.unilife.finance.dao.impl.OrderAccountCheckDaoImpl"
        parent="baseDao">
    </bean>
    <bean id="orderAccountInfoDao" class="com.unilife.finance.dao.impl.OrderAccountInfoDaoImpl"
        parent="baseDao">
    </bean>
</beans>
  String[] properties = { "chkDate", "merFlag", "merCode"};
        Object[] propertyValues = { chkEndDate, merFlag, merCode};
        ChkInfoPO chkInfoPO =
                chkInfoDao.findOneByStatementPostfix(".selectByProperties", properties, propertyValues, null,
                    null);
相關文章
相關標籤/搜索