Forráskód Böngészése

상품목록 개발중

eskim 5 éve
szülő
commit
a9fa02ba3a

+ 11 - 10
style24.scm/src/main/java/com/style24/persistence/mybatis/shop/TssBusiness.xml

@@ -1,10 +1,10 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.style24.admin.biz.dao.TsaBusinessDao">
+<mapper namespace="com.style24.scm.biz.dao.TssBusinessDao">
 
 	<!-- 공급업체 목록 -->
 	<select id="getSupplyCompanyList" parameterType="SupplyCompany" resultType="SupplyCompany">
-		/* TsaBusiness.getSupplyCompanyList */
+		/* TssBusiness.getSupplyCompanyList */
 		SELECT SUPPLY_COMP_CD       /*공급업체코드*/
 		     , SUPPLY_COMP_NM       /*공급업체명*/
 		     , BIZ_GB               /*사업자구분*/
@@ -60,7 +60,7 @@
 	
 	<!-- 공급업체 생성 -->
 	<insert id="createSupplyCompany" parameterType="SupplyCompany">
-		/* TsaBusiness.createSupplyCompany */
+		/* TssBusiness.createSupplyCompany */
 		INSERT INTO TB_SUPPLY_COMPANY (
 		       SUPPLY_COMP_CD
 		     , SUPPLY_COMP_NM
@@ -144,7 +144,7 @@
 	
 	<!-- 공급업체 수정 -->
 	<update id="updateSupplyCompany" parameterType="SupplyCompany">
-		/* TsaBusiness.updateSupplyCompany */
+		/* TssBusiness.updateSupplyCompany */
 		UPDATE TB_SUPPLY_COMPANY
 		SET    SUPPLY_COMP_NM = #{supplyCompNm}
 		     , BIZ_GB = #{bizGb}
@@ -186,7 +186,7 @@
 
 	<!-- 브랜드 목록 -->
 	<select id="getBrandList" parameterType="Brand" resultType="Brand">
-		/* TsaBusiness.getBrandList */
+		/* TssBusiness.getBrandList */
 		SELECT CASE WHEN A.SELF_YN = 'Y' THEN 'S'
 		            ELSE 'E'
 		       END               AS BRAND_GB /*브랜드구분*/
@@ -245,11 +245,12 @@
 	
 	<!-- 담당MD 목록 -->
 	<select id="getMdList" parameterType="String" resultType="BrandMd">
-		/* TsaBusiness.getMdList */
+		/* TssBusiness.getMdList */
 		SELECT USER_NO AS MD_NO
 		     , USER_NM AS MD_NM
 		FROM   TB_USER
-		WHERE  ROLE_CD = 'G001_A101' /*MD권한*/
+		WHERE  1 = 1
+		/* AND ROLE_CD = 'G001_A101'  */  /*MD권한*/
 		<if test="mdNm != null and mdNm != ''">
 		AND    LOWER(USER_NM) LIKE CONCAT('%',LOWER(#{mdNm}),'%')
 		</if>
@@ -259,7 +260,7 @@
 	
 	<!-- 브랜드담당MD 목록 -->
 	<select id="getBrandMdList" parameterType="String" resultType="BrandMd">
-		/* TsaBusiness.getBrandMdList */
+		/* TssBusiness.getBrandMdList */
 		SELECT A.FORMAL_GB           /*정상이월구분*/
 		     , A.MD_NO               /*담당MD번호*/
 		     , B.USER_NM    AS MD_NM /*담당MD명*/
@@ -271,7 +272,7 @@
 	
 	<!-- 브랜드담당MD 삭제 -->
 	<delete id="deleteBrandMd" parameterType="String">
-		/* TsaBusiness.deleteBrandMd */
+		/* TssBusiness.deleteBrandMd */
 		DELETE
 		FROM   TB_BRAND_MD
 		WHERE  BRAND_CD = #{brandCd}
@@ -279,7 +280,7 @@
 
 	<!-- 브랜드담당MD 등록 -->
 	<insert id="createBrandMd" parameterType="BrandMd">
-		/* TsaBusiness.createBrandMd */
+		/* TssBusiness.createBrandMd */
 		INSERT INTO TB_BRAND_MD (
 		       BRAND_CD
 		     , FORMAL_GB

+ 6 - 6
style24.scm/src/main/java/com/style24/persistence/mybatis/shop/TssCommon.xml

@@ -1,18 +1,18 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.style24.admin.biz.dao.TssCommonDao">
+<mapper namespace="com.style24.scm.biz.dao.TssCommonDao">
 
 	<!-- 엑셀조회를 위한 SEARCH 테이블 삭제  -->
 	<delete id="deleteExceluploadSearCh" parameterType="SearchData">
-		/* TsaCommon.deleteExceluploadSearCh */
-		DELETE
+		/* TssCommon.deleteExceluploadSearCh */
+		DELETE 
 		FROM   TB_SEARCH_DATA
 		WHERE  REG_NO = #{regNo}
 	</delete>
 
 	<!-- 엑셀조회를 위한 SEARCH 테이블  생성 -->
 	<insert id="createExceluploadSearch" parameterType="SearchData">
-		/* TsaCommon.createExceluploadSearch */
+		/* TssCommon.createExceluploadSearch */
 		INSERT INTO TB_SEARCH_DATA (
 		        REG_NO
 		      , SEARCH_CD
@@ -29,7 +29,7 @@
 	
 	<!-- 엑셀조회를 위한 SEARCH 테이블  생성 - dummy 컬럼 포함 -->
 	<insert id="createExceluploadSearchByAll" parameterType="SearchData">
-		/* TsaCommon.createExceluploadSearchByAll */
+		/* TssCommon.createExceluploadSearchByAll */
 		INSERT INTO TB_SEARCH_DATA (
 		        REG_NO
 		      , SEARCH_CD
@@ -57,7 +57,7 @@
 	
 	<!-- 샘플파일 시스템파일명 조회 -->
 	<select id="getSampleFileSystemFilename" parameterType="String" resultType="String">
-		/* TsaCommon.getSampleFileSystemFilename */
+		/* TssCommon.getSampleFileSystemFilename */
 		SELECT SYS_FILE_NM
 		FROM   TB_SAMPLE_FILE
 		WHERE  SAMPLE_FILE_ID = #{sampleFileId}

+ 27 - 27
style24.scm/src/main/java/com/style24/persistence/mybatis/shop/TssGoods.xml

@@ -4,7 +4,7 @@
 
 	<!-- 상품 목록 건수 -->
 	<select id="getGoodsListCount" parameterType="GoodsSearch" resultType="int">
-		/* TsaGoods.getGoodsListCount */
+		/* TssGoods.getGoodsListCount */
 		        SELECT COUNT(*) AS TOTCNT
 		        FROM TB_GOODS G
 		        INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
@@ -56,7 +56,7 @@
 
 	<!-- 상품 목록 -->
 	<select id="getGoodsList" parameterType="GoodsSearch" resultType="Goods">
-		/* TsaGoods.getGoodsList */
+		/* TssGoods.getGoodsList */
 		SELECT Z.*
 		    , (CASE WHEN Z.GOODS_TYPE = 'G056_N' THEN (SELECT NVL(SUM(CURR_STOCK_QTY - BASE_STOCK_QTY),0) FROM VW_STOCK WHERE GOODS_CD = Z.GOODS_CD) 
 		            ELSE (SELECT NVL(SUM(CURR_STOCK_QTY - BASE_STOCK_QTY),0) FROM VW_STOCK_COMPOSE WHERE GOODS_CD = Z.GOODS_CD) 
@@ -399,7 +399,7 @@
 	
 	<!-- 상품 목록 기본정보 엑셀  -->
 	<select id="getGoodsInfoExcelList" parameterType="GoodsSearch" resultType="paramMap">
-		/* TsaGoods.getGoodsInfoExcelList */
+		/* TssGoods.getGoodsInfoExcelList */
 		SELECT G.GOODS_CD
 		     , B.BRAND_ENM
 		     , B.BRAND_GRP_NM
@@ -494,7 +494,7 @@
 	
 	<!-- 상품 정보 -->
 	<select id="getGoods" parameterType="Goods" resultType="Goods">
-		/* TsaGoods.getGoods */
+		/* TssGoods.getGoods */
 		SELECT G.GOODS_CD
 		     , G.GOODS_NM
 		     , G.GOODS_TNM
@@ -578,7 +578,7 @@
 	
 	<!-- 상품 상세 정보 조회 -->
 	<select id="getGoodsDescList" parameterType="GoodsDesc" resultType="GoodsDesc">
-		/* TsaGoods.getGoodsDescList */
+		/* TssGoods.getGoodsDescList */
 		SELECT GOODS_CD
 		     , DESC_GB
 		     , SEQ
@@ -591,7 +591,7 @@
 	
 	<!-- 상품 고시정보 조회 -->
 	<select id="getGoodsNotiInfoList" parameterType="GoodsNotiInfo" resultType="GoodsNotiInfo">
-		/* TsaGoods.getGoodsNotiInfoList */
+		/* TssGoods.getGoodsNotiInfoList */
 		SELECT C.GOODS_CD
 		     , C.NI_CLSF_CD
 		     , FN_GET_CODE_NM('G005', C.NI_ITEM_CD) AS NI_ITEM_NM
@@ -614,7 +614,7 @@
 	
 	<!-- 상품의 정보고시 항목 목록 -->
 	<select id="getNotiGoodsInfoList" parameterType="NotiInfo" resultType="NotiInfo">
-		/* TsaGoods.getNotiGoodsInfoList */
+		/* TssGoods.getNotiGoodsInfoList */
 		SELECT  N.SUPPLY_COMP_CD
 		      , N.NI_CLSF_CD
 		      , N.NI_ITEM_CD
@@ -658,7 +658,7 @@
 	
 	<!-- 상품 기본정보 이력 생성 -->
 	<insert id="createGoodsHst" parameterType="Goods">
-		/* TsaGoods.createGoodsHst */
+		/* TssGoods.createGoodsHst */
 		INSERT INTO TB_GOODS_HST 
 		(       GOODS_CD
 		      , BRAND_CD
@@ -771,7 +771,7 @@
 	
 	<!-- 상품  수정 항목 일괄변경 -->
 	<update id="updateGoodsState" parameterType="Goods">
-		/* TsaGoods.updateGoodsState */
+		/* TssGoods.updateGoodsState */
 		UPDATE TB_GOODS SET
 		      UPD_NO = #{updNo}
 		    , UPD_DT = NOW()
@@ -834,7 +834,7 @@
 	
 	<!-- 상품 이미지 필수  항목 입력 여부  조회 -->
 	<select id="getGoodsImgsYn" parameterType="Goods" resultType="Goods">
-		/* TsaGoods.getGoodsImgsYn */
+		/* TssGoods.getGoodsImgsYn */
 		SELECT A.GOODS_CD
 		     , A.SUPPLY_COMP_CD
 		     , (SELECT I.NI_CLSF_CD FROM TB_ITEMKIND I WHERE I.ITEMKIND_CD = A.ITEMKIND_CD) AS NI_CLSF_CD
@@ -862,7 +862,7 @@
 	
 	<!-- 상품 정보 이력 -->
 	<select id="getGoodsHstList" parameterType="Goods" resultType="GoodsHst">
-		/*TsaGoods.getGoodsHstList*/
+		/*TssGoods.getGoodsHstList*/
 		SELECT CURR_PRICE
 		     , CURR_BPRICE
 		     , GOODS_NM
@@ -893,7 +893,7 @@
 	
 	<!-- 상품 품목 변경 -->
 	<update id="updateGoodItemKindCd" parameterType="Goods">
-		/* TsaGoods.updateGoodItemKindCd */
+		/* TssGoods.updateGoodItemKindCd */
 		UPDATE TB_GOODS
 		SET ITEMKIND_CD = #{itemkindCd}
 		  , UPD_NO = #{updNo}
@@ -903,7 +903,7 @@
 	
 	<!-- 상품 자동 검색어 조회-->
 	<select id="getGoodsSnm" parameterType="String" resultType="String">
-		/* TsaGoods.getGoodsSnm */
+		/* TssGoods.getGoodsSnm */
 		SELECT UPPER(CONCAT(
 		       G.GOODS_CD,';',
 		       REPLACE(G.GOODS_NM,' ',''),';',
@@ -927,7 +927,7 @@
 	
 	<!-- 상품검색어 수정 -->
 	<update id="updateGoodsSnm" parameterType="Goods">
-		/* TsaGoods.updateGoodsSnm */
+		/* TssGoods.updateGoodsSnm */
 		UPDATE TB_GOODS A
 		SET UPD_NO = #{updNo}
 		  , UPD_DT = NOW()
@@ -937,7 +937,7 @@
 	
 	<!-- 상품 품목변경 고시정보 조회  -->
 	<select id="getNewNotiInfo" parameterType="Goods" resultType="GoodsNotiInfo">
-		/* TsaGoods.getNewNotiInfo */
+		/* TssGoods.getNewNotiInfo */
 		SELECT D.NI_CLSF_CD
 		     , NVL(C.NI_ITEM_CD, D.NI_ITEM_CD) AS NI_ITEM_CD
 		     , NVL(C.NI_CONTENT, D.NI_CONTENT) AS NI_CONTENT
@@ -967,14 +967,14 @@
 	
 	<!-- 상품 품목변경 고시정보 삭제  -->
 	<delete id="deleteGoodsNotiInfo" parameterType="Goods">
-		/* TsaGoods.deleteGoodsNotiInfo */
+		/* TssGoods.deleteGoodsNotiInfo */
 		DELETE FROM TB_GOODS_NOTI_INFO
 		WHERE GOODS_CD = #{goodsCd}
 	</delete>
 	
 	<!-- 상품 고시 정보  저장 -->
 	<update id="saveGoodsNotiInfo" parameterType="GoodsNotiInfo">
-		/* TsaGoods.saveGoodsNotiInfo */
+		/* TssGoods.saveGoodsNotiInfo */
 		INSERT INTO TB_GOODS_NOTI_INFO(
 		       GOODS_CD
 		     , NI_CLSF_CD
@@ -1005,7 +1005,7 @@
 	
 	<!-- 상품 사이즈 조회 -->
 	<select id="getGoodsSizeList" parameterType="Goods" resultType="Option">
-		/* TsaGoods.getGoodsSizeList */
+		/* TssGoods.getGoodsSizeList */
 		WITH RECURSIVE TMP_GOODS AS (
 		    SELECT A.GOODS_CD 
 		         , A.GOODS_TYPE 
@@ -1053,7 +1053,7 @@
 	
 	<!-- 상품 색상목록 조회 -->
 	<select id="getGoodsColorList" parameterType="Goods" resultType="GoodsImg">
-		/* TsaGoods.getGoodsColorList */
+		/* TssGoods.getGoodsColorList */
 		SELECT A.GOODS_CD 
 		     , NVL(A.OPT_CD1, A.MAIN_COLOR_CD) AS OPT_CD1
 		     , A.MAIN_COLOR_CD
@@ -1078,7 +1078,7 @@
 	
 	<!-- 상품 기본 정보 등록 -->
 	<insert id="createGoods" parameterType="Goods">
-		/* TsaGoods.createGoods */
+		/* TssGoods.createGoods */
 		INSERT INTO TB_GOODS (
 		    GOODS_CD
 		  , BRAND_CD
@@ -1165,7 +1165,7 @@
 	
 	<!-- 상품 기본 정보 등록 -->
 	<insert id="createGoodsSmmary" parameterType="Goods">
-		/* TsaGoods.createGoodsSmmary */
+		/* TssGoods.createGoodsSmmary */
 		INSERT INTO TB_GOODS_SUMMARY (
 		    GOODS_CD
 		  , REG_NO
@@ -1184,7 +1184,7 @@
 	
 	<!-- 상품 기본 정보 수정 -->
 	<update id="updateGoods" parameterType="Goods">
-		/* TsaGoods.updateGoods */
+		/* TssGoods.updateGoods */
 		UPDATE TB_GOODS
 		SET GOODS_TNM = #{goodsTnm}
 		  , GOODS_NM = #{goodsNm}
@@ -1225,7 +1225,7 @@
 	
 	<!-- 상품 상세정보 삭제 -->
 	<delete id="deleteGoodsDesc" parameterType="GoodsDesc">
-		/* TsaGoods.deleteGoodsDesc */
+		/* TssGoods.deleteGoodsDesc */
 		DELETE FROM TB_GOODS_DESC
 		WHERE GOODS_CD = #{goodsCd}
 		AND DESC_GB = #{descGb}
@@ -1233,7 +1233,7 @@
 	
 	<!-- 상품 상세정보 등록 -->
 	<insert id="createGoodsDesc" parameterType="GoodsDesc">
-		/* TsaGoods.createGoodsDesc */
+		/* TssGoods.createGoodsDesc */
 		INSERT INTO TB_GOODS_DESC (
 		    GOODS_CD
 		  , DESC_GB
@@ -1254,7 +1254,7 @@
 	
 	<!-- 상품 옵션/재고 정보 이력생성 -->
 	<insert id="createStockHst" parameterType="Option">
-	/* TsaGoods.createStockHst */
+	/* TssGoods.createStockHst */
 		INSERT INTO TB_OPTION_HST 
 		(     OPTION_HST_SQ
 		    , GOODS_CD
@@ -1296,7 +1296,7 @@
 	
 	<!-- 상품 옵션/재고 정보 저장 -->
 	<update id="saveStock" parameterType="Option">
-		/* TsaGoods.saveStock */
+		/* TssGoods.saveStock */
 		INSERT INTO TB_OPTION(
 		       GOODS_CD
 		     , OPT_CD
@@ -1344,7 +1344,7 @@
 	
 	<!-- 상품코드 생성 -->
 	<insert id="createGoodsSequence" parameterType="Goods">
-		/* TsaGoods.createGoodsSequence */
+		/* TssGoods.createGoodsSequence */
 		<selectKey keyProperty="goodsSq" resultType="int" order="AFTER">
 		SELECT MAX(GOODS_SQ) FROM TB_GOODS_SEQUENCE
 		</selectKey>

+ 10 - 10
style24.scm/src/main/java/com/style24/persistence/mybatis/shop/TssLogin.xml

@@ -4,7 +4,7 @@
 
 	<!-- ID로 사용자 조회 -->
 	<select id="getUserById" parameterType="String" resultType="User">
-		/* TsaLogin.getUserById */
+		/* TssLogin.getUserById */
 		SELECT USER_NO                                                     /*사용자명*/
 		     , USER_ID                                                     /*사용자ID*/
 		     , USER_NM                                                     /*사용자명*/
@@ -12,16 +12,16 @@
 		     , ROLE_CD                                                     /*권한코드*/
 		     , FN_GET_CODE_NM('G001',ROLE_CD)            AS ROLE_NM        /*권한명*/
 		     , ROLE_REF_VAL                                                /*권한관련값*/
-		     , CASE WHEN SUBSTRING(ROLE_CD,1,1) = 'B' THEN
+		     , CASE WHEN SUBSTRING(REPLACE(ROLE_CD,'G001_', ''),1,1) = 'B' THEN
 		                ROLE_REF_VAL
-		            END                                  AS SUPPLY_COMP_CD /*공급업체코드
-		     , CASE WHEN SUBSTRING(ROLE_CD,1,1) = 'B' THEN
+		            END                                  AS SUPPLY_COMP_CD /*공급업체코드*/
+		     , CASE WHEN SUBSTRING(REPLACE(ROLE_CD,'G001_', ''),1,1) = 'B' THEN
 		                (SELECT SUPPLY_COMP_NM
 		                 FROM   TB_SUPPLY_COMPANY
 		                 WHERE  SUPPLY_COMP_CD = A.ROLE_REF_VAL
 		                )
 		       END                                       AS SUPPLY_COMP_NM /*공급업체명*/
-		     , CASE WHEN SUBSTRING(ROLE_CD,1,1) = 'E' THEN
+		     , CASE WHEN SUBSTRING(REPLACE(ROLE_CD,'G001_', ''),1,1) = 'E' THEN
 		                ROLE_REF_VAL
 		       END                                       AS PHOTO_COMP_CD  /*촬영업체코드*/
 		     , CASE WHEN SUBSTRING(ROLE_CD,1,1) = 'E' THEN
@@ -40,7 +40,7 @@
 	
 	<!-- 로그인실패 남기기 -->
 	<insert id="createLoginFail" parameterType="User">
-		/* TsaLogin.createLoginFail */
+		/* TssLogin.createLoginFail */
 		INSERT INTO TB_USER_LOGIN_FAIL (
 		       USER_NO
 		     , IP_ADDR
@@ -67,7 +67,7 @@
 
 	<!-- 로그인 실패건수 조회 -->
 	<select id="getLoginFailCount" parameterType="User" resultType="int">
-		/* TsaLogin.getLoginFailCount */
+		/* TssLogin.getLoginFailCount */
 		SELECT IFNULL((SELECT LOGIN_FAIL_CNT
 		               FROM   TB_USER_LOGIN_FAIL
 		               WHERE  USER_NO = #{userNo}
@@ -78,7 +78,7 @@
 
 	<!-- 최종로그인일시 Update -->
 	<update id="updateLastLoginDate" parameterType="Integer">
-		/* TsaLogin.updateLastLoginDate */
+		/* TssLogin.updateLastLoginDate */
 		UPDATE TB_USER
 		SET    LOGIN_LDT = NOW()
 		     , UPD_NO = #{userNo}
@@ -88,7 +88,7 @@
 
 	<!-- 로그인이력 남기기 -->
 	<insert id="createLoginHistory" parameterType="User">
-		/* TsaLogin.createLoginHistory */
+		/* TssLogin.createLoginHistory */
 		INSERT INTO TB_USER_LOGIN_HST (
 		       USER_LOGIN_SQ
 		     , USER_NO
@@ -109,7 +109,7 @@
 
 	<!-- 로그인 메뉴 목록 -->
 	<select id="getLoginMenuList" parameterType="Integer" resultType="Menu">
-		/* TsaLogin.getLoginMenuList */
+		/* TssLogin.getLoginMenuList */
 		WITH RECURSIVE CONNECTBY2 AS (
 		    WITH RECURSIVE CONNECTBY1 AS (
 		        SELECT 1                                                  AS MENU_LVL

+ 21 - 21
style24.scm/src/main/java/com/style24/persistence/mybatis/shop/TssRenderer.xml

@@ -4,7 +4,7 @@
 
 <!-- 공급업체 목록 -->
 	<select id="getSupplyCompanyList" parameterType="SupplyCompany" resultType="CommonCode">
-		/* TsaRenderer.getSupplyCompanyList */
+		/* TssRenderer.getSupplyCompanyList */
 		SELECT SUPPLY_COMP_CD  AS CD
 		     , SUPPLY_COMP_NM  AS CD_NM
 		FROM   TB_SUPPLY_COMPANY
@@ -23,7 +23,7 @@
 	
 	<!-- 공통코드 목록 -->
 	<select id="getCommonCodeList" parameterType="CommonCode" resultType="CommonCode">
-		/* TsaRenderer.getCommonCodeList */
+		/* TssRenderer.getCommonCodeList */
 		SELECT CD
 		     , CD_NM
 		FROM   TB_COMMON_CODE
@@ -52,7 +52,7 @@
 	
 	<!-- 최상위메뉴 목록 -->
 	<select id="getTopMenuList" parameterType="String" resultType="CommonCode">
-		/* TsaRenderer.getTopMenuList */
+		/* TssRenderer.getTopMenuList */
 		WITH RECURSIVE CONNECTBY AS (
 		    SELECT 1                                    AS LVL
 		         , MENU_ID
@@ -88,7 +88,7 @@
 
 	<!-- 전체메뉴 목록 -->
 	<select id="getAllMenuList" resultType="CommonCode">
-		/* TsaRenderer.getAllMenuList */
+		/* TssRenderer.getAllMenuList */
 		WITH RECURSIVE CONNECTBY AS (
 		    SELECT 1                                    AS LVL
 		         , MENU_ID
@@ -119,7 +119,7 @@
 
 	<!-- 벤더별 외부몰 목록 -->
 	<select id="getVendorExtmallList" parameterType="String" resultType="CommonCode">
-		/* TsaRenderer.getVendorExtmallList */
+		/* TssRenderer.getVendorExtmallList */
 		SELECT DISTINCT
 		       EXTMALL_ID AS CD
 		     , EXTMALL_NM AS CD_NM
@@ -131,7 +131,7 @@
 
 	<!-- 벤더별 외부몰판매매장 목록 -->
 	<select id="getVendorExtmallSellStoreList" parameterType="String" resultType="CommonCode">
-		/* TsaRenderer.getVendorExtmallSellStoreList */
+		/* TssRenderer.getVendorExtmallSellStoreList */
 		SELECT A.SELL_STORE_CD AS CD
 		     , B.SELL_STORE_NM AS CD_NM
 		FROM   TB_EXTMALL A
@@ -146,7 +146,7 @@
 
 	<!-- 브랜드 목록 -->
 	<select id="getBrandList" parameterType="Brand" resultType="CommonCode">
-		/* TsaRenderer.getBrandList */
+		/* TssRenderer.getBrandList */
 		SELECT BRAND_CD  AS CD
 		     , BRAND_ENM AS CD_NM
 		FROM   TB_BRAND
@@ -165,7 +165,7 @@
 
 	<!-- 권한별 브랜드 목록 -->
 	<select id="getAuthBrandList" parameterType="int" resultType="CommonCode">
-		/* TsaRenderer.getAuthBrandList */
+		/* TssRenderer.getAuthBrandList */
 		SELECT A.BRAND_CD  AS CD
 		     , A.BRAND_ENM AS CD_NM
 		FROM   TB_BRAND A
@@ -179,7 +179,7 @@
 	
 	<!-- 정보고시 목록 -->
 	<select id="getCateInfoList" parameterType="String" resultType="CommonCode">
-		/* TsaRenderer.getCateInfoList */
+		/* TssRenderer.getCateInfoList */
 		SELECT NI_CLSF_CD AS CD
 		     , B.CD_NM
 		FROM   TB_NOTI_INFO A
@@ -194,7 +194,7 @@
 
 	<!-- 품목 목록 -->
 	<select id="getItemkindList" parameterType="Itemkind" resultType="CommonCode">
-		/* TsaRenderer.getItemkindList */
+		/* TssRenderer.getItemkindList */
 		SELECT ITEMKIND_CD AS CD
 		     , ITEMKIND_NM AS CD_NM
 		FROM   TB_ITEMKIND
@@ -207,7 +207,7 @@
 
 	<!-- 브랜드그룹 목록 -->
 	<select id="getBrandGroupList" resultType="CommonCode">
-		/* TsaRenderer.getBrandGroupList */
+		/* TssRenderer.getBrandGroupList */
 		SELECT BRAND_GRP_NM AS CD
 		     , BRAND_GRP_NM AS CD_NM
 		FROM   TB_BRAND
@@ -219,7 +219,7 @@
 
 	<!-- 컬러 목록 -->
 	<select id="getColorList" parameterType="Color" resultType="CommonCode">
-		/* TsaRenderer.getColorList */
+		/* TssRenderer.getColorList */
 		SELECT COLOR_CD  AS CD
 		     , COLOR_ENM AS CD_NM
 		     , COLOR_KNM AS CD_DESC
@@ -234,7 +234,7 @@
 
 	<!-- 사용중 대카테고리 목록 -->
 	<select id="getTCategoryList" parameterType="String" resultType="CommonCode">
-		/* TsaRenderer.getTCategoryList */
+		/* TssRenderer.getTCategoryList */
 		SELECT TCATE_CD AS CD
 		     , TCATE_NM AS CD_NM
 		FROM   TB_CATEGORY_4SRCH
@@ -248,7 +248,7 @@
 
 	<!-- 브랜드에 등록된 MD 목록 -->
 	<select id="getBrandMdList" resultType="CommonCode">
-		/* TsaRenderer.getBrandMdList */
+		/* TssRenderer.getBrandMdList */
 		SELECT DISTINCT
 		       A.MD_NO   AS CD
 		     , C.USER_NM AS CD_NM
@@ -272,7 +272,7 @@
 
 	<!-- MD별 브랜드 목록 조회 -->
 	<select id="getMdBrandList" resultType="CommonCode">
-		/* TsaRenderer.getMdBrandList*/
+		/* TssRenderer.getMdBrandList*/
 		SELECT DISTINCT
 		       A.BRAND_CD AS CD
 		     , B.BRAND_ENM AS CD_NM
@@ -286,7 +286,7 @@
 
 	<!-- MD별 브랜드그룹조회 -->
 	<select id="getMdBrandGrpList" resultType="CommonCode">
-		/* TsaRenderer.getMdBrandGrpList*/
+		/* TssRenderer.getMdBrandGrpList*/
 		SELECT DISTINCT
 		       B.BRAND_GRP_NM AS CD
 		     , B.BRAND_GRP_NM AS CD_NM
@@ -300,7 +300,7 @@
 	</select>
 
 	<select id="getInstaAccount" resultType="CommonCode">
-		/* TsaRenderer.getInstaAccount*/
+		/* TssRenderer.getInstaAccount*/
 		SELECT DISTINCT
 		       IT.INSTA_ACCOUNT AS CD
 		     , IT.INSTA_ACCOUNT AS CD_NM
@@ -309,7 +309,7 @@
 
 	<!-- 판매몰조회 -->
 	<select id="getSellStoreList" resultType="CommonCode">
-		/* TsaRenderer.getSellStoreList*/
+		/* TssRenderer.getSellStoreList*/
 		SELECT DISTINCT
 		       SELL_STORE_CD AS CD
 		     , SELL_STORE_NM AS CD_NM
@@ -318,7 +318,7 @@
 
 	<!-- 기본답변문구 제목 목록 -->
 	<select id="getBasicAnsTitleList" parameterType="String" resultType="CommonCode">
-		/* TsaRenderer.getBasicAnsTitleList */
+		/* TssRenderer.getBasicAnsTitleList */
 		SELECT ANS_SQ     AS CD
 		     , ANS_TITLE  AS CD_NM
 		FROM   TB_BASIC_ANS
@@ -328,7 +328,7 @@
 
 	<!-- 제휴링크 목록 -->
 	<select id="getAflinkList" parameterType="String" resultType="CommonCode">
-		/* TsaRenderer.getAflinkList */
+		/* TssRenderer.getAflinkList */
 		SELECT AF_LINK_CD AS CD
 		     , AF_LINK_NM AS CD_NM
 		FROM   TB_AF_LINK
@@ -338,7 +338,7 @@
 	
 	<!-- 색상그룹코드 RGB 목록 -->
 	<select id="getColorGrpCdRgbList" resultType="CommonCode">
-		/* TsaRenderer.getColorGrpCdRgbList */
+		/* TssRenderer.getColorGrpCdRgbList */
 		SELECT CD
 			 , CD_DESC AS CD_NM
 		FROM TB_COMMON_CODE

+ 2 - 2
style24.scm/src/main/java/com/style24/persistence/mybatis/shop/TssSystem.xml

@@ -1,10 +1,10 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.style24.admin.biz.dao.TsaSystemDao">
+<mapper namespace="com.style24.scm.biz.dao.TssSystemDao">
 
 	<!-- 사용자 조회 -->
 	<select id="getUser" parameterType="Integer" resultType="User">
-		/* TsaSystem.getUser */
+		/* TssSystem.getUser */
 		SELECT USER_NO                                                         /*사용자번호*/
 		     , USER_ID                                                         /*사용자ID*/
 		     , USER_NM                                                         /*사용자명*/

+ 0 - 1
style24.scm/src/main/java/com/style24/scm/biz/dao/TssCommonDao.java

@@ -56,5 +56,4 @@ public interface TssCommonDao {
 	 * @since 2020. 01. 16
 	 */
 	String getErpSyncYn();
-
 }

+ 11 - 0
style24.scm/src/main/java/com/style24/scm/biz/dao/TssGoodsDao.java

@@ -142,6 +142,17 @@ public interface TssGoodsDao {
 	 */
 	void createGoodsHst(Goods goods);
 
+
+	/**
+	 * 상품 수정 항목 일괄변경
+	 *
+	 * @param goods
+	 * @author eskim
+	 * @since 2020. 10. 22
+	 */
+	void updateGoodsState(Goods goods);
+
+
 	/**
 	 * 상품 자동 검색어 조회
 	 *

+ 95 - 0
style24.scm/src/main/java/com/style24/scm/biz/service/TssGoodsService.java

@@ -168,6 +168,100 @@ public class TssGoodsService {
 		}
 	}
 
+	/**
+	 * 상품 수정 항목 일괄변경
+	 *
+	 * @param goods
+	 * @author eskim
+	 * @since 2020. 01. 17
+	 */
+	@Transactional("shopTxnManager")
+	public void updateGoodsState(Goods goods) {
+		if (goods == null || (goods.getArrGoodsCd() == null && goods.getArrGoodsCd().length <= 0)) {
+			throw new IllegalStateException(message.getMessage("FAIL_1001"));
+		}
+
+		goods.setRegNo(TssSession.getInfo().getUserNo());
+		goods.setUpdNo(TssSession.getInfo().getUserNo());
+
+		if (goods.getArrGoodsCd().length > 0) {
+			for (String goodsCd : goods.getArrGoodsCd()) {
+
+				goods.setGoodsCd(goodsCd);
+				// 이력생성
+				goodsDao.createGoodsHst(goods);
+
+				if ("formalGb".equals(goods.getProcJob())) {
+					// 상품브랜드 조회
+					Goods originGoods = goodsDao.getGoods(goods);
+					// 브랜드 확인
+					goods.setPntPrate(originGoods.getPntPrate()); // 포인트적립율(PC)
+					goods.setPntMrate(originGoods.getPntMrate()); // 포인트적립율(MOBILE)
+					Brand brand = new Brand();
+					brand.setBrandCd(originGoods.getBrandCd());
+					Collection<Brand> brandList = businessService.getBrandList(brand);
+					if (brandList != null && !brandList.isEmpty()) {
+						float pntPrate = 0;
+						float pntMrate = 0;
+						for (Brand tmpBrand : brandList) {
+							if ("G009_10".equals(goods.getFormalGb())) {
+								pntPrate = tmpBrand.getPntPrate10();
+								pntMrate = tmpBrand.getPntMrate10();
+							} else {
+								pntPrate = tmpBrand.getPntPrate20();
+								pntMrate = tmpBrand.getPntMrate20();
+							}
+						}
+						goods.setPntPrate(pntPrate); // 포인트적립율(PC)
+						goods.setPntMrate(pntMrate); // 포인트적립율(MOBILE)
+					}
+				} else if ("goodsStat".equals(goods.getProcJob())) {
+					// 상품브랜드 조회
+					Goods originGoods = goodsDao.getGoods(goods);
+
+					// 승인일
+					if (!goods.getGoodsStat().equals(originGoods.getGoodsStat()) && "G008_90".equals(goods.getGoodsStat())) {
+						goods.setChGoodsStatYn("Y");
+					}
+				}
+				// 상품정보 변경
+				goodsDao.updateGoodsState(goods);
+			}
+
+		} else {
+
+			// 이력생성
+			goodsDao.createGoodsHst(goods);
+			if ("formalGb".equals(goods.getProcJob())) {
+				// 상품브랜드 조회
+				Goods originGoods = goodsDao.getGoods(goods);
+				// 브랜드 확인
+				goods.setPntPrate(originGoods.getPntPrate()); // 포인트적립율(PC)
+				goods.setPntMrate(originGoods.getPntMrate()); // 포인트적립율(MOBILE)
+				Brand brand = new Brand();
+				brand.setBrandCd(originGoods.getBrandCd());
+				Collection<Brand> brandList = businessService.getBrandList(brand);
+				if (brandList != null && !brandList.isEmpty()) {
+					float pntPrate = 0;
+					float pntMrate = 0;
+					for (Brand tmpBrand : brandList) {
+						if ("G009_10".equals(goods.getFormalGb())) {
+							pntPrate = tmpBrand.getPntPrate10();
+							pntMrate = tmpBrand.getPntMrate10();
+						} else {
+							pntPrate = tmpBrand.getPntPrate20();
+							pntMrate = tmpBrand.getPntMrate20();
+						}
+					}
+					goods.setPntPrate(pntPrate); // 포인트적립율(PC)
+					goods.setPntMrate(pntMrate); // 포인트적립율(MOBILE)
+				}
+			}
+			// 상품정보 변경
+			goodsDao.updateGoodsState(goods);
+		}
+	}
+
 	/**
 	 * 상품 이미지 등록여부 조회
 	 *
@@ -730,4 +824,5 @@ public class TssGoodsService {
 		double rate = (double)(currPrice) / (double)(listPrice);
 		return 100 - (long)((Math.round(rate * 100) / 100.0) * 100);
 	}
+
 }

+ 221 - 0
style24.scm/src/main/java/com/style24/scm/biz/web/TssCommonController.java

@@ -0,0 +1,221 @@
+package com.style24.scm.biz.web;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+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.util.StringUtils;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.servlet.ModelAndView;
+
+import com.style24.scm.biz.service.TssCommonService;
+import com.style24.scm.support.controller.TssBaseController;
+
+import lombok.extern.slf4j.Slf4j;
+
+import com.gagaframework.web.parameter.GagaMap;
+import com.gagaframework.web.util.GagaFileUploadUtil;
+import com.gagaframework.web.util.GagaFileUtil;
+import com.gagaframework.web.util.GagaFtpUtil;
+import com.gagaframework.web.util.GagaUploadedFileInfo;
+
+/**
+ * 공통 Controller
+ *
+ * @author renderer
+ * @since 2020. 10. 22
+ */
+@Controller
+@RequestMapping("/common")
+@Slf4j
+public class TssCommonController extends TssBaseController {
+
+
+	@Autowired
+	private Environment env;
+
+	@Autowired
+	private TssCommonService commonService;
+
+
+	@Value("${upload.default.target.path}")
+	private String uploadTargetPath;
+
+	/**
+	 * Download a file
+	 *
+	 * @param request - HttpServletRequest
+	 * @param downloadFile - 다운로드할 파일
+	 * @return
+	 * @throws IOException
+	 * @author gagamel
+	 * @since 2019. 12. 6
+	 */
+	@GetMapping("/file/download")
+	@ResponseBody
+	public ResponseEntity<InputStreamResource> downloadFile(HttpServletRequest request, @RequestParam("downloadFile") String downloadFile) throws IOException {
+		String fileName = StringUtils.replace(downloadFile, "../", "");
+		log.debug("fileName: {}", fileName);
+
+		String downloadPath = env.getProperty("download.path");
+		log.debug("downLoadPath :{}", downloadPath);
+
+		String fileNameWithPath = GagaFileUtil.getConcatenationPath(downloadPath, fileName);
+		log.debug("fileNameWithPath: {}", fileNameWithPath);
+
+		return GagaFileUtil.writeFile(request, fileNameWithPath);
+	}
+
+	/**
+	 * Upload a file
+	 *
+	 * @param subDir - 업로드 하위 디렉토리
+	 * @param policy - 업로드 정책
+	 * @param file - MultipartFile
+	 * @return 업로드한 파일의 정보
+	 * @throws IOException
+	 * @author gagamel
+	 * @since 2019. 12. 6
+	 */
+	@PostMapping("/file/upload")
+	@ResponseBody
+	public GagaUploadedFileInfo uploadFile(@RequestParam(value = "subDir") String subDir, @RequestParam(value = "policy", required = false) String policy, MultipartFile file) throws IOException {
+		if (StringUtils.isEmpty(policy)) {
+			policy = "default";
+		}
+
+		String targetPath = GagaFileUtil.getConcatenationPath(env.getProperty("upload." + policy + ".target.path"), subDir);
+
+		GagaFileUploadUtil fuUtil = new GagaFileUploadUtil(targetPath, Long.parseLong(env.getProperty("upload." + policy + ".max.size")), env.getProperty("upload." + policy + ".allow.extension"), env.getProperty("upload." + policy + ".view"));
+
+		GagaUploadedFileInfo ufInfo = fuUtil.uploadFile(file);
+		if (!"excel".equals(policy)) {
+			// 운영서버에서만 FTP로 파일 업로드
+			String profiles = env.getProperty("spring.profiles.active").toLowerCase();
+			if ("run".equals(profiles) || "locp".equals(profiles)) {
+				GagaFtpUtil ftpUtil = new GagaFtpUtil(env.getProperty("speedy.ftp.host"), env.getProperty("speedy.ftp.port"), env.getProperty("speedy.ftp.username"), env.getProperty("speedy.ftp.pwd"));
+
+				File srcFile = new File(GagaFileUtil.getConcatenationPath(targetPath, ufInfo.getNewFileName()));
+				ftpUtil.upload(srcFile, "/" + subDir);
+				ftpUtil.close();
+			}
+		}
+		return ufInfo;
+	}
+
+	/**
+	 * Delete a file
+	 *
+	 * @param subDir - 업로드 하위 디렉토리
+	 * @param fileNm - 파일명
+	 * @return
+	 * @throws IOException
+	 * @author sasa004
+	 * @since 2020. 04. 06
+	 */
+	@PostMapping("/file/delete")
+	@ResponseBody
+	public void deleteFile(@RequestParam(value = "subDir") String subDir, @RequestParam(value = "fileNm", required = false) String fileNm) throws IOException {
+		String targetPath = GagaFileUtil.getConcatenationPath(env.getProperty("upload.default.target.path"), subDir);
+
+		GagaFileUtil.deleteFile(GagaFileUtil.getConcatenationPath(targetPath, fileNm));
+
+		// 운영서버이면 FTP 파일 삭제
+		String profiles = env.getProperty("spring.profiles.active").toLowerCase();
+		if ("run".equals(profiles) || "locp".equals(profiles)) {
+			GagaFtpUtil ftpUtil = new GagaFtpUtil(env.getProperty("speedy.ftp.host"), env.getProperty("speedy.ftp.port"), env.getProperty("speedy.ftp.username"), env.getProperty("speedy.ftp.pwd"));
+			log.debug("targetPath : " + targetPath);
+			ftpUtil.delete("/" + subDir, fileNm);
+			ftpUtil.close();
+		}
+	}
+
+	/**
+	 * Upload files
+	 *
+	 * @param subDir - 업로드 하위 디렉토리
+	 * @param files - MultipartFile List
+	 * @return 업로드한 파일의 정보
+	 * @throws IOException
+	 * @author gagamel
+	 * @since 2019. 12. 6
+	 */
+	@PostMapping("/files/upload")
+	@ResponseBody
+	public Collection<GagaUploadedFileInfo> uploadFiles(@RequestParam(value = "subDir") String subDir, List<MultipartFile> files) throws IOException {
+		String targetPath = GagaFileUtil.getConcatenationPath(env.getProperty("upload.default.target.path"), subDir);
+		GagaFileUploadUtil fuUtil = new GagaFileUploadUtil(targetPath);
+
+		Collection<GagaUploadedFileInfo> ufList = fuUtil.uploadFiles(files);
+		log.debug("ufList: {}", ufList);
+
+		// 운영서버에서만 FTP로 파일 업로드
+		String profiles = env.getProperty("spring.profiles.active").toLowerCase();
+		if ("run".equals(profiles) || "locp".equals(profiles)) {
+			if (ufList != null && !ufList.isEmpty()) {
+				GagaFtpUtil ftpUtil = new GagaFtpUtil(env.getProperty("speedy.ftp.host"), env.getProperty("speedy.ftp.port"), env.getProperty("speedy.ftp.username"), env.getProperty("speedy.ftp.pwd"));
+
+				for (GagaUploadedFileInfo ufInfo : ufList) {
+					File srcFile = new File(GagaFileUtil.getConcatenationPath(targetPath, ufInfo.getNewFileName()));
+					ftpUtil.upload(srcFile, "/" + subDir);
+				}
+
+				ftpUtil.close();
+			}
+		}
+
+		return ufList;
+	}
+
+	/**
+	 * 엑셀 업로드 팝업
+	 *
+	 * @param procJob - 업무명
+	 * @param callBackFun - 콜백함수
+	 * @return
+	 * @author eskim
+	 * @since 2019. 12. 6
+	 */
+	@GetMapping("/excel/upload/popup/form")
+	public ModelAndView excelUploadPopupForm(@RequestParam(value = "procJob") String procJob, @RequestParam(value = "callBackFun", required = false) String callBackFun) {
+		ModelAndView mav = new ModelAndView();
+
+		GagaMap params = new GagaMap();
+		params.setString("procJob", procJob);
+		params.setString("callBackFun", callBackFun);
+
+		mav.addObject("params", params);
+
+		mav.setViewName("common/ExcelUploadPopupForm");
+
+		return mav;
+	}
+
+	/**
+	 * 샘플파일 시스템파일명 조회
+	 * @param sampleFileId - 샘플파일ID
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 11. 3
+	 */
+	@GetMapping("/sample/file/{sampleFileId}")
+	@ResponseBody
+	public String getSampleFileSystemFilename(@PathVariable("sampleFileId") String sampleFileId) {
+		return commonService.getSampleFileSystemFilename(sampleFileId);
+	}
+}

+ 397 - 1
style24.scm/src/main/java/com/style24/scm/biz/web/TssGoodsController.java

@@ -1,5 +1,8 @@
 package com.style24.scm.biz.web;
 
+import java.util.ArrayList;
+import java.util.Collection;
+
 import javax.servlet.http.HttpServletRequest;
 
 import org.springframework.beans.factory.annotation.Autowired;
@@ -15,9 +18,16 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.servlet.ModelAndView;
 
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.persistence.TssPageRequest;
+import com.style24.persistence.domain.Goods;
+import com.style24.persistence.domain.GoodsCompose;
+import com.style24.persistence.domain.GoodsHst;
+import com.style24.persistence.domain.GoodsNotiInfo;
 import com.style24.persistence.domain.GoodsSearch;
+import com.style24.persistence.domain.NotiInfo;
 import com.style24.persistence.domain.User;
 import com.style24.scm.biz.service.TssCommonService;
 import com.style24.scm.biz.service.TssGoodsService;
@@ -28,7 +38,10 @@ import com.style24.scm.support.security.session.TssSession;
 
 import lombok.extern.slf4j.Slf4j;
 
+import com.gagaframework.excel.GagaExcelUtil;
 import com.gagaframework.web.parameter.GagaMap;
+import com.gagaframework.web.rest.server.GagaResponse;
+import com.gagaframework.web.rest.server.GagaResponseStatus;
 import com.gagaframework.web.util.GagaDateUtil;
 import com.gagaframework.web.util.GagaFileUtil;
 
@@ -75,9 +88,12 @@ public class TssGoodsController extends TssBaseController {
 		// 공급업체
 		String supplyCompCd = "";
 		String selfYn = "Y";
-		if ("G001_B000".equals(TssSession.getInfo().getRoleCd())) {
+		if ("G001_B000".equals(TssSession.getInfo().getRoleCd())) {	//입점업체담당자
 			supplyCompCd = TssSession.getInfo().getSupplyCompCd();
 			selfYn = "N";
+		}else if ("G001_E000".equals(TssSession.getInfo().getRoleCd())) {	// 촬영업체
+			supplyCompCd = TssSession.getInfo().getSupplyCompCd();
+			selfYn = "Y";
 		}
 		mav.addObject("supplyCompList", rendererService.getSupplyCompanyList(supplyCompCd, selfYn));
 		// 상품상태
@@ -185,6 +201,386 @@ public class TssGoodsController extends TssBaseController {
 		return GagaFileUtil.writeFile(request, excelFilenameWithPath);
 	}
 
+	/**
+	 * 상품 수정 항목 일괄변경
+	 *
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @since 2020. 01. 17
+	 */
+	@PostMapping("/state/update")
+	@ResponseBody
+	public GagaMap updateGoodsState(@RequestBody Goods goods) {
+
+		GagaMap result = new GagaMap();
+		result.set("status", GagaResponseStatus.SUCCESS.getCode()); // 200
+		result.set("procJob", goods.getProcJob());
+		// result.set("message", message.getMessage("SUCC_0001"));
+
+		String returnGoods = "";
+		String resultFlag = "SUCC";
+
+		if (!"G001_0000".equals(TssSession.getInfo().getRoleCd()) && !"G001_A000".equals(TssSession.getInfo().getRoleCd())
+			&& !"G001_A001".equals(TssSession.getInfo().getRoleCd()) && !"G001_A100".equals(TssSession.getInfo().getRoleCd())
+			&& !"G001_A101".equals(TssSession.getInfo().getRoleCd())) {
+			throw new IllegalStateException("권한이 없습니다.");
+		}
+
+		// 상품 상태 변경일 경우 체크
+		if ("goodsStat".equals(goods.getProcJob()) && ("G008_40".equals(goods.getGoodsStat()) || "G008_90".equals(goods.getGoodsStat()))) {
+
+			// 이미지
+			Collection<Goods> goodsList = goodsService.getGoodsImgsYn(goods);
+
+			for (Goods tmpGoods : goodsList) {
+				if ("N".equals(tmpGoods.getGoodsImageYn())) {
+					returnGoods += tmpGoods.getGoodsCd() + ",";
+				} else {
+
+					// 택가/판매가 입력 여부 확인
+					Goods dataGoods = goodsService.getGoods(tmpGoods);
+					if (dataGoods == null) {
+						returnGoods += tmpGoods.getGoodsCd() + ",";
+						continue;
+					}
+					if (dataGoods.getListPrice() <= 0 || dataGoods.getCurrPrice() <= 0) {
+						returnGoods += tmpGoods.getGoodsCd() + ",";
+						continue;
+					}
+					// 사이즈 등록 여부 확인
+//					Stock stock = new Stock();
+//					stock.setGoodsCd(tmpGoods.getGoodsCd());
+//					int stockCnt = goodsService.getGoodsSizeCount(stock);
+//					if (stockCnt <= 0) {
+//						returnGoods += tmpGoods.getGoodsCd() + ",";
+//						continue;
+//					}
+
+					//고시정보
+//					GoodsNotiInfo goodsNotiInfo = new GoodsNotiInfo();
+//					goodsNotiInfo.setGoodsCd(tmpGoods.getGoodsCd());
+//					goodsNotiInfo.setSupplyCompCd(tmpGoods.getSupplyCompCd());
+//					goodsNotiInfo.setNiClsfCd(tmpGoods.getNiClsfCd());
+//					Collection<GoodsNotiInfo> goodsNotiInfoList = goodsService.getGoodsNotiInfoList(goodsNotiInfo);
+//					if (goodsNotiInfoList == null || goodsNotiInfoList.isEmpty()) {
+//						returnGoods += tmpGoods.getGoodsCd() + ",";
+//					} else {
+//						for (GoodsNotiInfo tmpGoodsNotiInfo : goodsNotiInfoList) {
+//							if ("Y".equals(tmpGoodsNotiInfo.getReqYn()) || "Y".equals(tmpGoodsNotiInfo.getDispYn())) {
+//								if (StringUtils.isEmpty(tmpGoodsNotiInfo.getNiContent())) {
+//									returnGoods += tmpGoods.getGoodsCd() + ",";
+//									break;
+//								}
+//							}
+//						}
+//					}
+				}
+			}
+
+			if (returnGoods.length() > 0) {
+				returnGoods = returnGoods.substring(0, returnGoods.lastIndexOf(","));
+				returnGoods = returnGoods.replaceAll(",", ",<br/>");
+				resultFlag = "FAIL";
+				result.set("resultFlag", resultFlag);
+				result.set("returnGoods", returnGoods);
+				return result;
+			}
+		}
+
+		goodsService.updateGoodsState(goods);
+
+		result.set("resultFlag", resultFlag);
+		result.set("returnGoods", returnGoods);
+		return result;
+	}
+
+	/**
+	 * 엑셀조회용 상품 저장
+	 *
+	 * @param goods
+	 * @return
+	 * @throws Exception
+	 * @author eskim
+	 * @since 2020. 10. 20
+	 */
+	@PostMapping("/search/excelupload/save")
+	@ResponseBody
+	public GagaResponse saveExceluploadGoods(@RequestBody Goods goods) throws Exception {
+
+		int cnt = 0;
+		ObjectMapper mapper = new ObjectMapper();
+
+		String targetPath = GagaFileUtil.getConcatenationPath(env.getProperty("upload.excel.target.path"), "excel");
+
+		// DB 처리 시 사용되는 파라미터명(셀명) 설정
+		String[] cellName = {"goodsCd", "supplyGoodsCd"};
+
+		Collection<GagaMap> ecxelGoodsList = GagaExcelUtil.getList(GagaFileUtil.getConcatenationPath(targetPath, goods.getExcelFileNm()), 0, cellName, 0);
+
+		Collection<Goods> goodsList = new ArrayList<>();
+		for (GagaMap map : ecxelGoodsList) {
+			Goods tmpGoods = mapper.convertValue(map, Goods.class);
+			tmpGoods.setRegNo(TssSession.getInfo().getUserNo());
+			tmpGoods.setProcJob(goods.getProcJob());
+			goodsList.add(tmpGoods);
+			cnt++;
+		}
+
+		goodsService.saveExceluploadGoods(goodsList, goods.getExcelFileNm());
+
+		// 파일 삭제
+		GagaFileUtil.deleteFile(GagaFileUtil.getConcatenationPath(targetPath, goods.getExcelFileNm()));
+
+		return super.ok("");
+	}
+
+	/**
+	 * 엑셀 업로드 상품 조회
+	 *
+	 * @param
+	 * @return GagaMap
+	 * @author eskim
+	 * @since 2020. 11. 02
+	 */
+	@PostMapping("/excel/upload/goods/list")
+	@ResponseBody
+	public GagaMap getExcelUploadGoodsList() {
+		GagaMap result = new GagaMap();
+		GoodsSearch goodsSearch = new GoodsSearch();
+		goodsSearch.setSearchGb("EXCEL");
+		// 입점업체담당자는 업체코드 설정
+		if ("G001_B000".equals(TssSession.getInfo().getRoleCd())) {
+			goodsSearch.setSupplyCompCd(TssSession.getInfo().getSupplyCompCd());
+			goodsSearch.setMdNo(TssSession.getInfo().getUserNo().toString());
+		}
+		goodsSearch.setRegNo(TssSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
+		result.set("goodsExcelList", goodsService.getGoodsList(goodsSearch));
+		return result;
+	}
+
+	/**
+	 * 상품 상세 화면
+	 *
+	 * @param goodsCode - 상품코드
+	 * @return
+	 * @author eskim
+	 * @since 2020. 10. 23
+	 */
+	@GetMapping("/detail/form")
+	@ResponseBody
+	public ModelAndView detailForm(Goods goods) {
+		ModelAndView mav = new ModelAndView();
+
+		// 공급업체
+		String supplyCompCd = "";
+		mav.addObject("supplyCompList", rendererService.getSupplyCompanyList(supplyCompCd));
+//		String selfYn = "Y";
+//		if ("G001_B000".equals(TssSession.getInfo().getRoleCd())) {
+//			supplyCompCd = TssSession.getInfo().getSupplyCompCd();
+//			selfYn = "N";
+//		}
+//		mav.addObject("supplyCompList", rendererService.getSupplyCompanyList(supplyCompCd, selfYn));
+
+		String[] goodsStatExceptCds = {"G008_00"};
+		mav.addObject("goodsStatList", rendererService.getCommonCodeList("G008", "Y", goodsStatExceptCds));
+
+		// 정상이월
+		mav.addObject("formalGbList", rendererService.getAvailCommonCodeList("G009"));
+		// 성별
+		mav.addObject("sexGbList", rendererService.getAvailCommonCodeList("G007"));
+		// 시즌
+		mav.addObject("seasonList", rendererService.getAvailCommonCodeList("G006"));
+		// 사용여부
+		mav.addObject("useYnList", rendererService.getAvailCommonCodeList("G002"));
+		// 품목
+		mav.addObject("itemkindList", rendererService.getAllItemkindList());
+		// 정보고시 분류
+		mav.addObject("niClsfCdList", rendererService.getAvailCommonCodeList("G004"));
+		// 사용자 브랜드 조회
+		mav.addObject("authBrandList", rendererService.getAuthBrandList(TssSession.getInfo().getUserNo()));
+		// 상품타입
+		mav.addObject("goodsTypeList", rendererService.getAvailCommonCodeList("G056"));
+		// 상품구분
+		mav.addObject("goodsGbList", rendererService.getAvailCommonCodeList("G073"));
+		// 유통구분
+		//String[] distributionGbExceptCds = {"G065_20"};
+		//mav.addObject("distributionGbList", rendererService.getCommonCodeList("G065", "Y", distributionGbExceptCds));
+		mav.addObject("distributionGbList", rendererService.getCommonCodeList("G065", "Y"));
+		// 상품연령대
+		mav.addObject("ageGrpCdList", rendererService.getAvailCommonCodeList("G023"));
+		// 년도
+		int toYear = Integer.parseInt(GagaDateUtil.getToday("yyyy")) - 4;
+		mav.addObject("styleYearList", rendererService.getYearList(toYear,0,5));
+		// 색상
+//		Color color = new Color();
+//		mav.addObject("colorList", rendererService.getColorList(color));
+
+		mav.addObject("params", goods);
+
+		mav.setViewName("goods/GoodsDetailForm");
+
+		return mav;
+	}
+
+	/**
+	 * 상품 상세 조회
+	 *
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @since 2019. 12. 11
+	 */
+	@PostMapping("/detail")
+	@ResponseBody
+	public Goods getGoodsDetail(Goods goods) {
+		return goodsService.getGoods(goods);
+	}
+
+	/**
+	 * 상품 이력 조회
+	 *
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @since 2019. 12. 12
+	 */
+	@GetMapping("/detail/hst/list")
+	@ResponseBody
+	public Collection<GoodsHst> getGoodsDetailHstList(Goods goods) {
+		return goodsService.getGoodsHstList(goods);
+	}
+
+	/**
+	 * 컬러 옵셥 재고
+	 *
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @since 2020. 10. 26
+	 */
+	@PostMapping("/detail/sizeStock/form")
+	public ModelAndView getGoodsDetailSizeStockForm(Goods goods) {
+
+		ModelAndView mav = new ModelAndView();
+		mav.addObject("goods", goodsService.getGoods(goods));
+		mav.addObject("goodsSizeList", goodsService.getGoodsSizeList(goods));
+		mav.addObject("goodsColorList", goodsService.getGoodsColorList(goods));
+		// 사용여부
+		mav.addObject("useYnList", rendererService.getAvailCommonCodeList("G002"));
+
+		mav.setViewName("goods/GoodsDetailSizeStockForm");
+
+		return mav;
+	}
+
+	/**
+	 * 상품 정보고시 조회
+	 *
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @since 2019. 12. 12
+	 */
+	@PostMapping("/detail/notiInfo/list")
+	@ResponseBody
+	public Collection<GoodsNotiInfo> getGoodsDetailNotiInfoList(Goods goods) {
+
+		GoodsNotiInfo goodsInfo = new GoodsNotiInfo();
+		goodsInfo.setGoodsCd(goods.getGoodsCd());
+		goodsInfo.setNiClsfCd(goods.getNiClsfCd());
+		goodsInfo.setSupplyCompCd(goods.getSupplyCompCd());
+
+		return goodsService.getGoodsNotiInfoList(goodsInfo);
+	}
+
+	/**
+	 * 상품의 정보고시 항목 목록
+	 *
+	 * @param notiInfo
+	 * @return
+	 * @author eskim
+	 * @since 2010. 11. 18
+	 */
+	@PostMapping("/noti/goodsInfo/list")
+	@ResponseBody
+	public Collection<NotiInfo> getNotiGoodsInfoList(NotiInfo notiInfo) {
+		return goodsService.getNotiGoodsInfoList(notiInfo);
+	}
+
+	/**
+	 * 상품 상세 저장
+	 *
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @since 2020. 10. 27
+	 */
+	@PostMapping("/detail/save")
+	@ResponseBody
+	public GagaResponse saveGoodsDetail(@RequestBody Goods goods) {
+
+		// 상품상태에 따른 이미지 정보 확인 - 상품상태가 승인대기나 승인 완료일 경우
+		if ("G008_40".equals(goods.getGoodsStat()) || "G008_90".equals(goods.getGoodsStat())) {
+			Collection<Goods> goodsList = goodsService.getGoodsImgsYn(goods);
+			String goodsImageYn = "N";
+			for (Goods tmpGoods : goodsList) {
+				goodsImageYn = tmpGoods.getGoodsImageYn();
+			}
+			if ("N".equals(goodsImageYn)) {
+				throw new IllegalStateException("필수 이미지나 고시정보가 등록되지 않은 상품은 <br/>'승인대기'나 '승인완료' 상태로 변경할 수 없습니다.");
+			}
+		}
+
+		Collection<GoodsNotiInfo> notiList = null;
+		Collection<GoodsCompose> goodComposeList = null;
+		ObjectMapper mapper = new ObjectMapper();
+		try {
+			if (goods.getNotiList() != null) {
+				notiList = mapper.readValue(goods.getNotiList(), new TypeReference<Collection<GoodsNotiInfo>>() {
+				});
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		try {
+			if (goods.getGoodsComposeList() != null) {
+				goodComposeList = mapper.readValue(goods.getGoodsComposeList(), new TypeReference<Collection<GoodsCompose>>() {
+				});
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+
+		goods.setNotiListNew(notiList);
+		goods.setGoodsComposeListNew(goodComposeList);
+
+		goodsService.saveGoodsDetail(goods);
+		return super.ok(message.getMessage("SUCC_0001"));
+	}
+
+	/**
+	 * 상품 이미지 보기 화면
+	 *
+	 * @param goodsCode - 상품코드
+	 * @return
+	 * @author eskim
+	 * @since 2020. 11. 09
+	 */
+	@GetMapping("/detail/img/form")
+	@ResponseBody
+	public ModelAndView detailImageForm(Goods goods) {
+		ModelAndView mav = new ModelAndView();
+
+//		goods = goodsService.getGoods(goods);
+//		// mav.addObject("goodsImgList", goodsService.getGoodsImgList(goods)); //이미지 - 행
+//		mav.addObject("goodsImgInfo", goodsService.getGoodsImg(goods)); // 이미지 - 열
+//
+		mav.addObject("params", goods);
+		mav.setViewName("goods/GoodsDetailImageForm");
+		return mav;
+	}
+
 	/**
 	 * 상품 대량 등록 화면
 	 *

+ 12 - 11
style24.scm/src/main/java/com/style24/scm/biz/web/TssRendererController.java

@@ -13,6 +13,7 @@ import com.style24.persistence.domain.Color;
 import com.style24.persistence.domain.CommonCode;
 import com.style24.scm.biz.service.TssRendererService;
 import com.style24.scm.support.controller.TssBaseController;
+import com.style24.scm.support.security.session.TssSession;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -70,17 +71,17 @@ public class TssRendererController extends TssBaseController {
 //		return rendererService.getGroupBrandList(brandGrpNm);
 //	}
 //
-//	/**
-//	 * 권한별 브랜드 목록
-//	 * @return
-//	 * @author eskim
-//	 * @since 2019. 6.17
-//	 */
-//	@GetMapping("/brand/AuthBrandlist")
-//	@ResponseBody
-//	public Collection<AdmCommonCode> getAuthBrandList() {
-//		return rendererService.getAuthBrandList(AdmSession.getInfo().getUserId());
-//	}
+	/**
+	 * 권한별 브랜드 목록
+	 * @return
+	 * @author eskim
+	 * @since 2019. 6.17
+	 */
+	@GetMapping("/brand/AuthBrandlist")
+	@ResponseBody
+	public Collection<CommonCode> getAuthBrandList() {
+		return rendererService.getAuthBrandList(TssSession.getInfo().getUserNo());
+	}
 
 
 

+ 112 - 0
style24.scm/src/main/webapp/WEB-INF/views/common/ExcelUploadPopupForm.html

@@ -0,0 +1,112 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : ExcelUploadPopupForm.html
+ * @desc    : 엑셀 업로드 팝업 Page
+ *============================================================================
+ * Pastelmall
+ * Copyright(C) 2019 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2020.10.22   eskim       최초 작성
+ *******************************************************************************
+ -->	
+	<div class="modalPopup" data-width="600">
+		<div class="panelStyle">
+			<!-- TITLE -->
+			<div class="panelTitle">
+				<strong>엑셀업로드</strong>
+				<button type="button" class="close" onclick="uifnPopupClose('popupExcelUpload')"><i class="fa fa-times"></i></button>
+			</div>
+			<!-- //TITLE -->
+			<!-- CONTENT -->
+			<div class="panelContent">
+			<form id="excelPopupForm" name="excelPopupForm"  action="">
+			<input type="hidden" name="procJob" id="procJob" th:value="${params.procJob}"/>
+			<input type="hidden" name="callBackFun" id="callBackFun" th:value="${params.callBackFun}"/>
+				<table class="frmStyle">
+				<colgroup>
+					<col style="width:20%;"/>
+					<col/>
+					<col style="width:20%;"/>
+				</colgroup>
+				<tbody>
+					<tr>
+						<th>파일</th>
+						<td><div class="uFile w300">
+								<input id="excelFile" name="excelFile" type="file" class="uFileInput"/>
+								<label for="excelFile" class="uFileLabel">파일선택</label>
+								<input type="hidden" name="OrgFileNm"/>
+								<input type="hidden" name="NewFileNm"/>
+							</div>
+						</td>
+					</tr>
+				</tbody>
+				</table>
+				<!-- 버튼 배치 영역 -->
+				<ul class="panelBar">
+					<li class="right">
+						<button type="button" class="btn btn-success btn-lg" id="btnExcelUploadSave">저장</button>
+					</li>	
+				</ul>
+				<!-- //버튼 배치 영역 -->
+			</form>
+			</div>
+		</div>
+		<!-- //CONTENT -->
+	</div>
+<script th:inline="javascript">
+/*<![CDATA[*/
+	
+	//첨부파일 등록
+	$('#excelPopupForm input[name=excelFile]').on('change', function() {
+		var file = this.files[0];
+	
+		if (typeof(file) == 'undefined'){
+			return;
+		}
+		
+		gagajf.ajaxFileUpload('/common/file/upload?subDir=/excel'
+				, file
+				, function(result) {
+					$('#excelPopupForm input[name=OrgFileNm]').val(result.newFileName);
+					$('#excelPopupForm input[name=NewFileNm]').val(result.newFileName);
+				}
+				, 'excel'
+		);
+	});
+	
+	//저장
+	$('#btnExcelUploadSave').on('click', function (){
+		
+		if(gagajf.isNull($("#excelPopupForm input[name=OrgFileNm]").val())){
+			mcxDialog.alert("파일을 첨부해 주세요.");
+			$("#excelPopupForm input[name=excelFile]").focus();
+			return false;
+		}
+		
+		var callback = $('#excelPopupForm input[name=callBackFun]').val();
+		if( typeof callback != 'undefined' && callback){
+			var data = {procJob : $('#excelPopupForm input[name=procJob]').val()
+						, callBackFun : $('#excelPopupForm input[name=callBackFun]').val()
+						, excelFileNm : $('#excelPopupForm input[name=NewFileNm]').val()
+						};
+			var jsonData = JSON.stringify(data);
+			if (typeof callback == 'function') {
+				callback(jsonData);
+			}else{
+				if( callback ) {
+					if( callback.indexOf("(") == -1 ) eval( callback +"(" + jsonData+")");
+					else eval( callback(jsonData) );
+				}
+			}
+			uifnPopupClose('popupExcelUpload');
+		}
+	});	
+	
+/*]]>*/
+</script>
+</html>

+ 14 - 2
style24.scm/src/main/webapp/WEB-INF/views/goods/GoodsListForm.html

@@ -52,8 +52,8 @@
 					<tr>
 						<th>업체/브랜드<em class="required" title="필수"></em></th>
 						<td colspan="3">
-							<label class="rdoBtn"><input type="radio" name="selfYn" id="selfYnY" value="Y"  checked/>자사</label>
-							<label class="rdoBtn"><input type="radio" name="selfYn" id="selfYnN" value="N"/>입점</label>
+							<label class="rdoBtn"><input type="radio" name="selfYn" id="selfYnY" value="Y" th:checked="${sessionInfo.roleCd} != 'G001_B000'"/>자사</label>
+							<label class="rdoBtn"><input type="radio" name="selfYn" id="selfYnN" value="N" th:checked="${sessionInfo.roleCd} == 'G001_B000'"/>입점</label>
 							<select name="supplyCompCd" id="supplyCompCd">
 								<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>
@@ -999,6 +999,18 @@
 
 		// Create a agGrid
 		gagaAgGrid.createGrid('gridList', gridOptions);
+		
+		if(sessRoleCd == "G001_B000") {
+			
+			$("#searchForm select[name=supplyCompCd]").val([[${sessionInfo.supplyCompCd}]]);
+			$("#searchForm select[name=supplyCompCd]").attr("readonly", true);
+			//$("select[disabled]").addClass("formControl");
+
+			$('#searchForm').find('#multiBrand').empty();
+			var actionUrl = '/renderer/brand/AuthBrandlist';
+			cfnCreateMultiCombo(actionUrl,"multiBrand",  "[전체]",null, 'Y');
+			
+		}
 
 	});