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

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

eskim 5 éve
szülő
commit
bbf50698e1

+ 41 - 0
src/main/java/com/style24/persistence/domain/DeliveryLoc.java

@@ -0,0 +1,41 @@
+package com.style24.persistence.domain;
+
+import com.style24.persistence.TscBaseDomain;
+
+import lombok.Data;
+
+/**
+ * 출고처 Domain
+ * 
+ * @author gagamel
+ * @since 2020. 10. 7
+ */
+@SuppressWarnings("serial")
+@Data
+public class DeliveryLoc extends TscBaseDomain {
+
+	private String delvLocCd;			// 출고처코드
+	private String delvLocNm;			// 출고처명
+	private String supplyCompCd;		// 공급업체코드
+	private String supplyCompNm;		// 공급업체명
+	private String delvLocClsf;			// 출고처종류
+	private String delvLocClsfNm;		// 출고처종류명
+	private Integer delvAssignOrd;		// 출고지정순서
+	private String delvAssignGrade;		// 출고지정등급
+	private float stockApplRate;		// 재고적용율
+	private float delvFeeRate;			// 출고수수료율
+	private String delvLocZipcode;		// 출고처우편번호
+	private String delvLocBaseAddr;		// 출고처기본주소
+	private String delvLocDtlAddr;		// 출고처상세주소
+	private String rtnLocZipcode;		// 반품처우편번호
+	private String rtnLocBaseAddr;		// 반품처기본주소
+	private String rtnLocDtlAddr;		// 반품처상세주소
+	private String rtnLocNm;			// 반품처명
+	private String invoicePrintType;	// 송장출력형태(공통코드G025)
+	private String useYn;				// 사용여부
+
+	// 검색조건
+	private String searchGb;
+	private String searchTxt;
+
+}

+ 1 - 2
src/main/java/com/style24/persistence/domain/SupplyCompany.java

@@ -17,6 +17,7 @@ public class SupplyCompany extends TscBaseDomain {
 	private String supplyCompCd;		// 공급업체코드
 	private String supplyCompNm;		// 공급업체명
 	private String supplyVendorCd;		// 공급벤더코드
+	private String supplyVendorNm;		// 공급벤더명
 	private Integer provierNo;			// ProvierNo(WMS)
 	private String bizGb;				// 사업자구분
 	private String bizNo;				// 사업자번호
@@ -34,8 +35,6 @@ public class SupplyCompany extends TscBaseDomain {
 	private String shotDelvYn;			// 총알배송여부
 	private String supplyStat;			// 입점상태(공통코드G010)
 	private String supplyStatNm;		// 입점상태명
-//	private int minOrdAmt;				// 무료배송비최소주문금액
-//	private int delvFee;				// 배송비
 	private float sellFeeRate;			// 판매수수료율
 	private String settleDay;			// 정산일(매월)
 	private String bankCd;				// 은행코드

+ 158 - 154
src/main/java/com/style24/persistence/mybatis/shop/TssBusiness.xml

@@ -37,83 +37,68 @@
 		     , SC.BILL_EMAIL                                           /*계산서이메일*/
 		     , SC.ECONTRACT_YN                                         /*전자계약여부*/
 		     , SC.REMARKS                                              /*비고*/
-		     , SC.USE_YN                                               /*사용여부*/
 		     , SC.NOTE                                                 /*배송안내*/
+		     , SC.USE_YN                                               /*사용여부*/
 		FROM   TB_SUPPLY_COMPANY SC
 		     , TB_SUPPLY_VENDOR SV
 		WHERE  SC.SUPPLY_VENDOR_CD = SV.SUPPLY_VENDOR_CD
+		AND    SC.SUPPLY_COMP_CD = #{supplyCompCd}
 		<if test="supplyStat != null and supplyStat != ''">
 		AND    SC.SUPPLY_STAT = #{supplyStat}
 		</if>
-		<if test="searchTxt != null and searchTxt != ''">
-		    <if test='searchGb == "NAME"'>
-		AND    (
-		        UPPER(SC.SUPPLY_COMP_NM) LIKE CONCAT('%',UPPER(#{searchTxt}),'%')
-		        OR
-		        UPPER(SV.SUPPLY_VENDOR_NM) LIKE CONCAT('%',UPPER(#{searchTxt}),'%')
-		       )
-		    </if>
-		    <if test='searchGb == "OWNER"'>
-		AND    UPPER(SV.OWNER_NM) LIKE CONCAT('%',UPPER(#{searchTxt}),'%')
-		    </if>
-		</if>
-		<if test="econtractYn != null and econtractYn != ''">
-		AND    SC.ECONTRACT_YN = #{econtractYn}
+		<if test="ownerNm != null and ownerNm != ''">
+		AND    UPPER(SV.OWNER_NM) LIKE CONCAT('%',UPPER(#{ownerNm}),'%')
 		</if>
-		<if test="supplyCompCd != null and supplyCompCd != ''"> <!-- 브랜드관리 화면에서 사용 -->
-		AND    SC.SUPPLY_COMP_CD = #{supplyCompCd}
-		</if>
-		<if test='selfYn != null and (selfYn == "Y" or selfYn == "N")'>
-		<choose>
-		    <when test='selfYn  == "Y"'>
-		AND    SC.DISTRIBUTION_GB IN ('G065_10','G065_11','G065_12') 
-		    </when>
-		    <otherwise>
-		AND    SC.DISTRIBUTION_GB IN ('G065_20')
-		    </otherwise>
-		</choose>
+	</select>
+	
+	<!-- 공급업체 수정 -->
+	<update id="updateSupplyCompany" parameterType="SupplyCompany">
+		/* TssBusiness.updateSupplyCompany */
+		UPDATE TB_SUPPLY_COMPANY
+		SET    HOMEPAGE_URL = #{homepageUrl}
+		     , CS_CHARGE_NM = #{csChargeNm}
+		     , CS_CHARGE_TELNO = #{csChargeTelno}
+		     , SETTLE_CHARGE_NM = #{settleChargeNm}
+		     , SETTLE_CHARGE_TELNO = #{settleChargeTelno}
+		     , SETTLE_CHARGE_EMAIL = #{settleChargeEmail}
+		     , BILL_EMAIL = #{billEmail}
+		     , NOTE = #{note}
+		     , UPD_NO = #{updNo}
+		     , UPD_DT = NOW()
+		WHERE  SUPPLY_COMP_CD = #{supplyCompCd}
+	</update>
+	
+	<!-- 배송비정책 목록 -->
+	<select id="getDeliveryFeePolicyList" parameterType="DelvFeePolicy" resultType="DelvFeePolicy">
+		/* TssBusiness.getDeliveryFeePolicyList */
+		SELECT DELV_FEE_CD    /*배송비정책코드*/
+		     , SUPPLY_COMP_CD /*공급업체코드*/
+		     , DELV_FEE_CRITE /*배송비부과기준*/
+		     , MIN_ORD_AMT    /*무료배송비최소주문금액*/
+		     , DELV_FEE       /*배송비*/
+		     , RTN_DELV_FEE   /*반품배송비*/
+		     , USE_YN         /*사용여부*/
+		FROM   TB_DELV_FEE_POLICY
+		WHERE  SUPPLY_COMP_CD = #{supplyCompCd}
+		<if test="delvFeeCd != null and delvFeeCd != ''">
+		AND    DELV_FEE_CD = #{delvFeeCd}
 		</if>
-		<if test="supplyCompCd != null and supplyCompCd != ''"> <!-- 브랜드관리 화면에서 사용 -->
-		AND    SC.SUPPLY_COMP_CD = #{supplyCompCd}
+		<if test="useYn != null and useYn != ''">
+		AND    USE_YN = #{useYn}
 		</if>
+		ORDER  BY DELV_FEE_CD
 	</select>
 	
-	<!-- 공급업체 생성 -->
-	<insert id="createSupplyCompany" parameterType="SupplyCompany">
-		/* TssBusiness.createSupplyCompany */
-		INSERT INTO TB_SUPPLY_COMPANY (
-		       SUPPLY_COMP_CD
-		     , SUPPLY_COMP_NM
-		     , PROVIER_NO
-		     , BIZ_GB
-		     , BIZ_NO
-		     , BIZ_KIND
-		     , BIZ_TYPE
-		     , OWNER_NM
-		     , BIZ_ZIPCODE
-		     , BIZ_BASE_ADDR
-		     , BIZ_DTL_ADDR
-		     , MAIN_TELNO
-		     , MAIN_FAXNO
-		     , HOMEPAGE_URL
-		     , DISTRIBUTION_GB
-		     , SHOT_DELV_YN
-		     , SUPPLY_STAT
+	<!-- 배송비정책 생성 -->
+	<insert id="createDeliveryFeePolicy" parameterType="DelvFeePolicy">
+		/* TssBusiness.createDeliveryFeePolicy */
+		INSERT INTO TB_DELV_FEE_POLICY (
+		       DELV_FEE_CD
+		     , SUPPLY_COMP_CD
+		     , DELV_FEE_CRITE
 		     , MIN_ORD_AMT
 		     , DELV_FEE
-		     , SELL_FEE_RATE
-		     , SETTLE_DAY
-		     , BANK_CD
-		     , ACCOUNT_NO
-		     , DEPOSITOR_NM
-		     , CS_CHARGE_NM
-		     , CS_CHARGE_TELNO
-		     , SETTLE_CHARGE_NM
-		     , SETTLE_CHARGE_TELNO
-		     , SETTLE_CHARGE_EMAIL
-		     , BILL_EMAIL
-		     , ECONTRACT_YN
-		     , REMARKS
+		     , RTN_DELV_FEE
 		     , USE_YN
 		     , REG_NO
 		     , REG_DT
@@ -121,46 +106,15 @@
 		     , UPD_DT
 		)
 		VALUES (
-		       (SELECT CONCAT('S',IFNULL(LPAD(SUBSTRING(MAX(SUPPLY_COMP_CD),2) + 1,4,'0'),'0000'))
-		        FROM   TB_SUPPLY_COMPANY Z
-		        WHERE  SUPPLY_COMP_CD LIKE 'S%'
+		       (SELECT CONCAT(IFNULL(SUPPLY_COMP_CD,#{supplyCompCd}),'_',IFNULL(LPAD(SUBSTRING(MAX(DELV_FEE_CD),INSTR(MAX(DELV_FEE_CD),'_') + 1) + 1,2,'0'),'01'))
+		        FROM   TB_DELV_FEE_POLICY Z
+		        WHERE  SUPPLY_COMP_CD LIKE CONCAT(#{supplyCompCd},'%')
 		       )
-		     , #{supplyCompNm}
-		     , (SELECT CASE WHEN MAX(PROVIER_NO) IS NULL THEN 40000   /* AS-IS 최대 수보다 크게 수정해야함*/
-		               ELSE (MAX(PROVIER_NO) + 1) END
-		        FROM   TB_SUPPLY_COMPANY Z
-		        WHERE  1 = 1
-		        AND PROVIER_NO > 40000                  /* AS-IS 최대 수보다 크게 크게 수정해야함*/
-		       )
-		     , #{bizGb}
-		     , #{bizNo}
-		     , #{bizKind}
-		     , #{bizType}
-		     , #{ownerNm}
-		     , #{bizZipcode}
-		     , #{bizBaseAddr}
-		     , #{bizDtlAddr}
-		     , #{mainTelno}
-		     , #{mainFaxno}
-		     , #{homepageUrl}
-		     , #{distributionGb}
-		     , #{shotDelvYn}
-		     , #{supplyStat}
+		     , #{supplyCompCd}
+		     , #{delvFeeCrite}
 		     , IFNULL(#{minOrdAmt},0)
 		     , IFNULL(#{delvFee},0)
-		     , IFNULL(#{sellFeeRate},0.0)
-		     , #{settleDay}
-		     , #{bankCd}
-		     , #{accountNo}
-		     , #{depositorNm}
-		     , #{csChargeNm}
-		     , #{csChargeTelno}
-		     , #{settleChargeNm}
-		     , #{settleChargeTelno}
-		     , #{settleChargeEmail}
-		     , #{billEmail}
-		     , #{econtractYn}
-		     , #{remarks}
+		     , IFNULL(#{rtnDelvFee},0)
 		     , #{useYn}
 		     , #{regNo}
 		     , NOW()
@@ -169,45 +123,116 @@
 		)
 	</insert>
 	
-	<!-- 공급업체 수정 -->
-	<update id="updateSupplyCompany" parameterType="SupplyCompany">
-		/* TssBusiness.updateSupplyCompany */
-		UPDATE TB_SUPPLY_COMPANY
-		SET    SUPPLY_COMP_NM = #{supplyCompNm}
-		     , BIZ_GB = #{bizGb}
-		     , BIZ_NO = #{bizNo}
-		     , BIZ_KIND = #{bizKind}
-		     , BIZ_TYPE = #{bizType}
-		     , OWNER_NM = #{ownerNm}
-		     , BIZ_ZIPCODE = #{bizZipcode}
-		     , BIZ_BASE_ADDR = #{bizBaseAddr}
-		     , BIZ_DTL_ADDR = #{bizDtlAddr}
-		     , MAIN_TELNO = #{mainTelno}
-		     , MAIN_FAXNO = #{mainFaxno}
-		     , HOMEPAGE_URL = #{homepageUrl}
-		     , DISTRIBUTION_GB = #{distributionGb}
-		     , SHOT_DELV_YN = #{shotDelvYn}
-		     , SUPPLY_STAT = #{supplyStat}
+	<!-- 배송비정책 수정 -->
+	<update id="updateDeliveryFeePolicy" parameterType="DelvFeePolicy">
+		/* TssBusiness.updateDeliveryFeePolicy */
+		UPDATE TB_DELV_FEE_POLICY
+		SET    DELV_FEE_CRITE = #{delvFeeCrite}
 		     , MIN_ORD_AMT = IFNULL(#{minOrdAmt},0)
 		     , DELV_FEE = IFNULL(#{delvFee},0)
-		     , SELL_FEE_RATE = IFNULL(#{sellFeeRate},0.0)
-		     , SETTLE_DAY = #{settleDay}
-		     , BANK_CD = #{bankCd}
-		     , ACCOUNT_NO = #{accountNo}
-		     , DEPOSITOR_NM = #{depositorNm}
-		     , CS_CHARGE_NM = #{csChargeNm}
-		     , CS_CHARGE_TELNO = #{csChargeTelno}
-		     , SETTLE_CHARGE_NM = #{settleChargeNm}
-		     , SETTLE_CHARGE_TELNO = #{settleChargeTelno}
-		     , SETTLE_CHARGE_EMAIL = #{settleChargeEmail}
-		     , BILL_EMAIL = #{billEmail}
-		     , ECONTRACT_YN = #{econtractYn}
-		     , REMARKS = #{remarks}
+		     , RTN_DELV_FEE = IFNULL(#{rtnDelvFee},0)
 		     , USE_YN = #{useYn}
 		     , UPD_NO = #{updNo}
 		     , UPD_DT = NOW()
-		WHERE  SUPPLY_COMP_CD = #{supplyCompCd}
+		WHERE  1 = 1
+		<choose>
+		    <when test="distributionGb == 'G065_20'"> <!-- 입점-위탁 -->
+		AND    DELV_FEE_CD = #{delvFeeCd}
+		    </when>
+		    <otherwise>
+		AND    SUPPLY_COMP_CD IN (SELECT SUPPLY_COMP_CD
+		                          FROM   TB_SUPPLY_COMPANY
+		                          WHERE  DISTRIBUTION_GB != 'G065_20' /*자사*/
+		                         )
+		    </otherwise>
+		</choose>
 	</update>
+	
+	<!-- 출고처 목록 -->
+	<select id="getDeliveryLocList" parameterType="DeliveryLoc" resultType="DeliveryLoc">
+		/* TssBusiness.getDeliveryLocList */
+		SELECT DL.DELV_LOC_CD        /*출고처코드*/
+		     , DL.DELV_LOC_NM        /*출고처명*/
+		     , SC.SUPPLY_COMP_NM     /*공급업체명*/
+		     , DL.DELV_LOC_ZIPCODE   /*출고처우편번호*/
+		     , DL.DELV_LOC_BASE_ADDR /*출고처기본주소*/
+		     , DL.DELV_LOC_DTL_ADDR  /*출고처상세주소*/
+		     , DL.RTN_LOC_ZIPCODE    /*반품처우편번호*/
+		     , DL.RTN_LOC_BASE_ADDR  /*반품처기본주소*/
+		     , DL.RTN_LOC_DTL_ADDR   /*반품처상세주소*/
+		     , DL.RTN_LOC_NM         /*반품처명*/
+		     , DL.USE_YN             /*사용여부*/
+		FROM   TB_DELIVERY_LOC DL
+		     , TB_SUPPLY_COMPANY SC
+		WHERE  DL.SUPPLY_COMP_CD = SC.SUPPLY_COMP_CD
+		AND    DL.SUPPLY_COMP_CD = #{supplyCompCd}
+		<if test="delvLocNm != null and delvLocNm !=''">
+		AND    LOWER(DL.DELV_LOC_NM) LIKE CONCAT('%',LOWER(#{delvLocNm}),'%')
+		</if>
+		<if test="useYn != null and useYn != ''">
+		AND    DL.USE_YN = #{useYn}
+		</if>
+		ORDER  BY DL.DELV_LOC_CD
+	</select>
+
+	<!-- 출고처 저장 -->
+	<insert id="saveDeliveryLoc" parameterType="DeliveryLoc">
+		/*  TssBusiness.saveDeliveryInfo */
+		INSERT INTO TB_DELIVERY_LOC (
+		       DELV_LOC_CD
+		     , DELV_LOC_NM
+		     , SUPPLY_COMP_CD
+		     , DELV_LOC_CLSF
+		     , DELV_LOC_ZIPCODE
+		     , DELV_LOC_BASE_ADDR
+		     , DELV_LOC_DTL_ADDR
+		     , RTN_LOC_ZIPCODE
+		     , RTN_LOC_BASE_ADDR
+		     , RTN_LOC_DTL_ADDR
+		     , RTN_LOC_NM
+		     , USE_YN
+		     , REG_NO
+		     , REG_DT
+		     , UPD_NO
+		     , UPD_DT
+		)
+		VALUES (
+		       CASE WHEN #{delvLocCd} IS NULL THEN
+		                (SELECT CONCAT('DL',LPAD(SUBSTRING(IFNULL(MAX(DELV_LOC_CD),'DL000'),3) + 1,3,'0'))
+		                 FROM   TB_DELIVERY_LOC Z
+		                 WHERE  DELV_LOC_CD LIKE 'DL%'
+		                )
+		            ELSE
+		                #{delvLocCd}
+		       END
+		     , #{delvLocNm}
+		     , #{supplyCompCd}
+		     , 'G024_30'
+		     , #{delvLocZipcode}
+		     , #{delvLocBaseAddr}
+		     , #{delvLocDtlAddr}
+		     , #{rtnLocZipcode}
+		     , #{rtnLocBaseAddr}
+		     , #{rtnLocDtlAddr}
+		     , #{rtnLocNm}
+		     , 'Y'
+		     , #{regNo}
+		     , NOW()
+		     , #{updNo}
+		     , NOW()
+		)
+		ON DUPLICATE KEY UPDATE
+		       DELV_LOC_NM = #{delvLocNm}
+		     , DELV_LOC_ZIPCODE = #{delvLocZipcode}
+		     , DELV_LOC_BASE_ADDR = #{delvLocBaseAddr}
+		     , DELV_LOC_DTL_ADDR = #{delvLocDtlAddr}
+		     , RTN_LOC_ZIPCODE = #{rtnLocZipcode}
+		     , RTN_LOC_BASE_ADDR = #{rtnLocBaseAddr}
+		     , RTN_LOC_DTL_ADDR = #{rtnLocDtlAddr}
+		     , RTN_LOC_NM = #{rtnLocNm}
+		     , UPD_NO = #{updNo}
+		     , UPD_DT = NOW()
+	</insert>
 
 	<!-- 브랜드 목록 -->
 	<select id="getBrandList" parameterType="Brand" resultType="Brand">
@@ -327,27 +352,6 @@
 		AND    USE_YN = 'Y'
 	</insert>
 	
-	<!-- 배송비정책 목록 -->
-	<select id="getDeliveryFeePolicyList" parameterType="DelvFeePolicy" resultType="DelvFeePolicy">
-		/* TsaBusiness.getDeliveryFeePolicyList */
-		SELECT DELV_FEE_CD    /*배송비정책코드*/
-		     , SUPPLY_COMP_CD /*공급업체코드*/
-		     , DELV_FEE_CRITE /*배송비부과기준*/
-		     , MIN_ORD_AMT    /*무료배송비최소주문금액*/
-		     , DELV_FEE       /*배송비*/
-		     , RTN_DELV_FEE   /*반품배송비*/
-		     , USE_YN         /*사용여부*/
-		FROM   TB_DELV_FEE_POLICY
-		WHERE  SUPPLY_COMP_CD = #{supplyCompCd}
-		<if test="delvFeeCd != null and delvFeeCd != ''">
-		AND DELV_FEE_CD = #{delvFeeCd}
-		</if>
-		<if test="useYn != null and useYn != ''">
-		AND USE_YN = #{useYn}
-		</if>
-		ORDER  BY DELV_FEE_CD
-	</select>
-	
 	<!-- 브랜드 공급업체 목록 -->
 	<select id="getBrandSupplyList" parameterType="String" resultType="Brand">
 		/* TsaBusiness.getBrandSupplyList */

+ 1 - 0
src/main/java/com/style24/persistence/mybatis/shop/TssPlan.xml

@@ -8,6 +8,7 @@
 		SELECT COUNT(1)
 		  FROM TB_PlAN
 		 WHERE 1=1
+		 AND DEL_YN = 'N'
 		 <include refid="getPlanListCondition_sql"/>
 	</select>
 	

+ 42 - 24
src/main/java/com/style24/scm/biz/dao/TssBusinessDao.java

@@ -5,6 +5,7 @@ import java.util.Collection;
 import com.style24.core.support.annotation.ShopDs;
 import com.style24.persistence.domain.Brand;
 import com.style24.persistence.domain.BrandMd;
+import com.style24.persistence.domain.DeliveryLoc;
 import com.style24.persistence.domain.DelvFeePolicy;
 import com.style24.persistence.domain.SupplyCompany;
 
@@ -42,14 +43,47 @@ public interface TssBusinessDao {
 	 */
 	void updateSupplyCompany(SupplyCompany supplyComp);
 
-//	/**
-//	 * 출고처관리 목록
-//	 * @param delvLoc - 출고처 정보
-//	 * @return
-//	 * @author gagamel
-//	 * @since 2020. 10. 16
-//	 */
-//	Collection<DeliveryLoc> getDeliveryLocList(DeliveryLoc delvLoc);
+	/**
+	 * 배송비정책 목록
+	 * @param supplyCompCd - 공급업체코드
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 11. 24
+	 */
+	Collection<DelvFeePolicy> getDeliveryFeePolicyList(DelvFeePolicy delvFeePolicy);
+
+	/**
+	 * 배송비정책 생성
+	 * @param delvFeePolicy - 배송비정책 정보
+	 * @author gagamel
+	 * @since 2020. 11. 24
+	 */
+	void createDeliveryFeePolicy(DelvFeePolicy delvFeePolicy);
+
+	/**
+	 * 배송비정책 수정
+	 * @param delvFeePolicy - 배송비정책 정보
+	 * @author gagamel
+	 * @since 2020. 11. 24
+	 */
+	void updateDeliveryFeePolicy(DelvFeePolicy delvFeePolicy);
+
+	/**
+	 * 출고처관리 목록
+	 * @param delvLoc - 출고처 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 10. 16
+	 */
+	Collection<DeliveryLoc> getDeliveryLocList(DeliveryLoc delvLoc);
+
+	/**
+	 * 출고처관리 저장
+	 * @param delvLoc - 출고처 정보
+	 * @author gagamel
+	 * @since 2020. 10. 16
+	 */
+	void saveDeliveryLoc(DeliveryLoc delvLoc);
 
 	/**
 	 * 브랜드 목록
@@ -126,14 +160,6 @@ public interface TssBusinessDao {
 	 */
 	void updateBrand(Brand brand);
 
-//	/**
-//	 * 출고처관리 저장
-//	 * @param delvLoc - 출고처 정보
-//	 * @author gagamel
-//	 * @since 2020. 10. 16
-//	 */
-//	void saveDeliveryLoc(DeliveryLoc delvLoc);
-//
 //	/**
 //	 * 재고연계관리 - 출고처 목록
 //	 * @param delvLoc - 출고처 정보
@@ -226,14 +252,6 @@ public interface TssBusinessDao {
 //	 */
 //	void deleteShipCompany(ShipCompany shipComp);
 
-	/**
-	 * 배송비정책 목록
-	 * @param DelvFeePolicy
-	 * @author gagamel
-	 * @since 2021. 01. 25
-	 */
-	Collection<DelvFeePolicy> getDeliveryFeePolicyList(DelvFeePolicy DelvFeePolicy);
-
 	/**
 	 * 브랜드 공급업체 목록
 	 * @param brandCd - 브랜드코드

+ 58 - 40
src/main/java/com/style24/scm/biz/service/TssBusinessService.java

@@ -5,13 +5,16 @@ import java.util.Collection;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.persistence.domain.Brand;
 import com.style24.persistence.domain.BrandMd;
+import com.style24.persistence.domain.DeliveryLoc;
 import com.style24.persistence.domain.DelvFeePolicy;
 import com.style24.persistence.domain.SupplyCompany;
 import com.style24.scm.biz.dao.TssBusinessDao;
+import com.style24.scm.support.security.session.TssSession;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -43,44 +46,69 @@ public class TssBusinessService {
 	}
 
 	/**
-	 * 공급업체 저장 처리
+	 * 공급업체 수정 처리
 	 * @param supplyComp - 공급업체 정보
 	 * @author gagamel
 	 * @since 2020. 10. 14
 	 */
-	public void saveSupplyCompany(SupplyCompany supplyComp) {
-		if (StringUtils.isNotBlank(supplyComp.getSupplyCompCd())) {
-			businessDao.updateSupplyCompany(supplyComp);
-		} else {
-			businessDao.createSupplyCompany(supplyComp);
+	public void updateSupplyCompany(SupplyCompany supplyComp) {
+		businessDao.updateSupplyCompany(supplyComp);
+	}
+
+	/**
+	 * 배송비정책 목록
+	 * @param delvFeePolicy - 배송비정책 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 11. 24
+	 */
+	public Collection<DelvFeePolicy> getDeliveryFeePolicyList(DelvFeePolicy delvFeePolicy) {
+		return businessDao.getDeliveryFeePolicyList(delvFeePolicy);
+	}
+
+	/**
+	 * 배송비정책 저장 처리
+	 * @param supplyComp - 공급업체 정보
+	 * @author gagamel
+	 * @since 2020. 10. 14
+	 */
+	public void saveDeliveryFeePolicyList(Collection<DelvFeePolicy> delvFeePolicyList) {
+		for (DelvFeePolicy delvFeePolicy : delvFeePolicyList) {
+			delvFeePolicy.setRegNo(TssSession.getInfo().getUserNo());
+			delvFeePolicy.setUpdNo(TssSession.getInfo().getUserNo());
+
+			if (!StringUtils.isEmpty(delvFeePolicy.getDelvFeeCd())) {
+				businessDao.updateDeliveryFeePolicy(delvFeePolicy);
+			} else {
+				businessDao.createDeliveryFeePolicy(delvFeePolicy);
+			}
 		}
 	}
 
-//	/**
-//	 * 출고처 목록
-//	 * @param delvLoc - 출고처 정보
-//	 * @return
-//	 * @author gagamel
-//	 * @since 2020. 10. 16
-//	 **/
-//	public Collection<DeliveryLoc> getDeliveryLocList(DeliveryLoc delvLoc) {
-//		return businessDao.getDeliveryLocList(delvLoc);
-//	}
+	/**
+	 * 출고처 목록
+	 * @param delvLoc - 출고처 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 10. 16
+	 **/
+	public Collection<DeliveryLoc> getDeliveryLocList(DeliveryLoc delvLoc) {
+		return businessDao.getDeliveryLocList(delvLoc);
+	}
 
-//	/**
-//	 * 출고처 저장
-//	 * @param delvLoc - 출고처 정보
-//	 * @author gagamel
-//	 * @since 2020. 10. 16
-//	 */
-//	@Transactional("shopTxnManager")
-//	public void saveDeliveryLoc(DeliveryLoc delvLoc) {
-//		if (StringUtils.isEmpty(delvLoc.getUseYn())) {
-//			delvLoc.setUseYn("N");
-//		}
-//
-//		businessDao.saveDeliveryLoc(delvLoc);
-//	}
+	/**
+	 * 출고처 Update
+	 * @param delvLoc - 출고처 정보
+	 * @author gagamel
+	 * @since 2020. 10. 16
+	 */
+	@Transactional("shopTxnManager")
+	public void saveDeliveryLoc(DeliveryLoc delvLoc) {
+		delvLoc.setSupplyCompCd(TssSession.getInfo().getSupplyCompCd());
+		delvLoc.setRegNo(TssSession.getInfo().getUserNo());
+		delvLoc.setUpdNo(TssSession.getInfo().getUserNo());
+		businessDao.saveDeliveryLoc(delvLoc);
+	}
 
 	/**
 	 * 브랜드 목록
@@ -316,16 +344,6 @@ public class TssBusinessService {
 //		}
 //	}
 
-	/**
-	 * 배송비정책 목록
-	 * @return
-	 * @author eskim
-	 * @since 2021. 01. 25
-	 */
-	public Collection<DelvFeePolicy> getDeliveryFeePolicyList(DelvFeePolicy delvFeePolicy) {
-		return businessDao.getDeliveryFeePolicyList(delvFeePolicy);
-	}
-
 	/**
 	 * 브랜드 공급업체 목록
 	 * @param brandCd - 브랜드코드

+ 151 - 2
src/main/java/com/style24/scm/biz/web/TssBusinessController.java

@@ -4,17 +4,28 @@ import java.util.Collection;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
+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.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.servlet.ModelAndView;
 
 import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.persistence.domain.Brand;
+import com.style24.persistence.domain.DeliveryLoc;
+import com.style24.persistence.domain.DelvFeePolicy;
+import com.style24.persistence.domain.SupplyCompany;
 import com.style24.scm.biz.service.TssBusinessService;
+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;
 
+import com.gagaframework.web.rest.server.GagaResponse;
+
 /**
  * 영업관리 Controller
  *
@@ -32,6 +43,146 @@ public class TssBusinessController extends TssBaseController {
 	@Autowired
 	private TssBusinessService businessService;
 
+	@Autowired
+	private TssRendererService rendererService;
+
+	/**
+	 * 공급업체관리 화면
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 10. 14
+	 */
+	@GetMapping("/supply/company/form")
+	public ModelAndView supplyCompanyForm() {
+		ModelAndView mav = new ModelAndView();
+
+		// 공급업체
+		mav.addObject("supplyCompList", rendererService.getSupplyCompanyList(TssSession.getInfo().getSupplyCompCd()));
+
+		// 입점상태
+		mav.addObject("supplyStatList", rendererService.getAvailCommonCodeList("G010"));
+
+		// 은행
+		mav.addObject("bankList", rendererService.getAvailCommonCodeList("G940"));
+
+		// 정산일
+		mav.addObject("settleDayList", rendererService.getAvailCommonCodeList("G075"));
+
+		mav.setViewName("/business/SupplyCompanyForm");
+
+		return mav;
+	}
+
+	/**
+	 * 공급업체 목록
+	 * @param supplyComp - 공급업체 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 10. 14
+	 */
+	@PostMapping("/supply/company/list")
+	@ResponseBody
+	public Collection<SupplyCompany> getSupplyCompanyList(@RequestBody SupplyCompany supplyComp) {
+		supplyComp.setSupplyCompCd(TssSession.getInfo().getSupplyCompCd());
+		return businessService.getSupplyCompanyList(supplyComp);
+	}
+
+	/**
+	 * 공급업체 저장 처리
+	 * @param supplyComp - 공급업체 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 10. 14
+	 */
+	@PostMapping("/supply/company/save")
+	@ResponseBody
+	public GagaResponse saveSupplyCompany(@RequestBody SupplyCompany supplyComp) {
+		supplyComp.setUpdNo(TssSession.getInfo().getUserNo());
+
+		businessService.updateSupplyCompany(supplyComp);
+
+		return super.ok(message.getMessage("SUCC_0001"));
+	}
+
+	/**
+	 * 공급업체출고처관리 화면
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 10. 16
+	 **/
+	@GetMapping("/supply/company/delvloc/form")
+	public ModelAndView deliveryLocForm() {
+		ModelAndView mav = new ModelAndView();
+
+		// 공급업체
+		mav.addObject("supplyCompList", rendererService.getSupplyCompanyList(TssSession.getInfo().getSupplyCompCd()));
+
+		mav.setViewName("business/DeliveryLocForm");
+
+		return mav;
+	}
+
+	/**
+	 * 공급업체출고처 목록
+	 * @param delvLoc - 출고처 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 10. 16
+	 **/
+	@PostMapping("/supply/company/delvloc/list")
+	@ResponseBody
+	public Collection<DeliveryLoc> getDeliveryLocList(@RequestBody DeliveryLoc delvLoc) {
+		delvLoc.setSupplyCompCd(TssSession.getInfo().getSupplyCompCd());
+		return businessService.getDeliveryLocList(delvLoc);
+	}
+
+	/**
+	 * 공급업체출고처 저장 처리
+	 * @param delvLoc - 출고처 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 10. 16
+	 */
+	@PostMapping("/supply/company/delvloc/save")
+	@ResponseBody
+	public GagaResponse saveDeliveryLoc(@RequestBody DeliveryLoc delvLoc) {
+		businessService.saveDeliveryLoc(delvLoc);
+		return super.ok(message.getMessage("SUCC_0001"));
+	}
+
+	/**
+	 * 배송비정책 목록
+	 * @param supplyCompCd - 공급업체코드
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 11. 24
+	 **/
+	@GetMapping("/delivery/fee/policy/list/{supplyCompCd}")
+	@ResponseBody
+	public Collection<DelvFeePolicy> getDeliveryFeePolicyList(@PathVariable String supplyCompCd) {
+		DelvFeePolicy delvFeePolicy = new DelvFeePolicy();
+		delvFeePolicy.setSupplyCompCd(supplyCompCd);
+		return businessService.getDeliveryFeePolicyList(delvFeePolicy);
+	}
+
+	/**
+	 * 배송비정책 등록/수정 처리
+	 * @param delvFeePolicyList - 배송비정책 목록
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 11. 24
+	 */
+	@PostMapping("/delivery/fee/policy/list/save")
+	@ResponseBody
+	public GagaResponse saveDeliveryFeePolicyList(@RequestBody Collection<DelvFeePolicy> delvFeePolicyList) {
+		if (delvFeePolicyList == null || delvFeePolicyList.isEmpty()) {
+			throw new IllegalStateException(message.getMessage("FAIL_1001"));
+		}
+
+		businessService.saveDeliveryFeePolicyList(delvFeePolicyList);
+		return super.ok(message.getMessage("SUCC_0001"));
+	}
+
 	/**
 	 * 브랜드 목록
 	 * @param brand - 브랜드 정보
@@ -42,9 +193,7 @@ public class TssBusinessController extends TssBaseController {
 	@PostMapping("/brand/list")
 	@ResponseBody
 	public Collection<Brand> getBrandList(Brand brand) {
-
 		return businessService.getBrandList(brand);
 	}
 
-
 }

+ 21 - 149
src/main/webapp/WEB-INF/views/business/DeliveryLocForm.html

@@ -30,10 +30,6 @@
 			<form id="searchForm" name="searchForm" action="#" th:action="@{'/business/supply/company/delvloc/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
 				<table class="frmStyle" aria-describedby="검색조건">
 					<colgroup>
-						<col style="width:10%;"/>
-						<col style="width:15%;"/>
-						<col style="width:10%;"/>
-						<col style="width:15%;"/>
 						<col style="width:10%;"/>
 						<col style="width:15%;"/>
 						<col style="width:10%;"/>
@@ -42,22 +38,10 @@
 					<tr>
 						<th>공급업체</th>
 						<td>
-							<select name="supplyCompCd">
-								<option value="">[전체]</option>
+							<select name="supplyCompCd" disabled="disabled">
 								<option th:if="${supplyCompList}" th:each="oneData, status : ${supplyCompList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
 							</select>
 						</td>
-						<th>출고처유형</th>
-						<td>
-							<select name="delvLocClsf">
-								<option value="">[전체]</option>
-								<option th:if="${delvLocClsfList}" th:each="oneData, status : ${delvLocClsfList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
-							</select>
-						</td>
-						<th>출고처명</th>
-						<td>
-							<input type="text" name="delvLocNm" maxlength="50"/>
-						</td>
 						<th>사용여부</th>
 						<td>
 							<select name="useYn">
@@ -88,7 +72,7 @@
 			</ul>
 			<!-- //버튼 배치 영역 -->
 			
-			<div id="gridList" style="width: 100%; height: 470px" class="ag-theme-balham"></div>
+			<div id="gridList" style="width: 100%; height: 270px" class="ag-theme-balham"></div>
 		</div>
 		<!-- //리스트 영역 -->
 		
@@ -100,73 +84,21 @@
 						<col style="width:10%;"/>
 						<col style="width:15%;"/>
 						<col style="width:10%;"/>
-						<col style="width:15%;"/>
-						<col style="width:10%;"/>
-						<col style="width:15%;"/>
-						<col style="width:10%;"/>
-						<col style="width:15%;"/>
+						<col/>
 					</colgroup>
 					<tr>
-						<th>출고처코드<i class="required" title="필수"></i></th>
-						<td>
-							<input type="text" class="w100" name="delvLocCd" maxlength="20" placeholder="출고처코드" required="required" data-valid-type="alphaNumeric" data-valid-name="출고처코드"/>
-						</td>
-						<th>출고처명<i class="required" title="필수"></i></th>
-						<td>
-							<input type="text" class="w200" name="delvLocNm" maxlength="100" placeholder="출고처명" required="required" data-valid-name="출고처명"/>
-						</td>
-						<th>출고처유형<i class="required" title="필수"></i></th>
-						<td>
-							<select name="delvLocClsf" required="required" data-valid-name="출고처유형">
-								<option value="">[선택]</option>
-								<option th:if="${delvLocClsfList}" th:each="oneData, status : ${delvLocClsfList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
-							</select>
-						</td>
-						<th>공급업체<i class="required" title="필수"></i></th>
-						<td>
-							<select name="supplyCompCd" required="required" data-valid-name="공급업체">
-								<option value="">[선택]</option>
-								<option th:if="${supplyCompList}" th:each="oneData, status : ${supplyCompList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
-							</select>
-						</td>
-					</tr>
-					<tr>
-						<th>재고적용율</th>
-						<td colspan="3">
-							<input type="text" class="w100 aR" name="stockApplRate" maxlength="5" data-valid-type="real"/>%
-							<span class="cBlue">* WMS부터 수신된 재고의 판매가용재고 적용율(%). 물류창고와 직송매장에 한함</span>
-						</td>
-						<th>출고수수료율</th>
+						<th>출고처코드</th>
 						<td colspan="3">
-							<input type="text" class="w100 aR" name="delvFeeRate" maxlength="5" data-valid-type="real"/>%
-							<span class="cBlue">* 직송매장 출고 시 적용할 출고수수료율(%)</span>
+							<input type="text" class="w100" name="delvLocCd" maxlength="20" placeholder="자동생성" readonly="readonly"/>
 						</td>
 					</tr>
 					<tr>
-						<th>출고지정순서</th>
-						<td colspan="3">
-							<input type="text" class="w100 aR" name="delvAssignOrd" maxlength="3" data-valid-type="integer"/>
-							<span class="cBlue">* 물류창고와 직송매장에 대해 출고지정되는 순서</span>
-						</td>
-<!-- 						<th>출고지정등급</th> -->
-<!-- 						<td> -->
-<!-- 							<select name="delvAssignGrade"> -->
-<!-- 								<option value="">[선택]</option> -->
-<!-- 								<option value="A">[A] A등급</option> -->
-<!-- 								<option value="B">[B] B등급</option> -->
-<!-- 								<option value="C">[C] C등급</option> -->
-<!-- 								<option value="Z">[Z] 출고지정제외</option> -->
-<!-- 							</select> -->
-<!-- 						</td> -->
-						<th>사용여부<i class="required" title="필수"></i></th>
-						<td colspan="3">
-							<label class="rdoBtn"><input type="radio" name="useYn" id="useYn" value="Y" checked="checked">Yes<span></span></label>
-							<label class="rdoBtn"><input type="radio" name="useYn" id="useYn" value="N">No<span></span></label>
+						<th>출고처명</th>
+						<td>
+							<input type="text" class="w200" name="delvLocNm" maxlength="100" placeholder="출고처명"/>
 						</td>
-					</tr>
-					<tr>
 						<th>출고처주소<i class="required" title="필수"></i></th>
-						<td colspan="7">
+						<td>
 							<input type="text" class="w100" name="delvLocZipcode" data-valid-name="출고처 우편번호" readonly="readonly"/>
 							<button type="button" class="btn btn-info btn-sm" onclick="fnOpenDaumAddr('delvLoc');">우편번호찾기</button>
 							<input type="text" class="w300" name="delvLocBaseAddr" required="required" data-valid-name="출고처 기본주소" readonly="readonly"/>
@@ -180,7 +112,7 @@
 							<input type="text" class="w200" name="rtnLocNm" maxlength="100" placeholder="반품처명"/>
 						</td>
 						<th>반품처주소<i class="required" title="필수"></i></th>
-						<td colspan="5">
+						<td>
 							<input type="text" class="w100" name="rtnLocZipcode" data-valid-name="반품처 우편번호" readonly="readonly"/>
 							<button type="button" class="btn btn-info btn-sm" onclick="fnOpenDaumAddr('rtnLoc');">우편번호찾기</button>
 							<input type="text" class="w300" name="rtnLocBaseAddr" required="required" data-valid-name="반품처 기본주소" readonly="readonly"/>
@@ -205,11 +137,6 @@
 
 <script th:inline="javascript">
 /*<![CDATA[*/
-	let supplyCompList = gagajf.convertToArray([[${supplyCompList}]]);
-	let delvLocClsfList = gagajf.convertToArray([[${delvLocClsfList}]]);
-	let delvGradeList = { "A":"A등급", "B":"B등급", "C":"C등급", "Z":"출고지정제외" };
-	let invoicePrintTypeList = gagajf.convertToArray([[${invoicePrintTypeList}]]);
-
 	let columnDefs = [
 		{ headerName: "출고처코드", field: "delvLocCd", width: 100, cellClass: 'text-center' },
 		{
@@ -218,50 +145,14 @@
 				return '<a href="javascript:void(0);">' + params.value + '</a>';
 			}
 		},
-		{
-			headerName: "출고처유형", field: "delvLocClsf", width: 150, cellClass: 'text-center',
-			valueGetter: function (params) {
-				return gagaAgGrid.lookupValue(delvLocClsfList, params.data.delvLocClsf);
-			}
-		},
-		{
-			headerName: "매장POS", field: "btnPos", width: 120, cellClass: 'text-center',
-			cellRenderer: function(params) {
-				var btn = '';
-				if (params.value === '21') {
-					btn ='<button type="button" class="btn btn-success btn-sm" onclick="cfnPopPos(\'' + params.data.delvLocCd + '\');\">매장[POS]</button>';
-				}
-				return btn;
-			}
-		},
-		{
-			headerName: "공급업체", field: "supplyCompCd", width: 150, cellClass: 'text-center',
-			valueGetter: function (params) {
-				return gagaAgGrid.lookupValue(supplyCompList, params.data.supplyCompCd);
-			}
-		},
-		{ headerName: "재고적용율(%)", field: "stockApplRate", width: 120, cellClass: 'text-center' },
-		{ headerName: "출고수수료율(%)", field: "delvFeeRate", width:120, cellClass: 'text-center' },
-		{ headerName: "출고지정순서", field: "delvAssignOrd", width: 120, cellClass: 'text-center' },
-// 		{
-// 			headerName: "출고지정등급", field: "delvAssignGrade", width: 150, cellClass: 'text-center',
-// 			cellRenderer: function (params) {
-// 				return gagaAgGrid.lookupValue(delvGradeList, params.value);
-// 			}
-// 		},
-		{
-			headerName: "송장출력형태", field: "invoicePrintType", width:150 , cellClass: 'text-center',
-			valueGetter: function (params) {
-				return gagaAgGrid.lookupValue(invoicePrintTypeList, params.data.invoicePrintType);
-			}
-		},
+		{ headerName: "공급업체", field: "supplyCompNm", width: 150, cellClass: 'text-center' },
 		{ headerName: "출고처우편번호", field: "delvLocZipcode", width: 150, cellClass: 'text-center', hide: true },
-		{ headerName: "출고처기본주소", field: "delvLocBaseAddr", width: 300, hide: true },
-		{ headerName: "출고처상세주소", field: "delvLocDtlAddr", width: 300, hide: true },
-		{ headerName: "반품처명", field: "rtnLocNm", width: 100, cellClass: 'text-center', hide: true },
-		{ headerName: "반품처우편번호", field: "rtnLocZipcode", width: 150, cellClass: 'text-center', hide: true },
-		{ headerName: "반품처기본주소", field: "rtnLocBaseAddr", width: 300, hide: true },
-		{ headerName: "반품처상세주소", field: "rtnLocDtlAddr", width: 300, hide: true },
+		{ headerName: "출고처기본주소", field: "delvLocBaseAddr", width: 300 },
+		{ headerName: "출고처상세주소", field: "delvLocDtlAddr", width: 200 },
+		{ headerName: "반품처명", field: "rtnLocNm", width: 100, cellClass: 'text-center' },
+		{ headerName: "반품처우편번호", field: "rtnLocZipcode", width: 150, cellClass: 'text-center' },
+		{ headerName: "반품처기본주소", field: "rtnLocBaseAddr", width: 300 },
+		{ headerName: "반품처상세주소", field: "rtnLocDtlAddr", width: 200 },
 		{
 			headerName: "사용여부", field: "useYn", width: 100, cellClass: 'text-center',
 			valueGetter: function (params) { return params.data.useYn == 'Y' ? 'Yes' : 'No'; }
@@ -275,16 +166,9 @@
 		if (event.colDef.field != 'delvLocNm')
 			return;
 		
-		$('#detailForm input[name=delvLocCd]').attr('readonly', true);
 		$('#detailForm input[name=delvLocCd]').val(event.data.delvLocCd);
 		$('#detailForm input[name=delvLocNm]').val(event.data.delvLocNm);
-		$('#detailForm select[name=delvLocClsf]').val(event.data.delvLocClsf);
-		$('#detailForm select[name=supplyCompCd]').val(event.data.supplyCompCd);
-		$('#detailForm input[name=delvAssignOrd]').val(event.data.delvAssignOrd);
-		$('#detailForm select[name=delvAssignGrade]').val(event.data.delvAssignGrade);
-		$('#detailForm input[name=stockApplRate]').val(Number(event.data.stockApplRate).addComma());
-		$('#detailForm input[name=delvFeeRate]').val(Number(event.data.delvFeeRate).addComma());
-		$('#detailForm select[name=invoicePrintType]').val(event.data.invoicePrintType	);
+		$('#detailForm select[name=supplyCompNm]').val(event.data.supplyCompNm);
 		$('#detailForm input[name=delvLocZipcode]').val(event.data.delvLocZipcode);
 		$('#detailForm input[name=delvLocBaseAddr]').val(event.data.delvLocBaseAddr);
 		$('#detailForm input[name=delvLocDtlAddr]').val(event.data.delvLocDtlAddr);
@@ -295,29 +179,17 @@
 		$('#detailForm input:radio[name=useYn]:input[value= ' + event.data.useYn + '] ').click();
 	}
 
-	// 출고처유형 셀렉트박스 변경 시 이벤트
-	$('#detailForm select[name=delvLocClsf]').on('change', function() {
-		let val = $(this).val();
-		
-		if (val == 'G024_10' || val == 'G024_21') { // 물류창고, 직송매장
-			$('#detailForm input[name=stockApplRate]').val(100);
-		} else {
-			$('#detailForm input[name=stockApplRate]').val('');
-		}
-	});
-	
 	// 검색
 	$('#btnSearch').on('click', function() {
 		gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm');
 	});
-
+	
 	// 신규버튼
 	$('#btnNew').on('click', function() {
 		$("#detailForm")[0].reset();
-		$('#detailForm input[name=delvLocCd]').attr('readonly', false);
-		$('#detailForm input[name=delvLocCd]').focus();
+		$('#detailForm input[name=delvLocNm]').focus();
 	});
-	
+
 	// 저장
 	$("#btnSave").on("click", function() {
 		// 필수값 체크

+ 283 - 145
src/main/webapp/WEB-INF/views/business/SupplyCompanyForm.html

@@ -31,18 +31,22 @@
 				<table class="frmStyle" aria-describedby="검색조건">
 					<colgroup>
 						<col style="width:10%;"/>
-						<col style="width:40%;"/>
+						<col style="width:15%;"/>
+						<col style="width:10%;"/>
+						<col style="width:30%;"/>
 						<col style="width:10%;"/>
 						<col/>
 					</colgroup>
 					<tr>
-						<th>검색어</th>
+						<th>공급업체</th>
 						<td>
-							<select name="searchGb">
-								<option value="NAME">업체명</option>
-								<option value="OWNER">대표자명</option>
+							<select name="supplyCompCd" disabled="disabled">
+								<option th:if="${supplyCompList}" th:each="oneData, status : ${supplyCompList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
 							</select>
-							<input type="text" name="searchTxt" class="w300" maxlength="20"/>
+						</td>
+						<th>대표자명</th>
+						<td>
+							<input type="text" name="ownerNm" class="w300" maxlength="20"/>
 						</td>
 						<th>입점상태</th>
 						<td>
@@ -74,13 +78,14 @@
 			</ul>
 			<!-- //버튼 배치 영역 -->
 			
-			<div id="gridList" style="width: 100%; height: 470px" class="ag-theme-balham"></div>
+			<div id="gridList" style="width: 100%; height: 270px" class="ag-theme-balham"></div>
 		</div>
 		<!-- //리스트 영역 -->
 		
 		<!-- 등록/수정 -->
 		<div class="panelStyle">
 			<form id="detailForm" name="detailForm" action="#" th:action="@{'/business/supply/company/save'}">
+				<h4>기본정보</h4>
 				<table class="frmStyle" aria-describedby="등록/수정 폼">
 					<colgroup>
 						<col style="width:10%;"/>
@@ -97,151 +102,134 @@
 						<td>
 							<input type="text" class="w150" name="supplyCompCd" placeholder="자동생성" maxlength="5" data-valid-name="업체코드" readonly="readonly"/>
 						</td>
-						<th>업체명<i class="required" title="필수"></i></th>
+						<th>업체명</th>
 						<td>
-							<input type="text" name="supplyCompNm" maxlength="100" required="required" data-valid-name="업체명"/>
+							<input type="text" name="supplyCompNm" maxlength="100" readonly="readonly"/>
 						</td>
-						<th>사업자구분<i class="required" title="필수"></i></th>
-						<td>
-							<label class="rdoBtn"><input type="radio" name="bizGb" id="bizGb" value="C" checked="checked"/>법인<span></span></label>
-							<label class="rdoBtn"><input type="radio" name="bizGb" id="bizGb" value="P"/>개인<span></span></label>
-						</td>
-						<th>사업자등록번호<i class="required" title="필수"></i></th>
-						<td>
-							<input type="text" name="bizNo" maxlength="20" required="required" data-valid-name="사업자등록번호"/>
+						<th>공급벤더</th>
+						<td colspan="3">
+							<input type="text" class="w200" name="supplyVendorNm" readonly="readonly"/>
+							<input name="supplyVendorCd" type="text" class="w100" maxlength="20" readonly="readonly"/>
 						</td>
 					</tr>
 					<tr>
-						<th>업종<i class="required" title="필수"></i></th>
+						<th>사업자구분</th>
 						<td>
-							<input type="text" name="bizKind" maxlength="100" required="required" data-valid-name="업종"/>
+							<label class="rdoBtn"><input type="radio" name="bizGb" value="C" checked="checked" readonly="readonly"/>법인<span></span></label>
+							<label class="rdoBtn"><input type="radio" name="bizGb" value="P" readonly="readonly"/>개인<span></span></label>
 						</td>
-						<th>업태<i class="required" title="필수"></i></th>
+						<th>사업자등록번호</th>
 						<td>
-							<input type="text" name="bizType" maxlength="100" required="required" data-valid-name="업태"/>
+							<input type="text" name="bizNo" maxlength="20" readonly="readonly"/>
 						</td>
-						<th>입점상태<i class="required" title="필수"></i></th>
-						<td>
-							<select name="supplyStat" id="supplyStat">
-								<option value="">[선택]</option>
-								<option th:if="${supplyStatList}" th:each="oneData, status : ${supplyStatList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
-							</select>
-						</td>
-						<th>대표자명<i class="required" title="필수"></i></th>
-						<td>
-							<input type="text" name="ownerNm" maxlength="50" required="required" data-valid-name="대표자명"/>
+						<th>업종</th>
+						<td colspan="3">
+							<input type="text" name="bizKind" maxlength="100" readonly="readonly"/>
 						</td>
 					</tr>
 					<tr>
-						<th rowspan="2">사업장주소<i class="required" title="필수"></i></th>
-						<td colspan="3" rowspan="2">
-							<input type="text" name="bizZipcode"  class="w100" data-valid-name="우편번호" readonly="readonly"/>
-							&nbsp;&nbsp;&nbsp;
-							<button type="button" class="btn btn-info btn-sm" onclick="fnOpenDaumAddr();">우편번호찾기</button>
-							<br>
-							<input type="text" name="bizBaseAddr" class="w300" maxlength="200" required="required" data-valid-name="사업장주소" readonly="readonly"/>
-							-
-							<input type="text" name="bizDtlAddr" class="w300" maxlength="200"/>
-						</td>
-						<th>홈페이지URL</th>
+						<th>업태</th>
 						<td colspan="3">
-							<input type="text" name="homepageUrl" data-valid-name="홈페이지URL"/>
+							<input type="text" name="bizType" maxlength="100" readonly="readonly"/>
 						</td>
-					</tr>
-					<tr>
-						<th>대표전화<i class="required" title="필수"></i></th>
+						<th>대표자명</th>
 						<td>
-							<input type="text" name="mainTelno" placeholder="02-0000-0000" maxlength="20" required="required" data-valid-name="대표전화"/>
+							<input type="text" name="ownerNm" maxlength="50" readonly="readonly"/>
 						</td>
-						<th>대표팩스번호</th>
+						<th>대표전화</th>
 						<td>
-							<input type="text" name="mainFaxno" placeholder="02-0000-0000" maxlength="20" data-valid-name="대표팩스번호"/>
+							<input type="text" name="mainTelno" maxlength="20" readonly="readonly"/>
 						</td>
 					</tr>
 					<tr>
-						<th>유통구분<i class="required" title="필수"></i></th>
+						<th>대표팩스번호</th>
 						<td>
-							<select name="distributionGb" data-valid-name="유통구분">
-								<option value="">[선택]</option>
-								<option th:if="${distributionGbList}" th:each="oneData, status : ${distributionGbList}" th:value="${oneData.cd}" th:text="${oneData.cdNm}" th:selected="${bankNm}"></option>
-							</select>
+							<input type="text" class="w200" name="mainFaxno" maxlength="20" readonly="readonly"/>
 						</td>
-						<th>무료배송비최소주문금액<i class="required" title="필수"></i></th>
-						<td>
-							<input type="text" name="minOrdAmt" class="w100 aR" placeholder="30,000" maxlength="7" required="required" data-valid-type="integer" data-valid-name="무료배송비최소주문금액"/>원
+						<th>사업장주소</th>
+						<td colspan="5">
+							<input type="text" name="bizZipcode"  class="w100" data-valid-name="우편번호" readonly="readonly"/>
+							<input type="text" name="bizBaseAddr" class="w300" maxlength="200" readonly="readonly"/>
+							<input type="text" name="bizDtlAddr" class="w300" maxlength="200" readonly="readonly"/>
 						</td>
-						<th>배송비<i class="required" title="필수"></i></th>
+					</tr>
+					<tr>
+						<th>홈페이지URL</th>
+						<td colspan="3">
+							<input type="text" name="homepageUrl" maxlength="100"/>
+						</td>
+						<th>입점상태</th>
 						<td>
-							<input type="text" name="delvFee" class="w100 aR" placeholder="2,500" maxlength="7" required="required" data-valid-type="integer" data-valid-name="배송비"/>원
+							<select name="supplyStat" id="supplyStat" disabled="disabled">
+								<option th:if="${supplyStatList}" th:each="oneData, status : ${supplyStatList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+							</select>
 						</td>
-						<th>판매수수료율<i class="required" title="필수"></i></th>
+						<th>판매수수료율</th>
 						<td>
-							<input type="text" name="sellFeeRate" class="w100 aR" placeholder="0.0" maxlength="5" required="required" data-valid-type="real" data-valid-name="판매수수료율"/>%
+							<input type="text" name="sellFeeRate" class="w100 aR" placeholder="0.0" maxlength="5" data-valid-type="real" data-valid-name="판매수수료율" readonly="readonly"/>%
 						</td>
 					</tr>
 					<tr>
 						<th>CS담당자</th>
 						<td>
-							<input type="text" name="csChargeNm" class="w100 aR" maxlength="50"/>
+							<input type="text" name="csChargeNm" class="w100" maxlength="50"/>
 						</td>
 						<th>CS담당자 연락처</th>
 						<td>
-							<input type="text" name="csChargeTelno" placeholder="02-0000-0000" maxlength="20"/>
+							<input type="text" name="csChargeTelno" placeholder="02-0000-0000" maxlength="13"/>
 						</td>
 						<th>정산담당자</th>
 						<td>
-							<input type="text" name="settleChargeNm" class="w100 aR" maxlength="50"/>
+							<input type="text" name="settleChargeNm" class="w100" maxlength="50"/>
 						</td>
 						<th>정산담당자 연락처</th>
 						<td>
-							<input type="text" name="settleChargeTelno" placeholder="02-0000-0000" maxlength="20"/>
+							<input type="text" name="settleChargeTelno" placeholder="02-0000-0000" maxlength="13"/>
 						</td>
 					</tr>
 					<tr>
 						<th>정산담당자 이메일</th>
 						<td>
-							<input type="email" name="settleChargeEmail" maxlength="100"/>
+							<input type="text" name="settleChargeEmail" maxlength="100" data-valid-type="email"/>
 						</td>
 						<th>계산서 이메일</th>
 						<td>
-							<input type="email" name="billEmail" maxlength="100"/>
+							<input type="text" name="billEmail" maxlength="100" data-valid-type="email"/>
 						</td>
-						<th>전자계약여부<i class="required" title="필수"></i></th>
+						<th>전자계약여부</th>
 						<td>
-							<label class="rdoBtn"><input type="radio" name="econtractYn" value="Y" checked="checked">Yes<span></span></label>
-							<label class="rdoBtn"><input type="radio" name="econtractYn" value="N">No<span></span></label>
+							<label class="rdoBtn"><input type="radio" name="econtractYn" value="Y" checked="checked" readonly="readonly"/>Yes<span></span></label>
+							<label class="rdoBtn"><input type="radio" name="econtractYn" value="N" readonly="readonly"/>No<span></span></label>
 						</td>
-						<th>정산일<i class="required" title="필수"></i></th>
+						<th>정산주기</th>
 						<td>
-							매일&nbsp;<input type="text" name="settleDay" class="w100 aR" maxlength="2" data-valid-type="numeric"/>일
+							<select name="settleDay" disabled="disabled">
+								<option value="">[선택]</option>
+								<option th:if="${settleDayList}" th:each="oneData, status : ${settleDayList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+							</select>
 						</td>
 					</tr>
 					<tr>
 						<th>거래은행</th>
 						<td>
-							<select name="bankCd">
+							<select name="bankCd" disabled="disabled">
 								<option value="">[선택]</option>
-								<option th:if="${bankList}" th:each="oneData, status : ${bankList}"	th:value="${oneData.cd}"th:text="${oneData.cdNm}"th:selected="${bankNm}" ></option>
+								<option th:if="${bankList}" th:each="oneData, status : ${bankList}" th:value="${oneData.cd}" th:text="${oneData.cdNm}"></option>
 							</select>
 						</td>
 						<th>계좌번호</th>
 						<td>
-							<input type="text" name="accountNo" maxlength="20"/>
+							<input type="text" name="accountNo" maxlength="20" readonly="readonly"/>
 						</td>
 						<th>예금주명</th>
-						<td>
-							<input type="text" name="depositorNm" maxlength="50"/>
-						</td>
-						<th>사용여부<i class="required" title="필수"></i></th>
-						<td colspan="7">
-							<label class="rdoBtn"><input type="radio" name="useYn" value="Y" checked="checked">Yes<span></span></label>
-							<label class="rdoBtn"><input type="radio" name="useYn" value="N">No<span></span></label>
+						<td colspan="3">
+							<input type="text" class="w100" name="depositorNm" maxlength="50" readonly="readonly"/>
 						</td>
 					</tr>
 					<tr>
-						<th>비고</th>
+						<th>배송안내</th>
 						<td colspan="7">
-							<textarea name="remarks" class="textareaR3"  data-valid-name="비고" ></textarea>
+							<textarea class="textareaR3" name="note" id="note"  data-valid-name="배송안내"></textarea>
 						</td>
 					</tr>
 				</table>
@@ -250,8 +238,49 @@
 			<!-- 버튼 배치 영역 -->
 			<ul class="panelBar">
 				<li class="right">
-					<button type="button" class="btn btn-info btn-lg" id="btnNew">신규</button>
-					<button type="button" class="btn btn-success btn-lg" id="btnSave">저장</button>
+					<button type="button" class="btn btn-success btn-lg" id="btnSave">기본정보 저장</button>
+				</li>
+			</ul>
+			<!-- //버튼 배치 영역 -->
+			
+			<form id="delvFeePolicyForm" name="delvFeePolicyForm" action="#" th:action="@{'/business/delivery/fee/policy/list/save'}">
+				<input type="hidden" name="delvFeeCd"/>
+				<input type="hidden" name="supplyCompCd"/>
+				<input type="hidden" name="delvFeeCrite"/>
+				<input type="hidden" name="minOrdAmt"/>
+				<input type="hidden" name="delvFee"/>
+				<input type="hidden" name="rtnDelvFee"/>
+				<input type="hidden" name="useYn"/>
+				
+				<h4 class="delvFeePolicy" style="display: none;">배송비 정책<button type="button" class="btn btn-info btn-ssm marL10" id="btnAddDelvFeePolicy"><i class="fa fa-plus" aria-hidden="true"></i></button></h4>
+				<table class="frmStyle delvFeePolicy" style="display: none;" aria-describedby="배송비 정책 등록/수정 폼">
+					<colgroup>
+						<col style="width:10%;"/>
+						<col style="width:25%;"/>
+						<col style="width:25%;"/>
+						<col style="width:15%;"/>
+						<col style="width:15%;"/>
+						<col style="width:10%;"/>
+					</colgroup>
+					<thead>
+						<tr>
+							<th>정책코드</th>
+							<th>배송비부과기준</th>
+							<th>무료배송비기준금액</th>
+							<th>배송비</th>
+							<th>반품배송비</th>
+							<th>사용여부</th>
+						</tr>
+					</thead>
+					<tbody id="tbodyDelvFeePolicy">
+					</tbody>
+				</table>
+			</form>
+			
+			<!-- 버튼 배치 영역 -->
+			<ul class="panelBar delvFeePolicy" style="display: none;">
+				<li class="right">
+					<button type="button" class="btn btn-success btn-lg" id="btnSaveDelvFeePolicy">배송비 정책 저장</button>
 				</li>
 			</ul>
 			<!-- //버튼 배치 영역 -->
@@ -262,7 +291,6 @@
 <script th:inline="javascript">
 /*<![CDATA[*/
 	let supplyStatList = gagajf.convertToArray([[${supplyStatList}]]);
-	let distributionGbList = gagajf.convertToArray([[${distributionGbList}]]);
 	let bankList = gagajf.convertToArray([[${bankList}]]);
 
 	let columnDefs = [
@@ -273,13 +301,19 @@
 				return '<a href="javascript:void(0);">' + params.value + '</a>';
 			}
 		},
+		{ headerName: "공급벤더코드", field: "supplyVendorCd", width: 100, cellClass: 'text-center', hide: true },
+		{ headerName: "공급벤더명", field: "supplyVendorNm", width: 150, cellClass: 'text-center', hide: true },
 		{
 			headerName: "사업자구분", field: "bizGb", width: 100, cellClass: 'text-center',
 			valueGetter: function (params) { return params.data.bizGb == 'C' ? '법인' : '개인'; }
 		},
-		{ headerName: "사업장자록번호", field: "bizNo", width: 120, cellClass: 'text-center' },
-		{ headerName: "업종", field: "bizKind", width: 200, cellClass: 'text-center' },
-		{ headerName: "업태", field: "bizType", width: 200, cellClass: 'text-center' },
+		{ headerName: "사업자등록번호", field: "bizNo", width: 120, cellClass: 'text-center' },
+		{
+			headerName: "전자계약여부", field: "econtractYn", width: 100, cellClass: 'text-center',
+			valueGetter: function (params) { return params.data.econtractYn == 'Y' ? 'Yes' : 'No'; }
+		},
+		{ headerName: "업종", field: "bizKind", width: 150, cellClass: 'text-center' },
+		{ headerName: "업태", field: "bizType", width: 150, cellClass: 'text-center' },
 		{
 			headerName: "입점상태", field: "supplyStat", width: 100, cellClass: 'text-center',
 			valueGetter: function (params) {
@@ -293,24 +327,6 @@
 		{ headerName: "대표전화번호", field: "mainTelno", width: 120, cellClass: 'text-center' },
 		{ headerName: "대표팩스번호", field: "mainFaxno", width: 120, cellClass: 'text-center' },
 		{ headerName: "홈페이지URL", field: "homepageUrl", width: 200 },
-		{
-			headerName: "유통구분", field: "distributionGb", width: 100, cellClass: 'text-center',
-			valueGetter: function (params) {
-				return gagaAgGrid.lookupValue(distributionGbList, params.data.distributionGb);
-			}
-		},
-		{
-			headerName: "무료배송비최소주문금액", field: "minOrdAmt", width: 150, cellClass: 'text-center',
-			valueGetter: function(params) {
-				return Number(params.data.minOrdAmt).addComma();
-			}
-		},
-		{
-			headerName: "배송비", field: "delvFee", width: 100, cellClass: 'text-center',
-			valueGetter: function(params) {
-				return Number(params.data.delvFee).addComma();
-			}
-		},
 		{
 			headerName: "판매수수료율", field: "sellFeeRate", width: 120, cellClass: 'text-center',
 			valueGetter: function(params) {
@@ -323,8 +339,7 @@
 		{ headerName: "정산담당자연락처", field: "settleChargeTelno", width: 100, cellClass: 'text-center', hide: true },
 		{ headerName: "정산담당자이메일", field: "settleChargeEmail", width: 100, cellClass: 'text-center', hide: true },
 		{ headerName: "계산서이메일", field: "billEmail", width: 100, cellClass: 'text-center', hide: true },
-		{ headerName: "전자계약여부", field: "econtractYn", width: 100, cellClass: 'text-center', hide: true },
-		{ headerName: "정산일(매월)", field: "settleDay", width: 100, cellClass: 'text-center', hide: true },
+		{ headerName: "정산주기", field: "settleDay", width: 100, cellClass: 'text-center', hide: true },
 		{
 			headerName: "은행명", field: "bankCd", width: 150, cellClass: 'text-center', hide: true,
 			valueGetter: function (params) {
@@ -333,11 +348,7 @@
 		},
 		{ headerName: "계좌번호", field: "accountNo", width: 150, cellClass: 'text-center', hide: true },
 		{ headerName: "예금주명", field: "depositorNm", width: 100, cellClass: 'text-center', hide: true },
-		{
-			headerName: "사용여부", field: "useYn", width: 100, cellClass: 'text-center',
-			valueGetter: function (params) { return params.data.useYn == 'Y' ? 'Yes' : 'No'; }
-		},
-		{ headerName: "비고", field: "remarks", width: 150, hide: true }
+		{ headerName: "배송안내", field: "note", width: 150, hide: true }
 	];
 
 	let gridOptions = gagaAgGrid.getGridOptions(columnDefs);
@@ -349,10 +360,17 @@
 		
 		$('#detailForm input[name=supplyCompCd]').val(event.data.supplyCompCd);
 		$('#detailForm input[name=supplyCompNm]').val(event.data.supplyCompNm);
+		$('#detailForm input[name=supplyVendorCd]').val(event.data.supplyVendorCd);
+		$('#detailForm input[name=supplyVendorNm]').val(event.data.supplyVendorNm);
 		$('#detailForm select[name=supplyStat]').val(event.data.supplyStat);
 		$('#detailForm input[name=ownerNm]').val(event.data.ownerNm);
-		$('#detailForm input:radio[name=useYn]:input[value= ' + event.data.useYn + '] ').click();
-		$('#detailForm input:radio[name=bizGb]:input[value= ' + event.data.bizGb + '] ').click();
+		
+		if (event.data.bizGb == 'C') {
+			$('#detailForm input:radio[name=bizGb]').eq(0).trigger('click');
+		} else {
+			$('#detailForm input:radio[name=bizGb]').eq(1).trigger('click');
+		}
+		
 		$('#detailForm input[name=bizNo] ').val(event.data.bizNo);
 		$('#detailForm input[name=bizKind]').val(event.data.bizKind);
 		$('#detailForm input[name=bizType]').val(event.data.bizType);
@@ -360,7 +378,7 @@
 		$('#detailForm input[name=bizBaseAddr]').val(event.data.bizBaseAddr);
 		$('#detailForm input[name=bizDtlAddr]').val(event.data.bizDtlAddr);
 		$('#detailForm input[name=homepageUrl]').val(event.data.homepageUrl);
-		$('#detailForm select[name=distributionGb]').val(event.data.distributionGb);
+		
 		$('#detailForm input[name=mainTelno]').val(event.data.mainTelno);
 		$('#detailForm input[name=mainFaxno]').val(event.data.mainFaxno);
 		$('#detailForm input[name=sellFeeRate]').val(event.data.sellFeeRate);
@@ -370,14 +388,22 @@
 		$('#detailForm input[name=settleChargeTelno]').val(event.data.settleChargeTelno);
 		$('#detailForm input[name=settleChargeEmail]').val(event.data.settleChargeEmail);
 		$('#detailForm input[name=billEmail]').val(event.data.billEmail);
-		$('#detailForm input:radio[name=econtractYn]:input[value= ' + event.data.econtractYn + '] ').click();
-		$('#detailForm input[name=settleDay]').val(event.data.settleDay);
-		$('#detailForm input[name=minOrdAmt]').val(Number(event.data.minOrdAmt).addComma());
-		$('#detailForm input[name=delvFee]').val(Number(event.data.delvFee).addComma());
+		
+		if (event.data.econtractYn == 'Y') {
+			$('#detailForm input:radio[name=econtractYn]').eq(0).trigger('click');
+		} else {
+			$('#detailForm input:radio[name=econtractYn]').eq(1).trigger('click');
+		}
+		
+		$('#detailForm select[name=settleDay]').val(event.data.settleDay);
 		$('#detailForm select[name=bankCd]').val(event.data.bankCd);
 		$('#detailForm input[name=accountNo]').val(event.data.accountNo);
 		$('#detailForm input[name=depositorNm]').val(event.data.depositorNm);
 		$('#detailForm textarea[name=remarks]').val(event.data.remarks);
+		$('#detailForm textarea[name=note]').val(event.data.note);
+		
+		// 배송비 정책 조회
+		fnGetDeliveryFeePolicy(event.data.supplyCompCd);
 	}
 
 	// 검색
@@ -385,18 +411,13 @@
 		gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm');
 	});
 	
-	// 신규버튼
-	$('#btnNew').on('click', function() {
-		$("#detailForm")[0].reset();
-	});
-
-	// 저장
+	// 기본정보 저장
 	$("#btnSave").on("click", function() {
 		// 필수값 체크
 		if (!gagajf.validation('#detailForm'))
 			return false;
 
-		mcxDialog.confirm("저장하시겠습니까?", {
+		mcxDialog.confirm("기본정보를 저장하시겠습니까?", {
 			cancelBtnText: "취소",
 			sureBtnText: "확인",
 			sureBtnClick: function() {
@@ -413,24 +434,141 @@
 		gagaAgGrid.exportToExcel('공급업체 목록', gridOptions);
 	});
 
-	/**
-	 * DAUM을 이용한 우편번호 팝업 레이어
-	 */
-	var fnOpenDaumAddr = function() {
-		let daumZip = new daum.Postcode({
-			oncomplete: function(data) {
-				// 우편번호와 주소 정보를 해당 필드에 넣는다.
-				$('#detailForm input[name=bizZipcode]').val(data.zonecode);
-				$('#detailForm input[name=bizBaseAddr]').val(cfnGetDaumRoadAddr(data));
-				$('#detailForm input[name=bizDtlAddr]').focus();
-				
-				cfnCloseDaumAddr();
-			},
-			width: '100%'
-		});
+	// 배송비 정책 추가
+	$('#btnAddDelvFeePolicy').on('click', function() {
+		let idx = $('#delvFeePolicyForm input[name=delvFeeCd]').length;
+		
+		let tag = '<tr>\n';
+		tag += '	<td align="center">\n';
+		tag += '		<input type="text" name="delvFeeCd" class="w100 aC" placeholder="자동생성" maxlength="20" readonly="readonly"/>\n';
+		tag += '		<input type="hidden" name="supplyCompCd" value="' + $('#detailForm input[name=supplyCompCd]').val() + '"/>\n';
+		tag += '	</td>\n';
+		tag += '	<td align="center">\n';
+		tag += '		<select name="delvFeeCrite" onclick="fnChangeDeliveryFeeCriterion(' + idx + ', this);">\n';
+		tag += '			<option value="G078_10">[G078_10] 조건부 무료</option>\n';
+		tag += '			<option value="G078_20">[G078_20] 무료</option>\n';
+		tag += '			<option value="G078_30">[G078_30] 유료</option>\n';
+		tag += '		</select>\n';
+		tag += '	</td>\n';
+		tag += '	<td align="center">\n';
+		tag += '		<input type="text" name="minOrdAmt" class="w100 aR" placeholder="" maxlength="7" required="required" data-valid-type="integer" data-valid-name="무료배송비기준금액"/>원 <span id="txtCriterion' + idx + '">이상</span>\n';
+		tag += '	</td>\n';
+		tag += '	<td align="center">\n';
+		tag += '		<input type="text" name="delvFee" class="w100 aR" placeholder="" maxlength="7" required="required" data-valid-type="integer" data-valid-name="배송비"/>원\n';
+		tag += '	</td>\n';
+		tag += '	<td align="center">\n';
+		tag += '		<input type="text" name="rtnDelvFee" class="w100 aR" placeholder="" maxlength="7" required="required" data-valid-type="integer" data-valid-name="반품배송비"/>원\n';
+		tag += '	</td>\n';
+		tag += '	<td align="center">\n';
+		tag += '		<select name="useYn">\n';
+		tag += '			<option value="Y">Yes</option>\n';
+		tag += '			<option value="N">No</option>\n';
+		tag += '		</select>\n';
+		tag += '	</td>\n';
+		tag += '</tr>\n';
+		
+		$('#tbodyDelvFeePolicy').append(tag);
+	});
+	
+	// 배송비 정책 조회
+	let fnGetDeliveryFeePolicy = function(supplyCompCd) {
+		$('#tbodyDelvFeePolicy').html('');
 		
-		cfnOpenDaumAddr(daumZip);
+		$.getJSON('/business/delivery/fee/policy/list/' + supplyCompCd
+			, function(result, status) {
+				if (result == null || result.length == 0) {
+					$('.delvFeePolicy').show();
+					return;
+				}
+				
+				$.each(result, function(idx, item) {
+					let tag = '<tr>\n';
+					tag += '	<td align="center">\n';
+					tag += '		<input type="text" name="delvFeeCd" class="w100 aC" placeholder="자동생성" value="' + item.delvFeeCd + '" maxlength="20" readonly="readonly"/>\n';
+					tag += '		<input type="hidden" name="supplyCompCd" value="' + item.supplyCompCd + '"/>\n';
+					tag += '	</td>\n';
+					tag += '	<td align="center">\n';
+					tag += '		<select name="delvFeeCrite" onclick="fnChangeDeliveryFeeCriterion(' + (idx + 1) + ', this);">\n';
+					tag += '			<option value="G078_10"' + (item.delvFeeCrite == "G078_10" ? " selected" : "") + '>[G078_10] 조건부 무료</option>\n';
+					tag += '			<option value="G078_20"' + (item.delvFeeCrite == "G078_20" ? " selected" : "") + '>[G078_20] 무료</option>\n';
+					tag += '			<option value="G078_30"' + (item.delvFeeCrite == "G078_30" ? " selected" : "") + '>[G078_30] 유료</option>\n';
+					tag += '		</select>\n';
+					tag += '	</td>\n';
+					tag += '	<td align="center">\n';
+					tag += '		<input type="text" name="minOrdAmt" class="w100 aR" placeholder="" value="' + item.minOrdAmt.addComma() + '" maxlength="7" required="required" data-valid-type="integer" data-valid-name="무료배송비기준금액"/>원 <span id="txtCriterion' + (idx + 1) + '">이상</span>\n';
+					tag += '	</td>\n';
+					tag += '	<td align="center">\n';
+					tag += '		<input type="text" name="delvFee" class="w100 aR" placeholder="" value="' + item.delvFee.addComma() + '" maxlength="7" required="required" data-valid-type="integer" data-valid-name="배송비"/>원\n';
+					tag += '	</td>\n';
+					tag += '	<td align="center">\n';
+					tag += '		<input type="text" name="rtnDelvFee" class="w100 aR" placeholder="" value="' + item.rtnDelvFee.addComma() + '" maxlength="7" required="required" data-valid-type="integer" data-valid-name="반품배송비"/>원\n';
+					tag += '	</td>\n';
+					tag += '	<td align="center">\n';
+					tag += '		<select name="useYn">\n';
+					tag += '			<option value="Y" ' + (item.useYn == "Y" ? "selected" : "") + '>Yes</option>\n';
+					tag += '			<option value="N" ' + (item.useYn == "N" ? "selected" : "") + '>No</option>\n';
+					tag += '		</select>\n';
+					tag += '	</td>\n';
+					tag += '</tr>\n';
+					
+					$('#tbodyDelvFeePolicy').append(tag);
+				});
+				
+				$('.delvFeePolicy').show();
+			});
 	}
+
+	// 배송비부과기준
+	var fnChangeDeliveryFeeCriterion = function(idx, obj) {
+		if ($(obj).val() == 'G078_10') {
+			$('#delvFeePolicyForm input[name=minOrdAmt]').eq(idx).attr('readonly', false);
+			$('#txtCriterion' + idx).html('이상');
+		} else if ($(obj).val() == 'G078_20') {
+			$('#delvFeePolicyForm input[name=minOrdAmt]').eq(idx).val(0);
+			$('#delvFeePolicyForm input[name=minOrdAmt]').eq(idx).attr('readonly', true);
+			$('#txtCriterion' + idx).html('이상');
+		} else if ($(obj).val() == 'G078_30') {
+			$('#delvFeePolicyForm input[name=minOrdAmt]').eq(idx).val(0);
+			$('#delvFeePolicyForm input[name=minOrdAmt]').eq(idx).attr('readonly', true);
+			$('#txtCriterion' + idx).html('금액에 상관 없음');
+		}
+	}
+	
+	// 배송비정책 저장
+	$("#btnSaveDelvFeePolicy").on("click", function() {
+		// 필수값 체크
+		if (!gagajf.validation('#delvFeePolicyForm'))
+			return false;
+
+		mcxDialog.confirm("배송비정책을 저장하시겠습니까?", {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function() {
+				// comma(,) 제거
+				gagajf.removeCommaAtNumberFormattedInput('#delvFeePolicyForm');
+				
+				var arrData = [];
+				$('#tbodyDelvFeePolicy tr').each(function(idx) {
+					var params = new Object();
+					params.delvFeeCd = $(this).find('input[name=delvFeeCd]').val();
+					params.supplyCompCd = $(this).find('input[name=supplyCompCd]').val();
+					params.delvFeeCrite = $(this).find('select[name=delvFeeCrite]').val();
+					params.minOrdAmt = $(this).find('input[name=minOrdAmt]').val();
+					params.delvFee = $(this).find('input[name=delvFee]').val();
+					params.rtnDelvFee = $(this).find('input[name=rtnDelvFee]').val();
+					params.useYn = $(this).find('select[name=useYn]').val();
+					params.distributionGb = $('#detailForm select[name=distributionGb]').val();
+					arrData.push(params);
+				});
+				
+				let jsonData = JSON.stringify(arrData);
+				gagajf.ajaxJsonSubmit($('#delvFeePolicyForm').prop('action'), jsonData, function() {
+					// 배송비정책 조회
+					fnGetDeliveryFeePolicy($('#detailForm input[name=supplyCompCd]').val());
+				});
+			}
+		});
+	});
 	
 	$(document).ready(function() {
 		// Create a agGrid