고도몰5 pro / 21년 03월 원본소스 튜닝입니다.
추천인 마일리지 관련 튜닝을 하고나자, 추천인으로 받은 마일리지는 사용기한을 현재 다른 마일리지의 사용기한인 지급 후 1년보다 더 짧게 설정하고 싶다는 주문이 들어왔다.
현재 고도몰 관리자기능에서는 모든 마일리지의 사용기한은 전체적으로 하나만 설정할 수 있고, 지급하는 마일리지별로 사용기한을 다르게 설정하는 기능은 구현되어있지 않다.
우선 기본 관리자기능의 마일리지 지급기한 설정을 들여다보면
es_config테이블에 member.mileageBasic 에 "expiryDays" : "365" 라는 설정을 볼 수 있다.
다음으로 마일리지가 만료되어 소멸되게 하는 기능이 어떻게 작동하는지를 살펴봤다. Mileage 클래스의 expire(). es_memberMileage 테이블에서 deleteScheduleDt(소멸예정일) 값을 통해 해당 데이터들을 SELECT, 소멸예정일이 그 날로 되어있는 마일리지정보들을 가져와서 처리하는 방식이었다. (스케쥴러를 통해 특정 시간대에 코드 동작)
(MileageDAO class에 getListsByExpireDate 메소드 추정 -> 테스트서버에 스케쥴러가 비활성화되어있어 확인을 못해서 라이브서버에서 phpMyAdmin을 통해 deleteScheduleDt값을 임의로 바꿔서 실제 해당 값에 따라 그 날짜에 삭제되는지 동작 확인)
그렇다면 DB에 마일리지 정보 등록시에 deleteScheduleDt값만 조절해서 기본값과 다른 값으로 넣어줄 수 있다면 우리가 원하는 기능을 구현할 수 있을 것으로 판단.
Component/Mileage/Mileage.php 를 운영소스로 복사.
// 원본소스 Mileage 클래스의 public function setMemberMileage 복사
// use 코드도 현재 운영소스에 존재하지 않는 클래스들은 전부 복사해옴
if ($domain->getMileage() > 0) {
//마일리지 유효기간을 reasonCd에 따라 다르게 설정하기 위해 조건추가(추천인 마일리지는 일반마일리지보다 사용기한을 줄이기 위해)
$recommReasonCds = array('01005006','01005007');
if(in_array($reasonCd, $recommReasonCds)){
// echo "<script>console.log('".$reasonCd."')</script>";
// exit;
$domain->setDeleteScheduleDt($domain->getMileage() > 0 ? MileageUtil::getRecommDeleteScheduleDate() : '0000-00-00 00:00:00');
// getRecommDeleteScheduleDate() 는 튜닝을 위해 새로 생성한 메소드
$logger->info(sprintf('Set add mileage delete schedule datetime[%s]', $domain->getDeleteScheduleDt()));
} else {
$domain->setDeleteScheduleDt($domain->getMileage() > 0 ? MileageUtil::getDeleteScheduleDate() : '0000-00-00 00:00:00');
$logger->info(sprintf('Set add mileage delete schedule datetime[%s]', $domain->getDeleteScheduleDt()));
}
}
//Component/Mileage/MileageUtil.php 를 운영소스로 복사.
//별도의 사용기한을 설정해줄 수 있는 메소드를 생성(기존 메소드 복사해서 Config에서 가져오는 값만 변경
public static function getRecommDeleteScheduleDate()
{
$mileageConfig = gd_policy('member.mileageBasic');
if ($mileageConfig['expiryFl'] === 'n') {
return '9999-12-31 00:00:00';
} else {
//정책에서 expiryDays값을 가져오던 것을 recommExpiryDays를 가져오도록 변경
$expiryDays = $mileageConfig['recommExpiryDays'];
// echo "<script>console.log('".$expiryDays."')</script>";
return DateTimeUtils::dateFormat('Y-m-d G:i:s', '+' . $expiryDays . ' day');
}
}
기존 정책의 expiryDays 말고 다른 값을 설정할 수 있도록 관리자페이지 튜닝
admin/member/member_mileage_basic.php를 원본소스에서 운영소스로 복사
아래 HTML코드에 - 추천인 마일리지 부분에 별도 설정값을 설정할 수 있게 코드 복사한 뒤 name, value값만 변경해줌.
: 마일리지 적립일로부터
<input type="text" name="expiryDays" value="<?= $data['expiryDays']; ?>" maxlength="4" class="form-control js-number width-2xs" data-number="4,9999,365"/>
일 까지<br />
- 추천인 마일리지 : 마일리지 적립일로부터
<input type="text" name="recommExpiryDays" value="<?= $data['recommExpiryDays']; ?>" maxlength="4" class="form-control js-number width-2xs" data-number="4,9999,365"/>
일 까지
문제점: 추천인 마일리지 말고 다른 이벤트 마일리지도 사용기한을 기본과 다르게 설정하고 싶다고 하면 그때마다 코드를 고쳐야한다.
해결방안: 지급하는 마일리지마다 별도의 사용기한을 설정할 수 있도록 튜닝
21.06.24. 현재는 제가 고도몰을 만지지 않고 있는데, 이렇게 했을 때 마일리지를 적용해 구매한 상품을 환불할 때 어떤 문제가 생길 수 있다는 제보가 있었습니다. 근데 직접 확인한 게 아니라서 뭐라고 더 얘기하기가 어렵네요ㅠㅠ
안녕하세요 고도몰 사용하고있는 사용자입니다
마일리지 튜닝 관련해서 댓글남깁니다
혹시 마일리지를 회원 등급별로 사용가능액을 세팅할 방법은 없을까요?
방법이 있다면 혹시 메일로 한번 답장 가능할까요?
귀찮으시겠지만 한 번만 도와주세요
mfood9594913@naver.com입니다