Procházet zdrojové kódy

Merge branch 'develop' into bin2107

bin2107 před 5 roky
rodič
revize
7d01ad4017
20 změnil soubory, kde provedl 1194 přidání a 562 odebrání
  1. 11 0
      src/main/java/com/style24/admin/biz/dao/TsaCustomerDao.java
  2. 17 9
      src/main/java/com/style24/admin/biz/dao/TsaRendererDao.java
  3. 26 0
      src/main/java/com/style24/admin/biz/dao/TsaSettleDao.java
  4. 35 0
      src/main/java/com/style24/admin/biz/service/TsaCustomerService.java
  5. 45 32
      src/main/java/com/style24/admin/biz/service/TsaKakaoService.java
  6. 21 11
      src/main/java/com/style24/admin/biz/service/TsaRendererService.java
  7. 37 0
      src/main/java/com/style24/admin/biz/service/TsaSettleService.java
  8. 58 1
      src/main/java/com/style24/admin/biz/web/TsaCustomerController.java
  9. 13 13
      src/main/java/com/style24/admin/biz/web/TsaRendererController.java
  10. 37 6
      src/main/java/com/style24/admin/biz/web/TsaSettleController.java
  11. 3 0
      src/main/java/com/style24/admin/biz/web/TsaSystemController.java
  12. 35 0
      src/main/java/com/style24/persistence/domain/AflinkFee.java
  13. 69 0
      src/main/java/com/style24/persistence/mybatis/shop/TsaCustomer.xml
  14. 23 10
      src/main/java/com/style24/persistence/mybatis/shop/TsaRenderer.xml
  15. 75 0
      src/main/java/com/style24/persistence/mybatis/shop/TsaSettle.xml
  16. 21 0
      src/main/java/com/style24/persistence/mybatis/shop/TsaSystem.xml
  17. 434 478
      src/main/webapp/WEB-INF/views/customer/CustomerDetailForm.html
  18. 200 0
      src/main/webapp/WEB-INF/views/settle/AfLinkSettleForm.html
  19. 28 2
      src/main/webapp/WEB-INF/views/system/UserDetailForm.html
  20. 6 0
      src/main/webapp/WEB-INF/views/system/UserForm.html

+ 11 - 0
src/main/java/com/style24/admin/biz/dao/TsaCustomerDao.java

@@ -35,6 +35,14 @@ public interface TsaCustomerDao {
 	 */
 	Customer getCustomerInfo(String custNo);
 
+	/**
+	 * 회원정보 수정
+	 * @param customer - 고객정보
+	 * @author jsshin
+	 * @since 2020. 01. 20
+	 */
+	void updateCustomerInfo(Customer customer);
+
 	/**
 	 * 탈퇴회원 목록
 	 * @param customerSearch - 검색조건
@@ -52,4 +60,7 @@ public interface TsaCustomerDao {
 	 * @since 2020. 01. 14
 	 */
 	Collection<Customer> getCustomerDormantList(CustomerSearch customerSearch);
+
+	void createException();
+
 }

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

@@ -204,15 +204,6 @@ public interface TsaRendererDao {
 	 */
 	Collection<CommonCode> getQnaAnswerPhaseList(String ansClsf);
 
-//	/**
-//	 * 제휴링크 목록
-//	 * @param afChannel - 제휴채널
-//	 * @return
-//	 * @author gagamel
-//	 * @since 2020. 5. 4
-//	 */
-//	Collection<CommonCode> getAflinkList(String afChannel);
-
 	/**
 	 * 색상그룹코드 RGB 목록
 	 *
@@ -233,4 +224,21 @@ public interface TsaRendererDao {
 	 */
 	Collection<CommonCode> getSupplyDeliveryFeePolicyList(String supplyCompCd);
 
+	/**
+	 * 전체 제휴채널 목록
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 1. 20
+	 */
+	Collection<CommonCode> getAllAflinkList();
+
+	/**
+	 * 제휴채널 목록
+	 * @param afChannel - 상위제휴채널
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 1. 20
+	 */
+	Collection<CommonCode> getAflinkList(String afChannel);
+
 }

+ 26 - 0
src/main/java/com/style24/admin/biz/dao/TsaSettleDao.java

@@ -0,0 +1,26 @@
+package com.style24.admin.biz.dao;
+
+import java.util.Collection;
+
+import com.style24.core.support.annotation.ShopDs;
+import com.style24.persistence.domain.AflinkFee;
+
+/**
+ * 정산 Dao
+ *
+ * @author gagamel
+ * @since 2021. 1. 20
+ */
+@ShopDs
+public interface TsaSettleDao {
+
+	/**
+	 * 제휴채널정산 목록
+	 * @param afLinkFee - 제휴채널정산 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 1. 20
+	 */
+	Collection<AflinkFee> getAfLinkFeeList(AflinkFee afLinkFee);
+
+}

+ 35 - 0
src/main/java/com/style24/admin/biz/service/TsaCustomerService.java

@@ -1,11 +1,15 @@
 package com.style24.admin.biz.service;
 
 import com.style24.admin.biz.dao.TsaCustomerDao;
+import com.style24.admin.support.security.session.TsaSession;
+import com.style24.core.biz.dao.TscCustomerDao;
+import com.style24.core.biz.service.TscCustomerService;
 import com.style24.persistence.domain.Customer;
 import com.style24.persistence.domain.CustomerSearch;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.Collection;
 
@@ -22,6 +26,9 @@ public class TsaCustomerService {
 	@Autowired
 	private TsaCustomerDao customerDao;
 
+	@Autowired
+	private TscCustomerService coreCustomerService;
+
 	/**
 	 * 활동회원 목록
 	 * @param customerSearch - 검색조건
@@ -44,6 +51,34 @@ public class TsaCustomerService {
 		return customerDao.getCustomerInfo(custNo);
 	}
 
+	/**
+	 * 회원정보 수정
+	 * @param customer - 고객정보
+	 * @author jsshin
+	 * @since 2020. 01. 20
+	 */
+	@Transactional("shopTxnManager")
+	public void saveCustomerInfo(Customer customer) {
+		Integer userNo = TsaSession.getInfo().getUserNo();
+		customer.setRegNo(userNo);
+		customer.setUpdNo(userNo);
+		// 고객 이력 생성
+		coreCustomerService.createCustomerHistory(customer);
+		// 정보 수정
+		customerDao.updateCustomerInfo(customer);
+	}
+
+	/**
+	 * 회원 비밀번호 수정
+	 * @param customer - 고객정보
+	 * @author jsshin
+	 * @since 2020. 01. 20
+	 */
+	@Transactional("shopTxnManager")
+	public void updateCustomerPassword(Customer customer) {
+		coreCustomerService.updateCustomerPassword(customer);
+	}
+
 	/**
 	 * 탈퇴회원 목록
 	 * @param customerSearch - 검색조건

+ 45 - 32
src/main/java/com/style24/admin/biz/service/TsaKakaoService.java

@@ -1,11 +1,19 @@
 package com.style24.admin.biz.service;
 
+import com.gagaframework.web.parameter.GagaMap;
+import com.style24.admin.support.security.session.TsaSession;
+import com.style24.core.biz.service.TscCustomerService;
+import com.style24.core.support.env.TscConstants;
+import com.style24.persistence.domain.CustContactHst;
+import com.style24.persistence.domain.Customer;
+import com.style24.persistence.domain.SsgDirectMessage;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import com.style24.core.biz.thirdparty.SsgKakaoSender;
 
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  * 카카오알림톡 Service. 모든 카카오알림톡 발송은 여기에서 처리한다.
@@ -20,38 +28,43 @@ public class TsaKakaoService {
 	@Autowired
 	private SsgKakaoSender kakaoSender;
 
-//	/**
-//	 * 고객 임시비밀번호 알림톡 발송
-//	 * @param counsel - 상담 정보
-//	 * @author gagamel
-//	 * @since 2020. 11. 9
-//	 */
-//	@Transactional("shopTxnManager")
-//	public void sendCustomerTempPassword(AdmCustomer customer) {
-//		SsgDirectMessage dm = new SsgDirectMessage();
-//		dm.setFuserid(String.valueOf(TsaSession.getInfo().getUserNo())); // 발송자ID
-//		dm.setFdestine(customer.getCellPhnno());
-//		dm.setFkkoresendtype("LMS");
-//
-//		GagaMap replaceInfo = new GagaMap();
-//		replaceInfo.setString("siteNm", customer.getSiteNm());
-//		replaceInfo.setString("custNm", customer.getCustNm());
-//		replaceInfo.setString("passwd", customer.getPasswd());
-//
-//		kakaoSender.send(SsgKakaoSender.KakaoAnswerSq.TempPasswd.value(), dm, replaceInfo);
-//
-//		try {
-//			// 고객접촉이력 정보
-//			customer.setContactType("203"); // 접촉유형:임시비밀번호발급(공통코드G054)
-//			customer.setContactMethod(TscConstants.ContactMethod.KAKAOTALK.value()); // 접촉방법:알림톡+문자(공통코드G055)
-//			customer.setContactContents("고객 임시비밀번호 발송");
-//			customer.setReceiverId(customer.getCustNo());
-//			customerService.createCustomerContactHistory(customer);
-//		} catch (Exception e) {
-//			log.error("error", e);
-//			// Do nothing
-//		}
-//	}
+	@Autowired
+	private TscCustomerService coreCustomerService;
+
+	/**
+	 * 고객 임시비밀번호 알림톡 발송
+	 * @param customer - 고객 정보
+	 * @author jsshin
+	 * @since 2021. 01. 20
+	 */
+	@Transactional("shopTxnManager")
+	public void sendCustomerTempPassword(Customer customer) {
+		Integer userNo = TsaSession.getInfo().getUserNo();
+		SsgDirectMessage dm = new SsgDirectMessage();
+		dm.setFuserid(String.valueOf(userNo)); // 발송자NO
+		dm.setFdestine(customer.getCellPhnno());
+		dm.setFkkoresendtype("LMS");
+
+		GagaMap replaceInfo = new GagaMap();
+		replaceInfo.setString("siteNm", TscConstants.Style24Infomation.SITE_NAME.value());
+		replaceInfo.setString("custNm", customer.getCustNm());
+		replaceInfo.setString("passwd", customer.getPasswd());
+
+		kakaoSender.send(SsgKakaoSender.KakaoAnswerSq.TempPasswd.value(), dm, replaceInfo);
+
+		try {
+			CustContactHst custContactHst = new CustContactHst();
+			custContactHst.setContactType(TscConstants.ContactType.PASSWORD_INFO.value()); // 접촉유형:임시비밀번호발급(공통코드G054)
+			custContactHst.setContactMethod(TscConstants.ContactMethod.KAKAOTALK.value()); // 접촉방법:알림톡+문자(공통코드G055)
+			custContactHst.setContactContents("고객 임시비밀번호 발송");
+			custContactHst.setReceiverNo(customer.getCustNo());
+			custContactHst.setSenderNo(userNo);
+			coreCustomerService.createCustomerContactHistory(custContactHst);
+		} catch (Exception e) {
+			log.error("error", e);
+			// Do nothing
+		}
+	}
 //
 //	/**
 //	 * 일대일문의 답변 알림톡 발송

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

@@ -508,17 +508,6 @@ public class TsaRendererService {
 		return rendererDao.getQnaAnswerPhaseList(ansClsf);
 	}
 
-//	/**
-//	 * 제휴링크 목록
-//	 * @param afChannel - 제휴채널
-//	 * @return
-//	 * @author gagamel
-//	 * @since 2020. 5. 4
-//	 */
-//	public Collection<CommonCode> getAflinkList(String afChannel) {
-//		return rendererDao.getAflinkList(afChannel);
-//	}
-
 	/**
 	 * 색상그룹코드 RGB 목록
 	 *
@@ -531,4 +520,25 @@ public class TsaRendererService {
 		return rendererDao.getColorGrpCdRgbList();
 	}
 
+	/**
+	 * 전체 제휴채널 목록
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 1. 20
+	 */
+	public Collection<CommonCode> getAllAflinkList() {
+		return rendererDao.getAllAflinkList();
+	}
+
+	/**
+	 * 제휴채널 목록
+	 * @param afChannel - 상위제휴채널
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 1. 20
+	 */
+	public Collection<CommonCode> getAflinkList(String afChannel) {
+		return rendererDao.getAflinkList(afChannel);
+	}
+
 }

+ 37 - 0
src/main/java/com/style24/admin/biz/service/TsaSettleService.java

@@ -0,0 +1,37 @@
+package com.style24.admin.biz.service;
+
+import java.util.Collection;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.style24.admin.biz.dao.TsaSettleDao;
+import com.style24.persistence.domain.AflinkFee;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 정산 Service
+ *
+ * @author gagamel
+ * @since 2021. 1. 20
+ */
+@Service
+@Slf4j
+public class TsaSettleService {
+
+	@Autowired
+	private TsaSettleDao settleDao;
+
+	/**
+	 * 제휴채널정산 목록
+	 * @param afLinkFee - 제휴채널수수료 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 1. 20
+	 */
+	public Collection<AflinkFee> getAfLinkFeeList(AflinkFee afLinkFee) {
+		return settleDao.getAfLinkFeeList(afLinkFee);
+	}
+
+}

+ 58 - 1
src/main/java/com/style24/admin/biz/web/TsaCustomerController.java

@@ -2,10 +2,14 @@ package com.style24.admin.biz.web;
 
 import java.util.Collection;
 
+import com.gagaframework.web.security.GagaPasswordEncoder;
 import com.style24.admin.biz.service.TsaCustomerService;
+import com.style24.admin.biz.service.TsaKakaoService;
+import com.style24.admin.biz.service.TsaSystemService;
 import com.style24.core.support.session.TscSession;
 import com.style24.persistence.domain.Customer;
 import com.style24.persistence.domain.CustomerSearch;
+import com.sun.xml.internal.bind.v2.TODO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -55,6 +59,15 @@ public class TsaCustomerController extends TsaBaseController {
 	@Autowired
 	private TsaCustomerService customerService;
 
+	@Autowired
+	private TsaSystemService systemService;
+
+	@Autowired
+	private GagaPasswordEncoder passwordEncoder;
+
+	@Autowired
+	private TsaKakaoService kakaoService;
+
 	/**
 	 * 1:1문의관리 화면
 	 * @return
@@ -363,7 +376,7 @@ public class TsaCustomerController extends TsaBaseController {
 	}
 
 	/**
-	 * 회원 정보
+	 * 회원정보
 	 * @param custNo - 고객번호
 	 * @return Customer
 	 * @author jsshin
@@ -376,6 +389,50 @@ public class TsaCustomerController extends TsaBaseController {
 		return customerService.getCustomerInfo(custNo);
 	}
 
+	/**
+	 * 회원정보 수정
+	 * @param customer - 고객정보
+	 * @return Customer
+	 * @author jsshin
+	 * @since 2020. 01. 20
+	 */
+	@PostMapping("/info/save")
+	@ResponseBody
+	public GagaResponse saveCustomerInfo(@RequestBody Customer customer) {
+		customerService.saveCustomerInfo(customer);
+		return ok(message.getMessage("SUCC_0002"));
+	}
+
+	/**
+	 * 회원비밀번호초기화
+	 *
+	 * @param customer -고객정보
+	 * @return GagaResponse
+	 * @throws Exception
+	 * @author jsshin
+	 * @since 2020. 01. 20
+	 */
+	@PostMapping("/password/reset")
+	@ResponseBody
+	public GagaResponse resetCustomerPassword(@RequestBody Customer customer) throws Exception {
+		String tempPasswd = systemService.getTemporaryPassword(10);
+		log.info("tempPasswd  ====> {}", tempPasswd);
+
+		customer.setPasswd(tempPasswd);
+		customer.setEncodedPasswd(passwordEncoder.encodeSha256(tempPasswd));
+		customer.setRegNo(TsaSession.getInfo().getRegNo());
+
+		// 비밀번호 수정
+		customerService.updateCustomerPassword(customer);
+
+		// 카카오 알림톡
+		kakaoService.sendCustomerTempPassword(customer);
+
+		// TODO: 2021.1.20 메일발송 서비스 붙여야함 - jsshin
+
+		return ok(message.getMessage("SUCC_0005"));
+	}
+
 	/**
 	 * 탈퇴회원
 	 * @return ModelAndView

+ 13 - 13
src/main/java/com/style24/admin/biz/web/TsaRendererController.java

@@ -199,18 +199,18 @@ public class TsaRendererController extends TsaBaseController {
 //	public Collection<AdmCommonCode> getSellStoreList() {
 //		return rendererService.getSellStoreList();
 //	}
-//
-//	/**
-//	 * 제휴링크 목록
-//	 * @param afChannel - 제휴채널
-//	 * @return
-//	 * @author gagamel
-//	 * @since 2020. 5. 4
-//	 */
-//	@GetMapping("/aflink/list/{afChannel}")
-//	@ResponseBody
-//	public Collection<AdmCommonCode> getAflinkList(@PathVariable String afChannel) {
-//		return rendererService.getAflinkList(afChannel);
-//	}
+
+	/**
+	 * 제휴채널 목록
+	 * @param afChannel - 상위제휴채널
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 1. 20
+	 */
+	@GetMapping("/aflink/list/{afChannel}")
+	@ResponseBody
+	public Collection<CommonCode> getAflinkList(@PathVariable String afChannel) {
+		return rendererService.getAflinkList(afChannel);
+	}
 
 }

+ 37 - 6
src/main/java/com/style24/admin/biz/web/TsaSettleController.java

@@ -1,16 +1,21 @@
 package com.style24.admin.biz.web;
 
+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.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.admin.biz.service.TsaBusinessService;
 import com.style24.admin.biz.service.TsaRendererService;
+import com.style24.admin.biz.service.TsaSettleService;
 import com.style24.admin.support.controller.TsaBaseController;
 import com.style24.admin.support.security.session.TsaSession;
-import com.style24.core.support.message.TscMessageByLocale;
+import com.style24.persistence.domain.AflinkFee;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -26,10 +31,7 @@ import lombok.extern.slf4j.Slf4j;
 public class TsaSettleController extends TsaBaseController {
 
 	@Autowired
-	private TscMessageByLocale message;
-
-	@Autowired
-	private TsaBusinessService businessService;
+	private TsaSettleService settleService;
 
 	@Autowired
 	private TsaRendererService rendererService;
@@ -166,4 +168,33 @@ public class TsaSettleController extends TsaBaseController {
 		return mav;
 	}
 
+	/**
+	 * 제휴채널정산 화면
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 1. 20
+	 */
+	@GetMapping("/aflink/fee/form")
+	public ModelAndView afLinkFeeForm() {
+		ModelAndView mav = new ModelAndView("settle/AfLinkSettleForm");
+
+		// 제휴채널 목록
+		mav.addObject("afChannelList", rendererService.getAvailCommonCodeList("G053"));
+
+		return mav;
+	}
+
+	/**
+	 * 제휴채널정산 목록
+	 * @param aflinkFee - 제휴채널수수료 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 1. 20
+	 */
+	@PostMapping("/aflink/fee/list")
+	@ResponseBody
+	public Collection<AflinkFee> getAfLinkFeeList(@RequestBody AflinkFee aflinkFee) {
+		return settleService.getAfLinkFeeList(aflinkFee);
+	}
+
 }

+ 3 - 0
src/main/java/com/style24/admin/biz/web/TsaSystemController.java

@@ -142,6 +142,9 @@ public class TsaSystemController extends TsaBaseController {
 		// 외부몰벤더 콤보박스 목록
 		mav.addObject("vendorList", rendererService.getCommonCodeList("G003", "Y", TsaSession.getInfo().getSupplyCompCd()));
 
+		// 제휴채널 콤보박스 목록
+		mav.addObject("afLinkList", rendererService.getAllAflinkList());
+
 		if (mode.equals("U")) {
 			// 어드민사용자정보
 			mav.addObject("userInfo", systemService.getUser(userNo));

+ 35 - 0
src/main/java/com/style24/persistence/domain/AflinkFee.java

@@ -0,0 +1,35 @@
+package com.style24.persistence.domain;
+
+import com.style24.persistence.TscBaseDomain;
+
+import lombok.Data;
+
+/**
+ * 제휴채널수수료 Domain
+ *
+ * @author gagamel
+ * @since 2021. 1. 20
+ */
+@SuppressWarnings("serial")
+@Data
+public class AflinkFee extends TscBaseDomain {
+
+	private String afLinkCd;	// 제휴채널코드
+	private String afLinkNm;	// 제휴채널명
+	private String afChannel;	// 상위제휴채널
+	private String afChannelNm;	// 상위제휴채널명
+	private String occurDt;		// 발생(정산)일자
+	private String ordNo;		// 주문번호
+	private String ordDtlStat;	// 주문상세상태
+	private long sellAmt;		// 판매금액
+	private long cpnDcAmt;		// 쿠폰할인금액
+	private long pntDcAmt;		// 포인트사용금액
+	private long gfcdUseAmt;	// 상품권사용금액
+	private long payAmt;		// 결제액(VAT포함)
+	private long salesAmt;		// 매출액(VAT제외)
+
+	// 검색조건
+	private String startDt;
+	private String endDt;
+
+}

+ 69 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsaCustomer.xml

@@ -162,6 +162,69 @@
 		WHERE  CUST_NO = #{custNo}
 	</select>
 
+	<!--회원정보 수정-->
+	<update id="updateCustomerInfo" parameterType="Customer">
+		/* TsaCustomer.updateCustomerInfo */
+		UPDATE TB_CUSTOMER
+		<set>
+		    <if test="custGb != null and custGb != ''">
+		     CUST_GB = #{custGb},
+		    </if>
+		    <if test="custGrade != null and custGrade !=''">
+		     CUST_GRADE = #{custGrade},
+		    </if>
+		    <if test="emailAgreeYn != null and emailAgreeYn != ''">
+		     EMAIL_AGREE_DT = CASE WHEN EMAIL_AGREE_YN = #{emailAgreeYn}
+		                      THEN EMAIL_AGREE_DT
+		                      ELSE NOW()
+		                      END,
+		     EMAIL_AGREE_YN = #{emailAgreeYn},
+		    </if>
+		    <if test="smsAgreeYn != null and smsAgreeYn != ''">
+		     SMS_AGREE_DT = CASE WHEN SMS_AGREE_YN = #{smsAgreeYn}
+		                    THEN SMS_AGREE_DT
+		                    ELSE NOW()
+		                    END,
+		     SMS_AGREE_YN = #{smsAgreeYn},
+		    </if>
+		    <if test="homePostNo != null and homePostNo != ''">
+		     HOME_POST_NO = #{homePostNo},
+		    </if>
+		    <if test="homeBaseAddr != null and homeBaseAddr != ''">
+		     HOME_BASE_ADDR = #{homeBaseAddr},
+		    </if>
+		    <if test="homeDtlAddr != null and homeDtlAddr != ''">
+		     HOME_DTL_ADDR = #{homeDtlAddr},
+		    </if>
+		    <if test="birthYmd != null and birthYmd != ''">
+		     BIRTH_YMD = REPLACE(#{birthYmd}, '-', ''),
+		    </if>
+		    <if test="cellPhnno != null and cellPhnno != ''">
+		     CELL_PHNNO = #{cellPhnno},
+		    </if>
+		    <if test="email != null and email != ''">
+		     EMAIL = #{email},
+		    </if>
+		    <if test="managedRsn != null and managedRsn != ''">
+		     MANAGED_DT = CASE WHEN MANAGED_RSN = #{managedRsn}
+		                       AND  MANAGED_DTL_RSN = #{managedDtlRsn}
+		                  THEN MANAGED_DT
+		                  ELSE NOW()
+		                  END,
+		     MANAGED_RSN = #{managedRsn},
+		     MANAGED_DTL_RSN = #{managedDtlRsn},
+		    </if>
+		    <if test="managedRsn == null or managedRsn == ''">
+		     MANAGED_RSN = NULL,
+		     MANAGED_DTL_RSN =  NULL,
+		     MANAGED_DT = NULL,
+		    </if>
+		     UPD_NO = #{updNo},
+		     UPD_DT = NOW()
+		</set>
+		WHERE CUST_NO = #{custNo}
+	</update>
+
 	<!-- 탈퇴회원목록 -->
 	<select id="getCustomerSecedeList" parameterType="CustomerSearch" resultType="Customer">
 		/* TsaCustomer.getSecedeCustomerList */
@@ -328,4 +391,10 @@
 		</if>
 	</select>
 
+	<insert id="createException">
+		/* TsaCustomer.createException */
+		INSERT INTO TB_CUSTOMER (CUST_NO)
+		VALUES (NULL)
+	</insert>
+
 </mapper>

+ 23 - 10
src/main/java/com/style24/persistence/mybatis/shop/TsaRenderer.xml

@@ -341,16 +341,6 @@
 		AND    USE_YN = 'Y'
 	</select>
 
-	<!-- 제휴링크 목록 -->
-	<select id="getAflinkList" parameterType="String" resultType="CommonCode">
-		/* TsaRenderer.getAflinkList */
-		SELECT AF_LINK_CD AS CD
-		     , AF_LINK_NM AS CD_NM
-		FROM   TB_AF_LINK
-		WHERE  AF_CHANNEL = #{afChannel}
-		AND    USE_YN = 'Y'
-	</select>
-	
 	<!-- 색상그룹코드 RGB 목록 -->
 	<select id="getColorGrpCdRgbList" resultType="CommonCode">
 		/* TsaRenderer.getColorGrpCdRgbList */
@@ -373,5 +363,28 @@
 		AND USE_YN = 'Y'
 		ORDER BY DELV_FEE_CD
 	</select>
+	
+	<!-- 전체 제휴채널 목록 -->
+	<select id="getAllAflinkList" resultType="CommonCode">
+		/* TsaRenderer.getAllAflinkList */
+		SELECT AL.AF_LINK_CD                      AS CD
+		     , CONCAT(CC.CD_NM,'-',AL.AF_LINK_NM) AS CD_NM
+		FROM   TB_AF_LINK AL
+		     , TB_COMMON_CODE CC
+		WHERE  AL.AF_CHANNEL = CC.CD
+		AND    AL.USE_YN = 'Y'
+		AND    CC.CD_GB = 'G053'
+		ORDER  BY AL.DISP_ORD
+	</select>
+	
+	<!-- 제휴채널 목록 -->
+	<select id="getAflinkList" parameterType="String" resultType="CommonCode">
+		/* TsaRenderer.getAflinkList */
+		SELECT AF_LINK_CD AS CD
+		     , AF_LINK_NM AS CD_NM
+		FROM   TB_AF_LINK
+		WHERE  AF_CHANNEL = #{afChannel}
+		AND    USE_YN = 'Y'
+	</select>
 
 </mapper>

+ 75 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsaSettle.xml

@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.style24.admin.biz.dao.TsaSettleDao">
+
+	<!-- 제휴채널정산 목록 -->
+	<select id="getAfLinkFeeList" parameterType="AfLinkFee" resultType="AfLinkFee">
+		/* TsaSettle.getAfLinkFeeList */
+		SELECT AF_CHANNEL                                         /*상위채널코드*/
+		     , FN_GET_CODE_NM('G053',AF_CHANNEL) AS AF_CHANNEL_NM /*상위채널명*/
+		     , AF_LINK_CD                                         /*채널코드*/
+		     , AF_LINK_NM                                         /*채널명*/
+		     , OCCUR_DT                                           /*발생일시*/
+		     , ORD_NO                                             /*주문번호*/
+		     , ORD_DTL_STAT                                       /*주문상세상태*/
+		     , SUM(SELL_AMT)                     AS SELL_AMT      /*판매금액(상품금액.배송비제외)*/
+		     , SUM(CPN1_DC_AMT +
+		           TMTB1_DC_AMT + TMTB2_DC_AMT +
+		           GOODS_CPN_DC_AMT +
+		           CART_CPN_DC_AMT)              AS CPN_DC_AMT     /*쿠폰할인금액*/
+		     , SUM(PNT_DC_AMT + PRE_PNT_DC_AMT)  AS PNT_DC_AMT     /*포인트할인금액*/
+		     , SUM(GFCD_USE_AMT)                 AS GFCD_USE_AMT   /*상품권사용금액*/
+		     , SUM(SELL_AMT - (CPN1_DC_AMT + TMTB1_DC_AMT + TMTB2_DC_AMT + GOODS_CPN_DC_AMT + CART_CPN_DC_AMT + PG_CPN_AMT)
+		                    - (PNT_DC_AMT + PRE_PNT_DC_AMT)
+		                    - GFCD_USE_AMT)      AS PAY_AMT        /*결제금액(VAT포함)*/
+		     , SUM(TRUNCATE((SELL_AMT - (CPN1_DC_AMT + TMTB1_DC_AMT + TMTB2_DC_AMT + GOODS_CPN_DC_AMT + CART_CPN_DC_AMT + PG_CPN_AMT)
+		                              - (PNT_DC_AMT + PRE_PNT_DC_AMT)
+		                              - GFCD_USE_AMT
+		                    ) / 1.1,0))          AS SALES_AMT      /*매출금액(VAT제외). 건별로 1.1로 나누고 소숫점을 절사하여 합계를 낸다.*/
+		FROM   (
+		        SELECT AL.AF_CHANNEL
+		             , ODH.AF_LINK_CD                                              /*제휴링크코드*/
+		             , AL.AF_LINK_NM
+		             , DATE_FORMAT(ODH.REG_DT,'%Y-%m-%d %m:%h:%s') AS OCCUR_DT     /*발생일자*/
+		             , ODH.ORD_NO
+		             , ODH.ORD_DTL_NO
+		             , CASE WHEN ODH.ORD_DTL_STAT = 'G013_20' THEN
+		                        FN_GET_CODE_NM('G013',ODH.ORD_DTL_STAT)
+		                    ELSE
+		                        IFNULL(FN_GET_CODE_NM('G685',OCD.CHG_STAT),'주문취소')
+		               END                                         AS ORD_DTL_STAT /*주문상세상태*/
+		             , (ODH.ORD_AMT - ODH.CNCL_RTN_AMT)            AS SELL_AMT     /*판매금액(상품금액.배송비제외)*/
+		             , ODH.CPN1_DC_AMT                                             /*1차쿠폰(즉시할인쿠폰)할인금액*/
+		             , ODH.TMTB1_DC_AMT                                            /*다다익선할인금액(수량)*/
+		             , ODH.TMTB2_DC_AMT                                            /*다다익선할인금액(금액)*/
+		             , ODH.GOODS_CPN_DC_AMT                                        /*상품쿠폰할인금액*/
+		             , ODH.CART_CPN_DC_AMT                                         /*장바구니할인금액*/
+		             , 0                                           AS PG_CPN_AMT   /*PG쿠폰금액.TODO:바로 아래 쿼리문으로 대체해야 함*/
+		             -- , ODH.PG_CPN_AMT                                              /*PG쿠폰금액*/
+		             , ODH.PNT_DC_AMT                                              /*포인트할인금액*/
+		             , ODH.PRE_PNT_DC_AMT                                          /*선포인트할인금액*/
+		             , ODH.GFCD_USE_AMT                                            /*상품권사용금액*/
+		        FROM   TB_ORDER_DETAIL_HST ODH
+		        INNER JOIN TB_AF_LINK AL
+		                ON ODH.AF_LINK_CD = AL.AF_LINK_CD
+		        LEFT OUTER JOIN TB_ORDER_CHANGE_DETAIL OCD
+		                     ON ODH.ORD_DTL_NO = OCD.ORD_DTL_NO
+		                    AND OCD.CHG_STAT IN ('G685_21','G685_32','G685_42')	/*취소완료,교환완료,반품완료*/
+		        WHERE  ODH.ORD_DTL_STAT IN ('G013_20','G013_99') /*결제완료,주문취소*/
+		        AND    ODH.REG_DT <![CDATA[>=]]> STR_TO_DATE(#{startDt},'%Y-%m-%d')
+		        AND    ODH.REG_DT <![CDATA[<]]> DATE_ADD(STR_TO_DATE(#{endDt},'%Y-%m-%d'),INTERVAL 1 DAY)
+		        <if test="ordNo != null and ordNo != ''">
+		        AND    ODH.ORD_NO = #{ordNo}
+		        </if>
+		        <if test="afLinkCd != null and afLinkCd != ''">
+		        AND    AL.AF_LINK_CD = #{afLinkCd}
+		        </if>
+		        <if test="afChannel != null and afChannel != ''">
+		        AND    AL.AF_CHANNEL = #{afChannel}
+		        </if>
+		       ) U
+		GROUP  BY AF_CHANNEL, AF_LINK_CD, AF_LINK_NM, OCCUR_DT, ORD_NO, ORD_DTL_STAT
+		ORDER  BY AF_CHANNEL, AF_LINK_CD, AF_LINK_NM, OCCUR_DT, ORD_NO, ORD_DTL_STAT
+	</select>
+
+</mapper>

+ 21 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsaSystem.xml

@@ -25,6 +25,27 @@
 		     , CASE WHEN SUBSTRING(REPLACE(A.ROLE_CD,'G001_', ''),1,1) = 'C' THEN
 		                FN_GET_CODE_NM('G003',A.ROLE_REF_VAL)
 		       END                                         AS VENDOR_NM      /*벤더명*/
+		     , CASE WHEN SUBSTRING(REPLACE(A.ROLE_CD,'G001_', ''),1,1) = 'D' THEN
+		                A.ROLE_REF_VAL
+		       END                                         AS AF_LINK_CD     /*제휴링크코드*/
+		     , CASE WHEN SUBSTRING(REPLACE(A.ROLE_CD,'G001_', ''),1,1) = 'D' THEN
+		                (SELECT AF_LINK_NM
+		                 FROM   TB_AF_LINK
+		                 WHERE  AF_LINK_CD = A.ROLE_REF_VAL
+		                )
+		       END                                         AS AF_LINK_NM     /*제휴링크명*/
+		     , CASE WHEN SUBSTRING(REPLACE(A.ROLE_CD,'G001_', ''),1,1) = 'D' THEN
+		                (SELECT AF_CHANNEL
+		                 FROM   TB_AF_LINK
+		                 WHERE  AF_LINK_CD = A.ROLE_REF_VAL
+		                )
+		       END                                         AS AF_CHANNEL     /*제휴채널*/
+		     , CASE WHEN SUBSTRING(REPLACE(A.ROLE_CD,'G001_', ''),1,1) = 'D' THEN
+		                (SELECT FN_GET_CODE_NM('G053',AL.AF_CHANNEL)
+		                 FROM   TB_AF_LINK AL
+		                 WHERE  AL.AF_LINK_CD = A.ROLE_REF_VAL
+		                )
+		       END                                         AS AF_CHANNEL_NM  /*제휴채널명*/
 		     , A.EMAIL                                                       /*이메일*/
 		     , A.CELL_PHNNO                                                  /*휴대전화번호*/
 		     , A.PNT_ASSIGN_AMT                                              /*포인트부여가능금액*/

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 434 - 478
src/main/webapp/WEB-INF/views/customer/CustomerDetailForm.html


+ 200 - 0
src/main/webapp/WEB-INF/views/settle/AfLinkSettleForm.html

@@ -0,0 +1,200 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : AfLinkSettleForm.html
+ * @desc    : 제휴채널정산 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.01.20   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/aflink/fee/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
+				<table class="frmStyle" aria-describedby="검색조건">
+					<colgroup>
+						<col style="width:10%;"/>
+						<col style="width:60%;"/>
+						<col style="width:10%;"/>
+						<col/>
+					</colgroup>
+					<tr>
+						<th>발생(정산)기간<i class="required" title="필수" aria-hidden="true"></i></th>
+						<td id="terms">
+						</td>
+						<th>제휴채널</th>
+						<td>
+							<select name="afChannel">
+								<option value="">[전체]</option>
+								<option th:if="${afChannelList}" th:each="oneData, status : ${afChannelList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+							</select>
+							<select name="afLinkCd">
+								<option value="">[전체]</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" onclick="$('#searchForm')[0].reset();">초기화</button>
+					</li>
+				</ul>
+			</form>
+		</div>
+		<!-- 검색조건 영역 -->
+
+		<!-- 리스트 영역 -->
+		<div class="panelStyle">
+			<!-- 버튼 배치 영역 -->
+			<ul class="panelBar">
+				<li class="left">
+					<span class="infoTxt cBlue">
+						<i class="fa fa-info-circle" aria-hidden="true"></i><strong>발생(정산)일시</strong> : 결제/취소/반품이 실제 발생한 일시. <i class="fa fa-info-circle marL10" aria-hidden="true"></i><strong>판매금액</strong> : 정상 판매가로 배송비를 제외한 상품금액 합계<br/>
+						<i class="fa fa-info-circle" aria-hidden="true"></i><strong>쿠폰할인금액</strong> : 즉시할인 + 다다익선 + 상품쿠폰 + 장바구니쿠폰 + PG결제쿠폰 등의 합계. <i class="fa fa-info-circle marL10" aria-hidden="true"></i><strong>포인트사용금액</strong> : 포인트사용 + 선포인트사용 합계<br/>
+						<i class="fa fa-info-circle" aria-hidden="true"></i><strong>결제액</strong> : 판매금액 - 쿠폰할인금액 - 포인트사용금액 - 상품권사용금액. <i class="fa fa-info-circle marL10" aria-hidden="true"></i><strong>매출액</strong> : 결제액 / 1.1
+					</span>
+				</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: 670px" class="ag-theme-balham"></div>
+		</div>
+		<!-- //리스트 영역 -->
+	</div>
+
+<script th:inline="javascript">
+/*<![CDATA[*/
+	let columnDefs = [
+		{headerName: "상위제휴채널", field: "afChannelNm", width: 100, rowGroup: true, hide: true},
+		{headerName: "제휴채널", field: "afLinkNm", width: 100},
+		{headerName: "발생(정산)일시", field: "occurDt", width: 150, cellClass: 'text-center'},
+		{headerName: "주문번호", field: "ordNo", width: 80, cellClass: 'text-center'},
+		{headerName: "주문상태", field: "ordDtlStat", width: 100, cellClass: 'text-center'},
+		{
+			headerName: '판매금액', field: 'sellAmt', width: 120, cellClass: 'text-right',
+			aggFunc: 'sum', enableValue: true, cellRenderer: function (params) { return gagaAgGrid.toAddComma(params.value); }
+		},
+		{
+			headerName: '쿠폰할인금액', field: 'cpnDcAmt', width: 120, cellClass: 'text-right',
+			aggFunc: 'sum', enableValue: true, cellRenderer: function (params) { return gagaAgGrid.toAddComma(params.value); }
+		},
+		{
+			headerName: '포인트사용금액', field: 'pntDcAmt', width: 120, cellClass: 'text-right',
+			aggFunc: 'sum', enableValue: true, cellRenderer: function (params) { return gagaAgGrid.toAddComma(params.value); }
+		},
+		{
+			headerName: '상품권사용금액', field: 'gfcdUseAmt', width: 120, cellClass: 'text-right',
+			aggFunc: 'sum', enableValue: true, cellRenderer: function (params) { return gagaAgGrid.toAddComma(params.value); }
+		},
+		{
+			headerName: '결제액(VAT포함)', field: 'payAmt', width: 120, cellClass: 'text-right',
+			aggFunc: 'sum', enableValue: true, cellRenderer: function (params) { return gagaAgGrid.toAddComma(params.value); }
+		},
+		{
+			headerName: '매출액(VAT제외)', field: 'salesAmt', width: 120, cellClass: 'text-right',
+			aggFunc: 'sum', enableValue: true, cellRenderer: function (params) { return gagaAgGrid.toAddComma(params.value); }
+		}
+	];
+
+	let gridOptions = gagaAgGrid.getGridOptions(columnDefs);
+
+	gridOptions.autoGroupColumnDef = {
+			headerName: "상위제휴채널",
+			field: "grouping",
+			width: 200,
+			cellRendererParams: {
+				suppressCount: true
+			}
+		};
+	
+	// for expand everything
+	gridOptions.groupDefaultExpanded = -1;
+	
+	// 제휴채널 콤보박스 변경시
+	$('#searchForm select[name=afChannel]').on('change', function() {
+		if (gagajf.isNull($(this).val())) {
+			$("#searchForm select[name=afLinkCd] option:gt(0)").remove();
+		} else {
+			var actionUrl = '/renderer/aflink/list/' + $(this).val();
+			cfnCreateCombo(actionUrl, $('#searchForm select[name=afLinkCd]'), "[전체]");
+		}
+	});
+	
+	// 검색
+	$('#btnSearch').on('click', function() {
+		// 입력 값 체크
+		if (!gagajf.validation($('#searchForm')))
+			return false;
+		
+		gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm', fnCreateTotal);
+	});
+	
+	// 합계 생성
+	let fnCreateTotal = function() {
+		let sellAmt = 0;
+		let cpnDcAmt = 0;
+		let pntDcAmt = 0;
+		let gfcdUseAmt = 0;
+		let payAmt = 0;
+		let salesAmt = 0;
+
+		gridOptions.api.forEachNode(function(rowNode, index) {
+			if (!rowNode.group) {
+				if (typeof rowNode.data.sellAmt == 'number') { sellAmt += rowNode.data.sellAmt; }
+				if (typeof rowNode.data.cpnDcAmt == 'number') { cpnDcAmt += rowNode.data.cpnDcAmt; }
+				if (typeof rowNode.data.pntDcAmt == 'number') { pntDcAmt += rowNode.data.pntDcAmt; }
+				if (typeof rowNode.data.gfcdUseAmt == 'number') { gfcdUseAmt += rowNode.data.gfcdUseAmt; }
+				if (typeof rowNode.data.payAmt == 'number') { payAmt += rowNode.data.payAmt; }
+				if (typeof rowNode.data.salesAmt == 'number') { salesAmt += rowNode.data.salesAmt; }
+			}
+		});
+
+		let data = {
+			grouping: '합계', afChannelNm: null, afLinkNm: null,
+			occurDt: null, ordNo: null, ordDtlStat: null,
+			sellAmt: sellAmt, cpnDcAmt: cpnDcAmt,
+			pntDcAmt: pntDcAmt, gfcdUseAmt: gfcdUseAmt,
+			payAmt: payAmt, salesAmt: salesAmt
+		};
+
+		gagaAgGrid.setPinnedRowData(gridOptions, data, 'top');
+	}
+	
+	// 엑셀다운로드
+	$('#btnExcel').on('click', function() {
+		gagaAgGrid.exportToExcel('제휴채널정산 목록', gridOptions);
+	});
+	
+	$(document).ready(function() {
+		cfnCreateCalendar('#terms', 'startDt', 'endDt', true, '발생(정산)');
+		$('.btnToday').trigger('click');
+		
+		// Create a agGrid
+		gagaAgGrid.createGrid('gridList', gridOptions);
+	});
+/*]]>*/
+</script>
+
+</html>

+ 28 - 2
src/main/webapp/WEB-INF/views/system/UserDetailForm.html

@@ -75,6 +75,10 @@
 								<option th:if="${sessionInfo.vendorId == null}" value="">[선택]</option>
 								<option th:if="${vendorList}" th:each="oneData, status : ${vendorList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
 							</select>
+							<select name="afLinkCd" style="display: none">
+								<option th:if="${sessionInfo.afLinkCd == null}" value="">[선택]</option>
+								<option th:if="${afLinkList}" th:each="oneData, status : ${afLinkList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+							</select>
 						</td>
 					</tr>
 					<tr>
@@ -90,7 +94,7 @@
 					<tr>
 						<th>포인트부여가능금액</th>
 						<td>
-							<input type="text" name="pntAssignAmt" placeholder="" maxlength="6" data-valid-type="integer" data-valid-name="포인트부여가능금액"/>
+							<input type="text" name="pntAssignAmt" class="aR" placeholder="" maxlength="6" data-valid-type="integer" data-valid-name="포인트부여가능금액"/>
 						</td>
 						<th>IP주소</th>
 						<td>
@@ -183,6 +187,10 @@
 								<option th:if="${sessionInfo.vendorId == null}" value="">[선택]</option>
 								<option th:if="${vendorList}" th:each="oneData, status : ${vendorList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}" th:selected="${userInfo.roleRefVal == oneData.cd}"></option>
 							</select>
+							<select name="afLinkCd" style="display: none">
+								<option th:if="${sessionInfo.afLinkCd == null}" value="">[선택]</option>
+								<option th:if="${afLinkList}" th:each="oneData, status : ${afLinkList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+							</select>
 						</td>
 					</tr>
 					<tr>
@@ -288,14 +296,22 @@
 		if (abRoleCd == 'G001_A' || abRoleCd == 'G001_B') { // 입점업체
 			$('#userRegisterForm select[name=supplyCompCd]').show();
 			$('#userRegisterForm select[name=vendorId]').hide();
+			$('#userRegisterForm select[name=afLinkCd]').hide();
 			$('#registerRoleRefVal').text('업체');
 		} else if (abRoleCd == 'G001_C') { // 외부몰벤더
 			$('#userRegisterForm select[name=supplyCompCd]').hide();
 			$('#userRegisterForm select[name=vendorId]').show();
+			$('#userRegisterForm select[name=afLinkCd]').hide();
 			$('#registerRoleRefVal').text('외부몰벤더');
-		} else {
+		} else if (abRoleCd == 'G001_D') { // 제휴채널
 			$('#userRegisterForm select[name=supplyCompCd]').hide();
 			$('#userRegisterForm select[name=vendorId]').hide();
+			$('#userRegisterForm select[name=afLinkCd]').show();
+			$('#registerRoleRefVal').text('제휴채널');
+		} else { // 외부몰벤더
+			$('#userRegisterForm select[name=supplyCompCd]').hide();
+			$('#userRegisterForm select[name=vendorId]').hide();
+			$('#userRegisterForm select[name=afLinkCd]').hide();
 			$('#registerRoleRefVal').text('');
 		}
 	});
@@ -387,14 +403,22 @@
 		if (abRoleCd == 'G001_A' || abRoleCd == 'G001_B') { // 입점업체
 			$('#userDetailForm select[name=supplyCompCd]').show();
 			$('#userDetailForm select[name=vendorId]').hide();
+			$('#userDetailForm select[name=afLinkCd]').hide();
 			$('#detailRoleRefVal').text('업체');
 		} else if (abRoleCd == 'G001_C') { // 외부몰벤더
 			$('#userDetailForm select[name=supplyCompCd]').hide();
 			$('#userDetailForm select[name=vendorId]').show();
+			$('#userDetailForm select[name=afLinkCd]').hide();
 			$('#detailRoleRefVal').text('외부몰벤더');
+		} else if (abRoleCd == 'G001_D') { // 제휴채널
+			$('#userDetailForm select[name=supplyCompCd]').hide();
+			$('#userDetailForm select[name=vendorId]').hide();
+			$('#userDetailForm select[name=afLinkCd]').show();
+			$('#detailRoleRefVal').text('제휴채널');
 		} else {
 			$('#userDetailForm select[name=supplyCompCd]').hide();
 			$('#userDetailForm select[name=vendorId]').hide();
+			$('#userDetailForm select[name=afLinkCd]').hide();
 			$('#detailRoleRefVal').text('');
 		}
 	});
@@ -458,6 +482,8 @@
 					$(formId + ' input[name=roleRefVal]').val($(formId + ' select[name=supplyCompCd]').val());
 				} else if (abRoleCd == 'G001_C') { // 외부몰벤더
 					$(formId + ' input[name=roleRefVal]').val($(formId + ' select[name=vendorId]').val());
+				} else if (abRoleCd == 'G001_D') { // 제휴채널
+					$(formId + ' input[name=roleRefVal]').val($(formId + ' select[name=afLinkCd]').val());
 				} else {
 					$(formId + ' input[name=roleRefVal]').val('');
 				}

+ 6 - 0
src/main/webapp/WEB-INF/views/system/UserForm.html

@@ -130,6 +130,12 @@
 		{headerName: "권한관련값", field: "roleRefVal", width: 150, cellClass: 'text-center', hide: true},
 		{headerName: "업체", field: "supplyCompNm", width: 150, cellClass: 'text-center'},
 		{headerName: "외부몰벤더", field: "vendorNm", width: 150, cellClass: 'text-center'},
+		{
+			headerName: "제휴채널", field: "afLinkNm", width: 120, cellClass: 'text-center',
+			cellRenderer: function(params) {
+				return params.data.roleCd.indexOf('G001_D') > -1 ? params.data.afChannelNm + '-' + params.value : '';
+			}
+		},
 		{headerName: "이메일", field: "email", width: 200, cellClass: 'text-center'},
 		{headerName: "휴대전화번호", field: "cellPhnno", width: 150, cellClass: 'text-center'},
 		{headerName: "IP주소", field: "ipAddr", width: 100, cellClass: 'text-center'},

Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů