Преглед изворни кода

제휴몰 가격정산 개발

jmh пре 4 година
родитељ
комит
74091ff5b8

+ 17 - 7
src/main/java/com/style24/admin/biz/dao/TsaOcmDao.java

@@ -8,7 +8,7 @@ import com.style24.persistence.domain.Extmall;
 import com.style24.persistence.domain.ExtmallNoti;
 import com.style24.persistence.domain.ExtmallOrigin;
 import com.style24.persistence.domain.ExtmallPriceSync;
-import com.style24.persistence.domain.ExtmallSettle;
+import com.style24.persistence.domain.ExtmallUsac;
 
 /**
  * 영업망관리 Dao
@@ -74,30 +74,40 @@ public interface TsaOcmDao {
 	/**
 	 * 제휴몰정산가격업로드- 목록 건수
 	 *
-	 * @param extmallOrder
+	 * @param extmallUsac
 	 * @return
 	 * @author jmh
 	 * @since 2021. 8. 3
 	 */
-	int getExtmallSettleListCount(ExtmallSettle extmallSettle);
+	int getExtmallUsacListCount(ExtmallUsac extmallUsac);
 
 	/**
 	 * 제휴몰정산가격업로드- 목록
 	 *
-	 * @param extmallOrder
+	 * @param extmallUsac
 	 * @return
 	 * @author jmh
 	 * @since 2021. 8. 3
 	 */
-	Collection<ExtmallSettle> getExtmallSettleList(ExtmallSettle extmallSettle);
+	Collection<ExtmallUsac> getExtmallUsacList(ExtmallUsac extmallUsac);
 
 	/**
 	 * 제휴몰정산가격업로드- 목록 엑셀
 	 *
-	 * @param extmallOrder
+	 * @param extmallUsac
 	 * @return
 	 * @author jmh
 	 * @since 2021. 8. 3
 	 */
-	Collection<GagaMap> getExtmallSettleExcelList(ExtmallSettle extmallSettle);
+	Collection<GagaMap> getExtmallUsacExcelList(ExtmallUsac extmallUsac);
+	
+	/**
+	 * 제휴몰정산가격업로드- 저장
+	 *
+	 * @param extmallUsac
+	 * @return
+	 * @author jmh
+	 * @since 2021. 8. 16
+	 */
+	void createExtmallUsacExcelupload(ExtmallUsac extmallUsac);
 }

+ 78 - 14
src/main/java/com/style24/admin/biz/service/TsaOcmService.java

@@ -1,14 +1,18 @@
 package com.style24.admin.biz.service;
 
+import java.io.IOException;
 import java.util.Collection;
 
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.gagaframework.excel.GagaExcelUtil;
 import com.gagaframework.excel.env.GagaExcelConstants;
 import com.gagaframework.web.parameter.GagaMap;
+import com.gagaframework.web.util.GagaFileUtil;
 import com.style24.admin.biz.dao.TsaOcmDao;
 import com.style24.admin.support.env.TsaConstants;
 import com.style24.admin.support.security.session.TsaSession;
@@ -17,7 +21,7 @@ import com.style24.persistence.domain.Extmall;
 import com.style24.persistence.domain.ExtmallNoti;
 import com.style24.persistence.domain.ExtmallOrigin;
 import com.style24.persistence.domain.ExtmallPriceSync;
-import com.style24.persistence.domain.ExtmallSettle;
+import com.style24.persistence.domain.ExtmallUsac;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -37,7 +41,12 @@ public class TsaOcmService {
     @Autowired
     private TsaOcmDao ocmDao;
 
-
+    @Autowired
+	private Environment env;
+    
+    @Autowired
+	private ObjectMapper mapper;
+    
     /**
      * 제휴몰 목록
      * @param extmall - 제휴몰 정보
@@ -112,25 +121,25 @@ public class TsaOcmService {
     /**
 	 * 제휴몰정산가격업로드-목록 건수
 	 *
-	 * @param extmallOrder
+	 * @param extmallUsac
 	 * @return
 	 * @author jmh
 	 * @since 2020. 8. 3
 	 */
-	public int getExtmallSettleListCount(ExtmallSettle extmallSettle) {
-		return ocmDao.getExtmallSettleListCount(extmallSettle);
+	public int getExtmallUsacListCount(ExtmallUsac extmallUsac) {
+		return ocmDao.getExtmallUsacListCount(extmallUsac);
 	}
 
 	/**
 	 * 제휴몰정산가격업로드-목록
 	 *
-	 * @param extmallOrder
+	 * @param extmallUsac
 	 * @return
 	 * @author jmh
 	 * @since 2020. 8. 3
 	 */
-	public Collection<ExtmallSettle> getExtmallSettleList(ExtmallSettle extmallSettle) {
-		return ocmDao.getExtmallSettleList(extmallSettle);
+	public Collection<ExtmallUsac> getExtmallUsacList(ExtmallUsac extmallUsac) {
+		return ocmDao.getExtmallUsacList(extmallUsac);
 	}
 
 	/**
@@ -142,22 +151,30 @@ public class TsaOcmService {
 	 * @author jmh
 	 * @since 2021. 8. 3
 	 */
-	public void getExtmallSettleExcelList(ExtmallSettle extmallSettle, String excelFilenameWithPath) {
+	public void getExtmallUsacExcelList(ExtmallUsac extmallUsac, String excelFilenameWithPath) {
 
 		// 헤더 title 설정
-		String[] listTitles = {"IF결과", "IF결과메세지", "샵링커 주문번호", "쇼핑몰 주문번호", "스타일24 주문번호", "주문상세번호", "주문상세상태", "배송업체", "송장번호", "전송일시"};
+		String[] listTitles = {"단품이력일련번호", "주문번호", "주문상세번호", "상품코드", "상품명", "옵션코드", "옵션1", "옵션2", "단품수량"
+				, "단품단가", "정산가", "제휴몰명", "공급업체명", "브랜드명", "유통구분명", "등록자", "등록일", "수정자", "수정일"};
+		
 
 		// DB 처리 시 사용되는 파라미터명(셀명) 설정
-		String[] cellNames = {"API_RESULT", "API_MESSAGE", "AGENT_ORDER_ID", "EXTMALL_ORDER_ID", "ORD_NO", "ORD_DTL_NO", "ORD_DTL_STAT_NM", "SHIP_COMP_NM", "DELIVERY_INVOICE", "REG_DT"};
+		String[] cellNames = {"ORD_DTL_ITEM_HST_SQ", "ORD_NO", "ORD_DTL_NO", "GOODS_CD", "GOODS_NM", "OPT_CD", "OPT_CD1", "OPT_CD2", "ITEM_QTY"
+				, "ITEM_PRICE", "USAC_PRICE", "EXTMALL_NM", "SUPPLY_COMP_NM", "BRAND_ENM", "DISTRIBUTION_GB_NM", "REG_NM", "REG_DT", "UPD_NM", "UPD_DT"};
 
 		String[] cellTypes = {
-			GagaExcelConstants.CellType.CHAR_CENTER.name(), GagaExcelConstants.CellType.CHAR_LEFT.name(),
+			GagaExcelConstants.CellType.CHAR_CENTER.name(), GagaExcelConstants.CellType.CHAR_CENTER.name(),
+			GagaExcelConstants.CellType.CHAR_CENTER.name(), GagaExcelConstants.CellType.CHAR_CENTER.name(),
+			GagaExcelConstants.CellType.CHAR_LEFT.name(), GagaExcelConstants.CellType.CHAR_CENTER.name(),
+			GagaExcelConstants.CellType.CHAR_CENTER.name(), GagaExcelConstants.CellType.CHAR_CENTER.name(),
+			GagaExcelConstants.CellType.CHAR_CENTER.name(), GagaExcelConstants.CellType.CHAR_CENTER.name(),
 			GagaExcelConstants.CellType.CHAR_CENTER.name(), GagaExcelConstants.CellType.CHAR_CENTER.name(),
 			GagaExcelConstants.CellType.CHAR_CENTER.name(), GagaExcelConstants.CellType.CHAR_CENTER.name(),
 			GagaExcelConstants.CellType.CHAR_CENTER.name(), GagaExcelConstants.CellType.CHAR_CENTER.name(),
-			GagaExcelConstants.CellType.CHAR_LEFT.name(), GagaExcelConstants.CellType.CHAR_CENTER.name()};
+			GagaExcelConstants.CellType.CHAR_CENTER.name(), GagaExcelConstants.CellType.CHAR_CENTER.name(),
+			GagaExcelConstants.CellType.CHAR_CENTER.name()};
 
-		Collection<GagaMap> dataList = ocmDao.getExtmallSettleExcelList(extmallSettle);
+		Collection<GagaMap> dataList = ocmDao.getExtmallUsacExcelList(extmallUsac);
 
 		try {
 
@@ -167,4 +184,51 @@ public class TsaOcmService {
 			throw new IllegalStateException(e);
 		}
 	}
+	
+	/**
+	 * 제휴몰정산가격업로드 엑셀 저장
+	 *
+	 * @param excelExtmallOrderList
+	 * @param excelFilename - 엑셀파일명
+	 * @return void
+	 * @author jmh
+	 * @since 2021. 08. 16
+	 */
+	@Transactional("shopTxnManager")
+	public void createExtmallUsacExcelupload(Collection<GagaMap> excelList, String excelFilename) {
+		String targetPath = env.getProperty("upload.excel.target.path");
+
+		if ((excelList == null || excelList.isEmpty())) {
+			try {
+				GagaFileUtil.deleteFile(GagaFileUtil.getConcatenationPath(targetPath, excelFilename));
+			} catch (IOException e) {
+				// Nothing Do
+			}
+			throw new IllegalStateException(message.getMessage("FAIL_0001"));
+		}
+
+		int dataIndex = 2;
+		int index = 0;
+		String vendorId = "";
+		for (GagaMap gagaMap : excelList) {
+			gagaMap.setString("ordDtlItemHstSq", gagaMap.getString("ordDtlItemHstSq").replaceAll(",", ""));
+			gagaMap.setString("usacPrice", gagaMap.getString("usacPrice").replaceAll(",", ""));
+
+			ExtmallUsac extmallUsac = mapper.convertValue(gagaMap, ExtmallUsac.class);
+			String[] params = extmallUsac.getParams();
+			String[] columns = extmallUsac.getColumns();
+
+			for (int validation = 0; validation < params.length; validation++) {
+				if ("".equals(params[validation]) || params[validation] == null || "null".equals(params[validation])) {
+					throw new IllegalStateException(dataIndex + "행에 " + columns[validation] + "(을)를 입력해 주세요.");
+				}
+			}
+			
+			extmallUsac.setRegNo(TsaSession.getInfo().getUserNo());
+			extmallUsac.setUpdNo(TsaSession.getInfo().getUserNo());
+			ocmDao.createExtmallUsacExcelupload(extmallUsac);
+			dataIndex++;
+			index++;
+		}
+	}
 }

+ 106 - 17
src/main/java/com/style24/admin/biz/web/TsaOcmController.java

@@ -3,9 +3,13 @@ package com.style24.admin.biz.web;
 import java.util.ArrayList;
 import java.util.Collection;
 
+import javax.servlet.http.HttpServletRequest;
+
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.env.Environment;
+import org.springframework.core.io.InputStreamResource;
+import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -18,6 +22,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import com.gagaframework.excel.GagaExcelUtil;
 import com.gagaframework.web.parameter.GagaMap;
 import com.gagaframework.web.rest.server.GagaResponse;
+import com.gagaframework.web.util.GagaDateUtil;
 import com.gagaframework.web.util.GagaFileUtil;
 import com.style24.admin.biz.service.TsaOcmService;
 import com.style24.admin.biz.service.TsaRendererService;
@@ -32,7 +37,7 @@ import com.style24.persistence.domain.ExtmallNoti;
 import com.style24.persistence.domain.ExtmallOrder;
 import com.style24.persistence.domain.ExtmallOrigin;
 import com.style24.persistence.domain.ExtmallPriceSync;
-import com.style24.persistence.domain.ExtmallSettle;
+import com.style24.persistence.domain.ExtmallUsac;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -368,8 +373,8 @@ public class TsaOcmController extends TsaBaseController {
 	 * @author jmh
 	 * @since 2021. 08. 02
 	 */
-	@GetMapping("/extmall/settle/upload/form")
-	public ModelAndView extmallSettleUploadForm() {
+	@GetMapping("/extmall/usac/upload/form")
+	public ModelAndView extmallUsacUploadForm() {
 		ModelAndView mav = new ModelAndView();
 
 		// 제휴몰벤더
@@ -386,7 +391,7 @@ public class TsaOcmController extends TsaBaseController {
 		// 유통구분
 		mav.addObject("distributionGbList", rendererService.getCommonCodeList("G065"));
 		
-		mav.setViewName("ocm/ExtmallSettleRegisterForm");
+		mav.setViewName("ocm/ExtmallUsacRegisterForm");
 
 		return mav;
 	}
@@ -399,38 +404,122 @@ public class TsaOcmController extends TsaBaseController {
 	 * @author jmh
 	 * @since 2021. 08. 02
 	 */
-	@PostMapping("/extmall/settle/list")
+	@PostMapping("/extmall/usac/list")
 	@ResponseBody
-	public GagaMap getExtmallSettleList(@RequestBody ExtmallSettle extmallSettle) {
+	public GagaMap getExtmallUsacList(@RequestBody ExtmallUsac extmallUsac) {
 
 		GagaMap result = new GagaMap();
 
 		//multi row 검색관련 처리
-		if (!StringUtils.isBlank(extmallSettle.getSupplyCompList())) {
+		if (!StringUtils.isBlank(extmallUsac.getSupplyCompList())) {
 			try {
-				String[] arrSupplyComp = mapper.readValue(extmallSettle.getSupplyCompList(), String[].class);
-				extmallSettle.setMultiSupplyComp(arrSupplyComp);
+				String[] arrSupplyComp = mapper.readValue(extmallUsac.getSupplyCompList(), String[].class);
+				extmallUsac.setMultiSupplyComp(arrSupplyComp);
 			} catch (Exception e) {
 				throw new IllegalStateException("업체코드 검색중 오류로 인해 조회되지 않았습니다.");
 			}
 		}
 		
-		if (!StringUtils.isBlank(extmallSettle.getBrandList())) {
+		if (!StringUtils.isBlank(extmallUsac.getBrandList())) {
 			try {
-				String[] arrBrandCd = mapper.readValue(extmallSettle.getBrandList(), String[].class);
-				extmallSettle.setMultiBrand(arrBrandCd);
+				String[] arrBrandCd = mapper.readValue(extmallUsac.getBrandList(), String[].class);
+				extmallUsac.setMultiBrand(arrBrandCd);
 			} catch (Exception e) {
 				throw new IllegalStateException("브랜드코드 검색중 오류로 인해 조회되지 않았습니다.");
 			}
 		}
+		
+		if (!StringUtils.isBlank(extmallUsac.getCondition())) {
+			extmallUsac.setConditionList(extmallUsac.getCondition().replaceAll("\r", "").trim().split("\n"));
+		}
 
-		extmallSettle.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
-		extmallSettle.setPageable(new TscPageRequest(extmallSettle.getPageNo() - 1, extmallSettle.getPageSize()));
-		extmallSettle.getPageable().setTotalCount(ocmService.getExtmallSettleListCount(extmallSettle));
+		extmallUsac.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
+		extmallUsac.setPageable(new TscPageRequest(extmallUsac.getPageNo() - 1, extmallUsac.getPageSize()));
+		extmallUsac.getPageable().setTotalCount(ocmService.getExtmallUsacListCount(extmallUsac));
 
-		result.set("pageing", extmallSettle);
-		result.set("list", ocmService.getExtmallSettleList(extmallSettle));
+		result.set("pageing", extmallUsac);
+		result.set("list", ocmService.getExtmallUsacList(extmallUsac));
 
 		return result;
 	}
+	
+	/**
+	 * 제휴몰정산가격업로드- 엑셀다운로드
+	 *
+	 * @param shoplinkerSearch
+	 * @return
+	 * @author jmh
+	 * @since 2021. 08. 16
+	 */
+	@GetMapping("/extmall/usac/excel/list")
+	public ResponseEntity<InputStreamResource> downloadGoodsInfoExcelList(HttpServletRequest request, ExtmallUsac extmallUsac) throws Exception {
+		String excelfileName = "제휴몰가격정산_" + GagaDateUtil.getTodayDateTime() + ".xlsx";
+		String excelFilenameWithPath = GagaFileUtil.getConcatenationPath(env.getProperty("download.path"), "excel", excelfileName);
+
+		//multi row 검색관련 처리
+		if (!StringUtils.isBlank(extmallUsac.getSupplyCompList())) {
+			try {
+				String[] arrSupplyComp = mapper.readValue(extmallUsac.getSupplyCompList(), String[].class);
+				extmallUsac.setMultiSupplyComp(arrSupplyComp);
+			} catch (Exception e) {
+				throw new IllegalStateException("업체코드 검색중 오류로 인해 조회되지 않았습니다.");
+			}
+		}
+		
+		if (!StringUtils.isBlank(extmallUsac.getBrandList())) {
+			try {
+				String[] arrBrandCd = mapper.readValue(extmallUsac.getBrandList(), String[].class);
+				extmallUsac.setMultiBrand(arrBrandCd);
+			} catch (Exception e) {
+				throw new IllegalStateException("브랜드코드 검색중 오류로 인해 조회되지 않았습니다.");
+			}
+		}
+		
+		if (!StringUtils.isBlank(extmallUsac.getCondition())) {
+			extmallUsac.setConditionList(extmallUsac.getCondition().replaceAll("\r", "").trim().split("\n"));
+		}
+
+		ocmService.getExtmallUsacExcelList(extmallUsac, excelFilenameWithPath);
+
+		return GagaFileUtil.writeFile(request, excelFilenameWithPath);
+	}
+	
+	/**
+	 * 제휴몰주문업로드 엑셀 업로드
+	 *
+	 * @param extmallUsacx
+	 * @return GagaResponse
+	 * @throws Exception -exception
+	 * @author jmh
+	 * @since 2021. 08. 16
+	 */
+	@PostMapping("/extmall/usac/excelupload/save")
+	@ResponseBody
+	public GagaResponse saveExtmallUsacExcelupload(@RequestBody ExtmallUsac extmallUsac) throws Exception {
+
+		String targetPath = env.getProperty("upload.excel.target.path") + "/excel/";
+		Collection<GagaMap> ecxelList = new ArrayList<>();
+
+		// 정산등록
+		if ("createExtmallUsac".equals(extmallUsac.getProcJob())) {
+			// DB 처리 시 사용되는 파라미터명(셀명) 설정
+			String[] extMallOrderNames = {"ordDtlItemHstSq", "usacPrice"};
+
+			ecxelList = GagaExcelUtil.getList(GagaFileUtil.getConcatenationPath(targetPath, extmallUsac.getExcelFileNm()), 0, extMallOrderNames, 0);
+		}
+
+		if (ecxelList != null && ecxelList.size() > EXCEL_ROW_COUNT) {
+			// 파일 삭제
+			GagaFileUtil.deleteFile(GagaFileUtil.getConcatenationPath(targetPath, extmallUsac.getExcelFileNm()));
+			throw new IllegalStateException("엑셀 파일의 건수를 " +EXCEL_ROW_COUNT + "건 이하로 사용하세요.");
+		}
+
+		ocmService.createExtmallUsacExcelupload(ecxelList, extmallUsac.getExcelFileNm());
+
+		// 파일 삭제
+		GagaFileUtil.deleteFile(GagaFileUtil.getConcatenationPath(targetPath, extmallUsac.getExcelFileNm()));
+
+		return super.ok(message.getMessage("SUCC_0007"));
+	}
+	
 }

+ 20 - 3
src/main/java/com/style24/persistence/domain/ExtmallSettle.java → src/main/java/com/style24/persistence/domain/ExtmallUsac.java

@@ -14,7 +14,7 @@ import lombok.Data;
  */
 @SuppressWarnings("serial")
 @Data
-public class ExtmallSettle extends TscBaseDomain {
+public class ExtmallUsac extends TscBaseDomain {
 
 	private Integer ordDtlItemHstSq;	// 주문상세단품이력일련번호
 	private Integer ordNo;				// 주문번호
@@ -68,14 +68,18 @@ public class ExtmallSettle extends TscBaseDomain {
 	private double settleAmt;			// 정산대상액(실판매금액 - 수수료)
 
 	// 검색조건
-	private String stDate;				// 매출시작일자
-	private String edDate;				// 매출종료일자
+	private String salesStdt;				// 매출시작일자
+	private String salesEddt;				// 매출종료일자
+	private String usacYn;				// 정산등록여부
 	private String supplyCompList;		// 공급업체코드목록
 	private String brandList;			// 브랜드코드목록
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private String[] multiBrand;
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private String[] multiSupplyComp;
+	private String condition; 			// 주문번호
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] conditionList;
 	
 	// Pagination
 	private TscPageRequest pageable;
@@ -83,4 +87,17 @@ public class ExtmallSettle extends TscBaseDomain {
 	private int pageSize = 50;
 	private int pageUnit = 10;
 	
+	private String excelFileNm;			// 엑셀업로드 파일명
+	private String procJob;
+
+	
+	public String[] getParams() {
+		String[] params = {this.ordDtlItemHstSq+"", this.usacPrice+""};
+		return params;
+	}
+
+	public String[] getColumns() {
+		String[] columns = {"단품이력일련번호", "정산가"};
+		return columns;
+	}
 }

+ 125 - 109
src/main/java/com/style24/persistence/mybatis/shop/TsaOcm.xml

@@ -177,137 +177,114 @@
 	</insert>
 
 	<!-- 제휴몰정산가격업로드- 목록 건수 cnt -->
-	<select id="getExtmallSettleListCount" parameterType="ExtmallSettle" resultType="int">
-		/* TsaOcm.getExtmallSettleListCount */
+	<select id="getExtmallUsacListCount" parameterType="ExtmallUsac" resultType="int">
+		/* TsaOcm.getExtmallUsacListCount */
 		SELECT 
 			count(ODIH.ORD_DTL_ITEM_HST_SQ)
-					          
 		FROM   TB_ORDER_DETAIL_ITEM_HST ODIH
-		        INNER JOIN TB_ORDER_DETAIL OD ON ODIH.ORD_DTL_NO = OD.ORD_DTL_NO
-		        INNER JOIN TB_ORDER O ON ODIH.ORD_NO = O.ORD_NO
-		        INNER JOIN TB_SUPPLY_COMPANY SC ON OD.SUPPLY_COMP_CD = SC.SUPPLY_COMP_CD
-		        INNER JOIN TB_GOODS G ON OD.GOODS_CD = G.GOODS_CD
-		        INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
-		        LEFT OUTER JOIN shoplinker_order SO on OD.AGENT_ORDER_ID = SO.SHOPLINKER_ORDER_ID 
-		        LEFT OUTER JOIN TB_EXTMALL E ON OD.EXTMALL_ID = E.EXTMALL_ID
-		        left outer join TB_EXTMALL_USAC_PRICE F on ODIH.ORD_DTL_ITEM_HST_SQ = F.ORD_DTL_ITEM_HST_SQ
-		      
-        WHERE  1 = 1
-        AND    O.MALL_GB = 'G011_20'
-        AND    ODIH.ITEM_PRICE != IFNULL(F.USAC_PRICE, ODIH.ITEM_PRICE)
-				        
-		ORDER  BY ODIH.ORD_DTL_ITEM_HST_SQ 
+			   INNER JOIN TB_ORDER_DETAIL OD ON ODIH.ORD_DTL_NO = OD.ORD_DTL_NO
+			   INNER JOIN TB_ORDER O ON ODIH.ORD_NO = O.ORD_NO
+			   INNER JOIN TB_SUPPLY_COMPANY SC ON OD.SUPPLY_COMP_CD = SC.SUPPLY_COMP_CD
+			   INNER JOIN TB_GOODS G ON OD.GOODS_CD = G.GOODS_CD
+			   INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
+			   LEFT OUTER JOIN TB_EXTMALL E ON OD.EXTMALL_ID = E.EXTMALL_ID
+			   LEFT OUTER JOIN TB_EXTMALL_USAC_PRICE EUP ON ODIH.ORD_DTL_ITEM_HST_SQ = EUP.ORD_DTL_ITEM_HST_SQ
+		WHERE O.MALL_GB = 'G011_20'
 		
-		<include refid="getExtmallSettleCondition_sql"/>
+		<include refid="getExtmallUsacCondition_sql"/>
 
 	</select>
 
 	<!-- 제휴몰정산가격업로드- 목록 -->
-	<select id="getExtmallSettleList" parameterType="ExtmallSettle" resultType="ExtmallSettle">
-		/* TsaOcm.getExtmallSettleList */
-		/* TsaSettle.getGoodsSettleList */
+	<select id="getExtmallUsacList" parameterType="ExtmallUsac" resultType="ExtmallUsac">
+		/* TsaOcm.getExtmallUsacList */
 		SELECT 
-			ODIH.ORD_DTL_ITEM_HST_SQ                                                           /*주문상세단품이력일련번호*/
-		     , ODIH.ORD_NO                                                                        /*주문번호*/
-		     , ODIH.ORD_DTL_NO                                                                    /*주문상세번호*/
-		     
-		     , ODIH.ITEM_CD                                                                       /*단품코드*/
-		     , ODIH.OPT_CD
-		     , ODIH.OPT_CD1                                                                       /*옵션코드1*/
-		     , ODIH.OPT_CD2                                                                       /*옵션코드2*/
-		     , ODIH.ITEM_QTY
-		     , ODIH.ITEM_PRICE                                          AS SELL_PRICE             /*판매가*/
-		     , IFNULL(F.USAC_PRICE, ODIH.ITEM_PRICE) as USAC_PRICE
-		     , F.REG_DT 
-		     , F.UPD_DT 
-		     , fn_get_user_nm(F.REG_NO) AS REG_NM
-		     , fn_get_user_nm(F.UPD_NO) AS UPD_NM          
-		               
-		     , O.MALL_GB                                                                          /*몰구분*/
-		     , FN_GET_CODE_NM('G011',O.MALL_GB)                         AS MALL_GB_NM             /*몰구분명*/
-		     , OD.EXTMALL_ORDER_ID                                                                /*제휴몰주문번호*/
-		     , OD.EXTMALL_ID                                                                      /*제휴몰ID*/
-		     , E.EXTMALL_NM                                                                       /*제휴몰명*/
-			 , OD.GOODS_CD                                                                        /*상품코드*/
-		     , G.GOODS_NM                                                                         /*상품명*/
-		     , G.BRAND_CD                                                                         /*브랜드코드*/
-		     , B.BRAND_ENM                                                                        /*브랜드명*/
-		          
+			ODIH.ORD_DTL_ITEM_HST_SQ
+			, OD.ORD_NO
+			, OD.ORD_DTL_NO
+			, OD.GOODS_CD
+			, G.GOODS_NM
+			, ODIH.OPT_CD
+			, ODIH.OPT_CD1
+			, ODIH.OPT_CD2
+			, ODIH.ITEM_QTY
+			, ODIH.ITEM_PRICE
+			, E.EXTMALL_ID                                                        /*제휴몰ID*/
+		    , E.EXTMALL_NM                                                        /*제휴몰명*/
+		    , SC.SUPPLY_COMP_CD                                                   /*공급업체코드*/
+		    , SC.SUPPLY_COMP_NM                                                   /*공급업체명*/
+		    , SC.DISTRIBUTION_GB                                                  /*유통구분*/
+		    , FN_GET_CODE_NM('G065',SC.DISTRIBUTION_GB) AS DISTRIBUTION_GB_NM     /*유통구분명*/
+		    , B.BRAND_CD                                                          /*브랜드코드*/
+		    , B.BRAND_ENM                                                         /*브랜드명*/
+			, IFNULL(EUP.USAC_PRICE, ODIH.ITEM_PRICE) AS USAC_PRICE
+			, EUP.REG_DT
+			, EUP.UPD_DT
+			, FN_GET_USER_NM(EUP.REG_NO) as REG_NM
+			, FN_GET_USER_NM(EUP.UPD_NO) as UPD_NM
 		FROM   TB_ORDER_DETAIL_ITEM_HST ODIH
-		        INNER JOIN TB_ORDER_DETAIL OD ON ODIH.ORD_DTL_NO = OD.ORD_DTL_NO
-		        INNER JOIN TB_ORDER O ON ODIH.ORD_NO = O.ORD_NO
-		        INNER JOIN TB_SUPPLY_COMPANY SC ON OD.SUPPLY_COMP_CD = SC.SUPPLY_COMP_CD
-		        INNER JOIN TB_GOODS G ON OD.GOODS_CD = G.GOODS_CD
-		        INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
-		        LEFT OUTER JOIN shoplinker_order SO on OD.AGENT_ORDER_ID = SO.SHOPLINKER_ORDER_ID 
-		        LEFT OUTER JOIN TB_EXTMALL E ON OD.EXTMALL_ID = E.EXTMALL_ID
-		        left outer join TB_EXTMALL_USAC_PRICE F on ODIH.ORD_DTL_ITEM_HST_SQ = F.ORD_DTL_ITEM_HST_SQ
-		      
-        WHERE  1 = 1
-        AND    O.MALL_GB = 'G011_20'
-        -- AND    ODIH.ITEM_PRICE != IFNULL(SO.USAC_PRICE, ODIH.ITEM_PRICE)
-        AND    ODIH.ORD_AMT != IFNULL(SO.ORDER_PRICE, ODIH.ORD_AMT)
-        AND    ODIH.ORD_DTL_STAT IN ('G720_20','G720_50','G720_60') /*판매-배송중,환입-반품완료,환입-교환완료*/
+			   INNER JOIN TB_ORDER_DETAIL OD ON ODIH.ORD_DTL_NO = OD.ORD_DTL_NO
+			   INNER JOIN TB_ORDER O ON ODIH.ORD_NO = O.ORD_NO
+			   INNER JOIN TB_SUPPLY_COMPANY SC ON OD.SUPPLY_COMP_CD = SC.SUPPLY_COMP_CD
+			   INNER JOIN TB_GOODS G ON OD.GOODS_CD = G.GOODS_CD
+			   INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
+			   LEFT OUTER JOIN TB_EXTMALL E ON OD.EXTMALL_ID = E.EXTMALL_ID
+			   LEFT OUTER JOIN TB_EXTMALL_USAC_PRICE EUP ON ODIH.ORD_DTL_ITEM_HST_SQ = EUP.ORD_DTL_ITEM_HST_SQ
+		WHERE O.MALL_GB = 'G011_20'
 
-		<include refid="getExtmallSettleCondition_sql"/>
+		<include refid="getExtmallUsacCondition_sql"/>
 
-		ORDER  BY ODIH.ORD_DTL_ITEM_HST_SQ 
+		ORDER  BY ODIH.ORD_DTL_ITEM_HST_SQ DESC
 		LIMIT #{pageable.limitStartRow} ,  #{pageable.pageSize}
 	</select>
 
 	<!-- 제휴몰정산가격업로드- 목록 엑셀 -->
-	<select id="getExtmallSettleExcelList" parameterType="ExtmallSettle" resultType="paramMap">
-		/* TsaOcm.getExtmallSettleExcelList */
-		SELECT
-			OD.ORD_NO
+	<select id="getExtmallUsacExcelList" parameterType="ExtmallUsac" resultType="paramMap">
+		/* TsaOcm.getExtmallUsacExcelList */
+		SELECT 
+			ODIH.ORD_DTL_ITEM_HST_SQ
+			, OD.ORD_NO 
 			, OD.ORD_DTL_NO
-			, (SELECT SHIP_COMP_NM FROM TB_SHIP_COMPANY S WHERE S.SHIP_COMP_CD = OD.SHIP_COMP_CD ) AS SHIP_COMP_NM
-			, OD.SHIP_COMP_CD AS DELIVERY_CODE-- 배송업체(택배사코드)
-			, OD.INVOICE_NO AS DELIVERY_INVOICE-- 송장번호
-
-			, OD.VENDOR_ID -- 외부몰벤더ID
-			, OD.EXTMALL_ID -- 외부몰ID(외부몰)
-			, OD.AGENT_ORDER_ID -- 에이전트주문번호
-			, OD.EXTMALL_ORDER_ID -- 외부몰주문번호
-			, OD.DELV_ASSIGN_STAT -- 출고지정상태(P:대기,Y:수락,N:거부)
-			, OD.ORD_EXCH_GB -- 주문교환구분(O:주문,E:교환)
-			, OD.ORD_DTL_STAT -- 주문상세상태(공통코드G013)
-			, FN_GET_CODE_NM('G013', OD.ORD_DTL_STAT) AS ORD_DTL_STAT_NM
-			, OD.DELV_STDT
-
-			, CASE WHEN 'true' = SL.API_RESULT THEN '전송완료'
-  		    	   WHEN 'false' = SL.API_RESULT THEN '전송실패'
-  		    	   WHEN 'error' = SL.API_RESULT THEN '오류'
-  		    	   ELSE IFNULL(SL.API_RESULT, '')
-			  END API_RESULT
-			, SL.API_MESSAGE
-			, SL.XML_TXT
-			, SL.REG_DT
-		FROM
-			TB_ORDER_DETAIL OD
-			LEFT OUTER JOIN SHOPLINKER_SYNC_HST SL ON OD.ORD_DTL_NO = SL.ORD_DTL_NO AND SL.API_TYPE = 'INVOICE'
-		WHERE OD.VENDOR_ID = 'G003_V001'
-		AND (OD.ORD_DTL_STAT = 'G013_50' OR SL.ORD_DTL_NO IS NOT NULL)
-		AND OD.INVOICE_NO IS NOT NULL
-		AND OD.DELV_STDT IS NOT NULL
-
-		<include refid="getExtmallSettleCondition_sql"/>
+			, OD.GOODS_CD
+			, G.GOODS_NM
+			, ODIH.OPT_CD
+			, ODIH.OPT_CD1
+			, ODIH.OPT_CD2
+			, ODIH.ITEM_QTY
+			, ODIH.ITEM_PRICE
+			, E.EXTMALL_ID                                                        /*제휴몰ID*/
+		    , E.EXTMALL_NM                                                        /*제휴몰명*/
+		    , SC.SUPPLY_COMP_CD                                                   /*공급업체코드*/
+		    , SC.SUPPLY_COMP_NM                                                   /*공급업체명*/
+		    , SC.DISTRIBUTION_GB                                                  /*유통구분*/
+		    , FN_GET_CODE_NM('G065',SC.DISTRIBUTION_GB) AS DISTRIBUTION_GB_NM     /*유통구분명*/
+		    , B.BRAND_CD                                                          /*브랜드코드*/
+		    , B.BRAND_ENM                                                         /*브랜드명*/
+			, IFNULL(EUP.USAC_PRICE, ODIH.ITEM_PRICE) AS USAC_PRICE
+			, EUP.REG_DT
+			, EUP.UPD_DT
+			, FN_GET_USER_NM(EUP.REG_NO) as REG_NM
+			, FN_GET_USER_NM(EUP.UPD_NO) as UPD_NM
+		FROM   TB_ORDER_DETAIL_ITEM_HST ODIH
+			   INNER JOIN TB_ORDER_DETAIL OD ON ODIH.ORD_DTL_NO = OD.ORD_DTL_NO
+			   INNER JOIN TB_ORDER O ON ODIH.ORD_NO = O.ORD_NO
+			   INNER JOIN TB_SUPPLY_COMPANY SC ON OD.SUPPLY_COMP_CD = SC.SUPPLY_COMP_CD
+			   INNER JOIN TB_GOODS G ON OD.GOODS_CD = G.GOODS_CD
+			   INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
+			   LEFT OUTER JOIN TB_EXTMALL E ON OD.EXTMALL_ID = E.EXTMALL_ID
+			   LEFT OUTER JOIN TB_EXTMALL_USAC_PRICE EUP ON ODIH.ORD_DTL_ITEM_HST_SQ = EUP.ORD_DTL_ITEM_HST_SQ
+		WHERE O.MALL_GB = 'G011_20'
+		
+		<include refid="getExtmallUsacCondition_sql"/>
 
-		ORDER BY OD.ORD_NO, OD.ORD_DTL_NO
+		ORDER  BY ODIH.ORD_DTL_ITEM_HST_SQ DESC
 
 	</select>
 
 	<!-- 상품 목록 조건 정보 -->
-	<sql id="getExtmallSettleCondition_sql">
-        
-			<if test="stDate != null and stDate != ''">
-	        AND    ODIH.REG_DT  >=  DATE_FORMAT(#{stDate}, '%Y-%m-%d %H:%i:%S')
-            </if>
-            <if test="edDate != null and edDate != ''">
-            <![CDATA[
-	        AND ODIH.REG_DT < DATE_FORMAT(DATE_ADD(#{edDate}, INTERVAL 1 DAY), '%Y-%m-%d %H:%i:%S')
-            ]]>
-            </if>
+	<sql id="getExtmallUsacCondition_sql">
+       		AND    ODIH.REG_DT <![CDATA[>=]]> STR_TO_DATE(#{salesStdt},'%Y-%m-%d')
+	   		AND    ODIH.REG_DT <![CDATA[<]]> DATE_ADD(STR_TO_DATE(#{salesEddt},'%Y-%m-%d'), INTERVAL 1 DAY)
 
 	        <if test='distributionGb != null and distributionGb != ""'>
 	        AND    SC.DISTRIBUTION_GB = #{distributionGb}
@@ -327,5 +304,44 @@
 	            #{item}
 	            </foreach>
 	        </if>
+	        
+	        <if test='usacYn != null and usacYn == "Y"'>
+	        AND EUP.USAC_PRICE IS NOT NULL
+	        </if>
+	        <if test='usacYn != null and usacYn == "N"'>
+	        AND EUP.USAC_PRICE IS NULL
+	        </if>
+	        <if test="conditionList != null and conditionList.length>0">
+	        AND OD.ORD_NO IN
+	            <foreach collection="conditionList" item="item" index="index"  open="(" close=")" separator=",">
+	       		UPPER(#{item})
+	            </foreach>
+	        </if>
 	</sql>
+	
+	<!-- 외부몰 등록/수정 -->
+	<insert id="createExtmallUsacExcelupload" parameterType="ExtmallUsac">
+		/* TsaOcm.createExtmallUsacExcelupload */
+		INSERT INTO TB_EXTMALL_USAC_PRICE (
+		     ORD_DTL_ITEM_HST_SQ
+			, USAC_PRICE
+			, REG_NO
+			, REG_DT
+			, UPD_NO
+			, UPD_DT
+		)
+		VALUES (
+		       #{ordDtlItemHstSq}
+		     , #{usacPrice}
+		     , #{regNo}
+		     , NOW()
+		     , #{updNo}
+		     , NOW()
+		)
+		ON DUPLICATE KEY UPDATE
+		       USAC_PRICE = #{usacPrice}
+		     , UPD_NO = #{updNo}
+		     , UPD_DT = NOW()
+	</insert>
+	
 </mapper>

+ 135 - 49
src/main/webapp/WEB-INF/views/ocm/ExtmallSettleRegisterForm.html → src/main/webapp/WEB-INF/views/ocm/ExtmallUsacRegisterForm.html

@@ -3,15 +3,15 @@
 	xmlns:th="http://www.thymeleaf.org">
 <!--
  *******************************************************************************
- * @source  : GoodsSettleForm.html
- * @desc    : 상품정산 Page
+ * @source  : ExtmallUsacRegisterForm.html
+ * @desc    : 제휴몰정산가격업로드 Page
  *============================================================================
  * STYLE24
  * Copyright(C) 2020 TSIT, All rights reserved.
  *============================================================================
  * VER  DATE         AUTHOR      DESCRIPTION
  * ===  ===========  ==========  =============================================
- * 1.0  2020.10.22   gagamel     최초 작성
+ * 1.0  2020.8.02    jmh         최초 작성
  *******************************************************************************
  -->
 	<div id="main">
@@ -25,29 +25,45 @@
 		</div>
 		<!-- //메뉴 설명 -->
 		
-		<form id="searchForm" name="searchForm" action="#" th:action="@{'/ocm/extmall/settle/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
+		<form id="searchForm" name="searchForm" action="#" th:action="@{'/ocm/extmall/usac/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
 			<!-- 검색조건 영역 -->
 			<div class="panelStyle">
+				<div class="panelTitle">
+					<h3><i class="fa fa-info-circle"></i>아래 검색조건 중 상품코드나 등록일을 꼭 입력해 주세요.</h3>
+					<span class="panelControl">
+						<i class="fa fa-chevron-up"></i>
+					</span>
+				</div>
+				
 				<table class="frmStyle" aria-describedby="검색조건">
 					<colgroup>
 						<col style="width:10%;"/>
 						<col/>
 						<col style="width:10%;"/>
-						<col style="width:15%;"/>
-						<col style="width:10%;"/>
-						<col style="width:15%;"/>
+						<col style="width:25%;"/>
+						<col style="width:8%;"/>
+						<col style="width:12%;"/>
 					</colgroup>
 					<tr>
 						<th>매출기간<i class="required" title="필수" aria-hidden="true"></i></th>
-						<td colspan="3" id="terms">
+						<td colspan="3" id="terms"></td>
+						<th rowspan="3">주문번호</th>
+						<td rowspan="3">
+							<!-- <select name="search" id="search">
+								<option value="ordNo">스타일24주문번호</option>
+								<option value="shoplinkerOrderId">샵링커주문번호</option>
+								<option value="mallOrderId">쇼핑몰주문번호</option>
+							</select><br> -->
+							<textarea class="textareaR3 w90p" name="condition" id="condition"></textarea>
 						</td>
-						<th>유통구분</th>
+						<!-- <th>정산등록여부</th>
 						<td>
-							<select name="distributionGb">
+							<select name="usacYn" id="usacYn">
 								<option value="">[전체]</option>
-								<option th:if="${distributionGbList}" th:each="oneData, status : ${distributionGbList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+								<option value="Y">Y</option>
+								<option value="N">N</option>
 							</select>
-						</td>
+						</td> -->
 					</tr>
 					<tr>
 						<th>벤더/제휴몰</th>
@@ -60,12 +76,17 @@
 								<option th:if="${extmallList}" th:each="oneData, status : ${extmallList}" th:value="${oneData.extmallId}" th:text="${'[' + oneData.extmallId + '] ' + oneData.extmallNm}"></option>
 							</select>
 						</td>
+						<th>유통구분</th>
+						<td>
+							<select name="distributionGb">
+								<option value="">[전체]</option>
+								<option th:if="${distributionGbList}" th:each="oneData, status : ${distributionGbList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+							</select>
+						</td>						
+					</tr>
+					<tr>
 						<th>공급업체</th>
 						<td>
-<!-- 							<select name="supplyCompCd"> -->
-<!-- 								<option value="">[전체]</option> -->
-<!-- 								<option th:if="${supplyCompList}" th:each="oneData, status : ${supplyCompList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option> -->
-<!-- 							</select> -->
 							<input type="text" class="w100" name="supplyCompSearchTxt" id="supplyCompSearchTxt" maxlength="20"/>
 							<button type="button" class="btn icn" onclick="cfnOpenCompanyListPopup('fnSetSupplyCompInfo', 'M');"><i class="fa fa-search"></i></button>
 							<span id="supplyCompTxt"></span>
@@ -73,15 +94,12 @@
 						</td>
 						<th>브랜드</th>
 						<td>
-<!-- 							<select name="brandCd"> -->
-<!-- 								<option value="">[전체]</option> -->
-<!-- 							</select> -->
 							<input type="text" class="w100" name="brandSearchTxt" id="brandSearchTxt" maxlength="20" />
 							<button type="button" class="btn icn" onclick="cfnOpenBrandListPopup('fnSetBrandInfo', 'M');"><i class="fa fa-search"></i></button>
 							<!-- <input type="text" class="w100" name="brandCd" readonly="readonly"/> -->
 							<span id="brandTxt"></span>
 							<input type="hidden" name="brandList"/>
-						</td>
+						</td>						
 					</tr>
 				</table>
 				
@@ -89,9 +107,10 @@
 					<li class="center">
 						<button type="button" class="btn btn-base btn-lg" id="btnSearch">조회</button>
 						<button type="button" class="btn btn-gray btn-lg" id="btnInit">초기화</button>
+						<button type="button" class="btn btn-primary btn-lg" id="btnUsacUpload">엑셀업로드</button>
 					</li>
 				</ul>
-			
+				<!-- <p class="dot">엑셀업로드시 <font color="red">엑셀다운로드</font> 받은 후 <font color="red">정산가</font> 부분만 작성 또는 수정 후 업로드해주세요.</p> -->
 			</div>
 			<!-- 검색조건 영역 -->
 	
@@ -99,6 +118,7 @@
 			<div class="panelStyle">
 				<ul class="panelBar">
 					<li>
+						<button type="button" class="btn btn-default btn-lg" onclick="cfnDownloadSampleFile('SF024');">엑셀업로드 양식 다운로드</button>
 						<button type="button" class="btn btn-default btn-lg" onclick="fnExcelDownLoad();">엑셀다운로드</button>
 					</li>
 					<li class="right">
@@ -123,7 +143,8 @@
 				</ul>
 			</div>
 			<!-- //리스트 영역 -->
-		
+			
+			<a href="javascript:void(0);" id="ExcelList" style="display: none;">엑셀다운로드</a>
 		</form>
 	</div>
 
@@ -136,23 +157,42 @@
 	let distributionGbList = gagajf.convertToArray([[${distributionGbList}]]);
 
 	let columnDefs = [
-		{ headerName: "단품이력일련번호", field: "ordDtlItemHstSq", width: 150, cellClass: 'text-center' },
+		{ headerName: "단품이력일련번호", field: "ordDtlItemHstSq", width: 125, cellClass: 'text-center' },
 		{ headerName: "주문번호", field: "ordNo", width: 100, cellClass: 'text-center' },
 		{ headerName: "주문상세번호", field: "ordDtlNo", width: 100, cellClass: 'text-center' },
-		{ headerName: "단품코드", field: "itemCd", width: 100, cellClass: 'text-center' },
 		{ headerName: "상품코드", field: "goodsCd", width: 120, cellClass: 'text-center' },
-		{ headerName: "상품명", field: "goodsNm", width: 250 },
+		{ headerName: "상품명", field: "goodsNm", width: 200 },
 		{ headerName: "옵션코드", field: "optCd", width: 100, cellClass: 'text-center' },
 		{ headerName: "옵션1", field: "optCd1", width: 100, cellClass: 'text-center' },
 		{ headerName: "옵션2", field: "optCd2", width: 100, cellClass: 'text-center' },
 		{ headerName: "단품수량", field: "itemQty", width: 100, cellClass: 'text-center' },
-		{ headerName: "단품단가", field: "itemPrice", width: 100, cellClass: 'text-center' },
-		{ headerName: "정산가", field: "usacPrice", width: 100, cellClass: 'text-center' },
+		{ headerName: "단품단가", 			field: "itemPrice",				width: 100, cellClass: 'text-center'
+			,valueFormatter: function(params) {return params.value.addComma();},
+			cellEditor: 'textCellEditor',
+			cellEditorParams: { maxlength: 14, validType: 'numeric'}
+		},
+		{ headerName: "단품단가", 			field: "itemPrice",				width: 100, cellClass: 'text-center'
+			,valueFormatter: function(params) {return params.value.addComma();},
+			cellEditor: 'textCellEditor',
+			cellEditorParams: { maxlength: 14, validType: 'numeric'}
+		},
+		{ headerName: "정산가", 			field: "usacPrice",				width: 100, cellClass: 'text-center'
+			,valueFormatter: function(params) {return params.value.addComma();},
+			cellEditor: 'textCellEditor',
+			cellEditorParams: { maxlength: 14, validType: 'numeric'},
+			cellStyle : function(params){
+				return { 'background-color': '#ff96689c'};
+			} 
+		},
 		
-		{headerName: "등록자", field: "regNm", width: 100, cellClass: 'text-center'},
-		{headerName: "등록일", field: "regDt", width: 100, cellClass: 'text-center'},
-		{headerName: "수정자", field: "updNm", width: 100, cellClass: 'text-center'},
-		{headerName: "수정자", field: "updDt", width: 100, cellClass: 'text-center'},
+		{ headerName: "제휴몰명", field: "extmallNm", width: 100, cellClass: 'text-center' },
+		{ headerName: "공급업체명", field: "supplyCompNm", width: 100, cellClass: 'text-center' },
+		{ headerName: "브랜드명", field: "brandEnm", width: 100, cellClass: 'text-center' },
+		{ headerName: "유통구분명", field: "distributionGbNm", width: 100, cellClass: 'text-center' },
+		{ headerName: "등록자", field: "regNm", width: 100, cellClass: 'text-center'},
+		{ headerName: "등록일", field: "regDt", width: 100, cellClass: 'text-center'},
+		{ headerName: "수정자", field: "updNm", width: 100, cellClass: 'text-center'},
+		{ headerName: "수정일", field: "updDt", width: 100, cellClass: 'text-center'},
 	];
 
 	let gridOptions = gagaAgGrid.getGridOptions(columnDefs);
@@ -222,14 +262,6 @@
 		$("#searchForm input[name=brandList]").val(jsonData);
 	}
 	
-	// 검색
-	/*$('#btnSearch').on('click', function() {
-		// 입력 값 체크
-		if (!gagajf.validation($('#searchForm')))
-			return false;
-		
-		gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm');
-	}); */
 	
 	//페이징
 	$('#searchForm select[name=pageSize]').on('change', function() {
@@ -263,7 +295,7 @@
 		var cnt = 0;
 
 		if( !gagajf.isNull($("#searchForm textarea[name=condition]").val())
-				|| (!gagajf.isNull($("#searchForm input[name=stDate]").val()) && !gagajf.isNull($("#searchForm input[name=edDate]").val()))
+				|| (!gagajf.isNull($("#searchForm input[name=salesStdt]").val()) && !gagajf.isNull($("#searchForm input[name=salesEddt]").val()))
 			){
 			searchFlag = true;
 		}else{
@@ -275,8 +307,8 @@
 			return false;
 		}
 
-		var fromDate = $('#searchForm input[name=stDate]').val();
-		var toDate = $('#searchForm input[name=edDate]').val();
+		var fromDate = $('#searchForm input[name=salesStdt]').val();
+		var toDate = $('#searchForm input[name=salesEddt]').val();
 
 		if (!gagajf.isNull(fromDate) || !gagajf.isNull(toDate)) {
 
@@ -284,7 +316,7 @@
 				mcxDialog.alertC("등록일 조회시 시작일자와 종료일자를 입력하세요.", {
 					sureBtnText: "확인",
 					sureBtnClick: function() {
-						$('#searchForm input[name=stDate]').focus();
+						$('#searchForm input[name=salesStdt]').focus();
 					}
 				});
 				return false;
@@ -294,7 +326,7 @@
 				mcxDialog.alertC("등록 시작일자는 종료일자 보다 클 수 없습니다.", {
 					sureBtnText: "확인",
 					sureBtnClick: function() {
-						$('#searchForm input[name=stDate]').focus();
+						$('#searchForm input[name=salesStdt]').focus();
 					}
 				});
 				return false;
@@ -315,22 +347,76 @@
 	}
 	/**************** 검색 // *****************************************************/
 	
-	// 초기화 클릭시
+	/**************** 초기화 클릭시 *****************************************************/
 	$('#btnInit').on('click', function() {
+
+		$('#searchForm')[0].reset();
+		$("#multiBrand").empty();
+		$('#searchForm input[name=brandList]').val('');
+		$('#searchForm input[name=supplyCompList]').val('');
+		$('#searchForm').find('#brandText').html('');
+		$('#searchForm').find('#supplyCompTxt').html(''); //$('#supplyCompTxt').html('');
+	});
+	/**************** 초기화 클릭시 // *****************************************************/
+
+	/**************** 엑셀업로드 ********************************************************/
+	$('#btnUsacUpload').on('click', function() {
+
+		cfnExcelUploadPopup('createExtmallUsac', 'createExtmallUsac');
+	});
+
+	var createExtmallUsac = function(result){
+		
+		var data = {procJob : result.procJob
+				,excelFileNm : result.excelFileNm
+				};
+		var jsonData = JSON.stringify(data);
+		gagajf.ajaxJsonSubmit('/ocm/extmall/usac/excelupload/save', jsonData, fnExtmallUsacCreateCallBack);
+	}
+	
+	var fnExtmallUsacCreateCallBack = function(result){
+		$("#searchForm input[name=pageNo]").val('1');
+		fnGoodsListSearch();
+	}
+	
+	/**************** 엑셀업로드 // *****************************************************/
+
+	/**************** 엑셀다운로드 *****************************************************/
+	var fnExcelDownLoad = function(){
+		var formId = '#searchForm';
+		if (gridOptions.api.getDisplayedRowCount() <= 0){
+			mcxDialog.alert("조회된 데이터가 없습니다.<br/>다시 조회 후 다운로드 받으세요.");
+			return;
+		}
+		/*
+		var fromDate = parseInt($('#searchForm input[name=salesStdt]').val().replaceAll("-", ""));
+		var toDate =parseInt($('#searchForm input[name=salesEddt]').val().replaceAll("-", ""));
+		if( 4 < (toDate - fromDate)){
+			mcxDialog.alert("3일 이내의 기간으로 설정 후 다운로드해주세요.");
+			return;
+		}*/
+
+		var params =  $(formId).serialize();
+		$('#ExcelList').attr({ href : '/ocm/extmall/usac/excel/list?' + params }).get(0).click();
+	}
+	/**************** 엑셀다운로드 // *****************************************************/
+	
+	// 초기화 클릭시
+	/* $('#btnInit').on('click', function() {
 		$('#searchForm')[0].reset();
 		$('#searchForm input[name=brandList]').val('');
 		$('#searchForm input[name=supplyCompList]').val('');
 		$('#brandTxt').html('');
 		$('#supplyCompTxt').html('');
-	});
+	}); */
 	
 	// 엑셀다운로드
-	$('#btnExcel').on('click', function() {
+	/* $('#btnExcel').on('click', function() {
 		gagaAgGrid.exportToExcel('상품정산 목록', gridOptions);
-	});
+	}); */
 	
 	$(document).ready(function() {
-		cfnCreateCalendar('#terms', 'stDate', 'edDate', true, '매출');
+		cfnCreateCalendar('#terms', 'salesStdt', 'salesEddt', true, '매출');
 		$('.btnToday').trigger('click');
 		
 		//$('#extmallVendor').hide();