package com.nkis.cr.cl.aa.web;

import java.util.HashMap;
import java.util.Map;

import javax.annotation.Resource;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import com.nkis.cr.as.aa.service.AsAa010Service;
import com.nkis.cr.cl.aa.service.ClAa010Service;
import com.sdf.framework.base.service.XpfService;
import com.sdf.framework.base.web.SDFController;
import com.sdf.framework.rte.ptl.ria.support.XpfObject;
import com.sdf.framework.rte.ptl.ria.xplatform.XPlatformConstant;

/**
 * @프로젝트 : K2코리아 정보시스템 재 구축
 * @패키지 : com.nkis.cr.cl.aa.web
 * @타입명 : ClAa010Controller.java
 * @작성일 : 2015. 5. 11
 * @작성자 : 우승민
 * @설명 : 클레임반품등록
 * <pre>
 */
@Controller("cr.ClAa010Controller")
public class ClAa010Controller extends SDFController{

protected Log log = LogFactory.getLog(this.getClass());
	
	/**
	 * XpfService
	 */
	@Resource(name = "XpfService")
	private XpfService xpfService;
	
	@Resource(name = "cr.ClAa010Service")
	private ClAa010Service clAa010Service;
	
	/**
	 * 상담정보 조회
	 */
	@RequestMapping(value = "/cr/cl/aa/selectClAa010Main.do")
	public ModelAndView selectClAa010Main(XpfObject xpfObject, Model model) throws Exception {
		
		ModelAndView mav = new ModelAndView("xpfView");
		
		try {
			Map<String, Object> returnMap = xpfService.selectList(xpfObject);
			mav.addObject("returnMap", returnMap);
			setSuccMsg(mav, xpfObject, returnMap);
			
		} catch ( Exception e ) {
			setErrorMsg(mav, xpfObject, e);
		}
		return mav;
	}
	
	@RequestMapping(value = "/cr/cl/aa/saveClAa010CrClam.do")
	public ModelAndView saveAsAa010CrClam(XpfObject xpfObject, Model model) throws Exception {
		
		ModelAndView mav = new ModelAndView("xpfView");
		
		try {
			//1.공통코드 및 공통코드 내역 저장
			Map<String, Object> returnMap = xpfService.save(xpfObject);
    		mav.addObject("returnMap", returnMap);
    		
    		setSuccMsg(mav, xpfObject, returnMap);
		} catch ( Exception e ) {
			setErrorMsg(mav, xpfObject, e);
		}
		return mav;
	}
	
	@RequestMapping(value = "/cr/cl/aa/saveClAa010ClamMain.do")
	public ModelAndView saveAsAa010RprMain(XpfObject xpfObject, Model model) throws Exception {
		
		ModelAndView mav = new ModelAndView("xpfView");
		
		try {
			//1.공통코드 및 공통코드 내역 저장
			Map<String, Object> returnMap = clAa010Service.saveCrClamMain(xpfObject);
    		mav.addObject(XPlatformConstant.OUT_VARIABLES_ATT_NAME,returnMap);
    		
    		setSuccMsg(mav, xpfObject, returnMap);
		} catch ( Exception e ) {
			setErrorMsg(mav, xpfObject, e);
		}
		return mav;
	}
	
	/**
	 * 본사반품확정
	 * 
	 * @param xpfObject
	 * @param model
	 * @return
	 * @throws Exception
	 */
	@RequestMapping(value = "/cr/cl/aa/execPR_CR_CLAIM_RGOD_PROC.do")
	public ModelAndView execPrCrClaimRgodProc(XpfObject xpfObject, Model model) throws Exception {
		
		ModelAndView mav = new ModelAndView("xpfView");
		Map<String, Object> saveMap = new HashMap<String, Object>();
		try {
			Map<String, Object> returnMap = clAa010Service.saveRgod(xpfObject);
			mav.addObject(XPlatformConstant.OUT_VARIABLES_ATT_NAME,returnMap);
			setSuccMsg(mav, xpfObject, saveMap);
		} catch ( Exception e ) {
			setErrorMsg(mav, xpfObject, e);
		}
		return mav;
	}
	
	/**
	 * 본사반품확정
	 * 
	 * @param xpfObject
	 * @param model
	 * @return
	 * @throws Exception
	 */
	@RequestMapping(value = "/cr/cl/aa/execPR_CR_CLAIM_RGOD_PROC_CANCEL.do")
	public ModelAndView execPrCrClaimRgodProcCancel(XpfObject xpfObject, Model model) throws Exception {
		
		ModelAndView mav = new ModelAndView("xpfView");
		Map<String, Object> saveMap = new HashMap<String, Object>();
		try {
			Map<String, Object> returnMap = clAa010Service.cancelRgod(xpfObject);
			mav.addObject(XPlatformConstant.OUT_VARIABLES_ATT_NAME,returnMap);
			setSuccMsg(mav, xpfObject, saveMap);
		} catch ( Exception e ) {
			setErrorMsg(mav, xpfObject, e);
		}
		return mav;
	}
	
	/**
	 * 상담정보 조회
	 */
	@RequestMapping(value = "/cr/cl/aa/selectCrAa010ClamStatCd.do")
	public ModelAndView selectCrAa010ClamStatCd(XpfObject xpfObject, Model model) throws Exception {
		
		ModelAndView mav = new ModelAndView("xpfView");
		
		try {
			Map<String, Object> returnMap = xpfService.selectList(xpfObject);
			mav.addObject("returnMap", returnMap);
			setSuccMsg(mav, xpfObject, returnMap);
			
		} catch ( Exception e ) {
			setErrorMsg(mav, xpfObject, e);
		}
		return mav;
	}
}
	
	
package com.sdf.framework.base.service;

import java.util.Map;

import com.sdf.framework.rte.ptl.ria.support.XpfObject;

/**
 * 공통 서비스 인터페이스 클래스
 * @author 이웅재
 * @since 2011.05.21
 * @version 1.0
 * @see
 *
 * <pre>
 * << 개정이력(Modification Information) >>
 *   
 *   수정일      수정자           수정내용
 *  -------    --------    ---------------------------
 *   2011.05.21  이웅재          최초 생성
 *
 * </pre>
 */
public interface XpfService {
    /**
     * 목록을 조회 한다.
     * 
     * @param Object
     */
    public Map<String, Object> selectList(XpfObject xpfObject) throws Exception;

    /**
     * 데이터셋을 저장,수정,삭제 한다.
     * 
     * @param Object
     */
    public Map<String, Object> save(XpfObject xpfObject) throws Exception;

    /**
     * 공통코드 목록을 조회 한다.
     * 
     * @param Object
     */
    public Map<String, Object> selectCommCodeList(XpfObject xpfObject, String sDs) throws Exception;

    /**
     * 프로시저를 실행한다.
     * 
     * @param Object
     */
    public Map<String, Object> exec(XpfObject xpfObject) throws Exception;
    
    /**
     * 커서 타입 프로시저를 실행한다.
     * 
     * @param Object
     */
    public Map<String, Object> execx(XpfObject xpfObject) throws Exception;

    /**
     * 저장하고 조회 한다.
     * 
     * @param Object
     */
    public Map<String, Object> saveNselect(XpfObject xpfObject) throws Exception;

  

}

package com.sdf.framework.base.service.impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.sdf.framework.base.dao.CommonDAO;
import com.sdf.framework.base.service.XpfService;
import com.sdf.framework.base.vo.CommonVO;
import com.sdf.framework.com.util.SDFStringUtil;
import com.sdf.framework.rte.ptl.ria.support.XpfObject;
import com.sdf.framework.rte.ptl.ria.xplatform.XPlatformConstant;
import com.tobesoft.xplatform.data.DataSet;

import egovframework.rte.fdl.cmmn.exception.EgovBizException;

/**
 * 공통 서비스 클래스
 * @author thkim
 * @since 2011.05.21
 * @version 1.0
 * @see
 *
 * <pre>
 * << 개정이력(Modification Information) >>
 *   
 *   수정일      수정자           수정내용
 *  -------    --------    ---------------------------
 *   2011.05.21  thkim          최초 생성
 *
 * </pre>
 */
@Service("XpfService")
public class XpfServiceImpl extends SDFAbstractServiceImpl implements XpfService {

    @Resource(name="CommonDAO")
    private CommonDAO commonDAO;

    /**
     * 목록을 조회 한다.
     */
    @SuppressWarnings({ "rawtypes", "unchecked" })
	public Map<String, Object> selectList(XpfObject xpfObject) throws Exception {
    	//log.debug("@@ XpfService.selectList start............................!!");
    	Map<String, String> hm = xpfObject.toArgsMap();
    	
    	String sSqlid  = hm.get("sqlid");
    	String sTemp   = null;
    	
    	String sDSKey  = null;
    	String sSQLKey = null; 
    	
    	Map<String, String> searchMap = null;
    	
		Map<String, Object> returnMap = new HashMap<String, Object>();
    	List<Object> result = null;
    	
    	try {
	    	StringTokenizer st = null;
	    	//String[] dsKeySet = null;
	    	
	    	log.debug("sSqlid ========== ^" + sSqlid + "^");
			if (sSqlid != null) {
		    	// ;으로 구분된 sqlid를 가져와서 하나씩 실행함.
	    		st = new StringTokenizer(sSqlid, ";");
		    	//log.debug("DS KeySet's Count   ========== ^" + st.countTokens() + "^");
				int iKeySet = 0;	
		
				// 조회조건으로 쓰이는 gds_Search DS를 가져옴
				// 해당키의 DS가 없을때는 기본 파라메터를 조회 조건으로 사용
				
				List alSearchDS = null;
				// 멀티콤보 확인여부. 20140213 이정훈
				// 	멀티콤보 데이타가 존재시 List형으로 변환하여 재반환
				boolean isMltCombo = false;
				boolean isXpfChg = false;
				if (xpfObject.get(XPlatformConstant.SEARCH_INFO_DATASET_NAME) != null) {
					alSearchDS = (ArrayList) xpfObject.get(XPlatformConstant.SEARCH_INFO_DATASET_NAME);
				}
				
				for( int i=0 ; i<alSearchDS.size() ; i++)
				{
					isMltCombo = false;
					Map<String, Object> tMap =  (HashMap)alSearchDS.get(i);
					for (Iterator iter = tMap.entrySet().iterator(); iter.hasNext();) {
						Map.Entry entry = (Map.Entry) iter.next();
						String key = (String)entry.getKey();
						
						if(key.indexOf("_edtMultiCode")>0 || key.indexOf("_edtCode")>0 ){
							isMltCombo = true;
							isXpfChg = true;
							String val = (String)entry.getValue();
							List mtlList = SDFStringUtil.string2Array(val);
							tMap.put(key, mtlList);
							//log.debug("DS Find MultiCombo   ========== ^" + key + "^"+val+"====>"+mtlList);
						}
							
					}
					if(isMltCombo)
					{
						alSearchDS.set(i, tMap);
					}
				}
				
				if(isXpfChg)
				{
					xpfObject.put(XPlatformConstant.SEARCH_INFO_DATASET_NAME, alSearchDS);
				}
				
		    	// 일반적인 조회 (gds_Search의 값을 처리)
	    		//dsKeySet = new String[st.countTokens()];
		    	
	    		while(st.hasMoreTokens()) {
		    		sTemp = st.nextToken();
		    		
		    		sDSKey  = sTemp.substring(0, sTemp.indexOf(":"));
		    		sSQLKey = sTemp.substring(sTemp.indexOf(":")+1);
		
		    		//log.debug("DS  Key  ========== ^" + sDSKey + "^~");
		    		//log.debug("SQL Key  ========== ^" + sSQLKey +"^~");
		    		
		    		if ( (alSearchDS != null) && (alSearchDS.size() > 1) ) {
		    			searchMap = (Map<String, String>) alSearchDS.get(iKeySet);
		    		} else if ( (alSearchDS != null) && (alSearchDS.size() == 1) ){
		    			searchMap = (Map<String, String>) alSearchDS.get(0);
		    		} else {
		    			searchMap = hm;
		    		}
		    		
		    		searchMap.put("sSQLKey", sSQLKey);
		    		
		    		result = commonDAO.selectList(searchMap);
		    		returnMap.put(sDSKey, result);
		    		
		    		//dsKeySet[iKeySet] = sDSKey;
		    		//iKeySet++;
		    	}
	    	}

    	} catch (Exception e) {
    		//log.debug(e.toString());
    		throw e;
    	}
    	//log.debug("@@ XpfService.selectList end............................!!");
		return returnMap;
    }

    /**
     * 데이터셋을 저장,수정,삭제 한다.
     */
    @SuppressWarnings({ "rawtypes", "unchecked" })
	public Map<String, Object> save(XpfObject xpfObject) throws Exception {
    	Map<String, String> hm = xpfObject.toArgsMap();

    	String sSqlid  = hm.get("sqlid");
    	String sTemp   = null;
    	
    	String sDSKey  = null;
    	String sSQLKey = null;
    	
    	ArrayList listDS  = null; 
//    	String sRowStatus = null;
    	
    	Map<String, String> saveParamMap = null;
    	Map<String, Object> saveMap = null;
    	Map<String, Object> tempMap = null;
    	
		Map<String, Object> returnMap = new HashMap<String, Object>();
    	
    	try {
    		StringTokenizer st = null;
	    	//String[] dsKeySet = null;
	    	
	    	log.debug("sSqlid ========== ^" + sSqlid + "^");
			if (sSqlid != null) {
		    	// ;으로 구분된 sqlid를 가져와서 하나씩 실행함.
	    		st = new StringTokenizer(sSqlid, ";");
		    	//log.debug("DS KeySet's Count   ========== ^" + st.countTokens() + "^");
				int iKeySet = 0;	
		
				// 저장 시 추가할 용도로 쓰일  XPlatformConstant.SEARCH_INFO_DATASET_NAME DS를 가져옴
				// 해당키의 DS가 없을때는 기본 파라메터를 조회 조건으로 사용
				List alSaveParamDS = null;
				if (xpfObject.get(XPlatformConstant.SEARCH_INFO_DATASET_NAME) != null) {
					alSaveParamDS = (ArrayList) xpfObject.get(XPlatformConstant.SEARCH_INFO_DATASET_NAME);
					log.debug("XPlatformConstant.SEARCH_INFO_DATASET_NAME exist");
				}
		    	
		    	while(st.hasMoreTokens()) {
		    		sTemp = st.nextToken();
		    		
		    		sDSKey  = sTemp.substring(0, sTemp.indexOf(":"));
		    		sSQLKey = sTemp.substring(sTemp.indexOf(":")+1);
		
		    		//log.debug("DS  Key/SQL Key  ========== ^" + sDSKey + "^/" + "^" + sSQLKey +"^");
	
		    		
					// 같이 넣어서 실행할 saveParam 추가
		    		if ( (alSaveParamDS != null) && (alSaveParamDS.size() > 1) ) {
		    			saveParamMap = (Map<String, String>) alSaveParamDS.get(iKeySet);
		    		} else if ( (alSaveParamDS != null) && (alSaveParamDS.size() == 1) ){
		    			saveParamMap = (Map<String, String>) alSaveParamDS.get(0);
		    		} else {
		    			saveParamMap = hm;
		    		}
	
		    		// DS가 지정되지 않은 경우 해당 sql 단독실행
		    		if (sDSKey.equals("")) {
		    			saveMap = new HashMap<String, Object>();
		        		saveMap.putAll(saveParamMap);
		        		saveMap.put("sSQLKey", sSQLKey);
	    				commonDAO.insert(saveMap);
		    		} else{
			    		listDS  = xpfObject.getDsList(sDSKey);
			    		
			    		if (listDS != null) {
				    	    for(int i=0;i<listDS.size();i++) {
				    	    	saveMap = new HashMap<String, Object>();
				    			tempMap = (Map)listDS.get(i);
				    			
				    			// 파라미터 조건 적용 후 List의 값을 적용한다.
				        		saveMap.putAll(saveParamMap);
				        		saveMap.putAll(tempMap);
				        		//log.debug("DATASET_ROW_TYPE ==  " + saveMap.get(XPlatformConstant.DATASET_ROW_TYPE));
				    			int rowType = (Integer) saveMap.get(XPlatformConstant.DATASET_ROW_TYPE); 
				    			
				    			if (rowType == DataSet.ROW_TYPE_DELETED){
				    				saveMap.put("sSQLKey", sSQLKey+"#delete");
				    				commonDAO.delete(saveMap);
				    			}
				    		}
				    	    for(int i=0;i<listDS.size();i++) {
				    	    	saveMap = new HashMap<String, Object>();
				    			tempMap = (Map)listDS.get(i);
				    			
				    			// 파라미터 조건 적용 후 List의 값을 적용한다.
				        		saveMap.putAll(saveParamMap);
				        		saveMap.putAll(tempMap);
	
				        		//log.debug("DATASET_ROW_TYPE ==  " + saveMap.get(XPlatformConstant.DATASET_ROW_TYPE));
				    			int rowType = (Integer) saveMap.get(XPlatformConstant.DATASET_ROW_TYPE); 
				    			
				    			if ( rowType == DataSet.ROW_TYPE_INSERTED ){
				    				saveMap.put("sSQLKey", sSQLKey+"#insert");
				    				commonDAO.insert(saveMap);
				    			}else if (rowType == DataSet.ROW_TYPE_UPDATED){
				    				saveMap.put("sSQLKey", sSQLKey+"#update");
				    				commonDAO.update(saveMap);
					    	    }else if (rowType == DataSet.ROW_TYPE_NORMAL){
				    				saveMap.put("sSQLKey", sSQLKey);
				    				commonDAO.insert(saveMap);
					    	    }
				    		}
			    		} else {
			    			log.debug("xpfObject.getDsList(" +sDSKey+ ") is null ");
			    		}
		    		}
		    		iKeySet++;
		    	}
	    	}
    	} catch (Exception e) {
    		//log.debug(e.toString());
    		throw e;
    	}
    	
		return returnMap;
    }

    /**
     * 공통코드를 자동으로 바인딩 하기 위한 목록을 조회 한다.
     */
    @SuppressWarnings({ "rawtypes", "unchecked" })
	public Map<String, Object> selectCommCodeList(XpfObject xpfObject, String sDs) throws Exception {
    	//log.debug("@@ XpfService.selectCommCodeList start............................!!");

    	Map<String, String> hm = xpfObject.toArgsMap();
    	Map<String, String> hmCommCode = null;
    	
		Map<String, Object> returnMap = new HashMap<String, Object>();
    	List<Object> result = null;

    	String sDSKey  = null;
    	String sSQLKey = null; 
    	
    	ArrayList alCommCode = xpfObject.getDsList(sDs);
		
    	List alSearchDS = null;
		if (xpfObject.get(XPlatformConstant.SEARCH_INFO_DATASET_NAME) != null) {
			alSearchDS = (ArrayList) xpfObject.get(XPlatformConstant.SEARCH_INFO_DATASET_NAME);
			if ( (alSearchDS.size() > 0) && (alSearchDS.get(0) != null) ) {
				hm.putAll((Map<String, String>) alSearchDS.get(0));
			}
		}
		
    	try {
	    	for (int i=0;i<alCommCode.size();i++) {
	    		hmCommCode = (Map<String, String>) alCommCode.get(i);   
	    		
	    		if (hmCommCode.containsKey("p_compCd") && SDFStringUtil.isNotEmpty(hmCommCode.get("p_compCd"))) {
	    			hm.put("gv_compCd", hmCommCode.get("p_compCd"));
	    		}
	    		
	    		// 공통 코드
	    		if (hmCommCode.get("p_type").equals("C")) {

	    			sSQLKey = "StCo010.selectCommonList";
	    			sDSKey  = hmCommCode.get("p_dataset");
	    			
	    			hm.put("CD_ID", hmCommCode.get("p_code"));
		    		hm.put("sSQLKey", sSQLKey);
		    		
		    		result = commonDAO.selectList(hm);
		    		returnMap.put(sDSKey, result);
		    		
	    		// 공통 상세 코드SPEC
	    		} else if(hmCommCode.get("p_type").equals("S")) {
	    			
	    			sSQLKey = "StCo010.selectCommonSpecList";
	    			sDSKey  = hmCommCode.get("p_dataset");
	    			
	    			hm.put("CD_ID", hmCommCode.get("p_code"));
	    			hm.put("sSQLKey", sSQLKey);
	    			
	    			result = commonDAO.selectList(hm);
	    			returnMap.put(sDSKey, result);
	        	// 기타 코드
	    		} else if(hmCommCode.get("p_type").equals("E")) {

	    			sSQLKey = hmCommCode.get("p_code");
	    			sDSKey  = hmCommCode.get("p_dataset");
	    			
		    		hm.put("sSQLKey", sSQLKey);
		    		
		    		result = commonDAO.selectList(hm);
		    		returnMap.put(sDSKey, result);
	    		}
	    	}
    	} catch (Exception e) {
    		//log.debug(e.toString());
    		throw e;
    	}
    	//log.debug("@@ XpfService.selectCommCodeList end............................!!");
		return returnMap;
    }
    

    /**
     * 프로시저를 실행한다.
     */
    @SuppressWarnings({ "rawtypes", "unchecked" })
	public Map<String, Object> exec(XpfObject xpfObject) throws Exception {
    	Map<String, String> hm = xpfObject.toArgsMap();

    	String sSqlid  = hm.get("sqlid");
    	String sTemp   = null;
    	
    	String sDSKey  = null;
    	String sSQLKey = null;
    	
    	ArrayList listDS  = null; 
//    	String sRowStatus = null;
    	
    	Map<String, String> saveParamMap = null;
    	Map<String, String> saveMap = null;
//    	Map<String, Object> tempMap = null;
    	
		Map<String, Object> returnMap = new HashMap<String, Object>();

    	List<Object> result    = new ArrayList<Object>();
		CommonVO cVO           = null;
		EgovBizException eBiz  = new EgovBizException();
		
    	try {
	    	    
	    	StringTokenizer st = new StringTokenizer(sSqlid, ";");

	    	String[] dsKeySet = new String[st.countTokens()];
	    	
	    	//log.debug("DS KeySet's Count   ========== ^" + st.countTokens() + "^");
			int iKeySet = 0;	
	
			// 저장 시 추가할 용도로 쓰일  XPlatformConstant.SEARCH_INFO_DATASET_NAME DS를 가져옴
			// 해당키의 DS가 없을때는 기본 파라메터를 조회 조건으로 사용
			List alSaveParamDS = null;
			if (xpfObject.get(XPlatformConstant.SEARCH_INFO_DATASET_NAME) != null) {
				alSaveParamDS = (ArrayList) xpfObject.get(XPlatformConstant.SEARCH_INFO_DATASET_NAME);
				//log.debug("XPlatformConstant.SEARCH_INFO_DATASET_NAME exist");
			}
	    	
	    	while(st.hasMoreTokens()) {
	    		sTemp = st.nextToken();
	    		
	    		sDSKey  = sTemp.substring(0, sTemp.indexOf(":"));
	    		sSQLKey = sTemp.substring(sTemp.indexOf(":")+1);
	
	    		//log.debug("DS  Key/SQL Key  ========== ^" + sDSKey + "^/" + "^" + sSQLKey +"^");

	    		
				// 같이 넣어서 실행할 saveParam 추가
	    		if ( (alSaveParamDS != null) && (alSaveParamDS.size() > 1) ) {
	    			saveParamMap = (Map<String, String>) alSaveParamDS.get(iKeySet);
	    		} else if ( (alSaveParamDS != null) && (alSaveParamDS.size() == 1) ){
	    			saveParamMap = (Map<String, String>) alSaveParamDS.get(0);
	    		} else {
	    			saveParamMap = hm;
	    		}

	    		listDS  = xpfObject.getDsList(sDSKey);
	    		
	    		// DS가 지정되지 않은 경우 해당 sql 단독실행
	    		if (listDS != null) {
	    			for(int i=0;i<listDS.size();i++) {
		    			saveMap = (Map)listDS.get(i);
		        		saveMap.putAll(saveParamMap);
		        		saveMap.put("sSQLKey", sSQLKey);
		        		
	    				cVO = new CommonVO();
	    				cVO.setMap(saveMap);
	    				cVO = (CommonVO) commonDAO.exec(cVO);
	    				
	    				
	    				saveMap = new HashMap<String, String>();
	    				
	    				if (cVO.getErrorCode().equals("0")) {
	    					saveMap.put("ERROR_CODE",    cVO.getErrorCode());
	    					saveMap.put("ERROR_MESSAGE", cVO.getErrorMessage());
    			        } else {
    	        			eBiz.setMessageKey(cVO.getErrorCode());
    	        			eBiz.setMessage(cVO.getErrorMessage());
    	        			throw eBiz;
    			        }
	    				
	    				result.add(saveMap);
	    			}
	    		}
	    		
	    		returnMap.put(sDSKey, result);
	    		dsKeySet[iKeySet] = sDSKey;
	    		iKeySet++;
	    	}
	    	
	    	returnMap.put("dsKeySet", dsKeySet);
    	} catch (Exception e) {
    		//log.debug(e.toString());
    		throw e;
    	}
    	
		return returnMap;
    }
    
    /**
     * 커서타입 프로시저를 실행한다.
     */
    @SuppressWarnings({ "rawtypes", "unchecked" })
	public Map<String, Object> execx(XpfObject xpfObject) throws Exception {
    	log.debug("@@ XpfService.selexec start............................!!");
    	Map<String, String> hm = xpfObject.toArgsMap();
    	String sSqlid  = hm.get("sqlid");
    	String sTemp   = null;
    	String sDSKey  = null;
    	String sSQLKey = null; 
    	
    	Map<String,  String> searchMap = null;
		Map<String,  Object> returnMap = new HashMap<String, Object>();
    	List<Object> result           = null;
    	CommonVO     cVO = null;
    	
    	try {
	    	StringTokenizer st = null;
	    	log.debug("sSqlid ========== ^" + sSqlid + "^");
			if (sSqlid != null) {
		    	// ;으로 구분된 sqlid를 가져와서 하나씩 실행함.
	    		st = new StringTokenizer(sSqlid, ";");
		    	log.debug("DS KeySet's Count   ========== ^" + st.countTokens() + "^");
				int iKeySet = 0;
				// 조회조건으로 쓰이는 gds_Search DS를 가져옴
				// 해당키의 DS가 없을때는 기본 파라메터를 조회 조건으로 사용
				List alSearchDS = null;
				if (xpfObject.get(XPlatformConstant.SEARCH_INFO_DATASET_NAME) != null) {
					alSearchDS = (ArrayList) xpfObject.get(XPlatformConstant.SEARCH_INFO_DATASET_NAME);
				}
		    	
	    		while(st.hasMoreTokens()) {
		    		sTemp   = st.nextToken();
		    		sDSKey  = sTemp.substring(0, sTemp.indexOf(":"));
		    		sSQLKey = sTemp.substring(sTemp.indexOf(":")+1);
		    		log.debug("DS  Key  ========== ^" + sDSKey + "^~");
		    		log.debug("SQL Key  ========== ^" + sSQLKey +"^~");
		    		
		    		if ( (alSearchDS != null) && (alSearchDS.size() > 1) ) {
		    			searchMap = (Map<String, String>) alSearchDS.get(iKeySet);
		    		} else if ( (alSearchDS != null) && (alSearchDS.size() == 1) ){
		    			searchMap = (Map<String, String>) alSearchDS.get(0);
		    		} else {
		    			searchMap = hm;
		    		}
		    		searchMap.put("sSQLKey", sSQLKey);
		    		
		    		cVO = new CommonVO();
		    		cVO.setMap(searchMap);
		    		cVO = (CommonVO) commonDAO.exec(cVO);
		    		
		    		Map map = (Map)cVO.getMap();
		    		result = (List)map.get("RESULT");
		    		returnMap.put(sDSKey, result);
		    	}
	    	}
    	} catch (Exception e) {
    		log.debug(e.toString());
    		throw e;
    	}
    	log.debug("@@ XpfService.selexec end............................!!");
		return returnMap;
    }

    /**
     * 목록을 저장하고 조회 한다.
     * |구분자로 저장과 조회를 구분한다.
     */
	public Map<String, Object> saveNselect(XpfObject xpfObject) throws Exception {
    	//log.debug("@@ XpfService.saveNselect start............................!!");
    	
    	Map<String, String> hm = xpfObject.toArgsMap();
    	String sSqlid     = hm.get("sqlid");
    	
    	String sSaveKey   = null;
    	String sSelectKey = null;
    	
		Map<String, Object> returnMap = new HashMap<String, Object>();
    	
    	try {
	    	StringTokenizer st = null;
	    	
	    	if (sSqlid != null) {
		    	// |으로 구분된 sqlid를 가져와서 자름.
	    		st = new StringTokenizer(sSqlid, "|");
		    	//log.debug("DS KeySet's Count   ========== ^" + st.countTokens() + "^");
		    	
		    	if (st.countTokens() != 2) {
		    		throw processException("Common.C002", "조회");
		    		//throw new EgovBizException(commonMessageSource.getMessage("Common.C002", "조회"));
		    	}
	    	}
	    	
		   	sSaveKey   = st.nextToken();
	    	sSelectKey = st.nextToken();
	    	
	    	//log.debug("## SaveKey    ========== ^" + sSaveKey   + "^");
	    	//log.debug("## SelectKey  ========== ^" + sSelectKey + "^");
	    	
	    	hm.put("sqlid", sSaveKey);
			xpfObject.put("argsMap", hm);
	    	save(xpfObject);
	    	
	    	hm.put("sqlid", sSelectKey);
			xpfObject.put("argsMap", hm);
	    	returnMap = selectList(xpfObject);
	    	
    	} catch (Exception e) {
    		//log.debug(e.toString());
    		throw e;
    	}
    	//log.debug("@@ XpfService.saveNselect end............................!!");
		return returnMap;
    }

}

package com.sdf.framework.base.dao;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.springframework.orm.ibatis.SqlMapClientCallback;
import org.springframework.stereotype.Repository;

import com.ibatis.sqlmap.client.SqlMapExecutor;
import com.sdf.framework.base.vo.CommonVO;

/**
 * Default DAO 클래스
 * 
 * @author 신세계아이앤씨
 * @since 2012. 11. 04.
 * @version
 * @see
 * 
 *      <pre>
 * ================== "개정이력 ================ "
 * 
 *  수정일     수정자    수정내용 
 * ----------  --------  ---------------------------
 * 
 * 
 * </pre>
 */
@Repository("CommonDAO")
public class CommonDAO extends SDFAbstractDAO {

	/**
     * 1건을 조회한다.
     * 
     * @param Object
     */
    @SuppressWarnings("unchecked")
    public Map selectMap(Map hm) throws Exception {
    	return selectMap((String) hm.get("sSQLKey"), hm);
    }
    @SuppressWarnings("unchecked")
    public Map selectMap(String sSql, Map hm) throws Exception {
    	return (Map) super.selectByPk(sSql, hm);
    }

    /**
     * n건을 조회한다.
     * 
     * @param Object
     */
    @SuppressWarnings("unchecked")
    public List<Object> selectList(Map hm) throws Exception {
    	return selectList((String) hm.get("sSQLKey"), hm);
    }
    @SuppressWarnings("unchecked")
    public List<Object> selectList(String sSql, Map hm) throws Exception {
    	return list(sSql, hm);
    }
    

    /**
     * insert.
     * 
     * @param Object
     */
    public Object insert(Map hm) throws Exception {
    	return insert((String)hm.get("sSQLKey"), hm);
    }
    public Object insert(String sSql, Map hm) throws Exception {
    	return super.insert(sSql, hm);
    }
    
    @SuppressWarnings("unchecked")
	public void insertBatch(final String sSql, final ArrayList al) throws Exception {
    	getSqlMapClientTemplate().execute(new SqlMapClientCallback() {
    		public Object doInSqlMapClient(SqlMapExecutor executor)
    		throws SQLException {
    			executor.startBatch();
    			for(int i = 0 ; i < al.size(); i++){
    				try {
						insert(sSql, (Map)al.get(i));
					} catch (Exception e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
    			}
    			executor.executeBatch();
    			return null;
    		}
    	});
    }
    
    @SuppressWarnings("unchecked")
    public void insertBatch(final String sSql, final Map srchMap, final ArrayList al) throws Exception {
    	getSqlMapClientTemplate().execute(new SqlMapClientCallback() {
    		public Object doInSqlMapClient(SqlMapExecutor executor)
    		throws SQLException {
    			executor.startBatch();
    			for(int i = 0 ; i < al.size(); i++){
    				try {
    					Map paramMap = (Map) al.get(i);
    					paramMap.putAll(srchMap);
    					insert(sSql, paramMap);
    				} catch (Exception e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
    			}
    			executor.executeBatch();
    			return null;
    		}
    	});
    }
    
    /**
     * update.
     * 
     * @param Object
     */
    public int update(Map hm) throws Exception {
    	return update((String)hm.get("sSQLKey"), hm);
    }
    public int update(String sSql, Map hm) throws Exception {
    	return super.update(sSql, hm);
    }
    @SuppressWarnings("unchecked")
	public void updateBatch(final String sSql, final ArrayList al) throws Exception {
    	getSqlMapClientTemplate().execute(new SqlMapClientCallback() {
    		public Object doInSqlMapClient(SqlMapExecutor executor)
    		throws SQLException {
    			executor.startBatch();
    			for(int i = 0 ; i < al.size(); i++){
    				try {
						update(sSql, (Map)al.get(i));
					} catch (Exception e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
    			}
    			executor.executeBatch();
    			return null;
    		}
    	});
    }
    
    @SuppressWarnings("unchecked")
    public void updateBatch(final String sSql, final Map srchMap, final ArrayList al) throws Exception {
    	getSqlMapClientTemplate().execute(new SqlMapClientCallback() {
    		public Object doInSqlMapClient(SqlMapExecutor executor)
    		throws SQLException {
    			executor.startBatch();
    			for(int i = 0 ; i < al.size(); i++){
    				try {
    					Map paramMap = (Map) al.get(i);
    					paramMap.putAll(srchMap);
    					update(sSql, paramMap);
    				} catch (Exception e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
    			}
    			executor.executeBatch();
    			return null;
    		}
    	});
    }
    
    
    /**
     * delete.
     * 
     * @param Object
     */
    public int delete(Map hm) throws Exception {
    	return delete((String) hm.get("sSQLKey"), hm);
    }
    public int delete(String sSql, Map hm) throws Exception {
    	return super.delete(sSql, hm);
    }

    /**
     * exec procedure.
     * 
     * @param Object
     */
    public Object exec(CommonVO cVO) throws Exception {
    	Map hm = cVO.getMap();
    	return exec((String) hm.get("sSQLKey"), cVO);
    }
    public Object exec(String sSql, CommonVO cVO) throws Exception {
    	//Map hm = cVO.getMap();
    	//cVO.setMap(hm);
    	
    	getSqlMapClientTemplate().queryForObject(sSql, cVO);
    	return cVO;
    }

    public Object exec(String sSql, Map sMap) throws Exception {
    	//Map hm = cVO.getMap();
    	//cVO.setMap(hm);
    	
    	getSqlMapClientTemplate().queryForObject(sSql, sMap);
    	return sMap;
    }
  
    
}

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "<http://www.ibatis.com/dtd/sql-map-2.dtd>">
<!-- 
    SQL File Name : ClAa010_SQL.xml
    Description : 클레임 반품등록
    
    ==개정이력========================================
    수정일     수정자   Version    Query Id
    ========== ======= =========   ===================
    2015.05.1   우승민     1.0        최초 생성
-->

<sqlMap namespace="ClAa010">

    <!--  1. 조회  -->   
    <!--  1.1. 상담리스트 조회  -->
    <select id="ClAa010.selectCrClam"  resultClass="java.util.HashMap" parameterClass="java.util.Map">
    	
          SELECT /*  ClAa010.selectCrClam */
		         A.COMP_CD
               , A.ODIV_CD
               , A.RECV_YM
               , A.RPR_NO
               , A.RPR_NO AS VIEW_RPR_NO
               , A.SHOP_CD
               , A.CUST_CD
               , A.CUST_NM
               , FN_CM_DECRYPT(A.HP_NO) AS HP_NO
               , A.HP_BACK_NO
               , A.ZIP_NO
               , A.BASE_ADDR
               , FN_CM_DECRYPT(A.DETL_ADDR) AS DETL_ADDR
               , A.LOAD_NM_BASE_ADDR
               , FN_CM_DECRYPT(A.LOAD_NM_DETL_ADDR) AS LOAD_NM_DETL_ADDR
               , A.PROD_CD
               , A.COLR_CD
               , A.SIZE_CD
               , A.SIZE_NM
               , A.SELL_BFE_AF_CD
               , A.PRDC_SEQ
               , A.RPR_BARCD
               , A.CLAM_STAT_CD
               , A.SHOP_RECV_YMD
               , A.MBR_RECV_YMD
               , A.SHOP_SEND_YMD
               , A.CLAM_DIV_CD
               , A.CLAM_TYPE_CD
               , A.CLAM_CAUS_CD
               , A.PRDC_CMPY_CD
               , A.RGOD_FIX_UPRC_YMD
               , DECODE(A.SELL_BFE_AF_CD,'02',NVL(A.RGOD_FIX_UPRC,TO_NUMBER(TRIM(FN_CM_GET_SPLIT(FN_SU_SELL_PRCE (A.COMP_CD,
                                TO_CHAR (SYSDATE, 'YYYYmmdd'),
                                A.SHOP_CD,
                                A.PROD_CD,
                                A.COLR_CD,
                                1,
                                'S'),'6','@',0)))),'') AS RGOD_FIX_UPRC
               , A.CLAM_FIX_AMT
               , A.CLAM_AMT
               , A.RPR_RECV_YM
               , A.RPR_RECV_NO
               , A.RGOD_WH_CD
               , A.GW_YMD
               , A.GW_DOCU_NO
               , A.FI_SLIP_YMD
               , A.FI_SLIP_NO
               , A.MBR_RMRK
               , A.SHOP_RMRK
               , A.FRST_CHRG_MAN_ID
               , (SELECT USER_NM FROM CM_USER B WHERE A.FRST_CHRG_MAN_ID = B.USER_ID) AS FRST_CHRG_MAN_NM
               , A.SELL_YMD
               , A.SELL_RECP_NO
               , A.SELL_RECP_SEQ
               , A.MBR_RGOD_FIX_YMD
               , A.MBR_RGOD_FIX_NO
               , A.MBR_RGOD_FIX_SEQ
               , A.PURC_YMD
               , A.REGI_ID
               , A.REGI_DT
               , B.SELL_NO
               , B.SELL_UPRC
               , C.SHOP_NM
               , C.SHOP_TELNO
               , C.SHOP_HPNO
               , C.BRAND_CD
               , (SELECT VND_SNM FROM V_WF_VENDOR D WHERE A.COMP_CD=D.COMP_CD AND A.PRDC_CMPY_CD = D.VND_CD) AS PRDC_CMPY_NM
               , D.CUST_CARD_NO
               , D.CUST_DGRE_CD
               ,TO_NUMBER(TRIM(FN_CM_GET_SPLIT(FN_SU_SELL_PRCE (A.COMP_CD,
                                A.PURC_YMD,
                                A.SHOP_CD,
                                A.PROD_CD,
                                A.COLR_CD,
                                1,
                                'S'),'7','@',0)))  AS BUY_SELL_PRCE 
               ,TO_NUMBER(TRIM(FN_CM_GET_SPLIT(FN_SU_SELL_PRCE (A.COMP_CD,
                                TO_CHAR(SYSDATE,'YYYYMMDD'),
                                A.SHOP_CD,
                                A.PROD_CD,
                                A.COLR_CD,
                                1,
                                'S'),'7','@',0)))  AS NOW_SELL_PRCE
               , TO_NUMBER(TRIM(FN_CM_GET_SPLIT(FN_SU_SELL_PRCE (A.COMP_CD,
                                TO_CHAR (SYSDATE, 'YYYYmmdd'),
                                A.SHOP_CD,
                                A.PROD_CD,
                                A.COLR_CD,
                                1,
                                'S'),'6','@',0)))  AS CNSM_PRCE
               ,A.CLAM_UPRC_BASE
            FROM CR_CLAM A, WP_SELL_PROD B, SU_SHOP C, CR_CUST D
           WHERE 1=1
		     AND A.COMP_CD = B.COMP_CD(+)
             AND A.SELL_RECP_NO = B.SELL_RECP_NO(+)
             AND A.SELL_RECP_SEQ = B.SELL_RECP_SEQ(+)
             AND A.COMP_CD = C.COMP_CD
             AND A.SHOP_CD = C.SHOP_CD
             AND A.COMP_CD = D.COMP_CD(+)
             AND A.CUST_CD = D.CUST_CD(+)
             AND A.COMP_CD = #cboCompCd#
             AND A.ODIV_CD = #cboOdivCd#
             <isNotEmpty property="edtRprBarCd">
           	   AND A.RPR_BARCD = #edtRprBarCd#
           </isNotEmpty>
           <isEmpty property="edtRprBarCd">
	         AND A.RECV_YM = #maeRecvYm#
             AND A.RPR_NO = #edtRprNo#
             </isEmpty>
		
	</select>
	
	<select id="ClAa010.selectHpNoCount"  resultClass="java.util.HashMap" parameterClass="java.util.Map">
    
 		SELECT /* ClAa010.selectHpNoCount */
 		       COUNT(*) AS CNT
		  FROM CR_CUST
		 WHERE 1=1
           AND HP_NO = FN_CM_ENCRYPT(#hpNo#)
           AND BRAND_CD = #brandCd#
           AND COMP_CD = #compCd#
           AND CUST_STAT_CD ='01'
             	
	</select>
	
	<select id="ClAa010.selectVndCd"  resultClass="java.util.HashMap" parameterClass="java.util.Map">
    
 		SELECT /* ClAa010.selectVndCd */ 
 		       A.PROD_CD
 		     , A.INDC_SEQ
 		     , A.INDC_SEQ||' '||B.VND_NM AS INDC_SEQ_NM
 		     , B.VND_CD
 		     , B.VND_NM
          FROM (
                 SELECT A.COMP_CD
                      , A.PROD_CD
                      , B.INDC_SEQ
                      , FN_GP_PROD_INDC_VND_CD(A.COMP_CD, A.PROD_CD,B.INDC_SEQ) AS VND_CODE
                   FROM GP_PROD A
                      , GP_PROD_INDC B
                  WHERE 1=1
                    AND A.COMP_CD = B.COMP_CD
                    AND A.PROD_CD = B.PROD_CD
                    AND A.COMP_CD = #COMP_CD#
                    AND A.PROD_CD = #PROD_CD#
                    AND B.USE_YN='Y'
               ) A
               , V_WF_VENDOR B
         WHERE 1=1
           AND A.VND_CODE = B.VND_CD
           AND A.COMP_CD = B.COMP_CD
           AND A.COMP_CD = #COMP_CD#
           AND A.PROD_CD = #PROD_CD#
         ORDER BY A.INDC_SEQ DESC
             	
	</select>
	
	<select id="ClAa010.selectRprNoCnt"  resultClass="java.util.HashMap" parameterClass="java.util.Map">
    
 		SELECT /* ClAa010.selectRprNoCnt */
 		       COUNT(*) AS CNT
		  FROM CR_CLAM
		 WHERE 1=1
           AND RECV_YM = #recvYm#
           AND RPR_NO = #rprNo#
           AND ODIV_CD = #cboOdivCd#
           AND COMP_CD = #cboCompCd#
             	
	</select>
	
	<insert id="ClAa010.saveCrClamInsert" parameterClass="java.util.Map">
		<selectKey resultClass="java.lang.String" keyProperty="RPR_NO_SEQ">
			SELECT
            	NVL(MAX(RPR_NO), 0)+1  AS RPR_NO_SEQ
            FROM CR_CLAM WHERE COMP_CD = #COMP_CD# AND ODIV_CD = #ODIV_CD# AND RECV_YM = #RECV_YM#
		</selectKey>
	     INSERT /* ClAa010.saveCrClamInsert */
	      	INTO CR_CLAM
			    (
                 COMP_CD
               , ODIV_CD
               , RECV_YM
               , RPR_NO
               , SHOP_CD
               , CUST_CD
               , CUST_NM
               , HP_NO
               , HP_BACK_NO
               , ZIP_NO
               , BASE_ADDR
               , DETL_ADDR
               , LOAD_NM_BASE_ADDR
               , LOAD_NM_DETL_ADDR
               , PROD_CD
               , COLR_CD
               , SIZE_CD
               , SIZE_NM
               , SELL_BFE_AF_CD
               , PRDC_SEQ
               , RPR_BARCD
               , CLAM_STAT_CD
               , SHOP_RECV_YMD
               , MBR_RECV_YMD
               , SHOP_SEND_YMD
               , CLAM_DIV_CD
               , CLAM_TYPE_CD
               , CLAM_CAUS_CD
               , PRDC_CMPY_CD
               , RGOD_FIX_UPRC_YMD
               , RGOD_FIX_UPRC
               , CLAM_FIX_AMT
               , CLAM_AMT
               , RPR_RECV_YM
               , RPR_RECV_NO
               , RGOD_WH_CD
               , GW_YMD
               , GW_DOCU_NO
               , FI_SLIP_YMD
               , FI_SLIP_NO
               , MBR_RMRK
               , SHOP_RMRK
               , SELL_YMD
               , SELL_RECP_NO
               , SELL_RECP_SEQ
               , MBR_RGOD_FIX_YMD
               , MBR_RGOD_FIX_NO
               , MBR_RGOD_FIX_SEQ
               , FRST_CHRG_MAN_ID
               , PURC_YMD
               , CLAM_UPRC_BASE
               , PROG_ID
               , REGI_ID
               , REGI_DT
               , UPDT_ID
               , UPDT_DT
               )
               VALUES
               (
                 #COMP_CD#
               , #ODIV_CD#
               , #RECV_YM#
               , #RPR_NO_SEQ#
               , #SHOP_CD#
               , #CUST_CD#
               , #CUST_NM#
               , FN_CM_ENCRYPT(#HP_NO#)
               , #HP_BACK_NO#
               , #ZIP_NO#
               , #BASE_ADDR#
               , FN_CM_ENCRYPT(#DETL_ADDR#)
               , #LOAD_NM_BASE_ADDR#
               , FN_CM_ENCRYPT(#LOAD_NM_DETL_ADDR#)
               , #PROD_CD#
               , #COLR_CD#
               , #SIZE_CD#
               , FN_CR_GET_SIZE_NM(#COMP_CD#,#SHOP_CD#,#PROD_CD#,#SIZE_CD#)
               , #SELL_BFE_AF_CD#
               , #PRDC_SEQ#
               , #RPR_BARCD#
               , (CASE WHEN #MBR_RGOD_FIX_YMD# IS NOT NULL THEN '06'
                       WHEN #RGOD_FIX_UPRC_YMD# IS NOT NULL THEN '04'
                       WHEN #SHOP_SEND_YMD# IS NOT NULL THEN '03'
                       WHEN #MBR_RECV_YMD# IS NOT NULL THEN '02'
                       ELSE '01'
                       END)
               , #SHOP_RECV_YMD#
               , #MBR_RECV_YMD#
               , #SHOP_SEND_YMD#
               , #CLAM_DIV_CD#
               , #CLAM_TYPE_CD#
               , #CLAM_CAUS_CD#
               , #PRDC_CMPY_CD#
               , #RGOD_FIX_UPRC_YMD#
               , #RGOD_FIX_UPRC#
               , #CLAM_FIX_AMT#
               , #CLAM_AMT#
               , #RPR_RECV_YM#
               , #RPR_RECV_NO#
               , #RGOD_WH_CD#
               , #GW_YMD#
               , #GW_DOCU_NO#
               , #FI_SLIP_YMD#
               , #FI_SLIP_NO#
               , #MBR_RMRK#
               , #SHOP_RMRK#
               , #SELL_YMD#
               , #SELL_RECP_NO#
               , #SELL_RECP_SEQ#
               , #MBR_RGOD_FIX_YMD#
               , #MBR_RGOD_FIX_NO#
               , #MBR_RGOD_FIX_SEQ#
               , #FRST_CHRG_MAN_ID#
               , #PURC_YMD#
               , #CLAM_UPRC_BASE#
               , #PROGRAM_ID#
               , #gv_userId#
               , SYSDATE
               , #gv_userId#
               , SYSDATE)
	      
	</insert>
	
	<update id="ClAa010.updateCrClam" parameterClass="java.util.Map">
        <![CDATA[
        	UPDATE /* ClAa010.updateCrClam */
			       CR_CLAM
			   SET SHOP_CD           = #SHOP_CD#
                 , CUST_CD           = #CUST_CD#
                 , CUST_NM           = #CUST_NM#
                 , HP_NO             = FN_CM_ENCRYPT(#HP_NO#)
                 , HP_BACK_NO        = #HP_BACK_NO#
                 , ZIP_NO            = #ZIP_NO#
                 , BASE_ADDR         = #BASE_ADDR#
                 , DETL_ADDR         = FN_CM_ENCRYPT(#DETL_ADDR#)
                 , LOAD_NM_BASE_ADDR = #LOAD_NM_BASE_ADDR#
                 , LOAD_NM_DETL_ADDR = FN_CM_ENCRYPT(#LOAD_NM_DETL_ADDR#)
                 , PROD_CD           = #PROD_CD#
                 , COLR_CD           = #COLR_CD#
                 , SIZE_CD           = #SIZE_CD#
                 , SIZE_NM           = FN_CR_GET_SIZE_NM(#COMP_CD#,#SHOP_CD#,#PROD_CD#,#SIZE_CD#)
                 , SELL_BFE_AF_CD    = #SELL_BFE_AF_CD#
                 , PRDC_SEQ          = #PRDC_SEQ#
                 , RPR_BARCD         = #RPR_BARCD#
                 , CLAM_STAT_CD      = (CASE WHEN #MBR_RGOD_FIX_YMD# IS NOT NULL THEN '06'
                                             WHEN #RGOD_FIX_UPRC_YMD# IS NOT NULL THEN '04'
                                             WHEN #SHOP_SEND_YMD# IS NOT NULL THEN '03'
                                             WHEN #MBR_RECV_YMD# IS NOT NULL THEN '02'
                                             WHEN #SHOP_RECV_YMD# IS NOT NULL THEN '01'
                                             ELSE CLAM_STAT_CD
                                             END)
                 , SHOP_RECV_YMD     = #SHOP_RECV_YMD#
                 , MBR_RECV_YMD      = #MBR_RECV_YMD#
                 , SHOP_SEND_YMD     = #SHOP_SEND_YMD#
                 , CLAM_DIV_CD       = #CLAM_DIV_CD#
                 , CLAM_TYPE_CD      = #CLAM_TYPE_CD#
                 , CLAM_CAUS_CD      = #CLAM_CAUS_CD#
                 , PRDC_CMPY_CD      = #PRDC_CMPY_CD#
                 , RGOD_FIX_UPRC_YMD = #RGOD_FIX_UPRC_YMD#
                 , RGOD_FIX_UPRC     = #RGOD_FIX_UPRC# 
                 , RPR_RECV_YM       = #RPR_RECV_YM#
                 , RPR_RECV_NO       = #RPR_RECV_NO#
                 , RGOD_WH_CD        = #RGOD_WH_CD# 
                 , MBR_RMRK          = #MBR_RMRK#
                 , FRST_CHRG_MAN_ID   = #FRST_CHRG_MAN_ID#
                 , SHOP_RMRK         = #SHOP_RMRK#
                 , SELL_YMD          = #SELL_YMD#
                 , SELL_RECP_NO      = #SELL_RECP_NO#
                 , SELL_RECP_SEQ     = #SELL_RECP_SEQ#
                 , PURC_YMD          = #PURC_YMD#
                 , CLAM_UPRC_BASE    = #CLAM_UPRC_BASE#
                 , MBR_RGOD_FIX_YMD  = #MBR_RGOD_FIX_YMD#
                 , MBR_RGOD_FIX_NO   = #MBR_RGOD_FIX_NO#
                 , MBR_RGOD_FIX_SEQ  = #MBR_RGOD_FIX_SEQ#
                 , UPDT_ID           = #gv_userId#
				 , UPDT_DT           = SYSDATE
			 WHERE 1=1
			   AND COMP_CD = #COMP_CD#
               AND ODIV_CD = #ODIV_CD#
               AND RECV_YM = #RECV_YM#
               AND RPR_NO = #RPR_NO#
        ]]>
    </update>
    
    <update id="ClAa010.saveCrClam#update" parameterClass="java.util.Map">
        <![CDATA[
        	UPDATE /* ClAa010.updateCrClam */
			       CR_CLAM
			   SET SHOP_CD           = #SHOP_CD#
                 , CUST_CD           = #CUST_CD#
                 , CUST_NM           = #CUST_NM#
                 , HP_NO             = FN_CM_ENCRYPT(#HP_NO#)
                 , HP_BACK_NO        = #HP_BACK_NO#
                 , ZIP_NO            = #ZIP_NO#
                 , BASE_ADDR         = #BASE_ADDR#
                 , DETL_ADDR         = FN_CM_ENCRYPT(#DETL_ADDR#)
                 , LOAD_NM_BASE_ADDR = #LOAD_NM_BASE_ADDR#
                 , LOAD_NM_DETL_ADDR = FN_CM_ENCRYPT(#LOAD_NM_DETL_ADDR#)
                 , PROD_CD           = #PROD_CD#
                 , COLR_CD           = #COLR_CD#
                 , SIZE_CD           = #SIZE_CD#
                 , SIZE_NM           = FN_CR_GET_SIZE_NM(#COMP_CD#,#SHOP_CD#,#PROD_CD#,#SIZE_CD#)
                 , SELL_BFE_AF_CD    = #SELL_BFE_AF_CD#
                 , PRDC_SEQ          = #PRDC_SEQ#
                 , RPR_BARCD         = #RPR_BARCD#
                 , CLAM_STAT_CD      = (CASE WHEN #MBR_RGOD_FIX_YMD# IS NOT NULL THEN '06'
                                             WHEN #RGOD_FIX_UPRC_YMD# IS NOT NULL THEN '04'
                                             WHEN #SHOP_SEND_YMD# IS NOT NULL THEN '03'
                                             WHEN #MBR_RECV_YMD# IS NOT NULL THEN '02'
                                             WHEN #SHOP_RECV_YMD# IS NOT NULL THEN '01'
                                             ELSE CLAM_STAT_CD
                                             END)
                 , SHOP_RECV_YMD     = #SHOP_RECV_YMD#
                 , MBR_RECV_YMD      = #MBR_RECV_YMD#
                 , SHOP_SEND_YMD     = #SHOP_SEND_YMD#
                 , CLAM_DIV_CD       = #CLAM_DIV_CD#
                 , CLAM_TYPE_CD      = #CLAM_TYPE_CD#
                 , CLAM_CAUS_CD      = #CLAM_CAUS_CD#
                 , PRDC_CMPY_CD      = #PRDC_CMPY_CD#
                 , RGOD_FIX_UPRC_YMD = #RGOD_FIX_UPRC_YMD#
                 , RGOD_FIX_UPRC     = #RGOD_FIX_UPRC# 
                 , RPR_RECV_YM       = #RPR_RECV_YM#
                 , RPR_RECV_NO       = #RPR_RECV_NO#
                 , RGOD_WH_CD        = #RGOD_WH_CD# 
                 , MBR_RMRK          = #MBR_RMRK#
                 , SHOP_RMRK         = #SHOP_RMRK#
                 , SELL_YMD          = #SELL_YMD#
                 , SELL_RECP_NO      = #SELL_RECP_NO#
                 , SELL_RECP_SEQ     = #SELL_RECP_SEQ#
                 , MBR_RGOD_FIX_YMD  = #MBR_RGOD_FIX_YMD#
                 , MBR_RGOD_FIX_NO   = #MBR_RGOD_FIX_NO#
                 , MBR_RGOD_FIX_SEQ  = #MBR_RGOD_FIX_SEQ#
                 , FRST_CHRG_MAN_ID  = #FRST_CHRG_MAN_ID#
                 , PURC_YMD          = #PURC_YMD#
                 , CLAM_UPRC_BASE    = #CLAM_UPRC_BASE#
                 , UPDT_ID           = #gv_userId#
				 , UPDT_DT           = SYSDATE
			 WHERE 1=1
			   AND COMP_CD = #COMP_CD#
               AND ODIV_CD = #ODIV_CD#
               AND RECV_YM = #RECV_YM#
               AND RPR_NO = #RPR_NO#
        ]]>
    </update>
	
	<insert id="ClAa010.saveCrClamH"  parameterClass="java.util.Map">
        
        INSERT /* ClAa010.saveCrClamH */
        	INTO CR_CLAM_H(
				 COMP_CD
               , ODIV_CD
               , RECV_YM
               , RPR_NO
               , SEQ
               , CHANGER_ID
               , MODI_ITEM
               , MODI_BFE_VAL
               , MODI_AF_VAL
               , PROG_ID
               , REGI_ID
               , REGI_DT
               , UPDT_ID
               , UPDT_DT)
			VALUES
			   ( #COMP_CD#
               , #ODIV_CD#
               , #RECV_YM#
               , #RPR_NO#
               , (SELECT NVL(MAX(SEQ), 0)+1 FROM CR_CLAM_H WHERE COMP_CD = #COMP_CD# AND ODIV_CD = #ODIV_CD# AND RECV_YM = #RECV_YM# AND RPR_NO = #RPR_NO#)
               , #gv_userId#
               , #MODI_ITEM#
               , #MODI_BFE_VAL#
               , #MODI_AF_VAL#
               , #PROGRAM_ID#
               , #gv_userId#
               , SYSDATE
               , #gv_userId#
               , SYSDATE)
				  
    </insert>
	
	<select id="ClAa010.selectRgodFixUprc"  resultClass="java.util.HashMap" parameterClass="java.util.Map">
    
 		SELECT /* ClAa010.selectRgodFixUprc */
 		       B.PLAN_YY_CD
 		     , A.ITEM_CD
 		  FROM GP_PROD A, GP_PROD_INDC B
         WHERE B.COMP_CD = #COMP_CD#
           AND B.PROD_CD = #PROD_CD#
           AND B.INDC_SEQ = #PRDC_SEQ#
           AND A.COMP_CD = B.COMP_CD
           AND A.PROD_CD = B.PROD_CD
           AND B.USE_YN='Y'
             	
	</select>
	
	<select id="ClAa010.selectClamHistory"  resultClass="java.util.HashMap" parameterClass="java.util.Map">
    
 		SELECT /* ClAa010.selectClamHistory */
 		       COMP_CD
             , ODIV_CD
             , RECV_YM
             , RPR_NO
             , RPR_NO AS VIEW_RPR_NO
             , SHOP_CD
             , FN_SU_GET_SHOP_NM(COMP_CD, SHOP_CD) AS SHOP_NM
             , CUST_CD
             , CUST_NM
             , PROD_CD
             , FN_GP_GET_PROD_NM(COMP_CD, PROD_CD) AS PROD_NM
             , COLR_CD
             , SIZE_CD
             , FN_WP_GET_SIZE_NM(COMP_CD, #edtSessBrandCd#, PROD_CD, SIZE_CD) AS SIZE_NM
		  FROM CR_CLAM
		 WHERE 1=1
		   AND COMP_CD = #edtCompCd#
           AND ODIV_CD = #edtOdivCd#
           AND HP_NO = #edtHpNo#
         ORDER BY REGI_DT DESC
             	
	</select>
	
	<select id="ClAa010.selectClamHList"  resultClass="java.util.HashMap" parameterClass="java.util.Map">
    
 		SELECT /* ClAa010.selectClamHList */
 		       A.COMP_CD
			 , A.ODIV_CD
             , A.RECV_YM
             , A.RPR_NO
             , A.RPR_NO AS VIEW_RPR_NO
             , A.SEQ
             , A.CHANGER_ID
             , NVL2(C.COMMENTS,COMMENTS,A.MODI_ITEM) AS MODI_ITEM
             , A.MODI_BFE_VAL
             , A.MODI_AF_VAL
             , A.REGI_DT AS REGI_DT
             , B.USER_NM
		  FROM CR_CLAM_H A, CM_USER B, (SELECT COLUMN_NAME, COMMENTS FROM USER_COL_COMMENTS WHERE TABLE_NAME ='CR_CLAM') C
		 WHERE 1=1
		   AND A.CHANGER_ID = B.USER_ID(+)
		   AND A.MODI_ITEM = C.COLUMN_NAME(+)
		   AND COMP_CD = #edtCompCd#
           AND ODIV_CD = #edtOdivCd#
           AND RECV_YM = #edtRecvYm#
           AND RPR_NO  = #edtRprNo#
        UNION ALL
        SELECT
              A.COMP_CD
            , A.ODIV_CD
            , A.RECV_YM
            , A.RPR_NO
            , A.RPR_NO AS VIEW_RPR_NO
            , 0 AS SEQ
            , A.UPDT_ID
            , DECODE(B.DELRT_DIV_CD,'2','반품확정','반품취소') AS MODI_ITEM
            , '' AS MODI_BFE_VAL
            , A.DELRT_YMD||'-'||A.DELRT_SLIP_NO AS MODI_AF_VAL
            , A.REGI_DT AS REGI_DT
            , (SELECT AA.USER_NM FROM CM_USER AA WHERE AA.USER_ID = A.UPDT_ID ) AS USER_NM
          FROM CR_CLAM_SLIP_H A, LS_DELI_D B
         WHERE A.COMP_CD=B.COMP_CD
           AND A.DELRT_YMD = B.DELRT_YMD
           AND A.DELRT_SLIP_NO = B.DELRT_SLIP_NO
           AND A.COMP_CD = #edtCompCd#
           AND A.ODIV_CD = #edtOdivCd#
           AND A.RECV_YM = #edtRecvYm#
           AND A.RPR_NO  = #edtRprNo#
         ORDER BY REGI_DT DESC
             	
	</select>
	
	<procedure id="ClAa010.execPR_CR_CLAIM_RGOD_PROC" parameterClass="com.sdf.framework.base.vo.CommonVO">
        { call PR_CR_CLAIM_RGOD_PROC(
			  #map.COMP_CD,javaType=java.lang.String,jdbcType=VARCHAR,mode=IN#
			, '2'
            , #map.MBR_RGOD_FIX_YMD,javaType=java.lang.String,jdbcType=VARCHAR,mode=IN#
            , #map.SHOP_CD,javaType=java.lang.String,jdbcType=VARCHAR,mode=IN#
            , #map.RGOD_WH_CD,javaType=java.lang.String,jdbcType=VARCHAR,mode=IN#
            , #map.PROD_CD,javaType=java.lang.String,jdbcType=VARCHAR,mode=IN#
            , #map.COLR_CD,javaType=java.lang.String,jdbcType=VARCHAR,mode=IN#
            , #map.SIZE_CD,javaType=java.lang.String,jdbcType=VARCHAR,mode=IN#
            , #map.RGOD_QTY,javaType=java.lang.String,jdbcType=VARCHAR,mode=IN#
            , #map.gv_userId,javaType=java.lang.String,jdbcType=VARCHAR,mode=IN#  
            , #map.PROGRAM_ID,javaType=java.lang.String,jdbcType=VARCHAR,mode=IN#
            , #map.DELRT_SLIP_NO,javaType=java.lang.String,jdbcType=VARCHAR,mode=OUT#
            , #errorCode,javaType=java.lang.String,jdbcType=VARCHAR,mode=OUT#
		    , #errorMessage,javaType=java.lang.String,jdbcType=VARCHAR,mode=OUT#) }
    </procedure>
    
    <procedure id="ClAa010.execPR_CR_CLAIM_RGOD_PROC_CANCEL" parameterClass="com.sdf.framework.base.vo.CommonVO">
        { call PR_CR_CLAIM_RGOD_PROC(
			  #map.COMP_CD,javaType=java.lang.String,jdbcType=VARCHAR,mode=IN#
			, '1'
            , #map.MBR_RGOD_FIX_YMD,javaType=java.lang.String,jdbcType=VARCHAR,mode=IN#
            , #map.SHOP_CD,javaType=java.lang.String,jdbcType=VARCHAR,mode=IN#
            , #map.RGOD_WH_CD,javaType=java.lang.String,jdbcType=VARCHAR,mode=IN#
            , #map.PROD_CD,javaType=java.lang.String,jdbcType=VARCHAR,mode=IN#
            , #map.COLR_CD,javaType=java.lang.String,jdbcType=VARCHAR,mode=IN#
            , #map.SIZE_CD,javaType=java.lang.String,jdbcType=VARCHAR,mode=IN#
            , #map.RGOD_QTY,javaType=java.lang.String,jdbcType=VARCHAR,mode=IN#
            , #map.gv_userId,javaType=java.lang.String,jdbcType=VARCHAR,mode=IN#  
            , #map.PROGRAM_ID,javaType=java.lang.String,jdbcType=VARCHAR,mode=IN#
            , #map.DELRT_SLIP_NO,javaType=java.lang.String,jdbcType=VARCHAR,mode=OUT#
            , #errorCode,javaType=java.lang.String,jdbcType=VARCHAR,mode=OUT#
		    , #errorMessage,javaType=java.lang.String,jdbcType=VARCHAR,mode=OUT#) }
    </procedure>
	
	<insert id="ClAa010.saveCrClamSlipHInsert" parameterClass="java.util.Map">
	     INSERT /* ClAa010.saveCrClamSlipHInsert */
	      	INTO CR_CLAM_SLIP_H
			    (
                 COMP_CD
               , ODIV_CD
               , RECV_YM
               , RPR_NO
               , SEQ
               , REGI_DIV_CD
               , DELRT_YMD
               , DELRT_SLIP_NO
               , DELRT_SLIP_SEQ
               , CHANGER_ID
               , PROG_ID
               , REGI_ID
               , REGI_DT
               , UPDT_ID
               , UPDT_DT
               )
               VALUES
               (
                 #COMP_CD#
               , #ODIV_CD#
               , #RECV_YM#
               , #RPR_NO#
               , (SELECT NVL(MAX(SEQ), 0)+1 FROM CR_CLAM_SLIP_H WHERE COMP_CD = #COMP_CD# AND ODIV_CD = #ODIV_CD# AND RECV_YM = #RECV_YM# AND RPR_NO = #RPR_NO#)
               , '03'
               , #MBR_RGOD_FIX_YMD#
               , #MBR_RGOD_FIX_NO#
               , #MBR_RGOD_FIX_SEQ#
               , #gv_userId#
               , #PROGRAM_ID#
               , #gv_userId#
               , SYSDATE
               , #gv_userId#
               , SYSDATE)
	      
	</insert>
	
	<select id="ClAa010.selectClamStatCd"  resultClass="java.util.HashMap" parameterClass="java.util.Map">
		SELECT CASE WHEN GW_YMD IS NOT NULL THEN '90' 
		            WHEN SELL_RECP_NO IS NOT NULL THEN '99'
		            ELSE CLAM_STAT_CD
		            END CLAM_STAT_CD
		  FROM CR_CLAM
		 WHERE COMP_CD = #COMP_CD#
		   AND ODIV_CD = #ODIV_CD#
		   AND RECV_YM = #RECV_YM#
		   AND RPR_NO  = #RPR_NO#
	</select>
	
	<select id="ClAa010.selectClamCheckData"  resultClass="java.util.HashMap" parameterClass="java.util.Map">
		SELECT SHOP_CD,PROD_CD,COLR_CD,SIZE_CD,RGOD_WH_CD,MBR_RGOD_FIX_NO,GW_DOCU_NO,FI_SLIP_NO,SELL_RECP_NO
		  FROM CR_CLAM
		 WHERE COMP_CD = #COMP_CD#
		   AND ODIV_CD = #ODIV_CD#
		   AND RECV_YM = #RECV_YM#
		   AND RPR_NO  = #RPR_NO#
	</select>
	
</sqlMap>