Taebu / prq

prq.co.kr
MIT License
1 stars 0 forks source link

톡톡메세지 비즈톡 재 개발 요청 #84

Open moonsungjun opened 6 years ago

moonsungjun commented 6 years ago

톡톡메세지 기존 문자발송 부분을 옐로우톡 발송도 되도록 개발요청

분류 : 톡톡메세지 발송 , 옐로우톡 발송 2가지 발송방법을 선택해서 보낼 수 있음.

발송제한 : 월 발송건수를 제한 할 수 있는 기능 . (예시: 월 1000건 발송 제한) 발송 단위 조정 가능하도록 개발. 상점별로 발송 제한을 해야됨.

대리점 등급 별로 옐로우아이디 지정 각 대리점마다 옐로우아이디가 다름.

예시 A대리점 -> @배달캐시큐 B대리점 -> @배달톡톡 C대리점 -> @배달장독대

Taebu commented 6 years ago
key value
결제 요청 구분(43 고정) *Mode
가맹점 도메인 *Recordkey
상점아이디 *Mrchid
서비스아이디 *Svcid
상품명 *Prdtnm
결제요청금액 *Prdtprice
자동결제 유저키 *USERKEY
가맹점거래번호 *Tradeid
자동결제 구분 *AutoBillFlag
결제 통보 이메일 보내기 여부 *Emailflag
자동결제 KEY *AutoBillKey
최초 자동결제 최초일자 *AutoBillDate
USERKEY 요청 구분 ReqOpt
결제자 이메일 Email
사용자 ID Userid
상품코드 Prdtcd
아이템 Item
리셀러 하위 상점 key Cpcd
실판매자명 Sellernm
실판매자 연락처 Sellertel
이통사 Commid
휴대폰번호 No
주민번호 Socialno
Taebu commented 6 years ago
drop table prq_ata_pay;
create table prq_ata_pay(
  `ap_no` int unsigned auto_increment,
  `st_no` int(11) unsigned NOT NULL comment '상점 번호',
  `st_name` varchar(255) NOT NULL DEFAULT '' comment '상점이름',
  `prq_fcode` char(18) NOT NULL DEFAULT '' comment '가맹점코드',
  `ap_name` int(11) not null comment '상품 이름',
  `ap_price` int(11) not null comment '가입금액',
  `ap_status` varchar(20) not null default 'join' 
        comment '정상 join, 정지 stop, 해지 terminate',
  `terminate_date` date  not null default '1970-01-01' 
        comment '해지일',
  `stop_date` date  not null default '1970-01-01' comment '정지일',
  `join_date` date  not null default '1970-01-01' comment '가입일 혹은 재가입일',
  `ap_autobill_YN` char(1) not null default 'Y' 
      comment '정기 결재 여부 기본값 Y, 일회 사용 N',
  `ap_autobill_date` date not null default '1970-01-01'
                 comment '정기 결재일 결재일 기준으로 전송횟수 초기화',
  `ap_datetime` datetime not null default '1970-01-01 09:00:00',
  primary key(ap_no)
  ) comment '2017-11-20 알림톡 결재 리스트';
Taebu commented 6 years ago

image http://prq.co.kr/prq/store/lists/prq_ata_pay/page/1 리스트 페이지 가안 완성

Taebu commented 6 years ago

enum 형태 변경

ALTER TABLE `prq`.`prq_store` 
CHANGE COLUMN `st_status` `st_status` VARCHAR(2) NOT NULL DEFAULT 'wa' ;

각 array_helper get_status array_key 형태로 모두 변경

Taebu commented 6 years ago
-- 예약 전송건 추가
ALTER TABLE `prq`.`prq_ata_pay` 
ADD COLUMN `ap_reserve` INT NOT NULL DEFAULT 0 AFTER `ap_autobill_date`;
-- '271206' 건 대기중이어서 날림
truncate table em_mmt_tran;

각 상점의 설정에 따라 하루 한건 만 전송하도록 설정 및 카운트에 대한 부분 설정.

Taebu commented 6 years ago

first log와 같이 ata_log 를 예약 전송, 즉시 전송, 해지 등등 처리하여 쌓이도록 개선 컬럼 추가 할 것!!!

Taebu commented 6 years ago

금일 알림톡 관련

Taebu commented 6 years ago

어제 /home/biztalk/atasvc start [2017/11/23 14:47:21.195] [ INFO] [main] AtaController readATACF Collector RunTime : [00:00 - 24:00] [2017/11/23 14:47:21.199] [ INFO] [main] AtaController readATACF Sender RunTime : [00:00 - 24:00] .. 중략 기동

Taebu commented 6 years ago
SELECT DATE_ADD(SYSDATE(), INTERVAL 0 MINUTE) as '0min' 
,DATE_ADD(SYSDATE(), INTERVAL 10 MINUTE) as '10min'
,DATE_ADD(SYSDATE(), INTERVAL 20 MINUTE) as '20min'
,DATE_ADD(SYSDATE(), INTERVAL 30 MINUTE) as '30min'
,DATE_ADD(SYSDATE(), INTERVAL 40 MINUTE) as '40min'
,DATE_ADD(SYSDATE(), INTERVAL 50 MINUTE) as '50min'
,DATE_ADD(SYSDATE(), INTERVAL 60 MINUTE) as '60min';

각 분 추가에 대한 설정

Taebu commented 6 years ago

ap_limit 추가

ALTER TABLE `prq`.`prq_ata_pay` 
ADD COLUMN `ap_limit` INT NOT NULL DEFAULT 1000 comment '제한건수' AFTER `ap_price`;

-- 제한건수-합계
ALTER TABLE `prq`.`prq_ata_pay` 
ADD COLUMN `ap_limit_cnt` INT NOT NULL DEFAULT 1000 comment '제한건수-합계' AFTER `ap_limit`;
Taebu commented 6 years ago

트리거 추가

-- 2017-11-27_callerid.cdr.new.trigger
use callerid;

DELIMITER $$

drop TRIGGER IF EXISTS cdr_inserted $$

CREATE TRIGGER cdr_inserted AFTER INSERT ON callerid.cdr FOR EACH ROW
BEGIN
-- 핸드폰 번호인지?
SET @ishp=IF(substr(NEW.callerid,1,2)='01',true,false);
-- kt port 인가?
SET @iskt=IF(NEW.port=0,true,false);

-- 상점 조회 상점이름, 상점번호,매장사장핸드폰 
select
    st_name,st_tel_1,st_hp_1,st_no,st_status,st_ata_YN
INTO
    @st_name,@st_tel,@st_hp,@st_no,@st_status,@st_ata_YN
FROM
    prq.prq_store 
WHERE
    st_port=NEW.port and mb_id=NEW.UserID;
IF(@st_ata_YN='Y')THEN
    /* ATA_PAY_LOG */
    select
     ap_status,ap_autobill_YN,ap_autobill_date,ap_reserve,ap_limit,ap_limit_cnt
    INTO
     @ap_status,@ap_autobill_YN,@ap_autobill_date,@ap_reserve,@ap_limit,@ap_limit_cnt 
     from prq.prq_ata_pay where st_no=@st_no;

    -- 예약시간
    SELECT DATE_ADD(SYSDATE(), INTERVAL @ap_reserve MINUTE) INTO @date_client_req;

    -- 가입상태인가?
    SET @IS_ATA_JOIN=IF(@ap_status='join',true,false);

    -- 정기결재 인가?
    SET @IS_AUTOBILL_YN=IF(@ap_autobill_YN='Y',true,false);

    -- 정기 결제가 아니라 일시결제인경우 지난 여부 측정
    -- 안지났으면 true인 1, 지났으면 false인 0 
    SET @IS_LAST_ATA=(select date_add(@ap_autobill_date,interval 1 month)>=date(sysdate()));

    SET @IS_ATA_SEND=IF(@ap_status="join",true,false);

    /* 가입 상태이고 정기 결제 라면 */
    IF(@IS_ATA_JOIN=true AND @IS_AUTOBILL_YN=true) THEN

    -- 알림톡 발신 대기
    insert into prq.prq_ata_log set 
     `date_client_req`=@date_client_req,
     `at_ismms`='false',
     `at_receiver`=NEW.callerid,
     `at_sender`=NEW.calledid,
     `at_date`=date(now()),
     `at_month_cnt`=@ap_limit_cnt,
     `at_month_limit`=@ap_limit,
     `st_no`=@st_no,
     `at_status`='0',
     `at_result`='',
     `at_datetime`=now();

    /* 가입 상태이고 일시 결제 라면 기간이 안지났으면 */
    ELSEIF(@IS_ATA_JOIN=true AND @IS_AUTOBILL_YN=false AND @IS_LAST_ATA=true) THEN
    insert into prq.prq_ata_log set 
      `date_client_req`=@date_client_req,
      `at_ismms`='false',
      `at_receiver`=NEW.callerid,
      `at_sender`=NEW.calledid,
      `at_date`=date(now()),
      `at_month_cnt`=@ap_limit_cnt,
      `at_month_limit`=@ap_limit,
      `st_no`=@st_no,
      `at_status`='0',
      `at_result`='',
      `at_datetime`=now();

    END IF;

/* 알림톡이 아닌 경우 와 상점 상태에 따른 대기,해지,설치 실패 처리 여부*/
-- wa 31(대기)
ELSEIF (@st_status='wa') THEN
INSERT INTO prq.prq_cdr_tmp SET 
cd_date=NEW.date,
cd_id=NEW.UserID,
cd_state='31',
cd_callerid=NEW.callerid,
cd_port=NEW.port;

-- ca 32(설치실패)
ELSEIF (@st_status='ca') THEN
INSERT INTO prq.prq_cdr_tmp SET 
cd_date=NEW.date,
cd_id=NEW.UserID,
cd_state='32',
cd_callerid=NEW.callerid,
cd_port=NEW.port;

-- tm 33 (해지)
ELSEIF (@st_status='tm') THEN
INSERT INTO prq.prq_cdr_tmp SET 
cd_date=NEW.date,
cd_id=NEW.UserID,
cd_state='33',
cd_callerid=NEW.callerid,
cd_port=NEW.port;

/* 알림톡이 아닌 경우 처리중,  */
/* 1.KT port 핸드폰 전화인 경우  */
ELSEIF (@iskt AND @ishp) THEN

INSERT INTO prq.prq_cdr SET 
cd_date=NEW.date,
cd_id=NEW.UserID,
cd_port=NEW.port,
cd_callerid=NEW.callerid,
cd_calledid=NEW.calledid;

/* 2. CID 핸드폰 전화인 경우  */
ELSEIF (@iskt=false AND @ishp) THEN

INSERT INTO prq.prq_cdr SET 
cd_date=NEW.date,
cd_id=NEW.UserID,
cd_port=NEW.port,
cd_callerid=NEW.callerid,
cd_name=@st_name,
cd_tel=@st_tel,
cd_hp=@st_hp;

/* 3. KT 일반전화인 경우 */
ELSEIF (@iskt AND @ishp=false) THEN

INSERT INTO prq.prq_cdr SET 
cd_date=NEW.date,
cd_id=NEW.UserID,
cd_port=NEW.port,
cd_callerid=NEW.callerid,
cd_calledid=NEW.calledid;

/* 4. CID 일반전화인 경우 */
ELSEIF (@iskt=false AND @ishp=false) THEN

INSERT INTO prq.prq_cdr_tmp SET 
cd_date=NEW.date,
cd_id=NEW.UserID,
cd_port=NEW.port,
cd_callerid=NEW.callerid,
cd_name=@st_name,
cd_state='2',
cd_tel=@st_tel,
cd_hp=@st_hp;

END IF;
/* IF (NEW.port=0 AND @ishp) THEN */

END $$ 
DELIMITER ;

상태 변화

show triggers;
use prq;
select count(*) cnt from prq_cdr_tmp where cd_state='0';
update prq_cdr_tmp set cd_state='2' where cd_state='0';

SELECT count(*) cnt FROM prq_cdr_tmp WHERE date(cd_date)=date(now());
SELECT cd_state,count(*) cnt FROM prq_cdr_tmp WHERE date(cd_date)=date(now()) group by cd_state;
select date(date_sub(now(),interval 16 day));
SELECT cd_state,count(*) cnt FROM prq_cdr_tmp WHERE date(cd_date)=date(date_sub(now(),interval 1 day)) group by cd_state;
SELECT cd_state,count(*) cnt FROM prq_cdr_tmp WHERE date(cd_date)=date(date_sub(now(),interval 2 day)) group by cd_state;
SELECT cd_state,count(*) cnt FROM prq_cdr_tmp WHERE date(cd_date)=date(date_sub(now(),interval 3 day)) group by cd_state;
SELECT cd_state,count(*) cnt FROM prq_cdr_tmp WHERE date(cd_date)=date(date_sub(now(),interval 4 day)) group by cd_state;
SELECT cd_state,count(*) cnt FROM prq_cdr_tmp WHERE date(cd_date)=date(date_sub(now(),interval 5 day)) group by cd_state;
SELECT cd_state,count(*) cnt FROM prq_cdr_tmp WHERE date(cd_date)=date(date_sub(now(),interval 6 day)) group by cd_state;
SELECT cd_state,count(*) cnt FROM prq_cdr_tmp WHERE date(cd_date)=date(date_sub(now(),interval 7 day)) group by cd_state;
SELECT cd_state,count(*) cnt FROM prq_cdr_tmp WHERE date(cd_date)=date(date_sub(now(),interval 8 day)) group by cd_state;
SELECT cd_state,count(*) cnt FROM prq_cdr_tmp WHERE date(cd_date)=date(date_sub(now(),interval 9 day)) group by cd_state;
SELECT cd_state,count(*) cnt FROM prq_cdr_tmp WHERE date(cd_date)=date(date_sub(now(),interval 10 day)) group by cd_state;
SELECT cd_state,count(*) cnt FROM prq_cdr_tmp WHERE date(cd_date)=date(date_sub(now(),interval 11 day)) group by cd_state;
SELECT cd_state,count(*) cnt FROM prq_cdr_tmp WHERE date(cd_date)=date(date_sub(now(),interval 12 day)) group by cd_state;
SELECT cd_state,count(*) cnt FROM prq_cdr_tmp WHERE date(cd_date)=date(date_sub(now(),interval 13 day)) group by cd_state;
SELECT cd_state,count(*) cnt FROM prq_cdr_tmp WHERE date(cd_date)=date(date_sub(now(),interval 14 day)) group by cd_state;
SELECT cd_state,count(*) cnt FROM prq_cdr_tmp WHERE date(cd_date)=date(date_sub(now(),interval 15 day)) group by cd_state;
SELECT cd_state,count(*) cnt FROM prq_cdr_tmp WHERE date(cd_date)=date(date_sub(now(),interval 16 day)) group by cd_state;
SELECT cd_state,count(*) cnt FROM prq_cdr_tmp WHERE date(cd_date)=date(date_sub(now(),interval 17 day)) group by cd_state;