Sfoglia il codice sorgente

입점업체 정산 기능 구현

gagamel 4 anni fa
parent
commit
c8195db170

+ 40 - 9
src/main/java/com/style24/persistence/domain/SupplyCompFee.java

@@ -14,29 +14,60 @@ import lombok.Data;
 @Data
 public class SupplyCompFee extends TscBaseDomain {
 
-	private String usacYm;				// 정산연월
+	// 상품정산
+	private Integer ordNo;				// 주문번호
+	private Integer ordDtlNo;			// 주문상세번호
 	private String supplyVendorCd;		// 공급벤더코드
 	private String supplyCompCd;		// 공급업체코드
 	private String supplyCompNm;		// 공급업체명
+	private String settleDay;			// 정산주기
+	private String settleDayNm;			// 정산주기명
+	private String ordDt;				// 주문일시
+	private String settleGb;			// 정산구분
+	private String settleGbNm;			// 정산구분명
+	private String occurDt;				// 발생(출고/회수)일시
+	private String goodsCd;				// 상품코드
+	private String goodsNm;				// 상품명
+	private String brandCd;				// 브랜드코드
+	private String brandEnm;			// 브랜드영문명
+	private String itemCd;				// 단품코드
+	private String optCd1;				// 옵션코드1
+	private String optCd2;				// 옵션코드2
+	private int sellPrice;				// 판매가(정산용)
 	private int sellQty;				// 판매수량
-	private int realSellAmt;			// 실판매금액(=상품총액)
-	private int sellFeeAmt;				// 수수료(실판매금액 * 판매수수료율)
-	private int cpnDcAmt;				// 쿠폰할인총액
+	private int sellAmt;				// 판매금액(CPN1_DC_AMT가 빠진 금액이 들어가 있음)
+	private int cpnDcAmt;				// 쿠폰할인금액
 	private int selfCpnDcAmt;			// 자사쿠폰분담액
 	private int supplyCompCpnDcAmt;		// 입점쿠폰분담액
-	private int tmtbDcAmt;				// 다다익선할인총액
+	private int pntDcAmt;				// 포인트사용금액
+	private int tmtbDcAmt;				// 다다익선할인금액
 	private int selfTmtbDcAmt;			// 자사다다익선분담액
 	private int supplyCompTmtbDcAmt;	// 입점다다익선분담액
+	private int gfcdUseAmt;				// 상품권사용금액
+	private int realSellPrice;			// 실판매가
+	private int realSellAmt;			// 실판매금액(=상품총액. 쿠폰과 다다익선만 차감. 상품권과 포인트는 포함)
+	private double sellFeeRate;			// 판매수수료율
+	private int sellFeeAmt;				// 수수료(실판매금액 * 판매수수료율)
+	private int settleAmt;				// 정산대상액(실판매금액 - 수수료)
+
+	// 배송비정산
+	private String delvFeeGb;			// 배송비구분
+	private String delvFeeGbNm;			// 배송비구분명
+	private int delvFee;				// 배송비
+
+	// 정산확정
+	private String usacYm;				// 정산연월
+
+	// 검색조건
+	private String salesStdt;			// 매출시작일자
+	private String salesEddt;			// 매출종료일자
+	private String settleYm;			// 정산연월
 	private int billAmt;				// 계산서발행금액
 	private int supplyAmt;				// 공급금액
 	private int taxAmt;					// 세액
-	private int delvFee;				// 배송비
 	private int etcDeductAmt;			// 기타차감
 	private int giveAmt;				// 지급금액
 	private int receivableAmt;			// 미수금
 	private int totGiveAmt;				// 총지급금액
 
-	// 검색조건
-	private String settleYm;			// 정산연월
-
 }

+ 196 - 3
src/main/java/com/style24/persistence/mybatis/shop/TssSettle.xml

@@ -67,9 +67,202 @@
 		ORDER  BY AF_LINK_CD, AF_LINK_NM, OCCUR_DT, ORD_NO, ORD_DTL_STAT
 	</select>
 	
-	<!-- 입점업체정산 목록 -->
-	<select id="getSupplyCompanyFeeList" parameterType="SupplyCompFee" resultType="SupplyCompFee">
-		/* TsaSettle.getSupplyCompanyFeeList */
+	<!-- 입점업체 상품정산 목록 -->
+	<select id="getSupplyCompanyGoodsFeeList" parameterType="SupplyCompFee" resultType="SupplyCompFee">
+		/* TsaSettle.getSupplyCompanyGoodsFeeList */
+		SELECT ODIH.ORD_NO                                                                /*주문번호*/
+		     , ODIH.ORD_DTL_NO                                                            /*주문상세번호*/
+		     , ODIH.SUPPLY_COMP_CD                                                        /*공급업체코드*/
+		     , ODIH.SUPPLY_COMP_NM                                                        /*공급업체명*/
+		     , ODIH.SETTLE_DAY                                                            /*정산주기*/
+		     , ODIH.SETTLE_DAY_NM                                                         /*정산주기명*/
+		     , ODIH.ORD_DT                                                                /*주문일시*/
+		     , ODIH.SETTLE_GB                                                             /*정산구분*/
+		     , ODIH.SETTLE_GB_NM                                                          /*정산구분명*/
+		     , ODIH.OCCUR_DT                                                              /*발생일시*/
+		     , ODIH.GOODS_CD                                                              /*상품코드*/
+		     , ODIH.GOODS_NM                                                              /*상품명*/
+		     , ODIH.BRAND_CD                                                              /*브랜드코드*/
+		     , ODIH.BRAND_ENM                                                             /*브랜드명*/
+		     , ODIH.ITEM_CD                                                               /*단품코드*/
+		     , ODIH.OPT_CD1                                                               /*옵션코드1*/
+		     , ODIH.OPT_CD2                                                               /*옵션코드2*/
+		     , ODIH.SELL_PRICE                                                            /*판매가*/
+		     , ODIH.SELL_QTY                                                              /*판매수량*/
+		     , ODIH.SELL_AMT                                                              /*판매금액(ORD_AMT에는 CPN1_DC_AMT가 빠진 금액이 들어가 있음)*/
+		     , ODIH.CPN1_DC_AMT + ODIH.GOODS_CPN_DC_AMT + ODIH.CART_CPN_DC_AMT            /*쿠폰사용금액*/
+		     , ODIH.SELF_CPN_DC_AMT                                                       /*자사쿠폰분담액*/
+		     , ODIH.SUPPLY_COMP_CPN_DC_AMT                                                /*입점쿠폰분담액*/
+		     -- , ODIH.PNT_DC_AMT                                                            /*포인트사용금액*/
+		     , ODIH.TMTB_DC_AMT                                                           /*다다익선할인금액*/
+		     , ODIH.SELF_TMTB_DC_AMT                                                      /*자사다다익선분담액*/
+		     , ODIH.SUPPLY_COMP_TMTB_DC_AMT                                               /*입점다다익선분담액*/
+		     -- , ODIH.GFCD_USE_AMT                                                          /*상품권사용금액*/
+		     , CASE WHEN ODIH.SELL_QTY = 0 THEN 0
+		            ELSE
+		                (ODIH.SELL_AMT
+		                 - (ODIH.CPN1_DC_AMT + ODIH.GOODS_CPN_DC_AMT + ODIH.CART_CPN_DC_AMT)
+		                 - ODIH.TMTB_DC_AMT
+		                ) / ODIH.SELL_QTY
+		       END                                              AS REAL_SELL_PRICE        /*실판매가*/
+		     , ODIH.SELL_AMT
+		       - (ODIH.CPN1_DC_AMT + ODIH.GOODS_CPN_DC_AMT + ODIH.CART_CPN_DC_AMT)
+		       - ODIH.TMTB_DC_AMT                               AS REAL_SELL_AMT          /*실판매금액(=상품총액. 쿠폰과 다다익선만 차감. 상품권과 포인트는 포함)*/
+		     , ODIH.SELL_FEE_RATE                                                         /*판매수수료율*/
+		     , ROUND((ODIH.SELL_AMT
+		              - (ODIH.CPN1_DC_AMT + ODIH.GOODS_CPN_DC_AMT + ODIH.CART_CPN_DC_AMT)
+		              - ODIH.TMTB_DC_AMT
+		             ) * (ODIH.SELL_FEE_RATE / 100),0)          AS SELL_FEE_AMT           /*수수료*/
+		     , (ODIH.SELL_AMT
+		        - (ODIH.CPN1_DC_AMT + ODIH.GOODS_CPN_DC_AMT + ODIH.CART_CPN_DC_AMT)
+		        - ODIH.TMTB_DC_AMT)
+		       - ROUND((ODIH.SELL_AMT
+		                - (ODIH.CPN1_DC_AMT + ODIH.GOODS_CPN_DC_AMT + ODIH.CART_CPN_DC_AMT)
+		                - ODIH.TMTB_DC_AMT
+		               ) * (ODIH.SELL_FEE_RATE / 100),0)
+		       + (ODIH.SELF_CPN_DC_AMT + ODIH.SELF_TMTB_DC_AMT) AS SETTLE_AMT             /*정산대상액(실판매금액 - 수수료 + 자사다다익선분담액 + 자사쿠폰분담액)*/
+		FROM   (
+		        SELECT ODIH.ORD_DTL_ITEM_HST_SQ                                                                        /*주문상세단품이력일련번호*/
+		             , ODIH.ORD_NO                                                                                     /*주문번호*/
+		             , ODIH.ORD_DTL_NO                                                                                 /*주문상세번호*/
+		             , OD.SUPPLY_COMP_CD                                                                               /*공급업체코드*/
+		             , SC.SUPPLY_COMP_NM                                                                               /*공급업체명*/
+		             , SC.SETTLE_DAY                                                                                   /*정산주기*/
+		             , FN_GET_CODE_NM('G075',SC.SETTLE_DAY)                                 AS SETTLE_DAY_NM           /*정산주기명*/
+		             , DATE_FORMAT(O.PAY_DT,'%Y-%m-%d %H:%i:%S')                            AS ORD_DT                  /*주문일시*/
+		             , ODIH.ORD_DTL_STAT                                                    AS SETTLE_GB               /*정산구분*/
+		             , FN_GET_CODE_NM('G720',ODIH.ORD_DTL_STAT)                             AS SETTLE_GB_NM            /*정산구분명*/
+		             , DATE_FORMAT(ODIH.REG_DT,'%Y-%m-%d %H:%i:%S')                         AS OCCUR_DT                /*발생일시*/
+		             , OD.GOODS_CD                                                                                     /*상품코드*/
+		             , G.GOODS_NM                                                                                      /*상품명*/
+		             , G.BRAND_CD                                                                                      /*브랜드코드*/
+		             , B.BRAND_ENM                                                                                     /*브랜드명*/
+		             , ODIH.ITEM_CD                                                                                    /*단품코드*/
+		             , ODIH.OPT_CD1                                                                                    /*옵션코드1*/
+		             , ODIH.OPT_CD2                                                                                    /*옵션코드2*/
+		             , CASE WHEN O.MALL_GB = 'G011_20' /*제휴몰*/ THEN
+		                        IFNULL(EUP.USAC_PRICE,ODIH.ITEM_PRICE)
+		                    ELSE
+		                        ODIH.ITEM_PRICE
+		               END                                                                  AS SELL_PRICE              /*판매가(정산용)*/
+		             , (CASE WHEN ODIH.ORD_DTL_STAT = 'G720_20' THEN 1 ELSE -1 END)
+		               *
+		               CAST(CASE WHEN ODIH.ORD_DTL_STAT = 'G720_20'/*판매-배송중*/ THEN
+		                             ODIH.ORD_QTY - ODIH.CNCL_RTN_QTY
+		                         ELSE /*환입-반품완료,환입-교환완료*/
+		                             ODIH.CNCL_RTN_QTY
+		                    END AS SIGNED INT)                                              AS SELL_QTY                /*판매수량*/
+		             , (CASE WHEN ODIH.ORD_DTL_STAT = 'G720_20' THEN 1 ELSE -1 END)
+		               *
+		               CAST(CASE WHEN ODIH.ORD_DTL_STAT = 'G720_20'/*판매-배송중*/ THEN
+		                             ((ODIH.ORD_QTY - ODIH.CNCL_RTN_QTY) * (CASE WHEN O.MALL_GB = 'G011_20' /*제휴몰*/ THEN
+		                                                                             IFNULL(EUP.USAC_PRICE,ODIH.ITEM_PRICE)
+		                                                                         ELSE
+		                                                                             ODIH.ITEM_PRICE
+		                                                                    END))
+		                         ELSE /*환입-반품완료,환입-교환완료*/
+		                             (ODIH.CNCL_RTN_QTY * (CASE WHEN O.MALL_GB = 'G011_20' /*제휴몰*/ THEN
+		                                                            IFNULL(EUP.USAC_PRICE,ODIH.ITEM_PRICE)
+		                                                        ELSE
+		                                                            ODIH.ITEM_PRICE
+		                                                   END))
+		                    END AS SIGNED INT)                                              AS SELL_AMT                /*판매금액*/
+		             , ODIH.CPN1_DC_AMT                                                                                /*즉시사용쿠폰금액*/
+		             , ODIH.GOODS_CPN_DC_AMT                                                                           /*상품쿠폰사용금액*/
+		             , ODIH.CART_CPN_DC_AMT                                                                            /*주문서쿠폰사용금액*/
+		             , ((100 - IFNULL(CB1.BURDEN_RATE,0)) / 100) * ODIH.CPN1_DC_AMT
+		               + ((100 - IFNULL(CB2.BURDEN_RATE,0)) / 100) * ODIH.GOODS_CPN_DC_AMT
+		               + ((100 - IFNULL(CB3.BURDEN_RATE,0)) / 100) * ODIH.CART_CPN_DC_AMT   AS SELF_CPN_DC_AMT         /*자사쿠폰분담액*/
+		             , (IFNULL(CB1.BURDEN_RATE,0) / 100) * ODIH.CPN1_DC_AMT
+		               + (IFNULL(CB2.BURDEN_RATE,0) / 100) * ODIH.GOODS_CPN_DC_AMT
+		               + (IFNULL(CB3.BURDEN_RATE,0) / 100) * ODIH.CART_CPN_DC_AMT           AS SUPPLY_COMP_CPN_DC_AMT  /*입점쿠폰분담액*/
+		             -- , ODIH.PNT_DC_AMT                                                                                 /*포인트사용금액*/
+		             , ODIH.TMTB1_DC_AMT + ODIH.TMTB2_DC_AMT                                AS TMTB_DC_AMT             /*다다익선할인금액*/
+		             , ((100 - IFNULL(TB1.TMTB_BURDEN_RATE,0)) / 100) * ODIH.TMTB1_DC_AMT
+		               + ((100 - IFNULL(TB2.TMTB_BURDEN_RATE,0)) / 100) * ODIH.TMTB2_DC_AMT AS SELF_TMTB_DC_AMT        /*자사다다익선분담액*/
+		             , (IFNULL(TB1.TMTB_BURDEN_RATE,0) / 100) * ODIH.TMTB1_DC_AMT
+		               + (IFNULL(TB2.TMTB_BURDEN_RATE,0) / 100) * ODIH.TMTB2_DC_AMT         AS SUPPLY_COMP_TMTB_DC_AMT /*입점다다익선분담액*/
+		             -- , ODIH.GFCD_USE_AMT                                                                               /*상품권사용금액*/
+		             , CASE WHEN O.MALL_GB = 'G011_10' /*자사몰*/ THEN
+		                        OD.SELL_FEE_RATE
+		                    ELSE /*제휴몰*/
+		                        IFNULL(E.SELL_FEE_RATE,0)
+		               END                                                                  AS SELL_FEE_RATE           /*판매수수료율*/
+		        FROM   TB_ORDER_DETAIL_ITEM_HST ODIH
+		        INNER JOIN TB_ORDER_DETAIL OD ON ODIH.ORD_DTL_NO = OD.ORD_DTL_NO
+		        INNER JOIN TB_ORDER O ON ODIH.ORD_NO = O.ORD_NO
+		        INNER JOIN TB_SUPPLY_COMPANY SC ON OD.SUPPLY_COMP_CD = SC.SUPPLY_COMP_CD
+		        INNER JOIN TB_GOODS G ON OD.GOODS_CD = G.GOODS_CD
+		        INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
+		        LEFT OUTER JOIN TB_EXTMALL E ON OD.EXTMALL_ID = E.EXTMALL_ID
+		        LEFT OUTER JOIN TB_COUPON_BURDEN CB1 ON OD.CPN1_CPN_SQ = CB1.CPN_ID
+		                                            AND OD.SUPPLY_COMP_CD = CB1.SUPPLY_COMP_CD
+		        LEFT OUTER JOIN TB_COUPON_BURDEN CB2 ON OD.GOODS_CPN_SQ = CB2.CPN_ID
+		                                            AND OD.SUPPLY_COMP_CD = CB2.SUPPLY_COMP_CD
+		        LEFT OUTER JOIN TB_COUPON_BURDEN CB3 ON OD.CART_CPN_SQ = CB3.CPN_ID
+		                                            AND OD.SUPPLY_COMP_CD = CB3.SUPPLY_COMP_CD
+		        LEFT OUTER JOIN TB_TMTB_BURDEN TB1 ON OD.TMTB1_SQ = TB1.TMTB_SQ
+		                                          AND OD.SUPPLY_COMP_CD = TB1.TMTB_SUPPLY_CD
+		        LEFT OUTER JOIN TB_TMTB_BURDEN TB2 ON OD.TMTB2_SQ = TB2.TMTB_SQ
+		                                          AND OD.SUPPLY_COMP_CD = TB2.TMTB_SUPPLY_CD
+		        LEFT OUTER JOIN TB_EXTMALL_USAC_PRICE EUP ON ODIH.ORD_DTL_ITEM_HST_SQ = EUP.ORD_DTL_ITEM_HST_SQ
+		        WHERE  1 = 1
+		        AND    ODIH.REG_DT <![CDATA[>=]]> STR_TO_DATE(#{salesStdt},'%Y-%m-%d')
+		        AND    ODIH.REG_DT <![CDATA[<]]> DATE_ADD(STR_TO_DATE(#{salesEddt},'%Y-%m-%d'), INTERVAL 1 DAY)
+		        AND    ODIH.ORD_DTL_STAT IN ('G720_20','G720_50','G720_60') /*판매-배송중,환입-반품완료,환입-교환완료*/
+		        AND    SC.SUPPLY_VENDOR_CD = #{supplyVendorCd}
+		        <if test="supplyCompCd != null and supplyCompCd != ''">
+		        AND    SC.SUPPLY_COMP_CD = #{supplyCompCd}
+		        </if>
+		       ) ODIH
+		ORDER  BY ODIH.ORD_DTL_ITEM_HST_SQ
+	</select>
+	
+	<!-- 입점업체 배송비정산 목록 -->
+	<select id="getSupplyCompanyDeliveryFeeList" parameterType="SupplyCompFee" resultType="SupplyCompFee">
+		/* TsaSettle.getSupplyCompanyDeliveryFeeList */
+		SELECT DATE_FORMAT(OD.OCCUR_DT,'%Y-%m-%d')       AS OCCUR_DT           /*발생(출고/회수)일시*/
+		     , OD.SUPPLY_COMP_CD                                               /*공급업체코드*/
+		     , OD.SUPPLY_COMP_NM                                               /*공급업체명*/
+		     , DF.DELV_FEE_GB                                                  /*배송비구분*/
+		     , FN_GET_CODE_NM('G018',DF.DELV_FEE_GB)     AS DELV_FEE_GB_NM     /*배송비구분명*/
+		     , OD.ORD_NO                                                       /*주문번호*/
+		     , SUM(DF.DELV_FEE)                          AS DELV_FEE           /*배송비*/
+		FROM   (
+		        SELECT DISTINCT
+		               ODIH.REG_DT       AS OCCUR_DT  /*발생일시*/
+		             , OD.SUPPLY_COMP_CD              /*공급업체코드*/
+		             , SC.SUPPLY_COMP_NM              /*공급업체명*/
+		             , ODIH.ORD_NO                    /*주문번호*/
+		             , ODIH.ORD_DTL_STAT AS SETTLE_GB /*정산구분*/
+		        FROM   TB_ORDER_DETAIL_ITEM_HST ODIH
+		        INNER JOIN TB_ORDER_DETAIL OD ON ODIH.ORD_DTL_NO = OD.ORD_DTL_NO
+		        INNER JOIN TB_GOODS G ON OD.GOODS_CD = G.GOODS_CD
+		        INNER JOIN TB_SUPPLY_COMPANY SC ON OD.SUPPLY_COMP_CD = SC.SUPPLY_COMP_CD
+		        WHERE  1 = 1
+		        AND    ODIH.REG_DT <![CDATA[>=]]> STR_TO_DATE(#{salesStdt},'%Y-%m-%d')
+		        AND    ODIH.REG_DT <![CDATA[<]]> DATE_ADD(STR_TO_DATE(#{salesEddt},'%Y-%m-%d'), INTERVAL 1 DAY)
+		        AND    ODIH.ORD_DTL_STAT IN ('G720_20','G720_50','G720_60') /*판매-배송중,환입-반품완료,환입-교환완료*/
+		        AND    SC.SUPPLY_VENDOR_CD = #{supplyVendorCd}
+		        <if test="supplyCompCd != null and supplyCompCd != ''">
+		        AND    OD.SUPPLY_COMP_CD = #{supplyCompCd}
+		        </if>
+			   ) OD
+			 , TB_DELIVERY_FEE DF
+		WHERE  OD.SUPPLY_COMP_CD = DF.SUPPLY_COMP_CD
+		AND    OD.ORD_NO = DF.ORD_NO
+		AND    OD.OCCUR_DT >= DF.REG_DT /*출고기준의 일자 보다 배송비 발생일자가 적은 넘만*/
+		GROUP  BY DATE_FORMAT(OD.OCCUR_DT,'%Y-%m-%d')
+		        , OD.SUPPLY_COMP_CD
+		        , OD.SUPPLY_COMP_NM
+		        , DF.DELV_FEE_GB
+		        , OD.ORD_NO
+		ORDER  BY DATE_FORMAT(OD.OCCUR_DT,'%Y-%m-%d'), OD.SUPPLY_COMP_CD, DF.DELV_FEE_GB
+	</select>
+	
+	<!-- 입점업체 정산확정 목록 -->
+	<select id="getSupplyCompanyFeeConfirmList" parameterType="SupplyCompFee" resultType="SupplyCompFee">
+		/* TsaSettle.getSupplyCompanyFeeConfirmList */
 		SELECT U.USAC_YM                                                                                                 /*정산연월*/
 		     , U.SUPPLY_COMP_CD                                                                                          /*공급업체코드*/
 		     , SC.SUPPLY_COMP_NM                                                                                         /*공급업체명*/

+ 19 - 1
src/main/java/com/style24/scm/biz/dao/TssSettleDao.java

@@ -24,6 +24,24 @@ public interface TssSettleDao {
 	 */
 	Collection<AflinkFee> getAfLinkFeeList(AflinkFee afLinkFee);
 
+	/**
+	 * 입점업체 상품정산 목록
+	 * @param supplyCompFee
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 9. 8
+	 */
+	Collection<SupplyCompFee> getSupplyCompanyGoodsFeeList(SupplyCompFee supplyCompFee);
+
+	/**
+	 * 입점업체 배송비정산 목록
+	 * @param supplyCompFee
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 9. 8
+	 */
+	Collection<SupplyCompFee> getSupplyCompanyDeliveryFeeList(SupplyCompFee supplyCompFee);
+
 	/**
 	 * 입점업체정산 목록
 	 * @param supplyCompFee - 입점업체정산 정보
@@ -31,6 +49,6 @@ public interface TssSettleDao {
 	 * @author gagamel
 	 * @since 2021. 9. 2
 	 */
-	Collection<SupplyCompFee> getSupplyCompanyFeeList(SupplyCompFee supplyCompFee);
+	Collection<SupplyCompFee> getSupplyCompanyFeeConfirmList(SupplyCompFee supplyCompFee);
 
 }

+ 25 - 3
src/main/java/com/style24/scm/biz/service/TssSettleService.java

@@ -36,14 +36,36 @@ public class TssSettleService {
 	}
 
 	/**
-	 * 입점업체정산 목록
+	 * 입점업체 상품정산 목록
+	 * @param supplyCompFee
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 9. 8
+	 */
+	public Collection<SupplyCompFee> getSupplyCompanyGoodsFeeList(SupplyCompFee supplyCompFee) {
+		return settleDao.getSupplyCompanyGoodsFeeList(supplyCompFee);
+	}
+
+	/**
+	 * 입점업체 배송비정산 목록
+	 * @param supplyCompFee
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 9. 8
+	 */
+	public Collection<SupplyCompFee> getSupplyCompanyDeliveryFeeList(SupplyCompFee supplyCompFee) {
+		return settleDao.getSupplyCompanyDeliveryFeeList(supplyCompFee);
+	}
+
+	/**
+	 * 입점업체 정산확정 목록
 	 * @param supplyCompFee - 입점업체정산 정보
 	 * @return
 	 * @author gagamel
 	 * @since 2021. 9. 2
 	 */
-	public Collection<SupplyCompFee> getSupplyCompanyFeeList(SupplyCompFee supplyCompFee) {
-		return settleDao.getSupplyCompanyFeeList(supplyCompFee);
+	public Collection<SupplyCompFee> getSupplyCompanyFeeConfirmList(SupplyCompFee supplyCompFee) {
+		return settleDao.getSupplyCompanyFeeConfirmList(supplyCompFee);
 	}
 
 }

+ 72 - 8
src/main/java/com/style24/scm/biz/web/TssSettleController.java

@@ -77,14 +77,78 @@ public class TssSettleController extends TssBaseController {
 	}
 
 	/**
-	 * 입점업체정산 화면
+	 * 입점업체 상품정산 화면
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 9. 8
+	 */
+	@GetMapping("/supply/company/goods/fee/form")
+	public ModelAndView supplyCompanyGoodsFeeForm() {
+		ModelAndView mav = new ModelAndView("settle/SupplyCompanyGoodsFeeForm");
+
+		// 입점업체 목록
+		mav.addObject("supplyCompList", rendererService.getEntrSupplyCompanyList(TssSession.getInfo().getSupplyVendorCd()));
+
+		return mav;
+	}
+
+	/**
+	 * 입점업체 상품정산 목록
+	 * @param supplyCompFee - 입점업체정산 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 1. 20
+	 */
+	@PostMapping("/supply/company/goods/fee/list")
+	@ResponseBody
+	public Collection<SupplyCompFee> getSupplyCompanyGoodsFeeList(@RequestBody SupplyCompFee supplyCompFee) {
+		// 파라미터로 다른 값을 입력해 조회할 수 있으므로 세션값으로 다시 설정
+		supplyCompFee.setSupplyVendorCd(TssSession.getInfo().getSupplyVendorCd());
+
+		return settleService.getSupplyCompanyGoodsFeeList(supplyCompFee);
+	}
+
+	/**
+	 * 입점업체 배송비정산 화면
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 9. 8
+	 */
+	@GetMapping("/supply/company/delivery/fee/form")
+	public ModelAndView supplyCompanyDeliveryFeeForm() {
+		ModelAndView mav = new ModelAndView("settle/SupplyCompanyDelvFeeForm");
+
+		// 입점업체 목록
+		mav.addObject("supplyCompList", rendererService.getEntrSupplyCompanyList(TssSession.getInfo().getSupplyVendorCd()));
+
+		return mav;
+	}
+
+	/**
+	 * 입점업체 배송비정산 목록
+	 * @param supplyCompFee - 입점업체정산 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 1. 20
+	 */
+	@PostMapping("/supply/company/delivery/fee/list")
+	@ResponseBody
+	public Collection<SupplyCompFee> getSupplyCompanyDeliveryFeeList(@RequestBody SupplyCompFee supplyCompFee) {
+		// 파라미터로 다른 값을 입력해 조회할 수 있으므로 세션값으로 다시 설정
+		supplyCompFee.setSupplyVendorCd(TssSession.getInfo().getSupplyVendorCd());
+
+		return settleService.getSupplyCompanyDeliveryFeeList(supplyCompFee);
+	}
+
+	/**
+	 * 입점업체 정산확정 화면
 	 * @return
 	 * @author gagamel
 	 * @since 2021. 9. 2
 	 */
-	@GetMapping("/supply/company/fee/form")
-	public ModelAndView supplyCompanFeeForm() {
-		ModelAndView mav = new ModelAndView("settle/SupplyCompanyFeeForm");
+	@GetMapping("/supply/company/fee/confirm/form")
+	public ModelAndView supplyCompanyFeeConfirmForm() {
+		ModelAndView mav = new ModelAndView("settle/SupplyCompanyFeeConfirmForm");
 
 		// 입점업체 목록
 		mav.addObject("supplyCompList", rendererService.getEntrSupplyCompanyList(TssSession.getInfo().getSupplyVendorCd()));
@@ -93,19 +157,19 @@ public class TssSettleController extends TssBaseController {
 	}
 
 	/**
-	 * 입점업체정산 목록
+	 * 입점업체 정산확정 목록
 	 * @param supplyCompFee - 입점업체정산 정보
 	 * @return
 	 * @author gagamel
 	 * @since 2021. 1. 20
 	 */
-	@PostMapping("/supply/company/fee/list")
+	@PostMapping("/supply/company/fee/confirm/list")
 	@ResponseBody
-	public Collection<SupplyCompFee> getSupplyCompanyFeeList(@RequestBody SupplyCompFee supplyCompFee) {
+	public Collection<SupplyCompFee> getSupplyCompanyFeeConfirmList(@RequestBody SupplyCompFee supplyCompFee) {
 		// 파라미터로 다른 값을 입력해 조회할 수 있으므로 세션값으로 다시 설정
 		supplyCompFee.setSupplyVendorCd(TssSession.getInfo().getSupplyVendorCd());
 
-		return settleService.getSupplyCompanyFeeList(supplyCompFee);
+		return settleService.getSupplyCompanyFeeConfirmList(supplyCompFee);
 	}
 
 }

+ 121 - 0
src/main/webapp/WEB-INF/views/settle/SupplyCompanyDelvFeeForm.html

@@ -0,0 +1,121 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : SupplyCompanyDelvFeeForm.html
+ * @desc    : 입점업체 배송비정산 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.09.08   gagamel     최초 작성
+ *******************************************************************************
+ -->
+	<div id="main">
+		<!-- 메인타이틀 영역 -->
+		<div class="main-title">
+		</div>
+		<!-- //메인타이틀 영역 -->
+		
+		<!-- 메뉴 설명 -->
+		<div class="infoBox menu-desc">
+		</div>
+		<!-- //메뉴 설명 -->
+		
+		<!-- 검색조건 영역 -->
+		<div class="panelStyle">
+			<form id="searchForm" name="searchForm" action="#" th:action="@{'/settle/supply/company/delivery/fee/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
+				<table class="frmStyle" aria-describedby="검색조건">
+					<colgroup>
+						<col style="width:10%;"/>
+						<col/>
+						<col style="width:10%;"/>
+						<col style="width:15%;"/>
+					</colgroup>
+					<tr>
+						<th>매출기간<i class="required" title="필수" aria-hidden="true"></i></th>
+						<td id="terms">
+						</td>
+						<th>공급업체</th>
+						<td>
+							<select name="supplyCompCd">
+								<option value="">[전체]</option>
+								<option th:if="${supplyCompList}" th:each="oneData, status : ${supplyCompList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+							</select>
+						</td>
+					</tr>
+				</table>
+				
+				<ul class="panelBar">
+					<li class="center">
+						<button type="button" class="btn btn-base btn-lg" id="btnSearch">조회</button>
+						<button type="button" class="btn btn-gray btn-lg" id="btnInit">초기화</button>
+					</li>
+				</ul>
+			</form>
+		</div>
+		<!-- 검색조건 영역 -->
+
+		<!-- 리스트 영역 -->
+		<div class="panelStyle">
+			<!-- 버튼 배치 영역 -->
+			<ul class="panelBar">
+				<li class="right">
+					<button type="button" class="btn btn-default btn-lg" id="btnExcel">엑셀다운로드</button>
+				</li>
+			</ul>
+			<!-- //버튼 배치 영역 -->
+			
+			<div id="gridList" style="width: 100%; height: 470px" class="ag-theme-balham"></div>
+		</div>
+		<!-- //리스트 영역 -->
+	</div>
+
+<script th:inline="javascript">
+/*<![CDATA[*/
+	let columnDefs = [
+		{ headerName: "발생(출고/회수)일자", field: "occurDt", width: 150, cellClass: 'text-center' },
+		{ headerName: "공급업체", field: "supplyCompNm", width: 200, cellClass: 'text-center' },
+		{ headerName: "배송비구분", field: "delvFeeGbNm", width: 150, cellClass: 'text-center' },
+		{ headerName: "주문번호", field: "ordNo", width: 100, cellClass: 'text-center' },
+		{
+			headerName: "배송비", field: "delvFee", width: 100, cellClass: 'text-right',
+			cellRenderer: function (params) { return gagaAgGrid.toAddComma(params.value); }
+		}
+	];
+
+	let gridOptions = gagaAgGrid.getGridOptions(columnDefs);
+
+	// 검색
+	$('#btnSearch').on('click', function() {
+		// 입력 값 체크
+		if (!gagajf.validation($('#searchForm')))
+			return false;
+		
+		gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm');
+	});
+	
+	// 초기화 클릭시
+	$('#btnInit').on('click', function() {
+		$('#searchForm')[0].reset();
+	});
+	
+	// 엑셀다운로드
+	$('#btnExcel').on('click', function() {
+		gagaAgGrid.exportToExcel('배송비정산 목록', gridOptions);
+	});
+	
+	$(document).ready(function() {
+		cfnCreateCalendar('#terms', 'salesStdt', 'salesEddt', true, '매출');
+		$('.btnToday').trigger('click');
+		
+		// Create a agGrid
+		gagaAgGrid.createGrid('gridList', gridOptions);
+	});
+/*]]>*/
+</script>
+
+</html>

+ 3 - 5
src/main/webapp/WEB-INF/views/settle/SupplyCompanyFeeForm.html → src/main/webapp/WEB-INF/views/settle/SupplyCompanyFeeConfirmForm.html

@@ -3,8 +3,8 @@
 	xmlns:th="http://www.thymeleaf.org">
 <!--
  *******************************************************************************
- * @source  : SupplyCompanyFeeForm.html
- * @desc    : 입점업체정산 Page
+ * @source  : SupplyCompanyFeeConfirmForm.html
+ * @desc    : 입점업체 정산확정 Page
  *============================================================================
  * STYLE24
  * Copyright(C) 2020 TSIT, All rights reserved.
@@ -27,7 +27,7 @@
 		
 		<!-- 검색조건 영역 -->
 		<div class="panelStyle">
-			<form id="searchForm" name="searchForm" action="#" th:action="@{'/settle/supply/company/fee/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
+			<form id="searchForm" name="searchForm" action="#" th:action="@{'/settle/supply/company/fee/confirm/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
 				<table class="frmStyle" aria-describedby="검색조건">
 					<colgroup>
 						<col style="width:10%;"/>
@@ -82,8 +82,6 @@
 					<!-- //아이콘 툴팁 -->
 				</li>
 				<li class="right">
-					<button type="button" class="btn btn-warning btn-lg" id="btnDownloadTaxBillExcel">세금계산서용 엑셀다운로드</button>
-					<a href="javascript:void(0);" id="taxBillExcel" style="display: none;">세금계산서엑셀</a>
 					<button type="button" class="btn btn-default btn-lg" id="btnExcel">엑셀다운로드</button>
 				</li>
 			</ul>

+ 207 - 0
src/main/webapp/WEB-INF/views/settle/SupplyCompanyGoodsFeeForm.html

@@ -0,0 +1,207 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : SupplyCompnayGoodsFeeForm.html
+ * @desc    : 입점업체 상품정산 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.09.08   gagamel     최초 작성
+ *******************************************************************************
+ -->
+	<div id="main">
+		<!-- 메인타이틀 영역 -->
+		<div class="main-title">
+		</div>
+		<!-- //메인타이틀 영역 -->
+		
+		<!-- 메뉴 설명 -->
+		<div class="infoBox menu-desc">
+		</div>
+		<!-- //메뉴 설명 -->
+		
+		<!-- 검색조건 영역 -->
+		<div class="panelStyle">
+			<form id="searchForm" name="searchForm" action="#" th:action="@{'/settle/supply/company/goods/fee/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
+				<table class="frmStyle" aria-describedby="검색조건">
+					<colgroup>
+						<col style="width:10%;"/>
+						<col/>
+						<col style="width:10%;"/>
+						<col style="width:15%;"/>
+					</colgroup>
+					<tr>
+						<th>매출기간<i class="required" title="필수" aria-hidden="true"></i></th>
+						<td id="terms">
+						</td>
+						<th>공급업체</th>
+						<td>
+							<select name="supplyCompCd">
+								<option value="">[전체]</option>
+								<option th:if="${supplyCompList}" th:each="oneData, status : ${supplyCompList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+							</select>
+						</td>
+					</tr>
+				</table>
+				
+				<ul class="panelBar">
+					<li class="center">
+						<button type="button" class="btn btn-base btn-lg" id="btnSearch">조회</button>
+						<button type="button" class="btn btn-gray btn-lg" id="btnInit">초기화</button>
+					</li>
+				</ul>
+			</form>
+		</div>
+		<!-- 검색조건 영역 -->
+		
+		<!-- 리스트 영역 -->
+		<div class="panelStyle">
+			<!-- 버튼 배치 영역 -->
+			<ul class="panelBar">
+				<li class="left">
+					<span class="infoTxt cBlue">* 항목 설명</span>
+					<!-- 아이콘 툴팁 -->
+					<div class="iconTooltip marL10">
+						<i class="fa fa-info" aria-hidden="true"></i>
+						<span class="left" style="width: 600px;">
+							<strong>1.판매총액</strong>: 판매가 * 판매수량<br/>
+							<strong>2.상품총액</strong>: 판매총액 - 쿠폰할인금액 - 다다익선할인금액<br/>
+							<strong>3.수수료</strong>: 상품총액 * 판매수수료율(%)<br/>
+							<strong>4.정산대상액</strong>: 상품총액 - 수수료 + 자사쿠폰분담액 + 자사다다익선분담액
+						</span>
+					</div>
+				</li>
+				<li class="right">
+					<button type="button" class="btn btn-default btn-lg" id="btnExcel">엑셀다운로드</button>
+				</li>
+			</ul>
+			<!-- //버튼 배치 영역 -->
+			
+			<div id="gridList" style="width: 100%; height: 570px" class="ag-theme-balham"></div>
+		</div>
+		<!-- //리스트 영역 -->
+	</div>
+
+<script th:inline="javascript">
+/*<![CDATA[*/
+	let columnDefs = [
+		{ headerName: "주문번호", field: "ordNo", width: 100, cellClass: 'text-center' },
+		{ headerName: "주문상세번호", field: "ordDtlNo", width: 150, cellClass: 'text-center' },
+		{ headerName: "공급업체", field: "supplyCompNm", width: 150, cellClass: 'text-center' },
+		{ headerName: "정산주기", field: "settleDayNm", width: 100, cellClass: 'text-center' },
+		{ headerName: "주문일시", field: "ordDt", width: 150, cellClass: 'text-center' },
+		{ headerName: "정산구분", field: "settleGbNm", width: 100, cellClass: 'text-center' },
+		{ headerName: "발생(출고/회수)일시", field: "occurDt", width: 150, cellClass: 'text-center' },
+		{ headerName: "상품코드", field: "goodsCd", width: 120, cellClass: 'text-center' },
+		{ headerName: "상품명", field: "goodsNm", width: 300 },
+		{ headerName: "브랜드", field: "brandEnm", width: 100, cellClass: 'text-center' },
+		{ headerName: "단품코드", field: "itemCd", width: 120, cellClass: 'text-center' },
+		{ headerName: "옵션", field: "optCd1", width: 100, cellClass: 'text-center' },
+		{
+			headerName: "판매가", field: "sellPrice", width: 100, cellClass: 'text-right',
+			cellRenderer: function (params) { return gagaAgGrid.toAddComma(params.value); }
+		},
+		{
+			headerName: "판매수량", field: "sellQty", width: 100, cellClass: 'text-center',
+			cellRenderer: function (params) { return gagaAgGrid.toAddComma(params.value); },
+			cellStyle : function(params) { if (Number(params.value) < 0) return { 'color' : 'red' } }
+		},
+		{
+			headerName: "판매총액", field: "sellAmt", width: 100, cellClass: 'text-right',
+			cellRenderer: function (params) { return gagaAgGrid.toAddComma(params.value); },
+			cellStyle : function(params) { if (Number(params.value) < 0) return { 'color' : 'red' } }
+		},
+		{
+			headerName: "쿠폰할인금액", field: "cpnDcAmt", width: 120, cellClass: 'text-right',
+			cellRenderer: function (params) { return gagaAgGrid.toAddComma(params.value); }
+		},
+		{
+			headerName: "자사쿠폰분담액", field: "selfCpnDcAmt", width: 120, cellClass: 'text-right',
+			cellRenderer: function (params) { return gagaAgGrid.toAddComma(params.value); }
+		},
+		{
+			headerName: "입점쿠폰분담액", field: "supplyCompCpnDcAmt", width: 120, cellClass: 'text-right',
+			cellRenderer: function (params) { return gagaAgGrid.toAddComma(params.value); }
+		},
+// 		{
+// 			headerName: "포인트사용금액", field: "pntDcAmt", width: 120, cellClass: 'text-right',
+// 			cellRenderer: function (params) { return gagaAgGrid.toAddComma(params.value); }
+// 		},
+		{
+			headerName: "다다익선할인금액", field: "tmtbDcAmt", width: 120, cellClass: 'text-right',
+			cellRenderer: function (params) { return gagaAgGrid.toAddComma(params.value); }
+		},
+		{
+			headerName: "자사다다익선분담액", field: "selfTmtbDcAmt", width: 150, cellClass: 'text-right',
+			cellRenderer: function (params) { return gagaAgGrid.toAddComma(params.value); }
+		},
+		{
+			headerName: "입점다다익선분담액", field: "supplyCompTmtbDcAmt", width: 150, cellClass: 'text-right',
+			cellRenderer: function (params) { return gagaAgGrid.toAddComma(params.value); }
+		},
+// 		{
+// 			headerName: "상품권사용금액", field: "gfcdUseAmt", width: 120, cellClass: 'text-right',
+// 			cellRenderer: function (params) { return gagaAgGrid.toAddComma(params.value); }
+// 		},	
+		{
+			headerName: "실판매가", field: "realSellPrice", width: 100, cellClass: 'text-right',
+			cellRenderer: function (params) { return gagaAgGrid.toAddComma(params.value); }
+		},
+		{
+			headerName: "상품총액", field: "realSellAmt", width: 100, cellClass: 'text-right',
+			cellRenderer: function (params) { return gagaAgGrid.toAddComma(params.value); },
+			cellStyle : function(params) { if (Number(params.value) < 0) return { 'color' : 'red' } }
+		},
+		{
+			headerName: "판매수수료율(%)", field: "sellFeeRate", width: 120, cellClass: 'text-center',
+			cellRenderer: function (params) { return params.value + '%'; }
+		},
+		{
+			headerName: "수수료", field: "sellFeeAmt", width: 100, cellClass: 'text-right',
+			cellRenderer: function (params) { return gagaAgGrid.toAddComma(params.value); },
+			cellStyle : function(params) { if (Number(params.value) < 0) return { 'color' : 'red' } }
+		},
+		{
+			headerName: "정산대상액", field: "settleAmt", width: 100, cellClass: 'text-right',
+			cellRenderer: function (params) { return gagaAgGrid.toAddComma(params.value); },
+			cellStyle : function(params) { if (Number(params.value) < 0) return { 'color' : 'red' } }
+		}
+	];
+
+	let gridOptions = gagaAgGrid.getGridOptions(columnDefs);
+
+	// 검색
+	$('#btnSearch').on('click', function() {
+		// 입력 값 체크
+		if (!gagajf.validation($('#searchForm')))
+			return false;
+		
+		gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm');
+	});
+	
+	// 초기화 클릭시
+	$('#btnInit').on('click', function() {
+		$('#searchForm')[0].reset();
+	});
+	
+	// 엑셀다운로드
+	$('#btnExcel').on('click', function() {
+		gagaAgGrid.exportToExcel('상품정산 목록', gridOptions);
+	});
+	
+	$(document).ready(function() {
+		cfnCreateCalendar('#terms', 'salesStdt', 'salesEddt', true, '매출');
+		$('.btnToday').trigger('click');
+		
+		// Create a agGrid
+		gagaAgGrid.createGrid('gridList', gridOptions);
+	});
+/*]]>*/
+</script>
+
+</html>