فهرست منبع

Merge branch 'develop' of http://112.172.147.34:4936/style24/STYLE24.git into develop

gagamel 5 سال پیش
والد
کامیت
6190bd9cb0

+ 19 - 0
pom.xml

@@ -121,6 +121,25 @@
 			<artifactId>commons-pool2</artifactId>
 		</dependency>
 		<!-- \\\ Redis -->
+		
+		<!-- /// Excel POI -->
+		<dependency>
+			<groupId>org.apache.poi</groupId>
+			<artifactId>poi</artifactId>
+			<version>3.17</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.poi</groupId>
+			<artifactId>poi-ooxml</artifactId>
+			<version>3.17</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.poi</groupId>
+			<artifactId>poi-ooxml-schemas</artifactId>
+			<version>3.17</version>
+		</dependency>
+		<!-- \\\ Excel POI -->
+		
 	</dependencies>
 
 	<build>

+ 12 - 0
style24.admin/src/main/java/com/style24/admin/biz/dao/TsaGoodsDao.java

@@ -9,6 +9,8 @@ import com.style24.persistence.domain.GoodsSearch;
 import com.style24.persistence.domain.Itemkind;
 import com.style24.persistence.domain.NotiInfo;
 
+import com.gagaframework.web.parameter.GagaMap;
+
 /**
  * 상품관리 Dao
  *
@@ -107,4 +109,14 @@ public interface TsaGoodsDao {
 	 */
 	Collection<Goods> getGoodsList(GoodsSearch goodsSearch);
 
+	/**
+	 * 상품 목록 기본정보 엑셀다운로드
+	 *
+	 * @param goodsSearch
+	 * @return
+	 * @author eskim
+	 * @since 2020. 10. 22
+	 */
+	Collection<GagaMap> getGoodsInfoExcelList(GoodsSearch goodsSearch);
+
 }

+ 3 - 3
style24.admin/src/main/java/com/style24/admin/biz/dao/TsaRendererDao.java

@@ -212,13 +212,13 @@ public interface TsaRendererDao {
 //	Collection<CommonCode> getAflinkList(String afChannel);
 
 	/**
-	 * 코드설명 목록
+	 * 색상그룹코드 RGB 목록
 	 *
-	 * @param cdGb - 공통코드 정보
+	 * @param
 	 * @return 코드설명 목록
 	 * @author eskim
 	 * @since 2020. 10. 16
 	 */
-	Collection<CommonCode> getCommonCodeDescList(String cdGb);
+	Collection<CommonCode> getColorGrpCdRgbList();
 
 }

+ 76 - 81
style24.admin/src/main/java/com/style24/admin/biz/service/TsaGoodsService.java

@@ -9,6 +9,7 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.StringUtils;
 
 import com.style24.admin.biz.dao.TsaGoodsDao;
+import com.style24.admin.support.env.TsaConstants;
 import com.style24.admin.support.security.session.TsaSession;
 import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.persistence.domain.Color;
@@ -19,6 +20,9 @@ import com.style24.persistence.domain.NotiInfo;
 
 import lombok.extern.slf4j.Slf4j;
 
+import com.gagaframework.excel.GagaExcelUtil;
+import com.gagaframework.excel.env.GagaExcelConstants;
+import com.gagaframework.web.parameter.GagaMap;
 import com.gagaframework.web.util.GagaStringUtil;
 
 /**
@@ -196,89 +200,80 @@ public class TsaGoodsService {
 	 * @since 2020. 10. 21
 	 */
 	public void getGoodsInfoExcelList(GoodsSearch goodsSearch, String excelFilenameWithPath) {
+		log.info("getGoodsInfoExcelList goodsSearch ={}", goodsSearch);
+		if ("Y".equals(goodsSearch.getImageViewYn())) {
+			// 헤더 title 설정
+			String[] listTitles = {"이미지", "상품코드", "업체명", "브랜드명", "상품명", "품목", "재고", "상품상태", "스타일년도", "시즌",
+				"정상가", "판매가", "할인율", "가격변경일", "ERP재고연동여부", "정상이월구분", "반품가능 여부","승인일시"};
 
-//		if ("Y".equals(goodsSearch.getImageViewYn())) {
-//			// 헤더 title 설정
-//			String[] listTitles = {"이미지", "상품코드", "업체명", "브랜드명", "상품명", "품목", "판매가능재고", "상품상태", "스타일년도", "시즌",
-//				"정상가", "판매가", "임직원가", "할인율", "가격변경일", "ERP재고연동여부",
-//				"정상이월구분", "승인일시", "EC전송일시"};
-//
-//			// DB 처리 시 사용되는 파라미터명(셀명) 설정
-//			String[] cellNames = {"IMG_PATH1", "GOODS_CD", "SUPPLY_COMP_CD", "BRAND_GRP_NM", "GOODS_NM", "ITEMKIND_NM",
-//				"STOCK_QTY_SUM", "GOODS_STAT", "STYLE_YEAR", "SEASON_CD",  "LIST_PRICE", "CURR_PRICE",
-//				"STAFF_CURR_PRICE", "DC_RATE", "PRICE_UPD_DT", "ERP_STOCK_LINK_YN",
-//				 "FORMAL_GB", "APPR_UPD_DT", "ECMONITOR_REG_DT"};
-//
-//			String[] cellTypes = {GagaExcelConstants.CellType.IMAGE.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_RIGHT.name(),
-//				GagaExcelConstants.CellType.CHAR_CENTER.name(), GagaExcelConstants.CellType.CHAR_CENTER.name(),
-//				GagaExcelConstants.CellType.CHAR_CENTER.name(), GagaExcelConstants.CellType.CHAR_RIGHT.name(),
-//				GagaExcelConstants.CellType.CHAR_RIGHT.name(),
-//				GagaExcelConstants.CellType.CHAR_RIGHT.name(), GagaExcelConstants.CellType.CHAR_RIGHT.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()};
-//
-//			String targetPath = env.getProperty("upload.goods.view");
-//			Collection<GagaMap> dataList = goodsDao.getGoodsInfoExcelList(goodsSearch); // map형식으로 조회
-//			if (dataList != null && !dataList.isEmpty()) {
-//				for (GagaMap gagaMap : dataList) {
-//					if ("A".equals(gagaMap.get("IMG_TYPE").toString())) {
-//						if (!StringUtils.isEmpty(gagaMap.get("IMG_PATH6"))) {
-//							gagaMap.set("IMG_PATH1", targetPath + gagaMap.get("IMG_PATH6").toString().replace("/1000/", "/100/"));
-//
-//						} else {
-//							gagaMap.set("IMG_PATH1", targetPath + gagaMap.get("IMG_PATH1").toString().replace("/1000/", "/100/"));
-//						}
-//						gagaMap.set("IMG_PATH1", gagaMap.get("IMG_PATH1").toString());
-//					} else {
-//
-//					}
-//				}
-//			}
-//
-//			try {
-//				GagaExcelUtil.createExcel(excelFilenameWithPath, dataList, "상품 정보", listTitles, cellNames, cellTypes, TsaConstants.EXCEL_FOOTER_TITLE);
-//			} catch (Exception e) {
-//				throw new IllegalStateException(e);
-//			}
-//
-//		} else {
-//			// 헤더 title 설정
-//			String[] listTitles = {"상품코드", "업체명", "브랜드명", "상품명", "품목", "재고", "상품상태", "스타일년도", "시즌",  "정상가",
-//				"판매가", "할인율", "가격변경일", "ERP재고연동여부", "정상이월구분", "반품가능 여부", "교환가능 여부", "무료반품가능 여부",
-//				"무료교환 여부", "이미지 여부"};
-//
-//			// DB 처리 시 사용되는 파라미터명(셀명) 설정
-//			String[] cellNames = {"GOODS_CD", "SUPPLY_COMP_CD", "BRAND_ENM", "GOODS_NM", "ITEMKIND_NM",
-//				"STOCK_QTY_SUM", "GOODS_STAT", "STYLEyEAR", "SEASON_CD",  "LIST_PRICE", "CURR_PRICE",
-//				"DC_RATE", "PRICE_UPD_DT", "ERP_STOCK_LINK_YN", "ERP_PRICE_LINK_YN", "FORMAL_GB", "RETURNABLE_YN",
-//				"CHANGEABLE_YN", "RETURN_FEE_FREE_YN", "CHANGE_FEE_FREE_YN", "GOODS_IMAGE_YN"};
-//
-//			String[] cellTypes = {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_RIGHT.name(), GagaExcelConstants.CellType.CHAR_CENTER.name(),
-//				GagaExcelConstants.CellType.CHAR_CENTER.name(), GagaExcelConstants.CellType.CHAR_CENTER.name(),
-//				GagaExcelConstants.CellType.CHAR_RIGHT.name(),
-//				GagaExcelConstants.CellType.CHAR_RIGHT.name(), GagaExcelConstants.CellType.CHAR_RIGHT.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()};
-//
-//			Collection<GagaMap> dataList = goodsDao.getGoodsInfoExcelList(goodsSearch);
-//
-//			try {
-//				GagaExcelUtil.createExcel(excelFilenameWithPath, dataList, "상품 정보", listTitles, cellNames, cellTypes, TsaConstants.EXCEL_FOOTER_TITLE);
-//			} catch (Exception e) {
-//				throw new IllegalStateException(e);
-//			}
-//		}
+			// DB 처리 시 사용되는 파라미터명(셀명) 설정
+			String[] cellNames = {"IMG_PATH1", "GOODS_CD", "SUPPLY_COMP_CD", "BRAND_GRP_NM", "GOODS_NM", "ITEMKIND_NM",
+				"STOCK_QTY_SUM", "GOODS_STAT", "STYLE_YEAR", "SEASON_CD",  "LIST_PRICE", "CURR_PRICE",
+				"DC_RATE", "PRICE_UPD_DT", "ERP_STOCK_LINK_YN", "FORMAL_GB", "RETURNABLE_YN", "FRST_CFRM_DT"};
 
+			String[] cellTypes = {GagaExcelConstants.CellType.IMAGE.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_RIGHT.name(),
+				GagaExcelConstants.CellType.CHAR_CENTER.name(), GagaExcelConstants.CellType.CHAR_CENTER.name(),
+				GagaExcelConstants.CellType.CHAR_CENTER.name(), GagaExcelConstants.CellType.CHAR_RIGHT.name(),
+				GagaExcelConstants.CellType.CHAR_RIGHT.name(), GagaExcelConstants.CellType.CHAR_RIGHT.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()};
+
+			String targetPath = env.getProperty("upload.goods.view");
+			Collection<GagaMap> dataList = goodsDao.getGoodsInfoExcelList(goodsSearch); // map형식으로 조회
+			if (dataList != null && !dataList.isEmpty()) {
+				for (GagaMap gagaMap : dataList) {
+					if ("A".equals(gagaMap.get("IMG_TYPE").toString())) {
+						gagaMap.set("IMG_PATH1", gagaMap.get("IMG_PATH1").toString());
+					} else {
+
+						if (!StringUtils.isEmpty(gagaMap.get("IMG_PATH6"))) {
+							gagaMap.set("IMG_PATH1", targetPath + gagaMap.get("IMG_PATH6").toString().replace("/1000/", "/100/"));
+
+						} else {
+							gagaMap.set("IMG_PATH1", targetPath + gagaMap.get("IMG_PATH1").toString().replace("/1000/", "/100/"));
+						}
+					}
+				}
+			}
+
+			try {
+				GagaExcelUtil.createExcel(excelFilenameWithPath, dataList, "상품 정보", listTitles, cellNames, cellTypes, TsaConstants.EXCEL_FOOTER_TITLE);
+			} catch (Exception e) {
+				throw new IllegalStateException(e);
+			}
+
+		} else {
+			// 헤더 title 설정
+			String[] listTitles = {"상품코드", "업체명", "브랜드명", "상품명", "품목", "재고", "상품상태", "스타일년도",
+				"시즌",  "정상가", "판매가", "할인율", "가격변경일", "ERP재고연동여부", "정상이월구분", "반품가능 여부", "승인일시"};
+
+			// DB 처리 시 사용되는 파라미터명(셀명) 설정
+			String[] cellNames = {"GOODS_CD", "SUPPLY_COMP_CD", "BRAND_GRP_NM", "GOODS_NM", "ITEMKIND_NM", "STOCK_QTY_SUM", "GOODS_STAT", "STYLE_YEAR",
+				"SEASON_CD",  "LIST_PRICE", "CURR_PRICE", "DC_RATE", "PRICE_UPD_DT", "ERP_STOCK_LINK_YN", "FORMAL_GB", "RETURNABLE_YN", "FRST_CFRM_DT"};
+
+			String[] cellTypes = {
+			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_RIGHT.name(),
+			GagaExcelConstants.CellType.CHAR_CENTER.name(), GagaExcelConstants.CellType.CHAR_CENTER.name(),
+			GagaExcelConstants.CellType.CHAR_CENTER.name(), GagaExcelConstants.CellType.CHAR_RIGHT.name(),
+			GagaExcelConstants.CellType.CHAR_RIGHT.name(), GagaExcelConstants.CellType.CHAR_RIGHT.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()};
+
+			Collection<GagaMap> dataList = goodsDao.getGoodsInfoExcelList(goodsSearch);
+
+			try {
+				GagaExcelUtil.createExcel(excelFilenameWithPath, dataList, "상품 정보", listTitles, cellNames, cellTypes, TsaConstants.EXCEL_FOOTER_TITLE);
+			} catch (Exception e) {
+				throw new IllegalStateException(e);
+			}
+		}
 	}
 
 }

+ 4 - 4
style24.admin/src/main/java/com/style24/admin/biz/service/TsaRendererService.java

@@ -496,15 +496,15 @@ public class TsaRendererService {
 //	}
 
 	/**
-	 * 코드설명 목록
+	 * 색상그룹코드 RGB 목록
 	 *
-	 * @param cdGb - 공통코드
+	 * @param
 	 * @return
 	 * @author eskim
 	 * @since 2020. 10. 16
 	 */
-	public Collection<CommonCode> getCommonCodeDescList(String cdGb) {
-		return rendererDao.getCommonCodeDescList(cdGb);
+	public Collection<CommonCode> getColorGrpCdRgbList() {
+		return rendererDao.getColorGrpCdRgbList();
 	}
 
 }

+ 5 - 4
style24.admin/src/main/java/com/style24/admin/biz/web/TsaGoodsController.java

@@ -131,7 +131,7 @@ public class TsaGoodsController extends TsaBaseController {
 		ModelAndView mav = new ModelAndView();
 
 		// 대표컬러목록
-		mav.addObject("groupColorCodeList", rendererService.getCommonCodeDescList("G072"));
+		mav.addObject("groupColorCodeList", rendererService.getColorGrpCdRgbList());
 		// 대표컬러명목록
 		mav.addObject("groupColorCodeNmList", rendererService.getCommonCodeList("G072"));
 
@@ -304,11 +304,11 @@ public class TsaGoodsController extends TsaBaseController {
 	@PostMapping("/list")
 	@ResponseBody
 	public GagaMap getGoodsList(@RequestBody GoodsSearch goodsSearch) {
-		log.info("[getGoodsList] goodsSearch=>{}", goodsSearch);
+		//log.info("[getGoodsList] goodsSearch=>{}", goodsSearch);
 		GagaMap result = new GagaMap();
 
 		// 입점업체담당자는 업체코드 설정
-		if ("B000".equals(TsaSession.getInfo().getRoleCd())) {
+		if ("G001_B000".equals(TsaSession.getInfo().getRoleCd())) {
 			goodsSearch.setSupplyCompCd(TsaSession.getInfo().getSupplyCompCd());
 			goodsSearch.setMdId(TsaSession.getInfo().getUserId());
 		}
@@ -348,7 +348,7 @@ public class TsaGoodsController extends TsaBaseController {
 		String excelFilenameWithPath = GagaFileUtil.getConcatenationPath(env.getProperty("download.path"), "excel", excelfileName);
 
 		// 입점업체담당자는 업체코드 설정
-		if ("B000".equals(TsaSession.getInfo().getRoleCd())) {
+		if ("G001_B000".equals(TsaSession.getInfo().getRoleCd())) {
 			goodsSearch.setSupplyCompCd(TsaSession.getInfo().getSupplyCompCd());
 			goodsSearch.setMdId(TsaSession.getInfo().getUserId());
 		}
@@ -370,6 +370,7 @@ public class TsaGoodsController extends TsaBaseController {
 
 		return GagaFileUtil.writeFile(request, excelFilenameWithPath);
 	}
+
 	/**
 	 * 상품 대량 등록 화면
 	 *

+ 94 - 0
style24.admin/src/main/java/com/style24/persistence/mybatis/shop/TsaGoods.xml

@@ -580,4 +580,98 @@
 		</choose>
 	</sql>
 	
+	<!-- 상품 목록 기본정보 엑셀  -->
+	<select id="getGoodsInfoExcelList" parameterType="GoodsSearch" resultType="paramMap">
+		/* TsaGoods.getGoodsInfoExcelList */
+		SELECT G.GOODS_CD
+		     , B.BRAND_ENM
+		     , B.BRAND_GRP_NM
+		     , G.BRAND_CD
+		     , G.ITEMKIND_CD
+		     , (SELECT SUPPLY_COMP_NM FROM TB_SUPPLY_COMPANY WHERE SUPPLY_COMP_CD = G.SUPPLY_COMP_CD) AS SUPPLY_COMP_CD
+		     , G.SUPPLY_GOODS_CD
+		     , G.GOODS_NUM
+		     , G.GOODS_NM
+		     , G.GOODS_TYPE
+		     , FN_GET_CODE_NM('G008', G.GOODS_STAT) AS GOODS_STAT
+		     , G.LIST_PRICE
+		     , G.CURR_PRICE
+		     , G.DC_RATE
+		     , G.SELF_GOODS_YN
+		     , FN_GET_CODE_NM('G009', G.FORMAL_GB) AS FORMAL_GB
+		     , G.STYLE_YEAR
+		     , FN_GET_CODE_NM('G006', G.SEASON_CD) AS SEASON_CD
+		     , G.ERP_STOCK_LINK_YN
+		     , G.CHANGEABLE_YN
+		     , G.RETURNABLE_YN
+		     , G.SELL_FEE_RATE
+		     , DATE_FORMAT(G.PRICE_UPD_DT, '%Y-%m-%d %H:%i:%S') AS PRICE_UPD_DT
+		     , DATE_FORMAT(G.FRST_CFRM_DT, '%Y-%m-%d %H:%i:%S') AS FRST_CFRM_DT
+		     , CASE WHEN IMG_PATH1 IS NULL THEN
+		           'N'
+		       ELSE
+		           'Y'
+		       END AS GOODS_IMAGE_YN
+		     /*, (CASE WHEN G.GOODS_TYPE = 'N' THEN (SELECT NVL(SUM(CURR_STOCK_QTY - BASE_STOCK_QTY),0) FROM VW_STOCK WHERE GOODS_CD = G.GOODS_CD) 
+		             ELSE (SELECT NVL(SUM(CURR_STOCK_QTY - BASE_STOCK_QTY),0) FROM VW_STOCK_EXTEND WHERE GOODS_CD = G.GOODS_CD) 
+		             END) AS STOCK_QTY_SUM*/
+		     , (SELECT ITEMKIND_NM FROM TB_ITEMKIND WHERE ITEMKIND_CD = G.ITEMKIND_CD) AS ITEMKIND_NM
+		     , GI.IMG_PATH1
+		     , GI.IMG_PATH6
+		     , GI.IMG_TYPE
+		     , G.REG_NO
+		     , DATE_FORMAT(G.REG_DT, '%Y-%m-%d %H:%i:%S') AS REG_DT
+		     , G.UPD_NO
+		     , DATE_FORMAT(G.UPD_DT, '%Y-%m-%d %H:%i:%S') AS UPD_DT
+		FROM TB_GOODS G
+		INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
+		INNER JOIN TB_SUPPLY_COMPANY S ON G.SUPPLY_COMP_CD = S.SUPPLY_COMP_CD
+		INNER JOIN TB_GOODS_SUMMARY GS ON G.GOODS_CD = GS.GOODS_CD
+		<if test="searchGb != null and searchGb =='EXTEND'">
+		INNER JOIN TB_GOODS_EXTEND GE ON G.GOODS_CD =  GE.EXTEND_GOODS_CD
+		                              AND GE.GOODS_CD IN
+		    <foreach collection="conditionList" item="item" index="index"  open="(" close=")" separator=",">
+		                              UPPER(#{item})
+		    </foreach>
+		</if>
+		<if test="searchGb != null and searchGb =='MASTER'">
+		INNER JOIN TB_GOODS_EXTEND GE ON G.GOODS_CD =  GE.GOODS_CD
+		                              AND GE.EXTEND_GOODS_CD IN
+		    <foreach collection="conditionList" item="item" index="index"  open="(" close=")" separator=",">
+		                          UPPER(#{item})
+		    </foreach>
+		</if>
+		<if test="searchGb != null and searchGb =='EXCEL'">
+		INNER JOIN (
+		             SELECT SEARCH_CD
+		                  , TMP_DISP_ORD
+		             FROM (
+		                   SELECT SEARCH_CD
+		                        , MIN(DISP_ORD) AS TMP_DISP_ORD
+		                   FROM TB_SEARCH_DATA
+		                   WHERE REG_NO = #{regId}
+		                   GROUP BY SEARCH_CD) T
+		          ) SD
+		           ON ( (G.GOODS_CD LIKE CONCAT(SD.SEARCH_CD,'%')
+		                 OR G.SUPPLY_GOODS_CD LIKE CONCAT(SD.SEARCH_CD,'%')) 
+		                <if test="mdId != null and mdId != ''">
+		                AND G.BRAND_CD IN (
+		                                   SELECT DISTINCT BRAND_CD
+		                                   FROM TB_BRAND_MD
+		                                   WHERE MD_ID = #{mdId}
+		                                  )
+		               </if>
+		              )
+		</if>
+		LEFT OUTER JOIN TB_GOODS_IMG GI ON G.GOODS_CD = GI.GOODS_CD
+		WHERE 1=1
+		<if test="searchGb == null or searchGb =='BASIC' or searchGb =='EXTEND' or searchGb =='MASTER'" >
+		<include refid="getGoodsListContion_sql"/>
+		ORDER BY G.REG_DT DESC
+		</if>
+		<if test="searchGb == null or searchGb =='EXCEL'">
+		ORDER BY GS.TMP_DISP_ORD
+		</if>
+	</select>
+	
 </mapper>

+ 4 - 4
style24.admin/src/main/java/com/style24/persistence/mybatis/shop/TsaRenderer.xml

@@ -351,14 +351,14 @@
 		AND    USE_YN = 'Y'
 	</select>
 	
-	<!-- 코드설명 목록 -->
-	<select id="getCommonCodeDescList" parameterType="String" resultType="CommonCode">
-		/* TsaRenderer.getCommonCodeDescList */
+	<!-- 색상그룹코드 RGB 목록 -->
+	<select id="getColorGrpCdRgbList" resultType="CommonCode">
+		/* TsaRenderer.getColorGrpCdRgbList */
 		SELECT CD
 			 , CD_DESC AS CD_NM
 		FROM TB_COMMON_CODE
 		WHERE 1=1
-		AND CD_GB = #{cdGb}
+		AND CD_GB = 'G072'
 		AND USE_YN = 'Y'
 	</select>
 

+ 31 - 213
style24.admin/src/main/webapp/WEB-INF/views/goods/GoodsListForm.html

@@ -53,7 +53,7 @@
 						<th>업체/브랜드<em class="required" title="필수"></em></th>
 						<td colspan="3">
 							<select name="supplyCompCd" id="supplyCompCd">
-								<option value="" th:if="${sessionInfo.roleCd} != 'B000'">[전체]</option>
+								<option value="" th:if="${sessionInfo.roleCd} != 'G001_B000'">[전체]</option>
 								<option th:if="${supplyCompList}" th:each="oneData, status : ${supplyCompList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
 							</select>
 							<span id="multiBrand"></span>
@@ -230,16 +230,14 @@
 				</label>
 				<!-- //상단버튼 영역  -->
 				<div id="gridList" style="width: 100%; height: 700px;" class="ag-theme-balham lh60"></div>
-				
-				<div class="panelBtnB">
-					<!-- Paging -->
-					<div class="tablePaging" id="goodsListPagination"></div>
-					<!-- //Paging -->
-					<div class="aR">
-					<button type="button" class="btn btn-info btn-sm" onclick="fnGoodsStatArea();" th:if="${sessionInfo.roleCd == '0000' OR sessionInfo.roleCd == 'A000' OR sessionInfo.roleCd == 'A101' OR sessionInfo.roleCd == 'A100' OR sessionInfo.roleCd == 'A001'}">상태일괄적용</button>
-					</div>
-				</div>
-				
+				<ul class="panelBar">
+					<li class="center">
+						<div class="tablePaging" id="goodsListPagination"></div>
+					</li>
+					<li class="right">
+						<button type="button" class="btn btn-info btn-sm"  onclick="fnGoodsStatArea();" th:if="${sessionInfo.roleCd == 'G001_0000' OR sessionInfo.roleCd == 'G001_A000' OR sessionInfo.roleCd == 'G001_A101' OR sessionInfo.roleCd == 'G001_A100' OR sessionInfo.roleCd == 'G001_A001'}">상태일괄적용</button>
+					</li>
+				</ul>
 				<ul class="boxContent off" id="goodsStatArea">
 					<li class="pad20">
 						<table class="frmStyle">
@@ -262,15 +260,6 @@
 									</select>
 									<button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsState('goodsStat')">적용</button>
 								</td>
-								<th>가격연동여부</th>
-								<td>
-									<select id="erpPriceLinkYnC" name="erpPriceLinkYnC">
-										<option value="">[선택]</option>
-										<option value="Y">연동</option>
-										<option value="N">비연동</option>
-									</select>
-									<button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsState('erpPriceLinkYn')">적용</button>
-								</td>
 								<th>재고연동여부</th>
 								<td >
 									<select id="erpStockLinkYnC" name="erpStockLinkYnC">
@@ -288,8 +277,6 @@
 									</select>
 									<button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsState('formalGb')" >적용</button>
 								</td>
-							</tr>
-							<tr>
 								<th>반품가능여부</th>
 								<td>
 									<select id="returnableYnC" name="returnableYnC">
@@ -299,33 +286,6 @@
 									</select>
 									<button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsState('returnableYn')" >적용</button>
 								</td>
-								<th>교환가능여부</th>
-								<td>
-									<select id="changeableYnC" name="changeableYnC">
-										<option value="">[선택]</option>
-										<option value="Y">가능</option>
-										<option value="N">불가</option>
-									</select>
-									<button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsState('changeableYn')" >적용</button>
-								</td>
-								<th>무료반품여부</th>
-								<td>
-									<select id="returnFeeFreeYnC" name="returnFeeFreeYnC">
-										<option value="">[선택]</option>
-										<option value="Y">가능</option>
-										<option value="N">불가</option>
-									</select>
-									<button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsState('returnFeeFreeYn')" >적용</button>
-								</td>
-								<th>무료교환여부</th>
-								<td>
-									<select id="changeFeeFreeYnC" name="changeFeeFreeYnC">
-										<option value="">[선택]</option>
-										<option value="Y">가능</option>
-										<option value="N">불가</option>
-									</select>
-									<button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsState('changeFeeFreeYn')" >적용</button>
-								</td>
 							</tr>
 							<tr>
 								<th>상품타이틀</th>
@@ -335,10 +295,15 @@
 									<button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsState('goodsTnm')" >적용</button>
 								</td>
 								<th>무료배송기준</th>
-								<td colspan="3">
+								<td>
 									<input id="minOrdAmtC" name="minOrdAmtC" type="text" class="w100"  data-valid-type="numeric" maxlength="10"/>이상 구매시 무료
 									<button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsState('minOrdAmt')" >적용</button>
 								</td>
+								<th>ID당1일최대구매수량</th>
+								<td>
+									<input id="dayMaxOrdQtyC" name="dayMaxOrdQtyC" type="text" class="w100" data-valid-type="numeric" />
+									<button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsState('dayMaxOrdQty')" >적용</button>
+								</td>
 							</tr>
 							<tr>
 								<th>최소주문수량</th>
@@ -365,23 +330,6 @@
 						</table>
 					</li>
 				</ul>
-				<ul class="boxContent off" id="goodsPriceArea">
-					<li class="pad20">
-						<table class="frmStyle">
-							<colgroup>
-								<col style="width: 7%"/>
-								<col/>
-							</colgroup>
-							<tr>
-								<th>판매가</th>
-								<td>
-									<input id="currPriceC" name="currPriceC" type="text" class="w100"  data-valid-type="numeric" maxlength="10" data-valid-name="판매가"/>
-									<button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsPrice('currPrice')" >적용</button>
-								</td>
-							</tr>
-						</table>
-					</li>
-				</ul>
 			<!-- 검색결과 영역 -->
 		</div>
 		</form>
@@ -409,9 +357,9 @@
 				}else{
 					if (gagajf.isNull(params.value)) {
 						
-						return '<img width="60" src="'+ params.data.imgPath4+goodsImgParam + '" alt="" onclick="cfnOpenImagePreViewPopup(\'goodsImgView\', \''+ params.data.imgPath4+goodsImgBigParam +'\')"/>';
+						return '<img width="60" src="'+ params.data.imgPath6 + '" alt="" onclick="cfnOpenImagePreViewPopup(\'goodsImgView\', \''+ params.data.imgPath6 +'\')"/>';
 					} else {
-						return '<img width="60" src="'+ params.value+goodsImgParam + '" alt="" onclick="cfnOpenImagePreViewPopup(\'goodsImgView\', \''+ params.value+goodsImgBigParam +'\')"/>';
+						return '<img width="60" src="'+ params.value + '" alt="" onclick="cfnOpenImagePreViewPopup(\'goodsImgView\', \''+ params.value +'\')"/>';
 					}
 				}
 			}
@@ -733,37 +681,26 @@
 		}
 
 		var goodsStatVal  = '';
-		var erpPriceLinkYnVal  = '';
 		var erpStockLinkYnVal= '';
 		var formalGbVal= '';
 		var returnableYnVal= '';
-		var changeableYnVal= '';
-		var returnFeeFreeYnVal = '';
-		var changeFeeFreeYnVal  = '';
 		var goodsTnmVal  = '';
 		var blankFlagVal = '';
 		var minOrdAmtVal = '';
 		var minOrdQtyVal = '';
 		var maxOrdQtyVal = '';
+		var dayMaxOrdQtyVal = '';
 		var pntPrateVal = '';
 		var pntMrateVal = '';
 
 		if (proc == "goodsStat") {
 			goodsStatVal = $(objId).val();
-		}else if (proc == "erpPriceLinkYn") {
-			erpPriceLinkYnVal = $(objId).val();
 		}else if (proc == "erpStockLinkYn") {
 			erpStockLinkYnVal = $(objId).val();
 		}else if (proc == "formalGb") {
 			formalGbVal = $(objId).val();
 		}else if (proc == "returnableYn") {
 			returnableYnVal = $(objId).val();
-		}else if (proc == "changeableYn") {
-			changeableYnVal = $(objId).val();
-		}else if (proc == "returnFeeFreeYn") {
-			returnFeeFreeYnVal = $(objId).val();
-		}else if (proc == "changeFeeFreeYn") {
-			changeFeeFreeYnVal = $(objId).val();
 		}else if (proc == "goodsTnm"){
 			if($("#searchForm input:checkbox[name=blankFlag]").is(':checked')){
 				blankFlagVal = "Y";
@@ -794,6 +731,17 @@
 				return;
 			}
 			maxOrdQtyVal = $(objId).val();
+		}else if (proc == "dayMaxOrdQty") {
+			if($(objId).val()<=0){
+				mcxDialog.alertC('0보다 큰값을 입력 해주세요.', {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$(objId).focus();
+					}
+				});
+				return;
+			}
+			dayMaxOrdQtyVal = $(objId).val();	
 		}else if (proc == "pntPrate") {
 			if($(objId).val()>100){
 				mcxDialog.alertC('100보다 작거나 같은 값을 입력 해주세요.', {
@@ -832,17 +780,14 @@
 
 				var data = {arrGoodsCd: arrGoodsCd
 							,goodsStat : goodsStatVal
-							,erpPriceLinkYn : erpPriceLinkYnVal
 							,erpStockLinkYn : erpStockLinkYnVal
 							,formalGb : formalGbVal
 							,returnableYn : returnableYnVal
-							,changeableYn : changeableYnVal
-							,returnFeeFreeYn : returnFeeFreeYnVal
-							,changeFeeFreeYn : changeFeeFreeYnVal
 							,goodsTnm : goodsTnmVal
 							,blankFlag : blankFlagVal
 							,minOrdAmt : minOrdAmtVal
 							,maxOrdQty : maxOrdQtyVal
+							,dayMaxOrdQty : dayMaxOrdQtyVal
 							,pntPrate : pntPrateVal
 							,pntMrate : pntMrateVal
 							,procJob : proc
@@ -855,116 +800,6 @@
 		});
 	}
 
-	//상품가격 변경시
-	var fnChangeGoodsPrice = function(proc){
-
-		var objId = '#'+proc+"C";
-		if (gagajf.isNull($(objId).val())){
-			mcxDialog.alertC('적용할 판매가를 입력해주세요.',{
-				sureBtnText: "확인",
-				sureBtnClick: function() {
-					$(objId).focus();
-				}
-			});
-			return;
-		}
-
-		var selectedData = gridOptions.api.getSelectedRows();
-
-		if (selectedData.length == 0) {
-			mcxDialog.alert('선택된 행이 없습니다.');
-			return;
-		}
-
-		var goodsPriceVal  = '';
-		goodsPriceVal = $(objId).val();
-
-
-		if (fnGoodsPriceCheck(goodsPriceVal, proc)){
-			fnGoodsPriceSave(goodsPriceVal, proc);
-		}
-	}
-
-	var fnGoodsPriceSave =function(goodsPriceVal,proc){
-
-		var selectedData = gridOptions.api.getSelectedRows();
-		mcxDialog.confirm('적용 하시겠습니까?', {
-			cancelBtnText: "취소",
-			sureBtnText: "확인",
-			sureBtnClick: function(){
-				var arrGoodsCd = [];
-
-				$.each(selectedData, function(idx, item) {
-					arrGoodsCd.push(item.goodsCd);
-				});
-
-				var data = {arrGoodsCd: arrGoodsCd
-							,currPrice : goodsPriceVal
-							,procJob : proc
-							};
-
-				var jsonData = JSON.stringify(data);
-				gagajf.ajaxJsonSubmit('/goods/price/update', jsonData, fnChangeGoodsStateCollback);
-			}
-		});
-	}
-
-	var fnGoodsPriceCheck = function(goodsPriceVal, proc){
-
-		var selectedData = gridOptions.api.getSelectedRows();
-		var dcRateConfirm = true;
-		var optCheck = true;
-		//TAG가 대비 판매가 비교
-		$.each(selectedData, function(idx, item) {
-
-			if (item.supplyCompCd != "F"){
-				optCheck = false;
-				mcxDialog.alertC(item.goodsCd +" 상품은 플라잉타이거 상품이 아닙니다.",{
-					sureBtnText: "확인",
-					sureBtnClick: function() {
-						gridOptions.api.setFocusedCell(idx, "goodsCd", null);
-					}
-				});
-				return false;
-			}
-			if (Number(item.tagPrice) < Number(goodsPriceVal)) {
-				optCheck = false;
-				mcxDialog.alertC(item.goodsCd +" 상품은 TAG가가 입력된 판매가 보다 작습니다.", {
-					sureBtnText: "확인",
-					sureBtnClick: function() {
-						gridOptions.api.setFocusedCell(idx, "goodsCd", null);
-					}
-				});
-				return false;
-			}
-
-			var dcRate = 0;
-			var tagPrice = item.tagPrice;
-			var currPrice = goodsPriceVal;
-			dcRate = 100 - (Number((Number(currPrice) / Number(tagPrice)).toFixed(2)) *100);
-
-			if (dcRate < 0){
-				optCheck = false;
-				mcxDialog.alertC(item.goodsCd +" 상품은 할인율이 0보다 작습니다.", {
-					sureBtnText: "확인",
-					sureBtnClick: function() {
-						gridOptions.api.setFocusedCell(idx, "goodsCd", null);
-					}
-				});
-				return false;
-			}else if (dcRate >= 90 && dcRateConfirm){
-				if (confirm(item.goodsCd +" 상품은 할인율이 90%이상입니다.<br/>다른 상품들도 허용하고 계속하시겠습니까?")){
-					dcRateConfirm = false;
-				}else{
-					optCheck = false;
-					return false;
-				}
-			}
-		});
-
-		return optCheck;
-	}
-
 	var fnChangeGoodsStateCollback = function(result){
 		if (result.resultFlag == "FAIL"){
 			mcxDialog.alert("[ " + result.returnGoods + " ]은<br/>이미지가 등록되지 않아 '승인대기'나 '승인완료' 상태로 변경할 수 없습니다.<br/>상품을 확인하시고, 다시 시도해주세요.");
@@ -980,27 +815,10 @@
 		if ($("#searchForm").find("#goodsStatArea").hasClass('off')) {
 			$("#searchForm").find("#goodsStatArea").removeClass('off');
 			$("#searchForm").find("#goodsStatArea").addClass('on');
-			$("#searchForm").find("#goodsPriceArea").removeClass('on');
-			$("#searchForm").find("#goodsPriceArea").addClass('off');
 		}else{
 			$("#searchForm").find("#goodsStatArea").removeClass('on');
 			$("#searchForm").find("#goodsStatArea").addClass('off');
 		}
-		
-	}
-
-	//가격일괄변경 버튼 클릭시 - 플타만
-	var fnGoodsPriceArea = function(){
-		if ($("#searchForm").find("#goodsPriceArea").hasClass('off')) {
-			$("#searchForm").find("#goodsPriceArea").removeClass('off');
-			$("#searchForm").find("#goodsPriceArea").addClass('on');
-			$("#searchForm").find("#goodsStatArea").removeClass('on');
-			$("#searchForm").find("#goodsStatArea").addClass('off');
-		}else{
-			$("#searchForm").find("#goodsPriceArea").removeClass('on');
-			$("#searchForm").find("#goodsPriceArea").addClass('off');
-		}
-		
 	}
 
 	$(document).ready(function() {
@@ -1021,6 +839,6 @@
 
 /*]]>*/
 </script>
- 	</div>
+	</div>
 
 </html>

+ 3 - 3
style24.admin/src/main/webapp/WEB-INF/views/goods/NotiinfoForm.html

@@ -33,9 +33,9 @@
 				<li class="boxContentBtnT">
 					<span style="padding:5.5px 15px; background:#e9ecfb; border-top:1px solid #dae0fd; border-bottom:0.5px solid #dae0fd;">업체</span>
 					<select name="supplyCompCd" id="supplyCompCd">
-						<option value="S0001" th:if="${sessionInfo.roleCd != 'B000' }" th:selected="${sessionInfo.roleCd != 'B000'}">한세엠케이</option>
-						<option value="S0002" th:if="${sessionInfo.roleCd != 'B000' }">한세드림</option>
-						<option value="E" th:selected="${sessionInfo.roleCd == 'B000'}">입점</option>
+						<option value="S0001" th:if="${sessionInfo.roleCd != 'G001_B000' }" th:selected="${sessionInfo.roleCd != 'G001_B000'}">한세엠케이</option>
+						<option value="S0002" th:if="${sessionInfo.roleCd != 'G001_B000' }">한세드림</option>
+						<option value="E" th:selected="${sessionInfo.roleCd == 'G001_B000'}">입점</option>
 					</select>
 				</li>
 				<li class="boxContentTop">